<?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>219759</bug_id>
          
          <creation_ts>2020-12-10 15:13:14 -0800</creation_ts>
          <short_desc>Enable Metal backend for ANGLE, add non-spirvX compiler path for GLSL to Metal translation</short_desc>
          <delta_ts>2021-01-06 14:52:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>220129</dependson>
          <blocked>220076</blocked>
    
    <blocked>220137</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kyle Piddington">kpiddington</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1713740</commentid>
    <comment_count>0</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 15:13:14 -0800</bug_when>
    <thetext>Enable Metal backend for ANGLE, add non-spirvX compiler path for GLSL to Metal translation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713742</commentid>
    <comment_count>1</comment_count>
      <attachid>415937</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 15:31:05 -0800</bug_when>
    <thetext>Created attachment 415937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713744</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-12-10 15:32:36 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713746</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-10 15:34:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/72200222&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713797</commentid>
    <comment_count>4</comment_count>
      <attachid>415958</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 18:53:18 -0800</bug_when>
    <thetext>Created attachment 415958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713964</commentid>
    <comment_count>5</comment_count>
      <attachid>416012</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-11 10:46:19 -0800</bug_when>
    <thetext>Created attachment 416012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714086</commentid>
    <comment_count>6</comment_count>
      <attachid>416046</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-11 14:13:35 -0800</bug_when>
    <thetext>Created attachment 416046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714093</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-11 14:33:02 -0800</bug_when>
    <thetext>This is amazing work! A couple of comments:

- Does this really enable the Metal backend for ANGLE in WebKit by default? If so, could I suggest doing that in a separate patch? That way if it needs to be turned off due to any regressions, this large patch won&apos;t be reverted.

- While the ANGLE update instructions in WebKit say to update changes.diff, at this point that file is automatically regenerated when ANGLE is rolled into WebKit via the Tools/Scripts/update-angle script. Including the changes in changes.diff doubles the size of this already-large patch, and makes it harder to review, so would you consider skipping that step? (Assuming doing so is OK with the other teammates)

- Could you document in this bug description and in the ChangeLog more precisely what this patch implements? It looks like you&apos;ve implemented support for transform feedback (fantastic!) - it would be really great to document that.

- Would you consider uploading this patch upstream to the ANGLE project per https://github.com/google/angle/blob/master/doc/ContributingCode.md ? The ANGLE developers would love to work with you to get this work integrated upstream.

Will add more comments on the patch itself. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714136</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-11 15:54:20 -0800</bug_when>
    <thetext>We won&apos;t enable this by default yet. I&apos;ve already added an Internal setting for this, which means developers can toggle it (but not people using Safari Technology Preview).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714137</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-11 15:56:03 -0800</bug_when>
    <thetext>We&apos;ll also post this to ANGLE as soon as possible, which is where the official review will happen. Landing it here is our way of testing it on more systems as it is officially integrated into ANGLE, and then copied back to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714138</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-11 15:57:53 -0800</bug_when>
    <thetext>Thanks Dean - all sounds great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714244</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:01:05 -0800</bug_when>
    <thetext>Seems like the patch is too big for the review tool. Here are some comments:

- don&apos;t include changes.diff (Ken mentioned this)
- We can probably leave the complete list of files out of the ChangeLog
- The GCC_PREPROCESSOR_DEFINITIONS should go in the .xcconfig files
- I don&apos;t think we should change ANGLE&apos;s ASSERT macro
- src/common/platform.h checks for iOS &lt; 13, but I don&apos;t believe we support that any more in WebKit
- src/common/utilities.cpp should probably keep the clang #pragma

I&apos;ll fix some of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714245</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:19:59 -0800</bug_when>
    <thetext>This patch broke depth textures on iOS because it removed a bit of code that was intentionally not checking for some required depth formats (because iOS OpenGL doesn&apos;t support them). I expect this backend does support them, so we&apos;ll need to make this a runtime decision based on the backend. However, it should be ok to continue NOT checking :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714246</commentid>
    <comment_count>13</comment_count>
      <attachid>416046</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:35:17 -0800</bug_when>
    <thetext>Comment on attachment 416046
Patch

Before landing I:

- Fixed the depth texture and other failure
- removed changes.diff
- Put the ANGLE_ENABLE_METAL preprocessor definition in the configuration files
- Reverted the changes to ANGLE&apos;s ASSERT
- Reverted the change to the #pragma clang warning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714247</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:45:26 -0800</bug_when>
    <thetext>Committed r270733: &lt;https://trac.webkit.org/changeset/270733&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415937</attachid>
            <date>2020-12-10 15:31:05 -0800</date>
            <delta_ts>2020-12-10 18:53:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201210153058.patch</filename>
            <type>text/plain</type>
            <size>1495934</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uNmJl
MjZhYTAxYWM1NjliYWJmMjg4OGY3MWNmNWU3YzQxYmVhNWIzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQyIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZDMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19h
dXRvZ2VuLmluYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZGODFGRUFFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRv
Z2VuLmluYyAqLzsgfTsKKwkJRkY4MUZFRkUyNTgxOEQ2OTAwODk0RTI0IC8qIGZvcm1hdF9hdXRv
Z2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLzsgfTsKKwkJRkY4MUZG
MDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJCMjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gKi87IH07CisJCUZGODFGRjAz
MjU4MThENjkwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZy
YW1lQnVmZmVyTXRsLmggKi87IH07CisJCUZGODFGRjA0MjU4MThENjkwMDg5NEUyNCAvKiBDb21w
aWxlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi87IH07CisJCUZGODFG
RjA1MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCRTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkYwNjI1ODE4
RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJGMjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRs
Lm1tICovOyB9OworCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDMDI1
ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0gKi87IH07CisJCUZGODFGRjA4MjU4MThE
NjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMxMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVm
ZmVyX3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZGMDkyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGls
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QzIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5oICovOyB9OworCQlGRjgxRkYwQTI1ODE4
RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbnRleHRNdGwu
aCAqLzsgfTsKKwkJRkY4MUZGMEIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUM1
MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi87IH07CisJCUZGODFGRjBD
MjU4MThENkEwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9j
b21tb24ubW0gKi87IH07CisJCUZGODFGRjBEMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfcmVuZGVy
X3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDNzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oICovOyB9OworCQlG
RjgxRkYwRTI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDODI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi87IH07CisJCUZGODFGRjBGMjU4MThENkEwMDg5NEUy
NCAvKiBGcmFtZUJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICov
OyB9OworCQlGRjgxRkYxMTI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDQjI1ODE4RDY4MDA4
OTRFMjQgLyogU2hhZGVyTXRsLmggKi87IH07CisJCUZGODFGRjEyMjU4MThENkEwMDg5NEUyNCAv
KiBTaGFkZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovOyB9OworCQlG
RjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAv
KiBQcm9ncmFtTXRsLm1tICovOyB9OworCQlGRjgxRkYxNDI1ODE4RDZBMDA4OTRFMjQgLyogRGlz
cGxheU10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZGODFGRUNFMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovOyB9OworCQlGRjgx
RkYxQjI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYxNTI1ODE5MENBMDA4
OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggKi87IH07CisJCUZGODFGRjFDMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTYyNTgxOTBDQTAwODk0RTI0IC8q
IFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgKi87IH07CisJCUZGODFGRjFEMjU4MTkwQ0EwMDg5
NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYxNzI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGljVHlwZS5oICovOyB9
OworCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTky
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCAqLzsgfTsKKwkJRkY4
MUZGMUYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYxQTI1ODE5MENBMDA4
OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGNUIyNTgxOTE5
NzAwODk0RTI0IC8qIE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGMjEyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuY3BwICovOyB9Owor
CQlGRjgxRkY1QzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjIy
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovOyB9Owor
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjIzMjU4MTkxOTcwMDg5NEUyNCAvKiBE
ZWJ1Zy5oICovOyB9OworCQlGRjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjQyNTgxOTE5
NzAwODk0RTI0IC8qIE5hbWUuaCAqLzsgfTsKKwkJRkY4MUZGNUYyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICovOyB9OworCQlGRjgxRkY2
MDI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI2MjU4MTkxOTcwMDg5NEUyNCAvKiBN
b2RpZnlTdHJ1Y3QuY3BwICovOyB9OworCQlGRjgxRkY2MTI1ODE5MTk3MDA4OTRFMjQgLyogUmVk
dWNlSW50ZXJmYWNlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYyNzI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxv
Y2tzLmggKi87IH07CisJCUZGODFGRjYyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZh
cmlhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oICovOyB9Owor
CQlGRjgxRkY2MzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
MjkyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCAqLzsg
fTsKKwkJRkY4MUZGNjQyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rp
b25UcmF2ZXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmggKi87IH07CisJCUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1Np
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJCMjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLzsgfTsKKwkJRkY4MUZGNjYyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJDMjU4MTkx
OTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi87IH07
CisJCUZGODFGRjY3MjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMkQyNTgxOTE5NzAwODk0
RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi87IH07CisJCUZGODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAv
KiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMkUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVPdXRBcmdzLmggKi87
IH07CisJCUZGODFGRjY5MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJGMjU4MTkxOTcw
MDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkEyNTgxOTE5ODAwODk0
RTI0IC8qIFN5bWJvbEVudi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYzMDI1ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCAqLzsg
fTsKKwkJRkY4MUZGNkIyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzEyNTgxOTE5
NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovOyB9OworCQlGRjgxRkY2QzI1ODE5MTk4
MDA4OTRFMjQgLyogTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjMyMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuY3BwICovOyB9
OworCQlGRjgxRkY2RDI1ODE5MTk4MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMzMjU4MTkx
OTcwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwICovOyB9OworCQlGRjgxRkY2RTI1ODE5
MTk4MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzQyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNkYyNTgxOTE5
ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBp
bmdUcmF2ZXJzZXIuaCAqLzsgfTsKKwkJRkY4MUZGNzAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3Jp
dGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAgKi87IH07
CisJCUZGODFGRjcxMjU4MTkxOTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNzI1ODE5MTk3MDA4OTRF
MjQgLyogUGlwZWxpbmUuY3BwICovOyB9OworCQlGRjgxRkY3MjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjM4MjU4MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovOyB9OworCQlGRjgxRkY3MzI1ODE5
MTk4MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzOTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi87IH07CisJCUZGODFGRjc0MjU4
MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwICovOyB9OworCQlGRjgxRkY3NTI1ODE5MTk4MDA4
OTRFMjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGM0IyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuaCAqLzsg
fTsKKwkJRkY4MUZGNzYyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0MyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuY3BwICovOyB9OworCQlGRjgxRkY3NzI1
ODE5MTk4MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNEMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovOyB9OworCQlGRjgxRkY3ODI1ODE5MTk4
MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5j
cHAgKi87IH07CisJCUZGODFGRjc5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJl
ZmVyZW5jZXMuaCAqLzsgfTsKKwkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDAy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5oICovOyB9OworCQlGRjgxRkY3QjI1ODE5MTk4MDA4
OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0MTI1ODE5MTk3MDA4
OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgKi87IH07CisJ
CUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDIyNTgxOTE5NzAwODk0
RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi87IH07CisJCUZGODFGRjdEMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLzsgfTsKKwkJRkY4MUZGN0UyNTgxOTE5ODAwODk0
RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5oICovOyB9Owor
CQlGRjgxRkY3RjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwICov
OyB9OworCQlGRjgxRkY4MDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVy
ZW5jZXMuY3BwICovOyB9OworCQlGRjgxRkY4MTI1ODE5MTk4MDA4OTRFMjQgLyogQXN0SGVscGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
NDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLzsgfTsKKwkJRkY4MUZGODIyNTgx
OTE5ODAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lz
dENvbnN0YW50cy5jcHAgKi87IH07CisJCUZGODFGRjgzMjU4MTkxOTgwMDg5NEUyNCAvKiBQaXBl
bGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGNDkyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi87IH07CisJCUZGODFGRjg0MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3
cml0ZVBpcGVsaW5lcy5oICovOyB9OworCQlGRjgxRkY4NTI1ODE5MTk4MDA4OTRFMjQgLyogUmVm
ZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkY0QjI1ODE5MTk3MDA4OTRFMjQgLyogUmVmZXJlbmNlLmggKi87IH07CisJCUZGODFGRjg2
MjU4MTkxOTgwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhv
aXN0Q29uc3RhbnRzLmggKi87IH07CisJCUZGODFGRjg3MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFw
TWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovOyB9OworCQlGRjgxRkY4
ODI1ODE5MTk4MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEUyNTgxOTE5NzAwODk0RTI0IC8qIENv
bnN0YW50TmFtZXMuaCAqLzsgfTsKKwkJRkY4MUZGODkyNTgxOTE5ODAwODk0RTI0IC8qIFJld3Jp
dGVLZXl3b3Jkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY0RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUtleXdvcmRzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGOEEyNTgxOTE5ODAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUwMjU4MTkx
OTcwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgKi87IH07CisJCUZGODFGRjhCMjU4MTkx
OTgwMDg5NEUyNCAvKiBJZEdlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uY3BwICovOyB9
OworCQlGRjgxRkY4QzI1ODE5MTk4MDA4OTRFMjQgLyogRW1pdE1ldGFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MjI1ODE5MTk3MDA4OTRF
MjQgLyogRW1pdE1ldGFsLmggKi87IH07CisJCUZGODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBX
cmFwTWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi87IH07CisJCUZGODFGRjhF
MjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTQyNTgxOTE5NzAwODk0RTI0
IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmggKi87IH07CisJCUZGODFGRjhGMjU4MTkxOTgwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTUyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkwMjU4MTkx
OTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1
Y3QuaCAqLzsgfTsKKwkJRkY4MUZGOTEyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
NTcyNTgxOTE5NzAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovOyB9OworCQlGRjgxRkY5
MjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTgyNTgxOTE5NzAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTMy
NTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1OTI1ODE5MTk3MDA4OTRF
MjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGOTQyNTgxOTE5
ODAwODk0RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovOyB9OworCQlGRjgxRkY5NjI1ODFB
Mzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0IC8qIE1ldGFs
LmZyYW1ld29yayAqLzsgfTsKKwkJRkY4MUZGOUIyNTgxQTNDMjAwODk0RTI0IC8qIE5vZGVUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY5
NzI1ODFBM0MxMDA4OTRFMjQgLyogTm9kZVR5cGUuaCAqLzsgfTsKKwkJRkY4MUZGOUMyNTgxQTND
MjAwODk0RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGOTgyNTgxQTNDMTAwODk0RTI0IC8qIEFzTm9kZS5oICovOyB9Owor
CQlGRjgxRkY5RDI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY5OTI1ODFBM0MxMDA4
OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgKi87IH07CisJCUZGODFGRjlFMjU4MUEzQzIwMDg5
NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkY5QTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5o
ICovOyB9OworCQlGRjgxRkY5RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUFBMjU4MThENjgw
MDg5NEUyNCAvKiBibGl0Lm1ldGFsICovOyB9OworCQlGRjgxRkZBMDI1ODFBRDA0MDA4OTRFMjQg
LyogdmlzaWJpbGl0eS5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsICov
OyB9OworCQlGRjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBRjI1ODE4
RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi87IH07CisJCUZGODFGRkEyMjU4MUFE
MDQwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRUIxMjU4MThENjgwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCAq
LzsgfTsKKwkJRkY4MUZGQTMyNTgxQUQwNDAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCMjI1ODE4
RDY4MDA4OTRFMjQgLyogZ2VuX21pcG1hcC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTQyNTgxQUQw
NDAwODk0RTI0IC8qIGdlbl9pbmRpY2VzLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjMyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9pbmRp
Y2VzLm1ldGFsICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEJ1aWxkUnVsZSBzZWN0aW9uICovCkBAIC0yMDMwLDYgKzIxNjYsMTQzIEBACiAJCUEz
RDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAvKiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVJbmFjdGl2ZUludGVy
ZmFjZVZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDBEMTEy
MDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRkIz
OUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFODAyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9nbHNsYW5nX3V0aWxzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9nbHNsYW5nX3V0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgxMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFt
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1NdGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODIyNTgxOEQ2ODAwODk0RTI0IC8qIERp
c3BsYXlNdGxfYXBpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlN
dGxfYXBpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgzMjU4MThENjgw
MDg5NEUyNCAvKiBTeW5jTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gU3luY010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODQy
NTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFF1ZXJ5TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg1
MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlckJ1ZmZl
ck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlckJ1
ZmZlck10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODgyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9jb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX2NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4OTI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBtdGxfY29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkU4QzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRThEMjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFF1ZXJ5TXRsLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1h
dF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBtdGxfZm9ybWF0X3V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThGMjU4MThENjgwMDg5
NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1GZWVkYmFja010bC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MTI1ODE4RDY4MDA4OTRFMjQgLyogQnVmZmVyTXRs
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQnVmZmVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRhcmdldE10bC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NDI1ODE4RDY4MDA4OTRFMjQg
LyogU3VyZmFjZU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFN1cmZhY2VNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTk1MjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRTk2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfY29t
bWFuZF9idWZmZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTk3MjU4
MThENjgwMDg5NEUyNCAvKiBWZXJ0ZXhBcnJheU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZXJ0ZXhBcnJheU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5ODI1ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdXJmYWNlTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRTk5MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTlBMjU4MThENjgwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFZlcnRleEFycmF5TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tYW5kX2J1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QzI1ODE4RDY4MDA4OTRFMjQgLyogQnVmZmVyTXRsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1ZmZlck10bC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5RDI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX3V0aWxzLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQg
LyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IElPU3VyZmFjZVN1cmZhY2VNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRTlGMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX3Jlc291cmNlcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9yZXNvdXJjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3Jlc291
cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVBMTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gbXRsX3N0YXRlX2NhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkVBMzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZW5kZXJfdXRpbHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAv
KiBUcmFuc2Zvcm1GZWVkYmFja010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJT1N1cmZhY2VTdXJmYWNlTXRsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
VGV4dHVyZU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTcyNTgx
OEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dHVyZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
ODI1ODE4RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNhbXBsZXJNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRUFBMjU4MThENjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5tZXRhbDsgcGF0aCA9IGJsaXQubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5tZXRhbDsgcGF0aCA9IHZpc2liaWxpdHkubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFDMjU4MThENjgwMDg5NEUyNCAvKiBjb25z
dGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uc3RhbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFEMjU4MThENjgwMDg5NEUyNCAvKiBj
b21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxf
ZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUucGFz
Y2FsOyBwYXRoID0gbXRsX2RlZmF1bHRfc2hhZGVyc19zcmNfYXV0b2dlbi5pbmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1
ZmZlci5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBjb3B5X2J1ZmZl
ci5tZXRhbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGZvcm1hdF9hdXRvZ2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RUIxMjU4MThENjgwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
bWV0YWw7IHBhdGggPSBjbGVhci5tZXRhbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gZ2VuX21pcG1hcC5tZXRhbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQjMyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9pbmRpY2VzLm1l
dGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRhbDsgcGF0aCA9IGdlbl9pbmRpY2VzLm1ldGFs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVCdWZmZXJNdGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8q
IENvbXBpbGVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVy
TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUJFMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJGMjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE10bC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8q
IENvbXBpbGVyTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29tcGlsZXJNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUMxMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbXRsX2J1ZmZlcl9wb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRUMyMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9idWZmZXJfcG9v
bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzYyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb21tb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBtdGxfY29tbW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRUM4MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3N0YXRlX2NhY2hlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAvKiBGcmFt
ZUJ1ZmZlck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZy
YW1lQnVmZmVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQTI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQjI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVy
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRlck10bC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hh
ZGVyTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2hhZGVy
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRDI1ODE4RDY4MDA4
OTRFMjQgLyogUHJvZ3JhbU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFByb2dyYW1NdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RUNFMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTYyNTgxOTBDQTAwODk0
RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkYxNzI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGljVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQg
LyogVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkYxQTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjEyNTgxOTE5NzAwODk0RTI0
IC8qIE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIyMjU4MTkxOTcwMDg5NEUy
NCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjQyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyNTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xh
cmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTdHJ1Y3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyNzI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNl
SW50ZXJmYWNlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZHVj
ZUludGVyZmFjZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYy
ODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFbnZpcm9ubWVudFZhcmlhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjI5MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVu
ZGVudEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2NvdmVyRW5j
bG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMkIyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWJ1Z1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGMkMyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYyRDI1ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVtaXRNZXRhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlT3V0QXJncy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3lt
Ym9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBTeW1ib2xz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzAyNTgxOTE5NzAwODk0
RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTeW1ib2xFbnYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzMTI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUtleXdvcmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJld3JpdGVLZXl3b3Jkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9wb3NvcnRTdHJ1Y3RzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzQyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBpbmdUcmF2ZXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2tpcHBpbmdUcmF2ZXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVPdXRBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJld3JpdGVPdXRBcmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBpcGVsaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGMzgyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElkR2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjM5MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNBMjU4MTkxOTcwMDg5
NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcFN5bWJvbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGM0MyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBl
bGluZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZVBp
cGVsaW5lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNEMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXN0SGVscGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQwMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQxMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0MjI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3Jh
bVByZWx1ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3JhbVByZWx1
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDMyNTgxOTE5NzAwODk0
RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xFbnYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVH
bG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkY0NjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2Fi
bGVSZWZlcmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
d3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ3MjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzdEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZGNDgyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvaXN0Q29uc3RhbnRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDkyNTgxOTE5NzAwODk0RTI0
IC8qIFBpcGVsaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpcGVsaW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRBMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZXdyaXRlUGlwZWxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVQaXBlbGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
NEIyNTgxOTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhvaXN0Q29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjREMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcmFwTWFpbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5h
bWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNEYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXdyaXRlS2V5d29yZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY1MDI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3JhbVByZWx1ZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWRHZW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1MjI1ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtaXRNZXRhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1MzI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JhcE1haW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTQyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4
cGxpY2l0VHlwZUNhc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkZEV4
cGxpY2l0VHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU1
MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTYyNTgxOTE5NzAw
ODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2RpZnlTdHJ1Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTcy
NTgxOTE5NzAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUb3Bvc29ydFN0cnVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTgyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVDYXNlRGVj
bGFyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY5NTI1ODFBMzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBNZXRhbC5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL01ldGFsLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY5
ODI1ODFBM0MxMDA4OTRFMjQgLyogQXNOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFzTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY5OTI1
ODFBM0MxMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnRlcm1SZWJ1aWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJtUmVidWlsZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0yMDQ1LDYgKzIz
MTgsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAog
CQkJCTVDQjMwNDk0MURFNDE1NzIwMEQyQzQwNSAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8sCisJCQkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTVDQjMwNDkzMURFNDE1NkIwMEQyQzQwNSAv
KiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMjA1NSw2ICsyMzI5LDggQEAK
IAkJMzEwMTJEOUYxOEI5N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRjIwMjU4MTkxOTcwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKi8sCisJCQkJRkY4MUZGMTgyNTgxOTBDQTAwODk0
RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAqLywKIAkJCQk1Q0JENTk2OTIyODI2QTAwMDAy
QjIyQUEgLyogdHJlZW9wcyAqLywKIAkJCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8sCiAJCQkJNUMxREJCRkIxQjA0Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExT
TC5jcHAgKi8sCkBAIC0yMTQ0LDYgKzI0MjAsNyBAQAogCQkJCTMxQTMzMUQxMUVBNUVEREEwMEZE
MjIwMyAvKiBTZXZlcml0eS5oICovLAogCQkJCTMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBT
aGFkZXJMYW5nLmNwcCAqLywKIAkJCQk1QzFEQkMxQTFCMDQzNzVGMDAyMzU1NTIgLyogU2hhZGVy
VmFycy5jcHAgKi8sCisJCQkJRkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUu
aCAqLywKIAkJCQkzMTVFQkQ0NzFGQ0U0NDI4MDBBQzdBODkgLyogU3RydWN0dXJlSExTTC5jcHAg
Ki8sCiAJCQkJMzE1RUJENzMxRkNFNDQzNDAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuaCAqLywK
IAkJCQk1QzU1RDZEOTIyODI2Qzc4MDBCNUJBMkMgLyogU3ltYm9sLmNwcCAqLywKQEAgLTIxNjAs
NiArMjQzNywxMCBAQAogCQkJCTMxMDEyREZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9y
RVNTTC5oICovLAogCQkJCTMxMDEyREZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCisJCQkJRkY4MUZGMTYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdC5jcHAgKi8sCisJCQkJRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbERpcmVjdC5oICovLAorCQkJCUZGODFGRjE5MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxVdGlscy5jcHAgKi8sCisJCQkJRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRy
YW5zbGF0b3JNZXRhbFV0aWxzLmggKi8sCiAJCQkJMzE1RUJENDAxRkNFNDQyNjAwQUM3QTg5IC8q
IFRyYW5zbGF0b3JWdWxrYW4uY3BwICovLAogCQkJCTMxNUVCRDY2MUZDRTQ0MzEwMEFDN0E4OSAv
KiBUcmFuc2xhdG9yVnVsa2FuLmggKi8sCiAJCQkJNUMxREJDMUQxQjA0Mzc1RjAwMjM1NTUyIC8q
IFR5cGVzLmNwcCAqLywKQEAgLTI1MjIsNiArMjgwMyw3IEBACiAJCTVDNTVENkVBMjI4MjZDOTgw
MEI1QkEyQyAvKiB0cmVldXRpbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJRkY4MUZGOTgyNTgxQTNDMTAwODk0RTI0IC8qIEFzTm9kZS5oICovLAogCQkJ
CUEzMDMwNkZFMjMwNUY2MzYwMDJEQTk3MiAvKiBGaW5kRnVuY3Rpb24uY3BwICovLAogCQkJCUEz
MDMwNkZGMjMwNUY2MzYwMDJEQTk3MiAvKiBGaW5kRnVuY3Rpb24uaCAqLywKIAkJCQk1QzU1RDZF
RDIyODI2Q0IyMDBCNUJBMkMgLyogRmluZE1haW4uY3BwICovLApAQCAtMjUzMiw5ICsyODE0LDEy
IEBACiAJCQkJNUM1NUQ2RUUyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybU5vZGVfdXRpbC5oICov
LAogCQkJCTVDNTVENkY0MjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXIuY3BwICovLAogCQkJCTVDNTVENkY4MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuaCAqLywKKwkJCQlGRjgxRkY5OTI1ODFBM0MxMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5jcHAgKi8sCisJCQkJRkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJl
YnVpbGQuaCAqLywKIAkJCQk1QzU1RDZGMjIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVy
c2UuY3BwICovLAogCQkJCTVDNTVENkYxMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1UcmF2ZXJz
ZS5oICovLAogCQkJCTVDNTVENkY3MjI4MjZDQjMwMEI1QkEyQyAvKiBOb2RlU2VhcmNoLmggKi8s
CisJCQkJRkY4MUZGOTcyNTgxQTNDMTAwODk0RTI0IC8qIE5vZGVUeXBlLmggKi8sCiAJCQkJQTND
M0ZFMTIyNTVEREQ5MjAwQjczMDE4IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFyeWluZy5jcHAg
Ki8sCiAJCQkJQTNDM0ZFMTEyNTVEREQ5MjAwQjczMDE4IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4
VmFyeWluZy5oICovLAogCQkJCTZFQjAxQzFGMjQ3NzI3QTkwMEU1MEIzNSAvKiBSZXBsYWNlQ2xp
cERpc3RhbmNlVmFyaWFibGUuY3BwICovLApAQCAtMjU5MCw2ICsyODc1LDcgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzAwREYxREUzOUYwMzAwRDJDNDA1
IC8qIGdsICovLAorCQkJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLywKIAkJ
CQk2RTMzRThFNzI0RDBEMTk2MDAyMzA5QUMgLyogQnVmZmVySW1wbC5jcHAgKi8sCiAJCQkJNUNC
MzA0QUExREU0MTY0ODAwRDJDNDA1IC8qIEJ1ZmZlckltcGwuaCAqLywKIAkJCQk1Q0IzMDRBQjFE
RTQxNjQ4MDBEMkM0MDUgLyogQ29tcGlsZXJJbXBsLmggKi8sCkBAIC0yNzQ1LDYgKzMwMzEsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1Q0IzMDQ4QjFERTQx
NDM1MDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayAqLywKKwkJCQlGRjgxRkY5NTI1
ODFBMzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrICovLAogCQkJCTVDQjMwNDhEMURFNDE0
NDQwMEQyQzQwNSAvKiBPcGVuR0wuZnJhbWV3b3JrICovLAogCQkJCTVDQjMwNDhGMURFNDE0NTUw
MEQyQzQwNSAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKIAkJCSk7CkBAIC0zMTg3LDYgKzM0
NzQsMTU0IEBACiAJCQlwYXRoID0gaW5jbHVkZS9HTFNMQU5HOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJRkY4MUZFN0YyNTgxOEQ2ODAwODk0RTI0IC8qIG1ldGFsICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkVBOTI1ODE4
RDY4MDA4OTRFMjQgLyogc2hhZGVycyAqLywKKwkJCQlGRjgxRkU5QzI1ODE4RDY4MDA4OTRFMjQg
LyogQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZl
ck10bC5tbSAqLywKKwkJCQlGRjgxRkVCRDI1ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwu
aCAqLywKKwkJCQlGRjgxRkVDMDI1ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0gKi8s
CisJCQkJRkY4MUZFQzQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbnRleHRNdGwuaCAqLywKKwkJCQlG
RjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLywKKwkJCQlGRjgxRkU4
QjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5oICovLAorCQkJCUZGODFGRUNFMjU4MThE
NjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovLAorCQkJCUZGODFGRTgyMjU4MThENjgwMDg5
NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oICovLAorCQkJCUZGODFGRUJDMjU4MThENjgwMDg5NEUy
NCAvKiBGcmFtZUJ1ZmZlck10bC5oICovLAorCQkJCUZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAv
KiBGcmFtZUJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkVBNTI1ODE4RDY4MDA4OTRFMjQgLyog
SU9TdXJmYWNlU3VyZmFjZU10bC5oICovLAorCQkJCUZGODFGRTlFMjU4MThENjgwMDg5NEUyNCAv
KiBJT1N1cmZhY2VTdXJmYWNlTXRsLm1tICovLAorCQkJCUZGODFGRUMxMjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVDNTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLm1tICovLAorCQkJCUZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAv
KiBtdGxfY29tbWFuZF9idWZmZXIuaCAqLywKKwkJCQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovLAorCQkJCUZGODFGRTg4MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggKi8sCisJCQkJRkY4MUZFQzYyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9jb21tb24ubW0gKi8sCisJCQkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb25z
dGFudHMuaCAqLywKKwkJCQlGRjgxRkU5MjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF90
YWJsZV9hdXRvZ2VuLm1tICovLAorCQkJCUZGODFGRThFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxf
Zm9ybWF0X3V0aWxzLmggKi8sCisJCQkJRkY4MUZFODUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9m
b3JtYXRfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5oICovLAorCQkJCUZGODFGRUJFMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFODAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9nbHNsYW5nX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovLAorCQkJCUZGODFGRUJCMjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gKi8sCisJCQkJRkY4MUZFQzcy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLywKKwkJCQlGRjgxRkVBMzI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSAqLywKKwkJCQlGRjgxRkVBMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5oICovLAorCQkJCUZGODFGRTlGMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLm1tICovLAorCQkJCUZGODFGRUM4MjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCAqLywKKwkJCQlGRjgxRkVBMTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovLAorCQkJCUZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLywKKwkJCQlGRjgxRkU5RDI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgxMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFt
TXRsLmggKi8sCisJCQkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0g
Ki8sCisJCQkJRkY4MUZFODQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggKi8sCisJCQkJ
RkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tICovLAorCQkJCUZGODFGRThG
MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwuaCAqLywKKwkJCQlGRjgxRkU4NjI1
ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLm1tICovLAorCQkJCUZGODFGRTkzMjU4
MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCAqLywKKwkJCQlGRjgxRkU5OTI1ODE4
RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovLAorCQkJCUZGODFGRThBMjU4MThE
NjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi8sCisJCQkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8sCisJCQkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8q
IFNoYWRlck10bC5oICovLAorCQkJCUZGODFGRUNDMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFOTgyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAq
LywKKwkJCQlGRjgxRkU5NDI1ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLywKKwkJ
CQlGRjgxRkU4QzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5oICovLAorCQkJCUZGODFGRTgz
MjU4MThENjgwMDg5NEUyNCAvKiBTeW5jTXRsLm1tICovLAorCQkJCUZGODFGRUE3MjU4MThENjgw
MDg5NEUyNCAvKiBUZXh0dXJlTXRsLmggKi8sCisJCQkJRkY4MUZFQTYyNTgxOEQ2ODAwODk0RTI0
IC8qIFRleHR1cmVNdGwubW0gKi8sCisJCQkJRkY4MUZFOTAyNTgxOEQ2ODAwODk0RTI0IC8qIFRy
YW5zZm9ybUZlZWRiYWNrTXRsLmggKi8sCisJCQkJRkY4MUZFQTQyNTgxOEQ2ODAwODk0RTI0IC8q
IFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tICovLAorCQkJCUZGODFGRTk3MjU4MThENjgwMDg5NEUy
NCAvKiBWZXJ0ZXhBcnJheU10bC5oICovLAorCQkJCUZGODFGRTlBMjU4MThENjgwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWV0YWw7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGRjgxRkVBOTI1ODE4RDY4MDA4OTRFMjQgLyog
c2hhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RkY4MUZFQUEyNTgxOEQ2ODAwODk0RTI0IC8qIGJsaXQubWV0YWwgKi8sCisJCQkJRkY4MUZFQjEy
NTgxOEQ2ODAwODk0RTI0IC8qIGNsZWFyLm1ldGFsICovLAorCQkJCUZGODFGRUFEMjU4MThENjgw
MDg5NEUyNCAvKiBjb21tb24uaCAqLywKKwkJCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyog
Y29uc3RhbnRzLmggKi8sCisJCQkJRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8qIGNvcHlfYnVm
ZmVyLm1ldGFsICovLAorCQkJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3JtYXRfYXV0
b2dlbi5oICovLAorCQkJCUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5t
ZXRhbCAqLywKKwkJCQlGRjgxRkVCMjI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX21pcG1hcC5tZXRh
bCAqLywKKwkJCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8sCisJCQkJRkY4MUZFQUIyNTgxOEQ2ODAwODk0RTI0IC8qIHZp
c2liaWxpdHkubWV0YWwgKi8sCisJCQkpOworCQkJcGF0aCA9IHNoYWRlcnM7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJh
bnNsYXRvck1ldGFsRGlyZWN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2Fz
dHMuY3BwICovLAorCQkJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5
cGVDYXN0cy5oICovLAorCQkJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJz
LmNwcCAqLywKKwkJCQlGRjgxRkY0NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICov
LAorCQkJCUZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggKi8sCisJ
CQkJRkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8sCisJCQkJRkY4MUZGMkIy
NTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oICovLAorCQkJCUZGODFGRjI5MjU4MTkxOTcw
MDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZG
MjIyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggKi8sCisJ
CQkJRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXIuY3BwICovLAorCQkJCUZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMkQyNTgxOTE5NzAw
ODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8sCisJCQkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0
IC8qIEVtaXRNZXRhbC5oICovLAorCQkJCUZGODFGRjI4MjU4MTkxOTcwMDg5NEUyNCAvKiBFbnZp
cm9ubWVudFZhcmlhYmxlLmggKi8sCisJCQkJRkY4MUZGNDgyNTgxOTE5NzAwODk0RTI0IC8qIEhv
aXN0Q29uc3RhbnRzLmNwcCAqLywKKwkJCQlGRjgxRkY0QzI1ODE5MTk3MDA4OTRFMjQgLyogSG9p
c3RDb25zdGFudHMuaCAqLywKKwkJCQlGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4u
Y3BwICovLAorCQkJCUZGODFGRjM4MjU4MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovLAorCQkJ
CUZGODFGRjMyMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuY3BwICovLAorCQkJCUZGODFGRjQw
MjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuaCAqLywKKwkJCQlGRjgxRkY1QTI1ODE5MTk3MDA4
OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGMzQy
NTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLywKKwkJCQlG
RjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgKi8sCisJCQkJRkY4MUZG
M0IyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuaCAqLywKKwkJCQlGRjgxRkYyNjI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCAqLywKKwkJCQlGRjgxRkY1NjI1ODE5MTk3
MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi8sCisJCQkJRkY4MUZGMjEyNTgxOTE5NzAwODk0
RTI0IC8qIE5hbWUuY3BwICovLAorCQkJCUZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1l
LmggKi8sCisJCQkJRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmNwcCAqLywK
KwkJCQlGRjgxRkY0OTI1ODE5MTk3MDA4OTRFMjQgLyogUGlwZWxpbmUuaCAqLywKKwkJCQlGRjgx
RkY1MDI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuY3BwICovLAorCQkJCUZGODFG
RjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5oICovLAorCQkJCUZGODFGRjNE
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovLAorCQkJCUZG
ODFGRjI3MjU4MTkxOTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCAqLywKKwkJ
CQlGRjgxRkY0QjI1ODE5MTk3MDA4OTRFMjQgLyogUmVmZXJlbmNlLmggKi8sCisJCQkJRkY4MUZG
NTgyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCAqLywKKwkJ
CQlGRjgxRkY1OTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCAq
LywKKwkJCQlGRjgxRkY0NTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmll
ckRlY2xzLmNwcCAqLywKKwkJCQlGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggKi8sCisJCQkJRkY4MUZGNEYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5jcHAgKi8sCisJCQkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5oICovLAorCQkJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlT3V0QXJncy5jcHAgKi8sCisJCQkJRkY4MUZGMkUyNTgxOTE5NzAwODk0RTI0IC8qIFJl
d3JpdGVPdXRBcmdzLmggKi8sCisJCQkJRkY4MUZGM0MyNTgxOTE5NzAwODk0RTI0IC8qIFJld3Jp
dGVQaXBlbGluZXMuY3BwICovLAorCQkJCUZGODFGRjRBMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlUGlwZWxpbmVzLmggKi8sCisJCQkJRkY4MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3Jp
dGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAgKi8sCisJCQkJRkY4MUZGM0YyNTgxOTE5NzAw
ODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oICovLAorCQkJCUZGODFG
RjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwICov
LAorCQkJCUZGODFGRjM5MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMuaCAqLywKKwkJCQlGRjgxRkYyNTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGMkMyNTgxOTE5NzAwODk0
RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCAqLywKKwkJCQlGRjgx
RkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBpbmdUcmF2ZXJzZXIuaCAqLywKKwkJCQlGRjgx
RkYzMDI1ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCAqLywKKwkJCQlGRjgxRkY0NDI1
ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmggKi8sCisJCQkJRkY4MUZGMzMyNTgxOTE5NzAw
ODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgKi8sCisJCQkJRkY4MUZGNTcyNTgxOTE5NzAw
ODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovLAorCQkJCUZGODFGRjREMjU4MTkxOTcwMDg5
NEUyNCAvKiBXcmFwTWFpbi5jcHAgKi8sCisJCQkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8q
IFdyYXBNYWluLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0zNjEx
LDYgKzQwNDYsNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQTNDNDlDMTUyNTVERjg2NTAwNUU4REY3
IC8qIEFkZEFuZFRydWVUb0xvb3BDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk3MjI4MjZCOUYwMEI1QkEyQyAvKiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGOEUyNTgxOTE5ODAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlw
ZUNhc3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcyNDIyODI3NDc3MDBCNUJBMkMgLyog
YWxpZ25lZF9tZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwN0ExMjMwNjI1QzYwMDJE
QTk3MiAvKiBhbmRyb2lkX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzk5MjMwNjAy
NTMwMDJEQTk3MiAvKiBhbmdsZV9nbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE4LDYgKzQwNTQs
OCBAQAogCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMDhDM0NERDE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFt
cGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4QTIyODI2QjlGMDBCNUJBMkMgLyogQXJy
YXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY5
QzI1ODFBM0MyMDA4OTRFMjQgLyogQXNOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4
MTI1ODE5MTk4MDA4OTRFMjQgLyogQXN0SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMx
REJDMjMxQjA0Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExTTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJERDYxQjA0MzhEMzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFMTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNjMxLDYgKzQwNjksNyBAQAogCQkJCTVDMURCREQ5MUIwNDM4RDMwMDIz
NTU1MiAvKiBCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTE5MURFMzlGMUEwMEQy
QzQwNSAvKiBCdWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REIxREU0MTY0ODAw
RDJDNDA1IC8qIEJ1ZmZlckltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVCMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTE0MThC
OTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJDMjkxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
R0xTTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEN0QxRkNFNDQzNjAwQUM3QTg5IC8qIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjQzLDEzICs0
MDgyLDE3IEBACiAJCQkJMzE1RUJEOUExRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJs
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MThFMURCRkVBMTAwMDYwNjZCOCAvKiBDb2xv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRkIyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJEREQxQjA0MzhEMzAwMjM1NTUyIC8qIENvbXBp
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkMyQzFCMDQzNzVGMDAyMzU1NTIgLyogQ29t
cGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFCMURFMzlGMUEwMEQyQzQwNSAvKiBD
b21waWxlckdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDREQzFERTQxNjQ4MDBEMkM0MDUg
LyogQ29tcGlsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwNDI1ODE4RDY5MDA4
OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QkYzMjU1REY2
OTcwMDVFOERGNyAvKiBjb21wcmVzc2lvbl91dGlsc19wb3J0YWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJERTAxQjA0MzhEMzAwMjM1NTUyIC8qIENvbmZpZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODgyNTgxOTE5ODAwODk0RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDMURCREUxMUIwNDM4RDMwMDIzNTU1MiAvKiBDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRUZBMjU4MThENjkwMDg5NEUyNCAvKiBjb25zdGFudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVu
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRFMzFCMDQzOEQzMDAyMzU1NTIgLyogQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MjcyMzA1RjdDNDAwMkRBOTcyIC8qIENv
bnRleHQuaW5sLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTcsOSArNDEwMCwxMiBAQAogCQkJCTMx
M0JDRTVGMjM2MTEzM0EwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzAxMUQxREUzOUYxQTAwRDJDNDA1IC8qIENvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCMzA0REUxREU0MTY0ODAwRDJDNDA1IC8qIENvbnRleHRJbXBsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRjgxRkYwQTI1ODE4RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUNDRDU5OEUyMjg0RkM0MDAwMThGMkQ4IC8qIGNvcHlpbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNDRDgxNzMxREJGRTk5OTAwNjA2NkI4IC8qIERlYnVnLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0M3RDQ2RjE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjVEMjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGNjUyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MzQyMjgyNzRERTAwQjVCQTJDIC8qIERlY2xhcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjVFMjI4MjZCOUYwMEI1QkEyQyAvKiBEZWNsYXJl
QW5kSW5pdEJ1aWx0aW5zRm9ySW5zdGFuY2VkTXVsdGl2aWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzU1RDY4OTIyODI2QjlGMDBCNUJBMkMgLyogRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuaCBp
biBIZWFkZXJzICovLApAQCAtMzY3Miw2ICs0MTE4LDggQEAKIAkJCQkzMTAxMkUyOTE4Qjk3QjlC
MDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QUYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCMTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRjgxRkY1QzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBl
bmRlbnRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY0MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTVFQkRCQzFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdMX2F1dG9n
ZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREU5MUIwNDM4RDMwMDIzNTU1MiAvKiBEaXNw
bGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxRTI1NURGODhFMDA1RThERjcgLyogRGlz
cGxheUFwcGxlX2FwaS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjc5LDYgKzQxMjcsOCBAQAogCQkJ
CTMxM0JDRTU0MjM2MTEzM0EwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCMzAxMUYxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlHTC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RTIxREU0MTY0ODAwRDJDNDA1IC8qIERpc3BsYXlJbXBsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRjgxRkVEQTI1ODE4RDY5MDA4OTRFMjQgLyogRGlzcGxheU10bC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxf
YXBpLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDOTFGQ0U0NEU0MDBBQzdBODkgLyogZHJp
dmVyX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMxRDI0NzcyNzlBMDBFNTBCMzUg
LyogRWFybHlGcmFnbWVudFRlc3RzT3B0aW1pemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MURCNzk1ODI0OTFDODQ1MDA5ODI4NzggLyogZWdsLmggaW4gSGVhZGVycyAqLywKQEAgLTM2ODks
NiArNDEzOSw3IEBACiAJCQkJQTNDNDlCRjkyNTVERjZFNTAwNUU4REY3IC8qIEVHTFJldXNhYmxl
U3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NjcyMjg0Rjc5NjAwMThGMkQ4IC8qIEVH
TFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QkZBMjU1REY2RTUwMDVFOERGNyAvKiBF
R0xTeW5jSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOEMyNTgxOTE5ODAwODk0RTI0
IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NkEyMjgyNkI5RjAwQjVC
QTJDIC8qIEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTMwMzA2RjcyMzA1RjVFRTAwMkRBOTcyIC8qIEVtdWxhdGVNdWx0aURyYXdTaGFkZXJCdWlsdGlu
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTMyMjgyNkI5RjAwQjVCQTJDIC8qIEVtdWxh
dGVQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzcwMSw2ICs0MTUyLDcgQEAKIAkJCQlB
MzBCNTgyQjIzOERGODI2MDA3OUZEREMgLyogZW50cnlfcG9pbnRzX2dsZXNfM18yX2F1dG9nZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxREI3OTZDMjQ5MUM4RjUwMDk4Mjg3OCAvKiBlbnRyeV9w
b2ludHNfZ2xlc19leHRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MjUyMzA1
RjdDNDAwMkRBOTcyIC8qIGVudHJ5X3BvaW50c191dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGNjIyNTgxOTE5NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDMURCREVCMUIwNDM4RDMwMDIzNTU1MiAvKiBFcnJvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJERTkxRkNFNDUyRDAwQUM3QTg5IC8qIEVycm9yU3RyaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzIyLDYgKzQxNzQsNyBAQAogCQkJCTVDOUZGRjRGMTkx
MDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2QTQyMjgyNkI5RjAwQjVCQTJDIC8qIEZvbGRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RTgxREU0MTY0ODAwRDJDNDA1IC8qIEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZFRkUyNTgxOEQ2OTAwODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzFEQkRGMjFCMDQzOEQzMDAyMzU1NTIgLyogZm9ybWF0dXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTI2MURFMzlGMUEwMEQyQzQwNSAvKiBmb3JtYXR1
dGlsc2dsLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTMzRThFRTI0RDBEMjA5MDAyMzA5QUMgLyog
ZnJhbWVfY2FwdHVyZV91dGlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzMxLDYgKzQxODQsNyBA
QAogCQkJCTVDQjMwMTI4MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDRFQjFERTQxNjQ4MDBEMkM0MDUgLyogRnJhbWVidWZmZXJJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRFQTFERTQxNjQ4MDBEMkM0MDUgLyogRnJhbWVi
dWZmZXJJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjAzMjU4MThENjkwMDg5
NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2RTkyMjgy
NkM3OTAwQjVCQTJDIC8qIEZ1bmN0aW9uTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0
OUMwMDI1NURGNzExMDA1RThERjcgLyogRnVuY3Rpb25zQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMwNTI1NURGNzM1MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNzYwLDYgKzQyMTQsOCBAQAogCQkJCTVDNTVENzJDMjI4Mjc0NzcwMEI1QkEyQyAv
KiBoYXNoX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMzE4Qjk3QjlCMDAzOTA2
MkYgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRGQTFCMDQzOEQzMDAy
MzU1NTIgLyogaGlzdG9ncmFtX21hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODYy
NTgxOTE5ODAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY3MjI1ODE5MTk4MDA4OTRFMjQgLyogSWRHZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
Q0Q4MTc3MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUND
RDU5OTMyMjg0RkM0MDAwMThGMkQ4IC8qIGltYWdlZm9ybWF0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE1RUJEOTYxRkNFNDQzNjAwQUM3QTg5IC8qIEltYWdlRnVuY3Rpb25ITFNMLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM3ODAsMTEgKzQyMzYsMTQgQEAKIAkJCQk1QzFEQkMzMTFCMDQzNzVGMDAy
MzU1NTIgLyogSW50ZXJtTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2RkUyMjgyNkNC
MzAwQjVCQTJDIC8qIEludGVybU5vZGVfdXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3
MDgyMjgyNkNCMzAwQjVCQTJDIC8qIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGOUUyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNTVENzAxMjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1UcmF2
ZXJzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NzcyMjg0RkE4MzAwMThGMkQ4IC8qIElP
U3VyZmFjZVN1cmZhY2VDR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0JDRTU1MjM2MTEzM0Ew
MEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZFRjQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNUVCRDhFMUZDRTQ0MzYwMEFDN0E4OSAvKiBJc0FTVERlcHRoQmVsb3dMaW1p
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjYyNDkxQzg4MjAwOTgyODc4IC8qIGtocnBs
YXRmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3QTI1ODE5MTk4MDA4OTRFMjQgLyog
TGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkMzMjFCMDQzNzVGMDAyMzU1NTIgLyog
bGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZB
QTVBIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGMDFERTQxNjQ4MDBEMkM0
MDUgLyogbG9hZF9mdW5jdGlvbnNfdGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzc5Miw2ICs0
MjUxLDggQEAKIAkJCQkzMTVFQkRGMTFGQ0U0NTJEMDBBQzdBODkgLyogTG9nZ2luZ0Fubm90YXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjc1
MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0M3
RDQ3MzE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
Q0Q4MTkwMURCRkVBMTAwMDYwNjZCOCAvKiBtYXRyaXhfdXRpbHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDMURCQkYyMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzc5OSw5ICs0MjYwLDI0IEBACiAJCQkJQTMwMzA3OEMyMzA1RjhGMDAwMkRBOTcy
IC8qIE1lbW9yeU9iamVjdEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk4MjIyODRGQjkw
MDAxOEYyRDggLyogTWVtb3J5T2JqZWN0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
RUQxRkNFNDUyRDAwQUM3QTg5IC8qIE1lbW9yeVByb2dyYW1DYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGOTAyNTgxOTE5ODAwODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGMDgyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRUEyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9jb21t
YW5kX2J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDcyNTgxOEQ2OTAwODk0RTI0
IC8qIG10bF9jb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ4MjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVERDI1ODE4
RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZFRTQyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRDAyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9nbHNsYW5nX3V0aWxz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYxMDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX29j
Y2x1c2lvbl9xdWVyeV9wb29sLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRDI1ODE4RDZB
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZF
RUYyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjBFMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZGODFGRjVFMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzU1RDY2OTIyODI2QjlGMDBCNUJBMkMgLyogTmFtZUVtYmVkZGVkVW5pZm9y
bVN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzBCMjMwNUY2QjUwMDJEQTk3MiAv
KiBub19kZXN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwNzIyODI2Q0IzMDBC
NUJBMkMgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUIyNTgxQTND
MjAwODk0RTI0IC8qIE5vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDMjFGQ0U0
NEJGMDBBQzdBODkgLyogbnVsbF9mdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRG
OEJDMTY5NzRERUQwMDZGQUE1QSAvKiBudW1lcmljX2xleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNDRDU5NjYyMjg0Rjc5NjAwMThGMkQ4IC8qIE9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4MjEsNiArNDI5Nyw3IEBACiAJCQkJMzEwMTJFNTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNl
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNTExREUzOUY0NzAwRDJDNDA1IC8q
IFBidWZmZXJTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RDIzNjExMzNB
MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
MURCQkY1MUIwNDM2RUMwMDIzNTU1MiAvKiBwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJFMjkxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzU1RDcyNzIyODI3NDc3MDBCNUJBMkMgLyogUG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLywK
QEAgLTM4MzQsOSArNDMxMSwxMSBAQAogCQkJCTVDQjMwNEYzMURFNDE2NDgwMEQyQzQwNSAvKiBQ
cm9ncmFtSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjIxREU0MTY0ODAwRDJDNDA1
IC8qIFByb2dyYW1JbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREU2MUZDRTQ1
MkQwMEFDN0E4OSAvKiBQcm9ncmFtTGlua2VkUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE1RUJERUUxRkNFNDUyRDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzE1RUJEQkIxRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGlu
ZUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDODFGQ0U0NEU0MDBBQzdBODkgLyogUHJv
Z3JhbVBpcGVsaW5lSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGN0MyNTgxOTE5ODAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3NzIy
ODI2QjlGMDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzU1RDZBNTIyODI2QjlGMDBCNUJBMkMgLyogUHJ1bmVOb09wcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDRDgxQjYxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4NDQsMTAgKzQzMjMsMTMgQEAKIAkJCQk1QzFEQkUwNDFCMDQzOEQzMDAyMzU1
NTIgLyogcXVlcnljb252ZXJzaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzIxREUz
OUYxQTAwRDJDNDA1IC8qIFF1ZXJ5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY0MURF
NDE2NDgwMEQyQzQwNSAvKiBRdWVyeUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ0
MjU4MThENjkwMDg5NEUyNCAvKiBRdWVyeU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDgx
N0QxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
NTVENjdDMjI4MjZCOUYwMEI1QkEyQyAvKiBSZWNvcmRDb25zdGFudFByZWNpc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTNDNDlDMTMyNTVERjg2NTAwNUU4REY3IC8qIFJlY29yZFVuaWZvcm1C
bG9ja3NUcmFuc2xhdGVkVG9TdHJ1Y3R1cmVkQnVmZmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJFMDYxQjA0MzhEMzAwMjM1NTUyIC8qIFJlZkNvdW50T2JqZWN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4NTI1ODE5MTk4MDA4OTRFMjQgLyogUmVmZXJl
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1QzIyODI2QjlGMDBCNUJBMkMgLyogUmVn
ZW5lcmF0ZVN0cnVjdE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5QTIyODI2QjlG
MDBCNUJBMkMgLyogUmVtb3ZlQXJyYXlMZW5ndGhNZXRob2QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZFRDdCREYxMjQzMkNDQzQwMEUwMTUwMyAvKiBSZW1vdmVBdG9taWNDb3VudGVyQnVpbHRpbnMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzg2MSwxMSArNDM0MywxMyBAQAogCQkJCTVDQjMwMTM0MURF
MzlGMUEwMEQyQzQwNSAvKiBSZW5kZXJidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNC
MzA0RjYxREU0MTY0ODAwRDJDNDA1IC8qIFJlbmRlcmJ1ZmZlckltcGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwNEY1MURFNDE2NDgwMEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsX21vY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURFMjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY4MURFNDE2NDgwMEQyQzQwNSAv
KiByZW5kZXJlcl91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5N0MyMjg0RkE4MzAw
MThGMkQ4IC8qIFJlbmRlcmVyQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NzIzNjEx
MzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEz
ODFERTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNC
MzAxMzYxREUzOUYxQTAwRDJDNDA1IC8qIHJlbmRlcmVyZ2xfdXRpbHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUUyMjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEzQzQ5QzFBMjU1REY4NkYwMDVFOERGNyAvKiBSZXBsYWNlQXJyYXlP
Zk1hdHJpeFZhcnlpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQjAxQzIyMjQ3NzI3QTkwMEU1
MEIzNSAvKiBSZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzMDMwNzA3MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM4NzYsMTYgKzQzNjAsMjIgQEAKIAkJCQkzMTVFQkRGOTFGQ0U0
NTJEMDBBQzdBODkgLyogUmVzb3VyY2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY2
MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQXRvbWljQ291bnRlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDNTVENjU3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlQXRvbWljRnVuY3Rpb25F
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOTMyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZG
OTIzMDVGNUVFMDAyREE5NzIgLyogUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjgyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVEZmR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY0RTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0
ZURvV2hpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjkxMjI4MjZCOUYwMEI1QkEyQyAv
KiBSZXdyaXRlRWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUUyMjgyNkI5
RjAwQjVCQTJDIC8qIFJld3JpdGVFeHByZXNzaW9uc1dpdGhTaGFkZXJTdG9yYWdlQmxvY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjdEMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlR2xv
YmFsUXVhbGlmaWVyRGVjbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QzE0MjU1REY4NjUw
MDVFOERGNyAvKiBSZXdyaXRlSW50ZXJwb2xhdGVBdE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNkIyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGNjgyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVPdXRBcmdzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NjgyMjgyNkI5RjAwQjVCQTJDIC8q
IFJld3JpdGVSZXBlYXRlZEFzc2lnblRvU3dpenpsZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEz
RDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ2NEYyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVTdHJ1Y3RT
YW1wbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODcyMjgyNkI5RjAwQjVCQTJDIC8q
IFJld3JpdGVUZXhlbEZldGNoT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3OTI1
ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzU1RDY4NDIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWlu
dXNPcGVyYXRvckZsb2F0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4NTIyODI2QjlGMDBC
NUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUM1NUQ3MEEyMjgyNkNCMzAwQjVCQTJDIC8qIFJ1bkF0VGhlRW5kT2ZTaGFkZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzg5NiwxMiArNDM4NiwxNSBAQAogCQkJCTVDMURCRjI4MUIwNDM4RDMw
MDIzNTU1MiAvKiBTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzQTFERTM5RjFB
MDBEMkM0MDUgLyogU2FtcGxlckdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGOTFERTQx
NjQ4MDBEMkM0MDUgLyogU2FtcGxlckltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ5
MjU4MThENjkwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1
RDY4RTIyODI2QjlGMDBCNUJBMkMgLyogU2NhbGFyaXplVmVjQW5kTWF0Q29uc3RydWN0b3JBcmdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcyOTIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBo
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc4RDIzMDVGOEYwMDAyREE5NzIgLyogU2Vt
YXBob3JlR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzJCMjMwNUY4MDAwMDJEQTk3MiAv
KiBTZW1hcGhvcmVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3RDIyODI2QjlGMDBC
NUJBMkMgLyogU2VwYXJhdGVBcnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2OTYyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFyYXRlQXJyYXlJbml0aWFs
aXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZG
NjYyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjcwMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NEMyMjgyNkI5RjAwQjVC
QTJDIC8qIFNlcGFyYXRlRXhwcmVzc2lvbnNSZXR1cm5pbmdBcnJheXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEzRDMyOTAzMjNDRkM1QTMwMDM3NTY1NyAvKiBzZXJpYWxfdXRpbHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzkxMCwxNCArNDQwMywxNyBAQAogCQkJCTVDQjMwMTNDMURFMzlGMUEwMEQy
QzQwNSAvKiBTaGFkZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkExREU0MTY0ODAw
RDJDNDA1IC8qIFNoYWRlckltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREI3OTY0MjQ5MUM4
NzYwMDk4Mjg3OCAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYxMTI1
ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2
NTI0OTFDODc2MDA5ODI4NzggLyogU2hhZGVyVmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjEyMjgyNkI5RjAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCREYwMUZDRTQ1MkQwMEFDN0E4OSAvKiBTaXplZE1SVUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2RjI1ODE5MTk4MDA4OTRFMjQgLyogU2tpcHBpbmdU
cmF2ZXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QzAzMjU1REY3MTkwMDVFOERGNyAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZB
QTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5QjIyODI2
QjlGMDBCNUJBMkMgLyogU3BsaXRTZXF1ZW5jZU9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzFEQkYyQzFCMDQzOEQzMDAyMzU1NTIgLyogU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQjMwMTNFMURFMzlGMUEwMEQyQzQwNSAvKiBTdGF0ZU1hbmFnZXJHTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMUQyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q4MTgxMURCRkU5OTkwMDYwNjZCOCAvKiBTdHJlYW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQjMwNEZCMURFNDE2NDgwMEQyQzQwNSAvKiBTdHJlYW1Qcm9kdWNlcklt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTkyMURCRkVBMTAwMDYwNjZCOCAvKiBzdHJp
bmdfdXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNSwxMiArNDQyMSwxNSBAQAogCQkJCTVD
MURCRjJGMUIwNDM4RDMwMDIzNTU1MiAvKiBTdXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDE0MDFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1Q0IzMDRGRDFERTQxNjQ4MDBEMkM0MDUgLyogU3VyZmFjZUltcGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUU3MjU4MThENjkwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzU1RDZFNjIyODI2Qzc5MDBCNUJBMkMgLyogU3ltYm9sLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRjgxRkY3RTI1ODE5MTk4MDA4OTRFMjQgLyogU3ltYm9sRW52LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNTVENzBEMjI4Mjc0MTQwMEI1QkEyQyAvKiBTeW1ib2xUYWJs
ZV9hdXRvZ2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkQ4NTFGQ0U0NDM2MDBBQzdBODkg
LyogU3ltYm9sVW5pcXVlSWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREI5MUZDRTQ0QkYw
MEFDN0E4OSAvKiBTeW5jR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRENCMUZDRTQ0RTQw
MEFDN0E4OSAvKiBTeW5jSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREIyNTgxOEQ2
OTAwODk0RTI0IC8qIFN5bmNNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTMzMUM3MUVBNUVE
NUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTlD
MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUIx
NTcyMjIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVtSW5mb19pbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zOTM5LDE4ICs0NDM4LDIzIEBACiAJCQkJNUNCMzAxNDIxREUzOUYxQTAwRDJDNDA1
IC8qIFRleHR1cmVHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA1MDAxREU0MTY0ODAwRDJD
NDA1IC8qIFRleHR1cmVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGRTFERTQxNjQ4
MDBEMkM0MDUgLyogVGV4dHVyZUltcGxfbW9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZF
RjYyNTgxOEQ2OTAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREY0MUZDRTQ1MkQwMEFDN0E4OSAvKiBUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
MURCQkY3MUIwNDM2RUMwMDIzNTU1MiAvKiB0bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRG
OEMyMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGOTEyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTMwMzA3MjAyMzA1RjdDNDAwMkRBOTcyIC8qIHRyYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUEzMzFFMjFFQTVFRkI4MDBGRDIyMDMgLyogdHJhY2VfZXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCRjM0MUIwNDM4RDMwMDIzNTU1MiAvKiBUcmFuc2Zvcm1GZWVkYmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDQxREUzOUYxQTAwRDJDNDA1IC8qIFRyYW5zZm9y
bUZlZWRiYWNrR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAyMURFNDE2NDgwMEQyQzQw
NSAvKiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAx
MURFNDE2NDgwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0ltcGxfbW9jay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFREYyNTgxOEQ2OTAwODk0RTI0IC8qIFRyYW5zZm9ybUZlZWRiYWNr
TXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJh
bnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYy
RiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMUIyNTgxOTBD
QTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGMUYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTVFQkQ5RDFGQ0U0NDM2MDBBQzdBODkgLyogVHJhbnNsYXRvclZ1bGth
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4NjIyODI2QjlGMDBCNUJBMkMgLyogVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLywKQEAgLTQwMTAsMTEgKzQ1MTQsMTMgQEAK
IAkJCQk1QzFEQkY0MDFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDQjMwMTQ2MURFMzlGMUEwMEQyQzQwNSAvKiBWZXJ0ZXhBcnJheUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMzFERTQxNjQ4MDBEMkM0MDUgLyogVmVydGV4QXJyYXlJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFNjI1ODE4RDY5MDA4OTRFMjQgLyogVmVy
dGV4QXJyYXlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCRjQyMUIwNDM4RDMwMDIzNTU1
MiAvKiBWZXJ0ZXhBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzAwMjI4MjZD
QjMwMEI1QkEyQyAvKiBWaXNpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMxQjYxODMyMzBCNzQ3
RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZhY2VDR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0JD
RTVFMjM2MTEzM0EwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE1RUJERkExRkNFNDUyRDAwQUM3QTg5IC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGOEQyNTgxOTE5ODAwODk0RTI0IC8qIFdyYXBNYWluLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzU1RDY3NTIyODI2QjlGMDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRl
bWVudHNJbkJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NTEyMjg0RUNEMTAwMThG
MkQ4IC8qIHh4aGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpAQCAtNDEzNywxNCArNDY0Mywx
NyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQTNDNDlDMEUyNTVERjg1RjAwNUU4REY3IC8qIEFkZEFu
ZFRydWVUb0xvb3BDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QTkyMjgy
NkJDODAwQjVCQTJDIC8qIEFkZERlZmF1bHRSZXR1cm5TdGF0ZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRjc0MjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDcyMTIyODI3NDc3MDBCNUJBMkMgLyogYWxp
Z25lZF9tZW1vcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA3QTAyMzA2MjVDNjAwMkRB
OTcyIC8qIGFuZHJvaWRfdXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkREMzFCMDQz
OEQzMDAyMzU1NTIgLyogYW5nbGV0eXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkJG
MDFCMDQzNkVDMDAyMzU1NTIgLyogYW5nbGV1dGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkFBMjI4MjZCQzgwMEI1QkEyQyAvKiBBcnJheVJldHVyblZhbHVl
VG9PdXRQYXJhbWV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzgyNTgxOTE5ODAw
ODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDMjIxQjA0
Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRENTFCMDQzOEQzMDAyMzU1NTIgLyogQXR0cmlidXRlTWFwLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjlGMjU4MUFEMDQwMDg5NEUyNCAvKiBibGl0Lm1ldGFsIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNCMzAxMTYxREUzOUYxQTAwRDJDNDA1IC8qIEJsaXRHTC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk2MTIyODRGNzk2MDAxOEYyRDggLyogQmxvYkNhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDMURCQzI0MUIwNDM3NUYwMDIzNTU1MiAvKiBibG9ja2xheW91dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQxNTMsNiArNDY2Miw3IEBACiAJCQkJNUMxREJERDgxQjA0
MzhEMzAwMjM1NTUyIC8qIEJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExODFE
RTM5RjFBMDBEMkM0MDUgLyogQnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkUzM0U4
RTgyNEQwRDFFQjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRTAyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkMyODFCMDQzNzVGMDAyMzU1NTIgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCRDg0MUZD
RTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00MTYxLDEyICs0NjcxLDE0IEBACiAJCQkJNUMxREJEREExQjA0MzhEMzAwMjM1
NTUyIC8qIENhcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QUMyMjgyNkJDODAwQjVC
QTJDIC8qIENsYW1wRnJhZ0RlcHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFEMjI4
MjZCQzgwMEI1QkEyQyAvKiBDbGFtcFBvaW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTVFQkRCRDFGQ0U0NEJGMDBBQzdBODkgLyogQ2xlYXJNdWx0aXZpZXdHTC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTAxMkUxNTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29kZUdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTVFQkQ4QzFGQ0U0NDM2MDBBQzdBODkgLyogQ29sbGVjdFZhcmlh
Ymxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxNzE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJEREMxQjA0MzhEMzAwMjM1NTUy
IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTFBMURFMzlGMUEwMEQy
QzQwNSAvKiBDb21waWxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjA3MjU4MThE
NjkwMDg5NEUyNCAvKiBDb21waWxlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkYy
MjU1REY2OTcwMDVFOERGNyAvKiBjb21wcmVzc2lvbl91dGlsc19wb3J0YWJsZS5jYyBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMURCRERGMUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNDRDgxQjAxREJGRUE1QzAwNjA2NkI4IC8qIENvbnN0YW50VW5pb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTc3LDYgKzQ2ODksOCBAQAogCQkJCTMxM0JDRTU4MjM2
MTEzM0EwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDExQzFERTM5RjFBMDBEMkM0MDUgLyogQ29udGV4dEdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEREMURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkYwNjI1ODE4RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUZGODFGRkExMjU4MUFEMDQwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRh
bCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OThGMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxNzIxREJGRTk5OTAwNjA2NkI4IC8qIERl
YnVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBk
ZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQxOTIsNiArNDcwNiw4IEBACiAJCQkJMzEwMTJF
MjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3Rp
dmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNjMyNTgxOTE5NzAwODk0RTI0
IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZG
ODFGRjdCMjU4MTkxOTgwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREJFMUZDRTQ0QkYwMEFDN0E4OSAvKiBE
aXNwYXRjaFRhYmxlR0xfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRFODFC
MDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMx
QzI1NURGODg5MDA1RThERjcgLyogRGlzcGxheUFwcGxlX2FwaS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTQxOTksMTIgKzQ3MTUsMTQgQEAKIAkJCQkzMTNCQ0U2MTIzNjExMzNBMDBGQzM5RTUgLyog
RGlzcGxheUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExRTFERTM5RjFBMDBEMkM0
MDUgLyogRGlzcGxheUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwNEUxMURFNDE2NDgw
MEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxNDI1
ODE4RDZBMDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RENDMUZDRTQ0RTQwMEFDN0E4OSAvKiBkcml2ZXJfdXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTMwMzA3OUQyMzA2MjU2NTAwMkRBOTcyIC8qIGRyaXZlcl91dGlsc19tYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQk2RUIwMUMxRTI0NzcyNzlBMDBFNTBCMzUgLyogRWFybHlGcmFnbWVudFRl
c3RzT3B0aW1pemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY3MjU1REY2REYw
MDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
NkEyMjg0Rjc5NjAwMThGMkQ4IC8qIEVHTFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlCRjgyNTVERjZFMTAwNUU4REY3IC8qIEVHTFN5bmNJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUZGODFGRjY3MjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzE1RUJEOTcxRkNFNDQzNjAwQUM3QTg5IC8qIGVtdWxhdGVkX2J1aWx0aW5fZnVu
Y3Rpb25zX2hsc2xfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCMTIyODI2
QkM4MDBCNUJBMkMgLyogRW11bGF0ZUdMRnJhZ0NvbG9yQnJvYWRjYXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUEzMDMwNkZDMjMwNUY1RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hh
ZGVyQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjQyLDExICs0NzYwLDE0IEBACiAJ
CQkJNUMxREJERjMxQjA0MzhEMzAwMjM1NTUyIC8qIEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDMURCREY1MUIwNDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlckF0dGFjaG1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMjcxREUzOUYxQTAwRDJDNDA1IC8qIEZy
YW1lYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEYyNTgxOEQ2QTAwODk0
RTI0IC8qIEZyYW1lQnVmZmVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNkVBMEQ2OTMyMzUx
NUE1QzAwQjg2NTFGIC8qIEZyYW1lQ2FwdHVyZV9tb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkU0MjI4MjZDNzkwMEI1QkEyQyAvKiBGdW5jdGlvbkxvb2t1cC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBM0M0OUMwMjI1NURGNzE0MDA1RThERjcgLyogRnVuY3Rpb25zQ0dMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzA3MjU1REY3MzkwMDVFOERGNyAvKiBGdW5jdGlvbnNF
QUdMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkIxREUzOUYxQTAwRDJDNDA1IC8qIEZ1
bmN0aW9uc0dMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUy
NCAvKiBnZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRkEzMjU4MUFE
MDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
NkIyMjg0Rjc5NjAwMThGMkQ4IC8qIEdMRVMxUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNDRDU5NjMyMjg0Rjc5NjAwMThGMkQ4IC8qIEdMRVMxU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxQkFBQjExREZCNkYzMzAwMjkwNkJCIC8qIGdsb2JhbF9zdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQyNTQsNiArNDc3NSw4IEBACiAJCQkJQTNEMzI5MEIyM0NGQ0I0RDAw
Mzc1NjU3IC8qIGdsc2xhbmdfdGFiX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMx
REJERjgxQjA0MzhEMzAwMjM1NTUyIC8qIEhhbmRsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMTVFQkQ4NjFGQ0U0NDM2MDBBQzdBODkgLyogSGFzaE5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyogSWRHZW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxNzYxREJGRTk5OTAwNjA2NkI4IC8qIEltYWdl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTkxMjI4NEZDNDAwMDE4RjJEOCAvKiBpbWFn
ZWZvcm1hdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEODMxRkNFNDQzNjAwQUM3QTg5
IC8qIEltYWdlRnVuY3Rpb25ITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDI3MCwxMCArNDc5
MywxMyBAQAogCQkJCTVDMURCQzMwMUIwNDM3NUYwMDIzNTU1MiAvKiBJbnRlcm1Ob2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzA5MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2Rl
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDQyMjgyNkNCMzAwQjVCQTJDIC8q
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RDI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDcwMjIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NzkyMjg0RkE4MzAwMThGMkQ4IC8qIElPU3VyZmFjZVN1cmZhY2VD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNUMyMzYxMTMzQTAwRkMzOUU1IC8qIElP
U3VyZmFjZVN1cmZhY2VFQUdMLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUQyNTgxOEQ2
OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
MTVFQkQ5QzFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhCNjE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0RUYxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVuY3Rp
b25zX3RhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5OTUyMjg0RkM0
MDAwMThGMkQ4IC8qIGxvYWRpbWFnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyODEsMTIgKzQ4
MDcsMjggQEAKIAkJCQkzMTVFQkRFODFGQ0U0NTJEMDBBQzdBODkgLyogTG9nZ2luZ0Fubm90YXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFj
cm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTQyNTgxOTE5ODAwODk0
RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZGNjkyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDNTVENzI1MjI4Mjc0NzcwMEI1QkEyQyAvKiBtYXRyaXhfdXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjExQjA0MzZFQzAwMjM1NTUyIC8qIE1lbW9yeUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2NDIyODRGNzk2MDAxOEYyRDggLyogTWVt
b3J5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzhCMjMwNUY4RjAwMDJEQTk3
MiAvKiBNZW1vcnlPYmplY3RHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMzFGQ0U0
NTJEMDBBQzdBODkgLyogTWVtb3J5UHJvZ3JhbUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjYwMjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGMEIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5tbSBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRUU1MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFu
ZF9idWZmZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRFMjQg
LyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUZDMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRUUxMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3RhYmxlX2F1dG9n
ZW4ubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVENTI1ODE4RDY5MDA4OTRFMjQgLyogbXRs
X2Zvcm1hdF91dGlscy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjA1MjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwMjI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFRjIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRp
bHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFRTI1ODE4RDY5MDA4OTRFMjQgLyogbXRs
X3Jlc291cmNlcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYwMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFQzI1ODE4
RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUIy
NTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjYy
MjgyNkJDODAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxNUVCREJGMUZDRTQ0QkYwMEFDN0E4OSAvKiBudWxsX2Z1bmN0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2OTIyODRGNzk2MDAxOEYyRDggLyogT2JzZXJ2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzA2LDYgKzQ4NDgsNyBAQAogCQkJCTMxMDEyRTU0
MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUNDRDU5NkYyMjg0Rjk1NTAwMThGMkQ4IC8qIFBidWZmZXJTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTU2MjM2MTEzM0EwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVB
R0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzEyNTgxOTE5ODAwODk0RTI0IC8qIFBp
cGVsaW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREZFMUIwNDM4RDMwMDIzNTU1MiAv
KiBQbGF0Zm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkUyODFGQ0Y4MDhDMDBBQzdB
ODkgLyogUE11ckhhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAw
MzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMTgsOSArNDg2MSwx
MSBAQAogCQkJCTZFRDdCREY2MjQzMkNENjIwMEUwMTUwMyAvKiBQcm9ncmFtRXhlY3V0YWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEyRjFERTM5RjFBMDBEMkM0MDUgLyogUHJvZ3Jh
bUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREVDMUZDRTQ1MkQwMEFDN0E4OSAvKiBQ
cm9ncmFtTGlua2VkUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjEzMjU4
MThENkEwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
RTUxRkNFNDUyRDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMTVFQkRCQTFGQ0U0NEJGMDBBQzdBODkgLyogUHJvZ3JhbVBpcGVsaW5lR0wuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNkVCMDFDMjQyNDc3MjdDMjAwRTUwQjM1IC8qIFByb2dyYW1QaXBl
bGluZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOEEyNTgxOTE5ODAwODk0RTI0
IC8qIFByb2dyYW1QcmVsdWRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkI3MjI4MjZC
QzgwMEI1QkEyQyAvKiBQcnVuZUVtcHR5Q2FzZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1
NUQ2QjgyMjgyNkJDODAwQjVCQTJDIC8qIFBydW5lTm9PcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNDRDgxQjUxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDMyOCw5ICs0ODczLDExIEBACiAJCQkJNUMxREJFMDMxQjA0MzhEMzAwMjM1
NTUyIC8qIHF1ZXJ5Y29udmVyc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMzEx
REUzOUYxQTAwRDJDNDA1IC8qIFF1ZXJ5R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
ODAyMjg0RkI5MDAwMThGMkQ4IC8qIFF1ZXJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkVEQzI1ODE4RDY5MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0NEODE3QzFEQkZFOTk5MDA2MDY2QjggLyogcXVlcnl1dGlscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZCOTIyODI2QkM4MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMEMyNTVERjg1RjAwNUU4REY3IC8qIFJl
Y29yZFVuaWZvcm1CbG9ja3NUcmFuc2xhdGVkVG9TdHJ1Y3R1cmVkQnVmZmVycy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlGRjgxRkY3NzI1ODE5MTk4MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNl
QmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkJBMjI4MjZCQzgwMEI1QkEyQyAv
KiBSZWdlbmVyYXRlU3RydWN0TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QkIy
MjgyNkJDODAwQjVCQTJDIC8qIFJlbW92ZUFycmF5TGVuZ3RoTWV0aG9kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFRDdCREYwMjQzMkNDQzQwMEUwMTUwMyAvKiBSZW1vdmVBdG9taWNDb3VudGVy
QnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQyLDExICs0ODg5LDEzIEBACiAJCQkJ
NUM1NUQ2QzAyMjgyNkJDODAwQjVCQTJDIC8qIFJlbW92ZVVucmVmZXJlbmNlZFZhcmlhYmxlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkUwNzFCMDQzOEQzMDAyMzU1NTIgLyogUmVuZGVy
YnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTMzMURFMzlGMUEwMEQyQzQwNSAv
KiBSZW5kZXJidWZmZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVENjI1ODE4RDY5
MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0
RjcxREU0MTY0ODAwRDJDNDA1IC8qIHJlbmRlcmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQ0Q1OTdBMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5kZXJlckNHTC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTNCQ0U1OTIzNjExMzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM3MURFMzlGMUEwMEQyQzQwNSAvKiBSZW5kZXJlckdM
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM1MURFMzlGMUEwMEQyQzQwNSAvKiByZW5k
ZXJlcmdsX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUU4MjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMxOTI1
NURGODZDMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTZFQjAxQzIxMjQ3NzI3QTkwMEU1MEIzNSAvKiBSZXBsYWNlQ2xpcERpc3Rh
bmNlVmFyaWFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA3MDUyMzA1RjYzNjAwMkRB
OTcyIC8qIFJlcGxhY2VTaGFkb3dpbmdWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
MzU0LDI3ICs0OTAzLDM2IEBACiAJCQkJNUMxREJGMjUxQjA0MzhEMzAwMjM1NTUyIC8qIFJlc291
cmNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDZGQjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVE
NkMxMjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlQXRvbWljRnVuY3Rpb25FeHByZXNzaW9ucy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5MjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0
ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2RkQyMzA1RjVF
RTAwMkRBOTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTMwMzA2RkEyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVEZmR5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENkMyMjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRG9X
aGlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMzIyODI2QkM4MDBCNUJBMkMgLyog
UmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzQyMjgyNkJD
ODAwQjVCQTJDIC8qIFJld3JpdGVFeHByZXNzaW9uc1dpdGhTaGFkZXJTdG9yYWdlQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGN0YyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVH
bG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMwRDI1NURG
ODVGMDA1RThERjcgLyogUmV3cml0ZUludGVycG9sYXRlQXRPZmZzZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGODkyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3MDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91
dEFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzYyNTgxOTE5ODAwODk0RTI0IC8q
IFJld3JpdGVQaXBlbGluZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzUyMjgyNkJD
ODAwQjVCQTJDIC8qIFJld3JpdGVSZXBlYXRlZEFzc2lnblRvU3dpenpsZWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTNEMzI5MTQyM0NGQ0I3NzAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkM2MjI4MjZCQzgwMEI1QkEyQyAv
KiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDRDAwQ0My
NDkxOTZBNTAwNDg2RjI3IC8qIFJld3JpdGVTdHJ1Y3RTYW1wbGVyc09sZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDNzIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVRleGVsRmV0Y2hP
ZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGODAyNTgxOTE5ODAwODk0RTI0IC8q
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZDODIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckZsb2F0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkM5MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdy
aXRlVW5hcnlNaW51c09wZXJhdG9ySW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkZD
MjI4MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDMURCRjI3MUIwNDM4RDMwMDIzNTU1MiAvKiBTYW1wbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwMTM5MURFMzlGMUEwMEQyQzQwNSAvKiBTYW1wbGVyR0wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFRjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQTIyODI2QkM4MDBCNUJBMkMgLyogU2NhbGFyaXpl
VmVjQW5kTWF0Q29uc3RydWN0b3JBcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzI4
MjMwNUY3QzQwMDJEQTk3MiAvKiBTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMw
MzA3OEEyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDNTVENkNCMjI4MjZCQzgwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5Q29uc3RydWN0b3JT
dGF0ZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNDMjI4MjZCQzgwMEI1QkEy
QyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZGOEYyNTgxOTE5ODAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY1RjI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZDRDIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0UyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRXhwcmVzc2lv
bnNSZXR1cm5pbmdBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5ODQyMjg0RkJF
NzAwMThGMkQ4IC8qIHNoYTEuY2MgaW4gU291cmNlcyAqLywKQEAgLTQzODIsNiArNDk0MCw3IEBA
CiAJCQkJNUNCMzAxM0IxREUzOUYxQTAwRDJDNDA1IC8qIFNoYWRlckdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgxMjI4NEZCOTAwMDE4RjJEOCAvKiBTaGFkZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjEyMjU4MThENkEwMDg5NEUyNCAvKiBTaGFkZXJN
dGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkM0MTFCMDQzNzVGMDAyMzU1NTIgLyogU2hh
ZGVyVmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDRjIyODI2QkM4MDBCNUJBMkMg
LyogU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZE
MDIyODI2QkM4MDBCNUJBMkMgLyogU3BsaXRTZXF1ZW5jZU9wZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDM5MywxMSArNDk1MiwxNCBAQAogCQkJCTVDMURCRjJFMUIwNDM4RDMwMDIzNTU1
MiAvKiBTdXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTNGMURFMzlGMUEwMEQy
QzQwNSAvKiBTdXJmYWNlR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0RkMxREU0MTY0
ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUz
MjU4MThENjkwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1
NUQ2RTMyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY2QTI1ODE5MTk4MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDcwRTIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dl
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRBRTFGQ0U0NDM2MDBBQzdBODkgLyogU3lt
Ym9sVW5pcXVlSWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQzAxRkNFNDRCRjAwQUM3
QTg5IC8qIFN5bmNHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVEMzI1ODE4RDY4MDA4
OTRFMjQgLyogU3luY010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzIxMjU1REY5NzMw
MDVFOERGNyAvKiBzeXN0ZW1fdXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMzMxQzYx
RUE1RUQ1RjAwRkQyMjAzIC8qIHN5c3RlbV91dGlsc19tYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUM1NUQ3MzAyMjgyNzQ3NzAwQjVCQTJDIC8qIHN5c3RlbV91dGlsc19wb3NpeC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ0MDksMTMgKzQ5NzEsMTggQEAKIAkJCQkzMTVFQkQ5OTFGQ0U0NDM2
MDBBQzdBODkgLyogVGV4dHVyZUZ1bmN0aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
Q0IzMDE0MTFERTM5RjFBMDBEMkM0MDUgLyogVGV4dHVyZUdMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEZGMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTMxNUVCREYyMUZDRTQ1MkQwMEFDN0E4OSAvKiBUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjYxQjA0MzZFQzAwMjM1NTUyIC8qIHRscy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNkQyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYzMzFCMDQzOEQzMDAyMzU1NTIgLyog
VHJhbnNmb3JtRmVlZGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxNDMxREUzOUYx
QTAwRDJDNDA1IC8qIFRyYW5zZm9ybUZlZWRiYWNrR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRjMyNTgxOEQ2OTAwODk0RTI0IC8qIFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRF
MjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjFFMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTVFQkQ3ODFGQ0U0NDM2MDBBQzdBODkgLyogVHJhbnNsYXRvclZ1bGthbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkM0NDFCMDQzNzVGMDAyMzU1NTIgLyogVHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2RDEyMjgyNkJDODAwQjVCQTJDIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0NjYsMTAgKzUwMzMsMTMg
QEAKIAkJCQkzMTAxMkU3RjE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUMxREJGM0YxQjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTQ1MURFMzlGMUEwMEQyQzQwNSAvKiBWZXJ0ZXhB
cnJheUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUU5MjU4MThENjkwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjQxMUIwNDM4RDMw
MDIzNTU1MiAvKiBWZXJ0ZXhBdHRyaWJ1dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
QTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHkubWV0YWwgaW4gU291cmNlcyAqLywKIAkJ
CQlBMzFCNjE4NDIzMEI3NDdGMDAxNjEwRDcgLyogV2luZG93U3VyZmFjZUNHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxQjE1NzIzMjM2QjgyQkIwMENBQTRGRCAvKiBXaW5kb3dTdXJmYWNlRUFH
TC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREU3MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3Jr
ZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGODcyNTgxOTE5ODAwODk0RTI0
IC8qIFdyYXBNYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQ1MjI4MjZCQzgwMEI1
QkEyQyAvKiBXcmFwU3dpdGNoU3RhdGVtZW50c0luQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQ0Q1OTUwMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2guYyBpbiBTb3VyY2VzICovLAog
CQkJKTsKQEAgLTQ1NTIsNiArNTEyMiwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4
NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewor
CQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklO
RVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBM
RU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxF
X0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FU
SU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9N
RVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OwpAQCAtNDU3
NCw2ICs1MTU1LDE3IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gMzFDREZERUYyNDkxN0Y4OTAwNDg2RjI3IC8qIEFOR0xF
LXN0YXRpYy54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0NDX1BSRVBS
T0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIiQoREVCVUdfREVGSU5FUykiLAorCQkJCQlM
SUJHTEVTVjJfSU1QTEVNRU5UQVRJT04sCisJCQkJCUxJQkFOR0xFX0lNUExFTUVOVEFUSU9OLAor
CQkJCQlBTkdMRV9FTkFCTEVfT1BFTkdMLAorCQkJCQlBTkdMRV9FTkFCTEVfR0xTTCwKKwkJCQkJ
QU5HTEVfRU5BQkxFX0VTU0wsCisJCQkJCUdMX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUdM
RVNfU0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX01FVEFMLAorCQkJCSk7
CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwpAQCAtNDU4MSw2ICs1MTczLDE3IEBACiAJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMzFDREZERUYyNDkxN0Y4OTAwNDg2RjI3IC8qIEFOR0xFLXN0YXRpYy54Y2NvbmZpZyAq
LzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9O
UyA9ICgKKwkJCQkJIiQoREVCVUdfREVGSU5FUykiLAorCQkJCQlMSUJHTEVTVjJfSU1QTEVNRU5U
QVRJT04sCisJCQkJCUxJQkFOR0xFX0lNUExFTUVOVEFUSU9OLAorCQkJCQlBTkdMRV9FTkFCTEVf
T1BFTkdMLAorCQkJCQlBTkdMRV9FTkFCTEVfR0xTTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0VTU0ws
CisJCQkJCUdMX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUdMRVNfU0lMRU5DRV9ERVBSRUNB
VElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX01FVEFMLAorCQkJCSk7CiAJCQl9OwogCQkJbmFtZSA9
IFJlbGVhc2U7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25m
aWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29uZmlnIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZwppbmRleCA2Y2JiZTE3YmVm
MTlhODU4NWNkZTFiOWM0ZWNiYjA2OTg2NGU1MWQ0Li5jNTRkMjczYTAyODI4YTFiNmM1ZDc5ODc5
NjMyMjEzZTIwZWZlOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25m
aWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29uZmlnCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcKQEAgLTQsNyArNCw3
IEBACiBQUk9EVUNUX05BTUUgPSBBTkdMRS1zaGFyZWQ7CiBFWEVDVVRBQkxFX1BSRUZJWCA9IGxp
YjsKIAotQU5HTEVfT1RIRVJfTERGTEFHUyA9IC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmUgLWFs
bG93YWJsZV9jbGllbnQgV2ViQ29yZVRlc3RTdXBwb3J0IC1mcmFtZXdvcmsgUXVhcnR6Q29yZSAt
ZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBJ
T1N1cmZhY2UgJChBTkdMRV9PVEhFUl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpICQoQU5H
TEVfU1RBVElDX0xJQl9PVEhFUl9MREZMQUdTKTsKK0FOR0xFX09USEVSX0xERkxBR1MgPSAtYWxs
b3dhYmxlX2NsaWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9y
dCAtZnJhbWV3b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29y
ayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgTWV0YWwgJChBTkdM
RV9PVEhFUl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpICQoQU5HTEVfU1RBVElDX0xJQl9P
VEhFUl9MREZMQUdTKTsKIEFOR0xFX09USEVSX0xERkxBR1NfaXBob25lb3MgPSAtbHo7CiBBTkdM
RV9PVEhFUl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoQU5HTEVfT1RIRVJfTERGTEFHU19p
cGhvbmVvcyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX3dhdGNob3MgPSAkKEFOR0xFX09USEVSX0xE
RkxBR1NfaXBob25lb3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggZTEwZDExMmM4NTVlMDNmNjVjYjI0M2ZmMTZj
M2Q5YjJlYzA5ZjY4MS4uNmY2YTcyYjlhYjZkZDcyMjg3ZDgyZDZjZmIyMDgxMTIyN2Y2YTc0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hh
ZGVyTGFuZy5oCkBAIC03Myw2ICs3Myw5IEBAIGVudW0gU2hTaGFkZXJPdXRwdXQKICAgICAvLyBP
dXRwdXQgc3BlY2lhbGl6ZWQgR0xTTCB0byBiZSBmZWQgdG8gZ2xzbGFuZyBmb3IgVnVsa2FuIFNQ
SVIgdG8gYmUgY3Jvc3MgY29tcGlsZWQgdG8gTWV0YWwKICAgICAvLyBsYXRlci4KICAgICBTSF9H
TFNMX01FVEFMX09VVFBVVCA9IDB4OEI0QywKKworICAgIC8vIE91dHB1dCBmb3IgTVNMCisgICAg
U0hfTVNMX01FVEFMX09VVFBVVCA9IDB4OEI0RCwKIH07CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVh
dHVyZXNNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVh
dHVyZXNNdGwuaAppbmRleCBmZTVlOGFiZGYwNjA0MWQ2YzEzYjgwM2ZiYmZhMzg4ZDI4Y2NmNWEz
Li45YTBiZWUwMzdhODlmMzFjOGQ4NTcxYTVjMDEzMmNmN2YwOWZiMWE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5o
CkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBv
dGhlciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CiAKICAgICAvLyBTdXBwb3J0IGV4cGxpY2l0
IG1lbW9yeSBiYXJyaWVyCi0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisgICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhhc19leHBsaWNpdF9t
ZW1fYmFycmllciIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIGV4cGxpY2l0
IG1lbW9yeSBiYXJyaWVyIiwgJm1lbWJlcnN9OwogCiAgICAgLy8gU29tZSByZW5kZXJlciBjYW4g
YnJlYWsgcmVuZGVyIHBhc3MgY2hlYXBseSwgaS5lLiBkZXNrdG9wIGNsYXNzIEdQVXMuCkBAIC00
MCw3ICs0MCw3IEBAIHN0cnVjdCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAg
ICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIgZGlzcGF0
Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OwogCiAgICAgLy8gZnJhZ21lbnQgc3RlbmNpbCBv
dXRwdXQgc3VwcG9ydAotICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsiaGFzX3NoYWRl
cl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICBG
ZWF0dXJlIGhhc1N0ZW5jaWxPdXRwdXQgPSB7Imhhc19zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVD
YXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSByZW5kZXJlciBzdXBwb3J0cyBzdGVuY2lsIG91dHB1dCBmcm9tIGZyYWdtZW50IHNoYWRl
ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKIApAQCAtNTks
NiArNTksMTAgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKICAgICBGZWF0
dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFs
RmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0
cyBNVEwoU2hhcmVkKUV2ZW50IiwgJm1lbWJlcnN9OwogCisgICAgRmVhdHVyZSBhbGxvd0lubGlu
ZUNvbnN0VmVydGV4RGF0YSA9IHsKKyAgICAgICAgImFsbG93X2lubGluZV9jb25zdF92ZXJ0ZXhf
ZGF0YSIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5k
ZXJlciBzdXBwb3J0cyB1c2luZyBpbmxpbmUgY29uc3RhbnQgZGF0YSBmb3Igc21hbGwgY2xpZW50
IHZlcnRleCBkYXRhIiwgJm1lbWJlcnN9OworCiAgICAgLy8gT24gbWFjb3MsIHNlcGFyYXRlIGRl
cHRoICYgc3RlbmNpbCBidWZmZXJzIGFyZSBub3Qgc3VwcHJvdGVkLiBIb3dldmVyLCBvbiBpT1Mg
ZGV2aWNlcywKICAgICAvLyB0aGV5IGFyZSBzdXBwcm90ZWQ6CiAgICAgRmVhdHVyZSBhbGxvd1Nl
cGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CkBAIC02Nyw2ICs3MSwyMSBAQCBzdHJ1Y3Qg
RmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAid2hlcmVhcyBvdGhlcnMgc3Vj
aCBhcyBtYWNPUyBkb24ndCIsCiAgICAgICAgICZtZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxs
b3dSdW50aW1lU2FtcGxlckNvbXBhcmVNb2RlID0geworICAgICAgICAiYWxsb3dfcnVudGltZV9z
YW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAg
ICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBt
b2RlIG91dHNpZGUgc2hhZGVycyIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dTYW1w
bGVyQ29tcGFyZUdyYWRpZW50ID0geworICAgICAgICAiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2dy
YWRpZW50IiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAiVGhlIHJl
bmRlcmVyIHN1cHBvcnRzIHNhbXBsZV9jb21wYXJlIHdpdGggZ3JhZGllbnRzIiwgJm1lbWJlcnN9
OworCisgICAgRmVhdHVyZSBhbGxvd1NhbXBsZXJDb21wYXJlTG9kID0geyJhbGxvd19zYW1wbGVy
X2NvbXBhcmVfbG9kIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHNhbXBs
ZV9jb21wYXJlIHdpdGggbG9kIiwgJm1lbWJlcnN9OworCisgICAgRmVhdHVyZSBhbGxvd0J1ZmZl
clJlYWRXcml0ZSA9IHsiYWxsb3dfYnVmZmVyX3JlYWRfd3JpdGUiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhl
IHJlbmRlcmVyIHN1cHBvcnRzIGJ1ZmZlciByZWFkICYgd3JpdGUgaW4gdGhlIHNhbWUgc2hhZGVy
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKwogICAg
IEZlYXR1cmUgYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZSA9IHsKICAgICAgICAgImFs
bG93X21zYWFfc3RvcmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgTVNBQSBzdG9yZSBhbmQgcmVzb2x2
ZSBpbiB0aGUgc2FtZSBwYXNzIiwgJm1lbWJlcnN9OwpAQCAtNzUsMTQgKzk0LDI3IEBAIHN0cnVj
dCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlw
c19wZXJfcGFzcyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgIlRo
ZSByZW5kZXJlciBzdXBwb3J0cyBnZW5lcmF0aW5nIG11bHRpcGxlIG1pcG1hcHMgcGVyIHBhc3Mi
LCAmbWVtYmVyc307CiAKKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJm
b3JjZV9kMjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3JjZSBEZXB0aDI0
U3RlbmNpbDggZm9ybWF0IGFzIHVuc3VwcG9ydGVkLiIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1
cmUgYnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJCcmVha2luZyByZW5kZXIgcGFzcyBpcyBhIGNoZWFwIG9wZXJhdGlv
biIsICZtZW1iZXJzfTsKKwogICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewot
ICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlX210bCIsIEZlYXR1cmVDYXRlZ29yeTo6
TWV0YWxGZWF0dXJlcywKLSAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGJvdGggYnVm
ZmVyJ3MgbWVtb3J5IGFsbG9jYXRpb24gb24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5IChzdWNoIGFz
ICIKLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9uIGZv
ciBidWZmZXJzLiIsCisgICAgICAgICJmb3JjZV9idWZmZXJfZ3B1X3N0b3JhZ2UiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9y
dCBib3RoIGJ1ZmZlcicgbWVtb3J5IGFsbG9jYXRpb24gb24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5
IChzdWNoIGFzICIKKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxv
Y2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKICAgICAgICAgJm1lbWJlcnN9
OwogCi0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhf
YXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZv
cm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisgICAgRmVhdHVyZSBmb3JjZU5vbkNT
QmFzZU1pcG1hcEdlbmVyYXRpb24gPSB7CisgICAgICAgICJmb3JjZV9ub25fY3NfbWlwbWFwX2dl
biIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlR1cm4gdGhpcyBm
ZWF0dXJlIG9uIHRvIGRpc2FsbG93IENvbXB1dGUgU2hhZGVyIGJhc2VkIG1pcG1hcCBnZW5lcmF0
aW9uLiBDb21wdXRlIFNoYWRlciAiCisgICAgICAgICJiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbiBt
aWdodCBjYXVzZSBHUFUgaGFuZyBvbiBzb21lIG9sZGVyIGlPUyBkZXZpY2VzLiIsCisgICAgICAg
ICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrID0gewor
ICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1l
dGFsRmVhdHVyZXMsCisgICAgICAgICJUdXJuIHRoaXMgb24gdG8gYWxsb3cgdHJhbnNmb3JtIGZl
ZWRiYWNrIGluIE1ldGFsIHVzaW5nIGEgMi1wYXNzIFZTIGZvciBHTEVTMy4iLCAmbWVtYmVyc307
CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgYW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcAppbmRleCAyN2RkOTMwNWE4YjYzNGUzMzk5Mzc4
MzA3OTM1ZjhhMmI5ZDc2MmJmLi4zYmRjYzMwMGExZDZlNjc3NWMxZDI4YzIxODcyOTcwZmFlZjY5
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xB
bGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwCkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQog
dm9pZCBBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0CiB7CiAgICAgZm9yIChjb25z
dCBBbGxvY2F0aW9uICphbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1Q
cmV2QWxsb2MpCi0gICAgICAgIGFsbG9jLT5jaGVjaygpOworICAgICAgICBhbGxvYy0+Y2hlY2tB
bGxvYygpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgYW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCmluZGV4IDY5Mjk5MmM0MzQzZDhjYTAyM2Ji
MGU3NDNlNWI0ODlmNjNiYzFjNzguLmNkMjY2YTAzYmM1NjIxYjg3MjI5YzVhZTdkN2RhMGI2Mjlm
OWI2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9v
bEFsbG9jLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBBbGxvY2F0aW9uCiAjZW5kaWYKICAgICB9CiAK
LSAgICB2b2lkIGNoZWNrKCkgY29uc3QKKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25zdAogICAg
IHsKICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHByZUd1YXJkKCksIGtHdWFyZEJsb2NrQmVnaW5W
YWwsICJiZWZvcmUiKTsKICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBrR3Vh
cmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmgKaW5kZXggNTVlYmI3YThh
ZTU3OWIyY2ZhOGQzYzVjZjFiZTc5OGRlNWI4MjAyZS4uODNhYjUzMjZjNTUwZGZkNmRkZGEzYmQy
Yjg5NGE1M2U2YmMzMzJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYXBwbGVfcGxhdGZvcm1fdXRpbHMuaApAQCAtMTUsMjQgKzE1LDMyIEBA
CiAKIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVCBvbmx5IGF2YWlsYWJsZSBpbiBNYWNTREsgMTAu
MTUKIAorI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlTVAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxF
X1hDSTogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAzIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0L2lP
UykgbWluIHZlcmlvbnMgaXMKIC8vIGF2YWlsYWJsZToKLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZ
U1QKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRh
bHlzdFZlciwgaU9TVmVyKSBcCiAgICAgICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWND
YXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKIC8vIEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFs
eXN0KSBtaW4gdmVyaW9ucyBpcwogLy8gYXZhaWxhYmxlOgogIyAgICBkZWZpbmUgQU5HTEVfQVBQ
TEVfQVZBSUxBQkxFX1hDKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIpIFwKICAgICAgICAgQGF2YWls
YWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorLy8gQU5H
TEVfQVBQTEVfQVZBSUxBQkxFX0NJOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1z
IChDYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisvLyBhdmFpbGFibGU6CisjICAgIGRlZmlu
ZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAg
ICAgICBAYXZhaWxhYmxlKG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBpT1MgaU9TVmVyLCAq
KQogI2Vsc2UKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBt
YWNDYXRhbHlzdFZlciwgaU9TVmVyKSBcCiAgICAgICAgIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9Y
SShtYWNWZXIsIGlPU1ZlcikKLS8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYg
ZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcwot
Ly8gYXZhaWxhYmxlOgorCiAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFj
VmVyLCBtYWNDYXRhbHlzdFZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsICopCisjICAgIGRl
ZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2
YWlsYWJsZShpT1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKICNlbmRpZgogCiAvLyBBTkdMRV9B
UFBMRV9BVkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9T
WC9pT1MpIG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKLSNkZWZpbmUgQU5HTEVfQVBQTEVfQVZB
SUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgaU9TIGlP
U1ZlciwgKikKKyNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVy
KSBcCisgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVy
LCAqKQorCisvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSTogY2hlY2sgaWYgYSBwYXJ0aWN1bGFy
IGlPUyB2ZXJzaW9uIGlzIGF2YWlsYWJsZQorI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCmluZGV4IGUwMDM3
YTRlMmNiODZiODU3MzM3Yjc1YWYzZWRmN2U3ZTQ3M2U2MzIuLjI4MTcwYTVkNzdlNjY2NWI5NmVi
ODNmZjZkYmNjMmJiZTM0YjA3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKQEAgLTMxMywxMCArMzEzLDE2IEBAIHN0ZDo6b3N0cmVhbSAmRm10SGV4KHN0
ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCiAKIC8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0
aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKICNpZiBkZWZpbmVk
KEFOR0xFX0VOQUJMRV9BU1NFUlRTKQotIyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5D
VElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICI6IiA8PCBfX0xJTkVfXyA8PCAiKTogIiA8PCAjZXhwcmVzc2lvbikpCisjICAgIGRl
ZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9kZWJ1Z3RyYXAoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGludCB4ID0gMDsgLyogVGhpcyBmb3JjZXMgc2FuZSBicmVha3BvaW50
IGxvY2F0aW9uIGF0IGNhbGwgc2l0ZS4gKi8gXAorICAgICAgICAgICAgKHZvaWQpeDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gd2hpbGUgKGZhbHNlKQogI2Vsc2UKICMgICAgZGVmaW5lIEFTU0VSVChjb25kaXRp
b24pIEFOR0xFX0VBVF9TVFJFQU1fUEFSQU1FVEVSUyA8PCAhKGNvbmRpdGlvbikKICNlbmRpZiAg
Ly8gZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MzZiZWE0MjUxM2MyZGQyODVjZDg4MmFkYjhjMGViNjE0NDI0M2VmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1t
CkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHN5c3RlbV91dGlsc19pb3MubW06IElt
cGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorCisjaW5jbHVk
ZSAic3lzdGVtX3V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPENv
cmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPgorI2lu
Y2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisjaW5jbHVk
ZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgYW5nbGUKK3sKK3N0ZDo6
c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKCkKK3sKKworICAgIE5TU3RyaW5nICpleGVjdXRhYmxl
U3RyaW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisgICAgc3Rk
OjpzdHJpbmcgcmVzdWx0KFtleGVjdXRhYmxlU3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCkKK3sK
KyAgICBzdGQ6OnN0cmluZyBleGVjdXRhYmxlUGF0aCA9IEdldEV4ZWN1dGFibGVQYXRoKCk7Cisg
ICAgc2l6ZV90IGxhc3RQYXRoU2VwTG9jICAgICAgPSBleGVjdXRhYmxlUGF0aC5maW5kX2xhc3Rf
b2YoIi8iKTsKKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5nOjpucG9z
KSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsKK30KKwor
Y29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCit7CisgICAgcmV0dXJuICJk
eWxpYiI7Cit9CisKK2RvdWJsZSBHZXRDdXJyZW50VGltZSgpCit7CisgICAgbWFjaF90aW1lYmFz
ZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1l
YmFzZUluZm8pOworCisgICAgZG91YmxlIHNlY29uZENvZWZmID0gdGltZWJhc2VJbmZvLm51bWVy
ICogMWUtOSAvIHRpbWViYXNlSW5mby5kZW5vbTsKKyAgICByZXR1cm4gc2Vjb25kQ29lZmYgKiBt
YWNoX2Fic29sdXRlX3RpbWUoKTsKK30KK30gIC8vIG5hbWVzcGFjZSBhbmdsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCmluZGV4IDYzYjNh
NTljZGY5MWI5MGEwZDA4MjNlN2RjMmRhZTI3YjY4ODRjYjMuLmQwOWUyNzAwODI5ODk3ZmZkYjI0
YWQ1Y2E1YjhiOWQzODU5ZTVlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3V0aWxpdGllcy5jcHAKQEAgLTYsMTEgKzYsNiBAQAogCiAvLyB1dGlsaXRpZXMu
Y3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KIAot
Ly8gT2xkZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2Fy
bmluZyBoZXJlLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSNlbmRpZgotCiAjaW5jbHVkZSAi
Y29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdMRVMzL2dsMy5oIgogI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgpAQCAtNDc2LDYgKzQ3MSw1MCBAQCBpbnQgVmFyaWFibGVDb2x1bW5D
b3VudChHTGVudW0gdHlwZSkKIAogICAgIHJldHVybiAwOwogfQorLyoqCitEZXRlcm1pbmUgdGhl
IG51bWJlciBvZiBhdHRyaWJ1dGUgc2xvdHMgdXNlZCBieSBhIHZhcmlhYmxlIHR5cGUKKyovCitp
bnQgVmFyaWFibGVBdHRyaWJ1dGVDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBj
YXNlIEdMX0lOVDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAgIGNhc2Ug
R0xfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Cisg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
eDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0Ogor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
eDM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGJvb2wgSXNTYW1w
bGVyVHlwZShHTGVudW0gdHlwZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL3V0aWxpdGllcy5oCmluZGV4IDBjN2Q4MTFhNDZlZGU4YzY2NzA1NzBkMzJjMjczNDZi
Y2IxMThjMWEuLmJhNjkzYTI3YWExM2U1YTJmYzM2NDZmMzU0YTkyNTNlMjk0YjYzOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaApAQCAtMzcs
NiArMzcsNyBAQCBzaXplX3QgVmFyaWFibGVJbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwogc2l6
ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZVJvd0Nv
dW50KEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKTsK
K2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKTsKIGJvb2wgSXNTYW1wbGVy
VHlwZShHTGVudW0gdHlwZSk7CiBib29sIElzU2FtcGxlckN1YmVUeXBlKEdMZW51bSB0eXBlKTsK
IGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAppbmRl
eCBhNDQ0NDk5NjVjMDVhZWQ5YzI1NDJhNDA4MWNiMDU3MWYwYWJmNTBhLi5jYWM5ZjQ5OTRiNzE5
ZjgyMWY5MDA1ZDdmZTFkOTYyODAyYzZlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcApAQCAt
MjEsOCArMjEsMTEgQEAKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX1ZVTEtBTgogCiAjaWZkZWYg
QU5HTEVfRU5BQkxFX01FVEFMCi0jICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsLmgiCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgiCiAjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAorI2lmZGVm
IEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJ
UlYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgogCkBAIC02NCwxMSAr
NjcsMTcgQEAgVENvbXBpbGVyICpDb25zdHJ1Y3RDb21waWxlcihzaDo6R0xlbnVtIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dAogICAgIH0KICNlbmRpZiAgLy8gQU5HTEVf
RU5BQkxFX1ZVTEtBTgogCi0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisjaWZkZWYgQU5HTEVf
RU5BQkxFX01FVEFMX1NQSVJWCiAgICAgaWYgKElzT3V0cHV0TWV0YWwob3V0cHV0KSkKICAgICB7
CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvck1ldGFsKHR5cGUsIHNwZWMpOwogICAgIH0K
KyNlbmRpZgorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIGlmIChJc091dHB1dE1ldGFs
RGlyZWN0KG91dHB1dCkpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRh
bERpcmVjdCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgIH0KICNlbmRpZiAgLy8gQU5HTEVfRU5B
QkxFX01FVEFMCiAKICAgICAvLyBVbnN1cHBvcnRlZCBjb21waWxlciBvciB1bmtub3duIGZvcm1h
dC4gUmV0dXJuIG51bGxwdHIgcGVyIHRoZSBzaDo6Q29uc3RydWN0Q29tcGlsZXIgQVBJLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaAppbmRleCA4MzVjOTBhMzU3MmMxMzU4MmFmNTI0YWY5NjlkYWFlMTBjOWUxODBm
Li4xYzA5Y2RhYTgyMTJjM2UxNzc4MDM5MDhmNDdmYTQwMmZjNjkzNzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaApAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgVFNvdXJjZUxvYwogICAgIGludCBsYXN0X2xp
bmU7CiB9OwogCitjb25zdGV4cHIgVFNvdXJjZUxvYyBrTm9Tb3VyY2VMb2N7LTEsIC0xLCAtMSwg
LTF9OworCiAvLwogLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFzZSBjbGFz
c2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIu
Y3BwCmluZGV4IDM0ZDhlMTIxYjZiN2M0YTlmMDEwNGJiYzdkZGVlNDgwNmU0NGYyODIuLjkzMTZl
MmU1MWE3ZTY3MjA4MmQ1MDMxMDgzMjhmMGM1MWJmNGE2MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBib29sIFRDb21waWxlcjo6Y2hlY2tBbmRTaW1wbGlm
eUFTVChUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgc2lt
cGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRf
TUFUX0NPTlNUUlVDVE9SX0FSR1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0cnVjdG9y
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgdW5zaWduZWQgaW50
IHNpbXBsaWZ5U2NhbGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNf
QU5EX01BVF9DT05TVFJVQ1RPUl9BUkdTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JN
YXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAwOwogCiAgICAgLy8gU3BsaXQgbXVsdGkgZGVjbGFyYXRpb25zIGFuZCByZW1vdmUgY2FsbHMg
dG8gYXJyYXkgbGVuZ3RoKCkuCiAgICAgLy8gTm90ZSB0aGF0IFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnMgbmVlZHMgdG8gYmUgcnVuIGJlZm9yZSBhbnkgb3RoZXIgQVNUIHRyYW5zZm9ybWF0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgKaW5kZXggZDBiMjRiYWEzZTc3NjU5MzdhMjQxN2NkMzlkZGFlNTIw
ODk4NjlkMC4uMDQzZGRkNWFkY2NlODFkMDM5NTBjNGI0MzFmYzA2NjA1OTZhMTY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oCkBAIC0zNSw2ICszNSw5IEBAIGNsYXNzIFRQYXJzZUNvbnRleHQ7CiAj
aWZkZWYgQU5HTEVfRU5BQkxFX0hMU0wKIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogI2VuZGlmICAv
LyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorY2xhc3MgVHJh
bnNsYXRvck1ldGFsRGlyZWN0OworI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKIAogLy8K
IC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2hhZGVyIHR5cGUgaXMgR0xTTC4K
QEAgLTYzLDYgKzY2LDkgQEAgY2xhc3MgVFNoSGFuZGxlQmFzZQogI2lmZGVmIEFOR0xFX0VOQUJM
RV9ITFNMCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgp
IHsgcmV0dXJuIDA7IH0KICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKyNpZmRlZiBBTkdM
RV9FTkFCTEVfTUVUQUwKKyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAqZ2V0QXNU
cmFuc2xhdG9yTWV0YWxEaXJlY3QoKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYgIC8vIEFO
R0xFX0VOQUJMRV9NRVRBTAogCiAgIHByb3RlY3RlZDoKICAgICAvLyBNZW1vcnkgYWxsb2NhdG9y
LiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBpbGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAppbmRleCAwMzM1MTcxNTAxZjY2YTdjZWEw
NmE3NWY3MWRkZjJhMDUxNDdiMjQ2Li4xMDRhZmZiYWViNzNlMTZhODhkNjBkZGQyMjQxNDM4Yzcz
MTM5YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcApAQCAtNjcsMTEgKzY3
LDE1IEBAIGJvb2wgSXNWYWxpZFNoaWZ0T2Zmc2V0KGNvbnN0IFRDb25zdGFudFVuaW9uICZyaHMp
CiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotVENvbnN0YW50VW5pb246OlRDb25zdGFu
dFVuaW9uKCkKLXsKLSAgICBpQ29uc3QgPSAwOwotICAgIHR5cGUgICA9IEVidFZvaWQ7Ci19CitU
Q29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKSA6IGlDb25zdCgwKSwgdHlwZShFYnRWb2lk
KSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkp
LCB0eXBlKEVidEludCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9uKHVuc2ln
bmVkIGludCB1KSA6IHVDb25zdCh1KSwgdHlwZShFYnRVSW50KSB7fQorCitUQ29uc3RhbnRVbmlv
bjo6VENvbnN0YW50VW5pb24oZmxvYXQgZikgOiBmQ29uc3QoZiksIHR5cGUoRWJ0RmxvYXQpIHt9
CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0
eXBlKEVidEJvb2wpIHt9CiAKIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAppbmRleCBhNjIzZDY1ZmIxZDU0NTdhMjlk
NzgyZTNkMTNiMDgxODQ4YjJiMGFkLi5kZjUzODU3ZGQzYmY0YjQ4ZmJhYjY1ZWI0ZmViMWUwNDU4
NjEzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0yMCw2ICsyMCwxMCBA
QCBjbGFzcyBUQ29uc3RhbnRVbmlvbgogICBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURQogICAgIFRDb25zdGFudFVuaW9uKCk7CisgICAgVENvbnN0YW50VW5pb24oaW50IGkp
OworICAgIFRDb25zdGFudFVuaW9uKHVuc2lnbmVkIGludCB1KTsKKyAgICBUQ29uc3RhbnRVbmlv
bihmbG9hdCBmKTsKKyAgICBUQ29uc3RhbnRVbmlvbihib29sIGIpOwogCiAgICAgYm9vbCBjYXN0
KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gJmNvbnN0YW50KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW50ZXJtTm9kZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAppbmRleCBiYmRmODY2M2IwNzAxMGVlNjA0MWVlMDkz
ODljOTkxYzZmMTU0MDQ1Li41MTM2ZDIwNjhmNzU0MTdkYTFhMTlmYzNjMTk2MGE1MjczOGE3YzNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1Ob2RlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lz
aW9uIEdldEhpZ2hlclByZWNpc2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQp
CiBUQ29uc3RhbnRVbmlvbiAqVmVjdG9yaXplKGNvbnN0IFRDb25zdGFudFVuaW9uICZjb25zdGFu
dCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcg
VENvbnN0YW50VW5pb25bc2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
IGNvbnN0VW5pb25baV0gPSBjb25zdGFudDsKIAogICAgIHJldHVybiBjb25zdFVuaW9uOwpAQCAt
NDE1LDYgKzQxNSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJt
QmxvY2sgJm5vZGUpCiAgICAgfQogfQogCitUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCit7CisgICAgZm9yIChUSW50
ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kU3RhdGVtZW50KHN0
bXQpOworICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZW1lbnRzLnNpemUoKTsKQEAgLTQ0Niw2ICs0NTQsMzcg
QEAgYm9vbCBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVy
bU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1RJbnRl
cm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBU
SW50ZXJtVHlwZWQgKmluaXRFeHByKQoreworICAgIGlmIChpbml0RXhwcikKKyAgICB7CisgICAg
ICAgIGFwcGVuZERlY2xhcmF0b3IoCisgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3Bl
cmF0b3I6OkVPcEluaXRpYWxpemUsIG5ldyBUSW50ZXJtU3ltYm9sKHZhciksIGluaXRFeHByKSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJ
bnRlcm1TeW1ib2wodmFyKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246OlRJbnRl
cm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRl
Y2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8g
KmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJ
bnRlcm1TeW1ib2woZCkpOworICAgIH0KK30KKworVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJt
RGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBkZWNsYXJh
dG9ycykKKyAgICA6IFRJbnRlcm1EZWNsYXJhdGlvbigpCit7CisgICAgZm9yIChhdXRvICpkIDog
ZGVjbGFyYXRvcnMpCisgICAgeworICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworICAgIH0K
K30KKwogc2l6ZV90IFRJbnRlcm1EZWNsYXJhdGlvbjo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CkBAIC00NjMsOSArNTAyLDEwIEBAIGJv
b2wgVEludGVybURlY2xhcmF0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICpvcmln
aW5hbCwgVEludGVybU5vZGUgKnJlCiAKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxh
Y2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZ2V0U2VxdWVuY2Uo
KS0+c2l6ZSgpOyArK2lpKQorICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZv
ciAoYXV0byAqJm5vZGUgOiBzZXEpCiAgICAgewotICAgICAgICBSRVBMQUNFX0lGX0lTKCgqZ2V0
U2VxdWVuY2UoKSlbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAg
ICAgICAgUkVQTEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDczLDEyICs1MTMsMTMgQEAg
Ym9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZUludGVybmFsKFRJbnRl
cm1Ob2RlICpvcmlnaW5hbCwgVEludGUKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxh
Y2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UgJnJlcGxhY2VtZW50cykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBnZXRTZXF1
ZW5jZSgpLT5iZWdpbigpOyBpdCA8IGdldFNlcXVlbmNlKCktPmVuZCgpOyArK2l0KQorICAgIGF1
dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZvciAoYXV0byBpdCA9IHNlcS5iZWdpbigp
OyBpdCA8IHNlcS5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGlmICgqaXQgPT0gb3JpZ2lu
YWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGl0ID0gZ2V0U2VxdWVuY2UoKS0+ZXJhc2UoaXQp
OwotICAgICAgICAgICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVn
aW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0
KTsKKyAgICAgICAgICAgIHNlcS5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBs
YWNlbWVudHMuZW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00ODgsMTIgKzUyOSwxMyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNlOjpyZXBs
YWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwKIGJvb2wgVElu
dGVybUFnZ3JlZ2F0ZUJhc2U6Omluc2VydENoaWxkTm9kZXMoVEludGVybVNlcXVlbmNlOjpzaXpl
X3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKIHsKLSAgICBpZiAocG9zaXRp
b24gPiBnZXRTZXF1ZW5jZSgpLT5zaXplKCkpCisgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNl
KCk7CisgICAgaWYgKHBvc2l0aW9uID4gc2VxLnNpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkgKyBw
b3NpdGlvbjsKLSAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIGluc2VydGlvbnMuYmVnaW4o
KSwgaW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgYXV0byBpdCA9IHNlcS5iZWdpbigpICsgcG9zaXRp
b247CisgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRpb25zLmVu
ZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA0MCw4ICsxMDgyLDggQEAgVEludGVy
bUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlICZub2Rl
KQogCiBUSW50ZXJtQWdncmVnYXRlICpUSW50ZXJtQWdncmVnYXRlOjpzaGFsbG93Q29weSgpIGNv
bnN0CiB7Ci0gICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5j
ZSgpOwotICAgIGNvcHlTZXEtPmluc2VydChjb3B5U2VxLT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgp
LT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgpLT5lbmQoKSk7CisgICAgYXV0byAmc2VxICAgICAgICAg
ICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKmNvcHlTZXEg
ICA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uoc2VxLmJlZ2luKCksIHNlcS5lbmQoKSk7CiAgICAgVElu
dGVybUFnZ3JlZ2F0ZSAqY29weU5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShtRnVuY3Rpb24s
IG1UeXBlLCBtT3AsIGNvcHlTZXEpOwogICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKICAg
ICByZXR1cm4gY29weU5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKaW5kZXggMzY0Mzg0N2Y2
OGFhZWE2NTBiZGViZjI2ZjNkZDdkMjg3MmI0MDFhMC4uM2I2Zjg3MmMyM2ZmNjVkNmEyNGFhZWVh
MzQyNmVlZmU1Y2UxYThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaApAQCAtNjc0LDYgKzY3
NCw3IEBAIGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJ
bnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoKICAgICBUSW50ZXJtQmxvY2soKSA6IFRJ
bnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJtQmxvY2soc3RkOjppbml0aWFsaXplcl9saXN0PFRJ
bnRlcm1Ob2RlICo+IHN0bXRzKTsKICAgICB+VEludGVybUJsb2NrKCkgb3ZlcnJpZGUge30KIAog
ICAgIFRJbnRlcm1CbG9jayAqZ2V0QXNCbG9jaygpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
QEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVElu
dGVybU5vZGUsIHB1YmxpYyBUSW50ZXJtQWdncmVnYXRlQmFzZQogewogICBwdWJsaWM6CiAgICAg
VEludGVybURlY2xhcmF0aW9uKCkgOiBUSW50ZXJtTm9kZSgpIHt9CisgICAgVEludGVybURlY2xh
cmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKTsKKyAg
ICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJs
ZSAqPiBkZWNsYXJhdG9ycyk7CisgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpOwogICAgIH5USW50ZXJtRGVjbGFy
YXRpb24oKSBvdmVycmlkZSB7fQogCiAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0RlY2xh
cmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3Bw
CmluZGV4IGQwMzg5YWY0M2Y1ZjFhMTRmMjRjZTVmM2FmOWRhOTZmYjhiN2I4YWMuLmZlMmUxOWI5
MTQwNzM4MmNhNmE2ODA4YmMzZjZmZWI5OTVmZWU1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmNwcApA
QCAtMTk2LDcgKzE5Niw4IEBAIHZvaWQgVEZ1bmN0aW9uOjpzaGFyZVBhcmFtZXRlcnMoY29uc3Qg
VEZ1bmN0aW9uICZwYXJhbWV0ZXJzU291cmNlKQogCiBJbW11dGFibGVTdHJpbmcgVEZ1bmN0aW9u
OjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5h
bWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisgICAgSW1tdXRhYmxlU3RyaW5nIG5hbWUg
PSB0aGlzLT5uYW1lKCk7CisgICAgc3RkOjpzdHJpbmcgbmV3TmFtZShuYW1lLmRhdGEoKSwgbmFt
ZS5sZW5ndGgoKSk7CiAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVkTmFtZVNlcGFyYXRv
cjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5oCmluZGV4IGI5Y2Y5MDg5NGU2ZThlM2FiMmM2MjZiMzU5NDE2YzM2YTk2ZmM0MmYu
LjBhYmIxZDQxMTAxMzMyOThkZWEyYmJkM2IyMGUwMDE0MmZlZTg1MjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5oCkBAIC0yMjIsNyArMjIyLDcgQEAgY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wK
ICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9CiAKICAg
ICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc0RlZmlu
ZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSBjb25zdCB7IHJl
dHVybiBkZWZpbmVkOyB9CiAgICAgdm9pZCBzZXRIYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIHsg
bUhhc1Byb3RvdHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtSGFzUHJvdG90eXBlRGVjbGFyYXRpb247IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHAK
aW5kZXggN2U4NDU4ZWM5OTlhMTAyZmJiZTdhYWE4NzEyYzNhMTA2M2FlYmQxYy4uZTlkMWI3MzJl
NDU5ZGEzYjE4YjM4MzM1NzY0NDljNDk4MTZmNWVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRv
Z2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwCkBAIC0zNTY4LDcgKzM1NjgsNyBAQCBj
b25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMTBGMTBGMTBGWzNdID0geyZCdWlsdEluVmFyaWFi
bGU6OmtwdDEwRiwgJkJ1aWx0SW5WYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEZ9OwogY29uc3RleHByIGNvbnN0IFRW
YXJpYWJsZSAqcDIwQjAwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWls
dEluVmFyaWFibGU6OmtwdDAwQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCfTsKLWNvbnN0ZXhwciBjb25zdCBUVmFy
aWFibGUgKnAyMEIwMERbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAmQnVpbHRJ
blZhcmlhYmxlOjprcHQwMER9OworY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIwQjAwRFsy
XSAgICAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFyaWFibGU6Omtw
dDAwRH07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBCMDBIWzJdICAgID0geyZCdWls
dEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBIfTsKIGNvbnN0ZXhw
ciBjb25zdCBUVmFyaWFibGUgKnAyMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0
MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJpYWJs
ZSAqcDIwQjIwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFy
aWFibGU6OmtwdDIwQiwKQEAgLTM2MDksNyArMzYwOSw3IEBAIGNvbnN0ZXhwciBjb25zdCBUVmFy
aWFibGUgKnAyMEYyMEYyMEZbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBGLCAmQnVpbHRJ
blZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWlsdElu
VmFyaWFibGU6OmtwdDIwRn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBCMDBC
WzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBC
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVpbHRJblZh
cmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjAwRFsyXSAg
ICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFibGU6OmtwdDAwRH07
Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBEWzJdICAgICAgID0geyZCdWlsdElu
VmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBEfTsKIGNvbnN0ZXhwciBj
b25zdCBUVmFyaWFibGUgKnAzMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBC
LCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAq
cDMwQjIwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFi
bGU6OmtwdDIwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMzBCMDBCWzNdID0g
eyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBCLApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKaW5kZXggYTFmY2Y4YzlmMTU1ZTFjZGRj
Nzg5NmQ4Yjk0MTczNmEzOTZhODRlNi4uZWE1NjZiMTUzNmIwY2YyNTVhYTE5MjJlNTE4YTk2M2Uw
ZWIyNmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCkBAIC00MSw4
ICs0MSwxNCBAQCBjb25zdCBjaGFyIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWVb
XSA9ICJBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCI7CiBuYW1lc3BhY2UKIHsKIAorY29uc3RleHBy
IEltbXV0YWJsZVN0cmluZyBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lID0K
KyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7Citjb25z
dGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lID0KKyAg
ICBJbW11dGFibGVTdHJpbmcoIkFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCIpOwogY29uc3RleHBy
IEltbXV0YWJsZVN0cmluZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJp
bmcoImNvdmVyYWdlTWFzayIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11SW5zdGFu
Y2VJREZpZWxkICAgICAgPSBJbW11dGFibGVTdHJpbmcoImVtdWxhdGVkSW5zdGFuY2VJRCIpOwog
Y29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUgPSBJbW11
dGFibGVTdHJpbmcoIkFOR0xFV3JpdGVTYW1wbGVNYXNrIik7Citjb25zdGV4cHIgSW1tdXRhYmxl
U3RyaW5nIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVE
aXNjYXJkV3JhcHBlciIpOwogCiBUSW50ZXJtQmluYXJ5ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMsIGNvbnN0IGNoYXIgKmZpZWxkTmFtZSkK
IHsKQEAgLTg2LDYgKzkyLDIxIEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhT
aGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAqY29tCiAgICAgcmV0dXJu
IFJ1bkF0VGhlRW5kT2ZTaGFkZXIoY29tcGlsZXIsIHJvb3QsIGFzc2lnbm1lbnQsIHN5bWJvbFRh
YmxlKTsKIH0KIAorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlEKFRDb21w
aWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcykKK3sKKyAgICAv
LyBlbXVJbnN0YW5jZUlECisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9CisgICAg
ICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0YW5jZUlE
RmllbGQuZGF0YSgpKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2UgdG8gImds
X0luc3RhbmNlSW5kZXgiCisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0gQnVpbHRJ
blZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisKKyAgICByZXR1cm4gUmVwbGFjZVZhcmlh
YmxlV2l0aFR5cGVkKGNvbXBpbGVyLCByb290LCBpbnN0YW5jZUlELCBlbXVJbnN0YW5jZUlEKTsK
K30KKwogLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgogQU5HTEVfTk9fRElT
Q0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAqcm9vdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlLApAQCAtMTIzLDYgKzE0NCwxOCBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wg
SW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290LAogCiB9ICAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCiAKKy8qKiBzdGF0aWMgKi8KK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JN
ZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0dXJuIGtD
b3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKworLyoqIHN0YXRpYyAqLwor
Y29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVk
Q29uc3ROYW1lLmRhdGEoKTsKK30KKwogVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwo
c2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5
cGUsIHNwZWMpCiB7fQogCkBAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRh
bDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICB7CiAgICAgICAgIGF1dG8gbmVn
RmxpcFkgPSBnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMpOwogCisg
ICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgICAgIGlmICghRW11bGF0ZUluc3RhbmNl
SUQodGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGRyaXZlclVuaWZvcm1zKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBBcHBlbmQgZ2xfUG9zaXRpb24ueSBjb3JyZWN0aW9uIHRv
IG1haW4KICAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9u
VG9NYWluKHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBuZWdGbGlwWSkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElu
c2VydCByYXN0ZXJpemVyIGRpc2NhcmQgbG9naWMKLSAgICAgICAgaWYgKCFpbnNlcnRSYXN0ZXJp
emVyRGlzY2FyZExvZ2ljKHJvb3QpKQorICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbiBk
aXNjYXJkIGxvZ2ljCisgICAgICAgIGlmICghaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dp
Yyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzIHRvIGF2
b2lkIHNwaXJ2LWNyb3NzIGRlYWQtY29kZSByZW1vdmluZyB0aGVtIGluIGxhdGVyCisgICAgLy8g
c3RhZ2UuIE9ubHkgZG8gdGhpcyBpZiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgaXMgbm90IHNw
ZWNpZmllZC4KKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSIHx8
IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorICAgICAgICAh
KGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTKSkKKyAgICB7CisgICAg
ICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKyAgICAgICAgZm9yIChjb25zdCBzaDo6U2hhZGVy
VmFyaWFibGUgJnZhciA6IG1PdXRwdXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCF2YXIuYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpc3QucHVz
aF9iYWNrKHZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIUlu
aXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0KSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewor
ICAgICAgICAvLyBGb3Igbm9uIHZvaWQgTVNMIGZyYWdtZW50IGZ1bmN0aW9ucyByZXBsYWNlIGRp
c2NhcmQKKyAgICAgICAgLy8gd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAgICAgICAgaWYg
KG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFyZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKHJvb3QpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBpZiAoIWluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMocm9vdCwgZHJpdmVyVW5pZm9ybXMp
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzUsNiArMzA2LDEz
IEBAIHZvaWQgVHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NEcml2ZXJV
bmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGCiAgICAgVEZpZWxkICpjb3ZlcmFnZU1hc2tGaWVs
ZCA9CiAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNr
RmllbGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAgICAgZmll
bGRzT3V0LT5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVsYXRl
ZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVsZCA9
IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9jKCks
IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAgICAgICBmaWVsZHNPdXQtPnB1c2hfYmFj
ayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KIH0KIAogLy8gQWRkIHNhbXBsZV9tYXNrIHdy
aXRpbmcgdG8gbWFpbiwgZ3VhcmRlZCBieSB0aGUgc3BlY2lhbGl6YXRpb24gY29uc3RhbnQKQEAg
LTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0dXJuIFJ1
bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7CiB9CiAK
LUFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2VydFJhc3Rlcml6ZXJE
aXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KQorQU5HTEVfTk9fRElTQ0FSRCBib29sIFRy
YW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50ZXJtQmxv
Y2sgKnJvb3QpCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmc2luayAgICAgICA9IGdldEluZm9TaW5r
KCkub2JqOwogICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUo
KTsKIAogICAgIC8vIEluc2VydCByYXN0ZXJpemF0aW9uRGlzYWJsZWQgc3BlY2lhbGl6YXRpb24g
Y29uc3RhbnQuCi0gICAgc2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25zdCBib29s
ICIgPDwgbXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lOworICAgIHNpbmsg
PDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJpemF0aW9u
RGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CiAgICAgc2luayA8PCAiID0gZmFsc2U7XG4iOwogCi0g
ICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgdmFyaWFibGUg
cmVmZXJlbmNlLgorICAgIC8vIENyZWF0ZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29u
c3ROYW1lIGFuZCBrUmFzdGVyaXphdGlvbkRpc2NhcmRGdW5jTmFtZSB2YXJpYWJsZQorICAgIC8v
IHJlZmVyZW5jZXMuCiAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOwog
ICAgIGJvb2xUeXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgIFRWYXJpYWJsZSAqZGlz
Y2FyZEVuYWJsZWRWYXIgPQotICAgICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9s
VGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbFR5cGUsIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOwogCiAgICAgLy8gSW5zZXJ0IHRoaXMgY29kZSB0byB0aGUgZW5k
IG9mIG1haW4oKQotICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCkKKyAgICAvLyBp
ZiAoQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQpCiAgICAgLy8gewogICAgIC8vICAgICAgZ2xf
UG9zaXRpb24gPSB2ZWM0KC0zLjAsIC0zLjAsIC0zLjAsIDEuMCk7CiAgICAgLy8gfQpAQCAtMzQx
LDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNl
cnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jawogICAgIHJldHVybiBSdW5BdFRo
ZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwogfQogCisvLyBJ
ZiB0aGUgTVNMIGZyYWdtZW50IHNoYWRlciBpcyBub24tdm9pZCwgd2UgbmVlZCB0byBlbnN1cmUK
Ky8vIHRoYXQgdGhlcmUgaXMgYSByZXR1cm4gYXQgdGhlIGVuZC4gVGhlIE1TTCBjb21waWxlcgor
Ly8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBp
ZiBhbGwKKy8vIHBhdGhzIGxlYWQgdG8gZGlzY2FyZF9mcmFnbWVudCgpLiBTbyB3cmFwIGRpc2Nh
cmQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uLgorLy8gRml4ZXMgZEVRUC1HTEVTMy5mdW5jdGlvbmFs
LnNoYWRlcnMuZGlzY2FyZC5iYXNpY19hbHdheXMKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFu
c2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290
KQoreworICAgIC8vIGJlZm9yZQorICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKyAgICAvLyB7Cisg
ICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworICAgIC8vICAgICBkaXNjYXJkOworICAgIC8v
IH0KKworICAgIC8vIGFmdGVyCisgICAgLy8gdm9pZCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAg
ICAvLyB7CisgICAgLy8gICAgZGlzY2FyZDsKKyAgICAvLyB9CisgICAgLy8gdm9pZCBtYWluICh2
b2lkKQorICAgIC8vIHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAgLy8gICAg
IEFOR0xFRGlzY2FyZFdyYXBwZXIoKTsKKyAgICAvLyB9CisKKyAgICBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICptYWluICAgPSBGaW5kTWFpbihyb290KTsKKyAgICBUSW50ZXJtQmxvY2sgKm1h
aW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisgICAgVEludGVybVNlcXVlbmNl
ICpmdW5jdGlvblNlcXVlbmNlID0gbWFpbkJvZHktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSAqZGlzY2FyZEZ1bmMgICAgID0gbnVsbHB0cjsKKyAgICAvLyBJdGVyYXRlIG92
ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1c2VzCisg
ICAgLy8gb2YgZGlzY2FyZCB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKS4KKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgZnVuY3Rpb25TZXF1ZW5jZS0+c2l6ZSgpOyArK2luZGV4
KQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKmZ1bmN0aW9uTm9kZSA9ICgqZnVuY3Rpb25T
ZXF1ZW5jZSlbaW5kZXhdOworICAgICAgICBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2RlID0gZnVu
Y3Rpb25Ob2RlLT5nZXRBc0JyYW5jaE5vZGUoKTsKKyAgICAgICAgaWYgKGJyYW5jaE5vZGUgIT0g
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyYW5jaE5vZGUtPmdldEZsb3dP
cCgpID09IEVPcEtpbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRpc2Nh
cmRGdW5jID09IG51bGxwdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlZCA9IG1haW5Cb2R5LT5yZXBs
YWNlQ2hpbGROb2RlKGJyYW5jaE5vZGUsIGRpc2NhcmRGdW5jKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVBU1Qocm9vdCk7Cit9CisKKy8vIENyZWF0ZSBkaXNj
YXJkX3dyYXBwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgU1BJUlYtQ3Jvc3Mgd2lsbCBhbHdh
eXMgaGF2ZSBhIHJldHVybiBhdCB0aGUgZW5kCisvLyBvZiBmcmFnbWVudCBzaGFkZXJzCitBTkdM
RV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlz
Y2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
ICZzaW5rICAgICAgID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgVFN5bWJvbFRhYmxlICpzeW1i
b2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOworCisgICAgc2luayA8PCAidm9pZCAiIDw8IGtE
aXNjYXJkV3JhcHBlckZ1bmNOYW1lIDw8ICIoKVxuIjsKKyAgICBzaW5rIDw8ICJ7XG4iOworICAg
IHNpbmsgPDwgIiAgIGRpc2NhcmQ7XG4iOworICAgIHNpbmsgPDwgIn1cbiI7CisKKyAgICBURnVu
Y3Rpb24gKmRpc2NhcmRXcmFwcGVyRnVuYyA9CisgICAgICAgIG5ldyBURnVuY3Rpb24oc3ltYm9s
VGFibGUsIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
LAorICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCks
IHRydWUpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY2FsbERpc2NhcmRXcmFwcGVyRnVuYyA9
CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdy
YXBwZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworICAgIHJldHVybiBjYWxsRGlzY2Fy
ZFdyYXBwZXJGdW5jOworfQorCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsLmgKaW5kZXggMGY0ZjFjY2UyOWEzNTU3YWVkMDE4OGM4ZjYxNzg3NjRlYjAw
MmI0ZC4uYmNjMzE4NzFhNzFkMTQ4YzU2NWQ4Mjc2NTcxYTEzNjMwYTM4NGMyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgKQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNzIFRyYW5z
bGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCiAgIHB1YmxpYzoKICAgICBUcmFu
c2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAKKyAgICBz
dGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpOworICAg
IHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5h
bWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKGJvb2wgZSkgeyBtRW11
bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorCiAgIHByb3RlY3RlZDoKICAgICBBTkdMRV9OT19ESVND
QVJEIGJvb2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCkBAIC0z
Nyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMgVHJhbnNsYXRvclZ1
bGthbgogCiAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFNhbXBsZU1hc2tXcml0aW5n
TG9naWMoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMp
OwotICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2lj
KFRJbnRlcm1CbG9jayAqcm9vdCk7CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJh
c3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KTsKKworICAgIEFOR0xF
X05PX0RJU0NBUkQgYm9vbCByZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKFRJbnRlcm1CbG9jayAq
cm9vdCk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNyZWF0ZURp
c2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAgYm9vbCBtRW11bGF0
ZWRJbnN0YW5jZUlEID0gZmFsc2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlMTAy
MjgyZWUzYWFhZGY2ZjBiNDI1NmY2N2Y1Mzk4YmFlMGU1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisKKyNpbmNsdWRl
ICJhbmdsZV9nbC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Db25z
dGFudE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
S2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3Ry
dWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lRW1iZWRkZWRVbmlmb3Jt
U3RydWN0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3Zl
QXRvbWljQ291bnRlckJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUF0b21pY0NvdW50ZXJzLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNhbXBsZXJz
QXMyREFycmF5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdy
aXRlRGZkeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0
ZVN0cnVjdFNhbXBsZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQnVpbHRJbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Zp
bmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Zp
bmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZFN5
bWJvbE5vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9S
ZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmgiCisKK25hbWVzcGFjZSBzaAoreworCituYW1lc3BhY2UKK3sK
KworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1i
b2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxk
KCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisjaWYgMAor
Y29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0ZVNhbXBsZU1hc2si
KTsKK2NvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBl
ciIpOworI2VuZGlmCitjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zKCJE
ZXB0aFJhbmdlUGFyYW1zIik7Citjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05hbWUoIkFu
Z2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoImFuZ2xlVW5p
Zm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQ
b2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5hbWUga0Zs
aXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworCitjb25zdGV4cHIgY29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAgICAgICA9
ICJ2aWV3cG9ydCI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrSGFsZlJlbmRlckFyZWFbXSAgICAg
ICA9ICJoYWxmUmVuZGVyQXJlYSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrRmxpcFhZW10gICAg
ICAgICAgICAgICA9ICJmbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtd
ICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtDbGlwRGlz
dGFuY2VzRW5hYmxlZFtdID0gImNsaXBEaXN0YW5jZXNFbmFibGVkIjsKK2NvbnN0ZXhwciBjb25z
dCBjaGFyIGtYZmJBY3RpdmVVbnBhdXNlZFtdICAgID0gInhmYkFjdGl2ZVVucGF1c2VkIjsKK2Nv
bnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2Vz
UGVyRHJhdyI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrWGZiQnVmZmVyT2Zmc2V0c1tdICAgICA9
ICJ4ZmJCdWZmZXJPZmZzZXRzIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtBY2JCdWZmZXJPZmZz
ZXRzW10gICAgID0gImFjYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNoYXIga0Rl
cHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVwdGhSYW5nZSI7Citjb25zdGV4cHIgY29uc3QgY2hh
ciBrUHJlUm90YXRpb25bXSAgICAgICAgICA9ICJwcmVSb3RhdGlvbiI7Citjb25zdGV4cHIgY29u
c3QgY2hhciBrRnJhZ1JvdGF0aW9uW10gICAgICAgICA9ICJmcmFnUm90YXRpb24iOworCitjb25z
dGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKAorICAgIEJ1aWx0SW5J
ZDo6Z2xfVmVydGV4SW5kZXgsCisgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIp
LAorICAgIFN5bWJvbFR5cGU6OkJ1aWx0SW4sCisgICAgVEV4dGVuc2lvbjo6VU5ERUZJTkVELAor
ICAgIFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4o
KSk7CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dy
YXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworICAgIHtrVmlld3BvcnQsIGtIYWxmUmVuZGVy
QXJlYSwga0ZsaXBYWSwga05lZ0ZsaXBYWSwga0NsaXBEaXN0YW5jZXNFbmFibGVkLCBrWGZiQWN0
aXZlVW5wYXVzZWQsCisgICAgIGtYZmJWZXJ0aWNlc1BlckRyYXcsIGtYZmJCdWZmZXJPZmZzZXRz
LCBrQWNiQnVmZmVyT2Zmc2V0cywga0RlcHRoUmFuZ2UsIGtQcmVSb3RhdGlvbiwKKyAgICAga0Zy
YWdSb3RhdGlvbn19OworCitjb25zdGV4cHIgc2l6ZV90IGtOdW1Db21wdXRlRHJpdmVyVW5pZm9y
bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKK2Nv
bnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJVbmlmb3Jt
cz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tBY2JCdWZmZXJPZmZzZXRz
fX07CisKK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0VHlwZXNU
cmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU91dHB1dE1TTChvdXRwdXRNU0wpCisgICAge30KKwor
ICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURlY2xhcmF0aW9u
ICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0
KTsKKyAgICAgICAgaWYgKCFtSW5HbG9iYWxTY29wZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZGVjbGFyYXRvciAgICAgICAgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICAgPSBkZWNsYXJhdG9yLT5nZXRU
eXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKworICAgICAgICAgICAgLy8gRW1iZWRkZWQgc3RydWN0cyBzaG91bGQgYmUgcGFyc2Vk
IGF3YXkgYnkgbm93LgorICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9sVHlwZSgp
ICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgICAgIC8vIG91dHB1dE1TTC0+d3JpdGVT
dHJ1Y3RUeXBlKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChz
eW1ib2xOb2RlICYmIHN5bWJvbE5vZGUtPnZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpID09IFN5bWJv
bFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0
aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0
IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgZW1wdHlSZXBs
YWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1wbGFjZV9iYWNr
KGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92
ZSAndW5zdWVkJyB3YXJuaW5nCisgICAgICAgIG1PdXRwdXRNU0wgPSBudWxscHRyOworCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUT3V0cHV0TVNMICpt
T3V0cHV0TVNMOworfTsKKworY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEZWNsYXJlRGVmYXVs
dFVuaWZvcm1zVHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UgKnNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisgICAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgICAgICBtU2luayhz
aW5rKSwKKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAgICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICAgICAgbUluRGVmYXVsdFVuaWZvcm0oZmFsc2UpCisg
ICAge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURl
Y2xhcmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgLy8g
VE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorICAgICAgICBBU1NFUlQoc2Vx
dWVuY2Uuc2l6ZSgpID09IDEpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBz
ZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ICAgICAgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICBib29sIGlzVW5pZm9ybSAgICAg
ICAgID0gdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtICYmICF0eXBlLmlzSW50ZXJm
YWNlQmxvY2soKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5cGUodHlw
ZS5nZXRCYXNpY1R5cGUoKSk7CisKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0eXBlLCBtSGFzaEZ1
bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworICAgICAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlm
b3JtID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2
aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9y
bSA9IGlzVW5pZm9ybTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKCptU2luaykgPDwgIjtcbiI7CisKKyAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgdGhlIHVuaWZvcm0gZGVjbGFyYXRpb24gZnJvbSB0aGUgdHJlZSBzbyBpdCBp
c24ndCBwYXJzZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5
UmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLmVtcGxhY2Vf
YmFjayhnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSwgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5UmVwbGFjZW1lbnQpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCAqc3ltYm9sKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1J
bkRlZmF1bHRVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11dGFibGVT
dHJpbmcgJm5hbWUgPSBzeW1ib2wtPnZhcmlhYmxlKCkubmFtZSgpOworICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKyAgICAgICAgICAgICgqbVNpbmspIDw8IEhh
c2hOYW1lKCZzeW1ib2wtPnZhcmlhYmxlKCksIG1IYXNoRnVuY3Rpb24sIG1OYW1lTWFwKQorICAg
ICAgICAgICAgICAgICAgICAgPDwgQXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOworICAg
ICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAqbVNpbms7Cisg
ICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworICAgIE5hbWVNYXAgKm1OYW1lTWFw
OworICAgIGJvb2wgbUluRGVmYXVsdFVuaWZvcm07Cit9OworCitUSW50ZXJtQmluYXJ5ICpDcmVh
dGVEcml2ZXJVbmlmb3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMsIGNvbnN0
IGNoYXIgKmZpZWxkTmFtZSkKK3sKKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRGaWVsZElu
ZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCksIGZpZWxk
TmFtZSk7CisKKyAgICBUSW50ZXJtU3ltYm9sICphbmdsZVVuaWZvcm1zUmVmID0gbmV3IFRJbnRl
cm1TeW1ib2woJmRyaXZlclVuaWZvcm1zKTsKKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5pZm9ybUlu
ZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworICAgIHVuaWZvcm1JbmRleC0+c2V0SUNvbnN0
KHN0YXRpY19jYXN0PGludD4oZmllbGRJbmRleCkpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
ICppbmRleFJlZiA9CisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlmb3JtSW5k
ZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworICAgIHJldHVybiBuZXcgVElu
dGVybUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgYW5nbGVVbmlmb3Jtc1JlZiwgaW5kZXhS
ZWYpOworfQorCisjaWYgMAorLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3cG9ydCBm
bGlwcGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3NpdGlvbi55
CisvLyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBn
bF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9uLnkgPSBn
bF9Qb3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBB
cHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3dp
enpsZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBp
bGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNl
IHRvICJnbF9Qb3NpdGlvbiIKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0
SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3NpdGlvblJl
ZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIC8vIENyZWF0ZSBhIHN3aXp6
bGUgdG8gImdsX1Bvc2l0aW9uLnkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZOwor
ICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygxKTsKKyAgICBUSW50ZXJtU3dpenpsZSAqcG9z
aXRpb25ZID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0WSk7
CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlw
WSIKKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11
bCwgcG9zaXRpb25ZLT5kZWVwQ29weSgpLCAmbmVnRmxpcFkpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0
U2NhbGVZCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvbllMSFMgPSBwb3NpdGlvblktPmRlZXBD
b3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisKKyAgICAv
LyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUg
c2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3Qs
IGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisjZW5kaWYKKworI2lmIDAKKy8vIEluaXRp
YWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cy4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBJbml0
aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbml0
VmFyaWFibGVMaXN0ICZ1bnVzZWRWYXJzKQoreworICAgIGlmICh1bnVzZWRWYXJzLmVtcHR5KCkp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VxdWVu
Y2UgKmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZTsKKworICAgIGZvciAoY29u
c3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiB1bnVzZWRWYXJzKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCF2YXIuYWN0aXZlKTsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gRmluZFN5bWJvbE5vZGUoJnJvb3QsIHZhci5uYW1lKTsKKyAgICAgICAgQVNTRVJUKHN5bWJv
bCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNlICppbml0Q29kZSA9IENyZWF0ZUluaXRDb2Rl
KHN5bWJvbCwgZmFsc2UsIGZhbHNlLCAmc3ltYm9sVGFibGUpOworCisgICAgICAgIGluc2VydFNl
cXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVnaW4oKSwg
aW5pdENvZGUtPmVuZCgpKTsKKyAgICB9CisKKyAgICBpZiAoaW5zZXJ0U2VxdWVuY2UpCisgICAg
eworICAgICAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1haW4oJnJv
b3QpOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAgID0gbWFpbi0+Z2V0
Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgIC8vIEluc2VydCBpbml0IGNvZGUgYXQg
dGhlIHN0YXJ0IG9mIG1haW4oKQorICAgICAgICBtYWluU2VxdWVuY2UtPmluc2VydChtYWluU2Vx
dWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1ZW5jZS0+
ZW5kKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2NvbnN0IFRW
YXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJsb2NrICZy
b290LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vIFRoaXMgZmllbGQgbGlz
dCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGluIENvbnRl
eHRWay5jcHAuCisgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRGaWVsZExp
c3Q7CisKKyAgICBjb25zdCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5p
Zm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUoRWJ0VUlu
dCwgNCksCisgICAgfX07CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBrTnVtQ29tcHV0ZURyaXZlclVuaWZvcm1zOyArK3VuaWZvcm1JbmRleCkKKyAg
ICB7CisgICAgICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKyAgICAgICAgICAgIG5l
dyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoa0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXNbdW5p
Zm9ybUluZGV4XSksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNr
KGRyaXZlclVuaWZvcm1GaWVsZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY2xhcmVTdHJ1Y3R1
cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFVbmlmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBr
VW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNlY29uZDsKK30KKworLy8g
VGhlIEFkZCpEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyIG9wZXJhdGlvbiBhZGRzIGFuIGludGVybmFs
IHVuaWZvcm0gYmxvY2sgdG8gYSBzaGFkZXIuIFRoZSBkcml2ZXIKKy8vIGJsb2NrIGlzIHVzZWQg
dG8gaW1wbGVtZW50IFZ1bGthbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd29ya2Fyb3VuZHMuIFJl
dHVybnMgdGhlIGRyaXZlciB1bmlmb3JtcworLy8gdmFyaWFibGUuCisvLworLy8gVGhlcmUgYXJl
IEdyYXBoaWNzIGFuZCBDb21wdXRlIHZhcmlhdGlvbnMgYXMgdGhleSByZXF1aXJlIGRpZmZlcmVu
dCB1bmlmb3Jtcy4KK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1Rv
U2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxURmllbGQgKj4gJmFkZGl0aW9uYWxGaWVsZHMpCit7CisgICAgLy8gSW5pdCB0aGUgZGVw
dGggcmFuZ2UgdHlwZS4KKyAgICBURmllbGRMaXN0ICpkZXB0aFJhbmdlUGFyYW1zRmllbGRzID0g
bmV3IFRGaWVsZExpc3QoKTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2so
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRh
YmxlU3RyaW5nKCJuZWFyIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7Cisg
ICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZmFyIiksIGtO
b1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisgICAgZGVwdGhSYW5nZVBhcmFtc0Zp
ZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBF
dnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZGlmZiIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5n
bGVJbnRlcm5hbCkpOworICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdodCBiZSB1c2Vk
IGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorICAgIGRlcHRoUmFuZ2VQYXJh
bXNGaWVsZHMtPnB1c2hfYmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGln
aCwgRXZxR2xvYmFsLCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoInJlc2VydmVkIiksIGtOb1NvdXJjZUxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKSk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICplbXVsYXRlZERl
cHRoUmFuZ2VQYXJhbXMgPQorICAgICAgICBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9s
VGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVhdGUoKSwgMCwga0VtdWxhdGVkRGVwdGhS
YW5nZVBhcmFtcy5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cikK
KyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisgICAgICAgICAgICAuZ2V0U3RydWN0KCk7
CisKKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIEdyYXBo
aWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0ICpkcml2
ZXJGaWVsZExpc3QgPSBuZXcgVEZpZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5
cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7
eworICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcg
VFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCksICAvLyB1aW50
IGNsaXBEaXN0YW5jZXNFbmFibGVkOyAgLy8gMzIgYml0cyBmb3IgMzIgY2xpcCBkaXN0YW5jZXMg
bWF4CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKyAgICAgICAgbmV3IFRUeXBlKEVidFVJ
bnQpLAorICAgICAgICAvLyBOT1RFOiBUaGVyZSdzIGEgdmVjMyBnYXAgaGVyZSB0aGF0IGNhbiBi
ZSB1c2VkIGluIHRoZSBmdXR1cmUKKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisgICAg
ICAgIG5ldyBUVHlwZShFYnRVSW50LCA0KSwKKyAgICAgICAgbmV3IFRUeXBlKGVtdWxhdGVkRGVw
dGhSYW5nZVBhcmFtcywgZmFsc2UpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQp
LAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorICAgIH19OworCisgICAgZm9y
IChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUdyYXBoaWNzRHJp
dmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4KQorICAgIHsKKyAgICAgICAgVEZpZWxkICpkcml2
ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAgICAgbmV3IFRGaWVsZChrRHJpdmVyVW5pZm9ybVR5
cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmlu
ZyhrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXNbdW5pZm9ybUluZGV4XSksIGtOb1NvdXJjZUxv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisg
ICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNrKGRyaXZlclVuaWZvcm1GaWVsZCk7Cisg
ICAgfQorCisgICAgLy8gQmFjay1lbmQgc3BlY2lmaWMgZmllbGRzCisgICAgZHJpdmVyRmllbGRM
aXN0LT5pbnNlcnQoZHJpdmVyRmllbGRMaXN0LT5lbmQoKSwgYWRkaXRpb25hbEZpZWxkcy5iZWdp
bigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMuZW5kKCkp
OworCisgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5pZm9ybUJs
b2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgorICAgIHJldHVybiBEZWNs
YXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5p
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVh
dGUoKSwgMCwga1VuaWZvcm1zQmxvY2tOYW1lLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAma1VuaWZvcm1zVmFyTmFtZS5yYXdOYW1lKCkpCisgICAgICAgIC5zZWNvbmQ7
Cit9CisKKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVwdGhSYW5n
ZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXBsYWNlR0xEZXB0aFJhbmdlV2l0aERyaXZlclVuaWZvcm0oVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxl
ci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVyZW5jZSB0
byAiZ2xfRGVwdGhSYW5nZSIKKyAgICBjb25zdCBUVmFyaWFibGUgKmRlcHRoUmFuZ2VWYXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUgKj4oCisgICAgICAgIHN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7CisKKyAgICAvLyBB
TkdMRVVuaWZvcm1zLmRlcHRoUmFuZ2UKKyAgICBUSW50ZXJtQmluYXJ5ICphbmdsZUVtdWxhdGVk
RGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtE
ZXB0aFJhbmdlKTsKKworICAgIC8vIFVzZSB0aGlzIHZhcmlhYmxlIGluc3RlYWQgb2YgZ2xfRGVw
dGhSYW5nZSBldmVyeXdoZXJlLgorICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQo
JmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRoUmFuZ2VS
ZWYpOworfQorCitUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJtQmxvY2sg
JnJvb3QpCit7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqbWFpbiA9IEZpbmRNYWlu
KCZyb290KTsKKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworfQor
CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJh
Y2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVy
LmdldFN5bWJvbFRhYmxlKCk7CisgICAgVFZhcmlhYmxlICp4ZmJQbGFjZWhvbGRlciA9IG5ldyBU
VmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIkBAIFhGQi1PVVQgQEAiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUo
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2ln
bm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVy
biBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIG5ldyBUSW50ZXJtU3ltYm9s
KHhmYlBsYWNlaG9sZGVyKSwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBvcGVyYXRpb24g
cGVyZm9ybXMgdGhlIHZpZXdwb3J0IGRlcHRoIHRyYW5zbGF0aW9uIG5lZWRlZCBieSBWdWxrYW4u
IEluIEdMIHRoZSB2aWV3cG9ydAorLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVy
ZW50IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhl
CisvLyBWaWV3cG9ydCIuIEluIFZ1bGthbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHNlY3Rpb24g
aXMgY3VycmVudGx5ICIyMy40LiBDb29yZGluYXRlCisvLyBUcmFuc2Zvcm1hdGlvbnMiLgorLy8g
VGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKy8vCisvLyAgICAgel92ayA9
IDAuNSAqICh3X2dsICsgel9nbCkKKy8vCisvLyB3aGVyZSB6X3ZrIGlzIHRoZSBkZXB0aCBvdXRw
dXQgb2YgYSBWdWxrYW4gdmVydGV4IHNoYWRlciBhbmQgel9nbCBpcyB0aGUgc2FtZSBmb3IgR0wu
CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyRGVwdGhDb3JyZWN0aW9u
VG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sK
KyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUo
KTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlhYmxlOjpn
bF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRl
cm1TeW1ib2wocG9zaXRpb24pOworCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRaID0g
ezJ9OworICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJtU3dpenps
ZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworCisgICAgVEludGVybUNvbnN0YW50VW5p
b24gKm9uZUhhbGYgPSBDcmVhdGVGbG9hdE5vZGUoMC41Zik7CisKKyAgICBUVmVjdG9yPGludD4g
c3dpenpsZU9mZnNldFcgPSB7M307CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uVyAgID0g
bmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0
Vyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56ICsgZ2xf
UG9zaXRpb24udykgKiAwLjUiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpQbHVzVyA9IG5ldyBUSW50
ZXJtQmluYXJ5KEVPcEFkZCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCBwb3NpdGlvblctPmRlZXBD
b3B5KCkpOworICAgIFRJbnRlcm1CaW5hcnkgKmhhbGZaUGx1c1cgPSBuZXcgVEludGVybUJpbmFy
eShFT3BNdWwsIHpQbHVzVywgb25lSGFsZi0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUg
dGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0
aW9uLncpICogMC41IgorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25aTEhTID0gcG9zaXRpb25a
LT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRl
cm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgaGFsZlpQbHVzVyk7
CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVu
ZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxl
ciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKKy8vIFRoaXMgb3BlcmF0
aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3IgQW5kcm9p
ZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisvLyBwbGF0Zm9ybXMpLCB0aGUgZGV2aWNlIG1heSBy
b3RhdGUsIHN1Y2ggdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGlzIHJv
dGF0ZWQKKy8vIHJlbGF0aXZlIHRvIHRoZSBuYXRpdmUgb3JpZW50YXRpb24gb2YgdGhlIGRldmlj
ZS4gIFRoaXMgaXMgY29ycmVjdGVkIGluIHBhcnQgYnkgbXVsdGlwbHlpbmcKKy8vIGdsX1Bvc2l0
aW9uIGJ5IGEgbWF0Mi4KKy8vIFRoZSBlcXVhdGlvbnMgcmVkdWNlIHRvIGFuIGV4cHJlc3Npb246
CisvLworLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlv
bgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFByZVJvdGF0aW9uKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZSAgICAgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIFRJbnRlcm1CaW5hcnkg
KnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a1ByZVJvdGF0aW9uKTsKKyAgICBUSW50ZXJtU3ltYm9sICpnbFBvcyAgICAgICAgICA9IG5ldyBU
SW50ZXJtU3ltYm9sKEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisgICAgVFZlY3Rv
cjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSAgPSB7MCwgMX07CisgICAgVEludGVybVN3aXp6bGUgKmds
UG9zWFkgICAgICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7
CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi54eSAqIHByZVJv
dGF0aW9uKSIKKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisgICAgICAgIG5ldyBUSW50
ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBwcmVSb3RhdGlvblJlZi0+ZGVlcENvcHko
KSwgZ2xQb3NYWS0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQg
ImdsX1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorICAgIFRJ
bnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3Bl
cmF0b3I6OkVPcEFzc2lnbiwgZ2xQb3NYWS0+ZGVlcENvcHkoKSwgelJvdGF0ZWQpOworCisgICAg
Ly8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhl
IHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290
LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wg
Um90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNlICZpbnNlcnRTZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZmxpcFhZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZidWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmFtZSAmZmxpcHBlZFZhcmlhYmxlTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmcGl2
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRh
YmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJv
bCByZWZlcmVuY2UgdG8gJ2J1aWx0aW4nLgorICAgIFRJbnRlcm1TeW1ib2wgKmJ1aWx0aW5SZWYg
PSBuZXcgVEludGVybVN5bWJvbCgmYnVpbHRpbik7CisKKyAgICAvLyBDcmVhdGUgYSBzd2l6emxl
IHRvICJidWlsdGluLnh5IgorICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WFkgPSB7MCwg
MX07CisgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJtU3dpenps
ZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9s
IHJlZmVyZW5jZSB0byBvdXIgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBob2xkIHRoZSBtb2RpZmll
ZCBidWlsdGluLgorICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6R2V0Rm9yVmVj
PEVidEZsb2F0PigKKyAgICAgICAgRXZxR2xvYmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihidWlsdGluLmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgVFZhcmlhYmxlICpy
ZXBsYWNlbWVudFZhciA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBmbGlwcGVkVmFyaWFi
bGVOYW1lLnJhd05hbWUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgRGVj
bGFyZUdsb2JhbFZhcmlhYmxlKCZyb290LCByZXBsYWNlbWVudFZhcik7CisgICAgVEludGVybVN5
bWJvbCAqZmxpcHBlZEJ1aWx0aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbChyZXBsYWNlbWVudFZh
cik7CisKKyAgICAvLyBVc2UgdGhpcyBuZXcgdmFyaWFibGUgaW5zdGVhZCBvZiAnYnVpbHRpbicg
ZXZlcnl3aGVyZS4KKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZyb290LCAm
YnVpbHRpbiwgcmVwbGFjZW1lbnRWYXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgKiBmcmFn
Um90YXRpb24pIgorICAgIFRJbnRlcm1UeXBlZCAqcm90YXRlZFhZOworICAgIGlmIChmcmFnUm90
YXRpb24pCisgICAgeworICAgICAgICByb3RhdGVkWFkgPSBuZXcgVEludGVybUJpbmFyeShFT3BN
YXRyaXhUaW1lc1ZlY3RvciwgZnJhZ1JvdGF0aW9uLT5kZWVwQ29weSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBObyByb3RhdGlvbiBhcHBsaWVkLCB1c2Ugb3Jp
Z2luYWwgdmFyaWFibGUuCisgICAgICAgIHJvdGF0ZWRYWSA9IGJ1aWx0aW5YWS0+ZGVlcENvcHko
KTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGluLnh5IC0g
cGl2b3QpICogZmxpcFhZICsgcGl2b3QKKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9
IG5ldyBUSW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworICAgIFRJbnRl
cm1CaW5hcnkgKmludmVyc2VYWSAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCByZW1vdmVQ
aXZvdCwgJmZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAqcGx1c1Bpdm90ICAgPSBuZXcgVElu
dGVybUJpbmFyeShFT3BBZGQsIGludmVyc2VYWSwgcGl2b3QuZGVlcENvcHkoKSk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIGNvcnJlY3RlZCB2YXJpYWJsZSBhbmQgY29weSB0aGUgdmFsdWUgb2YgdGhl
IG9yaWdpbmFsIGJ1aWx0aW4uCisgICAgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSA9IG5ldyBU
SW50ZXJtU2VxdWVuY2UoKTsKKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRl
ZXBDb3B5KCkpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKGJ1aWx0aW4uZ2V0VHlwZSgpLCBzZXF1ZW5jZSk7Cisg
ICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5p
dGlhbGl6ZSwgZmxpcHBlZEJ1aWx0aW5SZWYsIGFnZ3JlZ2F0ZSk7CisKKyAgICAvLyBDcmVhdGUg
YW4gYXNzaWdubWVudCB0byB0aGUgcmVwbGFjZWQgdmFyaWFibGUncyAueHkuCisgICAgVEludGVy
bVN3aXp6bGUgKmNvcnJlY3RlZFhZID0KKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxlKGZsaXBw
ZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworICAgIFRJbnRlcm1C
aW5hcnkgKmFzc2lnblRvWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbiwgY29ycmVjdGVk
WFksIHBsdXNQaXZvdCk7CisKKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
bm9kZXNbXSA9IHthc3NpZ25tZW50LCBhc3NpZ25Ub1l9OworICAgICAgICBpbnNlcnRTZXF1ZW5j
ZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2RlcyksIHN0ZDo6
ZW5kKG5vZGVzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENvcnJlY3Rp
b24oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykKK3sK
KyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJl
Zihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAmcGl2b3QgICAg
ICAgID0gKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtIYWxmUmVuZGVy
QXJlYSk7CisgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0gKGNvbXBpbGVPcHRpb25z
ICYgU0hfQUREX1BSRV9ST1RBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIFJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUoY29tcGlsZXIsIHJvb3QsIGlu
c2VydFNlcXVlbmNlLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJhZ0Nvb3Jk
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZvdCwgZnJh
Z1JvdGF0aW9uKTsKK30KKworVEludGVybUJpbmFyeSAqR2V0RHJpdmVyVW5pZm9ybURlcHRoUmFu
Z2VSZXNlcnZlZEZpZWxkUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7Cisg
ICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKworICAgIHJldHVybiBuZXcgVEludGVybUJpbmFy
eShFT3BJbmRleERpcmVjdFN0cnVjdCwgZGVwdGhSYW5nZSwgQ3JlYXRlSW5kZXhOb2RlKDMpKTsK
K30KKwordm9pZCBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKFRJbnRlcm1CbG9jayAmcm9vdCwgY29u
c3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWlu
SW5kZXgoJnJvb3QpLCB7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmdmFyfX0pOworfQorCit2b2lk
IEFkZEZyYWdDb2xvckRlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSkKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRl
eCgmcm9vdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZXtuZXcg
VEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0NvbG9yKCl9fSk7Cit9
CisKK3ZvaWQgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290LCBUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5k
TWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVl
bmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnRGVwdGgo
KX19KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEZyYWdEYXRhRGVjbGFyYXRpb24o
VENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIGNvbnN0
IGludCBtYXhEcmF3QnVmZmVycyAgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5NYXhEcmF3QnVm
ZmVyczsKKyAgICBUVHlwZSAqZ2xfRnJhZ0RhdGFUeXBlICAgID0gbmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCAxKTsKKyAgICBzdGQ6OnZlY3Rvcjxjb25zdCBU
VmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworICAgIFRJbnRlcm1TZXF1ZW5jZSBkZWNsYXJl
R0xGcmFnZGF0YVNlcXVlbmNlOworCisgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAsMSwyLDMK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heERyYXdCdWZmZXJzOyBpKyspCisgICAgeworICAg
ICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFnRGF0YV8i
KSArIDIpOworICAgICAgICBidWlsZGVyIDw8ICJnbF9GcmFnRGF0YV8iOworICAgICAgICBidWls
ZGVyLmFwcGVuZERlY2ltYWwoaSk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0
YSA9CisgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgYnVpbGRlciwgZ2xf
RnJhZ0RhdGFUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQpOworICAgICAgICBnbEZyYWdEYXRhU2xv
dHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworICAgICAgICBkZWNsYXJlR0xGcmFnZGF0YVNlcXVl
bmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2dsRnJhZ0RhdGF9KTsKKyAgICB9
CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBkZWNsYXJl
R0xGcmFnZGF0YVNlcXVlbmNlKTsKKworICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBnbF9GcmFn
RGF0YSBhcnJheSB0eXBlLCBjb21wYXRpYmxlIHdpdGggaW5kZXhpbmcgc3ludGF4LgorICAgIFRU
eXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFHbG9iYWwsIDQsIDEpOworICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LT5tYWtlQXJyYXko
bWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0YUdsb2JhbCA9
IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRh
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisKKyAgICBEZWNs
YXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIGdsRnJhZ0RhdGFHbG9iYWwpOworICAgIGNvbnN0IFRJ
bnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCBJ
bW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworICAgIEFTU0VSVChvcmlnaW5hbEdMRnJh
Z0RhdGEpOworCisgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGdsb2JhbGx5
IGRlZmluZWQgZnJhZ2RhdGEKKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZy
b290LCAmKG9yaWdpbmFsR0xGcmFnRGF0YS0+dmFyaWFibGUoKSksIGdsRnJhZ0RhdGFHbG9iYWwp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFzc2lnbiBl
YWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQKKyAgICBUSW50ZXJtQmxvY2sgKmluc2Vy
dFNlcXVlbmNlID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFn
RGF0YVNsb3QgICAgICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFTbG90c1tpXSk7
CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCA9IG5ldyBUSW50
ZXJtU3ltYm9sKGdsRnJhZ0RhdGFHbG9iYWwpOworICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAg
ICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwg
aSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICAgICAgbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGdsRnJhZ0RhdGFTbG90LCAmYWNj
ZXNzKTsKKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50
KTsKKyAgICB9CisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9v
dCwgaW5zZXJ0U2VxdWVuY2UsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBFbXVsYXRlSW5zdGFuY2VJRChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVu
aWZvcm1zKQoreworICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorICAgICAgICBD
cmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRW11SW5zdGFuY2VJREZpZWxk
LnJhd05hbWUoKS5kYXRhKCkpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqaW5zdGFuY2VJRCA9IEJ1
aWx0SW5WYXJpYWJsZTo6Z2xfSW5zdGFuY2VJbmRleCgpOworICAgIHJldHVybiBSZXBsYWNlVmFy
aWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFuY2VJ
RCk7Cit9CisKKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxpcHBpbmcg
ZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQorLy8gbWFu
dWFsbHkuCisvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xfUG9zaXRp
b24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisvLyBnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRp
b24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVy
dGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6bGUgJm5l
Z0ZsaXBZKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRT
eW1ib2xUYWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdElu
VmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenps
ZU9mZnNldFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJbnRlcm1T
d2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYsIHN3aXp6
bGVPZmZzZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24u
eSAqIG5lZ0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJbnRlcm1C
aW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55ICog
bmVnVmlld3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0
aW9uWS0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBU
SW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZ
KTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUg
ZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBp
bGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworfSAgLy8gbmFtZXNw
YWNlCisKK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0KHNoOjpH
TGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNw
ZWMsIG91dHB1dCkKK3t9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFs
RGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICByZXR1cm4g
Y29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7Cit9
CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRSYXN0
ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBjb25zdGFu
dF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOwor
fQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRS
YXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBUU3lt
Ym9sVGFibGUgKnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBUVHlwZSAq
Ym9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgYm9vbFR5cGUtPnNldFF1YWxpZmll
cihFdnFDb25zdCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisgICAgICAg
IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGNvbnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlv
bkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKSwgYm9vbFR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWQuc3ltYm9sVHlw
ZSgpKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlhYmxl
OjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJ
bnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIHZlYzQoLTMsIC0zLCAtMywg
MSk6CisgICAgYXV0byB2ZWM0VHlwZSAgICAgICAgICAgICA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
NCk7CisgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uo
KTsKKyAgICB2ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikpOworICAg
IHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7CisgICAgdmVjNEFy
Z3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2ZWM0QXJncy0+cHVz
aF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgxLjBmKSk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY29u
c3RWYXJDb25zdHJ1Y3RvciA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0
cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25t
ZW50ICJnbF9Qb3NpdGlvbiA9IHZlYzQoLTMsIC0zLCAtMywgMSkiCisgICAgVEludGVybUJpbmFy
eSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9w
QXNzaWduLCBwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgY29uc3RWYXJDb25zdHJ1Y3Rvcik7CisK
KyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxvY2s7CisgICAg
ZGlzY2FyZEJsb2NrLT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWdubWVudCk7CisKKyAgICBUSW50ZXJt
U3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRpc2NhcmRFbmFibGVk
VmFyKTsKKyAgICBUSW50ZXJtSWZFbHNlICppZkNhbGwgICAgICAgICA9IG5ldyBUSW50ZXJtSWZF
bHNlKGRpc2NhcmRFbmFibGVkLCBkaXNjYXJkQmxvY2ssIG51bGxwdHIpOworCisgICAgcmV0dXJu
IFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwor
fQorCisvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJhbmdlIGlz
IGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRlcHRoIGZhcgorLy8gVGhpcyBp
cyBhY2hpZXZlZCBieSBtdWx0aXBseSB0aGUgZGVwdGggdmFsdWUgd2l0aCBzY2FsZSB2YWx1ZSBz
dG9yZWQgaW4KKy8vIGRyaXZlciB1bmlmb3JtJ3MgZGVwdGhSYW5nZS5yZXNlcnZlZAorYm9vbCBU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbihUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7Cisg
ICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVybVN5bWJv
bChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7Mn07Cisg
ICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0
aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpT
Y2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJV
bmlmb3Jtcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnog
KiBkZXB0aFJhbmdlLnJlc2VydmVkIi4KKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcg
VEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2Nh
bGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0gZ2xf
UG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiCisgICAgVEludGVybVR5cGVkICpwb3Np
dGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNz
aWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRp
b25aTEhTLCB6U2NhbGUpOworCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywg
JnJvb3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKK30KKwordm9pZCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVs
ZHMoCisgICAgc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpCit7CisgICAgLy8gQWRk
IGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBidWls
dC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKyAgICAvLyBlcXVpdmFsZW50IGZ1bmN0aW9u
YWxpdHksIG5lZWRzIHRvIGVtdWxhdGUgaXQgdXNpbmcgZnJhZ21lbnQgc2hhZGVyJ3MgW1tzYW1w
bGVfbWFza11dIG91dHB1dAorICAgIC8vIHZhbHVlLgorICAgIFRGaWVsZCAqY292ZXJhZ2VNYXNr
RmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFza0ZpZWxk
LnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Tm9Tb3VyY2VMb2MsIGtDb3ZlcmFnZU1hc2tGaWVsZC5zeW1ib2xUeXBlKCkpOworICAgIGZpZWxk
c091dC5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVsYXRlZElu
c3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVsZCA9IG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3TmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05vU291
cmNlTG9jLCBrRW11SW5zdGFuY2VJREZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAgICAgIGZpZWxk
c091dC5wdXNoX2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKyAgICB9Cit9CisKK1RJbnRlcm1T
d2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJl
ZigKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdAoreworICAgIC8v
IENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorICAgIFRJbnRlcm1CaW5hcnkgKm5l
Z0ZsaXBYWSAgICA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtOZWdG
bGlwWFkpOworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WSA9IHsxfTsKKyAgICBUSW50
ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVnRmxpcFhZLCBz
d2l6emxlT2Zmc2V0WSk7CisgICAgcmV0dXJuIG5lZ0ZsaXBZOworfQorCitzdGF0aWMgc3RkOjpz
ZXQ8SW1tdXRhYmxlU3RyaW5nPiBHZXRNc2xLZXl3b3JkcygpCit7CisgICAgc3RkOjpzZXQ8SW1t
dXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKworICAgIGtleXdvcmRzLmVtcGxhY2UoImFsaWduYXMi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiYXNfdHlwZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImF1dG8iKTsKKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJjYXRjaCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNoYXIiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJjbGFzcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nh
c3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdGFudCIpOworICAgIGtleXdvcmRzLmVt
cGxhY2UoImNvbnN0ZXhwciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBlIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiZGVsZXRlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGV2
aWNlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgiZW51bSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImV4cGxpY2l0Iik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXh0
ZXJuIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZnJhZ21lbnQiKTsKKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJmcmllbmQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJnb3RvIik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgiaGFsZiIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoImludDE2X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJp
bnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoImludDhfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImtlcm5lbCIpOworICAg
IGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJtYWluMCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1ldGFsIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgi
bXV0YWJsZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5hbWVzcGFjZSIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoIm5ldyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0Iik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgibnVsbHB0cl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgi
bnVsbHB0ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgib3ZlcnJpZGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcml2YXRlIik7
CisgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgicHRyZGlmZl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHVibGljIik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJyZWdpc3Rl
ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgic2lnbmVkIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgic2l6ZW9mIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgic3RhdGljX2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWMiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ0ZW1wbGF0ZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRo
aXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwiKTsKKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJ0aHJlYWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRncm91cF9p
bWFnZWJsb2NrIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0aHJvdyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRyeSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0
eXBlaWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlbmFtZSIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInVjaGFyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDE2X3QiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MzJfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInVp
bnQ2NF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDhfdCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInVuaW9uIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2lu
ZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInZpcnR1YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2b2xhdGlsZSIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoIndjaGFyX3QiKTsKKworICAgIHJldHVybiBrZXl3b3JkczsKK30KKwor
Ym9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZy
b290LCBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworICAgIFRTeW1ib2xUYWJs
ZSAmc3ltYm9sVGFibGUgPSBnZXRTeW1ib2xUYWJsZSgpOworICAgIElkR2VuIGlkR2VuOworICAg
IFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKworICAgIGlmICghV3JhcE1haW4oKnRoaXMsIGlk
R2VuLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
SW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisjaWYgMAorICAgIGlmIChn
ZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmICgh
U2hhZGVyQnVpbHRpbnNXb3JrYXJvdW5kKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUsIGNvbXBp
bGVPcHRpb25zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFyaWFibGVz
IGZyb20gdGhlIHByb2dyYW0uCisgICAgaWYgKCFSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlh
Ymxlcyh0aGlzLCAmcm9vdCwgZ2V0QXR0cmlidXRlcygpLCBnZXRJbnB1dFZhcnlpbmdzKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXRwdXRWYXJpYWJs
ZXMoKSwgZ2V0VW5pZm9ybXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvdXQgZGVmYXVsdCB1bmlmb3JtcyBpbnRvIGEgdW5p
Zm9ybSBibG9jayBhc3NpZ25lZCB0byBhIHNwZWNpZmljIHNldC9iaW5kaW5nLgorICAgIGludCBk
ZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisgICAgaW50IGFnZ3JlZ2F0ZVR5cGVz
VXNlZEZvclVuaWZvcm1zID0gMDsKKyAgICBpbnQgYXRvbWljQ291bnRlckNvdW50ICAgICAgICAg
ICAgPSAwOworICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1zKCkpCisg
ICAgeworICAgICAgICBpZiAoIXVuaWZvcm0uaXNCdWlsdEluKCkgJiYgdW5pZm9ybS5hY3RpdmUg
JiYgIWdsOjpJc09wYXF1ZVR5cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgKytkZWZhdWx0VW5pZm9ybUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVuaWZv
cm0uaXNTdHJ1Y3QoKSB8fCB1bmlmb3JtLmlzQXJyYXlPZkFycmF5cygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVu
aWZvcm0udHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrYXRvbWljQ291bnRlckNvdW50
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZv
cm1zID4gMCkKKyAgICB7CisgICAgICAgIGlmICghTmFtZUVtYmVkZGVkU3RydWN0VW5pZm9ybXMo
dGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmV3cml0ZVN0cnVjdFNhbXBsZXJz
UmVzdWx0OworICAgICAgICBpbnQgcmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyAgICAgICAgaWYg
KGNvbXBpbGVPcHRpb25zICYgU0hfVVNFX09MRF9SRVdSSVRFX1NUUlVDVF9TQU1QTEVSUykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0KKyAgICAg
ICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnNPbGQodGhpcywgJnJvb3QsICZzeW1ib2xU
YWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCA9CisgICAg
ICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3ltYm9sVGFi
bGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJl
d3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHRVbmlmb3JtQ291bnQgLT0gcmVtb3Zl
ZFVuaWZvcm1zQ291bnQ7CisKKyNpZiAwCisgICAgICAgIC8vIFdlIG11c3QgZGVjbGFyZSB0aGUg
c3RydWN0IHR5cGVzIGJlZm9yZSB1c2luZyB0aGVtLgorICAgICAgICBEZWNsYXJlU3RydWN0VHlw
ZXNUcmF2ZXJzZXIgc3RydWN0VHlwZXNUcmF2ZXJzZXIob3V0cHV0TVNMKTsKKyAgICAgICAgcm9v
dC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3RU
eXBlc1RyYXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfU0VBTUZVTF9DVUJFX01BUF9TQU1QTElORykKKyAg
ICB7CisgICAgICAgIGlmICghUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheSh0aGlzLCAm
cm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIDAK
KyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sKKyAgICBpZiAoZGVmYXVsdFVuaWZv
cm1Db3VudCA+IDApCisgICAgeworICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
Z2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7CisgICAgICAg
IHNpbmsgPDwgIlxuc3RydWN0ICIgPDwga0RlZmF1bHRVbmlmb3JtTmFtZXNbc2hhZGVyVHlwZV0g
PDwgIlxue1xuIjsKKyAgICAgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciBkZWZh
dWx0VHJhdmVyc2VyKCZzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgJmdldE5hbWVNYXAoKSk7Cisg
ICAgICAgIHJvb3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFk
ZWZhdWx0VHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpbmsgPDwgIn07XG4i
OworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcyA9
ICpbJl0oKSB7CisgICAgICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfQ09NUFVURV9TSEFE
RVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRDb21wdXRlRHJpdmVyVW5pZm9y
bXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gYWRkaXRpb25hbEZp
ZWxkczsKKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1G
aWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisgICAgICAgICAgICByZXR1cm4gQWRkR3JhcGhpY3NE
cml2ZXJVbmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlLCBhZGRpdGlvbmFsRmllbGRz
KTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGlmIChhdG9taWNDb3VudGVyQ291bnQgPiAw
KQorICAgIHsKKyAgICAgICAgLy8gQU5HTEVVbmlmb3Jtcy5hY2JCdWZmZXJPZmZzZXRzCisgICAg
ICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkgKmFjYkJ1ZmZlck9mZnNldHMgPQorICAgICAgICAgICAg
Q3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9mZnNldHMp
OworCisgICAgICAgIGlmICghUmV3cml0ZUF0b21pY0NvdW50ZXJzKHRoaXMsICZyb290LCAmc3lt
Ym9sVGFibGUsIGFjYkJ1ZmZlck9mZnNldHMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVmVyc2lv
bigpID49IDMxMCkKKyAgICB7CisgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0IHN1cHBvcnQgQXRv
bWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2VlbgorICAgICAgICAv
LyBjYXNlcyB3aGVyZSBidWlsdGlucyBhcmUgdXNpbmcgaXQgZXZlbiB3aXRoIG5vIGFjdGl2ZSBh
dG9taWMgY291bnRlcnMuCisgICAgICAgIC8vIFRoaXMgcGFzcyBzaW1wbHkgcmVtb3ZlcyB0aG9z
ZSBidWlsdGlucyBpbiB0aGF0IHNjZW5hcmlvLgorICAgICAgICBpZiAoIVJlbW92ZUF0b21pY0Nv
dW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgIT0g
R0xfQ09NUFVURV9TSEFERVIpCisgICAgeworICAgICAgICBpZiAoIVJlcGxhY2VHTERlcHRoUmFu
Z2VXaXRoRHJpdmVyVW5pZm9ybSgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAg
ICAgLy8gQWRkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50IGRlY2xhcmF0aW9ucy4gIFRoZSBkZWZh
dWx0IHZhbHVlIG9mIHRoZSBzcGVjaWFsaXphdGlvbgorICAgICAgICAvLyBjb25zdGFudCBpcyBp
cnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4K
KyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RF
Ul9FTVVMQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25z
dGFudF9pZD0iCisgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2azo6
U3BlY2lhbGl6YXRpb25Db25zdGFudElkOjpMaW5lUmFzdGVyRW11bGF0aW9uKQorICAgICAgICAg
ICAgICAgICA8PCAiKSBjb25zdCBib29sICIgPDwga0xpbmVSYXN0ZXJFbXVsYXRpb25TcGVjQ29u
c3RWYXJOYW1lIDw8ICIgPSBmYWxzZTtcblxuIjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
CisgICAgeworICAgICAgICBib29sIHVzZXNJbnN0YW5jZUlkID0gZmFsc2U7CisgICAgICAgIGZv
ciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAodmFyLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICh2YXIubmFtZSA9PSAiZ2xfSW5zdGFuY2VJRCIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNJbnN0
YW5jZUlkKQorICAgICAgICB7CisgICAgICAgICAgICByb290Lmluc2VydENoaWxkTm9kZXMoCisg
ICAgICAgICAgICAgICAgRmluZE1haW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9J
bnN0YW5jZUlEKCl9fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWNsYXJlIGdsX0Zy
YWdDb2xvciBhbmQgZ2xGcmFnRGF0YSBhcyB3ZWJnbF9GcmFnQ29sb3IgYW5kIHdlYmdsX0ZyYWdE
YXRhCisgICAgLy8gaWYgaXQncyBjb3JlIHByb2ZpbGUgc2hhZGVycyBhbmQgdGhleSBhcmUgdXNl
ZC4KKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7
CisgICAgICAgIGJvb2wgdXNlc1BvaW50Q29vcmQgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNl
c0ZyYWdDb29yZCAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0Zyb250RmFjaW5nID0gZmFs
c2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJmlucHV0VmFyeWluZyA6IG1J
bnB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5wdXRWYXJ5aW5nLmlz
QnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhcnlp
bmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29vcmQi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb29yZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0
VmFyeWluZy5uYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xv
ciA9IGZhbHNlOworICAgICAgICBib29sIHVzZXNGcmFnRGF0YSAgPSBmYWxzZTsKKyAgICAgICAg
Ym9vbCB1c2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFy
aWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29sb3IiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dFZh
cnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVwdGgi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdEZXB0aCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdD
b2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0NvbG9yRGVjbGFyYXRpb24ocm9v
dCwgc3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcmFnRGF0YSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFBZGRGcmFnRGF0YURlY2xhcmF0aW9uKCp0aGlz
LCByb290KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdEZXB0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24ocm9vdCwgc3ltYm9s
VGFibGUpOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAgIGlmIChjb21waWxlT3B0aW9ucyAm
IFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVPcHRpb25z
LCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyaXZlclVuaWZvcm1zLCB1c2VzRnJhZ0Nvb3JkKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlUHJlUm90YXRpb24gPSBjb21waWxlT3B0aW9u
cyAmIFNIX0FERF9QUkVfUk9UQVRJT047CisKKyAgICAgICAgaWYgKHVzZXNQb2ludENvb3JkKQor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3Jl
YXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisgICAgICAg
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAmcGl2b3QgPSAqQ3JlYXRlRmxvYXROb2RlKDAuNWYp
OworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAgICAgICAg
ICAgICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9y
bXMsIGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUm90YXRlQW5k
RmxpcEJ1aWx0aW5WYXJpYWJsZSgqdGhpcywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShyb290KSwg
ZmxpcFhZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpC
dWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJh
Z1JvdGF0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3Qs
ICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJbnNlcnRG
cmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdldE1haW5T
ZXF1ZW5jZShyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFp
bihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVhdGVEcml2
ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICAgICAgICAgIFRJbnRl
cm1CaW5hcnkgKmZyYWdSb3RhdGlvbiA9CisgICAgICAgICAgICAgICAgdXNlUHJlUm90YXRpb24g
PyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0aW9uKSA6
IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290LCBzeW1i
b2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAg
ICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpn
bF9Gcm9udEZhY2luZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVtaXRFYXJseUZyYWdtZW50
VGVzdHNHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlw
ZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBEZWNsYXJlUmlnaHRCZWZv
cmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworCisgICAgICAg
IGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUo
KS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFp
bihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoRmluZFN5bWJvbE5vZGUoJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVy
dGV4SW5kZXgoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFSZXBsYWNl
VmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZ2xfVmVydGV4SW5kZXhNZXRhbCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCBrZ2xfVmVydGV4
SW5kZXhNZXRhbCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBpbGVPcHRp
b25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uVlModGhpcywgcm9vdCwgJnN5
bWJvbFRhYmxlLCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
QWRkIGEgbWFjcm8gdG8gZGVjbGFyZSB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycy4KKyAgICAg
ICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKyNlbmRpZgorCisgICAgICAgIC8vIEFw
cGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHByaW9yIHRv
IG1vZGlmeWluZyBkZXB0aC4KKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJUcmFuc2Zv
cm1GZWVkYmFja091dHB1dFRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlYXJjaCBmb3IgdGhl
IGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBy
ZXBsYWNlbWVudHMuCisgICAgICAgIGJvb2wgdXNlQ2xpcERpc3RhbmNlID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFy
eWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5hbWUgPT0g
ImdsX0NsaXBEaXN0YW5jZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNlQ2xp
cERpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VDbGlwRGlzdGFuY2UgJiYgIVJlcGxhY2VDbGlw
RGlzdGFuY2VBc3NpZ25tZW50cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0NsaXBEaXN0YW5j
ZXNFbmFibGVkKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKHJvb3Qs
IGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJlY3Rp
b25Ub01haW4oKnRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BS
RV9ST1RBVElPTikgIT0gMCAmJgorICAgICAgICAgICAgIUFwcGVuZFByZVJvdGF0aW9uKCp0aGlz
LCByb290LCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0g
R0xfR0VPTUVUUllfU0hBREVSKQorICAgIHsKKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxh
eW91dFF1YWxpZmllcnMoCisgICAgICAgICAgICBzaW5rLCBnZXRHZW9tZXRyeVNoYWRlcklucHV0
UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlckludm9jYXRpb25zKCksCisgICAgICAg
ICAgICBnZXRHZW9tZXRyeVNoYWRlck91dHB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2VvbWV0cnlT
aGFkZXJNYXhWZXJ0aWNlcygpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisgICAgICAgIEVtaXRX
b3JrR3JvdXBTaXplR0xTTCgqdGhpcywgc2luayk7CisgICAgfQorCisgICAgaWYgKGdldFNoYWRl
clR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgYXV0byAmbmVnRmxp
cFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKworICAg
ICAgICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFFbXVsYXRlSW5zdGFuY2VJRCgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVj
dGlvblRvTWFpbigqdGhpcywgcm9vdCwgbmVnRmxpcFkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6
YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmFsaWRhdGVBU1QoJnJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghUmV3cml0ZUtl
eXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MoKnRoaXMsIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0
aGUgbGFyZ2VzdCBzaXplIHJlcXVpcmVkIHRvIHBhc3MgYWxsIHRoZSB0ZXN0cyBpbgorICAgIC8v
IChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisg
ICAgLy8gVGhpcyB2YWx1ZSBjb3VsZCBpbiBwcmluY2lwbGUgYmUgc21hbGxlci4KKyAgICBjb25z
dCBzaXplX3QgaG9pc3RUaHJlc2hvbGRTaXplID0gMjU2OworICAgIGlmICghSG9pc3RDb25zdGFu
dHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludmFyaWFudHMgaW52YXJpYW50czsKKyAg
ICBpZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50
cykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3ltYm9sRW52
IHN5bWJvbEVudigqdGhpcywgcm9vdCk7CisKKyAgICBpZiAoIUFkZEV4cGxpY2l0VHlwZUNhc3Rz
KCp0aGlzLCByb290LCBzeW1ib2xFbnYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisgICAgaWYgKCFS
ZXdyaXRlUGlwZWxpbmVzKCp0aGlzLCByb290LCBpZEdlbiwgZHJpdmVyVW5pZm9ybXMsIHN5bWJv
bEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1
Y3RzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNl
cGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucygqdGhpcywgc3ltYm9sRW52LCBpZEdlbiwgcm9vdCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRl
Q2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMoKnRo
aXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFSZXdyaXRlT3V0QXJncygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVRvcG9zb3J0U3Ry
dWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmICghRW1pdE1ldGFsKCp0aGlzLCByb290LCBpZEdlbiwg
cGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYsIHBwYykpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHZhbGlkYXRlQVNUKCZyb290
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OnRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlRGlhZ25vc3RpY3MgKnBlcmZE
aWFnbm9zdGljcykKK3sKKyAgICBpZiAoIXJvb3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2Jq
OworCisgICAgYm9vbCBwcmVjaXNpb25FbXVsYXRpb24gPSBmYWxzZTsKKyAgICBpZiAoIWVtdWxh
dGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9uLCBTSF9H
TFNMX1ZVTEtBTl9PVVRQVVQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworI2lmIDAKKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlvbnMgJiBT
SF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworCisgICAgVE91dHB1dE1TTCBv
dXRwdXRNU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0U3lt
Ym9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdldE91dHB1
dFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25FbXVsYXRpb24sIGVu
YWJsZVByZWNpc2lvbiwgY29tcGlsZU9wdGlvbnMpOworI2VuZGlmCisKKyAgICBpZiAoIXRyYW5z
bGF0ZUltcGwoKnJvb3QsIGNvbXBpbGVPcHRpb25zKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyNpZiAwCisgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCisg
ICAgcm9vdC0+dHJhdmVyc2Uob3V0cHV0TVNMKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7
Cit9Citib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdtYVN0ZGds
SW52YXJpYW50QWxsKCkKK3sKKyAgICAvLyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJhbnNmb3Jt
YXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWZjYjMw
NjcxOTc3YmY1ODFiNmFjMjU3MzIxYzdkMTZmNjZmYzU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgVE91dHB1
dE1TTDsKKwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c2l6ZV90LCBzdGQ6OnN0cmluZz4g
b3JpZ2luYWxOYW1lc01hcDsKK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHNpemVfdD4gdGV4dHVyZUJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB1bmlmb3JtQnVmZmVyQmluZGluZ01hcDsK
KworY2xhc3MgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbgoreworICBwdWJsaWM6CisgICAgVHJh
bnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisgICAgflRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24oKSB7fQorCisgICAgdm9pZCBhZGRPcmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlkLCBjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0
KHtpZCwgbmFtZX0pOworICAgIH0KKyAgICB2b2lkIGFkZFNhbXBsZXJCaW5kaW5nKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qgc2FtcGxlckJpbmRpbmcpCisgICAgeworICAgICAgICBz
YW1wbGVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCBzYW1wbGVyQmluZGluZ30pOworICAgIH0KKyAg
ICB2b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qg
dGV4dHVyZUJpbmRpbmcpCisgICAgeworICAgICAgICB0ZXh0dXJlQmluZGluZ3MuaW5zZXJ0KHtu
YW1lLCB0ZXh0dXJlQmluZGluZ30pOworICAgIH0KKyAgICB2b2lkIGFkZFVuaWZvcm1CdWZmZXJC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdW5pZm9ybUJ1ZmZlckJpbmRp
bmcpCisgICAgeworICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCB1
bmlmb3JtQnVmZmVyQmluZGluZ30pOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBnZXRPcmlnaW5h
bE5hbWUoY29uc3Qgc2l6ZV90IGlkKSB7IHJldHVybiBvcmlnaW5hbE5hbWVzLmF0KGlkKTsgfQor
ICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJu
IHNhbXBsZXJCaW5kaW5nczsgfQorICAgIHRleHR1cmVCaW5kaW5nTWFwIGdldFRleHR1cmVCaW5k
aW5ncygpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmVCaW5kaW5nczsgfQorICAgIHVuaWZvcm1CdWZm
ZXJCaW5kaW5nTWFwIGdldFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHVu
aWZvcm1CdWZmZXJCaW5kaW5nczsgfQorICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGluZyhjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBzYW1w
bGVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJCaW5kaW5n
cy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICB9CisgICAgc2l6ZV90IGdldFRleHR1cmVCaW5kaW5n
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gdGV4dHVyZUJp
bmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VW5pZm9ybUJ1
ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgeworICAgICAg
ICBhdXRvIGl0ID0gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAgICAgIGlm
IChpdCAhPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CisgICAgfQor
ICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5jbGVhcigpOwor
ICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZUJpbmRpbmdz
LmNsZWFyKCk7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5jbGVhcigpOworICAgIH0K
KworICBwcml2YXRlOgorICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKyAgICBz
YW1wbGVyQmluZGluZ01hcCBzYW1wbGVyQmluZGluZ3M7CisgICAgdGV4dHVyZUJpbmRpbmdNYXAg
dGV4dHVyZUJpbmRpbmdzOworICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZm
ZXJCaW5kaW5nczsKK307CisKK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBU
Q29tcGlsZXIKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xl
bnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworCisj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpnZXRB
c1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKyNlbmRp
ZgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5h
bWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lKCk7CisKKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRChib29s
IGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKyAgICBUcmFuc2xhdG9yTWV0YWxSZWZs
ZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkgeyByZXR1cm4gJnRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb247IH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB0cmFuc2xhdGUo
VEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMg
Y29tcGlsZU9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGlj
cyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJU0NBUkQgYm9v
bCB0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9ucyBjb21w
aWxlT3B0aW9ucyk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgc2hvdWxkRmxhdHRlblBy
YWdtYVN0ZGdsSW52YXJpYW50QWxsKCkgb3ZlcnJpZGU7CisKKyAgICBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpOworICAgIEFOR0xFX05PX0RJU0NBUkQg
Ym9vbCBpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCk7
CisKKyAgICB2b2lkIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVsZHMo
c3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpOworCisgICAgQU5HTEVfTk9fRElTQ0FS
RCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKAorICAgICAgICBj
b25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdDsKKworICAgIGJvb2wgbUVtdWxh
dGVkSW5zdGFuY2VJRCA9IGZhbHNlOworCisgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiB0
cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0ge307Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gK
KworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0MTE4MGE5
MDA0NDIxZWJiNTMyZmYxOGMzMzRkODZhNmU2Y2RjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNo
OworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHVibGljOgorICAgIFJld3Jp
dGVyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6
IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9s
RW52KQorICAgIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJt
QWdncmVnYXRlICZjYWxsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVf
dCBhcmdDb3VudCA9IGNhbGxOb2RlLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgY29uc3QgVFR5
cGUgJnJldFR5cGUgID0gY2FsbE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgIGlmIChjYWxsTm9k
ZS5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJh
c2ljVHlwZShyZXRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
Q291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3Io
YXJnLCAwLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9yKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IDEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0
QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgYXJnVHlw
ZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlLmlzVmVj
dG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb2VyY2VTaW1wbGUocmV0VHlwZSwgU3ViVmVjdG9yKGFyZywgMCwgcmV0VHlwZS5nZXRO
b21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZhcmcg
PSBHZXRBcmcoY2FsbE5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBTZXRBcmcoY2FsbE5v
ZGUsIGksIENvZXJjZVNpbXBsZShyZXRUeXBlLmdldEJhc2ljVHlwZSgpLCBhcmcpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBl
LmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50
ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgYXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcmdUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZXRUeXBlLmdldENvbHMoKSAhPSBhcmdUeXBlLmdldENvbHMoKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFR5cGUuZ2V0Um93cygpICE9IGFyZ1R5
cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRlbXBsYXRlQXJnIHRlbXBsYXRlQXJnc1tdID0ge3JldFR5cGUuZ2V0Q29s
cygpLCByZXRUeXBlLmdldFJvd3MoKX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7
JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyhUQ29tcGls
ZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KQor
eworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworICAgIGlmICgh
cmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fk
ZEV4cGxpY2l0VHlwZUNhc3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MDM0Mjg4OWE2ZjJlNmVjYzcxNWE1Mjc1NzM4MTJjMjFlYzkyZTdkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgKQEAg
LTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNUU19IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNU
U19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVs
dWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBZGRzIGV4cGxpY2l0IHR5
cGUgY2FzdHMgaW50byB0aGUgQVNUIHdoZXJlIGNhc3RpbmcgaXMgZG9uZSBpbXBsaWNpdGx5Lgor
QU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQTElDSVRU
WVBFQ0FTVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE0ZWM3N2RlYmRjZmI3MWY1
MDUzMTYzZDZhZGJiMWRhOGE0YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDc0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y3N0
cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5j
bHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitEZWNsYXJhdGlvbiBzaDo6Vmlld0RlY2xhcmF0
aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCit7CisgICAgQVNTRVJUKGRlY2xOb2Rl
LmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2RlID0gZGVj
bE5vZGUuZ2V0Q2hpbGROb2RlKDApOworICAgIEFTU0VSVChjaGlsZE5vZGUpOworICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbE5vZGU7CisgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGROb2RlLT5n
ZXRBc1N5bWJvbE5vZGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4geypzeW1ib2xOb2RlLCBu
dWxscHRyfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
aW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBBU1NFUlQo
aW5pdE5vZGUpOworICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9wKCkgPT0gVE9wZXJhdG9y
OjpFT3BJbml0aWFsaXplKTsKKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CisgICAg
ICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIGluaXROb2RlLT5nZXRSaWdodCgpfTsKKyAgICB9Cit9
CisKK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9s
VGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBhdXRvICp0eXBl
ID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworICAgIGF1dG8gKnZhciAgPSBuZXcgVFZh
cmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwgdHlwZSwgU3ltYm9sVHlw
ZTo6RW1wdHkpOworICAgIHJldHVybiAqdmFyOworfQorCitjb25zdCBUVmFyaWFibGUgJnNoOjpD
cmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMp
Cit7CisgICAgYXV0byAqdHlwZSA9IG5ldyBUVHlwZSgmc3RydWN0dXJlLCBmYWxzZSk7CisgICAg
dHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgaWYgKGFycmF5U2l6ZXMpCisgICAg
eworICAgICAgICB0eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKyAgICB9CisgICAgYXV0
byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCB0eXBl
LCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK3N0YXRpYyB2b2lk
IEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAm
c3JjKQoreworICAgIGlmIChzcmMuaXNEZWZpbmVkKCkpCisgICAgeworICAgICAgICBkZXN0LnNl
dERlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoc3JjLmhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCkpCisgICAgeworICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7Cisg
ICAgfQorfQorCitUSW50ZXJtU2VxdWVuY2UgJnNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZChj
b25zdCBUSW50ZXJtU2VxdWVuY2UgJnNlcSwgVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgYXV0
byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIG5ld1NlcS0+cHVzaF9iYWNr
KCZub2RlKTsKKworICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisgICAgewor
ICAgICAgICBuZXdTZXEtPnB1c2hfYmFjayhvbGROb2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Km5ld1NlcTsKK30KKwordm9pZCBzaDo6QWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0
LCBjb25zdCBURnVuY3Rpb24gJnNyYykKK3sKKyAgICBjb25zdCBzaXplX3QgcGFyYW1Db3VudCA9
IHNyYy5nZXRQYXJhbUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNv
dW50OyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciA9IHNyYy5nZXRQ
YXJhbShpKTsKKyAgICAgICAgZGVzdC5hZGRQYXJhbWV0ZXIodmFyKTsKKyAgICB9Cit9CisKK2Nv
bnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMp
Cit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJE
ZWZpbmVkKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoTmFtZShv
bGRGdW5jKSk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5bWJvbFRh
YmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVu
Yy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVuY3Rpb25F
eHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywg
b2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZz
aDo6Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdl
biAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSkKK3sKKyAg
ICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQg
fHwKKyAgICAgICAgICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJ
bnRlcm5hbCk7CisKKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVhdGVOZXdO
YW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKworICAgIGF1dG8gJm5ld0Z1bmMg
PSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1l
LnN5bWJvbFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZEZ1
bmMuZ2V0UmV0dXJuVHlwZSgpLCBvbGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygp
KTsKKworICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKyAgICBu
ZXdGdW5jLmFkZFBhcmFtZXRlcigmbmV3UGFyYW0pOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK2NvbnN0IFRGdW5j
dGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRW
YXJpYWJsZSAqPiAmbmV3UGFyYW1zKQoreworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJvbFR5cGUo
KSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorICAgICAgICAgICBvbGRGdW5jLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIE5hbWUgbmV3TmFt
ZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBOYW1lKG9s
ZEZ1bmMpOworCisgICAgYXV0byAmbmV3RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJs
ZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9sZEZ1bmMu
aXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0aW9uRXh0
cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1bmMsIG9s
ZEZ1bmMpOworICAgIGZvciAoYXV0byAqcGFyYW0gOiBuZXdQYXJhbXMpCisgICAgeworICAgICAg
ICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0Z1
bmM7Cit9CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VSZXR1
cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rp
b24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pCit7CisgICAgQVNTRVJUKG9s
ZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKworICAgIE5h
bWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkg
OiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgm
bmV3UmV0dXJuLCB0cnVlKTsKKyAgICBhdXRvICZuZXdGdW5jICAgICAgID0gKm5ldyBURnVuY3Rp
b24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JldHVyblR5cGUsIG9sZEZ1
bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0aW9u
RXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1bmMs
IG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6
OkdldEFyZyhjb25zdCBUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgpCit7Cisg
ICAgQVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgIGF1dG8gKmFyZyA9
IGNhbGwuZ2V0Q2hpbGROb2RlKGluZGV4KTsKKyAgICBBU1NFUlQoYXJnKTsKKyAgICBhdXRvICp0
YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHRhcmcpOworICAgIHJldHVybiAq
dGFyZzsKK30KKwordm9pZCBzaDo6U2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVf
dCBpbmRleCwgVEludGVybVR5cGVkICZhcmcpCit7CisgICAgQVNTRVJUKGluZGV4IDwgY2FsbC5n
ZXRDaGlsZENvdW50KCkpOworICAgICgqY2FsbC5nZXRTZXF1ZW5jZSgpKVtpbmRleF0gPSAmYXJn
OworfQorCitpbnQgc2g6OkdldEZpZWxkSW5kZXgoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAgICBjb25zdCBURmllbGRM
aXN0ICZmaWVsZExpc3QgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisKKyAgICBpbnQgaSA9IDA7Cisg
ICAgZm9yIChURmllbGQgKmZpZWxkIDogZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgaWYgKGZp
ZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQor
CitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoY29uc3QgVFZhcmlhYmxlICZzdHJ1Y3RJ
bnN0YW5jZVZhciwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7CisgICAgcmV0
dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0SW5zdGFuY2VWYXIpLCBm
aWVsZE5hbWUpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVEludGVybVR5
cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQoreworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG9iamVjdC5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7
CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICBjb25zdCBpbnQgaW5kZXggPSBHZXRGaWVs
ZEluZGV4KCpzdHJ1Y3R1cmUsIGZpZWxkTmFtZSk7CisgICAgQVNTRVJUKGluZGV4ID49IDApOwor
ICAgIHJldHVybiBBY2Nlc3NGaWVsZEJ5SW5kZXgob2JqZWN0LCBpbmRleCk7Cit9CisKK1RJbnRl
cm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVkICZvYmplY3QsIGlu
dCBpbmRleCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gb2JqZWN0LmdldFR5cGUoKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNBcnJh
eSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgp
OworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCgwIDw9IGluZGV4KTsKKyAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNp
emUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisgICAgICAg
IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICZvYmplY3QsCisgICAgICAgIG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBl
KFRCYXNpY1R5cGU6OkVidEludCkpKTsKK30KKworVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0lu
ZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxlTm9kZSwgaW50IGluZGV4KQoreworI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBpbmRleGFi
bGVOb2RlLmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlwZS5pc1Zl
Y3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisjZW5kaWYKKworICAgIGF1dG8gKmFjY2Vzc05v
ZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKyAgICAgICAgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dCwgJmluZGV4YWJsZU5vZGUsCisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcg
VENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsK
KyAgICByZXR1cm4gKmFjY2Vzc05vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkFjY2Vzc0lu
ZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKK3sKKyAgICBpZiAoaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gQWNjZXNzSW5kZXgobm9kZSwgKmluZGV4KTsKKyAg
ICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OlN1YlZlY3RvcihU
SW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAgICBBU1NF
UlQodmVjdG9yTm9kZS5nZXRUeXBlKCkuaXNWZWN0b3IoKSk7CisgICAgQVNTRVJUKDAgPD0gYmVn
aW4pOworICAgIEFTU0VSVChlbmQgPD0gNCk7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Cisg
ICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yTm9kZTsKKyAgICB9CisgICAg
VFZlY3RvcjxpbnQ+IG9mZnNldHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBiZWdpbikpOwor
ICAgIHN0ZDo6aW90YShvZmZzZXRzLmJlZ2luKCksIG9mZnNldHMuZW5kKCksIGJlZ2luKTsKKyAg
ICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBvZmZzZXRz
KTsKKyAgICByZXR1cm4gKnN3aXp6bGU7Cit9CisKK2Jvb2wgc2g6OklzU2NhbGFyQmFzaWNUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFyQmFzaWNU
eXBlKHR5cGUpOworfQorCitib29sIHNoOjpJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAm
dHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsKK30K
KworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0Ogor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKyAgICAgICAgY2FzZSBUQmFzaWNU
eXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICByZXR1
cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCkpOworfQorCitzdGF0aWMg
dm9pZCBJbml0VHlwZShUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisg
ICAgeworICAgICAgICBhdXRvIHNpemVzID0gdHlwZS5nZXRBcnJheVNpemVzKCk7CisgICAgICAg
IHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisgICAgICAgIHR5cGUubWFrZUFycmF5cyhzaXplcyk7
CisgICAgfQorfQorCitUVHlwZSAmc2g6OkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sK
KyAgICBhdXRvICZjbG9uZSA9ICpuZXcgVFR5cGUodHlwZSk7CisgICAgSW5pdFR5cGUoY2xvbmUp
OworICAgIHJldHVybiBjbG9uZTsKK30KKworVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0
IFRUeXBlICZ0eXBlKQoreworICAgIGF1dG8gJmlubmVyID0gKm5ldyBUVHlwZSh0eXBlKTsKKyAg
ICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKyAgICBJbml0VHlwZShpbm5lcik7CisgICAgcmV0
dXJuIGlubmVyOworfQorCitUVHlwZSAmc2g6OkRyb3BDb2x1bW5zKGNvbnN0IFRUeXBlICZtYXRy
aXhUeXBlKQoreworICAgIEFTU0VSVChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VS
VChIYXNTY2FsYXJCYXNpY1R5cGUobWF0cml4VHlwZSkpOworICAgIGNvbnN0IGNoYXIgKm1hbmds
ZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJnZlY3RvclR5cGUgPQorICAgICAgICAqbmV3
IFRUeXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9u
KCksIG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgbWF0cml4
VHlwZS5nZXRSb3dzKCksIDEsIG1hdHJpeFR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5nbGVkTmFt
ZSk7CisgICAgSW5pdFR5cGUodmVjdG9yVHlwZSk7CisgICAgcmV0dXJuIHZlY3RvclR5cGU7Cit9
CisKK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5cGUp
Cit7CisgICAgQVNTRVJUKGFycmF5VHlwZS5pc0FycmF5KCkpOworICAgIGNvbnN0IGNoYXIgKm1h
bmdsZWROYW1lID0gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvICZhcnJheVNpemVzICA9IGFycmF5
VHlwZS5nZXRBcnJheVNpemVzKCk7CisKKyAgICBhdXRvICZpbm5lclR5cGUgPQorICAgICAgICAq
bmV3IFRUeXBlKGFycmF5VHlwZS5nZXRCYXNpY1R5cGUoKSwgYXJyYXlUeXBlLmdldFByZWNpc2lv
bigpLCBhcnJheVR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgYXJyYXlU
eXBlLmdldE5vbWluYWxTaXplKCksIGFycmF5VHlwZS5nZXRTZWNvbmRhcnlTaXplKCksCisgICAg
ICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6ZSgpIC0g
MSksIG1hbmdsZWROYW1lKTsKKyAgICBJbml0VHlwZShpbm5lclR5cGUpOworICAgIHJldHVybiBp
bm5lclR5cGU7Cit9CisKK3N0YXRpYyBUVHlwZSAmU2V0VHlwZURpbXNJbXBsKGNvbnN0IFRUeXBl
ICZ0eXBlLCBpbnQgcHJpbWFyeSwgaW50IHNlY29uZGFyeSkKK3sKKyAgICBBU1NFUlQoMSA8IHBy
aW1hcnkgJiYgcHJpbWFyeSA8PSA0KTsKKyAgICBBU1NFUlQoMSA8PSBzZWNvbmRhcnkgJiYgc2Vj
b25kYXJ5IDw9IDQpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkpOworICAg
IGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJm5ld1R5cGUg
PSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lzaW9uKCksIHR5
cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFy
eSwgc2Vjb25kYXJ5LCB0eXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOworICAgIElu
aXRUeXBlKG5ld1R5cGUpOworICAgIHJldHVybiBuZXdUeXBlOworfQorCitUVHlwZSAmc2g6OlNl
dFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkKK3sKKyAgICBBU1NFUlQo
dHlwZS5pc1JhbmswKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKyAgICByZXR1cm4gU2V0VHlwZURp
bXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7Cit9CisKK1RUeXBlICZzaDo6U2V0TWF0cml4Um93RGlt
KGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGltKQoreworICAgIEFTU0VSVChtYXRy
aXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0RpbSA8PSA0
KTsKKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKG1hdHJpeFR5cGUsIG1hdHJpeFR5cGUuZ2V0
Q29scygpLCBuZXdEaW0pOworfQorCitib29sIHNoOjpIYXNNYXRyaXhGaWVsZChjb25zdCBUU3Ry
dWN0dXJlICZzdHJ1Y3R1cmUpCit7CisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3Ry
dWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmll
bGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIHNoOjpIYXNBcnJheUZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVy
ZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworICAg
ICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworVEludGVybVR5
cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZy
b21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21Ob2RlLmdldFR5cGUo
KTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisgICAgQVNTRVJU
KEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNB
cnJheSgpKTsKKworICAgIGlmICh0b1R5cGUgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9y
KAorICAgICAgICAgICAgKm5ldyBUVHlwZSh0b1R5cGUsIGZyb21UeXBlLmdldE5vbWluYWxTaXpl
KCksIGZyb21UeXBlLmdldFNlY29uZGFyeVNpemUoKSksCisgICAgICAgICAgICBuZXcgVEludGVy
bVNlcXVlbmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisK
K1RJbnRlcm1UeXBlZCAmc2g6OkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50
ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21O
b2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7
CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCh0
b1R5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSBmcm9tVHlwZS5nZXROb21pbmFsU2l6ZSgpKTsKKyAg
ICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRTZWNvbmRh
cnlTaXplKCkpOworICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNTRVJUKCFm
cm9tVHlwZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBm
cm9tVHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZm
cm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisKK1RJbnRlcm1UeXBl
ZCAmc2g6OkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZnJvbVR5cGUgPSBm
cm9tTm9kZS5nZXRUeXBlKCk7CisKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlw
ZSkpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5cGUpKTsKKyAgICBBU1NF
UlQoIXRvVHlwZS5pc0FycmF5KCkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsK
KworICAgIGlmICh0b1R5cGUgPT0gZnJvbVR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bU5vZGU7CisgICAgfQorICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKyAgICByZXR1cm4g
c3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImFzX3R5cGUiLCBTeW1ib2xUeXBl
OjpCdWlsdEluKSwgdG9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSwgMSwgJnRhcmcpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxw
ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDllODlmZWIwNzMyOTBhZTYxYTE2ZmUwNTIwNjQwNmMwNzUxOGM1
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgKQEAgLTAsMCAr
MSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5n
PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2Vu
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBjb252ZW5pZW5jZSB2
aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KK3N0cnVjdCBEZWNs
YXJhdGlvbgoreworICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKyAgICBUSW50ZXJtVHlwZWQg
KmluaXRFeHByOyAgLy8gTm9uLW51bGwgaWZmIGRlY2xhcmF0aW9uIGlzIGluaXRpYWxpemVkLgor
fTsKKworLy8gUmV0dXJucyBhIGBEZWNsYXJhdGlvbmAgdmlldyBvZiB0aGUgZ2l2ZW4gbm9kZS4K
K0RlY2xhcmF0aW9uIFZpZXdEZWNsYXJhdGlvbihUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2Rl
KTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGZvciBhIHN0cnVjdCB0eXBlLgorY29uc3QgVFZh
cmlhYmxlICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxl
IGZvciBhIHN0cnVjdCBpbnN0YW5jZS4KK2NvbnN0IFRWYXJpYWJsZSAmQ3JlYXRlSW5zdGFuY2VW
YXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0g
VFF1YWxpZmllcjo6RXZxVGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMgPSBu
dWxscHRyKTsKKworLy8gVGhlIGlucHV0IHNlcXVlbmNlIHNob3VsZCBiZSBkaXNjYXJkZWQgZnJv
bSBBU1QgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQuCitUSW50ZXJtU2VxdWVuY2UgJkNsb25lU2VxdWVu
Y2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9k
ZSk7CisKKy8vIEFwcGVuZHMgcGFyYW1ldGVycyBmcm9tIGBzcmNgIGZ1bmN0aW9uIHRvIGBkZXN0
YCBmdW5jdGlvbi4KK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0LCBjb25z
dCBURnVuY3Rpb24gJnNyYyk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uLgorY29uc3QgVEZ1bmN0
aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2VuICZpZEdl
biwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5k
IHByZXBlbmRzIHRoZSBwcm92aWRlZCBleHRyIHBhcmFtZXRlci4KKy8vIElmIGBpZEdlbmAgaXMg
bnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhlIEFT
VC4KK2NvbnN0IFRGdW5jdGlvbiAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9s
VGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSk7
CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBw
YXJhbWV0ZXJzLgorLy8gSWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24g
bXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1
bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtKTsKKworLy8g
Q2xvbmVzIGEgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaXRzIHJldHVybiB0eXBlLgorLy8gSWYgYGlk
R2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJv
bSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJu
VHlwZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVu
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKworLy8gR2V0cyB0aGUgYXJndW1lbnQgb2YgYSBm
dW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK1RJbnRlcm1UeXBlZCAmR2V0QXJnKGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisKKy8vIFNldHMgdGhl
IGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCit2b2lkIFNl
dEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1UeXBlZCAm
YXJnKTsKKworLy8gUmV0dXJucyB0aGUgZmllbGQgaW5kZXggd2l0aGluIHRoZSBnaXZlbiBzdHJ1
Y3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gUmV0dXJucyAtMSBpZiB0aGUgc3RydWN0
IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgoraW50IEdldEZpZWxkSW5kZXgoY29u
c3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFt
ZSk7CisKKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gVGhlIHZhcmlhYmxlIG11c3QgYmUgYSBzdHJ1Y3QgaW5z
dGFuY2UuCitUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUgJnN0cnVj
dEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSk7CisKKy8vIEFj
Y2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIGZpZWxkIG5h
bWUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGluc3RhbmNlLgorVEludGVybUJpbmFy
eSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyAmZmllbGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVuIG5vZGUg
YnkgaXRzIGZpZWxkIGluZGV4LgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBpbnN0YW5j
ZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQgJm9iamVj
dCwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBmb3IgdGhl
IGdpdmVuIG5vZGUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGFuIGFycmF5LCB2ZWN0b3IsIG9yIG1h
dHJpeC4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxl
Tm9kZSwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBmb3Ig
dGhlIGdpdmVuIG5vZGUgaWYgYGluZGV4YCBpcyBub24tbnVsbC4KKy8vIFJldHVybnMgdGhlIG9y
aWdpbmFsIG5vZGUgaWYgYGluZGV4YCBpcyBudWxsLgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBh
cnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24tbnVsbC4KK1RJbnRlcm1U
eXBlZCAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmluZGV4KTsK
KworLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2UgcmFuZ2Uu
CisvLyBUaGlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vZGUgaWYgdGhlIHNsaWNlIGlzIGFuIGlk
ZW50aXR5IGZvciB0aGUgbm9kZS4KK1RJbnRlcm1UeXBlZCAmU3ViVmVjdG9yKFRJbnRlcm1UeXBl
ZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworLy8gTWF0Y2hlcyBzY2FsYXIg
Ym9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1NjYWxhckJhc2ljVHlwZShj
b25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIE1hdGNoZXMgdmVjdG9yIGJvb2wsIGludCwgdWludCwg
ZmxvYXQsIGRvdWJsZS4KK2Jvb2wgSXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUp
OworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKy8vIFR5cGUg
ZG9lcyBub3QgbmVlZCB0byBiZSBhIHNjYWxhci4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBk
b3VibGUuCitib29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworCisvLyBD
bG9uZXMgYSB0eXBlLgorVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8v
IENsb25lcyBhIHR5cGUgYW5kIGRyb3BzIGFsbCBhcnJheSBkaW1lbnNpb25zLgorVFR5cGUgJklu
bmVybW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBDcmVhdGVzIGEgdmVjdG9yIHR5
cGUgYnkgZHJvcHBpbmcgdGhlIGNvbHVtbnMgb2ZmIG9mIGEgbWF0cml4IHR5cGUuCitUVHlwZSAm
RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworCisvLyBDcmVhdGVzIGEgdHlw
ZSBieSBkcm9wcGluZyB0aGUgb3V0ZXIgZGltZW5zaW9uIG9mZiBvZiBhbiBhcnJheSB0eXBlLgor
VFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKworLy8g
Q3JlYXRlcyBhIHNjYWxhciBvciB2ZWN0b3IgdHlwZSBieSBjaGFuZ2luZyB0aGUgZGltZW5zaW9u
cyBvZiBhIHZlY3RvciB0eXBlLgorVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlw
ZSwgaW50IG5ld0RpbSk7CisKKy8vIENyZWF0ZXMgYSBtYXRyaXggdHlwZSBieSBjaGFuZ2luZyB0
aGUgcm93IGRpbWVuc2lvbnMgb2YgYSBtYXRyaXggdHlwZS4KK1RUeXBlICZTZXRNYXRyaXhSb3dE
aW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworCisvLyBSZXR1cm5zIHRy
dWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMgYSBmaWVsZCB3aXRoIG1hdHJp
eCB0eXBlLgorYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUp
OworCisvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMg
YSBmaWVsZCB3aXRoIGFycmF5IHR5cGUuCitib29sIEhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5vZGVgIHRvIGB0b1R5cGVgIGJ5
IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVpciB0eXBlcyBkaWZmZXIuCisv
LyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKy8vIEFycmF5IHR5
cGVzIGFyZSBub3QgYWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKFRCYXNpY1R5
cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5v
ZGVgIHRvIGB0b1R5cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVp
ciB0eXBlcyBkaWZmZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIG11c3QgY29p
bmNpZGUgYmV0d2VlbiB0byBhbmQgZnJvbS4KKy8vIEFycmF5IHR5cGVzIGFyZSBub3QgYWxsb3dl
ZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUsIFRJbnRl
cm1UeXBlZCAmZnJvbU5vZGUpOworCitUSW50ZXJtVHlwZWQgJkFzVHlwZShTeW1ib2xFbnYgJnN5
bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9kZSk7CisK
K30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZkZGQ4NjVjN2NjNmQ1OWQ2ZmViNjU1MDQxYzdiNDkzZWVhN2Q3MmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfQ09OU1RBTlRfTkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNlIHNoCit7
CisKK25hbWVzcGFjZSBjb25zdGFudF9uYW1lcworeworCitjb25zdGV4cHIgTmFtZSBrQ292ZXJh
Z2VNYXNrRW5hYmxlZCgiQU5HTEVfQ292ZXJhZ2VNYXNrRW5hYmxlZCIsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworY29uc3RleHByIE5hbWUga1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxl
ZCgiQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworfSAgLy8g
bmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNUQU5UX05B
TUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU4NWU5YTY2ZDU4YjkxODc2M2Y2NWMwZTQ0NjhiYzIyYTYwZGU2
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaApAQCAtMCwwICsxLDE2
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0RFQlVHX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2Rl
ZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorCisjZGVmaW5lIExPR0lDX0VSUk9SKCkgQVNTRVJU
KGZhbHNlKQorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGVidWdTaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYWRkNzcxNDIyMGI0MTk4YTU3
MzYzMzE1OWVjNTY4N2UwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1
Z1NpbmsuaApAQCAtMCwwICsxLDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGlvc3RyZWFt
PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorCituYW1lc3Bh
Y2Ugc2gKK3sKKworY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKK3sKKyAgcHVibGljOgorICAgIFN0cmlu
Z09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRsZSkgeyBB
U1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorCisgICAgYm9vbCBvYnNlcnZlKGNoYXIgYykKKyAg
ICB7CisgICAgICAgIGlmIChuZWVkbGVbY3VyclBvc10gPT0gYykKKyAgICAgICAgeworICAgICAg
ICAgICAgKytjdXJyUG9zOworICAgICAgICAgICAgaWYgKGN1cnJQb3MgPT0gbmVlZGxlLnNpemUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldE5lZWRsZSgpIGNv
bnN0IHsgcmV0dXJuIG5lZWRsZTsgfQorCisgICAgdm9pZCByZXNldCgpIHsgY3VyclBvcyA9IDA7
IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5lZWRsZTsKKyAgICBzaXplX3QgY3Vy
clBvcyA9IDA7Cit9OworCitjbGFzcyBEZWJ1Z1NpbmsgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sK
KyAgcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBFc2NhcGVkU2luazsKKyAgICBjbGFzcyBFc2Nh
cGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgIHsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERlYnVnU2luazsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRXNjYXBlZFNpbmsoRGVidWdT
aW5rICZvd25lcikgOiBtT3duZXIob3duZXIpLCBtQmVnaW4ob3duZXIuc2l6ZSgpKSB7fQorCisg
ICAgICBwdWJsaWM6CisgICAgICAgIEVzY2FwZWRTaW5rKEVzY2FwZWRTaW5rICYmb3RoZXIpIDog
bU93bmVyKG90aGVyLm1Pd25lciksIG1CZWdpbihvdGhlci5tQmVnaW4pIHt9CisKKyAgICAgICAg
fkVzY2FwZWRTaW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IG1P
d25lci5jX3N0cigpOworICAgICAgICAgICAgY29uc3QgaW50IGVuZCA9IG1Pd25lci5zaXplKCk7
CisgICAgICAgICAgICBtT3duZXIub25Xcml0ZShwICsgbUJlZ2luLCBwICsgZW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJmdldCgpIHsgcmV0dXJuIG1Pd25lci5tUGFy
ZW50OyB9CisKKyAgICAgICAgb3BlcmF0b3IgVEluZm9TaW5rQmFzZSAmKCkgeyByZXR1cm4gZ2V0
KCk7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdTaW5rICZtT3duZXI7CisgICAg
ICAgIGNvbnN0IGludCBtQmVnaW47CisgICAgfTsKKworICBwdWJsaWM6CisgICAgRGVidWdTaW5r
KFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisgICAgICAgIDog
bVBhcmVudChwYXJlbnQpLCBtQWxzb0xvZ1RvU3Rkb3V0KGFsc29Mb2dUb1N0ZG91dCkKKyAgICB7
fQorCisgICAgdm9pZCB3YXRjaChzdGQ6OnN0cmluZyBjb25zdCAmbmVlZGxlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU9ic2Vy
dmVycy5lbXBsYWNlX2JhY2sobmVlZGxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZXJhc2UoKQorICAgIHsKKyAgICAgICAgbVBhcmVudC5lcmFzZSgpOworICAgICAgICBmb3IgKFN0
cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG9ic2VydmVyLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgc2l6ZSgp
IHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0cmluZyAm
c3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5zdHIoKTsgfQorCisgICAgY29uc3QgY2hhciAq
Y19zdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LmNfc3RyKCk7IH0KKworICAgIEVzY2FwZWRT
aW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQgJnZhbHVl
KQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbVBhcmVudC5zaXplKCk7Cisg
ICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisgICAgICAgIGNvbnN0IHNpemVfdCBlbmQgPSBtUGFy
ZW50LnNpemUoKTsKKworICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0cigpOwor
ICAgICAgICBvbldyaXRlKHAgKyBiZWdpbiwgcCArIGVuZCk7CisKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgb25Xcml0ZShjb25zdCBjaGFyICpi
ZWdpbiwgY2hhciBjb25zdCAqZW5kKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqcCA9IGJl
Z2luOworICAgICAgICB3aGlsZSAocCAhPSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6
Y291dCA8PCAqcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJpbmdPYnNl
cnZlciAmb2JzZXJ2ZXIgOiBtT2JzZXJ2ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvYnNlcnZlci5vYnNlcnZlKCpwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmVlZGxl
ID0gb2JzZXJ2ZXIuZ2V0TmVlZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKW5lZWRs
ZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVh
a3BvaW50IGhlcmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICsrcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAg
ICAgICB7CisgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgfQorICAgIH0K
KworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1QYXJlbnQ7CisgICAgc3RkOjp2ZWN0
b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisgICAgYm9vbCBtQWxzb0xvZ1RvU3Rkb3V0
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmRmNDMwZTFhYjQxZTFiMTdlMjRkN2Q2MjFi
ZjU1YzEyZWI5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVw
ZW5kZW50RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVy
ZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBE
aXNjb3ZlcmVyIDogcHVibGljIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIKK3sK
KyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxl
ICYpPiAmbVZhcnM7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5jVG9EZWY7
CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtTm9uRGVwRnVuY3Rp
b25zOworCisgIHB1YmxpYzoKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9u
ICo+IG1EZXBGdW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIERpc2NvdmVyZXIoY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMsCisgICAgICAgICAgICAg
ICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmZnVuY1RvRGVmKQorICAgICAgICA6IERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUpLCBtVmFycyh2
YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisgICAge30KKworICAgIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgaWYg
KCFtVmFycyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rp
b24oc3ltYm9sTm9kZSk7CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIG1EZXBGdW5j
dGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQcmVWaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFnZ3JlZ2F0
ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1
bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAgICAgICAg
ICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rpb25zLmVu
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpID09IG1E
ZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBp
dCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQgPT0gbUZ1
bmNUb0RlZi5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlY3Vy
c2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRoaXMgcHJv
cGVydHkgdG9vLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1l
cyAoZGlyZWN0IGFuZCBtdXR1YWwpIHJlY3Vyc2lvbiBpcyBwcm9oaWJpdGVkLgorICAgICAgICAg
ICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlID0gKml0LT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rp
b25zLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChtRGVwRnVu
Y3Rpb25zLmZpbmQoZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNjb3ZlckVuY2xvc2lu
Z0Z1bmN0aW9uKGFnZ3JlZ2F0ZU5vZGUpOworICAgICAgICAgICAgQVNTRVJUKG93bmVyKTsKKyAg
ICAgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gZnVuY0RlZk5v
ZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQb3N0Vmlz
aXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykg
IT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtTm9uRGVwRnVu
Y3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZXBGdW5jdGlv
bnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtTm9uRGVwRnVuY3Rpb25zLmluc2VydChmdW5jKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6OnVub3Jk
ZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IHNoOjpEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9u
cygKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCit7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmlu
aXRpb24gZnVuY1RvRGVmID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhyb290KTsKKyAgICBE
aXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKyAgICByb290LnRyYXZlcnNl
KCZkaXNjb3ZlcmVyKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKGRpc2NvdmVyZXIubURlcEZ1bmN0
aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5j
dGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVkMWJmMjdjOTBjYWIwNmMzYzE4YWUxNDBhZGM4Mzc1ZTJkZGMxNWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaApAQCAt
MCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCisjZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5E
RU5URlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBp
bGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBGaW5kcyBhbmQgcmV0dXJucyBhbGwgZnVu
Y3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorQU5HTEVfTk9fRElT
Q0FSRCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IERpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBzdGQ6OmZ1
bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJkMzkw
ZTc5NWRiMWI3ZjMzY2JkODQ1YWY3NjEyNTdlN2UwZTBmMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApAQCAtMCww
ICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdF8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaW5WaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKyAgICA6IFRJbnRl
cm1UcmF2ZXJzZXIocHJlVmlzaXRfLCBpblZpc2l0XywgcG9zdFZpc2l0Xywgc3ltYm9sVGFibGUp
Cit7fQorCitjb25zdCBURnVuY3Rpb24gKkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXI6OmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpCit7CisgICAg
QVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKworICAgIHVuc2lnbmVk
IGhlaWdodCA9IDA7CisgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdldEFuY2Vz
dG9yTm9kZShoZWlnaHQpKQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKmZ1bmNEZWZOb2RlID0gYW5jZXN0b3ItPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgfQorICAgICAgICArK2hlaWdodDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0
aW9uVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2IyYWEwMDE0YTAwNDkzODZlMmE3ZjZkNzkzMmQ5YjI3
M2M0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdG
dW5jdGlvblRyYXZlcnNlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJ
TkdGVU5DVElPTlRSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQgc3VwcG9y
dHMgZGlzY292ZXJ5IG9mIHRoZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyB0by4KK2NsYXNzIERp
c2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworICBwdWJsaWM6CisgICAgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcihi
b29sIHByZVZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpblZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
b3N0VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBmdW5j
dGlvbiBhIG5vZGUgYmVsb25ncyBpbnNpZGUuCisgICAgLy8gUmV0dXJucyBudWxsIGlmIHRoZSBu
b2RlIGRvZXMgbm90IGJlbG9uZyBpbnNpZGUgYSBmdW5jdGlvbi4KKyAgICBjb25zdCBURnVuY3Rp
b24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJTkdGVU5DVElPTlRSQVZFUlNFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1p
dE1ldGFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJkZDNmY2QzN2E3YWMzZDBlNjEzNjAwYjVlOWNhODA4
ZTMwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAKQEAg
LTAsMCArMSwyNDU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUg
PG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVp
bGRlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJv
Z3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMp
Cit1c2luZyBTaW5rID0gRGVidWdTaW5rOworI2Vsc2UKK3VzaW5nIFNpbmsgPSBUSW5mb1NpbmtC
YXNlOworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQorewor
CitzdHJ1Y3QgVmFyRGVjbAoreworICAgIGV4cGxpY2l0IFZhckRlY2woY29uc3QgVFZhcmlhYmxl
ICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpLCBtSXNGaWVsZChmYWxzZSkge30KKyAgICBleHBsaWNp
dCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1Jc0ZpZWxk
KHRydWUpIHt9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYXJpYWJsZSgpKTsKKyAgICAgICAgcmV0
dXJuICptVmFyaWFibGU7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGNvbnN0IFRGaWVsZCAm
ZmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmllbGQoKSk7CisgICAgICAg
IHJldHVybiAqbUZpZWxkOworICAgIH0KKworICAgIEFOR0xFX0lOTElORSBib29sIGlzVmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiAhbUlzRmllbGQ7IH0KKworICAgIEFOR0xFX0lOTElORSBib29s
IGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBtSXNGaWVsZDsgfQorCisgICAgY29uc3QgVFR5cGUg
JnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50eXBlKCkgOiB2YXJp
YWJsZSgpLmdldFR5cGUoKTsgfQorCisgICAgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBmaWVsZCgpLnN5bWJvbFR5cGUoKSA6
IHZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpOworICAgIH0KKworICBwcml2YXRlOgorICAgIHVuaW9u
CisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKm1WYXJpYWJsZTsKKyAgICAgICAgY29u
c3QgVEZpZWxkICptRmllbGQ7CisgICAgfTsKKyAgICBib29sIG1Jc0ZpZWxkOworfTsKKworY2xh
c3MgR2VuTWV0YWxUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJs
aWM6CisgICAgfkdlbk1ldGFsVHJhdmVyc2VyKCkgb3ZlcnJpZGU7CisKKyAgICBHZW5NZXRhbFRy
YXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAg
IFNpbmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudik7CisKKyAgICB2b2lkIHZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFN3
aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFRlcm5h
cnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRJZkVs
c2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFN3aXRj
aChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0Q2FzZShW
aXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJv
dG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICop
IG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sg
Kikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7CisgICAg
Ym9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJp
ZGU7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJyaWRlOwor
ICAgIGJvb2wgdmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICopOworICAgIGJvb2wgdmlzaXRXaGls
ZUxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdERvV2hpbGVMb29wKFRJbnRlcm1M
b29wICopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKikgb3Zl
cnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICB1c2luZyBGdW5jVG9OYW1lID0gc3RkOjptYXA8SW1t
dXRhYmxlU3RyaW5nLCBOYW1lPjsKKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1bmNUb05h
bWUoKTsKKworICAgIHN0cnVjdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZworICAgIHsK
KyAgICAgICAgYm9vbCBpc1BhcmFtZXRlciAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAg
ICBib29sIGlzTWFpblBhcmFtZXRlciAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAgIGJvb2wg
ZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1BhY2tl
ZCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGRpc2FibGVTdHJ1Y3RT
cGVjaWZpZXIgICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2lu
dGVyICAgPSBudWxscHRyOworICAgICAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNl
ID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgc3RydWN0IEVtaXRUeXBlQ29uZmlnCisgICAgewor
ICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29uZmlnID0g
bnVsbHB0cjsKKyAgICB9OworCisgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKyAgICB2b2lk
IGVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpOworICAgIHZvaWQg
ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAgdm9pZCBlbWl0
RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUg
JnBhcmFtKTsKKworICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVjdCk7Cisg
ICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisgICAgdm9pZCBlbWl0
TmFtZU9mKGNvbnN0IFZhckRlY2wgJm9iamVjdCk7CisKKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5h
bWUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7Cisg
ICAgdm9pZCBlbWl0VHlwZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcg
JmV0Q29uZmlnKTsKKyAgICB2b2lkIGVtaXRQb3N0UXVhbGlmaWVyKGNvbnN0IEVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFF1YWxpZmllciBxdWFsaWZpZXIpOworCisgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGlj
ZXMKKyAgICB7CisgICAgICAgIHNpemVfdCBhdHRyaWJ1dGUgPSAwOworICAgICAgICBzaXplX3Qg
Y29sb3IgICAgID0gMDsKKyAgICB9OworCisgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlvbihj
b25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cnVjdHVyZSAmcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRB
bm5vdGF0aW9uSW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1pdEF0dHJp
YnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlvbkluZGlj
ZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKyAgICB2b2lkIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbihj
b25zdCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCBlbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0
aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcp
OworICAgIHZvaWQgZW1pdFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xh
cmF0aW9uQ29uZmlnICZldmRDb25maWcpOworCisgICAgdm9pZCBlbWl0T3BlbkJyYWNlKCk7Cisg
ICAgdm9pZCBlbWl0Q2xvc2VCcmFjZSgpOworCisgICAgdm9pZCBncm91cGVkVHJhdmVyc2UoVElu
dGVybU5vZGUgJm5vZGUpOworCisgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChjb25z
dCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICZpbmRleCk7CisgICAgY29uc3QgVEZp
ZWxkICZnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJtVHlwZWQgJmZpZWxkc05vZGUsIFRJbnRl
cm1UeXBlZCAmaW5kZXhOb2RlKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29u
c3RhbnRVbmlvbkFycmF5KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBzaXplKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29uc3RhbnRVbmlv
bihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24pOwor
CisgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0
IGNvbnN0VW5pb24pOworCisgIHByaXZhdGU6CisgICAgU2luayAmbU91dDsKKyAgICBjb25zdCBU
Q29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJm1QaXBlbGlu
ZVN0cnVjdHM7CisgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAgU3ltYm9s
RW52ICZtU3ltYm9sRW52OworICAgIElkR2VuICZtSWRHZW47CisgICAgaW50IG1JbmRlbnRMZXZl
bCAgICAgICAgPSAtMTsKKyAgICBpbnQgbUxhc3RJbmRlbnRhdGlvblBvcyA9IC0xOworICAgIGJv
b2wgbVBhcmVudElzU3dpdGNoICAgID0gZmFsc2U7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNv
bnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1ib2xzOworICAgIGNvbnN0IEZ1bmNUb05h
bWUgbUZ1bmNUb05hbWUgICA9IEJ1aWxkRnVuY1RvTmFtZSgpOworICAgIHNpemVfdCBtTWFpblRl
eHR1cmVJbmRleCAgICAgICA9IDA7CisgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAg
ID0gMDsKKyAgICBzaXplX3QgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPSByeDo6bXRsOjprRGVm
YXVsdFVuaWZvcm1zQmluZGluZ0luZGV4OworfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKK3sKKyAgICBBU1NF
UlQobUluZGVudExldmVsID09IC0xKTsKKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7Cit9
CisKK0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIg
JmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmsgJm91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3Rz
ICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgIG1PdXQob3V0KSwKKyAgICAgIG1Db21waWxlcihj
b21waWxlciksCisgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyksCisgICAg
ICBtSW52YXJpYW50cyhpbnZhcmlhbnRzKSwKKyAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwK
KyAgICAgIG1JZEdlbihpZEdlbikKK3t9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRJ
bmRlbnRhdGlvbigpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAwKTsKKworICAgIGlm
IChtTGFzdEluZGVudGF0aW9uUG9zID09IG1PdXQuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorICAgIH0KKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisgICAgeworICAgICAgICBtT3V0IDw8ICIg
ICI7CisgICAgfQorCisgICAgbUxhc3RJbmRlbnRhdGlvblBvcyA9IG1PdXQuc2l6ZSgpOworfQor
CitzdGF0aWMgY29uc3QgY2hhciAqR2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdU
eXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTEgPSBudWxscHRyKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgICAgICByZXR1cm4gIiwiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICI9IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgICAgICByZXR1cm4g
Ij0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICAgICAg
cmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAg
ICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIlPSI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICByZXR1cm4g
Ijw8PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRpbmcuCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAg
ICAgcmV0dXJuICI+Pj0iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1ldGljIHNo
aWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAg
ICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lz
ZVhvckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJ8PSI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICByZXR1cm4gIisiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICByZXR1cm4gIi8iOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgICAgIHJldHVybiAiJSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gIjw8IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGlu
Zy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisgICAgICAgICAg
ICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlm
dGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmQ6CisgICAgICAgICAg
ICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvcjoKKyAg
ICAgICAgICAgIHJldHVybiAiXiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNl
T3I6CisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAiPD0iOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAg
IHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5Db21wb25l
bnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8PSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsQ29tcG9uZW50V2lz
ZToKKyAgICAgICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
R3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgIHJldHVybiAifHwi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgIHJl
dHVybiAiIT0vKnhvciovIjsgIC8vIFhYWDogVGhpcyBtaWdodCBuZWVkIHRvIGJlIGhhbmRsZWQg
ZGlmZmVyZW50bHkgZm9yIHNvbWUgb2J0dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1c2UgY2FzZS4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6
CisgICAgICAgICAgICByZXR1cm4gIiYmIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5l
Z2F0aXZlOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFBvc2l0aXZlOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2Fs
Tm90OgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgICAgICByZXR1cm4gIn4i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgICAg
IHJldHVybiAiKysiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoK
KyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJl
SW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIi0tIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICAgICAg
cmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gIio9IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAg
ICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JU
aW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHJl
dHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhcjoK
KyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIj09IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAg
ICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoK
KyAgICAgICAgICAgIGlmICgoYXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVj
dG9yKCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdU
eXBlMS0+Z2V0U3RydWN0KCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5
KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuICI9PSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorICAg
ICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3Io
KSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdUeXBlMS0+
aXNBcnJheSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xF
X25vdEVxdWFsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUw
LT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3RFcXVhbFN0cnVjdCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wS2lsbDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAia2lsbCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgICAgICByZXR1cm4g
InJldHVybiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKyAgICAgICAgICAg
IHJldHVybiAiYnJlYWsiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6Cisg
ICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUmFkaWFuczoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfcmFkaWFucyI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVzOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9k
ZWdyZWVzIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX2F0YW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kOgorICAg
ICAgICAgICAgcmV0dXJuICJBTkdMRV9tb2QiOyAgLy8gZGlmZmVycyBmcm9tIG1ldGFsOjptb2QK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZnJhY3Q6CisgICAgICAgICAgICByZXR1cm4g
IkFOR0xFX3JlZnJhY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6Cisg
ICAgICAgICAgICByZXR1cm4gIkFOR0xFX2Rpc3RhbmNlIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbGVuZ3RoIjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcERvdDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZG90
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIHJl
dHVybiAiQU5HTEVfbm9ybWFsaXplIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZhY2Vm
b3J3YXJkOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9mYWNlZm9yd2FyZCI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9y
ZWZsZWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBvbmVudFdp
c2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBseSI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX291dGVyUHJvZHVjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaWdu
OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWduIjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWJzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFsbCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbnk6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjphbnkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6c2luIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvczoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BUYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp0YW4iOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFjb3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnNpbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wVGFuaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbmgiOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXNpbmg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphc2luaCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zaDoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmFjb3NoIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6YXRhbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Rm1hOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zm1hIjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvdzoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpleHAi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmV4cDIiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZzI6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2cyIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFNxcnQ6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzcXJ0IjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zmxv
b3IiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjp0cnVuYyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2VpbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGcmFjdDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyYWN0IjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE1pbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1pbiI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjptYXgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2
ZW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyaW50IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcENsYW1wOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2xhbXAiOyAgLy8g
VE9ETyBmYXN0IHZzIHByZWNpc2UgbmFtZXNwYWNlCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNaXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3RlcDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnN0ZXAiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnNtb290aHN0ZXAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSXNuYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc25hbiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzaW5m
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExkZXhwOgorICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6bGRleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRnJleHA6CisgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjpmcmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbnZlcnNlc3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJzcXJ0IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
Y3Jvc3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmRmZHgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmRmZHkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wRndpZHRoOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnRyYW5zcG9zZSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmRldGVybWluYW50IjsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfaW52ZXJzZSI7
CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0
c1RvRmxvYXQ6CisgICAgICAgIHsKKyNkZWZpbmUgUkVUVVJOX0FTX1RZUEUocG9zdCkgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHJlc3VsdFR5cGUuZ2V0QmFzaWNUeXBlKCkpICAg
ICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQiIHBvc3QgIj4iOyAgIFwKKyAgICAgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAorICAgICAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4g
ImFzX3R5cGU8ZmxvYXQiIHBvc3QgIj4iOyBcCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRPRE8oKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRvcl9UT0RP
IjsgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHdoaWxlIChmYWxzZSkKKworICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUu
aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQ
RSgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmlz
VmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRU
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIp
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fQVNfVFlQRSgiMyIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiNCIpOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBUT0RPKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9ETyI7Cisg
ICAgICAgICAgICB9CisKKyN1bmRlZiBSRVRVUk5fQVNfVFlQRQorICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtMngxNiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19mbG9h
dF90b19zbm9ybTJ4MTYiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm00
eDg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtNHg4IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTR4ODoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1
bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVu
cGFja1Nub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTJ4
MTZfdG9fZmxvYXQiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4
ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja191bm9ybTR4OF90b19mbG9hdCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4ODoKKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTR4OF90b19mbG9hdCI7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVf
cGFja19oYWxmXzJ4MTYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4
MTY6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOworCisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dGZpZWxkUmV2ZXJzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEZpbmRNU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVW11bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11bEV4dGVu
ZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BN
ZW1vcnlCYXJyaWVyQXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJCdWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJy
aWVySW1hZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyU2hhcmVk
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQXRvbWljTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXRvbWljT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RW1pdFZlcnRleDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2ZToKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFj
a0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0aDoKKyAg
ICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ29uc3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9u
SW5BU1Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlv
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxCdWlsdEluRnVuY3Rpb246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgMAorc3RhdGljIGludCBHZXRPcGVyYXRvclByZWNl
ZGVuY2UoVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiAxNzsKKyAgICAg
ICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JB
c3NpZ246IHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOiB7CisgICAgICAgICAgICByZXR1cm4g
MTU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6IHsKKyAgICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOiB7CisgICAgICAgICAgICByZXR1cm4g
MTM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VYb3I6IHsKKyAgICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworICAgICAgICAgICAgcmV0dXJu
IDExOworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDEwOworICAgICAg
ICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJU
aGFuRXF1YWw6IHsKKyAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICB9IGJyZWFrOworCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICAg
ICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViOiB7CisgICAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAg
fSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRGl2OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDogewor
ICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zaXRp
dmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBy
ZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDogewor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3N0RGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK25hbWVzcGFjZQoreworCitlbnVtIGNs
YXNzIEFzc29jaWF0aXZpdHkKK3sKKyAgICBOb25lLAorICAgIExlZnQsCisgICAgUmlnaHQsCit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworc3RhdGljIEFzc29jaWF0aXZpdHkgR2V0
QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTdWI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VB
bmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1
YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxY
b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5
OjpMZWZ0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
U3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdHdpc2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6
OlJpZ2h0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BO
ZWdhdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50Ogor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBy
ZURlY3JlbWVudDogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7Cisg
ICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVE9ETygp
OworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7CisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgSXNTeW1ib2xpY09wZXJhdG9yKFRPcGVyYXRv
ciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmVzdWx0
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlw
ZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUx
ID0gbnVsbHB0cikKK3sKKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1
bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
IXN0ZDo6aXNhbG51bShHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgYXJnVHlwZTAs
IGFyZ1R5cGUxKVswXSk7Cit9CisKK3N0YXRpYyBUSW50ZXJtQmluYXJ5ICpBc1NwZWNpZmljQmlu
YXJ5Tm9kZShUSW50ZXJtTm9kZSAmbm9kZSwgVE9wZXJhdG9yIG9wKQoreworICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5h
cnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3Ag
PyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3N0YXRpYyBib29sIFBhcmVudGhlc2l6ZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBpZiAo
bm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzU3dpenps
ZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
VEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisgICAgewor
ICAgICAgICAvLyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVz
IGluc3RlYWQgb2YgdGhpcyBhZC1ob2MgaW1wbC4KKyAgICAgICAgY29uc3QgVFR5cGUgJnJlc3Vs
dFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUgICAgPSB1bmFyeU5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpOworICAgICAgICByZXR1
cm4gSXNTeW1ib2xpY09wZXJhdG9yKHVuYXJ5Tm9kZS0+Z2V0T3AoKSwgcmVzdWx0VHlwZSwgJmFy
Z1R5cGUpOworICAgIH0KKworICAgIGlmIChUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlID0gbm9k
ZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNl
ZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBs
LgorICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLT5nZXRPcCgpOworICAg
ICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFyeU5vZGUtPmdldExl
ZnQoKSk7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gQXNTcGVjaWZpY0JpbmFyeU5vZGUoKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCksIFRPcGVyYXRv
cjo6RU9wQ29tbWEpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlw
ZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmluYXJ5Tm9k
ZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJp
Z2h0VHlwZSAgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIElzU3ltYm9saWNPcGVyYXRvcihiaW5hcnlOb2RlLT5nZXRPcCgpLCByZXN1
bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
Omdyb3VwZWRUcmF2ZXJzZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBjb25zdCBib29sIGVt
aXRQYXJlbnMgPSBQYXJlbnRoZXNpemUobm9kZSk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAg
ICB7CisgICAgICAgIG1PdXQgPDwgIigiOworICAgIH0KKworICAgIG5vZGUudHJhdmVyc2UodGhp
cyk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIikiOwor
ICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIoY29u
c3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICB7CisgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJh
Z0Nvb3JkOgorICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9zaXRpb25dXSI7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50U2l6ZToKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAgaWYgKGV2
ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAgICAgICAg
ICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfY29vcmRdXSI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5n
OgorICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZnJvbnRfZmFjaW5nXV0iOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNJbnZhcmlhbnQgPQorICAgICAg
ICBkZWNsLmlzRmllbGQoKSA/IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wuZmllbGQoKSkgOiBt
SW52YXJpYW50cy5jb250YWlucyhkZWNsLnZhcmlhYmxlKCkpOworCisgICAgaWYgKGlzSW52YXJp
YW50KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgRW1pdE5hbWUoU2luayAmb3V0LCBjb25zdCBOYW1lICZuYW1lKQorewor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgRGVidWdTaW5rOjpFc2NhcGVk
U2luayBlc2NhcGVkT3V0KG91dC5lc2NhcGUoKSk7CisjZWxzZQorICAgIFRJbmZvU2lua0Jhc2Ug
JmVzY2FwZWRPdXQgPSBvdXQ7CisjZW5kaWYKKyAgICBuYW1lLmVtaXQoZXNjYXBlZE91dCk7Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVEZpZWxkICZvYmpl
Y3QpCit7CisgICAgRW1pdE5hbWUobU91dCwgTmFtZShvYmplY3QpKTsKK30KKwordm9pZCBHZW5N
ZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBUU3ltYm9sICZvYmplY3QpCit7CisgICAg
YXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworICAgIGlmIChpdCA9PSBt
UmVuYW1lZFN5bWJvbHMuZW5kKCkpCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0LCBOYW1l
KG9iamVjdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0
LCBpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRO
YW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNGaWVsZCgp
KQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yob2JqZWN0LnZhcmlhYmxlKCkpOworICAg
IH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEJhcmVUeXBlTmFtZShjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmlnKQoreworICAgIGNvbnN0
IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAgIHN3aXRj
aCAoYmFzaWNUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRWb2lkOgor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
ICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludGVyZmFjZUJsb2NrOgorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0gKnR5cGUu
Z2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgIGVtaXROYW1lT2YoaW50ZXJmYWNlQmxv
Y2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoYmFzaWNUeXBlKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29uZmlnLmV2
ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgRW1pdE5hbWUobU91dCwgR2V0VGV4dHVyZVR5cGVOYW1lKGJhc2ljVHlwZSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3ltYm9sRW52
LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdE5hbWVP
ZihlbnYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCit7Cisg
ICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gJmV2
ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlmIChldmRDb25maWcuaXNQ
b2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpldmRDb25m
aWcuaXNQb2ludGVyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGV2ZENvbmZpZy5pc1JlZmVyZW5jZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKyAgICAgICAgICAg
IG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgp
KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiQU5HTEVfdGVuc29yPCI7CisgICAgfQorCisgICAg
aWYgKHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBt
T3V0IDw8ICJtZXRhbDo6IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYm
IGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisgICAgeworICAgICAgICBtT3V0IDw8ICJw
YWNrZWRfIjsKKyAgICB9CisKKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIGV0Q29uZmlnKTsK
KworICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBtT3V0IDw8IHR5cGUu
Z2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgbU91dCA8PCB0eXBlLmdldENvbHMoKSA8PCAieCIgPDwgdHlwZS5nZXRS
b3dzKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbU91dCA8PCAiLCAiIDw8IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgbU91dCA8PCAi
PiI7CisgICAgfQorCisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlm
IChldmRDb25maWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIg
KiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJlbmNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgJiI7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRG
aWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNl
cykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gKmZpZWxkLnR5cGUoKTsKKyAgICBj
b25zdCBUQmFzaWNUeXBlIGJhc2ljID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAgIEVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBldmRDb25maWcuZW1pdFBv
c3RRdWFsaWZpZXIgICAgICA9IHRydWU7CisgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVj
aWZpZXIgPSB0cnVlOworICAgIGV2ZENvbmZpZy5pc1BhY2tlZCAgICAgICAgICAgICAgID0gbVN5
bWJvbEVudi5pc1BhY2tlZChmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUG9pbnRlciAgICAgICAg
ICAgICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUmVm
ZXJlbmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKyAgICBl
bWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKGZpZWxkKSwgZXZkQ29uZmlnKTsKKworICAg
IGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNo
IChxdWFsKQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46CisgICAg
ICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLmV4dGVybmFsID09ICZwYXJl
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxhdF1dIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Rh
dGE6CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5leHRlcm5h
bCA9PSAmcGFyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgodHlwZS5p
c1ZlY3RvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICBiYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgIHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOgorICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGdlbmVyYWwgYW5kIG5lZWRzIGEgcmVpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0IGFsd2F5
cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisgICAgICAgICAgICAg
ICAgICAgIC8vIFNlZSA0LjMuOC4yCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3
Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5HTC9zcGVjcy9lcy8zLjAvR0xTTF9FU19TcGVjaWZp
Y2F0aW9uXzMuMDAucGRmCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGFubm90
YXRpb25JbmRpY2VzLmNvbG9yKys7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW2Nv
bG9yKCIgPDwgaW5kZXggPDwgIildXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFn
RGVwdGg6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1tkZXB0aChhbnkpXV0iOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0
ZUluZGV4TWFwKAorICAgIGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgY29uc3QgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJnN0cnVjdHVyZSkKK3sKKyAgICBBU1NFUlQoc3RydWN0
dXJlLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9
IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qgc2hhZGVyVmFyU2l6
ZSA9IHNoYWRlclZhcnMuc2l6ZSgpOworICAgIHNpemVfdCBzaGFkZXJWYXJJbmRleCAgICAgID0g
MDsKKworICAgIGNvbnN0IGF1dG8gJmV4dGVybmFsRmllbGRzID0gc3RydWN0dXJlLmV4dGVybmFs
LT5maWVsZHMoKTsKKyAgICBjb25zdCBzaXplX3QgZXh0ZXJuYWxTaXplICA9IGV4dGVybmFsRmll
bGRzLnNpemUoKTsKKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisKKyAgICBj
b25zdCBhdXRvICZpbnRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5pbnRlcm5hbC0+ZmllbGRzKCk7
CisgICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7
CisgICAgc2l6ZV90IGludGVybmFsSW5kZXggICAgICAgPSAwOworCisgICAgLy8gSW50ZXJuYWwg
ZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3Bs
aXQuCisgICAgQVNTRVJUKGV4dGVybmFsU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworCisgICAgLy8g
U3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorICAgIEFTU0VS
VChzaGFkZXJWYXJTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAgICBzdGQ6Om1hcDxOYW1lLCBz
aXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisgICAgc2l6ZV90IGF0dHJpYnV0
ZUluZGV4ID0gMDsKKworICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxTaXplKQor
ICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZpbnRlcm5hbEZpZWxkID0gKmludGVybmFsRmll
bGRzW2ludGVybmFsSW5kZXhdOworICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFtZSAgICAg
PSBOYW1lKGludGVybmFsRmllbGQpOworICAgICAgICBjb25zdCBUVHlwZSAmaW50ZXJuYWxUeXBl
ICAgPSAqaW50ZXJuYWxGaWVsZC50eXBlKCk7CisgICAgICAgIHdoaWxlIChpbnRlcm5hbE5hbWUu
cmF3TmFtZSgpICE9IHNoYWRlclZhcnNbc2hhZGVyVmFySW5kZXhdLm5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluYWN0aXZlIGZpZWxkLgor
CisgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworICAgICAgICAgICAgQVNTRVJUKHNoYWRl
clZhckluZGV4IDwgc2hhZGVyVmFyU2l6ZSk7CisKKyAgICAgICAgICAgICsrYXR0cmlidXRlSW5k
ZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRlciB2YXIg
dHlwZSBpcyBhIG1hdHJpeC4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBjb2xz
ID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29scygpIDogMTsK
KworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICZleHRlcm5hbEZpZWxkID0gKmV4dGVybmFsRmllbGRz
W2V4dGVybmFsSW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmFtZSBleHRlcm5hbE5hbWUgICAg
ID0gTmFtZShleHRlcm5hbEZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVCghZXh0ZXJuYWxGaWVs
ZC50eXBlKCktPmlzTWF0cml4KCkpOworCisgICAgICAgICAgICBleHRlcm5hbE5hbWVUb0F0dHJp
YnV0ZUluZGV4W2V4dGVybmFsTmFtZV0gPSBhdHRyaWJ1dGVJbmRleDsKKworICAgICAgICAgICAg
KytleHRlcm5hbEluZGV4OworICAgICAgICAgICAgKythdHRyaWJ1dGVJbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICsraW50ZXJuYWxJbmRleDsK
KyAgICB9CisKKyAgICBBU1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7Cisg
ICAgQVNTRVJUKGV4dGVybmFsSW5kZXggPD0gZXh0ZXJuYWxTaXplKTsgIC8vIGxlc3MgdGhhbiBp
ZiBwYWRkaW5nIHdhcyBpbnRyb2R1Y2VkCisgICAgQVNTRVJUKGludGVybmFsSW5kZXggPT0gaW50
ZXJuYWxTaXplKTsKKworICAgIHJldHVybiBleHRlcm5hbE5hbWVUb0F0dHJpYnV0ZUluZGV4Owor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QXR0cmlidXRlRGVjbGFyYXRpb24oY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcykKK3sK
KyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisgICAgZXZkQ29u
ZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGVtaXRWYXJpYWJsZURlY2xh
cmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworICAgIG1PdXQgPDwgIiBbW2F0dHJp
YnV0ZSgiIDw8IGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSsrIDw8ICIpXV0iOworfQorCit2
b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6
RWJ0U3RydWN0KTsKKyAgICBBU1NFUlQodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKTsKKworICAg
IG1PdXQgPDwgInN0cnVjdCAiOworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwge30pOworCisg
ICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRPcGVuQnJhY2UoKTsKKworICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAgIHN0ZDo6bWFwPE5hbWUs
IHNpemVfdD4gZmllbGRUb0F0dHJpYnV0ZUluZGV4OworICAgIGNvbnN0IGJvb2wgaGFzQXR0cmli
dXRlSW5kaWNlcyAgICAgICAgICAgPSBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluLmV4dGVybmFs
ID09ICZzdHJ1Y3R1cmU7CisgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmlidXRlSW5k
aWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisKKyAgICBpZiAoaGFz
QXR0cmlidXRlSW5kaWNlcykKKyAgICB7CisgICAgICAgIGZpZWxkVG9BdHRyaWJ1dGVJbmRleCA9
CisgICAgICAgICAgICBCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXAobUNvbXBpbGVyLCBt
UGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluKTsKKyAgICB9CisKKyAgICBGaWVsZEFubm90YXRpb25J
bmRpY2VzIGFubm90YXRpb25JbmRpY2VzOworCisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgZW1pdEluZGVudGF0aW9uKCk7
CisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgqZmllbGQp
KTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZW5kKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkg
PT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZp
ZWxkLT5uYW1lKCkuYmVnaW5zV2l0aCgiXyIpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5n
bGU6OkVuZHNXaXRoKGZpZWxkLT5uYW1lKCkuZGF0YSgpLCAiX3BhZCIpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbklu
ZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpZWxkLT5uYW1lKCku
YmVnaW5zV2l0aCgiXyIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dp
dGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAgICAgICAgICAgIGlmICgh
cmVjbGFpbVVudXNlZEF0dHJpYnV0ZUluZGljZXMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0QXR0cmlidXRlRGVjbGFyYXRp
b24oKmZpZWxkLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlv
bigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworICAgICAgICB9CisgICAg
ICAgIG1PdXQgPDwgIjtcbiI7CisgICAgfQorCisgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1h
dGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKyAgICB7CisgICAgICAgIE1ldGFsTGF5b3V0
T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1wbGVy
c0FzVGV4dHVyZUVudiA9IHRydWU7CisgICAgICAgIExheW91dCBsYXlvdXQgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlvdXRDb25maWcpOworICAgICAg
ICBzaXplX3QgcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxheW91dC5zaXplT2Yg
JSAxNjsKKyAgICAgICAgaWYgKHBhZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0
SW5kZW50YXRpb24oKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKyAgICAgICAgICAg
IEVtaXROYW1lKG1PdXQsIG1JZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKSk7CisgICAgICAgICAg
ICBtT3V0IDw8ICJbIiA8PCBwYWQgPDwgIl07XG4iOworICAgICAgICB9CisgICAgfQorCisgICAg
ZW1pdENsb3NlQnJhY2UoKTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9yZGlu
YXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKyAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgIGNv
bnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpCit7CisgICAgRW1p
dFR5cGVDb25maWcgZXRDb25maWc7CisgICAgZXRDb25maWcuZXZkQ29uZmlnID0gJmV2ZENvbmZp
ZzsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC50eXBlKCk7CisgICAgZW1pdFR5cGUo
dHlwZSwgZXRDb25maWcpOworCisgICAgaWYgKGRlY2wuc3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5
cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIGVtaXROYW1l
T2YoZGVjbCk7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFi
bGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25D
b25maWcgJmV2ZENvbmZpZykKK3sKKyAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSBk
ZWNsLnN5bWJvbFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBkZWNs
LnR5cGUoKTsKKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSAgPSB0eXBlLmdldEJhc2lj
VHlwZSgpOworCisgICAgc3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidFN0cnVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUuaXNT
dHJ1Y3RTcGVjaWZpZXIoKSAmJiAhZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0
ZXIpOworICAgICAgICAgICAgICAgIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbih0eXBlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICAgICAg
ICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbWl0
T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wsIGV2ZENvbmZpZyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6RW1wdHkg
fHwgZXZkQ29uZmlnLmlzUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVtaXRPcmRpbmFyeVZhcmlh
YmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIpCisgICAgeworICAgICAgICBlbWl0UG9z
dFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOworICAgIH0K
K30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAq
c3ltYm9sTm9kZSkKK3sKKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZh
cmlhYmxlKCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworCisg
ICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAg
aWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCkKKyAgICB7Cisg
ICAgICAgIG1PdXQgPDwgIi8qIjsKKyAgICAgICAgZW1pdE5hbWVPZih2YXIpOworICAgICAgICBt
T3V0IDw8ICIqLyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yo
dmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25z
dGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RVbmlvbikKK3sKKyAgICBzd2l0
Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0Qm9vbDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAoY29uc3RVbmlvbi0+
Z2V0QkNvbnN0KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpIDw8ICJmIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKyAg
ICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJ
bnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0VUNvbnN0
KCkgPDwgInUiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Y29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlv
bkFycmF5KAorICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9uLAorICAg
IGNvbnN0IHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdFVu
aW9uSXRlcmF0ZWQgPSBjb25zdFVuaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKyAgICB7CisgICAgICAgIGVtaXRTaW5nbGVD
b25zdGFudChjb25zdFVuaW9uSXRlcmF0ZWQpOworCisgICAgICAgIGlmIChpICE9IHNpemUgLSAx
KQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKK30KKworY29uc3QgVENvbnN0YW50VW5p
b24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb25CZWdpbikKK3sKKyAgICBjb25z
dCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47CisgICAg
Y29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlICAgICAgICAgID0gdHlwZS5nZXRTdHJ1Y3QoKTsK
KyAgICBpZiAoc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmln
ID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07CisgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZp
Zyk7CisgICAgICAgIG1PdXQgPDwgInsiOworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgY29uc3RVbmlvbkN1
cnIgICAgICAgICA9IGVtaXRDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5pb25DdXJy
KTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBtT3V0IDw8ICJ9IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
c2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0
ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07
CisgICAgICAgICAgICBlbWl0VHlwZSh0eXBlLCBjb25maWcpOworICAgICAgICAgICAgbU91dCA8
PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3RVbmlvbkN1cnIgPSBlbWl0Q29uc3RhbnRV
bmlvbkFycmF5KGNvbnN0VW5pb25DdXJyLCBzaXplKTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGNvbnN0VW5pb25DdXJyOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0VmFsdWVOb2RlKQor
eworICAgIGVtaXRDb25zdGFudFVuaW9uKGNvbnN0VmFsdWVOb2RlLT5nZXRUeXBlKCksIGNvbnN0
VmFsdWVOb2RlLT5nZXRDb25zdGFudFZhbHVlKCkpOworfQorCitib29sIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICpzd2l6emxlTm9kZSkKK3sK
KyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkpOworICAgIG1P
dXQgPDwgIi4iOworCisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisg
ICAgICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91dChtT3V0LmVzY2FwZSgpKTsK
KyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5nZXQoKTsKKyNlbHNlCisg
ICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dCAgICAgICAgPSBtT3V0OworI2VuZGlmCisgICAgICAg
IHN3aXp6bGVOb2RlLT53cml0ZU9mZnNldHNBc1hZWlcoJm91dCk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJl
Y3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRMaXN0Q29sbGVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRD
b25zdGFudFVuaW9uICZpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXguZ2V0VHlwZSgpID09IFRC
YXNpY1R5cGU6OkVidEludCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBm
aWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygpOworICAgIGNvbnN0IGludCBpbmRleFZhbCAgICAg
ICAgICA9IGluZGV4LmdldElDb25zdCgpOworICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgICAgICAg
ICA9ICpmaWVsZExpc3RbaW5kZXhWYWxdOworCisgICAgcmV0dXJuIGZpZWxkOworfQorCitjb25z
dCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJt
VHlwZWQgJmZpZWxkc05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmluZGV4Tm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAm
ZmllbGRzVHlwZSA9IGZpZWxkc05vZGUuZ2V0VHlwZSgpOworCisgICAgY29uc3QgVEZpZWxkTGlz
dENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgp
OworICAgIGlmIChmaWVsZExpc3RDb2xsZWN0aW9uID09IG51bGxwdHIpCisgICAgeworICAgICAg
ICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpOwor
ICAgIH0KKyAgICBBU1NFUlQoZmllbGRMaXN0Q29sbGVjdGlvbik7CisKKyAgICBjb25zdCBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqaW5kZXhOb2RlXyA9IGluZGV4Tm9kZS5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKyAgICBBU1NFUlQoaW5kZXhOb2RlXyk7CisgICAgY29uc3QgVENvbnN0YW50VW5pb24g
JmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKworICAgIHJldHVybiBn
ZXREaXJlY3RGaWVsZCgqZmllbGRMaXN0Q29sbGVjdGlvbiwgaW5kZXgpOworfQorCitib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqYmluYXJ5
Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Igb3AgICAgICA9IGJpbmFyeU5vZGUtPmdldE9w
KCk7CisgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS0+Z2V0TGVmdCgp
OworICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7
CisKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJ
bnRlcmZhY2VCbG9jazoKKyAgICAgICAgeworICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxl
ZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIi4iOworICAgICAgICAgICAgZW1pdE5hbWVP
ZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgeworICAgICAg
ICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIlsi
OworICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbU91
dCA8PCAiXSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlO
b2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUgICA9IGxl
ZnROb2RlLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0g
cmlnaHROb2RlLmdldFR5cGUoKTsKKworICAgICAgICAgICAgaWYgKElzU3ltYm9saWNPcGVyYXRv
cihvcCwgcmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAgICAgICAg
ICAgIGlmIChvcCAhPSBUT3BlcmF0b3I6OkVPcENvbW1hKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0
VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJz
ZShyaWdodE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3Vs
dFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIigiOworICAgICAgICAgICAgICAgIGxl
ZnROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIElzUG9zdGZpeChUT3BlcmF0b3Igb3ApCit7Cisg
ICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Ig
b3AgICAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3AoKTsKKyAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlw
ZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworCisgICAgVEludGVybVR5cGVkICZhcmcgICAgPSAq
dW5hcnlOb2RlLT5nZXRPcGVyYW5kKCk7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBhcmcu
Z2V0VHlwZSgpOworCisgICAgY29uc3QgY2hhciAqbmFtZSA9IEdldE9wZXJhdG9yU3RyaW5nKG9w
LCByZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisKKyAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9w
LCByZXN1bHRUeXBlLCAmYXJnVHlwZSkpCisgICAgeworICAgICAgICBjb25zdCBib29sIHBvc3Rm
aXggPSBJc1Bvc3RmaXgob3ApOworICAgICAgICBpZiAoIXBvc3RmaXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBncm91cGVkVHJhdmVy
c2UoYXJnKTsKKyAgICAgICAgaWYgKHBvc3RmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1P
dXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
T3V0IDw8IG5hbWUgPDwgIigiOworICAgICAgICBhcmcudHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG1PdXQgPDwgIikiOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29uZGl0
aW9uYWxOb2RlKQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2RlLT5nZXRD
b25kaXRpb24oKSk7CisgICAgbU91dCA8PCAiID8gIjsKKyAgICBncm91cGVkVHJhdmVyc2UoKmNv
bmRpdGlvbmFsTm9kZS0+Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisgICAgbU91dCA8PCAiIDogIjsK
KyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHByZXNzaW9u
KCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqaWZUaGVuRWxzZU5vZGUpCit7CisgICAg
VEludGVybVR5cGVkICZjb25kTm9kZSA9ICppZlRoZW5FbHNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgVEludGVybUJsb2NrICp0aGVuTm9kZSA9IGlmVGhlbkVsc2VOb2RlLT5nZXRUcnVlQmxv
Y2soKTsKKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUtPmdldEZh
bHNlQmxvY2soKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQgPDwgImlmICgi
OworICAgIGNvbmROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgIG1PdXQgPDwgIikiOworCisgICAg
aWYgKHRoZW5Ob2RlKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiXG4iOworICAgICAgICB0aGVu
Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1P
dXQgPDwgIiB7fSI7CisgICAgfQorCisgICAgaWYgKGVsc2VOb2RlKQorICAgIHsKKyAgICAgICAg
bU91dCA8PCAiXG4iOworICAgICAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAgbU91dCA8
PCAiZWxzZVxuIjsKKyAgICAgICAgZWxzZU5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICAvLyBBbHdheXMgZW1pdCAiZWxzZSIgZXZlbiB3aGVuIGVt
cHR5IGJsb2NrIHRvIGF2b2lkIG5lc3RlZCBpZi1zdG10IGlzc3Vlcy4KKyAgICAgICAgbU91dCA8
PCAiIGVsc2Uge30iOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5v
ZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAic3dpdGNoICgiOwor
ICAgIHN3aXRjaE5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8PCAi
KVxuIjsKKworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNoKTsKKyAgICBtUGFyZW50SXNTd2l0
Y2ggPSB0cnVlOworICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgbVBhcmVudElzU3dpdGNoID0gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNh
c2UgKmNhc2VOb2RlKQoreworICAgIGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgaWYgKGNhc2VO
b2RlLT5oYXNDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZEV4
cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1PdXQgPDwgImNhc2UgIjsK
KyAgICAgICAgY29uZEV4cHItPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtT3V0IDw8ICI6IjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiZGVmYXVsdDpcbiI7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQoreworICAgIGNvbnN0
IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGVtaXRGdW5jdGlvblJldHVybihm
dW5jKTsKKworICAgIG1PdXQgPDwgIiAiOworICAgIGVtaXROYW1lT2YoZnVuYyk7CisgICAgaWYg
KGlzTWFpbikKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIjAiOworICAgIH0KKyAgICBtT3V0IDw8
ICIoIjsKKworICAgIGJvb2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisgICAgY29uc3Qg
c2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChlbWl0Q29t
bWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAg
ICAgICBlbWl0Q29tbWEgPSB0cnVlOworCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0g
PSAqZnVuYy5nZXRQYXJhbShpKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKGZ1bmMs
IHBhcmFtKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICIpIjsKK30KKwordm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKK3sKKyAg
ICBjb25zdCBib29sIGlzTWFpbiA9IGZ1bmMuaXNNYWluKCk7CisKKyAgICBjb25zdCBUVHlwZSAm
cmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworICAgIGlmIChpc01haW4pCisgICAg
eworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBlLmdldFN0
cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IG51bGxwdHIpOworICAgICAgICBp
ZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJmcmFnbWVudCAiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0cnVjdHVy
ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgInZlcnRleCAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAgICAgICB9
CisgICAgfQorICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmlnKCkpOworfQor
Cit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1
bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQoreworICAgIGNvbnN0IGJvb2wg
aXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAg
ICA9IHBhcmFtLmdldFR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZk
Q29uZmlnOworICAgIGV2ZENvbmZpZy5pc1BhcmFtZXRlciAgICAgICA9IHRydWU7CisgICAgZXZk
Q29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5lbWl0UG9z
dFF1YWxpZmllciA9IGlzTWFpbjsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgPSBt
U3ltYm9sRW52LmlzUG9pbnRlcihwYXJhbSk7CisgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAg
ICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJhbSk7CisgICAgZW1pdFZhcmlhYmxlRGVj
bGFyYXRpb24oVmFyRGVjbChwYXJhbSksIGV2ZENvbmZpZyk7CisKKyAgICBpZiAoaXNNYWluKQor
ICAgIHsKKyAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9Cisg
ICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNo
ZXMoKnN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRl
eEluLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiIFtbc3RhZ2VfaW5dXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMubWF0Y2hlcygqc3RydWN0dXJlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tidWZmZXIoIiA8PCBy
eDo6bXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPDwgIildXSI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5t
YXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQg
PDwgIiBbW2J1ZmZlcigiIDw8IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4IDw8ICIpXV0iOworICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFtLm5h
bWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICBt
TWFpblVuaWZvcm1CdWZmZXJJbmRleCArPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgpID09ICJt
ZXRhbDo6c2FtcGxlciIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAi
IFtbc2FtcGxlcigiIDw8IChtTWFpblNhbXBsZXJJbmRleCkgPDwgIildXSI7CisgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKyAgICAgICAgICAgICAgICAg
ICAgcmVmbGVjdGlvbi0+Z2V0T3JpZ2luYWxOYW1lKHBhcmFtLnVuaXF1ZUlkKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFNhbXBsZXJCaW5kaW5nKG9yaWdpbmFsTmFt
ZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgICAgIG1NYWluU2FtcGxlckluZGV4
ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbU91dCA8PCAiIFtbdGV4dHVyZSgiIDw8IChtTWFpblRleHR1cmVJ
bmRleCkgPDwgIildXSI7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnaW5hbE5h
bWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5nZXQoKSk7
CisgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRUZXh0dXJlQmluZGluZyhvcmlnaW5hbE5hbWUs
IG1NYWluU2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIG1NYWluVGV4dHVyZUluZGV4ICs9IHR5
cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKE5h
bWUocGFyYW0pID09IFBpcGVsaW5le1BpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkLCBudWxscHRy
fS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBtT3V0IDw8ICIgW1tpbnN0YW5jZV9pZF1dIjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCit7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5j
ID0gKmZ1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24o
KTsKKyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7Cit9CisKK2Jvb2wgR2VuTWV0YWxU
cmF2ZXJzZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAq
ZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgVEludGVybUJsb2NrICZib2R5ICAgID0g
KmZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBl
bWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7CisgICAgbU91dCA8PCAiXG4iOworICAgIGJvZHku
dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbk1ldGFsVHJhdmVy
c2VyOjpGdW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorewor
ICAgIEZ1bmNUb05hbWUgbWFwOworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShjb25zdCBjaGFy
ICpuYW1lU3RyKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lKG5hbWVTdHIp
OworICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKyAgICAgICAg
bWFwW25hbWVdID0gTmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAg
ICB9OworCisgICAgcHV0QW5nbGUoInRleGVsRmV0Y2giKTsKKyAgICBwdXRBbmdsZSgidGV4ZWxG
ZXRjaE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisgICAgcHV0QW5nbGUoInRl
eHR1cmUxRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMURMb2QiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZTFEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkQiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZTJETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oiKTsKKyAg
ICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlM0Qi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUz
RFByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmUiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZUN1YmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVQcm9qTG9kIik7Cisg
ICAgcHV0QW5nbGUoInRleHR1cmVHcmFkIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVHcmFkT2Zm
c2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZUxvZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7CisgICAgcHV0QW5n
bGUoInRleHR1cmVQcm9qIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZCIpOworICAg
IHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZVByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pMb2RPZmZzZXQiKTsKKyAgICBw
dXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVNpemUi
KTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQoreworICAg
IGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRTZXF1ZW5j
ZSgpOworCisgICAgYXV0byBlbWl0QXJnTGlzdCA9IFsmXShjb25zdCBjaGFyICpvcGVuLCBjb25z
dCBjaGFyICpjbG9zZSkgeworICAgICAgICBtT3V0IDw8IG9wZW47CisKKyAgICAgICAgYm9vbCBl
bWl0Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVtaXRDb21tYSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bWl0Q29tbWEgPSB0cnVlOworICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1PdXQgPDwgY2xvc2U7CisgICAgfTsKKworICAgIGNvbnN0IFRUeXBl
ICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworCisgICAgaWYgKGFnZ3JlZ2F0
ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wgaXNTdGFu
ZGFsb25lID0gZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCk7CisgICAgICAgIGlmIChpc1N0
YW5kYWxvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY29uc3RydWN0b3Ig
ZnJvbSBiZWluZyBpbnRlcnByZXRlZCBhcyBhIGRlY2xhcmF0aW9uIGJ5IHdyYXBwaW5nIGluIHBh
cmVucy4KKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBnaXZlbiBzb21ldGhpbmcg
bGlrZToKKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMgd2lsbCBi
ZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisgICAgICAg
ICAgICAvLyBTbyBpbnN0ZWFkIGVtaXQ6CisgICAgICAgICAgICAvLyAgICAgIChpbnQoc3ltYm9s
KSk7CisgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworCisgICAgICAgIGlmIChyZXRUeXBlLmlzQXJyYXko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOwor
ICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsiLCAifSIpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHJldFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRU
eXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCJ7IiwgIn0i
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRU
eXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIiki
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0YW5kYWxvbmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1PdXQgPDwgIikiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBh
Z2dyZWdhdGVOb2RlLT5nZXRPcCgpOworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0
ZU5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgZW1pdE5hbWVPZihmdW5jKTsK
KyAgICAgICAgICAgICAgICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5k
KGZ1bmMubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbUZ1bmNUb05hbWUu
ZW5kKCkpOworICAgICAgICAgICAgICAgIEVtaXROYW1lKG1PdXQsIGl0LT5zZWNvbmQpOworICAg
ICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVfdCBpbmRl
eCkgLT4gY29uc3QgVFR5cGUgKiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGFy
Z3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAmYXJnLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgICAgIEFTU0VSVCghYXJncy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlw
ZSAqYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFyZ1R5
cGUwKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdldE9wZXJhdG9y
U3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworCisgICAgICAgICAgICAg
ICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmV0VHlwZSwgYXJnVHlwZTAsIGFyZ1R5cGUx
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtTm9kZSAmb3BlcmFuZE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGRO
b2RlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgob3ApKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbU91dCA8PCBvcE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
b3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKG9wZXJhbmRO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlICZsZWZ0Tm9kZSAgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdn
cmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bU91dCA8PCAiICIgPDwgb3BOYW1lIDw8ICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKK3sKKyAgICBBU1NFUlQobUlu
ZGVudExldmVsID49IDApOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAi
e1xuIjsKKyAgICArK21JbmRlbnRMZXZlbDsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdENsb3NlQnJhY2UoKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7CisKKyAg
ICAtLW1JbmRlbnRMZXZlbDsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0IDw8ICJ9
IjsKK30KKworc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJbnRlcm1O
b2RlICZub2RlKQoreworICAgIGlmIChub2RlLmdldEFzQmxvY2soKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRBc1N3aXRj
aE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5v
ZGUuZ2V0QXNJZkVsc2VOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQ2FzZU5vZGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIE5ld2xpbmVQYWQoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgaWYgKG5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSA9IG5vZGUuZ2V0
QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0
Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmY2hpbGROb2RlID0gKmRl
Y2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1i
b2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisgICAg
ICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sg
KmJsb2NrTm9kZSkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IC0xKTsKKyAgICBjb25z
dCBib29sIGlzR2xvYmFsU2NvcGUgID0gbUluZGVudExldmVsID09IC0xOworICAgIGNvbnN0IGJv
b2wgcGFyZW50SXNTd2l0Y2ggPSBtUGFyZW50SXNTd2l0Y2g7CisgICAgbVBhcmVudElzU3dpdGNo
ICAgICAgICAgICA9IGZhbHNlOworCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAgeworICAg
ICAgICArK21JbmRlbnRMZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZW1p
dE9wZW5CcmFjZSgpOworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisgICAgICAgIHsKKyAg
ICAgICAgICAgICsrbUluZGVudExldmVsOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVy
bU5vZGUgKnByZXZTdG10Tm9kZSA9IG51bGxwdHI7CisKKyAgICBjb25zdCBzaXplX3Qgc3RtdENv
dW50ID0gYmxvY2tOb2RlLT5nZXRDaGlsZENvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdG10Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlICZzdG10Tm9k
ZSA9ICpibG9ja05vZGUtPmdldENoaWxkTm9kZShpKTsKKworICAgICAgICBpZiAoaXNHbG9iYWxT
Y29wZSAmJiBwcmV2U3RtdE5vZGUgJiYgKE5ld2xpbmVQYWQoKnByZXZTdG10Tm9kZSkgfHwgTmV3
bGluZVBhZChzdG10Tm9kZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJcbiI7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc0Nhc2UgPSBzdG10Tm9kZS5nZXRBc0Nh
c2VOb2RlKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisgICAgICAgIGVtaXRJ
bmRlbnRhdGlvbigpOworICAgICAgICBtSW5kZW50TGV2ZWwgKz0gaXNDYXNlOworICAgICAgICBz
dG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFJlcXVpcmVzU2VtaWNvbG9uVGVy
bWluYXRvcihzdG10Tm9kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIjsiOwor
ICAgICAgICB9CisgICAgICAgIG1PdXQgPDwgIlxuIjsKKworICAgICAgICBwcmV2U3RtdE5vZGUg
PSAmc3RtdE5vZGU7CisgICAgfQorCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworICAgICAgICAtLW1JbmRlbnRMZXZlbDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudElzU3dpdGNoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQobUluZGVudExldmVsID49IDEpOworICAgICAgICAg
ICAgLS1tSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICAgICAgZW1pdENsb3NlQnJhY2UoKTsK
KyAgICAgICAgbVBhcmVudElzU3dpdGNoID0gcGFyZW50SXNTd2l0Y2g7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gKikKK3sKKyAgICBMT0dJQ19FUlJPUigpOyAgLy8gUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXREZWNsYXJhdGlvbihWaXNpdCwg
VEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVjbE5vZGUtPmdl
dENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+
Z2V0Q2hpbGROb2RlKDApOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZk
Q29uZmlnOworCisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFz
U3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1i
b2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJE
ZWNsKHZhciksIGV2ZENvbmZpZyk7CisgICAgfQorICAgIGVsc2UgaWYgKFRJbnRlcm1CaW5hcnkg
KmluaXROb2RlID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOworICAgICAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSAm
JiB2YWx1ZU5vZGUpOworCisgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVudEJs
b2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJz
IHNob3VsZCBoYXZlIHR1cm5lZCBub24tY29uc3QgZ2xvYmFsIGluaXRpYWxpemVycyBpbnRvCisg
ICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJpYWJsZXMg
bWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworICAgICAgICAgICAgLy8gRXZx
Q29uc3QgaW4gc29tZSBBTkdMRSBjb2RlIGJ1dCBub3QgYWN0dWFsbHkgaGF2ZSB0aGVpciBxdWFs
aWZpZXIgYWN0dWFsbHkgY2hhbmdlZCB0bworICAgICAgICAgICAgLy8gRXZxQ29uc3QuIFRodXMg
anVzdCBhc3N1bWUgYWxsIEV2cUdsb2JhbCBhcmUgYWN0dWFsbHkgRXZxQ29uc3QgZm9yIGFsbCBj
b2RlIHJ1biBhZnRlcgorICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuCisg
ICAgICAgICAgICBtT3V0IDw8ICJjb25zdGFudCAiOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBjb25z
dCBOYW1lIHZhck5hbWUodmFyKTsKKworICAgICAgICBpZiAoRXhwcmVzc2lvbkNvbnRhaW5zTmFt
ZSh2YXJOYW1lLCAqdmFsdWVOb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmFtZWRT
eW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2ZENvbmZp
Zyk7CisgICAgICAgIG1PdXQgPDwgIiA9ICI7CisgICAgICAgIGdyb3VwZWRUcmF2ZXJzZSgqdmFs
dWVOb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIGNvbnN0IFRM
b29wVHlwZSBsb29wVHlwZSA9IGxvb3BOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKGxv
b3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0Rm9yTG9vcChsb29wTm9kZSk7CisgICAgICAgIGNhc2UgVExvb3BU
eXBlOjpFTG9vcFdoaWxlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BO
b2RlKTsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAgICAgICAg
IHJldHVybiB2aXNpdERvV2hpbGVMb29wKGxvb3BOb2RlKTsKKyAgICB9Cit9CisKK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCit7Cisg
ICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcEZvcik7CisK
KyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBU
SW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJ
bnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJ
bnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChi
b2R5Tm9kZSk7CisKKyAgICBtT3V0IDw8ICJmb3IgKCI7CisKKyAgICBpZiAoaW5pdE5vZGUpCisg
ICAgeworICAgICAgICBpbml0Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1PdXQgPDwgIiAiOworICAgIH0KKworICAgIG1PdXQgPDwgIjsgIjsK
KworICAgIGlmIChjb25kTm9kZSkKKyAgICB7CisgICAgICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICI7ICI7CisKKyAgICBpZiAoZXhwck5vZGUpCisg
ICAgeworICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgbU91
dCA8PCAiKVxuIjsKKworICAgIGJvZHlOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxvb3AoVElu
dGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0VHlwZSgpID09
IFRMb29wVHlwZTo6RUxvb3BXaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0g
bG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5v
ZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9k
ZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7CisgICAgQVNT
RVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7Cisg
ICAgbU91dCA8PCAid2hpbGUgKCI7CisgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IG1PdXQgPDwgIilcbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERvV2hpbGVMb29w
KFRJbnRlcm1Mb29wICpsb29wTm9kZSkKK3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdldFR5cGUo
KSA9PSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0g
bG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBs
b29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBs
b29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7Cisg
ICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9u
KCk7CisgICAgbU91dCA8PCAiZG9cbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOwor
ICAgIG1PdXQgPDwgIlxuIjsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0IDw8ICJ3
aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8PCAiKTsi
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqYnJhbmNoTm9kZSkKK3sKKyAgICBjb25zdCBU
T3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisgICAgVEludGVybVR5
cGVkICpleHByTm9kZSA9IGJyYW5jaE5vZGUtPmdldEV4cHJlc3Npb24oKTsKKworICAgIGVtaXRJ
bmRlbnRhdGlvbigpOworCisgICAgc3dpdGNoIChmbG93T3ApCisgICAgeworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wS2lsbDoKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGV4cHJO
b2RlID09IG51bGxwdHIpOworICAgICAgICAgICAgbU91dCA8PCAibWV0YWw6OmRpc2NhcmRfZnJh
Z21lbnQoKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAicmV0dXJu
IjsKKyAgICAgICAgICAgIGlmIChleHByTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
ZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJicmVhayI7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnRp
bnVlOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7
CisgICAgICAgICAgICBtT3V0IDw8ICJjb250aW51ZSI7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworCitib29sIHNoOjpFbWl0TWV0YWwoVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgU3ltYm9s
RW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1ZGVD
b25maWcgJnBwYykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBjb21waWxlci5nZXRJbmZv
U2luaygpLm9iajsKKworICAgIHsKKyAgICAgICAgKytlbWl0TWV0YWxDYWxsQ291bnQ7CisgICAg
ICAgIGF1dG8gZmlsZW5hbWVQcm90byA9IHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9GSVhFRF9FTUlU
Iik7CisgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoZmlsZW5hbWVQcm90byAhPSAiL2Rldi9udWxsIikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeU9wZW4gPSBbJl0oY2hhciBjb25zdCAqZXh0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZVByb3RvOworICAgICAg
ICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxDYWxsQ291
bnQpOworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSAiLiI7CisgICAgICAgICAgICAg
ICAgICAgIGZpbGVuYW1lICs9IGV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcGVu
KGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgRklMRSAqZmlsZSA9IHRyeU9wZW4oIm1ldGFsIik7CisgICAgICAgICAgICAgICAgaWYg
KCFmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHRy
eU9wZW4oImNwcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZmlsZSk7CisKKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IGZpbGVTaXplID0gZnRlbGwoZmlsZSk7CisgICAgICAgICAgICAg
ICAgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8Y2hhcj4gYnVmZjsKKyAgICAgICAgICAgICAgICBidWZmLnJlc2l6ZShmaWxlU2l6ZSArIDEp
OworICAgICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7
CisgICAgICAgICAgICAgICAgYnVmZi5iYWNrKCkgPSAnXDAnOworCisgICAgICAgICAgICAgICAg
ZmNsb3NlKGZpbGUpOworCisgICAgICAgICAgICAgICAgb3V0IDw8IGJ1ZmYuZGF0YSgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG91dCA8PCAiXG5cbiI7CisKKyAgICBpZiAoIUVtaXRQcm9ncmFtUHJlbHVkZShyb290
LCBvdXQsIHBwYykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
eworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgICAgIERlYnVnU2luayBv
dXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisgICAgICAgIG91
dFdyYXBwZXIud2F0Y2gocmVhZFN0cmluZ0VudlZhcigiR01EX1dBVENIX1NUUklORyIpKTsKKyNl
bHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisjZW5kaWYKKyAg
ICAgICAgR2VuTWV0YWxUcmF2ZXJzZXIgZ2VuKGNvbXBpbGVyLCBvdXRXcmFwcGVyLCBpZEdlbiwg
cGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYpOworICAgICAgICByb290LnRy
YXZlcnNlKCZnZW4pOworICAgIH0KKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRW1pdE1ldGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4YWY5YTFjODdkNTczY2FiNTI3Mjc1YjRkMjMy
Y2NmMjRhNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwuaApA
QCAtMCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBXYWxrcyB0aGUgQVNU
IGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRNZXRhbChU
Q29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1
Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNwYWNlIHNo
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
RU1JVE1FVEFMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODIz
ZmM3MjgyMGNmZmRkZjMyNDBkYzI0NjU5YTVlZGNmZGI5ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApAQCAtMCwwICsxLDQ1IEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0VOVklST05NRU5UVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKK2lubGluZSBib29sIHJlYWRCb29sRW52VmFyKGNvbnN0IGNoYXIg
KnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOworICAgIGlm
IChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHN0cmNtcChzdHIsICIwIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgQVNTRVJUKHN0cmNtcChzdHIsICIxIikgPT0gMCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBzdGQ6OnN0cmluZyByZWFkU3RyaW5nRW52VmFyKGNvbnN0IGNo
YXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOworICAg
IGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cisg
ICAgcmV0dXJuIHN0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJM
RV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5YzAzZWI1ZDM1ZTg5ZmVi
MTZkNjc0ZDk2MTcwYzI3MjY5NmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5jcHAKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
QXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwcml2
YXRlIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3Qgc2l6ZV90IG1NaW5S
ZXF1aXJlZFNpemU7CisgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVzOworCisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3QgbWluUmVx
dWlyZWRTaXplKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxz
ZSksIG1NaW5SZXF1aXJlZFNpemUobWluUmVxdWlyZWRTaXplKQorICAgIHt9CisKKyAgICBQcmVS
ZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9uKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xO
b2RlKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlw
ZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6
RXZxQ29uc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4
cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBNZXRhbExheW91dE9m
KHR5cGUpLnNpemVPZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1pblJlcXVp
cmVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
bUhvaXN0ZWREZWNsTm9kZXMucHVzaF9iYWNrKCZkZWNsTm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2RlY2xO
b2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIGJvb2wgcmV3cml0ZShUSW50
ZXJtQmxvY2sgJnJvb3QsIElkR2VuICZpZEdlbikKKyAgICB7CisgICAgICAgIGlmICghcmVidWls
ZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJvb3QuaW5z
ZXJ0Q2hpbGROb2RlcyhGaW5kRmlyc3RGdW5jdGlvbkRlZmluaXRpb25JbmRleCgmcm9vdCksIG1I
b2lzdGVkRGVjbE5vZGVzKTsKKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpvcGFxdWVEZWNs
Tm9kZSA6IG1Ib2lzdGVkRGVjbE5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJt
RGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjbE5vZGUpOworICAgICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZvbGRWYXIgPSBWaWV3RGVjbGFyYXRpb24oKmRlY2xOb2RlKS5zeW1ib2wudmFy
aWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRHZW4uY3Jl
YXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKyAgICAgICAgICAgIGF1dG8gKm5ld1ZhciA9IG5l
dyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksICZvbGRWYXIuZ2V0
VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOYW1l
LnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmbUNvbXBp
bGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OkhvaXN0Q29uc3RhbnRzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKQoreworICAgIHJldHVybiBSZXdyaXRlcihj
b21waWxlciwgbWluUmVxdWlyZWRTaXplKS5yZXdyaXRlKHJvb3QsIGlkR2VuKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0
Q29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwNmE1ZTQ3M2M4YmVjNWNjZmE0OGRkNGYxZWJmYzNh
NDk0NTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5o
CkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBIb2lzdHMgZnVu
Y3Rpb24tbG9jYWwgY29uc3RhbnRzIHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgdGhlaXIgTWV0YWwg
c2l6ZW9mIG1lZXRzCisvLyBgbWluUmVxdWlyZWRTaXplYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6ZSk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hPSVNUQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGFlZDZiOWI4ZTYzOTY0ZjE1
MTNiODM2ZmI5ODg5MDIzMjAyMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVub3JkZXJl
ZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0lkR2VuOjpJZEdl
bigpIHt9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZ1RvSW1t
dXRhYmxlPgorTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzaXplX3QgY291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9JbW11dGFibGUpCit7Cisg
ICAgY29uc3QgdW5zaWduZWQgaWQgPSBtTmV4dCsrOworICAgIGNoYXIgaWRCdWZmZXJbc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisgICAgc3ByaW50ZihpZEJ1
ZmZlciwgIiV1IiwgaWQpOworCisgICAgbU5ld05hbWVCdWZmZXIuY2xlYXIoKTsKKyAgICBtTmV3
TmFtZUJ1ZmZlciArPSAnXyc7CisgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisKKyAg
ICAvLyBOb3RlOgorICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGlu
IEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorICAg
IC8vIHRha2UgY2FyZSBub3QgdG8gaW50cm9kdWNlIGFueS4KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyBiYXNlTmFtZSA9IHRvSW1tdXRhYmxlKGJhc2VOYW1lc1tpXSk7CisgICAgICAgIGlmICghYmFz
ZU5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZSA9
IGJhc2VOYW1lLmRhdGEoKTsKKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNXaXRoKGtB
bmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXNl
ICs9IHNpemVvZihrQW5nbGVJbnRlcm5hbFByZWZpeCkgLSAxOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCpiYXNlID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICArK2Jhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoKmJhc2UgIT0gJ18n
KTsKKworICAgICAgICAgICAgaWYgKG1OZXdOYW1lQnVmZmVyLmJhY2soKSAhPSAnXycpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIE5hbWUoSW1tdXRhYmxlU3RyaW5nKG1OZXdOYW1lQnVmZmVy
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cit9CisKK05hbWUgSWRHZW46OmNyZWF0ZU5l
d05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKK30KKworTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShj
b25zdCBOYW1lICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFt
ZS5yYXdOYW1lKCkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IGNoYXIg
KmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKEltbXV0YWJsZVN0cmluZyhi
YXNlTmFtZSkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRl
TmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBbXShjb25zdCBJbW11dGFibGVTdHJpbmcgJnMpIHsgcmV0dXJuIHM7IH0p
OworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxO
YW1lPiBiYXNlTmFtZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNp
emUoKSwgYmFzZU5hbWVzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29u
c3QgTmFtZSAmcykgeyByZXR1cm4gcy5yYXdOYW1lKCk7IH0pOworfQorCitOYW1lIElkR2VuOjpj
cmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyICo+IGJhc2VOYW1l
cykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFt
ZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBjaGFyICpzKSB7
IHJldHVybiBJbW11dGFibGVTdHJpbmcocyk7IH0pOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODIwODlmNDMy
ZTE4OWQwZjc5MWUwZTdhMjEzY2NlY2Q0NDJiNzJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworCisjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBG
b3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorLy8gQWxsIG5hbWVzIGNyZWF0ZWQgYXJlIG1h
cmtlZCBhcyBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLgorY2xhc3MgSWRHZW4gOiBhbmdsZTo6
Tm9uQ29weWFibGUKK3sKKyAgcHVibGljOgorICAgIElkR2VuKCk7CisKKyAgICBOYW1lIGNyZWF0
ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSk7CisgICAgTmFtZSBjcmVh
dGVOZXdOYW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKTsKKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUo
Y29uc3QgY2hhciAqYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpOworICAgIE5hbWUgY3JlYXRl
TmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKTsKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4gYmFzZU5h
bWVzKTsKKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVu
YW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLCBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9J
bW11dGFibGUpOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQgbU5leHQgPSAwOyAgICAgICAg
ICAvLyBgdW5zaWduZWRgIGJlY2F1c2Ugb2YgIiV1IiB1c2UgaW4gc3ByaW50ZgorICAgIHN0ZDo6
c3RyaW5nIG1OZXdOYW1lQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVyIHRvIGF2b2lkIHRvbnMg
b2YgcmVhbGxvY2F0aW9ucworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTM0NmY2ZjgxNDI4MmMxMmFmNjc5MTRkMmEzMDQyMzQxNjBmYTJlYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCkBAIC0wLDAgKzEsNDAxIEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlwZT4KKyNp
bmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworZW51bSBjbGFzcyBMYW5ndWFnZQoreworICAgIE1ldGFs
LAorICAgIEdMU0wsCit9OworCitzdGF0aWMgc2l6ZV90IFJvdW5kVXBUb011bHRpcGxlT2Yoc2l6
ZV90IHgsIHNpemVfdCBtdWx0aXBsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgcmVtID0geCAlIG11
bHRpcGxlOworICAgIHJldHVybiByZW0gPT0gMCA/IHggOiB4ICsgKG11bHRpcGxlIC0gcmVtKTsK
K30KKwordm9pZCBMYXlvdXQ6OnJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBib29sIHBh
ZCkKK3sKKyAgICBhbGlnbk9mID0gc3RkOjptYXgoYWxpZ25PZiwgYWxpZ24pOworICAgIGlmIChw
YWQpCisgICAgeworICAgICAgICBzaXplT2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVPZiwg
YWxpZ24pOworICAgIH0KK30KKworYm9vbCBMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3QgTGF5b3V0
ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZU9mID09IG90aGVyLnNpemVPZiAmJiBh
bGlnbk9mID09IG90aGVyLmFsaWduT2Y7Cit9CisKK3ZvaWQgTGF5b3V0OjpvcGVyYXRvcis9KGNv
bnN0IExheW91dCAmb3RoZXIpCit7CisgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGlnbk9m
LCB0cnVlKTsKKyAgICBzaXplT2YgKz0gb3RoZXIuc2l6ZU9mOworfQorCit2b2lkIExheW91dDo6
b3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpCit7CisgICAgc2l6ZU9mICo9IHNjYWxlOworfQorCitM
YXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QKK3sKKyAg
ICBhdXRvIHNlbGYgPSAqdGhpczsKKyAgICBzZWxmICs9IG90aGVyOworICAgIHJldHVybiBzZWxm
OworfQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25zdAorewor
ICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKj0gc2NhbGU7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKK3N0YXRpYyBMYXlvdXQgU2NhbGFyTGF5b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUs
IExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0g
dHlwZS5nZXRCYXNpY1R5cGUoKTsKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7CisgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiB7MSwgMX07
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBjYXNlIFRCYXNpY1R5
cGU6OkVidFVJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAg
ICAgICByZXR1cm4gezQsIDR9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKElz
U2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAobGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IExhbmd1YWdlOjpNZXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7OCwgOH07
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGFuZ3VhZ2U6OkdMU0w6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFs
aWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaW5uZXJTY2FsZXNQYWNrZWRb
XSAgID0gezAsIDEsIDIsIDMsIDR9Oworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1Vu
cGFja2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisKK0xheW91dCBzaDo6TWV0YWxMYXlvdXRPZihj
b25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcpCit7CisgICAgQVNT
RVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA8PSA0KTsKKyAgICBBU1NFUlQodHlwZS5nZXRTZWNv
bmRhcnlTaXplKCkgPD0gNCk7CisKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKworICAgIGNvbnN0
IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdlID09IFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3Jh
Z2U6OkVic1NoYXJlZCk7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZpZy5tYXNr
QXJyYXkpCisgICAgeworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gdHJ1ZTsKKyAgICAg
ICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmlnKTsKKyAg
ICAgICAgY29uZmlnLm1hc2tBcnJheSAgICA9IGZhbHNlOworICAgICAgICBjb25zdCBzaXplX3Qg
dm9sICAgID0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIHJldHVybiBsYXlv
dXQgKiB2b2w7CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFs
U2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0g
MSk7CisgICAgICAgIGF1dG8gY29uZmlnMiAgICAgICAgICAgICA9IGNvbmZpZzsKKyAgICAgICAg
Y29uZmlnMi5tYXNrQXJyYXkgICAgICAgID0gZmFsc2U7CisgICAgICAgIGF1dG8gbGF5b3V0ICAg
ICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogZmllbGRzKQorICAgICAgICB7CisgICAgICAgICAgICBsYXlvdXQgKz0gTWV0
YWxMYXlvdXRPZigqZmllbGQtPnR5cGUoKSwgY29uZmlnMik7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc2l6ZV90IHBhZCA9IGxheW91dC5zaXplT2YgJSAxNjsKKyAgICAgICAgICAgIGxheW91
dC5zaXplT2YgKz0gcGFkOworICAgICAgICB9CisgICAgICAgIGxheW91dC5zaXplT2YgPSBSb3Vu
ZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAgICAgICAg
cmV0dXJuIGxheW91dDsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxlcnNBc1Rl
eHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsxNiwgOH07ICAvLyBwb2ludGVyezgsOH0gYW5kIG1ldGFsOjpzYW1wbGVyezgs
OH0KKyAgICB9CisKKyAgICBjb25zdCBMYXlvdXQgc2NhbGFyTGF5b3V0ID0gU2NhbGFyTGF5b3V0
T2YodHlwZSwgTGFuZ3VhZ2U6Ok1ldGFsKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5
cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0
eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBsYXlvdXQgPSBMYXlvdXR7
c2NhbGFyTGF5b3V0LnNpemVPZiAqIGlubmVyU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mfTsK
KyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVz
VW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8gbGF5b3V0
ICAgICAgICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBpbm5lclNj
YWxlKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisgICAgICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KTsKKyAgICAg
ICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2Nh
bGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Um93cygpXTsKKyAgICAgICAgY29uc3Qg
c2l6ZV90IG91dGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29scygpKTsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6ZU9mICog
aW5uZXJTY2FsZTsKKyAgICAgICAgcmV0dXJuIHtuICogb3V0ZXJTY2FsZSwgbn07CisgICAgfQor
fQorCitUTGF5b3V0QmxvY2tTdG9yYWdlIHNoOjpPdmVybGF5KFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
b2xkU3RvcmFnZSwgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dEJsb2Nr
U3RvcmFnZSBuZXdTdG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3Jh
Z2U7CisgICAgc3dpdGNoIChuZXdTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRTdG9y
YWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkID8ga0RlZmF1bHRMYXlv
dXRCbG9ja1N0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBuZXdTdG9yYWdlOworICAgIH0KK30KKworVExheW91dE1h
dHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywg
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgbmV3
UGFja2luZyA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZzsKKyAgICBz
d2l0Y2ggKG5ld1BhY2tpbmcpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNr
aW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5nID09IFRM
YXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4
UGFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogb2xkUGFja2luZzsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQ
YWNrZWQoVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIHN3aXRjaCAoc3RvcmFn
ZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkOgor
ICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDE0
MDoKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
VW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQYWNrZWQoVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIENhbkJlUGFja2VkKGxheW91dFF1
YWxpZmllci5ibG9ja1N0b3JhZ2UpOworfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIENhbkJlUGFja2VkKHR5cGUuZ2V0TGF5
b3V0UXVhbGlmaWVyKCkpOworfQorCit2b2lkIHNoOjpTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5
cGUsIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKK3sKKyAgICBhdXRvIHF1YWwgICAgICAg
ICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAgcXVhbC5ibG9ja1N0b3JhZ2UgPSBz
dG9yYWdlOworICAgIHR5cGUuc2V0TGF5b3V0UXVhbGlmaWVyKHF1YWwpOworfQorCitzdGF0aWMg
TGF5b3V0IENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAq
Y29uc3QgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJh
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBi
YXNlQWxpZ25tZW50KQoreworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAgICBzdG9y
YWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09IFRMYXlv
dXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0OjpJ
ZGVudGl0eSgpOworICAgIGZvciAoYXV0byBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCisgICAgeworICAgICAgICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIpLT50eXBl
KCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKCFpc1Bh
Y2tlZCkgIC8vIFhYWDogQ29ycmVjdD8KKyAgICB7CisgICAgICAgIGxheW91dC5zaXplT2YgPSBS
b3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAgICB9
CisgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAg
cmV0dXJuIGxheW91dDsKK30KKworc3RhdGljIExheW91dCBDb21tb25HbHNsTGF5b3V0T2YoY29u
c3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBtYXNrQXJyYXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKK3sKKyAg
ICBBU1NFUlQoc3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZCk7
CisKKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNTaGFyZWQ7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRyaXgo
KSAmJiAhbWFza0FycmF5KQorICAgIHsKKyAgICAgICAgYXV0byBsYXlvdXQgPSBHbHNsTGF5b3V0
T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgdHJ1ZSk7CisgICAgICAgIGxheW91dCAq
PSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgbGF5b3V0LnJlcXVpcmVBbGln
bm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAg
fQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpID09IDEpOwor
ICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAgICAgIHJl
dHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoZmllbGRzLmRhdGEoKSwgZmllbGRzLmRhdGEo
KSArIGZpZWxkcy5zaXplKCksIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0cml4UGFja2luZywgbWFza0FycmF5LCBiYXNlQWxpZ25tZW50KTsKKyAg
ICB9CisKKyAgICBjb25zdCBhdXRvIHNjYWxhckxheW91dCA9IFNjYWxhckxheW91dE9mKHR5cGUs
IExhbmd1YWdlOjpHTFNMKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0
b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5v
bWluYWxTaXplKCldOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWduU2NhbGUgPSBpbm5l
clNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRv
IGxheW91dCA9CisgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXplT2YgKiBz
aXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25TY2FsZX07CisgICAgICAgICAg
ICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5
cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAg
ICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisgICAg
ICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworCisgICAgICAgIHNpemVfdCBpbm5l
ckRpbTsKKyAgICAgICAgc2l6ZV90IG91dGVyRGltOworCisgICAgICAgIHN3aXRjaCAobWF0cml4
UGFja2luZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2lu
Zzo6RW1wQ29sdW1uTWFqb3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0
YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wUm93TWFqb3I6Cisg
ICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlw
ZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
TGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IDA7CisgICAgICAgICAgICAg
ICAgb3V0ZXJEaW0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgb3V0ZXJEaW0gKj0gdHlwZS5n
ZXRBcnJheVNpemVQcm9kdWN0KCk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUg
PSBpbm5lclNjYWxlc1VucGFja2VkW2lubmVyRGltXTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG4g
ICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKyAgICAgICAgTGF5
b3V0IGxheW91dCAgICAgICAgICAgPSB7b3V0ZXJEaW0gKiBuLCBufTsKKyAgICAgICAgbGF5b3V0
LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBs
YXlvdXQ7CisgICAgfQorfQorCitMYXlvdXQgc2g6Okdsc2xMYXlvdXRPZihjb25zdCBUVHlwZSAm
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBh
Y2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sKKyAgICBB
U1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBlLmdldFNl
Y29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIHN0b3JhZ2UgICAgICAgPSBPdmVybGF5KHN0b3Jh
Z2UsIHR5cGUpOworICAgIG1hdHJpeFBhY2tpbmcgPSBPdmVybGF5KG1hdHJpeFBhY2tpbmcsIHR5
cGUpOworCisgICAgc3dpdGNoIChzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExh
eW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisgICAg
ICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgcmV0
dXJuIENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNr
QXJyYXksIDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6
CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2Yo
dHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKyAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisgICAgfQor
fQorCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBzaDo6R2xzbFN0cnVjdExheW91dE9mKFRGaWVs
ZCBjb25zdCAqY29uc3QgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCit7CisgICAgQVNTRVJUKHN0b3Jh
Z2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworICAgIEFTU0VSVCht
YXRyaXhQYWNraW5nICE9IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCk7CisK
KyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5
b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsK
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAgICAgICAg
ICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5
b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxNik7
CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAgICAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBt
YXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTQxM2VkZjQ5ZmVmMjdjMDBhZDYxNjZhZWFjZmU1MjZhYTk0ZjFkNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApAQCAtMCwwICsxLDg4IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xBWU9VVF9I
XworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlP
VVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNv
bnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRCbG9ja1N0b3JhZ2UgID0gVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzU2hhcmVkOworY29uc3RleHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRNYXRyaXhQ
YWNraW5nID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOworCisvLyBSZXR1
cm5zIGBvbGRTdG9yYWdlYCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIGJsb2NrIHN0b3JhZ2Uu
CisvLyBPdGhlcndpc2UgcmV0dXJucyBibG9jayBzdG9yYWdlIG9mIGB0eXBlYC4KK1RMYXlvdXRC
bG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2UsIGNvbnN0
IFRUeXBlICZ0eXBlKTsKKworLy8gUmV0dXJucyBgb2xkUGFja2luZ2AgaWYgYHR5cGVgIGhhcyB1
bnNwZWNpZmllZCBtYXRyaXggcGFja2luZy4KKy8vIE90aGVyd2lzZSByZXR1cm5zIG1hdHJpeCBw
YWNraW5nIG9mIGB0eXBlYC4KK1RMYXlvdXRNYXRyaXhQYWNraW5nIE92ZXJsYXkoVExheW91dE1h
dHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBSZXR1cm5z
IHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3RvcmFnZSB0
byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFja2VkKFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3QgaXQgaXMg
cGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBhY2tlZCByZXBy
ZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFs
aWZpZXIpOworCisvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZv
ciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFj
a2VkKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gU2V0cyB0aGUgYmxvY2sgc3RvcmFnZSBmb3Ig
YSB0eXBlLgordm9pZCBTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5cGUsIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIENvbnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25vZmAgaW5m
b3JtYXRpb24uCitzdHJ1Y3QgTGF5b3V0Cit7CisgICAgc2l6ZV90IHNpemVPZjsKKyAgICBzaXpl
X3QgYWxpZ25PZjsKKworICAgIHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVybiB7MCwg
MX07IH0KKyAgICBzdGF0aWMgTGF5b3V0IEludmFsaWQoKSB7IHJldHVybiB7MCwgMH07IH0KKyAg
ICBzdGF0aWMgTGF5b3V0IEJvdGgoc2l6ZV90IG4pIHsgcmV0dXJuIHtuLCBufTsgfQorCisgICAg
dm9pZCByZXF1aXJlQWxpZ25tZW50KHNpemVfdCBhbGlnbiwgYm9vbCBwYWQpOworCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworCisgICAgdm9pZCBvcGVy
YXRvcis9KGNvbnN0IExheW91dCAmb3RoZXIpOworICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qg
c2NhbGUpOworCisgICAgTGF5b3V0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVyKSBjb25z
dDsKKyAgICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7Cit9OworCitzdHJ1
Y3QgTWV0YWxMYXlvdXRPZkNvbmZpZworeworICAgIGJvb2wgZGlzYWJsZVBhY2tpbmcgICAgICAg
ICAgICAgPSBmYWxzZTsKKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFs
c2U7CisgICAgYm9vbCB0cmVhdFNhbXBsZXJzQXNUZXh0dXJlRW52ICA9IGZhbHNlOworICAgIGJv
b2wgYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSBmYWxzZTsgIC8vIFBhZCB0byBtdWx0aXBs
ZSBvZiAxNgorfTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBpdCB3ZXJl
IHRvIGJlIHJlcHJlc2VudGVkIGluIGEgTWV0YWwgcHJvZ3JhbS4KKy8vIFRoaXMgZGVsaWJlcmF0
ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRyaXhQYWNr
aW5nIG9mIGFueSB0eXBlLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQgTWV0YWxMYXlvdXRPZihj
b25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcgPSB7fSk7CisKKy8v
IFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXByZXNlbnRl
ZCBpbiBhIEdMU0wgcHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0CitHbHNsTGF5b3V0
T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkLAorICAg
ICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0
cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkg
ICAgICAgICAgICAgICAgICAgICA9IGZhbHNlKTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9m
IGEgc3RydWN0dXJlIGlmIGl0IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBHTFNMIHByb2dy
YW0uCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBHbHNsU3RydWN0TGF5b3V0T2YoVEZpZWxkIGNv
bnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBt
YXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlm
ICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZTMwZGFlNmUyZDdiNmU2OTgyZmYwMDI5Mzc0ZTNmYWY0MjNjNWFjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCkBAIC0wLDAgKzEs
MzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCitjbGFz
cyBNYXBwZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgRnVu
Y3Rpb25Ub0RlZmluaXRpb24gbUZ1bmNUb0RlZjsKKworICBwdWJsaWM6CisgICAgTWFwcGVyKCkg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIGJvb2wgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1
bmNEZWZOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5j
ID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5jLT5nZXRC
dWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworICAgICAgICBtRnVuY1RvRGVmW2Z1
bmNdID0gZnVuY0RlZk5vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitG
dW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgTWFwcGVyIG1hcHBlcjsKKyAgICByb290LnRyYXZlcnNlKCZt
YXBwZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUobWFwcGVyLm1GdW5jVG9EZWYpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1NmRkZWU0
ZDkwNTBhNzAyMzc1ZWM1OThiZWY4MmI0NWVmMzg1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KKwor
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBt
YXAgZnJvbSBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZpbml0aW9ucy4KK3Vz
aW5nIEZ1bmN0aW9uVG9EZWZpbml0aW9uID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRGdW5j
dGlvbiAqLCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICo+OworCisvLyBNYXBzIGZ1bmN0aW9u
cyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zLgorQU5HTEVfTk9fRElTQ0FSRCBG
dW5jdGlvblRvRGVmaW5pdGlvbiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJbnRlcm1CbG9j
ayAmcm9vdCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9NYXBTeW1ib2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVjOTMwNDY5NWQxZWRmZTBmYmVkNTIxZDZm
YjEwNGNmZGM2NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1l
c3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitj
bGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRlOgorICAg
IHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25zdCBURnVuY3Rpb24gKiwgVEludGVybVN5
bWJvbCAmKT4gbU1hcDsKKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21w
aWxlciwKKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1
bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtTWFwKG1hcCkKKyAgICB7fQorCisgICAgUG9zdFJl
c3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJvbE5v
ZGUpOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIHNoOjpNYXBTeW1ib2xz
KFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNv
bnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApCit7CisgICAgUmV3cml0ZXIg
cmV3cml0ZXIoY29tcGlsZXIsIHN0ZDo6bW92ZShtYXApKTsKKyAgICBpZiAoIXJld3JpdGVyLnJl
YnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1Njg5MGExNWNhMWVjYTU5
MDFiMTJhYThjMzkxNmMxNTZmY2JjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TWFwU3ltYm9scy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJB
Q0NFU1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIE1hcHMgVEludGVy
bVN5bWJvbCBub2RlcyB0byBUSW50ZXJtTm9kZSBub2Rlcy4KKy8vIFRoZSBwYXJlbnQgZnVuY3Rp
b24gb2YgYSBzeW1ib2wgaXMgcHJvdmlkZWQgdG8gdGhlIG1hcHBpbmcgd2hlbiBhcHBsaWNhYmxl
LgorQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisgICAgVENvbXBpbGVyICZjb21w
aWxlciwKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJt
Tm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Nzc4ZDM0Y2MzMWM1MDliMDk2MzllMDZlYjM4NjUwZjgwZjEyYjBj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAKQEAgLTAs
MCArMSwxMDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PGNzdHJpbmc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgor
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc2l6ZV90IE1vZGlm
aWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBvcmRlcmlu
Zy5zaXplKCk7Cit9CisKK2NvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZNb2RpZmllZFN0
cnVjdE1hY2hpbmVyaWVzOjphdChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
ZGV4IDwgc2l6ZSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzICAgICAgICAgICAgICA9IG9y
ZGVyaW5nW2luZGV4XTsKKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZp
bmQoKnMpOworICAgIEFTU0VSVChtKTsKKyAgICByZXR1cm4gKm07Cit9CisKK2NvbnN0IE1vZGlm
aWVkU3RydWN0TWFjaGluZXJ5ICpNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpmaW5kKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gb3JpZ2luYWxUb01hY2hp
bmVyeS5maW5kKCZzKTsKKyAgICBpZiAoaXRlciA9PSBvcmlnaW5hbFRvTWFjaGluZXJ5LmVuZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRl
ci0+c2Vjb25kOworfQorCit2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChj
b25zdCBUU3RydWN0dXJlICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSkKK3sKKyAgICBBU1NF
UlQoIWZpbmQocykpOworICAgIG9yaWdpbmFsVG9NYWNoaW5lcnlbJnNdID0gbWFjaGluZXJ5Owor
ICAgIG9yZGVyaW5nLnB1c2hfYmFjaygmcyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK25hbWVzcGFjZQoreworCitUSW50ZXJtVHlwZWQgJkZsYXR0ZW4oU3ltYm9sRW52ICZzeW1i
b2xFbnYsIFRJbnRlcm1UeXBlZCAmbm9kZSkKK3sKKyAgICBhdXRvICZ0eXBlID0gbm9kZS5nZXRU
eXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKworICAgIGF1dG8gJnJldFR5cGUg
PSBJbm5lcm1vc3RUeXBlKHR5cGUpOworICAgIHJldFR5cGUubWFrZUFycmF5KDEpOworCisgICAg
cmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVuIiksIHJl
dFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cit9CisKK3N0cnVjdCBGbGF0dGVu
QXJyYXkKK3t9OworCitzdHJ1Y3QgUGF0aEl0ZW0KK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUKKyAg
ICB7CisgICAgICAgIEZpZWxkLCAgICAgICAgIC8vIFN0cnVjdCBmaWVsZCBpbmRleGluZy4KKyAg
ICAgICAgSW5kZXgsICAgICAgICAgLy8gQXJyYXksIHZlY3Rvciwgb3IgbWF0cml4IGluZGV4aW5n
LgorICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkgcmFuayAtPiBwb2ludGVy
IG9mIGlubmVybW9zdCB0eXBlLgorICAgIH07CisKKyAgICBQYXRoSXRlbShjb25zdCBURmllbGQg
JmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6RmllbGQpIHt9CisgICAgUGF0aEl0
ZW0oaW50IGluZGV4KSA6IGluZGV4KGluZGV4KSwgdHlwZShUeXBlOjpJbmRleCkge30KKyAgICBQ
YXRoSXRlbSh1bnNpZ25lZCBpbmRleCkgOiBQYXRoSXRlbShzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
KSkge30KKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5cGU6OkZs
YXR0ZW5BcnJheSkge30KKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBURmllbGQg
KmZpZWxkOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICBUeXBlIHR5cGU7Cit9Owor
CitUSW50ZXJtVHlwZWQgJkJ1aWxkUGF0aEFjY2VzcyhTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRo
KQoreworICAgIFRJbnRlcm1UeXBlZCAqY3VyciA9IG5ldyBUSW50ZXJtU3ltYm9sKCZ2YXIpOwor
ICAgIGZvciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzRmllbGQoKmN1cnIsIGl0
ZW0uZmllbGQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFBhdGhJdGVtOjpUeXBlOjpJbmRleDoKKyAgICAgICAgICAgICAgICBjdXJyID0gJkFjY2Vz
c0luZGV4KCpjdXJyLCBpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gKmN1cnI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE9yaWdpbmFs
UGFyYW0gPSBjb25zdCBUVmFyaWFibGUgJjsKK3VzaW5nIE1vZGlmaWVkUGFyYW0gPSBjb25zdCBU
VmFyaWFibGUgJjsKKwordXNpbmcgT3JpZ2luYWxBY2Nlc3MgPSBUSW50ZXJtVHlwZWQ7Cit1c2lu
ZyBNb2RpZmllZEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsKKworc3RydWN0IEFjY2VzcworeworICAg
IE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKyAgICBNb2RpZmllZEFjY2VzcyAmbW9kaWZpZWQ7
CisKKyAgICBzdHJ1Y3QgRW52CisgICAgeworICAgICAgICBjb25zdCBDb252ZXJ0VHlwZSB0eXBl
OworICAgIH07Cit9OworCit1c2luZyBDb252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rpb248QWNj
ZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNzICYpPjsK
KworY2xhc3MgQ29udmVydFN0cnVjdFN0YXRlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCit7CisgIHBy
aXZhdGU6CisgICAgc3RydWN0IENvbnZlcnNpb25JbmZvCisgICAgeworICAgICAgICBDb252ZXJz
aW9uRnVuYyBzdGRGdW5jOworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmFzdEZ1bmM7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisgICAgICAgIEltbXV0YWJsZVN0
cmluZyBwYXRoTmFtZTsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBDb252ZXJ0U3RydWN0U3Rh
dGUoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZj
b25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMg
Jm91dE1hY2hpbmVyaWVzKQorICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorICAgICAgICAgIHN5
bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1vZGlmaWVkRmllbGRzKCpuZXcgVEZpZWxk
TGlzdCgpKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSks
CisgICAgICAgICAgaWRHZW4oaWRHZW4pLAorICAgICAgICAgIG91dE1hY2hpbmVyaWVzKG91dE1h
Y2hpbmVyaWVzKQorICAgIHt9CisKKyAgICB+Q29udmVydFN0cnVjdFN0YXRlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG5hbWVQYXRo
U2l6ZXMuZW1wdHkoKSk7CisgICAgfQorCisgICAgdm9pZCBwdWJsaXNoKGNvbnN0IFRTdHJ1Y3R1
cmUgJm9yaWdpbmFsU3RydWN0LCBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUpCisgICAg
eworICAgICAgICBjb25zdCBib29sIGlzT3JpZ2luYWxUb01vZGlmaWVkID0gY29uZmlnLmNvbnZl
cnRUeXBlID09IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ7CisKKyAgICAgICAgYXV0
byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBtb2RpZmll
ZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbW9kaWZpZWRGaWVsZHMsIG1vZGlmaWVkU3RydWN0TmFtZS5zeW1ib2xU
eXBlKCkpOworCisgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKyAgICAgICAg
ICAgICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgIGlkR2VuLmNyZWF0ZU5ld05hbWUoaXNPcmln
aW5hbFRvTW9kaWZpZWQgPyAib3JpZ2luYWxUb01vZGlmaWVkIiA6ICJtb2RpZmllZFRvT3JpZ2lu
YWwiKQorICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisgICAgICAgICAgICBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Vm9pZCksIGZhbHNlKTsK
KworICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorICAgICAgICAgICAgQ3Jl
YXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgb3JpZ2luYWxTdHJ1Y3QsIE5hbWUoIm9y
aWdpbmFsIikpOworICAgICAgICBNb2RpZmllZFBhcmFtIG1vZGlmaWVkUGFyYW0gPQorICAgICAg
ICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZpZWRTdHJ1Y3Qs
IE5hbWUoIm1vZGlmaWVkIikpOworICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG9y
aWdpbmFsUGFyYW0sIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgc3ltYm9sRW52Lm1h
cmtBc1JlZmVyZW5jZShtb2RpZmllZFBhcmFtLCBjb25maWcuZXh0ZXJuYWxBZGRyZXNzU3BhY2Up
OworICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAgICAgIGZ1bmMu
YWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsK
KyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAg
fQorCisgICAgICAgIFRJbnRlcm1CbG9jayAmYm9keSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisK
KyAgICAgICAgQWNjZXNzOjpFbnYgZW52e2NvbmZpZy5jb252ZXJ0VHlwZX07CisKKyAgICAgICAg
Zm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ID0gWyZdKE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbCwg
TW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0
RnVuYykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5m
by5zdGRGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNP
cmlnaW5hbFRvTW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG9yaWdpbmFs
IDogbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICppbmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnN0ZEZ1bmMpOworICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3MgYWNjZXNzICAgICAgPSBpbmZvLnN0ZEZ1bmMoZW52LCBvcmlnaW5hbCwg
bW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09y
aWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRvTW9kaWZp
ZWQgPyBhY2Nlc3MubW9kaWZpZWQgOiBhY2Nlc3Mub3JpZ2luYWw7CisgICAgICAgICAgICAgICAg
ICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9w
QXNzaWduLCAmZGVzdCwgJnNyYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBhdGhBY2Nl
c3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisgICAgICAgICAg
ICBNb2RpZmllZEFjY2VzcyAqbW9kaWZpZWQgPSAmQWNjZXNzRmllbGQobW9kaWZpZWRQYXJhbSwg
aW5mby5wYXRoTmFtZSk7CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3JpZ2luYWwt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG10ID0gbW9kaWZpZWQtPmdldFR5
cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChvdC5pc0FycmF5KCkgPT0gbXQuaXNBcnJheSgpKTsK
KworICAgICAgICAgICAgaWYgKG90LmlzQXJyYXkoKSAmJiBvdCAhPSBtdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10LmdldEFy
cmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90LmlzQXJyYXlPZkFycmF5cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAmRmxhdHRl
bihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0g
JkZsYXR0ZW4oc3ltYm9sRW52LCAqbW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5nZXRBcnJh
eVNpemVQcm9kdWN0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdm9s
dW1lOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAh
PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmln
aW5hbCA9IG9yaWdpbmFsLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBPcmlnaW5hbEFjY2VzcyAmbyA9IEFjY2Vzc0luZGV4KCpvcmlnaW5h
bCwgaSk7CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZtID0gQWNjZXNzSW5k
ZXgoKm1vZGlmaWVkLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydChvLCBtKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmllZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvICpmdW5jUHJvdG8gPSBuZXcg
VEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jKTsKKyAgICAgICAgYXV0byAqZnVuY0RlZiAg
ID0gbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24oZnVuY1Byb3RvLCAmYm9keSk7CisKKyAg
ICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgbWFjaGluZXJ5OworICAgICAgICBtYWNoaW5l
cnkubW9kaWZpZWRTdHJ1Y3QgICAgICAgICAgICAgICAgICAgPSAmbW9kaWZpZWRTdHJ1Y3Q7Cisg
ICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNE
ZWY7CisKKyAgICAgICAgb3V0TWFjaGluZXJpZXMuaW5zZXJ0KG9yaWdpbmFsU3RydWN0LCBtYWNo
aW5lcnkpOworICAgIH0KKworICAgIHZvaWQgcHVzaFBhdGgoUGF0aEl0ZW0gY29uc3QgJml0ZW0p
CisgICAgeworICAgICAgICBwYXRoSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAgICAgIHN3
aXRjaCAoaXRlbS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpU
eXBlOjpGaWVsZDoKKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFt
ZSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
UGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0aChpdGVt
LmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQYXRo
SXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAgICAgICAgIG5hbWVQYXRoU2l6ZXMu
cHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHBvcFBhdGgoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aFNpemVzLmVtcHR5
KCkpOworICAgICAgICBuYW1lUGF0aC5yZXNpemUobmFtZVBhdGhTaXplcy5iYWNrKCkpOworICAg
ICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisKKyAgICAgICAgQVNTRVJUKCFwYXRoSXRl
bXMuZW1wdHkoKSk7CisgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworICAgIH0KKworICAg
IHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFmaW5hbGl6ZWQpOworICAg
ICAgICBmaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBpbnRyb2R1Y2VQYWNraW5nKCk7CisgICAg
ICAgIEFTU0VSVChtZXRhbExheW91dFRvdGFsID09IExheW91dDo6SWRlbnRpdHkoKSk7CisgICAg
ICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vZGlmaWVkRmll
bGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFR5cGUg
Jm5ld1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcg
cGFja2luZykKKyAgICB7CisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVy
ID0gbmV3VHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVy
LmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworICAgICAgICBsYXlvdXRRdWFsaWZpZXIubWF0
cml4UGFja2luZyAgICA9IHBhY2tpbmc7CisgICAgICAgIG5ld1R5cGUuc2V0TGF5b3V0UXVhbGlm
aWVyKGxheW91dFF1YWxpZmllcik7CisKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHBh
dGhOYW1lKG5hbWVQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNrKG5ldyBU
RmllbGQoJm5ld1R5cGUsIHBhdGhOYW1lLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJvbFR5cGUo
KSkpOworICAgIH0KKworICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBDb252ZXJzaW9uRnVu
YyAmZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVsZHMuZW1wdHkoKSk7
CisgICAgICAgIGNvbnZlcnNpb25JbmZvcy5wdXNoX2JhY2soe2Z1bmMsIG51bGxwdHIsIHBhdGhJ
dGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZENvbnZlcnNpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0eSgpKTsKKyAgICAgICAgY29udmVyc2lvbkluZm9zLnB1
c2hfYmFjayh7e30sICZmdW5jLCBwYXRoSXRlbXMsIG1vZGlmaWVkRmllbGRzLmJhY2soKS0+bmFt
ZSgpfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNQYWNraW5nKCkgY29uc3QgeyByZXR1cm4gY29u
dGFpbnNQYWNrZWQ7IH0KKworICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIHBh
ZEZpZWxkQ291bnQgPiAwOyB9CisKKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVjdHVyZSAm
c3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQorICAgIHsK
KyAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKm0gPSBvdXRNYWNoaW5lcmll
cy5maW5kKHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChtID09IG51bGxwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoc3RydWN0
dXJlLm5hbWUoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2RpZmllZFN0
cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0TWFjaGlu
ZXJpZXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG0gPSBvdXRNYWNoaW5lcmllcy5maW5kKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICBBU1NFUlQobSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0TWFjaGlu
ZXJ5ID0gKm07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAg
IHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxheW91dCkKKyAg
ICB7CisgICAgICAgIGlmIChwYWRBbW91bnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbW9kaWZp
ZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBpbiBzY2Fs
YXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxsIG5vdAor
ICAgICAgICAvLyBhbGxvdyBtYXRyaXggb3IgYXJyYXkgbWVtYmVycy4KKyAgICAgICAgd2hpbGUg
KHBhZEFtb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlICpwYWRUeXBlOwor
ICAgICAgICAgICAgaWYgKHBhZEFtb3VudCA+PSAxNikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwYWRBbW91bnQgLT0gMTY7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBU
VHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgNCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChwYWRBbW91bnQgPj0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBwYWRBbW91bnQgLT0gODsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRC
YXNpY1R5cGU6OkVidEZsb2F0LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKHBhZEFtb3VudCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhZEFt
b3VudCAtPSA0OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFkQW1v
dW50ID49IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09IDI7
CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29s
LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworICAgICAgICAgICAgICAgIHBh
ZEFtb3VudCAtPSAxOworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2lj
VHlwZTo6RWJ0Qm9vbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1cGRhdGVM
YXlvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCAr
PSBNZXRhbExheW91dE9mKCpwYWRUeXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIik7CisgICAgICAgICAg
ICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgbmV3IFRGaWVsZChw
YWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5cGUoKSkp
OworICAgICAgICAgICAgKytwYWRGaWVsZENvdW50OworICAgICAgICB9CisKKyAgICAgICAgc3Rk
OjpyZXZlcnNlKG1vZGlmaWVkRmllbGRzLmJlZ2luKCkgKyBiZWdpbiwgbW9kaWZpZWRGaWVsZHMu
ZW5kKCkpOworICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFja2luZygpCisgICAgeworICAg
ICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2V0VW5wYWNrZWRTdG9yYWdlID0gW10o
VFR5cGUgJnR5cGUpIHsKKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSA9
IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAgICAgICAgICAgc3dp
dGNoIChzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0g
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoK
KyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0
ZDQzMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisgICAgICAgICAgICAgICAgY2FzZSBUTGF5
b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRCbG9ja1N0b3JhZ2UodHlwZSwgc3RvcmFn
ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgTGF5b3V0IGdsc2xMYXlvdXRUb3RhbCA9IExheW91
dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVk
RmllbGRzLnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICZjdXJyICAgICAgICAgICA9ICptb2Rp
ZmllZEZpZWxkc1tpXTsKKyAgICAgICAgICAgIFRUeXBlICZjdXJyVHlwZSAgICAgICAgPSAqY3Vy
ci50eXBlKCk7CisgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNr
ZWQoY3VyclR5cGUpOworCisgICAgICAgICAgICBhdXRvIGRvbnRQYWNrID0gWyZdKCkgeworICAg
ICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBHbHNsTGF5b3V0T2YoY3Vy
clR5cGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFDYW5CZVBhY2tlZChj
dXJyVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2soKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
c3QgTGF5b3V0IHBhY2tlZEdsc2xMYXlvdXQgICAgICAgICAgID0gR2xzbExheW91dE9mKGN1cnJU
eXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgcGFja2VkU3RvcmFn
ZSA9IGN1cnJUeXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKyAgICAgICAg
ICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICBjb25zdCBMYXlv
dXQgdW5wYWNrZWRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKyAgICAgICAg
ICAgIFNldEJsb2NrU3RvcmFnZShjdXJyVHlwZSwgcGFja2VkU3RvcmFnZSk7CisKKyAgICAgICAg
ICAgIEFTU0VSVChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA8PSB1bnBhY2tlZEdsc2xMYXlvdXQu
c2l6ZU9mKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA9PSB1bnBh
Y2tlZEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRv
bnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBqID0gaSArIDE7CisgICAgICAgICAgICBpZiAoaiA9PSBz
aXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNrZWRHbHNs
TGF5b3V0LnNpemVPZjsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmbmV4dCAgICAgICAgICA9
ICptb2RpZmllZEZpZWxkc1tqXTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dCBuZXh0R2xzbExh
eW91dCA9IEdsc2xMYXlvdXRPZigqbmV4dC50eXBlKCkpOworCisgICAgICAgICAgICBpZiAocGFk
IDwgbmV4dEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN5bWJvbEVudi5tYXJrQXNQYWNrZWQoY3Vycik7CisgICAgICAgICAgICBn
bHNsTGF5b3V0VG90YWwgKz0gcGFja2VkR2xzbExheW91dDsKKyAgICAgICAgICAgIGNvbnRhaW5z
UGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFk
ZGluZygpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE1ldGFsTGF5b3V0
T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tp
bmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKyAgICAgICAgbGF5b3V0Q29u
ZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkID0gdHJ1ZTsKKworICAgICAgICBURmllbGRM
aXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisgICAgICAgIEFTU0VSVCgh
ZmllbGRzLmVtcHR5KCkpOyAgLy8gR0xTTCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWVtYmVyLgor
CisgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQoKTsKKwor
ICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7CisKKyAgICAgICAgICAgIGNv
bnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKyAgICAgICAgICAg
IGNvbnN0IExheW91dCBtZXRhbExheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29u
ZmlnKTsKKworICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisgICAgICAgICAg
ICBpZiAoZ2xzbExheW91dC5hbGlnbk9mID4gbWV0YWxMYXlvdXQuYWxpZ25PZiAmJiBmaWVsZCAh
PSBmaXJzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgcHJl
UGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworICAgICAgICAgICAgICAgIG1l
dGFsTGF5b3V0VG90YWwucmVxdWlyZUFsaWdubWVudChnbHNsTGF5b3V0LmFsaWduT2YsIHRydWUp
OworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRkZWRTaXplID0gbWV0YWxMYXlvdXRU
b3RhbC5zaXplT2Y7CisgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAgICAgPSBw
YWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRv
dGFsICs9IG1ldGFsTGF5b3V0OworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocHJlUGFkQW1v
dW50LCBmYWxzZSk7ICAvLyBOb3RlOiByZXF1aXJlQWxpZ25tZW50KCkgYWxyZWFkeSB1cGRhdGVk
IGxheW91dAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisK
KyAgICAgICAgICAgIGlmIChnbHNsTGF5b3V0LnNpemVPZiA+IG1ldGFsTGF5b3V0LnNpemVPZiAm
JiBmaWVsZCAhPSBmaWVsZHMuYmFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0IGJvb2wgdXBkYXRlTGF5b3V0ID0gdHJ1ZTsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgcGFkQW1vdW50ICA9IGdsc2xMYXlvdXQuc2l6ZU9mIC0g
bWV0YWxMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFkQW1vdW50
LCB1cGRhdGVMYXlvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBwdXNoTmFtZVBhdGgoY29uc3QgY2hhciAqZXh0cmEpCisgICAgeworICAgICAgICBBU1NF
UlQoZXh0cmEgJiYgKmV4dHJhICE9ICdcMCcpOworICAgICAgICBuYW1lUGF0aFNpemVzLnB1c2hf
YmFjayhuYW1lUGF0aC5zaXplKCkpOworICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7Cisg
ICAgICAgIGlmIChuYW1lUGF0aC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1l
UGF0aCA9IHA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KCpwID09ICdfJykKKyAgICAgICAgeworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAg
ICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gIngiOworICAg
ICAgICB9CisgICAgICAgIGlmIChuYW1lUGF0aC5iYWNrKCkgIT0gJ18nKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuYW1lUGF0aCArPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbmFtZVBhdGgg
Kz0gcDsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRyYSkKKyAg
ICB7CisgICAgICAgIGNoYXIgYnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpk
aWdpdHMxMCArIDFdOworICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEpOworICAg
ICAgICBwdXNoTmFtZVBhdGgoYnVmZmVyKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIGNvbnN0
IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnOworICAgIFN5bWJvbEVudiAmc3ltYm9sRW52Owor
CisgIHByaXZhdGU6CisgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisgICAgTGF5b3V0
IG1ldGFsTGF5b3V0VG90YWwgPSBMYXlvdXQ6OklkZW50aXR5KCk7CisgICAgc2l6ZV90IHBhZEZp
ZWxkQ291bnQgICAgPSAwOworICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0gZmFsc2U7Cisg
ICAgYm9vbCBmaW5hbGl6ZWQgICAgICAgICAgPSBmYWxzZTsKKworICAgIHN0ZDo6dmVjdG9yPFBh
dGhJdGVtPiBwYXRoSXRlbXM7CisKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG5hbWVQYXRoU2l6
ZXM7CisgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisKKyAgICBzdGQ6OnZlY3RvcjxDb252ZXJz
aW9uSW5mbz4gY29udmVyc2lvbkluZm9zOworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGU7
CisgICAgSWRHZW4gJmlkR2VuOworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1h
Y2hpbmVyaWVzOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgTW9kaWZ5
RnVuYyA9IGJvb2wgKCopKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jv
b2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jvb2wgSWRlbnRpdHlNb2RpZnko
Q29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2lu
ZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUoKTsKKyAg
ICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBDbG9uZVR5cGUodHlwZSksIHN0b3JhZ2Us
IHBhY2tpbmcpOworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQWNj
ZXNze28sIG19OworICAgIH0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbmxpbmVT
dHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0
IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2lu
ZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9ICpmaWVs
ZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3RhdGUuc3lt
Ym9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUu
Y29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAmc3ViZmllbGRzID0gc3Vic3RydWN0dXJl
LT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiBzdWJmaWVsZHMp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmc3VidHlwZSAgICAgICAgICAgICAgICAgID0g
KnN1YmZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Vi
c3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworICAgICAgICBjb25zdCBUTGF5
b3V0TWF0cml4UGFja2luZyBzdWJwYWNraW5nID0gT3ZlcmxheShwYWNraW5nLCBzdWJ0eXBlKTsK
KyAgICAgICAgTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqc3ViZmllbGQsIHN1YnN0b3JhZ2UsIHN1
YnBhY2tpbmcpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlY3Vyc2VT
dHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9ICpm
aWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3RhdGUu
c3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNv
bmZpZy5yZWN1cnNlU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisgICAgaWYg
KCFzdGF0ZS5yZWN1cnNlKCpzdWJzdHJ1Y3R1cmUsIG1hY2hpbmVyeSkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRUeXBl
KG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5U2l6ZXMo
KSk7CisgICAgfQorCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVydGVyID0g
bWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOworICAgIEFT
U0VSVChjb252ZXJ0ZXIpOworCisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgbmV3
VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbigqY29udmVy
dGVyLT5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNwbGl0
TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5zcGxp
dE1hdHJpeENvbHVtbnMoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgVFR5cGUgJnJv
d1R5cGUgPSBEcm9wQ29sdW1ucyh0eXBlKTsKKworICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29s
czsgKytjKQorICAgIHsKKyAgICAgICAgc3RhdGUucHVzaFBhdGgoYyk7CisKKyAgICAgICAgc3Rh
dGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcm93VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7Cisg
ICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNj
ZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tv
LCBtfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3Ry
dWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgpOwor
ICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBjb25zdCBpbnQgcm93cyAgICAgICA9IHR5cGUuZ2V0Um93cygpOworICAgIGNv
bnN0IGludCBzYXR1cmF0aW9uID0gc3RhdGUuY29uZmlnLnNhdHVyYXRlTWF0cml4Um93cyhmaWVs
ZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygpOworICAg
IFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24pOworICAg
IHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNhdFR5cGUsIHN0b3JhZ2UsIHBhY2tpbmcp
OworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisgICAgeworICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHJvd3M7ICsrcikKKyAgICAgICAgeworICAgICAgICAgICAgc3Rh
dGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1v
ZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICAgICAgYXV0byAmb18gPSBBY2Nlc3NJbmRl
eChBY2Nlc3NJbmRleChvLCBjKSwgcik7CisgICAgICAgICAgICAgICAgYXV0byAmbV8gPSBBY2Nl
c3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvXywgbV99OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXN0Qm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUg
JnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQoreworICAgIGlmIChmaWVsZC50eXBlKCktPmdl
dEJhc2ljVHlwZSgpICE9IFRCYXNpY1R5cGU6OkVidEJvb2wpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29sVG9VaW50
KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0FjY2VzcyBDb252ZXJ0Qm9vbFRvVWludChDb252ZXJ0VHlwZSBjb252ZXJ0
VHlwZSwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKQoreworICAgIGF1dG8g
Y29lcmNlID0gW10oVEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50
ZXJtVHlwZWQgJiB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29u
c3RydWN0b3IodG8uZ2V0VHlwZSgpLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tfSk7CisgICAg
fTsKKyAgICBzd2l0Y2ggKGNvbnZlcnRUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBDb252ZXJ0
VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOgorICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2Vy
Y2UobSwgbyksIG19OworICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3JpZ2lu
YWw6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNze28sIGNvZXJjZShvLCBtKX07CisgICAgfQor
fQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRl
ICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQg
JmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJyYXkpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQudHlwZSgpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAhPSBhcnJheSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCEoKHR5cGUuaXNSYW5rMCgp
ICYmIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkgfHwgdHlwZS5pc1ZlY3RvcigpKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgYXV0byBzYXR1cmF0b3Ig
PQorICAgICAgICBhcnJheSA/IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJy
YXlzIDogc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0b3I7CisgICAgY29uc3QgaW50
IGRpbSAgICAgICAgPSB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgY29uc3QgaW50IHNhdHVy
YXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworICAgIGlmIChzYXR1cmF0aW9uIDw9IGRpbSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmc2F0VHlwZSAg
ICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisgICAgY29uc3QgYm9vbCBi
b29sVG9VaW50ID0gVGVzdEJvb2xUb1VpbnQoc3RhdGUsIGZpZWxkKTsKKyAgICBpZiAoYm9vbFRv
VWludCkKKyAgICB7CisgICAgICAgIHNhdFR5cGUuc2V0QmFzaWNUeXBlKFRCYXNpY1R5cGU6OkVi
dFVJbnQpOworICAgIH0KKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBl
LCBzdG9yYWdlLCBwYWNraW5nKTsKKworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2Qp
CisgICAgeworICAgICAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVudiAmZW52
LCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAgICAgIGF1
dG8gJm9fID0gZGltID4gMSA/IEFjY2Vzc0luZGV4KG8sIGQpIDogbzsKKyAgICAgICAgICAgIGF1
dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisgICAgICAgICAgICBpZiAoYm9vbFRvVWludCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xUb1VpbnQo
ZW52LnR5cGUsIG9fLCBtXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvXywgbV99OworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJP
clZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIHRydWUpOworfQor
Citib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3IoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBw
YWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9uKHN0YXRl
LCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgZmFsc2UpOworfQorCitib29sIFByb21vdGVCb29s
VG9VaW50KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlv
dXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBpZiAoIVRlc3RCb29sVG9VaW50KHN0
YXRlLCBmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
YXV0byAmcHJvbW90ZWRUeXBlID0gQ2xvbmVUeXBlKCpmaWVsZC50eXBlKCkpOworICAgIHByb21v
dGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisgICAgc3RhdGUuYWRk
TW9kaWZpZWRGaWVsZChmaWVsZCwgcHJvbW90ZWRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKwor
ICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9yaWdpbmFsQWNj
ZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQ29udmVydEJvb2xU
b1VpbnQoZW52LnR5cGUsIG8sIG0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTW9kaWZ5Q29tbW9uKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10gPSB7Cisg
ICAgICAgIElubGluZVN0cnVjdCwgICAgICAgICAgICAgICAgICAvLworICAgICAgICBSZWN1cnNl
U3RydWN0LCAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAg
ICAgICAgICAgIC8vCisgICAgICAgIFNhdHVyYXRlTWF0cml4Um93cywgICAgICAgICAgICAvLwor
ICAgICAgICBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzLCAgLy8KKyAgICAgICAgU2F0dXJh
dGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisgICAgICAgIFByb21vdGVCb29sVG9VaW50LCAg
ICAgICAgICAgICAvLworICAgIH07CisKKyAgICBmb3IgKE1vZGlmeUZ1bmMgZnVuYyA6IGZ1bmNz
KQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNr
aW5nKTsKK30KKworYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLmlubGluZUFycmF5
KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25z
dCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICBjb25z
dCBib29sIGlzTXVsdGlEaW0gPSB0eXBlLmlzQXJyYXlPZkFycmF5cygpOworCisgICAgYXV0byAm
aW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgY29uc3QgVEZpZWxkIGlu
bmVybW9zdEZpZWxkKCZpbm5lcm1vc3RUeXBlLCBmaWVsZC5uYW1lKCksIGZpZWxkLmxpbmUoKSwg
ZmllbGQuc3ltYm9sVHlwZSgpKTsKKworICAgIGlmIChpc011bHRpRGltKQorICAgIHsKKyAgICAg
ICAgc3RhdGUucHVzaFBhdGgoRmxhdHRlbkFycmF5KCkpOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2b2x1bWU7ICsraSkKKyAgICB7CisgICAgICAgIHN0YXRlLnB1c2hQ
YXRoKGkpOworICAgICAgICBNb2RpZnlDb21tb24oc3RhdGUsIGlubmVybW9zdEZpZWxkLCBzdG9y
YWdlLCBwYWNraW5nKTsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKworICAgIGlm
IChpc011bHRpRGltKQorICAgIHsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZGlmeVJlY3Vyc2l2ZShDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
Cit7CisgICAgc3RhdGUucHVzaFBhdGgoZmllbGQpOworCisgICAgYm9vbCBtb2RpZmllZDsKKyAg
ICBpZiAoSW5saW5lQXJyYXkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKyAgICB7
CisgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbW9kaWZpZWQgPSBNb2RpZnlDb21tb24oc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyAgICB9CisKKyAgICBzdGF0ZS5wb3BQYXRoKCk7CisKKyAgICByZXR1cm4gbW9kaWZpZWQ7
Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworYm9vbCBzaDo6VHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNv
bmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
Jm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCit7CisgICAgQ29u
dmVydFN0cnVjdFN0YXRlIHN0YXRlKHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgb3V0TWFjaGlu
ZXJpZXMpOworICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKworICAgIGNvbnN0
IFRGaWVsZExpc3QgJm9yaWdpbmFsRmllbGRzID0gb3JpZ2luYWxTdHJ1Y3QuZmllbGRzKCk7Cisg
ICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZvcmlnaW5hbFR5cGUgICAgICAgICAgPSAqb3JpZ2luYWxGaWVs
ZC0+dHlwZSgpOworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UgID0g
T3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBlKTsKKyAgICAg
ICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyA9IE92ZXJsYXkoY29uZmlnLmlu
aXRpYWxNYXRyaXhQYWNraW5nLCBvcmlnaW5hbFR5cGUpOworICAgICAgICBpZiAoIU1vZGlmeVJl
Y3Vyc2l2ZShzdGF0ZSwgKm9yaWdpbmFsRmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQorICAgICAg
ICB7CisgICAgICAgICAgICArK2lkZW50aWNhbEZpZWxkQ291bnQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0ZS5maW5hbGl6ZSgpOworCisgICAgaWYgKGlkZW50aWNhbEZpZWxkQ291bnQg
PT0gb3JpZ2luYWxGaWVsZHMuc2l6ZSgpICYmICFzdGF0ZS5oYXNQYWNraW5nKCkgJiYgIXN0YXRl
Lmhhc1BhZGRpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4Y2ZjNTUwNDY4
MjQzOGQyYWI3YjEyMzBhOTQ5YzY5OGZkYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Nb2RpZnlTdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1Rf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9E
SUZZU1RSVUNUX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9t
YXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIENvbnZlcnRUeXBl
Cit7CisgICAgT3JpZ2luYWxUb01vZGlmaWVkLAorICAgIE1vZGlmaWVkVG9PcmlnaW5hbCwKK307
CisKKy8vIENvbmZpZ3VyZXMgaG93IHN0cnVjdCBtb2RpZmljYXRpb24gaXMgcGVyZm9ybWVkLgor
Y2xhc3MgTW9kaWZ5U3RydWN0Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3QgUHJlZGlj
YXRlCisgICAgeworICAgICAgICB1c2luZyBGdW5jID0gYm9vbCAoKikoY29uc3QgVEZpZWxkICYp
OworICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgVHJ1ZShjb25zdCBURmllbGQgJikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2F0dXJhdGVWZWN0b3IKKyAgICB7CisgICAg
ICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKyAgICAgICAg
Ly8gSWYgb3JpZ2luYWwgZGltID49IHJldHVybiB2YWx1ZSwgdGhlIGZpZWxkIHJlbWFpbnMgdW50
b3VjaGVkLgorICAgICAgICB1c2luZyBGdW5jID0gaW50ICgqKShjb25zdCBURmllbGQgJik7Cisg
ICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJldHVybiAw
OyB9CisgICAgICAgIHN0YXRpYyBpbnQgRnVsbHlTYXR1cmF0ZShjb25zdCBURmllbGQgJikgeyBy
ZXR1cm4gNDsgfQorICAgIH07CisKKyAgcHVibGljOgorICAgIE1vZGlmeVN0cnVjdENvbmZpZyhD
b252ZXJ0VHlwZSBjb252ZXJ0VHlwZSwgYm9vbCBhbGxvd1BhY2tpbmcsIGJvb2wgYWxsb3dQYWRk
aW5nKQorICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNraW5nKGFs
bG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisgICAge30KKworICAgIC8v
IE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cgdmVjdG9y
cy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZGljYXRlOjpG
YWxzZTsKKworICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0aXBsZSBmaWVs
ZHMgb2YgZWxlbWVudCB0eXBlLgorICAgIFByZWRpY2F0ZTo6RnVuYyBpbmxpbmVBcnJheSA9IFBy
ZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUgdGhlaXIgc3ViZmll
bGRzIGlubGluZWQgZGlyZWN0bHkuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZVN0cnVjdCA9
IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZC4K
KyAgICBQcmVkaWNhdGU6OkZ1bmMgcmVjdXJzZVN0cnVjdCA9IFByZWRpY2F0ZTo6RmFsc2U7CisK
KyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQgdG8gdWlu
dCBmaWVsZHMuCisgICAgUHJlZGljYXRlOjpGdW5jIHByb21vdGVCb29sVG9VaW50ID0gUHJlZGlj
YXRlOjpGYWxzZTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIHNjYWxh
ciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKyAgICAvLyBlLmcuIGBm
bG9hdCAtPiBmbG9hdDRgLgorICAgIC8vIGUuZy4gYGZsb2F0MiAtPiBmbG9hdDRgLgorICAgIFNh
dHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rv
cjo6RG9udFNhdHVyYXRlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUgd2hlcmUg
c2NhbGFyIG9yIHZlY3RvciBhcnJheSBmaWVsZHMgYXJlIHNhdHVyYXRlZC4KKyAgICAvLyBlLmcu
IGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKyAgICAvLyBlLmcuIGBmbG9hdDJbMTBdIC0+IGZs
b2F0NFsxMF1gCisgICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJPclZlY3Rv
ckFycmF5cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBDcmVhdGVz
IGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBtYXRyaXggZmllbGRzIGFyZSByb3ctc2F0dXJhdGVkLgor
ICAgIC8vIGUuZy4gYGZsb2F0MngyIC0+IGZsb2F0Mng0YC4KKyAgICBTYXR1cmF0ZVZlY3Rvcjo6
RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOwor
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBpbml0aWFsQmxvY2tTdG9yYWdlICAgPSBrRGVmYXVs
dExheW91dEJsb2NrU3RvcmFnZTsKKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0
cml4UGFja2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKyAgICBDb252ZXJ0VHlw
ZSBjb252ZXJ0VHlwZTsKKyAgICBib29sIGFsbG93UGFja2luZzsKKyAgICBib29sIGFsbG93UGFk
ZGluZzsKKyAgICBBZGRyZXNzU3BhY2UgZXh0ZXJuYWxBZGRyZXNzU3BhY2U7Cit9OworCitzdHJ1
Y3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkKK3sKKyAgICBjb25zdCBUU3RydWN0dXJlICptb2Rp
ZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAgICBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0cjsK
KworICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKiZnZXRDb252ZXJ0ZXIoQ29udmVydFR5
cGUgY29udmVydFR5cGUpCisgICAgeworICAgICAgICBpZiAoY29udmVydFR5cGUgPT0gQ29udmVy
dFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKyAgICAgICAg
fQorICAgIH0KK307CisKKy8vIEluZGV4ZWQgYnkgdG9wb2xvZ2ljYWwgb3JkZXIuCitjbGFzcyBN
b2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCit7CisgIHB1YmxpYzoKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZhdChzaXplX3QgaW5k
ZXgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpmaW5kKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUg
JnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpOworCisgIHByaXZh
dGU6CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9kaWZpZWRT
dHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisgICAgc3RkOjp2ZWN0b3I8Y29u
c3QgVFN0cnVjdHVyZSAqPiBvcmRlcmluZzsKK307CisKKy8vIFJldHVybnMgdHJ1ZSBhbmQgYG91
dE1hY2hpbmVyeWAgcG9wdWxhdGVkIGlmIG1vZGlmaWNhdGlvbnMgd2VyZSBwZXJmb3JtZWQuCisv
LyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3Qo
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0
Q29uZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1hY2hpbmVyaWVzKTsKKworfSAgLy8gbmFt
ZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjNWQxODVlNmZhZDM3NTY5
ZWZjYmQ4NTVmMmFlNDAxZTY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgSW1tdXRhYmxlU3Ry
aW5nIEdldE5hbWUoVCBjb25zdCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3Quc3ltYm9sVHlw
ZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtFbXB0eUlt
bXV0YWJsZVN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC5uYW1lKCk7Cit9CisKK05h
bWU6Ok5hbWUoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBOYW1lKEdldE5hbWUoZmllbGQpLCBmaWVs
ZC5zeW1ib2xUeXBlKCkpIHt9CisKK05hbWU6Ok5hbWUoY29uc3QgVFN5bWJvbCAmc3ltYm9sKSA6
IE5hbWUoR2V0TmFtZShzeW1ib2wpLCBzeW1ib2wuc3ltYm9sVHlwZSgpKSB7fQorCitib29sIE5h
bWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1S
YXdOYW1lID09IG90aGVyLm1SYXdOYW1lICYmIG1TeW1ib2xUeXBlID09IG90aGVyLm1TeW1ib2xU
eXBlOworfQorCitib29sIE5hbWU6Om9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIE5hbWU6Om9wZXJh
dG9yPChjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobVJhd05hbWUgPCBvdGhl
ci5tUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
b3RoZXIubVJhd05hbWUgPCBtUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIG1TeW1ib2xUeXBlIDwgb3RoZXIubVN5bWJvbFR5cGU7Cit9CisK
K2Jvb2wgTmFtZTo6ZW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtU3ltYm9sVHlwZSA9PSBT
eW1ib2xUeXBlOjpFbXB0eTsKK30KKworYm9vbCBOYW1lOjpiZWdpbnNXaXRoKGNvbnN0IE5hbWUg
JnByZWZpeCkgY29uc3QKK3sKKyAgICBpZiAobVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1TeW1ib2xU
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gbVJh
d05hbWUuYmVnaW5zV2l0aChwcmVmaXgubVJhd05hbWUpOworfQorCit2b2lkIE5hbWU6OmVtaXQo
VEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCisg
ICAgeworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgIGNhc2UgU3lt
Ym9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5
KCkpOworICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgQVNT
RVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZS5iZWdpbnNX
aXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICht
UmF3TmFtZVswXSAhPSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGtBbmdsZUludGVybmFsUHJlZml4IDw8ICdfJyA8PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
a0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorICAgICAgICAg
ICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKKy8vIE5PVEU6IFRoaXMgbWF0Y2hl
cyBtb3JlIHRoaW5ncyB0aGFuIEZpbmRTeW1ib2xOb2RlLgorY2xhc3MgRXhwcmVzc2lvbkNvbnRh
aW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICAgIE5hbWUgbU5h
bWU7CisgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisKKyAgcHVibGljOgorICAgIEV4cHJl
c3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisgICAgICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtTmFtZShuYW1lKQorICAgIHt9CisK
KyAgICBib29sIGZvdW5kTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZE5hbWU7IH0KKworICAg
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChOYW1lKG5vZGUtPnZhcmlhYmxlKCkpID09IG1OYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRm91bmROYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqKSBvdmVycmlkZSB7IHJldHVy
biAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAg
IGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlk
ZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5h
bWU7IH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1
Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAg
ICAgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1
Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSAmJiBO
YW1lKCpzdHJ1Y3R1cmUpID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+
Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09IG1O
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAhbUZvdW5kTmFtZTsKKyAg
ICB9CisKKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0IHZpc2l0LCBUSW50ZXJtSWZFbHNlICpu
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1T
d2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1D
YXNlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKFRJ
bnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZSB7IExPR0lDX0VSUk9SKCk7IH0KKwor
ICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJ
bnRlcm1CbG9jayAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZp
ZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICop
IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJt
RGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0
LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdFByZXByb2Nl
c3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJyaWRlIHsg
TE9HSUNfRVJST1IoKTsgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29s
IHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRlcm1UeXBl
ZCAmbm9kZSkKK3sKKyAgICBFeHByZXNzaW9uQ29udGFpbnNOYW1lVmlzaXRvciB2aXNpdG9yKG5h
bWUpOworICAgIG5vZGUudHJhdmVyc2UoJnZpc2l0b3IpOworICAgIHJldHVybiB2aXNpdG9yLmZv
dW5kTmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlYWVhOGI0N2JhZjk0MjFlZDU0MDczMDExZjljYjVi
NTA4NTA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKQEAgLTAsMCAr
MSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9OQU1FX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2lu
ay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNoYXIga0Fu
Z2xlSW50ZXJuYWxQcmVmaXhbXSA9ICJBTkdMRSI7CisKKy8vIFJlcHJlc2VudHMgdGhlIG5hbWUg
b2YgYSBzeW1ib2wuCitjbGFzcyBOYW1lCit7CisgIHB1YmxpYzoKKyAgICBjb25zdGV4cHIgTmFt
ZShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0ZXhwciBOYW1lKCkgOiBOYW1l
KGtFbXB0eUltbXV0YWJsZVN0cmluZywgU3ltYm9sVHlwZTo6RW1wdHkpIHt9CisKKyAgICBleHBs
aWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9sVHlwZSBz
eW1ib2xUeXBlKQorICAgICAgICA6IG1SYXdOYW1lKHJhd05hbWUpLCBtU3ltYm9sVHlwZShzeW1i
b2xUeXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAoc3ltYm9s
VHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworICAgIH0KKworICAgIGV4cGxpY2l0IGNvbnN0
ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisgICAgICAgIDogTmFtZShJbW11dGFibGVTdHJpbmco
cmF3TmFtZSksIHN5bWJvbFR5cGUpCisgICAge30KKworICAgIGV4cGxpY2l0IE5hbWUoY29uc3Qg
c3RkOjpzdHJpbmcgJnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAgICAgOiBO
YW1lKEltbXV0YWJsZVN0cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQorCisgICAg
ZXhwbGljaXQgTmFtZShjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBleHBsaWNpdCBOYW1lKGNv
bnN0IFRTeW1ib2wgJnN5bWJvbCk7CisKKyAgICBOYW1lICZvcGVyYXRvcj0oY29uc3QgTmFtZSAm
KSA9IGRlZmF1bHQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKworICAgIGNvbnN0ZXhwciBj
b25zdCBJbW11dGFibGVTdHJpbmcgJnJhd05hbWUoKSBjb25zdCB7IHJldHVybiBtUmF3TmFtZTsg
fQorICAgIGNvbnN0ZXhwciBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdCB7IHJldHVybiBt
U3ltYm9sVHlwZTsgfQorCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworICAgIGJvb2wgYmVnaW5z
V2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0OworCisgICAgdm9pZCBlbWl0KFRJbmZvU2lu
a0Jhc2UgJm91dCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHJpbmcgbVJh
d05hbWU7CisgICAgU3ltYm9sVHlwZSBtU3ltYm9sVHlwZTsKK307CisKK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRlcm1U
eXBlZCAmbm9kZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9QaXBlbGluZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU0YzM3OGExYzk1MDU5ZmQyYjY5NjhlYTYwNDQ3OGJiOWY0OGM4N2YKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsNDc2IEBACisv
LworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0J1aWx0SW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAodmFyaWFu
dCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorCitib29sIFBpcGVs
aW5lOjp1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAoreworICAgIGlmICh2YXIuc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7CisgICAgICAg
IHJldHVybiAmdmFyID09IGdsb2JhbEluc3RhbmNlVmFyOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZub2RlVHlwZSAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICBjb25zdCBUUXVhbGlmaWVy
IHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIHN3aXRj
aCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
VmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHN3aXRj
aCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxVmVydGV4T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
UG9zaXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0T3V0Ogor
ICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorICAgICAgICAgICAgICAgIGNh
c2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxVmFyeWluZ091dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKyAgICAg
ICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cUZsYXRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cVNtb290aEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRJ
bjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3RpdmVJbjoK
KyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZhcnlpbmdJbjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdtZW50
T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9yOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0RhdGE6CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJV
bmlmb3JtczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFHbG9i
YWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAg
ICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZy
YWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Nvb3JkOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKyAgICAgICAgICAg
ICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5nOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUeXBlOjpB
bmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIGdsb2JhbEluc3Rh
bmNlVmFyIHNob3VsZCBiZSBub24tbnVsbCBhbmQgdGh1cyBuZXZlciByZWFjaCBoZXJlLgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAg
ICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkpOworCisg
ICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIHJldHVybiBOYW1lKHZh
cikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworICAgIH0KK30K
KworTmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25z
dAoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05B
TUUodmFyaWFudCwgIlZlcnRleEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJWZXJ0ZXhPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
OkZyYWdtZW50SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJG
cmFnbWVudEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFn
bWVudE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkZyYWdt
ZW50T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5p
Zm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJVc2VyVW5p
Zm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5p
Zm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJBbmdsZVVu
aWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25z
dGFudEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJO
b25Db25zdEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFN
RSh2YXJpYW50LCAiSW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAg
ICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uRnJhZ21lbnRHbG9i
YWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgor
ICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVGV4dHVyZUVudnMiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisgICAg
ICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnN0YW5jZUlkIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5hbWUobmFtZSk7Cit9CisKK05hbWUg
UGlwZWxpbmU6OmdldFN0cnVjdEluc3RhbmNlTmFtZShWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7
CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2
YXJpYW50LCAidmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
InZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RnJh
Z21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImZyYWdt
ZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiZnJhZ21lbnRP
dXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3Jt
czoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInVzZXJVbmlmb3Jt
cyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3Jt
czoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImFuZ2xlVW5pZm9y
bXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50
R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIm5vbkNv
bnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52
b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJpbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAg
IG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImludm9jYXRpb25GcmFnbWVudEdsb2JhbHMi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisgICAg
ICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ0ZXh0dXJlRW52cyIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAg
ICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImluc3RhbmNlSWQiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKworc3RhdGljIGJv
b2wgQWxsb3dQYWNraW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlwZSA9
IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAg
ICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlw
ZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0
ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6
CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5j
ZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wg
QWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlwZSA9IFBp
cGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAg
IGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAg
IGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6
SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KK2VudW0gQ29tcGFyZQorewor
ICAgIExULAorICAgIExURSwKKyAgICBFUSwKKyAgICBHVEUsCisgICAgR1QsCit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIENvbXBhcmVCeShDb21wYXJlIG9wLCBjb25z
dCBUICZ4LCBjb25zdCBUICZ5KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIExUOgorICAgICAgICAgICAgcmV0dXJuIHggPCB5OworICAgICAgICBjYXNlIExURToKKyAg
ICAgICAgICAgIHJldHVybiB4IDw9IHk7CisgICAgICAgIGNhc2UgRVE6CisgICAgICAgICAgICBy
ZXR1cm4geCA9PSB5OworICAgICAgICBjYXNlIEdURToKKyAgICAgICAgICAgIHJldHVybiB4ID49
IHk7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICByZXR1cm4geCA+IHk7CisgICAgfQor
fQorCit0ZW1wbGF0ZSA8VEJhc2ljVHlwZSBCVCwgQ29tcGFyZSBDbXAsIGludCBNYXRjaERpbSwg
aW50IE5ld0RpbT4KK3N0YXRpYyBpbnQgU2F0dXJhdGVWZWN0b3JPZihjb25zdCBURmllbGQgJmZp
ZWxkKQoreworICAgIHN0YXRpY19hc3NlcnQoTmV3RGltID49IE1hdGNoRGltLCAiIik7CisKKyAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNT
Y2FsYXIoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworCisgICAgY29uc3QgYm9vbCBjb25kID0gdHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICBDb21wYXJlQnkoQ21wLCB0eXBlLmdldE5vbWluYWxTaXplKCksIE1hdGNoRGlt
KTsKKworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5ld0RpbTsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK01vZGlmeVN0cnVjdENvbmZpZyBQaXBlbGluZTo6ZXh0ZXJu
YWxTdHJ1Y3RNb2RpZnlDb25maWcoKSBjb25zdAoreworICAgIHVzaW5nIFByZWQgICA9IE1vZGlm
eVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworICAgIHVzaW5nIFNhdFZlYyA9IE1vZGlmeVN0cnVj
dENvbmZpZzo6U2F0dXJhdGVWZWN0b3I7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgY29uZmln
KAorICAgICAgICBpc1BpcGVsaW5lT3V0KCkgPyBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlm
aWVkIDogQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9PcmlnaW5hbCwKKyAgICAgICAgQWxsb3dQYWNr
aW5nKHR5cGUpLCBBbGxvd1BhZGRpbmcodHlwZSkpOworCisgICAgY29uZmlnLmV4dGVybmFsQWRk
cmVzc1NwYWNlID0gZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKworICAgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBjb25maWcu
aW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zcGxp
dE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLmlubGluZVN0
cnVjdCAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAg
ICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9
IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21l
bnRJbjoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVl
OworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAg
ICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmll
bGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNp
Y1R5cGU6OkVidEludCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidFVJbnQsIExU
LCA0LCA0PihmaWVsZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludCBzID0g
U2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZpZWxkKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAg
ICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJlZDo6VHJ1
ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZU1hdHJpeFJvd3MgICAgICAgICAgID0gU2F0
VmVjOjpGdWxseVNhdHVyYXRlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JW
ZWN0b3JBcnJheXMgPSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBjb25maWcu
cmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICBj
b25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDQz
MDsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBjb25maWc7Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmFsd2F5c1JlcXVpcmVz
TG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5
cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorICAgICAg
ICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21l
bnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Oklu
dm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitib29sIFBpcGVsaW5lOjppc1BpcGVsaW5lT3V0KCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAg
ICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1z
OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6
Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhH
bG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4
T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfQorCitBZGRyZXNzU3BhY2UgUGlwZWxpbmU6OmV4dGVybmFsQWRkcmVz
c1NwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNl
IFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9j
YXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBl
OjpJbnN0YW5jZUlkOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OlRo
cmVhZDsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAgY2FzZSBU
eXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFjZTo6Q29u
c3RhbnQ7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lU3RydWN0czo6bWF0Y2hlcyhjb25zdCBU
U3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdAoreworICAg
IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBzW10gPSB7CisgICAgICAgIGZyYWdtZW50SW4s
CisgICAgICAgIGZyYWdtZW50T3V0LAorICAgICAgICB2ZXJ0ZXhJbiwKKyAgICAgICAgdmVydGV4
T3V0LAorICAgICAgICB1c2VyVW5pZm9ybXMsCisgICAgICAgIGFuZ2xlVW5pZm9ybXMsCisgICAg
ICAgIG5vbkNvbnN0YW50R2xvYmFscywKKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMs
CisgICAgICAgIGludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsCisgICAgICAgIHRleHR1cmUsCisg
ICAgICAgIGluc3RhbmNlSWQsCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiBwcykK
KyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbCAmJiBwLmludGVybmFsID09ICZzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0
ZXJuYWwgJiYgcC5leHRlcm5hbCA9PSAmcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YmY0NzZhZGZkNjQ2MGIwZDllZmM2YWIxZDBmMzc5ZDNmMTNiMTc1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfUElQRUxJTkVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfUElQRUxJTkVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTW9kaWZ5U3RydWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8g
RGF0YSB0aGF0IGlzIHNjb3BlZCBhcyBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIGZvciBhIGdp
dmVuIHBpcGVsaW5lLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUGlwZWxpbmVTY29w
ZWQKK3sKKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVybmFsbHkg
dG8gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGludGVybmFsYCwgYnV0
IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgaW50ZXJuYWxgLgorICAgIGNvbnN0IFQgKmV4dGVybmFs
ID0gbnVsbHB0cjsKKworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRhbGsgaW50
ZXJuYWxseSB3aXRoaW4gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGV4
dGVybmFsYCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgZXh0ZXJuYWxgLgorICAgIGNvbnN0
IFQgKmludGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGlu
cHV0IGNvaW5jaWRlcyB3aXRoIGVpdGhlciBgZXh0ZXJuYWxgIG9yIGBpbnRlcm5hbGAgZGF0YS4K
KyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJldHVybiBleHRlcm5h
bCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKworICAgIC8vIEJvdGggYGV4
dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG5vbi1udWxsLgorICAg
IGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsICYmIGludGVybmFs
OyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgcmVwcmVzZW50YXRp
b25zIGFyZSBudWxsLgorICAgIGJvb2wgaXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiAh
ZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBp
bnRlcm5hbGAgcmVwcmVzZW50YXRpb25zIGFyZSB0aGUgc2FtZS4KKyAgICBib29sIGlzVW5pZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVybmFsOyB9Cit9OworCisvLyBSZXBy
ZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVsaW5lLgorY2xhc3MgUGlwZWxpbmUKK3sK
KyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZQorICAgIHsKKyAgICAgICAgVmVydGV4SW4s
CisgICAgICAgIFZlcnRleE91dCwKKyAgICAgICAgRnJhZ21lbnRJbiwKKyAgICAgICAgRnJhZ21l
bnRPdXQsCisgICAgICAgIFVzZXJVbmlmb3JtcywKKyAgICAgICAgQW5nbGVVbmlmb3JtcywKKyAg
ICAgICAgTm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uVmVydGV4R2xvYmFs
cywKKyAgICAgICAgSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgVGV4dHVyZSwK
KyAgICAgICAgSW5zdGFuY2VJZCwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBWYXJpYW50Cisg
ICAgeworICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisgICAgICAg
IC8vIEZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHBpcGVsaW5lIGRvZXMgbm90IHJlcXVp
cmUgc3BsaXR0aW5nIG9yIHNhdHVyYXRpb24uCisgICAgICAgIE9yaWdpbmFsLAorCisgICAgICAg
IC8vIE9ubHkgZm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgdGhlIHBpcGVsaW5lIHdhcyBz
cGxpdCBvciBzYXR1cmF0ZWQuCisgICAgICAgIE1vZGlmaWVkLAorICAgIH07CisKKyAgcHVibGlj
OgorICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKyAgICBUeXBlIHR5cGU7CisKKyAg
ICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUgc3RydWN0
IGFscmVhZHkgZXhpc3RzLgorICAgIC8vIElmIG5vbi1udWxsIHN0cnVjdCBzcGxpdHRpbmcgc2hv
dWxkIG5vdCBiZSBuZWVkZWQuCisgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZh
cjsKKworICBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdmFyaWFibGUgYmVs
b25ncyB0byB0aGUgcGlwZWxpbmUuCisgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFy
KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgdHlwZSB0
aGF0IHN0b3JlcyB2YXJpYWJsZXMgb2YgdGhpcyBwaXBlbGluZS4KKyAgICBOYW1lIGdldFN0cnVj
dFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBu
YW1lIGZvciB0aGUgc3RydWN0IGluc3RhbmNlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlz
IHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFu
dCkgY29uc3Q7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlD
b25maWcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGlwZWxpbmUgYWx3
YXlzIHJlcXVpcmVzIGEgbm9uLXBhcmFtZXRlciBsb2NhbCBpbnN0YW5jZSBkZWNsYXJhdGlvbiBv
ZgorICAgIC8vIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorICAgIGJvb2wgYWx3YXlzUmVxdWly
ZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdDsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZmYgdGhlIHBpcGVsaW5lIGlzIGFuIG91dHB1dCBwaXBlbGluZS4gVGhlIGV4dGVy
bmFsIHBpcGVsaW5lIHN0cnVjdHVyZSBzaG91bGQKKyAgICAvLyBiZSByZXR1cm5lZCBmcm9tIGBt
YWluYC4KKyAgICBib29sIGlzUGlwZWxpbmVPdXQoKSBjb25zdDsKKworICAgIEFkZHJlc3NTcGFj
ZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0OworfTsKKworLy8gQSBjb2xsZWN0aW9uIG9m
IHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4KK3N0cnVjdCBQaXBlbGluZVN0cnVjdHMgOiBh
bmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFn
bWVudEluOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGZyYWdtZW50T3V0OworICAg
IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleEluOworICAgIFBpcGVsaW5lU2NvcGVk
PFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB1
c2VyVW5pZm9ybXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gYW5nbGVVbmlmb3Jt
czsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7Cisg
ICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvblZlcnRleEdsb2JhbHM7Cisg
ICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczsK
KyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworICAgIFBpcGVsaW5lU2Nv
cGVkPFRTdHJ1Y3R1cmU+IGluc3RhbmNlSWQ7CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0
cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7Cit9OworCit9
ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9QSVBFTElORV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1By
b2dyYW1QcmVsdWRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGJmNWEwMmZlMGRiMGJlZDNkMmFhM2M5NTVjYzk5OTI3NTNiN2M4MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKQEAgLTAsMCArMSwzNzU3
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNw
YWNlCit7CisKK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
K3sKKyAgICB1c2luZyBMaW5lVGFnICAgICAgID0gdW5zaWduZWQ7CisgICAgdXNpbmcgRnVuY0Vt
aXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlvbiAmKTsK
KyAgICB1c2luZyBGdW5jVG9FbWl0dGVyID0gc3RkOjptYXA8TmFtZSwgRnVuY0VtaXR0ZXI+Owor
CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtUHJlbHVkZShUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0
IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0
cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0KG91dCkKKyAgICB7CisgICAgICAgIEFMV0FZU19JTkxJ
TkUoKTsKKworICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorICAgICAgICB7CisgICAgICAg
ICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgZXF1YWxNYXRyaXgoKTsKKyAgICAgICAg
fQorCisjaWYgMQorICAgICAgICBtT3V0IDw8ICIjZGVmaW5lIEFOR0xFX3RlbnNvciBtZXRhbDo6
YXJyYXlcbiI7CisjZWxzZQorICAgICAgICB0ZW5zb3IoKTsKKyNlbmRpZgorICAgIH0KKworICBw
cml2YXRlOgorICAgIGJvb2wgZW1pdEd1YXJkKExpbmVUYWcgbGluZVRhZykKKyAgICB7CisgICAg
ICAgIGlmIChtRW1pdHRlZC5maW5kKGxpbmVUYWcpICE9IG1FbWl0dGVkLmVuZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbUVtaXR0
ZWQuaW5zZXJ0KGxpbmVUYWcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgRnVuY1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKworICAgIHZvaWQgdmlz
aXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5
cGUwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEgPSBudWxs
cHRyKTsKKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5
cGUgJnR5cGUpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUgJnZhcik7
CisgICAgdm9pZCB2aXNpdFN0cnVjdHVyZShjb25zdCBUU3RydWN0dXJlICZzKTsKKworICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRlOworICAg
IGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBvdmVy
cmlkZTsKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlv
biAqbm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpu
b2RlKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHZvaWQgQUxXQVlTX0lOTElORSgpOwor
CisgICAgdm9pZCBpbmNsdWRlX21ldGFsX2F0b21pYygpOworICAgIHZvaWQgaW5jbHVkZV9tZXRh
bF9jb21tb24oKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisgICAgdm9p
ZCBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgdm9pZCBpbmNsdWRlX21ldGFsX21hdGgo
KTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgdm9pZCBpbmNsdWRlX21l
dGFsX3BhY2soKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgpOworCisgICAg
dm9pZCBlbmFibGVfaWYoKTsKKyAgICB2b2lkIHNjYWxhcl9vZigpOworICAgIHZvaWQgaXNfc2Nh
bGFyKCk7CisgICAgdm9pZCBpc192ZWN0b3IoKTsKKyAgICB2b2lkIGlzX21hdHJpeCgpOworICAg
IHZvaWQgYWRkcmVzc29mKCk7CisgICAgdm9pZCBkaXN0YW5jZSgpOworICAgIHZvaWQgbGVuZ3Ro
KCk7CisgICAgdm9pZCBkb3QoKTsKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIHZvaWQgZmFj
ZWZvcndhcmQoKTsKKyAgICB2b2lkIHJlZmxlY3QoKTsKKyAgICB2b2lkIHJlZnJhY3QoKTsKKyAg
ICB2b2lkIGRlZ3JlZXMoKTsKKyAgICB2b2lkIHJhZGlhbnMoKTsKKyAgICB2b2lkIG1vZCgpOwor
ICAgIHZvaWQgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgcHJlSW5jcmVtZW50TWF0
cml4KCk7CisgICAgdm9pZCBwb3N0RGVjcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBwcmVEZWNy
ZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworICAgIHZvaWQgbWF0bXVs
QXNzaWduKCk7CisgICAgdm9pZCBhdGFuKCk7CisgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3Np
Z24oKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpOworICAgIHZvaWQgYWRkTWF0
cml4U2NhbGFyKCk7CisgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lkIGRpdk1h
dHJpeFNjYWxhcigpOworICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyRmFzdCgpOworICAgIHZvaWQg
ZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJBc3NpZ25G
YXN0KCk7CisgICAgdm9pZCB0ZW5zb3IoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUo
KTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24oKTsKKyAgICB2b2lkIGNvbXBv
bmVudFdpc2VNdWx0aXBseSgpOworICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisgICAgdm9pZCBp
bnZlcnNlMigpOworICAgIHZvaWQgaW52ZXJzZTMoKTsKKyAgICB2b2lkIGludmVyc2U0KCk7Cisg
ICAgdm9pZCBlcXVhbFZlY3RvcigpOworICAgIHZvaWQgZXF1YWxNYXRyaXgoKTsKKyAgICB2b2lk
IG5vdEVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBub3RFcXVhbFN0cnVjdCgpOworICAgIHZvaWQg
ZXF1YWxBcnJheSgpOworICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworICAgIHZvaWQgc2lnbigp
OworICAgIHZvaWQgcGFja19oYWxmXzJ4MTYoKTsKKyAgICB2b2lkIHVucGFja19oYWxmXzJ4MTYo
KTsKKyAgICB2b2lkIHZlY3RvckVsZW1SZWYoKTsKKyAgICB2b2lkIHN3aXp6bGVSZWYoKTsKKyAg
ICB2b2lkIG91dCgpOworICAgIHZvaWQgaW5vdXQoKTsKKyAgICB2b2lkIGZsYXR0ZW5BcnJheSgp
OworICAgIHZvaWQgY2FzdFZlY3RvcigpOworICAgIHZvaWQgY2FzdE1hdHJpeCgpOworICAgIHZv
aWQgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAgICB2b2lkIGdyYWRpZW50KCk7CisgICAgdm9pZCB0
ZXh0dXJlRW52KCk7CisgICAgdm9pZCB0ZXhlbEZldGNoKCk7CisgICAgdm9pZCB0ZXhlbEZldGNo
T2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7CisgICAg
dm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAg
dm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2Rl
cHRoMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0
NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAgdm9p
ZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4
dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0M19mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsK
KyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgdm9p
ZCB0ZXh0dXJlMURMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUxRFByb2ooKTsKKyAgICB2b2lkIHRl
eHR1cmUxRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRCgpOworICAgIHZvaWQgdGV4dHVy
ZTJETG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQ
cm9qTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlM0RMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUzRFBy
b2ooKTsKKyAgICB2b2lkIHRleHR1cmUzRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmVDdWJl
KCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUN1YmVQcm9q
KCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFk
KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7
CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAg
dm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9p
ZCB0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2
b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworICAgIHZv
aWQgdGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAgICB2
b2lkIHRleHR1cmVHcmFkT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9nZW5l
cmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zm
c2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQgdGV4dHVy
ZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9p
ZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zs
b2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0
X2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVy
ZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUxvZCgp
OworICAgIHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgIHZvaWQgdGV4dHVy
ZUxvZF9nZW5lcmljX2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF9kZXB0aDJkX2Zsb2F0
MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKyAgICB2
b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisgICAgdm9pZCB0ZXh0dXJl
TG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJl
UHJvaigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJv
akdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4dHVyZVBy
b2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRleHR1cmVQ
cm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJl
UHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5l
cmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19m
bG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxvZF9nZW5l
cmljX2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9hdDQoKTsK
KyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvak9mZnNldCgpOworICAg
IHZvaWQgdGV4dHVyZVNpemUoKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1P
dXQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PExpbmVUYWc+IG1FbWl0dGVkOworICAgIHN0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBUU3ltYm9sICo+IG1IYW5kbGVkOworICAgIGNvbnN0IEZ1bmNU
b0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKK307CisKK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2Rl
ZmluZSBQUk9HUkFNX1BSRUxVREVfSU5DTFVERShoZWFkZXIpICAgICAgICAgICAgIFwKKyAgICB2
b2lkIFByb2dyYW1QcmVsdWRlOjppbmNsdWRlXyMjaGVhZGVyKCkgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoZW1pdEd1YXJkKF9fTElORV9fKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBt
T3V0IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUg
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmFtZSwgY29kZSwgLi4uKSAgICAgICAgICAgICAgICBc
CisgICAgdm9pZCBQcm9ncmFtUHJlbHVkZTo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQVNTRVJUKGNvZGVbMF0gPT0gJ1xuJyk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbWl0R3VhcmQoX19M
SU5FX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIF9fVkFfQVJHU19fOyAvKiBkZXBlbmRlbmNpZXMgKi8gICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBtT3V0IDw8IChzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+KGNvZGUg
IlxuIikgKyAxKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2F0b21pYykKK1BST0dSQU1fUFJFTFVE
RV9JTkNMVURFKG1ldGFsX2NvbW1vbikKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dl
b21ldHJpYykKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dyYXBoaWNzKQorUFJPR1JB
TV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1l
dGFsX21hdHJpeCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3BhY2spCitQUk9HUkFN
X1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShBTFdBWVNfSU5MSU5FLCBSIigKKyNkZWZp
bmUgQU5HTEVfQUxXQVlTX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyki
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlbmFibGVfaWYsIFIiKAordGVtcGxhdGUgPGJv
b2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmIHt9OwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+Cit7Cisg
ICAgdXNpbmcgdHlwZSA9IFQ7Cit9OwordGVtcGxhdGUgPGJvb2wgQj4KK3VzaW5nIEFOR0xFX2Vu
YWJsZV9pZl90ID0gdHlwZW5hbWUgQU5HTEVfZW5hYmxlX2lmPEI+Ojp0eXBlOworKSIpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHNjYWxhcl9vZiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0cnVjdCBBTkdMRV9zY2FsYXJfb2YKK3sKKyAgICB1c2luZyB0eXBlID0gVDsKK307Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUg
QU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGlzX3NjYWxhciwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19z
Y2FsYXIge307CisjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3NjYWxhcjxzY2FsYXI+IHsgZW51bSB7IHZhbHVlID0g
dHJ1ZSB9OyB9CitBTkdMRV9ERUZJTkVfU0NBTEFSKGJvb2wpOworQU5HTEVfREVGSU5FX1NDQUxB
UihjaGFyKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoc2hvcnQpOworQU5HTEVfREVGSU5FX1NDQUxB
UihpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIo
dWNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUih1c2hvcnQpOworQU5HTEVfREVGSU5FX1NDQUxB
Uih1aW50KTsKK0FOR0xFX0RFRklORV9TQ0FMQVIodWxvbmcpOworQU5HTEVfREVGSU5FX1NDQUxB
UihoYWxmKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKSIpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCit7CisgICAgZW51bSB7
IHZhbHVlID0gZmFsc2UgfTsKK307CisjZGVmaW5lIEFOR0xFX0RFRklORV9WRUNUT1Ioc2NhbGFy
KSBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFy
ICMjIDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZhbHVlID0g
dHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRh
bDo6c2NhbGFyICMjIDQ+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxh
dGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDI+IHsgdXNpbmcg
dHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJf
b2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgND4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9CitBTkdMRV9ERUZJTkVfVkVDVE9SKGJvb2wpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihjaGFyKTsKK0FOR0xFX0RFRklORV9WRUNUT1Ioc2hvcnQpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihsb25nKTsKK0FOR0xFX0RF
RklORV9WRUNUT1IodWNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1c2hvcnQpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUih1aW50KTsKK0FOR0xFX0RFRklORV9WRUNUT1IodWxvbmcpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihoYWxmKTsKK0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOworKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoaXNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19tYXRyaXgKK3sKKyAgICBlbnVtIHsgdmFsdWUg
PSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX01BVFJJWChzY2FsYXIpIFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngy
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBB
TkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAyeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1
ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6
c2NhbGFyICMjIDJ4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19t
YXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBc
CisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMj
IDN4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9
IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0
YWw6OnNjYWxhciAjIyA0eDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDR4ND4geyBl
bnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgMngzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IHVzaW5nIHR5cGUgPSBz
Y2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7IHVzaW5n
IHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFy
X29mPG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgy
PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5H
TEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7
IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2Fs
YXIgIyMgNHg0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9NQVRSSVgo
aGFsZik7CitBTkdMRV9ERUZJTkVfTUFUUklYKGZsb2F0KTsKKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2NhbGFyX29mKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGFkZHJlc3Nv
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBUICogQU5HTEVfYWRkcmVzc29mKHRocmVhZCBUICZy
ZWYpCit7CisgICAgcmV0dXJuICZyZWY7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUoZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2lt
cGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxU
PiBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0YW5jZSh4
LCB5KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZGlz
dGFuY2VfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46OnZhbHVl
Pj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisg
ICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmFicyh4IC0geSk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxU
PiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gQU5HTEVfZGlzdGFuY2Vf
aW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl
X21ldGFsX21hdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0
IEFOR0xFX2xlbmd0aF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgQU5H
TEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6
Omxlbmd0aCh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5H
TEVfbGVuZ3RoX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2
YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5H
TEVfbGVuZ3RoKFQgeCkKK3sKKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46OmV4ZWMo
eCk7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21l
dHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoZG90LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1wbAorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV4ZWMo
VCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRvdCh4LCB5KTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5H
TEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGlj
IEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHggKiB5OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5HTEVfZG90KFQgeCwgVCB5KQoreworICAg
IHJldHVybiBBTkdMRV9kb3RfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxh
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm9ybWFs
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1wbAorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAg
ICByZXR1cm4gbWV0YWw6Om5vcm1hbGl6ZSh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8
QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9zaWduKHgpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9ub3JtYWxpemUoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9ub3JtYWxpemVfaW1wbDxU
Pjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0
YWxfY29tbW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21l
dHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Zl
Y3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZhY2Vmb3J3
YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9pbXBsCit7
CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBUIG5yZWYp
CisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmZhY2Vmb3J3YXJkKG4sIGksIG5yZWYpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2Fy
ZF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6dmFsdWU+Pgor
eworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIG4sIFQgaSwgVCBucmVm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDog
LW47CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBUIEFOR0xFX2ZhY2Vmb3J3YXJkKFQgbiwgVCBpLCBUIG5yZWYpCit7CisgICAgcmV0dXJuIEFO
R0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7Cit9OworKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19z
Y2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICBkb3Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmbGVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+
CitzdHJ1Y3QgQU5HTEVfcmVmbGVjdF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgVCBleGVjKFQgaSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZs
ZWN0KGksIG4pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2
YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBu
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgLSBUKDIpICogQU5HTEVfZG90KG4sIGkpICogbjsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQg
QU5HTEVfcmVmbGVjdChUIGksIFQgbikKK3sKKyAgICByZXR1cm4gQU5HTEVfcmVmbGVjdF9pbXBs
PFQ+OjpleGVjKGksIG4pOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHJlZnJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3JlZnJhY3RfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIGksIFQgbiwgQU5H
TEVfc2NhbGFyX29mX3Q8VD4gZXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZy
YWN0KGksIG4sIGV0YSk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0
IEFOR0xFX3JlZnJhY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8
VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBp
LCBUIG4sIFQgZXRhKQorICAgIHsKKyAgICAgICAgYXV0byBkb3ROSSA9IG4gKiBpOworICAgICAg
ICBhdXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKyAg
ICAgICAgaWYgKGsgPCBUKDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVCgwKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
dGEgKiBpIC0gKGV0YSAqIGRvdE5JICsgbWV0YWw6OnNxcnQoaykpICogbjsKKyAgICAgICAgfQor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCit7CisgICAg
cmV0dXJuIEFOR0xFX3JlZnJhY3RfaW1wbDxUPjo6ZXhlYyhpLCBuLCBldGEpOworfTsKKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfbWF0cml4KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNpZ24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbAoreworICAgIHN0YXRpYyBB
TkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4gbWV0
YWw6OnNpZ24oeCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfc2lnbl9p
bXBsPGludD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBpbnQgZXhlYyhpbnQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKyAgICB9Cit9Owor
dGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbDxtZXRhbDo6dmVjPGludCwg
Tj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+
IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisgICAgeworICAgICAgICBtZXRhbDo6dmVjPGlu
dCwgTj4gczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNbaV0gPSBBTkdMRV9zaWduX2ltcGw8aW50Pjo6ZXhlYyh4W2ldKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfc2lnbihUIHgpCit7CisgICAgcmV0dXJu
IEFOR0xFX3NpZ25faW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGF0YW4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCit7CisgICAgcmV0
dXJuIG1ldGFsOjphdGFuKHlPdmVyWCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgVCBBTkdMRV9hdGFuKFQgeSwgVCB4KQoreworICAgIHJldHVybiBtZXRh
bDo6YXRhbjIoeSwgeCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVf
bWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2RlZ3JlZXMo
VCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPig1Ny4yOTU3Nzk1MTMwODIzMikgKiB4
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJhZGlhbnMsIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfcmFkaWFucyhUIHgp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUtMikgKiB4
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG1vZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIFggQU5HTEVfbW9kKFggeCwgWSB5KQoreworICAgIHJldHVybiB4IC0geSAq
IG1ldGFsOjpmbG9vcih4IC8geSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwYWNrX2hhbGZf
MngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVfQUxXQVlTX0lOTElORSB1
aW50IEFOR0xFX3BhY2tfaGFsZl8yeDE2KGZsb2F0MiB2KQoreworICAgIHJldHVybiBhc190eXBl
PHVpbnQ+KGhhbGYyKHYpKTsKK30KKykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHVu
cGFja19oYWxmXzJ4MTYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK0FOR0xFX0FMV0FZ
U19JTkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQoreworICAgIHJl
dHVybiBmbG9hdDIoYXNfdHlwZTxoYWxmMj4oeCkpOworfQorKSIsICkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQg
Tj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJm9w
ZXJhdG9yKj0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJmEsIG1ldGFsOjptYXRyaXg8
VCwgTiwgTj4gYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CispIikKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93
cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVy
YXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQpCit7Cisg
ICAgYXV0byBiID0gYTsKKyAgICBhICs9IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVy
YXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQoreworICAgIGEg
Kz0gVCgxKTsKKyAgICByZXR1cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBvc3RE
ZWNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFs
OjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiAmYSwgaW50KQoreworICAgIGF1dG8gYiA9IGE7CisgICAgYSAtPSBUKDEp
OworICAgIHJldHVybiBiOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRy
aXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocHJlRGVjcmVtZW50
TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6
Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiAmYSkKK3sKKyAgICBhIC09IFQoMSk7CisgICAgcmV0dXJuIGE7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShuZWdhdGVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItKG1l
dGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSkKK3sKKyAgICBmb3IgKHNpemVfdCBjb2wgPSAw
OyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIHRocmVhZCBhdXRvICZtQ29sID0g
bVtjb2xdOworICAgICAgICBtQ29sID0gLW1Db2w7CisgICAgfQorICAgIHJldHVybiBtOworfQor
KSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNzaWduLCBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvcis9
KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgZm9y
IChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBtW2Nv
bF0gKz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lO
TElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtICs9IHg7CisgICAgcmV0dXJuIG07Cit9
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXJBc3NpZ24sCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50
IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZvcGVyYXRvci09KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZt
LCBUIHgpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisg
ICAgeworICAgICAgICBtW2NvbF0gLT0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIiwg
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJv
d3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3Bl
cmF0b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAgIG0gLT0g
eDsKKyAgICByZXR1cm4gbTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0
cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNj
YWxhckFzc2lnbkZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVh
ZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci89KHRocmVhZCBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgeCA9IFQoMSkgLyB4OworICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAgICAgICAg
bVtjb2xdICo9IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWduLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5H
TEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3Bl
cmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmbSwgVCB4KQorewor
ICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAgICAg
ICAgbVtjb2xdIC89IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyRmFzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fIDw9IDIyMAordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBtLCBUIHgpCit7CisgICAgbSAvPSB4OworICAgIHJldHVybiBtOworfQorI2VuZGlmCispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhckFzc2lnbkZhc3QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJv
d3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5kaWYKKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGUsIFIiKAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xz
LCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAgZm9yIChz
aXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBhW2NvbF0g
Lz0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5H
TEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3Bl
cmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4gYTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHksIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBBTkdMRV9jb21wb25lbnRXaXNlTXVsdGlw
bHkobWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IGIpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wp
CisgICAgeworICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsK
K30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBNLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBOLCBNPiBBTkdMRV9vdXRlclByb2R1Y3QobWV0YWw6OnZlYzxULCBNPiB1
LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgbWV0YWw6Om1hdHJpeDxULCBOLCBNPiBvOwor
ICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgTjsgKytuKQorICAgIHsKKyAgICAgICAgb1tuXSA9
IHUgKiB2W25dOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShpbnZlcnNlMiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjpt
YXRyaXg8VCwgMiwgMj4gbSkKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IGFkajsKKyAg
ICBhZGpbMF1bMF0gPSAgbVsxXVsxXTsKKyAgICBhZGpbMF1bMV0gPSAtbVswXVsxXTsKKyAgICBh
ZGpbMV1bMF0gPSAtbVsxXVswXTsKKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKyAgICBUIGRl
dCA9IChhZGpbMF1bMF0gKiBtWzBdWzBdKSArIChhZGpbMF1bMV0gKiBtWzFdWzBdKTsKKyAgICBy
ZXR1cm4gYWRqICogKFQoMSkgLyBkZXQpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGludmVyc2UzLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBtZXRhbDo6bWF0cml4PFQsIDMsIDM+IEFOR0xFX2ludmVyc2UobWV0YWw6Om1hdHJpeDxU
LCAzLCAzPiBtKQoreworICAgIFQgYSA9IG1bMV1bMV0gKiBtWzJdWzJdIC0gbVsyXVsxXSAqIG1b
MV1bMl07CisgICAgVCBiID0gbVsxXVswXSAqIG1bMl1bMl07CisgICAgVCBjID0gbVsxXVsyXSAq
IG1bMl1bMF07CisgICAgVCBkID0gbVsxXVswXSAqIG1bMl1bMV07CisgICAgVCBkZXQgPSBtWzBd
WzBdICogKGEpIC0KKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKyAgICAgICAgICAg
IG1bMF1bMl0gKiAoZCAtIG1bMV1bMV0gKiBtWzJdWzBdKTsKKyAgICBkZXQgPSBUKDEpIC8gZGV0
OworICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKyAgICBtaW52WzBdWzBdID0gKGEp
ICogZGV0OworICAgIG1pbnZbMF1bMV0gPSAobVswXVsyXSAqIG1bMl1bMV0gLSBtWzBdWzFdICog
bVsyXVsyXSkgKiBkZXQ7CisgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsyXSAtIG1b
MF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKyAgICBtaW52WzFdWzBdID0gKGMgLSBiKSAqIGRldDsK
KyAgICBtaW52WzFdWzFdID0gKG1bMF1bMF0gKiBtWzJdWzJdIC0gbVswXVsyXSAqIG1bMl1bMF0p
ICogZGV0OworICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBtWzBdWzBdICog
bVsxXVsyXSkgKiBkZXQ7CisgICAgbWludlsyXVswXSA9IChkIC0gbVsyXVswXSAqIG1bMV1bMV0p
ICogZGV0OworICAgIG1pbnZbMl1bMV0gPSAobVsyXVswXSAqIG1bMF1bMV0gLSBtWzBdWzBdICog
bVsyXVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICogbVsxXVsxXSAtIG1b
MV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKyAgICByZXR1cm4gbWludjsKK30KKykiKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShpbnZlcnNlNCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCA0LCA0PiBBTkdMRV9pbnZlcnNl
KG1ldGFsOjptYXRyaXg8VCwgNCwgND4gbSkKK3sKKyAgICBUIEEyMzIzID0gbVsyXVsyXSAqIG1b
M11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKyAgICBUIEExMzIzID0gbVsyXVsxXSAqIG1bM11b
M10gLSBtWzJdWzNdICogbVszXVsxXTsKKyAgICBUIEExMjIzID0gbVsyXVsxXSAqIG1bM11bMl0g
LSBtWzJdWzJdICogbVszXVsxXTsKKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11bM10gLSBt
WzJdWzNdICogbVszXVswXTsKKyAgICBUIEEwMjIzID0gbVsyXVswXSAqIG1bM11bMl0gLSBtWzJd
WzJdICogbVszXVswXTsKKyAgICBUIEEwMTIzID0gbVsyXVswXSAqIG1bM11bMV0gLSBtWzJdWzFd
ICogbVszXVswXTsKKyAgICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICog
bVszXVsyXTsKKyAgICBUIEExMzEzID0gbVsxXVsxXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVsz
XVsxXTsKKyAgICBUIEExMjEzID0gbVsxXVsxXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVsx
XTsKKyAgICBUIEEyMzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsK
KyAgICBUIEExMzEyID0gbVsxXVsxXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsxXTsKKyAg
ICBUIEExMjEyID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVsxXTsKKyAgICBU
IEEwMzEzID0gbVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKyAgICBUIEEw
MjEzID0gbVsxXVswXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVswXTsKKyAgICBUIEEwMzEy
ID0gbVsxXVswXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVswXTsKKyAgICBUIEEwMjEyID0g
bVsxXVswXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKyAgICBUIEEwMTEzID0gbVsx
XVswXSAqIG1bM11bMV0gLSBtWzFdWzFdICogbVszXVswXTsKKyAgICBUIEEwMTEyID0gbVsxXVsw
XSAqIG1bMl1bMV0gLSBtWzFdWzFdICogbVsyXVswXTsKKyAgICBUIGEgPSBtWzFdWzFdICogQTIz
MjMgLSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisgICAgVCBiID0gbVsxXVsw
XSAqIEEyMzIzIC0gbVsxXVsyXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMjIzOworICAgIFQgYyA9
IG1bMV1bMF0gKiBBMTMyMyAtIG1bMV1bMV0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDEyMzsKKyAg
ICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAx
MjM7CisgICAgVCBkZXQgPSBtWzBdWzBdICogKCBhICkKKyAgICAgICAgICAtIG1bMF1bMV0gKiAo
IGIgKQorICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisgICAgICAgICAgLSBtWzBdWzNdICog
KCBkICk7CisgICAgZGV0ID0gVCgxKSAvIGRldDsKKyAgICBtZXRhbDo6bWF0cml4PFQsIDQsIDQ+
IGltOworICAgIGltWzBdWzBdID0gZGV0ICogICAoIGEgKTsKKyAgICBpbVswXVsxXSA9IGRldCAq
IC0gKCBtWzBdWzFdICogQTIzMjMgLSBtWzBdWzJdICogQTEzMjMgKyBtWzBdWzNdICogQTEyMjMg
KTsKKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBdWzJdICog
QTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKyAgICBpbVswXVszXSA9IGRldCAqIC0gKCBtWzBd
WzFdICogQTIzMTIgLSBtWzBdWzJdICogQTEzMTIgKyBtWzBdWzNdICogQTEyMTIgKTsKKyAgICBp
bVsxXVswXSA9IGRldCAqIC0gKCBiICk7CisgICAgaW1bMV1bMV0gPSBkZXQgKiAgICggbVswXVsw
XSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7CisgICAgaW1b
MV1bMl0gPSBkZXQgKiAtICggbVswXVswXSAqIEEyMzEzIC0gbVswXVsyXSAqIEEwMzEzICsgbVsw
XVszXSAqIEEwMjEzICk7CisgICAgaW1bMV1bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEEyMzEy
IC0gbVswXVsyXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMjEyICk7CisgICAgaW1bMl1bMF0gPSBk
ZXQgKiAgICggYyApOworICAgIGltWzJdWzFdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMyMyAt
IG1bMF1bMV0gKiBBMDMyMyArIG1bMF1bM10gKiBBMDEyMyApOworICAgIGltWzJdWzJdID0gZGV0
ICogICAoIG1bMF1bMF0gKiBBMTMxMyAtIG1bMF1bMV0gKiBBMDMxMyArIG1bMF1bM10gKiBBMDEx
MyApOworICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1bMF1bMV0g
KiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworICAgIGltWzNdWzBdID0gZGV0ICogLSAoIGQg
KTsKKyAgICBpbVszXVsxXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMjMgLSBtWzBdWzFdICog
QTAyMjMgKyBtWzBdWzJdICogQTAxMjMgKTsKKyAgICBpbVszXVsyXSA9IGRldCAqIC0gKCBtWzBd
WzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsKKyAgICBp
bVszXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMTIgLSBtWzBdWzFdICogQTAyMTIgKyBt
WzBdWzJdICogQTAxMTIgKTsKKyAgICByZXR1cm4gaW07Cit9CispIikKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFO
R0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4gdikKK3sK
KyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBpZiAodVtpXSAhPSB2
W2ldKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUobm90RXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBi
b29sIEFOR0xFX25vdEVxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwg
Tj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKHUsdik7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVxdWFsQXJyYXkoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
ZXF1YWxWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRh
bDo6dmVjPFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gbWV0YWw6
OmFsbCh1ID09IHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21l
dGFsX21hdGgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxNYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywgaW50
IFI+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfZXF1YWwobWV0YWw6Om1hdHJpeDxU
LCBDLCBSPiBhLCBtZXRhbDo6bWF0cml4PFQsIEMsIFI+IGIpCit7CisgICAgZm9yIChpbnQgYyA9
IDA7IGMgPCBDOyArK2MpCisgICAgeworICAgICAgICBpZiAoIUFOR0xFX2VxdWFsKGFbY10sIGJb
Y10pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVx
dWFsVmVjdG9yKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVjdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZlYzxULCBO
PiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgcmV0dXJuICFBTkdMRV9lcXVhbCh1LCB2
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBib29s
IEFOR0xFX25vdEVxdWFsU3RydWN0KHRocmVhZCBjb25zdCBUICZhLCB0aHJlYWQgY29uc3QgVCAm
YikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1
YWxNYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJlZiwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfVmVjdG9yRWxlbVJl
ZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZtVmVjOworICAgIFQgbVJlZjsKKyAg
ICBjb25zdCBpbnQgbUluZGV4OworICAgIH5BTkdMRV9WZWN0b3JFbGVtUmVmKCkgeyBtVmVjW21J
bmRleF0gPSBtUmVmOyB9CisgICAgQU5HTEVfVmVjdG9yRWxlbVJlZih0aHJlYWQgbWV0YWw6OnZl
YzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCisgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tp
bmRleF0pLCBtSW5kZXgoaW5kZXgpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQgVCAmKCkg
eyByZXR1cm4gbVJlZjsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9lbGVtX3JlZih0
aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCit7CisgICAgcmV0dXJuIEFO
R0xFX1ZlY3RvckVsZW1SZWY8VCwgTj4odmVjLCBpbmRleCk7Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoc3dpenpsZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBWTiwgaW50IFNOPgorc3RydWN0IEFOR0xFX1N3aXp6
bGVSZWYKK3sKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxULCBWTj4gJm1WZWM7CisgICAgbWV0YWw6
OnZlYzxULCBTTj4gbVJlZjsKKyAgICBpbnQgbUluZGljZXNbU05dOworICAgIH5BTkdMRV9Td2l6
emxlUmVmKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBtSW5kaWNlc1tpXTsKKyAgICAgICAg
ICAgIG1WZWNbal0gPSBtUmVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIEFOR0xFX1N3aXp6
bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGludCAqaW5k
aWNlcykKKyAgICAgICAgOiBtVmVjKHZlYykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgU047ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBpbmRp
Y2VzW2ldOworICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworICAgICAgICAgICAgbVJlZltp
XSA9IG1WZWNbal07CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgdGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgU04+ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+
IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCkK
K3sKKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKK30K
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVf
U3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxU
LCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAs
IGkxIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBpcyk7Cit9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xF
X1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8
VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMikKK3sKKyAgICBjb25zdCBpbnQgaXNb
XSA9IHsgaTAsIGkxLCBpMiB9OworICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+
KHZlYywgaXMpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlT
X0lOTElORSBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVh
ZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykK
K3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAsIGkxLCBpMiwgaTMgfTsKKyAgICByZXR1cm4g
QU5HTEVfU3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShv
dXQsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfT3V0Cit7CisgICAg
VCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX091dCgpIHsgbURlc3Qg
PSBtVGVtcDsgfQorICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKyAgICAgICAgOiBtRGVz
dChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJuIG1UZW1w
OyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xF
X091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCit7CisgICAgcmV0dXJuIEFOR0xFX091
dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91dCwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9Jbk91dAoreworICAgIFQgbVRl
bXA7CisgICAgdGhyZWFkIFQgJm1EZXN0OworICAgIH5BTkdMRV9Jbk91dCgpIHsgbURlc3QgPSBt
VGVtcDsgfQorICAgIEFOR0xFX0luT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6IG1UZW1w
KGRlc3QpLCBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsg
cmV0dXJuIG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX0luT3V0PFQ+IEFOR0xFX2lub3V0KHRocmVhZCBUICZkZXN0KQoreworICAg
IHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShmbGF0dGVuQXJyYXksIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
QU5HTEVfZmxhdHRlbl9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgdGhy
ZWFkIFQgKmV4ZWModGhyZWFkIFQgJngpCisgICAgeworICAgICAgICByZXR1cm4gJng7CisgICAg
fQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0cnVjdCBBTkdMRV9mbGF0
dGVuX2ltcGw8bWV0YWw6OmFycmF5PFQsIE4+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gZXhlYyh0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+ICZhcnIpIC0+IFQKKyAg
ICB7CisgICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX2ZsYXR0ZW4odGhyZWFkIG1ldGFsOjphcnJheTxULCBOPiAmYXJy
KSAtPiBUCit7CisgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0p
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNhc3RWZWN0b3IsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBOMSwgaW50IE4yPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0
b3Ige307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfY2FzdFZl
Y3RvcjxULCBOLCBOPgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgTj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiBjb25zdCAmdikKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9jYXN0VmVjdG9yPFQsIDIsIDM+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+IGNvbnN0
ICZ2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYueHk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KK3sKKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgND4gY29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAz
LCA0PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8VCwgMz4g
ZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8
aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgTjE+IEFOR0xFX2Nhc3QodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTjI+IGNvbnN0ICZ2KQor
eworICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7Cit9Cisp
IikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdE1hdHJpeCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQg
QzIsIGludCBSMiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9jYXN0TWF0
cml4Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBD
MSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisg
ICAgeworICAgICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAgIGNvbnN0
IGludCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworICAgICAgICBjb25zdCBpbnQgTWluUiA9
IFIxIDw9IFIyID8gUjEgOiBSMjsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBNaW5DOyAr
K2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTWluUjsgKyty
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByID0gUjI7IHIgPCBSMTsgKytyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9PSByID8gVCgxKSA6
IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgYyA9IEMy
OyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBSMTsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9
PSByID8gVCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG0xOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBpbnQgUjEs
IGludCBDMiwgaW50IFIyPgorc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIxLCBDMiwg
UjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+PgoreworICAgIHN0
YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBleGVjKHRo
cmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0yKQorICAgIHsKKyAgICAgICAg
bWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IG0xOworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsg
YyA8IEMxOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG0xW2NdID0gQU5HTEVfY2FzdDxS
MT4obTJbY10pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtMTsKKyAgICB9Cit9OwordGVt
cGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IEFOR0xFX2Nhc3QodGhyZWFk
IG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbSkKK3sKKyAgICByZXR1cm4gQU5HTEVf
Y2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMobSk7Cit9OworKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c3RWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBzaXplX3QuLi4gRFM+CitzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0
czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRD4KK3N0cnVjdCBBTkdMRV90ZW5zb3Jf
dHJhaXRzPFQsIEQ+Cit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAg
ICB1c2luZyBpbm5lcl90eXBlID0gVDsKKyAgICB1c2luZyBvdXRlcl90eXBlID0gaW5uZXJfdHlw
ZVtEXTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEQsIHNpemVfdC4uLiBEUz4K
K3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIEQsIERTLi4uPgoreworICAgIGVudW0gOiBz
aXplX3QgeyBvdXRlcl9kaW0gPSBEIH07CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IHR5cGVuYW1l
IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl90eXBlOworICAgIHVzaW5nIG91
dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDxzaXplX3QgRCwgdHlwZW5h
bWUgdmFsdWVfdHlwZV8sIHR5cGVuYW1lIGlubmVyX3R5cGVfPgorc3RydWN0IEFOR0xFX3RlbnNv
cl9pbXBsCit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAgICB1c2lu
ZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IGlubmVy
X3R5cGVfOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworICAgIG91dGVy
X3R5cGUgX2RhdGE7CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG91dGVyX2RpbTsgfQorICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgaW5uZXJfdHlw
ZSAmb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gX2RhdGFbaV07IH0KKyAgICBBTkdMRV9B
TFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIF9kYXRhW2ldOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdC4u
LiBEUz4KK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorICAgIEFOR0xF
X3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl9kaW0sCisgICAgVCwKKyAgICB0eXBlbmFt
ZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFpdHM7Cit0ZW1w
bGF0ZSA8Pgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwyPiB7IHVzaW5nIHR5cGUgPSBt
ZXRhbDo6Z3JhZGllbnQyZDsgfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRf
dHJhaXRzPDM+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDNkOyB9OworCit0ZW1wbGF0
ZSA8aW50IE4+Cit1c2luZyBBTkdMRV9ncmFkaWVudCA9IHR5cGVuYW1lIEFOR0xFX2dyYWRpZW50
X3RyYWl0czxOPjo6dHlwZTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
RW52LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBBTkdMRV9UZXh0dXJlRW52Cit7CisgICAgdGhyZWFkIFQgKnRleHR1cmU7CisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyICpzYW1wbGVyOworfTsKKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShmdW5jdGlvbkNvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV9TQU1QTEVfQ09NUEFSRV9HUkFESUVOVF9JTkRFWCAwCisjZGVmaW5l
IEFOR0xFX1NBTVBMRV9DT01QQVJFX0xPRF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgQU5HTEVfUkFT
VEVSSVpBVElPTl9ESVNDQVJEX0lOREVYICAgMgorCitjb25zdGFudCBib29sIEFOR0xFX1VzZVNh
bXBsZUNvbXBhcmVHcmFkaWVudCBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBMRV9DT01Q
QVJFX0dSQURJRU5UX0lOREVYKV1dOworY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlTG9kICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0Rf
SU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1Jhc3Rlcml6YXRpb25EaXNjYXJkICAgICBb
W2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1JBU1RFUklaQVRJT05fRElTQ0FSRF9JTkRFWCldXTsK
KykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xF
X3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhlbEZl
dGNoX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjppbnQyIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0
dXJlLnJlYWQodWludDIoY29vcmQpLCBsZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29u
c3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1
aW50Myhjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorICAgIHRocmVhZCBtZXRh
bDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBj
b25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFk
KHVpbnQyKGNvb3JkLnh5KSwgdWludChjb29yZC56KSwgbGV2ZWwpOworfQorKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleGVsRmV0Y2hPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9p
bXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIg
Y29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNv
bnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9m
ZnNldCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQs
CisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkICsgb2Zmc2V0KSwgbGV2ZWwp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRf
YXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZjb29yZCwK
KyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQor
eworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkgKyBvZmZzZXQpLCB1aW50
KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQg
YmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFs
OjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2Vu
ZXJpY19mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aDJkX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSk7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxU
PiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6Ymlh
cyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpk
ZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgY29vcmQudyk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgY29tcGFyZSkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLncpKSwgY29tcGFyZSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aGN1
YmVfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAg
dGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6KTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3Vi
ZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6
OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJlMmRh
cnJheV9mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1w
bCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSks
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5
X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3Rl
eHR1cmUyZGFycmF5X2Zsb2F0NF9mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC53KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURMb2Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFETG9k
KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2Ft
cGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxl
dmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvaiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMURQcm9qKGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlMURQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC55LCBtZXRhbDo6Ymlh
cyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAw
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLncs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qTG9kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUxRFByb2pM
b2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMURQcm9q
TG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0
ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueC9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZTJEKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0
ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmUyRF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlMkRMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5H
TEVfdGV4dHVyZTJETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRExvZF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQs
CisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQ
cm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUy
RFByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZs
b2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZTJEUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2Rl
ZmluZSBBTkdMRV90ZXh0dXJlMkRQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRQcm9q
TG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVsKGxldmVs
KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRh
bDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RMb2QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4u
KSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19W
QV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RQcm9qLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUzRFByb2ooZW52LCAuLi4pIEFOR0xFX3Rl
eHR1cmUzRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUzRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJp
YXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvakxvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2
ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29y
ZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3ViZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZShl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2ltcGwoCisgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4
dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAor
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3ViZUxvZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZUxv
ZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1l
dGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJvaiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZVByb2oo
ZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
Q3ViZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pMb2RfaW1w
bCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVD
dWJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUdyYWRf
aW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmUsIGludCBOPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmY29vcmQsCisgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRh
bDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsKK30KKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQ
ZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50
KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdy
YWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQueik7CisgICAgfQorfQorKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdy
YWRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1w
bGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53LCBtZXRh
bDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwg
ZFBkeSkpID4gY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdy
YWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zs
b2F0NF9mbG9hdDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgY29vcmQu
dywgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSA+IGNvb3JkLncp
OworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFu
dHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxv
YXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpOworfQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zs
b2F0Tl9pbnROLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZSwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJl
YWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8
ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4g
Y29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR5
LAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQ
ZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBncmFk
aWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIG1ldGFs
OjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVu
dDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
R3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0
Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6
OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdy
YWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBt
ZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLnopOworICAgIH0K
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQy
X2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBt
ZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29v
cmQueikpLCBjb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
eikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOwor
ICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9hdDRfZmxv
YXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9m
ZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQ
ZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIG1l
dGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVyZWN1YmVf
ZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisg
ICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkp
LCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZE9m
ZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2QoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdT
X18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBs
ZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
TG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZGVwdGgyZF9mbG9h
dDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSkgPiBjb29y
ZC56KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29u
c3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVsKGxldmVs
KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmxldmVsKGxl
dmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0KGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGlu
dDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRf
aW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQz
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAm
b2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxl
ciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkg
PiBjb29yZC56KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFs
Ojpyb3VuZChjb29yZC56KSksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAg
IHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBtZXRhbDo6
bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVPZmZzZXQoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZs
b2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBm
bG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhy
ZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgb2Zmc2V0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxv
YXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAorICAgIGZs
b2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBvZmZzZXQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBmbG9h
dDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisgICAgZmxv
YXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1l
dGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhy
ZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAg
dGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmJpYXMoYmlhcyksIG9m
ZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1
cmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6
YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0
dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBi
aWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJv
akdyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZVByb2pHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQ
cm9qR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5KQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0
aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNh
bXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50
MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncs
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnovY29vcmQudyk7CisgICAg
fQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9h
dDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAg
IHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5
KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0
KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUs
ICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFk
T2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQy
ZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6
OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9p
bnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAm
b2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVu
dDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQu
ei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWRP
ZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0
X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRl
eHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGll
bnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xF
X3RleHR1cmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
UHJvakxvZF9nZW5lcmljX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIGlm
IChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3JkLnov
Y29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfdGV4dHVyZTNkX2Zsb2F0
NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0
aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZB
X0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
LAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZl
bCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBv
ZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6
ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29y
ZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KSA+
IGNvb3JkLnovY29vcmQudyk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNl
dCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3Jk
LncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9q
T2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKCplbnYudGV4dHVy
ZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
LAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1l
dGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0
YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJpYXMgPSAw
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQu
dywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVNp
emUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBfX1ZBX0FS
R1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDIodGV4dHVyZS5nZXRfd2lkdGgo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAg
ICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9kZXB0
aCh1aW50KGxldmVsKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6
ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJu
IGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAg
IGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1aW50KGxl
dmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2FycmF5
X3NpemUoKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmV0dXJuZWQgTmFtZSBpcyB2YWxpZCBm
b3IgYXMgbG9uZyBhcyBgYnVmZmVyYCBpcyBzdGlsbCBhbGl2ZS4KKy8vIFJldHVybnMgZmFsc2Ug
aWYgbm8gdGVtcGxhdGUgYXJncyBleGlzdC4KKy8vIFJldHVybnMgZmFsc2UgaWYgYnVmZmVyIGlz
IG5vdCBsYXJnZSBlbm91Z2guCisvLworLy8gRXhhbXBsZToKKy8vICAiZm9vPDEsMj4iIC0tPiAi
Zm9vPD4iCitzdGF0aWMgc3RkOjpwYWlyPE5hbWUsIGJvb2w+IE1hc2tUZW1wbGF0ZUFyZ3MoY29u
c3QgTmFtZSAmbmFtZSwgc2l6ZV90IGJ1ZmZlclNpemUsIGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBj
b25zdCBjaGFyICpiZWdpbiA9IG5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKyAgICBjb25zdCBjaGFy
ICplbmQgICA9IHN0cmNocihiZWdpbiwgJzwnKTsKKyAgICBpZiAoIWVuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB7e30sIGZhbHNlfTsKKyAgICB9CisgICAgc2l6ZV90IG4gPSBlbmQgLSBiZWdp
bjsKKyAgICBpZiAobiArIDMgPiBidWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHt7
fSwgZmFsc2V9OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKKyAg
ICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGJlZ2luW2ldOworICAgIH0KKyAgICBidWZmZXJbbiAr
IDBdID0gJzwnOworICAgIGJ1ZmZlcltuICsgMV0gPSAnPic7CisgICAgYnVmZmVyW24gKyAyXSA9
ICdcMCc7CisgICAgcmV0dXJuIHtOYW1lKGJ1ZmZlciwgbmFtZS5zeW1ib2xUeXBlKCkpLCB0cnVl
fTsKK30KKworUHJvZ3JhbVByZWx1ZGU6OkZ1bmNUb0VtaXR0ZXIgUHJvZ3JhbVByZWx1ZGU6OkJ1
aWxkRnVuY1RvRW1pdHRlcigpCit7CisjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkgXAorICAg
IFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICYpIC0+IHZvaWQgeyByZXR1
cm4gcHAubWV0aG9kKCk7IH0KKyAgICBGdW5jVG9FbWl0dGVyIG1hcDsKKworICAgIGF1dG8gcHV0
ID0gWyZdKE5hbWUgbmFtZSwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBGdW5jRW1p
dHRlciAmZGVzdCA9IG1hcFtuYW1lXTsKKyAgICAgICAgQVNTRVJUKCFkZXN0KTsKKyAgICAgICAg
ZGVzdCA9IGVtaXR0ZXI7CisgICAgfTsKKworICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3Qg
Y2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1lIG5hbWUo
bmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIHB1dChuYW1lLCBl
bWl0dGVyKTsKKyAgICB9OworCisgICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0IGNoYXIg
Km5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKyAgICAgICAgTmFtZSBuYW1lKG5hbWVT
dHIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOworICAgICAgICBwdXQobmFtZSwgZW1pdHRlcik7Cisg
ICAgfTsKKworICAgIHB1dEFuZ2xlKCJhZGRyZXNzb2YiLCBFTUlUX01FVEhPRChhZGRyZXNzb2Yp
KTsKKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkpOworICAg
IHB1dEFuZ2xlKCJlbGVtX3JlZiIsIEVNSVRfTUVUSE9EKHZlY3RvckVsZW1SZWYpKTsKKyAgICBw
dXRBbmdsZSgiZmxhdHRlbiIsIEVNSVRfTUVUSE9EKGZsYXR0ZW5BcnJheSkpOworICAgIHB1dEFu
Z2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlub3V0KSk7CisgICAgcHV0QW5nbGUoIm91dCIsIEVN
SVRfTUVUSE9EKG91dCkpOworICAgIHB1dEFuZ2xlKCJzd2l6emxlX3JlZiIsIEVNSVRfTUVUSE9E
KHN3aXp6bGVSZWYpKTsKKworICAgIHB1dEJ1aWx0SW4oInRleGVsRmV0Y2giLCBFTUlUX01FVEhP
RCh0ZXhlbEZldGNoKSk7CisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaE9mZnNldCIsIEVNSVRf
TUVUSE9EKHRleGVsRmV0Y2hPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10o
UHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAgICAgY29u
c3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRleHR1cmVU
eXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05h
bWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJh
bSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBj
b29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAg
ID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKyAgICAgICAgaWYgKHRleHR1cmVO
YW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQz
X2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8IikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChiaWFz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZGVw
dGgyZGFycmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTJkX2FycmF5PCIpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9h
dCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlh
cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2lj
ID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2dlbmVyaWNfZmxvYXQz
KCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1aWx0SW4o
InRleHR1cmUxRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRExvZCkpOworICAgIHB1dEJ1aWx0
SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7CisgICAgcHV0
QnVpbHRJbigidGV4dHVyZTFEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFByb2pMb2Qp
KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkQiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkQpKTsK
KyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRMb2Qp
KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZTJE
UHJvaikpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1
cmUzRExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlM0RQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvakxvZCIsIEVNSVRf
TUVUSE9EKHRleHR1cmUzRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlQ3ViZSIs
IEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVM
b2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1
cmVDdWJlUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvaikpOworICAgIHB1dEJ1aWx0
SW4oInRleHR1cmVDdWJlUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvakxvZCkp
OworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkRQcm9qTG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUdyYWQiLCBbXShQcm9ncmFtUHJl
bHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFi
bGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1
bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAg
ICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRU
eXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJh
c2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5n
ZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBm
dW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAg
ICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBk
UGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0
aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0aDJkYXJy
YXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxv
YXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMg
JiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Migp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZs
b2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IGRQZHhOKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworICAgICAgICB9CisgICAg
ICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9mZnNldCIs
IFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAg
IGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0
dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5y
YXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0
UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2lj
ID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAg
ICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4
ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3Qg
aW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
ZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNv
b3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJf
aW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlTmFt
ZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYg
ZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9
PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3Jh
ZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9m
bG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0Tl9mbG9h
dE5fZmxvYXROX2ludE4oKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7Cisg
ICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3Qg
VEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJl
TmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAg
Y29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAg
ICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUy
ZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRG
bG9hdCAmJiBjb29yZE4gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRl
eHR1cmVMb2RfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMoKTsKKyAgICAg
ICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUxv
ZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZU9mZnNldCkpOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2opKTsKKyAgICBwdXRC
dWlsdEluKCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRG
dW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5h
bWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAgICAgICBjb25zdCBUVHlwZSAm
Y29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworICAgICAg
ICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5n
ZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHguZ2V0
Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfZGVwdGgy
ZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9h
dCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNf
ZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9nZW5lcmlj
X2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9nZW5lcmlj
X2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAg
IH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIFtdKFByb2dyYW1Q
cmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0
YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUo
ZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdl
dFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3Jk
LmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9
IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAg
ICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4dHVyZU5h
bWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYm
IGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRl
eHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4g
PT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0M19m
bG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVy
aWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIFRPRE8o
KTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZCIsIFtdKFByb2dyYW1Q
cmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0
YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUo
ZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdl
dFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3Jk
LmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJt
ZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2lu
c1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90ZXh0dXJl
M2RfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0MygpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVy
ZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7Cisg
ICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBFTUlUX01FVEhP
RCh0ZXh0dXJlUHJvakxvZE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qT2Zm
c2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0
ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7CisKKyAgICByZXR1cm4gbWFw
OworCisjdW5kZWYgRU1JVF9NRVRIT0QKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRP
cGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmFkaWFucygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVz
OgorICAgICAgICAgICAgZGVncmVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorICAgICAgICAgICAgYXRhbigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6CisgICAgICAgICAgICBtb2Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFj
dDoKKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6CisgICAgICAgICAgICBkaXN0YW5jZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZW5ndGg6CisgICAg
ICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRG90OgorICAgICAgICAgICAgZG90KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5vcm1hbGl6
ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGYWNl
Zm9yd2FyZDoKKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICByZWZsZWN0
KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW5oOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRhbmg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BGbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3c6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TG9nMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbG9vcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5jOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2VpbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Rm
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGcmV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEludmVyc2VzcXJ0Ogor
ICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgICAgICBpZiAoYXJnVHlw
ZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIEV2ZW4gaWYgQXJnMCBpcyBhIHZlY3RvciBvciBtYXRyaXgsIGl0IGNvdWxkIGFsc28gYmUg
YW4gYXJyYXkuCisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdUeXBl
MS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVxdWFsQXJyYXko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNWZWN0b3Io
KSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
YXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+
aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbm90RXF1YWxBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgaW5j
bHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTaWduOgorICAgICAgICAgICAgc2lnbigpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWl4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
U3RlcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNtb290aHN0ZXA6CisgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2NvbW1vbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSXNpbmY6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZ3aWR0aDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAgICAgICAgICAgIGluY2x1ZGVf
bWV0YWxfbWF0cml4KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFy
Z1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZE1h
dHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNN
YXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4
KCkgJiYgYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBvbmVu
dFdpc2U6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJnVHlwZTEt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50V2lz
ZU11bHRpcGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wT3V0ZXJQcm9kdWN0OgorICAgICAgICAgICAgb3V0ZXJQcm9k
dWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SW52ZXJzZToKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZTAtPmdldENvbHMoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGlu
dmVyc2UyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMzoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBp
bnZlcnNlNCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6
CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVu
dDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBwcmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVt
ZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0
cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ29tbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVm
dEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJp
Z2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFu
RXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVudFdpc2U6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsQ29tcG9uZW50V2lzZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25lbnRXaXNl
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxB
bmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsTm90Q29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VO
b3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1l
c1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4Ogor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQnJlYWs6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRp
cmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50
Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNUb1VpbnQ6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICAgICAgLy8gZG8gbm90
aGluZworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtp
bGw6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrVW5vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrU25v
cm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVu
cGFja1Nub3JtNHg4OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYyeDE2Ogor
ICAgICAgICAgICAgcGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisgICAgICAgICAgICB1bnBhY2tf
aGFsZl8yeDE2KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0ZmllbGRFeHRyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Zmll
bGRJbnNlcnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRDb3VudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZpbmRMU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVWFkZENhcnJ5OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVXN1YkJvcnJvdzoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRl
ZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEltdWxFeHRlbmRlZDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1v
cnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckF0b21p
Y0NvdW50ZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyQnVmZmVy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllclNoYXJlZDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEdyb3VwTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEF0b21pY0FkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01pbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01heDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEF0b21pY0FuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY09yOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljWG9yOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9t
aWNDb21wU3dhcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVtaXRWZXJ0ZXg6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGVHJhbnNmb3JtOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0RvdWJs
ZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXJyYXlMZW5ndGg6CisgICAgICAgICAgICBUT0RPKCk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29uc3Ry
dWN0OgorICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIEFTU0VSVChmdW5j
KTsKKyAgICAgICAgICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoZnVuYykuc2Vjb25kKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7CisgICAgICAg
ICAgICAgICAgY29uc3QgYXV0byBlbmQgPSBtRnVuY1RvRW1pdHRlci5lbmQoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGl0ZXIgICAgICA9IG1GdW5jVG9FbWl0dGVyLmZpbmQobmFtZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICAgICAgICAgICAgICBhdXRvIG1h
c2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWFzay5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5kKG1hc2su
Zmlyc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8gJmVtaXR0ZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVBy
ZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUgJnR5cGUp
Cit7CisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgY29uc3QgTmFtZSB0eXBlTmFtZSgqcyk7CisgICAgICAgIGlmICh0eXBlTmFt
ZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXh0dXJlRW52KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgaWYgKG5hbWUgPT0gY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJs
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3Qg
VFZhcmlhYmxlICZ2YXIpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmdmFyKS5zZWNvbmQp
CisgICAgeworICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7
CisgICAgfQorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN0cnVjdHVyZShjb25zdCBU
U3RydWN0dXJlICZzKQoreworICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKyAg
ICB7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHMuZmllbGRzKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7Cisg
ICAgICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUoKmZpZWxkKSwgdHlwZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBu
b2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0g
bm9kZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0
T3AoKSwgbnVsbHB0ciwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlID0gbm9kZS0+Z2V0T3Bl
cmFuZCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBudWxs
cHRyLCAmYXJnVHlwZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1
ZGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQoKTsKKwor
ICAgIGF1dG8gZ2V0QXJnVHlwZSA9IFtub2RlLCBhcmdDb3VudF0oc2l6ZV90IGluZGV4KSAtPiBj
b25zdCBUVHlwZSAmIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJnQ291bnQpOworICAgICAg
ICBUSW50ZXJtVHlwZWQgKmFyZyA9IG5vZGUtPmdldENoaWxkTm9kZShpbmRleCktPmdldEFzVHlw
ZWQoKTsKKyAgICAgICAgQVNTRVJUKGFyZyk7CisgICAgICAgIHJldHVybiBhcmctPmdldFR5cGUo
KTsKKyAgICB9OworCisgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0RnVuY3Rp
b24oKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Q2hpbGRDb3VudCgpKQorICAgIHsKKyAgICAg
ICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdl
dE9wKCksIGZ1bmMsIG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUw
ID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0T3Ao
KSwgZnVuYywgJmFyZ1R5cGUwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMCA9
IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEgPSBnZXRB
cmdUeXBlKDEpOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5j
LCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9
IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCks
IGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlz
aXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpub2RlKQoreworICAgIERl
Y2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKyAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IGRlY2wuc3ltYm9sLmdldFR5cGUoKTsKKyAgICBpZiAodHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgdmlzaXRTdHJ1Y3R1cmUoKnMp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sKKyAgICB2aXNpdFZhcmlhYmxlKG5vZGUt
PnZhcmlhYmxlKCkpOworfQorCitib29sIHNoOjpFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVybUJs
b2NrICZyb290LCBUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmln
ICZwcGMpCit7CisgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBwcGMpOwor
ICAgIHJvb3QudHJhdmVyc2UoJnByb2dyYW1QcmVsdWRlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Byb2dyYW1QcmVsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAwNDEzZjU3NjkyYTA1MzRkYTRkN2RjOTYz
YTA5OGJiODhjZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJl
bHVkZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVf
SF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKK2NsYXNz
IFRJbnRlcm1CbG9jazsKKworc3RydWN0IFByb2dyYW1QcmVsdWRlQ29uZmlnCit7CisgICAgYm9v
bCBoYXNTdHJ1Y3RFcSA9IGZhbHNlOworfTsKKworLy8gVGhpcyBlbWl0cyBmaXhlZCBoZWxwZXIg
TWV0YWwgY29kZSBkaXJlY3RseSB3aXRob3V0IGFkZGluZyBjb2RlIHRvIHRoZSBBU1QuIFRoaXMg
d2Fsa3MgdGhlIEFTVCB0bworLy8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgd2hhdCBwcmVsdWRl
IE1TTCBjb2RlIGlzIG5lZWRlZCBmb3IgdmFyaW91cyB0aGluZ3MgaW4gdGhlIEFTVC4gWW91IGNh
bgorLy8gdGhpbmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRp
b25zIG9mIGEgaGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorLy8gTWV0YWwgcHJvZ3Jh
bS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1Np
bmtCYXNlICZvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QUk9H
UkFNUFJFTFVERV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJs
b2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hYTgxNjk2ZjA2YWY2OWQ0YWRhMjU3OWMwMmQwOGM0ODk0NWZkOWU4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAKQEAgLTAsMCAr
MSwxMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRGVjbGFyYXRpb25zLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1
c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFj
ZQoreworCitjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqLCBzdGQ6Om1hcDxJbW11dGFi
bGVTdHJpbmcsIGNvbnN0IFRWYXJpYWJsZSAqPj4KKyAgICAgICAgbUxpZnRlZE1hcDsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJsZSAqPiBt
SW5zdGFuY2VNYXA7CisKKyAgcHVibGljOgorICAgIFJlZHVjZXIoVENvbXBpbGVyICZjb21waWxl
cikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVS
ZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2RlLmdldENoaWxkQ291bnQoKSA9
PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworCisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRB
c1N5bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2
YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlICAgICAgICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBT
eW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYg
KGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFj
ZUJsb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFR5cGUg
PT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvICZuYW1lVG9WYXIgPSBtTGlmdGVkTWFwW2ludGVyZmFjZUJsb2NrXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVwbGFjZW1lbnRzOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBpbnRlcmZhY2VCbG9jay0+
ZmllbGRzKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxp
Zmllcjo6RXZxVW5pZm9ybSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRl
ZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxR2xvYmFsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6OkV2cVVu
aWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqbGlmdGVkVmFyID0gbmV3IFRW
YXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCAmbGlmdGVkVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQt
PnN5bWJvbFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVUb1ZhcltmaWVs
ZC0+bmFtZSgpXSA9IGxpZnRlZFZhcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVy
bURlY2xhcmF0aW9ue25ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcil9KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShz
dGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gJnN0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAq
bmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgaW50ZXJmYWNlQmxvY2stPm5hbWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJmYWNlQmxvY2stPmZp
ZWxkcygpLCBpbnRlcmZhY2VCbG9jay0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJs
ZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAmaW5zdGFuY2VWYXIgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShtU3ltYm9sVGFi
bGUsIHN0cnVjdHVyZSwgTmFtZSh2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNp
emVzKCkpOworCisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZU1hcFsmdmFyXSA9ICZpbnN0
YW5jZVZhcjsKKworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnRz
W10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybURlY2xhcmF0aW9ue25l
dyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RWYXIpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19Owor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6OmJlZ2luKHJl
cGxhY2VtZW50cyksIHN0ZDo6ZW5kKHJlcGxhY2VtZW50cykpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZp
c2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0U3ltYm9sUHJl
KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25z
dCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byBpdCA9IG1JbnN0YW5jZU1hcC5maW5kKCZ2YXIpOworICAgICAgICAgICAg
aWYgKGl0ICE9IG1JbnN0YW5jZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmliID0gdmFy
LmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtTGlm
dGVkTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gKmxpZnRl
ZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisgICAgICAgICAgICAgICAgQVNTRVJUKGxp
ZnRlZFZhcik7CisgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChsaWZ0
ZWRWYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzeW1ib2xO
b2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmVkdWNlSW50ZXJmYWNlQmxvY2tzKFRDb21waWxl
ciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBSZWR1Y2VyIHJlZHVjZXIo
Y29tcGlsZXIpOworICAgIGlmICghcmVkdWNlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRp
b25zKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVj
ZUludGVyZmFjZUJsb2Nrcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM2OTVjYmFkZmQ2NGEyMTJhNWJlNTUxODliOWNlNzJjNjhkNzRhZTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmgKQEAg
LTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5URVJGQUNFQkxP
Q0tTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRoaXMg
cmV3cml0ZXMgaW50ZXJmYWNlIGJsb2NrIGRlY2xhcmF0aW9ucyBvbmx5LgorLy8KKy8vIEFjY2Vz
cyBvZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKy8vIFhYWDogXiBTdGlsbCB0cnVlPwor
Ly8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBGb28geyBpbnQgeDsgfTsKKy8vIEJlY29tZXM6
CisvLyAgdW5pZm9ybSBpbnQgeDsKKy8vCisvLyBFeGFtcGxlOgorLy8gIHVuaWZvcm0gRm9vIHsg
aW50IHg7IH0gZm9vOworLy8gQmVjb21lczoKKy8vICBzdHJ1Y3QgRm9vIHsgaW50IHg7IH07IHVu
aWZvcm0gRm9vIHg7CisvLworQU5HTEVfTk9fRElTQ0FSRCBib29sIFJlZHVjZUludGVyZmFjZUJs
b2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBu
YW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JN
RVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZWZlcmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YjVkODZjNzg4ZTVkNmMyMzIxNTFiODM2MjZmODYwMTlhM2NiZGY5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJF
TkNFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFRkVSRU5DRV9IXworCituYW1lc3BhY2Ugc2gKK3sKKworLy8gU2ltaWxhciB0byBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9ycy4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUmVmCit7CisgIHB1YmxpYzoKKyAgICBSZWYoY29u
c3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVsdDsKKyAg
ICBSZWYoVCAmcmVmKSA6IG1QdHIoJnJlZikge30KKworICAgIFJlZiAmb3BlcmF0b3I9KGNvbnN0
IFJlZiAmKSA9IGRlZmF1bHQ7CisgICAgUmVmICZvcGVyYXRvcj0oUmVmICYmKSA9IGRlZmF1bHQ7
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4g
Km1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVmICZv
dGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgIT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9w
ZXJhdG9yPD0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPD0gKm90aGVy
Lm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBS
ZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8ICpvdGhlci5tUHRyOyB9CisgICAgYm9v
bCBvcGVyYXRvcj4oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPiAqb3Ro
ZXIubVB0cjsgfQorCisgICAgVCAmZ2V0KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBUIGNvbnN0
ICZnZXQoKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAmKCkgeyBy
ZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVyYXRvciBUIGNvbnN0ICYoKSBjb25zdCB7IHJldHVybiAq
bVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAqKCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVy
YXRvciBUIGNvbnN0ICooKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgIHByaXZhdGU6Cisg
ICAgVCAqbVB0cjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQ1JlZiA9IFJl
ZjxUIGNvbnN0PjsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzc4MTc3NmM1NjA3OTIx
ZGUzMjJmZTk2NTlkODM2ZTBhMzJiNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsxLDkxIEBACisvLworLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBSZXdy
aXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVj
dG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisKKyAgcHVibGljOgor
ICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGls
ZXIsIHRydWUsIHRydWUpIHt9CisKKyAgICB+UmV3cml0ZXIoKSBvdmVycmlkZSB7IEFTU0VSVCht
RGVjbGFyZWRWYXJTdGFjay5lbXB0eSgpKTsgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0
IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtRGVjbGFyZWRWYXJTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRj
aCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbURlY2xhcmVkVmFyU3Rh
Y2suZW1wdHkoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gdmFycyA9IHN0ZDo6bW92ZShtRGVjbGFy
ZWRWYXJTdGFjay5iYWNrKCkpOworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3BfYmFjaygp
OworICAgICAgICBpZiAoIXZhcnMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgZm9yIChjb25zdCBU
VmFyaWFibGUgKnZhciA6IHZhcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmxv
Y2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBibG9jay5hcHBlbmRTdGF0ZW1lbnQoJm5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlv
biAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbURlY2xhcmVkVmFyU3RhY2su
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybU5vZGUgKnBhcmVudCA9IGdl
dFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmdldEFzQmxvY2soKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJlbnQgPSBn
ZXRQYXJlbnROb2RlKDEpOworICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVudCAmJiBncmFu
ZHBhcmVudC0+Z2V0QXNTd2l0Y2hOb2RlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5iYWNrKCkucHVzaF9iYWNrKCZkZWNs
LnN5bWJvbC52YXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4
cHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAqbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZWNsLnN5bWJvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC5p
bml0RXhwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jv
b2wgc2g6OlJld3JpdGVDYXNlRGVjbGFyYXRpb25zKFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRl
cm1CbG9jayAmcm9vdCkKK3sKKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlv
bnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU1YTg4MjE1NDc1ZDA4ZTUxYjIxNzRlZTNlMWEzYWFjYjU0NDUwYzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDUw
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEVYQU1QTEUKKy8v
ICAgIHN3aXRjaCAoZXhwcikKKy8vICAgIHsKKy8vICAgICAgY2FzZSAwOgorLy8gICAgICAgIGlu
dCB4ID0gMDsKKy8vICAgICAgICBicmVhazsKKy8vICAgICAgY2FzZSAxOgorLy8gICAgICAgIGlu
dCB5ID0gMDsKKy8vICAgICAgICB7CisvLyAgICAgICAgICBpbnQgeiA9IDA7CisvLyAgICAgICAg
fQorLy8gICAgICAgIGJyZWFrOworLy8gICAgfQorLy8gQmVjb21lcworLy8gICAgeworLy8gICAg
ICBpbnQgeDsKKy8vICAgICAgaW50IHk7CisvLyAgICAgIHN3aXRjaCAoZXhwcikKKy8vICAgICAg
eworLy8gICAgICAgIGNhc2UgMDoKKy8vICAgICAgICAgIHggPSAwOworLy8gICAgICAgICAgYnJl
YWs7CisvLyAgICAgICAgY2FzZSAxOgorLy8gICAgICAgICAgeSA9IDA7CisvLyAgICAgICAgICB7
CisvLyAgICAgICAgICAgIGludCB6ID0gMDsKKy8vICAgICAgICAgIH0KKy8vICAgICAgICAgIGJy
ZWFrOworLy8gICAgICB9CisvLyAgICB9CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUNh
c2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFkNWEz
NmM4MWI1YzcyNDE4YTZhOWJhZDE1NWEzYzQ1MzZiNmJlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2NsYXNzIEZpbmREZWNsYXJlZEdsb2Jh
bHMgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgcHVibGljOgorICAgIHN0ZDo6dW5vcmRl
cmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gbURlY2xhcmVkR2xvYmFsczsKKworICAgIEZpbmRE
ZWNsYXJlZEdsb2JhbHMoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21w
aWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBy
ZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
VEludGVybU5vZGUgKmRlY2xhcmF0b3JOb2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOwor
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworCisgICAgICAg
IGlmIChUSW50ZXJtQmluYXJ5ICppbml0Tm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRBc0JpbmFy
eU5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChzeW1ib2xOb2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworCisg
ICAgICAgIG1EZWNsYXJlZEdsb2JhbHMuaW5zZXJ0KCZ2YXIpOworCisgICAgICAgIHJldHVybiB7
ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUp
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhl
cn07CisgICAgfQorfTsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQK
K3sKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+ICZtRGVj
bGFyZWRHbG9iYWxzOworICAgIEludmFyaWFudHMgJm1PdXRJbnZhcmlhbnRzOworCisgIHB1Ymxp
YzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gJmRlY2xhcmVkR2xvYmFscywK
KyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorICAgICAgICA6IFRJbnRl
cm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSksCisgICAgICAgICAgbURlY2xhcmVkR2xv
YmFscyhkZWNsYXJlZEdsb2JhbHMpLAorICAgICAgICAgIG1PdXRJbnZhcmlhbnRzKG91dEludmFy
aWFudHMpCisgICAge30KKworICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJmdx
RGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtU3ltYm9sICZzeW1ib2xO
b2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
dmFyICAgICAgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7CisKKyAgICAgICAgaWYgKGdxRGVjbE5v
ZGUuaXNJbnZhcmlhbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dEludmFyaWFudHMu
aW5zZXJ0KHZhcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlY2xhcmVkR2xvYmFscy5m
aW5kKCZ2YXIpID09IG1EZWNsYXJlZEdsb2JhbHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmc3ltYm9sTm9kZX07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAg
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworYm9vbCBzaDo6UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21waWxlciAmY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJm91
dEludmFyaWFudHMpCit7CisgICAgRmluZERlY2xhcmVkR2xvYmFscyBmZGcoY29tcGlsZXIpOwor
ICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJld3JpdGVyIHJld3Jp
dGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7CisgICAg
aWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTMxYmNhZmJhNmNmMTdmYTljOThk
NTFlZTg1YzM2ZDMwZTdmNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUdM
T0JBTFFVQUxJRklFUkRFQ0xTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworCisjaW5jbHVk
ZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFuZCBURmll
bGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KK2NsYXNzIEludmFyaWFudHMKK3sK
KyAgcHVibGljOgorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSB7IG1JbnZh
cmlhbnRzLmluc2VydCgmdmFyKTsgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVEZpZWxkICZm
aWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorCisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBUVmFyaWFibGUgJnZhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtSW52
YXJpYW50cy5maW5kKCZ2YXIpICE9IG1JbnZhcmlhbnRzLmVuZCgpOworICAgIH0KKworICAgIGJv
b2wgY29udGFpbnMoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7CisgICAg
fQorCisgIHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IHZvaWQgKj4gbUlu
dmFyaWFudHM7Cit9OworCisvLyBUaGlzIHJld3JpdGVzIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJE
ZWNsYXJhdGlvbnMgYXMgVEludGVybURlY2xhcmF0aW9ucy4KKy8vIGBvdXRJbnZhcmlhbnRzYCBp
cyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUg
bG9zdCBieSBzdWNoIGEKKy8vIHRyYW5zZm9ybS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdy
aXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZh
cmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUdMT0JB
TFFVQUxJRklFUkRFQ0xTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUw
MTRmNDBmODFjY2FkNTAxMzM3MDY1OGJjODk0MmIwMDJkNmI4ZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcApAQCAtMCwwICsxLDQzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUg
PGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9z
ZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBz
aDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFQgKiwgY29uc3QgVCAqPjsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZt
S2V5d29yZHM7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBSZW1hcHBpbmc8VEZpZWxkPiBtb2Rp
ZmllZEZpZWxkczsKKyAgICBSZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7CisgICAg
UmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKyAgICBSZW1hcHBpbmc8VEludGVyZmFj
ZUJsb2NrPiBtSW50ZXJmYWNlQmxvY2tzOworICAgIFJlbWFwcGluZzxUU3RydWN0dXJlPiBtU3Ry
dWN0dXJlczsKKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworICAgIHN0ZDo6
c3RyaW5nIG1OZXdOYW1lQnVmZmVyOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgSW1tdXRhYmxlU3RyaW5nIG1heWJlQ3JlYXRlTmV3TmFtZShUIGNvbnN0ICZv
YmplY3QpCisgICAgeworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhvYmplY3QsIGZhbHNlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1lKE5hbWUo
b2JqZWN0KSkucmF3TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOYW1lKG9iamVj
dCkucmF3TmFtZSgpOworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZCAqY3JlYXRlUmVuYW1lZChj
b25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAg
ICAgICAgICBuZXcgVEZpZWxkKGNvbnN0X2Nhc3Q8VFR5cGUgKj4oJmdldFJlbmFtZWRPck9yaWdp
bmFsKCpmaWVsZC50eXBlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVDcmVhdGVO
ZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsK
KworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBURmllbGRMaXN0
ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKyAgICB7CisgICAg
ICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgICAgICBmb3IgKGNvbnN0
IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbmFt
ZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9yT3JpZ2luYWwo
KmZpZWxkKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKwor
ICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0
aW9uKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAgICAgICAgICBuZXcgVEZ1
bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnZXRSZW5h
bWVkT3JPcmlnaW5hbChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbi5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAg
ICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdldFBh
cmFtKGkpOworICAgICAgICAgICAgcmVuYW1lZC0+YWRkUGFyYW1ldGVyKCZnZXRSZW5hbWVkT3JP
cmlnaW5hbChwYXJhbSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmN0aW9uLmlzRGVm
aW5lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXREZWZpbmVkKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24uaGFzUHJvdG90eXBlRGVjbGFyYXRpb24o
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKwor
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxpZmllciBs
YXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpDcmVhdGUoKTsKKyAgICAgICAgbGF5
b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3Jh
Z2UoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJpbmRpbmcgICAgICAgICAgPSBpbnRlcmZh
Y2VCbG9jay5ibG9ja0JpbmRpbmcoKTsKKworICAgICAgICBhdXRvICpyZW5hbWVkID0KKyAgICAg
ICAgICAgIG5ldyBUSW50ZXJmYWNlQmxvY2soJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdO
YW1lKGludGVyZmFjZUJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdl
dFJlbmFtZWRPck9yaWdpbmFsKGludGVyZmFjZUJsb2NrLmZpZWxkcygpKSwgbGF5b3V0UXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bmFtZWQ7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAqY3JlYXRlUmVuYW1lZChjb25z
dCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3
TmFtZShzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRP
ck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworCisgICAgICAgIHJlbmFtZWQtPnNldEF0R2xvYmFsU2NvcGUoc3RydWN0dXJlLmF0R2xvYmFs
U2NvcGUoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAgY29uc3Qg
VFR5cGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFR5cGUgJnR5cGUpCisgICAgeworICAgICAgICBU
VHlwZSAqcmVuYW1lZDsKKworICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5l
dyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKnN0cnVjdHVyZSksIHR5cGUuaXNTdHJ1Y3RT
cGVjaWZpZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFj
ZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2lu
YWwoKmludGVyZmFjZUJsb2NrKSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8g
Q2FuJ3QgcmVuYW1lIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICAgICAgcmVuYW1lZCA9IG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlbmFtZWQtPm1ha2VBcnJheXModHlwZS5nZXRBcnJheVNpemVzKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNpc2UoKSk7
CisgICAgICAgIHJlbmFtZWQtPnNldEludmFyaWFudCh0eXBlLmlzSW52YXJpYW50KCkpOworICAg
ICAgICByZW5hbWVkLT5zZXRNZW1vcnlRdWFsaWZpZXIodHlwZS5nZXRNZW1vcnlRdWFsaWZpZXIo
KSk7CisgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExheW91dFF1
YWxpZmllcigpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25z
dCBUVmFyaWFibGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSkKKyAg
ICB7CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG1heWJlQ3JlYXRlTmV3TmFtZSh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXJpYWJsZS5nZXRUeXBlKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCAqdHJ5R2V0
UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGluZykKKyAg
ICB7CisgICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
ZW1hcHBpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZp
bmQoJm9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3QgPSBjcmVh
dGVSZW5hbWVkKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHJlbWFwcGluZykKKyAgICAgICAgewor
ICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OworICAgIH0KKworICAgIGNvbnN0
IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMpOworICAg
IH0KKworICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKyAgICB9CisKKyAgICBjb25zdCBURnVuY3Rpb24gKnRy
eUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKKyAgICB9CisKKyAgICBjb25z
dCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbChp
bnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOworICAgIH0KKworICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1TdHJ1Y3R1
cmVzKTsKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUVHlw
ZSAmdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0eXBlLCBz
dGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKKyAgICB9CisKKyAgICBj
b25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwgJm1WYXJp
YWJsZXMpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQg
JmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKKyAgICB7CisgICAgICAgIGNv
bnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7CisgICAgICAgIGlmIChyZW5h
bWVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKyAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xU
eXBlKCk7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0eToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7
CisgICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5kKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZpZWxkLCBi
b29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5n
SW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50eXBlKCks
IHRydWUpKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChyZWN1cnNpdmUpOworICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExp
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVsZCwgdHJ1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5jdGlvbikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFyZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24u
Z2V0UGFyYW1Db3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291
bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9
ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBh
cmFtLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZh
Y2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbmVl
ZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8CisgICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKyAg
ICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFt
aW5nSW1wbChzdHJ1Y3R1cmUpIHx8CisgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRz
UmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisgICAgfQorCisgICAgYm9vbCBu
ZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWluZygqc3Ry
dWN0dXJlLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJsb2NrKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRlcmZhY2VC
bG9jaywgcmVjdXJzaXZlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgbmVl
ZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwK
KyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJsZS5nZXRU
eXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRDb21waWxl
ciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5n
PiAma2V5d29yZHMpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0
cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisgICAgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAg
ICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZyVmFyID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFyKTsKKyAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzeW1ib2xOb2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRG
dW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUp
CisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5n
ZXRGdW5jdGlvbigpOworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJlbmFtZWRP
ck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNQcm90b05v
ZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3Qo
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0Rl
Zk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZm
dW5jICAgICAgICAgICAgICAgICAgID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsKKyAg
ICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
KyAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJvdG9Ob2RlICAgPSBuZXcgVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVz
dWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1Y3Rvcigp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3JlZ2F0ZU5v
ZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodHlwZSwgdHJ1ZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBlID0gZ2V0
UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1B
Z2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVl
bmNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0
RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBn
ZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFnZ3Jl
Z2F0ZU5vZGUuZ2V0T3AoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwockZ1bmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1
bmN0aW9uQ2FsbChyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5j
ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmV3cml0
ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+ICZrZXl3b3JkcykKK3sKKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRHZW4s
IGtleXdvcmRzKTsKKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlS2V5d29yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTYyYmM3OWI0MTE4ZjljNzQ0NzVjMjY4YjY5ZGU2
MjVjNTdmNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jk
cy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19I
XworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFtZXNwYWNl
IHNoCit7CisKKy8vIFRoaXMgd2Fsa3MgdGhlIHRyZWUgYW5kIHJlbmFtZXMgYWxsIG5hbWVzIHRo
YXQgY29uZmxpY3Qgd2l0aCB0aGUgaW5wdXQgYGtleXdvcmRzYC4KK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gJmtl
eXdvcmRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWMwMzdkNTI5MGFkZjIzMjI1ZWI4OGRkMGZiNzc4
OWFhZTU0ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdz
LmNwcApAQCAtMCwwICsxLDIwNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFNtYWxsTXVsdGlTZXQKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBFbnRyeQorICAg
IHsKKyAgICAgICAgVCBlbGVtOworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsKKworICAg
IGNvbnN0IEVudHJ5ICpmaW5kKGNvbnN0IFQgJngpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh4ID09
IGVudHJ5LmVsZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZlbnRy
eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBzaXplX3QgbXVsdGlwbGljaXR5KGNvbnN0IFQgJngpIGNvbnN0CisgICAgewor
ICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5kKHgpOworICAgICAgICByZXR1cm4gZW50
cnkgPyBlbnRyeS0+Y291bnQgOiAwOworICAgIH0KKworICAgIGNvbnN0IEVudHJ5ICZpbnNlcnQo
Y29uc3QgVCAmeCkKKyAgICB7CisgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgp
OworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZW50cnktPmNv
dW50OworICAgICAgICAgICAgcmV0dXJuICplbnRyeTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FbnRyaWVzLnB1c2hfYmFjayh7eCwgMX0pOworICAg
ICAgICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgY2xlYXIoKSB7IG1FbnRyaWVzLmNsZWFyKCk7IH0KKworICAgIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisKKyAgICBzaXplX3QgdW5pcXVlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQorCisgIHByaXZhdGU6CisgICAg
QU5HTEVfSU5MSU5FIEVudHJ5ICpmaW5kTXV0YWJsZShjb25zdCBUICZ4KSB7IHJldHVybiBjb25z
dF9jYXN0PEVudHJ5ICo+KGZpbmQoeCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3Rv
cjxFbnRyeT4gbUVudHJpZXM7Cit9OworCitjb25zdCBUVmFyaWFibGUgKkdldFZhcmlhYmxlKFRJ
bnRlcm1Ob2RlICZub2RlKQoreworICAgIFRJbnRlcm1UeXBlZCAqdHlOb2RlID0gbm9kZS5nZXRB
c1R5cGVkKCk7CisgICAgQVNTRVJUKHR5Tm9kZSk7CisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4g
JnN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Ns
YXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgU21hbGxNdWx0aVNl
dDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxlIGJ1ZmZlcgorICAg
IFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAgflJld3JpdGVyKCkgb3Zl
cnJpZGUgeyBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsgfQorCisgICAgUmV3cml0ZXIoVENv
bXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisg
ICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdh
dGUgJmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobVZhckJ1
ZmZlci5lbXB0eSgpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBhZ2dyZWdh
dGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAgICBhdXRvIGdl
dFBhcmFtUXVhbGlmaWVyID0gWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgJnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZwYXJhbVR5cGUgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAgICAgICAgY29u
c3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xFbnYuaXNSZWZl
cmVuY2UocGFyYW0pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpUaHJl
YWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRR
dWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAg
IHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
SW5PdXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgKnZhciA9IEdldFZhcmlhYmxlKCphcmdzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWdodEFsaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBoYXNJbmRldGVybWluYXRlVmFy
ID0gbVZhckJ1ZmZlci5maW5kKG51bGxwdHIpOworCisgICAgICAgIGlmICghbWlnaHRBbGlhcykK
KyAgICAgICAgeworICAgICAgICAgICAgbWlnaHRBbGlhcyA9IGhhc0luZGV0ZXJtaW5hdGVWYXIg
JiYgbVZhckJ1ZmZlci51bmlxdWVTaXplKCkgPiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1pZ2h0QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYXJnKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciAgICAgICA9IEdl
dFZhcmlhYmxlKCphcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1R
dWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW5k
ZXRlcm1pbmF0ZVZhciB8fCBtVmFyQnVmZmVyLm11bHRpcGxpY2l0eSh2YXIpID4gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gJm1TeW1i
b2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgib3V0IiksIGFyZy0+Z2V0VHlwZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0g
Jm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5hbWUoImlub3V0IiksIGFyZy0+Z2V0VHlwZSgpLCAqbmV3IFRJbnRlcm1TZXF1
ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1WYXJCdWZmZXIuY2xlYXIoKTsKKworICAgICAg
ICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVPdXRBcmdzKFRDb21waWxlciAmY29tcGlsZXIsIFRJ
bnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCit7CisgICAgUmV3cml0ZXIg
cmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxk
Um9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MmI3NDdhM2U3ZGVm
ZTI0YmRiNTllNjIxY2E3NDUwZTMxY2Q0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZU91dEFyZ3MuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdT
X0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JF
V1JJVEVPVVRBUkdTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVy
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIGUuZy46
CisvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50IHkpKi8KKy8vICAgIGZvbyh6
LCB3KTsKKy8vIGJlY29tZXMKKy8vICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKy8vIHVubGVz
cyBgemAgYW5kIGB3YCBhcmUgZGV0ZWN0ZWQgdG8gbmV2ZXIgYWxpYXMuCisvLyBUaGUgdHJhbnNs
YXRlZCBleGFtcGxlIGVmZmVjdGl2ZWx5IGJlaGF2ZXMgdGhlIHNhbWUgYXM6CisvLyAgICBpbnQg
XzE7CisvLyAgICBpbnQgXzIgPSB3OworLy8gICAgZm9vKF8xLCBfMik7CisvLyAgICB6ID0gXzE7
CisvLyAgICB3ID0gXzI7CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZU91dEFyZ3MoVENv
bXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVu
dik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBp
cGVsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzN2UyMzMwMGFiOTllMTBmYjgwYWM4ZjVmZjBjNmUx
ODA2NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVz
LmNwcApAQCAtMCwwICsxLDkzOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNzdHJpbmc+Cisj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQ
aXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5l
Tm9PcHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kTWFp
bi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVp
bGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2
ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK25hbWVzcGFjZQoreworCit1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJlZF9z
ZXQ8Y29uc3QgVFZhcmlhYmxlICo+OwordXNpbmcgVmFyaWFibGVMaXN0ID0gc3RkOjp2ZWN0b3I8
Y29uc3QgVFZhcmlhYmxlICo+OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitzdHJ1Y3Qg
UGlwZWxpbmVTdHJ1Y3RJbmZvCit7CisgICAgVmFyaWFibGVTZXQgcGlwZWxpbmVWYXJpYWJsZXM7
CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3Q7CisgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAgICBjb25z
dCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworCisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZVN0cnVjdC5pc1Rv
dGFsbHlFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxpbmVWYXJp
YWJsZXMuZW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZVN0cnVjdC5p
c1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaXBlbGluZVZhcmlhYmxlcy5l
bXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK307
CisKK2NsYXNzIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QgOiBwcml2YXRlIFRJbnRlcm1SZWJ1aWxk
Cit7CisgIHByaXZhdGU6CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBTeW1i
b2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAgVmFy
aWFibGVMaXN0IG1QaXBlbGluZVZhcmlhYmxlTGlzdDsKKyAgICBJZEdlbiAmbUlkR2VuOworICAg
IFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKworICBwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
RXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwKKyAgICAgICAgICAgICAgICAgICAgIFRDb21w
aWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICBTeW1ib2xF
bnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFu
dHMpCisgICAgeworICAgICAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IHNlbGYoY29tcGlsZXIs
IGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKTsKKyAgICAgICAgaWYgKCFz
ZWxmLmV4ZWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBvdXQgPSBzZWxmLm1JbmZvOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1QaXBlbGluZShwaXBl
bGluZSksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1JbnZh
cmlhbnRzKGludmFyaWFudHMpLAorICAgICAgICAgIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisg
ICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKyAgICB7CisgICAgICAgIGlmICghcmVi
dWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5lbXB0eSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmcGlwZWxp
bmVTdHJ1Y3QgPSBbJl0oKSAtPiBjb25zdCBUU3RydWN0dXJlICYgeworICAgICAgICAgICAgaWYg
KG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKm1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhci0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KHJvb3Qs
IHNlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKTsKKworICAgICAgICBNb2RpZmllZFN0
cnVjdE1hY2hpbmVyaWVzIG1vZGlmaWVkTWFjaGluZXJpZXM7CisgICAgICAgIGNvbnN0IGJvb2wg
bW9kaWZpZWQgPSBUcnlDcmVhdGVNb2RpZmllZFN0cnVjdCgKKyAgICAgICAgICAgIG1TeW1ib2xF
bnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVs
aW5lU3RydWN0LAorICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCksIG1vZGlmaWVkTWFjaGluZXJpZXMpOworCisgICAgICAg
IGlmIChtb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZS50
eXBlICE9IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCghbVBp
cGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBj
b25zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIGF1dG8gZ2V0RnVuY3Rpb24gPSBbXShzaDo6VElu
dGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlY2wpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGlu
ZXJpZXMuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkgPSBtb2Rp
ZmllZE1hY2hpbmVyaWVzLmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtYWNoaW5lcnku
bW9kaWZpZWRTdHJ1Y3QpOworCisgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhuZXcgVElu
dGVybURlY2xhcmF0aW9ueworICAgICAgICAgICAgICAgICAgICAmQ3JlYXRlU3RydWN0VHlwZVZh
cmlhYmxlKG1TeW1ib2xUYWJsZSwgKm1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCl9KTsKKworICAg
ICAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3JpZ2luYWxU
b01vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY01v
ZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobWFj
aGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPT0gc2l6ZSAt
IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jT3Jp
Z2luYWxUb01vZGlmaWVkID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9k
aWZpZWQpOworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jTW9kaWZpZWRUb09yaWdpbmFs
ID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworCisgICAg
ICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBpcGVsaW5l
U3RydWN0OworICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5leHRlcm5h
bCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hpbmVyeS5tb2RpZmll
ZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSW5m
by5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAg
IG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0gJnBpcGVsaW5lU3RydWN0OworICAgICAg
ICB9CisKKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3Qp
LCBzZXEpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAg
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlv
blBvc3QoVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworCisg
ICAgICAgIGlmIChtUGlwZWxpbmUudXNlcyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBtSW5mby5waXBlbGlu
ZVZhcmlhYmxlcy5lbmQoKSk7CisgICAgICAgICAgICBtSW5mby5waXBlbGluZVZhcmlhYmxlcy5p
bnNlcnQoJnZhcik7CisgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNr
KCZ2YXIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZGVjbE5vZGU7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAmY3JlYXRl
SW50ZXJuYWxQaXBlbGluZVN0cnVjdChUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1TZXF1ZW5j
ZSAmb3V0RGVjbFNlcSkKKyAgICB7CisgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcgVEZpZWxk
TGlzdCgpOworCisgICAgICAgIHN3aXRjaCAobVBpcGVsaW5lLnR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6OlRleHR1cmU6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlh
YmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bUludmFyaWFudHMuY29udGFpbnMoKnZhcikpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSB2YXJUeXBlLmdldEJhc2ljVHlwZSgp
OworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVFbnYgPSBt
U3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvICp0ZXh0dXJlRW52VHlwZSAgICAgICAgID0gbmV3IFRUeXBlKCZ0ZXh0dXJlRW52LCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJUeXBlLmlzQXJyYXkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudlR5cGUt
Pm1ha2VBcnJheXModmFyVHlwZS5nZXRBcnJheVNpemVzKCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBURmllbGQodGV4dHVyZUVudlR5cGUsIHZhci0+bmFtZSgpLCBrTm9T
b3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1Q
aXBlbGluZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gJnR5cGUgID0gQ2xvbmVUeXBlKHZhci0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUoKSwga05v
U291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZpZWxk
cy5wdXNoX2JhY2soZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW52YXJpYW50
cy5jb250YWlucygqdmFyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbUludmFyaWFudHMuaW5zZXJ0KCpmaWVsZCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5l
LmdldFN0cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisgICAgICAg
IGF1dG8gJnMgPSAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgcGlwZWxpbmVTdHJ1Y3RO
YW1lLnJhd05hbWUoKSwgJmZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaXBlbGluZVN0cnVjdE5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAgICAgICBvdXREZWNsU2Vx
LnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ueyZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFi
bGUobVN5bWJvbFRhYmxlLCBzKX0pOworCisgICAgICAgIHJldHVybiBzOworICAgIH0KK307CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gQ3Jl
YXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCkK
K3sKKyAgICBBU1NFUlQocGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKworICAgIFBp
cGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisKKyAgICBhdXRv
IHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIgPSBbJl0oKSB7CisgICAgICAgIEFTU0VSVCgh
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworICAgICAgICBwaXBlbGluZU1haW5Mb2Nh
bFZhci5leHRlcm5hbCA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgc3lt
Ym9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKyAgICAgICAgICAgIHBpcGVsaW5l
LmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBpcGVsaW5lOjpWYXJp
YW50OjpPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgIH07CisKKyAgICBhdXRv
IHBvcHVsYXRlRGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAgICAgICAg
QVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgIHBpcGVsaW5l
TWFpbkxvY2FsVmFyLmludGVybmFsID0KKyAgICAgICAgICAgICZDcmVhdGVJbnN0YW5jZVZhcmlh
YmxlKHN5bWJvbFRhYmxlLCAqcGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlw
ZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisgICAgfTsKKworICAgIGlmIChwaXBlbGluZS50
eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgIHsKKyAgICAgICAgcG9wdWxh
dGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHBp
cGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisg
ICAgeworICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisKKyAgICAgICAg
aWYgKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAgICAgICAgICBw
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9IHBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVy
bmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG9w
dWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAoIXBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgIHsKKyAgICAgICAg
cG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorCisgICAgcmV0
dXJuIHBpcGVsaW5lTWFpbkxvY2FsVmFyOworfQorCitjbGFzcyBQaXBlbGluZUZ1bmN0aW9uRW52
Cit7CisgIHByaXZhdGU6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7CisgICAgU3ltYm9sRW52
ICZtU3ltYm9sRW52OworICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworICAgIElkR2Vu
ICZtSWRHZW47CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlvbnM7Cisg
ICAgY29uc3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0OworICAg
IFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsKKworICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBURnVuY3Rpb24gKiwgY29uc3QgVEZ1bmN0aW9uICo+
IG1GdW5jTWFwOworCisgIHB1YmxpYzoKKyAgICBQaXBlbGluZUZ1bmN0aW9uRW52KFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBpcGVsaW5l
RnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVj
dHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhcikKKyAgICAgICAgOiBtQ29tcGls
ZXIoY29tcGlsZXIpLAorICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKyAgICAgICAg
ICBtU3ltYm9sVGFibGUoc3ltYm9sRW52LnN5bWJvbFRhYmxlKCkpLAorICAgICAgICAgIG1JZEdl
bihpZEdlbiksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlw
ZWxpbmVGdW5jdGlvbnMocGlwZWxpbmVGdW5jdGlvbnMpLAorICAgICAgICAgIG1QaXBlbGluZVN0
cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBp
cGVsaW5lTWFpbkxvY2FsVmFyKQorICAgIHt9CisKKyAgICBib29sIGlzT3JpZ2luYWxQaXBlbGlu
ZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtUGlwZWxpbmVGdW5jdGlvbnMuZmluZCgmZnVuYykgIT0gbVBpcGVsaW5lRnVuY3Rpb25z
LmVuZCgpOworICAgIH0KKworICAgIGJvb2wgaXNVcGRhdGVkUGlwZWxpbmVGdW5jdGlvbihjb25z
dCBURnVuY3Rpb24gJmZ1bmMpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0gbUZ1bmNN
YXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlmIChpdCA9PSBtRnVuY01hcC5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biAmZnVuYyA9PSBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0
VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihmdW5jKSB8fCBpc1VwZGF0ZWRQaXBlbGlu
ZUZ1bmN0aW9uKGZ1bmMpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKm5ld0Z1bmM7CisK
KyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworICAgICAgICBpZiAoaXQg
PT0gbUZ1bmNNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNN
YWluID0gZnVuYy5pc01haW4oKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiBtUGlwZWxp
bmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VS
VChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRW
b2lkKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VS
ZXR1cm5UeXBlKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVTdHJ1
Y3QuZXh0ZXJuYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWlu
ICYmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvblZlcnRleEds
b2JhbHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLnR5cGUg
PT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJp
YWJsZXM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVs
aW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sobmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRh
YmxlLCBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+dHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rp
b25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGlu
ZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7CisgICAg
ICAgICAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9CisgICAg
ICAgICAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29tcGlsZXIp
LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
KnRleHR1cmVFbnYgPSBmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCkuc2l6ZSgpID09
IDIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiB0
ZXh0dXJlRW52LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoe2ZpZWxk
LT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlICZ0eXBlICAgICA9ICpuZXcgVFR5cGUoKnN1YmZpZWxkLT50eXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXplcygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwgJnR5
cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
cy5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFk
ZE9yaWdpbmFsTmFtZSh2YXItPnVuaXF1ZUlkKCkuZ2V0KCksIGZpZWxkLT5uYW1lKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxl
LCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0
YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9IG1QaXBl
bGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKTsK
KyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFVJbnQpLCBuYW1lLnN5bWJvbFR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgbmV3RnVuYyAgID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0o
bVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKyAgICAgICAgICAgICAgICBtU3lt
Ym9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UoKSk7CisgICAgICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsID0g
dmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBl
bGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIu
aXNUb3RhbGx5RnVsbCgpKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICp2YXI7CisgICAgICAgICAgICAgICAgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZTsKKworICAgICAgICAgICAgICAgIGlmIChpc01haW4gJiYgIW1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6
VmFyaWFudDo6TW9kaWZpZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
bVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
bVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmludGVybmFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFu
dDo6T3JpZ2luYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gbVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IG1QaXBlbGluZS5leHRlcm5hbEFkZHJlc3NTcGFjZSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJlbmNlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlwZTo6VmVy
dGV4SW46CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpGcmFn
bWVudEluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBc1JlZmVyZW5jZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIGFkZHJlc3NTcGFjZSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9uZUZ1bmN0
aW9uQW5kUHJlcGVuZFBhcmFtKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgKnZhcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GdW5jTWFwWyZmdW5jXSAgID0gbmV3RnVuYzsK
KyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0Z1bmMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXdGdW5jOworICAgIH0KKworICAgIFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSAqY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKAorICAg
ICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpCisgICAgeworICAg
ICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
OworICAgICAgICBpZiAoIWlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpICYmICFpc1Vw
ZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1bmMg
PSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZuZXdGdW5jKTsKKyAgICB9Cit9OworCitjbGFzcyBVcGRhdGVQaXBl
bGluZUZ1bmN0aW9ucyA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAg
ICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRT
dHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKyAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+
ICZtUGlwZWxpbmVNYWluTG9jYWxWYXI7CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworICAg
IFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKyAgICBjb25zdCBURnVuY3Rpb24gKm1GdW5jT3Jp
Z2luYWxUb01vZGlmaWVkOworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1bmNNb2RpZmllZFRvT3Jp
Z2luYWw7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBib29sIFRocmVhZFBpcGVsaW5lKFRDb21w
aWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5l
ICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVu
b3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZwaXBlbGluZUZ1bmN0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBl
bGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3Bl
ZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAg
ICB7CisgICAgICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIHNlbGYoY29tcGlsZXIsIHBpcGVs
aW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIsIGlkR2VuLCBzeW1ib2xF
bnYsIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgIGlmICghc2VsZi5yZWJ1
aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIFVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4g
JnBpcGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5l
U2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2FsVmFyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdp
bmFsKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisg
ICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3Qo
cGlwZWxpbmVTdHJ1Y3QpLAorICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGlu
ZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAg
ICAgIG1FbnYoY29tcGlsZXIsCisgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisgICAgICAgICAg
ICAgICBpZEdlbiwKKyAgICAgICAgICAgICAgIHBpcGVsaW5lLAorICAgICAgICAgICAgICAgcGlw
ZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAg
ICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbUZ1bmNPcmlnaW5hbFRv
TW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisgICAgICAgICAgbUZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWwoZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICB9CisKKyAgICBjb25zdCBU
VmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rpb24gJnBp
cGVsaW5lRnVuYykKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZUZ1bmMuaXNNYWluKCkgJiYg
KG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxpbmVNYWlu
TG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobVBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lRnVuYy5nZXRQYXJhbUNvdW50KCkgPiAw
KTsKKyAgICAgICAgICAgIHJldHVybiAqcGlwZWxpbmVGdW5jLmdldFBhcmFtKDApOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5hbFBpcGVsaW5lVmFy
aWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCht
YWluRnVuYy5pc01haW4oKSk7CisgICAgICAgIGlmIChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0
ZXJuYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAgICAgICAg
cmV0dXJuICptYWluRnVuYy5nZXRQYXJhbSgwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBv
c3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNhbGxOb2RlLmlzQ29uc3RydWN0b3IoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRDYWxsZWRG
dW5jID0gKmNhbGxOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1FbnYuaXNP
cmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYykpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rp
b24ob2xkQ2FsbGVkRnVuYyk7CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb2xkT3du
ZXJGdW5jID0gZ2V0UGFyZW50RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25l
ckZ1bmMpOworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdPd25lckZ1bmMgPSBtRW52
LmdldFVwZGF0ZWRGdW5jdGlvbigqb2xkT3duZXJGdW5jKTsKKworICAgICAgICAgICAgcmV0dXJu
ICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAgICAgICAg
bmV3Q2FsbGVkRnVuYywgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqY2FsbE5vZGUuZ2V0U2VxdWVuY2UoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRlcm5hbFBp
cGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICZmdW5jUHJvdG9Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYuY3Jl
YXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBpZiAo
bmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZnVuY1Byb3RvTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm5ld0Z1bmNQcm90
b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2aXNpdE1haW4oZnVuY0RlZk5vZGUpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZpc2l0Tm9u
TWFpbihmdW5jRGVmTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAm
dmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAg
IHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1
bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVCghZnVuY1By
b3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7CisKKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYuY3JlYXRl
VXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBpZiAobmV3
RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZnVuY0RlZk5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMg
PSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKCFmdW5j
LmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5n
ZXRCb2R5KCk7CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
bihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAmdmlz
aXRNYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAgIHsKKyAg
ICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1bmNEZWZO
b2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVChmdW5jUHJvdG9Ob2Rl
LmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5jcmVhdGVVcGRhdGVk
RnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlmIChuZXdGdW5jUHJv
dG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVm
Tm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICpuZXdG
dW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4o
KSk7CisKKyAgICAgICAgYXV0byBjYWxsTW9kaWZpZWRUb09yaWdpbmFsID0gWyZdKFRJbnRlcm1C
bG9jayAmYm9keSkgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5p
bnRlcm5hbCk7CisgICAgICAgICAgICBpZiAoIW1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRUb09yaWdp
bmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4
dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9
IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAg
ICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
RnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNNb2RpZmllZFRvT3JpZ2lu
YWwsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bSwgb30pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQgPSBbJl0oVEludGVybUJs
b2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlu
dGVybmFsKTsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBU
SW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworICAgICAg
ICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1
bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jT3JpZ2luYWxUb01vZGlmaWVk
LCBuZXcgVEludGVybVNlcXVlbmNle28sIG19KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgVEludGVybUJsb2NrICpib2R5ID0gZnVuY0RlZk5vZGUuZ2V0Qm9keSgpOwor
CisgICAgICAgIGlmIChtUGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25Jbk1haW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworCisgICAgICAgICAgICBhdXRvICpuZXdCb2R5
ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVt
ZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFs
fSk7CisKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6
SW52b2NhdGlvblZlcnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlw
ZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBzdHJ1Y3QgaW5zdGFuY2Ugd2l0aCBy
ZWZlcmVuY2VzIHRvIGdsb2JhbCBwaXBlbGluZSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciAg
ICAgICAgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxk
LT50eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQtPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnN5bWJvbCAg
ICAgPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICAgICAgICAgICAgICBhdXRvICZh
Y2Nlc3NOb2RlID0gQWNjZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwg
dmFyLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWduTm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAobVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVsaW5l
U3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChmdW5j
LmdldFBhcmFtQ291bnQoKSA+PSAyICogZmllbGRzLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
c2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVsZHMuc2l6
ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogZmllbGRz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ0ZXh0dXJlUGFyYW0gPSAqZnVuYy5nZXRQYXJhbShwYXJhbUluZGV4KyspOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnNhbXBsZXJQYXJhbSA9ICpmdW5jLmdldFBhcmFt
KHBhcmFtSW5kZXgrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnbyA9IFsmXShUSW50
ZXJtVHlwZWQgJmVudiwgY29uc3QgaW50ICppbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICZ0ZXh0dXJlRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1t
dXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkICZzYW1wbGVyRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1tdXRhYmxlU3Ry
aW5nKCJzYW1wbGVyIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1rQXNzaWdu
ID0gWyZdKFRJbnRlcm1UeXBlZCAmZmllbGQsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJh
dG9yOjpFT3BBc3NpZ24sICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
YW1lKCJhZGRyZXNzb2YiKSwgZmllbGQuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7
JkFjY2Vzc0luZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBpbmRleCl9KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxkLCB0ZXh0dXJlUGFy
YW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudCht
a0Fzc2lnbihzYW1wbGVyRmllbGQsIHNhbXBsZXJQYXJhbSkpOworICAgICAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZW52ID0gQWNjZXNzRmll
bGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwgZmllbGQtPm5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZlbnZUeXBlID0gZW52LmdldFR5cGUoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZW52VHlwZS5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5pc0FycmF5
T2ZBcnJheXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIG4gPSBzdGF0
aWNfY2FzdDxpbnQ+KGVudlR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvKGVudiwgJmkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZ28oZW52LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZS50
eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKyAg
ICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BBc3NpZ24sCisgICAgICAgICAgICAgICAg
ICAgICZBY2Nlc3NGaWVsZEJ5SW5kZXgoKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRlcm5hbFBp
cGVsaW5lVmFyaWFibGUoZnVuYykpLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZSht
U3ltYm9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFy
aWFibGUoZnVuYykpKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIW1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntt
UGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWx9KTsKKyAgICAgICAgICAgICAgICBjYWxsTW9k
aWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworCisgICAgICAgICAgICBpZiAoIW1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJh
bmNoKAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcFJldHVybiwgbmV3IFRJbnRl
cm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7CisgICAgICAg
ICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKworICAgICAgICAg
ICAgYXV0byAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5M
b2NhbFZhci5pbnRlcm5hbH0pOworICAgICAgICAgICAgY2FsbE1vZGlmaWVkVG9PcmlnaW5hbCgq
bmV3Qm9keSk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9keSk7Cisg
ICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAg
IGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9Cit9Owor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFVwZGF0ZVBpcGVsaW5lU3ltYm9scyhQ
aXBlbGluZTo6VHlwZSBwaXBlbGluZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBU
Q29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJpYWJsZVNldCAmcGlwZWxp
bmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxU
VmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2FsVmFyKQoreworICAgIGF1dG8gbWFwID0gWyZdKGNv
bnN0IFRGdW5jdGlvbiAqb3duZXIsIFRJbnRlcm1TeW1ib2wgJnN5bWJvbCkgLT4gVEludGVybU5v
ZGUgJiB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7
CisgICAgICAgIGlmIChwaXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IHBpcGVsaW5lVmFy
aWFibGVzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAq
c3RydWN0SW5zdGFuY2VWYXI7CisgICAgICAgIGlmIChvd25lci0+aXNNYWluKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7Cisg
ICAgICAgICAgICBzdHJ1Y3RJbnN0YW5jZVZhciA9IHBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVy
bmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKG93bmVyLT5nZXRQYXJhbUNvdW50KCkgPiAwKTsKKyAgICAgICAgICAgIHN0cnVjdEluc3Rh
bmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChz
dHJ1Y3RJbnN0YW5jZVZhcik7CisgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3RydWN0SW5z
dGFuY2VWYXIsIHZhci5uYW1lKCkpOworICAgIH07CisgICAgcmV0dXJuIE1hcFN5bWJvbHMoY29t
cGlsZXIsIHJvb3QsIG1hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wg
UmV3cml0ZVBpcGVsaW5lKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAg
IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUU3RydWN0dXJlPiAmb3V0U3RydWN0KQoreworICAgIEFTU0VSVChvdXRTdHJ1Y3QuaXNU
b3RhbGx5RW1wdHkoKSk7CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGls
ZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBwc2k7CisgICAg
aWYgKCFHZW5lcmF0ZVBpcGVsaW5lU3RydWN0OjpFeGVjKHBzaSwgY29tcGlsZXIsIHJvb3QsIGlk
R2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHNpLmlzRW1wdHkoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlv
bnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZhcmlhYmxl
ICZ2YXIpIHsKKyAgICAgICAgcmV0dXJuIHBzaS5waXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIp
ICE9IHBzaS5waXBlbGluZVZhcmlhYmxlcy5lbmQoKTsKKyAgICB9KTsKKworICAgIGF1dG8gcGlw
ZWxpbmVNYWluTG9jYWxWYXIgPQorICAgICAgICBDcmVhdGVQaXBlbGluZU1haW5Mb2NhbFZhcihz
eW1ib2xUYWJsZSwgcGlwZWxpbmUsIHBzaS5waXBlbGluZVN0cnVjdCk7CisKKyAgICBpZiAoIVVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zOjpUaHJlYWRQaXBlbGluZSgKKyAgICAgICAgICAgIGNvbXBp
bGVyLCByb290LCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBzaS5waXBlbGluZVN0cnVj
dCwgcGlwZWxpbmVNYWluTG9jYWxWYXIsCisgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBw
c2kuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGlwZWxpbmUu
Z2xvYmFsSW5zdGFuY2VWYXIpCisgICAgeworICAgICAgICBpZiAoIVVwZGF0ZVBpcGVsaW5lU3lt
Ym9scyhwaXBlbGluZS50eXBlLCBjb21waWxlciwgcm9vdCwgc3ltYm9sRW52LCBwc2kucGlwZWxp
bmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5l
TWFpbkxvY2FsVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFQcnVuZU5vT3BzKCZjb21waWxlciwgJnJvb3QsICZj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBvdXRTdHJ1Y3QgPSBwc2kucGlwZWxpbmVTdHJ1Y3Q7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6UmV3cml0
ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZhbmdsZVVu
aWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZp
bnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVjdHMgJm91
dFN0cnVjdHMpCit7CisgICAgc3RydWN0IEluZm8KKyAgICB7CisgICAgICAgIFBpcGVsaW5lOjpU
eXBlIHBpcGVsaW5lVHlwZTsKKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91
dFN0cnVjdDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZhcjsKKyAg
ICB9OworCisgICAgSW5mbyBpbmZvc1tdID0geworICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Oklu
c3RhbmNlSWQsIG91dFN0cnVjdHMuaW5zdGFuY2VJZCwgbnVsbHB0cn0sCisgICAgICAgIHtQaXBl
bGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwKKyAgICAg
ICAge1BpcGVsaW5lOjpUeXBlOjpOb25Db25zdGFudEdsb2JhbHMsIG91dFN0cnVjdHMubm9uQ29u
c3RhbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpBbmdsZVVu
aWZvcm1zLCBvdXRTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMsICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5z
dGFuY2VWYXJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywgb3V0U3Ry
dWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZl
cnRleEluLCBvdXRTdHJ1Y3RzLnZlcnRleEluLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5l
OjpUeXBlOjpWZXJ0ZXhPdXQsIG91dFN0cnVjdHMudmVydGV4T3V0LCBudWxscHRyfSwKKyAgICAg
ICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51
bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50T3V0LCBvdXRTdHJ1Y3Rz
LmZyYWdtZW50T3V0LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJbnZvY2F0
aW9uVmVydGV4R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uVmVydGV4R2xvYmFscywgbnVs
bHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
cywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICB9
OworCisgICAgZm9yIChJbmZvICZpbmZvIDogaW5mb3MpCisgICAgeworICAgICAgICBQaXBlbGlu
ZSBwaXBlbGluZXtpbmZvLnBpcGVsaW5lVHlwZSwgaW5mby5nbG9iYWxJbnN0YW5jZVZhcn07Cisg
ICAgICAgIGlmICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxp
bmUsIHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby5vdXRTdHJ1Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5l
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc5MWJhODJiNGU5Njc3ZDJjMjk3NGY5MTRiN2UzNDgwYjBlODliNTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5oCkBAIC0w
LDAgKzEsNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9s
RW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUaGlzIHJld3JpdGVzIGFsbCBwaXBlbGlu
ZXMuCisvLworLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisvLyAgICAtIERpc2NvdmVyIGFsbCB2YXJp
YWJsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKy8vICAgIC0gTW92ZSB0aGUgdmFy
aWFibGVzIGludG8gYW4gaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGluc3RhbmNlIGFuZCB1cGRh
dGUgb2xkIHZhcmlhYmxlcyB0byBiZQorLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3RlYWQuCisv
LyAgICAtIERlcGVuZGVuY3kgaW5qZWN0IHRoZSBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgdG8g
YWxsIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB2YXJpYWJsZXMgZnJvbQorLy8gICAgICB0aGUgc3Ry
dWN0LgorLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3JlYXRlZCBp
ZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisvLyAgICAgIGV4
dGVybmFsIGFuZCBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3RzIGFyZSB0aGUgc2FtZS4KKy8vICAg
IC0gQWRkIGBtYWluYCBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlIGZvciB0aGUgZXh0ZXJuYWwg
cGlwZWxpbmUgc3RydWN0IGFzIG5lZWRlZC4KKy8vICAgIC0gSW5zaWRlIGBtYWluYCwgbWFwIHRo
ZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRpZmZlciBh
bmQgaXMgcHJvdmlkZWQKKy8vICAgICAgYXMgYSBwYXJhbWV0ZXIgdG8gYG1haW5gLgorLy8gICAg
LSBJbnNpZGUgYG1haW5gLCBtYXAgdGhlIGludGVybmFsIHN0cnVjdCB0byB0aGUgZXh0ZXJuYWwg
c3RydWN0IGlmIHRoZXkgZGlmZmVyIGFuZCBpcyByZXR1cm5lZAorLy8gICAgICBmcm9tIGBtYWlu
YC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlUGlwZWxpbmVzKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAm
aWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0cyAmb3V0U3Ry
dWN0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTc3YzFhNTg1NTFiMzJjOWZmNmNkYzllN2JhZWIzOGNhODZiZGQyYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwCkBAIC0w
LDAgKzEsMzc2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVs
cGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvQXNO
b2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVi
dWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCitib29sIElz
T3V0UGFyYW0oY29uc3QgVFR5cGUgJnBhcmFtVHlwZSkKK3sKKyAgICBjb25zdCBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNoIChxdWFsKQorICAg
IHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZlY3Rv
ckFjY2VzcyhUSW50ZXJtQmluYXJ5ICZiaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gYmlu
YXJ5LmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5k
aXJlY3Q6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSA9IGJp
bmFyeS5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkg
fHwgbGVmdFR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEFTU0VSVChJc1NjYWxhckJhc2ljVHlwZShiaW5hcnkuZ2V0VHlwZSgpKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJc1ZlY3RvckFjY2VzcyhUSW50ZXJtTm9kZSAm
bm9kZSkKK3sKKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBJc1ZlY3RvckFjY2VzcygqYmluKTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBEaWZmZXJzIGZyb20gSXNBc3NpZ25tZW50IGluIHRoYXQgaXQg
ZG9lcyBub3QgaW5jbHVkZSAoKyspIG9yICgtLSkuCitib29sIElzQXNzaWduRXF1YWxzU2lnbihU
T3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXpl
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIE9ubHkgaW5j
bHVkZXMgKCQ9KSBzdHlsZSBhc3NpZ25zLCB3aGVyZSAoJCkgaXMgYSBiaW5hcnkgb3AuCitib29s
IElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAg
eworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmV0dXJu
c1JlZmVyZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNN
YXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxh
ckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVu
dDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdl
dE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBZGRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAg
ICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVy
YXRvcjo6RU9wTXVsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9y
OjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2ln
bjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgor
ICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BJTW9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRMZWZ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0
b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRv
cjo6RU9wQml0d2lzZUFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpF
T3BCaXR3aXNlWG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0
d2lzZU9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBMT0dJQ19FUlJPUigpOworICAgIH0KKworICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisgICAgLy8gVGhpcyBh
c3N1bXB0aW9uIGFsbG93cyB0aGlzIGNvZGUgdG8gbm90IG5lZWQgdG8gaW50cm9kdWNlIHRlbXBv
cmFyaWVzLgorICAgIC8vCisgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6Cisg
ICAgLy8gICAgICB2ZWNbaGFzU2lkZUVmZmVjdCgpXSAqPSA0CisgICAgLy8gYmVjb21pbmcKKyAg
ICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0
CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7CisgICAgVEludGVy
bVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICByZXR1cm4gKm5ldyBUSW50ZXJt
QmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBsZWZ0LT5kZWVwQ29weSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkob3AsIGxlZnQsIHJpZ2h0KSk7
Cit9CisKK2NsYXNzIFJld3JpdGVyMSA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwdWJs
aWM6CisgICAgUmV3cml0ZXIxKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBv
c3QoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKElzQ29t
cG91bmRBc3NpZ24ob3ApKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmxl
ZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGVmdC5nZXRBc1N3
aXp6bGVOb2RlKCkgfHwgSXNWZWN0b3JBY2Nlc3MobGVmdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5hcnlOb2Rl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluYXJ5Tm9kZTsK
KyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlcjIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sK
KyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7CisgICAgU3lt
Ym9sRW52ICZtU3ltYm9sRW52OworCisgIHByaXZhdGU6CisgICAgYm9vbCByZXF1aXJlc0FkZHJl
c3NpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFj
ay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5iYWNrKCk7CisgICAg
fQorCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIyKCkgb3ZlcnJpZGUgeyBBU1NFUlQobVJlcXVp
cmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRlcjIoVENvbXBpbGVy
ICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVybVJlYnVp
bGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAgICB7fQor
CisgICAgUHJlUmVzdWx0IHZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUgJmFnZ3Jl
Z2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMg
PSBhZ2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgp
OworICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAg
ICAgICAgVEludGVybU5vZGUgKmFyZyAgICAgICA9IGFyZ3NbaV07CisgICAgICAgICAgICBBU1NF
UlQoYXJnKTsKKworICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFj
ayhJc091dFBhcmFtKHBhcmFtVHlwZSkpOworICAgICAgICAgICAgYXJnc1tpXSA9IHJlYnVpbGQo
KmFyZykuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJnc1tpXSk7CisgICAgICAgICAg
ICBBU1NFUlQoIW1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgICAg
IG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dpenpsZU5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJlcXVpcmVzQWRkcmVzc2luZygpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3dpenpsZU5vZGU7CisgICAgICAgIH0KKwor
ICAgICAgICBUSW50ZXJtVHlwZWQgJnZlY05vZGUgICAgICAgICA9ICpzd2l6emxlTm9kZS5nZXRP
cGVyYW5kKCk7CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXJMaXN0ICZvZmZzZXRzID0gc3dpenps
ZU5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKTsKKyAgICAgICAgQVNTRVJUKCFvZmZzZXRzLmVtcHR5
KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0cy5zaXplKCkgPD0gNCk7CisKKyAgICAgICAgYXV0
byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgICAgIGFyZ3MucmVzZXJ2ZShv
ZmZzZXRzLnNpemUoKSArIDEpOworICAgICAgICBhcmdzLnB1c2hfYmFjaygmdmVjTm9kZSk7Cisg
ICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGFyZ3MucHVzaF9iYWNrKG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5p
b24ob2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoInN3aXp6
bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJncyk7CisgICAgfQorCisgICAgUHJl
UmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLmdldE9wKCk7
CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0FjY2VzcyA9IElzVmVjdG9yQWNjZXNzKGJpbmFyeU5v
ZGUpOworCisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVu
Y2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3NpbmcoKTsKKyAgICAgICAgY29uc3QgYm9vbCBkaXNh
YmxlTGVmdCAgPSBkaXNhYmxlVG9wOworICAgICAgICBjb25zdCBib29sIGRpc2FibGVSaWdodCA9
IGRpc2FibGVUb3AgfHwgaXNBY2Nlc3MgfHwgSXNBc3NpZ25FcXVhbHNTaWduKG9wKTsKKworICAg
ICAgICBhdXRvIHRyYXZlcnNlID0gWyZdKFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgYm9vbCBk
aXNhYmxlKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgICAgICBpZiAoZGlzYWJsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUg
PSBhc05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChuZXdOb2RlKTsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworICAgICAgICB9
OworCisgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUuZ2V0TGVm
dCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgJnJpZ2h0Tm9kZSA9ICpiaW5hcnlOb2RlLmdldFJp
Z2h0KCk7CisKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNlKGxlZnRO
b2RlLCBkaXNhYmxlTGVmdCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmbmV3UmlnaHQgPSB0cmF2
ZXJzZShyaWdodE5vZGUsIGRpc2FibGVSaWdodCk7CisKKyAgICAgICAgaWYgKCFpc0FjY2VzcyB8
fCBkaXNhYmxlVG9wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoJmxlZnROb2RlID09ICZu
ZXdMZWZ0ICYmICZyaWdodE5vZGUgPT0gJm5ld1JpZ2h0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiB7JmJpbmFyeU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShvcCwgJm5l
d0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgiZWxlbV9y
ZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmbmV3TGVmdCwgJm5ld1Jp
Z2h0fSksCisgICAgICAgICAgICAgICAgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9Cit9Owor
Cit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVVbmFkZHJlc3Nh
YmxlUmVmZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAgICBpZiAo
IVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghUmV3cml0ZXIyKGNvbXBpbGVyLCBzeW1ib2xF
bnYpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
VW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2RhOTg0M2ViMmU2MDdlZWNjNjkwZmNlYzE2
MmM2MjdhNjFiN2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQURE
UkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBHaXZlbjoKKy8vICAgdm9pZCBmb28ob3V0IHgp
OworLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgdG8gYmUgbGVnYWwgaW4gR0xT
TCBidXQgbm90IGluIE1ldGFsOgorLy8gICBmb28oZXhwcmVzc2lvbik7CisvLyBUaGlzIGNhbiBo
YXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3Ig
dmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorLy8gVGhpcyByZXdyaXRlIGZ1bmN0aW9uYWxpdHkgaW50
cm9kdWNlcyB0ZW1wb3JhcmllcyB0aGF0IHNlcnZlIGFzIHByb3hpZXMgdG8gYmUgcGFzc2VkIHRv
IHRoZQorLy8gb3V0L2lub3V0IHBhcmFtZXRlcnMgYXMgbmVlZGVkLiBUaGUgY29ycmVzcG9uZGlu
ZyBleHByZXNzaW9ucyBnZXQgcG9wdWxhdGVkIHdpdGggdGhlaXIKKy8vIHByb3hpZXMgYWZ0ZXIg
dGhlIGZ1bmN0aW9uIGNhbGwuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVVuYWRkcmVz
c2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9s
RW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFVU5BRERSRVNTQUJM
RVJFRkVSRU5DRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9u
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWE3YjM3M2QzMWIyMjkzYWIwODQ5NTJkNDhmMjE5ODFlMzViZWY0
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8dW5vcmRl
cmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Np
bXBsaWZ5TG9vcENvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Jvb2wgSXNJbmRleChUT3BlcmF0
b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0
cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNJbmRleChUSW50ZXJtVHlwZWQgJmV4cHIpCit7Cisg
ICAgaWYgKGF1dG8gKmJpbmFyeSA9IGV4cHIuZ2V0QXNCaW5hcnlOb2RlKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworICAgIH0KKyAgICByZXR1cm4g
ZXhwci5nZXRBc1N3aXp6bGVOb2RlKCk7Cit9CisKK2Jvb2wgVmlld0JpbmFyeUNoYWluKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkICZub2RlLCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4g
Jm91dCkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBub2RlLmdldEFzQmluYXJ5Tm9k
ZSgpOworICAgIGlmICghYmluYXJ5IHx8IGJpbmFyeS0+Z2V0T3AoKSAhPSBvcCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0g
YmluYXJ5LT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpyaWdodCA9IGJpbmFyeS0+Z2V0
UmlnaHQoKTsKKworICAgIGlmICghVmlld0JpbmFyeUNoYWluKG9wLCAqbGVmdCwgb3V0KSkKKyAg
ICB7CisgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYgKCFWaWV3
QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkKKyAgICB7CisgICAgICAgIG91dC5wdXNoX2Jh
Y2socmlnaHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZlY3RvcjxU
SW50ZXJtVHlwZWQgKj4gVmlld0JpbmFyeUNoYWluKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7Cisg
ICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluOworICAgIFZpZXdCaW5hcnlDaGFp
bihub2RlLmdldE9wKCksIG5vZGUsIGNoYWluKTsKKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49
IDIpOworICAgIHJldHVybiBjaGFpbjsKK30KKworY2xhc3MgUHJlUGFzcyA6IHB1YmxpYyBUSW50
ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgUHJlUGFzcyhUQ29tcGlsZXIgJmNvbXBpbGVy
KSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSB7fQorCisgIHByaXZhdGU6
CisgICAgLy8gQ2hhbmdlIGNoYWlucyBvZgorICAgIC8vICAgICAgeCBPUCB5IE9QIHoKKyAgICAv
LyB0bworICAgIC8vICAgICAgeCBPUCAoeSBPUCB6KQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygb3Jp
Z2luYWwgcGFyZW50aGVzaXphdGlvbi4KKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2NpYXRlUmln
aHQoVEludGVybUJpbmFyeSAmbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBv
cCAgICAgICAgICAgICAgICA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworCisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqcmVzdWx0ID0gY2hhaW4uYmFjaygpOworICAgICAgICBjaGFpbi5wb3BfYmFj
aygpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKworICAgICAgICBjb25zdCBhdXRvIGJlZ2lu
ID0gY2hhaW4ucmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGF1dG8gZW5kICAgPSBjaGFpbi5yZW5k
KCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRl
cikKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVR5cGVkICpwYXJ0ID0gKml0ZXI7Cisg
ICAgICAgICAgICBBU1NFUlQocGFydCk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAqdGVtcCA9
IHJlYnVpbGQoKnBhcnQpLnNpbmdsZSgpOworICAgICAgICAgICAgQVNTRVJUKHRlbXApOworICAg
ICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIEFTU0VSVChw
YXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBwYXJ0LCBy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0KKworICBw
cml2YXRlOgorICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5ICZub2Rl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRP
cCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8IG9wID09
IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
e3JlYXNzb2NpYXRlUmlnaHQobm9kZSksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworY2xhc3MgU2VwYXJhdG9yIDogcHVi
bGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBzdGQ6OnZlY3Rv
cjxzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPj4gbVN0bXRzU3RhY2s7CisgICAgc3RkOjp2ZWN0
b3I8c3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRp
b24gKj4+IG1CaW5kaW5nTWFwU3RhY2s7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1U
eXBlZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PFRJbnRlcm1EZWNsYXJhdGlvbiAqPiBtTWFza2VkRGVjbHM7CisKKyAgcHVibGljOgorICAgIFNl
cGFyYXRvcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudiwgSWRHZW4g
JmlkR2VuKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSwg
bUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICB+U2VwYXJhdG9yKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1F
eHByTWFwLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5lbXB0eSgp
KTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
Z2V0Q3VyclN0bXRzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHko
KSk7CisgICAgICAgIHJldHVybiBtU3RtdHNTdGFjay5iYWNrKCk7CisgICAgfQorCisgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRpb24gKj4g
JmdldEN1cnJCaW5kaW5nTWFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRpbmdNYXBT
dGFjay5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1CaW5kaW5nTWFwU3RhY2suYmFjaygpOwor
ICAgIH0KKworICAgIHZvaWQgcHVzaFN0bXQoVEludGVybU5vZGUgJm5vZGUpIHsgZ2V0Q3VyclN0
bXRzKCkucHVzaF9iYWNrKCZub2RlKTsgfQorCisgICAgYm9vbCBpc1Rlcm1pbmFsRXhwcihUSW50
ZXJtTm9kZSAmbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlID0gZ2V0Tm9k
ZVR5cGUobm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFRJbnRlcm1UeXBlZCAqcHVsbE1hcHBlZEV4cHIoVEludGVybVR5cGVkICpub2Rl
LCBib29sIGFsbG93QmFja3RyYWNrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpleHBy
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9k
ZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtRXhwck1hcC5lbmQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICBBU1NFUlQoZXhwcik7CisgICAgICAgICAgICBtRXhwck1hcC5lcmFzZShpdGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd0JhY2t0cmFjaykKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byAmYmluZGluZ01hcCA9IGdldEN1cnJCaW5kaW5nTWFwKCk7CisgICAgICAg
ICAgICB3aGlsZSAoVEludGVybVN5bWJvbCAqc3ltYm9sID0gZXhwci0+Z2V0QXNTeW1ib2xOb2Rl
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBzeW1ib2wtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyICAgICAgICAg
ICAgPSBiaW5kaW5nTWFwLmZpbmQoJnZhcik7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
YmluZGluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGRlY2wpOworICAgICAgICAgICAgICAgIGV4cHIgPSBWaWV3RGVjbGFy
YXRpb24oKmRlY2wpLmluaXRFeHByOworICAgICAgICAgICAgICAgIEFTU0VSVChleHByKTsKKyAg
ICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAgICAgIG1N
YXNrZWREZWNscy5pbnNlcnQoZGVjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhbmRhbG9uZUV4cHIoVElu
dGVybVR5cGVkICZleHByKQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudE5vZGUoKS0+Z2V0
QXNCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoZXhwci5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gVEJhc2lj
VHlwZTo6RWJ0Vm9pZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lk
IHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZuZXdFeHBy
KQorICAgIHsKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZUV4cHIobmV3RXhwcikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5ld0V4cHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChJc0luZGV4KG5ld0V4cHIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdN
YXAoKTsKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lICA9IG1JZEdlbi5jcmVhdGVOZXdOYW1lKCIi
KTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1i
b2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xU
eXBlKCkpOworICAgICAgICBhdXRvICpkZWNsID0gbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIs
ICZuZXdFeHByKTsKKyAgICAgICAgcHVzaFN0bXQoKmRlY2wpOworICAgICAgICBtRXhwck1hcFsm
b2xkRXhwcl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICBiaW5kaW5nTWFwW3Zh
cl0gICAgPSBkZWNsOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0YWNrcygpCisgICAgeworICAg
ICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgbUJpbmRpbmdNYXBTdGFj
ay5lbXBsYWNlX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFN0YWNrcygpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VS
VCghbVN0bXRzU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5iYWNr
KCkuZW1wdHkoKSk7CisgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsKKyAgICAg
ICAgbVN0bXRzU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hTdG10c0lu
dG9CbG9jayhUSW50ZXJtQmxvY2sgJmJsb2NrLCBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
c3RtdHMpCisgICAgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9jay5nZXRT
ZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBzdG10LT5n
ZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gaXRlciA9IG1NYXNrZWREZWNscy5maW5kKGRlY2wpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1NYXNrZWREZWNscy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
c2VxLnB1c2hfYmFjayhzdG10KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1CbG9j
ayAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKGNvbnN0IFRWYXJpYWJsZSAmdmFyLCBUSW50ZXJt
VHlwZWQgJm5ld0V4cHIpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAq
PiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7CisgICAgICAgIHBvcFN0YWNrcygp
OworCisgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAg
YXV0byAmc2VxICAgPSAqYmxvY2suZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgc2VxLnJlc2VydmUo
MSArIHN0bXRzLnNpemUoKSk7CisgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9jaywgc3Rt
dHMpOworICAgICAgICBzZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6
RU9wQXNzaWduLCBuZXcgVEludGVybVN5bWJvbCgmdmFyKSwgJm5ld0V4cHIpKTsKKworICAgICAg
ICByZXR1cm4gYmxvY2s7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0IHZpc2l0
QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcHVz
aFN0YWNrcygpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0
IHZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJT
dG10cygpKTsKKyAgICAgICAgcG9wU3RhY2tzKCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEuY2xlYXIoKTsKKyAgICAg
ICAgc2VxLnJlc2VydmUoc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50b0Jsb2Nr
KG5vZGUsIHN0bXRzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50ID0gZ2V0UGFyZW50
Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJl
KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7CisgICAgICAgIGlmICghZGVjbC5p
bml0RXhwciB8fCBpc1Rlcm1pbmFsRXhwcigqZGVjbC5pbml0RXhwcikpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9u
ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCA9IFZpZXdE
ZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgQVNTRVJUKGRlY2wuc3ltYm9sLnZhcmlhYmxlKCku
c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgQVNTRVJUKCFkZWNs
LnN5bWJvbC52YXJpYWJsZSgpLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpKTsKKworICAg
ICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXRFeHByID0gcHVsbE1hcHBlZEV4cHIoZGVjbC5pbml0
RXhwciwgdHJ1ZSk7CisgICAgICAgIGlmIChkZWNsLmluaXRFeHByID09IG5ld0luaXRFeHByKQor
ICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gJm5ld05vZGUgPSAqbmV3IFRJbnRl
cm1EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAor
ICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6
ZSwgJmRlY2wuc3ltYm9sLCBuZXdJbml0RXhwcikpOworICAgICAgICAgICAgcHVzaFN0bXQobmV3
Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9z
dFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKyAg
ICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2Up
OworICAgICAgICBpZiAoZXhwciA9PSBuZXdFeHByKQorICAgICAgICB7CisgICAgICAgICAgICBw
dXNoQmluZGluZyhub2RlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXcgVEludGVybVVuYXJ5KG5vZGUu
Z2V0T3AoKSwgbmV3RXhwciwgbm9kZS5nZXRGdW5jdGlvbigpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJ
bnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0
b3Igb3AgPSBub2RlLmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisKKyAgICAgICAgICAg
IFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworICAgICAgICAgICAgQVNT
RVJUKGxlZnRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAgICBwdXNoU3RhY2tzKCk7Cisg
ICAgICAgICAgICBQb3N0UmVzdWx0IHJpZ2h0UmVzdWx0ID0gcmVidWlsZCgqcmlnaHQpOworICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0UmVzdWx0LnNpbmdsZSgpKTsKKworICAgICAgICAgICAgcmV0
dXJuIHtub2RlLCBWaXNpdEJpdHM6OlBvc3R9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJp
bmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9
IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6
ZSAmJiBnZXRQYXJlbnROb2RlKCktPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVjbGFyYXRp
b25Qb3N0CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAgVEludGVybVR5cGVk
ICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgi
Iik7CisgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG5hbWUucmF3TmFtZSgpLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Qm9vbCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAg
ICAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCAgID0gcHVsbE1hcHBlZEV4cHIocmlnaHQs
IHRydWUpOworICAgICAgICAgICAgVEludGVybUJsb2NrICpyaWdodEJsb2NrID0gJmJ1aWxkQmxv
Y2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3UmlnaHQpOworICAgICAgICAgICAgVEludGVybVR5
cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqY29uZCA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7CisgICAgICAg
ICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uZCA9IG5ldyBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsTm90LCBjb25kLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVz
aFN0bXQoKm5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCBuZXdMZWZ0KSk7CisgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikp
OworICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChvcCk7Cisg
ICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3TGVmdCAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0LCBmYWxz
ZSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3UmlnaHQgPSBwdWxsTWFwcGVkRXhwcihyaWdo
dCwgaXNBc3NpZ24pOworCisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENvbW1hKQor
ICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpuZXdOb2RlOworICAgICAgICAgICAgaWYgKGxl
ZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBuZXdOb2RlID0gJm5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
QmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwdXNoQmluZGluZyhub2RlLCAqbmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdFRlcm5hcnlQcmUoVEludGVy
bVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBQb3N0UmVzdWx0IGNvbmRS
ZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGNv
bmRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFja3MoKTsKKyAgICAgICAgUG9z
dFJlc3VsdCB0aGVuUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRUcnVlRXhwcmVzc2lvbigpKTsK
KyAgICAgICAgQVNTRVJUKHRoZW5SZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFj
a3MoKTsKKyAgICAgICAgUG9zdFJlc3VsdCBlbHNlUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRG
YWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsK
KworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgfQorCisgICAg
UG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb25kICA9IG5vZGUuZ2V0Q29uZGl0aW9u
KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdGhlbiAgPSBub2RlLmdldFRydWVFeHByZXNzaW9u
KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lv
bigpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdOYW1lKCIi
KTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1i
b2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZub2RlLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBl
KCkpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIo
ZWxzZV8sIGZhbHNlKTsKKyAgICAgICAgVEludGVybUJsb2NrICplbHNlQmxvY2sgPSAmYnVpbGRC
bG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdFbHNlKTsKKyAgICAgICAgVEludGVybVR5cGVk
ICpuZXdUaGVuICAgPSBwdWxsTWFwcGVkRXhwcih0aGVuLCB0cnVlKTsKKyAgICAgICAgVEludGVy
bUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdU
aGVuKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25kICAgPSBwdWxsTWFwcGVkRXhwcihj
b25kLCB0cnVlKTsKKworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnt2
YXJ9KTsKKyAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQsIHRoZW5C
bG9jaywgZWxzZUJsb2NrKSk7CisgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRlcm1TeW1i
b2wodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmbm9kZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0T3BlcmFu
ZCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHBy
LCBmYWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtU3dp
enpsZShuZXdFeHByLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRl
UG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVElu
dGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgZm9yIChU
SW50ZXJtTm9kZSAqJmFyZyA6IGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNTRVJUKHRhcmcp
OworICAgICAgICAgICAgYXJnID0gcHVsbE1hcHBlZEV4cHIodGFyZywgZmFsc2UpOworICAgICAg
ICB9CisgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9z
dChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFnZXRQYXJlbnRGdW5j
dGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRDYXNl
UHJlKFRJbnRlcm1DYXNlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRl
cm1UeXBlZCAqY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworICAgICAgICB9CisgICAgICAgIHB1
c2hTdG10KG5vZGUpOworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07
CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAm
bm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdCAgICA9IG5v
ZGUuZ2V0SW5pdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxsTWFwcGVk
RXhwcihpbml0LCBmYWxzZSk7CisgICAgICAgIGlmIChpbml0ID09IG5ld0luaXQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtU3dpdGNoKG5ld0lu
aXQsIG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENvbmRpdGlv
bigpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBwdWxsTWFwcGVkRXhwcihjb25k
LCBmYWxzZSk7CisgICAgICAgIGlmIChjb25kID09IG5ld0NvbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQsIG5vZGUu
Z2V0VHJ1ZUJsb2NrKCksIG5vZGUuZ2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJyYW5jaFBvc3Qo
VEludGVybUJyYW5jaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZXhwciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgICAgICBUSW50ZXJtVHlwZWQg
Km5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBmYWxzZSk7CisgICAgICAgIGlmIChleHBy
ID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5l
dyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4cHIpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRMb29wUHJl
KFRJbnRlcm1Mb29wICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFyZWJ1aWxk
SW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19F
UlJPUigpOworICAgICAgICB9CisgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2
aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLmdldFR5cGUoKTsKKyAg
ICAgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hC
aW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3Qo
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFRoZXNlIHNob3VsZCBiZSBzY3J1YmJlZCBmcm9t
IEFTVCBiZWZvcmUgcmV3cml0ZXIgaXMgY2FsbGVkLgorICAgICAgICBwdXNoU3RtdChub2RlKTsK
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmIChyZWFkQm9vbEVu
dlZhcigiR01UX0RJU0FCTEVfU0VQQVJBVEVfQ09NUE9VTkRfRVhQUkVTU0lPTlMiKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghU2ltcGxpZnlMb29wQ29u
ZGl0aW9ucygmY29tcGlsZXIsICZyb290LCAmY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFQcmVQYXNzKGNv
bXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRvcihjb21waWxlciwgc3ltYm9sRW52LCBpZEdlbiku
cmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVD
b21wb3VuZEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU0MGE1NTk2ODJhZGRlYzliNmE1MDAwNzJhNjBjM2QwNjFk
YjRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhw
cmVzc2lvbnMuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNT
SU9OU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUcmFuc2Zvcm1zIGNvZGUgdG8gKHVz
dWFsbHkpIGhhdmUgbW9zdCBvbmUgbm9uLXRlcm1pbmFsIGV4cHJlc3Npb24gcGVyIHN0YXRlbWVu
dC4KKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRvIHJhdyBp
Zi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisvLworLy8gZS5nLgor
Ly8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKy8vIGJlY29tZXMKKy8vICAgIGF1dG8g
XzEgPSBiYXIoKTsKKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworLy8gICAgYXV0byBfMyA9
IDYgKyBfMjsKKy8vICAgIGludCB4ID0gXzM7CisvLworLy8gV0FSTklORzoKKy8vICAgIC0gVGhp
cyBkb2VzIG5vdCByZXdyaXRlIG9iamVjdCBpbmRleGluZyBvcGVyYXRvcnMgYXMgYSB3aG9sZSAo
ZS5nLiBmb28ueCwgZm9vW3hdKSwgYnV0IHdpbGwKKy8vICAgICAgcmV3cml0ZSB0aGUgYXJndW1l
bnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKy8vICAgICAgZS5nLgorLy8g
ICAgICAgIGZvbyhnZXRWZWMoKVtpICsgMl0gKyAxKTsKKy8vICAgICAgYmVjb21lcworLy8gICAg
ICAgIGF1dG8gXzEgPSBnZXRWZWMoKTsKKy8vICAgICAgICBhdXRvIF8yID0gaSArIDI7CisvLyAg
ICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9yIHJlbWFpbnMgaW4g
KCspIGV4cHIgaGVyZS4KKy8vICAgICAgICBmb28oXzMpOworLy8KK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52
ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNo
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
U0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJhOGM2ZDEy
MGIwYjQ1MjIwNjk0YmZiYjY3NGYwZGJjM2QwYzIxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsx
LDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0
cnVjdERlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9v
cHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBTZXBhcmF0b3Ig
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2VwYXJhdG9yKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2Us
IHRydWUsICZzeW1ib2xUYWJsZSkge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNp
dCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJt
Tm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAgIGlmIChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9
IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUg
PSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZp
ZXIoKSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3Ry
dWN0KCk7CisgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3
IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUoc3RydWN0dXJl
LCB0cnVlKSwgU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAgICAgICAgICAgICAgYXV0byAqaW5z
dGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGluc3RhbmNlVHlwZS0+c2V0UXVhbGlmaWVyKHR5cGUuZ2V0UXVhbGlmaWVyKCkpOworICAgICAg
ICAgICAgICAgIGF1dG8gKmluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShtU3ltYm9sVGFibGUs
IHZhci5uYW1lKCksIGluc3RhbmNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsKKworICAg
ICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSByZXBsYWNlbWVudHM7CisgICAgICAgICAgICAg
ICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RWYXIpKTsK
KyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJtU3ltYm9s
KGluc3RhbmNlVmFyKSk7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hf
YmFjaygKKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShk
ZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jv
b2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21w
aWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFNlcGFyYXRvciBzZXBhcmF0b3IoY29t
cGlsZXIuZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC50cmF2ZXJzZSgmc2VwYXJhdG9yKTsK
KyAgICBpZiAoIXNlcGFyYXRvci51cGRhdGVUcmVlKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVEZWNsYXJh
dGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRl
Q29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzEyZTgwZDhhNTgxZTQ0
ZTE5NmU4NjY0MzhmOWJjZTFkYTk0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDI0IEBACisv
LworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1NFUEFSQVRFQ09NUE9VTkRTVFJVQ1RERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVD
VERFQ0xBUkFUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBFeGFtcGxlOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfSBmb287CisvLyBCZWNvbWVz
OgorLy8gIHN0cnVjdCBGb28ge2ludCB4OyB9OyBGb28gZm9vOworQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxl
ciwgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01Q
T1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBw
aW5nVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZjQ5ZGFkMjI1MmU0NjdhZDk3OTFhMTc1ODQwYjY4Y2UyMTYzYjcxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKQEAgLTAsMCArMSw0NyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKworbmFtZXNw
YWNlIHNoCit7CisKKy8vIEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcg
Y2hpbGRlbiBieSBkZWZhdWx0LgorY2xhc3MgU2tpcHBpbmdUcmF2ZXJzZXIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2tpcHBpbmdUcmF2ZXJzZXIoYm9vbCBw
cmVWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAgICAgICAg
ICAgICAgICAgICAgICBib29sIHBvc3RWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xUYWJsZSkKKyAgICB7
fQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQsIFRJ
bnRlcm1UZXJuYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdElmRWxzZShW
aXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRT
d2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IHZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRCbG9j
ayhWaXNpdCwgVEludGVybUJsb2NrICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlm
ICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RS
QVZFUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzUzZGFjZjJkNjg4Y2JlNjAxNTg4
MDA2YWUyOTdmYWM0MTMwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0ZXhwciBB
ZGRyZXNzU3BhY2Uga0FkZHJlc3NTcGFjZXNbXSA9IHsKKyAgICBBZGRyZXNzU3BhY2U6OkNvbnN0
YW50LAorICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorICAgIEFkZHJlc3NTcGFjZTo6VGhyZWFk
LAorfTsKKworY2hhciBjb25zdCAqc2g6OnRvU3RyaW5nKEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sK
KyAgICBzd2l0Y2ggKHNwYWNlKQorICAgIHsKKyAgICAgICAgY2FzZSBBZGRyZXNzU3BhY2U6OkNv
bnN0YW50OgorICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7CisgICAgICAgIGNhc2UgQWRk
cmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgICAgICByZXR1cm4gImRldmljZSI7CisgICAgICAg
IGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisgICAgICAgICAgICByZXR1cm4gInRocmVhZCI7
CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBOYW1lVG9TdHJ1
Y3QgPSBzdGQ6Om1hcDxOYW1lLCBjb25zdCBUU3RydWN0dXJlICo+OworCitjbGFzcyBTdHJ1Y3RG
aW5kZXIgOiBUSW50ZXJtUmVidWlsZAoreworICAgIE5hbWVUb1N0cnVjdCBuYW1lVG9TdHJ1Y3Q7
CisKKyAgICBTdHJ1Y3RGaW5kZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJh
dGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBEZWNsYXJhdGlvbiBkZWNsICAgICA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHZhci5z
eW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmll
cigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgICAgIGNvbnN0IE5h
bWUgbmFtZSgqcyk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlIComeiA9IG5hbWVUb1N0
cnVjdFtuYW1lXTsKKyAgICAgICAgICAgIEFTU0VSVCgheik7CisgICAgICAgICAgICB6ID0gczsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3Vs
dCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZu
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5l
aXRoZXJ9OworICAgIH0KKworICBwdWJsaWM6CisgICAgc3RhdGljIE5hbWVUb1N0cnVjdCBGaW5k
U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisgICAgewor
ICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKyAgICAgICAgaWYgKCFmaW5k
ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShmaW5kZXIubmFtZVRvU3Ry
dWN0KTsKKyAgICB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUZW1wbGF0ZUFy
Zzo6VGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSkgOiBtS2luZChLaW5kOjpCb29sKSwgbVZhbHVlKHZh
bHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVBcmcoaW50IHZhbHVlKSA6IG1LaW5kKEtp
bmQ6OkludCksIG1WYWx1ZSh2YWx1ZSkge30KKworVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKHVu
c2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisKK1Rl
bXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhjb25zdCBUVHlwZSAmdmFsdWUpIDogbUtpbmQoS2luZDo6
VHlwZSksIG1WYWx1ZSh2YWx1ZSkge30KKworYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PShj
b25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1LaW5kICE9IG90aGVy
Lm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRj
aCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtpbmQ6OkJvb2w6CisgICAgICAgICAgICBy
ZXR1cm4gbVZhbHVlLmIgPT0gb3RoZXIubVZhbHVlLmI7CisgICAgICAgIGNhc2UgS2luZDo6SW50
OgorICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5pID09IG90aGVyLm1WYWx1ZS5pOworICAgICAg
ICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIu
bVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToKKyAgICAgICAgICAgIHJldHVybiAq
bVZhbHVlLnQgPT0gKm90aGVyLm1WYWx1ZS50OworICAgIH0KK30KKworYm9vbCBUZW1wbGF0ZUFy
Zzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAo
bUtpbmQgPCBvdGhlci5tS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChtS2luZCA+IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtp
bmQ6OkJvb2w6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFsdWUuYjsK
KyAgICAgICAgY2FzZSBLaW5kOjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmkgPCBv
dGhlci5tVmFsdWUuaTsKKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorICAgICAgICAgICAgcmV0
dXJuIG1WYWx1ZS51IDwgb3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToK
KyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7CisgICAgfQor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVO
YW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGJhc2VOYW1lID09IG90aGVyLmJhc2VOYW1lICYmIHRlbXBsYXRlQXJncyA9PSBvdGhl
ci50ZW1wbGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6Om9wZXJh
dG9yPChjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChiYXNlTmFt
ZSA8IG90aGVyLmJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChvdGhlci5iYXNlTmFtZSA8IGJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVB
cmdzOworfQorCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJhc2VOYW1lLmVtcHR5KCkgJiYgdGVtcGxhdGVBcmdzLmVtcHR5KCk7Cit9
CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmNsZWFyKCkKK3sKKyAgICBiYXNlTmFt
ZSA9IE5hbWUoKTsKKyAgICB0ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKK30KKworTmFtZSBTeW1ib2xF
bnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUoc3RkOjpzdHJpbmcgJmJ1ZmZlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQoYnVmZmVyLmVtcHR5KCkpOworCisgICAgaWYgKHRlbXBsYXRlQXJncy5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VOYW1lOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG4gPSBzdGQ6Om1heCh7CisgICAgICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6ZGlnaXRzMTAsICAgICAgIC8vCisgICAgICAgIDUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG1heF9sZW5ndGgoInRydWUiLCAiZmFsc2UiKQorICAg
IH0pOworCisgICAgYnVmZmVyLnJlc2VydmUoYmFzZU5hbWUucmF3TmFtZSgpLmxlbmd0aCgpICsg
KG4gKyAyKSAqIHRlbXBsYXRlQXJncy5zaXplKCkgKyAxKTsKKyAgICBidWZmZXIgKz0gYmFzZU5h
bWUucmF3TmFtZSgpLmRhdGEoKTsKKworICAgIGlmICghdGVtcGxhdGVBcmdzLmVtcHR5KCkpCisg
ICAgeworICAgICAgICBidWZmZXIgKz0gIjwiOworCisgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVl
OworICAgICAgICBjaGFyIGFyZ0J1ZmZlcltuICsgMV07CisgICAgICAgIGZvciAoY29uc3QgVGVt
cGxhdGVBcmcgJmFyZyA6IHRlbXBsYXRlQXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyICs9ICIsICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IFRlbXBsYXRlQXJnOjpWYWx1ZSB2YWx1ZSA9IGFyZy52YWx1ZSgpOworICAgICAgICAgICAgY29u
c3QgVGVtcGxhdGVBcmc6OktpbmQga2luZCAgID0gYXJnLmtpbmQoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRlbXBsYXRl
QXJnOjpLaW5kOjpCb29sOgorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICJ0cnVl
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFs
c2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6SW50OgorICAgICAgICAg
ICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdmFsdWUuaSk7CisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKyAgICAg
ICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIldSIsIHZhbHVlLnUpOworICAgICAg
ICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OlR5cGU6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9
ICp2YWx1ZS50OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqcyA9
IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciArPSBzLT5uYW1lKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlwZSh0eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCF0eXBlLmlzQXJyYXkoKSk7ICAvLyBUT0RPCisgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXROb21pbmFs
U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVy
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldENv
bHMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gIngiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldFJvd3MoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGJ1ZmZlciArPSAiPiI7CisgICAgfQorCisgICAgY29uc3QgSW1tdXRhYmxlU3Ry
aW5nIG5hbWUoYnVmZmVyKTsKKyAgICBidWZmZXIuY2xlYXIoKTsKKworICAgIHJldHVybiBOYW1l
KG5hbWUsIGJhc2VOYW1lLnN5bWJvbFR5cGUoKSk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1w
bGF0ZU5hbWU6OmFzc2lnbihjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYXJnQ291bnQsIGNvbnN0
IFRlbXBsYXRlQXJnICphcmdzKQoreworICAgIGJhc2VOYW1lID0gbmFtZTsKKyAgICB0ZW1wbGF0
ZUFyZ3MuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kp
CisgICAgeworICAgICAgICB0ZW1wbGF0ZUFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOworICAgIH0K
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU3ltYm9sRW52OjpTeW1ib2xFbnYoVENv
bXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorICAgIDogbVN5bWJvbFRhYmxl
KGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbU5hbWVUb1N0cnVjdChTdHJ1Y3RG
aW5kZXI6OkZpbmRTdHJ1Y3RzKGNvbXBpbGVyLCByb290KSkKK3t9CisKK2NvbnN0IFRTdHJ1Y3R1
cmUgJlN5bWJvbEVudjo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sKKyAgICBj
b25zdCBOYW1lIG5hbWUocyk7CisgICAgYXV0byBpdGVyID0gbU5hbWVUb1N0cnVjdC5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyID09IG1OYW1lVG9TdHJ1Y3QuZW5kKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gczsKKyAgICB9CisgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVyLT5zZWNv
bmQ7CisgICAgcmV0dXJuIHo7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgKlN5bWJvbEVudjo6cmVt
YXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3QKK3sKKyAgICBpZiAocykKKyAgICB7CisgICAg
ICAgIHJldHVybiAmcmVtYXAoKnMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Y29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCkKK3sK
KyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKworICAgIFNpZ1RvRnVu
YyAmc2lnVG9GdW5jID0gbU92ZXJsb2Fkc1ttUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXJdOwor
ICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJsZVNpZ0J1ZmZlcl07
CisKKyAgICBpZiAoIWZ1bmMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlw
ZSA9IG1SZXVzYWJsZVNpZ0J1ZmZlci5iYWNrKCk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZl
ci5wb3BfYmFjaygpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1SZXVzYWJsZVRlbXBs
YXRlTmFtZUJ1ZmZlci5mdWxsTmFtZShtUmV1c2FibGVTdHJpbmdCdWZmZXIpOworCisgICAgICAg
IGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCBuYW1l
LnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsKKyAgICAgICAgZm9yIChjb25zdCBU
VHlwZSAmcGFyYW1UeXBlIDogbVJldXNhYmxlU2lnQnVmZmVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgm
bVN5bWJvbFRhYmxlLCBrRW1wdHlJbW11dGFibGVTdHJpbmcsICZwYXJhbVR5cGUsIFN5bWJvbFR5
cGU6OkVtcHR5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUmV1c2FibGVTaWdCdWZmZXIu
Y2xlYXIoKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKworICAg
IHJldHVybiAqZnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0
aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFy
Z3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKyAgICBBU1NF
UlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBtUmV1c2FibGVT
aWdCdWZmZXIucHVzaF9iYWNrKCpwYXJhbVR5cGVzW2ldKTsKKyAgICB9CisgICAgbVJldXNhYmxl
U2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5h
bWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJnQ291bnQsIHRlbXBsYXRlQXJncyk7Cisg
ICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7Cit9CisKK1RJbnRlcm1BZ2dyZWdh
dGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBs
YXRlQXJnICp0ZW1wbGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5l
bXB0eSgpKTsKKyAgICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkp
OworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKyAgICB7CisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQodGFy
Zyk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2sodGFyZy0+Z2V0VHlwZSgp
KTsKKyAgICB9CisgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsK
KyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJn
Q291bnQsIHRlbXBsYXRlQXJncyk7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gZ2V0RnVu
Y3Rpb25PdmVybG9hZEltcGwoKTsKKyAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5
bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxk
cykKK3sKKyAgICBBU1NFUlQobmFtZS5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJ
bnRlcm5hbCk7CisKKyAgICBUU3RydWN0dXJlIComcyA9IG1BbmdsZVN0cnVjdHNbbmFtZS5yYXdO
YW1lKCldOworICAgIEFTU0VSVCghcyk7CisgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAg
cmV0dXJuICpzOworfQorCitjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFRleHR1cmVF
bnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBs
ZXJUeXBlKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqJmVudiA9IG1UZXh0dXJlRW52c1tzYW1w
bGVyVHlwZV07CisgICAgaWYgKGVudiA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYXV0byAq
dGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOworICAgICAgICBhdXRvICp0ZXh0
dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygidGV4dHVy
ZSIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4dHVyZSwg
QWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorICAgICAg
ICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFsc2UpLCBJ
bW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAga05vU291
cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBl
bnZOYW1lOworICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisgICAgICAgIGVudk5h
bWUgKz0gR2V0VGV4dHVyZVR5cGVOYW1lKHNhbXBsZXJUeXBlKS5yYXdOYW1lKCkuZGF0YSgpOwor
ICAgICAgICBlbnZOYW1lICs9ICI+IjsKKworICAgICAgICBlbnYgPSAmbmV3U3RydWN0dXJlKE5h
bWUoZW52TmFtZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5ldyBURmllbGRMaXN0e3RleHR1cmUsIHNhbXBsZXJ9KTsKKyAgICB9Cisg
ICAgcmV0dXJuICplbnY7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0U2Ft
cGxlclN0cnVjdCgpCit7CisgICAgaWYgKCFtU2FtcGxlcikKKyAgICB7CisgICAgICAgIG1TYW1w
bGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJtZXRh
bDo6c2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmll
bGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICB9CisgICAgcmV0dXJuICpt
U2FtcGxlcjsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtTcGFjZShWYXJGaWVsZCB4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAm
bWFwKQoreworICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJsZSB0byBoYXZlIHJl
ZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1dCB0aGlzCisgICAg
Ly8gaXMgbm90IHJlcXVpcmVkIGZvciBub3cgYW5kIHdvdWxkIHJlcXVpcmUgY29kZSBjaGFuZ2Vz
IHRvIGdldCByaWdodC4KKyAgICBBU1NFUlQoIWlzUG9pbnRlcih4KSk7CisgICAgQVNTRVJUKCFp
c1JlZmVyZW5jZSh4KSk7CisKKyAgICBtYXBbeF0gPSBzcGFjZTsKK30KKworY29uc3QgQWRkcmVz
c1NwYWNlICpTeW1ib2xFbnY6OmlzU3BhY2UoVmFyRmllbGQgeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwg
QWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gaXRlciA9IG1hcC5m
aW5kKHgpOworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ugc3BhY2UgPSBpdGVyLT5z
ZWNvbmQ7CisgICAgY29uc3QgYXV0byBpbmRleCAgICAgICAgID0gc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGVfdDxBZGRyZXNzU3BhY2U+PihzcGFjZSk7CisgICAgcmV0dXJuICZrQWRk
cmVzc1NwYWNlc1tpbmRleF07Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZh
ckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1NwYWNlKHgs
IHNwYWNlLCBtUG9pbnRlcnMpOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNl
KFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1NwYWNl
KHgsIHNwYWNlLCBtUmVmZXJlbmNlcyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAqU3ltYm9s
RW52Ojppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4
LCBtUG9pbnRlcnMpOworfQorCitjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNSZWZl
cmVuY2UoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4LCBtUmVmZXJl
bmNlcyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZm
aWVsZCkKK3sKKyAgICBtUGFja2VkRmllbGRzLmluc2VydCgmZmllbGQpOworfQorCitib29sIFN5
bWJvbEVudjo6aXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQoKTsKK30K
Kworc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBlIGJhc2lj
VHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKGJhc2ljVHlwZSkpOworCisgICAgc3dpdGNo
IChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFs
T0VTOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlk
ZW9XRUJHTDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFk
b3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIx
REFycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorICAgICAgICBj
YXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICBjYXNlIEVi
dFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0U2hhZG93Ogor
ICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworCisgICAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgICBjYXNl
IEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0Fy
cmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNl
IEVidElTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5Ogor
ICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEludDsKKworICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVNBcnJh
eToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEUmVjdDoKKyAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmVBcnJheToKKyAg
ICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRVSW50OworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5
cGU6OkVidFZvaWQ7CisgICAgfQorfQorCitOYW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUoVEJh
c2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBl
KSk7CisKKyAgICBjb25zdCBUQmFzaWNUeXBlIHRleHR1cmVUeXBlID0gR2V0VGV4dHVyZUJhc2lj
VHlwZShzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmluZSBIQU5E
TEVfVEVYVFVSRV9OQU1FKGJhc2VOYW1lKSAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2gg
KHRleHR1cmVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5h
bWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxmbG9hdD4iOyBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUg
PSAibWV0YWw6OiIgYmFzZU5hbWUgIjxpbnQ+IjsgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgVEJhc2lj
VHlwZTo6RWJ0VUludDogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUgPSAi
bWV0YWw6OiIgYmFzZU5hbWUgIjx1aW50PiI7ICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIExPR0lDX0VSUk9S
KCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxw
dHI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICBzd2l0
Y2ggKHNhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgLy8gMWQKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMUQ6ICAvLyBEZXNrdG9wIEdMU0wgc2FtcGxlciB0eXBlOgorICAgICAgICBjYXNlIEVi
dElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxRDoKKyAgICAgICAgICAgIEhB
TkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUxZCIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgLy8gMWQgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToKKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxREFy
cmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2FycmF5Iik7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMKKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQnVmZmVy
OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICAgICAgSEFORExFX1RF
WFRVUkVfTkFNRSgidGV4dHVyZV9idWZmZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIDJkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBj
YXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0Ogor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgSEFORExFX1RFWFRV
UkVfTkFNRSgidGV4dHVyZTJkIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyAz
ZCB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjNEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIEN1YmUgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmUiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIC8vIDJkIGFycmF5IHRleHR1cmVzCisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJF
X05BTUUoInRleHR1cmUyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFN
RSgidGV4dHVyZTJkX21zIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6Cisg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXNfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIGN1YmUgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5Ogor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICBjYXNlIEVidFVTYW1w
bGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1
YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNoYWRvdworICAg
ICAgICBjYXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURB
cnJheVNoYWRvdzoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRMRV9URVhU
VVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEUmVjdFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6Cisg
ICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlIik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgiZGVwdGgyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBFeHRlbnRpb25zCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VT
OiAgICAgICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhpc3RzOgor
ICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOiAgLy8gT25seSB2YWxpZCBp
ZiBHTF9FWFRfWVVWX3RhcmdldCBleGlzdHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVv
V0VCR0w6CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9O
QU1FKCJUT0RPIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFNRQorCisg
ICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRjOTY0NWUwNTE5ODg2N2YyNWRjMDMwYzAyZWVjMDc1NjVmYmQyZTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgKQEAgLTAsMCArMSwyMTgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfU1lNQk9MRU5WX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gK
K3sKKworZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UKK3sKKyAgICBDb25zdGFudCwKKyAgICBEZXZp
Y2UsCisgICAgVGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqdG9TdHJpbmcoQWRkcmVzc1NwYWNl
IHNwYWNlKTsKKworY2xhc3MgVmFyRmllbGQKK3sKKyAgcHVibGljOgorICAgIFZhckZpZWxkKGNv
bnN0IFRWYXJpYWJsZSAmdmFyKSA6IG1WYXJpYWJsZSgmdmFyKSB7fQorICAgIFZhckZpZWxkKGNv
bnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCkge30KKworICAgIEFOR0xFX0lOTElO
RSBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbVZhcmlhYmxlOyB9
CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IG1GaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYXJG
aWVsZCAmb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVZhcmlhYmxlID09IG90
aGVyLm1WYXJpYWJsZSAmJiBtRmllbGQgPT0gb3RoZXIubUZpZWxkOworICAgIH0KKworICBwcml2
YXRlOgorICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlID0gbnVsbHB0cjsKKyAgICBjb25z
dCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ug
c2gKKworbmFtZXNwYWNlIHN0ZAoreworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IGhhc2g8c2g6OlZh
ckZpZWxkPgoreworICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHNoOjpWYXJGaWVsZCAmeCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IHNoOjpUVmFyaWFibGUgKnZhciA9IHgudmFyaWFi
bGUoKTsKKyAgICAgICAgaWYgKHZhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6aGFzaDxjb25zdCBzaDo6VFZhcmlhYmxlICo+KCkodmFyKTsKKyAgICAgICAgfQorICAgICAg
ICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aGFzaDxjb25zdCBzaDo6VEZpZWxkICo+KCkoZmllbGQpOworICAgIH0KK307CisKK30gIC8v
IG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIHNoCit7CisKK2NsYXNzIFRlbXBsYXRlQXJnCit7
CisgIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQKKyAgICB7CisgICAgICAgIEJvb2wsCisg
ICAgICAgIEludCwKKyAgICAgICAgVUludCwKKyAgICAgICAgVHlwZSwKKyAgICB9OworCisgICAg
dW5pb24gVmFsdWUKKyAgICB7CisgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDogYih2YWx1ZSkg
e30KKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisgICAgICAgIFZhbHVl
KHVuc2lnbmVkIHZhbHVlKSA6IHUodmFsdWUpIHt9CisgICAgICAgIFZhbHVlKGNvbnN0IFRUeXBl
ICZ2YWx1ZSkgOiB0KCZ2YWx1ZSkge30KKworICAgICAgICBib29sIGI7CisgICAgICAgIGludCBp
OworICAgICAgICB1bnNpZ25lZCB1OworICAgICAgICBjb25zdCBUVHlwZSAqdDsKKyAgICB9Owor
CisgICAgVGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoaW50IHZhbHVl
KTsKKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoY29u
c3QgVFR5cGUgJnZhbHVlKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZUFy
ZyAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZv
dGhlcikgY29uc3Q7CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtS2luZDsgfQor
ICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisKKyAgcHVibGljOgor
ICAgIEtpbmQgbUtpbmQ7CisgICAgVmFsdWUgbVZhbHVlOworfTsKKworLy8gQW4gZW52aXJvbm1l
bnQgZm9yIGNyZWF0aW5nIGFuZCB1bmlxdWVseSBzaGFyaW5nIFRTeW1ib2wgb2JqZWN0cy4KK2Ns
YXNzIFN5bWJvbEVudgoreworICAgIGNsYXNzIFRlbXBsYXRlTmFtZQorICAgIHsKKyAgICAgICAg
TmFtZSBiYXNlTmFtZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VGVtcGxhdGVBcmc+IHRlbXBsYXRl
QXJnczsKKworICAgICAgcHVibGljOgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGVt
cGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRl
bXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgICAgIE5hbWUgZnVsbE5hbWUoc3RkOjpzdHJp
bmcgJmJ1ZmZlcikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgTmFtZSAmbmFt
ZSwgc2l6ZV90IGFyZ0NvdW50LCBjb25zdCBUZW1wbGF0ZUFyZyAqYXJncyk7CisgICAgfTsKKwor
ICAgIHVzaW5nIFR5cGVSZWYgICAgICAgID0gQ1JlZjxUVHlwZT47CisgICAgdXNpbmcgU2lnICAg
ICAgICAgICAgPSBzdGQ6OnZlY3RvcjxUeXBlUmVmPjsgIC8vIFBhcmFtMCwgUGFyYW0xLCAuLi4g
UGFyYW1OLCBSZXR1cm4KKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywg
VEZ1bmN0aW9uICo+OworICAgIHVzaW5nIE92ZXJsb2FkcyAgICAgID0gc3RkOjptYXA8VGVtcGxh
dGVOYW1lLCBTaWdUb0Z1bmM+OworICAgIHVzaW5nIEFuZ2xlU3RydWN0cyAgID0gc3RkOjptYXA8
SW1tdXRhYmxlU3RyaW5nLCBUU3RydWN0dXJlICo+OworICAgIHVzaW5nIFRleHR1cmVTdHJ1Y3Rz
ID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKworICBwdWJsaWM6CisgICAg
U3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7CisKKyAg
ICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbVN5bWJvbFRhYmxlOyB9CisK
KyAgICAvLyBUaGVyZSBleGlzdCBBbmdsZSByZXdyaXRlcyB0aGF0IGNhbiBsZWFkIHRvIGluY29o
ZXJlbnQgc3RydWN0cworICAgIC8vCisgICAgLy8gRXhhbXBsZQorICAgIC8vICAgIHN0cnVjdCBB
IHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEnIGE7IH0gLy8gQScgaGFzIHNhbWUgbmFt
ZSBhcyBBIGJ1dCBpcyBub3QgaWRlbnRpY2FsLgorICAgIC8vIGJlY29tZXMKKyAgICAvLyAgICBz
dHJ1Y3QgQSB7IC4uLiB9CisgICAgLy8gICAgc3RydWN0IEIgeyBBIGE7IH0KKyAgICAvLworICAg
IC8vIFRoaXMgbm90YWJseSBoYXBwZW5zIHdoZW4gQSBjb250YWlucyBhIHNhbXBsZXIgaW4gdGhl
IG9yaWdpbmFsIEdMU0wgY29kZSBidXQgaXMgcmV3cml0dGVuIHRvCisgICAgLy8gbm90IGhhdmUg
YSBzYW1wbGVyLCB5ZXQgdGhlIEEnIHN0cnVjdCBmaWVsZCBzdGlsbCBjb250YWlucyB0aGUgc2Ft
cGxlciBmaWVsZC4KKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3RydWN0dXJl
ICZzKSBjb25zdDsKKworICAgIC8vIExpa2UgYFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0IFRTdHJ1
Y3R1cmUgJnMpYCBidXQgYWRkaXRpb25hbGx5IG1hcHMgbnVsbCB0byBudWxsLgorICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0OworCisgICAgY29u
c3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkKGNvbnN0IE5hbWUgJm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5U
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFy
YW1Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKipwYXJhbVR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJn
cyA9IG51bGxwdHIpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQgICAg
ICAgICA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncyA9IG51bGxwdHIpOworCisgICAgY29uc3QgVFN0
cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxk
cyk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUgc2Ft
cGxlclR5cGUpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKwor
ICAgIHZvaWQgbWFya0FzUG9pbnRlcihWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOwor
ICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworCisg
ICAgdm9pZCBtYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKTsK
KyAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0Owor
CisgICAgdm9pZCBtYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgYm9vbCBp
c1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIGNv
bnN0IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKworICAgIHZvaWQgbWFy
a1NwYWNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSwgc3RkOjp1bm9yZGVyZWRfbWFw
PFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKworICAgIHN0
ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKyAgICBPdmVy
bG9hZHMgbU92ZXJsb2FkczsKKyAgICBTaWcgbVJldXNhYmxlU2lnQnVmZmVyOworICAgIFRlbXBs
YXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisgICAgc3RkOjpzdHJpbmcgbVJl
dXNhYmxlU3RyaW5nQnVmZmVyOworCisgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVjdHM7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRCYXNpY1R5cGUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbVRl
eHR1cmVFbnZzOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKm1TYW1wbGVyID0gbnVsbHB0cjsKKwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiBtUG9pbnRlcnM7
CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1SZWZlcmVu
Y2VzOworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tlZEZpZWxk
czsKK307CisKK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUp
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTg0MzMzMmRkOGRhYzI3OTJkYjJkMjYwOGI4NmVlZTEyOWI1YzFlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwCkBAIC0w
LDAgKzEsMzgzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWls
ZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFZGdlcyA9IHN0ZDo6dW5vcmRlcmVkX3NldDxUPjsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBHcmFwaCA9IHN0ZDo6dW5vcmRlcmVkX21h
cDxULCBFZGdlczxUPj47CisKK3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZzeW1ib2xF
bnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCit7
CisgICAgaWYgKGcuZmluZChzKSAhPSBnLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmVzID0gZ1tzXTsKKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisgICAgZm9yIChjb25zdCBURmll
bGQgKmYgOiBmcykKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3lt
Ym9sRW52LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICB7CisgICAgICAg
ICAgICBlcy5pbnNlcnQoeik7CisgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYs
IGcsIHopOworICAgICAgICAgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXogPSBnW3pd
OworICAgICAgICAgICAgZXMuaW5zZXJ0KGV6LmJlZ2luKCksIGV6LmVuZCgpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBCdWlsZEdyYXBoKFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnN0cnVjdHMpCit7CisgICAgR3Jh
cGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnOworICAgIGZvciAoY29uc3QgVFN0cnVjdHVyZSAqcyA6
IHN0cnVjdHMpCisgICAgeworICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcsIHMp
OworICAgIH0KKyAgICByZXR1cm4gZzsKK30KKworLy8gQWxnb3J0aG06IGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2VhcmNoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6dmVjdG9yPFQ+IFRvcG9zb3J0KGNvbnN0IEdyYXBo
PFQ+ICZnKQoreworICAgIC8vIG5vZGVzIHdpdGggdGVtcG9yYXJ5IG1hcmsKKyAgICBzdGQ6OnVu
b3JkZXJlZF9zZXQ8VD4gdGVtcHM7CisKKyAgICAvLyBub2RlcyB3aXRob3V0IHBlcm1hbmVudCBt
YXJrCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PFQ+IGludlBlcm1zOworICAgIGZvciAoY29uc3Qg
YXV0byAmZW50cnkgOiBnKQorICAgIHsKKyAgICAgICAgaW52UGVybXMuaW5zZXJ0KGVudHJ5LmZp
cnN0KTsKKyAgICB9CisKKyAgICAvLyBMIOKGkCBFbXB0eSBsaXN0IHRoYXQgd2lsbCBjb250YWlu
IHRoZSBzb3J0ZWQgZWxlbWVudHMKKyAgICBzdGQ6OnZlY3RvcjxUPiBMOworCisgICAgLy8gZnVu
Y3Rpb24gdmlzaXQobm9kZSBuKQorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlzaXQgPSBb
Jl0oVCBuKSAtPiB2b2lkIHsKKyAgICAgICAgLy8gaWYgbiBoYXMgYSBwZXJtYW5lbnQgbWFyayB0
aGVuCisgICAgICAgIGlmIChpbnZQZXJtcy5maW5kKG4pID09IGludlBlcm1zLmVuZCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyByZXR1cm4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBpZiBuIGhhcyBhIHRlbXBvcmFyeSBtYXJrIHRoZW4KKyAgICAgICAg
aWYgKHRlbXBzLmZpbmQobikgIT0gdGVtcHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIHN0b3AgICAobm90IGEgREFHKQorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgdGVtcG9yYXJ5IG1hcmsKKyAgICAgICAg
dGVtcHMuaW5zZXJ0KG4pOworCisgICAgICAgIC8vIGZvciBlYWNoIG5vZGUgbSB3aXRoIGFuIGVk
Z2UgZnJvbSBuIHRvIG0gZG8KKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisgICAg
ICAgIEFTU0VSVChlbkl0ZXIgIT0gZy5lbmQoKSk7CisgICAgICAgIGNvbnN0IEVkZ2VzPFQ+ICZl
biA9IGVuSXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKFQgbSA6IGVuKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyB2aXNpdChtKQorICAgICAgICAgICAgdmlzaXQobSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisgICAgICAgIHRlbXBz
LmVyYXNlKG4pOworICAgICAgICAvLyBtYXJrIG4gd2l0aCBhIHBlcm1hbmVudCBtYXJrCisgICAg
ICAgIGludlBlcm1zLmVyYXNlKG4pOworICAgICAgICAvLyBhZGQgbiB0byBoZWFkIG9mIEwKKyAg
ICAgICAgTC5wdXNoX2JhY2sobik7CisgICAgfTsKKworICAgIC8vIHdoaWxlIGV4aXN0cyBub2Rl
cyB3aXRob3V0IGEgcGVybWFuZW50IG1hcmsgZG8KKyAgICB3aGlsZSAoIWludlBlcm1zLmVtcHR5
KCkpCisgICAgeworICAgICAgICAvLyBzZWxlY3QgYW4gdW5tYXJrZWQgbm9kZSBuCisgICAgICAg
IFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworICAgICAgICAvLyB2aXNpdChuKQorICAgICAgICB2
aXNpdChuKTsKKyAgICB9CisKKyAgICByZXR1cm4gTDsKK30KKworVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAqQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKK3sKKyAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisgICAgYXV0byAmZnVuY0VxdWFsaXR5ID0KKyAgICAgICAgKm5ldyBURnVu
Y3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNU
eXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgYXV0byAmYVN0cnVjdCA9IENyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJhIikpOworICAgIGF1dG8g
JmJTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3RydWN0VHlw
ZSwgTmFtZSgiYiIpKTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3RydWN0KTsK
KyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZiU3RydWN0KTsKKworICAgIGF1dG8gJmJv
ZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgc3RkOjp2ZWN0b3I8VEludGVy
bVR5cGVkICo+IGFuZE5vZGVzOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBjb25z
dCBURmllbGRMaXN0ICZhRmllbGRzID0gYVN0cnVjdFR5cGUuZmllbGRzKCk7CisgICAgY29uc3Qg
c2l6ZV90IHNpemUgICAgICAgICA9IGFGaWVsZHMuc2l6ZSgpOworCisgICAgYXV0byB0ZXN0RXF1
YWxpdHkgPSBbJl0oVEludGVybVR5cGVkICZhLCBUSW50ZXJtVHlwZWQgJmIpIC0+IFRJbnRlcm1U
eXBlZCAqIHsKKyAgICAgICAgQVNTRVJUKGEuZ2V0VHlwZSgpID09IGIuZ2V0VHlwZSgpKTsKKyAg
ICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUu
aXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkgfHwgdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byAqZnVuYyA9CisgICAgICAgICAgICAgICAgbmV3IFRGdW5j
dGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZh
LCAmYn0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wRXF1YWwsICZhLCAmYik7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgc2l6ZTsg
KytpZHgpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmFGaWVsZCAgICA9ICphRmllbGRz
W2lkeF07CisgICAgICAgIGNvbnN0IFRUeXBlICZhRmllbGRUeXBlID0gKmFGaWVsZC50eXBlKCk7
CisgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsKKworICAg
ICAgICBpZiAoYUZpZWxkVHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghYUZpZWxkVHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7ICAvLyBUT0RPCisgICAgICAgICAg
ICBpbnQgZGltID0gYUZpZWxkVHlwZS5nZXRPdXRlcm1vc3RBcnJheVNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0ZpZWxkKGFTdHJ1Y3Qs
IGFGaWVsZE5hbWUpLCBkKTsKKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0gQWNjZXNz
SW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAgICAgICAg
ICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7CisgICAg
ICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvICZhQWNj
ZXNzID0gQWNjZXNzRmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAgICBhdXRv
ICZiQWNjZXNzID0gQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAg
ICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOworICAgICAg
ICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlQoYW5kTm9kZXMuc2l6ZSgpID4gMCk7ICAvLyBFbXB0eSBzdHJ1Y3RzIGFyZSBub3Qg
YWxsb3dlZCBpbiBHTFNMCisgICAgVEludGVybVR5cGVkICpvdXROb2RlID0gYW5kTm9kZXMuYmFj
aygpOworICAgIGFuZE5vZGVzLnBvcF9iYWNrKCk7CisgICAgZm9yIChUSW50ZXJtVHlwZWQgKmFu
ZE5vZGUgOiBhbmROb2RlcykKKyAgICB7CisgICAgICAgIG91dE5vZGUgPSBuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQsIGFuZE5vZGUsIG91dE5vZGUpOworICAgIH0K
KyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNoKFRPcGVy
YXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisgICAgYXV0byAqZnVuY1Byb3RvRXF1YWxpdHkg
PSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jRXF1YWxpdHkpOworICAgIHJldHVy
biBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG9FcXVhbGl0eSwgJmJvZHlF
cXVhbGl0eSk7Cit9CisKK3N0cnVjdCBEZWNsYXJlZFN0cnVjdHVyZQoreworICAgIFRJbnRlcm1E
ZWNsYXJhdGlvbiAqZGVjbE5vZGU7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZXF1
YWxpdHlGdW5jdGlvbkRlZmluaXRpb247CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
OworfTsKKworYm9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmVkU3RydWN0dXJlICZvdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFN0cnVjdHVy
ZSAqPiAmdXNlZFN0cnVjdHMpCit7CisgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5v
ZGUgPSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgeworICAgICAgICBBU1NFUlQo
ZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5v
ZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKworICAgICAgICBpZiAoVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICAg
ICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYucmVtYXAo
dHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG91dC5kZWNsTm9kZSAgPSBkZWNsTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0
LnN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmVxdWFsaXR5
RnVuY3Rpb25EZWZpbml0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRTdHJ1Y3Rz
LmZpbmQoc3RydWN0dXJlKSA9PSB1c2VkU3RydWN0cy5lbmQoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ3JlYXRl
U3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIEZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoK
KyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0
IFRTdHJ1Y3R1cmUgKj4gbVVzZWRTdHJ1Y3RzOworCisgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNl
KFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2Us
IGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisgICAge30KKworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKworICAgICAg
ICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RXF1YWw6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICA9IGJpbmFyeS0+
Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJpZ2h0
VHlwZSA9IGJpbmFyeS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIEFT
U0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBtU3ltYm9sRW52
LnJlbWFwKGxlZnRUeXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgdXNlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5zZXJ0KCZz
dHJ1Y3R1cmUpLnNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdWJTdHJ1Y3QgPSBtU3ltYm9sRW52LnJlbWFw
KGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlRvcG9zb3J0U3Ry
dWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBj
KQoreworICAgIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSBmaW5kZXIoc3ltYm9sRW52KTsKKyAgICBy
b290LnRyYXZlcnNlKCZmaW5kZXIpOworICAgIHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5kZXIubVVz
ZWRTdHJ1Y3RzLmVtcHR5KCk7CisKKyAgICBEZWNsYXJlZFN0cnVjdHVyZSBkZWNsYXJlZFN0cnVj
dDsKKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1Y3RzOwor
ICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vblN0cnVjdFN0bXROb2RlczsKKworICAg
IHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN0bXRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRDb3VudCgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAmc3RtdE5vZGUgPSAqcm9vdC5nZXRDaGlsZE5v
ZGUoaSk7CisgICAgICAgICAgICBpZiAoR2V0QXNEZWNsYXJlZFN0cnVjdHVyZShzeW1ib2xFbnYs
IHN0bXROb2RlLCBkZWNsYXJlZFN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2Jh
Y2soZGVjbGFyZWRTdHJ1Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2so
JnN0bXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAg
ICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworICAgICAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBEZWNsYXJlZFN0cnVjdHVyZT4g
cmF3VG9EZWNsYXJlZDsKKworICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZk
IDogZGVjbGFyZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3RzLnB1c2hf
YmFjayhkLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5maW5k
KGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKyAgICAgICAgICAgIHJhd1Rv
RGVjbGFyZWRbZC5zdHJ1Y3R1cmVdID0gZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGU6
IEdyYXBoIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmx5IGV4cGxpY2l0bHkgZGVjbGFyZWQgc3Ry
dWN0dXJlcy4KKyAgICAgICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnICAgICAgICAgICAg
ICAgICAgID0gQnVpbGRHcmFwaChzeW1ib2xFbnYsIHN0cnVjdHMpOworICAgICAgICBzdGQ6OnZl
Y3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChnKTsKKyAg
ICAgICAgQVNTRVJUKGRlY2xhcmVkU3RydWN0cy5zaXplKCkgPD0gc29ydGVkU3RydWN0cy5zaXpl
KCkpOworCisgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworICAgICAgICBmb3IgKGNv
bnN0IFRTdHJ1Y3R1cmUgKnMgOiBzb3J0ZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworICAgICAgICAgICAgaWYgKGl0ICE9
IHJhd1RvRGVjbGFyZWQuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byAmZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGQuZGVjbE5vZGUpOwor
ICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2JhY2soZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBu
ZXdTdG10Tm9kZXM7CisKKyAgICAgICAgZm9yIChEZWNsYXJlZFN0cnVjdHVyZSAmZGVjbGFyZWRT
dHJ1Y3QgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChk
ZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9i
YWNrKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIGlmIChkZWNsYXJlZFN0
cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVu
Y3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoVEludGVybU5vZGUgKnN0bXROb2RlIDogbm9uU3RydWN0U3RtdE5vZGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoc3RtdE5vZGUpOworICAgICAgICAgICAgbmV3U3RtdE5vZGVz
LnB1c2hfYmFjayhzdG10Tm9kZSk7CisgICAgICAgIH0KKworICAgICAgICAqcm9vdC5nZXRTZXF1
ZW5jZSgpID0gbmV3U3RtdE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBjb21waWxlci52YWxp
ZGF0ZUFTVCgmcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1
Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM5MDhl
MzRkZDRkOTZjZDA0ZDYwMjc0ZGYxODFiMGQ0ODkzM2E1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApAQCAtMCwwICsxLDI3IEBACisvLworLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9T
T1JUU1RSVUNUU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBEb2VzIGEgdG9wb3NvcnQgb24g
c3RydWN0cyBiYXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKy8vIFN0cnVjdCB0eXBlIGRlY2xh
cmF0aW9ucyBhcmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgcm9vdCBibG9jay4KK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBUb3Bvc29ydFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVByZWx1ZGVDb25m
aWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDE0YmM2M2ZjYTI5OGViYTRjZmRhNDY3OTRjZTk2OGExMWZiZDhjYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAKQEAgLTAsMCArMSw5
NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCit7CisgIHByaXZhdGU6CisgICAgSWRHZW4gJm1JZEdlbjsKKworICBw
dWJsaWM6CisgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdlbiAmaWRH
ZW4pCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1i
b2xUYWJsZSksIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdEJsb2NrKFZp
c2l0LCBUSW50ZXJtQmxvY2sgKmJsb2NrTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpub2RlIDog
KmJsb2NrTm9kZS0+Z2V0U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gbm9kZS0+Z2V0QXNGdW5jdGlv
bkRlZmluaXRpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURnVu
Y3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGZ1bmMuaXNNYWluKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkIHZp
c2l0TWFpbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1
bmNEZWZOb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNE
ZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4oKSk7Cisg
ICAgICAgIEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFz
aWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09
IDApOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZXh0ZXJuYWxNYWluRnVuYyA9ICpmdW5j
RGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5h
bE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFs
TWFpbkZ1bmMpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqZXh0ZXJuYWxN
YWluUHJvdG8gPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAg
VEludGVybUZ1bmN0aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisgICAgICAgICAg
ICBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZpbnRlcm5hbE1haW5GdW5jKTsKKworICAg
ICAgICBUSW50ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7
CisgICAgICAgIGV4dGVybmFsTWFpbkJvZHktPmFwcGVuZFN0YXRlbWVudCgKKyAgICAgICAgICAg
IFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm5hbE1haW5GdW5jLCBu
ZXcgVEludGVybVNlcXVlbmNlKCkpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmludGVybmFs
TWFpbkJvZHkgPSBmdW5jRGVmTm9kZS0+Z2V0Qm9keSgpOworCisgICAgICAgIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisgICAgICAgICAgICBuZXcgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbihleHRlcm5hbE1haW5Qcm90bywgZXh0ZXJuYWxNYWluQm9keSk7
CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmludGVybmFsTWFpbkRlZiA9Cisg
ICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90
bywgaW50ZXJuYWxNYWluQm9keSk7CisKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hf
YmFjayhOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVudHJ5KAorICAgICAgICAgICAgJnJvb3QsIGZ1
bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1haW5E
ZWZ9KSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6OldyYXBNYWlu
KFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZyb290KQor
eworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJs
ZSgpOworICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworICAgIHJvb3Qu
dHJhdmVyc2UoJndyYXBwZXIpOworICAgIGlmICghd3JhcHBlci51cGRhdGVUcmVlKCZjb21waWxl
ciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1dyYXBNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIwZWRmZjQyYjhlMzRkZDFhODBhMjc1NTIy
ZGYzYjdkNDZhNDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5o
CkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKKy8vIENoYW5nZXMKKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IG1haW4t
Ym9keSB9CisvLyBUbworLy8gICAgdm9pZCBGUkVTSF9OQU1FKGFyZ3MpIHsgbWFpbi1ib2R5IH0K
Ky8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKy8vCisvLyBUaGlz
IHRyYW5zZm9ybWF0aW9uIGlzIHVzZWZ1bCBpZiB0aGUgb3JpZ2luYWwgYG1haW5gIGhhcyBtdWx0
aXBsZSByZXR1cm4gcGF0aHMgYmVjYXVzZSB0aGlzCisvLyByZWR1Y2VzIGRvd24gdG8gYSBzaW5n
bGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNsZWFudXAgY29k
ZSBpbiBgbWFpbmAuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgV3JhcE1haW4oVENvbXBpbGVyICZj
b21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBuYW1l
c3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9XUkFQTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
VXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYThiZjNhZmQxMjMwZTY1ZmRkY2NlOTgxOGFhN2NjMmNi
OThkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAKQEAgLTAsMCArMSwzMDUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlIDogNDcxOCkKKyNlbmRpZgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y2xpbWl0cz4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisKK25hbWVz
cGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01ldGFsU3RyaW5nKGNvbnN0IFRUeXBl
ICp0KQoreworICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgeworICAgICAgICBj
YXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIGNhc2UgRWJ0SW50
OgorICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAg
ICByZXR1cm4gImJvb2wiOworICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorICAg
ICAgICAgICAgcmV0dXJuICJ5dXZDc2NTdGFuZGFyZEVYVCI7CisgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOworICAg
ICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlckV4dGVybmFsT0VTIjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWwyRFkyWUVY
VDoKKyAgICAgICAgICAgIHJldHVybiAiX19zYW1wbGVyRXh0ZXJuYWwyRFkyWUVYVCI7CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJE
UmVjdCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICByZXR1
cm4gInNhbXBsZXIyREFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAg
ICAgICAgIHJldHVybiAic2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1T
QXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRE1TQXJyYXkiOworICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJl
QXJyYXkiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4g
ImlzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICBy
ZXR1cm4gImlzYW1wbGVyM0QiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7CisgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJETVMiOwor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0dXJuICJp
c2FtcGxlcjJETVNBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJyYXk6Cisg
ICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsKKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsKKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInVzYW1wbGVyQ3Vi
ZSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgcmV0dXJu
ICJ1c2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAg
ICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
TVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TQXJyYXkiOworICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxl
ckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyREFycmF5U2hhZG93IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93
OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKyAgICAgICAg
Y2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7CisgICAgICAg
IGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICByZXR1cm4gImludGVyZmFjZSBi
bG9jayI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4
dHVyZTJkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVybiAi
dGV4dHVyZTJkPGludD4iOworICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorICAgICAgICAgICAg
cmV0dXJuICJ0ZXh0dXJlMmQ8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlM0Q6CisgICAg
ICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisgICAgICAgIGNhc2UgRWJ0SUltYWdlM0Q6Cisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDxpbnQ+IjsKKyAgICAgICAgY2FzZSBFYnRVSW1h
Z2UzRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPHVpbnQ+IjsKKyAgICAgICAgY2Fz
ZSBFYnRJbWFnZTJEQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJl
MmQ+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgRWJ0SUltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5pc1Vuc2l6
ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlf
cmVmPHRleHR1cmUyZDxpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5URUQiOwor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEVidFVJbWFnZTJEQXJyYXk6CisgICAgICAgICAg
ICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlMmQ8dWludD4+IjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5P
VF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SW1hZ2VDdWJl
OgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7CisgICAgICAgIGNhc2UgRWJ0SUlt
YWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8aW50PiI7CisgICAgICAg
IGNhc2UgRWJ0VUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8dWlu
dD4iOworICAgICAgICBjYXNlIEVidEltYWdlQ3ViZUFycmF5OgorICAgICAgICAgICAgaWYgKHQt
PmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJhcnJheV9yZWY8dGV4dHVyZWN1YmU+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRF
RCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlQ3ViZUFycmF5OgorICAg
ICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU8aW50Pj4iOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRV
SW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3Vi
ZTx1aW50Pj4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFYnRBdG9taWNDb3VudGVyOgorICAgICAgICAgICAgcmV0dXJuICJh
dG9taWNfdWludCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisgICAgICAg
ICAgICByZXR1cm4gIiRzYW1wbGVyVmlkZW9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUi
OworICAgIH0KK30KKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmco
Y29uc3QgVFR5cGUgKnQpCit7CisgICAgaWYgKHQtPmlzTWF0cml4KCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHQtPmdldENvbHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDJ4NCI7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDN4NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdDR4MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICh0LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0LT5nZXRCYXNpY1R5cGUo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZs
b2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MiI7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MyI7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiYm9vbDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sNCI7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidWludDIiOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQz
IjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnRlcmZhY2VC
bG9jayk7CisgICAgcmV0dXJuIGdldEJhc2ljTWV0YWxTdHJpbmcodCk7Cit9CisKK0ltbXV0YWJs
ZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbiwgTmFtZU1hcCAqbmFtZU1hcCkKK3sKKyAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHJldHVybiBIYXNoTmFtZSh0eXBlLmdl
dFN0cnVjdCgpLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXApOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEltbXV0YWJsZVN0cmluZyhnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0cmluZygmdHlwZSkp
OworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlM2NlM2NlZmQ3MzY5MTU4M2FhMzJmODgxODYyZjc3
ZDc2NDNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCkBAIC0wLDAgKzEsMzEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXworI2RlZmlu
ZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHlwZXMuaCIKK25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01l
dGFsU3RyaW5nKGNvbnN0IFRUeXBlICp0KTsKKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFs
VHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitJbW11dGFibGVTdHJpbmcgR2V0TWV0
YWxUeXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAor
CisjZW5kaWYgIC8vIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JWdWxr
YW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvclZ1bGthbi5jcHAKaW5kZXggMjAxY2JjOTFmNmUzYzIxZGQxOTI1NDVkNmM1ZDUw
ZjkzODc0YmY3MS4uYzVlYzY3ZGVlNjI1OTBmY2I4MTJkOGRiZTMyYjVjNWRkYTQ4NzViNiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvclZ1bGthbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKQEAgLTE2Myw2ICsxNjMsOCBA
QCBjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRQb2ludENvb3JkTmFt
ZSAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZFBvaW50Q29vcmQiKTsKIGNvbnN0ZXhwciBJ
bW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0cmlu
ZygiZmxpcHBlZEZyYWdDb29yZCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11bGF0
ZWREZXB0aFJhbmdlUGFyYW1zID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRURlcHRoUmFuZ2VQYXJh
bXMiKTsKK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zQmxvY2tOYW1lICAgICAg
ICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlmb3JtQmxvY2siKTsKK2NvbnN0ZXhwciBJbW11
dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVVbmlmb3JtcyIpOwogCiBjb25zdGV4cHIgZ2w6OlNoYWRlck1hcDxjb25zdCBjaGFyICo+
IGtEZWZhdWx0VW5pZm9ybU5hbWVzID0gewogICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCB2
azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCkBAIC00NTAsOSArNDUyLDkgQEAgY29uc3QgVFZh
cmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJsb2NrICpy
b290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMuZW5kKCkp
OwogCiAgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5pZm9ybUJs
b2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgotICAgIHJldHVybiBEZWNs
YXJlSW50ZXJmYWNlQmxvY2soCi0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2ZXJGaWVs
ZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAotICAgICAg
ICBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc0Jsb2NrTmFtZSksIEltbXV0YWJs
ZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zVmFyTmFtZSkpOworICAgIHJldHVybiBEZWNsYXJl
SW50ZXJmYWNlQmxvY2socm9vdCwgc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5p
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6
OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrVW5pZm9ybXNWYXJOYW1lKTsKIH0KIAogY29uc3QgVFZhcmlhYmxlICpBZGRD
b21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxvY2sgKnJvb3QsIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAppbmRleCBhM2UwMzk5ZTNlODA3MmFiNjk3
M2Q3YmFlZmYxNjM5MGQwMmYyYzc0Li44ZjZmYzQ2NWZhZTk4ZjdmYzEzOTEyNmRmNmQ0NGMzMDJi
YTM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UeXBlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1R5cGVzLmgKQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBUVHlwZQog
CiAgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBz
ZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsg
fQorICAgIGJvb2wgaXNSYW5rMCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09IDEgJiYg
c2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPT0gMSAmJiBzZWNvbmRhcnlTaXplID09IDEgJiYg
IW1TdHJ1Y3R1cmUgJiYgIWlzQXJyYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcApp
bmRleCA3NmE4YmMyZjVlNGE4MzAxYzFlMWU5ZmExNmZmYzZkMTE2NTI2ZWUxLi5iYTRkNmYzZTVm
NWJjYTUwNzE5NTU3N2VkZDUyMDY3MDQwZDc2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVB
U1QuY3BwCkBAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVy
bU5vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzICpkaWFn
bm9zdGljcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWxpZGF0ZUFTVE9wdGlv
bnMgJm9wdGlvbnMpCiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVlLCBu
dWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsK
LSAgICBpZiAobU9wdGlvbnMudmFsaWRhdGVTaW5nbGVQYXJlbnQpCi0gICAgewotICAgICAgICBt
UGFyZW50W3Jvb3RdID0gbnVsbHB0cjsKLSAgICB9Ci19Cit7fQogCiB2b2lkIFZhbGlkYXRlQVNU
Ojp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQogewpAQCAtOTAsMTIg
Kzg1LDEzIEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwgVEludGVy
bU5vZGUgKm5vZGUpCiAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0Q2hpbGRD
b3VudCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7ICsraSkK
ICAgICAgICAgewotICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkID0gbm9kZS0+Z2V0Q2hp
bGROb2RlKGkpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnQuZmluZChjaGlsZCkgIT0gbVBhcmVu
dC5lbmQoKSkKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9kZS0+Z2V0Q2hp
bGROb2RlKGkpOworICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBtUGFyZW50W2No
aWxkXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3VnaCB0aGUgc2FtZSBw
YXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgogICAgICAgICAgICAgICAgIC8vIHRoZSBh
bmNlc3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKG1QYXJlbnRbY2hpbGRdICE9IG5vZGUpCisg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5lKCksICJG
b3VuZCBjaGlsZCB3aXRoIHR3byBwYXJlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIpOwpAQCAtMTAzLDE3ICs5OSwx
NyBAQCB2b2lkIFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2Rl
ICpub2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
bVBhcmVudFtjaGlsZF0gPSBub2RlOworICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVu
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0X2NvdW50KQordm9p
ZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJt
Tm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291bnQpCiB7CiAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0ICYmIG1PcHRpb25zLnZhbGlkYXRlTnVsbE5vZGVzKQogICAgIHsKICAgICAgICAgc2l6ZV90
IGNoaWxkQ291bnQgPSBub2RlLT5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGlmIChjaGlsZENv
dW50IDwgbGVhc3RfY291bnQpCisgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkK
ICAgICAgICAgewogICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5l
KCksICJUb28gZmV3IGNoaWxkcmVuIiwgIjx2YWxpZGF0ZU51bGxOb2Rlcz4iKTsKICAgICAgICAg
ICAgIG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0
aWFsaXplcnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwCmluZGV4IGRmYTIzYWFm
MTliZTQ4OTk1Y2MwNjM2OGI1MWQwMWIwYTEyOWZkOWIuLmJiYzhkY2Q0ZThhODJlNDcyMGE3N2Qw
ODFiMzdjOWY2ZDdkMGY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKQEAgLTUzLDcgKzUzLDggQEAgdm9p
ZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9u
LAogICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CiAgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhw
cmVzc2lvbiA9IGluaXQtPmdldFJpZ2h0KCk7CiAKLSAgICAgICAgaWYgKGV4cHJlc3Npb24tPmdl
dFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFudFZhbHVl
KCkpCisgICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpIHx8CisgICAgICAgICAgICBzeW1ib2xO
b2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCiAgICAgICAgIHsKICAgICAgICAgICAg
IC8vIEZvciB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBjb25zdGFudCwgZGVmZXIgdGhlaXIgcmVh
bCBpbml0aWFsaXphdGlvbiB1bnRpbAogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6
ZSB1bmlmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5
Q2FzZXMuY3BwCmluZGV4IDI4OWRlMjE1MmU5YzUxNDU5NGY2MjMxZDRkZjkyZDY2YjE3OWEyYjcu
LjJlZTgyMzkzZmNlNTExYTBkYTc3OTRkYjlhNjMxNzEwZGM4Nzc1NGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1By
dW5lRW1wdHlDYXNlcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcApAQCAtMTcsNyArMTcs
NyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1ib29sIEFyZUVtcHR5QmxvY2tzKFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7Citib29sIEFyZUVtcHR5QmxvY2tzKGNvbnN0IFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CiAKIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRlcm1O
b2RlICpub2RlKQogewpAQCAtMzcsNyArMzcsNyBAQCBib29sIElzRW1wdHlCbG9jayhUSW50ZXJt
Tm9kZSAqbm9kZSkKIAogLy8gUmV0dXJuIHRydWUgaWYgYWxsIHN0YXRlbWVudHMgaW4gInN0YXRl
bWVudHMiIGNvbnNpc3Qgb25seSBvZiBlbXB0eSBibG9ja3MgYW5kIG5vLW9wIHN0YXRlbWVudHMu
CiAvLyBSZXR1cm5zIHRydWUgYWxzbyBpZiB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cy4KLWJvb2wg
QXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorYm9vbCBBcmVFbXB0
eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91
Z2guY3BwCmluZGV4IDQ1MDBhZWE0ZTQ4MmMwMjMwOTBjYzdiZDhlNjhlZGFjNTE0YTQ5MjAuLmRk
OGRkNTQzZjZlMWEyMjUxMzM3ZWQ0ZGIwN2ZmYmRmNzcwMWEwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1JlbW92
ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXIg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG91dHB1dFNlcXVlbmNlKFRJ
bnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KTsKKyAgICB2b2lkIG91
dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFy
dEluZGV4KTsKICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgpOwogCiAgICAgVEludGVybUJs
b2NrICptU3RhdGVtZW50TGlzdDsKQEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNo
ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdmVTd2l0Y2hGYWxsVGhy
b3VnaFRyYXZlcnNlcjo6b3V0cHV0U2VxdWVuY2UoVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCit2b2lkIFJlbW92ZVN3aXRjaEZhbGxUaHJvdWdoVHJhdmVyc2Vy
OjpvdXRwdXRTZXF1ZW5jZShjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0
YXJ0SW5kZXgpCiB7CisgICAgYXV0byAmb3V0U2VxID0gKm1TdGF0ZW1lbnRMaXN0T3V0LT5nZXRT
ZXF1ZW5jZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2Ut
PnNpemUoKTsgKytpKQogICAgIHsKLSAgICAgICAgbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVl
bmNlKCktPnB1c2hfYmFjayhzZXF1ZW5jZS0+YXQoaSkpOworICAgICAgICBvdXRTZXEucHVzaF9i
YWNrKHNlcXVlbmNlLT5hdChpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxv
b3BDb25kaXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCmluZGV4IDc0MTQ1
NDAwZWJjNjNhN2I5NGEzYzM1NzgyNGZhODlmYzJjN2YxMWUuLjBjMmFhOGZiNmNiMWNhZGE4ODlk
MDk0ODljYTdmNTQzN2IzOGNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCkBAIC0yMSwxMCArMjEsMTcgQEAg
bmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAorc3RydWN0IExvb3BJbmZvCit7CisgICAgY29u
c3QgVFZhcmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IG51bGxwdHI7CisgICAgVEludGVybVR5
cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisgICAgVEludGVybVR5cGVkICpl
eHByZXNzaW9uICAgICAgICAgICA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBTaW1wbGlmeUxvb3BD
b25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogewog
ICBwdWJsaWM6Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcih1bnNpZ25lZCBp
bnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXIoY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1w
bGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAq
c3ltYm9sVGFibGUpOwogCiAgICAgdm9pZCB0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUp
IG92ZXJyaWRlOwpAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpIG92ZXJyaWRl
OwogICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9k
ZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBmb3Vu
ZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsgfQogCkBA
IC00MiwxNiArNTAsMTkgQEAgY2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciA6
IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIKICAgICAvLyBmb3VuZC4KICAgICBib29s
IG1Gb3VuZExvb3BUb0NoYW5nZTsKICAgICBib29sIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9y
RXhwcmVzc2lvbjsKLSAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlvbnNUb1Np
bXBsaWZ5OworICAgIGNvbnN0IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciAqbUNvbmRpdGlvbnNU
b1NpbXBsaWZ5OworCisgIHByaXZhdGU6CisgICAgTG9vcEluZm8gbUxvb3A7CiB9OwogCiBTaW1w
bGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjpTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVy
c2VyKAotICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisgICAgY29u
c3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKICAgICBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQogICAgIDogVExWYWx1ZVRyYWNraW5nVHJhdmVyc2Vy
KHRydWUsIGZhbHNlLCBmYWxzZSwgc3ltYm9sVGFibGUpLAogICAgICAgbUZvdW5kTG9vcFRvQ2hh
bmdlKGZhbHNlKSwKICAgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbihm
YWxzZSksCi0gICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2ltcGxpZnlN
YXNrKQorICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQog
e30KIAogLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9u
LCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdApAQCAtNjgsNyAr
NzksOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0VW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZQogICAgIGlmIChtRm91bmRMb29wVG9DaGFu
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2Ug
dGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBs
aWZ5Lm1hdGNoKG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAg
IG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSk7
CiAgICAgcmV0dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKQEAgLTgwLDcgKzkyLDkgQEAg
Ym9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybUJpbmFyeSAqbm8KICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9v
cC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOworICAgIEFT
U0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9Cisg
ICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgp
LCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5n
ZTsKIH0KIApAQCAtOTIsNyArMTA2LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2EKICAgICBp
ZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5
IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9
IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkpOworICAg
IEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9
IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgpKTsKICAg
ICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTA0LDcgKzExOSw4IEBAIGJv
b2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVGVybmFyeSAqCiAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlzIGxvb3Au
CiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2go
bm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlKTsKICAgICByZXR1
cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtRGVjbGEKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAot
ICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2Rl
KTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91bmRMb29wVG9D
aGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAgIHJldHVybiAh
bUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQorewor
ICAgIGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0
aW9uIHx8IG1Mb29wLmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgVEludGVybUJsb2NrICpw
YXJlbnQgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgQVNTRVJUKHBh
cmVudCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisgICAgICAgIGlmIChtTG9vcC5l
eHByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1Mb29wLmV4
cHJlc3Npb24tPmRlZXBDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtTG9vcC5jb25k
aXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtTG9vcC5jb25kaXRpb25WYXJp
YWJsZSk7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgIENyZWF0
ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0
aW9uLT5kZWVwQ29weSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgc2VxLnB1c2hfYmFjayhub2Rl
KTsKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hfYmFjayhOb2RlUmVwbGFjZVdpdGhN
dWx0aXBsZUVudHJ5KHBhcmVudCwgbm9kZSwgc3RkOjptb3ZlKHNlcSkpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgLy8gTWFyayB0aGF0IHdl
J3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRlcm1pbmUg
aWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKQEAgLTEyOCw3ICsxNjksNyBAQCB2b2lkIFNpbXBsaWZ5
TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkK
ICAgICBTY29wZWROb2RlSW5UcmF2ZXJzYWxQYXRoIGFkZFRvUGF0aCh0aGlzLCBub2RlKTsKIAog
ICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IHRydWU7Ci0gICAgbUZv
dW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9TaW1wbGlmeTsKIAog
ICAgIGlmICghbUZvdW5kTG9vcFRvQ2hhbmdlICYmIG5vZGUtPmdldEluaXQoKSkKICAgICB7CkBA
IC0xNDcsODMgKzE4OCwxNDEgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBtSW5zaWRlTG9vcEluaXRD
b25kaXRpb25PckV4cHJlc3Npb24gPSBmYWxzZTsKIAorICAgIGNvbnN0IExvb3BJbmZvIHByZXZM
b29wID0gbUxvb3A7CisKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgIHsKLSAgICAg
ICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgICAgICA9IFN0YXRpY1R5cGU6OkdldDxFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKLSAgICAgICAgVFZhcmlhYmxl
ICpjb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJv
b2xUeXBlKTsKKyAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgPSBTdGF0aWNUeXBlOjpH
ZXQ8RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFUZW1wb3JhcnksIDEsIDE+KCk7CisgICAgICAg
IG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1ib2xUYWJs
ZSwgYm9vbFR5cGUpOworICAgICAgICBtTG9vcC5jb25kaXRpb24gICAgICAgICA9IG5vZGUtPmdl
dENvbmRpdGlvbigpOworICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKIAogICAgICAgICAvLyBSZXBsYWNlIHRoZSBsb29wIGNvbmRpdGlvbiB3
aXRoIGEgYm9vbGVhbiB2YXJpYWJsZSB0aGF0J3MgdXBkYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4K
ICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICBp
ZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgotICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9Ci0gICAgICAg
ICAgICAvLyBpbnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOwotICAgICAgICAg
ICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsgfQotICAgICAgICAgICAg
VEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KLSAgICAgICAgICAgICAg
ICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOwotICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50
SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKLQotICAgICAgICAgICAgVEludGVy
bUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwotICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbUxvb3AuZXhwcmVzc2lvbik7CisK
KyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hf
YmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUg
c3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAgICAgbUxv
b3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgd2hp
bGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAg
ICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMw
KSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0
RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0
aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRp
b24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRlbXBTeW1i
b2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisKKyAgICAgICAgICAgICAgICAvLyBN
YXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorICAgICAg
ICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3Jt
OgorICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAg
ICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAg
ICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IHsgYm9keTsgfSBzMCA9IGV4cHI7IH0KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50
cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMwID0gZXhwcjsg
Y29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERl
Y2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9u
KTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJt
QmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9v
cC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKworICAgICAgICAgICAgICAgIC8vIENhbid0IHVz
ZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZl
IGJlZW4gbnVsbHB0ci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJl
cGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKKyAg
ICAgICAgICAgICAgICAvLyB0cmF2ZXJzZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBhbnkgcHJv
YmxlbXMuCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29u
ZGl0aW9uVmFyaWFibGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld0JvZHktPmdl
dFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wQXNzaWdu
bWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5kZWVwQ29w
eSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJl
cGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAgICAgICAg
ICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhlcmUgLSB0
aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBiZQotICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQg
dGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+c2V0Qm9k
eShuZXdCb2R5KTsKLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3lt
Ym9sTm9kZShjb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgotICAgICAgICAgICAgLy8gICBkbyB7Ci0gICAgICAgICAgICAvLyAgICAgYm9keTsK
LSAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhwcik7Ci0gICAgICAgICAgICAvLyBpbnRvCi0g
ICAgICAgICAgICAvLyAgIGJvb2wgczAgPSB0cnVlOwotICAgICAgICAgICAgLy8gICBkbyB7Ci0g
ICAgICAgICAgICAvLyAgICAgeyBib2R5OyB9Ci0gICAgICAgICAgICAvLyAgICAgczAgPSBleHBy
OwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7Ci0gICAgICAgICAgICBUSW50ZXJtRGVj
bGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBDcmVhdGVCb29sTm9kZSh0
cnVlKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0
RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcg
VEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAg
ICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKworICAgICAgICAgICAgaWYgKG1Mb29w
LmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZh
cmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAgICAgLy8g
ICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAgICAg
ICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBib29sIHMwID0gZXhwcjsKKyAg
ICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKyAg
ICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
RGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBD
cmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxv
b3AuY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJs
b2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29u
ZGl0aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisK
KyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFy
aWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAg
ICAgICAgICAgIC8vICAgICBib2R5OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhw
cik7CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAgYm9vbCBz
MDsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgeyBi
b2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAg
ICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNlIHN0YXRl
bWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4
cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqdGVtcElu
aXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBEZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgICAgIGluc2VydFN0
YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRC
b2R5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCb2R5LT5nZXRT
ZXF1ZW5jZSgpLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3Np
Z25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKSk7CisK
KyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNl
IG9sZCBib2R5LCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCisgICAgICAgICAgICAg
ICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVyZSAtIHRo
ZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBi
dXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgIG5vZGUt
PnNldEJvZHkobmV3Qm9keSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENy
ZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2soCi0gICAg
ICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBu
b2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOwotCi0gICAgICAgICAgICAvLyBDYW4n
dCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBpdCBtYXkg
aGF2ZSBiZWVuIG51bGxwdHIuCi0gICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJl
cGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKLSAg
ICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFueSBwcm9ibGVt
cy4KLSAgICAgICAgICAgIG5vZGUtPnNldEJvZHkobmV3Qm9keSk7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUoY29uZGl0aW9uVmFyaWFibGUpKTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBs
b29wLgotICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBmb3IgKGlu
aXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vIGludG8KLSAgICAgICAg
ICAgIC8vICAgewotICAgICAgICAgICAgLy8gICAgIGluaXQ7Ci0gICAgICAgICAgICAvLyAgICAg
Ym9vbCBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7Ci0gICAgICAg
ICAgICAvLyAgICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOwotICAg
ICAgICAgICAgLy8gICAgICAgczAgPSBleHByOwotICAgICAgICAgICAgLy8gICAgIH0KLSAgICAg
ICAgICAgIC8vICAgfQorICAgICAgICAgICAgaWYgKCFtTG9vcC5jb25kaXRpb24pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gQ3JlYXRlQm9vbE5vZGUo
dHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGlsZUxv
b3A7CiAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKmxvb3BTY29wZSAgICAgICAgICAgID0gbmV3
IFRJbnRlcm1CbG9jaygpOwogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVT
ZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKIApAQCAtMjMzLDQ4ICszMzIsMTMw
IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJ
bnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNo
X2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8g
SW5zZXJ0ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsi
IG90aGVyd2lzZQotICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kaXRpb25Jbml0aWFsaXpl
ciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAg
ICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IG5vZGUtPmdldENv
bmRpdGlvbigpLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3Ag
Y29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06
CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0K
KyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAg
ICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIHdoaWxlIChleHBy
KSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNh
c2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAg
IGV4cHJCOyBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBib2R5OyB9
IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVM
b29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVM
b29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBpbiB0aGUg
d2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRT
ZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShleHByKSB7IHdoaWxlTG9v
cEJvZHkgfSIKKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPQorICAgICAgICAgICAgICAgICAg
ICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0aW9uLCBu
dWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGlu
dWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAgICAg
bUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uSW5pdGlhbGl6
ZXIgPSBDcmVhdGVCb29sTm9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBs
b29wIGNvbmRpdGlvbiBpbnNpZGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgLy8gVHJhbnNm
b3JtOgorICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5
OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAgeworICAg
ICAgICAgICAgICAgIC8vICAgICBpbml0OworICAgICAgICAgICAgICAgIC8vICAgICBib29sIHMw
ID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgICAgZXhwckI7
CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgIH0KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBh
cmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorICAgICAg
ICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24pKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsg
fSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKndoaWxl
TG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIgaW4gdGhl
IHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0
U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9vcChFTG9v
cFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSksIG51bGxw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29u
ZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24g
PSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9k
ZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKLQotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAgICAgICBU
SW50ZXJtQmxvY2sgKndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3
aGlsZSBsb29wCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1
c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAotICAgICAgICAgICAg
aWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUg
bG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8g
ICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBp
bnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7
CisgICAgICAgICAgICAgICAgLy8gICAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAg
IC8vICAgICB3aGlsZSAoczApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0K
KyAgICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAv
LyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ug
c3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4
cHJCOyBzMCA9IGV4cHI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJi
b29sIHMwID0gZXhwcjsiCisgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2UtPnB1c2hf
YmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUo
bUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAgICAgICAg
ICAgIC8vIEluc2VydCAieyBib2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNr
KG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IEluc2VydCAiZXhwckI7IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhw
cmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0
ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAogICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAgICAgQ3Jl
YXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRDb25kaXRp
b24oKS0+ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wQXNzaWdu
bWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+ZGVlcENv
cHkoKSkpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9vcChFTG9v
cFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSksIG51bGxw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxlKHMw
KSB7IHdoaWxlTG9vcEJvZHkgfSIKLSAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGlsZUxvb3Ag
PQotICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxscHRyLCBD
cmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOwogICAgICAgICAgICAgbG9v
cFNjb3BlLT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sod2hpbGVMb29wKTsKICAgICAgICAgICAg
IHF1ZXVlUmVwbGFjZW1lbnQobG9vcFNjb3BlLCBPcmlnaW5hbE5vZGU6OklTX0RST1BQRUQpOwog
CiAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgYmUgdHJh
dmVyc2VkIGFuZCBsb29wcyBpbnNpZGUgaXQgbWF5IGJlCi0gICAgICAgICAgICAvLyB0cmFuc2Zv
cm1lZC4gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIHN0aWxsIGJl
IGluIHRoZSBBU1QgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlvbiB0aGF0
J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRvZXNuJ3Qg
bmVlZCB0bwotICAgICAgICAgICAgLy8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0
aCB0byBpdC4KKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNl
IHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlcgorICAgICAg
ICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5kIHRyYW5z
Zm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorICAgICAgICAgICAgLy8gbmVlZCB0byBr
bm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9ybSBwYXRoIHRvIGl0LgogICAgICAgICB9CiAgICAg
fQogCkBAIC0yODMsMTYgKzQ2NCwyNiBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAvLyBXZSB0cmF2ZXJz
ZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9ybWVkLgog
ICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICBtTG9vcCA9IHByZXZMb29wOwogfQogCiB9ICAvLyBuYW1lc3BhY2UK
IAorYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsIFRJbnRl
cm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQoreworICAgIFNpbXBsaWZ5
TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgdHJhdmVyc2VyKG51bGxwdHIsIHN5bWJvbFRhYmxlKTsK
KyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKyAgICByZXR1cm4gdHJhdmVyc2VyLnVw
ZGF0ZVRyZWUoY29tcGlsZXIsIHJvb3QpOworfQorCiBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Y29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiB7Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1Ry
YXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7
CisgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyIGNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRp
dGlvbnNUb1NpbXBsaWZ5TWFzayk7CisgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
ciB0cmF2ZXJzZXIoJmNvbmRpdGlvbnNUb1NpbXBsaWZ5LCBzeW1ib2xUYWJsZSk7CiAgICAgcm9v
dC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CiAgICAgcmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVl
KGNvbXBpbGVyLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAppbmRleCA0Y2RlZGU2ODMyZGU5MzAyNDM0OGQ3
YzY5YWE5ZTYxYzA2YmI0NTBmLi42OGI5OGY4NWM0ODliOGY0Mjg4YjU5NDgzZDlmM2M5YWQ5MDU2
YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlM
b29wQ29uZGl0aW9ucy5oCkBAIC0xOSw2ICsxOSwxMCBAQCBjbGFzcyBUQ29tcGlsZXI7CiBjbGFz
cyBUSW50ZXJtTm9kZTsKIGNsYXNzIFRTeW1ib2xUYWJsZTsKIAorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSk7CisKIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlm
eSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzZkZTE4
MmQ5ZWYyM2IzYWIwMmM0MDllYmQxM2E2YjZlMzQ2OWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Fz
Tm9kZS5oCkBAIC0wLDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorCisj
aW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFjZSBwcml2Cit7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFzTm9kZQore307CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Ob2RlPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJuIG5vZGU7IH0K
K307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UeXBlZD4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3ltYm9s
PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhUSW50ZXJt
Tm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNO
b2RlPFRJbnRlcm1Db25zdGFudFVuaW9uPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybUNvbnN0YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpIDogbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/
IG5vZGUtPmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307
CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3Rp
dmU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0
aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUg
PyBub2RlLT5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3dpenpsZT4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N3aXp6bGVOb2RlKCkg
OiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1CaW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmluYXJ5ICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0JpbmFyeU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybVVuYXJ5PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc1VuYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVGVybmFyeT4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1Rlcm5hcnlOb2RlKCkgOiBudWxs
cHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1JZkVs
c2U+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0lm
RWxzZU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBB
c05vZGU8VEludGVybVN3aXRjaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1T
d2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzU3dpdGNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQ2FzZT4KK3sKKyAgICBzdGF0aWMgQU5HTEVf
SU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Nhc2VOb2RlKCkgOiBudWxscHRyOworICAgIH0K
K307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBu
b2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQWdncmVnYXRlPgoreworICAgIHN0YXRp
YyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSA6IG51
bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybUJs
b2NrPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Js
b2NrKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbj4KK3sKKyAgICBzdGF0aWMgQU5HTEVf
SU5MSU5FIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9k
ZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybURlY2xhcmF0aW9uPgoreworICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgp
IDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50
ZXJtTG9vcD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpleGVjKFRJ
bnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRB
c0xvb3BOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1CcmFuY2g+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJt
QnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc0JyYW5jaE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHByaXYKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9JTkxJTkUg
VCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIHJldHVybiBwcml2OjpBc05vZGU8
VD46OmV4ZWMobm9kZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIu
Y3BwCmluZGV4IGQwOGMzODZkYTA3ZmU5MGRmNmFlMjE5ODJhNDhlMTExYzNkYzdmMGUuLmFjYzc4
OTI5NmIyYjcxZTFiODMzYTkzMjM4OTE3NGE4OGU4MDNjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1O
b2RlUGF0dGVybk1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
CkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFt
aWNJbmRleGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCiAgICAgcmV0dXJuIElz
RHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeChub2RlKSAmJiBub2RlLT5nZXRMZWZ0KCkt
PmdldEFzU3dpenpsZU5vZGUoKTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6
Om1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5v
ZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbChUSW50ZXJt
QmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAo
KG1NYXNrICYga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC04Nyw3
ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5ICpub2Rl
KQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9k
ZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0FycmF5TGVuZ3RoTWV0aG9kKSAhPSAwKQog
ICAgIHsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50
ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJt
Tm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChU
SW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAg
ICAvLyBMLXZhbHVlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB0byBjaGVjayBmb3Ig
ZHluYW1pYyBpbmRleGluZyBpbiBMLXZhbHVlLgogICAgIC8vIFRyYXZlcnNlcnMgdGhhdCBkb24n
dCB0cmFjayBsLXZhbHVlcyBjYW4gc3RpbGwgdXNlIHRoaXMgY2xhc3MgYW5kIG1hdGNoIGJpbmFy
eSBub2RlcyB3aXRoCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2QK
IAogYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnBh
cmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0xW
YWx1ZVJlcXVpcmVkSGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBjb25zdAogewogICAgIGlmIChtYXRjaEludGVybmFs
KG5vZGUsIHBhcmVudE5vZGUpKQogICAgIHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIEludGVy
bU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50
ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJt
Tm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0V4cHJlc3Npb25S
ZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBJbnRl
cm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRl
cm1Ob2RlICpwYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBh
dHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkKK2Jvb2wgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3QKIHsKICAg
ICBpZiAoKG1NYXNrICYga1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbikgIT0gMCkKICAg
ICB7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkK
K2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24g
Km5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKChtTWFzayAmIGtNdWx0aURlY2xhcmF0aW9uKSAhPSAw
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlUGF0dGVybk1hdGNoZXIuaAppbmRleCBlOWM0YmNmYTUzMWZhOTQzYWZlNTRjMDYzZWNl
YWUyMDc3OGIzOTJlLi42ZjNkODczNTU2NzRlMGM4N2E3ZWQ0Nzc1ODdjNzIwNDQ1NTJkZDMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQ
YXR0ZXJuTWF0Y2hlci5oCkBAIC0yOCw1MiArMjgsNTIgQEAgY2xhc3MgSW50ZXJtTm9kZVBhdHRl
cm5NYXRjaGVyCiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0
cml4KFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogICAgIHN0YXRpYyBib29sIElzRHluYW1pY0luZGV4
aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAotICAgIGVudW0gUGF0
dGVyblR5cGUKKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CiAgICAgewogICAg
ICAgICAvLyBNYXRjaGVzIGV4cHJlc3Npb25zIHRoYXQgYXJlIHVuZm9sZGVkIHRvIGlmIHN0YXRl
bWVudHMgYnkgVW5mb2xkU2hvcnRDaXJjdWl0VG9JZgotICAgICAgICBrVW5mb2xkZWRTaG9ydENp
cmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorICAgICAgICBrVW5mb2xkZWRTaG9ydENpcmN1aXRF
eHByZXNzaW9uID0gMXUgPDwgMHUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBleHByZXNzaW9ucyB0
aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBzdGF0ZW1lbnRz
IHdoZXJlIGEKICAgICAgICAgLy8gY29uc3RydWN0b3Igb3IgZnVuY3Rpb24gY2FsbCByZXN1bHQg
aXMgYXNzaWduZWQuCi0gICAgICAgIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkgPSAweDAwMDEg
PDwgMSwKKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1IDw8IDF1LAogCiAg
ICAgICAgIC8vIE1hdGNoZXMgZHluYW1pYyBpbmRleGluZyBvZiB2ZWN0b3JzIG9yIG1hdHJpY2Vz
IGluIGwtdmFsdWVzLgotICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeElu
TFZhbHVlID0gMHgwMDAxIDw8IDIsCisgICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9y
TWF0cml4SW5MVmFsdWUgPSAxdSA8PCAydSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0
aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFibGVzLgotICAgICAgICBrTXVs
dGlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCAzLAorICAgICAgICBrTXVsdGlEZWNsYXJhdGlvbiA9
IDF1IDw8IDN1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIGFycmF5cy4K
LSAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNCwKKyAgICAgICAga0FycmF5
RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9u
cyBvZiBzdHJ1Y3RzIHdoZXJlIHRoZSBzdHJ1Y3QgdHlwZSBkb2VzIG5vdCBoYXZlIGEgbmFtZS4K
LSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwKKyAgICAg
ICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAxdSA8PCA1dSwKIAogICAgICAgICAvLyBN
YXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhvZC4KLSAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9k
ID0gMHgwMDAxIDw8IDYsCisgICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDF1IDw8IDZ1LAog
CiAgICAgICAgIC8vIE1hdGNoZXMgYSB2ZWN0b3Igb3IgbWF0cml4IGNvbnN0cnVjdG9yIHdob3Nl
IGFyZ3VtZW50cyBhcmUgc2NhbGFyaXplZCBieSB0aGUKICAgICAgICAgLy8gU0hfU0NBTEFSSVpF
X1ZFQ19PUl9NQVRfQ09OU1RSVUNUT1JfQVJHVU1FTlRTIHdvcmthcm91bmQuCi0gICAgICAgIGtT
Y2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisgICAgICAgIGtTY2Fs
YXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDF1IDw8IDd1LAogICAgIH07CiAgICAgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKIAotICAgIGJvb2wg
bWF0Y2goVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAq
bm9kZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRl
cm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKIAogICAgIC8vIFVzZSB0aGlzIHZlcnNp
b24gZm9yIGNoZWNraW5nIGJpbmFyeSBub2RlIG1hdGNoZXMgaW4gY2FzZSB5b3UncmUgdXNpbmcg
ZmxhZwogICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFsdWUuCi0g
ICAgYm9vbCBtYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9k
ZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSk7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtQmlu
YXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVk
SGVyZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpu
b2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7CisgICAgYm9v
bCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkg
Y29uc3Q7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3Q7CisgICAg
Ym9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOwogCi0gICAgYm9vbCBtYXRjaEludGVybmFs
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29s
IG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5v
ZGUpIGNvbnN0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZV91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCmluZGV4IDZhYjEzYmE0Njk1ZWMx
YzQzMGJiYTFjNjI5NmE1NjFhNGY5NzQzMmUuLmQzZTFmY2EwMDE0Mjk5YjRjNDY5MzAyN2NiNThk
NmZkMGNlNjE2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlX3V0aWwuY3BwCkBAIC0yMjQsNiArMjI0LDUwIEBAIFRWYXJpYWJsZSAqRGVjbGFyZVRl
bXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgIHJldHVybiB2YXJpYWJs
ZTsKIH0KIAorc3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4g
RGVjbGFyZVN0cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5UXVhbGlm
aWVyLAorICAgIHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcg
JnN0cnVjdFR5cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0SW5zdGFu
Y2VOYW1lKQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9CisgICAgICAgIG5ldyBUU3Ry
dWN0dXJlKHN5bWJvbFRhYmxlLCBzdHJ1Y3RUeXBlTmFtZSwgZmllbGRMaXN0LCBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsKTsKKworICAgIGF1dG8gbWFrZVN0cnVjdHVyZVR5cGUgPSBbJl0oYm9v
bCBpc1N0cnVjdFNwZWNpZmllcikgeworICAgICAgICBUVHlwZSAqc3RydWN0dXJlVHlwZSA9IG5l
dyBUVHlwZShzdHJ1Y3R1cmUsIGlzU3RydWN0U3BlY2lmaWVyKTsKKyAgICAgICAgc3RydWN0dXJl
VHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgICAgIHN0cnVjdHVyZVR5cGUtPnNl
dE1lbW9yeVF1YWxpZmllcihtZW1vcnlRdWFsaWZpZXIpOworICAgICAgICBpZiAoYXJyYXlTaXpl
ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0dXJlVHlwZS0+bWFrZUFycmF5KGFy
cmF5U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7CisgICAg
fTsKKworICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKworICAgIFRWYXJpYWJs
ZSAqdHlwZVZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtFbXB0eUltbXV0YWJsZVN0
cmluZywgbWFrZVN0cnVjdHVyZVR5cGUodHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisgICAgaW5zZXJ0U2VxdWVuY2UucHVz
aF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dHlwZVZhcn0pOworCisgICAgVFZhcmlhYmxl
ICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisgICAgaWYgKHN0cnVjdEluc3RhbmNlTmFtZSkKKyAg
ICB7CisgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwgKnN0
cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAg
ICAgIGluc2VydFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2luc3Rh
bmNlVmFyfSk7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0RnVuY3Rpb25JbmRleCA9IEZpbmRG
aXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KHJvb3QpOworICAgIHJvb3QtPmluc2VydENoaWxk
Tm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisKKyAgICByZXR1cm4g
e3R5cGVWYXIsIGluc3RhbmNlVmFyfTsKK30KKwogY29uc3QgVFZhcmlhYmxlICpEZWNsYXJlSW50
ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAppbmRleCAzOWI4NmRk
MWJmMjk2YjcwMzk1NmY3MTI2ZDA3NGJkNTlhY2U2YzRjLi5mNWQxYzkzNTgyYWEwZjUxMTcwNTcy
NjA1NTkzODViNmI3N2Y1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVfdXRpbC5oCkBAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVU
ZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKK3N0ZDo6
cGFpcjxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxlICo+IERlY2xhcmVTdHJ1Y3R1
cmUoCisgICAgVEludGVybUJsb2NrICpyb290LAorICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFi
bGUsCisgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LAorICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
LAorICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKyAgICB1aW50
MzJfdCBhcnJheVNpemUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RUeXBlTmFt
ZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CiBjb25z
dCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJvb3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJv
bFRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkTGlz
dCAqZmllbGRMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJl
YnVpbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODM0NzM4ODU4YzBjOWZjNjcyODhlYjE1ZTYzMzFhNTNh
NDQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAKQEAgLTAsMCArMSwx
MDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmgiCisKKyNkZWZpbmUgR1VBUkQyKGNvbmQsIGZhaWxWYWwpIFwKKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKCEoY29uZCkpICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsVmFsOyAgIFwKKyAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBHVUFSRChj
b25kKSBHVUFSRDIoY29uZCwgbnVsbHB0cikKKworbmFtZXNwYWNlIHNoCit7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5MSU5FIGJvb2wgQWxsQml0cyhUIGhh
eXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhheXN0YWNrICYgbmVlZGxlKSA9PSBu
ZWVkbGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5M
SU5FIGJvb2wgQW55Qml0cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhh
eXN0YWNrICYgbmVlZGxlKSAhPSAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitU
SW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVzdWx0ICZvdGhlcikK
KyAgICA6IG1BY3Rpb24ob3RoZXIubUFjdGlvbiksCisgICAgICBtVmlzaXQob3RoZXIubVZpc2l0
KSwKKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisgICAgICBtTXVsdGkoc3RkOjptb3Zl
KG90aGVyLm1NdWx0aSkpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJl
c3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFjdGlvbihB
Y3Rpb246OlJlcGxhY2VTaW5nbGUpLCBtVmlzaXQodmlzaXQpLCBtU2luZ2xlKCZub2RlKQore30K
KworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5v
ZGUsIFZpc2l0Qml0cyB2aXNpdCkKKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6UmVwbGFj
ZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisgICAgICBtVmlzaXQobm9kZSA/IHZpc2l0IDogVmlz
aXRCaXRzOjpOZWl0aGVyKSwKKyAgICAgIG1TaW5nbGUobm9kZSkKK3t9CisKK1RJbnRlcm1SZWJ1
aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KG51bGxwdHJfdCkKKyAgICA6IG1BY3Rpb24oQWN0
aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikK
K3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisgICAg
OiBtQWN0aW9uKEFjdGlvbjo6RmFpbCksIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIpLCBtU2lu
Z2xlKG51bGxwdHIpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3Vs
dChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgIDogbUFjdGlvbihBY3Rp
b246OlJlcGxhY2VNdWx0aSksCisgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKyAg
ICAgIG1TaW5nbGUobnVsbHB0ciksCisgICAgICBtTXVsdGkoc3RkOjptb3ZlKG5vZGVzKSkKK3t9
CisKK3ZvaWQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om1vdmVBc3NpZ25JbXBsKEJhc2VS
ZXN1bHQgJm90aGVyKQoreworICAgIG1BY3Rpb24gPSBvdGhlci5tQWN0aW9uOworICAgIG1WaXNp
dCAgPSBvdGhlci5tVmlzaXQ7CisgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7CisgICAgbU11
bHRpICA9IHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpOworfQorCitUSW50ZXJtUmVidWlsZDo6QmFz
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6TXVsdGkoc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJiZub2RlcykKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUobm9kZXMu
YmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworICAgIG5vZGVzLmVyYXNlKGl0LCBub2Rl
cy5lbmQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7Cit9CisKK2Jvb2wgVEludGVy
bVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
b24gPT0gQWN0aW9uOjpGYWlsOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0
Ojppc0Ryb3AoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6RHJvcDsK
K30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpzaW5nbGUoKSBj
b25zdAoreworICAgIHJldHVybiBtU2luZ2xlOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxUSW50
ZXJtTm9kZSAqPiAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om11bHRpKCkgY29uc3QKK3sK
KyAgICBpZiAobUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmbU11bHRpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUHJlUmVzdWx0ID0gVEludGVybVJlYnVpbGQ6OlBy
ZVJlc3VsdDsKKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVS
ZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5v
ZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQobnVsbHB0cl90KSA6IEJhc2VSZXN1
bHQobnVsbHB0cikge30KK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChG
YWlsKCkpIHt9CisKK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgOiBC
YXNlUmVzdWx0KG90aGVyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3Ro
ZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KKwordm9pZCBQcmVSZXN1bHQ6Om9wZXJhdG9yPShQ
cmVSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1wbChvdGhlcik7Cit9CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVidWls
ZDo6UG9zdFJlc3VsdDsKKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAmbm9k
ZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RSZXN1bHQ6
OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBWaXNpdEJp
dHM6Ok5laXRoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KG51bGxwdHJfdCkgOiBCYXNl
UmVzdWx0KG51bGxwdHIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEZhaWwpIDogQmFzZVJl
c3VsdChGYWlsKCkpIHt9CisKK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoUG9zdFJlc3VsdCAmJm90
aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEJhc2VS
ZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFBvc3RSZXN1bHQ6
Om9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpCit7CisgICAgbW92ZUFzc2lnbkltcGwob3Ro
ZXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUSW50ZXJtUmVidWlsZDo6VElu
dGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0
VmlzaXQpCisgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgbVN5bWJvbFRhYmxlKGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbVByZVZpc2l0KHByZVZpc2l0KSwKKyAg
ICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQoreworICAgIEFTU0VSVChwcmVWaXNpdCB8fCBwb3N0
VmlzaXQpOworfQorCitUSW50ZXJtUmVidWlsZDo6flRJbnRlcm1SZWJ1aWxkKCkKK3sKKyAgICBB
U1NFUlQoIW1Ob2RlU3RhY2sudmFsdWUpOworICAgIEFTU0VSVCghbU5vZGVTdGFjay50YWlsKTsK
K30KKworY29uc3QgVEZ1bmN0aW9uICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50RnVuY3Rpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50RnVuYzsKK30KKworVEludGVybU5vZGUgKlRJ
bnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisgICAgYXV0byBwYXJlbnQgPSAqbU5vZGVTdGFjay50
YWlsOworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgLS1vZmZzZXQ7Cisg
ICAgICAgIEFTU0VSVChwYXJlbnQudGFpbCk7CisgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFp
bDsKKyAgICB9CisgICAgcmV0dXJuIHBhcmVudC52YWx1ZTsKK30KKworYm9vbCBUSW50ZXJtUmVi
dWlsZDo6cmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICghcmVidWls
ZEluUGxhY2Uocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiBtQ29tcGlsZXIudmFsaWRhdGVBU1QoJnJvb3QpOworfQorCitib29sIFRJbnRlcm1S
ZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIHJl
dHVybiByZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJlYnVpbGQ6
OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICByZXR1cm4gcmVidWls
ZEluUGxhY2VJbXBsKG5vZGUpOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5Q
bGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHJlYnVpbGRJblBs
YWNlSW1wbChub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+Citib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKK3sKKyAgICBhdXRvICpu
ZXdOb2RlID0gdHJhdmVyc2VBbnlBczxOb2RlPihub2RlKTsKKyAgICBpZiAoIW5ld05vZGUpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5ld05vZGUgIT0g
Jm5vZGUpCisgICAgeworICAgICAgICAqbm9kZS5nZXRTZXF1ZW5jZSgpID0gc3RkOjptb3ZlKCpu
ZXdOb2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6cmVidWlsZChUSW50ZXJtTm9kZSAmbm9kZSkKK3sK
KyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorTm9kZSAqVEludGVybVJlYnVpbGQ6OnRy
YXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgUG9zdFJlc3VsdCByZXN1bHQo
dHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZh
aWwgfHwgIXJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBhc05vZGU8Tm9kZT4ocmVzdWx0Lm1TaW5nbGUpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMo
VEludGVybU5vZGUgJm5vZGUsIE5vZGUgKiZvdXQpCit7CisgICAgUG9zdFJlc3VsdCByZXN1bHQo
dHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZh
aWwgfHwgcmVzdWx0Lm1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVsdGkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdWx0Lm1TaW5nbGUpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb3V0ID0gYXNOb2RlPE5vZGU+KHJl
c3VsdC5tU2luZ2xlKTsKKyAgICByZXR1cm4gb3V0OworfQorCitib29sIFRJbnRlcm1SZWJ1aWxk
Ojp0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9k
ZSkKK3sKKyAgICBhdXRvICpjb25zdCBjaGlsZHJlbiA9IG5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAg
ICBBU1NFUlQoY2hpbGRyZW4pOworICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJlbjsKKwor
ICAgIGZvciAoVEludGVybU5vZGUgKmNoaWxkIDogKmNoaWxkcmVuKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNoaWxkKTsKKyAgICAgICAgUG9zdFJlc3VsdCByZXN1bHQodHJhdmVyc2VBbnkoKmNo
aWxkKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQubUFjdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisgICAgICAgICAgICAgICAgbmV3
Q2hpbGRyZW4ucHVzaF9iYWNrKHJlc3VsdC5tU2luZ2xlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VNdWx0aToKKyAgICAgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1Ob2RlICpuZXdOb2RlIDogcmVzdWx0Lm1NdWx0aSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoX2JhY2so
bmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpEcm9wOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6RmFpbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqY2hp
bGRyZW4gPSBzdGQ6Om1vdmUobmV3Q2hpbGRyZW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0cnVjdCBUSW50ZXJtUmVidWlsZDo6Tm9kZVN0
YWNrR3VhcmQKK3sKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBvbGROb2RlU3RhY2s7Cisg
ICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gJm5vZGVTdGFjazsKKyAgICBOb2RlU3RhY2tHdWFy
ZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorICAgICAgICA6IG9sZE5vZGVT
dGFjayhub2RlU3RhY2spLCBub2RlU3RhY2sobm9kZVN0YWNrKQorICAgIHt9CisgICAgfk5vZGVT
dGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KK307CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUp
Cit7CisgICAgUHJlUmVzdWx0IHByZVJlc3VsdCA9IHRyYXZlcnNlUHJlKG9yaWdpbmFsTm9kZSk7
CisgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChwcmVS
ZXN1bHQubVZpc2l0ID09IFZpc2l0Qml0czo6TmVpdGhlcik7CisgICAgICAgIHJldHVybiBzdGQ6
Om1vdmUocHJlUmVzdWx0KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5vZGUgICAg
ICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKyAgICBjb25zdCBWaXNpdEJpdHMgdmlzaXQgICAgICAg
PSBwcmVSZXN1bHQubVZpc2l0OworICAgIGNvbnN0IE5vZGVUeXBlIGN1cnJOb2RlVHlwZSA9IGdl
dE5vZGVUeXBlKCpjdXJyTm9kZSk7CisKKyAgICBjdXJyTm9kZSA9IHRyYXZlcnNlQ2hpbGRyZW4o
Y3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwgdmlzaXQpOworICAgIGlmICgh
Y3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRmFpbCgpOworICAgIH0KKworICAgIHJl
dHVybiB0cmF2ZXJzZVBvc3QoY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwg
dmlzaXQpOworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlUHJlKFRJbnRl
cm1Ob2RlICZvcmlnaW5hbE5vZGUpCit7CisgICAgaWYgKCFtUHJlVmlzaXQpCisgICAgeworICAg
ICAgICByZXR1cm4ge29yaWdpbmFsTm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyAgICB9CisKKyAg
ICBOb2RlU3RhY2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZv
cmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgY29uc3QgTm9kZVR5cGUg
b3JpZ2luYWxOb2RlVHlwZSA9IGdldE5vZGVUeXBlKG9yaWdpbmFsTm9kZSk7CisKKyAgICBzd2l0
Y2ggKG9yaWdpbmFsTm9kZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtu
b3duOgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBGYWls
KCk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiB2
aXNpdFN5bWJvbFByZSgqb3JpZ2luYWxOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdENv
bnN0YW50VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAgcmV0dXJu
IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Z1bmN0aW9uUHJv
dG90eXBlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0
aXZlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKCpv
cmlnaW5hbE5vZGUuZ2V0QXNQcmVwcm9jZXNzb3JEaXJlY3RpdmUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmluYXJ5
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QmluYXJ5UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNC
aW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0VGVybmFyeVByZSgqb3JpZ2luYWxOb2RlLmdldEFzVGVybmFyeU5vZGUo
KSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1cm4g
dmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0SWZFbHNl
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0Y2hQcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNhc2U6Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNDYXNlTm9k
ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0
QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0
ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVByZSgqb3JpZ2luYWxOb2RlLmdl
dEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246CisgICAgICAg
ICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSgKKyAgICAgICAg
ICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2Rl
KCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdERlY2xhcmF0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4g
dmlzaXRMb29wUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAgICAgY2Fz
ZSBOb2RlVHlwZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUHJlKCpv
cmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworVEludGVybU5vZGUg
KlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBlIGN1cnJOb2RlVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50
ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCit7CisgICAgaWYgKCFB
bnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkKKyAgICB7CisgICAgICAgIHJldHVy
biAmY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6
Q2hpbGRyZW5SZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0gJmN1cnJOb2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBOb2RlU3RhY2tHdWFy
ZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwgJmd1YXJk
Lm9sZE5vZGVTdGFja307CisKKyAgICBzd2l0Y2ggKGN1cnJOb2RlVHlwZSkKKyAgICB7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJv
bDoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiAmY3Vy
ck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAg
ICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVuYXJ5
OgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5vZGUuZ2V0
QXNVbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAg
ICAgIHJldHVybiB0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAgICAgICAgICByZXR1
cm4gdHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzVGVybmFyeU5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUlm
RWxzZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVN3aXRjaENoaWxk
cmVuKCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1cnJOb2Rl
LmdldEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5p
dGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxk
cmVuKCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6QWdncmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQWdncmVnYXRl
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpCbG9jazoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlR2xvYmFsUXVhbGlm
aWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAqY3Vyck5vZGUuZ2V0QXNH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRGVjbGFyYXRpb25DaGls
ZHJlbigqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VMb29wQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJyYW5jaDoK
KyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9kZS5nZXRB
c0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp0
cmF2ZXJzZVBvc3QoTm9kZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0cyB2aXNp
dCkKK3sKKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisgICAgeworICAgICAgICByZXR1cm4gY3Vyck5v
ZGU7CisgICAgfQorCisgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBvc3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAgIGlmIChBbnlCaXRz
KHZpc2l0LCBWaXNpdEJpdHM6OlBvc3RSZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0g
JmN1cnJOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAg
IE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sgPSB7JmN1
cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5vZGVUeXBl
KQorICAgIHsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIEFT
U0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbCgpOworICAgICAgICBjYXNlIE5v
ZGVUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0KCpjdXJy
Tm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50
VW5pb246CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDb25zdGFudFVuaW9uUG9zdCgqY3Vyck5v
ZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlv
blByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9z
dCgqY3Vyck5vZGUuZ2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGly
ZWN0aXZlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmFyeToKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFVuYXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJpbmFyeVBv
c3QoKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VGVybmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJyTm9kZS5n
ZXRBc1Rlcm5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l6emxlOgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0U3dpenpsZVBvc3QoKmN1cnJOb2RlLmdldEFzU3dpenpsZU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdElmRWxzZVBvc3QoKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUG9z
dCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpD
YXNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Q2FzZVBvc3QoKmN1cnJOb2RlLmdldEFzQ2Fz
ZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoKmN1cnJOb2RlLmdl
dEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpBZ2dyZWdh
dGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9kZS5nZXRB
c0FnZ3JlZ2F0ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmxvY2s6CisgICAgICAgICAg
ICByZXR1cm4gdmlzaXRCbG9ja1Bvc3QoKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorICAgICAgICAgICAg
ICAgICpjdXJyTm9kZS5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1cm4gdmlz
aXREZWNsYXJhdGlvblBvc3QoKmN1cnJOb2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpMb29wOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBv
c3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJy
YW5jaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJyYW5jaFBvc3QoKmN1cnJOb2RlLmdldEFz
QnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1RJ
bnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJlbihUSW50
ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGls
ZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VC
bG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBpZiAodHJhdmVyc2VBZ2dy
ZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gJm5vZGU7Cisg
ICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlRGVjbGFyYXRpb25DaGlsZHJlbihUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUp
Cit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
VEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50
ZXJtU3dpenpsZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9kZS5nZXRP
cGVyYW5kKCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqbmV3T3BlcmFuZCA9
IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQobmV3T3Bl
cmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6bGVPZmZz
ZXRzKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUp
Cit7CisgICAgYXV0byAqY29uc3QgbGVmdCA9IG5vZGUuZ2V0TGVmdCgpOworICAgIEFTU0VSVChs
ZWZ0KTsKKyAgICBhdXRvICpjb25zdCByaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICBBU1NF
UlQocmlnaHQpOworCisgICAgYXV0byAqY29uc3QgbmV3TGVmdCA9IHRyYXZlcnNlQW55QXM8VElu
dGVybVR5cGVkPigqbGVmdCk7CisgICAgR1VBUkQobmV3TGVmdCk7CisgICAgYXV0byAqY29uc3Qg
bmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKyAgICBHVUFS
RChuZXdSaWdodCk7CisKKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJp
Z2h0KQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRPcCgpOworICAgICAg
ICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5l
d0xlZnQtPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVy
ZmFjZUJsb2NrOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0LT5n
ZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUJp
bmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRTaGFkZXJW
ZXJzaW9uKCkpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdM
ZWZ0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJt
Tm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihUSW50ZXJtVW5hcnkg
Jm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFuZCgpOwor
ICAgIEFTU0VSVChvcGVyYW5kKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld09wZXJhbmQgPSB0cmF2
ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworICAgIEdVQVJEKG5ld09wZXJhbmQp
OworCisgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgVEludGVybVVuYXJ5KG5vZGUuZ2V0T3AoKSwgbmV3T3BlcmFuZCwgbm9kZS5nZXRGdW5j
dGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5v
ZGUpCit7CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisgICAg
QVNTRVJUKGNvbmQpOworICAgIGF1dG8gKmNvbnN0IHRydWVfID0gbm9kZS5nZXRUcnVlRXhwcmVz
c2lvbigpOworICAgIEFTU0VSVCh0cnVlXyk7CisgICAgYXV0byAqY29uc3QgZmFsc2VfID0gbm9k
ZS5nZXRGYWxzZUV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZmFsc2VfKTsKKworICAgIGF1dG8g
KmNvbnN0IG5ld0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAg
IEdVQVJEKG5ld0NvbmQpOworICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFz
PFRJbnRlcm1UeXBlZD4oKnRydWVfKTsKKyAgICBHVUFSRChuZXdUcnVlKTsKKyAgICBhdXRvICpj
b25zdCBuZXdGYWxzZSA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqZmFsc2VfKTsKKyAg
ICBHVUFSRChuZXdGYWxzZSk7CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUg
IT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBUSW50ZXJtVGVybmFyeShuZXdDb25kLCBuZXdUcnVlLCBuZXdGYWxzZSk7CisgICAgfQorCisg
ICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZl
cnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25z
dCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCk7CisgICAgYXV0
byAqY29uc3QgdHJ1ZV8gID0gbm9kZS5nZXRUcnVlQmxvY2soKTsKKyAgICBhdXRvICpjb25zdCBm
YWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld0NvbmQg
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAgIEdVQVJEKG5ld0NvbmQp
OworICAgIFRJbnRlcm1CbG9jayAqbmV3VHJ1ZSA9IG51bGxwdHI7CisgICAgaWYgKHRydWVfKQor
ICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqdHJ1ZV8sIG5ld1RydWUpKTsKKyAg
ICB9CisgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisgICAgaWYgKGZhbHNl
XykKKyAgICB7CisgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNlXywgbmV3RmFsc2Up
KTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUgIT0gdHJ1ZV8g
fHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJt
SWZFbHNlKG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Jm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l0Y2hD
aGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGluaXQgPSBu
b2RlLmdldEluaXQoKTsKKyAgICBBU1NFUlQoaW5pdCk7CisgICAgYXV0byAqY29uc3Qgc3RtdHMg
PSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKyAgICBBU1NFUlQoc3RtdHMpOworCisgICAgYXV0
byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7Cisg
ICAgR1VBUkQobmV3SW5pdCk7CisgICAgYXV0byAqY29uc3QgbmV3U3RtdHMgPSB0cmF2ZXJzZUFu
eUFzPFRJbnRlcm1CbG9jaz4oKnN0bXRzKTsKKyAgICBHVUFSRChuZXdTdG10cyk7CisKKyAgICBp
ZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld1N0bXRzICE9IHN0bXRzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtU3dpdGNoKG5ld0luaXQsIG5ld1N0bXRzKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVy
c2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgY29u
ZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBu
dWxscHRyOworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlB
cygqY29uZCwgbmV3Q29uZCkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNvbmQpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1DYXNlKG5ld0NvbmQpOworICAgIH0KKwor
ICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxkcmVuKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpCit7CisgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRlZmluaXRp
b25zIGNhbm5vdCBiZSBuZXN0ZWQuCisgICAgbVBhcmVudEZ1bmMgPSBub2RlLmdldEZ1bmN0aW9u
KCk7CisgICAgc3RydWN0IE9uRXhpdAorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICom
cGFyZW50RnVuYzsKKyAgICAgICAgT25FeGl0KGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVudEZ1bmMp
IDogcGFyZW50RnVuYyhwYXJlbnRGdW5jKSB7fQorICAgICAgICB+T25FeGl0KCkgeyBwYXJlbnRG
dW5jID0gbnVsbHB0cjsgfQorICAgIH0gb25FeGl0KG1QYXJlbnRGdW5jKTsKKworICAgIGF1dG8g
KmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgIEFTU0VSVChw
cm90byk7CisgICAgYXV0byAqY29uc3QgYm9keSA9IG5vZGUuZ2V0Qm9keSgpOworICAgIEFTU0VS
VChib2R5KTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1Byb3RvID0gdHJhdmVyc2VBbnlBczxUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGU+KCpwcm90byk7CisgICAgR1VBUkQobmV3UHJvdG8pOworICAg
IGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4oKmJvZHkp
OworICAgIEdVQVJEKG5ld0JvZHkpOworCisgICAgaWYgKG5ld1Byb3RvICE9IHByb3RvIHx8IG5l
d0JvZHkgIT0gYm9keSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9u
RGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2Rl
OworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlm
aWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb24gJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2wo
KTsKKyAgICBBU1NFUlQoc3ltYm9sKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRy
YXZlcnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisgICAgR1VBUkQobmV3U3ltYm9s
KTsKKworICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24obmV3U3ltYm9sLCBub2RlLmlz
UHJlY2lzZSgpLCBub2RlLmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOwor
fQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKFRJ
bnRlcm1Mb29wICZub2RlKQoreworICAgIGNvbnN0IFRMb29wVHlwZSBsb29wVHlwZSA9IG5vZGUu
Z2V0VHlwZSgpOworCisgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgpOworICAg
IGF1dG8gKmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIGF1dG8gKmNvbnN0
IGV4cHIgPSBub2RlLmdldEV4cHJlc3Npb24oKTsKKyAgICBhdXRvICpjb25zdCBib2R5ID0gbm9k
ZS5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOworCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfQVNTRVJUUykKKyAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVExv
b3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BEb1doaWxl
OgorICAgICAgICAgICAgQVNTRVJUKGNvbmQpOworICAgICAgICAgICAgQVNTRVJUKCFpbml0ICYm
ICFleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgYXV0byAq
Y29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqYm9keSk7CisgICAg
R1VBUkQobmV3Qm9keSk7CisgICAgVEludGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRyOworICAg
IGlmIChpbml0KQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5pdCwgbmV3
SW5pdCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBudWxscHRyOworICAg
IGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqY29uZCwgbmV3
Q29uZCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAg
IGlmIChleHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZXhwciwgbmV3
RXhwcikpOworICAgIH0KKworICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3Q29uZCAhPSBj
b25kIHx8IG5ld0V4cHIgIT0gZXhwciB8fCBuZXdCb2R5ICE9IGJvZHkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlw
ZTo6RUxvb3BGb3I6CisgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BXaGlsZToKKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisgICAgICAgICAgICAgICAg
R1VBUkQobmV3Q29uZCAmJiBuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBHVUFSRCghbmV3SW5p
dCAmJiAhbmV3RXhwcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5ldyBUSW50ZXJtTG9vcChsb29wVHlwZSwgbmV3SW5pdCwgbmV3Q29uZCwgbmV3
RXhwciwgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJt
Tm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5j
aCAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBleHByID0gbm9kZS5nZXRFeHByZXNzaW9uKCk7
CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAgIGlmIChleHByKQor
ICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpleHByLCBu
ZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgVEludGVybUJyYW5jaChub2RlLmdldEZsb3dPcCgpLCBuZXdFeHByKTsK
KyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQcmUoVEludGVybVN5bWJv
bCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1By
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25z
dGFudFVuaW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsK
K30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJl
KFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRQcmVw
cm9jZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkK
K3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCit7CisgICAg
cmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAgcmV0dXJu
IHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6
OnZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwg
VmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElm
RWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBy
ZShUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpC
b3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQcmUoVEludGVy
bUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQor
CitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAmbm9k
ZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9kZSkKK3sK
KyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUp
Cit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKQoreworICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1S
ZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1S
ZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKwor
UHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UHJlKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKK3sKKyAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdChUSW50
ZXJtU3ltYm9sICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9u
ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
Jm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGly
ZWN0aXZlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRl
cm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpCit7CisgICAgcmV0
dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmluYXJ5UG9z
dChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2Rl
KQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2
aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiBub2Rl
OworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBvc3QoVEludGVy
bUlmRWxzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7CisgICAg
cmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVBv
c3QoVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QnJh
bmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBy
ZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRBZ2dyZWdh
dGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisK
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQor
CitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uUG9zdCgKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpCit7
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVJlYnVpbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5N2U0MGUz
NTU0YjZjMDlmNjZkY2NlY2Q5YmExNWUzNDRmNTJhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmgKQEAgLTAsMCArMSwzMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIgorCituYW1lc3BhY2Ugc2gKK3sK
KworLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKy8vIFRoaXMgY2xhc3MgaXMg
aW50ZW5kZWQgdG8gYmUgZGVyaXZlZCB3aXRoIG92ZXJyaWRkZW4gdmlzaXRYWFggZnVuY3Rpb25z
LgorLy8KKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlz
aXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisvLyBleGFjdGx5IG9u
Y2UsIHJlZ2FyZGxlc3Mgb2YgKHByZVZpc2l0KSBvciAocG9zdFZpc2l0KSB2YWx1ZXMuCisKKy8v
IEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZl
cyBhcyBmb2xsb3dzOgorLy8gICAgKiBJZiAocHJlVmlzaXQpOgorLy8gICAgICAtIFRoZSBub2Rl
IGlzIHZpc2l0ZWQgYmVmb3JlIGNoaWxkcmVuIGFyZSB0cmF2ZXJzZWQuCisvLyAgICAgIC0gVGhl
IHJldHVybmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUg
cmV0dXJuZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisvLyAgICAgICAgYXMgdGhlIG9yaWdpbmFs
IG5vZGUuCisvLyAgICAgIC0gSWYgbXVsdGlwbGUgbm9kZXMgYXJlIHJldHVybmVkLCBjaGlsZHJl
biBhbmQgcG9zdCB2aXNpdHMgb2YgdGhlIHJldHVybmVkIG5vZGVzIGFyZSBub3QKKy8vICAgICAg
ICBwcmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKy8vICAg
ICogSWYgKGNoaWxkVmlzaXQpCisvLyAgICAgIC0gSWYgYW55IG5ldyBjaGlsZHJlbiBhcmUgcmV0
dXJuZWQsIHRoZSBub2RlIGlzIGF1dG9tYXRpY2FsbHkgcmVidWlsdCB3aXRoIHRoZSBuZXcgY2hp
bGRyZW4KKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKy8vICAgICAgLSBEZXBlbmRpbmcg
b24gdGhlIHR5cGUgb2YgdGhlIG5vZGUsIG51bGwgY2hpbGRyZW4gbWF5IGJlIGRpc2NhcmRlZC4K
Ky8vICAgICAgLSBJbGwtdHlwZWQgY2hpbGRyZW4gY2F1c2UgcmVidWlsZCBlcnJvcnMuIElsbC10
eXBlZCBtZWFucyB0aGUgbm9kZSB0byBhdXRvbWF0aWNhbGx5IHJlYnVpbGQKKy8vICAgICAgICBj
YW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRzIGNv
bnN0cnVjdG9yLgorLy8gICAgICAtIE9ubHkgaW5zdGFuY2VzIG9mIFRJbnRlcm1BZ2dyZWdhdGVC
YXNlIGNhbiBhY2NlcHQgTXVsdGkgcmVzdWx0cyBmb3IgYW55IG9mIGl0cyBjaGlsZHJlbi4KKy8v
ICAgICAgICBJZiBzdXBwbGllZCwgdGhlIG5vZGVzIGFyZSBzcGxpY2VkIGNoaWxkcmVuIGF0IHRo
ZSBzcG90IG9mIHRoZSBvcmlnaW5hbCBjaGlsZC4KKy8vICAgICogSWYgKHBvc3RWaXNpdCkKKy8v
ICAgICAgLSBUaGUgbm9kZSBpcyB2aXNpdGVkIGFmdGVyIGFueSBjaGlsZHJlbiBhcmUgdHJhdmVy
c2VkLgorLy8gICAgICAtIE9ubHkgYWZ0ZXIgc3VjaCBhIHJlYnVpbGQgKG9yIGxhY2sgdGhlcmVv
ZiksIHRoZSBwb3N0LXZpc2l0IGlzIHBlcmZvcm1lZC4KKy8vCisvLyBOb2RlcyBpbiB2aXNpdCBm
dW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgaW4gcGxhY2UsIGluY2x1ZGluZyBU
SW50ZXJtQWdncmVnYXRlQmFzZQorLy8gY2hpbGQgc2VxdWVuY2VzLgorLy8KKy8vIFRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9ucyBvZiBhbGwgdGhlIHZpc2l0WFhYIGZ1bmN0aW9ucyBzdXBwb3J0
IGZ1bGwgcHJlIGFuZCBwb3N0IHRyYXZlcnNhbAorLy8gd2l0aG91dCBtb2RpZnlpbmcgdGhlIHZp
c2l0ZWQgbm9kZXMuCisvLworY2xhc3MgVEludGVybVJlYnVpbGQgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKK3sKKworICAgIGVudW0gY2xhc3MgQWN0aW9uCisgICAgeworICAgICAgICBSZXBsYWNlU2lu
Z2xlLAorICAgICAgICBSZXBsYWNlTXVsdGksCisgICAgICAgIERyb3AsCisgICAgICAgIEZhaWws
CisgICAgfTsKKworICBwdWJsaWM6CisgICAgc3RydWN0IEZhaWwKKyAgICB7fTsKKworICAgIGVu
dW0gVmlzaXRCaXRzIDogc2l6ZV90CisgICAgeworICAgICAgICAvLyBObyBiaXRzIGFyZSBzZXQu
CisgICAgICAgIEVtcHR5ID0gMHUsCisKKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2YgcmV0dXJu
ZWQgbm9kZSdzIGNoaWxkcmVuLgorICAgICAgICBDaGlsZHJlbiA9IDF1IDw8IDB1LAorCisgICAg
ICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKyAgICAgICAgUG9zdCA9
IDF1IDw8IDF1LAorCisgICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlm
IHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorICAg
ICAgICBDaGlsZHJlblJlcXVpcmVzU2FtZSA9IDF1IDw8IDJ1LAorCisgICAgICAgIC8vIElmIChQ
b3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMg
dGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIFBvc3RSZXF1aXJlc1NhbWUgPSAxdSA8PCAzdSwK
KworICAgICAgICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1
aXJlc1NhbWUsCisgICAgICAgIE5laXRoZXIgICAgICA9IEVtcHR5LAorICAgICAgICBCb3RoICAg
ICAgICAgPSBDaGlsZHJlbiB8IFBvc3QsCisgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBS
ZXF1aXJlU2FtZSwKKyAgICB9OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVTdGFja0d1
YXJkOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENvbnNMaXN0Cisg
ICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBDb25zTGlzdDxUPiAqdGFpbDsKKyAgICB9
OworCisgICAgY2xhc3MgQmFzZVJlc3VsdAorICAgIHsKKyAgICAgICAgQmFzZVJlc3VsdChjb25z
dCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworICAgICAgICBCYXNlUmVzdWx0ICZvcGVyYXRvcj0o
Y29uc3QgQmFzZVJlc3VsdCAmKSA9IGRlbGV0ZTsKKworICAgICAgcHVibGljOgorICAgICAgICBC
YXNlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBCYXNlUmVz
dWx0KEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGNvbnN0cnVjdG9y
IGltcGxzCisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2
aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2
aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQobnVsbHB0cl90KTsKKyAgICAgICAgQmFzZVJlc3Vs
dChGYWlsKTsKKyAgICAgICAgQmFzZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
Jm5vZGVzKTsKKworICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQgJm90aGVy
KTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworCisgICAgICAgIHN0YXRpYyBC
YXNlUmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBzdGF0aWMgQmFzZVJlc3Vs
dCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vZGVzOworICAgICAgICAgICAgZm9y
IChJdGVyIG5vZGVzQ3VyciA9IG5vZGVzQmVnaW47IG5vZGVzQ3VyciAhPSBub2Rlc0VuZDsgKytu
b2Rlc0N1cnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVzaF9iYWNr
KCpub2Rlc0N1cnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZShub2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0OworICAg
ICAgICBib29sIGlzRHJvcCgpIGNvbnN0OworICAgICAgICBUSW50ZXJtTm9kZSAqc2luZ2xlKCkg
Y29uc3Q7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICptdWx0aSgp
IGNvbnN0OworCisgICAgICBwdWJsaWM6CisgICAgICAgIEFjdGlvbiBtQWN0aW9uOworICAgICAg
ICBWaXNpdEJpdHMgbVZpc2l0OworICAgICAgICBUSW50ZXJtTm9kZSAqbVNpbmdsZTsKKyAgICAg
ICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworICAgIH07CisKKyAgcHVibGlj
OgorICAgIGNsYXNzIFByZVJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorICAgIHsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworCisgICAgICBwdWJsaWM6CisgICAgICAg
IFByZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFByZVJlc3VsdChUSW50ZXJt
Tm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNhbWUpOwor
ICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCA9IFZp
c2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAv
LyBVc2VkIHRvIGRyb3AgYSBub2RlLgorICAgICAgICBQcmVSZXN1bHQoRmFpbCk7ICAgICAgIC8v
IFVzZWQgdG8gc2lnbmFsIGZhaWx1cmUuCisKKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJlUmVz
dWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2RlcykpOworICAgICAgICB9CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVs
dGkoSXRlciBub2Rlc0JlZ2luLCBJdGVyIG5vZGVzRW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworICAgICAgICB1c2luZyBC
YXNlUmVzdWx0Ojppc0ZhaWw7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRpOworICAg
ICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisKKyAgICAgIHByaXZhdGU6CisgICAgICAg
IFByZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAgIH07CisKKyAgICBjbGFzcyBQb3N0
UmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBmcmllbmQgY2xhc3Mg
VEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgUG9zdFJlc3VsdChQb3N0
UmVzdWx0ICYmb3RoZXIpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZub2RlKTsK
KyAgICAgICAgUG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgICAgIFBvc3RSZXN1
bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUKKyAgICAgICAgUG9zdFJlc3Vs
dChGYWlsKTsgICAgICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAgICB2b2lk
IG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQb3N0UmVz
dWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBz
dGF0aWMgUG9zdFJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rlc0JlZ2lu
LCBub2Rlc0VuZCk7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0Ojppc0Ry
b3A7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNpbmcgQmFz
ZVJlc3VsdDo6bXVsdGk7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsKKworICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgUG9zdFJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAg
IH07CisKKyAgcHVibGljOgorICAgIFRJbnRlcm1SZWJ1aWxkKFRDb21waWxlciAmY29tcGlsZXIs
IGJvb2wgcHJlVmlzaXQsIGJvb2wgcG9zdFZpc2l0KTsKKworICAgIHZpcnR1YWwgflRJbnRlcm1S
ZWJ1aWxkKCk7CisKKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0aGUgcHJv
dmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhlCisgICAg
Ly8gcm9vdCwgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcg
bm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUKKyAgICAvLyBvY2N1cnJlZC4K
KyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1ib2xQcmUo
VEludGVybVN5bWJvbCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDb25zdGFu
dFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJl
c3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQ
cmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVS
ZXN1bHQgdmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUHJl
UmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwg
UHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7CisgICAgdmly
dHVhbCBQcmVSZXN1bHQgdmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKTsK
KyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNoICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUp
OworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAmbm9kZSk7
CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9k
ZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QmxvY2tQcmUoVElu
dGVybUJsb2NrICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBy
ZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKFRJ
bnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9u
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBv
c3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1
bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJl
Y3RpdmUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50
ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3Qo
VEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0VGVybmFy
eVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNp
dFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1
bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworICAgIHZpcnR1YWwgUG9z
dFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSk7CisgICAgdmlydHVh
bCBQb3N0UmVzdWx0IHZpc2l0Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKyAgICB2aXJ0
dWFsIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRp
b24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJt
QmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3Qo
VEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0RnVu
Y3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3Qo
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8vIENhbiBi
ZSB1c2VkIHRvIHJlYnVpbGQgYSBzcGVjaWZpYyBub2RlIGR1cmluZyBhIHRyYXZlcnNhbC4gVXNl
ZnVsIGZvciBmaW5lIGNvbnRyb2wgb2YKKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxk
cmVuLgorICAgIEFOR0xFX05PX0RJU0NBUkQgUG9zdFJlc3VsdCByZWJ1aWxkKFRJbnRlcm1Ob2Rl
ICZub2RlKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJ
ZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgor
ICAgIC8vIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNl
IGlmIGZhaWx1cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJ
blBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMgdGhlIHBy
b3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJuZWQsIHRo
ZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5ldyBub2Rl
IGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKworICAg
IC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdv
dWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorICAgIC8vIGJlY29tZSB0
aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUgb2Nj
dXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJblBsYWNlKFRJbnRlcm1E
ZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVsb3cgYSBm
dW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9uIHRoYXQg
ZW5jbG9zZXMKKyAgICAvLyB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZS4gKFRoaXMgcmV0dXJu
cyBudWxsIGlmIGF0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS4pCisgICAgY29uc3QgVEZ1
bmN0aW9uICpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0OworCisgICAgVEludGVybU5vZGUgKmdl
dFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCA9IDApIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVp
bGRJblBsYWNlSW1wbChOb2RlICZub2RlKTsKKworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VBbnko
VEludGVybU5vZGUgJm5vZGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAg
Tm9kZSAqdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4KKyAgICBib29sIHRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUs
IE5vZGUgKiZvdXQpOworCisgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJbnRlcm1Ob2RlICZv
cmlnaW5hbE5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBl
IGN1cnJOb2RlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
SW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXNpdEJpdHMgdmlzaXQpOworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VQb3N0KE5vZGVU
eXBlIG5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1O
b2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0cyB2aXNp
dCk7CisKKyAgICBib29sIHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlICZub2RlKTsKKworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRy
ZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VCaW5hcnlD
aGlsZHJlbihUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VU
ZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0
cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisgICAgVEludGVy
bU5vZGUgKnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSk7CisgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlU3dpdGNoQ2hpbGRyZW4oVEludGVybVN3aXRjaCAmbm9kZSk7
CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2Rl
KTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxvb3AgJm5v
ZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKFRJbnRlcm1CcmFu
Y2ggJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4o
VEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VCbG9j
a0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNl
QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgVEludGVybU5v
ZGUgKnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uICZub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7
CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAgY29uc3QgVEZ1bmN0aW9uICpt
UGFyZW50RnVuYyA9IG51bGxwdHI7CisgICAgR2V0Tm9kZVR5cGUgZ2V0Tm9kZVR5cGU7CisKKyAg
cHJpdmF0ZToKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBtTm9kZVN0YWNre251bGxwdHIs
IG51bGxwdHJ9OworICAgIGJvb2wgbVByZVZpc2l0OworICAgIGJvb2wgbVBvc3RWaXNpdDsKK307
CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9k
ZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hNTllNWFmMmQ1YWFjY2I1Y2I5MGUyNDJkNTBkZjg0ZWZlMDlj
YzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQRV9I
XworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVUWVBFX0hfCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKworZW51bSBjbGFzcyBOb2RlVHlwZQoreworICAgIFVua25vd24s
CisgICAgU3ltYm9sLAorICAgIENvbnN0YW50VW5pb24sCisgICAgRnVuY3Rpb25Qcm90b3R5cGUs
CisgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorICAgIFVuYXJ5LAorICAgIEJpbmFyeSwKKyAg
ICBUZXJuYXJ5LAorICAgIFN3aXp6bGUsCisgICAgSWZFbHNlLAorICAgIFN3aXRjaCwKKyAgICBD
YXNlLAorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiwKKyAgICBBZ2dyZWdhdGUsCisgICAgQmxvY2ss
CisgICAgR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24sCisgICAgRGVjbGFyYXRpb24sCisgICAg
TG9vcCwKKyAgICBCcmFuY2gsCit9OworCisvLyBUaGlzIGlzIGEgZnVuY3Rpb24gbGlrZSBvYmpl
Y3QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHRoYXQgc3RhY2sgYWxsb2NhdGVzIHRoaXMgYmVjYXVz
ZQorLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1Y3QuCitj
bGFzcyBHZXROb2RlVHlwZSA6IHByaXZhdGUgVEludGVybVRyYXZlcnNlcgoreworICAgIE5vZGVU
eXBlIG5vZGVUeXBlOworCisgIHB1YmxpYzoKKyAgICBHZXROb2RlVHlwZSgpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisKKyAgICBOb2RlVHlwZSBvcGVyYXRvcigp
KFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52aXNpdChWaXNpdDo6UHJl
VmlzaXQsIHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZVR5cGU7CisgICAgfQorCisgIHByaXZh
dGU6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9k
ZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9sOyB9CisKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlv
bihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZSB7IG5vZGVUeXBlID0gTm9kZVR5cGU6
OkNvbnN0YW50VW5pb247IH0KKworICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQgdmlzaXRQ
cmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGly
ZWN0aXZlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dp
enpsZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3dp
enpsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVU
eXBlID0gTm9kZVR5cGU6OkJpbmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpVbmFyeTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFy
eSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VGVybmFy
eTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRJZkVsc2Uo
VmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OklmRWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXRjaDsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q2FzZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRp
b24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9k
ZVR5cGU6OkFnZ3JlZ2F0ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCbG9jazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwg
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybURlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBub2Rl
VHlwZSA9IE5vZGVUeXBlOjpEZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6TG9vcDsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFu
Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkJyYW5j
aDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBz
aAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdXRpbC5jcHAKaW5kZXggMzQ2NDcwZTRiMjA1M2Y0YzkyMDJkNjVjMTZmM2IxNDUxNjgx
NTI4Yy4uNTgyZGRjNzBjOTZjMGFkYTAwMTY1YzIxY2ExZTk2NmY3OTU4NGFhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5jcHAKQEAgLTgwNCw2ICs4MDQsMTAgQEAgYm9vbCBJc091dHB1dE1ldGFsKFNoU2hhZGVy
T3V0cHV0IG91dHB1dCkKIHsKICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VU
UFVUOwogfQorYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91dHB1dCkK
K3sKKyAgICByZXR1cm4gb3V0cHV0ID09IFNIX01TTF9NRVRBTF9PVVRQVVQ7Cit9CiAKIGJvb2wg
SXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgK
aW5kZXggNTNlZTc1NTIwM2Q5Mjg4YjkyZGJiMjYwYmYyNGE1Y2FhNDFlMzE5NS4uZjlhZTliYjFk
NmVhNDMwYTUzMDQ3MzhjMzQ3NzNmMTI3N2YxNjExNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApAQCAtNzcsNiAr
NzcsNyBAQCBib29sIElzT3V0cHV0R0xTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogYm9vbCBJ
c091dHB1dEhMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRWdWxrYW4o
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1
dCBvdXRwdXQpOworYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91dHB1
dCk7CiAKIGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2FwcGxlLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZv
X3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQppbmRleCBhNDlkYzUyNzNmZjA2NjExN2RlNzIwN2Q5
ZGI3YzllNjRiYWVkMjQyLi4xNTAwZmZmNDIyYzAwMGZkMWU3ZWFlZmJjMDBkMDM3MTVkMzAyMWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2FwcGxlLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVf
aW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE5
LDcgKzE5LDI1IEBAIG5hbWVzcGFjZSBhbmdsZQogCiBib29sIEdldFN5c3RlbUluZm8oU3lzdGVt
SW5mbyAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKKyAgICBzdGF0
aWMgYm9vbCBpc2lPU0FwcE9uTWFjID0gZmFsc2U7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICBpc2lPU0FwcE9uTWFj
ID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBpc2lPU0FwcE9uTWFjXTsKKyAgICB9KTsK
KworICAgIGlmIChpc2lPU0FwcE9uTWFjKQorICAgIHsKKyAgICAgICAgR2V0U3lzdGVtSW5mb19p
b3MoaW5mbyk7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
LT5pc2lPU0FwcE9uTWFjID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mbzsK
KyAgICB9CisKKyAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CisjICAgIGVsaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CiAjICAgIGVs
c2UKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lv
cy5jcHAKaW5kZXggZTUyZWNiMzI3NWRkMjZmOTNlODM3NTY0NWQ2MGI3NDk3N2U3MTIxZC4uN2E5
ZDlmYTI4NmIwMmU5ZjNiYjMwMTQ3ZGNlYWFmZWZkNzdhZTU5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9f
aW9zLmNwcApAQCAtMTgsOSArMTgsMTYgQEAgbmFtZXNwYWNlIGFuZ2xlCiBib29sIEdldFN5c3Rl
bUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCiB7CiAgICAgewotICAgICAgICAvLyBUT0RPKGFu
Z2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNpb24gYW5kIEdQVSBp
bmZvLgorICAgICAgICAvLyAgICAgICAgR1BVRGV2aWNlSW5mbyBkZXZpY2VJbmZvOworICAgICAg
ICAvLyAgICAgICAgZGV2aWNlSW5mby52ZW5kb3JJZCAgICAgID0ga1ZlbmRvcklEX0FwcGxlOwor
ICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKyAgICAgICAg
Ly8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVuZG9yICA9ICJBcHBsZSI7CisgICAgICAgIC8v
ICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlcnNpb24gPSAiMC4wIjsKKyAgICAgICAgLy8gICAg
ICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisKKyAgICAgICAgLy8g
VE9ETyhhbmdsZWJ1Zy5jb20vNDI3NSk6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJzaW9uLgog
ICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0gICAgICAgIGluZm8t
PmdwdXMuZW1wbGFjZV9iYWNrKCkudmVuZG9ySWQgPSBrVmVuZG9ySURfQXBwbGU7CisgICAgICAg
IC8vIGluZm8tPmdwdXMucHVzaF9iYWNrKGRldmljZUluZm8pOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0NhcHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NhcHMuY3Bw
CmluZGV4IDFkZGRkNGQ4NTQ4MzJiMmQyOWIzODBhMDQ4YmQ0YTQzNzk5MzdjM2YuLjc5MzEwMDli
MmFlYThlZTE2ZThlMGQ3ZTkzZjcxN2Y0OTU5NWY3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBzdGF0aWMg
Ym9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNh
cHMsCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1aXJlZEZvcm1hdHNTaXplOyBp
KyspCiAgICAgewotICAgICAgICBjb25zdCBUZXh0dXJlQ2FwcyAmY2FwID0gdGV4dHVyZUNhcHMu
Z2V0KHJlcXVpcmVkRm9ybWF0c1tpXSk7CiAKKyAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNh
cCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOwogICAgICAgICBpZiAocmVx
dWlyZXNUZXh0dXJpbmcgJiYgIWNhcC50ZXh0dXJhYmxlKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00NjIsNyArNDYyLDYgQEAgc3RhdGljIGJvb2wgRGV0ZXJtaW5l
QVNUQ0xEUlRleHR1cmVTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0dXJlQ2FwcykK
ICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiwgIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSLAogICAgICAgICBHTF9DT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ18xMngxMl9LSFIsCiAgICAgfTsKLQogICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0
KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOwogfQogCkBAIC02MzAsMTIgKzYyOSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURl
cHRoVGV4dHVyZUFOR0xFU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMp
CiB7CiAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKICAgICAgICAg
R0xfREVQVEhfQ09NUE9ORU5UMTYsCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAm
JiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpIHx8ICFkZWZpbmVkKEFOR0xF
X0NQVV9BUk02NCkpCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJlbW92aW5n
IHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSAgICAgICAgLy8gYmVjYXVz
ZSBpdCBpcyBub3Qgc3VwcG9ydGVkIG9uIGlPUy4KLSAgICAgICAgLy8gVE9ETyhkaW5vKTogSSB0
aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBjaGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9T
IGFwcCBvbiBNYWMuCiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywKLSNlbmRpZgog
ICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywKICAgICB9OwogCkBAIC02NDcsMTIgKzY0
MSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3Qg
VGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBHTGVudW0gcmVx
dWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotI2lmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAgICAvLyBUT0RP
KGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9O
RU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1Mu
Ci0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBhIHJ1bnRp
bWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAgICBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICB9OwogCiAgICAgcmV0dXJuIEdldEZvcm1h
dFN1cHBvcnQodGV4dHVyZUNhcHMsIHJlcXVpcmVkRm9ybWF0cywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0Rpc3BsYXkuY3BwCmluZGV4IGRkZTQzMzdiYTViN2ZjN2I0ODJlYzI3NTE4OTBiNWRiZjMzYTMw
NDAuLjY1NzgxNGZlMDY3Mzg5NWE4MzFhNDNjZmNjZWZiNjk5ZTI1NmZjNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAgLTE4MSw3
ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50KCkKICAg
ICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX05VTExfQU5HTEU7CiAgICAgfQog
I2VuZGlmCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfTUVUQUwpCisgICAgaWYgKGFuZ2xlRGVm
YXVsdEVudiA9PSAibWV0YWwiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFOworICAgIH0KIAorI2VuZGlmCiAjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfRDNEMTEpCiAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX0QzRDEx
X0FOR0xFOwogI2VsaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKQEAgLTEzMjUsNiArMTMz
MSw0NyBAQCBFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChnbDo6Q29udGV4dCAqcHJldmlvdXND
b250ZXh0LAogICAgIHJldHVybiBOb0Vycm9yKCk7CiB9CiAKK0Vycm9yIERpc3BsYXk6Om1ha2VD
dXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWdsOjpTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVn
bDo6U3VyZmFjZSAqcmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIW1Jbml0aWFsaXplZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBOb0Vycm9yKCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKnByZXZpb3Vz
Q29udGV4dCA9IHRocmVhZC0+Z2V0Q29udGV4dCgpOworICAgIGlmIChwcmV2aW91c0NvbnRleHQp
CisgICAgeworICAgICAgICBBTkdMRV9UUlkocHJldmlvdXNDb250ZXh0LT51bk1ha2VDdXJyZW50
KHRoaXMpKTsKKyAgICB9CisKKyAgICBBTkdMRV9UUlkobUltcGxlbWVudGF0aW9uLT5tYWtlQ3Vy
cmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UsIGNvbnRleHQpKTsKKworICAgIGlm
IChjb250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoY29udGV4dC0+
bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlKSk7CisgICAgfQorCisg
ICAgLy8gVGljayBhbGwgdGhlIHNjcmF0Y2ggYnVmZmVycyB0byBtYWtlIHN1cmUgdGhleSBnZXQg
Y2xlYW5lZCB1cCBldmVudHVhbGx5IGlmIHRoZXkgc3RvcCBiZWluZworICAgIC8vIHVzZWQuCisg
ICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU2NyYXRjaEJ1
ZmZlck11dGV4KTsKKworICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZzY2F0Y2hC
dWZmZXIgOiBtU2NyYXRjaEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNjYXRjaEJ1
ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZl
ciAmemVyb0ZpbGxlZEJ1ZmZlciA6IG1aZXJvRmlsbGVkQnVmZmVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgemVyb0ZpbGxlZEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gTm9FcnJvcigpOworfQorCiBFcnJvciBEaXNwbGF5OjpyZXN0b3JlTG9zdERldmlj
ZSgpCiB7CiAgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4dFNldC5i
ZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKaW5kZXggNGFjNjMzNmUwZjNhY2Iw
NmVhNTk1YzU0NzVhYTk4ZTRiODZjN2U5NC4uMTZmYWYyYmY1Y2JjZDM5MjhiNTBjNWQxY2U1ZDA3
MDRjZWE1ZTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
RGlzcGxheS5oCkBAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwgOiBwdWJs
aWMgTGFiZWxlZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0
ZU1hcCAmYXR0cmlicywKICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0ICoqb3V0
Q29udGV4dCk7CiAKKyAgICBFcnJvciBtYWtlQ3VycmVudChjb25zdCBUaHJlYWQgKnRocmVhZCwK
KyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCk7CisKICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0IGdsOjpD
b250ZXh0ICpjdXJyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIEVHTGVudW0gdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmlicywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCmluZGV4IGZl
M2VjMjg1OWJhYTc2Mjg3YjY5ZmM3Y2JmMDNmZDc5ODljNDExZGYuLmJhOTI2N2EwM2M5Mzk2YzU3
YmRlNGQ0N2QyM2M3ODEzNTgxNmMzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL1Byb2dyYW0uaApAQCAtMjc2LDYgKzI3NiwxMSBAQCBjbGFzcyBQcm9ncmFt
U3RhdGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB7CiAgICAgICAgIHJldHVybiBt
RXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOwogICAgIH0K
KyAgICB2b2lkIHNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1FeGVjdXRh
YmxlLT5zZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKF9tTGlua2VkVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgfQogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdMc2l6ZWk+
ICZnZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRh
YmxlLmgKaW5kZXggOTUwODMyYjRlODA1MTdhZWNiMDVkZGM2YmNiZWJiODBhYzYyYjRkZi4uNDhm
M2JkMjE3NTQwODQ3OTZkOThkNTI4MmRkYTZlNWI0ZmE4NjkzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgK
QEAgLTIyOSw2ICsyMjksMTEgQEAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGUgZmluYWwgOiBwdWJs
aWMgYW5nbGU6OlN1YmplY3QKICAgICB7CiAgICAgICAgIHJldHVybiBtTGlua2VkVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nczsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFuc2Zvcm1GZWVkYmFj
a1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKKyAgICB7CisgICAg
ICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzOworICAgIH0KICAgICBHTGludCBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOyB9
CiAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKaW5kZXggZDRjNmFl
ZDZlY2MwODNjYTUzYWRlMzZhNzA1MjgzMmRmNTIzMjNmZC4uMjIzNjRiMzQyN2Y4ZGNkY2Y1ZDkz
YWM2YTk3NmZkMmU3M2Y4ZjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKQEAgLTIw
NSw3ICsyMDUsNyBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBjb25zdCBP
U1ZlcnNpb24gJmIpCiAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBiLm1pbm9y
VmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOwogfQogCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fQVBQTEUpCisjaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1ZlcnNpb24g
R2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KQEAg
LTIxMyw2ICsyMTMsMTQgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB9CiAjZW5kaWYK
IAorI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKK09TVmVyc2lvbiBHZXRpT1NWZXJz
aW9uKCkKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKyAgICByZXR1cm4gT1NW
ZXJzaW9uKDAsIDAsIDApOworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X0xJTlVYKQogYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGlu
dCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxz
LmgKaW5kZXggMjYxOWJjMzRmMzM3OTAyNjJkODZhMTMzZDhhNjAzOTJjNmExZjk5MS4uNzg3NzJh
ZTJmZDEzNzY4ZDdlZjRmZDJkMjIxYzcwZjI3ODMxODdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRp
bHMuaApAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKICNlbmRpZgog
fQogCitpbmxpbmUgYm9vbCBJc01hYygpCit7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9B
UFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBib29sIElzRnVj
aHNpYSgpCiB7CiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQpAQCAtMjA0LDYg
KzIxMyw4IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0IE9TVmVy
c2lvbiAmYik7CiAKIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKIAorT1NWZXJzaW9uIEdl
dGlPU1ZlcnNpb24oKTsKKwogT1NWZXJzaW9uIEdldExpbnV4T1NWZXJzaW9uKCk7CiAKIGlubGlu
ZSBib29sIElzQW5kcm9pZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU3YTg0NWMwNzI1ZjA5NGY2MmU3Y2EzNzMyZjE1MzYxOWNlYzY1ZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
ZHJpdmVyX3V0aWxzX2lvcy5tbQpAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIw
MTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkcml2
ZXJfdXRpbHNfaW9zLm1tIDogcHJvdmlkZXMgaW9zLXNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0
IGN1cnJlbnQgZHJpdmVyLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0
aWxzLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2Ug
cngKK3sKKworT1NWZXJzaW9uIEdldGlPU1ZlcnNpb24oKQoreworICAgIE9TVmVyc2lvbiByZXN1
bHQ7CisKKyAgICBOU09wZXJhdGluZ1N5c3RlbVZlcnNpb24gdmVyc2lvbiA9IFtbTlNQcm9jZXNz
SW5mbyBwcm9jZXNzSW5mb10gb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl07CisgICAgcmVzdWx0Lm1h
am9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWFqb3JW
ZXJzaW9uKTsKKyAgICByZXN1bHQubWlub3JWZXJzaW9uICAgICAgICAgICAgICA9IHN0YXRpY19j
YXN0PGludD4odmVyc2lvbi5taW5vclZlcnNpb24pOworICAgIHJlc3VsdC5wYXRjaFZlcnNpb24g
ICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnBhdGNoVmVyc2lvbik7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfbWFj
Lm1tCmluZGV4IDNhZjQ2ZmM4ODc4YjhiOTU1MzU1ODM5MTYzNTYzMWNhN2RkN2E2MjAuLjliNTNl
YjczNGVhZmFlYjA3MzAyYThiNjA1NzQzYmVlOGFmNjhiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfbWFjLm1t
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfbWFjLm1tCkBAIC0xMyw2ICsxMyw3IEBACiBuYW1lc3BhY2UgcngKIHsKIAorI2lm
ICFUQVJHRVRfT1NfSU9TCiBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICBPU1Zl
cnNpb24gcmVzdWx0OwpAQCAtMjQsNSArMjUsNSBAQCBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9u
KCkKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5n
X2FwcGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvU29mdExpbmtpbmdfYXBwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjNhNmQ3YTAyZWI3ZmI0MjMzN2Rj
MGU1NzRkYzZjNTU4Yzg0MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmgKQEAgLTAs
MCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0LWxpbmtp
bmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorCisjaWZuZGVmIFNPRlRfTElOS0lOR19BUFBM
RV9IXworI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKworI2luY2x1ZGUgImNvbW1vbi9w
bGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKworIyAgICBp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKKworIyAgICBpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+CisjICAgIGltcG9ydCA8ZGxmY24uaD4KKyMgICAgaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
KworIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvbiwgbWVzc2FnZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGV4cHJl
c3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx2b2lk
PigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFpbGVkIGlu
ICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gPDwgIjoiIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uIDw8ICJc
blx0ISBNZXNzYWdlOiAiIDw8IG1lc3NhZ2UpKQorCisjICAgIGlmZGVmIF9fY3BsdXNwbHVzCisj
ICAgICAgICBkZWZpbmUgRVhURVJOX0NfQkVHSU4gZXh0ZXJuICJDIiB7CisjICAgICAgICBkZWZp
bmUgRVhURVJOX0NfRU5EIH0KKyMgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JF
R0lOCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5ECisjICAgIGVuZGlmCisKKyMgICAgZGVm
aW5lIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKGZyYW1ld29yaykgZXh0ZXJuIHZvaWQgKmZy
YW1ld29yayMjTGlicmFyeSgpOworCisjICAgIGRlZmluZSBTT0ZUX0xJTktfRlJBTUVXT1JLX1NP
VVJDRShmcmFtZXdvcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHZvaWQgKmZyYW1ld29yayMjTGlicmFyeSgpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2UgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgdm9pZCAqZnJhbWV3b3JrTGli
cmFyeSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAiL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2ZyYW1ld29y
aywgUlRMRF9OT1cpOyBcCisgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xp
YnJhcnksICJVbmFibGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBc
CisgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBy
ZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUgU09G
VF9MSU5LX0ZVTkNUSU9OX0hFQURFUihmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlw
ZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgRVhURVJOX0NfQkVHSU4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVY
VEVSTl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0ZXJuIHJlc3VsdFR5
cGUgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gcmVzdWx0VHlwZSgqc29mdExpbmsj
I2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7ICAgICAgICAg
ICAgICBcCisgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJu
IHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUgU09GVF9M
SU5LX0ZVTkNUSU9OX1NPVVJDRShmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwg
cGFyYW1ldGVyRGVjbGFyYXRpb25zLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlKCpzb2Z0TGluayMjZnJhbWV3b3JrIyNm
dW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9ICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWU7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBy
ZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0
aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICBzb2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgPSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgKHJlc3VsdFR5cGUoKikgcGFyYW1ldGVyRGVjbGFyYXRpb25zKWRsc3ltKGZyYW1ld29y
ayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICAgICAgfSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmcmFtZXdv
cmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19DTEFTU19IRUFERVIo
Y2xhc3NOYW1lKSAgICBcCisgICAgICAgIEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBleHRlcm4gQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMjQ2xhc3Mp
KCk7IFwKKyAgICAgICAgY2xhc3NOYW1lICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpOyBc
CisgICAgICAgIGlubGluZSBjbGFzc05hbWUgKmFsbG9jIyNjbGFzc05hbWUjI0luc3RhbmNlKCkg
eyByZXR1cm4gW2dldCMjY2xhc3NOYW1lIyNDbGFzcygpIGFsbG9jXTsgfQorCisjICAgIGRlZmlu
ZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05hbWUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY2xhc3MgY2xhc3NOYW1lOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENsYXNzICgqZ2V0IyNj
bGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNzTmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBDbGFzcyBjbGFzc05hbWUjI0Z1
bmN0aW9uKCkgeyByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgfSAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGlu
aXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
c3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbGFzcyMjY2xh
c3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1lKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwg
Im9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisgICAgICAgICAgICAg
IGdldCMjY2xhc3NOYW1lIyNDbGFzcyA9IGNsYXNzTmFtZSMjRnVuY3Rpb247ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9Q
cmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBz
dGF0aWMgY2xhc3NOYW1lICBcCisgICAgICAgICAgICAgICAgKmFsbG9jIyNjbGFzc05hbWUjI0lu
c3RhbmNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNj
bGFzc05hbWUjI0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUHJhZ21h
KCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKKworI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTVjMGY2YmFhNGY4
OGRjMWIxOTUzZTM3MzljZmRhN2RmYWMzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMu
Y3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIENHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0
LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL0NHTEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkKKworU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMKQorCitTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xQaXhlbEZvcm1hdE9i
aiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgKm5waXgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKK1NPRlRfTElOS19GVU5D
VElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDcmVhdGVD
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFy
ZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpeCwg
c2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAg
ICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENHTEVycm9yLAorICAgIChDR0xQaXhlbEZv
cm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJp
YiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhfbnVtLCBhdHRyaWIsIHZhbHVlKSkKK1NP
RlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xEZXN0cm95Q29udGV4dCwgQ0dMRXJy
b3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJD
RShPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1h
dE9iaiBwaXgpLCAocGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xF
cnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09G
VF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAo
Q0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3Bl
bkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCks
IChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBj
dHgsIEdMaW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVl
bikpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJ
bWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwK
KyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAg
R0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQs
CisgICAgIEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBH
THVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNU
SU9OX1NPVVJDRShPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4
dE9iaiBjdHgpLCAoY3R4KSkKKworU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAgICBPcGVu
R0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAoQ0dMUmVu
ZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3BlcnR5IHBy
b3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCitT
T0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dM
RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVu
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElP
Tl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVyeVJlbmRl
cmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xSZW5kZXJlckluZm9PYmog
KnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5
X21hc2ssIHJlbmQsIG5yZW5kKSkKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZiODcxZTRiZWM4YWJjMGUy
NzJlMjNjNGE2ZTU1NGRlZDVjMGIyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKQEAg
LTAsMCArMSw4NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gQ0dMRnVuY3Rpb25zLmg6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBD
R0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8KKyNkZWZpbmUgQ0dMX0ZV
TkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKQorCisjICAgIGluY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKworIyAgICBpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJB
TUVXT1JLX0hFQURFUihPcGVuR0wpCisKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqICpwaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCAqbnBpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJz
LCBwaXgsIG5waXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTENyZWF0ZUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUGl4ZWxGb3Jt
YXRPYmogcGl4LCBDR0xDb250ZXh0T2JqIHNoYXJlLCBDR0xDb250ZXh0T2JqICpjdHgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAocGl4LCBzaGFyZSwgY3R4KSkKK1NPRlRfTElOS19GVU5D
VElPTl9IRUFERVIoCisgICAgT3BlbkdMLAorICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisg
ICAgQ0dMRXJyb3IsCisgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgR0xpbnQgcGl4X251bSwg
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmliLCBHTGludCAqdmFsdWUpLAorICAgIChwaXgs
IHBpeF9udW0sIGF0dHJpYiwgdmFsdWUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUigKKyAg
ICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAo
Q0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3Bl
cnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1
ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMRGVzdHJveUNvbnRleHQs
IENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElP
Tl9IRUFERVIoT3BlbkdMLCBDR0xEZXN0cm95UGl4ZWxGb3JtYXQsIENHTEVycm9yLCAoQ0dMUGl4
ZWxGb3JtYXRPYmogcGl4KSwgKHBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5H
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xFcnJvclN0cmlu
ZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09GVF9MSU5LX0ZV
TkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFF1ZXJ5
UmVuZGVyZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRlcmVySW5m
b09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRp
c3BsYXlfbWFzaywgcmVuZCwgbnJlbmQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVu
R0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkK
K1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwg
Q0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9O
X0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFNldFZpcnR1YWxT
Y3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVy
cm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAg
R0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXpl
aSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAorICAgICBJ
T1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRh
cmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3Vy
ZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFVwZGF0
ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKworI2VuZGlm
ICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKQorCisjZW5kaWYgIC8vIENHTF9GVU5DVElPTlNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
RGlzcGxheUNHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQppbmRleCBiNWE2MzFhZTQzMjFmMWFkOWI0ODU2NmZh
YTA5ZGZmZmEzOTQ2MzkxLi45MGU4MDU4ZjU4NWZhYjcxZDY1ZTI0MTk1MjA2Mjg0Zjg0NDU1YjNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCkBAIC0yOSw2ICsyOSw4IEBA
CiAjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJmYWNlQ0dM
LmgiCiAjICAgIGluY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3JtTWV0aG9kcy5oIgogCisjICAgIGlu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKwogbmFtZXNw
YWNlCiB7CiAKQEAgLTE2Myw5ICsxNjUsMTAgQEAgZWdsOjpFcnJvciBEaXNwbGF5Q0dMOjppbml0
aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7
CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdl
dFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBp
bmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZp
bmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBB
TkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50
cyB0aGUgZWZmZWN0IG9mIHRoZQogICAgIC8vIGRpc2FibGVHUFVTd2l0Y2hpbmdTdXBwb3J0IHdv
cmthcm91bmQgaW4gRmVhdHVyZXNHTC4KQEAgLTQ0MCw3ICs0NDMsNyBAQCBlZ2w6OkVycm9yIERp
c3BsYXlDR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkK
IAogYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5
cGUgd2luZG93KSBjb25zdAogewotICAgIE5TT2JqZWN0ICpsYXllciA9IChfX2JyaWRnZSBOU09i
amVjdCAqKXdpbmRvdzsKKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5T
T2JqZWN0ICo+KHdpbmRvdyk7CiAgICAgcmV0dXJuIFtsYXllciBpc0tpbmRPZkNsYXNzOltDQUxh
eWVyIGNsYXNzXV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0K
aW5kZXggYTc5NTAzN2QxNDc5YTNjZjFkYmNjMjE5ZjQ5MzZkMmI1MDc3ZTcwNi4uYzU1YWU3ZmJm
M2FiNzY5MTU5ZGNlYWU2MWY4MDEzMzcyYjFkZTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGlzcGxheUVBR0wubW0KQEAgLTI3LDYgKzI3LDggQEAKICMgICAgaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KICMgICAgaW1wb3J0IDxkbGZjbi5oPgogCisjICAgIGltcG9ydCAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisKIG5hbWVzcGFjZQog
ewogCkBAIC02NCw5ICs2NiwxMCBAQCBlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjppbml0aWFsaXpl
KGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7CiAKICAg
ICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdldFN5c3Rl
bUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBpbmNvbXBs
ZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsK
KyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdz
IFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICBtQ29udGV4dCA9IFthbGxvY0VBR0xDb250ZXh0
SW5zdGFuY2UoKSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTM107CiAgICAg
aWYgKG1Db250ZXh0ID09IG51bGxwdHIpCkBAIC0xMTMsNiArMTE2LDcgQEAgdm9pZCBEaXNwbGF5
RUFHTDo6dGVybWluYXRlKCkKICAgICBpZiAobUNvbnRleHQgIT0gbnVsbHB0cikKICAgICB7CiAg
ICAgICAgIFtnZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKyAg
ICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwogICAgICAgICBtQ29udGV4dCA9IG51bGxwdHI7CiAg
ICAgICAgIG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CiAgICAgfQpAQCAtMjc1
LDcgKzI3OSw3IEBAIGVnbDo6RXJyb3IgRGlzcGxheUVBR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNv
bnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBEaXNwbGF5RUFHTDo6aXNWYWxpZE5h
dGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdykgY29uc3QKIHsKLSAgICBOU09i
amVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3QgKil3aW5kb3c7CisgICAgTlNPYmplY3Qg
KmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAqPih3aW5kb3cpOwogICAgIHJldHVy
biBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOwogfQogCkBAIC0zMTEsOSAr
MzE1LDggQEAgdm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6RGlzcGxh
eUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnMKICAgICBvdXRFeHRlbnNpb25zLT5zdXJm
YWNlbGVzc0NvbnRleHQgICAgPSB0cnVlOwogICAgIG91dEV4dGVuc2lvbnMtPmRldmljZVF1ZXJ5
ICAgICAgICAgICA9IHRydWU7CiAKLSAgICAvLyBDb250ZXh0cyBhcmUgdmlydHVhbGl6ZWQgc28g
dGV4dHVyZXMgYW5zIHNlbWFwaG9yZXMgY2FuIGJlIHNoYXJlZCBnbG9iYWxseQotICAgIG91dEV4
dGVuc2lvbnMtPmRpc3BsYXlUZXh0dXJlU2hhcmVHcm91cCAgID0gdHJ1ZTsKLSAgICBvdXRFeHRl
bnNpb25zLT5kaXNwbGF5U2VtYXBob3JlU2hhcmVHcm91cCA9IHRydWU7CisgICAgLy8gQ29udGV4
dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAg
ICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgPSB0cnVlOwogCiAgICAg
b3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xG
dW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjEyNTEzMzhlZWU2OGY3MDM0
ZGM4YzY3NWFlZWZmZmNhNDE5NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5oCkBA
IC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5jdGlvbnMuaDogRXhwb3NpbmcgdGhlIHNvZnQtbGlua2Vk
IEVBR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIEVBR0xfRlVOQ1RJT05TX0hfCisjZGVmaW5lIEVB
R0xfRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIChk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
Q0FUQUxZU1QpKSB8fCBcCisgICAgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1Qp
ICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKKworIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VB
R0wuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyMgICAgaW1wb3J0
IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19IRUFE
RVIoT3BlbkdMRVMpCisKK1NPRlRfTElOS19DTEFTU19IRUFERVIoRUFHTENvbnRleHQpCisKKyNl
bmRpZiAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkpIHx8CisgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCisKKyNlbmRpZiAg
Ly8gQ0dMX0ZVTkNUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlv
bnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGIxZWI3MGM3NWY0ODc5ZDhjZDE4Yzg4NmRmNjllZjM5YTIzMTg4
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0KQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRUFH
TEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4K
KworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgKGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwK
KyAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdM
RV9DUFVfQVJNNjQpKQorCisjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorIyAgICBpbXBv
cnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJ
T1N1cmZhY2UuaD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlu
a2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX1NPVVJDRShPcGVuR0xFUykKKwor
U09GVF9MSU5LX0NMQVNTKE9wZW5HTEVTLCBFQUdMQ29udGV4dCkKKworI2VuZGlmICAvLyAoZGVm
aW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NB
VEFMWVNUKSkgfHwKKyAgICAgICAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZ
U1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdM
Lm1tCmluZGV4IDQ1ZTZkMGY5OWJkNTVkMzU2MDNjNzc3NDRhNDk2ZGQ4NDZhY2VlYjkuLmUzMDlh
ODY2MjY0MGFiNTNlYTg4OGJmNDAyZTlkM2QwNzU4YmU0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1
cmZhY2VFQUdMLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCkBAIC04Myw4ICs4Myw4IEBA
IElPU3VyZmFjZVN1cmZhY2VFQUdMOjpJT1N1cmZhY2VTdXJmYWNlRUFHTChjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCiAgICAgICBtV2lkdGgoMCksCiAgICAgICBtSGVpZ2h0KDApLAog
ICAgICAgbVBsYW5lKDApLAotICAgICAgbVJvd1N0cmlkZUluUGl4ZWxzKDApLAogICAgICAgbUZv
cm1hdEluZGV4KC0xKSwKKyAgICAgIG1Sb3dTdHJpZGVJblBpeGVscygwKSwKICAgICAgIG1BbHBo
YUluaXRpYWxpemVkKGZhbHNlKQogewogICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1
cmZhY2Ugc28gaXQgZG9lc24ndCBnZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMu
CkBAIC0yMDYsOSArMjA2LDcgQEAgZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6Ymlu
ZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAvLyBUT0RPKGti
cik6IHBvc3NpYmx5IG1vcmUgc3RhdGUgdG8gYmUgc2V0IGhlcmUsIGluY2x1ZGluZyBzZXR0aW5n
IGFueQogICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAz
LjAgY29udGV4dHMuCiAgICAgICAgIGdsOjpQaXhlbFVucGFja1N0YXRlIGRlZmF1bHRVbnBhY2tT
dGF0ZTsKLSAgICAgICAgaWYgKElzRXJyb3Ioc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFVucGFja1N0
YXRlKGNvbnRleHQsIGRlZmF1bHRVbnBhY2tTdGF0ZSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBpeGVsIHVucGFjayBzdGF0ZS4i
OwotICAgICAgICB9CisgICAgICAgIHN0YXRlTWFuYWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShk
ZWZhdWx0VW5wYWNrU3RhdGUpOwogICAgICAgICB0ZXh0dXJlRGF0YSA9IElPU3VyZmFjZUdldEJh
c2VBZGRyZXNzKG1JT1N1cmZhY2UpOwogICAgIH0KIApAQCAtMjQwLDkgKzIzOCw3IEBAIGVnbDo6
RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgRUdMCiAgICAgICAgIGdsOjpQaXhlbFBhY2tTdGF0ZSBzdGF0ZTsKICAg
ICAgICAgc3RhdGUucm93TGVuZ3RoID0gbVJvd1N0cmlkZUluUGl4ZWxzOwogICAgICAgICBzdGF0
ZS5hbGlnbm1lbnQgPSAxOwotICAgICAgICBpZiAoSXNFcnJvcihzdGF0ZU1hbmFnZXItPnNldFBp
eGVsUGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6
OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0g
ICAgICAgIH0KKyAgICAgICAgc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tTdGF0ZShzdGF0ZSk7
CiAgICAgICAgIC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVy
ZSwgaW5jbHVkaW5nIHNldHRpbmcgYW55CiAgICAgICAgIC8vIHBpeGVsIHBhY2sgYnVmZmVyIHRv
IDAgd2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCiAgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1h
dCA9IGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0
aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCmluZGV4IGQ3MGFlNThhMGJmNDlmNjJkZjkyZTg1MjY5
ODc3YjMwMTEyZDNmODIuLjYxNWRkNDRkMTRlOGRiNzAyNmNiOGQ5MThmNWVjZmY5OGE4YmExYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCkBAIC0yODEs
MTAgKzI4MSwxMiBAQCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJr
ZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmeGZiT3V0KQog
ewogICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5m
aW5kKGtYZmJEZWNsTWFya2VyKTsKLSAgICBjb25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCAg
ID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworICAg
IEFTU0VSVCh4ZmJEZWNsTWFya2VyU3RhcnQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGNv
bnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RT
dHJMZW4oa1hmYkRlY2xNYXJrZXIpOwogCiAgICAgY29uc3Qgc2l6ZV90IHhmYk91dE1hcmtlclN0
YXJ0ID0gb3JpZ2luYWxTb3VyY2UuZmluZChrWGZiT3V0TWFya2VyLCB4ZmJEZWNsTWFya2VyU3Rh
cnQpOwotICAgIGNvbnN0IHNpemVfdCB4ZmJPdXRNYXJrZXJFbmQgICA9IHhmYk91dE1hcmtlclN0
YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYk91dE1hcmtlcik7CisgICAgQVNTRVJUKHhmYk91dE1hcmtl
clN0YXJ0ICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKyAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFy
a2VyRW5kID0geGZiT3V0TWFya2VyU3RhcnQgKyBDb25zdFN0ckxlbihrWGZiT3V0TWFya2VyKTsK
IAogICAgIC8vIFRoZSBzaGFkZXIgaXMgdGhlIGZvbGxvd2luZyBmb3JtOgogICAgIC8vCkBAIC0z
NjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0
cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJv
Z3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAq
dmVydGV4U2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50
ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCiB7CiAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gJnZhcnlp
bmdzID0KICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MoKTsKQEAgLTQxMyw2ICs0MTYsMTAgQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRi
YWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAg
ICAgICAgICAgIG91dHB1dE9mZnNldCArPSBpbmZvLmNvbHVtbkNvdW50ICogaW5mby5yb3dDb3Vu
dCAqIHZhcnlpbmcuc2l6ZSgpOwogICAgICAgICB9CiAgICAgfQorICAgIGlmIChlYXJseVJldHVy
bikKKyAgICB7CisgICAgICAgIHhmYk91dCArPSAicmV0dXJuOyI7CisgICAgfQogICAgIHhmYk91
dCArPSAifVxuIjsKIAogICAgICp2ZXJ0ZXhTaGFkZXIgPSBTdWJzdGl0dXRlVHJhbnNmb3JtRmVl
ZGJhY2tNYXJrZXJzKCp2ZXJ0ZXhTaGFkZXIsIHhmYkRlY2wsIHhmYk91dCk7CkBAIC0zMzY4LDEx
ICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xzbGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0
IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCiAgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwogfQog
Ci1zdGQ6OnN0cmluZyBHZXRYZmJCdWZmZXJOYW1lKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4
KQotewotICAgIHJldHVybiAieGZiQnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7Ci19Ci0KIHZv
aWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNs
YW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFu
Z1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKQEAgLTMzODAsNyAr
MzM4Miw3IEBAIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0
cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFw
ICp2YXJpYWJsZUluZm9NYXBPdXQpCiB7CiAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0Vt
dWxhdGlvbk91dHB1dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5m
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhT
aGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQsIGZhbHNl
KTsKIH0KIAogdm9pZCBHbHNsYW5nQXNzaWduTG9jYXRpb25zKGNvbnN0IEdsc2xhbmdTb3VyY2VP
cHRpb25zICZvcHRpb25zLApAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2ln
bkxvY2F0aW9ucyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKIH0KIAorc3RkOjpzdHJp
bmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKK3sKKyAgICBy
ZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworfQorCisKK3ZvaWQgR2xzbGFu
Z0Fzc2lnbkxvY2F0aW9ucyhHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgJnByb2dyYW1F
eGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dy
YW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5m
b01hcE91dCkKK3sKKyAgICAvLyBBc3NpZ24gb3V0cHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVy
LCBpZiBhbnkuCisgICAgaWYgKChzaGFkZXJUeXBlID09IGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVu
dCkgJiYKKyAgICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6
OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKyAgICB7CisgICAgICAgIEFzc2lnbk91dHB1dExvY2F0
aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVy
VHlwZTo6RnJhZ21lbnRdKTsKKyAgICB9CisKKyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0
aGUgdmVydGV4IHNoYWRlciwgaWYgYW55LgorICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6U2hh
ZGVyVHlwZTo6VmVydGV4KSAmJgorICAgICAgICBwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRT
aGFkZXJTdGFnZShnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICB7CisgICAgICAgIEFzc2ln
bkF0dHJpYnV0ZUxvY2F0aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OlZl
cnRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01h
cE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pOworICAgIH0KKworICAgIGlmICghcHJvZ3Jh
bUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkNvbXB1dGUp
KQorICAgIHsKKyAgICAgICAgLy8gQXNzaWduIHZhcnlpbmcgbG9jYXRpb25zLgorICAgICAgICBB
c3NpZ25WYXJ5aW5nTG9jYXRpb25zKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJU
eXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZUluZm9NYXBPdXQpOworCisgICAgICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUu
Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpLmVtcHR5KCkgJiYKKyAgICAgICAg
ICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFuc2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVy
VHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAg
QXNzaWduVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNpb25RdWFsaWZpZXJzKAorICAgICAgICAgICAg
ICAgIHByb2dyYW1FeGVjdXRhYmxlLCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNl
ZEZvclhmYkV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4
LCAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEFzc2lnblVuaWZvcm1CaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFt
RXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgQXNzaWduVGV4dHVyZUJp
bmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50
ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0
KTsKKyAgICBBc3NpZ25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFi
bGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworfQorCiB2b2lkIEdsc2xhbmdHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3Vy
Y2VzICZyZXNvdXJjZXMsCkBAIC0zNDYyLDcgKzM1MTUsOCBAQCB2b2lkIEdsc2xhbmdHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91
dHB1dHMoCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwgcHJvZ3Jh
bUludGVyZmFjZUluZm8sIHZlcnRleFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgJigqdmFy
aWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisgICAgICAgICAgICAg
ICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tFYXJseVJldHVybik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFu
Z193cmFwcGVyX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgKaW5kZXggMmJkMmM2MWE4NzE4NWY0MTYw
YjQwZmUyNjRhMzg4YTIxYzU4ZTJkZC4uNjAyNDhjZGJhZDc2NTk2MDE4OTA4ZmQxMzcyMDkwNzA1
YTE5NWE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaApAQCAt
NTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMKICAgICBib29sIHN1cHBv
cnRzVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNpb24gPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAgPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVCcmVz
ZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRi
YWNrRWFybHlSZXR1cm4gICAgICAgPSBmYWxzZTsKIH07CiAKIHVzaW5nIFNwaXJ2QmxvYiA9IHN0
ZDo6dmVjdG9yPHVpbnQzMl90PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0
YS5qc29uCmluZGV4IDhjM2ZkMDU1ZDJkM2NiYzQ4OTc4MjJjZDRmM2JkMjQ1OTFhODdhZGMuLjdi
Y2RlZDA3ZDRjMjRmZjdkNWM4NjhjMDQ1ZDMwYjNkNDFiOTJiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19k
YXRhLmpzb24KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbgpAQCAtNjcyLDYgKzY3Miw5IEBACiAgICAgIkQz
Ml9GTE9BVF9TOFgyNF9VSU5UIjogewogICAgICAgIkdMX1VOU0lHTkVEX0lOVF8yNF84IjogIkxv
YWREMjRTOFRvRDMyRlM4WDI0IiwKICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRv
RDMyRlgzMiIKKyAgICB9LAorICAgICJEMzJfRkxPQVQiOiB7CisgICAgICAiR0xfVU5TSUdORURf
SU5UIjogIkxvYWREMjRTOFRvRDMyRiIKICAgICB9CiAgIH0sCiAgICJHTF9SMzJJIjogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xv
YWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCmlu
ZGV4IDIwZTcwNmY3YzliYzgzNzlhMzIwNjRjMGFmNTkzYTE5MGNkOWRlNGQuLjJlZjAxY2EzY2Zl
OTA1NzhjODMwNWRiYTA0MzkxNGFmNzZjMDQ4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbG9hZF9mdW5jdGlvbnNfdGFibGVfYXV0b2dlbi5jcHAKQEAgLTQ0Niw4ICs0NDYsNyBAQCBM
b2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fQgogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZv
IENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhB
MV9VTk9STV9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFf
VU5PUk1fQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAg
LTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQogICAgIH0KIH0KIAotTG9h
ZEltYWdlRnVuY3Rpb25JbmZvCi1DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9M
T1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlw
ZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVu
dW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtMTMxMiw4ICsxMzEwLDcg
QEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfRVRDMl90b19SOEc4QjhB
OF9VTk9STV9TUkdCKEdMZW51bSB0eXBlKQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9V
Tk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZv
IENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9S
TV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBA
IC0xMzI1LDggKzEzMjIsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdC
OF9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNXwogICAgIH0KIH0KIAot
TG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhB
MV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFf
RVRDMl90b19FVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKQogICAgIHsKQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9u
SW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhB
OF9VTk9SCiAgICAgfQogfQogCi1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8KLUNPTVBSRVNTRURfU1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdC
QV9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRD
Ml9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAg
IHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xNTEwLDYgKzE1MDQsMTggQEAgTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9YOF9VSU5UKEdMZW51bSB0
eXBlKQogICAgIH0KIH0KIAorTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0
X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1h
Z2VGdW5jdGlvbkluZm8oTG9hZEQyNFM4VG9EMzJGLCB0cnVlKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gTG9hZEltYWdl
RnVuY3Rpb25JbmZvKFVucmVhY2hhYmxlTG9hZEZ1bmN0aW9uLCB0cnVlKTsKKyAgICB9Cit9CisK
IExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhY
MjRfVUlOVChHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCkBAIC0zNjI0LDYgKzM2
MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JNX1M4X1VJTlQ7CiAgICAgICAgICAgICAg
ICAgY2FzZSBGb3JtYXRJRDo6RDI0X1VOT1JNX1g4X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5PUk1fWDhfVUlOVDsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZvcm1hdElEOjpEMzJfRkxPQVQ6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVQ7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVDsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCmluZGV4IDg2OGM0NzZiOTQ0
NWI3ZDllOGE1YWMwNWU0YTU4N2NmMDRmNzFiNDcuLjBkNTBkODFjZGZlNjhlNDdlOTNiNTMwZTU1
MWI3ZGZlOTQ2MjFlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlMRC5nbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KQEAgLTYsNyArNiw3IEBA
CiAKIGltcG9ydCgiLi4vLi4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCiAKLWFzc2VydChpc19tYWMp
Cithc3NlcnQoaXNfbWFjIHx8IGlzX2lvcykKIGFzc2VydChhbmdsZV9lbmFibGVfbWV0YWwpCiAK
IF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCkBAIC0yMSw2ICsyMSw4IEBAIF9tZXRhbF9iYWNr
ZW5kX3NvdXJjZXMgPSBbCiAgICJEaXNwbGF5TXRsX2FwaS5oIiwKICAgIkZyYW1lQnVmZmVyTXRs
LmgiLAogICAiRnJhbWVCdWZmZXJNdGwubW0iLAorICAiSU9TdXJmYWNlU3VyZmFjZU10bC5oIiwK
KyAgIklPU3VyZmFjZVN1cmZhY2VNdGwubW0iLAogICAiUHJvZ3JhbU10bC5oIiwKICAgIlByb2dy
YW1NdGwubW0iLAogICAiUXVlcnlNdGwuaCIsCkBAIC01Miw2ICs1NCw4IEBAIF9tZXRhbF9iYWNr
ZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0iLAogICAibXRs
X2Zvcm1hdF91dGlscy5oIiwKICAgIm10bF9mb3JtYXRfdXRpbHMubW0iLAorICAibXRsX2dsc2xh
bmdfbXRsX3V0aWxzLmgiLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKICAgIm10bF9n
bHNsYW5nX3V0aWxzLmgiLAogICAibXRsX2dsc2xhbmdfdXRpbHMubW0iLAogICAibXRsX29jY2x1
c2lvbl9xdWVyeV9wb29sLmgiLApAQCAtNjUsMTIgKzY5LDExIEBAIF9tZXRhbF9iYWNrZW5kX3Nv
dXJjZXMgPSBbCiAgICJtdGxfdXRpbHMuaCIsCiAgICJtdGxfdXRpbHMubW0iLAogICAic2hhZGVy
cy9jb25zdGFudHMuaCIsCi0gICJzaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgiLAotICAic2hhZGVy
cy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisgICJzaGFkZXJzL210bF9k
ZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jIgogXQogCiBjb25maWcoImFuZ2xlX21ldGFs
X2JhY2tlbmRfY29uZmlnIikgewotICBkZWZpbmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiBd
CisgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWIiBdCiAgIGxkZmxhZ3MgPSBbCiAgICAgIi13ZWFrX2ZyYW1ld29yayIsCiAgICAgIk1l
dGFsIiwKQEAgLTk2LDEyICs5OSwxNiBAQCBhbmdsZV9zb3VyY2Vfc2V0KCJhbmdsZV9tZXRhbF9i
YWNrZW5kIikgewogICAgICIke2FuZ2xlX3Jvb3R9OmxpYkFOR0xFX2hlYWRlcnMiLAogICBdCiAK
LSAgZGVwcyA9IFsgIiR7YW5nbGVfc3BpcnZfY3Jvc3NfZGlyfS9nbjpzcGlydl9jcm9zc19zb3Vy
Y2VzIiBdCisgIGRlcHMgPSBbCisgICAgIiRhbmdsZV9zcGlydl90b29sc19kaXI6c3B2dG9vbHNf
dmFsIiwKKyAgICAiJHthbmdsZV9zcGlydl9jcm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJj
ZXMiLAorICBdCiAKICAgb2JqY19mbGFncyA9IFsKICAgICAiLVduby1udWxsYWJpbGl0eS1jb21w
bGV0ZW5lc3MiLAogICAgICItV25vLXVuZ3VhcmRlZC1hdmFpbGFiaWxpdHkiLAogICAgICItZm5v
LW9iamMtYXJjIiwKKyAgICAiLVduby1leHRyYS1zZW1pLXN0bXQiLAogICBdCiAgIGNmbGFnc19v
YmpjICs9IG9iamNfZmxhZ3MKICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9C
dWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9CdWZmZXJNdGwuaAppbmRleCA3NjI1NDllNGQyNzBmOWNmMjQ0ZjMzZTFmZTBiMTkw
NWZhMmExMzkyLi45ZjllYzZjYmQ5YzgzMTU3ZTMxNDc0ZTY2OGQzNTIyZjJlZDRmMjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oCkBAIC0xNTIsMTAgKzE1MiwxNSBAQCBjbGFzcyBC
dWZmZXJNdGwgOiBwdWJsaWMgQnVmZmVySW1wbCwgcHVibGljIEJ1ZmZlckhvbGRlck10bAogCiAg
ICAgQ29udmVyc2lvbkJ1ZmZlck10bCAqZ2V0VW5pZm9ybUNvbnZlcnNpb25CdWZmZXIoQ29udGV4
dE10bCAqY29udGV4dCwgc2l6ZV90IG9mZnNldCk7CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0
aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGlj
aXRseQorICAgIC8vIGNhbGxlZC4KKyAgICB2b2lkIG1hcmtDb252ZXJzaW9uQnVmZmVyc0RpcnR5
KCk7CisKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4obVN0YXRlLmdldFNpemUoKSk7IH0KIAogICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQg
c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6QnVmZmVyQmluZGluZyB0YXJnZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVm
ZmVyVXNhZ2UgdXNhZ2UpOwpAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDog
cHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwKICAgICBhbmdsZTo6UmVz
dWx0IGNvbW1pdFNoYWRvd0NvcHkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAgIGFu
Z2xlOjpSZXN1bHQgY29tbWl0U2hhZG93Q29weShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
c2l6ZV90IHNpemUpOwogCi0gICAgdm9pZCBtYXJrQ29udmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOwot
CiAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7CisKICAgICBib29sIGNsaWVudFNo
YWRvd0NvcHlEYXRhTmVlZFN5bmMoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBl
bnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKICAg
ICB1aW50OF90ICpzeW5jQW5kT2J0YWluU2hhZG93Q29weShDb250ZXh0TXRsICpjb250ZXh0TXRs
KTsKIAorICAgIC8vIENvbnZlbmllbnQgbWV0aG9kCisgICAgY29uc3QgdWludDhfdCAqZ2V0Q2xp
ZW50U2hhZG93Q29weURhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQp
KTsKKyAgICB9CiAgICAgLy8gQ2xpZW50IHNpZGUgc2hhZG93IGJ1ZmZlcgogICAgIGFuZ2xlOjpN
ZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7CiAKICAgICAvLyBHUFUgc2lkZSBidWZmZXJzIHBvb2wK
ICAgICBtdGw6OkJ1ZmZlclBvb2wgbUJ1ZmZlclBvb2w7CiAKLSAgICAvLyBBIGNhY2hlIG9mIGNv
bnZlcnRlZCBidWZmZXIgZGF0YS4KKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXgg
ZGF0YS4KICAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtVmVydGV4
Q29udmVyc2lvbkJ1ZmZlcnM7CiAKICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZm
ZXJNdGw+IG1JbmRleENvbnZlcnNpb25CdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJN
dGwubW0KaW5kZXggNjRjN2RlOGEzMjhkNWZjY2E2MGI0Y2M1ZWVkMjRmYzY4YjU5NjAwNS4uODA5
Njk5NmUyODhmNTk1MTMyMWViODhmZmVkN2RhMGQwOTkyMTRiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5t
bQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLm1tCkBAIC0yMyw2ICsyMywxMCBAQCBuYW1lc3BhY2UKIC8vIFN0YXJ0IHdp
dGggYSBmYWlybHkgc21hbGwgYnVmZmVyIHNpemUuIFdlIGNhbiBpbmNyZWFzZSB0aGlzIGR5bmFt
aWNhbGx5IGFzIHdlIGNvbnZlcnQgbW9yZSBkYXRhLgogY29uc3RleHByIHNpemVfdCBrQ29udmVy
dGVkRWxlbWVudEFycmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKIAorLy8gVGhlIG1h
eCBzaXplIHRoYXQgd2Ugd2lsbCB1c2UgYnVmZmVyIHBvb2wgZm9yIGR5bmFtaWMgdXBkYXRlLgor
Ly8gSWYgdGhlIGJ1ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25s
eSBvbmUgYnVmZmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCitjb25zdGV4cHIgc2l6ZV90
IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNpemUgPSAxMjggKiAxMDI0OworCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5kZXhUeXBlPgogYW5nbGU6OlJlc3VsdCBHZXRGaXJzdExhc3RJbmRpY2VzKGNv
bnN0IEluZGV4VHlwZSAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgY291bnQsCkBAIC0xMDUsNyArMTA5LDcgQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJN
dGw6OnNldERhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKQogewotICAgIHJldHVybiBzZXRE
YXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKyAgICByZXR1cm4g
c2V0RGF0YUltcGwoY29udGV4dCwgdGFyZ2V0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsK
IH0KIAogYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldFN1YkRhdGEoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCkBAIC0xNjQsNyArMTY4LDggQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6
Om1hcFJhbmdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogewogICAgIGlmIChhY2Nlc3Mg
JiBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZ
KHNldERhdGFJbXBsKGNvbnRleHQsIG51bGxwdHIsIHNpemUoKSwgbVN0YXRlLmdldFVzYWdlKCkp
KTsKKyAgICAgICAgQU5HTEVfVFJZKHNldERhdGFJbXBsKGNvbnRleHQsIGdsOjpCdWZmZXJCaW5k
aW5nOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkpKTsKICAgICB9CiAKICAgICBpZiAobWFwUHRyKQpA
QCAtMTczLDcgKzE3OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgaWYgKG1CdWZmZXJQb29sLmdldE1heEJ1
ZmZlcnMoKSA9PSAxKQogICAgICAgICB7CiAgICAgICAgICAgICAqbWFwUHRyID0gbUJ1ZmZlci0+
bWFwV2l0aE9wdChjb250ZXh0TXRsLCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01B
UF9VTlNZTkNIUk9OSVpFRF9CSVQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgKwogICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldDsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zOTUsNiArNDAwLDcg
QEAgdm9pZCBCdWZmZXJNdGw6OmNsZWFyQ29udmVyc2lvbkJ1ZmZlcnMoKQogfQogCiBhbmdsZTo6
UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcg
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVu
ZGVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVy
VXNhZ2UgdXNhZ2UpCkBAIC00MTMsNiArNDE5LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRs
OjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHNpemVfdCBh
ZGp1c3RlZFNpemUgPSBzdGQ6Om1heDxzaXplX3Q+KDEsIGludGVuZGVkU2l6ZSk7CiAKKyAgICAv
LyBFbnN1cmVzIG5vIHZhbGlkYXRpb24gbGF5ZXIgaXNzdWVzIGluIHN0ZDE0MCB3aXRoIGRhdGEg
dHlwZXMgbGlrZSB2ZWMzIGJlaW5nIDEyIGJ5dGVzIHZzIDE2CisgICAgLy8gaW4gTVNMLgorICAg
IGlmICh0YXJnZXQgPT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisgICAgeworICAgICAg
ICBhZGp1c3RlZFNpemUgPSByb3VuZFVwUG93MihhZGp1c3RlZFNpemUsIChzaXplX3QpMTYpOwor
ICAgIH0KKwogICAgIHNpemVfdCBtYXhCdWZmZXJzOwogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAg
ewpAQCAtNDI3LDcgKzQ0MCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIC8vIGR5bmFtaWMgYnVmZmVyLCBhbGxvdyB1cCB0byAxMCB1cGRhdGUgcGVyIGZyYW1lL2Vu
Y29kaW5nIHdpdGhvdXQKICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KLSAgICAgICAg
ICAgIGlmIChhZGp1c3RlZFNpemUgPD0gbXRsOjprU2hhcmVkTWVtQnVmZmVyTWF4QnVmU2l6ZUhp
bnQpCisgICAgICAgICAgICBpZiAoYWRqdXN0ZWRTaXplIDw9IGtEeW5hbWljQnVmZmVyUG9vbE1h
eEJ1ZlNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbWF4QnVmZmVycyA9IDEw
OwogICAgICAgICAgICAgICAgIG1CdWZmZXJQb29sLnNldEFsd2F5c1VzZVNoYXJlZE1lbSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0NvbXBpbGVyTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCmluZGV4IGE1ODY2NzAxYmQ1ZjAyNTYy
MmI2MzU0Mjc4OWQ2NDlhNzE0OTJjMGUuLjNlMjliNGRkODExODJiODgzZThlYjJjZjA3NjRjY2Jm
YTkwOThlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW0KQEAgLTEwLDYg
KzEwLDcgQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5o
IgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTIwLDcgKzIxLDE2IEBAIENvbXBpbGVyTXRsOjp+Q29tcGlsZXJNdGwo
KSB7fQogCiBTaFNoYWRlck91dHB1dCBDb21waWxlck10bDo6Z2V0VHJhbnNsYXRvck91dHB1dFR5
cGUoKSBjb25zdAogewotICAgIHJldHVybiBTSF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICBpZiAo
c2g6OnJlYWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7Cisg
ICAgICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIEdMIG91dHB1dCBmaXJzdCwgd2UgY2FuJ3QgYWN0
dWFsbHkKKyAgICAgICAgLy8gZ2V0IE1TTCBjb2RlIHVudGlsIGxpbmsgdGltZS4gVHJhbnNsYXRp
b24gdGltZSBpcyB0b28gZWFybHkKKyAgICAgICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVU
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gU0hfTVNMX01FVEFMX09V
VFBVVDsKKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9D
b250ZXh0TXRsLmgKaW5kZXggMTY4N2M4YzkxNDdiZmI5N2RmN2M1YTY0NDAxMmI1ZDIyMDEzY2Vk
Yy4uMmYzOTM3MWQ5ODMzZGExMzY5NTYzNmY4MzQwMjAzMzBjZWFhZGNmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oCkBAIC0yOSw4ICsyOSw4IEBAIGNsYXNzIEZyYW1lYnVmZmVy
TXRsOwogY2xhc3MgVmVydGV4QXJyYXlNdGw7CiBjbGFzcyBQcm9ncmFtTXRsOwogY2xhc3MgUmVu
ZGVyVGFyZ2V0TXRsOwotY2xhc3MgV2luZG93U3VyZmFjZU10bDsKLWNsYXNzIFRyYW5zZm9ybUZl
ZWRiYWNrTXRsOworY2xhc3MgU3VyZmFjZU10bFByb3RvY29sOworY2xhc3MgQnVmZmVyTXRsOwog
CiBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiB7CkBAIC04NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4
dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkg
b3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVy
dGV4QmFzZUluc3RhbmNlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJp
bWl0aXZlTW9kZSBtb2RlLApAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDog
cHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R0xpbnQgKmJhc2VWZXJ0aWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgKmJhc2VJbnN0YW5j
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIGFuZ2xlOjpS
ZXN1bHQgZHJhd0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgLy8gRGV2aWNlIGxvc3MKICAgICBnbDo6R3JhcGhp
Y3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRlOwpAQCAtMTk2LDYgKzIwMiw4
IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNv
bnRleHQKICAgICBjb25zdCBnbDo6RXh0ZW5zaW9ucyAmZ2V0TmF0aXZlRXh0ZW5zaW9ucygpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IGdsOjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRh
dGlvbnMoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGNvbnN0IFByb2dyYW1NdGwgKmdldFByb2dy
YW0oKSBjb25zdCB7IHJldHVybiBtUHJvZ3JhbTsgfQorCiAgICAgLy8gU2hhZGVyIGNyZWF0aW9u
CiAgICAgQ29tcGlsZXJJbXBsICpjcmVhdGVDb21waWxlcigpIG92ZXJyaWRlOwogICAgIFNoYWRl
ckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlk
ZTsKQEAgLTI0OSwxMiArMjU3LDI0IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4
dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJp
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMYml0ZmllbGQgYmFycmllcnMpIG92ZXJy
aWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxkIGJhcnJpZXJzKSBvdmVycmlkZTsKIAorICAgIHZv
aWQgaW52YWxpZGF0ZUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lk
IG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9u
QmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorICAg
ICAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+
ICZidWZmZXJzKTsKKworICAgIHZvaWQgb25FbmRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGFu
Z2xlOjpSZXN1bHQgb25QYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHBvcHVs
YXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJTZXQoCisgICAgICAgIHNpemVfdCBidWZmZXJDb3Vu
dCwKKyAgICAgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZl
ck10bCAqPiAmYnVmZmVycyk7CiAgICAgLy8gb3ZlcnJpZGUgbXRsOjpFcnJvckhhbmRsZXIKICAg
ICB2b2lkIGhhbmRsZUVycm9yKEdMZW51bSBlcnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlv
biwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhh
bmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtMjcyLDEy
ICsyOTIsMTIgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGlj
IG10bDo6Q29udGV4dAogICAgIHZvaWQgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcmFtZWJ1ZmZlck10bCAqZnJhbWVidWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKLSAgICB2b2lkIG9u
QmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZh
Y2VNdGwgKmJhY2tidWZmZXIpOworICAgIHZvaWQgb25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKIAog
ICAgIC8vIEludm9rZSBieSBRdWVyeU10bAotICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25R
dWVyeUJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOwot
ICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
UXVlcnlNdGwgKnF1ZXJ5KTsKLSAgICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIGFuZ2xlOjpSZXN1
bHQgb25PY2NsdXNpb25RdWVyeUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25R
dWVyeURlc3Ryb3llZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5
KTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9j
Y2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCiAgICAgYm9vbCBoYXNB
Y3RpdmVPY2NsdXNpb25RdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1PY2NsdXNpb25RdWVyeTsgfQpA
QCAtMzY3LDcgKzM4Nyw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGws
IHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IGluc3RhbmNlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlT3JOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQ
YXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNr
RHJhdyk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGZpcnN0LApAQCAtNDE3LDYgKzQzNywxOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENv
bnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCk7CiAKKyAgICB2b2lkIGV4ZWNEcmF3SW5z
dGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgdmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBpbnN0YW5jZXMpOworCisgICAgdm9pZCBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmaW5kZXhCdWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworCiAgICAgdm9pZCB1cGRh
dGVFeHRlbmRlZFN0YXRlKGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CiAKICAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlck10bCwKQEAgLTQ0Miw2ICs0
NzQsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRs
OjpDb250ZXh0CiAgICAgYW5nbGU6OlJlc3VsdCBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQg
ZHJhd0NhbGxGaXJzdFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCB2ZXJ0aWNlc1Blckluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworICAgIGFuZ2xl
OjpSZXN1bHQgaGFuZGxlRGlydHlHcmFwaGljc1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0VtdWxh
dGlvbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5k
bGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAg
ICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC00NzAsNiArNTAzLDcgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICBESVJU
WV9CSVRfUkVOREVSX1BJUEVMSU5FLAogICAgICAgICBESVJUWV9CSVRfVU5JRk9STV9CVUZGRVJT
X0JJTkRJTkcsCiAgICAgICAgIERJUlRZX0JJVF9SQVNURVJJWkVSX0RJU0NBUkQsCisgICAgICAg
IERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKICAgICAgICAgRElSVFlfQklU
X01BWCwKICAgICB9OwogCkBAIC00ODgsNyArNTIyLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1
YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICB1aW50MzJfdCB4
ZmJBY3RpdmVVbnBhdXNlZDsKICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3Owog
ICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRh
dGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgaW50MzJfdCBwYWRkaW5nWzNd
OworICAgICAgICBpbnQzMl90IHBhZGRpbmdfMFszXTsKIAogICAgICAgICBpbnQzMl90IHhmYkJ1
ZmZlck9mZnNldHNbNF07CiAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CkBA
IC01MDgsMTIgKzU0MiwxNSBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBs
LCBwdWJsaWMgbXRsOjpDb250ZXh0CiAKICAgICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOwog
Ci0gICAgICAgIGZsb2F0IHBhZGRpbmcyWzNdOworICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5z
dGFuY2VJRDsKKworICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdp
dGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgaW50MzJf
dCBwYWRkaW5nXzFbMl07CiAgICAgfTsKIAogICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCiAg
ICAgewotICAgICAgICB1aW50OF90IHZhbHVlc1tzaXplb2YoZmxvYXQpICogNF07CisgICAgICAg
IGZsb2F0IHZhbHVlc1s0XTsKICAgICB9OwogCiAgICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wg
bU9jY2x1c2lvblF1ZXJ5UG9vbDsKQEAgLTUyMiw2ICs1NTksMTMgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIG10bDo6UmVu
ZGVyQ29tbWFuZEVuY29kZXIgbVJlbmRlckVuY29kZXI7CiAgICAgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgbUJsaXRFbmNvZGVyOwogICAgIG10bDo6Q29tcHV0ZUNvbW1hbmRFbmNvZGVyIG1Db21w
dXRlRW5jb2RlcjsKKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKToKKyAgICAvLyBDYWNoZSB0aGUg
Y3VycmVudCBkcmF3IGNhbGwncyBmaXJzdFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKyAgICAvLyBU
cmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cy4gIFdlIHNob3VsZCBzd2l0Y2gK
KyAgICAvLyB0byB1c2luZyBnbF9CYXNlVmVydGV4IC0+IGJhc2VfdmVydGV4IGluIE1TTAorICAg
IEdMaW50IG1YZmJCYXNlVmVydGV4OworICAgIC8vIENhY2hlIHRoZSBjdXJyZW50IGRyYXcgY2Fs
bCdzIHZlcnRleCBjb3VudCBhcyB3ZWxsIHRvIHN1cHBvcnQgaW5zdGFuY2VkIGRyYXcgY2FsbHMK
KyAgICBHTHVpbnQgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2U7CiAKICAgICAvLyBDYWNoZWQg
YmFjay1lbmQgb2JqZWN0cwogICAgIEZyYW1lYnVmZmVyTXRsICptRHJhd0ZyYW1lYnVmZmVyID0g
bnVsbHB0cjsKQEAgLTU1NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENv
bnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgbXRsOjpCdWZmZXJQb29sIG1UcmlG
YW5JbmRleEJ1ZmZlcjsKICAgICAvLyBvbmUgYnVmZmVyIGNhbiBiZSByZXVzZWQgZm9yIGFueSBz
dGFydGluZyB2ZXJ0ZXggaW4gRHJhd0FycmF5cygpCiAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZh
bkFycmF5c0luZGV4QnVmZmVyOworICAgIC8vCisgICAgbXRsOjpCdWZmZXJQb29sIG1QcmltaXRp
dmVSZXN0YXJ0QnVmZmVyOwogCiAgICAgLy8gRHVtbXkgdGV4dHVyZSB0byBiZSB1c2VkIGZvciB0
cmFuc2Zvcm0gZmVlZGJhY2sgb25seSBwYXNzLgogICAgIG10bDo6VGV4dHVyZVJlZiBtRHVtbXlY
RkJSZW5kZXJUZXh0dXJlOwpAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBw
dWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKIAogICAgIERlZmF1bHRBdHRy
aWJ1dGUgbURlZmF1bHRBdHRyaWJ1dGVzW210bDo6a01heFZlcnRleEF0dHJpYnNdOwogCisgICAg
Ly8gVHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMuCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNv
bnN0IEJ1ZmZlck10bCAqPiBtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyczsKKwogICAg
IEluY29tcGxldGVUZXh0dXJlU2V0IG1JbmNvbXBsZXRlVGV4dHVyZXM7CiAgICAgYm9vbCBtSW5j
b21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10
bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLm1tCmluZGV4IDI3ZTY5Nzg3MDIxZjc4ZDdiZGI3ZWQwYzgwMGVlYTVjNDEw
MWE0NmYuLjQ1YTA5MjgwMGE3ZDAwOGYyZGMxMWQ1N2ZlODYxMThjNTNlNjk2N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9D
b250ZXh0TXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCkBAIC00NCwyNSArNDQsNiBAQCBjb25zdGV4cHIg
dWludDMyX3Qga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lID0gMDsKIGNvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJzUGVyRnJhbWUgPSAxMDsKICNlbmRp
ZgogCi0jZGVmaW5lIEFOR0xFX01UTF9YRkJfRFJBVyhEUkFXX1BST0MpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIW1TdGF0
ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIC8qIE5vcm1hbCBkcmF3IGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRFJBV19Q
Uk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAvKiBGaXJzdCBwYXNzOiB3cml0ZSB0byBY
RkIgYnVmZmVycyBpbiB2ZXJ0ZXggc2hhZGVyLCBmcmFnbWVudCBzaGFkZXIgaW5hY3RpdmUgKi8g
ICBcCi0gICAgICAgIERSQVdfUFJPQyh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFt
U3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAvKiBTZWNvbmQgcGFzczogZnVsbCByYXN0ZXJpemF0aW9uOiB2ZXJ0
ZXggc2hhZGVyICsgZnJhZ21lbnQgc2hhZGVyIGFyZSBhY3RpdmUuIFwKLSAgICAgICAgICAgICAg
IFZlcnRleCBzaGFkZXIgd3JpdGVzIHRvIHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8g
WEZCIGJ1ZmZlcnMgKi8gICAgICAgXAotICAgICAgICAgICAgaW52YWxpZGF0ZVJlbmRlclBpcGVs
aW5lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBEUkFXX1BST0MoZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQogYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRy
aWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1
ZmZlclBvb2wgKnBvb2wsCkBAIC04NCwxMSArNjUsMTEgQEAgYW5nbGU6OlJlc3VsdCBBbGxvY2F0
ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQWxsb2NhdGVM
aW5lTG9vcEJ1ZmZlckZyb21Qb29sKENvbnRleHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNUb1Jlc2VydmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZl
clBvb2wgKnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm9mZnNldE91dCkKK2FuZ2xlOjpSZXN1bHQgQWxs
b2NhdGVCdWZmZXJGcm9tUG9vbChDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5kaWNlc1RvUmVzZXJ2ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb2Zmc2V0
T3V0KQogewogICAgIHNpemVfdCBvZmZzZXQ7CiAgICAgcG9vbC0+cmVsZWFzZUluRmxpZ2h0QnVm
ZmVycyhjb250ZXh0KTsKQEAgLTEwNSwxMiArODYsNyBAQCBib29sIE5lZWRUb0ludmVydERlcHRo
UmFuZ2UoZmxvYXQgbmVhciwgZmxvYXQgZmFyKQogICAgIHJldHVybiBuZWFyID4gZmFyOwogfQog
Ci1ib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
LXsKLSAgICByZXR1cm4gZ2xTdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSAmJiBnbFN0YXRlLmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCk7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIENvbnZlcnRNYXJrZXJUb1N0cmluZyhHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFy
a2VyKQorc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25z
dCBjaGFyICptYXJrZXIpCiB7CiAgICAgc3RkOjpzdHJpbmcgY3BwU3RyaW5nOwogICAgIGlmIChs
ZW5ndGggPT0gMCkKQEAgLTE3Myw3ICsxNDksNyBAQCBjbGFzcyBMaW5lTG9vcExhc3RTZWdtZW50
SGVscGVyCiAgICAgICAgICAgICAgICAgICAgIHtpbmRleFR5cGVPck5vbmUsIHZlcnRleE9ySW5k
ZXhDb3VudCwgaW5kaWNlcywgbUxpbmVMb29wSW5kZXhCdWZmZXIsIDB9KSk7CiAgICAgICAgIH0K
IAotICAgICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwp
KTsKKyAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRs
LCBmYWxzZSkpOwogCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAg
ICB9CkBAIC0xOTEsNyArMTY3LDggQEAgQ29udGV4dE10bDo6Q29udGV4dE10bChjb25zdCBnbDo6
U3RhdGUgJnN0YXRlLCBnbDo6RXJyb3JTZXQgKmVycm9yU2V0LCBEaXNwbGF5TXQKICAgICAgIG1D
bWRCdWZmZXIoJmRpc3BsYXktPmNtZFF1ZXVlKCkpLAogICAgICAgbVJlbmRlckVuY29kZXIoJm1D
bWRCdWZmZXIsIG1PY2NsdXNpb25RdWVyeVBvb2wpLAogICAgICAgbUJsaXRFbmNvZGVyKCZtQ21k
QnVmZmVyKSwKLSAgICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlcikKKyAgICAgIG1Db21w
dXRlRW5jb2RlcigmbUNtZEJ1ZmZlciksCisgICAgICBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5j
ZSgwKQoge30KIAogQ29udGV4dE10bDo6fkNvbnRleHRNdGwoKSB7fQpAQCAtMjA4LDYgKzE4NSw4
IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aW5pdGlhbGl6ZSgpCiAgICAgbUxpbmVMb29w
TGFzdFNlZ21lbnRJbmRleEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDIgKiBzaXplb2YodWludDMy
X3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6
OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsK
KyAgICBtUHJpbWl0aXZlUmVzdGFydEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDAsIG10bDo6a0lu
ZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKIAogICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTIyNywyMyArMjA2LDIwIEBAIHZvaWQg
Q29udGV4dE10bDo6b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0ZWQoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgaWYgKEFOR0xFX0xJS0VMWShtSW5jb21w
bGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwotICAgIH0KLSAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1
cHBvcnRlZFRleHR1cmVUeXBlc1tdID0ge2dsOjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVy
ZVR5cGU6Ol8zRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6
OkN1YmVNYXB9OwotICAgIGZvciAoZ2w6OlRleHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRU
ZXh0dXJlVHlwZXMpCisgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVz
SW5pdGlhbGl6ZWQpKQogICAgIHsKLSAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0gICAg
ICAgIEFOR0xFX1RSWShtSW5jb21wbGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNv
bnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0ZXh0dXJlKSk7Ci0KLSAgICAgICAgVGV4dHVyZU10
bCAqdGV4dHVyZU10bCAgICAgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbCh0ZXh0dXJl
KTsKLSAgICAgICAgdGV4dHVyZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9
IEAiSW5jb21wbGV0ZVRleHR1cmUiOworICAgICAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBl
IHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0geworICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAor
ICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpDdWJlTWFwfTsKKyAgICAgICAgZm9yIChhdXRv
IHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxF
KHRleHR1cmUpOworICAgICAgICAgICAgQU5HTEVfVFJZKAorICAgICAgICAgICAgICAgIG1JbmNv
bXBsZXRlVGV4dHVyZXMuZ2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVs
bHB0ciwgJnRleHR1cmUpKTsKKyAgICAgICAgfQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVz
SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KLSAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlh
bGl6ZWQgPSB0cnVlOwotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQog
CkBAIC0yODIsNyArMjU4LDE3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZh
bkFycmF5c1dpdGhCYXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250CiAgICAgICAgICAg
ICB0aGlzLCB7MCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgbVRyaUZhbkFycmF5c0lu
ZGV4QnVmZmVyLCAwfSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1
cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291
bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7CisgICAgICAgIC8vIERyYXcgd2l0
aCB0aGUgemVybyBzdGFydGluZyBpbmRleCBidWZmZXIsIHNoaWZ0IHRoZSB2ZXJ0ZXggaW5kZXgg
dXNpbmcgYmFzZVZlcnRleAorICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKyAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4KE1UTFByaW1pdGl2ZVR5
cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlVUludDMyLCBtVHJpRmFuQXJy
YXlzSW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKyAgICB9CiAKICAgICBBTkdMRV9U
Ulkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmly
c3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0Vs
ZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigw
KSwKQEAgLTMxMSwxNiArMjk3LDIzIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1Ry
aUZhbkFycmF5c0xlZ2FjeShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgdGhp
cywge3N0YXRpY19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
b3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0p
KTsKIAotICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAg
ICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOwogCi0g
ICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgp
KTsKKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQor
ICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZl
TW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZl
VHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zm
c2V0LCBpbnN0YW5jZXMpOworICAgIH0KICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQs
IGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVu
dW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlKSk7CiAKLSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChNVExQcmlt
aXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVy
T2Zmc2V0KTsKKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3Rh
bmNlcyk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0zNjgs
MjIgKzM2MSwyNyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEFycmF5
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJP
ZmZzZXQ7CiAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50ID0gY291bnQgKyAxOwogCi0gICAg
QU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2Vz
Q291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsK
KyAgICBBTkdMRV9UUlkoQWxsb2NhdGVCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291
bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwgJmdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CiAgICAgQU5HTEVf
VFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFy
cmF5cygKICAgICAgICAgdGhpcywge3N0YXRpY19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdl
bklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZl
ci5jb21taXQodGhpcykpOworICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21t
aXQodGhpcywgZmFsc2UpKTsKIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJ
bmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhC
dWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVf
VFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0
LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVu
Y29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2Vu
SW5kaWNlc0NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1U
TEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKyAgICBleGVj
RHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNl
c0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQpAQCAtNDEzLDIxICs0MTEsMzMgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKIAogICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0
aXZlVHlwZShtb2RlKTsKIAotI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50
LCBpbnN0YW5jZXMsIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgeGZiUGFzcykpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChpbnN0YW5jZXMgPT0gMCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5
cygpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBt
UmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3Vu
dCwgaW5zdGFuY2VDb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChtU3Rh
dGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBB
TkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZh
bGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gbm9y
bWFsIGRyYXdBcnJheXMoKQorICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBl
LCBmaXJzdCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5j
ZUNvdW50KTsKKyAgICAgICAgfQogICAgIH0KKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRl
eHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sCisgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBmYWxzZSkpOwog
Ci0gICAgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKyAgICBpZiAoaW5z
dGFuY2VzID09IDApCisgICAgeworICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJv
bSBub3JtYWwgZHJhd0FycmF5cygpCisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcobXRsVHlw
ZSwgZmlyc3QsIGNvdW50KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXhlY0Ry
YXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICB9
CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC00ODAsMTYgKzQ5
MCwyNSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdUcmlGYW5FbGVtZW50cyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0LCAmZ2VuSW5kaWNlc0NvdW50
KSk7CiAKICAgICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0
ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAotICAgICAgICAgICAgdGhpcywge3R5cGUs
IGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0
aXZlUmVzdGFydH0pKTsKKyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywg
Z2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorICAg
ICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworCisgICAgICAgIEFOR0xFX1RSWShtVHJpRmFu
SW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5p
c1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5n
bGVGYW4sIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGljZXMsIHRydWUpKTsKIAotICAgICAgICBBTkdMRV9UUlkobVRyaUZhbklu
ZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7CisgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0
YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4
VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhC
dWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGljZXMsIGZhbHNlKSk7CiAKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0lu
ZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlw
ZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNE
cmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXND
b3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0gIC8vIGlmIChjb3VudCA+
IDMpCkBAIC01MzIsMjcgKzU1MSw4NyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdM
aW5lTG9vcEVsZW1lbnRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB1aW50
MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAgICAgICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNl
cyA9IGNvdW50ICogMjsKICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OwotICAgICAg
ICBBTkdMRV9UUlkoQWxsb2NhdGVMaW5lTG9vcEJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVk
SW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZz
ZXQpKTsKKyAgICAgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVz
ZXJ2ZWRJbmRpY2VzLCAmbUxpbmVMb29wSW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQp
KTsKIAogICAgICAgICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRl
TGluZUxvb3BCdWZmZXJGcm9tRWxlbWVudHNBcnJheSgKICAgICAgICAgICAgIHRoaXMsIHt0eXBl
LCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1p
dGl2ZVJlc3RhcnR9LAogICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOwogCi0gICAgICAg
IEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgICAgICBB
TkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAg
ICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJp
bWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIHRydWUpKTsKKworICAgICAgICAgICAg
ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbklu
ZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworICAgICAgICB9CiAKICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6
UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKIAotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlw
LCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNl
cyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGlu
ZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBp
bnN0YW5jZXMpOwogCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAg
ICB9ICAvLyBpZiAoY291bnQgPj0gMikKICAgICByZXR1cm4gZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lcywgY291bnQsIHR5cGUsIGluZGljZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOwogfQorYW5nbGU6
OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNTaW1wbGVUeXBlc1ByaW1pdGl2ZVJlc3Rh
cnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9k
ZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVu
dHNUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZXMpCit7CisKKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7Cisg
ICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zmc2V0OworICAgIHVpbnQzMl90IHJlc2VydmVkSW5k
aWNlcyA9IGNvdW50OworICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisgICAgQU5HTEVfVFJZ
KEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2VzLCAmbVByaW1pdGl2
ZVJlc3RhcnRCdWZmZXIsICZnZW5JZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9mZnNldCkpOworICAgIHN3aXRjaCAobW9kZSkKKyAg
ICB7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlBvaW50czoKKyAgICAgICAgICAg
IEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0
YXJ0UG9pbnRzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5k
aWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAg
ICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXRE
aXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIo
CisgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisgICAgICAgICAgICAgICAgJmdlbkluZGlj
ZXNDb3VudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2
ZU1vZGU6OlRyaWFuZ2xlczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdl
dFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgICAg
ICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5J
ZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAg
IH0KKyAgICBBTkdMRV9UUlkobVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsK
KyAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9k
ZSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkK
KyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291
bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksIHRydWUpKTsKKworICAgICAgICBleGVjRHJhd0lu
ZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgKHVpbnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5k
ZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5k
aWNlcywgZmFsc2UpKTsKKworICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAo
dWludDMyX3QpZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworCisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlByaW1pdGl2ZU1vZGUgbW9kZSwKQEAgLTU2Myw3ICs2NDIsNiBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7
CiAgICAgLy8gUmVhbCBpbnN0YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5z
dGFuY2VkIGRyYXcuCiAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5z
dGFuY2VzIDogMTsKLQogICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25N
b2RlKG1vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwpAQCAtNTc3LDE4ICs2NTUsMzkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxl
bWVudHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgcmV0
dXJuIGRyYXdMaW5lTG9vcEVsZW1lbnRzKGNvbnRleHQsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBp
bnN0YW5jZUNvdW50KTsKICAgICB9Ci0KICAgICBtdGw6OkJ1ZmZlclJlZiBpZHhCdWZmZXI7CiAg
ICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCAgICAgICAgICAgICA9IDA7CiAgICAgZ2w6OkRyYXdF
bGVtZW50c1R5cGUgY29udmVydGVkVHlwZSA9IHR5cGU7CisgICAgc2l6ZV90IGNvbnZlcnRlZENv
dW50ICAgICAgICAgICAgICA9IChzaXplX3QpY291bnQ7CiAKLSAgICBBTkdMRV9UUlkobVZlcnRl
eEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlk
eEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29u
dmVydGVkT2Zmc2V0LCAmY29udmVydGVkVHlwZSkpOworICAgIEFOR0xFX1RSWShtVmVydGV4QXJy
YXktPmdldEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCAm
aWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj
b252ZXJ0ZWRPZmZzZXQsICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKIAogICAg
IEFTU0VSVChpZHhCdWZmZXIpOwogICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjpr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQpID09IDApOworICAgIHVpbnQzMl90IGNvbnZlcnRl
ZENvdW50aTMyID0gKHVpbnQzMl90KWNvbnZlcnRlZENvdW50OworICAgIGlmIChtU3RhdGUuaXNU
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9U
Ulkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5j
ZXMsIHR5cGUsIGluZGljZXMsIHRydWUpKTsKKyAgICAgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxU
eXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOwogCi0gICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBm
YWxzZSkpOworICAgICAgICBNVExJbmRleFR5cGUgbXRsSWR4VHlwZSA9IG10bDo6R2V0SW5kZXhU
eXBlKGNvbnZlcnRlZFR5cGUpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gTm9ybWFsIGRyYXcKKyAgICAgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBp
ZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gSW5zdGFuY2VkIGRyYXcKKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNl
ZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZE9mZnNldCwgaW5zdGFu
Y2VDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGlj
ZXMsIGZhbHNlKSk7CiAKICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFBy
aW1pdGl2ZVR5cGUobW9kZSk7CiAKQEAgLTU5NywxMyArNjk2LDE0IEBAIGFuZ2xlOjpSZXN1bHQg
Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICBpZiAoaW5zdGFuY2VzID09IDApCiAgICAgewogICAgICAgICAvLyBOb3JtYWwgZHJhdwot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4
VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQpOworICAgICAgICBtUmVuZGVyRW5jb2Rl
ci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4
QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZz
ZXQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvLyBJbnN0YW5jZWQgZHJhdwot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb3Vu
dCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ291bnQpOworICAgICAgICBl
eGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElk
eFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNjI1LDcgKzcyNSw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4
dE10bDo6ZHJhd0VsZW1lbnRzQmFzZVZlcnRleChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2
b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCiB7Ci0gICAgLy8gTk9URShocWxlKTogRVMgMy4yCiAg
ICAgVU5JTVBMRU1FTlRFRCgpOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQpA
QCAtNjQ5LDEwICs3NDgsOSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50
c0luc3RhbmNlZEJhc2VWZXJ0ZXgoY29uc3QgZ2w6OkNvbnRleHQgKmNvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNl
VmVydGV4KQogewotICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQo
KTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0KQEAgLTY2OSw3ICs3NjcsNiBA
QCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0
ZXhCYXNlSW5zdGFuY2UoY29uc3QgZ2w6OgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpk
cmF3UmFuZ2VFbGVtZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0
LApAQCAtNjkwLDcgKzc4Nyw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1Jhbmdl
RWxlbWVudHNCYXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpp
bmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgYmFzZVZlcnRleCkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKICAg
ICBVTklNUExFTUVOVEVEKCk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CkBA
IC03MTMsNiArODA5LDY0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRz
SW5kaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OlN0b3A7CiB9CiAKK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgewor
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKHByaW1pdGl2ZVR5cGUsIHZlcnRl
eFN0YXJ0LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwg
dmVydGV4Q291bnQpOworICAgICAgICBmb3IgKHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5z
dGFuY2VzOyArK2luc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5l
bXVsYXRlZEluc3RhbmNlSUQgPSBpbnN0OworCisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5n
SW5kZXgpOworCisgICAgICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdT
dGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVy
LmRyYXcocHJpbWl0aXZlVHlwZSwgdmVydGV4U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAg
fQorICAgICAgICAvLyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisgICAgICAgIG1WZXJ0ZXhB
cnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCAwKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1p
dGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1
ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygp
Lmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50
LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUs
IGluZGV4Q291bnQsIGluZGV4VHlwZSwgaW5kZXhCdWZmZXIsIGJ1ZmZlck9mZnNldCk7CisgICAg
ICAgIGZvciAodWludDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9
IGluc3Q7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZl
clVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisKKyAgICAgICAg
ICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVy
LCBpbnN0KTsKKworICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0
aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQgdG8gemVybworICAgICAgICBtVmVydGV4QXJyYXkt
PmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisgICAgfQorfQor
CiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om11bHRpRHJhd0FycmF5cyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHTGludCAqZmlyc3RzLApAQCAtODAyLDE1ICs5NTYsMTUgQEAgc3Rk
OjpzdHJpbmcgQ29udGV4dE10bDo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiAvLyBF
WFRfZGVidWdfbWFya2VyCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFy
a2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCiB7CisgICAgbUNtZEJ1ZmZl
ci5pbnNlcnREZWJ1Z1NpZ24oQ29udmVydE1hcmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFy
a2VyKQogewotICAgIG1DbWRCdWZmZXIucHVzaERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvU3Ry
aW5nKGxlbmd0aCwgbWFya2VyKSk7CisgICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252
ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9Ci0KIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6cG9wR3JvdXBNYXJr
ZXIoKQogewogICAgIG1DbWRCdWZmZXIucG9wRGVidWdHcm91cCgpOwpAQCAtMTE1NSwxMCArMTMw
OSwxMiBAQCBRdWVyeUltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVF1ZXJ5KGdsOjpRdWVyeVR5cGUg
dHlwZSkKIHsKICAgICByZXR1cm4gbmV3IFF1ZXJ5TXRsKHR5cGUpOwogfQorCiBGZW5jZU5WSW1w
bCAqQ29udGV4dE10bDo6Y3JlYXRlRmVuY2VOVigpCiB7CiAgICAgcmV0dXJuIG5ldyBGZW5jZU5W
TXRsKCk7CiB9CisKIFN5bmNJbXBsICpDb250ZXh0TXRsOjpjcmVhdGVTeW5jKCkKIHsKICAgICBy
ZXR1cm4gbmV3IFN5bmNNdGwoKTsKQEAgLTEyMDUsNiArMTM2MSw2OSBAQCBPdmVybGF5SW1wbCAq
Q29udGV4dE10bDo6Y3JlYXRlT3ZlcmxheShjb25zdCBnbDo6T3ZlcmxheVN0YXRlICZzdGF0ZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+
Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7Cisg
ICAgICAgIG1EaXJ0eUJpdHMuc2V0KERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
Uyk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0
ZUNoYW5nZWQoKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0
ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlRHJp
dmVyVW5pZm9ybXMoKTsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25C
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKAorICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25z
dCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJz
KQoreworICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGZvciAo
c2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZm
ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycy5jb3VudChidWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZW5kRW5jb2RpbmcobVJlbmRlckVuY29kZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0
KGJ1ZmZlckNvdW50LCBidWZmZXJzKTsKKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKwordm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyU2V0KAorICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIGZvciAo
c2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZm
ZXJJbmRleCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
Lmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRN
dGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdl
dEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAg
ICAgICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCithbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7CisgICAg
aWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2su
ZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQo
KTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWlu
dCBudW1Hcm91cHNYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0x1aW50IG51bUdyb3Vwc1ksCkBAIC0xMzMxLDYgKzE1NTAsMTEgQEAgY29uc3QgbXRsOjpGb3Jt
YXQgJkNvbnRleHRNdGw6OmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1h
dElkKSBjb24KICAgICByZXR1cm4gZ2V0RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChhbmdsZUZv
cm1hdElkKTsKIH0KIAorY29uc3QgbXRsOjpGb3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRp
dmVGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IG10bEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZ2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKG10bEZvcm1hdCk7Cit9CisKIC8v
IFNlZSBtdGw6OkZvcm1hdFRhYmxlOjpnZXRWZXJ0ZXhGb3JtYXQoKQogY29uc3QgbXRsOjpWZXJ0
ZXhGb3JtYXQgJkNvbnRleHRNdGw6OmdldFZlcnRleEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQgYW5n
bGVGb3JtYXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBjb25zdApAQCAtMTMzOCwxMSArMTU2Miw2IEBA
IGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZDb250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQoYW5n
bGU6OkZvcm1hdElEIGFuZ2xlRm9ybWF0CiAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVy
dGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOwogfQogCi1jb25zdCBtdGw6
OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXQgbXRsRm9ybWF0KSBjb25zdAotewotICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldE5hdGl2
ZUZvcm1hdENhcHMobXRsRm9ybWF0KTsKLX0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpn
ZXRJbmNvbXBsZXRlVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlICoqdGV4dHVyZU91dCkKQEAgLTEzNjIsNiArMTU4MSwyMiBAQCB2b2lkIENvbnRleHRN
dGw6OmVuZFJlbmRlckVuY29kaW5nKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIp
CiAKICAgICAvLyBSZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cwogICAgIG1PY2NsdXNpb25RdWVy
eVBvb2wucmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKHRoaXMpOworCisgICAgbUN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIC8vIFJlc2V0IHNlcmlhbHMgZm9y
IFhGQiBpZiBhY3RpdmUuCisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAq
ZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgICAgICBBU1NF
UlQoZXhlY3V0YWJsZSk7CisgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFi
bGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKworICAgICAgICBUcmFuc2Zv
cm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorICAgICAgICAgICAgbXRsOjpH
ZXRJbXBsKG1TdGF0ZS5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSk7CisKKyAgICAgICAg
cG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja010
bC0+Z2V0QnVmZmVySGFuZGxlcygpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6ZW5k
RW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkKQEAgLTEzOTAsNyArMTYy
NSw3IEBAIHZvaWQgQ29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQ
YXNzQ29udGVudCkKIAogdm9pZCBDb250ZXh0TXRsOjpmbHVzaENvbW1hbmRCdWZlcigpCiB7Ci0g
ICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkp
CiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1NCw2ICsxNjg5LDI3IEBAIG10
bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKkNvbnRleHRNdGw6OmdldFJlbmRlclBhc3NDb21tYW5k
RW5jb2Rlcihjb25zdCBtdGw6OlJlCiAgICAgLy8gTmVlZCB0byByZS1hcHBseSBldmVyeXRoaW5n
IG9uIG5leHQgZHJhdyBjYWxsLgogICAgIG1EaXJ0eUJpdHMuc2V0KCk7CiAKKyAgICBpZDxNVExE
ZXZpY2U+IG1ldGFsRGV2aWNlID0gZ2V0RGlzcGxheSgpLT5nZXRNZXRhbERldmljZSgpOworICAg
IGlmIChtdGw6OkRldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkK
KyAgICB7CisgICAgICAgIE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVzYyA9IFtNVExS
ZW5kZXJQYXNzRGVzY3JpcHRvciByZW5kZXJQYXNzRGVzY3JpcHRvcl07CisgICAgICAgIGRlc2Mu
Y29udmVydFRvTWV0YWxEZXNjKG9iakNEZXNjKTsKKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXpl
ID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmlj
ZSk7CisgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICBD
b21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKG9iakNEZXNjLCB0
aGlzLCBtZXRhbERldmljZSk7CisgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAg
ICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRl
ciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQCJwaXhlbCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0
cyAlbHUgYnl0ZXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKyAgICAgICAgICAgIE5TRXJyb3IgKmVyciA9
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25FcnJvciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTotMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWRE
ZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisgICAgICAgICAgICB0aGlzLT5oYW5kbGVF
cnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19MSU5FX18pOworICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gJm1SZW5kZXJFbmNv
ZGVyLnJlc3RhcnQoZGVzYyk7CiB9CiAKQEAgLTE0NjcsMTEgKzE3MjMsMTIgQEAgbXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0VGV4dHVyZVJlbmRlckNvbW1hbmRFbmNv
ZGVyKAogCiAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyBycERlc2M7CiAKLSAgICBycERlc2MuY29s
b3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0OwotICAgIHJwRGVz
Yy5jb2xvckF0dGFjaG1lbnRzWzBdLmxldmVsICAgICAgICA9IGluZGV4LmdldE5hdGl2ZUxldmVs
KCk7Ci0gICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0uc2xpY2VPckRlcHRoID0gaW5kZXgu
aGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7Ci0gICAgcnBEZXNjLm51bUNv
bG9yQXR0YWNobWVudHMgICAgICAgICAgICAgID0gMTsKLSAgICBycERlc2Muc2FtcGxlQ291bnQg
ICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgICAgcnBE
ZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4dHVyZVRh
cmdldDsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5yZW5kZXJUYXJnZXQtPmxldmVs
ICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworICAgIHJwRGVzYy5jb2xvckF0dGFjaG1lbnRz
WzBdLnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0KKyAgICAgICAgaW5kZXguaGFzTGF5ZXIo
KSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgcnBEZXNjLm51bUNvbG9yQXR0YWNo
bWVudHMgPSAxOworICAgIHJwRGVzYy5zYW1wbGVDb3VudCAgICAgICAgID0gdGV4dHVyZVRhcmdl
dC0+c2FtcGxlcygpOwogCiAgICAgcmV0dXJuIGdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rlcihy
cERlc2MpOwogfQpAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBtdGw6OkNvbXB1dGVDb21tYW5kRW5j
b2RlciAqQ29udGV4dE10bDo6Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCkKIAogdm9pZCBDb250
ZXh0TXRsOjplbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKQogewotICAgIGlmICghbUNtZEJ1ZmZl
ci5yZWFkeSgpKQorICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgpKQogICAgIHsKICAgICAgICAg
bUNtZEJ1ZmZlci5yZXN0YXJ0KCk7CiAgICAgfQogCi0gICAgQVNTRVJUKG1DbWRCdWZmZXIucmVh
ZHkoKSk7CisgICAgQVNTRVJUKG1DbWRCdWZmZXIudmFsaWQoKSk7CiB9CiAKIHZvaWQgQ29udGV4
dE10bDo6dXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLApAQCAt
MTY3Nyw3ICsxOTM0LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbkRyYXdGcmFtZUJ1ZmZlckNoYW5n
ZWRTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKLXZvaWQgQ29u
dGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
V2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcikKK3ZvaWQgQ29udGV4dE10bDo6b25CYWNrYnVm
ZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3RvY29s
ICpiYWNrYnVmZmVyKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICA9IGdldFN0
YXRlKCk7CiAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpHZXRJbXBsKGds
U3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwpAQCAtMTY4NiwxMCArMTk0MywxMyBAQCB2b2lk
IENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFdpbmRvd1N1cmZhY2VNdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgdXBkYXRl
Vmlld3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXRO
ZWFyUGxhbmUoKSwKKyAgICAgICAgICAgICAgICAgICBnbFN0YXRlLmdldEZhclBsYW5lKCkpOwor
ICAgIHVwZGF0ZVNjaXNzb3IoZ2xTdGF0ZSk7CiAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2Vk
U3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOwogfQogCi1hbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgUXVlcnlNdGwgKnF1ZXJ5KQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvbk9jY2x1c2lv
blF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkK
IHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOwogICAgIG1PY2NsdXNp
b25RdWVyeSA9IHF1ZXJ5OwpAQCAtMTcwNiw3ICsxOTY2LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
IFF1ZXIKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLXZvaWQgQ29u
dGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
UXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kZWQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBBU1NF
UlQobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KTsKIApAQCAtMTcxOCw3ICsxOTc4LDcgQEAgdm9p
ZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBRdWVyeU10bCAqcXVlcnkKIAogICAgIG1PY2NsdXNpb25RdWVyeSA9IG51bGxwdHI7CiB9
Ci12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCit2b2lkIENvbnRleHRNdGw6Om9uT2NjbHVz
aW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpx
dWVyeSkKIHsKICAgICBpZiAocXVlcnktPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRzKCku
ZW1wdHkoKSkKICAgICB7CkBAIC0xNzI2LDcgKzE5ODYsNyBAQCB2b2lkIENvbnRleHRNdGw6Om9u
T2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10
bCAqcQogICAgIH0KICAgICBpZiAobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KQogICAgIHsKLSAg
ICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisgICAgICAgIG9uT2Nj
bHVzaW9uUXVlcnlFbmRlZChjb250ZXh0LCBxdWVyeSk7CiAgICAgfQogICAgIG1PY2NsdXNpb25R
dWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKIH0KQEAgLTE3NzAs
MjAgKzIwMzAsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnN0YXJ0T2NjbHVzaW9uUXVl
cnlJblJlbmRlclBhc3MoUXVlcnlNdGwgKnF1ZXJ5LCBib29sCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQogCi12b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRiYWNrTXRs
ICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBlbmQgY3VycmVudCByZW5k
ZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBYRkIKLSAgICAvLyBidWZm
ZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJldHRlciBhcHBy
b2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDb250ZXh0TXRsOjpvblRy
YW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5z
Zm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBl
bmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBY
RkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRl
ciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQogdm9pZCBD
b250ZXh0TXRsOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2
ZW50LCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKTsK
QEAgLTE4NDIsMTAgKzIwODgsMTkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERy
YXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKIHsKICAg
ICBBU1NFUlQobVByb2dyYW0pOwogCisgICAgLy8gVXBkYXRlIHRyYW5zZm9ybSBmZWVkYmFjayBv
ZmZzZXRzIG9uIGV2ZXJ5IGRyYXcgY2FsbC4KKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpcnN0VmVydGV4
ICE9IC0xKTsKKyAgICAgICAgbVhmYkJhc2VWZXJ0ZXggICAgICAgICAgICAgPSBmaXJzdFZlcnRl
eDsKKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPckluZGV4Q291
bnQ7CisgICAgICAgIGludmFsaWRhdGVEcml2ZXJVbmlmb3JtcygpOworICAgIH0KKwogICAgIC8v
IGluc3RhbmNlcz0wIG1lYW5zIG5vIGluc3RhbmNlZCBkcmF3LgogICAgIEdMc2l6ZWkgaW5zdGFu
Y2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CiAKQEAgLTE4NjIsMjAgKzIxMTcs
NiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMo
Y29udGV4dCkpOwogICAgIH0KIAotICAgIGlmIChtRGlydHlCaXRzLnRlc3QoRElSVFlfQklUX1JB
U1RFUklaRVJfRElTQ0FSRCkpCi0gICAgewotICAgICAgICBpZiAoZ2V0U3RhdGUoKS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
SWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNzIHNpbmNlIHdlIGNv
dWxkIHVzZSBhIGR1bW15IHJlbmRlcgotICAgICAgICAgICAgLy8gdGFyZ2V0IGlmIG9ubHkgWEZC
IGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGludmFsaWRhdGVTdGF0ZShjb250ZXh0KTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVSZW5k
ZXJQaXBlbGluZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFtUmVuZGVyRW5jb2Rl
ci52YWxpZCgpKQogICAgIHsKICAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZwpAQCAtMTg4
NCw3ICsyMTI1LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJUWV9C
SVRfRFJBV19GUkFNRUJVRkZFUikpCiAgICAgewotICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGly
dHlSZW5kZXJQYXNzKGNvbnRleHQpKTsKKyAgICAgICAgLy8gU3RhcnQgbmV3IHJlbmRlciBjb21t
YW5kIGVuY29kZXIKKyAgICAgICAgQU5HTEVfTVRMX1RSWSh0aGlzLCBtRHJhd0ZyYW1lYnVmZmVy
LT5lbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb250ZXh0KSk7CisKKyAgICAgICAgLy8gcmUtYXBw
bHkgZXZlcnl0aGluZworICAgICAgICBpbnZhbGlkYXRlU3RhdGUoY29udGV4dCk7CiAgICAgfQog
CiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSAmJiBtT2NjbHVzaW9uUXVlcnlQb29sLmdldE51bVJl
bmRlclBhc3NBbGxvY2F0ZWRRdWVyaWVzKCkgPT0gMCkKQEAgLTE4OTQsMTcgKzIxMzksMTEgQEAg
YW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQYXNz
KG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKICAgICB9CiAKLSAgICBib29sIGlzUGlwZWxpbmVE
ZXNjQ2hhbmdlZDsKLSAgICBBTkdMRV9UUlkoY2hlY2tJZlBpcGVsaW5lQ2hhbmdlZChjb250ZXh0
LCBtb2RlLCB4ZmJQYXNzLCAmaXNQaXBlbGluZURlc2NDaGFuZ2VkKSk7CisgICAgYm9vbCBjaGFu
Z2VkUGlwZWxpbmU7CisgICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4
dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZFBpcGVsaW5lKSk7CiAKICAgICBib29s
IHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxzZTsKLQotICAgIGlmIChJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShnZXRTdGF0ZSgpKSkKLSAgICB7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW5uZWVk
ZWQgZGlydHkgYml0cwotICAgICAgICBmaWx0ZXJPdXRYRkJPbmx5RGlydHlCaXRzKGNvbnRleHQp
OwotICAgIH0KLQogICAgIGZvciAoc2l6ZV90IGJpdCA6IG1EaXJ0eUJpdHMpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGJpdCkKQEAgLTE5NTMsOCArMjE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgIGNhc2UgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HOgogICAgICAgICAgICAg
ICAgIHVuaWZvcm1CdWZmZXJzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6Cisg
ICAgICAgICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnNFbXVsYXRpb24oY29udGV4dCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgotICAgICAgICAg
ICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTE5NjIs
ODIgKzIyMDMsMzEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoeGZiUGFz
cyAmJiAhbURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQotICAgIHsK
LSAgICAgICAgLy8gSWYgaGFuZGxlRGlydHlEcml2ZXJVbmlmb3JtcygpIHdhcyBub3QgY2FsbGVk
IGFuZCB0aGlzIGlzIFhGQiBwYXNzLCB3ZSBzdGlsbCBuZWVkIHRvCi0gICAgICAgIC8vIHVwZGF0
ZSBYRkIgcmVsYXRlZCB1bmlmb3JtcwotICAgICAgICBBTkdMRV9UUlkoCi0gICAgICAgICAgICBm
aWxsRHJpdmVyWEZCVW5pZm9ybXMoZmlyc3RWZXJ0ZXgsIHZlcnRleE9ySW5kZXhDb3VudCwgLyoq
IHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0
ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgp
OwotICAgIH0KLQogICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKIAotICAgIEFOR0xFX1RSWShtUHJv
Z3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5l
RGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVzY0No
YW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7Ci0KLSAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLXZvaWQgQ29udGV4dE10bDo6ZmlsdGVy
T3V0WEZCT25seURpcnR5Qml0cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBB
U1NFUlQoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoZ2V0U3RhdGUoKSkpOwotCi0gICAgQVNTRVJU
KG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50ZXh0
dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOwotCi0gICAgLy8gSW4gdHJhbnNmb3JtIGZl
ZWRiYWNrIG9ubHkgcGFzcywgb25seSB2ZXJ0ZXggc2hhZGVyJ3MgcmVsYXRlZCBzdGF0ZXMgYXJl
IG5lZWRlZC4KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQotICAgICAgICBh
bmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX1NURU5DSUxfREVTQykgfAotICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX0JJQVMpIHwgYW5nbGU6OkJpdDxz
aXplX3Q+KERJUlRZX0JJVF9TVEVOQ0lMX1JFRikgfAotICAgICAgICBhbmdsZTo6Qml0PHNpemVf
dD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRf
VklFV1BPUlQpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9TQ0lTU09S
KSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfQ1VMTF9NT0RFKSB8Ci0gICAgICAgIGFu
Z2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfV0lORElORyk7Ci0KLSAgICBtRGlydHlCaXRzICY9
IH5rVW5uZWVkZWRCaXRzOwotfQotCi1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURp
cnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAoIUlz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
RHJhdykKICAgICB7Ci0gICAgICAgIC8vIFN0YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNvZGVy
Ci0gICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVu
ZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICAvLyBYRkIgaXMgYWN0aXZlIGFuZCByYXN0ZXJpemF0aW9uIGlzIGRpc2FibGVkLiBVc2UgZHVt
bXkgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgLy8gV2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRo
ZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcK
LSAgICAgICAgLy8gYSBzbWFsbCBkdW1teSByZW5kZXIgdGFyZ2V0IHdvdWxkIG1ha2UgdGhlIHJl
bmRlciBwYXNzIGVuZGluZyB2ZXJ5IGNoZWFwLgotICAgICAgICBpZiAoIW1EdW1teVhGQlJlbmRl
clRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6
Ok1ha2UyRFRleHR1cmUodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhBOF9V
Tk9STSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEsIDEsIDEsIHRydWUsIGZhbHNlLCAmbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIgPSBnZXRUZXh0
dXJlUmVuZGVyQ29tbWFuZEVuY29kZXIoCi0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0
dXJlLAotICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTElu
ZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpKTsKLSAgICAgICAgZW5jb2Rlci0+c2V0Q29s
b3JMb2FkQWN0aW9uKE1UTExvYWRBY3Rpb25Eb250Q2FyZSwgTVRMQ2xlYXJDb2xvcigpLCAwKTsK
LSAgICAgICAgZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRD
YXJlKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFu
c2Zvcm1GZWVkYmFja09ubHlQYXNzIik7Ci0jZW5kaWYKKyAgICAgICAgbXRsOjpSZW5kZXJVdGls
cyAmdXRpbHMgPSBnZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgICAgIGFuZ2xlOjpSZXN1
bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHV0aWxzLmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNP
KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYyk7CisgICAgICAg
IEFOR0xFX1VOVVNFRF9WQVJJQUJMRShyZXN1bHQpOworICAgICAgICBhc3NlcnQocmVzdWx0ID09
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKyAgICAgICAgY2hhbmdlZFBpcGVsaW5lID0gdHJ1
ZTsKICAgICB9CiAKLSAgICAvLyByZS1hcHBseSBldmVyeXRoaW5nCi0gICAgaW52YWxpZGF0ZVN0
YXRlKGNvbnRleHQpOworICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQs
ICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3Jt
QnVmZmVyc0RpcnR5LCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpKTsKIAogICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAg
IGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgID0gbVN0YXRlOwotICAgIGNvbnN0IGdsOjpQcm9n
cmFtICpwcm9ncmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7CisgICAgY29uc3QgZ2w6OlN0YXRl
ICZnbFN0YXRlICAgICAgICAgICAgICAgID0gbVN0YXRlOworICAgIGNvbnN0IGdsOjpQcm9ncmFt
RXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4
ZWN1dGFibGUoKTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZ0ZXh0dXJl
cyAgICAgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKLSAgICBjb25zdCBnbDo6
QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJs
ZSgpLmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJl
TWFzayAmYWN0aXZlVGV4dHVyZXMgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyc01hc2so
KTsKIAogICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCiAgICAg
ewpAQCAtMjA2Nyw2ICsyMjU3LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVE
aXJ0eURlZmF1bHRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIH0KIAog
ICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRGcmFnbWVudERhdGEobURlZmF1bHRBdHRyaWJ1dGVzLCBtdGw6OmtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0
dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKIAogICAgIG1EaXJ0
eURlZmF1bHRBdHRyaWJzTWFzay5yZXNldCgpOwpAQCAtMjEyMCw5ICsyMzExLDYgQEAgYW5nbGU6
OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgIH0KICAgICBtRHJpdmVyVW5pZm9ybXMuY292ZXJhZ2VNYXNr
ID0gY292ZXJhZ2VNYXNrOwogCi0gICAgQU5HTEVfVFJZKAotICAgICAgICBmaWxsRHJpdmVyWEZC
VW5pZm9ybXMoZHJhd0NhbGxGaXJzdFZlcnRleCwgdmVydGljZXNQZXJJbnN0YW5jZSwgLyoqIHNr
aXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotCiAgICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnZhbGlk
KCkpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRHJpdmVyVW5pZm9ybXMs
IG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKICAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5n
SW5kZXgpOwpAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OmhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgdmVydGljZXNQZXJJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpCithbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNF
bXVsYXRpb24oCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgZ2w6OlRy
YW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpl
eGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKGV4
ZWN1dGFibGUpOwogCi0gICAgbURyaXZlclVuaWZvcm1zLnhmYkFjdGl2ZVVucGF1c2VkID0gZ2V0
U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKTsKLSAgICBpZiAoIXRy
YW5zZm9ybUZlZWRiYWNrIHx8ICFtRHJpdmVyVW5pZm9ybXMueGZiQWN0aXZlVW5wYXVzZWQpCisg
ICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgpIHx8ICFtU3Rh
dGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJW
ZXJ0aWNlc1BlckRyYXcgPSB2ZXJ0aWNlc1Blckluc3RhbmNlOworICAgIFRyYW5zZm9ybUZlZWRi
YWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgIHNpemVfdCBidWZmZXJDb3VudCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
Q291bnQoKTsKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVm
ZmVyTXRsICo+ICZidWZmZXJIYW5kbGVzID0KKyAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tNdGwt
PmdldEJ1ZmZlckhhbmRsZXMoKTsKIAotICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zv
cm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgZm9y
IChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJ1ZmZlckNvdW50OyArK2J1
ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJIYW5kbGUgPSBidWZm
ZXJIYW5kbGVzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckhhbmRsZSk7Cisg
ICAgICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICAgICAgbVJlbmRlckVu
Y29kZXIuc2V0QnVmZmVyRm9yV3JpdGUoCisgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKKyAgICAgICAgICAgIG10
bDo6a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgKHVpbnQzMl90KWJ1ZmZlckluZGV4
KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlck9m
ZnNldHModGhpcywgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJJbnN0YW5jZSAqIHNraXBwZWRJ
bnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsKKyAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFuZGxl
RGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAgLTIx
NTksMTMgKzIzNTUsMTMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURl
cHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICBtdGw6OkRlcHRo
U3RlbmNpbERlc2MgZHNEZXNjICAgICAgICAgICAgICA9IG1EZXB0aFN0ZW5jaWxEZXNjOwogICAg
IGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNjID0gbVJlbmRlckVuY29k
ZXIucmVuZGVyUGFzc0Rlc2MoKTsKIAotICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRh
Y2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQu
dGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmRlcHRoV3JpdGVFbmFibGVkICAgID0g
ZmFsc2U7CiAgICAgICAgIGRzRGVzYy5kZXB0aENvbXBhcmVGdW5jdGlvbiA9IE1UTENvbXBhcmVG
dW5jdGlvbkFsd2F5czsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxB
dHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNo
bWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBkc0Rlc2MuZnJvbnRGYWNlU3RlbmNpbC5y
ZXNldCgpOwogICAgICAgICBkc0Rlc2MuYmFja0ZhY2VTdGVuY2lsLnJlc2V0KCk7CkBAIC0yMTk2
LDggKzIzOTIsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhC
aWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1p
dGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaXNQaXBlbGluZURlc2NDaGFuZ2VkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGJmUGFz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
ICpwaXBlbGluZURlc2NDaGFuZ2VkKQogewogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxp
ZCgpKTsKICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgdG9wb2xvZ3lDbGFzcyA9IG10
bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVNb2RlKTsKQEAgLTIyMTYsMjQg
KzI0MTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFu
Z2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICByZW5kZXJQYXNzRGVzYy5w
b3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhtQmxlbmREZXNjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBpcGVs
aW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKIAotICAgICAgICBpZiAoeGZiUGFzcykKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQgc2hh
ZGVyLgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9
IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIG5vdCBhY3RpdmUgYW5kIHJhc3Rlcml6
ZXIgZGlzY2FyZCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlCi0gICAgICAgICAg
ICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRlciBtaWdodCB3
cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAotICAgICAgICAgICAgLy8gTWV0YWwgZG9l
c24ndCBhbGxvdyByYXN0ZXJpemF0aW9uIHRvIGJlIGRpc2FibGVkLgotICAgICAgICAgICAgbVJl
bmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9Ci0gICAgICAgICAgICAgICAgbXRs
OjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURl
c2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6
RW5hYmxlZDsKLSAgICAgICAgfQogICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLmlucHV0UHJp
bWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworICAgICAgICBtUmVuZGVyUGlwZWxpbmVE
ZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKyAgICAgICAgICAgIChtU3RhdGUuaXNSYXN0ZXJpemVy
RGlzY2FyZEVuYWJsZWQoKSA/IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbXVs
YXRlZERpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbmFibGVkKTsKICAgICAg
ICAgbVJlbmRlclBpcGVsaW5lRGVzYy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gbVN0YXRlLmlz
U2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwogICAgICAgICBtUmVuZGVyUGlwZWxpbmVE
ZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBtU3RhdGUuaXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKTsKIApAQCAtMjI0MSw3ICsyNDIzLDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpj
aGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICAgICAgbURyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RhdGUoKS5nZXRFbmFibGVkRHJhd0J1ZmZlcnMo
KSk7CiAgICAgfQogCi0gICAgKmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKKyAg
ICAqcGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKIAogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCmluZGV4
IGIwMGRlMWIyZDljODczNTdhZWFlNWFmYjAxYTY3MzQyNTI0MDY2YjQuLjI0MTcxMjIwYzVhNjUw
YWVhMzhjOTI0ZTRhZmQyNGFkYWFmMzk2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwuaApAQCAtNTIsNiArNTIsMTAgQEAgY2xhc3MgRGlzcGxheU10bCA6IHB1YmxpYyBEaXNwbGF5
SW1wbAogCiAgICAgZWdsOjpFcnJvciB3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIHdhaXROYXRpdmUoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdmFs
aWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1
dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgU3VyZmFjZUltcGwgKmNyZWF0
ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93LApA
QCAtOTYsMTEgKzEwMCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwK
IAogICAgIGJvb2wgaXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRv
dykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBlZ2w6OkVycm9yIHZhbGlkYXRlQ2xpZW50QnVmZmVy
KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKSBj
b25zdCBvdmVycmlkZTsKLQogICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92
ZXJyaWRlOwogCiAgICAgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0
OwpAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUlt
cGwKICAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3Q7CiAgICAgdm9pZCBpbml0
aWFsaXplVGV4dHVyZUNhcHMoKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJlcygp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUxpbWl0YXRpb25zKCk7CisKICAgICBhbmdsZTo6UmVzdWx0
IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CiAKICAgICBtdGw6OkF1dG9PYmpDUHRyPGlkPE1U
TERldmljZT4+IG1NZXRhbERldmljZSA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwubW0KaW5kZXggMjQ3ZDc2YTgwOTI1NDk4N2NlYzU0YTI2ODcwMDQ5OWU1NjdiZGQzZC4uYzE1
OWMwNWIwYTBiY2FjNDg1NWFkZTI5NzY0MTAxZmQ3ZWEzMzJlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwu
bW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0Rpc3BsYXlNdGwubW0KQEAgLTgsMTIgKzgsMTQgQEAKIAogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW1f
dXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKICNpbmNsdWRl
ICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvRGlzcGxheS5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJm
YWNlU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgpAQCAtMjIsOSAr
MjQsNjIgQEAKIAogI2luY2x1ZGUgIkVHTC9lZ2xleHQuaCIKIAorI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitj
b25zdGV4cHIgY2hhciBrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJS
RURfREVWSUNFIjsKKyNlbmRpZgorY29uc3RleHByIGNoYXIga0FOR0xFVHJhbnNmb3JtRmVlZGJh
Y2tFbnZbXSA9ICJBTkdMRV9NRVRBTF9YRkJfRU5BQkxFIjsKKwogbmFtZXNwYWNlIHJ4CiB7CiAK
K3N0YXRpYyBFR0xpbnQgR2V0RGVwdGhTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxf
SU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMjQ6CisgICAgICAgICAgICByZXR1cm4gMjQ7CisgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDI0OworICAgICAg
ICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3Jt
YXQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgRUdMaW50IEdl
dFN0ZW5jaWxTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAg
ICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQyNDoKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDMyRjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDg6CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDMyRl9T
VEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCiBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKIHsKICAg
ICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0
aGV5IGFyZSByZXF1aXJlbWVudHMgZm9yIE1ldGFsIDIuMC4KQEAgLTU3LDcgKzExMiw3IEBAIHN0
cnVjdCBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsCiB9OwogCiBEaXNwbGF5TXRsOjpEaXNwbGF5
TXRsKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICA6IERpc3BsYXlJbXBsKHN0
YXRlKSwgbVV0aWxzKHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorICAgIDogRGlz
cGxheUltcGwoc3RhdGUpLCBtU3RhdGVDYWNoZShtRmVhdHVyZXMpLCBtVXRpbHModGhpcykKIHt9
CiAKIERpc3BsYXlNdGw6On5EaXNwbGF5TXRsKCkge30KQEAgLTc4LDEwICsxMzMsMjcgQEAgYW5n
bGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplSW1wbChlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7Ci0gICAgICAgIG1NZXRhbERl
dmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxF
QVNFXTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBhbmdsZVBy
ZWZlcnJlZERldmljZSA9IGFuZ2xlOjpHZXRFbnZpcm9ubWVudFZhcihrQU5HTEVQcmVmZXJyZWRE
ZXZpY2VFbnYpOworICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZpY2UgIT0gIiIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIE5TQXJyYXk8aWQ8TVRMRGV2aWNlPj4gKmRldmljZXMgPSBbTVRM
Q29weUFsbERldmljZXMoKSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAgZm9y
IChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChbZGV2aWNlLm5hbWUubG93ZXJjYXNlU3RyaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAubG93ZXJjYXNlU3RyaW5nXSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcgTWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZp
Y2UgbmFtZV0pOworICAgICAgICAgICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbZGV2aWNlIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGlm
ICghbU1ldGFsRGV2aWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKyAgICAgICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1E
ZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKICAgICAgICAgfQogCiAgICAg
ICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gbXRsOjpHZXREZXZpY2VWZW5kb3JJZChtTWV0YWxE
ZXZpY2UpOwpAQCAtODksMTIgKzE2MSwxMyBAQCBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6Omlu
aXRpYWxpemVJbXBsKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICAgICAgbUNtZFF1ZXVlLnNl
dChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9BVVRPUkVM
RUFTRV0pOwogCiAgICAgICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQorI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgogICAgICAgICBpZiAoIW1HbHNsYW5nSW5pdGlhbGl6ZWQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEdsc2xhbmdJbml0aWFsaXplKCk7CiAgICAgICAgICAgICBt
R2xzbGFuZ0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAg
aWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKICAgICAgICAgewpAQCAtMTIwLDEyICsx
OTMsMTMgQEAgdm9pZCBEaXNwbGF5TXRsOjp0ZXJtaW5hdGUoKQogICAgIG1DYXBzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKIAogICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gMDsKLQorI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgogICAgIGlmIChtR2xzbGFuZ0luaXRpYWxpemVkKQogICAgIHsK
ICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsKICAgICAgICAgbUdsc2xhbmdJbml0aWFsaXplZCA9
IGZhbHNlOwogICAgIH0KKyNlbmRpZgogfQogCiBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VM
b3N0KCkKQEAgLTE3MSw2ICsyNDUsMTUgQEAgZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp3YWl0Q2xp
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHJldHVybiBlZ2w6Ok5vRXJyb3Io
KTsKIH0KIAorZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJp
YnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBGaWxsIG91dCBwcm9wZXJs
eQorICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwogZWdsOjpFcnJvciBEaXNwbGF5TXRs
Ojp3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKQog
ewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE4Nyw3ICsyNzAsOCBAQCBTdXJmYWNlSW1wbCAq
RGlzcGxheU10bDo6Y3JlYXRlV2luZG93U3VyZmFjZShjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAm
c3RhdGUsCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlclN1cmZhY2UoY29u
c3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQogewot
ICAgIHJldHVybiBuZXcgUEJ1ZmZlclN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGF0dHJpYnMpOwor
ICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwg
Kj4oMCk7CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNs
aWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCkBAIC0xOTUsMTUgKzI3
OSw3IEBAIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1
ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsKLSAgICBzd2l0Y2ggKGJ1ZnR5
cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZBQ0VfQU5HTEU6Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGNsaWVudEJ1ZmZl
ciwgYXR0cmlicyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZU10bCh0aGlzLCBzdGF0ZSwgY2xpZW50QnVmZmVyLCBh
dHRyaWJzKTsKIH0KIAogU3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBpeG1hcFN1cmZh
Y2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAtMjQwLDE3ICszMTYsMTIgQEAg
U3RyZWFtUHJvZHVjZXJJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTdHJlYW1Qcm9kdWNlckQzRFRl
eHR1cmUoCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJlR3JvdXBJbXBsICpEaXNwbGF5
TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKLXsKLSAgICByZXR1cm4gbmV3IFNoYXJlR3JvdXBNdGwo
KTsKLX0KLQogZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9u
KCkgY29uc3QKIHsKICAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0cyBHTEVTIDMuMCBvbiBpT1Mg
R1BVIGZhbWlseSA0KyBmb3Igbm93LgogICAgIGlmIChzdXBwb3J0c0VpdGhlckdQVUZhbWlseSg0
LCAxKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtdGw6OmtNYXhTdXBwb3J0ZWRHTFZlcnNpb247
CisgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAwKTsKICAgICB9CiAgICAgcmV0dXJuIGds
OjpWZXJzaW9uKDIsIDApOwogfQpAQCAtMjY1LDYgKzMzNiwxMSBAQCBFR0xTeW5jSW1wbCAqRGlz
cGxheU10bDo6Y3JlYXRlU3luYyhjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKICAg
ICByZXR1cm4gbmV3IEVHTFN5bmNNdGwoYXR0cmlicyk7CiB9CiAKK1NoYXJlR3JvdXBJbXBsICpE
aXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKK3sKKyAgICByZXR1cm4gbmV3IFNoYXJlR3Jv
dXBJbXBsKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6bWFrZUN1cnJlbnQoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2w6
OlN1cmZhY2UgKmRyYXdTdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLApAQCAtMzI2LDcgKzQwMiw3IEBAIGVnbDo6Q29u
ZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAgICAgY29uZmlnLnRyYW5zcGFy
ZW50VHlwZSA9IEVHTF9OT05FOwogCiAgICAgLy8gUGJ1ZmZlcgotICAgIGNvbmZpZy5iaW5kVG9U
ZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisgICAgY29uZmlnLmJpbmRUb1RleHR1cmVU
YXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7CiAgICAgY29uZmlnLm1heFBCdWZm
ZXJXaWR0aCAgICAgPSA0MDk2OwogICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0gNDA5
NjsKICAgICBjb25maWcubWF4UEJ1ZmZlclBpeGVscyAgICA9IDQwOTYgKiA0MDk2OwpAQCAtMzYx
LDQxICs0MzcsMTggQEAgZWdsOjpDb25maWdTZXQgRGlzcGxheU10bDo6Z2VuZXJhdGVDb25maWdz
KCkKIAogICAgIGNvbmZpZy5jb2xvckNvbXBvbmVudFR5cGUgPSBFR0xfQ09MT1JfQ09NUE9ORU5U
X1RZUEVfRklYRURfRVhUOwogCi0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10g
PSB7MCwgNH07CisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29uZmlnLnJlZFNpemUgICAgPSA4
OworICAgIGNvbmZpZy5ncmVlblNpemUgID0gODsKKyAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7
CisgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgIGNvbmZpZy5idWZmZXJTaXplID0gY29u
ZmlnLnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmlnLmJsdWVTaXplICsgY29uZmln
LmFscGhhU2l6ZTsKIAotICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQot
ICAgIHsKLSAgICAgICAgY29uZmlnLnNhbXBsZXMgICAgICAgPSBzYW1wbGVzOwotICAgICAgICBj
b25maWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7Ci0KLSAgICAgICAg
Ly8gQnVmZmVyIHNpemVzCi0gICAgICAgIGNvbmZpZy5yZWRTaXplICAgID0gODsKLSAgICAgICAg
Y29uZmlnLmdyZWVuU2l6ZSAgPSA4OwotICAgICAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7Ci0g
ICAgICAgIGNvbmZpZy5hbHBoYVNpemUgID0gODsKLSAgICAgICAgY29uZmlnLmJ1ZmZlclNpemUg
PSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUgKyBj
b25maWcuYWxwaGFTaXplOwotCi0gICAgICAgIC8vIFdpdGggRFMKLSAgICAgICAgY29uZmlnLmRl
cHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7Ci0KLSAgICAg
ICAgY29uZmlncy5hZGQoY29uZmlnKTsKLQotICAgICAgICAvLyBXaXRoIEQKLSAgICAgICAgY29u
ZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7Ci0g
ICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gV2l0aCBTCi0gICAgICAg
IGNvbmZpZy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7
Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gTm8gRFMKLSAgICAg
ICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMDsKLSAgICAgICAgY29uZmlnLnN0ZW5jaWxTaXplID0g
MDsKLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLSAgICB9CisgICAgLy8gVGVzdHMgbGlr
ZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVwdGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJ
WkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYKKyAgICAvLyByZW5kZXJDb25maWcgYXR0cmlidXRl
cyBhcmUgc2V0IHRvIGdsdTo6UmVuZGVyQ29uZmlnOjpET05UX0NBUkUKKyAgICBjb25maWcuZGVw
dGhTaXplICAgPSBHZXREZXB0aFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAg
Y29uZmlnLnN0ZW5jaWxTaXplID0gR2V0U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZv
cm1hdCk7CisgICAgY29uZmlncy5hZGQoY29uZmlnKTsKIAogICAgIHJldHVybiBjb25maWdzOwog
fQpAQCAtNDA5LDI2ICs0NjIsNiBAQCBib29sIERpc3BsYXlNdGw6OmlzVmFsaWROYXRpdmVXaW5k
b3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiAgICAgfQogfQogCi1lZ2w6OkVy
cm9yIERpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xlbnVtIGJ1ZnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJz
KSBjb25zdAotewotICAgIHN3aXRjaCAoYnVmdHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRUdM
X0lPU1VSRkFDRV9BTkdMRToKLSAgICAgICAgICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZU10bDo6
VmFsaWRhdGVBdHRyaWJ1dGVzKGNsaWVudEJ1ZmZlciwgYXR0cmlicykpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBdHRyaWJ1dGUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwotfQotCiBzdGQ6OnN0cmluZyBE
aXNwbGF5TXRsOjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQpAQCAtNTEyLDEwICs1NDUsMTYgQEAgdm9pZCBEaXNwbGF5TXRsOjplbnN1
cmVDYXBzSW5pdGlhbGl6ZWQoKSBjb25zdAogICAgIG1OYXRpdmVDYXBzLm1heFJlbmRlcmJ1ZmZl
clNpemUgICA9IG1OYXRpdmVDYXBzLm1heDJEVGV4dHVyZVNpemU7CiAgICAgbU5hdGl2ZUNhcHMu
bWluQWxpYXNlZFBvaW50U2l6ZSAgID0gMTsKICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMg
c29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBwb2ludCBzaXplIGV2ZW4gdGhvdWdoCi0gICAgLy8g
TWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQgbWF4IHN1cHBvcnRlZCBwb2lu
dCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gNjQgZm9yCi0gICAgLy8gbm93LgotICAgIC8v
IGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgxNgotICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2lu
dFNpemUgPSA2NDsKKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhh
dCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKyAg
ICAvLyBvbiBJbnRlbCBhbmQgNjQgb24gQU1EIGZvciBub3cuCisgICAgaWYgKFttTWV0YWxEZXZp
Y2UuZ2V0KCkubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZv
dW5kKQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNlZFBvaW50U2l6ZSA9IDI1
NTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNl
ZFBvaW50U2l6ZSA9IDY0OworICAgIH0KIAogICAgIG1OYXRpdmVDYXBzLm1pbkFsaWFzZWRMaW5l
V2lkdGggPSAxLjBmOwogICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAxLjBm
OwpAQCAtNjE1LDYgKzY1NCw5IEBAIHZvaWQgRGlzcGxheU10bDo6ZW5zdXJlQ2Fwc0luaXRpYWxp
emVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRl
Q29tcG9uZW50cyA9CiAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM7CiAKKyAgICAvLyBHTF9PRVNfZ2V0X3Byb2dyYW1f
YmluYXJ5CisgICAgbU5hdGl2ZUNhcHMucHJvZ3JhbUJpbmFyeUZvcm1hdHMucHVzaF9iYWNrKEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFKTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UK
ICAgICBtTmF0aXZlQ2Fwcy5tYXhDbGlwRGlzdGFuY2VzID0gODsKIApAQCAtNjQ3LDYgKzY4OSwx
NSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3QKICAgICBt
TmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQm9yZGVyQ2xhbXBPRVMgID0gZmFsc2U7ICAvLyBub3Qg
aW1wbGVtZW50ZWQgeWV0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IHRydWU7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGlzY2FyZEZyYW1lYnVmZmVyICAg
ICA9IHRydWU7CisgICAgLy8gTm90IGltcGxlbWVudGVkIGJ1dCBleHBvc2UKKyAgICBtTmF0aXZl
RXh0ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKworICAgIC8vIEVYVF9tdWx0aXNh
bXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICBtRmVhdHVyZXMuaGFzRGVwdGhB
dXRvUmVzb2x2ZS5lbmFibGVkICYmIG1GZWF0dXJlcy5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5h
YmxlZCkKKyAgICB7CisgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJlbmRl
clRvVGV4dHVyZSA9IHRydWU7CisgICAgfQogCiAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9taW5t
YXgKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5ibGVuZE1pbk1heCA9IHRydWU7CkBAIC02NjIsOCAr
NzEzLDggQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAg
ICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0
ZW5zaW9ucy5zZW1hcGhvcmVGZCA9IGZhbHNlOwogCi0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5z
dGFuY2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcu
ZW5hYmxlZDsKLSAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNFWFQgICA9IG1O
YXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFOworICAgIG1OYXRpdmVFeHRlbnNp
b25zLmluc3RhbmNlZEFycmF5c0FOR0xFID0gdHJ1ZTsKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5p
bnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CiAKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yb2J1
c3RCdWZmZXJBY2Nlc3NCZWhhdmlvciA9IGZhbHNlOwogCkBAIC02ODYsNiArNzM3LDkgQEAgdm9p
ZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsKIAorICAgIC8vIEdMX09FU19n
ZXRfcHJvZ3JhbV9iaW5hcnkKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5
T0VTID0gdHJ1ZTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CiAKQEAgLTcxMywxMSArNzY3LDE3
IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVRleHR1cmVDYXBzKCkgY29uc3QKIAogICAg
IC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4dGVuc2lvbnMuCiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMu
c2V0VGV4dHVyZUV4dGVuc2lvblN1cHBvcnQobU5hdGl2ZVRleHR1cmVDYXBzKTsKLQorICAgIC8v
IE1vZGlmeSBleHRlbnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0CiAgICAgLy8gRGlzYWJsZSBh
bGwgZGVwdGggYnVmZmVyIGFuZCBzdGVuY2lsIGJ1ZmZlciByZWFkYmFjayBleHRlbnNpb25zIHVu
dGlsIHdlIG5lZWQgdGhlbQogICAgIG1OYXRpdmVFeHRlbnNpb25zLnJlYWREZXB0aE5WICAgICAg
ICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0g
ZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGVwdGhCdWZmZXJGbG9hdDJOViA9IGZhbHNl
OworICAgIG1OYXRpdmVFeHRlbnNpb25zLnRleHR1cmVDb21wcmVzc2lvbkFTVENMRFJLSFIgJj0g
c3VwcG9ydHNJT1NHUFVGYW1pbHkoMik7Cit9CisKK3ZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6
ZUxpbWl0YXRpb25zKCkKK3sKKyAgICBtTmF0aXZlTGltaXRhdGlvbnMubm9WZXJ0ZXhBdHRyaWJ1
dGVBbGlhc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1
cmVzKCkKQEAgLTc3OSw2ICs4MzksOSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0
dXJlcygpCiAgICAgQU5HTEVfRkVBVFVSRV9DT05ESVRJT04oKCZtRmVhdHVyZXMpLCBhbGxvd1Nl
cGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IWlzT1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CiAKKyAgICBtRmVhdHVyZXMu
ZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQgPQorICAgICAgICBhbmdsZTo6R2V0RW52
aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKwogICAg
IGFuZ2xlOjpQbGF0Zm9ybU1ldGhvZHMgKnBsYXRmb3JtID0gQU5HTEVQbGF0Zm9ybUN1cnJlbnQo
KTsKICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0dXJl
cyk7CiAKQEAgLTc4Nyw2ICs4NTAsMjcgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRmVh
dHVyZXMoKQogCiBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJy
YXJ5KCkKIHsKKyAgICAjaWZkZWYgQU5HTEVfTUVUQUxfWENPREVfQlVJTERTX1NIQURFUlMKKyAg
ICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5
bmNJbmZvTXRsKTsKKyAgICAgICAgCisgICAgCisgICAgICAgIE5TU3RyaW5nICpwYXRoID0gW05T
QnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRsZVBh
dGg7CisgICAgICAgIE5TRXJyb3IgKiBlcnJvciA9IG51bGxwdHI7CisgICAgICAgIG1EZWZhdWx0
U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnMgPSBbZ2V0TWV0YWxEZXZpY2UoKSBuZXdE
ZWZhdWx0TGlicmFyeVdpdGhCdW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOnBhdGhdIGVy
cm9yOiZlcnJvcl07CisKKyAgICAgICAgaWYgKGVycm9yICYmICFtRGVmYXVsdFNoYWRlcnNBc3lu
Y0luZm8tPmRlZmF1bHRTaGFkZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBBTkdMRV9NVExf
T0JKQ19TQ09QRQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigpIDw8ICJJbnRl
cm5hbCBlcnJvcjogbmV3RGVmYXVsdExpYnJhcnlXaXRoQnVuZGxlIGZhaWxlZC4gIiA8PCBlcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVyc0NvbXBpbGVFcnJv
ciA9IHN0ZDo6bW92ZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
U3RvcDsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbURlZmF1bHRTaGFk
ZXJzQXN5bmNJbmZvLT5jb21waWxlZCA9IHRydWU7CisgICAgICAgIAorICAgICNlbHNlCiAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZv
TXRsKTsKIAogICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIGFzeW5jIGluZm8gc3RydWN0IHNp
bmNlIGl0IG1pZ2h0IGJlIHJlbGVhc2VkIGluIHRlcm1pbmF0ZSgpLCBidXQgdGhlCkBAIC04MTUs
NyArODk5LDcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGli
cmFyeSgpCiAKICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAgICAg
fQotCisgICAgI2VuZGlmCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCmluZGV4IGI0NThiZDkxYmJl
ZmFmNmRkYjIyMjY0Yjc4MWUzZTg2YzdjM2Y3ZTYuLjVlNWNjZTljNTFjZjhmYjJiZmJhZGZmMTU3
MzM1ZWE3M2EyNDk4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5o
CkBAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAogY2xhc3MgUmVuZGVyQ29tbWFuZEVu
Y29kZXI7CiB9ICAvLyBuYW1lc3BhY2UgbXRsCiBjbGFzcyBDb250ZXh0TXRsOwotY2xhc3MgV2lu
ZG93U3VyZmFjZU10bDsKK2NsYXNzIFN1cmZhY2VNdGw7CiAKIGNsYXNzIEZyYW1lYnVmZmVyTXRs
IDogcHVibGljIEZyYW1lYnVmZmVySW1wbAogewogICBwdWJsaWM6Ci0gICAgRnJhbWVidWZmZXJN
dGwoY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlLCBib29sIGZsaXBZLCBXaW5kb3dT
dXJmYWNlTXRsICpiYWNrYnVmZmVyKTsKKyAgICBleHBsaWNpdCBGcmFtZWJ1ZmZlck10bChjb25z
dCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlTXRsUHJv
dG9jb2wgKmJhY2tidWZmZXIpOwogICAgIH5GcmFtZWJ1ZmZlck10bCgpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAKQEAg
LTk3LDcgKzk5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJ
bXBsCiAKICAgICBnbDo6UmVjdGFuZ2xlIGdldENvbXBsZXRlUmVuZGVyQXJlYSgpIGNvbnN0Owog
ICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgV2luZG93U3VyZmFjZU10bCAqZ2V0QXR0
YWNoZWRCYWNrYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKyAgICBTdXJm
YWNlTXRsUHJvdG9jb2wgKmdldEF0dGFjaGVkQmFja2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1C
YWNrYnVmZmVyOyB9CiAKICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFydGVkKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpIGNvbnN0OwogICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuc3Vy
ZVJlbmRlclBhc3NTdGFydGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKQEAgLTE2Miw2
ICsxNjQsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBs
CiAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmZGVz
Yyk7CiAKKyAgICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciBjbGVh
ckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgKmNvbG9y
T3V0KTsKKwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlQ29sb3JSZW5kZXJUYXJnZXQoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsIHNpemVfdCBjb2xvckluZGV4R0wpOwogICAgIGFuZ2xlOjpS
ZXN1bHQgdXBkYXRlRGVwdGhSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
OwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRhcmdldChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCk7CkBAIC0xNjksMTEgKzE3NSwzNyBAQCBjbGFzcyBGcmFtZWJ1ZmZl
ck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJBdHRhY2htZW50ICphdHRhY2ht
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGVp
dGhlciByZXR1cm5zIHRoZSByZW5kZXIgdGFyZ2V0J3MgdGV4dHVyZSBpdHNlbGYgaWYgdGhlIHRl
eHR1cmUgaXMgcmVhZGFibGUKKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgdGV4dHVy
ZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNl
ZAorICAgIC8vIGZvciBwYWNrZWQgZGVwdGggc3RlbmNpbCB3aGVyZSByZWFkaW5nIHN0ZW5jaWwg
cmVxdWlyZXMgYSBzdGVuY2lsIHZpZXcuIEhvd2V2ZXIgaWYgYSB0ZXh0dXJlCisgICAgLy8gaGFz
IGJvdGggcmVuZGVyIHRhcmdldCwgcGl4ZWwgZm9ybWF0IHZpZXcgJiBzaGFkZXIgcmVhZGFibGUg
dXNhZ2UgZmxhZ3MsIHRoZXJlIHdpbGwgYmUKKyAgICAvLyBzb21lIGdsaXRjaGVzIGhhcHBlbiBp
biBNZXRhbCBmcmFtZXdvcmsuCisgICAgLy8gU28gdGhlIHNvbHV0aW9uIGlzIGNyZWF0aW5nIGEg
ZGVwdGggc3RlbmNpbCB0ZXh0dXJlIHdpdGhvdXQgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZyBidXQg
aGFzCisgICAgLy8gcmVuZGVyIHRhcmdldCBmbGFnLCB0aGVuIGR1cmluZyBibGl0dGluZyBwcm9j
ZXNzLCB0aGlzIHRleHR1cmUgaXMgY29waWVkIHRvIGFub3RoZXIKKyAgICAvLyBpbnRlcm1pZGlh
dGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywgYnV0IG5vdCByZW5kZXIg
dGFyZ2V0IGZsYWcuCisgICAgYW5nbGU6OlJlc3VsdCBnZXRSZWFkYWJsZVZpZXdGb3JSZW5kZXJU
YXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICZydHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXRsOjpUZXh0dXJlUmVmICpyZWFkYWJsZURlcHRoVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVS
ZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xldmVsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWFkYWJs
ZVZpZXdMYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6UmVjdGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKTsKKwogICAgIGFuZ2xlOjpSZXN1
bHQgcmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFj
a1BpeGVsc1BhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCkgY29uc3Q7CiAKKyAgICBhbmdsZTo6UmVzdWx0
IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10
bCAqcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmV2ZXJzZVJvd09yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAq
ZHN0QnVmZmVyKSBjb25zdDsKKwogICAgIC8vIE5PVEU6IHdlIGNhbm5vdCB1c2UgUmVuZGVyVGFy
Z2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZQogICAgIC8v
IGRlcHRoICYgc3RlbmNpbCBhdHRhY2htZW50cyBhcyBvZiBub3cuIFNlcGFyYXRlIGRlcHRoICYg
c3RlbmNpbCBjb3VsZCBiZSB1c2VmdWwgdG8KICAgICAvLyBzYXZlIHNwYWNlcyBvbiBpT1MgZGV2
aWNlcy4gU2VlIGRvYy9QYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0Lm1kLgpAQCAtMTg5LDggKzIy
MSwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAg
ICAvLyBhcyBieSBhIGNvbXB1dGUgcGFzcy4KICAgICBib29sIG1SZW5kZXJQYXNzQ2xlYW5TdGFy
dCA9IGZhbHNlOwogCi0gICAgV2luZG93U3VyZmFjZU10bCAqbUJhY2tidWZmZXIgPSBudWxscHRy
OwotICAgIGNvbnN0IGJvb2wgbUZsaXBZICAgICAgICAgICAgID0gZmFsc2U7CisgICAgU3VyZmFj
ZU10bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAgY29uc3QgYm9vbCBtRmxp
cFkgICAgICAgICAgICAgICA9IGZhbHNlOworCisgICAgbXRsOjpCdWZmZXJSZWYgbVJlYWRQaXhl
bEJ1ZmZlcjsKIH07CiB9ICAvLyBuYW1lc3BhY2UgcngKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRs
Lm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLm1tCmluZGV4IDg0ZTQyMjcwYTcxNTMwNzc1YTcwODZkNzI3MjRkYmY5
MTljODRhZDcuLmQ3MWRlNzJkMmRkMjUxYjI4YmE2Y2M5ZmZmYzExNTMzYzAxZDAyZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9GcmFtZUJ1ZmZlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KQEAgLTMzLDEyICszMywzMCBA
QCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1
cmUsCiAgICAgKmNvbG9yT3V0ID0KICAgICAgICAgbXRsOjpFbXVsYXRlZEFscGhhQ2xlYXJDb2xv
cihjbGVhckNvbG9yLnRvTVRMQ2xlYXJDb2xvcigpLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxl
TWFzaygpKTsKIH0KKworY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZHZXRSZWFkQXR0YWNobWVu
dEluZm8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCkK
K3sKKyAgICBHTGVudW0gaW1wbEZvcm1hdDsKKworICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgcmVu
ZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKyAgICB7CisgICAgICAgIGltcGxGb3JtYXQgPSByZW5k
ZXJUYXJnZXQtPmdldEZvcm1hdCgpLT5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVudGF0
aW9uSW50ZXJuYWxGb3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGltcGxG
b3JtYXQgPSBHTF9OT05FOworICAgIH0KKworICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdEluZm8oaW1wbEZvcm1hdCk7Cit9CisKIH0KIAogLy8gRnJhbWVidWZmZXJNdGwgaW1w
bGVtZW50YXRpb24KIEZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJh
bWVidWZmZXJTdGF0ZSAmc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dTdXJmYWNlTXRs
ICpiYWNrYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQ
cm90b2NvbCAqYmFja2J1ZmZlcikKICAgICA6IEZyYW1lYnVmZmVySW1wbChzdGF0ZSksIG1CYWNr
YnVmZmVyKGJhY2tidWZmZXIpLCBtRmxpcFkoZmxpcFkpCiB7CiAgICAgcmVzZXQoKTsKQEAgLTU1
LDYgKzczLDggQEAgdm9pZCBGcmFtZWJ1ZmZlck10bDo6cmVzZXQoKQogICAgIG1EZXB0aFJlbmRl
clRhcmdldCA9IG1TdGVuY2lsUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKIAogICAgIG1SZW5kZXJQ
YXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQgPSBudWxscHRyOworCisgICAgbVJlYWRQaXhl
bEJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXJNdGw6OmRlc3Ryb3koY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCkBAIC0xMjIsNyArMTQyLDYgQEAgYW5nbGU6OlJlc3Vs
dCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJmdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKQogewogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFyT3B0czsKLQog
ICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVhckNvbG9yQnVmZmVyczsKICAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQogICAgIHsKQEAgLTEzMyw3ICsxNTIsNiBAQCBhbmdsZTo6UmVzdWx0IEZy
YW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZ2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgICAgICBjbGVhckNvbG9yQnVmZmVycy5zZXQoZHJhd2J1ZmZlcik7CiAgICAgICAgIGNsZWFy
T3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNb
MV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKICAgICB9Ci0KICAgICByZXR1cm4gY2xlYXJJbXBs
KGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsKIH0KIGFuZ2xlOjpSZXN1
bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LApAQCAtMTQ1LDggKzE2Myw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNs
ZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGNsZWFyQ29sb3JC
dWZmZXJzLnNldChkcmF3YnVmZmVyKTsKIAogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFy
T3B0czsKLSAgICBjbGVhck9wdHMuY2xlYXJDb2xvciA9IG10bDo6Q2xlYXJDb2xvclZhbHVlKHZh
bHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7Ci0KKyAgICBjbGVhck9w
dHMuY2xlYXJDb2xvciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sx
XSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOwogICAgIHJldHVybiBjbGVhckltcGwoY29udGV4dCwg
Y2xlYXJDb2xvckJ1ZmZlcnMsICZjbGVhck9wdHMpOwogfQogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTE1
OSw3ICsxNzYsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcml2
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVh
ckNvbG9yQnVmZmVyczsKICAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCiAgICAgewotICAg
ICAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gdmFsdWVzWzBdICYgbXRsOjprU3RlbmNpbE1h
c2tBbGw7CisgICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAodmFsdWVz
WzBdLCAwLCBzdGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTE3Nyw3ICsxOTQsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1l
YnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZpKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogewog
ICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFyT3B0czsKICAgICBjbGVhck9wdHMuY2xlYXJE
ZXB0aCAgID0gZGVwdGg7Ci0gICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IHN0ZW5jaWwgJiBt
dGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gZ2w6OmNs
YW1wKHN0ZW5jaWwsIDAsIHN0YXRpY19jYXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkp
OwogCiAgICAgcmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJhd0J1ZmZlck1hc2soKSwg
JmNsZWFyT3B0cyk7CiB9CkBAIC0xODUsMTIgKzIwMiw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVi
dWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiBjb25z
dCBnbDo6SW50ZXJuYWxGb3JtYXQgJkZyYW1lYnVmZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNv
bG9yUmVhZEZvcm1hdCgKICAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgY29uc3QKIHsK
LSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7Ci0g
ICAgR0xlbnVtIHNpemVkRm9ybWF0ICAgICAgID0gbVN0YXRlLmdldFJlYWRBdHRhY2htZW50KCkt
PmdldEZvcm1hdCgpLmluZm8tPnNpemVkSW50ZXJuYWxGb3JtYXQ7Ci0gICAgYW5nbGU6OkZvcm1h
dElEIGZvcm1hdElEID0gYW5nbGU6OkZvcm1hdDo6SW50ZXJuYWxGb3JtYXRUb0lEKHNpemVkRm9y
bWF0KTsKLSAgICBjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0ID0gY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChmb3JtYXRJRCk7Ci0gICAgR0xlbnVtIGltcGxGb3Jt
YXQgICAgICAgICAgICA9IG10bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVu
dGF0aW9uSW50ZXJuYWxGb3JtYXQ7Ci0gICAgcmV0dXJuIGdsOjpHZXRTaXplZEludGVybmFsRm9y
bWF0SW5mbyhpbXBsRm9ybWF0KTsKKyAgICByZXR1cm4gR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNv
bnRleHQsIGdldENvbG9yUmVhZFJlbmRlclRhcmdldChjb250ZXh0KSk7CiB9CiAKIGFuZ2xlOjpS
ZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCkBAIC01OTAsNiArNjAyLDkgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6c3lu
Y1N0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb250ZXh0LCB0aGlz
LCByZW5kZXJQYXNzQ2hhbmdlZCk7CiAgICAgICAgIH0KKworICAgICAgICAvLyBSZWNyZWF0ZSBw
aXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgorICAgICAgICBtUmVhZFBp
eGVsQnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CkBAIC03NDgsNyArNzYzLDcgQEAgdm9pZCBGcmFtZWJ1ZmZlck10bDo6b25TdGFy
dGVkRHJhd2luZ1RvRnJhbWVCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAKIHZv
aWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CiB7Ci0gICAgaWYgKCFtQmFja2J1ZmZlcikKKyAgICBpZiAoIW1CYWNrYnVmZmVyIHx8IG1CYWNr
YnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTgxMiw2ICs4MjcsOTIgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6dXBkYXRl
Q2FjaGVkUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKK2FuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJN
dGw6OmdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldCgKKyAgICBjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKKyAgICBjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnJ0dCwKKyAgICBjb25zdCBn
bDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKyAgICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVw
dGhWaWV3T3V0LAorICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlld091dCwK
KyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGV2ZWwsCisgICAgdWludDMyX3QgKnJlYWRhYmxl
Vmlld0xheWVyLAorICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmlld0FyZWEpCit7CisgICAg
Q29udGV4dE10bCAqY29udGV4dE10bCAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAg
bXRsOjpUZXh0dXJlUmVmIHNyY1RleHR1cmUgPSBydHQuZ2V0VGV4dHVyZSgpOworICAgIHVpbnQz
Ml90IGxldmVsICAgICAgICAgICAgID0gcnR0LmdldExldmVsSW5kZXgoKS5nZXQoKTsKKyAgICB1
aW50MzJfdCBzbGljZSAgICAgICAgICAgICA9IHJ0dC5nZXRMYXllckluZGV4KCk7CisKKyAgICAv
LyBOT1RFKGhxbGUpOiBzbGljZSBpcyBub3QgdXNlZCBhdG0uCisgICAgQVNTRVJUKHNsaWNlID09
IDApOworCisgICAgYm9vbCByZWFkU3RlbmNpbCA9IHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQ7CisK
KyAgICBpZiAoIXNyY1RleHR1cmUpCisgICAgeworICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZp
ZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSA9IHJlYWRBcmVhOworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQorCisgICAgYm9vbCBza2lw
Q29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKyAgICBpZiAocnR0LmdldEZv
cm1hdCgpLT5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkgJiYgcmVhZFN0ZW5jaWwpCisgICAgewor
ICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGggc3RlbmNpbCwgYW5kIHdl
IG5lZWQgc3RlbmNpbCB2aWV3LAorICAgICAgICAvLyB0aGVuIGl0IG11c3Qgc3VwcG9ydCBjcmVh
dGluZyBkaWZmZXJlbnQgZm9ybWF0IHZpZXcuCisgICAgICAgIHNraXBDb3B5ID0gc2tpcENvcHkg
JiYgc3JjVGV4dHVyZS0+c3VwcG9ydEZvcm1hdFZpZXcoKTsKKyAgICB9CisKKyAgICBpZiAoc2tp
cENvcHkpCisgICAgeworICAgICAgICAvLyBUZXh0dXJlIHN1cHBvcnRzIHN0ZW5jaWwgdmlldywg
anVzdCB1c2UgaXQgZGlyZWN0bHkKKyAgICAgICAgaWYgKHJlYWRhYmxlRGVwdGhWaWV3T3V0KQor
ICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdPdXQgPSBzcmNUZXh0dXJl
OworICAgICAgICB9CisgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorICAgICAg
ICB7CisgICAgICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IHNyY1RleHR1cmU7Cisg
ICAgICAgIH0KKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gbGV2ZWw7CisgICAgICAgICpy
ZWFkYWJsZVZpZXdMYXllciA9IHNsaWNlOworICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSAgPSBy
ZWFkQXJlYTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNyY1RleHR1
cmUtPnRleHR1cmVUeXBlKCkgIT0gTVRMVGV4dHVyZVR5cGUzRCk7CisKKyAgICAgICAgLy8gVGV4
dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNpbCB2aWV3IG9yIG5vdCBzaGFkZXIgcmVhZGFibGUs
IGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKyAgICAgICAgLy8gdGV4dHVyZSB0aGF0IHN1cHBvcnRz
IHN0ZW5jaWwgdmlldyBhbmQgc2hhZGVyIHJlYWQuCisgICAgICAgIG10bDo6VGV4dHVyZVJlZiBm
b3JtYXRhYmxlVmlldyA9IHNyY1RleHR1cmUtPmdldFJlYWRhYmxlQ29weSgKKyAgICAgICAgICAg
IGNvbnRleHRNdGwsIGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5jb2RlcigpLCBsZXZlbCwg
c2xpY2UsCisgICAgICAgICAgICBNVExSZWdpb25NYWtlMkQocmVhZEFyZWEueCwgcmVhZEFyZWEu
eSwgcmVhZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCkpOworCisgICAgICAgIEFOR0xFX0NI
RUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIGZvcm1hdGFibGVWaWV3KTsKKworICAgICAgICBpZiAo
cmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZURl
cHRoVmlld091dCA9IGZvcm1hdGFibGVWaWV3OworICAgICAgICB9CisgICAgICAgIGlmIChyZWFk
YWJsZVN0ZW5jaWxWaWV3T3V0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVTdGVu
Y2lsVmlld091dCA9IGZvcm1hdGFibGVWaWV3LT5nZXRTdGVuY2lsVmlldygpOworICAgICAgICB9
CisKKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gMDsKKyAgICAgICAgKnJlYWRhYmxlVmll
d0xheWVyID0gMDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0FyZWEgID0gZ2w6OlJlY3RhbmdsZSgw
LCAwLCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVpZ2h0KTsKKyAgICB9CisKKyAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZm
ZXJNdGw6OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQ
YXNzRGVzYyAqcERlc2NPdXQpCiB7CkBAIC04MzIsOSArOTMzLDkgQEAgYW5nbGU6OlJlc3VsdCBG
cmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgIGlmIChjb2xvclJlbmRlclRhcmdldCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZjb2xvckF0
dGFjaG1lbnQpOworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Mu
c2FtcGxlQ291bnQsIGNvbG9yUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogCiAg
ICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6Om1heChkZXNjLm51bUNv
bG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOwotICAgICAgICAgICAgZGVzYy5zYW1w
bGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIGNvbG9yUmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJTYW1wbGVzKCkpOwogCiAgICAgICAgICAgICBpZiAoIW1SZW5kZXJQYXNzRmlyc3RD
b2xvckF0dGFjaG1lbnRGb3JtYXQpCiAgICAgICAgICAgICB7CkBAIC04NjIsMjIgKzk2MywyOSBA
QCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpwcmVwYXJlUmVuZGVyUGFzcyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgbURlcHRoUmVuZGVyVGFyZ2V0LT50b1JlbmRl
clBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5kZXB0aEF0dGFjaG1lbnQpOwogICAgICAgICBkZXNj
LnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgbURlcHRoUmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBkZXNjLmRlcHRoQXR0YWNobWVudC5yZXNldCgpOwotICAgIH0KIAogICAgIGlmIChtU3RlbmNp
bFJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT50b1Jl
bmRlclBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CiAgICAgICAg
IGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBtU3RlbmNpbFJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKICAgICB9CisKKyAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKKy8vIE92ZXJyaWRlIGNsZWFyIGNvbG9yIGJhc2Vk
IG9uIHRleHR1cmUncyB3cml0ZSBtYXNrCit2b2lkIEZyYW1lYnVmZmVyTXRsOjpvdmVycmlkZUNs
ZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yICpjb2xvck91
dCkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAgICpjb2xvck91dCA9IG10bDo6
RW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvciwgdGV4dHVyZS0+Z2V0Q29sb3JXcml0
YWJsZU1hc2soKSk7CisgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGRlc2Muc3RlbmNp
bEF0dGFjaG1lbnQucmVzZXQoKTsKKyAgICAgICAgKmNvbG9yT3V0ID0gY2xlYXJDb2xvcjsKICAg
ICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpS
ZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRPcChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKQEAgLTkyMyw3ICsxMDMxLDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJXaXRoTG9hZE9wUmVuZGVyUGFzc05vdFN0YXJ0ZWQoCiAKICAgICAgICAgbXRsOjpS
ZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRhY2htZW50ID0KICAgICAgICAg
ICAgIHRlbXBEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsKLSAgICAgICAgY29u
c3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1cmU7Cisg
ICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50
ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJzLnRlc3QoY29sb3JJbmRl
eEdMKSkKICAgICAgICAgewpAQCAtOTY2LDcgKzEwNzQsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1l
YnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3BSZW5kZXJQYXNzU3RhcnRlZCgKIAogICAgICAgICBt
dGw6OlJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZjb2xvckF0dGFjaG1lbnQgPQogICAg
ICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsK
LSAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50
LnRleHR1cmU7CisgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9y
QXR0YWNobWVudC50ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJzLnRl
c3QoY29sb3JJbmRleEdMKSkKICAgICAgICAgewpAQCAtMTE5Myw4ICsxMzAxLDkgQEAgZ2w6OlJl
Y3RhbmdsZSBGcmFtZWJ1ZmZlck10bDo6Z2V0Q29ycmVjdEZsaXBwZWRSZWFkQXJlYShjb25zdCBn
bDo6Q29udGV4dCAqY29udGUKICAgICBnbDo6UmVjdGFuZ2xlIGZsaXBwZWRBcmVhID0gZ2xBcmVh
OwogICAgIGlmIChtRmxpcFkpCiAgICAgewotICAgICAgICBmbGlwcGVkQXJlYS55ID0gcmVhZFJU
LT5nZXRUZXh0dXJlKCktPmhlaWdodChyZWFkUlQtPmdldExldmVsSW5kZXgoKSkgLSBmbGlwcGVk
QXJlYS55IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBwZWRBcmVhLmhlaWdodDsKKyAg
ICAgICAgZmxpcHBlZEFyZWEueSA9CisgICAgICAgICAgICByZWFkUlQtPmdldFRleHR1cmUoKS0+
aGVpZ2h0KHJlYWRSVC0+Z2V0TGV2ZWxJbmRleCgpKSAtCisgICAgICAgICAgICBmbGlwcGVkQXJl
YS55IC0gZmxpcHBlZEFyZWEuaGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBmbGlwcGVkQXJl
YTsKQEAgLTEyMTEsNyArMTMyMCw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJl
YWRQaXhlbHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KLQogICAgIGlmIChwYWNrUGl4
ZWxzUGFyYW1zLnBhY2tCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gcmVhZFBpeGVsc1Rv
UEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMsIHJlbmRlclRhcmdldCk7CkBAIC0x
MjYxLDcgKzEzNjksNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4ZWxz
SW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgICAgICAvLyBDb252ZXJ0IHRv
IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICBQYWNrUGl4ZWxzKHBhY2tQaXhlbHNSb3dQYXJh
bXMsIHJlYWRBbmdsZUZvcm1hdCwgYnVmZmVyUm93UGl0Y2gsIHJlYWRQaXhlbFJvd0J1ZmZlci5k
YXRhKCksCi0gICAgICAgICAgICAgICAgICAgcGl4ZWxzKTsKKyAgICAgICAgICAgcGl4ZWxzKTsK
ICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMjc5LDE5
ICsxMzg3LDM2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHNUb1BC
Tyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIEFOR0xFX01UTF9DSEVDSyhjb250
ZXh0TXRsLCBwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAgICAgIEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAgICA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCk7Ci0gICAgY29uc3QgdWludDMyX3Qg
ZHN0QnVmZmVyUm93UGl0Y2ggICAgPSBwYWNrUGl4ZWxzUGFyYW1zLm91dHB1dFBpdGNoOwotICAg
IGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0ID0gKnBhY2tQaXhlbHNQYXJhbXMu
ZGVzdEZvcm1hdDsKLSAgICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRlciAgICAgICAgICA9IHBh
Y2tQaXhlbHNQYXJhbXMucmV2ZXJzZVJvd09yZGVyOworICAgIHVpbnQzMl90IG9mZnNldCA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCk7CiAKICAgICBCdWZm
ZXJNdGwgKnBhY2tCdWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1BpeGVsc1BhcmFtcy5wYWNr
QnVmZmVyKTsKICAgICBtdGw6OkJ1ZmZlclJlZiBkc3RCdWZmZXIgPSBwYWNrQnVmZmVyTXRsLT5n
ZXRDdXJyZW50QnVmZmVyKCk7CiAKKyAgICByZXR1cm4gcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnRl
eHQsIGFyZWEsIHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9y
bWF0LCBvZmZzZXQsIHBhY2tQaXhlbHNQYXJhbXMub3V0cHV0UGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZHN0QnVmZmVyKTsKK30KKworYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6cmVhZFBpeGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93
T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0QnVmZmVyT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVmZmVyKSBjb25zdAorewor
ICAgIEFTU0VSVChyZW5kZXJUYXJnZXQpOworCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKwogICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZyZWFkRm9y
bWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOwogICAgIGNvbnN0IGFuZ2xl
OjpGb3JtYXQgJnJlYWRBbmdsZUZvcm1hdCA9IHJlYWRGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQo
KTsKIAogICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0
dXJlKCk7CiAKKyAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZHN0QnVmZmVyID0gKnBEc3RCdWZm
ZXI7CisKICAgICBpZiAoZHN0QW5nbGVGb3JtYXQuaWQgIT0gcmVhZEFuZ2xlRm9ybWF0LmlkIHx8
IHRleHR1cmUtPnNhbXBsZXMoKSA+IDEgfHwKICAgICAgICAgKGRzdEJ1ZmZlck9mZnNldCAlIGRz
dEFuZ2xlRm9ybWF0LnBpeGVsQnl0ZXMpIHx8CiAgICAgICAgIChkc3RCdWZmZXJPZmZzZXQgJSBt
dGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkpCkBAIC0xMzU5LDggKzE0ODQs
OCBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZlclJvd09m
ZnNldCA9IGRzdEJ1ZmZlck9mZnNldDsKICAgICAgICAgICAgIC8vIENvcHkgcGl4ZWxzIHJvdyBi
eSByb3cKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydFJvdywgY29waWVkUm93cyA9IDA7
IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsKLSAgICAgICAgICAgICAgICAgKytjb3BpZWRSb3dz
LCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSBzdGFydFJvdywgaSA9IDA7IGkgPCBhcmVhLmhlaWdodDsKKyAgICAgICAg
ICAgICAgICAgKytpLCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzcmNSb3dSZWdpb24ueSA9IHI7CiAKQEAg
LTEzNzUsNSArMTUwMCw0IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhl
bHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1
cmZhY2VTdXJmYWNlTXRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0OGU1ZGI5MDliYThiZTQ0MGUxOWY0MjE3
NzJkZGQxZjNlYTYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKQEAgLTAs
MCArMSwxMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxf
SU9TVVJGQUNFU1VSRkFDRU1UTF9IXworI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9J
T1NVUkZBQ0VTVVJGQUNFTVRMX0hfCisKKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlUmVm
Lmg+CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oIgorCituYW1lc3BhY2UgbWV0YWwKK3sKK2Ns
YXNzIEF0dHJpYnV0ZU1hcDsKK30gIC8vIG5hbWVzcGFjZSBtZXRhbAorCituYW1lc3BhY2UgcngK
K3sKKworY2xhc3MgRGlzcGxheU1UTDsKKworY2xhc3MgSU9TdXJmYWNlU3VyZmFjZU10bCA6IHB1
YmxpYyBTdXJmYWNlTXRsUHJvdG9jb2wKK3sKKyAgcHVibGljOgorICAgIElPU3VyZmFjZVN1cmZh
Y2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVHTENs
aWVudEJ1ZmZlciBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicyk7CisgICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZGVzdHJveShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIG92ZXJy
aWRlOworCisgICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlz
cGxheSkgb3ZlcnJpZGU7CisgICAgRnJhbWVidWZmZXJJbXBsICpjcmVhdGVEZWZhdWx0RnJhbWVi
dWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRl
KSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3IgbWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdW5NYWtlQ3VycmVudChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBzd2FwKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHBvc3RT
dWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQg
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKKworICAgIGVnbDo6
RXJyb3IgcXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikgb3Zl
cnJpZGU7CisgICAgZWdsOjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgZ2V0U3lu
Y1ZhbHVlcyhFR0x1aW50NjRLSFIgKnVzdCwgRUdMdWludDY0S0hSICptc2MsIEVHTHVpbnQ2NEtI
UiAqc2JjKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGdldE1zY1JhdGUoRUdMaW50ICpudW1l
cmF0b3IsIEVHTGludCAqZGVub21pbmF0b3IpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3dhcElu
dGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXhlZFdpZHRo
KEVHTGludCB3aWR0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXhlZEhlaWdodChFR0xpbnQg
aGVpZ2h0KSBvdmVycmlkZTsKKworICAgIC8vIFdpZHRoIGNhbiBjaGFuZ2Ugd2hlbiB0aGUgY2xp
ZW50IHdpbmRvdyByZXNpemVzLgorICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIC8vIEhlaWdodCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXpl
cy4KKyAgICBFR0xpbnQgZ2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBFR0xpbnQg
aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRUdMaW50IGdl
dFN3YXBCZWhhdmlvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYW5nbGU6OlJlc3VsdCBnZXRB
dHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92
ZXJyaWRlOworCisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5l
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgYW5nbGU6OlJlc3Vs
dCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Km5ld0RyYXdhYmxlT3V0KSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICBib29sIHByZXNlcnZlQnVmZmVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBtdGw6OlRleHR1cmVSZWYgZ2V0VGV4dHVyZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUlu
aXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGFuZ2xlOjpSZXN1bHQg
ZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworICAgIH0KKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9yVGV4dHVy
ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOyB9CisKKyAgcHJpdmF0ZToK
KyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZVRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tpbmdUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZVRleHR1cmUo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVu
ZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpUZXh0
dXJlUmVmICp0ZXh0dXJlT3V0KTsKKworICAgIGFuZ2xlOjpSZXN1bHQgaW5pdGlhbGl6ZUFscGhh
Q2hhbm5lbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1aW50IHRleHR1cmUpOworCisj
aWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQorICAgIElPU3VyZmFjZUxv
Y2tPcHRpb25zIGdldElPU3VyZmFjZUxvY2tPcHRpb25zKCkgY29uc3Q7CisjZW5kaWYKKworICAg
IENvbnRleHRNdGwgKmNvbnRleHRNVEw7CisgICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Cisg
ICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlOworICAgIG10bDo6VGV4dHVyZVJl
ZiBtSU9TdXJmYWNlVGV4dHVyZVZpZXc7CisgICAgbXRsOjpGb3JtYXQgbUZvcm1hdDsKKyAgICBt
dGw6OkZvcm1hdCBtSW50ZXJuYWxGb3JtYXQ7CisgICAgUmVuZGVyVGFyZ2V0TXRsIG1SZW5kZXJU
YXJnZXQ7CisgICAgYm9vbCBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQ7CisgICAgaW50IG1XaWR0
aDsKKyAgICBpbnQgbUhlaWdodDsKKyAgICBpbnQgbVBsYW5lOworICAgIGludCBtRm9ybWF0SW5k
ZXg7CisgICAgaW50IG1Sb3dTdHJpZGVJblBpeGVsczsKKworI2lmIGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fSU9TX1NJTVVMQVRPUikKKyAgICBHTHVpbnQgbUJvdW5kVGV4dHVyZUlEOworICAgIGJv
b2wgbVVwbG9hZEZyb21JT1N1cmZhY2U7CisgICAgYm9vbCBtUmVhZGJhY2tUb0lPU3VyZmFjZTsK
KyNlbmRpZgorfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElCQU5HTEVf
UkVOREVSRVJfR0xfRUFHTF9JT1NVUkZBQ0VTVVJGQUNFRUFHTF9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFj
ZVN1cmZhY2VNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yjk0ODU5YTg5
ZTVkY2M5YmMwNDE3YTUxOTUwZjRlMjg1NTQ3ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1
cmZhY2VNdGwubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxOSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBJT1N1cmZhY2VTdXJm
YWNlTXRsLm1tOgorLy8gICAgSW1wbGVtZW50cyB0aGUgY2xhc3MgbWV0aG9kcyBmb3IgSU9TdXJm
YWNlU3VyZmFjZU10bC4KKy8vCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9J
T1N1cmZhY2VTdXJmYWNlTXRsLmgiCisKKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4K
KworI2luY2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9TdXJm
YWNlLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oIgorI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCIKKworLy8gQ29tcGlsZXIg
Y2FuIHR1cm4gb24gcHJvZ3JhbW1hdGljYWwgZnJhbWUgY2FwdHVyZSBpbiByZWxlYXNlIGJ1aWxk
IGJ5IGRlZmluaW5nCisvLyBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFIGZsYWcuCisjaWYgZGVm
aW5lZChOREVCVUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCisjICAg
IGRlZmluZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQgMAorI2Vsc2UKKyMgICAg
ZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAxCisjZW5kaWYKK25hbWVz
cGFjZSByeAoreworCituYW1lc3BhY2UKK3sKKworc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8K
K3sKKyAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisgICAgYW5n
bGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworICAgIGFuZ2xlOjpGb3JtYXRJRCBpbnRlcm5hbFBp
eGVsRm9ybWF0OworfTsKKworc3RhdGljIGNvbnN0IElPU3VyZmFjZUZvcm1hdEluZm8ga0lPU3Vy
ZmFjZUZvcm1hdHNbXSA9IHsKKyAgICB7R0xfUkVELCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6
Rm9ybWF0SUQ6OlI4X1VOT1JNLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4X1VOT1JNfSwKKyAgICB7R0xf
UjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5ULCBh
bmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwKKyAgICB7R0xfUkcsIEdMX1VOU0lHTkVEX0JZ
VEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VO
T1JNfSwKKyAgICB7R0xfUkdCLCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4
RzhCOEE4X1VOT1JNLCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKKyAgICB7R0xf
QkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk0sCisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk19LAorICAgIHtHTF9SR0Ix
MF9BMiwgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
MEcxMEIxMEEyX1VOT1JNLAorICAgICBhbmdsZTo6Rm9ybWF0SUQ6OlIxMEcxMEIxMEEyX1VOT1JN
fSwKKyAgICB7R0xfUkdCQSwgR0xfSEFMRl9GTE9BVCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZC
MTZBMTZfRkxPQVQsCisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FUfSwK
K307CisKK2ludCBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gdHlwZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oQXJyYXlTaXplKGtJT1N1cmZhY2VGb3JtYXRzKSk7ICsraSkKKyAgICB7CisgICAg
ICAgIGNvbnN0IGF1dG8gJmZvcm1hdEluZm8gPSBrSU9TdXJmYWNlRm9ybWF0c1tpXTsKKyAgICAg
ICAgaWYgKGZvcm1hdEluZm8uaW50ZXJuYWxGb3JtYXQgPT0gaW50ZXJuYWxGb3JtYXQgJiYgZm9y
bWF0SW5mby50eXBlID09IHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwor
Ly8gVE9ETyhqY3VubmluZ2hhbSkgOiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJl
ZHVjZSBjb3B5K3Bhc3RlZCBjb2RlCisKK0FOR0xFX01UTF9VTlVTRUQKK2Jvb2wgSXNGcmFtZUNh
cHR1cmVFbmFibGVkKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVE
CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgZnJhbWUg
Y2FwdHVyZSBwcm9ncmFtbWF0aWNhbGx5IGlmIHRoZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
CisgICAgLy8gZW52aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzbG93
IGRvd24gdGhlIHJlbmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworICAgIC8vIGZpbmVseSBj
b250cm9sIHdoZXRoZXIgdGhleSB3YW50IHRvIGNhcHR1cmUgdGhlIGZyYW1lIGZvciBwYXJ0aWN1
bGFyIGFwcGxpY2F0aW9uIG9yIG5vdC4KKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgID0g
c3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUiKTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBmYWxzZTsK
KworICAgIHJldHVybiBlbmFibGVkOworI2VuZGlmCit9CisKK0FOR0xFX01UTF9VTlVTRUQKK3N0
ZDo6c3RyaW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gIiI7CisjZWxzZQorICAgIGF1dG8gdmFyICAg
ICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVf
RklMRSIpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7
CisKKyAgICByZXR1cm4gZmlsZVBhdGg7CisjZW5kaWYKK30KKworQU5HTEVfTVRMX1VOVVNFRAor
c2l6ZV90IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgYXV0byB2YXIgICAg
ICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVS
RV9NQVgiKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lcyA9IHZhciA/IHN0ZDo6
YXRvaSh2YXIpIDogMTAwOworCisgICAgcmV0dXJuIG1heEZyYW1lczsKKyNlbmRpZgorfQorCitB
TkdMRV9NVExfVU5VU0VECitzaXplX3QgTWluQWxsb3dlZEZyYW1lQ2FwdHVyZSgpCit7CisjaWYg
IUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIHJldHVybiAwOworI2Vsc2UK
KyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfTUlOIik7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFt
ZSA9IHZhciA/IHN0ZDo6YXRvaSh2YXIpIDogMDsKKworICAgIHJldHVybiBtaW5GcmFtZTsKKyNl
bmRpZgorfQorCitBTkdMRV9NVExfVU5VU0VECitib29sIEZyYW1lQ2FwdHVyZURldmljZVNjb3Bl
KCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJu
IGZhbHNlOworI2Vsc2UKKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6
Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2NvcGVEZXZpY2UgPSB2YXIgPyAoc3RyY21wKHZhciwgImRldmljZSIpID09IDAp
IDogZmFsc2U7CisKKyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisjZW5kaWYKK30KKworQU5HTEVf
TVRMX1VOVVNFRAorc3RkOjphdG9taWM8c2l6ZV90PiBnRnJhbWVDYXB0dXJlZCgwKTsKKworQU5H
TEVfTVRMX1VOVVNFRAordm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFs
RGV2aWNlLCBpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsQ21kUXVldWUpCit7CisjaWYgQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJs
ZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ0ZyYW1lQ2Fw
dHVyZWQgPj0gTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdlciA9IFtNVExD
YXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisgICAgaWYgKGNhcHR1cmVNYW5h
Z2VyLmlzQ2FwdHVyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdG
cmFtZUNhcHR1cmVkKys7CisKKyAgICBpZiAoZ0ZyYW1lQ2FwdHVyZWQgPCBNaW5BbGxvd2VkRnJh
bWVDYXB0dXJlKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjICAgIGlmZGVm
IF9fTUFDXzEwXzE1CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEz
LjAsIDEzKSkKKyAgICB7CisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVz
Y3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAgICAgICBj
YXB0dXJlRGVzY3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsKKyAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAgICAgID0gR2V0TWV0YWxD
YXB0dXJlRmlsZSgpOworICAgICAgICBpZiAoZmlsZVBhdGggIT0gIiIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9CisgICAgICAgICAgICAg
ICAgZmlsZVBhdGggKyBzdGQ6OnRvX3N0cmluZyhnRnJhbWVDYXB0dXJlZCAtIDEpICsgIi5ncHV0
cmFjZSI7CisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9IE1UTENh
cHR1cmVEZXN0aW5hdGlvbkdQVVRyYWNlRG9jdW1lbnQ7CisgICAgICAgICAgICBjYXB0dXJlRGVz
Y3JpcHRvci5vdXRwdXRVUkwgPQorICAgICAgICAgICAgICAgIFtOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm51bWJlcmVkUGF0aC5jX3N0cigpXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6ZmFsc2VdOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNl
IGV4ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBY
Y29kZQorICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRpb24gPSBNVExDYXB0
dXJlRGVzdGluYXRpb25EZXZlbG9wZXJUb29sczsKKyAgICAgICAgfQorCisgICAgICAgIE5TRXJy
b3IgKmVycm9yOworICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRo
RGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorICAgICAgICB7Cisg
ICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBjYXB0dXJlLCBlcnJvciAlQCIsIGVy
cm9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjICAgIGVuZGlmICAvLyBfX01BQ18x
MF8xNQorICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwg
MTMpKQorICAgIHsKKyAgICAgICAgTVRMQ2FwdHVyZURlc2NyaXB0b3IgKmNhcHR1cmVEZXNjcmlw
dG9yID0gW1tNVExDYXB0dXJlRGVzY3JpcHRvciBhbGxvY10gaW5pdF07CisgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworCisgICAg
ICAgIE5TRXJyb3IgKmVycm9yOworICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENh
cHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorICAg
ICAgICB7CisgICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBjYXB0dXJlLCBlcnJv
ciAlQCIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8gQU5HTEVfTUVUQUxf
RlJBTUVfQ0FQVFVSRV9FTkFCTEVECit9CisKK3ZvaWQgU3RhcnRGcmFtZUNhcHR1cmUoQ29udGV4
dE10bCAqY29udGV4dCkKK3sKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0LT5nZXRNZXRh
bERldmljZSgpLCBjb250ZXh0LT5jbWRRdWV1ZSgpLmdldCgpKTsKK30KKwordm9pZCBTdG9wRnJh
bWVDYXB0dXJlKCkKK3sKKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAg
ICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBNVExDYXB0dXJlTWFuYWdlciAqY2FwdHVyZU1hbmFnZXIgPSBbTVRMQ2FwdHVy
ZU1hbmFnZXIgc2hhcmVkQ2FwdHVyZU1hbmFnZXJdOworICAgIGlmIChjYXB0dXJlTWFuYWdlci5p
c0NhcHR1cmluZykKKyAgICB7CisgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdG9wQ2FwdHVyZV07
CisgICAgfQorI2VuZGlmCit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSU9TdXJm
YWNlU3VyZmFjZU10bDo6SU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZh
Y2VTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorICAgIDogU3VyZmFj
ZU10bFByb3RvY29sKHN0YXRlKQoreworICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1
cmZhY2Ugc28gaXQgZG9lc24ndCBnZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMu
CisgICAgbUlPU3VyZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9TdXJmYWNlUmVmPihidWZmZXIp
OworICAgIENGUmV0YWluKG1JT1N1cmZhY2UpOworCisgICAgLy8gRXh0cmFjdCBhdHRyaWJzIHVz
ZWZ1bCBmb3IgdGhlIGNhbGwgdG8gRUFHTFRleEltYWdlSU9TdXJmYWNlMkQKKyAgICBtV2lkdGgg
ID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfV0lEVEgpKTsKKyAgICBtSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisgICAgbVBsYW5l
ICA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdM
RSkpOworICAgIC8vIEhvcGVmdWxseSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciByb3cgaXMgYWx3
YXlzIGFuIGludGVnZXIgbnVtYmVyIG9mIHBpeGVscy4gV2UgdXNlCisgICAgLy8gZ2xSZWFkUGl4
ZWxzIHRvIGZpbGwgdGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4gb25s
eSBzdXBwb3J0IHN0cmlkZXMgdGhhdCBhcmUKKyAgICAvLyBhbiBpbnRlZ2VyIG51bWJlciBvZiBw
aXhlbHMuCisgICAgQVNTRVJUKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShtSU9TdXJm
YWNlLCBtUGxhbmUpICUKKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVu
dE9mUGxhbmUobUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorICAgICAgICAgICAwKTsKKyAgICBtUm93
U3RyaWRlSW5QaXhlbHMgPSBzdGF0aWNfY2FzdDxpbnQ+KElPU3VyZmFjZUdldEJ5dGVzUGVyUm93
T2ZQbGFuZShtSU9TdXJmYWNlLCBtUGxhbmUpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUobUlPU3Vy
ZmFjZSwgbVBsYW5lKSk7CisKKyAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJz
LmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOworICAgIEVHTEF0dHJpYiB0
eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworICAg
IG1Gb3JtYXRJbmRleCA9CisgICAgICAgIEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNf
Y2FzdDxHTGVudW0+KGludGVybmFsRm9ybWF0KSwgc3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7
CisgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKyAgICBtRm9ybWF0ICAgICAgICAgPSBk
aXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdLnBp
eGVsRm9ybWF0KTsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBkaXNwbGF5LT5nZXRQaXhlbEZvcm1h
dChrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdLmludGVybmFsUGl4ZWxGb3JtYXQpOwor
fQorCitJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCgpCit7CisgICAg
U3RvcEZyYW1lQ2FwdHVyZSgpOworICAgIGlmIChtSU9TdXJmYWNlICE9IG51bGxwdHIpCisgICAg
eworICAgICAgICBDRlJlbGVhc2UobUlPU3VyZmFjZSk7CisgICAgICAgIG1JT1N1cmZhY2UgPSBu
dWxscHRyOworICAgIH0KK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpkZXN0cm95KGNv
bnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkge30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJm
YWNlTXRsOjppbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKK3sKKyAgICBE
aXNwbGF5TXRsICpkaXNwbGF5TXRsICAgID0gbXRsOjpHZXRJbXBsKGRpc3BsYXkpOworICAgIGlk
PE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5TXRsLT5nZXRNZXRhbERldmljZSgpOwor
CisgICAgU3RhcnRGcmFtZUNhcHR1cmUobWV0YWxEZXZpY2UsIGRpc3BsYXlNdGwtPmNtZFF1ZXVl
KCkuZ2V0KCkpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworRnJhbWVidWZmZXJJ
bXBsICpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZmZXIoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUpCit7CisgICAgYXV0byBmYm8gPSBuZXcgRnJhbWVidWZmZXJNdGwoc3RhdGUsIC8qIGZs
aXBZICovIHRydWUsIC8qIGJhY2tidWZmZXIgKi8gdGhpcyk7CisgICAgcmV0dXJuIGZibzsKK30K
KworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGNvbnRleHQpOworICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworICAg
IHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNl
TXRsOjp1bk1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIFN0
b3BGcmFtZUNhcHR1cmUoKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6
RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6c3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBTdG9wRnJhbWVDYXB0dXJlKCk7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0
TXRsKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJm
YWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50
IGhlaWdodCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RWdsQmFk
QWNjZXNzKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJm
YWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1ZSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7Cit9CisKK2Vn
bDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQoreworCisgICAgYW5nbGU6OlJlc3VsdCByZXMg
PSBjcmVhdGVCYWNraW5nVGV4dHVyZShjb250ZXh0KTsKKyAgICBpZiAocmVzID09IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKQorICAgICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKworZWdsOjpFcnJvciBJ
T1N1cmZhY2VTdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIEVHTGludCBidWZmZXIpCit7CisgICAgLy8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50
YXRpb24KKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworICAgIGlmIChjb250ZXh0TXRsLT5mbHVzaChjb250ZXh0KSA9PSBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZSkKKyAgICB7CisgICAgICAgIG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisgICAgfQorICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6Omdl
dFN5bmNWYWx1ZXMoRUdMdWludDY0S0hSICp1c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMdWludDY0S0hSICptc2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCit7CisgICAg
VU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCitl
Z2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1lcmF0
b3IsIEVHTGludCAqZGVub21pbmF0b3IpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJl
dHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6
OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgVU5JTVBMRU1FTlRFRCgp
OworfQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldEZpeGVkV2lkdGgoRUdMaW50IHdp
ZHRoKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpzZXRGaXhlZEhlaWdodChFR0xpbnQgaGVpZ2h0KQoreworICAgIFVOSU1QTEVNRU5URUQo
KTsKK30KKworLy8gd2lkdGggYW5kIGhlaWdodCBjYW4gY2hhbmdlIHdpdGggY2xpZW50IHdpbmRv
dyByZXNpemluZworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFdpZHRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdMaW50PihtV2lkdGgpOworfQorCitFR0xpbnQg
SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RUdMaW50PihtSGVpZ2h0KTsKK30KKworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VN
dGw6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVHTF9G
QUxTRTsKK30KKworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFN3YXBCZWhhdmlvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEVHTF9CVUZGRVJfREVTVFJPWUVEOworfQorCithbmdsZTo6
UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisg
ICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgR0xlbnVtIGJpbmRpbmcsCisgICAg
Y29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCisgICAgR0xzaXplaSBzYW1wbGVzLAor
ICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQoreworICAgIEFO
R0xFX1RSWShlbnN1cmVUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7CisgICAgKnJ0T3V0ID0gJm1S
ZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCith
bmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9i
dGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkK
K3sKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CithbmdsZTo6UmVzdWx0
IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNr
aW5nVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBtdGw6OlRleHR1
cmVSZWYgbVRlbXBvcmFyeVN1cmZhY2VSZWY7CisgICAgQU5HTEVfVFJZKGNyZWF0ZVRleHR1cmUo
Y29udGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1UZW1wb3JhcnlTdXJm
YWNlUmVmKSk7CisgICAgLy8gQ3JlYXRlIHRleHR1cmUgdmlldyBhcm91bmQgdGhlIGJhc2UgZm9y
bWF0IG9mIHRoZSB0ZXh0dXJlLgorICAgIG1JT1N1cmZhY2VUZXh0dXJlID0KKyAgICAgICAgbVRl
bXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybSk7CisgICAgbVJlbmRlclRhcmdldC5zZXQobUlPU3VyZmFjZVRleHR1
cmUsIG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbCwgMCwgbUludGVybmFsRm9ybWF0KTsKKyAgICBt
SU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSB0cnVlOworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1
cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAo
IW1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVC
YWNraW5nVGV4dHVyZShjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworfQorCittdGw6OlRleHR1cmVSZWYgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0
VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoZW5zdXJlQ3Vy
cmVudERyYXdhYmxlT2J0YWluZWQoY29udGV4dCkgPT0gYW5nbGU6OlJlc3VsdDo6Q29udGludWUp
CisgICAgeworICAgICAgICByZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCithbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNy
ZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqdGV4dHVyZU91
dCkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKGNvbnRl
eHRNdGwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbUlPU3VyZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsK
KyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3Jh
bU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1Byb2dyYW1NdGwuaAppbmRleCAzODllY2U3NTBlN2NhMzI3NzAyZjczNTk1M2EyMjFjMjQ2
ZTlhYmZlLi5lYjliYjAxNTVjMmY5MTM1M2I4YjViYzk2Y2MyMTM2OWQ2Njc4YmQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UHJvZ3JhbU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgKQEAgLTIwLDEyICsyMCwxMyBAQAogI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIgogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCiAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKKyNk
ZWZpbmUgU0hBREVSX0VOVFJZX05BTUUgQCJtYWluMCIKIGNsYXNzIENvbnRleHRNdGw7CiAKIHN0
cnVjdCBQcm9ncmFtQXJndW1lbnRCdWZmZXJFbmNvZGVyTXRsCkBAIC0xMzQsNiArMTM1LDEwIEBA
IGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAgYm9vbCBoYXNTcGVjaWFsaXplZFNoYWRlcihn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykgb3ZlcnJp
ZGU7CiAKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clR5cGUgc2hhZGVyVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6SW5mb0xvZyAmaW5mb0xvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNsSW5mbyk7CiAgICAgLy8g
Q2FsbHMgdGhpcyBiZWZvcmUgZHJhd2luZywgY2hhbmdlZFBpcGVsaW5lRGVzYyBpcyBwYXNzZWQg
d2hlbiB2ZXJ0ZXggYXR0cmlidXRlcyBkZXNjIGFuZC9vcgogICAgIC8vIHNoYWRlciBwcm9ncmFt
IGNoYW5nZWQuCiAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKQEAgLTE0MSw3ICsxNDYsMTIgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1Ymxp
YyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVz
YyAmcGlwZWxpbmVEZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGlwZWxp
bmVEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlVGV4
dHVyZXNTZXR0aW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1
ZmZlcnNEaXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVm
ZmVyc0RpcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmb3JtRmVl
ZGJhY2tEcmF3KTsKKworICAgIHN0ZDo6c3RyaW5nIGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1YZmJNc2xTb3VyY2U7IH0KKworICAgIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZSAq
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKIAogICBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxpbnQgY29scywgaW50IHJvd3M+CkBAIC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1N
dGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVT
cGVjaWFsaXplCiAgICAgdm9pZCBzZXRVbmlmb3JtSW1wbChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgVCAqdiwgR0xlbnVtIGVudHJ5UG9pbnRUeXBlKTsKIAogICAgIGFuZ2xl
OjpSZXN1bHQgaW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENv
bnRleHQpOworICAgIGFuZ2xlOjpSZXN1bHQgcmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1v
cnkoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c2l6ZV90PiAm
cmVxdWlyZWRCdWZmZXJTaXplKTsKKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0lu
Zm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKTsKKyAgICBhbmdsZTo6UmVzdWx0IGxv
YWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFy
eUlucHV0U3RyZWFtICpzdHJlYW0pOwogCiAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRVbmlmb3Jt
cyhDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNv
ZGVyKTsKICAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCkBAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVi
bGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZQogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZibG9ja3Ms
CiAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpOwogCi0gICAgYW5nbGU6OlJlc3Vs
dCB1cGRhdGVYZmJCdWZmZXJzKENvbnRleHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpOwotCiAgICAgdm9pZCByZXNldChDb250ZXh0TXRsICpj
b250ZXh0KTsKIAorICAgIHZvaWQgc2F2ZVRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlPdXRw
dXRTdHJlYW0gKnN0cmVhbSk7CisgICAgdm9pZCBsb2FkVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJp
bmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworCisgICAgdm9pZCBzYXZlU2hhZGVySW50ZXJuYWxJ
bmZvKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSk7CisgICAgdm9pZCBsb2FkU2hhZGVy
SW50ZXJuYWxJbmZvKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKTsKKworI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgorCisgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbFNwaXJ2KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKKyNlbmRpZgor
CisgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbERpcmVjdChjb25zdCBnbDo6Q29udGV4dCAqZ2xD
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dy
YW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKKwogICAgIHZvaWQgbGlua1Jlc291cmNlcyhj
b25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzKTsKICAgICBhbmdsZTo6
UmVzdWx0IGxpbmtJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3Vy
Y2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOwog
Ci0gICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVNc2xTaGFkZXJMaWIobXRsOjpDb250ZXh0ICpjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBl
IHNoYWRlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpUcmFuc2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZE1zbEluZm8pOworICAgIGFuZ2xlOjpS
ZXN1bHQgbGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0
U3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkluZm9Mb2cgJmluZm9Mb2cpOwogCiAgICAgLy8gU3RhdGUgZm9yIHRoZSBkZWZhdWx0IHVu
aWZvcm0gYmxvY2tzLgogICAgIHN0cnVjdCBEZWZhdWx0VW5pZm9ybUJsb2NrIGZpbmFsIDogcHJp
dmF0ZSBhbmdsZTo6Tm9uQ29weWFibGUKQEAgLTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFt
TXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hl
U3BlY2lhbGl6ZQogICAgIC8vIENhY2hlZCByZWZlcmVuY2VzIG9mIGN1cnJlbnQgc2hhZGVyIHZh
cmlhbnRzLgogICAgIGdsOjpTaGFkZXJNYXA8UHJvZ3JhbVNoYWRlck9ialZhcmlhbnRNdGwgKj4g
bUN1cnJlbnRTaGFkZXJWYXJpYW50czsKIAorICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxl
SW5mb01hcCBtVmFyaWFibGVJbmZvTWFwOwogICAgIC8vIFNjcmF0Y2ggZGF0YToKICAgICAvLyBM
ZWdhbGl6ZWQgYnVmZmVycyBhbmQgdGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0g
YnVmZmVyJ3Mgb2Zmc2V0PTEgaXMgbm90IGEgdmFsaWQKICAgICAvLyBvZmZzZXQsIGl0IHdpbGwg
YmUgY29udmVydGVkIHRvIGxlZ2FsIG9mZnNldCBhbmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4g
dGhpcyBhcnJheS4KQEAgLTIzOCw3ICsyNjYsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1Ymxp
YyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUK
ICAgICAvLyBpbnRvIGFuIGFyZ3VtZW50IGJ1ZmZlci4KICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJf
dD4gbUFyZ3VtZW50QnVmZmVyUmVuZGVyU3RhZ2VVc2FnZXM7CiAKKyAgICB1aW50MzJfdCBtU2hh
ZG93Q29tcGFyZU1vZGVzW210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKwogICAgIG10
bDo6UmVuZGVyUGlwZWxpbmVDYWNoZSBtTWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlOworICAgIHN0
ZDo6c3RyaW5nIG1YZmJNc2xTb3VyY2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Qcm9ncmFtTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KaW5kZXggNTBlMmY2Mzg3ZmQ0N2U3ZmMzOWM1NzBj
NmQ3MjU2NmMzYmY1YzIzZC4uNmRhODY2NDFjYWE4NTM1NjhjMDg1YTZhMDhiYzRjZjY1ZjUwMDI3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1Byb2dyYW1NdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KQEAgLTE0LDI1ICsxNCwzMSBA
QAogI2luY2x1ZGUgPHNzdHJlYW0+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJs
ZS5oIgogI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9Q
cm9ncmFtTGlua2VkUmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmgiCi0jaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9yZW5kZXJlcl91dGlscy5oIgogCisjaWYgQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWCisjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5n
X3V0aWxzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIHJ4CiB7CiAKIG5hbWVzcGFjZQogewotCi0j
ZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisjaWYgQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWCiBjb25zdGV4cHIgY2hhciBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeFtdID0gIl90
bXAiOwotCisjZW5kaWYKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgU2NvcGVkQXV0b0Ns
ZWFyVmVjdG9yCiB7CkBAIC03OCw2ICs4NCw3IEBAIHZvaWQgSW5pdERlZmF1bHRVbmlmb3JtQmxv
Y2soY29uc3Qgc3RkOjp2ZWN0b3I8c2g6OlVuaWZvcm0+ICZ1bmlmb3JtcywKIAogICAgIHNpemVf
dCBibG9ja1NpemUgPSBibG9ja0VuY29kZXIuZ2V0Q3VycmVudE9mZnNldCgpOwogCisgICAgLy8g
VE9ETyhqbWFkaWxsKTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9yIHRo
ZSBwaXBlbGluZSBldmVuIGlmIHplcm8gc2l6ZWQuCiAgICAgaWYgKGJsb2NrU2l6ZSA9PSAwKQog
ICAgIHsKICAgICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CkBAIC0yMjgsMTEgKzIzNSwxNiBAQCBQ
cm9ncmFtTXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjpEZWZhdWx0VW5pZm9ybUJsb2NrKCkge30K
IAogUHJvZ3JhbU10bDo6RGVmYXVsdFVuaWZvcm1CbG9jazo6fkRlZmF1bHRVbmlmb3JtQmxvY2so
KSA9IGRlZmF1bHQ7CiAKLVByb2dyYW1NdGw6OlByb2dyYW1NdGwoY29uc3QgZ2w6OlByb2dyYW1T
dGF0ZSAmc3RhdGUpCi0gICAgOiBQcm9ncmFtSW1wbChzdGF0ZSksIG1NZXRhbFJlbmRlclBpcGVs
aW5lQ2FjaGUodGhpcykKLXt9CitQcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9n
cmFtU3RhdGUgJnN0YXRlKSA6IFByb2dyYW1JbXBsKHN0YXRlKSwKKyAgICBtTWV0YWxSZW5kZXJQ
aXBlbGluZUNhY2hlKHRoaXMpCit7CisgICAgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZSA9
IG5ldyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKTsKK30KIAotUHJvZ3JhbU10bDo6flByb2dy
YW1NdGwoKSB7fQorUHJvZ3JhbU10bDo6flByb2dyYW1NdGwoKQoreworICAgIGRlbGV0ZSBtTWV0
YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworfQogCiB2b2lkIFByb2dyYW1NdGw6OmRlc3Ryb3ko
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7CkBAIC0yNjIsMjUgKzI3NCw0NiBAQCB2b2lk
IFByb2dyYW1NdGw6OnJlc2V0KENvbnRleHRNdGwgKmNvbnRleHQpCiAgICAgewogICAgICAgICB2
YXIucmVzZXQoY29udGV4dCk7CiAgICAgfQotCiAgICAgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZS5jbGVhcigpOworICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUtPmNsZWFyKCk7Cit9
CisKK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZVRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlPdXRw
dXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICAvLyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9y
IGFsbCBzaGFkZXIgdHlwZXMKKyAgICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5
cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIHN0cmVhbS0+d3JpdGVT
dHJpbmcobU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3Vy
Y2UpOworICAgIH0KKyAgICBzdHJlYW0tPndyaXRlU3RyaW5nKG1YZmJNc2xTb3VyY2UpOworfQor
Cit2b2lkIFByb2dyYW1NdGw6OmxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5SW5wdXRT
dHJlYW0gKnN0cmVhbSkKK3sKKyAgICAvLyBSZWFkIGluIHNoYWRlciBzb3VyY2VzIGZvciBhbGwg
c2hhZGVyIHR5cGVzCisgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDog
Z2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5tZXRhbFNoYWRlclNvdXJjZSA9IHN0cmVhbS0+cmVhZFN0cmluZygp
OworICAgIH0KKyAgICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykK
IHsKLSAgICAvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKLSAgICBVTklNUExF
TUVOVEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4oYW5n
bGU6OlJlc3VsdDo6U3RvcCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxMaW5rRXZl
bnREb25lPihsaW5rVHJhbnNsYXRlZFNoYWRlcnMoY29udGV4dCwgc3RyZWFtLCBpbmZvTG9nKSk7
CiB9CiAKIHZvaWQgUHJvZ3JhbU10bDo6c2F2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
Z2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKQogewotICAgIC8vIE5PVEUoaHFsZSk6IHN1
cHBvcnQgYmluYXJ5IHNoYWRlcgotICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICBzYXZlVHJhbnNs
YXRlZFNoYWRlcnMoc3RyZWFtKTsKKyAgICBzYXZlU2hhZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7
CisgICAgc2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhzdHJlYW0pOwogfQogCisKIHZvaWQg
UHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFibGVIaW50KGJvb2wgcmV0cmlldmFibGUpCiB7
CiAgICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMjk0LDcgKzMyNyw3IEBAIHZvaWQgUHJvZ3JhbU10
bDo6c2V0U2VwYXJhYmxlKGJvb2wgc2VwYXJhYmxlKQogc3RkOjp1bmlxdWVfcHRyPExpbmtFdmVu
dD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5r
ZWRSZXNvdXJjZXMgJnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2csCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAv
KiBtZXJnZWRWYXJ5aW5ncyAqLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1NZXJnZWRWYXJ5aW5ncyAmbWVyZ2VkVmFyeWluZ3Mp
CiB7CiAgICAgLy8gTGluayByZXNvdXJjZXMgYmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNl
IHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSByZWFkeSBmb3IgdGhlIHNldC9iaW5kaW5nCiAgICAgLy8g
YXNzaWdubWVudCBkb25lIGluIHRoYXQgZnVuY3Rpb24uCkBAIC0zMDQsNyArMzM3LDggQEAgc3Rk
Ojp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxMaW5rRXZlbnREb25lPihs
aW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpKTsKIH0KIAotYW5nbGU6OlJlc3Vs
dCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorI2lm
IEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5r
SW1wbFNwaXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNv
dXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQogewpAQCAtMzU1LDYgKzM4OSw3NSBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6
OmxpbmtJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAKICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CiB9CisjZW5kaWYKKworYW5nbGU6OlJlc3VsdCBQcm9ncmFt
TXRsOjpsaW5rSW1wbERpcmVjdChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
SW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGdsQ29udGV4dCk7CisKKyAgICByZXNldChjb250ZXh0TXRsKTsKKyAgICBBTkdMRV9U
UlkoaW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGdsQ29udGV4dCkpOworICAgIFNoYWRlck1hcElu
dGVyZmFjZVZhcmlhYmxlSW5mb01hcCB2YXJpYWJsZUluZm9NYXA7CisKKyAgICBnbDo6U2hhZGVy
TWFwPHN0ZDo6c3RyaW5nPiBzaGFkZXJTb3VyY2VzOworICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpz
dHJpbmc+IHRyYW5zbGF0ZWRNc2xTaGFkZXJzOworICAgIG10bDo6TVNMR2V0U2hhZGVyU291cmNl
KG1TdGF0ZSwgcmVzb3VyY2VzLCAmc2hhZGVyU291cmNlcywgJnZhcmlhYmxlSW5mb01hcCk7CisK
KyAgICBBTkdMRV9UUlkobXRsOjpHbHNsYW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250
ZXh0TXRsLT5nZXRDYXBzKCksIHNoYWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluZm9NYXAsICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkTXNsU2hhZGVycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudCgpKSk7CisKKworICAgIGZvciAoZ2w6OlNoYWRl
clR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgeworICAg
ICAgICAvLyBDcmVhdGUgYWN0dWFsIE1ldGFsIHNoYWRlcgorICAgICAgICBBTkdMRV9UUlkoCisg
ICAgICAgICAgICBjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgc2hhZGVyVHlwZSwgaW5m
b0xvZywgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdKSk7CisgICAgfQorICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBQcm9n
cmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNl
cyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5m
b0xvZyAmaW5mb0xvZykKK3sKKyAgICAvLyBUT0RPOiBXZSBuZWVkIHNvbWUgd2F5IG9mIHRvZ2ds
aW5nIHRoaXMuCisjaWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgICAgaWYgKHNoOjpyZWFk
Qm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisgICAgeworICAgICAgIHJl
dHVybiBsaW5rSW1wbFNwaXJ2KGdsQ29udGV4dCwgcmVzb3VyY2VzLCBpbmZvTG9nKTsKKyAgICB9
CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgIHJldHVybiBsaW5rSW1wbERpcmVjdChn
bENvbnRleHQsIHJlc291cmNlcywgaW5mb0xvZyk7CisgICAgfQorfQorCisKK2FuZ2xlOjpSZXN1
bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpn
bENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQoreworICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICAvLyBO
T1RFKGhxbGUpOiBObyB0cmFuc2Zvcm0gZmVlZGJhY2tzIGZvciBub3csIHNpbmNlIHdlIG9ubHkg
c3VwcG9ydCBFUyAyLjAgYXRtCisKKyAgICByZXNldChjb250ZXh0TXRsKTsKKworICAgIGxvYWRU
cmFuc2xhdGVkU2hhZGVycyhzdHJlYW0pOworICAgIGxvYWRTaGFkZXJJbnRlcm5hbEluZm8oc3Ry
ZWFtKTsKKyAgICBBTkdMRV9UUlkobG9hZERlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhnbENvbnRl
eHQsIHN0cmVhbSkpOworCisgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNoYWRlckxpYihjb250ZXh0
TXRsLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBpbmZvTG9nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2dsOjpTaGFkZXJUeXBlOjpWZXJ0
ZXhdKSk7CisgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNoYWRlckxpYihjb250ZXh0TXRsLCBnbDo6
U2hhZGVyVHlwZTo6RnJhZ21lbnQsIGluZm9Mb2csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50XSkp
OworCisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiB2b2lkIFByb2dy
YW1NdGw6OmxpbmtSZXNvdXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJl
c291cmNlcykKIHsKQEAgLTM2Niw4ICs0NjksNiBAQCB2b2lkIFByb2dyYW1NdGw6OmxpbmtSZXNv
dXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKIAogYW5n
bGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVsdFVuaWZvcm1CbG9ja3MoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCkKIHsKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGdsQ29udGV4dCk7Ci0KICAgICAvLyBQcm9jZXNzIHZlcnRleCBhbmQgZnJhZ21l
bnQgdW5pZm9ybXMgaW50byBzdGQxNDAgcGFja2luZy4KICAgICBnbDo6U2hhZGVyTWFwPHNoOjpC
bG9ja0xheW91dE1hcD4gbGF5b3V0TWFwOwogICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1
aXJlZEJ1ZmZlclNpemU7CkBAIC00MjYsNiArNTI3LDE1IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1C
bG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworfQorCithbmdsZTo6
UmVzdWx0IFByb2dyYW1NdGw6OnJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KAorICAg
IGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxz
aXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNpemUpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworCiAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBz
aGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKICAgICB7CiAgICAgICAgIGlm
IChyZXF1aXJlZEJ1ZmZlclNpemVbc2hhZGVyVHlwZV0gPiAwKQpAQCAtNDUzLDYgKzU2Myw5IEBA
IGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIobXRsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gKnNoYWRlck91dCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KFlF
UyA9PSAxLCAiWUVTIHNob3VsZCBoYXZlIHZhbHVlIG9mIDEiKTsKKyAgICAjaWYgQU5HTEVfRU5B
QkxFX01FVEFMX1NQSVJWCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVNwaXJ2ID0gc2g6
OnJlYWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsKKyAgICAjZW5kaWYK
IAogICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvID0gJm1N
c2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOwogICAgIFByb2dyYW1TaGFkZXJPYmpW
YXJpYW50TXRsICpzaGFkZXJWYXJpYW50OwpAQCAtNDkwLDkgKzYwMywyMiBAQCBhbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVyKG10bDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgIEJPT0wgZW11bGF0ZURpc2NhcmQgPSByZW5kZXJQaXBlbGluZURlc2Mu
cmFzdGVyaXphdGlvblR5cGUgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
dGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOwogCi0gICAg
ICAgICAgICBOU1N0cmluZyAqZGlzY2FyZEVuYWJsZWRTdHIgPQotICAgICAgICAgICAgICAgIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWRDb25zdE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgTlNTdHJp
bmcgKmRpc2NhcmRFbmFibGVkU3RyOworI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAg
ICAgICAgICAgaWYgKHVzZVNwaXJ2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRp
c2NhcmRFbmFibGVkU3RyID0gW05TU3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aDo6VHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1Nw
ZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9CisgICAg
ICAgICAgICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpzaDo6VHJhbnNs
YXRvck1ldGFsRGlyZWN0OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUo
KV07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmNDb25zdGFudHMgPSBbW01UTEZ1
bmN0aW9uQ29uc3RhbnRWYWx1ZXMgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW2Z1bmNDb25z
dGFudHMgc2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKQEAgLTUxNSw5ICs2NDEsMjIg
QEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNv
bnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICAgICAg
ewotICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQotICAgICAg
ICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtD
b3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4XTsKKyAgICAgICAgICAg
IE5TU3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyOworI2lmIEFOR0xFX0VOQUJMRV9NRVRB
TF9TUElSVgorICAgICAgICAgICAgaWYgKHVzZVNwaXJ2KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPSBbTlNTdHJpbmcKKyAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3Bp
cnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3ZlcmFnZU1hc2tFbmFi
bGVkU3RyID0KKyAgICAgICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOnNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENvdmVyYWdlTWFza0VuYWJsZWRDb25z
dE5hbWUoKV07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmNDb25zdGFudHMgPSBb
W01UTEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZXMgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW2Z1
bmNDb25zdGFudHMgc2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZUNvdmVyYWdlTWFzawpAQCAtNTU1
LDYgKzY5NCw3IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFk
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQorCiBib29sIFByb2dyYW1NdGw6Omhhc1NwZWNpYWxpemVkU2hhZGVyKGdsOjpT
aGFkZXJUeXBlIHNoYWRlclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURlc2MpCiB7
CkBAIC01OTIsNiArNzMyLDkzIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Y3JlYXRlTXNs
U2hhZGVyTGliKG10bDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKK3ZvaWQgUHJvZ3Jh
bU10bDo6c2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFt
ICpzdHJlYW0pCit7CisgICAgLy8gU2VyaWFsaXplcyB0aGUgdW5pZm9ybUxheW91dCBkYXRhIG9m
IG1EZWZhdWx0VW5pZm9ybUJsb2NrcworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHVu
aWZvcm1Db3VudCA9IG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5
b3V0LnNpemUoKTsKKyAgICAgICAgc3RyZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3Vu
dCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IHVuaWZvcm1Db3VudDsgKyt1bmlmb3JtSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNoOjpCbG9ja01lbWJlckluZm8gJmJsb2NrSW5mbyA9CisgICAgICAgICAgICAgICAgbURl
ZmF1bHRVbmlmb3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXRbdW5pZm9ybUluZGV4
XTsKKyAgICAgICAgICAgIGdsOjpXcml0ZUJsb2NrTWVtYmVySW5mbyhzdHJlYW0sIGJsb2NrSW5m
byk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZv
cm0gYmxvY2sgbWVtb3J5IHNpemVzCisgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
IDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBzdHJlYW0tPndyaXRlSW50
KG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkpOwor
ICAgIH0KK30KKworYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsb2FkRGVmYXVsdFVuaWZvcm1C
bG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3Ry
ZWFtICpzdHJlYW0pCit7CisgICAgZ2w6OlNoYWRlck1hcDxzaXplX3Q+IHJlcXVpcmVkQnVmZmVy
U2l6ZTsKKyAgICByZXF1aXJlZEJ1ZmZlclNpemUuZmlsbCgwKTsKKworICAgIC8vIERlc2VyaWFs
aXplcyB0aGUgdW5pZm9ybUxheW91dCBkYXRhIG9mIG1EZWZhdWx0VW5pZm9ybUJsb2NrcworICAg
IGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQor
ICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHVuaWZvcm1Db3VudCA9IHN0cmVhbS0+cmVhZElu
dDxzaXplX3Q+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1Db3VudDsgKyt1bmlmb3JtSW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNoOjpCbG9ja01lbWJlckluZm8gYmxvY2tJbmZvOworICAgICAgICAgICAg
Z2w6OkxvYWRCbG9ja01lbWJlckluZm8oc3RyZWFtLCAmYmxvY2tJbmZvKTsKKyAgICAgICAgICAg
IG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0LnB1c2hfYmFj
ayhibG9ja0luZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVzZXJpYWxpemVzIHJl
cXVpcmVkIHVuaWZvcm0gYmxvY2sgbWVtb3J5IHNpemVzCisgICAgZm9yIChnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICByZXF1
aXJlZEJ1ZmZlclNpemVbc2hhZGVyVHlwZV0gPSBzdHJlYW0tPnJlYWRJbnQ8c2l6ZV90PigpOwor
ICAgIH0KKworICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeShnbENv
bnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7Cit9CisKK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZVNo
YWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAg
Zm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisg
ICAgeworICAgICAgICBzdHJlYW0tPndyaXRlSW50PGludD4obU1zbFNoYWRlclRyYW5zbGF0ZUlu
Zm9bc2hhZGVyVHlwZV0uaGFzVUJPQXJndW1lbnRCdWZmZXIpOworICAgICAgICBmb3IgKGNvbnN0
IG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgorICAgICAgICAgICAgIG1Nc2xTaGFkZXJU
cmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFNhbXBsZXJCaW5kaW5ncykKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJl
QmluZGluZyk7CisgICAgICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90PihiaW5kaW5n
LnNhbXBsZXJCaW5kaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDMyX3QgdWJv
QmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVCT0Jp
bmRpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90
Pih1Ym9CaW5kaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBQcm9ncmFtTXRsOjps
b2FkU2hhZGVySW50ZXJuYWxJbmZvKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQorewor
ICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygp
KQorICAgIHsKKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFz
VUJPQXJndW1lbnRCdWZmZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisgICAgICAg
IGZvciAobXRsOjpTYW1wbGVyQmluZGluZyAmYmluZGluZyA6CisgICAgICAgICAgICAgbU1zbFNo
YWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uYWN0dWFsU2FtcGxlckJpbmRpbmdzKQorICAg
ICAgICB7CisgICAgICAgICAgICBiaW5kaW5nLnRleHR1cmVCaW5kaW5nID0gc3RyZWFtLT5yZWFk
SW50PHVpbnQzMl90PigpOworICAgICAgICAgICAgYmluZGluZy5zYW1wbGVyQmluZGluZyA9IHN0
cmVhbS0+cmVhZEludDx1aW50MzJfdD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWlu
dDMyX3QgJnVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5h
Y3R1YWxVQk9CaW5kaW5ncykKKyAgICAgICAgeworICAgICAgICAgICAgdWJvQmluZGluZyA9IHN0
cmVhbS0+cmVhZEludDx1aW50MzJfdD4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogR0xib29s
ZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZjYXBzLCBnbDo6SW5mb0xv
ZyAqaW5mb0xvZykKIHsKICAgICAvLyBOby1vcC4gVGhlIHNwZWMgaXMgdmVyeSB2YWd1ZSBhYm91
dCB0aGUgYmVoYXZpb3Igb2YgdmFsaWRhdGlvbi4KQEAgLTg3NywxNCArMTEwNCwyNSBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5k
ZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNr
RHJhdykKIHsKICAgICBDb250ZXh0TXRsICpjb250ZXh0ID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4
dCk7CiAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCiAgICAgewogICAgICAgICAvLyBSZW5k
ZXIgcGlwZWxpbmUgc3RhdGUgbmVlZHMgdG8gYmUgY2hhbmdlZAotICAgICAgICBpZDxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KLSAgICAgICAgICAgIG1NZXRhbFJlbmRl
clBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGluZURl
c2MpOworICAgICAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0g
bmlsOworICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tEcmF3KQorICAgICAgICB7CisgICAg
ICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgPSBtdGw6OlJl
bmRlclBpcGVsaW5lRGVzYyhwaXBlbGluZURlc2MpOworICAgICAgICAgICAgeGZiUGlwZWxpbmVE
ZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRp
b246OkRpc2FibGVkOworICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9CisgICAgICAgICAgICAg
ICAgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZS0+Z2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShj
b250ZXh0LCB4ZmJQaXBlbGluZURlc2MpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9IG1NZXRhbFJlbmRlclBpcGVsaW5lQ2Fj
aGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGluZURlc2MpOworICAgICAg
ICB9CiAgICAgICAgIGlmICghcGlwZWxpbmVTdGF0ZSkKICAgICAgICAgewogICAgICAgICAgICAg
Ly8gRXJyb3IgYWxyZWFkeSBsb2dnZWQgaW5zaWRlIGdldFJlbmRlclBpcGVsaW5lU3RhdGUoKQpA
QCAtOTEzLDExICsxMTUxLDYgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKHVwZGF0ZVVu
aWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykpOwogICAgIH0K
IAotICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgQU5HTEVfVFJZ
KHVwZGF0ZVhmYkJ1ZmZlcnMoY29udGV4dCwgY21kRW5jb2RlciwgcGlwZWxpbmVEZXNjKSk7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC05NDgs
MTAgKzExODEsMTIgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlVXBkYXRlKQog
ewotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
LSAgICBjb25zdCBhdXRvICZnbFN0YXRlICAgID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpOworICAg
IENvbnRleHRNdGwgKmNvbnRleHRNdGwgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbChn
bENvbnRleHQpOworICAgIGNvbnN0IGF1dG8gJmdsU3RhdGUgICAgICAgICAgICAgICAgICAgICA9
IGdsQ29udGV4dC0+Z2V0U3RhdGUoKTsKKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUg
KmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUo
KTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZjb21wbGV0ZVRleHR1cmVz
ID0gZ2xTdGF0ZS5nZXRBY3RpdmVUZXh0dXJlc0NhY2hlKCk7CisgICAgY29uc3QgZ2w6OkFjdGl2
ZVRleHR1cmVUeXBlQXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVT
YW1wbGVyVHlwZXMoKTsKIAogICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCiAgICAgewpAQCAtOTY0LDYgKzExOTksOCBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpn
bENvbnRleHQsCiAgICAgICAgIGNvbnN0IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRl
ckluZm8gPQogICAgICAgICAgICAgKm1DdXJyZW50U2hhZGVyVmFyaWFudHNbc2hhZGVyVHlwZV0t
PnRyYW5zbGF0ZWRTcmNJbmZvOwogCisgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFs
c2U7CisKICAgICAgICAgZm9yICh1aW50MzJfdCB0ZXh0dXJlSW5kZXggPSAwOyB0ZXh0dXJlSW5k
ZXggPCBtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCkuc2l6ZSgpOwogICAgICAgICAgICAgICsr
dGV4dHVyZUluZGV4KQogICAgICAgICB7CkBAIC05NzUsMTYgKzEyMTIsMTYgQEAgYW5nbGU6OlJl
c3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBnbDo6VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBzYW1wbGVyQmluZGluZy50ZXh0dXJl
VHlwZTsKIAogICAgICAgICAgICAgZm9yICh1aW50MzJfdCBhcnJheUVsZW1lbnQgPSAwOyBhcnJh
eUVsZW1lbnQgPCBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0cy5zaXplKCk7CiAgICAg
ICAgICAgICAgICAgICsrYXJyYXlFbGVtZW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEdMdWludCB0ZXh0dXJlVW5pdCAgID0gc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5p
dHNbYXJyYXlFbGVtZW50XTsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9
IGNvbXBsZXRlVGV4dHVyZXNbdGV4dHVyZVVuaXRdOwotICAgICAgICAgICAgICAgIGdsOjpTYW1w
bGVyICpzYW1wbGVyID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVV
bml0KTsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCB0ZXh0dXJlU2xvdCA9IG1zbEJpbmRpbmcu
dGV4dHVyZUJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgdWludDMyX3Qg
c2FtcGxlclNsb3QgPSBtc2xCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICsgYXJyYXlFbGVtZW50Owor
ICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlVW5pdCAgICAgICAgICA9IHNhbXBsZXJCaW5k
aW5nLmJvdW5kVGV4dHVyZVVuaXRzW2FycmF5RWxlbWVudF07CisgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUgKnRleHR1cmUgICAgICAgID0gY29tcGxldGVUZXh0dXJlc1t0ZXh0dXJlVW5pdF07
CisgICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNhbXBsZXIgICAgICAgID0gY29udGV4dE10
bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVVbml0KTsKKyAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlVHlwZXNbdGV4dHVyZVVuaXRdOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHRleHR1cmVTbG90ICAgICAgICA9IG1zbEJpbmRpbmcu
dGV4dHVyZUJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2FtcGxlclNsb3QgICAgICAgID0gbXNsQmluZGluZy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxl
bWVudDsKICAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICBBTkdMRV9UUlkoY29udGV4dE10bC0+Z2V0SW5jb21wbGV0ZVRl
eHR1cmUoZ2xDb250ZXh0LCB0ZXh0dXJlVHlwZSwgJnRleHR1cmUpKTsKQEAgLTk5NCwyNSArMTIz
MSwyMiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGds
OjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgVGV4dHVyZU10bCAqdGV4dHVy
ZU10bCA9IG10bDo6R2V0SW1wbCh0ZXh0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoc2FtcGxl
ckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9ybWF0OjpTaGFkb3cpCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vYW5nbGVidWcuY29tLzUxMDcK
LSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwgZG9lc24ndCBzdXBwb3J0IGEgY29tcGFyZSBt
b2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNhbXBsZXIgY291bGQKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuIGEgc2FtZSB2YWx1ZSBhcyBpZiBzYW1wbGluZyBmcm9tIGEgbm9ybWFs
IHNhbXBsZXIuCi0gICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnRpbmcgdGhpcyBjb3VsZCBy
ZXF1aXJlIGhhY2tpbmcgc3BpcnYtY3Jvc3MgdG8gY2hhbmdlIHNhbXBsZV9jb21wYXJlKCkKLSAg
ICAgICAgICAgICAgICAgICAgLy8gdG8gc2FtcGxlKCkuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChBTkdMRV9VTkxJS0VMWShzYW1wbGVyU3RhdGUtPmdldENvbXBhcmVNb2RlKCkgIT0gR0xfQ09N
UEFSRV9SRUZfVE9fVEVYVFVSRSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEVSUigpIDw8ICJHTF9URVhUVVJFX0NPTVBBUkVfTU9ERSAhPSBHTF9DT01Q
QVJFX1JFRl9UT19URVhUVVJFIGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFOR0xFX01UTF9UUlko
Y29udGV4dE10bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl
clN0YXRlLT5nZXRDb21wYXJlTW9kZSgpID09IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhc0RlcHRoU2FtcGxl
ciAgICAgICAgICAgICAgICAgID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNoYWRvd0Nv
bXBhcmVNb2Rlc1t0ZXh0dXJlU2xvdF0gPSBtdGw6Ok1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVN
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9k
ZSgpLCBzYW1wbGVyU3RhdGUtPmdldENvbXBhcmVGdW5jKCkpOwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIEFOR0xFX1RSWSh0ZXh0dXJlTXRsLT5iaW5kVG9TaGFkZXIoZ2xD
b250ZXh0LCBjbWRFbmNvZGVyLCBzaGFkZXJUeXBlLCBzYW1wbGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVNsb3QsIHNhbXBsZXJT
bG90KSk7CiAgICAgICAgICAgICB9ICAvLyBmb3IgYXJyYXkgZWxlbWVudHMKICAgICAgICAgfSAg
ICAgIC8vIGZvciBzYW1wbGVyIGJpbmRpbmdzCi0gICAgfSAgICAgICAgICAvLyBmb3Igc2hhZGVy
IHR5cGVzCisKKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgY21kRW5jb2Rlci0+c2V0RGF0YShzaGFkZXJUeXBlLCBtU2hhZG93Q29tcGFyZU1vZGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKyAgICAgICAgfQorICAgIH0gIC8vIGZvciBzaGFkZXIg
dHlwZXMKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTEwNDAs
MTEgKzEyNzQsNiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZm
ZXJzKENvbnRleHRNdGwgKmNvbnRleHQsCiAKICAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRl
clR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQogICAgIHsKLSAgICAgICAgaWYgKCFt
Q3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChtQ3VycmVudFNoYWRlclZhcmlh
bnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJndW1lbnRCdWZmZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFOR0xFX1RSWSgKQEAgLTExNDksOCArMTM3OCw2IEBA
IGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6YmluZFVuaWZvcm1CdWZmZXJzVG9EaXNjcmV0ZVNs
b3RzKAogICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7CiAgICAgY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKLSAgICBjb25zdCBtdGw6OlRyYW5z
bGF0ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KLSAgICAgICAgKm1DdXJyZW50U2hhZGVyVmFy
aWFudHNbc2hhZGVyVHlwZV0tPnRyYW5zbGF0ZWRTcmNJbmZvOwogICAgIGZvciAodWludDMyX3Qg
YnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySW5k
ZXgpCiAgICAgewogICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmJsb2NrID0gYmxv
Y2tzW2J1ZmZlckluZGV4XTsKQEAgLTExNjIsNyArMTM4OSw4IEBAIGFuZ2xlOjpSZXN1bHQgUHJv
Z3JhbU10bDo6YmluZFVuaWZvcm1CdWZmZXJzVG9EaXNjcmV0ZVNsb3RzKAogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZmZXJJZHgg
PSBzaGFkZXJJbmZvLmFjdHVhbFVCT0JpbmRpbmdzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgdWlu
dDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKyAgICAgICAgICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJ
bmZvW3NoYWRlclR5cGVdLmFjdHVhbFVCT0JpbmRpbmdzW2J1ZmZlckluZGV4XTsKIAogICAgICAg
ICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCiAgICAgICAg
IHsKQEAgLTExOTksMTIgKzE0MjcsMTIgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjplbmNv
ZGVVbmlmb3JtQnVmZmVyc0luZm9Bcmd1bWVudEJ1ZmZlcigKICAgICBbYnVmZmVyRW5jb2Rlci5t
ZXRhbEFyZ0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRCdWZmZXItPmdl
dCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0OmFyZ3VtZW50QnVmZmVyT2Zmc2V0XTsKIAotICAgIHN0YXRpY19hc3NlcnQoTVRMUmVu
ZGVyU3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRl
clR5cGU6OlZlcnRleCkpLAotICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGdsIFNoYWRlclR5
cGUgZW51bSBhbmQgTWV0YWwgZW51bSB0byByZWxhdGl2ZSB0byBlYWNoIG90aGVyIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgKLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFnbWVudCA9PSAoMHgxIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQpKSwKLSAgICAg
ICAgIkV4cGVjdGVkIGdsIFNoYWRlclR5cGUgZW51bSBhbmQgTWV0YWwgZW51bSB0byByZWxhdGl2
ZSB0byBlYWNoIG90aGVyIik7Ci0gICAgYXV0byBtdGxSZW5kZXJTdGFnZSA9IHN0YXRpY19jYXN0
PE1UTFJlbmRlclN0YWdlcz4oMHgxIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihzaGFkZXJUeXBl
KSk7CisgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVuZGVyU3RhZ2VzPiBrU2hhZGVy
U3RhZ2VNYXAgPSB7CisgICAgICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBtdGw6OmtSZW5k
ZXJTdGFnZVZlcnRleH0sCisgICAgICAgIHtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsIG10bDo6
a1JlbmRlclN0YWdlRnJhZ21lbnR9LAorICAgIH07CisKKyAgICBhdXRvIG10bFJlbmRlclN0YWdl
ID0ga1NoYWRlclN0YWdlTWFwW3NoYWRlclR5cGVdOwogCiAgICAgZm9yICh1aW50MzJfdCBidWZm
ZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRleCkK
ICAgICB7CkBAIC0xMjM5LDQ5ICsxNDY3LDQgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpl
bmNvZGVVbmlmb3JtQnVmZmVyc0luZm9Bcmd1bWVudEJ1ZmZlcigKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRl
WGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKLXsKLSAgICBjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUgICAgICAgICAgICAgICAgID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKLSAgICBnbDo6
VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gZ2xTdGF0ZS5nZXRDdXJyZW50
VHJhbnNmb3JtRmVlZGJhY2soKTsKLQotICAgIGlmIChwaXBlbGluZURlc2MucmFzdGVyaXphdGlv
bkVuYWJsZWQoKSB8fCAhZ2xTdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSB8fAotICAgICAgICBBTkdMRV9VTkxJS0VMWSghdHJhbnNmb3JtRmVlZGJhY2spKQotICAgIHsK
LSAgICAgICAgLy8gWEZCIG91dHB1dCBjYW4gb25seSBiZSB1c2VkIHdpdGggcmFzdGVyaXphdGlv
biBkaXNhYmxlZC4KLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwotICAg
IH0KLQotICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGdsU3RhdGUuZ2V0UHJvZ3JhbUV4ZWN1
dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudCgpOwotCi0gICAgQVNTRVJU
KHhmYkJ1ZmZlckNvdW50ID4gMCk7Ci0gICAgQVNTRVJUKG1TdGF0ZS5nZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSAhPSBHTF9JTlRFUkxFQVZFRF9BVFRSSUJTIHx8Ci0gICAgICAgICAg
IHhmYkJ1ZmZlckNvdW50ID09IDEpOwotCi0gICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAw
OyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQotICAgIHsKLSAg
ICAgICAgdWludDMyX3QgYWN0dWFsQnVmZmVySWR4ID0gbU1zbFhmYk9ubHlWZXJ0ZXhTaGFkZXJJ
bmZvLmFjdHVhbFhGQkJpbmRpbmdzW2J1ZmZlckluZGV4XTsKLQotICAgICAgICBpZiAoYWN0dWFs
QnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRp
bmdQb2ludGVyPGdsOjpCdWZmZXI+ICZidWZmZXJCaW5kaW5nID0KLSAgICAgICAgICAgIHRyYW5z
Zm9ybUZlZWRiYWNrLT5nZXRJbmRleGVkQnVmZmVyKGJ1ZmZlckluZGV4KTsKLSAgICAgICAgZ2w6
OkJ1ZmZlciAqYnVmZmVyID0gYnVmZmVyQmluZGluZy5nZXQoKTsKLSAgICAgICAgQVNTRVJUKChi
dWZmZXJCaW5kaW5nLmdldE9mZnNldCgpICUgNCkgPT0gMCk7Ci0gICAgICAgIEFTU0VSVChidWZm
ZXIgIT0gbnVsbHB0cik7Ci0KLSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6Okdl
dEltcGwoYnVmZmVyKTsKLQotICAgICAgICAvLyBVc2Ugb2Zmc2V0PTAsIGFjdHVhbCBvZmZzZXQg
d2lsbCBiZSBzZXQgaW4gRHJpdmVyIFVuaWZvcm0gaW5zaWRlIENvbnRleHRNdGwuCi0gICAgICAg
IGNtZEVuY29kZXItPnNldEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1
ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhY3R1YWxCdWZmZXJJZHgpOwotICAgIH0KLQotICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKLX0KLQogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVl
cnlNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9RdWVyeU10bC5oCmluZGV4IDIxODU0ZjY4OGY5YmIwODg0MThmOGU2N2NkN2FkM2U5YWIz
Y2M5YjEuLjI3OGYxZGYxNmJlZjA0MWQ4NmUxNTY1ZmM0OThkZjk4NDYzMjFhMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9R
dWVyeU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9RdWVyeU10bC5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtOTgsOCArOTgsNyBAQCBjbGFzcyBRdWVyeU10bCA6IHB1YmxpYyBRdWVyeUltcGwK
ICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZ2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1WaXNpYmlsaXR5UmVzdWx0QnVmZmVyOyB9CiAgICAgLy8gUmVzZXQgdGhl
IG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3RvcmVkIGluIGJ1ZmZlciB0byB6ZXJvCiAgICAgdm9p
ZCByZXNldFZpc2liaWxpdHlSZXN1bHQoQ29udGV4dE10bCAqY29udGV4dE10bCk7Ci0KLSAgICB2
b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwor
ICAgIHZvaWQgb25UcmFuc2Zvcm1GZWVkYmFja0VuZChHTHNpemVpcHRyIHByaW1pdGl2ZXNEcmF3
bik7CiAKICAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTEwOCw4ICsx
MDcsMTMgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJsaWMgUXVlcnlJbXBsCiAgICAgLy8gTGlzdCBv
ZiBvZmZzZXRzIGluIHRoZSByZW5kZXIgcGFzcydzIG9jY2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZl
ciBhbGxvY2F0ZWQgZm9yIHRoaXMgcXVlcnkKICAgICBWaXNpYmlsaXR5QnVmZmVyT2Zmc2V0c010
bCBtVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHM7CiAgICAgbXRsOjpCdWZmZXJSZWYgbVZpc2liaWxp
dHlSZXN1bHRCdWZmZXI7CisgICAgLy8gVXNlZCB3aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0
aXZlc1dyaXR0ZW4gd2hlbiB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMgZW11bGF0ZWQuCisgICAgc2l6
ZV90IG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bjsKIAotICAgIHNpemVfdCBtVHJh
bnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gPSAwOworICAgIC8vIFRPRE8oamN1bm5pbmdo
YW0pOiBjdXJyZW50bHkgb25seSB1c2VkIGZvciBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVz
RHJhd24KKyAgICAvLyBidXQgY2FuIGJlIHVzZWQgZm9yIHJlc3Qgb2YgcmVzdWx0cworICAgIHVp
bnQ2NF90IG1DYWNoZWRSZXN1bHQ7CisgICAgYm9vbCBtQ2FjaGVkUmVzdWx0VmFsaWQ7CiB9Owog
CiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbQppbmRleCBm
NWU5YmYzYjgyN2Q4ZDMwZjFiMzY3MTRkMDY1MDIzZTE0MTVhMDkxLi5hYjBlN2JmMDgwMTE1MmMw
N2FiYjAyMDAzM2I4Y2Y1NTVjNzUzYzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1t
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTMsNyArMTMsMTIg
QEAKIAogbmFtZXNwYWNlIHJ4CiB7Ci1RdWVyeU10bDo6UXVlcnlNdGwoZ2w6OlF1ZXJ5VHlwZSB0
eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKSB7fQorUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpRdWVyeVR5
cGUgdHlwZSkKKyAgICA6IFF1ZXJ5SW1wbCh0eXBlKSwKKyAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNEcmF3bigwKSwKKyAgICAgIG1DYWNoZWRSZXN1bHQoMCksCisgICAgICBtQ2Fj
aGVkUmVzdWx0VmFsaWQoZmFsc2UpCit7fQogCiBRdWVyeU10bDo6flF1ZXJ5TXRsKCkge30KIApA
QCAtMjIsMTMgKzI3LDE0IEBAIHZvaWQgUXVlcnlNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCkKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGNvbnRleHQpOwogICAgIGlmICghZ2V0QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0
eSgpKQogICAgIHsKLSAgICAgICAgY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeURlc3Ryb3ko
Y29udGV4dCwgdGhpcyk7CisgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0
cm95ZWQoY29udGV4dCwgdGhpcyk7CiAgICAgfQogICAgIG1WaXNpYmlsaXR5UmVzdWx0QnVmZmVy
ID0gbnVsbHB0cjsKIH0KIAogYW5nbGU6OlJlc3VsdCBRdWVyeU10bDo6YmVnaW4oY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCiB7CisgICAgbUNhY2hlZFJlc3VsdFZhbGlkICAgICA9IGZhbHNl
OwogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CiAg
ICAgc3dpdGNoIChnZXRUeXBlKCkpCiAgICAgewpAQCAtNDcsNyArNTMsNyBAQCBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEFOR0xFX1RSWShjb250ZXh0
TXRsLT5vbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29udGV4dCwgdGhpcykpOworICAgICAgICAgICAg
QU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlz
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFu
c2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0dGVuOgogICAgICAgICAgICAgbVRyYW5zZm9ybUZl
ZWRiYWNrUHJpbWl0aXZlc0RyYXduID0gMDsKQEAgLTY2LDEzICs3MiwyMyBAQCBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjplbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAgICAgewogICAg
ICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OkFueVNhbXBsZXM6CiAgICAgICAgIGNhc2UgZ2w6OlF1
ZXJ5VHlwZTo6QW55U2FtcGxlc0NvbnNlcnZhdGl2ZToKLSAgICAgICAgICAgIGNvbnRleHRNdGwt
Pm9uT2NjbHVzaW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisgICAgICAgICAgICBjb250ZXh0
TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgdGhpcyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1p
dGl2ZXNXcml0dGVuOgorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVkUmVzdWx0ID0gbVRy
YW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduOworCiAgICAgICAgICAgICAvLyBUaGVyZSBj
b3VsZCBiZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaW4gcHJvZ3Jlc3MsIHNvIGFkZCB0aGUgcHJpbWl0
aXZlcyBkcmF3biBzbyBmYXIKICAgICAgICAgICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNm
b3JtIGZlZWRiYWNrIG9iamVjdC4KLSAgICAgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQo
Y29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dFN0YXRlKCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtRmVlZGJhY2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNhY2hl
ZFJlc3VsdCArPSB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtQ2FjaGVkUmVzdWx0VmFsaWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAsNyArMTI2LDcgQEAgYW5nbGU6
OlJlc3VsdCBRdWVyeU10bDo6d2FpdEFuZEdldFJlc3VsdChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgVCAqcGFyYW1zKQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW46Ci0gICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8VD4obVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0
aXZlc0RyYXduKTsKKyAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxUPihtQ2FjaGVk
UmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMTM3LDcgKzE1Myw3IEBAIGFuZ2xlOjpSZXN1bHQgUXVl
cnlNdGw6OmlzUmVzdWx0QXZhaWxhYmxlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBib29s
ICphdmFpCiAgICAgICAgICAgICAqYXZhaWxhYmxlID0gIW1WaXNpYmlsaXR5UmVzdWx0QnVmZmVy
LT5pc0JlaW5nVXNlZEJ5R1BVKGNvbnRleHRNdGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRl
bjoKLSAgICAgICAgICAgICphdmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgKmF2YWlsYWJs
ZSA9IG1DYWNoZWRSZXN1bHRWYWxpZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMTc1LDEzICsxOTEsOSBAQCB2
b2lkIFF1ZXJ5TXRsOjpyZXNldFZpc2liaWxpdHlSZXN1bHQoQ29udGV4dE10bCAqY29udGV4dE10
bCkKICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQoY29udGV4dE10bCwg
YmxpdEVuY29kZXIpOwogfQogCi12b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5k
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQordm9pZCBRdWVyeU10bDo6b25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChHTHNpemVpcHRyIHByaW1pdGl2ZXNEcmF3bikKIHsKLSAgICBnbDo6VHJhbnNm
b3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0U3RhdGUoKS5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKLSAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2spCi0g
ICAgewotICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0gdHJhbnNm
b3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOwotICAgIH0KKyAgICBtVHJhbnNmb3Jt
RmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0gcHJpbWl0aXZlc0RyYXduOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKaW5kZXggNmZkN2IxYjk5NGI4OTY3
ZmJlY2NjYTg1MTU5NWY5MGM5NWY4NDA4MS4uMDUzMDIwYzVlM2E1YTg3MDkwYTJjYjJmNWFkNWRm
MDczMDc2NWU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwuaApA
QCAtNTcsNiArNTcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJNdGwgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVySW1wbAogCiAgICAgbXRsOjpGb3JtYXQgbUZvcm1hdDsKICAgICBtdGw6OlRleHR1cmVSZWYg
bVRleHR1cmU7CisgICAgbXRsOjpUZXh0dXJlUmVmIG1JbXBsaWNpdE1TVGV4dHVyZTsKICAgICBS
ZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJN
dGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLm1tCmluZGV4IDYzZDZmNGI3MjgzOTU4MGM5MzMwNDViZWU0ZTVl
MzI5NTYyM2I0MDAuLjJmOWI1ZjYzMmQ1MGJiZDcyMTE2MWQzYzNmZTM2YjUzNjY4N2QyNzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJCdWZmZXJNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQpAQCAtMjcsNyArMjcs
OCBAQCB2b2lkIFJlbmRlcmJ1ZmZlck10bDo6b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KQogCiB2b2lkIFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQogewotICAg
IG1UZXh0dXJlID0gbnVsbHB0cjsKKyAgICBtVGV4dHVyZSAgICAgICAgICAgPSBudWxscHRyOwor
ICAgIG1JbXBsaWNpdE1TVGV4dHVyZSA9IG51bGxwdHI7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgUmVu
ZGVyYnVmZmVyTXRsOjpzZXRTdG9yYWdlSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
QEAgLTQyLDggKzQzLDkgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3Jh
Z2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgLy8gQ2hl
Y2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgc3RvcmFnZS4K
ICAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IG1TdGF0ZS5nZXRGb3JtYXQoKS5pbmZvLT5p
bnRlcm5hbEZvcm1hdCB8fAotICAgICAgICAgICAgd2lkdGggIT0gbVN0YXRlLmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IG1TdGF0ZS5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgc2FtcGxlcyAh
PSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4o
d2lkdGgpICE9IG1TdGF0ZS5nZXRXaWR0aCgpIHx8CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
THNpemVpPihoZWlnaHQpICE9IG1TdGF0ZS5nZXRIZWlnaHQoKSB8fAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykgIT0gbVN0YXRlLmdldFNhbXBsZXMoKSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmVsZWFzZVRleHR1cmUoKTsKICAgICAgICAgfQpAQCAtNzIsMzAg
Kzc0LDYyIEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyYnVmZmVyTXRsOjpzZXRTdG9yYWdlSW1wbChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIGlmICgobVRleHR1cmUgPT0gbnVsbHB0
ciB8fCAhbVRleHR1cmUtPnZhbGlkKCkpICYmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwKSkK
ICAgICB7Ci0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09IDEpCisgICAgICAgIGlmIChhY3R1
YWxTYW1wbGVzID09IDEgfHwgKG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpICYmIG1G
b3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9U
UlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDEsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSwgJm1UZXh0dXJl
KSk7CisgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNv
bnRleHRNdGwsIG1Gb3JtYXQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aWR0aCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQzMl90PihoZWlnaHQpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcg
Ki8gZmFsc2UsICZtVGV4dHVyZSkpOworCisgICAgICAgICAgICAvLyBVc2UgaW1wbGljaXQgcmVz
b2x2ZSBmb3IgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIHdoZW5ldmVyIHBvc3NpYmxlLiBUaGlzIGlz
IGJlY2F1c2UKKyAgICAgICAgICAgIC8vIGZvciBkZXB0aCBzdGVuY2lsIHRleHR1cmUsIGlmIHN0
ZW5jaWwgbmVlZHMgdG8gYmUgYmxpdHRlZCwgYSBmb3JtYXR0ZWQgY2xvbmUgaGFzCisgICAgICAg
ICAgICAvLyB0byBiZSBjcmVhdGVkLiBBbmQgaXQgaXMgZXhwZW5zaXZlIHRvIGNsb25lIGEgbXVs
dGlzYW1wbGUgdGV4dHVyZS4KKyAgICAgICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID4gMSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGZvcm1hdCBtdXN0IHN1cHBvcnRz
IGltcGxpY2l0IHJlc29sdmUKKyAgICAgICAgICAgICAgICBBU1NFUlQobUZvcm1hdC5nZXRDYXBz
KCkucmVzb2x2ZSk7CisKKyAgICAgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpN
YWtlMkRNU1RleHR1cmUoCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIG1Gb3JtYXQs
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aWR0aCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCBhY3R1YWxTYW1wbGVzLAorICAgICAgICAgICAgICAg
ICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIHRydWUsCisgICAgICAgICAgICAgICAgICAgIC8q
IGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1JbXBsaWNpdE1TVGV4dHVyZSkpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
QU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJETVNUZXh0dXJlKAotICAgICAgICAgICAgICAg
IGNvbnRleHRNdGwsIG1Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGFjdHVhbFNhbXBsZXMsCi0gICAg
ICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKLSAgICAgICAgICAgICAg
ICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJE
TVNUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5
ICovIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBtUmVuZGVyVGFyZ2V0LnNldChtVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAgICAgICAgbVJlbmRlclRhcmdldC5zZXRXaXRoSW1w
bGljaXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbXRsOjprWmVyb05h
dGl2ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKIAogICAgICAgICAvLyBGb3IgZW11bGF0ZWQgY2hh
bm5lbHMgdGhhdCBHTCB0ZXh0dXJlIGludGVuZHMgdG8gbm90IGhhdmUsCiAgICAgICAgIC8vIHdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgogICAgICAgICBib29sIGVtdWxhdGVk
Q2hhbm5lbHMgPSBtdGw6OklzRm9ybWF0RW11bGF0ZWQobUZvcm1hdCk7CiAgICAgICAgIGlmIChl
bXVsYXRlZENoYW5uZWxzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGluZGV4ID0gbXRs
OjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpN
YWtlMkQoMCkpOwotCi0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVy
ZUNvbnRlbnRzKGNvbnRleHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOwotICAgICAgICB9
CisgICAgICAgICAgICBnbDo6SW1hZ2VJbmRleCBpbmRleDsKKworICAgICAgICAgICAgaWYgKGFj
dHVhbFNhbXBsZXMgPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ID0g
Z2w6OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXggPSBnbDo6
SW1hZ2VJbmRleDo6TWFrZTJEKDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBTkdM
RV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1UZXh0dXJlLCBt
Rm9ybWF0LCBtdGw6OkltYWdlTmF0aXZlSW5kZXgoaW5kZXgsIDApKSk7CisgICAgICAgICAgICBp
ZiAobUltcGxpY2l0TVNUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFO
R0xFX1RSWShtdGw6OkluaXRpYWxpemVUZXh0dXJlQ29udGVudHMoY29udGV4dCwgbUltcGxpY2l0
TVNUZXh0dXJlLCBtRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGdsOjpJbWFnZUluZGV4
OjpNYWtlMkRNdWx0aXNhbXBsZSgpLCAwKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAv
LyBpZiAoZW11bGF0ZWRDaGFubmVscykKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CkBAIC0xMzMsNyArMTY3LDYgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZm
ZXJNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0
T3V0KQogewotICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KICAgICBBU1NFUlQobVRl
eHR1cmUgJiYgbVRleHR1cmUtPnZhbGlkKCkpOwogICAgICpydE91dCA9ICZtUmVuZGVyVGFyZ2V0
OwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJn
ZXRNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJUYXJnZXRNdGwuaAppbmRleCBiYWY0ZTRkMjY2OTE4MTQwY2IwMTIzMjgxYWRl
MDNmNjQxNGJlZjg5Li4wYzU3NTE3NWExMTcxOThlZGRmNWJlY2FhMmZlZGZhNDUwNzZkNzA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oCkBAIC00NiwyMSArNDYs
MTkgQEAgY2xhc3MgUmVuZGVyVGFyZ2V0TXRsIGZpbmFsIDogcHVibGljIEZyYW1lYnVmZmVyQXR0
YWNobWVudFJlbmRlclRhcmdldAogICAgIHZvaWQgZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJU
YXJnZXRNdGwgJnNyYyk7CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgbXRsOjpUZXh0dXJlUmVm
IGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZS5sb2NrKCk7IH0KLSAgICBtdGw6
OlRleHR1cmVSZWYgZ2V0SW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtSW1wbGlj
aXRNU1RleHR1cmUubG9jaygpOyB9Ci0gICAgY29uc3QgbXRsOjpNaXBtYXBOYXRpdmVMZXZlbCAm
Z2V0TGV2ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MZXZlbEluZGV4OyB9Ci0gICAgdWludDMy
X3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MYXllckluZGV4OyB9CisgICAgbXRs
OjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPmdldFRleHR1cmVSZWYoKTsgfQorICAgIG10bDo6VGV4dHVyZVJlZiBnZXRJbXBs
aWNpdE1TVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+
Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKTsgfQorICAgIGNvbnN0IG10bDo6TWlwbWFwTmF0aXZl
TGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdl
dEluZm8tPmxldmVsOyB9CisgICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoOyB9CiAgICAgdWludDMy
X3QgZ2V0UmVuZGVyU2FtcGxlcygpIGNvbnN0OwogICAgIGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9CiAKICAgICB2b2lkIHRvUmVuZGVyUGFz
c0F0dGFjaG1lbnREZXNjKG10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0
KSBjb25zdDsKIAogICBwcml2YXRlOgotICAgIG10bDo6VGV4dHVyZVdlYWtSZWYgbVRleHR1cmU7
Ci0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBtSW1wbGljaXRNU1RleHR1cmU7Ci0gICAgbXRsOjpN
aXBtYXBOYXRpdmVMZXZlbCBtTGV2ZWxJbmRleCA9IG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbDsK
LSAgICB1aW50MzJfdCBtTGF5ZXJJbmRleCAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBt
dGw6OkZvcm1hdCAqbUZvcm1hdCAgICAgICAgID0gbnVsbHB0cjsKKy8vIFRoaXMgaXMgc2hhcmVk
IHBvaW50ZXIgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91
bmQgdG8gYSBmcmFtZSBidWZmZXIuCisgICAgc3RkOjpzaGFyZWRfcHRyPG10bDo6UmVuZGVyUGFz
c0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYz4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvOwor
ICAgIGNvbnN0IG10bDo6Rm9ybWF0ICptRm9ybWF0ID0gbnVsbHB0cjsKIH07CiB9ICAvLyBuYW1l
c3BhY2UgcngKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KaW5k
ZXggZTg5ZTc2MTQ4MWRkNjRkYzQ3Yzc1MDdhYWI5YmVmYTVmMjRjNGUyZi4uZTEyNmRiYjZiZWUw
MTE5YTE2NjlhMDFlN2UwOTZjMmQ4NGE3ZDgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLm1tCkBAIC0xMSw3ICsxMSwxMCBAQAogCiBuYW1lc3BhY2UgcngKIHsK
LVJlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKCkge30KK1JlbmRlclRhcmdldE10bDo6
UmVuZGVyVGFyZ2V0TXRsKCkgOgorICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8oc3RkOjptYWtl
X3NoYXJlZDxtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2M+KCkpLAor
ICBtRm9ybWF0KG51bGxwdHIpCit7fQogCiBSZW5kZXJUYXJnZXRNdGw6On5SZW5kZXJUYXJnZXRN
dGwoKQogewpAQCAtMTksMTAgKzIyLDcgQEAgUmVuZGVyVGFyZ2V0TXRsOjp+UmVuZGVyVGFyZ2V0
TXRsKCkKIH0KIAogUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoUmVuZGVyVGFyZ2V0
TXRsICYmb3RoZXIpCi0gICAgOiBtVGV4dHVyZShzdGQ6Om1vdmUob3RoZXIubVRleHR1cmUpKSwK
LSAgICAgIG1JbXBsaWNpdE1TVGV4dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0
dXJlKSksCi0gICAgICBtTGV2ZWxJbmRleChvdGhlci5tTGV2ZWxJbmRleCksCi0gICAgICBtTGF5
ZXJJbmRleChvdGhlci5tTGF5ZXJJbmRleCkKKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5m
byhzdGQ6Om1vdmUob3RoZXIubVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKIHt9CiAKIHZvaWQg
UmVuZGVyVGFyZ2V0TXRsOjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLApAQCAt
MzksMjEgKzM5LDIxIEBAIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRXaXRoSW1wbGljaXRNU1Rl
eHR1cmUoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXllciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZv
cm1hdCkKIHsKLSAgICBtVGV4dHVyZSAgICAgICAgICAgPSB0ZXh0dXJlOwotICAgIG1JbXBsaWNp
dE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOwotICAgIG1MZXZlbEluZGV4ICAgICAgICA9
IGxldmVsOwotICAgIG1MYXllckluZGV4ICAgICAgICA9IGxheWVyOworICAgIG1UZXh0dXJlUmVu
ZGVyVGFyZ2V0SW5mby0+dGV4dHVyZSAgICAgICAgICAgPSB0ZXh0dXJlOworICAgIG1UZXh0dXJl
UmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsK
KyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsICAgICAgICA9IGxldmVsOworICAg
IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoICAgICAgICA9IGxheWVyOwog
ICAgIG1Gb3JtYXQgICAgICAgICAgICA9ICZmb3JtYXQ7CiB9CiAKIHZvaWQgUmVuZGVyVGFyZ2V0
TXRsOjpzZXRUZXh0dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBt
VGV4dHVyZSA9IHRleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJl
ID0gdGV4dHVyZTsKIH0KIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0
dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCiB7Ci0gICAgbUlt
cGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJU
YXJnZXRJbmZvLT5pbXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOwogfQogCiB2
b2lkIFJlbmRlclRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwg
JnNyYykKQEAgLTY0LDI1ICs2NCwxOSBAQCB2b2lkIFJlbmRlclRhcmdldE10bDo6ZHVwbGljYXRl
RnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYykKIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6
OnJlc2V0KCkKIHsKLSAgICBtVGV4dHVyZS5yZXNldCgpOwotICAgIG1JbXBsaWNpdE1TVGV4dHVy
ZS5yZXNldCgpOwotICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOwot
ICAgIG1MYXllckluZGV4ID0gMDsKLSAgICBtRm9ybWF0ICAgICA9IG51bGxwdHI7CisgICAgbVRl
eHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlLnJlc2V0KCk7CisgICAgbVRleHR1cmVSZW5k
ZXJUYXJnZXRJbmZvLT5pbXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOworICAgIG1UZXh0dXJlUmVu
ZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOwor
ICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoID0gMDsKKyAgICBtRm9y
bWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG51bGxwdHI7CiB9CiAKIHVpbnQz
Ml90IFJlbmRlclRhcmdldE10bDo6Z2V0UmVuZGVyU2FtcGxlcygpIGNvbnN0CiB7Ci0gICAgbXRs
OjpUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZSgpOwotICAg
IG10bDo6VGV4dHVyZVJlZiB0ZXggICAgICAgICAgID0gZ2V0VGV4dHVyZSgpOwotICAgIHJldHVy
biBpbXBsaWNpdE1TVGV4ID8gaW1wbGljaXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+
c2FtcGxlcygpIDogMSk7CisgICAgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+Z2V0
UmVuZGVyU2FtcGxlcygpOwogfQogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjKG10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBj
b25zdAogewotICAgIHJwYURlc2NPdXQtPnRleHR1cmUgICAgICAgICAgID0gbVRleHR1cmUubG9j
aygpOwotICAgIHJwYURlc2NPdXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0
dXJlLmxvY2soKTsKLSAgICBycGFEZXNjT3V0LT5sZXZlbCAgICAgICAgICAgICA9IG1MZXZlbElu
ZGV4OwotICAgIHJwYURlc2NPdXQtPnNsaWNlT3JEZXB0aCAgICAgID0gbUxheWVySW5kZXg7Ci0g
ICAgcnBhRGVzY091dC0+YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0
Q2FwcygpLmJsZW5kYWJsZSA6IGZhbHNlOworICAgIHJwYURlc2NPdXQtPnJlbmRlclRhcmdldCA9
IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJN
dGwuaAppbmRleCA3YjJjZmQ1MGNiZGZlNDFmZjM2ODgwZjYxMGE3OGY0NDQ2Y2FhN2UxLi41MmU5
MWFmYjZmMTMyNjViNTY2NTg5NWE3MDJhYTk3YTg3ODBkNmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1NoYWRlck10bC5oCkBAIC0xMSw4ICsxMSw4IEBACiAKICNpbmNsdWRlIDxtYXA+CiAKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL1NoYWRlckltcGwuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAK
QEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRlck10bCA6IHB1YmxpYyBTaGFkZXJJbXBsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaENv
bXBpbGVySW5zdGFuY2UgKmNvbXBpbGVySW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykgb3Zl
cnJpZGU7CiAKKyAgICBzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0VHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gJnRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb247CisgICAgfQogICAgIHN0ZDo6c3RyaW5nIGdldERlYnVnSW5mbygpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gdHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiA9IHt9OworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRy
PFdhaXRhYmxlQ29tcGlsZUV2ZW50PiBjb21waWxlSW1wbE10bChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpTaENvbXBpbGVySW5zdGFuY2UgKmNvbXBpbGVySW5zdGFuY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyAmc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucyk7
CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1t
CmluZGV4IGY5MDlmYjUwOTM4NWJjOGVjYjE4N2I1NWY1MjcwYWU5Y2EyZGY2ZmMuLmFkMDFkYmY0
NWZiOGY0NzkwNGJmZGIxZDRiODQ2ODY2ZmViOTg4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1No
YWRlck10bC5tbQpAQCAtMTAsOCArMTAsMTMgQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9TaGFkZXJNdGwuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliQU5HTEUvU2hhZGVyLmgiCisjaW5jbHVkZSAi
bGliQU5HTEUvV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQ29udGV4dE10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwxMCArMjUsMTAwIEBAIFNoYWRlck10
bDo6U2hhZGVyTXRsKGNvbnN0IGdsOjpTaGFkZXJTdGF0ZSAmc3RhdGUpIDogU2hhZGVySW1wbChz
dGF0ZSkge30KIAogU2hhZGVyTXRsOjp+U2hhZGVyTXRsKCkge30KIAorY2xhc3MgVHJhbnNsYXRl
VGFzayA6IHB1YmxpYyBhbmdsZTo6Q2xvc3VyZQoreworICBwdWJsaWM6CisgICAgVHJhbnNsYXRl
VGFzayhTaEhhbmRsZSBoYW5kbGUsIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucywgY29uc3Qgc3Rk
OjpzdHJpbmcgJnNvdXJjZSkKKyAgICAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1PcHRpb25zKG9w
dGlvbnMpLCBtU291cmNlKHNvdXJjZSksIG1SZXN1bHQoZmFsc2UpCisgICAge30KKworICAgIHZv
aWQgb3BlcmF0b3IoKSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpzb3Vy
Y2UgPSBtU291cmNlLmNfc3RyKCk7CisgICAgICAgIG1SZXN1bHQgICAgICAgICAgICA9IHNoOjpD
b21waWxlKG1IYW5kbGUsICZzb3VyY2UsIDEsIG1PcHRpb25zKTsKKyAgICB9CisKKyAgICBib29s
IGdldFJlc3VsdCgpIHsgcmV0dXJuIG1SZXN1bHQ7IH0KKworICAgIFNoSGFuZGxlIGdldEhhbmRs
ZSgpIHsgcmV0dXJuIG1IYW5kbGU7IH0KKworICBwcml2YXRlOgorICAgIFNoSGFuZGxlIG1IYW5k
bGU7CisgICAgU2hDb21waWxlT3B0aW9ucyBtT3B0aW9uczsKKyAgICBzdGQ6OnN0cmluZyBtU291
cmNlOworICAgIGJvb2wgbVJlc3VsdDsKK307CisKK2NsYXNzIE1UTFdhaXRhYmxlQ29tcGlsZUV2
ZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBXYWl0YWJsZUNvbXBpbGVFdmVudAoreworICBwdWJsaWM6
CisgICAgTVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsKFNoYWRlck10bCAqc2hhZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8YW5nbGU6OldhaXRh
YmxlRXZlbnQ+IHdhaXRhYmxlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNrPiB0cmFuc2xhdGVUYXNrKQorICAgICAgICA6
IFdhaXRhYmxlQ29tcGlsZUV2ZW50KHdhaXRhYmxlRXZlbnQpLCBtVHJhbnNsYXRlVGFzayh0cmFu
c2xhdGVUYXNrKSwgbVNoYWRlcihzaGFkZXIpCisgICAge30KKworICAgIGJvb2wgZ2V0UmVzdWx0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbVRyYW5zbGF0ZVRhc2stPmdldFJlc3VsdCgpOyB9CisKKyAg
ICBib29sIHBvc3RUcmFuc2xhdGUoc3RkOjpzdHJpbmcgKmluZm9Mb2cpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBzaDo6VFNoSGFuZGxlQmFzZSAqYmFzZSAgICA9IHN0YXRpY19jYXN0PHNoOjpU
U2hIYW5kbGVCYXNlICo+KG1UcmFuc2xhdGVUYXNrLT5nZXRIYW5kbGUoKSk7CisgICAgICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKyAgICAgICAgaWYgKHRyYW5zbGF0b3JNZXRhbERpcmVjdCAhPSBudWxscHRyKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBDb3B5IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4K
KyAgICAgICAgICAgIG1TaGFkZXItPnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPQorICAgICAg
ICAgICAgICAgICoodHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZs
ZWN0aW9uKCkpOworICAgICAgICAgICAgdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xh
dG9yTWV0YWxSZWZsZWN0aW9uKCktPnJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0
ZVRhc2s+IG1UcmFuc2xhdGVUYXNrOworICAgIFNoYWRlck10bCAqbVNoYWRlcjsKK307CisKK3N0
ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gU2hhZGVyTXRsOjpjb21waWxlSW1w
bE10bCgKKyAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICBnbDo6U2hDb21waWxl
ckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZzb3Vy
Y2UsCisgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucykKK3sKKyNpZiBkZWZpbmVk
KEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRF
X0FTVDsKKyNlbmRpZgorCisgICAgYXV0byB3b3JrZXJUaHJlYWRQb29sID0gY29udGV4dC0+Z2V0
V29ya2VyVGhyZWFkUG9vbCgpOworICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9CisgICAgICAgIHN0
ZDo6bWFrZV9zaGFyZWQ8VHJhbnNsYXRlVGFzaz4oY29tcGlsZXJJbnN0YW5jZS0+Z2V0SGFuZGxl
KCksIGNvbXBpbGVPcHRpb25zLCBzb3VyY2UpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKyAgICAgICAgdGhpcywgYW5nbGU6Oldv
cmtlclRocmVhZFBvb2w6OlBvc3RXb3JrZXJUYXNrKHdvcmtlclRocmVhZFBvb2wsIHRyYW5zbGF0
ZVRhc2spLAorICAgICAgICB0cmFuc2xhdGVUYXNrKTsKK30KKwogc3RkOjpzaGFyZWRfcHRyPFdh
aXRhYmxlQ29tcGlsZUV2ZW50PiBTaGFkZXJNdGw6OmNvbXBpbGUoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hD
b21waWxlT3B0aW9ucyBvcHRpb25zKQogeworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBt
dGw6OkdldEltcGwoY29udGV4dCk7CisgICAgaWYgKGdldFN0YXRlKCkuZ2V0U2hhZGVyVHlwZSgp
ID09IGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXggJiYKKyAgICAgICAgIWNvbnRleHRNdGwtPmdldERp
c3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVk
KQorICAgIHsKKyAgICAgICAgLy8gRW11bGF0ZSBnbF9JbnN0YW5jZUlECisgICAgICAgIHNoOjpU
U2hIYW5kbGVCYXNlICpiYXNlID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29t
cGlsZXJJbnN0YW5jZS0+Z2V0SGFuZGxlKCkpOworICAgICAgICBhdXRvIHRyYW5zbGF0b3JNZXRh
bERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCk7CisgICAgICAgIGlm
ICh0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byB0cmFuc2xhdG9yTWV0YWwgPSBzdGF0aWNfY2FzdDxzaDo6VHJhbnNsYXRvck1ldGFs
ICo+KGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgICAgICAgICB0cmFuc2xhdG9yTWV0YWwt
PmVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+ZW5hYmxlRW11
bGF0ZWRJbnN0YW5jZUlEKHRydWUpOworICAgICAgICB9CisgICAgfQogICAgIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMgPSBTSF9JTklUSUFMSVpFX1VOSU5JVElBTElaRURfTE9DQUxT
OwogCiAgICAgYm9vbCBpc1dlYkdMID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLndlYmdsQ29t
cGF0aWJpbGl0eTsKQEAgLTMzLDggKzEyOCwxMSBAQCBzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVD
b21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29udGV4dCAqY29udAog
ICAgIH0KIAogICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0NMQU1QX1BPSU5UX1NJWkU7CisjaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKQorICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0NMQU1QX0ZSQUdfREVQVEg7Cisj
ZW5kaWYKIAotICAgIHJldHVybiBjb21waWxlSW1wbChjb250ZXh0LCBjb21waWxlckluc3RhbmNl
LCBtU3RhdGUuZ2V0U291cmNlKCksIGNvbXBpbGVPcHRpb25zIHwgb3B0aW9ucyk7CisgICAgcmV0
dXJuIGNvbXBpbGVJbXBsTXRsKGNvbnRleHQsIGNvbXBpbGVySW5zdGFuY2UsIGdldFN0YXRlKCku
Z2V0U291cmNlKCksIGNvbXBpbGVPcHRpb25zIHwgb3B0aW9ucyk7CiB9CiAKIHN0ZDo6c3RyaW5n
IFNoYWRlck10bDo6Z2V0RGVidWdJbmZvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFj
ZU10bC5oCmluZGV4IDllODRmODhmNzU0ZDEwZTNiNjZjMjAyY2UyMzQ4OTZiMmQxOTFkOTAuLjBh
ZGMzNjA2MDg2YTlkODhkY2NlM2I0Y2YwMWVkNmQ2Mzk1MDA2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRs
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1N1cmZhY2VNdGwuaApAQCAtMjQsNyArMjQsMjcgQEAgbmFtZXNwYWNlIHJ4CiAKIGNsYXNz
IERpc3BsYXlNdGw7CiAKLWNsYXNzIFN1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKK2Ns
YXNzIFN1cmZhY2VNdGxQcm90b2NvbCA6IHB1YmxpYyBTdXJmYWNlSW1wbAoreworICBwdWJsaWM6
CisgICAgU3VyZmFjZU10bFByb3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkg
OiBTdXJmYWNlSW1wbChzdGF0ZSkge30KKyAgICB2aXJ0dWFsIGludCBnZXRTYW1wbGVzKCkgY29u
c3QgICAgICA9IDA7CisgICAgdmlydHVhbCBib29sIHByZXNlcnZlQnVmZmVyKCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXgg
JmltYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAq
KnJ0T3V0KSBvdmVycmlkZSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUm9idXN0UmVzb3Vy
Y2VJbml0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJy
ZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworICAg
IHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0gMDsKKyAgICB2
aXJ0dWFsIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxz
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBtdGw6
OlRleHR1cmVSZWYgJiBnZXRDb2xvclRleHR1cmUoKSA9IDA7Cit9OworCitjbGFzcyBTdXJmYWNl
TXRsIDogcHVibGljIFN1cmZhY2VNdGxQcm90b2NvbAogewogICBwdWJsaWM6CiAgICAgU3VyZmFj
ZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LApAQCAtNjcsMTEgKzg3LDExIEBAIGNsYXNzIFN1cmZh
Y2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKICAgICBhbmdsZTo6UmVzdWx0IGluaXRpYWxpemVD
b250ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgb3ZlcnJp
ZGU7CiAKLSAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9yVGV4dHVyZSgpIHsgcmV0
dXJuIG1Db2xvclRleHR1cmU7IH0KKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9y
VGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1Db2xvclRleHR1cmU7IH0KICAgICBjb25zdCBt
dGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQ29sb3JGb3JtYXQ7
IH0KLSAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVzOyB9CisgICAg
aW50IGdldFNhbXBsZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtU2FtcGxlczsgfQogCi0g
ICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCB7IHJldHVybiBtUm9idXN0UmVz
b3VyY2VJbml0OyB9CisgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtUm9idXN0UmVzb3VyY2VJbml0OyB9CiAKICAgICBhbmdsZTo6UmVzdWx0
IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5n
LApAQCAtMTQ0LDEzICsxNjQsMTQgQEAgY2xhc3MgV2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBT
dXJmYWNlTXRsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRlOwog
CisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVD
dXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0RyYXdh
YmxlT3V0IC8qKiBudWxsYWJsZSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sICpuZXdEcmF3YWJsZU91dCAvKiogbnVsbGFibGUgKi8pIG92
ZXJyaWRlOwogCiAgICAgLy8gRW5zdXJlIHRoZSB0aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdl
dENvbG9yVGV4dHVyZSgpIGlzIHJlYWR5IGZvciBnbFJlYWRQaXhlbHMoKS4gVGhpcwogICAgIC8v
IGltcGxpY2l0bHkgY2FsbHMgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoKS4KLSAgICBh
bmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7Ci0KKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4
dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1S
ZXRhaW5CdWZmZXI7IH0KICAgcHJpdmF0ZToKICAgICBhbmdsZTo6UmVzdWx0IHN3YXBJbXBsKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IG9idGFpbk5leHRE
cmF3YWJsZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC0xNjgsNiArMTg5LDggQEAg
Y2xhc3MgV2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCiAgICAgLy8gZXZlbnQu
IFdlIGRvbid0IHVzZSBtTWV0YWxMYXllci5kcmF3YWJsZVNpemUgZGlyZWN0bHkgc2luY2UgaXQg
bWlnaHQgYmUgY2hhbmdlZCBpbnRlcm5hbGx5IGJ5CiAgICAgLy8gbWV0YWwgcnVudGltZS4KICAg
ICBDR1NpemUgbUN1cnJlbnRLbm93bkRyYXdhYmxlU2l6ZTsKKworICAgIGJvb2wgbVJldGFpbkJ1
ZmZlciA9IGZhbHNlOwogfTsKIAogLy8gT2Zmc2NyZWVuIHN1cmZhY2UsIGJhc2UgY2xhc3Mgb2Yg
UEJ1ZmZlciwgSU9TdXJmYWNlLgpAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVyU3Vy
ZmFjZU10bCA6IHB1YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCiAgICAgdm9pZCBzZXRGaXhlZEhl
aWdodChFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKIH07CiAKLS8vIE9mZnNjcmVlbiBjcmVhdGVk
IGZyb20gSU9TdXJmYWNlCi1jbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVibGljIE9mZnNj
cmVlblN1cmZhY2VNdGwKLXsKLSAgcHVibGljOgotICAgIElPU3VyZmFjZVN1cmZhY2VNdGwoRGlz
cGxheU10bCAqZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3Vy
ZmFjZVN0YXRlICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVHTENsaWVudEJ1ZmZl
ciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1h
cCAmYXR0cmlicyk7Ci0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlkZTsKLQotICAg
IGVnbDo6RXJyb3IgYmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOwotICAgIGVnbDo6RXJy
b3IgcmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVm
ZmVyKSBvdmVycmlkZTsKLQotICAgIGFuZ2xlOjpSZXN1bHQgZ2V0QXR0YWNobWVudFJlbmRlclRh
cmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNh
bXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1l
YnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKLQotICAgIHN0
YXRpYyBib29sIFZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25z
dCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicyk7Ci0KLSAgcHJpdmF0ZToKLSAgICBhbmdsZTo6
UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOwotCi0gICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Ci0gICAgTlNVSW50ZWdlciBtSU9T
dXJmYWNlUGxhbmU7Ci0gICAgaW50IG1JT1N1cmZhY2VGb3JtYXRJZHg7Ci19OwotCiB9ICAvLyBu
YW1lc3BhY2UgcngKLQogI2VuZGlmIC8qIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1NVUkZBQ0VN
VExfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KaW5kZXggMzAzZmIxNjc0
OTZlNzgwOTVhMGQxYjRiYzkyMmMxZjZjZDhiZGNhYS4uYzllZTI0YmZhYWMxZjg1NjE4Y2M3YzMx
YjE2MWNjYzhiNzdjYjRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KQEAg
LTMzLDU1ICszMywxOSBAQCBuYW1lc3BhY2UKIHsKIAogI2RlZmluZSBBTkdMRV9UT19FR0xfVFJZ
KEVYUFIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoKEVYUFIpICE9IGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlKSkgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkU3VyZmFj
ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCitk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGlmIChBTkdMRV9VTkxJS0VMWSgoRVhQUikgIT0gYW5nbGU6OlJlc3VsdDo6
Q29udGludWUpKSBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkU3VyZmFjZSgpOyAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQogCiBjb25zdGV4cHIgYW5n
bGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0aEZvcm1hdElkICAgPSBhbmdsZTo6
Rm9ybWF0SUQ6OkQzMl9GTE9BVDsKIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRG
cmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6UzhfVUlOVDsKIGNv
bnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlckRlcHRoU3RlbmNpbEZv
cm1hdElkID0KICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOwogCi1zdHJ1
Y3QgSU9TdXJmYWNlRm9ybWF0SW5mbwotewotICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdDsKLSAg
ICBHTGVudW0gdHlwZTsKLSAgICBzaXplX3QgY29tcG9uZW50Qnl0ZXM7Ci0KLSAgICBhbmdsZTo6
Rm9ybWF0SUQgbmF0aXZlQW5nbGVGb3JtYXRJZDsKLX07Ci0KLS8vIGNsYW5nLWZvcm1hdCBvZmYK
LS8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgUjE2X1VJTlQgb25jZSBHTEVTMyBpcyBjb21wbGV0ZS4K
LWNvbnN0ZXhwciBzdGQ6OmFycmF5PElPU3VyZmFjZUZvcm1hdEluZm8sIDg+IGtJT1N1cmZhY2VG
b3JtYXRzID0ge3sKLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgMSwgYW5nbGU6OkZvcm1hdElEOjpSOF9VTk9STX0sCi0gICAge0dMX1JFRCwgICAgICBH
TF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDIsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2X1VO
T1JNfSwKLSAgICB7R0xfUkcsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
MiwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VOT1JNfSwKLSAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZfVU5P
Uk19LAotICAgIHtHTF9SR0IsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICA0
LCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKLSAgICB7R0xfQkdSQV9FWFQsIEdM
X1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhB
OF9VTk9STX0sCi0gICAge0dMX1JHQkEsICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAg
ICAgIDgsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FUfSwKLSAgICB7R0xfUkdC
MTBfQTIsIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgNCwgYW5nbGU6OkZvcm1hdElE
OjpCMTBHMTBSMTBBMl9VTk9STX0sCi19fTsKLS8vIGNsYW5nLWZvcm1hdCBvbgotCi1pbnQgRmlu
ZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KGtJT1N1cmZhY2VG
b3JtYXRzLnNpemUoKSk7ICsraSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdElu
Zm8gPSBrSU9TdXJmYWNlRm9ybWF0c1tpXTsKLSAgICAgICAgaWYgKGZvcm1hdEluZm8uaW50ZXJu
YWxGb3JtYXQgPT0gaW50ZXJuYWxGb3JtYXQgJiYgZm9ybWF0SW5mby50eXBlID09IHR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiAtMTsKLX0KLQogYW5nbGU6OlJlc3VsdCBDcmVhdGVPclJlc2l6ZVRleHR1cmUoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgd2lkdGgsCkBAIC0xMjgsNiArOTIsMTkgQEAgYm9vbCBJc0ZyYW1l
Q2FwdHVyZUVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK0FOR0xFX01UTF9VTlVTRUQKK3N0ZDo6c3Ry
aW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKyAgICByZXR1cm4gIiI7CisjZWxzZQorICAgIGF1dG8gdmFyICAgICAgICAg
ICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRklMRSIp
OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7CisKKyAg
ICByZXR1cm4gZmlsZVBhdGg7CisjZW5kaWYKK30KKwogQU5HTEVfTVRMX1VOVVNFRAogc2l6ZV90
IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKQogewpAQCAtMjAyLDYgKzE3OSwyMSBAQCB2b2lkIFN0
YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRR
dWV1ZT4gbWV0YWxDbWRRdQogICAgIHsKICAgICAgICAgTVRMQ2FwdHVyZURlc2NyaXB0b3IgKmNh
cHR1cmVEZXNjcmlwdG9yID0gW1tNVExDYXB0dXJlRGVzY3JpcHRvciBhbGxvY10gaW5pdF07CiAg
ICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2
aWNlOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCAgICAgICAgICAgICAgPSBH
ZXRNZXRhbENhcHR1cmVGaWxlKCk7CisgICAgICAgIGlmIChmaWxlUGF0aCAhPSAiIikKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbnVtYmVyZWRQYXRoID0KKyAgICAg
ICAgICAgICAgICBmaWxlUGF0aCArIHN0ZDo6dG9fc3RyaW5nKGdGcmFtZUNhcHR1cmVkIC0gMSkg
KyAiLmdwdXRyYWNlIjsKKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9u
ID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VEb2N1bWVudDsKKyAgICAgICAgICAgIGNh
cHR1cmVEZXNjcmlwdG9yLm91dHB1dFVSTCA9CisgICAgICAgICAgICAgICAgW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bnVtYmVyZWRQYXRoLmNf
c3RyKCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0RpcmVjdG9yeTpmYWxzZV07Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgcGF1c2UgZXhlY3V0aW9uIG9ubHkgaWYgYXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQg
aW5zaWRlIFhjb2RlCisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9
IE1UTENhcHR1cmVEZXN0aW5hdGlvbkRldmVsb3BlclRvb2xzOworICAgICAgICB9CiAKICAgICAg
ICAgTlNFcnJvciAqZXJyb3I7CiAgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2Fw
dHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCkBAIC0y
MTEsMTQgKzIwMywxNSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQogICAgIH0KICAgICBlbHNl
CiAjICAgIGVuZGlmICAvLyBfX01BQ18xMF8xNQorICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZB
SUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQogICAgIHsKLSAgICAgICAgaWYgKEZyYW1lQ2Fw
dHVyZURldmljZVNjb3BlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdl
ciBzdGFydENhcHR1cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9
IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAgICAgICBjYXB0dXJlRGVz
Y3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsKKworICAgICAgICBO
U0Vycm9yICplcnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJl
V2l0aERlc2NyaXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKICAgICAgICAg
ewotICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhDb21tYW5kUXVl
dWU6bWV0YWxDbWRRdWV1ZV07CisgICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBj
YXB0dXJlLCBlcnJvciAlQCIsIGVycm9yKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAgLy8g
QU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECkBAIC0yNDUsMTEgKzIzOCwxMCBAQCB2
b2lkIFN0b3BGcmFtZUNhcHR1cmUoKQogfQogfQogCi0vLyBTdXJmYWNlTXRsIGltcGxlbWVudGF0
aW9uCiBTdXJmYWNlTXRsOjpTdXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCi0gICAgOiBT
dXJmYWNlSW1wbChzdGF0ZSkKKyAgICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKIHsKICAg
ICBtUm9idXN0UmVzb3VyY2VJbml0ID0KICAgICAgICAgYXR0cmlicy5nZXQoRUdMX1JPQlVTVF9S
RVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSwgRUdMX0ZBTFNFKSA9PSBFR0xfVFJVRTsKQEAg
LTY5Myw2ICs2ODUsMTAgQEAgYW5nbGU6OlJlc3VsdCBXaW5kb3dTdXJmYWNlTXRsOjpnZXRBdHRh
Y2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb24KICAgICByZXR1cm4gU3Vy
ZmFjZU10bDo6Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldChjb250ZXh0LCBiaW5kaW5nLCBpbWFn
ZUluZGV4LCBzYW1wbGVzLCBydE91dCk7CiB9CiAKK2FuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFj
ZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCit7CisgICAgcmV0dXJuIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnRl
eHQsIG51bGxwdHIpOworfQogYW5nbGU6OlJlc3VsdCBXaW5kb3dTdXJmYWNlTXRsOjplbnN1cmVD
dXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqbmV3RHJhd2FibGVPdXQpCiB7CkBAIC05NDMsMTU3ICs5MzksNSBAQCB2b2lkIFBCdWZm
ZXJTdXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodChFR0xpbnQgaGVpZ2h0KQogICAgIG1TaXplLmhl
aWdodCA9IGhlaWdodDsKIH0KIAotLy8gSU9TdXJmYWNlU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlv
bi4KLUlPU3VyZmFjZVN1cmZhY2VNdGw6OklPU3VyZmFjZVN1cmZhY2VNdGwoRGlzcGxheU10bCAq
ZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKLSAg
ICA6IE9mZnNjcmVlblN1cmZhY2VNdGwoZGlzcGxheSwgc3RhdGUsIGF0dHJpYnMpLCBtSU9TdXJm
YWNlKChfX2JyaWRnZSBJT1N1cmZhY2VSZWYpKGJ1ZmZlcikpCi17Ci0gICAgQ0ZSZXRhaW4obUlP
U3VyZmFjZSk7Ci0KLSAgICBtSU9TdXJmYWNlUGxhbmUgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJp
YnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKLQotICAgIEVHTEF0dHJpYiBpbnRl
cm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdM
RSk7Ci0gICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX1RFWFRV
UkVfVFlQRV9BTkdMRSk7Ci0gICAgbUlPU3VyZmFjZUZvcm1hdElkeCA9Ci0gICAgICAgIEZpbmRJ
T1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNfY2FzdDxHTGVudW0+KGludGVybmFsRm9ybWF0KSwg
c3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7Ci0gICAgQVNTRVJUKG1JT1N1cmZhY2VGb3JtYXRJ
ZHggPj0gMCk7Ci0KLSAgICBtQ29sb3JGb3JtYXQgPQotICAgICAgICBkaXNwbGF5LT5nZXRQaXhl
bEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9ybWF0SWR4XS5uYXRpdmVBbmds
ZUZvcm1hdElkKTsKLX0KLUlPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRs
KCkKLXsKLSAgICBpZiAobUlPU3VyZmFjZSAhPSBudWxscHRyKQotICAgIHsKLSAgICAgICAgQ0ZS
ZWxlYXNlKG1JT1N1cmZhY2UpOwotICAgICAgICBtSU9TdXJmYWNlID0gbnVsbHB0cjsKLSAgICB9
Ci19Ci0KLWVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6YmluZFRleEltYWdlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQotewotICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7Ci0gICAgU3RhcnRGcmFtZUNhcHR1
cmUoY29udGV4dE10bCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlm
IG5lZWRlZDoKLSAgICBBTkdMRV9UT19FR0xfVFJZKGVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQo
Y29udGV4dCkpOwotCi0gICAgcmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJbWFn
ZShjb250ZXh0LCB0ZXh0dXJlLCBidWZmZXIpOwotfQotCi1lZ2w6OkVycm9yIElPU3VyZmFjZVN1
cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdM
aW50IGJ1ZmZlcikKLXsKLSAgICBlZ2w6OkVycm9yIHJlID0gT2Zmc2NyZWVuU3VyZmFjZU10bDo6
cmVsZWFzZVRleEltYWdlKGNvbnRleHQsIGJ1ZmZlcik7Ci0gICAgU3RvcEZyYW1lQ2FwdHVyZSgp
OwotICAgIHJldHVybiByZTsKLX0KLQotYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KAotICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAotICAgIEdMZW51bSBiaW5kaW5nLAotICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFn
ZUluZGV4LAotICAgIEdMc2l6ZWkgc2FtcGxlcywKLSAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRS
ZW5kZXJUYXJnZXQgKipydE91dCkKLXsKLSAgICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0
dXJlIGlmIG5lZWRlZDoKLSAgICBBTkdMRV9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChj
b250ZXh0KSk7Ci0KLSAgICByZXR1cm4gT2Zmc2NyZWVuU3VyZmFjZU10bDo6Z2V0QXR0YWNobWVu
dFJlbmRlclRhcmdldChjb250ZXh0LCBiaW5kaW5nLCBpbWFnZUluZGV4LCBzYW1wbGVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0
T3V0KTsKLX0KLQotYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDb2xv
clRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGlmICht
Q29sb3JUZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOwotICAgIH0KLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOwotICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCi0gICAgewotICAgICAgICBhdXRvIHRl
eERlc2MgPQotICAgICAgICAgICAgW01UTFRleHR1cmVEZXNjcmlwdG9yIHRleHR1cmUyRERlc2Ny
aXB0b3JXaXRoUGl4ZWxGb3JtYXQ6bUNvbG9yRm9ybWF0Lm1ldGFsRm9ybWF0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDptU2l6ZS53aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6bVNpemUuaGVpZ2h0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcHBlZDpOT107
Ci0KLSAgICAgICAgdGV4RGVzYy51c2FnZSA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBN
VExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7Ci0KLSAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4
dHVyZSA9Ci0gICAgICAgICAgICBbY29udGV4dE10bC0+Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0
dXJlV2l0aERlc2NyaXB0b3I6dGV4RGVzYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zdXJmYWNlOm1JT1N1cmZhY2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFu
ZTptSU9TdXJmYWNlUGxhbmVdOwotCi0gICAgICAgIG1Db2xvclRleHR1cmUgPSBtdGw6OlRleHR1
cmU6Ok1ha2VGcm9tTWV0YWwoW3RleHR1cmUgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXSk7Ci0gICAg
fQotCi0gICAgbUNvbG9yUmVuZGVyVGFyZ2V0LnNldChtQ29sb3JUZXh0dXJlLCBtdGw6OmtaZXJv
TmF0aXZlTWlwTGV2ZWwsIDAsIG1Db2xvckZvcm1hdCk7Ci0KLSAgICBpZiAoa0lPU3VyZmFjZUZv
cm1hdHNbbUlPU3VyZmFjZUZvcm1hdElkeF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQotICAg
IHsKLSAgICAgICAgLy8gVGhpcyBmb3JtYXQgaGFzIGVtdWxhdGVkIGFscGhhIGNoYW5uZWwuIElu
aXRpYWxpemUgdGV4dHVyZSdzIGFscGhhIGNoYW5uZWwgdG8gMS4wLgotICAgICAgICBjb25zdCBt
dGw6OkZvcm1hdCAmcmdiQ2xlYXJGb3JtYXQgPQotICAgICAgICAgICAgY29udGV4dE10bC0+Z2V0
UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhfVU5PUk0pOwotICAgICAgICBBTkdM
RV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKAotICAgICAgICAgICAgY29u
dGV4dCwgbUNvbG9yVGV4dHVyZSwgcmdiQ2xlYXJGb3JtYXQsCi0gICAgICAgICAgICBtdGw6Oklt
YWdlTmF0aXZlSW5kZXg6OkZyb21CYXNlWmVyb0dMSW5kZXgoZ2w6OkltYWdlSW5kZXg6Ok1ha2Uy
RCgwKSksCi0gICAgICAgICAgICBNVExDb2xvcldyaXRlTWFza0FscGhhKSk7Ci0KLSAgICAgICAg
Ly8gRGlzYWJsZSBzdWJzZXF1ZW50IHJlbmRlcmluZyB0byBhbHBoYSBjaGFubmVsLgotICAgICAg
ICBtQ29sb3JUZXh0dXJlLT5zZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFza0Fs
bCAmICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSkpOwotICAgIH0KLQotICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKLX0KLQotLy8gc3RhdGljCi1ib29sIElPU3VyZmFjZVN1cmZh
Y2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1
dGVNYXAgJmF0dHJpYnMpCi17Ci0gICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IChfX2JyaWRn
ZSBJT1N1cmZhY2VSZWYpKGJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgcGxhbmUgbXVzdCBleGlzdCBm
b3IgdGhpcyBJT1N1cmZhY2UuIElPU3VyZmFjZUdldFBsYW5lQ291bnQgY2FuIHJldHVybiAwIGZv
ciBub24tcGxhbmFyCi0gICAgLy8gaW9TdXJmYWNlcyBidXQgd2Ugd2lsbCB0cmVhdCBub24tcGxh
bmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCi0gICAgc2l6ZV90IHN1cmZhY2VQbGFuZUNv
dW50ID0gc3RkOjptYXgoc2l6ZV90KDEpLCBJT1N1cmZhY2VHZXRQbGFuZUNvdW50KGlvU3VyZmFj
ZSkpOwotICAgIEVHTEF0dHJpYiBwbGFuZSAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9JT1NV
UkZBQ0VfUExBTkVfQU5HTEUpOwotICAgIGlmIChwbGFuZSA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlIHdpZHRoIGhlaWdodCBzcGVjaWZpZWQgbXVzdCBi
ZSBhdCBsZWFzdCAoMSwgMSkgYW5kIGF0IG1vc3QgdGhlIHBsYW5lIHNpemUKLSAgICBFR0xBdHRy
aWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdMX1dJRFRIKTsKLSAgICBFR0xBdHRyaWIgaGVpZ2h0
ID0gYXR0cmlicy5nZXQoRUdMX0hFSUdIVCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoaW9TdXJmYWNl
LCBwbGFuZSkgfHwKLSAgICAgICAgaGVpZ2h0IDw9IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90Piho
ZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoaXMgSU9T
dXJmYWNlIGZvcm1hdAotICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0
KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7Ci0gICAgRUdMQXR0cmliIHR5cGUg
ICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7Ci0KLSAgICBp
bnQgZm9ybWF0SW5kZXggPQotICAgICAgICBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoc3RhdGlj
X2Nhc3Q8R0xlbnVtPihpbnRlcm5hbEZvcm1hdCksIHN0YXRpY19jYXN0PEdMZW51bT4odHlwZSkp
OwotCi0gICAgaWYgKGZvcm1hdEluZGV4IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmb3JtYXQgbWF0Y2hlcyB0aGlzIElP
U3VyZmFjZSBwbGFuZQotICAgIGlmIChJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5l
KGlvU3VyZmFjZSwgcGxhbmUpICE9Ci0gICAgICAgIGtJT1N1cmZhY2VGb3JtYXRzW2Zvcm1hdElu
ZGV4XS5jb21wb25lbnRCeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgKaW5k
ZXggNjJmOTZlZTI4NWRiMmYzYWQ5NjM1NGFkMDMzNzk5YjMwYzY4MDE3Ny4uZjRiY2FlOTBlMzFi
OTkyMGM0OGEyOTQwZjBiZTY1YWVlODE2M2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5o
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgbXRsCiAKIC8vIENvbW1vbiBjbGFzcyB0byBiZSB1c2VkIGJ5IGJvdGggU3lu
Y0ltcGwgYW5kIEVHTFN5bmNJbXBsLgogLy8gTk9URTogU2hhcmVkRXZlbnQgaXMgb25seSBkZWNs
YXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KwotI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJ
TEFCTEUKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQp
CiBjbGFzcyBTeW5jCiB7CiAgIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgU3luYwog
ICAgIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4gbUN2OwogICAgIHN0
ZDo6c2hhcmVkX3B0cjxzdGQ6Om11dGV4PiBtTG9jazsKIH07Ci0jZWxzZSAgIC8vICNpZiBBTkdM
RV9NVExfRVZFTlRfQVZBSUxBQkxFCisjZWxzZSAgIC8vICNpZiBkZWZpbmVkKF9fSVBIT05FXzEy
XzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCiBjbGFzcyBTeW5jCiB7CiAgIHB1YmxpYzoKQEAg
LTkwLDcgKzkwLDcgQEAgY2xhc3MgU3luYwogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
U3RvcDsKICAgICB9CiB9OwotI2VuZGlmICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorI2VuZGlmICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFD
XzEwXzE0KQogfSAgLy8gbmFtZXNwYWNlIG10bAogCiBjbGFzcyBGZW5jZU5WTXRsIDogcHVibGlj
IEZlbmNlTlZJbXBsCkBAIC05OCw5ICs5OCw3IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMg
RmVuY2VOVkltcGwKICAgcHVibGljOgogICAgIEZlbmNlTlZNdGwoKTsKICAgICB+RmVuY2VOVk10
bCgpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpIG92ZXJyaWRlOwotCiAgICAgYW5nbGU6OlJlc3VsdCBzZXQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsIEdMZW51bSBjb25kaXRpb24pIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1
bHQgdGVzdChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0xib29sZWFuICpvdXRGaW5pc2hl
ZCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpIG92ZXJyaWRlOwpAQCAtMTUyLDYgKzE1MCw4IEBAIGNsYXNzIEVHTFN5bmNNdGwg
ZmluYWwgOiBwdWJsaWMgRUdMU3luY0ltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGZsYWdzKSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25zdCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKIAorICAgIGVn
bDo6RXJyb3IgZHVwTmF0aXZlRmVuY2VGRChjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVH
TGludCAqcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKKwogICBwcml2YXRlOgogICAgIG10bDo6U3lu
YyBtU3luYzsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCmluZGV4IGRmZjgwMDMxMjBh
OGE2Y2U0NjJiNTA2ZWY2NTc1NWI3MjRmMWYyNjIuLmY4ZjNlZTY5Nzk4YmIxYzI4ZjNlMmRhMTk1
Njk2NTI5YjdlODBjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjIsNyArMjIsNyBAQCBuYW1lc3BhY2Ug
cngKIG5hbWVzcGFjZSBtdGwKIHsKIC8vIFNoYXJlZEV2ZW50IGlzIG9ubHkgYXZhaWxhYmxlIG9u
IGlPUyAxMi4wKyBvciBtYWMgMTAuMTQrCi0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQor
I2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKIFN5bmM6
OlN5bmMoKSB7fQogU3luYzo6flN5bmMoKSB7fQogCkBAIC04Nyw3ICs4Nyw3IEBAIGFuZ2xlOjpS
ZXN1bHQgU3luYzo6Y2xpZW50V2FpdChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIC8vIG9u
RGVzdHJveSgpLCBidXQgdGhlIGNhbGxiYWNrIG1pZ2h0IHN0aWxsIG5vdCBiZSBmaXJlZCB5ZXQu
CiAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlPiBjdlJlZiA9IG1D
djsKICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjptdXRleD4gbG9ja1JlZiAgICAgICAgICAgID0g
bUxvY2s7Ci0KKyNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCiAgICAgQXV0b09iakNPYmo8
TVRMU2hhcmVkRXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9CiAgICAgICAgIGNvbnRleHRN
dGwtPmdldERpc3BsYXkoKS0+Z2V0T3JDcmVhdGVTaGFyZWRFdmVudExpc3RlbmVyKCk7CiAgICAg
W21NZXRhbFNoYXJlZEV2ZW50LmdldCgpIG5vdGlmeUxpc3RlbmVyOmV2ZW50TGlzdGVuZXIKQEAg
LTEwNiw2ICsxMDYsNyBAQCBhbmdsZTo6UmVzdWx0IFN5bmM6OmNsaWVudFdhaXQoQ29udGV4dE10
bCAqY29udGV4dE10bCwKIAogICAgIEFTU0VSVChtTWV0YWxTaGFyZWRFdmVudC5nZXQoKS5zaWdu
YWxlZFZhbHVlID49IG1TZXRDb3VudGVyKTsKICAgICAqb3V0UmVzdWx0ID0gR0xfQ09ORElUSU9O
X1NBVElTRklFRDsKKyNlbmRpZgogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQpAQCAtMTE4LDcgKzExOSw3IEBAIGFuZ2xlOjpSZXN1bHQgU3luYzo6Z2V0U3RhdHVzKGJv
b2wgKnNpZ25hbGVkKQogICAgICpzaWduYWxlZCA9IG1NZXRhbFNoYXJlZEV2ZW50LmdldCgpLnNp
Z25hbGVkVmFsdWUgPj0gbVNldENvdW50ZXI7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQotI2VuZGlmICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorI2Vu
ZGlmICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0
KQogfSAgLy8gbmFtZXNwYWNlIG10bAogCiAvLyBGZW5jZU5WTXRsIGltcGxlbWVudGF0aW9uCkBA
IC0xMjgsNyArMTI5LDggQEAgRmVuY2VOVk10bDo6fkZlbmNlTlZNdGwoKSB7fQogCiB2b2lkIEZl
bmNlTlZNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBt
U3luYy5vbkRlc3Ryb3koKTsKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuOwogfQog
CiBhbmdsZTo6UmVzdWx0IEZlbmNlTlZNdGw6OnNldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgR0xlbnVtIGNvbmRpdGlvbikKQEAgLTMwNyw0ICszMDksMTAgQEAgZWdsOjpFcnJvciBFR0xT
eW5jTXRsOjpnZXRTdGF0dXMoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQgKm91
dFN0YXR1cykKICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CiB9CiAKK2VnbDo6RXJyb3IgRUdM
U3luY010bDo6ZHVwTmF0aXZlRmVuY2VGRChjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVH
TGludCAqcmVzdWx0KSBjb25zdAoreworICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGVn
bDo6RWdsQmFkRGlzcGxheSgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwu
aAppbmRleCA1YzIxNDFiZDBiYWM3NzA5MjVkN2U5ZjYxMTQ5YWY2NWVjNzkxYmRjLi41ZjRiMmQ0
MGY3MDNlNDdlZDkxZmI5YjlkNzgwYzM1NjI5YzRiOGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9U
ZXh0dXJlTXRsLmgKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJjb21tb24vUGFja2VkRW51
bXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9UZXh0dXJlSW1wbC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oIgorI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCi0KIG5hbWVzcGFjZSByeAogewogCkBA
IC0zMiw2ICszMiw4IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKIHsK
ICAgcHVibGljOgogICAgIFRleHR1cmVNdGwoY29uc3QgZ2w6OlRleHR1cmVTdGF0ZSAmc3RhdGUp
OworICAgIC8vIFRleHR1cmUgIHZpZXcKKyAgICBUZXh0dXJlTXRsKGNvbnN0IFRleHR1cmVNdGwg
Jm10bCwgR0xlbnVtIGZvcm1hdCk7CiAgICAgflRleHR1cmVNdGwoKSBvdmVycmlkZTsKICAgICB2
b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAKQEAg
LTE5Myw2ICsxOTUsNyBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiAg
ICAgSW1hZ2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24oY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgpOwogICAgIFJlbmRlclRhcmdldE10bCAmZ2V0UmVuZGVyVGFyZ2V0
KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KTsKICAgICBib29sIGlzSW5kZXhXaXRo
aW5NaW5NYXhMZXZlbHMoY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgpIGNvbnN0Owor
ICAgIG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgpOwogCiAgICAgLy8gSWYgbGV2ZWxzID0gMCwgdGhpcyBmdW5jdGlv
biB3aWxsIGNyZWF0ZSBmdWxsIG1pcG1hcHMgdGV4dHVyZS4KICAgICBhbmdsZTo6UmVzdWx0IHNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtMzEyLDggKzMxNSw5
IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlTWlwbWFwQ1BVKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIAogICAg
IG10bDo6Rm9ybWF0IG1Gb3JtYXQ7CisgICAgU3VyZmFjZU10bFByb3RvY29sICptQm91bmRTdXJm
YWNlID0gbmlsOwogICAgIC8vIFRoZSByZWFsIHRleHR1cmUgdXNlZCBieSBNZXRhbCBkcmF3IGNh
bGxzLgotICAgIG10bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZTsKKyAgICBtdGw6OlRleHR1
cmVSZWYgbU5hdGl2ZVRleHR1cmUgICAgICAgICA9IG5pbDsKICAgICBpZDxNVExTYW1wbGVyU3Rh
dGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5pbDsKIAogICAgIC8vIE51bWJlciBvZiBzbGljZXMK
QEAgLTMyMywxOCArMzI3LDE0IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUlt
cGwKICAgICAvLyBPbmNlIHRoZSBpbWFnZXMgYXJyYXkgaXMgY29tcGxldGUsIHRoZXkgd2lsbCBi
ZSB0cmFuc2ZlcnJlZCB0byByZWFsIHRleHR1cmUgb2JqZWN0LgogICAgIC8vIE5PVEU6CiAgICAg
Ly8gIC0gVGhlIHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBjb25maWd1cmVkIGJhc2Ug
bGV2ZWwgKyBhY3R1YWwgbmF0aXZlIGxldmVsCi0gICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVy
ZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVzIGluIHRoZSBtVGV4SW1hZ2VEZWZzIHRhYmxlLCBv
bmUgZm9yIGVhY2gKLSAgICAvLyAgZmFjZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBDdWJlIG1hcCdz
IGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2ZWwuCisgICAgLy8gIC0gRm9yIEN1
YmUgbWFwLCB0aGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVzIGluIHRoZSBtYXAgdGFibGUs
IG9uZSBmb3IgZWFjaCBmYWNlLiBUaGlzIGlzCisgICAgLy8gIGJlY2F1c2UgdGhlIEN1YmUgbWFw
J3MgaW1hZ2UgaXMgZGVmaW5lZCBwZXIgZmFjZSAmIHBlciBsZXZlbC4KICAgICAvLyAgLSBGb3Ig
b3RoZXIgdGV4dHVyZSB0eXBlcywgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBlbnRyeSBpbiB0aGUg
bWFwIHRhYmxlLiBBbGwgb3RoZXIgdGV4dHVyZXMKICAgICAvLyAgZXhjZXB0IEN1YmUgbWFwIGhh
cyB0ZXh0dXJlIGltYWdlIGRlZmluZWQgcGVyIGxldmVsIChhbGwgc2xpY2VzIGluY2x1ZGVkKS4K
KyAgICAvLyAgLSBUaGVzZSB0aHJlZSB2YXJpYWJsZXMnIHNlY29uZCBkaW1lbnNpb24gYXJlIGlu
ZGV4ZWQgYnkgaW1hZ2UgaW5kZXggKGJhc2UgbGV2ZWwgaW5jbHVkZWQpLgogICAgIHN0ZDo6bWFw
PGludCwgZ2w6OlRleExldmVsQXJyYXk8SW1hZ2VEZWZpbml0aW9uTXRsPj4gbVRleEltYWdlRGVm
czsKLQotICAgIC8vIFJlbmRlciBUYXJnZXQgcGVyIHNsaWNlL2RlcHRoL2N1YmUgZmFjZS4KLSAg
ICAvLyAtIEZvciAyRCB0ZXh0dXJlOiBUaGVyZSB3aWxsIGJlIG9uZSBrZXkgZW50cnkgaW4gdGhl
IG1hcC4KLSAgICAvLyAtIEZvciBDdWJlIG1hcDogVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5
IGVudHJpZXMuCi0gICAgLy8gLSBGb3IgYXJyYXkvM0QgdGV4dHVyZTogVGhlcmUgd2lsbCBiZSBh
dCBtb3N0IHNsaWNlcy9kZXB0aHMgbnVtYmVyIG9mIGtleSBlbnRyaWVzLgotICAgIC8vIC0gVGhl
IHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBjb25maWd1cmVkIGJhc2UgbGV2ZWwgKyBh
Y3R1YWwgbmF0aXZlIGxldmVsCiAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxS
ZW5kZXJUYXJnZXRNdGw+PiBtUGVyTGF5ZXJSZW5kZXJUYXJnZXRzOworICAgIHN0ZDo6bWFwPGlu
dCwgZ2w6OlRleExldmVsQXJyYXk8bXRsOjpUZXh0dXJlUmVmPj4gbUltcGxpY2l0TVNUZXh0dXJl
czsKIAogICAgIC8vIE1pcG1hcCB2aWV3cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGln
bm9yZWQgYmFzZSBsZXZlbCk6CiAgICAgbXRsOjpOYXRpdmVUZXhMZXZlbEFycmF5IG1OYXRpdmVM
ZXZlbFZpZXdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQppbmRleCA2MjNjMTA0
YzllOGY3MGI5MzgyNGZjNDlmNDVmOWIyN2Y2OGQyMTYwLi4zYjFjOGFmNzFlYjM1OGU3ZmFmOGEw
Y2Q0YzRhMGY0YThmNjIwZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQpA
QCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKyNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2FtcGxlck10bC5oIgotI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgpAQCAtNTM0LDYgKzUzNCwxMCBAQCB2b2lkIFRleHR1cmVNdGw6
OnJlbGVhc2VUZXh0dXJlKGJvb2wgcmVsZWFzZUltYWdlcywgYm9vbCByZWxlYXNlVGV4dHVyZU9i
amVjdHNPbgogCiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6OmVuc3VyZVRleHR1cmVDcmVhdGVk
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogeworICAgIGlmIChtQm91bmRTdXJmYWNlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0KICAg
ICBpZiAobU5hdGl2ZVRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CkBAIC0xMjA3LDI1ICsxMjExLDE1IEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVy
ZU10bDo6c2V0QmFzZUxldmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgYmFz
ZUxlCiAKIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiB7Ci0gICAgcmVsZWFzZVRl
eHR1cmUodHJ1ZSk7Ci0KLSAgICBhdXRvIHBCdWZmZXIgICAgID0gR2V0SW1wbEFzPE9mZnNjcmVl
blN1cmZhY2VNdGw+KHN1cmZhY2UpOwotICAgIG1OYXRpdmVUZXh0dXJlICAgPSBwQnVmZmVyLT5n
ZXRDb2xvclRleHR1cmUoKTsKLSAgICBtRm9ybWF0ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29s
b3JGb3JtYXQoKTsKLSAgICBnbDo6RXh0ZW50cyBzaXplID0gbU5hdGl2ZVRleHR1cmUtPnNpemVB
dDAoKTsKLSAgICBtSXNQb3cyICAgICAgICAgID0gZ2w6OmlzUG93MihzaXplLndpZHRoKSAmJiBn
bDo6aXNQb3cyKHNpemUuaGVpZ2h0KSAmJiBnbDo6aXNQb3cyKHNpemUuZGVwdGgpOwotICAgIEFO
R0xFX1RSWShlbnN1cmVTYW1wbGVyU3RhdGVDcmVhdGVkKGNvbnRleHQpKTsKLQotICAgIC8vIFRl
bGwgY29udGV4dCB0byByZWJpbmQgdGV4dHVyZXMKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
ID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwotICAgIGNvbnRleHRNdGwtPmludmFsaWRhdGVDdXJy
ZW50VGV4dHVyZXMoKTsKLQorICAgIElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAo
SU9TdXJmYWNlU3VyZmFjZU10bCAqKW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKyAgICBtQm91bmRT
dXJmYWNlICAgICAgICAgICAgICAgICAgID0gc3VyZmFjZU10bDsKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6cmVsZWFz
ZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIHJlbGVhc2VUZXh0
dXJlKHRydWUpOworICAgIG1Cb3VuZFN1cmZhY2UgPSBuaWw7CisKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTEyMzUsNiArMTIyOSwxMiBAQCBhbmdsZTo6UmVz
dWx0IFRleHR1cmVNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAq
KnJ0T3V0KQogeworICAgIGlmIChtQm91bmRTdXJmYWNlKQorICAgIHsKKyAgICAgICAgQU5HTEVf
VFJZKAorICAgICAgICAgICAgbUJvdW5kU3VyZmFjZS0+Z2V0QXR0YWNobWVudFJlbmRlclRhcmdl
dChjb250ZXh0LCBiaW5kaW5nLCBpbWFnZUluZGV4LCBzYW1wbGVzLCBydE91dCkpOworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQogICAgIEFOR0xFX1RSWShl
bnN1cmVUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7CiAKICAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRs
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
VHJhbnNmb3JtRmVlZGJhY2tNdGwuaAppbmRleCBhYTQ1YmY5NGUwMjQ5YjExNmE4YjE0ZmVkZGZj
ZWEzZDZmMjVlN2NiLi4yMGEyYzIwZjlkYjhiZWZhZDgzMWVhZTAwYjlhNDYxMTE4NzBjZTAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaApAQCAt
MTAsMTIgKzEwLDIwIEBACiAjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1RSQU5TRk9S
TUZFRURCQUNLTVRMX0hfCiAjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1RSQU5TRk9S
TUZFRURCQUNLTVRMX0hfCiAKKyNpbmNsdWRlIDxNZXRhbC9NZXRhbC5oPgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL1RyYW5zZm9ybUZlZWRiYWNrSW1wbC5oIgorI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9yZXNvdXJjZXMuaCIKIAotbmFtZXNwYWNlIHJ4Cit0eXBlZGVmIHVpbnQ2
NF90IE10bERldmljZVNpemU7CisKK25hbWVzcGFjZSBnbAogeworY2xhc3MgUHJvZ3JhbVN0YXRl
OworfSAgLy8gbmFtZXNwYWNlIGdsCiAKLWNsYXNzIENvbnRleHRNdGw7CituYW1lc3BhY2UgcngK
K3sKIAogY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwgOiBwdWJsaWMgVHJhbnNmb3JtRmVlZGJh
Y2tJbXBsCiB7CkBAIC0zMiwxNyArNDAsMjMgQEAgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwg
OiBwdWJsaWMgVHJhbnNmb3JtRmVlZGJhY2tJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcp
IG92ZXJyaWRlOwogCi0gICAgLy8gUGFyYW1zOgotICAgIC8vIC0gZHJhd0NhbGxGaXJzdFZlcnRl
eCBpcyBmaXJzdCB2ZXJ0ZXggdXNlZCBieSBnbERyYXdBcnJheXMqLiBUaGlzIGlzIGltcG9ydGFu
dCBiZWNhdXNlCi0gICAgLy8gZ2xfVmVydGV4SW5kZXggaXMgc3RhcnRpbmcgZnJvbSB0aGlzLgot
ICAgIC8vIC0gc2tpcHBlZFZlcnRpY2VzIGlzIG51bWJlciBvZiBza2lwcGVkIHZlcnRpY2VzICh1
c2VmdWwgZm9yIG11bHRpcGxlIG1ldGFsIGRyYXdzIHBlciBHTCBkcmF3Ci0gICAgLy8gY2FsbCku
Ci0gICAgYW5nbGU6OlJlc3VsdCBnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmly
c3RWZXJ0ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNr
aXBwZWRWZXJ0aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAqb2Zmc2V0c091dCk7CisgICAgdm9pZCBnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKm9mZnNldHNPdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3Q7CisKKyAg
ICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZn
ZXRCdWZmZXJIYW5kbGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtQnVmZmVySGFu
ZGxlczsKKyAgICB9CiAKICAgcHJpdmF0ZToKKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+IG1CdWZmZXJIYW5kbGVzOworICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNBcnJheTxNdGxEZXZpY2VTaXplPiBtQnVmZmVyT2Zmc2V0czsKKyAgICBn
bDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNp
emVzOworCisgICAgLy8gQWxpZ25lZCBvZmZzZXQgZm9yIGVtdWxhdGlvbi4gQ291bGQgYmUgc21h
bGxlciB0aGFuIG9mZnNldC4KKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8
TXRsRGV2aWNlU2l6ZT4gbUFsaWduZWRCdWZmZXJPZmZzZXRzOwogfTsKIAogfSAgLy8gbmFtZXNw
YWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0KaW5kZXggZDk0MGMzZDU2YTE0YmRhMzY0MTBjZGE2YmFmOTY4YzFkZDc1MGI2NS4uZGU3YTkw
OTM1N2I2OTI0ZjlkMGViNWJjMDJkMjI3ZTJmNjM0MjA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRi
YWNrTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5tbQpAQCAtOCwxOCArOCwyNyBAQAogLy8K
IAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRs
LmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCisjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUXVlcnlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Y29tbW9uLmgiCiAKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvUXVlcnkuaCIKLSNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCi0jaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAogVHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja1N0YXRlICZzdGF0ZSkKLSAgICA6IFRyYW5z
Zm9ybUZlZWRiYWNrSW1wbChzdGF0ZSkKKyAgICA6IFRyYW5zZm9ybUZlZWRiYWNrSW1wbChzdGF0
ZSksCisgICAgICBtQnVmZmVySGFuZGxlc3t9LAorICAgICAgbUJ1ZmZlck9mZnNldHN7fSwKKyAg
ICAgIG1CdWZmZXJTaXplc3t9LAorICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRze30KIHt9CiAK
IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJhbnNmb3JtRmVlZGJhY2tNdGwoKSB7fQpAQCAtMjcs
NDAgKzM2LDc5IEBAIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJhbnNmb3JtRmVlZGJhY2tNdGwo
KSB7fQogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4oY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlKQogewotICAgIG10bDo6R2V0SW1w
bChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0LCB0aGlzKTsKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8v
IE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisgICAgaWYgKCFjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsK
KyAgICB9CiAKLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgY29uc3Qg
Z2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUo
KS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgIEFTU0VSVChleGVjdXRhYmxlKTsKKyAgICBz
aXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlckNvdW50KCk7CisKKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlcklu
ZGV4IDwgeGZiQnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisgICAgeworICAgICAgICBjb25z
dCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcgPSBtU3RhdGUu
Z2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgIEFTU0VSVChiaW5kaW5nLmdl
dCgpKTsKKworICAgICAgICBCdWZmZXJNdGwgKmJ1ZmZlck10bCA9IG10bDo6R2V0SW1wbChiaW5k
aW5nLmdldCgpKTsKKworICAgICAgICBhc3NlcnQoYnVmZmVyTXRsKTsKKyAgICAgICAgbUJ1ZmZl
ck9mZnNldHNbYnVmZmVySW5kZXhdID0gYmluZGluZy5nZXRPZmZzZXQoKTsKKyAgICAgICAgbUJ1
ZmZlclNpemVzW2J1ZmZlckluZGV4XSAgID0gZ2w6OkdldEJvdW5kQnVmZmVyQXZhaWxhYmxlU2l6
ZShiaW5kaW5nKTsKKyAgICAgICAgbUJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdID0gYnVmZmVy
TXRsOworCisgICAgICAgIEFTU0VSVChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpOworICAgICAgICBjb25zdCBN
dGxEZXZpY2VTaXplIG9mZnNldEFsaWdubWVudCA9IG10bDo6a1VuaWZvcm1CdWZmZXJTZXR0aW5n
T2Zmc2V0TWluQWxpZ25tZW50OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBv
c3NpYmxlIHVuZGVyL292ZXJmbG93IHdpdGggYmluZGluZyBzaXplLgorICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihNdGxEZXZpY2VTaXplKSA+PSBzaXplb2YoYmluZGluZy5nZXRTaXplKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICJNdGxEZXZpY2VTaXplIHRvbyBzbWFsbCIpOworCisg
ICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSByZXF1
ZXN0ZWQgb2Zmc2V0IHdoaWxlIHJlbWFpbmluZyBhbGlnbmVkLgorICAgICAgICBtQWxpZ25lZEJ1
ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdID0KKyAgICAgICAgICAgIChtQnVmZmVyT2Zmc2V0c1ti
dWZmZXJJbmRleF0gLyBvZmZzZXRBbGlnbm1lbnQpICogb2Zmc2V0QWxpZ25tZW50OworICAgIH0K
KworICAgIHJldHVybiBjb250ZXh0TXRsLT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVm
ZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVzKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1G
ZWVkYmFja010bDo6ZW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogeworICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgLy8gTm90IGN1
cnJlbnRseSBzdXBwb3J0ZWQgd2l0aCBtc2wgY29tcGlsZXIKKyAgICBpZiAoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5h
YmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0K
KworICAgIC8vIElmIHRoZXJlJ3MgYW4gYWN0aXZlIHRyYW5zZm9ybSBmZWVkYmFjayBxdWVyeSwg
YWNjdW11bGF0ZSB0aGUgcHJpbWl0aXZlcyBkcmF3bi4KICAgICBjb25zdCBnbDo6U3RhdGUgJmds
U3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwogICAgIGdsOjpRdWVyeSAqdHJhbnNmb3JtRmVl
ZGJhY2tRdWVyeSA9CiAgICAgICAgIGdsU3RhdGUuZ2V0QWN0aXZlUXVlcnkoZ2w6OlF1ZXJ5VHlw
ZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbik7CisKICAgICBpZiAodHJhbnNm
b3JtRmVlZGJhY2tRdWVyeSkKICAgICB7Ci0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1G
ZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKyAgICAgICAg
bXRsOjpHZXRJbXBsKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkpLT5vblRyYW5zZm9ybUZlZWRiYWNr
RW5kKG1TdGF0ZS5nZXRQcmltaXRpdmVzRHJhd24oKSk7CiAgICAgfQotCi0gICAgbXRsOjpHZXRJ
bXBsKGNvbnRleHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29udGV4dCwgdGhpcyk7
Ci0KKyAgICBjb250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZl
ZWRiYWNrTXRsOjpwYXVzZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICAvLyBX
aGVuIFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1ZmZlcnMgdG8gYmUgYm91bmQg
Zm9yIG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKLSAgICAvLyBvblRyYW5zZm9ybUZl
ZWRiYWNrSW5hY3RpdmUoKSB0byBpc3N1ZSBhIHN5bmMuCi0gICAgbXRsOjpHZXRJbXBsKGNvbnRl
eHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29udGV4dCwgdGhpcyk7Ci0KLSAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICByZXR1cm4gY29udGV4dE10bC0+b25QYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJh
Y2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBtdGw6Okdl
dEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7
Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgQ29udGV4dE10bCAq
Y29udGV4dE10bCAgICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdl
dFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoZXhlY3V0YWJsZSk7
CisgICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50ID0gZXhlY3V0YWJsZS0+Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudCgpOworICAgIHJldHVybiBjb250ZXh0TXRsLT5vbkJlZ2luVHJhbnNm
b3JtRmVlZGJhY2soeGZiQnVmZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVzKTsKIH0KIAogYW5nbGU6
OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4ZWRCdWZmZXIoCkBAIC02OCwx
NyArMTE2LDIwIEBAIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRl
eGVkQnVmZmVyKAogICAgIHNpemVfdCBpbmRleCwKICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGlu
Z1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Ig
bm93CisgICAgVU5JTVBMRU1FTlRFRCgpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpnZXRCdWZm
ZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHNraXBwZWRWZXJ0aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCkKK3ZvaWQgVHJhbnNmb3Jt
RmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHJhd0NhbGxG
aXJzdFZlcnRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAqb2Zmc2V0c091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG9mZnNldHNTaXplKSBjb25zdAogewotICAgIGludDY0X3QgdmVydGlj
ZXNEcmF3biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG1TdGF0ZS5nZXRWZXJ0aWNlc0RyYXduKCkp
ICsgc2tpcHBlZFZlcnRpY2VzOworICAgIGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHTHNpemVpcHRyIHZlcnRpY2VzRHJhd24gPSBtU3RhdGUuZ2V0VmVydGlj
ZXNEcmF3bigpOwogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdMc2l6ZWk+ICZidWZmZXJTdHJpZGVz
ID0KICAgICAgICAgbVN0YXRlLmdldEJvdW5kUHJvZ3JhbSgpLT5nZXRUcmFuc2Zvcm1GZWVkYmFj
a1N0cmlkZXMoKTsKICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUg
PSBjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC04Nywy
NyArMTM4LDI1IEBAIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZl
ck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKIAogICAgIEFTU0VSVCh4ZmJCdWZmZXJD
b3VudCA+IDApOwogCisgICAgLy8gVGhlIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoZSBvZmZz
ZXRzIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICBUaGUgbWF4aW11bSBwb3NzaWJsZQorICAgIC8v
IG51bWJlciBvZiBvdXRwdXRzIGlzIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlMuCisgICAgQVNTRVJUKG9mZnNldHNTaXplID49IHhmYkJ1ZmZlckNvdW50
KTsKKwogICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCB4ZmJC
dWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKICAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpPZmZz
ZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYnVmZmVyQmluZGluZyA9Ci0gICAgICAgICAg
ICBtU3RhdGUuZ2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7Ci0KLSAgICAgICAgQVNTRVJU
KChidWZmZXJCaW5kaW5nLmdldE9mZnNldCgpICUgNCkgPT0gMCk7Ci0KLSAgICAgICAgLy8gT2Zm
c2V0IHRoZSBnbF9WZXJ0ZXhJbmRleCBieSBkcmF3Q2FsbEZpcnN0VmVydGV4CisgICAgICAgIGlu
dDY0X3Qgb2Zmc2V0RnJvbURlc2NyaXB0b3IgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
NjRfdD4obUJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdIC0gbUFsaWduZWRCdWZmZXJPZmZzZXRz
W2J1ZmZlckluZGV4XSk7CiAgICAgICAgIGludDY0X3QgZHJhd0NhbGxWZXJ0ZXhPZmZzZXQgPSBz
dGF0aWNfY2FzdDxpbnQ2NF90Pih2ZXJ0aWNlc0RyYXduKSAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXg7
CiAKICAgICAgICAgaW50NjRfdCB3cml0ZU9mZnNldCA9Ci0gICAgICAgICAgICAoYnVmZmVyQmlu
ZGluZy5nZXRPZmZzZXQoKSArIGRyYXdDYWxsVmVydGV4T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1ti
dWZmZXJJbmRleF0pIC8KKyAgICAgICAgICAgIChvZmZzZXRGcm9tRGVzY3JpcHRvciArIGRyYXdD
YWxsVmVydGV4T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0pIC8KICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KHNpemVvZih1aW50MzJfdCkpOwogCiAgICAgICAgIG9m
ZnNldHNPdXRbYnVmZmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4od3JpdGVPZmZzZXQp
OwogCi0gICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAgICAgQU5HTEVfQ0hFQ0tf
R0xfQUxMT0MoY29udGV4dE10bCwgb2Zmc2V0c091dFtidWZmZXJJbmRleF0gPT0gd3JpdGVPZmZz
ZXQpOworICAgICAgICAvLyBBc3NlcnQgb24gb3ZlcmZsb3cuICBGb3Igbm93LCBzdXBwb3J0IHRy
YW5zZm9ybSBmZWVkYmFjayB1cCB0byAyR0IuCisgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1
ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNldCk7CiAgICAgfQotCi0gICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhB
cnJheU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1ZlcnRleEFycmF5TXRsLmgKaW5kZXggYzJmYjg0NmQ0MWQ5NDEyYTAwZjg3YTM3MDgz
YzU1YWRiYWM0MWRlZS4uZmU2YjVmN2E5ZTkwNmYxOTg3OTNlYWFjZDQ3NDcyNzgxZTI0Y2I3NSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1ZlcnRleEFycmF5TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgKQEAgLTQzLDggKzQzLDkg
QEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMpOwogCiAg
ICAgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB0aGUgaW5w
dXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKLSAgICAvLyBtdGw6OlZlcnRleERl
c2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25s
eSByZXR1cm5lZCB3aGVuIHRoZQotICAgIC8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorICAgIC8v
IG10bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhpcyB0
eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKyAgICAvLyBwcm9ncmFtIGlzIGNo
YW5nZWQuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlIHZl
cnRleCBhcnJheSBpcyBkaXJ0eS4KICAgICBhbmdsZTo6UmVzdWx0IHNldHVwRHJhdyhjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCkBAIC01MiwxMSArNTMsMjQgQEAgY2xhc3Mg
VmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCiAKICAgICBhbmdsZTo6UmVz
dWx0IGdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmlt
aXRpdmVNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3Vy
Y2VQb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJS
ZWYgKmlkeEJ1ZmZlck91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRleEJ1ZmZlckNvdW50T3V0KTsK
KworICAgIC8vIFVzZSB0byBlbXVsYXRlIGluc3RhbmNlZCBkcmF3IGZvciBpbnN0YW5jZSA8aW5z
dGFuY2VJZD4uCisgICAgLy8gVGhlIHR5cGljYWwgY2FsbCBzZXF1ZW5jZSBmb3IgZW11bGF0ZWQg
aW5zdGFuY2UgZHJhdyBpczoKKyAgICAvLyAtIHNldHVwRHJhdygpCisgICAgLy8gLSBkcmF3Lgor
ICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoMSkKKyAgICAvLyAtIGRyYXcuCisgICAg
Ly8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChuKQorICAgIC8vIC0gZHJhdy4KKyAgICAvLyAt
IGVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKDApCisgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3
U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0
YW5jZUlkKTsKIAogICBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4
dCk7CkBAIC03MiwxNSArODYsMTkgQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVy
dGV4QXJyYXlJbXBsCiAKICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZm
ZXJPZmZzZXRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICppbmRleEJ1ZmZlckNvdW50T3V0KTsKICAgICBhbmdsZTo6UmVzdWx0IHN0cmVhbUluZGV4QnVm
ZmVyRnJvbUNsaWVudChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGlu
ZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZm
ZXJSZWYgKmlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp
ZHhCdWZmZXJDb3VudE91dCk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZl
ckdQVShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKQEAgLTEx
Nyw3ICsxMzUsMjAgQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJ
bXBsCiAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRlck10bCAqPiBtQ3VycmVudEFycmF5
QnVmZmVyczsKICAgICBnbDo6QXR0cmliQXJyYXk8U2ltcGxlV2Vha0J1ZmZlckhvbGRlck10bD4g
bUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyczsKICAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0czsKKworICAgIC8vIFNpemUgdG8gYmUgdXBsb2Fk
ZWQgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEuIFVzZWQgZm9yIGNsaWVudCB2ZXJ0ZXggYXR0cmli
dXRlJ3MgZGF0YSB0aGF0CisgICAgLy8gaXMgc21hbGwgZW5vdWdoIHRoYXQgd2UgY2FuIHNlbmQg
ZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEgaW5zdGVhZCBvZiBzdHJlYW1pbmcKKyAg
ICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorICAgIGdsOjpBdHRyaWJBcnJheTxzaXplX3Q+IG1DdXJy
ZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXM7CisgICAgLy8gQXJyYXkgb2YgaG9zdCBidWZmZXJzIHN0
b3JpbmcgY29udmVydGVkIGRhdGEgZm9yIGNsaWVudCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNtYWxs
IGVub3VnaC4KKyAgICBnbDo6QXR0cmliQXJyYXk8YW5nbGU6Ok1lbW9yeUJ1ZmZlcj4gbUNvbnZl
cnRlZENsaWVudFNtYWxsQXJyYXlzOworICAgIGdsOjpBdHRyaWJBcnJheTxjb25zdCB1aW50OF90
ICo+IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnM7CisgICAgLy8gTWF4IHNpemUgb2Yg
aW5saW5lIGNvbnN0YW50IGRhdGEgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY2xpZW50IHZlcnRleCBh
dHRyaWJ1dGUuCisgICAgc2l6ZV90IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKworICAgIC8vIFN0cmlk
ZSBwZXIgdmVydGV4IGF0dHJpYnV0ZQogICAgIGdsOjpBdHRyaWJBcnJheTxHTHVpbnQ+IG1DdXJy
ZW50QXJyYXlCdWZmZXJTdHJpZGVzOworICAgIC8vIEZvcm1hdCBwZXIgdmVydGV4IGF0dHJpYnV0
ZQogICAgIGdsOjpBdHRyaWJBcnJheTxjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAqPiBtQ3VycmVu
dEFycmF5QnVmZmVyRm9ybWF0czsKIAogICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZtRGVm
YXVsdEZsb2F0VmVydGV4Rm9ybWF0OwpAQCAtMTI3LDYgKzE1OCw4IEBAIGNsYXNzIFZlcnRleEFy
cmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAogICAgIG10bDo6QnVmZmVyUG9vbCBtRHlu
YW1pY1ZlcnRleERhdGE7CiAgICAgbXRsOjpCdWZmZXJQb29sIG1EeW5hbWljSW5kZXhEYXRhOwog
CisgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1FbXVsYXRlZEluc3RhbmNlQXR0cmliczsKKwog
ICAgIGJvb2wgbVZlcnRleEFycmF5RGlydHkgPSB0cnVlOwogfTsKIH0gIC8vIG5hbWVzcGFjZSBy
eApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLm1tCmluZGV4IGNkOTYxYzE4
MTlkOGFiNzczMWNiYmRhMmYwNTVlZTk0YWZiMmE3YjcuLjAyMTk1ZDgyNjk4MmE1OTFlNDg3OWM0
ZDc0OTI2NmFkMzM2N2Y3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlN
dGwubW0KQEAgLTgsNiArOCw5IEBACiAvLwogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwuaCIKKworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5o
PgorCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKQEAgLTc2LDE1ICs3OSwxNSBAQCBh
bmdsZTo6UmVzdWx0IFN0cmVhbUluZGV4RGF0YShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc291cmNlUG9pbnRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4
VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpidWZmZXJPZmZzZXRPdXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhDb3VudE91dCkKIHsK
ICAgICBkeW5hbWljQnVmZmVyLT5yZWxlYXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOwot
CiAgICAgY29uc3Qgc2l6ZV90IGFtb3VudCA9IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShp
bmRleFR5cGUsIGluZGV4Q291bnQpOwogICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRy
OwotCiAgICAgQU5HTEVfVFJZKAogICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShjb250
ZXh0TXRsLCBhbW91bnQsICZkc3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxscHRy
KSk7CiAKQEAgLTEyMSw2ICsxMjQsNyBAQCBhbmdsZTo6UmVzdWx0IFN0cmVhbUluZGV4RGF0YShD
b250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHsKICAgICAgICAgbWVtY3B5KGRzdCwgc291cmNl
UG9pbnRlciwgYW1vdW50KTsKICAgICB9CisgICAgKmluZGV4Q291bnRPdXQgPSBpbmRleENvdW50
OwogICAgIEFOR0xFX1RSWShkeW5hbWljQnVmZmVyLT5jb21taXQoY29udGV4dE10bCkpOwogCiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtMjA4LDYgKzIxMiwzMCBAQCB2
b2lkIFZlcnRleEFycmF5TXRsOjpyZXNldChDb250ZXh0TXRsICpjb250ZXh0KQogICAgICAgICBm
b3JtYXQgPSAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKICAgICB9CiAKKyAgICBmb3IgKHNp
emVfdCAmaW5saW5lRGF0YVNpemUgOiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzKQorICAg
IHsKKyAgICAgICAgaW5saW5lRGF0YVNpemUgPSAwOworICAgIH0KKworICAgIGZvciAoYW5nbGU6
Ok1lbW9yeUJ1ZmZlciAmY29udmVydGVkQ2xpZW50QXJyYXkgOiBtQ29udmVydGVkQ2xpZW50U21h
bGxBcnJheXMpCisgICAgeworICAgICAgICBjb252ZXJ0ZWRDbGllbnRBcnJheS5jbGVhcigpOwor
ICAgIH0KKworICAgIGZvciAoY29uc3QgdWludDhfdCAqJmNsaWVudFBvaW50ZXIgOiBtQ3VycmVu
dEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorICAgIHsKKyAgICAgICAgY2xpZW50UG9pbnRlciA9
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVh
dHVyZXMoKS5hbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YS5lbmFibGVkKQorICAgIHsKKyAgICAg
ICAgbUlubGluZURhdGFNYXhTaXplID0gbXRsOjprSW5saW5lQ29uc3REYXRhTWF4U2l6ZTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUlubGluZURhdGFNYXhTaXplID0gMDsKKyAg
ICB9CisKICAgICBtVmVydGV4QXJyYXlEaXJ0eSA9IHRydWU7CiB9CiAKQEAgLTMxNSwyMiArMzQz
LDI4IEBAIEFOR0xFX0lOTElORSB2b2lkIFZlcnRleEFycmF5TXRsOjpnZXRWZXJ0ZXhBdHRyaWJG
b3JtYXRBbmRBcnJheVNpemUoY29uc3Qgc2g6OlNoCiB9CiAKIC8vIHZlcnRleERlc2NDaGFuZ2Vk
IGlzIGJvdGggaW5wdXQgYW5kIG91dHB1dCwgdGhlIGlucHV0IHZhbHVlIGlmIGlzIHRydWUsIHdp
bGwgZm9yY2UgbmV3Ci0vLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRl
eERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZQotLy8gdmVy
dGV4IGFycmF5IGlzIGRpcnR5CisvLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlh
IHZlcnRleERlc2NPdXQuIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhY3RpdmUgc2hhZGVy
CisvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisvLyBPdGhlcndpc2UsIGl0IGlzIG9ubHkgcmV0dXJu
ZWQgd2hlbiB0aGUgdmVydGV4IGFycmF5IGlzIGRpcnR5LgogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhB
cnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICp2ZXJ0ZXhEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtdGw6OlZlcnRleERlc2MgKnZlcnRleERlc2NPdXQpCiB7CisgICAgLy8gTk9URSho
cWxlKTogY29uc2lkZXIgb25seSB1cGRhdGluZyBkaXJ0eSBhdHRyaWJ1dGVzCiAgICAgYm9vbCBk
aXJ0eSA9IG1WZXJ0ZXhBcnJheURpcnR5IHx8ICp2ZXJ0ZXhEZXNjQ2hhbmdlZDsKIAogICAgIGlm
IChkaXJ0eSkKICAgICB7CisgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6Okdl
dEltcGwoZ2xDb250ZXh0KTsKKwogICAgICAgICBtVmVydGV4QXJyYXlEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKIAotICAgICAgICBjb25z
dCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCku
Z2V0UHJvZ3JhbSgpLT5nZXRTdGF0ZSgpOworICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1
dGFibGUgKmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1
dGFibGUoKTsKICAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0ZXNNYXNrICZwcm9ncmFtQWN0aXZl
QXR0cmlic01hc2sgPQotICAgICAgICAgICAgZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dy
YW0oKS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKyAg
ICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlID0gZ2xDb250ZXh0LT5n
ZXRTdGF0ZSgpLmdldFByb2dyYW0oKS0+Z2V0U3RhdGUoKTsKIAogICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5nZXRWZXJ0ZXhB
dHRyaWJ1dGVzKCk7CiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhCaW5kaW5n
PiAmYmluZGluZ3MgID0gbVN0YXRlLmdldFZlcnRleEJpbmRpbmdzKCk7CkBAIC0zNjAsOCArMzk0
LDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAm
YmluZGluZyA9IGJpbmRpbmdzW2F0dHJpYi5iaW5kaW5nSW5kZXhdOwogCiAgICAgICAgICAgICBi
b29sIGF0dHJpYkVuYWJsZWQgPSBhdHRyaWIuZW5hYmxlZDsKLSAgICAgICAgICAgIGlmIChhdHRy
aWJFbmFibGVkICYmCi0gICAgICAgICAgICAgICAgKCFtQ3VycmVudEFycmF5QnVmZmVyc1t2XSB8
fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSkpCisgICAgICAg
ICAgICBpZiAoYXR0cmliRW5hYmxlZCAmJiAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0gJiYgIW1D
dXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbdl0pCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgLy8gRGlzYWJsZSBpdCB0byBhdm9pZCBjcmFzaC4KICAgICAgICAgICAgICAgICBh
dHRyaWJFbmFibGVkID0gZmFsc2U7CkBAIC0zNjksMzMgKzQwMiwzMCBAQCBhbmdsZTo6UmVzdWx0
IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
IAogICAgICAgICAgICAgaWYgKCFhdHRyaWJFbmFibGVkKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgIGRlc2Mu
YXR0cmlidXRlc1t2XS5idWZmZXJJbmRleCA9IG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0lu
ZGV4OworICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5vZmZzZXQgICAgICA9IHYg
KiBtdGw6OmtEZWZhdWx0QXR0cmlidXRlU2l6ZTsKICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IGZpbmQgdGhlIGF0dHJpYnV0ZSBoYXZpbmcgdGhlIGV4YWN0IGJpbmRpbmcgbG9jYXRpb24gPSB2
IGluIHRoZSBwcm9ncmFtCiAgICAgICAgICAgICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmll
dmUgaXRzIGNvcmVzcG9uZGluZyBkYXRhIHR5cGU6CiAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiAmcHJvZ3JhbUlucHV0cyA9CiAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW1TdGF0ZS5nZXRQcm9ncmFtSW5wdXRzKCk7CiAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmli
SW5mb0l0ZSA9IHN0ZDo6ZmluZF9pZigKICAgICAgICAgICAgICAgICAgICAgYmVnaW4ocHJvZ3Jh
bUlucHV0cyksIGVuZChwcm9ncmFtSW5wdXRzKSwgW3ZdKGNvbnN0IHNoOjpTaGFkZXJWYXJpYWJs
ZSAmc3YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oc3YubG9jYXRpb24pID09IHY7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiA8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlZhcmlhYmxlQXR0
cmlidXRlQ291bnQoc3YudHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAg
ICAgICAgICAgaWYgKGF0dHJpYkluZm9JdGUgPT0gZW5kKHByb2dyYW1JbnB1dHMpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkgdGhpcyBpcyBh
cnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAwLgotICAgICAgICAgICAgICAgICAgICAvLyBBbHJl
YWR5IGhhbmRsZWQgd2hlbiBlbmNvdW50ZXIgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdWlu
dDMyX3QgYXJyYXlTaXplOwotICAgICAgICAgICAgICAgIE1UTFZlcnRleEZvcm1hdCBmb3JtYXQ7
Ci0KLSAgICAgICAgICAgICAgICBnZXRWZXJ0ZXhBdHRyaWJGb3JtYXRBbmRBcnJheVNpemUoKmF0
dHJpYkluZm9JdGUsICZmb3JtYXQsICZhcnJheVNpemUpOwotCi0gICAgICAgICAgICAgICAgZm9y
ICh1aW50MzJfdCB2YUlkeCA9IHY7IHZhSWR4IDwgdiArIGFycmF5U2l6ZTsgKyt2YUlkeCkKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYXR0cmliSW5mb0l0ZSAhPSBlbmQocHJvZ3JhbUlucHV0cykp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShhdHRy
aWJJbmZvSXRlLT50eXBlKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZhSWR4
XS5vZmZzZXQgICAgICA9IHZhSWR4ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uZm9ybWF0ICAgICAgPSBmb3Jt
YXQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZdLmZvcm1hdCA9IG1EZWZhdWx0SW50VmVydGV4Rm9ybWF0
Lm1ldGFsRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzYy5hdHRyaWJ1dGVzW3ZdLmZvcm1hdCA9IG1EZWZhdWx0VUludFZlcnRleEZvcm1hdC5tZXRh
bEZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3Zd
LmZvcm1hdCA9IG1EZWZhdWx0RmxvYXRWZXJ0ZXhGb3JtYXQubWV0YWxGb3JtYXQ7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNDE3LDE3ICs0
NDcsMzUgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGds
OjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1ti
dWZmZXJJZHhdLnN0ZXBGdW5jdGlvbiA9IE1UTFZlcnRleFN0ZXBGdW5jdGlvblBlclZlcnRleDsK
ICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcFJhdGUgICAg
ID0gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5o
YXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVkKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0g
TVRMVmVydGV4U3RlcEZ1bmN0aW9uUGVySW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgICAgIGRl
c2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigp
OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyBFbXVsYXRlIGluc3RhbmNlIGF0dHJpYnV0ZQor
ICAgICAgICAgICAgICAgICAgICBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMucHVzaF9iYWNrKHYp
OworICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rp
b24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25Db25zdGFudDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMDsKKyAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdHJpZGUgPSBt
Q3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1t2XTsKIAotICAgICAgICAgICAgICAgIGNtZEVuY29k
ZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1t2XS0+Z2V0Q3VycmVudEJ1
ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJPZmZzZXQsIGJ1ZmZlcklkeCk7CisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50QXJyYXlC
dWZmZXJzW3ZdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY21kRW5j
b2Rlci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50
QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXJPZmZzZXQsIGJ1ZmZlcklkeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5v
IGJ1ZmZlciBzcGVjaWZpZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBhcyBpbmxp
bmUgY29uc3RhbnQgZGF0YQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRBcnJh
eUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworICAgICAgICAgICAg
ICAgICAgICBjbWRFbmNvZGVyLT5zZXRWZXJ0ZXhCeXRlcyhtQ3VycmVudEFycmF5SW5saW5lRGF0
YVBvaW50ZXJzW3ZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW3ZdLCBidWZmZXJJZHgpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9ICAvLyBmb3Ig
KHYpCiAgICAgfQogCiAgICAgKnZlcnRleERlc2NDaGFuZ2VkID0gZGlydHk7CkBAIC00MzUsNiAr
NDgzLDQyIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KIAordm9pZCBWZXJ0ZXhBcnJheU10bDo6ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAobXRs
OjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlSWQpCit7CisKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5n
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEJp
bmRpbmc+ICZiaW5kaW5ncyAgPSBtU3RhdGUuZ2V0VmVydGV4QmluZGluZ3MoKTsKKworICAgIGZv
ciAodWludDMyX3QgaW5zdGFuY2VBdHRyaWJJZHggOiBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMp
CisgICAgeworICAgICAgICB1aW50MzJfdCBidWZmZXJJZHggICAgICAgICAgICAgICA9IG10bDo6
a1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsgaW5zdGFuY2VBdHRyaWJJZHg7CisgICAgICAgIGNvbnN0
IGF1dG8gJmF0dHJpYiAgICAgICAgICAgICAgID0gYXR0cmlic1tpbnN0YW5jZUF0dHJpYklkeF07
CisgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0
cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgIHVpbnQzMl90IG9mZnNldCA9CisgICAgICAgICAg
ICBpbnN0YW5jZUlkIC8gYmluZGluZy5nZXREaXZpc29yKCkgKiBtQ3VycmVudEFycmF5QnVmZmVy
U3RyaWRlc1tpbnN0YW5jZUF0dHJpYklkeF07CisgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVm
ZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCAr
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbaW5zdGFu
Y2VBdHRyaWJJZHhdKTsKKworICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4QnVmZmVy
KG1DdXJyZW50QXJyYXlCdWZmZXJzW2luc3RhbmNlQXR0cmliSWR4XS0+Z2V0Q3VycmVudEJ1ZmZl
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgYnVm
ZmVySWR4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIE5vIGJ1ZmZlciBzcGVjaWZpZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBh
cyBpbmxpbmUgY29uc3RhbnQgZGF0YQorICAgICAgICAgICAgQVNTRVJUKG1DdXJyZW50QXJyYXlJ
bmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIDw9IG1JbmxpbmVEYXRhTWF4U2l6ZSk7
CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tp
bnN0YW5jZUF0dHJpYklkeF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5z
dGFuY2VBdHRyaWJJZHhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNtZEVuY29kZXIt
PnNldFZlcnRleEJ5dGVzKG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5zdGFuY2VB
dHRyaWJJZHhdICsgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tpbnN0YW5jZUF0dHJpYklkeF0gLSBvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJJZHgpOwor
ICAgICAgICB9CisgICAgfQorfQorCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjp1cGRh
dGVDbGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdFZlcnRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSB2ZXJ0ZXhPckluZGV4Q291bnQsCkBAIC00NjMsMTAgKzU0Nyw3IEBAIGFuZ2xlOjpSZXN1bHQg
VmVydGV4QXJyYXlNdGw6OnVwZGF0ZUNsaWVudEF0dHJpYnMoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nICA9IGJpbmRp
bmdzW2F0dHJpYi5iaW5kaW5nSW5kZXhdOwogICAgICAgICBBU1NFUlQoYXR0cmliLmVuYWJsZWQg
JiYgYmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRyKTsKIAotICAgICAgICBHTHVp
bnQgc3RyaWRlOwotICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0
ID0KLSAgICAgICAgICAgIEdldFZlcnRleENvbnZlcnNpb25Gb3JtYXQoY29udGV4dE10bCwgYXR0
cmliLmZvcm1hdC0+aWQsICZzdHJpZGUpOwotCisgICAgICAgIC8vIFNvdXJjZSBjbGllbnQgbWVt
b3J5IHBvaW50ZXIKICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCAqPihhdHRyaWIucG9pbnRlcik7CiAgICAgICAgIEFTU0VSVChzcmMpOwogCkBA
IC00ODQsMjIgKzU2NSw3NiBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjp1cGRhdGVD
bGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgc3Rh
cnRFbGVtZW50ID0gMDsKICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IFVuc2lnbmVkQ2VpbERp
dmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5nLmdldERpdmlzb3IoKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCBz
byBpbmRleGluZyB3aWxsIHdvcmsuICBJZiB3ZSBkb24ndAotICAgICAgICAvLyBzdGFydCBhdCB6
ZXJvIGFsbCB0aGUgaW5kaWNlcyB3aWxsIGJlIG9mZi4KLSAgICAgICAgLy8gT25seSBlbGVtZW50
Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNvIHRoYXQg
aXMgYWxsIHdlIGNvcHkuCi0gICAgICAgIHNpemVfdCBieXRlc1RvQWxsb2NhdGUgPSAoc3RhcnRF
bGVtZW50ICsgZWxlbWVudENvdW50KSAqIHN0cmlkZTsKLSAgICAgICAgc3JjICs9IHN0YXJ0RWxl
bWVudCAqIGJpbmRpbmcuZ2V0U3RyaWRlKCk7Ci0gICAgICAgIHNpemVfdCBkZXN0T2Zmc2V0ID0g
c3RhcnRFbGVtZW50ICogc3RyaWRlOwotCi0gICAgICAgIG1EeW5hbWljVmVydGV4RGF0YS51cGRh
dGVBbGlnbm1lbnQoY29udGV4dE10bCwgdmVydGV4Rm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCku
cGl4ZWxCeXRlcyk7Ci0gICAgICAgIEFOR0xFX1RSWShTdHJlYW1WZXJ0ZXhEYXRhKAotICAgICAg
ICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2Nh
dGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgIGJpbmRpbmcuZ2V0U3Ry
aWRlKCksIHZlcnRleEZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24sCi0gICAgICAgICAgICAmbUNv
bnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF0sICZtQ3VycmVudEFycmF5QnVm
ZmVyT2Zmc2V0c1thdHRyaWJJbmRleF0pKTsKKyAgICAgICAgc2l6ZV90IGJ5dGVzSW50ZW5kZWRU
b1VzZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICogYmluZGluZy5nZXRTdHJpZGUo
KTsKIAotICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgPSAm
bUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF07Ci0gICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZ2ZXJ0ZXhGb3JtYXQ7Ci0gICAg
ICAgIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2F0dHJpYkluZGV4XSA9IHN0cmlkZTsKKyAg
ICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRleHRNdGwtPmdldFZl
cnRleEZvcm1hdChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworICAgICAgICBib29sIG5lZWRT
dHJlYW1pbmcgICAgICAgICAgICAgID0gZm9ybWF0LmFjdHVhbEZvcm1hdElkICE9IGZvcm1hdC5p
bnRlbmRlZEZvcm1hdElkIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5n
LmdldFN0cmlkZSgpICUgbXRsOjprVmVydGV4QXR0cmliQnVmZmVyU3RyaWRlQWxpZ25tZW50KSAh
PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgp
IDwgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnl0ZXNJbnRlbmRlZFRvVXNlID4gbUlubGluZURhdGFNYXhTaXpl
OworCisgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gRGF0YSB3aWxsIGJlIHVwbG9hZGVkIGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRh
CisgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAg
ICA9IG51bGxwdHI7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJz
W2F0dHJpYkluZGV4XSA9IHNyYzsKKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRh
U2l6ZXNbYXR0cmliSW5kZXhdICAgID0gYnl0ZXNJbnRlbmRlZFRvVXNlOworICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworICAgICAg
ICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlckZvcm1hdHNbYXR0cmliSW5kZXhdICAgICAgPSAmZm9y
bWF0OworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhd
ICAgICAgPSBiaW5kaW5nLmdldFN0cmlkZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNvbnZlcnRlZFN0cmlkZTsKKyAgICAgICAgICAg
IC8vIE5lZWQgdG8gc3RyZWFtIHRoZSBjbGllbnQgdmVydGV4IGRhdGEgdG8gYSBidWZmZXIuCisg
ICAgICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmc3RyZWFtRm9ybWF0ID0KKyAgICAg
ICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0dHJpYi5m
b3JtYXQtPmlkLCAmY29udmVydGVkU3RyaWRlKTsKKworICAgICAgICAgICAgLy8gQWxsb2NhdGUg
c3BhY2UgZm9yIHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCBzbyBpbmRleGluZyB3aWxsIHdv
cmsuICBJZiB3ZSBkb24ndAorICAgICAgICAgICAgLy8gc3RhcnQgYXQgemVybyBhbGwgdGhlIGlu
ZGljZXMgd2lsbCBiZSBvZmYuCisgICAgICAgICAgICAvLyBPbmx5IGVsZW1lbnRDb3VudCB2ZXJ0
aWNlcyB3aWxsIGJlIHVzZWQgYnkgdGhlIHVwY29taW5nIGRyYXcgc28gdGhhdCBpcyBhbGwgd2Ug
Y29weS4KKyAgICAgICAgICAgIHNpemVfdCBieXRlc1RvQWxsb2NhdGUgPSAoc3RhcnRFbGVtZW50
ICsgZWxlbWVudENvdW50KSAqIGNvbnZlcnRlZFN0cmlkZTsKKyAgICAgICAgICAgIHNyYyArPSBz
dGFydEVsZW1lbnQgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworICAgICAgICAgICAgc2l6ZV90IGRl
c3RPZmZzZXQgPSBzdGFydEVsZW1lbnQgKiBjb252ZXJ0ZWRTdHJpZGU7CisKKyAgICAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1Gb3JtYXQ7
CisgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gPSBj
b252ZXJ0ZWRTdHJpZGU7CisKKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2NhdGUgPD0gbUlu
bGluZURhdGFNYXhTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBkYXRhIGlzIHNtYWxsIGVub3VnaCwgdXNlIGhvc3QgbWVtb3J5IGluc3RlYWQgb2YgY3JlYXRp
bmcgR1BVIGJ1ZmZlci4gVG8KKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBzeW5jaHJvbml6aW5n
IGFjY2VzcyB0byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgorICAgICAgICAgICAg
ICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5ID0KKyAgICAgICAg
ICAgICAgICAgICAgbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzW2F0dHJpYkluZGV4XTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVydGVkQ2xpZW50QXJyYXku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQU5HTEVfQ0hF
Q0tfR0xfQUxMT0MoY29udGV4dE10bCwgY29udmVydGVkQ2xpZW50QXJyYXkucmVzaXplKGJ5dGVz
VG9BbGxvY2F0ZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJlYW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBzdHJl
YW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmluZGluZy5nZXRTdHJpZGUoKSwgZWxl
bWVudENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpICsgZGVzdE9mZnNldCk7CisKKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAgICA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVyc1th
dHRyaWJJbmRleF0gPSBjb252ZXJ0ZWRDbGllbnRBcnJheS5kYXRhKCk7CisgICAgICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc1Rv
QWxsb2NhdGU7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0
cmliSW5kZXhdICAgICAgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFN0cmVhbSB0aGUgY2xpZW50IGRhdGEgdG8g
YSBHUFUgYnVmZmVyLiBTeW5jaHJvbml6YXRpb24gbWlnaHQgaGFwcGVuIGlmIGJ1ZmZlciBpcwor
ICAgICAgICAgICAgICAgIC8vIGluIHVzZS4KKyAgICAgICAgICAgICAgICBtRHluYW1pY1ZlcnRl
eERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1Gb3JtYXQuYWN0dWFsQW5nbGVGb3Jt
YXQoKS5waXhlbEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBBTkdMRV9UUlkoU3RyZWFtVmVydGV4
RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNWZXJ0ZXhEYXRhLCBzcmMsIGJ5dGVzVG9BbGxvY2F0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0T2Zmc2V0
LCBlbGVtZW50Q291bnQsIGJpbmRpbmcuZ2V0U3RyaWRlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LnZlcnRleExvYWRGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUNvbnZlcnRlZEFy
cmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4
XSkpOworCisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhd
ID0gJm1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICAvLyBpZiAobmVlZFN0cmVhbWluZykKICAgICB9CiAKICAgICBtVmVy
dGV4QXJyYXlEaXJ0eSA9IHRydWU7CkBAIC01MjYsNyArNjYxLDcgQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6c3luY0RpcnR5QXR0cmliKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQsCiAgICAgICAgICAgICBib29sIG5lZWRDb252ZXJzaW9uID0KICAgICAgICAgICAgICAgICBm
b3JtYXQuYWN0dWFsRm9ybWF0SWQgIT0gZm9ybWF0LmludGVuZGVkRm9ybWF0SWQgfHwKICAgICAg
ICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIGZvcm1hdC5hY3R1YWxBbmdsZUZvcm1h
dCgpLnBpeGVsQnl0ZXMpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZz
ZXQoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8fAor
ICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldE9mZnNldCgpICUgNCkgIT0gMCB8fAogICAgICAg
ICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpIDwgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0
KCkucGl4ZWxCeXRlcykgfHwKICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSAl
IG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMDsKIApAQCAtNTYz
LDE5ICs2OTgsMjEgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3luY0RpcnR5QXR0
cmliKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4
QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50
c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4
QnVmZmVyT2Zmc2V0T3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRl
eFR5cGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCiB7CiAgICAgY29uc3QgZ2w6OkJ1ZmZlciAqZ2xF
bGVtZW50QXJyYXlCdWZmZXIgPSBnZXRTdGF0ZSgpLmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwog
CiAgICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihp
bmRpY2VzKTsKICAgICBpZiAoIWdsRWxlbWVudEFycmF5QnVmZmVyKQogICAgIHsKLSAgICAgICAg
QU5HTEVfVFJZKHN0cmVhbUluZGV4QnVmZmVyRnJvbUNsaWVudChjb250ZXh0LCB0eXBlLCBjb3Vu
dCwgaW5kaWNlcywgaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCkpOworICAgICAgICBBTkdMRV9UUlko
c3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBp
bmRpY2VzLCBpZHhCdWZmZXJPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0LCBpbmRleEJ1ZmZlckNvdW50T3V0KSk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7CkBAIC01ODMsOCArNzIwLDggQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udmVydGVkT2Zmc2V0ICUgbXRsOjpr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQpICE9IDA7CiAgICAgICAgIGlmIChuZWVkQ29udmVy
c2lvbikKICAgICAgICAgewotICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZlcnRJbmRleEJ1ZmZl
cihjb250ZXh0LCB0eXBlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1ZmZlck91dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7Cisg
ICAgICAgICAgICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIG1v
ZGUsIGNvbnZlcnRlZE9mZnNldCwgaWR4QnVmZmVyT3V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQsIGluZGV4QnVmZmVyQ291bnRP
dXQpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTU5Miw2ICs3Mjks
NyBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpnZXRJbmRleEJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0g
bXRsOjpHZXRJbXBsKGdsRWxlbWVudEFycmF5QnVmZmVyKTsKICAgICAgICAgICAgICppZHhCdWZm
ZXJPdXQgICAgICAgID0gYnVmZmVyTXRsLT5nZXRDdXJyZW50QnVmZmVyKCk7CiAgICAgICAgICAg
ICAqaWR4QnVmZmVyT2Zmc2V0T3V0ICA9IGNvbnZlcnRlZE9mZnNldDsKKyAgICAgICAgICAgICpp
bmRleEJ1ZmZlckNvdW50T3V0ID0gY291bnQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwNyw5
ICs3NDUsMTEgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlN
dGw6OmNvbnZlcnRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlk
eEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlu
ZGV4QnVmZmVyQ291bnRPdXQpCiB7CiAgICAgc2l6ZV90IG9mZnNldE1vZHVsbyA9IG9mZnNldCAl
IG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50OwogICAgIEFTU0VSVChvZmZzZXRNb2R1
bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0
ZSk7CkBAIC02MzgsMTUgKzc3OCwxNSBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpj
b252ZXJ0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICB9CiAK
ICAgICBzaXplX3QgaW5kZXhDb3VudCA9IEdldEluZGV4Q291bnQoaWR4QnVmZmVyLCBvZmZzZXRN
b2R1bG8sIGluZGV4VHlwZSk7Ci0KLSAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+
Z2V0RmVhdHVyZXMoKS5oYXNDaGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgotICAgICAgICBjb250
ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKQorICAgIGlmICgoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5icmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJs
ZWQgJiYKKyAgICAgICAgIGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1hbmRFbmNvZGVyKCkpKQog
ICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHVzZSBHUFUgdG8gY29udmVydCB3aGVuIHdl
IGFyZSBpbiBhIG1pZGRsZSBvZiBhIHJlbmRlciBwYXNzLgogICAgICAgICBBTkdMRV9UUlkoU3Ry
ZWFtSW5kZXhEYXRhKGNvbnRleHRNdGwsICZjb252ZXJzaW9uLT5kYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlci0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEo
Y29udGV4dE10bCkgKyBvZmZzZXRNb2R1bG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhUeXBlLCBpbmRleENvdW50LCBnbFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVyc2lvbi0+
Y29udmVydGVkQnVmZmVyLCAmY29udmVyc2lvbi0+Y29udmVydGVkT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlLCBpbmRleENvdW50LCBtb2RlLCBn
bFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyLCAmY29udmVyc2lvbi0+
Y29udmVydGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
QnVmZmVyQ291bnRPdXQpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTY5NSwxOCArODM1
LDIwIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRJbmRleEJ1ZmZlckdQ
VShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0CiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OnN0cmVhbUluZGV4QnVmZmVyRnJvbUNsaWVudChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1v
ZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZz
ZXRPdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJD
b3VudE91dCkKIHsKICAgICBBU1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSA9PSBudWxscHRyKTsKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGNvbnRleHQpOwogCiAgICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCAqPihzb3VyY2VQb2ludGVyKTsKLSAgICBBTkdMRV9UUlkoU3RyZWFtSW5kZXhEYXRhKGNvbnRl
eHRNdGwsICZtRHluYW1pY0luZGV4RGF0YSwgc3JjRGF0YSwgaW5kZXhUeXBlLCBpbmRleENvdW50
LAorICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJm1EeW5hbWljSW5k
ZXhEYXRhLCBzcmNEYXRhLCBpbmRleFR5cGUsIGluZGV4Q291bnQsIG1vZGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0aXZlUmVzdGFy
dEVuYWJsZWQoKSwgaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhC
dWZmZXJPZmZzZXRPdXQsIGlkeEJ1ZmZlckNvdW50T3V0KSk7CiAKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC03NDQsNyArODg2LDYgQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xD
b250ZXh0LAogICAgIC8vIEhhcyB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyIGhhcyBjaGFuZ2Vk
IHNpbmNlIGxhc3QgY29udmVyc2lvbj8KICAgICBpZiAoIWNvbnZlcnNpb24tPmRpcnR5KQogICAg
IHsKLSAgICAgICAgLy8gQnVmZmVyJ3MgZGF0YSBoYXNuJ3QgYmVlbiBjaGFuZ2VkLiBSZS11c2Ug
bGFzdCBjb252ZXJ0ZWQgcmVzdWx0cwogICAgICAgICBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xk
ZXJzW2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyKTsKICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdID0gY29udmVyc2lvbi0+
Y29udmVydGVkT2Zmc2V0OwogCkBAIC03NjEsNyArOTAyLDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0
ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgIGJvb2wgY2FuRXhwYW5kQ29tcG9uZW50c09uR1BVID0gY29udmVydGVkRm9ybWF0
LmFjdHVhbFNhbWVHTFR5cGU7CiAKICAgICBpZiAoY29udGV4dE10bC0+Z2V0UmVuZGVyQ29tbWFu
ZEVuY29kZXIoKSAmJgotICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYmCisgICAgICAgICFjb250ZXh0TXRs
LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5lbmFi
bGVkICYmCiAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCku
aGFzRXhwbGljaXRNZW1CYXJyaWVyLmVuYWJsZWQpCiAgICAgewogICAgICAgICAvLyBDYW5ub3Qg
dXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgcmVuZGVyIHBh
c3MuCkBAIC03OTIsNiArOTMzLDkgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29u
dmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIGNvbnZl
cnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0
cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsKICAgICBjb252ZXJzaW9uLT5jb252ZXJ0ZWRP
ZmZzZXQgPSBtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1thdHRyaWJJbmRleF07CiAKKyAgICBB
U1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworICAgIGNvbnZlcnNpb24tPmRpcnR5ID0gZmFsc2U7
CisKICNpZm5kZWYgTkRFQlVHCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7CkBAIC04
MDEsOSArOTQ1LDYgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRl
eEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIH0KICNlbmRpZgogCi0g
ICAgQVNTRVJUKGNvbnZlcnNpb24tPmRpcnR5KTsKLSAgICBjb252ZXJzaW9uLT5kaXJ0eSA9IGZh
bHNlOwotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
ZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQKaW5kZXgg
ZmEwNzNhZTYyM2Y5YzEyZTc2MTkyMGM1Y2M4MGFkZGNlYzYzNWVkMi4uMTNhZmRjMzRkYTFkYWI3
ZjAzN2QwOGE1ODkwODVlOGE1YmE4NTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNl
Lm1kCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZApAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNp
ZGUuIFdyaXRpbmcgdG8gYGdsX0NsaXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdu
b3JlZCBpZiBpdCBpcyBkCiBkb2Vzbid0IGhhdmUgYW55IGVxdWl2YWxlbnQgQVBJIHRvIGRpc2Fi
bGUvZW5hYmxlIHRoZSB3cml0aW5nLCB0aG91Z2ggd3JpdGluZyB0byBhIGBjbGlwX2Rpc3RhbmNl
YAogdmFyaWFibGUgYXV0b21hdGljYWxseSBlbmFibGVzIGl0LgogCi1UbyBlbXVsYXRlIHRoaXMg
ZW5hYmxpbmcvZGlzYWJsaW5nIEFQSSwgdGhlIE1ldGFsIGJhY2stZW5kIHVzZXMgYSBzaW1pbGFy
IGltcGxlbWVudGF0aW9uIGFzIHdoYXQKLVtWdWxrYW4gYmFjay1lbmQgZG9lc10oLi4vLi4vdnVs
a2FuL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1kKS4gUGxlYXNlIHJlZmVyIHRvIHRoYXQgZG9j
dW1lbnQgZm9yCi1tb3JlIGRldGFpbHMuCitUbyBpbXBsZW1lbnQgdGhpcyBlbmFibGluZy9kaXNh
YmxpbmcgQVBJIGluIE1ldGFsIGJhY2stZW5kOgorCistIFRoZSBzaGFkZXIgY29tcGlsZXIgd2ls
bCB0cmFuc2xhdGUgZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50IHRvIGFuIGFz
c2lnbm1lbnQgdG8KKyAgYEFOR0xFQ2xpcERpc3RhbmNlW2ldYCB2YXJpYWJsZS4KKy0gQSBzcGVj
aWFsIGRyaXZlciB1bmlmb3JtIHZhcmlhYmxlIGBjbGlwRGlzdGFuY2VzRW5hYmxlZGAgd2lsbCBj
b250YWluIG9uZSBiaXQgZmxhZyBmb3IgZWFjaAorICBlbmFibGVkIGBnbF9DbGlwRGlzdGFuY2Vb
aV1gLiBUaGlzIHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlwRGlzdGFuY2VgIGlu
ZGljZXMuCistIEF0IHRoZSBlbmQgb2YgdmVydGV4IHNoYWRlciwgdGhlIGVuYWJsZWQgYGdsX0Ns
aXBEaXN0YW5jZVtpXWAgd2lsbCBiZSBhc3NpZ25lZCB0aGUgcmVzcGVjdGl2ZQorICB2YWx1ZSBm
cm9tIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAuIE9uIHRoZSBvdGhlciBoYW5kLCB0aG9zZSBkaXNh
YmxlZCBlbGVtZW50cyB3aWxsIGJlIGFzc2lnbmVkCisgIHplcm8gdmFsdWUuIFRoaXMgc3RlcCBp
cyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorICAgIGBgYAorICAgIGZvciAoaW50
IGluZGV4IDogYXJyYXlsZW5ndGgoZ2xfQ2xpcERpc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGlm
IChBTkdMRVVuaWZvcm1zLmNsaXBEaXN0YW5jZXNFbmFibGVkICYgKDB4MSA8PCBpbmRleCkpCisg
ICAgICAgICAgICBnbF9DbGlwRGlzdGFuY2VbaW5kZXhdID0gQU5HTEVDbGlwRGlzdGFuY2VbaW5k
ZXhdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbF9DbGlwRGlzdGFuY2VbaW5kZXhdID0g
MDsKKyAgICB9CisgICAgYGBgCistIFNvbWUgbWlub3Igb3B0aW1pemF0aW9uczoKKyAgICAtIE9u
bHkgdGhvc2UgaW5kaWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIHRoZSBvcmlnaW5hbCBjb2Rl
IHdpbGwgYmUgdXNlZCBpbiBpZiBlbHNlIGJsb2NrCisgICAgICBhYm92ZS4KKyAgICAtIFRob3Nl
IGVsZW1lbnRzIHdob3NlIGluZGV4IG5vdCByZWZlcmVuY2VkIGluIHRoZSBvcmlnaW5hbCBjb2Rl
IHdpbGwgYmUgemVyb2lzZWQgaW5zdGVhZC4KKyAgICAtIElmIHRoZSBvcmlnaW5hbCBjb2RlIG9u
bHkgdXNlcyB1cCB0byBhbiBpbmRleCA8IGBnbF9NYXhDbGlwRGlzdGFuY2VzYCwgdGhlbgorICAg
ICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1vc3QgYGluZGV4KzFgIGl0ZXJhdGlvbnMuIElmIHRo
ZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBub3QgYmVpbmcKKyAgICAgIGludGVncmFsIGNvbnN0
YW50IHZhbHVlIGtub3duIGF0IGNvbXBpbGUgdGltZSB0aGVuIGRlY2xhcmVkIHNpemUgb2YgYGds
X0NsaXBEaXN0YW5jZWAKKyAgICAgIHdpbGwgYmUgdGhlIGxvb3Agc2l6ZS4KKyAgICAtIEZpbmFs
bHksIGlmIHRoZSBvcmlnaW5hbCBjb2RlIGRvZXNuJ3QgdXNlIGBnbF9DbGlwRGlzdGFuY2VgLCB0
aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUgd2lsbCBiZQorICAgICAgb21pdHRlZC4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9m
b3JtYXRfdGFibGUucHkKaW5kZXggM2NlMTQyZTU2YzZmNjJhMDkwNDhjNTljYmZhZTlkNGNmOTk3
NzNhMy4uNmVhYjQwOThlM2FmYjA5M2QzMDM0ZjIzODZkZDBmZGJlOTk4YmM4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2dl
bl9tdGxfZm9ybWF0X3RhYmxlLnB5CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weQpAQCAtNDgsNyAr
NDgsNiBAQCBuYW1lc3BhY2UgbXRsCiB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRs
ICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiB7ewogICAgIHRo
aXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElkXzsKLQogICAgIGlkPE1UTERl
dmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwogCiAgICAgLy8g
QWN0dWFsIGNvbnZlcnNpb24KQEAgLTEwOSw2ICsxMDgsMjMgQEAgaW1hZ2VfZm9ybWF0X2Fzc2ln
bl90ZW1wbGF0ZTIgPSAiIiIKICAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gPSB7
aW5pdF9mdW5jdGlvbl9mYWxsYmFja307CiAgICAgICAgICAgICB9fQogIiIiCisjRDE2IGlzIGZ1
bGx5IHN1cHBvcnRlZCBvbiAgQXBwbGUzKy4gSG93ZXZlciwgb24KKyNwcmV2aW91cyAgdmVyc2lv
bnMgb2YgQXBwbGUgaGFyZHdhcmUsIHNvbWUgb3BlcmF0aW9ucyBjYW4gY2F1c2UKKyN1bmRlZmlu
ZWQgYmVoYXZpb3IuCitpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMyA9ICIiIgorICAgICAg
ICAgICAgaWYgKFttZXRhbERldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNd
KQorICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9IHtt
dGxfZm9ybWF0fTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xl
OjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXR9OworICAgICAgICAgICAgICAgIHRoaXMt
PmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKyAgICAgICAgICAgIH19CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9y
bWF0ID0ge210bF9mb3JtYXRfZmFsbGJhY2t9OworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjp7YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFj
a307CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25f
ZmFsbGJhY2t9OworICAgICAgICAgICAgfX0KKyIiIgogCiBjYXNlX2ltYWdlX2Zvcm1hdF90ZW1w
bGF0ZTEgPSAiIiIgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjp7YW5nbGVfZm9ybWF0fToK
ICAgICAgICAgICAgIHtpbWFnZV9mb3JtYXRfYXNzaWdufQpAQCAtMjEzLDYgKzIyOSw4IEBAIGRl
ZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1hdCwg
ZHN0X2Zvcm1hdCk6CiAKIAogIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2Fz
ZSAoZ2VuZXJpYyBjYXNlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxfbWFwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduX2dlbl9mdW5jKToKICAgICBpZiBpc2lu
c3RhbmNlKGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgZGljdCk6CkBAIC0yNTUsNiArMjczLDgg
QEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KIAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJz
aW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0
Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3Rv
X210bF9tYXApOgogCkBAIC0yNzAsNiArMjkwLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNo
X3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmcK
IAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChNYWMgY2FzZSkK
KworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1
YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAsIG1hY19mYWxsYmFja3MpOgogICAgIGdsX2Zv
cm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KQEAgLTMwMSwxMSArMzIzLDQzIEBAIGRl
ZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmds
ZV9mb3JtYXRfaW5mbywgYW5nbGVfCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuX2Zvcm1hdF9hc3NpZ25fY29kZSkKIAogCitkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
aW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAs
IGlvc19mYWxsYmFja3MpOgorICAgIGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1h
dF0KKworICAgIGRlZiBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKGFjdHVhbF9hbmdsZV9mb3JtYXQs
IGFuZ2xlX3RvX210bF9tYXApOgorICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlv
c19mYWxsYmFja3M6CisgICAgICAgICAgICAjIFRoaXMgZm9ybWF0IChEZXB0aDE2VW5pZm9ybSkg
cmVxdWlyZXMgZmFsbGJhY2sgd2hlbiBpT1MgaGFyZHdhcmUgZG9lcyBub3QgZnVsbHkgc3VwcG9y
dCBkZXB0aDE2LgorICAgICAgICAgICAgIyBGYWxsYmFjayBmb3JtYXQ6CisgICAgICAgICAgICBh
Y3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVf
Zm9ybWF0XQorICAgICAgICAgICAgIyByZXR1cm4gaWYgZWxzZSBibG9jazoKKyAgICAgICAgICAg
IHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMy5mb3JtYXQoCisgICAgICAgICAg
ICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAg
ICAgICAgIG10bF9mb3JtYXQ9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0XSwK
KyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5nZXRfaW50
ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQs
IGFjdHVhbF9hbmdsZV9mb3JtYXQpLAorICAgICAgICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3Jt
YXRfZmFsbGJhY2s9YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICBtdGxfZm9ybWF0X2ZhbGxiYWNrPWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1h
dF9mYWxsYmFja10sCisgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmds
ZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKyAgICAgICAg
ICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorICAgICAg
ICAgICAgcmV0dXJuIGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUxLmZvcm1hdCgKKyAgICAg
ICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0PWFjdHVhbF9hbmdsZV9mb3JtYXQsCisgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorICAgICAgICAgICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdl
dF9pbnRlcm5hbF9mb3JtYXRfaW5pdGlhbGl6ZXIoCisgICAgICAgICAgICAgICAgICAgIGdsX2Zv
cm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCkpCisKKyAgICByZXR1cm4gZ2VuX2ltYWdlX21hcF9z
d2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVf
dG9fbXRsX21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fZm9y
bWF0X2Fzc2lnbl9jb2RlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1h
Z2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBhbmdsZV9vdmVycmlkZSA9IGltYWdlX3RhYmxl
WyJvdmVycmlkZSJdCiAgICAgbWFjX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX21h
YyJdCiAgICAgaW9zX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX2lvcyJdCi0gICAg
bWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3NfbWFjIl0KKyAgICBt
YWNfZmFsbGJhY2tzID0gaW1hZ2VfdGFibGVbImZhbGxiYWNrc19tYWMiXQorICAgIGlvc19mYWxs
YmFja3MgPSBpbWFnZV90YWJsZVsiZmFsbGJhY2tzX2lvcyJdCiAgICAgYW5nbGVfdG9fbXRsID0g
aW1hZ2VfdGFibGVbIm1hcCJdCiAgICAgbWFjX3NwZWNpZmljX21hcCA9IGltYWdlX3RhYmxlWyJt
YXBfbWFjIl0KICAgICBpb3Nfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVbIm1hcF9pb3MiXQpA
QCAtMzIyLDggKzM3Niw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1hZ2Vf
dGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfY29tbW9u
X2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KToKICAgICAgICAgbWFjX2Nh
c2UgPSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQsIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGwsIG1hY19mYWxsYmFja3MpCi0gICAg
ICAgIG5vbl9tYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFuZ2xlX3RvX210bCkK
KyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdlX21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5n
bGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19nbCwgYW5nbGVfdG9fbXRsLCBp
b3NfZmFsbGJhY2tzKQogICAgICAgICBpZiBtYWNfY2FzZSA9PSBub25fbWFjX2Nhc2U6CiAgICAg
ICAgICAgICByZXR1cm4gbWFjX2Nhc2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZm
ZXJfcG9vbC5oCmluZGV4IDIwNzlmZDcyN2E1MTJiMjg3MjVkMzgzOTA3YTQ5M2RjZDJkY2QzN2Mu
LjIwNGViYjk0OTg3MzExMmMwMTAyNDJiMmIxNmIwODYwY2Q0MGMwMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVm
ZmVyX3Bvb2wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVm
ZmVyUG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3QnVmZmVyQWxsb2Nh
dGVkT3V0ID0gbnVsbHB0cik7CiAKICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0
ZXMsIGNhbGwgY29tbWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZp
Y2UuCi0gICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCk7Cisg
ICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCwgYm9vbCBmbHVz
aEVudGlyZUJ1ZmZlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgcmVsZWFzZXMgYWxsIHRoZSBi
dWZmZXJzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzaW5jZSB0aGlzIHdhcyBsYXN0IGNhbGxl
ZC4KICAgICB2b2lkIHJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dE10
bCk7CkBAIC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAogICAgIGFuZ2xlOjpSZXN1
bHQgYWxsb2NhdGVOZXdCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBk
ZXN0cm95QnVmZmVyTGlzdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBzdGQ6OmRlcXVlPEJ1ZmZl
clJlZj4gKmJ1ZmZlcnMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVy
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwotCiAgICAgc2l6ZV90IG1Jbml0aWFsU2l6ZTsKICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKICAgICB1aW50MzJfdCBtTmV4dEFsbG9jYXRpb25PZmZzZXQ7
CkBAIC0xMjcsNyArMTI2LDcgQEAgY2xhc3MgQnVmZmVyUG9vbAogCiAgICAgc2l6ZV90IG1CdWZm
ZXJzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtTWF4QnVmZmVyczsKLSAgICBCdWZmZXJQb29sTWVt
UG9saWN5IG1NZW1Qb2xpY3k7CisgICAgQnVmZmVyUG9vbE1lbVBvbGljeSBtTWVtUG9saWN5ID0g
QnVmZmVyUG9vbE1lbVBvbGljeTo6QXV0bzsKICAgICBib29sIG1BbHdheXNBbGxvY2F0ZU5ld0J1
ZmZlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCmlu
ZGV4IDA0MjM4ZWYxZThmYWIyMTY3NjU5YjY2OGMxY2NmYjk0ZmY1YTJkMmUuLmE1OGI1YTVhM2U5
Nzc4MGY3ODc1OTIwN2EwZmExMjU1MTlhOWQ1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9idWZmZXJfcG9vbC5tbQpAQCAtMjUwLDExICsyNTAsMTggQEAgYW5nbGU6OlJlc3VsdCBC
dWZmZXJQb29sOjphbGxvY2F0ZShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBCdWZmZXJQb29sOjpj
b21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6
Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCiB7
CiAgICAgaWYgKG1CdWZmZXIgJiYgbU5leHRBbGxvY2F0aW9uT2Zmc2V0ID4gbUxhc3RGbHVzaE9m
ZnNldCkKICAgICB7Ci0gICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIG1MYXN0Rmx1
c2hPZmZzZXQsIG1OZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hPZmZzZXQpOworICAg
ICAgICBpZiAoZmx1c2hFbnRpcmVCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1CdWZm
ZXItPmZsdXNoKGNvbnRleHRNdGwsIDAsIG1MYXN0Rmx1c2hPZmZzZXQpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4
dE10bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVz
aE9mZnNldCk7CisgICAgICAgIH0KICAgICAgICAgbUxhc3RGbHVzaE9mZnNldCA9IG1OZXh0QWxs
b2NhdGlvbk9mZnNldDsKICAgICB9CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oCmluZGV4IDU1
ZmY2NDlkYjZkNTc3NWRjZTdhYzljYTUzMGExMjViZDY1ZDI4MWYuLjNhYTgyNmFmNjdmY2QyMDFi
OWYzYjJjYzhmMWE4ZTc3YTAxMWIyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2NvbW1hbmRfYnVmZmVyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVy
IGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmds
ZTo6TgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tbWFuZCBidWZmZXIgY2FuIGJlIGVuY29k
ZWQgaW50by4gUmV0dXJuIGZhbHNlIGlmIGl0IGhhcyBiZWVuIGNvbW1pdHRlZAogICAgIC8vIGFu
ZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCi0gICAgYm9vbCByZWFkeSgpIGNvbnN0OworICAgIGJv
b2wgdmFsaWQoKSBjb25zdDsKICAgICB2b2lkIGNvbW1pdCgpOwogICAgIC8vIHdhaXQgZm9yIGNv
bW1pdHRlZCBjb21tYW5kIGJ1ZmZlciB0byBmaW5pc2guCiAgICAgdm9pZCBmaW5pc2goKTsKQEAg
LTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBw
ZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogCiAgICAgdm9pZCBxdWV1
ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2
YWx1ZSk7CiAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJl
ZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKworICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduKGNv
bnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOwogICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qg
c3RkOjpzdHJpbmcgJm1hcmtlcik7CiAgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTEy
OCw3ICsxMzAsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRP
YmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogICAgIHZvaWQgc2V0KGlkPE1U
TENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKTsKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAg
IGJvb2wgcmVhZHlJbXBsKCkgY29uc3Q7CisgICAgYm9vbCB2YWxpZEltcGwoKSBjb25zdDsKICAg
ICB2b2lkIGNvbW1pdEltcGwoKTsKICAgICB2b2lkIGZvcmNlRW5kaW5nQ3VycmVudEVuY29kZXIo
KTsKIApAQCAtMTQ5LDYgKzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJs
aWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCiAKICAgICBt
dXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CiAKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
bVBlbmRpbmdEZWJ1Z1NpZ25zOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxtdGw6OlNoYXJl
ZEV2ZW50UmVmLCB1aW50NjRfdD4+IG1QZW5kaW5nU2lnbmFsRXZlbnRzOwogCiAgICAgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IG1EZWJ1Z0dyb3VwczsKQEAgLTE3Niw2ICsxNzksOCBAQCBjbGFz
cyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNv
ZGVyPj4sIGFuZ2xlOjpOb25DbwogICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWlu
Z1dyaXR0ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CiAgICAgQ29tbWFuZEVuY29k
ZXIgJm1hcmtSZXNvdXJjZUJlaW5nV3JpdHRlbkJ5R1BVKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpOwogCisgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBwdXNoRGVidWdHcm91cChOU1N0cmluZyAqbGFiZWwpOwogICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTE4OSw2ICsxOTQsOCBAQCBjbGFzcyBDb21t
YW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNvZGVyPj4s
IGFuZ2xlOjpOb25DbwogCiAgICAgdm9pZCBzZXQoaWQ8TVRMQ29tbWFuZEVuY29kZXI+IG1ldGFs
Q21kRW5jb2Rlcik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbWFya2VyKTsKKwogICBwcml2YXRlOgogICAgIGNvbnN0IFR5cGUgbVR5cGU7CiAgICAg
Q29tbWFuZEJ1ZmZlciAmbUNtZEJ1ZmZlcjsKQEAgLTIwMSw3ICsyMDgsNyBAQCBjbGFzcyBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5s
aW5lIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gJnB1c2goY29uc3QgVCAmdmFsKQogICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90ICo+KCZ2YWwpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCAqPigmdmFsKTsKICAgICAgICAgbUJ1ZmZlci5pbnNlcnQobUJ1ZmZlci5lbmQoKSwg
cHRyLCBwdHIgKyBzaXplb2YoVCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAt
MjE3LDcgKzIyNCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KICAgICB7CiAg
ICAgICAgIEFTU0VSVChtUmVhZFB0ciA8PSBtQnVmZmVyLnNpemUoKSAtIHNpemVvZihUKSk7CiAg
ICAgICAgIFQgcmU7Ci0gICAgICAgIHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCAqPigmcmUpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCAqPigmcmUpOwogICAgICAgICBzdGQ6OmNvcHkobUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciwg
bUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciArIHNpemVvZihUKSwgcHRyKTsKICAgICAgICAgcmV0
dXJuIHJlOwogICAgIH0KQEAgLTIyNSw3ICsyMzIsNyBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21t
YW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIFQgZmV0Y2go
KQogICAgIHsKLSAgICAgICAgVCByZSA9IHBlZWs8VD4oKTsKKyAgICAgICAgYXV0byByZSA9IHBl
ZWs8VD4oKTsKICAgICAgICAgbVJlYWRQdHIgKz0gc2l6ZW9mKFQpOwogICAgICAgICByZXR1cm4g
cmU7CiAgICAgfQpAQCAtMjMzLDcgKzI0MCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0KICAgICBpbmxpbmUgY29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIuc2l6ZSgpIC0gYnl0ZXMpOwot
ICAgICAgICBzaXplX3QgY3VyID0gbVJlYWRQdHI7CisgICAgICAgIGF1dG8gY3VyID0gbVJlYWRQ
dHI7CiAgICAgICAgIG1SZWFkUHRyICs9IGJ5dGVzOwogICAgICAgICByZXR1cm4gbUJ1ZmZlci5k
YXRhKCkgKyBjdXI7CiAgICAgfQpAQCAtNDc5LDEyICs0ODYsMTYgQEAgY2xhc3MgUmVuZGVyQ29t
bWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29kZXIKICAgICB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4+KENvbW1hbmRF
bmNvZGVyOjpnZXQoKSk7CiAgICAgfQorICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbGFiZWwpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0QXR0YWNobWVudFdyaXRlRGVw
ZW5kZW5jeUFuZFNjaXNzb3JSZWN0KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0
YWNobWVudCk7CisgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYg
JnRleHR1cmUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihNVExSZW5kZXJQ
YXNzQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNSZW5kZXJQYXNzQXR0YWNobWVudCk7CiAKICAg
ICB2b2lkIGVuY29kZU1ldGFsRW5jb2RlcigpOworICAgIHZvaWQgc2ltdWxhdGVEaXNjYXJkRnJh
bWVidWZmZXIoKTsKKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlzY2Fy
ZFNpbXVsYXRpb24pOwogCiAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJmNvbW1vblNldEJ1ZmZl
cihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCkBAIC01NjAsMTEgKzU3MSwy
MCBAQCBjbGFzcyBCbGl0Q29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29k
ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsaWNlQ291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZXZlbENv
dW50KTsKIAorICAgIEJsaXRDb21tYW5kRW5jb2RlciAmY29weVRleHR1cmUoY29uc3QgVGV4dHVy
ZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c3JjU2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
cmNMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1
cmVSZWYgJmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGRzdFNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
bGljZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGV2ZWxDb3VudCk7CisKICAgICBCbGl0Q29tbWFuZEVuY29kZXIgJmZpbGxCdWZmZXIoY29uc3Qg
QnVmZmVyUmVmICZidWZmZXIsIE5TUmFuZ2UgcmFuZ2UsIHVpbnQ4X3QgdmFsdWUpOwogCiAgICAg
QmxpdENvbW1hbmRFbmNvZGVyICZnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1
cmVSZWYgJnRleHR1cmUpOwotICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlclB0cik7Ci0gICAgQmxpdENvbW1hbmRFbmNvZGVyICZzeW5jaHJv
bml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIpOworICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmc3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOwogCiAgIHByaXZhdGU6CiAgICAgaWQ8TVRMQmxpdENvbW1hbmRFbmNvZGVyPiBnZXQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KaW5kZXgg
NDQzM2IwMjIxN2MzMGFhZTIwODk2NzA4YTc0YWYyNTQ3MzVkMjM2OC4uYjRhMzM0NzQyZTYyN2Nh
MDQ5MTIxMDNlMmZhZGZjYzczMTI0N2YzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbW1hbmRfYnVmZmVyLm1tCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAKICNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVNDQVJEX0ZSQU1FQlVGRkVSCisjICAgIGlu
Y2x1ZGUgPHJhbmRvbT4KKyNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgi
CkBAIC02NSw2ICs2OCw3IEBAIG5hbWVzcGFjZQogICAgIFBST0MoU2V0VmlzaWJpbGl0eVJlc3Vs
dE1vZGUpICAgICAgICBcCiAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAg
IFwKICAgICBQUk9DKE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2UpICAgICAgXAorICAgIFBST0Mo
SW5zZXJ0RGVidWdzaWduKSAgICAgICAgICAgICAgICBcCiAgICAgUFJPQyhQdXNoRGVidWdHcm91
cCkgICAgICAgICAgICAgICAgIFwKICAgICBQUk9DKFBvcERlYnVnR3JvdXApCiAKQEAgLTg1LDQy
ICs4OSw0MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgogdm9pZCBTZXRSZW5kZXJQaXBlbGlu
ZVN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
IHsKLSAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CisgICAgYXV0byBzdGF0ZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CiAgICAgW3N0YXRlIEFOR0xFX01UTF9SRUxFQVNFXTsK
IH0KIAogdm9pZCBTZXRUcmlhbmdsZUZpbGxNb2RlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAg
TVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmdsZUZpbGxN
b2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJpYW5nbGVGaWxsTW9k
ZT4oKTsKICAgICBbZW5jb2RlciBzZXRUcmlhbmdsZUZpbGxNb2RlOm1vZGVdOwogfQogCiB2b2lk
IFNldEZyb250RmFjaW5nV2luZGluZ0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExXaW5kaW5nIHdpbmRpbmcgPSBzdHJlYW0tPmZldGNo
PE1UTFdpbmRpbmc+KCk7CisgICAgYXV0byB3aW5kaW5nID0gc3RyZWFtLT5mZXRjaDxNVExXaW5k
aW5nPigpOwogICAgIFtlbmNvZGVyIHNldEZyb250RmFjaW5nV2luZGluZzp3aW5kaW5nXTsKIH0K
IAogdm9pZCBTZXRDdWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTEN1bGxNb2Rl
IG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0
cmVhbS0+ZmV0Y2g8TVRMQ3VsbE1vZGU+KCk7CiAgICAgW2VuY29kZXIgc2V0Q3VsbE1vZGU6bW9k
ZV07CiB9CiAKIHZvaWQgU2V0RGVwdGhTdGVuY2lsU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsK
LSAgICBpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1U
TERlcHRoU3RlbmNpbFN0YXRlPj4oKTsKKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2ls
U3RhdGU6c3RhdGVdOwogICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQg
U2V0RGVwdGhCaWFzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgZmxvYXQgZGVwdGhCaWFzICA9
IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgc2xvcGVTY2FsZSA9IHN0cmVhbS0+
ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgY2xhbXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8Zmxv
YXQ+KCk7CisgICAgYXV0byBkZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAg
ICBhdXRvIHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGF1dG8gY2xh
bXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhC
aWFzOmRlcHRoQmlhcyBzbG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOwogfQogCkBA
IC0xMzQsMTMgKzEzOCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogCiB2b2lkIFNldFZp
ZXdwb3J0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMVmlld3BvcnQgdmlld3BvcnQgPSBz
dHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOworICAgIGF1dG8gdmlld3BvcnQgPSBzdHJlYW0t
PmZldGNoPE1UTFZpZXdwb3J0PigpOwogICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0
XTsKIH0KIAogdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1U
TFNjaXNzb3JSZWN0IHJlY3QgPSBzdHJlYW0tPmZldGNoPE1UTFNjaXNzb3JSZWN0PigpOworICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0U2Npc3NvclJlY3Q6cmVjdF07CiB9CiAKQEAgLTE1NSw5ICsxNTksOSBAQCB2b2lkIFNl
dEJsZW5kQ29sb3JDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVy
bWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFt
KQogewotICAgIGlkPE1UTEJ1ZmZlcj4gYnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZm
ZXI+PigpOwotICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisgICAgYXV0byBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7Cisg
ICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5k
ZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRWZXJ0ZXhC
dWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CiAgICAgW2J1ZmZlciBB
TkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0xNjUsMjYgKzE2OSwyNiBAQCB2b2lkIFNldFZlcnRl
eEJ1ZmZlckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZAogdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgPSBzdHJlYW0t
PmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAg
ICAgW2VuY29kZXIgc2V0VmVydGV4QnVmZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
IH0KIAogdm9pZCBTZXRWZXJ0ZXhCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIHNpemVf
dCBzaXplICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7Ci0gICAgY29uc3QgdWlu
dDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOwotICAgIHVpbnQzMl90IGluZGV4ICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHNpemUgID0gc3RyZWFt
LT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7
CisgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CiB9CiAK
IHZvaWQgU2V0VmVydGV4U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBz
dHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7Ci0gICAgZmxvYXQgbG9kTWluQ2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgbG9kTWF4Q2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgdWludDMyX3QgaW5kZXgg
ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBzdGF0ZSAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisgICAgZmxvYXQg
bG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGZsb2F0IGxvZE1heENs
YW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBhdXRvIGluZGV4ICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0
YXRlOnN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1w
CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1heENsYW1wOmxvZE1heENsYW1wCkBAIC0xOTUs
MTcgKzE5OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIAogdm9pZCBTZXRWZXJ0ZXhUZXh0dXJlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMVGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmluZGV4
XTsKICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQgU2V0RnJhZ21l
bnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9
IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICB1aW50MzJfdCBvZmZzZXQgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gYnVmZmVyID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CiAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJ
bmRleDppbmRleF07CiAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0yMTMs
MjYgKzIxNywyNiBAQCB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogdm9pZCBTZXRGcmFnbWVudEJ1
ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3Ry
ZWFtKQogewotICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
Ci0gICAgdWludDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBh
dXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBpbmRleCAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldEZyYWdtZW50QnVm
ZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKIH0KIAogdm9pZCBTZXRGcmFnbWVudEJ5
dGVzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJl
YW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICBjb25zdCB1aW50OF90ICpieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOworICAgIGF1dG8gc2l6ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAg
ICBhdXRvIGJ5dGVzID0gc3RyZWFtLT5mZXRjaChzaXplKTsKKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5
dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6aW5kZXhdOwogfQogCiB2b2lkIFNldEZyYWdtZW50U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8
TVRMU2FtcGxlclN0YXRlPj4oKTsKLSAgICBmbG9hdCBsb2RNaW5DbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICBmbG9hdCBsb2RNYXhDbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHN0YXRlICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRlPj4oKTsKKyAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZl
dGNoPGZsb2F0PigpOworICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1wCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKQEAgLTI0MiwyNiArMjQ2LDI2
IEBAIHZvaWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVu
Y29kZXI+IGVuY29kZXIsCiAKIHZvaWQgU2V0RnJhZ21lbnRUZXh0dXJlQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRM
VGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwog
ICAgIFtlbmNvZGVyIHNldEZyYWdtZW50VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5kZXhdOwog
ICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKIH0KIAogdm9pZCBEcmF3Q21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFt
LT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0ICAg
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4
Q291bnQgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHBy
aW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0
byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHZl
cnRleENvdW50ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQgdmVydGV4
Q291bnQ6dmVydGV4Q291bnRdOwogfQogCiB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKIHsKLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZl
dGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4U3RhcnQgICAgICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCB2ZXJ0ZXhDb3Vu
dCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IGlu
c3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworICAg
IGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGlu
c3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKICAgICAgICAgICAgICAgICB2ZXJ0ZXhTdGFydDp2
ZXJ0ZXhTdGFydAogICAgICAgICAgICAgICAgIHZlcnRleENvdW50OnZlcnRleENvdW50CkBAIC0y
NzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIERyYXdJbmRl
eGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVU
eXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IGlu
ZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+
ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291bnQgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAgICA9IHN0cmVhbS0+
ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNldCAgPSBzdHJlYW0t
PmZldGNoPHNpemVfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJp
bWl0aXZlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlwZQpAQCAtMjg1LDEy
ICsyODksMTIgQEAgdm9pZCBEcmF3SW5kZXhlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmUKIAogdm9pZCBEcmF3SW5kZXhlZElu
c3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJf
dCBpbmRleENvdW50ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAg
IE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhU
eXBlPigpOwotICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0ICAgICAgICAgICAg
PSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291
bnQgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNl
dCAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAgICBhdXRvIGluc3RhbmNlcyAgICAgPSBz
dHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0
aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50Omlu
ZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBlCkBA
IC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbwogdm9pZCBEcmF3SW5k
ZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXhDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90
IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAg
TVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRj
aDxpZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9
IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOwotICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgYmFzZVZlcnRl
eCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHByaW1p
dGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0byBp
bmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4
VHlwZSAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4VHlwZT4oKTsKKyAgICBhdXRvIGluZGV4
QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisgICAgYXV0byBidWZm
ZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBpbnN0YW5jZXMg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGJhc2VWZXJ0ZXggICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJp
bWl0aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50
OmluZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBl
CkBAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRl
eENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIHZvaWQgU2V0VmlzaWJp
bGl0eVJlc3VsdE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0g
KnN0cmVhbSkKIHsKLSAgICBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZSBtb2RlID0gc3RyZWFtLT5m
ZXRjaDxNVExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKLSAgICBzaXplX3Qgb2Zmc2V0ICAgICAg
ICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBtb2RlICAgPSBz
dHJlYW0tPmZldGNoPE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlPigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmlzaWJpbGl0eVJl
c3VsdE1vZGU6bW9kZSBvZmZzZXQ6b2Zmc2V0XTsKIH0KIAogdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFJlc291cmNlPiByZXNvdXJjZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVzb3VyY2U+PigpOwotICAgIE1UTFJlc291cmNlVXNhZ2UgdXNhZ2UgICA9
IHN0cmVhbS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsKLSAgICBtdGw6OlJlbmRlclN0YWdl
cyBzdGFnZXMgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgIGF1dG8g
cmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKyAgICBhdXRvIHVz
YWdlICAgID0gc3RyZWFtLT5mZXRjaDxNVExSZXNvdXJjZVVzYWdlPigpOworICAgIGF1dG8gc3Rh
Z2VzICAgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOwogICAgIEFOR0xFX1VO
VVNFRF9WQVJJQUJMRShzdGFnZXMpOwogI2lmIGRlZmluZWQoX19JUEhPTkVfMTNfMCkgfHwgZGVm
aW5lZChfX01BQ18xMF8xNSkKICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4x
NSwgMTMuMCwgMTMuMCkpCkBAIC0zNTEsOSArMzU1LDkgQEAgdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmUKIHZvaWQgTWVtb3J5QmFycmllcldpdGhSZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMUmVzb3VyY2U+IHJl
c291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7Ci0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKLSAg
ICBtdGw6OlJlbmRlclN0YWdlcyBiZWZvcmUgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3Rh
Z2VzPigpOworICAgIGF1dG8gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNl
Pj4oKTsKKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKKyAgICBhdXRvIGJlZm9yZSAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYWZ0ZXIpOwogICAgIEFOR0xFX1VOVVNF
RF9WQVJJQUJMRShiZWZvcmUpOwogI2lmIGRlZmluZWQoX19NQUNfMTBfMTQpICYmIChUQVJHRVRf
T1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkKQEAgLTM2OCw5ICszNzIsMTYgQEAgdm9p
ZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKK3ZvaWQg
SW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCit7CisgICAgYXV0byBsYWJlbCA9IHN0
cmVhbS0+ZmV0Y2g8TlNTdHJpbmcgKj4oKTsKKyAgICBbZW5jb2RlciBpbnNlcnREZWJ1Z1NpZ25w
b3N0OmxhYmVsXTsKKyAgICBbbGFiZWwgQU5HTEVfTVRMX1JFTEVBU0VdOworfQorCiB2b2lkIFB1
c2hEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0g
c3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgIGF1dG8gbGFiZWwgPSBzdHJlYW0tPmZl
dGNoPE5TU3RyaW5nICo+KCk7CiAgICAgW2VuY29kZXIgcHVzaERlYnVnR3JvdXA6bGFiZWxdOwog
ICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0zODgsNyArMzk5LDcgQEAgY29u
c3RleHByIENvbW1hbmRFbmNvZGVyRnVuYyBnQ29tbWFuZEVuY29kZXJzW10gPSB7QU5HTEVfTVRM
X0NNRF9YKEFOR0xFX01UTF9DTUQKIAogTlNTdHJpbmcgKmNwcExhYmVsVG9PYmpDKGNvbnN0IHN0
ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKKyAgICBhdXRvIGxhYmVsID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKICAgICBpZiAoIWxh
YmVsKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBzdHJpbmcgaXMg
bm90IGEgdmFsaWQgYXNjaWkgc3RyaW5nLgpAQCAtMzk2LDcgKzQwNyw2IEBAIE5TU3RyaW5nICpj
cHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQogICAgIH0KICAgICByZXR1
cm4gbGFiZWw7CiB9Ci0KIH0KIAogLy8gQ29tbWFuZFF1ZXVlIGltcGxlbWVudGF0aW9uCkBAIC01
NjUsMTEgKzU3NSwxMSBAQCBDb21tYW5kQnVmZmVyOjp+Q29tbWFuZEJ1ZmZlcigpCiAgICAgY2xl
YW51cCgpOwogfQogCi1ib29sIENvbW1hbmRCdWZmZXI6OnJlYWR5KCkgY29uc3QKK2Jvb2wgQ29t
bWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAogewogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsZyhtTG9jayk7CiAKLSAgICByZXR1cm4gcmVhZHlJbXBsKCk7CisgICAgcmV0dXJuIHZh
bGlkSW1wbCgpOwogfQogCiB2b2lkIENvbW1hbmRCdWZmZXI6OmNvbW1pdCgpCkBAIC01OTgsNyAr
NjA4LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpzZXRXcml0ZURlcGVuZGVuY3koY29uc3QgUmVz
b3VyY2VSZWYgJnJlc291cmNlKQogCiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxn
KG1Mb2NrKTsKIAotICAgIGlmICghcmVhZHlJbXBsKCkpCisgICAgaWYgKCF2YWxpZEltcGwoKSkK
ICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MjAsNyArNjMwLDcgQEAgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRSZWFkRGVwZW5kZW5jeShSZXNvdXJjZSAqcmVzb3VyY2UpCiAKICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOwogCi0gICAgaWYgKCFyZWFk
eUltcGwoKSkKKyAgICBpZiAoIXZhbGlkSW1wbCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6cmVzdGFydCgp
CiAgICAgQVNTRVJUKG1ldGFsQ21kQnVmZmVyKTsKIH0KIAotdm9pZCBDb21tYW5kQnVmZmVyOjpx
dWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRf
dCB2YWx1ZSkKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW5zZXJ0RGVidWdTaWduKGNvbnN0IHN0ZDo6
c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1M
b2NrKTsKLQotICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Ci0KLSAgICBpZiAobUFjdGl2ZUNvbW1h
bmRFbmNvZGVyICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgpID09IENvbW1hbmRF
bmNvZGVyOjpSRU5ERVIpCisgICAgbXRsOjpDb21tYW5kRW5jb2RlciAqY3VycmVudEVuY29kZXIg
PSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisgICAgaWYgKGN1cnJlbnRFbmNvZGVyKQogICAgIHsK
LSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVudCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBy
ZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcgdW50aWwgdGhlCi0gICAgICAgIC8vIHBhc3Mg
ZW5kLgotICAgICAgICBtUGVuZGluZ1NpZ25hbEV2ZW50cy5wdXNoX2JhY2soe2V2ZW50LCB2YWx1
ZX0pOworICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2VyKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOworICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICAg
ICBtUGVuZGluZ0RlYnVnU2lnbnMucHVzaF9iYWNrKG1hcmtlcik7CiAgICAgfQogfQogCi12b2lk
IENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRFdmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCit2b2lkIENvbW1hbmRCdWZmZXI6OnB1c2hEZWJ1Z0dy
b3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKLSAgICBBU1NFUlQocmVhZHlJbXBsKCkpOwotCi0gICAgd2Fp
dEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgIC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVu
dCB0aGlzCiB9CiAKLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCiB7
Ci0gICAgbURlYnVnR3JvdXBzLnB1c2hfYmFjayhtYXJrZXIpOworICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCit9CiAKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNp
Z25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAotICAgIGlmIChy
ZWFkeUltcGwoKSkKKyAgICBBU1NFUlQodmFsaWRJbXBsKCkpOworCisgICAgaWYgKG1BY3RpdmVD
b21tYW5kRW5jb2RlciAmJiBtQWN0aXZlQ29tbWFuZEVuY29kZXItPmdldFR5cGUoKSA9PSBDb21t
YW5kRW5jb2Rlcjo6UkVOREVSKQogICAgIHsKLSAgICAgICAgcHVzaERlYnVnR3JvdXBJbXBsKG1h
cmtlcik7CisgICAgICAgIC8vIFdlIGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBh
Y3RpdmUgcmVuZGVyIHBhc3MsIGRlZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRoZQorICAgICAgICAv
LyBwYXNzIGVuZC4KKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMucHVzaF9iYWNrKHtldmVu
dCwgdmFsdWV9KTsKICAgICB9Ci19Ci0KLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91
cCgpCi17Ci0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHkoKSkKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsKKyAgICAgICAgc2V0RXZlbnRJbXBsKGV2
ZW50LCB2YWx1ZSk7CiAgICAgfQorfQogCit2b2lkIENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRF
dmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAgICBBU1NFUlQo
dmFsaWRJbXBsKCkpOwogCi0gICAgaWYgKHJlYWR5SW1wbCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CiB9CiAKIC8qKiBw
cml2YXRlIHVzZSBvbmx5ICovCkBAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgQ29tbWFuZEJ1ZmZl
cjo6c2V0KGlkPE1UTENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKQogdm9pZCBDb21tYW5kQnVm
ZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5jb2RlcikKIHsK
ICAgICBtQWN0aXZlQ29tbWFuZEVuY29kZXIgPSBlbmNvZGVyOworICAgIGZvciAoYXV0byAmbWFy
a2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorICAgIHsKKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsYWJlbCA9IGNwcExhYmVsVG9PYmpD
KG1hcmtlcik7CisgICAgICAgICAgICBlbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOwor
ICAgICAgICB9CisgICAgfQorICAgIG1QZW5kaW5nRGVidWdTaWducy5jbGVhcigpOwogfQogCiB2
b2lkIENvbW1hbmRCdWZmZXI6OmludmFsaWRhdGVBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5k
RW5jb2RlciAqZW5jb2RlcikKQEAgLTcyOSw3ICs3NDgsNyBAQCB2b2lkIENvbW1hbmRCdWZmZXI6
OmNsZWFudXAoKQogICAgIFBhcmVudENsYXNzOjpzZXQobmlsKTsKIH0KIAotYm9vbCBDb21tYW5k
QnVmZmVyOjpyZWFkeUltcGwoKSBjb25zdAorYm9vbCBDb21tYW5kQnVmZmVyOjp2YWxpZEltcGwo
KSBjb25zdAogewogICAgIGlmICghUGFyZW50Q2xhc3M6OnZhbGlkKCkpCiAgICAgewpAQCAtNzQx
LDcgKzc2MCw3IEBAIGJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKIAogdm9p
ZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKIHsKLSAgICBpZiAoIXJlYWR5SW1wbCgpKQor
ICAgIGlmICghdmFsaWRJbXBsKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODg5LDYgKzkwOCwxNyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAg
ICBbZ2V0KCkgcG9wRGVidWdHcm91cF07CiB9CiAKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbihOU1N0cmluZyAqbGFiZWwpCit7CisgICAgaW5zZXJ0RGVidWdTaWduSW1wbChs
YWJlbCk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwoTlNT
dHJpbmcgKmxhYmVsKQoreworICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICBbZ2V0
KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07Cit9CisKIC8vIFJlbmRlckNvbW1hbmRFbmNv
ZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCiBSZW5kZXJDb21tYW5kRW5jb2RlclNoYWRl
clN0YXRlczo6UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXMoKQogewpAQCAtOTUxLDYg
Kzk4MSw5IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0KCkKICAgICB7
CiAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOwogICAgIH0KKworICAgIHZpc2liaWxpdHlS
ZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZURpc2FibGVkOworICAg
IHZpc2liaWxpdHlSZXN1bHRCdWZmZXJPZmZzZXQgPSAwOwogfQogCiAvLyBSZW5kZXJDb21tYW5k
RW5jb2RlciBpbXBsZW10YXRpb24KQEAgLTEwMTQsMTEgKzEwNDcsMTIgQEAgdm9pZCBSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6ZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oCiAgICAgewogICAgICAgICBp
ZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9u
U3RvcmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEUoaHFsZSk6IEN1cnJlbnRseSBp
ZiB0aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1wbGljaXQgTVMgdGV4dHVyZSBpcwotICAgICAgICAg
ICAgLy8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRv
IHN0b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKLSAgICAgICAgICAgIC8vIG1pZ2h0IGludHJv
ZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gQ29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBh
cyBvbmx5IHN0b3JlIHRoZQotICAgICAgICAgICAgLy8gTVMgdGV4dHVyZSwgYW5kIHJlc29sdmUg
b25seSBhdCB0aGUgZW5kIG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUg
aXMKLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisgICAgICAgICAgICAvLyBOT1RF
KGhxbGUpOiBDdXJyZW50bHkgaWYgdGhlIHN0b3JlIGFjdGlvbiB3aXRoIGltcGxpY2l0IE1TIHRl
eHR1cmUgaXMgTVRMU3RvcmVBY3Rpb24sCisgICAgICAgICAgICAvLyBpdCBpcyBhdXRvbWF0aWNh
bGx5IGNvbnZlcnQgdG8gc3RvcmUgYW5kIHJlc29sdmUgYWN0aW9uLiBJdCBtaWdodCBpbnRyb2R1
Y2UKKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorICAgICAgICAgICAgLy8g
Q29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBhcyBvbmx5IHN0b3JlIHRoZSBNUyB0ZXh0dXJl
LCBhbmQgcmVzb2x2ZSBvbmx5IGF0CisgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHJlYWwgcmVu
ZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUgd2FzIGludGVycnVwdGVkIGJ5IGNvbXB1dGUg
cGFzcykKKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBvcGVyYXRp
b24gc3RhcnRzLgogICAgICAgICAgICAgb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0
aW9uID0gTVRMU3RvcmVBY3Rpb25TdG9yZUFuZE11bHRpc2FtcGxlUmVzb2x2ZTsKICAgICAgICAg
fQogICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3RvcmVBY3Rpb24g
PT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKQEAgLTEwMzYsNiArMTA3MCwxMSBAQCB2b2lkIFJl
bmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbigKIH0KIAogdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQoreworICAgIGVuZEVuY29kaW5nSW1w
bCh0cnVlKTsKK30KKwordm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmdJbXBs
KGJvb2wgY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKIHsKICAgICBpZiAoIXZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQogICAgICAgICBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihv
YmpDUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CiAgICAgfQogCi0gICAgLy8g
VXBkYXRlIGRlcHRoIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVu
Y29kaW5nKCkKKyAgICAvLyBVcGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQo
KSBhbmQgZW5kRW5jb2RpbmcoKQogICAgIG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQuc3RvcmVBY3Rpb24gPSBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0
aW9uOwogICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0
aEF0dGFjaG1lbnQpOwogCi0gICAgLy8gVXBkYXRlIHN0ZW5jaWwgc3RvcmUgYWN0aW9uIHNldCBi
ZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorICAgIC8vIFVwZGF0ZSBzdG9yZSBh
Y3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygpCiAgICAgb2JqQ1Jl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uOwogICAgIGZpbmFsaXpl
TG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CkBA
IC0xMDc1LDI2ICsxMTE0LDc4IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVuY29k
aW5nKCkKIAogICAgIENvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZygpOwogCisjaWYgQU5HTEVf
TVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKyAgICBpZiAoY29uc2lkZXJEaXNjYXJk
U2ltdWxhdGlvbikKKyAgICB7CisgICAgICAgIHNpbXVsYXRlRGlzY2FyZEZyYW1lYnVmZmVyKCk7
CisgICAgfQorI2VuZGlmCisKICAgICAvLyByZXNldCBzdGF0ZQogICAgIG1SZW5kZXJQYXNzRGVz
YyA9IFJlbmRlclBhc3NEZXNjKCk7CiAgICAgbVN0YXRlQ2FjaGUucmVzZXQoKTsKIH0KIAotaW5s
aW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoCi0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZh
dHRhY2htZW50KQoraW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRXcml0ZURl
cGVuZGVuY3koY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBUZXh0dXJlUmVmIHRl
eHR1cmUgPSBhdHRhY2htZW50LnRleHR1cmU7CiAgICAgaWYgKHRleHR1cmUpCiAgICAgewogICAg
ICAgICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisgICAgfQorfQog
Ci0gICAgICAgIGNvbnN0IE1pcG1hcE5hdGl2ZUxldmVsICZtaXBMZXZlbCA9IGF0dGFjaG1lbnQu
bGV2ZWw7Cit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpzaW11bGF0ZURpc2NhcmRGcmFtZWJ1
ZmZlcigpCit7CisgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJh
dGlvbiBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVf
RElTQ0FSRF9GUkFNRUJVRkZFUgorICAgIHN0ZDo6cmFuZG9tX2RldmljZSByZDsgICAvLyBXaWxs
IGJlIHVzZWQgdG8gb2J0YWluIGEgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZW5naW5lCisg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKyAgICBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRp
b248ZmxvYXQ+IGRpcygwLjAsIDEuMGYpOworICAgIGJvb2wgaGFzRGlzY2FyZCA9IGZhbHNlOwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JBdHRh
Y2htZW50czsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0
dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSB0cnVlOworICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNo
bWVudHNbaV0ubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKyAgICAgICAgICAgIG1S
ZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQorICAgICAgICAg
ICAgICAgIE1UTENsZWFyQ29sb3JNYWtlKGRpcyhnZW4pLCBkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gPSBNVExMb2Fk
QWN0aW9uTG9hZDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoID0KLSAgICAgICAgICAgIHN0ZDo6bWluPE5TVUludGVnZXI+KG1SZW5k
ZXJQYXNzTWF4U2Npc3NvclJlY3Qud2lkdGgsIHRleHR1cmUtPndpZHRoKG1pcExldmVsKSk7Ci0g
ICAgICAgIG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0ID0KLSAgICAgICAgICAgIHN0
ZDo6bWluPE5TVUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0
dXJlLT5oZWlnaHQobWlwTGV2ZWwpKTsKKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0
YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAg
ICAgICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1ZTsK
KyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRM
TG9hZEFjdGlvbkNsZWFyOworICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50
LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlv
bkxvYWQ7CisgICAgfQorCisgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVu
dC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAgICAgICAg
aGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRydWU7Cisg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBN
VExMb2FkQWN0aW9uQ2xlYXI7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNo
bWVudC5jbGVhclN0ZW5jaWwgPSByYW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9h
ZEFjdGlvbkxvYWQ7CiAgICAgfQorCisgICAgaWYgKGhhc0Rpc2NhcmQpCisgICAgeworICAgICAg
ICBhdXRvIHRtcERlc2MgPSBtUmVuZGVyUGFzc0Rlc2M7CisgICAgICAgIHJlc3RhcnQodG1wRGVz
Yyk7CisgICAgICAgIGVuZEVuY29kaW5nSW1wbChmYWxzZSk7CisgICAgfQorI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgogfQogCiB2b2lkIFJlbmRlckNv
bW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQpAQCAtMTEwMiw3ICsxMTkzLDcgQEAg
dm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5jb2RlTWV0YWxFbmNvZGVyKCkKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgQU5HTEVfTVRMX0xPRygiQ3JlYXRpbmcg
bmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIgd2l0aCBkZXNjOiAlQCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgbUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQy5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgW21DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKIAogICAg
ICAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbWV0YWxDbWRFbmNvZGVyID0KICAgICAg
ICAgICAgIFtjbWRCdWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlw
dG9yOm1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakNdOwpAQCAtMTExMCw3ICsxMjAxLDExIEBAIHZv
aWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAgICAgICAgIHNl
dChtZXRhbENtZEVuY29kZXIpOwogCiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGl0IHdhcyBjcmVh
dGVkIHN1Y2Nlc3NmdWxseQotICAgICAgICBBU1NFUlQobWV0YWxDbWRFbmNvZGVyKTsKKyAgICAg
ICAgQVNTRVJUKGdldCgpKTsKKworICAgICAgICAvLyBXb3JrLWFyb3VuZCBkcml2ZXIgYnVnIG9u
IGlPUyBkZXZpY2VzOiBzdGVuY2lsIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gemVybworICAg
ICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5
IHplcm8uCisgICAgICAgIFttZXRhbENtZEVuY29kZXIgc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVl
OjBdOwogCiAgICAgICAgIGlmIChtTGFiZWwpCiAgICAgICAgIHsKQEAgLTExMTksNyArMTIxNCw3
IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAKICAg
ICAgICAgd2hpbGUgKG1Db21tYW5kcy5nb29kKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIENt
ZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNoPENtZFR5cGU+KCk7Cisg
ICAgICAgICAgICBhdXRvIGNtZFR5cGUgICAgICAgICAgICAgICA9IG1Db21tYW5kcy5mZXRjaDxD
bWRUeXBlPigpOwogICAgICAgICAgICAgQ29tbWFuZEVuY29kZXJGdW5jIGVuY29kZXIgPSBnQ29t
bWFuZEVuY29kZXJzW3N0YXRpY19jYXN0PGludD4oY21kVHlwZSldOwogICAgICAgICAgICAgZW5j
b2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOwogICAgICAgICB9CkBAIC0xMTQyLDQx
ICsxMjM3LDM0IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
cmVzdGFydChjb25zdCBSZW5kZXJQYXNzRGVzYyAmZGVzYykKICAgICAgICAgZW5kRW5jb2Rpbmco
KTsKICAgICB9CiAKLSAgICBpZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisgICAgaWYgKCFjbWRC
dWZmZXIoKS52YWxpZCgpKQogICAgIHsKICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIG1MYWJlbC5yZXNldCgpOworICAgIG1SZW5kZXJQYXNzRGVz
YyA9IGRlc2M7CisgICAgbVJlY29yZGluZyAgICAgID0gdHJ1ZTsKKyAgICBtSGFzRHJhd0NhbGxz
ICAgPSBmYWxzZTsKIAotICAgIG1SZW5kZXJQYXNzRGVzYyAgICAgICAgICAgPSBkZXNjOwotICAg
IG1SZWNvcmRpbmcgICAgICAgICAgICAgICAgPSB0cnVlOwotICAgIG1IYXNEcmF3Q2FsbHMgICAg
ICAgICAgICAgPSBmYWxzZTsKLSAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAg
ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnkgICAgICA9IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2lkdGggID0gc3RkOjpudW1lcmljX2xp
bWl0czxOU1VJbnRlZ2VyPjo6bWF4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuaGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OwotCi0g
ICAgLy8gU2V0IHdyaXRpbmcgZGVwZW5kZW5jeSAmIGNvbnN0cmFpbiB0aGUgc2Npc3NvciByZWN0
CisgICAgLy8gbWFzayB3cml0aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUg
b3B0aW9ucwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVt
Q29sb3JBdHRhY2htZW50czsgKytpKQogICAgIHsKLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0
ZURlcGVuZGVuY3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXSk7CisgICAgICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmNvbG9y
QXR0YWNobWVudHNbaV0udGV4dHVyZSgpKTsKICAgICB9CiAKLSAgICBpbml0QXR0YWNobWVudFdy
aXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQpOworICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlKCkpOwogCi0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQpOworICAgIGluaXRX
cml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUo
KSk7CiAKICAgICAvLyBDb252ZXJ0IHRvIE9iamVjdGl2ZS1DIGRlc2NyaXB0b3IKICAgICBtUmVu
ZGVyUGFzc0Rlc2MuY29udmVydFRvTWV0YWxEZXNjKG1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMp
OwogCi0gICAgLy8gVGhlIGFjdHVhbCBPYmplY3RpdmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRl
ZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBkbyBzbyBpbgotICAgIC8vIG9yZGVyIHRvIGJl
IGFibGUgdG8gc29ydCB0aGUgY29tbWFuZHMgb3IgZG8gdGhlIHByZXByb2Nlc3NpbmcgYmVmb3Jl
IHRoZSBhY3R1YWwKLSAgICAvLyBlbmNvZGluZy4KKyAgICAvLyBUaGUgYWN0dWFsIE9iamVjdGl2
ZS1DIGVuY29kZXIgd2lsbCBiZSBjcmVhdGVkIGxhdGVyIGluIGVuZEVuY29kaW5nKCksIHdlIGRv
IHNvIGluIG9yZGVyCisgICAgLy8gdG8gYmUgYWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBk
byB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUgdGhlIGFjdHVhbCBlbmNvZGluZy4KIAotICAgIC8v
IFNpbmNlIHdlIGRlZmVyIHRoZSBuYXRpdmUgZW5jb2RlciBjcmVhdGlvbiwgd2UgbmVlZCB0byBl
eHBsaWNpdGx5IHRlbGwgY29tbWFuZCBidWZmZXIKLSAgICAvLyB0aGF0IHRoaXMgb2JqZWN0IGlz
IHRoZSBhY3RpdmUgZW5jb2RlcjoKKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVu
Y29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVy
IHRoYXQKKyAgICAvLyB0aGlzIG9iamVjdCBpcyB0aGUgYWN0aXZlIGVuY29kZXI6CiAgICAgY21k
QnVmZmVyKCkuc2V0QWN0aXZlQ29tbWFuZEVuY29kZXIodGhpcyk7CiAKICAgICByZXR1cm4gKnRo
aXM7CkBAIC0xMzAyLDE2ICsxMzkwLDYgQEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpzZXRTY2lzc29yUmVjdChjb25zdCBNVExTY2lzc29yUmVjdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWShy
ZWN0LnggKyByZWN0LndpZHRoID4gbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0LmhlaWdodCA+IG1SZW5kZXJQYXNz
TWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIFdBUk4oKSA8PCAiT3V0IG9m
IGJvdW5kIHNjaXNzb3IgcmVjdCBkZXRlY3RlZCAiIDw8IHJlY3QueCA8PCAiICIgPDwgcmVjdC55
IDw8ICIgIgotICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0aCA8PCAiICIgPDwgcmVjdC5oZWln
aHQ7Ci0gICAgICAgIC8vIE91dCBvZiBib3VuZCByZWN0IHdpbGwgY3Jhc2ggdGhlIG1ldGFsIHJ1
bnRpbWUsIGlnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAgIG1T
dGF0ZUNhY2hlLnNjaXNzb3JSZWN0ID0gcmVjdDsKIAogICAgIG1Db21tYW5kcy5wdXNoKENtZFR5
cGU6OlNldFNjaXNzb3JSZWN0KS5wdXNoKHJlY3QpOwpAQCAtMTM4Myw3ICsxNDYxLDcgQEAgUmVu
ZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpjb21tb25TZXRCdWZmZXIo
Z2w6OlNoYWRlclR5cGUgc2hhZGUKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVu
dCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZzZXQgb25seS4KKyAgICAgICAgLy8gSWYgYnVm
ZmVyIGFscmVhZHkgYm91bmQgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldCwgdGhlbiB1cGRhdGUg
dGhlIG9mZmVyIG9ubHkuCiAgICAgICAgIHNoYWRlclN0YXRlcy5idWZmZXJPZmZzZXRzW2luZGV4
XSA9IG9mZnNldDsKIAogICAgICAgICBtQ29tbWFuZHMucHVzaChzdGF0aWNfY2FzdDxDbWRUeXBl
PihtU2V0QnVmZmVyT2Zmc2V0Q21kc1tzaGFkZXJUeXBlXSkpCkBAIC0xNDkwLDEyICsxNTY4LDYg
QEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3KE1UTFBy
aW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCkK
IHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkK
LSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVy
IHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotCiAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CiAgICAgbUNvbW1hbmRzLnB1c2go
Q21kVHlwZTo6RHJhdykucHVzaChwcmltaXRpdmVUeXBlKS5wdXNoKHZlcnRleFN0YXJ0KS5wdXNo
KHZlcnRleENvdW50KTsKIApAQCAtMTUwNywxMiArMTU3OSw2IEBAIFJlbmRlckNvbW1hbmRFbmNv
ZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
IHByaW1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKQogewot
ICAgIGlmIChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQotICAg
IHsKLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KICAgICBtSGFzRHJhd0NhbGxzID0gdHJ1ZTsKICAgICBtQ29tbWFuZHMucHVzaChDbWRU
eXBlOjpEcmF3SW5zdGFuY2VkKQogICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQpAQCAtMTUy
OSwxMyArMTU5NSw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6ZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAm
aW5kZXhCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCiB7Ci0gICAgaWYgKEFOR0xFX1VOTElL
RUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAgewotICAgICAgICAvLyBJZ25v
cmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBzZXQgcHJp
b3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5kZXhCdWZmZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTU2MCwxMyArMTYyMCw3IEBAIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luZGV4ZWRJbnN0YW5j
ZWQoTVRMUHJpbWl0aXZlVHlwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGluc3RhbmNlcykKIHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNh
Y2hlLnJlbmRlclBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwg
aWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFp
bmRleEJ1ZmZlcikpCisgICAgaWYgKCFpbmRleEJ1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CkBAIC0xNTk0LDEzICsxNjQ4LDcgQEAgUmVuZGVyQ29tbWFuZEVuY29k
ZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgo
CiAgICAgdWludDMyX3QgaW5zdGFuY2VzLAogICAgIHVpbnQzMl90IGJhc2VWZXJ0ZXgpCiB7Ci0g
ICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAg
ewotICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBl
bGluZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5k
ZXhCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
bWVtb3J5QmFycmllcldpdGhSZXNvdXJjZShjb25zdCBCdWZmCiAgICAgcmV0dXJuICp0aGlzOwog
fQogCit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ25JbXBsKE5TU3Ry
aW5nICpsYWJlbCkKK3sKKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVuZEVuY29k
aW5nKCkKKyAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpJbnNlcnREZWJ1Z3NpZ24pLnB1c2go
W2xhYmVsIEFOR0xFX01UTF9SRVRBSU5dKTsKK30KKwogdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6cHVzaERlYnVnR3JvdXAoTlNTdHJpbmcgKmxhYmVsKQogewogICAgIC8vIERlZmVyIHRoZSBp
bnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQpAQCAtMTc5OSw3ICsxODUzLDcgQEAgQmxpdENv
bW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnJlc3RhcnQoKQogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFk
eSgpKQorICAgICAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0xOTYyLDYgKzIw
MTYsNjYgQEAgQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OmZpbGxCdWZm
ZXIoY29uc3QgQnVmZmVyUmVmICZidWZmZXIsCiAgICAgcmV0dXJuICp0aGlzOwogfQogCitCbGl0
Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUoY29uc3QgVGV4
dHVyZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjU3RhcnRMZXZlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZXh0dXJlUmVmICZkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RTdGFydExldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHNsaWNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKK3sKKyAgICBpZiAoIXNyYyB8fCAhZHN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNtZEJ1ZmZlcigp
LnNldFJlYWREZXBlbmRlbmN5KHNyYyk7CisgICAgY21kQnVmZmVyKCkuc2V0V3JpdGVEZXBlbmRl
bmN5KGRzdCk7CisKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNf
MTBfMTUpCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEz
LjApKQorICAgIHsKKyAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c3JjU3RhcnRTbGljZQorICAgICAgICAgICAg
ICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgIHRv
VGV4dHVyZTpkc3QtPmdldCgpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U3Rh
cnRTbGljZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKyAg
ICAgICAgICAgICAgICAgICAgc2xpY2VDb3VudDpzbGljZUNvdW50CisgICAgICAgICAgICAgICAg
ICAgIGxldmVsQ291bnQ6bGV2ZWxDb3VudF07CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAg
IHsKKyAgICAgICAgTVRMT3JpZ2luIG9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoMCwgMCwgMCk7Cisg
ICAgICAgIGZvciAodWludDMyX3Qgc2xpY2UgPSAwOyBzbGljZSA8IHNsaWNlQ291bnQ7ICsrc2xp
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNlID0gc3JjU3RhcnRT
bGljZSArIHNsaWNlOworICAgICAgICAgICAgdWludDMyX3QgZHN0U2xpY2UgPSBkc3RTdGFydFNs
aWNlICsgc2xpY2U7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbENvdW50OyArK2xldmVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG10
bDo6TWlwbWFwTmF0aXZlTGV2ZWwgc3JjTGV2ZWwgPSBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKHNy
Y1N0YXJ0TGV2ZWwgKyBsZXZlbCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwg
PSBkc3RTdGFydExldmVsICsgbGV2ZWw7CisgICAgICAgICAgICAgICAgTVRMU2l6ZSBzcmNTaXpl
ID0KKyAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2Uoc3JjLT53aWR0aChzcmNMZXZlbCks
IHNyYy0+aGVpZ2h0KHNyY0xldmVsKSwgc3JjLT5kZXB0aChzcmNMZXZlbCkpOworCisgICAgICAg
ICAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzcmNTbGljZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlT3JpZ2luOm9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c3JjU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0
LT5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U2xpY2UK
KyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdExldmVsCisgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCiBCbGl0Q29tbWFuZEVu
Y29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKQEAgLTE5NzQsNyAr
MjA4OCw3IEBAIEJsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0
ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1cmVSCiAKICAgICByZXR1cm4gKnRoaXM7CiB9
Ci1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlcikKK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNv
ZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IEJ1ZmZlclJlZiAmYnVmZmVyKQogewogICAg
IGlmICghYnVmZmVyKQogICAgIHsKQEAgLTE5ODksNyArMjEwMyw3IEBAIEJsaXRDb21tYW5kRW5j
b2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVm
ZmVyKQogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQotQmxpdENvbW1hbmRFbmNvZGVyICZC
bGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoVGV4dHVyZSAqdGV4dHVyZSkK
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291
cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
IHsKQEAgLTIwMjgsNyArMjE0Miw3IEBAIENvbXB1dGVDb21tYW5kRW5jb2RlciAmQ29tcHV0ZUNv
bW1hbmRFbmNvZGVyOjpyZXN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKyAgICAgICAgaWYgKCFj
bWRCdWZmZXIoKS52YWxpZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXNldCgpOwogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKaW5k
ZXggOTdjY2I5M2Y5NmMyNmM0ZmZiOTY2OTkzZWZiYTQxYmEzZjE2ZjRmOC4uM2ZjNWUzOWQxNzhj
MDE0MGFhZTI3ODQ1MzcxMzlhOGQ0MWMwNmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oCkBAIC0yNyw5ICsyNywxOCBAQAogI2luY2x1ZGUgImxpYkFOR0xFL2FuZ2xldHlwZXMu
aCIKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKKyMgICAgaWYgIWRlZmluZWQoX19JUEhPTkVfMTFf
MCkKKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV8xMV8wIDExMDAwMAorIyAgICBlbmRpZgogIyAg
ICBpZiAhZGVmaW5lZChBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCkKICMgICAgICAgIGRlZmluZSBB
TkdMRV9JT1NfREVQTE9ZX1RBUkdFVCBfX0lQSE9ORV8xMV8wCiAjICAgIGVuZGlmCisjICAgIGlm
ICFkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisjICAgICAgICBkZWZp
bmUgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisjICAgIGVu
ZGlmCisjICAgIGlmICFkZWZpbmVkKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCkKKyMgICAg
ICAgIGRlZmluZSBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgX19JUEhPTkVfMTFfMAorIyAg
ICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCkBA
IC02Niw2ICs3NSw3IEBAIG5hbWVzcGFjZSBlZ2wKIHsKIGNsYXNzIERpc3BsYXk7CiBjbGFzcyBJ
bWFnZTsKK2NsYXNzIFN1cmZhY2U7CiB9ICAvLyBuYW1lc3BhY2UgZWdsCiAKICNkZWZpbmUgQU5H
TEVfR0xfT0JKRUNUU19YKFBST0MpIFwKQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJl
TXRsOwogY2xhc3MgUHJvZ3JhbU10bDsKIGNsYXNzIFNhbXBsZXJNdGw7CiBjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFja010bDsKK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKIAogQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCiAKQEAgLTEyOCw3ICsxMzksOCBA
QCBjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxv
YXQpOwogLy8gTWV0YWwgbGltaXRzCiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZl
cnMgICAgID0gMzE7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclNhbXBsZXJzICAgID0g
MTY7Ci1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAqIDEwMjQ7
Citjb25zdGV4cHIgc2l6ZV90IGtJbmxpbmVDb25zdERhdGFNYXhTaXplID0gNCAqIDEwMjQ7Citj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0RGF0
YU1heFNpemU7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAgICAgID0gMTsK
IAogY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQg
PSA0OwpAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBrSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OwogY29uc3RleHByIHVpbnQzMl90IGtBcmd1bWVudEJ1
ZmZlck9mZnNldEFsaWdubWVudCAgICA9IGtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFs
aWdubWVudDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGln
bm1lbnQgPSAyNTY7CiAKLS8vIEZyb250IGVuZCBiaW5kaW5nIGxpbWl0cworLy8gRm9udCBlbmQg
YmluZGluZyBsaW1pdHMKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmluZGluZ3Mg
PSAyICoga01heFNoYWRlclNhbXBsZXJzOwogY29uc3RleHByIHVpbnQzMl90IGtNYXhHTFVCT0Jp
bmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKIApAQCAtMTU1LDIxICsxNjcsMjMgQEAg
Y29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5k
aW5nSW5kZXhTdGFydCArIGtNYXhWZXIKIGNvbnN0ZXhwciB1aW50MzJfdCBrRHJpdmVyVW5pZm9y
bXNCaW5kaW5nSW5kZXggPSBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggKyAxOwogLy8gQmlu
ZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKIGNvbnN0ZXhwciB1aW50MzJfdCBrRGVm
YXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MzsKLS8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlciBvciBzdGFydGlu
ZyBkaXNjcmV0ZSBzbG90Ci1jb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmlu
ZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisvLyBCaW5kaW5n
IGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50
MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIHNoYWRvdyBzYW1wbGVycycgY29t
cGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVz
QmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKy8vIEJp
bmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlcgorY29uc3RleHByIHVpbnQzMl90
IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1v
ZGVzQmluZGluZ0luZGV4ICsgMTsKIAotY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0Fs
bCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2lsIGlzIHN1cHBvcnRlZAorY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0IHN0ZW5jaWwg
aXMgc3VwcG9ydGVkCiAKIC8vIFRoaXMgc3BlY2lhbCBjb25zdGFudCBpcyB1c2VkIHRvIGluZGlj
YXRlIHRoYXQgYSBwYXJ0aWN1bGFyIHZlcnRleCBkZXNjcmlwdG9yJ3MgYnVmZmVyIGxheW91dAog
Ly8gaW5kZXggaXMgdW51c2VkLgogY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVy
dGV4U3RlcEZ1bmN0aW9uSW52YWxpZCA9CiAgICAgc3RhdGljX2Nhc3Q8TVRMVmVydGV4U3RlcEZ1
bmN0aW9uPigweGZmKTsKIAotY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsK
LQotY29uc3RleHByIHNpemVfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKK2NvbnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKIAot
Y29uc3RleHByIGdsOjpWZXJzaW9uIGtNYXhTdXBwb3J0ZWRHTFZlcnNpb24gPSBnbDo6VmVyc2lv
bigzLCAwKTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0g
c2l6ZW9mKHVpbnQ2NF90KTsKIAogLy8gV29yay1hcm91bmQgdGhlIGVudW0gaXMgbm90IGF2YWls
YWJsZSBvbiBtYWNPUwogI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNU
CkBAIC0xNzksMTMgKzE5MywxMSBAQCBjb25zdGV4cHIgTVRMQmxpdE9wdGlvbiBrQmxpdE9wdGlv
blJvd0xpbmVhclBWUlRDICAgICAgICAgID0gTVRMQmxpdE9wdGlvblJvd0xpbgogI2VuZGlmCiAK
ICNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCi0jICAg
IGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMQogdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CiB1c2luZyBSZW5kZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTVRMUmVu
ZGVyU3RhZ2VzOwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXgg
ICA9IE1UTFJlbmRlclN0YWdlVmVydGV4OwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVu
ZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CiAjZWxzZQotIyAgICBk
ZWZpbmUgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFIDAKIHVzaW5nIFRleHR1cmVTd2l6emxl
Q2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CiB1c2luZyBSZW5k
ZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaW50Owog
Y29uc3RleHByIFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICAgICAgICAgICAgICAg
ICA9IDE7CkBAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpE
aXNwbGF5PgogewogICAgIHVzaW5nIEltcGxUeXBlID0gRGlzcGxheU10bDsKIH07Ci0KK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNlPgoreworICAgIHVzaW5n
IEltcGxUeXBlID0gU3VyZmFjZU10bFByb3RvY29sOworfTsKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgogdXNpbmcgR2V0SW1wbFR5cGUgPSB0eXBlbmFtZSBJbXBsVHlwZUhlbHBlcjxUPjo6SW1wbFR5
cGU7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29u
c3QgVCAqX05vbm51bGwgZ2xPYmplY3QpCitHZXRJbXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBU
ICpnbE9iamVjdCkKIHsKICAgICByZXR1cm4gR2V0SW1wbEFzPEdldEltcGxUeXBlPFQ+PihnbE9i
amVjdCk7CiB9CkBAIC0zNDYsMjEgKzM2MiwxNiBAQCB1c2luZyBBdXRvT2JqQ09iaiA9IEF1dG9P
YmpDUHRyPFQgKj47CiAKIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24g
aU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKICNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRl
ZmluZWQoX19NQUNfMTBfMTQpCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxF
IDEKIHVzaW5nIFNoYXJlZEV2ZW50UmVmID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+
PjsKICNlbHNlCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFIDAKIHVzaW5n
IFNoYXJlZEV2ZW50UmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBB
dXRvT2JqQ09iajxOU09iamVjdD47CiAjZW5kaWYKIAogLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRl
eCB1c2VkIGJ5IE1ldGFsIGJhY2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1p
cG1hcCBsZXZlbCBpbnN0ZWFkCiAvLyBvZiAidmlydHVhbCIgbGV2ZWwgbW9kaWZpZWQgYnkgT3Bl
bkdMJ3MgYmFzZSBsZXZlbC4KIHVzaW5nIE1pcG1hcE5hdGl2ZUxldmVsID0gZ2w6OkxldmVsSW5k
ZXhXcmFwcGVyPHVpbnQzMl90PjsKLQogY29uc3RleHByIE1pcG1hcE5hdGl2ZUxldmVsIGtaZXJv
TmF0aXZlTWlwTGV2ZWwoMCk7Ci0KIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleCBmaW5hbAogewogICBwdWJsaWM6CkBAIC0zNzAsNTUgKzM4
MSw0MiBAQCBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4IGZpbmFsCiAgICAgICAgIG1OYXRpdmVJbmRl
eCA9IGdsOjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExl
dmVsSW5kZXgoKSAtIGJhc2VMZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0TGF5ZXJJbmRleCgpLCBzcmMuZ2V0TGF5ZXJDb3Vu
dCgpKTsKICAgICB9Ci0KICAgICBzdGF0aWMgSW1hZ2VOYXRpdmVJbmRleCBGcm9tQmFzZVplcm9H
TEluZGV4KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZzcmMpCiAgICAgewogICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOwogICAgIH0KLQogICAgIE1pcG1hcE5hdGl2ZUxldmVs
IGdldE5hdGl2ZUxldmVsKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBNaXBtYXBOYXRp
dmVMZXZlbChtTmF0aXZlSW5kZXguZ2V0TGV2ZWxJbmRleCgpKTsKICAgICB9Ci0KICAgICBnbDo6
VGV4dHVyZVR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRUeXBl
KCk7IH0KICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUlu
ZGV4LmdldExheWVySW5kZXgoKTsgfQogICAgIEdMaW50IGdldExheWVyQ291bnQoKSBjb25zdCB7
IHJldHVybiBtTmF0aXZlSW5kZXguZ2V0TGF5ZXJDb3VudCgpOyB9CiAgICAgR0xpbnQgY3ViZU1h
cEZhY2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5jdWJlTWFwRmFjZUluZGV4
KCk7IH0KLQogICAgIGJvb2wgaXNMYXllcmVkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmlzTGF5ZXJlZCgpOyB9CiAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleC5oYXNMYXllcigpOyB9CiAgICAgYm9vbCBoYXMzRExheWVyKCkgY29uc3QgeyByZXR1
cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQogICAgIGJvb2wgdXNlc1RleDNEKCkgY29u
c3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnVzZXNUZXgzRCgpOyB9Ci0KICAgICBib29sIHZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7IH0KLQogICAgIEltYWdlTmF0
aXZlSW5kZXhJdGVyYXRvciBnZXRMYXllckl0ZXJhdG9yKEdMaW50IGxheWVyQ291bnQpIGNvbnN0
OwotCiAgIHByaXZhdGU6CiAgICAgZ2w6OkltYWdlSW5kZXggbU5hdGl2ZUluZGV4OwogfTsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGZpbmFsCiB7CiAgIHB1YmxpYzoKICAgICBJ
bWFnZU5hdGl2ZUluZGV4IG5leHQoKSB7IHJldHVybiBJbWFnZU5hdGl2ZUluZGV4KG1OYXRpdmVJ
bmRleEl0ZS5uZXh0KCksIDApOyB9CiAgICAgSW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29u
c3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAw
KTsgfQogICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleEl0ZS5o
YXNOZXh0KCk7IH0KLQogICBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3MgaXMgb25seSBjb25z
dHJ1Y3RhYmxlIGZyb20gSW1hZ2VOYXRpdmVJbmRleAogICAgIGZyaWVuZCBjbGFzcyBJbWFnZU5h
dGl2ZUluZGV4OwotCiAgICAgZXhwbGljaXQgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yKGNvbnN0
IGdsOjpJbWFnZUluZGV4SXRlcmF0b3IgJmJhc2VaZXJvU3JjKQogICAgICAgICA6IG1OYXRpdmVJ
bmRleEl0ZShiYXNlWmVyb1NyYykKICAgICB7fQotCiAgICAgZ2w6OkltYWdlSW5kZXhJdGVyYXRv
ciBtTmF0aXZlSW5kZXhJdGU7CiB9OwotCiB1c2luZyBDbGVhckNvbG9yVmFsdWVCeXRlcyA9IHN0
ZDo6YXJyYXk8dWludDhfdCwgNCAqIHNpemVvZihmbG9hdCk+OwotCiBjbGFzcyBDbGVhckNvbG9y
VmFsdWUKIHsKICAgcHVibGljOgpAQCAtNDM3LDIyICs0MzUsMTUgQEAgY2xhc3MgQ2xlYXJDb2xv
clZhbHVlCiAgICAgY29uc3RleHByIENsZWFyQ29sb3JWYWx1ZShjb25zdCBDbGVhckNvbG9yVmFs
dWUgJnNyYykKICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZh
bHVlQnl0ZXMpCiAgICAge30KLQogICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkg
Y29uc3Q7Ci0KICAgICBQaXhlbFR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9
Ci0KICAgICBjb25zdCBDbGVhckNvbG9yVmFsdWVCeXRlcyAmZ2V0VmFsdWVCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1WYWx1ZUJ5dGVzOyB9Ci0KICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJhdG9y
PShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7Ci0KICAgICB2b2lkIHNldEFzRmxvYXQoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiAgICAgdm9pZCBzZXRBc0ludChpbnQz
Ml90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOwogICAgIHZvaWQgc2V0QXNV
SW50KHVpbnQzMl90IHIsIHVpbnQzMl90IGcsIHVpbnQzMl90IGIsIHVpbnQzMl90IGEpOwotCiAg
IHByaXZhdGU6CiAgICAgUGl4ZWxUeXBlIG1UeXBlOwotCiAgICAgdW5pb24KICAgICB7CiAgICAg
ICAgIHN0cnVjdApAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQogICAg
ICAgICB7CiAgICAgICAgICAgICB1aW50MzJfdCBtUmVkVSwgbUdyZWVuVSwgbUJsdWVVLCBtQWxw
aGFVOwogICAgICAgICB9OwotCiAgICAgICAgIENsZWFyQ29sb3JWYWx1ZUJ5dGVzIG1WYWx1ZUJ5
dGVzOwogICAgIH07CiB9OwpAQCAtNDgzLDcgKzQ3Myw3IEBAIGNsYXNzIEVycm9ySGFuZGxlcgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGxpbmUpID0gMDsKQEAgLTQ5Myw3ICs0ODMsNyBAQCBjbGFzcyBDb250ZXh0IDog
cHVibGljIEVycm9ySGFuZGxlcgogewogICBwdWJsaWM6CiAgICAgQ29udGV4dChEaXNwbGF5TXRs
ICpkaXNwbGF5TXRsKTsKLSAgICBfTnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmlj
ZSgpIGNvbnN0OworICAgIGlkPE1UTERldmljZT4gZ2V0TWV0YWxEZXZpY2UoKSBjb25zdDsKICAg
ICBtdGw6OkNvbW1hbmRRdWV1ZSAmY21kUXVldWUoKTsKIAogICAgIERpc3BsYXlNdGwgKmdldERp
c3BsYXkoKSBjb25zdCB7IHJldHVybiBtRGlzcGxheTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIwYjJjZGY3NDRlNjQ2NDExZjlkOGJmYjc5YWQy
ZDIxNzcwMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKQEAgLTAsMCArMSw3MyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIG10bF9jb21tb24uaDoKKy8vICAgICAgRGVjbGFyZXMgbnVtZXJpY2Fs
IGNvbnN0YW50cyB1c2VkIGluIE1ldGFsLgorLy8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xh
c3MuCisvLworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNf
SAorI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExfQ09OU1RBTlRTX0gKKyNpbmNs
dWRlICJsaWJBTkdMRS9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvYW5nbGV0eXBlcy5oIgorCituYW1lc3BhY2UgcngKK3sKK25h
bWVzcGFjZSBtdGwKK3sKKworLy8gTk9URShocWxlKTogc3VwcG9ydCB2YXJpYWJsZSBtYXggbnVt
YmVyIG9mIHZlcnRleCBhdHRyaWJ1dGVzCitjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0
dHJpYnMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworLy8gTk9URShocWxlKTogc3VwcG9ydCB2
YXJpYWJsZSBtYXggbnVtYmVyIG9mIHJlbmRlciB0YXJnZXRzCitjb25zdGV4cHIgdWludDMyX3Qg
a01heFJlbmRlclRhcmdldHMgPSA0OworCitjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclVC
T3MgPSAxMjsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4VUJPU2l6ZSAgICA9IDE2Mzg0OworCitj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxvYXQp
OworCisvLyBNZXRhbCBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyQnVmZmVy
cyAgICAgPSAzMTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMgICAgPSAx
NjsKK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
K2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5lQ29uc3RE
YXRhTWF4U2l6ZTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4Vmlld3BvcnRzICAgICAgICAgPSAx
OworCitjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVu
dCA9IDQ7CisvLyBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIG9mZnNldCBwYXNzZWQgdG8gc2V0
VmVydGV4fEZyYWdtZW50QnVmZmVyCisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZzZXRN
aW5BbGlnbm1lbnQgPSAyNTY7CisjZWxzZQorY29uc3RleHByIHVpbnQzMl90IGtVbmlmb3JtQnVm
ZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisjZW5kaWYKK2NvbnN0ZXhwciB1aW50
MzJfdCBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworY29uc3RleHByIHVp
bnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKworLy8gRm9u
dCBlbmQgYmluZGluZyBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmlu
ZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworY29uc3RleHByIHVpbnQzMl90IGtNYXhH
TFVCT0JpbmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKKworLy8gQmluZGluZyBpbmRl
eCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKK2NvbnN0ZXhwciB1aW50MzJfdCBrVmJv
QmluZGluZ0luZGV4U3RhcnQgPSAwOworCisvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IGF0
dHJpYnV0ZSBidWZmZXI6Citjb25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRBdHRyaWJzQmluZGlu
Z0luZGV4ID0ga1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsga01heFZlcnRleEF0dHJpYnM7CisvLyBC
aW5kaW5nIGluZGV4IGZvciBkcml2ZXIgdW5pZm9ybXM6Citjb25zdGV4cHIgdWludDMyX3Qga0Ry
aXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRlZmF1bHQgdW5pZm9ybXM6Citjb25zdGV4cHIgdWlu
dDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRp
bmdJbmRleCArIDM7CisvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVm
ZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5k
ZXggPSBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXgg
Zm9yIHNoYWRvdyBzYW1wbGVycycgY29tcGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtT
aGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNr
QmluZGluZ0luZGV4ICsgNDsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1
ZmZlcgorY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9
IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKKworY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2ls
IGlzIHN1cHBvcnRlZAorCit9ICAvLyBuYW1lc3BhY2UgbXRsCit9ICAvLyBuYW1lc3BhY2UgcngK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgppbmRl
eCA0YTEyYTkwNzU5YmE5NjUzMzI5ODc2MDE3Nzg2ZTZiZWRjNGRiYjNlLi4yZGE3NDIxYzUxM2Qz
NzAyNDQxMDQ1YTAzMzlmNjFiMTIyYjJlN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF9tYXAuanNvbgpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgICAgICAiRDMy
X0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0IiwKICAgICAgICAgICAgICJTOF9V
SU5UIjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAogICAgICAgICAgICAgIkQzMl9GTE9BVF9T
OFgyNF9VSU5UIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4IiwKLSAgICAg
ICAgICAgICJCMTBHMTBSMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybSIs
CiAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKICAgICAgICAgICAgICJSMTBHMTBCMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdFJH
QjEwQTJVbm9ybSIsCiAgICAgICAgICAgICAiUjExRzExQjEwX0ZMT0FUIjogIk1UTFBpeGVsRm9y
bWF0UkcxMUIxMEZsb2F0IiwKLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAiTVRM
UGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKyAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAi
OiAiTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIsCisgICAgICAgICAgICAiRDE2X1VOT1JNIjog
Ik1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtIgogICAgICAgICB9LAogICAgICAgICAibWFwX2lv
cyI6IHsKICAgICAgICAgICAgICJSNUc2QjVfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRCNUc2UjVV
bm9ybSIsCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICAgICAgICAiUFZSVEMxX1JHQl80QlBQX1VO
T1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUF9zUkdCIiwKICAg
ICAgICAgICAgICJQVlJUQzFfUkdCQV8yQlBQX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiIsCiAgICAgICAgICAgICAiUFZSVEMxX1JHQkFfNEJQ
UF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQX3NSR0Ii
LAorICAgICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
RVRDMl9SR0I4IiwKICAgICAgICAgICAgICJFVEMyX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVUQzJfUkdCOCIsCiAgICAgICAgICAgICAiRVRDMl9SOEc4QjhfU1JHQl9CTE9D
SyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKICAgICAgICAgICAgICJFVEMyX1I4
RzhCOEExX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTEiLApAQCAtMTAw
LDM5ICsxMDEsMzggQEAKICAgICAgICAgICAgICJFVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCiAgICAgICAgICAgICAiRUFDX1IxMV9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSIsCiAgICAgICAgICAgICAiRUFD
X1IxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFTbm9ybSIsCi0gICAgICAg
ICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5v
cm0iLAorICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRFQUNfUjExVW5vcm0iLAogICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtIiwKLSAgICAgICAgICAgICJBU1RDXzR4NF9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIsCi0gICAgICAgICAgICAiQVNU
Q180eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X3NSR0IiLAotICAgICAg
ICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERS
IiwKLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q181eDRfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ181eDVfVU5PUk1fQkxPQ0siOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzV4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfNXg1X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzZ4NV9V
Tk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCi0gICAgICAgICAgICAi
QVNUQ182eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAotICAg
ICAgICAgICAgIkFTVENfNng2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZf
TERSIiwKLSAgICAgICAgICAgICJBU1RDXzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfOHg1X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzh4
Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCi0gICAgICAgICAg
ICAiQVNUQ184eDZfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X3NSR0IiLAot
ICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184
eDhfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ184eDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1NS
R0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiIsCi0gICAgICAgICAgICAi
QVNUQ18xMHg2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCi0g
ICAgICAgICAgICAiQVNUQ18xMHg2X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg4X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHgx
MF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfTERSIiwKLSAgICAgICAg
ICAgICJBU1RDXzEweDEwX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NS
R0IiLAotICAgICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEyeDEwX0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMngxMF9TUkdCX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzEyeDEy
X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIiLAotICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIKKyAgICAgICAgICAgICJBU1RDXzR4NF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfNHg0X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfNXg0X1NSR0JfQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzZ4
NV9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfNng2X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIs
CisgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzh4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhl
bEZvcm1hdEFTVENfOHg2X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfOHg4X1NSR0JfQkxPQ0si
IDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHg1
X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfMTB4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9zUkdC
IiwKKyAgICAgICAgICAgICJBU1RDXzEweDhfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzEweDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NLIiA6ICJN
VExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMngxMF9T
UkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCisgICAgICAgICAg
ICAiQVNUQ18xMngxMl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIsCisgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ180eDRfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzV4NF9VTk9STV9CTE9DSyIgOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorICAgICAgICAgICAgIkFTVENfNXg1X1VOT1JNX0JM
T0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ182
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzZ4Nl9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIi
LAorICAgICAgICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzh4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4
NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xE
UiIsCisgICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxPQ0siIDog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTJ4MTBf
VU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIiLAorICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9M
RFIiCiAgICAgICAgIH0sCiAgICAgICAgICJtYXBfbWFjIjogewotICAgICAgICAgICAgIkQxNl9V
Tk9STSI6ICJNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybSIsCiAgICAgICAgICAgICAiRDI0X1VO
T1JNX1M4X1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDI0VW5vcm1fU3RlbmNpbDgiLAogICAg
ICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEi
LAogICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRCQzFfUkdCQV9zUkdCIiwKQEAgLTE3NSw5ICsxNzUsNyBAQAogICAgICAgICAgICAgIkQzMl9V
Tk9STSI6ICJEMzJfRkxPQVQiCiAgICAgICAgIH0sCiAgICAgICAgICJvdmVycmlkZV9pb3MiOiB7
Ci0gICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQi
LAotICAgICAgICAgICAgIkQxNl9VTk9STSI6ICJEMzJfRkxPQVQiLAotICAgICAgICAgICAgIkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLIgorICAgICAg
ICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgogICAgICAg
ICB9LAogICAgICAgICAib3ZlcnJpZGVfbWFjIjogewogICAgICAgICAgICAgIlI1RzZCNV9VTk9S
TSI6ICJSOEc4QjhBOF9VTk9STSIsCkBAIC0yMDMsNyArMjAxLDggQEAKICAgICAgICAgICAgICJF
QUNfUjExRzExX1VOT1JNX0JMT0NLIjogIlIxNkcxNl9VTk9STSIsCiAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJSMTZHMTZfU05PUk0iCiAgICAgICAgIH0sCi0gICAgICAg
ICJkMjRzOF9mYWxsYmFja3NfbWFjIjogeworICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKyAg
ICAgICAgICAgICJCOEc4UjhBOF9VTk9STSI6ICJSOEc4QjhBOF9VTk9STSIsCiAgICAgICAgICAg
ICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiCiAgICAgICAgIH0s
CiAgICAgICAgICJjYXBzIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0KaW5kZXggYzIxYzU5M2YyMjg4NWY1ODk2ODlhNTA5Nzk3
OTgxYzZiYmI4NDNjNC4uZDNlYTViMDEyY2YwMzg5YjZhZDU0MTg2M2NlMzA0ZjU5ODAzMjQ0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9hdXRv
Z2VuLm1tCkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBtdGwKIAogdm9pZCBGb3JtYXQ6Omlu
aXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9y
bWF0SWRfKQogewotICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElk
XzsKLQorICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgICAgPSBpbnRlbmRlZEZvcm1hdElkXzsK
ICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2Uo
KTsKIAogICAgIC8vIEFjdHVhbCBjb252ZXJzaW9uCkBAIC00MywxNSArNDIsMjYgQEAgdm9pZCBG
b3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGlu
dGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpCMTBHMTBS
MTBBMl9VTk9STToKKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
ICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk06CiAKLSAgICAgICAg
ICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07Ci0g
ICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjEwRzEw
UjEwQTJfVU5PUk07Ci0gICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7
CisgICAgICAgICAgICBpZiAobWV0YWxEZXZpY2UuZGVwdGgyNFN0ZW5jaWw4UGl4ZWxGb3JtYXRT
dXBwb3J0ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3Jt
YXQgICAgPSBNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm07CisgICAgICAgICAgICAgICAgdGhpcy0+
YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOworICAgICAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5t
ZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybTsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk07
CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAKKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk06CiAKICAg
ICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3Jt
OwpAQCAtNjEsNiArNzEsNyBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpk
aXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0
aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNlbmRpZiAgLy8g
VEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICAgICAgY2FzZSBhbmds
ZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNX1NSR0I6CiAKICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CkBAIC03MCw2ICs4
MSwzNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmds
ZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRB
UkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VO
T1JNOgorCisgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0
RGVwdGgxNlVub3JtOworICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6
Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0g
bnVsbHB0cjsKKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisjZWxzZSAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKKworICAgICAg
ICAgICAgaWYgKFttZXRhbERldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNd
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAgICAgICAgICAgICB0
aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKyAgICAgICAgICAgICAgICB0aGlzLT5h
Y3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworICAgICAgICAgICAg
ICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisj
ZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAgICAgICAg
IGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6CiAKICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQ7CkBAIC04MTUsMTUgKzg1
Niw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xl
OjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVk
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3Jt
YXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0
SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKLSAgICAgICAgICAgIHRoaXMtPmluaXRG
dW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpE
MjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAgICAgaWYgKG1ldGFsRGV2aWNlLmRlcHRoMjRT
dGVuY2lsOFBpeGVsRm9ybWF0U3VwcG9ydGVkICYmCkBAIC0xMjgxLDcgKzEzMTMsNyBAQCB2b2lk
IEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQg
aW50ZW5kZWRGb3JtYXRJZF8pCiAKICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVBQ19S
MTFHMTFfVU5PUk1fQkxPQ0s6CiAKLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtOworICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3Jt
YXQgICAgPSBNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybTsKICAgICAgICAgICAgIHRoaXMtPmFj
dHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VOT1JNX0JMT0NLOwog
ICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOwogCkBAIC0xMzA2LDYg
KzEzMzgsMTUgQEAgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwg
YW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAgICAgdGhpcy0+c3dp
enpsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzoKKworICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVUQzJfUkdCODsKKyAgICAgICAgICAgIHRo
aXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9C
TE9DSzsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKworICAg
ICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCiAg
ICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0s6CiAK
ICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JH
QjhBMV9zUkdCOwpAQCAtMTQ1OSwxNSArMTUwMCw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0
IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykK
ICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAg
ICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OwotICAg
ICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9B
VDsKLSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAg
ICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAg
ICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVu
Y2lsODsKQEAgLTE0NzcsMTUgKzE1MDksNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNw
bGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAg
ICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLOgotCi0g
ICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4
OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzJfUjhHOEI4X1VOT1JNX0JMT0NLOwotICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAg
PSBudWxscHRyOwotCi0gICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KICNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3V0aWxzLmgKaW5kZXggYmJiMjdkNGZlZWQ0YzA2N2FmYWY3MjY3MWU3NmJmNGE0N2E1
NTMwOS4uZjM5NjgxZDNhOGM2NzkzYzg0ZjViNTI0MTg2YmM4ZGIwODcxZGExYSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCkBAIC00OCwxMyArNDgsMTggQEAg
c3RydWN0IEZvcm1hdENhcHMKIHsKICAgICBib29sIGlzUmVuZGVyYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGNvbG9yUmVuZGVyYWJsZSB8fCBkZXB0aFJlbmRlcmFibGU7IH0KIAotICAgIGJvb2wgZmls
dGVyYWJsZSAgICAgID0gZmFsc2U7Ci0gICAgYm9vbCB3cml0YWJsZSAgICAgICAgPSBmYWxzZTsK
LSAgICBib29sIGNvbG9yUmVuZGVyYWJsZSA9IGZhbHNlOwotICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlID0gZmFsc2U7Ci0gICAgYm9vbCBibGVuZGFibGUgICAgICAgPSBmYWxzZTsKLSAgICBib29s
IG11bHRpc2FtcGxlICAgICA9IGZhbHNlOyAgLy8gY2FuIGJlIHVzZWQgYXMgTVNBQSB0YXJnZXQK
LSAgICBib29sIHJlc29sdmUgICAgICAgICA9IGZhbHNlOyAgLy8gQ2FuIGJlIHVzZWQgYXMgcmVz
b2x2ZSB0YXJnZXQKKyAgICBib29sIGZpbHRlcmFibGUgICAgICAgICAgID0gZmFsc2U7CisgICAg
Ym9vbCB3cml0YWJsZSAgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgY29sb3JSZW5kZXJh
YmxlICAgICAgPSBmYWxzZTsKKyAgICBib29sIGRlcHRoUmVuZGVyYWJsZSAgICAgID0gZmFsc2U7
CisgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgbXVsdGlz
YW1wbGUgICAgICAgICAgPSBmYWxzZTsgIC8vIGNhbiBiZSB1c2VkIGFzIE1TQUEgdGFyZ2V0Cisg
ICAgYm9vbCByZXNvbHZlICAgICAgICAgICAgICA9IGZhbHNlOyAgLy8gQ2FuIGJlIHVzZWQgYXMg
cmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGNvbXByZXNzZWQgICAgICAgICAgID0gZmFsc2U7Cisg
ICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzICAgICA9IDA7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5
dGVzTVNBQSA9IDA7CisgICAgTlNVSW50ZWdlciBjaGFubmVscyAgICAgICA9IDA7CisgICAgdWlu
dDhfdCBhbGlnbm1lbnQgICAgICAgICA9IDA7CiB9OwogCiAvLyBQaXhlbCBmb3JtYXQKQEAgLTE0
Myw2ICsxNDgsNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQogICBwcml2YXRlOgogICAgIHZvaWQgaW5pdE5hdGl2ZUZvcm1hdENhcHNBdXRvZ2VuKGNvbnN0
IERpc3BsYXlNdGwgKmRpc3BsYXkpOwogICAgIHZvaWQgaW5pdE5hdGl2ZUZvcm1hdENhcHMoY29u
c3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisKICAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKQEAgLTE1MCw2ICsxNTYs
MTcgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZXNvbHZlLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVy
YWJsZSk7CisKKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0
ZXNQZXJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxz
KTsKKwogICAgIHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAogICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHdyaXRhYmxlLApAQCAtMTU5LDggKzE3NiwyNCBAQCBjbGFzcyBGb3JtYXRUYWJs
ZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yUmVuZGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRl
cmFibGUpOwogCisgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElk
LAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxl
bmRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRoUmVu
ZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBieXRlc1BlckNoYW5u
ZWwsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworCiAgICAg
dm9pZCBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9v
bCBmaWx0ZXJhYmxlKTsKIAorICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0ZvckRldmljZShpZDxN
VExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRM
UGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1
cHBvcnRzaU9TNCk7CisKICAgICBzdGQ6OmFycmF5PEZvcm1hdCwgYW5nbGU6OmtOdW1BTkdMRUZv
cm1hdHM+IG1QaXhlbEZvcm1hdFRhYmxlOwogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxNVExQaXhl
bEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlOwogICAgIC8v
IE9uZSBmb3IgdGlnaHRseSBwYWNrZWQgYnVmZmVycywgb25lIGZvciBnZW5lcmFsIGNhc2VzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQppbmRleCBmYjFkNWNh
OGJjMmZlYmE0NDllYTM1YjQ4YTQyYjkzNTMyOGFmNjIxLi40MTZhZDVjN2ZmMTQxNjhlMDk3OGJi
YzdiN2UxYzg4NjlmNmU3YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF91dGlscy5tbQpAQCAtNzcsOCArNzcsOCBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAo
Y29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxlLAogICAgICAgICAgICAgdGV4dHVyZUNhcHMu
cmVuZGVyYnVmZmVyID0KICAgICAgICAgICAgICAgICBtdGxGb3JtYXQuZ2V0Q2FwcygpLmNvbG9y
UmVuZGVyYWJsZSB8fCBtdGxGb3JtYXQuZ2V0Q2FwcygpLmRlcHRoUmVuZGVyYWJsZTsKICAgICAg
ICAgICAgIHRleHR1cmVDYXBzLnRleHR1cmFibGUgICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAg
IHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVu
ZGFibGU7CiAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy50ZXh0dXJlQXR0YWNobWVudCA9IHRleHR1
cmVDYXBzLnJlbmRlcmJ1ZmZlcjsKKyAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAg
ICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVuZGFibGU7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoZm9ybWF0Q2Fwcy5tdWx0aXNhbXBsZSkKQEAgLTE0OCwxMiArMTQ4LDYgQEAgYm9v
bCBGb3JtYXQ6Om5lZWRDb252ZXJzaW9uKGFuZ2xlOjpGb3JtYXRJRCBzcmNGb3JtYXRJZCkgY29u
c3QKICAgICAgICAgLy8gV2ViR0wgYWxsb3dzIHVuc3dpenpsZWQgbWFwcGluZyB3aGVuIHN3aXp6
bGluZyBpcyBub3QgYXZhaWxhYmxlLiBObyBuZWVkIHRvIGNvbnZlcnQuCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHNyY0Zvcm1hdElkID09IGFuZ2xlOjpGb3JtYXRJRDo6
RVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0sgJiYKLSAgICAgICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5n
bGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOF9VTk9STV9CTE9DSykKLSAgICB7Ci0gICAgICAgIC8v
IEVUQzEgUkdCICYgRVRDMiBSR0IgYXJlIHRlY2huaWNhbGx5IHRoZSBzYW1lLgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBzcmNGb3JtYXRJZCAhPSBhY3R1YWxGb3Jt
YXRJZDsKIH0KIApAQCAtMTkyLDggKzE4Niw3IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6
OmluaXRpYWxpemUoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKICAgICAgICAgbVBpeGVsRm9y
bWF0VGFibGVbaV0uaW5pdChkaXNwbGF5LCBmb3JtYXRJZCk7CiAgICAgICAgIG1QaXhlbEZvcm1h
dFRhYmxlW2ldLmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW21QaXhlbEZvcm1h
dFRhYmxlW2ldLm1ldGFsRm9ybWF0XTsKIAotICAgICAgICBpZiAoIW1QaXhlbEZvcm1hdFRhYmxl
W2ldLmNhcHMtPmRlcHRoUmVuZGVyYWJsZSAmJgotICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFi
bGVbaV0uYWN0dWFsRm9ybWF0SWQgIT0gbVBpeGVsRm9ybWF0VGFibGVbaV0uaW50ZW5kZWRGb3Jt
YXRJZCkKKyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVhbEZvcm1hdElkICE9
IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLnRleHR1cmVMb2FkRnVuY3Rpb25zID0gYW5nbGU6
OkdldExvYWRGdW5jdGlvbnNNYXAoCiAgICAgICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVb
aV0uaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCkBAIC0yMDQsNiArMTk3
LDE5IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6OmluaXRpYWxpemUoY29uc3QgRGlzcGxh
eU10bCAqZGlzcGxheSkKICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sxXVtpXS5pbml0KGZv
cm1hdElkLCB0cnVlKTsKICAgICB9CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBB
TUQncyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJucyB6ZXJvIGR1cmlu
ZyBzYW1wbGluZzoKKyAgICBpZiAoZGlzcGxheS0+Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpLmZp
bmQoIkFNRCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisgICAgICAgIEZvcm1hdCAmZm9ybWF0ID0KKyAg
ICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW3N0YXRpY19jYXN0PHVpbnQzMl90PihhbmdsZTo6
Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UKV07CisgICAgICAgIGZvcm1hdC5hY3R1YWxGb3Jt
YXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ7CisgICAg
ICAgIGZvcm1hdC5tZXRhbEZvcm1hdCAgICAgICAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZs
b2F0X1N0ZW5jaWw4OworICAgICAgICBmb3JtYXQuaW5pdEZ1bmN0aW9uICAgICAgICAgPSBudWxs
cHRyOworICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBudWxscHRyOworICAg
ICAgICBmb3JtYXQuY2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbTVRMUGl4ZWxG
b3JtYXREZXB0aDMyRmxvYXRfU3RlbmNpbDhdOworICAgIH0KKwogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtMjM5LDEwICsyNDUsMjMgQEAgdm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpCiB7CiAgICAgc2V0Rm9y
bWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFibGUsIGJsZW5kYWJsZSwgbXVsdGlz
YW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKLSAgICAgICAgICAgICAgICAgIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKK30KK3ZvaWQgRm9ybWF0VGFibGU6OnNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlz
YW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscykKK3sKKyAgICBz
ZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCB3cml0YWJsZSwgYmxlbmRhYmxlLCBt
dWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAg
ZmFsc2UsIHBpeGVsQnl0ZXMsIGNoYW5uZWxzKTsKIH0KIAotdm9pZCBGb3JtYXRUYWJsZTo6c2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKK3ZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCkBAIC0yNTAsNiArMjY5LDIwIEBAIHZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVzb2x2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJl
bmRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5k
ZXJhYmxlKQoreworICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRh
YmxlLCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCisg
ICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworfQordm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGJsZW5kYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0
aXNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscykKIHsKICAgICBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmZpbHRlcmFibGUgICAgICA9IGZpbHRlcmFi
bGU7CiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS53cml0YWJsZSAgICAgICAg
PSB3cml0YWJsZTsKQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFi
bGVbaWRdLmJsZW5kYWJsZSAgICAgICA9IGJsZW5kYWJsZTsKICAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLm11bHRpc2FtcGxlICAgICA9IG11bHRpc2FtcGxlOwogICAgIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVzb2x2ZSAgICAgICAgID0gcmVzb2x2ZTsKKyAg
ICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMgICAgICA9IHBpeGVs
Qnl0ZXM7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNB
QSAgPSBwaXhlbEJ5dGVzOworICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hh
bm5lbHMgICAgICAgID0gY2hhbm5lbHM7CisgICAgaWYgKGNoYW5uZWxzICE9IDApCisgICAgICAg
IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50ID0gTUFYKHBpeGVsQnl0
ZXMgLyBjaGFubmVscywgMVUpOwogfQogCiB2b2lkIEZvcm1hdFRhYmxlOjpzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9vbCBmaWx0ZXJhYmxlKQpAQCAt
MjY1LDkgKzMwMywyNzQgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Q29tcHJlc3NlZEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wgZmlsdGVyYWIKICAgICBzZXRGb3JtYXRD
YXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlKTsKIH0KIAordm9pZCBGb3JtYXRUYWJsZTo6YWRqdXN0Rm9ybWF0Q2Fwc0ZvckRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9TNCkKK3sKKyNpZiAh
KFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKQorCisgICAgTlNVSW50ZWdl
ciBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0u
cGl4ZWxCeXRlczsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2
ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNBQTsKKyAgICBOU1VJbnRlZ2Vy
IGFsaWdubWVudCAgICAgICAgICAgID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5h
bGlnbm1lbnQ7CisKKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0ZXNSZW5kZXIKKyMg
ICAgZGVmaW5lIFNQRUNJRklDKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNhc2UgX3Bp
eGVsRm9ybWF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAg
ICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXJNU0FBID0gX3BpeGVsQnl0
ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBhbGlnbm1lbnQgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7IFwKKyAgICAgICAgICAgIGJyZWFrCisvLyBPdmVycmlk
ZSB0aGUgY3VycmVudCBwaXhlbCBieXRlcyByZW5kZXIsIGFuZCBNU0FBCisjICAgIGRlZmluZSBT
UEVDSUZJQ19NU0FBKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVz
UmVuZGVyTVNBQSkgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIF9waXhlbEZvcm1hdDog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVs
Qnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNB
QTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
YWxpZ25tZW50ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzdXBwb3J0c2lP
UzQgPyBfcGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0u
Y2hhbm5lbHMgOiA0OyBcCisgICAgICAgICAgICBicmVhaworLy8gT3ZlcnJpZGUgdGhlIGN1cnJl
bnQgcGl4ZWxCeXRlc1JlbmRlciwgYW5kIGFsaWdubWVudAorIyAgICBkZWZpbmUgU1BFQ0lGSUNf
QUxJR04oX3BpeGVsRm9ybWF0LCBfcGl4ZWxCeXRlc1JlbmRlciwgX2FsaWdubWVudCkgXAorICAg
ICAgICBjYXNlIF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxC
eXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1Jl
bmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgYWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICghbU5hdGl2ZVBpeGVsRm9y
bWF0Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgLy8gT24gQXBwbGVH
UFVGYW1pbHk0KywgdGhlcmUgaXMgbm8gNGJ5dGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgcmVu
ZGVyIHRhcmdldHMKKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQg
PyAxVSA6IDRVOworICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IE1BWChtTmF0aXZlUGl4
ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMsIG1pblNpemUpOworICAgICAgICBwaXhl
bEJ5dGVzUmVuZGVyTVNBQSA9IHBpeGVsQnl0ZXNSZW5kZXI7CisgICAgICAgIGFsaWdubWVudCA9
CisgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBNQVgocGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMsIDFVKSA6IDQ7CisgICAgfQorCisg
ICAgLy8gVGhpcyBsaXN0IG9mIHRhYmxlcyBzdGFydHMgZnJvbSBhIGdlbmVyYWwgbXVsdGktcGxh
dGZvcm0gdGFibGUsCisgICAgLy8gdG8gc3BlY2lmaWMgcGxhdGZvcm1zIChpLmUuIGlvczIsIGlv
czQpIGluaGVyaXRpbmcgZnJvbSB0aGUgcHJldmlvdXMgdGFibGVzCisKKyAgICAvLyBTdGFydCBv
ZmYgd2l0aCB0aGUgZ2VuZXJhbCBjYXNlCisgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKyAg
ICB7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sIDRVKTsKKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgNFUpOworICAgICAgICBT
UEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKyAgICAgICAgU1BFQ0lGSUMo
TVRMUGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgNFUpOworCisgICAgICAgIFNQRUNJRklDKE1UTFBp
eGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1h
dEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0
UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVDSUZJQ19NU0FBKE1U
TFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUsIDhVKTsKKyAgICAgICAgU1BFQ0lGSUNfTVNBQShN
VExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUpOworCisgICAgICAgIFNQRUNJRklDKE1U
TFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCA4VSk7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVs
Rm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRSRzExQjEwRmxvYXQsIDhVKTsKKworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJH
QjlFNUZsb2F0LCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2ls
OCwgMVUpOworICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGJhc2VkIGlvczIKKyAgICBpZiAoc3Vw
cG9ydHNpT1MyKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgOFUp
OworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgOFUpOwor
ICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBQkdSNFVub3JtLCA4VSk7CisgICAg
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCA4VSk7CisgICAgICAg
ICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUsIDhVKTsKKyAg
ICAgICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCA0VSwgOFUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3ZlcnJpZGUgYmFzZWQgb24gaW9zNAorICAg
IGlmIChzdXBwb3J0c2lPUzQpCisgICAgeworICAgICAgICBzd2l0Y2ggKChOU1VJbnRlZ2VyKWlk
KQorICAgICAgICB7CisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1hdEI1
RzZSNVVub3JtLCA2VSwgMlUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRS
R0JBOFVub3JtLCA0VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm0sIDRVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVu
b3JtX3NSR0IsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSQThV
bm9ybV9zUkdCLCA0VSk7CisKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdC
QThTbm9ybSwgNFUpOworCisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1h
dFJHQjEwQTJVbm9ybSwgNFUsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBp
eGVsRm9ybWF0QkdSMTBBMlVub3JtLCA0VSwgNFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworCisgICAgICAgICAgICBTUEVDSUZJQ19BTElH
TihNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgNFUsIDRVKTsKKworICAgICAgICAgICAgU1BF
Q0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgNFUsIDRVKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMg
ICAgID0gcGl4ZWxCeXRlc1JlbmRlcjsKKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVb
aWRdLnBpeGVsQnl0ZXNNU0FBID0gcGl4ZWxCeXRlc1JlbmRlck1TQUE7CisgICAgbU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9IGFsaWdubWVudDsKKworIyAg
ICB1bmRlZiBTUEVDSUZJQworIyAgICB1bmRlZiBTUEVDSUZJQ19BTElHTgorIyAgICB1bmRlZiBT
UEVDSUZJQ19NU0FBCisjZW5kaWYKKyAgICAvLyBtYWNPUyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZv
cm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhlc2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQg
dG8gY2hlY2sKKyAgICAvLyB2YWxpZCBNUlQgc2l6ZXMgb24gaU9TLgorfQorCiB2b2lkIEZvcm1h
dFRhYmxlOjppbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KQog
ewotICAgIGluaXROYXRpdmVGb3JtYXRDYXBzQXV0b2dlbihkaXNwbGF5KTsKKyAgICBjb25zdCBh
bmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzTXRsID0gZGlzcGxheS0+Z2V0RmVhdHVyZXMoKTsK
KyAgICAvLyBTa2lwIGF1dG8gcmVzb2x2ZSBpZiBlaXRoZXIgaGFzRGVwdGgvU3RlbmNpbEF1dG9S
ZXNvbHZlIG9yIGFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUKKyAgICAvLyBmZWF0dXJl
IGFyZSBkaXNhYmxlZC4KKyAgICBib29sIHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlID0gZmVhdHVy
ZXNNdGwuaGFzRGVwdGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29s
dmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJl
c010bC5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJl
c29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVzb2x2ZSA9
IHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlICYmIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmU7CisK
KyAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tZXRhbC9NZXRhbC1G
ZWF0dXJlLVNldC1UYWJsZXMucGRmCisgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorCisgICAgLy8g
ICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8
ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGJ5dGVzUGVyQ2hhbm5l
bCB8IGNoYW5uZWwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QThVbm9ybSwgICAg
ICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgIGZhbHNlLCAgICAgICAgICBmYWxzZSwg
ICAgICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMVUsIDFV
KTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwgICAgICAgIHRydWUs
ICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTbm9ybSwgICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUs
ICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICAyVSwgMVUpOworICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0Ukc4VW5vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0Ukc4U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUs
ICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIs
IDEpLCAgdHJ1ZSwgIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJH
MTZVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAg
ICAgIHRydWUsICA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2
U25vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
IHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAg
ICB0cnVlLCAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2
VW5vcm0sICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0
cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAg
dHJ1ZSwgIDhVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNu
b3JtLCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZGbG9h
dCwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICA4VSwg
NFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAg
ICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
YmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHQkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCAgICAgdHJ1ZSwgICAg
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMiksICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThT
bm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0
aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0Is
ICAgICB0cnVlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwgICAg
ICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBm
b3JtYXRJZCAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAgICAgICAgICB8ICB3
cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFIxNkZsb2F0LCAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAyVSwgMVUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgNFUsIDJVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyRmxvYXQsICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRy
dWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICAgICAgIHRy
dWUsICAgIDRVLCAxVSk7CisKKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBm
aWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAg
cmVzb2x2ZSAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QjVHNlI1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRy
dWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDNVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdS
NUExVW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAg
ICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBm
YWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVl
LCAgMlUsIDRVKTsKKyNlbmRpZgorCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAg
ICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAg
fCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1Ix
MEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFt
aWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAg
dHJ1ZSwgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQjEwQTJV
bm9ybSwgICAgIHRydWUsICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MywgMSksICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVl
LCAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVpbnQs
ICAgICAgZmFsc2UsICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgzLCAx
KSwgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgIHRydWUsICA0
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAg
ICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCAz
VSk7CisKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBm
aWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJsZW5k
YWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAg
ICB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSAgICAg
ICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9h
dCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyks
ICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgIGRpc3BsYXktPnN1cHBvcnRzSU9T
R1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+
c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAzVSk7CisKKyAgICAvLyAgICAgICAgICAgIHwg
IGZvcm1hdElkICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBi
bGVuZGFibGUgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVzb2x2
ZSAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCAxVSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSOFNpbnQsICAg
ICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDFVLCAxVSk7
CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVpbnQsICAgICAgIGZhbHNlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDFVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2U2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzhVaW50LCAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxz
ZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAg
ICAgIHRydWUsIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHOFNp
bnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUs
IDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyVWludCwgICAgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOwor
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMzJTaW50LCAgICAgICBmYWxzZSwgICAg
ICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAxVSk7CisgICAgc2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAg
dHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UkcxNlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAg
ZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwg
ICAgICAgICB0cnVlLCA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
R0JBOFVpbnQsICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUs
IDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4U2ludCwgICAg
IGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzMyU2ludCwgICAgICBmYWxzZSwgICAgICAgICAgIHRy
dWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1p
bHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDhVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFJHQkExNlVpbnQsICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsICAgICAgICAgdHJ1ZSwgOFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQTE2U2ludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJVaW50
LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDE2
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJTaW50LCAgICBm
YWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3Vw
cG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDE2VSwgNFUp
OworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICB8IGZp
bHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSAg
ICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAgICAgfCAg
cmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJGbG9hdCwgICAgICAgZGlzcGxheS0+c3Vw
cG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwg
IGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAgICAgdHJ1ZSwgIDhV
LCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMkZsb2F0LCAgICAg
ZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgZGlz
cGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgICAgICAgdHJ1ZSwgIDE2VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJ
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAg
ICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGRlcHRo
UmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwg
ICAgc3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAg
ICAgICAgICB0cnVlLCAgNFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
U3RlbmNpbDgsICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIGZhbHNlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwg
IDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9T
dGVuY2lsOCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgIGZh
bHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0RGVwdGhTdGVuY2ls
QXV0b1Jlc29sdmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICA4VSwgMlUp
OworLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0RGVwdGgxNlVub3JtLCAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBv
cnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAg
dHJ1ZSwgIDJVLCAxVSk7CisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZ
U1QKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5jaWw4
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFsc2UsICAg
ICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVz
b2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QkMxX1JHQkEsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJl
c3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQV9zUkdCLCB0cnVlKTsKKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBX3NSR0IsIHRy
dWUpOworI2Vsc2UKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBW
UlRDX1JHQl8yQlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFBWUlRDX1JHQl8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFAsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBfc1JHQiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJC
UFAsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZS
VENfUkdCQV8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUF9zUkdCLCB0cnVlKTsKKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUjExU25vcm0s
IHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JH
MTFVbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRFQUNfUkcxMVNub3JtLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgsIHRydWUpOworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTEsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFfc1JH
QiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzR4NF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfNXg0X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ181eDVfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfc1JHQiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdC
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
OHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ18xMHg1X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9zUkdCLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEy
eDEyX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ180eDRfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfNXg0X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21w
cmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIsIHRydWUp
OworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERS
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
OHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEweDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiwgdHJ1ZSk7CisgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX0xEUiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiwgdHJ1ZSk7CisjZW5kaWYKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIG10bApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91
dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRiYzEwOTk3MzhkOWM1NjgyMjExNjdlMmUxNWM2NDU3MDExMjIz
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKQEAgLTAsMCArMSw1NyBA
QAorLy8KKy8vICBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaAorLy8gIEFOR0xFCisvLworLy8gIENy
ZWF0ZWQgYnkgS3lsZSBQaWRkaW5ndG9uIG9uIDExLzEwLzIwLgorLy8KKworI2lmbmRlZiBtdGxf
Z2xzbGFuZ19tdGxfdXRpbHNfaAorI2RlZmluZSBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaAorI2lu
Y2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9Q
cm9ncmFtSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBl
cl91dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24u
aCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CitzdHJ1Y3QgU2FtcGxlckJp
bmRpbmcKK3sKKyAgICB1aW50MzJfdCB0ZXh0dXJlQmluZGluZyA9IDA7CisgICAgdWludDMyX3Qg
c2FtcGxlckJpbmRpbmcgPSAwOworfTsKKworc3RydWN0IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCit7
CisgICAgdm9pZCByZXNldCgpOworICAgIC8vIFRyYW5zbGF0ZWQgTWV0YWwgc291cmNlIGNvZGUK
KyAgICBzdGQ6OnN0cmluZyBtZXRhbFNoYWRlclNvdXJjZTsKKyAgICAvLyBNZXRhbCBsaWJyYXJ5
IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJvZ3JhbU10bC4KKyAg
ICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJyYXJ5OworICAgIHN0ZDo6YXJy
YXk8U2FtcGxlckJpbmRpbmcsIGtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gYWN0dWFsU2FtcGxlckJp
bmRpbmdzOworICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1
YWxVQk9CaW5kaW5nczsKKyAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4U2hhZGVyWEZCcz4g
YWN0dWFsWEZCQmluZGluZ3M7CisgICAgYm9vbCBoYXNVQk9Bcmd1bWVudEJ1ZmZlcjsKK307Cit2
b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3Rh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxz
dGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisK
K2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnBy
b2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAm
Z2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8
c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNo
YWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVpdmFsZW50
IHNoYWRvdyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRl
ci4KK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51
bSBmdW5jKTsKKworfSAgLy8gbmFtZXNwYWNlIG10bAorfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNl
bmRpZiAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVmNWJlZjQzMTAw
ZjExM2U0OTNkZDlkYjZlMGUyZmQ1NDYxNWEyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19t
dGxfdXRpbHMubW0KQEAgLTAsMCArMSwyNDEgQEAKKy8vCisvLyAgbWdsX2dsc2xhbmdfbXRsX3V0
aWxzLm0KKy8vICBBTkdMRSAoc3RhdGljKQorLy8KKy8vICBDcmVhdGVkIGJ5IEt5bGUgUGlkZGlu
Z3RvbiBvbiAxMS8xMC8yMC4KKy8vCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qu
aCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CisKK3ZvaWQgVHJhbnNsYXRlZFNoYWRl
ckluZm86OnJlc2V0KCkKK3sKKyAgICBtZXRhbFNoYWRlclNvdXJjZS5jbGVhcigpOworICAgIG1l
dGFsTGlicmFyeSAgICAgICAgID0gbmlsOworICAgIGhhc1VCT0FyZ3VtZW50QnVmZmVyID0gZmFs
c2U7CisgICAgZm9yIChtdGw6OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDogYWN0dWFsU2FtcGxl
ckJpbmRpbmdzKQorICAgIHsKKyAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IG10bDo6
a01heFNoYWRlclNhbXBsZXJzOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcg
OiBhY3R1YWxVQk9CaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJCdWZmZXJzOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBhY3R1
YWxYRkJCaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhTaGFkZXJC
dWZmZXJzOworICAgIH0KK30KKworLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJv
bSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgorLy8g
c2xvdDpjb3VudCBwYWlyKQordXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9CisgICAg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dWlu
dDMyX3QsIHVpbnQzMl90Pj4+OworCitib29sIE1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVm
aW5lZFByZWZpeChjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQoreworICAgIHJldHVy
biBvcmlnaW5hbE5hbWUuZmluZCgnLicpID09IHN0ZDo6c3RyaW5nOjpucG9zOworfQorCitzdGF0
aWMgc3RkOjpzdHJpbmcgTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoY29uc3Qgc3RkOjpzdHJpbmcg
Jm9yaWdpbmFsTmFtZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBzYW1wbGVyTmFtZSA9IG9yaWdpbmFs
TmFtZTsKKworICAgIC8vIFNhbXBsZXJzIGluIHN0cnVjdHMgYXJlIGV4dHJhY3RlZC4KKyAgICBz
dGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwgc2FtcGxlck5hbWUuZW5kKCksICcuJywg
J18nKTsKKworICAgIC8vIFJlbW92ZSBhcnJheSBlbGVtZW50cworICAgIGF1dG8gb3V0ID0gc2Ft
cGxlck5hbWUuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8gaW4gPSBzYW1wbGVyTmFtZS5iZWdpbigp
OyBpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKTsgaW4rKykKKyAgICB7CisgICAgICAgIGlmICgqaW4g
PT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmluICE9ICddJykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgICAgIEFTU0VSVChp
biAhPSBzYW1wbGVyTmFtZS5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0KysgPSAqaW47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzYW1wbGVyTmFtZS5lcmFzZShvdXQsIHNhbXBsZXJOYW1lLmVuZCgpKTsK
KworICAgIGlmIChNYXBwZWRTYW1wbGVyTmFtZU5lZWRzVXNlckRlZmluZWRQcmVmaXgob3JpZ2lu
YWxOYW1lKSkKKyAgICB7CisgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtVc2VyRGVmaW5lZE5h
bWVQcmVmaXggKyBzYW1wbGVyTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gc2FtcGxlck5hbWU7
Cit9CisKK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnBy
b2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlu
a2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hh
ZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0KQoreworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpB
bGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgZ2w6OlNoYWRlciAqZ2xTaGFkZXIgICAg
ICAgICAgICA9IHByb2dyYW1TdGF0ZS5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlKTsKKyAg
ICAgICAgKCpzaGFkZXJTb3VyY2VzT3V0KVtzaGFkZXJUeXBlXSA9IGdsU2hhZGVyID8gZ2xTaGFk
ZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSA6ICIiOworICAgIH0KK30KKwordm9pZCBHZXRBc3Np
Z25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAq
cmVmbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3JpZ2lu
YWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiAmc3RydWN0U2Ft
cGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8U2FtcGxl
ckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGluZ3MpCit7CisgICAg
Zm9yIChhdXRvICZzYW1wbGVyIDogcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJpbmRpbmdzKCkpCisg
ICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSAgICAgICAgICA9IHNhbXBsZXIu
Zmlyc3Q7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGFjdHVhbFNhbXBsZXJTbG90ID0gKHVpbnQz
Ml90KXJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5nKG5hbWUpOworICAgICAgICBjb25zdCB1
aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdClyZWZsZWN0aW9uLT5nZXRUZXh0
dXJlQmluZGluZyhuYW1lKTsKKworICAgICAgICAvLyBBc3NpZ24gc2VxdWVudGlhbCBpbmRleCBm
b3Igc3Vic2VxdWVudCBhcnJheSBlbGVtZW50cworICAgICAgICBjb25zdCBib29sIHN0cnVjdFNh
bXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9IHN0cnVjdFNhbXBsZXJzLmVuZCgp
OworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBtYXBwZWROYW1lID0KKyAgICAgICAgICAgIHN0
cnVjdFNhbXBsZXIgPyBuYW1lIDogTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoc2g6OmtVc2VyRGVm
aW5lZE5hbWVQcmVmaXggKyBuYW1lKTsKKyAgICAgICAgYXV0byBvcmlnaW5hbCA9IG9yaWdpbmFs
QmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsICE9IG9yaWdp
bmFsQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0K
KyAgICAgICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdzLmF0KG1hcHBlZE5hbWUpOworICAgICAg
ICAgICAgdWludDMyX3QgY3VycmVudFRleHR1cmVTbG90ID0gYWN0dWFsVGV4dHVyZVNsb3Q7Cisg
ICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50U2FtcGxlclNsb3QgPSBhY3R1YWxTYW1wbGVyU2xv
dDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Jm9yaWdpbmFsQmluZGluZ1JhbmdlIDogcmVzT3JpZ25hbEJpbmRpbmdzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFNhbXBsZXJCaW5kaW5nICZhY3R1YWxCaW5kaW5nID0gYmluZGlu
Z3MtPmF0KG9yaWdpbmFsQmluZGluZ1JhbmdlLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBhY3R1
YWxCaW5kaW5nLnRleHR1cmVCaW5kaW5nICA9IGN1cnJlbnRUZXh0dXJlU2xvdDsKKyAgICAgICAg
ICAgICAgICBhY3R1YWxCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICA9IGN1cnJlbnRTYW1wbGVyU2xv
dDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0dXJlU2xvdCArPSBvcmlnaW5hbEJpbmRp
bmdSYW5nZS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgY3VycmVudFNhbXBsZXJTbG90ICs9IG9y
aWdpbmFsQmluZGluZ1JhbmdlLnNlY29uZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9t
U2hhZGVyKGdsOjpTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBTaGFkZXJNdGwgKnNoYWRlckluc3Rh
bmNlID0gc3RhdGljX2Nhc3Q8U2hhZGVyTXRsICo+KHNoYWRlci0+Z2V0SW1wbGVtZW50YXRpb24o
KSk7CisgICAgcmV0dXJuIHNoYWRlckluc3RhbmNlLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uKCk7Cit9CisKK3NoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpnZXRSZWZsZWN0aW9u
RnJvbUNvbXBpbGVyKGdsOjpDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSB0eXBl
KQoreworICAgIGF1dG8gY29tcGlsZXJJbnN0YW5jZSAgICAgID0gY29tcGlsZXItPmdldEluc3Rh
bmNlKHR5cGUpOworICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8
c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5kbGUoKSk7CisgICAg
YXV0byB0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JNZXRhbERp
cmVjdCgpOworICAgIGNvbXBpbGVyLT5wdXRJbnN0YW5jZShzdGQ6Om1vdmUoY29tcGlsZXJJbnN0
YW5jZSkpOworICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb24oKTsKK30KKworYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNMKGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJ
bmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9PdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKm1zbENv
ZGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50
KQoreworICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVyIGJpbmRpbmdzIGdl
bmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJlbWFwLgorICAgIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGlu
Z3M7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0g
cHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1CbG9ja3MoKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ1ZmZl
cklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySWR4KQorICAgIHsK
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJsb2Nrc1tidWZmZXJJ
ZHhdOworICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3MuY291bnQoYmxvY2subWFwcGVk
TmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVib09yaWdpbmFsQmluZGluZ3NbYmxvY2su
bWFwcGVkTmFtZV0gPSBidWZmZXJJZHg7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gUmV0cmll
dmUgb3JpZ2luYWwgc2FtcGxlciBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9udCBlbmQuCisgICAg
T3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5hbFNhbXBsZXJCaW5kaW5nczsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6U2FtcGxlckJpbmRpbmc+ICZzYW1wbGVyQmluZGluZ3MgPSBw
cm9ncmFtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
Z2w6OkxpbmtlZFVuaWZvcm0+ICZ1bmlmb3JtcyAgICAgICAgID0gcHJvZ3JhbVN0YXRlLmdldFVu
aWZvcm1zKCk7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IHN0cnVjdFNh
bXBsZXJzID0ge307CisKKyAgICBmb3IgKHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1
cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5zaXplKCk7ICsrdGV4dHVyZUluZGV4KQorICAgIHsK
KyAgICAgICAgY29uc3QgZ2w6OlNhbXBsZXJCaW5kaW5nICZzYW1wbGVyQmluZGluZyA9IHNhbXBs
ZXJCaW5kaW5nc1t0ZXh0dXJlSW5kZXhdOworICAgICAgICB1aW50MzJfdCB1bmlmb3JtSW5kZXgg
PSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUluZGV4RnJvbVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5k
ZXgpOworICAgICAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9ybSAmc2FtcGxlclVuaWZvcm0gPSB1
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBib29sIGlzU2FtcGxlckluU3RydWN0ICAg
ICAgICA9IHNhbXBsZXJVbmlmb3JtLm5hbWUuZmluZCgnLicpICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBzdGQ6OnN0cmluZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlzU2FtcGxlckluU3Ry
dWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTVNMR2V0
TWFwcGVkU2FtcGxlck5hbWUoc2FtcGxlclVuaWZvcm0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZShzYW1w
bGVyVW5pZm9ybS5tYXBwZWROYW1lKTsKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcmVm
aXhlZCBsYXRlciBzZXBlcmF0ZWx5CisgICAgICAgIGlmIChpc1NhbXBsZXJJblN0cnVjdCkKKyAg
ICAgICAgICAgIHN0cnVjdFNhbXBsZXJzLmluc2VydChtYXBwZWRTYW1wbGVyTmFtZSk7CisgICAg
ICAgIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2so
CisgICAgICAgICAgICB7dGV4dHVyZUluZGV4LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2FtcGxl
ckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgpKX0pOworICAgIH0KKyAgICBmb3IgKGds
OjpTaGFkZXJUeXBlIHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50fSkKKyAgICB7CisgICAgICAgICgqbXNsQ29kZU91dClbdHlwZV0gICAgICAg
ICAgICAgICAgICAgICAgICAgPSBzaGFkZXJTb3VyY2VzW3R5cGVdOworICAgICAgICAoKm1zbFNo
YWRlckluZm9PdXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVyU291cmNlc1t0eXBl
XTsKKyAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgPSBw
cm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIodHlwZSk7CisgICAgICAgIHNoOjpUcmFuc2xh
dG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0gZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIo
c2hhZGVyKTsKKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3Np
Z25tZW50cworICAgICAgICBpZiAob3JpZ2luYWxTYW1wbGVyQmluZGluZ3Muc2l6ZSgpID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MocmVmbGVj
dGlvbiwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zbFNoYWRlckluZm9PdXQtPmF0KHR5cGUp
LmFjdHVhbFNhbXBsZXJCaW5kaW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgcmVmbGVjdGlvbi0+
cmVzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQor
Cit1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0g
ZnVuYykKK3sKKyAgICAvLyBTZWUgU3BpcnZUb01zbENvbXBpbGVyOjplbWl0X2hlYWRlcigpCisg
ICAgaWYgKG1vZGUgPT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKGZ1bmMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ICAgIGNhc2UgR0xfTEVRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAg
ICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAg
ICAgY2FzZSBHTF9HRVFVQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAg
ICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICAgICAg
Y2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAgICAgICBj
YXNlIEdMX0VRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiA3OworICAgICAgICAgICAgY2Fz
ZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KK30KK30gIC8vIG5hbWVzcGFjZSBtdGwKK30gIC8v
IG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMu
aAppbmRleCAxM2M5N2VlMjQ0N2ZhNDY5MjZlZmU3OGQzMDAzMjQ0N2EyM2NiMjQ4Li5jMDI0NDZh
OTgyMDg1NWYzY2ZmNDdjYTM5NjY3NDQwMzI4ODMzYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRp
bHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaApAQCAtMTQsMzMgKzE0LDExIEBACiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfY29tbW9uLmgiCi0KKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKIG5hbWVzcGFjZSByeAogewogbmFtZXNwYWNlIG10
bAogewotCi1zdHJ1Y3QgU2FtcGxlckJpbmRpbmcKLXsKLSAgICB1aW50MzJfdCB0ZXh0dXJlQmlu
ZGluZyA9IDA7Ci0gICAgdWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOwotfTsKLQotc3RydWN0
IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCi17Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgLy8gVHJh
bnNsYXRlZCBNZXRhbCBzb3VyY2UgY29kZQotICAgIHN0ZDo6c3RyaW5nIG1ldGFsU2hhZGVyU291
cmNlOwotICAgIC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92
ZS4gVXNlZCBieSBQcm9ncmFtTXRsLgotICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBt
ZXRhbExpYnJhcnk7Ci0KLSAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1w
bGVyQmluZGluZ3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKLSAgICBzdGQ6OmFycmF5PHVpbnQz
Ml90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFsVUJPQmluZGluZ3M7Ci0gICAgc3RkOjphcnJh
eTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVhbFhGQkJpbmRpbmdzOwotICAgIGJvb2wg
aGFzVUJPQXJndW1lbnRCdWZmZXI7Ci19OwotCiAvLyAtIHNoYWRlclNvdXJjZXNPdXQgaXMgcmVz
dWx0IEdMU0wgY29kZSBwZXIgc2hhZGVyIHN0YWdlIHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJu
ZWQgb2ZmLgogLy8gLSB4ZmJPbmx5U2hhZGVyU291cmNlT3V0IHdpbGwgY29udGFpbiB2ZXJ0ZXgg
c2hhZGVyJ3MgR0xTTCBjb2RlIHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJuZWQgb24uCiB2b2lk
IEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0
YXRlLApAQCAtNTcsNiArMzUsMTMgQEAgYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0U2hhZGVyU3Bp
cnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZh
cmlhYmxlSW5mb01hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOwogCith
bmdsZTo6UmVzdWx0IE1TTEdldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyQml0
U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjp2ZWN0b3I8dWludDMyX3Q+PiAq
c2hhZGVyQ29kZU91dCk7CisKIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBjb2RlIHRvIE1ldGFs
IHNoYWRlciBzb3VyY2UgY29kZS4KIC8vIC0gc3BpcnZTaGFkZXJDb2RlIGlzIFNQSVJWIGNvZGUg
cGVyIHNoYWRlciBzdGFnZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9mZi4KIC8vIC0g
eGZiT25seVNwaXJ2Q29kZSBpcyAgdmVydGV4IHNoYWRlcidzIFNQSVJWIGNvZGUgd2hlbiBYRkIg
ZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KQEAgLTcwLDYgKzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQg
U3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9P
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICpt
c2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8pOwogCit2b2lkIE1TTEdldFNo
YWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3Vy
Y2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4g
KnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisKK2FuZ2xlOjpSZXN1
bHQgR2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNoYWRlclN0YWdlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFk
ZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcElu
dGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFk
ZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3Rk
OjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21wYXJlIG1v
ZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KK3VpbnQgTXNsR2V0U2hh
ZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKwogfSAgLy8g
bmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191
dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQppbmRleCBjYWEwZTU2MTk3NDc0MWUxOGU5YTg4ZGY0
NTMxYWQ1M2VjZDhlYzFiLi40Y2Y3MTdhYTZlMmQ2MTI2YjkzODRkMjc5Y2VkNDVlNGE2YTkxZjVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLm1tCkBAIC0x
Myw2ICsxMyw3IEBACiAjaW5jbHVkZSA8c3BpcnZfbXNsLmhwcD4KIAogI2luY2x1ZGUgImNvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193
cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxh
eU10bC5oIgogCkBAIC0yMiwxMiArMjMsMTMgQEAgbmFtZXNwYWNlIG10bAogewogbmFtZXNwYWNl
CiB7Ci0KIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ1RleHR1cmVEZXNjU2V0ICAgICAgICAg
ICAgICA9IDA7CiBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdEZWZhdWx0VW5pZm9ybUFuZFhm
YkRlc2NTZXQgPSAxOwogY29uc3RleHByIHVpbnQzMl90IGtHbHNsYW5nRHJpdmVyVW5pZm9ybXNE
ZXNjU2V0ICAgICAgID0gMjsKIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291
cmNlRGVzY1NldCAgICAgICA9IDM7CiAKK2NvbnN0ZXhwciBjaGFyIGtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzVmFyTmFtZVtdID0gIkFOR0xFU2hhZG93Q29tcGFyZU1vZGVzIjsKKwogLy8gT3Jp
Z2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUg
c2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgogLy8gc2xvdDpjb3VudCBwYWlyKQogdXNpbmcgT3Jp
Z2luYWxTYW1wbGVyQmluZGluZ01hcCA9CkBAIC01Niw5ICs1OCwxMyBAQCB2b2lkIFJlc2V0R2xz
bGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvKEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJv
Z3JhbUludGVyZgogICAgIHN0YXRpY19hc3NlcnQoa0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4
ICE9IDAsICJrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggbXVzdCBub3QgYmUgMCIpOwogfQog
CisKIEdsc2xhbmdTb3VyY2VPcHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMoKQogewogICAgIEds
c2xhbmdTb3VyY2VPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5lbXVsYXRlVHJhbnNmb3Jt
RmVlZGJhY2sgPSB0cnVlOworICAgIC8vIFdlIGNhbiBlYXJseSBvdXQgaW4gdGhlIE1TTCBvbmNl
IHRyYW5zZm9ybSBmZWVkYmFjayBpcyB3cml0dGVuCisgICAgb3B0aW9ucy50cmFuc2Zvcm1GZWVk
YmFja0Vhcmx5UmV0dXJuID0gdHJ1ZTsKICAgICByZXR1cm4gb3B0aW9uczsKIH0KIApAQCAtNzks
OCArODUsOCBAQCBzcHY6OkV4ZWN1dGlvbk1vZGVsIFNoYWRlclR5cGVUb1NwdkV4ZWN1dGlvbk1v
ZGVsKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB2b2lkIEJpbmRCdWZmZXJzKHNwaXJ2X2Ny
b3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaXJ2
X2Nyb3NzOjpTbWFsbFZlY3RvcjxzcGlydl9jcm9zczo6UmVzb3VyY2U+ICZyZXNvdXJjZXMsCiAg
ICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCi0gICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9P
cmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAg
ICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3Jp
Z2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWlu
dDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKICAgICAgICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50MzJfdCwga01heEdMVUJPQmluZGluZ3M+ICp1Ym9CaW5kaW5nc1JlbWFw
T3V0LAogICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4U2hhZGVyWEZC
cz4gKnhmYkJpbmRpbmdSZW1hcE91dCwKICAgICAgICAgICAgICAgICAgYm9vbCAqdWJvQXJndW1l
bnRCdWZmZXJVc2VkKQpAQCAtMjUzLDMwICsyNTksNTAgQEAgdm9pZCBHZXRBc3NpZ25lZFNhbXBs
ZXJCaW5kaW5ncyhjb25zdCBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wgJmNvbXBpbGVyTXNsLAog
ICAgIH0KIH0KIAotc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGNvbnN0IHN0
ZDo6c3RyaW5nICZ0cmFuc2xhdGVkU291cmNlKQorc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFu
c2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1wbGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNs
YXRlZFNvdXJjZSkKIHsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2U7CisgICAgaWYgKGhhc0RlcHRo
U2FtcGxlcikKKyAgICB7CisgICAgICAgIC8vIEFkZCBBTkdMRVNoYWRvd0NvbXBhcmVNb2RlcyB2
YXJpYWJsZSB0byBtYWluKCksIFdlIG5lZWQgdG8gYWRkIGhlcmUgYmVjYXVzZSBpdCBpcyB0aGUK
KyAgICAgICAgLy8gb25seSB3YXkgd2l0aG91dCBtb2RpZnlpbmcgc3BpcnYtY3Jvc3MuCisgICAg
ICAgIHN0ZDo6cmVnZXggbWFpbkRlY2xhcmVSZWdleCgKKyAgICAgICAgICAgIFIiKCgodmVydGV4
fGZyYWdtZW50fGtlcm5lbClccytbX2EtekEtWjAtOTw+XStccyttYWluW15cKF0qXCgpKSIpOwor
ICAgICAgICBzdGQ6OnN0cmluZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygi
JDFjb25zdGFudCB1bmlmb3JtPHVpbnQ+ICoiKSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzVmFyTmFtZSArICJb
W2J1ZmZlcigiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyKGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KSArICIpXV0sICI7Cisg
ICAgICAgIHNvdXJjZSA9IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBtYWlu
RGVjbGFyZVJlZ2V4LCBtYWluRGVjbGFyZVJlcGxhY2VTdHIpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBzb3VyY2UgPSB0cmFuc2xhdGVkU291cmNlOworICAgIH0KKwogICAgIC8v
IEFkZCBmdW5jdGlvbl9jb25zdGFudCBhdHRyaWJ1dGUgdG8gZ2xfU2FtcGxlTWFzay4KICAgICAv
LyBFdmVuIHRob3VnaCB0aGlzIHZhcnlpbmcgaXMgb25seSB1c2VkIHdoZW4gQU5HTEVDb3ZlcmFn
ZU1hc2tFbmFibGVkIGlzIHRydWUsCiAgICAgLy8gdGhlIHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNz
aWduIGZ1bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBpdCB3b24ndCBiZSBk
ZWFkLWNvZGUKICAgICAvLyByZW1vdmVkIHdoZW4gQU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkPWZh
bHNlLgogICAgIHN0ZDo6c3RyaW5nIHNhbXBsZU1hc2tSZXBsYWNlU3RyID0gc3RkOjpzdHJpbmco
Iltbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KCIpICsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lICsgIildXSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6
VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildXSI7CiAKICAgICAvLyBUaGlz
IHJlcGxhY2VzICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2tdXSIKICAgICAvLyAgICAgICAg
ICB3aXRoICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KEFO
R0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCldXSIKICAgICBzdGQ6OnJlZ2V4IHNhbXBsZU1hc2tEZWNs
YXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSkiKTsKLSAgICByZXR1
cm4gc3RkOjpyZWdleF9yZXBsYWNlKHRyYW5zbGF0ZWRTb3VyY2UsIHNhbXBsZU1hc2tEZWNsYXJl
UmVnZXgsIHNhbXBsZU1hc2tSZXBsYWNlU3RyKTsKKyAgICByZXR1cm4gc3RkOjpyZWdleF9yZXBs
YWNlKHNvdXJjZSwgc2FtcGxlTWFza0RlY2xhcmVSZWdleCwgc2FtcGxlTWFza1JlcGxhY2VTdHIp
OwogfQogCiAvLyBDdXN0b21pemVkIHNwaXJ2LWNyb3NzIGNvbXBpbGVyCiBjbGFzcyBTcGlydlRv
TXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCiB7CiAgIHB1Ymxp
YzoKLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICYmc3ByaXYp
IDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorICAgIFNwaXJ2VG9Nc2xDb21w
aWxlcihDb250ZXh0ICpjb250ZXh0LCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gJiZzcHJpdikKKyAg
ICAgICAgOiBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0woc3ByaXYpLCBtQ29udGV4dChjb250ZXh0
KQorICAgIHt9CiAKICAgICB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJp
bmRpbmdzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3Ry
aW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5nTWFw
ICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVk
U2hhZGVySW5mbyAqbXNsU2hhZGVySW5mb091dCkKICAgICB7CkBAIC0zMjgsOCArMzU0LDcgQEAg
Y2xhc3MgU3BpcnZUb01zbENvbXBpbGVyIDogcHVibGljIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1T
TAogICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5ncyBmb3IgdGV4dHVy
ZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKICAgICAgICAgICAgIC8vIGlu
c3RlYWQgb2YgdXNpbmcgYXJndW1lbnQgYnVmZmVyLgogICAgICAgICAgICAgc3BpcnZfY3Jvc3M6
OkNvbXBpbGVyTVNMOjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xhbmdUZXh0dXJl
RGVzY1NldCk7Ci0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNj
cmV0ZV9kZXNjcmlwdG9yX3NldCgKLSAgICAgICAgICAgICAgICBrR2xzbGFuZ0RlZmF1bHRVbmlm
b3JtQW5kWGZiRGVzY1NldCk7CisgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6
OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RlZmF1bHRVbmlmb3JtQW5kWGZi
RGVzY1NldCk7CiAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNj
cmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1zRGVzY1NldCk7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQwLDMxICszNjUsNzQyIEBAIGNsYXNzIFNwaXJ2VG9N
c2xDb21waWxlciA6IHB1YmxpYyBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wKIAogICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21wT3B0KTsKIAorICAg
ICAgICBhZGRCdWlsdEluUmVzb3VyY2VzKCk7CisgICAgICAgIGFuYWx5emVTaGFkZXJWYXJpYWJs
ZXMoKTsKKwogICAgICAgICAvLyBBY3R1YWwgY29tcGlsYXRpb24KICAgICAgICAgbXNsU2hhZGVy
SW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgUG9zdFByb2Nlc3NUcmFu
c2xhdGVkTXNsKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgpKTsKKyAgICAgICAg
ICAgIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChtSGFzRGVwdGhTYW1wbGVyLCBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CiAKICAgICAgICAgLy8gUmV0cmlldmUgYXV0b21h
dGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50cwogICAgICAgICBHZXRBc3NpZ25lZFNhbXBsZXJC
aW5kaW5ncygqdGhpcywgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1YWxTYW1wbGVyQmluZGlu
Z3MpOwogICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIE92ZXJyaWRlIENvbXBpbGVyTVNMCisg
ICAgdm9pZCBlbWl0X2hlYWRlcigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmVtaXRfaGVhZGVyKCk7CisgICAgICAgIGlmICghbUhhc0RlcHRoU2Ft
cGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNlIGlzc3VlczoKKyAgICAgICAgLy8gLSBzcHJp
dl9jcm9zcyBhbHdheXMgdHJhbnNsYXRlcyBzaGFkb3cgdGV4dHVyZSdzIHNhbXBsaW5nIHRvIHNh
bXBsZV9jb21wYXJlKCkgYW5kIGRvZXNuJ3QKKyAgICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQg
R0xfVEVYVFVSRV9DT01QQVJFX01PREU9R0xfTk9ORS4KKyAgICAgICAgLy8gLSBvbiBtYWNPUywg
ZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHNh
bXBsZV9jb21wYXJlKCkuCisgICAgICAgIC8vIC0gb24gZGV2aWNlcyBwcmlvciB0byBpT1MgR1BV
IGZhbWlseSAzLCBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBtb2RlIG91dHNpZGUgc2hhZGVy
IGlzCisgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgIGlmICghbUNvbnRleHQtPmdl
dERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUu
ZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGVtZW50KCIjZGVmaW5lIEFOR0xF
X01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFIik7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0ZW1lbnQoImVudW0gY2xhc3MgQU5HTEVDb21wYXJlTW9kZSA6IHVpbnQiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIE5vbmUgPSAwLCIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICBMZXNzRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXIsIik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXJFcXVhbCwiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgTmV2ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEFsd2F5cywiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIE5vdEVxdWFs
LCIpOworICAgICAgICBzdGF0ZW1lbnQoIn07Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisK
KyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9y
bU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRWNvbXBhcmUoVCBk
ZXB0aCwgVCBkcmVmLCBVbmlmb3JtT3JVSW50IGNvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0
ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICBBTkdMRUNvbXBhcmVNb2RlIG1vZGUg
PSBzdGF0aWNfY2FzdDxBTkdMRUNvbXBhcmVNb2RlPihjb21wYXJlTW9kZSk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgc3dpdGNoIChtb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgIHsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6TGVz
czoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gZHJlZiA8IGRlcHRo
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpM
ZXNzRXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJuIGRyZWYg
PD0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFy
ZU1vZGU6OkdyZWF0ZXI6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJu
IGRyZWYgPiBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6R3JlYXRlckVxdWFsOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
ICAgIHJldHVybiBkcmVmID49IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
Y2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgICAgICByZXR1cm4gMDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5H
TEVDb21wYXJlTW9kZTo6QWx3YXlzOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAg
IHJldHVybiAxOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBh
cmVNb2RlOjpFcXVhbDoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4g
ZHJlZiA9PSBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgIT0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBkZWZh
dWx0OiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiAxOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAg
IHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9u
cyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIC8vIDJEIFBDRiBzYW1w
bGluZworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBP
cHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5l
IFQgQU5HTEV0ZXh0dXJlUENGKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0
aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisg
ICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKF9f
TUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBm
bG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29vcmQgPSBjb29yZCAqIGRpbXM7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAgLyBkaW1zOyIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0bCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJl
LnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAgICAgICAgICAgICAgICAg
ImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBm
bG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBv
ZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIGZsb2F0IGJsID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNv
b3JkICsgZmxvYXQyKDAuMCwgdGV4ZWxTaXplLnkpLCAiCisgICAgICAgICAgICAgICAgICAib3B0
aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBiciA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCArIHRleGVsU2l6ZSwgb3B0aW9ucywgIgorICAgICAgICAgICAgICAgICAgIm9m
ZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBtaXgodG9wLCBib3R0b20sIHdlaWdodC55
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01B
Q09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4
dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCksICIKKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gQ3Vi
ZSBQQ0Ygc2FtcGxpbmcKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1l
bnQoImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3Zh
bHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIC8vIE5PVEUoaHFs
ZSk6IHRvIGltcGxlbWVudCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zKSwgY29tcGFyZV92YWx1ZSwg
IgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQgYXJy
YXkgUENGIHNhbXBsaW5nCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVt
ZW50KAorICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aDJkX2FycmF5
PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAgICAg
ICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBV
bmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoX19NRVRB
TF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgZGltcyA9IGZsb2F0
Mih0ZXh0dXJlLmdldF93aWR0aCgpLCB0ZXh0dXJlLmdldF9oZWlnaHQoKSk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICogZGltczsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRpbXM7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB3ZWlnaHQgPSBmcmFjdChpbWdDb29yZCk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2Ft
cGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAgICAgICAgICAgICAg
ICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQg
KyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwg
b3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBibCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNh
bXBsZShzLCBjb29yZCArIGZsb2F0MigwLjAsIHRleGVsU2l6ZS55KSwgIgorICAgICAgICAgICAg
ICAgICAgImFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21w
YXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJyID0gQU5HTEVjb21w
YXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4ZWxTaXplLCBhcnJheSwgIgorICAgICAg
ICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBh
cmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0
ciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBt
aXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBt
aXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAg
Ly8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRp
b25zLCBvZmZzZXQpLCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiAgLy8gaWYgZGVmaW5l
ZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgp
IHdyYXBwZXIKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMs
IGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUs
IE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9k
ZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAg
ICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRM
X05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFs
dWUsIG9wdGlvbnMsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgY29tcGFyZV92YWx1
ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAg
c3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVy
ZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxv
YXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlm
b3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAg
ICJpbnQyKDApLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIp
OworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBs
ZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92
YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisg
ICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKEFO
R0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21w
YXJlX3ZhbHVlLCBsZXZlbCgwKSwgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93
Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBjb21w
YXJlX3ZhbHVlLCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICAv
LyBDdWJlIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3Jt
T3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAiaW5saW5lIFQgQU5H
TEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMg
Y29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywg
VW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFM
X01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJF
X01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0Yo
dGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2Ui
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUo
cywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAiaW5saW5l
IFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBVbmlmb3Jt
T3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1F
X0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4
dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgbGV2ZWwoMCksICIKKyAg
ICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
X2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFw
cGVyCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9w
dCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKyAgICAgICAgICAgICAgICAgICJ1aW50IGFycmF5LCBmbG9hdCBj
b21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgIgor
ICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgIiNpZiBkZWZpbmVkKF9f
TUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NP
TVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVy
ZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIK
KyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFy
ZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYi
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xF
dGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFO
R0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVl
LCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgaW50MigwKSwgc2hhZG93Q29tcGFyZU1v
ZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsK
KworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlm
b3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNv
bXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwg
IgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIGlu
dDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21w
YXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
I2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwg
cywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgorICAgICAgICAgICAg
ICAgICAgIm9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9j
b21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgb2Zmc2V0KTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAg
IHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxp
bmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Ig
c2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdDIgY29vcmQsIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29t
cGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJl
TW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNv
bXBhcmVfdmFsdWUsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29v
cmQsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dD
b21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1l
bnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJpbnQyIG9mZnNldCwg
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywg
Y29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJvZmZz
ZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBj
b29yZCwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAg
ICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1l
IFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0
dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIE9wdCBvcHRp
b25zLCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQs
IG9wdGlvbnMsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJz
aGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIEN1YmUgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxp
bmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdM
RXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBm
bG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVy
ZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
cywgY29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRl
bWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUlu
dD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJl
PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgorICAgICAgICAgICAg
ICAgICAgIm9wdGlvbnMsIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93
Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21w
YXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisgICAgICAg
ICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHMsIGNvb3JkLCBvcHRpb25zKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorICAgICAg
ICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50
PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkX2Fy
cmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAg
ICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKyAgICAgICAgICAgICAgICAgICJmbG9h
dCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0Nv
bXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBzLCBjb29y
ZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNo
YWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwg
YXJyYXksIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAgICAgICAg
ICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFy
ZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgaW50MigwKSwg
Y29tcGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xF
dGV4dHVyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3Jk
LCB1aW50ICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwgT3B0IG9wdGlvbnMsIGludDIgb2Zm
c2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xF
dGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCAi
CisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBv
ZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4i
KTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJh
eTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAg
ICAgICAgICAiYXJyYXksIE9wdCBvcHRpb25zLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3Jt
T3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29y
ZCwgYXJyYXksIG9wdGlvbnMsIGludDIoMCksICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJl
X3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiIpOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0
aW9uX25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNBcnJheU9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGhhc09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzRHJlZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbkxvZCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmICghaGFzRHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNw
aXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVuY3Rpb25fbmFtZShpbWcsIGltZ1R5cGUsIGlz
RmV0Y2gsIGlzR2F0aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0cywgaGFzT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNHcmFkLCBoYXNEcmVmLCBsb2QsIG1pbkxvZCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBVc2UgY3VzdG9tIEFOR0xFdGV4dHVyZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHVzaW5n
IGJ1aWx0LWluIHNhbXBsZV9jb21wYXJlKCkKKyAgICAgICAgcmV0dXJuICJBTkdMRXRleHR1cmUi
OworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9uX2FyZ3Moc3BpcnZfY3Jvc3M6
OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNQ
cm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29vcmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb29yZENvbXBvbmVudHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkcmVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ3JhZFgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBncmFkWSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGNvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBiaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29tcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbmxvZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBGb3J3YXJkKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICBzdGQ6OnN0cmluZyBhcmdzV2l0aG91dERyZWYg
PSBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1bmN0aW9uX2FyZ3MoCisgICAgICAgICAg
ICBpbWcsIGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLCBpc1Byb2osIGNvb3JkLCBjb29yZENv
bXBvbmVudHMsIDAsIGdyYWRYLCBncmFkWSwgbG9kLAorICAgICAgICAgICAgY29mZnNldCwgb2Zm
c2V0LCBiaWFzLCBjb21wLCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOworCisgICAgICAgIGlm
ICghZHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBGb3J3YXJkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gYXJnc1dpdGhvdXREcmVmOworICAgICAgICB9CisgICAgICAg
IC8vIENvbnZlcnQgdG8gYXJndW1lbnRzIHRvIEFOR0xFdGV4dHVyZS4KKyAgICAgICAgc3RkOjpz
dHJpbmcgYXJncyA9IHRvX2V4cHJlc3Npb24oaW1nKTsKKyAgICAgICAgYXJncyArPSAiLCAiOwor
ICAgICAgICBhcmdzICs9IGFyZ3NXaXRob3V0RHJlZjsKKyAgICAgICAgYXJncyArPSAiLCAiOwor
CisgICAgICAgIGZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmb3J3YXJk
ICYmIHNob3VsZF9mb3J3YXJkKGRyZWYpOworICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJ
UlR5cGUgJmRyZWZUeXBlID0gZXhwcmVzc2lvbl90eXBlKGRyZWYpOworICAgICAgICBzdGQ6OnN0
cmluZyBkcmVmRXhwcjsKKyAgICAgICAgdWludDMyX3QgYWx0Q29vcmRDb21wb25lbnQgPSAwOwor
ICAgICAgICBzd2l0Y2ggKGltZ1R5cGUuaW1hZ2UuZGltKQorICAgICAgICB7CisgICAgICAgICAg
ICBjYXNlIHNwdjo6RGltMkQ6CisgICAgICAgICAgICAgICAgYWx0Q29vcmRDb21wb25lbnQgPSAy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBzcHY6OkRpbTNEOgor
ICAgICAgICAgICAgY2FzZSBzcHY6OkRpbUN1YmU6CisgICAgICAgICAgICAgICAgYWx0Q29vcmRD
b21wb25lbnQgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChpc1Byb2opCisgICAgICAgICAgICBkcmVmRXhwciA9
IHNwaXJ2X2Nyb3NzOjpqb2luKHRvX2VuY2xvc2VkX2V4cHJlc3Npb24oZHJlZiksICIgLyAiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19leHRyYWN0X2NvbXBv
bmVudF9leHByZXNzaW9uKGNvb3JkLCBhbHRDb29yZENvbXBvbmVudCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkcmVmRXhwciA9IHRvX2V4cHJlc3Npb24oZHJlZik7CisKKyAgICAgICAg
aWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZTo6SGFsZikKKyAg
ICAgICAgICAgIGRyZWZFeHByID0gY29udmVydF90b19mMzIoZHJlZkV4cHIsIDEpOworCisgICAg
ICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisgICAgICAgIGFyZ3MgKz0gIiwgIjsKKyAgICAgICAgYXJn
cyArPSB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbihpbWcpOworCisgICAgICAgIGlmIChw
Rm9yd2FyZCkKKyAgICAgICAgeworICAgICAgICAgICAgKnBGb3J3YXJkID0gZm9yd2FyZDsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKworICAgIC8vIE92ZXJyaWRl
IGZ1bmN0aW9uIHByb3RvdHlwZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2Rl
IGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdpdGggdGhlIHNoYWRvdyBzYW1wbGVyLiBO
T1RFKGhxbGUpOiBUaGlzIGlzIGp1c3QgOTAlIGNvcHkgb2Ygc3BpcnZfbXNsJ3MgY29kZS4KKyAg
ICAvLyBUaGUgYmV0dGVyIHdheSBpcyBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIGEgUFIgb24gc3Bp
cnYtY3Jvc3MgcmVwbyBkaXJlY3RseS4gQnV0IHRoaXMgc2hvdWxkCisgICAgLy8gYmUgYSB3b3Jr
IGFyb3VuZCBzb2x1dGlvbiBmb3Igbm93LgorICAgIHZvaWQgZW1pdF9mdW5jdGlvbl9wcm90b3R5
cGUoc3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbiAmZnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpCaXRzZXQgJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIFR1cm4gb2ZmIGNsYW5nLWZvcm1hdCB0byBlYXNpZXIgY29tcGFyZSB3aXRo
IG9yaWdpbmFsIGNvZGUKKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorICAgICAgICB1c2lu
ZyBuYW1lc3BhY2Ugc3BpcnZfY3Jvc3M7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzcHY7Cisg
ICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyAgICAgICAgaWYgKGZ1bmMuc2VsZiAhPSBp
ci5kZWZhdWx0X2VudHJ5X3BvaW50KQorICAgICAgICAgICAgYWRkX2Z1bmN0aW9uX292ZXJsb2Fk
KGZ1bmMpOworCisgICAgICAgIGxvY2FsX3ZhcmlhYmxlX25hbWVzID0gcmVzb3VyY2VfbmFtZXM7
CisgICAgICAgIHN0cmluZyBkZWNsOworCisgICAgICAgIHByb2Nlc3NpbmdfZW50cnlfcG9pbnQg
PSBmdW5jLnNlbGYgPT0gaXIuZGVmYXVsdF9lbnRyeV9wb2ludDsKKworICAgICAgICAvLyBNZXRh
bCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGluZSBvdGhlcndpc2Ug
dGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVyIGluIGEgc2luZ2xl
IE1ldGFsbGliLgorICAgICAgICBpZiAoIXByb2Nlc3NpbmdfZW50cnlfcG9pbnQpCisgICAgICAg
ICAgICBzdGF0ZW1lbnQoInN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu
ZSkpIik7CisKKyAgICAgICAgYXV0byAmdHlwZSA9IGdldDxTUElSVHlwZT4oZnVuYy5yZXR1cm5f
dHlwZSk7CisKKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMu
Zm9yY2VfbmF0aXZlX2FycmF5cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgY2Fubm90
IHJldHVybiBuYXRpdmUgYXJyYXlzIGluIE1TTCwgc28gInJldHVybiIgdGhyb3VnaCBhbiBvdXQg
dmFyaWFibGUuCisgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlY2wgKz0gZnVuY190eXBlX2RlY2wodHlw
ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIgIjsKKyAgICAgICAgZGVjbCArPSB0
b19uYW1lKGZ1bmMuc2VsZik7CisgICAgICAgIGRlY2wgKz0gIigiOworCisgICAgICAgIGlmICgh
dHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25zLmZvcmNlX25hdGl2ZV9hcnJheXMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZha2UgYXJyYXlzIHJldHVybnMgYnkgd3JpdGluZyB0
byBhbiBvdXQgYXJyYXkgaW5zdGVhZC4KKyAgICAgICAgICAgIGRlY2wgKz0gInRocmVhZCAiOwor
ICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2dsc2wodHlwZSk7CisgICAgICAgICAgICBkZWNs
ICs9ICIgKCZTUElSVl9Dcm9zc19yZXR1cm5fdmFsdWUpIjsKKyAgICAgICAgICAgIGRlY2wgKz0g
dHlwZV90b19hcnJheV9nbHNsKHR5cGUpOworICAgICAgICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50
cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIGRlY2wgKz0gIiwgIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobXNsX29wdGlvbnMuYXJndW1lbnRfYnVmZmVycykKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGVudHJ5X3BvaW50X2FyZ3NfYXJndW1lbnRfYnVmZmVyKCFmdW5jLmFyZ3VtZW50cy5lbXB0
eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3Bv
aW50X2FyZ3NfY2xhc3NpYyghZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisKKyAgICAgICAgICAg
IC8vIElmIGVudHJ5IHBvaW50IGZ1bmN0aW9uIGhhcyB2YXJpYWJsZXMgdGhhdCByZXF1aXJlIGVh
cmx5IGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFu
IGVtcHR5IGluaXRpYWxpemVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBkb25lIGF0IHRoaXMgbGF0ZSBzdGFnZSBiZWNhdXNlIHRoZSBpbml0aWFsaXph
dGlvbiBleHByZXNzaW9uCisgICAgICAgICAgICAvLyBpcyBjbGVhcmVkIGFmdGVyIGVhY2ggY29t
cGlsYXRpb24gcGFzcy4KKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQgOiB2YXJzX25lZWRp
bmdfZWFybHlfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byAmZWRfdmFyID0gZ2V0PFNQSVJWYXJpYWJsZT4odmFyX2lkKTsKKyAgICAgICAgICAgICAgICBJ
RCAmaW5pdGlhbGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisgICAgICAgICAgICAgICAgaWYg
KCFpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBpci5pbmNy
ZWFzZV9ib3VuZF9ieSgxKTsKKworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBvdmVycmlkZSBw
cm9wZXIgaW5pdGlhbGl6ZXJzLgorICAgICAgICAgICAgICAgIGlmIChpci5pZHNbaW5pdGlhbGl6
ZXJdLmdldF90eXBlKCkgPT0gVHlwZU5vbmUgfHwgaXIuaWRzW2luaXRpYWxpemVyXS5nZXRfdHlw
ZSgpID09IFR5cGVFeHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICBzZXQ8U1BJUkV4cHJl
c3Npb24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byAmYXJnIDogZnVu
Yy5hcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfaWQgPSBh
cmcuaWQ7CisKKyAgICAgICAgICAgIGF1dG8gKnZhciA9IG1heWJlX2dldDxTUElSVmFyaWFibGU+
KGFyZy5pZCk7CisgICAgICAgICAgICBpZiAodmFyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIElmIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSwg
bWFrZSBzdXJlIHdlIG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCisgICAgICAgICAgICAg
ICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisgICAgICAgICAgICAg
ICAgaWYgKGFyZy5hbGlhc19nbG9iYWxfdmFyaWFibGUgJiYgdmFyLT5iYXNldmFyaWFibGUpCisg
ICAgICAgICAgICAgICAgICAgIG5hbWVfaWQgPSB2YXItPmJhc2V2YXJpYWJsZTsKKworICAgICAg
ICAgICAgICAgIHZhci0+cGFyYW1ldGVyID0gJmFyZzsgLy8gSG9sZCBhIHBvaW50ZXIgdG8gdGhl
IHBhcmFtZXRlciBzbyB3ZSBjYW4gaW52YWxpZGF0ZSB0aGUgcmVhZG9ubHkgZmllbGQgaWYgbmVl
ZGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGRfbG9jYWxfdmFyaWFibGVfbmFt
ZShuYW1lX2lkKTsKKworICAgICAgICAgICAgZGVjbCArPSBhcmd1bWVudF9kZWNsKGFyZyk7CisK
KyAgICAgICAgICAgIGJvb2wgaXNfZHluYW1pY19pbWdfc2FtcGxlciA9IGhhc19leHRlbmRlZF9k
ZWNvcmF0aW9uKGFyZy5pZCwgU1BJUlZDcm9zc0RlY29yYXRpb25EeW5hbWljSW1hZ2VTYW1wbGVy
KTsKKworICAgICAgICAgICAgYXV0byAmYXJnX3R5cGUgPSBnZXQ8U1BJUlR5cGU+KGFyZy50eXBl
KTsKKyAgICAgICAgICAgIGlmIChhcmdfdHlwZS5iYXNldHlwZSA9PSBTUElSVHlwZTo6U2FtcGxl
ZEltYWdlICYmICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBwbGFuZSBhcmdzIGZvciBtdWx0aXBs
YW5hciB0ZXh0dXJlCisgICAgICAgICAgICAgICAgdWludDMyX3QgcGxhbmVzID0gMTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHByX3NhbXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9z
YW1wbGVyKG5hbWVfaWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RleHByX3NhbXBs
ZXItPnljYmNyX2NvbnZlcnNpb25fZW5hYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGxh
bmVzID0gY29uc3RleHByX3NhbXBsZXItPnBsYW5lczsKKyAgICAgICAgICAgICAgICBmb3IgKHVp
bnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGRlY2wg
Kz0gam9pbigiLCAiLCBhcmd1bWVudF9kZWNsKGFyZyksIHBsYW5lX25hbWVfc3VmZml4LCBpKTsK
KworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBm
b3IgU2FtcGxlZEltYWdlIHRleHR1cmUKKyAgICAgICAgICAgICAgICBpZiAoYXJnX3R5cGUuaW1h
Z2UuZGltICE9IERpbUJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIs
IHRocmVhZCBjb25zdCAiLCBzYW1wbGVyX3R5cGUoYXJnX3R5cGUpLCAiICIsIHRvX3NhbXBsZXJf
ZXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFu
dWZhY3R1cmUgYXV0b21hdGljIHN3aXp6bGUgYXJnLgorICAgICAgICAgICAgaWYgKG1zbF9vcHRp
b25zLnN3aXp6bGVfdGV4dHVyZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2ltYWdlcyAmJiBpc19z
YW1wbGVkX2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmCisgICAgICAgICAgICAgICAgIWlzX2R5bmFt
aWNfaW1nX3NhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdf
aXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGpvaW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLCB0
b19zd2l6emxlX2V4cHJlc3Npb24oYXJnLmlkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChidWZmZXJzX3JlcXVpcmluZ19hcnJheV9sZW5ndGguY291bnQobmFtZV9pZCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5
cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3Rh
bnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLCB0b19idWZmZXJfc2l6ZV9leHBy
ZXNzaW9uKG5hbWVfaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzX3Nh
bXBsZWRfaW1hZ2VfdHlwZShhcmdfdHlwZSkgJiYgYXJnX3R5cGUuaW1hZ2UuZGVwdGgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUu
YXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgc2hhZG93IGNvbXBhcmUg
bW9kZSBmbGFnIHRvIHRoZSBhcmd1bWVudCBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGpvaW4oIiwgY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGFyZ19pc19hcnJheSA/ICIqICIg
OiAiJiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCZh
cmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKyAgICAgICAgICAgICAgICBkZWNsICs9ICIs
ICI7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIpIjsKKyAgICAgICAgc3RhdGVtZW50
KGRlY2wpOworCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorICAgIH0KKworICAgIC8vIE92
ZXJyaWRlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzIHBhc3NpbmcgZ2VuZXJhdG9yIHRvIGluc2Vy
dCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdpdGgg
dGhlIHNoYWRvdyBzYW1wbGVyCisgICAgc3RkOjpzdHJpbmcgdG9fZnVuY19jYWxsX2FyZyhjb25z
dCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFyZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlkKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVu
Y19jYWxsX2FyZyhhcmcsIGlkKTsKKworICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJUlR5
cGUgJnR5cGUgPSBleHByZXNzaW9uX3R5cGUoaWQpOworCisgICAgICAgIGlmIChpc19zYW1wbGVk
X2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5pbWFnZS5kZXB0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1vZGUgZmxhZyB0byB0aGUgYXJndW1lbnQg
c2VxdWVuY2U6CisgICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBiYXNlIHZhcmlhYmxl
IGluIGNhc2Ugd2UgbmVlZCB0byBhcHBseSBhIHF1YWxpZmllZCBhbGlhcy4KKyAgICAgICAgICAg
IHVpbnQzMl90IHZhcl9pZCA9IDA7CisgICAgICAgICAgICBhdXRvICp2YXIgICAgICAgPSBtYXli
ZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZT4oaWQpOworICAgICAgICAgICAgaWYgKHZh
cikKKyAgICAgICAgICAgICAgICB2YXJfaWQgPSB2YXItPmJhc2V2YXJpYWJsZTsKKworICAgICAg
ICAgICAgYXJnX3N0ciArPSAiLCAiICsgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFy
X2lkID8gdmFyX2lkIDogaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcmdfc3RyOwor
ICAgIH0KKworICAgIC8vIEFkZGl0aW9uYWwgZnVuY3Rpb25zCisgICAgdm9pZCBhZGRCdWlsdElu
UmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhcklkID0gYnVpbGRfY29uc3Rh
bnRfdWludF9hcnJheV9wb2ludGVyKCk7CisgICAgICAgIHNldF9uYW1lKHZhcklkLCBrU2hhZG93
U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUpOworICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZl
ciBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVj
b3JhdGlvbkRlc2NyaXB0b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0lu
ZGV4KTsKKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkJpbmRp
bmcsIDApOworICAgICAgICBzZXRfZXh0ZW5kZWRfZGVjb3JhdGlvbih2YXJJZCwgc3BpcnZfY3Jv
c3M6OlNQSVJWQ3Jvc3NEZWNvcmF0aW9uUmVzb3VyY2VJbmRleFByaW1hcnksIDApOworICAgICAg
ICBtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworICAgIH0KKworICAgIHZv
aWQgYW5hbHl6ZVNoYWRlclZhcmlhYmxlcygpCisgICAgeworICAgICAgICBpci5mb3JfZWFjaF90
eXBlZF9pZDxzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlPihbdGhpc10odWludDMyX3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKyAgICAgICAgICAgIGNvbnN0IHNw
aXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGdldF92YXJpYWJsZV9kYXRhX3R5cGUodmFyKTsK
KyAgICAgICAgICAgIHVpbnQzMl90IHZhcklkICAgICAgICAgICAgICAgICAgICA9IHZhci5zZWxm
OworCisgICAgICAgICAgICBpZiAodmFyLnN0b3JhZ2UgPT0gc3B2OjpTdG9yYWdlQ2xhc3NVbmlm
b3JtQ29uc3RhbnQgJiYgIWlzX2hpZGRlbl92YXJpYWJsZSh2YXIpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5p
bWFnZS5kZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1IYXNE
ZXB0aFNhbXBsZXIgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gJmVudHJ5X2Z1
bmMgPSB0aGlzLT5nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbj4oaXIuZGVmYXVsdF9lbnRy
eV9wb2ludCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X2Z1bmMuZml4dXBfaG9va3NfaW4u
cHVzaF9iYWNrKFt0aGlzLCAmdHlwZSwgJnZhciwgdmFySWRdKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5KCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCgiY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGlz
QXJyYXlUeXBlID8gIiogIiA6ICImICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQXJyYXlUeXBlID8gIiA9ICYiIDogIiA9ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fbmFtZShtQU5HTEVTaGFkb3dDb21wYXJlTW9k
ZXNWYXJJZCksICJbIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlydl9j
cm9zczo6Y29udmVydF90b19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldF9tZXRhbF9yZXNvdXJjZV9pbmRleCh2YXIsIHNwaXJ2X2Nyb3NzOjpTUElSVHlw
ZTo6SW1hZ2UpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXTsiKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBjaGFyIGtD
b21wYXJlTW9kZVN1ZmZpeFtdID0gIl9Db21wTW9kZSI7CisgICAgICAgIGF1dG8gKmNvbWJpbmVk
ICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmlu
ZWRJbWFnZVNhbXBsZXI+KGlkKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBleHByID0gdG9fZXhw
cmVzc2lvbihjb21iaW5lZCA/IGNvbWJpbmVkLT5pbWFnZSA6IHNwaXJ2X2Nyb3NzOjpWYXJpYWJs
ZUlEKGlkKSk7CisgICAgICAgIGF1dG8gaW5kZXggICAgICAgPSBleHByLmZpbmRfZmlyc3Rfb2Yo
J1snKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAg
ICAgICByZXR1cm4gZXhwciArIGtDb21wYXJlTW9kZVN1ZmZpeDsKKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGltYWdlRXhwciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4
KTsKKyAgICAgICAgICAgIGF1dG8gYXJyYXlFeHByID0gZXhwci5zdWJzdHIoaW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuIGltYWdlRXhwciArIGtDb21wYXJlTW9kZVN1ZmZpeCArIGFycmF5RXhw
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIHVpbnQz
Ml90IG1BTkdMRVNoYWRvd0NvbXBhcmVNb2Rlc1ZhcklkID0gMDsKKyAgICBib29sIG1IYXNEZXB0
aFNhbXBsZXIgICAgICAgICAgICAgICAgICA9IGZhbHNlOwogfTsKIAotYW5nbGU6OlJlc3VsdCBD
b252ZXJ0U3BpcnZUb01zbCgKLSAgICBDb250ZXh0ICpjb250ZXh0LAotICAgIGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUsCi0gICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCi0gICAgY29uc3Qgc3RkOjp1bm9yZGVy
ZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCi0gICAgY29u
c3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCi0g
ICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCi0gICAgVHJhbnNsYXRlZFNoYWRl
ckluZm8gKnRyYW5zbGF0ZWRTaGFkZXJJbmZvT3V0KQorYW5nbGU6OlJlc3VsdCBDb252ZXJ0U3Bp
cnZUb01zbChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9Pcmln
aW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmds
ZTo6SGFzaE1hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5n
TWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkU2hhZGVySW5m
b091dCkKIHsKICAgICBpZiAoIXNwcml2Q29kZSB8fCBzcHJpdkNvZGUtPmVtcHR5KCkpCiAgICAg
ewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiAgICAgfQogCi0gICAg
U3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7Cisg
ICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKGNvbnRleHQsIHN0ZDo6bW92ZSgqc3By
aXZDb2RlKSk7CiAKICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlv
bnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCiAgICAgLy8gaW4gY2Fz
ZSBvZiBlcnJvcj8KQEAgLTQzMSwxMiArMTE2NywxMyBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJT
b3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAg
b3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8sIHhmYk9ubHlTaGFk
ZXJTb3VyY2VPdXQsCiAgICAgICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSk7CiAKLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhvcHRpb25z
LCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywgJnhm
Yk9ubHlWYXJpYWJsZU1hcHMpOworICAgICAgICBHbHNsYW5nQXNzaWduTG9jYXRpb25zKG9wdGlv
bnMsIHByb2dyYW1TdGF0ZS5nZXRFeGVjdXRhYmxlKCksIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgs
ICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
eGZiT25seVZhcmlhYmxlTWFwcyk7CiAgICAgICAgICp4ZmJPbmx5VlNWYXJpYWJsZUluZm9NYXBP
dXQgPSBzdGQ6Om1vdmUoeGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4
XSk7CiAgICAgfQogfQogCisKIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29k
ZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVyU3RhZ2VzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENh
cHMsCkBAIC00NzgsNyArMTIxNSw3IEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNo
YWRlckluZm8gKm1zbFhmYk9ubHlTaGFkZXJJbmZvT3V0IC8qKiBudWxsYWJsZSAqLykKIHsKICAg
ICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBiaW5kaW5ncyBnZW5lcmF0ZWQg
YnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1hcC4KLSAgICBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9PcmlnaW5hbEJpbmRpbmdzOworICAg
IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5n
czsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZibG9ja3MgPSBw
cm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOwogICAgIGZvciAodWludDMyX3QgYnVmZmVy
SWR4ID0gMDsgYnVmZmVySWR4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJZHgpCiAgICAgewpA
QCAtNDg5LDcgKzEyMjYsNyBAQCBhbmdsZTo6UmVzdWx0IFNwaXJ2Q29kZVRvTXNsKENvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gUmV0cmlldmUgb3JpZ2luYWwgWEZC
IGJ1ZmZlcnMgYmluZGluZ3MgcHJvZHVjZWQgYnkgZnJvbnQgZW5kLgotICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGluZ3M7CisgICAgYW5n
bGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiB4ZmJPcmlnaW5hbEJpbmRpbmdzOwogICAg
IGZvciAodWludDMyX3QgYnVmZmVySWR4ID0gMDsgYnVmZmVySWR4IDwga01heFNoYWRlclhGQnM7
ICsrYnVmZmVySWR4KQogICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYnVmZmVyTmFtZSA9IHJ4
OjpHZXRYZmJCdWZmZXJOYW1lKGJ1ZmZlcklkeCk7CkBAIC01MzMsNiArMTI3MCw1IEBAIGFuZ2xl
OjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8g
bmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lv
bl9xdWVyeV9wb29sLmgKaW5kZXggODdkYzIxNzY0NjM3YTFiMWZmZTM5YmU3MWMzZTI4NDRlODkx
MjdjYS4uZjg1NzAzNDk5ZDYxYmNlZmIxOGUwNTkxMTI1Y2NkY2Q2NzYyYTkzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9u
X3F1ZXJ5X3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCmluZGV4IDM2OGRiZjQ2Njk2
YWQyZjU0ODEyMzMyOTQwYWZiYjQyMjNlN2JmYWQuLjdjYzg5OTAwNGVjN2VhODNmZWY2ODVkZWFl
ZThjODBlMjk2NDY4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9v
Y2NsdXNpb25fcXVlcnlfcG9vbC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTUyLDE2ICs1MiwxNSBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHsKICAg
ICAgICAgLy8gRmlyc3QgYWxsb2NhdGlvbgogICAgICAgICBBTkdMRV9UUlkoQnVmZmVyOjpNYWtl
QnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1
c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplLCBu
dWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwogICAgICAgICBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLT5nZXQoKS5sYWJlbCA9IEAiT2NjbHVzaW9uUXVlcnlQb29sIjsKICAgICB9CiAg
ICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUgPiBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCiAgICAgewogICAgICAgICAvLyBEb3VibGUg
dGhlIGNhcGFjaXR5CiAgICAgICAgIEFOR0xFX1RSWShCdWZmZXI6Ok1ha2VCdWZmZXJXaXRoUmVz
T3B0KGNvbnRleHRNdGwsIE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQ
b29sLT5zaXplKCkgKiAyLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wtPnNpemUoKSAq
IDIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1SZW5k
ZXJQYXNzUmVzdWx0c1Bvb2wpKTsKICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0
KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7CiAgICAgfQogCkBAIC04OCw2ICs4Nywx
MiBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9vbDo6YWxsb2NhdGVRdWVyeU9mZnNl
dChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIGlmIChjdXJyZW50T2Zmc2V0ID09IDApCiAg
ICAgewogICAgICAgICBtUmVzZXRGaXJzdFF1ZXJ5ID0gY2xlYXJPbGRWYWx1ZTsKKyAgICAgICAg
aWYgKCFjbGVhck9sZFZhbHVlICYmICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gSWYgb2xkIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IG5lZWRzIHRvIGJlIHJldGFpbmVkIGFu
ZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlcgorICAgICAgICAgICAgLy8gcmVhZC13cml0
ZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9mZnNldCB0byBzdG9yZSB0aGUgb2xkIHZhbHVlIG9m
IHRoZSBxdWVyeS4KKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRl
eHRNdGwsIHF1ZXJ5LCBmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMTIsMTAgKzExNywzNCBAQCB2b2lkIE9jY2x1c2lv
blF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJVdGlscyAmdXRpbHMgPSBj
b250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgUmVuZGVyVXRpbHMgJnV0
aWxzICAgICAgICAgICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsK
KyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0cjsKKyAgICAvLyBD
b21iaW5lIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvZmZzZXRzIGFsbG9jYXRlZCBmb3IgZmly
c3QgcXVlcnkKKyAgICBpZiAobUFsbG9jYXRlZFF1ZXJpZXNbMF0pCisgICAgeworICAgICAgICBj
b25zdCBCdWZmZXJSZWYgJmRzdEJ1ZiA9IG1BbGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRWaXNpYmls
aXR5UmVzdWx0QnVmZmVyKCk7CisgICAgICAgIGNvbnN0IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRz
TXRsICZhbGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgIG1BbGxvY2F0ZWRRdWVyaWVzWzBd
LT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworICAgICAgICBpZiAoIW1SZXNldEZp
cnN0UXVlcnkgJiYKKyAgICAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gSWYgd2UgY2Fubm90IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzYW1lIGJ1ZmZlciBp
biBzaGFkZXIuIFdlIG5lZWQgdG8gY29weSB0aGUgb2xkCisgICAgICAgICAgICAvLyB2YWx1ZSBv
ZiBmaXJzdCBxdWVyeSB0byBmaXJzdCBvZmZzZXQgYWxsb2NhdGVkIGZvciBpdC4KKyAgICAgICAg
ICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7Cisg
ICAgICAgICAgICBibGl0RW5jb2Rlci0+Y29weUJ1ZmZlcihkc3RCdWYsIDAsIG1SZW5kZXJQYXNz
UmVzdWx0c1Bvb2wsIGFsbG9jYXRlZE9mZnNldHMuZnJvbnQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUpOworICAgICAgICAg
ICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9j
YXRlZE9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29u
dGV4dE10bCwgIW1SZXNldEZpcnN0UXVlcnksIGFsbG9jYXRlZE9mZnNldHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBk
c3RCdWYpOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gQ29tYmluZSB0aGUgdmFsdWVzIHN0
b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBx
dWVyaWVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQWxsb2NhdGVkUXVlcmllcy5zaXpl
KCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNp
emUoKTsgKytpKQogICAgIHsKICAgICAgICAgUXVlcnlNdGwgKnF1ZXJ5ID0gbUFsbG9jYXRlZFF1
ZXJpZXNbaV07CiAgICAgICAgIGlmICghcXVlcnkpCkBAIC0xMjYsMTIgKzE1NSwxMiBAQCB2b2lk
IE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpCiAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVmID0gbUFsbG9jYXRl
ZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1bHRCdWZmZXIoKTsKICAgICAgICAgY29uc3Qg
VmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQogICAgICAgICAg
ICAgbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRzKCk7
Ci0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBr
ZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFtUmVzZXRGaXJzdFF1ZXJ5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB1dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3Vs
dChjb250ZXh0TXRsLCBmYWxzZSwgYWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRz
UG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QnVmKTsKICAg
ICB9CiAKICAgICAvLyBSZXF1ZXN0IHN5bmNocm9uaXphdGlvbiBhbmQgY2xlYW51cAotICAgIEJs
aXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0Q29tbWFu
ZEVuY29kZXIoKTsKKyAgICBibGl0RW5jb2RlciA9IGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5k
RW5jb2RlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBRdWVyeU10bCAqcXVlcnkgPSBtQWxsb2NhdGVk
UXVlcmllc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCmlu
ZGV4IDZiOTY3ZGU4ZmQ0OTBhNDgxMzU4ODMyYTc2ZjIwNjU0ZGIwZTkxMTkuLmQwYTQ4MzcxOGZl
MDU0NGRiNTdkZmU5ZWVlZWIzYzdiNDhlNGJhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMuaApAQCAtNiw2ICs2LDggQEAKIC8vIG10bF9yZW5kZXJfdXRpbHMu
aDoKIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdo
aWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRlcnMKIC8vICAgIGZv
ciBjb252ZXJ0aW5nLCBibGl0dGluZywgY29weWluZyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgZGF0
YSwgYW5kIG1hbnkgbW9yZS4KKy8vIE5PVEUoaHFsZSk6IENvbnNpZGVyIHNwbGl0dGluZyB0aGlz
IGNsYXNzIGludG8gbXVsdGlwbGUgY2xhc3NlcyBlYWNoIGRvaW5nIGRpZmZlcmVudCB1dGlsaXRp
ZXMuCisvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KIC8vCiAKICNpZm5kZWYgTElC
QU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXwpAQCAtODksNiArOTEsOCBA
QCBzdHJ1Y3QgQ29sb3JCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMKIHN0cnVjdCBEZXB0
aFN0ZW5jaWxCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMKIHsKICAgICBUZXh0dXJlUmVm
IHNyY1N0ZW5jaWw7CisgICAgdWludDMyX3Qgc3JjU3RlbmNpbExldmVsID0gMDsKKyAgICB1aW50
MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOwogfTsKIAogLy8gU3RlbmNpbCBibGl0IHZpYSBhbiBp
bnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4dHVyZSBwYXJhbWV0ZXIg
aXMgaWdub3JlZC4KQEAgLTMwOSwyMSArMzEzLDE3IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRp
bHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgcHVibGljOgogICAgIHZvaWQgb25EZXN0
cm95KCk7CiAKLSAgICAvLyBDb252ZXJ0IGluZGV4IGJ1ZmZlci4KICAgICBhbmdsZTo6UmVzdWx0
IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4Q29udmVyc2lvblBhcmFt
cyAmcGFyYW1zKTsKLSAgICAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4gaW5kZXggYnVmZmVyIGZv
ciBnbERyYXdBcnJheXMoKS4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVy
RnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxvb3BGcm9tQXJy
YXlQYXJhbXMgJnBhcmFtcyk7CiAgICAgLy8gR2VuZXJhdGUgdHJpYW5nbGUgZmFuIGluZGV4IGJ1
ZmZlciBmb3IgZ2xEcmF3RWxlbWVudHMoKS4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJp
RmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpOwogCi0gICAgLy8gR2VuZXJh
dGUgbGluZSBsb29wIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzKCkuCiAgICAgYW5nbGU6
OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJheVBhcmFtcyAmcGFyYW1zKTsKLSAgICAv
LyBHZW5lcmF0ZSBsaW5lIGxvb3AncyBsYXN0IHNlZ21lbnQgaW5kZXggYnVmZmVyIGZvciBnbERy
YXdBcnJheXMoKS4KLSAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiBwcmltaXRpdmUgcmVzdGFydCBp
cyBub3QgZW5hYmxlZC4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BMYXN0U2Vn
bWVudChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpcnN0VmVydGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RWZXJ0ZXgsCkBAIC0z
NDAsNiArMzQwLDE4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVu
dEZyb21FbGVtZW50c0FycmF5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CiAKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVy
YXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRl
ZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVzQnVm
ZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVy
YXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCk7CisKICAgcHJpdmF0ZToKICAgICAvLyBJbmRleCBnZW5lcmF0b3IgY29tcHV0
ZSBwaXBlbGluZXM6CiAgICAgLy8gIC0gRmlyc3QgZGltZW5zaW9uOiBpbmRleCB0eXBlLgpAQCAt
MzQ4LDcgKzM2MCw2IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1dG9PYmpDUHRyPGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAogICAgICAgICAgICAgICAgICAgIGFuZ2xl
OjpFbnVtU2l6ZTxnbDo6RHJhd0VsZW1lbnRzVHlwZT4oKT47CiAKLSAgICAvLyBHZXQgY29tcHV0
ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4KICAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IGdldEluZGV4Q29udmVyc2lvblBpcGVs
aW5lKAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICBnbDo6RHJhd0Vs
ZW1lbnRzVHlwZSBzcmNUeXBlLApAQCAtMzc1LDcgKzM4Niw4IEBAIGNsYXNzIEluZGV4R2VuZXJh
dG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgLy8gTXVzdCBiZSBt
dWx0aXBsZXMgb2Yga0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50CiAgICAgICAgIHVpbnQzMl90
IGRzdE9mZnNldCk7CiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5Q1BVKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZw
YXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKTsKIAogICAgIGFuZ2xlOjpSZXN1
bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0FycmF5R1BVKAogICAgICAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsLApAQCAtMzkzLDYgKzQwNSwxMSBAQCBjbGFzcyBJbmRleEdl
bmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCiAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFy
YW1zKTsKIAorICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKwogICAgIEluZGV4
Q29udmVyc2lvblBpcGVsaW5lQXJyYXkgbUluZGV4Q29udmVyc2lvblBpcGVsaW5lQ2FjaGVzOwog
CiAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtVHJpRmFuRnJvbUVsZW1BcnJheUdl
bmVyYXRvclBpcGVsaW5lQ2FjaGVzOwpAQCAtNDI5LDcgKzQ0Niw3IEBAIGNsYXNzIE1pcG1hcFV0
aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgIHB1YmxpYzoKICAgICB2b2lkIG9uRGVz
dHJveSgpOwogCi0gICAgLy8gQ29tcHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gT25seSBw
b3NzaWJsZSBmb3IgM0QgdGV4dHVyZSBmb3Igbm93LgorICAgIC8vIENvbXB1dGUgYmFzZWQgbWlw
bWFwIGdlbmVyYXRpb24uCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZU1pcG1hcENTKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRleHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKQEAgLTQzNyw5ICs0NTQsMTUgQEAgY2xhc3MgTWlwbWFw
VXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKIAogICBwcml2YXRlOgogICAgIHZvaWQg
ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVk
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRBcnJheU1pcEdlbmVy
YXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgICAgdm9p
ZCBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKIAogICAgIC8vIE1pcG1hcHMgZ2VuZXJhdGluZyBjb21wdXRlIHBpcGVsaW5l
OgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gbTNETWlwR2Vu
ZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3Rh
dGU+PiBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21w
dXRlUGlwZWxpbmVTdGF0ZT4+IG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0
b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtQ3ViZU1pcEdlbmVyYXRvclBp
cGVsaW5lOwogfTsKIAogLy8gVXRpbCBjbGFzcyBmb3IgaGFuZGxpbmcgcGl4ZWxzIGNvcHkgYmV0
d2VlbiBidWZmZXJzIGFuZCB0ZXh0dXJlcwpAQCAtNTQzLDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0
ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBS
ZW5kZXJQaXBlbGluZUNhY2hlIG1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZTsK
IH07CiAKKy8vIFV0aWwgY2xhc3MgZm9yIGhhbmRsaW5nIHRyYW5zZm9ybSBmZWVkYmFjaworICAg
IGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMKK3sKKyAgcHVibGljOgorICAgIHZvaWQgb25E
ZXN0cm95KCk7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IGdl
dFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisgICAgICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCisgICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAg
ICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsKKworICBwcml2YXRl
OgorICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVNc2xYZmJMaWJyYXJ5KENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRNc2wpOworfTsK
KwogLy8gUmVuZGVyVXRpbHM6IGNvbnRhaW5lciBjbGFzcyBvZiB2YXJpb3VzIHV0aWwgY2xhc3Nl
cyBhYm92ZQogY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNv
cHlhYmxlCiB7CkBAIC01ODcsNyArNjI1LDggQEAgY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMg
Q29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmlGYW5PckxpbmVM
b29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVU
cmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAKICAgICBhbmdsZTo6
UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwpAQCAtNjM5
LDYgKzY3OCwxOSBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZz
cmNBbmdsZUZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXRDb252ZXJ0UGFyYW1zICZwYXJhbXMpOworICAgIGFu
Z2xlOjpSZXN1bHQgY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGlu
ZURlc2MpOworCisgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2lu
dHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworICAgIGFuZ2xlOjpSZXN1bHQg
Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJh
dGVkKTsKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xl
c0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAKICAgcHJpdmF0ZToK
ICAgICAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKQEAgLTY0Niw3ICs2OTgsNyBAQCBjbGFzcyBS
ZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5l
KSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJv
ciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92ZXJy
aWRlOwpAQCAtNjYyLDYgKzcxNCw3IEBAIGNsYXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRl
eHQsIGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIE1pcG1hcFV0aWxzIG1NaXBtYXBVdGlsczsKICAg
ICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXplPFBpeGVsVHlwZT4o
KT4gbUNvcHlQaXhlbHNVdGlsczsKICAgICBWZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgbVZl
cnRleEZvcm1hdFV0aWxzOworICAgIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMgbVRyYW5zZm9ybUZl
ZWRiYWNrVXRpbHM7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgbXRsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRl
cl91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCmluZGV4IGQyMjQ4MDE0MjczYzM3ZDRkNGIyYmVl
NzBjZmRhYjExOTVjMThiYTYuLjMyYjMzY2FiOGZiZTkxMWJiMjZhODAyM2Y5ZmViMzFjNTdjOTE2
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCkBAIC0x
NSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRs
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3V0aWxzLmgiCkBAIC01NCwxMCArNTUsMTIgQEAgc3RydWN0IEJsaXRQYXJhbXNVbmlmb3JtCiAg
ICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOwogICAgIGludCBzcmNMZXZlbCAgICAgICAgID0g
MDsKICAgICBpbnQgc3JjTGF5ZXIgICAgICAgICA9IDA7CisgICAgaW50IHNyY0xldmVsMiAgICAg
ICAgPSAwOworICAgIGludCBzcmNMYXllcjIgICAgICAgID0gMDsKICAgICB1aW50OF90IGRzdEZs
aXBYICAgICA9IDA7CiAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAwOwogICAgIHVpbnQ4X3Qg
ZHN0THVtaW5hbmNlID0gMDsgIC8vIGRlc3QgdGV4dHVyZSBpcyBsdW1pbmFjZQotICAgIHVpbnQ4
X3QgcGFkZGluZ1sxM107CisgICAgdWludDhfdCBwYWRkaW5nWzldOwogfTsKIAogc3RydWN0IEJs
aXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCkBAIC05MCw3ICs5Myw3IEBAIHN0cnVjdCBJ
bmRleENvbnZlcnNpb25Vbmlmb3JtCiAgICAgdWludDhfdCBwYWRkaW5nWzddOwogfTsKIAotLy8g
U2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAorLy8g
U2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRhbAogc3RydWN0IENv
bWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQogewogICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0
OwpAQCAtOTksMTIgKzEwMiwxMSBAQCBzdHJ1Y3QgQ29tYmluZVZpc2liaWxpdHlSZXN1bHRVbmlm
b3JtCiB9OwogCiAvLyBTZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlw
bWFwLm1ldGFsCi1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBVbmlmb3JtCitzdHJ1Y3QgR2VuZXJhdGUz
RE1pcG1hcFVuaWZvcm0KIHsKICAgICB1aW50MzJfdCBzcmNMZXZlbDsKICAgICB1aW50MzJfdCBu
dW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICB1aW50OF90IHNSR0I7Ci0gICAgdWludDhfdCBwYWRk
aW5nWzddOworICAgIHVpbnQzMl90IHBhZGRpbmdbMl07CiB9OwogCiAvLyBTZWUgbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbApAQCAtMTU2LDE5ICsxNTgs
MzYgQEAgc3RydWN0IENvcHlWZXJ0ZXhVbmlmb3JtcwogLy8gZXhpdGluZyBibG9jay4KIHN0cnVj
dCBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkKIHsKLSAgICBTY29wZWREaXNhYmxlT2NjbHVz
aW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10bCwgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0
KQotICAgICAgICA6IG1Db250ZXh0TXRsKGNvbnRleHRNdGwpLCBtUmVzdWx0T3V0KHJlc3VsdE91
dCkKKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlOjpSZXN1bHQg
KnJlc3VsdE91dCkKKyAgICAgICAgOiBtQ29udGV4dE10bChjb250ZXh0TXRsKSwgbUVuY29kZXIo
ZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2NsdXNpb25RdWVyeSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBlbmNvZGVyLT5wdXNoRGVidWdHcm91cChAIkRpc2FibGVkIE9jY2x1
c2lvblF1ZXJ5Iik7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAvLyB0ZW1wb3JhcmlseSBk
aXNhYmxlIG9jY2x1c2lvbiBxdWVyeQogICAgICAgICBjb250ZXh0TXRsLT5kaXNhYmxlQWN0aXZl
T2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKICAgICB9CiAgICAgflNjb3BlZERpc2FibGVP
Y2NsdXNpb25RdWVyeSgpCiAgICAgewogICAgICAgICAqbVJlc3VsdE91dCA9IG1Db250ZXh0TXRs
LT5yZXN0YXJ0QWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIGlmIChtQ29udGV4dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUVuY29kZXItPnBvcERlYnVnR3JvdXAoKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKG1FbmNvZGVyKTsKKyNl
bmRpZgogICAgIH0KIAogICBwcml2YXRlOgogICAgIENvbnRleHRNdGwgKm1Db250ZXh0TXRsOwor
ICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICptRW5jb2RlcjsKIAogICAgIGFuZ2xlOjpSZXN1bHQg
Km1SZXN1bHRPdXQ7CiB9OwpAQCAtMjE5LDY2ICsyMzgsNDMgQEAgYW5nbGU6OlJlc3VsdCBHZW5U
cmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCkKIHsKICAg
ICBBU1NFUlQoY291bnQgPiAyKTsKLQotICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudDsKLSAg
ICBBTkdMRV9UUlkobXRsOjpHZXRUcmlhbmdsZUZhbkluZGljZXNDb3VudChjb250ZXh0TXRsLCBj
b3VudCwgJmdlbkluZGljZXNDb3VudCkpOwotCi0gICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2
ZVJlc3RhcnRJbmRleCAgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOwotICAgIGNv
bnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KKyAgICBjb25zdGV4cHIgVCBrU3JjUHJpbWl0aXZlUmVz
dGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAgR0xzaXplaSBk
c3RUcmlhbmdsZSAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAgdWludDMyX3QgKmRzdFB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkg
KyBkc3RPZmZzZXQpOwotICAgIFQgdHJpRmlyc3RJZHggICAgPSAwOyAgLy8gVmVydGV4IGluZGV4
IG9mIHRyaWFubGdlJ3MgMXN0IHZlcnRleAotICAgIFQgc3JjUHJldklkeCAgICAgPSAwOyAgLy8g
VmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMm5kIHZlcnRleAorICAgIFQgdHJpRmlyc3RJZHgs
IHNyY1ByZXZJZHg7CiAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcywgc2l6ZW9mKHRy
aUZpcnN0SWR4KSk7CisgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9m
KHNyY1ByZXZJZHgpKTsKIAogICAgIGlmIChwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCkKICAgICB7
Ci0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBMb2NhdGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xl
J3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZlci4KICAgICAgICAgR0xzaXplaSB0cmlGaXJz
dElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlICh0cmlGaXJzdElkeCA9PSBrU3JjUHJpbWl0aXZl
UmVzdGFydEluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoJmRzdFB0clt0cmlG
aXJzdElkeExvYysrXSwgJmtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgpKTsKKyAgICAgICAgICAgICsr
dHJpRmlyc3RJZHhMb2M7CiAgICAgICAgICAgICBtZW1jcHkoJnRyaUZpcnN0SWR4LCBpbmRpY2Vz
ICsgdHJpRmlyc3RJZHhMb2MsIHNpemVvZih0cmlGaXJzdElkeCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKHRyaUZpcnN0SWR4TG9jICsgMiA+PSBjb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gTm90IGVub3VnaCBpbmRpY2VzLgotICAgICAgICAgICAgZm9yIChHTHNpemVpIGkg
PSB0cmlGaXJzdElkeExvYzsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbWVtY3B5KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LCBz
aXplb2Yoa0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNvdW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtZW1jcHkoJnNyY1ByZXZJZHgsIGluZGljZXMgKyB0cmlGaXJzdElk
eExvYyArIDEsIHNpemVvZihzcmNQcmV2SWR4KSk7Ci0gICAgICAgIH0KLQogICAgICAgICBmb3Ig
KEdMc2l6ZWkgaSA9IHRyaUZpcnN0SWR4TG9jICsgMjsgaSA8IGNvdW50OyArK2kpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHVpbnQzMl90IHRyaUluZGljZXNbM107Ci0KICAgICAgICAgICAgIFQg
c3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJZHgsIGluZGljZXMgKyBpLCBzaXplb2Yo
c3JjSWR4KSk7CisgICAgICAgICAgICBib29sIGNvbXBsZXRlVHJpYW5nbGUgPSB0cnVlOwogICAg
ICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBz
cmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLgotICAgICAgICAgICAgICAgIHRyaUlu
ZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0
cmlJbmRpY2VzWzFdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1syXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OwotICAgICAgICAg
ICAgICAgIHRyaUZpcnN0SWR4ICAgID0gc3JjSWR4OwotICAgICAgICAgICAgICAgIHRyaUZpcnN0
SWR4TG9jID0gaTsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLiBNb3Zl
IHRvIG5leHQgdHJpYW5nbGUgYW5kIHNldCB0cmlGaXJzdEluZGV4CisgICAgICAgICAgICAgICAg
dHJpRmlyc3RJZHggICAgICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICB0cmlGaXJzdElkeExv
YyAgID0gaTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xlID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChpIDwgdHJpRmlyc3RJZHhMb2MgKyAyKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUKLSAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsK
LSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRl
eDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJ
bmRleDsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLCBtb3ZlIHRvIG5l
eHQgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xlID0gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yODYsMTUg
KzI4MiwxNiBAQCBhbmdsZTo6UmVzdWx0IEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cyhDb250
ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBzcmNQ
cmV2SWR4OwogICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJZHg7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY29tcGxldGVUcmlhbmdsZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIGRzdFRyaWFuZ2xlLCB0cmlJbmRp
Y2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNQcmV2SWR4ID0gc3JjSWR4OwotCi0gICAg
ICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGljZXMsIHNpemVvZih0
cmlJbmRpY2VzKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAg
bWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKLQog
ICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDI7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBUIHNyY0lkeDsKQEAgLTMwNiwxMSArMzAzLDY1IEBAIGFuZ2xlOjpSZXN1bHQg
R2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAg
ICAgICAgICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OwogICAgICAgICAgICAgc3JjUHJldklkeCAg
ICA9IHNyY0lkeDsKIAotICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0
cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAgbWVtY3B5KGRzdFB0
ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJpSW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKyAg
ICAgICAgICAgICsrZHN0VHJpYW5nbGU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZHN0QnVmZmVy
LT51bm1hcEFuZEZsdXNoU3Vic2V0KGNvbnRleHRNdGwsIGRzdE9mZnNldCwgZ2VuSW5kaWNlc0Nv
dW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYgKGluZGljZXNHZW5lcmF0ZWQpCisgICAg
ICAgICppbmRpY2VzR2VuZXJhdGVkID0gZHN0VHJpYW5nbGUgKiAzOworICAgIGRzdEJ1ZmZlci0+
dW5tYXAoY29udGV4dE10bCk7CisKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
Cit9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYW5nbGU6OlJlc3VsdCBHZW5QcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRpdmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk
c3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0
YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKyAgICB1aW50MzJfdCAq
ZHN0UHRyICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAo
Y29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworICAgIEdMc2l6ZWkgcmVhZFZhbHVlTG9jID0gMDsK
KyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisgICAgdWludDMyX3QgZHN0SWR4ICAgICAg
PSAwOworICAgIG1lbWNweSgmcmVhZFZhbHVlLCBpbmRpY2VzLCBzaXplb2YocmVhZFZhbHVlKSk7
CisgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQorICAg
IHsKKworICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKyAgICAgICAgbWVtY3B5KCZyZWFkVmFsdWUs
IGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFsdWUpKTsKKyAgICB9CisgICAg
d2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0gY291bnQpCisgICAg
eworCisgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKyAgICAgICAgYm9vbCBmb3Vu
ZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaW5kaWNlc1Bl
clByaW1pdGl2ZTsgKytrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoJnJlYWRWYWx1
ZSwgaW5kaWNlcyArIHJlYWRWYWx1ZUxvYywgc2l6ZW9mKHJlYWRWYWx1ZSkpOworICAgICAgICAg
ICAgKytyZWFkVmFsdWVMb2M7CisgICAgICAgICAgICBpZiAocmVhZFZhbHVlID09IGtTcmNQcmlt
aXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmRQ
cmltaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmltSW5k
aWNpZXNba10gPSAodWludDMyX3QpcmVhZFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChmb3VuZFByaW1pdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVt
Y3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUluZGljaWVzLCAoaW5kaWNlc1BlclByaW1pdGl2ZSkg
KiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIGRzdElkeCArPSBpbmRpY2VzUGVyUHJp
bWl0aXZlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbmRpY2VzR2VuZXJhdGVkKQorICAg
ICAgICAqaW5kaWNlc0dlbmVyYXRlZCA9IGRzdElkeDsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9CiAKQEAgLTMyOCwxNCArMzc5LDExIEBAIGFuZ2xlOjpSZXN1bHQgR2Vu
TGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICBj
b25zdCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwogCiAgICAgdWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZz
ZXQpOwotICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1cnJlbnQgbGluZSBs
b29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KLSAgICAvLyBlbmNvdW50
ZXIgYSBwcmltaXRpdmUgcmVzdGFydCBpbmRleC4KICAgICBUIGxpbmVMb29wRmlyc3RJZHg7CiAg
ICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2YobGluZUxvb3BGaXJz
dElkeCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKQogICAgIHsKLSAgICAg
ICAgLy8gbGluZUxvb3BGaXJzdElkeExvYzogbG9jYXRpb24gb2YgY3VycmVudCBsaW5lIGxvb3An
cyBmaXJzdCB2ZXJ0ZXggaW4gdGhlIHNvdXJjZSBidWZmZXIuCiAgICAgICAgIEdMc2l6ZWkgbGlu
ZUxvb3BGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlIChsaW5lTG9vcEZpcnN0SWR4ID09
IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCiAgICAgICAgIHsKQEAgLTM0NCwxNSArMzkyLDEy
IEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10
bCAqY29udGV4dE10bCwKICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BGaXJzdElkeCwgaW5k
aWNlcyArIGxpbmVMb29wRmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CiAg
ICAgICAgIH0KIAotICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0
dGVuIHRvIGRlc3QgYnVmZmVyCiAgICAgICAgIHVpbnQzMl90IGRzdElkeCA9IGxpbmVMb29wRmly
c3RJZHg7CiAgICAgICAgIG1lbWNweSgmZHN0UHRyW2xpbmVMb29wRmlyc3RJZHhMb2NdLCAmZHN0
SWR4LCBzaXplb2YoZHN0SWR4KSk7Ci0gICAgICAgIC8vIGRzdFdyaXR0ZW46IG51bWJlciBvZiBp
bmRpY2VzIHdyaXR0ZW4gdG8gZGVzdCBidWZmZXIKICAgICAgICAgdWludDMyX3QgZHN0V3JpdHRl
biA9IGxpbmVMb29wRmlyc3RJZHhMb2MgKyAxOwogCiAgICAgICAgIGZvciAoR0xzaXplaSBpID0g
bGluZUxvb3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBzcmNJZHggOiB2YWx1ZSBvZiBpbmRleCBmcm9tIHNvdXJjZSBidWZmZXIKICAg
ICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJZHgsIGluZGljZXMg
KyBpLCBzaXplb2Yoc3JjSWR4KSk7CiAgICAgICAgICAgICBpZiAoc3JjSWR4ID09IGtTcmNQcmlt
aXRpdmVSZXN0YXJ0SW5kZXgpCkBAIC00MDAsNyArNDQ1LDcgQEAgYW5nbGU6OlJlc3VsdCBHZW5M
aW5lTG9vcEZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogCiAgICAg
ICAgICppbmRpY2VzR2VuZXJhdGVkID0gY291bnQgKyAxOwogICAgIH0KLSAgICBkc3RCdWZmZXIt
PnVubWFwQW5kRmx1c2hTdWJzZXQoY29udGV4dE10bCwgZHN0T2Zmc2V0LCAoKmluZGljZXNHZW5l
cmF0ZWQpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgZHN0QnVmZmVyLT51bm1hcChjb250ZXh0
TXRsKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTQ3Miw3
ICs1MTcsNyBAQCB2b2lkIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKERpc3BsYXlN
dGwgKmRpc3BsYXksCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7CiAgICAgICAgIGlk
PE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwotICAg
ICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRl
cnNMaWIoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICAgICAgICA9IGRpc3BsYXktPmdl
dERlZmF1bHRTaGFkZXJzTGliKCk7CiAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICAg
PSBuaWw7CiAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgICAgPSBbc2hhZGVyTGliIG5l
d0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rpb25OYW1lXTsKIApAQCAtNTEyLDcgKzU1Nyw3IEBAIHZv
aWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSA9IGRpc3BsYXktPmdldE1ldGFsRGV2aWNlKCk7Ci0gICAgICAgIGlkPE1UTExpYnJhcnk+IHNo
YWRlckxpYiAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAgICAgICBhdXRv
IHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsK
ICAgICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKIAogICAgICAgICBpZDxN
VExGdW5jdGlvbj4gc2hhZGVyID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldpdGhOYW1lOmZ1bmN0
aW9uTmFtZQpAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRl
UGlwZWxpbmVJbml0aWFsaXplZCgKIEFOR0xFX0lOTElORQogdm9pZCBFbnN1cmVWZXJ0ZXhTaGFk
ZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZl
cnRleEZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAq
cGlwZWxpbmVDYWNoZU91dCkKIHsKICAgICBSZW5kZXJQaXBlbGluZUNhY2hlICZwaXBlbGluZUNh
Y2hlID0gKnBpcGVsaW5lQ2FjaGVPdXQ7CkBAIC01NDksOSArNTk1LDcgQEAgdm9pZCBFbnN1cmVW
ZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRleHQgKmNvbnRleHQs
CiAKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKLSAgICAgICAgRGlzcGxheU10bCAq
ZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOwotICAgICAgICBpZDxNVExMaWJy
YXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwotICAgICAg
ICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5h
bWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9
IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWVdOwogCiAg
ICAgICAgIEFTU0VSVChbc2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOwogCkBAIC01NzAs
NyArNjE0LDkgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRleFNoYWRlck9ubHlQaXBlbGlu
ZUNhY2hlSW5pdGlhbGl6ZWQoCiAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQogICAgIHsKICAgICAg
ICAgLy8gTm9uIHNwZWNpYWxpemVkIGNvbnN0YW50cyBwcm92aWRlZCwgdXNlIGRlZmF1bHQgY3Jl
YXRpb24gZnVuY3Rpb24uCi0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNh
Y2hlSW5pdGlhbGl6ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAorICAgICAgICBEaXNw
bGF5TXRsICpkaXNwbGF5ID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworICAgICAgICBhdXRvIHNo
YWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgICAg
RW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2
ZXJ0ZXhGdW5jdGlvbk5hbWUsIHNoYWRlckxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUNhY2hlT3V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTU4NCw5ICs2MzAsOSBAQCB2b2lkIEVuc3VyZVNwZWNpYWxpemVk
VmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZCgKIAogICAgIEFOR0xFX01U
TF9PQkpDX1NDT1BFCiAgICAgewotICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ICAgICAgPSBj
b250ZXh0LT5nZXREaXNwbGF5KCk7Ci0gICAgICAgIGlkPE1UTExpYnJhcnk+IHNoYWRlckxpYiA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7Ci0gICAgICAgIE5TRXJyb3IgKmVyciAg
ICAgICAgICAgICA9IG5pbDsKKyAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSA9IGNvbnRleHQt
PmdldERpc3BsYXkoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9IGRpc3BsYXktPmdl
dERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgPSBuaWw7
CiAKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rp
b25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudFZhbHVlczpmdW5jQ29uc3RhbnRzCkBAIC02
MDksMTIgKzY1NSwyOCBAQCBSZW5kZXJQaXBlbGluZURlc2MgR2V0Q29tcHV0aW5nVmVydGV4U2hh
ZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRQogICAgIGNvbnN0IFJlbmRl
clBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNtZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7
CiAKICAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygm
cGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOwotICAgIHBpcGVsaW5lRGVzYy5yYXN0ZXJp
emF0aW9uVHlwZSAgICAgID0gUmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsK
KyAgICBwaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgICA9IFJlbmRlclBpcGVsaW5lUmFz
dGVyaXphdGlvbjo6RGlzYWJsZWQ7CiAgICAgcGlwZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9w
b2xvZ3kgPSBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1BvaW50OwogCiAgICAgcmV0dXJuIHBpcGVs
aW5lRGVzYzsKIH0KIAorLy8gR2V0IHBpcGVsaW5lIGRlc2NyaXB0b3IgZm9yIHJlbmRlciBwaXBl
bGluZSB0aGF0IGNvbnRhaW5zIHZlcnRleCBzaGFkZXIgYWN0aW5nIGFzIHRyYW5zZm9ybQorLy8g
ZmVlZGJhY2suCitBTkdMRV9JTkxJTkUKK1JlbmRlclBpcGVsaW5lRGVzYyBHZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKQoreworICAgIFJlbmRl
clBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgICA9IFJlbmRlclBpcGVsaW5lRGVzYyhwaXBl
bGluZURlc2MpOworICAgIGNvbnN0IFJlbmRlclBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNt
ZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7CisKKyAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygmcGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3Ip
OworICAgIHhmYlBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgID0gUmVuZGVyUGlwZWxp
bmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICB4ZmJQaXBlbGluZURlc2MuaW5wdXRQcmlt
aXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7CisKKyAgICByZXR1
cm4geGZiUGlwZWxpbmVEZXNjOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQgQ2xl
YXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNoZUFycmF5KQogewpAQCAt
NzEyLDggKzc3NCwxNCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVy
Q29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgdW5pZm9ybVBhcmFtcy5zcmNMYXllciA9
IHBhcmFtcy5zcmNMYXllcjsKICAgICBpZiAoaXNDb2xvckJsaXQpCiAgICAgewotICAgICAgICBj
b25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29s
b3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOwotICAgICAgICB1bmlmb3JtUGFyYW1zLmRzdEx1bWlu
YW5jZSAgICAgICAgID0gY29sb3JQYXJhbXMtPmRzdEx1bWluYW5jZSA/IDEgOiAwOworICAgICAg
ICBjb25zdCBhdXRvIGNvbG9yUGFyYW1zICAgICA9IHN0YXRpY19jYXN0PGNvbnN0IENvbG9yQmxp
dFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5pZm9ybVBhcmFtcy5kc3RMdW1pbmFuY2Ug
PSBjb2xvclBhcmFtcy0+ZHN0THVtaW5hbmNlID8gMSA6IDA7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5pZm9ybVBhcmFt
cy5zcmNMZXZlbDIgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsOworICAgICAgICB1bmlmb3Jt
UGFyYW1zLnNyY0xheWVyMiA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsTGF5ZXI7CiAgICAgfQogCiAg
ICAgLy8gQ29tcHV0ZSBzb3VyY2UgdGV4Q29vcmRzCkBAIC03MjcsOCArNzk1LDggQEAgdm9pZCBT
ZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNv
ZGVyLAogICAgIHsKICAgICAgICAgY29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqZHNQYXJh
bXMgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFt
cyAqPigmcGFyYW1zKTsKLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwt
PndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7Ci0gICAgICAgIHNyY0hlaWdodCA9IGRzUGFyYW1z
LT5zcmNTdGVuY2lsLT5oZWlnaHQoZHNQYXJhbXMtPnNyY0xldmVsKTsKKyAgICAgICAgc3JjV2lk
dGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwtPndpZHRoKG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwo
ZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMtPnNy
Y1N0ZW5jaWxMZXZlbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNzM5LDggKzgwNyw4
IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdVbmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKICAgICBHZXRCbGl0VGV4Q29vcmRzKHNyY1dpZHRoLCBzcmNIZWlnaHQs
IHBhcmFtcy5zcmNSZWN0LCBwYXJhbXMuc3JjWUZsaXBwZWQsIHBhcmFtcy51bnBhY2tGbGlwWCwK
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUwLCAmdjAsICZ1MSwg
JnYxKTsKIAotICAgIGZsb2F0IGR1ID0gdTEgLSB1MDsKLSAgICBmbG9hdCBkdiA9IHYxIC0gdjA7
CisgICAgYXV0byBkdSA9IHUxIC0gdTA7CisgICAgYXV0byBkdiA9IHYxIC0gdjA7CiAKICAgICAv
LyBsb3dlciBsZWZ0CiAgICAgdW5pZm9ybVBhcmFtcy5zcmNUZXhDb29yZHNbMF1bMF0gPSB1MDsK
QEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUo
Q29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAogLy8gU3RlbmNpbEJsaXRWaWFCdWZmZXJQ
YXJhbXMgaW1wbGVtZW50YXRpb24KIFN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2ls
QmxpdFZpYUJ1ZmZlclBhcmFtcygpIHt9CiAKLVN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpT
dGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZz
cmNJbikKK1N0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBh
cmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZzcmNQYXJhbXMpCiB7Ci0gICAgZHN0
VGV4dHVyZVNpemUgPSBzcmNJbi5kc3RUZXh0dXJlU2l6ZTsKLSAgICBkc3RSZWN0ICAgICAgICA9
IHNyY0luLmRzdFJlY3Q7Ci0gICAgZHN0U2Npc3NvclJlY3QgPSBzcmNJbi5kc3RTY2lzc29yUmVj
dDsKLSAgICBkc3RGbGlwWSAgICAgICA9IHNyY0luLmRzdEZsaXBZOwotICAgIGRzdEZsaXBYICAg
ICAgID0gc3JjSW4uZHN0RmxpcFg7Ci0gICAgc3JjUmVjdCAgICAgICAgPSBzcmNJbi5zcmNSZWN0
OwotICAgIHNyY1lGbGlwcGVkICAgID0gc3JjSW4uc3JjWUZsaXBwZWQ7Ci0gICAgdW5wYWNrRmxp
cFggICAgPSBzcmNJbi51bnBhY2tGbGlwWDsKLSAgICB1bnBhY2tGbGlwWSAgICA9IHNyY0luLnVu
cGFja0ZsaXBZOworICAgIGRzdFRleHR1cmVTaXplID0gc3JjUGFyYW1zLmRzdFRleHR1cmVTaXpl
OworICAgIGRzdFJlY3QgICAgICAgID0gc3JjUGFyYW1zLmRzdFJlY3Q7CisgICAgZHN0U2Npc3Nv
clJlY3QgPSBzcmNQYXJhbXMuZHN0U2Npc3NvclJlY3Q7CisgICAgZHN0RmxpcFkgICAgICAgPSBz
cmNQYXJhbXMuZHN0RmxpcFk7CisgICAgZHN0RmxpcFggICAgICAgPSBzcmNQYXJhbXMuZHN0Rmxp
cFg7CisgICAgc3JjUmVjdCAgICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsKKyAgICBzcmNZRmxp
cHBlZCAgICA9IHNyY1BhcmFtcy5zcmNZRmxpcHBlZDsKKyAgICB1bnBhY2tGbGlwWCAgICA9IHNy
Y1BhcmFtcy51bnBhY2tGbGlwWDsKKyAgICB1bnBhY2tGbGlwWSAgICA9IHNyY1BhcmFtcy51bnBh
Y2tGbGlwWTsKIAotICAgIHNyY1N0ZW5jaWwgPSBzcmNJbi5zcmNTdGVuY2lsOworICAgIHNyY1N0
ZW5jaWwgICAgICA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworICAgIHNyY1N0ZW5jaWxMZXZlbCA9
IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGV2ZWw7CisgICAgc3JjU3RlbmNpbExheWVyID0gc3JjUGFy
YW1zLnNyY1N0ZW5jaWxMYXllcjsKIH0KIAogLy8gUmVuZGVyVXRpbHMgaW1wbGVtZW50YXRpb24K
QEAgLTkwMyw2ICs5NzMsNyBAQCB2b2lkIFJlbmRlclV0aWxzOjpvbkRlc3Ryb3koKQogICAgIH0K
IH0KIAorCiAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKIHZvaWQgUmVuZGVyVXRpbHM6OmhhbmRs
ZUVycm9yKEdMZW51bSBnbEVycm9yQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmZpbGUsCkBAIC0xMDE2LDkgKzEwODcsMTAgQEAgYW5nbGU6OlJlc3VsdCBS
ZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tQXJyYXlzKAogfQogYW5nbGU6OlJl
c3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheSgK
ICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zKQorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAor
ICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKQogewotICAgIHJldHVybiBtSW5kZXhVdGls
cy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KGNvbnRleHRNdGwsIHBhcmFt
cyk7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1l
bnRzQXJyYXkoY29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKIH0KIAogYW5n
bGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMo
CkBAIC0xMDUwLDYgKzExMjIsMjYgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoCiB7CiAgICAgcmV0dXJuIG1J
bmRleFV0aWxzLmdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudEZyb21FbGVtZW50c0FycmF5KGNv
bnRleHRNdGwsIHBhcmFtcyk7CiB9CithbmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0
ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
KmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5l
cmF0ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
ZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJh
dGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRM
aW5lc0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworfQorYW5n
bGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVz
QnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorewor
ICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNC
dWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CiAK
IHZvaWQgUmVuZGVyVXRpbHM6OmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KAogICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCkBAIC0xMTIxLDYgKzEyMTMsMjEgQEAgYW5nbGU6OlJlc3VsdCBSZW5k
ZXJVdGlsczo6ZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9uZW50c1ZTKGNvbnN0IGdsOjpDb250ZXh0
ICpjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMpOwogfQogCithbmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpjcmVh
dGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckNv
bW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVs
aW5lRGVzYykKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOworICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgdGhlIFBTTworICAgIGF1dG8gcHNvID0g
bVRyYW5zZm9ybUZlZWRiYWNrVXRpbHMuZ2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGlu
ZShjb250ZXh0TXRsLCByZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZURl
c2MpOworICAgIGlmIChwc28pCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworfQorCiAv
LyBDbGVhclV0aWxzIGltcGxlbWVudGF0aW9uCiBDbGVhclV0aWxzOjpDbGVhclV0aWxzKGNvbnN0
IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRlck5hbWUpCiAgICAgOiBtRnJhZ21lbnRTaGFkZXJO
YW1lKGZyYWdtZW50U2hhZGVyTmFtZSkKQEAgLTEyODcsMTEgKzEzOTQsMTEgQEAgYW5nbGU6OlJl
c3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogICAgIHsKICAgICAgICAgb3ZlcnJpZGVkUGFyYW1zLmNsZWFyQ29sb3IucmVzZXQoKTsKICAg
ICB9Ci0gICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSkKKyAg
ICBpZiAoIXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewog
ICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJEZXB0aC5yZXNldCgpOwogICAgIH0KLSAgICBp
ZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFy
ZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAg
ICBvdmVycmlkZWRQYXJhbXMuY2xlYXJTdGVuY2lsLnJlc2V0KCk7CiAgICAgfQpAQCAtMTMwNyw3
ICsxNDE0LDcgQEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OwogICAgIHsK
ICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeSwgb3RoZXJ3aXNlIGNs
ZWFyaW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcKLSAgICAgICAgU2NvcGVk
RGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAm
cmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2Ns
dXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0KTsKICAgICAgICAgLy8g
RHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAgY21kRW5jb2Rlci0+ZHJh
dyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0KQEAgLTE0ODEsNyArMTU4
OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29sb3JCbGl0VXRpbHM6OmJsaXRDb2xvcldpdGhEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OwogICAg
IHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeSwgb3RoZXJ3aXNl
IGJsaXR0aW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcKLSAgICAgICAgU2Nv
cGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRs
LCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVP
Y2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0KTsKICAgICAgICAg
Ly8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAgY21kRW5jb2Rlci0+
ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0KQEAgLTE3MDMsNyAr
MTgxMCw3IEBAIGFuZ2xlOjpSZXN1bHQgRGVwdGhTdGVuY2lsQmxpdFV0aWxzOjpibGl0RGVwdGhT
dGVuY2lsV2l0aERyYXcoY29uc3QgZ2w6OkNvbnRleHQKICAgICBhbmdsZTo6UmVzdWx0IHJlc3Vs
dDsKICAgICB7CiAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24gcXVlcnksIG90
aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50aW5nCi0gICAg
ICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29u
dGV4dE10bCwgJnJlc3VsdCk7CisgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBk
aXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CiAg
ICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCiAgICAgICAgIGNtZEVu
Y29kZXItPmRyYXcoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCAwLCAzKTsKICAgICB9CkBAIC0y
MDAyLDcgKzIxMDksOCBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cygKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRv
clV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAogICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMpCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgdWludDMy
X3QgKmluZGljZXNHZW5lcmF0ZWQpCiB7CiAgICAgY29uc3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0
ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJyYXkoKTsKICAgICBj
b25zdCBnbDo6QnVmZmVyICplbGVtZW50QnVmZmVyICAgID0gdmVydGV4QXJyYXktPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOwpAQCAtMjAxMywxMyArMjEyMSwxNCBAQCBhbmdsZTo6UmVzdWx0IElu
ZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXko
CiAgICAgICAgIEFOR0xFX0NIRUNLKGNvbnRleHRNdGwsIHNyY09mZnNldCA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAgICAgICJJbmRleCBv
ZmZzZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIGlmIChwYXJh
bXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQgfHwKLSAgICAgICAgICAgICghY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYm
CisgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5i
cmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKICAgICAgICAgICAgICBjb250ZXh0TXRs
LT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkKICAgICAgICAgewogICAgICAgICAgICAgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CiAgICAgICAgICAgICBj
cHVQYXRoUGFyYW1zLmluZGljZXMgPQogICAgICAgICAgICAgICAgIGVsZW1lbnRCdWZmZXJNdGwt
PmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnRleHRNdGwpICsgc3JjT2Zmc2V0OwotICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29u
dGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBjcHVQYXRoUGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7
CkBAIC0yMDMwLDcgKzIxMzksNyBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6
OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAgfQogICAgIGVsc2UK
ICAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZh
bkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dl
bmVyYXRlZCk7CiAgICAgfQogfQogCkBAIC0yMDc0LDIyICsyMTgzLDIzIEBAIGFuZ2xlOjpSZXN1
bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNB
cnJheUdQVSgKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAogICAgIENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpCisgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgdWludDMyX3QgKmdlbkluZGljZXMp
CiB7CiAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKICAgICB7CiAgICAgICAgIGNhc2UgZ2w6
OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKICAgICAgICAgICAgIHJldHVybiBHZW5U
cmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCiAgICAgICAgICAgICAgICAgY29udGV4dE10bCwgcGFy
YW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFy
YW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIs
IHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBjYXNlIGdsOjpEcmF3RWxl
bWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgogICAgICAgICAgICAgcmV0dXJuIEdlblRyaUZhbkZy
b21DbGllbnRFbGVtZW50cygKICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBwYXJhbXMuaW5k
ZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRz
dEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDE2X3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJh
bXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKICAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6VW5zaWduZWRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVu
dEVsZW1lbnRzKAogICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50
LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVy
LCBwYXJhbXMuZHN0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1
aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RP
ZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKICAgICB9CkBAIC0yMzAxLDYgKzI0MTEsNTYgQEAgYW5nbGU6OlJlc3VsdCBJbmRl
eEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnRGcm9tRWxlbWVudHNB
cnJheUMKICAgICByZXR1cm4gZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50KGNvbnRleHRNdGws
IGZpcnN0LCBsYXN0LCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKIH0KIAor
YW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3Rh
cnRCdWZmZXIoCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICB1bnNpZ25lZCBudW1W
ZXJ0aWNlc1BlclByaW1pdGl2ZSwKKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgc3dpdGNoIChwYXJh
bXMuc3JjVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVu
c2lnbmVkQnl0ZToKKyAgICAgICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QgKj4ocGFyYW1zLmluZGljZXMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNl
dCwgaW5kaWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6
OlVuc2lnbmVkU2hvcnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1
ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRp
dmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0
T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFy
dEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmlt
aXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMu
ZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3Rv
cDsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6
ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJl
c3RhcnRCdWZmZXIoY29udGV4dE10bCwgMywgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30K
KworYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJl
c3RhcnRMaW5lc0J1ZmZlcigKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0
IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHNpemVfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRl
eHRNdGwsIDIsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQg
SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVy
KAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9u
UGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJl
dHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10bCwgMSwgcGFyYW1z
LCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KKwogLy8gVmlzaWJpbGl0eVJlc3VsdFV0aWxzIGltcGxl
bWVudGF0aW9uCiB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGlsczo6b25EZXN0cm95KCkKIHsKQEAg
LTIzNzUsNyArMjUzNSwxMCBAQCB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGlsczo6Y29tYmluZVZp
c2liaWxpdHlSZXN1bHQoCiAvLyBNaXBtYXBVdGlscyBpbXBsZW1lbnRhdGlvbgogdm9pZCBNaXBt
YXBVdGlsczo6b25EZXN0cm95KCkKIHsKLSAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSA9IG5p
bDsKKyAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOworICAgIG0yRE1pcEdl
bmVyYXRvclBpcGVsaW5lICAgICAgPSBuaWw7CisgICAgbTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBl
bGluZSA9IG5pbDsKKyAgICBtQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lICAgID0gbmlsOwogfQog
CiB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6
ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKQEAgLTIzODQsNjYgKzI1NDcsNzggQEAgdm9pZCBN
aXBtYXBVdGlsczo6ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOwogfQogCit2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUy
RE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXRE
aXNwbGF5KCksIEAiZ2VuZXJhdGUyRE1pcG1hcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7Cit9CisKK3ZvaWQgTWlwbWFw
VXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5zdXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6
ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBAImdlbmVyYXRlMkRBcnJheU1pcG1hcHMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRBcnJheU1pcEdlbmVyYXRv
clBpcGVsaW5lKTsKK30KKwordm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRv
clBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK3sKKyAgICBFbnN1
cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCksIEAi
Z2VuZXJhdGVDdWJlTWlwbWFwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworfQorCiBhbmdsZTo6UmVzdWx0IE1pcG1h
cFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNy
Y1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc1JHQk1pcG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmF0aXZlVGV4TGV2ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRleExldmVsQXJyYXkgKiBtaXBt
YXBPdXRwdXRWaWV3cykKIHsKLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93
LgotICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpID09IE1UTFRleHR1cmVUeXBl
M0QpOworICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9IGNvbnRleHRNdGwt
PmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOworICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKIAog
ICAgIE1UTFNpemUgdGhyZWFkR3JvdXBTaXplOwotICAgIHVpbnQzMl90IHNsaWNlcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRl
PiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7Ci0KLSAgICBlbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7Ci0gICAgY29tcHV0ZVBpcGVsaW5lID0gbTNETWlw
R2VuZXJhdG9yUGlwZWxpbmU7Ci0gICAgdGhyZWFkR3JvdXBTaXplID0KLSAgICAgICAgTVRMU2l6
ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVyRGltLCBrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sCi0gICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVh
ZEdyb3VwU2l6ZVBlckRpbSk7Ci0KLSAgICAvLyBUaGUgY29tcHV0ZSBzaGFkZXIgc3VwcG9ydHMg
dXAgdG8gNCBtaXBtYXBzIGdlbmVyYXRlZCBwZXIgcGFzcy4KLSAgICAvLyBTZWUgc2hhZGVycy9n
ZW5fbWlwbWFwLm1ldGFsCi0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKLQotICAg
IGlmICh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUuaGVpZ2h0ICogdGhy
ZWFkR3JvdXBTaXplLmRlcHRoID4KLSAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3Rh
bFRocmVhZHNQZXJUaHJlYWRncm91cCB8fAotICAgICAgICBBTkdMRV9VTkxJS0VMWSgKLSAgICAg
ICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dHZW5N
dWx0aXBsZU1pcHNQZXJQYXNzLmVuYWJsZWQpKQorICAgIHVpbnQzMl90IHNsaWNlcyA9IDE7Cisg
ICAgc3dpdGNoIChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpKQogICAgIHsKLSAgICAgICAgLy8g
TXVsdGlwbGUgbWlwbWFwcyBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGhhcmR3
YXJlJ3MgdGhyZWFkIGdyb3VwIHNpemUgbGltaXRzLgotICAgICAgICAvLyBGYWxsYmFjayB0byBn
ZW5lcmF0ZSBvbmUgbWlwIHBlciBwYXNzIGFuZCByZWR1Y2UgdGhyZWFkIGdyb3VwIHNpemUuCi0g
ICAgICAgIGlmIChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRH
cm91cFNpemUuaGVpZ2h0ID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVQaXBl
bGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3ZSBjYW5ub3QgcHJv
Y2VlZC4KLSAgICAgICAgICAgIC8vIEhBQ0s6IHVzZSBibGl0IGNvbW1hbmQgZW5jb2RlciB0byBn
ZW5lcmF0ZSBtaXBtYXBzIGlmIGl0IGlzIG5vdCBwb3NzaWJsZQotICAgICAgICAgICAgLy8gdG8g
dXNlIGNvbXB1dGUgc2hhZGVyIGR1ZSB0byBoYXJkd2FyZSBsaW1pdHMuCi0gICAgICAgICAgICBC
bGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1h
bmRFbmNvZGVyKCk7Ci0gICAgICAgICAgICBibGl0RW5jb2Rlci0+Z2VuZXJhdGVNaXBtYXBzRm9y
VGV4dHVyZShzcmNUZXh0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZEdyb3VwU2l6ZS5kZXB0aCA9IDE7
Ci0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisgICAgICAgIGNhc2UgTVRMVGV4
dHVyZVR5cGUyRDoKKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0
aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQ
aXBlbGluZVN0YXRlKG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgIHRocmVh
ZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRp
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1p
cFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNVExUZXh0dXJlVHlwZTJEQXJyYXk6CisgICAgICAgICAgICBlbnN1cmUyREFycmF5TWlw
R2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNt
ZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yREFycmF5TWlwR2VuZXJhdG9yUGlw
ZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAgICAgID0gc3JjVGV4dHVyZS0+YXJyYXlM
ZW5ndGgoKTsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZUN1YmU6CisgICAg
ICAgICAgICBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0
TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG1D
dWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAgICAgID0g
NjsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1p
cFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTNEOgorICAgICAgICAgICAg
ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKGNvbnRleHRNdGwpOworICAg
ICAgICAgICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUobTNETWlwR2VuZXJh
dG9yUGlwZWxpbmUpOworICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplID0KKyAgICAgICAgICAg
ICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sIGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAot
ICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9IGNvbnRleHRNdGwtPmdldENv
bXB1dGVDb21tYW5kRW5jb2RlcigpOwotICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKLSAgICBjbWRF
bmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShjb21wdXRlUGlwZWxpbmUpOwotCi0gICAg
R2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisgICAgR2VuZXJhdGUzRE1pcG1hcFVuaWZv
cm0gb3B0aW9uczsKKyAgICB1aW50MzJfdCBtYXhNaXBzUGVyQmF0Y2ggPSA0OwogCi0gICAgdWlu
dDMyX3QgcmVtYWluTWlwcyAgICAgICAgICAgICA9IHNyY1RleHR1cmUtPm1pcG1hcExldmVscygp
IC0gMTsKLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBiYXRjaFNyY0xldmVsID0ga1plcm9OYXRpdmVN
aXBMZXZlbDsKLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAgID0gYmF0Y2hTcmNM
ZXZlbC5nZXQoKTsKLSAgICBvcHRpb25zLnNSR0IgICAgICAgICAgICAgICAgICAgID0gc1JHQk1p
cG1hcDsKKyAgICB1aW50MzJfdCByZW1haW5NaXBzID0gc3JjVGV4dHVyZS0+bWlwbWFwTGV2ZWxz
KCkgLSAxOworICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOwogCiAgICAgY21kRW5jb2Rlci0+
c2V0VGV4dHVyZShzcmNUZXh0dXJlLCAwKTsKICAgICBjbWRFbmNvZGVyLT5tYXJrUmVzb3VyY2VC
ZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKICAgICB3aGlsZSAocmVtYWluTWlwcykKICAg
ICB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1
dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisgICAgICAgIGNvbnN0IFRleHR1cmVSZWYg
JmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxl
dmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyAxKSk7CiAgICAgICAgIGdsOjpFeHRlbnRzIHNpemUgICAg
ICAgICAgICAgICA9IGZpcnN0TWlwVmlldy0+c2l6ZUF0MCgpOwogICAgICAgICBib29sIGlzUG93
MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93MihzaXplLmhlaWdodCkgJiYg
Z2w6OmlzUG93MihzaXplLmRlcHRoKTsKIApAQCAtMjQ2MSwyMCArMjYzNiwxOCBAQCBhbmdsZTo6
UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCiAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8PSBvcHRpb25zLm51bU1pcG1h
cHNUb0dlbmVyYXRlOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNtZEVuY29kZXItPnNl
dFRleHR1cmUobWlwbWFwT3V0cHV0Vmlld3MtPmF0KGJhdGNoU3JjTGV2ZWwgKyBpKSwgaSk7Cisg
ICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1pcG1hcE91dHB1dFZpZXdzLT5hdCht
dGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyBpKSksIGkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdWludDMyX3QgdGhyZWFkc1BlclogPSBzdGQ6Om1heChzbGljZXMsIGZp
cnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CiAKLSAgICAgICAgRGlzcGF0Y2hDb21wdXRlKAotICAg
ICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2RlciwKLSAgICAgICAgICAgIC8qKiBhbGxvd05v
blVuaWZvcm0gKi8gZmFsc2UsCi0gICAgICAgICAgICBNVExTaXplTWFrZShmaXJzdE1pcFZpZXct
PndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0QXQwKCksIHRocmVhZHNQZXJaKSwKLSAg
ICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSk7CisgICAgICAgIERpc3BhdGNoQ29tcHV0ZShjb250
ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGFsbG93Tm9u
VW5pZm9ybSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1UTFNpemVNYWtlKGZp
cnN0TWlwVmlldy0+d2lkdGhBdDAoKSwgZmlyc3RNaXBWaWV3LT5oZWlnaHRBdDAoKSwgdGhyZWFk
c1BlclopLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplKTsKIAogICAg
ICAgICByZW1haW5NaXBzIC09IG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJhdGU7Ci0gICAgICAg
IGJhdGNoU3JjTGV2ZWwgICAgPSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5udW1NaXBtYXBzVG9H
ZW5lcmF0ZTsKLSAgICAgICAgb3B0aW9ucy5zcmNMZXZlbCA9IGJhdGNoU3JjTGV2ZWwuZ2V0KCk7
CisgICAgICAgIG9wdGlvbnMuc3JjTGV2ZWwgKz0gb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0
ZTsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0yNTA0
LDggKzI2NzcsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IENv
cHlQaXhlbHNVdGlsczo6Z2V0UGl4ZWxzQ29weVBpcGVsaW5lKAogICAgIGludCBzaGFkZXJUZXh0
dXJlVHlwZSA9IEdldFNoYWRlclRleHR1cmVUeXBlKHRleHR1cmUpOwogICAgIGludCBpbmRleDIg
PSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5cGVDb3VudCAqIChidWZmZXJXcml0ZSA/IDEgOiAwKSAr
IHNoYWRlclRleHR1cmVUeXBlOwogCi0gICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVs
aW5lU3RhdGU+PiAmY2FjaGUgPQotICAgICAgICBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zv
cm1hdElEVmFsdWVdW2luZGV4Ml07CisgICAgYXV0byAmY2FjaGUgPSBtUGl4ZWxzQ29weVBpcGVs
aW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CiAKICAgICBpZiAoIWNhY2hlKQogICAg
IHsKQEAgLTI3ODMsNyArMjk1NSwxMCBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGlu
ZVN0YXRlPj4KIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29tcG9uZW50c0V4cGFu
ZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21t
YW5kRW5jb2RlciAqY21kRW5jb2RlcikKIHsKKyAgICBEaXNwbGF5TXRsICpkaXNwbGF5ID0gY29u
dGV4dE10bC0+Z2V0RGlzcGxheSgpOworICAgIGF1dG8gc2hhZGVyTGliICAgICAgPSBkaXNwbGF5
LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwogICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBl
bGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgQCJleHBhbmRWZXJ0ZXhGb3JtYXRDb21w
b25lbnRzVlMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hhZGVyTGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZSk7CiAKICAg
ICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0gR2V0Q29tcHV0aW5nVmVydGV4U2hh
ZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyKTsKQEAgLTI3OTcsOCArMjk3Miw3
IEBAIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0RmxvYXRDb252ZXJzdGlvbkNvbXB1
dGVQaXBlbGluZShDb250ZXh0TXRsICpjb250CiB7CiAgICAgaW50IGZvcm1hdElEVmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHNyY0FuZ2xlRm9ybWF0LmlkKTsKIAotICAgIEF1dG9PYmpDUHRyPGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KLSAgICAgICAgbUNvbnZlcnRUb0Zs
b2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdOworICAgIGF1dG8gJmNhY2hlID0g
bUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdOwogCiAgICAg
aWYgKCFjYWNoZSkKICAgICB7CkBAIC0yODQ5LDUgKzMwMjMsNTMgQEAgVmVydGV4Rm9ybWF0Q29u
dmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uUmVuZGVyUGlwZWxpbmUoQ29udGV4dE10
bCAqY29udGUKICAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0
TXRsLCBwaXBlbGluZURlc2MpOwogfQogCitBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gVHJh
bnNmb3JtRmVlZGJhY2tVdGlsczo6Y3JlYXRlTXNsWGZiTGlicmFyeSgKKyAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkTXNsKQorewor
ICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAgICAgICBEaXNwbGF5TXRsICpkaXNw
bGF5ICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKTsKKyAgICAgICAgaWQ8TVRMRGV2aWNl
PiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworCisgICAgICAgIC8vIENv
bnZlcnQgdG8gYWN0dWFsIGJpbmFyeSBzaGFkZXIKKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxO
U0Vycm9yICo+IGVyciA9IG5pbDsKKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxpZDxNVExMaWJy
YXJ5Pj4gbXRsU2hhZGVyTGliID0KKyAgICAgICAgICAgIG10bDo6Q3JlYXRlU2hhZGVyTGlicmFy
eShtdGxEZXZpY2UsIHRyYW5zbGF0ZWRNc2wsICZlcnIpOworICAgICAgICBpZiAoZXJyICYmICFt
dGxTaGFkZXJMaWIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBlcnIuZ2V0
KCkpOworICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
dGxTaGFkZXJMaWI7CisgICAgfQorfQorCitBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGlu
ZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5k
ZXJQaXBlbGluZSgKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIFJlbmRlckNvbW1h
bmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBl
bGluZURlc2MpCit7CisgICAgY29uc3QgUHJvZ3JhbU10bCAqcHJvZ3JhbU10bCA9IG10bDo6R2V0
SW1wbChjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW0oKSk7CisgICAgUmVuZGVyUGlw
ZWxpbmVDYWNoZSAmY2FjaGUgICA9ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJSZW5kZXJQaXBlbGlu
ZUNhY2hlOworCisgICAgaWYgKCFjYWNoZS5nZXRWZXJ0ZXhTaGFkZXIoKSkKKyAgICB7CisgICAg
ICAgIC8vIFBpcGVsaW5lIGNhY2hlIG5vdCBpbnRpYWxpemVkLCBkbyBpdCBub3c6CisgICAgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc2hhZGVy
TGliID0gY3JlYXRlTXNsWGZiTGlicmFyeShjb250ZXh0TXRsLCBwcm9ncmFtTXRsLT5nZXRYZmJN
c2xTb3VyY2UoKSk7CisgICAgICAgICAgICAvLyBOb24gc3BlY2lhbGl6ZWQgY29uc3RhbnRzIHBy
b3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlvbi4KKyAgICAgICAgICAgIEVuc3Vy
ZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgU0hB
REVSX0VOVFJZX05BTUUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgPQorICAgICAgICBHZXRU
cmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyLCBwaXBlbGluZURl
c2MpOworCisgICAgcmV0dXJuIGNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dE10
bCwgeGZiUGlwZWxpbmVEZXNjKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8gbmFt
ZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaAppbmRleCBmMjIw
NjUwOTMzODZhMGI0OWVjOWE5MGQzMDQxOGQyZjFlMjViYzRjLi4yZTMzMzRkZmUyNTJiYmYxMDlk
MzFiZWVkNjg2YjU5M2Q2OTJjYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3Vy
Y2VzLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3QgeyByZXR1cm4gbVVzYWdl
UmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KICAgICB2b2lkIHJlc2V0Q1BVUmVhZE1lbU5lZWRT
eW5jKCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1OZWVkU3luYyA9IGZhbHNlOyB9CiAKLSAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVyTXRsIHRvIGtub3cgd2hldGhl
ciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQogICAgIGJvb2wgaXNDUFVSZWFkTWVt
RGlydHkoKSBjb25zdCB7IHJldHVybiBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1EaXJ0eTsgfQogICAg
IHZvaWQgcmVzZXRDUFVSZWFkTWVtRGlydHkoKSB7IG1Vc2FnZVJlZi0+Y3B1UmVhZE1lbURpcnR5
ID0gZmFsc2U7IH0KIApAQCAtODEsNyArODAsNyBAQCBjbGFzcyBSZXNvdXJjZSA6IGFuZ2xlOjpO
b25Db3B5YWJsZQogICAgICAgICB1aW50NjRfdCBjbWRCdWZmZXJRdWV1ZVNlcmlhbCA9IDA7CiAK
ICAgICAgICAgLy8gVGhpcyBmbGFnIG1lYW5zIHRoZSByZXNvdXJjZSB3YXMgaXNzdWVkIHRvIGJl
IG1vZGlmaWVkIGJ5IEdQVSwgaWYgQ1BVIHdhbnRzIHRvIHJlYWQKLSAgICAgICAgLy8gaXRzIGNv
bnRlbnQsIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KKyAg
ICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5bmNob3JuaXphdGlvbiBjYWxsIG11c3Qg
YmUgaW52b2tlZC4KICAgICAgICAgYm9vbCBjcHVSZWFkTWVtTmVlZFN5bmMgPSBmYWxzZTsKIAog
ICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNlZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0
aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNoYWRvdyBjb3B5CkBAIC0xMTAsNiArMTA5LDEzIEBA
IGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICAv
LyBPbiBtYWNPUywgbWVtb3J5IHdpbGwgc3RpbGwgYmUgYWxsb2NhdGVkIGZvciB0aGlzIHRleHR1
cmUuCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29u
dGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAq
cmVmT3V0KTsKKwogICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJlVGV4dHVyZShDb250
ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgc2l6ZSwKQEAgLTE0NywxMCArMTUzLDIxIEBAIGNsYXNzIFRleHR1
cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6
OlJlc3VsdCBNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJT1N1cmZhY2VSZWYgcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisKICAgICBzdGF0aWMg
VGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7CiAK
ICAgICAvLyBBbGxvdyBDUFUgdG8gcmVhZCAmIHdyaXRlIGRhdGEgZGlyZWN0bHkgdG8gdGhpcyB0
ZXh0dXJlPwogICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7CisgICAgLy8gQWxsb3cg
c2hhZGVycyB0byByZWFkL3NhbXBsZSB0aGlzIHRleHR1cmU/CisgICAgLy8gVGV4dHVyZSBjcmVh
dGVkIHdpdGggcmVuZGVyVGFyZ2V0T25seSBmbGFnIHdvbid0IGJlIHJlYWRhYmxlCisgICAgYm9v
bCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CiAKICAgICBib29sIHN1cHBvcnRGb3JtYXRWaWV3
KCkgY29uc3Q7CiAKQEAgLTIxOCwxNiArMjM1LDI5IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBw
dWJsaWMgUmVzb3VyY2UsCiAgICAgTVRMQ29sb3JXcml0ZU1hc2sgZ2V0Q29sb3JXcml0YWJsZU1h
c2soKSBjb25zdCB7IHJldHVybiAqbUNvbG9yV3JpdGFibGVNYXNrOyB9CiAgICAgdm9pZCBzZXRD
b2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICptQ29sb3JXcml0YWJs
ZU1hc2sgPSBtYXNrOyB9CiAKLSAgICAvLyBHZXQgbGluZWFyIGNvbG9yIHNwYWNlIHZpZXcuIE9u
bHkgdXNhYmxlIGZvciBzUkdCIHRleHR1cmVzLgotICAgIFRleHR1cmVSZWYgZ2V0TGluZWFyQ29s
b3JWaWV3KCk7CisgICAgLy8gR2V0IHJlYWRpbmcgY29weS4gVXNlZCBmb3IgcmVhZGluZyBub24t
cmVhZGFibGUgdGV4dHVyZSBvciByZWFkaW5nIHN0ZW5jaWwgdmFsdWUgZnJvbQorICAgIC8vIHBh
Y2tlZCBkZXB0aCAmIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAvLyBOT1RFOiB0aGlzIG9ubHkgY29w
aWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisgICAgLy8gVGhlIHRleGVscyB3
aWxsIGJlIGNvcGllZCB0byByZWdpb24oMCwgMCwgMCwgYXJlYVRvQ29weS5zaXplKSBvZiB0aGUg
cmV0dXJuZWQgdGV4dHVyZS4KKyAgICAvLyBUaGUgcmV0dXJuZWQgcG9pbnRlciB3aWxsIGJlIHJl
dGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAvLyBDYWxsaW5nIGdl
dFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZpb3VzbHkgcmV0dXJuZWQgdGV4dHVy
ZS4KKyAgICBUZXh0dXJlUmVmIGdldFJlYWRhYmxlQ29weShDb250ZXh0TXRsICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpl
bmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGxl
dmVsVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90
IHNsaWNlVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1UTFJl
Z2lvbiAmYXJlYVRvQ29weSk7CisKKyAgICB2b2lkIHJlbGVhc2VSZWFkYWJsZUNvcHkoKTsKIAog
ICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKICAgICBUZXh0dXJlUmVmIGdldFN0ZW5jaWxWaWV3KCk7
CisgICAgLy9HZXQgbGluZWFyIGNvbG9yCisgICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZp
ZXcoKTsKIAogICAgIC8vIENoYW5nZSB0aGUgd3JhcHBlZCBtZXRhbCBvYmplY3QuIFNwZWNpYWwg
Y2FzZSBmb3Igc3dhcGNoYWluIGltYWdlCiAgICAgdm9pZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0
YWxUZXh0dXJlKTsKIAotICAgIC8vIHN5bmMgY29udGVudCBiZXR3ZWVuIENQVSBhbmQgR1BVCisg
ICAgLy8gRXhwbGljaXRseSBzeW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQogICAgIHZv
aWQgc3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29k
ZXIgKmVuY29kZXIpOwogCiAgIHByaXZhdGU6CkBAIC0yNDEsMTIgKzI3MSw0MSBAQCBjbGFzcyBU
ZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6
OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQp
OworCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExUZXh0
dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworCiAgICAgVGV4dHVyZShpZDxNVExUZXh0
dXJlPiBtZXRhbFRleHR1cmUpOwogICAgIFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAg
ICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAogICAgICAgICAgICAgdWludDMy
X3QgbWlwcywKICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKICAgICAgICAgICAg
IGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQs
CisgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgIHVp
bnQzMl90IG1pcHMsCisgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAg
ICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcyk7
CisKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICBNVExUZXh0
dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2Us
CisgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAorICAgICAgICAgICAgYm9vbCByZW5kZXJU
YXJnZXRPbmx5KTsKIAogICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdmlldwogICAgIFRleHR1cmUo
VGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0IGZvcm1hdCk7CkBAIC0yNjQsOSArMzIz
LDE0IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgVGV4dHVy
ZVJlZiBtTGluZWFyQ29sb3JWaWV3OwogCiAgICAgVGV4dHVyZVJlZiBtU3RlbmNpbFZpZXc7Cisg
ICAgLy9SZWFkYWJsZSBjb3B5IG9mIHRleHR1cmUKKyAgICBUZXh0dXJlUmVmIG1SZWFkQ29weTsK
KwogfTsKIAotY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJlc291cmNlLCBwdWJsaWMgV3Jh
cHBlZE9iamVjdDxpZDxNVExCdWZmZXI+PgorY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRM
QnVmZmVyPj4sCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVk
X2Zyb21fdGhpczxCdWZmZXI+CiB7CiAgIHB1YmxpYzoKICAgICBzdGF0aWMgYW5nbGU6OlJlc3Vs
dCBNYWtlQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5t
bSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVzb3VyY2VzLm1tCmluZGV4IDliZWU0NzVmODY2ZDY0YmIyNWM4NWIzNmVmMTc4ZWU3Y2Zh
ZWRiMTguLmQwNDc1YWU3YTM5ZjRlYTIzZjExMTk2Y2E3MzBkZjhiY2I1ODU0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVzb3VyY2VzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCkBAIC0zNCwyMCArMzQsMjIgQEAgaW5s
aW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXplLCBjb25zdCBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCkKIC8vIEFzeW5jaHJvbm91c2x5IHN5bmNocm9uaXplIHRoZSBj
b250ZW50IG9mIGEgcmVzb3VyY2UgYmV0d2VlbiBHUFUgbWVtb3J5IGFuZCBpdHMgQ1BVIGNhY2hl
LgogLy8gTk9URTogVGhpcyBvcGVyYXRpb24gZG9lc24ndCBmaW5pc2ggaW1tZWRpYXRlbHkgdXBv
biBmdW5jdGlvbidzIHJldHVybi4KIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBJbnZva2VDUFVN
ZW1TeW5jKENvbnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0
RW5jb2RlciwgVCAqcmVzb3VyY2UpCit2b2lkIFN5bmNDb250ZW50KENvbnRleHRNdGwgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkK
IHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAogICAgIGlmIChi
bGl0RW5jb2RlcikKICAgICB7CiAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5jaHJvbml6ZVJlc291
cmNlKHJlc291cmNlKTsKKwogICAgICAgICByZXNvdXJjZS0+cmVzZXRDUFVSZWFkTWVtTmVlZFN5
bmMoKTsKICAgICB9CiAjZW5kaWYKIH0KLS8vIEVuc3VyZSB0aGF0IGEgcmVzb3VyY2UncyBDUFUg
Y2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZpbmlzaGVzIGl0cyBtb2RpZmlj
YXRpb25zIG9uCi0vLyB0aGUgcmVzb3VyY2UuCisKIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBF
bnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2Up
Cit2b2lkIEVuc3VyZUNvbnRlbnRTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgY29uc3Qgc3Rk
OjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKIHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdF
VF9PU19NQUNDQVRBTFlTVAogICAgIC8vIE1ha2Ugc3VyZSBHUFUgJiBDUFUgY29udGVudHMgYXJl
IHN5bmNocm9uaXplZC4KQEAgLTU2LDcgKzU4LDcgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVT
eW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCiAgICAgaWYgKHJlc291cmNl
LT5nZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdlTW9kZU1hbmFnZWQgJiYgcmVzb3VyY2Ut
PmlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkpCiAgICAgewogICAgICAgICBtdGw6OkJsaXRDb21tYW5k
RW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0LT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsK
LSAgICAgICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgcmVzb3VyY2Up
OworICAgICAgICBTeW5jQ29udGVudChjb250ZXh0LCBibGl0RW5jb2RlciwgcmVzb3VyY2UpOwog
ICAgIH0KICNlbmRpZgogfQpAQCAtMTIyLDYgKzEyNCwyNCBAQCBhbmdsZTo6UmVzdWx0IFRleHR1
cmU6Ok1ha2UyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICB9ICAvLyBBTkdMRV9N
VExfT0JKQ19TQ09QRQogfQogCisvKiogc3RhdGljICovCithbmdsZTo6UmVzdWx0IFRleHR1cmU6
Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
KyAgICB7CisgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0KKyAgICAgICAgICAg
IFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0
OmZvcm1hdC5tZXRhbEZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OmhlaWdo
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBwZWQ6Tk9dOworCisgICAgICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0
LCBmb3JtYXQsIGRlc2MsIDEsIHRydWUsIGZhbHNlLCB0cnVlLCByZWZPdXQpOworICAgIH0gIC8v
IEFOR0xFX01UTF9PQkpDX1NDT1BFCit9CiAvKiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRl
eHR1cmU6Ok1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCkBAIC0yMjMs
NiArMjQzLDIzIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZTNEVGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAogICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29udGV4dCwgZm9ybWF0
LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIHJlZk91dCk7
CiAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKIH0KK2FuZ2xlOjpSZXN1bHQgVGV4dHVy
ZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPU3Vy
ZmFjZVJlZiByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRl
c2MgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsK
KyAgICBkZXNjLnRleHR1cmVUeXBlICAgICAgICAgICA9IE1UTFRleHR1cmVUeXBlMkQ7CisgICAg
ZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAgPSBmb3JtYXQubWV0YWxGb3JtYXQ7CisgICAgZGVz
Yy53aWR0aCAgICAgICAgICAgICAgICAgPSB3aWR0aDsKKyAgICBkZXNjLmhlaWdodCAgICAgICAg
ICAgICAgICA9IGhlaWdodDsKKyAgICBkZXNjLm1pcG1hcExldmVsQ291bnQgICAgICA9IDE7Cisg
ICAgZGVzYy5zYW1wbGVDb3VudCAgICAgICAgICAgPSAxOworICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIHJlZiwgcGxhbmUsIE5PLCByZWZPdXQpOworfQogCiAv
Kiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCkBAIC0yMzMsNyArMjcwLDQyIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKIHsKLSAgICByZWZPdXQtPnJlc2V0KG5l
dyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9y
bWF0VmlldykpOworICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBtdGxGb3JtYXQsIGRl
c2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9ybWF0VmlldywgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlZk91dCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKK3sKKyAgICByZWZPdXQtPnJlc2V0
KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93
Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworCisgICAgaWYgKCFyZWZPdXQgfHwgIXJlZk91dC0+
Z2V0KCkpCisgICAgeworICAgICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dCwgZmFsc2UsIEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICBpZiAoIW10bEZvcm1hdC5oYXNEZXB0aEFuZFN0
ZW5jaWxCaXRzKCkpCisgICAgeworICAgICAgICByZWZPdXQtPmdldCgpLT5zZXRDb2xvcldyaXRh
YmxlTWFzayhHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCkpOworICAgIH0KKwor
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBU
ZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKK3sK
KyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIHN1cmZhY2VSZWYs
IHNsaWNlLCByZW5kZXJUYXJnZXRPbmx5KSk7CiAKICAgICBpZiAoISgqcmVmT3V0KSB8fCAhKCpy
ZWZPdXQpLT5nZXQoKSkKICAgICB7CkBAIC0yNjQsNiArMzM2LDE1IEBAIFRleHR1cmU6OlRleHR1
cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlwcywK
ICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAogICAgICAgICAgICAgICAg
ICBib29sIGFsbG93Rm9ybWF0VmlldykKKyAgICA6IFRleHR1cmUoY29udGV4dCwgZGVzYywgbWlw
cywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSkKK3t9CisKK1RleHR1
cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgTVRMVGV4
dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisg
ICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcykK
ICAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1UTENvbG9yV3JpdGVN
YXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
QEAgLTI4Myw4ICszNjQsMTYgQEAgVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAogICAgICAgICAgICAgZGVzYy51c2FnZSB8PSBNVExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhk
ZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKLSAgICAgICAgICAgIGRlc2MudGV4
dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAgICAgICBpZiAobWVt
b3J5TGVzcykKKyAgICAgICAgeworI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVikg
JiYgIVRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlv
bnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWVtb3J5bGVzczsKKyNlbHNlCisgICAgICAgICAg
ICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9y
bWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKKyAgICAgICAgICAg
ICAgICAgZGVzYy50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTJETXVsdGlzYW1wbGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2Vz
cyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCiAgICAgICAgICAgICBkZXNjLnJlc291
cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOwpAQCAtMzEwLDYgKzM5
OSw0NiBAQCBUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCiAgICAgfQogfQog
CitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
IE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAgICAgICBJT1N1cmZhY2VS
ZWYgaW9zdXJmYWNlLAorICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAorICAgICAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHkpCisgICAgOiBtQ29sb3JXcml0YWJsZU1h
c2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRlTWFzaz4oTVRMQ29sb3JXcml0ZU1hc2tB
bGwpKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAgICAgICBpZDxNVExE
ZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4dC0+Z2V0TWV0YWxEZXZpY2UoKTsKKworICAgICAg
ICAvLyBFdmVyeSB0ZXh0dXJlIHdpbGwgc3VwcG9ydCBiZWluZyByZW5kZXJlZCBmb3Igbm93Cisg
ICAgICAgIGRlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzYy5waXhlbEZvcm1hdCku
aXNSZW5kZXJhYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2MudXNhZ2UgfD0gTVRM
VGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OworICAgICAgICB9CisKKyNpZiAoVEFSR0VUX09TX0lP
UyB8fCBUQVJHRVRfT1NfVFYpICYmICFUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgZGVz
Yy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkOworI2Vsc2UK
KyAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWFu
YWdlZDsKKyNlbmRpZgorCisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0T25seSkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJSZWFkOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMo
ZGVzYy5waXhlbEZvcm1hdCkud3JpdGFibGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZU
ZXh0dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW9zdXJmYWNlOmlvc3VyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZTpwbGFuZV07Cisg
ICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKyAgICB9
Cit9CisKIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0
IGZvcm1hdCkKICAgICA6IFJlc291cmNlKG9yaWdpbmFsKSwKICAgICAgIG1Db2xvcldyaXRhYmxl
TWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Igd3JpdGUg
bWFzayBwcm9wZXJ0eQpAQCAtMzQxLDcgKzQ3MCw3IEBAIFRleHR1cmU6OlRleHR1cmUoVGV4dHVy
ZSAqb3JpZ2luYWwsIGNvbnN0IFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiAgICAg
OiBSZXNvdXJjZShvcmlnaW5hbCksCiAgICAgICBtQ29sb3JXcml0YWJsZU1hc2sob3JpZ2luYWwt
Pm1Db2xvcldyaXRhYmxlTWFzaykgIC8vIFNoYXJlIGNvbG9yIHdyaXRlIG1hc2sgcHJvcGVydHkK
IHsKLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKyNpZiBkZWZpbmVkKF9fSVBIT05F
XzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
ICAgICB7CiAgICAgICAgIGF1dG8gdmlldyA9IFtvcmlnaW5hbC0+Z2V0KCkKQEAgLTM2MCwxMiAr
NDg5LDEyIEBAIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIGNvbnN0IFRleHR1
cmVTd2l6emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiAKIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnQo
Q29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVy
KQogewotICAgIEludm9rZUNQVU1lbVN5bmMoY29udGV4dCwgYmxpdEVuY29kZXIsIHRoaXMpOwor
ICAgIFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkp
OwogfQogCiB2b2lkIFRleHR1cmU6OnN5bmNDb250ZW50SWZOZWVkZWQoQ29udGV4dE10bCAqY29u
dGV4dCkKIHsKLSAgICBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoY29udGV4dCwgdGhpcyk7Cisg
ICAgRW5zdXJlQ29udGVudFN5bmNlZChjb250ZXh0LCBzaGFyZWRfZnJvbV90aGlzKCkpOwogfQog
CiBib29sIFRleHR1cmU6OmlzQ1BVQWNjZXNzaWJsZSgpIGNvbnN0CkBAIC0zNzksNiArNTA4LDEx
IEBAIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKICAgICByZXR1cm4gZ2V0
KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3RvcmFnZU1vZGVTaGFyZWQ7CiB9CiAKK2Jvb2wgVGV4dHVy
ZTo6aXNTaGFkZXJSZWFkYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldCgpLnVzYWdlICYg
TVRMVGV4dHVyZVVzYWdlU2hhZGVyUmVhZDsKK30KKwogYm9vbCBUZXh0dXJlOjpzdXBwb3J0Rm9y
bWF0VmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldCgpLnVzYWdlICYgTVRMVGV4dHVyZVVz
YWdlUGl4ZWxGb3JtYXRWaWV3OwpAQCAtNTE0LDEyICs2NDgsMTQgQEAgVGV4dHVyZVJlZiBUZXh0
dXJlOjpjcmVhdGVWaWV3V2l0aERpZmZlcmVudEZvcm1hdChNVExQaXhlbEZvcm1hdCBmb3JtYXQp
CiAgICAgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOwogICAgIHJldHVybiBUZXh0dXJlUmVm
KG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQorCiBUZXh0dXJlUmVmIFRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdChNVExQaXhlbEZvcm1hdCBmb3JtYXQpCiB7Ci0g
ICAgLy8gTm8gbmVlZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOwogICAgIHJldHVy
biBUZXh0dXJlUmVmKG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQogCisKKwogVGV4dHVy
ZVJlZiBUZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5u
ZWxzICZzd2l6emxlKQogewogI2lmIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRQpAQCAtNjUy
LDYgKzc4OCw0OCBAQCBUZXh0dXJlUmVmIFRleHR1cmU6OmdldExpbmVhckNvbG9yVmlldygpCiAg
ICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CiB9CiAKK1RleHR1cmVSZWYgVGV4dHVyZTo6Z2V0
UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qgc2xpY2VU
b0NvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNVExSZWdp
b24gJmFyZWFUb0NvcHkpCit7CisgICAgZ2w6OkV4dGVudHMgZmlyc3RMZXZlbFNpemUgPSBzaXpl
KGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworICAgIGlmICghbVJlYWRDb3B5IHx8IG1SZWFkQ29weS0+
Z2V0KCkud2lkdGggPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpcnN0TGV2ZWxTaXplLndpZHRoKSB8
fAorICAgICAgICBtUmVhZENvcHktPmdldCgpLmhlaWdodCA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Zmlyc3RMZXZlbFNpemUuaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1
cmUgdGhhdCBiaWcgZW5vdWdoIHRvIHN0b3JlIHRoZSBmaXJzdCBsZXZlbCBkYXRhIGFuZCBhbnkg
c21hbGxlciBsZXZlbAorICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIGRlc2MgICAgICAgICAgICA9IFtbTVRMVGV4dHVyZURlc2NyaXB0b3Ig
bmV3XSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAgZGVzYy50ZXh0dXJlVHlw
ZSAgICAgPSBnZXQoKS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQg
ICAgID0gZ2V0KCkucGl4ZWxGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLndpZHRoICAgICAgICAg
ICA9IGZpcnN0TGV2ZWxTaXplLndpZHRoOworICAgICAgICAgICAgZGVzYy5oZWlnaHQgICAgICAg
ICAgPSBmaXJzdExldmVsU2l6ZS5oZWlnaHQ7CisgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAg
ICAgICA9IDE7CisgICAgICAgICAgICBkZXNjLmFycmF5TGVuZ3RoICAgICA9IDE7CisgICAgICAg
ICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRl
OworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsK
KyAgICAgICAgICAgIGRlc2MudXNhZ2UgICAgICAgICAgID0gTVRMVGV4dHVyZVVzYWdlU2hhZGVy
UmVhZCB8IE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0VmlldzsKKworICAgICAgICAgICAgaWQ8
TVRMVGV4dHVyZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1Rl
eHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjXTsKKyAgICAgICAgICAgIG1SZWFkQ29weS5yZXNldChu
ZXcgVGV4dHVyZShtdGxUZXh0dXJlKSk7CisgICAgICAgIH0gIC8vIEFOR0xFX01UTF9PQkpDX1ND
T1BFCisgICAgfQorCisgICAgQVNTRVJUKGVuY29kZXIpOworCisgICAgZW5jb2Rlci0+Y29weVRl
eHR1cmUoc2hhcmVkX2Zyb21fdGhpcygpLCBzbGljZVRvQ29weSwgbGV2ZWxUb0NvcHksIG1SZWFk
Q29weSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAxKTsKKworICAgIHJldHVy
biBtUmVhZENvcHk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVJlYWRhYmxlQ29weSgpCit7
CisgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKK30KKwogVGV4dHVyZVJlZiBUZXh0dXJlOjpnZXRT
dGVuY2lsVmlldygpCiB7CiAgICAgaWYgKG1TdGVuY2lsVmlldykKQEAgLTc5OSw3ICs5NzcsNyBA
QCBhbmdsZTo6UmVzdWx0IEJ1ZmZlcjo6cmVzZXRXaXRoUmVzT3B0KENvbnRleHRNdGwgKmNvbnRl
eHQsCiAKIHZvaWQgQnVmZmVyOjpzeW5jQ29udGVudChDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6
OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCiB7Ci0gICAgSW52b2tlQ1BVTWVtU3lu
Yyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisgICAgU3luY0NvbnRlbnQoY29udGV4dCwg
YmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CiB9CiAKIGNvbnN0IHVpbnQ4X3QgKkJ1
ZmZlcjo6bWFwUmVhZE9ubHkoQ29udGV4dE10bCAqY29udGV4dCkKQEAgLTgyMCw3ICs5OTgsNyBA
QCB1aW50OF90ICpCdWZmZXI6Om1hcFdpdGhPcHQoQ29udGV4dE10bCAqY29udGV4dCwgYm9vbCBy
ZWFkb25seSwgYm9vbCBub1N5bmMpCiAgICAgewogICAgICAgICBDb21tYW5kUXVldWUgJmNtZFF1
ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKIAotICAgICAgICBFbnN1cmVDUFVNZW1XaWxsQmVT
eW5jZWQoY29udGV4dCwgdGhpcyk7CisgICAgICAgIEVuc3VyZUNvbnRlbnRTeW5jZWQoY29udGV4
dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIAogICAgICAgICBpZiAodGhpcy0+aXNCZWluZ1VzZWRC
eUdQVShjb250ZXh0KSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0
ZV9jYWNoZS5oCmluZGV4IDc2OGMzNjk3ZTg1ZTA2YjU2OGJkNWE1NzkwM2QzMzA5ZDQ4YmFkYzEu
LmU2YmY3MWQ4MjlhMzVjZWZkODgxZDFjNDMwZTFkYzUxNzI4Mjg3YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3Rh
dGVfY2FjaGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLmgKQEAgLTIyLDYgKzIyLDExIEBACiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1UTENsZWFyQ29sb3IgJmxocywgY29uc3Qg
TVRMQ2xlYXJDb2xvciAmcmhzKTsKIAorbmFtZXNwYWNlIGFuZ2xlCit7CitzdHJ1Y3QgRmVhdHVy
ZXNNdGw7Cit9CisKIG5hbWVzcGFjZSByeAogewogY2xhc3MgQ29udGV4dE10bDsKQEAgLTIyMyw3
ICsyMjgsOCBAQCBzdHJ1Y3QgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjCiB9OwogCiAvLyBTb21l
IFNESyBsZXZlbHMgZG9uJ3QgZGVjbGFyZSBNVExQcmltaXRpdmVUb3BvbG9neUNsYXNzLiBOZWVk
cyB0byBkbyBjb21waWxlIHRpbWUgY2hlY2sgaGVyZToKLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwg
VEFSR0VUX09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBI
T05FXzEyXzAKKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKSAm
JiBcCisgICAgKCFkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IEFOR0xFX0lPU19ERVBMT1lfVEFS
R0VUIDwgX19JUEhPTkVfMTJfMCkKICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9Q
T0xPR1lfQ0xBU1NfQVZBSUxBQkxFIDAKIHVzaW5nIFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB1aW50MzJfdDsKIGNvbnN0ZXhwciBQ
cmltaXRpdmVUb3BvbG9neUNsYXNzIGtQcmltaXRpdmVUb3BvbG9neUNsYXNzVHJpYW5nbGUgPSAw
OwpAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVz
YwogICAgIFJlbmRlclBpcGVsaW5lRGVzYyAmb3BlcmF0b3I9KGNvbnN0IFJlbmRlclBpcGVsaW5l
RGVzYyAmc3JjKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGluZURl
c2MgJnJocykgY29uc3Q7Ci0KICAgICBzaXplX3QgaGFzaCgpIGNvbnN0OwotCiAgICAgYm9vbCBy
YXN0ZXJpemF0aW9uRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgVmVydGV4RGVzYyB2ZXJ0ZXhEZXNj
cmlwdG9yOwpAQCAtMjg4LDYgKzI5MiwyNyBAQCBzdHJ1Y3QgYWxpZ25hcyg0KSBSZW5kZXJQaXBl
bGluZURlc2MKICAgICBib29sIGVtdWxhdGVDb3ZlcmFnZU1hc2sgOiAxOwogfTsKIAorc3RydWN0
IFJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2MKK3sKKyAgICBUZXh0dXJlUmVm
IGdldFRleHR1cmVSZWYoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlLmxvY2soKTsgfQorICAgIFRl
eHR1cmVSZWYgZ2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSBjb25zdCB7IHJldHVybiBpbXBsaWNp
dE1TVGV4dHVyZS5sb2NrKCk7IH0KKyAgICBib29sIGhhc0ltcGxpY2l0TVNUZXh0dXJlKCkgY29u
c3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQoKTsgfQorICAgIHVpbnQzMl90
IGdldFJlbmRlclNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVGV4dHVyZVJlZiB0ZXgg
ICA9IGdldFRleHR1cmVSZWYoKTsKKyAgICAgICAgVGV4dHVyZVJlZiBtc1RleCA9IGdldEltcGxp
Y2l0TVNUZXh0dXJlUmVmKCk7CisgICAgICAgIHJldHVybiBtc1RleCA/IG1zVGV4LT5zYW1wbGVz
KCkgOiAodGV4ID8gdGV4LT5zYW1wbGVzKCkgOiAxKTsKKyAgICB9CisKKyAgICBUZXh0dXJlV2Vh
a1JlZiB0ZXh0dXJlOworICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3
aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCisgICAgLy8g
YSByZW5kZXIgcGFzcy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGludG8gbm9ybWFsIHRl
eHR1cmUgYWJvdmUuCisgICAgVGV4dHVyZVdlYWtSZWYgaW1wbGljaXRNU1RleHR1cmU7CisgICAg
TWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBrWmVyb05hdGl2ZU1pcExldmVsOworICAgIHVpbnQz
Ml90IHNsaWNlT3JEZXB0aCAgID0gMDsKKyAgICBib29sIGJsZW5kYWJsZSAgICAgICAgICA9IHRy
dWU7Cit9OworCiBzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjCiB7CiAgICAgUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjKCk7CkBAIC0yOTcsMTggKzMyMiwzNCBAQCBzdHJ1Y3QgUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjCiAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMo
Y29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNvbnN0Owog
Ci0gICAgQU5HTEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJl
dHVybiBpbXBsaWNpdE1TVGV4dHVyZS5nZXQoKTsgfQotCi0gICAgVGV4dHVyZVJlZiB0ZXh0dXJl
OwotICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRl
cmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCi0gICAgLy8gYSByZW5kZXIgcGFz
cy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGludG8gbm9ybWFsIHRleHR1cmUgYWJvdmUu
Ci0gICAgVGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBNaXBtYXBOYXRpdmVMZXZl
bCBsZXZlbDsKLSAgICB1aW50MzJfdCBzbGljZU9yRGVwdGg7Ci0KLSAgICAvLyBUaGlzIGF0dGFj
aG1lbnQgaXMgYmxlbmRhYmxlIG9yIG5vdC4KLSAgICBib29sIGJsZW5kYWJsZTsKKyAgICBBTkdM
RV9JTkxJTkUgVGV4dHVyZVJlZiB0ZXh0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmdldFRleHR1cmVSZWYoKSA6IG51bGxwdHI7
CisgICAgfQorICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQt
PmdldEltcGxpY2l0TVNUZXh0dXJlUmVmKCkgOiBudWxscHRyOworICAgIH0KKyAgICBBTkdMRV9J
TkxJTkUgYm9vbCBoYXNJbXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4dHVyZSgp
IDogZmFsc2U7CisgICAgfQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCByZW5kZXJTYW1wbGVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclNhbXBsZXMoKSA6IDE7CisgICAgfQorICAgIEFOR0xFX0lOTElORSBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVy
VGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5sZXZlbCA6IGtaZXJvTmF0aXZlTWlwTGV2ZWw7CisgICAg
fQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCBzbGljZU9yRGVwdGgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRo
IDogMDsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIGJvb2wgYmxlbmRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5ibGVuZGFibGUgOiBmYWxzZTsgfQog
CisgICAgLy8gVGhpcyBpcyBzaGFyZWQgcG9pbnRlciB0byBhdm9pZCBjcmFzaGluZyB3aGVuIHRl
eHR1cmUgZGVsZXRlZCBhZnRlciBib3VuZCB0byBhIGZyYW1lIGJ1ZmZlci4KKyAgICBzdGQ6OnNo
YXJlZF9wdHI8UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYz4gcmVuZGVyVGFy
Z2V0OwogICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlvbjsKICAgICBNVExTdG9yZUFjdGlvbiBz
dG9yZUFjdGlvbjsKICAgICBNVExTdG9yZUFjdGlvbk9wdGlvbnMgc3RvcmVBY3Rpb25PcHRpb25z
OwpAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50
RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKICAgICB1aW50MzJfdCBjbGVh
clN0ZW5jaWwgPSAwOwogfTsKIAorLy8KKy8vIFRoaXMgaXMgQysrIGVxdWl2YWxlbnQgb2YgT2Jq
ZWN0aXZlLUMgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IuCisvLyBXZSBjb3VsZCB1c2UgTVRMUmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0bHksIGhvd2V2ZXIsIHVzaW5nIEMrKyBzdHJ1Y3QgaGFz
IGJlbmVmaXRzIG9mIGZhc3QKKy8vIGNvcHksIHN0YWNrIGFsbG9jYXRpb24sIGlubGluZWQgY29t
cGFyaW5nIGZ1bmN0aW9uLCBldGMuCisvLwogc3RydWN0IFJlbmRlclBhc3NEZXNjCiB7CiAgICAg
UmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2MgY29sb3JBdHRhY2htZW50c1trTWF4UmVuZGVy
VGFyZ2V0c107CkBAIC00MTcsNyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNw
ZWNpYWxpemVTaGFkZXJGYWN0b3J5CiB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJQ
aXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7Ci0KICAgICAv
LyBHZXQgc3BlY2lhbGl6ZWQgc2hhZGVyIGZvciB0aGUgcmVuZGVyIHBpcGVsaW5lIGNhY2hlLgog
ICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLApAQCAtNDI5LDcgKzQ3NCw3IEBAIGNsYXNzIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVs
aW5lRGVzYykgPSAwOwogfTsKIAotLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBz
aGFkZXIgcHJvZ3JhbS4KKy8vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBjYWNoZSBwZXIgc2hhZGVy
IHByb2dyYW0KIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKIHsKICAgcHVibGljOgpAQCAtNDU5LDYgKzUwNCw3IEBAIGNsYXNzIFJlbmRlclBpcGVs
aW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CiAgICAgLy8gTm9uLXNwZWNpYWxpemVkIGZyYWdt
ZW50IHNoYWRlcgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTEZ1bmN0aW9uPj4gbUZyYWdtZW50U2hh
ZGVyOworICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlzY2Fy
ZCwgb25lIHdpdGhvdXQKIAogICBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJQaXBlbGluZVN0YXRl
cygpOwpAQCAtNDc3LDE0ICs1MjMsMTMgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5h
bCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIC8vIE9uZSB0YWJsZSB3aXRoIGRlZmF1bHQgYXR0
cmliIGFuZCBvbmUgdGFibGUgd2l0aG91dC4KICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8UmVuZGVy
UGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4+CiAg
ICAgICAgIG1SZW5kZXJQaXBlbGluZVN0YXRlc1syXTsKLQogICAgIFJlbmRlclBpcGVsaW5lQ2Fj
aGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeTsKIH07
CiAKIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKIHsKICAgcHVi
bGljOgotICAgIFN0YXRlQ2FjaGUoKTsKKyAgICBTdGF0ZUNhY2hlKGNvbnN0IGFuZ2xlOjpGZWF0
dXJlc010bCAmZmVhdHVyZXMpOwogICAgIH5TdGF0ZUNhY2hlKCk7CiAKICAgICAvLyBOdWxsIGRl
cHRoIHN0ZW5jaWwgc3RhdGUgaGFzIGRlcHRoL3N0ZWNpbCByZWFkICYgd3JpdGUgZGlzYWJsZWQu
CkBAIC01MDIsNiArNTQ3LDggQEAgY2xhc3MgU3RhdGVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25D
b3B5YWJsZQogICAgIHZvaWQgY2xlYXIoKTsKIAogICBwcml2YXRlOgorICAgIGNvbnN0IGFuZ2xl
OjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworCiAgICAgQXV0b09iakNQdHI8aWQ8TVRMRGVwdGhT
dGVuY2lsU3RhdGU+PiBtTnVsbERlcHRoU3RlbmNpbFN0YXRlID0gbmlsOwogICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5j
aWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3RhdGVzOwogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxT
YW1wbGVyRGVzYywgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4+IG1TYW1wbGVyU3Rh
dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0KaW5kZXggMWNm
MjM3YWQ2NDA0MmZiNTk3NjYzM2M5OGM3YjUxMTI0MGY5Mzc0OC4uNDVjNzE5ZGQ3MTBjN2Y5YjZi
NjE1MmYzOTkxNTA3OTNmM2RjMTg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0
YXRlX2NhY2hlLm1tCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZXNvdXJjZXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9GZWF0dXJlc010bC5oIgogCiAjZGVmaW5lIEFO
R0xFX09CSkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCiAgICAgKERTVCkuUFJP
UEVSVFkgPSBzdGF0aWNfY2FzdDxfX3R5cGVvZl9fKChEU1QpLlBST1BFUlRZKT4oVG9PYmpDKChT
UkMpLlBST1BFUlRZKSkKQEAgLTE4MiwxMCArMTgzLDEwIEBAIGlkPE1UTFRleHR1cmU+IFRvT2Jq
Qyhjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogICAgIHJldHVybiB0ZXh0dXJlUmVmID8gdGV4
dHVyZVJlZi0+Z2V0KCkgOiBuaWw7CiB9CiAKLXZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50
RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNyYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExSZW5kZXJQYXNzQXR0YWNobWVudERl
c2NyaXB0b3IgKmRzdCkKK3ZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhN
VExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNy
YykKIHsKLSAgICBjb25zdCBUZXh0dXJlUmVmICZpbXBsaWNpdE1zVGV4dHVyZSA9IHNyYy5pbXBs
aWNpdE1TVGV4dHVyZTsKKyAgICBhdXRvIGltcGxpY2l0TXNUZXh0dXJlID0gc3JjLmltcGxpY2l0
TVNUZXh0dXJlKCk7CiAKICAgICBpZiAoaW1wbGljaXRNc1RleHR1cmUpCiAgICAgewpAQCAtMTkz
LDMxICsxOTQsMzEgQEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNv
bnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAogICAgICAgICBkc3QubGV2ZWwgICAg
ICAgICAgPSAwOwogICAgICAgICBkc3Quc2xpY2UgICAgICAgICAgPSAwOwogICAgICAgICBkc3Qu
ZGVwdGhQbGFuZSAgICAgPSAwOwotICAgICAgICBkc3QucmVzb2x2ZVRleHR1cmUgPSBUb09iakMo
c3JjLnRleHR1cmUpOwotICAgICAgICBkc3QucmVzb2x2ZUxldmVsICAgPSBzcmMubGV2ZWwuZ2V0
KCk7CisgICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsK
KyAgICAgICAgZHN0LnJlc29sdmVMZXZlbCAgID0gc3JjLmxldmVsKCkuZ2V0KCk7CiAgICAgICAg
IGlmIChkc3QucmVzb2x2ZVRleHR1cmUudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUzRCkK
ICAgICAgICAgewotICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNl
T3JEZXB0aDsKKyAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9y
RGVwdGgoKTsKICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBkc3QucmVzb2x2ZVNsaWNl
ICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAgZHN0LnJlc29sdmVTbGljZSAg
ICAgID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBs
YW5lID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBkc3Qu
dGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSk7Ci0gICAgICAgIGRzdC5sZXZlbCAgID0gc3Jj
LmxldmVsLmdldCgpOworICAgICAgICBkc3QudGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgp
KTsKKyAgICAgICAgZHN0LmxldmVsICAgPSBzcmMubGV2ZWwoKS5nZXQoKTsKICAgICAgICAgaWYg
KGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBlM0QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aDsKKyAgICAgICAg
ICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0
LnNsaWNlICAgICAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAg
ZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAgICAgICAgICBkc3QuZGVw
dGhQbGFuZSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlICAgID0g
bmlsOwpAQCAtMjMxLDI2ICsyMzIsMjYgQEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnRE
ZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAogICAgIEFOR0xF
X09CSkNfQ1BfUFJPUEVSVFkoZHN0LCBzcmMsIHN0b3JlQWN0aW9uT3B0aW9ucyk7CiB9CiAKLXZv
aWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZkZXNjLAotICAg
ICAgICAgICAgTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNj
KQordm9pZCBUb09iakMoTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9i
akNEZXNjLAorICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2Mg
JmRlc2MpCiB7Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhkZXNjLCBv
YmpDRGVzYyk7CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVz
YywgZGVzYyk7CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBkZXNjLCBj
bGVhckNvbG9yKTsKIH0KIAotdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNo
bWVudERlc2MgJmRlc2MsCi0gICAgICAgICAgICBNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50
RGVzY3JpcHRvciAqb2JqQ0Rlc2MpCit2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRh
Y2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MsCisgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNz
RGVwdGhBdHRhY2htZW50RGVzYyAmZGVzYykKIHsKLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNjKTsKKyAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKIAogICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVS
VFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOwogfQogCi12b2lkIFRvT2JqQyhjb25zdCBS
ZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAotICAgICAgICAgICAgTVRMUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MpCit2b2lkIFRvT2Jq
QyhNVExSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCiB7
Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhkZXNjLCBvYmpDRGVzYyk7
CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVzYyk7
CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBkZXNjLCBjbGVhclN0ZW5j
aWwpOwogfQpAQCAtNjk2LDExICs2OTcsNyBAQCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYygpCiAKIHZvaWQgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZXNldCgpCiB7Ci0gICAgdGV4dHVyZS5yZXNldCgpOwotICAgIGltcGxpY2l0TVNUZXh0dXJl
LnJlc2V0KCk7Ci0gICAgbGV2ZWwgICAgICAgICAgICAgID0gbXRsOjprWmVyb05hdGl2ZU1pcExl
dmVsOwotICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7Ci0gICAgYmxlbmRhYmxlICAgICAgICAg
ID0gZmFsc2U7CisgICAgcmVuZGVyVGFyZ2V0ICAgICAgID0gbnVsbHB0cjsKICAgICBsb2FkQWN0
aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKICAgICBzdG9yZUFjdGlvbiAgICAgICAg
PSBNVExTdG9yZUFjdGlvblN0b3JlOwogICAgIHN0b3JlQWN0aW9uT3B0aW9ucyA9IE1UTFN0b3Jl
QWN0aW9uT3B0aW9uTm9uZTsKQEAgLTcwOSw4ICs3MDYsOSBAQCB2b2lkIFJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6cmVzZXQoKQogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmVxdWFs
SWdub3JlTG9hZFN0b3JlT3B0aW9ucygKICAgICBjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERl
c2MgJm90aGVyKSBjb25zdAogewotICAgIHJldHVybiB0ZXh0dXJlID09IG90aGVyLnRleHR1cmUg
JiYgaW1wbGljaXRNU1RleHR1cmUgPT0gb3RoZXIuaW1wbGljaXRNU1RleHR1cmUgJiYKLSAgICAg
ICAgICAgbGV2ZWwgPT0gb3RoZXIubGV2ZWwgJiYgc2xpY2VPckRlcHRoID09IG90aGVyLnNsaWNl
T3JEZXB0aDsKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8
fAorICAgICAgICAgICAodGV4dHVyZSgpID09IG90aGVyLnRleHR1cmUoKSAmJiBsZXZlbCgpID09
IG90aGVyLmxldmVsKCkgJiYKKyAgICAgICAgICAgIHNsaWNlT3JEZXB0aCgpID09IG90aGVyLnNs
aWNlT3JEZXB0aCgpKTsKIH0KIAogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6Om9wZXJh
dG9yPT0oY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3QKQEAgLTcy
Myw2ICs3MjEsMzAgQEAgYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6Om9wZXJhdG9yPT0o
Y29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikKICAgICByZXR1cm4gbG9hZEFj
dGlvbiA9PSBvdGhlci5sb2FkQWN0aW9uICYmIHN0b3JlQWN0aW9uID09IG90aGVyLnN0b3JlQWN0
aW9uICYmCiAgICAgICAgICAgIHN0b3JlQWN0aW9uT3B0aW9ucyA9PSBvdGhlci5zdG9yZUFjdGlv
bk9wdGlvbnM7CiB9CisvLyBDb252ZXJ0IHRvIE1ldGFsIG9iamVjdAordm9pZCBSZW5kZXJQYXNz
RGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVz
YykgY29uc3QKK3sKKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgIHsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgVG9PYmpDKG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0sIGNvbG9y
QXR0YWNobWVudHNbaV0pOworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG51
bUNvbG9yQXR0YWNobWVudHM7IGkgPCBrTWF4UmVuZGVyVGFyZ2V0czsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisgICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUgICAgID0gbmlsOworICAgICAgICAgICAg
b2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sZXZlbCAgICAgICA9IDA7CisgICAgICAgICAg
ICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKyAgICAgICAg
ICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uZGVwdGhQbGFuZSAgPSAwOworICAgICAg
ICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRB
Y3Rpb25Eb250Q2FyZTsKKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0u
c3RvcmVBY3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworICAgICAgICB9CisKKyAgICAg
ICAgVG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKyAg
ICAgICAgVG9PYmpDKG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50LCBzdGVuY2lsQXR0YWNobWVu
dCk7CisgICAgfQorfQogCiB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRlclBpcGVs
aW5lT3V0cHV0RGVzYyhSZW5kZXJQaXBlbGluZU91dHB1dERlc2MgKm91dERlc2MpIGNvbnN0CiB7
CkBAIC03NDIsMTkgKzc2NCwxOSBAQCB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRl
clBpcGVsaW5lT3V0cHV0RGVzYyhNVExDb2xvcldyaXRlTWFzayBjb2xvcldyaQogdm9pZCBSZW5k
ZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoY29uc3QgQmxlbmRE
ZXNjICZibGVuZFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAog
ewotICAgIFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAmb3V0cHV0RGVzY3JpcHRvciA9ICpvdXRE
ZXNjOwotICAgIG91dHB1dERlc2NyaXB0b3IubnVtQ29sb3JBdHRhY2htZW50cyAgICAgICA9IHRo
aXMtPm51bUNvbG9yQXR0YWNobWVudHM7Ci0gICAgb3V0cHV0RGVzY3JpcHRvci5zYW1wbGVDb3Vu
dCAgICAgICAgICAgICAgID0gdGhpcy0+c2FtcGxlQ291bnQ7CisgICAgYXV0byAmb3V0cHV0RGVz
Y3JpcHRvciAgICAgICAgICAgICAgID0gKm91dERlc2M7CisgICAgb3V0cHV0RGVzY3JpcHRvci5u
dW1Db2xvckF0dGFjaG1lbnRzID0gdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50czsKKyAgICBvdXRw
dXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1wbGVDb3VudDsKICAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50czsgKytp
KQogICAgIHsKICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudCA9IHRoaXMt
PmNvbG9yQXR0YWNobWVudHNbaV07Ci0gICAgICAgIGF1dG8gdGV4dHVyZSAgICAgICAgICAgICAg
ICAgICAgPSByZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LnRleHR1cmU7CisgICAgICAgIGF1dG8g
dGV4dHVyZSAgICAgICAgICAgICAgICAgICAgPSByZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LnRl
eHR1cmUoKTsKIAogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgewogICAgICAgICAgICAg
Ly8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUKICAgICAgICAgICAgIG91dHB1dERl
c2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS51cGRhdGUoYmxlbmRTdGF0ZSk7Ci0gICAgICAg
ICAgICBpZiAoIXJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQuYmxlbmRhYmxlKQorICAgICAgICAg
ICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LmJsZW5kYWJsZSgpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYmxlbmRpbmcgaWYgdGhlIGF0dGFjaG1l
bnQncyByZW5kZXIgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBibGVuZGluZy4KICAgICAgICAgICAg
ICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0uYmxlbmRpbmdFbmFibGVk
ID0gZmFsc2U7CkBAIC03ODEsMTEgKzgwMywxMSBAQCB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1
bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdAog
ICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0ucmVzZXQoKTsKICAg
ICB9CiAKLSAgICBhdXRvIGRlcHRoVGV4dHVyZSA9IHRoaXMtPmRlcHRoQXR0YWNobWVudC50ZXh0
dXJlOworICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2htZW50LnRleHR1
cmUoKTsKICAgICBvdXRwdXREZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ID0K
ICAgICAgICAgZGVwdGhUZXh0dXJlID8gZGVwdGhUZXh0dXJlLT5waXhlbEZvcm1hdCgpIDogTVRM
UGl4ZWxGb3JtYXRJbnZhbGlkOwogCi0gICAgYXV0byBzdGVuY2lsVGV4dHVyZSA9IHRoaXMtPnN0
ZW5jaWxBdHRhY2htZW50LnRleHR1cmU7CisgICAgYXV0byBzdGVuY2lsVGV4dHVyZSA9IHRoaXMt
PnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKTsKICAgICBvdXRwdXREZXNjcmlwdG9yLnN0ZW5j
aWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQogICAgICAgICBzdGVuY2lsVGV4dHVyZSA/IHN0ZW5j
aWxUZXh0dXJlLT5waXhlbEZvcm1hdCgpIDogTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwogfQpAQCAt
ODMxLDQyICs4NTMsMjEgQEAgYm9vbCBSZW5kZXJQYXNzRGVzYzo6b3BlcmF0b3I9PShjb25zdCBS
ZW5kZXJQYXNzRGVzYyAmb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGRlcHRoQXR0YWNobWVudCA9
PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0gb3RoZXIuc3Rl
bmNpbEF0dGFjaG1lbnQ7CiB9CiAKLS8vIENvbnZlcnQgdG8gTWV0YWwgb2JqZWN0Ci12b2lkIFJl
bmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERlc2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
Km9iakNEZXNjKSBjb25zdAotewotICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCi0gICAgewotICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtQ29sb3JBdHRhY2htZW50czsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBUb09iakMoY29sb3JBdHRhY2htZW50c1tpXSwgb2JqQ0Rl
c2MuY29sb3JBdHRhY2htZW50c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhSZW5kZXJUYXJnZXRzOyArK2kpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluYWN0aXZlIHJlbmRlciB0YXJnZXQKLSAgICAgICAg
ICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAgICAgPSBuaWw7Ci0gICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKLSAg
ICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc2xpY2UgICAgICAgPSAwOwot
ICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7
Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0g
TVRMTG9hZEFjdGlvbkRvbnRDYXJlOwotICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zdG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uRG9udENhcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICBUb09iakMoZGVwdGhBdHRhY2htZW50LCBvYmpDRGVzYy5kZXB0aEF0dGFjaG1l
bnQpOwotICAgICAgICBUb09iakMoc3RlbmNpbEF0dGFjaG1lbnQsIG9iakNEZXNjLnN0ZW5jaWxB
dHRhY2htZW50KTsKLSAgICB9Ci19Ci0KIC8vIFJlbmRlclBpcGVsaW5lQ2FjaGUgaW1wbGVtZW50
YXRpb24KLVJlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJlbmRl
clBpcGVsaW5lQ2FjaGUobnVsbHB0cikge30KK1JlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBp
cGVsaW5lQ2FjaGUoKSA6IFJlbmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikgeworfQogCiBSZW5k
ZXJQaXBlbGluZUNhY2hlOjpSZW5kZXJQaXBlbGluZUNhY2hlKAogICAgIFJlbmRlclBpcGVsaW5l
Q2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqc3BlY2lhbGl6ZWRTaGFkZXJGYWN0b3J5KQog
ICAgIDogbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeShzcGVjaWFsaXplZFNoYWRlckZhY3Rvcnkp
Ci17fQoreworCit9CiAKIFJlbmRlclBpcGVsaW5lQ2FjaGU6On5SZW5kZXJQaXBlbGluZUNhY2hl
KCkge30KIAotdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4
dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3ZvaWQgUmVuZGVyUGlwZWxpbmVD
YWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQogewogICAg
IG1WZXJ0ZXhTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CiAKQEAgLTg3OSw3ICs4ODAsOCBA
QCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldFZlcnRleFNoYWRlcihDb250ZXh0ICpjb250
ZXh0LCBpZDxNVExGdW5jdGlvbj4gc2hhZAogICAgIHJlY3JlYXRlUGlwZWxpbmVTdGF0ZXMoY29u
dGV4dCk7CiB9CiAKLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIo
Q29udGV4dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3ZvaWQgUmVuZGVyUGlw
ZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRl
cikKIHsKICAgICBtRnJhZ21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CiAKQEAgLTky
OSwxMCArOTMxLDYgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJl
bmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW4KIHsKICAgICBBdXRvT2JqQ1B0
cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gbmV3U3RhdGUgPQogICAgICAgICBjcmVhdGVS
ZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIGRlc2MsIGluc2VydERlZmF1bHRBdHRyaWJMYXlv
dXQpOwotICAgIGlmICghbmV3U3RhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KIAogICAgIGludCB0YWJsZUlkeCA9IGluc2VydERlZmF1bHRBdHRyaWJMYXlvdXQgPyAxIDog
MDsKICAgICBhdXRvIHJlICAgICAgPSBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbdGFibGVJZHhdLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBuZXdTdGF0ZSkpOwpAQCAtOTQ0LDYgKzk0Miw3IEBA
IEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5kZXJQaXBlbGluZUNh
Y2hlOjppbnNlcnRSZW5kZXJQaXBlbGluCiAgICAgcmV0dXJuIHJlLmZpcnN0LT5zZWNvbmQ7CiB9
CiAKKwogQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVs
aW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCiAgICAgQ29udGV4dCAqY29udGV4
dCwKICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJm9yaWdpbmFsRGVzYywKQEAgLTk1OSw3
ICs5NTgsNiBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVy
UGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbgogICAgICAgICAgICAgZGVzYy5lbXVs
YXRlQ292ZXJhZ2VNYXNrICAgID0gZmFsc2U7CiAgICAgICAgICAgICBkZXNjLmFscGhhVG9Db3Zl
cmFnZUVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgfQotCiAgICAgICAgIC8vIENob29zZSBzaGFk
ZXIgdmFyaWFudAogICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKICAg
ICAgICAgaWQ8TVRMRnVuY3Rpb24+IGZyYWdTaGFkZXIgPSBuaWw7CkBAIC0xMDA0LDcgKzEwMDIs
MjUgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVs
aW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW4KIAogICAgICAgICAvLyBDb252ZXJ0IHRvIE9i
amVjdGl2ZS1DIGRlc2M6CiAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakModmVydFNoYWRlciwgZnJhZ1NoYWRlciwgZGVzYyk7
Ci0KKyAgICAgICAgLy8gVmFsaWRhdGUgUmVuZGVyIFBpcGVsaW5lIFN0YXRlOgorICAgICAgICBp
ZiAoRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2UpKQorICAgICAg
ICB7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIG1heFNpemUgPSBHZXRNYXhSZW5kZXJUYXJnZXRT
aXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2Vy
IHJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2Vk
Rm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERl
dmljZSk7CisgICAgICAgICAgICBpZiAocmVuZGVyVGFyZ2V0U2l6ZSA+IG1heFNpemUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAg
ICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJUaGlzIHNldCBvZiBy
ZW5kZXIgdGFyZ2V0cyByZXF1aXJlcyAlbHUgYnl0ZXMgb2YgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAInBpeGVsIHN0b3JhZ2UuIFRoaXMgZGV2aWNl
IHN1cHBvcnRzICVsdSBieXRlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKyAgICAgICAgICAgICAg
ICBOU0Vycm9yICplcnIgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJNVExWYWxpZGF0aW9u
RXJyb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlOi0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+aGFuZGxlRXJyb3IoZXJyLCBfX0ZJTEVfXywgQU5HTEVf
RlVOQ1RJT04sIF9fTElORV9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIC8vIFNwZWNpYWwgYXR0cmlidXRlIHNsb3QgZm9y
IGRlZmF1bHQgYXR0cmlidXRlCiAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0
KQogICAgICAgICB7CkBAIC0xMDMyLDYgKzEwNDgsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxp
bgogICAgIH0KIH0KIAorCiB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnJlY3JlYXRlUGlwZWxp
bmVTdGF0ZXMoQ29udGV4dCAqY29udGV4dCkKIHsKICAgICBmb3IgKGludCBoYXNEZWZhdWx0QXR0
cmliID0gMDsgaGFzRGVmYXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCkBAIC0x
MDYyLDcgKzEwNzksNyBAQCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNsZWFyUGlwZWxpbmVT
dGF0ZXMoKQogfQogCiAvLyBTdGF0ZUNhY2hlIGltcGxlbWVudGF0aW9uCi1TdGF0ZUNhY2hlOjpT
dGF0ZUNhY2hlKCkge30KK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3QgYW5nbGU6OkZlYXR1
cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CiAKIFN0YXRlQ2FjaGU6
On5TdGF0ZUNhY2hlKCkge30KIApAQCAtMTExMyw2ICsxMTMwLDExIEBAIEF1dG9PYmpDUHRyPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+IFN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZShpZDxNVExEZXZp
Y2U+IG1ldGFsCiAgICAgICAgIGlmIChpdGUgPT0gbVNhbXBsZXJTdGF0ZXMuZW5kKCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFNhbXBsZXJEZXNjcmlwdG9yPiBvYmpD
RGVzYyA9IFRvT2JqQyhkZXNjKTsKKyAgICAgICAgICAgIGlmICghbUZlYXR1cmVzLmFsbG93UnVu
dGltZVNhbXBsZXJDb21wYXJlTW9kZS5lbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIFJ1bnRpbWUgc2FtcGxlciBjb21wYXJlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwg
ZmFsbGJhY2sgdG8gbmV2ZXIuCisgICAgICAgICAgICAgICAgb2JqQ0Rlc2MuZ2V0KCkuY29tcGFy
ZUZ1bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uTmV2ZXI7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBBdXRvT2JqQ1B0cjxpZDxNVExTYW1wbGVyU3RhdGU+PiBuZXdTdGF0ZSA9CiAgICAg
ICAgICAgICAgICAgW1ttZXRhbERldmljZSBuZXdTYW1wbGVyU3RhdGVXaXRoRGVzY3JpcHRvcjpv
YmpDRGVzY10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91
dGlscy5oCmluZGV4IGE4NGFjNzNlYTAzM2ZhNmJlNGZmMjQxNDZkNTBlY2RjZGJjYzhkNzAuLjgw
NTcyOWU1OTUyNDZmMDQwY2Y1YWM0NjUwZDJlYjhmMDA5NmY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3V0aWxzLmgKQEAgLTEzNSwxNSArMTM1LDMwIEBAIE1UTFRleHR1cmVTd2l6emxlIEdl
dFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6emxlKTsKIAogLy8gR2V0IGNvbG9yIHdyaXRlIG1h
c2sgZm9yIGEgc3BlY2lmaWVkIGZvcm1hdC4gU29tZSBmb3JtYXRzIHN1Y2ggYXMgUkdCNTY1IGRv
ZXNuJ3QgaGF2ZSBhbHBoYQogLy8gY2hhbm5lbCBidXQgaXMgZW11bGF0ZWQgYnkgYSBSR0JBOCBm
b3JtYXQsIHdlIG5lZWQgdG8gZGlzYWJsZSBhbHBoYSB3cml0ZSBmb3IgdGhpcyBmb3JtYXQuCi0v
LyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQsIHRoaXMgcG9p
bnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxh
dGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNG
b3JtYXRFbXVsYXRlZCk7CisvLyAtIGVtdWxhdGVkQ2hhbm5lbHNPdXQ6IGlmIHRoZSBmb3JtYXQg
aXMgZW11bGF0ZWQsIHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KK01UTENv
bG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQg
Jm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqZW11bGF0ZWRDaGFubmVsc091dCk7CiBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRl
ZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpOwogYm9vbCBJc0Zv
cm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpOwogCitOU1VJbnRlZ2Vy
IEdldE1heFJlbmRlclRhcmdldFNpemVGb3JEZXZpY2VJbkJ5dGVzKGlkPE1UTERldmljZT4gZGV2
aWNlKTsKK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKK2Jvb2wgRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNp
emUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCiAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNvbG9y
IGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFja2Vu
ZCdzIGZvcm1hdAogLy8gaGFzIGFscGhhIGNoYW5uZWwuCiBNVExDbGVhckNvbG9yIEVtdWxhdGVk
QWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29sb3IgY29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNv
bG9yTWFzayk7CiAKKworTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRl
clBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpkZXNjcmlwdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCitO
U1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKAorICAgIGNvbnN0IE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwK
KyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorICAgIGlkPE1UTERldmljZT4gZGV2aWNlKTsK
KwogZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsK
IAogTWlwbWFwTmF0aXZlTGV2ZWwgR2V0TmF0aXZlTWlwTGV2ZWwoR0x1aW50IGxldmVsLCBHTHVp
bnQgYmFzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5tbQppbmRleCAwNzZlNjA5OGMz
YTI2MzBkOWUxYWYwNzgwY2U2N2FlMjZhMDIxZDhjLi4wMDlhZjVhZTZjMTNhM2I3OTI0YTI5ZTdj
NzIzZTc0NjM1MTY4NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KQEAgLTEw
LDkgKzEwLDExIEBACiAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRp
bHMuaCIKIAorI2luY2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgogI2luY2x1ZGUgPFRhcmdldENvbmRp
dGlvbmFscy5oPgogCiAjaW5jbHVkZSAiY29tbW9uL01lbW9yeUJ1ZmZlci5oIgorI2luY2x1ZGUg
ImNvbW1vbi9zeXN0ZW1fdXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm8uaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgpAQCAtMjQsNiAr
MjYsOCBAQCBuYW1lc3BhY2UgcngKIG5hbWVzcGFjZSBtdGwKIHsKIAorY29uc3RleHByIGNoYXIg
a0FOR0xFUHJpbnRNU0xFbnZbXSA9ICJBTkdMRV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKwog
bmFtZXNwYWNlCiB7CiAKQEAgLTEwMywyNCArMTA3LDQzIEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlh
bGl6ZVRleHR1cmVDb250ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZp
bmRleCkKIHsKICAgICBBU1NFUlQodGV4dHVyZSAmJiB0ZXh0dXJlLT52YWxpZCgpKTsKLSAgICAv
LyBPbmx5IG9uZSBzbGljZSBjYW4gYmUgaW5pdGlhbGl6ZWQgYXQgYSB0aW1lLgotICAgIEFTU0VS
VCghaW5kZXguaXNMYXllcmVkKCkgfHwgaW5kZXguZ2V0VHlwZSgpID09IGdsOjpUZXh0dXJlVHlw
ZTo6XzNEKTsKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRl
eHQpOwogCisgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmYWN0dWFsQW5nbGVGb3JtYXQgICAgICAg
ICAgID0gdGV4dHVyZU9iakZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpOwogICAgIGNvbnN0IGds
OjpJbnRlcm5hbEZvcm1hdCAmaW50ZW5kZWRJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmVPYmpGb3Jt
YXQuaW50ZW5kZWRJbnRlcm5hbEZvcm1hdCgpOwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgaW4gbWFueSBwbGFjZXMgdG8gaW5pdGlhbGl6ZSB0aGUgY29udGVudCBvZiBhIHRleHR1
cmUuCi0gICAgLy8gU28gaXQncyBiZXR0ZXIgd2UgZG8gdGhlIGluaXRpYWwgY2hlY2sgaGVyZSBp
bnN0ZWFkIG9mIGxldCB0aGUgY2FsbGVycyBkbyBpdCB0aGVtc2VsdmVzOgotICAgIGlmICghdGV4
dHVyZU9iakZvcm1hdC52YWxpZCgpIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3Nl
ZCkKKyAgICAvLyBTbyBpdCdzIGJldHRlciB3ZSBkbyB0aGUgc2FuaXR5IGNoZWNrIGhlcmUgaW5z
dGVhZCBvZiBsZXQgdGhlIGNhbGxlcnMgZG8gaXQgdGhlbXNlbHZlczoKKyAgICBpZiAoIXRleHR1
cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBhY3R1YWxBbmdsZUZvcm1hdC5pc0Jsb2NrIHx8IGFjdHVh
bEFuZ2xlRm9ybWF0LmRlcHRoQml0cyA+IDAgfHwKKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQu
c3RlbmNpbEJpdHMgPiAwKQogICAgIHsKKyAgICAgICAgLy8gSWYgZHN0IGZvcm1hdCBpcyBjb21w
cmVzc2VkLCBpZ25vcmUuCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
ICAgICB9CiAKICAgICBnbDo6RXh0ZW50cyBzaXplID0gdGV4dHVyZS0+c2l6ZShpbmRleCk7CiAK
LSAgICAvLyBJbnRpaWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCi0gICAgR0xpbnQgbGF5ZXIs
IHN0YXJ0RGVwdGg7Ci0gICAgR2V0U2xpY2VBbmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnRE
ZXB0aCk7CisgICAgLy8gSW50aWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCisgICAgR0xpbnQg
bGF5ZXIgICAgICA9IDA7CisgICAgR0xpbnQgc3RhcnREZXB0aCA9IDA7CisgICAgaWYgKGluZGV4
Lmhhc0xheWVyKCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVyZVR5cGU6OkN1YmVNYXA6CisgICAg
ICAgICAgICAgICAgbGF5ZXIgPSBpbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXk6
CisgICAgICAgICAgICAgICAgbGF5ZXIgPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6XzNEOgor
ICAgICAgICAgICAgICAgIHN0YXJ0RGVwdGggPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CiAKICAgICBpZiAodGV4dHVyZS0+aXNDUFVBY2Nlc3NpYmxlKCkgJiYgaW5kZXguZ2V0VHlwZSgp
ICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGUgJiYKICAgICAgICAgaW5kZXguZ2V0
VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGVBcnJheSkKQEAgLTEzNiw2
ICsxNTksMTMgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAg
eworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LnZhbGlkKCkgfHwgaW50ZW5kZWRJ
bnRlcm5hbEZvcm1hdC5jb21wcmVzc2VkIHx8CisgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRl
cm5hbEZvcm1hdC5kZXB0aEJpdHMgPiAwIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNp
bEJpdHMgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIElmIHNvdXJjZSBm
b3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3JlLgorICAgICAgICAgICAgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29uc3Qg
YW5nbGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0gYW5nbGU6OkZvcm1hdDo6R2V0KAogICAgICAgICAg
ICAgICAgIGludGVuZGVkSW50ZXJuYWxGb3JtYXQuYWxwaGFCaXRzID4gMCA/IGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOEI4QThfVU5PUk0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOF9VTk9STSk7CkBAIC0x
NjIsMTAgKzE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0IEluaXRpYWxpemVUZXh0dXJlQ29udGVudHMo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgICAgICAgICAvLyBVcGxvYWQg
dG8gdGV4dHVyZQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlcGxhY2UyRFJlZ2lvbihjb250
ZXh0TXRsLCBtdGxSb3dSZWdpb24sIGluZGV4LmdldE5hdGl2ZUxldmVsKCksIGxheWVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uUm93LmRhdGEo
KSwgZHN0Um93UGl0Y2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVyc2lvblJvdy5kYXRhKCksIGRzdFJvd1BpdGNoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgIH0KKyAgICB9ICAvLyBpZiAodGV4dHVyZS0+aXNDUFVBY2Nlc3NpYmxlKCkpCiAg
ICAgZWxzZQogICAgIHsKICAgICAgICAgQU5HTEVfVFJZKEluaXRpYWxpemVUZXh0dXJlQ29udGVu
dHNHUFUoY29udGV4dCwgdGV4dHVyZSwgdGV4dHVyZU9iakZvcm1hdCwgaW5kZXgsCkBAIC0yMTAs
NyArMjQwLDcgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIFJlbmRlclRhcmdldE10bCB0ZW1wUnR0Owog
ICAgIHRlbXBSdHQuc2V0KHRleHR1cmUsIGluZGV4LmdldE5hdGl2ZUxldmVsKCksIHNsaWNlT3JE
ZXB0aCwgdGV4dHVyZU9iakZvcm1hdCk7CiAKLSAgICBpbnQgY2xlYXJBbHBoYSA9IDA7CisgICAg
ZmxvYXQgY2xlYXJBbHBoYSA9IDA7CiAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVk
QW5nbGVGb3JtYXQoKS5hbHBoYUJpdHMpCiAgICAgewogICAgICAgICAvLyBpZiBpbnRlbmRlZCBm
b3JtYXQgZG9lc24ndCBoYXZlIGFscGhhLCBzZXQgaXQgdG8gMS4wLgpAQCAtMjQwLDExICsyNzAs
MTEgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICBDbGVhckNvbG9yVmFsdWUgY2xlYXJDb2xvcjsK
ICAgICAgICAgaWYgKGFuZ2xlRm9ybWF0LmlzU2ludCgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjbGVhckNvbG9yLnNldEFzSW50KDAsIDAsIDAsIGNsZWFyQWxwaGEpOworICAgICAgICAgICAg
Y2xlYXJDb2xvci5zZXRBc0ludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKGFuZ2xlRm9ybWF0LmlzVWludCgpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjbGVhckNvbG9yLnNldEFzVUludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKyAgICAg
ICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0yODMsMTcgKzMxMywxNyBAQCBh
bmdsZTo6UmVzdWx0IEluaXRpYWxpemVEZXB0aFN0ZW5jaWxUZXh0dXJlQ29udGVudHNHUFUoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleAogICAgIHJwRGVzYy5zYW1wbGVDb3VudCA9IHRleHR1cmUt
PnNhbXBsZXMoKTsKICAgICBpZiAoYW5nbGVGb3JtYXQuZGVwdGhCaXRzKQogICAgIHsKLSAgICAg
ICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOwotICAgICAg
ICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOwotICAgICAgICBy
cERlc2MuZGVwdGhBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAgICBycERl
c2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+dGV4dHVyZSAgICAgID0gdGV4dHVyZTsK
KyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAg
ICA9IGxldmVsOworICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+
c2xpY2VPckRlcHRoID0gbGF5ZXI7CiAgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQubG9h
ZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNsZWFyOwogICAgICAgICBycERlc2MuZGVwdGhBdHRh
Y2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsKICAgICB9CiAgICAgaWYgKGFuZ2xlRm9ybWF0LnN0
ZW5jaWxCaXRzKQogICAgIHsKLSAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1
cmUgICAgICA9IHRleHR1cmU7Ci0gICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sZXZl
bCAgICAgICAgPSBsZXZlbDsKLSAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNl
T3JEZXB0aCA9IGxheWVyOworICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVy
VGFyZ2V0LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworICAgICAgICBycERlc2Muc3RlbmNpbEF0
dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKyAgICAgICAgcnBE
ZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7
CiAgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2Fk
QWN0aW9uQ2xlYXI7CiAgICAgfQogCkBAIC00NTYsNiArNDg2LDMwIEBAIEF1dG9PYmpDUHRyPGlk
PE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsCiAgICAgcmV0dXJuIENyZWF0ZVNoYWRlckxpYnJhcnkobWV0YWxEZXZpY2UsIHNvdXJjZS5j
X3N0cigpLCBzb3VyY2Uuc2l6ZSgpLCBlcnJvcik7CiB9CiAKKyNpZiAwCitzdGF0aWMgTVRMTGFu
Z3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBwb3J0ZWRNU0xWZXJzaW9uKCkKK3sKKyAgICAvLyBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxsYW5ndWFn
ZXZlcnNpb24/bGFuZ3VhZ2U9b2JqYworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJ
KDExLjAsIDE0LjAsIDE0LjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8z
OworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMy4wKSkK
KyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMjsKKyAgICBpZiAoQU5HTEVfQVBQ
TEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTIuMCkpCisgICAgICAgIHJldHVybiBNVExM
YW5ndWFnZVZlcnNpb24yXzE7CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTMsIDEzLjAsIDExLjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8wOwor
ICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjEyLCAxMy4wLCAxMC4wKSkKKyAg
ICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjFfMjsKKyAgICBpZiAoQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX1hDSSgxMC4xMSwgMTMuMCwgOS4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1
YWdlVmVyc2lvbjFfMTsKKyMgICAgaWYgVEFSR0VUX09TX0lPUworICAgIGlmIChBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfSSg5LjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8w
OworIyAgICBlbmRpZgorICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzE7Cit9CisjZW5k
aWYKKwogQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IENyZWF0ZVNoYWRlckxpYnJhcnkoaWQ8
TVRMRGV2aWNlPiBtZXRhbERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VMZW4sCkBAIC00NjksOCAr
NTIzLDI1IEBAIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5
KGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5E
b25lOk5PXTsKICAgICAgICAgYXV0byBvcHRpb25zICAgICA9IFtbW01UTENvbXBpbGVPcHRpb25z
IGFsbG9jXSBpbml0XSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAvLyBNYXJrIGFs
bCBwb3NpdGlvbnMgaW4gVlMgd2l0aCBhdHRyaWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6
YWJsZQorI2lmIChkZWZpbmVkKF9fTUFDXzExXzApICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhf
QUxMT1dFRCA+PSBfX01BQ18xMV8wKSB8fCAgICAgICAgXAorICAgIChkZWZpbmVkKF9fSVBIT05F
XzE0XzApICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19JUEhPTkVfMTRf
MCkgfHwgXAorICAgIChkZWZpbmVkKF9fVFZPU18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gX19UVk9TXzE0XzApCisgICAgICAgIG9wdGlvbnMucHJlc2VydmVJbnZhcmlh
bmNlID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgIC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFp
bGFibGUgY29tcGlsaW5nIGZyb20gc291cmNlLCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisg
ICAgICAgIG9wdGlvbnMuZmFzdE1hdGhFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAg
Ly8gVE9ETyhqY3VubmluZ2hhbSk6IHdvcmthcm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJl
c2VydmluZyBpbnZhcmlhbmNlIG9uIGFsbCBzaGFkZXJzCisgICAgICAgIGlmIChbbWV0YWxEZXZp
Y2UubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOwor
ICAgICAgICB9CiAgICAgICAgIGF1dG8gbGlicmFyeSA9IFttZXRhbERldmljZSBuZXdMaWJyYXJ5
V2l0aFNvdXJjZTpuc1NvdXJjZSBvcHRpb25zOm9wdGlvbnMgZXJyb3I6Jm5zRXJyb3JdOwotCisg
ICAgICAgIGlmIChhbmdsZTo6R2V0RW52aXJvbm1lbnRWYXIoa0FOR0xFUHJpbnRNU0xFbnYpWzBd
ID09ICcxJykKKyAgICAgICAgeworICAgICAgICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2Up
OworICAgICAgICB9CiAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOwog
CiAgICAgICAgICplcnJvck91dCA9IHN0ZDo6bW92ZShuc0Vycm9yKTsKQEAgLTc3MiwxNSArODQz
LDE1IEBAIE1UTFRleHR1cmVTd2l6emxlIEdldFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6emxl
KQogfQogI2VuZGlmCiAKLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1h
c2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91dCkKK01U
TENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3Jt
YXQgJm10bEZvcm1hdCwgYm9vbCAqZW11bGF0ZWRDaGFubmVsc091dCkKIHsKICAgICBjb25zdCBh
bmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1hdCA9IG10bEZvcm1hdC5pbnRlbmRlZEFuZ2xlRm9y
bWF0KCk7CiAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmYWN0dWFsRm9ybWF0ICAgPSBtdGxGb3Jt
YXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKLSAgICBib29sIGlzRm9ybWF0RW11bGF0ZWQgICAgICAg
ICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyAgICAgICAgICAgICAg
ID0gZmFsc2U7CiAgICAgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JXcml0YWJsZU1hc2sgPSBNVExD
b2xvcldyaXRlTWFza0FsbDsKICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYWxwaGFCaXRzID09IDAg
JiYgYWN0dWFsRm9ybWF0LmFscGhhQml0cykKICAgICB7Ci0gICAgICAgIGlzRm9ybWF0RW11bGF0
ZWQgPSB0cnVlOworICAgICAgICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAgICAgLy8g
RGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlzIHRleHR1cmUKICAgICAgICAgY29sb3JXcml0YWJs
ZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSk7CiAg
ICAgfQpAQCAtNzg4LDQxICs4NTksNDEgQEAgTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LCBib29sICoKICAgICB7
CiAgICAgICAgIGlmIChpbnRlbmRlZEZvcm1hdC5yZWRCaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0
LnJlZEJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRydWU7CiAgICAgICAgICAgICAvLyBE
aXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRleHR1cmUKICAgICAgICAgICAgIGNvbG9yV3JpdGFi
bGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrUmVkKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0
dWFsRm9ybWF0LmdyZWVuQml0cykKICAgICAgICAgewotICAgICAgICAgICAgaXNGb3JtYXRFbXVs
YXRlZCA9IHRydWU7CisgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAg
ICAgICAgIC8vIERpc2FibGUgZ3JlZW4gd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgICAg
ICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRl
TWFza0dyZWVuKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYmx1ZUJp
dHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYmx1ZUJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9
IHRydWU7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIGJsdWUgd3JpdGUgdG8gdGhpcyB0ZXh0dXJl
CiAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5N
VExDb2xvcldyaXRlTWFza0JsdWUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgKmlzRW11bGF0
ZWRPdXQgPSBpc0Zvcm1hdEVtdWxhdGVkOworICAgICplbXVsYXRlZENoYW5uZWxzT3V0ID0gZW11
bGF0ZWRDaGFubmVsczsKIAogICAgIHJldHVybiBjb2xvcldyaXRhYmxlTWFzazsKIH0KIAogTVRM
Q29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1h
dCAmbXRsRm9ybWF0KQogewotICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4g
dmFsdWUKLSAgICBib29sIGlzRm9ybWF0RW11bGF0ZWQ7Ci0gICAgcmV0dXJuIEdldEVtdWxhdGVk
Q29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmaXNGb3JtYXRFbXVsYXRlZCk7CisgICAgLy8gSWdu
b3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorICAgIGJvb2wgZW11bGF0ZWRDaGFu
bmVsczsKKyAgICByZXR1cm4gR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZl
bXVsYXRlZENoYW5uZWxzKTsKIH0KIAogYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6
Rm9ybWF0ICZtdGxGb3JtYXQpCiB7Ci0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOwotICAgICh2
b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmaXNGb3JtYXRFbXVsYXRl
ZCk7Ci0gICAgcmV0dXJuIGlzRm9ybWF0RW11bGF0ZWQ7CisgICAgYm9vbCBlbXVsYXRlZENoYW5u
ZWxzOworICAgICh2b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmZW11
bGF0ZWRDaGFubmVscyk7CisgICAgcmV0dXJuIGVtdWxhdGVkQ2hhbm5lbHM7CiB9CiAKIE1UTENs
ZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRM
Q29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQpAQCAtODM3LDYgKzkwOCwxNTEgQEAgTVRMQ2xlYXJD
b2xvciBFbXVsYXRlZEFscGhhQ2xlYXJDb2xvcihNVExDbGVhckNvbG9yIGNvbG9yLCBNVExDb2xv
cldyaXRlTWFzayBjb2wKICAgICByZXR1cm4gcmU7CiB9CiAKK05TVUludGVnZXIgR2V0TWF4UmVu
ZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7Cisg
ICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU0XSkKKyAgICB7
CisgICAgICAgIHJldHVybiA2NDsKKyAgICB9CisgICAgZWxzZSBpZiAoW2RldmljZSBzdXBwb3J0
c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTJdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDMyOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTY7CisgICAgfQorfQorCitO
U1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZp
Y2U+IGRldmljZSkKK3sKKyAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1p
bHlBcHBsZTJdIHx8IFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5TWFjMV0pCisg
ICAgeworICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgfQorfQorCitib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRT
aXplKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRz
RmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMV07Cit9CisKK3N0YXRpYyBOU1VJbnRlZ2VyIGdldE5l
eHRMb2NhdGlvbkZvckZvcm1hdChjb25zdCBGb3JtYXRDYXBzICZjYXBzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRh
cmdldFNpemUpCit7CisgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworICAgIHVpbnQ4X3Qg
YWxpZ25tZW50ICAgICAgICAgPSBjYXBzLmFsaWdubWVudDsKKyAgICBOU1VJbnRlZ2VyIHBpeGVs
Qnl0ZXMgICAgID0gY2Fwcy5waXhlbEJ5dGVzOworICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlc01T
QUEgPSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworICAgIHBpeGVsQnl0ZXMgICAgICAgICAgICAgICAg
PSBpc01TQUEgPyBwaXhlbEJ5dGVzTVNBQSA6IHBpeGVsQnl0ZXM7CisKKyAgICBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1lbnQgLSAx
KSkgJiB+KGFsaWdubWVudCAtIDEpOworICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplICs9IHBp
eGVsQnl0ZXM7CisgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplOworfQorCitOU1VJ
bnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IoY29u
c3QgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBOU1VJbnRlZ2VyIGN1cnJl
bnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAg
eworICAgICAgICBNVExQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IGRlc2NyaXB0b3IuY29sb3JB
dHRhY2htZW50c1tpXS50ZXh0dXJlLnBpeGVsRm9ybWF0OworICAgICAgICBib29sIGlzTXNhYSAg
ICAgICAgICAgICAgICA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLnNh
bXBsZUNvdW50ID4gMTsKKyAgICAgICAgaWYgKHBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0
SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9
IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhwaXhlbEZvcm1hdCk7
CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAg
Z2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdl
dFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0ID09CisgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0
dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIGJvb2wgaXNNc2Fh
ID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7Cisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
Rm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0
Q2FwcygKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJl
LnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKyAg
ICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3Jt
YXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBib29s
IGlzTXNhYSAgICAgICAgICAgID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5z
YW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29u
dGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworICAgICAg
ICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRM
b2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0
dXJlLnBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFj
aG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRD
YXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhl
bEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAg
ICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJl
bmRlclRhcmdldFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZTsKK30KK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExS
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoCisgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yLAorICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgaWQ8
TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgTlNVSW50ZWdlciBjdXJyZW50UmVuZGVyVGFyZ2V0
U2l6ZSA9IDA7CisgICAgYm9vbCBpc01zYWEgICAgICAgICAgICAgICAgICAgICAgICA9IGRlc2Ny
aXB0b3Iuc2FtcGxlQ291bnQgPiAxOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdl
dE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgewor
ICAgICAgICBNVExSZW5kZXJQaXBlbGluZUNvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKmNvbG9y
ID0gZGVzY3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldOworICAgICAgICBpZiAoY29sb3IucGl4
ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRp
dmVGb3JtYXRDYXBzKGNvbG9yLnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5k
ZXJUYXJnZXRTaXplID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQo
Y2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgPT0gZGVzY3Jp
cHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQorICAgIHsKKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZh
bGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0KKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMo
ZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9y
Rm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0
YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhB
dHRhY2htZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNp
emUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01z
YWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52
YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBz
KGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBj
dXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9u
Rm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKK30KKwogZ2w6
OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQogewogICAg
IHJldHVybiBnbDo6Qm94KHN0YXRpY19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi54KSwgc3Rh
dGljX2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLnkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5t
ZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2JsaXQubWV0YWwKaW5kZXggNDI3MmM0ZjBhODQ4MDA5YTYzMmQ0YWViYzVmYWMx
ZDQ0N2ZmYzJkNy4uMmE5YmI1ZGUzNzQ2YzJjZGFjZjMxZjJlYjEyYTQ5YTMzMTEzNzMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL3NoYWRlcnMvYmxpdC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCkBAIC0zMzQsNyArMzM0
LDcgQEAga2VybmVsIHZvaWQgYmxpdFN0ZW5jaWxUb0J1ZmZlckNTKHVzaG9ydDIgZ0luZGljZXMg
W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAogfQogCiAvLyBGcmFnbWVudCdzIHN0ZW5jaWwg
b3V0cHV0IGlzIG9ubHkgYXZhaWxhYmxlIHNpbmNlIE1ldGFsIDIuMQotQEAjaWYgX19NRVRBTF9W
RVJTSU9OX18gPj0gMjEwCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCiAKIHN0cnVjdCBG
cmFnbWVudFN0ZW5jaWxPdXQKIHsKQEAgLTM5Nyw0ICszOTcsNCBAQCBmcmFnbWVudCBGcmFnbWVu
dERlcHRoU3RlbmNpbE91dCBibGl0RGVwdGhTdGVuY2lsRlMoCiAgICAgICAgICAgICAgICAgICAg
ICAgc3JjU3RlbmNpbFRleHR1cmVDdWJlLCBpbnB1dC50ZXhDb29yZHMsIG9wdGlvbnMuc3JjTGV2
ZWwsIG9wdGlvbnMuc3JjTGF5ZXIpOwogICAgIHJldHVybiByZTsKIH0KLUBAI2VuZGlmICAvLyBf
X01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKyNlbmRpZiAgLy8gX19NRVRBTF9WRVJTSU9OX18gPj0g
MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCmluZGV4IDY4Yzc3NDUz
NzJiZGZmZTlhOGY5NTk4MTliZWY5MzYxYWZmYWFjYTAuLmU2NjczYjVkYmRmMDFkNDY5OWI2ZmYy
OWQyODYxMGJhYmUxNGNmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1v
bi5oCkBAIC0xMCw4ICsxMCw4IEBACiAKIC8vIGNsYW5nLWZvcm1hdCBvZmYKICNpZm5kZWYgU0tJ
UF9TVERfSEVBREVSUwotQEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgotQEAjICAgIGluY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KKyMgICAgaW5jbHVkZSA8c2ltZC9zaW1kLmg+CisjICAgIGluY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCmluZGV4
IGRmN2M0Yzk2MjVmMjc3MDEwYmIwNjEwOGEwZGUzMWVjNzk1ZWYyNTUuLjFiNDA4ZDg4OTI0YTAz
YmM3ZDBiZGFkNmZiYjQzYTY2OThjOTJlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1l
dGFsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCkBAIC00LDIyICs0LDIyIEBACiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIC8vIGNvcHlfYnVmZmVyLm1ldGFsOiBpbXBsZW1l
bnRzIGNvbXB1dGUgc2hhZGVyIHRoYXQgY29weSBmb3JtYXR0ZWQgZGF0YSBmcm9tIGJ1ZmZlciB0
byB0ZXh0dXJlLAotLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisvLyBmcm9tIHRleHR1
cmUgdG8gYnVmZmVyIGFuZCBmcm9tIGJ1ZmZlciB0byBidWZmZXIuCiAvLyBOT1RFKGhxbGUpOiBU
aGlzIGZpbGUgaXMgYSBiaXQgaGFyZCB0byByZWFkIGJ1dCB0aGVyZSBhcmUgYSBsb3Qgb2YgcmVw
ZWF0ZWQgd29ya3MsIGFuZCBpdCB3b3VsZAogLy8gYmUgYSBwYWluIHRvIGltcGxlbWVudCB3aXRo
b3V0IHRoZSB1c2Ugb2YgbWFjcm9zLgogLy8KIAotQEAjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyNp
bmNsdWRlIDxtZXRhbF9wYWNrPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZm9y
bWF0X2F1dG9nZW4uaCIKIAogdXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOwogCi1jb25z
dGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMTApXV07Citjb25z
dGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLyog
LS0tLS0tLS0gY29weSBwaXhlbCBkYXRhIGJldHdlZW4gYnVmZmVyIGFuZCB0ZXh0dXJlIC0tLS0t
LS0tLSovCi1jb25zdGFudCBpbnQga0NvcHlUZXh0dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50
KDIwKV1dOworY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFu
dCgyKV1dOwogY29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkQgICAgICA9IGtDb3B5VGV4
dHVyZVR5cGUgPT0ga1RleHR1cmVUeXBlMkQ7CiBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5
cGUyREFycmF5ID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OwogY29u
c3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkRNUyAgICA9IGtDb3B5VGV4dHVyZVR5cGUgPT0g
a1RleHR1cmVUeXBlMkRNdWx0aXNhbXBsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2Vu
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCmluZGV4IGExN2VhZDM0YjhkOWU0YTRmNjIzOWMzOGZh
NjlmOGE4N2M0MDU2YzQuLmI5OTFlNDhmNmE3ZGZjNGQyOWU5NGM4YTljNjgwZDI3NWQwY2UzNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aApAQCAtMjQ1LDUgKzI0NSw1IEBAIGVudW0KIAogfQogCi19ICAvLyBuYW1lc3BhY2UgbXRsX3No
YWRlcgotfSAgLy8gbmFtZXNwYWNlIHJ4Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNl
cy5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCmluZGV4IDJkODM1M2JhYWNkYjgyZTEzNDhk
MTIwNmFmNDMyZWZlNTBmOTIzNDYuLmVlZDYxZWE4M2JkNjM5OWMxNTNkMDJmN2U2NGJjOTllZThm
MDRmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRp
Y2VzLm1ldGFsCkBAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVbmFsaWdu
ZWRVMzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBpZHgpCiAgICAg
cmV0dXJuIGlucHV0MCB8IChpbnB1dDEgPDwgOCkgfCAoaW5wdXQyIDw8IDE2KSB8IChpbnB1dDMg
PDwgMjQpOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0
aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRbW2J1
ZmZlcigxKV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0
ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1UxNih1
aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1
ZmZlcigwKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hh
ciAqaW5wdXQgW1tidWZmZXIoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NP
TlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKIApAQCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5l
bCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9n
cmlkXV0sCiAgICAgfQogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYoCi0gICAgdWlu
dCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQgSW5kZXhDb252
ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFudCB1Y2hhciAq
aW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWdu
ZWQpIF1dLAotICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkW1sgYnVmZmVyKDEpLCBm
dW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCkgXV0sCi0gICAgZGV2aWNlIHVz
aG9ydCAqb3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNih1
aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVy
KDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0
YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQp
XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtb
YnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRp
b25zKTsKIApAQCAtOTYsMTIgKzk3LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNigK
ICAgICBvdXRwdXRbaWR4XSA9IHZhbHVlOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhV
MzIoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3Rh
bnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25z
dGFudCB1Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VC
dWZmZXJVbmFsaWduZWQpIF1dLAotICAgIGNvbnN0YW50IHVpbnQgKmlucHV0QWxpZ25lZFtbIGJ1
ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpIF1dLAotICAg
IGRldmljZSB1aW50ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydElu
ZGV4VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMg
W1tidWZmZXIoMCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hh
ciAqaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFs
aWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91dHB1
dCBbW2J1ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwg
b3B0aW9ucyk7CiAKQEAgLTE0MCw5ICsxNDIsOSBAQCBrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRp
Y2VzRnJvbUFycmF5KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKIAogaW5s
aW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1
dFU4W1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5jdGlvbl9jb25zdGFu
dChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnQgdWludCAqaW5wdXRVMzJbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIp
XV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOCBbW2Z1
bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlvbl9jb25zdGFudChrVXNl
U291cmNlQnVmZmVyVTE2KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWlu
dCAqaW5wdXRVMzIgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dKQog
ewogICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCiAgICAgewpAQCAtMTcwLDEzICsxNzIsMTUg
QEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAvLyBOT1RFKGhxbGUpOiB0
cmlhbmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBwcmltaXRpdmUg
cmVzdGFydC4KIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRpY2VzIGZyb20gYW4gaW5kaWNl
cyBidWZmZXIuIGluZGV4Q291bnQgb3B0aW9ucyBpbmRpY2F0ZXMgbnVtYmVyCiAvLyBvZiBpbmRp
Y2VzIHN0YXJ0aW5nIGZyb20gdGhlIDNyZC4KLWtlcm5lbCB2b2lkIGdlblRyaUZhbkluZGljZXNG
cm9tRWxlbWVudHMoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0g
ICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwK
LSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKLSAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2
W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KSBdXSwK
LSAgICBjb25zdGFudCB1aW50ICppbnB1dFUzMltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclUzMikgXV0sCi0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVm
ZmVyKDIpXV0pCitrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJvbUVsZW1lbnRzKHVpbnQg
aWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25z
IFtbYnVmZmVyKDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50IHVjaGFyICppbnB1dFU4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVy
VTgpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
IHVzaG9ydCAqaW5wdXRVMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQg
KmlucHV0VTMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVm
ZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtb
YnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRp
b25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAu
bWV0YWwKaW5kZXggYjNhMzY3NWQ5ZTVkYjliNzM0OTI3YjkyY2E3ZGQ0NzEyN2U1OWY3Ny4uZjIz
MzhiMmY4MmUwNTU2MmE2OGY1NWY3ZmI1ZmRmODBmYjVmOWY0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2Vu
X21pcG1hcC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCkBAIC0yMyw4ICsyMyw2IEBA
IHVzaW5nIG5hbWVzcGFjZSByeDo6bXRsX3NoYWRlcjsKIAogI2RlZmluZSBURVhFTF9MT0FEKGlu
ZGV4KSBmbG9hdDQoc1JbaW5kZXhdLCBzR1tpbmRleF0sIHNCW2luZGV4XSwgc0FbaW5kZXhdKQog
Ci0jZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVhcih0
ZXhlbCkgOiB0ZXhlbCkKLQogI2RlZmluZSBPVVRfT0ZfQk9VTkRfQ0hFQ0soZWRnZVZhbHVlLCB0
YXJnZXRWYWx1ZSwgY29uZGl0aW9uKSBcCiAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZhbHVlKSA6
ICh0YXJnZXRWYWx1ZSkKIApAQCAtMzIsNyArMzAsNiBAQCBzdHJ1Y3QgR2VuTWlwUGFyYW1zCiB7
CiAgICAgdWludCBzcmNMZXZlbDsKICAgICB1aW50IG51bU1pcExldmVsc1RvR2VuOwotICAgIGJv
b2wgc1JHQjsKIH07CiAKIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBMZXZlbHNUb0dlbiA+IDEs
IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dlciBvZiB0d28uIElmIGl0
CkBAIC00Niw4ICs0Myw4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbElu
ZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlM2Q8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDQgW1t0ZXh0
dXJlKDQpXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQ
YXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKIHsKLSAgICB1c2hvcnQzIG1pcFNpemUgID0g
dXNob3J0Myhkc3RNaXAxLmdldF93aWR0aCgpLCBkc3RNaXAxLmdldF9oZWlnaHQoKSwgZHN0TWlw
MS5nZXRfZGVwdGgoKSk7Ci0gICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBT
aXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56
OworICAgIHVzaG9ydDMgbWlwU2l6ZSAgICA9IHVzaG9ydDMoZHN0TWlwMS5nZXRfd2lkdGgoKSwg
ZHN0TWlwMS5nZXRfaGVpZ2h0KCksIGRzdE1pcDEuZ2V0X2RlcHRoKCkpOworICAgIGJvb2wgdmFs
aWRUaHJlYWQgICA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNp
emUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56OwogCiAgICAgY29uc3RleHByIHNhbXBsZXIg
dGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1p
cF9maWx0ZXI6OmxpbmVhcik7CiAKQEAgLTgzLDEwICs4MCw2IEBAIGtlcm5lbCB2b2lkIGdlbmVy
YXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0s
CiAgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCiAKICAgICAvLyBXcml0ZSB0
byBzaGFyZWQgbWVtb3J5Ci0gICAgaWYgKG9wdGlvbnMuc1JHQikKLSAgICB7Ci0gICAgICAgIHRl
eGVsMSA9IGxpbmVhclRvU1JHQih0ZXhlbDEpOwotICAgIH0KICAgICBURVhFTF9TVE9SRShsSW5k
ZXgsIHRleGVsMSk7CiAKICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3Ro
cmVhZGdyb3VwKTsKQEAgLTExOSw3ICsxMTIsNyBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNETWlw
bWFwcyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAogCiAgICAg
ICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUg
KyB0ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOwogCi0gICAgICAgIGRzdE1pcDIud3Jp
dGUoVE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDEpOworICAgICAgICBkc3RNaXAyLndy
aXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CiAKICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQogICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CkBAIC0xNjUsNyAr
MTU4LDcgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJl
YWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsg
dGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4
ZWw4KSAvIDguMDsKIAotICAgICAgICBkc3RNaXAzLndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBn
SW5kaWNlcyA+PiAyKTsKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+
IDIpOwogCiAgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKICAgICAgICAgVEVYRUxf
U1RPUkUobEluZGV4LCB0ZXhlbDEpOwpAQCAtMjExLDYgKzIwNCwzNDggQEAga2VybmVsIHZvaWQg
Z2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3Jv
dXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4
ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKIAotICAgICAg
ICBkc3RNaXA0LndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAzKTsKKyAgICAg
ICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwora2Vy
bmVsIHZvaWQgZ2VuZXJhdGUyRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5f
dGhyZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDIgZ0lu
ZGljZXMgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRl
PiBkc3RNaXAxIFtbdGV4dHVyZSgxKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4dHVyZSgyKV1dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6Ondy
aXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVyZSg0KV1d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZv
cHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9u
cy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXBTaXplID0KKyAgICAgICAgdXNob3J0Mihz
cmNUZXh0dXJlLmdldF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0
KGZpcnN0TWlwTGV2ZWwpKTsKKyAgICBib29sIHZhbGlkVGhyZWFkID0gZ0luZGljZXMueCA8IG1p
cFNpemUueCAmJiBnSW5kaWNlcy55IDwgbWlwU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBs
ZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIs
IG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAgICAvLyBOT1RFKGhxbGUpOiBVc2Ugc2ltZF9ncm91
cCBmdW5jdGlvbiB3aGVuZXZlciBhdmFpbGFibGUuIFRoYXQgY291bGQgYXZvaWQgYmFycmllciB1
c2UuCisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29u
ZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFldOworICAgIHRo
cmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9h
dCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fba1RocmVhZEdy
b3VwWFldOworCisgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9h
dDQgdGV4ZWwxOworICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0MiB0
ZXhDb29yZHMgPSAoZmxvYXQyKGdJbmRpY2VzKSArIGZsb2F0MigwLjUsIDAuNSkpIC8gZmxvYXQy
KG1pcFNpemUpOworICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5zYW1wbGUo
dGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisg
ICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAgICAgZHN0TWlwMS53cml0ZSh0ZXhlbDEs
IGdJbmRpY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZm
ZmZmZmY7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIFNlY29uZCBtaXAg
bGV2ZWwgLS0tLS0tLS0KKworICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICBURVhF
TF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisKKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9m
bGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgZXZlbgorICAg
IGlmICgobEluZGV4ICYgMHgwOSkgPT0gMCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisg
ICAgeworICAgICAgICBib29sMiBhdEVkZ2UgPSBnSW5kaWNlcyA9PSAobWlwU2l6ZSAtIHVzaG9y
dDIoMSkpOworCisgICAgICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBv
ZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQg
dGV4ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAx
KSwgYXRFZGdlLngpOworICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwz
ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyBrVGhyZWFk
R3JvdXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCAr
IChrVGhyZWFkR3JvdXBYICsgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhl
bDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDIu
d3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAxKTsKKworICAgICAgICAvLyBXcml0ZSB0byBzaGFy
ZWQgbWVtb3J5CisgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKyAgICB9CisK
KyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIC0tLS0gM3JkIG1pcCBsZXZlbCAtLS0tLS0tLQorICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAg
Ly8gSW5kZXggbXVzdCBiZSBtdWx0aXBsZSBvZiA0CisgICAgaWYgKChsSW5kZXggJiAweDFiKSA9
PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKyAgICB7CisgICAgICAgIG1pcFNpemUg
ICAgICA9IG1heChtaXBTaXplID4+IDEsIHVzaG9ydDIoMSkpOworICAgICAgICBib29sMiBhdEVk
Z2UgPSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKworICAgICAg
ICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVs
MiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9C
T1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMiksIGF0RWRnZS54KTsKKyAg
ICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisgICAgICAgICAgICBP
VVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIgKiBrVGhyZWFk
R3JvdXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCAr
ICgyICoga1RocmVhZEdyb3VwWCArIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAo
dGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RN
aXAzLndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMik7CisKKyAgICAgICAgLy8gV3JpdGUgdG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisgICAg
fQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMykKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDR0aCBtaXAgbGV2ZWwgLS0tLS0tLS0K
KyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKwor
ICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgOAorICAgIGlmICgobEluZGV4ICYgMHgz
ZikgPT0gMCkgIC8vIChsSW5kZXggJiBiMTExMTExKSA9PSAwCisgICAgeworICAgICAgICBtaXBT
aXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKyAgICAgICAgYm9vbDIg
YXRFZGdlID0gKGdJbmRpY2VzID4+IDIpID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisKKyAg
ICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0
ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRf
T0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7
CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDMgPQorICAgICAgICAg
ICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1Ro
cmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBm
bG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5k
ZXggKyAoNCAqIGtUaHJlYWRHcm91cFggKyA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwx
ID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAg
ZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmVUeXBlUiwgdHlwZW5hbWUgVGV4dHVyZVR5cGVXPgorc3RhdGlj
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJh
eTJuZEFuZE1vcmVNaXBtYXBzKAorICAgIHVpbnQgbEluZGV4LAorICAgIHVzaG9ydDMgZ0luZGlj
ZXMsCisgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1p
cDIsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDMsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDQs
CisgICAgdXNob3J0MiBtaXAxU2l6ZSwKKyAgICBmbG9hdDQgbWlwMVRleGVsLAorICAgIHRocmVh
ZGdyb3VwIGZsb2F0ICpzUiwKKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0csCisgICAgdGhyZWFk
Z3JvdXAgZmxvYXQgKnNCLAorICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwKKyAgICBjb25zdGFu
dCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMpCit7CisgICAgdXNob3J0MiBtaXBTaXplID0gbWlwMVNp
emU7CisgICAgZmxvYXQ0IHRleGVsMSAgID0gbWlwMVRleGVsOworCisgICAgLy8gLS0tLSBTZWNv
bmQgbWlwIGxldmVsIC0tLS0tLS0tCisKKyAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5Cisg
ICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworCisgICAgdGhyZWFkZ3JvdXBfYmFycmll
cihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIGV2
ZW4KKyAgICBpZiAoKGxJbmRleCAmIDB4MDkpID09IDApICAvLyAobEluZGV4ICYgYjAwMTAwMSkg
PT0gMAorICAgIHsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gZ0luZGljZXMueHkgPT0gKG1pcFNp
emUgLSB1c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0
aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAg
ICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQo
bEluZGV4ICsgMSksIGF0RWRnZS54KTsKKyAgICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxv
YXQ0IHRleGVsMyA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4
ICsga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAg
ICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9B
RChsSW5kZXggKyAoa1RocmVhZEdyb3VwWCArIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhl
bDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAg
ICBkc3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMueHkgPj4gMSwgZ0luZGljZXMueik7CisK
KyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShs
SW5kZXgsIHRleGVsMSk7CiAgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9H
ZW4gPT0gMikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDNy
ZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAor
ICAgIGlmICgobEluZGV4ICYgMHgxYikgPT0gMCkgIC8vIChsSW5kZXggJiBiMDExMDExKSA9PSAw
CisgICAgeworICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQy
KDEpKTsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gKGdJbmRpY2VzLnh5ID4+IDEpID09IChtaXBT
aXplIC0gdXNob3J0MigxKSk7CisKKyAgICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYg
dGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAg
ICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FE
KGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZs
b2F0NCB0ZXhlbDMgPQorICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVY
RUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAg
Ly8gKHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNL
KHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoMiAqIGtUaHJlYWRHcm91cFggKyAyKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVk
Z2UueSk7CisKKyAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRl
eGVsNCkgLyA0LjA7CisKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzLnh5
ID4+IDIsIGdJbmRpY2VzLnopOworCisgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkK
KyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworICAgIH0KKworICAgIGlmIChv
cHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDMpCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisgICAgdGhyZWFkZ3Jv
dXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBt
dXN0IGJlIG11bHRpcGxlIG9mIDgKKyAgICBpZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAo
bEluZGV4ICYgYjExMTExMSkgPT0gMAorICAgIHsKKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4
KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5k
aWNlcy54eSA+PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworCisgICAgICAgIC8vICh4
KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwg
ZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5EX0NI
RUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0KSwgYXRFZGdlLngpOworICAgICAgICAv
LyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKyAgICAgICAgICAgIE9VVF9PRl9C
T1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCAqIGtUaHJlYWRHcm91cFgp
LCBhdEVkZ2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVs
NCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBr
VGhyZWFkR3JvdXBYICsgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEg
KyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDQud3Jp
dGUodGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKyAgICB9Cit9CisKK2tl
cm5lbCB2b2lkIGdlbmVyYXRlQ3ViZU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhf
aW5fdGhyZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0
MyBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgw
KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwg
YWNjZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIg
W1t0ZXh0dXJlKDIpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVj
dWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0
ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAg
dWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBt
aXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmlyc3RNaXBM
ZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisgICAgYm9vbCB2
YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXAx
U2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRl
cjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAg
ICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0NCBtaXAxVGV4ZWw7
CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQyIHRleENvb3JkcyA9
IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBmbG9hdDIobWlwMVNp
emUpOworICAgICAgICBtaXAxVGV4ZWwgPSBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxl
ciwgY3ViZVRleGNvb3Jkcyh0ZXhDb29yZHMsIGludChnSW5kaWNlcy56KSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKwor
ICAgICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAgICAgIGRzdE1pcDEud3JpdGUobWlwMVRl
eGVsLCBnSW5kaWNlcy54eSwgZ0luZGljZXMueik7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworICAg
ICAgICBsSW5kZXggPSAweGZmZmZmZmZmOworICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1p
cExldmVsc1RvR2VuID09IDEpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorICAg
IHRocmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBm
bG9hdCBzR1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVh
ZEdyb3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKwor
ICAgIGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGlj
ZXMsIHNyY1RleHR1cmUsIGRzdE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNH
LCBzQiwgc0EsIG9wdGlvbnMpOworfQorCitrZXJuZWwgdm9pZCBnZW5lcmF0ZTJEQXJyYXlNaXBt
YXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMgZ0luZGljZXMgW1t0aHJlYWRfcG9z
aXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlMmRfYXJyYXk8ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3
cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkX2FycmF5PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtb
dGV4dHVyZSgyKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
MmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwg
YWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVy
KDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7
CisgICAgdXNob3J0MiBtaXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRf
d2lkdGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVs
KSk7CisgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJ
bmRpY2VzLnkgPCBtaXAxU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNh
bXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6
OmxpbmVhcik7CisKKyAgICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZs
b2F0NCBtaXAxVGV4ZWw7CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkg
LyBmbG9hdDIobWlwMVNpemUpOworICAgICAgICBtaXAxVGV4ZWwgPQorICAgICAgICAgICAgc3Jj
VGV4dHVyZS5zYW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgZ0luZGljZXMueiwgbGV2
ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisgICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAg
ICAgICAgZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUg
YWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZmZmY7CisgICAg
fQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRv
IGF2b2lkIGJhbmsgY29uZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdy
b3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0
aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxv
YXQgc0Fba1RocmVhZEdyb3VwWFldOworCisgICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5k
TW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNlcywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlw
MywgZHN0TWlwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
aXAxU2l6ZSwgbWlwMVRleGVsLCBzUiwgc0csIHNCLCBzQSwgb3B0aW9ucyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAppbmRleCA5MDVj
MTk2MzUyNzU1ZTAxNDdhZTQyN2M0ODMwNGUwYzYzZmZkMmYxLi5hZDU4NjBmNzUzZjc1NzUxMzBm
NmRiNjMwNjYwMzQ3YTA4NTMyZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL3Zpc2liaWxpdHkubWV0YWwKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlICJjb21t
b24uaCIKIAotY29uc3RhbnQgYm9vbCBrQ29tYmluZVdpdGhFeGlzdGluZ1Jlc3VsdCBbW2Z1bmN0
aW9uX2NvbnN0YW50KDEwMDApXV07Citjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5n
UmVzdWx0IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLy8gQ29tYmluZSB0aGUgdmlzaWJp
bGl0eSByZXN1bHQgb2YgY3VycmVudCByZW5kZXIgcGFzcyB3aXRoIHByZXZpb3VzIHZhbHVlIGZy
b20gcHJldmlvdXMgcmVuZGVyCiAvLyBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAppbmRleCA3NTVi
ZDYxZDdmMmQzMjMzODZlZWViZDc2OGQ5MmUyY2I5MWU2Y2ExLi43ZDVhYzU4NGIxNGRmMmQyMzQ5
YmM0YTk1YWY2OWZkOWViMTA1MWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKQEAgLTQyOCw4ICs0
MjgsNiBAQCBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIEVHTF9EZXN0cm95Q29udGV4dChFR0xEaXNw
bGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCiAKICAgICBpZiAoY29udGV4dFdhc0N1cnJlbnQpCiAg
ICAgewotICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQsIGRpc3BsYXktPm1ha2VD
dXJyZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZWdsRGVzdHJveUNvbnRleHQiLCBHZXRDb250ZXh0SWZWYWxpZChk
aXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQo
dGhyZWFkLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTQ2Niw5ICs0NjQsOSBAQCBFR0xCb29sZWFu
IEVHTEFQSUVOVFJZIEVHTF9NYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwKICAgICAvLyBPbmx5
IGNhbGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Igc3VyZmFjZXMgaGF2ZSBjaGFuZ2Vk
LgogICAgIGlmIChwcmV2aW91c0RyYXcgIT0gZHJhd1N1cmZhY2UgfHwgcHJldmlvdXNSZWFkICE9
IHJlYWRTdXJmYWNlIHx8IHByZXZpb3VzQ29udGV4dCAhPSBjb250ZXh0KQogICAgIHsKLSAgICAg
ICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCi0gICAgICAgICAgICB0aHJlYWQsIGRpc3BsYXktPm1h
a2VDdXJyZW50KHByZXZpb3VzQ29udGV4dCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250
ZXh0KSwKLSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZhbGlkKGRp
c3BsYXksIGNvbnRleHQpLCBFR0xfRkFMU0UpOworICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVS
Tih0aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPm1ha2VDdXJy
ZW50KHRocmVhZCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IiwgR2V0Q29udGV4dElmVmFsaWQo
ZGlzcGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CiAKICAgICAgICAgU2V0Q29udGV4dEN1cnJl
bnQodGhyZWFkLCBjb250ZXh0KTsKICAgICB9CkBAIC04MTgsOSArODE2LDkgQEAgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBFR0xfUmVsZWFzZVRocmVhZCh2b2lkKQogICAgICAgICBpZiAocHJldmlv
dXNEcmF3ICE9IEVHTF9OT19TVVJGQUNFIHx8IHByZXZpb3VzUmVhZCAhPSBFR0xfTk9fU1VSRkFD
RSB8fAogICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTigKLSAgICAgICAgICAgICAg
ICB0aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250ZXh0LCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKLSAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRo
cmVhZCIsIG51bGxwdHIsIEVHTF9GQUxTRSk7CisgICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JF
VFVSTih0aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Rp
c3BsYXktPm1ha2VDdXJyZW50KHRocmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVhZCIsIG51bGxw
dHIsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4o
dGhyZWFkLCBwcmV2aW91c0Rpc3BsYXktPnJlbGVhc2VUaHJlYWQoKSwgImVnbFJlbGVhc2VUaHJl
YWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREaXNwbGF5SWZWYWxpZChwcmV2
aW91c0Rpc3BsYXkpLCBFR0xfRkFMU0UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415958</attachid>
            <date>2020-12-10 18:53:18 -0800</date>
            <delta_ts>2020-12-11 10:46:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201210185310.patch</filename>
            <type>text/plain</type>
            <size>2854922</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uZjJi
YzdiODQ5YmViZTYxOTUxYThmZGE1MjdkNTU3YTJjZTNiOGQ5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQxIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi87IH07CisJCUZGODFGRjAyMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovOyB9OworCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRF
MjQgLyogRnJhbWVCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUJDMjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5o
ICovOyB9OworCQlGRjgxRkYwNDI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJEMjU4MThE
NjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5oICovOyB9OworCQlGRjgxRkYwNTI1ODE4RDY5MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5tbSAqLzsgfTsKKwkJRkY4MUZGMDYyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLzsgfTsKKwkJ
RkY4MUZGMDcyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0
IC8qIENvbXBpbGVyTXRsLm1tICovOyB9OworCQlGRjgxRkYwODI1ODE4RDY5MDA4OTRFMjQgLyog
bXRsX2J1ZmZlcl9wb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZlcl9wb29sLmggKi87
IH07CisJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi87IH07CisJCUZG
ODFGRjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDNTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2J1ZmZlcl9wb29sLm1tICovOyB9OworCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRF
MjQgLyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICovOyB9
OworCQlGRjgxRkYwRDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzcyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEUyNTgxOEQ2
QTAwODk0RTI0IC8qIG10bF9zdGF0ZV9jYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzgyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9zdGF0
ZV9jYWNoZS5oICovOyB9OworCQlGRjgxRkYwRjI1ODE4RDZBMDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0gKi87IH07CisJCUZG
ODFGRjEwMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNBMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZG
MTEyNTgxOEQ2QTAwODk0RTI0IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRl
ck10bC5oICovOyB9OworCQlGRjgxRkYxMjI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0My
NTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMTMyNTgxOEQ2
QTAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRDI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0IC8qIERpc3BsYXlNdGwubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRTI1ODE4
RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMUIyNTgxOTBDQTAw
ODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbERpcmVjdC5oICovOyB9OworCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRFMjQgLyog
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0
YWxEaXJlY3QuY3BwICovOyB9OworCQlGRjgxRkYxRDI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGlj
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLzsgfTsKKwkJRkY4MUZGMUUy
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjE5MjU4MTkwQ0EwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgKi87IH07CisJCUZGODFGRjFGMjU4MTkwQ0Ew
MDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmggKi87IH07CisJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAqLzsgfTsKKwkJRkY4MUZGNUMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyMjI1ODE5MTk3MDA4OTRF
MjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNUQyNTgx
OTE5NzAwODk0RTI0IC8qIERlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLzsgfTsK
KwkJRkY4MUZGNUUyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmggKi87IH07CisJCUZGODFGRjVGMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjI1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGNjAyNTgxOTE5NzAwODk0
RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyNjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNw
cCAqLzsgfTsKKwkJRkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJs
b2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oICovOyB9Owor
CQlGRjgxRkY2MjI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjgyNTgxOTE5
NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLzsgfTsKKwkJRkY4MUZGNjMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI5MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjY0
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
OyB9OworCQlGRjgxRkY2NTI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWdTaW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQjI1ODE5MTk3MDA4
OTRFMjQgLyogRGVidWdTaW5rLmggKi87IH07CisJCUZGODFGRjY2MjU4MTkxOTcwMDg5NEUyNCAv
KiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQzI1ODE5MTk3MDA4OTRFMjQgLyog
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oICovOyB9OworCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0
YWwuY3BwICovOyB9OworCQlGRjgxRkY2ODI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91dEFy
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICovOyB9OworCQlGRjgxRkY2
OTI1ODE5MTk4MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFw
U3ltYm9scy5jcHAgKi87IH07CisJCUZGODFGRjZBMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMzAyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi87IH07CisJCUZGODFGRjZC
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlS2V5d29yZHMuaCAqLzsgfTsKKwkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLzsgfTsKKwkJRkY4MUZGNkQy
NTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzMzI1ODE5MTk3MDA4OTRFMjQgLyog
VG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi87IH07CisJCUZGODFGRjZGMjU4MTkxOTgwMDg5NEUyNCAvKiBT
a2lwcGluZ1RyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmgg
Ki87IH07CisJCUZGODFGRjcwMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuY3BwICovOyB9OworCQlGRjgxRkY3MTI1
ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5l
LmNwcCAqLzsgfTsKKwkJRkY4MUZGNzIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzODI1ODE5MTk3
MDA4OTRFMjQgLyogSWRHZW4uaCAqLzsgfTsKKwkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzkyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRl
Q29tcG91bmRFeHByZXNzaW9ucy5oICovOyB9OworCQlGRjgxRkY3NDI1ODE5MTk4MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0
VHlwZUNhc3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzUyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5
bWJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi87IH07CisJCUZGODFGRjc2
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0
IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50
ZXJmYWNlQmxvY2tzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzgyNTgxOTE5ODAwODk0RTI0IC8qIEFz
dEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwICovOyB9OworCQlG
RjgxRkY3OTI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYz
RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi87
IH07CisJCUZGODFGRjdBMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQwMjU4MTkxOTcwMDg5NEUy
NCAvKiBMYXlvdXQuaCAqLzsgfTsKKwkJRkY4MUZGN0IyNTgxOTE5ODAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwICovOyB9OworCQlGRjgxRkY3QzI1ODE5
MTk4MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFt
UHJlbHVkZS5oICovOyB9OworCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzLmggKi87IH07CisJCUZGODFGRjdFMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLzsgfTsKKwkJRkY4MUZGN0YyNTgx
OTE5ODAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NTI1ODE5MTk3MDA4
OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZG
ODAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGODEyNTgxOTE5ODAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ3MjU4MTkxOTcwMDg5
NEUyNCAvKiBBc3RIZWxwZXJzLmggKi87IH07CisJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAv
KiBIb2lzdENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0ODI1ODE5MTk3MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3Bw
ICovOyB9OworCQlGRjgxRkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ5MjU4MTkxOTcw
MDg5NEUyNCAvKiBQaXBlbGluZS5oICovOyB9OworCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQg
LyogUmV3cml0ZVBpcGVsaW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGNEEyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMu
aCAqLzsgfTsKKwkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEIyNTgxOTE5
NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovOyB9OworCQlGRjgxRkY4NjI1ODE5MTk4MDA4OTRF
MjQgLyogSG9pc3RDb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRDMjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5o
ICovOyB9OworCQlGRjgxRkY4NzI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEQyNTgxOTE5
NzAwODk0RTI0IC8qIFdyYXBNYWluLmNwcCAqLzsgfTsKKwkJRkY4MUZGODgyNTgxOTE5ODAwODk0
RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmgg
Ki87IH07CisJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEYy
NTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAgKi87IH07CisJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MDI1ODE5MTk3MDA4OTRFMjQgLyog
UHJvZ3JhbVByZWx1ZGUuY3BwICovOyB9OworCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLzsgfTsKKwkJRkY4MUZGOEMy
NTgxOTE5ODAwODk0RTI0IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRh
bC5oICovOyB9OworCQlGRjgxRkY4RDI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUzMjU4MTkx
OTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICovOyB9OworCQlGRjgxRkY4RTI1ODE5MTk4MDA4OTRF
MjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNp
dFR5cGVDYXN0cy5oICovOyB9OworCQlGRjgxRkY4RjI1ODE5MTk4MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwICovOyB9OworCQlGRjgxRkY5MDI1ODE5MTk4MDA4OTRFMjQgLyog
TW9kaWZ5U3RydWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY1NjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi87IH07CisJ
CUZGODFGRjkxMjU4MTkxOTgwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU3MjU4MTkxOTcwMDg5
NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLzsgfTsKKwkJRkY4MUZGOTIyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU4MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTkyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVD
YXNlRGVjbGFyYXRpb25zLmggKi87IH07CisJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBN
YXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8q
IE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRjk1MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgKi87
IH07CisJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBOb2RlVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTcyNTgxQTNDMTAwODk0
RTI0IC8qIE5vZGVUeXBlLmggKi87IH07CisJCUZGODFGRjlDMjU4MUEzQzIwMDg5NEUyNCAvKiBB
c05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLzsgfTsKKwkJRkY4MUZGOUQyNTgx
QTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVy
bVJlYnVpbGQuY3BwICovOyB9OworCQlGRjgxRkY5RTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLzsgfTsKKwkJRkY4
MUZGOUYyNTgxQUQwNDAwODk0RTI0IC8qIGJsaXQubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBQTI1ODE4RDY4MDA4OTRFMjQgLyogYmxp
dC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHku
bWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLzsgfTsKKwkJRkY4MUZG
QTEyNTgxQUQwNDAwODk0RTI0IC8qIGNvcHlfYnVmZmVyLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8q
IGNvcHlfYnVmZmVyLm1ldGFsICovOyB9OworCQlGRjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyog
Y2xlYXIubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkVCMTI1ODE4RDY4MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgKi87IH07CisJCUZGODFG
RkEzMjU4MUFEMDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8q
IGdlbl9taXBtYXAubWV0YWwgKi87IH07CisJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUyNCAvKiBn
ZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLzsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZFJ1
bGUgc2VjdGlvbiAqLwpAQCAtMjAzMCw2ICsyMTY1LDE0MyBAQAogCQlBM0QzMjkxMzIzQ0ZDQjc2
MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5
IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgwMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBtdGxfZ2xzbGFuZ191dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmFtTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRTgyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TXRsX2FwaS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3lu
Y010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5bmNNdGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg0MjU4MThENjgwMDg5NEUy
NCAvKiBRdWVyeU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWVyeU10
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4NTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IG10bF9mb3JtYXRfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRTg2MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJCdWZmZXJNdGwubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg4MjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9jb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRs
X2NvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4QTI1ODE4
RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTYW1wbGVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThC
MjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3luY010bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU4RDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBRdWVyeU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVy
QnVmZmVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckJ1ZmZl
ck10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MDI1ODE4RDY4MDA4
OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNmb3JtRmVlZGJhY2tNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1ZmZlck10bC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRf
dGFibGVfYXV0b2dlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOTMyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlclRhcmdldE10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdXJmYWNlTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IG10bF9nbHNsYW5nX210bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1hbmRfYnVmZmVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQg
LyogVmVydGV4QXJyYXlNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVy
dGV4QXJyYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTgyNTgx
OEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGFyZ2V0TXRsLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWZXJ0ZXhBcnJh
eU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUIyNTgxOEQ2ODAw
ODk0RTI0IC8qIG10bF9jb21tYW5kX2J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfY29tbWFuZF9idWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCdWZmZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1
cmZhY2VNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJT1N1
cmZhY2VTdXJmYWNlTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
RjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZXNvdXJjZXMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9yZXNvdXJjZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10
bF9zdGF0ZV9jYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTMy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVl
ZGJhY2tNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUcmFu
c2Zvcm1GZWVkYmFja010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZF
QTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNjI1ODE4RDY4MDA4OTRFMjQgLyogVGV4dHVyZU10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHR1cmVNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE3MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHR1cmVN
dGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW1wbGVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
QTI1ODE4RDY4MDA4OTRFMjQgLyogYmxpdC5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0
YWw7IHBhdGggPSBibGl0Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUubWV0YWw7IHBhdGggPSB2aXNpYmlsaXR5Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyogY29uc3RhbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnBhc2NhbDsgcGF0aCA9IG10
bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBRjI1ODE4RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gY29weV9idWZmZXIubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3Jt
YXRfYXV0b2dlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmb3JtYXRfYXV0
b2dlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCMTI1ODE4RDY4MDA4
OTRFMjQgLyogY2xlYXIubWV0YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0g
Y2xlYXIubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIyMjU4MThE
NjgwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRh
bDsgcGF0aCA9IGdlbl9taXBtYXAubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBnZW5faW5kaWNlcy5tZXRhbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNp
b25fcXVlcnlfcG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZyYW1lQnVmZmVyTXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJEMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlck10bC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNdGwubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUMwMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbXBpbGVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10
bF9idWZmZXJfcG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMjI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG10bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NDI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb250ZXh0TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRUM1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfYnVmZmVyX3Bvb2wubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29t
bW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1v
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzcyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX3JlbmRlcl91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9zdGF0ZV9jYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGcmFtZUJ1ZmZlck10bC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQ0MyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYWRlck10bC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dy
YW1NdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9ncmFt
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRTI1ODE4RDY4MDA4
OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpc3BsYXlNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYxODI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTkyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbFV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbFV0aWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyMjI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjUyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZFN0cnVj
dERlY2xhcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjI2
MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U3RydWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjgyNTgxOTE5NzAwODk0
RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRW52aXJvbm1lbnRWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJCMjU4MTkx
OTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdTaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJDMjU4
MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMkQyNTgxOTE5
NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFbWl0TWV0YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYyRTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZU91dEFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMkYyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwU3ltYm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjMwMjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sRW52LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0
IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXdyaXRlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzIy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYzMzI1ODE5MTk3MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRvcG9zb3J0U3RydWN0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNraXBwaW5nVHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJn
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlT3V0QXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM3MjU4MTkxOTcwMDg5
NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQaXBlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM4MjU4
MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJZEdlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzOTI1ODE5MTk3
MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhw
bGljaXRUeXBlQ2FzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYzQjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXBTeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVQaXBlbGluZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyog
UmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzdEhlbHBlcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0MTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNDIyNTgxOTE5NzAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sRW52Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVy
RGVjbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0
NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3RIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb2lzdENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQ5MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXBlbGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlUGlwZWxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRCMjU4MTkxOTcwMDg5
NEUyNCAvKiBSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVm
ZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRDMjU4MTkxOTcw
MDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIb2lzdENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV3JhcE1haW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUtleXdv
cmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElkR2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFbWl0TWV0YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyYXBNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1NTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2Rp
ZnlTdHJ1Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U3RydWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VG9wb3NvcnRTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU4
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU5MjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY1QTI1ODE5MTk3MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTUy
NTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTWV0
YWwuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbC5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQlGRjgxRkY5NzI1ODFBM0MxMDA4OTRF
MjQgLyogTm9kZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTgyNTgxQTNDMTAwODk0
RTI0IC8qIEFzTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc05vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0
IC8qIEludGVybVJlYnVpbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZXJtUmVidWlsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludGVybVJlYnVpbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjA0NSw2ICsyMzE3LDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1Q0IzMDQ5NDFE
RTQxNTcyMDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJCUZGODFGRjk2MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLywKIAkJCQk1Q0IzMDQ5MzFERTQxNTZCMDBEMkM0MDUgLyogUXVhcnR6Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTIwNTUsNiArMjMyOCw4IEBACiAJCTMxMDEyRDlGMThC
OTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJhbnNsYXRv
ck1ldGFsRGlyZWN0ICovLAorCQkJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QgKi8sCiAJCQkJNUNCRDU5NjkyMjgyNkEwMDAwMkIyMkFBIC8qIHRyZWVv
cHMgKi8sCiAJCQkJNUM1NUQ2RUEyMjgyNkM5ODAwQjVCQTJDIC8qIHRyZWV1dGlsICovLAogCQkJ
CTVDMURCQkZCMUIwNDM3NUYwMDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuY3BwICovLApAQCAt
MjE0NCw2ICsyNDE5LDcgQEAKIAkJCQkzMUEzMzFEMTFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJp
dHkuaCAqLywKIAkJCQkzMTAxMkRGMjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAg
Ki8sCiAJCQkJNUMxREJDMUExQjA0Mzc1RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwICovLAor
CQkJCUZGODFGRjE3MjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggKi8sCiAJCQkJMzE1
RUJENDcxRkNFNDQyODAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuY3BwICovLAogCQkJCTMxNUVC
RDczMUZDRTQ0MzQwMEFDN0E4OSAvKiBTdHJ1Y3R1cmVITFNMLmggKi8sCiAJCQkJNUM1NUQ2RDky
MjgyNkM3ODAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgKi8sCkBAIC0yMTYwLDYgKzI0MzYsMTAgQEAK
IAkJCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJ
CQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJ
CTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUZG
ODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwICovLAor
CQkJCUZGODFGRjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAq
LywKKwkJCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
Y3BwICovLAorCQkJCUZGODFGRjFBMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxV
dGlscy5oICovLAogCQkJCTMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVs
a2FuLmNwcCAqLywKIAkJCQkzMTVFQkQ2NjFGQ0U0NDMxMDBBQzdBODkgLyogVHJhbnNsYXRvclZ1
bGthbi5oICovLAogCQkJCTVDMURCQzFEMUIwNDM3NUYwMDIzNTU1MiAvKiBUeXBlcy5jcHAgKi8s
CkBAIC0yNTIyLDYgKzI4MDIsNyBAQAogCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLywKIAkJCQlBMzAzMDZGRTIzMDVG
NjM2MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBMzAzMDZGRjIzMDVGNjM2
MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmggKi8sCiAJCQkJNUM1NUQ2RUQyMjgyNkNCMjAwQjVC
QTJDIC8qIEZpbmRNYWluLmNwcCAqLywKQEAgLTI1MzIsOSArMjgxMywxMiBAQAogCQkJCTVDNTVE
NkVFMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlX3V0aWwuaCAqLywKIAkJCQk1QzU1RDZG
NDIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCAqLywKIAkJ
CQk1QzU1RDZGODIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgg
Ki8sCisJCQkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwICov
LAorCQkJCUZGODFGRjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8sCiAJ
CQkJNUM1NUQ2RjIyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQk1QzU1RDZGMTIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCAqLywKIAkJCQk1
QzU1RDZGNzIyODI2Q0IzMDBCNUJBMkMgLyogTm9kZVNlYXJjaC5oICovLAorCQkJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovLAogCQkJCUEzQzNGRTEyMjU1REREOTIw
MEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuY3BwICovLAogCQkJCUEzQzNG
RTExMjU1REREOTIwMEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuaCAqLywK
IAkJCQk2RUIwMUMxRjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlh
YmxlLmNwcCAqLywKQEAgLTI1OTAsNiArMjg3NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTVDQjMwMERGMURFMzlGMDMwMEQyQzQwNSAvKiBnbCAqLywKKwkJ
CQlGRjgxRkU3RjI1ODE4RDY4MDA4OTRFMjQgLyogbWV0YWwgKi8sCiAJCQkJNkUzM0U4RTcyNEQw
RDE5NjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwICovLAogCQkJCTVDQjMwNEFBMURFNDE2NDgw
MEQyQzQwNSAvKiBCdWZmZXJJbXBsLmggKi8sCiAJCQkJNUNCMzA0QUIxREU0MTY0ODAwRDJDNDA1
IC8qIENvbXBpbGVySW1wbC5oICovLApAQCAtMjc0NSw2ICszMDMwLDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzA0OEIxREU0MTQzNTAwRDJDNDA1IC8q
IENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8sCisJCQkJRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0
IC8qIE1ldGFsLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RDFERTQxNDQ0MDBEMkM0MDUgLyog
T3BlbkdMLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RjFERTQxNDU1MDBEMkM0MDUgLyogUXVh
cnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkpOwpAQCAtMzE4Nyw2ICszNDczLDE1NCBAQAogCQkJ
cGF0aCA9IGluY2x1ZGUvR0xTTEFORzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8q
IHNoYWRlcnMgKi8sCisJCQkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
ICovLAorCQkJCUZGODFGRTkxMjU4MThENjgwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gKi8sCisJ
CQkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi8sCisJCQkJRkY4
MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tICovLAorCQkJCUZGODFGRUM0
MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8sCisJCQkJRkY4MUZFQkYyNTgxOEQ2
ODAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gKi8sCisJCQkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0
RTI0IC8qIERpc3BsYXlNdGwuaCAqLywKKwkJCQlGRjgxRkVDRTI1ODE4RDY4MDA4OTRFMjQgLyog
RGlzcGxheU10bC5tbSAqLywKKwkJCQlGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxh
eU10bF9hcGkuaCAqLywKKwkJCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwuaCAqLywKKwkJCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFQTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZh
Y2VNdGwuaCAqLywKKwkJCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3Vy
ZmFjZU10bC5tbSAqLywKKwkJCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZl
cl9wb29sLmggKi8sCisJCQkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJf
cG9vbC5tbSAqLywKKwkJCQlGRjgxRkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRf
YnVmZmVyLmggKi8sCisJCQkJRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5k
X2J1ZmZlci5tbSAqLywKKwkJCQlGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1v
bi5oICovLAorCQkJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICov
LAorCQkJCUZGODFGRTg5MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggKi8sCisJ
CQkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5t
bSAqLywKKwkJCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
ICovLAorCQkJCUZGODFGRTg1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1t
ICovLAorCQkJCUZGODFGRTk1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRp
bHMuaCAqLywKKwkJCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFu
Z191dGlscy5oICovLAorCQkJCUZGODFGRUNBMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVz
aW9uX3F1ZXJ5X3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovLAorCQkJCUZGODFGRUM3MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfcmVuZGVyX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQTMyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZXNvdXJjZXMuaCAqLywKKwkJCQlGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3Jlc291cmNlcy5tbSAqLywKKwkJCQlGRjgxRkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X3N0YXRlX2NhY2hlLmggKi8sCisJCQkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLywKKwkJCQlGRjgxRkVDMjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0
aWxzLmggKi8sCisJCQkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LywKKwkJCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovLAorCQkJ
CUZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tICovLAorCQkJCUZGODFG
RTg0MjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5oICovLAorCQkJCUZGODFGRThEMjU4MThE
NjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLywKKwkJCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRF
MjQgLyogUmVuZGVyQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0
IC8qIFJlbmRlckJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQg
LyogUmVuZGVyVGFyZ2V0TXRsLmggKi8sCisJCQkJRkY4MUZFOTkyNTgxOEQ2ODAwODk0RTI0IC8q
IFJlbmRlclRhcmdldE10bC5tbSAqLywKKwkJCQlGRjgxRkU4QTI1ODE4RDY4MDA4OTRFMjQgLyog
U2FtcGxlck10bC5oICovLAorCQkJCUZGODFGRUE4MjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVy
TXRsLm1tICovLAorCQkJCUZGODFGRUNCMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJNdGwuaCAq
LywKKwkJCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovLAorCQkJ
CUZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggKi8sCisJCQkJRkY4MUZF
OTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0gKi8sCisJCQkJRkY4MUZFOEMyNTgx
OEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLywKKwkJCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRF
MjQgLyogU3luY010bC5tbSAqLywKKwkJCQlGRjgxRkVBNzI1ODE4RDY4MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oICovLAorCQkJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAvKiBUZXh0dXJlTXRs
Lm1tICovLAorCQkJCUZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFj
a010bC5oICovLAorCQkJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSAqLywKKwkJCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJy
YXlNdGwuaCAqLywKKwkJCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1ldGFsOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8qIHNoYWRlcnMgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRUFBMjU4MThE
NjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovLAorCQkJCUZGODFGRUIxMjU4MThENjgwMDg5NEUy
NCAvKiBjbGVhci5tZXRhbCAqLywKKwkJCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29t
bW9uLmggKi8sCisJCQkJRkY4MUZFQUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICov
LAorCQkJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRhbCAqLywK
KwkJCQlGRjgxRkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLywKKwkJ
CQlGRjgxRkVCMzI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX2luZGljZXMubWV0YWwgKi8sCisJCQkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8sCisJCQkJRkY4
MUZFQUUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jICovLAorCQkJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFs
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzaGFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJRkY4MUZGMjAyNTgxOTE5NzAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4
MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCAqLywKKwkJ
CQlGRjgxRkY1NDI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCAqLywK
KwkJCQlGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgKi8sCisJCQkJ
RkY4MUZGNDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLywKKwkJCQlGRjgxRkY0
RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovLAorCQkJCUZGODFGRjIzMjU4
MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oICovLAorCQkJCUZGODFGRjJCMjU4MTkxOTcwMDg5NEUy
NCAvKiBEZWJ1Z1NpbmsuaCAqLywKKwkJCQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjIyMjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovLAorCQkJCUZGODFGRjQxMjU4
MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAq
LywKKwkJCQlGRjgxRkYyQTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oICovLAorCQkJCUZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0
TWV0YWwuY3BwICovLAorCQkJCUZGODFGRjUyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCAqLywKKwkJCQlGRjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJs
ZS5oICovLAorCQkJCUZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgKi8sCisJCQkJRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmgg
Ki8sCisJCQkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLywKKwkJCQlG
RjgxRkYzODI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uaCAqLywKKwkJCQlGRjgxRkYzMjI1ODE5
MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLywKKwkJCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRF
MjQgLyogTGF5b3V0LmggKi8sCisJCQkJRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUy
NCAvKiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmggKi8sCisJCQkJRkY4MUZGMkYyNTgxOTE5
NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovLAorCQkJCUZGODFGRjNCMjU4MTkxOTcwMDg5
NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8sCisJCQkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8q
IE1vZGlmeVN0cnVjdC5jcHAgKi8sCisJCQkJRkY4MUZGNTYyNTgxOTE5NzAwODk0RTI0IC8qIE1v
ZGlmeVN0cnVjdC5oICovLAorCQkJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNw
cCAqLywKKwkJCQlGRjgxRkYyNDI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oICovLAorCQkJCUZG
ODFGRjM3MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8sCisJCQkJRkY4MUZGNDky
NTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi8sCisJCQkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLywKKwkJCQlGRjgxRkY0MjI1ODE5MTk3MDA4
OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCAqLywKKwkJCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRF
MjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLywKKwkJCQlGRjgxRkYyNzI1ODE5MTk3
MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmggKi8sCisJCQkJRkY4MUZGNEIyNTgx
OTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovLAorCQkJCUZGODFGRjU4MjU4MTkxOTcwMDg5
NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZG
NDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8s
CisJCQkJRkY4MUZGNDMyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJE
ZWNscy5oICovLAorCQkJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovLAorCQkJCUZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuaCAqLywKKwkJCQlGRjgxRkYzNjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3Mu
Y3BwICovLAorCQkJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5o
ICovLAorCQkJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNw
cCAqLywKKwkJCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBpcGVsaW5lcy5o
ICovLAorCQkJCUZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuY3BwICovLAorCQkJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLywKKwkJCQlGRjgxRkY1NTI1ODE5MTk3MDA4
OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQlGRjgxRkYz
OTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8sCisJ
CQkJRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjJDMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZGMzUyNTgxOTE5NzAw
ODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMzAyNTgxOTE5NzAw
ODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8sCisJCQkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0
IC8qIFN5bWJvbEVudi5oICovLAorCQkJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuY3BwICovLAorCQkJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuaCAqLywKKwkJCQlGRjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uY3BwICovLAorCQkJCUZGODFGRjUzMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMzYxMSw2ICs0MDQ1LDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCUEzQzQ5QzE1MjU1REY4NjUwMDVFOERGNyAvKiBBZGRBbmRUcnVl
VG9Mb29wQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5NzIyODI2QjlGMDBC
NUJBMkMgLyogQWRkRGVmYXVsdFJldHVyblN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjhFMjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjQyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDdBMTIzMDYyNUM2MDAyREE5NzIgLyogYW5kcm9p
ZF91dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc5OTIzMDYwMjUzMDAyREE5NzIgLyog
YW5nbGVfZ2wuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxOCw2ICs0MDUzLDggQEAKIAkJCQk1Q0M3
RDQ2QjE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2OEEyMjgyNkI5RjAwQjVCQTJDIC8qIEFycmF5UmV0dXJuVmFsdWVU
b091dFBhcmFtZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUMyNTgxQTNDMjAwODk0
RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODEyNTgxOTE5ODAwODk0
RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzIzMUIwNDM3NUYw
MDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREQ2
MUIwNDM4RDMwMDIzNTU1MiAvKiBBdHRyaWJ1dGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzYzMSw2ICs0MDY4LDcgQEAKIAkJCQk1QzFEQkREOTFCMDQzOEQzMDAyMzU1NTIgLyogQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDExOTFERTM5RjFBMDBEMkM0MDUgLyogQnVmZmVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERCMURFNDE2NDgwMEQyQzQwNSAvKiBCdWZm
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFQjI1ODE4RDY5MDA4OTRFMjQgLyog
QnVmZmVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzI5
MUIwNDM3NUYwMDIzNTU1MiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCRDdEMUZDRTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvckhMU0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzY0MywxMyArNDA4MSwxNyBAQAogCQkJ
CTMxNUVCRDlBMUZDRTQ0MzYwMEFDN0E4OSAvKiBDb2xsZWN0VmFyaWFibGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE4RTFEQkZFQTEwMDA2MDY2QjggLyogQ29sb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRUZCMjU4MThENjkwMDg5NEUyNCAvKiBjb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCREREMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJDMkMxQjA0Mzc1RjAwMjM1NTUyIC8qIENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDExQjFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGlsZXJHTC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REMxREU0MTY0ODAwRDJDNDA1IC8qIENvbXBpbGVySW1w
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMDQyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBp
bGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUJGMzI1NURGNjk3MDA1RThERjcgLyog
Y29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREUw
MUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg4
MjU4MTkxOTgwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFMTFCMDQzOEQzMDAyMzU1NTIgLyogQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVGQTI1ODE4RDY5MDA4OTRFMjQgLyogY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJERTMxQjA0MzhEMzAwMjM1NTUyIC8qIENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUEzMDMwNzI3MjMwNUY3QzQwMDJEQTk3MiAvKiBDb250ZXh0LmlubC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjU3LDkgKzQwOTksMTIgQEAKIAkJCQkzMTNCQ0U1RjIzNjExMzNB
MDBGQzM5RTUgLyogQ29udGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFEMURF
MzlGMUEwMEQyQzQwNSAvKiBDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERF
MURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQ0Q1OThFMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1hZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQ0Q4MTczMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDNTVENzM0MjI4Mjc0REUwMEI1QkEyQyAvKiBEZWNsYXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY1RTIyODI2QjlGMDBCNUJBMkMgLyogRGVjbGFyZUFuZEluaXRCdWlsdGlu
c0Zvckluc3RhbmNlZE11bHRpdmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODkyMjgy
NkI5RjAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM2NzIsNiArNDExNyw4IEBACiAJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNUMyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2NDI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292
ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
QkMxRkNFNDRCRjAwQUM3QTg5IC8qIERpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzFEQkRFOTFCMDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTNDNDlDMUUyNTVERjg4RTAwNUU4REY3IC8qIERpc3BsYXlBcHBsZV9hcGku
aCBpbiBIZWFkZXJzICovLApAQCAtMzY3OSw2ICs0MTI2LDggQEAKIAkJCQkzMTNCQ0U1NDIzNjEx
MzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFG
MURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEUyMURFNDE2NDgwMEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZFREEyNTgxOEQ2OTAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZGODFGRUQyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzkxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkVCMDFDMUQyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21l
bnRUZXN0c09wdGltaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NTgyNDkxQzg0
NTAwOTgyODc4IC8qIGVnbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg5LDYgKzQxMzgsNyBAQAog
CQkJCUEzQzQ5QkY5MjU1REY2RTUwMDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTY3MjI4NEY3OTYwMDE4RjJEOCAvKiBFR0xTeW5jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBM0M0OUJGQTI1NURGNkU1MDA1RThERjcgLyogRUdMU3luY0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjhDMjU4MTkxOTgwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjZBMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRl
R0xGcmFnQ29sb3JCcm9hZGNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY3MjMwNUY1
RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hhZGVyQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDNTVENkEzMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRlUHJlY2lzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3MDEsNiArNDE1MSw3IEBACiAJCQkJQTMwQjU4MkIyMzhERjgy
NjAwNzlGRERDIC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMl9hdXRvZ2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMURCNzk2QzI0OTFDOEY1MDA5ODI4NzggLyogZW50cnlfcG9pbnRzX2dsZXNfZXh0
X2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzI1MjMwNUY3QzQwMDJEQTk3MiAv
KiBlbnRyeV9wb2ludHNfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYyMjU4MTkx
OTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFQjFCMDQzOEQzMDAyMzU1NTIgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREU5MUZDRTQ1MkQwMEFDN0E4OSAvKiBFcnJvclN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzcyMiw2ICs0MTczLDcgQEAKIAkJCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEg
LyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkE0MjI4MjZC
OUYwMEI1QkEyQyAvKiBGb2xkRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEU4MURFNDE2NDgwMEQyQzQwNSAvKiBGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxREJERjIxQjA0MzhEMzAwMjM1NTUyIC8qIGZvcm1hdHV0aWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0IzMDEyNjFERTM5RjFBMDBEMkM0MDUgLyogZm9ybWF0dXRpbHNnbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkUzM0U4RUUyNEQwRDIwOTAwMjMwOUFDIC8qIGZyYW1lX2NhcHR1cmVf
dXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzczMSw2ICs0MTgzLDcgQEAKIAkJCQk1Q0IzMDEy
ODFERTM5RjFBMDBEMkM0MDUgLyogRnJhbWVidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNCMzA0RUIxREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RUExREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbF9tb2Nr
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRFMjQgLyogRnJhbWVC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkU5MjI4MjZDNzkwMEI1QkEyQyAv
KiBGdW5jdGlvbkxvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDAyNTVERjcxMTAw
NUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDUyNTVE
RjczNTAwNUU4REY3IC8qIEZ1bmN0aW9uc0VBR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzc2MCw2
ICs0MjEzLDggQEAKIAkJCQk1QzU1RDcyQzIyODI3NDc3MDBCNUJBMkMgLyogaGFzaF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERkExQjA0MzhEMzAwMjM1NTUyIC8qIGhpc3Rv
Z3JhbV9tYWNyb3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg2MjU4MTkxOTgwMDg5NEUy
NCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzIyNTgxOTE5
ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE3NzFEQkZFOTk5
MDA2MDY2QjggLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTkzMjI4NEZDNDAw
MDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRDk2MUZD
RTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0aW9uSExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NzgwLDExICs0MjM1LDE0IEBACiAJCQkJNUMxREJDMzExQjA0Mzc1RjAwMjM1NTUyIC8qIEludGVy
bU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkZFMjI4MjZDQjMwMEI1QkEyQyAvKiBJ
bnRlcm1Ob2RlX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzA4MjI4MjZDQjMwMEI1
QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjlFMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwMTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTc3MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNl
Q0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NTIzNjExMzNBMDBGQzM5RTUgLyogSU9T
dXJmYWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY0MjU4MThENjkw
MDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVF
QkQ4RTFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxREI3OTY2MjQ5MUM4ODIwMDk4Mjg3OCAvKiBraHJwbGF0Zm9ybS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJDMzIxQjA0Mzc1RjAwMjM1NTUyIC8qIGxlbmd0aF9saW1pdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjAxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVu
Y3Rpb25zX3RhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTIsNiArNDI1MCw4IEBACiAJCQkJ
MzE1RUJERjExRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjZFMjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3NTI1ODE5MTk4MDA4OTRF
MjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE5MDFEQkZFQTEw
MDA2MDY2QjggLyogbWF0cml4X3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGMjFC
MDQzNkVDMDAyMzU1NTIgLyogTWVtb3J5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTks
OSArNDI1OSwyNCBAQAogCQkJCUEzMDMwNzhDMjMwNUY4RjAwMDJEQTk3MiAvKiBNZW1vcnlPYmpl
Y3RHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5ODIyMjg0RkI5MDAwMThGMkQ4IC8qIE1l
bW9yeU9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVEMUZDRTQ1MkQwMEFD
N0E4OSAvKiBNZW1vcnlQcm9ncmFtQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkw
MjU4MTkxOTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjA4MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUVBMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Nv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREQyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9mb3JtYXRfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUU0MjU4MThENjkw
MDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRUQwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlf
cG9vbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMEQyNTgxOEQ2QTAwODk0RTI0IC8qIG10
bF9yZW5kZXJfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVGMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRTI1ODE4
RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkYwOTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjkyMjgyNkI5RjAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcwQjIzMDVGNkI1MDAyREE5NzIgLyogbm9fZGVzdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MDcyMjgyNkNCMzAwQjVCQTJDIC8qIE5vZGVT
ZWFyY2guaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBO
b2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEQzIxRkNFNDRCRjAwQUM3QTg5IC8q
IG51bGxfZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2
RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTY2MjI4NEY3
OTYwMDE4RjJEOCAvKiBPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODIxLDYgKzQyOTYs
NyBAQAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQjMwMTUxMURFMzlGNDcwMEQyQzQwNSAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNUQyMzYxMTMzQTAwRkMzOUU1IC8qIFBi
dWZmZXJTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODMyNTgxOTE5ODAw
ODk0RTI0IC8qIFBpcGVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNTFCMDQzNkVD
MDAyMzU1NTIgLyogcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRTI5MUZDRjgw
OEMwMEFDN0E4OSAvKiBQTXVySGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjcyMjgy
NzQ3NzAwQjVCQTJDIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODM0LDkgKzQz
MTAsMTEgQEAKIAkJCQk1Q0IzMDRGMzFERTQxNjQ4MDBEMkM0MDUgLyogUHJvZ3JhbUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQjMwNEYyMURFNDE2NDgwMEQyQzQwNSAvKiBQcm9ncmFtSW1w
bF9tb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRFNjFGQ0U0NTJEMDBBQzdBODkgLyog
UHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDEyNTgx
OEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVF
MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxNUVCREJCMUZDRTQ0QkYwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmVHTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzgxRkNFNDRFNDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZUlt
cGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9n
cmFtUHJlbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NzcyMjgyNkI5RjAwQjVCQTJD
IC8qIFBydW5lRW1wdHlDYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTUyMjgyNkI5
RjAwQjVCQTJDIC8qIFBydW5lTm9PcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MUI2MURC
RkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQ0
LDEwICs0MzIyLDEzIEBACiAJCQkJNUMxREJFMDQxQjA0MzhEMzAwMjM1NTUyIC8qIHF1ZXJ5Y29u
dmVyc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTMyMURFMzlGMUEwMEQyQzQwNSAv
KiBRdWVyeUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGNDFERTQxNjQ4MDBEMkM0MDUg
LyogUXVlcnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVENDI1ODE4RDY5MDA4OTRF
MjQgLyogUXVlcnlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTdEMURCRkU5OTkwMDYw
NjZCOCAvKiBxdWVyeXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3QzIyODI2QjlG
MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzQzQ5QzEzMjU1REY4NjUwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRl
ZFRvU3RydWN0dXJlZEJ1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYxMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMURCRTA2MUIwNDM4RDMwMDIzNTU1MiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2NUMyMjgyNkI5RjAwQjVCQTJDIC8qIFJlZ2VuZXJhdGVTdHJ1Y3RO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUEyMjgyNkI5RjAwQjVCQTJDIC8qIFJl
bW92ZUFycmF5TGVuZ3RoTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUQ3QkRGMTI0MzJD
Q0M0MDBFMDE1MDMgLyogUmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKQEAgLTM4NjEsMTEgKzQzNDIsMTMgQEAKIAkJCQk1Q0IzMDEzNDFERTM5RjFBMDBEMkM0MDUg
LyogUmVuZGVyYnVmZmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY2MURFNDE2NDgw
MEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRG
NTFERTQxNjQ4MDBEMkM0MDUgLyogUmVuZGVyYnVmZmVySW1wbF9tb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRjgxRkVERTI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGODFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRp
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTdDMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5k
ZXJlckNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8q
IFJlbmRlcmVyRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzgxREUzOUYxQTAwRDJD
NDA1IC8qIFJlbmRlcmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM2MURFMzlGMUEw
MEQyQzQwNSAvKiByZW5kZXJlcmdsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
MjI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMxQTI1NURGODZGMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMyMjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFj
ZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcwNzIzMDVG
NjM2MDAyREE5NzIgLyogUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zODc2LDE2ICs0MzU5LDIyIEBACiAJCQkJMzE1RUJERjkxRkNFNDUyRDAwQUM3QTg5IC8q
IFJlc291cmNlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZGNjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1
NzIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0aW9uRXhwcmVzc2lvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlQ2Fz
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjkyMzA1RjVFRTAwMkRB
OTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEzMDMwNkY4MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlRGZkeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2NEUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVEb1doaWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzU1RDY5MTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUVsc2VC
bG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjlFMjI4MjZCOUYwMEI1QkEyQyAvKiBS
ZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVyU3RvcmFnZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxNDI1NURGODY1MDA1RThERjcgLyogUmV3
cml0ZUludGVycG9sYXRlQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjZCMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODQyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjY4MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0
ZWRBc3NpZ25Ub1N3aXp6bGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkxNTIzQ0ZDQjc3
MDAzNzU2NTcgLyogUmV3cml0ZVJvd01ham9yTWF0cmljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDNTVENjRGMjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjg3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlVGV4ZWxG
ZXRjaE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzkyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2ODQyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3Jp
dGVVbmFyeU1pbnVzT3BlcmF0b3JJbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzBBMjI4
MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4OTYsMTIgKzQzODUsMTUgQEAKIAkJCQk1QzFEQkYyODFCMDQzOEQzMDAyMzU1NTIgLyogU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxM0ExREUzOUYxQTAwRDJDNDA1IC8qIFNh
bXBsZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjkxREU0MTY0ODAwRDJDNDA1IC8q
IFNhbXBsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEOTI1ODE4RDY5MDA4OTRF
MjQgLyogU2FtcGxlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OEUyMjgyNkI5RjAw
QjVCQTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTMwMzA3MjkyMzA1RjdDNDAwMkRBOTcyIC8qIFNlbWFwaG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTMwMzA3OEQyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcyQjIzMDVGODAwMDAyREE5NzIgLyogU2VtYXBob3JlSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2N0QyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFy
YXRlQXJyYXlDb25zdHJ1Y3RvclN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk2MjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjczMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY2MjU4MTkxOTcwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY3MDIyODI2QjlGMDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjRDMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkw
MzIzQ0ZDNUEzMDAzNzU2NTcgLyogc2VyaWFsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5
MTAsMTQgKzQ0MDIsMTcgQEAKIAkJCQk1Q0IzMDEzQzFERTM5RjFBMDBEMkM0MDUgLyogU2hhZGVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEZBMURFNDE2NDgwMEQyQzQwNSAvKiBTaGFk
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2NDI0OTFDODc2MDA5ODI4NzggLyog
U2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMTEyNTgxOEQ2QTAwODk0RTI0
IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjUyNDkxQzg3NjAwOTgy
ODc4IC8qIFNoYWRlclZhcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjYxMjI4MjZCOUYw
MEI1QkEyQyAvKiBTaW1wbGlmeUxvb3BDb25kaXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTVFQkRGMDFGQ0U0NTJEMDBBQzdBODkgLyogU2l6ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGNkYyNTgxOTE5ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBM0M0OUMwMzI1NURGNzE5MDA1RThERjcgLyogU29mdExpbmtpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMwMTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUIyMjgyNkI5RjAwQjVCQTJDIC8q
IFNwbGl0U2VxdWVuY2VPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJGMkMxQjA0
MzhEMzAwMjM1NTUyIC8qIFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzRTFERTM5
RjFBMDBEMkM0MDUgLyogU3RhdGVNYW5hZ2VyR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RjFEMjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0NEODE4MTFEQkZFOTk5MDA2MDY2QjggLyogU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDRGQjFERTQxNjQ4MDBEMkM0MDUgLyogU3RyZWFtUHJvZHVjZXJJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE5MjFEQkZFQTEwMDA2MDY2QjggLyogc3RyaW5nX3V0aWxzLmggaW4g
SGVhZGVycyAqLywKQEAgLTM5MjUsMTIgKzQ0MjAsMTUgQEAKIAkJCQk1QzFEQkYyRjFCMDQzOEQz
MDAyMzU1NTIgLyogU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDAxREUzOUYx
QTAwRDJDNDA1IC8qIFN1cmZhY2VHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkQxREU0
MTY0ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
NzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2RTYyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGN0UyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwRDIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEODUxRkNFNDQzNjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1
ZUlkLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRCOTFGQ0U0NEJGMDBBQzdBODkgLyogU3lu
Y0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDQjFGQ0U0NEU0MDBBQzdBODkgLyogU3lu
Y0ltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURCMjU4MThENjkwMDg5NEUyNCAvKiBT
eW5jTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEzMzFDNzFFQTVFRDVGMDBGRDIyMDMgLyog
c3lzdGVtX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk5QzIyODRGQzc1MDAxOEYy
RDggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFCMTU3MjIyMzZCODAzMzAw
Q0FBNEZEIC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzOSwx
OCArNDQzNywyMyBAQAogCQkJCTVDQjMwMTQyMURFMzlGMUEwMEQyQzQwNSAvKiBUZXh0dXJlR0wu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAwMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJl
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkUxREU0MTY0ODAwRDJDNDA1IC8qIFRl
eHR1cmVJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY2MjU4MThENjkwMDg5
NEUyNCAvKiBUZXh0dXJlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRGNDFGQ0U0NTJE
MDBBQzdBODkgLyogVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNzFCMDQzNkVD
MDAyMzU1NTIgLyogdGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkxMjU4MTkxOTgw
MDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzIw
MjMwNUY3QzQwMDJEQTk3MiAvKiB0cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMzMxRTIx
RUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFE
QkYzNDFCMDQzOEQzMDAyMzU1NTIgLyogVHJhbnNmb3JtRmVlZGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwMTQ0MURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMjFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3Jt
RmVlZGJhY2tJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMTFERTQxNjQ4MDBEMkM0
MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRURGMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2RDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFCMjU4MTkwQ0EwMDg5NEUyNCAvKiBU
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFGMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJEOUQxRkNFNDQzNjAwQUM3QTg5IC8qIFRyYW5zbGF0b3JWdWxrYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2ODYyMjgyNkI5RjAwQjVCQTJDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDEwLDExICs0NTEzLDEzIEBACiAJCQkJNUMxREJGNDAx
QjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0Iz
MDE0NjFERTM5RjFBMDBEMkM0MDUgLyogVmVydGV4QXJyYXlHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzA1MDMxREU0MTY0ODAwRDJDNDA1IC8qIFZlcnRleEFycmF5SW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5TXRsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkY0MjFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0
cmlidXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwMDIyODI2Q0IzMDBCNUJBMkMgLyog
VmlzaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMUI2MTgzMjMwQjc0N0YwMDE2MTBENyAvKiBX
aW5kb3dTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RTIzNjExMzNBMDBG
QzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREZB
MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2NzUyMjgyNkI5RjAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTUxMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2gu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTQxMzcsMTQgKzQ2NDIsMTcgQEAKIAkJCWZpbGVz
ID0gKAogCQkJCUEzQzQ5QzBFMjU1REY4NUYwMDVFOERGNyAvKiBBZGRBbmRUcnVlVG9Mb29wQ29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkE5MjI4MjZCQzgwMEI1QkEyQyAv
KiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkY3NDI1ODE5MTk4MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ3MjEyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwN0EwMjMwNjI1QzYwMDJEQTk3MiAvKiBhbmRyb2lk
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDMxQjA0MzhEMzAwMjM1NTUyIC8q
IGFuZ2xldHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjAxQjA0MzZFQzAwMjM1
NTUyIC8qIGFuZ2xldXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2
MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZBQTIyODI2QkM4MDBCNUJBMkMgLyogQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc4MjU4MTkxOTgwMDg5NEUyNCAvKiBBc3RI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQzIyMUIwNDM3NUYwMDIzNTU1MiAv
KiBBU1RNZXRhZGF0YUhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDUxQjA0MzhE
MzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMw
MTE2MURFMzlGMUEwMEQyQzQwNSAvKiBCbGl0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5NjEyMjg0Rjc5NjAwMThGMkQ4IC8qIEJsb2JDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzFEQkMyNDFCMDQzNzVGMDAyMzU1NTIgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00MTUzLDYgKzQ2NjEsNyBAQAogCQkJCTVDMURCREQ4MUIwNDM4RDMwMDIzNTU1MiAv
KiBCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMTgxREUzOUYxQTAwRDJDNDA1
IC8qIEJ1ZmZlckdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMzNFOEU4MjREMEQxRUIwMDIz
MDlBQyAvKiBCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUwMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxMzE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxREJDMjgxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkQ4NDFGQ0U0NDM2MDBBQzdBODkg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDE2
MSwxMiArNDY3MCwxNCBAQAogCQkJCTVDMURCRERBMUIwNDM4RDMwMDIzNTU1MiAvKiBDYXBzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFDMjI4MjZCQzgwMEI1QkEyQyAvKiBDbGFtcEZy
YWdEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZBRDIyODI2QkM4MDBCNUJBMkMg
LyogQ2xhbXBQb2ludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGQTIyNTgxQUQw
NDAwODk0RTI0IC8qIGNsZWFyLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkQxRkNF
NDRCRjAwQUM3QTg5IC8qIENsZWFyTXVsdGl2aWV3R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE1RUJEOEMxRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDMURCRERDMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExQTFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGls
ZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyog
Q29tcGlsZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGMjI1NURGNjk3MDA1RThE
RjcgLyogY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuY2MgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRERjFCMDQzOEQzMDAyMzU1NTIgLyogQ29uZmlnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q4MUIwMURCRkVBNUMwMDYwNjZCOCAvKiBDb25zdGFudFVuaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDE3Nyw2ICs0Njg4LDggQEAKIAkJCQkzMTNCQ0U1ODIzNjExMzNBMDBGQzM5RTUg
LyogQ29udGV4dEVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUMxREUzOUYxQTAw
RDJDNDA1IC8qIENvbnRleHRHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERDFERTQx
NjQ4MDBEMkM0MDUgLyogQ29udGV4dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MDYyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4gU291cmNlcyAq
LywKIAkJCQk1Q0NENTk4RjIyODRGQzQwMDAxOEYyRDggLyogY29weWltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQ0Q4MTcyMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MTkyLDYgKzQ3MDUsOCBAQAogCQkJCTMxMDEyRTI4MThCOTdCOUIwMDM5
MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRjYzMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3QjI1ODE5MTk4
MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTVFQkRCRTFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdM
X2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERTgxQjA0MzhEMzAwMjM1NTUy
IC8qIERpc3BsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMUMyNTVERjg4OTAwNUU4
REY3IC8qIERpc3BsYXlBcHBsZV9hcGkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTk5LDEyICs0
NzE0LDE0IEBACiAJCQkJMzEzQkNFNjEyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUUxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRFMTFERTQxNjQ4MDBEMkM0MDUgLyogRGlz
cGxheUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0
IC8qIERpc3BsYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRDQzFGQ0U0NEU0MDBB
QzdBODkgLyogZHJpdmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzlEMjMw
NjI1NjUwMDJEQTk3MiAvKiBkcml2ZXJfdXRpbHNfbWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NkVCMDFDMUUyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21lbnRUZXN0c09wdGltaXphdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGNzI1NURGNkRGMDA1RThERjcgLyogRUdM
UmV1c2FibGVTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZBMjI4NEY3OTYwMDE4
RjJEOCAvKiBFR0xTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY4MjU1REY2RTEw
MDVFOERGNyAvKiBFR0xTeW5jSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RDk3MUZDRTQ0MzYwMEFDN0E4OSAvKiBlbXVsYXRlZF9idWlsdGluX2Z1bmN0aW9uc19obHNsX2F1
dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjEyMjgyNkJDODAwQjVCQTJDIC8q
IEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAz
MDZGQzIzMDVGNUVFMDAyREE5NzIgLyogRW11bGF0ZU11bHRpRHJhd1NoYWRlckJ1aWx0aW5zLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDI0MiwxMSArNDc1OSwxNCBAQAogCQkJCTVDMURCREYzMUIw
NDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFE
QkRGNTFCMDQzOEQzMDAyMzU1NTIgLyogRnJhbWVidWZmZXJBdHRhY2htZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTI3MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjBGMjU4MThENkEwMDg5NEUyNCAvKiBGcmFtZUJ1
ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTZFQTBENjkzMjM1MTVBNUMwMEI4NjUxRiAv
KiBGcmFtZUNhcHR1cmVfbW9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZFNDIyODI2
Qzc5MDBCNUJBMkMgLyogRnVuY3Rpb25Mb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlDMDIyNTVERjcxNDAwNUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0M0OUMwNzI1NURGNzM5MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTJCMURFMzlGMUEwMEQyQzQwNSAvKiBGdW5jdGlvbnNHTC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBNDI1ODFBRDA0MDA4OTRFMjQgLyogZ2VuX2luZGlj
ZXMubWV0YWwgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBMzI1ODFBRDA0MDA4OTRFMjQgLyog
Z2VuX21pcG1hcC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZCMjI4NEY3OTYwMDE4
RjJEOCAvKiBHTEVTMVJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTYzMjI4
NEY3OTYwMDE4RjJEOCAvKiBHTEVTMVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMUJB
QUIxMURGQjZGMzMwMDI5MDZCQiAvKiBnbG9iYWxfc3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MjU0LDYgKzQ3NzQsOCBAQAogCQkJCUEzRDMyOTBCMjNDRkNCNEQwMDM3NTY1NyAvKiBnbHNs
YW5nX3RhYl9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREY4MUIwNDM4RDMw
MDIzNTU1MiAvKiBIYW5kbGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
ODYxRkNFNDQzNjAwQUM3QTg5IC8qIEhhc2hOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY4MjI1ODE5MTk4MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGOEIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q4MTc2MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk5MTIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3JtYXRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNUVCRDgzMUZDRTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0
aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyNzAsMTAgKzQ3OTIsMTMgQEAKIAkJCQk1
QzFEQkMzMDFCMDQzNzVGMDAyMzU1NTIgLyogSW50ZXJtTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QzU1RDcwOTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZV91dGlsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDNTVENzA0MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOUQyNTgxQTNDMjAwODk0
RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDIyMjgy
NkNCMzAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVD
Q0Q1OTc5MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTVDMjM2MTEzM0EwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNl
RUFHTC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUVEMjU4MThENjkwMDg5NEUyNCAvKiBJ
T1N1cmZhY2VTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEOUMxRkNFNDQz
NjAwQUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjZDMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEVGMURFNDE2NDgwMEQyQzQwNSAvKiBsb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTk1MjI4NEZDNDAwMDE4RjJEOCAvKiBs
b2FkaW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjgxLDEyICs0ODA2LDI3IEBACiAJCQkJ
MzE1RUJERTgxRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QjgxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEJBMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5j
dGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjY5MjU4MTkx
OTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDcy
MTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDcyNTIyODI3NDc3MDBCNUJBMkMgLyogbWF0cml4X3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDMURCQkYxMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NjQyMjg0Rjc5NjAwMThGMkQ4IC8qIE1lbW9yeU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDc4QjIzMDVGOEYwMDAyREE5NzIgLyogTWVtb3J5T2Jq
ZWN0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERjMxRkNFNDUyRDAwQUM3QTg5IC8q
IE1lbW9yeVByb2dyYW1DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2MDI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEMyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9jb21tb24u
bW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFMTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zv
cm1hdF90YWJsZV9hdXRvZ2VuLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRDUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkY4MUZGMDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYyMjU4MThENjkwMDg5NEUyNCAv
KiBtdGxfcmVuZGVyX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVG
MDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkY4MUZFRUMyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGlscy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkI2MjI4MjZCQzgwMEI1QkEyQyAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRCRjFGQ0U0NEJGMDBBQzdBODkgLyog
bnVsbF9mdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5NjkyMjg0Rjc5NjAw
MThGMkQ4IC8qIE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDMwNiw2ICs0ODQ2LDcg
QEAKIAkJCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDQ0Q1OTZGMjI4NEY5NTUwMDE4RjJEOCAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTNCQ0U1NjIzNjExMzNBMDBGQzM5RTUgLyog
UGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjcxMjU4MTkx
OTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRGRTFC
MDQzOEQzMDAyMzU1NTIgLyogUGxhdGZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJF
MjgxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MzE4LDkgKzQ4NTksMTEgQEAKIAkJCQk2RUQ3QkRGNjI0MzJDRDYyMDBFMDE1MDMgLyogUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkYxREUzOUYxQTAw
RDJDNDA1IC8qIFByb2dyYW1HTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFQzFGQ0U0
NTJEMDBBQzdBODkgLyogUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNUVCREU1MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkExRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1Q
aXBlbGluZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQjAxQzI0MjQ3NzI3QzIwMEU1MEIz
NSAvKiBQcm9ncmFtUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDZCNzIyODI2QkM4MDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkI4MjI4MjZCQzgwMEI1QkEyQyAvKiBQcnVuZU5vT3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQ0Q4MUI1MURCRkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJU
eXBlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMjgsOSArNDg3MSwxMSBAQAogCQkJCTVDMURC
RTAzMUIwNDM4RDMwMDIzNTU1MiAvKiBxdWVyeWNvbnZlcnNpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDQjMwMTMxMURFMzlGMUEwMEQyQzQwNSAvKiBRdWVyeUdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgwMjI4NEZCOTAwMDE4RjJEOCAvKiBRdWVyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFREMyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxN0MxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjkyMjgyNkJDODAwQjVCQTJDIC8qIFJlY29y
ZENvbnN0YW50UHJlY2lzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzBDMjU1REY4
NUYwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRlZFRvU3RydWN0dXJlZEJ1
ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0IC8q
IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCQTIy
ODI2QkM4MDBCNUJBMkMgLyogUmVnZW5lcmF0ZVN0cnVjdE5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkJCMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVBcnJheUxlbmd0aE1ldGhv
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUQ3QkRGMDI0MzJDQ0M0MDBFMDE1MDMgLyogUmVt
b3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM0MiwxMSAr
NDg4NywxMyBAQAogCQkJCTVDNTVENkMwMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVVbnJlZmVy
ZW5jZWRWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJFMDcxQjA0MzhEMzAw
MjM1NTUyIC8qIFJlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzMzFE
RTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwNEY3MURFNDE2NDgwMEQyQzQwNSAvKiByZW5kZXJlcl91dGlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk3QTIyODRGQTgzMDAxOEYyRDggLyogUmVuZGVyZXJD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNTkyMzYxMTMzQTAwRkMzOUU1IC8qIFJl
bmRlcmVyRUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNzFERTM5RjFBMDBEMkM0
MDUgLyogUmVuZGVyZXJHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNTFERTM5RjFB
MDBEMkM0MDUgLyogcmVuZGVyZXJnbF91dGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkVFODI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTNDNDlDMTkyNTVERjg2QzAwNUU4REY3IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFy
eWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUIwMUMyMTI0NzcyN0E5MDBFNTBCMzUgLyog
UmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMw
NzA1MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDM1NCwyNyArNDkwMSwzNiBAQAogCQkJCTVDMURCRjI1MUIwNDM4RDMw
MDIzNTU1MiAvKiBSZXNvdXJjZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2
RkIyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVBdG9taWNDb3VudGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDMTIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0
aW9uRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTIyNTgxOTE5ODAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEzMDMwNkZEMjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFy
cmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNkZBMjMwNUY1RUUwMDJEQTk3MiAvKiBS
ZXdyaXRlRGZkeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMjIyODI2QkM4MDBCNUJB
MkMgLyogUmV3cml0ZURvV2hpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzMyMjgy
NkJDODAwQjVCQTJDIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM0MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVy
U3RvcmFnZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjdGMjU4MTkxOTgwMDg5
NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTNDNDlDMEQyNTVERjg1RjAwNUU4REY3IC8qIFJld3JpdGVJbnRlcnBvbGF0ZUF0T2Zmc2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdy
aXRlS2V5d29yZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzAyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc2MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM1MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0ZWRBc3NpZ25Ub1N3aXp6
bGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzRDMyOTE0MjNDRkNCNzcwMDM3NTY1NyAvKiBS
ZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDNjIy
ODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVN0cnVjdFNhbXBsZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQ0QwMENDMjQ5MTk2QTUwMDQ4NkYyNyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnNP
bGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzcyMjgyNkJDODAwQjVCQTJDIC8qIFJl
d3JpdGVUZXhlbEZldGNoT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjgwMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzgyMjgyNkJDODAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1p
bnVzT3BlcmF0b3JGbG9hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDOTIyODI2QkM4
MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZGQzIyODI2Q0IzMDBCNUJBMkMgLyogUnVuQXRUaGVFbmRPZlNoYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYyNzFCMDQzOEQzMDAyMzU1NTIgLyogU2FtcGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzOTFERTM5RjFBMDBEMkM0MDUgLyogU2Ft
cGxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUY3MjU4MThENjkwMDg5NEUyNCAv
KiBTYW1wbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0EyMjgyNkJDODAwQjVC
QTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMzAzMDcyODIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBob3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEzMDMwNzhBMjMwNUY4RjAwMDJEQTk3MiAvKiBTZW1hcGhvcmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQjIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVB
cnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZD
QzIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVBcnJheUluaXRpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRjhGMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUYyNTgxOTE5NzAw
ODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0QyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRGVjbGFyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNFMjI4MjZCQzgwMEI1QkEyQyAvKiBT
ZXBhcmF0ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q1OTg0MjI4NEZCRTcwMDE4RjJEOCAvKiBzaGExLmNjIGluIFNvdXJjZXMgKi8sCkBAIC00
MzgyLDYgKzQ5MzgsNyBAQAogCQkJCTVDQjMwMTNCMURFMzlGMUEwMEQyQzQwNSAvKiBTaGFkZXJH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk4MTIyODRGQjkwMDAxOEYyRDggLyogU2hh
ZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxMjI1ODE4RDZBMDA4
OTRFMjQgLyogU2hhZGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDExQjA0Mzc1
RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0Yy
MjgyNkJDODAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUM1NUQ2RDAyMjgyNkJDODAwQjVCQTJDIC8qIFNwbGl0U2VxdWVuY2VPcGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzOTMsMTEgKzQ5NTAsMTQgQEAKIAkJCQk1QzFEQkYy
RTFCMDQzOEQzMDAyMzU1NTIgLyogU3VyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDEzRjFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEZDMURFNDE2NDgwMEQyQzQwNSAvKiBTdXJmYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkVFMzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkUzMjI4MjZDNzkwMEI1QkEyQyAvKiBTeW1ib2wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkEyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MEUyMjgyNzQxNDAwQjVCQTJDIC8qIFN5
bWJvbFRhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQUUxRkNFNDQz
NjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1ZUlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
REMwMUZDRTQ0QkYwMEFDN0E4OSAvKiBTeW5jR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4
MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
M0M0OUMyMTI1NURGOTczMDA1RThERjcgLyogc3lzdGVtX3V0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQTMzMUM2MUVBNUVENUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHNfbWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzMwMjI4Mjc0NzcwMEI1QkEyQyAvKiBzeXN0ZW1fdXRp
bHNfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDA5LDEzICs0OTY5LDE4IEBACiAJCQkJ
MzE1RUJEOTkxRkNFNDQzNjAwQUM3QTg5IC8qIFRleHR1cmVGdW5jdGlvbkhMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNCMzAxNDExREUzOUYxQTAwRDJDNDA1IC8qIFRleHR1cmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRGRjFERTQxNjQ4MDBEMkM0MDUgLyogVGV4dHVyZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRjUyNTgxOEQ2OTAwODk0RTI0IC8qIFRl
eHR1cmVNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMjFGQ0U0NTJEMDBBQzdBODkg
LyogVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQkY2MUIwNDM2RUMwMDIzNTU1
MiAvKiB0bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjZEMjU4MTkxOTgwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJGMzMxQjA0
MzhEMzAwMjM1NTUyIC8qIFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwMTQzMURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRUYzMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2QzE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MUMyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRp
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJENzgxRkNFNDQzNjAwQUM3QTg5IC8qIFRy
YW5zbGF0b3JWdWxrYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDQxQjA0Mzc1RjAw
MjM1NTUyIC8qIFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQxMjI4MjZCQzgw
MEI1QkEyQyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NDY2LDEwICs1MDMxLDEzIEBACiAJCQkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjNGMUIwNDM4RDMwMDIzNTU1MiAv
KiBWZXJ0ZXhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDE0NTFERTM5RjFBMDBE
MkM0MDUgLyogVmVydGV4QXJyYXlHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFOTI1
ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkY0MTFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRkEwMjU4MUFEMDQwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTMxQjYxODQyMzBCNzQ3RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZh
Y2VDR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUIxNTcyMzIzNkI4MkJCMDBDQUE0RkQgLyog
V2luZG93U3VyZmFjZUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFNzFGQ0U0NTJE
MDBBQzdBODkgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg3
MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZENTIyODI2QkM4MDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk1MDIyODRFQ0QxMDAxOEYyRDggLyogeHhoYXNoLmMg
aW4gU291cmNlcyAqLywKIAkJCSk7CkBAIC00NTUyLDYgKzUxMjAsMTcgQEAKIAkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAzMUNE
RkRFRjI0OTE3Rjg5MDA0ODZGMjcgLyogQU5HTEUtc3RhdGljLnhjY29uZmlnICovOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiJChERUJVR19ERUZJTkVTKSIsCisJCQkJCUxJQkdMRVNWMl9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJTElCQU5HTEVfSU1QTEVNRU5UQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9PUEVOR0wsCisJ
CQkJCUFOR0xFX0VOQUJMRV9HTFNMLAorCQkJCQlBTkdMRV9FTkFCTEVfRVNTTCwKKwkJCQkJR0xf
U0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJR0xFU19TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJ
CQlBTkdMRV9FTkFCTEVfTUVUQUwsCisJCQkJKTsKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKQEAgLTQ1NzQsNiArNTE1MywxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkw
MDQ4NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RF
RklORVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9J
TVBMRU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5B
QkxFX0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJF
Q0FUSU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJM
RV9NRVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKQEAgLTQ1ODEs
NiArNTE3MSwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4NkYyNyAvKiBBTkdMRS1z
dGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19QUkVQUk9D
RVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKKwkJCQkJTElC
R0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0dMU0wsCisJCQkJCUFO
R0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJCQlHTEVT
X1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9NRVRBTCwKKwkJCQkpOwog
CQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcK
aW5kZXggNmNiYmUxN2JlZjE5YTg1ODVjZGUxYjljNGVjYmIwNjk4NjRlNTFkNC4uYzU0ZDI3M2Ew
MjgyOGExYjZjNWQ3OTg3OTYzMjIxM2UyMGVmZThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29u
ZmlnCkBAIC00LDcgKzQsNyBAQAogUFJPRFVDVF9OQU1FID0gQU5HTEUtc2hhcmVkOwogRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CiAKLUFOR0xFX09USEVSX0xERkxBR1MgPSAtYWxsb3dhYmxlX2Ns
aWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9ydCAtZnJhbWV3
b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBGb3VuZGF0
aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKSAkKEFOR0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CitBTkdMRV9PVEhF
Ul9MREZMQUdTID0gLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZSAtYWxsb3dhYmxlX2NsaWVudCBX
ZWJDb3JlVGVzdFN1cHBvcnQgLWZyYW1ld29yayBRdWFydHpDb3JlIC1mcmFtZXdvcmsgQ29yZUdy
YXBoaWNzIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3
b3JrIE1ldGFsICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKSAkKEFO
R0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9u
ZW9zID0gLWx6OwogQU5HTEVfT1RIRVJfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKEFOR0xF
X09USEVSX0xERkxBR1NfaXBob25lb3MpOwogQU5HTEVfT1RIRVJfTERGTEFHU193YXRjaG9zID0g
JChBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9uZW9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NoYW5n
ZXMuZGlmZgppbmRleCBhODMwMTRhZWM4M2VmZjM5YTJjZmZmYWE0ZmQ3MThjZmRjNDQ0MWIwLi4w
N2FkYjFjYmRmYmQyZTZiNDZkZWMzNDE2ZjMwMDE5NjdjZjg2NTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY2hhbmdlcy5kaWZmCkBAIC0xMCw2ICsxMCwxOTggQEAgaW5kZXggNmQ5MDQwYS4uYzhj
OWI2YyAxMDA2NDQKICAvdG9vbHMvY2xhbmcKICAvdG9vbHMvZmxleC1iaXNvbi9saW51eC9iaXNv
bgogIC90b29scy9mbGV4LWJpc29uL2xpbnV4L2ZsZXgKK2RpZmYgLS1naXQgYS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAoraW5kZXgg
ZTEwZDExMi4uNmY2YTcyYiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmgKKysrKyBiL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK0BAIC03Myw2ICs3Myw5IEBA
IGVudW0gU2hTaGFkZXJPdXRwdXQKKyAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wgdG8g
YmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVkIHRv
IE1ldGFsCisgICAgIC8vIGxhdGVyLgorICAgICBTSF9HTFNMX01FVEFMX09VVFBVVCA9IDB4OEI0
QywKKysKKysgICAgLy8gT3V0cHV0IGZvciBNU0wKKysgICAgU0hfTVNMX01FVEFMX09VVFBVVCA9
IDB4OEI0RCwKKyB9OworIAorIC8vIENvbXBpbGUgb3B0aW9ucy4KK2RpZmYgLS1naXQgYS9pbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRs
LmgKK2luZGV4IGZlNWU4YWIuLjlhMGJlZTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3BsYXRmb3Jt
L0ZlYXR1cmVzTXRsLmgKKysrKyBiL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaAorQEAg
LTI3LDcgKzI3LDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAg
ICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBvdGhl
ciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFN1cHBvcnQgZXhwbGljaXQg
bWVtb3J5IGJhcnJpZXIKKy0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisrICAgIEZlYXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRf
bWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZXhwbGlj
aXQgbWVtb3J5IGJhcnJpZXIiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFNvbWUgcmVuZGVyZXIg
Y2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFwbHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgor
QEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIg
ZGlzcGF0Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OworIAorICAgICAvLyBmcmFnbWVudCBz
dGVuY2lsIG91dHB1dCBzdXBwb3J0CistICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsi
aGFzX3NoYWRlcl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKysgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHN0ZW5jaWwgb3V0cHV0IGZyb20gZnJh
Z21lbnQgc2hhZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJz
fTsKKyAKK0BAIC01OSw2ICs1OSwxMCBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0
QmFzZQorICAgICBGZWF0dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUg
cmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZtZW1iZXJzfTsKKyAKKysgICAg
RmVhdHVyZSBhbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YSA9IHsKKysgICAgICAgICJhbGxvd19p
bmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CisrICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHVzaW5nIGlubGluZSBjb25zdGFudCBk
YXRhIGZvciBzbWFsbCBjbGllbnQgdmVydGV4IGRhdGEiLCAmbWVtYmVyc307CisrCisgICAgIC8v
IE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBhcmUgbm90IHN1cHBy
b3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCisgICAgIC8vIHRoZXkgYXJlIHN1cHByb3Rl
ZDoKKyAgICAgRmVhdHVyZSBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CitA
QCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJ3aGVyZWFzIG90aGVycyBzdWNoIGFzIG1hY09TIGRvbid0IiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKysgICAgRmVhdHVyZSBhbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUg
PSB7CisrICAgICAgICAiYWxsb3dfcnVudGltZV9zYW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAmbWVt
YmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dTYW1wbGVyQ29tcGFyZUdyYWRpZW50ID0gewor
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxl
X2NvbXBhcmUgd2l0aCBncmFkaWVudHMiLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxs
b3dTYW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxlX2NvbXBhcmUgd2l0aCBsb2Qi
LCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFs
bG93X2J1ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgYnVmZmVyIHJlYWQgJiB3cml0ZSBpbiB0aGUgc2FtZSBzaGFkZXIiLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKysKKyAgICAgRmVhdHVyZSBhbGxv
d011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlID0geworICAgICAgICAgImFsbG93X21zYWFfc3Rv
cmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAg
ICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNh
bWUgcGFzcyIsICZtZW1iZXJzfTsKK0BAIC03NSwxNCArOTQsMjcgQEAgc3RydWN0IEZlYXR1cmVz
TXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlwc19wZXJfcGFz
cyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICJUaGUgcmVuZGVy
ZXIgc3VwcG9ydHMgZ2VuZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJl
cnN9OworIAorKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJmb3JjZV9k
MjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5j
aWw4IGZvcm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUg
YnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQnJlYWtpbmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24i
LCAmbWVtYmVyc307CisrCisgICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewor
LSAgICAgICAgImZvcmNlX2J1ZmZlcl9ncHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCistICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBi
dWZmZXIncyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBtZW1vcnkgKHN1Y2gg
YXMgIgorLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9u
IGZvciBidWZmZXJzLiIsCisrICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVh
dHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorKyAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBz
dXBwb3J0IGJvdGggYnVmZmVyJyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBt
ZW1vcnkgKHN1Y2ggYXMgIgorKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9y
eSBhbGxvY2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKy0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9y
Y2VfZDI0czhfYXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcmNlIERlcHRoMjRT
dGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwgJm1lbWJlcnN9OworKyAgICBGZWF0dXJl
IGZvcmNlTm9uQ1NCYXNlTWlwbWFwR2VuZXJhdGlvbiA9IHsKKysgICAgICAgICJmb3JjZV9ub25f
Y3NfbWlwbWFwX2dlbiIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAg
ICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBDb21wdXRlIFNoYWRlciBiYXNlZCBt
aXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgorKyAgICAgICAgImJhc2VkIG1pcG1h
cCBnZW5lcmF0aW9uIG1pZ2h0IGNhdXNlIEdQVSBoYW5nIG9uIHNvbWUgb2xkZXIgaU9TIGRldmlj
ZXMuIiwKKysgICAgICAgICZtZW1iZXJzfTsKKysKKysgICAgRmVhdHVyZSBlbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2sgPSB7CisrICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAiVHVybiB0aGlzIG9uIHRv
IGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBhIDItcGFzcyBWUyBmb3Ig
R0xFUzMuIiwgJm1lbWJlcnN9OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwIGIvc3JjL2NvbW1vbi9Qb29sQWxsb2Mu
Y3BwCitpbmRleCAyN2RkOTMwLi4zYmRjYzMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuY3BwCisrKysgYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5jcHAKK0BAIC0zMzUsNyArMzM1
LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQorIHZvaWQgQWxsb2NhdGlvbjo6Y2hl
Y2tBbGxvY0xpc3QoKSBjb25zdAorIHsKKyAgICAgZm9yIChjb25zdCBBbGxvY2F0aW9uICphbGxv
YyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1QcmV2QWxsb2MpCistICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKKysgICAgICAgIGFsbG9jLT5jaGVja0FsbG9jKCk7CisgfQorIAor
IH0gIC8vIG5hbWVzcGFjZSBhbmdsZQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vUG9vbEFsbG9j
LmggYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCitpbmRleCA2OTI5OTJjLi5jZDI2NmEwIDEwMDY0
NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuaAorKysrIGIvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaAorQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQWxsb2NhdGlvbgorICNlbmRpZgorICAgICB9
CisgCistICAgIHZvaWQgY2hlY2soKSBjb25zdAorKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25z
dAorICAgICB7CisgICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwga0d1YXJkQmxv
Y2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFy
ZCgpLCBrR3VhcmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIGIvc3JjL2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGls
cy5oCitpbmRleCA1NWViYjdhLi44M2FiNTMyIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCisrKysgYi9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxz
LmgKK0BAIC0xNSwyNCArMTUsMzIgQEAKKyAKKyAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1Qgb25s
eSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CisgCisrI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUg
MyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisgLy8gYXZhaWxh
YmxlOgorLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAgICAg
ICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBp
T1MgaU9TVmVyLCAqKQorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0
aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcworIC8v
IGF2YWlsYWJsZToKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFjVmVy
LCBtYWNDYXRhbHlzdFZlcikgXAorICAgICAgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1h
Y0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9D
STogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4g
dmVyaW9ucyBpcworKy8vIGF2YWlsYWJsZToKKysjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJ
TEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorKyAgICAgICAgQGF2YWlsYWJsZSht
YWNDYXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKKyAjZWxzZQorICMgICAg
ZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwg
aU9TVmVyKSBcCisgICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NW
ZXIpCistLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhl
IDIgcGxhdGZvcm1zIChPU1gvQ2F0YWx5c3QpIG1pbiB2ZXJpb25zIGlzCistLy8gYXZhaWxhYmxl
OgorKworICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIsIG1hY0Nh
dGFseXN0VmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgKikKKysjICAgIGRlZmluZSBBTkdM
RV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShp
T1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKyAjZW5kaWYKKyAKKyAvLyBBTkdMRV9BUFBMRV9B
VkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9pT1Mp
IG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKKy0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YSShtYWNWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIs
ICopCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpIFwK
KysgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAq
KQorKworKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JOiBjaGVjayBpZiBhIHBhcnRpY3VsYXIg
aU9TIHZlcnNpb24gaXMgYXZhaWxhYmxlCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCisgCisgI2Vu
ZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvc3JjL2NvbW1vbi9kZWJ1Zy5o
CitpbmRleCBlMDAzN2E0Li4yODE3MGE1IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9kZWJ1Zy5o
CisrKysgYi9zcmMvY29tbW9uL2RlYnVnLmgKK0BAIC0zMTQsOSArMzE0LDE1IEBAIHN0ZDo6b3N0
cmVhbSAmRm10SGV4KHN0ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCisgLy8gQSBtYWNybyBhc3Nl
cnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxv
ZworICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICMgICAgZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAg
ICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9f
RlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklMRV9fIFwKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIjoiIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uKSkKKysg
ICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
ICAgICAgICAgX19idWlsdGluX2RlYnVndHJhcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBpbnQgeCA9IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBj
YWxsIHNpdGUuICovIFwKKysgICAgICAgICAgICAodm9pZCl4OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gd2hp
bGUgKGZhbHNlKQorICNlbHNlCisgIyAgICBkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgQU5HTEVf
RUFUX1NUUkVBTV9QQVJBTUVURVJTIDw8ICEoY29uZGl0aW9uKQorICNlbmRpZiAgLy8gZGVmaW5l
ZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2dsL2NnbC9G
dW5jdGlvbnNDR0wuY3BwIGIvc3JjL2NvbW1vbi9nbC9jZ2wvRnVuY3Rpb25zQ0dMLmNwcAogaW5k
ZXggYjU3ZjQyYi4uM2U1YTM3YSAxMDA2NDQKIC0tLSBhL3NyYy9jb21tb24vZ2wvY2dsL0Z1bmN0
aW9uc0NHTC5jcHAKQEAgLTM0LDIyICsyMjYsMTMyIEBAIGluZGV4IDkxMTI2NTkuLjM5ZGY2ZmUg
MTAwNjQ0CiAgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFNldEN1cnJlbnRD
b250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCiAgU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xT
ZXRWaXJ0dWFsU2NyZWVuLAorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lv
cy5tbSBiL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLmEzNmJlYTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21t
b24vc3lzdGVtX3V0aWxzX2lvcy5tbQorQEAgLTAsMCArMSw1MyBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMTUgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKy8vIHN5c3RlbV91dGlsc19pb3MubW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZp
YyBmdW5jdGlvbnMgZm9yIE9TWAorKworKyNpbmNsdWRlICJzeXN0ZW1fdXRpbHMuaCIKKysKKysj
aW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2Vydmlj
ZXMuaD4KKysjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKysjaW5jbHVkZSA8bWFjaC9tYWNoLmg+
CisrI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisrI2luY2x1ZGUgPGFycmF5PgorKyNpbmNs
dWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0ZDo6c3RyaW5nIEdl
dEV4ZWN1dGFibGVQYXRoKCkKKyt7CisrCisrICAgIE5TU3RyaW5nICpleGVjdXRhYmxlU3RyaW5n
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisrICAgIHN0ZDo6c3Ry
aW5nIHJlc3VsdChbZXhlY3V0YWJsZVN0cmluZyBVVEY4U3RyaW5nXSk7CisrICAgIHJldHVybiBy
ZXN1bHQ7CisrfQorKworK3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKQorK3sK
KysgICAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZVBhdGggPSBHZXRFeGVjdXRhYmxlUGF0aCgpOwor
KyAgICBzaXplX3QgbGFzdFBhdGhTZXBMb2MgICAgICA9IGV4ZWN1dGFibGVQYXRoLmZpbmRfbGFz
dF9vZigiLyIpOworKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsKKyt9
CisrCisrY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCisreworKyAgICBy
ZXR1cm4gImR5bGliIjsKKyt9CisrCisrZG91YmxlIEdldEN1cnJlbnRUaW1lKCkKKyt7CisrICAg
IG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOworKyAgICBtYWNoX3RpbWVi
YXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisrCisrICAgIGRvdWJsZSBzZWNvbmRDb2VmZiA9IHRp
bWViYXNlSW5mby5udW1lciAqIDFlLTkgLyB0aW1lYmFzZUluZm8uZGVub207CisrICAgIHJldHVy
biBzZWNvbmRDb2VmZiAqIG1hY2hfYWJzb2x1dGVfdGltZSgpOworK30KKyt9ICAvLyBuYW1lc3Bh
Y2UgYW5nbGUKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAgYi9zcmMvY29t
bW9uL3V0aWxpdGllcy5jcHAKLWluZGV4IGM5NTNmZjkuLjYzYjNhNTkgMTAwNjQ0CitpbmRleCBj
OTUzZmY5Li5kMDllMjcwIDEwMDY0NAogLS0tIGEvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCiAr
KysgYi9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKLUBAIC02LDYgKzYsMTEgQEAKLSAKLSAvLyB1
dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0
aW5lcy4KK0BAIC00NzEsNiArNDcxLDUwIEBAIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51
bSB0eXBlKQogIAotKy8vIE9sZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2
ZSBvbiB0aGlzIHdhcm5pbmcgaGVyZS4KLSsjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0rI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSsjZW5k
aWYKKyAgICAgcmV0dXJuIDA7CisgfQorKy8qKgorK0RldGVybWluZSB0aGUgbnVtYmVyIG9mIGF0
dHJpYnV0ZSBzbG90cyB1c2VkIGJ5IGEgdmFyaWFibGUgdHlwZQorKyovCisraW50IFZhcmlhYmxl
QXR0cmlidXRlQ291bnQoR0xlbnVtIHR5cGUpCisreworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAg
IHsKKysgICAgICAgIGNhc2UgR0xfTk9ORToKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAg
ICAgIGNhc2UgR0xfQk9PTDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisrICAgICAgICBjYXNl
IEdMX0lOVDoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisrICAgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKysgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorKyAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisrICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKKysgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisrICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF9WRUM0OgorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisrICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKysgICAgICAgICAgICByZXR1cm4gMjsKKysgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorKyAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisrICAgICAgICAgICAgcmV0dXJuIDM7CisrICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKysgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorKyAgICAgICAgICAgIHJldHVybiA0OworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICB9CiArCi0gI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKLSAjaW5jbHVkZSAiR0xFUzMvZ2wzLmgiCi0gI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorKyAgICByZXR1cm4gMDsKKyt9CisgCisgYm9vbCBJ
c1NhbXBsZXJUeXBlKEdMZW51bSB0eXBlKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0
aWxpdGllcy5oIGIvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAoraW5kZXggMGM3ZDgxMS4uYmE2OTNh
MiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysrKyBiL3NyYy9jb21tb24v
dXRpbGl0aWVzLmgKK0BAIC0zNyw2ICszNyw3IEBAIHNpemVfdCBWYXJpYWJsZUludGVybmFsU2l6
ZShHTGVudW0gdHlwZSk7Cisgc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBl
KTsKKyBpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CisgaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOworK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51
bSB0eXBlKTsKKyBib29sIElzU2FtcGxlclR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNTYW1w
bGVyQ3ViZVR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUp
OwogZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcAogaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKIC0tLSBhL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3RhYl9hdXRvZ2VuLmNwcApAQCAtNjIs
MjM4ICszNjQsMjE2ODYgQEAgaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKICAvKiBCaXNv
biBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogIAogICAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUsIDIwMTgtMjAxOSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWJfYXV0b2dlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yl9hdXRvZ2VuLmNwcAotaW5kZXggMTMwYjk4YS4uMzNiODNkYiAxMDA2NDQKLS0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwCi0rKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAotQEAgLTEsNSArMSw3IEBA
Ci0gLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitpbmRleCBhNDQ0NDk5Li5jYWM5ZjQ5IDEwMDY0NAor
LS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitAQCAtMjEsOCArMjEsMTEgQEAKKyAjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9WVUxLQU4KICAKLSsvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lk
YW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisgI2lmZGVmIEFOR0xFX0VOQUJMRV9N
RVRBTAorLSMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwu
aCIKKysjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0LmgiCisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKKysjaWZkZWYgQU5HTEVfRU5B
QkxFX01FVEFMX1NQSVJWCisrIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbC5oIgorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgCisg
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorIAorQEAgLTY0LDExICs2Nywx
NyBAQCBUQ29tcGlsZXIgKkNvbnN0cnVjdENvbXBpbGVyKHNoOjpHTGVudW0gdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0CisgICAgIH0KKyAjZW5kaWYgIC8vIEFOR0xFX0VO
QUJMRV9WVUxLQU4KKyAKKy0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisrI2lmZGVmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAoSXNPdXRwdXRNZXRhbChvdXRwdXQpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRhbCh0eXBlLCBzcGVjKTsKKyAg
ICAgfQorKyNlbmRpZgorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgaWYgKElzT3V0
cHV0TWV0YWxEaXJlY3Qob3V0cHV0KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUcmFu
c2xhdG9yTWV0YWxEaXJlY3QodHlwZSwgc3BlYywgb3V0cHV0KTsKKysgICAgfQorICNlbmRpZiAg
Ly8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICAgIC8vIFVuc3VwcG9ydGVkIGNvbXBpbGVyIG9y
IHVua25vd24gZm9ybWF0LiBSZXR1cm4gbnVsbHB0ciBwZXIgdGhlIHNoOjpDb25zdHJ1Y3RDb21w
aWxlciBBUEkuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAoraW5kZXggODM1YzkwYS4uMWMwOWNk
YSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAorQEAgLTMxLDYgKzMxLDggQEAgc3RydWN0
IFRTb3VyY2VMb2MKKyAgICAgaW50IGxhc3RfbGluZTsKKyB9OworIAorK2NvbnN0ZXhwciBUU291
cmNlTG9jIGtOb1NvdXJjZUxvY3stMSwgLTEsIC0xLCAtMX07CiArCi0gLyogQmlzb24gaW1wbGVt
ZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAvLworIC8vIFB1dCBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMg
c2NoZW1lLgorIC8vCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCitpbmRleCAzNGQ4
ZTEyLi45MzE2ZTJlIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKK0BAIC03
MjIsNyArNzIyLDcgQEAgYm9vbCBUQ29tcGlsZXI6OmNoZWNrQW5kU2ltcGxpZnlBU1QoVEludGVy
bUJsb2NrICpyb290LAorICAgICAgICAgfQorICAgICB9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9h
dXRvZ2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgK
LWluZGV4IDUzMDYwMzIuLjAyNTAzMDAgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKLSsrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiX2F1dG9nZW4uaAotQEAgLTEsNSArMSw3IEBACi0gLyogQSBCaXNvbiBwYXJz
ZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy0gICAgaW50IHNpbXBsaWZ5U2NhbGFy
aXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNfQU5EX01BVF9DT05TVFJV
Q1RPUl9BUkdTKQorKyAgICB1bnNpZ25lZCBpbnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBp
bGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKICAKLSsvKiBBcHBsZSBOb3RlOiBG
b3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgKK2luZGV4IGQwYjI0YmEuLjA0M2RkZDUgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oCitAQCAtMzUsNiArMzUsOSBAQCBjbGFzcyBUUGFyc2VDb250ZXh0
OworICNpZmRlZiBBTkdMRV9FTkFCTEVfSExTTAorIGNsYXNzIFRyYW5zbGF0b3JITFNMOworICNl
bmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKysjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisr
Y2xhc3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01F
VEFMCisgCisgLy8KKyAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNoYWRlciB0
eXBlIGlzIEdMU0wuCitAQCAtNjMsNiArNjYsOSBAQCBjbGFzcyBUU2hIYW5kbGVCYXNlCisgI2lm
ZGVmIEFOR0xFX0VOQUJMRV9ITFNMCisgICAgIHZpcnR1YWwgVHJhbnNsYXRvckhMU0wgKmdldEFz
VHJhbnNsYXRvckhMU0woKSB7IHJldHVybiAwOyB9CisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVf
SExTTAorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgdmlydHVhbCBUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICBwcm90ZWN0ZWQ6Cisg
ICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1
aXJlZCBieSB0aGUgY29tcGlsZXIuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcAoraW5kZXggMDMzNTE3MS4uMTA0YWZmYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db25zdGFudFVuaW9uLmNwcAorQEAgLTY3LDExICs2NywxNSBAQCBib29sIElzVmFsaWRT
aGlmdE9mZnNldChjb25zdCBUQ29uc3RhbnRVbmlvbiAmcmhzKQorIAorIH0gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKyAKKy1UQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKQorLXsKKy0g
ICAgaUNvbnN0ID0gMDsKKy0gICAgdHlwZSAgID0gRWJ0Vm9pZDsKKy19CisrVENvbnN0YW50VW5p
b246OlRDb25zdGFudFVuaW9uKCkgOiBpQ29uc3QoMCksIHR5cGUoRWJ0Vm9pZCkge30KICsKLSAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKytUQ29uc3RhbnRV
bmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkpLCB0eXBlKEVidEludCkge30K
KysKKytUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpIDogdUNv
bnN0KHUpLCB0eXBlKEVidFVJbnQpIHt9CisrCisrVENvbnN0YW50VW5pb246OlRDb25zdGFudFVu
aW9uKGZsb2F0IGYpIDogZkNvbnN0KGYpLCB0eXBlKEVidEZsb2F0KSB7fQorKworK1RDb25zdGFu
dFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0eXBlKEVidEJvb2wp
IHt9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAx
OC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2lu
Zm9fdXRpbC9TeXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3Bw
Ci1pbmRleCBmNzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwv
U3lzdGVtSW5mby5jcHAKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCi1A
QCAtNDcsNiArNDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikK
LSAgICAgICAgICAgICByZXR1cm4gIlZpdmFudGUiOwotICAgICAgICAgY2FzZSBrVmVuZG9ySURf
Vk1XYXJlOgotICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKLSsgICAgICAgIGNhc2Uga1Zl
bmRvcklEX0FwcGxlOgotKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOwotICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2
ZW5kb3IpICsgIikiOworIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QKKyB7
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCitpbmRleCBhNjIzZDY1Li5k
ZjUzODU3IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKK0BAIC0y
MCw2ICsyMCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgorICAgcHVibGljOgorICAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFCisgICAgIFRDb25zdGFudFVuaW9uKCk7CisrICAgIFRDb25z
dGFudFVuaW9uKGludCBpKTsKKysgICAgVENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpOwor
KyAgICBUQ29uc3RhbnRVbmlvbihmbG9hdCBmKTsKKysgICAgVENvbnN0YW50VW5pb24oYm9vbCBi
KTsKKyAKKyAgICAgYm9vbCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50
VW5pb24gJmNvbnN0YW50KTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9JbnRlcm1Ob2RlLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuY3Bw
CitpbmRleCBiYmRmODY2Li41MTM2ZDIwIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW50ZXJtTm9kZS5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bU5vZGUuY3BwCitAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lv
bihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQpCisgVENvbnN0YW50VW5pb24gKlZl
Y3Rvcml6ZShjb25zdCBUQ29uc3RhbnRVbmlvbiAmY29uc3RhbnQsIHNpemVfdCBzaXplKQorIHsK
KyAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcgVENvbnN0YW50VW5pb25bc2l6
ZV07CistICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgIGNvbnN0VW5pb25baV0g
PSBjb25zdGFudDsKKyAKKyAgICAgcmV0dXJuIGNvbnN0VW5pb247CitAQCAtNDE1LDYgKzQxNSwx
NCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJtQmxvY2sgJm5vZGUp
CiAgICAgIH0KLUBAIC0xNjAsNiArMTYyLDExIEBAIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZl
bmRvcklkKQotICAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX1ZpdmFudGU7CiAgfQog
IAotK2Jvb2wgSXNBcHBsZShWZW5kb3JJRCB2ZW5kb3JJZCkKKytUSW50ZXJtQmxvY2s6OlRJbnRl
cm1CbG9jayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCiArewot
KyAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworKyAgICBmb3IgKFRJbnRl
cm1Ob2RlICpzdG10IDogc3RtdHMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZFN0YXRlbWVudChz
dG10KTsKKysgICAgfQogK30KICsKLSBib29sIFBhcnNlQU1EQnJhaG1hRHJpdmVyVmVyc2lvbihj
b25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZlcnNpb24pCisgc2l6ZV90
IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiAgewotICAgICBjb25zdCBzaXpl
X3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rfb2YoIjAxMjM0NTY3ODkiKTsKLWRpZmYgLS1n
aXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmgKLWluZGV4IGFkMTc2OTguLjUwOWExZTkgMTAwNjQ0Ci0tLS0gYS9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm8uaAotQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0IFN5c3RlbUluZm8KLSAgICAgYm9vbCBpc0FN
RFN3aXRjaGFibGUgPSBmYWxzZTsKLSAgICAgLy8gT25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBs
YXB0b3BzLgotICAgICBib29sIGlzTWFjU3dpdGNoYWJsZSA9IGZhbHNlOwotLSAgICAvLyBPbmx5
IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdoZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCi0t
ICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3Vu
ZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1pb3NhcHBvbm1hYwotLSAgICBib29sIGlzaU9T
QXBwT25NYWMgPSBmYWxzZTsKLSsgICAgLy8gT25seSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFj
cyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3QuCi0rICAgIGJvb2wgbmVlZHNFQUdMT25NYWMg
ICA9IGZhbHNlOwotIAotICAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiBBbmRyb2lkCi0gICAgIHN0
ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7Ci1AQCAtOTksNiArOTgsNyBAQCBjb25zdGV4
cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAgID0gMHg4MDg2OwotIGNvbnN0ZXhwciBWZW5k
b3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEwREU7Ci0gY29uc3RleHByIFZlbmRvcklEIGtW
ZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklE
X1ZNV2FyZSAgID0gMHgxNWFkOwotK2NvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUg
ICAgPSAweDEwNkI7Ci0gCi0gLy8gS25vd24gbm9uLVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVy
ZWQpIHZlbmRvciBJRHMKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAg
ID0gMHgxMDAwMTsKLUBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRv
cklEIHZlbmRvcklkKTsKLSBib29sIElzVmVyaVNpbGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOwot
IGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9ySWQpOwotIGJvb2wgSXNWaXZhbnRlKFZlbmRv
cklEIHZlbmRvcklkKTsKLStib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpOworICAgICBy
ZXR1cm4gbVN0YXRlbWVudHMuc2l6ZSgpOworQEAgLTQ0Niw2ICs0NTQsMzcgQEAgYm9vbCBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKm9yaWdp
bmFsLCBUSW50ZXJtTm8KKyAgICAgcmV0dXJuIGZhbHNlOworIH0KICAKLSAvLyBVc2UgYSBoZXVy
aXN0aWMgdG8gYXR0ZW1wdCB0byBmaW5kIHRoZSBHUFUgdXNlZCBmb3IgM0QgZ3JhcGhpY3MuIFNl
dHMgYWN0aXZlR1BVSW5kZXgsCi0gLy8gaXNPcHRpbXVzLCBhbmQgaXNBTURTd2l0Y2hhYmxlLgot
ZGlmZiAtLWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0gYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCi1pbmRleCBjNzc1NmY2Li5hNDlkYzUy
IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotKysr
IGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotQEAgLTE5LDI1ICsxOSw3
IEBAIG5hbWVzcGFjZSBhbmdsZQorK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQorK3sKKysg
ICAgaWYgKGluaXRFeHByKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKAorKyAg
ICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSwgbmV3
IFRJbnRlcm1TeW1ib2wodmFyKSwgaW5pdEV4cHIpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24oc3Rk
Ojppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJsZSAqPiBkZWNsYXJhdG9ycykKKysgICAg
OiBUSW50ZXJtRGVjbGFyYXRpb24oKQorK3sKKysgICAgZm9yIChhdXRvICpkIDogZGVjbGFyYXRv
cnMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wo
ZCkpOworKyAgICB9CisrfQorKworK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpCisr
ICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKKyt7CisrICAgIGZvciAoYXV0byAqZCA6IGRlY2xh
cmF0b3JzKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworKyAgICB9Cisr
fQorKworIHNpemVfdCBUSW50ZXJtRGVjbGFyYXRpb246OmdldENoaWxkQ291bnQoKSBjb25zdAor
IHsKKyAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CitAQCAtNDYzLDkgKzUwMiwxMCBA
QCBib29sIFRJbnRlcm1EZWNsYXJhdGlvbjo6cmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZQogIAotIGJvb2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1J
bmZvICppbmZvKQorIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJ
bnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkK
ICB7Ci0tIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZp
bmVkKEFOR0xFX0NQVV9BUk02NCkKLS0gICAgc3RhdGljIGJvb2wgaXNpT1NBcHBPbk1hYyA9IGZh
bHNlOwotLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0tICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2UsIF57Ci0tICAgICAgaXNpT1NBcHBPbk1hYyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gaXNpT1NBcHBPbk1hY107Ci0tICAgIH0pOwotLQotLSAgICBpZiAoaXNpT1NBcHBP
bk1hYykKLS0gICAgewotLSAgICAgICAgR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci0tICAgICAg
ICBpZiAoaW5mbykKLS0gICAgICAgIHsKLS0gICAgICAgICAgICBpbmZvLT5pc2lPU0FwcE9uTWFj
ID0gdHJ1ZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBpbmZvOwotLSAgICB9Ci0tCi0t
ICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKLS0jICAgIGVsaWYgZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlT
VCkKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkKLSAgICAgcmV0dXJuIEdldFN5c3RlbUluZm9fbWFjKGluZm8p
OwotICMgICAgZWxzZQotICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci1kaWZm
IC0tZ2l0IGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwIGIvc3JjL2dwdV9p
bmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi1pbmRleCAzMjNhZjJjLi5lNTJlY2IzIDEwMDY0
NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi0rKysgYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAKLUBAIC0xOCw4ICsxOCw5IEBAIG5hbWVz
cGFjZSBhbmdsZQotIGJvb2wgR2V0U3lzdGVtSW5mb19pb3MoU3lzdGVtSW5mbyAqaW5mbykKKy0g
ICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGdldFNlcXVlbmNlKCktPnNpemUoKTsgKytpaSkK
KysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGZvciAoYXV0byAqJm5vZGUg
OiBzZXEpCisgICAgIHsKKy0gICAgICAgIFJFUExBQ0VfSUZfSVMoKCpnZXRTZXF1ZW5jZSgpKVtp
aV0sIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworKyAgICAgICAgUkVQTEFD
RV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICAg
fQorICAgICByZXR1cm4gZmFsc2U7CisgfQorQEAgLTQ3MywxMiArNTEzLDEzIEBAIGJvb2wgVElu
dGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxk
Tm9kZVdpdGhNdWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2Vx
dWVuY2UgJnJlcGxhY2VtZW50cykKICB7CistICAgIGZvciAoYXV0byBpdCA9IGdldFNlcXVlbmNl
KCktPmJlZ2luKCk7IGl0IDwgZ2V0U2VxdWVuY2UoKS0+ZW5kKCk7ICsraXQpCisrICAgIGF1dG8g
JnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworKyAgICBmb3IgKGF1dG8gaXQgPSBzZXEuYmVnaW4oKTsg
aXQgPCBzZXEuZW5kKCk7ICsraXQpCiAgICAgIHsKLS0gICAgICAgIC8vIFRPRE8oYW5nbGVidWcu
Y29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbi4KLSsgICAgICAgIC8vIFRP
RE8oYW5nbGVidWcuY29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbiBhbmQg
R1BVIGluZm8uCi0gICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0r
ICAgICAgICBpbmZvLT5ncHVzLmVtcGxhY2VfYmFjaygpLnZlbmRvcklkID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAgaWYgKCppdCA9PSBvcmlnaW5hbCkKKyAgICAgICAgIHsKKy0gICAgICAg
ICAgICBpdCA9IGdldFNlcXVlbmNlKCktPmVyYXNlKGl0KTsKKy0gICAgICAgICAgICBnZXRTZXF1
ZW5jZSgpLT5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBsYWNlbWVudHMuZW5k
KCkpOworKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0KTsKKysgICAgICAgICAgICBzZXEu
aW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgIH0KICAgICAgfQotIAotICAgICByZXR1
cm4gdHJ1ZTsKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29z
Lm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQotaW5kZXggYjFjZDA1
NS4uYzVlMDM5ZSAxMDA2NDQKLS0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFj
b3MubW0KLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KLUBAIC0z
MjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5mbyAqaW5mbykK
LSAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CitAQCAtNDg4LDEyICs1Mjks
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZVdpdGhNdWx0
aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6
aW5zZXJ0Q2hpbGROb2RlcyhUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBwb3NpdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmaW5zZXJ0aW9ucykKKyB7CistICAgIGlmIChwb3NpdGlvbiA+IGdldFNlcXVlbmNl
KCktPnNpemUoKSkKKysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGlmIChw
b3NpdGlvbiA+IHNlcS5zaXplKCkpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgfQotICAgICAKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYg
ZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpCi0rICAgIGluZm8tPm5lZWRzRUFHTE9uTWFjID0gdHJ1
ZTsKLSsjZW5kaWYKLSsKKy0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkgKyBw
b3NpdGlvbjsKKy0gICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCBpbnNlcnRpb25zLmJlZ2lu
KCksIGluc2VydGlvbnMuZW5kKCkpOworKyAgICBhdXRvIGl0ID0gc2VxLmJlZ2luKCkgKyBwb3Np
dGlvbjsKKysgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRpb25z
LmVuZCgpKTsKICAgICAgcmV0dXJuIHRydWU7CiAgfQogIAotZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9DYXBzLmNwcCBiL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotaW5kZXggZjkwNjc4My4uMWRk
ZGQ0ZCAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotKysrIGIvc3JjL2xpYkFO
R0xFL0NhcHMuY3BwCi1AQCAtNjMwLDcgKzYzMCwxMiBAQCBzdGF0aWMgYm9vbCBEZXRlcm1pbmVE
ZXB0aFRleHR1cmVBTkdMRVN1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBz
KQotIHsKLSAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKLSAgICAg
ICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotKyNpZiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmICghZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgfHwgIWRlZmluZWQo
QU5HTEVfQ1BVX0FSTTY0KSkKLSsgICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSsgICAgICAgIC8v
IGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1MuCi0rICAgICAgICAvLyBUT0RPKGRp
bm8pOiBJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBydW50aW1lIGNoZWNrIHdoZW4gcnVubmlu
ZyBhbiBpT1MgYXBwIG9uIE1hYy4KLSAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywK
LSsjZW5kaWYKLSAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLAotICAgICB9OworQEAg
LTEwNDAsOCArMTA4Miw4IEBAIFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKICAKLUBAIC02NDIsNyArNjQ3LDEyIEBAIHN0YXRp
YyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNN
YXAgJnRleHR1cmVDYXBzKQorIFRJbnRlcm1BZ2dyZWdhdGUgKlRJbnRlcm1BZ2dyZWdhdGU6OnNo
YWxsb3dDb3B5KCkgY29uc3QKICB7Ci0gICAgIGNvbnN0ZXhwciBHTGVudW0gcmVxdWlyZWRGb3Jt
YXRzW10gPSB7Ci0gICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwKLSsjaWYgIWRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZ
U1QpIHx8ICFkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCi0rICAgICAgICAvLyBUT0RPKGRpbm8p
OiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTCi0rICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgb24gaU9TLgotKyAg
ICAgICAgLy8gVE9ETyhkaW5vKTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBj
aGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9TIGFwcCBvbiBNYWMuCi0gICAgICAgICBHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVMsCi0rI2VuZGlmCi0gICAgIH07CistICAgIFRJbnRlcm1TZXF1ZW5jZSAq
Y29weVNlcSA9IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKy0gICAgY29weVNlcS0+aW5zZXJ0KGNv
cHlTZXEtPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmVu
ZCgpKTsKKysgICAgYXV0byAmc2VxICAgICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsK
KysgICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxICAgPSBuZXcgVEludGVybVNlcXVlbmNlKHNl
cS5iZWdpbigpLCBzZXEuZW5kKCkpOworICAgICBUSW50ZXJtQWdncmVnYXRlICpjb3B5Tm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKG1GdW5jdGlvbiwgbVR5cGUsIG1PcCwgY29weVNlcSk7Cisg
ICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKKyAgICAgcmV0dXJuIGNvcHlOb2RlOworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAoraW5kZXggMzY0Mzg0Ny4uM2I2Zjg3MiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCitAQCAtNjc0LDYgKzY3NCw3IEBAIGNs
YXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlCisgeworICAgcHVibGljOgorICAgICBUSW50ZXJtQmxvY2soKSA6IFRJbnRlcm1O
b2RlKCkge30KKysgICAgVEludGVybUJsb2NrKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJt
Tm9kZSAqPiBzdG10cyk7CisgICAgIH5USW50ZXJtQmxvY2soKSBvdmVycmlkZSB7fQogIAotICAg
ICByZXR1cm4gR2V0Rm9ybWF0U3VwcG9ydCh0ZXh0dXJlQ2FwcywgcmVxdWlyZWRGb3JtYXRzLCB0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L1N0YXRlLmNwcCBiL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKLWluZGV4IDdiMDhkOGQuLmE4MDQ0
ODYgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvU3RhdGUuY3BwCi0rKysgYi9zcmMvbGliQU5H
TEUvU3RhdGUuY3BwCi1AQCAtNiw2ICs2LDkgQEAKKyAgICAgVEludGVybUJsb2NrICpnZXRBc0Js
b2NrKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFz
cyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJt
QWdncmVnYXRlQmFzZQorIHsKKyAgIHB1YmxpYzoKKyAgICAgVEludGVybURlY2xhcmF0aW9uKCkg
OiBUSW50ZXJtTm9kZSgpIHt9CisrICAgIFRJbnRlcm1EZWNsYXJhdGlvbihjb25zdCBUVmFyaWFi
bGUgKnZhciwgVEludGVybVR5cGVkICppbml0RXhwcik7CisrICAgIFRJbnRlcm1EZWNsYXJhdGlv
bihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRlY2xhcmF0b3JzKTsK
KysgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlw
ZWQgKj4gZGVjbGFyYXRvcnMpOworICAgICB+VEludGVybURlY2xhcmF0aW9uKCkgb3ZlcnJpZGUg
e30KICAKLSAvLyBTdGF0ZS5jcHA6IEltcGxlbWVudHMgdGhlIFN0YXRlIGNsYXNzLCBlbmNhcHN1
bGF0aW5nIHJhdyBHTCBzdGF0ZS4KKyAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0RlY2xh
cmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sLmNwcAoraW5kZXggZDAzODlhZi4uZmUyZTE5YiAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5jcHAKK0BAIC0xOTYsNyArMTk2LDggQEAgdm9pZCBURnVuY3Rpb246OnNoYXJlUGFy
YW1ldGVycyhjb25zdCBURnVuY3Rpb24gJnBhcmFtZXRlcnNTb3VyY2UpCiAgCi0rLy8gT2xkZXIg
Y2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2FybmluZyBoZXJl
LgotKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2dsb2JhbC1jb25zdHJ1Y3Rv
cnMiCi0rCi0gI2luY2x1ZGUgImxpYkFOR0xFL1N0YXRlLmgiCisgSW1tdXRhYmxlU3RyaW5nIFRG
dW5jdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CisgeworLSAgICBzdGQ6OnN0cmluZyBu
ZXdOYW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisrICAgIEltbXV0YWJsZVN0
cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOworKyAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVk
TmFtZVNlcGFyYXRvcjsKICAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAK
LWluZGV4IDNmOWYzN2QuLjVlNjI4ZjIgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvZm9ybWF0
dXRpbHMuY3BwCi0rKysgYi9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwCi1AQCAtMTAzNCw3
ICsxMDM0LDcgQEAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEludGVybmFsRm9y
bWF0SW5mb01hcCgpCi0gICAgIGFuZ2xlOjpTeXN0ZW1JbmZvIGluZm87Ci0gICAgIGlmIChhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCi0gICAgIHsKLS0gICAgICAgIGlmIChpbmZvLmlzaU9T
QXBwT25NYWMpCi0rICAgICAgICBpZiAoaW5mby5uZWVkc0VBR0xPbk1hYykKLSAgICAgICAgIHsK
LSAgICAgICAgICAgICAvLyBVc2luZyBPcGVuR0xFUy5mcmFtZXdvcmsuCi0gICAgICAgICAgICAg
QWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgZmFsc2UsICA4LCAgOCwgIDgs
ICA4LCAwLCBHTF9CR1JBX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFUzwyLCAw
PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rp
c3BsYXlBcHBsZV9hcGkuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3Bs
YXlBcHBsZV9hcGkuY3BwCi1pbmRleCBkZTIxNmZiLi5lNjNhOGI2IDEwMDY0NAotLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3BsYXlBcHBsZV9hcGkuY3BwCi0rKysgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKLUBAIC0z
Nyw3ICszNyw3IEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVn
bDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICAgICAgIGJyZWFrOwotICAgICB9CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaAoraW5kZXggYjljZjkwOC4uMGFiYjFkNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuaAorQEAgLTIyMiw3ICsyMjIsNyBAQCBjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJv
bAorICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9CiAg
Ci0tICAgIGlmIChpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlmIChpbmZvLm5lZWRzRUFHTE9u
TWFjKQotICAgICB7Ci0gICAgICAgICByZXR1cm4gbmV3IHJ4OjpEaXNwbGF5RUFHTChzdGF0ZSk7
Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NvbnRl
eHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9Db250ZXh0Q0dMLmNwcAot
aW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9j
Z2wvQ29udGV4dENHTC5jcHAKLUBAIC0xMyw2ICsxMyw4IEBACi0gI2luY2x1ZGUgImxpYkFOR0xF
L0Rpc3BsYXkuaCIKLSAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlD
R0wuaCIKKyAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorLSAgICBi
b29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKysgICAgYm9vbCBpc0RlZmluZWQo
KSBjb25zdCB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgIHZvaWQgc2V0SGFzUHJvdG90eXBlRGVj
bGFyYXRpb24oKSB7IG1IYXNQcm90b3R5cGVEZWNsYXJhdGlvbiA9IHRydWU7IH0KKyAgICAgYm9v
bCBoYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1IYXNQcm90b3R5cGVE
ZWNsYXJhdGlvbjsgfQogIAotKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQotKwotIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCitpbmRleCBhMWZjZjhj
Li5lYTU2NmIxIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
LmNwcAorQEAgLTQxLDggKzQxLDE0IEBAIGNvbnN0IGNoYXIga1Jhc3Rlcml6ZXJEaXNjYXJkRW5h
YmxlZENvbnN0TmFtZVtdID0gIkFOR0xFUmFzdGVyaXplckRpc2FibGVkIjsKKyBuYW1lc3BhY2UK
ICB7CiAgCi1AQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtSYXN0
ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgPQorKyAgICBJbW11dGFibGVTdHJpbmco
IkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmlu
ZyBrQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSA9CisrICAgIEltbXV0YWJsZVN0cmluZygi
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIik7CisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
Q292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJpbmcoImNvdmVyYWdlTWFzayIp
OworK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0VtdUluc3RhbmNlSURGaWVsZCAgICAgID0g
SW1tdXRhYmxlU3RyaW5nKCJlbXVsYXRlZEluc3RhbmNlSUQiKTsKKyBjb25zdGV4cHIgSW1tdXRh
YmxlU3RyaW5nIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSA9IEltbXV0YWJsZVN0cmluZygiQU5H
TEVXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtEaXNjYXJk
V3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEaXNjYXJkV3JhcHBlciIp
OworIAorIFRJbnRlcm1CaW5hcnkgKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoY29uc3QgVFZhcmlh
YmxlICpkcml2ZXJVbmlmb3JtcywgY29uc3QgY2hhciAqZmllbGROYW1lKQorIHsKK0BAIC04Niw2
ICs5MiwyMSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRp
b25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgKmNvbQorICAgICByZXR1cm4gUnVuQXRUaGVF
bmRPZlNoYWRlcihjb21waWxlciwgcm9vdCwgYXNzaWdubWVudCwgc3ltYm9sVGFibGUpOwogIH0K
ICAKLSB9ICAvLyBuYW1lc3BhY2UgcngKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW11bGF0ZUlu
c3RhbmNlSUQoVENvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKmRyaXZlclVu
aWZvcm1zKQorK3sKKysgICAgLy8gZW11SW5zdGFuY2VJRAorKyAgICBUSW50ZXJtQmluYXJ5ICpl
bXVJbnN0YW5jZUlEID0KKysgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5p
Zm9ybXMsIGtFbXVJbnN0YW5jZUlERmllbGQuZGF0YSgpKTsKICsKLSsjZW5kaWYgIC8vIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpCi1cIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysgICAgLy8gQ3JlYXRlIGEgc3lt
Ym9sIHJlZmVyZW5jZSB0byAiZ2xfSW5zdGFuY2VJbmRleCIKKysgICAgY29uc3QgVFZhcmlhYmxl
ICppbnN0YW5jZUlEID0gQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrCisr
ICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoY29tcGlsZXIsIHJvb3QsIGluc3Rh
bmNlSUQsIGVtdUluc3RhbmNlSUQpOworK30KKysKKyAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5
aW5nIG91dHB1dHMuCisgQU5HTEVfTk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRw
dXRzKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKK0BAIC0xMjMsNiArMTQ0
LDE4IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50
ZXJtQmxvY2sgKnJvb3QsCisgCisgfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorIAorKy8qKiBz
dGF0aWMgKi8KKytjb25zdCBjaGFyICpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0Vu
YWJsZWRDb25zdE5hbWUoKQorK3sKKysgICAgcmV0dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29u
c3ROYW1lLmRhdGEoKTsKKyt9CisrCisrLyoqIHN0YXRpYyAqLworK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7
CisrICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lLmRhdGEo
KTsKKyt9CisrCisgVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5cGUsIHNwZWMpCisg
e30KKyAKK0BAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRhbDo6dHJhbnNs
YXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgeworICAgICAgICAgYXV0byBuZWdGbGlwWSA9
IGdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZihkcml2ZXJVbmlmb3Jtcyk7CisgCisrICAgICAg
ICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBF
bXVsYXRlIGdsX0luc3RhbmNlSUQKKysgICAgICAgICAgICBpZiAoIUVtdWxhdGVJbnN0YW5jZUlE
KHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKworICAgICAgICAgLy8gQXBwZW5kIGdsX1Bvc2l0aW9uLnkgY29ycmVjdGlv
biB0byBtYWluCisgICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJl
Y3Rpb25Ub01haW4odGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIG5lZ0ZsaXBZKSkKKyAg
ICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgCistICAg
ICAgICAvLyBJbnNlcnQgcmFzdGVyaXplciBkaXNjYXJkIGxvZ2ljCistICAgICAgICBpZiAoIWlu
c2VydFJhc3Rlcml6ZXJEaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICAvLyBJbnNlcnQgcmFz
dGVyaXphdGlvbiBkaXNjYXJkIGxvZ2ljCisrICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6YXRp
b25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIEluaXRpYWxpemUgdW51c2VkIHZh
cnlpbmcgb3V0cHV0cyB0byBhdm9pZCBzcGlydi1jcm9zcyBkZWFkLWNvZGUgcmVtb3ZpbmcgdGhl
bSBpbiBsYXRlcgorKyAgICAvLyBzdGFnZS4gT25seSBkbyB0aGlzIGlmIFNIX0lOSVRfT1VUUFVU
X1ZBUklBQkxFUyBpcyBub3Qgc3BlY2lmaWVkLgorKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9
PSBHTF9WRVJURVhfU0hBREVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFE
RVJfRVhUKSAmJgorKyAgICAgICAgIShjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfT1VUUFVUX1ZB
UklBQkxFUykpCisrICAgIHsKKysgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKysgICAg
ICAgIGZvciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiBtT3V0cHV0VmFyeWluZ3Mp
CisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCF2YXIuYWN0aXZlKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgbGlzdC5wdXNoX2JhY2sodmFyKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJv
b3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0KSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgeworKyAgICAgICAgLy8gRm9yIG5v
biB2b2lkIE1TTCBmcmFnbWVudCBmdW5jdGlvbnMgcmVwbGFjZSBkaXNjYXJkCisrICAgICAgICAv
LyB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKQorKyAgICAgICAgaWYgKG1PdXRwdXRWYXJpYWJs
ZXMuc2l6ZSgpID4gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIXJlcGxhY2VBbGxN
YWluRGlzY2FyZFVzZXMocm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgICAgaWYgKCFp
bnNlcnRTYW1wbGVNYXNrV3JpdGluZ0xvZ2ljKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CitAQCAtMjM1LDYgKzMwNiwxMyBAQCB2
b2lkIFRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9y
bUZpZWxkcyhzdGQ6OnZlY3RvcjxURgorICAgICBURmllbGQgKmNvdmVyYWdlTWFza0ZpZWxkID0K
KyAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNrRmll
bGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgIGZpZWxk
c091dC0+cHVzaF9iYWNrKGNvdmVyYWdlTWFza0ZpZWxkKTsKKysKKysgICAgaWYgKG1FbXVsYXRl
ZEluc3RhbmNlSUQpCisrICAgIHsKKysgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZpZWxk
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9j
KCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKyAgICAgICAgZmllbGRzT3V0LT5wdXNo
X2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKysgICAgfQorIH0KKyAKKyAvLyBBZGQgc2FtcGxl
X21hc2sgd3JpdGluZyB0byBtYWluLCBndWFyZGVkIGJ5IHRoZSBzcGVjaWFsaXphdGlvbiBjb25z
dGFudAorQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xh
dG9yTWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCisgICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworIH0KKyAKKy1BTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNl
cnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKyB7CisgICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAg
ICAgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9
ICZnZXRTeW1ib2xUYWJsZSgpOworIAorICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbkRpc2Fi
bGVkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50LgorLSAgICBzaW5rIDw8ICJsYXlvdXQgKGNvbnN0
YW50X2lkPTApIGNvbnN0IGJvb2wgIiA8PCBtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWU7CisrICAgIHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9v
bCAiIDw8IGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisgICAgIHNpbmsg
PDwgIiA9IGZhbHNlO1xuIjsKKyAKKy0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUgdmFyaWFibGUgcmVmZXJlbmNlLgorKyAgICAvLyBDcmVhdGUga1Jhc3Rl
cml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSBhbmQga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RnVuY05hbWUgdmFyaWFibGUKKysgICAgLy8gcmVmZXJlbmNlcy4KKyAgICAgVFR5cGUgKmJvb2xU
eXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgICBib29sVHlwZS0+c2V0UXVhbGlmaWVyKEV2
cUNvbnN0KTsKKy0gICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CistICAgICAgICBu
ZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXpl
ckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKSwKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxl
ZFZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAKKyAgICAg
Ly8gSW5zZXJ0IHRoaXMgY29kZSB0byB0aGUgZW5kIG9mIG1haW4oKQorLSAgICAvLyBpZiAoQU5H
TEVSYXN0ZXJpemVyRGlzYWJsZWQpCisrICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6YXRpb25EaXNh
YmxlZCkKKyAgICAgLy8geworICAgICAvLyAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgtMy4wLCAt
My4wLCAtMy4wLCAxLjApOworICAgICAvLyB9CitAQCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jaworICAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCBy
b290LCBpZkNhbGwsIHN5bWJvbFRhYmxlKTsKKyB9CisgCisrLy8gSWYgdGhlIE1TTCBmcmFnbWVu
dCBzaGFkZXIgaXMgbm9uLXZvaWQsIHdlIG5lZWQgdG8gZW5zdXJlCisrLy8gdGhhdCB0aGVyZSBp
cyBhIHJldHVybiBhdCB0aGUgZW5kLiBUaGUgTVNMIGNvbXBpbGVyCisrLy8gd2lsbCBlcnJvciBv
dXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBpZiBhbGwKKysvLyBwYXRo
cyBsZWFkIHRvIGRpc2NhcmRfZnJhZ21lbnQoKS4gU28gd3JhcCBkaXNjYXJkIGluIGEgd3JhcHBl
ciBmdW5jdGlvbi4KKysvLyBGaXhlcyBkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5kaXNj
YXJkLmJhc2ljX2Fsd2F5cworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290KQorK3sKKysgICAg
Ly8gYmVmb3JlCisrICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKysgICAgLy8geworKyAgICAvLyAg
ICAgb19jb2xvciA9IHZfY29sb3I7CisrICAgIC8vICAgICBkaXNjYXJkOworKyAgICAvLyB9Cisr
CisrICAgIC8vIGFmdGVyCisrICAgIC8vIHZvaWQgQU5HTEVEaXNjYXJkV3JhcHBlcigpCisrICAg
IC8vIHsKKysgICAgLy8gICAgZGlzY2FyZDsKKysgICAgLy8gfQorKyAgICAvLyB2b2lkIG1haW4g
KHZvaWQpCisrICAgIC8vIHsKKysgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworKyAgICAv
LyAgICAgQU5HTEVEaXNjYXJkV3JhcHBlcigpOworKyAgICAvLyB9CisrCisrICAgIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKm1haW4gICA9IEZpbmRNYWluKHJvb3QpOworKyAgICBUSW50ZXJt
QmxvY2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisrICAgIFRJbnRl
cm1TZXF1ZW5jZSAqZnVuY3Rpb25TZXF1ZW5jZSA9IG1haW5Cb2R5LT5nZXRTZXF1ZW5jZSgpOwor
KyAgICBUSW50ZXJtQWdncmVnYXRlICpkaXNjYXJkRnVuYyAgICAgPSBudWxscHRyOworKyAgICAv
LyBJdGVyYXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNl
IGFsbCB1c2VzCisrICAgIC8vIG9mIGRpc2NhcmQgd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCku
CisrICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmdW5jdGlvblNlcXVlbmNlLT5z
aXplKCk7ICsraW5kZXgpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpmdW5jdGlvbk5v
ZGUgPSAoKmZ1bmN0aW9uU2VxdWVuY2UpW2luZGV4XTsKKysgICAgICAgIFRJbnRlcm1CcmFuY2gg
KmJyYW5jaE5vZGUgPSBmdW5jdGlvbk5vZGUtPmdldEFzQnJhbmNoTm9kZSgpOworKyAgICAgICAg
aWYgKGJyYW5jaE5vZGUgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
YnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCkgPT0gRU9wS2lsbCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChkaXNjYXJkRnVuYyA9PSBudWxscHRyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFw
cGVyRnVuYyhyb290KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBib29s
IHJlcGxhY2VkID0gbWFpbkJvZHktPnJlcGxhY2VDaGlsZE5vZGUoYnJhbmNoTm9kZSwgZGlzY2Fy
ZEZ1bmMpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHZhbGlk
YXRlQVNUKHJvb3QpOworK30KKysKKysvLyBDcmVhdGUgZGlzY2FyZF93cmFwcGVyIGZ1bmN0aW9u
IHRvIGVuc3VyZSB0aGF0IFNQSVJWLUNyb3NzIHdpbGwgYWx3YXlzIGhhdmUgYSByZXR1cm4gYXQg
dGhlIGVuZAorKy8vIG9mIGZyYWdtZW50IHNoYWRlcnMKKytBTkdMRV9OT19ESVNDQVJEIFRJbnRl
cm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJ
bnRlcm1CbG9jayAqcm9vdCkKKyt7CisrICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAgICAgPSBn
ZXRJbmZvU2luaygpLm9iajsKKysgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRT
eW1ib2xUYWJsZSgpOworKworKyAgICBzaW5rIDw8ICJ2b2lkICIgPDwga0Rpc2NhcmRXcmFwcGVy
RnVuY05hbWUgPDwgIigpXG4iOworKyAgICBzaW5rIDw8ICJ7XG4iOworKyAgICBzaW5rIDw8ICIg
ICBkaXNjYXJkO1xuIjsKKysgICAgc2luayA8PCAifVxuIjsKKysKKysgICAgVEZ1bmN0aW9uICpk
aXNjYXJkV3JhcHBlckZ1bmMgPQorKyAgICAgICAgbmV3IFRGdW5jdGlvbihzeW1ib2xUYWJsZSwg
a0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCksIHRydWUp
OworKworKyAgICBUSW50ZXJtQWdncmVnYXRlICpjYWxsRGlzY2FyZFdyYXBwZXJGdW5jID0KKysg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdyYXBw
ZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworKyAgICByZXR1cm4gY2FsbERpc2NhcmRX
cmFwcGVyRnVuYzsKKyt9CisrCisgfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmggYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAoraW5kZXggMGY0ZjFjYy4uYmNjMzE4NyAxMDA2NDQK
Ky0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAorQEAgLTI1LDYgKzI1LDEx
IEBAIGNsYXNzIFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCisgICBw
dWJsaWM6CisgICAgIFRyYW5zbGF0b3JNZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjKTsKKyAKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25E
aXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5z
dGFuY2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysKKyAgIHByb3Rl
Y3RlZDoKKyAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZShUSW50ZXJtQmxvY2sg
KnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0
aW9ucyBjb21waWxlT3B0aW9ucywKK0BAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9y
TWV0YWwgOiBwdWJsaWMgVHJhbnNsYXRvclZ1bGthbgorIAorICAgICBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgaW5zZXJ0U2FtcGxlTWFza1dyaXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMpOworLSAgICBBTkdMRV9OT19ESVNDQVJEIGJv
b2wgaW5zZXJ0UmFzdGVyaXplckRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKyAg
ICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhU
SW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVwbGFj
ZUFsbE1haW5EaXNjYXJkVXNlcyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9O
T19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50
ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBib29sIG1FbXVsYXRlZEluc3RhbmNlSUQgPSBmYWxz
ZTsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNGUxMDIyOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAorQEAgLTAsMCArMSwxNDM5IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgiCisrCisrI2luY2x1ZGUgImFuZ2xlX2dsLmgiCisrI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWls
dGluc1dvcmthcm91bmRHTFNMLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1t
dXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091
dHB1dFZ1bGthbkdMU0wuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TdGF0aWNU
eXBlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvSG9pc3RDb25zdGFudHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VE
ZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlT3V0QXJncy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJl
bmNlcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERl
Y2xhcmF0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZUVtYmVkZGVkVW5pZm9y
bVN0cnVjdHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVBdG9taWNDb3VudGVyQnVpbHRpbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2Ft
cGxlcnNBczJEQXJyYXkuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1Jld3JpdGVTdHJ1Y3RTYW1wbGVycy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9CdWlsdEluLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9GaW5kTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9GaW5kU3ltYm9sTm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorKworK25hbWVzcGFjZSBzaAor
K3sKKysKKytuYW1lc3BhY2UKKyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0Zp
ZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrY29uc3RleHBy
IE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQpOworKyNpZiAwCisrY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0
ZUZ1bmNOYW1lKCJXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdy
YXBwZXJGdW5jTmFtZSgiRGlzY2FyZFdyYXBwZXIiKTsKKysjZW5kaWYKKytjb25zdGV4cHIgTmFt
ZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7CisrY29uc3Rl
eHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CisrY29uc3RleHBy
IE5hbWUga1VuaWZvcm1zVmFyTmFtZSgiYW5nbGVVbmlmb3JtcyIpOworK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysKKytjb25zdGV4cHIg
Y29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAgICAgICA9ICJ2aWV3cG9ydCI7CisrY29uc3Rl
eHByIGNvbnN0IGNoYXIga0hhbGZSZW5kZXJBcmVhW10gICAgICAgPSAiaGFsZlJlbmRlckFyZWEi
OworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtGbGlwWFlbXSAgICAgICAgICAgICAgID0gImZsaXBY
WSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtdICAgICAgICAgICAgPSAibmVn
RmxpcFhZIjsKKytjb25zdGV4cHIgY29uc3QgY2hhciBrQ2xpcERpc3RhbmNlc0VuYWJsZWRbXSA9
ICJjbGlwRGlzdGFuY2VzRW5hYmxlZCI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1hmYkFjdGl2
ZVVucGF1c2VkW10gICAgPSAieGZiQWN0aXZlVW5wYXVzZWQiOworK2NvbnN0ZXhwciBjb25zdCBj
aGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2VzUGVyRHJhdyI7CisrY29u
c3RleHByIGNvbnN0IGNoYXIga1hmYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAieGZiQnVmZmVyT2Zm
c2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0FjYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAi
YWNiQnVmZmVyT2Zmc2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0RlcHRoUmFuZ2VbXSAg
ICAgICAgICAgPSAiZGVwdGhSYW5nZSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1ByZVJvdGF0
aW9uW10gICAgICAgICAgPSAicHJlUm90YXRpb24iOworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtG
cmFnUm90YXRpb25bXSAgICAgICAgID0gImZyYWdSb3RhdGlvbiI7CisrCisrY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSBrZ2xfVmVydGV4SW5kZXhNZXRhbCgKKysgICAgQnVpbHRJbklkOjpnbF9W
ZXJ0ZXhJbmRleCwKKysgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIpLAorKyAg
ICBTeW1ib2xUeXBlOjpCdWlsdEluLAorKyAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQsCisrICAg
IFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4oKSk7
CisrCisrY29uc3RleHByIHNpemVfdCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3JtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7CisrY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dy
YXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworKyAgICB7a1ZpZXdwb3J0LCBrSGFsZlJlbmRl
ckFyZWEsIGtGbGlwWFksIGtOZWdGbGlwWFksIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCwga1hmYkFj
dGl2ZVVucGF1c2VkLAorKyAgICAga1hmYlZlcnRpY2VzUGVyRHJhdywga1hmYkJ1ZmZlck9mZnNl
dHMsIGtBY2JCdWZmZXJPZmZzZXRzLCBrRGVwdGhSYW5nZSwga1ByZVJvdGF0aW9uLAorKyAgICAg
a0ZyYWdSb3RhdGlvbn19OworKworK2NvbnN0ZXhwciBzaXplX3Qga051bUNvbXB1dGVEcml2ZXJV
bmlmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
OworK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisrICAgIHtrQWNiQnVmZmVy
T2Zmc2V0c319OworKworK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBleHBsaWNpdCBEZWNsYXJl
U3RydWN0VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorKyAgICAgICAgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXRwdXRNU0wob3V0cHV0TVNM
KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgQVNTRVJU
KHZpc2l0ID09IFByZVZpc2l0KTsKKysgICAgICAgIGlmICghbUluR2xvYmFsU2NvcGUpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgY29uc3QgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmRlY2xhcmF0b3IgICAgICAgID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAg
ICAgICAgICA9IGRlY2xhcmF0b3ItPmdldFR5cGUoKTsKKysKKysgICAgICAgIGlmICh0eXBlLmlz
U3RydWN0U3BlY2lmaWVyKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKysKKysgICAgICAgICAgICAvLyBF
bWJlZGRlZCBzdHJ1Y3RzIHNob3VsZCBiZSBwYXJzZWQgYXdheSBieSBub3cuCisrICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsK
KysgICAgICAgICAgICAvLyBvdXRwdXRNU0wtPndyaXRlU3RydWN0VHlwZShzdHJ1Y3R1cmUpOwor
KworKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgICAgICBpZiAoc3ltYm9sTm9kZSAmJiBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3RydWN0IHNwZWNpZmll
ciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKysg
ICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7CisrICAgICAg
ICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50Tm9kZSgp
LT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92ZSAndW5zdWVkJyB3
YXJuaW5nCisrICAgICAgICBtT3V0cHV0TVNMID0gbnVsbHB0cjsKKysKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgVE91dHB1dE1TTCAqbU91dHB1
dE1TTDsKKyt9OworKworK2NsYXNzIERlY2xhcmVEZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgRGVjbGFyZURlZmF1
bHRVbmlmb3Jtc1RyYXZlcnNlcihUSW5mb1NpbmtCYXNlICpzaW5rLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisrICAg
ICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1T
aW5rKHNpbmspLAorKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisrICAg
ICAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAorKyAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybShm
YWxzZSkKKysgICAge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSAqKG5vZGUtPmdldFNlcXVlbmNlKCkpOwor
KworKyAgICAgICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorKyAg
ICAgICAgQVNTRVJUKHNlcXVlbmNlLnNpemUoKSA9PSAxKTsKKysKKysgICAgICAgIFRJbnRlcm1U
eXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAg
ICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKysgICAgICAg
IGJvb2wgaXNVbmlmb3JtICAgICAgICAgPSB0eXBlLmdldFF1YWxpZmllcigpID09IEV2cVVuaWZv
cm0gJiYgIXR5cGUuaXNJbnRlcmZhY2VCbG9jaygpICYmCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICFJc09wYXF1ZVR5cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisrCisrICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGlzVW5pZm9y
bSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8
PCBHZXRUeXBlTmFtZSh0eXBlLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworKyAg
ICAgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IHRydWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGlzVW5pZm9ybTsKKysgICAgICAg
IH0KKysgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgKCptU2luaykgPDwgIjtcbiI7CisrCisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
dW5pZm9ybSBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fp
bi4KKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7Cisr
ICAgICAgICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50
Tm9kZSgpLT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQor
KworKyAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlmb3JtID0gZmFsc2U7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKG1JbkRl
ZmF1bHRVbmlmb3JtKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmbmFtZSA9IHN5bWJvbC0+dmFyaWFibGUoKS5uYW1lKCk7CisrICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKysgICAgICAgICAgICAoKm1TaW5rKSA8PCBI
YXNoTmFtZSgmc3ltYm9sLT52YXJpYWJsZSgpLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkKKysg
ICAgICAgICAgICAgICAgICAgICA8PCBBcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7Cisr
ICAgICAgICB9CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgKm1T
aW5rOworKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247CisrICAgIE5hbWVNYXAg
Km1OYW1lTWFwOworKyAgICBib29sIG1JbkRlZmF1bHRVbmlmb3JtOworK307CisrCisrVEludGVy
bUJpbmFyeSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihjb25zdCBUVmFyaWFibGUgJmRyaXZlclVu
aWZvcm1zLCBjb25zdCBjaGFyICpmaWVsZE5hbWUpCisreworKyAgICBzaXplX3QgZmllbGRJbmRl
eCA9IEZpbmRGaWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCksIGZpZWxkTmFtZSk7CisrCisrICAgIFRJbnRlcm1TeW1ib2wgKmFuZ2xlVW5pZm9y
bXNSZWYgPSBuZXcgVEludGVybVN5bWJvbCgmZHJpdmVyVW5pZm9ybXMpOworKyAgICBUQ29uc3Rh
bnRVbmlvbiAqdW5pZm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworKyAgICB1bmlm
b3JtSW5kZXgtPnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KGZpZWxkSW5kZXgpKTsKKysgICAg
VEludGVybUNvbnN0YW50VW5pb24gKmluZGV4UmVmID0KKysgICAgICAgIG5ldyBUSW50ZXJtQ29u
c3RhbnRVbmlvbih1bmlmb3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkp
OworKyAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsIGFu
Z2xlVW5pZm9ybXNSZWYsIGluZGV4UmVmKTsKKyt9CisrCisrI2lmIDAKKysvLyBVbmxpa2UgVnVs
a2FuIGhhdmluZyBhdXRvIHZpZXdwb3J0IGZsaXBwaW5nIGV4dGVuc2lvbiwgaW4gTWV0YWwgd2Ug
aGF2ZSB0byBmbGlwIGdsX1Bvc2l0aW9uLnkKKysvLyBtYW51YWxseS4KKysvLyBUaGlzIG9wZXJh
dGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xfUG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJl
c3Npb246CisrLy8gZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNj
YWxlWQorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllD
b3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Td2l6emxlICZuZWdGbGlwWSkKKyt7CisrICAg
IFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOwor
KworKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKysg
ICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCk7CisrICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1i
b2wocG9zaXRpb24pOworKworKyAgICAvLyBDcmVhdGUgYSBzd2l6emxlIHRvICJnbF9Qb3NpdGlv
bi55IgorKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFk7CisrICAgIHN3aXp6bGVPZmZz
ZXRZLnB1c2hfYmFjaygxKTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWSA9IG5ldyBU
SW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFkpOworKworKyAgICAvLyBD
cmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlwWSIKKysgICAgVElu
dGVybUJpbmFyeSAqaW52ZXJzZVkgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9u
WS0+ZGVlcENvcHkoKSwgJm5lZ0ZsaXBZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25t
ZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisr
ICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25ZTEhTID0gcG9zaXRpb25ZLT5kZWVwQ29weSgpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZKTsKKysKKysgICAgLy8gQXBw
ZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRl
ci4KKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgYXNz
aWdubWVudCwgJnN5bWJvbFRhYmxlKTsKKyt9CisrI2VuZGlmCisrCisrI2lmIDAKKysvLyBJbml0
aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIElu
aXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5pdFZhcmlhYmxlTGlzdCAmdW51c2VkVmFycykKKyt7CisrICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgIFRJ
bnRlcm1TZXF1ZW5jZSAqaW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybVNlcXVlbmNlOworKwor
KyAgICBmb3IgKGNvbnN0IHNoOjpTaGFkZXJWYXJpYWJsZSAmdmFyIDogdW51c2VkVmFycykKKysg
ICAgeworKyAgICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKysgICAgICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCB2YXIubmFtZSk7CisrICAg
ICAgICBBU1NFUlQoc3ltYm9sKTsKKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAqaW5pdENv
ZGUgPSBDcmVhdGVJbml0Q29kZShzeW1ib2wsIGZhbHNlLCBmYWxzZSwgJnN5bWJvbFRhYmxlKTsK
KysKKysgICAgICAgIGluc2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgp
LCBpbml0Q29kZS0+YmVnaW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKysgICAgfQorKworKyAgICBp
ZiAoaW5zZXJ0U2VxdWVuY2UpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKm1haW4gPSBGaW5kTWFpbigmcm9vdCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
Km1haW5TZXF1ZW5jZSAgID0gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworKworKyAg
ICAgICAgLy8gSW5zZXJ0IGluaXQgY29kZSBhdCB0aGUgc3RhcnQgb2YgbWFpbigpCisrICAgICAg
ICBtYWluU2VxdWVuY2UtPmluc2VydChtYWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVl
bmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1ZW5jZS0+ZW5kKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiB0cnVlOworK30KKysjZW5kaWYKKysKKytjb25zdCBUVmFyaWFibGUgKkFkZENvbXB1dGVE
cml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSkKKyt7CisrICAgIC8vIFRoaXMgZmllbGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1
Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGluIENvbnRleHRWay5jcHAuCisrICAgIFRG
aWVsZExpc3QgKmRyaXZlckZpZWxkTGlzdCA9IG5ldyBURmllbGRMaXN0OworKworKyAgICBjb25z
dCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJV
bmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQsIDQpLAorKyAgICB9
fTsKKysKKysgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
a051bUNvbXB1dGVEcml2ZXJVbmlmb3JtczsgKyt1bmlmb3JtSW5kZXgpCisrICAgIHsKKysgICAg
ICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKysgICAgICAgICAgICBuZXcgVEZpZWxk
KGtEcml2ZXJVbmlmb3JtVHlwZXNbdW5pZm9ybUluZGV4XSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIEltbXV0YWJsZVN0cmluZyhrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5k
ZXhdKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2
ZXJVbmlmb3JtRmllbGQpOworKyAgICB9CisrCisrICAgIHJldHVybiBEZWNsYXJlU3RydWN0dXJl
KCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5pZm9ybSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtV
bmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysgICAgICAgIC5zZWNvbmQ7CisrfQorKwor
Ky8vIFRoZSBBZGQqRHJpdmVyVW5pZm9ybXNUb1NoYWRlciBvcGVyYXRpb24gYWRkcyBhbiBpbnRl
cm5hbCB1bmlmb3JtIGJsb2NrIHRvIGEgc2hhZGVyLiBUaGUgZHJpdmVyCisrLy8gYmxvY2sgaXMg
dXNlZCB0byBpbXBsZW1lbnQgVnVsa2FuLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3b3JrYXJvdW5k
cy4gUmV0dXJucyB0aGUgZHJpdmVyIHVuaWZvcm1zCisrLy8gdmFyaWFibGUuCisrLy8KKysvLyBU
aGVyZSBhcmUgR3JhcGhpY3MgYW5kIENvbXB1dGUgdmFyaWF0aW9ucyBhcyB0aGV5IHJlcXVpcmUg
ZGlmZmVyZW50IHVuaWZvcm1zLgorK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJV
bmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmYWRkaXRpb25hbEZpZWxkcykKKyt7CisrICAgIC8v
IEluaXQgdGhlIGRlcHRoIHJhbmdlIHR5cGUuCisrICAgIFRGaWVsZExpc3QgKmRlcHRoUmFuZ2VQ
YXJhbXNGaWVsZHMgPSBuZXcgVEZpZWxkTGlzdCgpOworKyAgICBkZXB0aFJhbmdlUGFyYW1zRmll
bGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltbXV0YWJsZVN0cmluZygibmVhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpKTsKKysgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFi
bGVTdHJpbmcoImZhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKysg
ICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoImRpZmYiKSwg
a05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrICAgIC8vIFRoaXMgYWRkaXRp
b25hbCBmaWVsZCBtaWdodCBiZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1l
dGFsLgorKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygi
cmVzZXJ2ZWQiKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKmVtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9CisrICAgICAgICBE
ZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVs
ZHMsIEV2cUdsb2JhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmll
cjo6Q3JlYXRlKCksIDAsIGtFbXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMucmF3TmFtZSgpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKQorKyAgICAgICAgICAgIC5maXJzdC0+Z2V0
VHlwZSgpCisrICAgICAgICAgICAgLmdldFN0cnVjdCgpOworKworKyAgICAvLyBUaGlzIGZpZWxk
IGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4g
Q29udGV4dFZrLmNwcC4KKysgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisrCisrICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5cGUgKiwga051bUdyYXBoaWNz
RHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRU
eXBlKEVidEZsb2F0LCA0KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisrICAg
ICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorKyAgICAgICAgbmV3IFRUeXBlKEVidEZsb2F0
LCAyKSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwgIC8vIHVpbnQgY2xpcERpc3RhbmNl
c0VuYWJsZWQ7ICAvLyAzMiBiaXRzIGZvciAzMiBjbGlwIGRpc3RhbmNlcyBtYXgKKysgICAgICAg
IG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAg
ICAgIC8vIE5PVEU6IFRoZXJlJ3MgYSB2ZWMzIGdhcCBoZXJlIHRoYXQgY2FuIGJlIHVzZWQgaW4g
dGhlIGZ1dHVyZQorKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisrICAgICAgICBuZXcg
VFR5cGUoRWJ0VUludCwgNCksCisrICAgICAgICBuZXcgVFR5cGUoZW11bGF0ZWREZXB0aFJhbmdl
UGFyYW1zLCBmYWxzZSksCisrICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorKyAg
ICAgICAgbmV3IFRUeXBlKEVidEZsb2F0LCAyLCA0KSwKKysgICAgfX07CisrCisrICAgIGZvciAo
c2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGtOdW1HcmFwaGljc0RyaXZl
clVuaWZvcm1zOyArK3VuaWZvcm1JbmRleCkKKysgICAgeworKyAgICAgICAgVEZpZWxkICpkcml2
ZXJVbmlmb3JtRmllbGQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1U
eXBlc1t1bmlmb3JtSW5kZXhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3Ry
aW5nKGtHcmFwaGljc0RyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNl
TG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2ZXJVbmlmb3JtRmllbGQp
OworKyAgICB9CisrCisrICAgIC8vIEJhY2stZW5kIHNwZWNpZmljIGZpZWxkcworKyAgICBkcml2
ZXJGaWVsZExpc3QtPmluc2VydChkcml2ZXJGaWVsZExpc3QtPmVuZCgpLCBhZGRpdGlvbmFsRmll
bGRzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVs
ZHMuZW5kKCkpOworKworKyAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5H
TEVVbmlmb3JtQmxvY2siIHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCisrICAg
IHJldHVybiBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxk
TGlzdCwgRXZxVW5pZm9ybSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1
YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysg
ICAgICAgIC5zZWNvbmQ7CisrfQorKworKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJl
cGxhY2UgZ2xfRGVwdGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5p
Zm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2
ZXJVbmlmb3JtKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIC8vIENy
ZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2UgdG8gImdsX0RlcHRoUmFuZ2UiCisrICAgIGNvbnN0IFRW
YXJpYWJsZSAqZGVwdGhSYW5nZVZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSAqPigK
KysgICAgICAgIHN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCAwKSk7CisrCisrICAgIC8vIEFOR0xFVW5pZm9ybXMuZGVwdGhSYW5nZQorKyAg
ICBUSW50ZXJtQmluYXJ5ICphbmdsZUVtdWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZl
clVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKysKKysgICAgLy8gVXNl
IHRoaXMgdmFyaWFibGUgaW5zdGVhZCBvZiBnbF9EZXB0aFJhbmdlIGV2ZXJ5d2hlcmUuCisrICAg
IHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhS
YW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRoUmFuZ2VSZWYpOworK30KKysKKytUSW50ZXJtU2Vx
dWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1haW4oJnJvb3QpOworKyAgICByZXR1
cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworK30KKysKKytBTkdMRV9OT19ESVND
QVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4o
VENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQor
K3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRh
YmxlKCk7CisrICAgIFRWYXJpYWJsZSAqeGZiUGxhY2Vob2xkZXIgPSBuZXcgVFZhcmlhYmxlKCZz
eW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJAQCBYRkItT1VUIEBAIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZSgpLCBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFz
IGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKysgICAgcmV0dXJuIFJ1bkF0
VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgbmV3IFRJbnRlcm1TeW1ib2woeGZiUGxh
Y2Vob2xkZXIpLCAmc3ltYm9sVGFibGUpOworK30KKysKKysvLyBUaGlzIG9wZXJhdGlvbiBwZXJm
b3JtcyB0aGUgdmlld3BvcnQgZGVwdGggdHJhbnNsYXRpb24gbmVlZGVkIGJ5IFZ1bGthbi4gSW4g
R0wgdGhlIHZpZXdwb3J0CisrLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50
IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhlCisr
Ly8gVmlld3BvcnQiLiBJbiBWdWxrYW4gdGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBzZWN0aW9uIGlz
IGN1cnJlbnRseSAiMjMuNC4gQ29vcmRpbmF0ZQorKy8vIFRyYW5zZm9ybWF0aW9ucyIuCisrLy8g
VGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKysvLworKy8vICAgICB6X3Zr
ID0gMC41ICogKHdfZ2wgKyB6X2dsKQorKy8vCisrLy8gd2hlcmUgel92ayBpcyB0aGUgZGVwdGgg
b3V0cHV0IG9mIGEgVnVsa2FuIHZlcnRleCBzaGFkZXIgYW5kIHpfZ2wgaXMgdGhlIHNhbWUgZm9y
IEdMLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJl
Y3Rpb25Ub01haW4oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIFRWZWN0b3I8aW50PiBzd2l6
emxlT2Zmc2V0WiA9IHsyfTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3
IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisrCisrICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICpvbmVIYWxmID0gQ3JlYXRlRmxvYXROb2RlKDAuNWYpOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblcgICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZi0+ZGVlcENv
cHkoKSwgc3dpenpsZU9mZnNldFcpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24g
IihnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorKyAgICBUSW50ZXJtQmlu
YXJ5ICp6UGx1c1cgPSBuZXcgVEludGVybUJpbmFyeShFT3BBZGQsIHBvc2l0aW9uWi0+ZGVlcENv
cHkoKSwgcG9zaXRpb25XLT5kZWVwQ29weSgpKTsKKysgICAgVEludGVybUJpbmFyeSAqaGFsZlpQ
bHVzVyA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgelBsdXNXLCBvbmVIYWxmLT5kZWVwQ29w
eSgpKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0g
KGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNSIKKysgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5h
cnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24s
IHBvc2l0aW9uWkxIUywgaGFsZlpQbHVzVyk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdu
bWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJldHVy
biBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1i
b2xUYWJsZSk7CisrfQorKworKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJl
LXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3IgQW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVy
CisrLy8gcGxhdGZvcm1zKSwgdGhlIGRldmljZSBtYXkgcm90YXRlLCBzdWNoIHRoYXQgdGhlIG9y
aWVudGF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyByb3RhdGVkCisrLy8gcmVsYXRpdmUgdG8g
dGhlIG5hdGl2ZSBvcmllbnRhdGlvbiBvZiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBjb3JyZWN0ZWQg
aW4gcGFydCBieSBtdWx0aXBseWluZworKy8vIGdsX1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKysvLyBU
aGUgZXF1YXRpb25zIHJlZHVjZSB0byBhbiBleHByZXNzaW9uOgorKy8vCisrLy8gICAgIGdsX1Bv
c2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlvbgorK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBBcHBlbmRQcmVSb3RhdGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJp
dmVyVW5pZm9ybXMpCisreworKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlICAgICA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKnByZVJvdGF0aW9u
UmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga1ByZVJvdGF0aW9u
KTsKKysgICAgVEludGVybVN5bWJvbCAqZ2xQb3MgICAgICAgICAgPSBuZXcgVEludGVybVN5bWJv
bChCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKyAgICBUVmVjdG9yPGludD4gc3dp
enpsZU9mZnNldFhZICA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmdsUG9zWFkgICAg
ICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7CisrCisrICAg
IC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24p
IgorKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisrICAgICAgICBuZXcgVEludGVybUJp
bmFyeShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgcHJlUm90YXRpb25SZWYtPmRlZXBDb3B5KCksIGds
UG9zWFktPmRlZXBDb3B5KCkpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImds
X1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorKyAgICBUSW50
ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBnbFBvc1hZLT5kZWVwQ29weSgpLCB6Um90YXRlZCk7CisrCisrICAg
IC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRo
ZSBzaGFkZXIuCisrICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJv
b3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSb3RhdGVBbmRGbGlwQnVpbHRpblZhcmlhYmxlKFRDb21waWxlciAmY29tcGlsZXIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0U2VxdWVuY2UsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZmbGlw
WFksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZidWlsdGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJmZsaXBwZWRWYXJpYWJsZU5hbWUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkICZwaXZvdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKKyt7CisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICAv
LyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICdidWlsdGluJy4KKysgICAgVEludGVybVN5
bWJvbCAqYnVpbHRpblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKCZidWlsdGluKTsKKysKKysgICAg
Ly8gQ3JlYXRlIGEgc3dpenpsZSB0byAiYnVpbHRpbi54eSIKKysgICAgVFZlY3RvcjxpbnQ+IHN3
aXp6bGVPZmZzZXRYWSA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAg
ICA9IG5ldyBUSW50ZXJtU3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworKwor
KyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvIG91ciBuZXcgdmFyaWFibGUgdGhh
dCB3aWxsIGhvbGQgdGhlIG1vZGlmaWVkIGJ1aWx0aW4uCisrICAgIGNvbnN0IFRUeXBlICp0eXBl
ID0gU3RhdGljVHlwZTo6R2V0Rm9yVmVjPEVidEZsb2F0PigKKysgICAgICAgIEV2cUdsb2JhbCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYnVpbHRpbi5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSkpOworKyAgICBUVmFyaWFibGUgKnJlcGxhY2VtZW50VmFyID0gbmV3IFRWYXJpYWJsZSgm
c3ltYm9sVGFibGUsIGZsaXBwZWRWYXJpYWJsZU5hbWUucmF3TmFtZSgpLCB0eXBlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVO
YW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgcmVw
bGFjZW1lbnRWYXIpOworKyAgICBUSW50ZXJtU3ltYm9sICpmbGlwcGVkQnVpbHRpblJlZiA9IG5l
dyBUSW50ZXJtU3ltYm9sKHJlcGxhY2VtZW50VmFyKTsKKysKKysgICAgLy8gVXNlIHRoaXMgbmV3
IHZhcmlhYmxlIGluc3RlYWQgb2YgJ2J1aWx0aW4nIGV2ZXJ5d2hlcmUuCisrICAgIGlmICghUmVw
bGFjZVZhcmlhYmxlKCZjb21waWxlciwgJnJvb3QsICZidWlsdGluLCByZXBsYWNlbWVudFZhcikp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBDcmVh
dGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGluLnh5ICogZnJhZ1JvdGF0aW9uKSIKKysgICAgVElu
dGVybVR5cGVkICpyb3RhdGVkWFk7CisrICAgIGlmIChmcmFnUm90YXRpb24pCisrICAgIHsKKysg
ICAgICAgIHJvdGF0ZWRYWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9y
LCBmcmFnUm90YXRpb24tPmRlZXBDb3B5KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOworKyAgICB9CisrICAgIGVsc2UKKysg
ICAgeworKyAgICAgICAgLy8gTm8gcm90YXRpb24gYXBwbGllZCwgdXNlIG9yaWdpbmFsIHZhcmlh
YmxlLgorKyAgICAgICAgcm90YXRlZFhZID0gYnVpbHRpblhZLT5kZWVwQ29weSgpOworKyAgICB9
CisrCisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgLSBwaXZvdCkg
KiBmbGlwWFkgKyBwaXZvdAorKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9IG5ldyBU
SW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworKyAgICBUSW50ZXJtQmlu
YXJ5ICppbnZlcnNlWFkgICA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgcmVtb3ZlUGl2b3Qs
ICZmbGlwWFkpOworKyAgICBUSW50ZXJtQmluYXJ5ICpwbHVzUGl2b3QgICA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEFkZCwgaW52ZXJzZVhZLCBwaXZvdC5kZWVwQ29weSgpKTsKKysKKysgICAgLy8g
Q3JlYXRlIHRoZSBjb3JyZWN0ZWQgdmFyaWFibGUgYW5kIGNvcHkgdGhlIHZhbHVlIG9mIHRoZSBv
cmlnaW5hbCBidWlsdGluLgorKyAgICBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlID0gbmV3IFRJ
bnRlcm1TZXF1ZW5jZSgpOworKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRl
ZXBDb3B5KCkpOworKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBUSW50ZXJtQWdn
cmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihidWlsdGluLmdldFR5cGUoKSwgc2VxdWVuY2UpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICAgPSBuZXcgVEludGVybUJpbmFyeShFT3BJ
bml0aWFsaXplLCBmbGlwcGVkQnVpbHRpblJlZiwgYWdncmVnYXRlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGFzc2lnbm1lbnQgdG8gdGhlIHJlcGxhY2VkIHZhcmlhYmxlJ3MgLnh5LgorKyAgICBU
SW50ZXJtU3dpenpsZSAqY29ycmVjdGVkWFkgPQorKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworKyAgICBU
SW50ZXJtQmluYXJ5ICphc3NpZ25Ub1kgPSBuZXcgVEludGVybUJpbmFyeShFT3BBc3NpZ24sIGNv
cnJlY3RlZFhZLCBwbHVzUGl2b3QpOworKworKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorKyAgICB7CisrICAgICAgICBUSW50
ZXJtQmluYXJ5ICpub2Rlc1tdID0ge2Fzc2lnbm1lbnQsIGFzc2lnblRvWX07CisrICAgICAgICBp
bnNlcnRTZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihu
b2RlcyksIHN0ZDo6ZW5kKG5vZGVzKSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVy
LnZhbGlkYXRlQVNUKCZyb290KTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2Vy
dEZyYWdDb29yZENvcnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBp
bGVPcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAmZHJpdmVyVW5pZm9ybXMpCisreworKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisrICAg
IFRJbnRlcm1CaW5hcnkgJnBpdm90ICAgICAgICA9ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRy
aXZlclVuaWZvcm1zLCBrSGFsZlJlbmRlckFyZWEpOworKyAgICBUSW50ZXJtQmluYXJ5ICpmcmFn
Um90YXRpb24gPSAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfUFJFX1JPVEFUSU9OKQorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0aW9uKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyOworKyAgICByZXR1cm4gUm90YXRlQW5kRmxpcEJ1aWx0
aW5WYXJpYWJsZShjb21waWxlciwgcm9vdCwgaW5zZXJ0U2VxdWVuY2UsIGZsaXBYWSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xf
RnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl2b3QsIGZyYWdSb3RhdGlvbik7CisrfQorKworK1RJbnRl
cm1CaW5hcnkgKkdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihjb25z
dCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVEludGVybUJpbmFyeSAqZGVw
dGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJh
bmdlKTsKKysKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0U3Ry
dWN0LCBkZXB0aFJhbmdlLCBDcmVhdGVJbmRleE5vZGUoMykpOworK30KKysKKyt2b2lkIERlY2xh
cmVSaWdodEJlZm9yZU1haW4oVEludGVybUJsb2NrICZyb290LCBjb25zdCBUVmFyaWFibGUgJnZh
cikKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwg
e25ldyBUSW50ZXJtRGVjbGFyYXRpb257JnZhcn19KTsKKyt9CisrCisrdm9pZCBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUpCisreworKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgmcm9vdCks
CisrICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2V7bmV3IFRJbnRlcm1E
ZWNsYXJhdGlvbntCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb2xvcigpfX0pOworK30KKysKKyt2
b2lkIEFkZEZyYWdEZXB0aERlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRh
YmxlICZzeW1ib2xUYWJsZSkKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFp
bkluZGV4KCZyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0RlcHRoKCl9
fSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKyAgICBj
b25zdCBpbnQgbWF4RHJhd0J1ZmZlcnMgID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuTWF4RHJh
d0J1ZmZlcnM7CisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGUgICAgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEpOworKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworKyAgICBUSW50ZXJtU2VxdWVuY2Ug
ZGVjbGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZTsKKysKKysgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRh
XzAsMSwyLDMKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQor
KyAgICB7CisrICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJn
bF9GcmFnRGF0YV8iKSArIDIpOworKyAgICAgICAgYnVpbGRlciA8PCAiZ2xfRnJhZ0RhdGFfIjsK
KysgICAgICAgIGJ1aWxkZXIuYXBwZW5kRGVjaW1hbChpKTsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xGcmFnRGF0YSA9CisrICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFi
bGUsIGJ1aWxkZXIsIGdsX0ZyYWdEYXRhVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb246OlVOREVGSU5FRCk7CisrICAg
ICAgICBnbEZyYWdEYXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworKyAgICAgICAgZGVj
bGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntn
bEZyYWdEYXRhfSk7CisrICAgIH0KKysgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWlu
SW5kZXgoJnJvb3QpLCBkZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGludGVybmFsIGdsX0ZyYWdEYXRhIGFycmF5IHR5cGUsIGNvbXBhdGlibGUgd2l0aCBp
bmRleGluZyBzeW50YXguCisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworKyAgICBnbF9GcmFn
RGF0YVR5cGVBcnJheS0+bWFrZUFycmF5KG1heERyYXdCdWZmZXJzKTsKKysgICAgY29uc3QgVFZh
cmlhYmxlICpnbEZyYWdEYXRhR2xvYmFsID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIElt
bXV0YWJsZVN0cmluZygiZ2xfRnJhZ0RhdGEiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9s
VHlwZTo6QnVpbHRJbik7CisrCisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFn
RGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRh
IikpOworKyAgICBBU1NFUlQob3JpZ2luYWxHTEZyYWdEYXRhKTsKKysKKysgICAgLy8gUmVwbGFj
ZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGdsb2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKysgICAg
aWYgKCFSZXBsYWNlVmFyaWFibGUoJmNvbXBpbGVyLCAmcm9vdCwgJihvcmlnaW5hbEdMRnJhZ0Rh
dGEtPnZhcmlhYmxlKCkpLCBnbEZyYWdEYXRhR2xvYmFsKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIEFzc2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0
ZSB0byBhbiBvdXRwdXQKKysgICAgVEludGVybUJsb2NrICppbnNlcnRTZXF1ZW5jZSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsg
aSsrKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmdsRnJhZ0RhdGFTbG90ICAgICAg
ICAgPSBuZXcgVEludGVybVN5bWJvbChnbEZyYWdEYXRhU2xvdHNbaV0pOworKyAgICAgICAgVElu
dGVybVR5cGVkICpnbEZyYWdEYXRhR2xvYmFsU3ltYm9sID0gbmV3IFRJbnRlcm1TeW1ib2woZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAgICAgICAgICAgICAg
ICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwgaSk7CisrICAgICAg
ICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgICAgICBuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xGcmFnRGF0YVNsb3QsICZhY2Nlc3MpOworKyAg
ICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50KTsKKysgICAg
fQorKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290LCBpbnNl
cnRTZXF1ZW5jZSwgJnN5bWJvbFRhYmxlKTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEVtdWxhdGVJbnN0YW5jZUlEKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcykKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorKyAgICAgICAg
Q3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0VtdUluc3RhbmNlSURGaWVs
ZC5yYXdOYW1lKCkuZGF0YSgpKTsKKysgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrICAgIHJldHVybiBSZXBsYWNl
VmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFu
Y2VJRCk7CisrfQorKworKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ky8vIG1hbnVhbGx5LgorKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBn
bF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKysvLyBnbF9Qb3NpdGlvbi55ID0g
Z2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVyICZj
b21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVN3aXp6bGUgJm5lZ0ZsaXBZKQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9z
aXRpb24gID0gQnVpbHRJblZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpOworKyAgICBUSW50ZXJtU3lt
Ym9sICpwb3NpdGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKysKKysgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZOworKyAgICBzd2l6emxlT2Zmc2V0WS5wdXNoX2Jh
Y2soMSk7CisrICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6
bGUocG9zaXRpb25SZWYsIHN3aXp6bGVPZmZzZXRZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBl
eHByZXNzaW9uICJnbF9Qb3NpdGlvbi55ICogbmVnRmxpcFkiCisrICAgIFRJbnRlcm1CaW5hcnkg
KmludmVyc2VZID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5
KCksICZuZWdGbGlwWSk7CisrCisrICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9z
aXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorKyAgICBUSW50ZXJt
VHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKysgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFz
c2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNz
aWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJl
dHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZz
eW1ib2xUYWJsZSk7CisrfQorKworK30gIC8vIG5hbWVzcGFjZQorKworK1RyYW5zbGF0b3JNZXRh
bERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0KHNoOjpHTGVudW0gdHlwZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlclNwZWMgc3BlYywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91
dHB1dCBvdXRwdXQpCisrICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkKKyt7fQor
KworKy8vIHN0YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0Q292
ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCisreworKyAgICByZXR1cm4gY29uc3RhbnRfbmFt
ZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7CisrfQorKworKy8vIHN0
YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0UmFzdGVyaXphdGlv
bkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7CisrICAgIHJldHVybiBjb25zdGFudF9uYW1l
czo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOworK30KKysK
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRSYXN0
ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUoKTsKKysKKysgICAgVFR5cGUg
KmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworKyAgICBib29sVHlwZS0+c2V0UXVhbGlm
aWVyKEV2cUNvbnN0KTsKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisrICAg
ICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6
YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCksIGJvb2xUeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5zeW1i
b2xUeXBlKCkpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIC8vIENyZWF0ZSB2ZWM0KC0z
LCAtMywgLTMsIDEpOgorKyAgICBhdXRvIHZlYzRUeXBlICAgICAgICAgICAgID0gbmV3IFRUeXBl
KEVidEZsb2F0LCA0KTsKKysgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50
ZXJtU2VxdWVuY2UoKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUo
LTMuMGYpKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYp
KTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysg
ICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoMS4wZikpOworKyAgICBUSW50
ZXJtQWdncmVnYXRlICpjb25zdFZhckNvbnN0cnVjdG9yID0KKysgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworKworKyAgICAv
LyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uID0gdmVjNCgtMywgLTMsIC0zLCAx
KSIKKysgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCA9CisrICAgICAgICBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25SZWYtPmRlZXBDb3B5KCksIGNv
bnN0VmFyQ29uc3RydWN0b3IpOworKworKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9
IG5ldyBUSW50ZXJtQmxvY2s7CisrICAgIGRpc2NhcmRCbG9jay0+YXBwZW5kU3RhdGVtZW50KGFz
c2lnbm1lbnQpOworKworKyAgICBUSW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBU
SW50ZXJtU3ltYm9sKGRpc2NhcmRFbmFibGVkVmFyKTsKKysgICAgVEludGVybUlmRWxzZSAqaWZD
YWxsICAgICAgICAgPSBuZXcgVEludGVybUlmRWxzZShkaXNjYXJkRW5hYmxlZCwgZGlzY2FyZEJs
b2NrLCBudWxscHRyKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywg
JnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOworK30KKysKKysvLyBNZXRhbCBuZWVkcyB0byBp
bnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJhbmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4g
ZGVwdGggbmVhciA+IGRlcHRoIGZhcgorKy8vIFRoaXMgaXMgYWNoaWV2ZWQgYnkgbXVsdGlwbHkg
dGhlIGRlcHRoIHZhbHVlIHdpdGggc2NhbGUgdmFsdWUgc3RvcmVkIGluCisrLy8gZHJpdmVyIHVu
aWZvcm0ncyBkZXB0aFJhbmdlLnJlc2VydmVkCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgY29uc3QgVFZhcmlhYmxl
ICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisrICAgIFRJbnRl
cm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7Mn07CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenps
ZU9mZnNldFopOworKworKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpTY2FsZSA9IEdldERy
aXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJVbmlmb3Jtcyk7Cisr
CisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFu
Z2UucmVzZXJ2ZWQiLgorKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcgVEludGVybUJp
bmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2NhbGUpOworKwor
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlv
bi56ICogZGVwdGhSYW5nZS5yZXNlcnZlZCIKKysgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpM
SFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1l
bnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxI
UywgelNjYWxlKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJv
b3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKKyt9CisrCisrdm9pZCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVs
ZHMoCisrICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0KQorK3sKKysgICAgLy8g
QWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBi
dWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKysgICAgLy8gZXF1aXZhbGVudCBmdW5j
dGlvbmFsaXR5LCBuZWVkcyB0byBlbXVsYXRlIGl0IHVzaW5nIGZyYWdtZW50IHNoYWRlcidzIFtb
c2FtcGxlX21hc2tdXSBvdXRwdXQKKysgICAgLy8gdmFsdWUuCisrICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga05vU291cmNlTG9jLCBrQ292ZXJhZ2VNYXNrRmllbGQuc3ltYm9sVHlwZSgpKTsKKysg
ICAgZmllbGRzT3V0LnB1c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisrCisrICAgIGlmICht
RW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICB7CisrICAgICAgICBURmllbGQgKmVtdUluc3RhbmNl
SURGaWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmll
bGQucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtOb1NvdXJjZUxvYywga0VtdUluc3RhbmNlSURGaWVsZC5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworKyAgICB9
CisrfQorKworK1RJbnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZl
clVuaWZvcm1OZWdGbGlwWVJlZigKKysgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3QKKyt7CisrICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55Igor
KyAgICBUSW50ZXJtQmluYXJ5ICpuZWdGbGlwWFkgICAgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrTmVnRmxpcFhZKTsKKysgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVP
ZmZzZXRZID0gezF9OworKyAgICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVElu
dGVybVN3aXp6bGUobmVnRmxpcFhZLCBzd2l6emxlT2Zmc2V0WSk7CisrICAgIHJldHVybiBuZWdG
bGlwWTsKKyt9CisrCisrc3RhdGljIHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5
d29yZHMoKQorK3sKKysgICAgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKysK
KysgICAga2V5d29yZHMuZW1wbGFjZSgiYWxpZ25hcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJhbGlnbm9mIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImFzX3R5cGUiKTsKKysgICAga2V5
d29yZHMuZW1wbGFjZSgiYXV0byIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjaGFyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNs
YXNzIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nhc3QiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiY29uc3RhbnQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RleHBy
Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBlIik7CisrICAgIGtleXdvcmRzLmVt
cGxhY2UoImRlbGV0ZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZXZpY2UiKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
ImVudW0iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImV4dGVybiIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmFnbWVudCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJmcmllbmQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZ290byIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJoYWxmIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOworKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlu
dDMyX3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7Cisr
ICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWFp
bjAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKKysgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJuYW1lc3BhY2UiKTsKKysg
ICAga2V5d29yZHMuZW1wbGFjZSgibmV3Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhj
ZXB0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm51bGxwdHJfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJudWxscHRyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm92ZXJyaWRlIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInByaXZhdGUiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInB0cmRpZmZfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJw
dWJsaWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgicmVnaXN0ZXIiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsK
KysgICAga2V5d29yZHMuZW1wbGFjZSgic2lnbmVkIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InNpemVfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplb2YiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fz
c2VydCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfY2FzdCIpOworKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJzdGF0aWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGVtcGxhdGUi
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhpcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ0aHJlYWRfbG9jYWwiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdyb3VwX2ltYWdlYmxvY2siKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyb3ci
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHJ5Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InR5cGVkZWYiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWlkIik7CisrICAgIGtleXdv
cmRzLmVtcGxhY2UoInR5cGVuYW1lIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVjaGFyIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQzMl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQ2NF90Iik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInVpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5p
b24iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKysgICAga2V5d29yZHMu
ZW1wbGFjZSgidXNob3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaW5nIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2aXJ0
dWFsIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7CisrICAgIGtleXdvcmRz
LmVtcGxhY2UoIndjaGFyX3QiKTsKKysKKysgICAgcmV0dXJuIGtleXdvcmRzOworK30KKysKKyti
b29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxvY2sgJnJv
b3QsIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCisreworKyAgICBUU3ltYm9sVGFi
bGUgJnN5bWJvbFRhYmxlID0gZ2V0U3ltYm9sVGFibGUoKTsKKysgICAgSWRHZW4gaWRHZW47Cisr
ICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKysKKysgICAgaWYgKCFXcmFwTWFpbigqdGhp
cywgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2JqOworKyNpZiAw
CisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgewor
KyAgICAgICAgaWYgKCFTaGFkZXJCdWlsdGluc1dvcmthcm91bmQodGhpcywgJnJvb3QsICZzeW1i
b2xUYWJsZSwgY29tcGlsZU9wdGlvbnMpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorKworKyAgICAvLyBTdHJpcCBh
bnkgaW5hY3RpdmUgdmFyaWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisrICAgIGlmICghUmVtb3Zl
SW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXModGhpcywgJnJvb3QsIGdldEF0dHJpYnV0ZXMoKSwg
Z2V0SW5wdXRWYXJ5aW5ncygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldE91dHB1dFZhcmlhYmxlcygpLCBnZXRVbmlmb3JtcygpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIFdyaXRlIG91
dCBkZWZhdWx0IHVuaWZvcm1zIGludG8gYSB1bmlmb3JtIGJsb2NrIGFzc2lnbmVkIHRvIGEgc3Bl
Y2lmaWMgc2V0L2JpbmRpbmcuCisrICAgIGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAg
ICA9IDA7CisrICAgIGludCBhZ2dyZWdhdGVUeXBlc1VzZWRGb3JVbmlmb3JtcyA9IDA7CisrICAg
IGludCBhdG9taWNDb3VudGVyQ291bnQgICAgICAgICAgICA9IDA7CisrICAgIGZvciAoY29uc3Qg
YXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1zKCkpCisrICAgIHsKKysgICAgICAgIGlmICghdW5p
Zm9ybS5pc0J1aWx0SW4oKSAmJiB1bmlmb3JtLmFjdGl2ZSAmJiAhZ2w6OklzT3BhcXVlVHlwZSh1
bmlmb3JtLnR5cGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZGVmYXVsdFVuaWZvcm1D
b3VudDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh1bmlmb3JtLmlzU3RydWN0KCkgfHwg
dW5pZm9ybS5pc0FycmF5T2ZBcnJheXMoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICArK2Fn
Z3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYg
KHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVuaWZvcm0udHlwZSkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgKythdG9taWNDb3VudGVyQ291bnQ7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zID4g
MCkKKysgICAgeworKyAgICAgICAgaWYgKCFOYW1lRW1iZWRkZWRTdHJ1Y3RVbmlmb3Jtcyh0aGlz
LCAmcm9vdCwgJnN5bWJvbFRhYmxlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBib29sIHJld3JpdGVTdHJ1Y3RTYW1wbGVy
c1Jlc3VsdDsKKysgICAgICAgIGludCByZW1vdmVkVW5pZm9ybXNDb3VudDsKKysKKysgICAgICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1VTRV9PTERfUkVXUklURV9TVFJVQ1RfU0FNUExFUlMp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzT2xkKHRoaXMsICZyb290LCAm
c3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVz
dWx0ID0KKysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrCisr
ICAgICAgICBpZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBkZWZhdWx0VW5p
Zm9ybUNvdW50IC09IHJlbW92ZWRVbmlmb3Jtc0NvdW50OworKworKyNpZiAwCisrICAgICAgICAv
LyBXZSBtdXN0IGRlY2xhcmUgdGhlIHN0cnVjdCB0eXBlcyBiZWZvcmUgdXNpbmcgdGhlbS4KKysg
ICAgICAgIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciBzdHJ1Y3RUeXBlc1RyYXZlcnNlcihv
dXRwdXRNU0wpOworKyAgICAgICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2Vy
KTsKKysgICAgICAgIGlmICghc3RydWN0VHlwZXNUcmF2ZXJzZXIudXBkYXRlVHJlZSh0aGlzLCBy
b290KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9
CisrI2VuZGlmCisrICAgIH0KKysKKysgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFU
RV9TRUFNRlVMX0NVQkVfTUFQX1NBTVBMSU5HKQorKyAgICB7CisrICAgICAgICBpZiAoIVJld3Jp
dGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysjaWYgMAorKyAgICAvLyBXcml0ZSBk
ZWZhdWx0IHVuaWZvcm0gYmxvY2sKKysgICAgaWYgKGRlZmF1bHRVbmlmb3JtQ291bnQgPiAwKQor
KyAgICB7CisrICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0gZ2w6OkZyb21HTGVu
dW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7CisrICAgICAgICBzaW5rIDw8ICJc
bnN0cnVjdCAiIDw8IGtEZWZhdWx0VW5pZm9ybU5hbWVzW3NoYWRlclR5cGVdIDw8ICJcbntcbiI7
CisrICAgICAgICBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIGRlZmF1bHRUcmF2ZXJz
ZXIoJnNpbmssIGdldEhhc2hGdW5jdGlvbigpLCAmZ2V0TmFtZU1hcCgpKTsKKysgICAgICAgIHJv
b3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKysgICAgICAgIGlmICghZGVmYXVsdFRy
YXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpbmsgPDwgIn07XG4iOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMg
PSAqWyZdKCkgeworKyAgICAgICAgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NI
QURFUikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gQWRkQ29tcHV0ZURyaXZlclVu
aWZvcm1zVG9TaGFkZXIocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiBhZGRp
dGlvbmFsRmllbGRzOworKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZl
clVuaWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisrICAgICAgICAgICAgcmV0dXJuIEFk
ZEdyYXBoaWNzRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSwgYWRkaXRp
b25hbEZpZWxkcyk7CisrICAgICAgICB9CisrICAgIH0oKTsKKysKKysgICAgaWYgKGF0b21pY0Nv
dW50ZXJDb3VudCA+IDApCisrICAgIHsKKysgICAgICAgIC8vIEFOR0xFVW5pZm9ybXMuYWNiQnVm
ZmVyT2Zmc2V0cworKyAgICAgICAgY29uc3QgVEludGVybUJpbmFyeSAqYWNiQnVmZmVyT2Zmc2V0
cyA9CisrICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a0FjYkJ1ZmZlck9mZnNldHMpOworKworKyAgICAgICAgaWYgKCFSZXdyaXRlQXRvbWljQ291bnRl
cnModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwgYWNiQnVmZmVyT2Zmc2V0cykpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrICAg
IGVsc2UgaWYgKGdldFNoYWRlclZlcnNpb24oKSA+PSAzMTApCisrICAgIHsKKysgICAgICAgIC8v
IFZ1bGthbiBkb2Vzbid0IHN1cHBvcnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNz
LCBidXQgd2UndmUgc2VlbgorKyAgICAgICAgLy8gY2FzZXMgd2hlcmUgYnVpbHRpbnMgYXJlIHVz
aW5nIGl0IGV2ZW4gd2l0aCBubyBhY3RpdmUgYXRvbWljIGNvdW50ZXJzLgorKyAgICAgICAgLy8g
VGhpcyBwYXNzIHNpbXBseSByZW1vdmVzIHRob3NlIGJ1aWx0aW5zIGluIHRoYXQgc2NlbmFyaW8u
CisrICAgICAgICBpZiAoIVJlbW92ZUF0b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisr
ICAgIHsKKysgICAgICAgIGlmICghUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2ZXJVbmlmb3Jt
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyNpZiAwCisrICAgICAgICAvLyBBZGQgc3Bl
Y2lhbGl6YXRpb24gY29uc3RhbnQgZGVjbGFyYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhlIHNwZWNpYWxpemF0aW9uCisrICAgICAgICAvLyBjb25zdGFudCBpcyBpcnJlbGV2YW50LCBh
cyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4KKysgICAgICAgIGlm
IChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9O
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25zdGFudF9pZD0i
CisrICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odms6OlNwZWNpYWxp
emF0aW9uQ29uc3RhbnRJZDo6TGluZVJhc3RlckVtdWxhdGlvbikKKysgICAgICAgICAgICAgICAg
IDw8ICIpIGNvbnN0IGJvb2wgIiA8PCBrTGluZVJhc3RlckVtdWxhdGlvblNwZWNDb25zdFZhck5h
bWUgPDwgIiA9IGZhbHNlO1xuXG4iOworKyAgICAgICAgfQorKyNlbmRpZgorKyAgICB9CisrCisr
ICAgIHsKKysgICAgICAgIGJvb2wgdXNlc0luc3RhbmNlSWQgPSBmYWxzZTsKKysgICAgICAgIGZv
ciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmICh2YXIuaXNCdWlsdEluKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBpZiAodmFyLm5hbWUgPT0gImdsX0luc3RhbmNlSUQiKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAodXNlc0luc3RhbmNlSWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgcm9vdC5pbnNlcnRD
aGlsZE5vZGVzKAorKyAgICAgICAgICAgICAgICBGaW5kTWFpbkluZGV4KCZyb290KSwKKysgICAg
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJ
blZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCl9fSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgLy8gRGVjbGFyZSBnbF9GcmFnQ29sb3IgYW5kIGdsRnJhZ0RhdGEgYXMgd2ViZ2xfRnJhZ0Nv
bG9yIGFuZCB3ZWJnbF9GcmFnRGF0YQorKyAgICAvLyBpZiBpdCdzIGNvcmUgcHJvZmlsZSBzaGFk
ZXJzIGFuZCB0aGV5IGFyZSB1c2VkLgorKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKysgICAgeworKyAgICAgICAgYm9vbCB1c2VzUG9pbnRDb29yZCAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisrICAgICAgICBi
b29sIHVzZXNGcm9udEZhY2luZyA9IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJW
YXJpYWJsZSAmaW5wdXRWYXJ5aW5nIDogbUlucHV0VmFyeWluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKGlucHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVzZXNQb2ludENvb3Jk
ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChp
bnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb29yZCA9IHRydWU7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYXJ5aW5nLm5hbWUgPT0gImds
X0Zyb250RmFjaW5nIikKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
dXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZhbHNlOwor
KyAgICAgICAgYm9vbCB1c2VzRnJhZ0RhdGEgID0gZmFsc2U7CisrICAgICAgICBib29sIHVzZXNG
cmFnRGVwdGggPSBmYWxzZTsKKysgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91
dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGlmIChvdXRwdXRWYXJ5aW5nLmlzQnVpbHRJbigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKG91dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRydWU7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFy
eWluZy5uYW1lID09ICJnbF9GcmFnRGF0YSIpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIHVzZXNGcmFnRGF0YSA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVw
dGgiKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0Rl
cHRoID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdDb2xvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihyb290LCBzeW1ib2xUYWJsZSk7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdEYXRhKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICghQWRkRnJh
Z0RhdGFEZWNsYXJhdGlvbigqdGhpcywgcm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnRGVwdGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgQWRkRnJh
Z0RlcHRoRGVjbGFyYXRpb24ocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKworKyNp
ZiAwCisrICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVf
UkFTVEVSX0VNVUxBVElPTikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIUFkZEJyZXNl
bmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVPcHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9s
VGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJV
bmlmb3JtcywgdXNlc0ZyYWdDb29yZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyNlbmRpZgorKwor
KyAgICAgICAgYm9vbCB1c2VQcmVSb3RhdGlvbiA9IGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BS
RV9ST1RBVElPTjsKKysKKysgICAgICAgIGlmICh1c2VzUG9pbnRDb29yZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVy
VW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisrICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gJnBpdm90ID0gKkNyZWF0ZUZsb2F0Tm9kZSgwLjVmKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAgICB1
c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtG
cmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJvdGF0ZUFuZEZsaXBC
dWlsdGluVmFyaWFibGUoKnRoaXMsIHJvb3QsICpHZXRNYWluU2VxdWVuY2Uocm9vdCksIGZsaXBY
WSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0
SW5WYXJpYWJsZTo6Z2xfUG9pbnRDb29yZCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJhZ1Jv
dGF0aW9uKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290
LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludENvb3JkKCkpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnQ29vcmQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHJpdmVyVW5pZm9ybXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb29yZCgpKTsKKysg
ICAgICAgIH0KKysKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlw
WFkgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKysg
ICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAg
ICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5
KHRoaXMsICZyb290LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZy
YWdSb3RhdGlvbikpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNGcm9u
dEZhY2luZykKKysgICAgICAgIHsKKysgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0Zyb250RmFjaW5nKCkpOworKyAgICAgICAgfQor
KworKyAgICAgICAgRW1pdEVhcmx5RnJhZ21lbnRUZXN0c0dMU0woKnRoaXMsIHNpbmspOworKyAg
ICB9CisrICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQor
KyAgICB7CisrICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFy
aWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKworKyAgICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZy
b290LCBCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50U2l6ZSgpLT5uYW1lKCkpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIERlY2xhcmVSaWdodEJlZm9yZU1haW4ocm9vdCwgKkJ1aWx0SW5WYXJp
YWJsZTo6Z2xfUG9pbnRTaXplKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKEZpbmRT
eW1ib2xOb2RlKCZyb290LCBCdWlsdEluVmFyaWFibGU6OmdsX1ZlcnRleEluZGV4KCktPm5hbWUo
KSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFSZXBsYWNlVmFyaWFibGUodGhpcywg
JnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAma2dsX1ZlcnRleEluZGV4TWV0YWwpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsIGtnbF9WZXJ0ZXhJbmRleE1ldGFs
KTsKKysgICAgICAgIH0KKysKKysjaWYgMAorKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYg
U0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKCFBZGRCcmVzZW5oYW1FbXVsYXRpb25WUyh0aGlzLCByb290LCAmc3ltYm9s
VGFibGUsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBBZGQgYSBtYWNybyB0byBkZWNsYXJlIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAg
ICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKysjZW5kaWYKKysKKysgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKysgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVy
VHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4oKnRoaXMsIHJvb3QpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8vIFNl
YXJjaCBmb3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQg
dG8gZG8gc29tZSByZXBsYWNlbWVudHMuCisrICAgICAgICBib29sIHVzZUNsaXBEaXN0YW5jZSA9
IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWlu
ZyA6IG1PdXRwdXRWYXJ5aW5ncykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob3V0cHV0
VmFyeWluZy5uYW1lID09ICJnbF9DbGlwRGlzdGFuY2UiKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgdXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZUNsaXBE
aXN0YW5jZSAmJiAhUmVwbGFjZUNsaXBEaXN0YW5jZUFzc2lnbm1lbnRzKAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghdHJhbnNm
b3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIUFwcGVuZFZlcnRleFNoYWRlckRlcHRoQ29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKwor
KyAgICAgICAgaWYgKChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT04pICE9IDAg
JiYKKysgICAgICAgICAgICAhQXBwZW5kUHJlUm90YXRpb24oKnRoaXMsIHJvb3QsIGRyaXZlclVu
aWZvcm1zKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0dFT01FVFJZ
X1NIQURFUikKKysgICAgeworKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxheW91dFF1YWxp
ZmllcnMoCisrICAgICAgICAgICAgc2luaywgZ2V0R2VvbWV0cnlTaGFkZXJJbnB1dFByaW1pdGl2
ZVR5cGUoKSwgZ2V0R2VvbWV0cnlTaGFkZXJJbnZvY2F0aW9ucygpLAorKyAgICAgICAgICAgIGdl
dEdlb21ldHJ5U2hhZGVyT3V0cHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlck1h
eFZlcnRpY2VzKCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgQVNTRVJU
KGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisrICAgICAgICBFbWl0V29y
a0dyb3VwU2l6ZUdMU0woKnRoaXMsIHNpbmspOworKyAgICB9CisrCisrICAgIGlmIChnZXRTaGFk
ZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgeworKyAgICAgICAgYXV0byAmbmVn
RmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKysK
KysgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGlmICghRW11bGF0ZUluc3RhbmNlSUQoKnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBv
c2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QsIG5lZ0ZsaXBZKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIWluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
ICghdmFsaWRhdGVBU1QoJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFSZXdyaXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBH
ZXRNc2xLZXl3b3JkcygpKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrCisrICAgIGlmICghUmVkdWNlSW50ZXJmYWNlQmxvY2tzKCp0aGlzLCByb290KSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdGVD
b21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IHNp
emUgcmVxdWlyZWQgdG8gcGFzcyBhbGwgdGhlIHRlc3RzIGluCisrICAgIC8vIChkRVFQLUdMRVMz
LmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisrICAgIC8vIFRoaXMg
dmFsdWUgY291bGQgaW4gcHJpbmNpcGxlIGJlIHNtYWxsZXIuCisrICAgIGNvbnN0IHNpemVfdCBo
b2lzdFRocmVzaG9sZFNpemUgPSAyNTY7CisrICAgIGlmICghSG9pc3RDb25zdGFudHMoKnRoaXMs
IHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgSW52YXJpYW50cyBpbnZhcmlhbnRzOworKyAgICBp
ZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50cykp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBTeW1ib2xF
bnYgc3ltYm9sRW52KCp0aGlzLCByb290KTsKKysKKysgICAgaWYgKCFBZGRFeHBsaWNpdFR5cGVD
YXN0cygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7Cisr
ICAgIGlmICghUmV3cml0ZVBpcGVsaW5lcygqdGhpcywgcm9vdCwgaWRHZW4sIGRyaXZlclVuaWZv
cm1zLCBzeW1ib2xFbnYsIGludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBw
aXBlbGluZVN0cnVjdHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoKnRoaXMsIHN5bWJvbEVu
diwgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVJld3JpdGVV
bmFkZHJlc3NhYmxlUmVmZXJlbmNlcygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghUmV3cml0ZU91dEFy
Z3MoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBpZiAoIVRvcG9zb3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52
LCByb290LCBwcGMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgaWYgKCFFbWl0TWV0YWwoKnRoaXMsIHJvb3QsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMs
IGludmFyaWFudHMsIHN5bWJvbEVudiwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIEFTU0VSVCh2YWxpZGF0ZUFTVCgmcm9vdCkpOworKworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5z
bGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdu
b3N0aWNzKQorK3sKKysgICAgaWYgKCFyb290KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCku
b2JqOworKworKyAgICBib29sIHByZWNpc2lvbkVtdWxhdGlvbiA9IGZhbHNlOworKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysKKysjaWYgMAorKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGls
ZU9wdGlvbnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworKworKyAg
ICBUT3V0cHV0TVNMIG91dHB1dE1TTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAmZ2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJz
aW9uKCksIGdldE91dHB1dFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lz
aW9uRW11bGF0aW9uLCBlbmFibGVQcmVjaXNpb24sIGNvbXBpbGVPcHRpb25zKTsKKysjZW5kaWYK
KysKKysgICAgaWYgKCF0cmFuc2xhdGVJbXBsKCpyb290LCBjb21waWxlT3B0aW9ucykpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyNpZiAwCisrICAgIC8vIFdy
aXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgorKyAgICByb290LT50cmF2ZXJzZShvdXRwdXRNU0wpOwor
KyNlbmRpZgorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpCisreworKyAgICAv
LyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJhbnNmb3JtYXRpb24uCisrICAgIHJldHVybiBmYWxz
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLmVmY2IzMDYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oCitAQCAtMCwwICsxLDEzMiBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrY2xhc3MgVE91dHB1dE1TTDsKKysKKyt0eXBlZGVmIHN0ZDo6
dW5vcmRlcmVkX21hcDxzaXplX3QsIHN0ZDo6c3RyaW5nPiBvcmlnaW5hbE5hbWVzTWFwOworK3R5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5k
aW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+
IHRleHR1cmVCaW5kaW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBzaXplX3Q+IHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwOworKworK2NsYXNzIFRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb24KKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorKyAgICB+VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisrCisr
ICAgIHZvaWQgYWRkT3JpZ2luYWxOYW1lKGNvbnN0IHNpemVfdCBpZCwgY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpCisrICAgIHsKKysgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0KHtpZCwgbmFt
ZX0pOworKyAgICB9CisrICAgIHZvaWQgYWRkU2FtcGxlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUsIHNpemVfdCBzYW1wbGVyQmluZGluZykKKysgICAgeworKyAgICAgICAgc2FtcGxl
ckJpbmRpbmdzLmluc2VydCh7bmFtZSwgc2FtcGxlckJpbmRpbmd9KTsKKysgICAgfQorKyAgICB2
b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdGV4
dHVyZUJpbmRpbmcpCisrICAgIHsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5pbnNlcnQoe25h
bWUsIHRleHR1cmVCaW5kaW5nfSk7CisrICAgIH0KKysgICAgdm9pZCBhZGRVbmlmb3JtQnVmZmVy
QmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgc2l6ZV90IHVuaWZvcm1CdWZmZXJCaW5k
aW5nKQorKyAgICB7CisrICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1l
LCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworKyAgICB9CisrICAgIHN0ZDo6c3RyaW5nIGdldE9y
aWdpbmFsTmFtZShjb25zdCBzaXplX3QgaWQpIHsgcmV0dXJuIG9yaWdpbmFsTmFtZXMuYXQoaWQp
OyB9CisrICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorKyAgICB0ZXh0dXJlQmluZGluZ01hcCBnZXRUZXh0
dXJlQmluZGluZ3MoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlQmluZGluZ3M7IH0KKysgICAgdW5p
Zm9ybUJ1ZmZlckJpbmRpbmdNYXAgZ2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzOyB9CisrICAgIHNpemVfdCBnZXRTYW1wbGVyQmlu
ZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0
byBpdCA9IHNhbXBsZXJCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHNh
bXBsZXJCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHNpemVf
dCBnZXRUZXh0dXJlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAg
eworKyAgICAgICAgYXV0byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAg
ICAgaWYgKGl0ICE9IHRleHR1cmVCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsK
KysgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAg
ICB9CisrICAgIHNpemVfdCBnZXRVbmlmb3JtQnVmZmVyQmluZGluZyhjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IHVuaWZvcm1CdWZmZXJC
aW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHVuaWZvcm1CdWZmZXJCaW5k
aW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHZvaWQgcmVzZXQoKQor
KyAgICB7CisrICAgICAgICBvcmlnaW5hbE5hbWVzLmNsZWFyKCk7CisrICAgICAgICBzYW1wbGVy
QmluZGluZ3MuY2xlYXIoKTsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5jbGVhcigpOworKyAg
ICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmNsZWFyKCk7CisrICAgIH0KKysKKysgIHByaXZh
dGU6CisrICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKysgICAgc2FtcGxlckJp
bmRpbmdNYXAgc2FtcGxlckJpbmRpbmdzOworKyAgICB0ZXh0dXJlQmluZGluZ01hcCB0ZXh0dXJl
QmluZGluZ3M7CisrICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZmZXJCaW5k
aW5nczsKKyt9OworKworK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBUQ29t
cGlsZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xl
bnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworKwor
KyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpn
ZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKysj
ZW5kaWYKKysKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNj
YXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFu
Y2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysgICAgVHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiAqZ2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHsgcmV0dXJu
ICZ0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOyB9CisrCisrICBwcm90ZWN0ZWQ6CisrICAgIGJv
b2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKysgICAgICAgICAgICAgICAgICAgU2hD
b21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgUGVyZm9y
bWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKysKKysgICAgQU5H
TEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZyb290LCBTaENv
bXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBi
b29sIHNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpIG92ZXJyaWRlOworKwor
KyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKTsK
KysgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9n
aWMoVEludGVybUJsb2NrICZyb290KTsKKysKKysgICAgdm9pZCBjcmVhdGVBZGRpdGlvbmFsR3Jh
cGhpY3NEcml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0
KTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5p
Zm9ybU5lZ0ZsaXBZUmVmKAorKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3Q7CisrCisrICAgIGJvb2wgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworKwor
KyAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
PSB7fTsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjUzNDExODAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKK0BAIC0w
LDAgKzEsOTUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVy
cy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1
aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKytj
bGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgICAgU3ltYm9sRW52
ICZtU3ltYm9sRW52OworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisrICAgIHt9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNh
bGxOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYXJnQ291bnQg
PSBjYWxsTm9kZS5nZXRDaGlsZENvdW50KCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmcmV0VHlw
ZSAgPSBjYWxsTm9kZS5nZXRUeXBlKCk7CisrCisrICAgICAgICBpZiAoY2FsbE5vZGUuaXNDb25z
dHJ1Y3RvcigpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJhc2ljVHlw
ZShyZXRUeXBlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChhcmdDb3Vu
dCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKysgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29lcmNlU2ltcGxlKHJldFR5cGUsIFN1YlZlY3Rv
cihhcmcsIDAsIDEpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT0gMSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZh
cmcgICA9IEdldEFyZyhjYWxsTm9kZSwgMCk7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChh
cmdUeXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3IoYXJnLCAw
LCByZXRUeXBlLmdldE5vbWluYWxTaXplKCkpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50OyArK2kpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnID0gR2V0QXJnKGNhbGxOb2RlLCBpKTsKKysgICAgICAgICAgICAg
ICAgICAgIFNldEFyZyhjYWxsTm9kZSwgaSwgQ29lcmNlU2ltcGxlKHJldFR5cGUuZ2V0QmFzaWNU
eXBlKCksIGFyZykpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKHJldFR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChhcmdDb3VudCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAw
KTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUuaXNNYXRyaXgoKSkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VHlwZS5n
ZXRDb2xzKCkgIT0gYXJnVHlwZS5nZXRDb2xzKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0VHlwZS5nZXRSb3dzKCkgIT0gYXJnVHlwZS5nZXRSb3dzKCkpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUFy
ZyB0ZW1wbGF0ZUFyZ3NbXSA9IHtyZXRUeXBlLmdldENvbHMoKSwgcmV0VHlwZS5nZXRSb3dzKCl9
OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVN5bWJvbEVudi5jYWxsRnVu
Y3Rpb25PdmVybG9hZCgKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUoImNh
c3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJn
cyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAg
ICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisrCisrYm9vbCBzaDo6QWRkRXhwbGljaXRUeXBlQ2FzdHMoVENvbXBpbGVyICZjb21w
aWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyt7CisrICAg
IFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0
VHlwZUNhc3RzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDM0Mjg4
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaAorQEAgLTAsMCArMSwyNCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQURERVhQTElDSVRUWVBFQ0FTVFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQRUNBU1RTX0hfCisrCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEFkZHMgZXhwbGljaXQgdHlw
ZSBjYXN0cyBpbnRvIHRoZSBBU1Qgd2hlcmUgY2FzdGluZyBpcyBkb25lIGltcGxpY2l0bHkuCisr
QU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3ltYm9sRW52ICZzeW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi40YmE0ZWM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAK
K0BAIC0wLDAgKzEsNDc0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+
CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCisreworKyAgICBBU1NFUlQo
ZGVjbE5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICBUSW50ZXJtTm9kZSAqY2hpbGRO
b2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworKyAgICBBU1NFUlQoY2hpbGROb2RlKTsK
KysgICAgVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZTsKKysgICAgaWYgKChzeW1ib2xOb2RlID0g
Y2hpbGROb2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7
KnN5bWJvbE5vZGUsIG51bGxwdHJ9OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgVEludGVybUJpbmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgp
OworKyAgICAgICAgQVNTRVJUKGluaXROb2RlKTsKKysgICAgICAgIEFTU0VSVChpbml0Tm9kZS0+
Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOworKyAgICAgICAgc3ltYm9sTm9k
ZSA9IGluaXROb2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworKyAgICAgICAgQVNT
RVJUKHN5bWJvbE5vZGUpOworKyAgICAgICAgcmV0dXJuIHsqc3ltYm9sTm9kZSwgaW5pdE5vZGUt
PmdldFJpZ2h0KCl9OworKyAgICB9CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0
ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZz
dHJ1Y3R1cmUpCisreworKyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRy
dWUpOworKyAgICBhdXRvICp2YXIgID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0
YWJsZVN0cmluZygiIiksIHR5cGUsIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysgICAgcmV0dXJuICp2
YXI7CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUo
VFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJm5hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMpCisreworKyAgICBhdXRvICp0
eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIGZhbHNlKTsKKysgICAgdHlwZS0+c2V0UXVhbGlm
aWVyKHF1YWxpZmllcik7CisrICAgIGlmIChhcnJheVNpemVzKQorKyAgICB7CisrICAgICAgICB0
eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKysgICAgfQorKyAgICBhdXRvICp2YXIgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksIHR5cGUsIG5hbWUuc3lt
Ym9sVHlwZSgpKTsKKysgICAgcmV0dXJuICp2YXI7CisrfQorKworK3N0YXRpYyB2b2lkIEFjcXVp
cmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQor
K3sKKysgICAgaWYgKHNyYy5pc0RlZmluZWQoKSkKKysgICAgeworKyAgICAgICAgZGVzdC5zZXRE
ZWZpbmVkKCk7CisrICAgIH0KKysKKysgICAgaWYgKHNyYy5oYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpKQorKyAgICB7CisrICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7
CisrICAgIH0KKyt9CisrCisrVEludGVybVNlcXVlbmNlICZzaDo6Q2xvbmVTZXF1ZW5jZUFuZFBy
ZXBlbmQoY29uc3QgVEludGVybVNlcXVlbmNlICZzZXEsIFRJbnRlcm1Ob2RlICZub2RlKQorK3sK
KysgICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworKyAgICBuZXdTZXEt
PnB1c2hfYmFjaygmbm9kZSk7CisrCisrICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBz
ZXEpCisrICAgIHsKKysgICAgICAgIG5ld1NlcS0+cHVzaF9iYWNrKG9sZE5vZGUpOworKyAgICB9
CisrCisrICAgIHJldHVybiAqbmV3U2VxOworK30KKysKKyt2b2lkIHNoOjpBZGRQYXJhbWV0ZXJz
RnJvbShURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQorK3sKKysgICAgY29u
c3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBzcmMuZ2V0UGFyYW1Db3VudCgpOworKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICp2YXIgPSBzcmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBkZXN0LmFkZFBhcmFt
ZXRlcih2YXIpOworKyAgICB9CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVu
Y3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYykKKyt7CisrICAgIEFTU0VSVChvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrCisrICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSk7CisrCisrICAgIGF1
dG8gJm5ld0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFt
ZSgpLCBuZXdOYW1lLnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZl
U2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBv
bGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7CisrCisr
ICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1
bmN0aW9uQW5kUHJlcGVuZFBhcmFtKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJm5ld1BhcmFtKQorK3sKKysgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkIHx8Cisr
ICAgICAgICAgICBvbGRGdW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKysKKysgICAgTmFtZSBuZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFt
ZShOYW1lKG9sZEZ1bmMpKSA6IE5hbWUob2xkRnVuYyk7CisrCisrICAgIGF1dG8gJm5ld0Z1bmMg
PSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1l
LnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRG
dW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMo
KSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKysg
ICAgbmV3RnVuYy5hZGRQYXJhbWV0ZXIoJm5ld1BhcmFtKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zy
b20obmV3RnVuYywgb2xkRnVuYyk7CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytj
b25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtcykKKyt7CisrICAgIEFTU0VSVChvbGRG
dW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorKyAgICAgICAg
ICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
CisrICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShv
bGRGdW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworKworKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRS
ZXR1cm5UeXBlKCksIG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworKwor
KyAgICBBY3F1aXJlRnVuY3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisrICAgIEFkZFBh
cmFtZXRlcnNGcm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworKyAgICBmb3IgKGF1dG8gKnBhcmFtIDog
bmV3UGFyYW1zKQorKyAgICB7CisrICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIG5ld0Z1bmM7CisrfQorKworK2NvbnN0IFRGdW5jdGlv
biAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
dWN0dXJlICZuZXdSZXR1cm4pCisreworKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkg
PT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworKworKyAgICBOYW1lIG5ld05hbWUgPSBpZEdl
biA/IGlkR2VuLT5jcmVhdGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsK
KysKKysgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgmbmV3UmV0dXJuLCB0cnVl
KTsKKysgICAgYXV0byAmbmV3RnVuYyAgICAgICA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJs
ZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmV0dXJuVHlwZSwgb2xkRnVuYy5pc0tub3duVG9O
b3RIYXZlU2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdG
dW5jLCBvbGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7
CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytUSW50ZXJtVHlwZWQgJnNoOjpHZXRB
cmcoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4KQorK3sKKysgICAg
QVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworKyAgICBhdXRvICphcmcgPSBj
YWxsLmdldENoaWxkTm9kZShpbmRleCk7CisrICAgIEFTU0VSVChhcmcpOworKyAgICBhdXRvICp0
YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisrICAgIEFTU0VSVCh0YXJnKTsKKysgICAgcmV0dXJu
ICp0YXJnOworK30KKysKKyt2b2lkIHNoOjpTZXRBcmcoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwg
c2l6ZV90IGluZGV4LCBUSW50ZXJtVHlwZWQgJmFyZykKKyt7CisrICAgIEFTU0VSVChpbmRleCA8
IGNhbGwuZ2V0Q2hpbGRDb3VudCgpKTsKKysgICAgKCpjYWxsLmdldFNlcXVlbmNlKCkpW2luZGV4
XSA9ICZhcmc7CisrfQorKworK2ludCBzaDo6R2V0RmllbGRJbmRleChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAg
Y29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gc3RydWN0dXJlLmZpZWxkcygpOworKworKyAg
ICBpbnQgaSA9IDA7CisrICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKysgICAg
eworKyAgICAgICAgaWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBpOworKyAgICAgICAgfQorKyAgICAgICAgKytpOworKyAgICB9
CisrCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0Zp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVy
bVN5bWJvbCgmc3RydWN0SW5zdGFuY2VWYXIpLCBmaWVsZE5hbWUpOworK30KKysKKytUSW50ZXJt
QmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0
YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0
dXJlID0gb2JqZWN0LmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKysgICAgQVNTRVJUKHN0cnVjdHVy
ZSk7CisrCisrICAgIGNvbnN0IGludCBpbmRleCA9IEdldEZpZWxkSW5kZXgoKnN0cnVjdHVyZSwg
ZmllbGROYW1lKTsKKysgICAgQVNTRVJUKGluZGV4ID49IDApOworKyAgICByZXR1cm4gQWNjZXNz
RmllbGRCeUluZGV4KG9iamVjdCwgaW5kZXgpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6
QWNjZXNzRmllbGRCeUluZGV4KFRJbnRlcm1UeXBlZCAmb2JqZWN0LCBpbnQgaW5kZXgpCisrewor
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlw
ZSA9IG9iamVjdC5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCghdHlwZS5pc0FycmF5KCkpOworKyAg
ICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICBB
U1NFUlQoc3RydWN0dXJlKTsKKysgICAgQVNTRVJUKDAgPD0gaW5kZXgpOworKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNpemUoKSk7
CisrI2VuZGlmCisrCisrICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisrICAgICAgICBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0LCAmb2JqZWN0LAorKyAgICAgICAgbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0SW50KSkpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNz
SW5kZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpCisreworKyNpZiBk
ZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGlu
ZGV4YWJsZU5vZGUuZ2V0VHlwZSgpOworKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisrI2VuZGlmCisrCisrICAgIGF1dG8g
KmFjY2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAgIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3QsICZpbmRleGFibGVOb2RlLAorKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFu
dFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6
RWJ0SW50KSkpOworKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7CisrfQorKworK1RJbnRlcm1UeXBl
ZCAmc2g6OkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkK
Kyt7CisrICAgIGlmIChpbmRleCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIEFjY2Vzc0luZGV4
KG5vZGUsICppbmRleCk7CisrICAgIH0KKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1RJbnRl
cm1UeXBlZCAmc2g6OlN1YlZlY3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdp
biwgaW50IGVuZCkKKyt7CisrICAgIEFTU0VSVCh2ZWN0b3JOb2RlLmdldFR5cGUoKS5pc1ZlY3Rv
cigpKTsKKysgICAgQVNTRVJUKDAgPD0gYmVnaW4pOworKyAgICBBU1NFUlQoZW5kIDw9IDQpOwor
KyAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKysgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09
IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB2ZWN0b3JOb2RlOworKyAgICB9CisrICAgIFRWZWN0b3I8aW50PiBvZmZzZXRzKHN0
YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gYmVnaW4pKTsKKysgICAgc3RkOjppb3RhKG9mZnNldHMu
YmVnaW4oKSwgb2Zmc2V0cy5lbmQoKSwgYmVnaW4pOworKyAgICBhdXRvICpzd2l6emxlID0gbmV3
IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBvZmZzZXRzKTsKKysgICAgcmV0dXJuICpzd2l6
emxlOworK30KKysKKytib29sIHNoOjpJc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKKyt7CisrICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsK
Kyt9CisrCisrYm9vbCBzaDo6SXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUpCisr
eworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrICAgIHJldHVybiBIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSk7CisrfQor
KworK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpCisreworKyAg
ICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQ6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKysgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50Ogor
KyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKQorK3sKKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlLmdldEJhc2ljVHlw
ZSgpKTsKKyt9CisrCisrc3RhdGljIHZvaWQgSW5pdFR5cGUoVFR5cGUgJnR5cGUpCisreworKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAgIHsKKysgICAgICAgIGF1dG8gc2l6ZXMgPSB0eXBl
LmdldEFycmF5U2l6ZXMoKTsKKysgICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisrICAg
ICAgICB0eXBlLm1ha2VBcnJheXMoc2l6ZXMpOworKyAgICB9CisrfQorKworK1RUeXBlICZzaDo6
Q2xvbmVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgYXV0byAmY2xvbmUgPSAqbmV3
IFRUeXBlKHR5cGUpOworKyAgICBJbml0VHlwZShjbG9uZSk7CisrICAgIHJldHVybiBjbG9uZTsK
Kyt9CisrCisrVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sK
KysgICAgYXV0byAmaW5uZXIgPSAqbmV3IFRUeXBlKHR5cGUpOworKyAgICBpbm5lci50b0FycmF5
QmFzZVR5cGUoKTsKKysgICAgSW5pdFR5cGUoaW5uZXIpOworKyAgICByZXR1cm4gaW5uZXI7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpCisr
eworKyAgICBBU1NFUlQobWF0cml4VHlwZS5pc01hdHJpeCgpKTsKKysgICAgQVNTRVJUKEhhc1Nj
YWxhckJhc2ljVHlwZShtYXRyaXhUeXBlKSk7CisrICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1l
ID0gbnVsbHB0cjsKKysKKysgICAgYXV0byAmdmVjdG9yVHlwZSA9CisrICAgICAgICAqbmV3IFRU
eXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9uKCks
IG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAgICAgICAgIG1hdHJpeFR5
cGUuZ2V0Um93cygpLCAxLCBtYXRyaXhUeXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUp
OworKyAgICBJbml0VHlwZSh2ZWN0b3JUeXBlKTsKKysgICAgcmV0dXJuIHZlY3RvclR5cGU7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5
cGUpCisreworKyAgICBBU1NFUlQoYXJyYXlUeXBlLmlzQXJyYXkoKSk7CisrICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKysgICAgY29uc3QgYXV0byAmYXJyYXlTaXplcyAg
PSBhcnJheVR5cGUuZ2V0QXJyYXlTaXplcygpOworKworKyAgICBhdXRvICZpbm5lclR5cGUgPQor
KyAgICAgICAgKm5ldyBUVHlwZShhcnJheVR5cGUuZ2V0QmFzaWNUeXBlKCksIGFycmF5VHlwZS5n
ZXRQcmVjaXNpb24oKSwgYXJyYXlUeXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAg
ICAgICBhcnJheVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgYXJyYXlUeXBlLmdldFNlY29uZGFyeVNp
emUoKSwKKysgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6
ZXMuc2l6ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUoaW5uZXJUeXBlKTsK
KysgICAgcmV0dXJuIGlubmVyVHlwZTsKKyt9CisrCisrc3RhdGljIFRUeXBlICZTZXRUeXBlRGlt
c0ltcGwoY29uc3QgVFR5cGUgJnR5cGUsIGludCBwcmltYXJ5LCBpbnQgc2Vjb25kYXJ5KQorK3sK
KysgICAgQVNTRVJUKDEgPCBwcmltYXJ5ICYmIHByaW1hcnkgPD0gNCk7CisrICAgIEFTU0VSVCgx
IDw9IHNlY29uZGFyeSAmJiBzZWNvbmRhcnkgPD0gNCk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUodHlwZSkpOworKyAgICBjb25zdCBjaGFyICptYW5nbGVkTmFtZSA9IG51bGxwdHI7
CisrCisrICAgIGF1dG8gJm5ld1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCks
IHR5cGUuZ2V0UHJlY2lzaW9uKCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW1hcnksIHNlY29uZGFyeSwgdHlwZS5nZXRBcnJheVNpemVz
KCksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUobmV3VHlwZSk7CisrICAgIHJldHVybiBu
ZXdUeXBlOworK30KKysKKytUVHlwZSAmc2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlw
ZSwgaW50IG5ld0RpbSkKKyt7CisrICAgIEFTU0VSVCh0eXBlLmlzUmFuazAoKSB8fCB0eXBlLmlz
VmVjdG9yKCkpOworKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7
CisrfQorKworK1RUeXBlICZzaDo6U2V0TWF0cml4Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhU
eXBlLCBpbnQgbmV3RGltKQorK3sKKysgICAgQVNTRVJUKG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7
CisrICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0RpbSA8PSA0KTsKKysgICAgcmV0dXJuIFNl
dFR5cGVEaW1zSW1wbChtYXRyaXhUeXBlLCBtYXRyaXhUeXBlLmdldENvbHMoKSwgbmV3RGltKTsK
Kyt9CisrCisrYm9vbCBzaDo6SGFzTWF0cml4RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlKQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxk
cygpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFsc2U7Cisr
fQorKworK2Jvb2wgc2g6Okhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygp
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOwor
KyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
CisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50
ZXJtVHlwZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJv
bU5vZGUuZ2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlw
ZSkpOworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFT
U0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysKKysgICAgaWYgKHRvVHlwZSAhPSBmcm9tVHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdncmVn
YXRlOjpDcmVhdGVDb25zdHJ1Y3RvcigKKysgICAgICAgICAgICAqbmV3IFRUeXBlKHRvVHlwZSwg
ZnJvbVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgZnJvbVR5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpKSwK
KysgICAgICAgICAgICBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAgICB9Cisr
ICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2lt
cGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpCisreworKyAg
ICBjb25zdCBUVHlwZSAmZnJvbVR5cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisrCisrICAgIEFT
U0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUoZnJvbVR5cGUpKTsKKysgICAgQVNTRVJUKHRvVHlwZS5nZXROb21pbmFsU2l6ZSgp
ID09IGZyb21UeXBlLmdldE5vbWluYWxTaXplKCkpOworKyAgICBBU1NFUlQodG9UeXBlLmdldFNl
Y29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRTZWNvbmRhcnlTaXplKCkpOworKyAgICBBU1NF
UlQoIXRvVHlwZS5pc0FycmF5KCkpOworKyAgICBBU1NFUlQoIWZyb21UeXBlLmlzQXJyYXkoKSk7
CisrCisrICAgIGlmICh0b1R5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gZnJvbVR5cGUuZ2V0QmFzaWNU
eXBlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
Q29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAg
ICB9CisrICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6QXNU
eXBlKFN5bWJvbEVudiAmc3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUu
Z2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlwZSkpOwor
KyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFTU0VSVCgh
dG9UeXBlLmlzQXJyYXkoKSk7CisrICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysK
KysgICAgaWYgKHRvVHlwZSA9PSBmcm9tVHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZy
b21Ob2RlOworKyAgICB9CisrICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKysgICAgcmV0
dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJhc190eXBlIiwgU3ltYm9s
VHlwZTo6QnVpbHRJbiksIHRvVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbU5vZGV9LCAxLCAmdGFyZyk7Cisr
fQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Bc3RIZWxwZXJzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZDllODlmZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaAorQEAgLTAsMCArMSwxNTcgQEAKKysv
LworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4K
KysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TeW1ib2xFbnYuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQSBjb252
ZW5pZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KKytz
dHJ1Y3QgRGVjbGFyYXRpb24KKyt7CisrICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKysgICAg
VEludGVybVR5cGVkICppbml0RXhwcjsgIC8vIE5vbi1udWxsIGlmZiBkZWNsYXJhdGlvbiBpcyBp
bml0aWFsaXplZC4KKyt9OworKworKy8vIFJldHVybnMgYSBgRGVjbGFyYXRpb25gIHZpZXcgb2Yg
dGhlIGdpdmVuIG5vZGUuCisrRGVjbGFyYXRpb24gVmlld0RlY2xhcmF0aW9uKFRJbnRlcm1EZWNs
YXJhdGlvbiAmZGVjbE5vZGUpOworKworKy8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1
Y3QgdHlwZS4KKytjb25zdCBUVmFyaWFibGUgJkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOworKwor
Ky8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1Y3QgaW5zdGFuY2UuCisrY29uc3QgVFZh
cmlhYmxlICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBUUXVhbGlmaWVyOjpFdnFUZW1wb3JhcnksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVu
c2lnbmVkIGludD4gKmFycmF5U2l6ZXMgPSBudWxscHRyKTsKKysKKysvLyBUaGUgaW5wdXQgc2Vx
dWVuY2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCBmcm9tIEFTVCBhZnRlciB0aGlzIGlzIGNhbGxlZC4K
KytUSW50ZXJtU2VxdWVuY2UgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9kZSk7CisrCisrLy8gQXBwZW5kcyBwYXJhbWV0
ZXJzIGZyb20gYHNyY2AgZnVuY3Rpb24gdG8gYGRlc3RgIGZ1bmN0aW9uLgorK3ZvaWQgQWRkUGFy
YW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisrCisr
Ly8gQ2xvbmVzIGEgZnVuY3Rpb24uCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2VuICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZv
bGRGdW5jKTsKKysKKysvLyBDbG9uZXMgYSBmdW5jdGlvbiBhbmQgcHJlcGVuZHMgdGhlIHByb3Zp
ZGVkIGV4dHIgcGFyYW1ldGVyLgorKy8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFs
IGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rp
b24gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4g
KmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBwYXJhbWV0ZXJzLgor
Ky8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlz
Y2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rpb25BbmRB
cHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1
bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGl0cyByZXR1cm4gdHlwZS4KKysvLyBJZiBgaWRHZW5g
IGlzIG51bGwsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBtdXN0IGJlIGRpc2NhcmRlZCBmcm9tIHRo
ZSBBU1QuCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJuVHlw
ZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5j
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKysKKysvLyBHZXRzIHRoZSBhcmd1bWVudCBvZiBh
IGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGdpdmVuIGluZGV4LgorK1RJbnRlcm1UeXBlZCAmR2V0QXJn
KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisrCisrLy8gU2V0
cyB0aGUgYXJndW1lbnQgb2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KKyt2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKysKKysvLyBSZXR1cm5zIHRoZSBmaWVsZCBpbmRleCB3aXRoaW4gdGhlIGdp
dmVuIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuCisrLy8gUmV0dXJucyAtMSBpZiB0
aGUgc3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorK2ludCBHZXRGaWVs
ZEluZGV4KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgSW1tdXRhYmxlU3RyaW5n
ICZmaWVsZE5hbWUpOworKworKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJp
YWJsZSB3aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSB2YXJpYWJsZSBtdXN0IGJl
IGEgc3RydWN0IGluc3RhbmNlLgorK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkKGNvbnN0IFRW
YXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGRO
YW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSBub2RlIG11c3QgYmUgYSBzdHJ1Y3QgaW5zdGFu
Y2UuCisrVEludGVybUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNv
bnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxk
IGZvciB0aGUgZ2l2ZW4gbm9kZSBieSBpdHMgZmllbGQgaW5kZXguCisrLy8gVGhlIG5vZGUgbXVz
dCBiZSBhIHN0cnVjdCBpbnN0YW5jZS4KKytUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZEJ5SW5k
ZXgoVEludGVybVR5cGVkICZvYmplY3QsIGludCBpbmRleCk7CisrCisrLy8gQWNjZXNzZXMgYW4g
ZWxlbWVudCBieSBpbmRleCBmb3IgdGhlIGdpdmVuIG5vZGUuCisrLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXguCisrVEludGVybUJpbmFyeSAmQWNjZXNzSW5k
ZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpOworKworKy8vIEFjY2Vz
c2VzIGFuIGVsZW1lbnQgYnkgaW5kZXggZm9yIHRoZSBnaXZlbiBub2RlIGlmIGBpbmRleGAgaXMg
bm9uLW51bGwuCisrLy8gUmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBpZiBgaW5kZXhgIGlzIG51
bGwuCisrLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYg
YGluZGV4YCBpcyBub24tbnVsbC4KKytUSW50ZXJtVHlwZWQgJkFjY2Vzc0luZGV4KFRJbnRlcm1U
eXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCk7CisrCisrLy8gUmV0dXJucyBhIHN1YnZlY3Rv
ciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2UgcmFuZ2UuCisrLy8gVGhpcyByZXR1cm5zIHRoZSBv
cmlnaW5hbCBub2RlIGlmIHRoZSBzbGljZSBpcyBhbiBpZGVudGl0eSBmb3IgdGhlIG5vZGUuCisr
VEludGVybVR5cGVkICZTdWJWZWN0b3IoVEludGVybVR5cGVkICZ2ZWN0b3JOb2RlLCBpbnQgYmVn
aW4sIGludCBlbmQpOworKworKy8vIE1hdGNoZXMgc2NhbGFyIGJvb2wsIGludCwgdWludCwgZmxv
YXQsIGRvdWJsZS4KKytib29sIElzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsK
KysKKysvLyBNYXRjaGVzIHZlY3RvciBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisr
Ym9vbCBJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gTWF0Y2hl
cyBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisrLy8gVHlwZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIGEgc2NhbGFyLgorK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKyti
b29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworKworKy8vIENsb25lcyBh
IHR5cGUuCisrVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gQ2xv
bmVzIGEgdHlwZSBhbmQgZHJvcHMgYWxsIGFycmF5IGRpbWVuc2lvbnMuCisrVFR5cGUgJklubmVy
bW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworKworKy8vIENyZWF0ZXMgYSB2ZWN0b3IgdHlw
ZSBieSBkcm9wcGluZyB0aGUgY29sdW1ucyBvZmYgb2YgYSBtYXRyaXggdHlwZS4KKytUVHlwZSAm
RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworKworKy8vIENyZWF0ZXMgYSB0
eXBlIGJ5IGRyb3BwaW5nIHRoZSBvdXRlciBkaW1lbnNpb24gb2ZmIG9mIGFuIGFycmF5IHR5cGUu
CisrVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKysK
KysvLyBDcmVhdGVzIGEgc2NhbGFyIG9yIHZlY3RvciB0eXBlIGJ5IGNoYW5naW5nIHRoZSBkaW1l
bnNpb25zIG9mIGEgdmVjdG9yIHR5cGUuCisrVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisrCisrLy8gQ3JlYXRlcyBhIG1hdHJpeCB0eXBlIGJ5IGNo
YW5naW5nIHRoZSByb3cgZGltZW5zaW9ucyBvZiBhIG1hdHJpeCB0eXBlLgorK1RUeXBlICZTZXRN
YXRyaXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworKworKy8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBhIGZpZWxk
IHdpdGggbWF0cml4IHR5cGUuCisrYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUpOworKworKy8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJl
Y3RseSBjb250YWlucyBhIGZpZWxkIHdpdGggYXJyYXkgdHlwZS4KKytib29sIEhhc0FycmF5Rmll
bGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKysKKysvLyBDb2VyY2VzIGBmcm9tTm9k
ZWAgdG8gYHRvVHlwZWAgYnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlmIHRoZWly
IHR5cGVzIGRpZmZlci4KKysvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRh
aW5lZC4KKysvLyBBcnJheSB0eXBlcyBhcmUgbm90IGFsbG93ZWQuCisrVEludGVybVR5cGVkICZD
b2VyY2VTaW1wbGUoVEJhc2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOwor
KworKy8vIENvZXJjZXMgYGZyb21Ob2RlYCB0byBgdG9UeXBlYCBieSBhIGNvbnN0cnVjdG9yIGNh
bGwgb2YgYHRvVHlwZWAgaWYgdGhlaXIgdHlwZXMgZGlmZmVyLgorKy8vIFZlY3RvciBhbmQgbWF0
cml4IGRpbWVuc2lvbnMgbXVzdCBjb2luY2lkZSBiZXR3ZWVuIHRvIGFuZCBmcm9tLgorKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KKytUSW50ZXJtVHlwZWQgJkNvZXJjZVNpbXBsZShj
b25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKysKKytUSW50ZXJt
VHlwZWQgJkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQ
RVJTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Db25zdGFudE5hbWVzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5mZGRkODY1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCitAQCAtMCww
ICsxLDI2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFt
ZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMK
Kyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0VuYWJsZWQoIkFOR0xFX0NvdmVy
YWdlTWFza0VuYWJsZWQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKytjb25zdGV4cHIg
TmFtZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKCJBTkdMRV9SYXN0ZXJpemF0aW9uRGlz
Y2FyZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKyt9ICAvLyBuYW1lc3BhY2UgY29uc3RhbnRfbmFt
ZXMKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNUQU5UX05BTUVTX0hfCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaAor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4NWU5YTYKKy0tLSAvZGV2L251
bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Zy5oCitAQCAtMCwwICsxLDE2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisrCisrI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNl
KQorKworKyNkZWZpbmUgTE9HSUNfRVJST1IoKSBBU1NFUlQoZmFsc2UpCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Z1NpbmsuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg3MmFk
ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaAorQEAgLTAsMCArMSwxNTkgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaW5jbHVkZSA8aW9zdHJlYW0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW5mb1NpbmsuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY2xhc3MgU3RyaW5n
T2JzZXJ2ZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6
c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRsZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgp
KTsgfQorKworKyAgICBib29sIG9ic2VydmUoY2hhciBjKQorKyAgICB7CisrICAgICAgICBpZiAo
bmVlZGxlW2N1cnJQb3NdID09IGMpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytjdXJyUG9z
OworKyAgICAgICAgICAgIGlmIChjdXJyUG9zID09IG5lZWRsZS5zaXplKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXNldCgpOworKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0TmVlZGxlKCkgY29u
c3QgeyByZXR1cm4gbmVlZGxlOyB9CisrCisrICAgIHZvaWQgcmVzZXQoKSB7IGN1cnJQb3MgPSAw
OyB9CisrCisrICBwcml2YXRlOgorKyAgICBzdGQ6OnN0cmluZyBuZWVkbGU7CisrICAgIHNpemVf
dCBjdXJyUG9zID0gMDsKKyt9OworKworK2NsYXNzIERlYnVnU2luayA6IGFuZ2xlOjpOb25Db3B5
YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgZnJpZW5kIGNsYXNzIEVzY2FwZWRTaW5rOworKyAg
ICBjbGFzcyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorKyAgICB7CisrICAgICAg
ICBmcmllbmQgY2xhc3MgRGVidWdTaW5rOworKworKyAgICAgIHByaXZhdGU6CisrICAgICAgICBF
c2NhcGVkU2luayhEZWJ1Z1NpbmsgJm93bmVyKSA6IG1Pd25lcihvd25lciksIG1CZWdpbihvd25l
ci5zaXplKCkpIHt9CisrCisrICAgICAgcHVibGljOgorKyAgICAgICAgRXNjYXBlZFNpbmsoRXNj
YXBlZFNpbmsgJiZvdGhlcikgOiBtT3duZXIob3RoZXIubU93bmVyKSwgbUJlZ2luKG90aGVyLm1C
ZWdpbikge30KKysKKysgICAgICAgIH5Fc2NhcGVkU2luaygpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgY29uc3QgY2hhciAqcCA9IG1Pd25lci5jX3N0cigpOworKyAgICAgICAgICAgIGNvbnN0
IGludCBlbmQgPSBtT3duZXIuc2l6ZSgpOworKyAgICAgICAgICAgIG1Pd25lci5vbldyaXRlKHAg
KyBtQmVnaW4sIHAgKyBlbmQpOworKyAgICAgICAgfQorKworKyAgICAgICAgVEluZm9TaW5rQmFz
ZSAmZ2V0KCkgeyByZXR1cm4gbU93bmVyLm1QYXJlbnQ7IH0KKysKKysgICAgICAgIG9wZXJhdG9y
IFRJbmZvU2lua0Jhc2UgJigpIHsgcmV0dXJuIGdldCgpOyB9CisrCisrICAgICAgcHJpdmF0ZToK
KysgICAgICAgIERlYnVnU2luayAmbU93bmVyOworKyAgICAgICAgY29uc3QgaW50IG1CZWdpbjsK
KysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgRGVidWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBh
cmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisrICAgICAgICA6IG1QYXJlbnQocGFyZW50KSwg
bUFsc29Mb2dUb1N0ZG91dChhbHNvTG9nVG9TdGRvdXQpCisrICAgIHt9CisrCisrICAgIHZvaWQg
d2F0Y2goc3RkOjpzdHJpbmcgY29uc3QgJm5lZWRsZSkKKysgICAgeworKyAgICAgICAgaWYgKCFu
ZWVkbGUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT2JzZXJ2ZXJzLmVtcGxh
Y2VfYmFjayhuZWVkbGUpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHZvaWQgZXJhc2Uo
KQorKyAgICB7CisrICAgICAgICBtUGFyZW50LmVyYXNlKCk7CisrICAgICAgICBmb3IgKFN0cmlu
Z09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgb2JzZXJ2ZXIucmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpbnQgc2l6
ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisrCisrICAgIGNvbnN0IFRQZXJzaXN0U3Ry
aW5nICZzdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LnN0cigpOyB9CisrCisrICAgIGNvbnN0
IGNoYXIgKmNfc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5jX3N0cigpOyB9CisrCisrICAg
IEVzY2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorKwor
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNv
bnN0IFQgJnZhbHVlKQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBtUGFy
ZW50LnNpemUoKTsKKysgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisrICAgICAgICBjb25zdCBz
aXplX3QgZW5kID0gbVBhcmVudC5zaXplKCk7CisrCisrICAgICAgICBjb25zdCBjaGFyICpwID0g
bVBhcmVudC5jX3N0cigpOworKyAgICAgICAgb25Xcml0ZShwICsgYmVnaW4sIHAgKyBlbmQpOwor
KworKyAgICAgICAgcmV0dXJuICp0aGlzOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2
b2lkIG9uV3JpdGUoY29uc3QgY2hhciAqYmVnaW4sIGNoYXIgY29uc3QgKmVuZCkKKysgICAgewor
KyAgICAgICAgY29uc3QgY2hhciAqcCA9IGJlZ2luOworKyAgICAgICAgd2hpbGUgKHAgIT0gZW5k
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICpwOworKyAgICAgICAgICAg
IH0KKysKKysgICAgICAgICAgICBmb3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNl
cnZlcnMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIub2Jz
ZXJ2ZSgqcCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmICht
QWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6Y291dC5mbHVzaCgpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5lZWRsZSA9IG9ic2VydmVyLmdl
dE5lZWRsZSgpOworKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpbmVlZGxlOworKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVha3BvaW50IGhlcmUK
KysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICArK3A7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUFsc29Mb2dUb1N0ZG91dCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKysgICAgICAgIH0KKysgICAgfQor
KworKyAgcHJpdmF0ZToKKysgICAgVEluZm9TaW5rQmFzZSAmbVBhcmVudDsKKysgICAgc3RkOjp2
ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisrICAgIGJvb2wgbUFsc29Mb2dUb1N0
ZG91dDsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNDJkZjQzMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rp
b25zLmNwcAorQEAgLTAsMCArMSwxMzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisrCisrdXNpbmcgbmFtZXNw
YWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisrewor
KworK2NsYXNzIERpc2NvdmVyZXIgOiBwdWJsaWMgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlcgorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChj
b25zdCBUVmFyaWFibGUgJik+ICZtVmFyczsKKysgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRp
b24gJm1GdW5jVG9EZWY7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24g
Kj4gbU5vbkRlcEZ1bmN0aW9uczsKKysKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRf
c2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtRGVwRnVuY3Rpb25zOworKworKyAgcHVibGljOgorKyAg
ICBEaXNjb3ZlcmVyKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUgJik+
ICZ2YXJzLAorKyAgICAgICAgICAgICAgIGNvbnN0IEZ1bmN0aW9uVG9EZWZpbml0aW9uICZmdW5j
VG9EZWYpCisrICAgICAgICA6IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1
ZSwgZmFsc2UsIHRydWUpLCBtVmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisrICAg
IHt9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKCFtVmFycyh2YXIpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqb3duZXIgPSBkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKHN5bWJvbE5vZGUpOworKyAgICAg
ICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsK
KysgICAgfQorKworKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAo
dmlzaXQgIT0gVmlzaXQ6OlByZVZpc2l0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFhZ2dyZWdhdGVOb2RlLT5pc0Nv
bnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpm
dW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgICAgICAgICBpZiAo
bU5vbkRlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1Ob25EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAg
ICB9CisrCisrICAgICAgICAgICAgaWYgKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVw
RnVuY3Rpb25zLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBp
dCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ID09IG1G
dW5jVG9EZWYuZW5kKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorKyAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGFzc3VtZXMgKGRpcmVjdCBhbmQgbXV0dWFsKSByZWN1cnNpb24gaXMgcHJvaGliaXRlZC4KKysg
ICAgICAgICAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUgPSAq
aXQtPnNlY29uZDsKKysgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7
CisrICAgICAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5v
bkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKTsK
KysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9
IGRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oYWdncmVnYXRlTm9kZSk7CisrICAgICAgICAgICAg
QVNTRVJUKG93bmVyKTsKKysgICAgICAgICAgICBtRGVwRnVuY3Rpb25zLmluc2VydChvd25lcik7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpmdW5jRGVmTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrCisrICAgICAg
ICBpZiAodmlzaXQgIT0gVmlzaXQ6OlBvc3RWaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0g
bU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU5vbkRl
cEZ1bmN0aW9ucy5pbnNlcnQoZnVuYyk7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlCisrCisrc3RkOjp1bm9yZGVy
ZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBzaDo6RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMo
CisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCisreworKyAgICBjb25zdCBGdW5jdGlvblRvRGVm
aW5pdGlvbiBmdW5jVG9EZWYgPSBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKHJvb3QpOworKyAg
ICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKysgICAgcm9vdC50cmF2
ZXJzZSgmZGlzY292ZXJlcik7CisrICAgIHJldHVybiBzdGQ6Om1vdmUoZGlzY292ZXJlci5tRGVw
RnVuY3Rpb25zKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRG
dW5jdGlvbnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVkMWJmMjcK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCitAQCAtMCwwICsxLDI1IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRG
VU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorK0FOR0xF
X05PX0RJU0NBUkQgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBEaXNjb3Zl
ckRlcGVuZGVudEZ1bmN0aW9ucygKKysgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisrCisrfSAg
Ly8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2Vy
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIyZDM5MGUKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcAorQEAgLTAsMCArMSwz
MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
b3N0VmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKysg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKHByZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5
bWJvbFRhYmxlKQorK3t9CisrCisrY29uc3QgVEZ1bmN0aW9uICpEaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKFRJbnRlcm1Ob2RlICpu
b2RlKQorK3sKKysgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysKKysgICAgdW5zaWduZWQgaGVpZ2h0ID0gMDsKKysgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICph
bmNlc3RvciA9IGdldEFuY2VzdG9yTm9kZShoZWlnaHQpKQorKyAgICB7CisrICAgICAgICBpZiAo
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBhbmNlc3Rvci0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICB9CisrICAgICAgICArK2hlaWdodDsK
KysgICAgfQorKworKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb25UcmF2ZXJzZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mOWNiMmFhCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJF
bmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCitAQCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ky8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisrI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNU
SU9OVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgVElu
dGVybVRyYXZlcnNlciB0aGF0IHN1cHBvcnRzIGRpc2NvdmVyeSBvZiB0aGUgZnVuY3Rpb24gYSBu
b2RlIGJlbG9uZ3MgdG8uCisrY2xhc3MgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBEaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSBudWxs
cHRyKTsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgZnVuY3Rpb24gYSBub2RlIGJlbG9uZ3MgaW5z
aWRlLgorKyAgICAvLyBSZXR1cm5zIG51bGwgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGlu
c2lkZSBhIGZ1bmN0aW9uLgorKyAgICBjb25zdCBURnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOworK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFiYmRkM2YKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9FbWl0TWV0YWwuY3BwCitAQCAtMCwwICsxLDI0NTUgQEAKKysvLworKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysK
KysjaW5jbHVkZSA8Y2N0eXBlPgorKyNpbmNsdWRlIDxtYXA+CisrCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vt
aXRNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbnN0YW50cy5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorK3Vz
aW5nIFNpbmsgPSBEZWJ1Z1Npbms7CisrI2Vsc2UKKyt1c2luZyBTaW5rID0gVEluZm9TaW5rQmFz
ZTsKKysjZW5kaWYKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQor
K3sKKysKKytzdHJ1Y3QgVmFyRGVjbAorK3sKKysgICAgZXhwbGljaXQgVmFyRGVjbChjb25zdCBU
VmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhciksIG1Jc0ZpZWxkKGZhbHNlKSB7fQorKyAg
ICBleHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCks
IG1Jc0ZpZWxkKHRydWUpIHt9CisrCisrICAgIEFOR0xFX0lOTElORSBjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKCkgY29uc3QKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzVmFyaWFibGUoKSk7
CisrICAgICAgICByZXR1cm4gKm1WYXJpYWJsZTsKKysgICAgfQorKworKyAgICBBTkdMRV9JTkxJ
TkUgY29uc3QgVEZpZWxkICZmaWVsZCgpIGNvbnN0CisrICAgIHsKKysgICAgICAgIEFTU0VSVChp
c0ZpZWxkKCkpOworKyAgICAgICAgcmV0dXJuICptRmllbGQ7CisrICAgIH0KKysKKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtSXNGaWVsZDsgfQor
KworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBpc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gbUlzRmll
bGQ7IH0KKysKKysgICAgY29uc3QgVFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxk
KCkgPyAqZmllbGQoKS50eXBlKCkgOiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorKworKyAgICBT
eW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gaXNG
aWVsZCgpID8gZmllbGQoKS5zeW1ib2xUeXBlKCkgOiB2YXJpYWJsZSgpLnN5bWJvbFR5cGUoKTsK
KysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29u
c3QgVFZhcmlhYmxlICptVmFyaWFibGU7CisrICAgICAgICBjb25zdCBURmllbGQgKm1GaWVsZDsK
KysgICAgfTsKKysgICAgYm9vbCBtSXNGaWVsZDsKKyt9OworKworK2NsYXNzIEdlbk1ldGFsVHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6CisrICAgIH5H
ZW5NZXRhbFRyYXZlcnNlcigpIG92ZXJyaWRlOworKworKyAgICBHZW5NZXRhbFRyYXZlcnNlcihj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICBTaW5rICZv
dXQsCisrICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKysgICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRV
bmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFN3
aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFRl
cm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisrICAgIHZvaWQgdmlzaXRGdW5j
dGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGU7CisrICAg
IGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVElu
dGVybUJsb2NrICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKSBvdmVy
cmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAq
KSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdEZvckxvb3AoVEludGVybUxvb3AgKik7CisrICAg
IGJvb2wgdmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisrICAgIGJvb2wgdmlzaXREb1do
aWxlTG9vcChUSW50ZXJtTG9vcCAqKTsKKysgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCAqKSBvdmVycmlkZTsKKysKKysgIHByaXZhdGU6CisrICAgIHVzaW5nIEZ1bmNU
b05hbWUgPSBzdGQ6Om1hcDxJbW11dGFibGVTdHJpbmcsIE5hbWU+OworKyAgICBzdGF0aWMgRnVu
Y1RvTmFtZSBCdWlsZEZ1bmNUb05hbWUoKTsKKysKKysgICAgc3RydWN0IEVtaXRWYXJpYWJsZURl
Y2xhcmF0aW9uQ29uZmlnCisrICAgIHsKKysgICAgICAgIGJvb2wgaXNQYXJhbWV0ZXIgICAgICAg
ICAgICAgICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgaXNNYWluUGFyYW1ldGVyICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgaXNQYWNrZWQgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGJvb2wgZGlzYWJsZVN0cnVjdFNwZWNpZmllciAgICAgPSBmYWxzZTsKKysgICAg
ICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyICAgPSBudWxscHRyOworKyAgICAgICAg
Y29uc3QgQWRkcmVzc1NwYWNlICppc1JlZmVyZW5jZSA9IG51bGxwdHI7CisrICAgIH07CisrCisr
ICAgIHN0cnVjdCBFbWl0VHlwZUNvbmZpZworKyAgICB7CisrICAgICAgICBjb25zdCBFbWl0VmFy
aWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29uZmlnID0gbnVsbHB0cjsKKysgICAgfTsKKysK
KysgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25TaWdu
YXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25SZXR1
cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25QYXJhbWV0
ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKTsKKysKKysg
ICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRGaWVsZCAmb2JqZWN0KTsKKysgICAgdm9pZCBlbWl0
TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisrICAgIHZvaWQgZW1pdE5hbWVPZihjb25z
dCBWYXJEZWNsICZvYmplY3QpOworKworKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5hbWUoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7CisrICAgIHZvaWQg
ZW1pdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisrICAgIHZvaWQgZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWYXJEZWNsICZkZWNsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKTsKKysKKysgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGljZXMK
KysgICAgeworKyAgICAgICAgc2l6ZV90IGF0dHJpYnV0ZSA9IDA7CisrICAgICAgICBzaXplX3Qg
Y29sb3IgICAgID0gMDsKKysgICAgfTsKKysKKysgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlv
bihjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnBhcmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcyk7CisrICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKysgICAgdm9pZCBlbWl0U3RydWN0RGVjbGFy
YXRpb24oY29uc3QgVFR5cGUgJnR5cGUpOworKyAgICB2b2lkIGVtaXRPcmRpbmFyeVZhcmlhYmxl
RGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZl
dmRDb25maWcpOworKyAgICB2b2lkIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRl
Y2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZh
cmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZyk7CisrCisrICAgIHZvaWQgZW1pdE9w
ZW5CcmFjZSgpOworKyAgICB2b2lkIGVtaXRDbG9zZUJyYWNlKCk7CisrCisrICAgIHZvaWQgZ3Jv
dXBlZFRyYXZlcnNlKFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgY29uc3QgVEZpZWxkICZn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAmaW5k
ZXgpOworKyAgICBjb25zdCBURmllbGQgJmdldERpcmVjdEZpZWxkKGNvbnN0IFRJbnRlcm1UeXBl
ZCAmZmllbGRzTm9kZSwgVEludGVybVR5cGVkICZpbmRleE5vZGUpOworKworKyAgICBjb25zdCBU
Q29uc3RhbnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb25BcnJheShjb25zdCBUQ29uc3RhbnRVbmlv
biAqY29uc3QgY29uc3RVbmlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUpOworKworKyAgICBjb25zdCBUQ29uc3Rh
bnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRDb25z
dGFudFVuaW9uICpjb25zdFVuaW9uKTsKKysKKysgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQo
Y29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5pb24pOworKworKyAgcHJpdmF0ZToK
KysgICAgU2luayAmbU91dDsKKysgICAgY29uc3QgVENvbXBpbGVyICZtQ29tcGlsZXI7CisrICAg
IGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmbVBpcGVsaW5lU3RydWN0czsKKysgICAgY29uc3QgSW52
YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysgICAg
SWRHZW4gJm1JZEdlbjsKKysgICAgaW50IG1JbmRlbnRMZXZlbCAgICAgICAgPSAtMTsKKysgICAg
aW50IG1MYXN0SW5kZW50YXRpb25Qb3MgPSAtMTsKKysgICAgYm9vbCBtUGFyZW50SXNTd2l0Y2gg
ICAgPSBmYWxzZTsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFt
ZT4gbVJlbmFtZWRTeW1ib2xzOworKyAgICBjb25zdCBGdW5jVG9OYW1lIG1GdW5jVG9OYW1lICAg
PSBCdWlsZEZ1bmNUb05hbWUoKTsKKysgICAgc2l6ZV90IG1NYWluVGV4dHVyZUluZGV4ICAgICAg
ID0gMDsKKysgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAgID0gMDsKKysgICAgc2l6
ZV90IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4ID0gcng6Om10bDo6a0RlZmF1bHRVbmlmb3Jtc0Jp
bmRpbmdJbmRleDsKKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytHZW5N
ZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKKyt7CisrICAgIEFTU0VSVChtSW5k
ZW50TGV2ZWwgPT0gLTEpOworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrfQorKwor
K0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNv
bXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rICZvdXQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3Rz
ICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKysgICAgICBtT3V0KG91dCksCisrICAgICAgbUNvbXBp
bGVyKGNvbXBpbGVyKSwKKysgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisrICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgbVN5bWJvbEVudihzeW1i
b2xFbnYpLAorKyAgICAgIG1JZEdlbihpZEdlbikKKyt7fQorKworK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRJbmRlbnRhdGlvbigpCisreworKyAgICBBU1NFUlQobUluZGVudExldmVsID49
IDApOworKworKyAgICBpZiAobUxhc3RJbmRlbnRhdGlvblBvcyA9PSBtT3V0LnNpemUoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorKyAg
ICB9CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIiAgIjsKKysgICAgfQorKworKyAgICBtTGFzdEluZGVudGF0
aW9uUG9zID0gbU91dC5zaXplKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpHZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisrewor
KyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29t
bWE6CisrICAgICAgICAgICAgcmV0dXJuICIsIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICI9IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgICAgIHJldHVybiAiPSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiKz0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysgICAgICAgICAgICByZXR1
cm4gIi09IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisrICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWdu
OgorKyAgICAgICAgICAgIHJldHVybiAiLz0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cElNb2RBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICIlPSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiPDw9
IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgICAg
IHJldHVybiAiPj49IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlm
dGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiAiJj0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VYb3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICJePSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAifD0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgICAgICByZXR1cm4gIisi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICByZXR1cm4g
Ii0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKysgICAgICAgICAgICByZXR1
cm4gIioiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKysgICAgICAgICAgICBy
ZXR1cm4gIi8iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICAg
ICAgcmV0dXJuICIlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6
CisrICAgICAgICAgICAgcmV0dXJuICI8PCI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFy
aXRobWV0aWMgc2hpZnRpbmcuCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodDoKKysgICAgICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwg
dnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlQW5kOgorKyAgICAgICAgICAgIHJldHVybiAiJiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZVhvcjoKKysgICAgICAgICAgICByZXR1cm4gIl4iOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjoKKysgICAgICAgICAgICByZXR1cm4gInwiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorKyAgICAgICAgICAgIHJldHVybiAi
PCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisrICAgICAgICAg
ICAgcmV0dXJuICI+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFs
OgorKyAgICAgICAgICAgIHJldHVybiAiPD0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICAgICAgcmV0dXJuICI+PSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJl
dHVybiAiPCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBv
bmVudFdpc2U6CisrICAgICAgICAgICAgcmV0dXJuICI8PSI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICAgICAgcmV0
dXJuICI+PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25l
bnRXaXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9naWNhbE9yOgorKyAgICAgICAgICAgIHJldHVybiAifHwiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICAgICAgcmV0dXJuICIhPS8qeG9y
Ki8iOyAgLy8gWFhYOiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBm
b3Igc29tZSBvYnR1c2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
Y2FzZS4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorKyAgICAgICAg
ICAgIHJldHVybiAiJiYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgor
KyAgICAgICAgICAgIHJldHVybiAiLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
aXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICIiOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gIisiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxO
b3Q6CisrICAgICAgICAgICAgcmV0dXJuICIhIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiEiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICAgICAgcmV0dXJu
ICJ+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3REZWNy
ZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuICItLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wUHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKysgICAgICAgICAgICByZXR1cm4gIi0t
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoK
KysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAg
ICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1l
c01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorKyAgICAg
ICAgICAgIHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGlt
ZXNWZWN0b3I6CisrICAgICAgICAgICAgcmV0dXJuICIqIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgICAg
IHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWxDb21wb25lbnRX
aXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPT0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoKGFy
Z1R5cGUwLT5pc1ZlY3RvcigpICYmIGFyZ1R5cGUxLT5pc1ZlY3RvcigpKSB8fAorKyAgICAgICAg
ICAgICAgICAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkg
fHwKKysgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlz
QXJyYXkoKSkpCisrCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFO
R0xFX2VxdWFsIjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuICI9PSI7
CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisrICAgICAgICAgICAg
aWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkgfHwKKysg
ICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXko
KSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX25vdEVx
dWFsIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoYXJnVHlwZTAtPmdl
dFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbm90RXF1YWxTdHJ1Y3QiOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BLaWxsOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gImtp
bGwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKysgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQnJlYWs6CisrICAg
ICAgICAgICAgcmV0dXJuICJicmVhayI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29u
dGludWU6CisrICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wUmFkaWFuczoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JhZGlh
bnMiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAgICAgICAgICAg
cmV0dXJuICJBTkdMRV9kZWdyZWVzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
OgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfYXRhbiI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTW9kOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbW9kIjsgIC8vIGRpZmZl
cnMgZnJvbSBtZXRhbDo6bW9kCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFjdDoK
KysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcERpc3RhbmNlOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZGlzdGFuY2Ui
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2xlbmd0aCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRG90OgorKyAg
ICAgICAgICAgIHJldHVybiAiQU5HTEVfZG90IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BOb3JtYWxpemU6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3JtYWxpemUiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfZmFjZWZvcndhcmQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxl
Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9yZWZsZWN0IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfY29tcG9uZW50V2lzZU11bHRpcGx5IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9vdXRlclByb2R1
Y3QiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpZ246CisrICAgICAgICAgICAgcmV0
dXJuICJBTkdMRV9zaWduIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBbGw6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWxsIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBbnk6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YW55IjsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW46CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6c2luIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3M6CisrICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6Y29zIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46
CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBc2luOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YWNvcyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKysgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpzaW5oIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3NoOgor
KyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFRhbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuaCI7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YXNpbmgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OmFjb3NoIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
aDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphdGFuaCI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRm1hOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZtYSI7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnBvdyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwOgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKysg
ICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpleHAyIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMb2c6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmxvZzIi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6c3FydCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zmxvb3IiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFRydW5jOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRydW5jIjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNl
aWwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyYWN0OgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmZyYWN0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaW46Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWluIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNYXg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWF4IjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyb3Vu
ZCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmRFdmVuOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnJpbnQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1w
OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNsYW1wIjsgIC8vIFRPRE8gZmFzdCB2cyBw
cmVjaXNlIG5hbWVzcGFjZQorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1peDoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFN0ZXA6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c3RlcCI7CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpz
bW9vdGhzdGVwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2RmOgorKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElz
bmFuOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzbmFuIjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJc2luZjoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc2luZiI7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6bGRleHAiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyZXhwOgorKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyZXhwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbnZlcnNlc3FydDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyc3FydCI7Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ3Jvc3M6CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERGZHg6CisrICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6ZGZkeCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
REZkeToKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZmR5IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGd2lkdGg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRo
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6dHJhbnNwb3NlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZXRlcm1pbmFudDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZXRlcm1pbmFudCI7Cisr
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2ludmVyc2UiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0
Qml0c1RvSW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvVWludDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxvYXQ6CisrICAgICAgICB7CisrI2RlZmluZSBS
RVRVUk5fQVNfVFlQRShwb3N0KSAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldEJhc2ljVHlwZSgpKSAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5
cGU6OkVidEludDogICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5
cGU8aW50IiBwb3N0ICI+IjsgICBcCisrICAgICAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRV
SW50OiAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQi
IHBvc3QgIj4iOyAgXAorKyAgICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAg
ICAgICAgICBcCisrICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdCIgcG9zdCAi
PiI7IFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgICAgICBUT0RPKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOyAgICAgICAgIFwKKysgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB3aGls
ZSAoZmFsc2UpCisrCisrICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUuaXNTY2FsYXIoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCIiKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0VHlwZS5pc1ZlY3RvcigpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRUeXBlLmdldE5v
bWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIpOworKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9BU19UWVBFKCIzIik7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0FTX1RZUEUoIjQiKTsKKysgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworKyAgICAgICAgICAgIH0KKysKKysjdW5kZWYgUkVUVVJOX0FTX1RZUEUKKysgICAgICAg
IH0KKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm0yeDE2OgorKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm0yeDE2IjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm0yeDE2IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19m
bG9hdF90b191bm9ybTR4OCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3Jt
NHg4OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgi
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisrICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6dW5wYWNrX3Nub3JtMngxNl90b19mbG9hdCI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6dW5wYWNrX3Vub3JtNHg4X3RvX2Zsb2F0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVbnBhY2tTbm9ybTR4ODoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfc25v
cm00eDhfdG9fZmxvYXQiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxm
MngxNjoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3BhY2tfaGFsZl8yeDE2IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tIYWxmMngxNjoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVs
ZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJyeToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVsRXh0ZW5kZWQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllcklt
YWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJTaGFyZWQ6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRp
dmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFycmF5
TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gIlRPcGVy
YXRvcl9UT0RPIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
SW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0Ogor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgICAgICBMT0dJQ19FUlJP
UigpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrfQorKworKyNpZiAw
Cisrc3RhdGljIGludCBHZXRPcGVyYXRvclByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysg
ICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1h
OiB7CisrICAgICAgICAgICAgcmV0dXJuIDE3OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VY
b3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOiB7
CisrICAgICAgICAgICAgcmV0dXJuIDE2OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3I6IHsKKysgICAgICAgICAgICByZXR1cm4gMTU7
CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6IHsKKysgICAgICAgICAgICByZXR1cm4gMTQ7CisrICAgICAgICB9IGJyZWFrOworKwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjogeworKyAgICAgICAgICAgIHJl
dHVybiAxMzsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQml0d2lzZVhvcjogeworKyAgICAgICAgICAgIHJldHVybiAxMjsKKysgICAgICAgIH0gYnJl
YWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworKyAgICAg
ICAgICAgIHJldHVybiAxMTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVh
bDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworKyAgICAgICAgICAg
IHJldHVybiAxMDsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsOiB7CisrICAgICAgICAgICAgcmV0dXJu
IDk7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dFNoaWZ0TGVmdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7
CisrICAgICAgICAgICAgcmV0dXJuIDc7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6
IHsKKysgICAgICAgICAgICByZXR1cm4gNjsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
djoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOiB7CisrICAgICAgICAgICAgcmV0
dXJuIDU7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE5lZ2F0aXZlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU5vdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVJbmNyZW1l
bnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OiB7CisrICAgICAg
ICAgICAgcmV0dXJuIDM7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
dERlY3JlbWVudDogeworKyAgICAgICAgICAgIHJldHVybiAyOworKyAgICAgICAgfSBicmVhazsK
KysKKysgICAgICAgIGRlZmF1bHQ6IHsKKysgICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAg
ICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK25hbWVzcGFjZQorK3sK
KysKKytlbnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKKyt7CisrICAgIE5vbmUsCisrICAgIExlZnQs
CisrICAgIFJpZ2h0LAorK307CisrCisrfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrc3Rh
dGljIEFzc29jaWF0aXZpdHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCisreworKyAg
ICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhh
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNh
bE9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BDb21tYTogeworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpMZWZ0OworKyAg
ICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBZGRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNz
aWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOiB7CisrICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZp
dHk6OlJpZ2h0OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdElu
Y3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6IHsKKysgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRp
dml0eTo6Tm9uZTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OiB7Cisr
ICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpO
b25lOworKyAgICAgICAgfQorKyAgICB9CisrfQorKyNlbmRpZgorKworK3N0YXRpYyBib29sIElz
U3ltYm9saWNPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisreworKyAgICBpZiAob3Ag
PT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuICFzdGQ6OmlzYWxudW0oR2V0T3BlcmF0
b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsIGFyZ1R5cGUwLCBhcmdUeXBlMSlbMF0pOworK30KKysK
KytzdGF0aWMgVEludGVybUJpbmFyeSAqQXNTcGVjaWZpY0JpbmFyeU5vZGUoVEludGVybU5vZGUg
Jm5vZGUsIFRPcGVyYXRvciBvcCkKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUg
PSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworKyAgICBpZiAoYmluYXJ5Tm9kZSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3AgPyBiaW5hcnlOb2RlIDog
bnVsbHB0cjsKKysgICAgfQorKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CisrCisrc3RhdGljIGJv
b2wgUGFyZW50aGVzaXplKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgaWYgKG5vZGUuZ2V0
QXNTeW1ib2xOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAobm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc1N3
aXp6bGVOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkp
CisrICAgIHsKKysgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0
aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBsLgorKyAgICAgICAgY29uc3Qg
VFR5cGUgJnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0
IFRUeXBlICZhcmdUeXBlICAgID0gdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsK
KysgICAgICAgIHJldHVybiBJc1N5bWJvbGljT3BlcmF0b3IodW5hcnlOb2RlLT5nZXRPcCgpLCBy
ZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisrICAgIH0KKysKKysgICAgaWYgKFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICAv
LyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVzIGluc3RlYWQg
b2YgdGhpcyBhZC1ob2MgaW1wbC4KKysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFy
eU5vZGUtPmdldE9wKCk7CisrICAgICAgICBzd2l0Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICAgICAgICAgIHJldHVybiBQYXJl
bnRoZXNpemUoKmJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisrCisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZToKKysgICAgICAgICAgICAgICAgcmV0dXJuIEFzU3BlY2lmaWNCaW5hcnlOb2RlKCpi
aW5hcnlOb2RlLT5nZXRSaWdodCgpLCBUT3BlcmF0b3I6OkVPcENvbW1hKTsKKysKKysgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlOb2RlLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gYmluYXJ5Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gSXNTeW1i
b2xpY09wZXJhdG9yKGJpbmFyeU5vZGUtPmdldE9wKCksIHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwg
JnJpZ2h0VHlwZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpncm91cGVkVHJh
dmVyc2UoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBjb25zdCBib29sIGVtaXRQYXJlbnMg
PSBQYXJlbnRoZXNpemUobm9kZSk7CisrCisrICAgIGlmIChlbWl0UGFyZW5zKQorKyAgICB7Cisr
ICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgfQorKworKyAgICBub2RlLnRyYXZlcnNlKHRoaXMp
OworKworKyAgICBpZiAoZW1pdFBhcmVucykKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNs
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKQorK3sKKysgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAgICAgICBjYXNlIFRRdWFs
aWZpZXI6OkV2cUZyYWdDb29yZDoKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1twb3NpdGlvbl1d
IjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
UG9pbnRTaXplOgorKyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElE
OgorKyAgICAgICAgICAgIGlmIChldmRDb25maWcuaXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFt
ZXRlcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50
X2Nvb3JkXV0iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJvbnRGYWNpbmc6CisrICAgICAgICAgICAgaWYgKGV2
ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBtT3V0IDw8ICIgW1tmcm9udF9mYWNpbmddXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorKworKyAgICBjb25zdCBib29sIGlzSW52YXJpYW50ID0KKysgICAgICAgIGRlY2wuaXNG
aWVsZCgpID8gbUludmFyaWFudHMuY29udGFpbnMoZGVjbC5maWVsZCgpKSA6IG1JbnZhcmlhbnRz
LmNvbnRhaW5zKGRlY2wudmFyaWFibGUoKSk7CisrCisrICAgIGlmIChpc0ludmFyaWFudCkKKysg
ICAgeworKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworKyAgICB9CisrfQorKwor
K3N0YXRpYyB2b2lkIEVtaXROYW1lKFNpbmsgJm91dCwgY29uc3QgTmFtZSAmbmFtZSkKKyt7Cisr
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisrICAgIERlYnVnU2luazo6RXNjYXBl
ZFNpbmsgZXNjYXBlZE91dChvdXQuZXNjYXBlKCkpOworKyNlbHNlCisrICAgIFRJbmZvU2lua0Jh
c2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisrI2VuZGlmCisrICAgIG5hbWUuZW1pdChlc2NhcGVkT3V0
KTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBURmll
bGQgJm9iamVjdCkKKyt7CisrICAgIEVtaXROYW1lKG1PdXQsIE5hbWUob2JqZWN0KSk7CisrfQor
KworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVFN5bWJvbCAmb2Jq
ZWN0KQorK3sKKysgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOwor
KyAgICBpZiAoaXQgPT0gbVJlbmFtZWRTeW1ib2xzLmVuZCgpKQorKyAgICB7CisrICAgICAgICBF
bWl0TmFtZShtT3V0LCBOYW1lKG9iamVjdCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmplY3QpCisr
eworKyAgICBpZiAob2JqZWN0LmlzRmllbGQoKSkKKysgICAgeworKyAgICAgICAgZW1pdE5hbWVP
ZihvYmplY3QuZmllbGQoKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBl
bWl0TmFtZU9mKG9iamVjdC52YXJpYWJsZSgpKTsKKysgICAgfQorK30KKysKKyt2b2lkIEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0QmFyZVR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBF
bWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2lj
VHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQor
KyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFZvaWQ6CisrICAgICAgICBjYXNl
IFRCYXNpY1R5cGU6OkVidEJvb2w6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisrICAgICAgICBjYXNlIFRCYXNp
Y1R5cGU6OkVidFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0eXBlLmdl
dEJhc2ljU3RyaW5nKCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAg
ICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
IHsKKysgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKysgICAgICAgICAgICBlbWl0TmFtZU9mKGludGVy
ZmFjZUJsb2NrKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVm
YXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBHZXRUZXh0dXJlVHlwZU5h
bWUoYmFzaWNUeXBlKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxz
ZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0
dXJlICZlbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKysgICAgICAg
ICAgICAgICAgICAgIGVtaXROYW1lT2YoZW52KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBUT0RPKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25z
dCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnKQorKyAgICB7CisrICAgICAgICBjb25zdCBhdXRvICZldmRDb25maWcgPSAqZXRDb25maWcu
ZXZkQ29uZmlnOworKyAgICAgICAgaWYgKGV2ZENvbmZpZy5pc1BvaW50ZXIpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUG9pbnRlcik7Cisr
ICAgICAgICAgICAgbU91dCA8PCAiICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChl
dmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0
b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIg
IjsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIkFOR0xFX3RlbnNvcjwiOworKyAgICB9CisrCisrICAgIGlm
ICh0eXBlLmlzVmVjdG9yKCkgfHwgdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8ICJtZXRhbDo6IjsKKysgICAgfQorKworKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisrICAgIHsKKysgICAgICAgIG1PdXQg
PDwgInBhY2tlZF8iOworKyAgICB9CisrCisrICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwgZXRD
b25maWcpOworKworKyAgICBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysgICAgfQorKyAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgdHlwZS5nZXRDb2xzKCkgPDwg
IngiIDw8IHR5cGUuZ2V0Um93cygpOworKyAgICB9CisrCisrICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKysgICAgeworKyAgICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMo
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIsICIgPDwgc2l6ZTsKKysgICAg
ICAgIH0KKysgICAgICAgIG1PdXQgPDwgIj4iOworKyAgICB9CisrCisrICAgIGlmIChldENvbmZp
Zy5ldmRDb25maWcpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpl
dENvbmZpZy5ldmRDb25maWc7CisrICAgICAgICBpZiAoZXZkQ29uZmlnLmlzUG9pbnRlcikKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgKiI7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlIGlmIChldmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgbU91dCA8PCAiICYiOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAmcGFyZW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
Y29uc3QgVFR5cGUgJnR5cGUgICAgICA9ICpmaWVsZC50eXBlKCk7CisrICAgIGNvbnN0IFRCYXNp
Y1R5cGUgYmFzaWMgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworKworKyAgICBFbWl0VmFyaWFibGVE
ZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisrICAgIGV2ZENvbmZpZy5lbWl0UG9zdFF1YWxp
ZmllciAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIg
PSB0cnVlOworKyAgICBldmRDb25maWcuaXNQYWNrZWQgICAgICAgICAgICAgICA9IG1TeW1ib2xF
bnYuaXNQYWNrZWQoZmllbGQpOworKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgICAg
ICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKGZpZWxkKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKysgICAgZW1p
dFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyRGVjbChmaWVsZCksIGV2ZENvbmZpZyk7CisrCisrICAg
IGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisrICAgIHN3aXRj
aCAocXVhbCkKKysgICAgeworKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46Cisr
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZVN0cnVjdHMuZnJhZ21lbnRJbi5leHRlcm5hbCA9PSAm
cGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFGcmFnRGF0YToKKysgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVu
dE91dC5leHRlcm5hbCA9PSAmcGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaWYgKCh0eXBlLmlzVmVjdG9yKCkgJiYKKysgICAgICAgICAgICAgICAgICAgICAoYmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgYmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpKSB8
fAorKyAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0
YSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzoKKysg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gZ2VuZXJhbCBhbmQg
bmVlZHMgYSByZWltcGxlbWVudGF0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xT
TCAzLjAsIFdlIGNhbid0IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUg
aW5kZXguCisrICAgICAgICAgICAgICAgICAgICAvLyBTZWUgNC4zLjguMgorKyAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNz
L2VzLzMuMC9HTFNMX0VTX1NwZWNpZmljYXRpb25fMy4wMC5wZGYKKysgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisrICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgW1tjb2xvcigiIDw8IGluZGV4IDw8ICIpXV0iOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisrICAgICAgICAgICAgbU91dCA8
PCAiIFtbZGVwdGgoYW55KV1dIjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRl
ZmF1bHQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHN0ZDo6
bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0ZUluZGV4TWFwKAorKyAgICBj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICBjb25zdCBQaXBlbGluZVNjb3BlZDxUU3Ry
dWN0dXJlPiAmc3RydWN0dXJlKQorK3sKKysgICAgQVNTRVJUKHN0cnVjdHVyZS5pc1RvdGFsbHlG
dWxsKCkpOworKworKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9IGNvbXBpbGVyLmdl
dEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc2l6ZV90IHNoYWRlclZhclNpemUgPSBzaGFkZXJW
YXJzLnNpemUoKTsKKysgICAgc2l6ZV90IHNoYWRlclZhckluZGV4ICAgICAgPSAwOworKworKyAg
ICBjb25zdCBhdXRvICZleHRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5leHRlcm5hbC0+ZmllbGRz
KCk7CisrICAgIGNvbnN0IHNpemVfdCBleHRlcm5hbFNpemUgID0gZXh0ZXJuYWxGaWVsZHMuc2l6
ZSgpOworKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisrCisrICAgIGNvbnN0
IGF1dG8gJmludGVybmFsRmllbGRzID0gc3RydWN0dXJlLmludGVybmFsLT5maWVsZHMoKTsKKysg
ICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7Cisr
ICAgIHNpemVfdCBpbnRlcm5hbEluZGV4ICAgICAgID0gMDsKKysKKysgICAgLy8gSW50ZXJuYWwg
ZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3Bs
aXQuCisrICAgIEFTU0VSVChleHRlcm5hbFNpemUgPj0gaW50ZXJuYWxTaXplKTsKKysKKysgICAg
Ly8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorKyAgICBB
U1NFUlQoc2hhZGVyVmFyU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworKworKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisrICAgIHNpemVfdCBh
dHRyaWJ1dGVJbmRleCA9IDA7CisrCisrICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJu
YWxTaXplKQorKyAgICB7CisrICAgICAgICBjb25zdCBURmllbGQgJmludGVybmFsRmllbGQgPSAq
aW50ZXJuYWxGaWVsZHNbaW50ZXJuYWxJbmRleF07CisrICAgICAgICBjb25zdCBOYW1lIGludGVy
bmFsTmFtZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworKyAgICAgICAgY29uc3QgVFR5cGUg
JmludGVybmFsVHlwZSAgID0gKmludGVybmFsRmllbGQudHlwZSgpOworKyAgICAgICAgd2hpbGUg
KGludGVybmFsTmFtZS5yYXdOYW1lKCkgIT0gc2hhZGVyVmFyc1tzaGFkZXJWYXJJbmRleF0ubmFt
ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBp
bmFjdGl2ZSBmaWVsZC4KKysKKysgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworKyAgICAg
ICAgICAgIEFTU0VSVChzaGFkZXJWYXJJbmRleCA8IHNoYWRlclZhclNpemUpOworKworKyAgICAg
ICAgICAgICsrYXR0cmlidXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVu
dCBtb3JlIGlmIHNoYWRlciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IHNpemVfdCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRl
cm5hbFR5cGUuZ2V0Q29scygpIDogMTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBj
IDwgY29sczsgKytjKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZXh0
ZXJuYWxGaWVsZCA9ICpleHRlcm5hbEZpZWxkc1tleHRlcm5hbEluZGV4XTsKKysgICAgICAgICAg
ICBjb25zdCBOYW1lIGV4dGVybmFsTmFtZSAgICAgPSBOYW1lKGV4dGVybmFsRmllbGQpOworKyAg
ICAgICAgICAgIEFTU0VSVCghZXh0ZXJuYWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworKwor
KyAgICAgICAgICAgIGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXhbZXh0ZXJuYWxOYW1lXSA9
IGF0dHJpYnV0ZUluZGV4OworKworKyAgICAgICAgICAgICsrZXh0ZXJuYWxJbmRleDsKKysgICAg
ICAgICAgICArK2F0dHJpYnV0ZUluZGV4OworKyAgICAgICAgfQorKworKyAgICAgICAgKytzaGFk
ZXJWYXJJbmRleDsKKysgICAgICAgICsraW50ZXJuYWxJbmRleDsKKysgICAgfQorKworKyAgICBB
U1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7CisrICAgIEFTU0VSVChleHRl
cm5hbEluZGV4IDw9IGV4dGVybmFsU2l6ZSk7ICAvLyBsZXNzIHRoYW4gaWYgcGFkZGluZyB3YXMg
aW50cm9kdWNlZAorKyAgICBBU1NFUlQoaW50ZXJuYWxJbmRleCA9PSBpbnRlcm5hbFNpemUpOwor
KworKyAgICByZXR1cm4gZXh0ZXJuYWxOYW1lVG9BdHRyaWJ1dGVJbmRleDsKKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVs
ZCAmZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
RW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZkQ29uZmlnOworKyAgICBldmRDb25maWcu
ZGlzYWJsZVN0cnVjdFNwZWNpZmllciA9IHRydWU7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0
aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworKyAgICBtT3V0IDw8ICIgW1thdHRyaWJ1
dGUoIiA8PCBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUrKyA8PCAiKV1dIjsKKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKQorK3sKKysgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlw
ZTo6RWJ0U3RydWN0KTsKKysgICAgQVNTRVJUKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSk7Cisr
CisrICAgIG1PdXQgPDwgInN0cnVjdCAiOworKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIHt9
KTsKKysKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBlbWl0T3BlbkJyYWNlKCk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICBz
dGQ6Om1hcDxOYW1lLCBzaXplX3Q+IGZpZWxkVG9BdHRyaWJ1dGVJbmRleDsKKysgICAgY29uc3Qg
Ym9vbCBoYXNBdHRyaWJ1dGVJbmRpY2VzICAgICAgICAgICA9IG1QaXBlbGluZVN0cnVjdHMudmVy
dGV4SW4uZXh0ZXJuYWwgPT0gJnN0cnVjdHVyZTsKKysgICAgY29uc3QgYm9vbCByZWNsYWltVW51
c2VkQXR0cmlidXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7
CisrCisrICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorKyAgICB7CisrICAgICAgICBmaWVs
ZFRvQXR0cmlidXRlSW5kZXggPQorKyAgICAgICAgICAgIEJ1aWxkRXh0ZXJuYWxBdHRyaWJ1dGVJ
bmRleE1hcChtQ29tcGlsZXIsIG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4pOworKyAgICB9Cisr
CisrICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgYW5ub3RhdGlvbkluZGljZXM7CisrCisrICAg
IGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHN0cnVjdHVyZS5maWVsZHMoKSkKKysgICAgewor
KyAgICAgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgICAgICBpZiAoaGFzQXR0cmlidXRlSW5k
aWNlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0
dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgqZmllbGQpKTsKKysgICAgICAgICAgICBpZiAoaXQgPT0g
ZmllbGRUb0F0dHJpYnV0ZUluZGV4LmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+bmFtZSgpLmJlZ2luc1dpdGgo
Il8iKSk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5h
bWUoKS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJh
dGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmllbGQtPnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsIHx8
CisrICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQtPm5hbWUoKS5iZWdpbnNXaXRoKCJfIikg
fHwKKysgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUo
KS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlY2xhaW1VbnVzZWRB
dHRyaWJ1dGVJbmRpY2VzKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIGVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigqZmllbGQs
IGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZW1pdEZpZWxkRGVjbGFyYXRpb24oKmZp
ZWxkLCBzdHJ1Y3R1cmUsIGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgIH0KKysgICAgICAg
IG1PdXQgPDwgIjtcbiI7CisrICAgIH0KKysKKysgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1h
dGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKysgICAgeworKyAgICAgICAgTWV0YWxMYXlv
dXRPZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1w
bGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisrICAgICAgICBMYXlvdXQgbGF5b3V0ICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29uZmlnKTsKKysg
ICAgICAgIHNpemVfdCBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGF5b3V0LnNp
emVPZiAlIDE2OworKyAgICAgICAgaWYgKHBhZCAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKysg
ICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBtSWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIikpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgIlsiIDw8IHBhZCA8PCAiXTtcbiI7CisrICAgICAgICB9Cisr
ICAgIH0KKysKKysgICAgZW1pdENsb3NlQnJhY2UoKTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKysgICAgY29uc3QgVmFy
RGVjbCAmZGVjbCwKKysgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2
ZENvbmZpZykKKyt7CisrICAgIEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKyAgICBldENvbmZp
Zy5ldmRDb25maWcgPSAmZXZkQ29uZmlnOworKworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGRl
Y2wudHlwZSgpOworKyAgICBlbWl0VHlwZSh0eXBlLCBldENvbmZpZyk7CisrCisrICAgIGlmIChk
ZWNsLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiICI7CisrICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZh
ckRlY2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKKyt7
CisrICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IGRlY2wuc3ltYm9sVHlwZSgpOwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBkZWNsLnR5cGUoKTsKKysgICAgY29u
c3QgVEJhc2ljVHlwZSBiYXNpY1R5cGUgID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0
U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICh0eXBlLmlzU3RydWN0U3BlY2lm
aWVyKCkgJiYgIWV2ZENvbmZpZy5kaXNhYmxlU3RydWN0U3BlY2lmaWVyKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAg
ICAgICAgICAgICAgICBlbWl0U3RydWN0RGVjbGFyYXRpb24odHlwZSk7CisrICAgICAgICAgICAg
ICAgIGlmIChzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8ICIgIjsKKysgICAgICAgICAgICAgICAg
ICAgIGVtaXROYW1lT2YoZGVjbCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbihkZWNsLCBldmRDb25maWcpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoK
KysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBl
OjpFbXB0eSB8fCBldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAgICAgICAgICAgIGVtaXRPcmRp
bmFyeVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICBpZiAoZXZkQ29uZmlnLmVtaXRQb3N0UXVhbGlmaWVyKQorKyAgICB7Cisr
ICAgICAgICBlbWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlm
aWVyKCkpOworKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCisreworKyAgICBjb25zdCBUVmFyaWFibGUg
JnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisrICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ID0gdmFyLmdldFR5cGUoKTsKKysKKysgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3lt
Ym9sVHlwZTo6RW1wdHkpOworKworKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFz
aWNUeXBlOjpFYnRWb2lkKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8ICIvKiI7CisrICAgICAg
ICBlbWl0TmFtZU9mKHZhcik7CisrICAgICAgICBtT3V0IDw8ICIqLyI7CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0TmFtZU9mKHZhcik7CisrICAgIH0KKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0IFRDb25zdGFu
dFVuaW9uICpjb25zdCBjb25zdFVuaW9uKQorK3sKKysgICAgc3dpdGNoIChjb25zdFVuaW9uLT5n
ZXRUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IChjb25zdFVuaW9uLT5nZXRCQ29uc3QoKSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorKyAgICAgICAgeworKyAgICAgICAgICAg
IG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkgPDwgImYiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOworKyAg
ICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVi
dFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRV
Q29uc3QoKSA8PCAidSI7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgfQor
KyAgICB9CisrfQorKworK2NvbnN0IFRDb25zdGFudFVuaW9uICpHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdENvbnN0YW50VW5pb25BcnJheSgKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0
IGNvbnN0VW5pb24sCisrICAgIGNvbnN0IHNpemVfdCBzaXplKQorK3sKKysgICAgY29uc3QgVENv
bnN0YW50VW5pb24gKmNvbnN0VW5pb25JdGVyYXRlZCA9IGNvbnN0VW5pb247CisrICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKysgICAg
eworKyAgICAgICAgZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0VW5pb25JdGVyYXRlZCk7CisrCisr
ICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0
IDw8ICIsICI7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVy
YXRlZDsKKyt9CisrCisrY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVu
aW9uICpjb25zdFVuaW9uQmVnaW4pCisreworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29u
c3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47CisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0
cnVjdHVyZSAgICAgICAgICA9IHR5cGUuZ2V0U3RydWN0KCk7CisrICAgIGlmIChzdHJ1Y3R1cmUp
CisrICAgIHsKKysgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmln
e251bGxwdHJ9OworKyAgICAgICAgZW1pdFR5cGUodHlwZSwgY29uZmlnKTsKKysgICAgICAgIG1P
dXQgPDwgInsiOworKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJl
LT5maWVsZHMoKTsKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgKytpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUg
PSBmaWVsZHNbaV0tPnR5cGUoKTsKKysgICAgICAgICAgICBjb25zdFVuaW9uQ3VyciAgICAgICAg
ID0gZW1pdENvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbkN1cnIpOworKyAgICAg
ICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgbU91dCA8PCAiLCAiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysg
ICAgICAgIG1PdXQgPDwgIn0iOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAg
c2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKysgICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7CisrICAgICAgICBpZiAod3JpdGVUeXBlKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmlne251bGxw
dHJ9OworKyAgICAgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZpZyk7CisrICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdFVuaW9uQ3VyciA9IGVtaXRD
b25zdGFudFVuaW9uQXJyYXkoY29uc3RVbmlvbkN1cnIsIHNpemUpOworKyAgICAgICAgaWYgKHdy
aXRlVHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIpIjsKKysgICAgICAg
IH0KKysgICAgfQorKyAgICByZXR1cm4gY29uc3RVbmlvbkN1cnI7CisrfQorKworK3ZvaWQgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RWYWx1ZU5vZGUpCisreworKyAgICBlbWl0Q29uc3RhbnRVbmlvbihjb25zdFZhbHVlTm9k
ZS0+Z2V0VHlwZSgpLCBjb25zdFZhbHVlTm9kZS0+Z2V0Q29uc3RhbnRWYWx1ZSgpKTsKKyt9Cisr
CisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dp
enpsZSAqc3dpenpsZU5vZGUpCisreworKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2Rl
LT5nZXRPcGVyYW5kKCkpOworKyAgICBtT3V0IDw8ICIuIjsKKysKKysgICAgeworKyNpZiBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICAgICAgRGVidWdTaW5rOjpFc2NhcGVkU2lu
ayBlc2NhcGVkT3V0KG1PdXQuZXNjYXBlKCkpOworKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gZXNjYXBlZE91dC5nZXQoKTsKKysjZWxzZQorKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ICAgICAgICA9IG1PdXQ7CisrI2VuZGlmCisrICAgICAgICBzd2l6emxlTm9kZS0+d3JpdGVPZmZz
ZXRzQXNYWVpXKCZvdXQpOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisr
Y29uc3QgVEZpZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gJmZpZWxkTGlzdENvbGxlY3Rpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmlu
ZGV4KQorK3sKKysgICAgQVNTRVJUKGluZGV4LmdldFR5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRJ
bnQpOworKworKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBmaWVsZExpc3RDb2xs
ZWN0aW9uLmZpZWxkcygpOworKyAgICBjb25zdCBpbnQgaW5kZXhWYWwgICAgICAgICAgPSBpbmRl
eC5nZXRJQ29uc3QoKTsKKysgICAgY29uc3QgVEZpZWxkICZmaWVsZCAgICAgICAgID0gKmZpZWxk
TGlzdFtpbmRleFZhbF07CisrCisrICAgIHJldHVybiBmaWVsZDsKKyt9CisrCisrY29uc3QgVEZp
ZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEludGVybVR5cGVk
ICZmaWVsZHNOb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZp
ZWxkc1R5cGUgPSBmaWVsZHNOb2RlLmdldFR5cGUoKTsKKysKKysgICAgY29uc3QgVEZpZWxkTGlz
dENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgp
OworKyAgICBpZiAoZmllbGRMaXN0Q29sbGVjdGlvbiA9PSBudWxscHRyKQorKyAgICB7CisrICAg
ICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygp
OworKyAgICB9CisrICAgIEFTU0VSVChmaWVsZExpc3RDb2xsZWN0aW9uKTsKKysKKysgICAgY29u
c3QgVEludGVybUNvbnN0YW50VW5pb24gKmluZGV4Tm9kZV8gPSBpbmRleE5vZGUuZ2V0QXNDb25z
dGFudFVuaW9uKCk7CisrICAgIEFTU0VSVChpbmRleE5vZGVfKTsKKysgICAgY29uc3QgVENvbnN0
YW50VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKysKKysg
ICAgcmV0dXJuIGdldERpcmVjdEZpZWxkKCpmaWVsZExpc3RDb2xsZWN0aW9uLCBpbmRleCk7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJt
QmluYXJ5ICpiaW5hcnlOb2RlKQorK3sKKysgICAgY29uc3QgVE9wZXJhdG9yIG9wICAgICAgPSBi
aW5hcnlOb2RlLT5nZXRPcCgpOworKyAgICBUSW50ZXJtVHlwZWQgJmxlZnROb2RlICA9ICpiaW5h
cnlOb2RlLT5nZXRMZWZ0KCk7CisrICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFy
eU5vZGUtPmdldFJpZ2h0KCk7CisrCisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAi
LiI7CisrICAgICAgICAgICAgZW1pdE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmln
aHROb2RlKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleEluZGlyZWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShs
ZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAiWyI7CisrICAgICAgICAgICAgcmlnaHRO
b2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgIG1PdXQgPDwgIl0iOworKyAgICAgICAg
fQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlwZSgp
OworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gbGVmdE5vZGUuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gcmlnaHROb2RlLmdl
dFR5cGUoKTsKKysKKysgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXN1
bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKysgICAgICAgICAgICAgICAgaWYg
KG9wICE9IFRPcGVyYXRvcjo6RU9wQ29tbWEpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0VHlw
ZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uo
cmlnaHROb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVz
dWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSA8PCAiKCI7CisrICAgICAgICAgICAgICAg
IGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7
CisrICAgICAgICAgICAgICAgIHJpZ2h0Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9Cisr
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIGJvb2wgSXNQb3N0Zml4KFRPcGVy
YXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBv
c3REZWNyZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAgICAgICBkZWZh
dWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9k
ZSkKKyt7CisrICAgIGNvbnN0IFRPcGVyYXRvciBvcCAgICAgID0gdW5hcnlOb2RlLT5nZXRPcCgp
OworKyAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOwor
KworKyAgICBUSW50ZXJtVHlwZWQgJmFyZyAgICA9ICp1bmFyeU5vZGUtPmdldE9wZXJhbmQoKTsK
KysgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKworKyAgICBjb25z
dCBjaGFyICpuYW1lID0gR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBl
KTsKKysKKysgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmFyZ1R5
cGUpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIHBvc3RmaXggPSBJc1Bvc3RmaXgob3Ap
OworKyAgICAgICAgaWYgKCFwb3N0Zml4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgbmFtZTsKKysgICAgICAgIH0KKysgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShhcmcpOworKyAg
ICAgICAgaWYgKHBvc3RmaXgpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBuYW1l
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8
PCBuYW1lIDw8ICIoIjsKKysgICAgICAgIGFyZy50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIG1P
dXQgPDwgIikiOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBH
ZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29u
ZGl0aW9uYWxOb2RlKQorK3sKKysgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25hbE5vZGUt
PmdldENvbmRpdGlvbigpKTsKKysgICAgbU91dCA8PCAiID8gIjsKKysgICAgZ3JvdXBlZFRyYXZl
cnNlKCpjb25kaXRpb25hbE5vZGUtPmdldFRydWVFeHByZXNzaW9uKCkpOworKyAgICBtT3V0IDw8
ICIgOiAiOworKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VF
eHByZXNzaW9uKCkpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICppZlRoZW5FbHNl
Tm9kZSkKKyt7CisrICAgIFRJbnRlcm1UeXBlZCAmY29uZE5vZGUgPSAqaWZUaGVuRWxzZU5vZGUt
PmdldENvbmRpdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgKnRoZW5Ob2RlID0gaWZUaGVuRWxz
ZU5vZGUtPmdldFRydWVCbG9jaygpOworKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZU
aGVuRWxzZU5vZGUtPmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7
CisrICAgIG1PdXQgPDwgImlmICgiOworKyAgICBjb25kTm9kZS50cmF2ZXJzZSh0aGlzKTsKKysg
ICAgbU91dCA8PCAiKSI7CisrCisrICAgIGlmICh0aGVuTm9kZSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiXG4iOworKyAgICAgICAgdGhlbk5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiIHt9IjsKKysgICAgfQorKwor
KyAgICBpZiAoZWxzZU5vZGUpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIlxuIjsKKysgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgbU91dCA8PCAiZWxzZVxuIjsKKysgICAg
ICAgIGVsc2VOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIC8vIEFsd2F5cyBlbWl0ICJlbHNlIiBldmVuIHdoZW4gZW1wdHkgYmxvY2sgdG8g
YXZvaWQgbmVzdGVkIGlmLXN0bXQgaXNzdWVzLgorKyAgICAgICAgbU91dCA8PCAiIGVsc2Uge30i
OworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRy
YXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5vZGUpCisr
eworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAic3dpdGNoICgiOworKyAg
ICBzd2l0Y2hOb2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworKyAgICBtT3V0IDw8ICIp
XG4iOworKworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrICAgIG1QYXJlbnRJc1N3
aXRjaCA9IHRydWU7CisrICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVy
c2UodGhpcyk7CisrICAgIG1QYXJlbnRJc1N3aXRjaCA9IGZhbHNlOworKworKyAgICByZXR1cm4g
ZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwg
VEludGVybUNhc2UgKmNhc2VOb2RlKQorK3sKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrCisr
ICAgIGlmIChjYXNlTm9kZS0+aGFzQ29uZGl0aW9uKCkpCisrICAgIHsKKysgICAgICAgIFRJbnRl
cm1UeXBlZCAqY29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgICAgICBt
T3V0IDw8ICJjYXNlICI7CisrICAgICAgICBjb25kRXhwci0+dHJhdmVyc2UodGhpcyk7CisrICAg
ICAgICBtT3V0IDw8ICI6IjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1P
dXQgPDwgImRlZmF1bHQ6XG4iOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IFRG
dW5jdGlvbiAmZnVuYykKKyt7CisrICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4o
KTsKKysKKysgICAgZW1pdEZ1bmN0aW9uUmV0dXJuKGZ1bmMpOworKworKyAgICBtT3V0IDw8ICIg
IjsKKysgICAgZW1pdE5hbWVPZihmdW5jKTsKKysgICAgaWYgKGlzTWFpbikKKysgICAgeworKyAg
ICAgICAgbU91dCA8PCAiMCI7CisrICAgIH0KKysgICAgbU91dCA8PCAiKCI7CisrCisrICAgIGJv
b2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBwYXJhbUNv
dW50ID0gZnVuYy5nZXRQYXJhbUNvdW50KCk7CisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFyYW1Db3VudDsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAoZW1pdENvbW1hKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKysgICAgICAgIH0KKysgICAgICAgIGVt
aXRDb21tYSA9IHRydWU7CisrCisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoZnVuYywgcGFy
YW0pOworKyAgICB9CisrCisrICAgIG1PdXQgPDwgIikiOworK30KKysKKyt2b2lkIEdlbk1ldGFs
VHJhdmVyc2VyOjplbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorK3sK
KysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKworKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworKyAgICBpZiAoaXNNYWlu
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5U
eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBudWxscHRyKTsK
KysgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0Lm1hdGNoZXMoKnN0cnVj
dHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiZnJhZ21lbnQgIjsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1h
dGNoZXMoKnN0cnVjdHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAidmVy
dGV4ICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVtaXRUeXBlKHJldHVyblR5cGUs
IEVtaXRUeXBlQ29uZmlnKCkpOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUg
JnBhcmFtKQorK3sKKysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBwYXJhbS5nZXRUeXBlKCk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisrCisrICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysgICAgZXZkQ29uZmln
LmlzUGFyYW1ldGVyICAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRl
ciAgID0gaXNNYWluOworKyAgICBldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIgPSBpc01haW47
CisrICAgIGV2ZENvbmZpZy5pc1BvaW50ZXIgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQb2ludGVy
KHBhcmFtKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAgICAgID0gbVN5bWJvbEVudi5p
c1JlZmVyZW5jZShwYXJhbSk7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2wo
cGFyYW0pLCBldmRDb25maWcpOworKworKyAgICBpZiAoaXNNYWluKQorKyAgICB7CisrICAgICAg
ICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0KKysgICAgICAgICAgICAo
KHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbigpOworKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNoZXMoKnN0cnVj
dHVyZSkgfHwKKysgICAgICAgICAgICAgICAgbVBpcGVsaW5lU3RydWN0cy52ZXJ0ZXhJbi5tYXRj
aGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8
PCAiIFtbc3RhZ2VfaW5dXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg
KG1QaXBlbGluZVN0cnVjdHMuYW5nbGVVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbYnVmZmVyKCIgPDwgcng6
Om10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4IDw8ICIpXV0iOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5t
YXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbYnVmZmVyKCIgPDwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPDwgIildXSI7Cisr
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFt
Lm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKysgICAgICAgICAgICAg
ICAgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBt
T3V0IDw8ICIgW1tzYW1wbGVyKCIgPDwgKG1NYWluU2FtcGxlckluZGV4KSA8PCAiKV1dIjsKKysg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKysgICAgICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmdldE9yaWdpbmFsTmFtZShwYXJhbS51bmlxdWVJZCgp
LmdldCgpKTsKKysgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkU2FtcGxlckJpbmRpbmco
b3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgICAgIG1NYWlu
U2FtcGxlckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1t0ZXh0dXJlKCIg
PDwgKG1NYWluVGV4dHVyZUluZGV4KSA8PCAiKV1dIjsKKysgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyBvcmlnaW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0u
dW5pcXVlSWQoKS5nZXQoKSk7CisrICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkVGV4dHVyZUJp
bmRpbmcob3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgbU1h
aW5UZXh0dXJlSW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlIGlmIChOYW1lKHBhcmFtKSA9PSBQaXBlbGluZXtQaXBlbGluZTo6VHlw
ZTo6SW5zdGFuY2VJZCwgbnVsbHB0cn0uZ2V0U3RydWN0SW5zdGFuY2VOYW1lKAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiIFtbaW5zdGFuY2VfaWRdXSI7Cisr
ICAgICAgICB9CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRG
dW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUp
CisreworKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKQorK3sKKysgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRG
dW5jdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgJmJvZHkgICAgPSAqZnVuY0RlZk5vZGUtPmdl
dEJvZHkoKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBib2R5LnRyYXZlcnNlKHRo
aXMpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK0dlbk1ldGFsVHJhdmVyc2VyOjpG
dW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorK3sKKysgICAg
RnVuY1RvTmFtZSBtYXA7CisrCisrICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3QgY2hhciAq
bmFtZVN0cikgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIG5hbWUobmFtZVN0cik7
CisrICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKysgICAgICAg
IG1hcFtuYW1lXSA9IE5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
ICAgIH07CisrCisrICAgIHB1dEFuZ2xlKCJ0ZXhlbEZldGNoIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXhlbEZldGNoT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisrICAgIHB1dEFu
Z2xlKCJ0ZXh0dXJlMUQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUxRExvZCIpOworKyAgICBw
dXRBbmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkRMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUy
RFByb2oiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2pMb2QiKTsKKysgICAgcHV0QW5n
bGUoInRleHR1cmUzRCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisrICAgIHB1
dEFuZ2xlKCJ0ZXh0dXJlM0RQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZSIp
OworKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1
cmVDdWJlUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZUdyYWQiKTsKKysgICAgcHV0
QW5nbGUoInRleHR1cmVHcmFkT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvaiIpOworKyAgICBwdXRBbmds
ZSgidGV4dHVyZVByb2pHcmFkIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZz
ZXQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXh0dXJlUHJvakxvZE9mZnNldCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQi
KTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVTaXplIik7CisrCisrICAgIHJldHVybiBtYXA7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQorK3sKKysgICAgY29uc3QgVEludGVybVNlcXVl
bmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUtPmdldFNlcXVlbmNlKCk7CisrCisrICAgIGF1dG8g
ZW1pdEFyZ0xpc3QgPSBbJl0oY29uc3QgY2hhciAqb3BlbiwgY29uc3QgY2hhciAqY2xvc2UpIHsK
KysgICAgICAgIG1PdXQgPDwgb3BlbjsKKysKKysgICAgICAgIGJvb2wgZW1pdENvbW1hID0gZmFs
c2U7CisrICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICphcmcgOiBhcmdzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChlbWl0Q29tbWEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIsICI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVtaXRDb21t
YSA9IHRydWU7CisrICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIG1PdXQgPDwgY2xvc2U7CisrICAgIH07CisrCisrICAgIGNvbnN0IFRUeXBl
ICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworKworKyAgICBpZiAoYWdncmVn
YXRlTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIGlz
U3RhbmRhbG9uZSA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgaWYg
KGlzU3RhbmRhbG9uZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBQcmV2ZW50IGNvbnN0
cnVjdG9yIGZyb20gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYSBkZWNsYXJhdGlvbiBieSB3cmFwcGlu
ZyBpbiBwYXJlbnMuCisrICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGdpdmVuIHNv
bWV0aGluZyBsaWtlOgorKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRo
aXMgd2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQu
CisrICAgICAgICAgICAgLy8gU28gaW5zdGVhZCBlbWl0OgorKyAgICAgICAgICAgIC8vICAgICAg
KGludChzeW1ib2wpKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKworKyAgICAgICAgaWYg
KHJldFR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJl
dFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAgICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7Cisr
ICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmdldFN0cnVjdCgpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAg
ICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisr
ICAgICAgICB7CisrICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworKyAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmIChpc1N0YW5kYWxvbmUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgZWxz
ZQorKyAgICB7CisrICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBhZ2dyZWdhdGVOb2RlLT5n
ZXRPcCgpOworKyAgICAgICAgc3dpdGNoIChvcCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUtPmdl
dEZ1bmN0aW9uKCk7CisrICAgICAgICAgICAgICAgIGVtaXROYW1lT2YoZnVuYyk7CisrICAgICAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlvbigpOwor
KyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5k
KGZ1bmMubmFtZSgpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1GdW5jVG9OYW1l
LmVuZCgpKTsKKysgICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7Cisr
ICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNp
emVfdCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisrICAgICAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPCBhcmdzLnNpemUoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICZhcmctPmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgICAgICBBU1NFUlQoIWFyZ3MuZW1wdHkoKSk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCA9IGdldEFyZ1R5cGUoMCk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisrICAgICAg
ICAgICAgICAgIEFTU0VSVChhcmdUeXBlMCk7CisrCisrICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm9wTmFtZSA9IEdldE9wZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJn
VHlwZTEpOworKworKyAgICAgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCBy
ZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKQorKyAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZvcGVyYW5k
Tm9kZSA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgob3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5k
Tm9kZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uob3BlcmFuZE5vZGUpOworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgJmxlZnROb2RlICA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdncmVnYXRl
Tm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91
cGVkVHJhdmVyc2UobGVmdE5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0
IDw8ICIgIiA8PCBvcE5hbWUgPDwgIiAiOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKysgICAgICAgICAgICAg
ICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysgICAgfQorK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkK
Kyt7CisrICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMCk7CisrCisrICAgIGVtaXRJbmRlbnRh
dGlvbigpOworKyAgICBtT3V0IDw8ICJ7XG4iOworKyAgICArK21JbmRlbnRMZXZlbDsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UoKQorK3sKKysgICAgQVNT
RVJUKG1JbmRlbnRMZXZlbCA+PSAxKTsKKysKKysgICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIGVt
aXRJbmRlbnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJ9IjsKKyt9CisrCisrc3RhdGljIGJvb2wg
UmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAg
aWYgKG5vZGUuZ2V0QXNCbG9jaygpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc0Nhc2VOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CisrCisrc3RhdGljIGJvb2wgTmV3bGluZVBhZChUSW50ZXJtTm9kZSAmbm9kZSkKKyt7Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xO
b2RlID0gbm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NF
UlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjaGlsZE5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysgICAgICAgIGlmIChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKysgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVj
dFNwZWNpZmllcigpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpCisreworKyAgICBBU1NFUlQo
bUluZGVudExldmVsID49IC0xKTsKKysgICAgY29uc3QgYm9vbCBpc0dsb2JhbFNjb3BlICA9IG1J
bmRlbnRMZXZlbCA9PSAtMTsKKysgICAgY29uc3QgYm9vbCBwYXJlbnRJc1N3aXRjaCA9IG1QYXJl
bnRJc1N3aXRjaDsKKysgICAgbVBhcmVudElzU3dpdGNoICAgICAgICAgICA9IGZhbHNlOworKwor
KyAgICBpZiAoaXNHbG9iYWxTY29wZSkKKysgICAgeworKyAgICAgICAgKyttSW5kZW50TGV2ZWw7
CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0T3BlbkJyYWNlKCk7Cisr
ICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytt
SW5kZW50TGV2ZWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgVEludGVybU5vZGUgKnBy
ZXZTdG10Tm9kZSA9IG51bGxwdHI7CisrCisrICAgIGNvbnN0IHNpemVfdCBzdG10Q291bnQgPSBi
bG9ja05vZGUtPmdldENoaWxkQ291bnQoKTsKKysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dG10Q291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgVEludGVybU5vZGUgJnN0bXROb2RlID0g
KmJsb2NrTm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworKworKyAgICAgICAgaWYgKGlzR2xvYmFsU2Nv
cGUgJiYgcHJldlN0bXROb2RlICYmIChOZXdsaW5lUGFkKCpwcmV2U3RtdE5vZGUpIHx8IE5ld2xp
bmVQYWQoc3RtdE5vZGUpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICJcbiI7
CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBib29sIGlzQ2FzZSA9IHN0bXROb2RlLmdldEFz
Q2FzZU5vZGUoKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisrICAgICAgICBl
bWl0SW5kZW50YXRpb24oKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCArPSBpc0Nhc2U7CisrICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIGlmIChSZXF1aXJlc1NlbWlj
b2xvblRlcm1pbmF0b3Ioc3RtdE5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgIjsiOworKyAgICAgICAgfQorKyAgICAgICAgbU91dCA8PCAiXG4iOworKworKyAgICAgICAg
cHJldlN0bXROb2RlID0gJnN0bXROb2RlOworKyAgICB9CisrCisrICAgIGlmIChpc0dsb2JhbFNj
b3BlKQorKyAgICB7CisrICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworKyAgICAg
ICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBp
ZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1JbmRl
bnRMZXZlbCA+PSAxKTsKKysgICAgICAgICAgICAtLW1JbmRlbnRMZXZlbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVtaXRDbG9zZUJyYWNlKCk7CisrICAgICAgICBtUGFyZW50SXNTd2l0Y2ggPSBw
YXJlbnRJc1N3aXRjaDsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlz
aXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKQorK3sKKysgICAgTE9HSUNf
RVJST1IoKTsgIC8vIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZCBiZWZvcmUgdGhpcy4KKysgICAgcmV0dXJuIGZhbHNlOworK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2xOb2RlKQorK3sKKysgICAgQVNTRVJUKGRlY2xOb2RlLT5nZXRDaGlsZENvdW50KCkg
PT0gMSk7CisrICAgIFRJbnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUo
MCk7CisrCisrICAgIEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysK
KysgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9k
ZSgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUt
PnZhcmlhYmxlKCk7CisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZh
ciksIGV2ZENvbmZpZyk7CisrICAgIH0KKysgICAgZWxzZSBpZiAoVEludGVybUJpbmFyeSAqaW5p
dE5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NFUlQo
aW5pdE5vZGUtPmdldE9wKCkgPT0gVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKysgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUg
JiYgdmFsdWVOb2RlKTsKKysKKysgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVu
dEJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMgc2hvdWxkIGhhdmUgdHVybmVkIG5vbi1jb25zdCBnbG9iYWwgaW5pdGlhbGl6ZXJzIGlu
dG8KKysgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworKyAgICAgICAgICAg
IC8vIEV2cUNvbnN0IGluIHNvbWUgQU5HTEUgY29kZSBidXQgbm90IGFjdHVhbGx5IGhhdmUgdGhl
aXIgcXVhbGlmaWVyIGFjdHVhbGx5IGNoYW5nZWQgdG8KKysgICAgICAgICAgICAvLyBFdnFDb25z
dC4gVGh1cyBqdXN0IGFzc3VtZSBhbGwgRXZxR2xvYmFsIGFyZSBhY3R1YWxseSBFdnFDb25zdCBm
b3IgYWxsIGNvZGUgcnVuIGFmdGVyCisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMuCisrICAgICAgICAgICAgbU91dCA8PCAiY29uc3RhbnQgIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KysgICAgICAgIGNvbnN0IE5hbWUgdmFyTmFtZSh2YXIpOworKworKyAgICAgICAgaWYgKEV4cHJl
c3Npb25Db250YWluc05hbWUodmFyTmFtZSwgKnZhbHVlTm9kZSkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgbVJlbmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFy
TmFtZSk7CisrICAgICAgICB9CisrCisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihW
YXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisrICAgICAgICBtT3V0IDw8ICIgPSAiOworKyAgICAg
ICAgZ3JvdXBlZFRyYXZlcnNlKCp2YWx1ZU5vZGUpOworKyAgICB9CisrICAgIGVsc2UKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7
CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgY29uc3QgVExvb3BUeXBlIGxvb3BUeXBlID0gbG9v
cE5vZGUtPmdldFR5cGUoKTsKKysKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysgICAgeworKyAg
ICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIHJldHVybiB2aXNp
dEZvckxvb3AobG9vcE5vZGUpOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BOb2RlKTsKKysgICAgICAg
IGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0
RG9XaGlsZUxvb3AobG9vcE5vZGUpOworKyAgICB9CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCisreworKyAgICBBU1NF
UlQobG9vcE5vZGUtPmdldFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRm9yKTsKKysKKysgICAg
VEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworKyAgICBUSW50
ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysgICAgQVNTRVJUKGJv
ZHlOb2RlKTsKKysKKysgICAgbU91dCA8PCAiZm9yICgiOworKworKyAgICBpZiAoaW5pdE5vZGUp
CisrICAgIHsKKysgICAgICAgIGluaXROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAg
ICBlbHNlCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICB9CisrCisrICAgIG1P
dXQgPDwgIjsgIjsKKysKKysgICAgaWYgKGNvbmROb2RlKQorKyAgICB7CisrICAgICAgICBjb25k
Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisrICAgIH0KKysKKysgICAgbU91dCA8PCAiOyAiOworKwor
KyAgICBpZiAoZXhwck5vZGUpCisrICAgIHsKKysgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0
aGlzKTsKKysgICAgfQorKworKyAgICBtT3V0IDw8ICIpXG4iOworKworKyAgICBib2R5Tm9kZS0+
dHJhdmVyc2UodGhpcyk7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQorK3sK
KysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcFdoaWxl
KTsKKysKKysgICAgVEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigp
OworKyAgICBUSW50ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysg
ICAgQVNTRVJUKGNvbmROb2RlICYmIGJvZHlOb2RlKTsKKysgICAgQVNTRVJUKCFpbml0Tm9kZSAm
JiAhZXhwck5vZGUpOworKworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAi
d2hpbGUgKCI7CisrICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgbU91dCA8PCAi
KVxuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworKworKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0RG9XaGlsZUxvb3AoVElu
dGVybUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkg
PT0gVExvb3BUeXBlOjpFTG9vcERvV2hpbGUpOworKworKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKysgICAgVEludGVybVR5cGVkICpjb25kTm9kZSA9
IGxvb3BOb2RlLT5nZXRDb25kaXRpb24oKTsKKysgICAgVEludGVybVR5cGVkICpleHByTm9kZSA9
IGxvb3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisrICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUg
PSBsb29wTm9kZS0+Z2V0Qm9keSgpOworKyAgICBBU1NFUlQoY29uZE5vZGUgJiYgYm9keU5vZGUp
OworKyAgICBBU1NFUlQoIWluaXROb2RlICYmICFleHByTm9kZSk7CisrCisrICAgIGVtaXRJbmRl
bnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJkb1xuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNl
KHRoaXMpOworKyAgICBtT3V0IDw8ICJcbiI7CisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAg
ICBtT3V0IDw8ICJ3aGlsZSAoIjsKKysgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAg
ICBtT3V0IDw8ICIpOyI7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5v
ZGUpCisreworKyAgICBjb25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxv
d09wKCk7CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBicmFuY2hOb2RlLT5nZXRFeHBy
ZXNzaW9uKCk7CisrCisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKworKyAgICBzd2l0Y2ggKGZs
b3dPcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6CisrICAgICAg
ICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOworKyAgICAgICAg
ICAgIG1PdXQgPDwgIm1ldGFsOjpkaXNjYXJkX2ZyYWdtZW50KCkiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorKyAg
ICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgInJldHVybiI7CisrICAgICAgICAgICAgaWYg
KGV4cHJOb2RlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7
CisrICAgICAgICAgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCcmVhazoKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUg
PT0gbnVsbHB0cik7CisrICAgICAgICAgICAgbU91dCA8PCAiYnJlYWsiOworKyAgICAgICAgfQor
KyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6
CisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgImNvbnRpbnVlIjsKKysgICAgICAgIH0KKysgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9
CisrCisrc3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworKworK2Jvb2wgc2g6
OkVtaXRNZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICBj
b25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gY29tcGlsZXIuZ2V0SW5mb1NpbmsoKS5vYmo7CisrCisrICAgIHsKKysgICAgICAgICsr
ZW1pdE1ldGFsQ2FsbENvdW50OworKyAgICAgICAgYXV0byBmaWxlbmFtZVByb3RvID0gcmVhZFN0
cmluZ0VudlZhcigiR01EX0ZJWEVEX0VNSVQiKTsKKysgICAgICAgIGlmICghZmlsZW5hbWVQcm90
by5lbXB0eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChmaWxlbmFtZVByb3RvICE9
ICIvZGV2L251bGwiKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byB0cnlP
cGVuID0gWyZdKGNoYXIgY29uc3QgKmV4dCkgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byBm
aWxlbmFtZSA9IGZpbGVuYW1lUHJvdG87CisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSAr
PSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxDYWxsQ291bnQpOworKyAgICAgICAgICAgICAgICAg
ICAgZmlsZW5hbWUgKz0gIi4iOworKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gZXh0
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJy
YiIpOworKyAgICAgICAgICAgICAgICB9OworKyAgICAgICAgICAgICAgICBGSUxFICpmaWxlID0g
dHJ5T3BlbigibWV0YWwiKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWxlKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBmaWxlID0gdHJ5T3BlbigiY3BwIik7Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKGZpbGUpOworKworKyAg
ICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisrICAgICAgICAgICAgICAg
IHNpemVfdCBmaWxlU2l6ZSA9IGZ0ZWxsKGZpbGUpOworKyAgICAgICAgICAgICAgICBmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCk7CisrCisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IGJ1ZmY7CisrICAgICAgICAgICAgICAgIGJ1ZmYucmVzaXplKGZpbGVTaXplICsgMSk7CisrICAg
ICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7CisrICAg
ICAgICAgICAgICAgIGJ1ZmYuYmFjaygpID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgZmNs
b3NlKGZpbGUpOworKworKyAgICAgICAgICAgICAgICBvdXQgPDwgYnVmZi5kYXRhKCk7CisrICAg
ICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIG91dCA8PCAiXG5cbiI7CisrCisrICAgIGlmICghRW1pdFByb2dyYW1QcmVs
dWRlKHJvb3QsIG91dCwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHsKKysjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAg
ICAgIERlYnVnU2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQi
KSk7CisrICAgICAgICBvdXRXcmFwcGVyLndhdGNoKHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9XQVRD
SF9TVFJJTkciKSk7CisrI2Vsc2UKKysgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIg
PSBvdXQ7CisrI2VuZGlmCisrICAgICAgICBHZW5NZXRhbFRyYXZlcnNlciBnZW4oY29tcGlsZXIs
IG91dFdyYXBwZXIsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVu
dik7CisrICAgICAgICByb290LnRyYXZlcnNlKCZnZW4pOworKyAgICB9CisrCisrICAgIG91dCA8
PCAiXG4iOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDQ4YWY5YQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRN
ZXRhbC5oCitAQCAtMCwwICsxLDMyIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9I
XworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFj
ZSBzaAorK3sKKysKKysvLyBXYWxrcyB0aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0TWV0YWwoVENvbXBpbGVyICZjb21waWxlciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJp
YW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RW52aXJvbm1lbnRWYXJpYWJsZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLmQ4MjNmYzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgK
K0BAIC0wLDAgKzEsNDUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKysj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05N
RU5UVkFSSUFCTEVfSF8KKysKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8c3RyaW5n
PgorKworKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7Cisr
CisraW5saW5lIGJvb2wgcmVhZEJvb2xFbnZWYXIoY29uc3QgY2hhciAqdmFyKQorK3sKKysgICAg
Y29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysgICAgaWYgKHN0ciA9PSBudWxs
cHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKHN0
cmNtcChzdHIsICIwIikgPT0gMCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIEFTU0VSVChzdHJjbXAoc3RyLCAiMSIpID09IDApOworKyAgICByZXR1cm4gdHJ1
ZTsKKyt9CisrCisraW5saW5lIHN0ZDo6c3RyaW5nIHJlYWRTdHJpbmdFbnZWYXIoY29uc3QgY2hh
ciAqdmFyKQorK3sKKysgICAgY29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysg
ICAgaWYgKHN0ciA9PSBudWxscHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gIiI7CisrICAg
IH0KKysgICAgcmV0dXJuIHN0cjsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9O
TUVOVFZBUklBQkxFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTljMDNlCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25z
dGFudHMuY3BwCitAQCAtMCwwICsxLDk2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysK
KysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBS
ZXdyaXRlciA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKKyt7CisrICBwcml2YXRlOgorKyAgICBj
b25zdCBzaXplX3QgbU1pblJlcXVpcmVkU2l6ZTsKKysgICAgVEludGVybVNlcXVlbmNlIG1Ib2lz
dGVkRGVjbE5vZGVzOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBzaXplX3QgbWluUmVxdWlyZWRTaXplKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLCBtTWluUmVxdWlyZWRTaXplKG1pblJlcXVpcmVkU2l6
ZSkKKysgICAge30KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVy
bURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKGdl
dFBhcmVudEZ1bmN0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgRGVjbGFyYXRpb24g
ZGVjbCAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmICh0eXBl
LmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cUNvbnN0KQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFz
Q29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IE1ldGFsTGF5b3V0T2YodHlwZSkuc2l6ZU9mOworKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1pblJlcXVpcmVkU2l6ZSkKKysgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSG9pc3RlZERlY2xOb2Rlcy5w
dXNoX2JhY2soJmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgYm9vbCByZXdyaXRlKFRJbnRlcm1CbG9jayAm
cm9vdCwgSWRHZW4gJmlkR2VuKQorKyAgICB7CisrICAgICAgICBpZiAoIXJlYnVpbGRSb290KHJv
b3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcm9vdC5p
bnNlcnRDaGlsZE5vZGVzKEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KCZyb290KSwg
bUhvaXN0ZWREZWNsTm9kZXMpOworKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqb3BhcXVl
RGVjbE5vZGUgOiBtSG9pc3RlZERlY2xOb2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGRlY2xOb2RlKTsKKysgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJm9sZFZhciA9IFZpZXdEZWNsYXJhdGlvbigqZGVjbE5vZGUpLnN5
bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0g
aWRHZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKysgICAgICAgICAgICBhdXRvICpu
ZXdWYXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCAm
b2xkVmFyLmdldFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld05hbWUuc3ltYm9sVHlwZSgpKTsKKysgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJp
YWJsZSgmbUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9vbCBz
aDo6SG9pc3RDb25zdGFudHMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5SZXF1aXJlZFNp
emUpCisreworKyAgICByZXR1cm4gUmV3cml0ZXIoY29tcGlsZXIsIG1pblJlcXVpcmVkU2l6ZSku
cmV3cml0ZShyb290LCBpZEdlbik7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMzA2YTVlCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9p
c3RDb25zdGFudHMuaAorQEAgLTAsMCArMSwyNiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFO
VFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0hPSVNUQ09OU1RBTlRTX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysKKytuYW1l
c3BhY2Ugc2gKKyt7CisrCisrLy8gSG9pc3RzIGZ1bmN0aW9uLWxvY2FsIGNvbnN0YW50cyB0byB0
aGUgZ2xvYmFsIHNjb3BlIGlmIHRoZWlyIE1ldGFsIHNpemVvZiBtZWV0cworKy8vIGBtaW5SZXF1
aXJlZFNpemVgLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGls
ZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG1pblJlcXVpcmVkU2l6ZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5U
U19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9JZEdlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
ODRhZWQ2YgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcAorQEAgLTAsMCArMSw5NyBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxjY3R5cGU+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1
ZGUgPGxpbWl0cz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKwor
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrSWRHZW46OklkR2VuKCkge30KKysKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBTdHJpbmdUb0ltbXV0YWJsZT4KKytOYW1l
IElkR2VuOjpjcmVhdGVOZXdOYW1lKHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKQorK3sKKysgICAgY29uc3Qg
dW5zaWduZWQgaWQgPSBtTmV4dCsrOworKyAgICBjaGFyIGlkQnVmZmVyW3N0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCArIDFdOworKyAgICBzcHJpbnRmKGlkQnVmZmVyLCAi
JXUiLCBpZCk7CisrCisrICAgIG1OZXdOYW1lQnVmZmVyLmNsZWFyKCk7CisrICAgIG1OZXdOYW1l
QnVmZmVyICs9ICdfJzsKKysgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisrCisrICAg
IC8vIE5vdGU6CisrICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGlu
IEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorKyAg
ICAvLyB0YWtlIGNhcmUgbm90IHRvIGludHJvZHVjZSBhbnkuCisrCisrICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxl
U3RyaW5nIGJhc2VOYW1lID0gdG9JbW11dGFibGUoYmFzZU5hbWVzW2ldKTsKKysgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBjaGFy
ICpiYXNlID0gYmFzZU5hbWUuZGF0YSgpOworKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdp
bnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgIGJhc2UgKz0gc2l6ZW9mKGtBbmdsZUludGVybmFsUHJlZml4KSAtIDE7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGlmICgqYmFzZSA9PSAnXycpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICArK2Jhc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEFT
U0VSVCgqYmFzZSAhPSAnXycpOworKworKyAgICAgICAgICAgIGlmIChtTmV3TmFtZUJ1ZmZlci5i
YWNrKCkgIT0gJ18nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU5ld05hbWVC
dWZmZXIgKz0gJ18nOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBtTmV3TmFtZUJ1
ZmZlciArPSBiYXNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBOYW1lKElt
bXV0YWJsZVN0cmluZyhtTmV3TmFtZUJ1ZmZlciksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworK30KKysKKytOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyAmYmFzZU5hbWUpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsK
Kyt9CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkK
Kyt7CisrICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKGJhc2VOYW1lLnJhd05hbWUoKSk7CisrfQor
KworK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpCisrewor
KyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShJbW11dGFibGVTdHJpbmcoYmFzZU5hbWUpKTsKKyt9
CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SW1t
dXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgW10oY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzKSB7IHJldHVybiBzOyB9KTsKKyt9Cisr
CisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4g
YmFzZU5hbWVzKQorK3sKKysgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNpemUo
KSwgYmFzZU5hbWVzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0
IE5hbWUgJnMpIHsgcmV0dXJuIHMucmF3TmFtZSgpOyB9KTsKKyt9CisrCisrTmFtZSBJZEdlbjo6
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhciAqPiBiYXNlTmFt
ZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNl
TmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgY2hhciAq
cykgeyByZXR1cm4gSW1tdXRhYmxlU3RyaW5nKHMpOyB9KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmggYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4MjA4OWYKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5o
CitAQCAtMCwwICsxLDQxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysv
LyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorKy8vIEFsbCBuYW1lcyBjcmVhdGVkIGFy
ZSBtYXJrZWQgYXMgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbC4KKytjbGFzcyBJZEdlbiA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgSWRHZW4oKTsKKysKKysgICAg
TmFtZSBjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmYmFzZU5hbWUpOworKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoY29uc3QgTmFtZSAmYmFzZU5hbWUpOworKyAgICBOYW1lIGNy
ZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5ld05h
bWUoc3RkOjppbml0aWFsaXplcl9saXN0PEltbXV0YWJsZVN0cmluZz4gYmFzZU5hbWVzKTsKKysg
ICAgTmFtZSBjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxOYW1lPiBiYXNlTmFt
ZXMpOworKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0
IGNoYXIgKj4gYmFzZU5hbWVzKTsKKysKKysgIHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorKyAgICBOYW1lIGNyZWF0
ZU5ld05hbWUoc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcgKmJhc2VOYW1lcywgY29uc3QgU3Ry
aW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKTsKKysKKysgIHByaXZhdGU6CisrICAgIHVuc2ln
bmVkIG1OZXh0ID0gMDsgICAgICAgICAgLy8gYHVuc2lnbmVkYCBiZWNhdXNlIG9mICIldSIgdXNl
IGluIHNwcmludGYKKysgICAgc3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7ICAvLyByZXVzYWJs
ZSBidWZmZXIgdG8gYXZvaWQgdG9ucyBvZiByZWFsbG9jYXRpb25zCisrfTsKKysKKyt9ICAvLyBu
YW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0lER0VOX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjUzNDZmNmYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCitAQCAtMCww
ICsxLDQwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2lu
Y2x1ZGUgPGNjdHlwZT4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8bGltaXRzPgor
KyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKysK
Kyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytl
bnVtIGNsYXNzIExhbmd1YWdlCisreworKyAgICBNZXRhbCwKKysgICAgR0xTTCwKKyt9OworKwor
K3N0YXRpYyBzaXplX3QgUm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCwgc2l6ZV90IG11bHRp
cGxlKQorK3sKKysgICAgY29uc3Qgc2l6ZV90IHJlbSA9IHggJSBtdWx0aXBsZTsKKysgICAgcmV0
dXJuIHJlbSA9PSAwID8geCA6IHggKyAobXVsdGlwbGUgLSByZW0pOworK30KKysKKyt2b2lkIExh
eW91dDo6cmVxdWlyZUFsaWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKQorK3sKKysgICAg
YWxpZ25PZiA9IHN0ZDo6bWF4KGFsaWduT2YsIGFsaWduKTsKKysgICAgaWYgKHBhZCkKKysgICAg
eworKyAgICAgICAgc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlwbGVPZihzaXplT2YsIGFsaWduKTsK
KysgICAgfQorK30KKysKKytib29sIExheW91dDo6b3BlcmF0b3I9PShjb25zdCBMYXlvdXQgJm90
aGVyKSBjb25zdAorK3sKKysgICAgcmV0dXJuIHNpemVPZiA9PSBvdGhlci5zaXplT2YgJiYgYWxp
Z25PZiA9PSBvdGhlci5hbGlnbk9mOworK30KKysKKyt2b2lkIExheW91dDo6b3BlcmF0b3IrPShj
b25zdCBMYXlvdXQgJm90aGVyKQorK3sKKysgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGln
bk9mLCB0cnVlKTsKKysgICAgc2l6ZU9mICs9IG90aGVyLnNpemVPZjsKKyt9CisrCisrdm9pZCBM
YXlvdXQ6Om9wZXJhdG9yKj0oc2l6ZV90IHNjYWxlKQorK3sKKysgICAgc2l6ZU9mICo9IHNjYWxl
OworK30KKysKKytMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICs9IG90aGVyOwor
KyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrTGF5b3V0IExheW91dDo6b3BlcmF0b3IqKHNpemVf
dCBzY2FsZSkgY29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICo9
IHNjYWxlOworKyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrc3RhdGljIExheW91dCBTY2FsYXJM
YXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTGFuZ3VhZ2UgbGFuZ3VhZ2UpCisreworKyAgICBj
b25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrICAgIHN3
aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJv
b2w6CisrICAgICAgICAgICAgcmV0dXJuIHsxLCAxfTsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorKyAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDoKKysgICAgICAgICAgICByZXR1cm4gezQsIDR9Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhbmd1YWdlKQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIExhbmd1YWdlOjpNZXRh
bDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gezgsIDh9OworKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBMYW5ndWFnZTo6R0xTTDoKKysgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gezQsIDR9OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisr
ICAgIH0KKyt9CisrCisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1BhY2tlZFtdICAg
PSB7MCwgMSwgMiwgMywgNH07Cisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1VucGFj
a2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisrCisrTGF5b3V0IHNoOjpNZXRhbExheW91dE9mKGNv
bnN0IFRUeXBlICZ0eXBlLCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZykKKyt7CisrICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPD0gNCk7CisrICAgIEFTU0VSVCh0eXBlLmdldFNl
Y29uZGFyeVNpemUoKSA8PSA0KTsKKysKKysgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3JhZ2U7CisrCisrICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTaGFyZWQpOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNv
bmZpZy5tYXNrQXJyYXkpCisrICAgIHsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSB0
cnVlOworKyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwg
Y29uZmlnKTsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSBmYWxzZTsKKysgICAgICAg
IGNvbnN0IHNpemVfdCB2b2wgICAgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAg
ICAgIHJldHVybiBsYXlvdXQgKiB2b2w7CisrICAgIH0KKysKKysgICAgaWYgKGNvbnN0IFRTdHJ1
Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisrICAgICAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisrICAgICAgICBhdXRvIGNvbmZpZzIgICAgICAgICAg
ICAgPSBjb25maWc7CisrICAgICAgICBjb25maWcyLm1hc2tBcnJheSAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGF1dG8gbGF5b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsK
KysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7
CisrICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbGF5b3V0ICs9IE1ldGFsTGF5b3V0T2YoKmZpZWxkLT50eXBlKCksIGNv
bmZpZzIpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJl
VGFpbFBhZGRlZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzaXplX3QgcGFkID0gbGF5b3V0
LnNpemVPZiAlIDE2OworKyAgICAgICAgICAgIGxheW91dC5zaXplT2YgKz0gcGFkOworKyAgICAg
ICAgfQorKyAgICAgICAgbGF5b3V0LnNpemVPZiA9IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0
LnNpemVPZiwgbGF5b3V0LmFsaWduT2YpOworKyAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
fQorKworKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxlcnNBc1RleHR1cmVFbnYgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gezE2LCA4
fTsgIC8vIHBvaW50ZXJ7OCw4fSBhbmQgbWV0YWw6OnNhbXBsZXJ7OCw4fQorKyAgICB9CisrCisr
ICAgIGNvbnN0IExheW91dCBzY2FsYXJMYXlvdXQgPSBTY2FsYXJMYXlvdXRPZih0eXBlLCBMYW5n
dWFnZTo6TWV0YWwpOworKworKyAgICBpZiAodHlwZS5pc1JhbmswKCkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0KKysgICAgZWxzZSBpZiAodHlwZS5pc1Zl
Y3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQYWNrZWQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0e3Nj
YWxhckxheW91dC5zaXplT2YgKiBpbm5lclNjYWxlLCBzY2FsYXJMYXlvdXQuYWxpZ25PZn07Cisr
ICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2Nh
bGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKysgICAgICAgICAgICBhdXRvIGxh
eW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5u
ZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOwor
KyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQpOworKyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKysgICAgICAgIGNvbnN0IHNp
emVfdCBpbm5lclNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldFJvd3MoKV07Cisr
ICAgICAgICBjb25zdCBzaXplX3Qgb3V0ZXJTY2FsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlw
ZS5nZXRDb2xzKCkpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJM
YXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZTsKKysgICAgICAgIHJldHVybiB7biAqIG91dGVyU2Nh
bGUsIG59OworKyAgICB9CisrfQorKworK1RMYXlvdXRCbG9ja1N0b3JhZ2Ugc2g6Ok92ZXJsYXko
VExheW91dEJsb2NrU3RvcmFnZSBvbGRTdG9yYWdlLCBjb25zdCBUVHlwZSAmdHlwZSkKKyt7Cisr
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgbmV3U3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworKyAgICBzd2l0Y2ggKG5ld1N0b3JhZ2UpCisrICAg
IHsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6Cisr
ICAgICAgICAgICAgcmV0dXJuIG9sZFN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
VW5zcGVjaWZpZWQgPyBrRGVmYXVsdExheW91dEJsb2NrU3RvcmFnZQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
b2xkU3RvcmFnZTsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIG5ld1N0
b3JhZ2U7CisrICAgIH0KKyt9CisrCisrVExheW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXko
VExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpCisrewor
KyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBuZXdQYWNraW5nID0gdHlwZS5nZXRMYXlv
dXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nOworKyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisr
ICAgIHsKKysgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVk
OgorKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5nID09IFRMYXlvdXRNYXRyaXhQYWNraW5n
OjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG9sZFBhY2tpbmc7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVy
biBuZXdQYWNraW5nOworKyAgICB9CisrfQorKworK2Jvb2wgc2g6OkNhbkJlUGFja2VkKFRMYXlv
dXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKKyt7CisrICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAg
eworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisrICAgICAg
ICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOgor
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisrICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNV
bnNwZWNpZmllZDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIHNoOjpDYW5CZVBhY2tlZChUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcikKKyt7CisrICAgIHJldHVybiBDYW5CZVBhY2tlZChs
YXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlKTsKKyt9CisrCisrYm9vbCBzaDo6Q2FuQmVQYWNr
ZWQoY29uc3QgVFR5cGUgJnR5cGUpCisreworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBDYW5CZVBh
Y2tlZCh0eXBlLmdldExheW91dFF1YWxpZmllcigpKTsKKyt9CisrCisrdm9pZCBzaDo6U2V0Qmxv
Y2tTdG9yYWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpCisrewor
KyAgICBhdXRvIHF1YWwgICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisrICAg
IHF1YWwuYmxvY2tTdG9yYWdlID0gc3RvcmFnZTsKKysgICAgdHlwZS5zZXRMYXlvdXRRdWFsaWZp
ZXIocXVhbCk7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2Us
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1h
dHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJheSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKKyt7CisrICAgIGNv
bnN0IGJvb2wgaXNQYWNrZWQgPQorKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9y
YWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFy
ZWQ7CisrCisrICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICBmb3Ig
KGF1dG8gaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorKyAgICB7CisrICAgICAg
ICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIpLT50eXBlKCksIHN0b3JhZ2UsIG1hdHJp
eFBhY2tpbmcsIGZhbHNlKTsKKysgICAgfQorKyAgICBpZiAoIWlzUGFja2VkKSAgLy8gWFhYOiBD
b3JyZWN0PworKyAgICB7CisrICAgICAgICBsYXlvdXQuc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlw
bGVPZihsYXlvdXQuc2l6ZU9mLCBsYXlvdXQuYWxpZ25PZik7CisrICAgIH0KKysgICAgbGF5b3V0
LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisrICAgIHJldHVybiBsYXlv
dXQ7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbExheW91dE9mKGNvbnN0IFRUeXBl
ICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFza0FycmF5LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBiYXNlQWxpZ25tZW50KQorK3sKKysgICAg
QVNTRVJUKHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOwor
KworKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKysgICAgICAgIHN0b3JhZ2UgPT0gVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkIHx8IHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzU2hhcmVkOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRy
aXgoKSAmJiAhbWFza0FycmF5KQorKyAgICB7CisrICAgICAgICBhdXRvIGxheW91dCA9IEdsc2xM
YXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCB0cnVlKTsKKysgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgICAgIGxheW91dC5yZXF1
aXJlQWxpZ25tZW50KGJhc2VBbGlnbm1lbnQsIHRydWUpOworKyAgICAgICAgcmV0dXJuIGxheW91
dDsKKysgICAgfQorKworKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNp
emUoKSA9PSAxKTsKKysgICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSAx
KTsKKysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRz
KCk7CisrICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGZpZWxkcy5kYXRh
KCksIGZpZWxkcy5kYXRhKCkgKyBmaWVsZHMuc2l6ZSgpLCBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIGJh
c2VBbGlnbm1lbnQpOworKyAgICB9CisrCisrICAgIGNvbnN0IGF1dG8gc2NhbGFyTGF5b3V0ID0g
U2NhbGFyTGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6OkdMU0wpOworKworKyAgICBpZiAodHlwZS5p
c1JhbmswKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0K
KysgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQ
YWNrZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAg
PSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBhbGlnblNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldE5v
bWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0KKysgICAgICAgICAgICAg
ICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXplT2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5h
bGlnbk9mICogYWxpZ25TY2FsZX07CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXpl
X3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgp
XTsKKysgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChz
Y2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxh
eW91dDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmlzTWF0cml4KCkpOworKworKyAgICAgICAgc2l6ZV90IGlubmVyRGltOworKyAg
ICAgICAgc2l6ZV90IG91dGVyRGltOworKworKyAgICAgICAgc3dpdGNoIChtYXRyaXhQYWNraW5n
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVt
cENvbHVtbk1ham9yOgorKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRpY19jYXN0PHNp
emVfdD4odHlwZS5nZXRSb3dzKCkpOworKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRp
Y19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworKyAgICAgICAgICAgICAgICBicmVhazsK
KysgICAgICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBSb3dNYWpvcjoKKysg
ICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKysgICAgICAgICAgICAgICAgb3V0ZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5
cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgICAgIGlubmVyRGltID0gMDsKKysgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworKyAgICAgICAgfQorKworKyAgICAgICAgb3V0ZXJEaW0g
Kj0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrCisrICAgICAgICBjb25zdCBzaXplX3Qg
aW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbaW5uZXJEaW1dOworKyAgICAgICAgY29u
c3Qgc2l6ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsK
KysgICAgICAgIExheW91dCBsYXlvdXQgICAgICAgICAgID0ge291dGVyRGltICogbiwgbn07Cisr
ICAgICAgICBsYXlvdXQucmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKysg
ICAgICAgIHJldHVybiBsYXlvdXQ7CisrICAgIH0KKyt9CisrCisrTGF5b3V0IHNoOjpHbHNsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRN
YXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtYXNrQXJyYXkpCisreworKyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQp
OworKyAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisrCisrICAgIHN0
b3JhZ2UgICAgICAgPSBPdmVybGF5KHN0b3JhZ2UsIHR5cGUpOworKyAgICBtYXRyaXhQYWNraW5n
ID0gT3ZlcmxheShtYXRyaXhQYWNraW5nLCB0eXBlKTsKKysKKysgICAgc3dpdGNoIChzdG9yYWdl
KQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoK
KysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9m
KHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJu
IENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJy
YXksIDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgor
KyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0
cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3Rv
cmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBMYXlvdXQgc2g6Okdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNv
bnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQ
YWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKKyt7CisrICAgIEFTU0VSVChzdG9yYWdlICE9
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkKTsKKysgICAgQVNTRVJUKG1hdHJp
eFBhY2tpbmcgIT0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkKTsKKysKKysg
ICAgc3dpdGNoIChzdG9yYWdlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExh
eW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAg
ICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2Us
IG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAgY2FzZSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1
Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXks
IDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAg
ICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3Rv
cmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1Io
KTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQxM2VkZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5oCitAQCAtMCwwICsxLDg4IEBACisrLy8KKysvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisr
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworK2Nv
bnN0ZXhwciBjb25zdCBhdXRvIGtEZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlICA9IFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKytjb25zdGV4cHIgY29uc3QgYXV0byBrRGVmYXVsdExh
eW91dE1hdHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wQ29sdW1uTWFqb3I7
CisrCisrLy8gUmV0dXJucyBgb2xkU3RvcmFnZWAgaWYgYHR5cGVgIGhhcyB1bnNwZWNpZmllZCBi
bG9jayBzdG9yYWdlLgorKy8vIE90aGVyd2lzZSByZXR1cm5zIGJsb2NrIHN0b3JhZ2Ugb2YgYHR5
cGVgLgorK1RMYXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9s
ZFN0b3JhZ2UsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBSZXR1cm5zIGBvbGRQYWNraW5n
YCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIG1hdHJpeCBwYWNraW5nLgorKy8vIE90aGVyd2lz
ZSByZXR1cm5zIG1hdHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KKytUTGF5b3V0TWF0cml4UGFja2lu
ZyBPdmVybGF5KFRMYXlvdXRNYXRyaXhQYWNraW5nIG9sZFBhY2tpbmcsIGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZv
ciB0aGUgYmxvY2sgc3RvcmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCisrYm9v
bCBDYW5CZVBhY2tlZChUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIFJldHVy
bnMgd2hldGhlciBvciBub3QgaXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlm
aWVyIHRvIHVzZSBhIHBhY2tlZCByZXByZXNlbnRhdGlvbi4KKytib29sIENhbkJlUGFja2VkKFRM
YXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIg
b3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVw
cmVzZW50YXRpb24uCisrYm9vbCBDYW5CZVBhY2tlZChjb25zdCBUVHlwZSAmdHlwZSk7CisrCisr
Ly8gU2V0cyB0aGUgYmxvY2sgc3RvcmFnZSBmb3IgYSB0eXBlLgorK3ZvaWQgU2V0QmxvY2tTdG9y
YWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIENv
bnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25vZmAgaW5mb3JtYXRpb24uCisrc3RydWN0IExheW91
dAorK3sKKysgICAgc2l6ZV90IHNpemVPZjsKKysgICAgc2l6ZV90IGFsaWduT2Y7CisrCisrICAg
IHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVybiB7MCwgMX07IH0KKysgICAgc3RhdGlj
IExheW91dCBJbnZhbGlkKCkgeyByZXR1cm4gezAsIDB9OyB9CisrICAgIHN0YXRpYyBMYXlvdXQg
Qm90aChzaXplX3QgbikgeyByZXR1cm4ge24sIG59OyB9CisrCisrICAgIHZvaWQgcmVxdWlyZUFs
aWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKTsKKysKKysgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKworKyAgICB2b2lkIG9wZXJhdG9yKz0oY29u
c3QgTGF5b3V0ICZvdGhlcik7CisrICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpOwor
KworKyAgICBMYXlvdXQgb3BlcmF0b3IrKGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKyAg
ICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7CisrfTsKKysKKytzdHJ1Y3Qg
TWV0YWxMYXlvdXRPZkNvbmZpZworK3sKKysgICAgYm9vbCBkaXNhYmxlUGFja2luZyAgICAgICAg
ICAgICA9IGZhbHNlOworKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFs
c2U7CisrICAgIGJvb2wgdHJlYXRTYW1wbGVyc0FzVGV4dHVyZUVudiAgPSBmYWxzZTsKKysgICAg
Ym9vbCBhc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IGZhbHNlOyAgLy8gUGFkIHRvIG11bHRp
cGxlIG9mIDE2CisrfTsKKysKKysvLyBSZXR1cm5zIHRoZSBsYXlvdXQgb2YgYSB0eXBlIGlmIGl0
IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBNZXRhbCBwcm9ncmFtLgorKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IE1ldGFsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsIE1ldGFsTGF5b3V0T2ZDb25maWcgY29uZmlnID0ge30p
OworKworKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSBy
ZXByZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KKytBTkdMRV9OT19ESVNDQVJEIExheW91dAor
K0dsc2xMYXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgVExheW91dEJs
b2NrU3RvcmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3Bl
Y2lmaWVkLAorKyAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5n
ID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkLAorKyAgICAgICAgICAgICBi
b29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgICAgID0gZmFsc2UpOworKworKy8vIFJldHVy
bnMgdGhlIGxheW91dCBvZiBhIHN0cnVjdHVyZSBpZiBpdCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVk
IGluIGEgR0xTTCBwcm9ncmFtLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IEdsc2xTdHJ1Y3RM
YXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRM
YXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworKworK30gIC8v
IG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTEFZT1VUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0
aW9uc1RvRGVmaW5pdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uM2UzMGRhZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCitAQCAt
MCwwICsxLDM0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysKKyt1c2luZyBuYW1l
c3BhY2Ugc2g7CisrCisrY2xhc3MgTWFwcGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7
CisrICBwdWJsaWM6CisrICAgIEZ1bmN0aW9uVG9EZWZpbml0aW9uIG1GdW5jVG9EZWY7CisrCisr
ICBwdWJsaWM6CisrICAgIE1hcHBlcigpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpIHt9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24o
KTsKKysgICAgICAgIEFTU0VSVChmdW5jLT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVP
cE51bGwpOworKyAgICAgICAgbUZ1bmNUb0RlZltmdW5jXSA9IGZ1bmNEZWZOb2RlOworKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKytGdW5jdGlvblRvRGVmaW5pdGlvbiBz
aDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAg
ICBNYXBwZXIgbWFwcGVyOworKyAgICByb290LnRyYXZlcnNlKCZtYXBwZXIpOworKyAgICByZXR1
cm4gc3RkOjptb3ZlKG1hcHBlci5tRnVuY1RvRGVmKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi40ZTU2ZGRlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5o
CitAQCAtMCwwICsxLDI1IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05T
X0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9N
QVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisrCisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZl
cnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgbWFwIGZyb20gZnVuY3Rpb25z
IHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMuCisrdXNpbmcgRnVuY3Rpb25Ub0Rl
ZmluaXRpb24gPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKj47CisrCisrLy8gTWFwcyBmdW5jdGlvbnMgdG8gdGhlaXIgY29y
cmVzcG9uZGluZyBkZWZpbml0aW9ucy4KKytBTkdMRV9OT19ESVNDQVJEIEZ1bmN0aW9uVG9EZWZp
bml0aW9uIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMoVEludGVybUJsb2NrICZyb290KTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFw
U3ltYm9scy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTWFwU3ltYm9scy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4w
MzVjOTMwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5jcHAKK0BAIC0wLDAgKzEsNDYgQEAKKysvLwor
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTWFwU3ltYm9scy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFJld3Jp
dGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgcHJpdmF0ZToKKysgICAgc3RkOjpm
dW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYp
PiBtTWFwOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1bmN0
aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbU1hcChtYXApCisrICAgIHt9CisrCisrICAgIFBvc3RS
ZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJv
bE5vZGUpOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpN
YXBTeW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRl
cm1Ob2RlICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyt7Cisr
ICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzdGQ6Om1vdmUobWFwKSk7CisrICAgIGlm
ICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgK
K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NTY4OTBhCistLS0gL2Rldi9u
dWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TWFwU3ltYm9scy5oCitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNU
T01FTUJFUkFDQ0VTU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9S
TUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKysKKysjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKysvLyBNYXBzIFRJbnRlcm1TeW1ib2wgbm9kZXMgdG8gVEludGVybU5vZGUgbm9kZXMuCisr
Ly8gVGhlIHBhcmVudCBmdW5jdGlvbiBvZiBhIHN5bWJvbCBpcyBwcm92aWRlZCB0byB0aGUgbWFw
cGluZyB3aGVuIGFwcGxpY2FibGUuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMo
CisrICAgIFRDb21waWxlciAmY29tcGlsZXIsCisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysg
ICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJt
U3ltYm9sICYpPiBtYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuY3BwCituZXcgZmlsZSBtb2Rl
IDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTc3OGQzNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5j
cHAKK0BAIC0wLDAgKzEsMTAwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TW9kaWZ5U3RydWN0LmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrc2l6ZV90IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUo
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIG9yZGVyaW5nLnNpemUoKTsKKyt9CisrCisrY29uc3Qg
TW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0KHNp
emVfdCBpbmRleCkgY29uc3QKKyt7CisrICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnMgICAgICAgICAgICAgID0gb3JkZXJpbmdbaW5kZXhdOworKyAg
ICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZpbmQoKnMpOworKyAgICBBU1NF
UlQobSk7CisrICAgIHJldHVybiAqbTsKKyt9CisrCisrY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNo
aW5lcnkgKk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQoY29uc3QgVFN0cnVjdHVyZSAm
cykgY29uc3QKKyt7CisrICAgIGF1dG8gaXRlciA9IG9yaWdpbmFsVG9NYWNoaW5lcnkuZmluZCgm
cyk7CisrICAgIGlmIChpdGVyID09IG9yaWdpbmFsVG9NYWNoaW5lcnkuZW5kKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrICAgIHJldHVybiAmaXRlci0+c2Vj
b25kOworK30KKysKKyt2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChjb25z
dCBUU3RydWN0dXJlICZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpCisreworKyAgICBBU1NF
UlQoIWZpbmQocykpOworKyAgICBvcmlnaW5hbFRvTWFjaGluZXJ5WyZzXSA9IG1hY2hpbmVyeTsK
KysgICAgb3JkZXJpbmcucHVzaF9iYWNrKCZzKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrVEludGVybVR5cGVkICZGbGF0dGVuKFN5bWJv
bEVudiAmc3ltYm9sRW52LCBUSW50ZXJtVHlwZWQgJm5vZGUpCisreworKyAgICBhdXRvICZ0eXBl
ID0gbm9kZS5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CisrCisrICAg
IGF1dG8gJnJldFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworKyAgICByZXRUeXBlLm1ha2VB
cnJheSgxKTsKKysKKysgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChO
YW1lKCJmbGF0dGVuIiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cisr
fQorKworK3N0cnVjdCBGbGF0dGVuQXJyYXkKKyt7fTsKKysKKytzdHJ1Y3QgUGF0aEl0ZW0KKyt7
CisrICAgIGVudW0gY2xhc3MgVHlwZQorKyAgICB7CisrICAgICAgICBGaWVsZCwgICAgICAgICAv
LyBTdHJ1Y3QgZmllbGQgaW5kZXhpbmcuCisrICAgICAgICBJbmRleCwgICAgICAgICAvLyBBcnJh
eSwgdmVjdG9yLCBvciBtYXRyaXggaW5kZXhpbmcuCisrICAgICAgICBGbGF0dGVuQXJyYXksICAv
LyBBcnJheSBvZiBhbnkgcmFuayAtPiBwb2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorKyAgICB9
OworKworKyAgICBQYXRoSXRlbShjb25zdCBURmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCks
IHR5cGUoVHlwZTo6RmllbGQpIHt9CisrICAgIFBhdGhJdGVtKGludCBpbmRleCkgOiBpbmRleChp
bmRleCksIHR5cGUoVHlwZTo6SW5kZXgpIHt9CisrICAgIFBhdGhJdGVtKHVuc2lnbmVkIGluZGV4
KSA6IFBhdGhJdGVtKHN0YXRpY19jYXN0PGludD4oaW5kZXgpKSB7fQorKyAgICBQYXRoSXRlbShG
bGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5cGU6OkZsYXR0ZW5BcnJheSkge30KKysKKysg
ICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZDsKKysgICAgICAg
IGludCBpbmRleDsKKysgICAgfTsKKysgICAgVHlwZSB0eXBlOworK307CisrCisrVEludGVybVR5
cGVkICZCdWlsZFBhdGhBY2Nlc3MoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRoKQorK3sKKysg
ICAgVEludGVybVR5cGVkICpjdXJyID0gbmV3IFRJbnRlcm1TeW1ib2woJnZhcik7CisrICAgIGZv
ciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorKyAgICB7CisrICAgICAgICBzd2l0Y2gg
KGl0ZW0udHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBl
OjpGaWVsZDoKKysgICAgICAgICAgICAgICAgY3VyciA9ICZBY2Nlc3NGaWVsZCgqY3VyciwgaXRl
bS5maWVsZC0+bmFtZSgpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
Y2FzZSBQYXRoSXRlbTo6VHlwZTo6SW5kZXg6CisrICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNj
ZXNzSW5kZXgoKmN1cnIsIGl0ZW0uaW5kZXgpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpGbGF0dGVuQXJyYXk6CisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiAqY3VycjsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kyt1c2luZyBPcmlnaW5hbFBhcmFtID0gY29uc3QgVFZhcmlhYmxlICY7CisrdXNpbmcgTW9kaWZp
ZWRQYXJhbSA9IGNvbnN0IFRWYXJpYWJsZSAmOworKworK3VzaW5nIE9yaWdpbmFsQWNjZXNzID0g
VEludGVybVR5cGVkOworK3VzaW5nIE1vZGlmaWVkQWNjZXNzID0gVEludGVybVR5cGVkOworKwor
K3N0cnVjdCBBY2Nlc3MKKyt7CisrICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKysgICAg
TW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkOworKworKyAgICBzdHJ1Y3QgRW52CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IENvbnZlcnRUeXBlIHR5cGU7CisrICAgIH07CisrfTsKKysKKyt1c2luZyBD
b252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rpb248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNzICYpPjsKKysKKytjbGFzcyBDb252ZXJ0U3RydWN0
U3RhdGUgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyt7CisrICBwcml2YXRlOgorKyAgICBzdHJ1Y3Qg
Q29udmVyc2lvbkluZm8KKysgICAgeworKyAgICAgICAgQ29udmVyc2lvbkZ1bmMgc3RkRnVuYzsK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqYXN0RnVuYzsKKysgICAgICAgIHN0ZDo6dmVjdG9y
PFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrICAgICAgICBJbW11dGFibGVTdHJpbmcgcGF0aE5hbWU7
CisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIENvbnZlcnRTdHJ1Y3RTdGF0ZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnLAor
KyAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFj
aGluZXJpZXMpCisrICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorKyAgICAgICAgICBzeW1ib2xF
bnYoc3ltYm9sRW52KSwKKysgICAgICAgICAgbW9kaWZpZWRGaWVsZHMoKm5ldyBURmllbGRMaXN0
KCkpLAorKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSksCisr
ICAgICAgICAgIGlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgb3V0TWFjaGluZXJpZXMob3V0TWFj
aGluZXJpZXMpCisrICAgIHt9CisrCisrICAgIH5Db252ZXJ0U3RydWN0U3RhdGUoKQorKyAgICB7
CisrICAgICAgICBBU1NFUlQobmFtZVBhdGguZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1Ymxpc2goY29uc3Qg
VFN0cnVjdHVyZSAmb3JpZ2luYWxTdHJ1Y3QsIGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFt
ZSkKKysgICAgeworKyAgICAgICAgY29uc3QgYm9vbCBpc09yaWdpbmFsVG9Nb2RpZmllZCA9IGNv
bmZpZy5jb252ZXJ0VHlwZSA9PSBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOworKwor
KyAgICAgICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRh
YmxlLCBtb2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGlmaWVkRmllbGRzLCBtb2RpZmllZFN0cnVj
dE5hbWUuc3ltYm9sVHlwZSgpKTsKKysKKysgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5j
dGlvbigKKysgICAgICAgICAgICAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgaWRHZW4uY3Jl
YXRlTmV3TmFtZShpc09yaWdpbmFsVG9Nb2RpZmllZCA/ICJvcmlnaW5hbFRvTW9kaWZpZWQiIDog
Im1vZGlmaWVkVG9PcmlnaW5hbCIpCisrICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwgbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidFZvaWQpLCBmYWxzZSk7CisrCisrICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFy
YW0gPQorKyAgICAgICAgICAgIENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIG9y
aWdpbmFsU3RydWN0LCBOYW1lKCJvcmlnaW5hbCIpKTsKKysgICAgICAgIE1vZGlmaWVkUGFyYW0g
bW9kaWZpZWRQYXJhbSA9CisrICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1i
b2xUYWJsZSwgbW9kaWZpZWRTdHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworKyAgICAgICAgc3lt
Ym9sRW52Lm1hcmtBc1JlZmVyZW5jZShvcmlnaW5hbFBhcmFtLCBBZGRyZXNzU3BhY2U6OlRocmVh
ZCk7CisrICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG1vZGlmaWVkUGFyYW0sIGNv
bmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSk7CisrICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9k
aWZpZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdp
bmFsUGFyYW0pOworKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFt
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBm
dW5jLmFkZFBhcmFtZXRlcigmbW9kaWZpZWRQYXJhbSk7CisrICAgICAgICAgICAgZnVuYy5hZGRQ
YXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVy
bUJsb2NrICZib2R5ID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysKKysgICAgICAgIEFjY2Vzczo6
RW52IGVudntjb25maWcuY29udmVydFR5cGV9OworKworKyAgICAgICAgZm9yIChDb252ZXJzaW9u
SW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBh
dXRvIGNvbnZlcnQgPSBbJl0oT3JpZ2luYWxBY2Nlc3MgJm9yaWdpbmFsLCBNb2RpZmllZEFjY2Vz
cyAmbW9kaWZpZWQpIHsKKysgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0RnVuYykKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmZvLnN0ZEZ1bmMp
OworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBvcmlnaW5hbCA6IG1vZGlm
aWVkOworKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgICAgICpp
bmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7CisrICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5zdGRGdW5jKTsKKysgICAgICAgICAgICAg
ICAgICAgIEFjY2VzcyBhY2Nlc3MgICAgICA9IGluZm8uc3RkRnVuYyhlbnYsIG9yaWdpbmFsLCBt
b2RpZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09y
aWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKysg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZGVzdCA9IGlzT3JpZ2luYWxUb01vZGlm
aWVkID8gYWNjZXNzLm1vZGlmaWVkIDogYWNjZXNzLm9yaWdpbmFsOworKyAgICAgICAgICAgICAg
ICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpF
T3BBc3NpZ24sICZkZXN0LCAmc3JjKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisrICAg
ICAgICAgICAgTW9kaWZpZWRBY2Nlc3MgKm1vZGlmaWVkID0gJkFjY2Vzc0ZpZWxkKG1vZGlmaWVk
UGFyYW0sIGluZm8ucGF0aE5hbWUpOworKworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0g
b3JpZ2luYWwtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSBtdCA9IG1vZGlm
aWVkLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgQVNTRVJUKG90LmlzQXJyYXkoKSA9PSBtdC5p
c0FycmF5KCkpOworKworKyAgICAgICAgICAgIGlmIChvdC5pc0FycmF5KCkgJiYgb3QgIT0gbXQp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXpl
cygpID09IG10LmdldEFycmF5U2l6ZXMoKSk7CisrICAgICAgICAgICAgICAgIGlmIChvdC5pc0Fy
cmF5T2ZBcnJheXMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
b3JpZ2luYWwgPSAmRmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisrICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllZCA9ICZGbGF0dGVuKHN5bWJvbEVudiwgKm1vZGlmaWVkKTsKKysgICAg
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGlj
X2Nhc3Q8aW50PihvdC5nZXRBcnJheVNpemVQcm9kdWN0KCkpOworKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsID0gb3JpZ2luYWwtPmRlZXBDb3B5KCk7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsK
KysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNj
ZXNzICZvID0gQWNjZXNzSW5kZXgoKm9yaWdpbmFsLCBpKTsKKysgICAgICAgICAgICAgICAgICAg
IE9yaWdpbmFsQWNjZXNzICZtID0gQWNjZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnZlcnQobywgbSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmllZCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKworKyAgICAgICAgYXV0byAqZnVuY1Byb3RvID0gbmV3IFRJbnRlcm1GdW5jdGlvblBy
b3RvdHlwZSgmZnVuYyk7CisrICAgICAgICBhdXRvICpmdW5jRGVmICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG8sICZib2R5KTsKKysKKysgICAgICAgIE1vZGlmaWVk
U3RydWN0TWFjaGluZXJ5IG1hY2hpbmVyeTsKKysgICAgICAgIG1hY2hpbmVyeS5tb2RpZmllZFN0
cnVjdCAgICAgICAgICAgICAgICAgICA9ICZtb2RpZmllZFN0cnVjdDsKKysgICAgICAgIG1hY2hp
bmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNEZWY7CisrCisrICAg
ICAgICBvdXRNYWNoaW5lcmllcy5pbnNlcnQob3JpZ2luYWxTdHJ1Y3QsIG1hY2hpbmVyeSk7Cisr
ICAgIH0KKysKKysgICAgdm9pZCBwdXNoUGF0aChQYXRoSXRlbSBjb25zdCAmaXRlbSkKKysgICAg
eworKyAgICAgICAgcGF0aEl0ZW1zLnB1c2hfYmFjayhpdGVtKTsKKysKKysgICAgICAgIHN3aXRj
aCAoaXRlbS50eXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZpZWxkOgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFt
ZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgo
aXRlbS5pbmRleCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKysgICAgICAgICAgICAgICAgbmFtZVBh
dGhTaXplcy5wdXNoX2JhY2sobmFtZVBhdGguc2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BQYXRoKCkKKysgICAgewor
KyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKysgICAgICAgIEFTU0VSVCghbmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgICAgIG5hbWVQYXRoLnJlc2l6ZShuYW1lUGF0aFNp
emVzLmJhY2soKSk7CisrICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisrCisrICAg
ICAgICBBU1NFUlQoIXBhdGhJdGVtcy5lbXB0eSgpKTsKKysgICAgICAgIHBhdGhJdGVtcy5wb3Bf
YmFjaygpOworKyAgICB9CisrCisrICAgIHZvaWQgZmluYWxpemUoKQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQoIWZpbmFsaXplZCk7CisrICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworKyAgICAg
ICAgaW50cm9kdWNlUGFja2luZygpOworKyAgICAgICAgQVNTRVJUKG1ldGFsTGF5b3V0VG90YWwg
PT0gTGF5b3V0OjpJZGVudGl0eSgpKTsKKysgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKysg
ICAgfQorKworKyAgICB2b2lkIGFkZE1vZGlmaWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlICZuZXdUeXBlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKysgICAgeworKyAg
ICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBuZXdUeXBlLmdldExheW91
dFF1YWxpZmllcigpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAg
PSBzdG9yYWdlOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgICAgPSBw
YWNraW5nOworKyAgICAgICAgbmV3VHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlm
aWVyKTsKKysKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBwYXRoTmFtZShuYW1lUGF0
aCk7CisrICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2sobmV3IFRGaWVsZCgmbmV3VHlw
ZSwgcGF0aE5hbWUsIGZpZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKSk7CisrICAgIH0K
KysKKysgICAgdm9pZCBhZGRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNpb25GdW5jICZmdW5jKQor
KyAgICB7CisrICAgICAgICBBU1NFUlQoIW1vZGlmaWVkRmllbGRzLmVtcHR5KCkpOworKyAgICAg
ICAgY29udmVyc2lvbkluZm9zLnB1c2hfYmFjayh7ZnVuYywgbnVsbHB0ciwgcGF0aEl0ZW1zLCBt
b2RpZmllZEZpZWxkcy5iYWNrKCktPm5hbWUoKX0pOworKyAgICB9CisrCisrICAgIHZvaWQgYWRk
Q29udmVyc2lvbihjb25zdCBURnVuY3Rpb24gJmZ1bmMpCisrICAgIHsKKysgICAgICAgIEFTU0VS
VCghbW9kaWZpZWRGaWVsZHMuZW1wdHkoKSk7CisrICAgICAgICBjb252ZXJzaW9uSW5mb3MucHVz
aF9iYWNrKHt7fSwgJmZ1bmMsIHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1l
KCl9KTsKKysgICAgfQorKworKyAgICBib29sIGhhc1BhY2tpbmcoKSBjb25zdCB7IHJldHVybiBj
b250YWluc1BhY2tlZDsgfQorKworKyAgICBib29sIGhhc1BhZGRpbmcoKSBjb25zdCB7IHJldHVy
biBwYWRGaWVsZENvdW50ID4gMDsgfQorKworKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
KyAgICB7CisrICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IG91dE1h
Y2hpbmVyaWVzLmZpbmQoc3RydWN0dXJlKTsKKysgICAgICAgIGlmIChtID09IG51bGxwdHIpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3
TmFtZShzdHJ1Y3R1cmUubmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgaWYgKCFUcnlDcmVh
dGVNb2RpZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFt
ZSwgb3V0TWFjaGluZXJpZXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBtID0gb3V0TWFjaGluZXJp
ZXMuZmluZChzdHJ1Y3R1cmUpOworKyAgICAgICAgICAgIEFTU0VSVChtKTsKKysgICAgICAgIH0K
KysgICAgICAgIG91dE1hY2hpbmVyeSA9ICptOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAg
IH0KKysKKysgIHByaXZhdGU6CisrICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50
LCBib29sIHVwZGF0ZUxheW91dCkKKysgICAgeworKyAgICAgICAgaWYgKHBhZEFtb3VudCA9PSAw
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysKKysgICAg
ICAgIGNvbnN0IHNpemVfdCBiZWdpbiA9IG1vZGlmaWVkRmllbGRzLnNpemUoKTsKKysKKysgICAg
ICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBpbiBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVj
YXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxsIG5vdAorKyAgICAgICAgLy8gYWxsb3cgbWF0cml4
IG9yIGFycmF5IG1lbWJlcnMuCisrICAgICAgICB3aGlsZSAocGFkQW1vdW50ID4gMCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBUVHlwZSAqcGFkVHlwZTsKKysgICAgICAgICAgICBpZiAocGFk
QW1vdW50ID49IDE2KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDE2OworKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidEZsb2F0LCA0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocGFk
QW1vdW50ID49IDgpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBwYWRBbW91bnQg
LT0gODsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRGbG9hdCwgMik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBhZEFt
b3VudCA+PSA0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09
IDQ7CisrICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0
RmxvYXQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQg
Pj0gMikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBhZEFtb3VudCAtPSAyOwor
KyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2ws
IDIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworKyAgICAgICAgICAgICAg
ICBwYWRBbW91bnQgLT0gMTsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KHVwZGF0ZUxheW91dCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5
b3V0VG90YWwgKz0gTWV0YWxMYXlvdXRPZigqcGFkVHlwZSk7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoInBhZCIp
OworKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjaygKKysgICAgICAgICAgICAg
ICAgbmV3IFRGaWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1l
LnN5bWJvbFR5cGUoKSkpOworKyAgICAgICAgICAgICsrcGFkRmllbGRDb3VudDsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHN0ZDo6cmV2ZXJzZShtb2RpZmllZEZpZWxkcy5iZWdpbigpICsgYmVn
aW4sIG1vZGlmaWVkRmllbGRzLmVuZCgpKTsKKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVj
ZVBhY2tpbmcoKQorKyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAg
YXV0byBzZXRVbnBhY2tlZFN0b3JhZ2UgPSBbXShUVHlwZSAmdHlwZSkgeworKyAgICAgICAgICAg
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCku
YmxvY2tTdG9yYWdlOworKyAgICAgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVk
OgorKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBj
YXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7CisrICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzU3RkNDMwOgorKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1Vuc3BlY2lmaWVkOgorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIFNldEJsb2NrU3RvcmFnZSh0eXBlLCBzdG9yYWdlKTsKKysgICAgICAg
IH07CisrCisrICAgICAgICBMYXlvdXQgZ2xzbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVkRmllbGRzLnNp
emUoKTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIFRGaWVsZCAmY3VyciAgICAgICAgICAgPSAqbW9kaWZpZWRG
aWVsZHNbaV07CisrICAgICAgICAgICAgVFR5cGUgJmN1cnJUeXBlICAgICAgICA9ICpjdXJyLnR5
cGUoKTsKKysgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNrZWQo
Y3VyclR5cGUpOworKworKyAgICAgICAgICAgIGF1dG8gZG9udFBhY2sgPSBbJl0oKSB7CisrICAg
ICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgc2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKysgICAgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgICAgICBnbHNsTGF5b3V0VG90YWwgKz0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKysgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgIGlmICghQ2FuQmVQ
YWNrZWQoY3VyclR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZG9udFBh
Y2soKTsKKysgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgfQorKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBwYWNrZWRHbHNsTGF5b3V0ICAgICAgICAgICA9IEdsc2xM
YXlvdXRPZihjdXJyVHlwZSk7CisrICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBwYWNrZWRTdG9yYWdlID0gY3VyclR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9y
YWdlOworKyAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisrICAgICAg
ICAgICAgY29uc3QgTGF5b3V0IHVucGFja2VkR2xzbExheW91dCA9IEdsc2xMYXlvdXRPZihjdXJy
VHlwZSk7CisrICAgICAgICAgICAgU2V0QmxvY2tTdG9yYWdlKGN1cnJUeXBlLCBwYWNrZWRTdG9y
YWdlKTsKKysKKysgICAgICAgICAgICBBU1NFUlQocGFja2VkR2xzbExheW91dC5zaXplT2YgPD0g
dW5wYWNrZWRHbHNsTGF5b3V0LnNpemVPZik7CisrICAgICAgICAgICAgaWYgKHBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mID09IHVucGFja2VkR2xzbExheW91dC5zaXplT2YpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkb250UGFjaygpOworKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGogPSBpICsg
MTsKKysgICAgICAgICAgICBpZiAoaiA9PSBzaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZG9udFBhY2soKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFj
a2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNrZWRHbHNsTGF5b3V0LnNpemVPZjsKKysgICAgICAg
ICAgICBjb25zdCBURmllbGQgJm5leHQgICAgICAgICAgPSAqbW9kaWZpZWRGaWVsZHNbal07Cisr
ICAgICAgICAgICAgY29uc3QgTGF5b3V0IG5leHRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKCpu
ZXh0LnR5cGUoKSk7CisrCisrICAgICAgICAgICAgaWYgKHBhZCA8IG5leHRHbHNsTGF5b3V0LnNp
emVPZikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisrICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBz
eW1ib2xFbnYubWFya0FzUGFja2VkKGN1cnIpOworKyAgICAgICAgICAgIGdsc2xMYXlvdXRUb3Rh
bCArPSBwYWNrZWRHbHNsTGF5b3V0OworKyAgICAgICAgICAgIGNvbnRhaW5zUGFja2VkID0gdHJ1
ZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVjZVBhZGRpbmcoKQor
KyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAgTWV0YWxMYXlvdXRP
ZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tp
bmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKysgICAgICAgIGxheW91dENv
bmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IHRydWU7CisrCisrICAgICAgICBURmll
bGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisrICAgICAgICBBU1NF
UlQoIWZpZWxkcy5lbXB0eSgpKTsgIC8vIEdMU0wgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1lbWJl
ci4KKysKKysgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKysKKysgICAgICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkcykKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsK
KysgICAgICAgICAgICBjb25zdCBMYXlvdXQgbWV0YWxMYXlvdXQgPSBNZXRhbExheW91dE9mKHR5
cGUsIGxheW91dENvbmZpZyk7CisrCisrICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9
IDA7CisrICAgICAgICAgICAgaWYgKGdsc2xMYXlvdXQuYWxpZ25PZiA+IG1ldGFsTGF5b3V0LmFs
aWduT2YgJiYgZmllbGQgIT0gZmlyc3QpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOwor
KyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRvdGFsLnJlcXVpcmVBbGlnbm1lbnQoZ2xzbExh
eW91dC5hbGlnbk9mLCB0cnVlKTsKKysgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZGRl
ZFNpemUgPSBtZXRhbExheW91dFRvdGFsLnNpemVPZjsKKysgICAgICAgICAgICAgICAgcHJlUGFk
QW1vdW50ICAgICAgICAgICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKysgICAgICAg
ICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCArPSBtZXRhbExheW91dDsKKysgICAgICAgICAgICAg
ICAgYWRkUGFkZGluZyhwcmVQYWRBbW91bnQsIGZhbHNlKTsgIC8vIE5vdGU6IHJlcXVpcmVBbGln
bm1lbnQoKSBhbHJlYWR5IHVwZGF0ZWQgbGF5b3V0CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90
YWwgKz0gbWV0YWxMYXlvdXQ7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIG1vZGlm
aWVkRmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisrCisrICAgICAgICAgICAgaWYgKGdsc2xMYXlv
dXQuc2l6ZU9mID4gbWV0YWxMYXlvdXQuc2l6ZU9mICYmIGZpZWxkICE9IGZpZWxkcy5iYWNrKCkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBib29sIHVwZGF0ZUxheW91
dCA9IHRydWU7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwYWRBbW91bnQgID0gZ2xzbExheW91dC5zaXplT2YgLSBtZXRhbExheW91dC5zaXplT2Y7Cisr
ICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFkQW1vdW50LCB1cGRhdGVMYXlvdXQpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0
aChjb25zdCBjaGFyICpleHRyYSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKGV4dHJhICYmICpl
eHRyYSAhPSAnXDAnKTsKKysgICAgICAgIG5hbWVQYXRoU2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRo
LnNpemUoKSk7CisrICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7CisrICAgICAgICBpZiAo
bmFtZVBhdGguZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBuYW1lUGF0aCA9IHA7
CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgd2hpbGUgKCpwID09
ICdfJykKKysgICAgICAgIHsKKysgICAgICAgICAgICArK3A7CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoKnAgPT0gJ1wwJykKKysgICAgICAgIHsKKysgICAgICAgICAgICBwID0gIngiOworKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKG5hbWVQYXRoLmJhY2soKSAhPSAnXycpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbmFtZVBhdGggKz0gJ18nOworKyAgICAgICAgfQorKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBl
eHRyYSkKKysgICAgeworKyAgICAgICAgY2hhciBidWZmZXJbc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisrICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1Iiwg
ZXh0cmEpOworKyAgICAgICAgcHVzaE5hbWVQYXRoKGJ1ZmZlcik7CisrICAgIH0KKysKKysgIHB1
YmxpYzoKKysgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZjb25maWc7CisrICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52OworKworKyAgcHJpdmF0ZToKKysgICAgVEZpZWxkTGlzdCAmbW9kaWZp
ZWRGaWVsZHM7CisrICAgIExheW91dCBtZXRhbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICBzaXplX3QgcGFkRmllbGRDb3VudCAgICA9IDA7CisrICAgIGJvb2wgY29udGFp
bnNQYWNrZWQgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZmluYWxpemVkICAgICAgICAgID0gZmFs
c2U7CisrCisrICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrCisrICAgIHN0
ZDo6dmVjdG9yPHNpemVfdD4gbmFtZVBhdGhTaXplczsKKysgICAgc3RkOjpzdHJpbmcgbmFtZVBh
dGg7CisrCisrICAgIHN0ZDo6dmVjdG9yPENvbnZlcnNpb25JbmZvPiBjb252ZXJzaW9uSW5mb3M7
CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGU7CisrICAgIElkR2VuICZpZEdlbjsKKysg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXM7CisrfTsKKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIE1vZGlmeUZ1bmMgPSBib29sICgqKShD
b252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpOworKworK2Jvb2wgTW9kaWZ5UmVj
dXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisrCisrYm9vbCBJZGVudGl0eU1vZGlmeShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAg
IHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIENsb25lVHlwZSh0eXBlKSwgc3RvcmFnZSwg
cGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKysgICAgfSk7CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAg
ICAgID0gKmZpZWxkLnR5cGUoKTsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJl
ID0gc3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworKyAgICBpZiAoIXN1
YnN0cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIGlmICghc3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBURmllbGRMaXN0
ICZzdWJmaWVsZHMgPSBzdWJzdHJ1Y3R1cmUtPmZpZWxkcygpOworKyAgICBmb3IgKGNvbnN0IFRG
aWVsZCAqc3ViZmllbGQgOiBzdWJmaWVsZHMpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBl
ICZzdWJ0eXBlICAgICAgICAgICAgICAgICAgPSAqc3ViZmllbGQtPnR5cGUoKTsKKysgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2Us
IHN1YnR5cGUpOworKyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgc3VicGFja2lu
ZyA9IE92ZXJsYXkocGFja2luZywgc3VidHlwZSk7CisrICAgICAgICBNb2RpZnlSZWN1cnNpdmUo
c3RhdGUsICpzdWJmaWVsZCwgc3Vic3RvcmFnZSwgc3VicGFja2luZyk7CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUmVjdXJzZVN0cnVjdChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
KyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisr
eworKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgICAgPSAqZmllbGQudHlwZSgpOwor
KyAgICBjb25zdCBUU3RydWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBzdGF0ZS5zeW1ib2xFbnYucmVt
YXAodHlwZS5nZXRTdHJ1Y3QoKSk7CisrICAgIGlmICghc3Vic3RydWN0dXJlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFzdGF0ZS5jb25maWcucmVj
dXJzZVN0cnVjdChmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisrICAgIGlmICgh
c3RhdGUucmVjdXJzZSgqc3Vic3RydWN0dXJlLCBtYWNoaW5lcnkpKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRU
eXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworKyAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCisrICAgIHsKKysgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisrICAgIH0KKysKKysgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29u
dmVydGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUp
OworKyAgICBBU1NFUlQoY29udmVydGVyKTsKKysKKysgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVs
ZChmaWVsZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZl
cnNpb24oKmNvbnZlcnRlci0+Z2V0RnVuY3Rpb24oKSk7CisrCisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICgh
dHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysgICAgaWYgKCFzdGF0ZS5jb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zKGZpZWxkKSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xz
ID0gdHlwZS5nZXRDb2xzKCk7CisrICAgIFRUeXBlICZyb3dUeXBlID0gRHJvcENvbHVtbnModHlw
ZSk7CisrCisrICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgKytjKQorKyAgICB7CisrICAg
ICAgICBzdGF0ZS5wdXNoUGF0aChjKTsKKysKKysgICAgICAgIHN0YXRlLmFkZE1vZGlmaWVkRmll
bGQoZmllbGQsIHJvd1R5cGUsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3RhdGUuYWRk
Q29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVk
QWNjZXNzICZtKSB7CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvLCBtfTsKKysgICAgICAg
IH0pOworKworKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIHJldHVy
biB0cnVlOworK30KKysKKytib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3RydWN0U3Rh
dGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5n
IHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7Cisr
ICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysgICAgY29uc3QgaW50IHJvd3MgICAgICAgPSB0eXBlLmdldFJvd3MoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzdGF0ZS5jb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
KGZpZWxkKTsKKysgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRD
b2xzKCk7CisrICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVy
YXRpb24pOworKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9y
YWdlLCBwYWNraW5nKTsKKysKKysgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisr
ICAgIHsKKysgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgKytyKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgICAgICAgICBh
dXRvICZvXyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0luZGV4KG8sIGMpLCByKTsKKysgICAgICAgICAg
ICAgICAgYXV0byAmbV8gPSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9KTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUZXN0
Qm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxk
KQorK3sKKysgICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gVEJhc2ljVHlw
ZTo6RWJ0Qm9vbCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29sVG9VaW50KGZpZWxkKSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytB
Y2Nlc3MgQ29udmVydEJvb2xUb1VpbnQoQ29udmVydFR5cGUgY29udmVydFR5cGUsIE9yaWdpbmFs
QWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkKKyt7CisrICAgIGF1dG8gY29lcmNlID0gW10o
VEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50ZXJtVHlwZWQgJiB7
CisrICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHRv
LmdldFR5cGUoKSwgbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbX0pOworKyAgICB9OworKyAgICBz
d2l0Y2ggKGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpP
cmlnaW5hbFRvTW9kaWZpZWQ6CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2VyY2UobSwg
byksIG19OworKyAgICAgICAgY2FzZSBDb252ZXJ0VHlwZTo6TW9kaWZpZWRUb09yaWdpbmFsOgor
KyAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7bywgY29lcmNlKG8sIG0pfTsKKysgICAgfQorK30K
KysKKytib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRl
ICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxk
ICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFycmF5KQorK3sKKysgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgIT0gYXJyYXkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoISgodHlw
ZS5pc1JhbmswKCkgJiYgSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUpKSB8fCB0eXBlLmlzVmVjdG9y
KCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgY29uc3Qg
YXV0byBzYXR1cmF0b3IgPQorKyAgICAgICAgYXJyYXkgPyBzdGF0ZS5jb25maWcuc2F0dXJhdGVT
Y2FsYXJPclZlY3RvckFycmF5cyA6IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9y
OworKyAgICBjb25zdCBpbnQgZGltICAgICAgICA9IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworKyAgICBpZiAoc2F0
dXJhdGlvbiA8PSBkaW0pCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KworKyAgICBUVHlwZSAmc2F0VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJh
dGlvbik7CisrICAgIGNvbnN0IGJvb2wgYm9vbFRvVWludCA9IFRlc3RCb29sVG9VaW50KHN0YXRl
LCBmaWVsZCk7CisrICAgIGlmIChib29sVG9VaW50KQorKyAgICB7CisrICAgICAgICBzYXRUeXBl
LnNldEJhc2ljVHlwZShUQmFzaWNUeXBlOjpFYnRVSW50KTsKKysgICAgfQorKyAgICBzdGF0ZS5h
ZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKysKKysg
ICAgZm9yIChpbnQgZCA9IDA7IGQgPCBkaW07ICsrZCkKKysgICAgeworKyAgICAgICAgc3RhdGUu
YWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJmVudiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1v
ZGlmaWVkQWNjZXNzICZtKSB7CisrICAgICAgICAgICAgYXV0byAmb18gPSBkaW0gPiAxID8gQWNj
ZXNzSW5kZXgobywgZCkgOiBvOworKyAgICAgICAgICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgo
bSwgZCk7CisrICAgICAgICAgICAgaWYgKGJvb2xUb1VpbnQpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xUb1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICB9KTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBTYXR1
cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9y
VmVjdG9yQ29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgdHJ1ZSk7CisrfQor
KworK2Jvb2wgU2F0dXJhdGVTY2FsYXJPclZlY3RvcihDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCisreworKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJPclZlY3RvckNvbW1v
bihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIGZhbHNlKTsKKyt9CisrCisrYm9vbCBQ
cm9tb3RlQm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBpZiAoIVRl
c3RCb29sVG9VaW50KHN0YXRlLCBmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBhdXRvICZwcm9tb3RlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxk
LnR5cGUoKSk7CisrICAgIHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0
VUludCk7CisrICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHByb21vdGVkVHlwZSwg
c3RvcmFnZSwgcGFja2luZyk7CisrCisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vz
czo6RW52ICZlbnYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRCb29sVG9VaW50KGVudi50eXBlLCBvLCBtKTsKKysgICAgfSk7
CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIE1vZGlmeUNvbW1vbihDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmll
bGQsCisrICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdl
LAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10gPSB7CisrICAgICAgICBJbmxpbmVTdHJ1Y3Qs
ICAgICAgICAgICAgICAgICAgLy8KKysgICAgICAgIFJlY3Vyc2VTdHJ1Y3QsICAgICAgICAgICAg
ICAgICAvLworKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAgICAgICAgICAgIC8vCisrICAg
ICAgICBTYXR1cmF0ZU1hdHJpeFJvd3MsICAgICAgICAgICAgLy8KKysgICAgICAgIFNhdHVyYXRl
U2NhbGFyT3JWZWN0b3JBcnJheXMsICAvLworKyAgICAgICAgU2F0dXJhdGVTY2FsYXJPclZlY3Rv
ciwgICAgICAgIC8vCisrICAgICAgICBQcm9tb3RlQm9vbFRvVWludCwgICAgICAgICAgICAgLy8K
KysgICAgfTsKKysKKysgICAgZm9yIChNb2RpZnlGdW5jIGZ1bmMgOiBmdW5jcykKKysgICAgewor
KyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKwor
KyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyt9CisrCisrYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
KyAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5p
bmxpbmVBcnJheShmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1
Y3QoKTsKKysgICAgY29uc3QgYm9vbCBpc011bHRpRGltID0gdHlwZS5pc0FycmF5T2ZBcnJheXMo
KTsKKysKKysgICAgYXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7Cisr
ICAgIGNvbnN0IFRGaWVsZCBpbm5lcm1vc3RGaWVsZCgmaW5uZXJtb3N0VHlwZSwgZmllbGQubmFt
ZSgpLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJvbFR5cGUoKSk7CisrCisrICAgIGlmIChpc011
bHRpRGltKQorKyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChGbGF0dGVuQXJyYXkoKSk7
CisrICAgIH0KKysKKysgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQor
KyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChpKTsKKysgICAgICAgIE1vZGlmeUNvbW1v
bihzdGF0ZSwgaW5uZXJtb3N0RmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3Rh
dGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIGlmIChpc011bHRpRGltKQorKyAgICB7Cisr
ICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7Cisr
fQorKworK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisr
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHN0
YXRlLnB1c2hQYXRoKGZpZWxkKTsKKysKKysgICAgYm9vbCBtb2RpZmllZDsKKysgICAgaWYgKElu
bGluZUFycmF5KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZykpCisrICAgIHsKKysgICAg
ICAgIG1vZGlmaWVkID0gdHJ1ZTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IG1vZGlmaWVkID0gTW9kaWZ5Q29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZyk7
CisrICAgIH0KKysKKysgICAgc3RhdGUucG9wUGF0aCgpOworKworKyAgICByZXR1cm4gbW9kaWZp
ZWQ7CisrfQorKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworKworK2Jvb2wgc2g6OlRyeUNyZWF0ZU1vZGlmaWVkU3RydWN0KFN5bWJvbEVu
diAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1
Y3RDb25maWcgJmNvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUU3RydWN0dXJlICZvcmlnaW5hbFN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJp
ZXMpCisreworKyAgICBDb252ZXJ0U3RydWN0U3RhdGUgc3RhdGUoc3ltYm9sRW52LCBpZEdlbiwg
Y29uZmlnLCBvdXRNYWNoaW5lcmllcyk7CisrICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50
ID0gMDsKKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmb3JpZ2luYWxGaWVsZHMgPSBvcmlnaW5h
bFN0cnVjdC5maWVsZHMoKTsKKysgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmln
aW5hbEZpZWxkcykKKysgICAgeworKyAgICAgICAgY29uc3QgVFR5cGUgJm9yaWdpbmFsVHlwZSAg
ICAgICAgICA9ICpvcmlnaW5hbEZpZWxkLT50eXBlKCk7CisrICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFn
ZSwgb3JpZ2luYWxUeXBlKTsKKysgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcgPSBPdmVybGF5KGNvbmZpZy5pbml0aWFsTWF0cml4UGFja2luZywgb3JpZ2luYWxUeXBl
KTsKKysgICAgICAgIGlmICghTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqb3JpZ2luYWxGaWVsZCwg
c3RvcmFnZSwgcGFja2luZykpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytpZGVudGljYWxG
aWVsZENvdW50OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHN0YXRlLmZpbmFsaXplKCk7
CisrCisrICAgIGlmIChpZGVudGljYWxGaWVsZENvdW50ID09IG9yaWdpbmFsRmllbGRzLnNpemUo
KSAmJiAhc3RhdGUuaGFzUGFja2luZygpICYmICFzdGF0ZS5oYXNQYWRkaW5nKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBzdGF0ZS5wdWJsaXNoKG9y
aWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUpOworKworKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L01vZGlmeVN0cnVjdC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uNGI4Y2ZjNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCitAQCAtMCwwICsxLDEz
NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1RfSF8KKysKKysjaW5jbHVk
ZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisr
CisrbmFtZXNwYWNlIHNoCisreworKworK2VudW0gY2xhc3MgQ29udmVydFR5cGUKKyt7CisrICAg
IE9yaWdpbmFsVG9Nb2RpZmllZCwKKysgICAgTW9kaWZpZWRUb09yaWdpbmFsLAorK307CisrCisr
Ly8gQ29uZmlndXJlcyBob3cgc3RydWN0IG1vZGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuCisrY2xh
c3MgTW9kaWZ5U3RydWN0Q29uZmlnCisreworKyAgcHVibGljOgorKyAgICBzdHJ1Y3QgUHJlZGlj
YXRlCisrICAgIHsKKysgICAgICAgIHVzaW5nIEZ1bmMgPSBib29sICgqKShjb25zdCBURmllbGQg
Jik7CisrICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgICAgIHN0YXRpYyBib29sIFRydWUoY29uc3QgVEZpZWxkICYpIHsgcmV0
dXJuIHRydWU7IH0KKysgICAgfTsKKysKKysgICAgc3RydWN0IFNhdHVyYXRlVmVjdG9yCisrICAg
IHsKKysgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4K
KysgICAgICAgIC8vIElmIG9yaWdpbmFsIGRpbSA+PSByZXR1cm4gdmFsdWUsIHRoZSBmaWVsZCBy
ZW1haW5zIHVudG91Y2hlZC4KKysgICAgICAgIHVzaW5nIEZ1bmMgPSBpbnQgKCopKGNvbnN0IFRG
aWVsZCAmKTsKKysgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAm
KSB7IHJldHVybiAwOyB9CisrICAgICAgICBzdGF0aWMgaW50IEZ1bGx5U2F0dXJhdGUoY29uc3Qg
VEZpZWxkICYpIHsgcmV0dXJuIDQ7IH0KKysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgTW9k
aWZ5U3RydWN0Q29uZmlnKENvbnZlcnRUeXBlIGNvbnZlcnRUeXBlLCBib29sIGFsbG93UGFja2lu
ZywgYm9vbCBhbGxvd1BhZGRpbmcpCisrICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBl
KSwgYWxsb3dQYWNraW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcp
CisrICAgIHt9CisrCisrICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxl
IGZpZWxkcyBvZiByb3cgdmVjdG9ycy4KKysgICAgUHJlZGljYXRlOjpGdW5jIHNwbGl0TWF0cml4
Q29sdW1ucyA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8vIEFycmF5IGZpZWxkcyBhcmUg
c3BsaXQgaW50byBtdWx0aXBsZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorKyAgICBQcmVkaWNh
dGU6OkZ1bmMgaW5saW5lQXJyYXkgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBTdHJ1
Y3QgZmllbGRzIGhhdmUgdGhlaXIgc3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisrICAgIFBy
ZWRpY2F0ZTo6RnVuYyBpbmxpbmVTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAv
LyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZC4KKysgICAgUHJlZGljYXRlOjpGdW5jIHJlY3Vy
c2VTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxh
ciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQgdG8gdWludCBmaWVsZHMuCisrICAgIFByZWRpY2F0
ZTo6RnVuYyBwcm9tb3RlQm9vbFRvVWludCA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8v
IENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFy
ZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKysgICAgLy8gZS5nLiBgZmxvYXQgLT4gZmxvYXQ0YC4KKysg
ICAgLy8gZS5nLiBgZmxvYXQyIC0+IGZsb2F0NGAuCisrICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5j
IHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOwor
KworKyAgICAvLyBDcmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBzY2FsYXIgb3IgdmVjdG9y
IGFycmF5IGZpZWxkcyBhcmUgc2F0dXJhdGVkLgorKyAgICAvLyBlLmcuIGBmbG9hdFsxMF0gLT4g
ZmxvYXQ0WzEwXWAKKysgICAgLy8gZS5nLiBgZmxvYXQyWzEwXSAtPiBmbG9hdDRbMTBdYAorKyAg
ICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzID0gU2F0
dXJhdGVWZWN0b3I6OkRvbnRTYXR1cmF0ZTsKKysKKysgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1
Y3R1cmUgd2hlcmUgbWF0cml4IGZpZWxkcyBhcmUgcm93LXNhdHVyYXRlZC4KKysgICAgLy8gZS5n
LiBgZmxvYXQyeDIgLT4gZmxvYXQyeDRgLgorKyAgICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1
cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworKworKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIGluaXRpYWxCbG9ja1N0b3JhZ2UgICA9IGtEZWZhdWx0TGF5b3V0
QmxvY2tTdG9yYWdlOworKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0cml4UGFj
a2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKysgICAgQ29udmVydFR5cGUgY29u
dmVydFR5cGU7CisrICAgIGJvb2wgYWxsb3dQYWNraW5nOworKyAgICBib29sIGFsbG93UGFkZGlu
ZzsKKysgICAgQWRkcmVzc1NwYWNlIGV4dGVybmFsQWRkcmVzc1NwYWNlOworK307CisrCisrc3Ry
dWN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5CisreworKyAgICBjb25zdCBUU3RydWN0dXJlICpt
b2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKysgICAgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxs
cHRyOworKworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uIComZ2V0Q29udmVydGVyKENv
bnZlcnRUeXBlIGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBpZiAoY29udmVydFR5cGUg
PT0gQ29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gZnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgICAgIH0KKysgICAgICAg
IGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9Pcmln
aW5hbDsKKysgICAgICAgIH0KKysgICAgfQorK307CisrCisrLy8gSW5kZXhlZCBieSB0b3BvbG9n
aWNhbCBvcmRlci4KKytjbGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCisreworKyAgcHVi
bGljOgorKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworKyAgICBjb25zdCBNb2RpZmllZFN0cnVj
dE1hY2hpbmVyeSAmYXQoc2l6ZV90IGluZGV4KSBjb25zdDsKKysgICAgY29uc3QgTW9kaWZpZWRT
dHJ1Y3RNYWNoaW5lcnkgKmZpbmQoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3Q7CisrICAgIHZv
aWQgaW5zZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJ5ICZtYWNoaW5lcnkpOworKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9N
YWNoaW5lcnk7CisrICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gb3JkZXJpbmc7
CisrfTsKKysKKysvLyBSZXR1cm5zIHRydWUgYW5kIGBvdXRNYWNoaW5lcnlgIHBvcHVsYXRlZCBp
ZiBtb2RpZmljYXRpb25zIHdlcmUgcGVyZm9ybWVkLgorKy8vIFJldHVybnMgZmFsc2Ugb3RoZXJ3
aXNlLgorK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNvbmZpZywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3Ry
dWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmbW9kaWZpZWRT
dHJ1Y3ROYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RN
YWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9E
SUZZU1RSVUNUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw
MDAwMC4uMDdjNWQxOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCitAQCAtMCwwICsxLDIyMCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
KworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyBJbW11dGFibGVTdHJpbmcgR2V0TmFtZShU
IGNvbnN0ICZvYmplY3QpCisreworKyAgICBpZiAob2JqZWN0LnN5bWJvbFR5cGUoKSA9PSBTeW1i
b2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGtFbXB0eUltbXV0YWJsZVN0
cmluZzsKKysgICAgfQorKyAgICByZXR1cm4gb2JqZWN0Lm5hbWUoKTsKKyt9CisrCisrTmFtZTo6
TmFtZShjb25zdCBURmllbGQgJmZpZWxkKSA6IE5hbWUoR2V0TmFtZShmaWVsZCksIGZpZWxkLnN5
bWJvbFR5cGUoKSkge30KKysKKytOYW1lOjpOYW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCkgOiBO
YW1lKEdldE5hbWUoc3ltYm9sKSwgc3ltYm9sLnN5bWJvbFR5cGUoKSkge30KKysKKytib29sIE5h
bWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4g
bVJhd05hbWUgPT0gb3RoZXIubVJhd05hbWUgJiYgbVN5bWJvbFR5cGUgPT0gb3RoZXIubVN5bWJv
bFR5cGU7CisrfQorKworK2Jvb2wgTmFtZTo6b3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyt9CisrCisrYm9vbCBO
YW1lOjpvcGVyYXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICBpZiAobVJh
d05hbWUgPCBvdGhlci5tUmF3TmFtZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7Cisr
ICAgIH0KKysgICAgaWYgKG90aGVyLm1SYXdOYW1lIDwgbVJhd05hbWUpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gbVN5bWJvbFR5cGUgPCBvdGhl
ci5tU3ltYm9sVHlwZTsKKyt9CisrCisrYm9vbCBOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAg
ICByZXR1cm4gbVN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHk7CisrfQorKworK2Jvb2wg
TmFtZTo6YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0CisreworKyAgICBpZiAo
bVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1TeW1ib2xUeXBlKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIG1SYXdOYW1lLmJlZ2luc1dpdGgocHJlZml4
Lm1SYXdOYW1lKTsKKyt9CisrCisrdm9pZCBOYW1lOjplbWl0KFRJbmZvU2lua0Jhc2UgJm91dCkg
Y29uc3QKKyt7CisrICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKysgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQ6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKysgICAgICAg
ICAgICBvdXQgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3
TmFtZS5lbXB0eSgpKTsKKysgICAgICAgICAgICBpZiAobVJhd05hbWUuYmVnaW5zV2l0aChrQW5n
bGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBvdXQg
PDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1SYXdO
YW1lWzBdICE9ICdfJykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8PCBr
QW5nbGVJbnRlcm5hbFByZWZpeCA8PCAnXycgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8
PCBrQW5nbGVJbnRlcm5hbFByZWZpeCA8PCBtUmF3TmFtZTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrLy8g
Tk9URTogVGhpcyBtYXRjaGVzIG1vcmUgdGhpbmdzIHRoYW4gRmluZFN5bWJvbE5vZGUuCisrY2xh
c3MgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgorK3sKKysgICAgTmFtZSBtTmFtZTsKKysgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7Cisr
CisrICBwdWJsaWM6CisrICAgIEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5h
bWUgJm5hbWUpCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNl
KSwgbU5hbWUobmFtZSkKKysgICAge30KKysKKysgICAgYm9vbCBmb3VuZE5hbWUoKSBjb25zdCB7
IHJldHVybiBtRm91bmROYW1lOyB9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKE5hbWUobm9kZS0+dmFy
aWFibGUoKSkgPT0gbU5hbWUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUZvdW5kTmFtZSA9
IHRydWU7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlz
aXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9Cisr
CisrICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
IG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9CisrCisrICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZSAgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZSB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQorKworKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1Y3RvcigpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IG5v
ZGUtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUg
PSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUgJiYgTmFtZSgq
c3RydWN0dXJlKSA9PSBtTmFtZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1G
b3VuZE5hbWUgPSB0cnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBub2Rl
LT5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09
IG1OYW1lKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRy
dWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuICFtRm91bmRO
YW1lOworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRJZkVsc2UoVmlzaXQgdmlzaXQsIFRJbnRl
cm1JZkVsc2UgKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRj
aChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGJvb2wgdmlz
aXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHZv
aWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3Zl
cnJpZGUgeyBMT0dJQ19FUlJPUigpOyB9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlk
ZQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisrICAg
IHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0QnJhbmNoKFZp
c2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VS
Uk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgdm9pZCB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92
ZXJyaWRlIHsgTE9HSUNfRVJST1IoKTsgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorKworK2Jvb2wgc2g6OkV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFt
ZSwgVEludGVybVR5cGVkICZub2RlKQorK3sKKysgICAgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZp
c2l0b3IgdmlzaXRvcihuYW1lKTsKKysgICAgbm9kZS50cmF2ZXJzZSgmdmlzaXRvcik7CisrICAg
IHJldHVybiB2aXNpdG9yLmZvdW5kTmFtZSgpOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaAorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ2ZWFlYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKK0BAIC0wLDAg
KzEsNjggQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbmZvU2luay5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5v
ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysK
Kytjb25zdGV4cHIgY2hhciBrQW5nbGVJbnRlcm5hbFByZWZpeFtdID0gIkFOR0xFIjsKKysKKysv
LyBSZXByZXNlbnRzIHRoZSBuYW1lIG9mIGEgc3ltYm9sLgorK2NsYXNzIE5hbWUKKyt7CisrICBw
dWJsaWM6CisrICAgIGNvbnN0ZXhwciBOYW1lKGNvbnN0IE5hbWUgJikgPSBkZWZhdWx0OworKwor
KyAgICBjb25zdGV4cHIgTmFtZSgpIDogTmFtZShrRW1wdHlJbW11dGFibGVTdHJpbmcsIFN5bWJv
bFR5cGU6OkVtcHR5KSB7fQorKworKyAgICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFi
bGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorKyAgICAgICAgOiBtUmF3
TmFtZShyYXdOYW1lKSwgbVN5bWJvbFR5cGUoc3ltYm9sVHlwZSkKKysgICAgeworKyAgICAgICAg
QVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAoc3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0
eSkpOworKyAgICB9CisrCisrICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIg
KnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJu
YWwpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBzeW1ib2xUeXBl
KQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZyYXdO
YW1lLCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3Ry
aW5nKHJhd05hbWUpLCBzeW1ib2xUeXBlKQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1l
KGNvbnN0IFRGaWVsZCAmZmllbGQpOworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRTeW1ib2wg
JnN5bWJvbCk7CisrCisrICAgIE5hbWUgJm9wZXJhdG9yPShjb25zdCBOYW1lICYpID0gZGVmYXVs
dDsKKysgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworKworKyAgICBjb25zdGV4cHIgY29uc3Qg
SW1tdXRhYmxlU3RyaW5nICZyYXdOYW1lKCkgY29uc3QgeyByZXR1cm4gbVJhd05hbWU7IH0KKysg
ICAgY29uc3RleHByIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1TeW1i
b2xUeXBlOyB9CisrCisrICAgIGJvb2wgZW1wdHkoKSBjb25zdDsKKysgICAgYm9vbCBiZWdpbnNX
aXRoKGNvbnN0IE5hbWUgJnByZWZpeCkgY29uc3Q7CisrCisrICAgIHZvaWQgZW1pdChUSW5mb1Np
bmtCYXNlICZvdXQpIGNvbnN0OworKworKyAgcHJpdmF0ZToKKysgICAgSW1tdXRhYmxlU3RyaW5n
IG1SYXdOYW1lOworKyAgICBTeW1ib2xUeXBlIG1TeW1ib2xUeXBlOworK307CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwg
VEludGVybVR5cGVkICZub2RlKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UGlwZWxpbmUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1BpcGVsaW5lLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU0
YzM3OGEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAKK0BAIC0wLDAgKzEsNDc2IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0J1aWx0SW4uaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKysKKysjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNl
KSAodmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorKwor
K2Jvb2wgUGlwZWxpbmU6OnVzZXMoY29uc3QgVFZhcmlhYmxlICZ2YXIpIGNvbnN0CisreworKyAg
ICBpZiAodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChnbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ2YXIgPT0gZ2xvYmFsSW5zdGFuY2VWYXI7Cisr
ICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBlICAgICAgPSB2YXIuZ2V0VHlwZSgp
OworKyAgICBjb25zdCBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmll
cigpOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4SW46CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUF0dHJpYnV0ZToKKysgICAg
ICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJbjoKKysgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhP
dXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRmxhdE91dDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludFNpemU6CisrICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUNlbnRyb2lkT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cU5vUGVyc3BlY3RpdmVPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
VmFyeWluZ091dDoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAg
ICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFGbGF0SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxU21vb3RoSW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJv
aWRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZl
SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ0luOgorKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBzd2l0Y2ggKHF1
YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxRnJhZ21lbnRPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0NvbG9yOgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEYXRh
OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEZXB0aDoKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysg
ICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVh
bGlmaWVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFVbmlmb3JtOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6
CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUdsb2JhbDoKKysgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6
OkV2cVZlcnRleElEOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRH
bG9iYWxzOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29vcmQ6CisrICAgICAg
ICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcm9udEZhY2luZzoKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlw
ZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8gZ2xvYmFs
SW5zdGFuY2VWYXIgc2hvdWxkIGJlIG5vbi1udWxsIGFuZCB0aHVzIG5ldmVyIHJlYWNoIGhlcmUu
CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBl
KCkpOworKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJl
dHVybiBOYW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkp
OworKyAgICB9CisrfQorKworK05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdFR5cGVOYW1lKFZhcmlh
bnQgdmFyaWFudCkgY29uc3QKKyt7CisrICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAgIHN3aXRj
aCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAg
ICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJWZXJ0ZXhJbiIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVmVydGV4T3V0Iik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiRnJhZ21lbnRJbiIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBuYW1l
ID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJGcmFnbWVudE91dCIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVXNlclVuaWZvcm1zIik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiQW5nbGVVbmlmb3JtcyIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAg
ICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiTm9uQ29uc3RHbG9iYWxzIik7
CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0
ZXhHbG9iYWxzOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIklu
dm9jYXRpb25WZXJ0ZXhHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9
IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscyIpOworKyAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAg
ICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIlRleHR1cmVFbnZzIik7CisrICAgICAg
ICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAg
ICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW5zdGFuY2VJZCIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICB9CisrICAgIHJldHVybiBOYW1lKG5hbWUpOworK30KKysKKytOYW1l
IFBpcGVsaW5lOjpnZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25zdAor
K3sKKysgICAgY29uc3QgY2hhciAqbmFtZTsKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5U
X05BTUUodmFyaWFudCwgInZlcnRleEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJ2ZXJ0ZXhPdXQiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJmcmFnbWVudEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgImZyYWdtZW50T3V0Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OlVzZXJVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJ1c2VyVW5pZm9ybXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJhbmdsZVVuaWZvcm1zIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFS
SUFOVF9OQU1FKHZhcmlhbnQsICJub25Db25zdEdsb2JhbHMiKTsKKysgICAgICAgICAgICBicmVh
azsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAg
ICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiaW52b2NhdGlvblZlcnRleEdsb2Jh
bHMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlv
bkZyYWdtZW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidGV4dHVyZUVudnMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnN0YW5jZUlkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0K
KysgICAgcmV0dXJuIE5hbWUobmFtZSk7CisrfQorKworK3N0YXRpYyBib29sIEFsbG93UGFja2lu
ZyhQaXBlbGluZTo6VHlwZSB0eXBlKQorK3sKKysgICAgdXNpbmcgVHlwZSA9IFBpcGVsaW5lOjpU
eXBlOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2Fz
ZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91
dDoKKysgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgIGNhc2UgVHlw
ZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
czoKKysgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKysgICAgICAgIGNhc2UgVHlwZTo6SW5z
dGFuY2VJZDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrc3Rh
dGljIGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCisreworKyAgICB1c2lu
ZyBUeXBlID0gUGlwZWxpbmU6OlR5cGU7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgewor
KyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OlZl
cnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5
cGU6OkZyYWdtZW50SW46CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25z
dGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
OgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorK30KKytlbnVtIENvbXBhcmUKKyt7CisrICAgIExULAorKyAgICBMVEUsCisrICAg
IEVRLAorKyAgICBHVEUsCisrICAgIEdULAorK307CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cisrc3RhdGljIGJvb2wgQ29tcGFyZUJ5KENvbXBhcmUgb3AsIGNvbnN0IFQgJngsIGNvbnN0IFQg
JnkpCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIExUOgorKyAg
ICAgICAgICAgIHJldHVybiB4IDwgeTsKKysgICAgICAgIGNhc2UgTFRFOgorKyAgICAgICAgICAg
IHJldHVybiB4IDw9IHk7CisrICAgICAgICBjYXNlIEVROgorKyAgICAgICAgICAgIHJldHVybiB4
ID09IHk7CisrICAgICAgICBjYXNlIEdURToKKysgICAgICAgICAgICByZXR1cm4geCA+PSB5Owor
KyAgICAgICAgY2FzZSBHVDoKKysgICAgICAgICAgICByZXR1cm4geCA+IHk7CisrICAgIH0KKyt9
CisrCisrdGVtcGxhdGUgPFRCYXNpY1R5cGUgQlQsIENvbXBhcmUgQ21wLCBpbnQgTWF0Y2hEaW0s
IGludCBOZXdEaW0+Cisrc3RhdGljIGludCBTYXR1cmF0ZVZlY3Rvck9mKGNvbnN0IFRGaWVsZCAm
ZmllbGQpCisreworKyAgICBzdGF0aWNfYXNzZXJ0KE5ld0RpbSA+PSBNYXRjaERpbSwgIiIpOwor
KworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIEFTU0VSVCh0
eXBlLmlzU2NhbGFyKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKysKKysgICAgY29uc3QgYm9vbCBj
b25kID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKysg
ICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZUJ5KENtcCwgdHlwZS5nZXROb21pbmFsU2l6ZSgp
LCBNYXRjaERpbSk7CisrCisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
TmV3RGltOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKytNb2RpZnlTdHJ1Y3RDb25m
aWcgUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCkgY29uc3QKKyt7CisrICAg
IHVzaW5nIFByZWQgICA9IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworKyAgICB1c2lu
ZyBTYXRWZWMgPSBNb2RpZnlTdHJ1Y3RDb25maWc6OlNhdHVyYXRlVmVjdG9yOworKworKyAgICBN
b2RpZnlTdHJ1Y3RDb25maWcgY29uZmlnKAorKyAgICAgICAgaXNQaXBlbGluZU91dCgpID8gQ29u
dmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCA6IENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3Jp
Z2luYWwsCisrICAgICAgICBBbGxvd1BhY2tpbmcodHlwZSksIEFsbG93UGFkZGluZyh0eXBlKSk7
CisrCisrICAgIGNvbmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSA9IGV4dGVybmFsQWRkcmVzc1Nw
YWNlKCk7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBl
OjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZDo6
VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1
ZTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0
OgorKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOwor
KyAgICAgICAgICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAg
ICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAg
ICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAg
ICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisrICAgICAgICAgICAg
Y29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAg
ICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmllbGQp
IHsKKysgICAgICAgICAgICAgICAgaWYgKGludCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNU
eXBlOjpFYnRJbnQsIExULCA0LCA0PihmaWVsZCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGlmIChpbnQgcyA9IFNhdHVyYXRlVmVjdG9yT2Y8VEJhc2ljVHlwZTo6RWJ0VUludCwg
TFQsIDQsIDQ+KGZpZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHM7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICAgICAgfTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VXNl
clVuaWZvcm1zOgorKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAg
ICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
ICAgICAgICAgICA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysgICAgICAgICAgICBjb25maWcu
c2F0dXJhdGVTY2FsYXJPclZlY3RvckFycmF5cyA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysg
ICAgICAgICAgICBjb25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRy
dWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5p
Zm9ybXM6CisrICAgICAgICAgICAgY29uZmlnLmluaXRpYWxCbG9ja1N0b3JhZ2UgPSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAg
YnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEds
b2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNl
SWQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbmZpZzsK
Kyt9CisrCisrYm9vbCBQaXBlbGluZTo6YWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25Jbk1haW4oKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudElu
OgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6
OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrfQorKworK2Jvb2wgUGlwZWxpbmU6OmlzUGlwZWxpbmVPdXQoKSBjb25zdAorK3sKKysg
ICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2Vy
VW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICBj
YXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5
cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrfQorKworK0FkZHJlc3NTcGFjZSBQ
aXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2Fz
ZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2Jh
bHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBU
eXBlOjpUZXh0dXJlOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAg
Y2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OlRocmVhZDsKKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1z
OgorKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworKyAgICB9Cisr
fQorKworK2Jvb2wgUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzKGNvbnN0IFRTdHJ1Y3R1cmUgJnMs
IGJvb2wgaW50ZXJuYWwsIGJvb2wgZXh0ZXJuYWwpIGNvbnN0CisreworKyAgICBQaXBlbGluZVNj
b3BlZDxUU3RydWN0dXJlPiBwc1tdID0geworKyAgICAgICAgZnJhZ21lbnRJbiwKKysgICAgICAg
IGZyYWdtZW50T3V0LAorKyAgICAgICAgdmVydGV4SW4sCisrICAgICAgICB2ZXJ0ZXhPdXQsCisr
ICAgICAgICB1c2VyVW5pZm9ybXMsCisrICAgICAgICBhbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
bm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgdGV4dHVyZSwKKysg
ICAgICAgIGluc3RhbmNlSWQsCisrICAgIH07CisrICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHBz
KQorKyAgICB7CisrICAgICAgICBpZiAoaW50ZXJuYWwgJiYgcC5pbnRlcm5hbCA9PSAmcykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAg
IGlmIChleHRlcm5hbCAmJiBwLmV4dGVybmFsID09ICZzKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUGlwZWxpbmUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LjliZjQ3NmEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5oCitAQCAtMCwwICsxLDEyMyBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUElQRUxJTkVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKysvLyBEYXRhIHRoYXQgaXMgc2NvcGVkIGFzIGBleHRlcm5hbGAgYW5kIGBpbnRl
cm5hbGAgZm9yIGEgZ2l2ZW4gcGlwZWxpbmUuCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3Ry
dWN0IFBpcGVsaW5lU2NvcGVkCisreworKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0
byB0YWxrIGV4dGVybmFsbHkgdG8gdGhlIHByb2dyYW0uCisrICAgIC8vIE1heSBjb2luY2lkZSB3
aXRoIGBpbnRlcm5hbGAsIGJ1dCBtYXkgYWxzbyBkaXZlcmdlIGZyb20gYGludGVybmFsYC4KKysg
ICAgY29uc3QgVCAqZXh0ZXJuYWwgPSBudWxscHRyOworKworKyAgICAvLyBEYXRhIHRoYXQgaXMg
Y29uZmlndXJlZCB0byB0YWxrIGludGVybmFsbHkgd2l0aGluIHRoZSBwcm9ncmFtLgorKyAgICAv
LyBNYXkgY29pbmNpZGUgd2l0aCBgZXh0ZXJuYWxgLCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9t
IGBleHRlcm5hbGAuCisrICAgIGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKysKKysgICAg
Ly8gUmV0dXJucyB0cnVlIGlmZiB0aGUgaW5wdXQgY29pbmNpZGVzIHdpdGggZWl0aGVyIGBleHRl
cm5hbGAgb3IgYGludGVybmFsYCBkYXRhLgorKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2Jq
ZWN0KSBjb25zdCB7IHJldHVybiBleHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZv
YmplY3Q7IH0KKysKKysgICAgLy8gQm90aCBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIHJlcHJl
c2VudGF0aW9ucyBhcmUgbm9uLW51bGwuCisrICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0
IHsgcmV0dXJuIGV4dGVybmFsICYmIGludGVybmFsOyB9CisrCisrICAgIC8vIEJvdGggYGV4dGVy
bmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG51bGwuCisrICAgIGJvb2wg
aXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9
CisrCisrICAgIC8vIEJvdGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlv
bnMgYXJlIHRoZSBzYW1lLgorKyAgICBib29sIGlzVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4
dGVybmFsID09IGludGVybmFsOyB9CisrfTsKKysKKysvLyBSZXByZXNlbnRzIGEgaGlnaC1sZXZl
bCBwcm9ncmFtIHBpcGVsaW5lLgorK2NsYXNzIFBpcGVsaW5lCisreworKyAgcHVibGljOgorKyAg
ICBlbnVtIGNsYXNzIFR5cGUKKysgICAgeworKyAgICAgICAgVmVydGV4SW4sCisrICAgICAgICBW
ZXJ0ZXhPdXQsCisrICAgICAgICBGcmFnbWVudEluLAorKyAgICAgICAgRnJhZ21lbnRPdXQsCisr
ICAgICAgICBVc2VyVW5pZm9ybXMsCisrICAgICAgICBBbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
Tm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgSW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgVGV4dHVyZSwKKysg
ICAgICAgIEluc3RhbmNlSWQsCisrICAgIH07CisrCisrICAgIGVudW0gY2xhc3MgVmFyaWFudAor
KyAgICB7CisrICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisrICAg
ICAgICAvLyBGb3IgZXh0ZXJuYWwgcGlwZWxpbmUgdXNlcyBpZiBwaXBlbGluZSBkb2VzIG5vdCBy
ZXF1aXJlIHNwbGl0dGluZyBvciBzYXR1cmF0aW9uLgorKyAgICAgICAgT3JpZ2luYWwsCisrCisr
ICAgICAgICAvLyBPbmx5IGZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHRoZSBwaXBlbGlu
ZSB3YXMgc3BsaXQgb3Igc2F0dXJhdGVkLgorKyAgICAgICAgTW9kaWZpZWQsCisrICAgIH07Cisr
CisrICBwdWJsaWM6CisrICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKysgICAgVHlw
ZSB0eXBlOworKworKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUg
cGlwZWxpbmUgc3RydWN0IGFscmVhZHkgZXhpc3RzLgorKyAgICAvLyBJZiBub24tbnVsbCBzdHJ1
Y3Qgc3BsaXR0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkLgorKyAgICBjb25zdCBUVmFyaWFibGUg
Kmdsb2JhbEluc3RhbmNlVmFyOworKworKyAgcHVibGljOgorKyAgICAvLyBSZXR1cm5zIHRydWUg
aWZmIHRoZSB2YXJpYWJsZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS4KKysgICAgYm9vbCB1c2Vz
KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgbmFt
ZSBmb3IgdGhlIHN0cnVjdCB0eXBlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlzIHBpcGVs
aW5lLgorKyAgICBOYW1lIGdldFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7
CisrCisrICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgaW5zdGFuY2UgdGhh
dCBzdG9yZXMgdmFyaWFibGVzIG9mIHRoaXMgcGlwZWxpbmUuCisrICAgIE5hbWUgZ2V0U3RydWN0
SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisrCisrICAgIE1vZGlmeVN0cnVj
dENvbmZpZyBleHRlcm5hbFN0cnVjdE1vZGlmeUNvbmZpZygpIGNvbnN0OworKworKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHBpcGVsaW5lIGFsd2F5cyByZXF1aXJlcyBhIG5vbi1wYXJhbWV0
ZXIgbG9jYWwgaW5zdGFuY2UgZGVjbGFyYXRpb24gb2YKKysgICAgLy8gdGhlIHBpcGVsaW5lIHN0
cnVjdHVyZXMuCisrICAgIGJvb2wgYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRp
b25Jbk1haW4oKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgcGlwZWxp
bmUgaXMgYW4gb3V0cHV0IHBpcGVsaW5lLiBUaGUgZXh0ZXJuYWwgcGlwZWxpbmUgc3RydWN0dXJl
IHNob3VsZAorKyAgICAvLyBiZSByZXR1cm5lZCBmcm9tIGBtYWluYC4KKysgICAgYm9vbCBpc1Bp
cGVsaW5lT3V0KCkgY29uc3Q7CisrCisrICAgIEFkZHJlc3NTcGFjZSBleHRlcm5hbEFkZHJlc3NT
cGFjZSgpIGNvbnN0OworK307CisrCisrLy8gQSBjb2xsZWN0aW9uIG9mIHZhcmlvdXMgcGlwZWxp
bmUgc3RydWN0dXJlcy4KKytzdHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RzIDogYW5nbGU6Ok5vbkNvcHlh
YmxlCisreworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudEluOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudE91dDsKKysgICAgUGlwZWxpbmVT
Y29wZWQ8VFN0cnVjdHVyZT4gdmVydGV4SW47CisrICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1
cmU+IHZlcnRleE91dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gdXNlclVuaWZv
cm1zOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBhbmdsZVVuaWZvcm1zOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7CisrICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOworKyAgICBQ
aXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiBpbnN0YW5jZUlkOworKworKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0
cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7CisrfTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJl
bHVkZS5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YmY1YTAyCist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuY3BwCitAQCAtMCwwICsxLDM3NTcgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaW5jbHVkZSA8Y2N0eXBlPgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIKKyt7CisrICAgIHVzaW5nIExpbmVUYWcgICAgICAgPSB1bnNpZ25lZDsKKysg
ICAgdXNpbmcgRnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0
IFRGdW5jdGlvbiAmKTsKKysgICAgdXNpbmcgRnVuY1RvRW1pdHRlciA9IHN0ZDo6bWFwPE5hbWUs
IEZ1bmNFbWl0dGVyPjsKKysKKysgIHB1YmxpYzoKKysgICAgUHJvZ3JhbVByZWx1ZGUoVEluZm9T
aW5rQmFzZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorKyAgICAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXQob3V0KQorKyAgICB7
CisrICAgICAgICBBTFdBWVNfSU5MSU5FKCk7CisrCisrICAgICAgICBpZiAocHBjLmhhc1N0cnVj
dEVxKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVxdWFsVmVjdG9yKCk7CisrICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKTsKKysgICAgICAgIH0KKysKKysjaWYgMQorKyAgICAgICAgbU91dCA8
PCAiI2RlZmluZSBBTkdMRV90ZW5zb3IgbWV0YWw6OmFycmF5XG4iOworKyNlbHNlCisrICAgICAg
ICB0ZW5zb3IoKTsKKysjZW5kaWYKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgYm9vbCBl
bWl0R3VhcmQoTGluZVRhZyBsaW5lVGFnKQorKyAgICB7CisrICAgICAgICBpZiAobUVtaXR0ZWQu
ZmluZChsaW5lVGFnKSAhPSBtRW1pdHRlZC5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBtRW1pdHRlZC5pbnNlcnQobGlu
ZVRhZyk7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBzdGF0aWMgRnVu
Y1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKysKKysgICAgdm9pZCB2aXNpdE9wZXJh
dG9yKFRPcGVyYXRvciBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqZnVuYywKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCwK
KysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIp
OworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpOworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgVFZhcmlhYmxlICZ2YXIpOwor
KyAgICB2b2lkIHZpc2l0U3RydWN0dXJlKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpOworKworKyAgICBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKSBvdmVycmlkZTsKKysg
ICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92ZXJyaWRlOwor
KyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBv
dmVycmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wgKm5vZGUpIG92ZXJyaWRlOworKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCBBTFdBWVNfSU5M
SU5FKCk7CisrCisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9hdG9taWMoKTsKKysgICAgdm9pZCBp
bmNsdWRlX21ldGFsX2NvbW1vbigpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmlj
KCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICB2b2lkIGluY2x1
ZGVfbWV0YWxfbWF0aCgpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisrICAg
IHZvaWQgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9yZWxh
dGlvbmFsKCk7CisrCisrICAgIHZvaWQgZW5hYmxlX2lmKCk7CisrICAgIHZvaWQgc2NhbGFyX29m
KCk7CisrICAgIHZvaWQgaXNfc2NhbGFyKCk7CisrICAgIHZvaWQgaXNfdmVjdG9yKCk7CisrICAg
IHZvaWQgaXNfbWF0cml4KCk7CisrICAgIHZvaWQgYWRkcmVzc29mKCk7CisrICAgIHZvaWQgZGlz
dGFuY2UoKTsKKysgICAgdm9pZCBsZW5ndGgoKTsKKysgICAgdm9pZCBkb3QoKTsKKysgICAgdm9p
ZCBub3JtYWxpemUoKTsKKysgICAgdm9pZCBmYWNlZm9yd2FyZCgpOworKyAgICB2b2lkIHJlZmxl
Y3QoKTsKKysgICAgdm9pZCByZWZyYWN0KCk7CisrICAgIHZvaWQgZGVncmVlcygpOworKyAgICB2
b2lkIHJhZGlhbnMoKTsKKysgICAgdm9pZCBtb2QoKTsKKysgICAgdm9pZCBwb3N0SW5jcmVtZW50
TWF0cml4KCk7CisrICAgIHZvaWQgcHJlSW5jcmVtZW50TWF0cml4KCk7CisrICAgIHZvaWQgcG9z
dERlY3JlbWVudE1hdHJpeCgpOworKyAgICB2b2lkIHByZURlY3JlbWVudE1hdHJpeCgpOworKyAg
ICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworKyAgICB2b2lkIG1hdG11bEFzc2lnbigpOworKyAgICB2
b2lkIGF0YW4oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9p
ZCBzdWJNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXIoKTsK
KysgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXIo
KTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJGYXN0KCk7CisrICAgIHZvaWQgZGl2TWF0cml4
U2NhbGFyQXNzaWduKCk7CisrICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduRmFzdCgpOwor
KyAgICB2b2lkIHRlbnNvcigpOworKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUoKTsKKysg
ICAgdm9pZCBjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduKCk7CisrICAgIHZvaWQgY29tcG9uZW50
V2lzZU11bHRpcGx5KCk7CisrICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisrICAgIHZvaWQgaW52
ZXJzZTIoKTsKKysgICAgdm9pZCBpbnZlcnNlMygpOworKyAgICB2b2lkIGludmVyc2U0KCk7Cisr
ICAgIHZvaWQgZXF1YWxWZWN0b3IoKTsKKysgICAgdm9pZCBlcXVhbE1hdHJpeCgpOworKyAgICB2
b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgIHZvaWQgbm90RXF1YWxTdHJ1Y3QoKTsKKysgICAg
dm9pZCBlcXVhbEFycmF5KCk7CisrICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworKyAgICB2b2lk
IHNpZ24oKTsKKysgICAgdm9pZCBwYWNrX2hhbGZfMngxNigpOworKyAgICB2b2lkIHVucGFja19o
YWxmXzJ4MTYoKTsKKysgICAgdm9pZCB2ZWN0b3JFbGVtUmVmKCk7CisrICAgIHZvaWQgc3dpenps
ZVJlZigpOworKyAgICB2b2lkIG91dCgpOworKyAgICB2b2lkIGlub3V0KCk7CisrICAgIHZvaWQg
ZmxhdHRlbkFycmF5KCk7CisrICAgIHZvaWQgY2FzdFZlY3RvcigpOworKyAgICB2b2lkIGNhc3RN
YXRyaXgoKTsKKysgICAgdm9pZCBmdW5jdGlvbkNvbnN0YW50cygpOworKyAgICB2b2lkIGdyYWRp
ZW50KCk7CisrICAgIHZvaWQgdGV4dHVyZUVudigpOworKyAgICB2b2lkIHRleGVsRmV0Y2goKTsK
KysgICAgdm9pZCB0ZXhlbEZldGNoT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZSgpOworKyAg
ICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlX2dlbmVy
aWNfZmxvYXQyX2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZV9nZW5lcmljX2Zsb2F0MygpOwor
KyAgICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19m
bG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2
b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0
NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9p
ZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4
dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZTFETG9kKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZTFEUHJvaigpOworKyAgICB2b2lkIHRleHR1cmUxRFByb2pMb2QoKTsK
KysgICAgdm9pZCB0ZXh0dXJlMkQoKTsKKysgICAgdm9pZCB0ZXh0dXJlMkRMb2QoKTsKKysgICAg
dm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisrICAgIHZvaWQgdGV4dHVyZTJEUHJvakxvZCgpOworKyAg
ICB2b2lkIHRleHR1cmUzRExvZCgpOworKyAgICB2b2lkIHRleHR1cmUzRFByb2ooKTsKKysgICAg
dm9pZCB0ZXh0dXJlM0RQcm9qTG9kKCk7CisrICAgIHZvaWQgdGV4dHVyZUN1YmUoKTsKKysgICAg
dm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworKyAgICB2b2lkIHRleHR1cmVDdWJlUHJvaigpOworKyAg
ICB2b2lkIHRleHR1cmVDdWJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVHcmFkKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworKyAg
ICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKysgICAg
dm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisrICAgIHZv
aWQgdGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lk
IHRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
IHZvaWQgdGV4dHVyZUdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9n
ZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKysgICAgdm9pZCB0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3Vi
ZV9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZz
ZXRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICB2b2lkIHRl
eHR1cmVMb2QoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisrICAg
IHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2Rf
ZGVwdGgyZF9mbG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zs
b2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUxvZE9mZnNldCgpOworKyAgICB2b2lkIHRleHR1cmVPZmZzZXQoKTsK
KysgICAgdm9pZCB0ZXh0dXJlUHJvaigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIo
KTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0
MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19m
bG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKysgICAgdm9pZCB0ZXh0
dXJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakxvZF9kZXB0aDJkX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9k
X3RleHR1cmUzZF9mbG9hdDQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZE9mZnNldCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZVNpemUoKTsK
KysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgJm1PdXQ7CisrICAgIHN0ZDo6dW5v
cmRlcmVkX3NldDxMaW5lVGFnPiBtRW1pdHRlZDsKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNv
bnN0IFRTeW1ib2wgKj4gbUhhbmRsZWQ7CisrICAgIGNvbnN0IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNU
b0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKyt9OworKworK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNkZWZpbmUgUFJP
R1JBTV9QUkVMVURFX0lOQ0xVREUoaGVhZGVyKSAgICAgICAgICAgICBcCisrICAgIHZvaWQgUHJv
Z3JhbVByZWx1ZGU6OmluY2x1ZGVfIyNoZWFkZXIoKSAgICAgICAgIFwKKysgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVt
aXRHdWFyZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBtT3V0
IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorKyAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKysjZGVmaW5l
IFBST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5hbWUsIGNvZGUsIC4uLikgICAgICAgICAgICAgICAg
XAorKyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjpuYW1lKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEFTU0VSVChjb2RlWzBdID09ICdcbicp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVtaXRHdWFy
ZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgLyogZGVwZW5kZW5jaWVzICovICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgIG1PdXQgPDwgKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIg
Kj4oY29kZSAiXG4iKSArIDEpOyBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfYXRvbWljKQor
K1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKKytQUk9HUkFNX1BSRUxVREVf
SU5DTFVERShtZXRhbF9nZW9tZXRyaWMpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxf
Z3JhcGhpY3MpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKKytQUk9HUkFN
X1BSRUxVREVfSU5DTFVERShtZXRhbF9tYXRyaXgpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUo
bWV0YWxfcGFjaykKKytQUk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQor
KworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
QUxXQVlTX0lOTElORSwgUiIoCisrI2RlZmluZSBBTkdMRV9BTFdBWVNfSU5MSU5FIF9fYXR0cmli
dXRlX18oKGFsd2F5c19pbmxpbmUpKQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGVuYWJsZV9pZiwgUiIoCisrdGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cisr
c3RydWN0IEFOR0xFX2VuYWJsZV9pZiB7fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1
Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+CisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9
OworK3RlbXBsYXRlIDxib29sIEI+CisrdXNpbmcgQU5HTEVfZW5hYmxlX2lmX3QgPSB0eXBlbmFt
ZSBBTkdMRV9lbmFibGVfaWY8Qj46OnR5cGU7CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoc2NhbGFyX29mLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5H
TEVfc2NhbGFyX29mCisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9OworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUgQU5HTEVfc2Nh
bGFyX29mPFQ+Ojp0eXBlOworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3Nj
YWxhciwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2lzX3NjYWxh
ciB7fTsKKysjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisrICAgIHRlbXBs
YXRlIDw+IHN0cnVjdCBBTkdMRV9pc19zY2FsYXI8c2NhbGFyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfQorK0FOR0xFX0RFRklORV9TQ0FMQVIoYm9vbCk7CisrQU5HTEVfREVGSU5FX1NDQUxB
UihjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKGludCk7CisrQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKHVjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVzaG9ydCk7CisrQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVsb25nKTsKKytBTkdMRV9ERUZJ
TkVfU0NBTEFSKGhhbGYpOworK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKykiKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9y
CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9OworK307CisrI2RlZmluZSBBTkdMRV9E
RUZJTkVfVkVDVE9SKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
dmVjdG9yPG1ldGFsOjpzY2FsYXIgIyMgMj4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwK
KysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMj
IDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBBTkdMRV9pc192ZWN0b3I8bWV0YWw6OnNjYWxhciAjIyA0PiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgMj4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9v
ZjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RF
RklORV9WRUNUT1IoYm9vbCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKKytBTkdMRV9E
RUZJTkVfVkVDVE9SKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGludCk7CisrQU5HTEVf
REVGSU5FX1ZFQ1RPUihsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKHVjaGFyKTsKKytBTkdM
RV9ERUZJTkVfVkVDVE9SKHVzaG9ydCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKKytB
TkdMRV9ERUZJTkVfVkVDVE9SKHVsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGhhbGYpOwor
K0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOworKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjYWxhcl9vZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX21hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9Owor
K307CisrI2RlZmluZSBBTkdMRV9ERUZJTkVfTUFUUklYKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
bWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMng0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0geyB2YWx1
ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4
PG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3g0
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFs
OjpzY2FsYXIgIyMgNHgzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHg0PiB7IGVu
dW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFy
ICMjIDJ4Mz4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDQ+IHsgdXNpbmcgdHlwZSA9
IHNjYWxhcjsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1l
dGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDN4Mz4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDR4Mz4geyB1c2luZyB0eXBlID0g
c2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0
YWw6OnNjYWxhciAjIyA0eDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RFRklO
RV9NQVRSSVgoaGFsZik7CisrQU5HTEVfREVGSU5FX01BVFJJWChmbG9hdCk7CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoYWRkcmVzc29mLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIFQgKiBBTkdMRV9hZGRy
ZXNzb2YodGhyZWFkIFQgJnJlZikKKyt7CisrICAgIHJldHVybiAmcmVmOworK30KKyspIikKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K
KytzdHJ1Y3QgQU5HTEVfZGlzdGFuY2VfaW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZ
U19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgsIFQgeSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0YW5jZSh4LCB5KTsKKysgICAgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2ltcGw8VCwgQU5HTEVfZW5h
YmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBtZXRhbDo6YWJzKHggLSB5KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kaXN0YW5j
ZShUIHgsIFQgeSkKKyt7CisrICAgIHJldHVybiBBTkdMRV9kaXN0YW5jZV9pbXBsPFQ+OjpleGVj
KHgsIHkpOworK307CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRh
bF9nZW9tZXRyaWMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21h
dGgoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc192
ZWN0b3IoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0
IEFOR0xFX2xlbmd0aF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBleGVjKFQgeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1l
dGFsOjpsZW5ndGgoeCk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0
cnVjdCBBTkdMRV9sZW5ndGhfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2Fs
YXI8VD46OnZhbHVlPj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhl
YyhUIHgpCisrICAgIHsKKysgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworKyAgICB9Cisr
fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3Nj
YWxhcl9vZl90PFQ+IEFOR0xFX2xlbmd0aChUIHgpCisreworKyAgICByZXR1cm4gQU5HTEVfbGVu
Z3RoX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJp
eCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRvdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9p
ZD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGwKKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBtZXRhbDo6ZG90KHgsIHkpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB4ICogeTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kb3QoVCB4LCBUIHkpCisreworKyAgICByZXR1cm4g
QU5HTEVfZG90X2ltcGw8VD46OmV4ZWMoeCwgeSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vcm1h
bGl6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGwK
Kyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBtZXRhbDo6bm9ybWFsaXplKHgpOworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVf
ZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMg
QU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
QU5HTEVfc2lnbih4KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX25vcm1hbGl6ZShUIHgpCisreworKyAgICByZXR1cm4g
QU5HTEVfbm9ybWFsaXplX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgc2lnbigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZhY2Vmb3J3YXJkLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lk
PgorK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVf
QUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgeworKyAgICAgICAg
cmV0dXJuIG1ldGFsOjpmYWNlZm9yd2FyZChuLCBpLCBucmVmKTsKKysgICAgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VCwgQU5H
TEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDogLW47CisrICAg
IH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9mYWNlZm9yd2FyZChUIG4sIFQgaSwgVCBucmVmKQorK3sKKysgICAgcmV0dXJuIEFOR0xF
X2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7CisrfTsKKyspIiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IGRvdCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJlZmxlY3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJs
ZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3JlZmxlY3RfaW1wbAorK3sKKysgICAgc3RhdGljIEFO
R0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbWV0YWw6OnJlZmxlY3QoaSwgbik7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK3N0cnVjdCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCBpLCBUIG4pCisrICAgIHsKKysgICAgICAgIHJldHVybiBpIC0gVCgyKSAq
IEFOR0xFX2RvdChuLCBpKSAqIG47CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9yZWZsZWN0KFQgaSwgVCBuKQorK3sKKysg
ICAgcmV0dXJuIEFOR0xFX3JlZmxlY3RfaW1wbDxUPjo6ZXhlYyhpLCBuKTsKKyt9OworKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfc2NhbGFyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgZG90KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmcmFjdCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfcmVmcmFjdF9pbXBsCisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4sIEFOR0xFX3NjYWxhcl9vZl90
PFQ+IGV0YSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZyYWN0KGksIG4sIGV0
YSk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdMRV9y
ZWZyYWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1
ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4s
IFQgZXRhKQorKyAgICB7CisrICAgICAgICBhdXRvIGRvdE5JID0gbiAqIGk7CisrICAgICAgICBh
dXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKysgICAg
ICAgIGlmIChrIDwgVCgwKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gVCgwKTsK
KysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZXRhICogaSAtIChldGEgKiBkb3ROSSArIG1ldGFsOjpzcXJ0KGspKSAqIG47CisrICAgICAg
ICB9CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEp
CisreworKyAgICByZXR1cm4gQU5HTEVfcmVmcmFjdF9pbXBsPFQ+OjpleGVjKGksIG4sIGV0YSk7
CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3Rvcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHNpZ24sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3Np
Z25faW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpzaWduKHgpOworKyAgICB9CisrfTsKKyt0
ZW1wbGF0ZSA8PgorK3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8aW50PgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0FMV0FZU19JTkxJTkUgaW50IGV4ZWMoaW50IHgpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBOPgor
K3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8bWV0YWw6OnZlYzxpbnQsIE4+PgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+IGV4ZWMobWV0YWw6OnZl
YzxpbnQsIE4+IHgpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjp2ZWM8aW50LCBOPiBzOworKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgc1tpXSA9IEFOR0xFX3NpZ25faW1wbDxpbnQ+OjpleGVjKHhbaV0pOworKyAgICAgICAgfQor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9zaWduKFQgeCkKKyt7CisrICAgIHJldHVybiBB
TkdMRV9zaWduX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGF0YW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCisrewor
KyAgICByZXR1cm4gbWV0YWw6OmF0YW4oeU92ZXJYKTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5LCBUIHgpCisreworKyAg
ICByZXR1cm4gbWV0YWw6OmF0YW4yKHksIHgpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RShkZWdyZWVzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfZGVncmVlcyhUIHgpCisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
NTcuMjk1Nzc5NTEzMDgyMzIpICogeDsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUocmFkaWFucywgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX3JhZGlhbnMoVCB4KQorK3sKKysgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUtMikgKiB4OworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShtb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CisrQU5HTEVfQUxXQVlTX0lOTElORSBYIEFOR0xF
X21vZChYIHgsIFkgeSkKKyt7CisrICAgIHJldHVybiB4IC0geSAqIG1ldGFsOjpmbG9vcih4IC8g
eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0
aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBhY2tfaGFsZl8yeDE2LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19JTkxJTkUgdWludCBBTkdMRV9w
YWNrX2hhbGZfMngxNihmbG9hdDIgdikKKyt7CisrICAgIHJldHVybiBhc190eXBlPHVpbnQ+KGhh
bGYyKHYpKTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh1bnBhY2tf
aGFsZl8yeDE2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19J
TkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorK3sKKysgICAgcmV0
dXJuIGZsb2F0Mihhc190eXBlPGhhbGYyPih4KSk7CisrfQorKykiLCApCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBO
PiAmb3BlcmF0b3IqPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBOLCBOPiBiKQorK3sKKysgICAgYSA9IGEgKiBiOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZhLCBpbnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhICs9IFQoMSk7CisrICAgIHJl
dHVybiBiOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRy
aXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBDb2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZhKQorK3sKKysgICAgYSArPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdERlY3JlbWVudE1hdHJpeCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBS
b3dzPiBvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBp
bnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhIC09IFQoMSk7CisrICAgIHJldHVybiBi
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXJBc3Np
Z24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVEZWNyZW1lbnRNYXRyaXgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBD
b2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZhKQorK3sKKysgICAgYSAtPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmVnYXRlTWF0cml4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9y
LShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0pCisreworKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAgdGhyZWFkIGF1dG8g
Jm1Db2wgPSBtW2NvbF07CisrICAgICAgICBtQ29sID0gLW1Db2w7CisrICAgIH0KKysgICAgcmV0
dXJuIG07CisrfQorKykiLCApCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4
U2NhbGFyQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywg
Um93cz4gJm9wZXJhdG9yKz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0s
IFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQor
KyAgICB7CisrICAgICAgICBtW2NvbF0gKz0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKKyt7
CisrICAgIG0gKz0geDsKKysgICAgcmV0dXJuIG07CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHN1Yk1hdHJpeFNjYWxhckFzc2lnbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9y
LT0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAg
ICBtW2NvbF0gLT0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQorK3sKKysgICAgbSAtPSB4
OworKyAgICByZXR1cm4gbTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
TWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0
cml4U2NhbGFyQXNzaWduRmFzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFk
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIHggPSBUKDEp
IC8geDsKKysgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisrICAg
IHsKKysgICAgICAgIG1bY29sXSAqPSB4OworKyAgICB9CisrICAgIHJldHVybiBtOworK30KKysp
IiwgKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNjYWxhckFzc2lnbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRy
aXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29s
cywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENv
bHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBtW2NvbF0gLz0geDsKKysgICAgfQorKyAgICBy
ZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRy
aXhTY2FsYXJGYXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNpZiBfX01FVEFM
X1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBv
cGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCisreworKyAgICBt
IC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ25GYXN0KCkpCisrCisrUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBU
IHgpCisreworKyAgICBtIC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlLCBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCisreworKyAgICBm
b3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAg
YVtjb2xdIC89IGJbY29sXTsKKysgICAgfQorKyAgICByZXR1cm4gYTsKKyt9CisrKSIpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwg
Q29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gJmEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGEgPSBhIC8g
YjsKKysgICAgcmV0dXJuIGE7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudFdpc2VEaXZpZGUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25l
bnRXaXNlTXVsdGlwbHksIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50
IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IEFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBseShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IGEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGZvciAoc2l6ZV90
IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBhW2NvbF0gKj0g
Yltjb2xdOworKyAgICB9CisrICAgIHJldHVybiBhOworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBp
bnQgTSwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIE4sIE0+
IEFOR0xFX291dGVyUHJvZHVjdChtZXRhbDo6dmVjPFQsIE0+IHUsIG1ldGFsOjp2ZWM8VCwgTj4g
dikKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgTiwgTT4gbzsKKysgICAgZm9yIChzaXplX3Qg
biA9IDA7IG4gPCBOOyArK24pCisrICAgIHsKKysgICAgICAgIG9bbl0gPSB1ICogdltuXTsKKysg
ICAgfQorKyAgICByZXR1cm4gbzsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUoaW52ZXJzZTIsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjptYXRyaXg8
VCwgMiwgMj4gbSkKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gYWRqOworKyAgICBh
ZGpbMF1bMF0gPSAgbVsxXVsxXTsKKysgICAgYWRqWzBdWzFdID0gLW1bMF1bMV07CisrICAgIGFk
alsxXVswXSA9IC1tWzFdWzBdOworKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKysgICAgVCBk
ZXQgPSAoYWRqWzBdWzBdICogbVswXVswXSkgKyAoYWRqWzBdWzFdICogbVsxXVswXSk7CisrICAg
IHJldHVybiBhZGogKiAoVCgxKSAvIGRldCk7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gQU5HTEVfaW52ZXJzZShtZXRhbDo6
bWF0cml4PFQsIDMsIDM+IG0pCisreworKyAgICBUIGEgPSBtWzFdWzFdICogbVsyXVsyXSAtIG1b
Ml1bMV0gKiBtWzFdWzJdOworKyAgICBUIGIgPSBtWzFdWzBdICogbVsyXVsyXTsKKysgICAgVCBj
ID0gbVsxXVsyXSAqIG1bMl1bMF07CisrICAgIFQgZCA9IG1bMV1bMF0gKiBtWzJdWzFdOworKyAg
ICBUIGRldCA9IG1bMF1bMF0gKiAoYSkgLQorKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMp
ICsKKysgICAgICAgICAgICBtWzBdWzJdICogKGQgLSBtWzFdWzFdICogbVsyXVswXSk7CisrICAg
IGRldCA9IFQoMSkgLyBkZXQ7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKysg
ICAgbWludlswXVswXSA9IChhKSAqIGRldDsKKysgICAgbWludlswXVsxXSA9IChtWzBdWzJdICog
bVsyXVsxXSAtIG1bMF1bMV0gKiBtWzJdWzJdKSAqIGRldDsKKysgICAgbWludlswXVsyXSA9ICht
WzBdWzFdICogbVsxXVsyXSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsx
XVswXSA9IChjIC0gYikgKiBkZXQ7CisrICAgIG1pbnZbMV1bMV0gPSAobVswXVswXSAqIG1bMl1b
Ml0gLSBtWzBdWzJdICogbVsyXVswXSkgKiBkZXQ7CisrICAgIG1pbnZbMV1bMl0gPSAobVsxXVsw
XSAqIG1bMF1bMl0gLSBtWzBdWzBdICogbVsxXVsyXSkgKiBkZXQ7CisrICAgIG1pbnZbMl1bMF0g
PSAoZCAtIG1bMl1bMF0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsxXSA9IChtWzJd
WzBdICogbVswXVsxXSAtIG1bMF1bMF0gKiBtWzJdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsy
XSA9IChtWzBdWzBdICogbVsxXVsxXSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKysgICAg
cmV0dXJuIG1pbnY7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVy
c2U0LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjptYXRyaXg8VCwgNCwgND4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0cml4PFQsIDQsIDQ+
IG0pCisreworKyAgICBUIEEyMzIzID0gbVsyXVsyXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVsz
XVsyXTsKKysgICAgVCBBMTMyMyA9IG1bMl1bMV0gKiBtWzNdWzNdIC0gbVsyXVszXSAqIG1bM11b
MV07CisrICAgIFQgQTEyMjMgPSBtWzJdWzFdICogbVszXVsyXSAtIG1bMl1bMl0gKiBtWzNdWzFd
OworKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVswXTsK
KysgICAgVCBBMDIyMyA9IG1bMl1bMF0gKiBtWzNdWzJdIC0gbVsyXVsyXSAqIG1bM11bMF07Cisr
ICAgIFQgQTAxMjMgPSBtWzJdWzBdICogbVszXVsxXSAtIG1bMl1bMV0gKiBtWzNdWzBdOworKyAg
ICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVsyXTsKKysgICAg
VCBBMTMxMyA9IG1bMV1bMV0gKiBtWzNdWzNdIC0gbVsxXVszXSAqIG1bM11bMV07CisrICAgIFQg
QTEyMTMgPSBtWzFdWzFdICogbVszXVsyXSAtIG1bMV1bMl0gKiBtWzNdWzFdOworKyAgICBUIEEy
MzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsKKysgICAgVCBBMTMx
MiA9IG1bMV1bMV0gKiBtWzJdWzNdIC0gbVsxXVszXSAqIG1bMl1bMV07CisrICAgIFQgQTEyMTIg
PSBtWzFdWzFdICogbVsyXVsyXSAtIG1bMV1bMl0gKiBtWzJdWzFdOworKyAgICBUIEEwMzEzID0g
bVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKysgICAgVCBBMDIxMyA9IG1b
MV1bMF0gKiBtWzNdWzJdIC0gbVsxXVsyXSAqIG1bM11bMF07CisrICAgIFQgQTAzMTIgPSBtWzFd
WzBdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJdWzBdOworKyAgICBUIEEwMjEyID0gbVsxXVsw
XSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKysgICAgVCBBMDExMyA9IG1bMV1bMF0g
KiBtWzNdWzFdIC0gbVsxXVsxXSAqIG1bM11bMF07CisrICAgIFQgQTAxMTIgPSBtWzFdWzBdICog
bVsyXVsxXSAtIG1bMV1bMV0gKiBtWzJdWzBdOworKyAgICBUIGEgPSBtWzFdWzFdICogQTIzMjMg
LSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisrICAgIFQgYiA9IG1bMV1bMF0g
KiBBMjMyMyAtIG1bMV1bMl0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDIyMzsKKysgICAgVCBjID0g
bVsxXVswXSAqIEExMzIzIC0gbVsxXVsxXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMTIzOworKyAg
ICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAx
MjM7CisrICAgIFQgZGV0ID0gbVswXVswXSAqICggYSApCisrICAgICAgICAgIC0gbVswXVsxXSAq
ICggYiApCisrICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisrICAgICAgICAgIC0gbVswXVsz
XSAqICggZCApOworKyAgICBkZXQgPSBUKDEpIC8gZGV0OworKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworKyAgICBpbVswXVswXSA9IGRldCAqICAgKCBhICk7CisrICAgIGltWzBdWzFd
ID0gZGV0ICogLSAoIG1bMF1bMV0gKiBBMjMyMyAtIG1bMF1bMl0gKiBBMTMyMyArIG1bMF1bM10g
KiBBMTIyMyApOworKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBt
WzBdWzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKysgICAgaW1bMF1bM10gPSBkZXQg
KiAtICggbVswXVsxXSAqIEEyMzEyIC0gbVswXVsyXSAqIEExMzEyICsgbVswXVszXSAqIEExMjEy
ICk7CisrICAgIGltWzFdWzBdID0gZGV0ICogLSAoIGIgKTsKKysgICAgaW1bMV1bMV0gPSBkZXQg
KiAgICggbVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIz
ICk7CisrICAgIGltWzFdWzJdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMjMxMyAtIG1bMF1bMl0g
KiBBMDMxMyArIG1bMF1bM10gKiBBMDIxMyApOworKyAgICBpbVsxXVszXSA9IGRldCAqICAgKCBt
WzBdWzBdICogQTIzMTIgLSBtWzBdWzJdICogQTAzMTIgKyBtWzBdWzNdICogQTAyMTIgKTsKKysg
ICAgaW1bMl1bMF0gPSBkZXQgKiAgICggYyApOworKyAgICBpbVsyXVsxXSA9IGRldCAqIC0gKCBt
WzBdWzBdICogQTEzMjMgLSBtWzBdWzFdICogQTAzMjMgKyBtWzBdWzNdICogQTAxMjMgKTsKKysg
ICAgaW1bMl1bMl0gPSBkZXQgKiAgICggbVswXVswXSAqIEExMzEzIC0gbVswXVsxXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMTEzICk7CisrICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0g
KiBBMTMxMiAtIG1bMF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworKyAgICBpbVsz
XVswXSA9IGRldCAqIC0gKCBkICk7CisrICAgIGltWzNdWzFdID0gZGV0ICogICAoIG1bMF1bMF0g
KiBBMTIyMyAtIG1bMF1bMV0gKiBBMDIyMyArIG1bMF1bMl0gKiBBMDEyMyApOworKyAgICBpbVsz
XVsyXSA9IGRldCAqIC0gKCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBd
WzJdICogQTAxMTMgKTsKKysgICAgaW1bM11bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEExMjEy
IC0gbVswXVsxXSAqIEEwMjEyICsgbVswXVsyXSAqIEEwMTEyICk7CisrICAgIHJldHVybiBpbTsK
Kyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBO
PiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4gdikKKyt7CisrICAgIGZvcihzaXplX3QgaSA9IDA7IGkg
PCBOOyBpKyspCisrICAgICAgICBpZiAodVtpXSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisrICAg
IHJldHVybiB0cnVlOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShub3RF
cXVhbEFycmF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1
YWwobWV0YWw6OmFycmF5PFQsIE4+IHUsIG1ldGFsOjphcnJheTxULCBOPiB2KQorK3sKKysgICAg
cmV0dXJuICFBTkdMRV9lcXVhbCh1LHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbEFycmF5KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxWZWN0
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRhbDo6dmVj
PFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKKyt7CisrICAgIHJldHVybiBtZXRhbDo6YWxs
KHUgPT0gdik7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0
YWxfbWF0aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVxdWFsTWF0cml4LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywg
aW50IFI+CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjptYXRy
aXg8VCwgQywgUj4gYSwgbWV0YWw6Om1hdHJpeDxULCBDLCBSPiBiKQorK3sKKysgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisrICAgIHsKKysgICAgICAgIGlmICghQU5HTEVfZXF1YWwo
YVtjXSwgYltjXSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KG5vdEVxdWFsVmVjdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90
RXF1YWwobWV0YWw6OnZlYzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCisreworKyAgICBy
ZXR1cm4gIUFOR0xFX2VxdWFsKHUsIHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFs
U3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9ub3RFcXVhbFN0cnVjdCh0aHJl
YWQgY29uc3QgVCAmYSwgdGhyZWFkIGNvbnN0IFQgJmIpCisreworKyAgICByZXR1cm4gIUFOR0xF
X2VxdWFsKGEsIGIpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZl
Y3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsTWF0cml4KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJlZiwgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdMRV9WZWN0b3JFbGVtUmVmCisreworKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxULCBOPiAmbVZlYzsKKysgICAgVCBtUmVmOworKyAgICBjb25zdCBpbnQg
bUluZGV4OworKyAgICB+QU5HTEVfVmVjdG9yRWxlbVJlZigpIHsgbVZlY1ttSW5kZXhdID0gbVJl
ZjsgfQorKyAgICBBTkdMRV9WZWN0b3JFbGVtUmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2
ZWMsIGludCBpbmRleCkKKysgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tpbmRleF0pLCBt
SW5kZXgoaW5kZXgpCisrICAgIHt9CisrICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVy
biBtUmVmOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+IEFOR0xFX2VsZW1fcmVmKHRocmVh
ZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkKKyt7CisrICAgIHJldHVybiBBTkdM
RV9WZWN0b3JFbGVtUmVmPFQsIE4+KHZlYywgaW5kZXgpOworK30KKyspIikKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShzd2l6emxlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgVk4sIGludCBTTj4KKytzdHJ1Y3QgQU5HTEVf
U3dpenpsZVJlZgorK3sKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8VCwgVk4+ICZtVmVjOworKyAg
ICBtZXRhbDo6dmVjPFQsIFNOPiBtUmVmOworKyAgICBpbnQgbUluZGljZXNbU05dOworKyAgICB+
QU5HTEVfU3dpenpsZVJlZigpCisrICAgIHsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
U047ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1JbmRpY2Vz
W2ldOworKyAgICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIEFOR0xFX1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhy
ZWFkIGNvbnN0IGludCAqaW5kaWNlcykKKysgICAgICAgIDogbVZlYyh2ZWMpCisrICAgIHsKKysg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjb25zdCBpbnQgaiA9IGluZGljZXNbaV07CisrICAgICAgICAgICAgbUluZGljZXNbaV0g
PSBqOworKyAgICAgICAgICAgIG1SZWZbaV0gPSBtVmVjW2pdOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIG9wZXJhdG9yIHRocmVhZCBtZXRhbDo6dmVjPFQsIFNOPiAmKCkgeyByZXR1cm4gbVJl
ZjsgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQg
bWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTApCisreworKyAgICByZXR1cm4gQU5HTEVfVmVj
dG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBB
TkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGlu
dCBpMSkKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEgfTsKKysgICAgcmV0dXJu
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBpcyk7CisrfQorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX1N3aXp6bGVSZWY8VCwg
TiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50
IGkwLCBpbnQgaTEsIGludCBpMikKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEs
IGkyIH07CisrICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+KHZlYywgaXMpOwor
K30KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6
dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykKKyt7CisrICAg
IGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEsIGkyLCBpMyB9OworKyAgICByZXR1cm4gQU5HTEVf
U3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG91
dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX091dAorK3sKKysg
ICAgVCBtVGVtcDsKKysgICAgdGhyZWFkIFQgJm1EZXN0OworKyAgICB+QU5HTEVfT3V0KCkgeyBt
RGVzdCA9IG1UZW1wOyB9CisrICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKysgICAgICAg
IDogbURlc3QoZGVzdCkKKysgICAge30KKysgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0
dXJuIG1UZW1wOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCisreworKyAgICBy
ZXR1cm4gQU5HTEVfT3V0PFQ+KGRlc3QpOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShpbm91dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xF
X0luT3V0CisreworKyAgICBUIG1UZW1wOworKyAgICB0aHJlYWQgVCAmbURlc3Q7CisrICAgIH5B
TkdMRV9Jbk91dCgpIHsgbURlc3QgPSBtVGVtcDsgfQorKyAgICBBTkdMRV9Jbk91dCh0aHJlYWQg
VCAmZGVzdCkKKysgICAgICAgIDogbVRlbXAoZGVzdCksIG1EZXN0KGRlc3QpCisrICAgIHt9Cisr
ICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVybiBtVGVtcDsgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9Jbk91dDxUPiBBTkdM
RV9pbm91dCh0aHJlYWQgVCAmZGVzdCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihk
ZXN0KTsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZmxhdHRlbkFycmF5
LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBs
CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgVCAqZXhlYyh0aHJl
YWQgVCAmeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ4OworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Cisrc3RydWN0IEFOR0xFX2ZsYXR0ZW5faW1wbDxt
ZXRhbDo6YXJyYXk8VCwgTj4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIGV4ZWModGhyZWFkIG1ldGFsOjphcnJheTxULCBOPiAmYXJyKSAtPiBUCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsKKysgICAg
fQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV9mbGF0dGVuKHRocmVhZCBtZXRhbDo6YXJyYXk8VCwgTj4gJmFycikg
LT4gVAorK3sKKysgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0p
OworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjYXN0VmVjdG9yLCBSIigK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4xLCBpbnQgTjI+Cisrc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdM
RV9jYXN0VmVjdG9yPFQsIE4sIE4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6dmVjPFQsIE4+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gY29uc3QgJnYp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB2OworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAyLCAzPgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRh
bDo6dmVjPFQsIDM+IGNvbnN0ICZ2KQorKyAgICB7CisrICAgICAgICByZXR1cm4gdi54eTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Nhc3RWZWN0
b3I8VCwgMiwgND4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgMj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHYueHk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDMsIDQ+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDM+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8
VCwgND4gY29uc3QgJnYpCisrICAgIHsKKysgICAgICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2
ZWM8VCwgMz4+KHYpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIE4xPiBBTkdMRV9j
YXN0KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4yPiBjb25zdCAmdikKKyt7CisrICAgIHJldHVybiBB
TkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7CisrfQorKykiKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGNhc3RNYXRyaXgsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBS
MiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfY2FzdE1hdHJpeAorK3sK
KysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+
IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisrICAgIHsK
KysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysgICAgICAgIGNvbnN0IGlu
dCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworKyAgICAgICAgY29uc3QgaW50IE1pblIgPSBS
MSA8PSBSMiA/IFIxIDogUjI7CisrICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IE1pbkM7ICsr
YykKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1pblI7ICsr
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBSMjsgciA8IFIxOyAr
K3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtMVtjXVtyXSA9IGMgPT0gciA/
IFQoMSkgOiBUKDApOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZvciAo
aW50IGMgPSBDMjsgYyA8IEMxOyArK2MpCisrICAgICAgICB7CisrICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCBSMTsgKytyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
bTFbY11bcl0gPSBjID09IHIgPyBUKDEpIDogVCgwKTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrICAgICAgICByZXR1cm4gbTE7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCBpbnQgQzEsIGludCBSMSwgaW50IEMyLCBpbnQgUjI+Cisrc3RydWN0IEFOR0xFX2Nhc3RN
YXRyaXg8VCwgQzEsIFIxLCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBS
MSA8PSBSMik+PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25z
dCAmbTIpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysg
ICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBjIDwgQzE7ICsrYykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtMVtjXSA9IEFOR0xFX2Nhc3Q8UjE+KG0yW2NdKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBtMTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBp
bnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjpt
YXRyaXg8VCwgQzEsIFIxPiBBTkdMRV9jYXN0KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBS
Mj4gY29uc3QgJm0pCisreworKyAgICByZXR1cm4gQU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEs
IEMyLCBSMj46OmV4ZWMobSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGVfaWYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmVjdG9yKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90Li4uIERTPgorK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzOworK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBzaXplX3QgRD4KKytzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0czxULCBE
PgorK3sKKysgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKysgICAgdXNpbmcg
aW5uZXJfdHlwZSA9IFQ7CisrICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOwor
K307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBELCBzaXplX3QuLi4gRFM+Cisrc3Ry
dWN0IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRCwgRFMuLi4+CisreworKyAgICBlbnVtIDogc2l6
ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAgICB1c2luZyBpbm5lcl90eXBlID0gdHlwZW5hbWUg
QU5HTEVfdGVuc29yX3RyYWl0czxULCBEUy4uLj46Om91dGVyX3R5cGU7CisrICAgIHVzaW5nIG91
dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworK307CisrdGVtcGxhdGUgPHNpemVfdCBELCB0eXBl
bmFtZSB2YWx1ZV90eXBlXywgdHlwZW5hbWUgaW5uZXJfdHlwZV8+Cisrc3RydWN0IEFOR0xFX3Rl
bnNvcl9pbXBsCisreworKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisrICAgIHVzaW5nIGlubmVyX3R5cGUg
PSBpbm5lcl90eXBlXzsKKysgICAgdXNpbmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07Cisr
ICAgIG91dGVyX3R5cGUgX2RhdGE7CisrICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBvdXRlcl9kaW07IH0KKysgICAgQU5HTEVfQUxXQVlTX0lOTElO
RSBpbm5lcl90eXBlICZvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBfZGF0YVtpXTsgfQor
KyAgICBBTkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgc2l6ZV90Li4uIERTPgorK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9p
bXBsPAorKyAgICBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6b3V0ZXJfZGltLAorKyAg
ICBULAorKyAgICB0eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJf
dHlwZT47CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPGludCBOPgorK3N0cnVjdCBBTkdM
RV9ncmFkaWVudF90cmFpdHM7CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRf
dHJhaXRzPDI+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDJkOyB9OworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwzPiB7IHVzaW5nIHR5cGUgPSBtZXRh
bDo6Z3JhZGllbnQzZDsgfTsKKysKKyt0ZW1wbGF0ZSA8aW50IE4+CisrdXNpbmcgQU5HTEVfZ3Jh
ZGllbnQgPSB0eXBlbmFtZSBBTkdMRV9ncmFkaWVudF90cmFpdHM8Tj46OnR5cGU7CisrKSIpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUVudiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfVGV4dHVy
ZUVudgorK3sKKysgICAgdGhyZWFkIFQgKnRleHR1cmU7CisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciAqc2FtcGxlcjsKKyt9OworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZ1
bmN0aW9uQ29uc3RhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUg
QU5HTEVfU0FNUExFX0NPTVBBUkVfR1JBRElFTlRfSU5ERVggMAorKyNkZWZpbmUgQU5HTEVfU0FN
UExFX0NPTVBBUkVfTE9EX0lOREVYICAgICAgMQorKyNkZWZpbmUgQU5HTEVfUkFTVEVSSVpBVElP
Tl9ESVNDQVJEX0lOREVYICAgMgorKworK2NvbnN0YW50IGJvb2wgQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50IFtbZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfU0FNUExFX0NPTVBBUkVfR1JB
RElFTlRfSU5ERVgpXV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9k
ICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0RfSU5ERVgp
XV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCAgICAgW1tmdW5j
dGlvbl9jb25zdGFudChBTkdMRV9SQVNURVJJWkFUSU9OX0RJU0NBUkRfSU5ERVgpXV07CisrKSIp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4ZWxGZXRjaCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xF
X3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhl
bEZldGNoX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJmNvb3JkLAorKyAgICB1aW50IGxldmVsKQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVs
RmV0Y2hfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwpCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkKSwgbGV2ZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9p
bXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZjb29yZCwKKysgICAgdWludCBsZXZlbCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkpLCB1aW50KGNvb3JkLnop
LCBsZXZlbCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoT2Zmc2V0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChl
bnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9B
UkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmY29vcmQsCisrICAg
IHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorK3sK
KysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9mZnNldCksIGxldmVsKTsK
Kyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVp
bnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Myhjb29yZCArIG9mZnNldCksIGxldmVsKTsKKyt9
CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRf
YXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQs
CisrICAgIHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZC54eSArIG9mZnNldCks
IHVpbnQoY29vcmQueiksIGxldmVsKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5l
cmljX2Zsb2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVfZGVwdGgyZF9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJv
dW5kKGNvb3JkLnopKSwgY29vcmQudyk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRo
MmRhcnJheV9mbG9hdDRfZmxvYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgY29tcGFyZSkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludCht
ZXRhbDo6cm91bmQoY29vcmQudykpLCBjb21wYXJlKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHl6KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zs
b2F0NF9mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9h
cnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJl
MmRhcnJheV9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1w
bCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysg
ICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmJpYXMoYmlhcykp
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
ZmxvYXQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFEUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZTFEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQueSwgbWV0YWw6
OmJpYXMoYmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLngvY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
dGV4dHVyZTFEUHJvakxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5l
IEFOR0xFX3RleHR1cmUxRFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2Rf
aW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmUxRFByb2pMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngv
Y29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlMkQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpi
aWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
digpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUyRExvZCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmUyRExvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZTJETG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6
OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvaihl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7
CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qTG9kLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvakxvZChlbnYsIC4uLikg
QU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBf
X1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTNETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2osCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qKGVudiwgLi4uKSBBTkdM
RV90ZXh0dXJlM0RQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJH
U19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDAp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3Jk
LncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFBy
b2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlM0RQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9q
TG9kX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVDdWJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlTG9k
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1
YmVMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZUxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVDdWJlUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFO
R0xFX3RleHR1cmVDdWJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
Q3ViZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlh
cykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmVQcm9qTG9kLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlUHJvakxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZUdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwK
KysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHkpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQ
ZHgsIGRQZHkpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdy
YWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29v
cmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR5KQorK3sKKysgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFk
aWVudCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRh
bDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC56KSksIGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7CisrICAg
IH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAgIH0KKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFk
IG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIGNvb3JkLncsIG1ldGFsOjpn
cmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eXosIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAg
IH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxv
YXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2Vu
ZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHksCisrICAgIHRocmVhZCBtZXRhbDo6dmVjPGlu
dCwgTj4gY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCwgQU5HTEVfZ3JhZGllbnQ8Tj4oZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50KCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2lt
cGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29u
c3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJk
X2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBk
eSwKKysgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBpZiAo
QU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwg
Y29vcmQueiwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5
KSwgb2Zmc2V0KSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
R3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0
ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGll
bnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSks
IGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikp
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOworKyAg
ICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRz
KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0
X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1
cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisr
ICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3Qg
Jm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
KyNkZWZpbmUgQU5HTEVfdGV4dHVyZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMb2QoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9k
X2RlcHRoMmRfZmxvYXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVMb2QpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IG1ldGFsOjpsZXZlbChsZXZlbCkpID4gY29vcmQueik7CisrICAgIH0KKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWlu
dChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6
dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2RPZmZzZXQoZW52
LCAuLi4pIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2Ft
cGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAg
ICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVs
KSwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwg
b2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
ZmxvYXQgbGV2ZWwsCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBp
ZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UK
KysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpID4gY29vcmQueik7
CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
LAorKyAgICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsLAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
dykpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZU9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1w
bCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisr
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMp
LCBvZmZzZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBvZmZzZXQpOworK30KKysKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxv
YXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKysgICAg
ZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0
ICZvZmZzZXQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MyBj
b25zdCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBvZmZz
ZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQyIGNv
bnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVBy
b2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmJpYXMo
YmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFz
ID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9j
b29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cisr
fQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakdyYWQoZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qR3JhZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQ
cm9qR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQy
ZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3Jh
ZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29v
cmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkg
PiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZVByb2pHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pH
cmFkX3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVy
ZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHksCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
X2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3Jh
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsK
Kyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0
KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0X2Rl
cHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlm
IChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSks
IG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1l
dGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQuei9jb29yZC53KTsK
KysgICAgfQorK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0
YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0
dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQz
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZVByb2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisr
I2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9k
X2RlcHRoMmRfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIGlmIChB
TkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpKTsKKysgICAgfQorKyAgICBl
bHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3Jk
LnovY29vcmQudyk7CisrICAgIH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX3RleHR1
cmUzZF9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxv
ZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pM
b2RPZmZzZXQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxv
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJl
YWQgaW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cisr
fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBs
ZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdM
RV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBj
b29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9Cisr
ICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9m
ZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQg
aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlUHJvak9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigK
KysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
UHJvak9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IGludDIgY29uc3QgJm9mZnNldCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmJpYXMo
YmlhcyksIG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKAorKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMgPSAw
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29y
ZC53LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVTaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJl
LCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIGludCBsZXZlbCkKKyt7CisrICAgIHJldHVybiBpbnQyKHRl
eHR1cmUuZ2V0X3dpZHRoKHVpbnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KHVpbnQobGV2
ZWwpKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1
cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIGludDMo
dGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9kZXB0aCh1aW50KGxldmVsKSkpOworK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNp
emVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICBpbnQgbGV2ZWwpCisreworKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKysvLyBSZXR1cm5lZCBOYW1lIGlzIHZhbGlkIGZvciBhcyBsb25n
IGFzIGBidWZmZXJgIGlzIHN0aWxsIGFsaXZlLgorKy8vIFJldHVybnMgZmFsc2UgaWYgbm8gdGVt
cGxhdGUgYXJncyBleGlzdC4KKysvLyBSZXR1cm5zIGZhbHNlIGlmIGJ1ZmZlciBpcyBub3QgbGFy
Z2UgZW5vdWdoLgorKy8vCisrLy8gRXhhbXBsZToKKysvLyAgImZvbzwxLDI+IiAtLT4gImZvbzw+
IgorK3N0YXRpYyBzdGQ6OnBhaXI8TmFtZSwgYm9vbD4gTWFza1RlbXBsYXRlQXJncyhjb25zdCBO
YW1lICZuYW1lLCBzaXplX3QgYnVmZmVyU2l6ZSwgY2hhciAqYnVmZmVyKQorK3sKKysgICAgY29u
c3QgY2hhciAqYmVnaW4gPSBuYW1lLnJhd05hbWUoKS5kYXRhKCk7CisrICAgIGNvbnN0IGNoYXIg
KmVuZCAgID0gc3RyY2hyKGJlZ2luLCAnPCcpOworKyAgICBpZiAoIWVuZCkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIHt7fSwgZmFsc2V9OworKyAgICB9CisrICAgIHNpemVfdCBuID0gZW5kIC0g
YmVnaW47CisrICAgIGlmIChuICsgMyA+IGJ1ZmZlclNpemUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB7e30sIGZhbHNlfTsKKysgICAgfQorKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47
ICsraSkKKysgICAgeworKyAgICAgICAgYnVmZmVyW2ldID0gYmVnaW5baV07CisrICAgIH0KKysg
ICAgYnVmZmVyW24gKyAwXSA9ICc8JzsKKysgICAgYnVmZmVyW24gKyAxXSA9ICc+JzsKKysgICAg
YnVmZmVyW24gKyAyXSA9ICdcMCc7CisrICAgIHJldHVybiB7TmFtZShidWZmZXIsIG5hbWUuc3lt
Ym9sVHlwZSgpKSwgdHJ1ZX07CisrfQorKworK1Byb2dyYW1QcmVsdWRlOjpGdW5jVG9FbWl0dGVy
IFByb2dyYW1QcmVsdWRlOjpCdWlsZEZ1bmNUb0VtaXR0ZXIoKQorK3sKKysjZGVmaW5lIEVNSVRf
TUVUSE9EKG1ldGhvZCkgXAorKyAgICBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5j
dGlvbiAmKSAtPiB2b2lkIHsgcmV0dXJuIHBwLm1ldGhvZCgpOyB9CisrICAgIEZ1bmNUb0VtaXR0
ZXIgbWFwOworKworKyAgICBhdXRvIHB1dCA9IFsmXShOYW1lIG5hbWUsIEZ1bmNFbWl0dGVyIGVt
aXR0ZXIpIHsKKysgICAgICAgIEZ1bmNFbWl0dGVyICZkZXN0ID0gbWFwW25hbWVdOworKyAgICAg
ICAgQVNTRVJUKCFkZXN0KTsKKysgICAgICAgIGRlc3QgPSBlbWl0dGVyOworKyAgICB9OworKwor
KyAgICBhdXRvIHB1dEFuZ2xlID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmds
ZUludGVybmFsKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysg
ICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpCdWls
dEluKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysgICAgcHV0
QW5nbGUoImFkZHJlc3NvZiIsIEVNSVRfTUVUSE9EKGFkZHJlc3NvZikpOworKyAgICBwdXRBbmds
ZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkpOworKyAgICBwdXRBbmdsZSgiZWxl
bV9yZWYiLCBFTUlUX01FVEhPRCh2ZWN0b3JFbGVtUmVmKSk7CisrICAgIHB1dEFuZ2xlKCJmbGF0
dGVuIiwgRU1JVF9NRVRIT0QoZmxhdHRlbkFycmF5KSk7CisrICAgIHB1dEFuZ2xlKCJpbm91dCIs
IEVNSVRfTUVUSE9EKGlub3V0KSk7CisrICAgIHB1dEFuZ2xlKCJvdXQiLCBFTUlUX01FVEhPRChv
dXQpKTsKKysgICAgcHV0QW5nbGUoInN3aXp6bGVfcmVmIiwgRU1JVF9NRVRIT0Qoc3dpenpsZVJl
ZikpOworKworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoIiwgRU1JVF9NRVRIT0QodGV4ZWxG
ZXRjaCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoT2Zmc2V0IiwgRU1JVF9NRVRIT0Qo
dGV4ZWxGZXRjaE9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10oUHJvZ3Jh
bVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IElt
bXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgx
KS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAg
PSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKysgICAgICAgIGlmICh0ZXh0dXJl
TmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aDJk
X2Zsb2F0M19mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJl
dHVybiBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1
YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBpZiAoYmlhcykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoY3ViZV9m
bG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmRfYXJyYXk8IikpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVf
ZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJh
eV9mbG9hdDNfZmxvYXQoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYg
Y29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0g
VEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDIpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MigpOworKyAgICAgICAgfQor
KyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9h
dCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5l
cmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFETG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFETG9kKSk7
CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQ
cm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMURQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRCIsIEVNSVRfTUVU
SE9EKHRleHR1cmUyRCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlMkRMb2QpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTJEUHJvaiIsIEVN
SVRfTUVUSE9EKHRleHR1cmUyRFByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTNETG9k
IiwgRU1JVF9NRVRIT0QodGV4dHVyZTNETG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUz
RFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmUzRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qTG9kKSk7CisrICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmUpKTsKKysgICAg
cHV0QnVpbHRJbigidGV4dHVyZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkp
OworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlQ3ViZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
Q3ViZVByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVQcm9qTG9kIiwgRU1JVF9N
RVRIT0QodGV4dHVyZUN1YmVQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFBy
b2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVHcmFkIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGgyZF9m
bG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYm
IGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQz
KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7
CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7CisrICAgIH0pOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlR3JhZE9mZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0
aW9uICZmdW5jKSB7CisrICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUg
PQorKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUoKTsKKysgICAgICAgIGNvbnN0IFRUeXBlICZj
b29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKysgICAgICAgIGNv
bnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworKyAgICAg
ICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsK
KysgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMikt
PmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHgu
Z2V0Tm9taW5hbFNpemUoKTsKKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJt
ZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6
ZGVwdGgyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1l
dGFsOjpkZXB0aGN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRh
bDo6dGV4dHVyZWN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSBkUGR4TikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROKCk7CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7
CisrICAgIH0pOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlTG9kIiwgW10oUHJvZ3JhbVByZWx1
ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1
bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAg
ICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29y
ZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMo
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJl
TG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3Rl
eHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAy
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX2dlbmVyaWNf
ZmxvYXQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAg
ICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVy
ZU9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigi
dGV4dHVyZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvaikpOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlv
biAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0K
KysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmY29v
cmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisrICAgICAgICBjb25z
dCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAg
IGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7Cisr
ICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5n
ZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgZFBkeE4gICAgICAgICAgICAgPSBkUGR4Lmdl
dE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0
YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNk
PCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9m
bG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAz
ICYmIGRQZHhOID09IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisrICAgICAgICB9Cisr
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAg
fQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVBy
b2pHcmFkT2Zmc2V0IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4
dHVyZTNkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNf
ZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygp
OworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2QiLCBbXShQcm9ncmFt
UHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1t
dXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5h
bWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7
CisrICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29y
ZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZGVwdGgy
ZF9mbG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gNCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlUHJvakxvZF90ZXh0dXJlM2RfZmxvYXQ0KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
fQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9q
TG9kX2dlbmVyaWNfZmxvYXQzKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysg
ICAgICAgIH0KKysgICAgICAgIFRPRE8oKTsKKysgICAgfSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pMb2RPZmZzZXQpKTsK
KysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
UHJvak9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9E
KHRleHR1cmVTaXplKSk7CisrCisrICAgIHJldHVybiBtYXA7CisrCisrI3VuZGVmIEVNSVRfTUVU
SE9ECisrfQorKworK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0T3BlcmF0b3IoVE9wZXJhdG9y
IG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgKmFyZ1R5cGUxKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJhZGlhbnM6CisrICAgICAgICAgICAgcmFkaWFucygpOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAg
ICAgICAgICAgZGVncmVlcygpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0YW46CisrICAgICAgICAgICAgYXRhbigpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1vZDoKKysgICAgICAgICAgICBtb2Qo
KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZy
YWN0OgorKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXN0YW5jZToKKysgICAgICAgICAgICBkaXN0YW5jZSgp
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0
aDoKKysgICAgICAgICAgICBsZW5ndGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEb3Q6CisrICAgICAgICAgICAgZG90KCk7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorKyAgICAg
ICAgICAgIG5vcm1hbGl6ZSgpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmbGVjdDoK
KysgICAgICAgICAgICByZWZsZWN0KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXNpbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpbmg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29zaDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW5oOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzaW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFiczoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbWE6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZzoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxv
b3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2VpbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmFjdDoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BSb3VuZEV2ZW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZGV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGcmV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlc3FydDoKKysgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoYXJnVHlw
ZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAvLyBFdmVuIGlmIEFyZzAgaXMgYSB2ZWN0b3Igb3IgbWF0cml4LCBpdCBjb3VsZCBhbHNv
IGJlIGFuIGFycmF5LgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFy
Z1R5cGUxLT5pc0FycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBlcXVh
bEFycmF5KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3Ry
dWN0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgp
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLgorKyAgICAg
ICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbEFycmF5KCk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcENyb3NzOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lnbjoKKysg
ICAgICAgICAgICBzaWduKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ2xhbXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1heDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNaXg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTbW9vdGhzdGVwOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxf
Y29tbW9uKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQWxsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJc25hbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2lu
ZjoKKysgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcERGZHk6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRndp
ZHRoOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGV0ZXJtaW5hbnQ6CisrICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9tYXRyaXgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBZGQ6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgYWRkTWF0cml4U2NhbGFyKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFr
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzU2NhbGFyKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2
OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUxLT5pc1Nj
YWxhcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBkaXZNYXRy
aXhTY2FsYXIoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246Cisr
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5pc01hdHJp
eCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZUFzc2lnbigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAg
ICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgb3V0ZXJQcm9kdWN0KCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJz
ZToKKysgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUwLT5nZXRDb2xzKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpbnZl
cnNlMigpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGNh
c2UgMzoKKysgICAgICAgICAgICAgICAgICAgIGludmVyc2UzKCk7CisrICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICAgICAg
ICAgaW52ZXJzZTQoKTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisrICAgICAgICAgICAgbWF0bXVsQXNzaWdu
KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRy
aXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBvc3RJbmNyZW1lbnRNYXRy
aXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZURlY3Jl
bWVudE1hdHJpeCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgICAgIGlm
IChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJl
YWs7CisrCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTmVnYXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbW1hOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcElNb2RBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRM
ZWZ0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRSaWdodDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NU
aGFuOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNz
VGhhbkNvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5F
cXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRo
YW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlTm90OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1h
dHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3Rv
clRpbWVzU2NhbGFyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0
cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzVmVjdG9yOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFJldHVybjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90
RXF1YWxDb21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGly
ZWN0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbG9hdEJpdHNUb0ludDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxv
YXQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE51bGw6CisrICAgICAgICAgICAgLy8gZG8gbm90aGluZwor
KyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6
CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtMngxNjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a1Nub3JtNHg4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtMngxNjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVW5wYWNrU25vcm00eDg6CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0hhbGYyeDE2OgorKyAgICAgICAgICAgIHBhY2tfaGFsZl8yeDE2KCk7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisrICAg
ICAgICAgICAgdW5wYWNrX2hhbGZfMngxNigpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXRmaWVsZFJldmVyc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGaW5kTVNCOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJy
eToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbXVsRXh0ZW5kZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJTaGFyZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1v
cnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXRvbWljTWF4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBdG9taWNYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWlj
RXhjaGFuZ2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRy
YW5zZm9ybToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFycmF5TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb25zdHJ1Y3Q6
CisrICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgorKyAgICAgICAgICAgIEFTU0VSVChm
dW5jKTsKKysgICAgICAgICAgICBpZiAobUhhbmRsZWQuaW5zZXJ0KGZ1bmMpLnNlY29uZCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisr
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gZW5kID0gbUZ1bmNUb0VtaXR0ZXIuZW5kKCk7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciAgICAgID0gbUZ1bmNUb0VtaXR0ZXIuZmluZChuYW1l
KTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorKyAgICAgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclszMl07CisrICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBi
dWZmZXIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2suc2Vjb25kKQorKyAgICAgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1p
dHRlci5maW5kKG1hc2suZmlyc3QpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byAmZW1pdHRlciA9IGl0ZXIt
PnNlY29uZDsKKysgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFZhcmlhYmxlKGNvbnN0IE5h
bWUgJm5hbWUsIGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBOYW1lIHR5
cGVOYW1lKCpzKTsKKysgICAgICAgIGlmICh0eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1
cmVFbnY8IikpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHRleHR1cmVFbnYoKTsKKysgICAg
ICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGlmIChuYW1lID09IGNv
bnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7CisrICAgICAgICB9CisrICAgIH0KKyt9
CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcikKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnZhcikuc2Vjb25kKQorKyAgICB7
CisrICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7CisrICAg
IH0KKyt9CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRTdHJ1Y3R1cmUoY29uc3QgVFN0
cnVjdHVyZSAmcykKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKysg
ICAgeworKyAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogcy5maWVsZHMoKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGUoTmFtZSgqZmllbGQpLCB0eXBlKTsKKysgICAg
ICAgIH0KKysgICAgfQorK30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IFRUeXBlICZs
ZWZ0VHlwZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKysgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVy
YXRvcihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUgPSBub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVyYXRv
cihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmYXJnVHlwZSk7CisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9
IG5vZGUtPmdldENoaWxkQ291bnQoKTsKKysKKysgICAgYXV0byBnZXRBcmdUeXBlID0gW25vZGUs
IGFyZ0NvdW50XShzaXplX3QgaW5kZXgpIC0+IGNvbnN0IFRUeXBlICYgeworKyAgICAgICAgQVNT
RVJUKGluZGV4IDwgYXJnQ291bnQpOworKyAgICAgICAgVEludGVybVR5cGVkICphcmcgPSBub2Rl
LT5nZXRDaGlsZE5vZGUoaW5kZXgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBBU1NFUlQoYXJn
KTsKKysgICAgICAgIHJldHVybiBhcmctPmdldFR5cGUoKTsKKysgICAgfTsKKysKKysgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgc3dpdGNo
IChub2RlLT5nZXRDaGlsZENvdW50KCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMsIG51
bGxwdHIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIDE6
CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUwID0gZ2V0QXJn
VHlwZSgwKTsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMs
ICZhcmdUeXBlMCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNh
c2UgMjoKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTAgPSBn
ZXRBcmdUeXBlKDApOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9IGdldEFy
Z1R5cGUoMSk7CisrICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5j
LCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysK
KysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJn
VHlwZTEgPSBnZXRBcmdUeXBlKDEpOworKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwLCAmYXJnVHlwZTEpOworKyAgICAgICAgfQorKyAgICAg
ICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKKyt7CisrICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2Rl
KTsKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBkZWNsLnN5bWJvbC5nZXRUeXBlKCk7CisrICAg
IGlmICh0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHMpOworKyAg
ICAgICAgdmlzaXRTdHJ1Y3R1cmUoKnMpOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30K
KysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2Rl
KQorK3sKKysgICAgdmlzaXRWYXJpYWJsZShub2RlLT52YXJpYWJsZSgpKTsKKyt9CisrCisrYm9v
bCBzaDo6RW1pdFByb2dyYW1QcmVsdWRlKFRJbnRlcm1CbG9jayAmcm9vdCwgVEluZm9TaW5rQmFz
ZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgUHJvZ3Jh
bVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBwcGMpOworKyAgICByb290LnRyYXZlcnNlKCZw
cm9ncmFtUHJlbHVkZSk7CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFt
UHJlbHVkZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTAwNDEzZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKK0BAIC0wLDAgKzEsMzUgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1BST0dSQU1QUkVMVURFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9QUk9HUkFNUFJFTFVERV9IXworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRf
c2V0PgorKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKytjbGFzcyBUSW5mb1NpbmtCYXNlOworK2NsYXNzIFRJbnRlcm1CbG9jazsKKysK
KytzdHJ1Y3QgUHJvZ3JhbVByZWx1ZGVDb25maWcKKyt7CisrICAgIGJvb2wgaGFzU3RydWN0RXEg
PSBmYWxzZTsKKyt9OworKworKy8vIFRoaXMgZW1pdHMgZml4ZWQgaGVscGVyIE1ldGFsIGNvZGUg
ZGlyZWN0bHkgd2l0aG91dCBhZGRpbmcgY29kZSB0byB0aGUgQVNULiBUaGlzIHdhbGtzIHRoZSBB
U1QgdG8KKysvLyBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCB3aGF0IHByZWx1ZGUgTVNMIGNvZGUg
aXMgbmVlZGVkIGZvciB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgQVNULiBZb3UgY2FuCisrLy8gdGhp
bmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRpb25zIG9mIGEg
aGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorKy8vIE1ldGFsIHByb2dyYW0uCisrQU5H
TEVfTk9fRElTQ0FSRCBib29sIEVtaXRQcm9ncmFtUHJlbHVkZShUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNl
ICZvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
cm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BST0dS
QU1QUkVMVURFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNw
cAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhODE2OTYKKy0tLSAvZGV2
L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwCitAQCAtMCwwICsxLDEzMCBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFj
ZQorK3sKKysKKytjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEludGVyZmFjZUJsb2NrICosIHN0ZDo6bWFwPElt
bXV0YWJsZVN0cmluZywgY29uc3QgVFZhcmlhYmxlICo+PgorKyAgICAgICAgbUxpZnRlZE1hcDsK
KysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gbUluc3RhbmNlTWFwOworKworKyAgcHVibGljOgorKyAgICBSZWR1Y2VyKFRDb21waWxl
ciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7fQor
KworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
JmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0
Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5v
ZGUuZ2V0Q2hpbGROb2RlKDApOworKworKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmdmFyICAgICAgICA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7Cisr
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgID0gdmFyLmdldFR5cGUoKTsK
KysgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlw
ZSgpOworKyAgICAgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJs
b2NrID0gdHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKHN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisrICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJm5hbWVUb1ZhciA9IG1MaWZ0ZWRN
YXBbaW50ZXJmYWNlQmxvY2tdOworKyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gcmVwbGFjZW1lbnRzOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChURmll
bGQgKmZpZWxkIDogaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpKQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5
cGUoKmZpZWxkLT50eXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0
ZWRUeXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0gfHwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBU
UXVhbGlmaWVyOjpFdnFHbG9iYWwpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5
cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
ZmllbGQtPm5hbWUoKSwgJmxpZnRlZFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+c3ltYm9sVHlwZSgpKTsKKysKKysg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lVG9WYXJbZmllbGQtPm5hbWUoKV0gPSBsaWZ0ZWRW
YXI7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjaygK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1EZWNsYXJhdGlvbntuZXcg
VEludGVybVN5bWJvbChsaWZ0ZWRWYXIpfSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUocmVwbGFj
ZW1lbnRzKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRRdWFs
aWZpZXIoKSA9PSBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtKTsKKysKKysgICAgICAgICAgICAgICAg
ICAgIGF1dG8gJnN0cnVjdHVyZSA9CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUU3Ry
dWN0dXJlKCZtU3ltYm9sVGFibGUsIGludGVyZmFjZUJsb2NrLT5uYW1lKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcmZhY2VCbG9jay0+ZmllbGRzKCks
IGludGVyZmFjZUJsb2NrLT5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0
byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgc3Ry
dWN0dXJlKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmluc3RhbmNlVmFyID0KKysgICAg
ICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwg
c3RydWN0dXJlLCBOYW1lKHZhciksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNpemVz
KCkpOworKworKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlTWFwWyZ2YXJdID0gJmluc3Rh
bmNlVmFyOworKworKyAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
c1tdID0geworKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
bmV3IFRJbnRlcm1TeW1ib2woJnN0cnVjdFZhcil9LAorKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZVJlc3VsdDo6TXVsdGkoc3RkOjpiZWdp
bihyZXBsYWNlbWVudHMpLCBzdGQ6OmVuZChyZXBsYWNlbWVudHMpKTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB7ZGVj
bE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZp
c2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOwor
KyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gaXQgPSBtSW5zdGFuY2VNYXAuZmluZCgmdmFy
KTsKKysgICAgICAgICAgICBpZiAoaXQgIT0gbUluc3RhbmNlTWFwLmVuZCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChpdC0+c2Vj
b25kKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppYiA9IHZhci5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKysg
ICAgICAgICAgICBpZiAoaXQgIT0gbUxpZnRlZE1hcC5lbmQoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07
CisrICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0ZWRWYXIpOworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcik7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN5bWJvbE5vZGU7CisrICAgIH0KKyt9OworKworK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K2Jvb2wgc2g6OlJlZHVjZUludGVyZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50
ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBSZWR1Y2VyIHJlZHVjZXIoY29tcGlsZXIpOworKyAg
ICBpZiAoIXJlZHVjZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRpb25zKCZjb21w
aWxlciwgJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VC
bG9ja3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM2OTVjYmEKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaAorQEAgLTAsMCArMSwzNSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVEVUNFSU5URVJGQUNFQkxPQ0tTX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHJld3Jp
dGVzIGludGVyZmFjZSBibG9jayBkZWNsYXJhdGlvbnMgb25seS4KKysvLworKy8vIEFjY2VzcyBv
ZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKysvLyBYWFg6IF4gU3RpbGwgdHJ1ZT8KKysv
LworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0gRm9vIHsgaW50IHg7IH07CisrLy8gQmVjb21l
czoKKysvLyAgdW5pZm9ybSBpbnQgeDsKKysvLworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworKy8vIEJlY29tZXM6CisrLy8gIHN0cnVjdCBGb28geyBpbnQg
eDsgfTsgdW5pZm9ybSBGb28geDsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZWR1Y2VJ
bnRlcmZhY2VCbG9ja3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZl
cmVuY2UuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZWZlcmVuY2UuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRiNWQ4NmMK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaAorQEAgLTAsMCArMSw1MCBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVG
RVJFTkNFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9SRUZFUkVOQ0VfSF8KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gU2ltaWxhciB0
byBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJh
dG9ycy4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBSZWYKKyt7CisrICBwdWJsaWM6
CisrICAgIFJlZihjb25zdCBSZWYgJikgPSBkZWZhdWx0OworKyAgICBSZWYoUmVmICYmKSAgICAg
ID0gZGVmYXVsdDsKKysgICAgUmVmKFQgJnJlZikgOiBtUHRyKCZyZWYpIHt9CisrCisrICAgIFJl
ZiAmb3BlcmF0b3I9KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisrICAgIFJlZiAmb3BlcmF0b3I9
KFJlZiAmJikgPSBkZWZhdWx0OworKworKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZv
dGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKysgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJlZiAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptUHRyICE9ICpvdGhl
ci5tUHRyOyB9CisrICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7
IHJldHVybiAqbVB0ciA8PSAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKysg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PCAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBSZWYgJm90aGVyKSBj
b25zdCB7IHJldHVybiAqbVB0ciA+ICpvdGhlci5tUHRyOyB9CisrCisrICAgIFQgJmdldCgpIHsg
cmV0dXJuICptUHRyOyB9CisrICAgIFQgY29uc3QgJmdldCgpIGNvbnN0IHsgcmV0dXJuICptUHRy
OyB9CisrCisrICAgIG9wZXJhdG9yIFQgJigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJh
dG9yIFQgY29uc3QgJigpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisrCisrICAgIG9wZXJhdG9y
IFQgKigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJhdG9yIFQgY29uc3QgKigpIGNvbnN0
IHsgcmV0dXJuICptUHRyOyB9CisrCisrICBwcml2YXRlOgorKyAgICBUICptUHRyOworK307Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNpbmcgQ1JlZiA9IFJlZjxUIGNvbnN0PjsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRkVSRU5DRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0
aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uYzc3ODE3NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcAor
QEAgLTAsMCArMSw5MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgUmV3cml0ZXIgOiBwdWJs
aWMgVEludGVybVJlYnVpbGQKKyt7CisrICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNvbnN0
IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisrCisrICBwdWJsaWM6CisrICAgIFJl
d3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRy
dWUsIHRydWUpIHt9CisrCisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1EZWNs
YXJlZFZhclN0YWNrLmVtcHR5KCkpOyB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQg
dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAg
ICAgICAgbURlY2xhcmVkVmFyU3RhY2suZW1wbGFjZV9iYWNrKCk7CisrICAgICAgICByZXR1cm4g
bm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJt
U3dpdGNoICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoIW1EZWNsYXJl
ZFZhclN0YWNrLmVtcHR5KCkpOworKyAgICAgICAgY29uc3QgYXV0byB2YXJzID0gc3RkOjptb3Zl
KG1EZWNsYXJlZFZhclN0YWNrLmJhY2soKSk7CisrICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5w
b3BfYmFjaygpOworKyAgICAgICAgaWYgKCF2YXJzLmVtcHR5KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAg
IGZvciAoY29uc3QgVFZhcmlhYmxlICp2YXIgOiB2YXJzKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
dmFyfSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJsb2NrLmFwcGVuZFN0YXRlbWVu
dCgmbm9kZSk7CisrICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworKyAgICAgICAgfQorKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBpZiAoIW1EZWNsYXJlZFZhclN0YWNrLmVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVEludGVybU5vZGUgKnBhcmVudCA9IGdldFBhcmVudE5vZGUoKTsKKysgICAgICAgICAgICBp
ZiAocGFyZW50LT5nZXRBc0Jsb2NrKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJlbnQgPSBnZXRQYXJlbnROb2RlKDEpOworKyAgICAgICAg
ICAgICAgICBpZiAoZ3JhbmRwYXJlbnQgJiYgZ3JhbmRwYXJlbnQtPmdldEFzU3dpdGNoTm9kZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBk
ZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgbURlY2xh
cmVkVmFyU3RhY2suYmFjaygpLnB1c2hfYmFjaygmZGVjbC5zeW1ib2wudmFyaWFibGUoKSk7Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0RXhwcikKKysgICAgICAgICAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvcjo6RU9wQXNzaWduLCAmZGVjbC5zeW1ib2wsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsLmluaXRFeHByKTsKKysgICAgICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAg
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29s
IHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJt
QmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJl
dHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTVhODgyMQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmgKK0BAIC0wLDAgKzEsNTAgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFQ0FTRURFQ0xBUkFUSU9OU19IXworKwor
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEVYQU1QTEUK
KysvLyAgICBzd2l0Y2ggKGV4cHIpCisrLy8gICAgeworKy8vICAgICAgY2FzZSAwOgorKy8vICAg
ICAgICBpbnQgeCA9IDA7CisrLy8gICAgICAgIGJyZWFrOworKy8vICAgICAgY2FzZSAxOgorKy8v
ICAgICAgICBpbnQgeSA9IDA7CisrLy8gICAgICAgIHsKKysvLyAgICAgICAgICBpbnQgeiA9IDA7
CisrLy8gICAgICAgIH0KKysvLyAgICAgICAgYnJlYWs7CisrLy8gICAgfQorKy8vIEJlY29tZXMK
KysvLyAgICB7CisrLy8gICAgICBpbnQgeDsKKysvLyAgICAgIGludCB5OworKy8vICAgICAgc3dp
dGNoIChleHByKQorKy8vICAgICAgeworKy8vICAgICAgICBjYXNlIDA6CisrLy8gICAgICAgICAg
eCA9IDA7CisrLy8gICAgICAgICAgYnJlYWs7CisrLy8gICAgICAgIGNhc2UgMToKKysvLyAgICAg
ICAgICB5ID0gMDsKKysvLyAgICAgICAgICB7CisrLy8gICAgICAgICAgICBpbnQgeiA9IDA7Cisr
Ly8gICAgICAgICAgfQorKy8vICAgICAgICAgIGJyZWFrOworKy8vICAgICAgfQorKy8vICAgIH0K
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gK
KysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNs
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLjRhZDVhMzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
Y3BwCitAQCAtMCwwICsxLDExNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKytuYW1lc3Bh
Y2UKKyt7CisrCisrY2xhc3MgRmluZERlY2xhcmVkR2xvYmFscyA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJp
YWJsZSAqPiBtRGVjbGFyZWRHbG9iYWxzOworKworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzKFRD
b21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNl
KSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFy
YXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtTm9kZSAq
ZGVjbGFyYXRvck5vZGUgPSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworKworKyAgICAgICAgaWYgKFRJbnRl
cm1CaW5hcnkgKmluaXROb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIHN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzeW1ib2xOb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzU3ltYm9s
Tm9kZSgpOworKyAgICAgICAgfQorKworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUpOworKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworKwor
KyAgICAgICAgbURlY2xhcmVkR2xvYmFscy5pbnNlcnQoJnZhcik7CisrCisrICAgICAgICByZXR1
cm4ge2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICAgIFByZVJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKyt9OworKworK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJ
bnRlcm1SZWJ1aWxkCisreworKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZh
cmlhYmxlICo+ICZtRGVjbGFyZWRHbG9iYWxzOworKyAgICBJbnZhcmlhbnRzICZtT3V0SW52YXJp
YW50czsKKysKKysgIHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwK
KysgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAq
PiAmZGVjbGFyZWRHbG9iYWxzLAorKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlh
bnRzKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLAor
KyAgICAgICAgICBtRGVjbGFyZWRHbG9iYWxzKGRlY2xhcmVkR2xvYmFscyksCisrICAgICAgICAg
IG1PdXRJbnZhcmlhbnRzKG91dEludmFyaWFudHMpCisrICAgIHt9CisrCisrICAgIFByZVJlc3Vs
dCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKAorKyAgICAgICAgVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZncURlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBUSW50ZXJtU3ltYm9sICZzeW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9s
KCk7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciAgICAgID0gc3ltYm9sTm9kZS52YXJp
YWJsZSgpOworKworKyAgICAgICAgaWYgKGdxRGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0SW52YXJpYW50cy5pbnNlcnQodmFyKTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmIChtRGVjbGFyZWRHbG9iYWxzLmZpbmQoJnZhcikgPT0gbURlY2xh
cmVkR2xvYmFscy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBU
SW50ZXJtRGVjbGFyYXRpb257JnN5bWJvbE5vZGV9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Q
cmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRz
OjpOZWl0aGVyfTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
KworK2Jvb2wgc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyhUQ29tcGlsZXIgJmNvbXBp
bGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMg
Jm91dEludmFyaWFudHMpCisreworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzIGZkZyhjb21waWxl
cik7CisrICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIFJl
d3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJp
YW50cyk7CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTEzMWJjYQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCitAQCAtMCwwICsxLDQ4IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9S
RVdSSVRFR0xPQkFMUVVBTElGSUVSREVDTFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXwor
KworKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYWNrcyBU
VmFyaWFibGVzIGFuZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KKytj
bGFzcyBJbnZhcmlhbnRzCisreworKyAgcHVibGljOgorKyAgICB2b2lkIGluc2VydChjb25zdCBU
VmFyaWFibGUgJnZhcikgeyBtSW52YXJpYW50cy5pbnNlcnQoJnZhcik7IH0KKysKKysgICAgdm9p
ZCBpbnNlcnQoY29uc3QgVEZpZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxk
KTsgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAor
KyAgICB7CisrICAgICAgICByZXR1cm4gbUludmFyaWFudHMuZmluZCgmdmFyKSAhPSBtSW52YXJp
YW50cy5lbmQoKTsKKysgICAgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRGaWVsZCAm
ZmllbGQpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZm
aWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCB2b2lkICo+IG1JbnZhcmlhbnRzOworK307CisrCisr
Ly8gVGhpcyByZXdyaXRlcyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25zIGFzIFRJ
bnRlcm1EZWNsYXJhdGlvbnMuCisrLy8gYG91dEludmFyaWFudHNgIGlzIHBvcHVsYXRlZCB3aXRo
IHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IGJ5IHN1Y2ggYQor
Ky8vIHRyYW5zZm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJ
bnZhcmlhbnRzKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJ
RVJERUNMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAKK25ldyBmaWxlIG1v
ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDE0ZjQwCistLS0gL2Rldi9udWxsCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcAorQEAgLTAsMCArMSw0MzQgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y2N0eXBlPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxsaW1pdHM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrdXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFQgKiwgY29uc3QgVCAqPjsKKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJm1LZXl3b3JkczsKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgUmVtYXBwaW5nPFRGaWVs
ZD4gbW9kaWZpZWRGaWVsZHM7CisrICAgIFJlbWFwcGluZzxURmllbGRMaXN0PiBtRmllbGRMaXN0
czsKKysgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKysgICAgUmVtYXBwaW5n
PFRJbnRlcmZhY2VCbG9jaz4gbUludGVyZmFjZUJsb2NrczsKKysgICAgUmVtYXBwaW5nPFRTdHJ1
Y3R1cmU+IG1TdHJ1Y3R1cmVzOworKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVz
OworKyAgICBzdGQ6OnN0cmluZyBtTmV3TmFtZUJ1ZmZlcjsKKysKKysgIHByaXZhdGU6CisrICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgICBJbW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVO
ZXdOYW1lKFQgY29uc3QgJm9iamVjdCkKKysgICAgeworKyAgICAgICAgaWYgKG5lZWRzUmVuYW1p
bmcob2JqZWN0LCBmYWxzZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG1JZEdl
bi5jcmVhdGVOZXdOYW1lKE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworKyAgICAgICAgfQorKyAg
ICAgICAgcmV0dXJuIE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7CisrICAgIH0KKysKKysgICAgY29u
c3QgVEZpZWxkICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysg
ICAgICAgIGF1dG8gKnJlbmFtZWQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoY29uc3RfY2Fz
dDxUVHlwZSAqPigmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKmZpZWxkLnR5cGUoKSkpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgbWF5YmVDcmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgp
LCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRGaWVsZExpc3QgKmNyZWF0ZVJlbmFtZWQoY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRMaXN0KQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0g
bmV3IFRGaWVsZExpc3QoKTsKKysgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IGZp
ZWxkTGlzdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZW5hbWVkLT5wdXNoX2JhY2soY29u
c3RfY2FzdDxURmllbGQgKj4oJmdldFJlbmFtZWRPck9yaWdpbmFsKCpmaWVsZCkpKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRG
dW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uKQorKyAgICB7
CisrICAgICAgICBhdXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEZ1bmN0aW9uKCZt
U3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsKKysKKysgICAgICAg
IGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOworKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJh
bShpKTsKKysgICAgICAgICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFtZWRPck9y
aWdpbmFsKHBhcmFtKSk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoZnVuY3Rpb24uaXNE
ZWZpbmVkKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0RGVmaW5lZCgp
OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGZ1bmN0aW9uLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90
eXBlRGVjbGFyYXRpb24oKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChj
b25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICBU
TGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0
ZSgpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZh
Y2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsKKysgICAgICAgIGxheW91dFF1YWxpZmllci5iaW5kaW5n
ICAgICAgICAgID0gaW50ZXJmYWNlQmxvY2suYmxvY2tCaW5kaW5nKCk7CisrCisrICAgICAgICBh
dXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEludGVyZmFjZUJsb2NrKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShpbnRlcmZhY2VCbG9jayksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2su
ZmllbGRzKCkpLCBsYXlvdXRRdWFsaWZpZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24o
KSk7CisrCisrICAgICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICBjb25zdCBU
U3RydWN0dXJlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKysg
ICAgeworKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisrICAgICAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdOYW1lKHN0cnVjdHVyZSksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVs
ZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKworKyAgICAgICAgcmVuYW1lZC0+
c2V0QXRHbG9iYWxTY29wZShzdHJ1Y3R1cmUuYXRHbG9iYWxTY29wZSgpKTsKKysKKysgICAgICAg
IHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRUeXBlICpjcmVhdGVSZW5h
bWVkKGNvbnN0IFRUeXBlICZ0eXBlKQorKyAgICB7CisrICAgICAgICBUVHlwZSAqcmVuYW1lZDsK
KysKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJlbmFtZWQgPSBuZXcgVFR5cGUoJmdl
dFJlbmFtZWRPck9yaWdpbmFsKCpzdHJ1Y3R1cmUpLCB0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkp
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICpp
bnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZW5hbWVkID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JPcmlnaW5hbCgqaW50
ZXJmYWNlQmxvY2spLCB0eXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIENh
bid0IHJlbmFtZSBidWlsdC1pbiB0eXBlcy4KKysgICAgICAgICAgICByZW5hbWVkID0gbnVsbHB0
cjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZW5hbWVkLT5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlTaXplcygp
KTsKKysgICAgICAgIH0KKysgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisrICAgICAgICByZW5hbWVkLT5zZXRJbnZhcmlhbnQodHlwZS5pc0ludmFyaWFudCgp
KTsKKysgICAgICAgIHJlbmFtZWQtPnNldE1lbW9yeVF1YWxpZmllcih0eXBlLmdldE1lbW9yeVF1
YWxpZmllcigpKTsKKysgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdl
dExheW91dFF1YWxpZmllcigpKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9
CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRWYXJpYWJs
ZSgmbVN5bWJvbFRhYmxlLCBtYXliZUNyZWF0ZU5ld05hbWUodmFyaWFibGUpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHZhcmlh
YmxlLmdldFR5cGUoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisrCisrICAg
ICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKysgICAgY29uc3QgVCAqdHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1h
cHBpbmc8VD4gKnJlbWFwcGluZykKKysgICAgeworKyAgICAgICAgaWYgKCFuZWVkc1JlbmFtaW5n
KG9iamVjdCwgdHJ1ZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocmVtYXBwaW5nKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZpbmQoJm9iamVjdCk7CisrICAgICAgICAg
ICAgaWYgKGl0ICE9IHJlbWFwcGluZy0+ZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9Cisr
CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkT2JqZWN0ID0gY3JlYXRlUmVuYW1lZChvYmplY3Qp
OworKworKyAgICAgICAgaWYgKHJlbWFwcGluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAo
KnJlbWFwcGluZylbJm9iamVjdF0gPSByZW5hbWVkT2JqZWN0OworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIHJlbmFtZWRPYmplY3Q7CisrICAgIH0KKysKKysgICAgY29uc3QgVEZpZWxk
ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB0cnlHZXRSZW5hbWVkSW1wbChmaWVsZCwgJm1vZGlmaWVkRmllbGRzKTsKKysgICAgfQor
KworKyAgICBjb25zdCBURmllbGRMaXN0ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkTGlzdCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKysgICAgfQorKworKyAgICBjb25zdCBURnVuY3Rpb24g
KnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoZnVuYywgJm1GdW5jdGlvbnMpOworKyAgICB9CisrCisr
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqdHJ5R2V0UmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwoaW50ZXJmYWNlQmxvY2ssICZtSW50ZXJmYWNlQmxvY2tzKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUU3RydWN0dXJlICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVj
dHVyZSwgJm1TdHJ1Y3R1cmVzKTsKKysgICAgfQorKworKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0
UmVuYW1lZChjb25zdCBUVHlwZSAmdHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdl
dFJlbmFtZWRJbXBsKHR5cGUsIHN0YXRpY19jYXN0PFJlbWFwcGluZzxUVHlwZT4gKj4obnVsbHB0
cikpOworKyAgICB9CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVmFyaWFibGUgJnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwodmFyaWFibGUsICZtVmFyaWFibGVzKTsKKysgICAgfQorKworKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKysgICAgY29uc3QgVCAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoY29uc3Qg
VCAmb2JqZWN0KQorKyAgICB7CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkID0gdHJ5R2V0UmVu
YW1lZChvYmplY3QpOworKyAgICAgICAgaWYgKHJlbmFtZWQpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICpyZW5hbWVkOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgYm9vbCBuZWVk
c1JlbmFtaW5nSW1wbChjb25zdCBUICZvYmplY3QpIGNvbnN0CisrICAgIHsKKysgICAgICAgIGNv
bnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xUeXBlKCk7CisrICAgICAg
ICBzd2l0Y2ggKHN5bWJvbFR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpCdWlsdEluOgorKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbDoKKysgICAgICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpVc2Vy
RGVmaW5lZDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAg
ICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7Cisr
ICAgICAgICBpZiAobUtleXdvcmRzLmZpbmQobmFtZSkgIT0gbUtleXdvcmRzLmVuZCgpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVs
ZCAmZmllbGQsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bmVlZHNSZW5hbWluZ0ltcGwoZmllbGQpIHx8IChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZygq
ZmllbGQudHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5n
KGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIEFTU0VSVChyZWN1cnNpdmUpOworKyAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogZmllbGRMaXN0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChuZWVk
c1JlbmFtaW5nKCpmaWVsZCwgdHJ1ZSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGdW5j
dGlvbiAmZnVuY3Rpb24sIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICBp
ZiAobmVlZHNSZW5hbWluZ0ltcGwoZnVuY3Rpb24pKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAg
ICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
CisrICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdl
dFBhcmFtKGkpOworKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBhcmFtLCB0cnVlKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VC
bG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChpbnRlcmZhY2VCbG9jaykgfHwKKysgICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKysg
ICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmdJbXBsKHN0cnVjdHVyZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
ICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkg
Y29uc3QKKysgICAgeworKyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmcoKnN0cnVjdHVyZSwgcmVjdXJzaXZlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVu
YW1pbmcoKmludGVyZmFjZUJsb2NrLCByZWN1cnNpdmUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysgICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcodmFyaWFibGUuZ2V0VHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
IHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2Vu
LCBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZrZXl3b3JkcykKKysgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRz
KSwgbUlkR2VuKGlkR2VuKQorKyAgICB7fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKG5lZWRzUmVu
YW1pbmcodmFyLCB0cnVlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJnJWYXIgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXIpOworKyAgICAgICAgICAgIHJldHVy
biAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu
IHN5bWJvbE5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJv
dG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgewor
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmln
aW5hbChmdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUoJnJGdW5jKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBmdW5jUHJvdG9Ob2Rl
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0
KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVu
Y0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmZnVuYyAgICAgICAgICAgICAgICAgICA9ICpmdW5jUHJvdG9Ob2RlLmdldEZ1bmN0aW9uKCk7
CisrICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJnJGdW5jID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwo
ZnVuYyk7CisrICAgICAgICAgICAgYXV0byAqckZ1bmNQcm90b05vZGUgICA9IG5ldyBUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5
KCkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworKyAgICB9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmFn
Z3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChhZ2dyZWdhdGVOb2Rl
LmlzQ29uc3RydWN0b3IoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmIChuZWVkc1Jl
bmFtaW5nKHR5cGUsIHRydWUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJUeXBlID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisrICAgICAgICAg
ICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihyVHlwZSwg
YWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAgICAgICBpZiAo
bmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
KysgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVOb2RlLmdldE9wKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
RnVuY3Rpb25JbkFTVDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKHJGdW5jLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRl
Tm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlUmF3RnVuY3Rpb25DYWxsKHJGdW5jLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJGdW5jLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCkpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlJld3JpdGVL
ZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3Ry
aW5nPiAma2V5d29yZHMpCisreworKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRH
ZW4sIGtleXdvcmRzKTsKKysgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOwor
K30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5iMTYyYmM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK0BAIC0w
LDAgKzEsMjcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hf
CisrCisrI2luY2x1ZGUgPHNldD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorKworK25h
bWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHdhbGtzIHRoZSB0cmVlIGFuZCByZW5hbWVzIGFs
bCBuYW1lcyB0aGF0IGNvbmZsaWN0IHdpdGggdGhlIGlucHV0IGBrZXl3b3Jkc2AuCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIFJld3JpdGVLZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRh
YmxlU3RyaW5nPiAma2V5d29yZHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtF
WVdPUkRTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MWMwMzdkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3Mu
Y3BwCitAQCAtMCwwICsxLDIwNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBTbWFsbE11bHRpU2V0CisreworKyAgcHVibGljOgorKyAg
ICBzdHJ1Y3QgRW50cnkKKysgICAgeworKyAgICAgICAgVCBlbGVtOworKyAgICAgICAgc2l6ZV90
IGNvdW50OworKyAgICB9OworKworKyAgICBjb25zdCBFbnRyeSAqZmluZChjb25zdCBUICZ4KSBj
b25zdAorKyAgICB7CisrICAgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgaWYgKHggPT0gZW50cnkuZWxlbSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiAmZW50cnk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgc2l6ZV90IG11
bHRpcGxpY2l0eShjb25zdCBUICZ4KSBjb25zdAorKyAgICB7CisrICAgICAgICBjb25zdCBFbnRy
eSAqZW50cnkgPSBmaW5kKHgpOworKyAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvdW50
IDogMDsKKysgICAgfQorKworKyAgICBjb25zdCBFbnRyeSAmaW5zZXJ0KGNvbnN0IFQgJngpCisr
ICAgIHsKKysgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgpOworKyAgICAgICAg
aWYgKGVudHJ5KQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZW50cnktPmNvdW50OworKyAg
ICAgICAgICAgIHJldHVybiAqZW50cnk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgbUVudHJpZXMucHVzaF9iYWNrKHt4LCAxfSk7CisrICAgICAg
ICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAg
ICB2b2lkIGNsZWFyKCkgeyBtRW50cmllcy5jbGVhcigpOyB9CisrCisrICAgIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisrCisrICAgIHNpemVfdCB1bmlx
dWVTaXplKCkgY29uc3QgeyByZXR1cm4gbUVudHJpZXMuc2l6ZSgpOyB9CisrCisrICBwcml2YXRl
OgorKyAgICBBTkdMRV9JTkxJTkUgRW50cnkgKmZpbmRNdXRhYmxlKGNvbnN0IFQgJngpIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8RW50cnkgKj4oZmluZCh4KSk7IH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dmVjdG9yPEVudHJ5PiBtRW50cmllczsKKyt9OworKworK2NvbnN0IFRWYXJpYWJsZSAq
R2V0VmFyaWFibGUoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBUSW50ZXJtVHlwZWQgKnR5
Tm9kZSA9IG5vZGUuZ2V0QXNUeXBlZCgpOworKyAgICBBU1NFUlQodHlOb2RlKTsKKysgICAgaWYg
KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiAmc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICB9CisrICAgIHJl
dHVybiBudWxscHRyOworK30KKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgICAgU21hbGxNdWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZl
cjsgIC8vIHJldXNhYmxlIGJ1ZmZlcgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrCisr
ICBwdWJsaWM6CisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1WYXJCdWZmZXIu
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9s
RW52ICZzeW1ib2xFbnYpCisrICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxz
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQb3N0UmVz
dWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBv
dmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsKKysK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYyA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmICghZnVuYykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gYWdncmVnYXRlTm9kZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzaXplX3Qg
YXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKysKKysgICAgICAgIGF1dG8gZ2V0UGFyYW1R
dWFsaWZpZXIgPSBbJl0oc2l6ZV90IGkpIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
JnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKysgICAgICAgICAgICBjb25zdCBUVHlw
ZSAmcGFyYW1UeXBlICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBU
UXVhbGlmaWVyIHBhcmFtUXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsKKysgICAgICAg
ICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sRW52LmlzUmVm
ZXJlbmNlKHBhcmFtKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICBicmVh
azsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKysgICAg
ICAgIH07CisrCisrICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKysKKysgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHBhcmFtUXVhbCA9IGdldFBhcmFtUXVhbGlmaWVyKGkp
OworKworKyAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxSW5PdXQ6CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyID0gR2V0VmFyaWFibGUoKmFyZ3NbaV0p
OworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQg
PiAxKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1p
Z2h0QWxpYXMgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBh
cmdDb3VudDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IGJvb2wgaGFzSW5kZXRlcm1pbmF0ZVZhciA9IG1WYXJCdWZmZXIuZmluZChu
dWxscHRyKTsKKysKKysgICAgICAgIGlmICghbWlnaHRBbGlhcykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtaWdodEFsaWFzID0gaGFzSW5kZXRlcm1pbmF0ZVZhciAmJiBtVmFyQnVmZmVyLnVu
aXF1ZVNpemUoKSA+IDE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobWlnaHRBbGlhcykK
KysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFy
ZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7
CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyICAgICAgID0gR2V0VmFyaWFi
bGUoKmFyZyk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0g
Z2V0UGFyYW1RdWFsaWZpZXIoaSk7CisrCisrICAgICAgICAgICAgICAgIGlmIChoYXNJbmRldGVy
bWluYXRlVmFyIHx8IG1WYXJCdWZmZXIubXVsdGlwbGljaXR5KHZhcikgPiAxKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cU91dDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9ICZtU3lt
Ym9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoIm91dCIpLCBhcmctPmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpuZXcgVEludGVybVNlcXVlbmNle2FyZ30pOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lKCJpbm91dCIpLCBhcmctPmdldFR5cGUoKSwgKm5ldyBUSW50
ZXJtU2VxdWVuY2V7YXJnfSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgbVZhckJ1ZmZlci5j
bGVhcigpOworKworKyAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9Owor
KworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpSZXdyaXRlT3V0QXJn
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3lt
Ym9sRW52KQorK3sKKysgICAgUmV3cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7
CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZU91dEFyZ3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4
MmI3NDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCitAQCAtMCwwICsxLDMzIEBACisrLy8K
KysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9SRVdSSVRFT1VUQVJHU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURU9VVEFSR1NfSF8KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gZS5nLjoKKysvLyAgICAvKnZvaWQgZm9vKG91dCBp
bnQgeCwgaW5vdXQgaW50IHkpKi8KKysvLyAgICBmb28oeiwgdyk7CisrLy8gYmVjb21lcworKy8v
ICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKysvLyB1bmxlc3MgYHpgIGFuZCBgd2AgYXJlIGRl
dGVjdGVkIHRvIG5ldmVyIGFsaWFzLgorKy8vIFRoZSB0cmFuc2xhdGVkIGV4YW1wbGUgZWZmZWN0
aXZlbHkgYmVoYXZlcyB0aGUgc2FtZSBhczoKKysvLyAgICBpbnQgXzE7CisrLy8gICAgaW50IF8y
ID0gdzsKKysvLyAgICBmb28oXzEsIF8yKTsKKysvLyAgICB6ID0gXzE7CisrLy8gICAgdyA9IF8y
OworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlT3V0QXJncyhUQ29tcGlsZXIgJmNvbXBp
bGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKyt9ICAv
LyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQ
aXBlbGluZXMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzYzN2Uy
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3BwCitAQCAtMCwwICsxLDkzOCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lTm9PcHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZE1haW4uaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKyt1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJl
ZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OworK3VzaW5nIFZhcmlhYmxlTGlzdCA9IHN0ZDo6dmVj
dG9yPGNvbnN0IFRWYXJpYWJsZSAqPjsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3N0cnVjdCBQaXBlbGluZVN0cnVjdEluZm8KKyt7CisrICAgIFZhcmlhYmxlU2V0IHBpcGVsaW5l
VmFyaWFibGVzOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVj
dDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0
cjsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0
cjsKKysKKysgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKysgICAgeworKyAgICAgICAgaWYgKHBp
cGVsaW5lU3RydWN0LmlzVG90YWxseUVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
QVNTRVJUKHBpcGVsaW5lVmFyaWFibGVzLmVtcHR5KCkpOworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAg
IEFTU0VSVChwaXBlbGluZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworKyAgICAgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVWYXJpYWJsZXMuZW1wdHkoKSk7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrfTsKKysKKytjbGFzcyBHZW5lcmF0ZVBpcGVsaW5l
U3RydWN0IDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNv
bnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysg
ICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFZhcmlhYmxlTGlzdCBtUGlwZWxpbmVW
YXJpYWJsZUxpc3Q7CisrICAgIElkR2VuICZtSWRHZW47CisrICAgIFBpcGVsaW5lU3RydWN0SW5m
byBtSW5mbzsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wgRXhlYyhQaXBlbGluZVN0
cnVjdEluZm8gJm91dCwKKysgICAgICAgICAgICAgICAgICAgICBUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisrICAg
IHsKKysgICAgICAgIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qgc2VsZihjb21waWxlciwgaWRHZW4s
IHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpOworKyAgICAgICAgaWYgKCFzZWxmLmV4
ZWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAg
ICAgfQorKyAgICAgICAgb3V0ID0gc2VsZi5tSW5mbzsKKysgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzKQorKyAgICAgICAg
OiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1QaXBl
bGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAg
ICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgICAgIG1JZEdlbihpZEdlbikK
KysgICAge30KKysKKysgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKysgICAgewor
KyAgICAgICAgaWYgKCFyZWJ1aWxkUm9vdChyb290KSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUluZm8ucGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisrCisrICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZwaXBlbGluZVN0cnVjdCA9IFsmXSgpIC0+IGNvbnN0IFRT
dHJ1Y3R1cmUgJiB7CisrICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KHJvb3QsIHNlcSk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgfSgpOworKworKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyBt
b2RpZmllZE1hY2hpbmVyaWVzOworKyAgICAgICAgY29uc3QgYm9vbCBtb2RpZmllZCA9IFRyeUNy
ZWF0ZU1vZGlmaWVkU3RydWN0KAorKyAgICAgICAgICAgIG1TeW1ib2xFbnYsIG1JZEdlbiwgbVBp
cGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVsaW5lU3RydWN0LAorKyAg
ICAgICAgICAgIG1QaXBlbGluZS5nZXRTdHJ1Y3RUeXBlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6
TW9kaWZpZWQpLCBtb2RpZmllZE1hY2hpbmVyaWVzKTsKKysKKysgICAgICAgIGlmIChtb2RpZmll
ZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lLnR5cGUgIT0gUGlw
ZWxpbmU6OlR5cGU6OlRleHR1cmUpOworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBjb25zdHJ1Y3Rp
b24uCisrCisrICAgICAgICAgICAgYXV0byBnZXRGdW5jdGlvbiA9IFtdKHNoOjpUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVjbCkgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisrICAgICAgICAgICAg
fTsKKysKKysgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGluZXJp
ZXMuc2l6ZSgpOworKyAgICAgICAgICAgIEFTU0VSVChzaXplID4gMCk7CisrICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmbWFjaGluZXJ5ID0gbW9k
aWZpZWRNYWNoaW5lcmllcy5hdChpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVy
eS5tb2RpZmllZFN0cnVjdCk7CisrCisrICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobmV3
IFRJbnRlcm1EZWNsYXJhdGlvbnsKKysgICAgICAgICAgICAgICAgICAgICZDcmVhdGVTdHJ1Y3RU
eXBlVmFyaWFibGUobVN5bWJvbFRhYmxlLCAqbWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0KX0pOwor
KworKyAgICAgICAgICAgICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5j
T3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbWFjaGlu
ZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworKyAgICAgICAgICAgICAgICAgICAgc2VxLnB1
c2hfYmFjayhtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2Rp
ZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1hY2hpbmVyeS5mdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PSBzaXplIC0gMSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgbUluZm8uZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IGdldEZ1bmN0aW9uKG1hY2hp
bmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIG1JbmZv
LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY01vZGlm
aWVkVG9PcmlnaW5hbCk7CisrCisrICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0
cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICAgICAgICAgIG1J
bmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0KKysgICAgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllZCA/IG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5h
bCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJvb3Qu
aW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwgc2VxKTsKKysKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRo
ZXJ9OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVElu
dGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgRGVj
bGFyYXRpb24gZGVjbCAgICAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKworKyAgICAg
ICAgaWYgKG1QaXBlbGluZS51c2VzKHZhcikpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmZpbmQoJnZhcikgPT0gbUluZm8ucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCkpOworKyAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmlu
c2VydCgmdmFyKTsKKysgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNr
KCZ2YXIpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIGRlY2xOb2RlOworKyAgICB9CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3QoVEludGVybUJsb2NrICZyb290LCBUSW50ZXJt
U2VxdWVuY2UgJm91dERlY2xTZXEpCisrICAgIHsKKysgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpu
ZXcgVEZpZWxkTGlzdCgpOworKworKyAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6
IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtSW52YXJpYW50cy5jb250YWlucygqdmFyKSk7CisrICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7
CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUQmFzaWNUeXBlIHNhbXBsZXJUeXBlID0gdmFy
VHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnRleHR1cmVFbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUp
OworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdGV4dHVyZUVudlR5cGUgICAgICAgICA9IG5l
dyBUVHlwZSgmdGV4dHVyZUVudiwgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
clR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnZUeXBlLT5tYWtlQXJyYXlzKHZhclR5cGUuZ2V0QXJyYXlTaXpl
cygpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGZp
ZWxkcy5wdXNoX2JhY2soCisrICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0
dXJlRW52VHlwZSwgdmFyLT5uYW1lKCksIGtOb1NvdXJjZUxvYywgdmFyLT5zeW1ib2xUeXBlKCkp
KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVh
azsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmdHlwZSAgPSBD
bG9uZVR5cGUodmFyLT5nZXRUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqZmll
bGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUoKSwga05vU291cmNlTG9jLCB2YXItPnN5
bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKGZpZWxk
KTsKKysKKysgICAgICAgICAgICAgICAgICAgIGlmIChtSW52YXJpYW50cy5jb250YWlucygqdmFy
KSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSW52
YXJpYW50cy5pbnNlcnQoKmZpZWxkKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IH0KKysKKysgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5lLmdldFN0
cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisrICAgICAgICBhdXRv
ICZzID0gKm5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIHBpcGVsaW5lU3RydWN0TmFtZS5y
YXdOYW1lKCksICZmaWVsZHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lU3RydWN0TmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgb3V0RGVjbFNlcS5w
dXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxl
KG1TeW1ib2xUYWJsZSwgcyl9KTsKKysKKysgICAgICAgIHJldHVybiBzOworKyAgICB9CisrfTsK
KysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5l
U3RydWN0KQorK3sKKysgICAgQVNTRVJUKHBpcGVsaW5lU3RydWN0LmlzVG90YWxseUZ1bGwoKSk7
CisrCisrICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7
CisrCisrICAgIGF1dG8gcG9wdWxhdGVFeHRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKysg
ICAgICAgIEFTU0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworKyAgICAgICAg
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgK
KysgICAgICAgICAgICBzeW1ib2xUYWJsZSwgKnBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorKyAg
ICAgICAgICAgIHBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5p
c1VuaWZvcm0oKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBQaXBlbGluZTo6VmFyaWFudDo6T3JpZ2luYWwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSk7
CisrICAgIH07CisrCisrICAgIGF1dG8gcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2Fs
VmFyID0gWyZdKCkgeworKyAgICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCk7CisrICAgICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9CisrICAgICAg
ICAgICAgJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVj
dC5pbnRlcm5hbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGlu
ZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7Cisr
ICAgIH07CisrCisrICAgIGlmIChwaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0
YW5jZUlkKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9j
YWxWYXIoKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChwaXBlbGluZS5hbHdheXNSZXF1aXJlc0xv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0
ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisrCisrICAgICAgICBpZiAocGlwZWxpbmVTdHJ1Y3Qu
aXNVbmlmb3JtKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxW
YXIuaW50ZXJuYWwgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwb3B1bGF0ZURpc3RpbmN0
SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIGlm
ICghcGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisrICAgIHsKKysgICAgICAgIHBvcHVsYXRl
RGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhcigpOworKyAgICB9CisrCisrICAgIHJldHVybiBw
aXBlbGluZU1haW5Mb2NhbFZhcjsKKyt9CisrCisrY2xhc3MgUGlwZWxpbmVGdW5jdGlvbkVudgor
K3sKKysgIHByaXZhdGU6CisrICAgIFRDb21waWxlciAmbUNvbXBpbGVyOworKyAgICBTeW1ib2xF
bnYgJm1TeW1ib2xFbnY7CisrICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworKyAgICBJ
ZEdlbiAmbUlkR2VuOworKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisrICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVj
dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFy
OworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIGNvbnN0IFRG
dW5jdGlvbiAqPiBtRnVuY01hcDsKKysKKysgIHB1YmxpYzoKKysgICAgUGlwZWxpbmVGdW5jdGlv
bkVudihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5j
dGlvbiAqPiAmcGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxWYXIp
CisrICAgICAgICA6IG1Db21waWxlcihjb21waWxlciksCisrICAgICAgICAgIG1TeW1ib2xFbnYo
c3ltYm9sRW52KSwKKysgICAgICAgICAgbVN5bWJvbFRhYmxlKHN5bWJvbEVudi5zeW1ib2xUYWJs
ZSgpKSwKKysgICAgICAgICAgbUlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgbVBpcGVsaW5lKHBp
cGVsaW5lKSwKKysgICAgICAgICAgbVBpcGVsaW5lRnVuY3Rpb25zKHBpcGVsaW5lRnVuY3Rpb25z
KSwKKysgICAgICAgICAgbVBpcGVsaW5lU3RydWN0KHBpcGVsaW5lU3RydWN0KSwKKysgICAgICAg
ICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorKyAgICB7fQor
KworKyAgICBib29sIGlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAm
ZnVuYykgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1QaXBlbGluZUZ1bmN0aW9ucy5m
aW5kKCZmdW5jKSAhPSBtUGlwZWxpbmVGdW5jdGlvbnMuZW5kKCk7CisrICAgIH0KKysKKysgICAg
Ym9vbCBpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29u
c3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAg
ICAgICAgaWYgKGl0ID09IG1GdW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiAmZnVuYyA9PSBpdC0+
c2Vjb25kOworKyAgICB9CisrCisrICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0VXBkYXRlZEZ1bmN0
aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzT3Jp
Z2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpIHx8IGlzVXBkYXRlZFBpcGVsaW5lRnVuY3Rpb24o
ZnVuYykpOworKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpuZXdGdW5jOworKworKyAgICAg
ICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAgICAgICAgaWYgKGl0ID09IG1G
dW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNNYWlu
ID0gZnVuYy5pc01haW4oKTsKKysKKysgICAgICAgICAgICBpZiAoaXNNYWluICYmIG1QaXBlbGlu
ZS5pc1BpcGVsaW5lT3V0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NF
UlQoZnVuYy5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0
Vm9pZCk7CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZENoYW5n
ZVJldHVyblR5cGUobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVT
dHJ1Y3QuZXh0ZXJuYWwpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChp
c01haW4gJiYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxl
ICo+IHZhcmlhYmxlczsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayhuZXcgVFZhcmlhYmxl
KCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxkLT50eXBlKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJv
bFR5cGUoKSkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMg
PSAmQ2xvbmVGdW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1
bmMsIHZhcmlhYmxlcyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
TWFpbiAmJiBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisrICAgICAgICAgICAgICAgIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
KnJlZmxlY3Rpb24gPQorKyAgICAgICAgICAgICAgICAgICAgKChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0ICopJm1Db21waWxlciktPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKysg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0
LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFN0cnVjdHVyZSAqdGV4dHVyZUVudiA9IGZpZWxkLT50eXBlKCktPmdldFN0
cnVjdCgpOworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVy
ZUVudi0+ZmllbGRzKCkuc2l6ZSgpID09IDIpOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBURmllbGQgKnN1YmZpZWxkIDogdGV4dHVyZUVudi0+ZmllbGRzKCkpCisrICAgICAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0g
bUlkR2VuLmNyZWF0ZU5ld05hbWUoe2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsK
KysgICAgICAgICAgICAgICAgICAgICAgICBUVHlwZSAmdHlwZSAgICAgPSAqbmV3IFRUeXBlKCpz
dWJmaWVsZC0+dHlwZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmll
bGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXplcygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvICp2YXIgPQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmdHlwZSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRPcmlnaW5hbE5hbWUodmFyLT51bmlx
dWVJZCgpLmdldCgpLCBmaWVsZC0+bmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgdmFy
aWFibGVzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgTmFtZSBuYW1lID0gbVBpcGVsaW5lLmdldFN0cnVjdElu
c3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpOworKyAgICAgICAgICAgICAg
ICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRVSW50KSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAg
ICBuZXdGdW5jICAgPSAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShtU3ltYm9sVGFibGUs
IG51bGxwdHIsIGZ1bmMsICp2YXIpOworKyAgICAgICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtB
c1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSk7CisrICAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCA9IHZhcjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS5hbHdh
eXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAqdmFyOworKyAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlOworKworKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluICYmICFtUGlwZWxpbmVN
YWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1TeW1ib2xUYWJsZSwgKm1QaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICB2YXIgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgKKysgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6T3JpZ2luYWwpKTsKKysgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NT
cGFjZSA9IG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNl
KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFj
ZTo6VGhyZWFkOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGJvb2wg
bWFya0FzUmVmZXJlbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgaWYgKGlzTWFpbikKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUu
dHlwZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrQXNSZWZlcmVuY2UgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbVN5bWJvbEVudi5tYXJr
QXNSZWZlcmVuY2UoKnZhciwgYWRkcmVzc1NwYWNlKTsKKysgICAgICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0o
bVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKysgICAgICAgICAgICB9CisrCisr
ICAgICAgICAgICAgbUZ1bmNNYXBbJmZ1bmNdICAgPSBuZXdGdW5jOworKyAgICAgICAgICAgIG1G
dW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBuZXdGdW5jID0gaXQtPnNlY29uZDsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHJldHVybiAqbmV3RnVuYzsKKysgICAgfQorKworKyAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgKmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZSgKKysgICAgICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgeworKyAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsK
KysgICAgICAgIGlmICghaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24oZnVuYykgJiYgIWlzVXBk
YXRlZFBpcGVsaW5lRnVuY3Rpb24oZnVuYykpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1
bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmbmV3RnVuYyk7CisrICAgIH0KKyt9OworKworK2NsYXNzIFVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHBy
aXZhdGU6CisrICAgIGNvbnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIGNvbnN0IFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKysgICAgUGlwZWxpbmVTY29w
ZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFyOworKyAgICBTeW1ib2xFbnYgJm1T
eW1ib2xFbnY7CisrICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKysgICAgY29uc3QgVEZ1
bmN0aW9uICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpt
RnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wg
VGhyZWFkUGlwZWxpbmUoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxW
YXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY09yaWdpbmFsVG9N
b2RpZmllZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsKQorKyAgICB7CisrICAgICAgICBVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9ucyBzZWxmKGNvbXBpbGVyLCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBp
cGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBl
bGluZU1haW5Mb2NhbFZhciwgaWRHZW4sIHN5bWJvbEVudiwgZnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisrICAgICAgICBpZiAoIXNlbGYucmVidWlsZFJvb3Qocm9vdCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIHRydWU7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFVwZGF0ZVBpcGVsaW5lRnVu
Y3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlwZWxpbmVGdW5j
dGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1
Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisr
ICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisrICAgICAg
ICAgIG1QaXBlbGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1QaXBlbGluZVN0cnVjdChwaXBl
bGluZVN0cnVjdCksCisrICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGluZU1h
aW5Mb2NhbFZhciksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAgICAg
ICAgbUVudihjb21waWxlciwKKysgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisrICAgICAgICAg
ICAgICAgaWRHZW4sCisrICAgICAgICAgICAgICAgcGlwZWxpbmUsCisrICAgICAgICAgICAgICAg
cGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1Y3QsCisrICAg
ICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKSwKKysgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisrICAgICAgICAgIG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKGZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisrICAgIHsKKysgICAg
ICAgIEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBU
RnVuY3Rpb24gJnBpcGVsaW5lRnVuYykKKysgICAgeworKyAgICAgICAgaWYgKHBpcGVsaW5lRnVu
Yy5pc01haW4oKSAmJiAobVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xh
cmF0aW9uSW5NYWluKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFtUGlwZWxpbmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAgICAgICAg
ICAgIHJldHVybiAqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworKyAgICAgICAgfQor
KyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZUZ1
bmMuZ2V0UGFyYW1Db3VudCgpID4gMCk7CisrICAgICAgICAgICAgcmV0dXJuICpwaXBlbGluZUZ1
bmMuZ2V0UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgY29uc3QgVFZhcmlh
YmxlICZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVu
YykKKysgICAgeworKyAgICAgICAgQVNTRVJUKG1haW5GdW5jLmlzTWFpbigpKTsKKysgICAgICAg
IGlmIChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICptUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWw7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5j
LmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHJldHVybiAqbWFpbkZ1bmMuZ2V0
UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEFn
Z3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChjYWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkQ2FsbGVkRnVuYyA9ICpj
YWxsTm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmICghbUVudi5pc09yaWdpbmFs
UGlwZWxpbmVGdW5jdGlvbihvbGRDYWxsZWRGdW5jKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsTm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rpb24o
b2xkQ2FsbGVkRnVuYyk7CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvbGRPd25l
ckZ1bmMgPSBnZXRQYXJlbnRGdW5jdGlvbigpOworKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25l
ckZ1bmMpOworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmbmV3T3duZXJGdW5jID0gbUVu
di5nZXRVcGRhdGVkRnVuY3Rpb24oKm9sZE93bmVyRnVuYyk7CisrCisrICAgICAgICAgICAgcmV0
dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgIG5ld0NhbGxlZEZ1bmMsICZDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCgKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTm9kZS5nZXRTZXF1ZW5jZSgpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKysgICAgICAgIH0KKysgICAg
fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1G
dW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAg
ICAgICBtRW52LmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsK
KysgICAgICAgIGlmIChuZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZ1bmNQcm90b05vZGU7CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gKm5ld0Z1bmNQcm90b05vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0Rl
Zk5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChmdW5jRGVmTm9kZS5nZXRGdW5j
dGlvbigpLT5pc01haW4oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRN
YWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gdmlzaXROb25NYWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtTm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Q
cm90b3R5cGUoKTsKKysgICAgICAgIEFTU0VSVCghZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
LT5pc01haW4oKSk7CisrCisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1
bmNQcm90b05vZGUgPQorKyAgICAgICAgICAgIG1FbnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJv
dG90eXBlKGZ1bmNQcm90b05vZGUpOworKyAgICAgICAgaWYgKG5ld0Z1bmNQcm90b05vZGUgPT0g
bnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY0RlZk5vZGU7Cisr
ICAgICAgICB9CisrCisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqbmV3RnVuY1By
b3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysgICAgICAgIEFTU0VSVCghZnVuYy5pc01haW4oKSk7
CisrCisrICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7
CisrCisrICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKG5ld0Z1
bmNQcm90b05vZGUsIGJvZHkpOworKyAgICB9CisrCisrICAgIFRJbnRlcm1Ob2RlICZ2aXNpdE1h
aW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpCisrICAgIHsKKysgICAg
ICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSA9ICpmdW5jRGVmTm9k
ZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgQVNTRVJUKGZ1bmNQcm90b05vZGUu
Z2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpOworKworKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAgICAgICBtRW52LmNyZWF0ZVVwZGF0
ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsKKysgICAgICAgIGlmIChuZXdGdW5j
UHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZ1
bmNEZWZOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5j
ID0gKm5ld0Z1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICBBU1NFUlQoZnVu
Yy5pc01haW4oKSk7CisrCisrICAgICAgICBhdXRvIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwgPSBb
Jl0oVEludGVybUJsb2NrICZib2R5KSB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pbnRlcm5hbCk7CisrICAgICAgICAgICAgaWYgKCFtUGlwZWxpbmUuaXNQaXBl
bGluZU91dCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBUSW50
ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworKyAgICAgICAg
ICAgICAgICBhdXRvICpvID0gbmV3IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgKm1G
dW5jTW9kaWZpZWRUb09yaWdpbmFsLCBuZXcgVEludGVybVNlcXVlbmNle20sIG99KSk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfTsKKysKKysgICAgICAgIGF1dG8gY2FsbE9yaWdpbmFsVG9N
b2RpZmllZCA9IFsmXShUSW50ZXJtQmxvY2sgJmJvZHkpIHsKKysgICAgICAgICAgICBBU1NFUlQo
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKysgICAgICAgICAgICBpZiAobVBpcGVs
aW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChtRnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAgICAgIGF1dG8gKm8g
PSBuZXcgVEludGVybVN5bWJvbChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAg
ICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlw
ZWxpbmVWYXJpYWJsZShmdW5jKSk7CisrICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKysgICAgICAgICAgICAg
ICAgICAgICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgbmV3IFRJbnRlcm1TZXF1ZW5jZXtvLCBt
fSkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH07CisrCisrICAgICAgICBUSW50ZXJtQmxv
Y2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7CisrCisrICAgICAgICBpZiAobVBpcGVs
aW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKworKyAgICAgICAgICAgIGF1dG8gKm5ld0JvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisrICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJt
RGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsfSk7CisrCisrICAgICAg
ICAgICAgaWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGlu
ZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHN0cnVjdCBpbnN0YW5jZSB3aXRoIHJlZmVyZW5jZXMg
dG8gZ2xvYmFsIHBpcGVsaW5lIHZhcmlhYmxlcy4KKysgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdmFyICAgICAgICA9
IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwgZmllbGQtPnR5cGUo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQt
PnN5bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICpzeW1ib2wgICAgID0g
bmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmFjY2Vz
c05vZGUgPSBBY2Nlc3NGaWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsLCB2YXIt
Pm5hbWUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3IFRJ
bnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wpOwor
KyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGFzc2lnbk5vZGUp
OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVs
aW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KGZ1bmMuZ2V0UGFyYW1Db3VudCgpID49IDIgKiBmaWVsZHMuc2l6ZSgpKTsKKysgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworKworKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQg
OiBmaWVsZHMpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmdGV4dHVyZVBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsK
KysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmc2FtcGxlclBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGF1dG8g
Z28gPSBbJl0oVEludGVybVR5cGVkICZlbnYsIGNvbnN0IGludCAqaW5kZXgpIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnRleHR1cmVGaWVsZCA9IEFjY2Vzc0ZpZWxk
KAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5
KCksIGluZGV4KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAmc2FtcGxlckZpZWxkID0gQWNjZXNzRmllbGQoCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5k
ZXgpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSk7CisrCisrICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBta0Fzc2lnbiA9IFsmXShUSW50ZXJtVHlwZWQgJmZpZWxkLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
VEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgJmZpZWxkLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2Fs
bEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZSgiYWRkcmVzc29mIiksIGZpZWxkLmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmQWNjZXNzSW5kZXgoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5
bWJvbCgmcGFyYW0pLCBpbmRleCl9KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysK
KysgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3Np
Z24odGV4dHVyZUZpZWxkLCB0ZXh0dXJlUGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24oc2FtcGxlckZpZWxkLCBzYW1wbGVy
UGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgIH07CisrCisrICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgJmVudiA9IEFjY2Vzc0ZpZWxkKCptUGlwZWxpbmVNYWluTG9jYWxWYXIu
aW50ZXJuYWwsIGZpZWxkLT5uYW1lKCkpOworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJmVudlR5cGUgPSBlbnYuZ2V0VHlwZSgpOworKworKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVudlR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBuID0gc3RhdGljX2Nhc3Q8aW50PihlbnZUeXBl
LmdldEFycmF5U2l6ZVByb2R1Y3QoKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbyhlbnYsICZpKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNl
CisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ28oZW52
LCBudWxscHRyKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQ
aXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAg
ICAgICAgICAgICAgIFRPcGVyYXRvcjo6RU9wQXNzaWduLAorKyAgICAgICAgICAgICAgICAgICAg
JkFjY2Vzc0ZpZWxkQnlJbmRleCgqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVybmFsUGlwZWxp
bmVWYXJpYWJsZShmdW5jKSksIDApLAorKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZShtU3lt
Ym9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmZ2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlh
YmxlKGZ1bmMpKSkpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoIW1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9u
e21QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbH0pOworKyAgICAgICAgICAgICAgICBjYWxs
TW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworKworKyAgICAgICAgICAgIGlm
ICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsVG9Nb2RpZmllZCgqbmV3Qm9keSk7CisrICAgICAg
ICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50
KG5ldyBUSW50ZXJtQnJhbmNoKAorKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BS
ZXR1cm4sIG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCkp
KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYm9keSA9IG5ld0JvZHk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9y
bSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmV4dGVybmFsKTsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysKKysgICAgICAgICAgICBhdXRvICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1C
bG9jaygpOworKyAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVy
bURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworKyAgICAgICAg
ICAgIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwoKm5ld0JvZHkpOworKyAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChib2R5KTsKKysgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01v
ZGlmaWVkKCpuZXdCb2R5KTsKKysgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24obmV3
RnVuY1Byb3RvTm9kZSwgYm9keSk7CisrICAgIH0KKyt9OworKworKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisrCisrYm9vbCBVcGRhdGVQaXBlbGluZVN5bWJvbHMoUGlwZWxpbmU6OlR5cGUgcGlw
ZWxpbmVUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb21waWxlciAmY29tcGls
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhcmlhYmxlU2V0ICZwaXBlbGluZVZhcmlhYmxlcywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+IHBp
cGVsaW5lTWFpbkxvY2FsVmFyKQorK3sKKysgICAgYXV0byBtYXAgPSBbJl0oY29uc3QgVEZ1bmN0
aW9uICpvd25lciwgVEludGVybVN5bWJvbCAmc3ltYm9sKSAtPiBUSW50ZXJtTm9kZSAmIHsKKysg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7CisrICAgICAg
ICBpZiAocGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBwaXBlbGluZVZhcmlhYmxlcy5l
bmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworKyAgICAgICAg
fQorKyAgICAgICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqc3Ry
dWN0SW5zdGFuY2VWYXI7CisrICAgICAgICBpZiAob3duZXItPmlzTWFpbigpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7Cisr
ICAgICAgICAgICAgc3RydWN0SW5zdGFuY2VWYXIgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBBU1NFUlQob3duZXItPmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworKyAgICAgICAgfQorKyAgICAgICAg
QVNTRVJUKHN0cnVjdEluc3RhbmNlVmFyKTsKKysgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgq
c3RydWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworKyAgICB9OworKyAgICByZXR1cm4gTWFw
U3ltYm9scyhjb21waWxlciwgcm9vdCwgbWFwKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytib29sIFJld3JpdGVQaXBlbGluZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUg
JnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAor
KyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdCkKKyt7Cisr
ICAgIEFTU0VSVChvdXRTdHJ1Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisrCisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICBQ
aXBlbGluZVN0cnVjdEluZm8gcHNpOworKyAgICBpZiAoIUdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6
OkV4ZWMocHNpLCBjb21waWxlciwgcm9vdCwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGlu
dmFyaWFudHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgaWYgKHBzaS5pc0VtcHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrCisrICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVu
ZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAg
IHJldHVybiBwc2kucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSAhPSBwc2kucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCk7CisrICAgIH0pOworKworKyAgICBhdXRvIHBpcGVsaW5lTWFpbkxvY2Fs
VmFyID0KKysgICAgICAgIENyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKHN5bWJvbFRhYmxlLCBw
aXBlbGluZSwgcHNpLnBpcGVsaW5lU3RydWN0KTsKKysKKysgICAgaWYgKCFVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6VGhyZWFkUGlwZWxpbmUoCisrICAgICAgICAgICAgY29tcGlsZXIsIHJvb3Qs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcHNpLnBpcGVsaW5lU3RydWN0LCBwaXBlbGlu
ZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBwc2kuZnVuY09y
aWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFwaXBlbGluZS5nbG9i
YWxJbnN0YW5jZVZhcikKKysgICAgeworKyAgICAgICAgaWYgKCFVcGRhdGVQaXBlbGluZVN5bWJv
bHMocGlwZWxpbmUudHlwZSwgY29tcGlsZXIsIHJvb3QsIHN5bWJvbEVudiwgcHNpLnBpcGVsaW5l
VmFyaWFibGVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVN
YWluTG9jYWxWYXIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIVBydW5lTm9PcHMoJmNvbXBpbGVyLCAmcm9v
dCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgb3V0U3RydWN0ID0gcHNpLnBpcGVsaW5lU3RydWN0Owor
KyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKwor
K2Jvb2wgc2g6OlJld3JpdGVQaXBlbGluZXMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmYW5nbGVVbmlmb3Jtc0dsb2JhbEluc3RhbmNlVmFyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGlwZWxpbmVTdHJ1Y3RzICZvdXRTdHJ1Y3RzKQorK3sKKysgICAgc3RydWN0IEluZm8KKysg
ICAgeworKyAgICAgICAgUGlwZWxpbmU6OlR5cGUgcGlwZWxpbmVUeXBlOworKyAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdDsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xvYmFsSW5zdGFuY2VWYXI7CisrICAgIH07CisrCisrICAgIEluZm8gaW5mb3NbXSA9
IHsKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCwgb3V0U3RydWN0cy5pbnN0
YW5jZUlkLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0
U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6Tm9u
Q29uc3RhbnRHbG9iYWxzLCBvdXRTdHJ1Y3RzLm5vbkNvbnN0YW50R2xvYmFscywgbnVsbHB0cn0s
CisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkFuZ2xlVW5pZm9ybXMsIG91dFN0cnVjdHMuYW5n
bGVVbmlmb3JtcywgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhcn0sCisrICAgICAgICB7
UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywgb3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51
bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbiwgb3V0U3RydWN0cy52
ZXJ0ZXhJbiwgbnVsbHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZlcnRleE91dCwg
b3V0U3RydWN0cy52ZXJ0ZXhPdXQsIG51bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51bGxwdHJ9LAorKyAgICAgICAg
e1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudE91dCwgb3V0U3RydWN0cy5mcmFnbWVudE91dCwgbnVs
bHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
LCBvdXRTdHJ1Y3RzLmludm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBudWxscHRyfSwKKysgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywgb3V0U3RydWN0cy5p
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwKKysgICAgfTsKKysKKysgICAgZm9y
IChJbmZvICZpbmZvIDogaW5mb3MpCisrICAgIHsKKysgICAgICAgIFBpcGVsaW5lIHBpcGVsaW5l
e2luZm8ucGlwZWxpbmVUeXBlLCBpbmZvLmdsb2JhbEluc3RhbmNlVmFyfTsKKysgICAgICAgIGlm
ICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxpbmUsIHN5bWJv
bEVudiwgaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ub3V0
U3RydWN0KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVz
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZVBpcGVsaW5lcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzkxYmE4
MgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaAorQEAgLTAsMCArMSw0NSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKworKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBp
bGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gVGhpcyByZXdyaXRlcyBhbGwgcGlwZWxp
bmVzLgorKy8vCisrLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisrLy8gICAgLSBEaXNjb3ZlciBhbGwg
dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisrLy8gICAgLSBNb3ZlIHRo
ZSB2YXJpYWJsZXMgaW50byBhbiBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaW5zdGFuY2UgYW5k
IHVwZGF0ZSBvbGQgdmFyaWFibGVzIHRvIGJlCisrLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisrLy8gICAgLSBEZXBlbmRlbmN5IGluamVjdCB0aGUgaW50ZXJuYWwgcGlwZWxpbmUgc3Ry
dWN0IHRvIGFsbCBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdmFyaWFibGVzIGZyb20KKysvLyAgICAg
IHRoZSBzdHJ1Y3QuCisrLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMg
Y3JlYXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisr
Ly8gICAgICBleHRlcm5hbCBhbmQgaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0cyBhcmUgdGhlIHNh
bWUuCisrLy8gICAgLSBBZGQgYG1haW5gIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUgZm9yIHRo
ZSBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgYXMgbmVlZGVkLgorKy8vICAgIC0gSW5zaWRlIGBt
YWluYCwgbWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0
aGV5IGRpZmZlciBhbmQgaXMgcHJvdmlkZWQKKysvLyAgICAgIGFzIGEgcGFyYW1ldGVyIHRvIGBt
YWluYC4KKysvLyAgICAtIEluc2lkZSBgbWFpbmAsIG1hcCB0aGUgaW50ZXJuYWwgc3RydWN0IHRv
IHRoZSBleHRlcm5hbCBzdHJ1Y3QgaWYgdGhleSBkaWZmZXIgYW5kIGlzIHJldHVybmVkCisrLy8g
ICAgICBmcm9tIGBtYWluYC4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVBpcGVsaW5l
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1i
b2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50
cyAmaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
aXBlbGluZVN0cnVjdHMgJm91dFN0cnVjdHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURVBJUEVMSU5FU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw
MDAwLi5lNzdjMWE1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNw
cAorQEAgLTAsMCArMSwzNzYgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvQXNOb2RlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
bmFtZXNwYWNlCisreworKworK2Jvb2wgSXNPdXRQYXJhbShjb25zdCBUVHlwZSAmcGFyYW1UeXBl
KQorK3sKKysgICAgY29uc3QgVFF1YWxpZmllciBxdWFsID0gcGFyYW1UeXBlLmdldFF1YWxpZmll
cigpOworKyAgICBzd2l0Y2ggKHF1YWwpCisrICAgIHsKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVybUJp
bmFyeSAmYmluYXJ5KQorK3sKKysgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5LmdldE9wKCk7Cisr
ICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorKyAg
ICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlID0gYmluYXJ5
LmdldExlZnQoKS0+Z2V0VHlwZSgpOworKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkgfHwg
bGVmdFR5cGUuaXNBcnJheSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgQVNTRVJUKElzU2NhbGFyQmFzaWNUeXBlKGJpbmFyeS5nZXRUeXBlKCkpKTsK
KysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVy
bU5vZGUgJm5vZGUpCisreworKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5v
ZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIElzVmVjdG9yQWNjZXNzKCpiaW4pOworKyAg
ICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrLy8gRGlmZmVycyBmcm9tIElzQXNzaWdu
bWVudCBpbiB0aGF0IGl0IGRvZXMgbm90IGluY2x1ZGUgKCsrKSBvciAoLS0pLgorK2Jvb2wgSXNB
c3NpZ25FcXVhbHNTaWduKFRPcGVyYXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAg
IHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrLy8gT25seSBpbmNsdWRlcyAoJD0pIHN0
eWxlIGFzc2lnbnMsIHdoZXJlICgkKSBpcyBhIGJpbmFyeSBvcC4KKytib29sIElzQ29tcG91bmRB
c3NpZ24oVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BTdWJBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2ln
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysK
Kytib29sIFJldHVybnNSZWZlcmVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChv
cCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
dkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3Np
Z246CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVE
ZWNyZW1lbnQ6CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3Ao
KTsKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAg
ICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJB
c3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFy
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsK
KysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoK
KysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisrICAg
ICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFz
c2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKysgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2ln
bjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OworKyAgICB9CisrCisrICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisrICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBh
bGxvd3MgdGhpcyBjb2RlIHRvIG5vdCBuZWVkIHRvIGludHJvZHVjZSB0ZW1wb3Jhcmllcy4KKysg
ICAgLy8KKysgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6CisrICAgIC8vICAg
ICAgdmVjW2hhc1NpZGVFZmZlY3QoKV0gKj0gNAorKyAgICAvLyBiZWNvbWluZworKyAgICAvLyAg
ICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0CisrCisr
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKysgICAgVEludGVybVR5
cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKysgICAgcmV0dXJuICpuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbGVmdC0+ZGVlcENvcHkoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShvcCwgbGVmdCwgcmlnaHQpKTsK
Kyt9CisrCisrY2xhc3MgUmV3cml0ZXIxIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
cHVibGljOgorKyAgICBSZXdyaXRlcjEoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVi
dWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpIHt9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRC
aW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysgICAgICAg
IGlmIChJc0NvbXBvdW5kQXNzaWduKG9wKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisrICAgICAgICAgICAgaWYg
KGxlZnQuZ2V0QXNTd2l6emxlTm9kZSgpIHx8IElzVmVjdG9yQWNjZXNzKGxlZnQpKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdu
bWVudChiaW5hcnlOb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gYmluYXJ5Tm9kZTsKKysgICAgfQorK307CisrCisrY2xhc3MgUmV3cml0ZXIyIDogcHVi
bGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNB
ZGRyZXNzaW5nU3RhY2s7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysKKysgIHByaXZh
dGU6CisrICAgIGJvb2wgcmVxdWlyZXNBZGRyZXNzaW5nKCkgY29uc3QKKysgICAgeworKyAgICAg
ICAgaWYgKG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBtUmVx
dWlyZXNBZGRyZXNzaW5nU3RhY2suYmFjaygpOworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAg
IH5SZXdyaXRlcjIoKSBvdmVycmlkZSB7IEFTU0VSVChtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2su
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJv
bEVudiAmc3ltYm9sRW52KQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQcmVSZXN1
bHQgdmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmYWdncmVnYXRlTm9kZSkgb3Zl
cnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRl
Tm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgaWYgKCFmdW5jKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKTsKKysg
ICAgICAgIHNpemVfdCBhcmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworKworKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisrICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAg
ICAgICAgICBUSW50ZXJtTm9kZSAqYXJnICAgICAgID0gYXJnc1tpXTsKKysgICAgICAgICAgICBB
U1NFUlQoYXJnKTsKKysKKysgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKElzT3V0UGFyYW0ocGFyYW1UeXBlKSk7CisrICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGFyZ3NbaV0pOworKyAg
ICAgICAgICAgIEFTU0VSVCghbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOworKyAg
ICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworKyAgICAgICAg
fQorKworKyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dp
enpsZSAmc3dpenpsZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghcmVxdWly
ZXNBZGRyZXNzaW5nKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHN3aXp6bGVO
b2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVybVR5cGVkICZ2ZWNOb2RlICAgICAg
ICAgPSAqc3dpenpsZU5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgY29uc3QgVFF1YWxpZmll
ckxpc3QgJm9mZnNldHMgPSBzd2l6emxlTm9kZS5nZXRTd2l6emxlT2Zmc2V0cygpOworKyAgICAg
ICAgQVNTRVJUKCFvZmZzZXRzLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG9mZnNldHMuc2l6
ZSgpIDw9IDQpOworKworKyAgICAgICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNl
KCk7CisrICAgICAgICBhcmdzLnJlc2VydmUob2Zmc2V0cy5zaXplKCkgKyAxKTsKKysgICAgICAg
IGFyZ3MucHVzaF9iYWNrKCZ2ZWNOb2RlKTsKKysgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9m
ZnNldHMpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXJncy5wdXNoX2JhY2sobmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihvZmZzZXQpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNp
Y1R5cGU6OkVidEludCkpKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBtU3ltYm9s
RW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoInN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2Rl
LmdldFR5cGUoKSwgYXJncyk7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysKKysgICAgICAgIGNv
bnN0IGJvb2wgaXNBY2Nlc3MgPSBJc1ZlY3RvckFjY2VzcyhiaW5hcnlOb2RlKTsKKysKKysgICAg
ICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVuY2Uob3ApIHx8ICFy
ZXF1aXJlc0FkZHJlc3NpbmcoKTsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZUxlZnQgID0g
ZGlzYWJsZVRvcDsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVJpZ2h0ID0gZGlzYWJsZVRv
cCB8fCBpc0FjY2VzcyB8fCBJc0Fzc2lnbkVxdWFsc1NpZ24ob3ApOworKworKyAgICAgICAgYXV0
byB0cmF2ZXJzZSA9IFsmXShUSW50ZXJtVHlwZWQgJm5vZGUsIGNvbnN0IGJvb2wgZGlzYWJsZSkg
LT4gVEludGVybVR5cGVkICYgeworKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFj
ayhmYWxzZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUgPSBh
c05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKysgICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZSk7CisrICAgICAgICAgICAgaWYgKGRpc2FibGUpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworKyAgICAg
ICAgfTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworKyAgICAgICAgVEludGVybVR5cGVkICZyaWdodE5vZGUgPSAqYmluYXJ5Tm9k
ZS5nZXRSaWdodCgpOworKworKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZl
cnNlKGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgJm5ld1Jp
Z2h0ID0gdHJhdmVyc2UocmlnaHROb2RlLCBkaXNhYmxlUmlnaHQpOworKworKyAgICAgICAgaWYg
KCFpc0FjY2VzcyB8fCBkaXNhYmxlVG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICgm
bGVmdE5vZGUgPT0gJm5ld0xlZnQgJiYgJnJpZ2h0Tm9kZSA9PSAmbmV3UmlnaHQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4geyZiaW5hcnlOb2RlLCBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4geypuZXcgVElu
dGVybUJpbmFyeShvcCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoTmFtZSgiZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7Jm5ld0xlZnQsICZuZXdSaWdodH0pLAorKyAgICAgICAgICAgICAgICBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisr
CisrYm9vbCBzaDo6UmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYpCisreworKyAgICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVi
dWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAoIVJld3JpdGVyMihjb21waWxlciwgc3ltYm9sRW52KS5yZWJ1aWxkUm9vdChyb290
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0
cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43N2RhOTg0
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKK0BAIC0wLDAgKzEs
MzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVO
QUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNo
CisreworKworKy8vIEdpdmVuOgorKy8vICAgdm9pZCBmb28ob3V0IHgpOworKy8vIEl0IGlzIHBv
c3NpYmxlIGZvciB0aGUgZm9sbG93aW5nIHRvIGJlIGxlZ2FsIGluIEdMU0wgYnV0IG5vdCBpbiBN
ZXRhbDoKKysvLyAgIGZvbyhleHByZXNzaW9uKTsKKysvLyBUaGlzIGNhbiBoYXBwZW4gaW4gY2Fz
ZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3IgdmVjdG9yIGVsZW1l
bnQgYWNjZXNzLgorKy8vIFRoaXMgcmV3cml0ZSBmdW5jdGlvbmFsaXR5IGludHJvZHVjZXMgdGVt
cG9yYXJpZXMgdGhhdCBzZXJ2ZSBhcyBwcm94aWVzIHRvIGJlIHBhc3NlZCB0byB0aGUKKysvLyBv
dXQvaW5vdXQgcGFyYW1ldGVycyBhcyBuZWVkZWQuIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Np
b25zIGdldCBwb3B1bGF0ZWQgd2l0aCB0aGVpcgorKy8vIHByb3hpZXMgYWZ0ZXIgdGhlIGZ1bmN0
aW9uIGNhbGwuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVm
ZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVS
RUZFUkVOQ0VTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4
cHJlc3Npb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVhN2Iz
NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwCitAQCAtMCwwICsx
LDY1NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlM
b29wQ29uZGl0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2Jvb2wgSXNJbmRleChUT3Bl
cmF0b3Igb3ApCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrYm9vbCBJc0luZGV4KFRJbnRlcm1U
eXBlZCAmZXhwcikKKyt7CisrICAgIGlmIChhdXRvICpiaW5hcnkgPSBleHByLmdldEFzQmluYXJ5
Tm9kZSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkp
OworKyAgICB9CisrICAgIHJldHVybiBleHByLmdldEFzU3dpenpsZU5vZGUoKTsKKyt9CisrCisr
Ym9vbCBWaWV3QmluYXJ5Q2hhaW4oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQgJm5vZGUsIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmb3V0KQorK3sKKysgICAgVEludGVybUJpbmFyeSAq
YmluYXJ5ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKTsKKysgICAgaWYgKCFiaW5hcnkgfHwgYmlu
YXJ5LT5nZXRPcCgpICE9IG9wKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgVEludGVybVR5cGVkICpsZWZ0ICA9IGJpbmFyeS0+Z2V0TGVmdCgpOworKyAg
ICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gYmluYXJ5LT5nZXRSaWdodCgpOworKworKyAgICBpZiAo
IVZpZXdCaW5hcnlDaGFpbihvcCwgKmxlZnQsIG91dCkpCisrICAgIHsKKysgICAgICAgIG91dC5w
dXNoX2JhY2sobGVmdCk7CisrICAgIH0KKysKKysgICAgaWYgKCFWaWV3QmluYXJ5Q2hhaW4ob3As
ICpyaWdodCwgb3V0KSkKKysgICAgeworKyAgICAgICAgb3V0LnB1c2hfYmFjayhyaWdodCk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBWaWV3QmluYXJ5Q2hhaW4oVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBjaGFpbjsKKysgICAgVmlld0JpbmFyeUNoYWluKG5v
ZGUuZ2V0T3AoKSwgbm9kZSwgY2hhaW4pOworKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49IDIp
OworKyAgICByZXR1cm4gY2hhaW47CisrfQorKworK2NsYXNzIFByZVBhc3MgOiBwdWJsaWMgVElu
dGVybVJlYnVpbGQKKyt7CisrICBwdWJsaWM6CisrICAgIFByZVBhc3MoVENvbXBpbGVyICZjb21w
aWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSkge30KKysKKysgIHBy
aXZhdGU6CisrICAgIC8vIENoYW5nZSBjaGFpbnMgb2YKKysgICAgLy8gICAgICB4IE9QIHkgT1Ag
egorKyAgICAvLyB0bworKyAgICAvLyAgICAgIHggT1AgKHkgT1AgeikKKysgICAgLy8gcmVnYXJk
bGVzcyBvZiBvcmlnaW5hbCBwYXJlbnRoZXNpemF0aW9uLgorKyAgICBUSW50ZXJtVHlwZWQgJnJl
YXNzb2NpYXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKysgICAgeworKyAgICAgICAgY29u
c3QgVE9wZXJhdG9yIG9wICAgICAgICAgICAgICAgID0gbm9kZS5nZXRPcCgpOworKyAgICAgICAg
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUp
OworKworKyAgICAgICAgVEludGVybVR5cGVkICpyZXN1bHQgPSBjaGFpbi5iYWNrKCk7CisrICAg
ICAgICBjaGFpbi5wb3BfYmFjaygpOworKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisrCisrICAg
ICAgICBjb25zdCBhdXRvIGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisrICAgICAgICBjb25zdCBh
dXRvIGVuZCAgID0gY2hhaW4ucmVuZCgpOworKworKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKnBhcnQgPSAqaXRlcjsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAg
ICAgICAgICAgVEludGVybU5vZGUgKnRlbXAgPSByZWJ1aWxkKCpwYXJ0KS5zaW5nbGUoKTsKKysg
ICAgICAgICAgICBBU1NFUlQodGVtcCk7CisrICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFz
VHlwZWQoKTsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAgICAgICAgICAgcmVzdWx0
ID0gbmV3IFRJbnRlcm1CaW5hcnkob3AsIHBhcnQsIHJlc3VsdCk7CisrICAgICAgICB9CisrICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgUHJlUmVz
dWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlm
IChvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BM
b2dpY2FsT3IpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHtyZWFzc29jaWF0ZVJp
Z2h0KG5vZGUpLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKyt9OworKworK2NsYXNzIFNlcGFyYXRvciA6IHB1YmxpYyBUSW50
ZXJtUmVidWlsZAorK3sKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgc3RkOjp2ZWN0b3I8c3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4+IG1TdG10c1N0YWNrOworKyAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNsYXJhdGlvbiAq
Pj4gbUJpbmRpbmdNYXBTdGFjazsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1UeXBl
ZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxU
SW50ZXJtRGVjbGFyYXRpb24gKj4gbU1hc2tlZERlY2xzOworKworKyAgcHVibGljOgorKyAgICBT
ZXBhcmF0b3IoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYsIElkR2Vu
ICZpZEdlbikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUp
LCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIH5TZXBhcmF0b3IoKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBBU1NFUlQobVN0bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICBB
U1NFUlQobUV4cHJNYXAuZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFj
ay5lbXB0eSgpKTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJmdldEN1cnJTdG10cygpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbVN0
bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICByZXR1cm4gbVN0bXRzU3RhY2suYmFjaygpOwor
KyAgICB9CisrCisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUVmFyaWFibGUgKiwgVElu
dGVybURlY2xhcmF0aW9uICo+ICZnZXRDdXJyQmluZGluZ01hcCgpCisrICAgIHsKKysgICAgICAg
IEFTU0VSVCghbUJpbmRpbmdNYXBTdGFjay5lbXB0eSgpKTsKKysgICAgICAgIHJldHVybiBtQmlu
ZGluZ01hcFN0YWNrLmJhY2soKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdG10KFRJbnRl
cm1Ob2RlICZub2RlKSB7IGdldEN1cnJTdG10cygpLnB1c2hfYmFjaygmbm9kZSk7IH0KKysKKysg
ICAgYm9vbCBpc1Rlcm1pbmFsRXhwcihUSW50ZXJtTm9kZSAmbm9kZSkKKysgICAgeworKyAgICAg
ICAgTm9kZVR5cGUgbm9kZVR5cGUgPSBnZXROb2RlVHlwZShub2RlKTsKKysgICAgICAgIHN3aXRj
aCAobm9kZVR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3lt
Ym9sOgorKyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50VW5pb246CisrICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBUSW50ZXJt
VHlwZWQgKnB1bGxNYXBwZWRFeHByKFRJbnRlcm1UeXBlZCAqbm9kZSwgYm9vbCBhbGxvd0JhY2t0
cmFjaykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICpleHByOworKworKyAgICAgICAg
eworKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9kZSk7CisrICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gbUV4cHJNYXAuZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgQVNT
RVJUKG5vZGUpOworKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisrICAgICAgICAg
ICAgQVNTRVJUKGV4cHIpOworKyAgICAgICAgICAgIG1FeHByTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgaWYgKGFsbG93QmFja3RyYWNrKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gJmJpbmRpbmdNYXAgPSBnZXRDdXJyQmluZGluZ01hcCgpOworKyAgICAg
ICAgICAgIHdoaWxlIChUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBleHByLT5nZXRBc1N5bWJvbE5v
ZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
dmFyID0gc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAg
ICAgICAgICA9IGJpbmRpbmdNYXAuZmluZCgmdmFyKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4cHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IGl0ZXItPnNlY29u
ZDsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworKyAgICAgICAgICAgICAgICBleHBy
ID0gVmlld0RlY2xhcmF0aW9uKCpkZWNsKS5pbml0RXhwcjsKKysgICAgICAgICAgICAgICAgQVNT
RVJUKGV4cHIpOworKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgICAgICAgICBtTWFza2VkRGVjbHMuaW5zZXJ0KGRlY2wpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBleHByOworKyAgICB9CisrCisrICAgIGJv
b2wgaXNTdGFuZGFsb25lRXhwcihUSW50ZXJtVHlwZWQgJmV4cHIpCisrICAgIHsKKysgICAgICAg
IGlmIChnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVChleHByLmdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBl
ZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7CisrICAgICAgICBpZiAo
aXNTdGFuZGFsb25lRXhwcihuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNo
U3RtdChuZXdFeHByKTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoSXNJbmRleChuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtRXhwck1h
cFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9
CisrICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdNYXAoKTsKKysgICAg
ICAgIGNvbnN0IE5hbWUgbmFtZSAgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAg
ICBhdXRvICp2YXIgPQorKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
bmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgYXV0byAqZGVjbCA9IG5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCAmbmV3RXhw
cik7CisrICAgICAgICBwdXNoU3RtdCgqZGVjbCk7CisrICAgICAgICBtRXhwck1hcFsmb2xkRXhw
cl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworKyAgICAgICAgYmluZGluZ01hcFt2YXJdICAg
ID0gZGVjbDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdGFja3MoKQorKyAgICB7CisrICAg
ICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3Rh
Y2suZW1wbGFjZV9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BTdGFja3MoKQorKyAg
ICB7CisrICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisrICAgICAg
ICBBU1NFUlQoIW1TdG10c1N0YWNrLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG1TdG10c1N0
YWNrLmJhY2soKS5lbXB0eSgpKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgIG1TdG10c1N0YWNrLnBvcF9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9p
ZCBwdXNoU3RtdHNJbnRvQmxvY2soVEludGVybUJsb2NrICZibG9jaywgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJnN0bXRzKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cSA9ICpibG9jay5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dCA6IHN0bXRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2wgPSBzdG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbU1hc2tlZERlY2xzLmZpbmQoZGVjbCk7Cisr
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKysgICAgICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbU1hc2tlZERlY2xzLmVyYXNlKGl0ZXIp
OworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtQmxvY2sgJmJ1aWxkQmxvY2tXaXRoVGFpbEFzc2ln
bihjb25zdCBUVmFyaWFibGUgJnZhciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRD
dXJyU3RtdHMoKSk7CisrICAgICAgICBwb3BTdGFja3MoKTsKKysKKysgICAgICAgIGF1dG8gJmJs
b2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgIGF1dG8gJnNlcSAgID0gKmJsb2Nr
LmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzZXEucmVzZXJ2ZSgxICsgc3RtdHMuc2l6ZSgpKTsK
KysgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9jaywgc3RtdHMpOworKyAgICAgICAgc2Vx
LnB1c2hfYmFjayhuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbmV3IFRJ
bnRlcm1TeW1ib2woJnZhciksICZuZXdFeHByKSk7CisrCisrICAgICAgICByZXR1cm4gYmxvY2s7
CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFByZVJlc3VsdCB2aXNpdEJsb2NrUHJlKFRJ
bnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0YWNrcygp
OworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJTdG10
cygpKTsKKysgICAgICAgIHBvcFN0YWNrcygpOworKworKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgc2VxLmNsZWFyKCk7CisrICAg
ICAgICBzZXEucmVzZXJ2ZShzdG10cy5zaXplKCkpOworKyAgICAgICAgcHVzaFN0bXRzSW50b0Js
b2NrKG5vZGUsIHN0bXRzKTsKKysKKysgICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQgPSBnZXRQ
YXJlbnROb2RlKCk7CisrICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAgICAgfQor
KworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAg
ICAgICAgaWYgKCFkZWNsLmluaXRFeHByIHx8IGlzVGVybWluYWxFeHByKCpkZWNsLmluaXRFeHBy
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgICAgICB9CisrICAgICAg
ICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgRGVjbGFyYXRpb24gZGVjbCA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKysgICAgICAgIEFT
U0VSVChkZWNsLnN5bWJvbC52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpF
bXB0eSk7CisrICAgICAgICBBU1NFUlQoIWRlY2wuc3ltYm9sLnZhcmlhYmxlKCkuZ2V0VHlwZSgp
LmlzU3RydWN0U3BlY2lmaWVyKCkpOworKworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdJbml0
RXhwciA9IHB1bGxNYXBwZWRFeHByKGRlY2wuaW5pdEV4cHIsIHRydWUpOworKyAgICAgICAgaWYg
KGRlY2wuaW5pdEV4cHIgPT0gbmV3SW5pdEV4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cHVzaFN0bXQobm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmbmV3Tm9kZSA9ICpuZXcgVEludGVybURlY2xhcmF0aW9uKCk7Cisr
ICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAorKyAgICAgICAgICAgICAgICBu
ZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsICZkZWNsLnN5bWJvbCwg
bmV3SW5pdEV4cHIpKTsKKysgICAgICAgICAgICBwdXNoU3RtdChuZXdOb2RlKTsKKysgICAgICAg
IH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlz
aXRVbmFyeVBvc3QoVEludGVybVVuYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKysgICAgICAgIFRJ
bnRlcm1UeXBlZCAqbmV3RXhwciA9IHB1bGxNYXBwZWRFeHByKGV4cHIsIGZhbHNlKTsKKysgICAg
ICAgIGlmIChleHByID09IG5ld0V4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHVzaEJp
bmRpbmcobm9kZSwgbm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtVW5hcnkobm9kZS5n
ZXRPcCgpLCBuZXdFeHByLCBub2RlLmdldEZ1bmN0aW9uKCkpKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVBy
ZShUSW50ZXJtQmluYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsK
KysgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworKwor
KyAgICAgICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0UmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgICAgICBw
dXNoU3RhY2tzKCk7CisrICAgICAgICAgICAgUG9zdFJlc3VsdCByaWdodFJlc3VsdCA9IHJlYnVp
bGQoKnJpZ2h0KTsKKysgICAgICAgICAgICBBU1NFUlQocmlnaHRSZXN1bHQuc2luZ2xlKCkpOwor
KworKyAgICAgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQg
dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChv
cCA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUgJiYgZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Rl
Y2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz
ZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVjbGFyYXRpb25Qb3N0CisrICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisrICAgICAgICB9CisrCisrICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9k
ZS5nZXRMZWZ0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdo
dCgpOworKworKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZCB8fCBv
cCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAgICAgICAg
YXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwg
bmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2wpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAqbmV3UmlnaHQgICA9IHB1bGxNYXBwZWRFeHByKHJpZ2h0LCB0cnVlKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgKnJpZ2h0QmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNz
aWduKCp2YXIsICpuZXdSaWdodCk7CisrICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdMZWZ0
ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisrCisrICAgICAgICAgICAgVEludGVy
bVR5cGVkICpjb25kID0gbmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICBpZiAo
b3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBjb25kID0gbmV3IFRJbnRlcm1VbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Qs
IGNvbmQsIG51bGxwdHIpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBwdXNoU3Rt
dCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIsIG5ld0xlZnQpKTsKKysgICAgICAgICAgICBw
dXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikpOwor
KyAgICAgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAg
ICAgfQorKworKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0xlZnQgID0gcHVsbE1hcHBlZEV4cHIobGVm
dCwgZmFsc2UpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCA9IHB1bGxNYXBwZWRF
eHByKHJpZ2h0LCBpc0Fzc2lnbik7CisrCisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpF
T3BDb21tYSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3
UmlnaHQpOworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKm5ld05vZGU7Cisr
ICAgICAgICAgICAgaWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG5ld05vZGUgPSAmbm9kZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdOb2RlKTsK
KysgICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBQ
cmVSZXN1bHQgdmlzaXRUZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBQb3N0UmVzdWx0IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdl
dENvbmRpdGlvbigpKTsKKysgICAgICAgIEFTU0VSVChjb25kUmVzdWx0LnNpbmdsZSgpKTsKKysK
KysgICAgICAgIHB1c2hTdGFja3MoKTsKKysgICAgICAgIFBvc3RSZXN1bHQgdGhlblJlc3VsdCA9
IHJlYnVpbGQoKm5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisrICAgICAgICBBU1NFUlQodGhl
blJlc3VsdC5zaW5nbGUoKSk7CisrCisrICAgICAgICBwdXNoU3RhY2tzKCk7CisrICAgICAgICBQ
b3N0UmVzdWx0IGVsc2VSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldEZhbHNlRXhwcmVzc2lvbigp
KTsKKysgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgIHJl
dHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0
IHZpc2l0VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAg
ICAgICAgVEludGVybVR5cGVkICp0aGVuICA9IG5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKTsKKysg
ICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpOwor
KworKyAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoIiIpOwor
KyAgICAgICAgYXV0byAqdmFyID0KKysgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCAmbm9kZS5nZXRUeXBlKCksIG5hbWUuc3ltYm9sVHlwZSgp
KTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIo
ZWxzZV8sIGZhbHNlKTsKKysgICAgICAgIFRJbnRlcm1CbG9jayAqZWxzZUJsb2NrID0gJmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3RWxzZSk7CisrICAgICAgICBUSW50ZXJtVHlw
ZWQgKm5ld1RoZW4gICA9IHB1bGxNYXBwZWRFeHByKHRoZW4sIHRydWUpOworKyAgICAgICAgVElu
dGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpu
ZXdUaGVuKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCAgID0gcHVsbE1hcHBlZEV4
cHIoY29uZCwgdHJ1ZSk7CisrCisrICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKysgICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybUlmRWxzZShuZXdDb25k
LCB0aGVuQmxvY2ssIGVsc2VCbG9jaykpOworKyAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHBy
KG5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBU
SW50ZXJtU3ltYm9sKHZhcik7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsK
KysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6
bGUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAg
ICA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0g
cHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhw
cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmlu
ZGluZyhub2RlLCAqbmV3IFRJbnRlcm1Td2l6emxlKG5ld0V4cHIsIG5vZGUuZ2V0U3dpenpsZU9m
ZnNldHMoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysK
KysgICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9k
ZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5v
ZGUuZ2V0U2VxdWVuY2UoKTsKKysgICAgICAgIGZvciAoVEludGVybU5vZGUgKiZhcmcgOiBhcmdz
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0
QXNUeXBlZCgpOworKyAgICAgICAgICAgIEFTU0VSVCh0YXJnKTsKKysgICAgICAgICAgICBhcmcg
PSBwdWxsTWFwcGVkRXhwcih0YXJnLCBmYWxzZSk7CisrICAgICAgICB9CisrICAgICAgICBwdXNo
QmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisr
ICAgIFBvc3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVw
cm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHB1c2hT
dG10KG5vZGUpOworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghZ2V0UGFyZW50RnVuY3Rpb24o
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIH0K
KysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdENh
c2VQcmUoVEludGVybUNhc2UgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChU
SW50ZXJtVHlwZWQgKmNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworKyAgICAgICAgfQorKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVElu
dGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVk
ICppbml0ICAgID0gbm9kZS5nZXRJbml0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0lu
aXQgPSBwdWxsTWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisrICAgICAgICBpZiAoaW5pdCA9PSBu
ZXdJbml0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAg
ICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KCpu
ZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBub2RlLmdldFN0YXRlbWVudExpc3QoKSkpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAg
ICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0SWZFbHNl
UG9zdChUSW50ZXJtSWZFbHNlICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50
ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdDb25kID0gcHVsbE1hcHBlZEV4cHIoY29uZCwgZmFsc2UpOworKyAgICAgICAg
aWYgKGNvbmQgPT0gbmV3Q29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbm9kZS5nZXRUcnVlQmxvY2so
KSwgbm9kZS5nZXRGYWxzZUJsb2NrKCkpKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBu
b2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1C
cmFuY2ggJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhw
ciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdF
eHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0g
bmV3RXhwcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdCgq
bmV3IFRJbnRlcm1CcmFuY2gobm9kZS5nZXRGbG93T3AoKSwgbmV3RXhwcikpOworKyAgICAgICAg
fQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
TG9vcFByZShUSW50ZXJtTG9vcCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYg
KCFyZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICBwdXNoU3RtdChub2RlKTsK
KysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKysgICAgfQorKwor
KyAgICBQb3N0UmVzdWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5p
b24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
bm9kZS5nZXRUeXBlKCk7CisrICAgICAgICBpZiAoIXR5cGUuaXNTY2FsYXIoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIH0KKysg
ICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9i
YWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8g
VGhlc2Ugc2hvdWxkIGJlIHNjcnViYmVkIGZyb20gQVNUIGJlZm9yZSByZXdyaXRlciBpcyBjYWxs
ZWQuCisrICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAg
ICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytib29sIHNoOjpTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENv
bXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290KQorK3sKKysgICAgaWYgKHJlYWRCb29sRW52VmFyKCJHTVRfRElT
QUJMRV9TRVBBUkFURV9DT01QT1VORF9FWFBSRVNTSU9OUyIpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBpZiAoIVNpbXBsaWZ5TG9vcENvbmRpdGlvbnMo
JmNvbXBpbGVyLCAmcm9vdCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFQcmVQYXNzKGNvbXBp
bGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdG9yKGNvbXBpbGVyLCBzeW1ib2xFbnYsIGlkR2Vu
KS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi41ZTQwYTU1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgK
K0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9O
U19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
U0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYW5zZm9ybXMgY29k
ZSB0byAodXN1YWxseSkgaGF2ZSBtb3N0IG9uZSBub24tdGVybWluYWwgZXhwcmVzc2lvbiBwZXIg
c3RhdGVtZW50LgorKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBp
bnRvIHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisrLy8K
KysvLyBlLmcuCisrLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKysvLyBiZWNvbWVz
CisrLy8gICAgYXV0byBfMSA9IGJhcigpOworKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOwor
Ky8vICAgIGF1dG8gXzMgPSA2ICsgXzI7CisrLy8gICAgaW50IHggPSBfMzsKKysvLworKy8vIFdB
Uk5JTkc6CisrLy8gICAgLSBUaGlzIGRvZXMgbm90IHJld3JpdGUgb2JqZWN0IGluZGV4aW5nIG9w
ZXJhdG9ycyBhcyBhIHdob2xlIChlLmcuIGZvby54LCBmb29beF0pLCBidXQgd2lsbAorKy8vICAg
ICAgcmV3cml0ZSB0aGUgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxl
KS4KKysvLyAgICAgIGUuZy4KKysvLyAgICAgICAgZm9vKGdldFZlYygpW2kgKyAyXSArIDEpOwor
Ky8vICAgICAgYmVjb21lcworKy8vICAgICAgICBhdXRvIF8xID0gZ2V0VmVjKCk7CisrLy8gICAg
ICAgIGF1dG8gXzIgPSBpICsgMjsKKysvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8v
IEluZGV4IG9wZXJhdG9yIHJlbWFpbnMgaW4gKCspIGV4cHIgaGVyZS4KKysvLyAgICAgICAgZm9v
KF8zKTsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBS
RVNTSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjRiYThjNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRp
b25zLmNwcAorQEAgLTAsMCArMSw3NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBTZXBhcmF0b3IgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgU2VwYXJhdG9yKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1ib2xU
YWJsZSkge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVj
bGFyYXRpb24gKmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVj
bE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2RlICZub2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrCisrICAgICAgICBpZiAoVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFy
aWFibGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSB2YXIu
Z2V0VHlwZSgpOworKyAgICAgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IHZh
ci5zeW1ib2xUeXBlKCk7CisrICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIo
KSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKysgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3
IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKHN0cnVjdHVy
ZSwgdHJ1ZSksIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysKKysgICAgICAgICAgICAgICAgYXV0byAq
aW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZVR5cGUtPnNldFF1YWxpZmllcih0eXBlLmdldFF1YWxpZmllcigpKTsKKysg
ICAgICAgICAgICAgICAgYXV0byAqaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xU
YWJsZSwgdmFyLm5hbWUoKSwgaW5zdGFuY2VUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KysKKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIHJlcGxhY2VtZW50czsKKysgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1
Y3RWYXIpKTsKKysgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVElu
dGVybVN5bWJvbChpbnN0YW5jZVZhcikpOworKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNl
bWVudHMucHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVs
dGlwbGVFbnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorK3sKKysg
ICAgU2VwYXJhdG9yIHNlcGFyYXRvcihjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKTsKKysgICAg
cm9vdC50cmF2ZXJzZSgmc2VwYXJhdG9yKTsKKysgICAgaWYgKCFzZXBhcmF0b3IudXBkYXRlVHJl
ZSgmY29tcGlsZXIsICZyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIGlmICghU2VwYXJhdGVEZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4g
dHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
U3RydWN0RGVjbGFyYXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw
Li4wNzEyZTgwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5o
CitAQCAtMCwwICsxLDI0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVD
TEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCisrCisrI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gRXhhbXBsZToKKysvLyAg
c3RydWN0IEZvbyB7IGludCB4OyB9IGZvbzsKKysvLyBCZWNvbWVzOgorKy8vICBzdHJ1Y3QgRm9v
IHtpbnQgeDsgfTsgRm9vIGZvbzsKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sg
JnJvb3QpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVDVERF
Q0xBUkFUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ta2lwcGluZ1RyYXZlcnNlci5oIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mZjQ5ZGFkCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdU
cmF2ZXJzZXIuaAorQEAgLTAsMCArMSw0NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0tJUFBJTkdUUkFWRVJT
RVJfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1NLSVBQSU5HVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8v
IEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcgY2hpbGRlbiBieSBkZWZh
dWx0LgorK2NsYXNzIFNraXBwaW5nVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
Kyt7CisrICBwdWJsaWM6CisrICAgIFNraXBwaW5nVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXRfLAor
KyAgICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBvc3RWaXNpdF8sCisrICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSAqc3ltYm9sVGFibGUgPSBudWxscHRyKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHBy
ZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQorKyAgICB7fQorKwor
KyAgICBib29sIHZpc2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFy
eSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0VGVybmFyeShWaXNpdCwgVElu
dGVybVRlcm5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdElmRWxzZShW
aXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJv
b2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAg
ICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNp
dEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIHsgcmV0
dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
KikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1NLSVBQSU5HVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3NTNkYWMKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xF
bnYuY3BwCitAQCAtMCwwICsxLDY4MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrI2luY2x1ZGUgPGxpbWl0cz4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVp
bGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKysKKytjb25zdGV4cHIgQWRkcmVzc1NwYWNlIGtBZGRyZXNzU3BhY2VzW10gPSB7CisrICAg
IEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQsCisrICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorKyAg
ICBBZGRyZXNzU3BhY2U6OlRocmVhZCwKKyt9OworKworK2NoYXIgY29uc3QgKnNoOjp0b1N0cmlu
ZyhBZGRyZXNzU3BhY2Ugc3BhY2UpCisreworKyAgICBzd2l0Y2ggKHNwYWNlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJjb25zdGFudCI7CisrICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorKyAgICAg
ICAgICAgIHJldHVybiAiZGV2aWNlIjsKKysgICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJl
YWQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0aHJlYWQiOworKyAgICB9CisrfQorKworKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisrCisrdXNpbmcgTmFtZVRvU3RydWN0ID0gc3RkOjptYXA8TmFt
ZSwgY29uc3QgVFN0cnVjdHVyZSAqPjsKKysKKytjbGFzcyBTdHJ1Y3RGaW5kZXIgOiBUSW50ZXJt
UmVidWlsZAorK3sKKysgICAgTmFtZVRvU3RydWN0IG5hbWVUb1N0cnVjdDsKKysKKysgICAgU3Ry
dWN0RmluZGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIs
IHRydWUsIGZhbHNlKSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworKworKyAgICAgICAgaWYgKHZhci5zeW1i
b2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmllcigp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdl
dFN0cnVjdCgpOworKyAgICAgICAgICAgIEFTU0VSVChzKTsKKysgICAgICAgICAgICBjb25zdCBO
YW1lIG5hbWUoKnMpOworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZ6ID0gbmFtZVRv
U3RydWN0W25hbWVdOworKyAgICAgICAgICAgIEFTU0VSVCgheik7CisrICAgICAgICAgICAgeiA9
IHM7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAg
ICBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAgIHN0YXRpYyBO
YW1lVG9TdHJ1Y3QgRmluZFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2Nr
ICZyb290KQorKyAgICB7CisrICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsK
KysgICAgICAgIGlmICghZmluZGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlKGZpbmRlci5uYW1lVG9TdHJ1Y3QpOworKyAgICB9CisrfTsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhib29sIHZhbHVlKSA6
IG1LaW5kKEtpbmQ6OkJvb2wpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRl
bXBsYXRlQXJnKGludCB2YWx1ZSkgOiBtS2luZChLaW5kOjpJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtp
bmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJn
KGNvbnN0IFRUeXBlICZ2YWx1ZSkgOiBtS2luZChLaW5kOjpUeXBlKSwgbVZhbHVlKHZhbHVlKSB7
fQorKworK2Jvb2wgVGVtcGxhdGVBcmc6Om9wZXJhdG9yPT0oY29uc3QgVGVtcGxhdGVBcmcgJm90
aGVyKSBjb25zdAorK3sKKysgICAgaWYgKG1LaW5kICE9IG90aGVyLm1LaW5kKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChtS2luZCkKKysg
ICAgeworKyAgICAgICAgY2FzZSBLaW5kOjpCb29sOgorKyAgICAgICAgICAgIHJldHVybiBtVmFs
dWUuYiA9PSBvdGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAg
ICAgICAgIHJldHVybiBtVmFsdWUuaSA9PSBvdGhlci5tVmFsdWUuaTsKKysgICAgICAgIGNhc2Ug
S2luZDo6VUludDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIubVZhbHVl
LnU7CisrICAgICAgICBjYXNlIEtpbmQ6OlR5cGU6CisrICAgICAgICAgICAgcmV0dXJuICptVmFs
dWUudCA9PSAqb3RoZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrYm9vbCBUZW1wbGF0ZUFy
Zzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKKyt7CisrICAgIGlm
IChtS2luZCA8IG90aGVyLm1LaW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgICBpZiAobUtpbmQgPiBvdGhlci5tS2luZCkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHN3aXRjaCAobUtpbmQpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgS2luZDo6Qm9vbDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBv
dGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAgICAgICAgIHJl
dHVybiBtVmFsdWUuaSA8IG90aGVyLm1WYWx1ZS5pOworKyAgICAgICAgY2FzZSBLaW5kOjpVSW50
OgorKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUudSA8IG90aGVyLm1WYWx1ZS51OworKyAgICAg
ICAgY2FzZSBLaW5kOjpUeXBlOgorKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3Ro
ZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kytib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRl
TmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4gYmFzZU5hbWUgPT0gb3RoZXIuYmFz
ZU5hbWUgJiYgdGVtcGxhdGVBcmdzID09IG90aGVyLnRlbXBsYXRlQXJnczsKKyt9CisrCisrYm9v
bCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0CisreworKyAgICBpZiAoYmFzZU5hbWUgPCBvdGhlci5iYXNlTmFtZSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysgICAgaWYgKG90aGVyLmJhc2VO
YW1lIDwgYmFzZU5hbWUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVBcmdzOworK30KKysKKyti
b29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAgICByZXR1
cm4gYmFzZU5hbWUuZW1wdHkoKSAmJiB0ZW1wbGF0ZUFyZ3MuZW1wdHkoKTsKKyt9CisrCisrdm9p
ZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6Y2xlYXIoKQorK3sKKysgICAgYmFzZU5hbWUgPSBO
YW1lKCk7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigpOworK30KKysKKytOYW1lIFN5bWJvbEVu
djo6VGVtcGxhdGVOYW1lOjpmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25zdAorK3sK
KysgICAgQVNTRVJUKGJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgaWYgKHRlbXBsYXRlQXJncy5l
bXB0eSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gYmFzZU5hbWU7CisrICAgIH0KKysKKysg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbiA9IHN0ZDo6bWF4KHsKKysgICAgICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisrICAgICAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46OmRpZ2l0czEwLCAgICAgICAvLworKyAgICAgICAgNSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4X2xlbmd0aCgidHJ1ZSIsICJm
YWxzZSIpCisrICAgIH0pOworKworKyAgICBidWZmZXIucmVzZXJ2ZShiYXNlTmFtZS5yYXdOYW1l
KCkubGVuZ3RoKCkgKyAobiArIDIpICogdGVtcGxhdGVBcmdzLnNpemUoKSArIDEpOworKyAgICBi
dWZmZXIgKz0gYmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKysKKysgICAgaWYgKCF0ZW1wbGF0
ZUFyZ3MuZW1wdHkoKSkKKysgICAgeworKyAgICAgICAgYnVmZmVyICs9ICI8IjsKKysKKysgICAg
ICAgIGJvb2wgZmlyc3QgPSB0cnVlOworKyAgICAgICAgY2hhciBhcmdCdWZmZXJbbiArIDFdOwor
KyAgICAgICAgZm9yIChjb25zdCBUZW1wbGF0ZUFyZyAmYXJnIDogdGVtcGxhdGVBcmdzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChmaXJzdCkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiLCAiOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6VmFsdWUgdmFs
dWUgPSBhcmcudmFsdWUoKTsKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6S2luZCBr
aW5kICAgPSBhcmcua2luZCgpOworKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkJvb2w6Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikKKysgICAgICAgICAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gInRydWUiOworKyAgICAgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFsc2UiOworKyAgICAg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkludDoKKysgICAgICAgICAgICAgICAg
ICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB2YWx1ZS5pKTsKKysgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysK
KysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKysgICAgICAg
ICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJXUiLCB2YWx1ZS51KTsKKysgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKysKKysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VHlwZToK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSAqdmFsdWUudDsKKysgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJl
ICpzID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcy0+bmFtZSgpLmRhdGEoKTsKKysgICAgICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2lj
VHlwZSh0eXBlKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXR5cGUuaXNBcnJheSgpKTsgIC8vIFRPRE8KKysgICAgICAgICAgICAgICAg
ICAgICAgICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwg
dHlwZS5nZXROb21pbmFsU2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZm
ZXIsICIlaSIsIHR5cGUuZ2V0Q29scygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
ICs9ICJ4IjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIs
ICIlaSIsIHR5cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgYnVmZmVyICs9ICI+IjsK
KysgICAgfQorKworKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZShidWZmZXIpOworKyAg
ICBidWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuIE5hbWUobmFtZSwgYmFzZU5hbWUuc3lt
Ym9sVHlwZSgpKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6YXNzaWdu
KGNvbnN0IE5hbWUgJm5hbWUsIHNpemVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFy
Z3MpCisreworKyAgICBiYXNlTmFtZSA9IG5hbWU7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigp
OworKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisrICAgIHsKKysg
ICAgICAgIHRlbXBsYXRlQXJncy5wdXNoX2JhY2soYXJnc1tpXSk7CisrICAgIH0KKyt9CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytTeW1ib2xFbnY6OlN5bWJvbEVudihUQ29tcGls
ZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisrICAgIDogbVN5bWJvbFRhYmxlKGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorKyAgICAgIG1OYW1lVG9TdHJ1Y3QoU3RydWN0Rmlu
ZGVyOjpGaW5kU3RydWN0cyhjb21waWxlciwgcm9vdCkpCisre30KKysKKytjb25zdCBUU3RydWN0
dXJlICZTeW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0CisreworKyAg
ICBjb25zdCBOYW1lIG5hbWUocyk7CisrICAgIGF1dG8gaXRlciA9IG1OYW1lVG9TdHJ1Y3QuZmlu
ZChuYW1lKTsKKysgICAgaWYgKGl0ZXIgPT0gbU5hbWVUb1N0cnVjdC5lbmQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKysgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICpp
dGVyLT5zZWNvbmQ7CisrICAgIHJldHVybiB6OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICpT
eW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0CisreworKyAgICBpZiAo
cykKKysgICAgeworKyAgICAgICAgcmV0dXJuICZyZW1hcCgqcyk7CisrICAgIH0KKysgICAgcmV0
dXJuIG51bGxwdHI7CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmU3ltYm9sRW52OjpnZXRGdW5j
dGlvbk92ZXJsb2FkSW1wbCgpCisreworKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5l
bXB0eSgpKTsKKysKKysgICAgU2lnVG9GdW5jICZzaWdUb0Z1bmMgPSBtT3ZlcmxvYWRzW21SZXVz
YWJsZVRlbXBsYXRlTmFtZUJ1ZmZlcl07CisrICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2ln
VG9GdW5jW21SZXVzYWJsZVNpZ0J1ZmZlcl07CisrCisrICAgIGlmICghZnVuYykKKysgICAgewor
KyAgICAgICAgY29uc3QgVFR5cGUgJnJldHVyblR5cGUgPSBtUmV1c2FibGVTaWdCdWZmZXIuYmFj
aygpOworKyAgICAgICAgbVJldXNhYmxlU2lnQnVmZmVyLnBvcF9iYWNrKCk7CisrCisrICAgICAg
ICBjb25zdCBOYW1lIG5hbWUgPSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZnVsbE5hbWUo
bVJldXNhYmxlU3RyaW5nQnVmZmVyKTsKKysKKysgICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9u
KCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVy
blR5cGUsIGZhbHNlKTsKKysgICAgICAgIGZvciAoY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA6IG1S
ZXVzYWJsZVNpZ0J1ZmZlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBmdW5jLT5hZGRQYXJh
bWV0ZXIoCisrICAgICAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwga0Vt
cHR5SW1tdXRhYmxlU3RyaW5nLCAmcGFyYW1UeXBlLCBTeW1ib2xUeXBlOjpFbXB0eSkpOworKyAg
ICAgICAgfQorKyAgICB9CisrCisrICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5jbGVhcigpOworKyAg
ICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuICpm
dW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVy
bG9hZChjb25zdCBOYW1lICZuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICoqcGFyYW1UeXBlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdz
KQorK3sKKysgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNT
RVJUKG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgIHsKKysgICAgICAgIG1SZXVz
YWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2soKnBhcmFtVHlwZXNbaV0pOworKyAgICB9CisrICAgIG1S
ZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2socmV0dXJuVHlwZSk7CisrICAgIG1SZXVzYWJsZVRl
bXBsYXRlTmFtZUJ1ZmZlci5hc3NpZ24obmFtZSwgdGVtcGxhdGVBcmdDb3VudCwgdGVtcGxhdGVB
cmdzKTsKKysgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7CisrfQorKworK1RJ
bnRlcm1BZ2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFt
ZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRl
QXJnQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdzKQorK3sKKysgICAgQVNTRVJUKG1S
ZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNTRVJUKG1SZXVzYWJsZVRlbXBsYXRl
TmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJn
cykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICBBU1NFUlQodGFyZyk7CisrICAgICAgICBtUmV1c2FibGVTaWdCdWZmZXIu
cHVzaF9iYWNrKHRhcmctPmdldFR5cGUoKSk7CisrICAgIH0KKysgICAgbVJldXNhYmxlU2lnQnVm
ZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKysgICAgbVJldXNhYmxlVGVtcGxhdGVOYW1lQnVm
ZmVyLmFzc2lnbihuYW1lLCB0ZW1wbGF0ZUFyZ0NvdW50LCB0ZW1wbGF0ZUFyZ3MpOworKyAgICBj
b25zdCBURnVuY3Rpb24gJmZ1bmMgPSBnZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworKyAgICBy
ZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJn
cyk7CisrfQorKworK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNv
bnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcykKKyt7CisrICAgIEFTU0VSVChuYW1l
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgVFN0
cnVjdHVyZSAqJnMgPSBtQW5nbGVTdHJ1Y3RzW25hbWUucmF3TmFtZSgpXTsKKysgICAgQVNTRVJU
KCFzKTsKKysgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFt
ZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIHJldHVybiAqczsKKyt9Cisr
CisrY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUg
c2FtcGxlclR5cGUpCisreworKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7Cisr
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZlbnYgPSBtVGV4dHVyZUVudnNbc2FtcGxlclR5cGVdOwor
KyAgICBpZiAoZW52ID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIGF1dG8gKnRleHR1cmVU
eXBlID0gbmV3IFRUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgICAgIGF1dG8gKnRleHR1cmUgICAg
ID0gbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtO
b1NvdXJjZUxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIoKnRleHR1cmUsIEFkZHJl
c3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorKyAgICAgICAg
ICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCksIGZhbHNlKSwgSW1t
dXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICBrTm9Tb3Vy
Y2VMb2MsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIHN0ZDo6c3RyaW5n
IGVudk5hbWU7CisrICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisrICAgICAgICBl
bnZOYW1lICs9IEdldFRleHR1cmVUeXBlTmFtZShzYW1wbGVyVHlwZSkucmF3TmFtZSgpLmRhdGEo
KTsKKysgICAgICAgIGVudk5hbWUgKz0gIj4iOworKworKyAgICAgICAgZW52ID0gJm5ld1N0cnVj
dHVyZShOYW1lKGVudk5hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRGaWVsZExpc3R7dGV4dHVyZSwgc2FtcGxlcn0pOwor
KyAgICB9CisrICAgIHJldHVybiAqZW52OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICZTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QoKQorK3sKKysgICAgaWYgKCFtU2FtcGxlcikKKysgICAg
eworKyAgICAgICAgbVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcoIm1ldGFsOjpzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysg
ICAgfQorKyAgICByZXR1cm4gKm1TYW1wbGVyOworK30KKysKKyt2b2lkIFN5bWJvbEVudjo6bWFy
a1NwYWNlKFZhckZpZWxkIHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3Bh
Y2Ugc3BhY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkKKyt7CisrICAgIC8vIEl0IGlzIGluIHByaW5j
aXBsZSBwZXJtaXNzaWJsZSB0byBoYXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlw
bGUgcG9pbnRlcnMsIGJ1dCB0aGlzCisrICAgIC8vIGlzIG5vdCByZXF1aXJlZCBmb3Igbm93IGFu
ZCB3b3VsZCByZXF1aXJlIGNvZGUgY2hhbmdlcyB0byBnZXQgcmlnaHQuCisrICAgIEFTU0VSVCgh
aXNQb2ludGVyKHgpKTsKKysgICAgQVNTRVJUKCFpc1JlZmVyZW5jZSh4KSk7CisrCisrICAgIG1h
cFt4XSA9IHNwYWNlOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNT
cGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBj
b25zdAorK3sKKysgICAgY29uc3QgYXV0byBpdGVyID0gbWFwLmZpbmQoeCk7CisrICAgIGlmIChp
dGVyID09IG1hcC5lbmQoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAg
IH0KKysgICAgY29uc3QgQWRkcmVzc1NwYWNlIHNwYWNlID0gaXRlci0+c2Vjb25kOworKyAgICBj
b25zdCBhdXRvIGluZGV4ICAgICAgICAgPSBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlw
ZV90PEFkZHJlc3NTcGFjZT4+KHNwYWNlKTsKKysgICAgcmV0dXJuICZrQWRkcmVzc1NwYWNlc1tp
bmRleF07CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZhckZpZWxkIHgs
IEFkZHJlc3NTcGFjZSBzcGFjZSkKKyt7CisrICAgIHJldHVybiBtYXJrU3BhY2UoeCwgc3BhY2Us
IG1Qb2ludGVycyk7CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNSZWZlcmVuY2UoVmFy
RmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKQorK3sKKysgICAgcmV0dXJuIG1hcmtTcGFjZSh4
LCBzcGFjZSwgbVJlZmVyZW5jZXMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJv
bEVudjo6aXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0CisreworKyAgICByZXR1cm4gaXNTcGFj
ZSh4LCBtUG9pbnRlcnMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKKyt7CisrICAgIHJldHVybiBpc1NwYWNlKHgs
IG1SZWZlcmVuY2VzKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BhY2tlZChjb25z
dCBURmllbGQgJmZpZWxkKQorK3sKKysgICAgbVBhY2tlZEZpZWxkcy5pbnNlcnQoJmZpZWxkKTsK
Kyt9CisrCisrYm9vbCBTeW1ib2xFbnY6OmlzUGFja2VkKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNv
bnN0CisreworKyAgICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tl
ZEZpZWxkcy5lbmQoKTsKKyt9CisrCisrc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2lj
VHlwZShUQmFzaWNUeXBlIGJhc2ljVHlwZSkKKyt7CisrICAgIEFTU0VSVChJc1NhbXBsZXIoYmFz
aWNUeXBlKSk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRN
U0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlkZW9XRUJHTDoKKysgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEQXJyYXk6CisrICAgICAg
ICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVy
QnVmZmVyOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURT
aGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICAg
ICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworKworKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVNBcnJh
eToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoKKysgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5
OgorKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRJbnQ7CisrCisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVM6CisrICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRNU0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjFEQXJyYXk6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0Ogor
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFVJbnQ7Cisr
CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAg
ICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFZvaWQ7CisrICAgIH0KKyt9CisrCisrTmFtZSBz
aDo6R2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUpCisreworKyAgICBB
U1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7CisrCisrICAgIGNvbnN0IFRCYXNpY1R5cGUg
dGV4dHVyZVR5cGUgPSBHZXRUZXh0dXJlQmFzaWNUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgY29u
c3QgY2hhciAqbmFtZTsKKysKKysjZGVmaW5lIEhBTkRMRV9URVhUVVJFX05BTUUoYmFzZU5hbWUp
ICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OiAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGZsb2F0PiI7IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDog
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGludD4iOyAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPHVpbnQ+IjsgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7ICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgfSB3aGlsZSAoZmFsc2UpCisrCisrICAgIHN3aXRjaCAo
c2FtcGxlclR5cGUpCisrICAgIHsKKysgICAgICAgIC8vIDFkCisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIxRDogIC8vIERlc2t0b3AgR0xTTCBzYW1wbGVyIHR5cGU6CisrICAgICAgICBjYXNlIEVi
dElTYW1wbGVyMUQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMUQ6CisrICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICAvLyAxZCBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjFEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFk
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBCdWZmZXIgdGV4
dHVyZXMKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorKyAgICAg
ICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmVfYnVmZmVyIik7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAvLyAyZCB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRSZWN0OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoK
KysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmQiKTsKKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIC8vIDNkIHRleHR1cmVzCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJl
M2QiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoInRleHR1cmVjdWJlIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAvLyAyZCBhcnJheSB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZTJkX2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRNUzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0
ZXh0dXJlMmRfbXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJETVNBcnJheToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNU0FycmF5OgorKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9tc19hcnJheSIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgLy8gY3ViZSBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmVBcnJheToKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgi
dGV4dHVyZWN1YmVfYXJyYXkiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8v
IFNoYWRvdworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAg
ICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJUT0RPIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0
aDJkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJD
dWJlU2hhZG93OgorKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoImRlcHRoY3ViZSIp
OworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkX2FycmF5
Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
QXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJl
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBFeHRlbnRpb25z
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICAgICAgLy8gT25seSB2YWxp
ZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6ICAvLyBPbmx5IHZhbGlkIGlmIEdMX0VYVF9ZVVZfdGFyZ2V0
IGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKysg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKysgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKysgICAgICAgICAgICBi
cmVhazsKKysgICAgfQorKworKyN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCisrCisrICAgIHJl
dHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVu
di5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGM5NjQ1ZQorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1N5bWJvbEVudi5oCitAQCAtMCwwICsxLDIxOCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9M
RU5WX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9TWU1CT0xFTlZfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisrewor
KworK2VudW0gY2xhc3MgQWRkcmVzc1NwYWNlCisreworKyAgICBDb25zdGFudCwKKysgICAgRGV2
aWNlLAorKyAgICBUaHJlYWQsCisrfTsKKysKKytjaGFyIGNvbnN0ICp0b1N0cmluZyhBZGRyZXNz
U3BhY2Ugc3BhY2UpOworKworK2NsYXNzIFZhckZpZWxkCisreworKyAgcHVibGljOgorKyAgICBW
YXJGaWVsZChjb25zdCBUVmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhcikge30KKysgICAg
VmFyRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSB7fQorKworKyAg
ICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1WYXJpYWJsZTsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgp
IGNvbnN0IHsgcmV0dXJuIG1GaWVsZDsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZhckZpZWxkICZvdGhlcikgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0
dXJuIG1WYXJpYWJsZSA9PSBvdGhlci5tVmFyaWFibGUgJiYgbUZpZWxkID09IG90aGVyLm1GaWVs
ZDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgY29uc3QgVFZhcmlhYmxlICptVmFyaWFi
bGUgPSBudWxscHRyOworKyAgICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7
CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKytuYW1lc3BhY2Ugc3RkCisreworKwor
K3RlbXBsYXRlIDw+Cisrc3RydWN0IGhhc2g8c2g6OlZhckZpZWxkPgorK3sKKysgICAgc2l6ZV90
IG9wZXJhdG9yKCkoY29uc3Qgc2g6OlZhckZpZWxkICZ4KSBjb25zdAorKyAgICB7CisrICAgICAg
ICBjb25zdCBzaDo6VFZhcmlhYmxlICp2YXIgPSB4LnZhcmlhYmxlKCk7CisrICAgICAgICBpZiAo
dmFyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qgc2g6
OlRWYXJpYWJsZSAqPigpKHZhcik7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBzaDo6VEZp
ZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKysgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qg
c2g6OlRGaWVsZCAqPigpKGZpZWxkKTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNl
IHN0ZAorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytjbGFzcyBUZW1wbGF0ZUFyZworK3sKKysg
IHB1YmxpYzoKKysgICAgZW51bSBjbGFzcyBLaW5kCisrICAgIHsKKysgICAgICAgIEJvb2wsCisr
ICAgICAgICBJbnQsCisrICAgICAgICBVSW50LAorKyAgICAgICAgVHlwZSwKKysgICAgfTsKKysK
KysgICAgdW5pb24gVmFsdWUKKysgICAgeworKyAgICAgICAgVmFsdWUoYm9vbCB2YWx1ZSkgOiBi
KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisrICAg
ICAgICBWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkgOiB1KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUo
Y29uc3QgVFR5cGUgJnZhbHVlKSA6IHQoJnZhbHVlKSB7fQorKworKyAgICAgICAgYm9vbCBiOwor
KyAgICAgICAgaW50IGk7CisrICAgICAgICB1bnNpZ25lZCB1OworKyAgICAgICAgY29uc3QgVFR5
cGUgKnQ7CisrICAgIH07CisrCisrICAgIFRlbXBsYXRlQXJnKGJvb2wgdmFsdWUpOworKyAgICBU
ZW1wbGF0ZUFyZyhpbnQgdmFsdWUpOworKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7
CisrICAgIFRlbXBsYXRlQXJnKGNvbnN0IFRUeXBlICZ2YWx1ZSk7CisrCisrICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKyAgICBib29sIG9wZXJh
dG9yPChjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKworKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtS2luZDsgfQorKyAgICBWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1WYWx1ZTsgfQorKworKyAgcHVibGljOgorKyAgICBLaW5kIG1LaW5kOworKyAgICBWYWx1
ZSBtVmFsdWU7CisrfTsKKysKKysvLyBBbiBlbnZpcm9ubWVudCBmb3IgY3JlYXRpbmcgYW5kIHVu
aXF1ZWx5IHNoYXJpbmcgVFN5bWJvbCBvYmplY3RzLgorK2NsYXNzIFN5bWJvbEVudgorK3sKKysg
ICAgY2xhc3MgVGVtcGxhdGVOYW1lCisrICAgIHsKKysgICAgICAgIE5hbWUgYmFzZU5hbWU7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUZW1wbGF0ZUFyZz4gdGVtcGxhdGVBcmdzOworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZU5hbWUgJm90
aGVyKSBjb25zdDsKKysgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0OworKworKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworKyAgICAgICAg
dm9pZCBjbGVhcigpOworKworKyAgICAgICAgTmFtZSBmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVm
ZmVyKSBjb25zdDsKKysKKysgICAgICAgIHZvaWQgYXNzaWduKGNvbnN0IE5hbWUgJm5hbWUsIHNp
emVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpOworKyAgICB9OworKworKyAg
ICB1c2luZyBUeXBlUmVmICAgICAgICA9IENSZWY8VFR5cGU+OworKyAgICB1c2luZyBTaWcgICAg
ICAgICAgICA9IHN0ZDo6dmVjdG9yPFR5cGVSZWY+OyAgLy8gUGFyYW0wLCBQYXJhbTEsIC4uLiBQ
YXJhbU4sIFJldHVybgorKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywg
VEZ1bmN0aW9uICo+OworKyAgICB1c2luZyBPdmVybG9hZHMgICAgICA9IHN0ZDo6bWFwPFRlbXBs
YXRlTmFtZSwgU2lnVG9GdW5jPjsKKysgICAgdXNpbmcgQW5nbGVTdHJ1Y3RzICAgPSBzdGQ6Om1h
cDxJbW11dGFibGVTdHJpbmcsIFRTdHJ1Y3R1cmUgKj47CisrICAgIHVzaW5nIFRleHR1cmVTdHJ1
Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKysKKysgIHB1YmxpYzoK
KysgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisrCisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUoKSB7IHJldHVybiBtU3ltYm9sVGFi
bGU7IH0KKysKKysgICAgLy8gVGhlcmUgZXhpc3QgQW5nbGUgcmV3cml0ZXMgdGhhdCBjYW4gbGVh
ZCB0byBpbmNvaGVyZW50IHN0cnVjdHMKKysgICAgLy8KKysgICAgLy8gRXhhbXBsZQorKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisrICAgIC8vICAgIHN0cnVjdCBCIHsgQScgYTsgfSAvLyBB
JyBoYXMgc2FtZSBuYW1lIGFzIEEgYnV0IGlzIG5vdCBpZGVudGljYWwuCisrICAgIC8vIGJlY29t
ZXMKKysgICAgLy8gICAgc3RydWN0IEEgeyAuLi4gfQorKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEg
YTsgfQorKyAgICAvLworKyAgICAvLyBUaGlzIG5vdGFibHkgaGFwcGVucyB3aGVuIEEgY29udGFp
bnMgYSBzYW1wbGVyIGluIHRoZSBvcmlnaW5hbCBHTFNMIGNvZGUgYnV0IGlzIHJld3JpdHRlbiB0
bworKyAgICAvLyBub3QgaGF2ZSBhIHNhbXBsZXIsIHlldCB0aGUgQScgc3RydWN0IGZpZWxkIHN0
aWxsIGNvbnRhaW5zIHRoZSBzYW1wbGVyIGZpZWxkLgorKyAgICBjb25zdCBUU3RydWN0dXJlICZy
ZW1hcChjb25zdCBUU3RydWN0dXJlICZzKSBjb25zdDsKKysKKysgICAgLy8gTGlrZSBgVFN0cnVj
dHVyZSAmcmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcylgIGJ1dCBhZGRpdGlvbmFsbHkgbWFwcyBu
dWxsIHRvIG51bGwuCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMpIGNvbnN0OworKworKyAgICBjb25zdCBURnVuY3Rpb24gJmdldEZ1bmN0aW9uT3Zlcmxv
YWQoY29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3Vu
dCAgICAgICAgID0gMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgVElu
dGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJl
dHVyblR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmYXJncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQgICAgICAgICA9IDAsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0
dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcyk7CisrCisrICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJmdldFRleHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKysKKysgICAgdm9pZCBtYXJr
QXNQb2ludGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSk7CisrICAgIGNvbnN0IEFk
ZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2b2lkIG1h
cmtBc1JlZmVyZW5jZShWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOworKyAgICBjb25z
dCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2
b2lkIG1hcmtBc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKTsKKysgICAgYm9vbCBpc1BhY2tl
ZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKysKKysgIHByaXZhdGU6CisrICAgIGNvbnN0
IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKysKKysgICAgdm9pZCBtYXJr
U3BhY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlLCBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCk7CisrICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNTcGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApIGNvbnN0
OworKworKyAgcHJpdmF0ZToKKysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrCisr
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKysg
ICAgT3ZlcmxvYWRzIG1PdmVybG9hZHM7CisrICAgIFNpZyBtUmV1c2FibGVTaWdCdWZmZXI7Cisr
ICAgIFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisrICAgIHN0ZDo6
c3RyaW5nIG1SZXVzYWJsZVN0cmluZ0J1ZmZlcjsKKysKKysgICAgQW5nbGVTdHJ1Y3RzIG1Bbmds
ZVN0cnVjdHM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxUQmFzaWNUeXBlLCBjb25zdCBUU3Ry
dWN0dXJlICo+IG1UZXh0dXJlRW52czsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqbVNhbXBsZXIg
PSBudWxscHRyOworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NT
cGFjZT4gbVBvaW50ZXJzOworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJl
c3NTcGFjZT4gbVJlZmVyZW5jZXM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmll
bGQgKj4gbVBhY2tlZEZpZWxkczsKKyt9OworKworK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRC
YXNpY1R5cGUgc2FtcGxlclR5cGUpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5W
X0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1RvcG9zb3J0U3RydWN0cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjk4NDMzMzIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CitAQCAtMCwwICsxLDM4MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisr
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxmdW5jdGlv
bmFsPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0
PgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0
aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJh
dmVyc2UuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNp
bmcgRWRnZXMgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8VD47CisrCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrdXNpbmcgR3JhcGggPSBzdGQ6OnVub3JkZXJlZF9tYXA8VCwgRWRnZXM8VD4+OworKwor
K3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZzeW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRT
dHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCisreworKyAgICBpZiAoZy5maW5k
KHMpICE9IGcuZW5kKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAg
ICBFZGdlczxjb25zdCBUU3RydWN0dXJlICo+ICZlcyA9IGdbc107CisrCisrICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisrICAgIGZvciAoY29uc3QgVEZpZWxkICpmIDog
ZnMpCisrICAgIHsKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3ltYm9sRW52
LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGVzLmluc2VydCh6KTsKKysgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcs
IHopOworKyAgICAgICAgICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmV6ID0gZ1t6XTsK
KysgICAgICAgICAgICBlcy5pbnNlcnQoZXouYmVnaW4oKSwgZXouZW5kKCkpOworKyAgICAgICAg
fQorKyAgICB9CisrfQorKworK0dyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gQnVpbGRHcmFwaChT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiAmc3RydWN0cykKKyt7Cisr
ICAgIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gZzsKKysgICAgZm9yIChjb25zdCBUU3RydWN0
dXJlICpzIDogc3RydWN0cykKKysgICAgeworKyAgICAgICAgQnVpbGRHcmFwaEltcGwoc3ltYm9s
RW52LCBnLCBzKTsKKysgICAgfQorKyAgICByZXR1cm4gZzsKKyt9CisrCisrLy8gQWxnb3J0aG06
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgt
Zmlyc3Rfc2VhcmNoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RkOjp2ZWN0b3I8VD4gVG9w
b3NvcnQoY29uc3QgR3JhcGg8VD4gJmcpCisreworKyAgICAvLyBub2RlcyB3aXRoIHRlbXBvcmFy
eSBtYXJrCisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxUPiB0ZW1wczsKKysKKysgICAgLy8gbm9k
ZXMgd2l0aG91dCBwZXJtYW5lbnQgbWFyaworKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8VD4gaW52
UGVybXM7CisrICAgIGZvciAoY29uc3QgYXV0byAmZW50cnkgOiBnKQorKyAgICB7CisrICAgICAg
ICBpbnZQZXJtcy5pbnNlcnQoZW50cnkuZmlyc3QpOworKyAgICB9CisrCisrICAgIC8vIEwg4oaQ
IEVtcHR5IGxpc3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNvcnRlZCBlbGVtZW50cworKyAgICBz
dGQ6OnZlY3RvcjxUPiBMOworKworKyAgICAvLyBmdW5jdGlvbiB2aXNpdChub2RlIG4pCisrICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlzaXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKysgICAg
ICAgIC8vIGlmIG4gaGFzIGEgcGVybWFuZW50IG1hcmsgdGhlbgorKyAgICAgICAgaWYgKGludlBl
cm1zLmZpbmQobikgPT0gaW52UGVybXMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
Ly8gcmV0dXJuCisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8g
aWYgbiBoYXMgYSB0ZW1wb3JhcnkgbWFyayB0aGVuCisrICAgICAgICBpZiAodGVtcHMuZmluZChu
KSAhPSB0ZW1wcy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBzdG9wICAgKG5v
dCBhIERBRykKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgLy8gbWFyayBuIHdpdGggYSB0ZW1wb3JhcnkgbWFyaworKyAgICAgICAgdGVtcHMuaW5z
ZXJ0KG4pOworKworKyAgICAgICAgLy8gZm9yIGVhY2ggbm9kZSBtIHdpdGggYW4gZWRnZSBmcm9t
IG4gdG8gbSBkbworKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisrICAgICAgICBB
U1NFUlQoZW5JdGVyICE9IGcuZW5kKCkpOworKyAgICAgICAgY29uc3QgRWRnZXM8VD4gJmVuID0g
ZW5JdGVyLT5zZWNvbmQ7CisrICAgICAgICBmb3IgKFQgbSA6IGVuKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIC8vIHZpc2l0KG0pCisrICAgICAgICAgICAgdmlzaXQobSk7CisrICAgICAgICB9
CisrCisrICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisrICAgICAgICB0
ZW1wcy5lcmFzZShuKTsKKysgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgcGVybWFuZW50IG1hcmsK
KysgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworKyAgICAgICAgLy8gYWRkIG4gdG8gaGVhZCBv
ZiBMCisrICAgICAgICBMLnB1c2hfYmFjayhuKTsKKysgICAgfTsKKysKKysgICAgLy8gd2hpbGUg
ZXhpc3RzIG5vZGVzIHdpdGhvdXQgYSBwZXJtYW5lbnQgbWFyayBkbworKyAgICB3aGlsZSAoIWlu
dlBlcm1zLmVtcHR5KCkpCisrICAgIHsKKysgICAgICAgIC8vIHNlbGVjdCBhbiB1bm1hcmtlZCBu
b2RlIG4KKysgICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworKyAgICAgICAgLy8gdmlz
aXQobikKKysgICAgICAgIHZpc2l0KG4pOworKyAgICB9CisrCisrICAgIHJldHVybiBMOworK30K
KysKKytUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpDcmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0
aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0
VHlwZSkKKyt7CisrICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrICAgIGF1dG8gJmZ1bmNF
cXVhbGl0eSA9CisrICAgICAgICAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJs
ZVN0cmluZygiZXF1YWwiKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKysgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisrICAg
IGF1dG8gJmFTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYSIpKTsKKysgICAgYXV0byAmYlN0cnVjdCA9IENyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJiIikpOworKyAgICBmdW5j
RXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3RydWN0KTsKKysgICAgZnVuY0VxdWFsaXR5LmFkZFBh
cmFtZXRlcigmYlN0cnVjdCk7CisrCisrICAgIGF1dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVElu
dGVybUJsb2NrKCk7CisrICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBhbmROb2RlczsK
KysgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmYUZp
ZWxkcyA9IGFTdHJ1Y3RUeXBlLmZpZWxkcygpOworKyAgICBjb25zdCBzaXplX3Qgc2l6ZSAgICAg
ICAgID0gYUZpZWxkcy5zaXplKCk7CisrCisrICAgIGF1dG8gdGVzdEVxdWFsaXR5ID0gWyZdKFRJ
bnRlcm1UeXBlZCAmYSwgVEludGVybVR5cGVkICZiKSAtPiBUSW50ZXJtVHlwZWQgKiB7CisrICAg
ICAgICBBU1NFUlQoYS5nZXRUeXBlKCkgPT0gYi5nZXRUeXBlKCkpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKysgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkg
fHwgdHlwZS5pc01hdHJpeCgpIHx8IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAqZnVuYyA9CisrICAgICAgICAgICAgICAgIG5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5
cGU6OkVidEJvb2wpLCB0cnVlKTsKKysgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0
ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZhLCAmYn0p
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEVxdWFsLCAmYSwgJmIpOworKyAg
ICAgICAgfQorKyAgICB9OworKworKyAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBzaXpl
OyArK2lkeCkKKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICZhRmllbGQgICAgPSAqYUZp
ZWxkc1tpZHhdOworKyAgICAgICAgY29uc3QgVFR5cGUgJmFGaWVsZFR5cGUgPSAqYUZpZWxkLnR5
cGUoKTsKKysgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KysKKysgICAgICAgIGlmIChhRmllbGRUeXBlLmlzQXJyYXkoKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBBU1NFUlQoIWFGaWVsZFR5cGUuaXNBcnJheU9mQXJyYXlzKCkpOyAgLy8gVE9ETwor
KyAgICAgICAgICAgIGludCBkaW0gPSBhRmllbGRUeXBlLmdldE91dGVybW9zdEFycmF5U2l6ZSgp
OworKyAgICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZhQWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNz
RmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworKyAgICAgICAgICAgICAgICBhdXRvICZi
QWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQp
OworKyAgICAgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3Ms
IGFBY2Nlc3MpOworKyAgICAgICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0ZpZWxkKGFTdHJ1Y3QsIGFGaWVsZE5h
bWUpOworKyAgICAgICAgICAgIGF1dG8gJmJBY2Nlc3MgPSBBY2Nlc3NGaWVsZChiU3RydWN0LCBh
RmllbGROYW1lKTsKKysgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJB
Y2Nlc3MsIGFBY2Nlc3MpOworKyAgICAgICAgICAgIGFuZE5vZGVzLnB1c2hfYmFjayhlcU5vZGUp
OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIEFTU0VSVChhbmROb2Rlcy5zaXplKCkgPiAw
KTsgIC8vIEVtcHR5IHN0cnVjdHMgYXJlIG5vdCBhbGxvd2VkIGluIEdMU0wKKysgICAgVEludGVy
bVR5cGVkICpvdXROb2RlID0gYW5kTm9kZXMuYmFjaygpOworKyAgICBhbmROb2Rlcy5wb3BfYmFj
aygpOworKyAgICBmb3IgKFRJbnRlcm1UeXBlZCAqYW5kTm9kZSA6IGFuZE5vZGVzKQorKyAgICB7
CisrICAgICAgICBvdXROb2RlID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsQW5kLCBhbmROb2RlLCBvdXROb2RlKTsKKysgICAgfQorKyAgICBib2R5RXF1YWxpdHkuYXBw
ZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXRO
b2RlKSk7CisrICAgIGF1dG8gKmZ1bmNQcm90b0VxdWFsaXR5ID0gbmV3IFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZSgmZnVuY0VxdWFsaXR5KTsKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uKGZ1bmNQcm90b0VxdWFsaXR5LCAmYm9keUVxdWFsaXR5KTsKKyt9CisrCisr
c3RydWN0IERlY2xhcmVkU3RydWN0dXJlCisreworKyAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRl
Y2xOb2RlOworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICplcXVhbGl0eUZ1bmN0aW9u
RGVmaW5pdGlvbjsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlOworK307CisrCisr
Ym9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAmbm9kZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVjbGFyZWRTdHJ1Y3R1cmUgJm91dCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTdHJ1Y3R1cmUgKj4g
JnVzZWRTdHJ1Y3RzKQorK3sKKysgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGUg
PSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChk
ZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5v
ZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysKKysgICAgICAgIGlmIChUSW50ZXJt
U3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxl
KCk7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOwor
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBpZiAodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBvdXQuZGVjbE5vZGUgID0gZGVjbE5vZGU7CisrICAgICAgICAgICAg
ICAgICAgICBvdXQuc3RydWN0dXJlID0gc3RydWN0dXJlOworKyAgICAgICAgICAgICAgICAgICAg
b3V0LmVxdWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKysgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkU3RydWN0cy5maW5kKHN0cnVjdHVyZSkgPT0gdXNlZFN0cnVjdHMuZW5kKCkKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxscHRyCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVj
dHVyZSk7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2NsYXNzIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7Cisr
ICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3RydWN0dXJlICo+IG1Vc2VkU3RydWN0czsK
KysKKysgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAg
ICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpiaW5hcnkpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKysKKysgICAgICAgIHN3aXRjaCAob3ApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsOgorKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBiaW5hcnktPmdldExlZnQoKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0gYmluYXJ5
LT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChsZWZ0VHlw
ZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gbVN5bWJvbEVudi5yZW1hcChsZWZ0
VHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB0cnVl
OworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2b2lkIHVzZVN0cnVjdChjb25zdCBUU3Ry
dWN0dXJlICZzdHJ1Y3R1cmUpCisrICAgIHsKKysgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGNv
bnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3ViU3RydWN0ID0gbVN5bWJv
bEVudi5yZW1hcChmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK307CisrCisr
fSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrYm9vbCBzaDo6VG9wb3NvcnRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg
IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisreworKyAgICBGaW5kU3RydWN0RXF1YWxpdHlV
c2UgZmluZGVyKHN5bWJvbEVudik7CisrICAgIHJvb3QudHJhdmVyc2UoJmZpbmRlcik7CisrICAg
IHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5kZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisrCisrICAg
IERlY2xhcmVkU3RydWN0dXJlIGRlY2xhcmVkU3RydWN0OworKyAgICBzdGQ6OnZlY3RvcjxEZWNs
YXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1Y3RzOworKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBub25TdHJ1Y3RTdG10Tm9kZXM7CisrCisrICAgIHsKKysgICAgICAgIGNvbnN0IHNp
emVfdCBzdG10Q291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKKysgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RtdENvdW50OyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAg
VEludGVybU5vZGUgJnN0bXROb2RlID0gKnJvb3QuZ2V0Q2hpbGROb2RlKGkpOworKyAgICAgICAg
ICAgIGlmIChHZXRBc0RlY2xhcmVkU3RydWN0dXJlKHN5bWJvbEVudiwgc3RtdE5vZGUsIGRlY2xh
cmVkU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkZWNsYXJlZFN0
cnVjdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2soJnN0bXROb2Rl
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgeworKyAgICAg
ICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworKyAgICAgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgRGVjbGFyZWRTdHJ1Y3R1cmU+IHJh
d1RvRGVjbGFyZWQ7CisrCisrICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZk
IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHMucHVz
aF9iYWNrKGQuc3RydWN0dXJlKTsKKysgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5m
aW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKysgICAgICAgICAgICBy
YXdUb0RlY2xhcmVkW2Quc3RydWN0dXJlXSA9IGQ7CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBOb3RlOiBHcmFwaCBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25seSBleHBsaWNpdGx5IGRlY2xh
cmVkIHN0cnVjdHVyZXMuCisrICAgICAgICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGcgICAg
ICAgICAgICAgICAgICAgPSBCdWlsZEdyYXBoKHN5bWJvbEVudiwgc3RydWN0cyk7CisrICAgICAg
ICBzdGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29y
dChnKTsKKysgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdHMuc2l6ZSgpIDw9IHNvcnRlZFN0
cnVjdHMuc2l6ZSgpKTsKKysKKysgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworKyAg
ICAgICAgZm9yIChjb25zdCBUU3RydWN0dXJlICpzIDogc29ydGVkU3RydWN0cykKKysgICAgICAg
IHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworKyAgICAg
ICAgICAgIGlmIChpdCAhPSByYXdUb0RlY2xhcmVkLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChkLmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hf
YmFjayhkKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgewor
KyAgICAgICAgVEludGVybVNlcXVlbmNlIG5ld1N0bXROb2RlczsKKysKKysgICAgICAgIGZvciAo
RGVjbGFyZWRTdHJ1Y3R1cmUgJmRlY2xhcmVkU3RydWN0IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7Cisr
ICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5kZWNsTm9k
ZSk7CisrICAgICAgICAgICAgaWYgKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVuY3Rpb25EZWZp
bml0aW9uKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1
c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbik7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dE5vZGUgOiBub25TdHJ1Y3RTdG10Tm9kZXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKHN0bXROb2RlKTsKKysgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKHN0bXRO
b2RlKTsKKysgICAgICAgIH0KKysKKysgICAgICAgICpyb290LmdldFNlcXVlbmNlKCkgPSBuZXdT
dG10Tm9kZXM7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCituZXcgZmlsZSBtb2RlIDEw
MDY0NAoraW5kZXggMDAwMDAwMC4uYTM5MDhlMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
CitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RS
VUNUU19IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgor
KworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBEb2VzIGEgdG9wb3NvcnQgb24gc3RydWN0cyBi
YXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKysvLyBTdHJ1Y3QgdHlwZSBkZWNsYXJhdGlvbnMg
YXJlIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIHJvb3QgYmxvY2suCisrQU5HTEVfTk9fRElTQ0FS
RCBib29sIFRvcG9zb3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAm
cHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
V3JhcE1haW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDE0YmM2
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcAorQEAgLTAsMCArMSw5NCBAQAorKy8vCisrLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysv
LworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9XcmFwTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCisreworKyAgcHJpdmF0ZToKKysgICAgSWRHZW4gJm1JZEdlbjsKKysK
KysgIHB1YmxpYzoKKysgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
LCAmc3ltYm9sVGFibGUpLCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZvciAoVElu
dGVybU5vZGUgKm5vZGUgOiAqYmxvY2tOb2RlLT5nZXRTZXF1ZW5jZSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSA9
IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0
aW9uKCk7CisrICAgICAgICAgICAgICAgIGlmIChmdW5jLmlzTWFpbigpKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0Rl
Zk5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCB2aXNpdE1haW4oVEludGVybUJsb2NrICZy
b290LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKKysgICAgeworKyAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigp
OworKyAgICAgICAgQVNTRVJUKGZ1bmMuaXNNYWluKCkpOworKyAgICAgICAgQVNTRVJUKGZ1bmMu
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidFZvaWQpOwor
KyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09IDApOworKworKyAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZleHRlcm5hbE1haW5GdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5j
dGlvbigpOworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5hbE1haW5GdW5jID0gQ2xv
bmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFsTWFpbkZ1bmMpOworKwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpleHRlcm5hbE1haW5Qcm90byA9IGZ1
bmNEZWZOb2RlLT5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisrICAgICAgICAgICAgbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmaW50ZXJuYWxNYWluRnVuYyk7CisrCisrICAgICAgICBUSW50
ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAg
ICBleHRlcm5hbE1haW5Cb2R5LT5hcHBlbmRTdGF0ZW1lbnQoCisrICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKGludGVybmFsTWFpbkZ1bmMsIG5ldyBUSW50
ZXJtU2VxdWVuY2UoKSkpOworKworKyAgICAgICAgVEludGVybUJsb2NrICppbnRlcm5hbE1haW5C
b2R5ID0gZnVuY0RlZk5vZGUtPmdldEJvZHkoKTsKKysKKysgICAgICAgIFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisrICAgICAgICAgICAgbmV3IFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24oZXh0ZXJuYWxNYWluUHJvdG8sIGV4dGVybmFsTWFpbkJvZHkpOwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqaW50ZXJuYWxNYWluRGVmID0KKysg
ICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90
bywgaW50ZXJuYWxNYWluQm9keSk7CisrCisrICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVz
aF9iYWNrKE5vZGVSZXBsYWNlV2l0aE11bHRpcGxlRW50cnkoCisrICAgICAgICAgICAgJnJvb3Qs
IGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1h
aW5EZWZ9KSk7CisrICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6
OldyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2Nr
ICZyb290KQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdl
dFN5bWJvbFRhYmxlKCk7CisrICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4p
OworKyAgICByb290LnRyYXZlcnNlKCZ3cmFwcGVyKTsKKysgICAgaWYgKCF3cmFwcGVyLnVwZGF0
ZVRyZWUoJmNvbXBpbGVyLCAmcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjViMGVkZmYKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5o
CitAQCAtMCwwICsxLDI4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVy
c2UuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQ2hhbmdlcworKy8vICAgIHZvaWQg
bWFpbihhcmdzKSB7IG1haW4tYm9keSB9CisrLy8gVG8KKysvLyAgICB2b2lkIEZSRVNIX05BTUUo
YXJncykgeyBtYWluLWJvZHkgfQorKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUo
YXJncyk7IH0KKysvLworKy8vIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZnVsIGlmIHRoZSBv
cmlnaW5hbCBgbWFpbmAgaGFzIG11bHRpcGxlIHJldHVybiBwYXRocyBiZWNhdXNlIHRoaXMKKysv
LyByZWR1Y2VzIGRvd24gdG8gYSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBm
b3IgaW5zZXJ0aW5nIGNsZWFudXAgY29kZSBpbiBgbWFpbmAuCisrQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFdyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1dSQVBNQUlOX0hfCitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCituZXcgZmls
ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTBhOGJmMworLS0tIC9kZXYvbnVsbAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCitAQCAt
MCwwICsxLDMwNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMDIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
KyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3MTgpCisrI2VuZGlmCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVkZSA8
YWxnb3JpdGhtPgorKyNpbmNsdWRlIDxjbGltaXRzPgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0
YWJsZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY29uc3QgY2hh
ciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAqdCkKKyt7CisrICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKysgICAg
ICAgICAgICByZXR1cm4gInZvaWQiOworKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKysgICAgICAg
ICAgICByZXR1cm4gImZsb2F0IjsKKysgICAgICAgIGNhc2UgRWJ0SW50OgorKyAgICAgICAgICAg
IHJldHVybiAiaW50IjsKKysgICAgICAgIGNhc2UgRWJ0VUludDoKKysgICAgICAgICAgICByZXR1
cm4gInVpbnQiOworKyAgICAgICAgY2FzZSBFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiAi
Ym9vbCI7CisrICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorKyAgICAgICAgICAg
IHJldHVybiAieXV2Q3NjU3RhbmRhcmRFWFQiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOworKyAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKKysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsKKysgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlckV4dGVybmFsT0VTIjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllF
WFQ6CisrICAgICAgICAgICAgcmV0dXJuICJfX3NhbXBsZXJFeHRlcm5hbDJEWTJZRVhUIjsKKysg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKysgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyRFJlY3QiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKysgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNUyI7CisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNU0FycmF5IjsK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToKKysgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDdWJlQXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorKyAgICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0SVNh
bXBsZXJDdWJlOgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIy
REFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJl
dHVybiAiaXNhbXBsZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNl
IEVidElTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJl
QXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorKyAgICAgICAgICAgIHJldHVy
biAidXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgor
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsKKysg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBs
ZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlQXJyYXkiOworKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkRTaGFkb3ciOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKysgICAg
ICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlU2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheVNo
YWRvdyI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisrICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0
U3RydWN0OgorKyAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsKKysgICAgICAgIGNhc2Ug
RWJ0SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuICJpbnRlcmZhY2UgYmxvY2si
OworKyAgICAgICAgY2FzZSBFYnRJbWFnZTJEOgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVy
ZTJkIjsKKysgICAgICAgIGNhc2UgRWJ0SUltYWdlMkQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0
ZXh0dXJlMmQ8aW50PiI7CisrICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorKyAgICAgICAgICAg
IHJldHVybiAidGV4dHVyZTJkPHVpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0SW1hZ2UzRDoKKysg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisrICAgICAgICBjYXNlIEVidElJbWFnZTNE
OgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPGludD4iOworKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDx1aW50PiI7CisrICAg
ICAgICBjYXNlIEVidEltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVk
QXJyYXkoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlf
cmVmPHRleHR1cmUyZD4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyREFycmF5OgorKyAgICAgICAg
ICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJheSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZTJkPGludD4+IjsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuICJOT1RfSU1QTEVNRU5URUQiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIGNhc2UgRWJ0
VUltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUy
ZDx1aW50Pj4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJbWFnZUN1YmU6CisrICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlY3ViZSI7CisrICAgICAgICBjYXNlIEVidElJbWFnZUN1YmU6CisrICAgICAgICAg
ICAgcmV0dXJuICJ0ZXh0dXJlY3ViZTxpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0VUltYWdlQ3Vi
ZToKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlPHVpbnQ+IjsKKysgICAgICAgIGNh
c2UgRWJ0SW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlY3ViZT4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAg
ICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZTxpbnQ+PiI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJl
dHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysgICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVi
dFVJbWFnZUN1YmVBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1
cmVjdWJlPHVpbnQ+PiI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysg
ICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVidEF0b21pY0NvdW50ZXI6CisrICAgICAgICAg
ICAgcmV0dXJuICJhdG9taWNfdWludCI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJWaWRlb1dF
QkdMOgorKyAgICAgICAgICAgIHJldHVybiAiJHNhbXBsZXJWaWRlb1dFQkdMIjsKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICByZXR1
cm4gInVua25vd24gdHlwZSI7CisrICAgIH0KKyt9CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpCisreworKyAgICBpZiAodC0+aXNN
YXRyaXgoKSkKKysgICAgeworKyAgICAgICAgc3dpdGNoICh0LT5nZXRDb2xzKCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dFJvd3MoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQyIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
MngzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gImZsb2F0Mng0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGNhc2UgMzoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0M3gyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MyI7CisrICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9h
dDN4NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAg
ICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdDR4MiI7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDR4MyI7CisrICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICB9Cisr
ICAgIH0KKysgICAgaWYgKHQtPmlzVmVjdG9yKCkpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEludDoKKysgICAg
ICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImludDMiOworKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50NCI7CisrICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisrICAgICAgICAgICAgICAgIHN3
aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9v
bDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDMiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbDQiOworKyAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dE5vbWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQyIjsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gInVpbnQ0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKyAgICB9CisrICAgIEFTU0VSVCh0LT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOworKyAgICBBU1NFUlQodC0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworKyAgICByZXR1cm4gZ2V0QmFzaWNNZXRhbFN0cmlu
Zyh0KTsKKyt9CisrCisrSW1tdXRhYmxlU3RyaW5nIEdldE1ldGFsVHlwZU5hbWUoY29uc3QgVFR5
cGUgJnR5cGUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLCBOYW1lTWFwICpuYW1lTWFw
KQorK3sKKysgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorKyAgICAg
ICAgcmV0dXJuIEhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCksIGhhc2hGdW5jdGlvbiwgbmFtZU1h
cCk7CisrICAgIGVsc2UKKysgICAgICAgIHJldHVybiBJbW11dGFibGVTdHJpbmcoZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoJnR5cGUpKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRp
bHMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTNjZTNjCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCitA
QCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBUUkFOU0xBVE9SX01F
VEFMX1VUSUxTX0hfCisrI2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisrCisrI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJs
ZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFVuaXF1ZUlk
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKytuYW1lc3BhY2Ug
c2gKKyt7CisrCisrY29uc3QgY2hhciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAq
dCk7CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3Qg
VFR5cGUgKnQpOworKworK0ltbXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRU
eXBlICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0
aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5h
bWVNYXAgKm5hbWVNYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
VFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JWdWxrYW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvclZ1bGthbi5jcHAKK2luZGV4IDIwMWNiYzkuLmM1ZWM2N2QgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKK0BAIC0xNjMsNiArMTYzLDgg
QEAgY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZFBvaW50Q29vcmRO
YW1lICAgID0gSW1tdXRhYmxlU3RyaW5nKCJmbGlwcGVkUG9pbnRDb29yZCIpOworIGNvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0
cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOworIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0Vt
dWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEZXB0aFJhbmdl
UGFyYW1zIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNCbG9ja05hbWUg
ICAgICAgID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRVVuaWZvcm1CbG9jayIpOworK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOworIAorIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPGNvbnN0
IGNoYXIgKj4ga0RlZmF1bHRVbmlmb3JtTmFtZXMgPSB7CisgICAgIHtnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCitAQCAtNDUwLDkgKzQ1Miw5IEBA
IGNvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRl
cm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZp
ZWxkcy5lbmQoKSk7CisgCisgICAgIC8vIERlZmluZSBhIGRyaXZlciB1bmlmb3JtIGJsb2NrICJB
TkdMRVVuaWZvcm1CbG9jayIgd2l0aCBpbnN0YW5jZSBuYW1lICJBTkdMRVVuaWZvcm1zIi4KKy0g
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jaygKKy0gICAgICAgIHJvb3QsIHN5bWJvbFRh
YmxlLCBkcml2ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0
ZSgpLCAwLAorLSAgICAgICAgSW1tdXRhYmxlU3RyaW5nKHZrOjprRHJpdmVyVW5pZm9ybXNCbG9j
a05hbWUpLCBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc1Zhck5hbWUpKTsKKysg
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jayhyb290LCBzeW1ib2xUYWJsZSwgZHJpdmVy
RmllbGRMaXN0LCBFdnFVbmlmb3JtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VuaWZvcm1zVmFyTmFtZSk7CisgfQorIAor
IGNvbnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVy
bUJsb2NrICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorZGlmZiAtLWdpdCBhL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
eXBlcy5oCitpbmRleCBhM2UwMzk5Li44ZjZmYzQ2IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMu
aAorQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBUVHlwZQorIAorICAgICBib29sIGlzVmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsg
fQorICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsgfQorKyAgICBib29sIGlzUmFu
azAoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0g
MTsgfQorICAgICBib29sIGlzU2NhbGFyKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJu
IHByaW1hcnlTaXplID09IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFtU3RydWN0dXJlICYm
ICFpc0FycmF5KCk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVBU1QuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwCitpbmRl
eCA3NmE4YmMyLi5iYTRkNmYzIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVBU1QuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFT
VC5jcHAKK0BAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVy
bU5vZGUgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyAqZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlQVNUT3B0
aW9ucyAmb3B0aW9ucykKKyAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVl
LCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
Ky17CistICAgIGlmIChtT3B0aW9ucy52YWxpZGF0ZVNpbmdsZVBhcmVudCkKKy0gICAgeworLSAg
ICAgICAgbVBhcmVudFtyb290XSA9IG51bGxwdHI7CistICAgIH0KKy19Cisre30KKyAKKyB2b2lk
IFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQor
IHsKK0BAIC05MSwxMSArODYsMTIgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRDb3VudDsgKytpKQorICAgICAgICAgeworICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpjaGlsZCAgID0gbm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworLSAgICAgICAgICAgIGlmIChtUGFy
ZW50LmZpbmQoY2hpbGQpICE9IG1QYXJlbnQuZW5kKCkpCisrICAgICAgICAgICAgVEludGVybU5v
ZGUgKiZwYXJlbnQgPSBtUGFyZW50W2NoaWxkXTsKKysgICAgICAgICAgICBpZiAocGFyZW50KQor
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0
d2ljZSBidXQgdGhyb3VnaCB0aGUgc2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBv
ZgorICAgICAgICAgICAgICAgICAvLyB0aGUgYW5jZXN0b3JzLgorLSAgICAgICAgICAgICAgICBp
ZiAobVBhcmVudFtjaGlsZF0gIT0gbm9kZSkKKysgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAh
PSBub2RlKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwgIkZvdW5kIGNoaWxkIHdpdGggdHdvIHBhcmVu
dHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRl
U2luZ2xlUGFyZW50PiIpOworQEAgLTEwMywxNyArOTksMTcgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6
dmlzaXROb2RlKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBtUGFyZW50W2NoaWxkXSA9IG5v
ZGU7CisrICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKKyAgICAgICAgIH0KKyAgICAgfQorIH0K
KyAKKy12b2lkIFZhbGlkYXRlQVNUOjpleHBlY3ROb25OdWxsQ2hpbGRyZW4oVmlzaXQgdmlzaXQs
IFRJbnRlcm1Ob2RlICpub2RlLCBzaXplX3QgbGVhc3RfY291bnQpCisrdm9pZCBWYWxpZGF0ZUFT
VDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwg
c2l6ZV90IGxlYXN0Q291bnQpCisgeworICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgbU9w
dGlvbnMudmFsaWRhdGVOdWxsTm9kZXMpCisgICAgIHsKKyAgICAgICAgIHNpemVfdCBjaGlsZENv
dW50ID0gbm9kZS0+Z2V0Q2hpbGRDb3VudCgpOworLSAgICAgICAgaWYgKGNoaWxkQ291bnQgPCBs
ZWFzdF9jb3VudCkKKysgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwg
IlRvbyBmZXcgY2hpbGRyZW4iLCAiPHZhbGlkYXRlTnVsbE5vZGVzPiIpOworICAgICAgICAgICAg
IG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK2luZGV4IDEzMGI5OGEuLjMzYjgzZGIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK0BAIC0x
LDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4g
ICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxl
IGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJT
RCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAt
MjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKK2luZGV4IDUzMDYwMzIuLjAyNTAz
MDAgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRv
Z2VuLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4u
aAorQEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDMuMy4yLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3Vi
dCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxp
a2UgcGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQg
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVy
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRp
YWxpemVycy5jcHAKK2luZGV4IGRmYTIzYWEuLmJiYzhkY2QgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9uLAorICAgICAgICAgQVNTRVJUKHN5bWJvbE5v
ZGUpOworICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0gaW5pdC0+Z2V0UmlnaHQo
KTsKKyAKKy0gICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25z
dCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgaWYgKGV4cHJl
c3Npb24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25z
dGFudFZhbHVlKCkgfHwKKysgICAgICAgICAgICBzeW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFHbG9iYWwpCisgICAgICAgICB7CisgICAgICAgICAgICAgLy8gRm9yIHZhcmlhYmxlcyB3
aGljaCBhcmUgbm90IGNvbnN0YW50LCBkZWZlciB0aGVpciByZWFsIGluaXRpYWxpemF0aW9uIHVu
dGlsCisgICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6ZSB1bmlmb3Jtcy4KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMu
Y3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNw
cAoraW5kZXggMjg5ZGUyMS4uMmVlODIzOSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrKyBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKK0BAIC0xNyw3ICsxNyw3IEBA
IG5hbWVzcGFjZSBzaAorIG5hbWVzcGFjZQorIHsKKyAKKy1ib29sIEFyZUVtcHR5QmxvY2tzKFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CisrYm9vbCBBcmVFbXB0eUJsb2Nrcyhjb25zdCBU
SW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpOworIAorIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRl
cm1Ob2RlICpub2RlKQorIHsKK0BAIC0zNyw3ICszNyw3IEBAIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQorIAorIC8vIFJldHVybiB0cnVlIGlmIGFsbCBzdGF0ZW1lbnRzIGlu
ICJzdGF0ZW1lbnRzIiBjb25zaXN0IG9ubHkgb2YgZW1wdHkgYmxvY2tzIGFuZCBuby1vcCBzdGF0
ZW1lbnRzLgorIC8vIFJldHVybnMgdHJ1ZSBhbHNvIGlmIHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRz
LgorLWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorK2Jv
b2wgQXJlRW1wdHlCbG9ja3MoY29uc3QgVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorIHsK
KyAgICAgZm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCisg
ICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAKK2luZGV4IDQ1MDBhZWEuLmRkOGRkNTQgMTAw
NjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jl
bW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3Zl
U3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorICAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpIG92ZXJyaWRlOworICAg
ICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsK
KyAKKy0gICAgdm9pZCBvdXRwdXRTZXF1ZW5jZShUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLCBz
aXplX3Qgc3RhcnRJbmRleCk7CisrICAgIHZvaWQgb3V0cHV0U2VxdWVuY2UoY29uc3QgVEludGVy
bVNlcXVlbmNlICpzZXF1ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpOworICAgICB2b2lkIGhhbmRs
ZVByZXZpb3VzQ2FzZSgpOworIAorICAgICBUSW50ZXJtQmxvY2sgKm1TdGF0ZW1lbnRMaXN0Owor
QEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJz
ZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICpub2RlKQorICAgICByZXR1cm4g
ZmFsc2U7CisgfQorIAorLXZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91
dHB1dFNlcXVlbmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4
KQorK3ZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91dHB1dFNlcXVlbmNl
KGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXgpCisgewor
KyAgICBhdXRvICZvdXRTZXEgPSAqbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVlbmNlKCk7Cisg
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2UtPnNpemUoKTsgKytp
KQorICAgICB7CistICAgICAgICBtU3RhdGVtZW50TGlzdE91dC0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CisrICAgICAgICBvdXRTZXEucHVzaF9iYWNrKHNlcXVl
bmNlLT5hdChpKSk7CisgICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAoraW5kZXgg
NzQxNDU0MC4uMGMyYWE4ZiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAorQEAgLTIxLDEwICsy
MSwxNyBAQCBuYW1lc3BhY2Ugc2gKKyBuYW1lc3BhY2UKKyB7CisgCisrc3RydWN0IExvb3BJbmZv
CisreworKyAgICBjb25zdCBUVmFyaWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gbnVsbHB0cjsK
KysgICAgVEludGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiAgICAgICAgICAgPSBudWxscHRyOworK307CisrCisg
Y2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciA6IHB1YmxpYyBUTFZhbHVlVHJh
Y2tpbmdUcmF2ZXJzZXIKKyB7CisgICBwdWJsaWM6CistICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXIodW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAg
U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcihjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIgKmNvbmRpdGlvbnNUb1NpbXBsaWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworIAorICAgICB2b2lkIHRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CitAQCAtMzQsNiArNDEsNyBAQCBj
bGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFj
a2luZ1RyYXZlcnNlcgorICAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJy
aWRlOworKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpu
b2RlKSBvdmVycmlkZTsKKyAKKyAgICAgYm9vbCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsgfQorIAorQEAgLTQyLDE2ICs1MCwxOSBAQCBjbGFz
cyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2lu
Z1RyYXZlcnNlcgorICAgICAvLyBmb3VuZC4KKyAgICAgYm9vbCBtRm91bmRMb29wVG9DaGFuZ2U7
CisgICAgIGJvb2wgbUluc2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNzaW9uOworLSAgICBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5OworKyAgICBjb25z
dCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKm1Db25kaXRpb25zVG9TaW1wbGlmeTsKKysKKysg
IHByaXZhdGU6CisrICAgIExvb3BJbmZvIG1Mb29wOworIH07CisgCisgU2ltcGxpZnlMb29wQ29u
ZGl0aW9uc1RyYXZlcnNlcjo6U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcigKKy0gICAg
dW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAgY29uc3QgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKKyAgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSkKKyAgICAgOiBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIodHJ1ZSwg
ZmFsc2UsIGZhbHNlLCBzeW1ib2xUYWJsZSksCisgICAgICAgbUZvdW5kTG9vcFRvQ2hhbmdlKGZh
bHNlKSwKKyAgICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4cHJlc3Npb24oZmFsc2Up
LAorLSAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlmeU1hc2sp
CisrICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQorIHt9
CisgCisgLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9u
LCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdAorQEAgLTY4LDcg
Kzc5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0No
YW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFu
Z2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1Rv
U2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9CisgCitAQCAtODAs
NyArOTIsOSBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpubworICAgICBpZiAobUZvdW5kTG9vcFRv
Q2hhbmdlKQorICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNo
YW5nZSB0aGlzIGxvb3AuCisgCistICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25z
VG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRI
ZXJlKCkpOworKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKysgICAgbUZvdW5k
TG9vcFRvQ2hhbmdlID0KKysgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9k
ZSwgZ2V0UGFyZW50Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKKyAgICAgcmV0dXJu
ICFtRm91bmRMb29wVG9DaGFuZ2U7CisgfQorIAorQEAgLTkyLDcgKzEwNiw4IEBAIGJvb2wgU2lt
cGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhCisgICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCisgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KKyAK
Ky0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNoKG5v
ZGUsIGdldFBhcmVudE5vZGUoKSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUsIGdldFBhcmVudE5vZGUoKSk7CisgICAgIHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdl
OworIH0KKyAKK0BAIC0xMDQsNyArMTE5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICoKKyAg
ICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFs
cmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9D
aGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVCht
Q29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0
aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0No
YW5nZTsKKyB9CisgCitAQCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVj
bGEKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsg
IC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFT
U0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBt
Q29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExv
b3BUb0NoYW5nZTsKKyB9CisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKKyt7CisrICAg
IGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0aW9u
IHx8IG1Mb29wLmV4cHJlc3Npb24pKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtQmxvY2sgKnBh
cmVudCA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgQVNTRVJUKHBh
cmVudCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxOworKyAgICAgICAgaWYgKG1Mb29w
LmV4cHJlc3Npb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtTG9v
cC5leHByZXNzaW9uLT5kZWVwQ29weSgpKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1Mb29wLmNvbmRp
dGlvblZhcmlhYmxlKTsKKysgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorKyAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1M
b29wLmNvbmRpdGlvbi0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgc2VxLnB1
c2hfYmFjayhub2RlKTsKKysgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5wdXNoX2JhY2soTm9k
ZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShwYXJlbnQsIG5vZGUsIHN0ZDo6bW92ZShzZXEpKSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworIHZvaWQgU2ltcGxpZnlMb29w
Q29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorIHsK
KyAgICAgLy8gTWFyayB0aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJl
c3Npb24sIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKK0BAIC0xMjgsNyAr
MTY5LDcgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpCisgICAgIFNjb3BlZE5vZGVJblRyYXZlcnNhbFBhdGggYWRk
VG9QYXRoKHRoaXMsIG5vZGUpOworIAorICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4
cHJlc3Npb24gPSB0cnVlOworLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0g
IW1Db25kaXRpb25zVG9TaW1wbGlmeTsKKyAKKyAgICAgaWYgKCFtRm91bmRMb29wVG9DaGFuZ2Ug
JiYgbm9kZS0+Z2V0SW5pdCgpKQorICAgICB7CitAQCAtMTQ3LDIyICsxODgsNTQgQEAgdm9pZCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpCisgCisgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IGZh
bHNlOworIAorKyAgICBjb25zdCBMb29wSW5mbyBwcmV2TG9vcCA9IG1Mb29wOworKworICAgICBp
ZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQorICAgICB7CisgICAgICAgICBjb25zdCBUVHlwZSAqYm9v
bFR5cGUgICA9IFN0YXRpY1R5cGU6OkdldDxFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBv
cmFyeSwgMSwgMT4oKTsKKy0gICAgICAgIFRWYXJpYWJsZSAqY29uZGl0aW9uVmFyaWFibGUgPSBD
cmVhdGVUZW1wVmFyaWFibGUobVN5bWJvbFRhYmxlLCBib29sVHlwZSk7CisrICAgICAgICBtTG9v
cC5jb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJv
b2xUeXBlKTsKKysgICAgICAgIG1Mb29wLmNvbmRpdGlvbiAgICAgICAgID0gbm9kZS0+Z2V0Q29u
ZGl0aW9uKCk7CisrICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdldEV4
cHJlc3Npb24oKTsKKyAKKyAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGxvb3AgY29uZGl0aW9uIHdp
dGggYSBib29sZWFuIHZhcmlhYmxlIHRoYXQncyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0aW9uLgor
ICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAg
aWYgKGxvb3BUeXBlID09IEVMb29wV2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisr
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06Cisr
ICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorKyAgICAgICAgICAg
ICAgICAvLyBpbnRvCisrICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7CisrICAg
ICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IGJvZHk7IH0KKysgICAgICAgICAgICAgICAg
VEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KKysgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlh
YmxlLCBtTG9vcC5jb25kaXRpb24pOworKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJ
blBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworKworKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFy
aWFibGUpKTsKKysKKysgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQg
Y29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0
aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAg
ICAvLyAgIHdoaWxlIChleHByKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8gaW50bwor
ICAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgICAv
LyAgIHdoaWxlIChzMCkgeyB7IGJvZHk7IH0gczAgPSBleHByOyB9CisrICAgICAgICAgICAgICAg
IC8vCisrICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNm
b3JtZWQgaW50bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24g
PQorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRp
b25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOworKyAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9u
VmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgIGluc2VydFN0YXRl
bWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisgCisgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKK0BAIC0xNzEs
MjggKzI0NCw2MCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFj
aygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZh
cmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKyAKKyAgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQg
bWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
ZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3Rp
bGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVh
dGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkp
OworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShj
b25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24o
Q3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAgICAg
ICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcERv
V2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9u
KTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUo
KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUgc3Rh
dGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisrICAgICAgICAgICAgICAgIG1Mb29w
LmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
ZG8geworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKysgICAgICAgICAgICAgICAgLy8g
ICB9IHdoaWxlIChleHByKTsKKysgICAgICAgICAgICAgICAgLy8gaW50bworKyAgICAgICAgICAg
ICAgICAvLyAgIGJvb2wgczAgPSBleHByOworKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKysg
ICAgICAgICAgICAgICAgLy8gICAgIGJvZHk7CisrICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoczApOworKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVj
bGFyYXRpb24gPQorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisrICAgICAg
ICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlv
bik7CisrCisrICAgICAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3lt
Ym9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSkpOworKworKyAgICAgICAgICAgICAgICAv
LyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAg
ICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRyOworKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgICAv
LyAgICAgYm9keTsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAg
ICAgICAgICAgICAgLy8gaW50bworLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IHRydWU7Cisr
ICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMDsKKyAgICAgICAgICAgICAgICAgLy8gICBkbyB7
CisgICAgICAgICAgICAgICAgIC8vICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8g
ICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7CisrICAg
ICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50
bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorLSAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJs
ZSwgQ3JlYXRlQm9vbE5vZGUodHJ1ZSkpOworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVt
cERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7Cisg
CisgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxv
Y2soKTsKK0BAIC0yMDEsMTUgKzMwNiw2OCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVl
bmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnRO
b2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkp
OworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNv
bmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAKKyAgICAgICAgICAgICAgICAg
Ly8gQ2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2Ug
aXQgbWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUg
dG8gZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwg
c3RpbGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBj
cmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0Jv
ZHkpOworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9k
ZShjb25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRp
b24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAg
ICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9v
cEZvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIW1Mb29wLmNvbmRpdGlvbikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IENyZWF0ZUJv
b2xOb2RlKHRydWUpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBUSW50ZXJtTG9v
cCAqd2hpbGVMb29wOworKyAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAg
ICAgICAgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICpsb29wU2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysKKysgICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+
cHVzaF9iYWNrKG5vZGUtPmdldEluaXQoKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAg
ICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRo
ZSBsb29wLgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAg
IC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAg
IC8vIGludG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAg
ICBpbml0OworKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKGV4cHIpIHsKKysgICAgICAg
ICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4
cHJCOworKyAgICAgICAgICAgICAgICAvLyAgICAgfQorKyAgICAgICAgICAgICAgICAvLyAgIH0K
KysgICAgICAgICAgICAgICAgLy8KKysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0
ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJC
OyBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGlu
IHRoZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29w
Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dEJvZHkoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgd2hpbGVM
b29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRo
ZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoZXhwcikgeyB3
aGlsZUxvb3BCb2R5IH0iCisrICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9CisrICAgICAgICAg
ICAgICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29u
ZGl0aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKysKKysgICAgICAgICAgICAgICAgLy8g
TWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAg
ICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29u
ZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgor
QEAgLTIyMSwzMSArMzc5LDU2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
cjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAvLyAg
ICAgd2hpbGUgKHMwKSB7CisgICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKy0gICAgICAgICAgICAvLyAgICAgICBzMCA9
IGV4cHI7CisgICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgIC8vICAg
fQorLSAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAgPSBuZXcg
VEludGVybUJsb2NrKCk7CistICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVT
ZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysgICAgICAgICAgICAgICAgLy8K
KysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1l
ZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKyAKKy0gICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAg
ICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAg
ICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFi
bGUsIG1Mb29wLmNvbmRpdGlvbikpOworKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9k
eTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKysgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3
aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGxv
b3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKKysgICAgICAgICAg
ICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5n
ZXRCb2R5KCkpOworICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gSW5zZXJ0
ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsiIG90aGVy
d2lzZQorLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBu
dWxscHRyOworLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKysgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisrICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgIHsKKy0g
ICAgICAgICAgICAgICAgY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBub2RlLT5nZXRDb25kaXRpb24o
KS0+ZGVlcENvcHkoKTsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNl
cXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxv
b3BXaGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVs
bHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHkpOworKworKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVu
dCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IENyZWF0
ZUJvb2xOb2RlKHRydWUpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xh
cmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKKysg
ICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29w
LgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
Zm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vIGlu
dG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAgICBpbml0
OworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9vbCBzMCA9IGV4cHI7CisrICAgICAgICAgICAg
ICAgIC8vICAgICB3aGlsZSAoczApIHsKKysgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5
OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOworKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisrICAgICAgICAgICAgICAgIC8vICAgICB9CisrICAgICAgICAg
ICAgICAgIC8vICAgfQorKyAgICAgICAgICAgICAgICAvLworKyAgICAgICAgICAgICAgICAvLyBM
b2NhbCBjYXNlIHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisrICAgICAgICAgICAg
ICAgIC8vICAgZXhwckI7IHMwID0gZXhwcjsgY29udGludWU7CisgCisrICAgICAgICAgICAgICAg
IC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAgICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXRE
ZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikp
OworICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdoaWxlIGxv
b3AKKyAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0gbmV3IFRJ
bnRlcm1CbG9jaygpOworICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorQEAg
LTI1OCwyMyArNDQxLDIxIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6
dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24o
KSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9
IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25k
aXRpb24oKSkKKy0gICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCkt
PmRlZXBDb3B5KCkpKTsKKysgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3NpZ25tZW50
Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uLT5kZWVwQ29weSgp
KSk7CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29wQm9k
eSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxvb3BX
aGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVsbHB0
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxl
KHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKKy0gICAgICAgICAgICBUSW50ZXJtTG9vcCAqd2hpbGVM
b29wID0KKy0gICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1Mb29wKEVMb29wV2hpbGUsIG51bGxw
dHIsIENyZWF0ZVRlbXBTeW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSwKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOworICAgICAgICAg
ICAgIGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHdoaWxlTG9vcCk7CisgICAg
ICAgICAgICAgcXVldWVSZXBsYWNlbWVudChsb29wU2NvcGUsIE9yaWdpbmFsTm9kZTo6SVNfRFJP
UFBFRCk7CisgCisgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhpcyB0aGUgb2xkIGJvZHkgbm9kZSB3
aWxsIGJlIHRyYXZlcnNlZCBhbmQgbG9vcHMgaW5zaWRlIGl0IG1heSBiZQorLSAgICAgICAgICAg
IC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdp
bGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlciB0aGUKKy0gICAgICAgICAgICAvLyB0cmFuc2Zv
cm1hdGlvbiB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRl
IGl0IGRvZXNuJ3QgbmVlZCB0bworLSAgICAgICAgICAgIC8vIGtub3cgdGhlIGV4YWN0IHBvc3Qt
dHJhbnNmb3JtIHBhdGggdG8gaXQuCisrICAgICAgICAgICAgLy8gdHJhbnNmb3JtZWQuIFRoaXMg
aXMgZmluZSwgc2luY2UgdGhlIG9sZCBib2R5IG5vZGUgd2lsbCBzdGlsbCBiZSBpbiB0aGUgQVNU
IGFmdGVyCisrICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQg
aGVyZSwgYW5kIHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorKyAgICAgICAg
ICAgIC8vIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0aCB0byBpdC4K
KyAgICAgICAgIH0KKyAgICAgfQorIAorQEAgLTI4MywxNiArNDY0LDI2IEBAIHZvaWQgU2ltcGxp
ZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2Rl
KQorICAgICAvLyBXZSB0cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBs
b29wIGlzIHRyYW5zZm9ybWVkLgorICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAg
bm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKysKKysgICAgbUxvb3AgPSBwcmV2TG9v
cDsKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlCisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zKFRDb21waWxlciAqY29tcGlsZXIsIFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlKQorK3sKKysgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0
cmF2ZXJzZXIobnVsbHB0ciwgc3ltYm9sVGFibGUpOworKyAgICByb290LT50cmF2ZXJzZSgmdHJh
dmVyc2VyKTsKKysgICAgcmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVlKGNvbXBpbGVyLCByb290
KTsKKyt9CisrCisgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxp
ZnlNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJv
bFRhYmxlKQorIHsKKy0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJz
ZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7CisrICAgIEludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlciBjb25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlm
eU1hc2spOworKyAgICBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIHRyYXZlcnNlcigm
Y29uZGl0aW9uc1RvU2ltcGxpZnksIHN5bWJvbFRhYmxlKTsKKyAgICAgcm9vdC0+dHJhdmVyc2Uo
JnRyYXZlcnNlcik7CisgICAgIHJldHVybiB0cmF2ZXJzZXIudXBkYXRlVHJlZShjb21waWxlciwg
cm9vdCk7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAoraW5kZXggNGNkZWRlNi4uNjhiOThmOCAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENv
bmRpdGlvbnMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxp
ZnlMb29wQ29uZGl0aW9ucy5oCitAQCAtMTksNiArMTksMTAgQEAgY2xhc3MgVENvbXBpbGVyOwor
IGNsYXNzIFRJbnRlcm1Ob2RlOworIGNsYXNzIFRTeW1ib2xUYWJsZTsKKyAKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworKworIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1w
bGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbmRp
dGlvbnNUb1NpbXBsaWZ5LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05v
ZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFjNmRlMTgKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUu
aAorQEAgLTAsMCArMSwyMTIgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisrI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTUFTTk9ERV9IXworKworKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUu
aCIKKysKKysjaW5jbHVkZSA8dXRpbGl0eT4KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrbmFt
ZXNwYWNlIHByaXYKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFzTm9k
ZQorK3t9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtTm9kZT4KKyt7
CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUg
Km5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFz
Tm9kZTxUSW50ZXJtVHlwZWQ+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1U
eXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1w
bGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN5bWJvbD4KKyt7CisrICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
Q29uc3RhbnRVbmlvbj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUNvbnN0
YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBub2RlID8gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUZ1bmN0aW9uUHJvdG90
eXBlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2Rl
ID8gbm9kZS0+Z2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0K
Kyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkgOiBudWxscHRy
OworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN3
aXp6bGU+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PmdldEFzU3dpenpsZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQmluYXJ5PgorK3sKKysgICAgc3RhdGljIEFOR0xF
X0lOTElORSBUSW50ZXJtQmluYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpIDogbnVsbHB0cjsK
KysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1VbmFy
eT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFz
VW5hcnlOb2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0
cnVjdCBBc05vZGU8VEludGVybVRlcm5hcnk+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVGVybmFyeU5vZGUoKSA6IG51bGxwdHI7CisrICAg
IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtSWZFbHNlPgor
K3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRlcm1O
b2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzSWZF
bHNlTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Td2l0Y2g+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBub2RlID8gbm9kZS0+Z2V0QXNTd2l0Y2hOb2RlKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUNhc2U+CisreworKyAg
ICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ2FzZU5vZGUoKSA6
IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkg
OiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8
VEludGVybUFnZ3JlZ2F0ZT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFn
Z3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307Cisr
CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1CbG9jaz4KKyt7CisrICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmxvY2soKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9kZSAqbm9k
ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0dsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9uTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxh
dGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1EZWNsYXJhdGlvbj4KKyt7CisrICAgIHN0YXRp
YyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBB
c05vZGU8VEludGVybUxvb3A+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1M
b29wICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzTG9vcE5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3Rl
bXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQnJhbmNoPgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0lOTElORSBUSW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQnJhbmNoTm9kZSgpIDogbnVs
bHB0cjsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHByaXYKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9JTkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2Rl
KQorK3sKKysgICAgcmV0dXJuIHByaXY6OkFzTm9kZTxUPjo6ZXhlYyhub2RlKTsKKyt9CisrCisr
fSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
RUVVVElMX0lOVEVSTUFTTk9ERV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK2luZGV4
IGQwOGMzODYuLmFjYzc4OTIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK0BAIC02
NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFtaWNJbmRl
eGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCisgICAgIHJldHVybiBJc0R5bmFt
aWNJbmRleGluZ09mVmVjdG9yT3JNYXRyaXgobm9kZSkgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N3aXp6bGVOb2RlKCk7CisgfQorIAorLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaEludGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2Rl
KQorK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJbnRlcm1C
aW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsKKyAgICAgaWYg
KChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDApCisgICAgIHsKK0BAIC04
Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFs
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCisgICAgIHJldHVybiBmYWxzZTsK
KyB9CisgCistYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkKKytib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVu
YXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtBcnJheUxlbmd0aE1ldGhv
ZCkgIT0gMCkKKyAgICAgeworQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKKyAgICAgcmV0dXJuIGZhbHNlOwor
IH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFy
eSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnRO
b2RlKSBjb25zdAorIHsKKyAgICAgLy8gTC12YWx1ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBu
ZWVkZWQgdG8gY2hlY2sgZm9yIGR5bmFtaWMgaW5kZXhpbmcgaW4gTC12YWx1ZS4KKyAgICAgLy8g
VHJhdmVyc2VycyB0aGF0IGRvbid0IHRyYWNrIGwtdmFsdWVzIGNhbiBzdGlsbCB1c2UgdGhpcyBj
bGFzcyBhbmQgbWF0Y2ggYmluYXJ5IG5vZGVzIHdpdGgKK0BAIC0xMTAsNyArMTEwLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2QKKyAKKyBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybU5vZGUgKnBhcmVudE5vZGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpIGNvbnN0
CisgeworICAgICBpZiAobWF0Y2hJbnRlcm5hbChub2RlLCBwYXJlbnROb2RlKSkKKyAgICAgewor
QEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2go
VEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25z
dAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDAp
CisgICAgIHsKK0BAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnQKKyAg
ICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybVRlcm5hcnkgKm5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFz
ayAmIGtVbmZvbGRlZFNob3J0Q2lyY3VpdEV4cHJlc3Npb24pICE9IDApCisgICAgIHsKK0BAIC0x
NzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRl
cm1UZXJuYXJ5ICpub2RlKQorICAgICByZXR1cm4gZmFsc2U7CisgfQorIAorLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpCisrYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSkgY29uc3QKKyB7CisgICAgIGlmICgobU1hc2sgJiBrTXVsdGlEZWNsYXJhdGlvbikgIT0gMCkK
KyAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAoraW5kZXggZTljNGJjZi4uNmYzZDg3MyAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXIuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oCitAQCAtMjgsNTIgKzI4LDUyIEBAIGNsYXNzIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcgorICAgICBzdGF0aWMgYm9vbCBJc0R5bmFtaWNJbmRleGlu
Z09mVmVjdG9yT3JNYXRyaXgoVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAgIHN0YXRpYyBib29s
IElzRHluYW1pY0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsK
KyAKKy0gICAgZW51bSBQYXR0ZXJuVHlwZQorKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWdu
ZWQgaW50CisgICAgIHsKKyAgICAgICAgIC8vIE1hdGNoZXMgZXhwcmVzc2lvbnMgdGhhdCBhcmUg
dW5mb2xkZWQgdG8gaWYgc3RhdGVtZW50cyBieSBVbmZvbGRTaG9ydENpcmN1aXRUb0lmCistICAg
ICAgICBrVW5mb2xkZWRTaG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorKyAgICAgICAg
a1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbiA9IDF1IDw8IDB1LAorIAorICAgICAgICAg
Ly8gTWF0Y2hlcyBleHByZXNzaW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIHNpbXBsZSBzdGF0ZW1lbnRzIHdoZXJlIGEKKyAgICAgICAgIC8vIGNvbnN0cnVjdG9y
IG9yIGZ1bmN0aW9uIGNhbGwgcmVzdWx0IGlzIGFzc2lnbmVkLgorLSAgICAgICAga0V4cHJlc3Np
b25SZXR1cm5pbmdBcnJheSA9IDB4MDAwMSA8PCAxLAorKyAgICAgICAga0V4cHJlc3Npb25SZXR1
cm5pbmdBcnJheSA9IDF1IDw8IDF1LAorIAorICAgICAgICAgLy8gTWF0Y2hlcyBkeW5hbWljIGlu
ZGV4aW5nIG9mIHZlY3RvcnMgb3IgbWF0cmljZXMgaW4gbC12YWx1ZXMuCistICAgICAgICBrRHlu
YW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisrICAg
ICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMXUgPDwgMnUs
CisgCisgICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUg
ZGVjbGFyZWQgdmFyaWFibGVzLgorLSAgICAgICAga011bHRpRGVjbGFyYXRpb24gPSAweDAwMDEg
PDwgMywKKysgICAgICAgIGtNdWx0aURlY2xhcmF0aW9uID0gMXUgPDwgM3UsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyBvZiBhcnJheXMuCistICAgICAgICBrQXJyYXlEZWNs
YXJhdGlvbiA9IDB4MDAwMSA8PCA0LAorKyAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAxdSA8
PCA0dSwKKyAKKyAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIHN0cnVjdHMgd2hl
cmUgdGhlIHN0cnVjdCB0eXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lLgorLSAgICAgICAga05hbWVs
ZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwKKysgICAgICAgIGtOYW1lbGVzc1N0
cnVjdERlY2xhcmF0aW9uID0gMXUgPDwgNXUsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGFycmF5
IGxlbmd0aCgpIG1ldGhvZC4KKy0gICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDB4MDAwMSA8
PCA2LAorKyAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9kID0gMXUgPDwgNnUsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGEgdmVjdG9yIG9yIG1hdHJpeCBjb25zdHJ1Y3RvciB3aG9zZSBhcmd1bWVu
dHMgYXJlIHNjYWxhcml6ZWQgYnkgdGhlCisgICAgICAgICAvLyBTSF9TQ0FMQVJJWkVfVkVDX09S
X01BVF9DT05TVFJVQ1RPUl9BUkdVTUVOVFMgd29ya2Fyb3VuZC4KKy0gICAgICAgIGtTY2FsYXJp
emVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisrICAgICAgICBrU2NhbGFyaXpl
ZFZlY09yTWF0Q29uc3RydWN0b3IgPSAxdSA8PCA3dSwKKyAgICAgfTsKKyAgICAgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKKyAKKy0gICAgYm9vbCBt
YXRjaChUSW50ZXJtVW5hcnkgKm5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAq
bm9kZSkgY29uc3Q7CisgCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKKyAKKyAgICAgLy8gVXNlIHRoaXMg
dmVyc2lvbiBmb3IgY2hlY2tpbmcgYmluYXJ5IG5vZGUgbWF0Y2hlcyBpbiBjYXNlIHlvdSdyZSB1
c2luZyBmbGFnCisgICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUsIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpOworKyAgICBib29sIG1hdGNoKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlLCBib29sIGlzTFZhbHVl
UmVxdWlyZWRIZXJlKSBjb25zdDsKKyAKKy0gICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRl
ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSk7CistICAgIGJvb2wgbWF0Y2goVEludGVy
bVRlcm5hcnkgKm5vZGUpOworLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSk7CisrICAgIGJvb2wgbWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVEludGVybU5vZGUg
KnBhcmVudE5vZGUpIGNvbnN0OworKyAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2Rl
KSBjb25zdDsKKysgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0
OworIAorICAgcHJpdmF0ZToKKyAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOworIAorLSAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpOworKyAgICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwg
VEludGVybU5vZGUgKnBhcmVudE5vZGUpIGNvbnN0OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNl
IHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVfdXRpbC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZV91dGlsLmNwcAoraW5kZXggNmFiMTNiYS4uZDNlMWZjYSAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcAorQEAg
LTIyNCw2ICsyMjQsNTAgQEAgVFZhcmlhYmxlICpEZWNsYXJlVGVtcFZhcmlhYmxlKFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUsCisgICAgIHJldHVybiB2YXJpYWJsZTsKKyB9CisgCisrc3RkOjpw
YWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gRGVjbGFyZVN0cnVjdHVy
ZSgKKysgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRh
YmxlLAorKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisrICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyLAorKyAgICBjb25zdCBUTWVtb3J5UXVhbGlmaWVyICZtZW1vcnlRdWFsaWZpZXIsCisrICAg
IHVpbnQzMl90IGFycmF5U2l6ZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICpzdHJ1Y3RJbnN0YW5jZU5hbWUp
CisreworKyAgICBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPQorKyAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoc3ltYm9sVGFibGUsIHN0cnVjdFR5cGVOYW1lLCBmaWVsZExpc3QsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKworKyAgICBhdXRvIG1ha2VTdHJ1Y3R1cmVUeXBlID0gWyZdKGJvb2wg
aXNTdHJ1Y3RTcGVjaWZpZXIpIHsKKysgICAgICAgIFRUeXBlICpzdHJ1Y3R1cmVUeXBlID0gbmV3
IFRUeXBlKHN0cnVjdHVyZSwgaXNTdHJ1Y3RTcGVjaWZpZXIpOworKyAgICAgICAgc3RydWN0dXJl
VHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisrICAgICAgICBzdHJ1Y3R1cmVUeXBlLT5z
ZXRNZW1vcnlRdWFsaWZpZXIobWVtb3J5UXVhbGlmaWVyKTsKKysgICAgICAgIGlmIChhcnJheVNp
emUgPiAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHVyZVR5cGUtPm1ha2VBcnJh
eShhcnJheVNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisrICAgIH07CisrCisrICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKysKKysg
ICAgVFZhcmlhYmxlICp0eXBlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwga0VtcHR5
SW1tdXRhYmxlU3RyaW5nLCBtYWtlU3RydWN0dXJlVHlwZSh0cnVlKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisrICAgIGluc2Vy
dFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue3R5cGVWYXJ9KTsKKysK
KysgICAgVFZhcmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisrICAgIGlmIChzdHJ1Y3RJ
bnN0YW5jZU5hbWUpCisrICAgIHsKKysgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJs
ZShzeW1ib2xUYWJsZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFs
c2UpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50
ZXJtRGVjbGFyYXRpb257aW5zdGFuY2VWYXJ9KTsKKysgICAgfQorKworKyAgICBzaXplX3QgZmly
c3RGdW5jdGlvbkluZGV4ID0gRmluZEZpcnN0RnVuY3Rpb25EZWZpbml0aW9uSW5kZXgocm9vdCk7
CisrICAgIHJvb3QtPmluc2VydENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRT
ZXF1ZW5jZSk7CisrCisrICAgIHJldHVybiB7dHlwZVZhciwgaW5zdGFuY2VWYXJ9OworK30KKysK
KyBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
RmllbGRMaXN0ICpmaWVsZExpc3QsCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCitpbmRleCAzOWI4NmRkLi5mNWQxYzkzIDEwMDY0
NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRp
bC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91
dGlsLmgKK0BAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVUZW1wVmFyaWFibGUo
VFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICppbml0aWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKKytzdGQ6OnBhaXI8Y29u
c3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJsZSAqPiBEZWNsYXJlU3RydWN0dXJlKAorKyAg
ICBUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisr
ICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKKysgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisr
ICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKysgICAgdWludDMy
X3QgYXJyYXlTaXplLAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgJnN0cnVjdFR5cGVOYW1l
LAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CisgY29u
c3QgVFZhcmlhYmxlICpEZWNsYXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxk
TGlzdCAqZmllbGRMaXN0LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw
MDAuLmQ4ODM0NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorQEAgLTAsMCArMSwxMDI4IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgPGFsZ29yaXRobT4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Fz
Tm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmgiCisrCisrI2RlZmluZSBHVUFSRDIoY29uZCwgZmFpbFZhbCkgXAorKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICBpZiAoIShjb25kKSkgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gZmFpbFZhbDsgICBcCisrICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9IHdoaWxlIChmYWxzZSkKKysKKysjZGVmaW5l
IEdVQVJEKGNvbmQpIEdVQVJEMihjb25kLCBudWxscHRyKQorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9v
bCBBbGxCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxlKQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFj
ayAmIG5lZWRsZSkgPT0gbmVlZGxlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9vbCBBbnlCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxl
KQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFjayAmIG5lZWRsZSkgIT0gMDsKKyt9CisrCisrLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChCYXNlUmVzdWx0ICZvdGhlcikKKysgICAgOiBtQWN0aW9uKG90aGVyLm1BY3Rpb24p
LAorKyAgICAgIG1WaXNpdChvdGhlci5tVmlzaXQpLAorKyAgICAgIG1TaW5nbGUob3RoZXIubVNp
bmdsZSksCisrICAgICAgbU11bHRpKHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpKQorK3t9CisrCisr
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6UmVwbGFjZVNpbmdsZSks
IG1WaXNpdCh2aXNpdCksIG1TaW5nbGUoJm5vZGUpCisre30KKysKKytUSW50ZXJtUmVidWlsZDo6
QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0
KQorKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6
RHJvcCksCisrICAgICAgbVZpc2l0KG5vZGUgPyB2aXNpdCA6IFZpc2l0Qml0czo6TmVpdGhlciks
CisrICAgICAgbVNpbmdsZShub2RlKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1
bHQ6OkJhc2VSZXN1bHQobnVsbHB0cl90KQorKyAgICA6IG1BY3Rpb24oQWN0aW9uOjpEcm9wKSwg
bVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikKKyt7fQorKworK1RJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisrICAgIDogbUFjdGlv
bihBY3Rpb246OkZhaWwpLCBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwgbVNpbmdsZShudWxs
cHRyKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6
UmVwbGFjZU11bHRpKSwKKysgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKysgICAg
ICBtU2luZ2xlKG51bGxwdHIpLAorKyAgICAgIG1NdWx0aShzdGQ6Om1vdmUobm9kZXMpKQorK3t9
CisrCisrdm9pZCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwoQmFz
ZVJlc3VsdCAmb3RoZXIpCisreworKyAgICBtQWN0aW9uID0gb3RoZXIubUFjdGlvbjsKKysgICAg
bVZpc2l0ICA9IG90aGVyLm1WaXNpdDsKKysgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisr
ICAgIG1NdWx0aSAgPSBzdGQ6Om1vdmUob3RoZXIubU11bHRpKTsKKyt9CisrCisrVEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6
dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisreworKyAgICBhdXRvIGl0ID0gc3RkOjpy
ZW1vdmUobm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworKyAgICBub2Rlcy5l
cmFzZShpdCwgbm9kZXMuZW5kKCkpOworKyAgICByZXR1cm4gc3RkOjptb3ZlKG5vZGVzKTsKKyt9
CisrCisrYm9vbCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNGYWlsKCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6RmFpbDsKKyt9CisrCisrYm9vbCBUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNEcm9wKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBt
QWN0aW9uID09IEFjdGlvbjo6RHJvcDsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjpCYXNlUmVzdWx0OjpzaW5nbGUoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIG1TaW5nbGU7
CisrfQorKworK2NvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdDo6bXVsdGkoKSBjb25zdAorK3sKKysgICAgaWYgKG1BY3Rpb24gPT0gQWN0
aW9uOjpSZXBsYWNlTXVsdGkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbU11bHRpOworKyAg
ICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworKworK3VzaW5nIFByZVJlc3VsdCA9IFRJbnRlcm1SZWJ1aWxkOjpQcmVSZXN1bHQ7CisrCisr
UHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkg
OiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlLCBWaXNpdEJpdHMgdmlzaXQpIDogQmFzZVJlc3VsdChub2RlLCB2aXNpdCkg
e30KKytQcmVSZXN1bHQ6OlByZVJlc3VsdChudWxscHRyX3QpIDogQmFzZVJlc3VsdChudWxscHRy
KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChGYWlsKCkpIHt9
CisrCisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1
bHQob3RoZXIpIHt9CisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3RoZXIpIDog
QmFzZVJlc3VsdChvdGhlcikge30KKysKKyt2b2lkIFByZVJlc3VsdDo6b3BlcmF0b3I9KFByZVJl
c3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVi
dWlsZDo6UG9zdFJlc3VsdDsKKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFRJbnRlcm1Ob2Rl
ICZub2RlKSA6IEJhc2VSZXN1bHQobm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyKSB7fQorK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CisrUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChudWxscHRyX3Qp
IDogQmFzZVJlc3VsdChudWxscHRyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoRmFpbCkg
OiBCYXNlUmVzdWx0KEZhaWwoKSkge30KKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFBvc3RS
ZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RS
ZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CisrCisrdm9p
ZCBQb3N0UmVzdWx0OjpvcGVyYXRvcj0oUG9zdFJlc3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92
ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K1RJbnRlcm1SZWJ1aWxkOjpUSW50ZXJtUmVidWlsZChUQ29tcGlsZXIgJmNvbXBpbGVyLCBib29s
IHByZVZpc2l0LCBib29sIHBvc3RWaXNpdCkKKysgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAor
KyAgICAgIG1TeW1ib2xUYWJsZShjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSwKKysgICAgICBt
UHJlVmlzaXQocHJlVmlzaXQpLAorKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQorK3sKKysg
ICAgQVNTRVJUKHByZVZpc2l0IHx8IHBvc3RWaXNpdCk7CisrfQorKworK1RJbnRlcm1SZWJ1aWxk
Ojp+VEludGVybVJlYnVpbGQoKQorK3sKKysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnZhbHVlKTsK
KysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnRhaWwpOworK30KKysKKytjb25zdCBURnVuY3Rpb24g
KlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0CisreworKyAgICByZXR1
cm4gbVBhcmVudEZ1bmM7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6Z2V0
UGFyZW50Tm9kZShzaXplX3Qgb2Zmc2V0KSBjb25zdAorK3sKKysgICAgQVNTRVJUKG1Ob2RlU3Rh
Y2sudGFpbCk7CisrICAgIGF1dG8gcGFyZW50ID0gKm1Ob2RlU3RhY2sudGFpbDsKKysgICAgd2hp
bGUgKG9mZnNldCA+IDApCisrICAgIHsKKysgICAgICAgIC0tb2Zmc2V0OworKyAgICAgICAgQVNT
RVJUKHBhcmVudC50YWlsKTsKKysgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFpbDsKKysgICAg
fQorKyAgICByZXR1cm4gcGFyZW50LnZhbHVlOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxk
OjpyZWJ1aWxkUm9vdChUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIXJlYnVpbGRJ
blBsYWNlKHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysg
ICAgcmV0dXJuIG1Db21waWxlci52YWxpZGF0ZUFTVCgmcm9vdCk7CisrfQorKworK2Jvb2wgVElu
dGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCisrewor
KyAgICByZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1
aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4KKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAm
bm9kZSkKKyt7CisrICAgIGF1dG8gKm5ld05vZGUgPSB0cmF2ZXJzZUFueUFzPE5vZGU+KG5vZGUp
OworKyAgICBpZiAoIW5ld05vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3Tm9kZSAhPSAmbm9kZSkKKysgICAgeworKyAgICAgICAgKm5v
ZGUuZ2V0U2VxdWVuY2UoKSA9IHN0ZDo6bW92ZSgqbmV3Tm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGQoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICByZXR1cm4gdHJhdmVy
c2VBbnkobm9kZSk7CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMo
VEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJzZUFu
eShub2RlKSk7CisrICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZhaWwgfHwgIXJl
c3VsdC5tU2luZ2xlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgfQor
KyAgICByZXR1cm4gYXNOb2RlPE5vZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyt9CisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrYm9vbCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBbnlBcyhU
SW50ZXJtTm9kZSAmbm9kZSwgTm9kZSAqJm91dCkKKyt7CisrICAgIFBvc3RSZXN1bHQgcmVzdWx0
KHRyYXZlcnNlQW55KG5vZGUpKTsKKysgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlvbjo6
RmFpbCB8fCByZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrICAgIG91dCA9IGFzTm9k
ZTxOb2RlPihyZXN1bHQubVNpbmdsZSk7CisrICAgIHJldHVybiBvdXQ7CisrfQorKworK2Jvb2wg
VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgY2hpbGRyZW4gPSBub2RlLmdl
dFNlcXVlbmNlKCk7CisrICAgIEFTU0VSVChjaGlsZHJlbik7CisrICAgIFRJbnRlcm1TZXF1ZW5j
ZSBuZXdDaGlsZHJlbjsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqY2hpbGQgOiAqY2hpbGRy
ZW4pCisrICAgIHsKKysgICAgICAgIEFTU0VSVChjaGlsZCk7CisrICAgICAgICBQb3N0UmVzdWx0
IHJlc3VsdCh0cmF2ZXJzZUFueSgqY2hpbGQpKTsKKysKKysgICAgICAgIHN3aXRjaCAocmVzdWx0
Lm1BY3Rpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VT
aW5nbGU6CisrICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2hfYmFjayhyZXN1bHQubVNp
bmdsZSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0
aW9uOjpSZXBsYWNlTXVsdGk6CisrICAgICAgICAgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5l
d05vZGUgOiByZXN1bHQubU11bHRpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICBpZiAobmV3Tm9kZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoX2JhY2sobmV3Tm9kZSk7CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OkRyb3A6CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpGYWlsOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgKmNoaWxkcmVuID0g
c3RkOjptb3ZlKG5ld0NoaWxkcmVuKTsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrc3RydWN0IFRJbnRlcm1SZWJ1aWxkOjpOb2RlU3Rh
Y2tHdWFyZAorK3sKKysgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gb2xkTm9kZVN0YWNrOwor
KyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrOworKyAgICBOb2RlU3RhY2tH
dWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorKyAgICAgICAgOiBvbGRO
b2RlU3RhY2sobm9kZVN0YWNrKSwgbm9kZVN0YWNrKG5vZGVTdGFjaykKKysgICAge30KKysgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KKyt9OworKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmln
aW5hbE5vZGUpCisreworKyAgICBQcmVSZXN1bHQgcHJlUmVzdWx0ID0gdHJhdmVyc2VQcmUob3Jp
Z2luYWxOb2RlKTsKKysgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKysgICAgeworKyAgICAg
ICAgQVNTRVJUKHByZVJlc3VsdC5tVmlzaXQgPT0gVmlzaXRCaXRzOjpOZWl0aGVyKTsKKysgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKysgICAgfQorKworKyAgICBUSW50ZXJt
Tm9kZSAqY3Vyck5vZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKysgICAgY29uc3QgVmlz
aXRCaXRzIHZpc2l0ICAgICAgID0gcHJlUmVzdWx0Lm1WaXNpdDsKKysgICAgY29uc3QgTm9kZVR5
cGUgY3Vyck5vZGVUeXBlID0gZ2V0Tm9kZVR5cGUoKmN1cnJOb2RlKTsKKysKKysgICAgY3Vyck5v
ZGUgPSB0cmF2ZXJzZUNoaWxkcmVuKGN1cnJOb2RlVHlwZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5v
ZGUsIHZpc2l0KTsKKysgICAgaWYgKCFjdXJyTm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IEZhaWwoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJhdmVyc2VQb3N0KGN1cnJOb2RlVHlw
ZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5vZGUsIHZpc2l0KTsKKyt9CisrCisrUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVByZShUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlKQorK3sK
KysgICAgaWYgKCFtUHJlVmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7b3JpZ2luYWxO
b2RlLCBWaXNpdEJpdHM6OkJvdGh9OworKyAgICB9CisrCisrICAgIE5vZGVTdGFja0d1YXJkIGd1
YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZvcmlnaW5hbE5vZGUsICZndWFy
ZC5vbGROb2RlU3RhY2t9OworKworKyAgICBjb25zdCBOb2RlVHlwZSBvcmlnaW5hbE5vZGVUeXBl
ID0gZ2V0Tm9kZVR5cGUob3JpZ2luYWxOb2RlKTsKKysKKysgICAgc3dpdGNoIChvcmlnaW5hbE5v
ZGVUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1i
b2xQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5v
ZGVUeXBlOjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50
VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRGdW5jdGlvblByb3RvdHlwZVByZSgqb3JpZ2luYWxOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5
cGVOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZl
OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVByZSgqb3Jp
Z2luYWxOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFy
eToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRCaW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRB
c0JpbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1Rlcm5hcnlO
b2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRJZkVsc2VQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUHJl
KCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5p
dGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorKyAgICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFy
YXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25QcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxv
b3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFByZSgqb3JpZ2luYWxOb2RlLmdldEFz
TG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0QnJhbmNoUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VD
aGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjdXJyTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlzaXRCaXRzIHZpc2l0KQorK3sKKysgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJp
dHM6OkNoaWxkcmVuKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKysgICAg
fQorKworKyAgICBpZiAoQW55Qml0cyh2aXNpdCwgVmlzaXRCaXRzOjpDaGlsZHJlblJlcXVpcmVz
U2FtZSkgJiYgJm9yaWdpbmFsTm9kZSAhPSAmY3Vyck5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAmY3Vyck5vZGU7CisrICAgIH0KKysKKysgICAgTm9kZVN0YWNrR3VhcmQgZ3VhcmQobU5v
ZGVTdGFjayk7CisrICAgIG1Ob2RlU3RhY2sgPSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0
YWNrfTsKKysKKysgICAgc3dpdGNoIChjdXJyTm9kZVR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgTm9kZVR5cGU6OlVua25vd246CisrICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKysgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
Q29uc3RhbnRVbmlvbjoKKysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25Qcm90b3R5cGU6CisrICAgICAgICAgICAgcmV0dXJuICZj
dXJyTm9kZTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCaW5hcnk6Cisr
ICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFz
QmluYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisrICAgICAg
ICAgICAgcmV0dXJuIHRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1Rlcm5h
cnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5v
ZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpJZkVsc2U6CisrICAgICAgICAgICAgcmV0
dXJuIHRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKysgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTd2l0Y2hDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNl
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvbkRlZmluaXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRnVu
Y3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9u
KCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorKyAgICAgICAgICAgIHJl
dHVybiB0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgp
KTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB0
cmF2ZXJzZUJsb2NrQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorKyAgICAg
ICAgICAgICAgICAqY3Vyck5vZGUuZ2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUo
KSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0
aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAgICAgICAgICAg
cmV0dXJuIHRyYXZlcnNlTG9vcENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0xvb3BOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisrICAgIH0K
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VQb3N0KE5vZGVUeXBl
IGN1cnJOb2RlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEludGVybU5vZGUgJm9yaWdpbmFsTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCisreworKyAgICBpZiAo
IW1Qb3N0VmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQor
KworKyAgICBpZiAoIUFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9zdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAoQW55Qml0cyh2aXNp
dCwgVmlzaXRCaXRzOjpQb3N0UmVxdWlyZXNTYW1lKSAmJiAmb3JpZ2luYWxOb2RlICE9ICZjdXJy
Tm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworKyAgICB9CisrCisrICAg
IE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZj
dXJyTm9kZSwgJmd1YXJkLm9sZE5vZGVTdGFja307CisrCisrICAgIHN3aXRjaCAoY3Vyck5vZGVU
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQ
b3N0KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBl
OjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25Q
b3N0KCpjdXJyTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlv
blByb3RvdHlwZVBvc3QoKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFz
UHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1VuYXJ5
Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRCaW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5vZGUoKSk7CisrICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRl
cm5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6emxlUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Oklm
RWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRJZkVsc2VQb3N0KCpjdXJyTm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkp
OworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRDYXNlUG9zdCgqY3Vyck5vZGUuZ2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5j
dGlvbkRlZmluaXRpb25Qb3N0KCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4g
dmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUG9z
dCgqY3Vyck5vZGUuZ2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uUG9zdCgKKysgICAgICAgICAgICAgICAgKmN1cnJOb2RlLmdldEFz
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6RGVjbGFyYXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25Qb3N0
KCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5
cGU6Okxvb3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBvc3QoKmN1cnJOb2RlLmdl
dEFzTG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpCisreworKyAgICBpZiAodHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4o
bm9kZSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbm9kZTsKKysgICAgfQorKyAgICByZXR1
cm4gbnVsbHB0cjsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJsb2NrQ2hpbGRyZW4oVEludGVybUJsb2NrICZub2RlKQorK3sKKysgICAgaWYgKHRyYXZlcnNl
QWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gJm5v
ZGU7CisrICAgIH0KKysgICAgcmV0dXJuIG51bGxwdHI7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKFRJbnRlcm1EZWNsYXJh
dGlvbiAmbm9kZSkKKyt7CisrICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihu
b2RlKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZub2RlOworKyAgICB9CisrICAgIHJldHVy
biBudWxscHRyOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
U3dpenpsZUNoaWxkcmVuKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgYXV0byAqY29u
c3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICBBU1NFUlQob3BlcmFuZCk7Cisr
CisrICAgIGF1dG8gKm5ld09wZXJhbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9w
ZXJhbmQpOworKyAgICBHVUFSRChuZXdPcGVyYW5kKTsKKysKKysgICAgaWYgKG5ld09wZXJhbmQg
IT0gb3BlcmFuZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShu
ZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25z
dCBsZWZ0ID0gbm9kZS5nZXRMZWZ0KCk7CisrICAgIEFTU0VSVChsZWZ0KTsKKysgICAgYXV0byAq
Y29uc3QgcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisrICAgIEFTU0VSVChyaWdodCk7CisrCisr
ICAgIGF1dG8gKmNvbnN0IG5ld0xlZnQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmxl
ZnQpOworKyAgICBHVUFSRChuZXdMZWZ0KTsKKysgICAgYXV0byAqY29uc3QgbmV3UmlnaHQgPSB0
cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKysgICAgR1VBUkQobmV3UmlnaHQp
OworKworKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJpZ2h0KQorKyAg
ICB7CisrICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBzd2l0
Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAobmV3
TGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVEludGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21w
aWxlci5nZXRTaGFkZXJWZXJzaW9uKCkpOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0
dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
VW5hcnlDaGlsZHJlbihUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBv
cGVyYW5kID0gbm9kZS5nZXRPcGVyYW5kKCk7CisrICAgIEFTU0VSVChvcGVyYW5kKTsKKysKKysg
ICAgYXV0byAqY29uc3QgbmV3T3BlcmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigq
b3BlcmFuZCk7CisrICAgIEdVQVJEKG5ld09wZXJhbmQpOworKworKyAgICBpZiAobmV3T3BlcmFu
ZCAhPSBvcGVyYW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1VbmFyeShu
b2RlLmdldE9wKCksIG5ld09wZXJhbmQsIG5vZGUuZ2V0RnVuY3Rpb24oKSk7CisrICAgIH0KKysK
KysgICAgcmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKFRJbnRlcm1UZXJuYXJ5ICZub2RlKQorK3sKKysgICAg
YXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrICAgIEFTU0VSVChjb25k
KTsKKysgICAgYXV0byAqY29uc3QgdHJ1ZV8gPSBub2RlLmdldFRydWVFeHByZXNzaW9uKCk7Cisr
ICAgIEFTU0VSVCh0cnVlXyk7CisrICAgIGF1dG8gKmNvbnN0IGZhbHNlXyA9IG5vZGUuZ2V0RmFs
c2VFeHByZXNzaW9uKCk7CisrICAgIEFTU0VSVChmYWxzZV8pOworKworKyAgICBhdXRvICpjb25z
dCBuZXdDb25kID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpjb25kKTsKKysgICAgR1VB
UkQobmV3Q29uZCk7CisrICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFzPFRJ
bnRlcm1UeXBlZD4oKnRydWVfKTsKKysgICAgR1VBUkQobmV3VHJ1ZSk7CisrICAgIGF1dG8gKmNv
bnN0IG5ld0ZhbHNlID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpmYWxzZV8pOworKyAg
ICBHVUFSRChuZXdGYWxzZSk7CisrCisrICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3VHJ1
ZSAhPSB0cnVlXyB8fCBuZXdGYWxzZSAhPSBmYWxzZV8pCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVRlcm5hcnkobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworKyAgICB9
CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAg
ICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysgICAgQVNTRVJUKGNv
bmQpOworKyAgICBhdXRvICpjb25zdCB0cnVlXyAgPSBub2RlLmdldFRydWVCbG9jaygpOworKyAg
ICBhdXRvICpjb25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgYXV0
byAqY29uc3QgbmV3Q29uZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7Cisr
ICAgIEdVQVJEKG5ld0NvbmQpOworKyAgICBUSW50ZXJtQmxvY2sgKm5ld1RydWUgPSBudWxscHRy
OworKyAgICBpZiAodHJ1ZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMo
KnRydWVfLCBuZXdUcnVlKSk7CisrICAgIH0KKysgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9
IG51bGxwdHI7CisrICAgIGlmIChmYWxzZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZl
cnNlQW55QXMoKmZhbHNlXywgbmV3RmFsc2UpKTsKKysgICAgfQorKworKyAgICBpZiAobmV3Q29u
ZCAhPSBjb25kIHx8IG5ld1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbmV3VHJ1ZSwg
bmV3RmFsc2UpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXRjaENoaWxkcmVuKFRJbnRlcm1Td2l0
Y2ggJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBpbml0ID0gbm9kZS5nZXRJbml0KCk7Cisr
ICAgIEFTU0VSVChpbml0KTsKKysgICAgYXV0byAqY29uc3Qgc3RtdHMgPSBub2RlLmdldFN0YXRl
bWVudExpc3QoKTsKKysgICAgQVNTRVJUKHN0bXRzKTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3
SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7CisrICAgIEdVQVJEKG5l
d0luaXQpOworKyAgICBhdXRvICpjb25zdCBuZXdTdG10cyA9IHRyYXZlcnNlQW55QXM8VEludGVy
bUJsb2NrPigqc3RtdHMpOworKyAgICBHVUFSRChuZXdTdG10cyk7CisrCisrICAgIGlmIChuZXdJ
bml0ICE9IGluaXQgfHwgbmV3U3RtdHMgIT0gc3RtdHMpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBuZXdTdG10cyk7CisrICAgIH0KKysKKysgICAg
cmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZl
cnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qg
Y29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrCisrICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29u
ZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICBHVUFSRCh0cmF2
ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0NvbmQg
IT0gY29uZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQ2FzZShuZXdDb25k
KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbihUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQorK3sKKysgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsg
IC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisrICAgIG1QYXJlbnRG
dW5jID0gbm9kZS5nZXRGdW5jdGlvbigpOworKyAgICBzdHJ1Y3QgT25FeGl0CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVudEZ1bmM7CisrICAgICAgICBPbkV4aXQoY29u
c3QgVEZ1bmN0aW9uIComcGFyZW50RnVuYykgOiBwYXJlbnRGdW5jKHBhcmVudEZ1bmMpIHt9Cisr
ICAgICAgICB+T25FeGl0KCkgeyBwYXJlbnRGdW5jID0gbnVsbHB0cjsgfQorKyAgICB9IG9uRXhp
dChtUGFyZW50RnVuYyk7CisrCisrICAgIGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5j
dGlvblByb3RvdHlwZSgpOworKyAgICBBU1NFUlQocHJvdG8pOworKyAgICBhdXRvICpjb25zdCBi
b2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysgICAgYXV0byAq
Y29uc3QgbmV3UHJvdG8gPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZT4o
KnByb3RvKTsKKysgICAgR1VBUkQobmV3UHJvdG8pOworKyAgICBhdXRvICpjb25zdCBuZXdCb2R5
ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtQmxvY2s+KCpib2R5KTsKKysgICAgR1VBUkQobmV3Qm9k
eSk7CisrCisrICAgIGlmIChuZXdQcm90byAhPSBwcm90byB8fCBuZXdCb2R5ICE9IGJvZHkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdQ
cm90bywgbmV3Qm9keSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOworK30KKysKKytU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb25DaGlsZHJlbigKKysgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZu
b2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2woKTsKKysg
ICAgQVNTRVJUKHN5bWJvbCk7CisrCisrICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRyYXZl
cnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisrICAgIEdVQVJEKG5ld1N5bWJvbCk7
CisrCisrICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbmV3IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihuZXdTeW1ib2wsIG5vZGUu
aXNQcmVjaXNlKCksIG5vZGUuZ2V0TGluZSgpKTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5v
ZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VMb29wQ2hp
bGRyZW4oVEludGVybUxvb3AgJm5vZGUpCisreworKyAgICBjb25zdCBUTG9vcFR5cGUgbG9vcFR5
cGUgPSBub2RlLmdldFR5cGUoKTsKKysKKysgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0
SW5pdCgpOworKyAgICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysg
ICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICBhdXRvICpj
b25zdCBib2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisrICAgICAgICBjYXNl
IFRMb29wVHlwZTo6RUxvb3BEb1doaWxlOgorKyAgICAgICAgICAgIEFTU0VSVChjb25kKTsKKysg
ICAgICAgICAgICBBU1NFUlQoIWluaXQgJiYgIWV4cHIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFu
eUFzPFRJbnRlcm1CbG9jaz4oKmJvZHkpOworKyAgICBHVUFSRChuZXdCb2R5KTsKKysgICAgVElu
dGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRyOworKyAgICBpZiAoaW5pdCkKKysgICAgeworKyAg
ICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5pdCwgbmV3SW5pdCkpOworKyAgICB9CisrICAg
IFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7
CisrICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0K
KysgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gbnVsbHB0cjsKKysgICAgaWYgKGV4cHIpCisr
ICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmV4cHIsIG5ld0V4cHIpKTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld0NvbmQgIT0gY29uZCB8fCBu
ZXdFeHByICE9IGV4cHIgfHwgbmV3Qm9keSAhPSBib2R5KQorKyAgICB7CisrICAgICAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpF
TG9vcEZvcjoKKysgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgICAg
IEdVQVJEKG5ld0NvbmQgJiYgbmV3Qm9keSk7CisrICAgICAgICAgICAgICAgIEdVQVJEKCFuZXdJ
bml0ICYmICFuZXdFeHByKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1Mb29wKGxvb3BUeXBlLCBuZXdJbml0LCBuZXdDb25k
LCBuZXdFeHByLCBuZXdCb2R5KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQor
KworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbihU
SW50ZXJtQnJhbmNoICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0
RXhwcmVzc2lvbigpOworKworKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOwor
KyAgICBpZiAoZXhwcikKKysgICAgeworKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50
ZXJtVHlwZWQ+KCpleHByLCBuZXdFeHByKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0V4cHIg
IT0gZXhwcikKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQnJhbmNoKG5vZGUu
Z2V0Rmxvd09wKCksIG5ld0V4cHIpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKQorK3sK
KysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUHJlKFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpCisreworKyAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJt
UmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFRlcm5hcnlQcmUoVEludGVybVRlcm5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0
dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRMb29wUHJlKFRJbnRlcm1Mb29wICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
QnJhbmNoUHJlKFRJbnRlcm1CcmFuY2ggJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysK
KytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25QcmUoCisrICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKKyt7
CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN5bWJv
bFBvc3QoVEludGVybVN5bWJvbCAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBv
c3QoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBu
b2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChU
SW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUp
CisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdChUSW50ZXJtVGVybmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXp6bGVQ
b3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0SWZFbHNlUG9zdChUSW50ZXJtSWZFbHNl
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKQorK3sKKysgICAg
cmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2Fz
ZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisr
UG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdChUSW50ZXJtTG9vcCAmbm9k
ZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEJyYW5jaFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0
aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsK
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1Bvc3QoVEludGVy
bUJsb2NrICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2Rl
KQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorKyAgICBUSW50
ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9k
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi4zMDk3ZTQwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oCitAQCAtMCwwICsxLDMyOCBAQAor
Ky8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9J
TlRFUk1SRUJVSUxEX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lO
VEVSTVJFQlVJTERfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvTm9kZVR5cGUuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gV2Fsa3MgdGhl
IHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKysvLyBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJl
IGRlcml2ZWQgd2l0aCBvdmVycmlkZGVuIHZpc2l0WFhYIGZ1bmN0aW9ucy4KKysvLworKy8vIEVh
Y2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlzaXQgcGFyYW1ldGVy
IHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisrLy8gZXhhY3RseSBvbmNlLCByZWdhcmRs
ZXNzIG9mIChwcmVWaXNpdCkgb3IgKHBvc3RWaXNpdCkgdmFsdWVzLgorKworKy8vIEVhY2ggdmlz
aXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZlcyBhcyBmb2xs
b3dzOgorKy8vICAgICogSWYgKHByZVZpc2l0KToKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlz
aXRlZCBiZWZvcmUgY2hpbGRyZW4gYXJlIHRyYXZlcnNlZC4KKysvLyAgICAgIC0gVGhlIHJldHVy
bmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUgcmV0dXJu
ZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisrLy8gICAgICAgIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorKy8vICAgICAgLSBJZiBtdWx0aXBsZSBub2RlcyBhcmUgcmV0dXJuZWQsIGNoaWxkcmVuIGFu
ZCBwb3N0IHZpc2l0cyBvZiB0aGUgcmV0dXJuZWQgbm9kZXMgYXJlIG5vdAorKy8vICAgICAgICBw
cmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKysvLyAgICAq
IElmIChjaGlsZFZpc2l0KQorKy8vICAgICAgLSBJZiBhbnkgbmV3IGNoaWxkcmVuIGFyZSByZXR1
cm5lZCwgdGhlIG5vZGUgaXMgYXV0b21hdGljYWxseSByZWJ1aWx0IHdpdGggdGhlIG5ldyBjaGls
ZHJlbgorKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKysvLyAgICAgIC0gRGVwZW5kaW5n
IG9uIHRoZSB0eXBlIG9mIHRoZSBub2RlLCBudWxsIGNoaWxkcmVuIG1heSBiZSBkaXNjYXJkZWQu
CisrLy8gICAgICAtIElsbC10eXBlZCBjaGlsZHJlbiBjYXVzZSByZWJ1aWxkIGVycm9ycy4gSWxs
LXR5cGVkIG1lYW5zIHRoZSBub2RlIHRvIGF1dG9tYXRpY2FsbHkgcmVidWlsZAorKy8vICAgICAg
ICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRz
IGNvbnN0cnVjdG9yLgorKy8vICAgICAgLSBPbmx5IGluc3RhbmNlcyBvZiBUSW50ZXJtQWdncmVn
YXRlQmFzZSBjYW4gYWNjZXB0IE11bHRpIHJlc3VsdHMgZm9yIGFueSBvZiBpdHMgY2hpbGRyZW4u
CisrLy8gICAgICAgIElmIHN1cHBsaWVkLCB0aGUgbm9kZXMgYXJlIHNwbGljZWQgY2hpbGRyZW4g
YXQgdGhlIHNwb3Qgb2YgdGhlIG9yaWdpbmFsIGNoaWxkLgorKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlzaXRlZCBhZnRlciBhbnkgY2hpbGRyZW4gYXJl
IHRyYXZlcnNlZC4KKysvLyAgICAgIC0gT25seSBhZnRlciBzdWNoIGEgcmVidWlsZCAob3IgbGFj
ayB0aGVyZW9mKSwgdGhlIHBvc3QtdmlzaXQgaXMgcGVyZm9ybWVkLgorKy8vCisrLy8gTm9kZXMg
aW4gdmlzaXQgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIGluIHBsYWNlLCBp
bmNsdWRpbmcgVEludGVybUFnZ3JlZ2F0ZUJhc2UKKysvLyBjaGlsZCBzZXF1ZW5jZXMuCisrLy8K
KysvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIHRoZSB2aXNpdFhYWCBmdW5j
dGlvbnMgc3VwcG9ydCBmdWxsIHByZSBhbmQgcG9zdCB0cmF2ZXJzYWwKKysvLyB3aXRob3V0IG1v
ZGlmeWluZyB0aGUgdmlzaXRlZCBub2Rlcy4KKysvLworK2NsYXNzIFRJbnRlcm1SZWJ1aWxkIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCisreworKworKyAgICBlbnVtIGNsYXNzIEFjdGlvbgorKyAgICB7
CisrICAgICAgICBSZXBsYWNlU2luZ2xlLAorKyAgICAgICAgUmVwbGFjZU11bHRpLAorKyAgICAg
ICAgRHJvcCwKKysgICAgICAgIEZhaWwsCisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIHN0
cnVjdCBGYWlsCisrICAgIHt9OworKworKyAgICBlbnVtIFZpc2l0Qml0cyA6IHNpemVfdAorKyAg
ICB7CisrICAgICAgICAvLyBObyBiaXRzIGFyZSBzZXQuCisrICAgICAgICBFbXB0eSA9IDB1LAor
KworKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICAgICAgQ2hpbGRyZW4gPSAxdSA8PCAwdSwKKysKKysgICAgICAgIC8vIEFsbG93IHBvc3Qg
dmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKysgICAgICAgIFBvc3QgPSAxdSA8PCAxdSwKKysKKysg
ICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlmIHRoZSByZXR1cm5lZCBu
b2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorKyAgICAgICAgQ2hpbGRyZW5S
ZXF1aXJlc1NhbWUgPSAxdSA8PCAydSwKKysKKysgICAgICAgIC8vIElmIChQb3N0KSBiaXQsIG9u
bHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IG5vZGUuCisrICAgICAgICBQb3N0UmVxdWlyZXNTYW1lID0gMXUgPDwgM3UsCisrCisrICAgICAg
ICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1aXJlc1NhbWUs
CisrICAgICAgICBOZWl0aGVyICAgICAgPSBFbXB0eSwKKysgICAgICAgIEJvdGggICAgICAgICA9
IENoaWxkcmVuIHwgUG9zdCwKKysgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBSZXF1aXJl
U2FtZSwKKysgICAgfTsKKysKKysgIHByaXZhdGU6CisrICAgIHN0cnVjdCBOb2RlU3RhY2tHdWFy
ZDsKKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIHN0cnVjdCBDb25zTGlzdAor
KyAgICB7CisrICAgICAgICBUIHZhbHVlOworKyAgICAgICAgQ29uc0xpc3Q8VD4gKnRhaWw7Cisr
ICAgIH07CisrCisrICAgIGNsYXNzIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgQmFzZVJl
c3VsdChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworKyAgICAgICAgQmFzZVJlc3VsdCAm
b3BlcmF0b3I9KGNvbnN0IEJhc2VSZXN1bHQgJikgPSBkZWxldGU7CisrCisrICAgICAgcHVibGlj
OgorKyAgICAgICAgQmFzZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpID0gZGVmYXVsdDsKKysg
ICAgICAgIEJhc2VSZXN1bHQoQmFzZVJlc3VsdCAmb3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1v
dmUgY29uc3RydWN0b3IgaW1wbHMKKysgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5v
ZGUsIFZpc2l0Qml0cyB2aXNpdCk7CisrICAgICAgICBCYXNlUmVzdWx0KFRJbnRlcm1Ob2RlICpu
b2RlLCBWaXNpdEJpdHMgdmlzaXQpOworKyAgICAgICAgQmFzZVJlc3VsdChudWxscHRyX3QpOwor
KyAgICAgICAgQmFzZVJlc3VsdChGYWlsKTsKKysgICAgICAgIEJhc2VSZXN1bHQoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB2b2lkIG1vdmVBc3NpZ25J
bXBsKEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBs
cworKworKyAgICAgICAgc3RhdGljIEJhc2VSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVy
bU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4K
KysgICAgICAgIHN0YXRpYyBCYXNlUmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBu
b2Rlc0VuZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiBub2RlczsKKysgICAgICAgICAgICBmb3IgKEl0ZXIgbm9kZXNDdXJyID0gbm9kZXNCZWdp
bjsgbm9kZXNDdXJyICE9IG5vZGVzRW5kOyArK25vZGVzQ3VycikKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vZGVzLnB1c2hfYmFjaygqbm9kZXNDdXJyKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7CisrICAgICAgICB9Cisr
CisrICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0OworKyAgICAgICAgYm9vbCBpc0Ryb3AoKSBj
b25zdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpzaW5nbGUoKSBjb25zdDsKKysgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICptdWx0aSgpIGNvbnN0OworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIEFjdGlvbiBtQWN0aW9uOworKyAgICAgICAgVmlzaXRCaXRzIG1W
aXNpdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICptU2luZ2xlOworKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworKyAgICB9OworKworKyAgcHVibGljOgorKyAgICBj
bGFzcyBQcmVSZXN1bHQgOiBwcml2YXRlIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworKworKyAgICAgIHB1YmxpYzoKKysgICAgICAgIFBy
ZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisrICAgICAgICBQcmVSZXN1bHQoVEludGVybU5v
ZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKysg
ICAgICAgIFByZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlz
aXRCaXRzOjpCb3RoV2hlblNhbWUpOworKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAv
LyBVc2VkIHRvIGRyb3AgYSBub2RlLgorKyAgICAgICAgUHJlUmVzdWx0KEZhaWwpOyAgICAgICAv
LyBVc2VkIHRvIHNpZ25hbCBmYWlsdXJlLgorKworKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJl
UmVzdWx0ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShzdGQ6
OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorKyAgICAgICAgc3RhdGljIFBy
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKG5vZGVzQmVnaW4sIG5vZGVz
RW5kKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRHJvcDsK
KysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKysgICAgICAgIHVzaW5nIEJhc2VS
ZXN1bHQ6Om11bHRpOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6c2luZ2xlOworKworKyAg
ICAgIHByaXZhdGU6CisrICAgICAgICBQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysg
ICAgfTsKKysKKysgICAgY2xhc3MgUG9zdFJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorKyAg
ICB7CisrICAgICAgICBmcmllbmQgY2xhc3MgVEludGVybVJlYnVpbGQ7CisrCisrICAgICAgcHVi
bGljOgorKyAgICAgICAgUG9zdFJlc3VsdChQb3N0UmVzdWx0ICYmb3RoZXIpOworKyAgICAgICAg
UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSk7CisrICAgICAgICBQb3N0UmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlKTsKKysgICAgICAgIFBvc3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQg
dG8gZHJvcCBhIG5vZGUKKysgICAgICAgIFBvc3RSZXN1bHQoRmFpbCk7ICAgICAgIC8vIFVzZWQg
dG8gc2lnbmFsIGZhaWx1cmUuCisrCisrICAgICAgICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0
ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFBvc3RSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gQmFzZVJlc3VsdDo6TXVsdGkoc3RkOjptb3ZlKG5vZGVzKSk7CisrICAgICAgICB9CisrCisr
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KKysgICAgICAgIHN0YXRpYyBQb3N0UmVz
dWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQp
OworKyAgICAgICAgfQorKworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworKyAg
ICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNGYWlsOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3Vs
dDo6bXVsdGk7CisrICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisrCisrICAgICAg
cHJpdmF0ZToKKysgICAgICAgIFBvc3RSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysgICAg
fTsKKysKKysgIHB1YmxpYzoKKysgICAgVEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxl
ciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0VmlzaXQpOworKworKyAgICB2aXJ0dWFsIH5USW50
ZXJtUmVidWlsZCgpOworKworKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisrICAgIC8vIHJvb3QsIHRoZSByb290IG5vZGUncyBjaGlsZHJlbiBiZWNvbWUgdGhhdCBvZiB0
aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlCisrICAgIC8vIG9j
Y3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJs
b2NrICZyb290KTsKKysKKysgIHByb3RlY3RlZDoKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlz
aXRTeW1ib2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0
IHZpc2l0Q29uc3RhbnRVbmlvblByZShUSW50ZXJtQ29uc3RhbnRVbmlvbiAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9j
ZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VW5hcnlQcmUoVEludGVybVVuYXJ5ICZub2RlKTsK
KysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9k
ZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFy
eSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0U3dpenpsZVByZShUSW50ZXJt
U3dpenpsZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0SWZFbHNlUHJlKFRJ
bnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFBy
ZShUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDYXNl
UHJlKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRMb29w
UHJlKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFu
Y2hQcmUoVEludGVybUJyYW5jaCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKysgICAgdmlydHVhbCBQ
cmVSZXN1bHQgdmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0R2xv
YmFsUXVhbGlmaWVyRGVjbGFyYXRpb25QcmUoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKTsKKysKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChU
SW50ZXJtU3ltYm9sICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q29uc3Rh
bnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpOworKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90
eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKTsKKysgICAgdmly
dHVhbCBQb3N0UmVzdWx0IHZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7
CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVy
bVN3aXp6bGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0
KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRTd2l0
Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlz
aXRDYXNlUG9zdChUSW50ZXJtQ2FzZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2
aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0
IHZpc2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0
UmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUp
OworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpOworKyAgICB2aXJ0dWFs
IFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKysKKysgICAgLy8gQ2FuIGJlIHVzZWQg
dG8gcmVidWlsZCBhIHNwZWNpZmljIG5vZGUgZHVyaW5nIGEgdHJhdmVyc2FsLiBVc2VmdWwgZm9y
IGZpbmUgY29udHJvbCBvZgorKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICBBTkdMRV9OT19ESVNDQVJEIFBvc3RSZXN1bHQgcmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBh
IG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAg
ICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBp
ZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZElu
UGxhY2UoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBw
cm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0
aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAgICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5v
ZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdM
RV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKysK
KysgICAgLy8gUmVidWlsZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5v
ZGUgd291bGQgYmUgcmV0dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisrICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisrICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkSW5QbGFjZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworKworKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3Ig
YmVsb3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0
aW9uIHRoYXQgZW5jbG9zZXMKKysgICAgLy8gdGhlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGUuIChU
aGlzIHJldHVybnMgbnVsbCBpZiBhdCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuKQorKyAg
ICBjb25zdCBURnVuY3Rpb24gKmdldFBhcmVudEZ1bmN0aW9uKCkgY29uc3Q7CisrCisrICAgIFRJ
bnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQgPSAwKSBjb25zdDsKKysKKysg
IHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2VJbXBsKE5vZGUgJm5vZGUpOworKworKyAgICBQb3N0
UmVzdWx0IHRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE5vZGU+CisrICAgIE5vZGUgKnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5v
ZGUpOworKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKysgICAgYm9vbCB0cmF2ZXJz
ZUFueUFzKFRJbnRlcm1Ob2RlICZub2RlLCBOb2RlIComb3V0KTsKKysKKysgICAgUHJlUmVzdWx0
IHRyYXZlcnNlUHJlKFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpOworKyAgICBUSW50ZXJtTm9k
ZSAqdHJhdmVyc2VDaGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysg
ICAgUG9zdFJlc3VsdCB0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgbm9kZVR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysKKysgICAgYm9vbCB0cmF2
ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9kZSk7Cisr
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZu
b2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oVEludGVybUJp
bmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbihU
SW50ZXJtVGVybmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVN3aXp6bGVD
aGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJz
ZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAq
dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgVEludGVy
bU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlTG9vcENoaWxkcmVuKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5jaCAmbm9kZSk7
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4oVEludGVybURl
Y2xhcmF0aW9uICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmxvY2tDaGlsZHJl
bihUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uQ2hpbGRyZW4oCisrICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJm5vZGUpOworKworKyAgcHJvdGVjdGVkOgorKyAgICBUQ29tcGlsZXIgJm1Db21waWxlcjsK
KysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrICAgIGNvbnN0IFRGdW5jdGlvbiAq
bVBhcmVudEZ1bmMgPSBudWxscHRyOworKyAgICBHZXROb2RlVHlwZSBnZXROb2RlVHlwZTsKKysK
KysgIHByaXZhdGU6CisrICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG1Ob2RlU3RhY2t7bnVs
bHB0ciwgbnVsbHB0cn07CisrICAgIGJvb2wgbVByZVZpc2l0OworKyAgICBib29sIG1Qb3N0Vmlz
aXQ7CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi5hNTllNWFmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUuaAorQEAgLTAsMCArMSwxNTUgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2Uu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrZW51bSBjbGFzcyBOb2RlVHlwZQorK3sKKysg
ICAgVW5rbm93biwKKysgICAgU3ltYm9sLAorKyAgICBDb25zdGFudFVuaW9uLAorKyAgICBGdW5j
dGlvblByb3RvdHlwZSwKKysgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorKyAgICBVbmFyeSwK
KysgICAgQmluYXJ5LAorKyAgICBUZXJuYXJ5LAorKyAgICBTd2l6emxlLAorKyAgICBJZkVsc2Us
CisrICAgIFN3aXRjaCwKKysgICAgQ2FzZSwKKysgICAgRnVuY3Rpb25EZWZpbml0aW9uLAorKyAg
ICBBZ2dyZWdhdGUsCisrICAgIEJsb2NrLAorKyAgICBHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
biwKKysgICAgRGVjbGFyYXRpb24sCisrICAgIExvb3AsCisrICAgIEJyYW5jaCwKKyt9OworKwor
Ky8vIFRoaXMgaXMgYSBmdW5jdGlvbiBsaWtlIG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24g
dGhhdCBzdGFjayBhbGxvY2F0ZXMgdGhpcyBiZWNhdXNlCisrLy8gVEludGVybVRyYXZlcnNlciBp
cyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1Y3QuCisrY2xhc3MgR2V0Tm9kZVR5cGUgOiBwcml2
YXRlIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICAgIE5vZGVUeXBlIG5vZGVUeXBlOworKworKyAg
cHVibGljOgorKyAgICBHZXROb2RlVHlwZSgpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxz
ZSwgZmFsc2UpIHt9CisrCisrICAgIE5vZGVUeXBlIG9wZXJhdG9yKCkoVEludGVybU5vZGUgJm5v
ZGUpCisrICAgIHsKKysgICAgICAgIG5vZGUudmlzaXQoVmlzaXQ6OlByZVZpc2l0LCB0aGlzKTsK
KysgICAgICAgIHJldHVybiBub2RlVHlwZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBO
b2RlVHlwZTo6U3ltYm9sOyB9CisrCisrICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q29uc3Rh
bnRVbmlvbjsgfQorKworKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGUoVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0g
Tm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworKyAgICB9CisrCisrICAgIHZvaWQgdmlzaXRQ
cmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpQcmVwcm9jZXNzb3JE
aXJlY3RpdmU7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRl
cm1Td2l6emxlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5
cGU6OlN3aXp6bGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9v
bCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCaW5hcnk7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkg
Kikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VW5hcnk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5h
cnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OlRlcm5hcnk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpJZkVsc2U7CisrICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNp
dCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9
IE5vZGVUeXBlOjpTd2l0Y2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1DYXNlICopIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkNhc2U7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBu
b2RlVHlwZSA9IE5vZGVUeXBlOjpGdW5jdGlvbkRlZmluaXRpb247CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVU
eXBlOjpBZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg
Ym9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgb3ZlcnJpZGUKKysgICAgewor
KyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6QmxvY2s7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
KFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysg
ICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb247CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6RGVjbGFyYXRpb247CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
Okxvb3A7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCcmFuY2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5j
cHAKK2luZGV4IDM0NjQ3MGUuLjU4MmRkYzcgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci91dGlsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAK
K0BAIC04MDQsNiArODA0LDEwIEBAIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1dCBv
dXRwdXQpCisgeworICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VUUFVUOwor
IH0KKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorK3sK
KysgICAgcmV0dXJuIG91dHB1dCA9PSBTSF9NU0xfTUVUQUxfT1VUUFVUOworK30KKyAKKyBib29s
IElzSW5TaGFkZXJTdG9yYWdlQmxvY2soVEludGVybVR5cGVkICpub2RlKQorIHsKK2RpZmYgLS1n
aXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmgKK2luZGV4IDUzZWU3NTUuLmY5YWU5YmIgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci91dGlsLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuaAorQEAgLTc3LDYgKzc3LDcgQEAgYm9vbCBJc091dHB1dEdMU0woU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KTsKKyBib29sIElzT3V0cHV0SExTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOworIGJv
b2wgSXNPdXRwdXRWdWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyBib29sIElzT3V0cHV0
TWV0YWwoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3Qo
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyAKKyBib29sIElzSW5TaGFkZXJTdG9yYWdlQmxvY2so
VEludGVybVR5cGVkICpub2RlKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitpbmRleCBm
NzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAorLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5m
by5jcHAKKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitAQCAtNDcsNiAr
NDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikKKyAgICAgICAg
ICAgICByZXR1cm4gIlZpdmFudGUiOworICAgICAgICAgY2FzZSBrVmVuZG9ySURfVk1XYXJlOgor
ICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKKysgICAgICAgIGNhc2Uga1ZlbmRvcklEX0Fw
cGxlOgorKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOworICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2ZW5kb3IpICsg
IikiOworICAgICB9CitAQCAtMTYwLDYgKzE2MiwxMSBAQCBib29sIElzVml2YW50ZShWZW5kb3JJ
RCB2ZW5kb3JJZCkKKyAgICAgcmV0dXJuIHZlbmRvcklkID09IGtWZW5kb3JJRF9WaXZhbnRlOwor
IH0KKyAKKytib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpCisreworKyAgICByZXR1cm4g
dmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworK30KKysKKyBib29sIFBhcnNlQU1EQnJhaG1h
RHJpdmVyVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZl
cnNpb24pCisgeworICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rf
b2YoIjAxMjM0NTY3ODkiKTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKK2luZGV4IGFkMTc2OTguLjUw
OWExZTkgMTAwNjQ0CistLS0gYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKKysrKyBi
L3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaAorQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0
IFN5c3RlbUluZm8KKyAgICAgYm9vbCBpc0FNRFN3aXRjaGFibGUgPSBmYWxzZTsKKyAgICAgLy8g
T25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBsYXB0b3BzLgorICAgICBib29sIGlzTWFjU3dpdGNo
YWJsZSA9IGZhbHNlOworLSAgICAvLyBPbmx5IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdo
ZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCistICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5h
cHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3VuZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1p
b3NhcHBvbm1hYworLSAgICBib29sIGlzaU9TQXBwT25NYWMgPSBmYWxzZTsKKysgICAgLy8gT25s
eSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFjcyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3Qu
CisrICAgIGJvb2wgbmVlZHNFQUdMT25NYWMgICA9IGZhbHNlOworIAorICAgICAvLyBPbmx5IGF2
YWlsYWJsZSBvbiBBbmRyb2lkCisgICAgIHN0ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7
CitAQCAtOTksNiArOTgsNyBAQCBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAg
ID0gMHg4MDg2OworIGNvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEw
REU7CisgY29uc3RleHByIFZlbmRvcklEIGtWZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKKyBj
b25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZNV2FyZSAgID0gMHgxNWFkOworK2NvbnN0ZXhw
ciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUgICAgPSAweDEwNkI7CisgCisgLy8gS25vd24gbm9u
LVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVyZWQpIHZlbmRvciBJRHMKKyBjb25zdGV4cHIgVmVu
ZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAgID0gMHgxMDAwMTsKK0BAIC0xMjQsNiArMTI0LDcg
QEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRvcklEIHZlbmRvcklkKTsKKyBib29sIElzVmVyaVNp
bGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOworIGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9y
SWQpOworIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZlbmRvcklkKTsKKytib29sIElzQXBwbGUo
VmVuZG9ySUQgdmVuZG9ySWQpOworIAorIC8vIFVzZSBhIGhldXJpc3RpYyB0byBhdHRlbXB0IHRv
IGZpbmQgdGhlIEdQVSB1c2VkIGZvciAzRCBncmFwaGljcy4gU2V0cyBhY3RpdmVHUFVJbmRleCwK
KyAvLyBpc09wdGltdXMsIGFuZCBpc0FNRFN3aXRjaGFibGUuCitkaWZmIC0tZ2l0IGEvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbSBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fYXBwbGUubW0KK2luZGV4IGM3NzU2ZjYuLjE1MDBmZmYgMTAwNjQ0CistLS0gYS9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKysgYi9zcmMvZ3B1X2luZm9fdXRp
bC9TeXN0ZW1JbmZvX2FwcGxlLm1tCitAQCAtMSw1ICsxLDUgQEAKKyAvLworLS8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAt
LWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcCBiL3NyYy9ncHVfaW5m
b191dGlsL1N5c3RlbUluZm9faW9zLmNwcAoraW5kZXggMzIzYWYyYy4uN2E5ZDlmYSAxMDA2NDQK
Ky0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcAorKysrIGIvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCitAQCAtMTgsOCArMTgsMTYgQEAgbmFtZXNw
YWNlIGFuZ2xlCisgYm9vbCBHZXRTeXN0ZW1JbmZvX2lvcyhTeXN0ZW1JbmZvICppbmZvKQorIHsK
KyAgICAgeworKyAgICAgICAgLy8gICAgICAgIEdQVURldmljZUluZm8gZGV2aWNlSW5mbzsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLnZlbmRvcklkICAgICAgPSBrVmVuZG9ySURfQXBw
bGU7CisrICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlbmRvciAgPSAiQXBwbGUiOworKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVyc2lvbiA9ICIwLjAiOworKyAgICAg
ICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisrCisg
ICAgICAgICAvLyBUT0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVt
IHZlcnNpb24uCisgICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Cisr
ICAgICAgICAvLyBpbmZvLT5ncHVzLnB1c2hfYmFjayhkZXZpY2VJbmZvKTsKKyAgICAgfQorIAor
ICAgICByZXR1cm4gdHJ1ZTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX21hY29zLm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQoraW5k
ZXggYjFjZDA1NS4uYzVlMDM5ZSAxMDA2NDQKKy0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fbWFjb3MubW0KKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3Mu
bW0KK0BAIC0zMjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5m
byAqaW5mbykKKyAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CisgICAgIH0K
KyAgICAgCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmlu
ZWQoQU5HTEVfQ1BVX0FSTTY0KQorKyAgICBpbmZvLT5uZWVkc0VBR0xPbk1hYyA9IHRydWU7Cisr
I2VuZGlmCisrCisgICAgIHJldHVybiB0cnVlOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvQ2Fwcy5jcHAgYi9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKK2luZGV4IGY5MDY3ODMuLjc5
MzEwMDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKKysrKyBiL3NyYy9saWJB
TkdMRS9DYXBzLmNwcAorQEAgLTE3MCw4ICsxNzAsOCBAQCBzdGF0aWMgYm9vbCBHZXRGb3JtYXRT
dXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMsCisgeworICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVpcmVkRm9ybWF0c1NpemU7IGkrKykKKyAgICAgewor
LSAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJl
ZEZvcm1hdHNbaV0pOworIAorKyAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1
cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOworICAgICAgICAgaWYgKHJlcXVpcmVzVGV4
dHVyaW5nICYmICFjYXAudGV4dHVyYWJsZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CitAQCAtNDYyLDcgKzQ2Miw2IEBAIHN0YXRpYyBib29sIERldGVybWluZUFTVENM
RFJUZXh0dXJlU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMpCisgICAg
ICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSLCAgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIsCisgICAgICAgICBHTF9DT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMngxMl9LSFIsCisgICAgIH07CistCisgICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0
KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAgYi9z
cmMvbGliQU5HTEUvRGlzcGxheS5jcHAKK2luZGV4IGRkZTQzMzcuLjY1NzgxNGYgMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5
LmNwcAorQEAgLTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVu
dmlyb25tZW50KCkKKyAgICAgICAgIHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9OVUxM
X0FOR0xFOworICAgICB9CisgI2VuZGlmCisrI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX01FVEFM
KQorKyAgICBpZiAoYW5nbGVEZWZhdWx0RW52ID09ICJtZXRhbCIpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdMRTsKKysgICAgfQorIAor
KyNlbmRpZgorICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyAgICAgcmV0dXJuIEVH
TF9QTEFURk9STV9BTkdMRV9UWVBFX0QzRDExX0FOR0xFOworICNlbGlmIGRlZmluZWQoQU5HTEVf
RU5BQkxFX0QzRDkpCitAQCAtMTMyNSw2ICsxMzMxLDQ3IEBAIEVycm9yIERpc3BsYXk6Om1ha2VD
dXJyZW50KGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQsCisgICAgIHJldHVybiBOb0Vycm9y
KCk7CisgfQorIAorK0Vycm9yIERpc3BsYXk6Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhy
ZWFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1cmZh
Y2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsOjpTdXJmYWNlICpyZWFkU3VyZmFj
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7
CisrICAgIGlmICghbUluaXRpYWxpemVkKQorKyAgICB7CisrICAgICAgICByZXR1cm4gTm9FcnJv
cigpOworKyAgICB9CisrCisrICAgIGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQgPSB0aHJl
YWQtPmdldENvbnRleHQoKTsKKysgICAgaWYgKHByZXZpb3VzQ29udGV4dCkKKysgICAgeworKyAg
ICAgICAgQU5HTEVfVFJZKHByZXZpb3VzQ29udGV4dC0+dW5NYWtlQ3VycmVudCh0aGlzKSk7Cisr
ICAgIH0KKysKKysgICAgQU5HTEVfVFJZKG1JbXBsZW1lbnRhdGlvbi0+bWFrZUN1cnJlbnQodGhp
cywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSk7CisrCisrICAgIGlmIChjb250
ZXh0ICE9IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShjb250ZXh0LT5tYWtl
Q3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UpKTsKKysgICAgfQorKworKyAg
ICAvLyBUaWNrIGFsbCB0aGUgc2NyYXRjaCBidWZmZXJzIHRvIG1ha2Ugc3VyZSB0aGV5IGdldCBj
bGVhbmVkIHVwIGV2ZW50dWFsbHkgaWYgdGhleSBzdG9wIGJlaW5nCisrICAgIC8vIHVzZWQuCisr
ICAgIHsKKysgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1TY3JhdGNo
QnVmZmVyTXV0ZXgpOworKworKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZlciAmc2Nh
dGNoQnVmZmVyIDogbVNjcmF0Y2hCdWZmZXJzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisrICAgICAgICB9CisrICAgICAgICBmb3IgKGFuZ2xlOjpTY3Jh
dGNoQnVmZmVyICZ6ZXJvRmlsbGVkQnVmZmVyIDogbVplcm9GaWxsZWRCdWZmZXJzKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHplcm9GaWxsZWRCdWZmZXIudGljaygpOworKyAgICAgICAgfQor
KyAgICB9CisrCisrICAgIHJldHVybiBOb0Vycm9yKCk7CisrfQorKworIEVycm9yIERpc3BsYXk6
OnJlc3RvcmVMb3N0RGV2aWNlKCkKKyB7CisgICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3Ig
Y3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgr
KykKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5oIGIvc3JjL2xpYkFOR0xFL0Rp
c3BsYXkuaAoraW5kZXggNGFjNjMzNi4uMTZmYWYyYiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9EaXNwbGF5LmgKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKK0BAIC0xNjYsNiArMTY2
LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwgOiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKipvdXRDb250ZXh0KTsKKyAKKysgICAgRXJy
b3IgbWFrZUN1cnJlbnQoY29uc3QgVGhyZWFkICp0aHJlYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgIFN1cmZhY2UgKmRyYXdTdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNl
ICpyZWFkU3VyZmFjZSwKKysgICAgICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOworKworICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0IGdsOjpDb250ZXh0ICpjdXJyZW50
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlTWFwICZhdHRyaWJzLAorZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9Qcm9ncmFtLmggYi9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCitpbmRleCBmZTNl
YzI4Li5iYTkyNjdhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorKysrIGIv
c3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorQEAgLTI3Niw2ICsyNzYsMTEgQEAgY2xhc3MgUHJvZ3Jh
bVN0YXRlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHsKKyAgICAgICAgIHJldHVy
biBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOworICAg
ICB9CisrICAgIHZvaWQgc2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygKKysgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bUV4ZWN1dGFibGUtPnNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKysgICAgfQorICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxHTHNpemVpPiAmZ2V0VHJhbnNmb3JtRmVlZGJhY2tTdHJpZGVzKCkgY29uc3QKKyAgICAgewor
ICAgICAgICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMo
KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL3NyYy9s
aWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitpbmRleCA5NTA4MzJiLi40OGYzYmQyIDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitAQCAtMjI5LDYgKzIyOSwxMSBAQCBjbGFzcyBQcm9n
cmFtRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBhbmdsZTo6U3ViamVjdAorICAgICB7CisgICAg
ICAgICByZXR1cm4gbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7CisgICAgIH0KKysg
ICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKAorKyAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nPiBfbUxpbmtlZFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MpCisrICAgIHsKKysgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworKyAgICB9
CisgICAgIEdMaW50IGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7IH0KKyAgICAgR0x1aW50IGdldFVuaWZv
cm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAorICAgICB7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL1NoYWRlci5jcHAgYi9zcmMvbGliQU5HTEUvU2hhZGVy
LmNwcAoraW5kZXggNmY5YTc4YS4uOTYwMDZkOSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9T
aGFkZXIuY3BwCisrKysgYi9zcmMvbGliQU5HTEUvU2hhZGVyLmNwcAorQEAgLTY1NSw3ICs2NTUs
OSBAQCBzdGQ6OnN0cmluZyBTaGFkZXI6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01hcHBl
ZE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJnRmVgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgR0x1aW50IGZpZWxkSW5kZXggPSAwOworICAgICAgICAgICAgICAgICBjb25zdCBhdXRv
ICpmaWVsZCA9IHZhcnlpbmcuZmluZEZpZWxkKHRmVmFyeWluZ05hbWUsICZmaWVsZEluZGV4KTsK
Ky0gICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkICE9IG51bGxwdHIgJiYgIWZpZWxkLT5pc1N0
cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWVs
ZCkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICBBU1NF
UlQoIWZpZWxkLT5pc1N0cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKyAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhcnlpbmcubWFwcGVkTmFtZSArICIuIiArIGZpZWxkLT5tYXBwZWROYW1l
OworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
U3RhdGUuY3BwIGIvc3JjL2xpYkFOR0xFL1N0YXRlLmNwcAoraW5kZXggN2IwOGQ4ZC4uYTgwNDQ4
NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9TdGF0ZS5jcHAKK0BAIC02LDYgKzYsOSBAQAorIAorIC8vIFN0YXRlLmNwcDogSW1wbGVtZW50
cyB0aGUgU3RhdGUgY2xhc3MsIGVuY2Fwc3VsYXRpbmcgcmF3IEdMIHN0YXRlLgorIAorKy8vIE9s
ZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHdhcm5pbmcg
aGVyZS4KKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3Ry
dWN0b3JzIgorKworICNpbmNsdWRlICJsaWJBTkdMRS9TdGF0ZS5oIgorIAorICNpbmNsdWRlIDxz
dHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwIGIvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcAoraW5kZXggM2Y5ZjM3ZC4uNWU2MjhmMiAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9m
b3JtYXR1dGlscy5jcHAKK0BAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3Jt
YXRJbmZvTWFwIEJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCkKKyAgICAgYW5nbGU6OlN5c3Rl
bUluZm8gaW5mbzsKKyAgICAgaWYgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICAg
eworLSAgICAgICAgaWYgKGluZm8uaXNpT1NBcHBPbk1hYykKKysgICAgICAgIGlmIChpbmZvLm5l
ZWRzRUFHTE9uTWFjKQorICAgICAgICAgeworICAgICAgICAgICAgIC8vIFVzaW5nIE9wZW5HTEVT
LmZyYW1ld29yay4KKyAgICAgICAgICAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICBmYWxzZSwgIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNl
LCBSZXF1aXJlRVM8MiwgMD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmV2ZXJTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkKTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9k
cml2ZXJfdXRpbHMuY3BwCitpbmRleCBkNGM2YWVkLi4yMjM2NGIzIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCitAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0IE9TVmVyc2lvbiAmYikKKyAgICAgICAgICAg
IHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBiLm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24p
OworIH0KKyAKKy0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQor
IHsKKyAgICAgLy8gUmV0dXJuIGEgZGVmYXVsdCB2ZXJzaW9uCitAQCAtMjEzLDYgKzIxMywxNCBA
QCBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKKyB9CisgI2VuZGlmCisgCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpCisrewor
KyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKysgICAgcmV0dXJuIE9TVmVyc2lvbigw
LCAwLCAwKTsKKyt9CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTElO
VVgpCisgYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCAq
bWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCisgeworZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaAoraW5kZXggMjYxOWJjMy4uNzg3NzJhZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5oCitAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxl
KCkKKyAjZW5kaWYKKyB9CisgCisraW5saW5lIGJvb2wgSXNNYWMoKQorK3sKKysjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykK
KysgICAgcmV0dXJuIHRydWU7CisrI2Vsc2UKKysgICAgcmV0dXJuIGZhbHNlOworKyNlbmRpZgor
K30KKysKKyBpbmxpbmUgYm9vbCBJc0Z1Y2hzaWEoKQorIHsKKyAjaWYgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9GVUNIU0lBKQorQEAgLTIwNCw2ICsyMTMsOCBAQCBib29sIG9wZXJhdG9yPj0oY29u
c3QgT1NWZXJzaW9uICZhLCBjb25zdCBPU1ZlcnNpb24gJmIpOworIAorIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKTsKKyAKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpOworKworIE9TVmVy
c2lvbiBHZXRMaW51eE9TVmVyc2lvbigpOworIAorIGlubGluZSBib29sIElzQW5kcm9pZCgpCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19pb3MubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmU3YTg0NWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1tCitAQCAtMCwwICsxLDI4IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrCisrLy8gZHJpdmVyX3V0aWxzX2lvcy5tbSA6IHByb3ZpZGVzIGlvcy1z
cGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGRyaXZlci4KKysKKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmgiCisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIHJ4CisreworKworK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKKyt7CisrICAgIE9TVmVyc2lvbiByZXN1bHQ7CisrCisrICAgIE5TT3BlcmF0
aW5nU3lzdGVtVmVyc2lvbiB2ZXJzaW9uID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBv
cGVyYXRpbmdTeXN0ZW1WZXJzaW9uXTsKKysgICAgcmVzdWx0Lm1ham9yVmVyc2lvbiAgICAgICAg
ICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWFqb3JWZXJzaW9uKTsKKysgICAgcmVz
dWx0Lm1pbm9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWlub3JWZXJzaW9uKTsKKysgICAgcmVzdWx0LnBhdGNoVmVyc2lvbiAgICAgICAgICAgICAgPSBz
dGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ucGF0Y2hWZXJzaW9uKTsKKysKKysgICAgcmV0dXJuIHJl
c3VsdDsKKyt9CisrCisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfbWFjLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMu
bW0KK2luZGV4IDNhZjQ2ZmMuLjliNTNlYjcgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2Ry
aXZlcl91dGlsc19tYWMubW0KK0BAIC0xMyw2ICsxMyw3IEBACisgbmFtZXNwYWNlIHJ4Cisgewor
IAorKyNpZiAhVEFSR0VUX09TX0lPUworIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQorIHsK
KyAgICAgT1NWZXJzaW9uIHJlc3VsdDsKK0BAIC0yNCw1ICsyNSw1IEBAIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKQorIAorICAgICByZXR1cm4gcmVzdWx0OworIH0KKy0KKysjZW5kaWYKKyB9
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxl
LmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmM2E2ZDcKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oCitAQCAtMCww
ICsxLDExMiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0
LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorKworKyNpZm5kZWYgU09GVF9MSU5L
SU5HX0FQUExFX0hfCisrI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL3BsYXRmb3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQ
TEUpCisrCisrIyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKysjICAgIGltcG9ydCA8
ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKysjICAgIGltcG9ydCA8ZGxmY24uaD4KKysjICAgIGltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CisrCisrIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVz
c2lvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKysgICAgICAgIChleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICA/IHN0YXRpY19jYXN0PHZvaWQ+KDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgIDogKEZBVEFMKCkg
PDwgIlx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19G
SUxFX18gPDwgIjoiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICA8PCBfX0xJTkVfXyA8PCAi
KTogIiA8PCAjZXhwcmVzc2lvbiA8PCAiXG5cdCEgTWVzc2FnZTogIiA8PCBtZXNzYWdlKSkKKysK
KysjICAgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lO
IGV4dGVybiAiQyIgeworKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19FTkQgfQorKyMgICAgZWxz
ZQorKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19CRUdJTgorKyMgICAgICAgIGRlZmluZSBFWFRF
Uk5fQ19FTkQKKysjICAgIGVuZGlmCisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoZnJhbWV3b3JrKSBleHRlcm4gdm9pZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCk7Cisr
CisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoZnJhbWV3b3JrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgdm9p
ZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgIHN0YXRpYyB2b2lkICpmcmFtZXdvcmtMaWJyYXJ5ID0gTlVMTDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdvcmtM
aWJyYXJ5ID0gZGxvcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICIvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBSVExEX05PVyk7
IFwKKysgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xpYnJhcnksICJVbmFi
bGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBmcmFt
ZXdvcmtMaWJyYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJTktf
RlVOQ1RJT05fSEVBREVSKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJh
bWV0ZXJEZWNsYXJhdGlvbnMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgIEVYVEVSTl9DX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg
ICAgICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEVYVEVS
Tl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBl
IGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBlKCpzb2Z0TGluayMj
ZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAg
ICAgIFwKKysgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKysgICAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1
cm4gc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBT
T0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRU
eXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsICBcCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1l
d29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgICAgICBpbml0IyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwg
XnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25O
YW1lID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICAgICAgICAocmVzdWx0VHlwZSgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMp
ZGxzeW0oZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBz
b2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZU
X0xJTktfQ0xBU1NfSEVBREVSKGNsYXNzTmFtZSkgICAgXAorKyAgICAgICAgQGNsYXNzIGNsYXNz
TmFtZTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBleHRlcm4gQ2xhc3MgKCpn
ZXQjI2NsYXNzTmFtZSMjQ2xhc3MpKCk7IFwKKysgICAgICAgIGNsYXNzTmFtZSAqYWxsb2MjI2Ns
YXNzTmFtZSMjSW5zdGFuY2UoKTsgXAorKyAgICAgICAgaW5saW5lIGNsYXNzTmFtZSAqYWxsb2Mj
I2NsYXNzTmFtZSMjSW5zdGFuY2UoKSB7IHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNzKCkg
YWxsb2NdOyB9CisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0NMQVNTKGZyYW1ld29yaywgY2xh
c3NOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
IEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2Ns
YXNzTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisrICAgICAgICBDbGFzcyAoKmdldCMjY2xhc3NOYW1lIyNDbGFzcykoKSA9IGluaXQjI2Ns
YXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0YXRpYyBD
bGFzcyBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg
ICAgICBzdGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzIyNj
bGFzc05hbWU7IH0gICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
KyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdv
cmsjI0xpYnJhcnkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICAgIGNsYXNzIyNjbGFzc05hbWUgPSBvYmpjX2dldENs
YXNzKCNjbGFzc05hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFp
bGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisrICAgICAgICAgICAgICBnZXQjI2NsYXNzTmFtZSMj
Q2xhc3MgPSBjbGFzc05hbWUjI0Z1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVy
biBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBzdGF0aWMgY2xhc3NO
YW1lICBcCisrICAgICAgICAgICAgICAgICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNjbGFzc05hbWUj
I0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgcG9wIikKKysKKysjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1f
QVBQTEUpCisrCisrI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKK2luZGV4
IGRlMjE2ZmIuLjU1ZGNkOTAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
YXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9hcHBsZS9EaXNwbGF5QXBwbGVfYXBpLmNwcAorQEAgLTEwLDYgKzEwLDcgQEAKKyAjaWZuZGVm
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAjZGVmaW5l
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAKKysjaW5j
bHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL0Rpc3BsYXlJbXBsLmgiCisgCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
T1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitAQCAtMzMsMTEgKzM0
LDEwIEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVnbDo6RGlz
cGxheVN0YXRlICZzdGF0ZSkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICAgaWYg
KCFhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgIHsKKy0gICAgICAgIGltcGwgPSBu
dWxscHRyOworLSAgICAgICAgYnJlYWs7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
fQorIAorLSAgICBpZiAoaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoaW5mby5uZWVkc0VB
R0xPbk1hYykKKyAgICAgeworICAgICAgICAgcmV0dXJuIG5ldyByeDo6RGlzcGxheUVBR0woc3Rh
dGUpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTk1YzBmNgorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCitAQCAtMCwwICsxLDc3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrLy8gQ0dMRnVuY3Rpb25zLmNwcDogRXhwb3Np
bmcgdGhlIHNvZnQtbGlua2VkIENHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRm
b3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrU09GVF9MSU5LX0ZSQU1FV09SS19TT1VS
Q0UoT3BlbkdMKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50ICpucGl4KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJzLCBw
aXgsIG5waXgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dMQ3JlYXRlQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTEVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9y
bWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwaXgsIHNoYXJlLCBjdHgpKQorK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoCisrICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1h
dCwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBp
eF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKysg
ICAgKHBpeCwgcGl4X251bSwgYXR0cmliLCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NP
VVJDRShPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmog
Y3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTERlc3Ry
b3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgpLCAocGl4KSkK
KytTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRXJyb3JTdHJpbmcsIGNvbnN0
IGNoYXIgKiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05f
U09VUkNFKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0
eCksIChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xTZXRDdXJy
ZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRf
TElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMU2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBz
Y3JlZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9T
dXJmYWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAg
ICBHTGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdM
c2l6ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQs
CisrICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAg
ICBHTHVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktf
RlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xD
b250ZXh0T2JqIGN0eCksIChjdHgpKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoCisr
ICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisr
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVy
UHJvcGVydHkgcHJvcCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9w
LCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dMRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUmVu
ZGVyZXJJbmZvT2JqIHJlbmQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmQpKQor
K1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMUXVlcnlSZW5kZXJlckluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBD
R0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNr
LCBDR0xSZW5kZXJlckluZm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZGlzcGxheV9tYXNrLCByZW5kLCBucmVuZCkpCisrCisrI2VuZGlmICAv
LyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTZiODcxZQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMu
aAorQEAgLTAsMCArMSw4NCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIENHTEZ1bmN0aW9ucy5oOiBFeHBvc2luZyB0aGUg
c29mdC1saW5rZWQgQ0dMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8K
KysjZGVmaW5lIENHTF9GVU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3Jt
LmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrIyAgICBpbmNsdWRlIDxPcGVuR0wvT3BlbkdM
Lmg+CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19h
cHBsZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTCkKKysKKytTT0ZU
X0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IENHTENob29zZVBpeGVsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJy
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUgKmF0dHJpYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUGl4ZWxGb3Jt
YXRPYmogKnBpeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TENyZWF0ZUNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIENHTENvbnRl
eHRPYmogc2hhcmUsIENHTENvbnRleHRPYmogKmN0eCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAocGl4LCBzaGFyZSwgY3R4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKAorKyAg
ICBPcGVuR0wsCisrICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisrICAgIENHTEVycm9yLAor
KyAgICAoQ0dMUGl4ZWxGb3JtYXRPYmogcGl4LCBHTGludCBwaXhfbnVtLCBDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZSBhdHRyaWIsIEdMaW50ICp2YWx1ZSksCisrICAgIChwaXgsIHBpeF9udW0sIGF0
dHJpYiwgdmFsdWUpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisrICAgIE9wZW5HTCwK
KysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xSZW5k
ZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVyUHJvcGVydHkgcHJv
cCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCisr
U09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xF
cnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hF
QURFUihPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZv
cm1hdE9iaiBwaXgpLCAocGl4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAocmVuZCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTEVycm9yU3Ry
aW5nLCBjb25zdCBjaGFyICosIChDR0xFcnJvciBlcnJvciksIChlcnJvcikpCisrU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xR
dWVyeVJlbmRlcmVySW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRl
cmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChkaXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0eCks
IChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50
Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dM
U2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3Jl
ZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9TdXJm
YWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAgICBH
TGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdMc2l6
ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQsCisr
ICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAgICBH
THVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktfRlVO
Q1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250
ZXh0T2JqIGN0eCksIChjdHgpKQorKworKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKysjZW5k
aWYgIC8vIENHTF9GVU5DVElPTlNfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NvbnRleHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
b250ZXh0Q0dMLmNwcAoraW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKKy0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKK0BAIC0xMyw2ICsxMyw4IEBACisgI2lu
Y2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0Rpc3BsYXlDR0wuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKyBuYW1lc3BhY2Ug
cngKKyB7CisgCitAQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4Cisr
CisrI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCitpbmRleCBiNWE2MzFh
Li45MGU4MDU4IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNw
bGF5Q0dMLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wu
bW0KK0BAIC0yOSw2ICsyOSw4IEBACisgIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvV2luZG93U3VyZmFjZUNHTC5oIgorICMgICAgaW5jbHVkZSAicGxhdGZvcm0vUGxhdGZv
cm1NZXRob2RzLmgiCisgCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNlCisgeworIAorQEAgLTE2Myw5ICsxNjUsMTAg
QEAgc3RhdGljIHZvaWQgU2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9i
aiwKKyAgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OworIAorICAgICBhbmdsZTo6U3lzdGVtSW5m
byBpbmZvOworLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0ZW1JbmZvIHRvIHJldHVybiBm
YWxzZSBhbmQgdGhlcmVieQorLSAgICAvLyBjb250YWluIGluY29tcGxldGUgaW5mb3JtYXRpb24u
CistICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKysgICAgaWYgKCFhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisrICAgIHsKKysgICAgICAgIHJldHVybiBlZ2w6OkVn
bE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8u
IjsKKysgICAgfQorIAorICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgZWZmZWN0IG9m
IHRoZQorICAgICAvLyBkaXNhYmxlR1BVU3dpdGNoaW5nU3VwcG9ydCB3b3JrYXJvdW5kIGluIEZl
YXR1cmVzR0wuCitAQCAtNDQwLDcgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIFNldEdQVUJ5UmVnaXN0
cnlJRChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosCisgCisgYm9vbCBEaXNwbGF5Q0dMOjppc1Zh
bGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0g
ICAgTlNPYmplY3QgKmxheWVyID0gKF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBO
U09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7Cisg
ICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAK
K2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5t
bSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCitpbmRleCBh
Nzk1MDM3Li5jNTVhZTdmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGlzcGxheUVBR0wubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rp
c3BsYXlFQUdMLm1tCitAQCAtMjcsNiArMjcsOCBAQAorICMgICAgaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KKyAjICAgIGltcG9ydCA8ZGxmY24uaD4KKyAKKysjICAgIGltcG9ydCAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNl
CisgeworIAorQEAgLTY0LDkgKzY2LDEwIEBACisgICAgIG1FR0xEaXNwbGF5ID0gZGlzcGxheTsK
KyAKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgLy8gSXQncyBsZWdhbCBmb3Ig
R2V0U3lzdGVtSW5mbyB0byByZXR1cm4gZmFsc2UgYW5kIHRoZXJlYnkKKy0gICAgLy8gY29udGFp
biBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgorLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5m
bygmaW5mbyk7CisrICAgIGlmICghYW5nbGU6OkdldFN5c3RlbUluZm8oJmluZm8pKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8g
cXVlcnkgQU5HTEUncyBTeXN0ZW1JbmZvLiI7CisrICAgIH0KKyAKKyAgICAgbUNvbnRleHQgPSBb
YWxsb2NFQUdMQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElP
cGVuR0xFUzNdOworICAgICBpZiAobUNvbnRleHQgPT0gbnVsbHB0cikKK0BAIC0xMTMsNiArMTE2
LDcgQEAKKyAgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCisgICAgIHsKKyAgICAgICAgIFtn
ZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKysgICAgICAgIFtt
Q29udGV4dCByZWxlYXNlXTsKKyAgICAgICAgIG1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAg
IG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CisgICAgIH0KK0BAIC0yNzUsNyAr
Mjc5LDcgQEAKKyAKKyBib29sIERpc3BsYXlFQUdMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5h
dGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0gICAgTlNPYmplY3QgKmxheWVyID0g
KF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWlu
dGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CisgICAgIHJldHVybiBbbGF5ZXIgaXNL
aW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAKK0BAIC0zMTEsOSArMzE1LDggQEAK
KyAgICAgb3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0ICAgID0gdHJ1ZTsKKyAgICAg
b3V0RXh0ZW5zaW9ucy0+ZGV2aWNlUXVlcnkgICAgICAgICAgID0gdHJ1ZTsKKyAKKy0gICAgLy8g
Q29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGFucyBzZW1hcGhvcmVzIGNhbiBi
ZSBzaGFyZWQgZ2xvYmFsbHkKKysgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRl
eHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxh
eVRleHR1cmVTaGFyZUdyb3VwID0gdHJ1ZTsKKy0gICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxheVNl
bWFwaG9yZVNoYXJlR3JvdXAgPSB0cnVlOworIAorICAgICBvdXRFeHRlbnNpb25zLT5wb3dlclBy
ZWZlcmVuY2UgPSBmYWxzZTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9FQUdMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MjEy
NTEzCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysvLyBFQUdMRnVuY3Rpb25zLmg6
IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIEVB
R0xfRlVOQ1RJT05TX0hfCisrI2RlZmluZSBFQUdMX0ZVTkNUSU9OU19IXworKworKyNpbmNsdWRl
ICJjb21tb24vcGxhdGZvcm0uaCIKKysKKysjaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9T
KSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKKysgICAgKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FS
TTY0KSkKKysKKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorKyMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3Vy
ZmFjZS5oPgorKworKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtp
bmdfYXBwbGUuaCIKKysKKytTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0xFUykKKysK
KytTT0ZUX0xJTktfQ0xBU1NfSEVBREVSKEVBR0xDb250ZXh0KQorKworKyNlbmRpZiAgLy8gKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUND
QVRBTFlTVCkpIHx8CisrICAgICAgICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorKworKyNlbmRpZiAgLy8gQ0dMX0ZV
TkNUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VB
R0xGdW5jdGlvbnMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rp
b25zLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGIxZWI3MAorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0
aW9ucy5tbQorQEAgLTAsMCArMSwyNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIEVBR0xGdW5jdGlvbnMuY3BwOiBFeHBv
c2luZyB0aGUgc29mdC1saW5rZWQgRUFHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImNvbW1v
bi9wbGF0Zm9ybS5oIgorKworKyNpZiAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwgXAorKyAgICAoZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQor
KworKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisrIyAgICBpbXBvcnQgPE9wZW5HTEVT
L0VBR0xEcmF3YWJsZS5oPgorKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+
CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBs
ZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorKworK1NPRlRf
TElOS19DTEFTUyhPcGVuR0xFUywgRUFHTENvbnRleHQpCisrCisrI2VuZGlmICAvLyAoZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKSkgfHwKKysgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNU
KSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKIGRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNF
QUdMLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKIGlu
ZGV4IGVjZTIzNWEuLmFlMDIwN2IgMTAwNjQ0CiAtLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKQEAgLTMwMiw2MCArMjIwNTIsMTMxMTUgQEAgaW5kZXgg
ZWNlMjM1YS4uYWUwMjA3YiAxMDA2NDQKICAjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdh
YmxlLmg+CiAgIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4KICAKLS0jICAg
IGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAg
ICBpbmNsdWRlICJjb21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKy0jICAgIGluY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCisrIyAgICBpbmNsdWRlICJj
b21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKyAKKyBTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURF
UihPcGVuR0xFUykKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVuY3Rp
b25zRUFHTC5tbQoraW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KK0BAIC0xNCw3ICsxNCw3IEBACisg
IyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorICMgICAgaW1wb3J0IDxPcGVu
R0xFUy9FQUdMSU9TdXJmYWNlLmg+CisgCistIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9nbC9hcHBsZS9Tb2Z0TGlua2luZy5oIgorKyMgICAgaW5jbHVkZSAiY29tbW9uL2FwcGxlL1Nv
ZnRMaW5raW5nLmgiCisgCisgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMRVMpCisg
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3Vy
ZmFjZUVBR0wubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJm
YWNlRUFHTC5tbQoraW5kZXggZjE2YzNlNy4uZTMwOWE4NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbQorQEAgLTgz
LDggKzgzLDggQEAgaW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSB0eXBlKQorICAgICAgIG1XaWR0aCgwKSwKKyAgICAgICBtSGVpZ2h0KDAp
LAorICAgICAgIG1QbGFuZSgwKSwKKy0gICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUZvcm1hdEluZGV4KC0xKSwKKysgICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUFscGhhSW5pdGlhbGl6ZWQoZmFsc2UpCisgeworICAgICAvLyBLZWVwIHJlZmVyZW5jZSB0
byB0aGUgSU9TdXJmYWNlIHNvIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlIHBidWZm
ZXIgZXhpc3RzLgorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJl
cmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcAoraW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCitAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBH
ZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKyAKKyAjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgaWYgKGFuZ2xlOjpHZXRT
eXN0ZW1JbmZvKCZpbmZvKSAmJiAhaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoYW5nbGU6
OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLm5lZWRzRUFHTE9uTWFjKQorICAgICB7Cisg
ICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5jdGlvbnMpOworICAgICAg
ICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkgJiYgKm1heFN1cHBvcnRl
ZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCitpbmRleCBkNzBhZTU4Li42MTVkZDQ0IDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5j
cHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3Bw
CitAQCAtMjgxLDkgKzI4MSwxMSBAQCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVl
ZGJhY2tNYXJrZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
JnhmYk91dCkKKyB7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmln
aW5hbFNvdXJjZS5maW5kKGtYZmJEZWNsTWFya2VyKTsKKysgICAgQVNTRVJUKHhmYkRlY2xNYXJr
ZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNs
TWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJr
ZXIpOworIAorICAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNv
dXJjZS5maW5kKGtYZmJPdXRNYXJrZXIsIHhmYkRlY2xNYXJrZXJTdGFydCk7CisrICAgIEFTU0VS
VCh4ZmJPdXRNYXJrZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNp
emVfdCB4ZmJPdXRNYXJrZXJFbmQgPSB4ZmJPdXRNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtY
ZmJPdXRNYXJrZXIpOworIAorICAgICAvLyBUaGUgc2hhZGVyIGlzIHRoZSBmb2xsb3dpbmcgZm9y
bToKK0BAIC0zNjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11
bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFj
ZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyAqdmVydGV4U2hhZGVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJs
ZUluZm9NYXBPdXQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFy
bHlSZXR1cm4pCisgeworICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nPiAmdmFyeWluZ3MgPQorICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKK0BAIC00MTMsNiArNDE2LDEwIEBAIHZvaWQgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvCisgICAgICAgICAgICAgb3V0cHV0T2Zmc2V0ICs9IGluZm8uY29sdW1u
Q291bnQgKiBpbmZvLnJvd0NvdW50ICogdmFyeWluZy5zaXplKCk7CisgICAgICAgICB9CisgICAg
IH0KKysgICAgaWYgKGVhcmx5UmV0dXJuKQorKyAgICB7CisrICAgICAgICB4ZmJPdXQgKz0gInJl
dHVybjsiOworKyAgICB9CisgICAgIHhmYk91dCArPSAifVxuIjsKKyAKKyAgICAgKnZlcnRleFNo
YWRlciA9IFN1YnN0aXR1dGVUcmFuc2Zvcm1GZWVkYmFja01hcmtlcnMoKnZlcnRleFNoYWRlciwg
eGZiRGVjbCwgeGZiT3V0KTsKK0BAIC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xz
bGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisgICAgIHJldHVybiBzYW1wbGVyTmFtZTsKKyB9CisgCistc3RkOjpzdHJpbmcgR2V0WGZiQnVm
ZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKKy17CistICAgIHJldHVybiAieGZi
QnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7CistfQorLQorIHZvaWQgR2xzbGFuZ0dlblRyYW5z
Zm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAm
b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFj
ZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAorQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQg
R2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5n
U291cmNlT3B0aW9ucyAmb3B0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoYWRlckludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZv
TWFwT3V0KQorIHsKKyAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJp
YWJsZUluZm9NYXBPdXQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCwgZmFsc2UpOworIH0KKyAK
KyB2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMg
Jm9wdGlvbnMsCitAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0
aW9ucyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgfQorIAorK3N0ZDo6c3RyaW5n
IEdldFhmYkJ1ZmZlck5hbWUoY29uc3QgdWludDMyX3QgYnVmZmVySW5kZXgpCisreworKyAgICBy
ZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworK30KKysKKysKKyt2b2lkIEds
c2xhbmdBc3NpZ25Mb2NhdGlvbnMoR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAmcHJv
Z3JhbUV4ZWN1dGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpT
aGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsc2xh
bmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFjZUluZm8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFy
aWFibGVJbmZvTWFwT3V0KQorK3sKKysgICAgLy8gQXNzaWduIG91dHB1dHMgdG8gdGhlIGZyYWdt
ZW50IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50KSAmJgorKyAgICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hh
ZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKysgICAgeworKyAgICAgICAgQXNz
aWduT3V0cHV0TG9jYXRpb25zKHByb2dyYW1FeGVjdXRhYmxlLCBnbDo6U2hhZGVyVHlwZTo6RnJh
Z21lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKTsKKysgICAgfQorKworKyAgICAvLyBBc3Np
Z24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNo
YWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkgJiYKKysgICAgICAgIHByb2dyYW1F
eGVjdXRhYmxlLmhhc0xpbmtlZFNoYWRlclN0YWdlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgpKQor
KyAgICB7CisrICAgICAgICBBc3NpZ25BdHRyaWJ1dGVMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFi
bGUsIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFn
ZShnbDo6U2hhZGVyVHlwZTo6Q29tcHV0ZSkpCisrICAgIHsKKysgICAgICAgIC8vIEFzc2lnbiB2
YXJ5aW5nIGxvY2F0aW9ucy4KKysgICAgICAgIEFzc2lnblZhcnlpbmdMb2NhdGlvbnMob3B0aW9u
cywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKwor
KyAgICAgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5nZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzKCkuZW1wdHkoKSAmJgorKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFu
c2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6
VmVydGV4KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBc3NpZ25UcmFuc2Zvcm1GZWVkYmFj
a0V4dGVuc2lvblF1YWxpZmllcnMoCisrICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxl
LCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKysg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgQXNzaWduVW5pZm9ybUJpbmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFk
ZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlSW5mb01hcE91dCk7CisrICAgIEFzc2lnblRleHR1cmVCaW5kaW5ncyhvcHRpb25z
LCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKyAgICBBc3Np
Z25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5
cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVJbmZvTWFwT3V0KTsKKyt9CisrCisgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNl
KGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZy
ZXNvdXJjZXMsCitAQCAtMzQ2Miw3ICszNTE1LDggQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291
cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMoCisgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBwcm9ncmFtU3RhdGUsIHByb2dyYW1J
bnRlcmZhY2VJbmZvLCB2ZXJ0ZXhTb3VyY2UsCistICAgICAgICAgICAgICAgICAgICAmKCp2YXJp
YWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKysgICAgICAgICAgICAg
ICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisr
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4p
OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAoraW5kZXggMmJk
MmM2MS4uNjAyNDhjZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5n
X3dyYXBwZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3Jh
cHBlcl91dGlscy5oCitAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMKKyAgICAgYm9vbCBzdXBwb3J0c1RyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uID0gZmFsc2U7
CisgICAgIGJvb2wgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICA9IGZhbHNlOwor
ICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKysg
ICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuICAgICAgID0gZmFsc2U7CisgfTsK
KyAKKyB1c2luZyBTcGlydkJsb2IgPSBzdGQ6OnZlY3Rvcjx1aW50MzJfdD47CitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbiBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KK2luZGV4IDhjM2ZkMDUu
LjdiY2RlZDAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlv
bnNfZGF0YS5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNf
ZGF0YS5qc29uCitAQCAtNjcyLDYgKzY3Miw5IEBACisgICAgICJEMzJfRkxPQVRfUzhYMjRfVUlO
VCI6IHsKKyAgICAgICAiR0xfVU5TSUdORURfSU5UXzI0XzgiOiAiTG9hZEQyNFM4VG9EMzJGUzhY
MjQiLAorICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKysgICAg
fSwKKysgICAgIkQzMl9GTE9BVCI6IHsKKysgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWRE
MjRTOFRvRDMyRiIKKyAgICAgfQorICAgfSwKKyAgICJHTF9SMzJJIjogeworZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAor
aW5kZXggMjBlNzA2Zi4uMmVmMDFjYSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCitAQCAtNDQ2LDggKzQ0Niw3
IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfTE9TU1lfREVDT0RFX0VU
QzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9CCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgeworQEAgLTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09N
UFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQor
ICAgICB9CisgfQorIAorLUxvYWRJbWFnZUZ1bmN0aW9uSW5mbworLUNPTVBSRVNTRURfUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VO
T1JNX0JMT0NLKEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFf
UkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzMTIsOCArMTMxMCw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X0VUQzJfdG9fUjhHOEI4QThfVU5PUk1fU1JHQihHTGVudW0gdHlwZSkKKyAgICAg
fQorIH0KKyAKKy1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9E
RUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNX1NSR0JfQkxPQ0soCistICAgIEdMZW51
bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RF
Q09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkK
KyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTEzMjUsOCArMTMyMiw3IEBAIExv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCisgICAg
IH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25JbmZvCistQ09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VOT1JN
X1NSR0JfQkxPQ0soCistICAgIEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5H
TEVfdG9fQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTE1MTAsNiArMTUwNCwxOCBAQCBMb2FkSW1hZ2VGdW5j
dGlvbkluZm8gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JNX1g4X1VJTlQoR0xlbnVtIHR5
cGUpCisgICAgIH0KKyB9CisgCisrTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVO
VDI0X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkKKyt7CisrICAgIHN3aXRjaCAodHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisrICAgICAgICAgICAgcmV0dXJu
IExvYWRJbWFnZUZ1bmN0aW9uSW5mbyhMb2FkRDI0UzhUb0QzMkYsIHRydWUpOworKyAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAgICAgIHJldHVy
biBMb2FkSW1hZ2VGdW5jdGlvbkluZm8oVW5yZWFjaGFibGVMb2FkRnVuY3Rpb24sIHRydWUpOwor
KyAgICB9CisrfQorKworIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90
b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKK0BAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9u
c01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQorICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9TOF9V
SU5UOworICAgICAgICAgICAgICAgICBjYXNlIEZvcm1hdElEOjpEMjRfVU5PUk1fWDhfVUlOVDoK
KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5P
Uk1fWDhfVUlOVDsKKysgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUOgor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9B
VDsKKyAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6
CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZM
T0FUX1M4WDI0X1VJTlQ7CisgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0JVSUxELmduCitpbmRleCA4NjhjNDc2Li4wZDUwZDgxIDEwMDY0NAorLS0tIGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCisrKysgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KK0BAIC02LDcgKzYsNyBAQAorIAorIGltcG9ydCgiLi4v
Li4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCisgCistYXNzZXJ0KGlzX21hYykKKythc3NlcnQoaXNf
bWFjIHx8IGlzX2lvcykKKyBhc3NlcnQoYW5nbGVfZW5hYmxlX21ldGFsKQorIAorIF9tZXRhbF9i
YWNrZW5kX3NvdXJjZXMgPSBbCitAQCAtMjEsNiArMjEsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3Vy
Y2VzID0gWworICAgIkRpc3BsYXlNdGxfYXBpLmgiLAorICAgIkZyYW1lQnVmZmVyTXRsLmgiLAor
ICAgIkZyYW1lQnVmZmVyTXRsLm1tIiwKKysgICJJT1N1cmZhY2VTdXJmYWNlTXRsLmgiLAorKyAg
IklPU3VyZmFjZVN1cmZhY2VNdGwubW0iLAorICAgIlByb2dyYW1NdGwuaCIsCisgICAiUHJvZ3Jh
bU10bC5tbSIsCisgICAiUXVlcnlNdGwuaCIsCitAQCAtNTIsNiArNTQsOCBAQCBfbWV0YWxfYmFj
a2VuZF9zb3VyY2VzID0gWworICAgIm10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSIsCisgICAi
bXRsX2Zvcm1hdF91dGlscy5oIiwKKyAgICJtdGxfZm9ybWF0X3V0aWxzLm1tIiwKKysgICJtdGxf
Z2xzbGFuZ19tdGxfdXRpbHMuaCIsCisrICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKKyAg
ICJtdGxfZ2xzbGFuZ191dGlscy5oIiwKKyAgICJtdGxfZ2xzbGFuZ191dGlscy5tbSIsCisgICAi
bXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgiLAorQEAgLTY1LDEyICs2OSwxMSBAQCBfbWV0YWxf
YmFja2VuZF9zb3VyY2VzID0gWworICAgIm10bF91dGlscy5oIiwKKyAgICJtdGxfdXRpbHMubW0i
LAorICAgInNoYWRlcnMvY29uc3RhbnRzLmgiLAorLSAgInNoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aCIsCistICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisr
ICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIKKyBdCisgCisg
Y29uZmlnKCJhbmdsZV9tZXRhbF9iYWNrZW5kX2NvbmZpZyIpIHsKKy0gIGRlZmluZXMgPSBbICJB
TkdMRV9FTkFCTEVfTUVUQUwiIF0KKysgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwi
LCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCisgICBsZGZsYWdzID0gWworICAgICAiLXdl
YWtfZnJhbWV3b3JrIiwKKyAgICAgIk1ldGFsIiwKK0BAIC05NiwxMiArOTksMTYgQEAgYW5nbGVf
c291cmNlX3NldCgiYW5nbGVfbWV0YWxfYmFja2VuZCIpIHsKKyAgICAgIiR7YW5nbGVfcm9vdH06
bGliQU5HTEVfaGVhZGVycyIsCisgICBdCisgCistICBkZXBzID0gWyAiJHthbmdsZV9zcGlydl9j
cm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiIF0KKysgIGRlcHMgPSBbCisrICAgICIk
YW5nbGVfc3BpcnZfdG9vbHNfZGlyOnNwdnRvb2xzX3ZhbCIsCisrICAgICIke2FuZ2xlX3NwaXJ2
X2Nyb3NzX2Rpcn0vZ246c3BpcnZfY3Jvc3Nfc291cmNlcyIsCisrICBdCisgCisgICBvYmpjX2Zs
YWdzID0gWworICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAorICAgICAiLVdu
by11bmd1YXJkZWQtYXZhaWxhYmlsaXR5IiwKKyAgICAgIi1mbm8tb2JqYy1hcmMiLAorKyAgICAi
LVduby1leHRyYS1zZW1pLXN0bXQiLAorICAgXQorICAgY2ZsYWdzX29iamMgKz0gb2JqY19mbGFn
cworICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKK2luZGV4IDc2MjU0OWUuLjlmOWVjNmMgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaAorQEAgLTE1MiwxMCArMTUyLDE1IEBAIGNsYXNzIEJ1
ZmZlck10bCA6IHB1YmxpYyBCdWZmZXJJbXBsLCBwdWJsaWMgQnVmZmVySG9sZGVyTXRsCisgCisg
ICAgIENvbnZlcnNpb25CdWZmZXJNdGwgKmdldFVuaWZvcm1Db252ZXJzaW9uQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHQsIHNpemVfdCBvZmZzZXQpOworIAorKyAgICAvLyBOT1RFKGhxbGUpOiBJ
ZiB0aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhw
bGljaXRseQorKyAgICAvLyBjYWxsZWQuCisrICAgIHZvaWQgbWFya0NvbnZlcnNpb25CdWZmZXJz
RGlydHkoKTsKKysKKyAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1TdGF0ZS5nZXRTaXplKCkpOyB9CisgCisgICBwcml2YXRlOgorICAgICBhbmds
ZTo6UmVzdWx0IHNldERhdGFJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSk7CitAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xh
c3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwK
KyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3Qgc2l6ZSk7CisgCistICAgIHZvaWQgbWFya0NvbnZlcnNp
b25CdWZmZXJzRGlydHkoKTsKKy0KKyAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7
CisrCisgICAgIGJvb2wgY2xpZW50U2hhZG93Q29weURhdGFOZWVkU3luYyhDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKKyAgICAgdm9pZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250
ZXh0TXRsICpjb250ZXh0TXRsKTsKKyAgICAgdWludDhfdCAqc3luY0FuZE9idGFpblNoYWRvd0Nv
cHkoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgCisrICAgIC8vIENvbnZlbmllbnQgbWV0aG9k
CisrICAgIGNvbnN0IHVpbnQ4X3QgKmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93
Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKysgICAgfQorICAgICAvLyBDbGllbnQg
c2lkZSBzaGFkb3cgYnVmZmVyCisgICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7
CisgCisgICAgIC8vIEdQVSBzaWRlIGJ1ZmZlcnMgcG9vbAorICAgICBtdGw6OkJ1ZmZlclBvb2wg
bUJ1ZmZlclBvb2w7CisgCistICAgIC8vIEEgY2FjaGUgb2YgY29udmVydGVkIGJ1ZmZlciBkYXRh
LgorKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KKyAgICAgc3RkOjp2
ZWN0b3I8VmVydGV4Q29udmVyc2lvbkJ1ZmZlck10bD4gbVZlcnRleENvbnZlcnNpb25CdWZmZXJz
OworIAorICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENv
bnZlcnNpb25CdWZmZXJzOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9CdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1t
CitpbmRleCA2NGM3ZGU4Li44MDk2OTk2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5tbQorQEAgLTIzLDYgKzIzLDEwIEBACisgLy8gU3RhcnQgd2l0aCBhIGZhaXJs
eSBzbWFsbCBidWZmZXIgc2l6ZS4gV2UgY2FuIGluY3JlYXNlIHRoaXMgZHluYW1pY2FsbHkgYXMg
d2UgY29udmVydCBtb3JlIGRhdGEuCisgY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVu
dEFycmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKKyAKKysvLyBUaGUgbWF4IHNpemUg
dGhhdCB3ZSB3aWxsIHVzZSBidWZmZXIgcG9vbCBmb3IgZHluYW1pYyB1cGRhdGUuCisrLy8gSWYg
dGhlIGJ1ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUg
YnVmZmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCisrY29uc3RleHByIHNpemVfdCBrRHlu
YW1pY0J1ZmZlclBvb2xNYXhCdWZTaXplID0gMTI4ICogMTAyNDsKKysKKyB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorIGFuZ2xlOjpSZXN1bHQgR2V0Rmlyc3RMYXN0SW5kaWNlcyhjb25z
dCBJbmRleFR5cGUgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBjb3VudCwKK0BAIC0xMDUsNyArMTA5LDcgQEAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSkKKyB7CistICAgIHJldHVybiBzZXRE
YXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKysgICAgcmV0dXJu
IHNldERhdGFJbXBsKGNvbnRleHQsIHRhcmdldCwgZGF0YSwgaW50ZW5kZWRTaXplLCB1c2FnZSk7
CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXRTdWJEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorQEAgLTE2NCw3ICsxNjgsOCBAQAorIHsKKyAgICAgaWYgKGFjY2Vz
cyAmIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQpCisgICAgIHsKKy0gICAgICAgIEFOR0xF
X1RSWShzZXREYXRhSW1wbChjb250ZXh0LCBudWxscHRyLCBzaXplKCksIG1TdGF0ZS5nZXRVc2Fn
ZSgpKSk7CisrICAgICAgICBBTkdMRV9UUlkoc2V0RGF0YUltcGwoY29udGV4dCwgZ2w6OkJ1ZmZl
ckJpbmRpbmc6OkludmFsaWRFbnVtLCBudWxscHRyLCBzaXplKCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgfQorIAorICAgICBpZiAo
bWFwUHRyKQorQEAgLTM5NSw2ICs0MDAsNyBAQAorIH0KKyAKKyBhbmdsZTo6UmVzdWx0IEJ1ZmZl
ck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVz
YWdlKQorQEAgLTQxMyw2ICs0MTksMTMgQEAKKyAKKyAgICAgc2l6ZV90IGFkanVzdGVkU2l6ZSA9
IHN0ZDo6bWF4PHNpemVfdD4oMSwgaW50ZW5kZWRTaXplKTsKKyAKKysgICAgLy8gRW5zdXJlcyBu
byB2YWxpZGF0aW9uIGxheWVyIGlzc3VlcyBpbiBzdGQxNDAgd2l0aCBkYXRhIHR5cGVzIGxpa2Ug
dmVjMyBiZWluZyAxMiBieXRlcyB2cyAxNgorKyAgICAvLyBpbiBNU0wuCisrICAgIGlmICh0YXJn
ZXQgPT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisrICAgIHsKKysgICAgICAgIGFkanVz
dGVkU2l6ZSA9IHJvdW5kVXBQb3cyKGFkanVzdGVkU2l6ZSwgKHNpemVfdCkxNik7CisrICAgIH0K
KysKKyAgICAgc2l6ZV90IG1heEJ1ZmZlcnM7CisgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgIHsK
K0BAIC00MjcsNyArNDQwLDcgQEAKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgLy8g
ZHluYW1pYyBidWZmZXIsIGFsbG93IHVwIHRvIDEwIHVwZGF0ZSBwZXIgZnJhbWUvZW5jb2Rpbmcg
d2l0aG91dAorICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KKy0gICAgICAgICAgICBp
ZiAoYWRqdXN0ZWRTaXplIDw9IG10bDo6a1NoYXJlZE1lbUJ1ZmZlck1heEJ1ZlNpemVIaW50KQor
KyAgICAgICAgICAgIGlmIChhZGp1c3RlZFNpemUgPD0ga0R5bmFtaWNCdWZmZXJQb29sTWF4QnVm
U2l6ZSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIG1heEJ1ZmZlcnMgPSAxMDsK
KyAgICAgICAgICAgICAgICAgbUJ1ZmZlclBvb2wuc2V0QWx3YXlzVXNlU2hhcmVkTWVtKCk7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCitpbmRleCBhNTg2Njcw
Li4zZTI5YjRkIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBp
bGVyTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwu
bW0KK0BAIC0xMCw2ICsxMCw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0NvbXBpbGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZh
cmlhYmxlLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDcgKzIxLDE2IEBACisgCisg
U2hTaGFkZXJPdXRwdXQgQ29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlKCkgY29u
c3QKKyB7CisrICAgIGlmIChzaDo6cmVhZEJvb2xFbnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9T
UElSViIpKQorKyAgICB7CisrICAgICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBHTCBvdXRwdXQg
Zmlyc3QsIHdlIGNhbid0IGFjdHVhbGx5CisrICAgICAgICAvLyBnZXQgTVNMIGNvZGUgdW50aWwg
bGluayB0aW1lLiBUcmFuc2xhdGlvbiB0aW1lIGlzIHRvbyBlYXJseQorICAgICAgICAgcmV0dXJu
IFNIX0dMU0xfTUVUQUxfT1VUUFVUOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgcmV0dXJuIFNIX01TTF9NRVRBTF9PVVRQVVQ7CisrICAgIH0KKyB9CisgCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKK2luZGV4
IDE2ODdjOGMuLjJmMzkzNzEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQ29udGV4dE10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oCitAQCAtMjksOCArMjksOCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bDsKKyBjbGFzcyBW
ZXJ0ZXhBcnJheU10bDsKKyBjbGFzcyBQcm9ncmFtTXRsOworIGNsYXNzIFJlbmRlclRhcmdldE10
bDsKKy1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRs
OworK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKKytjbGFzcyBCdWZmZXJNdGw7CisgCisgY2xh
c3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAor
IHsKK0BAIC04NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dElt
cGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRl
eCkgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFz
ZVZlcnRleEJhc2VJbnN0YW5jZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpQcmltaXRpdmVNb2RlIG1vZGUsCitAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0
TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdMaW50ICpiYXNlVmVydGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqYmFz
ZUluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworKyAg
ICBhbmdsZTo6UmVzdWx0IGRyYXdFbGVtZW50c1NpbXBsZVR5cGVzUHJpbWl0aXZlUmVzdGFydChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5kaWNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpOworIAorICAgICAvLyBEZXZpY2UgbG9z
cworICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRl
OworQEAgLTE5Niw2ICsyMDIsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJ
bXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgIGNvbnN0IGdsOjpFeHRlbnNpb25zICZnZXRO
YXRpdmVFeHRlbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgIGNvbnN0IGdsOjpMaW1pdGF0
aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKKyAKKysgICAgY29u
c3QgUHJvZ3JhbU10bCAqZ2V0UHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1Qcm9ncmFtOyB9Cisr
CisgICAgIC8vIFNoYWRlciBjcmVhdGlvbgorICAgICBDb21waWxlckltcGwgKmNyZWF0ZUNvbXBp
bGVyKCkgb3ZlcnJpZGU7CisgICAgIFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6
U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKK0BAIC0yNDksMTIgKzI1NywyNCBAQCBjbGFz
cyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgR0xiaXRmaWVsZCBiYXJyaWVycykgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxk
IGJhcnJpZXJzKSBvdmVycmlkZTsKKyAKKysgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0
ZUNoYW5nZWQoKTsKKysgICAgYW5nbGU6OlJlc3VsdCBvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2so
CisrICAgICAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgICAgICBjb25zdCBnbDo6VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKysKKysgICAg
dm9pZCBvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisrCisrICAgIHZvaWQgcG9wdWxhdGVUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlclNldCgKKysgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKysgICAgICAgIGNv
bnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZl
cnMpOworICAgICAvLyBvdmVycmlkZSBtdGw6OkVycm9ySGFuZGxlcgorICAgICB2b2lkIGhhbmRs
ZUVycm9yKEdMZW51bSBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpm
aWxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKKy0gICAgdm9pZCBo
YW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZvaWQgaGFuZGxlRXJy
b3IoTlNFcnJvciAqZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkgb3ZlcnJpZGU7CitAQCAtMjcyLDEyICsy
OTIsMTIgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAorICAgICB2b2lkIG9uRHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKKy0gICAgdm9pZCBv
bkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBXaW5kb3dTdXJm
YWNlTXRsICpiYWNrYnVmZmVyKTsKKysgICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpOwor
IAorICAgICAvLyBJbnZva2UgYnkgUXVlcnlNdGwKKy0gICAgYW5nbGU6OlJlc3VsdCBvbk9jY2x1
c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSk7CistICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKy0gICAgdm9pZCBvbk9jY2x1c2lvblF1ZXJ5RGVzdHJv
eShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKysgICAgYW5n
bGU6OlJlc3VsdCBvbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXJ5TXRsICpxdWVyeSk7CisrICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworKyAgICB2b2lkIG9u
T2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5
TXRsICpxdWVyeSk7CisgCisgICAgIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhl
biByZXN0YXJ0IG9jY2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCisg
ICAgIGJvb2wgaGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSBjb25zdCB7IHJldHVybiBtT2NjbHVz
aW9uUXVlcnk7IH0KK0BAIC0zNjcsNyArMzg3LDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1Ymxp
YyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlG
YW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwKK0BAIC00MTcsNiArNDM3LDE4IEBAIGNsYXNz
IENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQp
OworIAorKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFy
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworKworKyAgICB2
b2lkIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5
cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291
bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRl
eFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGJ1ZmZlck9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaW5zdGFuY2VzKTsKKysKKyAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNv
bnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CisgCisgICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoRnJh
bWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLAorQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAg
IGFuZ2xlOjpSZXN1bHQgZmlsbERyaXZlclhGQlVuaWZvcm1zKEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworKyAgICBhbmdsZTo6UmVzdWx0IGhh
bmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6
UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsK
KyAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpOworQEAgLTQ3MCw2ICs1MDMsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVi
bGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICBESVJUWV9CSVRf
UkVOREVSX1BJUEVMSU5FLAorICAgICAgICAgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5E
SU5HLAorICAgICAgICAgRElSVFlfQklUX1JBU1RFUklaRVJfRElTQ0FSRCwKKysgICAgICAgIERJ
UlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKKyAgICAgICAgIERJUlRZX0JJVF9N
QVgsCisgICAgIH07CisgCitAQCAtNDg4LDcgKzUyMiw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBw
dWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgIHVpbnQzMl90
IHhmYkFjdGl2ZVVucGF1c2VkOworICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3
OworICAgICAgICAgLy8gTk9URTogRXhwbGljaXQgcGFkZGluZy4gRmlsbCBpbiB3aXRoIHVzZWZ1
bCBkYXRhIHdoZW4gbmVlZGVkIGluIHRoZSBmdXR1cmUuCistICAgICAgICBpbnQzMl90IHBhZGRp
bmdbM107CisrICAgICAgICBpbnQzMl90IHBhZGRpbmdfMFszXTsKKyAKKyAgICAgICAgIGludDMy
X3QgeGZiQnVmZmVyT2Zmc2V0c1s0XTsKKyAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNl
dHNbNF07CitAQCAtNTA4LDEyICs1NDIsMTUgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBD
b250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorIAorICAgICAgICAgdWludDMyX3QgY292
ZXJhZ2VNYXNrOworIAorLSAgICAgICAgZmxvYXQgcGFkZGluZzJbM107CisrICAgICAgICBpbnQz
Ml90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKysKKysgICAgICAgIC8vIE5PVEU6IEV4cGxpY2l0IHBh
ZGRpbmcuIEZpbGwgaW4gd2l0aCB1c2VmdWwgZGF0YSB3aGVuIG5lZWRlZCBpbiB0aGUgZnV0dXJl
LgorKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFbMl07CisgICAgIH07CisgCisgICAgIHN0cnVj
dCBEZWZhdWx0QXR0cmlidXRlCisgICAgIHsKKy0gICAgICAgIHVpbnQ4X3QgdmFsdWVzW3NpemVv
ZihmbG9hdCkgKiA0XTsKKysgICAgICAgIGZsb2F0IHZhbHVlc1s0XTsKKyAgICAgfTsKKyAKKyAg
ICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKK0BAIC01MjIs
NiArNTU5LDEzIEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1Ymxp
YyBtdGw6OkNvbnRleHQKKyAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciBtUmVuZGVyRW5j
b2RlcjsKKyAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOworICAgICBt
dGw6OkNvbXB1dGVDb21tYW5kRW5jb2RlciBtQ29tcHV0ZUVuY29kZXI7CisrICAgIC8vIFRPRE8o
amN1bm5pbmdoYW0pOgorKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJz
dFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKysgICAgLy8gVHJhbnNmb3JtRmVlZGJhY2tNdGw6Omdl
dEJ1ZmZlck9mZnNldHMuICBXZSBzaG91bGQgc3dpdGNoCisrICAgIC8vIHRvIHVzaW5nIGdsX0Jh
c2VWZXJ0ZXggLT4gYmFzZV92ZXJ0ZXggaW4gTVNMCisrICAgIEdMaW50IG1YZmJCYXNlVmVydGV4
OworKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyB2ZXJ0ZXggY291bnQgYXMg
d2VsbCB0byBzdXBwb3J0IGluc3RhbmNlZCBkcmF3IGNhbGxzCisrICAgIEdMdWludCBtWGZiVmVy
dGV4Q291bnRQZXJJbnN0YW5jZTsKKyAKKyAgICAgLy8gQ2FjaGVkIGJhY2stZW5kIG9iamVjdHMK
KyAgICAgRnJhbWVidWZmZXJNdGwgKm1EcmF3RnJhbWVidWZmZXIgPSBudWxscHRyOworQEAgLTU1
NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJs
aWMgbXRsOjpDb250ZXh0CisgICAgIG10bDo6QnVmZmVyUG9vbCBtVHJpRmFuSW5kZXhCdWZmZXI7
CisgICAgIC8vIG9uZSBidWZmZXIgY2FuIGJlIHJldXNlZCBmb3IgYW55IHN0YXJ0aW5nIHZlcnRl
eCBpbiBEcmF3QXJyYXlzKCkKKyAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4
QnVmZmVyOworKyAgICAvLworKyAgICBtdGw6OkJ1ZmZlclBvb2wgbVByaW1pdGl2ZVJlc3RhcnRC
dWZmZXI7CisgCisgICAgIC8vIER1bW15IHRleHR1cmUgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9ubHkgcGFzcy4KKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1EdW1teVhGQlJlbmRl
clRleHR1cmU7CitAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMg
Q29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAKKyAgICAgRGVmYXVsdEF0dHJpYnV0
ZSBtRGVmYXVsdEF0dHJpYnV0ZXNbbXRsOjprTWF4VmVydGV4QXR0cmlic107CisgCisrICAgIC8v
IFRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29u
c3QgQnVmZmVyTXRsICo+IG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzOworKworICAg
ICBJbmNvbXBsZXRlVGV4dHVyZVNldCBtSW5jb21wbGV0ZVRleHR1cmVzOworICAgICBib29sIG1J
bmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9IGZhbHNlOworIH07CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwubW0gYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQoraW5kZXggMjdlNjk3OC4uNDVhMDkyOCAxMDA2
NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQorQEAgLTQ0LDI1ICs0
NCw2IEBACisgY29uc3RleHByIHVpbnQzMl90IGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJG
cmFtZSA9IDEwOworICNlbmRpZgorIAorLSNkZWZpbmUgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdf
UFJPQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgLyogTm9ybWFsIGRyYXcgY2FsbCAq
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAg
ICAgLyogRmlyc3QgcGFzczogd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgaW4gdmVydGV4IHNoYWRlciwg
ZnJhZ21lbnQgc2hhZGVyIGluYWN0aXZlICovICAgXAorLSAgICAgICAgRFJBV19QUk9DKHRydWUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIC8qIFNlY29u
ZCBwYXNzOiBmdWxsIHJhc3Rlcml6YXRpb246IHZlcnRleCBzaGFkZXIgKyBmcmFnbWVudCBzaGFk
ZXIgYXJlIGFjdGl2ZS4gXAorLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRv
IHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAor
LSAgICAgICAgICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIERSQVdf
UFJPQyhmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorLSAgICB9CistCisgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJv
bVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHZlcnRleENvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUG9vbCAqcG9vbCwK
K0BAIC04NCw3ICs2NSw3IEBACisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCistYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZUxpbmVMb29wQnVmZmVyRnJvbVBvb2woQ29u
dGV4dE10bCAqY29udGV4dCwKKythbmdsZTo6UmVzdWx0IEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wo
Q29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbmRpY2VzVG9SZXNlcnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpidWZmZXJPdXQsCitAQCAtMTA1LDEyICs4
Niw3IEBAIGJvb2wgTmVlZFRvSW52ZXJ0RGVwdGhSYW5nZShmbG9hdCBuZWFyLCBmbG9hdCBmYXIp
CisgICAgIHJldHVybiBuZWFyID4gZmFyOworIH0KKyAKKy1ib29sIElzVHJhbnNmb3JtRmVlZGJh
Y2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKy17CistICAgIHJldHVybiBnbFN0YXRl
LmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpICYmIGdsU3RhdGUuaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKTsKKy19CistCistc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRv
U3RyaW5nKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisrc3RkOjpzdHJpbmcg
Q29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworICAgICBzdGQ6OnN0cmluZyBjcHBTdHJpbmc7CisgICAgIGlmIChsZW5ndGggPT0gMCkKK0BA
IC0xNzMsNyArMTQ5LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICB7aW5kZXhUeXBlT3JOb25lLCB2
ZXJ0ZXhPckluZGV4Q291bnQsIGluZGljZXMsIG1MaW5lTG9vcEluZGV4QnVmZmVyLCAwfSkpOwor
ICAgICAgICAgfQorIAorLSAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0
KG1Db250ZXh0TXRsKSk7CisrICAgICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21t
aXQobUNvbnRleHRNdGwsIGZhbHNlKSk7CisgCisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgICAgIH0KK0BAIC0xOTEsNyArMTY3LDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgbUNtZEJ1ZmZl
cigmZGlzcGxheS0+Y21kUXVldWUoKSksCisgICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZm
ZXIsIG1PY2NsdXNpb25RdWVyeVBvb2wpLAorICAgICAgIG1CbGl0RW5jb2RlcigmbUNtZEJ1ZmZl
ciksCistICAgICAgbUNvbXB1dGVFbmNvZGVyKCZtQ21kQnVmZmVyKQorKyAgICAgIG1Db21wdXRl
RW5jb2RlcigmbUNtZEJ1ZmZlciksCisrICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2Uo
MCkKKyB7fQorIAorIENvbnRleHRNdGw6On5Db250ZXh0TXRsKCkge30KK0BAIC0yMDgsNiArMTg1
LDggQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIG1MaW5lTG9vcExhc3RTZWdtZW50SW5kZXhCdWZmZXIuaW5pdGlhbGl6ZSh0aGlz
LCAyICogc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVM
b29wQnVmZmVyc1BlckZyYW1lKTsKKysgICAgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuaW5pdGlh
bGl6ZSh0aGlzLCAwLCBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJz
UGVyRnJhbWUpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQor
QEAgLTIyNywyMyArMjA2LDIwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3Qg
Z2w6OlN0YXRlICZnbFN0YXRlKQorIAorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZW5zdXJl
SW5jb21wbGV0ZVRleHR1cmVzQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7
CistICAgIGlmIChBTkdMRV9MSUtFTFkobUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkK
KysgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQp
KQorICAgICB7CistICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistICAg
IH0KKy0gICAgY29uc3RleHByIGdsOjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNb
XSA9IHtnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgZ2w6OlRleHR1cmVUeXBlOjpfM0QsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlOjpfMkRBcnJheSwKKysgICAgICAgIGNvbnN0ZXhwciBnbDo6VGV4dHVyZVR5cGUg
c3VwcG9ydGVkVGV4dHVyZVR5cGVzW10gPSB7CisrICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAor
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcH07CistICAgIGZvciAoZ2w6OlRl
eHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisrICAgICAgICBmb3Ig
KGF1dG8gdGV4VHlwZSA6IHN1cHBvcnRlZFRleHR1cmVUeXBlcykKKyAgICAgICAgIHsKKyAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKy0gICAgICAgIEFOR0xFX1RSWShtSW5jb21w
bGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxw
dHIsICZ0ZXh0dXJlKSk7CistCistICAgICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsICAgICAg
ICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworLSAgICAgICAgdGV4dHVy
ZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1
cmUiOworKyAgICAgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRSh0ZXh0dXJlKTsKKysgICAg
ICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMu
Z2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUp
KTsKKyAgICAgICAgIH0KKyAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9
IHRydWU7CistCisrICAgIH0KKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
IH0KKyAKK0BAIC0yODIsNyArMjU4LDE3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIHRoaXMsIHswLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oY291bnQpLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsIDB9KSk7Cisg
ICAgIH0KKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0
LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52
YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSkpOworKyAgICAgICAgLy8gRHJhdyB3aXRoIHRoZSB6ZXJv
IHN0YXJ0aW5nIGluZGV4IGJ1ZmZlciwgc2hpZnQgdGhlIHZlcnRleCBpbmRleCB1c2luZyBiYXNl
VmVydGV4CisrICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKysgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleChNVExQcmltaXRpdmVUeXBlVHJpYW5n
bGUsIGdlbkluZGljZXNDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIG1UcmlGYW5BcnJheXNJbmRl
eEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKysgICAgfQorIAorICAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
CitAQCAtMzExLDE2ICsyOTcsMjMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25z
dCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGZpcnN0KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAor
ICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZ
KG1UcmlGYW5JbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworKyAgICBBTkdMRV9UUlkobVRyaUZh
bkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOworIAorLSAgICBBU1NFUlQoIWdldFN0
YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpOworKyAgICBpZiAobVN0
YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KDApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7Cisg
CisrICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5z
dGFuY2VzKTsKKysgICAgfQorICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UpKTsKKyAKKy0gICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQoTVRMUHJpbWl0
aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKy0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQpOworKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTM2OCwyMiArMzYxLDI3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CisgICAg
IHVpbnQzMl90IGdlbkluZGljZXNDb3VudCA9IGNvdW50ICsgMTsKKyAKKy0gICAgQU5HTEVfVFJZ
KEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZt
TGluZUxvb3BJbmRleEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZ2VuSWR4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIEFO
R0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIGdlbkluZGljZXNDb3VudCwgJm1M
aW5lTG9vcEluZGV4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgIEFOR0xFX1RSWShn
ZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMo
CisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpcnN0KSwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAorICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVy
LmNvbW1pdCh0aGlzKSk7CisrICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21t
aXQodGhpcywgZmFsc2UpKTsKKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwg
aW5zdGFuY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKKyAKKysgICAgICAgIGV4ZWNEcmF3
SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQor
ICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5l
TG9vcCwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOworIAor
LSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
TGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZm
ZXJPZmZzZXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Rh
bmNlcyk7CisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGlu
ZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTQxMywyMSArNDExLDMzIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorIAorICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6
OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVko
eGZiUGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorLSAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVu
dW0sIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCB4ZmJQYXNzKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBpZiAoaW5zdGFu
Y2VzID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCistICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJv
bSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291
bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIGVsc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbnN0YW5j
ZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1
c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9k
ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworKwor
KyAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIG5vcm1hbCBkcmF3QXJyYXlzKCkKKysgICAgICAg
ICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZXhlY0RyYXdJbnN0
YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0K
KyAgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgZmFsc2UpKTsKKyAKKy0gICAgQU5HTEVfTVRM
X1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKysgICAgaWYgKGluc3RhbmNlcyA9PSAwKQor
KyAgICB7CisrICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJh
d0FycmF5cygpCisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBj
b3VudCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBleGVjRHJhd0luc3Rh
bmNlZChtdGxUeXBlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlQ291bnQpOworKyAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtNDgwLDE2ICs0OTAs
MjUgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZnZW5JZHhCdWZmZXJPZmZzZXQsICZnZW5JbmRpY2VzQ291bnQpKTsKKyAKKyAgICAgICAgIEFO
R0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSgKKy0gICAgICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMs
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBwcmltaXRpdmVSZXN0YXJ0fSkpOwor
KyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBn
ZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorKyAgICAgICAgICAgICZnZW5J
bmRpY2VzQ291bnQpKTsKKyAKKy0gICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIu
Y29tbWl0KHRoaXMpKTsKKysgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29t
bWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBj
b3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNl
ZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBl
VUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgICAgIH0KKyAKKyAgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRpY2VzLCBmYWxzZSkpOworIAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRl
eFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKysgICAgICAg
IGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbklu
ZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwor
IAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAvLyBp
ZiAoY291bnQgPiAzKQorQEAgLTUzMiwyNyArNTUxLDg3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgdWludDMyX3QgZ2Vu
SWR4QnVmZmVyT2Zmc2V0OworICAgICAgICAgdWludDMyX3QgcmVzZXJ2ZWRJbmRpY2VzID0gY291
bnQgKiAyOworICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OworLSAgICAgICAgQU5H
TEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCByZXNlcnZlZEluZGlj
ZXMsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKKysgICAgICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1
ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZl
ciwgJmdlbklkeEJ1ZmZlck9mZnNldCkpOworIAorICAgICAgICAgQU5HTEVfVFJZKGdldERpc3Bs
YXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXko
CisgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIs
IGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0sCisgICAgICAgICAgICAgJmdl
bkluZGljZXNDb3VudCkpOworIAorLSAgICAgICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVm
ZmVyLmNvbW1pdCh0aGlzKSk7CisrICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZm
ZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFO
R0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAw
LCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4
VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4
QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisrICAgICAgICB9CisgCisg
ICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpM
aW5lTG9vcCwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKKyAKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRy
YXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXND
b3VudCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTElu
ZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOworKyAgICAg
ICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdl
bkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworIAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAv
LyBpZiAoY291bnQgPj0gMikKKyAgICAgcmV0dXJuIGRyYXdFbGVtZW50c0luc3RhbmNlZChjb250
ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXMsIGNvdW50LCB0eXBlLCBpbmRpY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgfQorK2FuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2Rl
IG1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBpbnN0YW5jZXMpCisreworKworKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZm
ZXI7CisrICAgIHVpbnQzMl90IGdlbklkeEJ1ZmZlck9mZnNldDsKKysgICAgdWludDMyX3QgcmVz
ZXJ2ZWRJbmRpY2VzID0gY291bnQ7CisrICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisrICAg
IEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywg
Jm1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIHN3aXRj
aCAobW9kZSkKKysgICAgeworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6UG9pbnRz
OgorKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorKyAgICAgICAgICAgICAgICB0aGlzLCB7
dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCB0
cnVlfSwKKysgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXM6CisrICAgICAg
ICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRMaW5lc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50
LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAg
ICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlczoKKysgICAgICAgICAgICBB
TkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBp
bmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAgICAg
ICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQorKyAgICBBTkdMRV9UUlkobVByaW1p
dGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKysgICAgTVRMUHJpbWl0aXZlVHlwZSBt
dGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOworKyAgICBpZiAobVN0YXRlLmlz
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAgICBBTkdM
RV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p
ZCAqPigwKSwgdHJ1ZSkpOworKworKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsICh1aW50MzJfdClnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZl
ck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7
CisrCisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2Vu
SW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysK
KysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKyAKKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCitAQCAtNTYzLDcgKzY0Miw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIHsKKyAgICAgLy8gUmVhbCBpbnN0
YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCisgICAg
IEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CistCisg
ICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtNTc3LDE4
ICs2NTUsMzkgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBkcmF3TGluZUxvb3BFbGVtZW50cyhj
b250ZXh0LCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKy0K
KyAgICAgbXRsOjpCdWZmZXJSZWYgaWR4QnVmZmVyOworICAgICBzaXplX3QgY29udmVydGVkT2Zm
c2V0ICAgICAgICAgICAgID0gMDsKKyAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVk
VHlwZSA9IHR5cGU7CisrICAgIHNpemVfdCBjb252ZXJ0ZWRDb3VudCAgICAgICAgICAgICAgPSAo
c2l6ZV90KWNvdW50OworIAorLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1
ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnRlZE9mZnNldCwgJmNv
bnZlcnRlZFR5cGUpKTsKKysgICAgQU5HTEVfVFJZKG1WZXJ0ZXhBcnJheS0+Z2V0SW5kZXhCdWZm
ZXIoY29udGV4dCwgdHlwZSwgbW9kZSwgY291bnQsIGluZGljZXMsICZpZHhCdWZmZXIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQs
ICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKKyAKKyAgICAgQVNTRVJUKGlkeEJ1
ZmZlcik7CisgICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQpID09IDApOworKyAgICB1aW50MzJfdCBjb252ZXJ0ZWRDb3VudGkzMiA9
ICh1aW50MzJfdCljb252ZXJ0ZWRDb3VudDsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb252ZXJ0ZWRDb3VudGkzMiwgaW5zdGFuY2VzLCB0eXBl
LCBpbmRpY2VzLCB0cnVlKSk7CisrICAgICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBt
dGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2Up
KTsKKysgICAgICAgIE1UTEluZGV4VHlwZSBtdGxJZHhUeXBlID0gbXRsOjpHZXRJbmRleFR5cGUo
Y29udmVydGVkVHlwZSk7CisrCisrICAgICAgICBpZiAoaW5zdGFuY2VzID09IDApCisrICAgICAg
ICB7CisrICAgICAgICAgICAgLy8gTm9ybWFsIGRyYXcKKysgICAgICAgICAgICBtUmVuZGVyRW5j
b2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwg
aWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRlZE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAg
ICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKysgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZl
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkT2Zmc2V0
LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMs
IHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CisgCisgICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlw
ZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKKyAKK0BAIC01OTcsMTIgKzY5NiwxMyBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorICAgICB7CisgICAgICAgICAvLyBOb3JtYWwgZHJh
dworLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQobXRsVHlwZSwgY291bnQsIG10
bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0KTsKKysgICAgICAgIG1SZW5kZXJF
bmNvZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBl
LCBpZHhCdWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWRPZmZzZXQpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworICAgICAgICAgLy8gSW5zdGFu
Y2VkIGRyYXcKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsIGNvdW50LCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsIGNvbnZlcnRlZE9mZnNldCwKKysg
ICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkz
MiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKyAKK0BAIC02MjUs
NyArNzI1LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBOT1RFKGhx
bGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKyB9CitAQCAtNjQ5LDEwICs3NDgsOSBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZl
cnRleCkKKyB7CistICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgorICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworIH0KK0BAIC02NjksNyArNzY3
LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0
b3A7CisgfQorLQorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHMo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LAorQEAgLTY5MCw3ICs3
ODcsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xT
dGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBO
T1RFKGhxbGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6U3RvcDsKKyB9CitAQCAtNzEzLDYgKzgwOSw2NCBAQCBib29sIElzVHJhbnNm
b3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisgfQorIAorK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0
YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyt7CisrICAgIGlmIChn
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5h
YmxlZCkKKysgICAgeworKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZChwcmlt
aXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisrICAgIH0K
KysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KHByaW1pdGl2
ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0ZXhDb3VudCk7CisrICAgICAgICBmb3IgKHVpbnQzMl90
IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2luc3QpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisrCisrICAg
ICAgICAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10
bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKKysKKysgICAgICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7Cisr
CisrICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhT
dGFydCwgdmVydGV4Q291bnQpOworKyAgICAgICAgfQorKyAgICAgICAgLy8gUmVzZXQgaW5zdGFu
Y2UgSUQgdG8gemVybworKyAgICAgICAgbVZlcnRleEFycmF5LT5lbXVsYXRlSW5zdGFuY2VEcmF3
U3RlcCgmbVJlbmRlckVuY29kZXIsIDApOworKyAgICB9CisrfQorKworK3ZvaWQgQ29udGV4dE10
bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBp
bmRleENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1U
TEluZGV4VHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2Vz
KQorK3sKKysgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4
SW5zdGFuY2VkRHJhdy5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUs
IGluZGV4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhD
b3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwgYnVmZmVyT2Zmc2V0KTsKKysgICAgICAgIGZv
ciAodWludDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtRHJpdmVyVW5pZm9ybXMuZW11bGF0ZWRJbnN0YW5jZUlEID0gaW5z
dDsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJV
bmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworKworKyAgICAgICAg
ICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVy
LCBpbnN0KTsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChwcmlt
aXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisrICAgICAgICB9
CisrICAgICAgICAvLyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisrICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisrICAg
IH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjptdWx0aURyYXdBcnJheXMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGludCAqZmlyc3RzLAorQEAgLTgwMiwxNSAr
OTU2LDE1IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZn
bFN0YXRlKQorIC8vIEVYVF9kZWJ1Z19tYXJrZXIKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworKyAgICBtQ21kQnVmZmVyLmluc2VydERlYnVnU2lnbihDb252ZXJ0TWFya2VyVG9DcHAobGVu
Z3RoLCBtYXJrZXIpKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxl
bmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorIHsKKy0gICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdH
cm91cChDb252ZXJ0TWFya2VyVG9TdHJpbmcobGVuZ3RoLCBtYXJrZXIpKTsKKysgICAgbUNtZEJ1
ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsK
KyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0KKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OnBvcEdyb3VwTWFya2VyKCkKKyB7CisgICAgIG1DbWRCdWZmZXIucG9w
RGVidWdHcm91cCgpOworQEAgLTExNTUsMTAgKzEzMDksMTIgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgeworICAgICByZXR1cm4gbmV3
IFF1ZXJ5TXRsKHR5cGUpOworIH0KKysKKyBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRl
RmVuY2VOVigpCisgeworICAgICByZXR1cm4gbmV3IEZlbmNlTlZNdGwoKTsKKyB9CisrCisgU3lu
Y0ltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVN5bmMoKQorIHsKKyAgICAgcmV0dXJuIG5ldyBTeW5j
TXRsKCk7CitAQCAtMTIwNSw2ICsxMzYxLDY5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gbnVsbHB0cjsKKyB9Cisg
Cisrdm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtRGlydHlCaXRzLnNl
dChESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpOworKyAgICB9CisrfQorKwor
K3ZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpCisrewor
KyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVk
YmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMo
KTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uQmVnaW5UcmFu
c2Zvcm1GZWVkYmFjaygKKysgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorKyAgICBjb25zdCBnbDo6
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQorK3sK
KysgICAgb25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpOworKworKyAgICBmb3IgKHNp
emVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVmZmVyQ291bnQ7ICsrYnVmZmVy
SW5kZXgpCisrICAgIHsKKysgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycy5jb3VudChidWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBlbmRFbmNvZGluZyhtUmVuZGVyRW5jb2Rlcik7CisrICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlclNldChidWZmZXJDb3VudCwgYnVmZmVycyk7CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyU2V0KAorKyAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgIGNvbnN0
IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMp
CisreworKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVm
ZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisrICAgIHsKKysgICAgICAgIG1DdXJyZW50VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisrICAgIH0K
Kyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKKyt7Cisr
ICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNo
YW5nZWQoKTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAg
ICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisrICAgIH0KKysgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBz
WSwKK0BAIC0xMzMxLDYgKzE1NTAsMTEgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldFBp
eGVsRm9ybWF0KGFuZ2xlRm9ybWF0SWQpOworIH0KKyAKKytjb25zdCBtdGw6OkZvcm1hdENhcHMg
JkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fw
cyhtdGxGb3JtYXQpOworK30KKysKKyAvLyBTZWUgbXRsOjpGb3JtYXRUYWJsZTo6Z2V0VmVydGV4
Rm9ybWF0KCkKKyBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmQ29udGV4dE10bDo6Z2V0VmVydGV4
Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBj
b25zdAorQEAgLTEzMzgsMTEgKzE1NjIsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0
VmVydGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOworIH0KKyAKKy1jb25z
dCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAorLXsKKy0gICAgcmV0dXJuIGdldERpc3BsYXkoKS0+
Z2V0TmF0aXZlRm9ybWF0Q2FwcyhtdGxGb3JtYXQpOworLX0KKy0KKyBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmdldEluY29tcGxldGVUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqKnRleHR1cmVPdXQpCitAQCAtMTM2Miw2ICsxNTgxLDIyIEBA
IGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQor
IAorICAgICAvLyBSZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cworICAgICBtT2NjbHVzaW9uUXVl
cnlQb29sLnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyh0aGlzKTsKKysKKysgICAgbUN1cnJlbnRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIoKTsKKysKKysgICAgLy8gUmVzZXQgc2VyaWFs
cyBmb3IgWEZCIGlmIGFjdGl2ZS4KKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVj
dXRhYmxlICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisrICAg
ICAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisrICAgICAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQg
PSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrCisrICAg
ICAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorKyAgICAg
ICAgICAgIG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkp
OworKworKyAgICAgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZm
ZXJDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKSk7CisrICAgIH0KKyB9CisgCisg
dm9pZCBDb250ZXh0TXRsOjplbmRFbmNvZGluZyhib29sIGZvcmNlU2F2ZVJlbmRlclBhc3NDb250
ZW50KQorQEAgLTEzOTAsNyArMTYyNSw3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIAorIHZvaWQgQ29udGV4dE10bDo6Zmx1c2hDb21t
YW5kQnVmZXIoKQorIHsKKy0gICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisrICAgIGlmICgh
bUNtZEJ1ZmZlci52YWxpZCgpKQorICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0KK0BA
IC0xNDU0LDYgKzE2ODksMjcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIC8vIE5lZWQgdG8gcmUtYXBwbHkgZXZlcnl0aGluZyBv
biBuZXh0IGRyYXcgY2FsbC4KKyAgICAgbURpcnR5Qml0cy5zZXQoKTsKKyAKKysgICAgaWQ8TVRM
RGV2aWNlPiBtZXRhbERldmljZSA9IGdldERpc3BsYXkoKS0+Z2V0TWV0YWxEZXZpY2UoKTsKKysg
ICAgaWYgKG10bDo6RGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2Up
KQorKyAgICB7CisrICAgICAgICBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqb2JqQ0Rlc2MgPSBb
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgcmVuZGVyUGFzc0Rlc2NyaXB0b3JdOworKyAgICAgICAg
ZGVzYy5jb252ZXJ0VG9NZXRhbERlc2Mob2JqQ0Rlc2MpOworKyAgICAgICAgTlNVSW50ZWdlciBt
YXhTaXplID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRh
bERldmljZSk7CisrICAgICAgICBOU1VJbnRlZ2VyIHJlbmRlclRhcmdldFNpemUgPQorKyAgICAg
ICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Iob2Jq
Q0Rlc2MsIHRoaXMsIG1ldGFsRGV2aWNlKTsKKysgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXpl
ID4gbWF4U2l6ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBOU1N0cmluZyAqZXJyb3JTdHJp
bmcgPQorKyAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMg
c2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBk
ZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFNpemUsIG1heFNpemVdOworKyAgICAgICAgICAg
IE5TRXJyb3IgKmVyciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25F
cnJvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGU6LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklu
Zm86QHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5IDogZXJyb3JTdHJpbmd9XTsKKysgICAgICAg
ICAgICB0aGlzLT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19M
SU5FX18pOworKyAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICB9CisrICAgIH0KKyAg
ICAgcmV0dXJuICZtUmVuZGVyRW5jb2Rlci5yZXN0YXJ0KGRlc2MpOworIH0KKyAKK0BAIC0xNDY3
LDkgKzE3MjMsMTAgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3Rh
dGUgJmdsU3RhdGUpCisgCisgICAgIG10bDo6UmVuZGVyUGFzc0Rlc2MgcnBEZXNjOworIAorLSAg
ICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0
OworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5sZXZlbCAgICAgICAgPSBpbmRleC5n
ZXROYXRpdmVMZXZlbCgpOworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5zbGljZU9y
RGVwdGggPSBpbmRleC5oYXNMYXllcigpID8gaW5kZXguZ2V0TGF5ZXJJbmRleCgpIDogMDsKKysg
ICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4
dHVyZVRhcmdldDsKKysgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0
LT5sZXZlbCAgID0gaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKTsKKysgICAgcnBEZXNjLmNvbG9yQXR0
YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPQorKyAgICAgICAgaW5kZXgu
aGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgIHJwRGVzYy5udW1D
b2xvckF0dGFjaG1lbnRzID0gMTsKKyAgICAgcnBEZXNjLnNhbXBsZUNvdW50ICAgICAgICAgPSB0
ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgCitAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBib29s
IElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyB2
b2lkIENvbnRleHRNdGw6OmVuc3VyZUNvbW1hbmRCdWZmZXJSZWFkeSgpCisgeworLSAgICBpZiAo
IW1DbWRCdWZmZXIucmVhZHkoKSkKKysgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCisgICAg
IHsKKyAgICAgICAgIG1DbWRCdWZmZXIucmVzdGFydCgpOworICAgICB9CisgCistICAgIEFTU0VS
VChtQ21kQnVmZmVyLnJlYWR5KCkpOworKyAgICBBU1NFUlQobUNtZEJ1ZmZlci52YWxpZCgpKTsK
KyB9CisgCisgdm9pZCBDb250ZXh0TXRsOjp1cGRhdGVWaWV3cG9ydChGcmFtZWJ1ZmZlck10bCAq
ZnJhbWVidWZmZXJNdGwsCitAQCAtMTY3Nyw3ICsxOTM0LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyB9CisgCistdm9p
ZCBDb250ZXh0TXRsOjpvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorK3ZvaWQgQ29udGV4dE10bDo6b25C
YWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFBy
b3RvY29sICpiYWNrYnVmZmVyKQorIHsKKyAgICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlICAg
ID0gZ2V0U3RhdGUoKTsKKyAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpH
ZXRJbXBsKGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworQEAgLTE2ODYsMTAgKzE5NDMs
MTMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgICAgdXBkYXRlVmlld3BvcnQoZnJh
bWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXROZWFyUGxhbmUoKSwK
KysgICAgICAgICAgICAgICAgICAgZ2xTdGF0ZS5nZXRGYXJQbGFuZSgpKTsKKysgICAgdXBkYXRl
U2Npc3NvcihnbFN0YXRlKTsKKyAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29u
dGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVl
cnlNdGwgKnF1ZXJ5KQorK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVy
eUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCisgewor
ICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOworICAgICBtT2NjbHVzaW9u
UXVlcnkgPSBxdWVyeTsKK0BAIC0xNzA2LDcgKzE5NjYsNyBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVl
cnlFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lk
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorIHsKKyAgICAgQVNTRVJUKG1PY2NsdXNpb25RdWVyeSA9
PSBxdWVyeSk7CisgCitAQCAtMTcxOCw3ICsxOTc4LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgICAgIG1PY2NsdXNpb25RdWVy
eSA9IG51bGxwdHI7CisgfQorLXZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ry
b3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lkIENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyB7CisgICAgIGlmIChxdWVyeS0+Z2V0QWxsb2NhdGVk
VmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CitAQCAtMTcyNiw3ICsxOTg2LDcg
QEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUp
CisgICAgIH0KKyAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSA9PSBxdWVyeSkKKyAgICAgeworLSAg
ICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisrICAgICAgICBvbk9j
Y2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgcXVlcnkpOworICAgICB9CisgICAgIG1PY2NsdXNp
b25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKKyB9CitAQCAt
MTc3MCwyMCArMjAzMCw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorLXZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgVHJhbnNmb3JtRmVlZGJhY2tNdGwgKnhmYikKKy17CistICAg
IC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJlbnQgcmVuZGVyIHBhc3MgdG8gZW5h
YmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCistICAgIC8vIGJ1ZmZlcnMgY291bGQgYmUg
dXNlZCBhcyB2ZXJ0ZXggaW5wdXQuIENvbnNpZGVyIGEgYmV0dGVyIGFwcHJvYWNoLgorLSAgICBl
bmRFbmNvZGluZyh0cnVlKTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZl
ZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRi
YWNrTXRsICp4ZmIpCisteworLSAgICAvLyBOT1RFKGhxbGUpOiBXZSBoYXZlIHRvIGVuZCBjdXJy
ZW50IHJlbmRlciBwYXNzIHRvIGVuYWJsZSBzeW5jaHJvbml6YXRpb24gYmVmb3JlIFhGQgorLSAg
ICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJl
dHRlciBhcHByb2FjaC4KKy0gICAgZW5kRW5jb2RpbmcodHJ1ZSk7CistfQorLQorIHZvaWQgQ29u
dGV4dE10bDo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVu
dCwgdWludDY0X3QgdmFsdWUpCisgeworICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKTsK
K0BAIC0xODQyLDEwICsyMDg4LDE5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGZiUGFzcykKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKKyB7CisgICAg
IEFTU0VSVChtUHJvZ3JhbSk7CisgCisrICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2Zmc2V0cyBvbiBldmVyeSBkcmF3IGNhbGwuCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChmaXJzdFZl
cnRleCAhPSAtMSk7CisrICAgICAgICBtWGZiQmFzZVZlcnRleCAgICAgICAgICAgICA9IGZpcnN0
VmVydGV4OworKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPcklu
ZGV4Q291bnQ7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKysgICAgfQor
KworICAgICAvLyBpbnN0YW5jZXM9MCBtZWFucyBubyBpbnN0YW5jZWQgZHJhdy4KKyAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsKKyAKK0BAIC0x
ODYyLDIwICsyMTE3LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGlydHlBY3RpdmVUZXh0
dXJlcyhjb250ZXh0KSk7CisgICAgIH0KKyAKKy0gICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJU
WV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEKSkKKy0gICAgeworLSAgICAgICAgaWYgKGdldFN0YXRl
KCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCistICAgICAgICB7CistICAg
ICAgICAgICAgLy8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNz
IHNpbmNlIHdlIGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgorLSAgICAgICAgICAgIC8vIHRhcmdl
dCBpZiBvbmx5IFhGQiBpcyBuZWVkZWQuCistICAgICAgICAgICAgaW52YWxpZGF0ZVN0YXRlKGNv
bnRleHQpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOworLSAgICAgICAgfQorLSAgICB9CistCisg
ICAgIGlmICghbVJlbmRlckVuY29kZXIudmFsaWQoKSkKKyAgICAgeworICAgICAgICAgLy8gcmUt
YXBwbHkgZXZlcnl0aGluZworQEAgLTE4ODQsNyArMjEyNSwxMSBAQCBib29sIElzVHJhbnNmb3Jt
RmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgaWYgKG1EaXJ0
eUJpdHMudGVzdChESVJUWV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCisgICAgIHsKKy0gICAgICAg
IEFOR0xFX1RSWShoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29udGV4dCkpOworKyAgICAgICAgLy8g
U3RhcnQgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIKKysgICAgICAgIEFOR0xFX01UTF9UUlko
dGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkp
OworKworKyAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworKyAgICAgICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworICAgICB9CisgCisgICAgIGlmIChtT2NjbHVzaW9uUXVlcnkgJiYg
bU9jY2x1c2lvblF1ZXJ5UG9vbC5nZXROdW1SZW5kZXJQYXNzQWxsb2NhdGVkUXVlcmllcygpID09
IDApCitAQCAtMTg5NCwxNyArMjEzOSwxMSBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1
c2lvblF1ZXJ5SW5SZW5kZXJQYXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKKyAgICAgfQor
IAorLSAgICBib29sIGlzUGlwZWxpbmVEZXNjQ2hhbmdlZDsKKy0gICAgQU5HTEVfVFJZKGNoZWNr
SWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgeGZiUGFzcywgJmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkpOworKyAgICBib29sIGNoYW5nZWRQaXBlbGluZTsKKysgICAgQU5HTEVfVFJZKGNo
ZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNo
YW5nZWRQaXBlbGluZSkpOworIAorICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxz
ZTsKKy0KKy0gICAgaWYgKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKQorLSAg
ICB7CistICAgICAgICAvLyBGaWx0ZXIgb3V0IHVubmVlZGVkIGRpcnR5IGJpdHMKKy0gICAgICAg
IGZpbHRlck91dFhGQk9ubHlEaXJ0eUJpdHMoY29udGV4dCk7CistICAgIH0KKy0KKyAgICAgZm9y
IChzaXplX3QgYml0IDogbURpcnR5Qml0cykKKyAgICAgeworICAgICAgICAgc3dpdGNoIChiaXQp
CitAQCAtMTk1Myw4ICsyMTkyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZP
Uk1fQlVGRkVSU19CSU5ESU5HOgorICAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc0RpcnR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBESVJU
WV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6CisrICAgICAgICAgICAgICAgIEFOR0xF
X1RSWShoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9u
KGNvbnRleHQpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBE
SVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgorLSAgICAgICAgICAgICAgICAvLyBBbHJlYWR5
IGhhbmRsZWQuCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CitAQCAtMTk2Miw3MSArMjIwMywyMCBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICBpZiAoeGZiUGFzcyAmJiAhbURpcnR5Qml0cy50
ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQorLSAgICB7CistICAgICAgICAvLyBJZiBo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKCkgd2FzIG5vdCBjYWxsZWQgYW5kIHRoaXMgaXMgWEZC
IHBhc3MsIHdlIHN0aWxsIG5lZWQgdG8KKy0gICAgICAgIC8vIHVwZGF0ZSBYRkIgcmVsYXRlZCB1
bmlmb3JtcworLSAgICAgICAgQU5HTEVfVFJZKAorLSAgICAgICAgICAgIGZpbGxEcml2ZXJYRkJV
bmlmb3JtcyhmaXJzdFZlcnRleCwgdmVydGV4T3JJbmRleENvdW50LCAvKiogc2tpcHBlZEluc3Rh
bmNlcyAqLyAwKSk7CistICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2
ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworLSAgICB9Cist
CisgICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1Qcm9ncmFtLT5z
ZXR1cERyYXcoY29udGV4dCwgJm1SZW5kZXJFbmNvZGVyLCBtUmVuZGVyUGlwZWxpbmVEZXNjLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVzY0NoYW5nZWQs
IHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7CistCistICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpmaWx0ZXJP
dXRYRkJPbmx5RGlydHlCaXRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0gICAg
QVNTRVJUKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKTsKKy0KKy0gICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50
ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOworLQorLSAgICAvLyBJbiB0cmFuc2Zv
cm0gZmVlZGJhY2sgb25seSBwYXNzLCBvbmx5IHZlcnRleCBzaGFkZXIncyByZWxhdGVkIHN0YXRl
cyBhcmUgbmVlZGVkLgorLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQorLSAg
ICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9TVEVOQ0lMX0RFU0MpIHwK
Ky0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfREVQVEhfQklBUykgfCBhbmds
ZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX1NURU5DSUxfUkVGKSB8CistICAgICAgICBhbmdsZTo6
Qml0PHNpemVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihE
SVJUWV9CSVRfVklFV1BPUlQpIHwKKy0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9C
SVRfU0NJU1NPUikgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0NVTExfTU9ERSkgfAor
LSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9XSU5ESU5HKTsKKy0KKy0gICAg
bURpcnR5Qml0cyAmPSB+a1VubmVlZGVkQml0czsKKy19CistCistYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CisteworLSAgICBpZiAoIUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisrICAgIGlm
ICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCisgICAgIHsKKy0gICAgICAgIC8vIFN0YXJ0IG5ldyBy
ZW5kZXIgY29tbWFuZCBlbmNvZGVyCistICAgICAgICBBTkdMRV9NVExfVFJZKHRoaXMsIG1EcmF3
RnJhbWVidWZmZXItPmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnRleHQpKTsKKy0gICAgfQor
LSAgICBlbHNlCistICAgIHsKKy0gICAgICAgIC8vIFhGQiBpcyBhY3RpdmUgYW5kIHJhc3Rlcml6
YXRpb24gaXMgZGlzYWJsZWQuIFVzZSBkdW1teSByZW5kZXIgdGFyZ2V0LgorLSAgICAgICAgLy8g
V2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3Rp
dmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcKKy0gICAgICAgIC8vIGEgc21hbGwgZHVtbXkgcmVu
ZGVyIHRhcmdldCB3b3VsZCBtYWtlIHRoZSByZW5kZXIgcGFzcyBlbmRpbmcgdmVyeSBjaGVhcC4K
Ky0gICAgICAgIGlmICghbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKHRoaXMsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQaXhlbEZv
cm1hdChhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOEE4X1VOT1JNKSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAm
bUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOworLSAgICAgICAgfQorLSAgICAgICAgbXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2RlciAqZW5jb2RlciA9IGdldFRleHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rl
cigKKy0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlLAorLSAgICAgICAgICAgIG10
bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRleDo6
TWFrZTJEKDApKSk7CistICAgICAgICBlbmNvZGVyLT5zZXRDb2xvckxvYWRBY3Rpb24oTVRMTG9h
ZEFjdGlvbkRvbnRDYXJlLCBNVExDbGVhckNvbG9yKCksIDApOworLSAgICAgICAgZW5jb2Rlci0+
c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRDYXJlKTsKKy0KKy0jaWZuZGVm
IE5ERUJVRworLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFuc2Zvcm1GZWVkYmFja09u
bHlQYXNzIik7CistI2VuZGlmCisrICAgICAgICBtdGw6OlJlbmRlclV0aWxzICZ1dGlscyA9IGdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsKKysgICAgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0ID0K
KysgICAgICAgICAgICB1dGlscy5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb250ZXh0LCAm
bVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MpOworKyAgICAgICAgQU5HTEVfVU5V
U0VEX1ZBUklBQkxFKHJlc3VsdCk7CisrICAgICAgICBhc3NlcnQocmVzdWx0ID09IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKTsKKysgICAgICAgIGNoYW5nZWRQaXBlbGluZSA9IHRydWU7CisgICAg
IH0KKyAKKy0gICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworLSAgICBpbnZhbGlkYXRlU3RhdGUo
Y29udGV4dCk7CisrICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZt
UmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5lLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ2hhbmdlZCwgdW5pZm9ybUJ1
ZmZlcnNEaXJ0eSwgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KSk7CisgCisgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtMjAzNCwxMCArMjIyNCwxMCBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgICAgICAg
ICAgICAgICAgPSBtU3RhdGU7CistICAgIGNvbnN0IGdsOjpQcm9ncmFtICpwcm9ncmFtID0gZ2xT
dGF0ZS5nZXRQcm9ncmFtKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAK
KyAgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJnRleHR1cmVzICAgICA9IGdsU3Rh
dGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworLSAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVy
ZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2
ZVNhbXBsZXJzTWFzaygpOworKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2
ZVRleHR1cmVzID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxlcnNNYXNrKCk7CisgCisgICAg
IGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCisgICAgIHsKK0BAIC0y
MDY3LDYgKzIyNTcsNyBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSkKKyAgICAgfQorIAorICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRGVmYXVsdEF0dHJp
YnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKKyAgICAgbVJlbmRlckVu
Y29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRy
aWJzQmluZGluZ0luZGV4KTsKKyAKKyAgICAgbURpcnR5RGVmYXVsdEF0dHJpYnNNYXNrLnJlc2V0
KCk7CitAQCAtMjEyMCw5ICsyMzExLDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyAgICAgbURyaXZlclVuaWZvcm1zLmNv
dmVyYWdlTWFzayA9IGNvdmVyYWdlTWFzazsKKyAKKy0gICAgQU5HTEVfVFJZKAorLSAgICAgICAg
ZmlsbERyaXZlclhGQlVuaWZvcm1zKGRyYXdDYWxsRmlyc3RWZXJ0ZXgsIHZlcnRpY2VzUGVySW5z
dGFuY2UsIC8qKiBza2lwcGVkSW5zdGFuY2VzICovIDApKTsKKy0KKyAgICAgQVNTRVJUKG1SZW5k
ZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFnbWVudERhdGEo
bURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisgICAg
IG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2
ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CitAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZEluc3RhbmNlcykKKythbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNF
bXVsYXRpb24oCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKKy0gICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJs
ZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworKyAgICBBU1NF
UlQoZXhlY3V0YWJsZSk7CisgCistICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBhdXNl
ZCA9IGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCk7CistICAg
IGlmICghdHJhbnNmb3JtRmVlZGJhY2sgfHwgIW1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBh
dXNlZCkKKysgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgp
IHx8ICFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgbURyaXZl
clVuaWZvcm1zLnhmYlZlcnRpY2VzUGVyRHJhdyA9IHZlcnRpY2VzUGVySW5zdGFuY2U7CisrICAg
IFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1w
bChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworKyAgICBzaXplX3QgYnVm
ZmVyQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlckhhbmRsZXMgPQorKyAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKKyAKKy0gICAgVHJhbnNmb3Jt
RmVlZGJhY2tNdGwgKnRyYW5zZm9ybUZlZWRiYWNrTXRsID0gbXRsOjpHZXRJbXBsKHRyYW5zZm9y
bUZlZWRiYWNrKTsKKysgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRl
eCA8IGJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorKyAgICB7CisrICAgICAgICBCdWZmZXJN
dGwgKmJ1ZmZlckhhbmRsZSA9IGJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdOworKyAgICAgICAg
QVNTRVJUKGJ1ZmZlckhhbmRsZSk7CisrICAgICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRCdWZmZXJGb3JXcml0ZSgKKysgICAg
ICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRC
dWZmZXIoKSwgMCwKKysgICAgICAgICAgICBtdGw6OmtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJ
bmRleCArICh1aW50MzJfdClidWZmZXJJbmRleCk7CisrICAgIH0KKyAKKy0gICAgcmV0dXJuIHRy
YW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZmZXJPZmZzZXRzKHRoaXMsIGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0aWNlc1Blckluc3RhbmNlICogc2tpcHBlZEluc3RhbmNlcywKKy0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJC
dWZmZXJPZmZzZXRzKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhTdGVuY2lsU3Rh
dGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitAQCAtMjE1OSwxMyArMjM1NSwxMyBAQCBi
b29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAg
ICAgbXRsOjpEZXB0aFN0ZW5jaWxEZXNjIGRzRGVzYyAgICAgICAgICAgICAgPSBtRGVwdGhTdGVu
Y2lsRGVzYzsKKyAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmcmVuZGVyUGFzc0Rlc2Mg
PSBtUmVuZGVyRW5jb2Rlci5yZW5kZXJQYXNzRGVzYygpOworIAorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIGRzRGVzYy5kZXB0
aFdyaXRlRW5hYmxlZCAgICA9IGZhbHNlOworICAgICAgICAgZHNEZXNjLmRlcHRoQ29tcGFyZUZ1
bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uQWx3YXlzOworICAgICB9CisgCistICAgIGlmICgh
cmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSkKKysgICAgaWYgKCFyZW5k
ZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAg
IGRzRGVzYy5mcm9udEZhY2VTdGVuY2lsLnJlc2V0KCk7CisgICAgICAgICBkc0Rlc2MuYmFja0Zh
Y2VTdGVuY2lsLnJlc2V0KCk7CitAQCAtMjE5Niw4ICsyMzkyLDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgYW5nbGU6OlJlc3Vs
dCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCistICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB4YmZQYXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQorIHsKKyAgICAgQVNTRVJUKG1S
ZW5kZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3Mg
dG9wb2xvZ3lDbGFzcyA9IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVN
b2RlKTsKK0BAIC0yMjE2LDI0ICsyNDEyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgcmVuZGVyUGFzc0Rlc2MucG9w
dWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MobUJsZW5kRGVzYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUmVuZGVyUGlwZWxp
bmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworIAorLSAgICAgICAgaWYgKHhmYlBhc3MpCistICAg
ICAgICB7CistICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQg
c2hhZGVyLgorLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5
cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CistICAgICAg
ICB9CistICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQo
KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyBJZiBYRkIgaXMgbm90IGFjdGl2ZSBhbmQg
cmFzdGVyaXplciBkaXNjYXJkIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZW11bGF0ZSB0aGUKKy0g
ICAgICAgICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRl
ciBtaWdodCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAorLSAgICAgICAgICAgIC8v
IE1ldGFsIGRvZXNuJ3QgYWxsb3cgcmFzdGVyaXphdGlvbiB0byBiZSBkaXNhYmxlZC4KKy0gICAg
ICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKy0gICAgICAg
ICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2Fy
ZDsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBt
UmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVuYWJsZWQ7CistICAgICAgICB9CisgICAgICAgICBtUmVuZGVyUGlw
ZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworKyAgICAg
ICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9CisrICAgICAgICAgICAg
KG1TdGF0ZS5pc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpID8gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0
aW9uOjpFbmFibGVkKTsKKyAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuYWxwaGFUb0NvdmVy
YWdlRW5hYmxlZCA9IG1TdGF0ZS5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAg
ICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuZW11bGF0ZUNvdmVyYWdlTWFzayAgICA9IG1TdGF0
ZS5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworIAorQEAgLTIyNDEsNyArMjQyMyw3IEBAIGJv
b2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAg
ICAgICAgICAgIG1EcmF3RnJhbWVidWZmZXItPmdldFN0YXRlKCkuZ2V0RW5hYmxlZERyYXdCdWZm
ZXJzKCkpOworICAgICB9CisgCistICAgICppc1BpcGVsaW5lRGVzY0NoYW5nZWQgPSBycHBDaGFu
Z2U7CisrICAgICpwaXBlbGluZURlc2NDaGFuZ2VkID0gcnBwQ2hhbmdlOworIAorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oCitpbmRleCBiMDBkZTFiLi4yNDE3MTIyIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorQEAgLTUyLDYgKzUyLDEwIEBAIGNsYXNzIERp
c3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgZWdsOjpFcnJvciB3YWl0Q2xp
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICAgZWdsOjpFcnJv
ciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKSBv
dmVycmlkZTsKKysgICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3Zl
cnJpZGU7CisgCisgICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dTdXJmYWNlKGNvbnN0IGVn
bDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csCitAQCAtOTYsMTEgKzEwMCw2IEBAIGNs
YXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgYm9vbCBpc1ZhbGlk
TmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdCBvdmVycmlkZTsK
KyAKKy0gICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlndXJhdGlvbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
Q2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3ZlcnJpZGU7
CistCisgICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92ZXJyaWRlOworIAor
ICAgICBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7CitAQCAtMTY1
LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAgICAg
dm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVU
ZXh0dXJlQ2FwcygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJlcygpOworKyAg
ICB2b2lkIGluaXRpYWxpemVMaW1pdGF0aW9ucygpOworKworICAgICBhbmdsZTo6UmVzdWx0IGlu
aXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CisgCisgICAgIG10bDo6QXV0b09iakNQdHI8aWQ8TVRM
RGV2aWNlPj4gbU1ldGFsRGV2aWNlID0gbmlsOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0Rpc3BsYXlNdGwubW0KK2luZGV4IDI0N2Q3NmEuLmMxNTljMDUgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KK0BAIC04LDEyICs4LDE0IEBACisgCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKKysjaW5jbHVk
ZSAiY29tbW9uL3N5c3RlbV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3Rl
bUluZm8uaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9EaXNwbGF5LmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1N5bmNNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1vbi5oIgorQEAgLTIyLDkgKzI0LDYyIEBACisgCisgI2luY2x1ZGUgIkVHTC9l
Z2xleHQuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKytjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVm
ZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJSRURfREVWSUNFIjsKKysjZW5kaWYKKytj
b25zdGV4cHIgY2hhciBrQU5HTEVUcmFuc2Zvcm1GZWVkYmFja0VudltdID0gIkFOR0xFX01FVEFM
X1hGQl9FTkFCTEUiOworKworIG5hbWVzcGFjZSByeAorIHsKKyAKKytzdGF0aWMgRUdMaW50IEdl
dERlcHRoU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6CisrICAg
ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2Ogor
KyAgICAgICAgICAgIHJldHVybiAxNjsKKysgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MjQ6CisrICAgICAgICAgICAgcmV0dXJuIDI0OworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiAyNDsKKysgICAgICAg
IGNhc2UgR0xfREVQVEgzMkZfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5hbGZv
cm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrc3RhdGljIEVH
TGludCBHZXRTdGVuY2lsU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQyNDoKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAg
ICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiA4Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5h
bGZvcm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgeworICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFj
b3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9y
IE1ldGFsIDIuMC4KK0BAIC01Nyw3ICsxMTIsNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxh
YmxlKCkKKyB9OworIAorIERpc3BsYXlNdGw6OkRpc3BsYXlNdGwoY29uc3QgZWdsOjpEaXNwbGF5
U3RhdGUgJnN0YXRlKQorLSAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBt
R2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorKyAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVN0
YXRlQ2FjaGUobUZlYXR1cmVzKSwgbVV0aWxzKHRoaXMpCisge30KKyAKKyBEaXNwbGF5TXRsOjp+
RGlzcGxheU10bCgpIHt9CitAQCAtNzgsMTAgKzEzMywyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyB7CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKy0gICAg
ICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVf
TVRMX0FVVE9SRUxFQVNFXTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nIGFuZ2xlUHJlZmVycmVkRGV2aWNlID0gYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtB
TkdMRVByZWZlcnJlZERldmljZUVudik7CisrICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZp
Y2UgIT0gIiIpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNBcnJheTxpZDxNVExEZXZpY2U+
PiAqZGV2aWNlcyA9IFtNVExDb3B5QWxsRGV2aWNlcygpIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07
CisrICAgICAgICAgICAgZm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKFtkZXZpY2UubmFtZS5sb3dlcmNhc2VT
dHJpbmcKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxvd2VyY2FzZVN0cmluZ10p
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcg
TWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZpY2UgbmFtZV0pOworKyAgICAgICAgICAgICAgICAgICAg
bU1ldGFsRGV2aWNlID0gW2RldmljZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9Cisr
ICAgICAgICB9CisrI2VuZGlmCisgICAgICAgICBpZiAoIW1NZXRhbERldmljZSkKKyAgICAgICAg
IHsKKy0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgICAgICAg
ICBtTWV0YWxEZXZpY2UgPSBbTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisgICAgICAgICB9CisgCisgICAgICAgICBtTWV0YWxEZXZpY2VWZW5k
b3JJZCA9IG10bDo6R2V0RGV2aWNlVmVuZG9ySWQobU1ldGFsRGV2aWNlKTsKK0BAIC04OSwxMiAr
MTYxLDEzIEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICAgICAgbUNtZFF1
ZXVlLnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9B
VVRPUkVMRUFTRV0pOworIAorICAgICAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworLQor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAgIGlmICghbUdsc2xhbmdJbml0
aWFsaXplZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBHbHNsYW5nSW5pdGlhbGl6ZSgpOwor
ICAgICAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgfQorKyNl
bmRpZgorIAorICAgICAgICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKKyAgICAg
ICAgIHsKK0BAIC0xMjAsMTIgKzE5MywxMyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworIAorICAgICBtTWV0YWxEZXZpY2VW
ZW5kb3JJZCA9IDA7CistCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAo
bUdsc2xhbmdJbml0aWFsaXplZCkKKyAgICAgeworICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsK
KyAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgfQorKyNlbmRpZgor
IH0KKyAKKyBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VMb3N0KCkKK0BAIC0xNzEsNiArMjQ1
LDE1IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICByZXR1cm4gZWdsOjpO
b0Vycm9yKCk7CisgfQorIAorK2VnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRC
dWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50
QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisreworKyAgICAvLyBUT0RPOiBG
aWxsIG91dCBwcm9wZXJseQorKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworIGVn
bDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdE5hdGl2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgRUdMaW50IGVuZ2luZSkKKyB7CisgICAgIFVOSU1QTEVNRU5URUQoKTsKK0BAIC0xODcsNyAr
MjcwLDggQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgU3VyZmFjZUltcGwgKkRp
c3BsYXlNdGw6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICByZXR1cm4gbmV3IFBCdWZm
ZXJTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBhdHRyaWJzKTsKKysgICAgVU5JTVBMRU1FTlRFRCgp
OworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwgKj4oMCk7CisgfQorIAorIFN1
cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMTk1LDE1ICsyNzksNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKyAgICAgcmV0dXJu
IG5ldyBJT1N1cmZhY2VTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBjbGllbnRCdWZmZXIsIGF0dHJp
YnMpOworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworLSAgICB9CistICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKyBT
dXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGl4bWFwU3VyZmFjZShjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMjQwLDE3ICszMTYsMTIgQEAgYm9vbCBJc01ldGFsRGlz
cGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKy1TaGFyZUdyb3Vw
SW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCgpCisteworLSAgICByZXR1cm4gbmV3
IFNoYXJlR3JvdXBNdGwoKTsKKy19CistCisgZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4
U3VwcG9ydGVkRVNWZXJzaW9uKCkgY29uc3QKKyB7CisgICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBv
cnRzIEdMRVMgMy4wIG9uIGlPUyBHUFUgZmFtaWx5IDQrIGZvciBub3cuCisgICAgIGlmIChzdXBw
b3J0c0VpdGhlckdQVUZhbWlseSg0LCAxKSkKKyAgICAgeworLSAgICAgICAgcmV0dXJuIG10bDo6
a01heFN1cHBvcnRlZEdMVmVyc2lvbjsKKysgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAw
KTsKKyAgICAgfQorICAgICByZXR1cm4gZ2w6OlZlcnNpb24oMiwgMCk7CisgfQorQEAgLTI2NSw2
ICszMzYsMTEgQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBu
ZXcgRUdMU3luY010bChhdHRyaWJzKTsKKyB9CisgCisrU2hhcmVHcm91cEltcGwgKkRpc3BsYXlN
dGw6OmNyZWF0ZVNoYXJlR3JvdXAoKQorK3sKKysgICAgcmV0dXJuIG5ldyBTaGFyZUdyb3VwSW1w
bCgpOworK30KKysKKyBlZ2w6OkVycm9yIERpc3BsYXlNdGw6Om1ha2VDdXJyZW50KGVnbDo6RGlz
cGxheSAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6
U3VyZmFjZSAqZHJhd1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLAorQEAgLTMyNiw3ICs0MDIsNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgY29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVH
TF9OT05FOworIAorICAgICAvLyBQYnVmZmVyCistICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFy
Z2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisrICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFyZ2V0ID0g
RUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgICBjb25maWcubWF4UEJ1ZmZlcldpZHRo
ICAgICA9IDQwOTY7CisgICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0gNDA5NjsKKyAg
ICAgY29uZmlnLm1heFBCdWZmZXJQaXhlbHMgICAgPSA0MDk2ICogNDA5NjsKK0BAIC0zNjEsMTMg
KzQzNyw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBjb25maWcu
Y29sb3JDb21wb25lbnRUeXBlID0gRUdMX0NPTE9SX0NPTVBPTkVOVF9UWVBFX0ZJWEVEX0VYVDsK
KyAKKy0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10gPSB7MCwgNH07CistCist
ICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQorLSAgICB7CistICAgICAg
ICBjb25maWcuc2FtcGxlcyAgICAgICA9IHNhbXBsZXM7CistICAgICAgICBjb25maWcuc2FtcGxl
QnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7CistCisgICAgIC8vIEJ1ZmZlciBzaXpl
cworICAgICBjb25maWcucmVkU2l6ZSAgICA9IDg7CisgICAgIGNvbmZpZy5ncmVlblNpemUgID0g
ODsKK0BAIC0zNzUsMjggKzQ0NCwxMiBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgICBjb25maWcuYnVmZmVyU2l6ZSA9IGNv
bmZpZy5yZWRTaXplICsgY29uZmlnLmdyZWVuU2l6ZSArIGNvbmZpZy5ibHVlU2l6ZSArIGNvbmZp
Zy5hbHBoYVNpemU7CisgCistICAgICAgICAvLyBXaXRoIERTCistICAgICAgICBjb25maWcuZGVw
dGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7CistCistICAg
ICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBECistICAgICAg
ICBjb25maWcuZGVwdGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9
IDA7CistICAgICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBT
CistICAgICAgICBjb25maWcuZGVwdGhTaXplICAgPSAwOworLSAgICAgICAgY29uZmlnLnN0ZW5j
aWxTaXplID0gODsKKysgICAgLy8gVGVzdHMgbGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVw
dGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYK
KysgICAgLy8gcmVuZGVyQ29uZmlnIGF0dHJpYnV0ZXMgYXJlIHNldCB0byBnbHU6OlJlbmRlckNv
bmZpZzo6RE9OVF9DQVJFCisrICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IEdldERlcHRoU2l6ZShj
b25maWcuZGVwdGhTdGVuY2lsRm9ybWF0KTsKKysgICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0
U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgIGNvbmZpZ3MuYWRk
KGNvbmZpZyk7CisgCistICAgICAgICAvLyBObyBEUworLSAgICAgICAgY29uZmlnLmRlcHRoU2l6
ZSAgID0gMDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7CistICAgICAgICBjb25m
aWdzLmFkZChjb25maWcpOworLSAgICB9CistCisgICAgIHJldHVybiBjb25maWdzOworIH0KKyAK
K0BAIC00MDksMjYgKzQ2Miw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICB9CisgfQorIAorLWVnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRCdWZmZXIo
Y29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVy
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWds
OjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisteworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKy0gICAgICAgICAg
ICBpZiAoIUlPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhjbGllbnRCdWZm
ZXIsIGF0dHJpYnMpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGVn
bDo6RWdsQmFkQXR0cmlidXRlKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFr
OworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworLSAgICAg
ICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZEF0dHJpYnV0ZSgpOworLSAgICB9CistICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKKy19CistCisgc3RkOjpzdHJpbmcgRGlzcGxheU10bDo6Z2V0UmVu
ZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CisgeworICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQor
QEAgLTUxMiwxMCArNTQ1LDE2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICBtTmF0aXZlQ2Fwcy5tYXhSZW5kZXJidWZmZXJTaXplICAgPSBtTmF0aXZlQ2Fwcy5tYXgyRFRl
eHR1cmVTaXplOworICAgICBtTmF0aXZlQ2Fwcy5taW5BbGlhc2VkUG9pbnRTaXplICAgPSAxOwor
ICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBw
b2ludCBzaXplIGV2ZW4gdGhvdWdoCistICAgIC8vIE1ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5w
ZGYgc2F5cyB0aGF0IG1heCBzdXBwb3J0ZWQgcG9pbnQgc2l6ZSBpcyA1MTEuIFdlIGxpbWl0IGl0
IHRvIDY0IGZvcgorLSAgICAvLyBub3cuCistICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgx
NgorKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhhdCBtYXggc3Vw
cG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKysgICAgLy8gb24g
SW50ZWwgYW5kIDY0IG9uIEFNRCBmb3Igbm93LgorKyAgICBpZiAoW21NZXRhbERldmljZS5nZXQo
KS5uYW1lIHJhbmdlT2ZTdHJpbmc6QCJJbnRlbCJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNpemUgPSAyNTU7Cisr
ICAgIH0KKysgICAgZWxzZQorKyAgICB7CisgICAgICAgICBtTmF0aXZlQ2Fwcy5tYXhBbGlhc2Vk
UG9pbnRTaXplID0gNjQ7CisrICAgIH0KKyAKKyAgICAgbU5hdGl2ZUNhcHMubWluQWxpYXNlZExp
bmVXaWR0aCA9IDEuMGY7CisgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAx
LjBmOworQEAgLTYxNSw2ICs2NTQsOSBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgbU5hdGl2ZUNhcHMubWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMg
PQorICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQ
QVJBVEVfQ09NUE9ORU5UUzsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQor
KyAgICBtTmF0aXZlQ2Fwcy5wcm9ncmFtQmluYXJ5Rm9ybWF0cy5wdXNoX2JhY2soR0xfUFJPR1JB
TV9CSU5BUllfQU5HTEUpOworKworICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3RhbmNlCisgICAg
IG1OYXRpdmVDYXBzLm1heENsaXBEaXN0YW5jZXMgPSA4OworIAorQEAgLTY0Nyw2ICs2ODksMTUg
QEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIG1OYXRpdmVFeHRlbnNpb25z
LnRleHR1cmVCb3JkZXJDbGFtcE9FUyAgPSBmYWxzZTsgIC8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IHRydWU7Cisg
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmRpc2NhcmRGcmFtZWJ1ZmZlciAgICAgPSB0cnVlOworKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQgYnV0IGV4cG9zZQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy50
ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKysKKysgICAgLy8gRVhUX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQorKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFu
ZFJlc29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgbUZlYXR1cmVzLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJiBtRmVhdHVyZXMuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJlbmRlclRvVGV4
dHVyZSA9IHRydWU7CisrICAgIH0KKyAKKyAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9taW5tYXgK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuYmxlbmRNaW5NYXggPSB0cnVlOworQEAgLTY2Miw4ICs3
MTMsOCBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgbU5hdGl2ZUV4dGVu
c2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBo
b3JlRmQgPSBmYWxzZTsKKyAKKy0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlz
QU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZDsKKy0g
ICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzRVhUICAgPSBtTmF0aXZlRXh0ZW5z
aW9ucy5pbnN0YW5jZWRBcnJheXNBTkdMRTsKKysgICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFu
Y2VkQXJyYXlzQU5HTEUgPSB0cnVlOworKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRB
cnJheXNFWFQgICA9IHRydWU7CisgCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnJvYnVzdEJ1ZmZl
ckFjY2Vzc0JlaGF2aW9yID0gZmFsc2U7CisgCitAQCAtNjg2LDYgKzczNyw5IEBAIGJvb2wgSXNN
ZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5lbGVtZW50
SW5kZXhVaW50T0VTID0gdHJ1ZTsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5T0VTID0gdHJ1ZTsKKysK
KyAgICAgLy8gR0xfQVBQTEVfY2xpcF9kaXN0YW5jZQorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5j
bGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CisgCitAQCAtNzEzLDExICs3NjcsMTcgQEAgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgCisgICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4
dGVuc2lvbnMuCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnNldFRleHR1cmVFeHRlbnNpb25TdXBw
b3J0KG1OYXRpdmVUZXh0dXJlQ2Fwcyk7CistCisrICAgIC8vIE1vZGlmeSBleHRlbnNpb25zIGJh
c2VkIG9mZiBvZiBzdXBwb3J0CisgICAgIC8vIERpc2FibGUgYWxsIGRlcHRoIGJ1ZmZlciBhbmQg
c3RlbmNpbCBidWZmZXIgcmVhZGJhY2sgZXh0ZW5zaW9ucyB1bnRpbCB3ZSBuZWVkIHRoZW0KKyAg
ICAgbU5hdGl2ZUV4dGVuc2lvbnMucmVhZERlcHRoTlYgICAgICAgICA9IGZhbHNlOworICAgICBt
TmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0gZmFsc2U7CisgICAgIG1OYXRp
dmVFeHRlbnNpb25zLmRlcHRoQnVmZmVyRmxvYXQyTlYgPSBmYWxzZTsKKysgICAgbU5hdGl2ZUV4
dGVuc2lvbnMudGV4dHVyZUNvbXByZXNzaW9uQVNUQ0xEUktIUiAmPSBzdXBwb3J0c0lPU0dQVUZh
bWlseSgyKTsKKyt9CisrCisrdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplTGltaXRhdGlvbnMo
KQorK3sKKysgICAgbU5hdGl2ZUxpbWl0YXRpb25zLm5vVmVydGV4QXR0cmlidXRlQWxpYXNpbmcg
PSB0cnVlOworIH0KKyAKKyB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0dXJlcygpCitA
QCAtNzc5LDYgKzgzOSw5IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICBB
TkdMRV9GRUFUVVJFX0NPTkRJVElPTigoJm1GZWF0dXJlcyksIGFsbG93U2VwYXJhdGVkRGVwdGhT
dGVuY2lsQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzT1NYICYmICFp
c0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CisgCisrICAgIG1GZWF0dXJlcy5lbXVsYXRlVHJh
bnNmb3JtRmVlZGJhY2suZW5hYmxlZCA9CisrICAgICAgICBhbmdsZTo6R2V0RW52aXJvbm1lbnRW
YXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKysKKyAgICAgYW5nbGU6
OlBsYXRmb3JtTWV0aG9kcyAqcGxhdGZvcm0gPSBBTkdMRVBsYXRmb3JtQ3VycmVudCgpOworICAg
ICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0dXJlcyk7Cisg
CitAQCAtNzg3LDYgKzg1MCwyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAK
KyBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCkKKyB7
CisrICAgICNpZmRlZiBBTkdMRV9NRVRBTF9YQ09ERV9CVUlMRFNfU0hBREVSUworKyAgICAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZv
TXRsKTsKKysgICAgICAgIAorKyAgICAKKysgICAgICAgIE5TU3RyaW5nICpwYXRoID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRsZVBhdGg7
CisrICAgICAgICBOU0Vycm9yICogZXJyb3IgPSBudWxscHRyOworKyAgICAgICAgbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVycyA9IFtnZXRNZXRhbERldmljZSgpIG5ld0Rl
ZmF1bHRMaWJyYXJ5V2l0aEJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGF0aF0gZXJy
b3I6JmVycm9yXTsKKysKKysgICAgICAgIGlmIChlcnJvciAmJiAhbURlZmF1bHRTaGFkZXJzQXN5
bmNJbmZvLT5kZWZhdWx0U2hhZGVycykKKysgICAgICAgIHsKKysgICAgICAgICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRVJSKCkgPDwg
IkludGVybmFsIGVycm9yOiBuZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGUgZmFpbGVkLiAiIDw8
IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uLlVURjhTdHJpbmc7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnNDb21w
aWxlRXJyb3IgPSBzdGQ6Om1vdmUoZXJyb3IpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpTdG9wOworKyAgICAgICAgICAgICAgICAgCisrICAgICAgICB9CisrICAgICAgICBt
RGVmYXVsdFNoYWRlcnNBc3luY0luZm8tPmNvbXBpbGVkID0gdHJ1ZTsKKysgICAgICAgIAorKyAg
ICAjZWxzZQorICAgICBtRGVmYXVsdFNoYWRlcnNBc3luY0luZm8ucmVzZXQobmV3IERlZmF1bHRT
aGFkZXJBc3luY0luZm9NdGwpOworIAorICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byBhc3lu
YyBpbmZvIHN0cnVjdCBzaW5jZSBpdCBtaWdodCBiZSByZWxlYXNlZCBpbiB0ZXJtaW5hdGUoKSwg
YnV0IHRoZQorQEAgLTgxNSw3ICs4OTksNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAKKyAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICB9
CistCisrICAgICNlbmRpZgorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKK2lu
ZGV4IGI0NThiZDkuLjVlNWNjZTkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvRnJhbWVCdWZmZXJNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLmgKK0BAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAorIGNs
YXNzIFJlbmRlckNvbW1hbmRFbmNvZGVyOworIH0gIC8vIG5hbWVzcGFjZSBtdGwKKyBjbGFzcyBD
b250ZXh0TXRsOworLWNsYXNzIFdpbmRvd1N1cmZhY2VNdGw7CisrY2xhc3MgU3VyZmFjZU10bDsK
KyAKKyBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyB7Cisg
ICBwdWJsaWM6CistICAgIEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRl
ICZzdGF0ZSwgYm9vbCBmbGlwWSwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcik7CisrICAg
IGV4cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKKyAgICAg
fkZyYW1lYnVmZmVyTXRsKCkgb3ZlcnJpZGU7CisgICAgIHZvaWQgZGVzdHJveShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtOTcsNyArOTksNyBAQCBjbGFzcyBG
cmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAKKyAgICAgZ2w6OlJlY3Rh
bmdsZSBnZXRDb21wbGV0ZVJlbmRlckFyZWEoKSBjb25zdDsKKyAgICAgaW50IGdldFNhbXBsZXMo
KSBjb25zdDsKKy0gICAgV2luZG93U3VyZmFjZU10bCAqZ2V0QXR0YWNoZWRCYWNrYnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKysgICAgU3VyZmFjZU10bFByb3RvY29sICpn
ZXRBdHRhY2hlZEJhY2tidWZmZXIoKSBjb25zdCB7IHJldHVybiBtQmFja2J1ZmZlcjsgfQorIAor
ICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFydGVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpIGNv
bnN0OworICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICplbnN1cmVSZW5kZXJQYXNzU3Rh
cnRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CitAQCAtMTYyLDYgKzE2NCwxMCBAQCBj
bGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJmRlc2MpOworIAorKyAg
ICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZUNvbG9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3QgY29sb3JJbmRleEdMKTsKKyAgICAgYW5nbGU6OlJlc3Vs
dCB1cGRhdGVEZXB0aFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCk7CitAQCAtMTY5LDExICsxNzUsMzcgQEAgY2xhc3MgRnJhbWVidWZmZXJN
dGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CisgCisrICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZWl0aGVyIHJldHVybnMgdGhlIHJlbmRlciB0YXJnZXQncyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUg
dGV4dHVyZSBpcyByZWFkYWJsZQorKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgdGV4
dHVyZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkg
dXNlZAorKyAgICAvLyBmb3IgcGFja2VkIGRlcHRoIHN0ZW5jaWwgd2hlcmUgcmVhZGluZyBzdGVu
Y2lsIHJlcXVpcmVzIGEgc3RlbmNpbCB2aWV3LiBIb3dldmVyIGlmIGEgdGV4dHVyZQorKyAgICAv
LyBoYXMgYm90aCByZW5kZXIgdGFyZ2V0LCBwaXhlbCBmb3JtYXQgdmlldyAmIHNoYWRlciByZWFk
YWJsZSB1c2FnZSBmbGFncywgdGhlcmUgd2lsbCBiZQorKyAgICAvLyBzb21lIGdsaXRjaGVzIGhh
cHBlbiBpbiBNZXRhbCBmcmFtZXdvcmsuCisrICAgIC8vIFNvIHRoZSBzb2x1dGlvbiBpcyBjcmVh
dGluZyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aXRob3V0IHBpeGVsIGZvcm1hdCB2aWV3IGZs
YWcgYnV0IGhhcworKyAgICAvLyByZW5kZXIgdGFyZ2V0IGZsYWcsIHRoZW4gZHVyaW5nIGJsaXR0
aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVyZSBpcyBjb3BpZWQgdG8gYW5vdGhlcgorKyAgICAvLyBp
bnRlcm1pZGlhdGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywgYnV0IG5v
dCByZW5kZXIgdGFyZ2V0IGZsYWcuCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2V0UmVhZGFibGVWaWV3
Rm9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRN
dGwgJnJ0dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0
aFZpZXcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlldywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xl
dmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmlld0FyZWEpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFja1BpeGVsc1BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQpIGNvbnN0
OworIAorKyAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZkc3RBbmds
ZUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0QnVmZmVyT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgKmRzdEJ1ZmZlcikgY29uc3Q7CisrCisgICAg
IC8vIE5PVEU6IHdlIGNhbm5vdCB1c2UgUmVuZGVyVGFyZ2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0
IGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZQorICAgICAvLyBkZXB0aCAmIHN0ZW5jaWwgYXR0YWNo
bWVudHMgYXMgb2Ygbm93LiBTZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgY291bGQgYmUgdXNlZnVs
IHRvCisgICAgIC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1BhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnQubWQuCitAQCAtMTg5LDggKzIyMSwxMCBAQCBjbGFzcyBGcmFtZWJ1
ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgLy8gYXMgYnkgYSBjb21wdXRl
IHBhc3MuCisgICAgIGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CisgCistICAg
IFdpbmRvd1N1cmZhY2VNdGwgKm1CYWNrYnVmZmVyID0gbnVsbHB0cjsKKysgICAgU3VyZmFjZU10
bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAgIGNvbnN0IGJvb2wgbUZsaXBZ
ICAgICAgICAgICAgICAgPSBmYWxzZTsKKysKKysgICAgbXRsOjpCdWZmZXJSZWYgbVJlYWRQaXhl
bEJ1ZmZlcjsKKyB9OworIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQoraW5kZXggODRlNDIyNy4uZDcxZGU3MiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5t
bQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCitA
QCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgKmNvbG9yT3V0ID0KKyAgICAgICAgIG10bDo6RW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvci50b01UTENsZWFyQ29sb3IoKSwgdGV4dHVy
ZS0+Z2V0Q29sb3JXcml0YWJsZU1hc2soKSk7CisgfQorKworK2NvbnN0IGdsOjpJbnRlcm5hbEZv
cm1hdCAmR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqcmVuZGVyVGFyZ2V0KQorK3sKKysgICAgR0xlbnVtIGltcGxGb3JtYXQ7CisrCisr
ICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKysgICAg
eworKyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCktPmFjdHVh
bEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKKysgICAgfQor
KyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGltcGxGb3JtYXQgPSBHTF9OT05FOworKyAgICB9
CisrCisrICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrfQorKworIH0KKyAKKyAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgorIEZy
YW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFj
a2J1ZmZlcikKKyAgICAgOiBGcmFtZWJ1ZmZlckltcGwoc3RhdGUpLCBtQmFja2J1ZmZlcihiYWNr
YnVmZmVyKSwgbUZsaXBZKGZsaXBZKQorIHsKKyAgICAgcmVzZXQoKTsKK0BAIC01NSw2ICs3Myw4
IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4
dHVyZSwKKyAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBu
dWxscHRyOworIAorICAgICBtUmVuZGVyUGFzc0ZpcnN0Q29sb3JBdHRhY2htZW50Rm9ybWF0ID0g
bnVsbHB0cjsKKysKKysgICAgbVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgfQorIAorIHZv
aWQgRnJhbWVidWZmZXJNdGw6OmRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitA
QCAtMTIyLDcgKzE0Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKKyB7CisgICAgIG10bDo6Q2xlYXJSZWN0
UGFyYW1zIGNsZWFyT3B0czsKKy0KKyAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JC
dWZmZXJzOworICAgICBpZiAoYnVmZmVyID09IEdMX0RFUFRIKQorICAgICB7CitAQCAtMTMzLDcg
KzE1Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJl
ZiAmdGV4dHVyZSwKKyAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChkcmF3YnVmZmVyKTsK
KyAgICAgICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFs
dWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgfQorLQorICAg
ICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRz
KTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCitAQCAtMTQ2LDcgKzE2NCw2IEBAIHZvaWQgT3ZlcnJp
ZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAKKyAgICAg
bXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOworICAgICBjbGVhck9wdHMuY2xlYXJDb2xv
ciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJd
LCB2YWx1ZXNbM10pOworLQorICAgICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29s
b3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC0xNTksNyAr
MTc2LDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVm
ICZ0ZXh0dXJlLAorICAgICBnbDo6RHJhd0J1ZmZlck1hc2sgY2xlYXJDb2xvckJ1ZmZlcnM7Cisg
ICAgIGlmIChidWZmZXIgPT0gR0xfU1RFTkNJTCkKKyAgICAgeworLSAgICAgICAgY2xlYXJPcHRz
LmNsZWFyU3RlbmNpbCA9IHZhbHVlc1swXSAmIG10bDo6a1N0ZW5jaWxNYXNrQWxsOworKyAgICAg
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRp
Y19jYXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkpOworICAgICB9CisgICAgIGVsc2UK
KyAgICAgeworQEAgLTE3Nyw3ICsxOTQsNyBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihj
b25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgeworICAgICBtdGw6OkNsZWFyUmVjdFBh
cmFtcyBjbGVhck9wdHM7CisgICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsKKy0g
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IHN0ZW5jaWwgJiBtdGw6OmtTdGVuY2lsTWFza0Fs
bDsKKysgICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcChzdGVuY2lsLCAwLCBz
dGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKKyAKKyAgICAgcmV0dXJu
IGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJhd0J1ZmZlck1hc2soKSwgJmNsZWFyT3B0cyk7Cisg
fQorQEAgLTE4NSwxMiArMjAyLDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3Qg
bXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmRnJh
bWVidWZmZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAorICAgICBjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgY29uc3QKKyB7CistICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKy0gICAgR0xlbnVtIHNpemVkRm9ybWF0
ICAgICAgID0gbVN0YXRlLmdldFJlYWRBdHRhY2htZW50KCktPmdldEZvcm1hdCgpLmluZm8tPnNp
emVkSW50ZXJuYWxGb3JtYXQ7CistICAgIGFuZ2xlOjpGb3JtYXRJRCBmb3JtYXRJRCA9IGFuZ2xl
OjpGb3JtYXQ6OkludGVybmFsRm9ybWF0VG9JRChzaXplZEZvcm1hdCk7CistICAgIGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBpeGVs
Rm9ybWF0KGZvcm1hdElEKTsKKy0gICAgR0xlbnVtIGltcGxGb3JtYXQgICAgICAgICAgICA9IG10
bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3Jt
YXQ7CistICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrICAgIHJldHVybiBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JS
ZWFkUmVuZGVyVGFyZ2V0KGNvbnRleHQpKTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6cmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC01OTAs
NiArNjAyLDkgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9y
bWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb250ZXh0LCB0
aGlzLCByZW5kZXJQYXNzQ2hhbmdlZCk7CisgICAgICAgICB9CisrCisrICAgICAgICAvLyBSZWNy
ZWF0ZSBwaXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgorKyAgICAgICAg
bVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTc0OCw3ICs3NjMsNyBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorIHZvaWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworLSAgICBpZiAoIW1CYWNrYnVmZmVyKQorKyAgICBpZiAoIW1C
YWNrYnVmZmVyIHx8IG1CYWNrYnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQorICAgICB7CisgICAg
ICAgICByZXR1cm47CisgICAgIH0KK0BAIC04MTIsNiArODI3LDkyIEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisr
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVWaWV3Rm9yUmVuZGVyVGFy
Z2V0KAorKyAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgY29uc3QgUmVuZGVy
VGFyZ2V0TXRsICZydHQsCisrICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorKyAg
ICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVwdGhWaWV3T3V0LAorKyAgICBtdGw6OlRleHR1
cmVSZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXdPdXQsCisrICAgIHVpbnQzMl90ICpyZWFkYWJsZVZp
ZXdMZXZlbCwKKysgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorKyAgICBnbDo6UmVj
dGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIG10bDo6VGV4dHVyZVJlZiBzcmNU
ZXh0dXJlID0gcnR0LmdldFRleHR1cmUoKTsKKysgICAgdWludDMyX3QgbGV2ZWwgICAgICAgICAg
ICAgPSBydHQuZ2V0TGV2ZWxJbmRleCgpLmdldCgpOworKyAgICB1aW50MzJfdCBzbGljZSAgICAg
ICAgICAgICA9IHJ0dC5nZXRMYXllckluZGV4KCk7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IHNs
aWNlIGlzIG5vdCB1c2VkIGF0bS4KKysgICAgQVNTRVJUKHNsaWNlID09IDApOworKworKyAgICBi
b29sIHJlYWRTdGVuY2lsID0gcmVhZGFibGVTdGVuY2lsVmlld091dDsKKysKKysgICAgaWYgKCFz
cmNUZXh0dXJlKQorKyAgICB7CisrICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsK
KysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorKyAgICAg
ICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gbnVsbHB0cjsKKysg
ICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhID0gcmVhZEFyZWE7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysKKysgICAgYm9vbCBz
a2lwQ29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKysgICAgaWYgKHJ0dC5n
ZXRGb3JtYXQoKS0+aGFzRGVwdGhBbmRTdGVuY2lsQml0cygpICYmIHJlYWRTdGVuY2lsKQorKyAg
ICB7CisrICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGggc3RlbmNpbCwg
YW5kIHdlIG5lZWQgc3RlbmNpbCB2aWV3LAorKyAgICAgICAgLy8gdGhlbiBpdCBtdXN0IHN1cHBv
cnQgY3JlYXRpbmcgZGlmZmVyZW50IGZvcm1hdCB2aWV3LgorKyAgICAgICAgc2tpcENvcHkgPSBz
a2lwQ29weSAmJiBzcmNUZXh0dXJlLT5zdXBwb3J0Rm9ybWF0VmlldygpOworKyAgICB9CisrCisr
ICAgIGlmIChza2lwQ29weSkKKysgICAgeworKyAgICAgICAgLy8gVGV4dHVyZSBzdXBwb3J0cyBz
dGVuY2lsIHZpZXcsIGp1c3QgdXNlIGl0IGRpcmVjdGx5CisrICAgICAgICBpZiAocmVhZGFibGVE
ZXB0aFZpZXdPdXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5j
aWxWaWV3T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdMZXZl
bCA9IGxldmVsOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0gc2xpY2U7CisrICAgICAg
ICAqcmVhZGFibGVWaWV3QXJlYSAgPSByZWFkQXJlYTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpICE9IE1UTFRleHR1
cmVUeXBlM0QpOworKworKyAgICAgICAgLy8gVGV4dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNp
bCB2aWV3IG9yIG5vdCBzaGFkZXIgcmVhZGFibGUsIGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKysg
ICAgICAgIC8vIHRleHR1cmUgdGhhdCBzdXBwb3J0cyBzdGVuY2lsIHZpZXcgYW5kIHNoYWRlciBy
ZWFkLgorKyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0gc3JjVGV4dHVy
ZS0+Z2V0UmVhZGFibGVDb3B5KAorKyAgICAgICAgICAgIGNvbnRleHRNdGwsIGNvbnRleHRNdGwt
PmdldEJsaXRDb21tYW5kRW5jb2RlcigpLCBsZXZlbCwgc2xpY2UsCisrICAgICAgICAgICAgTVRM
UmVnaW9uTWFrZTJEKHJlYWRBcmVhLngsIHJlYWRBcmVhLnksIHJlYWRBcmVhLndpZHRoLCByZWFk
QXJlYS5oZWlnaHQpKTsKKysKKysgICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRN
dGwsIGZvcm1hdGFibGVWaWV3KTsKKysKKysgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091
dCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdPdXQgPSBmb3Jt
YXRhYmxlVmlldzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0g
Zm9ybWF0YWJsZVZpZXctPmdldFN0ZW5jaWxWaWV3KCk7CisrICAgICAgICB9CisrCisrICAgICAg
ICAqcmVhZGFibGVWaWV3TGV2ZWwgPSAwOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0g
MDsKKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IGdsOjpSZWN0YW5nbGUoMCwgMCwgcmVh
ZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpwcmVwYXJlUmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBh
c3NEZXNjICpwRGVzY091dCkKKyB7CitAQCAtODMyLDkgKzkzMyw5IEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgICAgICBpZiAoY29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICB7Cisg
ICAgICAgICAgICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
KCZjb2xvckF0dGFjaG1lbnQpOworKyAgICAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6
Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJlbmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxl
cygpKTsKKyAKKyAgICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6Om1h
eChkZXNjLm51bUNvbG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOworLSAgICAgICAg
ICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKKyAKKyAgICAgICAgICAgICBpZiAoIW1S
ZW5kZXJQYXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQpCisgICAgICAgICAgICAgeworQEAg
LTg2MiwyMiArOTYzLDI5IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBh
bmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisgICAgICAgICBtRGVw
dGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLmRlcHRoQXR0
YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1w
bGVDb3VudCwgbURlcHRoUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOworICAgICB9
CistICAgIGVsc2UKKy0gICAgeworLSAgICAgICAgZGVzYy5kZXB0aEF0dGFjaG1lbnQucmVzZXQo
KTsKKy0gICAgfQorIAorICAgICBpZiAobVN0ZW5jaWxSZW5kZXJUYXJnZXQpCisgICAgIHsKKyAg
ICAgICAgIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygm
ZGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3Rk
OjptYXgoZGVzYy5zYW1wbGVDb3VudCwgbVN0ZW5jaWxSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNh
bXBsZXMoKSk7CisgICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OworK30KKysKKysvLyBPdmVycmlkZSBjbGVhciBjb2xvciBiYXNlZCBvbiB0ZXh0dXJlJ3Mgd3Jp
dGUgbWFzaworK3ZvaWQgRnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpCisreworKyAgICBp
ZiAodGV4dHVyZSkKKysgICAgeworKyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFs
cGhhQ2xlYXJDb2xvcihjbGVhckNvbG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygp
KTsKKysgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0gICAgICAgIGRlc2Muc3RlbmNpbEF0dGFj
aG1lbnQucmVzZXQoKTsKKysgICAgICAgICpjb2xvck91dCA9IGNsZWFyQ29sb3I7CisgICAgIH0K
Ky0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKyBhbmdsZTo6
UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3AoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCitAQCAtOTIzLDcgKzEwMzEsNyBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhm
bGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgor
IAorICAgICAgICAgbXRsOjpSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRh
Y2htZW50ID0KKyAgICAgICAgICAgICB0ZW1wRGVzYy5jb2xvckF0dGFjaG1lbnRzW2NvbG9ySW5k
ZXhHTF07CistICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0
dGFjaG1lbnQudGV4dHVyZTsKKysgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVy
ZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CisgCisgICAgICAgICBpZiAoY2xlYXJDb2xv
ckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQorICAgICAgICAgeworQEAgLTk2Niw3ICsxMDc0
LDcgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBv
dXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAgICAgIG10bDo6UmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmNvbG9yQXR0YWNobWVudCA9CisgICAgICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsKKy0gICAgICAgIGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlOwor
KyAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50
LnRleHR1cmUoKTsKKyAKKyAgICAgICAgIGlmIChjbGVhckNvbG9yQnVmZmVycy50ZXN0KGNvbG9y
SW5kZXhHTCkpCisgICAgICAgICB7CitAQCAtMTE5Myw4ICsxMzAxLDkgQEAgUGFja1BpeGVsc1Bh
cmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5y
ZXZlcnNlUm93T3IKKyAgICAgZ2w6OlJlY3RhbmdsZSBmbGlwcGVkQXJlYSA9IGdsQXJlYTsKKyAg
ICAgaWYgKG1GbGlwWSkKKyAgICAgeworLSAgICAgICAgZmxpcHBlZEFyZWEueSA9IHJlYWRSVC0+
Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVhZFJULT5nZXRMZXZlbEluZGV4KCkpIC0gZmxpcHBlZEFy
ZWEueSAtCistICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZEFyZWEuaGVpZ2h0OworKyAg
ICAgICAgZmxpcHBlZEFyZWEueSA9CisrICAgICAgICAgICAgcmVhZFJULT5nZXRUZXh0dXJlKCkt
PmhlaWdodChyZWFkUlQtPmdldExldmVsSW5kZXgoKSkgLQorKyAgICAgICAgICAgIGZsaXBwZWRB
cmVhLnkgLSBmbGlwcGVkQXJlYS5oZWlnaHQ7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGZsaXBw
ZWRBcmVhOworQEAgLTEyMTEsNyArMTMyMCw2IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZs
aXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisg
ICAgIHsKKyAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAgfQor
LQorICAgICBpZiAocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gcmVhZFBpeGVsc1RvUEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMs
IHJlbmRlclRhcmdldCk7CitAQCAtMTI3OSwxOSArMTM4NywzNiBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dE10bCwgcGFja1BpeGVsc1Bh
cmFtcy5vZmZzZXQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAg
ICAgICAgICAgICAgICAgICAgR0xfSU5WQUxJRF9PUEVSQVRJT04pOworLSAgICBjb25zdCB1aW50
MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAgICA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4
ZWxzUGFyYW1zLm9mZnNldCk7CistICAgIGNvbnN0IHVpbnQzMl90IGRzdEJ1ZmZlclJvd1BpdGNo
ICAgID0gcGFja1BpeGVsc1BhcmFtcy5vdXRwdXRQaXRjaDsKKy0gICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmZHN0QW5nbGVGb3JtYXQgPSAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9ybWF0OworLSAg
ICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRlciAgICAgICAgICA9IHBhY2tQaXhlbHNQYXJhbXMu
cmV2ZXJzZVJvd09yZGVyOworKyAgICB1aW50MzJfdCBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4ocGFja1BpeGVsc1BhcmFtcy5vZmZzZXQpOworIAorICAgICBCdWZmZXJNdGwgKnBhY2tC
dWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKTsKKyAg
ICAgbXRsOjpCdWZmZXJSZWYgZHN0QnVmZmVyID0gcGFja0J1ZmZlck10bC0+Z2V0Q3VycmVudEJ1
ZmZlcigpOworIAorKyAgICByZXR1cm4gcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnRleHQsIGFyZWEs
IHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhY2tQaXhlbHNQYXJhbXMuZGVzdEZvcm1hdCwgb2Zm
c2V0LCBwYWNrUGl4ZWxzUGFyYW1zLm91dHB1dFBpdGNoLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZkc3RCdWZmZXIpOworK30KKysKKythbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmFyZWEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2VSb3dP
cmRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNldCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgZHN0QnVmZmVyUm93UGl0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVmZmVyKSBjb25zdAor
K3sKKysgICAgQVNTRVJUKHJlbmRlclRhcmdldCk7CisrCisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrCisgICAgIGNvbnN0IG10bDo6Rm9ybWF0
ICZyZWFkRm9ybWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOworICAgICBj
b25zdCBhbmdsZTo6Rm9ybWF0ICZyZWFkQW5nbGVGb3JtYXQgPSByZWFkRm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCk7CisgCisgICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVyVGFy
Z2V0LT5nZXRUZXh0dXJlKCk7CisgCisrICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZkc3RCdWZm
ZXIgPSAqcERzdEJ1ZmZlcjsKKysKKyAgICAgaWYgKGRzdEFuZ2xlRm9ybWF0LmlkICE9IHJlYWRB
bmdsZUZvcm1hdC5pZCB8fCB0ZXh0dXJlLT5zYW1wbGVzKCkgPiAxIHx8CisgICAgICAgICAoZHN0
QnVmZmVyT2Zmc2V0ICUgZHN0QW5nbGVGb3JtYXQucGl4ZWxCeXRlcykgfHwKKyAgICAgICAgIChk
c3RCdWZmZXJPZmZzZXQgJSBtdGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkp
CitAQCAtMTM1OSw4ICsxNDg0LDggQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFy
ZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAg
ICAgICAgICB1aW50MzJfdCBidWZmZXJSb3dPZmZzZXQgPSBkc3RCdWZmZXJPZmZzZXQ7CisgICAg
ICAgICAgICAgLy8gQ29weSBwaXhlbHMgcm93IGJ5IHJvdworLSAgICAgICAgICAgIGZvciAoaW50
IHIgPSBzdGFydFJvdywgY29waWVkUm93cyA9IDA7IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsK
Ky0gICAgICAgICAgICAgICAgICsrY29waWVkUm93cywgLS1yLCBidWZmZXJSb3dPZmZzZXQgKz0g
ZHN0QnVmZmVyUm93UGl0Y2gpCisrICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0YXJ0Um93LCBp
ID0gMDsgaSA8IGFyZWEuaGVpZ2h0OworKyAgICAgICAgICAgICAgICAgKytpLCAtLXIsIGJ1ZmZl
clJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkKKyAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgIHNyY1Jvd1JlZ2lvbi55ID0gcjsKKyAKK0BAIC0xMzc1LDUgKzE1MDAsNCBAQCBQ
YWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBp
dGNoLCBwYWNrLnJldmVyc2VSb3dPcgorIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorLQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lP
U3VyZmFjZVN1cmZhY2VNdGwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
Ljk1NDhlNWQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKK0BAIC0wLDAgKzEsMTI2IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrCisrI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2VSZWYuaD4KKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9TdXJmYWNlTXRsLmgiCisrCisrbmFtZXNwYWNlIG1ldGFsCisreworK2NsYXNzIEF0dHJp
YnV0ZU1hcDsKKyt9ICAvLyBuYW1lc3BhY2UgbWV0YWwKKysKKytuYW1lc3BhY2UgcngKKyt7Cisr
CisrY2xhc3MgRGlzcGxheU1UTDsKKysKKytjbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVi
bGljIFN1cmZhY2VNdGxQcm90b2NvbAorK3sKKysgIHB1YmxpYzoKKysgICAgSU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBF
R0xDbGllbnRCdWZmZXIgYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVn
bDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKKysgICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBv
dmVycmlkZTsKKysKKysgICAgdm9pZCBkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxh
eSkgb3ZlcnJpZGU7CisrCisrICAgIGVnbDo6RXJyb3IgaW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkpIG92ZXJyaWRlOworKyAgICBGcmFtZWJ1ZmZlckltcGwgKmNyZWF0ZURl
ZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVy
U3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVnbDo6RXJyb3IgdW5N
YWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVn
bDo6RXJyb3Igc3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAg
IGVnbDo6RXJyb3IgcG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMaW50IHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xp
bnQgd2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBv
dmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdM
aW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciBi
aW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciByZWxlYXNl
VGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJy
aWRlOworKyAgICBlZ2w6OkVycm9yIGdldFN5bmNWYWx1ZXMoRUdMdWludDY0S0hSICp1c3QsIEVH
THVpbnQ2NEtIUiAqbXNjLCBFR0x1aW50NjRLSFIgKnNiYykgb3ZlcnJpZGU7CisrICAgIGVnbDo6
RXJyb3IgZ2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpkZW5vbWluYXRvcikg
b3ZlcnJpZGU7CisrICAgIHZvaWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3Zl
cnJpZGU7CisrICAgIHZvaWQgc2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lkdGgpIG92ZXJyaWRlOwor
KyAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpIG92ZXJyaWRlOworKworKyAg
ICAvLyBXaWR0aCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysg
ICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIC8vIEhlaWdodCBjYW4g
Y2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysgICAgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0IG92ZXJyaWRlOworKworKyAgICBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIEVHTGludCBnZXRTd2FwQmVoYXZpb3IoKSBj
b25zdCBvdmVycmlkZTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVy
VGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJ
bmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKKysK
KysgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJl
Q3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJh
d2FibGVPdXQpIG92ZXJyaWRlOworKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDE7IH0KKysgICAgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBhbmdsZTo6UmVzdWx0IGVu
c3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworKyAgICB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0
dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7IH0KKysKKysgIHByaXZh
dGU6CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tpbmdUZXh0dXJl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVU
ZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBp
bml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQg
dGV4dHVyZSk7CisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TX1NJTVVMQVRPUikK
KysgICAgSU9TdXJmYWNlTG9ja09wdGlvbnMgZ2V0SU9TdXJmYWNlTG9ja09wdGlvbnMoKSBjb25z
dDsKKysjZW5kaWYKKysKKysgICAgQ29udGV4dE10bCAqY29udGV4dE1UTDsKKysgICAgSU9TdXJm
YWNlUmVmIG1JT1N1cmZhY2U7CisrICAgIG10bDo6VGV4dHVyZVJlZiBtSU9TdXJmYWNlVGV4dHVy
ZTsKKysgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlVmlldzsKKysgICAgbXRs
OjpGb3JtYXQgbUZvcm1hdDsKKysgICAgbXRsOjpGb3JtYXQgbUludGVybmFsRm9ybWF0OworKyAg
ICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKKysgICAgYm9vbCBtSU9TdXJmYWNlVGV4
dHVyZUNyZWF0ZWQ7CisrICAgIGludCBtV2lkdGg7CisrICAgIGludCBtSGVpZ2h0OworKyAgICBp
bnQgbVBsYW5lOworKyAgICBpbnQgbUZvcm1hdEluZGV4OworKyAgICBpbnQgbVJvd1N0cmlkZUlu
UGl4ZWxzOworKworKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisr
ICAgIEdMdWludCBtQm91bmRUZXh0dXJlSUQ7CisrICAgIGJvb2wgbVVwbG9hZEZyb21JT1N1cmZh
Y2U7CisrICAgIGJvb2wgbVJlYWRiYWNrVG9JT1N1cmZhY2U7CisrI2VuZGlmCisrfTsKKysKKyt9
ICAvLyBuYW1lc3BhY2UgcngKKysKKysjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VB
R0xfSU9TVVJGQUNFU1VSRkFDRUVBR0xfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k
ZXggMDAwMDAwMC4uOGI5NDg1OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwubW0KK0BAIC0wLDAgKzEsNDY3IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrLy8gSU9TdXJmYWNlU3VyZmFjZU10bC5tbToKKysvLyAgICBJbXBsZW1l
bnRzIHRoZSBjbGFzcyBtZXRob2RzIGZvciBJT1N1cmZhY2VTdXJmYWNlTXRsLgorKy8vCisrCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCIK
KysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisrI2luY2x1ZGUgImxpYkFO
R0xFL0Rpc3BsYXkuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvU3VyZmFjZS5oIgorKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgorKworKy8vIENvbXBpbGVyIGNhbiB0dXJuIG9u
IHByb2dyYW1tYXRpY2FsIGZyYW1lIGNhcHR1cmUgaW4gcmVsZWFzZSBidWlsZCBieSBkZWZpbmlu
ZworKy8vIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUgZmxhZy4KKysjaWYgZGVmaW5lZChOREVC
VUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCisrIyAgICBkZWZpbmUg
QU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIDAKKysjZWxzZQorKyMgICAgZGVmaW5l
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAxCisrI2VuZGlmCisrbmFtZXNwYWNl
IHJ4CisreworKworK25hbWVzcGFjZQorK3sKKysKKytzdHJ1Y3QgSU9TdXJmYWNlRm9ybWF0SW5m
bworK3sKKysgICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworKyAgICBHTGVudW0gdHlwZTsKKysg
ICAgYW5nbGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworKyAgICBhbmdsZTo6Rm9ybWF0SUQgaW50
ZXJuYWxQaXhlbEZvcm1hdDsKKyt9OworKworK3N0YXRpYyBjb25zdCBJT1N1cmZhY2VGb3JtYXRJ
bmZvIGtJT1N1cmZhY2VGb3JtYXRzW10gPSB7CisrICAgIHtHTF9SRUQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19
LAorKyAgICB7R0xfUjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNl9VSU5ULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwKKysgICAge0dMX1JHLCBH
TF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk0sIGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOF9VTk9STX0sCisrICAgIHtHTF9SR0IsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xl
OjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk19LAorKyAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJ
RDo6QjhHOFI4QThfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JN
fSwKKysgICAge0dMX1JHQjEwX0EyLCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsIGFu
Z2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6
OlIxMEcxMEIxMEEyX1VOT1JNfSwKKysgICAge0dMX1JHQkEsIEdMX0hBTEZfRkxPQVQsIGFuZ2xl
OjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FULAorKyAgICAgYW5nbGU6OkZvcm1hdElEOjpS
MTZHMTZCMTZBMTZfRkxPQVR9LAorK307CisrCisraW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRl
eChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQorK3sKKysgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9y
bWF0cykpOyArK2kpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdEluZm8gPSBr
SU9TdXJmYWNlRm9ybWF0c1tpXTsKKysgICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9y
bWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGkpOworKyAgICAgICAg
fQorKyAgICB9CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLy8gVE9ETyhqY3VubmluZ2hhbSkg
OiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJlZHVjZSBjb3B5K3Bhc3RlZCBjb2Rl
CisrCisrQU5HTEVfTVRMX1VOVVNFRAorK2Jvb2wgSXNGcmFtZUNhcHR1cmVFbmFibGVkKCkKKyt7
CisrI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuIGZh
bHNlOworKyNlbHNlCisrICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBmcmFtZSBjYXB0dXJlIHByb2dy
YW1tYXRpY2FsbHkgaWYgdGhlIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUKKysgICAgLy8gZW52
aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzbG93IGRvd24gdGhlIHJl
bmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworKyAgICAvLyBmaW5lbHkgY29udHJvbCB3aGV0
aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBmb3IgcGFydGljdWxhciBhcHBsaWNh
dGlvbiBvciBub3QuCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVu
digiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSIpOworKyAgICBzdGF0aWMgY29uc3QgYm9vbCBl
bmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBmYWxzZTsKKysKKysgICAg
cmV0dXJuIGVuYWJsZWQ7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzdGQ6
OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKKyt7CisrI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuICIiOworKyNlbHNlCisrICAgIGF1dG8gdmFy
ICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkVfRklMRSIpOworKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6
ICIiOworKworKyAgICByZXR1cm4gZmlsZVBhdGg7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01U
TF9VTlVTRUQKKytzaXplX3QgTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5H
TEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisr
ICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfTUFYIik7CisrICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJh
bWVzID0gdmFyID8gc3RkOjphdG9pKHZhcikgOiAxMDA7CisrCisrICAgIHJldHVybiBtYXhGcmFt
ZXM7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzaXplX3QgTWluQWxsb3dl
ZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFC
TEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAg
ICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9NSU4iKTsKKysg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFtZSA9IHZhciA/IHN0ZDo6YXRvaSh2YXIpIDog
MDsKKysKKysgICAgcmV0dXJuIG1pbkZyYW1lOworKyNlbmRpZgorK30KKysKKytBTkdMRV9NVExf
VU5VU0VECisrYm9vbCBGcmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpCisreworKyNpZiAhQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiBmYWxzZTsKKysjZWxzZQor
KyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisrICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3Bl
RGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZpY2UiKSA9PSAwKSA6IGZhbHNlOworKwor
KyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVT
RUQKKytzdGQ6OmF0b21pYzxzaXplX3Q+IGdGcmFtZUNhcHR1cmVkKDApOworKworK0FOR0xFX01U
TF9VTlVTRUQKKyt2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdWV1ZSkKKyt7CisrI2lmIEFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorKyAgICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxl
ZCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgaWYgKGdGcmFt
ZUNhcHR1cmVkID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuOworKyAgICB9CisrCisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdl
ciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAgIGlmIChj
YXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgcmV0dXJuOworKyAg
ICB9CisrCisrICAgIGdGcmFtZUNhcHR1cmVkKys7CisrCisrICAgIGlmIChnRnJhbWVDYXB0dXJl
ZCA8IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuOwor
KyAgICB9CisrCisrIyAgICBpZmRlZiBfX01BQ18xMF8xNQorKyAgICBpZiAoQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQorKyAgICB7CisrICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisrCisrICAgICAgICBOU0Vycm9yICplcnJvcjsKKysg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisrICAg
ICAgICB9CisrICAgIH0KKysgICAgZWxzZQorKyMgICAgZW5kaWYgIC8vIF9fTUFDXzEwXzE1Cisr
ICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQor
KyAgICB7CisrICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3Ig
PSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVE
ZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworKworKyAgICAg
ICAgTlNFcnJvciAqZXJyb3I7CisrICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENh
cHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVy
cm9yICVAIiwgZXJyb3IpOworKyAgICAgICAgfQorKyAgICB9CisrI2VuZGlmICAvLyBBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyt9CisrCisrdm9pZCBTdGFydEZyYW1lQ2FwdHVy
ZShDb250ZXh0TXRsICpjb250ZXh0KQorK3sKKysgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5nZXQoKSk7CisrfQorKwor
K3ZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKysgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJl
TWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAg
IGlmIChjYXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgW2NhcHR1
cmVNYW5hZ2VyIHN0b3BDYXB0dXJlXTsKKysgICAgfQorKyNlbmRpZgorK30KKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrSU9TdXJmYWNlU3VyZmFjZU10bDo6SU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0
cmlidXRlTWFwICZhdHRyaWJzKQorKyAgICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKKyt7
CisrICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1cmZhY2Ugc28gaXQgZG9lc24ndCBn
ZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMuCisrICAgIG1JT1N1cmZhY2UgPSBy
ZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJlZj4oYnVmZmVyKTsKKysgICAgQ0ZSZXRhaW4obUlP
U3VyZmFjZSk7CisrCisrICAgIC8vIEV4dHJhY3QgYXR0cmlicyB1c2VmdWwgZm9yIHRoZSBjYWxs
IHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisrICAgIG1XaWR0aCAgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworKyAgICBtSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisrICAgIG1QbGFuZSAgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKysgICAgLy8g
SG9wZWZ1bGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHJvdyBpcyBhbHdheXMgYW4gaW50ZWdl
ciBudW1iZXIgb2YgcGl4ZWxzLiBXZSB1c2UKKysgICAgLy8gZ2xSZWFkUGl4ZWxzIHRvIGZpbGwg
dGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4gb25seSBzdXBwb3J0IHN0
cmlkZXMgdGhhdCBhcmUKKysgICAgLy8gYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxzLgorKyAg
ICBBU1NFUlQoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFu
ZSkgJQorKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUo
bUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorKyAgICAgICAgICAgMCk7CisrICAgIG1Sb3dTdHJpZGVJ
blBpeGVscyA9IHN0YXRpY19jYXN0PGludD4oSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5l
KG1JT1N1cmZhY2UsIG1QbGFuZSkgLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUobUlPU3VyZmFjZSwg
bVBsYW5lKSk7CisrCisrICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0
KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7CisrICAgIEVHTEF0dHJpYiB0eXBl
ICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworKyAgICBt
Rm9ybWF0SW5kZXggPQorKyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19j
YXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsK
KysgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKysgICAgbUZvcm1hdCAgICAgICAgID0g
ZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5w
aXhlbEZvcm1hdCk7CisrICAgIG1JbnRlcm5hbEZvcm1hdCA9IGRpc3BsYXktPmdldFBpeGVsRm9y
bWF0KGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF0uaW50ZXJuYWxQaXhlbEZvcm1hdCk7
CisrfQorKworK0lPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRsKCkKKyt7
CisrICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKKysgICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKysgICAgeworKyAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworKyAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CisrICAgIH0KKyt9CisrCisrdm9pZCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkge30KKysKKytlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KQorK3sKKysgICAgRGlzcGxheU10bCAqZGlzcGxheU10bCAgICA9IG10bDo6R2V0SW1w
bChkaXNwbGF5KTsKKysgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRpc3BsYXlNdGwt
PmdldE1ldGFsRGV2aWNlKCk7CisrCisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKG1ldGFsRGV2aWNl
LCBkaXNwbGF5TXRsLT5jbWRRdWV1ZSgpLmdldCgpKTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJv
cigpOworK30KKysKKytGcmFtZWJ1ZmZlckltcGwgKklPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0
ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpCisreworKyAgICBhdXRvIGZibyA9IG5l
dyBGcmFtZWJ1ZmZlck10bChzdGF0ZSwgLyogZmxpcFkgKi8gdHJ1ZSwgLyogYmFja2J1ZmZlciAq
LyB0aGlzKTsKKysgICAgcmV0dXJuIGZibzsKKyt9CisrCisrZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAg
IFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworKyAgICByZXR1cm4gZWdsOjpOb0Vycm9y
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6dW5NYWtlQ3VycmVu
dChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIFN0b3BGcmFtZUNhcHR1cmUo
KTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworK30KKysKKytlZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisreworKyAg
ICBTdG9wRnJhbWVDYXB0dXJlKCk7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6
OkdldEltcGwoY29udGV4dCk7CisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOwor
KyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNl
U3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGlu
dCBoZWlnaHQpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVn
bEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnF1
ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCisr
eworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2Vzcygp
OworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQorK3sKKysKKysgICAg
YW5nbGU6OlJlc3VsdCByZXMgPSBjcmVhdGVCYWNraW5nVGV4dHVyZShjb250ZXh0KTsKKysgICAg
aWYgKHJlcyA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKysgICAgICAgIHJldHVybiBlZ2w6
Ok5vRXJyb3IoKTsKKysgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNz
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cmVsZWFzZVRleElt
YWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQorK3sKKysgICAg
Ly8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50YXRpb24KKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgaWYgKGNvbnRleHRNdGwtPmZsdXNo
KGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorKyAgICB7CisrICAgICAgICBt
SU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSBmYWxzZTsKKysgICAgICAgIHJldHVybiBlZ2w6Ok5v
RXJyb3IoKTsKKysgICAgfQorKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKKyt9Cisr
CisrZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2
NEtIUiAqdXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0x1aW50NjRLSFIgKm1zYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7
CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElP
U3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1lcmF0b3IsIEVHTGludCAq
ZGVub21pbmF0b3IpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworK30KKysKKyt2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldFN3
YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7Cisr
fQorKworK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lk
dGgpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrfQorKworK3ZvaWQgSU9TdXJmYWNlU3Vy
ZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKKyt7CisrICAgIFVOSU1QTEVN
RU5URUQoKTsKKyt9CisrCisrLy8gd2lkdGggYW5kIGhlaWdodCBjYW4gY2hhbmdlIHdpdGggY2xp
ZW50IHdpbmRvdyByZXNpemluZworK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRXaWR0
aCgpIGNvbnN0CisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdMaW50PihtV2lkdGgpOwor
K30KKysKKytFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVpZ2h0KCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDxFR0xpbnQ+KG1IZWlnaHQpOworK30KKysKKytFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QK
Kyt7CisrICAgIHJldHVybiBFR0xfRkFMU0U7CisrfQorKworK0VHTGludCBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIEVHTF9CVUZG
RVJfREVTVFJPWUVEOworK30KKysKKythbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorKyAgICBHTGVudW0gYmluZGluZywKKysgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmlt
YWdlSW5kZXgsCisrICAgIEdMc2l6ZWkgc2FtcGxlcywKKysgICAgRnJhbWVidWZmZXJBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCisreworKyAgICBBTkdMRV9UUlkoZW5zdXJlVGV4dHVy
ZUNyZWF0ZWQoY29udGV4dCkpOworKyAgICAqcnRPdXQgPSAmbVJlbmRlclRhcmdldDsKKysgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKythbmdsZTo6UmVzdWx0IElP
U3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkKKyt7CisrICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VT
dXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKKyt7CisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9
CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4
dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIG10bDo6VGV4dHVyZVJl
ZiBtVGVtcG9yYXJ5U3VyZmFjZVJlZjsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZVRleHR1cmUoY29u
dGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1UZW1wb3JhcnlTdXJmYWNl
UmVmKSk7CisrICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5kIHRoZSBiYXNlIGZvcm1h
dCBvZiB0aGUgdGV4dHVyZS4KKysgICAgbUlPU3VyZmFjZVRleHR1cmUgPQorKyAgICAgICAgbVRl
bXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybSk7CisrICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1JT1N1cmZhY2VUZXh0
dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5hbEZvcm1hdCk7CisrICAg
IG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IHRydWU7CisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjplbnN1cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmICghbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyttdGw6OlRleHR1cmVSZWYgSU9TdXJmYWNl
U3VyZmFjZU10bDo6Z2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmIChlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb250ZXh0KSA9PSBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1JT1N1cmZhY2VUZXh0
dXJlOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKythbmdsZTo6UmVzdWx0
IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFy
Z2V0T25seSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KQorK3sKKysgICAgQ29udGV4dE10bCAqY29u
dGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgQU5HTEVfVFJZKG10bDo6VGV4
dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoY29udGV4dE10bCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBtSU9TdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworK30KKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1Byb2dyYW1NdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFt
TXRsLmgKK2luZGV4IDM4OWVjZTcuLmViOWJiMDEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5oCitAQCAtMjAsMTIgKzIwLDEzIEBACisgI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCistI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgorIAorIG5hbWVzcGFjZSByeAorIHsK
KysjZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisgY2xhc3MgQ29udGV4dE10bDsK
KyAKKyBzdHJ1Y3QgUHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10bAorQEAgLTEzNCw2ICsx
MzUsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10
bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKKyAgICAgYm9vbCBoYXNTcGVjaWFsaXpl
ZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURl
c2MpIG92ZXJyaWRlOworIAorKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxpYiht
dGw6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNs
SW5mbyk7CisgICAgIC8vIENhbGxzIHRoaXMgYmVmb3JlIGRyYXdpbmcsIGNoYW5nZWRQaXBlbGlu
ZURlc2MgaXMgcGFzc2VkIHdoZW4gdmVydGV4IGF0dHJpYnV0ZXMgZGVzYyBhbmQvb3IKKyAgICAg
Ly8gc2hhZGVyIHByb2dyYW0gY2hhbmdlZC4KKyAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKK0BAIC0xNDEsNyArMTQ2LDEyIEBAIGNsYXNz
IFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVs
aW5lQ2FjaGVTcGVjaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10
bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmb3JjZVRleHR1cmVzU2V0dGluZywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CisrCisrICAgIHN0ZDo6c3RyaW5n
IGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1YZmJNc2xTb3VyY2U7IH0KKysKKysg
ICAgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlICptTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hl
OworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK0BA
IC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGws
IHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCisgICAgIHZvaWQgc2V0
VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IFQgKnYsIEdM
ZW51bSBlbnRyeVBvaW50VHlwZSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgaW5pdERlZmF1bHRV
bmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQpOworKyAgICBhbmdsZTo6
UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzaXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNpemUp
OworKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2w6OkJpbmFyeU91dHB1
dFN0cmVhbSAqc3RyZWFtKTsKKysgICAgYW5nbGU6OlJlc3VsdCBsb2FkRGVmYXVsdFVuaWZvcm1C
bG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0VW5pZm9ybXMoQ29udGV4dE10bCAq
Y29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rlcik7CisgICAgIGFu
Z2xlOjpSZXN1bHQgdXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
K0BAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1J
bXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzLAorICAgICAgICAg
Z2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSk7CisgCistICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRl
WGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVE
ZXNjICZwaXBlbGluZURlc2MpOworLQorICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwgKmNvbnRl
eHQpOworIAorKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0
U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6Qmlu
YXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisrCisrICAgIHZvaWQgc2F2ZVNoYWRlckludGVybmFs
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRTaGFk
ZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworKworKyNpZiBB
TkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysKKysgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbFNw
aXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOwor
KyNlbmRpZgorKworKyAgICBhbmdsZTo6UmVzdWx0IGxpbmtJbXBsRGlyZWN0KGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisrCisgICAgIHZvaWQg
bGlua1Jlc291cmNlcyhjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2Vz
KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2Vk
UmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2cpOworIAorLSAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxp
YihtdGw6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVk
TXNsSW5mbyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgbGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisgCisgICAg
IC8vIFN0YXRlIGZvciB0aGUgZGVmYXVsdCB1bmlmb3JtIGJsb2Nrcy4KKyAgICAgc3RydWN0IERl
ZmF1bHRVbmlmb3JtQmxvY2sgZmluYWwgOiBwcml2YXRlIGFuZ2xlOjpOb25Db3B5YWJsZQorQEAg
LTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBw
dWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBDYWNoZWQg
cmVmZXJlbmNlcyBvZiBjdXJyZW50IHNoYWRlciB2YXJpYW50cy4KKyAgICAgZ2w6OlNoYWRlck1h
cDxQcm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqPiBtQ3VycmVudFNoYWRlclZhcmlhbnRzOwor
IAorKyAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgbVZhcmlhYmxlSW5mb01h
cDsKKyAgICAgLy8gU2NyYXRjaCBkYXRhOgorICAgICAvLyBMZWdhbGl6ZWQgYnVmZmVycyBhbmQg
dGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0gYnVmZmVyJ3Mgb2Zmc2V0PTEgaXMg
bm90IGEgdmFsaWQKKyAgICAgLy8gb2Zmc2V0LCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsZWdh
bCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgYXJyYXkuCitAQCAtMjM4
LDcgKzI2NiwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJs
aWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBpbnRvIGFuIGFy
Z3VtZW50IGJ1ZmZlci4KKyAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1Bcmd1bWVudEJ1ZmZl
clJlbmRlclN0YWdlVXNhZ2VzOworIAorKyAgICB1aW50MzJfdCBtU2hhZG93Q29tcGFyZU1vZGVz
W210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKysKKyAgICAgbXRsOjpSZW5kZXJQaXBl
bGluZUNhY2hlIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGU7CisrICAgIHN0ZDo6c3RyaW5nIG1Y
ZmJNc2xTb3VyY2U7CisgfTsKKyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitpbmRleCA1MGUyZjYzLi42ZGE4NjY0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitAQCAtMTQsMjUgKzE0
LDMxIEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9u
bWVudFZhcmlhYmxlLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1
cmVNdGwuaCIKKy0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
dXRpbHMuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
bXRsX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGls
cy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9yZW5kZXJlcl91dGlscy5oIgorIAor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysjICAgIGluY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2VuZGlmCisrCisgbmFtZXNwYWNl
IHJ4CisgeworIAorIG5hbWVzcGFjZQorIHsKKy0KKy0jZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1F
IEAibWFpbjAiCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIGNvbnN0ZXhwciBjaGFy
IGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4W10gPSAiX3RtcCI7CistCisrI2VuZGlmCisgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgY2xhc3MgU2NvcGVkQXV0b0NsZWFyVmVjdG9yCisgeworQEAg
LTc4LDYgKzg0LDcgQEAgdm9pZCBJbml0RGVmYXVsdFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnZl
Y3RvcjxzaDo6VW5pZm9ybT4gJnVuaWZvcm1zLAorIAorICAgICBzaXplX3QgYmxvY2tTaXplID0g
YmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsKKyAKKysgICAgLy8gVE9ETyhqbWFkaWxs
KTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9yIHRoZSBwaXBlbGluZSBl
dmVuIGlmIHplcm8gc2l6ZWQuCisgICAgIGlmIChibG9ja1NpemUgPT0gMCkKKyAgICAgeworICAg
ICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CitAQCAtMjI4LDExICsyMzUsMTYgQEAgdm9pZCBJbml0
QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAKKyBQcm9ncmFt
TXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjp+RGVmYXVsdFVuaWZvcm1CbG9jaygpID0gZGVmYXVs
dDsKKyAKKy1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnN0
YXRlKQorLSAgICA6IFByb2dyYW1JbXBsKHN0YXRlKSwgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZSh0aGlzKQorLXt9CisrUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25zdCBnbDo6UHJvZ3JhbVN0
YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisrICAgIG1NZXRhbFJlbmRlclBpcGVs
aW5lQ2FjaGUodGhpcykKKyt7CisrICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUgPSBu
ZXcgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7CisrfQorIAorLVByb2dyYW1NdGw6On5Qcm9n
cmFtTXRsKCkge30KKytQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCgpCisreworKyAgICBkZWxldGUg
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyt9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpk
ZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKK0BAIC0yNjIsMjUgKzI3NCw0
NiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICB7CisgICAgICAgICB2YXIucmVzZXQoY29udGV4dCk7CisgICAgIH0KKy0KKyAgICAg
bU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5jbGVhcigpOworKyAgICBtTWV0YWxYZmJSZW5kZXJQ
aXBlbGluZUNhY2hlLT5jbGVhcigpOworK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OnNhdmVUcmFu
c2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAv
LyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9yIGFsbCBzaGFkZXIgdHlwZXMKKysgICAgZm9y
IChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkp
CisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVTdHJpbmcobU1zbFNoYWRlclRyYW5zbGF0
ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UpOworKyAgICB9CisrICAgIHN0cmVh
bS0+d3JpdGVTdHJpbmcobVhmYk1zbFNvdXJjZSk7CisrfQorKworK3ZvaWQgUHJvZ3JhbU10bDo6
bG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQorK3sK
KysgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNoYWRlciB0eXBlcworKyAg
ICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlw
ZXMoKSkKKysgICAgeworKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlw
ZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmcoKTsKKysgICAgfQorKyAg
ICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CisgfQorIAorIHN0ZDo6dW5p
cXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQorIHsKKy0g
ICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCistICAgIFVOSU1QTEVNRU5U
RUQoKTsKKy0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4oYW5nbGU6
OlJlc3VsdDo6U3RvcCk7CisrCisrICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVu
dERvbmU+KGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb250ZXh0LCBzdHJlYW0sIGluZm9Mb2cpKTsK
KyB9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpzYXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisgeworLSAgICAvLyBOT1RFKGhxbGUp
OiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKKy0gICAgVU5JTVBMRU1FTlRFRCgpOworKyAgICBzYXZl
VHJhbnNsYXRlZFNoYWRlcnMoc3RyZWFtKTsKKysgICAgc2F2ZVNoYWRlckludGVybmFsSW5mbyhz
dHJlYW0pOworKyAgICBzYXZlRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKHN0cmVhbSk7CisgfQor
IAorKworIHZvaWQgUHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFibGVIaW50KGJvb2wgcmV0
cmlldmFibGUpCisgeworICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMjk0LDcgKzMyNyw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
c3RkOjp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xv
ZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAvKiBtZXJnZWRWYXJ5aW5ncyAqLykKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVy
Z2VkVmFyeWluZ3MgJm1lcmdlZFZhcnlpbmdzKQorIHsKKyAgICAgLy8gTGluayByZXNvdXJjZXMg
YmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSByZWFk
eSBmb3IgdGhlIHNldC9iaW5kaW5nCisgICAgIC8vIGFzc2lnbm1lbnQgZG9uZSBpbiB0aGF0IGZ1
bmN0aW9uLgorQEAgLTMwNCw3ICszMzcsOCBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29k
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxM
aW5rRXZlbnREb25lPihsaW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpKTsKKyB9
CisgCistYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKythbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsU3BpcnYoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
TGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyB7CitAQCAtMzU1LDYgKzM4OSw3NSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorIAor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorKyNlbmRpZgorKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyt7CisrICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKysKKysgICAgcmVzZXQo
Y29udGV4dE10bCk7CisrICAgIEFOR0xFX1RSWShpbml0RGVmYXVsdFVuaWZvcm1CbG9ja3MoZ2xD
b250ZXh0KSk7CisrICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCB2YXJpYWJs
ZUluZm9NYXA7CisrCisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHNoYWRlclNvdXJj
ZXM7CisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHRyYW5zbGF0ZWRNc2xTaGFkZXJz
OworKyAgICBtdGw6Ok1TTEdldFNoYWRlclNvdXJjZShtU3RhdGUsIHJlc291cmNlcywgJnNoYWRl
clNvdXJjZXMsICZ2YXJpYWJsZUluZm9NYXApOworKworKyAgICBBTkdMRV9UUlkobXRsOjpHbHNs
YW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250ZXh0TXRsLT5nZXRDYXBzKCksIHNoYWRl
clNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZv
TWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnRyYW5zbGF0ZWRNc2xTaGFkZXJzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJDb3VudCgpKSk7CisrCisrCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6
IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIC8vIENyZWF0ZSBh
Y3R1YWwgTWV0YWwgc2hhZGVyCisrICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgY3Jl
YXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRlclR5cGUsIGluZm9Mb2csICZtTXNsU2hh
ZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOworKyAgICB9CisrICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjps
aW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291
cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQorK3sKKysgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdheSBvZiB0b2dnbGluZyB0
aGlzLgorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgaWYgKHNoOjpyZWFkQm9v
bEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisrICAgIHsKKysgICAgICAgcmV0
dXJuIGxpbmtJbXBsU3BpcnYoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9
CisrICAgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgICByZXR1cm4gbGlua0ltcGxEaXJl
Y3QoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9CisrfQorKworKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cp
CisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4
dCk7CisrICAgIC8vIE5PVEUoaHFsZSk6IE5vIHRyYW5zZm9ybSBmZWVkYmFja3MgZm9yIG5vdywg
c2luY2Ugd2Ugb25seSBzdXBwb3J0IEVTIDIuMCBhdG0KKysKKysgICAgcmVzZXQoY29udGV4dE10
bCk7CisrCisrICAgIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhzdHJlYW0pOworKyAgICBsb2FkU2hh
ZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7CisrICAgIEFOR0xFX1RSWShsb2FkRGVmYXVsdFVuaWZv
cm1CbG9ja3NJbmZvKGdsQ29udGV4dCwgc3RyZWFtKSk7CisrCisrICAgIEFOR0xFX1RSWShjcmVh
dGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgaW5mb0xv
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU1zbFNoYWRlclRyYW5zbGF0ZUlu
Zm9bZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pKTsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNo
YWRlckxpYihjb250ZXh0TXRsLCBnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsIGluZm9Mb2csCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2ds
OjpTaGFkZXJUeXBlOjpGcmFnbWVudF0pKTsKKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworK30KKyAKKyB2b2lkIFByb2dyYW1NdGw6OmxpbmtSZXNvdXJjZXMoY29uc3Qg
Z2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKKyB7CitAQCAtMzY2LDggKzQ2
OSw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRl
eHQsCisgCisgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVsdFVuaWZvcm1CbG9j
a3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCkKKyB7CistICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKy0KKyAgICAgLy8gUHJvY2VzcyB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHVuaWZvcm1zIGludG8gc3RkMTQwIHBhY2tpbmcuCisgICAgIGds
OjpTaGFkZXJNYXA8c2g6OkJsb2NrTGF5b3V0TWFwPiBsYXlvdXRNYXA7CisgICAgIGdsOjpTaGFk
ZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7CitAQCAtNDI2LDYgKzUyNywxNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgfQorICAgICB9CisgCisrICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nr
c01lbW9yeShnbENvbnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7CisrfQorKworK2FuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6cmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoCisrICAg
IGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8
c2l6ZV90PiAmcmVxdWlyZWRCdWZmZXJTaXplKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworKworICAgICBmb3IgKGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQorICAgICB7CisgICAg
ICAgICBpZiAocmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4gMCkKK0BAIC00NTMsNiAr
NTYzLDkgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
PE1UTEZ1bmN0aW9uPiAqc2hhZGVyT3V0KQorIHsKKyAgICAgc3RhdGljX2Fzc2VydChZRVMgPT0g
MSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisrICAgICNpZiBBTkdMRV9FTkFCTEVf
TUVUQUxfU1BJUlYKKysgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVNwaXJ2ID0gc2g6OnJl
YWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsKKysgICAgI2VuZGlmCisg
CisgICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvID0gJm1N
c2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOworICAgICBQcm9ncmFtU2hhZGVyT2Jq
VmFyaWFudE10bCAqc2hhZGVyVmFyaWFudDsKK0BAIC00OTAsOSArNjAzLDIyIEBAIHZvaWQgSW5p
dEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAg
ICAgQk9PTCBlbXVsYXRlRGlzY2FyZCA9IHJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9u
VHlwZSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBp
cGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOworIAorLSAgICAgICAgICAgIE5T
U3RyaW5nICpkaXNjYXJkRW5hYmxlZFN0ciA9CistICAgICAgICAgICAgICAgIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmRpc2NhcmRFbmFibGVkU3RyOwor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgICAgICAgICBpZiAodXNlU3BpcnYp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9IFtO
U1N0cmluZworKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFs
OjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9CisrICAgICAgICAgICAgICAg
ICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRyYW5zbGF0b3JNZXRhbERp
cmVjdDo6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpXTsKKysgICAg
ICAgICAgICB9CisgCisgICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9IFtbTVRMRnVuY3Rpb25D
b25zdGFudFZhbHVlcyBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAgW2Z1bmNDb25zdGFudHMg
c2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKK0BAIC01MTUsOSArNjQxLDIyIEBAIHZv
aWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgCisg
ICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICAgeworLSAgICAgICAgICAgIE5T
U3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0KKy0gICAgICAgICAgICAgICAgW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a0NvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVyYWdlTWFza0VuYWJsZWRT
dHI7CisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorKyAgICAgICAgICAgIGlmICh1c2VT
cGlydikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJs
ZWRTdHIgPSBbTlNTdHJpbmcKKysgICAgICAgICAgICAgICAgICAgIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlcyVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQorKyAgICAgICAg
ICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnNoOjpUcmFuc2xhdG9y
TWV0YWxEaXJlY3Q6OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCldOworKyAgICAg
ICAgICAgIH0KKyAKKyAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0gW1tNVExGdW5jdGlvbkNv
bnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICBbZnVuY0NvbnN0YW50cyBz
ZXRDb25zdGFudFZhbHVlOiZlbXVsYXRlQ292ZXJhZ2VNYXNrCitAQCAtNTU1LDYgKzY5NCw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisrCisgYm9vbCBQcm9n
cmFtTXRsOjpoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQ
aXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykKKyB7CitAQCAtNTkyLDYgKzczMiw5MyBA
QCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICB9CisgfQorIAorK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tz
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAvLyBTZXJpYWxp
emVzIHRoZSB1bmlmb3JtTGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlmb3JtQmxvY2tzCisrICAg
IGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQor
KyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgdW5pZm9ybUNvdW50ID0gbURlZmF1bHRVbmlm
b3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQuc2l6ZSgpOworKyAgICAgICAgc3Ry
ZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3VudCk7CisrICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsr
dW5pZm9ybUluZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNoOjpCbG9ja01lbWJlcklu
Zm8gJmJsb2NrSW5mbyA9CisrICAgICAgICAgICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tz
aGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3VuaWZvcm1JbmRleF07CisrICAgICAgICAgICAgZ2w6
OldyaXRlQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgYmxvY2tJbmZvKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZvcm0gYmxvY2sgbWVtb3J5
IHNpemVzCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFk
ZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBzdHJlYW0tPndyaXRlSW50KG1EZWZhdWx0VW5p
Zm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkpOworKyAgICB9CisrfQor
KworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1bHRVbmlmb3JtQmxvY2tzSW5m
byhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSkKKyt7CisrICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7
CisrICAgIHJlcXVpcmVkQnVmZmVyU2l6ZS5maWxsKDApOworKworKyAgICAvLyBEZXNlcmlhbGl6
ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1CbG9ja3MKKysgICAg
Zm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQgPSBzdHJlYW0tPnJlYWRJ
bnQ8c2l6ZV90PigpOworKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUNvdW50OyArK3VuaWZvcm1JbmRleCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKKysgICAgICAg
ICAgICBnbDo6TG9hZEJsb2NrTWVtYmVySW5mbyhzdHJlYW0sICZibG9ja0luZm8pOworKyAgICAg
ICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0LnB1
c2hfYmFjayhibG9ja0luZm8pOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIERlc2Vy
aWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworKyAgICBmb3IgKGds
OjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgewor
KyAgICAgICAgcmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID0gc3RyZWFtLT5yZWFkSW50
PHNpemVfdD4oKTsKKysgICAgfQorKworKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1C
bG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworK30KKysKKyt2b2lk
IFByb2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVh
bSAqc3RyZWFtKQorK3sKKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8aW50
PihtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5oYXNVQk9Bcmd1bWVudEJ1ZmZl
cik7CisrICAgICAgICBmb3IgKGNvbnN0IG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgor
KyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxT
YW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAgICAgICAgICAgc3RyZWFtLT53cml0ZUlu
dDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJlQmluZGluZyk7CisrICAgICAgICAgICAgc3RyZWFt
LT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy5zYW1wbGVyQmluZGluZyk7CisrICAgICAgICB9
CisrCisrICAgICAgICBmb3IgKHVpbnQzMl90IHVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNs
YXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5ncykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90Pih1Ym9CaW5kaW5nKTsKKysgICAgICAg
IH0KKysgICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OmxvYWRTaGFkZXJJbnRlcm5hbElu
Zm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICBmb3IgKGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgeworKyAgICAg
ICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFzVUJPQXJndW1lbnRCdWZm
ZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisrICAgICAgICBmb3IgKG10bDo6U2Ft
cGxlckJpbmRpbmcgJmJpbmRpbmcgOgorKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0cmVhbS0+cmVhZEludDx1aW50MzJf
dD4oKTsKKysgICAgICAgICAgICBiaW5kaW5nLnNhbXBsZXJCaW5kaW5nID0gc3RyZWFtLT5yZWFk
SW50PHVpbnQzMl90PigpOworKyAgICAgICAgfQorKworKyAgICAgICAgZm9yICh1aW50MzJfdCAm
dWJvQmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVC
T0JpbmRpbmdzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVib0JpbmRpbmcgPSBzdHJlYW0t
PnJlYWRJbnQ8dWludDMyX3Q+KCk7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisgR0xib29s
ZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZjYXBzLCBnbDo6SW5mb0xv
ZyAqaW5mb0xvZykKKyB7CisgICAgIC8vIE5vLW9wLiBUaGUgc3BlYyBpcyB2ZXJ5IHZhZ3VlIGFi
b3V0IHRoZSBiZWhhdmlvciBvZiB2YWxpZGF0aW9uLgorQEAgLTg3NywxNCArMTEwNCwyNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxp
bmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwaXBlbGluZURlc2NDaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KQorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJh
dykKKyB7CisgICAgIENvbnRleHRNdGwgKmNvbnRleHQgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0
KTsKKyAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCisgICAgIHsKKyAgICAgICAgIC8vIFJl
bmRlciBwaXBlbGluZSBzdGF0ZSBuZWVkcyB0byBiZSBjaGFuZ2VkCistICAgICAgICBpZDxNVExS
ZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KKy0gICAgICAgICAgICBtTWV0YWxS
ZW5kZXJQaXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxp
bmVEZXNjKTsKKysgICAgICAgIGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3Rh
dGUgPSBuaWw7CisrICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tEcmF3KQorKyAgICAgICAg
eworKyAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9
IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjKHBpcGVsaW5lRGVzYyk7CisrICAgICAgICAgICAgeGZi
UGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpSZW5kZXJQaXBlbGluZVJh
c3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPQorKyAg
ICAgICAgICAgICAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5nZXRSZW5kZXJQaXBl
bGluZVN0YXRlKGNvbnRleHQsIHhmYlBpcGVsaW5lRGVzYyk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9IG1NZXRhbFJl
bmRlclBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGlu
ZURlc2MpOworKyAgICAgICAgfQorICAgICAgICAgaWYgKCFwaXBlbGluZVN0YXRlKQorICAgICAg
ICAgeworICAgICAgICAgICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGluc2lkZSBnZXRSZW5k
ZXJQaXBlbGluZVN0YXRlKCkKK0BAIC05MTMsMTEgKzExNTEsNiBAQCB2b2lkIEluaXRBcmd1bWVu
dEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgQU5HTEVfVFJZ
KHVwZGF0ZVVuaWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykp
OworICAgICB9CisgCistICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQorLSAgICB7CistICAg
ICAgICBBTkdMRV9UUlkodXBkYXRlWGZiQnVmZmVycyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBl
bGluZURlc2MpKTsKKy0gICAgfQorLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CisgfQorIAorQEAgLTk1MCw4ICsxMTgzLDEwIEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVy
RW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgeworICAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICAg
Y29uc3QgYXV0byAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgICAgID0gZ2xDb250ZXh0LT5nZXRT
dGF0ZSgpOworKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBn
bENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAKKyAgICAgY29u
c3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJmNvbXBsZXRlVGV4dHVyZXMgPSBnbFN0YXRlLmdl
dEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKKysgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVUeXBl
QXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyVHlwZXMo
KTsKKyAKKyAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMy
U2hhZGVyVHlwZXMoKSkKKyAgICAgeworQEAgLTk2NCw2ICsxMTk5LDggQEAgdm9pZCBJbml0QXJn
dW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgIGNvbnN0
IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRlckluZm8gPQorICAgICAgICAgICAgICpt
Q3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAK
KysgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFsc2U7CisrCisgICAgICAgICBmb3Ig
KHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IG1TdGF0ZS5nZXRTYW1w
bGVyQmluZGluZ3MoKS5zaXplKCk7CisgICAgICAgICAgICAgICsrdGV4dHVyZUluZGV4KQorICAg
ICAgICAgeworQEAgLTk3NSw3ICsxMjEyLDYgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNv
ZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZSB0ZXh0dXJlVHlw
ZSA9IHNhbXBsZXJCaW5kaW5nLnRleHR1cmVUeXBlOworIAorICAgICAgICAgICAgIGZvciAodWlu
dDMyX3QgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgc2FtcGxlckJpbmRpbmcuYm91
bmRUZXh0dXJlVW5pdHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgKythcnJheUVsZW1lbnQp
CitAQCAtOTgzLDYgKzEyMTksNyBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRs
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQg
ICAgICAgICAgPSBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRd
OworICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSAgICAgICAgPSBjb21wbGV0
ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNh
bXBsZXIgICAgICAgID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVV
bml0KTsKKysgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gdGV4
dHVyZVR5cGVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgdGV4dHVy
ZVNsb3QgICAgICAgID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyArIGFycmF5RWxlbWVudDsK
KyAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlclNsb3QgICAgICAgID0gbXNsQmluZGlu
Zy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlKQorQEAgLTk5NCwyNCArMTIzMSwyMSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBUZXh0dXJlTXRs
ICp0ZXh0dXJlTXRsID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworICAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9ybWF0OjpTaGFkb3cpCisg
ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9hbmdsZWJ1
Zy5jb20vNTEwNworLSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwgZG9lc24ndCBzdXBwb3J0
IGEgY29tcGFyZSBtb2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNhbXBsZXIgY291bGQKKy0g
ICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIHNhbWUgdmFsdWUgYXMgaWYgc2FtcGxpbmcg
ZnJvbSBhIG5vcm1hbCBzYW1wbGVyLgorLSAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydGlu
ZyB0aGlzIGNvdWxkIHJlcXVpcmUgaGFja2luZyBzcGlydi1jcm9zcyB0byBjaGFuZ2Ugc2FtcGxl
X2NvbXBhcmUoKQorLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2FtcGxlKCkuCistICAgICAg
ICAgICAgICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoc2FtcGxlclN0YXRlLT5nZXRDb21wYXJl
TW9kZSgpICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpKQorLSAgICAgICAgICAgICAgICAg
ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIEVSUigpIDw8ICJHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERSAhPSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFIGlzIG5vdCAiCistICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCI7CistICAgICAgICAgICAgICAgICAg
ICAgICAgQU5HTEVfTVRMX1RSWShjb250ZXh0TXRsLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9kZSgpID09IEdMX0NPTVBB
UkVfUkVGX1RPX1RFWFRVUkUpOworLSAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
ICAgICAgICAgaGFzRGVwdGhTYW1wbGVyICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAg
ICAgICAgICAgICAgICAgbVNoYWRvd0NvbXBhcmVNb2Rlc1t0ZXh0dXJlU2xvdF0gPSBtdGw6Ok1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNh
bXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSwgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlRnVu
YygpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICBBTkdMRV9UUlko
dGV4dHVyZU10bC0+YmluZFRvU2hhZGVyKGdsQ29udGV4dCwgY21kRW5jb2Rlciwgc2hhZGVyVHlw
ZSwgc2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlU2xvdCwgc2FtcGxlclNsb3QpKTsKKyAgICAgICAgICAgICB9ICAvLyBm
b3IgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgIH0gICAgICAvLyBmb3Igc2FtcGxlciBiaW5kaW5n
cworKworKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjbWRFbmNvZGVyLT5zZXREYXRhKHNoYWRlclR5cGUsIG1TaGFkb3dDb21wYXJlTW9kZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAgIH0KKyAgICAgfSAgLy8gZm9yIHNoYWRl
ciB0eXBlcworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtMTA0
MCwxMSArMTI3NCw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgCisgICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgIHsKKy0gICAgICAgIGlmICghbUN1cnJlbnRT
aGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjb250
aW51ZTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGlmIChtQ3VycmVudFNoYWRlclZhcmlhbnRz
W3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJndW1lbnRCdWZmZXIpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgQU5HTEVfVFJZKAorQEAgLTExNDksOCArMTM3OCw2IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOworLSAgICBjb25zdCBtdGw6OlRyYW5zbGF0
ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KKy0gICAgICAgICptQ3VycmVudFNoYWRlclZhcmlh
bnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAgICAgZm9yICh1aW50MzJfdCBi
dWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRl
eCkKKyAgICAgeworICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJs
b2Nrc1tidWZmZXJJbmRleF07CitAQCAtMTE2Miw3ICsxMzg5LDggQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9
IHNoYWRlckluZm8uYWN0dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhdOworKyAgICAgICAgdWlu
dDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKysgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07CisgCisgICAg
ICAgICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCisgICAg
ICAgICB7CitAQCAtMTE5OSwxMiArMTQyNywxMiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICBbYnVmZmVyRW5jb2Rlci5tZXRhbEFy
Z0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRCdWZmZXItPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDphcmd1bWVudEJ1ZmZlck9mZnNldF07CisgCistICAgIHN0YXRpY19hc3NlcnQoTVRMUmVuZGVy
U3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRlclR5
cGU6OlZlcnRleCkpLAorLSAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBl
IGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBz
dGF0aWNfYXNzZXJ0KAorLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFnbWVudCA9PSAoMHgxIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQpKSwKKy0gICAg
ICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRp
dmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBhdXRvIG10bFJlbmRlclN0YWdlID0gc3RhdGljX2Nh
c3Q8TVRMUmVuZGVyU3RhZ2VzPigweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNoYWRlclR5
cGUpKTsKKysgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVuZGVyU3RhZ2VzPiBrU2hh
ZGVyU3RhZ2VNYXAgPSB7CisrICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgbXRsOjpr
UmVuZGVyU3RhZ2VWZXJ0ZXh9LAorKyAgICAgICAge2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCwg
bXRsOjprUmVuZGVyU3RhZ2VGcmFnbWVudH0sCisrICAgIH07CisrCisrICAgIGF1dG8gbXRsUmVu
ZGVyU3RhZ2UgPSBrU2hhZGVyU3RhZ2VNYXBbc2hhZGVyVHlwZV07CisgCisgICAgIGZvciAodWlu
dDMyX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySW5kZXgpCisgICAgIHsKK0BAIC0xMjM5LDQ5ICsxNDY3LDQgQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVw
ZGF0ZVhmYkJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKKy17CistICAgIGNvbnN0IGds
OjpTdGF0ZSAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwor
LSAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gZ2xTdGF0ZS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0KKy0gICAgaWYgKHBpcGVsaW5lRGVzYy5y
YXN0ZXJpemF0aW9uRW5hYmxlZCgpIHx8ICFnbFN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpIHx8CistICAgICAgICBBTkdMRV9VTkxJS0VMWSghdHJhbnNmb3JtRmVlZGJh
Y2spKQorLSAgICB7CistICAgICAgICAvLyBYRkIgb3V0cHV0IGNhbiBvbmx5IGJlIHVzZWQgd2l0
aCByYXN0ZXJpemF0aW9uIGRpc2FibGVkLgorLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLSAgICB9CistCistICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGdsU3Rh
dGUuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3Vu
dCgpOworLQorLSAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQgPiAwKTsKKy0gICAgQVNTRVJUKG1T
dGF0ZS5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSAhPSBHTF9JTlRFUkxFQVZFRF9B
VFRSSUJTIHx8CistICAgICAgICAgICB4ZmJCdWZmZXJDb3VudCA9PSAxKTsKKy0KKy0gICAgZm9y
IChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyAr
K2J1ZmZlckluZGV4KQorLSAgICB7CistICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZmZXJJZHgg
PSBtTXNsWGZiT25seVZlcnRleFNoYWRlckluZm8uYWN0dWFsWEZCQmluZGluZ3NbYnVmZmVySW5k
ZXhdOworLQorLSAgICAgICAgaWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJC
dWZmZXJzKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNvbnRpbnVlOworLSAgICAgICAgfQor
LQorLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZi
dWZmZXJCaW5kaW5nID0KKy0gICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0SW5kZXhl
ZEJ1ZmZlcihidWZmZXJJbmRleCk7CistICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBidWZm
ZXJCaW5kaW5nLmdldCgpOworLSAgICAgICAgQVNTRVJUKChidWZmZXJCaW5kaW5nLmdldE9mZnNl
dCgpICUgNCkgPT0gMCk7CistICAgICAgICBBU1NFUlQoYnVmZmVyICE9IG51bGxwdHIpOworLQor
LSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwoYnVmZmVyKTsKKy0K
Ky0gICAgICAgIC8vIFVzZSBvZmZzZXQ9MCwgYWN0dWFsIG9mZnNldCB3aWxsIGJlIHNldCBpbiBE
cml2ZXIgVW5pZm9ybSBpbnNpZGUgQ29udGV4dE10bC4KKy0gICAgICAgIGNtZEVuY29kZXItPnNl
dEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1ZmZlck10bC0+Z2V0Q3Vy
cmVudEJ1ZmZlcigpLCAwLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0dWFsQnVmZmVySWR4KTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CistfQorLQorIH0gIC8vIG5hbWVzcGFjZSByeAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLmgKK2luZGV4IDIxODU0ZjYuLjI3OGYxZGYgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKK0BAIC0xLDUgKzEsNSBAQAorIC8vCistLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKyAvLworQEAgLTk4LDggKzk4LDcgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJs
aWMgUXVlcnlJbXBsCisgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZnZXRWaXNpYmlsaXR5UmVz
dWx0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbVZpc2liaWxpdHlSZXN1bHRCdWZmZXI7IH0KKyAg
ICAgLy8gUmVzZXQgdGhlIG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3RvcmVkIGluIGJ1ZmZlciB0
byB6ZXJvCisgICAgIHZvaWQgcmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOworLQorLSAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXpl
aXB0ciBwcmltaXRpdmVzRHJhd24pOworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitAQCAtMTA4LDggKzEwNywxMyBAQCBjbGFzcyBRdWVyeU10bCA6IHB1YmxpYyBR
dWVyeUltcGwKKyAgICAgLy8gTGlzdCBvZiBvZmZzZXRzIGluIHRoZSByZW5kZXIgcGFzcydzIG9j
Y2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoaXMgcXVlcnkKKyAgICAg
VmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgbVZpc2liaWxpdHlCdWZmZXJPZmZzZXRzOworICAg
ICBtdGw6OkJ1ZmZlclJlZiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsKKysgICAgLy8gVXNlZCB3
aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4gd2hlbiB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgZW11bGF0ZWQuCisrICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRp
dmVzRHJhd247CisgCistICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJh
d24gPSAwOworKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogY3VycmVudGx5IG9ubHkgdXNlZCBm
b3IgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduCisrICAgIC8vIGJ1dCBjYW4gYmUg
dXNlZCBmb3IgcmVzdCBvZiByZXN1bHRzCisrICAgIHVpbnQ2NF90IG1DYWNoZWRSZXN1bHQ7Cisr
ICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZhbGlkOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCitpbmRleCBmNWU5YmYzLi5h
YjBlN2JmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworQEAgLTEzLDcgKzEzLDEy
IEBACisgCisgbmFtZXNwYWNlIHJ4CisgeworLVF1ZXJ5TXRsOjpRdWVyeU10bChnbDo6UXVlcnlU
eXBlIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpIHt9CisrUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpR
dWVyeVR5cGUgdHlwZSkKKysgICAgOiBRdWVyeUltcGwodHlwZSksCisrICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduKDApLAorKyAgICAgIG1DYWNoZWRSZXN1bHQoMCksCisr
ICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkKGZhbHNlKQorK3t9CisgCisgUXVlcnlNdGw6On5RdWVy
eU10bCgpIHt9CisgCitAQCAtMjIsMTMgKzI3LDE0IEBACisgICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgIGlmICghZ2V0QWxsb2NhdGVkVmlz
aWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CistICAgICAgICBjb250ZXh0TXRsLT5v
bk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29udGV4dCwgdGhpcyk7CisgICAgIH0KKyAg
ICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXIgPSBudWxscHRyOworIH0KKyAKKyBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CisrICAg
IG1DYWNoZWRSZXN1bHRWYWxpZCAgICAgPSBmYWxzZTsKKyAgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisg
ICAgIHsKK0BAIC00Nyw3ICs1Myw3IEBACisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICB9CisgCistICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVl
cnlCZWdpbihjb250ZXh0LCB0aGlzKSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlzKSk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJp
bWl0aXZlc1dyaXR0ZW46CisgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZl
c0RyYXduID0gMDsKK0BAIC02NiwxMiArNzIsMjIgQEAKKyAgICAgeworICAgICAgICAgY2FzZSBn
bDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgorICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpB
bnlTYW1wbGVzQ29uc2VydmF0aXZlOgorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVz
aW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisrICAgICAgICAgICAgY29udGV4dE10bC0+b25P
Y2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNX
cml0dGVuOgorKyAgICAgICAgeworKyAgICAgICAgICAgIG1DYWNoZWRSZXN1bHQgPSBtVHJhbnNm
b3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CisrCisgICAgICAgICAgICAgLy8gVGhlcmUgY291
bGQgYmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBhZGQgdGhlIHByaW1pdGl2
ZXMgZHJhd24gc28gZmFyCisgICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCB0cmFuc2Zv
cm0gZmVlZGJhY2sgb2JqZWN0LgorLSAgICAgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQo
Y29udGV4dCk7CisrICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1G
ZWVkYmFjayA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUNhY2hlZFJlc3VsdCArPSB0cmFu
c2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZCA9IHRydWU7CisrICAgICAgICB9CisgICAgICAg
ICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworQEAgLTExMCw3ICsxMjYsNyBAQAorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAg
ICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0
ZW46CistICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1UcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNEcmF3bik7CisrICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PFQ+KG1DYWNoZWRSZXN1bHQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTM3LDcgKzE1Myw3IEBACisg
ICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+aXNCZWlu
Z1VzZWRCeUdQVShjb250ZXh0TXRsKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNh
c2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKKy0g
ICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKysgICAgICAgICAgICAqYXZhaWxhYmxlID0g
bUNhY2hlZFJlc3VsdFZhbGlkOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTc1LDEzICsxOTEsOSBAQAor
ICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQoY29udGV4dE10bCwgYmxp
dEVuY29kZXIpOworIH0KKyAKKy12b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5k
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3ZvaWQgUXVlcnlNdGw6Om9uVHJhbnNmb3Jt
RmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCisgeworLSAgICBnbDo6VHJh
bnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0U3RhdGUoKS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0gICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorLSAgICB7CistICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0g
dHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOworLSAgICB9CisrICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biArPSBwcmltaXRpdmVzRHJhd247CisgfQor
IAorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVm
ZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgK
K2luZGV4IDZmZDdiMWIuLjA1MzAyMGMgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgUmVuZGVyYnVm
ZmVyTXRsIDogcHVibGljIFJlbmRlcmJ1ZmZlckltcGwKKyAKKyAgICAgbXRsOjpGb3JtYXQgbUZv
cm1hdDsKKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1UZXh0dXJlOworKyAgICBtdGw6OlRleHR1cmVS
ZWYgbUltcGxpY2l0TVNUZXh0dXJlOworICAgICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdl
dDsKKyB9OworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5k
ZXJCdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVy
TXRsLm1tCitpbmRleCA2M2Q2ZjRiLi4yZjliNWY2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorQEAgLTI4LDYgKzI4LDcgQEAKKyB2b2lk
IFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQorIHsKKyAgICAgbVRleHR1cmUgICAg
ICAgICAgID0gbnVsbHB0cjsKKysgICAgbUltcGxpY2l0TVNUZXh0dXJlID0gbnVsbHB0cjsKKyB9
CisgCisgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3JhZ2VJbXBsKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTQyLDggKzQzLDkgQEAKKyAgICAgeworICAgICAg
ICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUg
c3RvcmFnZS4KKyAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBtU3RhdGUuZ2V0Rm9ybWF0
KCkuaW5mby0+aW50ZXJuYWxGb3JtYXQgfHwKKy0gICAgICAgICAgICB3aWR0aCAhPSBtU3RhdGUu
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8CistICAgICAgICAg
ICAgc2FtcGxlcyAhPSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KHdpZHRoKSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fAorKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8Cisr
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykgIT0gbVN0YXRlLmdldFNh
bXBsZXMoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZWxlYXNlVGV4dHVyZSgpOworICAg
ICAgICAgfQorQEAgLTcyLDMwICs3NCw2MiBAQAorIAorICAgICBpZiAoKG1UZXh0dXJlID09IG51
bGxwdHIgfHwgIW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0g
MCkpCisgICAgIHsKKy0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09IDEpCisrICAgICAgICBp
ZiAoYWN0dWFsU2FtcGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMo
KSAmJiBtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2Uy
RFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1hdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFs
bG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CisrCisrICAgICAgICAgICAgLy8g
VXNlIGltcGxpY2l0IHJlc29sdmUgZm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aGVuZXZlciBw
b3NzaWJsZS4gVGhpcyBpcyBiZWNhdXNlCisrICAgICAgICAgICAgLy8gZm9yIGRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSwgaWYgc3RlbmNpbCBuZWVkcyB0byBiZSBibGl0dGVkLCBhIGZvcm1hdHRlZCBj
bG9uZSBoYXMKKysgICAgICAgICAgICAvLyB0byBiZSBjcmVhdGVkLiBBbmQgaXQgaXMgZXhwZW5z
aXZlIHRvIGNsb25lIGEgbXVsdGlzYW1wbGUgdGV4dHVyZS4KKysgICAgICAgICAgICBpZiAoYWN0
dWFsU2FtcGxlcyA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUaGlz
IGZvcm1hdCBtdXN0IHN1cHBvcnRzIGltcGxpY2l0IHJlc29sdmUKKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1Gb3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpOworKworKyAgICAgICAgICAgICAgICBB
TkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoCisrICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAor
KyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhlaWdodCksIGFjdHVh
bFNhbXBsZXMsCisrICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIHRy
dWUsCisrICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZt
SW1wbGljaXRNU1RleHR1cmUpKTsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAg
ICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6
TWFrZTJETVNUZXh0dXJlKAorLSAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1wbGVzLAorKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6
OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
aW50MzJfdD4od2lkdGgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKy0gICAgICAgICAgICAgICAgLyogYWxsb3dG
b3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpLCAmbVRleHR1cmUp
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogYWxsb3dGb3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsKKyAgICAgICAgIH0KKyAK
Ky0gICAgICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1UZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlw
TGV2ZWwsIDAsIG1Gb3JtYXQpOworKyAgICAgICAgbVJlbmRlclRhcmdldC5zZXRXaXRoSW1wbGlj
aXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAKKyAgICAgICAgIC8vIEZvciBlbXVsYXRlZCBjaGFu
bmVscyB0aGF0IEdMIHRleHR1cmUgaW50ZW5kcyB0byBub3QgaGF2ZSwKKyAgICAgICAgIC8vIHdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgorICAgICAgICAgYm9vbCBlbXVsYXRl
ZENoYW5uZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQpOworICAgICAgICAgaWYg
KGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgICAgICB7CistICAgICAgICAgICAgYXV0byBpbmRleCA9
IG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRl
eDo6TWFrZTJEKDApKTsKKysgICAgICAgICAgICBnbDo6SW1hZ2VJbmRleCBpbmRleDsKKyAKKy0g
ICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRl
eHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOworKyAgICAgICAgICAgIGlmIChhY3R1YWxT
YW1wbGVzID4gMSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRCgwKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAg
QU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtVGV4dHVy
ZSwgbUZvcm1hdCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAwKSkpOworKyAgICAgICAg
ICAgIGlmIChtSW1wbGljaXRNU1RleHR1cmUpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1J
bXBsaWNpdE1TVGV4dHVyZSwgbUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkltYWdlTmF0aXZlSW5kZXgoZ2w6Oklt
YWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCksIDApKSk7CisgICAgICAgICAgICAgfQorKyAg
ICAgICAgfSAgLy8gaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgIH0KKyAKKyAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTEzMyw3ICsxNjcsNiBAQAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
c2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkKKyB7
CistICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KKyAgICAgQVNTRVJUKG1UZXh0dXJl
ICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKKyAgICAgKnJ0T3V0ID0gJm1SZW5kZXJUYXJnZXQ7Cisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmggYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKK2luZGV4IGJhZjRlNGQuLjBjNTc1MTcgMTAw
NjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgK
KysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaAorQEAg
LTQ2LDIwICs0NiwxOCBAQCBjbGFzcyBSZW5kZXJUYXJnZXRNdGwgZmluYWwgOiBwdWJsaWMgRnJh
bWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0CisgICAgIHZvaWQgZHVwbGljYXRlRnJvbShj
b25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYyk7CisgICAgIHZvaWQgcmVzZXQoKTsKKyAKKy0gICAg
bXRsOjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZS5sb2Nr
KCk7IH0KKy0gICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorLSAgICBjb25zdCBtdGw6Ok1p
cG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbUxldmVsSW5k
ZXg7IH0KKy0gICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MYXll
ckluZGV4OyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRUZXh0dXJlUmVmKCk7IH0KKysgICAgbXRs
OjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1
cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOyB9CisrICAgIGNv
bnN0IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsOyB9CisrICAgIHVpbnQzMl90IGdldExh
eWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNl
T3JEZXB0aDsgfQorICAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3Q7CisgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9
CisgCisgICAgIHZvaWQgdG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MobXRsOjpSZW5kZXJQYXNz
QXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0OworIAorICAgcHJpdmF0ZToKKy0gICAg
bXRsOjpUZXh0dXJlV2Vha1JlZiBtVGV4dHVyZTsKKy0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBt
SW1wbGljaXRNU1RleHR1cmU7CistICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgbUxldmVsSW5k
ZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHVpbnQzMl90IG1MYXllckluZGV4
ICAgICAgICAgICAgICAgPSAwOworKy8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8gYXZvaWQg
Y3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFtZSBidWZm
ZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVy
ZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKKyAgICAgY29uc3QgbXRsOjpG
b3JtYXQgKm1Gb3JtYXQgPSBudWxscHRyOworIH07CisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZm
IC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KK2luZGV4IGU4
OWU3NjEuLmUxMjZkYmIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyVGFyZ2V0TXRsLm1tCitAQCAtMTEsNyArMTEsMTAgQEAKKyAKKyBuYW1lc3BhY2UgcngKKyB7
CistUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoKSB7fQorK1JlbmRlclRhcmdldE10
bDo6UmVuZGVyVGFyZ2V0TXRsKCkgOgorKyAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKHN0ZDo6
bWFrZV9zaGFyZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjPigp
KSwKKysgIG1Gb3JtYXQobnVsbHB0cikKKyt7fQorIAorIFJlbmRlclRhcmdldE10bDo6flJlbmRl
clRhcmdldE10bCgpCisgeworQEAgLTE5LDEwICsyMiw3IEBACisgfQorIAorIFJlbmRlclRhcmdl
dE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJlbmRlclRhcmdldE10bCAmJm90aGVyKQorLSAgICA6IG1U
ZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tVGV4dHVyZSkpLAorLSAgICAgIG1JbXBsaWNpdE1TVGV4
dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0dXJlKSksCistICAgICAgbUxldmVs
SW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAorLSAgICAgIG1MYXllckluZGV4KG90aGVyLm1MYXll
ckluZGV4KQorKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbyhzdGQ6Om1vdmUob3RoZXIu
bVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKKyB7fQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRs
OjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorQEAgLTM5LDIxICszOSwyMSBA
QAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0KQorIHsKKy0gICAgbVRleHR1cmUgICAgICAgICAg
ID0gdGV4dHVyZTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7
CistICAgIG1MZXZlbEluZGV4ICAgICAgICA9IGxldmVsOworLSAgICBtTGF5ZXJJbmRleCAgICAg
ICAgPSBsYXllcjsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlICAgICAg
ICAgICA9IHRleHR1cmU7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRN
U1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJ
bmZvLT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT5zbGljZU9yRGVwdGggICAgICAgID0gbGF5ZXI7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICA9
ICZmb3JtYXQ7CisgfQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJlKGNvbnN0
IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKKyB7CistICAgIG1UZXh0dXJlID0gdGV4dHVyZTsK
KysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlID0gdGV4dHVyZTsKKyB9Cisg
Cisgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCisgeworLSAgICBtSW1wbGljaXRNU1RleHR1
cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5p
bXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworIH0KKyAKKyB2b2lkIFJlbmRl
clRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYykKK0BA
IC02NCwyNSArNjQsMTkgQEAKKyAKKyB2b2lkIFJlbmRlclRhcmdldE10bDo6cmVzZXQoKQorIHsK
Ky0gICAgbVRleHR1cmUucmVzZXQoKTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlLnJlc2V0KCk7
CistICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOworLSAgICBtTGF5
ZXJJbmRleCA9IDA7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZS5yZXNl
dCgpOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxpY2l0TVNUZXh0dXJlLnJl
c2V0KCk7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbXRs
OjprWmVyb05hdGl2ZU1pcExldmVsOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNs
aWNlT3JEZXB0aCA9IDA7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gbnVsbHB0cjsKKyB9CisgCisgdWludDMyX3QgUmVuZGVyVGFyZ2V0TXRsOjpnZXRSZW5k
ZXJTYW1wbGVzKCkgY29uc3QKKyB7CistICAgIG10bDo6VGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4
ID0gZ2V0SW1wbGljaXRNU1RleHR1cmUoKTsKKy0gICAgbXRsOjpUZXh0dXJlUmVmIHRleCAgICAg
ICAgICAgPSBnZXRUZXh0dXJlKCk7CistICAgIHJldHVybiBpbXBsaWNpdE1TVGV4ID8gaW1wbGlj
aXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+c2FtcGxlcygpIDogMSk7CisrICAgIHJl
dHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldFJlbmRlclNhbXBsZXMoKTsKKyB9Cisg
dm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKG10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBjb25zdAorIHsKKy0gICAgcnBhRGVz
Y091dC0+dGV4dHVyZSAgICAgICAgICAgPSBtVGV4dHVyZS5sb2NrKCk7CistICAgIHJwYURlc2NP
dXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsKKy0gICAg
cnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAgPSBtTGV2ZWxJbmRleDsKKy0gICAgcnBhRGVz
Y091dC0+c2xpY2VPckRlcHRoICAgICAgPSBtTGF5ZXJJbmRleDsKKy0gICAgcnBhRGVzY091dC0+
YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0Q2FwcygpLmJsZW5kYWJs
ZSA6IGZhbHNlOworKyAgICBycGFEZXNjT3V0LT5yZW5kZXJUYXJnZXQgPSBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm87CisgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU2hhZGVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRs
LmgKK2luZGV4IDdiMmNmZDUuLjUyZTkxYWYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TaGFkZXJNdGwuaAorQEAgLTExLDggKzExLDggQEAKKyAKKyAjaW5jbHVkZSA8bWFwPgorIAor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgor
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgiCistCisgbmFtZXNwYWNl
IHJ4CisgeworIAorQEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRlck10bCA6IHB1YmxpYyBT
aGFkZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9u
cyBvcHRpb25zKSBvdmVycmlkZTsKKyAKKysgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24gKmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gJnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247CisrICAgIH0KKyAgICAgc3RkOjpzdHJpbmcg
Z2V0RGVidWdJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7CisrCisrICAgIHNoOjpUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKKysKKysgIHByaXZh
dGU6CisrICAgIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gY29tcGlsZUlt
cGxNdGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5j
ZSAqY29tcGlsZXJJbnN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29t
cGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KK2luZGV4IGY5MDlmYjUu
LmFkMDFkYmYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVy
TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tCitA
QCAtMTAsOCArMTAsMTMgQEAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hh
ZGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9D
b250ZXh0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9Xb3JrZXJUaHJlYWQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
Q29udGV4dE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5
TXRsLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDEwICsyNSwxMDAgQEAKKyAKKyBT
aGFkZXJNdGw6On5TaGFkZXJNdGwoKSB7fQorIAorK2NsYXNzIFRyYW5zbGF0ZVRhc2sgOiBwdWJs
aWMgYW5nbGU6OkNsb3N1cmUKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0ZVRhc2soU2hI
YW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5n
ICZzb3VyY2UpCisrICAgICAgICA6IG1IYW5kbGUoaGFuZGxlKSwgbU9wdGlvbnMob3B0aW9ucyks
IG1Tb3VyY2Uoc291cmNlKSwgbVJlc3VsdChmYWxzZSkKKysgICAge30KKysKKysgICAgdm9pZCBv
cGVyYXRvcigpKCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqc291cmNl
ID0gbVNvdXJjZS5jX3N0cigpOworKyAgICAgICAgbVJlc3VsdCAgICAgICAgICAgID0gc2g6OkNv
bXBpbGUobUhhbmRsZSwgJnNvdXJjZSwgMSwgbU9wdGlvbnMpOworKyAgICB9CisrCisrICAgIGJv
b2wgZ2V0UmVzdWx0KCkgeyByZXR1cm4gbVJlc3VsdDsgfQorKworKyAgICBTaEhhbmRsZSBnZXRI
YW5kbGUoKSB7IHJldHVybiBtSGFuZGxlOyB9CisrCisrICBwcml2YXRlOgorKyAgICBTaEhhbmRs
ZSBtSGFuZGxlOworKyAgICBTaENvbXBpbGVPcHRpb25zIG1PcHRpb25zOworKyAgICBzdGQ6OnN0
cmluZyBtU291cmNlOworKyAgICBib29sIG1SZXN1bHQ7CisrfTsKKysKKytjbGFzcyBNVExXYWl0
YWJsZUNvbXBpbGVFdmVudEltcGwgZmluYWwgOiBwdWJsaWMgV2FpdGFibGVDb21waWxlRXZlbnQK
Kyt7CisrICBwdWJsaWM6CisrICAgIE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbChTaGFkZXJN
dGwgKnNoYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVk
X3B0cjxhbmdsZTo6V2FpdGFibGVFdmVudD4gd2FpdGFibGVFdmVudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNrPiB0cmFuc2xh
dGVUYXNrKQorKyAgICAgICAgOiBXYWl0YWJsZUNvbXBpbGVFdmVudCh3YWl0YWJsZUV2ZW50KSwg
bVRyYW5zbGF0ZVRhc2sodHJhbnNsYXRlVGFzayksIG1TaGFkZXIoc2hhZGVyKQorKyAgICB7fQor
KworKyAgICBib29sIGdldFJlc3VsdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1UcmFuc2xhdGVUYXNr
LT5nZXRSZXN1bHQoKTsgfQorKworKyAgICBib29sIHBvc3RUcmFuc2xhdGUoc3RkOjpzdHJpbmcg
KmluZm9Mb2cpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHNoOjpUU2hIYW5kbGVCYXNlICpi
YXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4obVRyYW5zbGF0ZVRhc2st
PmdldEhhbmRsZSgpKTsKKysgICAgICAgIGF1dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFz
ZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKTsKKysgICAgICAgIGlmICh0cmFuc2xhdG9y
TWV0YWxEaXJlY3QgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBDb3B5
IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4KKysgICAgICAgICAgICBtU2hhZGVyLT50cmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uID0KKysgICAgICAgICAgICAgICAgKih0cmFuc2xhdG9yTWV0
YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSk7CisrICAgICAgICAgICAg
dHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCktPnJl
c2V0KCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAg
cHJpdmF0ZToKKysgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0ZVRhc2s+IG1UcmFuc2xhdGVU
YXNrOworKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7CisrfTsKKysKKytzdGQ6OnNoYXJlZF9wdHI8
V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwoCisrICAgIGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpj
b21waWxlckluc3RhbmNlLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICBT
aENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQorK3sKKysjaWYgZGVmaW5lZChBTkdMRV9F
TkFCTEVfQVNTRVJUUykKKysgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfQVNUOwor
KyNlbmRpZgorKworKyAgICBhdXRvIHdvcmtlclRocmVhZFBvb2wgPSBjb250ZXh0LT5nZXRXb3Jr
ZXJUaHJlYWRQb29sKCk7CisrICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9CisrICAgICAgICBzdGQ6
Om1ha2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFuY2UtPmdldEhhbmRsZSgp
LCBjb21waWxlT3B0aW9ucywgc291cmNlKTsKKysKKysgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKysgICAgICAgIHRoaXMsIGFuZ2xlOjpX
b3JrZXJUaHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJlYWRQb29sLCB0cmFuc2xh
dGVUYXNrKSwKKysgICAgICAgIHRyYW5zbGF0ZVRhc2spOworK30KKysKKyBzdGQ6OnNoYXJlZF9w
dHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykKKyB7CisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIGlmIChnZXRTdGF0ZSgpLmdldFNo
YWRlclR5cGUoKSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisrICAgICAgICAhY29udGV4
dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWRE
cmF3LmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAor
KyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgPSBzdGF0aWNfY2FzdDxzaDo6VFNoSGFu
ZGxlQmFzZSAqPihjb21waWxlckluc3RhbmNlLT5nZXRIYW5kbGUoKSk7CisrICAgICAgICBhdXRv
IHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0
KCk7CisrICAgICAgICBpZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ID09IG51bGxwdHIpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0YWwgPSBzdGF0aWNfY2FzdDxz
aDo6VHJhbnNsYXRvck1ldGFsICo+KGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisrICAgICAgICAg
ICAgdHJhbnNsYXRvck1ldGFsLT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgdHJhbnNsYXRv
ck1ldGFsRGlyZWN0LT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAgICAgICB9
CisrICAgIH0KKyAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucyA9IFNIX0lOSVRJ
QUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisgCisgICAgIGJvb2wgaXNXZWJHTCA9IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS53ZWJnbENvbXBhdGliaWxpdHk7CitAQCAtMzMsOCArMTI4LDEx
IEBACisgICAgIH0KKyAKKyAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfQ0xBTVBfUE9JTlRfU0la
RTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKQorKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9GUkFH
X0RFUFRIOworKyNlbmRpZgorIAorLSAgICByZXR1cm4gY29tcGlsZUltcGwoY29udGV4dCwgY29t
cGlsZXJJbnN0YW5jZSwgbVN0YXRlLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlv
bnMpOworKyAgICByZXR1cm4gY29tcGlsZUltcGxNdGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5j
ZSwgZ2V0U3RhdGUoKS5nZXRTb3VyY2UoKSwgY29tcGlsZU9wdGlvbnMgfCBvcHRpb25zKTsKKyB9
CisgCisgc3RkOjpzdHJpbmcgU2hhZGVyTXRsOjpnZXREZWJ1Z0luZm8oKSBjb25zdAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmggYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oCitpbmRleCA5ZTg0Zjg4Li4wYWRjMzYw
IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAor
KysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAorQEAgLTI0LDcg
KzI0LDI3IEBAIG5hbWVzcGFjZSByeAorIAorIGNsYXNzIERpc3BsYXlNdGw7CisgCistY2xhc3Mg
U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK2NsYXNzIFN1cmZhY2VNdGxQcm90b2Nv
bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK3sKKysgIHB1YmxpYzoKKysgICAgU3VyZmFjZU10bFBy
b3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkgOiBTdXJmYWNlSW1wbChzdGF0
ZSkge30KKysgICAgdmlydHVhbCBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0ICAgICAgPSAwOworKyAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCA9IDA7CisrCisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gYmluZGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92
ZXJyaWRlID0gMDsKKysKKysgICAgdmlydHVhbCBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgp
IGNvbnN0ID0gMDsKKysgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3
YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0gMDsKKysgICAgdmlydHVh
bCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworKyAgICB2aXJ0dWFsIGNvbnN0IG10bDo6VGV4
dHVyZVJlZiAmIGdldENvbG9yVGV4dHVyZSgpID0gMDsKKyt9OworKworK2NsYXNzIFN1cmZhY2VN
dGwgOiBwdWJsaWMgU3VyZmFjZU10bFByb3RvY29sCisgeworICAgcHVibGljOgorICAgICBTdXJm
YWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCitAQCAtNjcsMTEgKzg3LDExIEBAIGNsYXNzIFN1
cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKKyAgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFs
aXplQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBv
dmVycmlkZTsKKyAKKy0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1cmUo
KSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAm
Z2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUNvbG9yVGV4dHVyZTsgfQorICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQ29s
b3JGb3JtYXQ7IH0KKy0gICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtU2FtcGxl
czsgfQorKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1TYW1w
bGVzOyB9CisgCistICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3QgeyByZXR1
cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQorKyAgICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5p
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1Sb2J1c3RSZXNvdXJjZUluaXQ7IH0KKyAKKyAg
ICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGJpbmRpbmcsCitAQCAtMTQ0LDEzICsxNjQsMTQgQEAgY2xhc3MgV2luZG93U3Vy
ZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQg
KipydE91dCkgb3ZlcnJpZGU7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERy
YXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAg
ICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0IC8qKiBudWxsYWJsZSAqLyk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2Fi
bGVPdXQgLyoqIG51bGxhYmxlICovKSBvdmVycmlkZTsKKyAKKyAgICAgLy8gRW5zdXJlIHRoZSB0
aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdldENvbG9yVGV4dHVyZSgpIGlzIHJlYWR5IGZvciBn
bFJlYWRQaXhlbHMoKS4gVGhpcworICAgICAvLyBpbXBsaWNpdGx5IGNhbGxzIGVuc3VyZUN1cnJl
bnREcmF3YWJsZU9idGFpbmVkKCkuCistICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0
dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKysg
ICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBib29sIHByZXNlcnZlQnVm
ZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJldGFpbkJ1ZmZlcjsgfQorICAgcHJpdmF0
ZToKKyAgICAgYW5nbGU6OlJlc3VsdCBzd2FwSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgb2J0YWluTmV4dERyYXdhYmxlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KTsKK0BAIC0xNjgsNiArMTg5LDggQEAgY2xhc3MgV2luZG93U3VyZmFjZU10
bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgIC8vIGV2ZW50LiBXZSBkb24ndCB1c2UgbU1ldGFs
TGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5IHNpbmNlIGl0IG1pZ2h0IGJlIGNoYW5nZWQgaW50
ZXJuYWxseSBieQorICAgICAvLyBtZXRhbCBydW50aW1lLgorICAgICBDR1NpemUgbUN1cnJlbnRL
bm93bkRyYXdhYmxlU2l6ZTsKKysKKysgICAgYm9vbCBtUmV0YWluQnVmZmVyID0gZmFsc2U7Cisg
fTsKKyAKKyAvLyBPZmZzY3JlZW4gc3VyZmFjZSwgYmFzZSBjbGFzcyBvZiBQQnVmZmVyLCBJT1N1
cmZhY2UuCitAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVyU3VyZmFjZU10bCA6IHB1
YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCisgICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQoRUdMaW50
IGhlaWdodCkgb3ZlcnJpZGU7CisgfTsKKyAKKy0vLyBPZmZzY3JlZW4gY3JlYXRlZCBmcm9tIElP
U3VyZmFjZQorLWNsYXNzIElPU3VyZmFjZVN1cmZhY2VNdGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3Vy
ZmFjZU10bAorLXsKKy0gIHB1YmxpYzoKKy0gICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5
TXRsICpkaXNwbGF5LAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIg
YnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKTsKKy0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlkZTsKKy0KKy0g
ICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKy0gICAgZWds
OjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGlu
dCBidWZmZXIpIG92ZXJyaWRlOworLQorLSAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRS
ZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZp
bWFnZUluZGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzYW1wbGVzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRl
OworLQorLSAgICBzdGF0aWMgYm9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVy
IGJ1ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOworLQorLSAgcHJpdmF0
ZToKKy0gICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKy0gICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Cist
ICAgIE5TVUludGVnZXIgbUlPU3VyZmFjZVBsYW5lOworLSAgICBpbnQgbUlPU3VyZmFjZUZvcm1h
dElkeDsKKy19OworLQorIH0gIC8vIG5hbWVzcGFjZSByeAorLQorICNlbmRpZiAvKiBMSUJBTkdM
RV9SRU5ERVJFUl9NRVRBTF9TVVJGQUNFTVRMX0hfICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU3VyZmFjZU10bC5tbQoraW5kZXggMzAzZmIxNi4uYzllZTI0YiAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQorQEAgLTMzLDU1ICszMywxOSBAQAor
IHsKKyAKKyAjZGVmaW5lIEFOR0xFX1RPX0VHTF9UUlkoRVhQUikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgaWYg
KEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkpIFwKKyAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZhY2UoKTsgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKy0gICAgfSB3aGlsZSAoMCkKKyt9IHdoaWxlICgwKQorIAorIGNvbnN0
ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlckRlcHRoRm9ybWF0SWQgICA9
IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQg
a0RlZmF1bHRGcmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6Uzhf
VUlOVDsKKyBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0
aFN0ZW5jaWxGb3JtYXRJZCA9CisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJ
TlQ7CisgCistc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8KKy17CistICAgIEdMZW51bSBpbnRl
cm5hbEZvcm1hdDsKKy0gICAgR0xlbnVtIHR5cGU7CistICAgIHNpemVfdCBjb21wb25lbnRCeXRl
czsKKy0KKy0gICAgYW5nbGU6OkZvcm1hdElEIG5hdGl2ZUFuZ2xlRm9ybWF0SWQ7CistfTsKKy0K
Ky0vLyBjbGFuZy1mb3JtYXQgb2ZmCistLy8gTk9URShocWxlKTogU3VwcG9ydCBSMTZfVUlOVCBv
bmNlIEdMRVMzIGlzIGNvbXBsZXRlLgorLWNvbnN0ZXhwciBzdGQ6OmFycmF5PElPU3VyZmFjZUZv
cm1hdEluZm8sIDg+IGtJT1N1cmZhY2VGb3JtYXRzID0ge3sKKy0gICAge0dMX1JFRCwgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDEsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5P
Uk19LAorLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
MiwgYW5nbGU6OkZvcm1hdElEOjpSMTZfVU5PUk19LAorLSAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgMiwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VOT1JN
fSwKKy0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDQs
IGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VOT1JNfSwKKy0gICAge0dMX1JHQiwgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThf
VU5PUk19LAorLSAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCistICAgIHtHTF9SR0JBLCAg
ICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICA4LCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNkIxNkExNl9GTE9BVH0sCistICAgIHtHTF9SR0IxMF9BMiwgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWLCA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNfSwKKy19
fTsKKy0vLyBjbGFuZy1mb3JtYXQgb24KKy0KKy1pbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCisteworLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4oa0lPU3VyZmFjZUZvcm1hdHMuc2l6ZSgpKTsgKytp
KQorLSAgICB7CistICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZv
cm1hdHNbaV07CistICAgICAgICBpZiAoZm9ybWF0SW5mby5pbnRlcm5hbEZvcm1hdCA9PSBpbnRl
cm5hbEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0gdHlwZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICByZXR1cm4gaTsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICByZXR1cm4gLTE7Cist
fQorLQorIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVUZXh0dXJlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgd2lkdGgsCitAQCAtMTI4LDYgKzkyLDE5IEBAIGJvb2wgSXNGcmFtZUNhcHR1
cmVFbmFibGVkKCkKKyAjZW5kaWYKKyB9CisgCisrQU5HTEVfTVRMX1VOVVNFRAorK3N0ZDo6c3Ry
aW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQorK3sKKysjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NB
UFRVUkVfRU5BQkxFRAorKyAgICByZXR1cm4gIiI7CisrI2Vsc2UKKysgICAgYXV0byB2YXIgICAg
ICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9G
SUxFIik7CisrICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7
CisrCisrICAgIHJldHVybiBmaWxlUGF0aDsKKysjZW5kaWYKKyt9CisrCisgQU5HTEVfTVRMX1VO
VVNFRAorIHNpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKKyB7CitAQCAtMjAyLDYgKzE3
OSwyMSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2Us
IGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQorICAgICB7CisgICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisgCisgICAgICAgICBOU0Vycm9yICplcnJvcjsKKyAg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCitAQCAtMjExLDE0ICsyMDMsMTUgQEAgdm9p
ZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLCBpZDxNVExDb21t
YW5kUXVldWU+IG1ldGFsQ21kUXUKKyAgICAgfQorICAgICBlbHNlCisgIyAgICBlbmRpZiAgLy8g
X19NQUNfMTBfMTUKKysgICAgICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1
LCAxMy4wLCAxMykpCisgICAgIHsKKy0gICAgICAgIGlmIChGcmFtZUNhcHR1cmVEZXZpY2VTY29w
ZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1
cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKysg
ICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9IFtbTVRMQ2Fw
dHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworKyAgICAgICAgY2FwdHVyZURlc2NyaXB0b3Iu
Y2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisrCisrICAgICAgICBOU0Vycm9y
ICplcnJvcjsKKysgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhE
ZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisgICAgICAgICB7Cist
ICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhDb21tYW5kUXVldWU6
bWV0YWxDbWRRdWV1ZV07CisrICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2Fw
dHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisgICAgICAgICB9CisgICAgIH0KKyAjZW5kaWYgIC8v
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorQEAgLTI0NSwxMSArMjM4LDEwIEBA
IHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgfQorIH0KKyAKKy0vLyBTdXJmYWNlTXRsIGltcGxl
bWVudGF0aW9uCisgU3VyZmFjZU10bDo6U3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogU3VyZmFjZUltcGwoc3RhdGUpCisrICAgIDogU3VyZmFjZU10bFByb3RvY29sKHN0
YXRlKQorIHsKKyAgICAgbVJvYnVzdFJlc291cmNlSW5pdCA9CisgICAgICAgICBhdHRyaWJzLmdl
dChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFLCBFR0xfRkFMU0UpID09
IEVHTF9UUlVFOworQEAgLTY5Myw2ICs2ODUsMTAgQEAgdm9pZCBTdG9wRnJhbWVDYXB0dXJlKCkK
KyAgICAgcmV0dXJuIFN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4
dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpOworIH0KKyAKKythbmdsZTo6
UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3sKKysgICAgcmV0dXJuIGVuc3VyZUN1cnJlbnRE
cmF3YWJsZU9idGFpbmVkKGNvbnRleHQsIG51bGxwdHIpOworK30KKyBhbmdsZTo6UmVzdWx0IFdp
bmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQpCisgeworQEAgLTk0
MywxNTcgKzkzOSw1IEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgICAgIG1TaXplLmhlaWdo
dCA9IGhlaWdodDsKKyB9CisgCistLy8gSU9TdXJmYWNlU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlv
bi4KKy1JT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlNdGwg
KmRpc3BsYXksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogT2Zmc2NyZWVuU3VyZmFjZU10bChkaXNwbGF5LCBzdGF0ZSwgYXR0cmlicyksIG1J
T1N1cmZhY2UoKF9fYnJpZGdlIElPU3VyZmFjZVJlZikoYnVmZmVyKSkKKy17CistICAgIENGUmV0
YWluKG1JT1N1cmZhY2UpOworLQorLSAgICBtSU9TdXJmYWNlUGxhbmUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKy0KKy0gICAgRUdM
QXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfSU5URVJOQUxf
Rk9STUFUX0FOR0xFKTsKKy0gICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0gYXR0cmlicy5n
ZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7CistICAgIG1JT1N1cmZhY2VGb3JtYXRJZHggPQor
LSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50
ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0gICAgQVNTRVJUKG1J
T1N1cmZhY2VGb3JtYXRJZHggPj0gMCk7CistCistICAgIG1Db2xvckZvcm1hdCA9CistICAgICAg
ICBkaXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9y
bWF0SWR4XS5uYXRpdmVBbmdsZUZvcm1hdElkKTsKKy19CistSU9TdXJmYWNlU3VyZmFjZU10bDo6
fklPU3VyZmFjZVN1cmZhY2VNdGwoKQorLXsKKy0gICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKy0gICAgeworLSAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworLSAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CistICAgIH0KKy19CistCistZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGJ1ZmZlcikKKy17CistICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldElt
cGwoY29udGV4dCk7CistICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworLQorLSAg
ICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlmIG5lZWRlZDoKKy0gICAgQU5HTEVf
VE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAg
cmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb250ZXh0LCB0ZXh0dXJl
LCBidWZmZXIpOworLX0KKy0KKy1lZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikKKy17
CistICAgIGVnbDo6RXJyb3IgcmUgPSBPZmZzY3JlZW5TdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1h
Z2UoY29udGV4dCwgYnVmZmVyKTsKKy0gICAgU3RvcEZyYW1lQ2FwdHVyZSgpOworLSAgICByZXR1
cm4gcmU7CistfQorLQorLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0QXR0
YWNobWVudFJlbmRlclRhcmdldCgKKy0gICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgIEdMZW51bSBiaW5kaW5nLAorLSAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRl
eCwKKy0gICAgR0xzaXplaSBzYW1wbGVzLAorLSAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQgKipydE91dCkKKy17CistICAgIC8vIEluaXRpYWxpemUgb2Zmc2NyZWVuIHRleHR1
cmUgaWYgbmVlZGVkOgorLSAgICBBTkdMRV9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChj
b250ZXh0KSk7CistCistICAgIHJldHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpnZXRBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ0T3V0KTsKKy19CistCistYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1
cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0g
ICAgaWYgKG1Db2xvclRleHR1cmUpCistICAgIHsKKy0gICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKy0gICAgfQorLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorLSAgICB7Cist
ICAgICAgICBhdXRvIHRleERlc2MgPQorLSAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRv
ciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0Om1Db2xvckZvcm1hdC5tZXRhbEZv
cm1hdAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOm1TaXplLndpZHRoCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6bVNpemUuaGVpZ2h0
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBwZWQ6Tk9dOworLQorLSAgICAgICAgdGV4RGVzYy51c2FnZSA9IE1UTFRleHR1
cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7CistCistICAg
ICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlID0KKy0gICAgICAgICAgICBbY29udGV4dE10bC0+
Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2NyaXB0b3I6dGV4RGVzYworLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3Vy
ZmFjZTptSU9TdXJmYWNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOm1JT1N1cmZhY2VQbGFuZV07CistCistICAgICAg
ICBtQ29sb3JUZXh0dXJlID0gbXRsOjpUZXh0dXJlOjpNYWtlRnJvbU1ldGFsKFt0ZXh0dXJlIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV0pOworLSAgICB9CistCistICAgIG1Db2xvclJlbmRlclRhcmdl
dC5zZXQobUNvbG9yVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2ZU1pcExldmVsLCAwLCBtQ29sb3JG
b3JtYXQpOworLQorLSAgICBpZiAoa0lPU3VyZmFjZUZvcm1hdHNbbUlPU3VyZmFjZUZvcm1hdElk
eF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQorLSAgICB7CistICAgICAgICAvLyBUaGlzIGZv
cm1hdCBoYXMgZW11bGF0ZWQgYWxwaGEgY2hhbm5lbC4gSW5pdGlhbGl6ZSB0ZXh0dXJlJ3MgYWxw
aGEgY2hhbm5lbCB0byAxLjAuCistICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmcmdiQ2xlYXJG
b3JtYXQgPQorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpG
b3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKKy0gICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRpYWxp
emVUZXh0dXJlQ29udGVudHNHUFUoCistICAgICAgICAgICAgY29udGV4dCwgbUNvbG9yVGV4dHVy
ZSwgcmdiQ2xlYXJGb3JtYXQsCistICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpG
cm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpLAorLSAgICAgICAg
ICAgIE1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKKy0KKy0gICAgICAgIC8vIERpc2FibGUgc3Vi
c2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4KKy0gICAgICAgIG1Db2xvclRleHR1
cmUtPnNldENvbG9yV3JpdGFibGVNYXNrKE1UTENvbG9yV3JpdGVNYXNrQWxsICYgKH5NVExDb2xv
cldyaXRlTWFza0FscGhhKSk7CistICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLX0KKy0KKy0vLyBzdGF0aWMKKy1ib29sIElPU3VyZmFjZVN1cmZhY2VNdGw6
OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKQorLXsKKy0gICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IChfX2JyaWRnZSBJ
T1N1cmZhY2VSZWYpKGJ1ZmZlcik7CistCistICAgIC8vIFRoZSBwbGFuZSBtdXN0IGV4aXN0IGZv
ciB0aGlzIElPU3VyZmFjZS4gSU9TdXJmYWNlR2V0UGxhbmVDb3VudCBjYW4gcmV0dXJuIDAgZm9y
IG5vbi1wbGFuYXIKKy0gICAgLy8gaW9TdXJmYWNlcyBidXQgd2Ugd2lsbCB0cmVhdCBub24tcGxh
bmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCistICAgIHNpemVfdCBzdXJmYWNlUGxhbmVD
b3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChpb1N1cmZh
Y2UpKTsKKy0gICAgRUdMQXR0cmliIHBsYW5lICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX0lP
U1VSRkFDRV9QTEFORV9BTkdMRSk7CistICAgIGlmIChwbGFuZSA8IDAgfHwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQpCistICAgIHsKKy0gICAgICAgIHJl
dHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICAvLyBUaGUgd2lkdGggaGVpZ2h0IHNwZWNpZmll
ZCBtdXN0IGJlIGF0IGxlYXN0ICgxLCAxKSBhbmQgYXQgbW9zdCB0aGUgcGxhbmUgc2l6ZQorLSAg
ICBFR0xBdHRyaWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdMX1dJRFRIKTsKKy0gICAgRUdMQXR0
cmliIGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOworLSAgICBpZiAod2lkdGggPD0g
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFu
ZShpb1N1cmZhY2UsIHBsYW5lKSB8fAorLSAgICAgICAgaGVpZ2h0IDw9IDAgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihoZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShpb1N1cmZhY2Us
IHBsYW5lKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAg
IC8vIEZpbmQgdGhpcyBJT1N1cmZhY2UgZm9ybWF0CistICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZv
cm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7Cist
ICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUpOworLQorLSAgICBpbnQgZm9ybWF0SW5kZXggPQorLSAgICAgICAgRmluZElPU3Vy
ZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0
aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0KKy0gICAgaWYgKGZvcm1hdEluZGV4IDwgMCkKKy0g
ICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAgIC8vIENoZWNrIHRo
YXQgdGhlIGZvcm1hdCBtYXRjaGVzIHRoaXMgSU9TdXJmYWNlIHBsYW5lCistICAgIGlmIChJT1N1
cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5lKGlvU3VyZmFjZSwgcGxhbmUpICE9CistICAg
ICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCistICAg
IHsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gdHJ1ZTsK
Ky19CisgCisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5j
TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oCitpbmRleCA2MmY5
NmVlLi5mNGJjYWU5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5
bmNNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorQEAg
LTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgbXRsCisgCisgLy8gQ29tbW9uIGNsYXNzIHRvIGJlIHVzZWQgYnkgYm90
aCBTeW5jSW1wbCBhbmQgRUdMU3luY0ltcGwuCisgLy8gTk9URTogU2hhcmVkRXZlbnQgaXMgb25s
eSBkZWNsYXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KworLSNpZiBBTkdMRV9NVExfRVZF
TlRfQVZBSUxBQkxFCisrI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKKyBjbGFzcyBTeW5jCisgeworICAgcHVibGljOgorQEAgLTU5LDcgKzU5LDcgQEAg
Y2xhc3MgU3luYworICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+
IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IG1Mb2NrOworIH07CistI2Vs
c2UgICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorKyNlbHNlICAgLy8gI2lmIGRl
ZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKKyBjbGFzcyBTeW5j
CisgeworICAgcHVibGljOgorQEAgLTkwLDcgKzkwLDcgQEAgY2xhc3MgU3luYworICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgIH0KKyB9OworLSNlbmRpZiAgLy8gI2lm
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKysjZW5kaWYgIC8vICNpZiBkZWZpbmVkKF9fSVBI
T05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisgfSAgLy8gbmFtZXNwYWNlIG10bAor
IAorIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKK0BAIC05OCw5ICs5OCw3
IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKKyAgIHB1YmxpYzoKKyAg
ICAgRmVuY2VOVk10bCgpOworICAgICB+RmVuY2VOVk10bCgpIG92ZXJyaWRlOworLQorICAgICB2
b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CistCisg
ICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0g
Y29uZGl0aW9uKSBvdmVycmlkZTsKKyAgICAgYW5nbGU6OlJlc3VsdCB0ZXN0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJvb2xlYW4gKm91dEZpbmlzaGVkKSBvdmVycmlkZTsKKyAgICAg
YW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
OworQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xTeW5jTXRsIGZpbmFsIDogcHVibGljIEVH
TFN5bmNJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgZmxhZ3MpIG92ZXJy
aWRlOworICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKKyAKKysgICAgZWdsOjpFcnJvciBkdXBO
YXRpdmVGZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpyZXN1bHQp
IGNvbnN0IG92ZXJyaWRlOworKworICAgcHJpdmF0ZToKKyAgICAgbXRsOjpTeW5jIG1TeW5jOwor
IH07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0g
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQoraW5kZXggZGZmODAwMy4u
ZjhmM2VlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQorQEAgLTEs
NSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMjIsNyArMjIsNyBA
QAorIG5hbWVzcGFjZSBtdGwKKyB7CisgLy8gU2hhcmVkRXZlbnQgaXMgb25seSBhdmFpbGFibGUg
b24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKy0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisg
U3luYzo6U3luYygpIHt9CisgU3luYzo6flN5bmMoKSB7fQorIAorQEAgLTg3LDcgKzg3LDcgQEAK
KyAgICAgLy8gb25EZXN0cm95KCksIGJ1dCB0aGUgY2FsbGJhY2sgbWlnaHQgc3RpbGwgbm90IGJl
IGZpcmVkIHlldC4KKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
PiBjdlJlZiA9IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IGxvY2tSZWYg
ICAgICAgICAgICA9IG1Mb2NrOworLQorKyNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisg
ICAgIEF1dG9PYmpDT2JqPE1UTFNoYXJlZEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPQor
ICAgICAgICAgY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRPckNyZWF0ZVNoYXJlZEV2ZW50
TGlzdGVuZXIoKTsKKyAgICAgW21NZXRhbFNoYXJlZEV2ZW50LmdldCgpIG5vdGlmeUxpc3RlbmVy
OmV2ZW50TGlzdGVuZXIKK0BAIC0xMDYsNiArMTA2LDcgQEAKKyAKKyAgICAgQVNTRVJUKG1NZXRh
bFNoYXJlZEV2ZW50LmdldCgpLnNpZ25hbGVkVmFsdWUgPj0gbVNldENvdW50ZXIpOworICAgICAq
b3V0UmVzdWx0ID0gR0xfQ09ORElUSU9OX1NBVElTRklFRDsKKysjZW5kaWYKKyAKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KK0BAIC0xMTgsNyArMTE5LDcgQEAKKyAg
ICAgKnNpZ25hbGVkID0gbU1ldGFsU2hhcmVkRXZlbnQuZ2V0KCkuc2lnbmFsZWRWYWx1ZSA+PSBt
U2V0Q291bnRlcjsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0j
ZW5kaWYgIC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisrI2VuZGlmICAvLyAjaWYg
ZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorIH0gIC8vIG5h
bWVzcGFjZSBtdGwKKyAKKyAvLyBGZW5jZU5WTXRsIGltcGxlbWVudGF0aW9uCitAQCAtMTI4LDcg
KzEyOSw4IEBACisgCisgdm9pZCBGZW5jZU5WTXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworLSAgICBtU3luYy5vbkRlc3Ryb3koKTsKKysgICAgVU5JTVBMRU1F
TlRFRCgpOworKyAgICByZXR1cm47CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgRmVuY2VOVk10bDo6
c2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9uKQorQEAgLTMw
Nyw0ICszMDksMTAgQEAKKyAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworIH0KKyAKKytlZ2w6
OkVycm9yIEVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3QKKyt7CisrICAgIFVOUkVBQ0hBQkxFKCk7Cisr
ICAgIHJldHVybiBlZ2w6OkVnbEJhZERpc3BsYXkoKTsKKyt9CisrCisgfQorZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmggYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCitpbmRleCA1YzIxNDFiLi41ZjRiMmQ0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorKysrIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorQEAgLTE1LDkgKzE1LDkg
QEAKKyAjaW5jbHVkZSAiY29tbW9uL1BhY2tlZEVudW1zLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL1RleHR1cmVJbXBsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1JlbmRlclRhcmdldE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9j
b21tYW5kX2J1ZmZlci5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
cmVzb3VyY2VzLmgiCistCisgbmFtZXNwYWNlIHJ4CisgeworIAorQEAgLTMyLDYgKzMyLDggQEAg
Y2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAorIHsKKyAgIHB1YmxpYzoKKyAg
ICAgVGV4dHVyZU10bChjb25zdCBnbDo6VGV4dHVyZVN0YXRlICZzdGF0ZSk7CisrICAgIC8vIFRl
eHR1cmUgIHZpZXcKKysgICAgVGV4dHVyZU10bChjb25zdCBUZXh0dXJlTXRsICZtdGwsIEdMZW51
bSBmb3JtYXQpOworICAgICB+VGV4dHVyZU10bCgpIG92ZXJyaWRlOworICAgICB2b2lkIG9uRGVz
dHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtMTkzLDYg
KzE5NSw3IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKKyAgICAgSW1h
Z2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24oY29uc3QgZ2w6OkltYWdlSW5kZXgg
JmltYWdlSW5kZXgpOworICAgICBSZW5kZXJUYXJnZXRNdGwgJmdldFJlbmRlclRhcmdldChjb25z
dCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CisgICAgIGJvb2wgaXNJbmRleFdpdGhpbk1p
bk1heExldmVscyhjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgY29uc3Q7CisrICAg
IG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgZ2w6OkltYWdlSW5k
ZXggJmltYWdlSW5kZXgpOworIAorICAgICAvLyBJZiBsZXZlbHMgPSAwLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgY3JlYXRlIGZ1bGwgbWlwbWFwcyB0ZXh0dXJlLgorICAgICBhbmdsZTo6UmVzdWx0IHNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTMxMiw4ICszMTUs
OSBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCisgICAgIGFuZ2xlOjpS
ZXN1bHQgZ2VuZXJhdGVNaXBtYXBDUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworIAor
ICAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1Cb3Vu
ZFN1cmZhY2UgPSBuaWw7CisgICAgIC8vIFRoZSByZWFsIHRleHR1cmUgdXNlZCBieSBNZXRhbCBk
cmF3IGNhbGxzLgorLSAgICBtdGw6OlRleHR1cmVSZWYgbU5hdGl2ZVRleHR1cmU7CisrICAgIG10
bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZSAgICAgICAgID0gbmlsOworICAgICBpZDxNVExT
YW1wbGVyU3RhdGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5pbDsKKyAKKyAgICAgLy8gTnVtYmVy
IG9mIHNsaWNlcworQEAgLTMyMywxOCArMzI3LDE0IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJs
aWMgVGV4dHVyZUltcGwKKyAgICAgLy8gT25jZSB0aGUgaW1hZ2VzIGFycmF5IGlzIGNvbXBsZXRl
LCB0aGV5IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gcmVhbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAg
Ly8gTk9URToKKyAgICAgLy8gIC0gVGhlIHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBj
b25maWd1cmVkIGJhc2UgbGV2ZWwgKyBhY3R1YWwgbmF0aXZlIGxldmVsCistICAgIC8vICAtIEZv
ciBDdWJlIG1hcCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbVRleElt
YWdlRGVmcyB0YWJsZSwgb25lIGZvciBlYWNoCistICAgIC8vICBmYWNlLiBUaGlzIGlzIGJlY2F1
c2UgdGhlIEN1YmUgbWFwJ3MgaW1hZ2UgaXMgZGVmaW5lZCBwZXIgZmFjZSAmIHBlciBsZXZlbC4K
KysgICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVz
IGluIHRoZSBtYXAgdGFibGUsIG9uZSBmb3IgZWFjaCBmYWNlLiBUaGlzIGlzCisrICAgIC8vICBi
ZWNhdXNlIHRoZSBDdWJlIG1hcCdzIGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2
ZWwuCisgICAgIC8vICAtIEZvciBvdGhlciB0ZXh0dXJlIHR5cGVzLCB0aGVyZSB3aWxsIGJlIG9u
bHkgb25lIGVudHJ5IGluIHRoZSBtYXAgdGFibGUuIEFsbCBvdGhlciB0ZXh0dXJlcworICAgICAv
LyAgZXhjZXB0IEN1YmUgbWFwIGhhcyB0ZXh0dXJlIGltYWdlIGRlZmluZWQgcGVyIGxldmVsIChh
bGwgc2xpY2VzIGluY2x1ZGVkKS4KKysgICAgLy8gIC0gVGhlc2UgdGhyZWUgdmFyaWFibGVzJyBz
ZWNvbmQgZGltZW5zaW9uIGFyZSBpbmRleGVkIGJ5IGltYWdlIGluZGV4IChiYXNlIGxldmVsIGlu
Y2x1ZGVkKS4KKyAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxJbWFnZURlZmlu
aXRpb25NdGw+PiBtVGV4SW1hZ2VEZWZzOworLQorLSAgICAvLyBSZW5kZXIgVGFyZ2V0IHBlciBz
bGljZS9kZXB0aC9jdWJlIGZhY2UuCistICAgIC8vIC0gRm9yIDJEIHRleHR1cmU6IFRoZXJlIHdp
bGwgYmUgb25lIGtleSBlbnRyeSBpbiB0aGUgbWFwLgorLSAgICAvLyAtIEZvciBDdWJlIG1hcDog
VGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5IGVudHJpZXMuCistICAgIC8vIC0gRm9yIGFycmF5
LzNEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgYXQgbW9zdCBzbGljZXMvZGVwdGhzIG51bWJlciBv
ZiBrZXkgZW50cmllcy4KKy0gICAgLy8gLSBUaGUgc2Vjb25kIGRpbWVuc2lvbiBpcyBpbmRleGVk
IGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBuYXRpdmUgbGV2ZWwKKyAgICAgc3Rk
OjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxSZW5kZXJUYXJnZXRNdGw+PiBtUGVyTGF5ZXJS
ZW5kZXJUYXJnZXRzOworKyAgICBzdGQ6Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PG10bDo6
VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1TVGV4dHVyZXM7CisgCisgICAgIC8vIE1pcG1hcCB2aWV3
cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGlnbm9yZWQgYmFzZSBsZXZlbCk6CisgICAg
IG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBtTmF0aXZlTGV2ZWxWaWV3czsKK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbSBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitpbmRleCA2MjNjMTA0Li4zYjFjOGFmIDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitAQCAtMjAsOCAr
MjAsOCBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgi
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TYW1wbGVyTXRsLmgiCistI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgorQEAgLTUzNCw2ICs1MzQsMTAgQEAgR0xlbnVtIE92ZXJyaWRl
U3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1
bHQgVGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCisgeworKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICB9CisgICAgIGlmIChtTmF0aXZlVGV4
dHVyZSkKKyAgICAgeworICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
QEAgLTEyMDcsMjUgKzEyMTEsMTUgQEAgR0xlbnVtIE92ZXJyaWRlU3dpenpsZVZhbHVlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6Ymlu
ZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKy0KKy0gICAgYXV0byBwQnVmZmVy
ICAgICA9IEdldEltcGxBczxPZmZzY3JlZW5TdXJmYWNlTXRsPihzdXJmYWNlKTsKKy0gICAgbU5h
dGl2ZVRleHR1cmUgICA9IHBCdWZmZXItPmdldENvbG9yVGV4dHVyZSgpOworLSAgICBtRm9ybWF0
ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29sb3JGb3JtYXQoKTsKKy0gICAgZ2w6OkV4dGVudHMg
c2l6ZSA9IG1OYXRpdmVUZXh0dXJlLT5zaXplQXQwKCk7CistICAgIG1Jc1BvdzIgICAgICAgICAg
PSBnbDo6aXNQb3cyKHNpemUud2lkdGgpICYmIGdsOjppc1BvdzIoc2l6ZS5oZWlnaHQpICYmIGds
Ojppc1BvdzIoc2l6ZS5kZXB0aCk7CistICAgIEFOR0xFX1RSWShlbnN1cmVTYW1wbGVyU3RhdGVD
cmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAgLy8gVGVsbCBjb250ZXh0IHRvIHJlYmluZCB0ZXh0
dXJlcworLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworLSAgICBjb250ZXh0TXRsLT5pbnZhbGlkYXRlQ3VycmVudFRleHR1cmVzKCk7CistCisrICAg
IElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAoSU9TdXJmYWNlU3VyZmFjZU10bCAq
KW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKysgICAgbUJvdW5kU3VyZmFjZSAgICAgICAgICAgICAg
ICAgICA9IHN1cmZhY2VNdGw7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCisgYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKysg
ICAgbUJvdW5kU3VyZmFjZSA9IG5pbDsKKysKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworIH0KKyAKK0BAIC0xMjM1LDYgKzEyMjksMTIgQEAgR0xlbnVtIE92ZXJyaWRlU3dp
enpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVm
ZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQorIHsKKysgICAgaWYgKG1Cb3VuZFN1
cmZhY2UpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWSgKKysgICAgICAgICAgICBtQm91bmRT
dXJmYWNlLT5nZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdl
SW5kZXgsIHNhbXBsZXMsIHJ0T3V0KSk7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CisrICAgIH0KKyAgICAgQU5HTEVfVFJZKGVuc3VyZVRleHR1cmVDcmVhdGVkKGNv
bnRleHQpKTsKKyAKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChj
b250ZXh0KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNm
b3JtRmVlZGJhY2tNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1G
ZWVkYmFja010bC5oCitpbmRleCBhYTQ1YmY5Li4yMGEyYzIwIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oCitAQCAtMTAsMTIg
KzEwLDIwIEBACisgI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9UUkFOU0ZPUk1GRUVE
QkFDS01UTF9IXworICNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfVFJBTlNGT1JNRkVF
REJBQ0tNVExfSF8KKyAKKysjaW5jbHVkZSA8TWV0YWwvTWV0YWwuaD4KKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgCistbmFtZXNwYWNlIHJ4CisrdHlwZWRlZiB1
aW50NjRfdCBNdGxEZXZpY2VTaXplOworKworK25hbWVzcGFjZSBnbAorIHsKKytjbGFzcyBQcm9n
cmFtU3RhdGU7CisrfSAgLy8gbmFtZXNwYWNlIGdsCisgCistY2xhc3MgQ29udGV4dE10bDsKKytu
YW1lc3BhY2UgcngKKyt7CisgCisgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwgOiBwdWJsaWMg
VHJhbnNmb3JtRmVlZGJhY2tJbXBsCisgeworQEAgLTMyLDE3ICs0MCwyMyBAQCBjbGFzcyBUcmFu
c2Zvcm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1GZWVkYmFja0ltcGwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGds
OjpCdWZmZXI+ICZiaW5kaW5nKSBvdmVycmlkZTsKKyAKKy0gICAgLy8gUGFyYW1zOgorLSAgICAv
LyAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXggaXMgZmlyc3QgdmVydGV4IHVzZWQgYnkgZ2xEcmF3QXJy
YXlzKi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZQorLSAgICAvLyBnbF9WZXJ0ZXhJbmRleCBp
cyBzdGFydGluZyBmcm9tIHRoaXMuCistICAgIC8vIC0gc2tpcHBlZFZlcnRpY2VzIGlzIG51bWJl
ciBvZiBza2lwcGVkIHZlcnRpY2VzICh1c2VmdWwgZm9yIG11bHRpcGxlIG1ldGFsIGRyYXdzIHBl
ciBHTCBkcmF3CistICAgIC8vIGNhbGwpLgorLSAgICBhbmdsZTo6UmVzdWx0IGdldEJ1ZmZlck9m
ZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgdm9pZCBnZXRCdWZmZXJPZmZzZXRz
KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkcmF3Q2FsbEZpcnN0VmVydGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2tpcHBlZFZlcnRpY2VzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCk7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG9mZnNldHNTaXplKSBjb25zdDsKKysKKysgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmZ2V0QnVmZmVySGFuZGxlcygpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIHJldHVybiBtQnVmZmVySGFuZGxlczsKKysgICAgfQorIAorICAgcHJpdmF0
ZToKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiBt
QnVmZmVySGFuZGxlczsKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10
bERldmljZVNpemU+IG1CdWZmZXJPZmZzZXRzOworKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNpemVzOworKworKyAgICAvLyBBbGln
bmVkIG9mZnNldCBmb3IgZW11bGF0aW9uLiBDb3VsZCBiZSBzbWFsbGVyIHRoYW4gb2Zmc2V0Lgor
KyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUFs
aWduZWRCdWZmZXJPZmZzZXRzOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1t
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCitp
bmRleCBkOTQwYzNkLi5kZTdhOTA5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KK0BAIC04LDE4ICs4LDI3IEBACisgLy8K
KyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tN
dGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaCIKKyAKKy0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvUXVlcnkuaCIKKy0j
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorLSNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIgorKworKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKyAKKyBuYW1lc3BhY2UgcngKKyB7CisgCisgVHJhbnNmb3JtRmVlZGJhY2tN
dGw6OlRyYW5zZm9ybUZlZWRiYWNrTXRsKGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja1N0YXRl
ICZzdGF0ZSkKKy0gICAgOiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwoc3RhdGUpCisrICAgIDogVHJh
bnNmb3JtRmVlZGJhY2tJbXBsKHN0YXRlKSwKKysgICAgICBtQnVmZmVySGFuZGxlc3t9LAorKyAg
ICAgIG1CdWZmZXJPZmZzZXRze30sCisrICAgICAgbUJ1ZmZlclNpemVze30sCisrICAgICAgbUFs
aWduZWRCdWZmZXJPZmZzZXRze30KKyB7fQorIAorIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJh
bnNmb3JtRmVlZGJhY2tNdGwoKSB7fQorQEAgLTI3LDQwICszNiw3OSBAQAorIGFuZ2xlOjpSZXN1
bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRp
dmVNb2RlIHByaW1pdGl2ZU1vZGUpCisgeworLSAgICBtdGw6OkdldEltcGwoY29udGV4dCktPm9u
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7CisrICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIC8vIE5vdCBjdXJyZW50
bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisrICAgIGlmICghY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVk
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQor
IAorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIGNvbnN0IGdsOjpQ
cm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0
UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworKyAgICBzaXpl
X3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ckNvdW50KCk7CisrCisrICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5k
ZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKysgICAgeworKyAgICAgICAgY29u
c3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nID0gbVN0YXRl
LmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworKyAgICAgICAgQVNTRVJUKGJpbmRpbmcu
Z2V0KCkpOworKworKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwo
YmluZGluZy5nZXQoKSk7CisrCisrICAgICAgICBhc3NlcnQoYnVmZmVyTXRsKTsKKysgICAgICAg
IG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRpbmcuZ2V0T2Zmc2V0KCk7CisrICAg
ICAgICBtQnVmZmVyU2l6ZXNbYnVmZmVySW5kZXhdICAgPSBnbDo6R2V0Qm91bmRCdWZmZXJBdmFp
bGFibGVTaXplKGJpbmRpbmcpOworKyAgICAgICAgbUJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhd
ID0gYnVmZmVyTXRsOworKworKyAgICAgICAgQVNTRVJUKGNvbnRleHRNdGwtPmdldERpc3BsYXko
KS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCk7CisrICAg
ICAgICBjb25zdCBNdGxEZXZpY2VTaXplIG9mZnNldEFsaWdubWVudCA9IG10bDo6a1VuaWZvcm1C
dWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50OworKworKyAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZXJlJ3Mgbm8gcG9zc2libGUgdW5kZXIvb3ZlcmZsb3cgd2l0aCBiaW5kaW5nIHNpemUuCisr
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNdGxEZXZpY2VTaXplKSA+PSBzaXplb2YoYmlu
ZGluZy5nZXRTaXplKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAiTXRsRGV2aWNlU2l6ZSB0
b28gc21hbGwiKTsKKysKKysgICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGFzIGNsb3NlIGFzIHBv
c3NpYmxlIHRvIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IHdoaWxlIHJlbWFpbmluZyBhbGlnbmVkLgor
KyAgICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9CisrICAgICAgICAg
ICAgKG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAvIG9mZnNldEFsaWdubWVudCkgKiBvZmZz
ZXRBbGlnbm1lbnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbnRleHRNdGwtPm9uQmVnaW5U
cmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZmZXJDb3VudCwgbUJ1ZmZlckhhbmRsZXMpOworIH0KKyAK
KyBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJ
bXBsKGNvbnRleHQpOworKyAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIG1zbCBj
b21waWxlcgorKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisrICAgIH0KKysKKysgICAgLy8gSWYgdGhlcmUncyBh
biBhY3RpdmUgdHJhbnNmb3JtIGZlZWRiYWNrIHF1ZXJ5LCBhY2N1bXVsYXRlIHRoZSBwcmltaXRp
dmVzIGRyYXduLgorICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgPSBjb250ZXh0LT5nZXRT
dGF0ZSgpOworICAgICBnbDo6UXVlcnkgKnRyYW5zZm9ybUZlZWRiYWNrUXVlcnkgPQorICAgICAg
ICAgZ2xTdGF0ZS5nZXRBY3RpdmVRdWVyeShnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNXcml0dGVuKTsKKysKKyAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkp
CisgICAgIHsKKy0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+
b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKysgICAgICAgIG10bDo6R2V0SW1wbCh0
cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChtU3RhdGUuZ2V0
UHJpbWl0aXZlc0RyYXduKCkpOworICAgICB9CistCistICAgIG10bDo6R2V0SW1wbChjb250ZXh0
KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOworLQorKyAgICBj
b250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFj
a010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICAvLyBXaGVu
IFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1ZmZlcnMgdG8gYmUgYm91bmQgZm9y
IG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKKy0gICAgLy8gb25UcmFuc2Zvcm1GZWVk
YmFja0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgorLSAgICBtdGw6OkdldEltcGwoY29udGV4
dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tJbmFjdGl2ZShjb250ZXh0LCB0aGlzKTsKKy0KKy0gICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICByZXR1cm4gY29udGV4dE10bC0+b25Q
YXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3Jt
RmVlZGJhY2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CistICAg
IG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0
LCB0aGlzKTsKKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoY29u
dGV4dCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNv
bnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJU
KGV4ZWN1dGFibGUpOworKyAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIHJldHVybiBjb250ZXh0TXRs
LT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVmZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVz
KTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4
ZWRCdWZmZXIoCitAQCAtNjgsMTcgKzExNiwyMCBAQAorICAgICBzaXplX3QgaW5kZXgsCisgICAg
IGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYmluZGluZykKKyB7
CistICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdworKyAgICBVTklNUExFTUVOVEVEKCk7CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCistYW5nbGU6OlJlc3Vs
dCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBza2lwcGVkVmVydGlj
ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3QKKyB7CistICAg
IGludDY0X3QgdmVydGljZXNEcmF3biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG1TdGF0ZS5nZXRW
ZXJ0aWNlc0RyYXduKCkpICsgc2tpcHBlZFZlcnRpY2VzOworKyAgICBpZiAoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5h
YmxlZCkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgR0xzaXplaXB0ciB2ZXJ0aWNlc0RyYXdu
ID0gbVN0YXRlLmdldFZlcnRpY2VzRHJhd24oKTsKKyAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8R0xz
aXplaT4gJmJ1ZmZlclN0cmlkZXMgPQorICAgICAgICAgbVN0YXRlLmdldEJvdW5kUHJvZ3JhbSgp
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKKyAgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFt
RXhlY3V0YWJsZSgpOworQEAgLTg3LDI3ICsxMzgsMjUgQEAKKyAKKyAgICAgQVNTRVJUKHhmYkJ1
ZmZlckNvdW50ID4gMCk7CisgCisrICAgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0
aGUgb2Zmc2V0cyBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgVGhlIG1heGltdW0gcG9zc2libGUK
KysgICAgLy8gbnVtYmVyIG9mIG91dHB1dHMgaXMgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUy4KKysgICAgQVNTRVJUKG9mZnNldHNTaXplID49IHhmYkJ1
ZmZlckNvdW50KTsKKysKKyAgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJ
bmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgICB7CistICAgICAgICBj
b25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJ1ZmZlckJpbmRpbmcg
PQorLSAgICAgICAgICAgIG1TdGF0ZS5nZXRJbmRleGVkQnVmZmVyKGJ1ZmZlckluZGV4KTsKKy0K
Ky0gICAgICAgIEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwor
LQorLSAgICAgICAgLy8gT2Zmc2V0IHRoZSBnbF9WZXJ0ZXhJbmRleCBieSBkcmF3Q2FsbEZpcnN0
VmVydGV4CisrICAgICAgICBpbnQ2NF90IG9mZnNldEZyb21EZXNjcmlwdG9yID0KKysgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihtQnVmZmVyT2Zmc2V0c1tidWZmZXJJbmRleF0gLSBt
QWxpZ25lZEJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdKTsKKyAgICAgICAgIGludDY0X3QgZHJh
d0NhbGxWZXJ0ZXhPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2ZXJ0aWNlc0RyYXduKSAt
IGRyYXdDYWxsRmlyc3RWZXJ0ZXg7CisgCisgICAgICAgICBpbnQ2NF90IHdyaXRlT2Zmc2V0ID0K
Ky0gICAgICAgICAgICAoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSArIGRyYXdDYWxsVmVydGV4
T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0pIC8KKysgICAgICAgICAgICAob2Zm
c2V0RnJvbURlc2NyaXB0b3IgKyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNb
YnVmZmVySW5kZXhdKSAvCisgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc2l6ZW9m
KHVpbnQzMl90KSk7CisgCisgICAgICAgICBvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KHdyaXRlT2Zmc2V0KTsKKyAKKy0gICAgICAgIC8vIENoZWNrIGZvciBv
dmVyZmxvdy4KKy0gICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIG9mZnNl
dHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRlT2Zmc2V0KTsKKysgICAgICAgIC8vIEFzc2VydCBv
biBvdmVyZmxvdy4gIEZvciBub3csIHN1cHBvcnQgdHJhbnNmb3JtIGZlZWRiYWNrIHVwIHRvIDJH
Qi4KKysgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNl
dCk7CisgICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9W
ZXJ0ZXhBcnJheU10bC5oCitpbmRleCBjMmZiODQ2Li5mZTZiNWY3IDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCitAQCAtNDMsOCArNDMsOSBAQCBj
bGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMpOworIAorICAg
ICAvLyB2ZXJ0ZXhEZXNjQ2hhbmdlZCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1
dCB2YWx1ZSBpZiBpcyB0cnVlLCB3aWxsIGZvcmNlIG5ldworLSAgICAvLyBtdGw6OlZlcnRleERl
c2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25s
eSByZXR1cm5lZCB3aGVuIHRoZQorLSAgICAvLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkKKysgICAg
Ly8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBUaGlz
IHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZlIHNoYWRlcgorKyAgICAvLyBwcm9ncmFtIGlz
IGNoYW5nZWQuCisrICAgIC8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRo
ZSB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkuCisgICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFuZ2VkLAorQEAgLTUyLDExICs1MywyNCBA
QCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAKKyAgICAg
YW5nbGU6OlJlc3VsdCBnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBl
IGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0
aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpbmRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0KTsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5k
ZXhUeXBlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
ZXhCdWZmZXJDb3VudE91dCk7CisrCisrICAgIC8vIFVzZSB0byBlbXVsYXRlIGluc3RhbmNlZCBk
cmF3IGZvciBpbnN0YW5jZSA8aW5zdGFuY2VJZD4uCisrICAgIC8vIFRoZSB0eXBpY2FsIGNhbGwg
c2VxdWVuY2UgZm9yIGVtdWxhdGVkIGluc3RhbmNlIGRyYXcgaXM6CisrICAgIC8vIC0gc2V0dXBE
cmF3KCkKKysgICAgLy8gLSBkcmF3LgorKyAgICAvLyAtIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVw
KDEpCisrICAgIC8vIC0gZHJhdy4KKysgICAgLy8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChu
KQorKyAgICAvLyAtIGRyYXcuCisrICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoMCkK
KysgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0YW5jZUlkKTsKKyAKKyAgIHByaXZhdGU6Cisg
ICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4dCk7CitAQCAtNzIsMTUgKzg2LDE5IEBA
IGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAorIAorICAgICBh
bmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJD
b3VudE91dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2
ZU1vZGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpp
ZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyQ291bnRPdXQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQ
VShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCitAQCAtMTE3
LDcgKzEzNSwyMCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUlt
cGwKKyAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRlck10bCAqPiBtQ3VycmVudEFycmF5
QnVmZmVyczsKKyAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBsZVdlYWtCdWZmZXJIb2xkZXJNdGw+
IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CisgICAgIGdsOjpBdHRyaWJBcnJheTxzaXpl
X3Q+IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzOworKworKyAgICAvLyBTaXplIHRvIGJlIHVw
bG9hZGVkIGFzIGlubGluZSBjb25zdGFudCBkYXRhLiBVc2VkIGZvciBjbGllbnQgdmVydGV4IGF0
dHJpYnV0ZSdzIGRhdGEgdGhhdAorKyAgICAvLyBpcyBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBjYW4g
c2VuZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0YSBpbnN0ZWFkIG9mIHN0cmVhbWlu
ZworKyAgICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorKyAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzOworKyAgICAvLyBBcnJheSBvZiBob3N0IGJ1
ZmZlcnMgc3RvcmluZyBjb252ZXJ0ZWQgZGF0YSBmb3IgY2xpZW50IGF0dHJpYnV0ZXMgdGhhdCBh
cmUgc21hbGwgZW5vdWdoLgorKyAgICBnbDo6QXR0cmliQXJyYXk8YW5nbGU6Ok1lbW9yeUJ1ZmZl
cj4gbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzOworKyAgICBnbDo6QXR0cmliQXJyYXk8Y29u
c3QgdWludDhfdCAqPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzOworKyAgICAvLyBN
YXggc2l6ZSBvZiBpbmxpbmUgY29uc3RhbnQgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGZvciBjbGll
bnQgdmVydGV4IGF0dHJpYnV0ZS4KKysgICAgc2l6ZV90IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgLy8gU3RyaWRlIHBlciB2ZXJ0ZXggYXR0cmlidXRlCisgICAgIGdsOjpBdHRyaWJBcnJh
eTxHTHVpbnQ+IG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzOworKyAgICAvLyBGb3JtYXQgcGVy
IHZlcnRleCBhdHRyaWJ1dGUKKyAgICAgZ2w6OkF0dHJpYkFycmF5PGNvbnN0IG10bDo6VmVydGV4
Rm9ybWF0ICo+IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzOworIAorICAgICBjb25zdCBtdGw6
OlZlcnRleEZvcm1hdCAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKK0BAIC0xMjcsNiArMTU4
LDggQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCisgICAg
IG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY1ZlcnRleERhdGE7CisgICAgIG10bDo6QnVmZmVyUG9v
bCBtRHluYW1pY0luZGV4RGF0YTsKKyAKKysgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmliczsKKysKKyAgICAgYm9vbCBtVmVydGV4QXJyYXlEaXJ0eSA9IHRy
dWU7CisgfTsKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwubW0KK2luZGV4IGNkOTYxYzEuLjAyMTk1ZDggMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQorQEAgLTgsNiAr
OCw5IEBACisgLy8KKyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4
QXJyYXlNdGwuaCIKKysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKK0BAIC03NiwxNSArNzksMTUgQEAgc2l6ZV90
IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5
cGUsIHNpemVfdCBpbmRleEMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90ICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5kZXhDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4Q291bnRPdXQpCisgeworICAgICBkeW5hbWljQnVmZmVyLT5yZWxl
YXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOworLQorICAgICBjb25zdCBzaXplX3QgYW1v
dW50ID0gR2V0SW5kZXhDb252ZXJ0ZWRCdWZmZXJTaXplKGluZGV4VHlwZSwgaW5kZXhDb3VudCk7
CisgICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRyOworLQorICAgICBBTkdMRV9UUlko
CisgICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShjb250ZXh0TXRsLCBhbW91bnQsICZk
c3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxscHRyKSk7CisgCitAQCAtMTIxLDYg
KzEyNCw3IEBAIHNpemVfdCBHZXRJbmRleENvbnZlcnRlZEJ1ZmZlclNpemUoZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlLCBzaXplX3QgaW5kZXhDCisgICAgIHsKKyAgICAgICAgIG1lbWNw
eShkc3QsIHNvdXJjZVBvaW50ZXIsIGFtb3VudCk7CisgICAgIH0KKysgICAgKmluZGV4Q291bnRP
dXQgPSBpbmRleENvdW50OworICAgICBBTkdMRV9UUlkoZHluYW1pY0J1ZmZlci0+Y29tbWl0KGNv
bnRleHRNdGwpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAg
LTIwOCw2ICsyMTIsMzAgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91
dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgIGZvcm1hdCA9
ICZtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0OworICAgICB9CisgCisrICAgIGZvciAoc2l6ZV90
ICZpbmxpbmVEYXRhU2l6ZSA6IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXMpCisrICAgIHsK
KysgICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKysgICAgfQorKworKyAgICBmb3IgKGFuZ2xl
OjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5IDogbUNvbnZlcnRlZENsaWVudFNt
YWxsQXJyYXlzKQorKyAgICB7CisrICAgICAgICBjb252ZXJ0ZWRDbGllbnRBcnJheS5jbGVhcigp
OworKyAgICB9CisrCisrICAgIGZvciAoY29uc3QgdWludDhfdCAqJmNsaWVudFBvaW50ZXIgOiBt
Q3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorKyAgICB7CisrICAgICAgICBjbGllbnRQ
b2ludGVyID0gbnVsbHB0cjsKKysgICAgfQorKworKyAgICBpZiAoY29udGV4dC0+Z2V0RGlzcGxh
eSgpLT5nZXRGZWF0dXJlcygpLmFsbG93SW5saW5lQ29uc3RWZXJ0ZXhEYXRhLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9IG10bDo6a0lubGluZUNvbnN0RGF0
YU1heFNpemU7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtSW5saW5lRGF0
YU1heFNpemUgPSAwOworKyAgICB9CisrCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsK
KyB9CisgCitAQCAtMzE1LDIyICszNDMsMjggQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyB9Cisg
CisgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB0aGUgaW5w
dXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKKy0vLyBtdGw6OlZlcnRleERlc2Mg
dG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25seSBy
ZXR1cm5lZCB3aGVuIHRoZQorLS8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorKy8vIG10bDo6VmVy
dGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhpcyB0eXBpY2FsbHkg
aGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKysvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisrLy8g
T3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlIHZlcnRleCBhcnJheSBpcyBk
aXJ0eS4KKyBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VmVydGV4RGVzYyAq
dmVydGV4RGVzY091dCkKKyB7CisrICAgIC8vIE5PVEUoaHFsZSk6IGNvbnNpZGVyIG9ubHkgdXBk
YXRpbmcgZGlydHkgYXR0cmlidXRlcworICAgICBib29sIGRpcnR5ID0gbVZlcnRleEFycmF5RGly
dHkgfHwgKnZlcnRleERlc2NDaGFuZ2VkOworIAorICAgICBpZiAoZGlydHkpCisgICAgIHsKKysg
ICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
KysKKyAgICAgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gZmFsc2U7CisrICAgICAgICBtRW11bGF0
ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKKyAKKy0gICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkt
PmdldFN0YXRlKCk7CisrICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJvZ3JhbUFjdGl2ZUF0dHJpYnNNYXNr
ID0KKy0gICAgICAgICAgICBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbSgpLT5nZXRF
eGVjdXRhYmxlKCkuZ2V0QWN0aXZlQXR0cmliTG9jYXRpb25zTWFzaygpOworKyAgICAgICAgICAg
IGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKysgICAgICAgIGNv
bnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUo
KS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CisgCisgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5nZXRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QmluZGluZz4gJmJp
bmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOworQEAgLTM2MCw4ICszOTQsNyBA
QCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVm
ZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5k
aW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisgCisgICAgICAg
ICAgICAgYm9vbCBhdHRyaWJFbmFibGVkID0gYXR0cmliLmVuYWJsZWQ7CistICAgICAgICAgICAg
aWYgKGF0dHJpYkVuYWJsZWQgJiYKKy0gICAgICAgICAgICAgICAgKCFtQ3VycmVudEFycmF5QnVm
ZmVyc1t2XSB8fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSkp
CisrICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYgIW1DdXJyZW50QXJyYXlCdWZmZXJz
W3ZdICYmICFtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW3ZdKQorICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBpdCB0byBhdm9pZCBjcmFzaC4KKyAgICAg
ICAgICAgICAgICAgYXR0cmliRW5hYmxlZCA9IGZhbHNlOworQEAgLTM2OSwzMyArNDAyLDMwIEBA
IGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZm
ZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgICAgICAgICAgICAgaWYgKCFhdHRyaWJFbmFibGVk
KQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gVXNlIGRlZmF1bHQgYXR0cmli
dXRlCisrICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5idWZmZXJJbmRleCA9IG10
bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4OworKyAgICAgICAgICAgICAgICBkZXNjLmF0
dHJpYnV0ZXNbdl0ub2Zmc2V0ICAgICAgPSB2ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7
CisgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmluZCB0aGUgYXR0cmlidXRlIGhhdmluZyB0
aGUgZXhhY3QgYmluZGluZyBsb2NhdGlvbiA9IHYgaW4gdGhlIHByb2dyYW0KKyAgICAgICAgICAg
ICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmlldmUgaXRzIGNvcmVzcG9uZGluZyBkYXRhIHR5
cGU6CisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJs
ZT4gJnByb2dyYW1JbnB1dHMgPQorICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbVN0YXRlLmdl
dFByb2dyYW1JbnB1dHMoKTsKKyAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRl
clZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmliSW5mb0l0ZSA9IHN0ZDo6ZmluZF9pZigK
KyAgICAgICAgICAgICAgICAgICAgIGJlZ2luKHByb2dyYW1JbnB1dHMpLCBlbmQocHJvZ3JhbUlu
cHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUgJnN2KSB7CistICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikgPT0g
djsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYg
PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9jYXRpb24pICsKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmFyaWFibGVBdHRyaWJ1dGVDb3VudChzdi50eXBl
KTsKKyAgICAgICAgICAgICAgICAgICAgIH0pOworIAorLSAgICAgICAgICAgICAgICBpZiAoYXR0
cmliSW5mb0l0ZSA9PSBlbmQocHJvZ3JhbUlucHV0cykpCisrICAgICAgICAgICAgICAgIEFTU0VS
VChhdHRyaWJJbmZvSXRlICE9IGVuZChwcm9ncmFtSW5wdXRzKSk7CisrICAgICAgICAgICAgICAg
IHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShhdHRyaWJJbmZvSXRlLT50eXBlKSkK
KyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkg
dGhpcyBpcyBhcnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAwLgorLSAgICAgICAgICAgICAgICAg
ICAgLy8gQWxyZWFkeSBoYW5kbGVkIHdoZW4gZW5jb3VudGVyIGZpcnN0IGVsZW1lbnQuCistICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAg
ICAgICAgICAgICB1aW50MzJfdCBhcnJheVNpemU7CistICAgICAgICAgICAgICAgIE1UTFZlcnRl
eEZvcm1hdCBmb3JtYXQ7CistCistICAgICAgICAgICAgICAgIGdldFZlcnRleEF0dHJpYkZvcm1h
dEFuZEFycmF5U2l6ZSgqYXR0cmliSW5mb0l0ZSwgJmZvcm1hdCwgJmFycmF5U2l6ZSk7CistCist
ICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgdmFJZHggPSB2OyB2YUlkeCA8IHYgKyBhcnJh
eVNpemU7ICsrdmFJZHgpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleDsKKy0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlk
eF0ub2Zmc2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1bHRBdHRyaWJ1dGVTaXplOworLSAg
ICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZhSWR4XS5mb3JtYXQgICAgICA9IGZv
cm1hdDsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEludFZlcnRleEZv
cm1hdC5tZXRhbEZvcm1hdDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdFVJbnRWZXJ0ZXhGb3Jt
YXQubWV0YWxGb3JtYXQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0
cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UK
K0BAIC00MTcsMTcgKzQ0NywzNSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVy
TGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAg
ICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0gTVRMVmVydGV4
U3RlcEZ1bmN0aW9uUGVyVmVydGV4OworICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRz
W2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMTsKKyAgICAgICAgICAgICAgICAgfQorLSAgICAg
ICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRleHRNdGwtPmdl
dERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFi
bGVkKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91
dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25QZXJJbnN0
YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBS
YXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigpOworICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKysgICAgICAgICAgICAgICAgICAgIG1F
bXVsYXRlZEluc3RhbmNlQXR0cmlicy5wdXNoX2JhY2sodik7CisrICAgICAgICAgICAgICAgICAg
ICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVu
Y3Rpb25Db25zdGFudDsKKysgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJ
ZHhdLnN0ZXBSYXRlICAgICA9IDA7CisrICAgICAgICAgICAgICAgIH0KKysKKyAgICAgICAgICAg
ICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RyaWRlID0gbUN1cnJlbnRBcnJheUJ1ZmZl
clN0cmlkZXNbdl07CisgCisrICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVy
c1t2XSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY21kRW5jb2Rl
ci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVm
ZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm8gYnVmZmVyIHNwZWNpZmllZCwgdXNlIHRoZSBjbGllbnQgbWVtb3J5IGRpcmVjdGx5IGFzIGlu
bGluZSBjb25zdGFudCBkYXRhCisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRB
cnJheUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAg
ICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1cnJlbnRBcnJheUlubGlu
ZURhdGFQb2ludGVyc1t2XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbdl0sIGJ1ZmZlcklkeCk7Cisr
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisrICAgICAgICB9ICAvLyBmb3IgKHYp
CisgICAgIH0KKyAKKyAgICAgKnZlcnRleERlc2NDaGFuZ2VkID0gZGlydHk7CitAQCAtNDM1LDYg
KzQ4Myw0MiBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6
VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgfQorIAorK3ZvaWQgVmVydGV4QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VJ
ZCkKKyt7CisrCisrICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhBdHRyaWJ1dGU+ICZh
dHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OlZlcnRleEJpbmRpbmc+ICZiaW5kaW5ncyAgPSBtU3RhdGUuZ2V0VmVydGV4Qmlu
ZGluZ3MoKTsKKysKKysgICAgZm9yICh1aW50MzJfdCBpbnN0YW5jZUF0dHJpYklkeCA6IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmlicykKKysgICAgeworKyAgICAgICAgdWludDMyX3QgYnVmZmVySWR4
ICAgICAgICAgICAgICAgPSBtdGw6OmtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGluc3RhbmNlQXR0
cmliSWR4OworKyAgICAgICAgY29uc3QgYXV0byAmYXR0cmliICAgICAgICAgICAgICAgPSBhdHRy
aWJzW2luc3RhbmNlQXR0cmliSWR4XTsKKysgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5n
ICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisrICAgICAgICB1aW50
MzJfdCBvZmZzZXQgPQorKyAgICAgICAgICAgIGluc3RhbmNlSWQgLyBiaW5kaW5nLmdldERpdmlz
b3IoKSAqIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2luc3RhbmNlQXR0cmliSWR4XTsKKysg
ICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0pCisrICAg
ICAgICB7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtQ3Vy
cmVudEFycmF5QnVmZmVyT2Zmc2V0c1tpbnN0YW5jZUF0dHJpYklkeF0pOworKworKyAgICAgICAg
ICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0
YW5jZUF0dHJpYklkeF0tPmdldEN1cnJlbnRCdWZmZXIoKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBidWZmZXJJZHgpOworKyAgICAgICAgfQorKyAg
ICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIE5vIGJ1ZmZlciBzcGVjaWZp
ZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0
YQorKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3Rh
bmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ5dGVz
KG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5zdGFuY2VBdHRyaWJJZHhdICsgb2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QXJy
YXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIC0gb2Zmc2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkeCk7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBkYXRlQ2xpZW50
QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0VmVydGV4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB2ZXJ0
ZXhPckluZGV4Q291bnQsCitAQCAtNDYzLDEwICs1NDcsNyBAQCBpbmxpbmUgdm9pZCBTZXREZWZh
dWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0
KQorICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJpbmRpbmcgJmJpbmRpbmcgID0gYmluZGluZ3Nb
YXR0cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgICBBU1NFUlQoYXR0cmliLmVuYWJsZWQgJiYg
YmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRyKTsKKyAKKy0gICAgICAgIEdMdWlu
dCBzdHJpZGU7CistICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0
ID0KKy0gICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0
dHJpYi5mb3JtYXQtPmlkLCAmc3RyaWRlKTsKKy0KKysgICAgICAgIC8vIFNvdXJjZSBjbGllbnQg
bWVtb3J5IHBvaW50ZXIKKyAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOworICAgICAgICAgQVNTRVJUKHNyYyk7
CisgCitAQCAtNDg0LDIyICs1NjUsNzYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1
ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAg
ICAgICBzdGFydEVsZW1lbnQgPSAwOworICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IFVuc2ln
bmVkQ2VpbERpdmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5nLmdldERpdmlzb3IoKSk7CisgICAg
ICAgICB9CisrICAgICAgICBzaXplX3QgYnl0ZXNJbnRlbmRlZFRvVXNlID0gKHN0YXJ0RWxlbWVu
dCArIGVsZW1lbnRDb3VudCkgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworKworKyAgICAgICAgY29u
c3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRleHRNdGwtPmdldFZlcnRleEZvcm1h
dChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworKyAgICAgICAgYm9vbCBuZWVkU3RyZWFtaW5n
ICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAhPSBmb3JtYXQuaW50ZW5kZWRG
b3JtYXRJZCB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3Ry
aWRlKCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDAgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpIDwgZm9y
bWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgfHwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBEYXRhIHdpbGwgYmUgdXBsb2FkZWQgZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEK
KysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAg
ICA9IG51bGxwdHI7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVy
c1thdHRyaWJJbmRleF0gPSBzcmM7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURh
dGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc0ludGVuZGVkVG9Vc2U7CisrICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSAgICAgID0g
JmZvcm1hdDsKKysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJ
bmRleF0gICAgICA9IGJpbmRpbmcuZ2V0U3RyaWRlKCk7CisrICAgICAgICB9CisrICAgICAgICBl
bHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgR0x1aW50IGNvbnZlcnRlZFN0cmlkZTsKKysg
ICAgICAgICAgICAvLyBOZWVkIHRvIHN0cmVhbSB0aGUgY2xpZW50IHZlcnRleCBkYXRhIHRvIGEg
YnVmZmVyLgorKyAgICAgICAgICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZzdHJlYW1Gb3Jt
YXQgPQorKyAgICAgICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRN
dGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmY29udmVydGVkU3RyaWRlKTsKKysKKyAgICAgICAgICAg
ICAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50IHNvIGlu
ZGV4aW5nIHdpbGwgd29yay4gIElmIHdlIGRvbid0CisgICAgICAgICAgICAgLy8gc3RhcnQgYXQg
emVybyBhbGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCisgICAgICAgICAgICAgLy8gT25seSBl
bGVtZW50Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNv
IHRoYXQgaXMgYWxsIHdlIGNvcHkuCistICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0g
KHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6
ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICogY29u
dmVydGVkU3RyaWRlOworICAgICAgICAgICAgIHNyYyArPSBzdGFydEVsZW1lbnQgKiBiaW5kaW5n
LmdldFN0cmlkZSgpOworLSAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBjb252ZXJ0ZWRTdHJpZGU7CisgCistICAgICAgICBtRHluYW1pY1ZlcnRleERhdGEudXBkYXRl
QWxpZ25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBp
eGVsQnl0ZXMpOworLSAgICAgICAgQU5HTEVfVFJZKFN0cmVhbVZlcnRleERhdGEoCistICAgICAg
ICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2Nh
dGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKKy0gICAgICAgICAgICBiaW5kaW5nLmdldFN0
cmlkZSgpLCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAorLSAgICAgICAgICAgICZt
Q29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwgJm1DdXJyZW50QXJyYXlC
dWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSkpOworKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlC
dWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1Gb3JtYXQ7CisrICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gY29udmVydGVkU3RyaWRl
OworKworKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2NhdGUgPD0gbUlubGluZURhdGFNYXhT
aXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMg
c21hbGwgZW5vdWdoLCB1c2UgaG9zdCBtZW1vcnkgaW5zdGVhZCBvZiBjcmVhdGluZyBHUFUgYnVm
ZmVyLiBUbworKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0
byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgorKyAgICAgICAgICAgICAgICBhbmds
ZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJheSA9CisrICAgICAgICAgICAgICAg
ICAgICBtQ29udmVydGVkQ2xpZW50U21hbGxBcnJheXNbYXR0cmliSW5kZXhdOworKyAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVydGVkQ2xpZW50QXJyYXkuc2l6ZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBTkdMRV9DSEVDS19H
TF9BTExPQyhjb250ZXh0TXRsLCBjb252ZXJ0ZWRDbGllbnRBcnJheS5yZXNpemUoYnl0ZXNUb0Fs
bG9jYXRlKSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24pOworKyAgICAgICAgICAgICAgICBzdHJl
YW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmluZGluZy5nZXRTdHJpZGUoKSwgZWxl
bWVudENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRlc3RPZmZzZXQpOworKworKyAgICAg
ICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRl
cnNbYXR0cmliSW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpOworKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2F0dHJpYkluZGV4XSAgICA9IGJ5
dGVzVG9BbGxvY2F0ZTsKKysgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNl
dHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBl
bHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBTdHJlYW0gdGhlIGNsaWVu
dCBkYXRhIHRvIGEgR1BVIGJ1ZmZlci4gU3luY2hyb25pemF0aW9uIG1pZ2h0IGhhcHBlbiBpZiBi
dWZmZXIgaXMKKysgICAgICAgICAgICAgICAgLy8gaW4gdXNlLgorKyAgICAgICAgICAgICAgICBt
RHluYW1pY1ZlcnRleERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LmFj
dHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcyk7CisrICAgICAgICAgICAgICAgIEFOR0xFX1RS
WShTdHJlYW1WZXJ0ZXhEYXRhKGNvbnRleHRNdGwsICZtRHluYW1pY1ZlcnRleERhdGEsIHNyYywg
Ynl0ZXNUb0FsbG9jYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsIGJpbmRpbmcuZ2V0U3RyaWRlKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0
ZXhMb2FkRnVuY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdXJyZW50QXJyYXlCdWZmZXJP
ZmZzZXRzW2F0dHJpYkluZGV4XSkpOworIAorICAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5
QnVmZmVyc1thdHRyaWJJbmRleF0gPSAmbUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRy
aWJJbmRleF07CistICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRl
eF0gPSAmdmVydGV4Rm9ybWF0OworLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNb
YXR0cmliSW5kZXhdID0gc3RyaWRlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gIC8vIGlm
IChuZWVkU3RyZWFtaW5nKQorICAgICB9CisgCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1
ZTsKK0BAIC01MjYsNyArNjYxLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZl
ckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgICAg
ICBib29sIG5lZWRDb252ZXJzaW9uID0KKyAgICAgICAgICAgICAgICAgZm9ybWF0LmFjdHVhbEZv
cm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8CisgICAgICAgICAgICAgICAgIChi
aW5kaW5nLmdldE9mZnNldCgpICUgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRl
cykgIT0gMCB8fAorLSAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIG10bDo6
a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8fAorKyAgICAgICAgICAg
ICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAg
KGJpbmRpbmcuZ2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5waXhlbEJ5
dGVzKSB8fAorICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSAlIG10bDo6a1Zl
cnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMDsKKyAKK0BAIC01NjMsMTkgKzY5
OCwyMSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVy
dGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorIAorIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNU
eXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aWR4QnVmZmVyT2Zmc2V0T3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
KmluZGV4VHlwZU91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBjb25zdCBnbDo6QnVm
ZmVyICpnbEVsZW1lbnRBcnJheUJ1ZmZlciA9IGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7CisgCisgICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgPSByZWludGVycHJldF9jYXN0
PHNpemVfdD4oaW5kaWNlcyk7CisgICAgIGlmICghZ2xFbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
IHsKKy0gICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29udGV4
dCwgdHlwZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAg
ICAgICBBTkdMRV9UUlkoc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUs
IG1vZGUsIGNvdW50LCBpbmRpY2VzLCBpZHhCdWZmZXJPdXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZm
ZXJDb3VudE91dCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTU4Myw4ICs3MjAs
OCBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4
QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb252ZXJ0ZWRPZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCkgIT0g
MDsKKyAgICAgICAgIGlmIChuZWVkQ29udmVyc2lvbikKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIGNvbnZlcnRlZE9m
ZnNldCwgaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZl
cnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2RlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1
ZmZlck91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1
ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICAgICAgfQorICAgICAg
ICAgZWxzZQorICAgICAgICAgeworQEAgLTU5Miw2ICs3MjksNyBAQCBpbmxpbmUgdm9pZCBTZXRE
ZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5
b3V0KQorICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0gbXRsOjpHZXRJbXBsKGds
RWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAqaWR4QnVmZmVyT3V0ICAgICAgICA9
IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOworICAgICAgICAgICAgICppZHhCdWZmZXJP
ZmZzZXRPdXQgID0gY29udmVydGVkT2Zmc2V0OworKyAgICAgICAgICAgICppbmRleEJ1ZmZlckNv
dW50T3V0ID0gY291bnQ7CisgICAgICAgICB9CisgICAgIH0KKyAKK0BAIC02MDcsOSArNzQ1LDEx
IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhC
dWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10
bDo6Y29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYg
KmlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBzaXplX3Qgb2Zmc2V0TW9kdWxvID0g
b2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQ7CisgICAgIEFTU0VSVChv
ZmZzZXRNb2R1bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVu
c2lnbmVkQnl0ZSk7CitAQCAtNjM4LDE1ICs3NzgsMTUgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgfQorIAorICAgICBzaXplX3QgaW5kZXhDb3VudCA9IEdldEluZGV4Q291bnQoaWR4QnVm
ZmVyLCBvZmZzZXRNb2R1bG8sIGluZGV4VHlwZSk7CistCistICAgIGlmICghY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYm
CistICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKQorKyAgICBp
ZiAoKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQ
YXNzSXNDaGVhcC5lbmFibGVkICYmCisrICAgICAgICAgY29udGV4dE10bC0+Z2V0UmVuZGVyQ29t
bWFuZEVuY29kZXIoKSkpCisgICAgIHsKKyAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB1c2UgR1BV
IHRvIGNvbnZlcnQgd2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KKyAg
ICAgICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJmNvbnZlcnNpb24t
PmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlci0+Z2V0
Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBvZmZzZXRNb2R1bG8sCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgZ2xTdGF0
ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIsICZjb252ZXJzaW9uLT5jb252
ZXJ0ZWRPZmZzZXQpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhU
eXBlLCBpbmRleENvdW50LCBtb2RlLCBnbFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZl
cnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICB9CisgICAg
IGVsc2UKKyAgICAgeworQEAgLTY5NSwxOCArODM1LDIwIEBAIGlubGluZSB2b2lkIFNldERlZmF1
bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQp
CisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4
QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhC
dWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBB
U1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSA9PSBudWxscHRyKTsKKyAg
ICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAKKyAg
ICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihzb3VyY2VQb2lu
dGVyKTsKKy0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFt
aWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwKKysgICAgQU5HTEVf
VFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0Rh
dGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQoKSwg
aWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9m
ZnNldE91dCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNl
dE91dCwgaWR4QnVmZmVyQ291bnRPdXQpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworIH0KK0BAIC03NDQsNyArODg2LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgLy8gSGFzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2Ug
bGFzdCBjb252ZXJzaW9uPworICAgICBpZiAoIWNvbnZlcnNpb24tPmRpcnR5KQorICAgICB7Cist
ICAgICAgICAvLyBCdWZmZXIncyBkYXRhIGhhc24ndCBiZWVuIGNoYW5nZWQuIFJlLXVzZSBsYXN0
IGNvbnZlcnRlZCByZXN1bHRzCisgICAgICAgICBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJz
W2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyKTsKKyAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSA9IGNvbnZlcnNpb24tPmNv
bnZlcnRlZE9mZnNldDsKKyAKK0BAIC03NjEsNyArOTAyLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVm
YXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91
dCkKKyAgICAgYm9vbCBjYW5FeHBhbmRDb21wb25lbnRzT25HUFUgPSBjb252ZXJ0ZWRGb3JtYXQu
YWN0dWFsU2FtZUdMVHlwZTsKKyAKKyAgICAgaWYgKGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1h
bmRFbmNvZGVyKCkgJiYKKy0gICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYKKysgICAgICAgICFjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5l
bmFibGVkICYmCisgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJl
cygpLmhhc0V4cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQorICAgICB7CisgICAgICAgICAvLyBD
YW5ub3QgdXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgcmVu
ZGVyIHBhc3MuCitAQCAtNzkyLDYgKzkzMyw5IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0
ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgICAg
IGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRl
cnNbYXR0cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsKKyAgICAgY29udmVyc2lvbi0+Y29u
dmVydGVkT2Zmc2V0ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdOwor
IAorKyAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworKyAgICBjb252ZXJzaW9uLT5kaXJ0
eSA9IGZhbHNlOworKworICNpZm5kZWYgTkRFQlVHCisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
CisgICAgIHsKK0BAIC04MDEsOSArOTQ1LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAg
fQorICNlbmRpZgorIAorLSAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworLSAgICBjb252
ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAoraW5kZXggZmEwNzNhZS4uMTNhZmRjMyAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5j
ZS5tZAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rp
c3RhbmNlLm1kCitAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNpZGUuIFdyaXRpbmcgdG8gYGdsX0Ns
aXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdub3JlZCBpZiBpdCBpcyBkCisgZG9l
c24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0byBkaXNhYmxlL2VuYWJsZSB0aGUgd3JpdGlu
ZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9kaXN0YW5jZWAKKyB2YXJpYWJsZSBhdXRvbWF0
aWNhbGx5IGVuYWJsZXMgaXQuCisgCistVG8gZW11bGF0ZSB0aGlzIGVuYWJsaW5nL2Rpc2FibGlu
ZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEgc2ltaWxhciBpbXBsZW1lbnRhdGlvbiBh
cyB3aGF0CistW1Z1bGthbiBiYWNrLWVuZCBkb2VzXSguLi8uLi92dWxrYW4vZG9jL0FQUExFX2Ns
aXBfZGlzdGFuY2UubWQpLiBQbGVhc2UgcmVmZXIgdG8gdGhhdCBkb2N1bWVudCBmb3IKKy1tb3Jl
IGRldGFpbHMuCisrVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxpbmcvZGlzYWJsaW5nIEFQSSBpbiBN
ZXRhbCBiYWNrLWVuZDoKKysKKystIFRoZSBzaGFkZXIgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUg
ZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50IHRvIGFuIGFzc2lnbm1lbnQgdG8K
KysgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUuCisrLSBBIHNwZWNpYWwgZHJpdmVy
IHVuaWZvcm0gdmFyaWFibGUgYGNsaXBEaXN0YW5jZXNFbmFibGVkYCB3aWxsIGNvbnRhaW4gb25l
IGJpdCBmbGFnIGZvciBlYWNoCisrICBlbmFibGVkIGBnbF9DbGlwRGlzdGFuY2VbaV1gLiBUaGlz
IHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlwRGlzdGFuY2VgIGluZGljZXMuCisr
LSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBlbmFibGVkIGBnbF9DbGlwRGlzdGFu
Y2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3RpdmUKKysgIHZhbHVlIGZyb20gYEFO
R0xFQ2xpcERpc3RhbmNlW2ldYC4gT24gdGhlIG90aGVyIGhhbmQsIHRob3NlIGRpc2FibGVkIGVs
ZW1lbnRzIHdpbGwgYmUgYXNzaWduZWQKKysgIHplcm8gdmFsdWUuIFRoaXMgc3RlcCBpcyBkZXNj
cmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorKyAgICBgYGAKKysgICAgZm9yIChpbnQgaW5k
ZXggOiBhcnJheWxlbmd0aChnbF9DbGlwRGlzdGFuY2UpKQorKyAgICB7CisrICAgICAgICBpZiAo
QU5HTEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAmICgweDEgPDwgaW5kZXgpKQorKyAg
ICAgICAgICAgIGdsX0NsaXBEaXN0YW5jZVtpbmRleF0gPSBBTkdMRUNsaXBEaXN0YW5jZVtpbmRl
eF07CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9
IDA7CisrICAgIH0KKysgICAgYGBgCisrLSBTb21lIG1pbm9yIG9wdGltaXphdGlvbnM6CisrICAg
IC0gT25seSB0aG9zZSBpbmRpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgaW4gdGhlIG9yaWdpbmFs
IGNvZGUgd2lsbCBiZSB1c2VkIGluIGlmIGVsc2UgYmxvY2sKKysgICAgICBhYm92ZS4KKysgICAg
LSBUaG9zZSBlbGVtZW50cyB3aG9zZSBpbmRleCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2lu
YWwgY29kZSB3aWxsIGJlIHplcm9pc2VkIGluc3RlYWQuCisrICAgIC0gSWYgdGhlIG9yaWdpbmFs
IGNvZGUgb25seSB1c2VzIHVwIHRvIGFuIGluZGV4IDwgYGdsX01heENsaXBEaXN0YW5jZXNgLCB0
aGVuCisrICAgICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1vc3QgYGluZGV4KzFgIGl0ZXJhdGlv
bnMuIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBub3QgYmVpbmcKKysgICAgICBpbnRl
Z3JhbCBjb25zdGFudCB2YWx1ZSBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlbiBkZWNsYXJlZCBz
aXplIG9mIGBnbF9DbGlwRGlzdGFuY2VgCisrICAgICAgd2lsbCBiZSB0aGUgbG9vcCBzaXplLgor
KyAgICAtIEZpbmFsbHksIGlmIHRoZSBvcmlnaW5hbCBjb2RlIGRvZXNuJ3QgdXNlIGBnbF9DbGlw
RGlzdGFuY2VgLCB0aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUgd2lsbCBiZQorKyAgICAgIG9taXR0
ZWQuCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKK2luZGV4IDNjZTE0MmUuLjZl
YWI0MDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9m
b3JtYXRfdGFibGUucHkKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRs
X2Zvcm1hdF90YWJsZS5weQorQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNlIG10bAorIHZvaWQg
Rm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBp
bnRlbmRlZEZvcm1hdElkXykKKyB7eworICAgICB0aGlzLT5pbnRlbmRlZEZvcm1hdElkID0gaW50
ZW5kZWRGb3JtYXRJZF87CistCisgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNw
bGF5LT5nZXRNZXRhbERldmljZSgpOworIAorICAgICAvLyBBY3R1YWwgY29udmVyc2lvbgorQEAg
LTEwOSw2ICsxMDgsMjMgQEAgaW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTIgPSAiIiIKKyAg
ICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFsbGJh
Y2t9OworICAgICAgICAgICAgIH19CisgIiIiCisrI0QxNiBpcyBmdWxseSBzdXBwb3J0ZWQgb24g
IEFwcGxlMysuIEhvd2V2ZXIsIG9uCisrI3ByZXZpb3VzICB2ZXJzaW9ucyBvZiBBcHBsZSBoYXJk
d2FyZSwgc29tZSBvcGVyYXRpb25zIGNhbiBjYXVzZQorKyN1bmRlZmluZWQgYmVoYXZpb3IuCisr
aW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTMgPSAiIiIKKysgICAgICAgICAgICBpZiAoW21l
dGFsRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlM10pCisrICAgICAgICAg
ICAge3sKKysgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgPSB7bXRsX2Zvcm1hdH07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElE
Ojp7YWN0dWFsX2FuZ2xlX2Zvcm1hdH07CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5j
dGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKysgICAgICAgICAgICB9fQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7eworKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9
IHttdGxfZm9ybWF0X2ZhbGxiYWNrfTsKKysgICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OnthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrfTsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFs
bGJhY2t9OworKyAgICAgICAgICAgIH19CisrIiIiCisgCisgY2FzZV9pbWFnZV9mb3JtYXRfdGVt
cGxhdGUxID0gIiIiICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6e2FuZ2xlX2Zvcm1hdH06
CisgICAgICAgICAgICAge2ltYWdlX2Zvcm1hdF9hc3NpZ259CitAQCAtMjEzLDYgKzIyOSw4IEBA
IGRlZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1h
dCwgZHN0X2Zvcm1hdCk6CisgCisgCisgIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0
Y2ggY2FzZSAoZ2VuZXJpYyBjYXNlKQorKworKworIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9j
YXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxf
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbl9nZW5fZnVuYyk6Cisg
ICAgIGlmIGlzaW5zdGFuY2UoYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBkaWN0KToKK0BAIC0y
NTUsNiArMjczLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0
LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KKyAKKyAKKyAjIEdlbmVyYXRl
IGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKysKKysKKyBkZWYg
Z2VuX2ltYWdlX21hcF9zd2l0Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZV90b19tdGxfbWFwKToKKyAKK0BAIC0yNzAsNiArMjkwLDggQEAgZGVm
IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2Fu
Z2xlX2Zvcm1hdF9pbmZvLCBhbmcKKyAKKyAKKyAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9u
IHN3aXRjaCBjYXNlIChNYWMgY2FzZSkKKysKKysKKyBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
bWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19tdGxfbWFw
LCBtYWNfZmFsbGJhY2tzKToKKyAgICAgZ2xfZm9ybWF0ID0gYW5nbGVfdG9fZ2xbYW5nbGVfZm9y
bWF0XQorQEAgLTMwMSwxMSArMzIzLDQzIEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNf
Y2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9mb3JtYXRfYXNzaWduX2NvZGUp
CisgCisgCisrZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFuZ2xlX2Zvcm1hdCwg
YWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fbXRsX21hcCwgaW9zX2ZhbGxiYWNrcyk6CisrICAg
IGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KKysKKysgICAgZGVmIGdlbl9m
b3JtYXRfYXNzaWduX2NvZGUoYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fbXRsX21hcCk6
CisrICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlvc19mYWxsYmFja3M6CisrICAg
ICAgICAgICAgIyBUaGlzIGZvcm1hdCAoRGVwdGgxNlVuaWZvcm0pIHJlcXVpcmVzIGZhbGxiYWNr
IHdoZW4gaU9TIGhhcmR3YXJlIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgZGVwdGgxNi4KKysgICAg
ICAgICAgICAjIEZhbGxiYWNrIGZvcm1hdDoKKysgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9y
bWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVfZm9ybWF0XQorKyAgICAg
ICAgICAgICMgcmV0dXJuIGlmIGVsc2UgYmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuIGltYWdl
X2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUzLmZvcm1hdCgKKysgICAgICAgICAgICAgICAgYWN0dWFs
X2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorKyAgICAgICAgICAgICAgICBtdGxf
Zm9ybWF0PWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0sCisrICAgICAgICAg
ICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdldF9pbnRlcm5hbF9mb3Jt
YXRfaW5pdGlhbGl6ZXIoCisrICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQpLAorKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrPWFjdHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2ssCisrICAgICAgICAgICAgICAgIG10bF9m
b3JtYXRfZmFsbGJhY2s9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrXSwKKysgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmdsZV9mb3Jt
YXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKysgICAgICAgICAgICAg
ICAgICAgIGdsX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaykpCisrICAgICAg
ICBlbHNlOgorKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMS5mb3JtYXQoCisrICAgICAg
ICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3JtYXQ9YWN0dWFsX2FuZ2xlX2Zvcm1hdCwKKysgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorKyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5n
ZXRfaW50ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorKyAgICAgICAgICAgICAgICAgICAgZ2xf
Zm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KSkKKysKKysgICAgcmV0dXJuIGdlbl9pbWFnZV9t
YXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX210bF9tYXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bl9mb3JtYXRfYXNzaWduX2NvZGUpCisrCisrCisgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX3N0
cmluZyhpbWFnZV90YWJsZSwgYW5nbGVfdG9fZ2wpOgorICAgICBhbmdsZV9vdmVycmlkZSA9IGlt
YWdlX3RhYmxlWyJvdmVycmlkZSJdCisgICAgIG1hY19vdmVycmlkZSA9IGltYWdlX3RhYmxlWyJv
dmVycmlkZV9tYWMiXQorICAgICBpb3Nfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGVf
aW9zIl0KKy0gICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3Nf
bWFjIl0KKysgICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfbWFjIl0K
KysgICAgaW9zX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfaW9zIl0KKyAgICAg
YW5nbGVfdG9fbXRsID0gaW1hZ2VfdGFibGVbIm1hcCJdCisgICAgIG1hY19zcGVjaWZpY19tYXAg
PSBpbWFnZV90YWJsZVsibWFwX21hYyJdCisgICAgIGlvc19zcGVjaWZpY19tYXAgPSBpbWFnZV90
YWJsZVsibWFwX2lvcyJdCitAQCAtMzIyLDggKzM3Niw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zdHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKKyAgICAgZGVmIGdlbl9pbWFn
ZV9tYXBfc3dpdGNoX2NvbW1vbl9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1h
dCk6CisgICAgICAgICBtYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX21hY19jYXNlKGFu
Z2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fZ2wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGws
IG1hY19mYWxsYmFja3MpCistICAgICAgICBub25fbWFjX2Nhc2UgPSBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zaW1wbGVfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZV90b19nbCwgYW5nbGVfdG9fbXRsKQorKyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdl
X21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5n
bGVfdG9fZ2wsIGFuZ2xlX3RvX210bCwgaW9zX2ZhbGxiYWNrcykKKyAgICAgICAgIGlmIG1hY19j
YXNlID09IG5vbl9tYWNfY2FzZToKKyAgICAgICAgICAgICByZXR1cm4gbWFjX2Nhc2UKKyAKK2Rp
ZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKK2luZGV4IDIw
NzlmZDcuLjIwNGViYjkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2J1ZmZlcl9wb29sLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
YnVmZmVyX3Bvb2wuaAorQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0J1ZmZlckFsbG9jYXRlZE91dCA9IG51bGxw
dHIpOworIAorICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0ZXMsIGNhbGwgY29t
bWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZpY2UuCistICAgIGFu
Z2xlOjpSZXN1bHQgY29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICBhbmdsZTo6
UmVzdWx0IGNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBib29sIGZsdXNoRW50aXJlQnVm
ZmVyID0gZmFsc2UpOworIAorICAgICAvLyBUaGlzIHJlbGVhc2VzIGFsbCB0aGUgYnVmZmVycyB0
aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgc2luY2UgdGhpcyB3YXMgbGFzdCBjYWxsZWQuCisgICAg
IHZvaWQgcmVsZWFzZUluRmxpZ2h0QnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKK0BA
IC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICBhbmdsZTo6UmVzdWx0IGFs
bG9jYXRlTmV3QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgICB2b2lkIGRlc3Ry
b3lCdWZmZXJMaXN0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIHN0ZDo6ZGVxdWU8QnVmZmVyUmVm
PiAqYnVmZmVycyk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVyKENv
bnRleHRNdGwgKmNvbnRleHRNdGwpOworLQorICAgICBzaXplX3QgbUluaXRpYWxTaXplOworICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKKyAgICAgdWludDMyX3QgbU5leHRBbGxvY2F0aW9uT2Zmc2V0
OworQEAgLTEyNyw3ICsxMjYsNyBAQCBjbGFzcyBCdWZmZXJQb29sCisgCisgICAgIHNpemVfdCBt
QnVmZmVyc0FsbG9jYXRlZDsKKyAgICAgc2l6ZV90IG1NYXhCdWZmZXJzOworLSAgICBCdWZmZXJQ
b29sTWVtUG9saWN5IG1NZW1Qb2xpY3k7CisrICAgIEJ1ZmZlclBvb2xNZW1Qb2xpY3kgbU1lbVBv
bGljeSA9IEJ1ZmZlclBvb2xNZW1Qb2xpY3k6OkF1dG87CisgICAgIGJvb2wgbUFsd2F5c0FsbG9j
YXRlTmV3QnVmZmVyOworIH07CisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9idWZmZXJfcG9vbC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfYnVmZmVyX3Bvb2wubW0KK2luZGV4IDA0MjM4ZWYuLmE1OGI1YTUgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCitAQCAtMjUwLDExICsy
NTAsMTggQEAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1h
bmdsZTo6UmVzdWx0IEJ1ZmZlclBvb2w6OmNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsKQor
K2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGws
IGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCisgeworICAgICBpZiAobUJ1ZmZlciAmJiBtTmV4dEFs
bG9jYXRpb25PZmZzZXQgPiBtTGFzdEZsdXNoT2Zmc2V0KQorKyAgICB7CisrICAgICAgICBpZiAo
Zmx1c2hFbnRpcmVCdWZmZXIpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1
c2goY29udGV4dE10bCwgMCwgbUxhc3RGbHVzaE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4dE10
bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVzaE9m
ZnNldCk7CisrICAgICAgICB9CisgICAgICAgICBtTGFzdEZsdXNoT2Zmc2V0ID0gbU5leHRBbGxv
Y2F0aW9uT2Zmc2V0OworICAgICB9CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
LmgKK2luZGV4IDU1ZmY2NDkuLjNhYTgyNmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFz
cyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFu
ZEJ1ZmZlcj4+LCBhbmdsZTo6TgorIAorICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb21tYW5kIGJ1
ZmZlciBjYW4gYmUgZW5jb2RlZCBpbnRvLiBSZXR1cm4gZmFsc2UgaWYgaXQgaGFzIGJlZW4gY29t
bWl0dGVkCisgICAgIC8vIGFuZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCistICAgIGJvb2wgcmVh
ZHkoKSBjb25zdDsKKysgICAgYm9vbCB2YWxpZCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdCgp
OworICAgICAvLyB3YWl0IGZvciBjb21taXR0ZWQgY29tbWFuZCBidWZmZXIgdG8gZmluaXNoLgor
ICAgICB2b2lkIGZpbmlzaCgpOworQEAgLTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVm
ZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBh
bmdsZTo6TgorIAorICAgICB2b2lkIHF1ZXVlRXZlbnRTaWduYWwoY29uc3QgbXRsOjpTaGFyZWRF
dmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKyAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZl
bnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKysK
KysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7Cisg
ICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7CisgICAg
IHZvaWQgcG9wRGVidWdHcm91cCgpOworIAorQEAgLTEyOCw3ICsxMzAsNyBAQCBjbGFzcyBDb21t
YW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZl
cj4+LCBhbmdsZTo6TgorICAgICB2b2lkIHNldChpZDxNVExDb21tYW5kQnVmZmVyPiBtZXRhbEJ1
ZmZlcik7CisgICAgIHZvaWQgY2xlYW51cCgpOworIAorLSAgICBib29sIHJlYWR5SW1wbCgpIGNv
bnN0OworKyAgICBib29sIHZhbGlkSW1wbCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdEltcGwo
KTsKKyAgICAgdm9pZCBmb3JjZUVuZGluZ0N1cnJlbnRFbmNvZGVyKCk7CisgCitAQCAtMTQ5LDYg
KzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJsaWMgV3JhcHBlZE9iamVj
dDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCisgCisgICAgIG11dGFibGUgc3RkOjpt
dXRleCBtTG9jazsKKyAKKysgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1QZW5kaW5nRGVi
dWdTaWduczsKKyAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPG10bDo6U2hhcmVkRXZlbnRSZWYs
IHVpbnQ2NF90Pj4gbVBlbmRpbmdTaWduYWxFdmVudHM7CisgCisgICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBtRGVidWdHcm91cHM7CitAQCAtMTc2LDYgKzE3OSw4IEBAIGNsYXNzIENvbW1h
bmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+Piwg
YW5nbGU6Ok5vbkNvCisgICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWluZ1dyaXR0
ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgIENvbW1hbmRFbmNvZGVyICZt
YXJrUmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsK
KyAKKysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKysKKyAgICAg
dmlydHVhbCB2b2lkIHB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCk7CisgICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CisgCitAQCAtMTg5LDYgKzE5NCw4IEBAIGNsYXNzIENv
bW1hbmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+
PiwgYW5nbGU6Ok5vbkNvCisgCisgICAgIHZvaWQgc2V0KGlkPE1UTENvbW1hbmRFbmNvZGVyPiBt
ZXRhbENtZEVuY29kZXIpOworIAorKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1w
bChOU1N0cmluZyAqbWFya2VyKTsKKysKKyAgIHByaXZhdGU6CisgICAgIGNvbnN0IFR5cGUgbVR5
cGU7CisgICAgIENvbW1hbmRCdWZmZXIgJm1DbWRCdWZmZXI7CitAQCAtMjAxLDcgKzIwOCw3IEBA
IGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgIGlubGluZSBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICZwdXNoKGNvbnN0IFQg
JnZhbCkKKyAgICAgeworLSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90ICo+KCZ2YWwpOworKyAgICAgICAgYXV0byBwdHIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oJnZhbCk7CisgICAgICAgICBtQnVmZmVyLmluc2Vy
dChtQnVmZmVyLmVuZCgpLCBwdHIsIHB0ciArIHNpemVvZihUKSk7CisgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgIH0KK0BAIC0yMTcsNyArMjI0LDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbQorICAgICB7CisgICAgICAgICBBU1NFUlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5z
aXplKCkgLSBzaXplb2YoVCkpOworICAgICAgICAgVCByZTsKKy0gICAgICAgIHVpbnQ4X3QgKnB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmcmUpOworKyAgICAgICAgYXV0byBwdHIg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnJlKTsKKyAgICAgICAgIHN0ZDo6Y29weSht
QnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyLCBtQnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyICsgc2l6
ZW9mKFQpLCBwdHIpOworICAgICAgICAgcmV0dXJuIHJlOworICAgICB9CitAQCAtMjI1LDcgKzIz
Miw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgIGlubGluZSBUIGZldGNoKCkKKyAgICAgeworLSAgICAgICAgVCByZSA9
IHBlZWs8VD4oKTsKKysgICAgICAgIGF1dG8gcmUgPSBwZWVrPFQ+KCk7CisgICAgICAgICBtUmVh
ZFB0ciArPSBzaXplb2YoVCk7CisgICAgICAgICByZXR1cm4gcmU7CisgICAgIH0KK0BAIC0yMzMs
NyArMjQwLDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbQorICAgICBpbmxpbmUg
Y29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQorICAgICB7CisgICAgICAgICBBU1NF
UlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5zaXplKCkgLSBieXRlcyk7CistICAgICAgICBzaXplX3Qg
Y3VyID0gbVJlYWRQdHI7CisrICAgICAgICBhdXRvIGN1ciA9IG1SZWFkUHRyOworICAgICAgICAg
bVJlYWRQdHIgKz0gYnl0ZXM7CisgICAgICAgICByZXR1cm4gbUJ1ZmZlci5kYXRhKCkgKyBjdXI7
CisgICAgIH0KK0BAIC00NzksMTIgKzQ4NiwxNiBAQCBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2Rl
ciBmaW5hbCA6IHB1YmxpYyBDb21tYW5kRW5jb2RlcgorICAgICB7CisgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+PihDb21tYW5kRW5jb2Rlcjo6
Z2V0KCkpOworICAgICB9CisrICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0cmluZyAq
bGFiZWwpIG92ZXJyaWRlOworIAorICAgICB2b2lkIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2ht
ZW50KTsKKysgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOworIAorICAgICB2b2lkIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKE1UTFJlbmRlclBh
c3NBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50KTsKKyAKKyAg
ICAgdm9pZCBlbmNvZGVNZXRhbEVuY29kZXIoKTsKKysgICAgdm9pZCBzaW11bGF0ZURpc2NhcmRG
cmFtZWJ1ZmZlcigpOworKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlz
Y2FyZFNpbXVsYXRpb24pOworIAorICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAmY29tbW9uU2V0
QnVmZmVyKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCitAQCAtNTYwLDEx
ICs1NzEsMjAgQEAgY2xhc3MgQmxpdENvbW1hbmRFbmNvZGVyIGZpbmFsIDogcHVibGljIENvbW1h
bmRFbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2xpY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBsZXZlbENvdW50KTsKKyAKKysgICAgQmxpdENvbW1hbmRFbmNvZGVyICZjb3B5VGV4dHVyZShj
b25zdCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjU2xpY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjTGV2ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGV4dHVyZVJlZiAmZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdFNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdExldmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNsaWNlQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CisrCisgICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmZmlsbEJ1ZmZlcihjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlciwgTlNSYW5nZSByYW5nZSwgdWlu
dDhfdCB2YWx1ZSk7CisgCisgICAgIEJsaXRDb21tYW5kRW5jb2RlciAmZ2VuZXJhdGVNaXBtYXBz
Rm9yVGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKKy0gICAgQmxpdENvbW1hbmRF
bmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVmZmVyUHRyKTsKKy0gICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIp
OworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVzb3VyY2UoY29uc3QgQnVm
ZmVyUmVmICZidWZmZXIpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVz
b3VyY2UoY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSk7CisgCisgICBwcml2YXRlOgorICAgICBp
ZDxNVExCbGl0Q29tbWFuZEVuY29kZXI+IGdldCgpCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KK2luZGV4IDQ0MzNiMDIuLmI0YTMzNDcg
MTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCitAQCAtMTEsNiArMTEsOSBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKKyAKKyAjaW5jbHVkZSA8Y2Fzc2VydD4KKysjaWYg
QU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKysjICAgIGluY2x1ZGUgPHJh
bmRvbT4KKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIgorQEAg
LTY1LDYgKzY4LDcgQEAKKyAgICAgUFJPQyhTZXRWaXNpYmlsaXR5UmVzdWx0TW9kZSkgICAgICAg
IFwKKyAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgUFJP
QyhNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlKSAgICAgIFwKKysgICAgUFJPQyhJbnNlcnREZWJ1
Z3NpZ24pICAgICAgICAgICAgICAgIFwKKyAgICAgUFJPQyhQdXNoRGVidWdHcm91cCkgICAgICAg
ICAgICAgICAgIFwKKyAgICAgUFJPQyhQb3BEZWJ1Z0dyb3VwKQorIAorQEAgLTg1LDQyICs4OSw0
MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIs
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgorIHZvaWQgU2V0UmVuZGVyUGlwZWxpbmVTdGF0
ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgaWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PigpOworKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4oKTsKKyAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CisgICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07
CisgfQorIAorIHZvaWQgU2V0VHJpYW5nbGVGaWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgTVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmds
ZUZpbGxNb2RlPigpOworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTFRyaWFuZ2xl
RmlsbE1vZGU+KCk7CisgICAgIFtlbmNvZGVyIHNldFRyaWFuZ2xlRmlsbE1vZGU6bW9kZV07Cisg
fQorIAorIHZvaWQgU2V0RnJvbnRGYWNpbmdXaW5kaW5nQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFdpbmRpbmcgd2luZGluZyA9
IHN0cmVhbS0+ZmV0Y2g8TVRMV2luZGluZz4oKTsKKysgICAgYXV0byB3aW5kaW5nID0gc3RyZWFt
LT5mZXRjaDxNVExXaW5kaW5nPigpOworICAgICBbZW5jb2RlciBzZXRGcm9udEZhY2luZ1dpbmRp
bmc6d2luZGluZ107CisgfQorIAorIHZvaWQgU2V0Q3VsbE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIE1UTEN1bGxNb2RlIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigp
OworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgICBb
ZW5jb2RlciBzZXRDdWxsTW9kZTptb2RlXTsKKyB9CisgCisgdm9pZCBTZXREZXB0aFN0ZW5jaWxT
dGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+
IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CisrICAg
IGF1dG8gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPj4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2lsU3RhdGU6c3RhdGVdOworICAgICBbc3RhdGUg
QU5HTEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyB2b2lkIFNldERlcHRoQmlhc0NtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgZmxvYXQgZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+
KCk7CistICAgIGZsb2F0IHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworLSAg
ICBmbG9hdCBjbGFtcCAgICAgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBk
ZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBzbG9wZVNjYWxl
ID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBjbGFtcCAgICAgID0gc3RyZWFt
LT5mZXRjaDxmbG9hdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RGVwdGhCaWFzOmRlcHRoQmlhcyBz
bG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOworIH0KKyAKK0BAIC0xMzQsMTMgKzEz
OCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQorIAorIHZvaWQgU2V0Vmlld3BvcnRDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFZpZXdwb3J0IHZpZXdwb3J0ID0gc3RyZWFtLT5m
ZXRjaDxNVExWaWV3cG9ydD4oKTsKKysgICAgYXV0byB2aWV3cG9ydCA9IHN0cmVhbS0+ZmV0Y2g8
TVRMVmlld3BvcnQ+KCk7CisgICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0XTsKKyB9
CisgCisgdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRM
U2Npc3NvclJlY3QgcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisrICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFNjaXNzb3JSZWN0OnJlY3RdOworIH0KKyAKK0BAIC0xNTUsOSArMTU5LDkgQEAgdm9p
ZCBTZXRCbGVuZENvbG9yQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTEJ1ZmZlcj4+KCk7CistICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
KyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFZlcnRleEJ1ZmZlcjpidWZmZXIgb2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
KyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorQEAgLTE2NSwyNiArMTY5LDI2
IEBAIHZvaWQgU2V0VmVydGV4QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kCisgdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgdWlu
dDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBvZmZz
ZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIGluZGV4ICA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIHNldFZlcnRleEJ1ZmZlck9mZnNl
dDpvZmZzZXQgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4Qnl0ZXNDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHNpemVfdCBzaXplICAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxzaXplX3Q+KCk7CistICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzID0gc3RyZWFtLT5mZXRj
aChzaXplKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQz
Ml90PigpOworKyAgICBhdXRvIHNpemUgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAg
IGF1dG8gYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0
ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVh
bSkKKyB7CistICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisrICAgIGF1dG8gc3RhdGUgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOworICAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgIGZsb2F0IGxvZE1heENsYW1wID0gc3RyZWFtLT5m
ZXRjaDxmbG9hdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0YXRlOnN0YXRl
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKK0BAIC0xOTUsMTcgKzE5
OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKKyAKKyB2b2lkIFNldFZlcnRleFRleHR1cmVDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKKyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFRleHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5k
ZXhdOworICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorIAorIHZvaWQgU2V0
RnJhZ21lbnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1UTEJ1ZmZlcj4g
YnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworLSAgICB1aW50MzJfdCBv
ZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGlu
ZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBidWZmZXIg
PSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlcjpidWZmZXIgb2Zm
c2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKKyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFT
RV07CisgfQorQEAgLTIxMywyNiArMjE3LDI2IEBAIHZvaWQgU2V0RnJhZ21lbnRCdWZmZXJDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hCisg
dm9pZCBTZXRGcmFnbWVudEJ1ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0
ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGluZGV4ICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAg
ICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlck9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07
CisgfQorIAorIHZvaWQgU2V0RnJhZ21lbnRCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKy0gICAg
Y29uc3QgdWludDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworLSAgICB1aW50MzJf
dCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gc2l6
ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7CisrICAgIGF1dG8gaW5kZXggPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90Pigp
OworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5k
ZXg6aW5kZXhdOworIH0KKyAKKyB2b2lkIFNldEZyYWdtZW50U2FtcGxlclN0YXRlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8
TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRl
Pj4oKTsKKysgICAgYXV0byBzdGF0ZSAgICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBs
ZXJTdGF0ZT4+KCk7CisgICAgIGZsb2F0IGxvZE1pbkNsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9h
dD4oKTsKKyAgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOwor
LSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4o
KTsKKysgICAgYXV0byBpbmRleCAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2RNYXhDbGFtcDpsb2RNYXhDbGFtcAorQEAgLTI0MiwyNiArMjQ2LDI2IEBAIHZv
aWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsCisgCisgdm9pZCBTZXRGcmFnbWVudFRleHR1cmVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFRl
eHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDppbmRleF07
CisgICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKKyB9CisgCisgdm9pZCBEcmF3Q21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3RyZWFtICpzdHJlYW0pCisgeworLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUg
PSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CistICAgIHVpbnQzMl90IHZlcnRl
eFN0YXJ0ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQz
Ml90IHZlcnRleENvdW50ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisr
ICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4o
KTsKKysgICAgYXV0byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KysgICAgYXV0byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICAgW2VuY29kZXIgZHJhd1ByaW1pdGl2ZXM6cHJpbWl0aXZlVHlwZSB2ZXJ0ZXhTdGFydDp2ZXJ0
ZXhTdGFydCB2ZXJ0ZXhDb3VudDp2ZXJ0ZXhDb3VudF07CisgfQorIAorIHZvaWQgRHJhd0luc3Rh
bmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworLSAgICB1aW50MzJf
dCB2ZXJ0ZXhTdGFydCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworLSAg
ICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOworLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1U
TFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gdmVydGV4Q291bnQgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKKyAg
ICAgICAgICAgICAgICAgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQKKyAgICAgICAgICAgICAgICAg
dmVydGV4Q291bnQ6dmVydGV4Q291bnQKK0BAIC0yNzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJ
bnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdAorIAorIHZvaWQgRHJhd0luZGV4ZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7
CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRM
UHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZl
cj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0g
ICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0yODUsMTIgKzI4OSwxMiBA
QCB2b2lkIERyYXdJbmRleGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZQorIAorIHZvaWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5k
ZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKysgICAgYXV0byBpbmRleENv
dW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUg
ICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZm
ZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJP
ZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVk
UHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhD
b3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRl
eFR5cGUKK0BAIC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbworIHZv
aWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2
ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsK
Ky0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9m
ZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90
IGluc3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAg
IHVpbnQzMl90IGJhc2VWZXJ0ZXggICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CisrICAgIGF1dG8gYmFzZVZlcnRleCAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisg
ICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lk
IERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwKKyB2b2lkIFNldFZpc2liaWxpdHlSZXN1bHRNb2RlQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMVmlz
aWJpbGl0eVJlc3VsdE1vZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVmlzaWJpbGl0eVJlc3Vs
dE1vZGU+KCk7CistICAgIHNpemVfdCBvZmZzZXQgICAgICAgICAgICAgICAgPSBzdHJlYW0tPmZl
dGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBtb2RlICAgPSBzdHJlYW0tPmZldGNoPE1UTFZpc2li
aWxpdHlSZXN1bHRNb2RlPigpOworKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8c2l6
ZV90PigpOworICAgICBbZW5jb2RlciBzZXRWaXNpYmlsaXR5UmVzdWx0TW9kZTptb2RlIG9mZnNl
dDpvZmZzZXRdOworIH0KKyAKKyB2b2lkIFVzZVJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisg
eworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJl
c291cmNlPj4oKTsKKy0gICAgTVRMUmVzb3VyY2VVc2FnZSB1c2FnZSAgID0gc3RyZWFtLT5mZXRj
aDxNVExSZXNvdXJjZVVzYWdlPigpOworLSAgICBtdGw6OlJlbmRlclN0YWdlcyBzdGFnZXMgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworKyAgICBhdXRvIHJlc291cmNlID0g
c3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CisrICAgIGF1dG8gdXNhZ2UgICAgPSBz
dHJlYW0tPmZldGNoPE1UTFJlc291cmNlVXNhZ2U+KCk7CisrICAgIGF1dG8gc3RhZ2VzICAgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgICBBTkdMRV9VTlVTRURfVkFS
SUFCTEUoc3RhZ2VzKTsKKyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9f
TUFDXzEwXzE1KQorICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMu
MCwgMTMuMCkpCitAQCAtMzUxLDkgKzM1NSw5IEBAIHZvaWQgVXNlUmVzb3VyY2VDbWQoaWQ8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlCisg
dm9pZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1l
ZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVz
b3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKy0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKKy0g
ICAgbXRsOjpSZW5kZXJTdGFnZXMgYmVmb3JlID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byByZXNvdXJjZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVzb3Vy
Y2U+PigpOworKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byBiZWZvcmUgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJT
dGFnZXM+KCk7CisgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShhZnRlcik7CisgICAgIEFOR0xF
X1VOVVNFRF9WQVJJQUJMRShiZWZvcmUpOworICNpZiBkZWZpbmVkKF9fTUFDXzEwXzE0KSAmJiAo
VEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtMzY4LDkgKzM3Miwx
NiBAQCB2b2lkIE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsCisgICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorIAorK3ZvaWQgSW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisreworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBbZW5jb2RlciBp
bnNlcnREZWJ1Z1NpZ25wb3N0OmxhYmVsXTsKKysgICAgW2xhYmVsIEFOR0xFX01UTF9SRUxFQVNF
XTsKKyt9CisrCisgdm9pZCBQdXNoRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgTlNTdHJpbmcgKmxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgICBbZW5jb2RlciBw
dXNoRGVidWdHcm91cDpsYWJlbF07CisgICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorQEAgLTM4OCw3ICszOTksNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIAorIE5TU3Ry
aW5nICpjcHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQorIHsKKy0gICAg
TlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5j
X3N0cigpXTsKKysgICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzptYXJrZXIuY19zdHIoKV07CisgICAgIGlmICghbGFiZWwpCisgICAgIHsKKyAgICAgICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGFzY2lpIHN0cmlu
Zy4KK0BAIC0zOTYsNyArNDA3LDYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgfQor
ICAgICByZXR1cm4gbGFiZWw7CisgfQorLQorIH0KKyAKKyAvLyBDb21tYW5kUXVldWUgaW1wbGVt
ZW50YXRpb24KK0BAIC01NjUsMTEgKzU3NSwxMSBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAor
ICAgICBjbGVhbnVwKCk7CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHkoKSBjb25z
dAorK2Jvb2wgQ29tbWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAorIHsKKyAgICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgcmV0dXJuIHJlYWR5SW1wbCgp
OworKyAgICByZXR1cm4gdmFsaWRJbXBsKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6
Y29tbWl0KCkKK0BAIC01OTgsNyArNjA4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAK
KyAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgaWYg
KCFyZWFkeUltcGwoKSkKKysgICAgaWYgKCF2YWxpZEltcGwoKSkKKyAgICAgeworICAgICAgICAg
cmV0dXJuOworICAgICB9CitAQCAtNjIwLDcgKzYzMCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgCisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CisgCist
ICAgIGlmICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAg
ICAgICAgIHJldHVybjsKKyAgICAgfQorQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgUG9wRGVi
dWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0CisgICAgIEFTU0VSVChtZXRhbENtZEJ1ZmZlcik7CisgfQorIAorLXZvaWQg
Q29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCisrdm9pZCBDb21tYW5kQnVmZmVyOjppbnNlcnREZWJ1
Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CistCistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Cist
CistICAgIGlmIChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVy
LT5nZXRUeXBlKCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKysgICAgbXRsOjpDb21tYW5k
RW5jb2RlciAqY3VycmVudEVuY29kZXIgPSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisrICAgIGlm
IChjdXJyZW50RW5jb2RlcikKKyAgICAgeworLSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVu
dCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSByZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcg
dW50aWwgdGhlCistICAgICAgICAvLyBwYXNzIGVuZC4KKy0gICAgICAgIG1QZW5kaW5nU2lnbmFs
RXZlbnRzLnB1c2hfYmFjayh7ZXZlbnQsIHZhbHVlfSk7CisrICAgICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwgPSBjcHBMYWJlbFRv
T2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGN1cnJlbnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1Np
Z24obGFiZWwpOworKyAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAg
ICAgc2V0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CisrICAgICAgICBtUGVuZGluZ0RlYnVnU2ln
bnMucHVzaF9iYWNrKG1hcmtlcik7CisgICAgIH0KKyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVy
OjpzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2
NF90IHZhbHVlKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
ZyhtTG9jayk7CistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7CistCistICAgIHdhaXRFdmVudElt
cGwoZXZlbnQsIHZhbHVlKTsKKysgICAgLy8gTk9URShocWxlKTogdG8gaW1wbGVtZW50IHRoaXMK
KyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cChjb25zdCBzdGQ6OnN0
cmluZyAmbWFya2VyKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCisgewor
LSAgICBtRGVidWdHcm91cHMucHVzaF9iYWNrKG1hcmtlcik7CisrICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCisrfQorIAorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVu
dFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUp
CisreworICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworIAorLSAg
ICBpZiAocmVhZHlJbXBsKCkpCisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisrCisrICAgIGlm
IChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVyLT5nZXRUeXBl
KCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKyAgICAgeworLSAgICAgICAgcHVzaERlYnVn
R3JvdXBJbXBsKG1hcmtlcik7CisrICAgICAgICAvLyBXZSBjYW5ub3Qgc2V0IGV2ZW50IHdoZW4g
dGhlcmUgaXMgYW4gYWN0aXZlIHJlbmRlciBwYXNzLCBkZWZlciB0aGUgc2V0dGluZyB1bnRpbCB0
aGUKKysgICAgICAgIC8vIHBhc3MgZW5kLgorKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMu
cHVzaF9iYWNrKHtldmVudCwgdmFsdWV9KTsKKyAgICAgfQorLX0KKy0KKy12b2lkIENvbW1hbmRC
dWZmZXI6OnBvcERlYnVnR3JvdXAoKQorLXsKKy0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHko
KSkKKysgICAgZWxzZQorICAgICB7CistICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsK
KysgICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICB9CisrfQorIAorK3Zv
aWQgQ29tbWFuZEJ1ZmZlcjo6c2VydmVyV2FpdEV2ZW50KGNvbnN0IG10bDo6U2hhcmVkRXZlbnRS
ZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKKyt7CisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsZyhtTG9jayk7CisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisgCistICAgIGlm
IChyZWFkeUltcGwoKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuOworLSAgICB9CisrICAgIHdh
aXRFdmVudEltcGwoZXZlbnQsIHZhbHVlKTsKKyB9CisgCisgLyoqIHByaXZhdGUgdXNlIG9ubHkg
Ki8KK0BAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5k
ZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0Cisgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5j
b2RlcikKKyB7CisgICAgIG1BY3RpdmVDb21tYW5kRW5jb2RlciA9IGVuY29kZXI7CisrICAgIGZv
ciAoYXV0byAmbWFya2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorKyAgICB7CisrICAgICAgICBB
TkdMRV9NVExfT0JKQ19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwg
PSBjcHBMYWJlbFRvT2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGVuY29kZXItPmluc2VydERl
YnVnU2lnbihsYWJlbCk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbVBlbmRpbmdEZWJ1Z1Np
Z25zLmNsZWFyKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW52YWxpZGF0ZUFjdGl2
ZUNvbW1hbmRFbmNvZGVyKENvbW1hbmRFbmNvZGVyICplbmNvZGVyKQorQEAgLTcyOSw3ICs3NDgs
NyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICBQYXJlbnRDbGFzczo6c2V0KG5pbCk7
CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKKytib29sIENv
bW1hbmRCdWZmZXI6OnZhbGlkSW1wbCgpIGNvbnN0CisgeworICAgICBpZiAoIVBhcmVudENsYXNz
Ojp2YWxpZCgpKQorICAgICB7CitAQCAtNzQxLDcgKzc2MCw3IEBAIHZvaWQgUG9wRGVidWdHcm91
cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0CisgCisgdm9pZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKKyB7CistICAgIGlm
ICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAgICAgICAg
IHJldHVybjsKKyAgICAgfQorQEAgLTg4OSw2ICs5MDgsMTcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAgICAgW2dldCgpIHBvcERlYnVnR3JvdXBdOworIH0KKyAKKyt2b2lkIENvbW1hbmRF
bmNvZGVyOjppbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgaW5zZXJ0
RGVidWdTaWduSW1wbChsYWJlbCk7CisrfQorKworK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgLy8gRGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbgorKyAgICBbZ2V0KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07CisrfQor
KworIC8vIFJlbmRlckNvbW1hbmRFbmNvZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCisg
UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXM6OlJlbmRlckNvbW1hbmRFbmNvZGVyU2hh
ZGVyU3RhdGVzKCkKKyB7CitAQCAtOTUxLDYgKzk4MSw5IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgICAgIHsKKyAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOworICAgICB9CisrCisr
ICAgIHZpc2liaWxpdHlSZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9k
ZURpc2FibGVkOworKyAgICB2aXNpYmlsaXR5UmVzdWx0QnVmZmVyT2Zmc2V0ID0gMDsKKyB9Cisg
CisgLy8gUmVuZGVyQ29tbWFuZEVuY29kZXIgaW1wbGVtdGF0aW9uCitAQCAtMTAxNCwxMSArMTA0
NywxMiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICB7CisgICAgICAgICBpZiAob2Jq
Q1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uU3RvcmUp
CisgICAgICAgICB7CistICAgICAgICAgICAgLy8gTk9URShocWxlKTogQ3VycmVudGx5IGlmIHRo
ZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0ZXh0dXJlIGlzCistICAgICAgICAgICAg
Ly8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRvIHN0
b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKKy0gICAgICAgICAgICAvLyBtaWdodCBpbnRyb2R1
Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMg
b25seSBzdG9yZSB0aGUKKy0gICAgICAgICAgICAvLyBNUyB0ZXh0dXJlLCBhbmQgcmVzb2x2ZSBv
bmx5IGF0IHRoZSBlbmQgb2YgcmVhbCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSBp
cworLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisrICAgICAgICAgICAgLy8gTk9U
RShocWxlKTogQ3VycmVudGx5IGlmIHRoZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0
ZXh0dXJlIGlzIE1UTFN0b3JlQWN0aW9uLAorKyAgICAgICAgICAgIC8vIGl0IGlzIGF1dG9tYXRp
Y2FsbHkgY29udmVydCB0byBzdG9yZSBhbmQgcmVzb2x2ZSBhY3Rpb24uIEl0IG1pZ2h0IGludHJv
ZHVjZQorKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorKyAgICAgICAgICAg
IC8vIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMgb25seSBzdG9yZSB0aGUgTVMgdGV4
dHVyZSwgYW5kIHJlc29sdmUgb25seSBhdAorKyAgICAgICAgICAgIC8vIHRoZSBlbmQgb2YgcmVh
bCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSB3YXMgaW50ZXJydXB0ZWQgYnkgY29t
cHV0ZSBwYXNzKQorKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBv
cGVyYXRpb24gc3RhcnRzLgorICAgICAgICAgICAgIG9iakNSZW5kZXJQYXNzQXR0YWNobWVudC5z
dG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uU3RvcmVBbmRNdWx0aXNhbXBsZVJlc29sdmU7Cisg
ICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3Rv
cmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKK0BAIC0xMDM2LDYgKzEwNzAsMTEg
QEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyB9CisgCisgdm9pZCBSZW5kZXJDb21tYW5kRW5j
b2Rlcjo6ZW5kRW5jb2RpbmcoKQorK3sKKysgICAgZW5kRW5jb2RpbmdJbXBsKHRydWUpOworK30K
KysKKyt2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZ0ltcGwoYm9vbCBjb25z
aWRlckRpc2NhcmRTaW11bGF0aW9uKQorIHsKKyAgICAgaWYgKCF2YWxpZCgpKQorICAgICAgICAg
cmV0dXJuOworQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5jb2xv
ckF0dGFjaG1lbnRzW2ldKTsKKyAgICAgfQorIAorLSAgICAvLyBVcGRhdGUgZGVwdGggc3RvcmUg
YWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorKyAgICAvLyBV
cGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2Rpbmco
KQorICAgICBvYmpDUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID0g
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxp
emVMb2FkU3RvcmVBY3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudCk7Cisg
CistICAgIC8vIFVwZGF0ZSBzdGVuY2lsIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0
KCkgYW5kIGVuZEVuY29kaW5nKCkKKysgICAgLy8gVXBkYXRlIHN0b3JlIGFjdGlvbiBzZXQgYmV0
d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAgb2JqQ1JlbmRlclBhc3NEZXNj
LnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KKyAgICAgICAgIG1SZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxpemVMb2FkU3RvcmVB
Y3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKK0BAIC0xMDc1LDI2
ICsxMTE0LDc4IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgIENvbW1hbmRFbmNv
ZGVyOjplbmRFbmNvZGluZygpOworIAorKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9G
UkFNRUJVRkZFUgorKyAgICBpZiAoY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKKysgICAgewor
KyAgICAgICAgc2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIoKTsKKysgICAgfQorKyNlbmRpZgor
KworICAgICAvLyByZXNldCBzdGF0ZQorICAgICBtUmVuZGVyUGFzc0Rlc2MgPSBSZW5kZXJQYXNz
RGVzYygpOworICAgICBtU3RhdGVDYWNoZS5yZXNldCgpOworIH0KKyAKKy1pbmxpbmUgdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRTY2lz
c29yUmVjdCgKKy0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2htZW50
KQorK2lubGluZSB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbml0V3JpdGVEZXBlbmRlbmN5
KGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworLSAgICBUZXh0dXJlUmVmIHRleHR1cmUg
PSBhdHRhY2htZW50LnRleHR1cmU7CisgICAgIGlmICh0ZXh0dXJlKQorICAgICB7CisgICAgICAg
ICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisrICAgIH0KKyt9Cisr
Cisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIo
KQorK3sKKysgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJhdGlv
biBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKysjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJ
U0NBUkRfRlJBTUVCVUZGRVIKKysgICAgc3RkOjpyYW5kb21fZGV2aWNlIHJkOyAgIC8vIFdpbGwg
YmUgdXNlZCB0byBvYnRhaW4gYSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBlbmdpbmUKKysg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKysgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0
aW9uPGZsb2F0PiBkaXMoMC4wLCAxLjBmKTsKKysgICAgYm9vbCBoYXNEaXNjYXJkID0gZmFsc2U7
CisrICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JB
dHRhY2htZW50czsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAobVJlbmRlclBhc3NEZXNjLmNv
bG9yQXR0YWNobWVudHNbaV0uc3RvcmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gdHJ1ZTsKKysgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuY29s
b3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlvbkNsZWFyOworKyAgICAg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQor
KyAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yTWFrZShkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pLCBkaXMoZ2VuKSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFj
dGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
IChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3Jl
QWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IHRydWU7CisrICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVw
dGhBdHRhY2htZW50LmxvYWRBY3Rpb24gPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKysg
ICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0
dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICB9CisgCistICAg
ICAgICBjb25zdCBNaXBtYXBOYXRpdmVMZXZlbCAmbWlwTGV2ZWwgPSBhdHRhY2htZW50LmxldmVs
OworKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9u
ID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxvYWRBY3Rpb24gICA9IE1UTExvYWRBY3Rp
b25DbGVhcjsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5jbGVh
clN0ZW5jaWwgPSByYW5kKCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rp
b25Mb2FkOworKyAgICB9CisgCistICAgICAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0Lndp
ZHRoID0KKy0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRlZ2VyPihtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoLCB0ZXh0dXJlLT53aWR0aChtaXBMZXZlbCkpOworLSAgICAgICAgbVJl
bmRlclBhc3NNYXhTY2lzc29yUmVjdC5oZWlnaHQgPQorLSAgICAgICAgICAgIHN0ZDo6bWluPE5T
VUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0dXJlLT5oZWln
aHQobWlwTGV2ZWwpKTsKKysgICAgaWYgKGhhc0Rpc2NhcmQpCisrICAgIHsKKysgICAgICAgIGF1
dG8gdG1wRGVzYyA9IG1SZW5kZXJQYXNzRGVzYzsKKysgICAgICAgIHJlc3RhcnQodG1wRGVzYyk7
CisrICAgICAgICBlbmRFbmNvZGluZ0ltcGwoZmFsc2UpOworICAgICB9CisrI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgorIH0KKyAKKyB2b2lkIFJlbmRl
ckNvbW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQorQEAgLTExMDIsNyArMTE5Myw3
IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisg
ICAgIHsKKyAgICAgICAgIEFOR0xFX01UTF9MT0coIkNyZWF0aW5nIG5ldyByZW5kZXIgY29tbWFu
ZCBlbmNvZGVyIHdpdGggZGVzYzogJUAiLAorLSAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGVk
UmVuZGVyUGFzc0Rlc2NPYmpDLmdldCgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgW21DYWNo
ZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKKyAKKyAgICAgICAgIGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBtZXRhbENtZEVuY29kZXIgPQorICAgICAgICAgICAgIFtjbWRC
dWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlwdG9yOm1DYWNoZWRS
ZW5kZXJQYXNzRGVzY09iakNdOworQEAgLTExMTAsNyArMTIwMSwxMSBAQCB2b2lkIFBvcERlYnVn
R3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0
ZUNvbW1hbmRTdAorICAgICAgICAgc2V0KG1ldGFsQ21kRW5jb2Rlcik7CisgCisgICAgICAgICAv
LyBWZXJpZnkgdGhhdCBpdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKy0gICAgICAgIEFTU0VS
VChtZXRhbENtZEVuY29kZXIpOworKyAgICAgICAgQVNTRVJUKGdldCgpKTsKKysKKysgICAgICAg
IC8vIFdvcmstYXJvdW5kIGRyaXZlciBidWcgb24gaU9TIGRldmljZXM6IHN0ZW5jaWwgbXVzdCBi
ZSBleHBsaWNpdGx5IHNldCB0byB6ZXJvCisrICAgICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5
cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5IHplcm8uCisrICAgICAgICBbbWV0YWxDbWRF
bmNvZGVyIHNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZTowXTsKKyAKKyAgICAgICAgIGlmIChtTGFi
ZWwpCisgICAgICAgICB7CitAQCAtMTExOSw3ICsxMjE0LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAKKyAgICAgICAgIHdoaWxlIChtQ29tbWFuZHMuZ29vZCgpKQorICAgICAgICAgewor
LSAgICAgICAgICAgIENtZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNo
PENtZFR5cGU+KCk7CisrICAgICAgICAgICAgYXV0byBjbWRUeXBlICAgICAgICAgICAgICAgPSBt
Q29tbWFuZHMuZmV0Y2g8Q21kVHlwZT4oKTsKKyAgICAgICAgICAgICBDb21tYW5kRW5jb2RlckZ1
bmMgZW5jb2RlciA9IGdDb21tYW5kRW5jb2RlcnNbc3RhdGljX2Nhc3Q8aW50PihjbWRUeXBlKV07
CisgICAgICAgICAgICAgZW5jb2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOworICAg
ICAgICAgfQorQEAgLTExNDIsNDEgKzEyMzcsMzQgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGVuZEVuY29kaW5nKCk7CisgICAgIH0KKyAKKy0gICAgaWYgKCFjbWRCdWZmZXIo
KS5yZWFkeSgpKQorKyAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCisgICAgIHsKKyAgICAg
ICAgIHJlc2V0KCk7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKyAKKy0gICAgbUxh
YmVsLnJlc2V0KCk7CistCisgICAgIG1SZW5kZXJQYXNzRGVzYyA9IGRlc2M7CisgICAgIG1SZWNv
cmRpbmcgICAgICA9IHRydWU7CisgICAgIG1IYXNEcmF3Q2FsbHMgICA9IGZhbHNlOworLSAgICBt
UmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAgICAgPSAwLAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC55ICAgICAgPSAwLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC53aWR0aCAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPE5TVUludGVnZXI+OjptYXgo
KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGVpZ2h0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OworIAorLSAgICAvLyBTZXQgd3JpdGluZyBk
ZXBlbmRlbmN5ICYgY29uc3RyYWluIHRoZSBzY2lzc29yIHJlY3QKKysgICAgLy8gbWFzayB3cml0
aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUgb3B0aW9ucworICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVudHM7
ICsraSkKKyAgICAgeworLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CisrICAgICAg
ICBpbml0V3JpdGVEZXBlbmRlbmN5KG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ld
LnRleHR1cmUoKSk7CisgICAgIH0KKyAKKy0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVu
Y3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50KTsKKysgICAg
aW5pdFdyaXRlRGVwZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1
cmUoKSk7CisgCistICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJl
Y3QobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKysgICAgaW5pdFdyaXRlRGVw
ZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpKTsKKyAK
KyAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjcmlwdG9yCisgICAgIG1SZW5kZXJQ
YXNzRGVzYy5jb252ZXJ0VG9NZXRhbERlc2MobUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQyk7Cisg
CistICAgIC8vIFRoZSBhY3R1YWwgT2JqZWN0aXZlLUMgZW5jb2RlciB3aWxsIGJlIGNyZWF0ZWQg
bGF0ZXIgaW4gZW5kRW5jb2RpbmcoKSwgd2UgZG8gc28gaW4KKy0gICAgLy8gb3JkZXIgdG8gYmUg
YWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBkbyB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUg
dGhlIGFjdHVhbAorLSAgICAvLyBlbmNvZGluZy4KKysgICAgLy8gVGhlIGFjdHVhbCBPYmplY3Rp
dmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRlZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBk
byBzbyBpbiBvcmRlcgorKyAgICAvLyB0byBiZSBhYmxlIHRvIHNvcnQgdGhlIGNvbW1hbmRzIG9y
IGRvIHRoZSBwcmVwcm9jZXNzaW5nIGJlZm9yZSB0aGUgYWN0dWFsIGVuY29kaW5nLgorIAorLSAg
ICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQg
dG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVyCistICAgIC8vIHRoYXQgdGhpcyBvYmpl
Y3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgorKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0
aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQg
YnVmZmVyIHRoYXQKKysgICAgLy8gdGhpcyBvYmplY3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgor
ICAgICBjbWRCdWZmZXIoKS5zZXRBY3RpdmVDb21tYW5kRW5jb2Rlcih0aGlzKTsKKyAKKyAgICAg
cmV0dXJuICp0aGlzOworQEAgLTEzMDIsMTYgKzEzOTAsNiBAQCB2b2lkIFBvcERlYnVnR3JvdXBD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdAorICAgICB7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKy0KKy0gICAgaWYg
KEFOR0xFX1VOTElLRUxZKHJlY3QueCArIHJlY3Qud2lkdGggPiBtUmVuZGVyUGFzc01heFNjaXNz
b3JSZWN0LndpZHRoIHx8CistICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0Lmhl
aWdodCA+IG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKKy0gICAgeworLSAgICAg
ICAgV0FSTigpIDw8ICJPdXQgb2YgYm91bmQgc2Npc3NvciByZWN0IGRldGVjdGVkICIgPDwgcmVj
dC54IDw8ICIgIiA8PCByZWN0LnkgPDwgIiAiCistICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0
aCA8PCAiICIgPDwgcmVjdC5oZWlnaHQ7CistICAgICAgICAvLyBPdXQgb2YgYm91bmQgcmVjdCB3
aWxsIGNyYXNoIHRoZSBtZXRhbCBydW50aW1lLCBpZ25vcmUgaXQuCistICAgICAgICByZXR1cm4g
KnRoaXM7CistICAgIH0KKy0KKyAgICAgbVN0YXRlQ2FjaGUuc2Npc3NvclJlY3QgPSByZWN0Owor
IAorICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpTZXRTY2lzc29yUmVjdCkucHVzaChyZWN0
KTsKK0BAIC0xMzgzLDcgKzE0NjEsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIC8vIElmIGJ1ZmZl
ciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRo
ZSBvZmZzZXQgb25seS4KKysgICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3
aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZlciBvbmx5LgorICAgICAg
ICAgc2hhZGVyU3RhdGVzLmJ1ZmZlck9mZnNldHNbaW5kZXhdID0gb2Zmc2V0OworIAorICAgICAg
ICAgbUNvbW1hbmRzLnB1c2goc3RhdGljX2Nhc3Q8Q21kVHlwZT4obVNldEJ1ZmZlck9mZnNldENt
ZHNbc2hhZGVyVHlwZV0pKQorQEAgLTE0OTAsMTIgKzE1NjgsNiBAQCB2b2lkIFBvcERlYnVnR3Jv
dXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNv
bW1hbmRTdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQpCisgeworLSAgICBpZiAoQU5H
TEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAgICAg
ICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3Rh
dGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0K
KyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNoKENtZFR5cGU6
OkRyYXcpLnB1c2gocHJpbWl0aXZlVHlwZSkucHVzaCh2ZXJ0ZXhTdGFydCkucHVzaCh2ZXJ0ZXhD
b3VudCk7CisgCitAQCAtMTUwNywxMiArMTU3OSw2IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IHZlcnRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpCisgeworLSAg
ICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAg
eworLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7Cist
ICAgIH0KKy0KKyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNo
KENtZFR5cGU6OkRyYXdJbnN0YW5jZWQpCisgICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQor
QEAgLTE1MjksMTMgKzE1OTUsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCisgeworLSAgICBpZiAo
QU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAg
ICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUg
c3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0K
Ky0KKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFpbmRleEJ1ZmZlcikpCisrICAgIGlmICghaW5k
ZXhCdWZmZXIpCisgICAgIHsKKyAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgfQorQEAgLTE1
NjAsMTMgKzE2MjAsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyB7CistICAgIGlm
IChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7Cist
ICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGlu
ZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAg
fQorLQorLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFp
bmRleEJ1ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAt
MTU5NCwxMyArMTY0OCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21t
YW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHVpbnQzMl90
IGluc3RhbmNlcywKKyAgICAgdWludDMyX3QgYmFzZVZlcnRleCkKKyB7CistICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7CistICAgICAg
ICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0
ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQor
LSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFpbmRleEJ1
ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHJldHVybiAqdGhpczsK
KyB9CisgCisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdTaWduSW1wbChO
U1N0cmluZyAqbGFiZWwpCisreworKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVu
ZEVuY29kaW5nKCkKKysgICAgbUNvbW1hbmRzLnB1c2goQ21kVHlwZTo6SW5zZXJ0RGVidWdzaWdu
KS5wdXNoKFtsYWJlbCBBTkdMRV9NVExfUkVUQUlOXSk7CisrfQorKworIHZvaWQgUmVuZGVyQ29t
bWFuZEVuY29kZXI6OnB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCkKKyB7CisgICAgIC8v
IERlZmVyIHRoZSBpbnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQorQEAgLTE3OTksNyArMTg1
Myw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgfQorIAorLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFkeSgpKQorKyAg
ICAgICAgaWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQorICAgICAgICAgeworICAgICAgICAgICAg
IHJlc2V0KCk7CisgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworQEAgLTE5NjIsNiArMjAxNiw2
NiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICByZXR1cm4gKnRoaXM7CisgfQorIAor
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0TGV2
ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHR1cmVSZWYgJmRzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3Rh
cnRMZXZlbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgc2xpY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKKyt7CisrICAgIGlm
ICghc3JjIHx8ICFkc3QpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqdGhpczsKKysgICAgfQor
KworKyAgICBjbWRCdWZmZXIoKS5zZXRSZWFkRGVwZW5kZW5jeShzcmMpOworKyAgICBjbWRCdWZm
ZXIoKS5zZXRXcml0ZURlcGVuZGVuY3koZHN0KTsKKysKKysjaWYgZGVmaW5lZChfX0lQSE9ORV8x
M18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMuMCkpCisrICAgIHsKKysgICAgICAgIFtnZXQoKSBjb3B5
RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpz
cmNTdGFydFNsaWNlCisrICAgICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2
ZWwKKysgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5nZXQoKQorKyAgICAgICAg
ICAgICAgZGVzdGluYXRpb25TbGljZTpkc3RTdGFydFNsaWNlCisrICAgICAgICAgICAgICBkZXN0
aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKysgICAgICAgICAgICAgICAgICAgIHNsaWNlQ291
bnQ6c2xpY2VDb3VudAorKyAgICAgICAgICAgICAgICAgICAgbGV2ZWxDb3VudDpsZXZlbENvdW50
XTsKKysgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIE1UTE9yaWdp
biBvcmlnaW4gPSBNVExPcmlnaW5NYWtlKDAsIDAsIDApOworKyAgICAgICAgZm9yICh1aW50MzJf
dCBzbGljZSA9IDA7IHNsaWNlIDwgc2xpY2VDb3VudDsgKytzbGljZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICB1aW50MzJfdCBzcmNTbGljZSA9IHNyY1N0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICB1aW50MzJfdCBkc3RTbGljZSA9IGRzdFN0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyAr
K2xldmVsKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbXRsOjpNaXBtYXBOYXRp
dmVMZXZlbCBzcmNMZXZlbCA9IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoc3JjU3RhcnRMZXZlbCAr
IGxldmVsKTsKKysgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwgPSBkc3RTdGFydExl
dmVsICsgbGV2ZWw7CisrICAgICAgICAgICAgICAgIE1UTFNpemUgc3JjU2l6ZSA9CisrICAgICAg
ICAgICAgICAgICAgICBNVExTaXplTWFrZShzcmMtPndpZHRoKHNyY0xldmVsKSwgc3JjLT5oZWln
aHQoc3JjTGV2ZWwpLCBzcmMtPmRlcHRoKHNyY0xldmVsKSk7CisrCisrICAgICAgICAgICAgICAg
IFtnZXQoKSBjb3B5RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVNsaWNlOnNyY1NsaWNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZU9yaWdpbjpvcmlnaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlU2l6
ZTpzcmNTaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5n
ZXQoKQorKyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRzdFNsaWNlCisr
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZHN0TGV2ZWwKKysgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gKnRoaXM7CisrfQorKworIEJsaXRD
b21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0
dXJlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCitA
QCAtMTk3NCw3ICsyMDg4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyAgICAgcmV0
dXJuICp0aGlzOworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6
c3luY2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlcikKKytCbGl0Q29tbWFuZEVuY29kZXIg
JkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYg
JmJ1ZmZlcikKKyB7CisgICAgIGlmICghYnVmZmVyKQorICAgICB7CitAQCAtMTk4OSw3ICsyMTAz
LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAjZW5kaWYKKyAgICAgcmV0dXJuICp0aGlz
OworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25p
emVSZXNvdXJjZShUZXh0dXJlICp0ZXh0dXJlKQorK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENv
bW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCisgICAgIHsKK0BAIC0yMDI4LDcgKzIxNDIsNyBA
QCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgIH0KKyAKKy0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKysgICAgICAg
IGlmICghY21kQnVmZmVyKCkudmFsaWQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXNl
dCgpOworICAgICAgICAgICAgIHJldHVybiAqdGhpczsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaAoraW5kZXggOTdjY2I5My4uM2ZjNWUzOSAxMDA2NDQKKy0tLSBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKK0BAIC0yNyw5ICsyNywxOCBAQAorICNpbmNs
dWRlICJsaWJBTkdMRS9hbmdsZXR5cGVzLmgiCisgCisgI2lmIFRBUkdFVF9PU19JUEhPTkUKKysj
ICAgIGlmICFkZWZpbmVkKF9fSVBIT05FXzExXzApCisrIyAgICAgICAgZGVmaW5lIF9fSVBIT05F
XzExXzAgMTEwMDAwCisrIyAgICBlbmRpZgorICMgICAgaWYgIWRlZmluZWQoQU5HTEVfSU9TX0RF
UExPWV9UQVJHRVQpCisgIyAgICAgICAgZGVmaW5lIEFOR0xFX0lPU19ERVBMT1lfVEFSR0VUIF9f
SVBIT05FXzExXzAKKyAjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5lZChfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEKQorKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV9PU19WRVJTSU9O
X01BWF9BTExPV0VEIF9fSVBIT05FXzExXzAKKysjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5l
ZChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisrIyAgICAgICAgZGVmaW5lIF9fVFZfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisrIyAgICBlbmRpZgorICNlbmRpZgor
IAorICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtNjYsNiArNzUsNyBA
QCBuYW1lc3BhY2UgZWdsCisgeworIGNsYXNzIERpc3BsYXk7CisgY2xhc3MgSW1hZ2U7CisrY2xh
c3MgU3VyZmFjZTsKKyB9ICAvLyBuYW1lc3BhY2UgZWdsCisgCisgI2RlZmluZSBBTkdMRV9HTF9P
QkpFQ1RTX1goUFJPQykgXAorQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJlTXRsOwor
IGNsYXNzIFByb2dyYW1NdGw7CisgY2xhc3MgU2FtcGxlck10bDsKKyBjbGFzcyBUcmFuc2Zvcm1G
ZWVkYmFja010bDsKKytjbGFzcyBTdXJmYWNlTXRsUHJvdG9jb2w7CisgCisgQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCisgCitAQCAtMTI4LDcgKzEzOSw4
IEBAIGNvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRBdHRyaWJ1dGVTaXplID0gNCAqIHNpemVvZihm
bG9hdCk7CisgLy8gTWV0YWwgbGltaXRzCisgY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJC
dWZmZXJzICAgICA9IDMxOworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMg
ICAgPSAxNjsKKy1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAq
IDEwMjQ7CisrY29uc3RleHByIHNpemVfdCBrSW5saW5lQ29uc3REYXRhTWF4U2l6ZSA9IDQgKiAx
MDI0OworK2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5l
Q29uc3REYXRhTWF4U2l6ZTsKKyBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAg
ICAgID0gMTsKKyAKKyBjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlk
ZUFsaWdubWVudCA9IDQ7CitAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworIGNvbnN0ZXhwciB1aW50MzJf
dCBrQXJndW1lbnRCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgPSBrVW5pZm9ybUJ1ZmZlclNldHRp
bmdPZmZzZXRNaW5BbGlnbm1lbnQ7CisgY29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZm
ZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKyAKKy0vLyBGcm9udCBlbmQgYmluZGluZyBsaW1p
dHMKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4
R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7CisgCitA
QCAtMTU1LDIxICsxNjcsMjMgQEAgY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtNYXhWZXIKKyBjb25zdGV4cHIg
dWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmlu
ZGluZ0luZGV4ICsgMTsKKyAvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IHVuaWZvcm1zOgor
IGNvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKy0vLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBh
cmd1bWVudCBidWZmZXIgb3Igc3RhcnRpbmcgZGlzY3JldGUgc2xvdAorLWNvbnN0ZXhwciB1aW50
MzJfdCBrVUJPQXJndW1lbnRCdWZmZXJCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sg
QnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qga1RyYW5zZm9ybUZlZWRiYWNrQmluZGlu
Z0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisrLy8gQmluZGluZyBp
bmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJlIG1vZGVzCisrY29uc3RleHByIHVpbnQz
Ml90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZl
ZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBhcmd1
bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmluZGlu
Z0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXggKyAxOworIAor
LWNvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tBbGwgPSAweGZmOyAgLy8gT25seSA4IGJp
dHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKytjb25zdGV4cHIgdWludDMyX3Qga1N0ZW5jaWxNYXNr
QWxsID0gMHhmZjsgIC8vIE9ubHkgOCBiaXQgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKyAKKyAvLyBU
aGlzIHNwZWNpYWwgY29uc3RhbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFydGljdWxh
ciB2ZXJ0ZXggZGVzY3JpcHRvcidzIGJ1ZmZlciBsYXlvdXQKKyAvLyBpbmRleCBpcyB1bnVzZWQu
CisgY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVydGV4U3RlcEZ1bmN0aW9uSW52
YWxpZCA9CisgICAgIHN0YXRpY19jYXN0PE1UTFZlcnRleFN0ZXBGdW5jdGlvbj4oMHhmZik7Cisg
CistY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsKKy0KKy1jb25zdGV4cHIg
c2l6ZV90IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUgPSBzaXplb2YodWludDY0X3QpOworK2Nv
bnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKKyAKKy1jb25zdGV4cHIg
Z2w6OlZlcnNpb24ga01heFN1cHBvcnRlZEdMVmVyc2lvbiA9IGdsOjpWZXJzaW9uKDMsIDApOwor
K2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyAKKyAvLyBXb3JrLWFyb3VuZCB0aGUgZW51bSBpcyBub3QgYXZhaWxhYmxlIG9u
IG1hY09TCisgI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCitAQCAt
MTc5LDEzICsxOTMsMTEgQEAgY29uc3RleHByIE1UTEJsaXRPcHRpb24ga0JsaXRPcHRpb25Sb3dM
aW5lYXJQVlJUQyAgICAgICAgICA9IE1UTEJsaXRPcHRpb25Sb3dMaW4KKyAjZW5kaWYKKyAKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRSAxCisgdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CisgdXNpbmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE1UTFJl
bmRlclN0YWdlczsKKyBjb25zdGV4cHIgTVRMUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRl
eCAgID0gTVRMUmVuZGVyU3RhZ2VWZXJ0ZXg7CisgY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBr
UmVuZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CisgI2Vsc2UKKy0j
ICAgIGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMAorIHVzaW5nIFRleHR1cmVT
d2l6emxlQ2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CisgdXNp
bmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IGludDsKKyBjb25zdGV4cHIgUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRleCAgICAgICAg
ICAgICAgICAgID0gMTsKK0BAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxw
ZXI8ZWdsOjpEaXNwbGF5PgorIHsKKyAgICAgdXNpbmcgSW1wbFR5cGUgPSBEaXNwbGF5TXRsOwor
IH07CistCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNl
PgorK3sKKysgICAgdXNpbmcgSW1wbFR5cGUgPSBTdXJmYWNlTXRsUHJvdG9jb2w7CisrfTsKKyB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB1c2luZyBHZXRJbXBsVHlwZSA9IHR5cGVuYW1lIEltcGxU
eXBlSGVscGVyPFQ+OjpJbXBsVHlwZTsKKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1HZXRJ
bXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpfTm9ubnVsbCBnbE9iamVjdCkKKytHZXRJbXBs
VHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpnbE9iamVjdCkKKyB7CisgICAgIHJldHVybiBHZXRJ
bXBsQXM8R2V0SW1wbFR5cGU8VD4+KGdsT2JqZWN0KTsKKyB9CitAQCAtMzQ2LDIxICszNjIsMTYg
QEAgdXNpbmcgQXV0b09iakNPYmogPSBBdXRvT2JqQ1B0cjxUICo+OworIAorIC8vIE5PVEU6IFNo
YXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMQorIHVzaW5nIFNoYXJlZEV2ZW50UmVm
ID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+PjsKKyAjZWxzZQorLSMgICAgZGVmaW5l
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMAorIHVzaW5nIFNoYXJlZEV2ZW50UmVmICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBBdXRvT2JqQ09iajxOU09iamVjdD47
CisgI2VuZGlmCisgCisgLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRleCB1c2VkIGJ5IE1ldGFsIGJh
Y2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1pcG1hcCBsZXZlbCBpbnN0ZWFk
CisgLy8gb2YgInZpcnR1YWwiIGxldmVsIG1vZGlmaWVkIGJ5IE9wZW5HTCdzIGJhc2UgbGV2ZWwu
CisgdXNpbmcgTWlwbWFwTmF0aXZlTGV2ZWwgPSBnbDo6TGV2ZWxJbmRleFdyYXBwZXI8dWludDMy
X3Q+OworLQorIGNvbnN0ZXhwciBNaXBtYXBOYXRpdmVMZXZlbCBrWmVyb05hdGl2ZU1pcExldmVs
KDApOworLQorIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKKy0KKyBjbGFzcyBJbWFn
ZU5hdGl2ZUluZGV4IGZpbmFsCisgeworICAgcHVibGljOgorQEAgLTM3MCw1NSArMzgxLDQyIEBA
IGNsYXNzIEltYWdlTmF0aXZlSW5kZXggZmluYWwKKyAgICAgICAgIG1OYXRpdmVJbmRleCA9IGds
OjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExldmVsSW5k
ZXgoKSAtIGJhc2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjLmdldExheWVySW5kZXgoKSwgc3JjLmdldExheWVyQ291bnQoKSk7
CisgICAgIH0KKy0KKyAgICAgc3RhdGljIEltYWdlTmF0aXZlSW5kZXggRnJvbUJhc2VaZXJvR0xJ
bmRleChjb25zdCBnbDo6SW1hZ2VJbmRleCAmc3JjKQorICAgICB7CisgICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOworICAgICB9CistCisgICAgIE1pcG1hcE5hdGl2ZUxl
dmVsIGdldE5hdGl2ZUxldmVsKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJuIE1pcG1h
cE5hdGl2ZUxldmVsKG1OYXRpdmVJbmRleC5nZXRMZXZlbEluZGV4KCkpOworICAgICB9CistCisg
ICAgIGdsOjpUZXh0dXJlVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmdldFR5cGUoKTsgfQorICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4g
bU5hdGl2ZUluZGV4LmdldExheWVySW5kZXgoKTsgfQorICAgICBHTGludCBnZXRMYXllckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmdldExheWVyQ291bnQoKTsgfQorICAgICBH
TGludCBjdWJlTWFwRmFjZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmN1YmVN
YXBGYWNlSW5kZXgoKTsgfQorLQorICAgICBib29sIGlzTGF5ZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1OYXRpdmVJbmRleC5pc0xheWVyZWQoKTsgfQorICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbU5hdGl2ZUluZGV4Lmhhc0xheWVyKCk7IH0KKyAgICAgYm9vbCBoYXMzRExheWVy
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQorICAgICBib29s
IHVzZXNUZXgzRCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC51c2VzVGV4M0QoKTsgfQor
LQorICAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7
IH0KKy0KKyAgICAgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGdldExheWVySXRlcmF0b3IoR0xp
bnQgbGF5ZXJDb3VudCkgY29uc3Q7CistCisgICBwcml2YXRlOgorICAgICBnbDo6SW1hZ2VJbmRl
eCBtTmF0aXZlSW5kZXg7CisgfTsKKy0KKyBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4SXRlcmF0b3Ig
ZmluYWwKKyB7CisgICBwdWJsaWM6CisgICAgIEltYWdlTmF0aXZlSW5kZXggbmV4dCgpIHsgcmV0
dXJuIEltYWdlTmF0aXZlSW5kZXgobU5hdGl2ZUluZGV4SXRlLm5leHQoKSwgMCk7IH0KKyAgICAg
SW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRl
eChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAwKTsgfQorICAgICBib29sIGhhc05leHQoKSBj
b25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXhJdGUuaGFzTmV4dCgpOyB9CistCisgICBwcml2YXRl
OgorICAgICAvLyBUaGlzIGNsYXNzIGlzIG9ubHkgY29uc3RydWN0YWJsZSBmcm9tIEltYWdlTmF0
aXZlSW5kZXgKKyAgICAgZnJpZW5kIGNsYXNzIEltYWdlTmF0aXZlSW5kZXg7CistCisgICAgIGV4
cGxpY2l0IEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcihjb25zdCBnbDo6SW1hZ2VJbmRleEl0ZXJh
dG9yICZiYXNlWmVyb1NyYykKKyAgICAgICAgIDogbU5hdGl2ZUluZGV4SXRlKGJhc2VaZXJvU3Jj
KQorICAgICB7fQorLQorICAgICBnbDo6SW1hZ2VJbmRleEl0ZXJhdG9yIG1OYXRpdmVJbmRleEl0
ZTsKKyB9OworLQorIHVzaW5nIENsZWFyQ29sb3JWYWx1ZUJ5dGVzID0gc3RkOjphcnJheTx1aW50
OF90LCA0ICogc2l6ZW9mKGZsb2F0KT47CistCisgY2xhc3MgQ2xlYXJDb2xvclZhbHVlCisgewor
ICAgcHVibGljOgorQEAgLTQzNywyMiArNDM1LDE1IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQor
ICAgICBjb25zdGV4cHIgQ2xlYXJDb2xvclZhbHVlKGNvbnN0IENsZWFyQ29sb3JWYWx1ZSAmc3Jj
KQorICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZhbHVlQnl0
ZXMpCisgICAgIHt9CistCisgICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkgY29u
c3Q7CistCisgICAgIFBpeGVsVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0K
Ky0KKyAgICAgY29uc3QgQ2xlYXJDb2xvclZhbHVlQnl0ZXMgJmdldFZhbHVlQnl0ZXMoKSBjb25z
dCB7IHJldHVybiBtVmFsdWVCeXRlczsgfQorLQorICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJh
dG9yPShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7CistCisgICAgIHZvaWQgc2V0QXNGbG9h
dChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgdm9pZCBzZXRBc0lu
dChpbnQzMl90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOworICAgICB2b2lk
IHNldEFzVUludCh1aW50MzJfdCByLCB1aW50MzJfdCBnLCB1aW50MzJfdCBiLCB1aW50MzJfdCBh
KTsKKy0KKyAgIHByaXZhdGU6CisgICAgIFBpeGVsVHlwZSBtVHlwZTsKKy0KKyAgICAgdW5pb24K
KyAgICAgeworICAgICAgICAgc3RydWN0CitAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFy
Q29sb3JWYWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIHVpbnQzMl90IG1SZWRVLCBtR3Jl
ZW5VLCBtQmx1ZVUsIG1BbHBoYVU7CisgICAgICAgICB9OworLQorICAgICAgICAgQ2xlYXJDb2xv
clZhbHVlQnl0ZXMgbVZhbHVlQnl0ZXM7CisgICAgIH07CisgfTsKK0BAIC00ODMsNyArNDczLDcg
QEAgY2xhc3MgRXJyb3JIYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBsaW5lKSA9IDA7CisgCistICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICplcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSA9IDA7CitAQCAt
NDkzLDcgKzQ4Myw3IEBAIGNsYXNzIENvbnRleHQgOiBwdWJsaWMgRXJyb3JIYW5kbGVyCisgewor
ICAgcHVibGljOgorICAgICBDb250ZXh0KERpc3BsYXlNdGwgKmRpc3BsYXlNdGwpOworLSAgICBf
TnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmljZSgpIGNvbnN0OworKyAgICBpZDxN
VExEZXZpY2U+IGdldE1ldGFsRGV2aWNlKCkgY29uc3Q7CisgICAgIG10bDo6Q29tbWFuZFF1ZXVl
ICZjbWRRdWV1ZSgpOworIAorICAgICBEaXNwbGF5TXRsICpnZXREaXNwbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbURpc3BsYXk7IH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbnN0YW50cy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25z
dGFudHMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyMGIyY2QKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3Rh
bnRzLmgKK0BAIC0wLDAgKzEsNzMgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysvLyBtdGxfY29tbW9uLmg6
CisrLy8gICAgICBEZWNsYXJlcyBudW1lcmljYWwgY29uc3RhbnRzIHVzZWQgaW4gTWV0YWwuCisr
Ly8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xhc3MuCisrLy8KKysKKysjaWZuZGVmIExJQkFO
R0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNfSAorKyNkZWZpbmUgTElCQU5HTEVfUkVO
REVSRVJfTUVUQUxfTVRMX0NPTlNUQU5UU19ICisrI2luY2x1ZGUgImxpYkFOR0xFL0NvbnN0YW50
cy5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L2FuZ2xldHlwZXMuaCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sK
KysKKysvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IHZhcmlhYmxlIG1heCBudW1iZXIgb2YgdmVydGV4
IGF0dHJpYnV0ZXMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0dHJpYnMgPSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOworKy8vIE5PVEUoaHFsZSk6IHN1cHBvcnQgdmFyaWFibGUgbWF4
IG51bWJlciBvZiByZW5kZXIgdGFyZ2V0cworK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4UmVuZGVy
VGFyZ2V0cyA9IDQ7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJVQk9zID0gMTI7
CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhVQk9TaXplICAgID0gMTYzODQ7CisrCisrY29uc3Rl
eHByIHNpemVfdCBrRGVmYXVsdEF0dHJpYnV0ZVNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKysK
KysvLyBNZXRhbCBsaW1pdHMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZlcnMg
ICAgID0gMzE7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJTYW1wbGVycyAgICA9IDE2
OworK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
Kytjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0
RGF0YU1heFNpemU7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhWaWV3cG9ydHMgICAgICAgICA9
IDE7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGln
bm1lbnQgPSA0OworKy8vIEFsaWdubWVudCByZXF1aXJlbWVudCBmb3Igb2Zmc2V0IHBhc3NlZCB0
byBzZXRWZXJ0ZXh8RnJhZ21lbnRCdWZmZXIKKysjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKytjb25zdGV4cHIgdWludDMyX3Qga1VuaWZvcm1CdWZmZXJTZXR0aW5n
T2Zmc2V0TWluQWxpZ25tZW50ID0gMjU2OworKyNlbHNlCisrY29uc3RleHByIHVpbnQzMl90IGtV
bmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisrI2VuZGlmCisrY29u
c3RleHByIHVpbnQzMl90IGtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCAgICAgICA9IDQ7Cisr
Y29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1
NjsKKysKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworK2NvbnN0ZXhwciB1aW50MzJfdCBr
TWF4R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworK2NvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7Cisr
CisrLy8gQmluZGluZyBpbmRleCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKKytjb25z
dGV4cHIgdWludDMyX3Qga1Zib0JpbmRpbmdJbmRleFN0YXJ0ID0gMDsKKysKKysvLyBCaW5kaW5n
IGluZGV4IGZvciBkZWZhdWx0IGF0dHJpYnV0ZSBidWZmZXI6CisrY29uc3RleHByIHVpbnQzMl90
IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtN
YXhWZXJ0ZXhBdHRyaWJzOworKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRyaXZlciB1bmlmb3JtczoK
Kytjb25zdGV4cHIgdWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0
IHVuaWZvcm1zOgorK2NvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0lu
ZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKysvLyBCaW5kaW5nIGluZGV4
IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qg
a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJ
bmRleCArIDE7CisrLy8gQmluZGluZyBpbmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJl
IG1vZGVzCisrY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmlu
ZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5k
aW5nIGluZGV4IGZvciBVQk8ncyBhcmd1bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qg
a1VCT0FyZ3VtZW50QnVmZmVyQmluZGluZ0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNCaW5kaW5nSW5kZXggKyAxOworKworK2NvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tB
bGwgPSAweGZmOyAgLy8gT25seSA4IGJpdHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrI2VuZGlmCitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgoraW5kZXggNGExMmE5
MC4uMmRhNzQyMSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X21hcC5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zv
cm1hdF9tYXAuanNvbgorQEAgLTc0LDExICs3NCwxMSBAQAorICAgICAgICAgICAgICJEMzJfRkxP
QVQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQiLAorICAgICAgICAgICAgICJTOF9VSU5U
IjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAorICAgICAgICAgICAgICJEMzJfRkxPQVRfUzhY
MjRfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOCIsCistICAgICAg
ICAgICAgIkIxMEcxMFIxMEEyX1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtIiwK
KyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKKyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRS
R0IxMEEyVW5vcm0iLAorICAgICAgICAgICAgICJSMTFHMTFCMTBfRkxPQVQiOiAiTVRMUGl4ZWxG
b3JtYXRSRzExQjEwRmxvYXQiLAorLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAi
TVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKysgICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVE
RVhQIjogIk1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQiLAorKyAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm0iCisgICAgICAgICB9LAorICAgICAgICAg
Im1hcF9pb3MiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJNVExQaXhlbEZvcm1h
dEI1RzZSNVVub3JtIiwKK0BAIC05Miw2ICs5Miw3IEBACisgICAgICAgICAgICAgIlBWUlRDMV9S
R0JfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBf
c1JHQiIsCisgICAgICAgICAgICAgIlBWUlRDMV9SR0JBXzJCUFBfVU5PUk1fU1JHQl9CTE9DSyI6
ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfMkJQUF9zUkdCIiwKKyAgICAgICAgICAgICAiUFZS
VEMxX1JHQkFfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdC
QV80QlBQX3NSR0IiLAorKyAgICAgICAgICAgICJFVEMxX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJN
VExQaXhlbEZvcm1hdEVUQzJfUkdCOCIsCisgICAgICAgICAgICAgIkVUQzJfUjhHOEI4X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4IiwKKyAgICAgICAgICAgICAiRVRDMl9S
OEc4QjhfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKKyAgICAg
ICAgICAgICAiRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJf
UkdCOEExIiwKK0BAIC0xMDAsMzkgKzEwMSwzOCBAQAorICAgICAgICAgICAgICJFVEMyX1I4RzhC
OEE4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCisgICAgICAg
ICAgICAgIkVBQ19SMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0i
LAorICAgICAgICAgICAgICJFQUNfUjExX1NOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFD
X1IxMVNub3JtIiwKKy0gICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVBQ19SRzExVW5vcm0iLAorKyAgICAgICAgICAgICJFQUNfUjExRzExX1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtIiwKKyAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0iLAorLSAg
ICAgICAgICAgICJBU1RDXzR4NF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0
X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNHg0X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzR4NF9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdC
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCistICAgICAgICAgICAgIkFT
VENfNXg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKy0gICAg
ICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X3NS
R0IiLAorLSAgICAgICAgICAgICJBU1RDXzZ4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfNng1X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNng1X1NSR0JfQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIiLAorLSAgICAgICAgICAgICJBU1RD
XzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIsCistICAgICAg
ICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERS
IiwKKy0gICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzh4Nl9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCistICAgICAgICAgICAgIkFTVENfOHg2X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ184
eDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorLSAgICAgICAg
ICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIs
CistICAgICAgICAgICAgIkFTVENfMTB4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTB4NV9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEweDVfU1JHQl9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTB4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg2X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTB4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IiLAorLSAg
ICAgICAgICAgICJBU1RDXzEweDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDhfTERSIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzEweDhfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENf
MTB4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCistICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEy
eDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhl
bEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTJfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JHQiIKKysg
ICAgICAgICAgICAiQVNUQ180eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4
NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzV4NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyIg
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ182eDVf
U1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKysgICAgICAgICAg
ICAiQVNUQ182eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9zUkdCIiwK
KysgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDhfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorKyAgICAg
ICAgICAgICJBU1RDXzEweDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDZf
c1JHQiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NL
IiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENf
MTJ4MTBfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IiLAorKyAg
ICAgICAgICAgICJBU1RDXzEyeDEyX1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ180eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxP
Q0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKysgICAgICAg
ICAgICAiQVNUQ182eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERS
IiwKKysgICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ184eDVfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1f
QkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKysgICAgICAgICAgICAiQVNU
Q184eDhfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfTERSIiwKKysgICAg
ICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4
NV9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfTERSIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHgxMF9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCisrICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMF9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEyeDEyX1VOT1JNX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTJ4MTJfTERSIgorICAgICAgICAgfSwKKyAgICAgICAgICJtYXBfbWFj
IjogeworLSAgICAgICAgICAgICJEMTZfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5v
cm0iLAorICAgICAgICAgICAgICJEMjRfVU5PUk1fUzhfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERl
cHRoMjRVbm9ybV9TdGVuY2lsOCIsCisgICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NL
IjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEiLAorICAgICAgICAgICAgICJCQzFfUkdCQV9VTk9S
TV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiIsCitAQCAtMTc1LDkg
KzE3NSw3IEBACisgICAgICAgICAgICAgIkQzMl9VTk9STSI6ICJEMzJfRkxPQVQiCisgICAgICAg
ICB9LAorICAgICAgICAgIm92ZXJyaWRlX2lvcyI6IHsKKy0gICAgICAgICAgICAiRDI0X1VOT1JN
X1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiLAorLSAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiRDMyX0ZMT0FUIiwKKy0gICAgICAgICAgICAiRVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0si
OiAiRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0siCisrICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9V
SU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgorICAgICAgICAgfSwKKyAgICAgICAgICJvdmVy
cmlkZV9tYWMiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJSOEc4QjhBOF9VTk9S
TSIsCitAQCAtMjAzLDcgKzIwMSw4IEBACisgICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1f
QkxPQ0siOiAiUjE2RzE2X1VOT1JNIiwKKyAgICAgICAgICAgICAiRUFDX1IxMUcxMV9TTk9STV9C
TE9DSyI6ICJSMTZHMTZfU05PUk0iCisgICAgICAgICB9LAorLSAgICAgICAgImQyNHM4X2ZhbGxi
YWNrc19tYWMiOiB7CisrICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKysgICAgICAgICAgICAi
QjhHOFI4QThfVU5PUk0iOiAiUjhHOEI4QThfVU5PUk0iLAorICAgICAgICAgICAgICJEMjRfVU5P
Uk1fUzhfVUlOVCI6ICJEMzJfRkxPQVRfUzhYMjRfVUlOVCIKKyAgICAgICAgIH0sCisgICAgICAg
ICAiY2FwcyI6IHsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQoraW5kZXggYzIxYzU5My4uZDNlYTViMCAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9n
ZW4ubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxl
X2F1dG9nZW4ubW0KK0BAIC0yOCw3ICsyOCw2IEBACisgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3Qg
RGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQor
IHsKKyAgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCAgICA9IGludGVuZGVkRm9ybWF0SWRfOwor
LQorICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZp
Y2UoKTsKKyAKKyAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KK0BAIC00MywxNSArNDIsMjYgQEAK
KyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFr
OworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNOgor
KyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgY2Fz
ZSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOgorIAorLSAgICAgICAgICAgIHRoaXMt
Pm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07CistICAgICAgICAg
ICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VO
T1JNOworKyAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZv
cm1hdFN1cHBvcnRlZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworKyAgICAgICAgICAgICAg
ICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm07Cisr
ICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpS
OEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBu
dWxscHRyOworKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9
IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NY
IHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6
OkI4RzhSOEE4X1VOT1JNOgorIAorICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworQEAgLTYxLDYgKzcxLDcgQEAKKyAgICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGNh
c2UgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STV9TUkdCOgorIAorICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CitA
QCAtNzAsNiArODEsMzYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19N
QUNDQVRBTFlTVAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKKysK
KysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgx
NlVub3JtOworKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1h
dElEOjpEMTZfVU5PUk07CisrICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxs
cHRyOworKworKyAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrI2Vsc2UgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUCisrICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgorKworKyAg
ICAgICAgICAgIGlmIChbbWV0YWxEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBw
bGUzXSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisrICAgICAgICAgICAgICAgIHRoaXMt
PmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk07CisrICAgICAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVDsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworKyAgICAg
ICAgICAgIH0KKysKKysgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1Nf
TUFDQ0FUQUxZU1QKKyAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6Cisg
CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdDsKK0BAIC04MTUsMTUgKzg1Niw2IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenps
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpEMTZfVU5PUk06CistCistICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybTsKKy0gICAgICAgICAgICB0aGlzLT5hY3R1
YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOworLSAgICAgICAgICAgIHRo
aXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAgICB0aGlzLT5zd2l6
emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICAgICAgICAgY2FzZSBhbmds
ZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOgorIAorICAgICAgICAgICAgIGlmIChtZXRh
bERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCAmJgorQEAgLTEyODEs
NyArMTMxMyw3IEBACisgCisgICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RUFDX1IxMUcx
MV9VTk9STV9CTE9DSzoKKyAKKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RUFDX1JHMTFVbm9ybTsKKysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1h
dCAgICA9IE1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtOworICAgICAgICAgICAgIHRoaXMtPmFj
dHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VOT1JNX0JMT0NLOwor
ICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAKK0BAIC0xMzA2
LDYgKzEzMzgsMTUgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAg
ICAgICAgICAgIGJyZWFrOworIAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFf
UjhHOEI4X1VOT1JNX0JMT0NLOgorKworKyAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CisrICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLOworKyAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysKKysgICAgICAgICAgICB0
aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAgICAgICAgIGJyZWFrOworKworICAgICAgICAg
Y2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoKKyAKKyAgICAg
ICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFf
c1JHQjsKK0BAIC0xNDU5LDE1ICsxNTAwLDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6
Rm9ybWF0SUQ6OkQxNl9VTk9STToKKy0KKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OworLSAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7CistICAgICAgICAgICAgdGhp
cy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworLQorLSAgICAgICAgICAgIHRoaXMtPnN3aXp6
bGVkID0gZmFsc2U7CistICAgICAgICAgICAgYnJlYWs7CistCisgICAgICAgICBjYXNlIGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ6CisgCisgICAgICAgICAgICAgdGhpcy0+bWV0
YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsODsKK0BAIC0x
NDc3LDE1ICsxNTA5LDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLOgorLQorLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CistICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLOworLSAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1h
dEludmFsaWQ7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9m
b3JtYXRfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0
aWxzLmgKK2luZGV4IGJiYjI3ZDQuLmYzOTY4MWQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCitAQCAtNTUsNiArNTUsMTEgQEAgc3RydWN0
IEZvcm1hdENhcHMKKyAgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAg
ICBib29sIG11bHRpc2FtcGxlICAgICAgICAgID0gZmFsc2U7ICAvLyBjYW4gYmUgdXNlZCBhcyBN
U0FBIHRhcmdldAorICAgICBib29sIHJlc29sdmUgICAgICAgICAgICAgID0gZmFsc2U7ICAvLyBD
YW4gYmUgdXNlZCBhcyByZXNvbHZlIHRhcmdldAorKyAgICBib29sIGNvbXByZXNzZWQgICAgICAg
ICAgID0gZmFsc2U7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcyAgICAgPSAwOworKyAgICBO
U1VJbnRlZ2VyIHBpeGVsQnl0ZXNNU0FBID0gMDsKKysgICAgTlNVSW50ZWdlciBjaGFubmVscyAg
ICAgICA9IDA7CisrICAgIHVpbnQ4X3QgYWxpZ25tZW50ICAgICAgICAgPSAwOworIH07CisgCisg
Ly8gUGl4ZWwgZm9ybWF0CitAQCAtMTQzLDYgKzE0OCw3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwcml2YXRlOgorICAgICB2b2lkIGluaXROYXRp
dmVGb3JtYXRDYXBzQXV0b2dlbihjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKyAgICAgdm9p
ZCBpbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKysKKyAg
ICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0YWJsZSwKK0BAIC0xNTAsNiArMTU2LDE3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11
bHRpc2FtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpOworKworKyAgICB2b2lkIHNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGJ5dGVzUGVyQ2hhbm5lbCwK
KysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworKworICAgICB2
b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHdyaXRhYmxlLAorQEAgLTE1OSw4ICsxNzYsMjQgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwg
OiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JS
ZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUp
OworIAorKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisr
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjb2xvclJlbmRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRo
UmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0ZXNQZXJD
aGFubmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscyk7Cisr
CisgICAgIHZvaWQgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0
SWQsIGJvb2wgZmlsdGVyYWJsZSk7CisgCisrICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0ZvckRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdXBwb3J0c2lPUzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHN1cHBvcnRzaU9TNCk7CisrCisgICAgIHN0ZDo6YXJyYXk8Rm9ybWF0LCBhbmds
ZTo6a051bUFOR0xFRm9ybWF0cz4gbVBpeGVsRm9ybWF0VGFibGU7CisgICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDxNVExQaXhlbEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlOworICAgICAvLyBPbmUgZm9yIHRpZ2h0bHkgcGFja2VkIGJ1ZmZlcnMsIG9uZSBmb3Ig
Z2VuZXJhbCBjYXNlcy4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9y
bWF0X3V0aWxzLm1tCitpbmRleCBmYjFkNWNhLi40MTZhZDVjIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0KKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLm1tCitAQCAtNzcsOCArNzcsOCBA
QCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRh
YmxlLAorICAgICAgICAgICAgIHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlciA9CisgICAgICAgICAg
ICAgICAgIG10bEZvcm1hdC5nZXRDYXBzKCkuY29sb3JSZW5kZXJhYmxlIHx8IG10bEZvcm1hdC5n
ZXRDYXBzKCkuZGVwdGhSZW5kZXJhYmxlOworICAgICAgICAgICAgIHRleHR1cmVDYXBzLnRleHR1
cmFibGUgICAgICAgID0gdHJ1ZTsKKy0gICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5ibGVuZGFibGUg
ICAgICAgICA9IG10bEZvcm1hdC5nZXRDYXBzKCkuYmxlbmRhYmxlOworICAgICAgICAgICAgIHRl
eHR1cmVDYXBzLnRleHR1cmVBdHRhY2htZW50ID0gdGV4dHVyZUNhcHMucmVuZGVyYnVmZmVyOwor
KyAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0Lmdl
dENhcHMoKS5ibGVuZGFibGU7CisgICAgICAgICB9CisgCisgICAgICAgICBpZiAoZm9ybWF0Q2Fw
cy5tdWx0aXNhbXBsZSkKK0BAIC0xNDgsMTIgKzE0OCw2IEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJl
Q2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAvLyBXZWJH
TCBhbGxvd3MgdW5zd2l6emxlZCBtYXBwaW5nIHdoZW4gc3dpenpsaW5nIGlzIG5vdCBhdmFpbGFi
bGUuIE5vIG5lZWQgdG8gY29udmVydC4KKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQor
LSAgICBpZiAoc3JjRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9S
TV9CTE9DSyAmJgorLSAgICAgICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpF
VEMyX1I4RzhCOF9VTk9STV9CTE9DSykKKy0gICAgeworLSAgICAgICAgLy8gRVRDMSBSR0IgJiBF
VEMyIFJHQiBhcmUgdGVjaG5pY2FsbHkgdGhlIHNhbWUuCistICAgICAgICByZXR1cm4gZmFsc2U7
CistICAgIH0KKyAgICAgcmV0dXJuIHNyY0Zvcm1hdElkICE9IGFjdHVhbEZvcm1hdElkOworIH0K
KyAKK0BAIC0xOTIsOCArMTg2LDcgQEAgdm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0
IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ld
LmluaXQoZGlzcGxheSwgZm9ybWF0SWQpOworICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
Y2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbbVBpeGVsRm9ybWF0VGFibGVbaV0u
bWV0YWxGb3JtYXRdOworIAorLSAgICAgICAgaWYgKCFtUGl4ZWxGb3JtYXRUYWJsZVtpXS5jYXBz
LT5kZXB0aFJlbmRlcmFibGUgJiYKKy0gICAgICAgICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5h
Y3R1YWxGb3JtYXRJZCAhPSBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5pbnRlbmRlZEZvcm1hdElkKQor
KyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVhbEZvcm1hdElkICE9IG1QaXhl
bEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCisgICAgICAgICB7CisgICAgICAgICAg
ICAgbVBpeGVsRm9ybWF0VGFibGVbaV0udGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBhbmdsZTo6R2V0
TG9hZEZ1bmN0aW9uc01hcCgKKyAgICAgICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
aW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCitAQCAtMjA0LDYgKzE5Nywx
OSBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1h
dFRhYmxlLAorICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sxXVtpXS5pbml0KGZvcm1hdElk
LCB0cnVlKTsKKyAgICAgfQorIAorKyAgICAvLyBOT1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBBTUQn
cyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJucyB6ZXJvIGR1cmluZyBz
YW1wbGluZzoKKysgICAgaWYgKGRpc3BsYXktPmdldFJlbmRlcmVyRGVzY3JpcHRpb24oKS5maW5k
KCJBTUQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgeworKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisrICAgICAgICBGb3JtYXQgJmZvcm1hdCA9Cisr
ICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQpXTsKKysgICAgICAgIGZvcm1hdC5hY3R1YWxG
b3JtYXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ7Cisr
ICAgICAgICBmb3JtYXQubWV0YWxGb3JtYXQgICAgICAgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdF9TdGVuY2lsODsKKysgICAgICAgIGZvcm1hdC5pbml0RnVuY3Rpb24gICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBudWxscHRy
OworKyAgICAgICAgZm9ybWF0LmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW01U
TFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4XTsKKysgICAgfQorKworICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorQEAgLTIzOSwxMCArMjQ1LDIzIEBA
IHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJs
ZSkKKyB7CisgICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxl
LCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCistICAg
ICAgICAgICAgICAgICAgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyt9
Cisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJ
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlc29sdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNvbG9yUmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgY2hhbm5lbHMpCisreworKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBm
aWx0ZXJhYmxlLCB3cml0YWJsZSwgYmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29s
b3JSZW5kZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgIGZhbHNlLCBwaXhlbEJ5dGVzLCBjaGFu
bmVscyk7CisgfQorIAorLXZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXQgaWQsCisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBmb3JtYXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKK0BAIC0yNTAs
NiArMjY5LDIwIEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJs
ZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
c29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlKQorK3sKKysgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFi
bGUsIGJsZW5kYWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworK30KKyt2b2lkIEZvcm1h
dFRhYmxlOjpzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmxlbmRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtdWx0aXNhbXBsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
b2x2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxz
KQorIHsKKyAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5maWx0ZXJhYmxlICAg
ICAgPSBmaWx0ZXJhYmxlOworICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLndy
aXRhYmxlICAgICAgICA9IHdyaXRhYmxlOworQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBHZW5l
cmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAg
bU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5ibGVuZGFibGUgICAgICAgPSBibGVuZGFi
bGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ubXVsdGlzYW1wbGUgICAg
ID0gbXVsdGlzYW1wbGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVz
b2x2ZSAgICAgICAgID0gcmVzb2x2ZTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICAgPSBwaXhlbEJ5dGVzOworKyAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBICA9IHBpeGVsQnl0ZXM7CisrICAgIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgICAgICAgID0gY2hhbm5lbHM7Cisr
ICAgIGlmIChjaGFubmVscyAhPSAwKQorKyAgICAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1Rh
YmxlW2lkXS5hbGlnbm1lbnQgPSBNQVgocGl4ZWxCeXRlcyAvIGNoYW5uZWxzLCAxVSk7CisgfQor
IAorIHZvaWQgRm9ybWF0VGFibGU6OnNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0IGZvcm1hdElkLCBib29sIGZpbHRlcmFibGUpCitAQCAtMjY1LDkgKzMwMywyNzQgQEAgdm9p
ZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwK
KyAgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgfQorIAorK3ZvaWQgRm9ybWF0VGFibGU6OmFk
anVzdEZvcm1hdENhcHNGb3JEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExQaXhlbEZvcm1hdCBpZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNp
T1MyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dXBwb3J0c2lPUzQpCisreworKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUKQorKworKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gbU5hdGl2
ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzOworKyAgICBOU1VJbnRlZ2VyIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhl
bEJ5dGVzTVNBQTsKKysgICAgTlNVSW50ZWdlciBhbGlnbm1lbnQgICAgICAgICAgICA9IG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50OworKworKy8vIE92ZXJyaWRlIHRo
ZSBjdXJyZW50IHBpeGVsQnl0ZXNSZW5kZXIKKysjICAgIGRlZmluZSBTUEVDSUZJQyhfcGl4ZWxG
b3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhl
bEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6
IDQ7IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVs
IGJ5dGVzIHJlbmRlciwgYW5kIE1TQUEKKysjICAgIGRlZmluZSBTUEVDSUZJQ19NU0FBKF9waXhl
bEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVzUmVuZGVyTVNBQSkgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBw
aXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNBQTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5
dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7
IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0
ZXNSZW5kZXIsIGFuZCBhbGlnbm1lbnQKKysjICAgIGRlZmluZSBTUEVDSUZJQ19BTElHTihfcGl4
ZWxGb3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyLCBfYWxpZ25tZW50KSBcCisrICAgICAgICBjYXNl
IF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5k
ZXI7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNB
QSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg
YWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIGJyZWFrCisrCisrICAgIGlmICghbU5hdGl2ZVBpeGVsRm9ybWF0
Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorKyAgICB7CisrICAgICAgICAvLyBPbiBBcHBsZUdQ
VUZhbWlseTQrLCB0aGVyZSBpcyBubyA0Ynl0ZSBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciByZW5k
ZXIgdGFyZ2V0cworKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQg
PyAxVSA6IDRVOworKyAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBNQVgobU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzLCBtaW5TaXplKTsKKysgICAgICAgIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gcGl4ZWxCeXRlc1JlbmRlcjsKKysgICAgICAgIGFsaWdubWVu
dCA9CisrICAgICAgICAgICAgc3VwcG9ydHNpT1M0ID8gTUFYKHBpeGVsQnl0ZXNSZW5kZXIgLyBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5uZWxzLCAxVSkgOiA0OworKyAgICB9
CisrCisrICAgIC8vIFRoaXMgbGlzdCBvZiB0YWJsZXMgc3RhcnRzIGZyb20gYSBnZW5lcmFsIG11
bHRpLXBsYXRmb3JtIHRhYmxlLAorKyAgICAvLyB0byBzcGVjaWZpYyBwbGF0Zm9ybXMgKGkuZS4g
aW9zMiwgaW9zNCkgaW5oZXJpdGluZyBmcm9tIHRoZSBwcmV2aW91cyB0YWJsZXMKKysKKysgICAg
Ly8gU3RhcnQgb2ZmIHdpdGggdGhlIGdlbmVyYWwgY2FzZQorKyAgICBzd2l0Y2ggKChOU1VJbnRl
Z2VyKWlkKQorKyAgICB7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVu
b3JtLCA0VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEExQkdSNVVub3JtLCA0
VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKysg
ICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDRVKTsKKysKKysgICAg
ICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworKyAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCA0VSk7CisrCisrICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworKyAgICAgICAg
U1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKysg
ICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRSR0JBOFNub3JtLCA0VSwgOFUpOwor
KyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUp
OworKworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDhVKTsK
KysgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisrCisr
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgOFUpOworKworKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgOFUpOworKworKyAgICAg
ICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2lsOCwgMVUpOworKyAgICB9CisrCisrICAg
IC8vIE92ZXJyaWRlIGJhc2VkIGlvczIKKysgICAgaWYgKHN1cHBvcnRzaU9TMikKKysgICAgewor
KyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVub3JtLCA4VSk7CisrICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDhVKTsKKysgICAgICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAgICAgICBT
UEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICAvLyBPdmVycmlkZSBiYXNlZCBvbiBpb3M0CisrICAgIGlmIChz
dXBwb3J0c2lPUzQpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRCNUc2
UjVVbm9ybSwgNlUsIDJVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJH
QkE4VW5vcm0sIDRVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm0sIDRVKTsKKysKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQkE4
VW5vcm1fc1JHQiwgNFUpOworKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdS
QThVbm9ybV9zUkdCLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRSR0JBOFNub3JtLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4
ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJ
R04oTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworKworKyAgICAgICAgICAgIFNQ
RUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0LCA0VSwgNFUpOworKworKyAg
ICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsIDRVLCA0
VSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICA9IHBpeGVsQnl0ZXNSZW5kZXI7CisrICAgIG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlc01TQUEgPSBwaXhlbEJ5dGVzUmVuZGVyTVNB
QTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9
IGFsaWdubWVudDsKKysKKysjICAgIHVuZGVmIFNQRUNJRklDCisrIyAgICB1bmRlZiBTUEVDSUZJ
Q19BTElHTgorKyMgICAgdW5kZWYgU1BFQ0lGSUNfTVNBQQorKyNlbmRpZgorKyAgICAvLyBtYWNP
UyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZvcm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhl
c2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQgdG8gY2hlY2sKKysgICAgLy8gdmFsaWQgTVJUIHNpemVz
IG9uIGlPUy4KKyt9CisrCisgdm9pZCBGb3JtYXRUYWJsZTo6aW5pdE5hdGl2ZUZvcm1hdENhcHMo
Y29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKKyB7CistICAgIGluaXROYXRpdmVGb3JtYXRDYXBz
QXV0b2dlbihkaXNwbGF5KTsKKysgICAgY29uc3QgYW5nbGU6OkZlYXR1cmVzTXRsICZmZWF0dXJl
c010bCA9IGRpc3BsYXktPmdldEZlYXR1cmVzKCk7CisrICAgIC8vIFNraXAgYXV0byByZXNvbHZl
IGlmIGVpdGhlciBoYXNEZXB0aC9TdGVuY2lsQXV0b1Jlc29sdmUgb3IgYWxsb3dNdWx0aXNhbXBs
ZVN0b3JlQW5kUmVzb2x2ZQorKyAgICAvLyBmZWF0dXJlIGFyZSBkaXNhYmxlZC4KKysgICAgYm9v
bCBzdXBwb3J0RGVwdGhBdXRvUmVzb2x2ZSA9IGZlYXR1cmVzTXRsLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVy
ZXNNdGwuYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZS5lbmFibGVkOworKyAgICBib29s
IHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJlc010bC5oYXNTdGVuY2lsQXV0b1Jl
c29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
ZWF0dXJlc010bC5hbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlLmVuYWJsZWQ7CisrICAg
IGJvb2wgc3VwcG9ydERlcHRoU3RlbmNpbEF1dG9SZXNvbHZlID0gc3VwcG9ydERlcHRoQXV0b1Jl
c29sdmUgJiYgc3VwcG9ydFN0ZW5jaWxBdXRvUmVzb2x2ZTsKKysKKysgICAgLy8gU291cmNlOiBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbWV0YWwvTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVz
LnBkZgorKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrCisrICAgIC8vICAgICAgICAgICAgfCAg
Zm9ybWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwg
IGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfCBieXRlc1BlckNoYW5uZWwgfCBjaGFubmVsCisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBOFVub3JtLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAgICAgICAgIGZhbHNlLCAgICAgICBmYWxzZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAxVSwgMVUpOworKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAg
dHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFI4U25vcm0sICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgyLCAxKSwgIHRydWUsICAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VW5vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5
KDEsIDEpLCAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHOFVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
RzhTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMiwgMSksICB0
cnVlLCAgMlUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVbm9y
bSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNub3Jt
LCAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1
ZSwgIDRVLCAyVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZVbm9y
bSwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVl
LCAgOFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNub3Jt
LCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUs
ICA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2RmxvYXQs
ICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgOFUsIDRV
KTsKKysKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAg
ICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
YmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRSR0JBOFVub3JtLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrICAg
IHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVub3JtX3NSR0IsICAgICB0cnVlLCAg
ICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwgICAgICB0cnVlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdC
QThTbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKysgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRy
dWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
ICAgNFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1f
c1JHQiwgICAgIHRydWUsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDIp
LCAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrCisrICAgIC8vICAgICAgICAg
ICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAg
ICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2RmxvYXQsICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgIDJVLCAxVSk7Cisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgNFUs
IDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIzMkZsb2F0LCAgICBkaXNw
bGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgICAgICB0cnVlLCAgICA0VSwgMVUpOworKworKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJH
RVRfT1NfTUFDQ0FUQUxZU1QKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAg
ICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11
bHRpc2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIGZh
bHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRydWUs
ICAyVSwgM1UpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwg
ICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCA0
VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgICAgICB0
cnVlLCAgICAgICAgICAgIGZhbHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAg
ICB0cnVlLCAgICAgIHRydWUsICAyVSwgNFUpOworKyNlbmRpZgorKworKyAgICAvLyAgICAgICAg
ICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRh
YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlIHwgIG11bHRp
c2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgICAgICBmYWxzZSwgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IHRydWUsICAgICAgdHJ1ZSwgIDRVLCAzVSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9y
bWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgbXVs
dGlzYW1wbGUgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAg
ICAgIHwgY29sb3JSZW5kZXJhYmxlICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWls
eSgxKSwgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0
c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAz
VSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICB8IGZp
bHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSAgfCAgbXVsdGlzYW1wbGUgICAg
ICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAor
KyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAg
ICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAg
ICAgICB0cnVlLCAyVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2
U2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4VWludCwgICAgICAg
ZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4U2ludCwgICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UjMyVWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAg
ICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEs
MSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UjMyU2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAg
ZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBm
YWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkcxNlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2Us
ICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICB0cnVlLCA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNp
bnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwg
MlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVaW50LCAgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThTaW50LCAgICAgZmFsc2UsICAgICAgICAg
ICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UkczMlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxz
ZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQTE2VWludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2U2lu
dCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgNFUp
OworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTMyVWludCwgICAgZmFsc2Us
ICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCAxNlUsIDRVKTsKKysg
ICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMlNpbnQsICAgIGZhbHNlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMTZVLCA0VSk7CisrCisrICAg
IC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxl
ICAgICAgICAgICAgICAgICAgICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgICAgICAgICAg
ICAgICAgICAgICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMkZsb2F0LCAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLDEpLCAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICAgICAgICB0cnVlLCAgOFUsIDJVKTsK
KysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMkZsb2F0LCAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVG
YW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAg
ICAgdHJ1ZSwgIDE2VSwgNFUpOworKworKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAgICAgICAgICAg
ICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwgZGVwdGhSZW5k
ZXJhYmxlICAgICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
c3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICAgICB0cnVlLCAgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFN0
ZW5jaWw4LCAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBmYWxzZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICAx
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0
ZW5jaWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFs
c2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxB
dXRvUmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwgIDhVLCAyVSk7
CisrLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdERlcHRoMTZVbm9ybSwgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBw
b3J0RGVwdGhBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAg
IHRydWUsICAyVSwgMVUpOworKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5j
aWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFsc2Us
ICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRv
UmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNF
aXRoZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKysKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCQzFfUkdCQSwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMyX1JHQkEsIHRydWUpOworKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDMl9SR0JBX3NSR0IsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBLCB0
cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdC
QV9zUkdCLCB0cnVlKTsKKysjZWxzZQorKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfMkJQUF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUCwgdHJ1ZSk7
CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRC
UFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UFZSVENfUkdCQV8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzRCUFBf
c1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
RUFDX1IxMVVub3JtLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRFQUNfUjExU25vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0sIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisrICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JHQkE4X3NSR0IsIHRy
dWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdC
OCwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRD
Ml9SR0I4X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEVUQzJfUkdCOEExLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjhBMV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9zUkdCLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdC
LCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzZ4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRBU1RDXzZ4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiwg
dHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18x
MHg2X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwgdHJ1ZSk7CisrICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9zUkdCLCB0cnVl
KTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9M
RFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFT
VENfNXg0X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ181eDVfTERSLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERSLCB0cnVlKTsKKysgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9MRFIsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg4X0xE
UiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNU
Q18xMHg1X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIsIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfTERSLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiwgdHJ1ZSk7CisrI2VuZGlmCisrICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorIH0KKyAKKyB9ICAv
LyBuYW1lc3BhY2UgbXRsCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX210bF91dGlscy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZGJjMTA5OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9nbHNsYW5nX210bF91dGlscy5oCitAQCAtMCwwICsxLDU3IEBACisrLy8KKysvLyAg
bXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKKysvLyAgQU5HTEUKKysvLworKy8vICBDcmVhdGVkIGJ5
IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKysvLworKworKyNpZm5kZWYgbXRsX2dsc2xh
bmdfbXRsX3V0aWxzX2gKKysjZGVmaW5lIG10bF9nbHNsYW5nX210bF91dGlsc19oCisrI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJv
Z3JhbUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVy
X3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24u
aCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sKKytzdHJ1Y3QgU2Ft
cGxlckJpbmRpbmcKKyt7CisrICAgIHVpbnQzMl90IHRleHR1cmVCaW5kaW5nID0gMDsKKysgICAg
dWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOworK307CisrCisrc3RydWN0IFRyYW5zbGF0ZWRT
aGFkZXJJbmZvCisreworKyAgICB2b2lkIHJlc2V0KCk7CisrICAgIC8vIFRyYW5zbGF0ZWQgTWV0
YWwgc291cmNlIGNvZGUKKysgICAgc3RkOjpzdHJpbmcgbWV0YWxTaGFkZXJTb3VyY2U7CisrICAg
IC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92ZS4gVXNlZCBi
eSBQcm9ncmFtTXRsLgorKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJy
YXJ5OworKyAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1wbGVyQmluZGlu
Z3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKKysgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01h
eEdMVUJPQmluZGluZ3M+IGFjdHVhbFVCT0JpbmRpbmdzOworKyAgICBzdGQ6OmFycmF5PHVpbnQz
Ml90LCBrTWF4U2hhZGVyWEZCcz4gYWN0dWFsWEZCQmluZGluZ3M7CisrICAgIGJvb2wgaGFzVUJP
QXJndW1lbnRCdWZmZXI7CisrfTsKKyt2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6
UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNM
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJj
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFj
ZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5m
b091dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0
cmluZz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4
ZmJCdWZmZXJDb3VudCk7CisrCisrLy8gR2V0IGVxdWl2YWxlbnQgc2hhZG93IGNvbXBhcmUgbW9k
ZSB0aGF0IGlzIHVzZWQgaW4gdHJhbnNsYXRlZCBtc2wgc2hhZGVyLgorK3VpbnQgTXNsR2V0U2hh
ZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrCisrI2VuZGlmIC8qIG10bF9n
bHNsYW5nX210bF91dGlsc19oICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi4zNWY1YmVmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCitAQCAtMCwwICsxLDI0MSBAQAor
Ky8vCisrLy8gIG1nbF9nbHNsYW5nX210bF91dGlscy5tCisrLy8gIEFOR0xFIChzdGF0aWMpCisr
Ly8KKysvLyAgQ3JlYXRlZCBieSBLeWxlIFBpZGRpbmd0b24gb24gMTEvMTAvMjAuCisrLy8KKysK
KysjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorKworK25hbWVzcGFjZSByeAorK3sK
KytuYW1lc3BhY2UgbXRsCisreworKworK3ZvaWQgVHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0
KCkKKyt7CisrICAgIG1ldGFsU2hhZGVyU291cmNlLmNsZWFyKCk7CisrICAgIG1ldGFsTGlicmFy
eSAgICAgICAgID0gbmlsOworKyAgICBoYXNVQk9Bcmd1bWVudEJ1ZmZlciA9IGZhbHNlOworKyAg
ICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOiBhY3R1YWxTYW1wbGVyQmluZGlu
Z3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcudGV4dHVyZUJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJTYW1wbGVyczsKKysgICAgfQorKworKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDog
YWN0dWFsVUJPQmluZGluZ3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJCdWZmZXJzOworKyAgICB9CisrCisrICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBh
Y3R1YWxYRkJCaW5kaW5ncykKKysgICAgeworKyAgICAgICAgYmluZGluZyA9IG10bDo6a01heFNo
YWRlckJ1ZmZlcnM7CisrICAgIH0KKyt9CisrCisrLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9u
dCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9y
bSBvZgorKy8vIHNsb3Q6Y291bnQgcGFpcikKKyt1c2luZyBPcmlnaW5hbFNhbXBsZXJCaW5kaW5n
TWFwID0KKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjxz
dGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4+OworKworK2Jvb2wgTWFwcGVkU2FtcGxlck5h
bWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisreworKyAgICByZXR1cm4gb3JpZ2luYWxOYW1lLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6
bnBvczsKKyt9CisrCisrc3RhdGljIHN0ZDo6c3RyaW5nIE1TTEdldE1hcHBlZFNhbXBsZXJOYW1l
KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCisreworKyAgICBzdGQ6OnN0cmluZyBz
YW1wbGVyTmFtZSA9IG9yaWdpbmFsTmFtZTsKKysKKysgICAgLy8gU2FtcGxlcnMgaW4gc3RydWN0
cyBhcmUgZXh0cmFjdGVkLgorKyAgICBzdGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwg
c2FtcGxlck5hbWUuZW5kKCksICcuJywgJ18nKTsKKysKKysgICAgLy8gUmVtb3ZlIGFycmF5IGVs
ZW1lbnRzCisrICAgIGF1dG8gb3V0ID0gc2FtcGxlck5hbWUuYmVnaW4oKTsKKysgICAgZm9yIChh
dXRvIGluID0gc2FtcGxlck5hbWUuYmVnaW4oKTsgaW4gIT0gc2FtcGxlck5hbWUuZW5kKCk7IGlu
KyspCisrICAgIHsKKysgICAgICAgIGlmICgqaW4gPT0gJ1snKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHdoaWxlICgqaW4gIT0gJ10nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaW4rKzsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGluICE9IHNhbXBsZXJOYW1lLmVuZCgp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgKm91dCsrID0gKmluOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHNhbXBsZXJOYW1lLmVyYXNlKG91dCwgc2FtcGxlck5hbWUuZW5kKCkpOworKworKyAgICBpZiAo
TWFwcGVkU2FtcGxlck5hbWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KG9yaWdpbmFsTmFtZSkpCisr
ICAgIHsKKysgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXgg
KyBzYW1wbGVyTmFtZTsKKysgICAgfQorKworKyAgICByZXR1cm4gc2FtcGxlck5hbWU7CisrfQor
KworK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dy
YW1TdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtl
ZFJlc291cmNlcyAmcmVzb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFk
ZXJNYXA8c3RkOjpzdHJpbmc+ICpzaGFkZXJTb3VyY2VzT3V0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0KQorK3sKKysgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIGdsOjpTaGFkZXIgKmdsU2hhZGVy
ICAgICAgICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7
CisrICAgICAgICAoKnNoYWRlclNvdXJjZXNPdXQpW3NoYWRlclR5cGVdID0gZ2xTaGFkZXIgPyBn
bFNoYWRlci0+Z2V0VHJhbnNsYXRlZFNvdXJjZSgpIDogIiI7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFsUmVm
bGVjdGlvbiAqcmVmbGVjdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+
ICZzdHJ1Y3RTYW1wbGVycywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8U2FtcGxlckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGlu
Z3MpCisreworKyAgICBmb3IgKGF1dG8gJnNhbXBsZXIgOiByZWZsZWN0aW9uLT5nZXRTYW1wbGVy
QmluZGluZ3MoKSkKKysgICAgeworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgICAg
ICAgICAgPSBzYW1wbGVyLmZpcnN0OworKyAgICAgICAgY29uc3QgdWludDMyX3QgYWN0dWFsU2Ft
cGxlclNsb3QgPSAodWludDMyX3QpcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJpbmRpbmcobmFtZSk7
CisrICAgICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdCly
ZWZsZWN0aW9uLT5nZXRUZXh0dXJlQmluZGluZyhuYW1lKTsKKysKKysgICAgICAgIC8vIEFzc2ln
biBzZXF1ZW50aWFsIGluZGV4IGZvciBzdWJzZXF1ZW50IGFycmF5IGVsZW1lbnRzCisrICAgICAg
ICBjb25zdCBib29sIHN0cnVjdFNhbXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9
IHN0cnVjdFNhbXBsZXJzLmVuZCgpOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWFwcGVk
TmFtZSA9CisrICAgICAgICAgICAgc3RydWN0U2FtcGxlciA/IG5hbWUgOiBNU0xHZXRNYXBwZWRT
YW1wbGVyTmFtZShzaDo6a1VzZXJEZWZpbmVkTmFtZVByZWZpeCArIG5hbWUpOworKyAgICAgICAg
YXV0byBvcmlnaW5hbCA9IG9yaWdpbmFsQmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKysgICAg
ICAgIGlmIChvcmlnaW5hbCAhPSBvcmlnaW5hbEJpbmRpbmdzLmVuZCgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0KKysgICAgICAgICAgICAgICAgb3JpZ2luYWxCaW5k
aW5ncy5hdChtYXBwZWROYW1lKTsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50VGV4dHVy
ZVNsb3QgPSBhY3R1YWxUZXh0dXJlU2xvdDsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50
U2FtcGxlclNsb3QgPSBhY3R1YWxTYW1wbGVyU2xvdDsKKysgICAgICAgICAgICBmb3IgKGNvbnN0
IHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ICZvcmlnaW5hbEJpbmRpbmdSYW5nZSA6IHJl
c09yaWduYWxCaW5kaW5ncykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFNhbXBs
ZXJCaW5kaW5nICZhY3R1YWxCaW5kaW5nID0gYmluZGluZ3MtPmF0KG9yaWdpbmFsQmluZGluZ1Jh
bmdlLmZpcnN0KTsKKysgICAgICAgICAgICAgICAgYWN0dWFsQmluZGluZy50ZXh0dXJlQmluZGlu
ZyAgPSBjdXJyZW50VGV4dHVyZVNsb3Q7CisrICAgICAgICAgICAgICAgIGFjdHVhbEJpbmRpbmcu
c2FtcGxlckJpbmRpbmcgID0gY3VycmVudFNhbXBsZXJTbG90OworKworKyAgICAgICAgICAgICAg
ICBjdXJyZW50VGV4dHVyZVNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uuc2Vjb25kOworKyAg
ICAgICAgICAgICAgICBjdXJyZW50U2FtcGxlclNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uu
c2Vjb25kOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK30KKysKKytzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIoZ2w6OlNo
YWRlciAqc2hhZGVyKQorK3sKKysgICAgU2hhZGVyTXRsICpzaGFkZXJJbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PFNoYWRlck10bCAqPihzaGFkZXItPmdldEltcGxlbWVudGF0aW9uKCkpOworKyAgICBy
ZXR1cm4gc2hhZGVySW5zdGFuY2UtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKyt9
CisrCisrc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9tQ29t
cGlsZXIoZ2w6OkNvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSB0eXBlKQorK3sK
KysgICAgYXV0byBjb21waWxlckluc3RhbmNlICAgICAgPSBjb21waWxlci0+Z2V0SW5zdGFuY2Uo
dHlwZSk7CisrICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6
OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5kbGUoKSk7CisrICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKysgICAgY29tcGlsZXItPnB1dEluc3RhbmNlKHN0ZDo6bW92ZShjb21waWxlckluc3Rh
bmNlKSk7CisrICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb24oKTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNMKGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZh
cmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5mb091
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmlu
Zz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJC
dWZmZXJDb3VudCkKKyt7CisrICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVy
IGJpbmRpbmdzIGdlbmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJl
bWFwLgorKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9P
cmlnaW5hbEJpbmRpbmdzOworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxv
Y2s+ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOworKyAgICBmb3Ig
KHVpbnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySWR4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmJsb2Nr
ID0gYmxvY2tzW2J1ZmZlcklkeF07CisrICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3Mu
Y291bnQoYmxvY2subWFwcGVkTmFtZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgdWJvT3Jp
Z2luYWxCaW5kaW5nc1tibG9jay5tYXBwZWROYW1lXSA9IGJ1ZmZlcklkeDsKKysgICAgICAgIH0K
KysgICAgfQorKyAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCBzYW1wbGVyIGJpbmRpbmdzIHByb2R1
Y2VkIGJ5IGZyb250IGVuZC4KKysgICAgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5h
bFNhbXBsZXJCaW5kaW5nczsKKysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlNhbXBsZXJCaW5k
aW5nPiAmc2FtcGxlckJpbmRpbmdzID0gcHJvZ3JhbVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygp
OworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybT4gJnVuaWZvcm1zICAg
ICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybXMoKTsKKysKKysgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PHN0ZDo6c3RyaW5nPiBzdHJ1Y3RTYW1wbGVycyA9IHt9OworKworKyAgICBmb3IgKHVp
bnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5z
aXplKCk7ICsrdGV4dHVyZUluZGV4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6U2FtcGxl
ckJpbmRpbmcgJnNhbXBsZXJCaW5kaW5nID0gc2FtcGxlckJpbmRpbmdzW3RleHR1cmVJbmRleF07
CisrICAgICAgICB1aW50MzJfdCB1bmlmb3JtSW5kZXggPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9y
bUluZGV4RnJvbVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5kZXgpOworKyAgICAgICAgY29uc3QgZ2w6
OkxpbmtlZFVuaWZvcm0gJnNhbXBsZXJVbmlmb3JtID0gdW5pZm9ybXNbdW5pZm9ybUluZGV4XTsK
KysgICAgICAgIGJvb2wgaXNTYW1wbGVySW5TdHJ1Y3QgICAgICAgID0gc2FtcGxlclVuaWZvcm0u
bmFtZS5maW5kKCcuJykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlzU2FtcGxlckluU3RydWN0CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNh
bXBsZXJVbmlmb3JtLm5hbWUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNhbXBsZXJVbmlmb3JtLm1hcHBlZE5h
bWUpOworKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcmVmaXhlZCBsYXRlciBzZXBlcmF0
ZWx5CisrICAgICAgICBpZiAoaXNTYW1wbGVySW5TdHJ1Y3QpCisrICAgICAgICAgICAgc3RydWN0
U2FtcGxlcnMuaW5zZXJ0KG1hcHBlZFNhbXBsZXJOYW1lKTsKKysgICAgICAgIG9yaWdpbmFsU2Ft
cGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2soCisrICAgICAgICAgICAg
e3RleHR1cmVJbmRleCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNhbXBsZXJCaW5kaW5nLmJvdW5k
VGV4dHVyZVVuaXRzLnNpemUoKSl9KTsKKysgICAgfQorKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBl
IHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50
fSkKKysgICAgeworKyAgICAgICAgKCptc2xDb2RlT3V0KVt0eXBlXSAgICAgICAgICAgICAgICAg
ICAgICAgICA9IHNoYWRlclNvdXJjZXNbdHlwZV07CisrICAgICAgICAoKm1zbFNoYWRlckluZm9P
dXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVyU291cmNlc1t0eXBlXTsKKysgICAg
ICAgIGdsOjpTaGFkZXIgKnNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgID0gcHJvZ3JhbVN0
YXRlLmdldEF0dGFjaGVkU2hhZGVyKHR5cGUpOworKyAgICAgICAgc2g6OlRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24gKnJlZmxlY3Rpb24gPSBnZXRSZWZsZWN0aW9uRnJvbVNoYWRlcihzaGFkZXIp
OworKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50
cworKyAgICAgICAgaWYgKG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLnNpemUoKSA+IDApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MocmVmbGVjdGlv
biwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJzLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hdCh0eXBlKS5h
Y3R1YWxTYW1wbGVyQmluZGluZ3MpOworKyAgICAgICAgfQorKyAgICAgICAgcmVmbGVjdGlvbi0+
cmVzZXQoKTsKKysgICAgfQorKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisr
fQorKworK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdM
ZW51bSBmdW5jKQorK3sKKysgICAgLy8gU2VlIFNwaXJ2VG9Nc2xDb21waWxlcjo6ZW1pdF9oZWFk
ZXIoKQorKyAgICBpZiAobW9kZSA9PSBHTF9OT05FKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
MDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoZnVuYykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIEdMX0xFU1M6CisrICAgICAgICAgICAgICAgIHJl
dHVybiAxOworKyAgICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMjsKKysgICAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6CisrICAgICAgICAgICAgICAg
IHJldHVybiAzOworKyAgICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNDsKKysgICAgICAgICAgICBjYXNlIEdMX05FVkVSOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNTsKKysgICAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDY7CisrICAgICAgICAgICAgY2FzZSBHTF9FUVVBTDoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDc7CisrICAgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKysgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrfSAgLy8gbmFtZXNwYWNlIG10bAorK30gIC8vIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5o
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgKK2luZGV4
IDEzYzk3ZWUuLmMwMjQ0NmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX3V0aWxzLmgKK0BAIC0xNCwzMyArMTQsMTEgQEAKKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9jb21tb24uaCIKKy0KKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCisgbmFtZXNwYWNlIHJ4CisgeworIG5hbWVzcGFj
ZSBtdGwKKyB7CistCistc3RydWN0IFNhbXBsZXJCaW5kaW5nCisteworLSAgICB1aW50MzJfdCB0
ZXh0dXJlQmluZGluZyA9IDA7CistICAgIHVpbnQzMl90IHNhbXBsZXJCaW5kaW5nID0gMDsKKy19
OworLQorLXN0cnVjdCBUcmFuc2xhdGVkU2hhZGVySW5mbworLXsKKy0gICAgdm9pZCByZXNldCgp
OworLQorLSAgICAvLyBUcmFuc2xhdGVkIE1ldGFsIHNvdXJjZSBjb2RlCistICAgIHN0ZDo6c3Ry
aW5nIG1ldGFsU2hhZGVyU291cmNlOworLSAgICAvLyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZy
b20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJvZ3JhbU10bC4KKy0gICAgQXV0b09iakNQ
dHI8aWQ8TVRMTGlicmFyeT4+IG1ldGFsTGlicmFyeTsKKy0KKy0gICAgc3RkOjphcnJheTxTYW1w
bGVyQmluZGluZywga01heEdMU2FtcGxlckJpbmRpbmdzPiBhY3R1YWxTYW1wbGVyQmluZGluZ3M7
CistICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1YWxVQk9C
aW5kaW5nczsKKy0gICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVh
bFhGQkJpbmRpbmdzOworLSAgICBib29sIGhhc1VCT0FyZ3VtZW50QnVmZmVyOworLX07CistCisg
Ly8gLSBzaGFkZXJTb3VyY2VzT3V0IGlzIHJlc3VsdCBHTFNMIGNvZGUgcGVyIHNoYWRlciBzdGFn
ZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9mZi4KKyAvLyAtIHhmYk9ubHlTaGFkZXJT
b3VyY2VPdXQgd2lsbCBjb250YWluIHZlcnRleCBzaGFkZXIncyBHTFNMIGNvZGUgd2hlbiBYRkIg
ZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KKyB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29u
c3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorQEAgLTU3LDYgKzM1LDEzIEBAIGFu
Z2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRl
ck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9y
PHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOworIAorK2FuZ2xlOjpSZXN1bHQgTVNMR2V0U2hh
ZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFn
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMg
JmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAmc2hhZGVyU291cmNlcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOwor
KworIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBjb2RlIHRvIE1ldGFsIHNoYWRlciBzb3VyY2Ug
Y29kZS4KKyAvLyAtIHNwaXJ2U2hhZGVyQ29kZSBpcyBTUElSViBjb2RlIHBlciBzaGFkZXIgc3Rh
Z2Ugd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvZmYuCisgLy8gLSB4ZmJPbmx5U3BpcnZD
b2RlIGlzICB2ZXJ0ZXggc2hhZGVyJ3MgU1BJUlYgY29kZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMg
dHVybmVkIG9uLgorQEAgLTcwLDYgKzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9N
c2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNoYWRlckluZm8gKm1zbFhmYk9ubHlT
aGFkZXJJbmZvT3V0IC8qKiBudWxsYWJsZSAqLyk7CisgCisrdm9pZCBNU0xHZXRTaGFkZXJTb3Vy
Y2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRl
clNvdXJjZXNPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJmYWNl
VmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpOworKworK2FuZ2xlOjpSZXN1bHQg
R2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFk
ZXJTb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJ
bnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNo
YWRlckluZm9PdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8
c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgeGZiQnVmZmVyQ291bnQpOworKworKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21w
YXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KKyt1aW50IE1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYyk7Cisr
CisgfSAgLy8gbmFtZXNwYWNlIG10bAorIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbSBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQoraW5kZXggY2Fh
MGU1Ni4uNGNmNzE3YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX3V0aWxzLm1tCitAQCAtMTMsNiArMTMsNyBAQAorICNpbmNsdWRlIDxzcGlydl9t
c2wuaHBwPgorIAorICNpbmNsdWRlICJjb21tb24vYXBwbGVfcGxhdGZvcm1fdXRpbHMuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKK0BAIC0yMiwxMiArMjMs
MTMgQEAKKyB7CisgbmFtZXNwYWNlCisgeworLQorIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFu
Z1RleHR1cmVEZXNjU2V0ICAgICAgICAgICAgICA9IDA7CisgY29uc3RleHByIHVpbnQzMl90IGtH
bHNsYW5nRGVmYXVsdFVuaWZvcm1BbmRYZmJEZXNjU2V0ID0gMTsKKyBjb25zdGV4cHIgdWludDMy
X3Qga0dsc2xhbmdEcml2ZXJVbmlmb3Jtc0Rlc2NTZXQgICAgICAgPSAyOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291cmNlRGVzY1NldCAgICAgICA9IDM7CisgCisrY29u
c3RleHByIGNoYXIga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNWYXJOYW1lW10gPSAiQU5HTEVT
aGFkb3dDb21wYXJlTW9kZXMiOworKworIC8vIE9yaWdpbmFsIG1hcHBpbmcgb2YgZnJvbnQgZW5k
IGZyb20gc2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNhbXBsZXIgc2xvdHMgKGluIGZvcm0gb2YK
KyAvLyBzbG90OmNvdW50IHBhaXIpCisgdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9
CitAQCAtNTYsOSArNTgsMTMgQEAgdm9pZCBSZXNldEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5m
byhHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmYKKyAgICAgc3RhdGlj
X2Fzc2VydChrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggIT0gMCwgImtEcml2ZXJVbmlmb3Jt
c0JpbmRpbmdJbmRleCBtdXN0IG5vdCBiZSAwIik7CisgfQorIAorKworIEdsc2xhbmdTb3VyY2VP
cHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMoKQorIHsKKyAgICAgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMgb3B0aW9uczsKKysgICAgb3B0aW9ucy5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2sgPSB0cnVl
OworKyAgICAvLyBXZSBjYW4gZWFybHkgb3V0IGluIHRoZSBNU0wgb25jZSB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgd3JpdHRlbgorKyAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1
cm4gPSB0cnVlOworICAgICByZXR1cm4gb3B0aW9uczsKKyB9CisgCitAQCAtNzksOCArODUsOCBA
QCBHbHNsYW5nU291cmNlT3B0aW9ucyBDcmVhdGVTb3VyY2VPcHRpb25zKCkKKyB2b2lkIEJpbmRC
dWZmZXJzKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICBjb25zdCBzcGlydl9jcm9zczo6U21hbGxWZWN0b3I8c3BpcnZfY3Jvc3M6OlJlc291cmNl
PiAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKKy0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmlu
ZGluZ3MsCisrICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorKyAgICAgICAgICAgICAgICAgY29u
c3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5n
cywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRp
bmdzPiAqdWJvQmluZGluZ3NSZW1hcE91dCwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIGtNYXhTaGFkZXJYRkJzPiAqeGZiQmluZGluZ1JlbWFwT3V0LAorICAgICAgICAg
ICAgICAgICAgYm9vbCAqdWJvQXJndW1lbnRCdWZmZXJVc2VkKQorQEAgLTI1MywzMCArMjU5LDUw
IEBAIHZvaWQgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MoY29uc3Qgc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMICZjb21waWxlck1zbCwKKyAgICAgfQorIH0KKyAKKy1zdGQ6OnN0cmluZyBQb3N0
UHJvY2Vzc1RyYW5zbGF0ZWRNc2woY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRTb3VyY2Up
Cisrc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1w
bGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKKyB7CisrICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZTsKKysgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgeworKyAgICAg
ICAgLy8gQWRkIEFOR0xFU2hhZG93Q29tcGFyZU1vZGVzIHZhcmlhYmxlIHRvIG1haW4oKSwgV2Ug
bmVlZCB0byBhZGQgaGVyZSBiZWNhdXNlIGl0IGlzIHRoZQorKyAgICAgICAgLy8gb25seSB3YXkg
d2l0aG91dCBtb2RpZnlpbmcgc3BpcnYtY3Jvc3MuCisrICAgICAgICBzdGQ6OnJlZ2V4IG1haW5E
ZWNsYXJlUmVnZXgoCisrICAgICAgICAgICAgUiIoKCh2ZXJ0ZXh8ZnJhZ21lbnR8a2VybmVsKVxz
K1tfYS16QS1aMC05PD5dK1xzK21haW5bXlwoXSpcKCkpIik7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiJDFjb25zdGFudCB1bmlmb3Jt
PHVpbnQ+ICoiKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUgKyAiW1tidWZmZXIoIiArCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIoa1NoYWRvd1NhbXBs
ZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXgpICsgIildXSwgIjsKKysgICAgICAgIHNvdXJjZSA9
IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBtYWluRGVjbGFyZVJlZ2V4LCBt
YWluRGVjbGFyZVJlcGxhY2VTdHIpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgc291cmNlID0gdHJhbnNsYXRlZFNvdXJjZTsKKysgICAgfQorKworICAgICAvLyBBZGQgZnVu
Y3Rpb25fY29uc3RhbnQgYXR0cmlidXRlIHRvIGdsX1NhbXBsZU1hc2suCisgICAgIC8vIEV2ZW4g
dGhvdWdoIHRoaXMgdmFyeWluZyBpcyBvbmx5IHVzZWQgd2hlbiBBTkdMRUNvdmVyYWdlTWFza0Vu
YWJsZWQgaXMgdHJ1ZSwKKyAgICAgLy8gdGhlIHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNzaWduIGZ1
bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBpdCB3b24ndCBiZSBkZWFkLWNv
ZGUKKyAgICAgLy8gcmVtb3ZlZCB3aGVuIEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZD1mYWxzZS4K
KyAgICAgc3RkOjpzdHJpbmcgc2FtcGxlTWFza1JlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiW1tz
YW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQoIikgKworLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ICsgIildXSI7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRy
YW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpICsKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKV1dIjsKKyAKKyAgICAgLy8gVGhp
cyByZXBsYWNlcyAiZ2xfU2FtcGxlTWFzayBbW3NhbXBsZV9tYXNrXV0iCisgICAgIC8vICAgICAg
ICAgIHdpdGggImdsX1NhbXBsZU1hc2sgW1tzYW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQo
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkKV1dIgorICAgICBzdGQ6OnJlZ2V4IHNhbXBsZU1hc2tE
ZWNsYXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSkiKTsKKy0gICAg
cmV0dXJuIHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBzYW1wbGVNYXNrRGVj
bGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFjZVN0cik7CisrICAgIHJldHVybiBzdGQ6OnJlZ2V4
X3JlcGxhY2Uoc291cmNlLCBzYW1wbGVNYXNrRGVjbGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFj
ZVN0cik7CisgfQorIAorIC8vIEN1c3RvbWl6ZWQgc3BpcnYtY3Jvc3MgY29tcGlsZXIKKyBjbGFz
cyBTcGlydlRvTXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCisg
eworICAgcHVibGljOgorLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMy
X3Q+ICYmc3ByaXYpIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorKyAgICBT
cGlydlRvTXNsQ29tcGlsZXIoQ29udGV4dCAqY29udGV4dCwgc3RkOjp2ZWN0b3I8dWludDMyX3Q+
ICYmc3ByaXYpCisrICAgICAgICA6IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTChzcHJpdiksIG1D
b250ZXh0KGNvbnRleHQpCisrICAgIHt9CisgCisgICAgIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5n
bGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywK
KysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgT3Jp
Z2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICptc2xTaGFkZXJJbmZvT3V0KQorICAg
ICB7CitAQCAtMzI4LDggKzM1NCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCisgICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5ncyBm
b3IgdGV4dHVyZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKKyAgICAgICAg
ICAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIGFyZ3VtZW50IGJ1ZmZlci4KKyAgICAgICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xz
bGFuZ1RleHR1cmVEZXNjU2V0KTsKKy0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJN
U0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldCgKKy0gICAgICAgICAgICAgICAga0dsc2xh
bmdEZWZhdWx0VW5pZm9ybUFuZFhmYkRlc2NTZXQpOworKyAgICAgICAgICAgIHNwaXJ2X2Nyb3Nz
OjpDb21waWxlck1TTDo6YWRkX2Rpc2NyZXRlX2Rlc2NyaXB0b3Jfc2V0KGtHbHNsYW5nRGVmYXVs
dFVuaWZvcm1BbmRYZmJEZXNjU2V0KTsKKyAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGls
ZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1z
RGVzY1NldCk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCitAQCAtMzQwLDIxICszNjUsNzMy
IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgCisgICAgICAg
ICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21wT3B0KTsKKyAK
KysgICAgICAgIGFkZEJ1aWx0SW5SZXNvdXJjZXMoKTsKKysgICAgICAgIGFuYWx5emVTaGFkZXJW
YXJpYWJsZXMoKTsKKysKKyAgICAgICAgIC8vIEFjdHVhbCBjb21waWxhdGlvbgorICAgICAgICAg
bXNsU2hhZGVySW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQorLSAgICAgICAgICAgIFBvc3RQ
cm9jZXNzVHJhbnNsYXRlZE1zbChzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7
CisrICAgICAgICAgICAgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKG1IYXNEZXB0aFNhbXBsZXIs
IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgpKTsKKyAKKyAgICAgICAgIC8vIFJl
dHJpZXZlIGF1dG9tYXRpYyB0ZXh0dXJlIHNsb3QgYXNzaWdubWVudHMKKyAgICAgICAgIEdldEFz
c2lnbmVkU2FtcGxlckJpbmRpbmdzKCp0aGlzLCBvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1
YWxTYW1wbGVyQmluZGluZ3MpOworICAgICB9CisrCisrICBwcml2YXRlOgorKyAgICAvLyBPdmVy
cmlkZSBDb21waWxlck1TTAorKyAgICB2b2lkIGVtaXRfaGVhZGVyKCkgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjplbWl0X2hlYWRlcigpOworKyAg
ICAgICAgaWYgKCFtSGFzRGVwdGhTYW1wbGVyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybjsKKysgICAgICAgIH0KKysgICAgICAgIC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNl
IGlzc3VlczoKKysgICAgICAgIC8vIC0gc3ByaXZfY3Jvc3MgYWx3YXlzIHRyYW5zbGF0ZXMgc2hh
ZG93IHRleHR1cmUncyBzYW1wbGluZyB0byBzYW1wbGVfY29tcGFyZSgpIGFuZCBkb2Vzbid0Cisr
ICAgICAgICAvLyB0YWtlIGludG8gYWNjb3VudCBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERT1HTF9O
T05FLgorKyAgICAgICAgLy8gLSBvbiBtYWNPUywgZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBh
cmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHNhbXBsZV9jb21wYXJlKCkuCisrICAgICAgICAv
LyAtIG9uIGRldmljZXMgcHJpb3IgdG8gaU9TIEdQVSBmYW1pbHkgMywgY2hhbmdpbmcgc2FtcGxl
cidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlciBpcworKyAgICAgICAgLy8gbm90IHN1cHBv
cnRlZC4KKysgICAgICAgIGlmICghbUNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUuZW5hYmxlZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBzdGF0ZW1lbnQoIiNkZWZpbmUgQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElN
RV9DT01QQVJFX01PREUiKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0YXRlbWVudCgiZW51
bSBjbGFzcyBBTkdMRUNvbXBhcmVNb2RlIDogdWludCIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb25lID0gMCwiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIExlc3MsIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzRXF1YWwsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBHcmVhdGVyLCIpOworKyAgICAgICAgc3RhdGVtZW50
KCIgICAgR3JlYXRlckVxdWFsLCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgTmV2ZXIsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBBbHdheXMsIik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBFcXVhbCwiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIE5vdEVxdWFsLCIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9OyIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJ
bnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFY29tcGFyZShUIGRlcHRo
LCBUIGRyZWYsIFVuaWZvcm1PclVJbnQgY29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgQU5HTEVDb21wYXJlTW9kZSBtb2RlID0g
c3RhdGljX2Nhc3Q8QU5HTEVDb21wYXJlTW9kZT4oY29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICBzd2l0Y2ggKG1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgIHsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6Okxl
c3M6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmIDwgZGVw
dGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2Rl
OjpMZXNzRXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBk
cmVmIDw9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6R3JlYXRlcjoiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgPiBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNl
IEFOR0xFQ29tcGFyZU1vZGU6OkdyZWF0ZXJFcXVhbDoiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICAgICAgcmV0dXJuIGRyZWYgPj0gZGVwdGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICAgICAgcmV0dXJuIDA7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpBbHdheXM6Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgICAgIHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNh
c2UgQU5HTEVDb21wYXJlTW9kZTo6RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgICAgIHJldHVybiBkcmVmID09IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmICE9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIGRlZmF1bHQ6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAg
IHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICB9Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1l
bnQoIi8vIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBzaGFkb3cgdGV4dHVyZSBmdW5jdGlvbnMiKTsK
KysgICAgICAgIC8vIDJEIFBDRiBzYW1wbGluZworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGgyZDxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJ
bnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBmbG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwg
dGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQy
IGltZ0Nvb3JkID0gY29vcmQgKiBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRpbXM7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBm
bG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgdGwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlv
bnMsIG9mZnNldCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdM
RWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAu
MCksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1
ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQg
YmwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0
ZXhlbFNpemUueSksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29t
cGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYnIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyB0ZXhl
bFNpemUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAib2Zmc2V0KSwgY29tcGFyZV92
YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYm90dG9tID0gbWl4KGJsLCBiciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIG1peCh0b3AsIGJvdHRvbSwgd2VpZ2h0LnkpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxl
KHMsIGNvb3JkLCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBh
cmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vu
ZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUgUENG
IHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1
ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIC8vIE5PVEUoaHFs
ZSk6IHRvIGltcGxlbWVudCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xF
Y29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucyksIGNvbXBhcmVfdmFsdWUs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgLy8g
MkQgYXJyYXkgUENGIHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0
aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKysg
ICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCAiCisrICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNpZiBk
ZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0
MiBkaW1zID0gZmxvYXQyKHRleHR1cmUuZ2V0X3dpZHRoKCksIHRleHR1cmUuZ2V0X2hlaWdodCgp
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICog
ZGltczsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAg
LyBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHdlaWdodCA9IGZyYWN0
KGltZ0Nvb3JkKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwg
IgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0ciA9IEFOR0xFY29tcGFyZSh0ZXh0
dXJlLnNhbXBsZShzLCBjb29yZCArIGZsb2F0Mih0ZXhlbFNpemUueCwgMC4wKSwgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYmwgPSBB
TkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0ZXhlbFNp
emUueSksICIKKysgICAgICAgICAgICAgICAgICAiYXJyYXksIG9wdGlvbnMsIG9mZnNldCksIGNv
bXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGZsb2F0IGJyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4
ZWxTaXplLCBhcnJheSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBvZmZzZXQpLCBj
b21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBmbG9hdCB0b3AgPSBtaXgodGwsIHRyLCB3ZWlnaHQueCk7Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gbWl4KHRvcCwgYm90dG9tLCB3ZWlnaHQueSk7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1Nf
XykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVy
ZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAg
ICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIC8vIDJEIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKysgICAgICAgIHN0
YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
Q29tcGFyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9h
dCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0
YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAgICAgICIjaWYgZGVm
aW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVO
VElNRV9DT01QQVJFX01PREUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5H
TEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCBv
ZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMs
IG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3Jt
T3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21w
YXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIK
KysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAg
ImludDIoMCksIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIp
OworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBz
YW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAgICAgICJjb21w
YXJlX3ZhbHVlLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSki
KTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVm
aW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29v
cmQsIGNvbXBhcmVfdmFsdWUsIGxldmVsKDApLCBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywg
Y29vcmQsIGNvbXBhcmVfdmFsdWUsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNl
bmRpZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIp
OworKworKyAgICAgICAgLy8gQ3ViZSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVy
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQs
IHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAg
ICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUs
IHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisrICAgICAgICAgICAgImNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAg
ICAgIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9f
U0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlv
bnMpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUo
ZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisr
ICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2lm
IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJz
aGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29y
ZCwgY29tcGFyZV92YWx1ZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAg
ICAgLy8gMkQgYXJyYXkgdGV4dHVyZSdzIHNhbXBsZV9jb21wYXJlKCkgd3JhcHBlcgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFt
ZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQgY29tcGFyZV92
YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKysgICAgICAg
ICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgKKysgICAgICAgICAgICAiI2lmIGRlZmluZWQoX19NRVRB
TF9NQUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFS
RV9NT0RFKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBD
Rih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysg
ICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBh
cmVfdmFsdWUsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRp
ZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29t
cGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBpbnQyKDApLCBzaGFk
b3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0
YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgIgorKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5U
SU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZl
bCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92
YWx1ZSwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICAv
LyAyRCB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAgICAgc3RhdGVt
ZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlm
b3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUo
ZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgaW50MiBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUlu
dCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdM
RXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFO
R0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBm
bG9hdCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQsIGlu
dDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFy
ZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAiaW50MiBvZmZzZXQs
IGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJl
LCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAg
ICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
Iik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCBPcHQgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAgICJmbG9hdCBjb21wYXJl
X3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJl
KHRleHR1cmUsIHMsIGNvb3JkLCBvcHRpb25zLCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisr
ICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUg
dGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29t
cGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAg
IHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBh
cmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3Jk
LCBjb21wYXJlX3ZhbHVlLCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25z
LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIp
OworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAo
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
eyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
LCBjb29yZCwgb3B0aW9ucyk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUlu
dD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRf
YXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
ZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUocywgY29vcmQsIGFycmF5LCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
KGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQg
IgorKyAgICAgICAgICAgICAgICAgICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBj
b29yZCwgYXJyYXksIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAg
ICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAg
ImFycmF5LCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
cHRpb25zLCBvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAgImFy
cmF5LCBPcHQgb3B0aW9ucywgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXks
IG9wdGlvbnMsIGludDIoMCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwg
c2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKyAgICB9CisrCisrICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9u
X25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRmV0Y2gsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0FycmF5T2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc09mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0dyYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNE
cmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaW5Mb2QpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIGlmICghaGFzRHJlZikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjp0b19mdW5jdGlvbl9uYW1lKGltZywg
aW1nVHlwZSwgaXNGZXRjaCwgaXNHYXRoZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0
cywgaGFzT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzR3JhZCwgaGFzRHJlZiwgbG9kLCBtaW5Mb2QpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgLy8gVXNlIGN1c3RvbSBBTkdMRXRleHR1cmUgZnVuY3Rpb24g
aW5zdGVhZCBvZiB1c2luZyBidWlsdC1pbiBzYW1wbGVfY29tcGFyZSgpCisrICAgICAgICByZXR1
cm4gIkFOR0xFdGV4dHVyZSI7CisrICAgIH0KKysKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVuY3Rp
b25fYXJncyhzcGlydl9jcm9zczo6VmFyaWFibGVJRCBpbWcsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGZXRjaCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzR2F0aGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGNvb3JkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGNvb3JkQ29tcG9uZW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBkcmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGdyYWRYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGdyYWRZLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb2Zmc2V0LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaWFzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXAsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG1pbmxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sICpwRm9yd2FyZCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgYm9vbCBmb3J3YXJk
OworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnc1dpdGhvdXREcmVmID0gc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMOjp0b19mdW5jdGlvbl9hcmdzKAorKyAgICAgICAgICAgIGltZywgaW1nVHlwZSwg
aXNGZXRjaCwgaXNHYXRoZXIsIGlzUHJvaiwgY29vcmQsIGNvb3JkQ29tcG9uZW50cywgMCwgZ3Jh
ZFgsIGdyYWRZLCBsb2QsCisrICAgICAgICAgICAgY29mZnNldCwgb2Zmc2V0LCBiaWFzLCBjb21w
LCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOworKworKyAgICAgICAgaWYgKCFkcmVmKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChwRm9yd2FyZCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIHJldHVybiBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICB9CisrICAgICAgICAvLyBD
b252ZXJ0IHRvIGFyZ3VtZW50cyB0byBBTkdMRXRleHR1cmUuCisrICAgICAgICBzdGQ6OnN0cmlu
ZyBhcmdzID0gdG9fZXhwcmVzc2lvbihpbWcpOworKyAgICAgICAgYXJncyArPSAiLCAiOworKyAg
ICAgICAgYXJncyArPSBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICBhcmdzICs9ICIsICI7Cisr
CisrICAgICAgICBmb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZm9yd2Fy
ZCAmJiBzaG91bGRfZm9yd2FyZChkcmVmKTsKKysgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpT
UElSVHlwZSAmZHJlZlR5cGUgPSBleHByZXNzaW9uX3R5cGUoZHJlZik7CisrICAgICAgICBzdGQ6
OnN0cmluZyBkcmVmRXhwcjsKKysgICAgICAgIHVpbnQzMl90IGFsdENvb3JkQ29tcG9uZW50ID0g
MDsKKysgICAgICAgIHN3aXRjaCAoaW1nVHlwZS5pbWFnZS5kaW0pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY2FzZSBzcHY6OkRpbTJEOgorKyAgICAgICAgICAgICAgICBhbHRDb29yZENvbXBv
bmVudCA9IDI7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugc3B2
OjpEaW0zRDoKKysgICAgICAgICAgICBjYXNlIHNwdjo6RGltQ3ViZToKKysgICAgICAgICAgICAg
ICAgYWx0Q29vcmRDb21wb25lbnQgPSAzOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChpc1Byb2opCisrICAg
ICAgICAgICAgZHJlZkV4cHIgPSBzcGlydl9jcm9zczo6am9pbih0b19lbmNsb3NlZF9leHByZXNz
aW9uKGRyZWYpLCAiIC8gIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvX2V4dHJhY3RfY29tcG9uZW50X2V4cHJlc3Npb24oY29vcmQsIGFsdENvb3JkQ29tcG9u
ZW50KSk7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZHJlZkV4cHIgPSB0b19leHByZXNz
aW9uKGRyZWYpOworKworKyAgICAgICAgaWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Ny
b3NzOjpTUElSVHlwZTo6SGFsZikKKysgICAgICAgICAgICBkcmVmRXhwciA9IGNvbnZlcnRfdG9f
ZjMyKGRyZWZFeHByLCAxKTsKKysKKysgICAgICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisrICAgICAg
ICBhcmdzICs9ICIsICI7CisrICAgICAgICBhcmdzICs9IHRvU2hhZG93Q29tcGFyZU1vZGVFeHBy
ZXNzaW9uKGltZyk7CisrCisrICAgICAgICBpZiAocEZvcndhcmQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgKnBGb3J3YXJkID0gZm9yd2FyZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJl
dHVybiBhcmdzOworKyAgICB9CisrCisrICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlw
ZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorKyAg
ICAvLyB0b2dldGhlciB3aXRoIHRoZSBzaGFkb3cgc2FtcGxlci4gTk9URShocWxlKTogVGhpcyBp
cyBqdXN0IDkwJSBjb3B5IG9mIHNwaXJ2X21zbCdzIGNvZGUuCisrICAgIC8vIFRoZSBiZXR0ZXIg
d2F5IGlzIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgYSBQUiBvbiBzcGlydi1jcm9zcyByZXBvIGRp
cmVjdGx5LiBCdXQgdGhpcyBzaG91bGQKKysgICAgLy8gYmUgYSB3b3JrIGFyb3VuZCBzb2x1dGlv
biBmb3Igbm93LgorKyAgICB2b2lkIGVtaXRfZnVuY3Rpb25fcHJvdG90eXBlKHNwaXJ2X2Nyb3Nz
OjpTUElSRnVuY3Rpb24gJmZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3BpcnZfY3Jvc3M6OkJpdHNldCAmKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICAv
LyBUdXJuIG9mZiBjbGFuZy1mb3JtYXQgdG8gZWFzaWVyIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBj
b2RlCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrICAgICAgICB1c2luZyBuYW1lc3Bh
Y2Ugc3BpcnZfY3Jvc3M7CisrICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3B2OworKyAgICAgICAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKysKKysgICAgICAgIGlmIChmdW5jLnNlbGYgIT0gaXIuZGVm
YXVsdF9lbnRyeV9wb2ludCkKKysgICAgICAgICAgICBhZGRfZnVuY3Rpb25fb3ZlcmxvYWQoZnVu
Yyk7CisrCisrICAgICAgICBsb2NhbF92YXJpYWJsZV9uYW1lcyA9IHJlc291cmNlX25hbWVzOwor
KyAgICAgICAgc3RyaW5nIGRlY2w7CisrCisrICAgICAgICBwcm9jZXNzaW5nX2VudHJ5X3BvaW50
ID0gZnVuYy5zZWxmID09IGlyLmRlZmF1bHRfZW50cnlfcG9pbnQ7CisrCisrICAgICAgICAvLyBN
ZXRhbCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGluZSBvdGhlcndp
c2UgdGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVyIGluIGEgc2lu
Z2xlIE1ldGFsbGliLgorKyAgICAgICAgaWYgKCFwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorKyAg
ICAgICAgICAgIHN0YXRlbWVudCgic3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkiKTsKKysKKysgICAgICAgIGF1dG8gJnR5cGUgPSBnZXQ8U1BJUlR5cGU+KGZ1bmMu
cmV0dXJuX3R5cGUpOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNs
X29wdGlvbnMuZm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBXZSBjYW5ub3QgcmV0dXJuIG5hdGl2ZSBhcnJheXMgaW4gTVNMLCBzbyAicmV0dXJuIiB0aHJv
dWdoIGFuIG91dCB2YXJpYWJsZS4KKysgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBkZWNsICs9IGZ1
bmNfdHlwZV9kZWNsKHR5cGUpOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiICI7
CisrICAgICAgICBkZWNsICs9IHRvX25hbWUoZnVuYy5zZWxmKTsKKysgICAgICAgIGRlY2wgKz0g
IigiOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMu
Zm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBGYWtlIGFy
cmF5cyByZXR1cm5zIGJ5IHdyaXRpbmcgdG8gYW4gb3V0IGFycmF5IGluc3RlYWQuCisrICAgICAg
ICAgICAgZGVjbCArPSAidGhyZWFkICI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2ds
c2wodHlwZSk7CisrICAgICAgICAgICAgZGVjbCArPSAiICgmU1BJUlZfQ3Jvc3NfcmV0dXJuX3Zh
bHVlKSI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2FycmF5X2dsc2wodHlwZSk7Cisr
ICAgICAgICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50cy5lbXB0eSgpKQorKyAgICAgICAgICAgICAg
ICBkZWNsICs9ICIsICI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocHJvY2Vzc2luZ19l
bnRyeV9wb2ludCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAobXNsX29wdGlvbnMuYXJn
dW1lbnRfYnVmZmVycykKKysgICAgICAgICAgICAgICAgZGVjbCArPSBlbnRyeV9wb2ludF9hcmdz
X2FyZ3VtZW50X2J1ZmZlcighZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrICAgICAgICAgICAg
ZWxzZQorKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfY2xhc3NpYygh
ZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrCisrICAgICAgICAgICAgLy8gSWYgZW50cnkgcG9p
bnQgZnVuY3Rpb24gaGFzIHZhcmlhYmxlcyB0aGF0IHJlcXVpcmUgZWFybHkgZGVjbGFyYXRpb24s
CisrICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFuIGVtcHR5IGluaXRpYWxp
emVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgorKyAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9u
ZSBhdCB0aGlzIGxhdGUgc3RhZ2UgYmVjYXVzZSB0aGUgaW5pdGlhbGl6YXRpb24gZXhwcmVzc2lv
bgorKyAgICAgICAgICAgIC8vIGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBjb21waWxhdGlvbiBwYXNz
LgorKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQgOiB2YXJzX25lZWRpbmdfZWFybHlfZGVj
bGFyYXRpb24pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZlZF92YXIg
PSBnZXQ8U1BJUlZhcmlhYmxlPih2YXJfaWQpOworKyAgICAgICAgICAgICAgICBJRCAmaW5pdGlh
bGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisrICAgICAgICAgICAgICAgIGlmICghaW5pdGlh
bGl6ZXIpCisrICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGlyLmluY3JlYXNlX2Jv
dW5kX2J5KDEpOworKworKyAgICAgICAgICAgICAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgcHJvcGVy
IGluaXRpYWxpemVycy4KKysgICAgICAgICAgICAgICAgaWYgKGlyLmlkc1tpbml0aWFsaXplcl0u
Z2V0X3R5cGUoKSA9PSBUeXBlTm9uZSB8fCBpci5pZHNbaW5pdGlhbGl6ZXJdLmdldF90eXBlKCkg
PT0gVHlwZUV4cHJlc3Npb24pCisrICAgICAgICAgICAgICAgICAgICBzZXQ8U1BJUkV4cHJlc3Np
b24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsKKysg
ICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBmb3IgKGF1dG8gJmFyZyA6IGZ1
bmMuYXJndW1lbnRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfaWQg
PSBhcmcuaWQ7CisrCisrICAgICAgICAgICAgYXV0byAqdmFyID0gbWF5YmVfZ2V0PFNQSVJWYXJp
YWJsZT4oYXJnLmlkKTsKKysgICAgICAgICAgICBpZiAodmFyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBtb2RpZnkgdGhlIG5hbWUgb2YgdGhlIHZh
cmlhYmxlLCBtYWtlIHN1cmUgd2UgbW9kaWZ5IHRoZSBvcmlnaW5hbCB2YXJpYWJsZS4KKysgICAg
ICAgICAgICAgICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisrICAg
ICAgICAgICAgICAgIGlmIChhcmcuYWxpYXNfZ2xvYmFsX3ZhcmlhYmxlICYmIHZhci0+YmFzZXZh
cmlhYmxlKQorKyAgICAgICAgICAgICAgICAgICAgbmFtZV9pZCA9IHZhci0+YmFzZXZhcmlhYmxl
OworKworKyAgICAgICAgICAgICAgICB2YXItPnBhcmFtZXRlciA9ICZhcmc7IC8vIEhvbGQgYSBw
b2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgc28gd2UgY2FuIGludmFsaWRhdGUgdGhlIHJlYWRvbmx5
IGZpZWxkIGlmIG5lZWRlZC4KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYWRkX2xv
Y2FsX3ZhcmlhYmxlX25hbWUobmFtZV9pZCk7CisrCisrICAgICAgICAgICAgZGVjbCArPSBhcmd1
bWVudF9kZWNsKGFyZyk7CisrCisrICAgICAgICAgICAgYm9vbCBpc19keW5hbWljX2ltZ19zYW1w
bGVyID0gaGFzX2V4dGVuZGVkX2RlY29yYXRpb24oYXJnLmlkLCBTUElSVkNyb3NzRGVjb3JhdGlv
bkR5bmFtaWNJbWFnZVNhbXBsZXIpOworKworKyAgICAgICAgICAgIGF1dG8gJmFyZ190eXBlID0g
Z2V0PFNQSVJUeXBlPihhcmcudHlwZSk7CisrICAgICAgICAgICAgaWYgKGFyZ190eXBlLmJhc2V0
eXBlID09IFNQSVJUeXBlOjpTYW1wbGVkSW1hZ2UgJiYgIWlzX2R5bmFtaWNfaW1nX3NhbXBsZXIp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0
aWMgcGxhbmUgYXJncyBmb3IgbXVsdGlwbGFuYXIgdGV4dHVyZQorKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBwbGFuZXMgPSAxOworKyAgICAgICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHBy
X3NhbXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9zYW1wbGVyKG5hbWVfaWQpKQorKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0ZXhwcl9zYW1wbGVyLT55Y2Jjcl9jb252ZXJzaW9uX2VuYWJsZSkK
KysgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZXMgPSBjb25zdGV4cHJfc2FtcGxlci0+cGxh
bmVzOworKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBp
KyspCisrICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgIiwgYXJndW1lbnRfZGVj
bChhcmcpLCBwbGFuZV9uYW1lX3N1ZmZpeCwgaSk7CisrCisrICAgICAgICAgICAgICAgIC8vIE1h
bnVmYWN0dXJlIGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBmb3IgU2FtcGxlZEltYWdlIHRleHR1cmUK
KysgICAgICAgICAgICAgICAgaWYgKGFyZ190eXBlLmltYWdlLmRpbSAhPSBEaW1CdWZmZXIpCisr
ICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgdGhyZWFkIGNvbnN0ICIsIHNhbXBs
ZXJfdHlwZShhcmdfdHlwZSksICIgIiwgdG9fc2FtcGxlcl9leHByZXNzaW9uKGFyZy5pZCkpOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0aWMg
c3dpenpsZSBhcmcuCisrICAgICAgICAgICAgaWYgKG1zbF9vcHRpb25zLnN3aXp6bGVfdGV4dHVy
ZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2ltYWdlcyAmJiBpc19zYW1wbGVkX2ltYWdlX3R5cGUo
YXJnX3R5cGUpICYmCisrICAgICAgICAgICAgICAgICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJn
X3R5cGUuYXJyYXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNv
bnN0YW50IHVpbnQiLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fc3dpenpsZV9leHBy
ZXNzaW9uKGFyZy5pZCkpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiAoYnVm
ZmVyc19yZXF1aXJpbmdfYXJyYXlfbGVuZ3RoLmNvdW50KG5hbWVfaWQpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXku
ZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNvbnN0YW50IHVpbnQi
LCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fYnVmZmVyX3NpemVfZXhwcmVzc2lvbihu
YW1lX2lkKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChpc19zYW1wbGVk
X2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmIGFyZ190eXBlLmltYWdlLmRlcHRoKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJy
YXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgICAgIGRlY2wg
Kz0gam9pbigiLCBjb25zdGFudCB1bmlmb3JtPHVpbnQ+IiwgYXJnX2lzX2FycmF5ID8gIiogIiA6
ICImICIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbihhcmcuaWQpKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KCZhcmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKysgICAgICAgICAgICAgICAgZGVjbCAr
PSAiLCAiOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiKSI7CisrICAgICAgICBz
dGF0ZW1lbnQoZGVjbCk7CisrCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb24KKysgICAgfQor
KworKyAgICAvLyBPdmVycmlkZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cyBwYXNzaW5nIGdlbmVy
YXRvciB0byBpbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIGNvbWUKKysgICAgLy8g
dG9nZXRoZXIgd2l0aCB0aGUgc2hhZG93IHNhbXBsZXIKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVu
Y19jYWxsX2FyZyhjb25zdCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFy
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpZCkgb3ZlcnJp
ZGUKKysgICAgeworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpD
b21waWxlck1TTDo6dG9fZnVuY19jYWxsX2FyZyhhcmcsIGlkKTsKKysKKysgICAgICAgIGNvbnN0
IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGV4cHJlc3Npb25fdHlwZShpZCk7CisrCisr
ICAgICAgICBpZiAoaXNfc2FtcGxlZF9pbWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1hZ2UuZGVw
dGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgLy8gTmVlZCB0
byBjaGVjayB0aGUgYmFzZSB2YXJpYWJsZSBpbiBjYXNlIHdlIG5lZWQgdG8gYXBwbHkgYSBxdWFs
aWZpZWQgYWxpYXMuCisrICAgICAgICAgICAgdWludDMyX3QgdmFyX2lkID0gMDsKKysgICAgICAg
ICAgICBhdXRvICp2YXIgICAgICAgPSBtYXliZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJs
ZT4oaWQpOworKyAgICAgICAgICAgIGlmICh2YXIpCisrICAgICAgICAgICAgICAgIHZhcl9pZCA9
IHZhci0+YmFzZXZhcmlhYmxlOworKworKyAgICAgICAgICAgIGFyZ19zdHIgKz0gIiwgIiArIHRv
U2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcl9pZCA/IHZhcl9pZCA6IGlkKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiBhcmdfc3RyOworKyAgICB9CisrCisrICAgIC8vIEFkZGl0
aW9uYWwgZnVuY3Rpb25zCisrICAgIHZvaWQgYWRkQnVpbHRJblJlc291cmNlcygpCisrICAgIHsK
KysgICAgICAgIHVpbnQzMl90IHZhcklkID0gYnVpbGRfY29uc3RhbnRfdWludF9hcnJheV9wb2lu
dGVyKCk7CisrICAgICAgICBzZXRfbmFtZSh2YXJJZCwga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNWYXJOYW1lKTsKKysgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG1hdGNoIGFueXRoaW5n
LgorKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkRlc2NyaXB0
b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAg
IHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29yYXRpb25CaW5kaW5nLCAwKTsKKysgICAg
ICAgIHNldF9leHRlbmRlZF9kZWNvcmF0aW9uKHZhcklkLCBzcGlydl9jcm9zczo6U1BJUlZDcm9z
c0RlY29yYXRpb25SZXNvdXJjZUluZGV4UHJpbWFyeSwgMCk7CisrICAgICAgICBtQU5HTEVTaGFk
b3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworKyAgICB9CisrCisrICAgIHZvaWQgYW5hbHl6
ZVNoYWRlclZhcmlhYmxlcygpCisrICAgIHsKKysgICAgICAgIGlyLmZvcl9lYWNoX3R5cGVkX2lk
PHNwaXJ2X2Nyb3NzOjpTUElSVmFyaWFibGU+KFt0aGlzXSh1aW50MzJfdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGly
dl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAgICAgICBjb25zdCBzcGlydl9j
cm9zczo6U1BJUlR5cGUgJnR5cGUgPSBnZXRfdmFyaWFibGVfZGF0YV90eXBlKHZhcik7CisrICAg
ICAgICAgICAgdWludDMyX3QgdmFySWQgICAgICAgICAgICAgICAgICAgID0gdmFyLnNlbGY7Cisr
CisrICAgICAgICAgICAgaWYgKHZhci5zdG9yYWdlID09IHNwdjo6U3RvcmFnZUNsYXNzVW5pZm9y
bUNvbnN0YW50ICYmICFpc19oaWRkZW5fdmFyaWFibGUodmFyKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5p
bWFnZS5kZXB0aCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbUhh
c0RlcHRoU2FtcGxlciA9IHRydWU7CisrCisrICAgICAgICAgICAgICAgICAgICBhdXRvICZlbnRy
eV9mdW5jID0gdGhpcy0+Z2V0PHNwaXJ2X2Nyb3NzOjpTUElSRnVuY3Rpb24+KGlyLmRlZmF1bHRf
ZW50cnlfcG9pbnQpOworKyAgICAgICAgICAgICAgICAgICAgZW50cnlfZnVuYy5maXh1cF9ob29r
c19pbi5wdXNoX2JhY2soW3RoaXMsICZ0eXBlLCAmdmFyLCB2YXJJZF0oKSB7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5KCk7Cisr
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50KCJjb25zdGFudCB1bmlmb3JtPHVp
bnQ+IiwgaXNBcnJheVR5cGUgPyAiKiAiIDogIiYgIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5VHlwZSA/ICIgPSAmIiA6ICIgPSAi
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19uYW1lKG1BTkdMRVNoYWRv
d0NvbXBhcmVNb2Rlc1ZhcklkKSwgIlsiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGlydl9jcm9zczo6Y29udmVydF90b19zdHJpbmcoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRfbWV0YWxfcmVzb3VyY2VfaW5kZXgodmFyLCBzcGlydl9j
cm9zczo6U1BJUlR5cGU6OkltYWdlKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJdOyIpOworKyAgICAgICAgICAgICAgICAgICAgfSk7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9KTsKKysgICAgfQorKworKyAgICBzdGQ6OnN0cmlu
ZyB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKysgICAgeworKyAg
ICAgICAgY29uc3RleHByIGNoYXIga0NvbXBhcmVNb2RlU3VmZml4W10gPSAiX0NvbXBNb2RlIjsK
KysgICAgICAgIGF1dG8gKmNvbWJpbmVkICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0
PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmluZWRJbWFnZVNhbXBsZXI+KGlkKTsKKysKKysgICAgICAg
IHN0ZDo6c3RyaW5nIGV4cHIgPSB0b19leHByZXNzaW9uKGNvbWJpbmVkID8gY29tYmluZWQtPmlt
YWdlIDogc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQoaWQpKTsKKysgICAgICAgIGF1dG8gaW5kZXgg
ICAgICAgPSBleHByLmZpbmRfZmlyc3Rfb2YoJ1snKTsKKysKKysgICAgICAgIGlmIChpbmRleCA9
PSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgICAgICAgICByZXR1cm4gZXhwciArIGtDb21wYXJl
TW9kZVN1ZmZpeDsKKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRv
IGltYWdlRXhwciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4KTsKKysgICAgICAgICAgICBhdXRvIGFy
cmF5RXhwciA9IGV4cHIuc3Vic3RyKGluZGV4KTsKKysgICAgICAgICAgICByZXR1cm4gaW1hZ2VF
eHByICsga0NvbXBhcmVNb2RlU3VmZml4ICsgYXJyYXlFeHByOworKyAgICAgICAgfQorKyAgICB9
CisrCisrICAgIENvbnRleHQgKm1Db250ZXh0OworKyAgICB1aW50MzJfdCBtQU5HTEVTaGFkb3dD
b21wYXJlTW9kZXNWYXJJZCA9IDA7CisrICAgIGJvb2wgbUhhc0RlcHRoU2FtcGxlciAgICAgICAg
ICAgICAgICAgID0gZmFsc2U7CisgfTsKKyAKKy1hbmdsZTo6UmVzdWx0IENvbnZlcnRTcGlydlRv
TXNsKAorLSAgICBDb250ZXh0ICpjb250ZXh0LAorK2FuZ2xlOjpSZXN1bHQgQ29udmVydFNwaXJ2
VG9Nc2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNo
TWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDx1aW50MzJfdCwg
dWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVy
QmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1
aW50MzJfdD4gKnNwcml2Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkU2hhZGVySW5mb091dCkKK0BAIC0zNjQsNyAr
MTEwMCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAg
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgU3Bp
cnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CisrICAg
IFNwaXJ2VG9Nc2xDb21waWxlciBjb21waWxlck1zbChjb250ZXh0LCBzdGQ6Om1vdmUoKnNwcml2
Q29kZSkpOworIAorICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlv
bnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCisgICAgIC8vIGluIGNh
c2Ugb2YgZXJyb3I/CitAQCAtNDMxLDEyICsxMTY3LDEzIEBAIHZvaWQgR2xzbGFuZ0dldFNoYWRl
clNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAg
ICAgb3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8sIHhmYk9ubHlT
aGFkZXJTb3VyY2VPdXQsCisgICAgICAgICAgICAgJnhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNo
YWRlclR5cGU6OlZlcnRleF0pOworIAorLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhv
cHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGZiT25seUludGVyZmFjZUlu
Zm8sICZ4ZmJPbmx5VmFyaWFibGVNYXBzKTsKKysgICAgICAgIEdsc2xhbmdBc3NpZ25Mb2NhdGlv
bnMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLmdldEV4ZWN1dGFibGUoKSwgZ2w6OlNoYWRlclR5cGU6
OlZlcnRleCwgJnhmYk9ubHlJbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwcyk7CisgICAgICAgICAqeGZiT25seVZTVmFyaWFi
bGVJbmZvTWFwT3V0ID0gc3RkOjptb3ZlKHhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNoYWRlclR5
cGU6OlZlcnRleF0pOworICAgICB9CisgfQorIAorKworIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dl
dFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNo
YWRlclN0YWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OkNhcHMgJmdsQ2FwcywKK0BAIC00NzgsNyArMTIxNSw3IEBAIHZvaWQgR2xzbGFuZ0dl
dFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsWGZiT25s
eVNoYWRlckluZm9PdXQgLyoqIG51bGxhYmxlICovKQorIHsKKyAgICAgLy8gUmV0cmlldmUgb3Jp
Z2luYWwgdW5pZm9ybSBidWZmZXIgYmluZGluZ3MgZ2VuZXJhdGVkIGJ5IGZyb250IGVuZC4gV2Ug
d2lsbCBuZWVkIHRvIGRvIGEgcmVtYXAuCistICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGluZ3M7CisrICAgIGFuZ2xlOjpIYXNoTWFw
PHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5nczsKKyAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdl
dFVuaWZvcm1CbG9ja3MoKTsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZm
ZXJJZHggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlcklkeCkKKyAgICAgeworQEAgLTQ4OSw3ICsx
MjI2LDcgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3Rh
dGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgIH0KKyAgICAgfQorICAgICAvLyBSZXRyaWV2ZSBv
cmlnaW5hbCBYRkIgYnVmZmVycyBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9udCBlbmQuCistICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGlu
Z3M7CisrICAgIGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdD4geGZiT3JpZ2luYWxC
aW5kaW5nczsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZmZXJJZHggPCBr
TWF4U2hhZGVyWEZCczsgKytidWZmZXJJZHgpCisgICAgIHsKKyAgICAgICAgIHN0ZDo6c3RyaW5n
IGJ1ZmZlck5hbWUgPSByeDo6R2V0WGZiQnVmZmVyTmFtZShidWZmZXJJZHgpOworQEAgLTUzMyw2
ICsxMjcwLDUgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworIH0KKy0KKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFtZXNwYWNlIHJ4Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oCitpbmRleCA4N2RjMjE3Li5mODU3MDM0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCitp
bmRleCAzNjhkYmY0Li43Y2M4OTkwIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorQEAgLTEsNSArMSw1IEBA
CisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtNTIsOCArNTIsNyBAQAorICAgICB7
CisgICAgICAgICAvLyBGaXJzdCBhbGxvY2F0aW9uCisgICAgICAgICBBTkdMRV9UUlkoQnVmZmVy
OjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2Rl
UHJpdmF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUsIG51bGxwdHIsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1
bHRTaXplLCBudWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOworICAgICAgICAgbVJl
bmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7
CisgICAgIH0KKyAgICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJl
c3VsdFNpemUgPiBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCitAQCAtODgsNiArODcs
MTIgQEAKKyAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPT0gMCkKKyAgICAgeworICAgICAgICAgbVJl
c2V0Rmlyc3RRdWVyeSA9IGNsZWFyT2xkVmFsdWU7CisrICAgICAgICBpZiAoIWNsZWFyT2xkVmFs
dWUgJiYgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZl
clJlYWRXcml0ZS5lbmFibGVkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIG9sZCB2
YWx1ZSBvZiBmaXJzdCBxdWVyeSBuZWVkcyB0byBiZSByZXRhaW5lZCBhbmQgZGV2aWNlIGRvZXNu
J3Qgc3VwcG9ydCBidWZmZXIKKysgICAgICAgICAgICAvLyByZWFkLXdyaXRlLCB3ZSBuZWVkIGFu
IGFkZGl0aW9uYWwgb2Zmc2V0IHRvIHN0b3JlIHRoZSBvbGQgdmFsdWUgb2YgdGhlIHF1ZXJ5Lgor
KyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRleHRNdGwsIHF1ZXJ5
LCBmYWxzZSk7CisrICAgICAgICB9CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworQEAgLTExMyw5ICsxMTgsMzMgQEAKKyAgICAgfQorIAorICAgICBSZW5k
ZXJVdGlscyAmdXRpbHMgICAgICAgICAgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRVdGlscygpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0
cjsKKysgICAgLy8gQ29tYmluZSB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxv
Y2F0ZWQgZm9yIGZpcnN0IHF1ZXJ5CisrICAgIGlmIChtQWxsb2NhdGVkUXVlcmllc1swXSkKKysg
ICAgeworKyAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWYgPSBtQWxsb2NhdGVkUXVlcmll
c1swXS0+Z2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpOworKyAgICAgICAgY29uc3QgVmlzaWJp
bGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQorKyAgICAgICAgICAgIG1B
bGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworKyAg
ICAgICAgaWYgKCFtUmVzZXRGaXJzdFF1ZXJ5ICYmCisrICAgICAgICAgICAgIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZlclJlYWRXcml0ZS5lbmFibGVk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCByZWFkIGFuZCB3cml0
ZSB0byB0aGUgc2FtZSBidWZmZXIgaW4gc2hhZGVyLiBXZSBuZWVkIHRvIGNvcHkgdGhlIG9sZAor
KyAgICAgICAgICAgIC8vIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IHRvIGZpcnN0IG9mZnNldCBhbGxv
Y2F0ZWQgZm9yIGl0LgorKyAgICAgICAgICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgICAgICAgICAgYmxpdEVuY29kZXItPmNvcHlCdWZm
ZXIoZHN0QnVmLCAwLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBhbGxvY2F0ZWRPZmZzZXRzLmZy
b250KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1
ZXJ5UmVzdWx0U2l6ZSk7CisrICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1
bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVm
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICB1
dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCAhbVJlc2V0Rmlyc3RRdWVy
eSwgYWxsb2NhdGVkT2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworKyAgICAgICAgfQorKyAg
ICB9CisgCisgICAgIC8vIENvbWJpbmUgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG9mZnNldHMg
YWxsb2NhdGVkIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVlcmllcworLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorKyAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorICAgICB7
CisgICAgICAgICBRdWVyeU10bCAqcXVlcnkgPSBtQWxsb2NhdGVkUXVlcmllc1tpXTsKKyAgICAg
ICAgIGlmICghcXVlcnkpCitAQCAtMTI2LDEyICsxNTUsMTIgQEAKKyAgICAgICAgIGNvbnN0IEJ1
ZmZlclJlZiAmZHN0QnVmID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1
bHRCdWZmZXIoKTsKKyAgICAgICAgIGNvbnN0IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRzTXRsICZh
bGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgICBtQWxsb2NhdGVkUXVlcmllc1tpXS0+Z2V0
QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKTsKKy0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNp
YmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBrZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFt
UmVzZXRGaXJzdFF1ZXJ5LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVmKTsKKysgICAg
ICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIGZhbHNlLCBhbGxv
Y2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0QnVmKTsKKyAgICAgfQorIAorICAgICAvLyBSZXF1ZXN0
IHN5bmNocm9uaXphdGlvbiBhbmQgY2xlYW51cAorLSAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgIGJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCisgICAg
IHsKKyAgICAgICAgIFF1ZXJ5TXRsICpxdWVyeSA9IG1BbGxvY2F0ZWRRdWVyaWVzW2ldOworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCitpbmRleCA2
Yjk2N2RlLi5kMGE0ODM3IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZW5kZXJfdXRpbHMuaAorQEAgLTYsNiArNiw4IEBACisgLy8gbXRsX3JlbmRlcl91dGlscy5o
OgorIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdo
aWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRlcnMKKyAvLyAgICBm
b3IgY29udmVydGluZywgYmxpdHRpbmcsIGNvcHlpbmcgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGRh
dGEsIGFuZCBtYW55IG1vcmUuCisrLy8gTk9URShocWxlKTogQ29uc2lkZXIgc3BsaXR0aW5nIHRo
aXMgY2xhc3MgaW50byBtdWx0aXBsZSBjbGFzc2VzIGVhY2ggZG9pbmcgZGlmZmVyZW50IHV0aWxp
dGllcy4KKysvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KKyAvLworIAorICNpZm5k
ZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXworQEAgLTg5LDYg
KzkxLDggQEAgc3RydWN0IENvbG9yQmxpdFBhcmFtcyA6IHB1YmxpYyBCbGl0UGFyYW1zCisgc3Ry
dWN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgOiBwdWJsaWMgQmxpdFBhcmFtcworIHsKKyAgICAg
VGV4dHVyZVJlZiBzcmNTdGVuY2lsOworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGV2ZWwgPSAw
OworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOworIH07CisgCisgLy8gU3RlbmNp
bCBibGl0IHZpYSBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4
dHVyZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KK0BAIC0zMDksMjEgKzMxMywxNyBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwdWJsaWM6
CisgICAgIHZvaWQgb25EZXN0cm95KCk7CisgCistICAgIC8vIENvbnZlcnQgaW5kZXggYnVmZmVy
LgorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIHRyaWFu
Z2xlIGZhbiBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAgICAvLyBHZW5l
cmF0ZSB0cmlhbmdsZSBmYW4gaW5kZXggYnVmZmVyIGZvciBnbERyYXdFbGVtZW50cygpLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorLSAgICAvLyBHZW5lcmF0ZSBsaW5lIGxvb3AgaW5kZXggYnVmZmVy
IGZvciBnbERyYXdBcnJheXMoKS4KKyAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29w
QnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxv
b3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIGxpbmUgbG9vcCdz
IGxhc3Qgc2VnbWVudCBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorLSAgICAvLyBU
aGlzIGlzIHVzZWQgd2hlbiBwcmltaXRpdmUgcmVzdGFydCBpcyBub3QgZW5hYmxlZC4KKyAgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnQoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgZmlyc3RWZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RWZXJ0ZXgsCitAQCAtMzQwLDYgKzM0MCwxOCBAQCBj
bGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAg
IGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJy
YXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25Q
YXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworKworKyAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVBy
aW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dl
bmVyYXRlZCk7CisrCisgICBwcml2YXRlOgorICAgICAvLyBJbmRleCBnZW5lcmF0b3IgY29tcHV0
ZSBwaXBlbGluZXM6CisgICAgIC8vICAtIEZpcnN0IGRpbWVuc2lvbjogaW5kZXggdHlwZS4KK0BA
IC0zNDgsNyArMzYwLDYgQEAgY2xhc3MgSW5kZXhHZW5lcmF0b3JVdGlscyBmaW5hbCA6IGFuZ2xl
OjpOb25Db3B5YWJsZQorICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1dG9PYmpDUHRy
PGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAorICAgICAgICAgICAgICAgICAgICBh
bmdsZTo6RW51bVNpemU8Z2w6OkRyYXdFbGVtZW50c1R5cGU+KCk+OworIAorLSAgICAvLyBHZXQg
Y29tcHV0ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4KKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBnZXRJbmRleENvbnZlcnNp
b25QaXBlbGluZSgKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBn
bDo6RHJhd0VsZW1lbnRzVHlwZSBzcmNUeXBlLAorQEAgLTM3NSw3ICszODYsOCBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAv
LyBNdXN0IGJlIG11bHRpcGxlcyBvZiBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQKKyAgICAg
ICAgIHVpbnQzMl90IGRzdE9mZnNldCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7Cisg
CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5R1BVKAorICAgICAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0zOTMsNiArNDA1
LDExIEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBjb25zdCBJbmRl
eEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bVZl
cnRpY2VzUGVyUHJpbWl0aXZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKTsKKysKKyAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtSW5k
ZXhDb252ZXJzaW9uUGlwZWxpbmVDYWNoZXM7CisgCisgICAgIEluZGV4Q29udmVyc2lvblBpcGVs
aW5lQXJyYXkgbVRyaUZhbkZyb21FbGVtQXJyYXlHZW5lcmF0b3JQaXBlbGluZUNhY2hlczsKK0BA
IC00MjksNyArNDQ2LDcgQEAgY2xhc3MgTWlwbWFwVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyAgIHB1YmxpYzoKKyAgICAgdm9pZCBvbkRlc3Ryb3koKTsKKyAKKy0gICAgLy8gQ29t
cHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gT25seSBwb3NzaWJsZSBmb3IgM0QgdGV4dHVy
ZSBmb3Igbm93LgorKyAgICAvLyBDb21wdXRlIGJhc2VkIG1pcG1hcCBnZW5lcmF0aW9uLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTWlwbWFwQ1MoQ29udGV4dE10bCAqY29udGV4dE10bCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNy
Y1RleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNSR0JN
aXBtYXAsCitAQCAtNDM3LDkgKzQ1NCwxNSBAQCBjbGFzcyBNaXBtYXBVdGlscyBmaW5hbCA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorIAorICAgcHJpdmF0ZToKKyAgICAgdm9pZCBlbnN1cmUzRE1pcEdl
bmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisrICAg
IHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZUN1
YmVNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwp
OworIAorICAgICAvLyBNaXBtYXBzIGdlbmVyYXRpbmcgY29tcHV0ZSBwaXBlbGluZToKKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtM0RNaXBHZW5lcmF0b3JQ
aXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBt
MkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBp
cGVsaW5lU3RhdGU+PiBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lOworKyAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxp
bmU7CisgfTsKKyAKKyAvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyBwaXhlbHMgY29weSBiZXR3
ZWVuIGJ1ZmZlcnMgYW5kIHRleHR1cmVzCitAQCAtNTQzLDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0
ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAg
UmVuZGVyUGlwZWxpbmVDYWNoZSBtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lQ2FjaGU7
CisgfTsKKyAKKysvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyB0cmFuc2Zvcm0gZmVlZGJhY2sK
KysgICAgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tVdGlscworK3sKKysgIHB1YmxpYzoKKysgICAg
dm9pZCBvbkRlc3Ryb3koKTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVT
dGF0ZT4+IGdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisrICAgICAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVu
Y29kZXIsCisrICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsK
KysKKysgIHByaXZhdGU6CisrICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVN
c2xYZmJMaWJyYXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFu
c2xhdGVkTXNsKTsKKyt9OworKworIC8vIFJlbmRlclV0aWxzOiBjb250YWluZXIgY2xhc3Mgb2Yg
dmFyaW91cyB1dGlsIGNsYXNzZXMgYWJvdmUKKyBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyB7CitAQCAtNTg3LDcgKzYyNSw4IEBAIGNsYXNz
IFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBh
bmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZm
ZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZy
b21BcnJheVBhcmFtcyAmcGFyYW1zKTsKK0BAIC02MzksNiArNjc4LDE5IEBAIGNsYXNzIFJlbmRl
clV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmc3JjQW5nbGVGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZv
cm1hdENvbnZlcnRQYXJhbXMgJnBhcmFtcyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KnJlbmRlckVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYyk7CisrCisrICAgIGFu
Z2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpOworKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgCisgICBwcml2YXRlOgorICAgICAv
LyBvdmVycmlkZSBFcnJvckhhbmRsZXIKK0BAIC02NDYsNyArNjk4LDcgQEAgY2xhc3MgUmVuZGVy
VXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkg
b3ZlcnJpZGU7CistICAgIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqX051bGxhYmxlIGVycm9y
LAorKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92
ZXJyaWRlOworQEAgLTY2Miw2ICs3MTQsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgTWlwbWFwVXRpbHMgbU1pcG1hcFV0aWxz
OworICAgICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXplPFBpeGVs
VHlwZT4oKT4gbUNvcHlQaXhlbHNVdGlsczsKKyAgICAgVmVydGV4Rm9ybWF0Q29udmVyc2lvblV0
aWxzIG1WZXJ0ZXhGb3JtYXRVdGlsczsKKysgICAgVHJhbnNmb3JtRmVlZGJhY2tVdGlscyBtVHJh
bnNmb3JtRmVlZGJhY2tVdGlsczsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBtdGwKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCitpbmRleCBk
MjI0ODAxLi4zMmIzM2NhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVuZGVyX3V0aWxzLm1tCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKK0BAIC01NCwxMCArNTUs
MTIgQEAKKyAgICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOworICAgICBpbnQgc3JjTGV2ZWwg
ICAgICAgICA9IDA7CisgICAgIGludCBzcmNMYXllciAgICAgICAgID0gMDsKKysgICAgaW50IHNy
Y0xldmVsMiAgICAgICAgPSAwOworKyAgICBpbnQgc3JjTGF5ZXIyICAgICAgICA9IDA7CisgICAg
IHVpbnQ4X3QgZHN0RmxpcFggICAgID0gMDsKKyAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAw
OworICAgICB1aW50OF90IGRzdEx1bWluYW5jZSA9IDA7ICAvLyBkZXN0IHRleHR1cmUgaXMgbHVt
aW5hY2UKKy0gICAgdWludDhfdCBwYWRkaW5nWzEzXTsKKysgICAgdWludDhfdCBwYWRkaW5nWzld
OworIH07CisgCisgc3RydWN0IEJsaXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCitAQCAt
OTAsNyArOTMsNyBAQAorICAgICB1aW50OF90IHBhZGRpbmdbN107CisgfTsKKyAKKy0vLyBTZWUg
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisrLy8gU2Vl
IGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRhbAorIHN0cnVjdCBDb21i
aW5lVmlzaWJpbGl0eVJlc3VsdFVuaWZvcm0KKyB7CisgICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0
OworQEAgLTk5LDEyICsxMDIsMTEgQEAKKyB9OworIAorIC8vIFNlZSBsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwKKy1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBV
bmlmb3JtCisrc3RydWN0IEdlbmVyYXRlM0RNaXBtYXBVbmlmb3JtCisgeworICAgICB1aW50MzJf
dCBzcmNMZXZlbDsKKyAgICAgdWludDMyX3QgbnVtTWlwbWFwc1RvR2VuZXJhdGU7CistICAgIHVp
bnQ4X3Qgc1JHQjsKKy0gICAgdWludDhfdCBwYWRkaW5nWzddOworKyAgICB1aW50MzJfdCBwYWRk
aW5nWzJdOworIH07CisgCisgLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Y29weV9idWZmZXIubWV0YWwKK0BAIC0xNTYsMTkgKzE1OCwzNiBAQAorIC8vIGV4aXRpbmcgYmxv
Y2suCisgc3RydWN0IFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeQorIHsKKy0gICAgU2NvcGVk
RGlzYWJsZU9jY2x1c2lvblF1ZXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGFuZ2xlOjpSZXN1
bHQgKnJlc3VsdE91dCkKKy0gICAgICAgIDogbUNvbnRleHRNdGwoY29udGV4dE10bCksIG1SZXN1
bHRPdXQocmVzdWx0T3V0KQorKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4
dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0KQorKyAgICAgICAgOiBtQ29udGV4dE10bChjb250
ZXh0TXRsKSwgbUVuY29kZXIoZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQorKyAgICB7
CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2Ns
dXNpb25RdWVyeSgpKQorICAgICAgICAgeworKyAgICAgICAgICAgIGVuY29kZXItPnB1c2hEZWJ1
Z0dyb3VwKEAiRGlzYWJsZWQgT2NjbHVzaW9uUXVlcnkiKTsKKysgICAgICAgIH0KKysjZW5kaWYK
KyAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5CisgICAgICAg
ICBjb250ZXh0TXRsLT5kaXNhYmxlQWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsK
KyAgICAgfQorICAgICB+U2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5KCkKKyAgICAgeworICAg
ICAgICAgKm1SZXN1bHRPdXQgPSBtQ29udGV4dE10bC0+cmVzdGFydEFjdGl2ZU9jY2x1c2lvblF1
ZXJ5SW5SZW5kZXJQYXNzKCk7CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChtQ29udGV4
dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBtRW5jb2Rlci0+cG9wRGVidWdHcm91cCgpOworKyAgICAgICAgfQorKyNlbHNlCisrICAgICAg
ICBBTkdMRV9VTlVTRURfVkFSSUFCTEUobUVuY29kZXIpOworKyNlbmRpZgorICAgICB9CisgCisg
ICBwcml2YXRlOgorICAgICBDb250ZXh0TXRsICptQ29udGV4dE10bDsKKysgICAgUmVuZGVyQ29t
bWFuZEVuY29kZXIgKm1FbmNvZGVyOworIAorICAgICBhbmdsZTo6UmVzdWx0ICptUmVzdWx0T3V0
OworIH07CitAQCAtMjE5LDY2ICsyMzgsNDMgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQz
Ml90IHNyY1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZmZlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
T2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgQVNTRVJUKGNvdW50ID4gMik7CistCist
ICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudDsKKy0gICAgQU5HTEVfVFJZKG10bDo6R2V0VHJp
YW5nbGVGYW5JbmRpY2VzQ291bnQoY29udGV4dE10bCwgY291bnQsICZnZW5JbmRpY2VzQ291bnQp
KTsKKy0KKyAgICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworLSAgICBjb25zdCB1aW50MzJfdCBrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
LQorKyAgICBHTHNpemVpIGRzdFRyaWFuZ2xlICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAg
dWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVy
LT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworLSAgICBUIHRyaUZpcnN0SWR4ICAgID0g
MDsgIC8vIFZlcnRleCBpbmRleCBvZiB0cmlhbmxnZSdzIDFzdCB2ZXJ0ZXgKKy0gICAgVCBzcmNQ
cmV2SWR4ICAgICA9IDA7ICAvLyBWZXJ0ZXggaW5kZXggb2YgdHJpYW5sZ2UncyAybmQgdmVydGV4
CisrICAgIFQgdHJpRmlyc3RJZHgsIHNyY1ByZXZJZHg7CisgICAgIG1lbWNweSgmdHJpRmlyc3RJ
ZHgsIGluZGljZXMsIHNpemVvZih0cmlGaXJzdElkeCkpOworKyAgICBtZW1jcHkoJnNyY1ByZXZJ
ZHgsIGluZGljZXMgKyAxLCBzaXplb2Yoc3JjUHJldklkeCkpOworIAorICAgICBpZiAocHJpbWl0
aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsKKy0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBM
b2NhdGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xlJ3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZl
ci4KKyAgICAgICAgIEdMc2l6ZWkgdHJpRmlyc3RJZHhMb2MgPSAwOworICAgICAgICAgd2hpbGUg
KHRyaUZpcnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7Cist
ICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbdHJpRmlyc3RJZHhMb2MrK10sICZrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4LAorLSAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0RzdFByaW1pdGl2
ZVJlc3RhcnRJbmRleCkpOworKyAgICAgICAgICAgICsrdHJpRmlyc3RJZHhMb2M7CisgICAgICAg
ICAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jLCBzaXpl
b2YodHJpRmlyc3RJZHgpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIGlmICh0cmlGaXJzdElk
eExvYyArIDIgPj0gY291bnQpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gTm90IGVub3Vn
aCBpbmRpY2VzLgorLSAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gdHJpRmlyc3RJZHhMb2M7
IGkgPCBjb3VudDsgKytpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbWVtY3B5
KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LCBzaXplb2Yoa0RzdFByaW1p
dGl2ZVJlc3RhcnRJbmRleCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAg
IGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNvdW50KQorLSAgICAgICAgeworLSAgICAg
ICAgICAgIG1lbWNweSgmc3JjUHJldklkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jICsgMSwg
c2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gdHJpRmlyc3RJZHhMb2MgKyAyOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgIHsKKyAg
ICAgICAgICAgICB1aW50MzJfdCB0cmlJbmRpY2VzWzNdOworLQorICAgICAgICAgICAgIFQgc3Jj
SWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsgaSwgc2l6ZW9mKHNy
Y0lkeCkpOworKyAgICAgICAgICAgIGJvb2wgY29tcGxldGVUcmlhbmdsZSA9IHRydWU7CisgICAg
ICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBz
cmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKKyAgICAgICAgICAgICB7CistICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuCistICAgICAgICAgICAgICAgIHRy
aUluZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKKy0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1sxXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAgICAgICAg
ICAgICAgICB0cmlJbmRpY2VzWzJdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CisrICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuIE1vdmUgdG8gbmV4dCB0cmlhbmds
ZSBhbmQgc2V0IHRyaUZpcnN0SW5kZXgKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHggICAg
ICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHhMb2MgICA9IGk7CisrICAg
ICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgZWxzZSBpZiAoaSA8IHRyaUZpcnN0SWR4TG9jICsgMikKKyAgICAgICAgICAg
ICB7CistICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUKKy0gICAgICAgICAg
ICAgICAgdHJpSW5kaWNlc1swXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CistICAgICAg
ICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsK
KysgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlhbmdsZSwgbW92ZSB0byBuZXh0IHRy
aWFuZ2xlCisrICAgICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHsKK0BAIC0yODYsMTUg
KzI4MiwxNiBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAg
ICAgICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBzcmNQcmV2SWR4OworICAgICAgICAgICAgICAg
ICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBp
ZiAoY29tcGxldGVUcmlhbmdsZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1l
bWNweShkc3RQdHIgKyAzICogZHN0VHJpYW5nbGUsIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CisrICAgICAgICAgICAgfQor
ICAgICAgICAgICAgIHNyY1ByZXZJZHggPSBzcmNJZHg7CistCistICAgICAgICAgICAgbWVtY3B5
KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOwor
ICAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAgICAgbWVtY3B5KCZz
cmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0KKyAgICAgICAg
IGZvciAoR0xzaXplaSBpID0gMjsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICB7CisgICAgICAg
ICAgICAgVCBzcmNJZHg7CitAQCAtMzA2LDE0ICszMDMsNjggQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJ
ZHg7CisgICAgICAgICAgICAgc3JjUHJldklkeCAgICA9IHNyY0lkeDsKKyAKKy0gICAgICAgICAg
ICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJp
SW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKysgICAgICAgICAgICArK2RzdFRyaWFuZ2xl
OworICAgICAgICAgfQorICAgICB9CistICAgIGRzdEJ1ZmZlci0+dW5tYXBBbmRGbHVzaFN1YnNl
dChjb250ZXh0TXRsLCBkc3RPZmZzZXQsIGdlbkluZGljZXNDb3VudCAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJh
dGVkID0gZHN0VHJpYW5nbGUgKiAzOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwp
OworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorK2FuZ2xlOjpSZXN1bHQgR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQgKmluZGljZXMsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVmZmVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZz
ZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
aWNlc0dlbmVyYXRlZCkKKyt7CisrICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0YXJ0
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKysgICAgdWludDMyX3QgKmRz
dFB0ciAgICAgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNv
bnRleHRNdGwpICsgZHN0T2Zmc2V0KTsKKysgICAgR0xzaXplaSByZWFkVmFsdWVMb2MgPSAwOwor
KyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisrICAgIHVpbnQzMl90IGRzdElkeCAgICAg
ID0gMDsKKysgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMsIHNpemVvZihyZWFkVmFsdWUp
KTsKKysgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQor
KyAgICB7CisrCisrICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgIG1lbWNweSgmcmVh
ZFZhbHVlLCBpbmRpY2VzICsgcmVhZFZhbHVlTG9jLCBzaXplb2YocmVhZFZhbHVlKSk7CisrICAg
IH0KKysgICAgd2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0gY291
bnQpCisrICAgIHsKKysKKysgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKysgICAg
ICAgIGJvb2wgZm91bmRQcmltaXRpdmUgPSB0cnVlOworKyAgICAgICAgZm9yIChpbnQgayA9IDA7
IGsgPCBpbmRpY2VzUGVyUHJpbWl0aXZlOyArK2spCisrICAgICAgICB7CisrICAgICAgICAgICAg
bWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFs
dWUpKTsKKysgICAgICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgICAgICBpZiAocmVh
ZFZhbHVlID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICBmb3VuZFByaW1pdGl2ZSA9IGZhbHNlOworKyAgICAgICAgICAgICAgICBi
cmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgcHJpbUluZGljaWVzW2tdID0gKHVpbnQzMl90KXJlYWRWYWx1ZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoZm91bmRQcmltaXRpdmUp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUlu
ZGljaWVzLCAoaW5kaWNlc1BlclByaW1pdGl2ZSkgKiBzaXplb2YodWludDMyX3QpKTsKKysgICAg
ICAgICAgICBkc3RJZHggKz0gaW5kaWNlc1BlclByaW1pdGl2ZTsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJhdGVk
ID0gZHN0SWR4OworKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrfQorKwor
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xp
ZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCitAQCAtMzI4LDE0ICszNzks
MTEgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICBjb25z
dCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOworIAorICAgICB1aW50MzJfdCAqZHN0UHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCAqPihkc3RCdWZmZXItPm1hcChjb250ZXh0TXRsKSArIGRzdE9mZnNl
dCk7CistICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1cnJlbnQgbGluZSBs
b29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KKy0gICAgLy8gZW5jb3Vu
dGVyIGEgcHJpbWl0aXZlIHJlc3RhcnQgaW5kZXguCisgICAgIFQgbGluZUxvb3BGaXJzdElkeDsK
KyAgICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2YobGluZUxvb3BG
aXJzdElkeCkpOworIAorICAgICBpZiAocHJpbWl0aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsK
Ky0gICAgICAgIC8vIGxpbmVMb29wRmlyc3RJZHhMb2M6IGxvY2F0aW9uIG9mIGN1cnJlbnQgbGlu
ZSBsb29wJ3MgZmlyc3QgdmVydGV4IGluIHRoZSBzb3VyY2UgYnVmZmVyLgorICAgICAgICAgR0xz
aXplaSBsaW5lTG9vcEZpcnN0SWR4TG9jID0gMDsKKyAgICAgICAgIHdoaWxlIChsaW5lTG9vcEZp
cnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7CitAQCAtMzQ0
LDE1ICszOTIsMTIgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAor
ICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BGaXJzdElkeCwgaW5kaWNlcyArIGxpbmVMb29w
Rmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CisgICAgICAgICB9CisgCist
ICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0dGVuIHRvIGRlc3Qg
YnVmZmVyCisgICAgICAgICB1aW50MzJfdCBkc3RJZHggPSBsaW5lTG9vcEZpcnN0SWR4OworICAg
ICAgICAgbWVtY3B5KCZkc3RQdHJbbGluZUxvb3BGaXJzdElkeExvY10sICZkc3RJZHgsIHNpemVv
Zihkc3RJZHgpKTsKKy0gICAgICAgIC8vIGRzdFdyaXR0ZW46IG51bWJlciBvZiBpbmRpY2VzIHdy
aXR0ZW4gdG8gZGVzdCBidWZmZXIKKyAgICAgICAgIHVpbnQzMl90IGRzdFdyaXR0ZW4gPSBsaW5l
TG9vcEZpcnN0SWR4TG9jICsgMTsKKyAKKyAgICAgICAgIGZvciAoR0xzaXplaSBpID0gbGluZUxv
b3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgeworLSAgICAgICAg
ICAgIC8vIHNyY0lkeCA6IHZhbHVlIG9mIGluZGV4IGZyb20gc291cmNlIGJ1ZmZlcgorICAgICAg
ICAgICAgIFQgc3JjSWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsg
aSwgc2l6ZW9mKHNyY0lkeCkpOworICAgICAgICAgICAgIGlmIChzcmNJZHggPT0ga1NyY1ByaW1p
dGl2ZVJlc3RhcnRJbmRleCkKK0BAIC00MDAsNyArNDQ1LDcgQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorIAorICAgICAgICAgKmluZGljZXNHZW5lcmF0ZWQgPSBj
b3VudCArIDE7CisgICAgIH0KKy0gICAgZHN0QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNv
bnRleHRNdGwsIGRzdE9mZnNldCwgKCppbmRpY2VzR2VuZXJhdGVkKSAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwpOworIAorICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTQ3Miw3ICs1MTcsNyBAQCB2b2lkIEVu
c3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKERpc3BsYXlNdGwgKmRpc3BsYXksCisgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKyAgICAgICAgIGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworLSAgICAgICAgaWQ8TVRMTGli
cmFyeT4gc2hhZGVyTGliICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisrICAg
ICAgICBhdXRvIHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRl
cnNMaWIoKTsKKyAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICAgPSBuaWw7CisgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldp
dGhOYW1lOmZ1bmN0aW9uTmFtZV07CisgCitAQCAtNTEyLDcgKzU1Nyw3IEBAIHZvaWQgRW5zdXJl
U3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKKyAgICAgQU5HTEVfTVRMX09C
SkNfU0NPUEUKKyAgICAgeworICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRp
c3BsYXktPmdldE1ldGFsRGV2aWNlKCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJM
aWIgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKysgICAgICAgIGF1dG8gc2hh
ZGVyTGliICAgICAgICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAg
ICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKKyAKKyAgICAgICAgIGlkPE1U
TEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rp
b25OYW1lCitAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRl
UGlwZWxpbmVJbml0aWFsaXplZCgKKyBBTkdMRV9JTkxJTkUKKyB2b2lkIEVuc3VyZVZlcnRleFNo
YWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcg
KnZlcnRleEZ1bmN0aW9uTmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJQaXBlbGluZUNh
Y2hlICpwaXBlbGluZUNhY2hlT3V0KQorIHsKKyAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmcGlw
ZWxpbmVDYWNoZSA9ICpwaXBlbGluZUNhY2hlT3V0OworQEAgLTU0OSw4ICs1OTUsNiBAQCB2b2lk
IEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAq
Y29udGV4dCwKKyAKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgeworLSAgICAgICAg
RGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworLSAgICAg
ICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNM
aWIoKTsKKyAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1
bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAKKyAgICAgICAgIEFTU0VSVChb
c2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOworQEAgLTU3MCw3ICs2MTQsOSBAQCB2b2lk
IEVuc3VyZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXpl
ZCgKKyAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQorICAgICB7CisgICAgICAgICAvLyBOb24gc3Bl
Y2lhbGl6ZWQgY29uc3RhbnRzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlv
bi4KKy0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6
ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAorKyAgICAgICAgRGlzcGxheU10bCAqZGlz
cGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKysgICAgICAgIGF1dG8gc2hhZGVyTGliICAg
ICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2ZXJ0ZXhGdW5j
dGlvbk5hbWUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVDYWNoZU91dCk7CisgICAgICAgICByZXR1cm47
CisgICAgIH0KK0BAIC01ODUsNyArNjMxLDcgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRl
eFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCisgICAgIEFOR0xFX01UTF9PQkpD
X1NDT1BFCisgICAgIHsKKyAgICAgICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgPSBjb250ZXh0LT5n
ZXREaXNwbGF5KCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5
LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgICBOU0Vycm9yICplcnIg
ICAgICAgID0gbmlsOworIAorICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFk
ZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKK0BAIC02MTUsNiAr
NjYxLDIyIEBAIFJlbmRlclBpcGVsaW5lRGVzYyBHZXRDb21wdXRpbmdWZXJ0ZXhTaGFkZXJPbmx5
UmVuZGVyUGlwZWxpbmVEZXNjKFJlbmRlckNvbW1hbmRFCisgICAgIHJldHVybiBwaXBlbGluZURl
c2M7CisgfQorIAorKy8vIEdldCBwaXBlbGluZSBkZXNjcmlwdG9yIGZvciByZW5kZXIgcGlwZWxp
bmUgdGhhdCBjb250YWlucyB2ZXJ0ZXggc2hhZGVyIGFjdGluZyBhcyB0cmFuc2Zvcm0KKysvLyBm
ZWVkYmFjay4KKytBTkdMRV9JTkxJTkUKKytSZW5kZXJQaXBlbGluZURlc2MgR2V0VHJhbnNmb3Jt
RmVlZGJhY2tSZW5kZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBS
ZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNjICAgPSBSZW5kZXJQaXBlbGluZURlc2Mo
cGlwZWxpbmVEZXNjKTsKKysgICAgY29uc3QgUmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNj
ID0gY21kRW5jb2Rlci0+cmVuZGVyUGFzc0Rlc2MoKTsKKysKKysgICAgcmVuZGVyUGFzc0Rlc2Mu
cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoJnBpcGVsaW5lRGVzYy5vdXRwdXREZXNj
cmlwdG9yKTsKKysgICAgeGZiUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgPSBSZW5k
ZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICB4ZmJQaXBlbGluZURlc2Mu
aW5wdXRQcmltaXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7Cisr
CisrICAgIHJldHVybiB4ZmJQaXBlbGluZURlc2M7CisrfQorKworIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorIHZvaWQgQ2xlYXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNo
ZUFycmF5KQorIHsKK0BAIC03MTIsOSArNzc0LDE1IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdV
bmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgdW5pZm9y
bVBhcmFtcy5zcmNMYXllciA9IHBhcmFtcy5zcmNMYXllcjsKKyAgICAgaWYgKGlzQ29sb3JCbGl0
KQorICAgICB7CistICAgICAgICBjb25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOworKyAgICAgICAg
Y29uc3QgYXV0byBjb2xvclBhcmFtcyAgICAgPSBzdGF0aWNfY2FzdDxjb25zdCBDb2xvckJsaXRQ
YXJhbXMgKj4oJnBhcmFtcyk7CisgICAgICAgICB1bmlmb3JtUGFyYW1zLmRzdEx1bWluYW5jZSA9
IGNvbG9yUGFyYW1zLT5kc3RMdW1pbmFuY2UgPyAxIDogMDsKKyAgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKysgICAgICAgIHVuaWZvcm1Q
YXJhbXMuc3JjTGV2ZWwyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbDsKKysgICAgICAgIHVu
aWZvcm1QYXJhbXMuc3JjTGF5ZXIyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMYXllcjsKKysgICAg
fQorIAorICAgICAvLyBDb21wdXRlIHNvdXJjZSB0ZXhDb29yZHMKKyAgICAgdWludDMyX3Qgc3Jj
V2lkdGggPSAwLCBzcmNIZWlnaHQgPSAwOworQEAgLTcyNyw4ICs3OTUsOCBAQCB2b2lkIFNldHVw
QmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
CisgICAgIHsKKyAgICAgICAgIGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKmRzUGFyYW1z
ID0KKyAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1z
ICo+KCZwYXJhbXMpOworLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwt
PndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7CistICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbC0+aGVpZ2h0KGRzUGFyYW1zLT5zcmNMZXZlbCk7CisrICAgICAgICBzcmNX
aWR0aCAgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+d2lkdGgobXRsOjpNaXBtYXBOYXRpdmVMZXZl
bChkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsKSk7CisrICAgICAgICBzcmNIZWlnaHQgPSBkc1Bh
cmFtcy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMt
PnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTczOSw4
ICs4MDcsOCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgIEdldEJsaXRUZXhDb29yZHMoc3JjV2lkdGgsIHNy
Y0hlaWdodCwgcGFyYW1zLnNyY1JlY3QsIHBhcmFtcy5zcmNZRmxpcHBlZCwgcGFyYW1zLnVucGFj
a0ZsaXBYLAorICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUwLCAm
djAsICZ1MSwgJnYxKTsKKyAKKy0gICAgZmxvYXQgZHUgPSB1MSAtIHUwOworLSAgICBmbG9hdCBk
diA9IHYxIC0gdjA7CisrICAgIGF1dG8gZHUgPSB1MSAtIHUwOworKyAgICBhdXRvIGR2ID0gdjEg
LSB2MDsKKyAKKyAgICAgLy8gbG93ZXIgbGVmdAorICAgICB1bmlmb3JtUGFyYW1zLnNyY1RleENv
b3Jkc1swXVswXSA9IHUwOworQEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lk
IFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIC8vIFN0
ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zIGltcGxlbWVudGF0aW9uCisgU3RlbmNpbEJsaXRWaWFC
dWZmZXJQYXJhbXM6OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKCkge30KKyAKKy1TdGVuY2ls
QmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMoY29uc3QgRGVw
dGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjSW4pCisrU3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXM6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMg
JnNyY1BhcmFtcykKKyB7CistICAgIGRzdFRleHR1cmVTaXplID0gc3JjSW4uZHN0VGV4dHVyZVNp
emU7CistICAgIGRzdFJlY3QgICAgICAgID0gc3JjSW4uZHN0UmVjdDsKKy0gICAgZHN0U2Npc3Nv
clJlY3QgPSBzcmNJbi5kc3RTY2lzc29yUmVjdDsKKy0gICAgZHN0RmxpcFkgICAgICAgPSBzcmNJ
bi5kc3RGbGlwWTsKKy0gICAgZHN0RmxpcFggICAgICAgPSBzcmNJbi5kc3RGbGlwWDsKKy0gICAg
c3JjUmVjdCAgICAgICAgPSBzcmNJbi5zcmNSZWN0OworLSAgICBzcmNZRmxpcHBlZCAgICA9IHNy
Y0luLnNyY1lGbGlwcGVkOworLSAgICB1bnBhY2tGbGlwWCAgICA9IHNyY0luLnVucGFja0ZsaXBY
OworLSAgICB1bnBhY2tGbGlwWSAgICA9IHNyY0luLnVucGFja0ZsaXBZOworKyAgICBkc3RUZXh0
dXJlU2l6ZSA9IHNyY1BhcmFtcy5kc3RUZXh0dXJlU2l6ZTsKKysgICAgZHN0UmVjdCAgICAgICAg
PSBzcmNQYXJhbXMuZHN0UmVjdDsKKysgICAgZHN0U2Npc3NvclJlY3QgPSBzcmNQYXJhbXMuZHN0
U2Npc3NvclJlY3Q7CisrICAgIGRzdEZsaXBZICAgICAgID0gc3JjUGFyYW1zLmRzdEZsaXBZOwor
KyAgICBkc3RGbGlwWCAgICAgICA9IHNyY1BhcmFtcy5kc3RGbGlwWDsKKysgICAgc3JjUmVjdCAg
ICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsKKysgICAgc3JjWUZsaXBwZWQgICAgPSBzcmNQYXJh
bXMuc3JjWUZsaXBwZWQ7CisrICAgIHVucGFja0ZsaXBYICAgID0gc3JjUGFyYW1zLnVucGFja0Zs
aXBYOworKyAgICB1bnBhY2tGbGlwWSAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWTsKKyAKKy0g
ICAgc3JjU3RlbmNpbCA9IHNyY0luLnNyY1N0ZW5jaWw7CisrICAgIHNyY1N0ZW5jaWwgICAgICA9
IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworKyAgICBzcmNTdGVuY2lsTGV2ZWwgPSBzcmNQYXJhbXMu
c3JjU3RlbmNpbExldmVsOworKyAgICBzcmNTdGVuY2lsTGF5ZXIgPSBzcmNQYXJhbXMuc3JjU3Rl
bmNpbExheWVyOworIH0KKyAKKyAvLyBSZW5kZXJVdGlscyBpbXBsZW1lbnRhdGlvbgorQEAgLTkw
Myw2ICs5NzMsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorIH0KKyAKKysKKyAvLyBvdmVycmlkZSBF
cnJvckhhbmRsZXIKKyB2b2lkIFJlbmRlclV0aWxzOjpoYW5kbGVFcnJvcihHTGVudW0gZ2xFcnJv
ckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwK
K0BAIC0xMDE2LDkgKzEwODcsMTAgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0
ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgfQorIGFuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCisgICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAm
cGFyYW1zKQorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
dWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCisgeworLSAgICByZXR1cm4gbUluZGV4VXRpbHMu
Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMp
OworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVu
dHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworIH0KKyAKKyBh
bmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5
cygKK0BAIC0xMDUwLDYgKzExMjIsMjYgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVT
dGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgeworICAgICByZXR1cm4gbUlu
ZGV4VXRpbHMuZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoY29u
dGV4dE10bCwgcGFyYW1zKTsKKyB9CisrYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNl
c0dlbmVyYXRlZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRl
ZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCkKKyt7CisrICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlj
ZXNHZW5lcmF0ZWQpOworK30KKyAKKyB2b2lkIFJlbmRlclV0aWxzOjpjb21iaW5lVmlzaWJpbGl0
eVJlc3VsdCgKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0xMTIxLDYgKzEyMTMs
MjEgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNPKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
ID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBQ
U08KKysgICAgYXV0byBwc28gPSBtVHJhbnNmb3JtRmVlZGJhY2tVdGlscy5nZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lKGNvbnRleHRNdGwsIHJlbmRlckVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwaXBlbGluZURlc2MpOworKyAgICBpZiAocHNvKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisrfQorKworIC8vIENsZWFyVXRpbHMgaW1wbGVtZW50YXRpb24K
KyBDbGVhclV0aWxzOjpDbGVhclV0aWxzKGNvbnN0IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRl
ck5hbWUpCisgICAgIDogbUZyYWdtZW50U2hhZGVyTmFtZShmcmFnbWVudFNoYWRlck5hbWUpCitA
QCAtMTI4NywxMSArMTM5NCwxMSBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRl
KENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgeworICAgICAgICAgb3ZlcnJp
ZGVkUGFyYW1zLmNsZWFyQ29sb3IucmVzZXQoKTsKKyAgICAgfQorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIG92ZXJyaWRlZFBh
cmFtcy5jbGVhckRlcHRoLnJlc2V0KCk7CisgICAgIH0KKy0gICAgaWYgKCFyZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0
ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKSkKKyAgICAgeworICAgICAgICAgb3ZlcnJpZGVkUGFy
YW1zLmNsZWFyU3RlbmNpbC5yZXNldCgpOworICAgICB9CitAQCAtMTMwNyw3ICsxNDE0LDcgQEAg
QU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAgICAv
LyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgY2xlYXJpbmcgd2ls
bCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJsZU9j
Y2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0KTsK
KysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVl
cnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3IHRo
ZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhNVExQ
cmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTQ4MSw3ICsxNTg4LDcg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAg
ICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRpbmcg
d2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJs
ZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0
KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9u
UXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3
IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhN
VExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTcwMyw3ICsxODEw
LDcgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAg
ICAgICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRp
bmcgd2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlz
YWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVz
dWx0KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVz
aW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBE
cmF3IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJh
dyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMjAwMiw3ICsy
MTA5LDggQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFu
ZEVuY29kZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxz
OjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAorICAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykK
KysgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90
ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgY29uc3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0
ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJyYXkoKTsKKyAgICAg
Y29uc3QgZ2w6OkJ1ZmZlciAqZWxlbWVudEJ1ZmZlciAgICA9IHZlcnRleEFycmF5LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKK0BAIC0yMDEzLDEzICsyMTIxLDE0IEBAIEFOR0xFX0lOTElORSB2
b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAg
ICAgICAgQU5HTEVfQ0hFQ0soY29udGV4dE10bCwgc3JjT2Zmc2V0IDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICJJbmRleCBvZmZz
ZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICBpZiAocGFyYW1z
LnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkIHx8CistICAgICAgICAgICAgKCFjb250ZXh0TXRsLT5n
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYK
KysgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5i
cmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKKyAgICAgICAgICAgICAgY29udGV4dE10
bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkpCisgICAgICAgICB7CisgICAgICAgICAgICAg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAg
ICAgY3B1UGF0aFBhcmFtcy5pbmRpY2VzID0KKyAgICAgICAgICAgICAgICAgZWxlbWVudEJ1ZmZl
ck10bC0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBzcmNPZmZzZXQ7Cist
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlD
UFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisrICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBh
cmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UK
KyAgICAgICAgIHsKK0BAIC0yMDMwLDcgKzIxMzksNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQ
aXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorICAg
ICBlbHNlCisgICAgIHsKKy0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisrICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBwYXJhbXMs
IGluZGljZXNHZW5lcmF0ZWQpOworICAgICB9CisgfQorIAorQEAgLTIwNzQsMjIgKzIxODMsMjMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5l
cmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAorICAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykKKysg
ICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90ICpn
ZW5JbmRpY2VzKQorIHsKKyAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKKyAgICAgeworICAg
ICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRCeXRlOgorICAgICAgICAg
ICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCisgICAgICAgICAgICAgICAg
IGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQsCistICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ocGFy
YW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRTaG9ydDoKKyAgICAgICAgICAg
ICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKAorICAgICAgICAgICAgICAgICBj
b250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFi
bGVkLAorLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJh
bXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQpOworKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICAg
cmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygKKyAgICAgICAgICAgICAgICAgY29u
dGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxl
ZCwKKy0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1z
LmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBw
YXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKKyAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgfQorQEAgLTIzMDEs
NiArMjQxMSw1NiBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgcmV0dXJuIGdlbmVyYXRlTGluZUxvb3BMYXN0
U2VnbWVudChjb250ZXh0TXRsLCBmaXJzdCwgbGFzdCwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1z
LmRzdE9mZnNldCk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6
Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLAorKyAgICB1bnNpZ25lZCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKKyt7CisrICAgIHN3aXRjaCAocGFyYW1zLnNyY1R5cGUpCisrICAgIHsKKysgICAgICAg
IGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKKysgICAgICAgICAgICBy
ZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhD
b3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMu
aW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7Cisr
ICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgorKyAgICAg
ICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFt
cy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAq
PihwYXJhbXMuaW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVy
YXRlZCk7CisrICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZEludDoK
KysgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRs
LCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGluZGlj
ZXNHZW5lcmF0ZWQpOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworKyAgICB9Cisr
fQorKworK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRp
dmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
KyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICpp
bmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dEJ1ZmZlcihjb250ZXh0TXRsLCAzLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysK
KythbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydExpbmVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25z
dCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICppbmRpY2VzR2Vu
ZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihj
b250ZXh0TXRsLCAyLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysKKythbmdsZTo6
UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50
c0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkK
Kyt7CisrICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10
bCwgMSwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKKyt9CisrCisgLy8gVmlzaWJpbGl0eVJl
c3VsdFV0aWxzIGltcGxlbWVudGF0aW9uCisgdm9pZCBWaXNpYmlsaXR5UmVzdWx0VXRpbHM6Om9u
RGVzdHJveSgpCisgeworQEAgLTIzNzYsNiArMjUzNiw5IEBAIEFOR0xFX0lOTElORSB2b2lkIFNl
dFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIHZvaWQgTWlw
bWFwVXRpbHM6Om9uRGVzdHJveSgpCisgeworICAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAg
ICAgID0gbmlsOworKyAgICBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOworKyAg
ICBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lID0gbmlsOworKyAgICBtQ3ViZU1pcEdlbmVy
YXRvclBpcGVsaW5lICAgID0gbmlsOworIH0KKyAKKyB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUz
RE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K0BAIC0yMzg0LDY2ICsyNTQ3LDc4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3Rh
dGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworIH0KKyAKKyt2b2lk
IE1pcG1hcFV0aWxzOjplbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZTJETWlwbWFwcyIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBl
bGluZSk7CisrfQorKworK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0
b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCisreworKyAgICBF
bnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCks
IEAiZ2VuZXJhdGUyREFycmF5TWlwbWFwcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyt9CisrCisrdm9pZCBN
aXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZUN1YmVNaXBtYXBzIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdWJlTWlwR2VuZXJhdG9y
UGlwZWxpbmUpOworK30KKysKKyBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1p
cG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZzcmNUZXh0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzUkdCTWlwbWFwLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVGV4TGV2
ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYXRpdmVUZXhMZXZlbEFycmF5ICogbWlwbWFwT3V0cHV0Vmlld3Mp
CisgeworLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93LgorLSAgICBBU1NF
UlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSA9PSBNVExUZXh0dXJlVHlwZTNEKTsKKysgICAg
Q29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0Q29tcHV0
ZUNvbW1hbmRFbmNvZGVyKCk7CisrICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKKyAKKyAgICAgTVRM
U2l6ZSB0aHJlYWRHcm91cFNpemU7CisgICAgIHVpbnQzMl90IHNsaWNlcyA9IDE7CistICAgIGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7CistCisrICAg
IHN3aXRjaCAoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBNVExUZXh0dXJlVHlwZTJEOgorKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlw
ZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5z
ZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgdGhyZWFkR3JvdXBTaXplID0gTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlMkRBcnJheToKKysgICAgICAgICAgICBl
bnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsK
KysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRBcnJh
eU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKysgICAgICAgICAgICBzbGljZXMgICAgICAgICAgPSBz
cmNUZXh0dXJlLT5hcnJheUxlbmd0aCgpOworKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9
IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91
cFNpemVQZXJEaW0sIDEpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBNVExU
ZXh0dXJlVHlwZUN1YmU6CisrICAgICAgICAgICAgZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CisrICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0
Q29tcHV0ZVBpcGVsaW5lU3RhdGUobUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgc2xpY2VzICAgICAgICAgID0gNjsKKysgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUg
PSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLCAxKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgTVRM
VGV4dHVyZVR5cGUzRDoKKyAgICAgICAgICAgICBlbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CistICAgIGNvbXB1dGVQaXBlbGluZSA9IG0zRE1pcEdl
bmVyYXRvclBpcGVsaW5lOworKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBl
bGluZVN0YXRlKG0zRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgICB0aHJlYWRH
cm91cFNpemUgPQorICAgICAgICAgICAgICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVy
RGltKTsKKy0KKy0gICAgLy8gVGhlIGNvbXB1dGUgc2hhZGVyIHN1cHBvcnRzIHVwIHRvIDQgbWlw
bWFwcyBnZW5lcmF0ZWQgcGVyIHBhc3MuCistICAgIC8vIFNlZSBzaGFkZXJzL2dlbl9taXBtYXAu
bWV0YWwKKy0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKKy0KKy0gICAgaWYgKHRo
cmVhZEdyb3VwU2l6ZS53aWR0aCAqIHRocmVhZEdyb3VwU2l6ZS5oZWlnaHQgKiB0aHJlYWRHcm91
cFNpemUuZGVwdGggPgorLSAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVh
ZHNQZXJUaHJlYWRncm91cCB8fAorLSAgICAgICAgQU5HTEVfVU5MSUtFTFkoCistICAgICAgICAg
ICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0dlbk11bHRp
cGxlTWlwc1BlclBhc3MuZW5hYmxlZCkpCistICAgIHsKKy0gICAgICAgIC8vIE11bHRpcGxlIG1p
cG1hcHMgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBoYXJkd2FyZSdzIHRocmVh
ZCBncm91cCBzaXplIGxpbWl0cy4KKy0gICAgICAgIC8vIEZhbGxiYWNrIHRvIGdlbmVyYXRlIG9u
ZSBtaXAgcGVyIHBhc3MgYW5kIHJlZHVjZSB0aHJlYWQgZ3JvdXAgc2l6ZS4KKy0gICAgICAgIGlm
IChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUu
aGVpZ2h0ID4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlUGlwZWxpbmUubWF4
VG90YWxUaHJlYWRzUGVyVGhyZWFkZ3JvdXApKQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8v
IEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3ZSBjYW5ub3QgcHJvY2VlZC4K
Ky0gICAgICAgICAgICAvLyBIQUNLOiB1c2UgYmxpdCBjb21tYW5kIGVuY29kZXIgdG8gZ2VuZXJh
dGUgbWlwbWFwcyBpZiBpdCBpcyBub3QgcG9zc2libGUKKy0gICAgICAgICAgICAvLyB0byB1c2Ug
Y29tcHV0ZSBzaGFkZXIgZHVlIHRvIGhhcmR3YXJlIGxpbWl0cy4KKy0gICAgICAgICAgICBCbGl0
Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRF
bmNvZGVyKCk7CistICAgICAgICAgICAgYmxpdEVuY29kZXItPmdlbmVyYXRlTWlwbWFwc0ZvclRl
eHR1cmUoc3JjVGV4dHVyZSk7CistICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworLSAgICAgICAgfQorLQorLSAgICAgICAgdGhyZWFkR3JvdXBTaXplLmRlcHRoID0g
MTsKKy0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
IH0KKyAKKy0gICAgQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10
bC0+Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCk7CistICAgIEFTU0VSVChjbWRFbmNvZGVyKTsK
Ky0gICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUoY29tcHV0ZVBpcGVsaW5l
KTsKKy0KKy0gICAgR2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIEdlbmVyYXRl
M0RNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIHVpbnQzMl90IG1heE1pcHNQZXJCYXRjaCA9
IDQ7CisgCisgICAgIHVpbnQzMl90IHJlbWFpbk1pcHMgPSBzcmNUZXh0dXJlLT5taXBtYXBMZXZl
bHMoKSAtIDE7CistICAgIE1pcG1hcE5hdGl2ZUxldmVsIGJhdGNoU3JjTGV2ZWwgPSBrWmVyb05h
dGl2ZU1pcExldmVsOworLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAgID0gYmF0
Y2hTcmNMZXZlbC5nZXQoKTsKKy0gICAgb3B0aW9ucy5zUkdCICAgICAgICAgICAgICAgICAgICA9
IHNSR0JNaXBtYXA7CisrICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOworIAorICAgICBjbWRF
bmNvZGVyLT5zZXRUZXh0dXJlKHNyY1RleHR1cmUsIDApOworICAgICBjbWRFbmNvZGVyLT5tYXJr
UmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKKyAgICAgd2hpbGUgKHJlbWFp
bk1pcHMpCisgICAgIHsKKy0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9
IG1pcG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisrICAgICAgICBjb25z
dCBUZXh0dXJlUmVmICZmaXJzdE1pcFZpZXcgPSBtaXBtYXBPdXRwdXRWaWV3cy0+YXQobXRsOjpN
aXBtYXBOYXRpdmVMZXZlbChvcHRpb25zLnNyY0xldmVsICsgMSkpOworICAgICAgICAgZ2w6OkV4
dGVudHMgc2l6ZSAgICAgICAgICAgICAgID0gZmlyc3RNaXBWaWV3LT5zaXplQXQwKCk7CisgICAg
ICAgICBib29sIGlzUG93MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93Mihz
aXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKKyAKK0BAIC0yNDYxLDIwICsy
NjM2LDE4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIAorICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8
PSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOyArK2kpCisgICAgICAgICB7CistICAgICAg
ICAgICAgY21kRW5jb2Rlci0+c2V0VGV4dHVyZShtaXBtYXBPdXRwdXRWaWV3cy0+YXQoYmF0Y2hT
cmNMZXZlbCArIGkpLCBpKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1p
cG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2
ZWwgKyBpKSksIGkpOworICAgICAgICAgfQorIAorICAgICAgICAgdWludDMyX3QgdGhyZWFkc1Bl
clogPSBzdGQ6Om1heChzbGljZXMsIGZpcnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CisgCistICAg
ICAgICBEaXNwYXRjaENvbXB1dGUoCistICAgICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2Rl
ciwKKysgICAgICAgIERpc3BhdGNoQ29tcHV0ZShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qKiBhbGxvd05vblVuaWZvcm0gKi8gZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2UoZmlyc3RNaXBWaWV3LT53aWR0aEF0MCgp
LCBmaXJzdE1pcFZpZXctPmhlaWdodEF0MCgpLCB0aHJlYWRzUGVyWiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplKTsKKyAKKyAgICAgICAgIHJlbWFpbk1pcHMgLT0g
b3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAgIGJhdGNoU3JjTGV2ZWwgICAg
PSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAg
IG9wdGlvbnMuc3JjTGV2ZWwgPSBiYXRjaFNyY0xldmVsLmdldCgpOworKyAgICAgICAgb3B0aW9u
cy5zcmNMZXZlbCArPSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOworICAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK0BAIC0yNTA0LDggKzI2NzcsNyBA
QCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2Rl
ciAqZW5jb2RlciwKKyAgICAgaW50IHNoYWRlclRleHR1cmVUeXBlID0gR2V0U2hhZGVyVGV4dHVy
ZVR5cGUodGV4dHVyZSk7CisgICAgIGludCBpbmRleDIgPSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5
cGVDb3VudCAqIChidWZmZXJXcml0ZSA/IDEgOiAwKSArIHNoYWRlclRleHR1cmVUeXBlOworIAor
LSAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+ICZjYWNoZSA9Cist
ICAgICAgICBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07
CisrICAgIGF1dG8gJmNhY2hlID0gbVBpeGVsc0NvcHlQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZh
bHVlXVtpbmRleDJdOworIAorICAgICBpZiAoIWNhY2hlKQorICAgICB7CitAQCAtMjc4Myw3ICsy
OTU1LDEwIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29t
cG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIpCisgeworKyAgICBEaXNwbGF5TXRs
ICpkaXNwbGF5ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICBhdXRvIHNoYWRlckxp
YiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0TXRsLCBAImV4cGFu
ZFZlcnRleEZvcm1hdENvbXBvbmVudHNWUyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTGliLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBp
cGVsaW5lQ2FjaGUpOworIAorICAgICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0g
R2V0Q29tcHV0aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVy
KTsKK0BAIC0yNzk3LDggKzI5NzIsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0
YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyB7CisgICAgIGludCBmb3JtYXRJ
RFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihzcmNBbmdsZUZvcm1hdC5pZCk7CisgCistICAgIEF1
dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KKy0gICAgICAg
IG1Db252ZXJ0VG9GbG9hdENvbXBQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKKysgICAg
YXV0byAmY2FjaGUgPSBtQ29udmVydFRvRmxvYXRDb21wUGlwZWxpbmVDYWNoZXNbZm9ybWF0SURW
YWx1ZV07CisgCisgICAgIGlmICghY2FjaGUpCisgICAgIHsKK0BAIC0yODQ5LDUgKzMwMjMsNTMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIHJldHVybiBjYWNoZS5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNv
bnRleHRNdGwsIHBpcGVsaW5lRGVzYyk7CisgfQorIAorK0F1dG9PYmpDUHRyPGlkPE1UTExpYnJh
cnk+PiBUcmFuc2Zvcm1GZWVkYmFja1V0aWxzOjpjcmVhdGVNc2xYZmJMaWJyYXJ5KAorKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRl
ZE1zbCkKKyt7CisrICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgIHsKKysgICAgICAgIERp
c3BsYXlNdGwgKmRpc3BsYXkgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICAg
ICAgaWQ8TVRMRGV2aWNlPiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwor
KworKyAgICAgICAgLy8gQ29udmVydCB0byBhY3R1YWwgYmluYXJ5IHNoYWRlcgorKyAgICAgICAg
bXRsOjpBdXRvT2JqQ1B0cjxOU0Vycm9yICo+IGVyciA9IG5pbDsKKysgICAgICAgIG10bDo6QXV0
b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG10bFNoYWRlckxpYiA9CisrICAgICAgICAgICAgbXRs
OjpDcmVhdGVTaGFkZXJMaWJyYXJ5KG10bERldmljZSwgdHJhbnNsYXRlZE1zbCwgJmVycik7Cisr
ICAgICAgICBpZiAoZXJyICYmICFtdGxTaGFkZXJMaWIpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgTlNMb2coQCIlQCIsIGVyci5nZXQoKSk7CisrICAgICAgICAgICAgYXNzZXJ0KDApOworKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIG10bFNoYWRlckxpYjsKKysgICAgfQorK30KKysKKytB
dXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tV
dGlsczo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSgKKysgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCwKKysgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisr
ICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBjb25z
dCBQcm9ncmFtTXRsICpwcm9ncmFtTXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHRNdGwtPmdldFN0
YXRlKCkuZ2V0UHJvZ3JhbSgpKTsKKysgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmY2FjaGUgICA9
ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworKworKyAgICBpZiAo
IWNhY2hlLmdldFZlcnRleFNoYWRlcigpKQorKyAgICB7CisrICAgICAgICAvLyBQaXBlbGluZSBj
YWNoZSBub3QgaW50aWFsaXplZCwgZG8gaXQgbm93OgorKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIHNoYWRlckxpYiA9IGNyZWF0ZU1z
bFhmYkxpYnJhcnkoY29udGV4dE10bCwgcHJvZ3JhbU10bC0+Z2V0WGZiTXNsU291cmNlKCkpOwor
KyAgICAgICAgICAgIC8vIE5vbiBzcGVjaWFsaXplZCBjb25zdGFudHMgcHJvdmlkZWQsIHVzZSBk
ZWZhdWx0IGNyZWF0aW9uIGZ1bmN0aW9uLgorKyAgICAgICAgICAgIEVuc3VyZVZlcnRleFNoYWRl
ck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgU0hBREVSX0VOVFJZX05B
TUUsIHNoYWRlckxpYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjYWNoZSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAg
UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9CisrICAgICAgICBHZXRUcmFuc2Zv
cm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpOwor
KworKyAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0TXRsLCB4
ZmJQaXBlbGluZURlc2MpOworK30KKysKKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgK
K2luZGV4IGYyMjA2NTAuLjJlMzMzNGQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3Jlc291cmNlcy5oCitAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBSZXNvdXJjZSA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3Qg
eyByZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KKyAgICAgdm9pZCByZXNl
dENQVVJlYWRNZW1OZWVkU3luYygpIHsgbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmMgPSBm
YWxzZTsgfQorIAorLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVy
TXRsIHRvIGtub3cgd2hldGhlciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQorICAg
ICBib29sIGlzQ1BVUmVhZE1lbURpcnR5KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlUmVmLT5jcHVS
ZWFkTWVtRGlydHk7IH0KKyAgICAgdm9pZCByZXNldENQVVJlYWRNZW1EaXJ0eSgpIHsgbVVzYWdl
UmVmLT5jcHVSZWFkTWVtRGlydHkgPSBmYWxzZTsgfQorIAorQEAgLTgxLDcgKzgwLDcgQEAgY2xh
c3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgIHVpbnQ2NF90IGNtZEJ1
ZmZlclF1ZXVlU2VyaWFsID0gMDsKKyAKKyAgICAgICAgIC8vIFRoaXMgZmxhZyBtZWFucyB0aGUg
cmVzb3VyY2Ugd2FzIGlzc3VlZCB0byBiZSBtb2RpZmllZCBieSBHUFUsIGlmIENQVSB3YW50cyB0
byByZWFkCistICAgICAgICAvLyBpdHMgY29udGVudCwgZXhwbGljaXQgc3luY2hyb25pemF0aW9u
IGNhbGwgbXVzdCBiZSBpbnZva2VkLgorKyAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0
IHN5bmNob3JuaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KKyAgICAgICAgIGJvb2wgY3B1
UmVhZE1lbU5lZWRTeW5jID0gZmFsc2U7CisgCisgICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNl
ZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNo
YWRvdyBjb3B5CitAQCAtMTEwLDYgKzEwOSwxMyBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVi
bGljIFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIC8vIE9uIG1hY09TLCBtZW1vcnkgd2ls
bCBzdGlsbCBiZSBhbGxvY2F0ZWQgZm9yIHRoaXMgdGV4dHVyZS4KKysgICAgc3RhdGljIGFuZ2xl
OjpSZXN1bHQgTWFrZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9y
bWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAg
IHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0
ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBzaXplLAorQEAgLTE0NywxMCArMTUzLDIxIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBw
dWJsaWMgUmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKyAKKysgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQg
TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdp
ZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworKworICAgICBzdGF0aWMg
VGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7Cisg
CisgICAgIC8vIEFsbG93IENQVSB0byByZWFkICYgd3JpdGUgZGF0YSBkaXJlY3RseSB0byB0aGlz
IHRleHR1cmU/CisgICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7CisrICAgIC8vIEFs
bG93IHNoYWRlcnMgdG8gcmVhZC9zYW1wbGUgdGhpcyB0ZXh0dXJlPworKyAgICAvLyBUZXh0dXJl
IGNyZWF0ZWQgd2l0aCByZW5kZXJUYXJnZXRPbmx5IGZsYWcgd29uJ3QgYmUgcmVhZGFibGUKKysg
ICAgYm9vbCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CisgCisgICAgIGJvb2wgc3VwcG9ydEZv
cm1hdFZpZXcoKSBjb25zdDsKKyAKK0BAIC0yMTgsMTYgKzIzNSwyOSBAQCBjbGFzcyBUZXh0dXJl
IGZpbmFsIDogcHVibGljIFJlc291cmNlLAorICAgICBNVExDb2xvcldyaXRlTWFzayBnZXRDb2xv
cldyaXRhYmxlTWFzaygpIGNvbnN0IHsgcmV0dXJuICptQ29sb3JXcml0YWJsZU1hc2s7IH0KKyAg
ICAgdm9pZCBzZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICpt
Q29sb3JXcml0YWJsZU1hc2sgPSBtYXNrOyB9CisgCistICAgIC8vIEdldCBsaW5lYXIgY29sb3Ig
c3BhY2Ugdmlldy4gT25seSB1c2FibGUgZm9yIHNSR0IgdGV4dHVyZXMuCistICAgIFRleHR1cmVS
ZWYgZ2V0TGluZWFyQ29sb3JWaWV3KCk7CisrICAgIC8vIEdldCByZWFkaW5nIGNvcHkuIFVzZWQg
Zm9yIHJlYWRpbmcgbm9uLXJlYWRhYmxlIHRleHR1cmUgb3IgcmVhZGluZyBzdGVuY2lsIHZhbHVl
IGZyb20KKysgICAgLy8gcGFja2VkIGRlcHRoICYgc3RlbmNpbCB0ZXh0dXJlLgorKyAgICAvLyBO
T1RFOiB0aGlzIG9ubHkgY29waWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisr
ICAgIC8vIFRoZSB0ZXhlbHMgd2lsbCBiZSBjb3BpZWQgdG8gcmVnaW9uKDAsIDAsIDAsIGFyZWFU
b0NvcHkuc2l6ZSkgb2YgdGhlIHJldHVybmVkIHRleHR1cmUuCisrICAgIC8vIFRoZSByZXR1cm5l
ZCBwb2ludGVyIHdpbGwgYmUgcmV0YWluZWQgYnkgdGhlIG9yaWdpbmFsIHRleHR1cmUgb2JqZWN0
LgorKyAgICAvLyBDYWxsaW5nIGdldFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZp
b3VzbHkgcmV0dXJuZWQgdGV4dHVyZS4KKysgICAgVGV4dHVyZVJlZiBnZXRSZWFkYWJsZUNvcHko
Q29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzbGljZVRvQ29weSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KTsKKysKKysgICAgdm9p
ZCByZWxlYXNlUmVhZGFibGVDb3B5KCk7CisgCisgICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKKyAg
ICAgVGV4dHVyZVJlZiBnZXRTdGVuY2lsVmlldygpOworKyAgICAvL0dldCBsaW5lYXIgY29sb3IK
KysgICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZpZXcoKTsKKyAKKyAgICAgLy8gQ2hhbmdl
IHRoZSB3cmFwcGVkIG1ldGFsIG9iamVjdC4gU3BlY2lhbCBjYXNlIGZvciBzd2FwY2hhaW4gaW1h
Z2UKKyAgICAgdm9pZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAKKy0gICAg
Ly8gc3luYyBjb250ZW50IGJldHdlZW4gQ1BVIGFuZCBHUFUKKysgICAgLy8gRXhwbGljaXRseSBz
eW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQorICAgICB2b2lkIHN5bmNDb250ZW50KENv
bnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVyKTsKKyAK
KyAgIHByaXZhdGU6CitAQCAtMjQxLDEyICsyNzEsNDEgQEAgY2xhc3MgVGV4dHVyZSBmaW5hbCA6
IHB1YmxpYyBSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1h
a2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZW1vcnlMZXNzLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwor
KworKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4
dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAgIFRleHR1cmUoaWQ8
TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAgICAgVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAg
ICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKysgICAgVGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
KyAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisrICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJn
ZXRPbmx5LAorKyAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorKyAgICAgICAgICAg
IGJvb2wgbWVtb3J5TGVzcyk7CisrCisrICAgIFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KysgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAgICAgICBJ
T1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorKyAgICAgICAgICAgIE5TVUludGVnZXIgcGxhbmUsCisr
ICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5KTsKKyAKKyAgICAgLy8gQ3JlYXRlIGEg
dGV4dHVyZSB2aWV3CisgICAgIFRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9y
bWF0IGZvcm1hdCk7CitAQCAtMjY0LDkgKzMyMywxNCBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDog
cHVibGljIFJlc291cmNlLAorICAgICBUZXh0dXJlUmVmIG1MaW5lYXJDb2xvclZpZXc7CisgCisg
ICAgIFRleHR1cmVSZWYgbVN0ZW5jaWxWaWV3OworKyAgICAvL1JlYWRhYmxlIGNvcHkgb2YgdGV4
dHVyZQorKyAgICBUZXh0dXJlUmVmIG1SZWFkQ29weTsKKysKKyB9OworIAorLWNsYXNzIEJ1ZmZl
ciBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVm
ZmVyPj4KKytjbGFzcyBCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVmZmVyPj4sCisrICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8QnVmZmVy
PgorIHsKKyAgIHB1YmxpYzoKKyAgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZUJ1ZmZlcihD
b250ZXh0TXRsICpjb250ZXh0LAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVzb3VyY2VzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMubW0KK2luZGV4IDliZWU0NzUuLmQwNDc1YWUgMTAwNjQ0CistLS0gYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMubW0KK0BAIC0zNCwyMCArMzQsMjIgQEAgaW5s
aW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXplLCBjb25zdCBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCkKKyAvLyBBc3luY2hyb25vdXNseSBzeW5jaHJvbml6ZSB0aGUg
Y29udGVudCBvZiBhIHJlc291cmNlIGJldHdlZW4gR1BVIG1lbW9yeSBhbmQgaXRzIENQVSBjYWNo
ZS4KKyAvLyBOT1RFOiBUaGlzIG9wZXJhdGlvbiBkb2Vzbid0IGZpbmlzaCBpbW1lZGlhdGVseSB1
cG9uIGZ1bmN0aW9uJ3MgcmV0dXJuLgorIHRlbXBsYXRlIDxjbGFzcyBUPgorLXZvaWQgSW52b2tl
Q1BVTWVtU3luYyhDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAq
YmxpdEVuY29kZXIsIFQgKnJlc291cmNlKQorK3ZvaWQgU3luY0NvbnRlbnQoQ29udGV4dE10bCAq
Y29udGV4dCwKKysgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0
RW5jb2RlciwKKysgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxUPiAmcmVz
b3VyY2UpCisgeworICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
ICAgICBpZiAoYmxpdEVuY29kZXIpCisgICAgIHsKKyAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5j
aHJvbml6ZVJlc291cmNlKHJlc291cmNlKTsKKysKKyAgICAgICAgIHJlc291cmNlLT5yZXNldENQ
VVJlYWRNZW1OZWVkU3luYygpOworICAgICB9CisgI2VuZGlmCisgfQorLS8vIEVuc3VyZSB0aGF0
IGEgcmVzb3VyY2UncyBDUFUgY2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZp
bmlzaGVzIGl0cyBtb2RpZmljYXRpb25zIG9uCistLy8gdGhlIHJlc291cmNlLgorKworIHRlbXBs
YXRlIDxjbGFzcyBUPgorLXZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwg
KmNvbnRleHQsIFQgKnJlc291cmNlKQorK3ZvaWQgRW5zdXJlQ29udGVudFN5bmNlZChDb250ZXh0
TXRsICpjb250ZXh0LCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8VD4gJnJlc291cmNlKQorIHsKKyAj
aWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgLy8gTWFrZSBz
dXJlIEdQVSAmIENQVSBjb250ZW50cyBhcmUgc3luY2hyb25pemVkLgorQEAgLTU2LDcgKzU4LDcg
QEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAq
cmVzb3VyY2UpCisgICAgIGlmIChyZXNvdXJjZS0+Z2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3Rv
cmFnZU1vZGVNYW5hZ2VkICYmIHJlc291cmNlLT5pc0NQVVJlYWRNZW1OZWVkU3luYygpKQorICAg
ICB7CisgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250
ZXh0LT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKy0gICAgICAgIEludm9rZUNQVU1lbVN5bmMo
Y29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsKKysgICAgICAgIFN5bmNDb250ZW50KGNv
bnRleHQsIGJsaXRFbmNvZGVyLCByZXNvdXJjZSk7CisgICAgIH0KKyAjZW5kaWYKKyB9CitAQCAt
MTIyLDYgKzEyNCwyNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUK
KyB9CisgCisrLyoqIHN0YXRpYyAqLworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZU1lbW9y
eUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorKyAg
ICB7CisrICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYyA9CisrICAgICAgICAgICAg
W01UTFRleHR1cmVEZXNjcmlwdG9yIHRleHR1cmUyRERlc2NyaXB0b3JXaXRoUGl4ZWxGb3JtYXQ6
Zm9ybWF0Lm1ldGFsRm9ybWF0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWln
aHQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1pcG1hcHBlZDpOT107CisrCisrICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29u
dGV4dCwgZm9ybWF0LCBkZXNjLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgcmVmT3V0KTsKKysgICAg
fSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyt9CisgLyoqIHN0YXRpYyAqLworIGFuZ2xlOjpS
ZXN1bHQgVGV4dHVyZTo6TWFrZUN1YmVUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQs
CitAQCAtMjIzLDYgKzI0MywyMyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250
ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9y
bWF0VmlldywgcmVmT3V0KTsKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyB9Cisr
YW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB3aWR0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwbGFuZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKKyt7Cisr
ICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0gW1tNVExUZXh0dXJlRGVzY3JpcHRvciBu
ZXddIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisrICAgIGRlc2MudGV4dHVyZVR5cGUgICAgICAg
ICAgID0gTVRMVGV4dHVyZVR5cGUyRDsKKysgICAgZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAg
PSBmb3JtYXQubWV0YWxGb3JtYXQ7CisrICAgIGRlc2Mud2lkdGggICAgICAgICAgICAgICAgID0g
d2lkdGg7CisrICAgIGRlc2MuaGVpZ2h0ICAgICAgICAgICAgICAgID0gaGVpZ2h0OworKyAgICBk
ZXNjLm1pcG1hcExldmVsQ291bnQgICAgICA9IDE7CisrICAgIGRlc2Muc2FtcGxlQ291bnQgICAg
ICAgICAgID0gMTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIGZvcm1hdCwgZGVz
YywgcmVmLCBwbGFuZSwgTk8sIHJlZk91dCk7CisrfQorIAorIC8qKiBzdGF0aWMgKi8KKyBhbmds
ZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCitAQCAt
MjMzLDcgKzI3MCw0MiBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorIHsKKy0gICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZp
ZXcpKTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIG10bEZvcm1hdCwgZGVzYywg
bWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgIHJlZk91dCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICByZWZP
dXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9u
bHksIGFsbG93Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworKworKyAgICBpZiAoIXJlZk91dCB8
fCAhcmVmT3V0LT5nZXQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRl
eHQsIGZhbHNlLCBHTF9PVVRfT0ZfTUVNT1JZKTsKKysgICAgfQorKyAgICBpZiAoIW10bEZvcm1h
dC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkpCisrICAgIHsKKysgICAgICAgIHJlZk91dC0+Z2V0
KCktPnNldENvbG9yV3JpdGFibGVNYXNrKEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9y
bWF0KSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
K30KKysKKythbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1
cmVEZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU9TdXJmYWNlUmVmIHN1cmZhY2VSZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorK3sKKysgICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBzdXJmYWNlUmVmLCBzbGljZSwgcmVuZGVyVGFyZ2V0T25seSkp
OworIAorICAgICBpZiAoISgqcmVmT3V0KSB8fCAhKCpyZWZPdXQpLT5nZXQoKSkKKyAgICAgewor
QEAgLTI2NCw2ICszMzYsMTUgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4
dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCBt
aXBzLAorICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcpCisrICAgIDogVGV4dHVyZShjb250ZXh0LCBk
ZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIGZhbHNlKQorK3t9
CisrCisrVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICB1aW50
MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAg
ICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAgICAgICAgICBi
b29sIG1lbW9yeUxlc3MpCisgICAgIDogbUNvbG9yV3JpdGFibGVNYXNrKHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMQ29sb3JXcml0ZU1hc2s+KE1UTENvbG9yV3JpdGVNYXNrQWxsKSkKKyB7CisgICAgIEFO
R0xFX01UTF9PQkpDX1NDT1BFCitAQCAtMjgzLDcgKzM2NCwxNSBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAg
ICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRhcmdldDsKKyAgICAgICAg
IH0KKyAKKy0gICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLmRlcHRoUmVuZGVyYWJsZSB8fAorKyAgICAgICAgaWYgKG1lbW9yeUxlc3MpCisr
ICAgICAgICB7CisrI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVikgJiYgIVRBUkdF
VF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRM
UmVzb3VyY2VTdG9yYWdlTW9kZU1lbW9yeWxlc3M7CisrI2Vsc2UKKysgICAgICAgICAgICBkZXNj
LnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOworKyNlbmRp
ZgorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0
Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKKyAgICAgICAgICAgICAg
ICAgIGRlc2MudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAg
ICAgICAgeworICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2Vz
cyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCitAQCAtMzEwLDYgKzM5OSw0NiBAQCB2
b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNv
dXJjZSkKKyAgICAgfQorIH0KKyAKKytUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRl
eHQsCisrICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAg
ICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2UsCisrICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIHBsYW5lLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5
KQorKyAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1UTENvbG9yV3Jp
dGVNYXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19T
Q09QRQorKyAgICB7CisrICAgICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKTsKKysKKysgICAgICAgIC8vIEV2ZXJ5IHRleHR1cmUgd2lsbCBz
dXBwb3J0IGJlaW5nIHJlbmRlcmVkIGZvciBub3cKKysgICAgICAgIGRlc2MudXNhZ2UgPSBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICBpZiAoY29udGV4dC0+Z2V0
TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5pc1JlbmRlcmFibGUoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRh
cmdldDsKKysgICAgICAgIH0KKysKKysjaWYgKFRBUkdFVF9PU19JT1MgfHwgVEFSR0VUX09TX1RW
KSAmJiAhVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9u
cyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVTaGFyZWQ7CisrI2Vsc2UKKysgICAgICAgIGRlc2Mu
cmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZU1hbmFnZWQ7CisrI2VuZGlm
CisrCisrICAgICAgICBpZiAoIXJlbmRlclRhcmdldE9ubHkpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFk
OworKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLndyaXRhYmxlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZGVz
Yy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZUZXh0
dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvc3VyZmFjZTppb3N1cmZhY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOnBsYW5lXTsKKysg
ICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKysgICAg
fQorK30KKysKKyBUZXh0dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBNVExQaXhlbEZv
cm1hdCBmb3JtYXQpCisgICAgIDogUmVzb3VyY2Uob3JpZ2luYWwpLAorICAgICAgIG1Db2xvcldy
aXRhYmxlTWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Ig
d3JpdGUgbWFzayBwcm9wZXJ0eQorQEAgLTM0MSw3ICs0NzAsNyBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgOiBS
ZXNvdXJjZShvcmlnaW5hbCksCisgICAgICAgbUNvbG9yV3JpdGFibGVNYXNrKG9yaWdpbmFsLT5t
Q29sb3JXcml0YWJsZU1hc2spICAvLyBTaGFyZSBjb2xvciB3cml0ZSBtYXNrIHByb3BlcnR5Cisg
eworLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKysjaWYgZGVmaW5lZChfX0lQSE9O
RV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorICAgICBBTkdMRV9NVExfT0JKQ19TQ09Q
RQorICAgICB7CisgICAgICAgICBhdXRvIHZpZXcgPSBbb3JpZ2luYWwtPmdldCgpCitAQCAtMzYw
LDEyICs0ODksMTIgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAq
Y29udGV4dCwgVCAqcmVzb3VyY2UpCisgCisgdm9pZCBUZXh0dXJlOjpzeW5jQ29udGVudChDb250
ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCisg
eworLSAgICBJbnZva2VDUFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKysg
ICAgU3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZChDb250ZXh0TXRsICpj
b250ZXh0KQorIHsKKy0gICAgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQsIHRoaXMp
OworKyAgICBFbnN1cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKK0BAIC0zNzks
NiArNTA4LDExIEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNv
bnRleHQsIFQgKnJlc291cmNlKQorICAgICByZXR1cm4gZ2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRM
U3RvcmFnZU1vZGVTaGFyZWQ7CisgfQorIAorK2Jvb2wgVGV4dHVyZTo6aXNTaGFkZXJSZWFkYWJs
ZSgpIGNvbnN0CisreworKyAgICByZXR1cm4gZ2V0KCkudXNhZ2UgJiBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJSZWFkOworK30KKysKKyBib29sIFRleHR1cmU6OnN1cHBvcnRGb3JtYXRWaWV3KCkgY29u
c3QKKyB7CisgICAgIHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2FnZVBpeGVsRm9y
bWF0VmlldzsKK0BAIC01MTQsMTIgKzY0OCwxNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5
bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgQVNTRVJUKHN1cHBv
cnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVyZSh0aGlz
LCBmb3JtYXQpKTsKKyB9CisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aENv
bXBhdGlibGVGb3JtYXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQorIHsKKy0gICAgLy8gTm8gbmVl
ZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJl
ZihuZXcgVGV4dHVyZSh0aGlzLCBmb3JtYXQpKTsKKyB9CisgCisrCisrCisgVGV4dHVyZVJlZiBU
ZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICZz
d2l6emxlKQorIHsKKyAjaWYgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFCitAQCAtNjUyLDYg
Kzc4OCw0OCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250
ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CisgfQorIAor
K1RleHR1cmVSZWYgVGV4dHVyZTo6Z2V0UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDMyX3QgbGV2ZWxUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDMyX3Qgc2xpY2VUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KQorK3sKKysgICAgZ2w6
OkV4dGVudHMgZmlyc3RMZXZlbFNpemUgPSBzaXplKGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworKyAg
ICBpZiAoIW1SZWFkQ29weSB8fCBtUmVhZENvcHktPmdldCgpLndpZHRoIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihmaXJzdExldmVsU2l6ZS53aWR0aCkgfHwKKysgICAgICAgIG1SZWFkQ29weS0+Z2V0
KCkuaGVpZ2h0IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdExldmVsU2l6ZS5oZWlnaHQpKQor
KyAgICB7CisrICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRoYXQgYmlnIGVub3VnaCB0byBz
dG9yZSB0aGUgZmlyc3QgbGV2ZWwgZGF0YSBhbmQgYW55IHNtYWxsZXIgbGV2ZWwKKysgICAgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byBkZXNj
ICAgICAgICAgICAgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9S
RUxFQVNFXTsKKysgICAgICAgICAgICBkZXNjLnRleHR1cmVUeXBlICAgICA9IGdldCgpLnRleHR1
cmVUeXBlOworKyAgICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQgICAgID0gZ2V0KCkucGl4ZWxG
b3JtYXQ7CisrICAgICAgICAgICAgZGVzYy53aWR0aCAgICAgICAgICAgPSBmaXJzdExldmVsU2l6
ZS53aWR0aDsKKysgICAgICAgICAgICBkZXNjLmhlaWdodCAgICAgICAgICA9IGZpcnN0TGV2ZWxT
aXplLmhlaWdodDsKKysgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAgICAgICA9IDE7CisrICAg
ICAgICAgICAgZGVzYy5hcnJheUxlbmd0aCAgICAgPSAxOworKyAgICAgICAgICAgIGRlc2MucmVz
b3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVByaXZhdGU7CisrICAgICAgICAg
ICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsKKysgICAgICAgICAg
ICBkZXNjLnVzYWdlICAgICAgICAgICA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICAgICAgaWQ8TVRMVGV4dHVy
ZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1RleHR1cmVXaXRo
RGVzY3JpcHRvcjpkZXNjXTsKKysgICAgICAgICAgICBtUmVhZENvcHkucmVzZXQobmV3IFRleHR1
cmUobXRsVGV4dHVyZSkpOworKyAgICAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKysg
ICAgfQorKworKyAgICBBU1NFUlQoZW5jb2Rlcik7CisrCisrICAgIGVuY29kZXItPmNvcHlUZXh0
dXJlKHNoYXJlZF9mcm9tX3RoaXMoKSwgc2xpY2VUb0NvcHksIGxldmVsVG9Db3B5LCBtUmVhZENv
cHksIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDEpOworKworKyAgICByZXR1
cm4gbVJlYWRDb3B5OworK30KKysKKyt2b2lkIFRleHR1cmU6OnJlbGVhc2VSZWFkYWJsZUNvcHko
KQorK3sKKysgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKKyt9CisrCisgVGV4dHVyZVJlZiBUZXh0
dXJlOjpnZXRTdGVuY2lsVmlldygpCisgeworICAgICBpZiAobVN0ZW5jaWxWaWV3KQorQEAgLTc5
OSw3ICs5NzcsNyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpj
b250ZXh0LCBUICpyZXNvdXJjZSkKKyAKKyB2b2lkIEJ1ZmZlcjo6c3luY0NvbnRlbnQoQ29udGV4
dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyKQorIHsK
Ky0gICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisrICAg
IFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkpOwor
IH0KKyAKKyBjb25zdCB1aW50OF90ICpCdWZmZXI6Om1hcFJlYWRPbmx5KENvbnRleHRNdGwgKmNv
bnRleHQpCitAQCAtODIwLDcgKzk5OCw3IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2Vk
KENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB7CisgICAgICAgICBDb21t
YW5kUXVldWUgJmNtZFF1ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKKyAKKy0gICAgICAgIEVu
c3VyZUNQVU1lbVdpbGxCZVN5bmNlZChjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIEVuc3VyZUNv
bnRlbnRTeW5jZWQoY29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAKKyAgICAgICAgIGlm
ICh0aGlzLT5pc0JlaW5nVXNlZEJ5R1BVKGNvbnRleHQpKQorICAgICAgICAgeworZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAoraW5kZXggNzY4YzM2OS4u
ZTZiZjcxZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3Rh
dGVfY2FjaGUuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9j
YWNoZS5oCitAQCAtMjIsNiArMjIsMTEgQEAKKyAKKyBzdGF0aWMgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBNVExDbGVhckNvbG9yICZsaHMsIGNvbnN0IE1UTENsZWFyQ29sb3IgJnJocyk7
CisgCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0cnVjdCBGZWF0dXJlc010bDsKKyt9CisrCisg
bmFtZXNwYWNlIHJ4CisgeworIGNsYXNzIENvbnRleHRNdGw7CitAQCAtMjIzLDcgKzIyOCw4IEBA
IHN0cnVjdCBSZW5kZXJQaXBlbGluZU91dHB1dERlc2MKKyB9OworIAorIC8vIFNvbWUgU0RLIGxl
dmVscyBkb24ndCBkZWNsYXJlIE1UTFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MuIE5lZWRzIHRvIGRv
IGNvbXBpbGUgdGltZSBjaGVjayBoZXJlOgorLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBIT05FXzEy
XzAKKysjaWYgIShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkgJiYgXAor
KyAgICAoIWRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgQU5HTEVfSU9TX0RFUExPWV9UQVJHRVQg
PCBfX0lQSE9ORV8xMl8wKQorICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9QT0xP
R1lfQ0xBU1NfQVZBSUxBQkxFIDAKKyB1c2luZyBQcmltaXRpdmVUb3BvbG9neUNsYXNzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdWludDMyX3Q7CisgY29uc3RleHByIFBy
aW1pdGl2ZVRvcG9sb2d5Q2xhc3Mga1ByaW1pdGl2ZVRvcG9sb2d5Q2xhc3NUcmlhbmdsZSA9IDA7
CitAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVz
YworICAgICBSZW5kZXJQaXBlbGluZURlc2MgJm9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnNyYyk7CisgCisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnJocykgY29uc3Q7CistCisgICAgIHNpemVfdCBoYXNoKCkgY29uc3Q7CistCisgICAg
IGJvb2wgcmFzdGVyaXphdGlvbkVuYWJsZWQoKSBjb25zdDsKKyAKKyAgICAgVmVydGV4RGVzYyB2
ZXJ0ZXhEZXNjcmlwdG9yOworQEAgLTI4OCw2ICsyOTIsMjcgQEAgc3RydWN0IGFsaWduYXMoNCkg
UmVuZGVyUGlwZWxpbmVEZXNjCisgICAgIGJvb2wgZW11bGF0ZUNvdmVyYWdlTWFzayA6IDE7Cisg
fTsKKyAKKytzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYworK3sK
KysgICAgVGV4dHVyZVJlZiBnZXRUZXh0dXJlUmVmKCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZS5s
b2NrKCk7IH0KKysgICAgVGV4dHVyZVJlZiBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpIGNvbnN0
IHsgcmV0dXJuIGltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorKyAgICBib29sIGhhc0ltcGxp
Y2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQo
KTsgfQorKyAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKKysgICAgeworKyAg
ICAgICAgVGV4dHVyZVJlZiB0ZXggICA9IGdldFRleHR1cmVSZWYoKTsKKysgICAgICAgIFRleHR1
cmVSZWYgbXNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOworKyAgICAgICAgcmV0dXJu
IG1zVGV4ID8gbXNUZXgtPnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOwor
KyAgICB9CisrCisrICAgIFRleHR1cmVXZWFrUmVmIHRleHR1cmU7CisrICAgIC8vIEltcGxpY2l0
IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2Nh
cmRlZCBhdCB0aGUgZW5kIG9mCisrICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQgd2ls
bCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorKyAgICBUZXh0dXJlV2Vh
a1JlZiBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBr
WmVyb05hdGl2ZU1pcExldmVsOworKyAgICB1aW50MzJfdCBzbGljZU9yRGVwdGggICA9IDA7Cisr
ICAgIGJvb2wgYmxlbmRhYmxlICAgICAgICAgID0gdHJ1ZTsKKyt9OworKworIHN0cnVjdCBSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2MKKyB7CisgICAgIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYygp
OworQEAgLTI5NywxOCArMzIyLDM0IEBAIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MK
KyAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMoY29uc3QgUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7CisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKKyAKKy0gICAgQU5HTEVfSU5M
SU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBpbXBsaWNpdE1T
VGV4dHVyZS5nZXQoKTsgfQorLQorLSAgICBUZXh0dXJlUmVmIHRleHR1cmU7CistICAgIC8vIElt
cGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5k
IGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCistICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1
bHQgd2lsbCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorLSAgICBUZXh0
dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlOworLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbDsK
Ky0gICAgdWludDMyX3Qgc2xpY2VPckRlcHRoOworLQorLSAgICAvLyBUaGlzIGF0dGFjaG1lbnQg
aXMgYmxlbmRhYmxlIG9yIG5vdC4KKy0gICAgYm9vbCBibGVuZGFibGU7CisrICAgIEFOR0xFX0lO
TElORSBUZXh0dXJlUmVmIHRleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0dXJlUmVmKCkgOiBudWxscHRyOwor
KyAgICB9CisrICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdl
dC0+Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSA6IG51bGxwdHI7CisrICAgIH0KKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAg
ICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4
dHVyZSgpIDogZmFsc2U7CisrICAgIH0KKysgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHJlbmRl
clNhbXBsZXMoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8g
cmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkgOiAxOworKyAgICB9CisrICAgIEFOR0xF
X0lOTElORSBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisrICAgIHsKKysgICAgICAg
IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmxldmVsIDoga1plcm9OYXRpdmVN
aXBMZXZlbDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgdWludDMyX3Qgc2xpY2VPckRlcHRo
KCkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRh
cmdldC0+c2xpY2VPckRlcHRoIDogMDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBi
bGVuZGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmJs
ZW5kYWJsZSA6IGZhbHNlOyB9CisgCisrICAgIC8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8g
YXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFt
ZSBidWZmZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1
cmVUYXJnZXREZXNjPiByZW5kZXJUYXJnZXQ7CisgICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlv
bjsKKyAgICAgTVRMU3RvcmVBY3Rpb24gc3RvcmVBY3Rpb247CisgICAgIE1UTFN0b3JlQWN0aW9u
T3B0aW9ucyBzdG9yZUFjdGlvbk9wdGlvbnM7CitAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3Qg
UmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MKKyAgICAgdWludDMyX3QgY2xlYXJTdGVuY2lsID0gMDsKKyB9OworIAorKy8vCisr
Ly8gVGhpcyBpcyBDKysgZXF1aXZhbGVudCBvZiBPYmplY3RpdmUtQyBNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvci4KKysvLyBXZSBjb3VsZCB1c2UgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0
bHksIGhvd2V2ZXIsIHVzaW5nIEMrKyBzdHJ1Y3QgaGFzIGJlbmVmaXRzIG9mIGZhc3QKKysvLyBj
b3B5LCBzdGFjayBhbGxvY2F0aW9uLCBpbmxpbmVkIGNvbXBhcmluZyBmdW5jdGlvbiwgZXRjLgor
Ky8vCisgc3RydWN0IFJlbmRlclBhc3NEZXNjCisgeworICAgICBSZW5kZXJQYXNzQ29sb3JBdHRh
Y2htZW50RGVzYyBjb2xvckF0dGFjaG1lbnRzW2tNYXhSZW5kZXJUYXJnZXRzXTsKK0BAIC00MTcs
NyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0
b3J5CisgeworICAgcHVibGljOgorICAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUNhY2hlU3Bl
Y2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7CistCisgICAgIC8vIEdldCBzcGVjaWFs
aXplZCBzaGFkZXIgZm9yIHRoZSByZW5kZXIgcGlwZWxpbmUgY2FjaGUuCisgICAgIHZpcnR1YWwg
YW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSwKK0BAIC00MjksNyArNDc0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVD
YWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykg
PSAwOworIH07CisgCistLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBzaGFkZXIg
cHJvZ3JhbS4KKysvLyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2FjaGUgcGVyIHNoYWRlciBwcm9n
cmFtCisgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQorIHsKKyAgIHB1YmxpYzoKK0BAIC00NTksNiArNTA0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxp
bmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CisgICAgIC8vIE5vbi1zcGVjaWFsaXplZCBmcmFn
bWVudCBzaGFkZXIKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBtRnJhZ21lbnRT
aGFkZXI7CisrICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlz
Y2FyZCwgb25lIHdpdGhvdXQKKyAKKyAgIHByaXZhdGU6CisgICAgIHZvaWQgY2xlYXJQaXBlbGlu
ZVN0YXRlcygpOworQEAgLTQ3NywxNCArNTIzLDEzIEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2Fj
aGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgLy8gT25lIHRhYmxlIHdpdGggZGVm
YXVsdCBhdHRyaWIgYW5kIG9uZSB0YWJsZSB3aXRob3V0LgorICAgICBzdGQ6OnVub3JkZXJlZF9t
YXA8UmVuZGVyUGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPj4+CisgICAgICAgICBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbMl07CistCisgICAgIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVy
RmFjdG9yeTsKKyB9OworIAorIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyB7CisgICBwdWJsaWM6CistICAgIFN0YXRlQ2FjaGUoKTsKKysgICAgU3RhdGVDYWNo
ZShjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzKTsKKyAgICAgflN0YXRlQ2FjaGUo
KTsKKyAKKyAgICAgLy8gTnVsbCBkZXB0aCBzdGVuY2lsIHN0YXRlIGhhcyBkZXB0aC9zdGVjaWwg
cmVhZCAmIHdyaXRlIGRpc2FibGVkLgorQEAgLTUwMiw2ICs1NDcsOCBAQCBjbGFzcyBTdGF0ZUNh
Y2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHZvaWQgY2xlYXIoKTsKKyAKKyAg
IHByaXZhdGU6CisrICAgIGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworKwor
ICAgICBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+IG1OdWxsRGVwdGhTdGVu
Y2lsU3RhdGUgPSBuaWw7CisgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNj
LCBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3Rh
dGVzOworICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8U2FtcGxlckRlc2MsIEF1dG9PYmpDUHRyPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+PiBtU2FtcGxlclN0YXRlczsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQoraW5kZXggMWNmMjM3YS4uNDVjNzE5ZCAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUu
bW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0K
K0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Nv
bnRleHRNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291
cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIK
KysjaW5jbHVkZSAicGxhdGZvcm0vRmVhdHVyZXNNdGwuaCIKKyAKKyAjZGVmaW5lIEFOR0xFX09C
SkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCisgICAgIChEU1QpLlBST1BFUlRZ
ID0gc3RhdGljX2Nhc3Q8X190eXBlb2ZfXygoRFNUKS5QUk9QRVJUWSk+KFRvT2JqQygoU1JDKS5Q
Uk9QRVJUWSkpCitAQCAtMTgyLDEwICsxODMsMTAgQEAgaW5saW5lIFQgVG9PYmpDKGNvbnN0IFQg
cCkKKyAgICAgcmV0dXJuIHRleHR1cmVSZWYgPyB0ZXh0dXJlUmVmLT5nZXQoKSA6IG5pbDsKKyB9
CisgCistdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRl
clBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCkKKyt2b2lk
IEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoTVRMUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjcmlwdG9yICpkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjKQorIHsKKy0gICAgY29uc3Qg
VGV4dHVyZVJlZiAmaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmU7Cisr
ICAgIGF1dG8gaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmUoKTsKKyAK
KyAgICAgaWYgKGltcGxpY2l0TXNUZXh0dXJlKQorICAgICB7CitAQCAtMTkzLDMxICsxOTQsMzEg
QEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBh
c3NBdHRhY2htZW50RGVzYyAmc3JjLAorICAgICAgICAgZHN0LmxldmVsICAgICAgICAgID0gMDsK
KyAgICAgICAgIGRzdC5zbGljZSAgICAgICAgICA9IDA7CisgICAgICAgICBkc3QuZGVwdGhQbGFu
ZSAgICAgPSAwOworLSAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0
dXJlKTsKKy0gICAgICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbC5nZXQoKTsKKysg
ICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsKKysgICAg
ICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOworICAgICAgICAgaWYg
KGRzdC5yZXNvbHZlVGV4dHVyZS50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTNEKQorICAg
ICAgICAgeworLSAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9y
RGVwdGg7CisrICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JE
ZXB0aCgpOworICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CisgICAgICAg
ICB9CisgICAgICAgICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LnJlc29sdmVT
bGljZSAgICAgID0gc3JjLnNsaWNlT3JEZXB0aDsKKysgICAgICAgICAgICBkc3QucmVzb2x2ZVNs
aWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CisgICAgICAgICAgICAgZHN0LnJlc29sdmVE
ZXB0aFBsYW5lID0gMDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0g
ICAgICAgIGRzdC50ZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKKy0gICAgICAgIGRzdC5s
ZXZlbCAgID0gc3JjLmxldmVsLmdldCgpOworKyAgICAgICAgZHN0LnRleHR1cmUgPSBUb09iakMo
c3JjLnRleHR1cmUoKSk7CisrICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgp
OworICAgICAgICAgaWYgKGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBl
M0QpCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VP
ckRlcHRoOworKyAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgp
OworICAgICAgICAgICAgIGRzdC5zbGljZSAgICAgID0gMDsKKyAgICAgICAgIH0KKyAgICAgICAg
IGVsc2UKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGlj
ZU9yRGVwdGg7CisrICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRo
KCk7CisgICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSAwOworICAgICAgICAgfQorICAgICAg
ICAgZHN0LnJlc29sdmVUZXh0dXJlICAgID0gbmlsOworQEAgLTIzMSwyNiArMjMyLDI2IEBAIHZv
aWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0
YWNobWVudERlc2MgJnNyYywKKyAgICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShkc3QsIHNyYywg
c3RvcmVBY3Rpb25PcHRpb25zKTsKKyB9CisgCistdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmRlc2MsCistICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0Nv
bG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpDKE1UTFJlbmRl
clBhc3NDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKysgICAgICAgICAgICBj
b25zdCBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmZGVzYykKKyB7CistICAgIEJhc2VS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworKyAgICBCYXNl
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKKyAKKyAgICAg
QU5HTEVfT0JKQ19DUF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJDb2xvcik7CisgfQor
IAorLXZvaWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNj
LAorLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjcmlwdG9yICpv
YmpDRGVzYykKKyt2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50RGVzY3Jp
cHRvciAqb2JqQ0Rlc2MsCisrICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNo
bWVudERlc2MgJmRlc2MpCisgeworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9P
YmpDKGRlc2MsIG9iakNEZXNjKTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1Rv
T2JqQyhvYmpDRGVzYywgZGVzYyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2Jq
Q0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOworIH0KKyAKKy12b2lkIFRvT2JqQyhjb25zdCBSZW5k
ZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorLSAgICAgICAgICAgIE1UTFJlbmRl
clBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpD
KE1UTFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjLAorKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCisg
eworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNj
KTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVz
Yyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFy
U3RlbmNpbCk7CisgfQorQEAgLTY5NiwxMSArNjk3LDcgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAKKyB2b2lkIFJlbmRlclBhc3NB
dHRhY2htZW50RGVzYzo6cmVzZXQoKQorIHsKKy0gICAgdGV4dHVyZS5yZXNldCgpOworLSAgICBp
bXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOworLSAgICBsZXZlbCAgICAgICAgICAgICAgPSBtdGw6
OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7CistICAg
IGJsZW5kYWJsZSAgICAgICAgICA9IGZhbHNlOworKyAgICByZW5kZXJUYXJnZXQgICAgICAgPSBu
dWxscHRyOworICAgICBsb2FkQWN0aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKKyAg
ICAgc3RvcmVBY3Rpb24gICAgICAgID0gTVRMU3RvcmVBY3Rpb25TdG9yZTsKKyAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID0gTVRMU3RvcmVBY3Rpb25PcHRpb25Ob25lOworQEAgLTcwOSw4ICs3MDYs
OSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjplcXVhbElnbm9yZUxvYWRTdG9y
ZU9wdGlvbnMoCisgICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNv
bnN0CisgeworLSAgICByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlICYmIGltcGxpY2l0
TVNUZXh0dXJlID09IG90aGVyLmltcGxpY2l0TVNUZXh0dXJlICYmCistICAgICAgICAgICBsZXZl
bCA9PSBvdGhlci5sZXZlbCAmJiBzbGljZU9yRGVwdGggPT0gb3RoZXIuc2xpY2VPckRlcHRoOwor
KyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8fAorKyAgICAg
ICAgICAgKHRleHR1cmUoKSA9PSBvdGhlci50ZXh0dXJlKCkgJiYgbGV2ZWwoKSA9PSBvdGhlci5s
ZXZlbCgpICYmCisrICAgICAgICAgICAgc2xpY2VPckRlcHRoKCkgPT0gb3RoZXIuc2xpY2VPckRl
cHRoKCkpOworIH0KKyAKKyBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6b3BlcmF0b3I9
PShjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdAorQEAgLTcyMyw2
ICs3MjEsMzAgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50
RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGxvYWRBY3Rpb24gPT0gb3RoZXIubG9hZEFjdGlvbiAm
JiBzdG9yZUFjdGlvbiA9PSBvdGhlci5zdG9yZUFjdGlvbiAmJgorICAgICAgICAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID09IG90aGVyLnN0b3JlQWN0aW9uT3B0aW9uczsKKyB9CisrLy8gQ29udmVy
dCB0byBNZXRhbCBvYmplY3QKKyt2b2lkIFJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKm9iakNEZXNjKSBjb25zdAorK3sKKysgICAgQU5H
TEVfTVRMX09CSkNfU0NPUEUKKysgICAgeworKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
b09iakMob2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSwgY29sb3JBdHRhY2htZW50c1tpXSk7
CisrICAgICAgICB9CisrICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1l
bnRzOyBpIDwga01heFJlbmRlclRhcmdldHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisrICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS50ZXh0dXJlICAgICA9IG5pbDsKKysgICAgICAgICAgICBvYmpDRGVzYy5j
b2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVz
Yy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmRlcHRoUGxhbmUgID0gMDsKKysgICAgICAgICAgICBv
YmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0gTVRMTG9hZEFjdGlvbkRv
bnRDYXJlOworKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc3RvcmVB
Y3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKysgICAg
ICAgIFRvT2JqQyhvYmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCwgc3RlbmNpbEF0dGFjaG1lbnQp
OworKyAgICB9CisrfQorIAorIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjKFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykgY29uc3QK
KyB7CitAQCAtNzQyLDE5ICs3NjQsMTkgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0
ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAorIHsKKy0gICAgUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjICZvdXRwdXREZXNjcmlwdG9yID0gKm91dERlc2M7CisrICAgIGF1dG8g
Jm91dHB1dERlc2NyaXB0b3IgICAgICAgICAgICAgICA9ICpvdXREZXNjOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLm51bUNvbG9yQXR0YWNobWVudHMgPSB0aGlzLT5udW1Db2xvckF0dGFjaG1lbnRz
OworICAgICBvdXRwdXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1w
bGVDb3VudDsKKyAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPm51bUNvbG9yQXR0
YWNobWVudHM7ICsraSkKKyAgICAgeworICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0
YWNobWVudCA9IHRoaXMtPmNvbG9yQXR0YWNobWVudHNbaV07CistICAgICAgICBhdXRvIHRleHR1
cmUgICAgICAgICAgICAgICAgICAgID0gcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJl
OworKyAgICAgICAgYXV0byB0ZXh0dXJlICAgICAgICAgICAgICAgICAgICA9IHJlbmRlclBhc3ND
b2xvckF0dGFjaG1lbnQudGV4dHVyZSgpOworIAorICAgICAgICAgaWYgKHRleHR1cmUpCisgICAg
ICAgICB7CisgICAgICAgICAgICAgLy8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUK
KyAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udXBkYXRl
KGJsZW5kU3RhdGUpOworLSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVu
dC5ibGVuZGFibGUpCisrICAgICAgICAgICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50
LmJsZW5kYWJsZSgpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJs
ZSBibGVuZGluZyBpZiB0aGUgYXR0YWNobWVudCdzIHJlbmRlciB0YXJnZXQgZG9lc24ndCBzdXBw
b3J0IGJsZW5kaW5nLgorICAgICAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0
YWNobWVudHNbaV0uYmxlbmRpbmdFbmFibGVkID0gZmFsc2U7CitAQCAtNzgxLDExICs4MDMsMTEg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5yZXNldCgp
OworICAgICB9CisgCistICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmU7CisrICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUoKTsKKyAgICAgb3V0cHV0RGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhl
bEZvcm1hdCA9CisgICAgICAgICBkZXB0aFRleHR1cmUgPyBkZXB0aFRleHR1cmUtPnBpeGVsRm9y
bWF0KCkgOiBNVExQaXhlbEZvcm1hdEludmFsaWQ7CisgCistICAgIGF1dG8gc3RlbmNpbFRleHR1
cmUgPSB0aGlzLT5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlOworKyAgICBhdXRvIHN0ZW5jaWxU
ZXh0dXJlID0gdGhpcy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQorICAgICAgICAgc3RlbmNp
bFRleHR1cmUgPyBzdGVuY2lsVGV4dHVyZS0+cGl4ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0
SW52YWxpZDsKKyB9CitAQCAtODMxLDQyICs4NTMsMjEgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGRlcHRoQXR0
YWNobWVudCA9PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0g
b3RoZXIuc3RlbmNpbEF0dGFjaG1lbnQ7CisgfQorIAorLS8vIENvbnZlcnQgdG8gTWV0YWwgb2Jq
ZWN0Cistdm9pZCBSZW5kZXJQYXNzRGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBh
c3NEZXNjcmlwdG9yICpvYmpDRGVzYykgY29uc3QKKy17CistICAgIEFOR0xFX01UTF9PQkpDX1ND
T1BFCistICAgIHsKKy0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Db2xvckF0
dGFjaG1lbnRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgVG9PYmpDKGNvbG9yQXR0
YWNobWVudHNbaV0sIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworLSAgICAgICAgfQor
LSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhS
ZW5kZXJUYXJnZXRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gSW5hY3RpdmUg
cmVuZGVyIHRhcmdldAorLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0u
dGV4dHVyZSAgICAgPSBuaWw7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXS5sZXZlbCAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zbGljZSAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRh
Y2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRBY3Rpb25Eb250Q2FyZTsKKy0gICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0gTVRMU3Rv
cmVBY3Rpb25Eb250Q2FyZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIFRvT2JqQyhkZXB0aEF0
dGFjaG1lbnQsIG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCk7CistICAgICAgICBUb09iakMoc3Rl
bmNpbEF0dGFjaG1lbnQsIG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKy0gICAgfQorLX0K
Ky0KKyAvLyBSZW5kZXJQaXBlbGluZUNhY2hlIGltcGxlbWVudGF0aW9uCistUmVuZGVyUGlwZWxp
bmVDYWNoZTo6UmVuZGVyUGlwZWxpbmVDYWNoZSgpIDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxs
cHRyKSB7fQorK1JlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJl
bmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikgeworK30KKyAKKyBSZW5kZXJQaXBlbGluZUNhY2hl
OjpSZW5kZXJQaXBlbGluZUNhY2hlKAorICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZVNoYWRlckZhY3RvcnkgKnNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKyAgICAgOiBtU3BlY2lh
bGl6ZWRTaGFkZXJGYWN0b3J5KHNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKy17fQorK3sKKysK
Kyt9CisgCisgUmVuZGVyUGlwZWxpbmVDYWNoZTo6flJlbmRlclBpcGVsaW5lQ2FjaGUoKSB7fQor
IAorLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNv
bnRleHQsIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisrdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hl
OjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorIHsKKyAgICAg
bVZlcnRleFNoYWRlci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsKKyAKK0BAIC04NzksNyArODgwLDgg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgcmVjcmVhdGVQaXBlbGluZVN0YXRlcyhjb250ZXh0KTsKKyB9CisgCistdm9pZCBS
ZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBp
ZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorK3ZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJh
Z21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisgeworICAgICBtRnJh
Z21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CisgCitAQCAtOTI5LDEwICs5MzEsNiBA
QCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNj
LAorIHsKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IG5ld1N0
YXRlID0KKyAgICAgICAgIGNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgZGVzYywg
aW5zZXJ0RGVmYXVsdEF0dHJpYkxheW91dCk7CistICAgIGlmICghbmV3U3RhdGUpCistICAgIHsK
Ky0gICAgICAgIHJldHVybiBuaWw7CistICAgIH0KKyAKKyAgICAgaW50IHRhYmxlSWR4ID0gaW5z
ZXJ0RGVmYXVsdEF0dHJpYkxheW91dCA/IDEgOiAwOworICAgICBhdXRvIHJlICAgICAgPSBtUmVu
ZGVyUGlwZWxpbmVTdGF0ZXNbdGFibGVJZHhdLmluc2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBu
ZXdTdGF0ZSkpOworQEAgLTk0NCw2ICs5NDIsNyBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQ
YXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICByZXR1cm4gcmUuZmlyc3QtPnNl
Y29uZDsKKyB9CisgCisrCisgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+
IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCisgICAgIENv
bnRleHQgKmNvbnRleHQsCisgICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmb3JpZ2luYWxE
ZXNjLAorQEAgLTk1OSw3ICs5NTgsNiBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3Rl
bmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAgICAgIGRlc2MuZW11bGF0ZUNvdmVy
YWdlTWFzayAgICA9IGZhbHNlOworICAgICAgICAgICAgIGRlc2MuYWxwaGFUb0NvdmVyYWdlRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICAgfQorLQorICAgICAgICAgLy8gQ2hvb3NlIHNoYWRlciB2
YXJpYW50CisgICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKKyAgICAg
ICAgIGlkPE1UTEZ1bmN0aW9uPiBmcmFnU2hhZGVyID0gbmlsOworQEAgLTEwMDQsNyArMTAwMiwy
NSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIAorICAgICAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjOgorICAgICAg
ICAgQXV0b09iakNPYmo8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBvYmpDRGVzYyA9IFRv
T2JqQyh2ZXJ0U2hhZGVyLCBmcmFnU2hhZGVyLCBkZXNjKTsKKy0KKysgICAgICAgIC8vIFZhbGlk
YXRlIFJlbmRlciBQaXBlbGluZSBTdGF0ZToKKysgICAgICAgIGlmIChEZXZpY2VIYXNNYXhpbXVt
UmVuZGVyVGFyZ2V0U2l6ZShtZXRhbERldmljZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNVSW50ZWdlciBtYXhTaXplID0gR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0
ZXMobWV0YWxEZXZpY2UpOworKyAgICAgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6
ZSA9CisrICAgICAgICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERldmljZSk7CisrICAgICAg
ICAgICAgaWYgKHJlbmRlclRhcmdldFNpemUgPiBtYXhTaXplKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKysgICAgICAgICAgICAgICAg
ICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVGhpcyBzZXQgb2YgcmVuZGVyIHRhcmdl
dHMgcmVxdWlyZXMgJWx1IGJ5dGVzIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBkZXZpY2Ugc3VwcG9ydHMg
JWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKysgICAgICAgICAgICAgICAgTlNFcnJv
ciAqZXJyID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiTVRMVmFsaWRhdGlvbkVycm9yIgor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6
LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJ
bmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisrICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmhhbmRsZUVycm9yKGVyciwgX19GSUxFX18sIEFOR0xFX0ZVTkNU
SU9OLCBfX0xJTkVfXyk7CisrICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorICAgICAgICAgLy8gU3BlY2lhbCBhdHRyaWJ1dGUgc2xvdCBmb3Ig
ZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0
KQorICAgICAgICAgeworQEAgLTEwMzIsNiArMTA0OCw3IEBAIHZvaWQgVG9PYmpDKGNvbnN0IFJl
bmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MsCisgICAgIH0KKyB9CisgCisrCisg
dm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpyZWNyZWF0ZVBpcGVsaW5lU3RhdGVzKENvbnRleHQg
KmNvbnRleHQpCisgeworICAgICBmb3IgKGludCBoYXNEZWZhdWx0QXR0cmliID0gMDsgaGFzRGVm
YXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCitAQCAtMTA2Miw3ICsxMDc5LDcg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyB9CisgCisgLy8gU3RhdGVDYWNoZSBpbXBsZW1lbnRhdGlvbgorLVN0YXRlQ2FjaGU6OlN0
YXRlQ2FjaGUoKSB7fQorK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3QgYW5nbGU6OkZlYXR1
cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CisgCisgU3RhdGVDYWNo
ZTo6flN0YXRlQ2FjaGUoKSB7fQorIAorQEAgLTExMTMsNiArMTEzMCwxMSBAQCB2b2lkIFRvT2Jq
Qyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAg
aWYgKGl0ZSA9PSBtU2FtcGxlclN0YXRlcy5lbmQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAg
ICBBdXRvT2JqQ09iajxNVExTYW1wbGVyRGVzY3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakMoZGVz
Yyk7CisrICAgICAgICAgICAgaWYgKCFtRmVhdHVyZXMuYWxsb3dSdW50aW1lU2FtcGxlckNvbXBh
cmVNb2RlLmVuYWJsZWQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBSdW50
aW1lIHNhbXBsZXIgY29tcGFyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5l
dmVyLgorKyAgICAgICAgICAgICAgICBvYmpDRGVzYy5nZXQoKS5jb21wYXJlRnVuY3Rpb24gPSBN
VExDb21wYXJlRnVuY3Rpb25OZXZlcjsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgQXV0
b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4gbmV3U3RhdGUgPQorICAgICAgICAgICAgICAg
ICBbW21ldGFsRGV2aWNlIG5ld1NhbXBsZXJTdGF0ZVdpdGhEZXNjcmlwdG9yOm9iakNEZXNjXSBB
TkdMRV9NVExfQVVUT1JFTEVBU0VdOworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
dXRpbHMuaAoraW5kZXggYTg0YWM3My4uODA1NzI5ZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oCitAQCAtMTM1LDE1ICsxMzUsMzAgQEAgTVRMVGV4dHVyZVN3aXp6
bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6bGUpOworIAorIC8vIEdldCBjb2xvciB3
cml0ZSBtYXNrIGZvciBhIHNwZWNpZmllZCBmb3JtYXQuIFNvbWUgZm9ybWF0cyBzdWNoIGFzIFJH
QjU2NSBkb2Vzbid0IGhhdmUgYWxwaGEKKyAvLyBjaGFubmVsIGJ1dCBpcyBlbXVsYXRlZCBieSBh
IFJHQkE4IGZvcm1hdCwgd2UgbmVlZCB0byBkaXNhYmxlIGFscGhhIHdyaXRlIGZvciB0aGlzIGZv
cm1hdC4KKy0vLyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQs
IHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KKy1NVExDb2xvcldyaXRlTWFz
ayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQs
IGJvb2wgKmlzRm9ybWF0RW11bGF0ZWQpOworKy8vIC0gZW11bGF0ZWRDaGFubmVsc091dDogaWYg
dGhlIGZvcm1hdCBpcyBlbXVsYXRlZCwgdGhpcyBwb2ludGVyIHdpbGwgc3RvcmUgYSB0cnVlIHZh
bHVlLgorK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpOworIE1UTENvbG9yV3JpdGVN
YXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1h
dCk7CisgYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQp
OwogIAotIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTEVTKQorK05TVUludGVnZXIg
R2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZp
Y2UpOworK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRT
aXplKGlkPE1UTERldmljZT4gZGV2aWNlKTsKKysKKyAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNv
bG9yIGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFj
a2VuZCdzIGZvcm1hdAorIC8vIGhhcyBhbHBoYSBjaGFubmVsLgorIE1UTENsZWFyQ29sb3IgRW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1h
c2sgY29sb3JNYXNrKTsKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVu
Y3Rpb25zRUFHTC5tbQotaW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKLS0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLSsrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLUBAIC0xNCw3ICsxNCw3IEBA
Ci0gIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgotICMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXpl
VXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlw
dG9yICpkZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExEZXZp
Y2U+IGRldmljZSk7CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcigKKysgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yLAorKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICBp
ZDxNVExEZXZpY2U+IGRldmljZSk7CisrCisgZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0
IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsKICAKLS0jICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAgICBpbmNsdWRlICJjb21tb24vYXBwbGUv
U29mdExpbmtpbmcuaCIKKyBNaXBtYXBOYXRpdmVMZXZlbCBHZXROYXRpdmVNaXBMZXZlbChHTHVp
bnQgbGV2ZWwsIEdMdWludCBiYXNlKTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91
dGlscy5tbQoraW5kZXggMDc2ZTYwOS4uMDA5YWY1YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfdXRpbHMubW0KK0BAIC0xMCw5ICsxMCwxMSBAQAogIAotIFNPRlRfTElOS19G
UkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfdXRpbHMuaCIKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCi1pbmRleCBmMTZjM2U3Li40NWU2ZDBmIDEw
MDY0NAotLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFj
ZUVBR0wubW0KLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1
cmZhY2VFQUdMLm1tCi1AQCAtMjA2LDcgKzIwNiw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAg
ICAgIC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVyZSwgaW5j
bHVkaW5nIHNldHRpbmcgYW55Ci0gICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAg
d2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCi0gICAgICAgICBnbDo6UGl4ZWxVbnBhY2tTdGF0
ZSBkZWZhdWx0VW5wYWNrU3RhdGU7Ci0tICAgICAgICBzdGF0ZU1hbmFnZXItPnNldFBpeGVsVW5w
YWNrU3RhdGUoZGVmYXVsdFVucGFja1N0YXRlKTsKLSsgICAgICAgIGlmIChJc0Vycm9yKHN0YXRl
TWFuYWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShjb250ZXh0LCBkZWZhdWx0VW5wYWNrU3RhdGUp
KSkgewotKyAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0
byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0rICAgICAgICB9Ci0gICAgICAgICB0ZXh0dXJl
RGF0YSA9IElPU3VyZmFjZUdldEJhc2VBZGRyZXNzKG1JT1N1cmZhY2UpOwotICAgICB9Ci0gCi1A
QCAtMjM4LDcgKzI0MCw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMCi0gICAgICAgICBnbDo6
UGl4ZWxQYWNrU3RhdGUgc3RhdGU7Ci0gICAgICAgICBzdGF0ZS5yb3dMZW5ndGggPSBtUm93U3Ry
aWRlSW5QaXhlbHM7Ci0gICAgICAgICBzdGF0ZS5hbGlnbm1lbnQgPSAxOwotLSAgICAgICAgc3Rh
dGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tTdGF0ZShzdGF0ZSk7Ci0rICAgICAgICBpZiAoSXNFcnJv
cihzdGF0ZU1hbmFnZXItPnNldFBpeGVsUGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKLSsg
ICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBp
eGVsIHVucGFjayBzdGF0ZS4iOwotKyAgICAgICAgfQotICAgICAgICAgLy8gVE9ETyhrYnIpOiBw
b3NzaWJseSBtb3JlIHN0YXRlIHRvIGJlIHNldCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyBhbnkK
LSAgICAgICAgIC8vIHBpeGVsIHBhY2sgYnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAzLjAgY29u
dGV4dHMuCi0gICAgICAgICBjb25zdCBhdXRvICZmb3JtYXQgPSBrSU9TdXJmYWNlRm9ybWF0c1tt
Rm9ybWF0SW5kZXhdOwotZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5k
ZXJlcmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0
aWxzLmNwcAotaW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAotKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCi1AQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9p
ZCBHZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKysjaW5jbHVkZSA8
QXZhaWxhYmlsaXR5Lmg+CisgI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgogIAotICNp
ZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQotICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotLSAgICBpZiAoYW5n
bGU6OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlm
IChhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykgJiYgIWluZm8ubmVlZHNFQUdMT25NYWMpCisg
I2luY2x1ZGUgImNvbW1vbi9NZW1vcnlCdWZmZXIuaCIKKysjaW5jbHVkZSAiY29tbW9uL3N5c3Rl
bV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCitAQCAtMjQsNiArMjYsOCBAQAor
IG5hbWVzcGFjZSBtdGwKKyB7CisgCisrY29uc3RleHByIGNoYXIga0FOR0xFUHJpbnRNU0xFbnZb
XSA9ICJBTkdMRV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKysKKyBuYW1lc3BhY2UKKyB7Cisg
CitAQCAtMTAzLDI0ICsxMDcsNDMgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdl
TmF0aXZlSW5kZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyB7CisgICAgIEFTU0VSVCh0ZXh0
dXJlICYmIHRleHR1cmUtPnZhbGlkKCkpOworLSAgICAvLyBPbmx5IG9uZSBzbGljZSBjYW4gYmUg
aW5pdGlhbGl6ZWQgYXQgYSB0aW1lLgorLSAgICBBU1NFUlQoIWluZGV4LmlzTGF5ZXJlZCgpIHx8
IGluZGV4LmdldFR5cGUoKSA9PSBnbDo6VGV4dHVyZVR5cGU6Ol8zRCk7CisgICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgCisrICAgIGNvbnN0IGFu
Z2xlOjpGb3JtYXQgJmFjdHVhbEFuZ2xlRm9ybWF0ICAgICAgICAgICA9IHRleHR1cmVPYmpGb3Jt
YXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKKyAgICAgY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZp
bnRlbmRlZEludGVybmFsRm9ybWF0ID0gdGV4dHVyZU9iakZvcm1hdC5pbnRlbmRlZEludGVybmFs
Rm9ybWF0KCk7CisgCisgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG1hbnkgcGxh
Y2VzIHRvIGluaXRpYWxpemUgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0dXJlLgorLSAgICAvLyBTbyBp
dCdzIGJldHRlciB3ZSBkbyB0aGUgaW5pdGlhbCBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CistICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3NlZCkKKysgICAgLy8gU28g
aXQncyBiZXR0ZXIgd2UgZG8gdGhlIHNhbml0eSBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CisrICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGFjdHVhbEFuZ2xlRm9ybWF0LmlzQmxvY2sgfHwgYWN0dWFsQW5nbGVGb3JtYXQu
ZGVwdGhCaXRzID4gMCB8fAorKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMg
PiAwKQogICAgICB7Ci0gICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5j
dGlvbnMpOwotICAgICAgICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkg
JiYgKm1heFN1cHBvcnRlZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKKysgICAgICAg
IC8vIElmIGRzdCBmb3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3JlLgorICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9CisgCisgICAgIGdsOjpFeHRlbnRzIHNp
emUgPSB0ZXh0dXJlLT5zaXplKGluZGV4KTsKKyAKKy0gICAgLy8gSW50aWlhbGl6ZSB0aGUgY29u
dGVudCB0byBibGFjaworLSAgICBHTGludCBsYXllciwgc3RhcnREZXB0aDsKKy0gICAgR2V0U2xp
Y2VBbmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnREZXB0aCk7CisrICAgIC8vIEludGlhbGl6
ZSB0aGUgY29udGVudCB0byBibGFjaworKyAgICBHTGludCBsYXllciAgICAgID0gMDsKKysgICAg
R0xpbnQgc3RhcnREZXB0aCA9IDA7CisrICAgIGlmIChpbmRleC5oYXNMYXllcigpKQorKyAgICB7
CisrICAgICAgICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcDoKKysgICAgICAgICAgICAgICAgbGF5
ZXIgPSBpbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfMkRBcnJheToKKysgICAgICAgICAg
ICAgICAgbGF5ZXIgPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfM0Q6CisrICAgICAgICAg
ICAgICAgIHN0YXJ0RGVwdGggPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9Cisg
CisgICAgIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSAmJiBpbmRleC5nZXRUeXBlKCkg
IT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRNdWx0aXNhbXBsZSAmJgorICAgICAgICAgaW5kZXguZ2V0
VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGVBcnJheSkKK0BAIC0xMzYs
NiArMTU5LDEzIEBAIEdMaW50IEdldFNsaWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4
ICZpbmRleCkKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9y
bWF0LmNvbXByZXNzZWQgfHwKKysgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRlcm5hbEZvcm1h
dC5kZXB0aEJpdHMgPiAwIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNpbEJpdHMgPiAw
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgc291cmNlIGZvcm1hdCBp
cyBjb21wcmVzc2VkLCBpZ25vcmUuCisrICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKysgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgY29uc3QgYW5n
bGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0gYW5nbGU6OkZvcm1hdDo6R2V0KAorICAgICAgICAgICAg
ICAgICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmFscGhhQml0cyA+IDAgPyBhbmdsZTo6Rm9ybWF0
SUQ6OlI4RzhCOEE4X1VOT1JNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKK0BAIC0x
NjUsNyArMTk1LDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnNpb25Sb3cuZGF0YSgpLCBkc3RSb3dQaXRjaCk7CisgICAgICAgICAgICAgfQorICAgICAgICAg
fQorLSAgICB9CisrICAgIH0gIC8vIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSkKKyAg
ICAgZWxzZQorICAgICB7CisgICAgICAgICBBTkdMRV9UUlkoSW5pdGlhbGl6ZVRleHR1cmVDb250
ZW50c0dQVShjb250ZXh0LCB0ZXh0dXJlLCB0ZXh0dXJlT2JqRm9ybWF0LCBpbmRleCwKK0BAIC0y
MTAsNyArMjQwLDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICBSZW5kZXJUYXJnZXRNdGwgdGVtcFJ0dDsKKyAgICAgdGVtcFJ0dC5z
ZXQodGV4dHVyZSwgaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKSwgc2xpY2VPckRlcHRoLCB0ZXh0dXJl
T2JqRm9ybWF0KTsKKyAKKy0gICAgaW50IGNsZWFyQWxwaGEgPSAwOworKyAgICBmbG9hdCBjbGVh
ckFscGhhID0gMDsKKyAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVkQW5nbGVGb3Jt
YXQoKS5hbHBoYUJpdHMpCisgICAgIHsKKyAgICAgICAgIC8vIGlmIGludGVuZGVkIGZvcm1hdCBk
b2Vzbid0IGhhdmUgYWxwaGEsIHNldCBpdCB0byAxLjAuCitAQCAtMjQwLDExICsyNzAsMTEgQEAg
R0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5kZXggJmluZGV4KQorICAg
ICAgICAgQ2xlYXJDb2xvclZhbHVlIGNsZWFyQ29sb3I7CisgICAgICAgICBpZiAoYW5nbGVGb3Jt
YXQuaXNTaW50KCkpCisgICAgICAgICB7CistICAgICAgICAgICAgY2xlYXJDb2xvci5zZXRBc0lu
dCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzSW50
KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlm
IChhbmdsZUZvcm1hdC5pc1VpbnQoKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOworICAgICAgICAgfQorICAg
ICAgICAgZWxzZQorICAgICAgICAgeworQEAgLTI4MywxNyArMzEzLDE3IEBAIEdMaW50IEdldFNs
aWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyAgICAgcnBEZXNjLnNh
bXBsZUNvdW50ID0gdGV4dHVyZS0+c2FtcGxlcygpOworICAgICBpZiAoYW5nbGVGb3JtYXQuZGVw
dGhCaXRzKQorICAgICB7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUg
ICAgICA9IHRleHR1cmU7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxldmVsICAg
ICAgICA9IGxldmVsOworLSAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5zbGljZU9yRGVw
dGggPSBsYXllcjsKKysgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0
LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworKyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVu
dC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLmRl
cHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAg
ICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xl
YXI7CisgICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsK
KyAgICAgfQorICAgICBpZiAoYW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMpCisgICAgIHsKKy0gICAg
ICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworKyAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+dGV4dHVyZSAgICAg
ID0gdGV4dHVyZTsKKysgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJn
ZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7CisgICAgICAgICBycERlc2Mu
c3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNsZWFyOworICAg
ICB9CisgCitAQCAtNDU2LDYgKzQ4NiwzMCBAQCB1aW50MzJfdCBHZXREZXZpY2VWZW5kb3JJZChp
ZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlKQorICAgICByZXR1cm4gQ3JlYXRlU2hhZGVyTGlicmFy
eShtZXRhbERldmljZSwgc291cmNlLmNfc3RyKCksIHNvdXJjZS5zaXplKCksIGVycm9yKTsKKyB9
CisgCisrI2lmIDAKKytzdGF0aWMgTVRMTGFuZ3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBwb3J0
ZWRNU0xWZXJzaW9uKCkKKyt7CisrICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9k
b2N1bWVudGF0aW9uL21ldGFsL210bGxhbmd1YWdldmVyc2lvbj9sYW5ndWFnZT1vYmpjCisrICAg
IGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDExLjAsIDE0LjAsIDE0LjApKQorKyAgICAg
ICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMzsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1
YWdlVmVyc2lvbjJfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUs
IDEzLjAsIDEyLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMTsKKysg
ICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTMsIDEzLjAsIDExLjApKQorKyAg
ICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMDsKKysgICAgaWYgKEFOR0xFX0FQUExF
X0FWQUlMQUJMRV9YQ0koMTAuMTIsIDEzLjAsIDEwLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExh
bmd1YWdlVmVyc2lvbjFfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTEsIDEzLjAsIDkuMCkpCisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOwor
KyMgICAgaWYgVEFSR0VUX09TX0lPUworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0ko
OS4wKSkKKysgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzA7CisrIyAgICBlbmRp
ZgorKyAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOworK30KKysjZW5kaWYKKysKKyBB
dXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxNVExEZXZp
Y2U+IG1ldGFsRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc291cmNlTGVuLAorQEAgLTQ2OSw4ICs1MjMs
MjUgQEAgdWludDMyX3QgR2V0RGV2aWNlVmVuZG9ySWQoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVXaGVuRG9uZTpOT107CisgICAgICAgICBhdXRv
IG9wdGlvbnMgICAgID0gW1tbTVRMQ29tcGlsZU9wdGlvbnMgYWxsb2NdIGluaXRdIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisrICAgICAgICAvLyBNYXJrIGFsbCBwb3NpdGlvbnMgaW4gVlMgd2l0
aCBhdHRyaWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6YWJsZQorKyNpZiAoZGVmaW5lZChf
X01BQ18xMV8wKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19NQUNfMTFf
MCkgfHwgICAgICAgIFwKKysgICAgKGRlZmluZWQoX19JUEhPTkVfMTRfMCkgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX0lQSE9ORV8xNF8wKSB8fCBcCisrICAgIChkZWZp
bmVkKF9fVFZPU18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19UVk9T
XzE0XzApCisrICAgICAgICBvcHRpb25zLnByZXNlcnZlSW52YXJpYW5jZSA9IHRydWU7CisrI2Vs
c2UKKysgICAgICAgIC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFpbGFibGUgY29tcGlsaW5n
IGZyb20gc291cmNlLCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisrICAgICAgICBvcHRpb25z
LmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyNlbmRpZgorKyAgICAgICAgLy8gVE9ETyhqY3Vu
bmluZ2hhbSk6IHdvcmthcm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJlc2VydmluZyBpbnZh
cmlhbmNlIG9uIGFsbCBzaGFkZXJzCisrICAgICAgICBpZiAoW21ldGFsRGV2aWNlLm5hbWUgcmFu
Z2VPZlN0cmluZzpAIkludGVsIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyAgICAgICAg
fQorICAgICAgICAgYXV0byBsaWJyYXJ5ID0gW21ldGFsRGV2aWNlIG5ld0xpYnJhcnlXaXRoU291
cmNlOm5zU291cmNlIG9wdGlvbnM6b3B0aW9ucyBlcnJvcjombnNFcnJvcl07CistCisrICAgICAg
ICBpZiAoYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtBTkdMRVByaW50TVNMRW52KVswXSA9PSAn
MScpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2UpOwor
KyAgICAgICAgfQorICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07Cisg
CisgICAgICAgICAqZXJyb3JPdXQgPSBzdGQ6Om1vdmUobnNFcnJvcik7CitAQCAtNzcyLDE1ICs4
NDMsMTUgQEAgTVRMVGV4dHVyZVN3aXp6bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6
bGUpCisgfQorICNlbmRpZgorIAorLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JX
cml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91
dCkKKytNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpCisgeworICAg
ICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1hdCA9IG10bEZvcm1hdC5pbnRlbmRl
ZEFuZ2xlRm9ybWF0KCk7CisgICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmFjdHVhbEZvcm1hdCAg
ID0gbXRsRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCk7CistICAgIGJvb2wgaXNGb3JtYXRFbXVs
YXRlZCAgICAgICAgICAgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyAg
ICAgICAgICAgICAgID0gZmFsc2U7CisgICAgIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yV3JpdGFi
bGVNYXNrID0gTVRMQ29sb3JXcml0ZU1hc2tBbGw7CisgICAgIGlmIChpbnRlbmRlZEZvcm1hdC5h
bHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYWxwaGFCaXRzKQorICAgICB7CistICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0
cnVlOworICAgICAgICAgLy8gRGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAg
ICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9y
V3JpdGVNYXNrQWxwaGEpOworICAgICB9CitAQCAtNzg4LDQxICs4NTksNDEgQEAgTVRMQ29sb3JX
cml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRs
Rm9ybWF0LCBib29sICoKKyAgICAgeworICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LnJlZEJp
dHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQucmVkQml0cykKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRleHR1
cmUKKyAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYg
KH5NVExDb2xvcldyaXRlTWFza1JlZCk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoaW50ZW5k
ZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LmdyZWVuQml0cykKKyAgICAg
ICAgIHsKKy0gICAgICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAg
ICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyZWVu
IHdyaXRlIHRvIHRoaXMgdGV4dHVyZQorICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0g
Y29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrR3JlZW4pOworICAgICAgICAg
fQorICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LmJsdWVCaXRzID09IDAgJiYgYWN0dWFsRm9y
bWF0LmJsdWVCaXRzKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQg
PSB0cnVlOworKyAgICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVlOworICAgICAgICAg
ICAgIC8vIERpc2FibGUgYmx1ZSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAgICAgICAgICAgICBj
b2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFz
a0JsdWUpOworICAgICAgICAgfQorICAgICB9CisgCistICAgICppc0VtdWxhdGVkT3V0ID0gaXNG
b3JtYXRFbXVsYXRlZDsKKysgICAgKmVtdWxhdGVkQ2hhbm5lbHNPdXQgPSBlbXVsYXRlZENoYW5u
ZWxzOworIAorICAgICByZXR1cm4gY29sb3JXcml0YWJsZU1hc2s7CisgfQorIAorIE1UTENvbG9y
V3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10
bEZvcm1hdCkKKyB7CistICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4gdmFs
dWUKKy0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOworLSAgICByZXR1cm4gR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1hdEVtdWxhdGVkKTsKKysgICAgLy8gSWdu
b3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorKyAgICBib29sIGVtdWxhdGVkQ2hh
bm5lbHM7CisrICAgIHJldHVybiBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwg
JmVtdWxhdGVkQ2hhbm5lbHMpOworIH0KKyAKKyBib29sIElzRm9ybWF0RW11bGF0ZWQoY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCkKKyB7CistICAgIGJvb2wgaXNGb3JtYXRFbXVsYXRlZDsK
Ky0gICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1h
dEVtdWxhdGVkKTsKKy0gICAgcmV0dXJuIGlzRm9ybWF0RW11bGF0ZWQ7CisrICAgIGJvb2wgZW11
bGF0ZWRDaGFubmVsczsKKysgICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxG
b3JtYXQsICZlbXVsYXRlZENoYW5uZWxzKTsKKysgICAgcmV0dXJuIGVtdWxhdGVkQ2hhbm5lbHM7
CisgfQorIAorIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJD
b2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQorQEAgLTgzNyw2ICs5MDgs
MTUxIEBAIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xv
ciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sCisgICAgIHJldHVybiByZTsKKyB9CisgCisr
TlNVSW50ZWdlciBHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhpZDxNVExE
ZXZpY2U+IGRldmljZSkKKyt7CisrICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQ
VUZhbWlseUFwcGxlNF0pCisrICAgIHsKKysgICAgICAgIHJldHVybiA2NDsKKysgICAgfQorKyAg
ICBlbHNlIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0pCisr
ICAgIHsKKysgICAgICAgIHJldHVybiAzMjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiAxNjsKKysgICAgfQorK30KKysKKytOU1VJbnRlZ2VyIEdldE1heE51bWJl
ck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSkKKyt7CisrICAg
IGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0gfHwgW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlNYWMxXSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIDg7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gNDsKKysg
ICAgfQorK30KKysKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKGlkPE1U
TERldmljZT4gZGV2aWNlKQorK3sKKysgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6
TVRMR1BVRmFtaWx5QXBwbGUxXTsKKyt9CisrCisrc3RhdGljIE5TVUludGVnZXIgZ2V0TmV4dExv
Y2F0aW9uRm9yRm9ybWF0KGNvbnN0IEZvcm1hdENhcHMgJmNhcHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJn
ZXRTaXplKQorK3sKKysgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworKyAgICB1aW50OF90
IGFsaWdubWVudCAgICAgICAgID0gY2Fwcy5hbGlnbm1lbnQ7CisrICAgIE5TVUludGVnZXIgcGl4
ZWxCeXRlcyAgICAgPSBjYXBzLnBpeGVsQnl0ZXM7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRl
c01TQUEgPSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworKyAgICBwaXhlbEJ5dGVzICAgICAgICAgICAg
ICAgID0gaXNNU0FBID8gcGl4ZWxCeXRlc01TQUEgOiBwaXhlbEJ5dGVzOworKworKyAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1l
bnQgLSAxKSkgJiB+KGFsaWdubWVudCAtIDEpOworKyAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6
ZSArPSBwaXhlbEJ5dGVzOworKyAgICByZXR1cm4gY3VycmVudFJlbmRlclRhcmdldFNpemU7Cisr
fQorKworK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvcihjb25zdCBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCisreworKyAgICBO
U1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKysKKysgICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRl
dmljZSk7IGkrKykKKysgICAgeworKyAgICAgICAgTVRMUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQg
PSBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5waXhlbEZvcm1hdDsKKysg
ICAgICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgID0gZGVzY3JpcHRvci5jb2xvckF0dGFj
aG1lbnRzW2ldLnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKHBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0
U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBp
c01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAg
ICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCA9PQor
KyAgICAgICAgZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
KQorKyAgICB7CisrICAgICAgICBib29sIGlzTXNhYSA9IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVw
dGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPSBjb250
ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworKyAgICAg
ICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4
dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUp
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxG
b3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGJvb2wgaXNNc2FhICAgICAg
ICAgICAgPSBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnNhbXBsZUNvdW50ID4g
MTsKKysgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlz
cGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZv
ckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAg
IH0KKysgICAgICAgIGlmIChkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUucGl4
ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgPSBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50
LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMg
JmNhcHMgPSBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZv
cm1hdCk7CisrICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAg
ICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplOworK30KKytOU1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKAorKyAgICBjb25zdCBNVExSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisrICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisr
ICAgIGlkPE1UTERldmljZT4gZGV2aWNlKQorK3sKKysgICAgTlNVSW50ZWdlciBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9IDA7CisrICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgICAgICAg
ICAgPSBkZXNjcmlwdG9yLnNhbXBsZUNvdW50ID4gMTsKKysgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRldmljZSk7IGkr
KykKKysgICAgeworKyAgICAgICAgTVRMUmVuZGVyUGlwZWxpbmVDb2xvckF0dGFjaG1lbnREZXNj
cmlwdG9yICpjb2xvciA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXTsKKysgICAgICAg
IGlmIChjb2xvci5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERp
c3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhjb2xvci5waXhlbEZvcm1hdCk7CisrICAgICAg
ICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAgICAgICAgICBnZXROZXh0
TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7
CisrICAgICAgICB9CisrICAgIH0KKysgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50
UGl4ZWxGb3JtYXQgPT0gZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQor
KyAgICB7CisrICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1h
dCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29u
c3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldERpc3Bs
YXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVs
Rm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAg
ICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1U
TFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3Jt
YXRDYXBzICZjYXBzID0KKysgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5n
ZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQp
OworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAg
ICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRh
cmdldFNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc3RlbmNpbEF0
dGFjaG1lbnRQaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLnN0
ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJU
YXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNh
cHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKKyt9CisrCisgZ2w6OkJveCBN
VExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQorIHsKKyAgICAgcmV0
dXJuIGdsOjpCb3goc3RhdGljX2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLngpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG10bFJlZ2lvbi5vcmlnaW4ueSksCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWwKK2luZGV4IDQyNzJjNGYuLjJhOWJiNWQgMTAwNjQ0
CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCisr
KysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCitAQCAt
MzM0LDcgKzMzNCw3IEBAIGtlcm5lbCB2b2lkIGJsaXRTdGVuY2lsVG9CdWZmZXJDUyh1c2hvcnQy
IGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyB9CisgCisgLy8gRnJhZ21l
bnQncyBzdGVuY2lsIG91dHB1dCBpcyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBNZXRhbCAyLjEKKy1A
QCNpZiBfX01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKysjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0g
MjEwCisgCisgc3RydWN0IEZyYWdtZW50U3RlbmNpbE91dAorIHsKK0BAIC0zOTcsNCArMzk3LDQg
QEAgZnJhZ21lbnQgRnJhZ21lbnREZXB0aFN0ZW5jaWxPdXQgYmxpdERlcHRoU3RlbmNpbEZTKAor
ICAgICAgICAgICAgICAgICAgICAgICBzcmNTdGVuY2lsVGV4dHVyZUN1YmUsIGlucHV0LnRleENv
b3Jkcywgb3B0aW9ucy5zcmNMZXZlbCwgb3B0aW9ucy5zcmNMYXllcik7CisgICAgIHJldHVybiBy
ZTsKKyB9CistQEAjZW5kaWYgIC8vIF9fTUVUQUxfVkVSU0lPTl9fID49IDIxMAorKyNlbmRpZiAg
Ly8gX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb21tb24uaAoraW5kZXggNjhjNzc0NS4uZTY2NzNiNSAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaAorQEAgLTEwLDggKzEwLDgg
QEAKKyAKKyAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgI2lmbmRlZiBTS0lQX1NURF9IRUFERVJTCist
QEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgorLUBAIyAgICBpbmNsdWRlIDxtZXRhbF9zdGRs
aWI+CisrIyAgICBpbmNsdWRlIDxzaW1kL3NpbWQuaD4KKysjICAgIGluY2x1ZGUgPG1ldGFsX3N0
ZGxpYj4KKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWwgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAoraW5k
ZXggZGY3YzRjOS4uMWI0MDhkOCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAorQEAgLTQsMjIgKzQsMjIgQEAKKyAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCisgLy8gY29weV9idWZmZXIubWV0YWw6
IGltcGxlbWVudHMgY29tcHV0ZSBzaGFkZXIgdGhhdCBjb3B5IGZvcm1hdHRlZCBkYXRhIGZyb20g
YnVmZmVyIHRvIHRleHR1cmUsCistLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisrLy8g
ZnJvbSB0ZXh0dXJlIHRvIGJ1ZmZlciBhbmQgZnJvbSBidWZmZXIgdG8gYnVmZmVyLgorIC8vIE5P
VEUoaHFsZSk6IFRoaXMgZmlsZSBpcyBhIGJpdCBoYXJkIHRvIHJlYWQgYnV0IHRoZXJlIGFyZSBh
IGxvdCBvZiByZXBlYXRlZCB3b3JrcywgYW5kIGl0IHdvdWxkCisgLy8gYmUgYSBwYWluIHRvIGlt
cGxlbWVudCB3aXRob3V0IHRoZSB1c2Ugb2YgbWFjcm9zLgorIC8vCisgCistQEAjaW5jbHVkZSA8
bWV0YWxfcGFjaz4KKysjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyAKKyAjaW5jbHVkZSAiY29tbW9u
LmgiCisgI2luY2x1ZGUgImZvcm1hdF9hdXRvZ2VuLmgiCisgCisgdXNpbmcgbmFtZXNwYWNlIHJ4
OjptdGxfc2hhZGVyOworIAorLWNvbnN0YW50IGludCBrQ29weUZvcm1hdFR5cGUgW1tmdW5jdGlv
bl9jb25zdGFudCgxMCldXTsKKytjb25zdGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rp
b25fY29uc3RhbnQoMSldXTsKKyAKKyAvKiAtLS0tLS0tLSBjb3B5IHBpeGVsIGRhdGEgYmV0d2Vl
biBidWZmZXIgYW5kIHRleHR1cmUgLS0tLS0tLS0tKi8KKy1jb25zdGFudCBpbnQga0NvcHlUZXh0
dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDIwKV1dOworK2NvbnN0YW50IGludCBrQ29weVRl
eHR1cmVUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMildXTsKKyBjb25zdGFudCBib29sIGtDb3B5
VGV4dHVyZVR5cGUyRCAgICAgID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyRDsK
KyBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5cGUyREFycmF5ID0ga0NvcHlUZXh0dXJlVHlw
ZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OworIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJlVHlw
ZTJETVMgICAgPSBrQ29weVRleHR1cmVUeXBlID09IGtUZXh0dXJlVHlwZTJETXVsdGlzYW1wbGU7
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0
X2F1dG9nZW4uaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9h
dXRvZ2VuLmgKK2luZGV4IGExN2VhZDMuLmI5OTFlNDggMTAwNjQ0CistLS0gYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCitAQCAtMjQ1LDUg
KzI0NSw1IEBAIGVudW0KKyAKKyB9CisgCistfSAgLy8gbmFtZXNwYWNlIG10bF9zaGFkZXIKKy19
ICAvLyBuYW1lc3BhY2UgcngKKyt9CisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX2luZGljZXMubWV0YWwKK2luZGV4IDJkODM1M2IuLmVlZDYx
ZWEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5f
aW5kaWNlcy5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Z2VuX2luZGljZXMubWV0YWwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5k
ZXhVbmFsaWduZWRVMzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBp
ZHgpCisgICAgIHJldHVybiBpbnB1dDAgfCAoaW5wdXQxIDw8IDgpIHwgKGlucHV0MiA8PCAxNikg
fCAoaW5wdXQzIDw8IDI0KTsKKyB9CisgCista2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1Ux
Nih1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9uc1tb
YnVmZmVyKDApXV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbW2J1ZmZlcigxKV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMildXSkKKytrZXJuZWwgdm9pZCBjb252
ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBh
cmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0IFtbYnVmZmVyKDEpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRwdXQgW1tidWZmZXIoMildXSkK
KyB7CisgICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9ucyk7CisgCitA
QCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBp
ZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgIH0KKyB9CisgCista2VybmVsIHZv
aWQgY29udmVydEluZGV4VTE2KAorLSAgICB1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dy
aWRdXSwKKy0gICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZm
ZXIoMCldXSwKKy0gICAgY29uc3RhbnQgdWNoYXIgKmlucHV0W1sgYnVmZmVyKDEpLCBmdW5jdGlv
bl9jb25zdGFudChrU291cmNlQnVmZmVyVW5hbGlnbmVkKSBdXSwKKy0gICAgY29uc3RhbnQgdXNo
b3J0ICppbnB1dEFsaWduZWRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VC
dWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMild
XSkKKytrZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYodWludCBpZHggW1t0aHJlYWRfcG9zaXRp
b25faW5fZ3JpZF1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyVW5h
bGlnbmVkKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQg
KmlucHV0QWxpZ25lZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRldmljZSB1c2hvcnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsK
KyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKKyAKK0BAIC05
NiwxMiArOTcsMTMgQEAga2VybmVsIHZvaWQgY29udmVydEluZGV4VTE2KAorICAgICBvdXRwdXRb
aWR4XSA9IHZhbHVlOworIH0KKyAKKy1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMzIoCistICAg
IHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJV
bmFsaWduZWQpIF1dLAorLSAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWRbWyBidWZmZXIo
MSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2
aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgY29udmVydEluZGV4
VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtb
YnVmZmVyKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgdWludCAqaW5wdXRBbGlnbmVkCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVy
QWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91
dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsKKyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQo
aWR4LCBvcHRpb25zKTsKKyAKK0BAIC0xNDAsOSArMTQyLDkgQEAga2VybmVsIHZvaWQgZ2VuVHJp
RmFuSW5kaWNlc0Zyb21BcnJheSh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0s
CisgCisgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludCBpZHgsCistICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQg
dWNoYXIgKmlucHV0VThbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwK
Ky0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5j
dGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291
cmNlQnVmZmVyVTMyKV1dKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dFU4IFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlv
bl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyIFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJj
ZUJ1ZmZlclUzMildXSkKKyB7CisgICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCisgICAgIHsK
K0BAIC0xNzAsMTMgKzE3MiwxNSBAQCBpbmxpbmUgdWludCBnZXRJbmRleFUzMih1aW50IG9mZnNl
dCwKKyAvLyBOT1RFKGhxbGUpOiB0cmlhbmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNu
J3Qgc3VwcG9ydCBwcmltaXRpdmUgcmVzdGFydC4KKyAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4g
aW5kaWNlcyBmcm9tIGFuIGluZGljZXMgYnVmZmVyLiBpbmRleENvdW50IG9wdGlvbnMgaW5kaWNh
dGVzIG51bWJlcgorIC8vIG9mIGluZGljZXMgc3RhcnRpbmcgZnJvbSB0aGUgM3JkLgorLWtlcm5l
bCB2b2lkIGdlblRyaUZhbkluZGljZXNGcm9tRWxlbWVudHMoCistICAgIHVpbnQgaWR4W1t0aHJl
YWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJh
bXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtb
IGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKKy0g
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclUxNikgXV0sCistICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMy
W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKSBdXSwK
Ky0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgZ2Vu
VHJpRmFuSW5kaWNlc0Zyb21FbGVtZW50cyh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9n
cmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNgorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0
aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dFUzMgorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2Nv
bnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCisgewor
ICAgICBBTkdMRV9JRFhfQ09OVkVSU0lPTl9HVUFSRChpZHgsIG9wdGlvbnMpOworIAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0
YWwgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFs
CitpbmRleCBiM2EzNjc1Li5mMjMzOGIyIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorQEAgLTIzLDggKzIzLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOworIAorICNkZWZpbmUgVEVYRUxfTE9BRChp
bmRleCkgZmxvYXQ0KHNSW2luZGV4XSwgc0dbaW5kZXhdLCBzQltpbmRleF0sIHNBW2luZGV4XSkK
KyAKKy0jZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVh
cih0ZXhlbCkgOiB0ZXhlbCkKKy0KKyAjZGVmaW5lIE9VVF9PRl9CT1VORF9DSEVDSyhlZGdlVmFs
dWUsIHRhcmdldFZhbHVlLCBjb25kaXRpb24pIFwKKyAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZh
bHVlKSA6ICh0YXJnZXRWYWx1ZSkKKyAKK0BAIC0zMiw3ICszMCw2IEBAIHN0cnVjdCBHZW5NaXBQ
YXJhbXMKKyB7CisgICAgIHVpbnQgc3JjTGV2ZWw7CisgICAgIHVpbnQgbnVtTWlwTGV2ZWxzVG9H
ZW47CistICAgIGJvb2wgc1JHQjsKKyB9OworIAorIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBM
ZXZlbHNUb0dlbiA+IDEsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dl
ciBvZiB0d28uIElmIGl0CitAQCAtODMsMTAgKzgwLDYgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUz
RE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKyAg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisgCisgICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKy0gICAgaWYgKG9wdGlvbnMuc1JHQikKKy0gICAgeworLSAgICAgICAg
dGV4ZWwxID0gbGluZWFyVG9TUkdCKHRleGVsMSk7CistICAgIH0KKyAgICAgVEVYRUxfU1RPUkUo
bEluZGV4LCB0ZXhlbDEpOworIAorICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKK0BAIC0xMTksNyArMTEyLDcgQEAga2VybmVsIHZvaWQgZ2VuZXJh
dGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwK
KyAKKyAgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQg
KyB0ZXhlbDUgKyB0ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOworIAorLSAgICAgICAg
ZHN0TWlwMi53cml0ZShUT19MSU5FQVIodGV4ZWwxKSwgZ0luZGljZXMgPj4gMSk7CisrICAgICAg
ICBkc3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CisgCisgICAgICAgICAvLyBX
cml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVs
MSk7CitAQCAtMTY1LDcgKzE1OCw3IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVp
bnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0
ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4
ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDMud3JpdGUo
VE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDIpOworKyAgICAgICAgZHN0TWlwMy53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOworIAorICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQorICAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworQEAgLTIxMSw2
ICsyMDQsMzQ4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtb
dGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3
ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDQud3JpdGUoVE9fTElORUFSKHRl
eGVsMSksIGdJbmRpY2VzID4+IDMpOworKyAgICAgICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJ
bmRpY2VzID4+IDMpOworKyAgICB9CisrfQorKworK2tlcm5lbCB2b2lkIGdlbmVyYXRlMkRNaXBt
YXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0MiBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlv
bl9pbl9ncmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZs
b2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUo
MSldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4
dHVyZSgzKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9h
dCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIo
MCldXSkKKyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAx
OworKyAgICB1c2hvcnQyIG1pcFNpemUgPQorKyAgICAgICAgdXNob3J0MihzcmNUZXh0dXJlLmdl
dF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0TWlwTGV2
ZWwpKTsKKysgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYg
Z0luZGljZXMueSA8IG1pcFNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVy
ZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0
ZXI6OmxpbmVhcik7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IFVzZSBzaW1kX2dyb3VwIGZ1bmN0
aW9uIHdoZW5ldmVyIGF2YWlsYWJsZS4gVGhhdCBjb3VsZCBhdm9pZCBiYXJyaWVyIHVzZS4KKysK
KysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0
LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltrVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3Jv
dXBYWV07CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZs
b2F0NCB0ZXhlbDE7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBm
bG9hdDIobWlwU2l6ZSk7CisrICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5z
YW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkp
OworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAgZHN0TWlwMS53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAg
bEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBM
ZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKworKyAg
ICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysKKysg
ICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0gMCkg
IC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0RWRn
ZSA9IGdJbmRpY2VzID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAgICAvLyAo
eCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2ls
bCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5E
X0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOworKyAgICAg
ICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9VTkRfQ0hF
Q0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVkZ2UueSk7
CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdyb3VwWCAr
IDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcyA+PiAxKTsKKysKKysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkK
KysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBp
ZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorKyAgICB7CisrICAgICAgICByZXR1
cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlwIGxldmVsIC0tLS0tLS0tCisrICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAg
ICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysgICAgaWYgKChsSW5kZXggJiAweDFi
KSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlw
U2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29s
MiBhdEVkZ2UgPSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysK
KysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlz
IDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIg
PSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIpLCBhdEVk
Z2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9Cisr
ICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXgg
KyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhF
TF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3VwWCArIDIpKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisr
ICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQu
MDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAyKTsKKysK
KysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JF
KGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZl
bHNUb0dlbiA9PSAzKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAg
Ly8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIo
bWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11
bHRpcGxlIG9mIDgKKysgICAgaWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAm
IGIxMTExMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNp
emUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMg
Pj4gMikgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkp
CisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFs
IHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0so
dGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAo
eCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JP
VU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCks
IGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhl
bDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICog
a1RocmVhZEdyb3VwWCArIDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1p
cDQud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAzKTsKKysgICAgfQorK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZVR5cGVSLCB0eXBlbmFtZSBUZXh0dXJlVHlwZVc+Cisrc3RhdGlj
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJh
eTJuZEFuZE1vcmVNaXBtYXBzKAorKyAgICB1aW50IGxJbmRleCwKKysgICAgdXNob3J0MyBnSW5k
aWNlcywKKysgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisrICAgIFRleHR1cmVUeXBlVyBk
c3RNaXAyLAorKyAgICBUZXh0dXJlVHlwZVcgZHN0TWlwMywKKysgICAgVGV4dHVyZVR5cGVXIGRz
dE1pcDQsCisrICAgIHVzaG9ydDIgbWlwMVNpemUsCisrICAgIGZsb2F0NCBtaXAxVGV4ZWwsCisr
ICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzUiwKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNHLAor
KyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0IsCisrICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwK
KysgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zKQorK3sKKysgICAgdXNob3J0MiBt
aXBTaXplID0gbWlwMVNpemU7CisrICAgIGZsb2F0NCB0ZXhlbDEgICA9IG1pcDFUZXhlbDsKKysK
KysgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKwor
KyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysK
KysgICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0g
MCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0
RWRnZSA9IGdJbmRpY2VzLnh5ID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAg
ICAvLyAoeCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhl
bDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOwor
KyAgICAgICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVk
Z2UueSk7CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0g
T1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdy
b3VwWCArIDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4
ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUo
dGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAxLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdy
aXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwx
KTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQor
KyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlw
IGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1f
dGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysg
ICAgaWYgKChsSW5kZXggJiAweDFiKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAK
KysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0
MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMSkgPT0gKG1p
cFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAv
LyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhF
TF9MT0FEKGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAg
ICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRl
eGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsK
KysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3Vw
WCArIDIpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRF
ZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwy
ICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4
ZWwxLCBnSW5kaWNlcy54eSA+PiAyLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsK
KyAgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAzKQorKyAg
ICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSA0dGggbWlwIGxl
dmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhy
ZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKysgICAg
aWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIxMTExMTEpID09IDAKKysg
ICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0Migx
KSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMikgPT0gKG1pcFNp
emUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJ
ZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysg
ICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9M
T0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAg
ICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVs
MSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysg
ICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICoga1RocmVhZEdyb3VwWCAr
IDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDQud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKysgICAgfQorK30KKysKKytrZXJuZWwg
dm9pZCBnZW5lcmF0ZUN1YmVNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3Ro
cmVhZGdyb3VwXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQzIGdJ
bmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1d
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBb
W3RleHR1cmUoMildXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVj
dWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3Jp
dGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKKyt7Cisr
ICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAgICB1c2hv
cnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmly
c3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisrICAg
IGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5kaWNlcy55
IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIo
bWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVh
cik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZsb2F0
NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkg
LyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0gc3JjVGV4dHVyZS5zYW1w
bGUodGV4dHVyZVNhbXBsZXIsIGN1YmVUZXhjb29yZHModGV4Q29vcmRzLCBpbnQoZ0luZGljZXMu
eikpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwob3B0aW9u
cy5zcmNMZXZlbCkpOworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAg
ZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFs
bCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAgbEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAg
fQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBz
dHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltr
VGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZ
XTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJl
YWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3JvdXBYWV07CisrCisrICAgIGdlbmVyYXRlQ3ViZU9y
MkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMsIHNyY1RleHR1cmUsIGRz
dE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pcDFTaXplLCBtaXAxVGV4ZWwsIHNSLCBzRywgc0IsIHNBLCBvcHRpb25z
KTsKKyt9CisrCisra2VybmVsIHZvaWQgZ2VuZXJhdGUyREFycmF5TWlwbWFwcyh1aW50IGxJbmRl
eCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNob3J0MyBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlk
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1p
cDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIp
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6
d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkK
Kyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAg
ICB1c2hvcnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lk
dGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7
CisrICAgIGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5k
aWNlcy55IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNh
bXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6
OmxpbmVhcik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAg
IGZsb2F0NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAg
ICAgZmxvYXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwg
MC41KSkgLyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0KKysgICAgICAg
ICAgICBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxlciwgdGV4Q29vcmRzLCBnSW5kaWNl
cy56LCBsZXZlbChvcHRpb25zLnNyY0xldmVsKSk7CisrCisrICAgICAgICAvLyBXcml0ZSB0byB0
ZXh0dXJlCisrICAgICAgICBkc3RNaXAxLndyaXRlKG1pcDFUZXhlbCwgZ0luZGljZXMueHksIGdJ
bmRpY2VzLnopOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgLy8gVGhpcyB3
aWxsIGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisrICAgICAgICBsSW5kZXggPSAw
eGZmZmZmZmZmOworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2Vu
ID09IDEpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyBVc2Ug
c3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3QuCisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0dba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3Jv
dXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKysKKysg
ICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5kTW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNl
cywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlwMywgZHN0TWlwNCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNH
LCBzQiwgc0EsIG9wdGlvbnMpOworIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAoraW5kZXggOTA1YzE5Ni4uYWQ1ODYwZiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxp
dHkubWV0YWwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2li
aWxpdHkubWV0YWwKK0BAIC02LDcgKzYsNyBAQAorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAK
Ky1jb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0IFtbZnVuY3Rpb25fY29u
c3RhbnQoMTAwMCldXTsKKytjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0
IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKKyAKKyAvLyBDb21iaW5lIHRoZSB2aXNpYmlsaXR5
IHJlc3VsdCBvZiBjdXJyZW50IHJlbmRlciBwYXNzIHdpdGggcHJldmlvdXMgdmFsdWUgZnJvbSBw
cmV2aW91cyByZW5kZXIKKyAvLyBwYXNzCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcCBiL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKK2lu
ZGV4IDc1NWJkNjEuLjdkNWFjNTggMTAwNjQ0CistLS0gYS9zcmMvbGliR0xFU3YyL2VudHJ5X3Bv
aW50c19lZ2wuY3BwCisrKysgYi9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCitA
QCAtNDI4LDggKzQyOCw2IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX0Rlc3Ryb3lDb250
ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKKyAKKyAgICAgaWYgKGNvbnRleHRX
YXNDdXJyZW50KQorICAgICB7CistICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQs
IGRpc3BsYXktPm1ha2VDdXJyZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIp
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVnbERlc3Ryb3lDb250ZXh0IiwgR2V0
Q29udGV4dElmVmFsaWQoZGlzcGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CisgICAgICAgICBT
ZXRDb250ZXh0Q3VycmVudCh0aHJlYWQsIG51bGxwdHIpOworICAgICB9CisgCitAQCAtNDY2LDgg
KzQ2NCw4IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX01ha2VDdXJyZW50KEVHTERpc3Bs
YXkgZHB5LAorICAgICAvLyBPbmx5IGNhbGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Ig
c3VyZmFjZXMgaGF2ZSBjaGFuZ2VkLgorICAgICBpZiAocHJldmlvdXNEcmF3ICE9IGRyYXdTdXJm
YWNlIHx8IHByZXZpb3VzUmVhZCAhPSByZWFkU3VyZmFjZSB8fCBwcmV2aW91c0NvbnRleHQgIT0g
Y29udGV4dCkKKyAgICAgeworLSAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCistICAgICAg
ICAgICAgdGhyZWFkLCBkaXNwbGF5LT5tYWtlQ3VycmVudChwcmV2aW91c0NvbnRleHQsIGRyYXdT
dXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisrICAgICAgICBBTkdMRV9FR0xfVFJZX1JF
VFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5tYWtl
Q3VycmVudCh0aHJlYWQsIGRyYXdTdXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQiLCBHZXRDb250ZXh0SWZW
YWxpZChkaXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKKyAKKyAgICAgICAgIFNldENvbnRl
eHRDdXJyZW50KHRocmVhZCwgY29udGV4dCk7CitAQCAtODE4LDggKzgxNiw4IEBAIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgRUdMX1JlbGVhc2VUaHJlYWQodm9pZCkKKyAgICAgICAgIGlmIChwcmV2
aW91c0RyYXcgIT0gRUdMX05PX1NVUkZBQ0UgfHwgcHJldmlvdXNSZWFkICE9IEVHTF9OT19TVVJG
QUNFIHx8CisgICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQor
ICAgICAgICAgeworLSAgICAgICAgICAgIEFOR0xFX0VHTF9UUllfUkVUVVJOKAorLSAgICAgICAg
ICAgICAgICB0aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250
ZXh0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKKysgICAgICAgICAgICBBTkdMRV9FR0xf
VFJZX1JFVFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNEaXNwbGF5LT5tYWtlQ3VycmVudCh0aHJlYWQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2xSZWxlYXNlVGhyZWFk
IiwgbnVsbHB0ciwgRUdMX0ZBTFNFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIEFOR0xFX0VHTF9U
UllfUkVUVVJOKHRocmVhZCwgcHJldmlvdXNEaXNwbGF5LT5yZWxlYXNlVGhyZWFkKCksICJlZ2xS
ZWxlYXNlVGhyZWFkIiwKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
ZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9l
Z2xfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVu
YW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9lZ2xfVGVzdEV4cGVjdGF0aW9ucwor
ZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMl90ZXN0X2V4cGVj
dGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczJfVGVzdEV4cGVj
dGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3Jj
L3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMyX1Rlc3RFeHBlY3RhdGlvbnMKK2RpZmYgLS1n
aXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9u
cworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBw
b3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0
cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBh
L3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX1Rlc3RF
eHBlY3RhdGlvbnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3Rz
L2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfVGVzdEV4
cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M190ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xl
czNfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRl
X3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M19yb3RhdGVfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUg
ZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRlX3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM19y
b3RhdGVfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBv
cnQvZGVxcF9raHJfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBf
c3VwcG9ydC9kZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4
IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9raHJfZ2xlczJf
dGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9k
ZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2Rl
cXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rl
c3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxh
cml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
a2hyX2dsZXMzMV90ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEv
c3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50
eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3RzL2RlcXBfc3Vw
cG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMv
dGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CmluZGV4IGUxMGQxMTJjODU1ZTAzZjY1Y2IyNDNmZjE2YzNkOWIyZWMwOWY2ODEuLjZmNmE3MmI5
YWI2ZGQ3MjI4N2Q4MmQ2Y2ZiMjA4MTEyMjdmNmE3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtNzMsNiArNzMs
OSBAQCBlbnVtIFNoU2hhZGVyT3V0cHV0CiAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wg
dG8gYmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVk
IHRvIE1ldGFsCiAgICAgLy8gbGF0ZXIuCiAgICAgU0hfR0xTTF9NRVRBTF9PVVRQVVQgPSAweDhC
NEMsCisKKyAgICAvLyBPdXRwdXQgZm9yIE1TTAorICAgIFNIX01TTF9NRVRBTF9PVVRQVVQgPSAw
eDhCNEQsCiB9OwogCiAvLyBDb21waWxlIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKaW5kZXggZmU1ZThh
YmRmMDYwNDFkNmMxM2I4MDNmYmJmYTM4OGQyOGNjZjVhMy4uOWEwYmVlMDM3YTg5ZjMxYzhkODU3
MWE1YzAxMzJjZjdmMDlmYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaApAQCAtMjcsNyArMjcsNyBAQCBzdHJ1
Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1
cHBvcnRzIGRlcHRoIHRleHR1cmUncyBmaWx0ZXJpbmcgb3RoZXIgdGhhbiBuZWFyZXN0IiwgJm1l
bWJlcnN9OwogCiAgICAgLy8gU3VwcG9ydCBleHBsaWNpdCBtZW1vcnkgYmFycmllcgotICAgIEZl
YXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXJf
bXRsIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgIEZlYXR1cmUgaGFzRXhw
bGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBleHBsaWNpdCBtZW1vcnkgYmFycmllciIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIFNvbWUgcmVuZGVyZXIgY2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFw
bHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgpAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgRmVh
dHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRz
IG5vbiB1bmlmb3JtIGNvbXB1dGUgc2hhZGVyIGRpc3BhdGNoJ3MgZ3JvdXAgc2l6ZSIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIGZyYWdtZW50IHN0ZW5jaWwgb3V0cHV0IHN1cHBvcnQKLSAgICBGZWF0
dXJlIGhhc1N0ZW5jaWxPdXRwdXQgPSB7Imhhc19zaGFkZXJfc3RlbmNpbF9vdXRwdXQiLCBGZWF0
dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0
ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMg
c3RlbmNpbCBvdXRwdXQgZnJvbSBmcmFnbWVudCBzaGFkZXIiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbWVtYmVyc307CiAKQEAgLTU5LDYgKzU5LDEwIEBAIHN0cnVjdCBGZWF0
dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgRmVhdHVyZSBoYXNFdmVudHMgPSB7Imhhc19t
dGxfZXZlbnRzIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZt
ZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxsb3dJbmxpbmVDb25zdFZlcnRleERhdGEgPSB7Cisg
ICAgICAgICJhbGxvd19pbmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgdXNpbmcgaW5s
aW5lIGNvbnN0YW50IGRhdGEgZm9yIHNtYWxsIGNsaWVudCB2ZXJ0ZXggZGF0YSIsICZtZW1iZXJz
fTsKKwogICAgIC8vIE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBh
cmUgbm90IHN1cHByb3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCiAgICAgLy8gdGhleSBh
cmUgc3VwcHJvdGVkOgogICAgIEZlYXR1cmUgYWxsb3dTZXBhcmF0ZWREZXB0aFN0ZW5jaWxCdWZm
ZXJzID0gewpAQCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNl
dEJhc2UKICAgICAgICAgIndoZXJlYXMgb3RoZXJzIHN1Y2ggYXMgbWFjT1MgZG9uJ3QiLAogICAg
ICAgICAmbWVtYmVyc307CiAKKyAgICBGZWF0dXJlIGFsbG93UnVudGltZVNhbXBsZXJDb21wYXJl
TW9kZSA9IHsKKyAgICAgICAgImFsbG93X3J1bnRpbWVfc2FtcGxlcl9jb21wYXJlX21vZGUiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3Vw
cG9ydHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAm
bWVtYmVyc307CisKKyAgICBGZWF0dXJlIGFsbG93U2FtcGxlckNvbXBhcmVHcmFkaWVudCA9IHsK
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVf
Y29tcGFyZSB3aXRoIGdyYWRpZW50cyIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dT
YW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1cmVD
YXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVfY29tcGFyZSB3aXRoIGxvZCIsICZt
ZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFsbG93X2J1
ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBidWZm
ZXIgcmVhZCAmIHdyaXRlIGluIHRoZSBzYW1lIHNoYWRlciIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbWVtYmVyc307CisKICAgICBGZWF0dXJlIGFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUgPSB7CiAgICAgICAgICJhbGxvd19tc2FhX3N0b3JlX2FuZF9yZXNv
bHZlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAiVGhlIHJlbmRl
cmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNhbWUgcGFzcyIsICZt
ZW1iZXJzfTsKQEAgLTc1LDE0ICs5NCwyNyBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJl
U2V0QmFzZQogICAgICAgICAiZ2VuX211bHRpcGxlX21pcHNfcGVyX3Bhc3MiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZ2Vu
ZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJlcnN9OwogCisgICAgRmVh
dHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhfYXNfdW5zdXBwb3J0
ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZvcm1hdCBhcyB1bnN1
cHBvcnRlZC4iLCAmbWVtYmVyc307CisKKyAgICBGZWF0dXJlIGJyZWFrUmVuZGVyUGFzc0lzQ2hl
YXAgPSB7ImJyZWFrX3JlbmRlcl9wYXNzX2lzX2NoZWFwIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRh
bEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJlYWtp
bmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24iLCAmbWVtYmVyc307CisKICAgICBG
ZWF0dXJlIGZvcmNlQnVmZmVyR1BVU3RvcmFnZSA9IHsKLSAgICAgICAgImZvcmNlX2J1ZmZlcl9n
cHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAg
ICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBib3RoIGJ1ZmZlcidzIG1lbW9yeSBhbGxvY2F0aW9u
IG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCi0gICAgICAgICJtYWNPUyksIGZv
cmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycy4iLAorICAgICAgICAi
Zm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVz
LAorICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBidWZmZXInIG1lbW9yeSBh
bGxvY2F0aW9uIG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCisgICAgICAgICJt
YWNPUyksIGZvcmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycyBldmVy
eXRpbWUgb3Igbm90LiIsCiAgICAgICAgICZtZW1iZXJzfTsKIAotICAgIEZlYXR1cmUgZm9yY2VE
MjRTOEFzVW5zdXBwb3J0ZWQgPSB7ImZvcmNlX2QyNHM4X2FzX3Vuc3VwcG9ydGVkIiwgRmVhdHVy
ZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkZvcmNlIERlcHRoMjRTdGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwg
Jm1lbWJlcnN9OworICAgIEZlYXR1cmUgZm9yY2VOb25DU0Jhc2VNaXBtYXBHZW5lcmF0aW9uID0g
eworICAgICAgICAiZm9yY2Vfbm9uX2NzX21pcG1hcF9nZW4iLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1l
dGFsRmVhdHVyZXMsCisgICAgICAgICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBD
b21wdXRlIFNoYWRlciBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgor
ICAgICAgICAiYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24gbWlnaHQgY2F1c2UgR1BVIGhhbmcgb24g
c29tZSBvbGRlciBpT1MgZGV2aWNlcy4iLAorICAgICAgICAmbWVtYmVyc307CisKKyAgICBGZWF0
dXJlIGVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjayA9IHsKKyAgICAgICAgImVtdWxhdGVfdHJhbnNm
b3JtX2ZlZWRiYWNrIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAi
VHVybiB0aGlzIG9uIHRvIGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBh
IDItcGFzcyBWUyBmb3IgR0xFUzMuIiwgJm1lbWJlcnN9OwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bv
b2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxv
Yy5jcHAKaW5kZXggMjdkZDkzMDVhOGI2MzRlMzM5OTM3ODMwNzkzNWY4YTJiOWQ3NjJiZi4uM2Jk
Y2MzMDBhMWQ2ZTY3NzVjMWQyOGMyMTg3Mjk3MGZhZWY2OTU0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcApAQCAtMzM1LDcgKzMzNSw3
IEBAIHZvaWQgUG9vbEFsbG9jYXRvcjo6dW5sb2NrKCkKIHZvaWQgQWxsb2NhdGlvbjo6Y2hlY2tB
bGxvY0xpc3QoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQWxsb2NhdGlvbiAqYWxsb2MgPSB0
aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5tUHJldkFsbG9jKQotICAgICAgICBhbGxv
Yy0+Y2hlY2soKTsKKyAgICAgICAgYWxsb2MtPmNoZWNrQWxsb2MoKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuaAppbmRleCA2OTI5OTJjNDM0M2Q4Y2EwMjNiYjBlNzQzZTViNDg5ZjYzYmMxYzc4Li5j
ZDI2NmEwM2JjNTYyMWI4NzIyOWM1YWU3ZDdkYTBiNjI5ZjliNjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmgKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgQWxsb2NhdGlvbgogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjaGVjaygpIGNvbnN0
CisgICAgdm9pZCBjaGVja0FsbG9jKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrR3VhcmRC
bG9jayhwcmVHdWFyZCgpLCBrR3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CiAgICAgICAg
IGNoZWNrR3VhcmRCbG9jayhwb3N0R3VhcmQoKSwga0d1YXJkQmxvY2tFbmRWYWwsICJhZnRlciIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBsZV9w
bGF0Zm9ybV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCmluZGV4IDU1ZWJiN2E4YWU1NzliMmNmYThkM2M1Y2YxYmU3OThk
ZTViODIwMmUuLjgzYWI1MzI2YzU1MGRmZDZkZGRhM2JkMmI4OTRhNTNlNmJjMzMyZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYXBwbGVfcGxhdGZvcm1f
dXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3Bs
YXRmb3JtX3V0aWxzLmgKQEAgLTE1LDI0ICsxNSwzMiBAQAogCiAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1Qgb25seSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CiAKKyNpZiBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBv
ZiB0aGUgMyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCiAvLyBh
dmFpbGFibGU6Ci0jaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAjICAgIGRlZmluZSBBTkdMRV9B
UFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAogICAg
ICAgICBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgbWFjQ2F0YWx5c3QgbWFjQ2F0YWx5c3RWZXIs
IGlPUyBpT1NWZXIsICopCiAvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVp
dGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKIC8v
IGF2YWlsYWJsZToKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIs
IG1hY0NhdGFseXN0VmVyKSBcCiAgICAgICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWND
YXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgKikKKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9DSTog
Y2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4gdmVy
aW9ucyBpcworLy8gYXZhaWxhYmxlOgorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxF
X0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIFwKKyAgICAgICAgQGF2YWlsYWJsZShtYWNDYXRh
bHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKICNlbHNlCiAjICAgIGRlZmluZSBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1Zlcikg
XAogICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpCi0vLyBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9y
bXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKLS8vIGF2YWlsYWJsZToKKwogIyAgICBk
ZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIpIEBh
dmFpbGFibGUobWFjT1MgbWFjVmVyLCAqKQorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZP
UyBpT1NWZXIsICopCiAjZW5kaWYKIAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJOiBjaGVj
ayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1zIChPU1gvaU9TKSBtaW4gdmVyaW9ucyBpcyBh
dmFpbGFibGU6Ci0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1Zl
cikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsICopCisjZGVmaW5lIEFOR0xF
X0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1ZlcikgXAorICAgIEBhdmFpbGFibGUobWFj
T1MgbWFjVmVyLCBpT1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKworLy8gQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX0k6IGNoZWNrIGlmIGEgcGFydGljdWxhciBpT1MgdmVyc2lvbiBpcyBhdmFpbGFi
bGUKKyNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koaU9TVmVyKSBAYXZhaWxhYmxlKGlP
UyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAqKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vZGVidWcuaAppbmRleCBlMDAzN2E0ZTJjYjg2Yjg1NzMzN2I3NWFmM2Vk
ZjdlN2U0NzNlNjMyLi4yODE3MGE1ZDc3ZTY2NjViOTZlYjgzZmY2ZGJjYzJiYmUzNGIwN2M4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0zMTMsMTAg
KzMxMywxNiBAQCBzdGQ6Om9zdHJlYW0gJkZtdEhleChzdGQ6Om9zdHJlYW0gJm9zLCBUIHZhbHVl
KQogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWls
dXJlcyB0byB0aGUgZGVidWcgbG9nCiAjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykK
LSMgICAgZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChleHByZXNz
aW9uID8gc3RhdGljX2Nhc3Q8dm9pZD4oMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8
ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9fRlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklM
RV9fIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiIgPDwgX19MSU5FX18g
PDwgIik6ICIgPDwgI2V4cHJlc3Npb24pKQorIyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24p
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgaWYgKCEoZXhwcmVzc2lvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBfX2J1aWx0aW5fZGVidWd0cmFwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpbnQgeCA9
IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBjYWxsIHNpdGUu
ICovIFwKKyAgICAgICAgICAgICh2b2lkKXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlIChmYWxzZSkK
ICNlbHNlCiAjICAgIGRlZmluZSBBU1NFUlQoY29uZGl0aW9uKSBBTkdMRV9FQVRfU1RSRUFNX1BB
UkFNRVRFUlMgPDwgIShjb25kaXRpb24pCiAjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfRU5BQkxF
X0FTU0VSVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L3BsYXRmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3Jt
LmgKaW5kZXggNjI2ZGI0MWQ5MmMxNjFlMzJmMWJjZmVhYjc1OTZmNGVmMzBjZGFiMC4uNDFmM2Nm
NGZmNzgzOWZkNjhmMzQ5MjZjMzU5MzIxYTY3YTk5MWQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vcGxhdGZvcm0uaApAQCAtMTMyLDExICsxMzIsMTYgQEAKICMg
ICAgaWYgZGVmaW5lZChfX2FybTY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAjICAgICAg
ICBkZWZpbmUgQU5HTEVfQ1BVX0FSTTY0IDEKICMgICAgZW5kaWYKLS8vIEVBR0wgc2hvdWxkIGJl
IGVuYWJsZWQgb24gaU9TLCBidXQgbm90IE1hYyBDYXRhbHlzdCB1bmxlc3MgaXQgaXMgcnVubmlu
ZyBvbiBBcHBsZSBTaWxpY29uLgorIyAgICAvLyBFQUdMIHNob3VsZCBiZSBlbmFibGVkIG9uIGlP
UywgYnV0IG5vdCBNYWMgQ2F0YWx5c3QgdW5sZXNzIGl0IGlzIHJ1bm5pbmcgb24gQXBwbGUgU2ls
aWNvbi4KICMgICAgaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKICAgICAgICAgKGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKICMgICAg
ICAgIGRlZmluZSBBTkdMRV9FTkFCTEVfRUFHTAogIyAgICBlbmRpZgorIyAgICAvLyBJZGVudGlm
eSBNZXRhbCBBUEkgPj0gd2hhdCBzaGlwcGVkIG9uIG1hY09TIENhdGFsaW5hLgorIyAgICBpZiAo
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9B
TExPV0VEID49IDEwMTUwMCkgfHwgXAorICAgICAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQorIyAgICAg
ICAgZGVmaW5lIEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSSAxCisjICAgIGVuZGlmCiAjZW5k
aWYKIAogLy8gRGVmaW5lIEFOR0xFX1dJVEhfQVNBTiBtYWNyby4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMzZiZWE0MjUxM2MyZGQyODVjZDg4MmFkYjhjMGViNjE0NDI0M2VmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNf
aW9zLm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHN5c3RlbV91dGlsc19pb3Mu
bW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorCisj
aW5jbHVkZSAic3lzdGVtX3V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1
ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoLW8vZHlsZC5o
PgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+Cisj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgYW5nbGUKK3sK
K3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKCkKK3sKKworICAgIE5TU3RyaW5nICpleGVj
dXRhYmxlU3RyaW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07Cisg
ICAgc3RkOjpzdHJpbmcgcmVzdWx0KFtleGVjdXRhYmxlU3RyaW5nIFVURjhTdHJpbmddKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5
KCkKK3sKKyAgICBzdGQ6OnN0cmluZyBleGVjdXRhYmxlUGF0aCA9IEdldEV4ZWN1dGFibGVQYXRo
KCk7CisgICAgc2l6ZV90IGxhc3RQYXRoU2VwTG9jICAgICAgPSBleGVjdXRhYmxlUGF0aC5maW5k
X2xhc3Rfb2YoIi8iKTsKKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5n
OjpucG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsK
K30KKworY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCit7CisgICAgcmV0
dXJuICJkeWxpYiI7Cit9CisKK2RvdWJsZSBHZXRDdXJyZW50VGltZSgpCit7CisgICAgbWFjaF90
aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZv
KCZ0aW1lYmFzZUluZm8pOworCisgICAgZG91YmxlIHNlY29uZENvZWZmID0gdGltZWJhc2VJbmZv
Lm51bWVyICogMWUtOSAvIHRpbWViYXNlSW5mby5kZW5vbTsKKyAgICByZXR1cm4gc2Vjb25kQ29l
ZmYgKiBtYWNoX2Fic29sdXRlX3RpbWUoKTsKK30KK30gIC8vIG5hbWVzcGFjZSBhbmdsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCmluZGV4
IDYzYjNhNTljZGY5MWI5MGEwZDA4MjNlN2RjMmRhZTI3YjY4ODRjYjMuLmQwOWUyNzAwODI5ODk3
ZmZkYjI0YWQ1Y2E1YjhiOWQzODU5ZTVlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKQEAgLTYsMTEgKzYsNiBAQAogCiAvLyB1dGls
aXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5l
cy4KIAotLy8gT2xkZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRo
aXMgd2FybmluZyBoZXJlLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSNlbmRpZgotCiAjaW5j
bHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdMRVMzL2dsMy5oIgogI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgpAQCAtNDc2LDYgKzQ3MSw1MCBAQCBpbnQgVmFyaWFibGVD
b2x1bW5Db3VudChHTGVudW0gdHlwZSkKIAogICAgIHJldHVybiAwOwogfQorLyoqCitEZXRlcm1p
bmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGUgc2xvdHMgdXNlZCBieSBhIHZhcmlhYmxlIHR5cGUK
KyovCitpbnQgVmFyaWFibGVBdHRyaWJ1dGVDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6Cisg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Cisg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyeDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzeDQ6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0eDM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGJvb2wg
SXNTYW1wbGVyVHlwZShHTGVudW0gdHlwZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCmluZGV4IDBjN2Q4MTFhNDZlZGU4YzY2NzA1NzBkMzJj
MjczNDZiY2IxMThjMWEuLmJhNjkzYTI3YWExM2U1YTJmYzM2NDZmMzU0YTkyNTNlMjk0YjYzOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVz
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaApA
QCAtMzcsNiArMzcsNyBAQCBzaXplX3QgVmFyaWFibGVJbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUp
Owogc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJs
ZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0
eXBlKTsKK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKTsKIGJvb2wgSXNT
YW1wbGVyVHlwZShHTGVudW0gdHlwZSk7CiBib29sIElzU2FtcGxlckN1YmVUeXBlKEdMZW51bSB0
eXBlKTsKIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAppbmRleCBhNDQ0NDk5NjVjMDVhZWQ5YzI1NDJhNDA4MWNiMDU3MWYwYWJmNTBhLi5jYWM5ZjQ5
OTRiNzE5ZjgyMWY5MDA1ZDdmZTFkOTYyODAyYzZlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cApAQCAtMjEsOCArMjEsMTEgQEAKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX1ZVTEtBTgogCiAj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCi0jICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAor
I2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVU
QUxfU1BJUlYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgogCkBAIC02
NCwxMSArNjcsMTcgQEAgVENvbXBpbGVyICpDb25zdHJ1Y3RDb21waWxlcihzaDo6R0xlbnVtIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dAogICAgIH0KICNlbmRpZiAgLy8g
QU5HTEVfRU5BQkxFX1ZVTEtBTgogCi0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisjaWZkZWYg
QU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCiAgICAgaWYgKElzT3V0cHV0TWV0YWwob3V0cHV0KSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvck1ldGFsKHR5cGUsIHNwZWMpOwog
ICAgIH0KKyNlbmRpZgorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIGlmIChJc091dHB1
dE1ldGFsRGlyZWN0KG91dHB1dCkpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0
b3JNZXRhbERpcmVjdCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgIH0KICNlbmRpZiAgLy8gQU5H
TEVfRU5BQkxFX01FVEFMCiAKICAgICAvLyBVbnN1cHBvcnRlZCBjb21waWxlciBvciB1bmtub3du
IGZvcm1hdC4gUmV0dXJuIG51bGxwdHIgcGVyIHRoZSBzaDo6Q29uc3RydWN0Q29tcGlsZXIgQVBJ
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAppbmRleCA4MzVjOTBhMzU3MmMxMzU4MmFmNTI0YWY5NjlkYWFlMTBj
OWUxODBmLi4xYzA5Y2RhYTgyMTJjM2UxNzc4MDM5MDhmNDdmYTQwMmZjNjkzNzAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaApAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgVFNvdXJjZUxvYwogICAgIGludCBs
YXN0X2xpbmU7CiB9OwogCitjb25zdGV4cHIgVFNvdXJjZUxvYyBrTm9Tb3VyY2VMb2N7LTEsIC0x
LCAtMSwgLTF9OworCiAvLwogLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFz
ZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCiAvLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwCmluZGV4IDM0ZDhlMTIxYjZiN2M0YTlmMDEwNGJiYzdkZGVlNDgwNmU0NGYyODIu
LjkzMTZlMmU1MWE3ZTY3MjA4MmQ1MDMxMDgzMjhmMGM1MWJmNGE2MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBib29sIFRDb21waWxlcjo6Y2hlY2tBbmRT
aW1wbGlmeUFTVChUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
bnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZF
Q19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0
cnVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgdW5zaWdu
ZWQgaW50IHNpbXBsaWZ5U2NhbGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUkla
RV9WRUNfQU5EX01BVF9DT05TVFJVQ1RPUl9BUkdTKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVk
VmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAwOwogCiAgICAgLy8gU3BsaXQgbXVsdGkgZGVjbGFyYXRpb25zIGFuZCByZW1vdmUg
Y2FsbHMgdG8gYXJyYXkgbGVuZ3RoKCkuCiAgICAgLy8gTm90ZSB0aGF0IFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMgbmVlZHMgdG8gYmUgcnVuIGJlZm9yZSBhbnkgb3RoZXIgQVNUIHRyYW5zZm9ybWF0
aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgKaW5kZXggZDBiMjRiYWEzZTc3NjU5MzdhMjQxN2NkMzlk
ZGFlNTIwODk4NjlkMC4uMDQzZGRkNWFkY2NlODFkMDM5NTBjNGI0MzFmYzA2NjA1OTZhMTY5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oCkBAIC0zNSw2ICszNSw5IEBAIGNsYXNzIFRQYXJzZUNvbnRl
eHQ7CiAjaWZkZWYgQU5HTEVfRU5BQkxFX0hMU0wKIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogI2Vu
ZGlmICAvLyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorY2xh
c3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwK
IAogLy8KIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2hhZGVyIHR5cGUgaXMg
R0xTTC4KQEAgLTYzLDYgKzY2LDkgQEAgY2xhc3MgVFNoSGFuZGxlQmFzZQogI2lmZGVmIEFOR0xF
X0VOQUJMRV9ITFNMCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9y
SExTTCgpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKyNpZmRl
ZiBBTkdMRV9FTkFCTEVfTUVUQUwKKyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAq
Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9NRVRBTAogCiAgIHByb3RlY3RlZDoKICAgICAvLyBNZW1vcnkgYWxs
b2NhdG9yLiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBp
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAppbmRleCAwMzM1MTcxNTAxZjY2
YTdjZWEwNmE3NWY3MWRkZjJhMDUxNDdiMjQ2Li4xMDRhZmZiYWViNzNlMTZhODhkNjBkZGQyMjQx
NDM4YzczMTM5YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcApAQCAtNjcs
MTEgKzY3LDE1IEBAIGJvb2wgSXNWYWxpZFNoaWZ0T2Zmc2V0KGNvbnN0IFRDb25zdGFudFVuaW9u
ICZyaHMpCiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotVENvbnN0YW50VW5pb246OlRD
b25zdGFudFVuaW9uKCkKLXsKLSAgICBpQ29uc3QgPSAwOwotICAgIHR5cGUgICA9IEVidFZvaWQ7
Ci19CitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKSA6IGlDb25zdCgwKSwgdHlwZShF
YnRWb2lkKSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNv
bnN0KGkpLCB0eXBlKEVidEludCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9u
KHVuc2lnbmVkIGludCB1KSA6IHVDb25zdCh1KSwgdHlwZShFYnRVSW50KSB7fQorCitUQ29uc3Rh
bnRVbmlvbjo6VENvbnN0YW50VW5pb24oZmxvYXQgZikgOiBmQ29uc3QoZiksIHR5cGUoRWJ0Rmxv
YXQpIHt9CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0
KGIpLCB0eXBlKEVidEJvb2wpIHt9CiAKIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkg
Y29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAppbmRleCBhNjIzZDY1ZmIxZDU0
NTdhMjlkNzgyZTNkMTNiMDgxODQ4YjJiMGFkLi5kZjUzODU3ZGQzYmY0YjQ4ZmJhYjY1ZWI0ZmVi
MWUwNDU4NjEzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0yMCw2ICsy
MCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgogICBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURQogICAgIFRDb25zdGFudFVuaW9uKCk7CisgICAgVENvbnN0YW50VW5pb24o
aW50IGkpOworICAgIFRDb25zdGFudFVuaW9uKHVuc2lnbmVkIGludCB1KTsKKyAgICBUQ29uc3Rh
bnRVbmlvbihmbG9hdCBmKTsKKyAgICBUQ29uc3RhbnRVbmlvbihib29sIGIpOwogCiAgICAgYm9v
bCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gJmNvbnN0YW50
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtTm9kZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAppbmRleCBiYmRmODY2M2IwNzAxMGVlNjA0
MWVlMDkzODljOTkxYzZmMTU0MDQ1Li41MTM2ZDIwNjhmNzU0MTdkYTFhMTlmYzNjMTk2MGE1Mjcz
OGE3YzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBU
UHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24g
cmlnaHQpCiBUQ29uc3RhbnRVbmlvbiAqVmVjdG9yaXplKGNvbnN0IFRDb25zdGFudFVuaW9uICZj
b25zdGFudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24g
PSBuZXcgVENvbnN0YW50VW5pb25bc2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIGNvbnN0VW5pb25baV0gPSBjb25zdGFudDsKIAogICAgIHJldHVybiBjb25zdFVuaW9u
OwpAQCAtNDE1LDYgKzQxNSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBU
SW50ZXJtQmxvY2sgJm5vZGUpCiAgICAgfQogfQogCitUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9j
ayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCit7CisgICAgZm9y
IChUSW50ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kU3RhdGVt
ZW50KHN0bXQpOworICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3Vu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZW1lbnRzLnNpemUoKTsKQEAgLTQ0Niw2ICs0
NTQsMzcgQEAgYm9vbCBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUo
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAq
dmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQoreworICAgIGlmIChpbml0RXhwcikKKyAgICB7
CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IoCisgICAgICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsIG5ldyBUSW50ZXJtU3ltYm9sKHZhciksIGluaXRF
eHByKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246
OlRJbnRlcm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxl
ICo+IGRlY2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8gKmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2woZCkpOworICAgIH0KK30KKworVEludGVybURlY2xhcmF0aW9uOjpU
SW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBk
ZWNsYXJhdG9ycykKKyAgICA6IFRJbnRlcm1EZWNsYXJhdGlvbigpCit7CisgICAgZm9yIChhdXRv
ICpkIDogZGVjbGFyYXRvcnMpCisgICAgeworICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOwor
ICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1EZWNsYXJhdGlvbjo6Z2V0Q2hpbGRDb3VudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CkBAIC00NjMsOSArNTAyLDEw
IEBAIGJvb2wgVEludGVybURlY2xhcmF0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlCiAKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1O
b2RlICpyZXBsYWNlbWVudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZ2V0U2Vx
dWVuY2UoKS0+c2l6ZSgpOyArK2lpKQorICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOwor
ICAgIGZvciAoYXV0byAqJm5vZGUgOiBzZXEpCiAgICAgewotICAgICAgICBSRVBMQUNFX0lGX0lT
KCgqZ2V0U2VxdWVuY2UoKSlbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKKyAgICAgICAgUkVQTEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDczLDEyICs1MTMs
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZUludGVybmFs
KFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGUKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgJnJlcGxhY2VtZW50cykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBn
ZXRTZXF1ZW5jZSgpLT5iZWdpbigpOyBpdCA8IGdldFNlcXVlbmNlKCktPmVuZCgpOyArK2l0KQor
ICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZvciAoYXV0byBpdCA9IHNlcS5i
ZWdpbigpOyBpdCA8IHNlcS5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGlmICgqaXQgPT0g
b3JpZ2luYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGl0ID0gZ2V0U2VxdWVuY2UoKS0+ZXJh
c2UoaXQpOwotICAgICAgICAgICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCByZXBsYWNlbWVu
dHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAgICAgICAgICAgIGl0ID0gc2VxLmVy
YXNlKGl0KTsKKyAgICAgICAgICAgIHNlcS5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigp
LCByZXBsYWNlbWVudHMuZW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkBAIC00ODgsMTIgKzUyOSwxMyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNl
OjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwKIGJv
b2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6Omluc2VydENoaWxkTm9kZXMoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKIHsKLSAgICBpZiAo
cG9zaXRpb24gPiBnZXRTZXF1ZW5jZSgpLT5zaXplKCkpCisgICAgYXV0byAmc2VxID0gKmdldFNl
cXVlbmNlKCk7CisgICAgaWYgKHBvc2l0aW9uID4gc2VxLnNpemUoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2lu
KCkgKyBwb3NpdGlvbjsKLSAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIGluc2VydGlvbnMu
YmVnaW4oKSwgaW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgYXV0byBpdCA9IHNlcS5iZWdpbigpICsg
cG9zaXRpb247CisgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRp
b25zLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA0MCw4ICsxMDgyLDggQEAg
VEludGVybUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRl
ICZub2RlKQogCiBUSW50ZXJtQWdncmVnYXRlICpUSW50ZXJtQWdncmVnYXRlOjpzaGFsbG93Q29w
eSgpIGNvbnN0CiB7Ci0gICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxID0gbmV3IFRJbnRlcm1T
ZXF1ZW5jZSgpOwotICAgIGNvcHlTZXEtPmluc2VydChjb3B5U2VxLT5iZWdpbigpLCBnZXRTZXF1
ZW5jZSgpLT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgpLT5lbmQoKSk7CisgICAgYXV0byAmc2VxICAg
ICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKmNv
cHlTZXEgICA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uoc2VxLmJlZ2luKCksIHNlcS5lbmQoKSk7CiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqY29weU5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShtRnVu
Y3Rpb24sIG1UeXBlLCBtT3AsIGNvcHlTZXEpOwogICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5l
KTsKICAgICByZXR1cm4gY29weU5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKaW5kZXggMzY0
Mzg0N2Y2OGFhZWE2NTBiZGViZjI2ZjNkZDdkMjg3MmI0MDFhMC4uM2I2Zjg3MmMyM2ZmNjVkNmEy
NGFhZWVhMzQyNmVlZmU1Y2UxYThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaApAQCAtNjc0
LDYgKzY3NCw3IEBAIGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVi
bGljIFRJbnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoKICAgICBUSW50ZXJtQmxvY2so
KSA6IFRJbnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJtQmxvY2soc3RkOjppbml0aWFsaXplcl9s
aXN0PFRJbnRlcm1Ob2RlICo+IHN0bXRzKTsKICAgICB+VEludGVybUJsb2NrKCkgb3ZlcnJpZGUg
e30KIAogICAgIFRJbnRlcm1CbG9jayAqZ2V0QXNCbG9jaygpIG92ZXJyaWRlIHsgcmV0dXJuIHRo
aXM7IH0KQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJs
aWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJtQWdncmVnYXRlQmFzZQogewogICBwdWJsaWM6
CiAgICAgVEludGVybURlY2xhcmF0aW9uKCkgOiBUSW50ZXJtTm9kZSgpIHt9CisgICAgVEludGVy
bURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHBy
KTsKKyAgICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRW
YXJpYWJsZSAqPiBkZWNsYXJhdG9ycyk7CisgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpOwogICAgIH5USW50ZXJt
RGVjbGFyYXRpb24oKSBvdmVycmlkZSB7fQogCiAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRB
c0RlY2xhcmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuY3BwCmluZGV4IGQwMzg5YWY0M2Y1ZjFhMTRmMjRjZTVmM2FmOWRhOTZmYjhiN2I4YWMuLmZl
MmUxOWI5MTQwNzM4MmNhNmE2ODA4YmMzZjZmZWI5OTVmZWU1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmNwcApAQCAtMTk2LDcgKzE5Niw4IEBAIHZvaWQgVEZ1bmN0aW9uOjpzaGFyZVBhcmFtZXRlcnMo
Y29uc3QgVEZ1bmN0aW9uICZwYXJhbWV0ZXJzU291cmNlKQogCiBJbW11dGFibGVTdHJpbmcgVEZ1
bmN0aW9uOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBzdGQ6OnN0cmluZyBuZXdO
YW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisgICAgSW1tdXRhYmxlU3RyaW5n
IG5hbWUgPSB0aGlzLT5uYW1lKCk7CisgICAgc3RkOjpzdHJpbmcgbmV3TmFtZShuYW1lLmRhdGEo
KSwgbmFtZS5sZW5ndGgoKSk7CiAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVkTmFtZVNl
cGFyYXRvcjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbC5oCmluZGV4IGI5Y2Y5MDg5NGU2ZThlM2FiMmM2MjZiMzU5NDE2YzM2YTk2
ZmM0MmYuLjBhYmIxZDQxMTAxMzMyOThkZWEyYmJkM2IyMGUwMDE0MmZlZTg1MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5oCkBAIC0yMjIsNyArMjIyLDcgQEAgY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRT
eW1ib2wKICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9
CiAKICAgICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBp
c0RlZmluZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSBjb25z
dCB7IHJldHVybiBkZWZpbmVkOyB9CiAgICAgdm9pZCBzZXRIYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpIHsgbUhhc1Byb3RvdHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzUHJv
dG90eXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtSGFzUHJvdG90eXBlRGVjbGFyYXRp
b247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dl
bi5jcHAKaW5kZXggN2U4NDU4ZWM5OTlhMTAyZmJiZTdhYWE4NzEyYzNhMTA2M2FlYmQxYy4uZTlk
MWI3MzJlNDU5ZGEzYjE4YjM4MzM1NzY0NDljNDk4MTZmNWVjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNT
TF9hdXRvZ2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwCkBAIC0zNTY4LDcgKzM1Njgs
NyBAQCBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMTBGMTBGMTBGWzNdID0geyZCdWlsdElu
VmFyaWFibGU6OmtwdDEwRiwgJkJ1aWx0SW5WYQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEZ9OwogY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSAqcDIwQjAwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIs
ICZCdWlsdEluVmFyaWFibGU6OmtwdDAwQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCfTsKLWNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEIwMERbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAm
QnVpbHRJblZhcmlhYmxlOjprcHQwMER9OworY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIw
QjAwRFsyXSAgICAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFyaWFi
bGU6OmtwdDAwRH07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBCMDBIWzJdICAgID0g
eyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBIfTsKIGNv
bnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAyMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJs
ZTo6a3B0MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRW
YXJpYWJsZSAqcDIwQjIwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWls
dEluVmFyaWFibGU6OmtwdDIwQiwKQEAgLTM2MDksNyArMzYwOSw3IEBAIGNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEYyMEYyMEZbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBGLCAm
QnVpbHRJblZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZC
dWlsdEluVmFyaWFibGU6OmtwdDIwRn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBC
MDBCMDBCWzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MDBCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVp
bHRJblZhcmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjAw
RFsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFibGU6Omtw
dDAwRH07Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBEWzJdICAgICAgID0geyZC
dWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBEfTsKIGNvbnN0
ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSAqcDMwQjIwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdElu
VmFyaWFibGU6OmtwdDIwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMzBCMDBC
WzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBC
LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKaW5kZXggYTFmY2Y4YzlmMTU1
ZTFjZGRjNzg5NmQ4Yjk0MTczNmEzOTZhODRlNi4uZWE1NjZiMTUzNmIwY2YyNTVhYTE5MjJlNTE4
YTk2M2UwZWIyNmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCkBA
IC00MSw4ICs0MSwxNCBAQCBjb25zdCBjaGFyIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25z
dE5hbWVbXSA9ICJBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCI7CiBuYW1lc3BhY2UKIHsKIAorY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3RO
YW1lID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7
Citjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCIpOwogY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFi
bGVTdHJpbmcoImNvdmVyYWdlTWFzayIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11
SW5zdGFuY2VJREZpZWxkICAgICAgPSBJbW11dGFibGVTdHJpbmcoImVtdWxhdGVkSW5zdGFuY2VJ
RCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUg
PSBJbW11dGFibGVTdHJpbmcoIkFOR0xFV3JpdGVTYW1wbGVNYXNrIik7Citjb25zdGV4cHIgSW1t
dXRhYmxlU3RyaW5nIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVEaXNjYXJkV3JhcHBlciIpOwogCiBUSW50ZXJtQmluYXJ5ICpDcmVhdGVEcml2ZXJVbmlm
b3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMsIGNvbnN0IGNoYXIgKmZpZWxk
TmFtZSkKIHsKQEAgLTg2LDYgKzkyLDIxIEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRW
ZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAqY29tCiAgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoY29tcGlsZXIsIHJvb3QsIGFzc2lnbm1lbnQsIHN5
bWJvbFRhYmxlKTsKIH0KIAorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlE
KFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcykKK3sK
KyAgICAvLyBlbXVJbnN0YW5jZUlECisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9
CisgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0
YW5jZUlERmllbGQuZGF0YSgpKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2Ug
dG8gImdsX0luc3RhbmNlSW5kZXgiCisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisKKyAgICByZXR1cm4gUmVwbGFj
ZVZhcmlhYmxlV2l0aFR5cGVkKGNvbXBpbGVyLCByb290LCBpbnN0YW5jZUlELCBlbXVJbnN0YW5j
ZUlEKTsKK30KKwogLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgogQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAqcm9v
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlLApAQCAtMTIzLDYgKzE0NCwxOCBAQCBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgSW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290LAogCiB9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKKy8qKiBzdGF0aWMgKi8KK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0
dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKworLyoqIHN0YXRp
YyAqLworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKwogVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9y
TWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVs
a2FuKHR5cGUsIHNwZWMpCiB7fQogCkBAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0
b3JNZXRhbDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICB7CiAgICAgICAgIGF1
dG8gbmVnRmxpcFkgPSBnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMp
OwogCisgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgICAgIGlmICghRW11bGF0ZUlu
c3RhbmNlSUQodGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGRyaXZlclVuaWZvcm1zKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKwogICAgICAgICAvLyBBcHBlbmQgZ2xfUG9zaXRpb24ueSBjb3JyZWN0
aW9uIHRvIG1haW4KICAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3Jy
ZWN0aW9uVG9NYWluKHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBuZWdGbGlwWSkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIEluc2VydCByYXN0ZXJpemVyIGRpc2NhcmQgbG9naWMKLSAgICAgICAgaWYgKCFpbnNlcnRS
YXN0ZXJpemVyRGlzY2FyZExvZ2ljKHJvb3QpKQorICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXph
dGlvbiBkaXNjYXJkIGxvZ2ljCisgICAgICAgIGlmICghaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2Nh
cmRMb2dpYyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRz
IHRvIGF2b2lkIHNwaXJ2LWNyb3NzIGRlYWQtY29kZSByZW1vdmluZyB0aGVtIGluIGxhdGVyCisg
ICAgLy8gc3RhZ2UuIE9ubHkgZG8gdGhpcyBpZiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgaXMg
bm90IHNwZWNpZmllZC4KKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorICAg
ICAgICAhKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTKSkKKyAgICB7
CisgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKyAgICAgICAgZm9yIChjb25zdCBzaDo6
U2hhZGVyVmFyaWFibGUgJnZhciA6IG1PdXRwdXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCF2YXIuYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxp
c3QucHVzaF9iYWNrKHZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAg
ICAgeworICAgICAgICAvLyBGb3Igbm9uIHZvaWQgTVNMIGZyYWdtZW50IGZ1bmN0aW9ucyByZXBs
YWNlIGRpc2NhcmQKKyAgICAgICAgLy8gd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAgICAg
ICAgaWYgKG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFyZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKHJvb3QpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBpZiAoIWluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMocm9vdCwgZHJpdmVyVW5p
Zm9ybXMpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzUsNiAr
MzA2LDEzIEBAIHZvaWQgVHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NE
cml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGCiAgICAgVEZpZWxkICpjb3ZlcmFnZU1h
c2tGaWVsZCA9CiAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJh
Z2VNYXNrRmllbGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAg
ICAgZmllbGRzT3V0LT5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1F
bXVsYXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURG
aWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNl
TG9jKCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAgICAgICBmaWVsZHNPdXQtPnB1
c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KIH0KIAogLy8gQWRkIHNhbXBsZV9t
YXNrIHdyaXRpbmcgdG8gbWFpbiwgZ3VhcmRlZCBieSB0aGUgc3BlY2lhbGl6YXRpb24gY29uc3Rh
bnQKQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9y
TWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0
dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7
CiB9CiAKLUFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2VydFJhc3Rl
cml6ZXJEaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KQorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFRyYW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50
ZXJtQmxvY2sgKnJvb3QpCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmc2luayAgICAgICA9IGdldElu
Zm9TaW5rKCkub2JqOwogICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9s
VGFibGUoKTsKIAogICAgIC8vIEluc2VydCByYXN0ZXJpemF0aW9uRGlzYWJsZWQgc3BlY2lhbGl6
YXRpb24gY29uc3RhbnQuCi0gICAgc2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25z
dCBib29sICIgPDwgbXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lOworICAg
IHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJp
emF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CiAgICAgc2luayA8PCAiID0gZmFsc2U7XG4i
OwogCi0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgdmFy
aWFibGUgcmVmZXJlbmNlLgorICAgIC8vIENyZWF0ZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lIGFuZCBrUmFzdGVyaXphdGlvbkRpc2NhcmRGdW5jTmFtZSB2YXJpYWJsZQor
ICAgIC8vIHJlZmVyZW5jZXMuCiAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJv
b2wpOwogICAgIGJvb2xUeXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgIFRWYXJpYWJs
ZSAqZGlzY2FyZEVuYWJsZWRWYXIgPQotICAgICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxl
LCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFyaWFibGUo
c3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbFR5cGUsIFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwogCiAgICAgLy8gSW5zZXJ0IHRoaXMgY29kZSB0byB0
aGUgZW5kIG9mIG1haW4oKQotICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCkKKyAg
ICAvLyBpZiAoQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQpCiAgICAgLy8gewogICAgIC8vICAg
ICAgZ2xfUG9zaXRpb24gPSB2ZWM0KC0zLjAsIC0zLjAsIC0zLjAsIDEuMCk7CiAgICAgLy8gfQpA
QCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFs
OjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jawogICAgIHJldHVybiBS
dW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwogfQog
CisvLyBJZiB0aGUgTVNMIGZyYWdtZW50IHNoYWRlciBpcyBub24tdm9pZCwgd2UgbmVlZCB0byBl
bnN1cmUKKy8vIHRoYXQgdGhlcmUgaXMgYSByZXR1cm4gYXQgdGhlIGVuZC4gVGhlIE1TTCBjb21w
aWxlcgorLy8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwg
ZXZlbiBpZiBhbGwKKy8vIHBhdGhzIGxlYWQgdG8gZGlzY2FyZF9mcmFnbWVudCgpLiBTbyB3cmFw
IGRpc2NhcmQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uLgorLy8gRml4ZXMgZEVRUC1HTEVTMy5mdW5j
dGlvbmFsLnNoYWRlcnMuZGlzY2FyZC5iYXNpY19hbHdheXMKK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBUcmFuc2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2Nr
ICpyb290KQoreworICAgIC8vIGJlZm9yZQorICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKyAgICAv
LyB7CisgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworICAgIC8vICAgICBkaXNjYXJkOwor
ICAgIC8vIH0KKworICAgIC8vIGFmdGVyCisgICAgLy8gdm9pZCBBTkdMRURpc2NhcmRXcmFwcGVy
KCkKKyAgICAvLyB7CisgICAgLy8gICAgZGlzY2FyZDsKKyAgICAvLyB9CisgICAgLy8gdm9pZCBt
YWluICh2b2lkKQorICAgIC8vIHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAg
Ly8gICAgIEFOR0xFRGlzY2FyZFdyYXBwZXIoKTsKKyAgICAvLyB9CisKKyAgICBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICptYWluICAgPSBGaW5kTWFpbihyb290KTsKKyAgICBUSW50ZXJtQmxv
Y2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisgICAgVEludGVybVNl
cXVlbmNlICpmdW5jdGlvblNlcXVlbmNlID0gbWFpbkJvZHktPmdldFNlcXVlbmNlKCk7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSAqZGlzY2FyZEZ1bmMgICAgID0gbnVsbHB0cjsKKyAgICAvLyBJdGVy
YXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1
c2VzCisgICAgLy8gb2YgZGlzY2FyZCB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKS4KKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZnVuY3Rpb25TZXF1ZW5jZS0+c2l6ZSgpOyAr
K2luZGV4KQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKmZ1bmN0aW9uTm9kZSA9ICgqZnVu
Y3Rpb25TZXF1ZW5jZSlbaW5kZXhdOworICAgICAgICBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2Rl
ID0gZnVuY3Rpb25Ob2RlLT5nZXRBc0JyYW5jaE5vZGUoKTsKKyAgICAgICAgaWYgKGJyYW5jaE5v
ZGUgIT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyYW5jaE5vZGUtPmdl
dEZsb3dPcCgpID09IEVPcEtpbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGRpc2NhcmRGdW5jID09IG51bGxwdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlZCA9IG1haW5Cb2R5
LT5yZXBsYWNlQ2hpbGROb2RlKGJyYW5jaE5vZGUsIGRpc2NhcmRGdW5jKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlcGxhY2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVBU1Qocm9vdCk7Cit9CisKKy8vIENyZWF0
ZSBkaXNjYXJkX3dyYXBwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgU1BJUlYtQ3Jvc3Mgd2ls
bCBhbHdheXMgaGF2ZSBhIHJldHVybiBhdCB0aGUgZW5kCisvLyBvZiBmcmFnbWVudCBzaGFkZXJz
CitBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3Jl
YXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlICZzaW5rICAgICAgID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOworCisgICAgc2luayA8PCAidm9pZCAi
IDw8IGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lIDw8ICIoKVxuIjsKKyAgICBzaW5rIDw8ICJ7XG4i
OworICAgIHNpbmsgPDwgIiAgIGRpc2NhcmQ7XG4iOworICAgIHNpbmsgPDwgIn1cbiI7CisKKyAg
ICBURnVuY3Rpb24gKmRpc2NhcmRXcmFwcGVyRnVuYyA9CisgICAgICAgIG5ldyBURnVuY3Rpb24o
c3ltYm9sVGFibGUsIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZv
aWQ+KCksIHRydWUpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY2FsbERpc2NhcmRXcmFwcGVy
RnVuYyA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlz
Y2FyZFdyYXBwZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworICAgIHJldHVybiBjYWxs
RGlzY2FyZFdyYXBwZXJGdW5jOworfQorCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgKaW5kZXggMGY0ZjFjY2UyOWEzNTU3YWVkMDE4OGM4ZjYxNzg3
NjRlYjAwMmI0ZC4uYmNjMzE4NzFhNzFkMTQ4YzU2NWQ4Mjc2NTcxYTEzNjMwYTM4NGMyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgKQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNz
IFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCiAgIHB1YmxpYzoKICAg
ICBUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAK
KyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKGJvb2wgZSkg
eyBtRW11bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorCiAgIHByb3RlY3RlZDoKICAgICBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMs
CkBAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMgVHJhbnNs
YXRvclZ1bGthbgogCiAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFNhbXBsZU1hc2tX
cml0aW5nTG9naWMoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5p
Zm9ybXMpOwotICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemVyRGlzY2Fy
ZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCk7CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KTsKKworICAg
IEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKFRJbnRlcm1C
bG9jayAqcm9vdCk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNy
ZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAgYm9vbCBt
RW11bGF0ZWRJbnN0YW5jZUlEID0gZmFsc2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlMTAyMjgyZWUzYWFhZGY2ZjBiNDI1NmY2N2Y1Mzk4YmFlMGU1MTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisKKyNp
bmNsdWRlICJhbmdsZV9nbC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNl
QmxvY2tzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRy
ZXNzYWJsZVJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lRW1iZWRkZWRV
bmlmb3JtU3RydWN0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUF0b21pY0NvdW50ZXJzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNh
bXBsZXJzQXMyREFycmF5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmV3cml0ZVN0cnVjdFNhbXBsZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvQnVpbHRJbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
RmluZFN5bWJvbE5vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9SZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCisKK25hbWVzcGFjZSBzaAoreworCituYW1lc3Bh
Y2UKK3sKKworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2si
LCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJ
REZpZWxkKCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Cisj
aWYgMAorY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0ZVNhbXBs
ZU1hc2siKTsKK2NvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJk
V3JhcHBlciIpOworI2VuZGlmCitjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFy
YW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7Citjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05h
bWUoIkFuZ2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoImFu
Z2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZs
aXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5h
bWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworCitjb25zdGV4cHIgY29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAg
ICAgICA9ICJ2aWV3cG9ydCI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrSGFsZlJlbmRlckFyZWFb
XSAgICAgICA9ICJoYWxmUmVuZGVyQXJlYSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrRmxpcFhZ
W10gICAgICAgICAgICAgICA9ICJmbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0Zs
aXBYWVtdICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtD
bGlwRGlzdGFuY2VzRW5hYmxlZFtdID0gImNsaXBEaXN0YW5jZXNFbmFibGVkIjsKK2NvbnN0ZXhw
ciBjb25zdCBjaGFyIGtYZmJBY3RpdmVVbnBhdXNlZFtdICAgID0gInhmYkFjdGl2ZVVucGF1c2Vk
IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZl
cnRpY2VzUGVyRHJhdyI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrWGZiQnVmZmVyT2Zmc2V0c1td
ICAgICA9ICJ4ZmJCdWZmZXJPZmZzZXRzIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtBY2JCdWZm
ZXJPZmZzZXRzW10gICAgID0gImFjYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNo
YXIga0RlcHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVwdGhSYW5nZSI7Citjb25zdGV4cHIgY29u
c3QgY2hhciBrUHJlUm90YXRpb25bXSAgICAgICAgICA9ICJwcmVSb3RhdGlvbiI7Citjb25zdGV4
cHIgY29uc3QgY2hhciBrRnJhZ1JvdGF0aW9uW10gICAgICAgICA9ICJmcmFnUm90YXRpb24iOwor
Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKAorICAgIEJ1
aWx0SW5JZDo6Z2xfVmVydGV4SW5kZXgsCisgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJ
bmRleCIpLAorICAgIFN5bWJvbFR5cGU6OkJ1aWx0SW4sCisgICAgVEV4dGVuc2lvbjo6VU5ERUZJ
TkVELAorICAgIFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwg
MSwgMT4oKSk7CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworY29u
c3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jt
cz4ga0dyYXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworICAgIHtrVmlld3BvcnQsIGtIYWxm
UmVuZGVyQXJlYSwga0ZsaXBYWSwga05lZ0ZsaXBYWSwga0NsaXBEaXN0YW5jZXNFbmFibGVkLCBr
WGZiQWN0aXZlVW5wYXVzZWQsCisgICAgIGtYZmJWZXJ0aWNlc1BlckRyYXcsIGtYZmJCdWZmZXJP
ZmZzZXRzLCBrQWNiQnVmZmVyT2Zmc2V0cywga0RlcHRoUmFuZ2UsIGtQcmVSb3RhdGlvbiwKKyAg
ICAga0ZyYWdSb3RhdGlvbn19OworCitjb25zdGV4cHIgc2l6ZV90IGtOdW1Db21wdXRlRHJpdmVy
VW5pZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MTsKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tBY2JCdWZmZXJP
ZmZzZXRzfX07CisKK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0
VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU91dHB1dE1TTChvdXRwdXRNU0wpCisgICAg
e30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURlY2xh
cmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFBy
ZVZpc2l0KTsKKyAgICAgICAgaWYgKCFtSW5HbG9iYWxTY29wZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZGVjbGFyYXRvciAgICAgICAgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVk
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICAgPSBkZWNsYXJhdG9y
LT5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgLy8gRW1iZWRkZWQgc3RydWN0cyBzaG91bGQgYmUg
cGFyc2VkIGF3YXkgYnkgbm93LgorICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9s
VHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgICAgIC8vIG91dHB1dE1TTC0+
d3JpdGVTdHJ1Y3RUeXBlKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAg
IGlmIChzeW1ib2xOb2RlICYmIHN5bWJvbE5vZGUtPnZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpID09
IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJl
bW92ZSB0aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0
IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgZW1w
dHlSZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1wbGFj
ZV9iYWNrKGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRv
IHJlbW92ZSAndW5zdWVkJyB3YXJuaW5nCisgICAgICAgIG1PdXRwdXRNU0wgPSBudWxscHRyOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUT3V0cHV0
TVNMICptT3V0cHV0TVNMOworfTsKKworY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEZWNsYXJl
RGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UgKnNpbmssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisg
ICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgICAgICBt
U2luayhzaW5rKSwKKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAg
ICAgICAgbU5hbWVNYXAobmFtZU1hcCksCisgICAgICAgICAgbUluRGVmYXVsdFVuaWZvcm0oZmFs
c2UpCisgICAge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybURlY2xhcmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorICAgICAgICBBU1NF
UlQoc2VxdWVuY2Uuc2l6ZSgpID09IDEpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFi
bGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlICAgICAgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICBib29sIGlzVW5pZm9y
bSAgICAgICAgID0gdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtICYmICF0eXBlLmlz
SW50ZXJmYWNlQmxvY2soKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5
cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0eXBlLCBt
SGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworICAgICAgICAgICAgICAgIG1JbkRlZmF1
bHRVbmlmb3JtID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBtSW5EZWZhdWx0
VW5pZm9ybSA9IGlzVW5pZm9ybTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKCptU2luaykgPDwgIjtcbiI7CisKKyAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHVuaWZvcm0gZGVjbGFyYXRpb24gZnJvbSB0aGUgdHJlZSBz
byBpdCBpc24ndCBwYXJzZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
IGVtcHR5UmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLmVt
cGxhY2VfYmFjayhnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSwgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5UmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1JbkRlZmF1bHRVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11
dGFibGVTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPnZhcmlhYmxlKCkubmFtZSgpOworICAgICAgICAg
ICAgQVNTRVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKyAgICAgICAgICAgICgqbVNpbmsp
IDw8IEhhc2hOYW1lKCZzeW1ib2wtPnZhcmlhYmxlKCksIG1IYXNoRnVuY3Rpb24sIG1OYW1lTWFw
KQorICAgICAgICAgICAgICAgICAgICAgPDwgQXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkp
OworICAgICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAqbVNp
bms7CisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworICAgIE5hbWVNYXAgKm1O
YW1lTWFwOworICAgIGJvb2wgbUluRGVmYXVsdFVuaWZvcm07Cit9OworCitUSW50ZXJtQmluYXJ5
ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMs
IGNvbnN0IGNoYXIgKmZpZWxkTmFtZSkKK3sKKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRG
aWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCks
IGZpZWxkTmFtZSk7CisKKyAgICBUSW50ZXJtU3ltYm9sICphbmdsZVVuaWZvcm1zUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2woJmRyaXZlclVuaWZvcm1zKTsKKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5p
Zm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworICAgIHVuaWZvcm1JbmRleC0+c2V0
SUNvbnN0KHN0YXRpY19jYXN0PGludD4oZmllbGRJbmRleCkpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICppbmRleFJlZiA9CisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlm
b3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworICAgIHJldHVybiBu
ZXcgVEludGVybUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgYW5nbGVVbmlmb3Jtc1JlZiwg
aW5kZXhSZWYpOworfQorCisjaWYgMAorLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3
cG9ydCBmbGlwcGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3Np
dGlvbi55CisvLyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5n
IHRoZSBnbF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9u
LnkgPSBnbF9Qb3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtU3dpenpsZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVm
ZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9
IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3Np
dGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIC8vIENyZWF0ZSBh
IHN3aXp6bGUgdG8gImdsX1Bvc2l0aW9uLnkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRZOworICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygxKTsKKyAgICBUSW50ZXJtU3dpenps
ZSAqcG9zaXRpb25ZID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zm
c2V0WSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBu
ZWdGbGlwWSIKKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWSA9IG5ldyBUSW50ZXJtQmluYXJ5
KEVPcE11bCwgcG9zaXRpb25ZLT5kZWVwQ29weSgpLCAmbmVnRmxpcFkpOworCisgICAgLy8gQ3Jl
YXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1Zp
ZXdwb3J0U2NhbGVZCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvbllMSFMgPSBwb3NpdGlvblkt
PmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisK
KyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwg
JnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisjZW5kaWYKKworI2lmIDAKKy8v
IEluaXRpYWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cy4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbml0VmFyaWFibGVMaXN0ICZ1bnVzZWRWYXJzKQoreworICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUSW50ZXJt
U2VxdWVuY2UgKmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZTsKKworICAgIGZv
ciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiB1bnVzZWRWYXJzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gRmluZFN5bWJvbE5vZGUoJnJvb3QsIHZhci5uYW1lKTsKKyAgICAgICAgQVNTRVJU
KHN5bWJvbCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNlICppbml0Q29kZSA9IENyZWF0ZUlu
aXRDb2RlKHN5bWJvbCwgZmFsc2UsIGZhbHNlLCAmc3ltYm9sVGFibGUpOworCisgICAgICAgIGlu
c2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVn
aW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKyAgICB9CisKKyAgICBpZiAoaW5zZXJ0U2VxdWVuY2Up
CisgICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1h
aW4oJnJvb3QpOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAgID0gbWFp
bi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgIC8vIEluc2VydCBpbml0IGNv
ZGUgYXQgdGhlIHN0YXJ0IG9mIG1haW4oKQorICAgICAgICBtYWluU2VxdWVuY2UtPmluc2VydCht
YWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1
ZW5jZS0+ZW5kKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Nv
bnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICZyb290LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vIFRoaXMgZmll
bGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGlu
IENvbnRleHRWay5jcHAuCisgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisKKyAgICBjb25zdCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJp
dmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUo
RWJ0VUludCwgNCksCisgICAgfX07CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCBrTnVtQ29tcHV0ZURyaXZlclVuaWZvcm1zOyArK3VuaWZvcm1JbmRl
eCkKKyAgICB7CisgICAgICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKyAgICAgICAg
ICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5kZXhdLAorICAgICAg
ICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoa0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFt
ZXNbdW5pZm9ybUluZGV4XSksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVz
aF9iYWNrKGRyaXZlclVuaWZvcm1GaWVsZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY2xhcmVT
dHJ1Y3R1cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFVbmlmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgp
LCAwLCBrVW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNlY29uZDsKK30K
KworLy8gVGhlIEFkZCpEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyIG9wZXJhdGlvbiBhZGRzIGFuIGlu
dGVybmFsIHVuaWZvcm0gYmxvY2sgdG8gYSBzaGFkZXIuIFRoZSBkcml2ZXIKKy8vIGJsb2NrIGlz
IHVzZWQgdG8gaW1wbGVtZW50IFZ1bGthbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd29ya2Fyb3Vu
ZHMuIFJldHVybnMgdGhlIGRyaXZlciB1bmlmb3JtcworLy8gdmFyaWFibGUuCisvLworLy8gVGhl
cmUgYXJlIEdyYXBoaWNzIGFuZCBDb21wdXRlIHZhcmlhdGlvbnMgYXMgdGhleSByZXF1aXJlIGRp
ZmZlcmVudCB1bmlmb3Jtcy4KK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlm
b3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxURmllbGQgKj4gJmFkZGl0aW9uYWxGaWVsZHMpCit7CisgICAgLy8gSW5pdCB0
aGUgZGVwdGggcmFuZ2UgdHlwZS4KKyAgICBURmllbGRMaXN0ICpkZXB0aFJhbmdlUGFyYW1zRmll
bGRzID0gbmV3IFRGaWVsZExpc3QoKTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNo
X2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwg
MSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1tdXRhYmxlU3RyaW5nKCJuZWFyIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KSk7CisgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3
IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZmFy
IiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisgICAgZGVwdGhSYW5nZVBh
cmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZGlmZiIpLCBrTm9Tb3VyY2VMb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCkpOworICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdodCBi
ZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorICAgIGRlcHRoUmFu
Z2VQYXJhbXNGaWVsZHMtPnB1c2hfYmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxR2xvYmFsLCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoInJlc2VydmVkIiksIGtOb1NvdXJj
ZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICplbXVs
YXRlZERlcHRoUmFuZ2VQYXJhbXMgPQorICAgICAgICBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAm
c3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVhdGUoKSwgMCwga0VtdWxhdGVk
RGVwdGhSYW5nZVBhcmFtcy5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bHB0cikKKyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisgICAgICAgICAgICAuZ2V0U3Ry
dWN0KCk7CisKKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9m
IEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0
ICpkcml2ZXJGaWVsZExpc3QgPSBuZXcgVEZpZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJy
YXk8VFR5cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlw
ZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpLAorICAgICAgICBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAg
ICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCksICAv
LyB1aW50IGNsaXBEaXN0YW5jZXNFbmFibGVkOyAgLy8gMzIgYml0cyBmb3IgMzIgY2xpcCBkaXN0
YW5jZXMgbWF4CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKyAgICAgICAgbmV3IFRUeXBl
KEVidFVJbnQpLAorICAgICAgICAvLyBOT1RFOiBUaGVyZSdzIGEgdmVjMyBnYXAgaGVyZSB0aGF0
IGNhbiBiZSB1c2VkIGluIHRoZSBmdXR1cmUKKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCks
CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50LCA0KSwKKyAgICAgICAgbmV3IFRUeXBlKGVtdWxh
dGVkRGVwdGhSYW5nZVBhcmFtcywgZmFsc2UpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDIsIDQpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorICAgIH19OworCisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUdyYXBo
aWNzRHJpdmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4KQorICAgIHsKKyAgICAgICAgVEZpZWxk
ICpkcml2ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAgICAgbmV3IFRGaWVsZChrRHJpdmVyVW5p
Zm9ybVR5cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJs
ZVN0cmluZyhrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXNbdW5pZm9ybUluZGV4XSksIGtOb1Nv
dXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5h
bCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNrKGRyaXZlclVuaWZvcm1GaWVs
ZCk7CisgICAgfQorCisgICAgLy8gQmFjay1lbmQgc3BlY2lmaWMgZmllbGRzCisgICAgZHJpdmVy
RmllbGRMaXN0LT5pbnNlcnQoZHJpdmVyRmllbGRMaXN0LT5lbmQoKSwgYWRkaXRpb25hbEZpZWxk
cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOworCisgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgorICAgIHJldHVy
biBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVy
OjpDcmVhdGUoKSwgMCwga1VuaWZvcm1zQmxvY2tOYW1lLnJhd05hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAma1VuaWZvcm1zVmFyTmFtZS5yYXdOYW1lKCkpCisgICAgICAgIC5z
ZWNvbmQ7Cit9CisKKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVw
dGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KK0FOR0xF
X05PX0RJU0NBUkQgYm9vbCBSZXBsYWNlR0xEZXB0aFJhbmdlV2l0aERyaXZlclVuaWZvcm0oVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJmRyaXZlclVuaWZvcm1zKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVy
ZW5jZSB0byAiZ2xfRGVwdGhSYW5nZSIKKyAgICBjb25zdCBUVmFyaWFibGUgKmRlcHRoUmFuZ2VW
YXIgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUgKj4oCisgICAgICAgIHN5bWJvbFRhYmxl
LmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7CisKKyAg
ICAvLyBBTkdMRVVuaWZvcm1zLmRlcHRoUmFuZ2UKKyAgICBUSW50ZXJtQmluYXJ5ICphbmdsZUVt
dWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9y
bXMsIGtEZXB0aFJhbmdlKTsKKworICAgIC8vIFVzZSB0aGlzIHZhcmlhYmxlIGluc3RlYWQgb2Yg
Z2xfRGVwdGhSYW5nZSBldmVyeXdoZXJlLgorICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRo
VHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRo
UmFuZ2VSZWYpOworfQorCitUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqbWFpbiA9IEZp
bmRNYWluKCZyb290KTsKKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgp
OworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3Jt
RmVlZGJhY2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisgICAgVFZhcmlhYmxlICp4ZmJQbGFjZWhvbGRlciA9
IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIkBAIFhGQi1PVVQg
QEAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VFR5cGUoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisKKyAgICAvLyBBcHBlbmQgdGhl
IGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIG5ldyBUSW50ZXJt
U3ltYm9sKHhmYlBsYWNlaG9sZGVyKSwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBvcGVy
YXRpb24gcGVyZm9ybXMgdGhlIHZpZXdwb3J0IGRlcHRoIHRyYW5zbGF0aW9uIG5lZWRlZCBieSBW
dWxrYW4uIEluIEdMIHRoZSB2aWV3cG9ydAorLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkg
ZGlmZmVyZW50IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxp
bmcgdGhlCisvLyBWaWV3cG9ydCIuIEluIFZ1bGthbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHNl
Y3Rpb24gaXMgY3VycmVudGx5ICIyMy40LiBDb29yZGluYXRlCisvLyBUcmFuc2Zvcm1hdGlvbnMi
LgorLy8gVGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKy8vCisvLyAgICAg
el92ayA9IDAuNSAqICh3X2dsICsgel9nbCkKKy8vCisvLyB3aGVyZSB6X3ZrIGlzIHRoZSBkZXB0
aCBvdXRwdXQgb2YgYSBWdWxrYW4gdmVydGV4IHNoYWRlciBhbmQgel9nbCBpcyB0aGUgc2FtZSBm
b3IgR0wuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyRGVwdGhDb3Jy
ZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9s
VGFibGUoKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlh
YmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRaID0gezJ9OworICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJt
U3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworCisgICAgVEludGVybUNvbnN0
YW50VW5pb24gKm9uZUhhbGYgPSBDcmVhdGVGbG9hdE5vZGUoMC41Zik7CisKKyAgICBUVmVjdG9y
PGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9u
VyAgID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBzd2l6emxl
T2Zmc2V0Vyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpQbHVzVyA9IG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEFkZCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCBwb3NpdGlvblct
PmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1CaW5hcnkgKmhhbGZaUGx1c1cgPSBuZXcgVEludGVy
bUJpbmFyeShFT3BNdWwsIHpQbHVzVywgb25lSGFsZi0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBD
cmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGds
X1Bvc2l0aW9uLncpICogMC41IgorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25aTEhTID0gcG9z
aXRpb25aLT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgaGFsZlpQ
bHVzVyk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQg
dGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZj
b21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKKy8vIFRoaXMg
b3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3Ig
QW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisvLyBwbGF0Zm9ybXMpLCB0aGUgZGV2aWNl
IG1heSByb3RhdGUsIHN1Y2ggdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9u
IGlzIHJvdGF0ZWQKKy8vIHJlbGF0aXZlIHRvIHRoZSBuYXRpdmUgb3JpZW50YXRpb24gb2YgdGhl
IGRldmljZS4gIFRoaXMgaXMgY29ycmVjdGVkIGluIHBhcnQgYnkgbXVsdGlwbHlpbmcKKy8vIGds
X1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKy8vIFRoZSBlcXVhdGlvbnMgcmVkdWNlIHRvIGFuIGV4cHJl
c3Npb246CisvLworLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVS
b3RhdGlvbgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFByZVJvdGF0aW9uKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSAgICAgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIFRJbnRlcm1C
aW5hcnkgKnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlm
b3Jtcywga1ByZVJvdGF0aW9uKTsKKyAgICBUSW50ZXJtU3ltYm9sICpnbFBvcyAgICAgICAgICA9
IG5ldyBUSW50ZXJtU3ltYm9sKEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSAgPSB7MCwgMX07CisgICAgVEludGVybVN3aXp6
bGUgKmdsUG9zWFkgICAgICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZz
ZXRYWSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi54eSAq
IHByZVJvdGF0aW9uKSIKKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisgICAgICAgIG5l
dyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBwcmVSb3RhdGlvblJlZi0+ZGVl
cENvcHkoKSwgZ2xQb3NYWS0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2ln
bm1lbnQgImdsX1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgor
ICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xQb3NYWS0+ZGVlcENvcHkoKSwgelJvdGF0ZWQpOwor
CisgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQg
b2YgdGhlIHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIs
ICZyb290LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCitBTkdMRV9OT19ESVNDQVJE
IGJvb2wgUm90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVNlcXVlbmNlICZpbnNlcnRTZXF1ZW5jZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZmxpcFhZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZidWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmZmxpcHBlZFZhcmlhYmxlTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAmcGl2b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5
bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBh
IHN5bWJvbCByZWZlcmVuY2UgdG8gJ2J1aWx0aW4nLgorICAgIFRJbnRlcm1TeW1ib2wgKmJ1aWx0
aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbCgmYnVpbHRpbik7CisKKyAgICAvLyBDcmVhdGUgYSBz
d2l6emxlIHRvICJidWlsdGluLnh5IgorICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WFkg
PSB7MCwgMX07CisgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJt
U3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworCisgICAgLy8gQ3JlYXRlIGEg
c3ltYm9sIHJlZmVyZW5jZSB0byBvdXIgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBob2xkIHRoZSBt
b2RpZmllZCBidWlsdGluLgorICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6R2V0
Rm9yVmVjPEVidEZsb2F0PigKKyAgICAgICAgRXZxR2xvYmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihidWlsdGluLmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgVFZhcmlh
YmxlICpyZXBsYWNlbWVudFZhciA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBmbGlwcGVk
VmFyaWFibGVOYW1lLnJhd05hbWUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUoKSk7Cisg
ICAgRGVjbGFyZUdsb2JhbFZhcmlhYmxlKCZyb290LCByZXBsYWNlbWVudFZhcik7CisgICAgVElu
dGVybVN5bWJvbCAqZmxpcHBlZEJ1aWx0aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbChyZXBsYWNl
bWVudFZhcik7CisKKyAgICAvLyBVc2UgdGhpcyBuZXcgdmFyaWFibGUgaW5zdGVhZCBvZiAnYnVp
bHRpbicgZXZlcnl3aGVyZS4KKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZy
b290LCAmYnVpbHRpbiwgcmVwbGFjZW1lbnRWYXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkg
KiBmcmFnUm90YXRpb24pIgorICAgIFRJbnRlcm1UeXBlZCAqcm90YXRlZFhZOworICAgIGlmIChm
cmFnUm90YXRpb24pCisgICAgeworICAgICAgICByb3RhdGVkWFkgPSBuZXcgVEludGVybUJpbmFy
eShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgZnJhZ1JvdGF0aW9uLT5kZWVwQ29weSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBObyByb3RhdGlvbiBhcHBsaWVkLCB1
c2Ugb3JpZ2luYWwgdmFyaWFibGUuCisgICAgICAgIHJvdGF0ZWRYWSA9IGJ1aWx0aW5YWS0+ZGVl
cENvcHkoKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGlu
Lnh5IC0gcGl2b3QpICogZmxpcFhZICsgcGl2b3QKKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQ
aXZvdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworICAg
IFRJbnRlcm1CaW5hcnkgKmludmVyc2VYWSAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBy
ZW1vdmVQaXZvdCwgJmZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAqcGx1c1Bpdm90ICAgPSBu
ZXcgVEludGVybUJpbmFyeShFT3BBZGQsIGludmVyc2VYWSwgcGl2b3QuZGVlcENvcHkoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGNvcnJlY3RlZCB2YXJpYWJsZSBhbmQgY29weSB0aGUgdmFsdWUg
b2YgdGhlIG9yaWdpbmFsIGJ1aWx0aW4uCisgICAgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSA9
IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5S
ZWYtPmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IFRJbnRl
cm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKGJ1aWx0aW4uZ2V0VHlwZSgpLCBzZXF1ZW5j
ZSk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgID0gbmV3IFRJbnRlcm1CaW5hcnko
RU9wSW5pdGlhbGl6ZSwgZmxpcHBlZEJ1aWx0aW5SZWYsIGFnZ3JlZ2F0ZSk7CisKKyAgICAvLyBD
cmVhdGUgYW4gYXNzaWdubWVudCB0byB0aGUgcmVwbGFjZWQgdmFyaWFibGUncyAueHkuCisgICAg
VEludGVybVN3aXp6bGUgKmNvcnJlY3RlZFhZID0KKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworICAgIFRJ
bnRlcm1CaW5hcnkgKmFzc2lnblRvWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbiwgY29y
cmVjdGVkWFksIHBsdXNQaXZvdCk7CisKKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqbm9kZXNbXSA9IHthc3NpZ25tZW50LCBhc3NpZ25Ub1l9OworICAgICAgICBpbnNlcnRT
ZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2Rlcyks
IHN0ZDo6ZW5kKG5vZGVzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRl
QVNUKCZyb290KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENv
cnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5p
Zm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAmcGl2
b3QgICAgICAgID0gKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtIYWxm
UmVuZGVyQXJlYSk7CisgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0gKGNvbXBpbGVP
cHRpb25zICYgU0hfQUREX1BSRV9ST1RBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJh
Z1JvdGF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxw
dHI7CisgICAgcmV0dXJuIFJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUoY29tcGlsZXIsIHJv
b3QsIGluc2VydFNlcXVlbmNlLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJh
Z0Nvb3JkTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZv
dCwgZnJhZ1JvdGF0aW9uKTsKK30KKworVEludGVybUJpbmFyeSAqR2V0RHJpdmVyVW5pZm9ybURl
cHRoUmFuZ2VSZXNlcnZlZEZpZWxkUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1S
ZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKworICAgIHJldHVybiBuZXcgVEludGVy
bUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgZGVwdGhSYW5nZSwgQ3JlYXRlSW5kZXhOb2Rl
KDMpKTsKK30KKwordm9pZCBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKFRJbnRlcm1CbG9jayAmcm9v
dCwgY29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZp
bmRNYWluSW5kZXgoJnJvb3QpLCB7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmdmFyfX0pOworfQor
Cit2b2lkIEFkZEZyYWdDb2xvckRlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJv
bFRhYmxlICZzeW1ib2xUYWJsZSkKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1h
aW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0NvbG9yKCl9
fSk7Cit9CisKK3ZvaWQgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290
LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2Rl
cyhGaW5kTWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFn
RGVwdGgoKX19KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEZyYWdEYXRhRGVjbGFy
YXRpb24oVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAg
IGNvbnN0IGludCBtYXhEcmF3QnVmZmVycyAgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5NYXhE
cmF3QnVmZmVyczsKKyAgICBUVHlwZSAqZ2xfRnJhZ0RhdGFUeXBlICAgID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCAxKTsKKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworICAgIFRJbnRlcm1TZXF1ZW5jZSBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlOworCisgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAs
MSwyLDMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heERyYXdCdWZmZXJzOyBpKyspCisgICAg
eworICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFn
RGF0YV8iKSArIDIpOworICAgICAgICBidWlsZGVyIDw8ICJnbF9GcmFnRGF0YV8iOworICAgICAg
ICBidWlsZGVyLmFwcGVuZERlY2ltYWwoaSk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xG
cmFnRGF0YSA9CisgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgYnVpbGRl
ciwgZ2xfRnJhZ0RhdGFUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQpOworICAgICAgICBnbEZyYWdE
YXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworICAgICAgICBkZWNsYXJlR0xGcmFnZGF0
YVNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2dsRnJhZ0RhdGF9KTsK
KyAgICB9CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKworICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBn
bF9GcmFnRGF0YSBhcnJheSB0eXBlLCBjb21wYXRpYmxlIHdpdGggaW5kZXhpbmcgc3ludGF4Lgor
ICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LT5tYWtl
QXJyYXkobWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0YUds
b2JhbCA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImdsX0Zy
YWdEYXRhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisKKyAg
ICBEZWNsYXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIGdsRnJhZ0RhdGFHbG9iYWwpOworICAgIGNv
bnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZy
b290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworICAgIEFTU0VSVChvcmlnaW5h
bEdMRnJhZ0RhdGEpOworCisgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGds
b2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGls
ZXIsICZyb290LCAmKG9yaWdpbmFsR0xGcmFnRGF0YS0+dmFyaWFibGUoKSksIGdsRnJhZ0RhdGFH
bG9iYWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFz
c2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQKKyAgICBUSW50ZXJtQmxvY2sg
Kmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Z2xGcmFnRGF0YVNsb3QgICAgICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFTbG90
c1tpXSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCA9IG5l
dyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFHbG9iYWwpOworICAgICAgICBhdXRvICZhY2Nlc3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5
bWJvbCwgaSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICAg
ICAgbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGdsRnJhZ0RhdGFTbG90
LCAmYWNjZXNzKTsKKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3Np
Z25tZW50KTsKKyAgICB9CisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVy
LCAmcm9vdCwgaW5zZXJ0U2VxdWVuY2UsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBFbXVsYXRlSW5zdGFuY2VJRChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQoreworICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorICAg
ICAgICBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRW11SW5zdGFuY2VJ
REZpZWxkLnJhd05hbWUoKS5kYXRhKCkpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqaW5zdGFuY2VJ
RCA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfSW5zdGFuY2VJbmRleCgpOworICAgIHJldHVybiBSZXBs
YWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5z
dGFuY2VJRCk7Cit9CisKKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ly8gbWFudWFsbHkuCisvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xf
UG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisvLyBnbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBw
ZW5kVmVydGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgJmNvbXBp
bGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6
bGUgJm5lZ0ZsaXBZKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxl
ci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBC
dWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRp
b25SZWYgPSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4g
c3dpenpsZU9mZnNldFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJ
bnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYs
IHN3aXp6bGVPZmZzZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9z
aXRpb24ueSAqIG5lZ0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJ
bnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlv
bi55ICogbmVnVmlld3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9
IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9
IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGlu
dmVyc2VZKTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBh
dCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
JmNvbXBpbGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlCisKK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0
KHNoOjpHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5
cGUsIHNwZWMsIG91dHB1dCkKK3t9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRv
ck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICBy
ZXR1cm4gY29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRh
KCk7Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpH
ZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBj
b25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0
YSgpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0Ojpp
bnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAg
ICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBU
VHlwZSAqYm9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgYm9vbFR5cGUtPnNldFF1
YWxpZmllcihFdnFDb25zdCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9Cisg
ICAgICAgIG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGNvbnN0YW50X25hbWVzOjprUmFzdGVy
aXphdGlvbkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKSwgYm9vbFR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWQuc3lt
Ym9sVHlwZSgpKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZh
cmlhYmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0g
bmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIHZlYzQoLTMsIC0z
LCAtMywgMSk6CisgICAgYXV0byB2ZWM0VHlwZSAgICAgICAgICAgICA9IG5ldyBUVHlwZShFYnRG
bG9hdCwgNCk7CisgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2Vx
dWVuY2UoKTsKKyAgICB2ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikp
OworICAgIHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7CisgICAg
dmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2ZWM0QXJn
cy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgxLjBmKSk7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSAqY29uc3RWYXJDb25zdHJ1Y3RvciA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworCisgICAgLy8gQ3JlYXRlIHRoZSBh
c3NpZ25tZW50ICJnbF9Qb3NpdGlvbiA9IHZlYzQoLTMsIC0zLCAtMywgMSkiCisgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCBwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgY29uc3RWYXJDb25zdHJ1Y3Rv
cik7CisKKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxvY2s7
CisgICAgZGlzY2FyZEJsb2NrLT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWdubWVudCk7CisKKyAgICBU
SW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRpc2NhcmRF
bmFibGVkVmFyKTsKKyAgICBUSW50ZXJtSWZFbHNlICppZkNhbGwgICAgICAgICA9IG5ldyBUSW50
ZXJtSWZFbHNlKGRpc2NhcmRFbmFibGVkLCBkaXNjYXJkQmxvY2ssIG51bGxwdHIpOworCisgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworfQorCisvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJh
bmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRlcHRoIGZhcgorLy8g
VGhpcyBpcyBhY2hpZXZlZCBieSBtdWx0aXBseSB0aGUgZGVwdGggdmFsdWUgd2l0aCBzY2FsZSB2
YWx1ZSBzdG9yZWQgaW4KKy8vIGRyaXZlciB1bmlmb3JtJ3MgZGVwdGhSYW5nZS5yZXNlcnZlZAor
Ym9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlv
bihUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6Omds
X1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVy
bVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7
Mn07CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxl
KHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3
cG9ydFpTY2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihk
cml2ZXJVbmlmb3Jtcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0
aW9uLnogKiBkZXB0aFJhbmdlLnJlc2VydmVkIi4KKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUg
PSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3Bv
cnRaU2NhbGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56
ID0gZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiCisgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFy
eSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwg
cG9zaXRpb25aTEhTLCB6U2NhbGUpOworCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
dGhpcywgJnJvb3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKK30KKwordm9pZCBU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZv
cm1GaWVsZHMoCisgICAgc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpCit7CisgICAg
Ly8gQWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2
ZSBidWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKyAgICAvLyBlcXVpdmFsZW50IGZ1
bmN0aW9uYWxpdHksIG5lZWRzIHRvIGVtdWxhdGUgaXQgdXNpbmcgZnJhZ21lbnQgc2hhZGVyJ3Mg
W1tzYW1wbGVfbWFza11dIG91dHB1dAorICAgIC8vIHZhbHVlLgorICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrTm9Tb3VyY2VMb2MsIGtDb3ZlcmFnZU1hc2tGaWVsZC5zeW1ib2xUeXBlKCkpOworICAg
IGZpZWxkc091dC5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVs
YXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVs
ZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3
TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBrRW11SW5zdGFuY2VJREZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAgICAg
IGZpZWxkc091dC5wdXNoX2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKyAgICB9Cit9CisKK1RJ
bnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdG
bGlwWVJlZigKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdAorewor
ICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorICAgIFRJbnRlcm1CaW5h
cnkgKm5lZ0ZsaXBYWSAgICA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtOZWdGbGlwWFkpOworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WSA9IHsxfTsKKyAg
ICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVnRmxp
cFhZLCBzd2l6emxlT2Zmc2V0WSk7CisgICAgcmV0dXJuIG5lZ0ZsaXBZOworfQorCitzdGF0aWMg
c3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBHZXRNc2xLZXl3b3JkcygpCit7CisgICAgc3RkOjpz
ZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKworICAgIGtleXdvcmRzLmVtcGxhY2UoImFs
aWduYXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgiYXNfdHlwZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImF1dG8iKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNoYXIiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjbGFzcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNv
bnN0X2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdGFudCIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoImNvbnN0ZXhwciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBl
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGVsZXRlIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZGV2aWNlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgiZW51bSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImV4cGxpY2l0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZXh0ZXJuIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZnJhZ21lbnQiKTsKKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJmcmllbmQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJnb3RvIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiaGFsZiIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGlu
ZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImludDE2X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJpbnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoImludDhfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImtlcm5lbCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJt
YWluMCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1ldGFsIik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5hbWVzcGFjZSIpOworICAg
IGtleXdvcmRzLmVtcGxhY2UoIm5ldyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibnVsbHB0cl90Iik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibnVsbHB0ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgib3ZlcnJpZGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcml2
YXRlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgicHRyZGlmZl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHVibGljIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJy
ZWdpc3RlciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgic2lnbmVkIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgic2l6ZW9mIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2Vf
aW4iKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhdGljX2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWMi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0ZW1wbGF0ZSIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInRoaXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRn
cm91cF9pbWFnZWJsb2NrIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJvdyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRy
eSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJ0eXBlaWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlbmFtZSIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVjaGFyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDE2X3Qi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MzJfdCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQ2NF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDhfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVuaW9uIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ1c2luZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInZpcnR1YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2b2xhdGlsZSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoIndjaGFyX3QiKTsKKworICAgIHJldHVybiBrZXl3b3JkczsK
K30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZUltcGwoVEludGVybUJs
b2NrICZyb290LCBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBnZXRTeW1ib2xUYWJsZSgpOworICAgIElkR2VuIGlkR2Vu
OworICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKworICAgIGlmICghV3JhcE1haW4oKnRo
aXMsIGlkR2VuLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBUSW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisjaWYgMAorICAg
IGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IGlmICghU2hhZGVyQnVpbHRpbnNXb3JrYXJvdW5kKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUs
IGNvbXBpbGVPcHRpb25zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFy
aWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisgICAgaWYgKCFSZW1vdmVJbmFjdGl2ZUludGVyZmFj
ZVZhcmlhYmxlcyh0aGlzLCAmcm9vdCwgZ2V0QXR0cmlidXRlcygpLCBnZXRJbnB1dFZhcnlpbmdz
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXRwdXRW
YXJpYWJsZXMoKSwgZ2V0VW5pZm9ybXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvdXQgZGVmYXVsdCB1bmlmb3JtcyBpbnRv
IGEgdW5pZm9ybSBibG9jayBhc3NpZ25lZCB0byBhIHNwZWNpZmljIHNldC9iaW5kaW5nLgorICAg
IGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisgICAgaW50IGFnZ3JlZ2F0
ZVR5cGVzVXNlZEZvclVuaWZvcm1zID0gMDsKKyAgICBpbnQgYXRvbWljQ291bnRlckNvdW50ICAg
ICAgICAgICAgPSAwOworICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1z
KCkpCisgICAgeworICAgICAgICBpZiAoIXVuaWZvcm0uaXNCdWlsdEluKCkgJiYgdW5pZm9ybS5h
Y3RpdmUgJiYgIWdsOjpJc09wYXF1ZVR5cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgKytkZWZhdWx0VW5pZm9ybUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHVuaWZvcm0uaXNTdHJ1Y3QoKSB8fCB1bmlmb3JtLmlzQXJyYXlPZkFycmF5cygpKQorICAgICAg
ICB7CisgICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJU
eXBlKHVuaWZvcm0udHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrYXRvbWljQ291bnRl
ckNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZv
clVuaWZvcm1zID4gMCkKKyAgICB7CisgICAgICAgIGlmICghTmFtZUVtYmVkZGVkU3RydWN0VW5p
Zm9ybXModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmV3cml0ZVN0cnVjdFNh
bXBsZXJzUmVzdWx0OworICAgICAgICBpbnQgcmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyAgICAg
ICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfVVNFX09MRF9SRVdSSVRFX1NUUlVDVF9TQU1QTEVS
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnNPbGQodGhpcywgJnJvb3QsICZz
eW1ib2xUYWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCA9
CisgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3lt
Ym9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHRVbmlmb3JtQ291bnQgLT0g
cmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyNpZiAwCisgICAgICAgIC8vIFdlIG11c3QgZGVjbGFy
ZSB0aGUgc3RydWN0IHR5cGVzIGJlZm9yZSB1c2luZyB0aGVtLgorICAgICAgICBEZWNsYXJlU3Ry
dWN0VHlwZXNUcmF2ZXJzZXIgc3RydWN0VHlwZXNUcmF2ZXJzZXIob3V0cHV0TVNMKTsKKyAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFz
dHJ1Y3RUeXBlc1RyYXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfU0VBTUZVTF9DVUJFX01BUF9TQU1QTElO
RykKKyAgICB7CisgICAgICAgIGlmICghUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheSh0
aGlzLCAmcm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
I2lmIDAKKyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sKKyAgICBpZiAoZGVmYXVs
dFVuaWZvcm1Db3VudCA+IDApCisgICAgeworICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJU
eXBlID0gZ2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7Cisg
ICAgICAgIHNpbmsgPDwgIlxuc3RydWN0ICIgPDwga0RlZmF1bHRVbmlmb3JtTmFtZXNbc2hhZGVy
VHlwZV0gPDwgIlxue1xuIjsKKyAgICAgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNl
ciBkZWZhdWx0VHJhdmVyc2VyKCZzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgJmdldE5hbWVNYXAo
KSk7CisgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKyAgICAgICAg
aWYgKCFkZWZhdWx0VHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpbmsgPDwg
In07XG4iOworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcyA9ICpbJl0oKSB7CisgICAgICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfQ09NUFVU
RV9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRDb21wdXRlRHJpdmVy
VW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gYWRkaXRp
b25hbEZpZWxkczsKKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVu
aWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisgICAgICAgICAgICByZXR1cm4gQWRkR3Jh
cGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlLCBhZGRpdGlvbmFs
RmllbGRzKTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGlmIChhdG9taWNDb3VudGVyQ291
bnQgPiAwKQorICAgIHsKKyAgICAgICAgLy8gQU5HTEVVbmlmb3Jtcy5hY2JCdWZmZXJPZmZzZXRz
CisgICAgICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkgKmFjYkJ1ZmZlck9mZnNldHMgPQorICAgICAg
ICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9m
ZnNldHMpOworCisgICAgICAgIGlmICghUmV3cml0ZUF0b21pY0NvdW50ZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsIGFjYkJ1ZmZlck9mZnNldHMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VmVyc2lvbigpID49IDMxMCkKKyAgICB7CisgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0IHN1cHBv
cnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2VlbgorICAg
ICAgICAvLyBjYXNlcyB3aGVyZSBidWlsdGlucyBhcmUgdXNpbmcgaXQgZXZlbiB3aXRoIG5vIGFj
dGl2ZSBhdG9taWMgY291bnRlcnMuCisgICAgICAgIC8vIFRoaXMgcGFzcyBzaW1wbHkgcmVtb3Zl
cyB0aG9zZSBidWlsdGlucyBpbiB0aGF0IHNjZW5hcmlvLgorICAgICAgICBpZiAoIVJlbW92ZUF0
b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXRTaGFkZXJUeXBl
KCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisgICAgeworICAgICAgICBpZiAoIVJlcGxhY2VHTERl
cHRoUmFuZ2VXaXRoRHJpdmVyVW5pZm9ybSgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworI2lmIDAK
KyAgICAgICAgLy8gQWRkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50IGRlY2xhcmF0aW9ucy4gIFRo
ZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBzcGVjaWFsaXphdGlvbgorICAgICAgICAvLyBjb25zdGFu
dCBpcyBpcnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBl
bGluZS4KKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5F
X1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91
dChjb25zdGFudF9pZD0iCisgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2azo6U3BlY2lhbGl6YXRpb25Db25zdGFudElkOjpMaW5lUmFzdGVyRW11bGF0aW9uKQorICAg
ICAgICAgICAgICAgICA8PCAiKSBjb25zdCBib29sICIgPDwga0xpbmVSYXN0ZXJFbXVsYXRpb25T
cGVjQ29uc3RWYXJOYW1lIDw8ICIgPSBmYWxzZTtcblxuIjsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisgICAgeworICAgICAgICBib29sIHVzZXNJbnN0YW5jZUlkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodmFyLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICh2YXIubmFtZSA9PSAiZ2xfSW5zdGFuY2VJRCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVz
ZXNJbnN0YW5jZUlkKQorICAgICAgICB7CisgICAgICAgICAgICByb290Lmluc2VydENoaWxkTm9k
ZXMoCisgICAgICAgICAgICAgICAgRmluZE1haW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxl
OjpnbF9JbnN0YW5jZUlEKCl9fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWNsYXJl
IGdsX0ZyYWdDb2xvciBhbmQgZ2xGcmFnRGF0YSBhcyB3ZWJnbF9GcmFnQ29sb3IgYW5kIHdlYmds
X0ZyYWdEYXRhCisgICAgLy8gaWYgaXQncyBjb3JlIHByb2ZpbGUgc2hhZGVycyBhbmQgdGhleSBh
cmUgdXNlZC4KKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikK
KyAgICB7CisgICAgICAgIGJvb2wgdXNlc1BvaW50Q29vcmQgID0gZmFsc2U7CisgICAgICAgIGJv
b2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0Zyb250RmFjaW5n
ID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJmlucHV0VmFyeWlu
ZyA6IG1JbnB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5wdXRWYXJ5
aW5nLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbnB1
dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
Q29vcmQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdD
b29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1c2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdXNlc0Zy
YWdDb2xvciA9IGZhbHNlOworICAgICAgICBib29sIHVzZXNGcmFnRGF0YSAgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCB1c2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hh
ZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29s
b3IiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91
dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
RGVwdGgiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdE
ZXB0aCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNl
c0ZyYWdDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0NvbG9yRGVjbGFyYXRp
b24ocm9vdCwgc3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcmFn
RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KCp0aGlzLCByb290KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdEZXB0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24ocm9vdCwg
c3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAgIGlmIChjb21waWxlT3B0
aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVP
cHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRyaXZlclVuaWZvcm1zLCB1c2VzRnJhZ0Nvb3JkKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlUHJlUm90YXRpb24gPSBjb21waWxl
T3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT047CisKKyAgICAgICAgaWYgKHVzZXNQb2ludENv
b3JkKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7Cisg
ICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAmcGl2b3QgPSAqQ3JlYXRlRmxvYXROb2Rl
KDAuNWYpOworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAg
ICAgICAgICAgICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVy
VW5pZm9ybXMsIGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUm90
YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZSgqdGhpcywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShy
b290KSwgZmxpcFhZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZv
dCwgZnJhZ1JvdGF0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVh
dGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICAgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmZyYWdSb3RhdGlvbiA9CisgICAgICAgICAgICAgICAgdXNlUHJlUm90
YXRpb24gPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0
aW9uKSA6IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290
LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKyAgICAgICAg
eworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlh
YmxlOjpnbF9Gcm9udEZhY2luZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVtaXRFYXJseUZy
YWdtZW50VGVzdHNHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hh
ZGVyVHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworCisg
ICAgICAgIGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2lu
dFNpemUoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUoKSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoRmluZFN5bWJvbE5vZGUoJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6
Z2xfVmVydGV4SW5kZXgoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFS
ZXBsYWNlVmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5k
ZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZ2xfVmVydGV4SW5kZXhN
ZXRhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCBrZ2xf
VmVydGV4SW5kZXhNZXRhbCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBp
bGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uVlModGhpcywgcm9v
dCwgJnN5bWJvbFRhYmxlLCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQWRkIGEgbWFjcm8gdG8gZGVjbGFyZSB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycy4K
KyAgICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKyNlbmRpZgorCisgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJU
cmFuc2Zvcm1GZWVkYmFja091dHB1dFRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlYXJjaCBm
b3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8g
c29tZSByZXBsYWNlbWVudHMuCisgICAgICAgIGJvb2wgdXNlQ2xpcERpc3RhbmNlID0gZmFsc2U7
CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0
cHV0VmFyeWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5h
bWUgPT0gImdsX0NsaXBEaXN0YW5jZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VDbGlwRGlzdGFuY2UgJiYgIVJlcGxh
Y2VDbGlwRGlzdGFuY2VBc3NpZ25tZW50cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0NsaXBE
aXN0YW5jZXNFbmFibGVkKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENv
cnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbXBpbGVPcHRpb25zICYgU0hf
QUREX1BSRV9ST1RBVElPTikgIT0gMCAmJgorICAgICAgICAgICAgIUFwcGVuZFByZVJvdGF0aW9u
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfR0VPTUVUUllfU0hBREVSKQorICAgIHsKKyAgICAgICAgV3JpdGVHZW9tZXRyeVNo
YWRlckxheW91dFF1YWxpZmllcnMoCisgICAgICAgICAgICBzaW5rLCBnZXRHZW9tZXRyeVNoYWRl
cklucHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlckludm9jYXRpb25zKCksCisg
ICAgICAgICAgICBnZXRHZW9tZXRyeVNoYWRlck91dHB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2Vv
bWV0cnlTaGFkZXJNYXhWZXJ0aWNlcygpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisgICAgICAg
IEVtaXRXb3JrR3JvdXBTaXplR0xTTCgqdGhpcywgc2luayk7CisgICAgfQorCisgICAgaWYgKGdl
dFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgYXV0byAm
bmVnRmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsK
KworICAgICAgICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFFbXVsYXRlSW5zdGFuY2VJRCgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRpb25Z
Q29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCwgbmVnRmxpcFkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluc2VydFJh
c3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmFsaWRhdGVBU1QoJnJv
b3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghUmV3
cml0ZUtleXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZWR1Y2VJbnRlcmZh
Y2VCbG9ja3MoKnRoaXMsIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhp
cyBpcyB0aGUgbGFyZ2VzdCBzaXplIHJlcXVpcmVkIHRvIHBhc3MgYWxsIHRoZSB0ZXN0cyBpbgor
ICAgIC8vIChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJh
eXMpCisgICAgLy8gVGhpcyB2YWx1ZSBjb3VsZCBpbiBwcmluY2lwbGUgYmUgc21hbGxlci4KKyAg
ICBjb25zdCBzaXplX3QgaG9pc3RUaHJlc2hvbGRTaXplID0gMjU2OworICAgIGlmICghSG9pc3RD
b25zdGFudHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludmFyaWFudHMgaW52YXJpYW50
czsKKyAgICBpZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52
YXJpYW50cykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3lt
Ym9sRW52IHN5bWJvbEVudigqdGhpcywgcm9vdCk7CisKKyAgICBpZiAoIUFkZEV4cGxpY2l0VHlw
ZUNhc3RzKCp0aGlzLCByb290LCBzeW1ib2xFbnYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisgICAg
aWYgKCFSZXdyaXRlUGlwZWxpbmVzKCp0aGlzLCByb290LCBpZEdlbiwgZHJpdmVyVW5pZm9ybXMs
IHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxp
bmVTdHJ1Y3RzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIVNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucygqdGhpcywgc3ltYm9sRW52LCBpZEdlbiwg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFS
ZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5j
ZXMoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlT3V0QXJncygqdGhpcywgcm9vdCwgc3ltYm9sRW52
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVRvcG9z
b3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghRW1pdE1ldGFsKCp0aGlzLCByb290LCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYsIHBwYykpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHZhbGlkYXRlQVNU
KCZyb290KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlRGlhZ25vc3RpY3Mg
KnBlcmZEaWFnbm9zdGljcykKK3sKKyAgICBpZiAoIXJvb3QpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5r
KCkub2JqOworCisgICAgYm9vbCBwcmVjaXNpb25FbXVsYXRpb24gPSBmYWxzZTsKKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworI2lmIDAKKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlv
bnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworCisgICAgVE91dHB1
dE1TTCBvdXRwdXRNU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0
SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAm
Z2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdl
dE91dHB1dFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25FbXVsYXRp
b24sIGVuYWJsZVByZWNpc2lvbiwgY29tcGlsZU9wdGlvbnMpOworI2VuZGlmCisKKyAgICBpZiAo
IXRyYW5zbGF0ZUltcGwoKnJvb3QsIGNvbXBpbGVPcHRpb25zKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyNpZiAwCisgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFk
ZXIuCisgICAgcm9vdC0+dHJhdmVyc2Uob3V0cHV0TVNMKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IHRydWU7Cit9Citib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKCkKK3sKKyAgICAvLyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJh
bnNmb3JtYXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWZjYjMwNjcxOTc3YmY1ODFiNmFjMjU3MzIxYzdkMTZmNjZmYzU2ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3Mg
VE91dHB1dE1TTDsKKwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c2l6ZV90LCBzdGQ6OnN0
cmluZz4gb3JpZ2luYWxOYW1lc01hcDsKK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHNpemVfdD4gdGV4dHVyZUJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB1bmlmb3JtQnVmZmVyQmluZGlu
Z01hcDsKKworY2xhc3MgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbgoreworICBwdWJsaWM6Cisg
ICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisgICAgflRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorCisgICAgdm9pZCBhZGRPcmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlk
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIG9yaWdpbmFsTmFtZXMu
aW5zZXJ0KHtpZCwgbmFtZX0pOworICAgIH0KKyAgICB2b2lkIGFkZFNhbXBsZXJCaW5kaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qgc2FtcGxlckJpbmRpbmcpCisgICAgeworICAg
ICAgICBzYW1wbGVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCBzYW1wbGVyQmluZGluZ30pOworICAg
IH0KKyAgICB2b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBz
aXplX3QgdGV4dHVyZUJpbmRpbmcpCisgICAgeworICAgICAgICB0ZXh0dXJlQmluZGluZ3MuaW5z
ZXJ0KHtuYW1lLCB0ZXh0dXJlQmluZGluZ30pOworICAgIH0KKyAgICB2b2lkIGFkZFVuaWZvcm1C
dWZmZXJCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdW5pZm9ybUJ1ZmZl
ckJpbmRpbmcpCisgICAgeworICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtu
YW1lLCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBnZXRP
cmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlkKSB7IHJldHVybiBvcmlnaW5hbE5hbWVzLmF0KGlk
KTsgfQorICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorICAgIHRleHR1cmVCaW5kaW5nTWFwIGdldFRleHR1
cmVCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmVCaW5kaW5nczsgfQorICAgIHVuaWZv
cm1CdWZmZXJCaW5kaW5nTWFwIGdldFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0
dXJuIHVuaWZvcm1CdWZmZXJCaW5kaW5nczsgfQorICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGlu
Zyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQg
PSBzYW1wbGVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJC
aW5kaW5ncy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICB9CisgICAgc2l6ZV90IGdldFRleHR1cmVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0
byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gdGV4
dHVyZUJpbmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VW5p
Zm9ybUJ1ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgewor
ICAgICAgICBhdXRvIGl0ID0gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAg
ICAgIGlmIChpdCAhPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7Cisg
ICAgfQorICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5jbGVh
cigpOworICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZUJp
bmRpbmdzLmNsZWFyKCk7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5jbGVhcigpOwor
ICAgIH0KKworICBwcml2YXRlOgorICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsK
KyAgICBzYW1wbGVyQmluZGluZ01hcCBzYW1wbGVyQmluZGluZ3M7CisgICAgdGV4dHVyZUJpbmRp
bmdNYXAgdGV4dHVyZUJpbmRpbmdzOworICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZv
cm1CdWZmZXJCaW5kaW5nczsKK307CisKK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1
YmxpYyBUQ29tcGlsZXIKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChz
aDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
OworCisjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0
ICpnZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
KyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0UmFzdGVyaXphdGlvbkRpc2Nh
cmRFbmFibGVkQ29uc3ROYW1lKCk7CisKKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJ
RChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKyAgICBUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkgeyByZXR1cm4gJnRy
YW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247IH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB0cmFu
c2xhdGUoVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFn
bm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJU0NB
UkQgYm9vbCB0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9u
cyBjb21waWxlT3B0aW9ucyk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgc2hvdWxkRmxh
dHRlblByYWdtYVN0ZGdsSW52YXJpYW50QWxsKCkgb3ZlcnJpZGU7CisKKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpOworICAgIEFOR0xFX05PX0RJ
U0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAm
cm9vdCk7CisKKyAgICB2b2lkIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1G
aWVsZHMoc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpOworCisgICAgQU5HTEVfTk9f
RElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKAorICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdDsKKworICAgIGJvb2wg
bUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworCisgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVj
dGlvbiB0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0ge307Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0
MTE4MGE5MDA0NDIxZWJiNTMyZmYxOGMzMzRkODZhNmU2Y2RjNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKQEAgLTAsMCArMSw5NSBAQAor
Ly8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHVibGljOgorICAg
IFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAg
ICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorICAgIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChU
SW50ZXJtQWdncmVnYXRlICZjYWxsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0
IHNpemVfdCBhcmdDb3VudCA9IGNhbGxOb2RlLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgY29u
c3QgVFR5cGUgJnJldFR5cGUgID0gY2FsbE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgIGlmIChj
YWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1Nj
YWxhckJhc2ljVHlwZShyZXRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJW
ZWN0b3IoYXJnLCAwLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IDEpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAg
ID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
YXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBl
LmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDb2VyY2VTaW1wbGUocmV0VHlwZSwgU3ViVmVjdG9yKGFyZywgMCwgcmV0VHlw
ZS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
ICZhcmcgPSBHZXRBcmcoY2FsbE5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBTZXRBcmco
Y2FsbE5vZGUsIGksIENvZXJjZVNpbXBsZShyZXRUeXBlLmdldEJhc2ljVHlwZSgpLCBhcmcpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy
ZXRUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFy
Z0NvdW50ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFR5cGUgYXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmdUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXRUeXBlLmdldENvbHMoKSAhPSBhcmdUeXBlLmdldENv
bHMoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFR5cGUuZ2V0Um93cygpICE9
IGFyZ1R5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlQXJnIHRlbXBsYXRlQXJnc1tdID0ge3JldFR5cGUu
Z2V0Q29scygpLCByZXRUeXBlLmdldFJvd3MoKX07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgfQorfTsKKworfSAg
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyhU
Q29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9s
RW52KQoreworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworICAg
IGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MDM0Mjg4OWE2ZjJlNmVjYzcxNWE1Mjc1NzM4MTJjMjFlYzky
ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3Rz
LmgKQEAgLTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNUU19IXworI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZ
UEVDQVNUU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dy
YW1QcmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBZGRzIGV4cGxp
Y2l0IHR5cGUgY2FzdHMgaW50byB0aGUgQVNUIHdoZXJlIGNhc3RpbmcgaXMgZG9uZSBpbXBsaWNp
dGx5LgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE0ZWM3N2RlYmRj
ZmI3MWY1MDUzMTYzZDZhZGJiMWRhOGE0YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FzdEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDc0IEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNl
IHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCit7CisgICAgQVNTRVJUKGRl
Y2xOb2RlLmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2Rl
ID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworICAgIEFTU0VSVChjaGlsZE5vZGUpOworICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGU7CisgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGRO
b2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4geypzeW1ib2xO
b2RlLCBudWxscHRyfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaW5pdE5vZGUpOworICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9wKCkgPT0gVE9w
ZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7
CisgICAgICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIGluaXROb2RlLT5nZXRSaWdodCgpfTsKKyAg
ICB9Cit9CisKK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBhdXRv
ICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworICAgIGF1dG8gKnZhciAgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwgdHlwZSwgU3lt
Ym9sVHlwZTo6RW1wdHkpOworICAgIHJldHVybiAqdmFyOworfQorCitjb25zdCBUVmFyaWFibGUg
JnNoOjpDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5
U2l6ZXMpCit7CisgICAgYXV0byAqdHlwZSA9IG5ldyBUVHlwZSgmc3RydWN0dXJlLCBmYWxzZSk7
CisgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgaWYgKGFycmF5U2l6ZXMp
CisgICAgeworICAgICAgICB0eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKyAgICB9Cisg
ICAgYXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCB0eXBlLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK3N0YXRp
YyB2b2lkIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5j
dGlvbiAmc3JjKQoreworICAgIGlmIChzcmMuaXNEZWZpbmVkKCkpCisgICAgeworICAgICAgICBk
ZXN0LnNldERlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoc3JjLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisgICAgeworICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCk7CisgICAgfQorfQorCitUSW50ZXJtU2VxdWVuY2UgJnNoOjpDbG9uZVNlcXVlbmNlQW5kUHJl
cGVuZChjb25zdCBUSW50ZXJtU2VxdWVuY2UgJnNlcSwgVEludGVybU5vZGUgJm5vZGUpCit7Cisg
ICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIG5ld1NlcS0+cHVz
aF9iYWNrKCZub2RlKTsKKworICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisg
ICAgeworICAgICAgICBuZXdTZXEtPnB1c2hfYmFjayhvbGROb2RlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gKm5ld1NlcTsKK30KKwordm9pZCBzaDo6QWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9u
ICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYykKK3sKKyAgICBjb25zdCBzaXplX3QgcGFyYW1D
b3VudCA9IHNyYy5nZXRQYXJhbUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciA9IHNy
Yy5nZXRQYXJhbShpKTsKKyAgICAgICAgZGVzdC5hZGRQYXJhbWV0ZXIodmFyKTsKKyAgICB9Cit9
CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9s
ZEZ1bmMpCit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
TmFtZShvbGRGdW5jKSk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwg
b2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVu
Y3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3
RnVuYywgb2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0
aW9uICZzaDo6Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSkK
K3sKKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQgfHwKKyAgICAgICAgICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVh
dGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKworICAgIGF1dG8gJm5l
d0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm9sZEZ1bmMuZ2V0UmV0dXJuVHlwZSgpLCBvbGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZm
ZWN0cygpKTsKKworICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsK
KyAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcigmbmV3UGFyYW0pOworICAgIEFkZFBhcmFtZXRlcnNG
cm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK2NvbnN0
IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNv
bnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW1zKQoreworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorICAgICAgICAgICBvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBO
YW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAmbmV3RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1i
b2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9s
ZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1
bmMsIG9sZEZ1bmMpOworICAgIGZvciAoYXV0byAqcGFyYW0gOiBuZXdQYXJhbXMpCisgICAgewor
ICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJu
IG5ld0Z1bmM7Cit9CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFu
Z2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pCit7CisgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKwor
ICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRG
dW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBU
VHlwZSgmbmV3UmV0dXJuLCB0cnVlKTsKKyAgICBhdXRvICZuZXdGdW5jICAgICAgID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JldHVyblR5cGUs
IG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1
bmN0aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK1RJbnRlcm1UeXBl
ZCAmc2g6OkdldEFyZyhjb25zdCBUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgp
Cit7CisgICAgQVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgIGF1dG8g
KmFyZyA9IGNhbGwuZ2V0Q2hpbGROb2RlKGluZGV4KTsKKyAgICBBU1NFUlQoYXJnKTsKKyAgICBh
dXRvICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHRhcmcpOworICAgIHJl
dHVybiAqdGFyZzsKK30KKwordm9pZCBzaDo6U2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGws
IHNpemVfdCBpbmRleCwgVEludGVybVR5cGVkICZhcmcpCit7CisgICAgQVNTRVJUKGluZGV4IDwg
Y2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgICgqY2FsbC5nZXRTZXF1ZW5jZSgpKVtpbmRleF0g
PSAmYXJnOworfQorCitpbnQgc2g6OkdldEZpZWxkSW5kZXgoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAgICBjb25zdCBU
RmllbGRMaXN0ICZmaWVsZExpc3QgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisKKyAgICBpbnQgaSA9
IDA7CisgICAgZm9yIChURmllbGQgKmZpZWxkIDogZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAg
aWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoY29uc3QgVFZhcmlhYmxlICZz
dHJ1Y3RJbnN0YW5jZVZhciwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7Cisg
ICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0SW5zdGFuY2VW
YXIpLCBmaWVsZE5hbWUpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVElu
dGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorewor
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG9iamVjdC5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICBjb25zdCBpbnQgaW5kZXggPSBH
ZXRGaWVsZEluZGV4KCpzdHJ1Y3R1cmUsIGZpZWxkTmFtZSk7CisgICAgQVNTRVJUKGluZGV4ID49
IDApOworICAgIHJldHVybiBBY2Nlc3NGaWVsZEJ5SW5kZXgob2JqZWN0LCBpbmRleCk7Cit9CisK
K1RJbnRlcm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVkICZvYmpl
Y3QsIGludCBpbmRleCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gb2JqZWN0LmdldFR5cGUoKTsKKyAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCgwIDw9IGluZGV4KTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxk
cygpLnNpemUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisg
ICAgICAgIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICZvYmplY3QsCisgICAgICAg
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3
IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKK30KKworVEludGVybUJpbmFyeSAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxlTm9kZSwgaW50IGluZGV4KQoreworI2lm
IGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBp
bmRleGFibGVOb2RlLmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisjZW5kaWYKKworICAgIGF1dG8gKmFj
Y2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKyAgICAgICAgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdCwgJmluZGV4YWJsZU5vZGUsCisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidElu
dCkpKTsKKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKK3sKKyAgICBp
ZiAoaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gQWNjZXNzSW5kZXgobm9kZSwgKmluZGV4
KTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OlN1YlZl
Y3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAg
ICBBU1NFUlQodmVjdG9yTm9kZS5nZXRUeXBlKCkuaXNWZWN0b3IoKSk7CisgICAgQVNTRVJUKDAg
PD0gYmVnaW4pOworICAgIEFTU0VSVChlbmQgPD0gNCk7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVu
ZCk7CisgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdl
dE5vbWluYWxTaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yTm9kZTsKKyAgICB9
CisgICAgVFZlY3RvcjxpbnQ+IG9mZnNldHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBiZWdp
bikpOworICAgIHN0ZDo6aW90YShvZmZzZXRzLmJlZ2luKCksIG9mZnNldHMuZW5kKCksIGJlZ2lu
KTsKKyAgICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBv
ZmZzZXRzKTsKKyAgICByZXR1cm4gKnN3aXp6bGU7Cit9CisKK2Jvb2wgc2g6OklzU2NhbGFyQmFz
aWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFy
QmFzaWNUeXBlKHR5cGUpOworfQorCitib29sIHNoOjpJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBl
KTsKK30KKworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZs
b2F0OgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKyAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAg
ICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAg
ICByZXR1cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCkpOworfQorCitz
dGF0aWMgdm9pZCBJbml0VHlwZShUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICBhdXRvIHNpemVzID0gdHlwZS5nZXRBcnJheVNpemVzKCk7Cisg
ICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisgICAgICAgIHR5cGUubWFrZUFycmF5cyhz
aXplcyk7CisgICAgfQorfQorCitUVHlwZSAmc2g6OkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKK3sKKyAgICBhdXRvICZjbG9uZSA9ICpuZXcgVFR5cGUodHlwZSk7CisgICAgSW5pdFR5cGUo
Y2xvbmUpOworICAgIHJldHVybiBjbG9uZTsKK30KKworVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGF1dG8gJmlubmVyID0gKm5ldyBUVHlwZSh0eXBl
KTsKKyAgICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKyAgICBJbml0VHlwZShpbm5lcik7Cisg
ICAgcmV0dXJuIGlubmVyOworfQorCitUVHlwZSAmc2g6OkRyb3BDb2x1bW5zKGNvbnN0IFRUeXBl
ICZtYXRyaXhUeXBlKQoreworICAgIEFTU0VSVChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAg
IEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUobWF0cml4VHlwZSkpOworICAgIGNvbnN0IGNoYXIg
Km1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJnZlY3RvclR5cGUgPQorICAgICAg
ICAqbmV3IFRUeXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJl
Y2lzaW9uKCksIG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
bWF0cml4VHlwZS5nZXRSb3dzKCksIDEsIG1hdHJpeFR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5n
bGVkTmFtZSk7CisgICAgSW5pdFR5cGUodmVjdG9yVHlwZSk7CisgICAgcmV0dXJuIHZlY3RvclR5
cGU7Cit9CisKK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJh
eVR5cGUpCit7CisgICAgQVNTRVJUKGFycmF5VHlwZS5pc0FycmF5KCkpOworICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvICZhcnJheVNpemVzICA9
IGFycmF5VHlwZS5nZXRBcnJheVNpemVzKCk7CisKKyAgICBhdXRvICZpbm5lclR5cGUgPQorICAg
ICAgICAqbmV3IFRUeXBlKGFycmF5VHlwZS5nZXRCYXNpY1R5cGUoKSwgYXJyYXlUeXBlLmdldFBy
ZWNpc2lvbigpLCBhcnJheVR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
YXJyYXlUeXBlLmdldE5vbWluYWxTaXplKCksIGFycmF5VHlwZS5nZXRTZWNvbmRhcnlTaXplKCks
CisgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6
ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKyAgICBJbml0VHlwZShpbm5lclR5cGUpOworICAgIHJl
dHVybiBpbm5lclR5cGU7Cit9CisKK3N0YXRpYyBUVHlwZSAmU2V0VHlwZURpbXNJbXBsKGNvbnN0
IFRUeXBlICZ0eXBlLCBpbnQgcHJpbWFyeSwgaW50IHNlY29uZGFyeSkKK3sKKyAgICBBU1NFUlQo
MSA8IHByaW1hcnkgJiYgcHJpbWFyeSA8PSA0KTsKKyAgICBBU1NFUlQoMSA8PSBzZWNvbmRhcnkg
JiYgc2Vjb25kYXJ5IDw9IDQpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkp
OworICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJm5l
d1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lzaW9u
KCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbWFyeSwgc2Vjb25kYXJ5LCB0eXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOwor
ICAgIEluaXRUeXBlKG5ld1R5cGUpOworICAgIHJldHVybiBuZXdUeXBlOworfQorCitUVHlwZSAm
c2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkKK3sKKyAgICBB
U1NFUlQodHlwZS5pc1JhbmswKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKyAgICByZXR1cm4gU2V0
VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7Cit9CisKK1RUeXBlICZzaDo6U2V0TWF0cml4
Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGltKQoreworICAgIEFTU0VS
VChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0Rp
bSA8PSA0KTsKKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKG1hdHJpeFR5cGUsIG1hdHJpeFR5
cGUuZ2V0Q29scygpLCBuZXdEaW0pOworfQorCitib29sIHNoOjpIYXNNYXRyaXhGaWVsZChjb25z
dCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCit7CisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHNoOjpIYXNBcnJheUZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmll
bGRzKCkpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworVElu
dGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21Ob2RlLmdl
dFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisgICAg
QVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCghZnJvbVR5
cGUuaXNBcnJheSgpKTsKKworICAgIGlmICh0b1R5cGUgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0
cnVjdG9yKAorICAgICAgICAgICAgKm5ldyBUVHlwZSh0b1R5cGUsIGZyb21UeXBlLmdldE5vbWlu
YWxTaXplKCksIGZyb21UeXBlLmdldFNlY29uZGFyeVNpemUoKSksCisgICAgICAgICAgICBuZXcg
VEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9UeXBl
LCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9
IGZyb21Ob2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9U
eXBlKSk7CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFT
U0VSVCh0b1R5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSBmcm9tVHlwZS5nZXROb21pbmFsU2l6ZSgp
KTsKKyAgICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRT
ZWNvbmRhcnlTaXplKCkpOworICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNT
RVJUKCFmcm9tVHlwZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZS5nZXRCYXNpY1R5cGUo
KSAhPSBmcm9tVHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVl
bmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisKK1RJbnRl
cm1UeXBlZCAmc2g6OkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRv
VHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZnJvbVR5
cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBl
KHRvVHlwZSkpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5cGUpKTsKKyAg
ICBBU1NFUlQoIXRvVHlwZS5pc0FycmF5KCkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJh
eSgpKTsKKworICAgIGlmICh0b1R5cGUgPT0gZnJvbVR5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gZnJvbU5vZGU7CisgICAgfQorICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKyAgICBy
ZXR1cm4gc3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImFzX3R5cGUiLCBTeW1i
b2xUeXBlOjpCdWlsdEluKSwgdG9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSwgMSwgJnRhcmcpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDllODlmZWIwNzMyOTBhZTYxYTE2ZmUwNTIwNjQwNmMw
NzUxOGM1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgKQEAg
LTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisKKyNpbmNsdWRlIDxj
c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3Nl
dD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBjb252ZW5p
ZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KK3N0cnVj
dCBEZWNsYXJhdGlvbgoreworICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKyAgICBUSW50ZXJt
VHlwZWQgKmluaXRFeHByOyAgLy8gTm9uLW51bGwgaWZmIGRlY2xhcmF0aW9uIGlzIGluaXRpYWxp
emVkLgorfTsKKworLy8gUmV0dXJucyBhIGBEZWNsYXJhdGlvbmAgdmlldyBvZiB0aGUgZ2l2ZW4g
bm9kZS4KK0RlY2xhcmF0aW9uIFZpZXdEZWNsYXJhdGlvbihUSW50ZXJtRGVjbGFyYXRpb24gJmRl
Y2xOb2RlKTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGZvciBhIHN0cnVjdCB0eXBlLgorY29u
c3QgVFZhcmlhYmxlICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ3JlYXRlcyBhIHZh
cmlhYmxlIGZvciBhIHN0cnVjdCBpbnN0YW5jZS4KK2NvbnN0IFRWYXJpYWJsZSAmQ3JlYXRlSW5z
dGFuY2VWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyID0gVFF1YWxpZmllcjo6RXZxVGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6
ZXMgPSBudWxscHRyKTsKKworLy8gVGhlIGlucHV0IHNlcXVlbmNlIHNob3VsZCBiZSBkaXNjYXJk
ZWQgZnJvbSBBU1QgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQuCitUSW50ZXJtU2VxdWVuY2UgJkNsb25l
U2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9k
ZSAmbm9kZSk7CisKKy8vIEFwcGVuZHMgcGFyYW1ldGVycyBmcm9tIGBzcmNgIGZ1bmN0aW9uIHRv
IGBkZXN0YCBmdW5jdGlvbi4KK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0
LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uLgorY29uc3Qg
VEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2Vu
ICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rp
b24gYW5kIHByZXBlbmRzIHRoZSBwcm92aWRlZCBleHRyIHBhcmFtZXRlci4KKy8vIElmIGBpZEdl
bmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20g
dGhlIEFTVC4KK2NvbnN0IFRGdW5jdGlvbiAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQ
YXJhbSk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBl
eHRyYSBwYXJhbWV0ZXJzLgorLy8gSWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVu
Y3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZD
bG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtKTsK
KworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaXRzIHJldHVybiB0eXBlLgorLy8g
SWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJk
ZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdl
UmV0dXJuVHlwZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAm
b2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKworLy8gR2V0cyB0aGUgYXJndW1lbnQg
b2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK1RJbnRlcm1UeXBlZCAmR2V0
QXJnKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisKKy8vIFNl
dHMgdGhlIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCit2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKworLy8gUmV0dXJucyB0aGUgZmllbGQgaW5kZXggd2l0aGluIHRoZSBnaXZl
biBzdHJ1Y3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gUmV0dXJucyAtMSBpZiB0aGUg
c3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgoraW50IEdldEZpZWxkSW5k
ZXgoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZp
ZWxkTmFtZSk7CisKKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3
aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gVGhlIHZhcmlhYmxlIG11c3QgYmUgYSBzdHJ1
Y3QgaW5zdGFuY2UuCitUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUg
JnN0cnVjdEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSk7CisK
Ky8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIGZp
ZWxkIG5hbWUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGluc3RhbmNlLgorVEludGVy
bUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyAmZmllbGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVu
IG5vZGUgYnkgaXRzIGZpZWxkIGluZGV4LgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBp
bnN0YW5jZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQg
Jm9iamVjdCwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBm
b3IgdGhlIGdpdmVuIG5vZGUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGFuIGFycmF5LCB2ZWN0b3Is
IG9yIG1hdHJpeC4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5k
ZXhhYmxlTm9kZSwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRl
eCBmb3IgdGhlIGdpdmVuIG5vZGUgaWYgYGluZGV4YCBpcyBub24tbnVsbC4KKy8vIFJldHVybnMg
dGhlIG9yaWdpbmFsIG5vZGUgaWYgYGluZGV4YCBpcyBudWxsLgorLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24tbnVsbC4KK1RJ
bnRlcm1UeXBlZCAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmlu
ZGV4KTsKKworLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2Ug
cmFuZ2UuCisvLyBUaGlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vZGUgaWYgdGhlIHNsaWNlIGlz
IGFuIGlkZW50aXR5IGZvciB0aGUgbm9kZS4KK1RJbnRlcm1UeXBlZCAmU3ViVmVjdG9yKFRJbnRl
cm1UeXBlZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworLy8gTWF0Y2hlcyBz
Y2FsYXIgYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1NjYWxhckJhc2lj
VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIE1hdGNoZXMgdmVjdG9yIGJvb2wsIGludCwg
dWludCwgZmxvYXQsIGRvdWJsZS4KK2Jvb2wgSXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUg
JnR5cGUpOworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKy8v
IFR5cGUgZG9lcyBub3QgbmVlZCB0byBiZSBhIHNjYWxhci4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNU
eXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVpbnQsIGZs
b2F0LCBkb3VibGUuCitib29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOwor
CisvLyBDbG9uZXMgYSB0eXBlLgorVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7
CisKKy8vIENsb25lcyBhIHR5cGUgYW5kIGRyb3BzIGFsbCBhcnJheSBkaW1lbnNpb25zLgorVFR5
cGUgJklubmVybW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBDcmVhdGVzIGEgdmVj
dG9yIHR5cGUgYnkgZHJvcHBpbmcgdGhlIGNvbHVtbnMgb2ZmIG9mIGEgbWF0cml4IHR5cGUuCitU
VHlwZSAmRHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworCisvLyBDcmVhdGVz
IGEgdHlwZSBieSBkcm9wcGluZyB0aGUgb3V0ZXIgZGltZW5zaW9uIG9mZiBvZiBhbiBhcnJheSB0
eXBlLgorVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsK
KworLy8gQ3JlYXRlcyBhIHNjYWxhciBvciB2ZWN0b3IgdHlwZSBieSBjaGFuZ2luZyB0aGUgZGlt
ZW5zaW9ucyBvZiBhIHZlY3RvciB0eXBlLgorVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisKKy8vIENyZWF0ZXMgYSBtYXRyaXggdHlwZSBieSBjaGFu
Z2luZyB0aGUgcm93IGRpbWVuc2lvbnMgb2YgYSBtYXRyaXggdHlwZS4KK1RUeXBlICZTZXRNYXRy
aXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworCisvLyBSZXR1
cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMgYSBmaWVsZCB3aXRo
IG1hdHJpeCB0eXBlLgorYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1
Y3R1cmUpOworCisvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29u
dGFpbnMgYSBmaWVsZCB3aXRoIGFycmF5IHR5cGUuCitib29sIEhhc0FycmF5RmllbGQoY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5vZGVgIHRvIGB0b1R5
cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVpciB0eXBlcyBkaWZm
ZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKFRC
YXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKworLy8gQ29lcmNlcyBg
ZnJvbU5vZGVgIHRvIGB0b1R5cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBp
ZiB0aGVpciB0eXBlcyBkaWZmZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIG11
c3QgY29pbmNpZGUgYmV0d2VlbiB0byBhbmQgZnJvbS4KKy8vIEFycmF5IHR5cGVzIGFyZSBub3Qg
YWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUs
IFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOworCitUSW50ZXJtVHlwZWQgJkFzVHlwZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9k
ZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Db25zdGFudE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZkZGQ4NjVjN2NjNmQ1OWQ2ZmViNjU1MDQxYzdiNDkzZWVhN2Q3MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCkBAIC0wLDAgKzEsMjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNl
IHNoCit7CisKK25hbWVzcGFjZSBjb25zdGFudF9uYW1lcworeworCitjb25zdGV4cHIgTmFtZSBr
Q292ZXJhZ2VNYXNrRW5hYmxlZCgiQU5HTEVfQ292ZXJhZ2VNYXNrRW5hYmxlZCIsIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOworY29uc3RleHByIE5hbWUga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZCgiQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKwor
fSAgLy8gbmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNU
QU5UX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NWU5YTY2ZDU4YjkxODc2M2Y2NWMwZTQ0NjhiYzIy
YTYwZGU2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorCisjZGVmaW5lIExPR0lDX0VSUk9SKCkg
QVNTRVJUKGZhbHNlKQorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5r
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYWRkNzcxNDIyMGI0
MTk4YTU3MzYzMzE1OWVjNTY4N2UwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaApAQCAtMCwwICsxLDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGlv
c3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKK3sKKyAgcHVibGljOgorICAg
IFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRs
ZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorCisgICAgYm9vbCBvYnNlcnZlKGNoYXIg
YykKKyAgICB7CisgICAgICAgIGlmIChuZWVkbGVbY3VyclBvc10gPT0gYykKKyAgICAgICAgewor
ICAgICAgICAgICAgKytjdXJyUG9zOworICAgICAgICAgICAgaWYgKGN1cnJQb3MgPT0gbmVlZGxl
LnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldE5lZWRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG5lZWRsZTsgfQorCisgICAgdm9pZCByZXNldCgpIHsgY3VyclBv
cyA9IDA7IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5lZWRsZTsKKyAgICBzaXpl
X3QgY3VyclBvcyA9IDA7Cit9OworCitjbGFzcyBEZWJ1Z1NpbmsgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKK3sKKyAgcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBFc2NhcGVkU2luazsKKyAgICBjbGFz
cyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgIHsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlYnVnU2luazsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRXNjYXBlZFNpbmso
RGVidWdTaW5rICZvd25lcikgOiBtT3duZXIob3duZXIpLCBtQmVnaW4ob3duZXIuc2l6ZSgpKSB7
fQorCisgICAgICBwdWJsaWM6CisgICAgICAgIEVzY2FwZWRTaW5rKEVzY2FwZWRTaW5rICYmb3Ro
ZXIpIDogbU93bmVyKG90aGVyLm1Pd25lciksIG1CZWdpbihvdGhlci5tQmVnaW4pIHt9CisKKyAg
ICAgICAgfkVzY2FwZWRTaW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
cCA9IG1Pd25lci5jX3N0cigpOworICAgICAgICAgICAgY29uc3QgaW50IGVuZCA9IG1Pd25lci5z
aXplKCk7CisgICAgICAgICAgICBtT3duZXIub25Xcml0ZShwICsgbUJlZ2luLCBwICsgZW5kKTsK
KyAgICAgICAgfQorCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJmdldCgpIHsgcmV0dXJuIG1Pd25l
ci5tUGFyZW50OyB9CisKKyAgICAgICAgb3BlcmF0b3IgVEluZm9TaW5rQmFzZSAmKCkgeyByZXR1
cm4gZ2V0KCk7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdTaW5rICZtT3duZXI7
CisgICAgICAgIGNvbnN0IGludCBtQmVnaW47CisgICAgfTsKKworICBwdWJsaWM6CisgICAgRGVi
dWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisgICAg
ICAgIDogbVBhcmVudChwYXJlbnQpLCBtQWxzb0xvZ1RvU3Rkb3V0KGFsc29Mb2dUb1N0ZG91dCkK
KyAgICB7fQorCisgICAgdm9pZCB3YXRjaChzdGQ6OnN0cmluZyBjb25zdCAmbmVlZGxlKQorICAg
IHsKKyAgICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bU9ic2VydmVycy5lbXBsYWNlX2JhY2sobmVlZGxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgZXJhc2UoKQorICAgIHsKKyAgICAgICAgbVBhcmVudC5lcmFzZSgpOworICAgICAgICBm
b3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG9ic2VydmVyLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQg
c2l6ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0
cmluZyAmc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5zdHIoKTsgfQorCisgICAgY29uc3Qg
Y2hhciAqY19zdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LmNfc3RyKCk7IH0KKworICAgIEVz
Y2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQg
JnZhbHVlKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbVBhcmVudC5zaXpl
KCk7CisgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisgICAgICAgIGNvbnN0IHNpemVfdCBlbmQg
PSBtUGFyZW50LnNpemUoKTsKKworICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0
cigpOworICAgICAgICBvbldyaXRlKHAgKyBiZWdpbiwgcCArIGVuZCk7CisKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgb25Xcml0ZShjb25zdCBj
aGFyICpiZWdpbiwgY2hhciBjb25zdCAqZW5kKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAq
cCA9IGJlZ2luOworICAgICAgICB3aGlsZSAocCAhPSBlbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN0ZDo6Y291dCA8PCAqcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJp
bmdPYnNlcnZlciAmb2JzZXJ2ZXIgOiBtT2JzZXJ2ZXJzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvYnNlcnZlci5vYnNlcnZlKCpwKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
bmVlZGxlID0gb2JzZXJ2ZXIuZ2V0TmVlZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lk
KW5lZWRsZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91
ciBicmVha3BvaW50IGhlcmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICsrcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0
KQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgfQor
ICAgIH0KKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1QYXJlbnQ7CisgICAgc3Rk
Ojp2ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisgICAgYm9vbCBtQWxzb0xvZ1Rv
U3Rkb3V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmRmNDMwZTFhYjQxZTFiMTdlMjRk
N2Q2MjFiZjU1YzEyZWI5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2Nv
dmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1
bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIgorCit1c2luZyBuYW1l
c3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitj
bGFzcyBEaXNjb3ZlcmVyIDogcHVibGljIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXIKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZh
cmlhYmxlICYpPiAmbVZhcnM7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5j
VG9EZWY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtTm9uRGVw
RnVuY3Rpb25zOworCisgIHB1YmxpYzoKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1
bmN0aW9uICo+IG1EZXBGdW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIERpc2NvdmVyZXIoY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMsCisgICAgICAg
ICAgICAgICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmZnVuY1RvRGVmKQorICAgICAgICA6
IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUpLCBt
VmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisgICAge30KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAg
ICAgaWYgKCFtVmFycyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oc3ltYm9sTm9kZSk7CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIG1E
ZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQcmVWaXNpdCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAg
ICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rp
b25zLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBpdCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQg
PT0gbUZ1bmNUb0RlZi5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24g
YXNzdW1lcyAoZGlyZWN0IGFuZCBtdXR1YWwpIHJlY3Vyc2lvbiBpcyBwcm9oaWJpdGVkLgorICAg
ICAgICAgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlID0gKml0
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVw
RnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVCht
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uKGFnZ3JlZ2F0ZU5vZGUpOworICAgICAgICAgICAgQVNTRVJUKG93bmVy
KTsKKyAgICAgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQ
b3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQo
ZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtTm9u
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZXBG
dW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtTm9uRGVwRnVuY3Rpb25zLmluc2VydChmdW5jKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6
OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IHNoOjpEaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucygKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgY29uc3Qgc3RkOjpmdW5jdGlv
bjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCit7CisgICAgY29uc3QgRnVuY3Rpb25U
b0RlZmluaXRpb24gZnVuY1RvRGVmID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhyb290KTsK
KyAgICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKyAgICByb290LnRy
YXZlcnNlKCZkaXNjb3ZlcmVyKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKGRpc2NvdmVyZXIubURl
cEZ1bmN0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVkMWJmMjdjOTBjYWIwNmMzYzE4YWUxNDBhZGM4Mzc1ZTJkZGMxNWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
aApAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVS
REVQRU5ERU5URlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorQU5HTEVf
Tk9fRElTQ0FSRCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IERpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBz
dGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjJkMzkwZTc5NWRiMWI3ZjMzY2JkODQ1YWY3NjEyNTdlN2UwZTBmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApA
QCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW5WaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9z
dFZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKyAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIocHJlVmlzaXRfLCBpblZpc2l0XywgcG9zdFZpc2l0Xywgc3ltYm9s
VGFibGUpCit7fQorCitjb25zdCBURnVuY3Rpb24gKkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKworICAgIHVu
c2lnbmVkIGhlaWdodCA9IDA7CisgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdl
dEFuY2VzdG9yTm9kZShoZWlnaHQpKQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gYW5jZXN0b3ItPmdldEFzRnVuY3Rpb25EZWZpbml0
aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICArK2hlaWdodDsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2lu
Z0Z1bmN0aW9uVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2IyYWEwMDE0YTAwNDkzODZlMmE3ZjZkNzkz
MmQ5YjI3M2M0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNs
b3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJF
TkNMT1NJTkdGVU5DVElPTlRSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2
ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQg
c3VwcG9ydHMgZGlzY292ZXJ5IG9mIHRoZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyB0by4KK2Ns
YXNzIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcihib29sIHByZVZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpblZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwb3N0VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cik7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyBpbnNpZGUuCisgICAgLy8gUmV0dXJucyBudWxsIGlm
IHRoZSBub2RlIGRvZXMgbm90IGJlbG9uZyBpbnNpZGUgYSBmdW5jdGlvbi4KKyAgICBjb25zdCBU
RnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJTkdGVU5DVElPTlRSQVZFUlNF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRW1pdE1ldGFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJkZDNmY2QzN2E3YWMzZDBlNjEzNjAwYjVl
OWNhODA4ZTMwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5j
cHAKQEAgLTAsMCArMSwyNDU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2lu
Y2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3Ry
aW5nQnVpbGRlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FT
U0VSVFMpCit1c2luZyBTaW5rID0gRGVidWdTaW5rOworI2Vsc2UKK3VzaW5nIFNpbmsgPSBUSW5m
b1NpbmtCYXNlOworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFj
ZQoreworCitzdHJ1Y3QgVmFyRGVjbAoreworICAgIGV4cGxpY2l0IFZhckRlY2woY29uc3QgVFZh
cmlhYmxlICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpLCBtSXNGaWVsZChmYWxzZSkge30KKyAgICBl
eHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1J
c0ZpZWxkKHRydWUpIHt9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYXJpYWJsZSgpKTsKKyAgICAg
ICAgcmV0dXJuICptVmFyaWFibGU7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGNvbnN0IFRG
aWVsZCAmZmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmllbGQoKSk7Cisg
ICAgICAgIHJldHVybiAqbUZpZWxkOworICAgIH0KKworICAgIEFOR0xFX0lOTElORSBib29sIGlz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhbUlzRmllbGQ7IH0KKworICAgIEFOR0xFX0lOTElO
RSBib29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBtSXNGaWVsZDsgfQorCisgICAgY29uc3Qg
VFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50eXBlKCkg
OiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorCisgICAgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBmaWVsZCgpLnN5bWJvbFR5
cGUoKSA6IHZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpOworICAgIH0KKworICBwcml2YXRlOgorICAg
IHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKm1WYXJpYWJsZTsKKyAgICAg
ICAgY29uc3QgVEZpZWxkICptRmllbGQ7CisgICAgfTsKKyAgICBib29sIG1Jc0ZpZWxkOworfTsK
KworY2xhc3MgR2VuTWV0YWxUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorewor
ICBwdWJsaWM6CisgICAgfkdlbk1ldGFsVHJhdmVyc2VyKCkgb3ZlcnJpZGU7CisKKyAgICBHZW5N
ZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgIFNpbmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVj
dHMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudik7CisKKyAgICB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFRlcm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlz
aXRJZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uUHJvdG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZTsKKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7
CisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikg
b3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJy
aWRlOworICAgIGJvb2wgdmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICopOworICAgIGJvb2wgdmlz
aXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdERvV2hpbGVMb29wKFRJ
bnRlcm1Mb29wICopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
Kikgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICB1c2luZyBGdW5jVG9OYW1lID0gc3RkOjpt
YXA8SW1tdXRhYmxlU3RyaW5nLCBOYW1lPjsKKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1
bmNUb05hbWUoKTsKKworICAgIHN0cnVjdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZwor
ICAgIHsKKyAgICAgICAgYm9vbCBpc1BhcmFtZXRlciAgICAgICAgICAgICAgICA9IGZhbHNlOwor
ICAgICAgICBib29sIGlzTWFpblBhcmFtZXRlciAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAg
IGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBp
c1BhY2tlZCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGRpc2FibGVT
dHJ1Y3RTcGVjaWZpZXIgICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNQb2ludGVyICAgPSBudWxscHRyOworICAgICAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVm
ZXJlbmNlID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgc3RydWN0IEVtaXRUeXBlQ29uZmlnCisg
ICAgeworICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29u
ZmlnID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKyAg
ICB2b2lkIGVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpOworICAg
IHZvaWQgZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAgdm9p
ZCBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKTsKKworICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVj
dCk7CisgICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisgICAgdm9p
ZCBlbWl0TmFtZU9mKGNvbnN0IFZhckRlY2wgJm9iamVjdCk7CisKKyAgICB2b2lkIGVtaXRCYXJl
VHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisgICAgdm9pZCBlbWl0VHlwZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVD
b25maWcgJmV0Q29uZmlnKTsKKyAgICB2b2lkIGVtaXRQb3N0UXVhbGlmaWVyKGNvbnN0IEVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFF1YWxpZmllciBxdWFsaWZpZXIpOworCisgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlv
bkluZGljZXMKKyAgICB7CisgICAgICAgIHNpemVfdCBhdHRyaWJ1dGUgPSAwOworICAgICAgICBz
aXplX3QgY29sb3IgICAgID0gMDsKKyAgICB9OworCisgICAgdm9pZCBlbWl0RmllbGREZWNsYXJh
dGlvbihjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSAmcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmllbGRBbm5vdGF0aW9uSW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKyAgICB2b2lkIGVtaXRTdHJ1Y3REZWNsYXJh
dGlvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCBlbWl0T3JkaW5hcnlWYXJpYWJsZURl
Y2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRD
b25maWcpOworICAgIHZvaWQgZW1pdFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAm
ZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpOworCisgICAgdm9pZCBlbWl0T3BlbkJyYWNl
KCk7CisgICAgdm9pZCBlbWl0Q2xvc2VCcmFjZSgpOworCisgICAgdm9pZCBncm91cGVkVHJhdmVy
c2UoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVs
ZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICZpbmRleCk7CisgICAgY29u
c3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJtVHlwZWQgJmZpZWxkc05vZGUs
IFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpl
bWl0Q29uc3RhbnRVbmlvbkFycmF5KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVu
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBzaXplKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29uc3Rh
bnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5p
b24pOworCisgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50VW5pb24g
KmNvbnN0IGNvbnN0VW5pb24pOworCisgIHByaXZhdGU6CisgICAgU2luayAmbU91dDsKKyAgICBj
b25zdCBUQ29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJm1Q
aXBlbGluZVN0cnVjdHM7CisgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAg
U3ltYm9sRW52ICZtU3ltYm9sRW52OworICAgIElkR2VuICZtSWRHZW47CisgICAgaW50IG1JbmRl
bnRMZXZlbCAgICAgICAgPSAtMTsKKyAgICBpbnQgbUxhc3RJbmRlbnRhdGlvblBvcyA9IC0xOwor
ICAgIGJvb2wgbVBhcmVudElzU3dpdGNoICAgID0gZmFsc2U7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1ib2xzOworICAgIGNvbnN0IEZ1
bmNUb05hbWUgbUZ1bmNUb05hbWUgICA9IEJ1aWxkRnVuY1RvTmFtZSgpOworICAgIHNpemVfdCBt
TWFpblRleHR1cmVJbmRleCAgICAgICA9IDA7CisgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4
ICAgICAgID0gMDsKKyAgICBzaXplX3QgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPSByeDo6bXRs
OjprRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4OworfTsKKworfSAgLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKK3sKKyAg
ICBBU1NFUlQobUluZGVudExldmVsID09IC0xKTsKKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRj
aCk7Cit9CisKK0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29t
cGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp
bmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVT
dHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICA6IFRJbnRlcm1UcmF2
ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgIG1PdXQob3V0KSwKKyAgICAgIG1Db21w
aWxlcihjb21waWxlciksCisgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisgICAgICBtSW52YXJpYW50cyhpbnZhcmlhbnRzKSwKKyAgICAgIG1TeW1ib2xFbnYoc3ltYm9s
RW52KSwKKyAgICAgIG1JZEdlbihpZEdlbikKK3t9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXRJbmRlbnRhdGlvbigpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAwKTsKKwor
ICAgIGlmIChtTGFzdEluZGVudGF0aW9uUG9zID09IG1PdXQuc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorICAgIH0KKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisgICAgeworICAgICAgICBtT3V0
IDw8ICIgICI7CisgICAgfQorCisgICAgbUxhc3RJbmRlbnRhdGlvblBvcyA9IG1PdXQuc2l6ZSgp
OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqR2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1
bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICphcmdUeXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqYXJnVHlwZTEgPSBudWxscHRyKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgICAgICByZXR1cm4gIiwiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICI9
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgICAgICBy
ZXR1cm4gIj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11
bEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIlPSI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBy
ZXR1cm4gIjw8PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRp
bmcuCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAg
ICAgICAgICAgcmV0dXJuICI+Pj0iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1l
dGljIHNoaWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJ8PSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICByZXR1cm4gIisi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgcmV0dXJuICIt
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgICAgIHJldHVybiAi
KiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICByZXR1cm4g
Ii8iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgICAgIHJldHVy
biAiJSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAg
ICAgICByZXR1cm4gIjw8IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBz
aGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisgICAg
ICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRp
YyBzaGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmQ6CisgICAg
ICAgICAgICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhv
cjoKKyAgICAgICAgICAgIHJldHVybiAiXiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlT3I6CisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAi
PD0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAg
ICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5D
b21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJu
ICI8PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsQ29tcG9u
ZW50V2lzZToKKyAgICAgICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgIHJldHVy
biAifHwiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiIT0vKnhvciovIjsgIC8vIFhYWDogVGhpcyBtaWdodCBuZWVkIHRvIGJlIGhh
bmRsZWQgZGlmZmVyZW50bHkgZm9yIHNvbWUgb2J0dXNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB1c2UgY2FzZS4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6CisgICAgICAgICAgICByZXR1cm4gIiYmIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BM
b2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICIhIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgICAgICByZXR1
cm4gIn4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3Jl
bWVudDoKKyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlSW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIi0tIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICByZXR1cm4g
Iio9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4g
Ij09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToK
KyAgICAgICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BF
cXVhbDoKKyAgICAgICAgICAgIGlmICgoYXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEt
PmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAm
JiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5p
c0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuICI9PSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFs
OgorICAgICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNW
ZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdU
eXBlMS0+aXNBcnJheSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkFOR0xFX25vdEVxdWFsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFy
Z1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3RFcXVhbFN0cnVjdCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wS2lsbDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAi
a2lsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKyAgICAg
ICAgICAgIHJldHVybiAiYnJlYWsiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGlu
dWU6CisgICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUmFkaWFuczoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfcmFkaWFucyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVzOgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9kZWdyZWVzIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX2F0YW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9tb2QiOyAgLy8gZGlmZmVycyBmcm9tIG1ldGFs
Ojptb2QKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZnJhY3Q6CisgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFu
Y2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2Rpc3RhbmNlIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbGVuZ3RoIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERvdDoKKyAgICAgICAgICAgIHJldHVybiAiQU5H
TEVfZG90IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiQU5HTEVfbm9ybWFsaXplIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZhY2Vmb3J3YXJkOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9mYWNlZm9yd2FyZCI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9yZWZsZWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBv
bmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBs
eSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAg
ICByZXR1cm4gIkFOR0xFX291dGVyUHJvZHVjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTaWduOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWduIjsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWJzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbnk6CisgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjphbnkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6c2luIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BUYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp0YW4iOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmFjb3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnNpbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29z
aDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wVGFuaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbmgiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjph
c2luaCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zaDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmFjb3NoIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgor
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YXRhbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRm1hOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zm1hIjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFBvdzoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjpleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cDIiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZzI6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2cyIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzcXJ0IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6Zmxvb3IiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisgICAgICAgICAg
ICByZXR1cm4gIm1ldGFsOjp0cnVuYyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWls
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2VpbCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGcmFjdDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyYWN0IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1pbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1p
biI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjptYXgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
ICAgICByZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BS
b3VuZEV2ZW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyaW50IjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2xhbXAi
OyAgLy8gVE9ETyBmYXN0IHZzIHByZWNpc2UgbmFtZXNwYWNlCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNaXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnN0ZXAi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnNtb290aHN0ZXAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
ZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSXNuYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc25hbiI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmlzaW5mIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExkZXhwOgorICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6bGRleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRnJleHA6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpmcmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbnZlcnNlc3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJzcXJ0IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OmRmZHgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZk
eToKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRmZHkiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRndpZHRoOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnRyYW5zcG9zZSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFu
dDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRldGVybWluYW50IjsKKworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfaW52
ZXJzZSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BV
aW50Qml0c1RvRmxvYXQ6CisgICAgICAgIHsKKyNkZWZpbmUgUkVUVVJOX0FTX1RZUEUocG9zdCkg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHJlc3VsdFR5cGUuZ2V0QmFzaWNUeXBl
KCkpICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQiIHBvc3QgIj4iOyAgIFwKKyAg
ICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAorICAgICAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImFzX3R5cGU8ZmxvYXQiIHBvc3QgIj4iOyBcCisgICAgICAgICAgICBkZWZhdWx0OiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRPRE8oKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRv
cl9UT0RPIjsgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHdoaWxlIChmYWxzZSkKKworICAgICAgICAgICAgaWYgKHJlc3Vs
dFR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
QVNfVFlQRSgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRU
eXBlLmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQ
RSgiMiIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fQVNfVFlQRSgiMyIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiNCIpOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9E
TyI7CisgICAgICAgICAgICB9CisKKyN1bmRlZiBSRVRVUk5fQVNfVFlQRQorICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtMngxNiI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFj
a19mbG9hdF90b19zbm9ybTJ4MTYiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNr
VW5vcm00eDg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3Jt
NHg4IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTR4ODoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19z
bm9ybTJ4MTZfdG9fZmxvYXQiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tV
bm9ybTR4ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja191bm9ybTR4OF90b19m
bG9hdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4ODoKKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTR4OF90b19mbG9hdCI7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAi
QU5HTEVfcGFja19oYWxmXzJ4MTYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNr
SGFsZjJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkUmV2ZXJzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEZpbmRNU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVW11bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11
bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyQXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1v
cnlCYXJyaWVySW1hZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
U2hhcmVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXRvbWljT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNY
b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2
ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFVucGFja0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0
aDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29uc3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1
bmN0aW9uSW5BU1Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdG
dW5jdGlvbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxCdWlsdEluRnVuY3Rpb246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisjaWYgMAorc3RhdGljIGludCBHZXRPcGVyYXRv
clByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiAxNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlT3JBc3NpZ246IHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxBbmQ6IHsKKyAgICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3I6IHsKKyAgICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworICAgICAgICAgICAg
cmV0dXJuIDExOworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDEwOwor
ICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdy
ZWF0ZXJUaGFuRXF1YWw6IHsKKyAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICB9IGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisgICAgICAgICAgICByZXR1cm4gNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOiB7CisgICAgICAgICAgICByZXR1cm4gNjsKKyAg
ICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1v
ZDogeworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVu
dDogeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQb3N0RGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfSBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK25hbWVzcGFjZQoreworCitl
bnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKK3sKKyAgICBOb25lLAorICAgIExlZnQsCisgICAgUmln
aHQsCit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworc3RhdGljIEFzc29jaWF0aXZp
dHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BTdWI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
R3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lh
dGl2aXR5OjpMZWZ0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0
TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0
aXZpdHk6OlJpZ2h0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZURlY3JlbWVudDogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5v
bmU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VE9ETygpOworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7CisgICAgICAg
IH0KKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgSXNTeW1ib2xpY09wZXJhdG9yKFRP
cGVyYXRvciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
cmVzdWx0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFy
Z1R5cGUxID0gbnVsbHB0cikKK3sKKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gIXN0ZDo6aXNhbG51bShHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgYXJn
VHlwZTAsIGFyZ1R5cGUxKVswXSk7Cit9CisKK3N0YXRpYyBUSW50ZXJtQmluYXJ5ICpBc1NwZWNp
ZmljQmluYXJ5Tm9kZShUSW50ZXJtTm9kZSAmbm9kZSwgVE9wZXJhdG9yIG9wKQoreworICAgIFRJ
bnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlm
IChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkg
PT0gb3AgPyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3N0YXRpYyBib29sIFBhcmVudGhlc2l6ZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAg
ICBpZiAobm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFz
U3dpenpsZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisg
ICAgeworICAgICAgICAvLyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5
IHJ1bGVzIGluc3RlYWQgb2YgdGhpcyBhZC1ob2MgaW1wbC4KKyAgICAgICAgY29uc3QgVFR5cGUg
JnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUgICAgPSB1bmFyeU5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpOworICAgICAg
ICByZXR1cm4gSXNTeW1ib2xpY09wZXJhdG9yKHVuYXJ5Tm9kZS0+Z2V0T3AoKSwgcmVzdWx0VHlw
ZSwgJmFyZ1R5cGUpOworICAgIH0KKworICAgIGlmIChUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2Rl
ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBh
IHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhv
YyBpbXBsLgorICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLT5nZXRPcCgp
OworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFyeU5vZGUt
PmdldExlZnQoKSk7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQXNTcGVjaWZpY0JpbmFyeU5vZGUoKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCksIFRP
cGVyYXRvcjo6RU9wQ29tbWEpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+
Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmlu
YXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJpZ2h0VHlwZSAgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIElzU3ltYm9saWNPcGVyYXRvcihiaW5hcnlOb2RlLT5nZXRPcCgp
LCByZXN1bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBjb25zdCBi
b29sIGVtaXRQYXJlbnMgPSBQYXJlbnRoZXNpemUobm9kZSk7CisKKyAgICBpZiAoZW1pdFBhcmVu
cykKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIigiOworICAgIH0KKworICAgIG5vZGUudHJhdmVy
c2UodGhpcyk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAgICB7CisgICAgICAgIG1PdXQgPDwg
IikiOworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2ws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUUXVhbGlm
aWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICB7CisgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxRnJhZ0Nvb3JkOgorICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9zaXRpb25dXSI7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50U2l6ZToK
KyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAg
aWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAg
ICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfY29vcmRdXSI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250
RmFjaW5nOgorICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZnJvbnRfZmFjaW5nXV0iOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNJbnZhcmlhbnQgPQor
ICAgICAgICBkZWNsLmlzRmllbGQoKSA/IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wuZmllbGQo
KSkgOiBtSW52YXJpYW50cy5jb250YWlucyhkZWNsLnZhcmlhYmxlKCkpOworCisgICAgaWYgKGlz
SW52YXJpYW50KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgRW1pdE5hbWUoU2luayAmb3V0LCBjb25zdCBOYW1lICZuYW1l
KQoreworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgRGVidWdTaW5rOjpF
c2NhcGVkU2luayBlc2NhcGVkT3V0KG91dC5lc2NhcGUoKSk7CisjZWxzZQorICAgIFRJbmZvU2lu
a0Jhc2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisjZW5kaWYKKyAgICBuYW1lLmVtaXQoZXNjYXBlZE91
dCk7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVEZpZWxk
ICZvYmplY3QpCit7CisgICAgRW1pdE5hbWUobU91dCwgTmFtZShvYmplY3QpKTsKK30KKwordm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBUU3ltYm9sICZvYmplY3QpCit7
CisgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworICAgIGlmIChp
dCA9PSBtUmVuYW1lZFN5bWJvbHMuZW5kKCkpCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0
LCBOYW1lKG9iamVjdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFbWl0TmFt
ZShtT3V0LCBpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXROYW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNG
aWVsZCgpKQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQoKSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yob2JqZWN0LnZhcmlhYmxlKCkp
OworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEJhcmVUeXBlTmFtZShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmlnKQoreworICAg
IGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IHN3aXRjaCAoYmFzaWNUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRW
b2lkOgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1P
dXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAg
ICAgICAgICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludGVyZmFjZUJsb2NrOgorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgIGVtaXROYW1lT2YoaW50ZXJm
YWNlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoYmFzaWNUeXBlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29u
ZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgR2V0VGV4dHVyZVR5cGVOYW1lKGJhc2ljVHlw
ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3lt
Ym9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dE5hbWVPZihlbnYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVt
aXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcp
Cit7CisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlmIChldmRDb25m
aWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpl
dmRDb25maWcuaXNQb2ludGVyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGV2ZENvbmZpZy5pc1JlZmVyZW5jZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiQU5HTEVfdGVuc29yPCI7CisgICAgfQor
CisgICAgaWYgKHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAg
ICAgICBtT3V0IDw8ICJtZXRhbDo6IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisgICAgeworICAgICAgICBtT3V0
IDw8ICJwYWNrZWRfIjsKKyAgICB9CisKKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIGV0Q29u
ZmlnKTsKKworICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBtT3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCB0eXBlLmdldENvbHMoKSA8PCAieCIgPDwgdHlw
ZS5nZXRSb3dzKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbU91dCA8PCAiLCAiIDw8IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgbU91
dCA8PCAiPiI7CisgICAgfQorCisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAg
ICAgIGlmIChldmRDb25maWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0
IDw8ICIgKiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJl
bmNlKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgJiI7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNv
bnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9u
SW5kaWNlcykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gKmZpZWxkLnR5cGUoKTsK
KyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBldmRDb25maWcu
ZW1pdFBvc3RRdWFsaWZpZXIgICAgICA9IHRydWU7CisgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1
Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGV2ZENvbmZpZy5pc1BhY2tlZCAgICAgICAgICAgICAg
ID0gbVN5bWJvbEVudi5pc1BhY2tlZChmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUG9pbnRlciAg
ICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihmaWVsZCk7CisgICAgZXZkQ29uZmln
LmlzUmVmZXJlbmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsK
KyAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKGZpZWxkKSwgZXZkQ29uZmlnKTsK
KworICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAg
c3dpdGNoIChxdWFsKQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46
CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLmV4dGVybmFsID09
ICZwYXJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0RhdGE6CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5l
eHRlcm5hbCA9PSAmcGFyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgo
dHlwZS5pc1ZlY3RvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICBiYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgIHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOgorICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGdlbmVyYWwgYW5kIG5lZWRzIGEgcmVpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0
IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisgICAgICAg
ICAgICAgICAgICAgIC8vIFNlZSA0LjMuOC4yCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5HTC9zcGVjcy9lcy8zLjAvR0xTTF9FU19T
cGVjaWZpY2F0aW9uXzMuMDAucGRmCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwg
IiBbW2NvbG9yKCIgPDwgaW5kZXggPDwgIildXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFGcmFnRGVwdGg6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1tkZXB0aChhbnkpXV0iOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0
dHJpYnV0ZUluZGV4TWFwKAorICAgIGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgY29u
c3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJnN0cnVjdHVyZSkKK3sKKyAgICBBU1NFUlQo
c3RydWN0dXJlLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJz
ICAgICA9IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qgc2hhZGVy
VmFyU2l6ZSA9IHNoYWRlclZhcnMuc2l6ZSgpOworICAgIHNpemVfdCBzaGFkZXJWYXJJbmRleCAg
ICAgID0gMDsKKworICAgIGNvbnN0IGF1dG8gJmV4dGVybmFsRmllbGRzID0gc3RydWN0dXJlLmV4
dGVybmFsLT5maWVsZHMoKTsKKyAgICBjb25zdCBzaXplX3QgZXh0ZXJuYWxTaXplICA9IGV4dGVy
bmFsRmllbGRzLnNpemUoKTsKKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisK
KyAgICBjb25zdCBhdXRvICZpbnRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5pbnRlcm5hbC0+Zmll
bGRzKCk7CisgICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5z
aXplKCk7CisgICAgc2l6ZV90IGludGVybmFsSW5kZXggICAgICAgPSAwOworCisgICAgLy8gSW50
ZXJuYWwgZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGlt
ZXMgc3BsaXQuCisgICAgQVNTRVJUKGV4dGVybmFsU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworCisg
ICAgLy8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorICAg
IEFTU0VSVChzaGFkZXJWYXJTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisgICAgc2l6ZV90IGF0
dHJpYnV0ZUluZGV4ID0gMDsKKworICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxT
aXplKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZpbnRlcm5hbEZpZWxkID0gKmludGVy
bmFsRmllbGRzW2ludGVybmFsSW5kZXhdOworICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFt
ZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworICAgICAgICBjb25zdCBUVHlwZSAmaW50ZXJu
YWxUeXBlICAgPSAqaW50ZXJuYWxGaWVsZC50eXBlKCk7CisgICAgICAgIHdoaWxlIChpbnRlcm5h
bE5hbWUucmF3TmFtZSgpICE9IHNoYWRlclZhcnNbc2hhZGVyVmFySW5kZXhdLm5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluYWN0aXZlIGZp
ZWxkLgorCisgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworICAgICAgICAgICAgQVNTRVJU
KHNoYWRlclZhckluZGV4IDwgc2hhZGVyVmFyU2l6ZSk7CisKKyAgICAgICAgICAgICsrYXR0cmli
dXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRl
ciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVf
dCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29scygp
IDogMTsKKworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZleHRlcm5hbEZpZWxkID0gKmV4dGVybmFs
RmllbGRzW2V4dGVybmFsSW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmFtZSBleHRlcm5hbE5h
bWUgICAgID0gTmFtZShleHRlcm5hbEZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVCghZXh0ZXJu
YWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworCisgICAgICAgICAgICBleHRlcm5hbE5hbWVU
b0F0dHJpYnV0ZUluZGV4W2V4dGVybmFsTmFtZV0gPSBhdHRyaWJ1dGVJbmRleDsKKworICAgICAg
ICAgICAgKytleHRlcm5hbEluZGV4OworICAgICAgICAgICAgKythdHRyaWJ1dGVJbmRleDsKKyAg
ICAgICAgfQorCisgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICsraW50ZXJuYWxJ
bmRleDsKKyAgICB9CisKKyAgICBBU1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6
ZSk7CisgICAgQVNTRVJUKGV4dGVybmFsSW5kZXggPD0gZXh0ZXJuYWxTaXplKTsgIC8vIGxlc3Mg
dGhhbiBpZiBwYWRkaW5nIHdhcyBpbnRyb2R1Y2VkCisgICAgQVNTRVJUKGludGVybmFsSW5kZXgg
PT0gaW50ZXJuYWxTaXplKTsKKworICAgIHJldHVybiBleHRlcm5hbE5hbWVUb0F0dHJpYnV0ZUlu
ZGV4OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QXR0cmlidXRlRGVjbGFyYXRp
b24oY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNl
cykKK3sKKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisgICAg
ZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworICAgIG1PdXQgPDwgIiBb
W2F0dHJpYnV0ZSgiIDw8IGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSsrIDw8ICIpXV0iOwor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3Qg
VFR5cGUgJnR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2lj
VHlwZTo6RWJ0U3RydWN0KTsKKyAgICBBU1NFUlQodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgIG1PdXQgPDwgInN0cnVjdCAiOworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwge30p
OworCisgICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRPcGVuQnJhY2UoKTsKKworICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAgIHN0ZDo6bWFw
PE5hbWUsIHNpemVfdD4gZmllbGRUb0F0dHJpYnV0ZUluZGV4OworICAgIGNvbnN0IGJvb2wgaGFz
QXR0cmlidXRlSW5kaWNlcyAgICAgICAgICAgPSBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluLmV4
dGVybmFsID09ICZzdHJ1Y3R1cmU7CisgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmli
dXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisKKyAgICBp
ZiAoaGFzQXR0cmlidXRlSW5kaWNlcykKKyAgICB7CisgICAgICAgIGZpZWxkVG9BdHRyaWJ1dGVJ
bmRleCA9CisgICAgICAgICAgICBCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXAobUNvbXBp
bGVyLCBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluKTsKKyAgICB9CisKKyAgICBGaWVsZEFubm90
YXRpb25JbmRpY2VzIGFubm90YXRpb25JbmRpY2VzOworCisgICAgZm9yIChjb25zdCBURmllbGQg
KmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgZW1pdEluZGVudGF0
aW9uKCk7CisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgq
ZmllbGQpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZW5k
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xU
eXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGZpZWxkLT5uYW1lKCkuYmVnaW5zV2l0aCgiXyIpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYW5nbGU6OkVuZHNXaXRoKGZpZWxkLT5uYW1lKCkuZGF0YSgpLCAiX3BhZCIpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3Rh
dGlvbkluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+c3ltYm9sVHlwZSgpICE9IFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpZWxkLT5u
YW1lKCkuYmVnaW5zV2l0aCgiXyIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6
RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAgICAgICAgICAg
IGlmICghcmVjbGFpbVVudXNlZEF0dHJpYnV0ZUluZGljZXMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0QXR0cmlidXRlRGVj
bGFyYXRpb24oKmZpZWxkLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RmllbGREZWNs
YXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworICAgICAgICB9
CisgICAgICAgIG1PdXQgPDwgIjtcbiI7CisgICAgfQorCisgICAgaWYgKCFtUGlwZWxpbmVTdHJ1
Y3RzLm1hdGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKyAgICB7CisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcudHJlYXRT
YW1wbGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisgICAgICAgIExheW91dCBsYXlvdXQgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlvdXRDb25maWcpOwor
ICAgICAgICBzaXplX3QgcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxheW91dC5z
aXplT2YgJSAxNjsKKyAgICAgICAgaWYgKHBhZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKyAgICAg
ICAgICAgIEVtaXROYW1lKG1PdXQsIG1JZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKSk7CisgICAg
ICAgICAgICBtT3V0IDw8ICJbIiA8PCBwYWQgPDwgIl07XG4iOworICAgICAgICB9CisgICAgfQor
CisgICAgZW1pdENsb3NlQnJhY2UoKTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKyAgICBjb25zdCBWYXJEZWNsICZkZWNsLAor
ICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpCit7Cisg
ICAgRW1pdFR5cGVDb25maWcgZXRDb25maWc7CisgICAgZXRDb25maWcuZXZkQ29uZmlnID0gJmV2
ZENvbmZpZzsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC50eXBlKCk7CisgICAgZW1p
dFR5cGUodHlwZSwgZXRDb25maWcpOworCisgICAgaWYgKGRlY2wuc3ltYm9sVHlwZSgpICE9IFN5
bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIGVt
aXROYW1lT2YoZGVjbCk7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
VmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZykKK3sKKyAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5
cGUgPSBkZWNsLnN5bWJvbFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAg
PSBkZWNsLnR5cGUoKTsKKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSAgPSB0eXBlLmdl
dEJhc2ljVHlwZSgpOworCisgICAgc3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidFN0cnVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5
cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSAmJiAhZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZp
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQ
YXJhbWV0ZXIpOworICAgICAgICAgICAgICAgIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbih0eXBlKTsK
KyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAg
ICAgICAgICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBlbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wsIGV2ZENvbmZpZyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6
RW1wdHkgfHwgZXZkQ29uZmlnLmlzUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVtaXRPcmRpbmFy
eVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIpCisgICAgeworICAgICAgICBl
bWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSkKK3sKKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5v
ZGUtPnZhcmlhYmxlKCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgp
OworCisgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOwor
CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCkKKyAg
ICB7CisgICAgICAgIG1PdXQgPDwgIi8qIjsKKyAgICAgICAgZW1pdE5hbWVPZih2YXIpOworICAg
ICAgICBtT3V0IDw8ICIqLyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXRO
YW1lT2YodmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTaW5n
bGVDb25zdGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RVbmlvbikKK3sKKyAg
ICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAoY29uc3RV
bmlvbi0+Z2V0QkNvbnN0KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorICAgICAgICB7
CisgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpIDw8ICJmIjsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidElu
dDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3Qo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6
OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0
VUNvbnN0KCkgPDwgInUiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3Rh
bnRVbmlvbkFycmF5KAorICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9u
LAorICAgIGNvbnN0IHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpj
b25zdFVuaW9uSXRlcmF0ZWQgPSBjb25zdFVuaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKyAgICB7CisgICAgICAgIGVtaXRT
aW5nbGVDb25zdGFudChjb25zdFVuaW9uSXRlcmF0ZWQpOworCisgICAgICAgIGlmIChpICE9IHNp
emUgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKK30KKworY29uc3QgVENvbnN0
YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlw
ZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb25CZWdpbikKK3sKKyAg
ICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47
CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlICAgICAgICAgID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRW1pdFR5cGVDb25maWcg
Y29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07CisgICAgICAgIGVtaXRUeXBlKHR5cGUs
IGNvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgInsiOworICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgY29uc3RV
bmlvbkN1cnIgICAgICAgICA9IGVtaXRDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5p
b25DdXJyKTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtT3V0IDw8ICJ9IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9v
bCB3cml0ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVs
bHB0cn07CisgICAgICAgICAgICBlbWl0VHlwZSh0eXBlLCBjb25maWcpOworICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3RVbmlvbkN1cnIgPSBlbWl0Q29u
c3RhbnRVbmlvbkFycmF5KGNvbnN0VW5pb25DdXJyLCBzaXplKTsKKyAgICAgICAgaWYgKHdyaXRl
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25DdXJyOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0VmFsdWVO
b2RlKQoreworICAgIGVtaXRDb25zdGFudFVuaW9uKGNvbnN0VmFsdWVOb2RlLT5nZXRUeXBlKCks
IGNvbnN0VmFsdWVOb2RlLT5nZXRDb25zdGFudFZhbHVlKCkpOworfQorCitib29sIEdlbk1ldGFs
VHJhdmVyc2VyOjp2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICpzd2l6emxlTm9k
ZSkKK3sKKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkpOwor
ICAgIG1PdXQgPDwgIi4iOworCisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VS
VFMpCisgICAgICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91dChtT3V0LmVzY2Fw
ZSgpKTsKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5nZXQoKTsKKyNl
bHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dCAgICAgICAgPSBtT3V0OworI2VuZGlmCisg
ICAgICAgIHN3aXp6bGVOb2RlLT53cml0ZU9mZnNldHNBc1hZWlcoJm91dCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRMaXN0Q29sbGVj
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRDb25zdGFudFVuaW9uICZpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXguZ2V0VHlwZSgp
ID09IFRCYXNpY1R5cGU6OkVidEludCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExp
c3QgPSBmaWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygpOworICAgIGNvbnN0IGludCBpbmRleFZh
bCAgICAgICAgICA9IGluZGV4LmdldElDb25zdCgpOworICAgIGNvbnN0IFRGaWVsZCAmZmllbGQg
ICAgICAgICA9ICpmaWVsZExpc3RbaW5kZXhWYWxdOworCisgICAgcmV0dXJuIGZpZWxkOworfQor
Citjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZChjb25zdCBU
SW50ZXJtVHlwZWQgJmZpZWxkc05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmluZGV4Tm9kZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRzVHlwZSA9IGZpZWxkc05vZGUuZ2V0VHlwZSgpOworCisgICAgY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0
cnVjdCgpOworICAgIGlmIChmaWVsZExpc3RDb2xsZWN0aW9uID09IG51bGxwdHIpCisgICAgewor
ICAgICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgIH0KKyAgICBBU1NFUlQoZmllbGRMaXN0Q29sbGVjdGlvbik7CisKKyAgICBjb25z
dCBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5kZXhOb2RlXyA9IGluZGV4Tm9kZS5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKyAgICBBU1NFUlQoaW5kZXhOb2RlXyk7CisgICAgY29uc3QgVENvbnN0YW50
VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKworICAgIHJl
dHVybiBnZXREaXJlY3RGaWVsZCgqZmllbGRMaXN0Q29sbGVjdGlvbiwgaW5kZXgpOworfQorCiti
b29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
YmluYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Igb3AgICAgICA9IGJpbmFyeU5vZGUt
PmdldE9wKCk7CisgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS0+Z2V0
TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJp
Z2h0KCk7CisKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgeworICAgICAgICAgICAgZ3JvdXBlZFRyYXZl
cnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIi4iOworICAgICAgICAgICAgZW1p
dE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQg
PDwgIlsiOworICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgbU91dCA8PCAiXSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBi
aW5hcnlOb2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUg
ICA9IGxlZnROb2RlLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5
cGUgID0gcmlnaHROb2RlLmdldFR5cGUoKTsKKworICAgICAgICAgICAgaWYgKElzU3ltYm9saWNP
cGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAg
ICAgICAgICAgIGlmIChvcCAhPSBUT3BlcmF0b3I6OkVPcENvbW1hKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUs
ICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworICAgICAgICAgICAgICAgIGdyb3VwZWRU
cmF2ZXJzZShyaWdodE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3As
IHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIigiOworICAgICAgICAgICAg
ICAgIGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwg
IjsKKyAgICAgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIElzUG9zdGZpeChUT3BlcmF0b3Igb3Ap
Cit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3Bl
cmF0b3Igb3AgICAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3AoKTsKKyAgICBjb25zdCBUVHlwZSAmcmVz
dWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworCisgICAgVEludGVybVR5cGVkICZhcmcg
ICAgPSAqdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCk7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUg
PSBhcmcuZ2V0VHlwZSgpOworCisgICAgY29uc3QgY2hhciAqbmFtZSA9IEdldE9wZXJhdG9yU3Ry
aW5nKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisKKyAgICBpZiAoSXNTeW1ib2xpY09wZXJh
dG9yKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSkpCisgICAgeworICAgICAgICBjb25zdCBib29s
IHBvc3RmaXggPSBJc1Bvc3RmaXgob3ApOworICAgICAgICBpZiAoIXBvc3RmaXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBncm91cGVk
VHJhdmVyc2UoYXJnKTsKKyAgICAgICAgaWYgKHBvc3RmaXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtT3V0IDw8IG5hbWUgPDwgIigiOworICAgICAgICBhcmcudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG1PdXQgPDwgIikiOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAq
Y29uZGl0aW9uYWxOb2RlKQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2Rl
LT5nZXRDb25kaXRpb24oKSk7CisgICAgbU91dCA8PCAiID8gIjsKKyAgICBncm91cGVkVHJhdmVy
c2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisgICAgbU91dCA8PCAi
IDogIjsKKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHBy
ZXNzaW9uKCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqaWZUaGVuRWxzZU5vZGUpCit7
CisgICAgVEludGVybVR5cGVkICZjb25kTm9kZSA9ICppZlRoZW5FbHNlTm9kZS0+Z2V0Q29uZGl0
aW9uKCk7CisgICAgVEludGVybUJsb2NrICp0aGVuTm9kZSA9IGlmVGhlbkVsc2VOb2RlLT5nZXRU
cnVlQmxvY2soKTsKKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUt
PmdldEZhbHNlQmxvY2soKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQgPDwg
ImlmICgiOworICAgIGNvbmROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgIG1PdXQgPDwgIikiOwor
CisgICAgaWYgKHRoZW5Ob2RlKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiXG4iOworICAgICAg
ICB0aGVuTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1PdXQgPDwgIiB7fSI7CisgICAgfQorCisgICAgaWYgKGVsc2VOb2RlKQorICAgIHsKKyAg
ICAgICAgbU91dCA8PCAiXG4iOworICAgICAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAg
bU91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgZWxzZU5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBBbHdheXMgZW1pdCAiZWxzZSIgZXZlbiB3
aGVuIGVtcHR5IGJsb2NrIHRvIGF2b2lkIG5lc3RlZCBpZi1zdG10IGlzc3Vlcy4KKyAgICAgICAg
bU91dCA8PCAiIGVsc2Uge30iOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3
aXRjaE5vZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAic3dpdGNo
ICgiOworICAgIHN3aXRjaE5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91
dCA8PCAiKVxuIjsKKworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNoKTsKKyAgICBtUGFyZW50
SXNTd2l0Y2ggPSB0cnVlOworICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVBhcmVudElzU3dpdGNoID0gZmFsc2U7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVElu
dGVybUNhc2UgKmNhc2VOb2RlKQoreworICAgIGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgaWYg
KGNhc2VOb2RlLT5oYXNDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Y29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1PdXQgPDwgImNh
c2UgIjsKKyAgICAgICAgY29uZEV4cHItPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtT3V0IDw8
ICI6IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiZGVmYXVsdDpc
biI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQoreworICAg
IGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGVtaXRGdW5jdGlvblJl
dHVybihmdW5jKTsKKworICAgIG1PdXQgPDwgIiAiOworICAgIGVtaXROYW1lT2YoZnVuYyk7Cisg
ICAgaWYgKGlzTWFpbikKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIjAiOworICAgIH0KKyAgICBt
T3V0IDw8ICIoIjsKKworICAgIGJvb2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisgICAg
Y29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChl
bWl0Q29tbWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBlbWl0Q29tbWEgPSB0cnVlOworCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
cGFyYW0gPSAqZnVuYy5nZXRQYXJhbShpKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUGFyYW1ldGVy
KGZ1bmMsIHBhcmFtKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICIpIjsKK30KKwordm9pZCBHZW5N
ZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykK
K3sKKyAgICBjb25zdCBib29sIGlzTWFpbiA9IGZ1bmMuaXNNYWluKCk7CisKKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworICAgIGlmIChpc01haW4p
CisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBl
LmdldFN0cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IG51bGxwdHIpOworICAg
ICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5tYXRjaGVzKCpzdHJ1Y3R1cmUp
KQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJmcmFnbWVudCAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0
cnVjdHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgInZlcnRleCAiOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAg
ICAgICB9CisgICAgfQorICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmlnKCkp
OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29u
c3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQoreworICAgIGNvbnN0
IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ICAgICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworICAgIGV2ZENvbmZpZy5pc1BhcmFtZXRlciAgICAgICA9IHRydWU7Cisg
ICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5l
bWl0UG9zdFF1YWxpZmllciA9IGlzTWFpbjsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAg
ICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihwYXJhbSk7CisgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJhbSk7CisgICAgZW1pdFZhcmlh
YmxlRGVjbGFyYXRpb24oVmFyRGVjbChwYXJhbSksIGV2ZENvbmZpZyk7CisKKyAgICBpZiAoaXNN
YWluKQorICAgIHsKKyAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlv
biA9CisgICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVy
KS0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpOworICAgICAgICBpZiAoc3RydWN0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudElu
Lm1hdGNoZXMoKnN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3Rz
LnZlcnRleEluLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbc3RhZ2VfaW5dXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMubWF0Y2hlcygqc3RydWN0
dXJlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tidWZmZXIo
IiA8PCByeDo6bXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPDwgIildXSI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlm
b3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1PdXQgPDwgIiBbW2J1ZmZlcigiIDw8IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4IDw8ICIpXV0i
OworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBh
cmFtLm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtTWFpblVuaWZvcm1CdWZmZXJJbmRleCArPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3Qo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbc2FtcGxlcigiIDw8IChtTWFpblNhbXBsZXJJbmRleCkgPDwgIildXSI7CisgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKyAgICAgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+Z2V0T3JpZ2luYWxOYW1lKHBhcmFtLnVuaXF1ZUlkKCkuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFNhbXBsZXJCaW5kaW5nKG9yaWdp
bmFsTmFtZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgICAgIG1NYWluU2FtcGxl
ckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiIFtbdGV4dHVyZSgiIDw8IChtTWFpblRl
eHR1cmVJbmRleCkgPDwgIildXSI7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmln
aW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5n
ZXQoKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRUZXh0dXJlQmluZGluZyhvcmlnaW5h
bE5hbWUsIG1NYWluU2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIG1NYWluVGV4dHVyZUluZGV4
ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKE5hbWUocGFyYW0pID09IFBpcGVsaW5le1BpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkLCBu
dWxscHRyfS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8ICIgW1tpbnN0YW5jZV9pZF1dIjsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCit7CisgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmZ1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICBlbWl0SW5kZW50
YXRpb24oKTsKKyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7Cit9CisKK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1
bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgVEludGVybUJsb2NrICZib2R5
ICAgID0gKmZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsK
KyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7CisgICAgbU91dCA8PCAiXG4iOworICAg
IGJvZHkudHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbk1ldGFs
VHJhdmVyc2VyOjpGdW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUo
KQoreworICAgIEZ1bmNUb05hbWUgbWFwOworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShjb25z
dCBjaGFyICpuYW1lU3RyKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lKG5h
bWVTdHIpOworICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKyAg
ICAgICAgbWFwW25hbWVdID0gTmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KTsKKyAgICB9OworCisgICAgcHV0QW5nbGUoInRleGVsRmV0Y2giKTsKKyAgICBwdXRBbmdsZSgi
dGV4ZWxGZXRjaE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisgICAgcHV0QW5n
bGUoInRleHR1cmUxRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMURMb2QiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkQiKTsKKyAg
ICBwdXRBbmdsZSgidGV4dHVyZTJETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlM0QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisgICAgcHV0QW5nbGUoInRl
eHR1cmUzRFByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmUiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVQcm9qTG9k
Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVHcmFkIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVH
cmFkT2Zmc2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVMb2QiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZUxvZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7CisgICAg
cHV0QW5nbGUoInRleHR1cmVQcm9qIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZCIp
OworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZVByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pMb2RPZmZzZXQiKTsK
KyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZVNpemUiKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQor
eworICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRT
ZXF1ZW5jZSgpOworCisgICAgYXV0byBlbWl0QXJnTGlzdCA9IFsmXShjb25zdCBjaGFyICpvcGVu
LCBjb25zdCBjaGFyICpjbG9zZSkgeworICAgICAgICBtT3V0IDw8IG9wZW47CisKKyAgICAgICAg
Ym9vbCBlbWl0Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDog
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVtaXRDb21tYSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbWl0Q29tbWEgPSB0cnVlOworICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1PdXQgPDwgY2xvc2U7CisgICAgfTsKKworICAgIGNvbnN0
IFRUeXBlICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworCisgICAgaWYgKGFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wg
aXNTdGFuZGFsb25lID0gZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCk7CisgICAgICAgIGlm
IChpc1N0YW5kYWxvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY29uc3Ry
dWN0b3IgZnJvbSBiZWluZyBpbnRlcnByZXRlZCBhcyBhIGRlY2xhcmF0aW9uIGJ5IHdyYXBwaW5n
IGluIHBhcmVucy4KKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBnaXZlbiBzb21l
dGhpbmcgbGlrZToKKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMg
d2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisg
ICAgICAgICAgICAvLyBTbyBpbnN0ZWFkIGVtaXQ6CisgICAgICAgICAgICAvLyAgICAgIChpbnQo
c3ltYm9sKSk7CisgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworCisgICAgICAgIGlmIChyZXRUeXBlLmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25m
aWcpOworICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsiLCAifSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHJldFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCJ7
IiwgIn0iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIo
IiwgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0YW5kYWxvbmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgIikiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Ig
b3AgPSBhZ2dyZWdhdGVOb2RlLT5nZXRPcCgpOworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAg
ICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFn
Z3JlZ2F0ZU5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgZW1pdE5hbWVPZihm
dW5jKTsKKyAgICAgICAgICAgICAgICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFt
ZS5maW5kKGZ1bmMubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbUZ1bmNU
b05hbWUuZW5kKCkpOworICAgICAgICAgICAgICAgIEVtaXROYW1lKG1PdXQsIGl0LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVf
dCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA8IGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAmYXJnLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgIEFTU0VSVCghYXJncy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAqYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGFyZ1R5cGUwKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdldE9w
ZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworCisgICAgICAg
ICAgICAgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmV0VHlwZSwgYXJnVHlwZTAsIGFy
Z1R5cGUxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSAmb3BlcmFuZE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0
Q2hpbGROb2RlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgo
b3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKG9w
ZXJhbmROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5h
bWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICZsZWZ0Tm9kZSAgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2Rl
KDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUg
PSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbU91dCA8PCAiICIgPDwgb3BOYW1lIDw8ICIgIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKK3sKKyAgICBBU1NF
UlQobUluZGVudExldmVsID49IDApOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91
dCA8PCAie1xuIjsKKyAgICArK21JbmRlbnRMZXZlbDsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENsb3NlQnJhY2UoKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7
CisKKyAgICAtLW1JbmRlbnRMZXZlbDsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ9IjsKK30KKworc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJ
bnRlcm1Ob2RlICZub2RlKQoreworICAgIGlmIChub2RlLmdldEFzQmxvY2soKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRB
c1N3aXRjaE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKG5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQ2FzZU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIE5ld2xpbmVQYWQoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAg
aWYgKG5vZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSA9IG5v
ZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWNsTm9k
ZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmY2hpbGROb2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9s
ICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7
CisgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKmJsb2NrTm9kZSkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IC0xKTsKKyAg
ICBjb25zdCBib29sIGlzR2xvYmFsU2NvcGUgID0gbUluZGVudExldmVsID09IC0xOworICAgIGNv
bnN0IGJvb2wgcGFyZW50SXNTd2l0Y2ggPSBtUGFyZW50SXNTd2l0Y2g7CisgICAgbVBhcmVudElz
U3dpdGNoICAgICAgICAgICA9IGZhbHNlOworCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICArK21JbmRlbnRMZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZW1pdE9wZW5CcmFjZSgpOworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisgICAgICAg
IHsKKyAgICAgICAgICAgICsrbUluZGVudExldmVsOworICAgICAgICB9CisgICAgfQorCisgICAg
VEludGVybU5vZGUgKnByZXZTdG10Tm9kZSA9IG51bGxwdHI7CisKKyAgICBjb25zdCBzaXplX3Qg
c3RtdENvdW50ID0gYmxvY2tOb2RlLT5nZXRDaGlsZENvdW50KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdG10Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlICZz
dG10Tm9kZSA9ICpibG9ja05vZGUtPmdldENoaWxkTm9kZShpKTsKKworICAgICAgICBpZiAoaXNH
bG9iYWxTY29wZSAmJiBwcmV2U3RtdE5vZGUgJiYgKE5ld2xpbmVQYWQoKnByZXZTdG10Tm9kZSkg
fHwgTmV3bGluZVBhZChzdG10Tm9kZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8
ICJcbiI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc0Nhc2UgPSBzdG10Tm9kZS5n
ZXRBc0Nhc2VOb2RlKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisgICAgICAg
IGVtaXRJbmRlbnRhdGlvbigpOworICAgICAgICBtSW5kZW50TGV2ZWwgKz0gaXNDYXNlOworICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFJlcXVpcmVzU2VtaWNv
bG9uVGVybWluYXRvcihzdG10Tm9kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
IjsiOworICAgICAgICB9CisgICAgICAgIG1PdXQgPDwgIlxuIjsKKworICAgICAgICBwcmV2U3Rt
dE5vZGUgPSAmc3RtdE5vZGU7CisgICAgfQorCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworICAgICAgICAtLW1JbmRlbnRM
ZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudElzU3dpdGNo
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobUluZGVudExldmVsID49IDEpOworICAg
ICAgICAgICAgLS1tSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICAgICAgZW1pdENsb3NlQnJh
Y2UoKTsKKyAgICAgICAgbVBhcmVudElzU3dpdGNoID0gcGFyZW50SXNTd2l0Y2g7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24gKikKK3sKKyAgICBMT0dJQ19FUlJPUigpOyAgLy8gUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXREZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVjbE5v
ZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNs
Tm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworCisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2Rl
LmdldEFzU3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlv
bihWYXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisgICAgfQorICAgIGVsc2UgaWYgKFRJbnRlcm1C
aW5hcnkgKmluaXROb2RlID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOwor
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBp
bml0Tm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoc3ltYm9s
Tm9kZSAmJiB2YWx1ZU5vZGUpOworCisgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBh
cmVudEJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmVyR2xvYmFsSW5pdGlh
bGl6ZXJzIHNob3VsZCBoYXZlIHR1cm5lZCBub24tY29uc3QgZ2xvYmFsIGluaXRpYWxpemVycyBp
bnRvCisgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworICAgICAgICAgICAg
Ly8gRXZxQ29uc3QgaW4gc29tZSBBTkdMRSBjb2RlIGJ1dCBub3QgYWN0dWFsbHkgaGF2ZSB0aGVp
ciBxdWFsaWZpZXIgYWN0dWFsbHkgY2hhbmdlZCB0bworICAgICAgICAgICAgLy8gRXZxQ29uc3Qu
IFRodXMganVzdCBhc3N1bWUgYWxsIEV2cUdsb2JhbCBhcmUgYWN0dWFsbHkgRXZxQ29uc3QgZm9y
IGFsbCBjb2RlIHJ1biBhZnRlcgorICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXpl
cnMuCisgICAgICAgICAgICBtT3V0IDw8ICJjb25zdGFudCAiOworICAgICAgICB9CisKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAg
ICBjb25zdCBOYW1lIHZhck5hbWUodmFyKTsKKworICAgICAgICBpZiAoRXhwcmVzc2lvbkNvbnRh
aW5zTmFtZSh2YXJOYW1lLCAqdmFsdWVOb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
bmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2
ZENvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgIiA9ICI7CisgICAgICAgIGdyb3VwZWRUcmF2ZXJz
ZSgqdmFsdWVOb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIGNv
bnN0IFRMb29wVHlwZSBsb29wVHlwZSA9IGxvb3BOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0Rm9yTG9vcChsb29wTm9kZSk7CisgICAgICAgIGNhc2Ug
VExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29w
KGxvb3BOb2RlKTsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdERvV2hpbGVMb29wKGxvb3BOb2RlKTsKKyAgICB9Cit9CisKK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUp
Cit7CisgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcEZv
cik7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsK
KyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOwor
ICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOwor
ICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFT
U0VSVChib2R5Tm9kZSk7CisKKyAgICBtT3V0IDw8ICJmb3IgKCI7CisKKyAgICBpZiAoaW5pdE5v
ZGUpCisgICAgeworICAgICAgICBpbml0Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIiAiOworICAgIH0KKworICAgIG1PdXQgPDwg
IjsgIjsKKworICAgIGlmIChjb25kTm9kZSkKKyAgICB7CisgICAgICAgIGNvbmROb2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICI7ICI7CisKKyAgICBpZiAoZXhwck5v
ZGUpCisgICAgeworICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbU91dCA8PCAiKVxuIjsKKworICAgIGJvZHlOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxv
b3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0VHlw
ZSgpID09IFRMb29wVHlwZTo6RUxvb3BXaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0g
bG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBs
b29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBs
b29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7Cisg
ICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9u
KCk7CisgICAgbU91dCA8PCAid2hpbGUgKCI7CisgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMp
OworICAgIG1PdXQgPDwgIilcbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERvV2hp
bGVMb29wKFRJbnRlcm1Mb29wICpsb29wTm9kZSkKK3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdl
dFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmRO
b2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5v
ZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5v
ZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9k
ZSk7CisgICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVu
dGF0aW9uKCk7CisgICAgbU91dCA8PCAiZG9cbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIG1PdXQgPDwgIlxuIjsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ3aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8
PCAiKTsiOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqYnJhbmNoTm9kZSkKK3sKKyAgICBj
b25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisgICAgVElu
dGVybVR5cGVkICpleHByTm9kZSA9IGJyYW5jaE5vZGUtPmdldEV4cHJlc3Npb24oKTsKKworICAg
IGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgc3dpdGNoIChmbG93T3ApCisgICAgeworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wS2lsbDoKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGV4cHJOb2RlID09IG51bGxwdHIpOworICAgICAgICAgICAgbU91dCA8PCAibWV0YWw6OmRpc2Nh
cmRfZnJhZ21lbnQoKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAi
cmV0dXJuIjsKKyAgICAgICAgICAgIGlmIChleHByTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICBleHByTm9kZS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJicmVhayI7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbnRpbnVlOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVs
bHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJjb250aW51ZSI7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworCitib29sIHNoOjpFbWl0TWV0
YWwoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVBy
ZWx1ZGVDb25maWcgJnBwYykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBjb21waWxlci5n
ZXRJbmZvU2luaygpLm9iajsKKworICAgIHsKKyAgICAgICAgKytlbWl0TWV0YWxDYWxsQ291bnQ7
CisgICAgICAgIGF1dG8gZmlsZW5hbWVQcm90byA9IHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9GSVhF
RF9FTUlUIik7CisgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZmlsZW5hbWVQcm90byAhPSAiL2Rldi9udWxsIikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU9wZW4gPSBbJl0oY2hhciBjb25zdCAqZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZVByb3RvOwor
ICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxD
YWxsQ291bnQpOworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSAiLiI7CisgICAgICAg
ICAgICAgICAgICAgIGZpbGVuYW1lICs9IGV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgRklMRSAqZmlsZSA9IHRyeU9wZW4oIm1ldGFsIik7CisgICAgICAgICAgICAg
ICAgaWYgKCFmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmls
ZSA9IHRyeU9wZW4oImNwcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmlsZSk7CisKKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGZpbGVTaXplID0gZnRlbGwoZmlsZSk7CisgICAgICAg
ICAgICAgICAgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8Y2hhcj4gYnVmZjsKKyAgICAgICAgICAgICAgICBidWZmLnJlc2l6ZShmaWxlU2l6
ZSArIDEpOworICAgICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwg
ZmlsZSk7CisgICAgICAgICAgICAgICAgYnVmZi5iYWNrKCkgPSAnXDAnOworCisgICAgICAgICAg
ICAgICAgZmNsb3NlKGZpbGUpOworCisgICAgICAgICAgICAgICAgb3V0IDw8IGJ1ZmYuZGF0YSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG91dCA8PCAiXG5cbiI7CisKKyAgICBpZiAoIUVtaXRQcm9ncmFtUHJlbHVk
ZShyb290LCBvdXQsIHBwYykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgICAgIERlYnVn
U2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisgICAg
ICAgIG91dFdyYXBwZXIud2F0Y2gocmVhZFN0cmluZ0VudlZhcigiR01EX1dBVENIX1NUUklORyIp
KTsKKyNlbHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisjZW5k
aWYKKyAgICAgICAgR2VuTWV0YWxUcmF2ZXJzZXIgZ2VuKGNvbXBpbGVyLCBvdXRXcmFwcGVyLCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYpOworICAgICAgICBy
b290LnRyYXZlcnNlKCZnZW4pOworICAgIH0KKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0
dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRW1pdE1ldGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4YWY5YTFjODdkNTczY2FiNTI3Mjc1
YjRkMjMyY2NmMjRhNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaApAQCAtMCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBXYWxrcyB0
aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRN
ZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxp
bmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfRU1JVE1FVEFMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRW
YXJpYWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kODIzZmM3MjgyMGNmZmRkZjMyNDBkYzI0NjU5YTVlZGNmZGI5ZDI3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApAQCAtMCwwICsxLDQ1IEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworCisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworbmFtZXNwYWNlIHNoCit7CisKK2lubGluZSBib29sIHJlYWRCb29sRW52VmFyKGNvbnN0
IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOwor
ICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHN0cmNtcChzdHIsICIwIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgQVNTRVJUKHN0cmNtcChzdHIsICIxIikgPT0gMCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBzdGQ6OnN0cmluZyByZWFkU3RyaW5nRW52VmFyKGNv
bnN0IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIp
OworICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRW
QVJJQUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5YzAzZWI1ZDM1
ZTg5ZmViMTZkNjc0ZDk2MTcwYzI3MjY5NmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIg
OiBwcml2YXRlIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3Qgc2l6ZV90
IG1NaW5SZXF1aXJlZFNpemU7CisgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVz
OworCisgIHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3Qg
bWluUmVxdWlyZWRTaXplKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVl
LCBmYWxzZSksIG1NaW5SZXF1aXJlZFNpemUobWluUmVxdWlyZWRTaXplKQorICAgIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9uKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9u
KGRlY2xOb2RlKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wu
Z2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxp
Zmllcjo6RXZxQ29uc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBNZXRhbExh
eW91dE9mKHR5cGUpLnNpemVPZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1p
blJlcXVpcmVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbUhvaXN0ZWREZWNsTm9kZXMucHVzaF9iYWNrKCZkZWNsTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
e2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIGJvb2wgcmV3cml0
ZShUSW50ZXJtQmxvY2sgJnJvb3QsIElkR2VuICZpZEdlbikKKyAgICB7CisgICAgICAgIGlmICgh
cmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJv
b3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kRmlyc3RGdW5jdGlvbkRlZmluaXRpb25JbmRleCgmcm9v
dCksIG1Ib2lzdGVkRGVjbE5vZGVzKTsKKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpvcGFx
dWVEZWNsTm9kZSA6IG1Ib2lzdGVkRGVjbE5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjbE5vZGUpOworICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZvbGRWYXIgPSBWaWV3RGVjbGFyYXRpb24oKmRlY2xOb2RlKS5zeW1i
b2wudmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRH
ZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKyAgICAgICAgICAgIGF1dG8gKm5ld1Zh
ciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksICZvbGRW
YXIuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgm
bUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OkhvaXN0Q29uc3RhbnRzKFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKQoreworICAgIHJldHVybiBSZXdy
aXRlcihjb21waWxlciwgbWluUmVxdWlyZWRTaXplKS5yZXdyaXRlKHJvb3QsIGlkR2VuKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0hvaXN0Q29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwNmE1ZTQ3M2M4YmVjNWNjZmE0OGRkNGYx
ZWJmYzNhNDk0NTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0
YW50cy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNf
SF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBIb2lz
dHMgZnVuY3Rpb24tbG9jYWwgY29uc3RhbnRzIHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgdGhlaXIg
TWV0YWwgc2l6ZW9mIG1lZXRzCisvLyBgbWluUmVxdWlyZWRTaXplYC4KK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6ZSk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0hPSVNUQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGFlZDZiOWI4ZTYz
OTY0ZjE1MTNiODM2ZmI5ODg5MDIzMjAyMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0
eXBlPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVu
b3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0lkR2Vu
OjpJZEdlbigpIHt9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmlu
Z1RvSW1tdXRhYmxlPgorTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzaXplX3QgY291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9JbW11dGFibGUp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaWQgPSBtTmV4dCsrOworICAgIGNoYXIgaWRCdWZmZXJb
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisgICAgc3ByaW50
ZihpZEJ1ZmZlciwgIiV1IiwgaWQpOworCisgICAgbU5ld05hbWVCdWZmZXIuY2xlYXIoKTsKKyAg
ICBtTmV3TmFtZUJ1ZmZlciArPSAnXyc7CisgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7
CisKKyAgICAvLyBOb3RlOgorICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxv
d2VkIGluIEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3
ZQorICAgIC8vIHRha2UgY2FyZSBub3QgdG8gaW50cm9kdWNlIGFueS4KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyBiYXNlTmFtZSA9IHRvSW1tdXRhYmxlKGJhc2VOYW1lc1tpXSk7CisgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
YmFzZSA9IGJhc2VOYW1lLmRhdGEoKTsKKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNX
aXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBiYXNlICs9IHNpemVvZihrQW5nbGVJbnRlcm5hbFByZWZpeCkgLSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCpiYXNlID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICArK2Jhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoKmJhc2Ug
IT0gJ18nKTsKKworICAgICAgICAgICAgaWYgKG1OZXdOYW1lQnVmZmVyLmJhY2soKSAhPSAnXycp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5hbWUoSW1tdXRhYmxlU3RyaW5nKG1OZXdOYW1l
QnVmZmVyKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cit9CisKK05hbWUgSWRHZW46OmNy
ZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKK30KKworTmFtZSBJZEdlbjo6Y3JlYXRlTmV3
TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZS5yYXdOYW1lKCkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0
IGNoYXIgKmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKEltbXV0YWJsZVN0
cmluZyhiYXNlTmFtZSkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4g
Y3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBJbW11dGFibGVTdHJpbmcgJnMpIHsgcmV0dXJu
IHM7IH0pOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxOYW1lPiBiYXNlTmFtZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5h
bWVzLnNpemUoKSwgYmFzZU5hbWVzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
W10oY29uc3QgTmFtZSAmcykgeyByZXR1cm4gcy5yYXdOYW1lKCk7IH0pOworfQorCitOYW1lIElk
R2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyICo+IGJh
c2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBi
YXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBjaGFy
ICpzKSB7IHJldHVybiBJbW11dGFibGVTdHJpbmcocyk7IH0pOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0lkR2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODIw
ODlmNDMyZTE4OWQwZjc5MWUwZTdhMjEzY2NlY2Q0NDJiNzJlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworI2Rl
ZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXwor
CisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorLy8gQWxsIG5hbWVzIGNyZWF0ZWQg
YXJlIG1hcmtlZCBhcyBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLgorY2xhc3MgSWRHZW4gOiBh
bmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgcHVibGljOgorICAgIElkR2VuKCk7CisKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSk7CisgICAgTmFt
ZSBjcmVhdGVOZXdOYW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKTsKKyAgICBOYW1lIGNyZWF0ZU5l
d05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpOworICAgIE5hbWUg
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKTsKKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4g
YmFzZU5hbWVzKTsKKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcs
IHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzaXpl
X3QgY291bnQsIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLCBjb25zdCBTdHJpbmdUb0ltbXV0YWJs
ZSAmdG9JbW11dGFibGUpOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQgbU5leHQgPSAwOyAg
ICAgICAgICAvLyBgdW5zaWduZWRgIGJlY2F1c2Ugb2YgIiV1IiB1c2UgaW4gc3ByaW50ZgorICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVyIHRvIGF2b2lk
IHRvbnMgb2YgcmVhbGxvY2F0aW9ucworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM0NmY2ZjgxNDI4MmMxMmFmNjc5MTRkMmEzMDQyMzQxNjBmYTJl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCkBAIC0wLDAgKzEs
NDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlw
ZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZW51bSBjbGFzcyBMYW5ndWFnZQoreworICAg
IE1ldGFsLAorICAgIEdMU0wsCit9OworCitzdGF0aWMgc2l6ZV90IFJvdW5kVXBUb011bHRpcGxl
T2Yoc2l6ZV90IHgsIHNpemVfdCBtdWx0aXBsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgcmVtID0g
eCAlIG11bHRpcGxlOworICAgIHJldHVybiByZW0gPT0gMCA/IHggOiB4ICsgKG11bHRpcGxlIC0g
cmVtKTsKK30KKwordm9pZCBMYXlvdXQ6OnJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBi
b29sIHBhZCkKK3sKKyAgICBhbGlnbk9mID0gc3RkOjptYXgoYWxpZ25PZiwgYWxpZ24pOworICAg
IGlmIChwYWQpCisgICAgeworICAgICAgICBzaXplT2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKHNp
emVPZiwgYWxpZ24pOworICAgIH0KK30KKworYm9vbCBMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3Qg
TGF5b3V0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZU9mID09IG90aGVyLnNpemVP
ZiAmJiBhbGlnbk9mID09IG90aGVyLmFsaWduT2Y7Cit9CisKK3ZvaWQgTGF5b3V0OjpvcGVyYXRv
cis9KGNvbnN0IExheW91dCAmb3RoZXIpCit7CisgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5h
bGlnbk9mLCB0cnVlKTsKKyAgICBzaXplT2YgKz0gb3RoZXIuc2l6ZU9mOworfQorCit2b2lkIExh
eW91dDo6b3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpCit7CisgICAgc2l6ZU9mICo9IHNjYWxlOwor
fQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QK
K3sKKyAgICBhdXRvIHNlbGYgPSAqdGhpczsKKyAgICBzZWxmICs9IG90aGVyOworICAgIHJldHVy
biBzZWxmOworfQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25z
dAoreworICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKj0gc2NhbGU7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBMYXlvdXQgU2NhbGFyTGF5b3V0T2YoY29uc3QgVFR5cGUg
JnR5cGUsIExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNU
eXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiB7
MSwgMX07CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6Cisg
ICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aWYgKElzU2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIExhbmd1YWdlOjpNZXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
OCwgOH07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGFuZ3VhZ2U6OkdMU0w6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6
OkludmFsaWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaW5uZXJTY2FsZXNQ
YWNrZWRbXSAgID0gezAsIDEsIDIsIDMsIDR9Oworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNj
YWxlc1VucGFja2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisKK0xheW91dCBzaDo6TWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcpCit7Cisg
ICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA8PSA0KTsKKyAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKworICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID09IFRMYXlvdXRCbG9j
a1N0b3JhZ2U6OkVic1NoYXJlZCk7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZp
Zy5tYXNrQXJyYXkpCisgICAgeworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gdHJ1ZTsK
KyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmln
KTsKKyAgICAgICAgY29uZmlnLm1hc2tBcnJheSAgICA9IGZhbHNlOworICAgICAgICBjb25zdCBz
aXplX3Qgdm9sICAgID0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIHJldHVy
biBsYXlvdXQgKiB2b2w7CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXRO
b21pbmFsU2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXpl
KCkgPT0gMSk7CisgICAgICAgIGF1dG8gY29uZmlnMiAgICAgICAgICAgICA9IGNvbmZpZzsKKyAg
ICAgICAgY29uZmlnMi5tYXNrQXJyYXkgICAgICAgID0gZmFsc2U7CisgICAgICAgIGF1dG8gbGF5
b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogZmllbGRzKQorICAgICAgICB7CisgICAgICAgICAgICBsYXlvdXQg
Kz0gTWV0YWxMYXlvdXRPZigqZmllbGQtPnR5cGUoKSwgY29uZmlnMik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc2l6ZV90IHBhZCA9IGxheW91dC5zaXplT2YgJSAxNjsKKyAgICAgICAgICAg
IGxheW91dC5zaXplT2YgKz0gcGFkOworICAgICAgICB9CisgICAgICAgIGxheW91dC5zaXplT2Yg
PSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAg
ICAgICAgcmV0dXJuIGxheW91dDsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxl
cnNBc1RleHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsxNiwgOH07ICAvLyBwb2ludGVyezgsOH0gYW5kIG1ldGFsOjpzYW1w
bGVyezgsOH0KKyAgICB9CisKKyAgICBjb25zdCBMYXlvdXQgc2NhbGFyTGF5b3V0ID0gU2NhbGFy
TGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6Ok1ldGFsKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1Bh
Y2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBsYXlvdXQgPSBM
YXlvdXR7c2NhbGFyTGF5b3V0LnNpemVPZiAqIGlubmVyU2NhbGUsIHNjYWxhckxheW91dC5hbGln
bk9mfTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVy
U2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8g
bGF5b3V0ICAgICAgICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBp
bm5lclNjYWxlKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisgICAg
ICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KTsK
KyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKyAgICAgICAgY29uc3Qgc2l6ZV90IGlu
bmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Um93cygpXTsKKyAgICAgICAg
Y29uc3Qgc2l6ZV90IG91dGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6
ZU9mICogaW5uZXJTY2FsZTsKKyAgICAgICAgcmV0dXJuIHtuICogb3V0ZXJTY2FsZSwgbn07Cisg
ICAgfQorfQorCitUTGF5b3V0QmxvY2tTdG9yYWdlIHNoOjpPdmVybGF5KFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugb2xkU3RvcmFnZSwgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBuZXdTdG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9j
a1N0b3JhZ2U7CisgICAgc3dpdGNoIChuZXdTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBv
bGRTdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkID8ga0RlZmF1
bHRMYXlvdXRCbG9ja1N0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBuZXdTdG9yYWdlOworICAgIH0KK30KKworVExh
eW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFj
a2luZywgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tp
bmcgbmV3UGFja2luZyA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZzsK
KyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRNYXRy
aXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5n
ID09IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0
TWF0cml4UGFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkUGFja2luZzsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOworICAgIH0KK30KKworYm9vbCBzaDo6
Q2FuQmVQYWNrZWQoVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIHN3aXRjaCAo
c3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFj
a2VkOgorICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDoKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQYWNrZWQoVExheW91
dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIENhbkJlUGFja2VkKGxh
eW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpOworfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChj
b25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIENhbkJlUGFja2VkKHR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkpOworfQorCit2b2lkIHNoOjpTZXRCbG9ja1N0b3JhZ2UoVFR5
cGUgJnR5cGUsIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKK3sKKyAgICBhdXRvIHF1YWwg
ICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAgcXVhbC5ibG9ja1N0b3Jh
Z2UgPSBzdG9yYWdlOworICAgIHR5cGUuc2V0TGF5b3V0UXVhbGlmaWVyKHF1YWwpOworfQorCitz
dGF0aWMgTGF5b3V0IENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0
ICpiZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBj
b25zdCAqY29uc3QgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1h
c2tBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBiYXNlQWxpZ25tZW50KQoreworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAg
ICBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGF1dG8gbGF5b3V0ID0gTGF5
b3V0OjpJZGVudGl0eSgpOworICAgIGZvciAoYXV0byBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgeworICAgICAgICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIp
LT50eXBlKCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNlKTsKKyAgICB9CisgICAgaWYg
KCFpc1BhY2tlZCkgIC8vIFhYWDogQ29ycmVjdD8KKyAgICB7CisgICAgICAgIGxheW91dC5zaXpl
T2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsK
KyAgICB9CisgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7
CisgICAgcmV0dXJuIGxheW91dDsKK30KKworc3RhdGljIExheW91dCBDb21tb25HbHNsTGF5b3V0
T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBtYXNrQXJyYXksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkK
K3sKKyAgICBBU1NFUlQoc3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNp
ZmllZCk7CisKKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKyAgICAgICAgc3RvcmFnZSA9PSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tT
dG9yYWdlOjpFYnNTaGFyZWQ7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNN
YXRyaXgoKSAmJiAhbWFza0FycmF5KQorICAgIHsKKyAgICAgICAgYXV0byBsYXlvdXQgPSBHbHNs
TGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgdHJ1ZSk7CisgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgbGF5b3V0LnJlcXVp
cmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBsYXlvdXQ7
CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpID09
IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAg
ICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoZmllbGRzLmRhdGEoKSwgZmllbGRz
LmRhdGEoKSArIGZpZWxkcy5zaXplKCksIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0cml4UGFja2luZywgbWFza0FycmF5LCBiYXNlQWxpZ25tZW50
KTsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvIHNjYWxhckxheW91dCA9IFNjYWxhckxheW91dE9m
KHR5cGUsIExhbmd1YWdlOjpHTFNMKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWduU2NhbGUg
PSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAg
ICBhdXRvIGxheW91dCA9CisgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXpl
T2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25TY2FsZX07CisgICAg
ICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFj
a2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCAgICAg
ICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7
CisgICAgICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworCisgICAgICAgIHNpemVf
dCBpbm5lckRpbTsKKyAgICAgICAgc2l6ZV90IG91dGVyRGltOworCisgICAgICAgIHN3aXRjaCAo
bWF0cml4UGFja2luZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4
UGFja2luZzo6RW1wQ29sdW1uTWFqb3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRp
bSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wUm93TWFq
b3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUu
Z2V0Q29scygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVf
dD4odHlwZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAg
ICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IDA7CisgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgb3V0ZXJEaW0gKj0g
dHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVy
U2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW2lubmVyRGltXTsKKyAgICAgICAgY29uc3Qgc2l6
ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKyAgICAg
ICAgTGF5b3V0IGxheW91dCAgICAgICAgICAgPSB7b3V0ZXJEaW0gKiBuLCBufTsKKyAgICAgICAg
bGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBsYXlvdXQ7CisgICAgfQorfQorCitMYXlvdXQgc2g6Okdsc2xMYXlvdXRPZihjb25zdCBU
VHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1h
dHJpeFBhY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sK
KyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBl
LmdldFNlY29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIHN0b3JhZ2UgICAgICAgPSBPdmVybGF5
KHN0b3JhZ2UsIHR5cGUpOworICAgIG1hdHJpeFBhY2tpbmcgPSBPdmVybGF5KG1hdHJpeFBhY2tp
bmcsIHR5cGUpOworCisgICAgc3dpdGNoIChzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9u
R2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5n
LCBtYXNrQXJyYXksIDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNT
dGQxNDA6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5
b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKyAgICAg
ICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisg
ICAgfQorfQorCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBzaDo6R2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCit7CisgICAgQVNTRVJU
KHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworICAgIEFT
U0VSVChtYXRyaXhQYWNraW5nICE9IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmll
ZCk7CisKKyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxKTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAg
ICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxNik7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAg
ICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9y
YWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTQxM2VkZjQ5ZmVmMjdjMDBhZDYxNjZhZWFjZmU1MjZhYTk0ZjFkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApAQCAtMCwwICsxLDg4IEBACisvLworLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9MQVlPVVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3Rl
eHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRCbG9ja1N0b3JhZ2UgID0gVExheW91dEJsb2Nr
U3RvcmFnZTo6RWJzU2hhcmVkOworY29uc3RleHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRN
YXRyaXhQYWNraW5nID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOworCisv
LyBSZXR1cm5zIGBvbGRTdG9yYWdlYCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIGJsb2NrIHN0
b3JhZ2UuCisvLyBPdGhlcndpc2UgcmV0dXJucyBibG9jayBzdG9yYWdlIG9mIGB0eXBlYC4KK1RM
YXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2Us
IGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gUmV0dXJucyBgb2xkUGFja2luZ2AgaWYgYHR5cGVg
IGhhcyB1bnNwZWNpZmllZCBtYXRyaXggcGFja2luZy4KKy8vIE90aGVyd2lzZSByZXR1cm5zIG1h
dHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KK1RMYXlvdXRNYXRyaXhQYWNraW5nIE92ZXJsYXkoVExh
eW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBS
ZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3Rv
cmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFja2VkKFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3Qg
aXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBhY2tl
ZCByZXByZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIpOworCisvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3Nh
YmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENh
bkJlUGFja2VkKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gU2V0cyB0aGUgYmxvY2sgc3RvcmFn
ZSBmb3IgYSB0eXBlLgordm9pZCBTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5cGUsIFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIENvbnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25v
ZmAgaW5mb3JtYXRpb24uCitzdHJ1Y3QgTGF5b3V0Cit7CisgICAgc2l6ZV90IHNpemVPZjsKKyAg
ICBzaXplX3QgYWxpZ25PZjsKKworICAgIHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVy
biB7MCwgMX07IH0KKyAgICBzdGF0aWMgTGF5b3V0IEludmFsaWQoKSB7IHJldHVybiB7MCwgMH07
IH0KKyAgICBzdGF0aWMgTGF5b3V0IEJvdGgoc2l6ZV90IG4pIHsgcmV0dXJuIHtuLCBufTsgfQor
CisgICAgdm9pZCByZXF1aXJlQWxpZ25tZW50KHNpemVfdCBhbGlnbiwgYm9vbCBwYWQpOworCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworCisgICAgdm9p
ZCBvcGVyYXRvcis9KGNvbnN0IExheW91dCAmb3RoZXIpOworICAgIHZvaWQgb3BlcmF0b3IqPShz
aXplX3Qgc2NhbGUpOworCisgICAgTGF5b3V0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVy
KSBjb25zdDsKKyAgICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7Cit9Owor
CitzdHJ1Y3QgTWV0YWxMYXlvdXRPZkNvbmZpZworeworICAgIGJvb2wgZGlzYWJsZVBhY2tpbmcg
ICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAg
ID0gZmFsc2U7CisgICAgYm9vbCB0cmVhdFNhbXBsZXJzQXNUZXh0dXJlRW52ICA9IGZhbHNlOwor
ICAgIGJvb2wgYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSBmYWxzZTsgIC8vIFBhZCB0byBt
dWx0aXBsZSBvZiAxNgorfTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBp
dCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgTWV0YWwgcHJvZ3JhbS4KKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQgTWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcgPSB7fSk7
CisKKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXBy
ZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0CitHbHNs
TGF5b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgVExheW91dEJsb2NrU3Rv
cmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVk
LAorICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBUTGF5
b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgYm9vbCBtYXNr
QXJyYXkgICAgICAgICAgICAgICAgICAgICA9IGZhbHNlKTsKKworLy8gUmV0dXJucyB0aGUgbGF5
b3V0IG9mIGEgc3RydWN0dXJlIGlmIGl0IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBHTFNM
IHByb2dyYW0uCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBHbHNsU3RydWN0TGF5b3V0T2YoVEZp
ZWxkIGNvbnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFj
a2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlP
VVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25z
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZTMwZGFlNmUyZDdiNmU2OTgyZmYwMDI5Mzc0ZTNmYWY0MjNjNWFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCkBAIC0w
LDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CitjbGFzcyBNYXBwZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6Cisg
ICAgRnVuY3Rpb25Ub0RlZmluaXRpb24gbUZ1bmNUb0RlZjsKKworICBwdWJsaWM6CisgICAgTWFw
cGVyKCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIGJv
b2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5j
LT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworICAgICAgICBtRnVuY1Rv
RGVmW2Z1bmNdID0gZnVuY0RlZk5vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCitGdW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgTWFwcGVyIG1hcHBlcjsKKyAgICByb290LnRyYXZl
cnNlKCZtYXBwZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUobWFwcGVyLm1GdW5jVG9EZWYpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1
NmRkZWU0ZDkwNTBhNzAyMzc1ZWM1OThiZWY4MmI0NWVmMzg1YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNf
SF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwor
Ly8gQSBtYXAgZnJvbSBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZpbml0aW9u
cy4KK3VzaW5nIEZ1bmN0aW9uVG9EZWZpbml0aW9uID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFRGdW5jdGlvbiAqLCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICo+OworCisvLyBNYXBzIGZ1
bmN0aW9ucyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zLgorQU5HTEVfTk9fRElT
Q0FSRCBGdW5jdGlvblRvRGVmaW5pdGlvbiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJbnRl
cm1CbG9jayAmcm9vdCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5J
VElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBTeW1ib2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVjOTMwNDY5NWQxZWRmZTBmYmVk
NTIxZDZmYjEwNGNmZGM2NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5
bWJvbHMuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQor
eworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRl
OgorICAgIHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25zdCBURnVuY3Rpb24gKiwgVElu
dGVybVN5bWJvbCAmKT4gbU1hcDsKKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29u
c3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyAgICAgICAgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtTWFwKG1hcCkKKyAgICB7fQorCisgICAg
UG9zdFJlc3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5
bWJvbE5vZGUpOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIHNoOjpNYXBT
eW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9k
ZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN0ZDo6bW92ZShtYXApKTsKKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1i
b2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1Njg5MGExNWNh
MWVjYTU5MDFiMTJhYThjMzkxNmMxNTZmY2JjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTWFwU3ltYm9scy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKworI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIE1hcHMg
VEludGVybVN5bWJvbCBub2RlcyB0byBUSW50ZXJtTm9kZSBub2Rlcy4KKy8vIFRoZSBwYXJlbnQg
ZnVuY3Rpb24gb2YgYSBzeW1ib2wgaXMgcHJvdmlkZWQgdG8gdGhlIG1hcHBpbmcgd2hlbiBhcHBs
aWNhYmxlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisgICAgVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgc3RkOjpmdW5jdGlvbjxU
SW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApOwor
Cit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzc4ZDM0Y2MzMWM1MDliMDk2MzllMDZlYjM4NjUwZjgw
ZjEyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAK
QEAgLTAsMCArMSwxMDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc2l6ZV90
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBv
cmRlcmluZy5zaXplKCk7Cit9CisKK2NvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzOjphdChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzICAgICAgICAgICAg
ICA9IG9yZGVyaW5nW2luZGV4XTsKKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAq
bSA9IGZpbmQoKnMpOworICAgIEFTU0VSVChtKTsKKyAgICByZXR1cm4gKm07Cit9CisKK2NvbnN0
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gb3JpZ2luYWxU
b01hY2hpbmVyeS5maW5kKCZzKTsKKyAgICBpZiAoaXRlciA9PSBvcmlnaW5hbFRvTWFjaGluZXJ5
LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVy
biAmaXRlci0+c2Vjb25kOworfQorCit2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omlu
c2VydChjb25zdCBUU3RydWN0dXJlICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSkKK3sKKyAg
ICBBU1NFUlQoIWZpbmQocykpOworICAgIG9yaWdpbmFsVG9NYWNoaW5lcnlbJnNdID0gbWFjaGlu
ZXJ5OworICAgIG9yZGVyaW5nLnB1c2hfYmFjaygmcyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCitUSW50ZXJtVHlwZWQgJkZsYXR0ZW4oU3ltYm9sRW52
ICZzeW1ib2xFbnYsIFRJbnRlcm1UeXBlZCAmbm9kZSkKK3sKKyAgICBhdXRvICZ0eXBlID0gbm9k
ZS5nZXRUeXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKworICAgIGF1dG8gJnJl
dFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworICAgIHJldFR5cGUubWFrZUFycmF5KDEpOwor
CisgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVu
IiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cit9CisKK3N0cnVjdCBG
bGF0dGVuQXJyYXkKK3t9OworCitzdHJ1Y3QgUGF0aEl0ZW0KK3sKKyAgICBlbnVtIGNsYXNzIFR5
cGUKKyAgICB7CisgICAgICAgIEZpZWxkLCAgICAgICAgIC8vIFN0cnVjdCBmaWVsZCBpbmRleGlu
Zy4KKyAgICAgICAgSW5kZXgsICAgICAgICAgLy8gQXJyYXksIHZlY3Rvciwgb3IgbWF0cml4IGlu
ZGV4aW5nLgorICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkgcmFuayAtPiBw
b2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorICAgIH07CisKKyAgICBQYXRoSXRlbShjb25zdCBU
RmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6RmllbGQpIHt9CisgICAg
UGF0aEl0ZW0oaW50IGluZGV4KSA6IGluZGV4KGluZGV4KSwgdHlwZShUeXBlOjpJbmRleCkge30K
KyAgICBQYXRoSXRlbSh1bnNpZ25lZCBpbmRleCkgOiBQYXRoSXRlbShzdGF0aWNfY2FzdDxpbnQ+
KGluZGV4KSkge30KKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5
cGU6OkZsYXR0ZW5BcnJheSkge30KKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICBUeXBlIHR5cGU7
Cit9OworCitUSW50ZXJtVHlwZWQgJkJ1aWxkUGF0aEFjY2VzcyhTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+
ICZwYXRoKQoreworICAgIFRJbnRlcm1UeXBlZCAqY3VyciA9IG5ldyBUSW50ZXJtU3ltYm9sKCZ2
YXIpOworICAgIGZvciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0
ZW06OlR5cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzRmllbGQoKmN1
cnIsIGl0ZW0uZmllbGQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpJbmRleDoKKyAgICAgICAgICAgICAgICBjdXJyID0g
JkFjY2Vzc0luZGV4KCpjdXJyLCBpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gKmN1cnI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE9y
aWdpbmFsUGFyYW0gPSBjb25zdCBUVmFyaWFibGUgJjsKK3VzaW5nIE1vZGlmaWVkUGFyYW0gPSBj
b25zdCBUVmFyaWFibGUgJjsKKwordXNpbmcgT3JpZ2luYWxBY2Nlc3MgPSBUSW50ZXJtVHlwZWQ7
Cit1c2luZyBNb2RpZmllZEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsKKworc3RydWN0IEFjY2Vzcwor
eworICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKyAgICBNb2RpZmllZEFjY2VzcyAmbW9k
aWZpZWQ7CisKKyAgICBzdHJ1Y3QgRW52CisgICAgeworICAgICAgICBjb25zdCBDb252ZXJ0VHlw
ZSB0eXBlOworICAgIH07Cit9OworCit1c2luZyBDb252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rp
b248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNz
ICYpPjsKKworY2xhc3MgQ29udmVydFN0cnVjdFN0YXRlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCit7
CisgIHByaXZhdGU6CisgICAgc3RydWN0IENvbnZlcnNpb25JbmZvCisgICAgeworICAgICAgICBD
b252ZXJzaW9uRnVuYyBzdGRGdW5jOworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmFzdEZ1bmM7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisgICAgICAgIEltbXV0
YWJsZVN0cmluZyBwYXRoTmFtZTsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBDb252ZXJ0U3Ry
dWN0U3RhdGUoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29u
ZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJpZXMgJm91dE1hY2hpbmVyaWVzKQorICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorICAgICAg
ICAgIHN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1vZGlmaWVkRmllbGRzKCpuZXcg
VEZpZWxkTGlzdCgpKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFi
bGUoKSksCisgICAgICAgICAgaWRHZW4oaWRHZW4pLAorICAgICAgICAgIG91dE1hY2hpbmVyaWVz
KG91dE1hY2hpbmVyaWVzKQorICAgIHt9CisKKyAgICB+Q29udmVydFN0cnVjdFN0YXRlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG5h
bWVQYXRoU2l6ZXMuZW1wdHkoKSk7CisgICAgfQorCisgICAgdm9pZCBwdWJsaXNoKGNvbnN0IFRT
dHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LCBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUp
CisgICAgeworICAgICAgICBjb25zdCBib29sIGlzT3JpZ2luYWxUb01vZGlmaWVkID0gY29uZmln
LmNvbnZlcnRUeXBlID09IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ7CisKKyAgICAg
ICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBt
b2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmbW9kaWZpZWRGaWVsZHMsIG1vZGlmaWVkU3RydWN0TmFtZS5z
eW1ib2xUeXBlKCkpOworCisgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKyAg
ICAgICAgICAgICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgIGlkR2VuLmNyZWF0ZU5ld05hbWUo
aXNPcmlnaW5hbFRvTW9kaWZpZWQgPyAib3JpZ2luYWxUb01vZGlmaWVkIiA6ICJtb2RpZmllZFRv
T3JpZ2luYWwiKQorICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Vm9pZCksIGZh
bHNlKTsKKworICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorICAgICAgICAg
ICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgb3JpZ2luYWxTdHJ1Y3QsIE5h
bWUoIm9yaWdpbmFsIikpOworICAgICAgICBNb2RpZmllZFBhcmFtIG1vZGlmaWVkUGFyYW0gPQor
ICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZpZWRT
dHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJl
bmNlKG9yaWdpbmFsUGFyYW0sIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgc3ltYm9s
RW52Lm1hcmtBc1JlZmVyZW5jZShtb2RpZmllZFBhcmFtLCBjb25maWcuZXh0ZXJuYWxBZGRyZXNz
U3BhY2UpOworICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAgICAg
IGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBh
cmFtKTsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFRJbnRlcm1CbG9jayAmYm9keSA9ICpuZXcgVEludGVybUJsb2Nr
KCk7CisKKyAgICAgICAgQWNjZXNzOjpFbnYgZW52e2NvbmZpZy5jb252ZXJ0VHlwZX07CisKKyAg
ICAgICAgZm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBjb252ZXJ0ID0gWyZdKE9yaWdpbmFsQWNjZXNzICZvcmln
aW5hbCwgTW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGlu
Zm8uYXN0RnVuYykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5mby5zdGRGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMg
ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG9y
aWdpbmFsIDogbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICppbmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnN0ZEZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3MgYWNjZXNzICAgICAgPSBpbmZvLnN0ZEZ1bmMoZW52LCBvcmln
aW5hbCwgbW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAg
PSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBhY2Nlc3MubW9kaWZpZWQgOiBhY2Nlc3Mub3JpZ2luYWw7CisgICAgICAgICAg
ICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCAmZGVzdCwgJnNyYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisgICAg
ICAgICAgICBNb2RpZmllZEFjY2VzcyAqbW9kaWZpZWQgPSAmQWNjZXNzRmllbGQobW9kaWZpZWRQ
YXJhbSwgaW5mby5wYXRoTmFtZSk7CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3Jp
Z2luYWwtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG10ID0gbW9kaWZpZWQt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChvdC5pc0FycmF5KCkgPT0gbXQuaXNBcnJh
eSgpKTsKKworICAgICAgICAgICAgaWYgKG90LmlzQXJyYXkoKSAmJiBvdCAhPSBtdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10
LmdldEFycmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90LmlzQXJyYXlPZkFycmF5
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAm
RmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIG1vZGlm
aWVkID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqbW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5n
ZXRBcnJheVNpemVQcm9kdWN0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdm9sdW1lOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbCA9IG9yaWdpbmFsLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbEFjY2VzcyAmbyA9IEFjY2Vzc0luZGV4KCpv
cmlnaW5hbCwgaSk7CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZtID0gQWNj
ZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydChvLCBt
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmll
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvICpmdW5jUHJvdG8g
PSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jKTsKKyAgICAgICAgYXV0byAqZnVu
Y0RlZiAgID0gbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24oZnVuY1Byb3RvLCAmYm9keSk7
CisKKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgbWFjaGluZXJ5OworICAgICAgICBt
YWNoaW5lcnkubW9kaWZpZWRTdHJ1Y3QgICAgICAgICAgICAgICAgICAgPSAmbW9kaWZpZWRTdHJ1
Y3Q7CisgICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9
IGZ1bmNEZWY7CisKKyAgICAgICAgb3V0TWFjaGluZXJpZXMuaW5zZXJ0KG9yaWdpbmFsU3RydWN0
LCBtYWNoaW5lcnkpOworICAgIH0KKworICAgIHZvaWQgcHVzaFBhdGgoUGF0aEl0ZW0gY29uc3Qg
Jml0ZW0pCisgICAgeworICAgICAgICBwYXRoSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAg
ICAgIHN3aXRjaCAoaXRlbS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBhdGhJ
dGVtOjpUeXBlOjpGaWVsZDoKKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVs
ZC0+bmFtZSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0
aChpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBQYXRoSXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAgICAgICAgIG5hbWVQYXRo
U2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHBvcFBhdGgoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aFNpemVz
LmVtcHR5KCkpOworICAgICAgICBuYW1lUGF0aC5yZXNpemUobmFtZVBhdGhTaXplcy5iYWNrKCkp
OworICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisKKyAgICAgICAgQVNTRVJUKCFw
YXRoSXRlbXMuZW1wdHkoKSk7CisgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworICAgIH0K
KworICAgIHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFmaW5hbGl6ZWQp
OworICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBpbnRyb2R1Y2VQYWNraW5nKCk7
CisgICAgICAgIEFTU0VSVChtZXRhbExheW91dFRvdGFsID09IExheW91dDo6SWRlbnRpdHkoKSk7
CisgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vZGlm
aWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VFR5cGUgJm5ld1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBh
Y2tpbmcgcGFja2luZykKKyAgICB7CisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVh
bGlmaWVyID0gbmV3VHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgbGF5b3V0UXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworICAgICAgICBsYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyAgICA9IHBhY2tpbmc7CisgICAgICAgIG5ld1R5cGUuc2V0TGF5b3V0
UXVhbGlmaWVyKGxheW91dFF1YWxpZmllcik7CisKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3Ry
aW5nIHBhdGhOYW1lKG5hbWVQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNr
KG5ldyBURmllbGQoJm5ld1R5cGUsIHBhdGhOYW1lLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJv
bFR5cGUoKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBDb252ZXJz
aW9uRnVuYyAmZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVsZHMuZW1w
dHkoKSk7CisgICAgICAgIGNvbnZlcnNpb25JbmZvcy5wdXNoX2JhY2soe2Z1bmMsIG51bGxwdHIs
IHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZENvbnZlcnNpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0eSgpKTsKKyAgICAgICAgY29udmVyc2lvbklu
Zm9zLnB1c2hfYmFjayh7e30sICZmdW5jLCBwYXRoSXRlbXMsIG1vZGlmaWVkRmllbGRzLmJhY2so
KS0+bmFtZSgpfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNQYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gY29udGFpbnNQYWNrZWQ7IH0KKworICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0
dXJuIHBhZEZpZWxkQ291bnQgPiAwOyB9CisKKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
ICAgIHsKKyAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKm0gPSBvdXRNYWNo
aW5lcmllcy5maW5kKHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChtID09IG51bGxwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
c3RydWN0dXJlLm5hbWUoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0
TWFjaGluZXJpZXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG0gPSBvdXRNYWNoaW5lcmllcy5maW5kKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQobSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0
TWFjaGluZXJ5ID0gKm07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxheW91
dCkKKyAgICB7CisgICAgICAgIGlmIChwYWRBbW91bnQgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0g
bW9kaWZpZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBp
biBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxs
IG5vdAorICAgICAgICAvLyBhbGxvdyBtYXRyaXggb3IgYXJyYXkgbWVtYmVycy4KKyAgICAgICAg
d2hpbGUgKHBhZEFtb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlICpwYWRU
eXBlOworICAgICAgICAgICAgaWYgKHBhZEFtb3VudCA+PSAxNikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwYWRBbW91bnQgLT0gMTY7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9
IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgNCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQgPj0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwYWRBbW91bnQgLT0gODsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRU
eXBlKFRCYXNpY1R5cGU6OkVidEZsb2F0LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKHBhZEFtb3VudCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhZEFtb3VudCAtPSA0OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJh
c2ljVHlwZTo6RWJ0RmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cGFkQW1vdW50ID49IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDI7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRCb29sLCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworICAgICAgICAgICAg
ICAgIHBhZEFtb3VudCAtPSAxOworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0Qm9vbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1
cGRhdGVMYXlvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRU
b3RhbCArPSBNZXRhbExheW91dE9mKCpwYWRUeXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIik7CisgICAg
ICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgbmV3IFRG
aWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5
cGUoKSkpOworICAgICAgICAgICAgKytwYWRGaWVsZENvdW50OworICAgICAgICB9CisKKyAgICAg
ICAgc3RkOjpyZXZlcnNlKG1vZGlmaWVkRmllbGRzLmJlZ2luKCkgKyBiZWdpbiwgbW9kaWZpZWRG
aWVsZHMuZW5kKCkpOworICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFja2luZygpCisgICAg
eworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2V0VW5wYWNrZWRTdG9yYWdl
ID0gW10oVFR5cGUgJnR5cGUpIHsKKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAgICAgICAg
ICAgc3dpdGNoIChzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Bh
Y2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6
OkVic1N0ZDQzMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRCbG9ja1N0b3JhZ2UodHlwZSwg
c3RvcmFnZSk7CisgICAgICAgIH07CisKKyAgICAgICAgTGF5b3V0IGdsc2xMYXlvdXRUb3RhbCA9
IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1v
ZGlmaWVkRmllbGRzLnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICZjdXJyICAgICAgICAgICA9
ICptb2RpZmllZEZpZWxkc1tpXTsKKyAgICAgICAgICAgIFRUeXBlICZjdXJyVHlwZSAgICAgICAg
PSAqY3Vyci50eXBlKCk7CisgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2Fu
QmVQYWNrZWQoY3VyclR5cGUpOworCisgICAgICAgICAgICBhdXRvIGRvbnRQYWNrID0gWyZdKCkg
eworICAgICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBHbHNsTGF5b3V0
T2YoY3VyclR5cGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFDYW5CZVBh
Y2tlZChjdXJyVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2so
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29uc3QgTGF5b3V0IHBhY2tlZEdsc2xMYXlvdXQgICAgICAgICAgID0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgcGFja2Vk
U3RvcmFnZSA9IGN1cnJUeXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKyAg
ICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICBjb25z
dCBMYXlvdXQgdW5wYWNrZWRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKyAg
ICAgICAgICAgIFNldEJsb2NrU3RvcmFnZShjdXJyVHlwZSwgcGFja2VkU3RvcmFnZSk7CisKKyAg
ICAgICAgICAgIEFTU0VSVChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA8PSB1bnBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA9
PSB1bnBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBqID0gaSArIDE7CisgICAgICAgICAgICBpZiAo
aiA9PSBzaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNr
ZWRHbHNsTGF5b3V0LnNpemVPZjsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmbmV4dCAgICAg
ICAgICA9ICptb2RpZmllZEZpZWxkc1tqXTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dCBuZXh0
R2xzbExheW91dCA9IEdsc2xMYXlvdXRPZigqbmV4dC50eXBlKCkpOworCisgICAgICAgICAgICBp
ZiAocGFkIDwgbmV4dEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN5bWJvbEVudi5tYXJrQXNQYWNrZWQoY3Vycik7CisgICAgICAg
ICAgICBnbHNsTGF5b3V0VG90YWwgKz0gcGFja2VkR2xzbExheW91dDsKKyAgICAgICAgICAgIGNv
bnRhaW5zUGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW50cm9k
dWNlUGFkZGluZygpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJs
ZVBhY2tpbmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKyAgICAgICAgbGF5
b3V0Q29uZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkID0gdHJ1ZTsKKworICAgICAgICBU
RmllbGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisgICAgICAgIEFT
U0VSVCghZmllbGRzLmVtcHR5KCkpOyAgLy8gR0xTTCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWVt
YmVyLgorCisgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKworICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKyAgICAg
ICAgICAgIGNvbnN0IExheW91dCBtZXRhbExheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5
b3V0Q29uZmlnKTsKKworICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisgICAg
ICAgICAgICBpZiAoZ2xzbExheW91dC5hbGlnbk9mID4gbWV0YWxMYXlvdXQuYWxpZ25PZiAmJiBm
aWVsZCAhPSBmaXJzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworICAgICAgICAgICAg
ICAgIG1ldGFsTGF5b3V0VG90YWwucmVxdWlyZUFsaWdubWVudChnbHNsTGF5b3V0LmFsaWduT2Ys
IHRydWUpOworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRkZWRTaXplID0gbWV0YWxM
YXlvdXRUb3RhbC5zaXplT2Y7CisgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAg
ICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKyAgICAgICAgICAgICAgICBtZXRhbExh
eW91dFRvdGFsICs9IG1ldGFsTGF5b3V0OworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocHJl
UGFkQW1vdW50LCBmYWxzZSk7ICAvLyBOb3RlOiByZXF1aXJlQWxpZ25tZW50KCkgYWxyZWFkeSB1
cGRhdGVkIGxheW91dAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjayhmaWVs
ZCk7CisKKyAgICAgICAgICAgIGlmIChnbHNsTGF5b3V0LnNpemVPZiA+IG1ldGFsTGF5b3V0LnNp
emVPZiAmJiBmaWVsZCAhPSBmaWVsZHMuYmFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGJvb2wgdXBkYXRlTGF5b3V0ID0gdHJ1ZTsgIC8vIFhYWDogQ29ycmVjdD8K
KyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgcGFkQW1vdW50ICA9IGdsc2xMYXlvdXQuc2l6
ZU9mIC0gbWV0YWxMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFk
QW1vdW50LCB1cGRhdGVMYXlvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBwdXNoTmFtZVBhdGgoY29uc3QgY2hhciAqZXh0cmEpCisgICAgeworICAgICAg
ICBBU1NFUlQoZXh0cmEgJiYgKmV4dHJhICE9ICdcMCcpOworICAgICAgICBuYW1lUGF0aFNpemVz
LnB1c2hfYmFjayhuYW1lUGF0aC5zaXplKCkpOworICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0
cmE7CisgICAgICAgIGlmIChuYW1lUGF0aC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBuYW1lUGF0aCA9IHA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKCpwID09ICdfJykKKyAgICAgICAgeworICAgICAgICAgICAgKytwOworICAgICAgICB9
CisgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gIngi
OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lUGF0aC5iYWNrKCkgIT0gJ18nKQorICAgICAg
ICB7CisgICAgICAgICAgICBuYW1lUGF0aCArPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRy
YSkKKyAgICB7CisgICAgICAgIGNoYXIgYnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjpkaWdpdHMxMCArIDFdOworICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEp
OworICAgICAgICBwdXNoTmFtZVBhdGgoYnVmZmVyKTsKKyAgICB9CisKKyAgcHVibGljOgorICAg
IGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnOworICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52OworCisgIHByaXZhdGU6CisgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisgICAg
TGF5b3V0IG1ldGFsTGF5b3V0VG90YWwgPSBMYXlvdXQ6OklkZW50aXR5KCk7CisgICAgc2l6ZV90
IHBhZEZpZWxkQ291bnQgICAgPSAwOworICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0gZmFs
c2U7CisgICAgYm9vbCBmaW5hbGl6ZWQgICAgICAgICAgPSBmYWxzZTsKKworICAgIHN0ZDo6dmVj
dG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG5hbWVQ
YXRoU2l6ZXM7CisgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisKKyAgICBzdGQ6OnZlY3RvcjxD
b252ZXJzaW9uSW5mbz4gY29udmVyc2lvbkluZm9zOworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGU7CisgICAgSWRHZW4gJmlkR2VuOworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMg
Jm91dE1hY2hpbmVyaWVzOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcg
TW9kaWZ5RnVuYyA9IGJvb2wgKCopKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7
CisKK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jvb2wgSWRlbnRpdHlN
b2RpZnkoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2Nr
U3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUo
KTsKKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBDbG9uZVR5cGUodHlwZSksIHN0
b3JhZ2UsIHBhY2tpbmcpOworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52
ICYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1
cm4gQWNjZXNze28sIG19OworICAgIH0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9
ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3Rh
dGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
c3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAmc3ViZmllbGRzID0gc3Vic3Ry
dWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiBzdWJm
aWVsZHMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmc3VidHlwZSAgICAgICAgICAgICAg
ICAgID0gKnN1YmZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworICAgICAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBzdWJwYWNraW5nID0gT3ZlcmxheShwYWNraW5nLCBzdWJ0
eXBlKTsKKyAgICAgICAgTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqc3ViZmllbGQsIHN1YnN0b3Jh
Z2UsIHN1YnBhY2tpbmcpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJl
Y3Vyc2VTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAg
ICA9ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0g
c3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0
YXRlLmNvbmZpZy5yZWN1cnNlU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7Cisg
ICAgaWYgKCFzdGF0ZS5yZWN1cnNlKCpzdWJzdHJ1Y3R1cmUsIG1hY2hpbmVyeSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3
IFRUeXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkKKyAgICB7CisgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisgICAgfQorCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVy
dGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOwor
ICAgIEFTU0VSVChjb252ZXJ0ZXIpOworCisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVs
ZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbigq
Y29udmVydGVyLT5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgVFR5
cGUgJnJvd1R5cGUgPSBEcm9wQ29sdW1ucyh0eXBlKTsKKworICAgIGZvciAoaW50IGMgPSAwOyBj
IDwgY29sczsgKytjKQorICAgIHsKKyAgICAgICAgc3RhdGUucHVzaFBhdGgoYyk7CisKKyAgICAg
ICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcm93VHlwZSwgc3RvcmFnZSwgcGFja2lu
Zyk7CisgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252
ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRy
aXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlw
ZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBjb25zdCBpbnQgcm93cyAgICAgICA9IHR5cGUuZ2V0Um93cygpOwor
ICAgIGNvbnN0IGludCBzYXR1cmF0aW9uID0gc3RhdGUuY29uZmlnLnNhdHVyYXRlTWF0cml4Um93
cyhmaWVsZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygp
OworICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24p
OworICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNhdFR5cGUsIHN0b3JhZ2UsIHBh
Y2tpbmcpOworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisgICAgeworICAg
ICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7ICsrcikKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3Mg
Jm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICAgICAgYXV0byAmb18gPSBBY2Nl
c3NJbmRleChBY2Nlc3NJbmRleChvLCBjKSwgcik7CisgICAgICAgICAgICAgICAgYXV0byAmbV8g
PSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEFjY2Vzc3tvXywgbV99OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXN0Qm9vbFRvVWludChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQoreworICAgIGlmIChmaWVsZC50eXBl
KCktPmdldEJhc2ljVHlwZSgpICE9IFRCYXNpY1R5cGU6OkVidEJvb2wpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29s
VG9VaW50KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0FjY2VzcyBDb252ZXJ0Qm9vbFRvVWludChDb252ZXJ0VHlwZSBj
b252ZXJ0VHlwZSwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKQoreworICAg
IGF1dG8gY29lcmNlID0gW10oVEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAt
PiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlQ29uc3RydWN0b3IodG8uZ2V0VHlwZSgpLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tfSk7
CisgICAgfTsKKyAgICBzd2l0Y2ggKGNvbnZlcnRUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBD
b252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOgorICAgICAgICAgICAgcmV0dXJuIEFjY2Vz
c3tjb2VyY2UobSwgbyksIG19OworICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpNb2RpZmllZFRv
T3JpZ2luYWw6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNze28sIGNvZXJjZShvLCBtKX07Cisg
ICAgfQorfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVj
dFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJyYXkpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAhPSBhcnJheSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCEoKHR5cGUuaXNS
YW5rMCgpICYmIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkgfHwgdHlwZS5pc1ZlY3RvcigpKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgYXV0byBzYXR1
cmF0b3IgPQorICAgICAgICBhcnJheSA/IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVj
dG9yQXJyYXlzIDogc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0b3I7CisgICAgY29u
c3QgaW50IGRpbSAgICAgICAgPSB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgY29uc3QgaW50
IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworICAgIGlmIChzYXR1cmF0aW9uIDw9IGRp
bSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmc2F0
VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisgICAgY29uc3Qg
Ym9vbCBib29sVG9VaW50ID0gVGVzdEJvb2xUb1VpbnQoc3RhdGUsIGZpZWxkKTsKKyAgICBpZiAo
Ym9vbFRvVWludCkKKyAgICB7CisgICAgICAgIHNhdFR5cGUuc2V0QmFzaWNUeXBlKFRCYXNpY1R5
cGU6OkVidFVJbnQpOworICAgIH0KKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBz
YXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGlt
OyArK2QpCisgICAgeworICAgICAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVu
diAmZW52LCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAg
ICAgIGF1dG8gJm9fID0gZGltID4gMSA/IEFjY2Vzc0luZGV4KG8sIGQpIDogbzsKKyAgICAgICAg
ICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisgICAgICAgICAgICBpZiAoYm9vbFRv
VWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xU
b1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvXywgbV99Owor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICByZXR1cm4gU2F0dXJhdGVT
Y2FsYXJPclZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIHRydWUp
OworfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3IoQ29udmVydFN0cnVjdFN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9u
KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgZmFsc2UpOworfQorCitib29sIFByb21v
dGVCb29sVG9VaW50KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBpZiAoIVRlc3RCb29sVG9V
aW50KHN0YXRlLCBmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYXV0byAmcHJvbW90ZWRUeXBlID0gQ2xvbmVUeXBlKCpmaWVsZC50eXBlKCkpOworICAg
IHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisgICAgc3Rh
dGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcHJvbW90ZWRUeXBlLCBzdG9yYWdlLCBwYWNraW5n
KTsKKworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQ29udmVy
dEJvb2xUb1VpbnQoZW52LnR5cGUsIG8sIG0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTW9kaWZ5Q29tbW9uKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgY29uc3Qg
VExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10g
PSB7CisgICAgICAgIElubGluZVN0cnVjdCwgICAgICAgICAgICAgICAgICAvLworICAgICAgICBS
ZWN1cnNlU3RydWN0LCAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1
bW5zLCAgICAgICAgICAgIC8vCisgICAgICAgIFNhdHVyYXRlTWF0cml4Um93cywgICAgICAgICAg
ICAvLworICAgICAgICBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzLCAgLy8KKyAgICAgICAg
U2F0dXJhdGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisgICAgICAgIFByb21vdGVCb29sVG9V
aW50LCAgICAgICAgICAgICAvLworICAgIH07CisKKyAgICBmb3IgKE1vZGlmeUZ1bmMgZnVuYyA6
IGZ1bmNzKQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdl
LCBwYWNraW5nKTsKK30KKworYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLmlubGlu
ZUFycmF5KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAg
ICBjb25zdCBib29sIGlzTXVsdGlEaW0gPSB0eXBlLmlzQXJyYXlPZkFycmF5cygpOworCisgICAg
YXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgY29uc3QgVEZp
ZWxkIGlubmVybW9zdEZpZWxkKCZpbm5lcm1vc3RUeXBlLCBmaWVsZC5uYW1lKCksIGZpZWxkLmxp
bmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKTsKKworICAgIGlmIChpc011bHRpRGltKQorICAgIHsK
KyAgICAgICAgc3RhdGUucHVzaFBhdGgoRmxhdHRlbkFycmF5KCkpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2b2x1bWU7ICsraSkKKyAgICB7CisgICAgICAgIHN0YXRl
LnB1c2hQYXRoKGkpOworICAgICAgICBNb2RpZnlDb21tb24oc3RhdGUsIGlubmVybW9zdEZpZWxk
LCBzdG9yYWdlLCBwYWNraW5nKTsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIGlmIChpc011bHRpRGltKQorICAgIHsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZGlmeVJlY3Vyc2l2ZShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCit7CisgICAgc3RhdGUucHVzaFBhdGgoZmllbGQpOworCisgICAgYm9vbCBtb2RpZmll
ZDsKKyAgICBpZiAoSW5saW5lQXJyYXkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkK
KyAgICB7CisgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbW9kaWZpZWQgPSBNb2RpZnlDb21tb24oc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKTsKKyAgICB9CisKKyAgICBzdGF0ZS5wb3BQYXRoKCk7CisKKyAgICByZXR1cm4gbW9k
aWZpZWQ7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworYm9vbCBzaDo6VHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25m
aWcgJmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCit7Cisg
ICAgQ29udmVydFN0cnVjdFN0YXRlIHN0YXRlKHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgb3V0
TWFjaGluZXJpZXMpOworICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJm9yaWdpbmFsRmllbGRzID0gb3JpZ2luYWxTdHJ1Y3QuZmllbGRz
KCk7CisgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZvcmlnaW5hbFR5cGUgICAgICAgICAgPSAqb3JpZ2lu
YWxGaWVsZC0+dHlwZSgpOworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBlKTsK
KyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyA9IE92ZXJsYXkoY29u
ZmlnLmluaXRpYWxNYXRyaXhQYWNraW5nLCBvcmlnaW5hbFR5cGUpOworICAgICAgICBpZiAoIU1v
ZGlmeVJlY3Vyc2l2ZShzdGF0ZSwgKm9yaWdpbmFsRmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICArK2lkZW50aWNhbEZpZWxkQ291bnQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0ZS5maW5hbGl6ZSgpOworCisgICAgaWYgKGlkZW50aWNhbEZpZWxk
Q291bnQgPT0gb3JpZ2luYWxGaWVsZHMuc2l6ZSgpICYmICFzdGF0ZS5oYXNQYWNraW5nKCkgJiYg
IXN0YXRlLmhhc1BhZGRpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4Y2Zj
NTUwNDY4MjQzOGQyYWI3YjEyMzBhOTQ5YzY5OGZkYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllT
VFJVQ1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTU9ESUZZU1RSVUNUX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIENvbnZl
cnRUeXBlCit7CisgICAgT3JpZ2luYWxUb01vZGlmaWVkLAorICAgIE1vZGlmaWVkVG9PcmlnaW5h
bCwKK307CisKKy8vIENvbmZpZ3VyZXMgaG93IHN0cnVjdCBtb2RpZmljYXRpb24gaXMgcGVyZm9y
bWVkLgorY2xhc3MgTW9kaWZ5U3RydWN0Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3Qg
UHJlZGljYXRlCisgICAgeworICAgICAgICB1c2luZyBGdW5jID0gYm9vbCAoKikoY29uc3QgVEZp
ZWxkICYpOworICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgVHJ1ZShjb25zdCBURmllbGQgJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2F0dXJhdGVWZWN0b3IKKyAgICB7
CisgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKyAg
ICAgICAgLy8gSWYgb3JpZ2luYWwgZGltID49IHJldHVybiB2YWx1ZSwgdGhlIGZpZWxkIHJlbWFp
bnMgdW50b3VjaGVkLgorICAgICAgICB1c2luZyBGdW5jID0gaW50ICgqKShjb25zdCBURmllbGQg
Jik7CisgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJl
dHVybiAwOyB9CisgICAgICAgIHN0YXRpYyBpbnQgRnVsbHlTYXR1cmF0ZShjb25zdCBURmllbGQg
JikgeyByZXR1cm4gNDsgfQorICAgIH07CisKKyAgcHVibGljOgorICAgIE1vZGlmeVN0cnVjdENv
bmZpZyhDb252ZXJ0VHlwZSBjb252ZXJ0VHlwZSwgYm9vbCBhbGxvd1BhY2tpbmcsIGJvb2wgYWxs
b3dQYWRkaW5nKQorICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNr
aW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisgICAge30KKwor
ICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cg
dmVjdG9ycy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZGlj
YXRlOjpGYWxzZTsKKworICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0aXBs
ZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorICAgIFByZWRpY2F0ZTo6RnVuYyBpbmxpbmVBcnJh
eSA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUgdGhlaXIg
c3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZVN0
cnVjdCA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2Rp
ZmllZC4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgcmVjdXJzZVN0cnVjdCA9IFByZWRpY2F0ZTo6RmFs
c2U7CisKKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQg
dG8gdWludCBmaWVsZHMuCisgICAgUHJlZGljYXRlOjpGdW5jIHByb21vdGVCb29sVG9VaW50ID0g
UHJlZGljYXRlOjpGYWxzZTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJl
IHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKyAgICAvLyBl
LmcuIGBmbG9hdCAtPiBmbG9hdDRgLgorICAgIC8vIGUuZy4gYGZsb2F0MiAtPiBmbG9hdDRgLgor
ICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0
ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUg
d2hlcmUgc2NhbGFyIG9yIHZlY3RvciBhcnJheSBmaWVsZHMgYXJlIHNhdHVyYXRlZC4KKyAgICAv
LyBlLmcuIGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKyAgICAvLyBlLmcuIGBmbG9hdDJbMTBd
IC0+IGZsb2F0NFsxMF1gCisgICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJP
clZlY3RvckFycmF5cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBD
cmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBtYXRyaXggZmllbGRzIGFyZSByb3ctc2F0dXJh
dGVkLgorICAgIC8vIGUuZy4gYGZsb2F0MngyIC0+IGZsb2F0Mng0YC4KKyAgICBTYXR1cmF0ZVZl
Y3Rvcjo6RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVy
YXRlOworCisgICAgVExheW91dEJsb2NrU3RvcmFnZSBpbml0aWFsQmxvY2tTdG9yYWdlICAgPSBr
RGVmYXVsdExheW91dEJsb2NrU3RvcmFnZTsKKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0
aWFsTWF0cml4UGFja2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKyAgICBDb252
ZXJ0VHlwZSBjb252ZXJ0VHlwZTsKKyAgICBib29sIGFsbG93UGFja2luZzsKKyAgICBib29sIGFs
bG93UGFkZGluZzsKKyAgICBBZGRyZXNzU3BhY2UgZXh0ZXJuYWxBZGRyZXNzU3BhY2U7Cit9Owor
CitzdHJ1Y3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkKK3sKKyAgICBjb25zdCBUU3RydWN0dXJl
ICptb2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVs
bHB0cjsKKworICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKiZnZXRDb252ZXJ0ZXIoQ29u
dmVydFR5cGUgY29udmVydFR5cGUpCisgICAgeworICAgICAgICBpZiAoY29udmVydFR5cGUgPT0g
Q29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKyAg
ICAgICAgfQorICAgIH0KK307CisKKy8vIEluZGV4ZWQgYnkgdG9wb2xvZ2ljYWwgb3JkZXIuCitj
bGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCit7CisgIHB1YmxpYzoKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZhdChzaXpl
X3QgaW5kZXgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRTdHJ1
Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpOworCisg
IHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9k
aWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisgICAgc3RkOjp2ZWN0
b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBvcmRlcmluZzsKK307CisKKy8vIFJldHVybnMgdHJ1ZSBh
bmQgYG91dE1hY2hpbmVyeWAgcG9wdWxhdGVkIGlmIG1vZGlmaWNhdGlvbnMgd2VyZSBwZXJmb3Jt
ZWQuCisvLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRT
dHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5
U3RydWN0Q29uZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1hY2hpbmVyaWVzKTsKKworfSAg
Ly8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TmFtZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjNWQxODVlNmZh
ZDM3NTY5ZWZjYmQ4NTVmMmFlNDAxZTY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgSW1tdXRh
YmxlU3RyaW5nIEdldE5hbWUoVCBjb25zdCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3Quc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtF
bXB0eUltbXV0YWJsZVN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC5uYW1lKCk7Cit9
CisKK05hbWU6Ok5hbWUoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBOYW1lKEdldE5hbWUoZmllbGQp
LCBmaWVsZC5zeW1ib2xUeXBlKCkpIHt9CisKK05hbWU6Ok5hbWUoY29uc3QgVFN5bWJvbCAmc3lt
Ym9sKSA6IE5hbWUoR2V0TmFtZShzeW1ib2wpLCBzeW1ib2wuc3ltYm9sVHlwZSgpKSB7fQorCiti
b29sIE5hbWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SYXdOYW1lID09IG90aGVyLm1SYXdOYW1lICYmIG1TeW1ib2xUeXBlID09IG90aGVyLm1T
eW1ib2xUeXBlOworfQorCitib29sIE5hbWU6Om9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIE5hbWU6
Om9wZXJhdG9yPChjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobVJhd05hbWUg
PCBvdGhlci5tUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAob3RoZXIubVJhd05hbWUgPCBtUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1TeW1ib2xUeXBlIDwgb3RoZXIubVN5bWJvbFR5cGU7
Cit9CisKK2Jvb2wgTmFtZTo6ZW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtU3ltYm9sVHlw
ZSA9PSBTeW1ib2xUeXBlOjpFbXB0eTsKK30KKworYm9vbCBOYW1lOjpiZWdpbnNXaXRoKGNvbnN0
IE5hbWUgJnByZWZpeCkgY29uc3QKK3sKKyAgICBpZiAobVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1T
eW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gbVJhd05hbWUuYmVnaW5zV2l0aChwcmVmaXgubVJhd05hbWUpOworfQorCit2b2lkIE5hbWU6
OmVtaXQoVEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobVN5bWJvbFR5
cGUpCisgICAgeworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1l
LmVtcHR5KCkpOworICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAg
ICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZS5i
ZWdpbnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtUmF3TmFtZVswXSAhPSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8IGtBbmdsZUludGVybmFsUHJlZml4IDw8ICdfJyA8PCBtUmF3TmFtZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwga0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorICAg
ICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKKy8vIE5PVEU6IFRoaXMg
bWF0Y2hlcyBtb3JlIHRoaW5ncyB0aGFuIEZpbmRTeW1ib2xOb2RlLgorY2xhc3MgRXhwcmVzc2lv
bkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICAgIE5h
bWUgbU5hbWU7CisgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisKKyAgcHVibGljOgorICAg
IEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisgICAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtTmFtZShuYW1lKQorICAg
IHt9CisKKyAgICBib29sIGZvdW5kTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZE5hbWU7IH0K
KworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChOYW1lKG5vZGUtPnZhcmlhYmxlKCkpID09IG1OYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRm91bmROYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqKSBvdmVycmlkZSB7
IHJldHVybiAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0K
KworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBv
dmVycmlkZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobm9kZS0+aXND
b25zdHJ1Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAg
ICAgICAgICAgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJl
ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZSAmJiBOYW1lKCpzdHJ1Y3R1cmUpID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0g
bm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMp
ID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAhbUZvdW5kTmFt
ZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0IHZpc2l0LCBUSW50ZXJtSWZF
bHNlICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJ
bnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJ
bnRlcm1DYXNlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZSB7IExPR0lDX0VSUk9SKCk7
IH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QmxvY2soVmlz
aXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1Io
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBU
SW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0TG9vcChW
aXNpdCwgVEludGVybUxvb3AgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QnJhbmNo
KFZpc2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19F
UlJPUigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdFBy
ZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJy
aWRlIHsgTE9HSUNfRVJST1IoKTsgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Citib29sIHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRl
cm1UeXBlZCAmbm9kZSkKK3sKKyAgICBFeHByZXNzaW9uQ29udGFpbnNOYW1lVmlzaXRvciB2aXNp
dG9yKG5hbWUpOworICAgIG5vZGUudHJhdmVyc2UoJnZpc2l0b3IpOworICAgIHJldHVybiB2aXNp
dG9yLmZvdW5kTmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlYWVhOGI0N2JhZjk0MjFlZDU0MDczMDEx
ZjljYjViNTA4NTA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKQEAg
LTAsMCArMSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9OQU1FX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNo
YXIga0FuZ2xlSW50ZXJuYWxQcmVmaXhbXSA9ICJBTkdMRSI7CisKKy8vIFJlcHJlc2VudHMgdGhl
IG5hbWUgb2YgYSBzeW1ib2wuCitjbGFzcyBOYW1lCit7CisgIHB1YmxpYzoKKyAgICBjb25zdGV4
cHIgTmFtZShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0ZXhwciBOYW1lKCkg
OiBOYW1lKGtFbXB0eUltbXV0YWJsZVN0cmluZywgU3ltYm9sVHlwZTo6RW1wdHkpIHt9CisKKyAg
ICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9s
VHlwZSBzeW1ib2xUeXBlKQorICAgICAgICA6IG1SYXdOYW1lKHJhd05hbWUpLCBtU3ltYm9sVHlw
ZShzeW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAo
c3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworICAgIH0KKworICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisgICAgICAgIDogTmFtZShJbW11dGFibGVT
dHJpbmcocmF3TmFtZSksIHN5bWJvbFR5cGUpCisgICAge30KKworICAgIGV4cGxpY2l0IE5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcgJnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAg
ICAgOiBOYW1lKEltbXV0YWJsZVN0cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgTmFtZShjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBleHBsaWNpdCBO
YW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCk7CisKKyAgICBOYW1lICZvcGVyYXRvcj0oY29uc3Qg
TmFtZSAmKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVy
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Owor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKworICAgIGNvbnN0
ZXhwciBjb25zdCBJbW11dGFibGVTdHJpbmcgJnJhd05hbWUoKSBjb25zdCB7IHJldHVybiBtUmF3
TmFtZTsgfQorICAgIGNvbnN0ZXhwciBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtU3ltYm9sVHlwZTsgfQorCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworICAgIGJvb2wg
YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0OworCisgICAgdm9pZCBlbWl0KFRJ
bmZvU2lua0Jhc2UgJm91dCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHJp
bmcgbVJhd05hbWU7CisgICAgU3ltYm9sVHlwZSBtU3ltYm9sVHlwZTsKK307CisKK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJ
bnRlcm1UeXBlZCAmbm9kZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU0YzM3OGExYzk1MDU5ZmQyYjY5NjhlYTYwNDQ3OGJiOWY0OGM4N2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsNDc2
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0J1aWx0SW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAo
dmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorCitib29s
IFBpcGVsaW5lOjp1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAoreworICAgIGlmICh2
YXIuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmdmFyID09IGdsb2JhbEluc3RhbmNlVmFyOworICAgIH0KKworICAgIGNv
bnN0IFRUeXBlICZub2RlVHlwZSAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworCisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxVmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmVydGV4T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9zaXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0
T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorICAgICAgICAgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRPdXQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlT3V0OgorICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmFyeWluZ091dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoK
KyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZsYXRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cVNtb290aEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2Vu
dHJvaWRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3Rp
dmVJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZhcnlpbmdJbjoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmll
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZy
YWdtZW50T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9y
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0RhdGE6CisgICAgICAg
ICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6
OlVzZXJVbmlmb3JtczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVW5pZm9ybToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFHbG9iYWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAg
ICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Nvb3Jk
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5nOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBU
eXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIGdsb2Jh
bEluc3RhbmNlVmFyIHNob3VsZCBiZSBub24tbnVsbCBhbmQgdGh1cyBuZXZlciByZWFjaCBoZXJl
LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkp
OworCisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIHJldHVybiBO
YW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworICAg
IH0KK30KKworTmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50
KSBjb25zdAoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJ
QU5UX05BTUUodmFyaWFudCwgIlZlcnRleEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJWZXJ0ZXhPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJGcmFnbWVudEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpGcmFnbWVudE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
IkZyYWdtZW50T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpV
c2VyVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJV
c2VyVW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkFu
Z2xlVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJB
bmdsZVVuaWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpO
b25Db25zdGFudEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJOb25Db25zdEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklB
TlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisg
ICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uRnJhZ21l
bnRHbG9iYWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVGV4dHVyZUVu
dnMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnN0YW5jZUlkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5hbWUobmFtZSk7Cit9CisK
K05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdEluc3RhbmNlTmFtZShWYXJpYW50IHZhcmlhbnQpIGNv
bnN0Cit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgInZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
ImZyYWdtZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiZnJh
Z21lbnRPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVzZXJV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInVzZXJV
bmlmb3JtcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImFuZ2xl
VW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5vbkNv
bnN0YW50R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
Im5vbkNvbnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAg
ICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImludm9jYXRpb25GcmFnbWVudEds
b2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ0ZXh0dXJlRW52cyIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAg
ICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImluc3RhbmNlSWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKworc3Rh
dGljIGJvb2wgQWxsb3dQYWNraW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcg
VHlwZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
ICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91
dDoKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNh
c2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRp
b25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEds
b2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlw
ZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
SW46CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
QW5nbGVVbmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KK2VudW0gQ29tcGFy
ZQoreworICAgIExULAorICAgIExURSwKKyAgICBFUSwKKyAgICBHVEUsCisgICAgR1QsCit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIENvbXBhcmVCeShDb21wYXJlIG9w
LCBjb25zdCBUICZ4LCBjb25zdCBUICZ5KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIExUOgorICAgICAgICAgICAgcmV0dXJuIHggPCB5OworICAgICAgICBjYXNlIExU
RToKKyAgICAgICAgICAgIHJldHVybiB4IDw9IHk7CisgICAgICAgIGNhc2UgRVE6CisgICAgICAg
ICAgICByZXR1cm4geCA9PSB5OworICAgICAgICBjYXNlIEdURToKKyAgICAgICAgICAgIHJldHVy
biB4ID49IHk7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICByZXR1cm4geCA+IHk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8VEJhc2ljVHlwZSBCVCwgQ29tcGFyZSBDbXAsIGludCBNYXRj
aERpbSwgaW50IE5ld0RpbT4KK3N0YXRpYyBpbnQgU2F0dXJhdGVWZWN0b3JPZihjb25zdCBURmll
bGQgJmZpZWxkKQoreworICAgIHN0YXRpY19hc3NlcnQoTmV3RGltID49IE1hdGNoRGltLCAiIik7
CisKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgQVNTRVJUKHR5
cGUuaXNTY2FsYXIoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworCisgICAgY29uc3QgYm9vbCBjb25k
ID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICBDb21wYXJlQnkoQ21wLCB0eXBlLmdldE5vbWluYWxTaXplKCksIE1h
dGNoRGltKTsKKworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5ld0RpbTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK01vZGlmeVN0cnVjdENvbmZpZyBQaXBlbGluZTo6
ZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlDb25maWcoKSBjb25zdAoreworICAgIHVzaW5nIFByZWQgICA9
IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworICAgIHVzaW5nIFNhdFZlYyA9IE1vZGlm
eVN0cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcg
Y29uZmlnKAorICAgICAgICBpc1BpcGVsaW5lT3V0KCkgPyBDb252ZXJ0VHlwZTo6T3JpZ2luYWxU
b01vZGlmaWVkIDogQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9PcmlnaW5hbCwKKyAgICAgICAgQWxs
b3dQYWNraW5nKHR5cGUpLCBBbGxvd1BhZGRpbmcodHlwZSkpOworCisgICAgY29uZmlnLmV4dGVy
bmFsQWRkcmVzc1NwYWNlID0gZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLmlu
bGluZVN0cnVjdCAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJh
eSAgICAgICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29s
dW1ucyA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAg
ID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVk
OjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRy
dWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVs
ZCAmZmllbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9m
PFRCYXNpY1R5cGU6OkVidEludCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidFVJ
bnQsIExULCA0LCA0PihmaWVsZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3Jt
czoKKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZU1hdHJpeFJvd3MgICAgICAgICAg
ID0gU2F0VmVjOjpGdWxseVNhdHVyYXRlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlU2Nh
bGFyT3JWZWN0b3JBcnJheXMgPSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBj
b25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAg
ICAgICBjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDQzMDsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBU
eXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6OlRleHR1
cmU6CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBjb25maWc7Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmFsd2F5c1Jl
cXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBj
YXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgor
ICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAg
ICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lOjppc1BpcGVsaW5lT3V0KCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
ICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVu
aWZvcm1zOgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25W
ZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2Jh
bHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitBZGRyZXNzU3BhY2UgUGlwZWxpbmU6OmV4dGVybmFs
QWRkcmVzc1NwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6
Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25G
cmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3Bh
Y2U6OlRocmVhZDsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAg
Y2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFj
ZTo6Q29uc3RhbnQ7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lU3RydWN0czo6bWF0Y2hlcyhj
b25zdCBUU3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdAor
eworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBzW10gPSB7CisgICAgICAgIGZyYWdt
ZW50SW4sCisgICAgICAgIGZyYWdtZW50T3V0LAorICAgICAgICB2ZXJ0ZXhJbiwKKyAgICAgICAg
dmVydGV4T3V0LAorICAgICAgICB1c2VyVW5pZm9ybXMsCisgICAgICAgIGFuZ2xlVW5pZm9ybXMs
CisgICAgICAgIG5vbkNvbnN0YW50R2xvYmFscywKKyAgICAgICAgaW52b2NhdGlvblZlcnRleEds
b2JhbHMsCisgICAgICAgIGludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsCisgICAgICAgIHRleHR1
cmUsCisgICAgICAgIGluc3RhbmNlSWQsCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnAg
OiBwcykKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbCAmJiBwLmludGVybmFsID09ICZzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZXh0ZXJuYWwgJiYgcC5leHRlcm5hbCA9PSAmcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YmY0NzZhZGZkNjQ2MGIwZDllZmM2YWIxZDBmMzc5ZDNmMTNiMTc1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMjMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfUElQRUxJTkVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfUElQRUxJTkVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sK
KworLy8gRGF0YSB0aGF0IGlzIHNjb3BlZCBhcyBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIGZv
ciBhIGdpdmVuIHBpcGVsaW5lLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUGlwZWxp
bmVTY29wZWQKK3sKKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVy
bmFsbHkgdG8gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGludGVybmFs
YCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgaW50ZXJuYWxgLgorICAgIGNvbnN0IFQgKmV4
dGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRh
bGsgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdp
dGggYGV4dGVybmFsYCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgZXh0ZXJuYWxgLgorICAg
IGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYg
dGhlIGlucHV0IGNvaW5jaWRlcyB3aXRoIGVpdGhlciBgZXh0ZXJuYWxgIG9yIGBpbnRlcm5hbGAg
ZGF0YS4KKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJldHVybiBl
eHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKworICAgIC8vIEJv
dGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG5vbi1udWxs
LgorICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsICYmIGlu
dGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgcmVwcmVz
ZW50YXRpb25zIGFyZSBudWxsLgorICAgIGJvb2wgaXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAg
YW5kIGBpbnRlcm5hbGAgcmVwcmVzZW50YXRpb25zIGFyZSB0aGUgc2FtZS4KKyAgICBib29sIGlz
VW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVybmFsOyB9Cit9OworCisv
LyBSZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVsaW5lLgorY2xhc3MgUGlwZWxp
bmUKK3sKKyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZQorICAgIHsKKyAgICAgICAgVmVy
dGV4SW4sCisgICAgICAgIFZlcnRleE91dCwKKyAgICAgICAgRnJhZ21lbnRJbiwKKyAgICAgICAg
RnJhZ21lbnRPdXQsCisgICAgICAgIFVzZXJVbmlmb3JtcywKKyAgICAgICAgQW5nbGVVbmlmb3Jt
cywKKyAgICAgICAgTm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uVmVydGV4
R2xvYmFscywKKyAgICAgICAgSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgVGV4
dHVyZSwKKyAgICAgICAgSW5zdGFuY2VJZCwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBWYXJp
YW50CisgICAgeworICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisg
ICAgICAgIC8vIEZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHBpcGVsaW5lIGRvZXMgbm90
IHJlcXVpcmUgc3BsaXR0aW5nIG9yIHNhdHVyYXRpb24uCisgICAgICAgIE9yaWdpbmFsLAorCisg
ICAgICAgIC8vIE9ubHkgZm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgdGhlIHBpcGVsaW5l
IHdhcyBzcGxpdCBvciBzYXR1cmF0ZWQuCisgICAgICAgIE1vZGlmaWVkLAorICAgIH07CisKKyAg
cHVibGljOgorICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKyAgICBUeXBlIHR5cGU7
CisKKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUg
c3RydWN0IGFscmVhZHkgZXhpc3RzLgorICAgIC8vIElmIG5vbi1udWxsIHN0cnVjdCBzcGxpdHRp
bmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCisgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0
YW5jZVZhcjsKKworICBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdmFyaWFi
bGUgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUuCisgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJs
ZSAmdmFyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3Qg
dHlwZSB0aGF0IHN0b3JlcyB2YXJpYWJsZXMgb2YgdGhpcyBwaXBlbGluZS4KKyAgICBOYW1lIGdl
dFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBuYW1lIGZvciB0aGUgc3RydWN0IGluc3RhbmNlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBv
ZiB0aGlzIHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQg
dmFyaWFudCkgY29uc3Q7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgZXh0ZXJuYWxTdHJ1Y3RN
b2RpZnlDb25maWcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGlwZWxp
bmUgYWx3YXlzIHJlcXVpcmVzIGEgbm9uLXBhcmFtZXRlciBsb2NhbCBpbnN0YW5jZSBkZWNsYXJh
dGlvbiBvZgorICAgIC8vIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorICAgIGJvb2wgYWx3YXlz
UmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdDsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHBpcGVsaW5lIGlzIGFuIG91dHB1dCBwaXBlbGluZS4gVGhl
IGV4dGVybmFsIHBpcGVsaW5lIHN0cnVjdHVyZSBzaG91bGQKKyAgICAvLyBiZSByZXR1cm5lZCBm
cm9tIGBtYWluYC4KKyAgICBib29sIGlzUGlwZWxpbmVPdXQoKSBjb25zdDsKKworICAgIEFkZHJl
c3NTcGFjZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0OworfTsKKworLy8gQSBjb2xsZWN0
aW9uIG9mIHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4KK3N0cnVjdCBQaXBlbGluZVN0cnVj
dHMgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBmcmFnbWVudEluOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGZyYWdtZW50T3V0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleEluOworICAgIFBpcGVsaW5l
U2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0
dXJlPiB1c2VyVW5pZm9ybXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gYW5nbGVV
bmlmb3JtczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvblZlcnRleEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvbkZyYWdtZW50R2xv
YmFsczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworICAgIFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGluc3RhbmNlSWQ7CisKKyAgICBib29sIG1hdGNoZXMoY29u
c3QgVFN0cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7Cit9
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QSVBFTElORV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGJmNWEwMmZlMGRiMGJlZDNkMmFhM2M5NTVjYzk5OTI3NTNiN2M4MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKQEAgLTAsMCAr
MSwzNzU3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
bmFtZXNwYWNlCit7CisKK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgICB1c2luZyBMaW5lVGFnICAgICAgID0gdW5zaWduZWQ7CisgICAgdXNpbmcg
RnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlv
biAmKTsKKyAgICB1c2luZyBGdW5jVG9FbWl0dGVyID0gc3RkOjptYXA8TmFtZSwgRnVuY0VtaXR0
ZXI+OworCisgIHB1YmxpYzoKKyAgICBQcm9ncmFtUHJlbHVkZShUSW5mb1NpbmtCYXNlICZvdXQs
IGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0KG91dCkKKyAgICB7CisgICAgICAgIEFMV0FZ
U19JTkxJTkUoKTsKKworICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgZXF1YWxNYXRyaXgoKTsKKyAg
ICAgICAgfQorCisjaWYgMQorICAgICAgICBtT3V0IDw8ICIjZGVmaW5lIEFOR0xFX3RlbnNvciBt
ZXRhbDo6YXJyYXlcbiI7CisjZWxzZQorICAgICAgICB0ZW5zb3IoKTsKKyNlbmRpZgorICAgIH0K
KworICBwcml2YXRlOgorICAgIGJvb2wgZW1pdEd1YXJkKExpbmVUYWcgbGluZVRhZykKKyAgICB7
CisgICAgICAgIGlmIChtRW1pdHRlZC5maW5kKGxpbmVUYWcpICE9IG1FbWl0dGVkLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
bUVtaXR0ZWQuaW5zZXJ0KGxpbmVUYWcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRnVuY1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKworICAgIHZv
aWQgdmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEg
PSBudWxscHRyKTsKKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcik7CisgICAgdm9pZCB2aXNpdFN0cnVjdHVyZShjb25zdCBUU3RydWN0dXJlICZzKTsKKwor
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRl
OworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlk
ZTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNs
YXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpub2RlKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHZvaWQgQUxXQVlTX0lOTElO
RSgpOworCisgICAgdm9pZCBpbmNsdWRlX21ldGFsX2F0b21pYygpOworICAgIHZvaWQgaW5jbHVk
ZV9tZXRhbF9jb21tb24oKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7Cisg
ICAgdm9pZCBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgdm9pZCBpbmNsdWRlX21ldGFs
X21hdGgoKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgdm9pZCBpbmNs
dWRlX21ldGFsX3BhY2soKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgpOwor
CisgICAgdm9pZCBlbmFibGVfaWYoKTsKKyAgICB2b2lkIHNjYWxhcl9vZigpOworICAgIHZvaWQg
aXNfc2NhbGFyKCk7CisgICAgdm9pZCBpc192ZWN0b3IoKTsKKyAgICB2b2lkIGlzX21hdHJpeCgp
OworICAgIHZvaWQgYWRkcmVzc29mKCk7CisgICAgdm9pZCBkaXN0YW5jZSgpOworICAgIHZvaWQg
bGVuZ3RoKCk7CisgICAgdm9pZCBkb3QoKTsKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIHZv
aWQgZmFjZWZvcndhcmQoKTsKKyAgICB2b2lkIHJlZmxlY3QoKTsKKyAgICB2b2lkIHJlZnJhY3Qo
KTsKKyAgICB2b2lkIGRlZ3JlZXMoKTsKKyAgICB2b2lkIHJhZGlhbnMoKTsKKyAgICB2b2lkIG1v
ZCgpOworICAgIHZvaWQgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgcHJlSW5jcmVt
ZW50TWF0cml4KCk7CisgICAgdm9pZCBwb3N0RGVjcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBw
cmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworICAgIHZvaWQg
bWF0bXVsQXNzaWduKCk7CisgICAgdm9pZCBhdGFuKCk7CisgICAgdm9pZCBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpOworICAgIHZvaWQg
YWRkTWF0cml4U2NhbGFyKCk7CisgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lk
IGRpdk1hdHJpeFNjYWxhcigpOworICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyRmFzdCgpOworICAg
IHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJB
c3NpZ25GYXN0KCk7CisgICAgdm9pZCB0ZW5zb3IoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VE
aXZpZGUoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24oKTsKKyAgICB2b2lk
IGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOworICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisgICAg
dm9pZCBpbnZlcnNlMigpOworICAgIHZvaWQgaW52ZXJzZTMoKTsKKyAgICB2b2lkIGludmVyc2U0
KCk7CisgICAgdm9pZCBlcXVhbFZlY3RvcigpOworICAgIHZvaWQgZXF1YWxNYXRyaXgoKTsKKyAg
ICB2b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBub3RFcXVhbFN0cnVjdCgpOworICAg
IHZvaWQgZXF1YWxBcnJheSgpOworICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworICAgIHZvaWQg
c2lnbigpOworICAgIHZvaWQgcGFja19oYWxmXzJ4MTYoKTsKKyAgICB2b2lkIHVucGFja19oYWxm
XzJ4MTYoKTsKKyAgICB2b2lkIHZlY3RvckVsZW1SZWYoKTsKKyAgICB2b2lkIHN3aXp6bGVSZWYo
KTsKKyAgICB2b2lkIG91dCgpOworICAgIHZvaWQgaW5vdXQoKTsKKyAgICB2b2lkIGZsYXR0ZW5B
cnJheSgpOworICAgIHZvaWQgY2FzdFZlY3RvcigpOworICAgIHZvaWQgY2FzdE1hdHJpeCgpOwor
ICAgIHZvaWQgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAgICB2b2lkIGdyYWRpZW50KCk7CisgICAg
dm9pZCB0ZXh0dXJlRW52KCk7CisgICAgdm9pZCB0ZXhlbEZldGNoKCk7CisgICAgdm9pZCB0ZXhl
bEZldGNoT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7
CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7
CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5
X2Zsb2F0NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0M19mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlMURMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUxRFByb2ooKTsKKyAgICB2
b2lkIHRleHR1cmUxRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRCgpOworICAgIHZvaWQg
dGV4dHVyZTJETG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisgICAgdm9pZCB0ZXh0
dXJlMkRQcm9qTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlM0RMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmUzRFByb2ooKTsKKyAgICB2b2lkIHRleHR1cmUzRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVDdWJlKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUN1
YmVQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVHcmFkKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxv
YXROKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQy
KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7
CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOwor
ICAgIHZvaWQgdGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICB2b2lkIHRleHR1cmVH
cmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQg
dGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVf
ZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRf
dGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVy
ZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgIHZvaWQg
dGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF9kZXB0aDJk
X2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisgICAgdm9pZCB0
ZXh0dXJlTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlT2Zmc2V0KCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvaigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisgICAgdm9p
ZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVQ
cm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zs
b2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2QoKTsKKyAgICB2b2lk
IHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxv
ZF9nZW5lcmljX2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvak9mZnNldCgp
OworICAgIHZvaWQgdGV4dHVyZVNpemUoKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jh
c2UgJm1PdXQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PExpbmVUYWc+IG1FbWl0dGVkOworICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3ltYm9sICo+IG1IYW5kbGVkOworICAgIGNvbnN0
IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKK307
CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworI2RlZmluZSBQUk9HUkFNX1BSRUxVREVfSU5DTFVERShoZWFkZXIpICAgICAgICAgICAgIFwK
KyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjppbmNsdWRlXyMjaGVhZGVyKCkgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBpZiAoZW1pdEd1YXJkKF9fTElORV9fKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBtT3V0IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNk
ZWZpbmUgUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmFtZSwgY29kZSwgLi4uKSAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCBQcm9ncmFtUHJlbHVkZTo6bmFtZSgpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQVNTRVJUKGNvZGVbMF0gPT0gJ1xu
Jyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbWl0R3Vh
cmQoX19MSU5FX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIF9fVkFfQVJHU19fOyAvKiBkZXBlbmRlbmNpZXMgKi8gICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBtT3V0IDw8IChzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+
KGNvZGUgIlxuIikgKyAxKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2F0b21pYykKK1BST0dSQU1f
UFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1l
dGFsX2dlb21ldHJpYykKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dyYXBoaWNzKQor
UFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKK1BST0dSQU1fUFJFTFVERV9JTkNM
VURFKG1ldGFsX21hdHJpeCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3BhY2spCitQ
Uk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShBTFdBWVNfSU5MSU5FLCBSIigK
KyNkZWZpbmUgQU5HTEVfQUxXQVlTX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l
KSkKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlbmFibGVfaWYsIFIiKAordGVtcGxh
dGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmIHt9
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+
Cit7CisgICAgdXNpbmcgdHlwZSA9IFQ7Cit9OwordGVtcGxhdGUgPGJvb2wgQj4KK3VzaW5nIEFO
R0xFX2VuYWJsZV9pZl90ID0gdHlwZW5hbWUgQU5HTEVfZW5hYmxlX2lmPEI+Ojp0eXBlOworKSIp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNjYWxhcl9vZiwgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9zY2FsYXJfb2YKK3sKKyAgICB1c2luZyB0eXBlID0gVDsK
K307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlw
ZW5hbWUgQU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGlzX3NjYWxhciwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9pc19zY2FsYXIge307CisjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3NjYWxhcjxzY2FsYXI+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9CitBTkdMRV9ERUZJTkVfU0NBTEFSKGJvb2wpOworQU5HTEVfREVGSU5F
X1NDQUxBUihjaGFyKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoc2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUihpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKK0FOR0xFX0RFRklORV9T
Q0FMQVIodWNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUih1c2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKK0FOR0xFX0RFRklORV9TQ0FMQVIodWxvbmcpOworQU5HTEVfREVGSU5F
X1NDQUxBUihoYWxmKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKSIpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCit7CisgICAg
ZW51bSB7IHZhbHVlID0gZmFsc2UgfTsKK307CisjZGVmaW5lIEFOR0xFX0RFRklORV9WRUNUT1Io
c2NhbGFyKSBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6
c2NhbGFyICMjIDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUg
PD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3Rv
cjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAg
dGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDI+IHsg
dXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwK
KyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMg
ND4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9CitBTkdMRV9ERUZJTkVfVkVDVE9SKGJvb2wpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKK0FOR0xFX0RFRklORV9WRUNUT1Ioc2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihsb25nKTsKK0FO
R0xFX0RFRklORV9WRUNUT1IodWNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1c2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKK0FOR0xFX0RFRklORV9WRUNUT1IodWxvbmcpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihoYWxmKTsKK0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOwor
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoaXNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19tYXRyaXgKK3sKKyAgICBlbnVtIHsg
dmFsdWUgPSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX01BVFJJWChzY2FsYXIp
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMngyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAyeDM+IHsgZW51bSB7IHZhbHVl
ID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxt
ZXRhbDo6c2NhbGFyICMjIDJ4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7
IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdM
RV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9
OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2Nh
bGFyICMjIDN4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2
YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRy
aXg8bWV0YWw6OnNjYWxhciAjIyA0eDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDR4
ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2Fs
YXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpz
Y2FsYXIgIyMgMngzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29m
PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7
IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgzPiB7IHVzaW5nIHR5cGUgPSBz
Y2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgNHg0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9N
QVRSSVgoaGFsZik7CitBTkdMRV9ERUZJTkVfTUFUUklYKGZsb2F0KTsKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGFk
ZHJlc3NvZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBUICogQU5HTEVfYWRkcmVzc29mKHRocmVh
ZCBUICZyZWYpCit7CisgICAgcmV0dXJuICZyZWY7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Rpc3Rh
bmNlX2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0
YW5jZSh4LCB5KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5H
TEVfZGlzdGFuY2VfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46
OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBU
IHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmFicyh4IC0geSk7CisgICAgfQorfTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gQU5HTEVfZGlz
dGFuY2VfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlX21ldGFsX21hdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
c3RydWN0IEFOR0xFX2xlbmd0aF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4g
bWV0YWw6Omxlbmd0aCh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgQU5HTEVfbGVuZ3RoX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8
VD4gQU5HTEVfbGVuZ3RoKFQgeCkKK3sKKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46
OmV4ZWMoeCk7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9y
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZG90LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+
IGV4ZWMoVCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRvdCh4LCB5KTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8
VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAg
c3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHggKiB5OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5HTEVfZG90KFQgeCwgVCB5KQor
eworICAgIHJldHVybiBBTkdMRV9kb3RfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
bm9ybWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWV0YWw6Om5vcm1hbGl6ZSh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxl
X2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9zaWdu
KHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9ub3JtYWxpemUoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9ub3JtYWxpemVf
aW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1
ZGVfbWV0YWxfY29tbW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZh
Y2Vmb3J3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9p
bXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBU
IG5yZWYpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmZhY2Vmb3J3YXJkKG4sIGksIG5y
ZWYpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9mYWNl
Zm9yd2FyZF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6dmFs
dWU+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIG4sIFQgaSwg
VCBucmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkg
PyBuIDogLW47CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX2ZhY2Vmb3J3YXJkKFQgbiwgVCBpLCBUIG5yZWYpCit7CisgICAgcmV0
dXJuIEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7Cit9OworKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmbGVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9
IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfcmVmbGVjdF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZsZWN0KGksIG4pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
aSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgLSBUKDIpICogQU5HTEVfZG90KG4sIGkp
ICogbjsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfcmVmbGVjdChUIGksIFQgbikKK3sKKyAgICByZXR1cm4gQU5HTEVfcmVmbGVj
dF9pbXBsPFQ+OjpleGVjKGksIG4pOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJs
ZV9pZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21h
dHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHJlZnJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3JlZnJh
Y3RfaW1wbAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIGksIFQg
biwgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZyYWN0KGksIG4sIGV0YSk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IEFOR0xFX3JlZnJhY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19z
Y2FsYXI8VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4
ZWMoVCBpLCBUIG4sIFQgZXRhKQorICAgIHsKKyAgICAgICAgYXV0byBkb3ROSSA9IG4gKiBpOwor
ICAgICAgICBhdXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5J
KTsKKyAgICAgICAgaWYgKGsgPCBUKDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
VCgwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBldGEgKiBpIC0gKGV0YSAqIGRvdE5JICsgbWV0YWw6OnNxcnQoaykpICogbjsKKyAgICAg
ICAgfQorICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCit7
CisgICAgcmV0dXJuIEFOR0xFX3JlZnJhY3RfaW1wbDxUPjo6ZXhlYyhpLCBuLCBldGEpOworfTsK
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19z
Y2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfbWF0cml4KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNp
Z24sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbAoreworICAgIHN0
YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1
cm4gbWV0YWw6OnNpZ24oeCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVf
c2lnbl9pbXBsPGludD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBpbnQgZXhl
YyhpbnQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbDxtZXRhbDo6dmVj
PGludCwgTj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxp
bnQsIE4+IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisgICAgeworICAgICAgICBtZXRhbDo6
dmVjPGludCwgTj4gczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNbaV0gPSBBTkdMRV9zaWduX2ltcGw8aW50Pjo6ZXhlYyh4W2ld
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfc2lnbihUIHgpCit7CisgICAg
cmV0dXJuIEFOR0xFX3NpZ25faW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGF0YW4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCit7Cisg
ICAgcmV0dXJuIG1ldGFsOjphdGFuKHlPdmVyWCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9hdGFuKFQgeSwgVCB4KQoreworICAgIHJldHVy
biBtZXRhbDo6YXRhbjIoeSwgeCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2Rl
Z3JlZXMoVCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPig1Ny4yOTU3Nzk1MTMwODIz
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJhZGlhbnMsIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfcmFkaWFu
cyhUIHgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUt
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG1vZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIFggQU5HTEVfbW9kKFggeCwgWSB5KQoreworICAgIHJldHVybiB4
IC0geSAqIG1ldGFsOjpmbG9vcih4IC8geSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwYWNr
X2hhbGZfMngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVfQUxXQVlTX0lO
TElORSB1aW50IEFOR0xFX3BhY2tfaGFsZl8yeDE2KGZsb2F0MiB2KQoreworICAgIHJldHVybiBh
c190eXBlPHVpbnQ+KGhhbGYyKHYpKTsKK30KKykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHVucGFja19oYWxmXzJ4MTYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK0FOR0xF
X0FMV0FZU19JTkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorewor
ICAgIHJldHVybiBmbG9hdDIoYXNfdHlwZTxoYWxmMj4oeCkpOworfQorKSIsICkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwg
Tj4gJm9wZXJhdG9yKj0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJmEsIG1ldGFsOjpt
YXRyaXg8VCwgTiwgTj4gYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9Cisp
IikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBp
bnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQp
Cit7CisgICAgYXV0byBiID0gYTsKKyAgICBhICs9IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQorewor
ICAgIGEgKz0gVCgxKTsKKyAgICByZXR1cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHBvc3REZWNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgaW50KQoreworICAgIGF1dG8gYiA9IGE7CisgICAgYSAt
PSBUKDEpOworICAgIHJldHVybiBiOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dWJNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocHJlRGVj
cmVtZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSkKK3sKKyAgICBhIC09IFQoMSk7CisgICAgcmV0dXJuIGE7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShuZWdhdGVNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSkKK3sKKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIHRocmVhZCBhdXRvICZt
Q29sID0gbVtjb2xdOworICAgICAgICBtQ29sID0gLW1Db2w7CisgICAgfQorICAgIHJldHVybiBt
OworfQorKSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNz
aWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVy
YXRvcis9KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7Cisg
ICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAg
ICBtW2NvbF0gKz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtICs9IHg7CisgICAgcmV0dXJu
IG07Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2ln
bigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXJBc3NpZ24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZvcGVyYXRvci09KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJv
d3M+ICZtLCBUIHgpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytj
b2wpCisgICAgeworICAgICAgICBtW2NvbF0gLT0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9
CispIiwgKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywg
aW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gb3BlcmF0b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAg
IG0gLT0geDsKKyAgICByZXR1cm4gbTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
c3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1h
dHJpeFNjYWxhckFzc2lnbkZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci89KHRocmVhZCBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgeCA9IFQoMSkgLyB4
OworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAg
ICAgICAgbVtjb2xdICo9IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmbSwgVCB4
KQoreworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsK
KyAgICAgICAgbVtjb2xdIC89IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyRmFzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fIDw9IDIyMAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xz
LCBSb3dzPiBtLCBUIHgpCit7CisgICAgbSAvPSB4OworICAgIHJldHVybiBtOworfQorI2VuZGlm
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhckFzc2lnbkZhc3Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENv
bHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5k
aWYKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGUsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAg
Zm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBh
W2NvbF0gLz0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1
cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHksIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBBTkdMRV9jb21wb25lbnRXaXNl
TXVsdGlwbHkobWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+IGIpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsg
Kytjb2wpCisgICAgeworICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworICAgIH0KKyAgICByZXR1
cm4gYTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBNLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBOLCBNPiBBTkdMRV9vdXRlclByb2R1Y3QobWV0YWw6OnZlYzxU
LCBNPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgbWV0YWw6Om1hdHJpeDxULCBOLCBN
PiBvOworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgTjsgKytuKQorICAgIHsKKyAgICAgICAg
b1tuXSA9IHUgKiB2W25dOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShpbnZlcnNlMiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1l
dGFsOjptYXRyaXg8VCwgMiwgMj4gbSkKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IGFk
ajsKKyAgICBhZGpbMF1bMF0gPSAgbVsxXVsxXTsKKyAgICBhZGpbMF1bMV0gPSAtbVswXVsxXTsK
KyAgICBhZGpbMV1bMF0gPSAtbVsxXVswXTsKKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKyAg
ICBUIGRldCA9IChhZGpbMF1bMF0gKiBtWzBdWzBdKSArIChhZGpbMF1bMV0gKiBtWzFdWzBdKTsK
KyAgICByZXR1cm4gYWRqICogKFQoMSkgLyBkZXQpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIDMsIDM+IEFOR0xFX2ludmVyc2UobWV0YWw6Om1h
dHJpeDxULCAzLCAzPiBtKQoreworICAgIFQgYSA9IG1bMV1bMV0gKiBtWzJdWzJdIC0gbVsyXVsx
XSAqIG1bMV1bMl07CisgICAgVCBiID0gbVsxXVswXSAqIG1bMl1bMl07CisgICAgVCBjID0gbVsx
XVsyXSAqIG1bMl1bMF07CisgICAgVCBkID0gbVsxXVswXSAqIG1bMl1bMV07CisgICAgVCBkZXQg
PSBtWzBdWzBdICogKGEpIC0KKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKyAgICAg
ICAgICAgIG1bMF1bMl0gKiAoZCAtIG1bMV1bMV0gKiBtWzJdWzBdKTsKKyAgICBkZXQgPSBUKDEp
IC8gZGV0OworICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKyAgICBtaW52WzBdWzBd
ID0gKGEpICogZGV0OworICAgIG1pbnZbMF1bMV0gPSAobVswXVsyXSAqIG1bMl1bMV0gLSBtWzBd
WzFdICogbVsyXVsyXSkgKiBkZXQ7CisgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsy
XSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKyAgICBtaW52WzFdWzBdID0gKGMgLSBiKSAq
IGRldDsKKyAgICBtaW52WzFdWzFdID0gKG1bMF1bMF0gKiBtWzJdWzJdIC0gbVswXVsyXSAqIG1b
Ml1bMF0pICogZGV0OworICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBtWzBd
WzBdICogbVsxXVsyXSkgKiBkZXQ7CisgICAgbWludlsyXVswXSA9IChkIC0gbVsyXVswXSAqIG1b
MV1bMV0pICogZGV0OworICAgIG1pbnZbMl1bMV0gPSAobVsyXVswXSAqIG1bMF1bMV0gLSBtWzBd
WzBdICogbVsyXVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICogbVsxXVsx
XSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKyAgICByZXR1cm4gbWludjsKK30KKykiKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbnZlcnNlNCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCA0LCA0PiBBTkdMRV9p
bnZlcnNlKG1ldGFsOjptYXRyaXg8VCwgNCwgND4gbSkKK3sKKyAgICBUIEEyMzIzID0gbVsyXVsy
XSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKyAgICBUIEExMzIzID0gbVsyXVsxXSAq
IG1bM11bM10gLSBtWzJdWzNdICogbVszXVsxXTsKKyAgICBUIEExMjIzID0gbVsyXVsxXSAqIG1b
M11bMl0gLSBtWzJdWzJdICogbVszXVsxXTsKKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11b
M10gLSBtWzJdWzNdICogbVszXVswXTsKKyAgICBUIEEwMjIzID0gbVsyXVswXSAqIG1bM11bMl0g
LSBtWzJdWzJdICogbVszXVswXTsKKyAgICBUIEEwMTIzID0gbVsyXVswXSAqIG1bM11bMV0gLSBt
WzJdWzFdICogbVszXVswXTsKKyAgICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFd
WzNdICogbVszXVsyXTsKKyAgICBUIEExMzEzID0gbVsxXVsxXSAqIG1bM11bM10gLSBtWzFdWzNd
ICogbVszXVsxXTsKKyAgICBUIEExMjEzID0gbVsxXVsxXSAqIG1bM11bMl0gLSBtWzFdWzJdICog
bVszXVsxXTsKKyAgICBUIEEyMzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsy
XVsyXTsKKyAgICBUIEExMzEyID0gbVsxXVsxXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsx
XTsKKyAgICBUIEExMjEyID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVsxXTsK
KyAgICBUIEEwMzEzID0gbVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKyAg
ICBUIEEwMjEzID0gbVsxXVswXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVswXTsKKyAgICBU
IEEwMzEyID0gbVsxXVswXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVswXTsKKyAgICBUIEEw
MjEyID0gbVsxXVswXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKyAgICBUIEEwMTEz
ID0gbVsxXVswXSAqIG1bM11bMV0gLSBtWzFdWzFdICogbVszXVswXTsKKyAgICBUIEEwMTEyID0g
bVsxXVswXSAqIG1bMl1bMV0gLSBtWzFdWzFdICogbVsyXVswXTsKKyAgICBUIGEgPSBtWzFdWzFd
ICogQTIzMjMgLSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisgICAgVCBiID0g
bVsxXVswXSAqIEEyMzIzIC0gbVsxXVsyXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMjIzOworICAg
IFQgYyA9IG1bMV1bMF0gKiBBMTMyMyAtIG1bMV1bMV0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDEy
MzsKKyAgICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJd
ICogQTAxMjM7CisgICAgVCBkZXQgPSBtWzBdWzBdICogKCBhICkKKyAgICAgICAgICAtIG1bMF1b
MV0gKiAoIGIgKQorICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisgICAgICAgICAgLSBtWzBd
WzNdICogKCBkICk7CisgICAgZGV0ID0gVCgxKSAvIGRldDsKKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworICAgIGltWzBdWzBdID0gZGV0ICogICAoIGEgKTsKKyAgICBpbVswXVsxXSA9
IGRldCAqIC0gKCBtWzBdWzFdICogQTIzMjMgLSBtWzBdWzJdICogQTEzMjMgKyBtWzBdWzNdICog
QTEyMjMgKTsKKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBd
WzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKyAgICBpbVswXVszXSA9IGRldCAqIC0g
KCBtWzBdWzFdICogQTIzMTIgLSBtWzBdWzJdICogQTEzMTIgKyBtWzBdWzNdICogQTEyMTIgKTsK
KyAgICBpbVsxXVswXSA9IGRldCAqIC0gKCBiICk7CisgICAgaW1bMV1bMV0gPSBkZXQgKiAgICgg
bVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7Cisg
ICAgaW1bMV1bMl0gPSBkZXQgKiAtICggbVswXVswXSAqIEEyMzEzIC0gbVswXVsyXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMjEzICk7CisgICAgaW1bMV1bM10gPSBkZXQgKiAgICggbVswXVswXSAq
IEEyMzEyIC0gbVswXVsyXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMjEyICk7CisgICAgaW1bMl1b
MF0gPSBkZXQgKiAgICggYyApOworICAgIGltWzJdWzFdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBB
MTMyMyAtIG1bMF1bMV0gKiBBMDMyMyArIG1bMF1bM10gKiBBMDEyMyApOworICAgIGltWzJdWzJd
ID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTMxMyAtIG1bMF1bMV0gKiBBMDMxMyArIG1bMF1bM10g
KiBBMDExMyApOworICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1b
MF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworICAgIGltWzNdWzBdID0gZGV0ICog
LSAoIGQgKTsKKyAgICBpbVszXVsxXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMjMgLSBtWzBd
WzFdICogQTAyMjMgKyBtWzBdWzJdICogQTAxMjMgKTsKKyAgICBpbVszXVsyXSA9IGRldCAqIC0g
KCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsK
KyAgICBpbVszXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMTIgLSBtWzBdWzFdICogQTAy
MTIgKyBtWzBdWzJdICogQTAxMTIgKTsKKyAgICByZXR1cm4gaW07Cit9CispIikKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBi
b29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4g
dikKK3sKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBpZiAodVtp
XSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lO
TElORSBib29sIEFOR0xFX25vdEVxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJy
YXk8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKHUsdik7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVxdWFsQXJyYXkoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoZXF1YWxWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVh
bChtZXRhbDo6dmVjPFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4g
bWV0YWw6OmFsbCh1ID09IHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNs
dWRlX21ldGFsX21hdGgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxNYXRyaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQg
QywgaW50IFI+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfZXF1YWwobWV0YWw6Om1h
dHJpeDxULCBDLCBSPiBhLCBtZXRhbDo6bWF0cml4PFQsIEMsIFI+IGIpCit7CisgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisgICAgeworICAgICAgICBpZiAoIUFOR0xFX2VxdWFsKGFb
Y10sIGJbY10pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVxdWFsVmVjdG9yKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVj
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZl
YzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgcmV0dXJuICFBTkdMRV9lcXVh
bCh1LCB2KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxTdHJ1Y3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBib29sIEFOR0xFX25vdEVxdWFsU3RydWN0KHRocmVhZCBjb25zdCBUICZhLCB0aHJlYWQgY29u
c3QgVCAmYikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOworfQorKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJl
ZiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfVmVjdG9y
RWxlbVJlZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZtVmVjOworICAgIFQgbVJl
ZjsKKyAgICBjb25zdCBpbnQgbUluZGV4OworICAgIH5BTkdMRV9WZWN0b3JFbGVtUmVmKCkgeyBt
VmVjW21JbmRleF0gPSBtUmVmOyB9CisgICAgQU5HTEVfVmVjdG9yRWxlbVJlZih0aHJlYWQgbWV0
YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCisgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVm
KHZlY1tpbmRleF0pLCBtSW5kZXgoaW5kZXgpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQg
VCAmKCkgeyByZXR1cm4gbVJlZjsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9lbGVt
X3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCit7CisgICAgcmV0
dXJuIEFOR0xFX1ZlY3RvckVsZW1SZWY8VCwgTj4odmVjLCBpbmRleCk7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoc3dpenpsZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBWTiwgaW50IFNOPgorc3RydWN0IEFOR0xF
X1N3aXp6bGVSZWYKK3sKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxULCBWTj4gJm1WZWM7CisgICAg
bWV0YWw6OnZlYzxULCBTTj4gbVJlZjsKKyAgICBpbnQgbUluZGljZXNbU05dOworICAgIH5BTkdM
RV9Td2l6emxlUmVmKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBtSW5kaWNlc1tpXTsKKyAg
ICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIEFOR0xF
X1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGlu
dCAqaW5kaWNlcykKKyAgICAgICAgOiBtVmVjKHZlYykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgU047ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGog
PSBpbmRpY2VzW2ldOworICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworICAgICAgICAgICAg
bVJlZltpXSA9IG1WZWNbal07CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgdGhyZWFk
IG1ldGFsOjp2ZWM8VCwgU04+ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVm
PFQsIE4+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGlu
dCBpMCkKK3sKKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4
KTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
QU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6
OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9
IHsgaTAsIGkxIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBp
cyk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMikKK3sKKyAgICBjb25zdCBp
bnQgaXNbXSA9IHsgaTAsIGkxLCBpMiB9OworICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQs
IE4sIDM+KHZlYywgaXMpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVm
KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGlu
dCBpMykKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAsIGkxLCBpMiwgaTMgfTsKKyAgICBy
ZXR1cm4gQU5HTEVfU3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKK30KKykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRShvdXQsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfT3V0Cit7
CisgICAgVCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX091dCgpIHsg
bURlc3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKyAgICAgICAg
OiBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJu
IG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCit7CisgICAgcmV0dXJuIEFO
R0xFX091dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91
dCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9Jbk91dAoreworICAg
IFQgbVRlbXA7CisgICAgdGhyZWFkIFQgJm1EZXN0OworICAgIH5BTkdMRV9Jbk91dCgpIHsgbURl
c3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX0luT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6
IG1UZW1wKGRlc3QpLCBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQg
JigpIHsgcmV0dXJuIG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIEFOR0xFX0luT3V0PFQ+IEFOR0xFX2lub3V0KHRocmVhZCBUICZkZXN0KQor
eworICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShmbGF0dGVuQXJyYXksIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIFQgKmV4ZWModGhyZWFkIFQgJngpCisgICAgeworICAgICAgICByZXR1cm4gJng7
CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0cnVjdCBBTkdM
RV9mbGF0dGVuX2ltcGw8bWV0YWw6OmFycmF5PFQsIE4+PgoreworICAgIHN0YXRpYyBBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gZXhlYyh0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+ICZhcnIpIC0+
IFQKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJy
WzBdKTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX2ZsYXR0ZW4odGhyZWFkIG1ldGFsOjphcnJheTxULCBO
PiAmYXJyKSAtPiBUCit7CisgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhh
cnJbMF0pOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNhc3RWZWN0b3IsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOMSwgaW50IE4yPgorc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVf
Y2FzdFZlY3RvcjxULCBOLCBOPgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiBjb25zdCAmdikKKyAg
ICB7CisgICAgICAgIHJldHVybiB2OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDIsIDM+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+
IGNvbnN0ICZ2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYueHk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KK3sKKyAg
ICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFk
IG1ldGFsOjp2ZWM8VCwgND4gY29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3Rv
cjxULCAzLCA0PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8
VCwgMz4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTjE+IEFOR0xFX2Nhc3QodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTjI+IGNvbnN0
ICZ2KQoreworICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7
Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdE1hdHJpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIx
LCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9j
YXN0TWF0cml4Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJp
eDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAm
bTIpCisgICAgeworICAgICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAg
IGNvbnN0IGludCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworICAgICAgICBjb25zdCBpbnQg
TWluUiA9IFIxIDw9IFIyID8gUjEgOiBSMjsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBN
aW5DOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTWlu
UjsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11b
cl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByID0gUjI7IHIgPCBSMTsg
KytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9PSByID8g
VCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg
YyA9IEMyOyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBSMTsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3Jd
ID0gYyA9PSByID8gVCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG0xOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBp
bnQgUjEsIGludCBDMiwgaW50IFIyPgorc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIx
LCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+Pgorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBl
eGVjKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0yKQorICAgIHsKKyAg
ICAgICAgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IG0xOworICAgICAgICBmb3IgKHNpemVfdCBj
ID0gMDsgYyA8IEMxOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG0xW2NdID0gQU5HTEVf
Y2FzdDxSMT4obTJbY10pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtMTsKKyAgICB9Cit9
OwordGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IEFOR0xFX2Nhc3Qo
dGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbSkKK3sKKyAgICByZXR1cm4g
QU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMobSk7Cit9OworKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc3RWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QuLi4gRFM+CitzdHJ1Y3QgQU5HTEVfdGVuc29y
X3RyYWl0czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRD4KK3N0cnVjdCBBTkdMRV90
ZW5zb3JfdHJhaXRzPFQsIEQ+Cit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQg
fTsKKyAgICB1c2luZyBpbm5lcl90eXBlID0gVDsKKyAgICB1c2luZyBvdXRlcl90eXBlID0gaW5u
ZXJfdHlwZVtEXTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEQsIHNpemVfdC4u
LiBEUz4KK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIEQsIERTLi4uPgoreworICAgIGVu
dW0gOiBzaXplX3QgeyBvdXRlcl9kaW0gPSBEIH07CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IHR5
cGVuYW1lIEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl90eXBlOworICAgIHVz
aW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDxzaXplX3QgRCwg
dHlwZW5hbWUgdmFsdWVfdHlwZV8sIHR5cGVuYW1lIGlubmVyX3R5cGVfPgorc3RydWN0IEFOR0xF
X3RlbnNvcl9pbXBsCit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9
IGlubmVyX3R5cGVfOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworICAg
IG91dGVyX3R5cGUgX2RhdGE7CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG91dGVyX2RpbTsgfQorICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgaW5u
ZXJfdHlwZSAmb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gX2RhdGFbaV07IH0KKyAgICBB
TkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdC4uLiBEUz4KK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorICAg
IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl9kaW0sCisgICAgVCwKKyAgICB0
eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CispIikK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFpdHM7
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwyPiB7IHVzaW5nIHR5
cGUgPSBtZXRhbDo6Z3JhZGllbnQyZDsgfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3Jh
ZGllbnRfdHJhaXRzPDM+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDNkOyB9OworCit0
ZW1wbGF0ZSA8aW50IE4+Cit1c2luZyBBTkdMRV9ncmFkaWVudCA9IHR5cGVuYW1lIEFOR0xFX2dy
YWRpZW50X3RyYWl0czxOPjo6dHlwZTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0cnVjdCBBTkdMRV9UZXh0dXJlRW52Cit7CisgICAgdGhyZWFkIFQgKnRleHR1cmU7
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyICpzYW1wbGVyOworfTsKKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShmdW5jdGlvbkNvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV9TQU1QTEVfQ09NUEFSRV9HUkFESUVOVF9JTkRFWCAwCisj
ZGVmaW5lIEFOR0xFX1NBTVBMRV9DT01QQVJFX0xPRF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgQU5H
TEVfUkFTVEVSSVpBVElPTl9ESVNDQVJEX0lOREVYICAgMgorCitjb25zdGFudCBib29sIEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBM
RV9DT01QQVJFX0dSQURJRU5UX0lOREVYKV1dOworY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlTG9kICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFS
RV9MT0RfSU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1Jhc3Rlcml6YXRpb25EaXNjYXJk
ICAgICBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1JBU1RFUklaQVRJT05fRElTQ0FSRF9JTkRF
WCldXTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4p
IEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXhlbEZldGNoX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQpLCBsZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6Omlu
dDMgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
cmVhZCh1aW50Myhjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorICAgIHRocmVh
ZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
aW50MyBjb25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5yZWFkKHVpbnQyKGNvb3JkLnh5KSwgdWludChjb29yZC56KSwgbGV2ZWwpOworfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleGVsRmV0Y2hPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9m
ZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OmludDIgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjpp
bnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29y
ZCArIG9mZnNldCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAm
Y29vcmQsCisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkICsgb2Zmc2V0KSwg
bGV2ZWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0
dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZj
b29yZCwKKyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zm
c2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkgKyBvZmZzZXQp
LCB1aW50KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9m
bG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAg
ZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgY29vcmQudyk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgY29tcGFyZSkKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgY29tcGFyZSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aGN1YmVfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHl6KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRl
cHRoY3ViZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
bWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlf
ZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0
ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0
dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29y
ZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUy
ZGFycmF5X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NF9mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpy
b3VuZChjb29yZC53KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
MURMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvaiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMURQcm9qKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC55LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nv
b3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9q
TG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUx
RFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3Jk
LAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MURQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30K
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlMkQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZTJEKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MkRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUyRF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkRMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZp
bmUgQU5HTEVfdGV4dHVyZTJETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgq
ZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRExv
ZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
Y29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkRQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3Rl
eHR1cmUyRFByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAor
ICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUodGV4dHVyZTJEUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMkRQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
MkRQcm9qTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlMkRQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RMb2QsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RQcm9qLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUzRFByb2ooZW52LCAuLi4pIEFO
R0xFX3RleHR1cmUzRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUzRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0
YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvakxvZChl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxv
YXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
Q3ViZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29v
cmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3Vi
ZUxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgqZW52LnRleHR1cmUs
ICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJv
aiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3Vi
ZVByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJval9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlQ3ViZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmVDdWJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUdyYWRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmUsIGludCBO
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorICAgIHRocmVh
ZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29u
c3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQ
ZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQy
X2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0
YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQueik7CisgICAgfQorfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUdyYWRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgy
ZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFy
ZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQo
ZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGhj
dWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
Y29vcmQudywgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSA+IGNv
b3JkLncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25D
b25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9h
dDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpOwor
fQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxv
YXROX2Zsb2F0Tl9pbnROLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZSwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
Ojp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9h
dCwgTj4gY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0
ICZkUGR5LAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50
PE4+KGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBncmFkaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQz
X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdy
YWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
ZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLnopOwor
ICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRo
cmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91
bmQoY29vcmQueikpLCBjb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zm
c2V0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQo
Y29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3Jk
LncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25z
dGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9h
dDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
R3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisgICAgdGhy
ZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwg
b2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZz
ZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVy
ZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MywKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJl
PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQ
ZHksCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgs
IGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
R3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2QoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19W
QV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2
ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6
bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxv
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZGVwdGgy
ZF9mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFy
ZUxvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSkg
PiBjb29yZC56KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFk
IG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3Qg
JmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBs
ZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBs
ZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhy
ZWFkIGludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RP
ZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUo
c2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0
aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50
KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVPZmZzZXQoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwg
X19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNl
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwK
KyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZCwgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgb2Zmc2V0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAor
ICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpLCBv
ZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAg
IHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmJpYXMoYmlh
cyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2ooZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFz
KGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlUHJvakdyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVByb2pHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVy
ZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnos
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR5KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29y
ZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnovY29vcmQudyk7
CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50
cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0
M19mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBs
KAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4
LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3Jh
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pHcmFk
T2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3Jh
ZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywg
bWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zs
b2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29t
cGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4g
Y29vcmQuei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akdyYWRPZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFk
T2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQzIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5l
IEFOR0xFX3RleHR1cmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwo
CisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHkv
Y29vcmQudywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNv
b3JkLnovY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pM
b2QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfdGV4dHVyZTNk
X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgK
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0KGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZl
bCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zm
c2V0KSA+IGNvb3JkLnovY29vcmQudyk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDMgY29uc3Qg
Jm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9q
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1
cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlhcyA9
IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3Jk
LnosIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0g
MCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXov
Y29vcmQudywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4
dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBf
X1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDIodGV4dHVyZS5nZXRf
d2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVy
ZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9kZXB0aCh1aW50KGxldmVsKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAg
cmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9o
ZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
U2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVF
bnYoKSkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmV0dXJuZWQgTmFtZSBpcyB2
YWxpZCBmb3IgYXMgbG9uZyBhcyBgYnVmZmVyYCBpcyBzdGlsbCBhbGl2ZS4KKy8vIFJldHVybnMg
ZmFsc2UgaWYgbm8gdGVtcGxhdGUgYXJncyBleGlzdC4KKy8vIFJldHVybnMgZmFsc2UgaWYgYnVm
ZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2guCisvLworLy8gRXhhbXBsZToKKy8vICAiZm9vPDEsMj4i
IC0tPiAiZm9vPD4iCitzdGF0aWMgc3RkOjpwYWlyPE5hbWUsIGJvb2w+IE1hc2tUZW1wbGF0ZUFy
Z3MoY29uc3QgTmFtZSAmbmFtZSwgc2l6ZV90IGJ1ZmZlclNpemUsIGNoYXIgKmJ1ZmZlcikKK3sK
KyAgICBjb25zdCBjaGFyICpiZWdpbiA9IG5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyICplbmQgICA9IHN0cmNocihiZWdpbiwgJzwnKTsKKyAgICBpZiAoIWVuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB7e30sIGZhbHNlfTsKKyAgICB9CisgICAgc2l6ZV90IG4gPSBlbmQg
LSBiZWdpbjsKKyAgICBpZiAobiArIDMgPiBidWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHt7fSwgZmFsc2V9OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkKKyAgICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGJlZ2luW2ldOworICAgIH0KKyAgICBidWZm
ZXJbbiArIDBdID0gJzwnOworICAgIGJ1ZmZlcltuICsgMV0gPSAnPic7CisgICAgYnVmZmVyW24g
KyAyXSA9ICdcMCc7CisgICAgcmV0dXJuIHtOYW1lKGJ1ZmZlciwgbmFtZS5zeW1ib2xUeXBlKCkp
LCB0cnVlfTsKK30KKworUHJvZ3JhbVByZWx1ZGU6OkZ1bmNUb0VtaXR0ZXIgUHJvZ3JhbVByZWx1
ZGU6OkJ1aWxkRnVuY1RvRW1pdHRlcigpCit7CisjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkg
XAorICAgIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICYpIC0+IHZvaWQg
eyByZXR1cm4gcHAubWV0aG9kKCk7IH0KKyAgICBGdW5jVG9FbWl0dGVyIG1hcDsKKworICAgIGF1
dG8gcHV0ID0gWyZdKE5hbWUgbmFtZSwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBG
dW5jRW1pdHRlciAmZGVzdCA9IG1hcFtuYW1lXTsKKyAgICAgICAgQVNTRVJUKCFkZXN0KTsKKyAg
ICAgICAgZGVzdCA9IGVtaXR0ZXI7CisgICAgfTsKKworICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0o
Y29uc3QgY2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1l
IG5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIHB1dChu
YW1lLCBlbWl0dGVyKTsKKyAgICB9OworCisgICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0
IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKyAgICAgICAgTmFtZSBuYW1l
KG5hbWVTdHIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOworICAgICAgICBwdXQobmFtZSwgZW1pdHRl
cik7CisgICAgfTsKKworICAgIHB1dEFuZ2xlKCJhZGRyZXNzb2YiLCBFTUlUX01FVEhPRChhZGRy
ZXNzb2YpKTsKKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkp
OworICAgIHB1dEFuZ2xlKCJlbGVtX3JlZiIsIEVNSVRfTUVUSE9EKHZlY3RvckVsZW1SZWYpKTsK
KyAgICBwdXRBbmdsZSgiZmxhdHRlbiIsIEVNSVRfTUVUSE9EKGZsYXR0ZW5BcnJheSkpOworICAg
IHB1dEFuZ2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlub3V0KSk7CisgICAgcHV0QW5nbGUoIm91
dCIsIEVNSVRfTUVUSE9EKG91dCkpOworICAgIHB1dEFuZ2xlKCJzd2l6emxlX3JlZiIsIEVNSVRf
TUVUSE9EKHN3aXp6bGVSZWYpKTsKKworICAgIHB1dEJ1aWx0SW4oInRleGVsRmV0Y2giLCBFTUlU
X01FVEhPRCh0ZXhlbEZldGNoKSk7CisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleGVsRmV0Y2hPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAg
ICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRl
eHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
LnJhd05hbWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFz
aWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAg
ICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBiaWFz
ICAgICAgICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKyAgICAgICAgaWYgKHRl
eHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8Iikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBw
LnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTJkX2FycmF5PCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQzKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmUxRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRExvZCkpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7Cisg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFBy
b2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkRMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRQcm9qIiwgRU1JVF9NRVRIT0QodGV4
dHVyZTJEUHJvaikpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRExvZCIsIEVNSVRfTUVUSE9E
KHRleHR1cmUzRExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvakxvZCIs
IEVNSVRfTUVUSE9EKHRleHR1cmUzRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
Q3ViZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVy
ZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVDdWJlUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvaikpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJv
akxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMkRQcm9qTG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUdyYWQiLCBbXShQcm9n
cmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJ
bW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3Jk
LmdldEJhc2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBj
b29yZC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAg
ICAgPSBmdW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4
TiAgICAgICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0
aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwi
KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9h
dDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHAudGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zs
b2F0MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworICAgICAgICB9
CisgICAgICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7Cisg
ICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBH
ZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1
bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29y
ZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4g
ICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAg
Y29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAg
ICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0
dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVn
aW5zV2l0aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBk
UGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlR3JhZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09
IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0
Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAg
fSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwg
Y29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0
ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJh
bSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0
IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAg
ICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7
CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxT
aXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgy
ZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRl
eHR1cmUyZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMoKTsK
KyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4
dHVyZUxvZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKyAgICBwdXRC
dWlsdEluKCJ0ZXh0dXJlT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZU9mZnNldCkpOworICAg
IHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2opKTsKKyAg
ICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNv
bnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4
dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0o
MCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAgICAgICBjb25zdCBU
VHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAg
ICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOwor
ICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFt
KDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQ
ZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9m
bG9hdDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygp
OworICAgIH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAg
ICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQ
ZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9
PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYg
ZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZVByb2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAg
IFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNX
aXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxv
YXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8IikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90
ZXh0dXJlM2RfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0
MygpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RP
KCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBFTUlU
X01FVEhPRCh0ZXh0dXJlUHJvakxvZE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQ
cm9qT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pPZmZzZXQpKTsKKyAgICBwdXRCdWls
dEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7CisKKyAgICByZXR1
cm4gbWFwOworCisjdW5kZWYgRU1JVF9NRVRIT0QKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6
dmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEpCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmFk
aWFucygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZWdyZWVzOgorICAgICAgICAgICAgZGVncmVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorICAgICAgICAgICAgYXRhbigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6CisgICAgICAgICAg
ICBtb2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UmVmcmFjdDoKKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6CisgICAgICAgICAgICBkaXN0YW5jZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZW5ndGg6
CisgICAgICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRG90OgorICAgICAgICAgICAgZG90KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5v
cm1hbGl6ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGYWNlZm9yd2FyZDoKKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICBy
ZWZsZWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wU2luOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BT
aW5oOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
QXRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3c6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9nMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BGbG9vcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5j
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2VpbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNb2RmOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGcmV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEludmVyc2Vz
cXJ0OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEV2ZW4gaWYgQXJnMCBpcyBhIHZlY3RvciBvciBtYXRyaXgsIGl0IGNvdWxkIGFs
c28gYmUgYW4gYXJyYXkuCisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBh
cmdUeXBlMS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVxdWFs
QXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNW
ZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBub3RFcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChhcmdU
eXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbm90RXF1YWxBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAg
ICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaWduOgorICAgICAgICAgICAgc2lnbigpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWl4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3RlcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNtb290aHN0ZXA6CisgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFueToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSXNpbmY6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZ3aWR0aDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWRkOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGFkZE1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAg
ICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlz
TWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENv
bXBvbmVudFdpc2U6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJn
VHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcG9u
ZW50V2lzZU11bHRpcGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wT3V0ZXJQcm9kdWN0OgorICAgICAgICAgICAgb3V0
ZXJQcm9kdWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZTAtPmdldENvbHMoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
ICAgIGludmVyc2UyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAg
ICAgICBpbnZlcnNlNCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVt
ZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNy
ZW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURl
Y3JlbWVudDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwcmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNo
aWZ0TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE11bDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRT
aGlmdFJpZ2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVu
dFdpc2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsQ29tcG9uZW50
V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25l
bnRXaXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRX
aXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0
cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQnJlYWs6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhJbmRpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVaW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNU
b1VpbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICAgICAgLy8g
ZG8gbm90aGluZworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEtpbGw6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
YWNrU25vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtNHg4OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYy
eDE2OgorICAgICAgICAgICAgcGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisgICAgICAgICAgICB1
bnBhY2tfaGFsZl8yeDE2KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0ZmllbGRFeHRyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0ZmllbGRJbnNlcnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVy
c2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRDb3VudDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZpbmRMU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNC
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVWFkZENhcnJ5OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVXN1YkJvcnJvdzoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEltdWxFeHRlbmRlZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNZW1vcnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmll
ckF0b21pY0NvdW50ZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
QnVmZmVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllclNoYXJlZDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyb3VwTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEF0b21pY0FkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01p
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01heDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21p
Y09yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljWG9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNDb21wU3dhcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVtaXRWZXJ0ZXg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGVHJhbnNmb3JtOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXJyYXlMZW5ndGg6CisgICAgICAgICAgICBU
T0RPKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29uc3RydWN0OgorICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIEFTU0VS
VChmdW5jKTsKKyAgICAgICAgICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoZnVuYykuc2Vjb25kKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBlbmQgPSBtRnVuY1RvRW1pdHRlci5lbmQoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAgICA9IG1GdW5jVG9FbWl0dGVyLmZpbmQobmFtZSk7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICAgICAgICAgICAgICBh
dXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIp
OworICAgICAgICAgICAgICAgICAgICBpZiAobWFzay5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5k
KG1hc2suZmlyc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gJmVtaXR0ZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgp
KQorICAgIHsKKyAgICAgICAgY29uc3QgTmFtZSB0eXBlTmFtZSgqcyk7CisgICAgICAgIGlmICh0
eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorICAgICAgICB7CisgICAg
ICAgICAgICB0ZXh0dXJlRW52KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUo
Y29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmdmFyKS5z
ZWNvbmQpCisgICAgeworICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5
cGUoKSk7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN0cnVjdHVyZShj
b25zdCBUU3RydWN0dXJlICZzKQoreworICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29u
ZCkKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHMuZmllbGRzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBl
KCk7CisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUoKmZpZWxkKSwgdHlwZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmcmlnaHRU
eXBlID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgIHZpc2l0T3BlcmF0b3Iobm9k
ZS0+Z2V0T3AoKSwgbnVsbHB0ciwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlID0gbm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBudWxscHRyLCAmYXJnVHlwZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bVByZWx1ZGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQoreworICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQo
KTsKKworICAgIGF1dG8gZ2V0QXJnVHlwZSA9IFtub2RlLCBhcmdDb3VudF0oc2l6ZV90IGluZGV4
KSAtPiBjb25zdCBUVHlwZSAmIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJnQ291bnQpOwor
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IG5vZGUtPmdldENoaWxkTm9kZShpbmRleCktPmdl
dEFzVHlwZWQoKTsKKyAgICAgICAgQVNTRVJUKGFyZyk7CisgICAgICAgIHJldHVybiBhcmctPmdl
dFR5cGUoKTsKKyAgICB9OworCisgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0
RnVuY3Rpb24oKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Q2hpbGRDb3VudCgpKQorICAgIHsK
KyAgICAgICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5v
ZGUtPmdldE9wKCksIGZ1bmMsIG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMCA9IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEg
PSBnZXRBcmdUeXBlKDEpOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBmdW5jLCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdl
dE9wKCksIGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpub2RlKQorewor
ICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKyAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IGRlY2wuc3ltYm9sLmdldFR5cGUoKTsKKyAgICBpZiAodHlwZS5pc1N0
cnVjdFNwZWNpZmllcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5
cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgdmlzaXRTdHJ1Y3R1
cmUoKnMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sKKyAgICB2aXNpdFZhcmlhYmxl
KG5vZGUtPnZhcmlhYmxlKCkpOworfQorCitib29sIHNoOjpFbWl0UHJvZ3JhbVByZWx1ZGUoVElu
dGVybUJsb2NrICZyb290LCBUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0IFByb2dyYW1QcmVsdWRl
Q29uZmlnICZwcGMpCit7CisgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBw
cGMpOworICAgIHJvb3QudHJhdmVyc2UoJnByb2dyYW1QcmVsdWRlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAwNDEzZjU3NjkyYTA1MzRkYTRk
N2RjOTYzYTA5OGJiODhjZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9n
cmFtUHJlbHVkZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBS
RUxVREVfSF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVEluZm9TaW5rQmFzZTsK
K2NsYXNzIFRJbnRlcm1CbG9jazsKKworc3RydWN0IFByb2dyYW1QcmVsdWRlQ29uZmlnCit7Cisg
ICAgYm9vbCBoYXNTdHJ1Y3RFcSA9IGZhbHNlOworfTsKKworLy8gVGhpcyBlbWl0cyBmaXhlZCBo
ZWxwZXIgTWV0YWwgY29kZSBkaXJlY3RseSB3aXRob3V0IGFkZGluZyBjb2RlIHRvIHRoZSBBU1Qu
IFRoaXMgd2Fsa3MgdGhlIEFTVCB0bworLy8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgd2hhdCBw
cmVsdWRlIE1TTCBjb2RlIGlzIG5lZWRlZCBmb3IgdmFyaW91cyB0aGluZ3MgaW4gdGhlIEFTVC4g
WW91IGNhbgorLy8gdGhpbmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3Vz
IHBvcnRpb25zIG9mIGEgaGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorLy8gTWV0YWwg
cHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW5mb1NpbmtCYXNlICZvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3BhY2Ug
c2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9QUk9HUkFNUFJFTFVERV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVy
ZmFjZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYTgxNjk2ZjA2YWY2OWQ0YWRhMjU3OWMwMmQwOGM0ODk0NWZkOWU4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAKQEAg
LTAsMCArMSwxMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRGVjbGFyYXRpb25zLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5o
IgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25h
bWVzcGFjZQoreworCitjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqLCBzdGQ6Om1hcDxJ
bW11dGFibGVTdHJpbmcsIGNvbnN0IFRWYXJpYWJsZSAqPj4KKyAgICAgICAgbUxpZnRlZE1hcDsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJs
ZSAqPiBtSW5zdGFuY2VNYXA7CisKKyAgcHVibGljOgorICAgIFJlZHVjZXIoVENvbXBpbGVyICZj
b21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2RlLmdldENoaWxkQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hp
bGROb2RlKDApOworCisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9k
ZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlh
YmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBj
b25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAg
ICAgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvICZuYW1lVG9WYXIgPSBtTGlmdGVkTWFwW2ludGVyZmFjZUJsb2NrXTsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVwbGFjZW1l
bnRzOworICAgICAgICAgICAgICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0g
VFF1YWxpZmllcjo6RXZxVW5pZm9ybSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxR2xvYmFsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6
OkV2cVVuaWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqbGlmdGVkVmFyID0g
bmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCAmbGlmdGVkVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQtPnN5bWJvbFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVUb1Zh
cltmaWVsZC0+bmFtZSgpXSA9IGxpZnRlZFZhcjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VEludGVybURlY2xhcmF0aW9ue25ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcil9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpN
dWx0aShzdGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworCisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gJnN0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgaW50ZXJmYWNlQmxvY2stPm5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJmYWNlQmxv
Y2stPmZpZWxkcygpLCBpbnRlcmZhY2VCbG9jay0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAmaW5zdGFuY2VW
YXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShtU3lt
Ym9sVGFibGUsIHN0cnVjdHVyZSwgTmFtZSh2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRB
cnJheVNpemVzKCkpOworCisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZU1hcFsmdmFyXSA9
ICZpbnN0YW5jZVZhcjsKKworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnRzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybURlY2xhcmF0
aW9ue25ldyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RWYXIpfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFy
KX19OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6OmJl
Z2luKHJlcGxhY2VtZW50cyksIHN0ZDo6ZW5kKHJlcGxhY2VtZW50cykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7ZGVjbE5v
ZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0U3lt
Ym9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBpdCA9IG1JbnN0YW5jZU1hcC5maW5kKCZ2YXIpOworICAgICAg
ICAgICAgaWYgKGl0ICE9IG1JbnN0YW5jZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmli
ID0gdmFyLmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKyAgICAgICAgICAgIGlmIChpdCAh
PSBtTGlmdGVkTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
KmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisgICAgICAgICAgICAgICAgQVNT
RVJUKGxpZnRlZFZhcik7CisgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJv
bChsaWZ0ZWRWYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBz
eW1ib2xOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmVkdWNlSW50ZXJmYWNlQmxvY2tzKFRD
b21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBSZWR1Y2VyIHJl
ZHVjZXIoY29tcGlsZXIpOworICAgIGlmICghcmVkdWNlci5yZWJ1aWxkUm9vdChyb290KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRlRGVj
bGFyYXRpb25zKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJs
b2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM2OTVjYmFkZmQ2NGEyMTJhNWJlNTUxODliOWNlNzJjNjhkNzRh
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5URVJG
QUNFQkxPQ0tTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IFRoaXMgcmV3cml0ZXMgaW50ZXJmYWNlIGJsb2NrIGRlY2xhcmF0aW9ucyBvbmx5LgorLy8KKy8v
IEFjY2VzcyBvZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKy8vIFhYWDogXiBTdGlsbCB0
cnVlPworLy8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBGb28geyBpbnQgeDsgfTsKKy8vIEJl
Y29tZXM6CisvLyAgdW5pZm9ybSBpbnQgeDsKKy8vCisvLyBFeGFtcGxlOgorLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworLy8gQmVjb21lczoKKy8vICBzdHJ1Y3QgRm9vIHsgaW50IHg7
IH07IHVuaWZvcm0gRm9vIHg7CisvLworQU5HTEVfTk9fRElTQ0FSRCBib29sIFJlZHVjZUludGVy
ZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9
ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YjVkODZjNzg4ZTVkNmMyMzIxNTFiODM2MjZmODYwMTlhM2NiZGY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
UkVGRVJFTkNFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1JFRkVSRU5DRV9IXworCituYW1lc3BhY2Ugc2gKK3sKKworLy8gU2ltaWxhciB0byBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUmVmCit7CisgIHB1YmxpYzoKKyAgICBS
ZWYoY29uc3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVs
dDsKKyAgICBSZWYoVCAmcmVmKSA6IG1QdHIoJnJlZikge30KKworICAgIFJlZiAmb3BlcmF0b3I9
KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisgICAgUmVmICZvcGVyYXRvcj0oUmVmICYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgIT0gKm90aGVyLm1QdHI7IH0KKyAgICBi
b29sIG9wZXJhdG9yPD0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPD0g
Km90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikgY29u
c3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8ICpvdGhlci5tUHRyOyB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PiAqb3RoZXIubVB0cjsgfQorCisgICAgVCAmZ2V0KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBU
IGNvbnN0ICZnZXQoKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAm
KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVyYXRvciBUIGNvbnN0ICYoKSBjb25zdCB7IHJl
dHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAqKCkgeyByZXR1cm4gKm1QdHI7IH0KKyAg
ICBvcGVyYXRvciBUIGNvbnN0ICooKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgIHByaXZh
dGU6CisgICAgVCAqbVB0cjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQ1Jl
ZiA9IFJlZjxUIGNvbnN0PjsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzc4MTc3NmM1
NjA3OTIxZGUzMjJmZTk2NTlkODM2ZTBhMzJiNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsxLDkxIEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3Bh
Y2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFz
cyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisKKyAgcHVi
bGljOgorICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIHRydWUsIHRydWUpIHt9CisKKyAgICB+UmV3cml0ZXIoKSBvdmVycmlkZSB7IEFT
U0VSVChtRGVjbGFyZWRWYXJTdGFjay5lbXB0eSgpKTsgfQorCisgIHByaXZhdGU6CisgICAgUHJl
UmVzdWx0IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVy
bVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbURlY2xhcmVk
VmFyU3RhY2suZW1wdHkoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gdmFycyA9IHN0ZDo6bW92ZSht
RGVjbGFyZWRWYXJTdGFjay5iYWNrKCkpOworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICBpZiAoIXZhcnMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgZm9yIChj
b25zdCBUVmFyaWFibGUgKnZhciA6IHZhcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay5hcHBlbmRTdGF0ZW1lbnQoJm5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNs
YXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbURlY2xhcmVkVmFy
U3RhY2suZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybU5vZGUgKnBhcmVu
dCA9IGdldFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmdldEFzQmxvY2so
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJl
bnQgPSBnZXRQYXJlbnROb2RlKDEpOworICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVudCAm
JiBncmFuZHBhcmVudC0+Z2V0QXNTd2l0Y2hOb2RlKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5iYWNrKCkucHVzaF9iYWNr
KCZkZWNsLnN5bWJvbC52YXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZWNsLnN5
bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbC5pbml0RXhwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlJld3JpdGVDYXNlRGVjbGFyYXRpb25zKFRDb21waWxlciAmY29tcGlsZXIs
IFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1
aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNs
YXJhdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1YTg4MjE1NDc1ZDA4ZTUxYjIxNzRlZTNlMWEzYWFjYjU0NDUwYzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaApAQCAtMCww
ICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJ
T05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEVYQU1Q
TEUKKy8vICAgIHN3aXRjaCAoZXhwcikKKy8vICAgIHsKKy8vICAgICAgY2FzZSAwOgorLy8gICAg
ICAgIGludCB4ID0gMDsKKy8vICAgICAgICBicmVhazsKKy8vICAgICAgY2FzZSAxOgorLy8gICAg
ICAgIGludCB5ID0gMDsKKy8vICAgICAgICB7CisvLyAgICAgICAgICBpbnQgeiA9IDA7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIGJyZWFrOworLy8gICAgfQorLy8gQmVjb21lcworLy8gICAgewor
Ly8gICAgICBpbnQgeDsKKy8vICAgICAgaW50IHk7CisvLyAgICAgIHN3aXRjaCAoZXhwcikKKy8v
ICAgICAgeworLy8gICAgICAgIGNhc2UgMDoKKy8vICAgICAgICAgIHggPSAwOworLy8gICAgICAg
ICAgYnJlYWs7CisvLyAgICAgICAgY2FzZSAxOgorLy8gICAgICAgICAgeSA9IDA7CisvLyAgICAg
ICAgICB7CisvLyAgICAgICAgICAgIGludCB6ID0gMDsKKy8vICAgICAgICAgIH0KKy8vICAgICAg
ICAgIGJyZWFrOworLy8gICAgICB9CisvLyAgICB9CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3
cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZy
b290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGFkNWEzNmM4MWI1YzcyNDE4YTZhOWJhZDE1NWEzYzQ1MzZiNmJlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCkBAIC0wLDAg
KzEsMTE0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2NsYXNzIEZpbmREZWNsYXJl
ZEdsb2JhbHMgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgcHVibGljOgorICAgIHN0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gbURlY2xhcmVkR2xvYmFsczsKKworICAg
IEZpbmREZWNsYXJlZEdsb2JhbHMoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJh
dGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgVEludGVybU5vZGUgKmRlY2xhcmF0b3JOb2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworCisg
ICAgICAgIGlmIChUSW50ZXJtQmluYXJ5ICppbml0Tm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRB
c0JpbmFyeU5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGluaXRO
b2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChzeW1ib2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgp
OworCisgICAgICAgIG1EZWNsYXJlZEdsb2JhbHMuaW5zZXJ0KCZ2YXIpOworCisgICAgICAgIHJl
dHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisgICAgfQorfTsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJl
YnVpbGQKK3sKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+
ICZtRGVjbGFyZWRHbG9iYWxzOworICAgIEludmFyaWFudHMgJm1PdXRJbnZhcmlhbnRzOworCisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gJmRlY2xhcmVkR2xv
YmFscywKKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorICAgICAgICA6
IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSksCisgICAgICAgICAgbURlY2xh
cmVkR2xvYmFscyhkZWNsYXJlZEdsb2JhbHMpLAorICAgICAgICAgIG1PdXRJbnZhcmlhbnRzKG91
dEludmFyaWFudHMpCisgICAge30KKworICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uUHJlKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJmdxRGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtU3ltYm9sICZz
eW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyICAgICAgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7CisKKyAgICAgICAgaWYgKGdx
RGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dEludmFy
aWFudHMuaW5zZXJ0KHZhcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlY2xhcmVkR2xv
YmFscy5maW5kKCZ2YXIpID09IG1EZWNsYXJlZEdsb2JhbHMuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmc3ltYm9sTm9kZX07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUHJlUmVzdWx0
IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0K
KworICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworYm9vbCBzaDo6UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21waWxlciAm
Y29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFu
dHMgJm91dEludmFyaWFudHMpCit7CisgICAgRmluZERlY2xhcmVkR2xvYmFscyBmZGcoY29tcGls
ZXIpOworICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJld3JpdGVy
IHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7
CisgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTMxYmNhZmJhNmNmMTdm
YTljOThkNTFlZTg1YzM2ZDMwZTdmNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworCisj
aW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFu
ZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KK2NsYXNzIEludmFyaWFu
dHMKK3sKKyAgcHVibGljOgorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSB7
IG1JbnZhcmlhbnRzLmluc2VydCgmdmFyKTsgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVEZp
ZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorCisgICAgYm9vbCBj
b250YWlucyhjb25zdCBUVmFyaWFibGUgJnZhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtSW52YXJpYW50cy5maW5kKCZ2YXIpICE9IG1JbnZhcmlhbnRzLmVuZCgpOworICAgIH0KKwor
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7
CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IHZvaWQg
Kj4gbUludmFyaWFudHM7Cit9OworCisvLyBUaGlzIHJld3JpdGVzIFRJbnRlcm1HbG9iYWxRdWFs
aWZpZXJEZWNsYXJhdGlvbnMgYXMgVEludGVybURlY2xhcmF0aW9ucy4KKy8vIGBvdXRJbnZhcmlh
bnRzYCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBvdGhlcndp
c2UgYmUgbG9zdCBieSBzdWNoIGEKKy8vIHRyYW5zZm9ybS4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZUtleXdvcmRzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwMTRmNDBmODFjY2FkNTAxMzM3MDY1OGJjODk0MmIwMDJkNmI4ZTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcApAQCAtMCwwICsxLDQzNCBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFQgKiwgY29uc3QgVCAqPjsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+ICZtS2V5d29yZHM7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBSZW1hcHBpbmc8VEZpZWxk
PiBtb2RpZmllZEZpZWxkczsKKyAgICBSZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7
CisgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKyAgICBSZW1hcHBpbmc8VElu
dGVyZmFjZUJsb2NrPiBtSW50ZXJmYWNlQmxvY2tzOworICAgIFJlbWFwcGluZzxUU3RydWN0dXJl
PiBtU3RydWN0dXJlczsKKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgSW1tdXRhYmxlU3RyaW5nIG1heWJlQ3JlYXRlTmV3TmFtZShUIGNv
bnN0ICZvYmplY3QpCisgICAgeworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhvYmplY3QsIGZh
bHNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1l
KE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOYW1l
KG9iamVjdCkucmF3TmFtZSgpOworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZCAqY3JlYXRlUmVu
YW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9
CisgICAgICAgICAgICBuZXcgVEZpZWxkKGNvbnN0X2Nhc3Q8VFR5cGUgKj4oJmdldFJlbmFtZWRP
ck9yaWdpbmFsKCpmaWVsZC50eXBlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVD
cmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBURmll
bGRMaXN0ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKyAgICB7
CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgICAgICBmb3Ig
KGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlbmFtZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoKmZpZWxkKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24g
JmZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAgICAgICAgICBu
ZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiks
IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbi5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7
CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNv
dW50KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9u
LmdldFBhcmFtKGkpOworICAgICAgICAgICAgcmVuYW1lZC0+YWRkUGFyYW1ldGVyKCZnZXRSZW5h
bWVkT3JPcmlnaW5hbChwYXJhbSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmN0aW9u
LmlzRGVmaW5lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXREZWZpbmVk
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24uaGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpDcmVhdGUoKTsKKyAgICAg
ICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9j
a1N0b3JhZ2UoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJpbmRpbmcgICAgICAgICAgPSBp
bnRlcmZhY2VCbG9jay5ibG9ja0JpbmRpbmcoKTsKKworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBUSW50ZXJmYWNlQmxvY2soJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVh
dGVOZXdOYW1lKGludGVyZmFjZUJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKGludGVyZmFjZUJsb2NrLmZpZWxkcygpKSwgbGF5b3V0
UXVhbGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0
dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAqY3JlYXRlUmVuYW1l
ZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvICpyZW5h
bWVkID0KKyAgICAgICAgICAgIG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG1heWJlQ3Jl
YXRlTmV3TmFtZShzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJl
bmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwpOworCisgICAgICAgIHJlbmFtZWQtPnNldEF0R2xvYmFsU2NvcGUoc3RydWN0dXJlLmF0
R2xvYmFsU2NvcGUoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAg
Y29uc3QgVFR5cGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFR5cGUgJnR5cGUpCisgICAgeworICAg
ICAgICBUVHlwZSAqcmVuYW1lZDsKKworICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1l
ZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKnN0cnVjdHVyZSksIHR5cGUuaXNT
dHJ1Y3RTcGVjaWZpZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9y
T3JpZ2luYWwoKmludGVyZmFjZUJsb2NrKSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OyAgLy8gQ2FuJ3QgcmVuYW1lIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICAgICAgcmVuYW1lZCA9
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlbmFtZWQtPm1ha2VBcnJheXModHlwZS5nZXRBcnJheVNpemVz
KCkpOworICAgICAgICB9CisgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldEludmFyaWFudCh0eXBlLmlzSW52YXJpYW50KCkp
OworICAgICAgICByZW5hbWVkLT5zZXRNZW1vcnlRdWFsaWZpZXIodHlwZS5nZXRNZW1vcnlRdWFs
aWZpZXIoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExh
eW91dFF1YWxpZmllcigpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAg
ICBjb25zdCBUVmFyaWFibGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJs
ZSkKKyAgICB7CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZSh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXJpYWJsZS5nZXRUeXBl
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bmFtZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCAq
dHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGlu
ZykKKyAgICB7CisgICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChyZW1hcHBpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBp
bmctPmZpbmQoJm9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3Qg
PSBjcmVhdGVSZW5hbWVkKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHJlbWFwcGluZykKKyAgICAg
ICAgeworICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OworICAgIH0KKworICAg
IGNvbnN0IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMp
OworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJ
bXBsKGZpZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKyAgICB9CisKKyAgICBjb25zdCBURnVuY3Rp
b24gKnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKKyAgICB9CisKKyAg
ICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJs
b2NrICZpbnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVk
SW1wbChpbnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOworICAgIH0KKworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1T
dHJ1Y3R1cmVzKTsKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVHlwZSAmdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0
eXBlLCBzdGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKKyAgICB9CisK
KyAgICBjb25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwg
Jm1WYXJpYWJsZXMpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQgJmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKKyAgICB7CisgICAg
ICAgIGNvbnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7CisgICAgICAgIGlm
IChyZW5hbWVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29u
c3QKKyAgICB7CisgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5z
eW1ib2xUeXBlKCk7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0
eToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgU3lt
Ym9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdO
YW1lKCk7CisgICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5k
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZp
ZWxkLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1Jl
bmFtaW5nSW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50
eXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChyZWN1cnNpdmUpOworICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBm
aWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVs
ZCwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJl
Y3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5j
dGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtQ291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZw
YXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFt
aW5nKHBhcmFtLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbmVlZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8CisgICAgICAgICAgICAgICAo
cmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUp
KTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChzdHJ1Y3R1cmUpIHx8CisgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisgICAgfQorCisgICAg
Ym9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWlu
Zygqc3RydWN0dXJlLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJs
b2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRl
cmZhY2VCbG9jaywgcmVjdXJzaXZlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJs
ZSkgfHwKKyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJs
ZS5nZXRUeXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRD
b21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxl
U3RyaW5nPiAma2V5d29yZHMpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZh
bHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisK
KyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisg
ICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUo
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZyVmFyID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFy
KTsKKyAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzeW1ib2xOb2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQg
dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90
b05vZGUpCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3Rv
Tm9kZS5nZXRGdW5jdGlvbigpOworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVl
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJl
bmFtZWRPck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNQ
cm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlv
blBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAq
ZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uICZmdW5jICAgICAgICAgICAgICAgICAgID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChm
dW5jKTsKKyAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJvdG9Ob2RlICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZTsKKyAgICB9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1
Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3Jl
Z2F0ZU5vZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodHlwZSwg
dHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBl
ID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdl
dFNlcXVlbmNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5v
ZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRy
dWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1
bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFnZ3JlZ2F0ZU5vZGUuZ2V0T3AoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwo
ckZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9u
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZVJhd0Z1bmN0aW9uQ2FsbChyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRT
ZXF1ZW5jZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlv
bkNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUu
Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6
UmV3cml0ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFi
bGVTdHJpbmc+ICZrZXl3b3JkcykKK3sKKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwg
aWRHZW4sIGtleXdvcmRzKTsKKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZXdyaXRlS2V5d29yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTYyYmM3OWI0MTE4ZjljNzQ0NzVjMjY4
YjY5ZGU2MjVjNTdmNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVL
ZXl3b3Jkcy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlX
T1JEU19IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKKy8vIFRoaXMgd2Fsa3MgdGhlIHRyZWUgYW5kIHJlbmFtZXMgYWxsIG5h
bWVzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgaW5wdXQgYGtleXdvcmRzYC4KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJmtleXdvcmRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVPdXRBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWMwMzdkNTI5MGFkZjIzMjI1ZWI4OGRk
MGZiNzc4OWFhZTU0ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK2NsYXNzIFNtYWxsTXVsdGlTZXQKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBFbnRy
eQorICAgIHsKKyAgICAgICAgVCBlbGVtOworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsK
KworICAgIGNvbnN0IEVudHJ5ICpmaW5kKGNvbnN0IFQgJngpIGNvbnN0CisgICAgeworICAgICAg
ICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh4ID09IGVudHJ5LmVsZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICZlbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBzaXplX3QgbXVsdGlwbGljaXR5KGNvbnN0IFQgJngpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5kKHgpOworICAgICAgICByZXR1
cm4gZW50cnkgPyBlbnRyeS0+Y291bnQgOiAwOworICAgIH0KKworICAgIGNvbnN0IEVudHJ5ICZp
bnNlcnQoY29uc3QgVCAmeCkKKyAgICB7CisgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRh
YmxlKHgpOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZW50
cnktPmNvdW50OworICAgICAgICAgICAgcmV0dXJuICplbnRyeTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FbnRyaWVzLnB1c2hfYmFjayh7eCwgMX0p
OworICAgICAgICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgY2xlYXIoKSB7IG1FbnRyaWVzLmNsZWFyKCk7IH0KKworICAgIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisKKyAgICBzaXplX3QgdW5p
cXVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQorCisgIHByaXZhdGU6
CisgICAgQU5HTEVfSU5MSU5FIEVudHJ5ICpmaW5kTXV0YWJsZShjb25zdCBUICZ4KSB7IHJldHVy
biBjb25zdF9jYXN0PEVudHJ5ICo+KGZpbmQoeCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6
OnZlY3RvcjxFbnRyeT4gbUVudHJpZXM7Cit9OworCitjb25zdCBUVmFyaWFibGUgKkdldFZhcmlh
YmxlKFRJbnRlcm1Ob2RlICZub2RlKQoreworICAgIFRJbnRlcm1UeXBlZCAqdHlOb2RlID0gbm9k
ZS5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHR5Tm9kZSk7CisgICAgaWYgKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gJnN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgU21hbGxN
dWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxlIGJ1ZmZl
cgorICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAgflJld3JpdGVy
KCkgb3ZlcnJpZGUgeyBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsgfQorCisgICAgUmV3cml0
ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xF
bnYpCisgICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1B
Z2dyZWdhdGUgJmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
bVZhckJ1ZmZlci5lbXB0eSgpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBh
Z2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpOwor
ICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAgICBh
dXRvIGdldFBhcmFtUXVhbGlmaWVyID0gWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZwYXJhbVR5cGUgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAgICAg
ICAgY29uc3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7
CisgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xFbnYu
aXNSZWZlcmVuY2UocGFyYW0pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNl
OjpUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKyAgICAgICAg
fTsKKworICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgKnZhciA9IEdldFZhcmlhYmxlKCphcmdzW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWdodEFsaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBoYXNJbmRldGVybWlu
YXRlVmFyID0gbVZhckJ1ZmZlci5maW5kKG51bGxwdHIpOworCisgICAgICAgIGlmICghbWlnaHRB
bGlhcykKKyAgICAgICAgeworICAgICAgICAgICAgbWlnaHRBbGlhcyA9IGhhc0luZGV0ZXJtaW5h
dGVWYXIgJiYgbVZhckJ1ZmZlci51bmlxdWVTaXplKCkgPiAxOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1pZ2h0QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciAgICAg
ICA9IEdldFZhcmlhYmxlKCphcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIg
cGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
aGFzSW5kZXRlcm1pbmF0ZVZhciB8fCBtVmFyQnVmZmVyLm11bHRpcGxpY2l0eSh2YXIpID4gMSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFs
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0g
Jm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgib3V0IiksIGFyZy0+Z2V0VHlw
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWUoImlub3V0IiksIGFyZy0+Z2V0VHlwZSgpLCAqbmV3IFRJbnRl
cm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1WYXJCdWZmZXIuY2xlYXIoKTsKKwor
ICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVPdXRBcmdzKFRDb21waWxlciAmY29tcGls
ZXIsIFRJbnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAgaWYgKCFyZXdyaXRlci5y
ZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFy
Z3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MmI3NDdh
M2U3ZGVmZTI0YmRiNTllNjIxY2E3NDUwZTMxY2Q0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVP
VVRBUkdTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVPVVRBUkdTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IGUuZy46CisvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50IHkpKi8KKy8vICAg
IGZvbyh6LCB3KTsKKy8vIGJlY29tZXMKKy8vICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKy8v
IHVubGVzcyBgemAgYW5kIGB3YCBhcmUgZGV0ZWN0ZWQgdG8gbmV2ZXIgYWxpYXMuCisvLyBUaGUg
dHJhbnNsYXRlZCBleGFtcGxlIGVmZmVjdGl2ZWx5IGJlaGF2ZXMgdGhlIHNhbWUgYXM6CisvLyAg
ICBpbnQgXzE7CisvLyAgICBpbnQgXzIgPSB3OworLy8gICAgZm9vKF8xLCBfMik7CisvLyAgICB6
ID0gXzE7CisvLyAgICB3ID0gXzI7CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZU91dEFy
Z3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5
bWJvbEVudik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVBpcGVsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzN2UyMzMwMGFiOTllMTBmYjgwYWM4ZjVm
ZjBjNmUxODA2NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmNwcApAQCAtMCwwICsxLDkzOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNzdHJp
bmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0Pgor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1BydW5lTm9PcHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9G
aW5kTWFpbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCit1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3Jk
ZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OwordXNpbmcgVmFyaWFibGVMaXN0ID0gc3RkOjp2
ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitz
dHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RJbmZvCit7CisgICAgVmFyaWFibGVTZXQgcGlwZWxpbmVWYXJp
YWJsZXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3Q7Cisg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZVN0cnVj
dC5pc1RvdGFsbHlFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZVN0
cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaXBlbGluZVZhcmlh
Ymxlcy5lbXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KK307CisKK2NsYXNzIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QgOiBwcml2YXRlIFRJbnRlcm1S
ZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAg
ICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7Cisg
ICAgVmFyaWFibGVMaXN0IG1QaXBlbGluZVZhcmlhYmxlTGlzdDsKKyAgICBJZEdlbiAmbUlkR2Vu
OworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKworICBwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgRXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwKKyAgICAgICAgICAgICAgICAgICAg
IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmlu
dmFyaWFudHMpCisgICAgeworICAgICAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IHNlbGYoY29t
cGlsZXIsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKTsKKyAgICAgICAg
aWYgKCFzZWxmLmV4ZWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBvdXQgPSBzZWxmLm1JbmZvOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1QaXBlbGlu
ZShwaXBlbGluZSksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAg
IG1JbnZhcmlhbnRzKGludmFyaWFudHMpLAorICAgICAgICAgIG1JZEdlbihpZEdlbikKKyAgICB7
fQorCisgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKyAgICB7CisgICAgICAgIGlm
ICghcmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5lbXB0
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAm
cGlwZWxpbmVTdHJ1Y3QgPSBbJl0oKSAtPiBjb25zdCBUU3RydWN0dXJlICYgeworICAgICAgICAg
ICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhci0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0
KHJvb3QsIHNlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKTsKKworICAgICAgICBNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzIG1vZGlmaWVkTWFjaGluZXJpZXM7CisgICAgICAgIGNvbnN0
IGJvb2wgbW9kaWZpZWQgPSBUcnlDcmVhdGVNb2RpZmllZFN0cnVjdCgKKyAgICAgICAgICAgIG1T
eW1ib2xFbnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCks
IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1l
KFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCksIG1vZGlmaWVkTWFjaGluZXJpZXMpOworCisg
ICAgICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZS50eXBlICE9IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBl
biBieSBjb25zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIGF1dG8gZ2V0RnVuY3Rpb24gPSBbXShz
aDo6VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlY2wpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVk
TWFjaGluZXJpZXMuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkg
PSBtb2RpZmllZE1hY2hpbmVyaWVzLmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtYWNo
aW5lcnkubW9kaWZpZWRTdHJ1Y3QpOworCisgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhu
ZXcgVEludGVybURlY2xhcmF0aW9ueworICAgICAgICAgICAgICAgICAgICAmQ3JlYXRlU3RydWN0
VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgKm1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCl9KTsK
KworICAgICAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3Jp
Z2luYWxUb01vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnku
ZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoX2Jh
Y2sobWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPT0g
c2l6ZSAtIDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW5mby5m
dW5jT3JpZ2luYWxUb01vZGlmaWVkID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNPcmlnaW5h
bFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jTW9kaWZpZWRUb09y
aWdpbmFsID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBp
cGVsaW5lU3RydWN0OworICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hpbmVyeS5t
b2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKyAgICAg
ICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0gJnBpcGVsaW5lU3RydWN0Owor
ICAgICAgICB9CisKKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgo
JnJvb3QpLCBzZXEpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNs
YXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgp
OworCisgICAgICAgIGlmIChtUGlwZWxpbmUudXNlcyh2YXIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBtSW5mby5w
aXBlbGluZVZhcmlhYmxlcy5lbmQoKSk7CisgICAgICAgICAgICBtSW5mby5waXBlbGluZVZhcmlh
Ymxlcy5pbnNlcnQoJnZhcik7CisgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVz
aF9iYWNrKCZ2YXIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVjbE5vZGU7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAm
Y3JlYXRlSW50ZXJuYWxQaXBlbGluZVN0cnVjdChUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1T
ZXF1ZW5jZSAmb3V0RGVjbFNlcSkKKyAgICB7CisgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcg
VEZpZWxkTGlzdCgpOworCisgICAgICAgIHN3aXRjaCAobVBpcGVsaW5lLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6OlRleHR1cmU6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGlu
ZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghbUludmFyaWFudHMuY29udGFpbnMoKnZhcikpOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSB2YXJUeXBlLmdldEJhc2lj
VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVF
bnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvICp0ZXh0dXJlRW52VHlwZSAgICAgICAgID0gbmV3IFRUeXBlKCZ0ZXh0dXJl
RW52LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJUeXBlLmlzQXJyYXkoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
dlR5cGUtPm1ha2VBcnJheXModmFyVHlwZS5nZXRBcnJheVNpemVzKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2hfYmFjaygKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGQodGV4dHVyZUVudlR5cGUsIHZhci0+bmFtZSgp
LCBrTm9Tb3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZh
ciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gJnR5cGUgID0gQ2xvbmVUeXBlKHZhci0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUo
KSwga05vU291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZpZWxkcy5wdXNoX2JhY2soZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW52
YXJpYW50cy5jb250YWlucygqdmFyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbUludmFyaWFudHMuaW5zZXJ0KCpmaWVsZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBp
cGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7Cisg
ICAgICAgIGF1dG8gJnMgPSAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgcGlwZWxpbmVT
dHJ1Y3ROYW1lLnJhd05hbWUoKSwgJmZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXBlbGluZVN0cnVjdE5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAgICAgICBvdXRE
ZWNsU2VxLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ueyZDcmVhdGVTdHJ1Y3RUeXBl
VmFyaWFibGUobVN5bWJvbFRhYmxlLCBzKX0pOworCisgICAgICAgIHJldHVybiBzOworICAgIH0K
K307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0
cnVjdCkKK3sKKyAgICBBU1NFUlQocGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKwor
ICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisKKyAg
ICBhdXRvIHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIgPSBbJl0oKSB7CisgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworICAgICAgICBwaXBlbGluZU1h
aW5Mb2NhbFZhci5leHRlcm5hbCA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAg
ICAgc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKyAgICAgICAgICAgIHBp
cGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBpcGVsaW5l
OjpWYXJpYW50OjpPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgIH07CisKKyAg
ICBhdXRvIHBvcHVsYXRlRGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAg
ICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsID0KKyAgICAgICAgICAgICZDcmVhdGVJbnN0YW5j
ZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCAqcGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5h
bWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisgICAgfTsKKworICAgIGlmIChwaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgIHsKKyAgICAgICAg
cG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWlu
KCkpCisgICAgeworICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisKKyAg
ICAgICAgaWYgKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoIXBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgIHsKKyAg
ICAgICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHBpcGVsaW5lTWFpbkxvY2FsVmFyOworfQorCitjbGFzcyBQaXBlbGluZUZ1bmN0
aW9uRW52Cit7CisgIHByaXZhdGU6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7CisgICAgU3lt
Ym9sRW52ICZtU3ltYm9sRW52OworICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworICAg
IElkR2VuICZtSWRHZW47CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisgICAgY29uc3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsK
KworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBURnVuY3Rpb24gKiwgY29uc3QgVEZ1bmN0
aW9uICo+IG1GdW5jTWFwOworCisgIHB1YmxpYzoKKyAgICBQaXBlbGluZUZ1bmN0aW9uRW52KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5
bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8
VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhcikKKyAgICAgICAgOiBt
Q29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKyAg
ICAgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sRW52LnN5bWJvbFRhYmxlKCkpLAorICAgICAgICAg
IG1JZEdlbihpZEdlbiksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAg
ICBtUGlwZWxpbmVGdW5jdGlvbnMocGlwZWxpbmVGdW5jdGlvbnMpLAorICAgICAgICAgIG1QaXBl
bGluZVN0cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorICAgIHt9CisKKyAgICBib29sIGlzT3JpZ2luYWxQ
aXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtUGlwZWxpbmVGdW5jdGlvbnMuZmluZCgmZnVuYykgIT0gbVBpcGVsaW5lRnVu
Y3Rpb25zLmVuZCgpOworICAgIH0KKworICAgIGJvb2wgaXNVcGRhdGVkUGlwZWxpbmVGdW5jdGlv
bihjb25zdCBURnVuY3Rpb24gJmZ1bmMpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bUZ1bmNNYXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlmIChpdCA9PSBtRnVuY01hcC5lbmQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAmZnVuYyA9PSBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlv
biAmZ2V0VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihmdW5jKSB8fCBpc1VwZGF0ZWRQ
aXBlbGluZUZ1bmN0aW9uKGZ1bmMpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKm5ld0Z1
bmM7CisKKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworICAgICAgICBp
ZiAoaXQgPT0gbUZ1bmNNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiBt
UGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBl
OjpFYnRWb2lkKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRD
aGFuZ2VSZXR1cm5UeXBlKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxp
bmVTdHJ1Y3QuZXh0ZXJuYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
aXNNYWluICYmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvblZl
cnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
bVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sobmV3IFRWYXJpYWJsZSgmbVN5
bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+dHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUo
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25l
RnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJp
YWJsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1Q
aXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7
CisgICAgICAgICAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29t
cGlsZXIpLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgKnRleHR1cmVFbnYgPSBmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCkuc2l6
ZSgpID09IDIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmll
bGQgOiB0ZXh0dXJlRW52LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUo
e2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRUeXBlICZ0eXBlICAgICA9ICpuZXcgVFR5cGUoKnN1YmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXpl
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUo
KSwgJnR5cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rp
b24tPmFkZE9yaWdpbmFsTmFtZSh2YXItPnVuaXF1ZUlkKCkuZ2V0KCksIGZpZWxkLT5uYW1lKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJv
bFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBl
OjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9
IG1QaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlm
aWVkKTsKKyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFVJbnQpLCBuYW1lLnN5bWJvbFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgbmV3RnVuYyAgID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5k
UGFyYW0obVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKyAgICAgICAgICAgICAg
ICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRy
ZXNzU3BhY2UoKSk7CisgICAgICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVy
bmFsID0gdmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9j
YWxWYXIuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXI7CisgICAgICAgICAgICAgICAgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZTsKKworICAgICAgICAgICAgICAgIGlmIChpc01haW4gJiYgIW1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6
VmFyaWFudDo6T3JpZ2luYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IG1QaXBlbGluZS5leHRlcm5hbEFkZHJlc3NTcGFjZSgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFk
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJl
bmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlw
ZTo6VmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBc1JlZmVyZW5j
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIGFkZHJlc3NTcGFj
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kUHJlcGVuZFBhcmFtKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgKnZh
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GdW5jTWFwWyZmdW5jXSAgID0gbmV3
RnVuYzsKKyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0Z1bmMgPSBpdC0+c2Vj
b25kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXdGdW5jOworICAgIH0KKworICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBl
KAorICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpCisgICAg
eworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5j
dGlvbigpOworICAgICAgICBpZiAoIWlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpICYm
ICFpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5l
d0Z1bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHJldHVybiBuZXcgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlKCZuZXdGdW5jKTsKKyAgICB9Cit9OworCitjbGFzcyBVcGRh
dGVQaXBlbGluZUZ1bmN0aW9ucyA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0
ZToKKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0IFBpcGVsaW5lU2Nv
cGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKyAgICBQaXBlbGluZVNjb3BlZDxUVmFy
aWFibGU+ICZtUGlwZWxpbmVNYWluTG9jYWxWYXI7CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52
OworICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKyAgICBjb25zdCBURnVuY3Rpb24gKm1G
dW5jT3JpZ2luYWxUb01vZGlmaWVkOworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWw7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBib29sIFRocmVhZFBpcGVsaW5l
KFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBp
cGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZwaXBlbGluZUZ1bmN0aW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCkKKyAgICB7CisgICAgICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIHNlbGYoY29tcGlsZXIs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIsIGlkR2VuLCBz
eW1ib2xFbnYsIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgIGlmICghc2Vs
Zi5yZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgor
ICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rp
b24gKj4gJnBpcGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2Fs
VmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRU
b09yaWdpbmFsKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1
ZSksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlwZWxpbmVT
dHJ1Y3QocGlwZWxpbmVTdHJ1Y3QpLAorICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihw
aXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAor
ICAgICAgICAgIG1FbnYoY29tcGlsZXIsCisgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisgICAg
ICAgICAgICAgICBpZEdlbiwKKyAgICAgICAgICAgICAgIHBpcGVsaW5lLAorICAgICAgICAgICAg
ICAgcGlwZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdCwKKyAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisgICAgICAgICAgbUZ1bmNN
b2RpZmllZFRvT3JpZ2luYWwoZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICB9CisKKyAgICBj
b25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rp
b24gJnBpcGVsaW5lRnVuYykKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZUZ1bmMuaXNNYWlu
KCkgJiYgKG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklu
TWFpbigpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxp
bmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIHJldHVybiAq
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lRnVuYy5nZXRQYXJhbUNvdW50
KCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiAqcGlwZWxpbmVGdW5jLmdldFBhcmFtKDApOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtYWluRnVuYy5pc01haW4oKSk7CisgICAgICAgIGlmIChtUGlwZWxpbmVNYWluTG9jYWxW
YXIuZXh0ZXJuYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lTWFp
bkxvY2FsVmFyLmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAg
ICAgICAgcmV0dXJuICptYWluRnVuYy5nZXRQYXJhbSgwKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNhbGxOb2RlLmlzQ29uc3RydWN0b3Io
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRD
YWxsZWRGdW5jID0gKmNhbGxOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1F
bnYuaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVk
RnVuY3Rpb24ob2xkQ2FsbGVkRnVuYyk7CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAq
b2xkT3duZXJGdW5jID0gZ2V0UGFyZW50RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChv
bGRPd25lckZ1bmMpOworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdPd25lckZ1bmMg
PSBtRW52LmdldFVwZGF0ZWRGdW5jdGlvbigqb2xkT3duZXJGdW5jKTsKKworICAgICAgICAgICAg
cmV0dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAg
ICAgICAgbmV3Q2FsbGVkRnVuYywgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbE5vZGUuZ2V0U2VxdWVuY2UoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1F
bnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAg
ICBpZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY1Byb3RvTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm5ld0Z1
bmNQcm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2aXNpdE1haW4oZnVuY0RlZk5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZp
c2l0Tm9uTWFpbihmdW5jRGVmTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJt
Tm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2Rl
KQorICAgIHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2Rl
ID0gKmZ1bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVCgh
ZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7CisKKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYu
Y3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBp
ZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY0RlZk5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBURnVuY3Rpb24g
JmZ1bmMgPSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJU
KCFmdW5jLmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVm
Tm9kZS5nZXRCb2R5KCk7CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9k
ZSAmdmlzaXRNYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAg
IHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1
bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVChmdW5jUHJv
dG9Ob2RlLmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5jcmVhdGVV
cGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlmIChuZXdG
dW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jRGVmTm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9
ICpuZXdGdW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5p
c01haW4oKSk7CisKKyAgICAgICAgYXV0byBjYWxsTW9kaWZpZWRUb09yaWdpbmFsID0gWyZdKFRJ
bnRlcm1CbG9jayAmYm9keSkgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2Nh
bFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICBpZiAoIW1QaXBlbGluZS5pc1BpcGVsaW5lT3V0
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRU
b09yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2wo
JmdldEV4dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7CisgICAgICAgICAgICAgICAgYXV0
byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7
CisgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6
Q3JlYXRlRnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bSwgb30pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBhdXRvIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQgPSBbJl0oVElu
dGVybUJsb2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdpbmFsVG9N
b2RpZmllZCk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgYXV0byAqbSA9
IG5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOwor
ICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNy
ZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jT3JpZ2luYWxUb01v
ZGlmaWVkLCBuZXcgVEludGVybVNlcXVlbmNle28sIG19KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgVEludGVybUJsb2NrICpib2R5ID0gZnVuY0RlZk5vZGUuZ2V0Qm9k
eSgpOworCisgICAgICAgIGlmIChtUGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxl
RGVjbGFyYXRpb25Jbk1haW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworCisgICAgICAgICAgICBhdXRvICpu
ZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5k
U3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlu
dGVybmFsfSk7CisKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxp
bmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBzdHJ1Y3QgaW5zdGFuY2Ug
d2l0aCByZWZlcmVuY2VzIHRvIGdsb2JhbCBwaXBlbGluZSB2YXJpYWJsZXMuCisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFs
LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
KnZhciAgICAgICAgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCks
IGZpZWxkLT50eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnN5
bWJvbCAgICAgPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICAgICAgICAgICAgICBh
dXRvICZhY2Nlc3NOb2RlID0gQWNjZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCwgdmFyLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2Rl
ID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBz
eW1ib2wpOworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYXNz
aWduTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBp
cGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKworICAgICAgICAgICAgICAgIEFTU0VS
VChmdW5jLmdldFBhcmFtQ291bnQoKSA+PSAyICogZmllbGRzLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
ZmllbGRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZ0ZXh0dXJlUGFyYW0gPSAqZnVuYy5nZXRQYXJhbShwYXJhbUluZGV4KyspOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnNhbXBsZXJQYXJhbSA9ICpmdW5jLmdl
dFBhcmFtKHBhcmFtSW5kZXgrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnbyA9IFsm
XShUSW50ZXJtVHlwZWQgJmVudiwgY29uc3QgaW50ICppbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkICZ0ZXh0dXJlRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4
KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkICZzYW1wbGVyRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1tdXRh
YmxlU3RyaW5nKCJzYW1wbGVyIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1r
QXNzaWduID0gWyZdKFRJbnRlcm1UeXBlZCAmZmllbGQsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnko
VE9wZXJhdG9yOjpFT3BBc3NpZ24sICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lKCJhZGRyZXNzb2YiKSwgZmllbGQuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JkFjY2Vzc0luZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBpbmRl
eCl9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxkLCB0ZXh0
dXJlUGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRl
bWVudChta0Fzc2lnbihzYW1wbGVyRmllbGQsIHNhbXBsZXJQYXJhbSkpOworICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZW52ID0gQWNj
ZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwgZmllbGQtPm5hbWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZlbnZUeXBlID0gZW52LmdldFR5cGUo
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZW52VHlwZS5pc0FycmF5KCkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5p
c0FycmF5T2ZBcnJheXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIG4g
PSBzdGF0aWNfY2FzdDxpbnQ+KGVudlR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvKGVudiwgJmkp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ28oZW52LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFy
eSgKKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BBc3NpZ24sCisgICAgICAgICAg
ICAgICAgICAgICZBY2Nlc3NGaWVsZEJ5SW5kZXgoKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgJkFz
VHlwZShtU3ltYm9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoZnVuYykpKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnttUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWx9KTsKKyAgICAgICAgICAgICAgICBj
YWxsTW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworCisgICAgICAgICAgICBpZiAo
IW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50
ZXJtQnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcFJldHVybiwgbmV3
IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7Cisg
ICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKworICAg
ICAgICAgICAgYXV0byAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAg
IG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworICAgICAgICAgICAgY2FsbE1vZGlmaWVkVG9Pcmln
aW5hbCgqbmV3Qm9keSk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9k
eSk7CisgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAg
ICAgICAgIGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9
Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFVwZGF0ZVBpcGVsaW5lU3lt
Ym9scyhQaXBlbGluZTo6VHlwZSBwaXBlbGluZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJpYWJsZVNldCAm
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUVmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2FsVmFyKQoreworICAgIGF1dG8gbWFwID0g
WyZdKGNvbnN0IFRGdW5jdGlvbiAqb3duZXIsIFRJbnRlcm1TeW1ib2wgJnN5bWJvbCkgLT4gVElu
dGVybU5vZGUgJiB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlh
YmxlKCk7CisgICAgICAgIGlmIChwaXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IHBpcGVs
aW5lVmFyaWFibGVzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9s
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqc3RydWN0SW5zdGFuY2VWYXI7CisgICAgICAgIGlmIChvd25lci0+aXNNYWluKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5h
bCk7CisgICAgICAgICAgICBzdHJ1Y3RJbnN0YW5jZVZhciA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG93bmVyLT5nZXRQYXJhbUNvdW50KCkgPiAwKTsKKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChzdHJ1Y3RJbnN0YW5jZVZhcik7CisgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3Ry
dWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworICAgIH07CisgICAgcmV0dXJuIE1hcFN5bWJv
bHMoY29tcGlsZXIsIHJvb3QsIG1hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
K2Jvb2wgUmV3cml0ZVBpcGVsaW5lKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAm
aWRHZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUU3RydWN0dXJlPiAmb3V0U3RydWN0KQoreworICAgIEFTU0VSVChvdXRTdHJ1
Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0g
Y29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBwc2k7
CisgICAgaWYgKCFHZW5lcmF0ZVBpcGVsaW5lU3RydWN0OjpFeGVjKHBzaSwgY29tcGlsZXIsIHJv
b3QsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHNpLmlzRW1wdHkoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVG
dW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZh
cmlhYmxlICZ2YXIpIHsKKyAgICAgICAgcmV0dXJuIHBzaS5waXBlbGluZVZhcmlhYmxlcy5maW5k
KCZ2YXIpICE9IHBzaS5waXBlbGluZVZhcmlhYmxlcy5lbmQoKTsKKyAgICB9KTsKKworICAgIGF1
dG8gcGlwZWxpbmVNYWluTG9jYWxWYXIgPQorICAgICAgICBDcmVhdGVQaXBlbGluZU1haW5Mb2Nh
bFZhcihzeW1ib2xUYWJsZSwgcGlwZWxpbmUsIHBzaS5waXBlbGluZVN0cnVjdCk7CisKKyAgICBp
ZiAoIVVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zOjpUaHJlYWRQaXBlbGluZSgKKyAgICAgICAgICAg
IGNvbXBpbGVyLCByb290LCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBzaS5waXBlbGlu
ZVN0cnVjdCwgcGlwZWxpbmVNYWluTG9jYWxWYXIsCisgICAgICAgICAgICBpZEdlbiwgc3ltYm9s
RW52LCBwc2kuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2lu
YWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGlw
ZWxpbmUuZ2xvYmFsSW5zdGFuY2VWYXIpCisgICAgeworICAgICAgICBpZiAoIVVwZGF0ZVBpcGVs
aW5lU3ltYm9scyhwaXBlbGluZS50eXBlLCBjb21waWxlciwgcm9vdCwgc3ltYm9sRW52LCBwc2ku
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFQcnVuZU5vT3BzKCZjb21waWxlciwgJnJv
b3QsICZjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBvdXRTdHJ1Y3QgPSBwc2kucGlwZWxpbmVTdHJ1Y3Q7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6
UmV3cml0ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZh
bmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlh
bnRzICZpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVj
dHMgJm91dFN0cnVjdHMpCit7CisgICAgc3RydWN0IEluZm8KKyAgICB7CisgICAgICAgIFBpcGVs
aW5lOjpUeXBlIHBpcGVsaW5lVHlwZTsKKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVy
ZT4gJm91dFN0cnVjdDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZh
cjsKKyAgICB9OworCisgICAgSW5mbyBpbmZvc1tdID0geworICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6Okluc3RhbmNlSWQsIG91dFN0cnVjdHMuaW5zdGFuY2VJZCwgbnVsbHB0cn0sCisgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpOb25Db25zdGFudEdsb2JhbHMsIG91dFN0cnVjdHMu
bm9uQ29uc3RhbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpB
bmdsZVVuaWZvcm1zLCBvdXRTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMsICZhbmdsZVVuaWZvcm1zR2xv
YmFsSW5zdGFuY2VWYXJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywg
b3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6OlZlcnRleEluLCBvdXRTdHJ1Y3RzLnZlcnRleEluLCBudWxscHRyfSwKKyAgICAgICAge1Bp
cGVsaW5lOjpUeXBlOjpWZXJ0ZXhPdXQsIG91dFN0cnVjdHMudmVydGV4T3V0LCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50
SW4sIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50T3V0LCBvdXRT
dHJ1Y3RzLmZyYWdtZW50T3V0LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJ
bnZvY2F0aW9uVmVydGV4R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uVmVydGV4R2xvYmFs
cywgbnVsbHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50
R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwK
KyAgICB9OworCisgICAgZm9yIChJbmZvICZpbmZvIDogaW5mb3MpCisgICAgeworICAgICAgICBQ
aXBlbGluZSBwaXBlbGluZXtpbmZvLnBpcGVsaW5lVHlwZSwgaW5mby5nbG9iYWxJbnN0YW5jZVZh
cn07CisgICAgICAgIGlmICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwg
cGlwZWxpbmUsIHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5vdXRTdHJ1Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBp
cGVsaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MWJhODJiNGU5Njc3ZDJjMjk3NGY5MTRiN2UzNDgwYjBl
ODliNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUaGlzIHJld3JpdGVzIGFsbCBw
aXBlbGluZXMuCisvLworLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisvLyAgICAtIERpc2NvdmVyIGFs
bCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKy8vICAgIC0gTW92ZSB0
aGUgdmFyaWFibGVzIGludG8gYW4gaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGluc3RhbmNlIGFu
ZCB1cGRhdGUgb2xkIHZhcmlhYmxlcyB0byBiZQorLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisvLyAgICAtIERlcGVuZGVuY3kgaW5qZWN0IHRoZSBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1
Y3QgdG8gYWxsIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB2YXJpYWJsZXMgZnJvbQorLy8gICAgICB0
aGUgc3RydWN0LgorLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3Jl
YXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisvLyAg
ICAgIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3RzIGFyZSB0aGUgc2FtZS4K
Ky8vICAgIC0gQWRkIGBtYWluYCBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlIGZvciB0aGUgZXh0
ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGFzIG5lZWRlZC4KKy8vICAgIC0gSW5zaWRlIGBtYWluYCwg
bWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRp
ZmZlciBhbmQgaXMgcHJvdmlkZWQKKy8vICAgICAgYXMgYSBwYXJhbWV0ZXIgdG8gYG1haW5gLgor
Ly8gICAgLSBJbnNpZGUgYG1haW5gLCBtYXAgdGhlIGludGVybmFsIHN0cnVjdCB0byB0aGUgZXh0
ZXJuYWwgc3RydWN0IGlmIHRoZXkgZGlmZmVyIGFuZCBpcyByZXR1cm5lZAorLy8gICAgICBmcm9t
IGBtYWluYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlUGlwZWxpbmVzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
ZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0cyAm
b3V0U3RydWN0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTc3YzFhNTg1NTFiMzJjOWZmNmNkYzllN2JhZWIzOGNhODZiZGQyYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
CkBAIC0wLDAgKzEsMzc2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
QXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQXNOb2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50
ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCiti
b29sIElzT3V0UGFyYW0oY29uc3QgVFR5cGUgJnBhcmFtVHlwZSkKK3sKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNoIChxdWFs
KQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c1ZlY3RvckFjY2VzcyhUSW50ZXJtQmluYXJ5ICZiaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9w
ID0gYmluYXJ5LmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSA9IGJpbmFyeS5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVj
dG9yKCkgfHwgbGVmdFR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIEFTU0VSVChJc1NjYWxhckJhc2ljVHlwZShiaW5hcnkuZ2V0VHlwZSgp
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJc1ZlY3RvckFjY2VzcyhUSW50ZXJt
Tm9kZSAmbm9kZSkKK3sKKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBJc1ZlY3RvckFjY2VzcygqYmluKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEaWZmZXJzIGZyb20gSXNBc3NpZ25tZW50IGluIHRo
YXQgaXQgZG9lcyBub3QgaW5jbHVkZSAoKyspIG9yICgtLSkuCitib29sIElzQXNzaWduRXF1YWxz
U2lnbihUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0
aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIE9u
bHkgaW5jbHVkZXMgKCQ9KSBzdHlsZSBhc3NpZ25zLCB3aGVyZSAoJCkgaXMgYSBiaW5hcnkgb3Au
Citib29sIElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
CisgICAgeworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UmV0dXJuc1JlZmVyZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2Nh
bGFyQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERl
Y3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3Vu
ZEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBu
b2RlLmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAg
ICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNz
aWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgICAg
IG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAgICAgb3AgPSBU
T3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6
RU9wQml0d2lzZU9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBMT0dJQ19FUlJPUigpOworICAgIH0KKworICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBh
cmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisgICAgLy8g
VGhpcyBhc3N1bXB0aW9uIGFsbG93cyB0aGlzIGNvZGUgdG8gbm90IG5lZWQgdG8gaW50cm9kdWNl
IHRlbXBvcmFyaWVzLgorICAgIC8vCisgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJv
dXQ6CisgICAgLy8gICAgICB2ZWNbaGFzU2lkZUVmZmVjdCgpXSAqPSA0CisgICAgLy8gYmVjb21p
bmcKKyAgICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3Qo
KV0gKiA0CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7CisgICAg
VEludGVybVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICByZXR1cm4gKm5ldyBU
SW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBsZWZ0LT5kZWVwQ29weSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkob3AsIGxlZnQsIHJp
Z2h0KSk7Cit9CisKK2NsYXNzIFJld3JpdGVyMSA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorewor
ICBwdWJsaWM6CisgICAgUmV3cml0ZXIxKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJl
YnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJp
bmFyeVBvc3QoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYg
KElzQ29tcG91bmRBc3NpZ24ob3ApKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGVmdC5n
ZXRBc1N3aXp6bGVOb2RlKCkgfHwgSXNWZWN0b3JBY2Nlc3MobGVmdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5h
cnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluYXJ5
Tm9kZTsKKyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlcjIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7Cisg
ICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworCisgIHByaXZhdGU6CisgICAgYm9vbCByZXF1aXJl
c0FkZHJlc3NpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1SZXF1aXJlc0FkZHJlc3Np
bmdTdGFjay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5iYWNrKCk7
CisgICAgfQorCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIyKCkgb3ZlcnJpZGUgeyBBU1NFUlQo
bVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRlcjIoVENv
bXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAg
ICB7fQorCisgICAgUHJlUmVzdWx0IHZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUg
JmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24g
KmZ1bmMgPSBhZ2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0K
KworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1
ZW5jZSgpOworICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7
CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlID0gcGFyYW0uZ2V0VHlwZSgpOwor
ICAgICAgICAgICAgVEludGVybU5vZGUgKmFyZyAgICAgICA9IGFyZ3NbaV07CisgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKworICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1
c2hfYmFjayhJc091dFBhcmFtKHBhcmFtVHlwZSkpOworICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJnc1tpXSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKTsKKyAgICAg
ICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAg
IH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dp
enpsZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJlcXVpcmVzQWRkcmVzc2lu
ZygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3dpenpsZU5vZGU7CisgICAgICAg
IH0KKworICAgICAgICBUSW50ZXJtVHlwZWQgJnZlY05vZGUgICAgICAgICA9ICpzd2l6emxlTm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXJMaXN0ICZvZmZzZXRzID0g
c3dpenpsZU5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKTsKKyAgICAgICAgQVNTRVJUKCFvZmZzZXRz
LmVtcHR5KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0cy5zaXplKCkgPD0gNCk7CisKKyAgICAg
ICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgICAgIGFyZ3MucmVz
ZXJ2ZShvZmZzZXRzLnNpemUoKSArIDEpOworICAgICAgICBhcmdzLnB1c2hfYmFjaygmdmVjTm9k
ZSk7CisgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFyZ3MucHVzaF9iYWNrKG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0
YW50VW5pb24ob2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUo
InN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJncyk7CisgICAgfQorCisg
ICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLmdl
dE9wKCk7CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0FjY2VzcyA9IElzVmVjdG9yQWNjZXNzKGJp
bmFyeU5vZGUpOworCisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNS
ZWZlcmVuY2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3NpbmcoKTsKKyAgICAgICAgY29uc3QgYm9v
bCBkaXNhYmxlTGVmdCAgPSBkaXNhYmxlVG9wOworICAgICAgICBjb25zdCBib29sIGRpc2FibGVS
aWdodCA9IGRpc2FibGVUb3AgfHwgaXNBY2Nlc3MgfHwgSXNBc3NpZ25FcXVhbHNTaWduKG9wKTsK
KworICAgICAgICBhdXRvIHRyYXZlcnNlID0gWyZdKFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3Qg
Ym9vbCBkaXNhYmxlKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgICAgICBpZiAoZGlzYWJs
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3Rh
Y2sucHVzaF9iYWNrKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gKm5l
d05vZGUgPSBhc05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChuZXdOb2RlKTsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworICAg
ICAgICB9OworCisgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgJnJpZ2h0Tm9kZSA9ICpiaW5hcnlOb2Rl
LmdldFJpZ2h0KCk7CisKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNl
KGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmbmV3UmlnaHQg
PSB0cmF2ZXJzZShyaWdodE5vZGUsIGRpc2FibGVSaWdodCk7CisKKyAgICAgICAgaWYgKCFpc0Fj
Y2VzcyB8fCBkaXNhYmxlVG9wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoJmxlZnROb2Rl
ID09ICZuZXdMZWZ0ICYmICZyaWdodE5vZGUgPT0gJm5ld1JpZ2h0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiB7JmJpbmFyeU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShv
cCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgi
ZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmbmV3TGVmdCwg
Jm5ld1JpZ2h0fSksCisgICAgICAgICAgICAgICAgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9
Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAg
ICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghUmV3cml0ZXIyKGNvbXBpbGVyLCBz
eW1ib2xFbnYpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5h
ZGRyZXNzYWJsZVJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2RhOTg0M2ViMmU2MDdlZWNjNjkw
ZmNlYzE2MmM2MjdhNjFiN2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RVVOQUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBHaXZlbjoKKy8vICAgdm9pZCBmb28o
b3V0IHgpOworLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgdG8gYmUgbGVnYWwg
aW4gR0xTTCBidXQgbm90IGluIE1ldGFsOgorLy8gICBmb28oZXhwcmVzc2lvbik7CisvLyBUaGlz
IGNhbiBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6
bGUgb3IgdmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorLy8gVGhpcyByZXdyaXRlIGZ1bmN0aW9uYWxp
dHkgaW50cm9kdWNlcyB0ZW1wb3JhcmllcyB0aGF0IHNlcnZlIGFzIHByb3hpZXMgdG8gYmUgcGFz
c2VkIHRvIHRoZQorLy8gb3V0L2lub3V0IHBhcmFtZXRlcnMgYXMgbmVlZGVkLiBUaGUgY29ycmVz
cG9uZGluZyBleHByZXNzaW9ucyBnZXQgcG9wdWxhdGVkIHdpdGggdGhlaXIKKy8vIHByb3hpZXMg
YWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFVU5BRERS
RVNTQUJMRVJFRkVSRU5DRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHBy
ZXNzaW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3YjM3M2QzMWIyMjkzYWIwODQ5NTJkNDhmMjE5ODFl
MzViZWY0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8
dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Jvb2wgSXNJbmRleChU
T3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4
RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNJbmRleChUSW50ZXJtVHlwZWQgJmV4cHIp
Cit7CisgICAgaWYgKGF1dG8gKmJpbmFyeSA9IGV4cHIuZ2V0QXNCaW5hcnlOb2RlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhwci5nZXRBc1N3aXp6bGVOb2RlKCk7Cit9CisKK2Jvb2wgVmlld0JpbmFyeUNoYWlu
KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkICZub2RlLCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlw
ZWQgKj4gJm91dCkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBub2RlLmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgIGlmICghYmluYXJ5IHx8IGJpbmFyeS0+Z2V0T3AoKSAhPSBvcCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKmxl
ZnQgID0gYmluYXJ5LT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpyaWdodCA9IGJpbmFy
eS0+Z2V0UmlnaHQoKTsKKworICAgIGlmICghVmlld0JpbmFyeUNoYWluKG9wLCAqbGVmdCwgb3V0
KSkKKyAgICB7CisgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYg
KCFWaWV3QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkKKyAgICB7CisgICAgICAgIG91dC5w
dXNoX2JhY2socmlnaHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZl
Y3RvcjxUSW50ZXJtVHlwZWQgKj4gVmlld0JpbmFyeUNoYWluKFRJbnRlcm1CaW5hcnkgJm5vZGUp
Cit7CisgICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluOworICAgIFZpZXdCaW5h
cnlDaGFpbihub2RlLmdldE9wKCksIG5vZGUsIGNoYWluKTsKKyAgICBBU1NFUlQoY2hhaW4uc2l6
ZSgpID49IDIpOworICAgIHJldHVybiBjaGFpbjsKK30KKworY2xhc3MgUHJlUGFzcyA6IHB1Ymxp
YyBUSW50ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgUHJlUGFzcyhUQ29tcGlsZXIgJmNv
bXBpbGVyKSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSB7fQorCisgIHBy
aXZhdGU6CisgICAgLy8gQ2hhbmdlIGNoYWlucyBvZgorICAgIC8vICAgICAgeCBPUCB5IE9QIHoK
KyAgICAvLyB0bworICAgIC8vICAgICAgeCBPUCAoeSBPUCB6KQorICAgIC8vIHJlZ2FyZGxlc3Mg
b2Ygb3JpZ2luYWwgcGFyZW50aGVzaXphdGlvbi4KKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2Np
YXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCAgICAgICAgICAgICAgICA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqcmVzdWx0ID0gY2hhaW4uYmFjaygpOworICAgICAgICBjaGFpbi5w
b3BfYmFjaygpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKworICAgICAgICBjb25zdCBhdXRv
IGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGF1dG8gZW5kICAgPSBjaGFp
bi5yZW5kKCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVR5cGVkICpwYXJ0ID0gKml0
ZXI7CisgICAgICAgICAgICBBU1NFUlQocGFydCk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAq
dGVtcCA9IHJlYnVpbGQoKnBhcnQpLnNpbmdsZSgpOworICAgICAgICAgICAgQVNTRVJUKHRlbXAp
OworICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIEFT
U0VSVChwYXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBw
YXJ0LCByZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0K
KworICBwcml2YXRlOgorICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5
ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gbm9k
ZS5nZXRPcCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8
IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4ge3JlYXNzb2NpYXRlUmlnaHQobm9kZSksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworY2xhc3MgU2VwYXJhdG9y
IDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPj4gbVN0bXRzU3RhY2s7CisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVj
bGFyYXRpb24gKj4+IG1CaW5kaW5nTWFwU3RhY2s7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJ
bnRlcm1UeXBlZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PFRJbnRlcm1EZWNsYXJhdGlvbiAqPiBtTWFza2VkRGVjbHM7CisKKyAgcHVibGljOgor
ICAgIFNlcGFyYXRvcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudiwg
SWRHZW4gJmlkR2VuKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0
cnVlKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICB+U2VwYXJhdG9yKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNT
RVJUKG1FeHByTWFwLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5l
bXB0eSgpKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmZ2V0Q3VyclN0bXRzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2su
ZW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtU3RtdHNTdGFjay5iYWNrKCk7CisgICAgfQorCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRp
b24gKj4gJmdldEN1cnJCaW5kaW5nTWFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRp
bmdNYXBTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1CaW5kaW5nTWFwU3RhY2suYmFj
aygpOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0bXQoVEludGVybU5vZGUgJm5vZGUpIHsgZ2V0
Q3VyclN0bXRzKCkucHVzaF9iYWNrKCZub2RlKTsgfQorCisgICAgYm9vbCBpc1Rlcm1pbmFsRXhw
cihUSW50ZXJtTm9kZSAmbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlID0g
Z2V0Tm9kZVR5cGUobm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqcHVsbE1hcHBlZEV4cHIoVEludGVybVR5cGVk
ICpub2RlLCBib29sIGFsbG93QmFja3RyYWNrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVk
ICpleHByOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZp
bmQobm9kZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtRXhwck1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBBU1NFUlQoZXhwcik7CisgICAgICAgICAgICBtRXhwck1hcC5lcmFzZShp
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd0JhY2t0cmFjaykKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byAmYmluZGluZ01hcCA9IGdldEN1cnJCaW5kaW5nTWFwKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoVEludGVybVN5bWJvbCAqc3ltYm9sID0gZXhwci0+Z2V0QXNTeW1i
b2xOb2RlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ2YXIgPSBzeW1ib2wtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyICAg
ICAgICAgICAgPSBiaW5kaW5nTWFwLmZpbmQoJnZhcik7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAg
ICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworICAgICAgICAgICAgICAgIGV4cHIgPSBWaWV3
RGVjbGFyYXRpb24oKmRlY2wpLmluaXRFeHByOworICAgICAgICAgICAgICAgIEFTU0VSVChleHBy
KTsKKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAg
ICAgIG1NYXNrZWREZWNscy5pbnNlcnQoZGVjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhbmRhbG9uZUV4
cHIoVEludGVybVR5cGVkICZleHByKQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudE5vZGUo
KS0+Z2V0QXNCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwci5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0g
VEJhc2ljVHlwZTo6RWJ0Vm9pZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZu
ZXdFeHByKQorICAgIHsKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZUV4cHIobmV3RXhwcikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5ld0V4cHIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChJc0luZGV4KG5ld0V4cHIpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJp
bmRpbmdNYXAoKTsKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lICA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5z
eW1ib2xUeXBlKCkpOworICAgICAgICBhdXRvICpkZWNsID0gbmV3IFRJbnRlcm1EZWNsYXJhdGlv
bih2YXIsICZuZXdFeHByKTsKKyAgICAgICAgcHVzaFN0bXQoKmRlY2wpOworICAgICAgICBtRXhw
ck1hcFsmb2xkRXhwcl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICBiaW5kaW5n
TWFwW3Zhcl0gICAgPSBkZWNsOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0YWNrcygpCisgICAg
eworICAgICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgbUJpbmRpbmdN
YXBTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFN0YWNrcygpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisgICAgICAg
IEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFj
ay5iYWNrKCkuZW1wdHkoKSk7CisgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsK
KyAgICAgICAgbVN0bXRzU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hT
dG10c0ludG9CbG9jayhUSW50ZXJtQmxvY2sgJmJsb2NrLCBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmc3RtdHMpCisgICAgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9j
ay5nZXRTZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBz
dG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1NYXNrZWREZWNscy5maW5kKGRlY2wpOworICAgICAgICAgICAgICAg
IGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1NYXNrZWREZWNscy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRl
cm1CbG9jayAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKGNvbnN0IFRWYXJpYWJsZSAmdmFyLCBU
SW50ZXJtVHlwZWQgJm5ld0V4cHIpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7CisgICAgICAgIHBvcFN0
YWNrcygpOworCisgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgYXV0byAmc2VxICAgPSAqYmxvY2suZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgc2VxLnJl
c2VydmUoMSArIHN0bXRzLnNpemUoKSk7CisgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9j
aywgc3RtdHMpOworICAgICAgICBzZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBuZXcgVEludGVybVN5bWJvbCgmdmFyKSwgJm5ld0V4cHIpKTsKKwor
ICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0
IHZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcHVzaFN0YWNrcygpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0
UmVzdWx0IHZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdl
dEN1cnJTdG10cygpKTsKKyAgICAgICAgcG9wU3RhY2tzKCk7CisKKyAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEuY2xlYXIoKTsK
KyAgICAgICAgc2VxLnJlc2VydmUoc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50
b0Jsb2NrKG5vZGUsIHN0bXRzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50ID0gZ2V0
UGFyZW50Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0
aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IERlY2xhcmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7CisgICAgICAgIGlmICgh
ZGVjbC5pbml0RXhwciB8fCBpc1Rlcm1pbmFsRXhwcigqZGVjbC5pbml0RXhwcikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOwor
ICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xh
cmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCA9
IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgQVNTRVJUKGRlY2wuc3ltYm9sLnZhcmlh
YmxlKCkuc3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgQVNTRVJU
KCFkZWNsLnN5bWJvbC52YXJpYWJsZSgpLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXRFeHByID0gcHVsbE1hcHBlZEV4cHIoZGVj
bC5pbml0RXhwciwgdHJ1ZSk7CisgICAgICAgIGlmIChkZWNsLmluaXRFeHByID09IG5ld0luaXRF
eHByKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gJm5ld05vZGUgPSAqbmV3
IFRJbnRlcm1EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJh
dG9yKAorICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSwgJmRlY2wuc3ltYm9sLCBuZXdJbml0RXhwcikpOworICAgICAgICAgICAgcHVzaFN0
bXQobmV3Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisg
ICAgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQo
KTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwg
ZmFsc2UpOworICAgICAgICBpZiAoZXhwciA9PSBuZXdFeHByKQorICAgICAgICB7CisgICAgICAg
ICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXcgVEludGVybVVuYXJ5
KG5vZGUuZ2V0T3AoKSwgbmV3RXhwciwgbm9kZS5nZXRGdW5jdGlvbigpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6
OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisKKyAgICAg
ICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworICAgICAgICAg
ICAgQVNTRVJUKGxlZnRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAgICBwdXNoU3RhY2tz
KCk7CisgICAgICAgICAgICBQb3N0UmVzdWx0IHJpZ2h0UmVzdWx0ID0gcmVidWlsZCgqcmlnaHQp
OworICAgICAgICAgICAgQVNTRVJUKHJpZ2h0UmVzdWx0LnNpbmdsZSgpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OlBvc3R9OworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVElu
dGVybUJpbmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRv
ciBvcCA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSAmJiBnZXRQYXJlbnROb2RlKCktPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVj
bGFyYXRpb25Qb3N0CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAgICBpZiAob3AgPT0gVE9w
ZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3
TmFtZSgiIik7CisgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Qm9vbCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3ltYm9sVHlwZSgpKTsK
KworICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCAgID0gcHVsbE1hcHBlZEV4cHIo
cmlnaHQsIHRydWUpOworICAgICAgICAgICAgVEludGVybUJsb2NrICpyaWdodEJsb2NrID0gJmJ1
aWxkQmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3UmlnaHQpOworICAgICAgICAgICAgVElu
dGVybVR5cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7Cisg
ICAgICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uZCA9IG5ldyBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90LCBjb25kLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCBuZXdMZWZ0KSk7CisgICAg
ICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVs
bHB0cikpOworICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3lt
Ym9sKHZhcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3TGVmdCAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0
LCBmYWxzZSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3UmlnaHQgPSBwdWxsTWFwcGVkRXhw
cihyaWdodCwgaXNBc3NpZ24pOworCisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENv
bW1hKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpuZXdOb2RlOworICAgICAgICAgICAg
aWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBuZXdOb2RlID0gJm5vZGU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdFRlcm5hcnlQcmUo
VEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBQb3N0UmVzdWx0
IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUKGNvbmRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFja3MoKTsKKyAgICAg
ICAgUG9zdFJlc3VsdCB0aGVuUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRUcnVlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKHRoZW5SZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1
c2hTdGFja3MoKTsKKyAgICAgICAgUG9zdFJlc3VsdCBlbHNlUmVzdWx0ID0gcmVidWlsZCgqbm9k
ZS5nZXRGYWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmds
ZSgpKTsKKworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb25kICA9IG5vZGUuZ2V0Q29u
ZGl0aW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdGhlbiAgPSBub2RlLmdldFRydWVFeHBy
ZXNzaW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZub2RlLmdldFR5cGUoKSwgbmFtZS5zeW1i
b2xUeXBlKCkpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBl
ZEV4cHIoZWxzZV8sIGZhbHNlKTsKKyAgICAgICAgVEludGVybUJsb2NrICplbHNlQmxvY2sgPSAm
YnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdFbHNlKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdUaGVuICAgPSBwdWxsTWFwcGVkRXhwcih0aGVuLCB0cnVlKTsKKyAgICAgICAg
VEludGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIs
ICpuZXdUaGVuKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25kICAgPSBwdWxsTWFwcGVk
RXhwcihjb25kLCB0cnVlKTsKKworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKyAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IHRoZW5CbG9jaywgZWxzZUJsb2NrKSk7CisgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihu
b2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRl
cm1TeW1ib2wodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmbm9kZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0
T3BlcmFuZCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhw
cihleHByLCBmYWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50
ZXJtU3dpenpsZShuZXdFeHByLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdn
cmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
Zm9yIChUSW50ZXJtTm9kZSAqJmFyZyA6IGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNTRVJU
KHRhcmcpOworICAgICAgICAgICAgYXJnID0gcHVsbE1hcHBlZEV4cHIodGFyZywgZmFsc2UpOwor
ICAgICAgICB9CisgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0
aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFnZXRQYXJl
bnRGdW5jdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlz
aXRDYXNlUHJlKFRJbnRlcm1DYXNlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KFRJbnRlcm1UeXBlZCAqY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworICAgICAgICB9CisgICAg
ICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVp
dGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3
aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdCAg
ICA9IG5vZGUuZ2V0SW5pdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxs
TWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisgICAgICAgIGlmIChpbml0ID09IG5ld0luaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtU3dpdGNo
KG5ld0luaXQsIG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpKSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENv
bmRpdGlvbigpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBwdWxsTWFwcGVkRXhw
cihjb25kLCBmYWxzZSk7CisgICAgICAgIGlmIChjb25kID09IG5ld0NvbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IG5vZGUuZ2V0VHJ1ZUJsb2NrKCksIG5vZGUuZ2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJyYW5j
aFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgICAgICBUSW50ZXJt
VHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBmYWxzZSk7CisgICAgICAgIGlm
IChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0
bXQoKm5ldyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4cHIpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRM
b29wUHJlKFRJbnRlcm1Mb29wICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBM
T0dJQ19FUlJPUigpOworICAgICAgICB9CisgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJl
c3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLmdldFR5cGUo
KTsKKyAgICAgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFRoZXNlIHNob3VsZCBiZSBzY3J1YmJl
ZCBmcm9tIEFTVCBiZWZvcmUgcmV3cml0ZXIgaXMgY2FsbGVkLgorICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpTZXBhcmF0
ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmIChyZWFk
Qm9vbEVudlZhcigiR01UX0RJU0FCTEVfU0VQQVJBVEVfQ09NUE9VTkRfRVhQUkVTU0lPTlMiKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghU2ltcGxpZnlM
b29wQ29uZGl0aW9ucygmY29tcGlsZXIsICZyb290LCAmY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFQcmVQ
YXNzKGNvbXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRvcihjb21waWxlciwgc3ltYm9sRW52LCBp
ZEdlbikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3Vu
ZEV4cHJlc3Npb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU0MGE1NTk2ODJhZGRlYzliNmE1MDAwNzJhNjBj
M2QwNjFkYjRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRF
WFBSRVNTSU9OU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUcmFuc2Zvcm1zIGNvZGUg
dG8gKHVzdWFsbHkpIGhhdmUgbW9zdCBvbmUgbm9uLXRlcm1pbmFsIGV4cHJlc3Npb24gcGVyIHN0
YXRlbWVudC4KKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRv
IHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisvLworLy8g
ZS5nLgorLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKy8vIGJlY29tZXMKKy8vICAg
IGF1dG8gXzEgPSBiYXIoKTsKKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworLy8gICAgYXV0
byBfMyA9IDYgKyBfMjsKKy8vICAgIGludCB4ID0gXzM7CisvLworLy8gV0FSTklORzoKKy8vICAg
IC0gVGhpcyBkb2VzIG5vdCByZXdyaXRlIG9iamVjdCBpbmRleGluZyBvcGVyYXRvcnMgYXMgYSB3
aG9sZSAoZS5nLiBmb28ueCwgZm9vW3hdKSwgYnV0IHdpbGwKKy8vICAgICAgcmV3cml0ZSB0aGUg
YXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKy8vICAgICAgZS5n
LgorLy8gICAgICAgIGZvbyhnZXRWZWMoKVtpICsgMl0gKyAxKTsKKy8vICAgICAgYmVjb21lcwor
Ly8gICAgICAgIGF1dG8gXzEgPSBnZXRWZWMoKTsKKy8vICAgICAgICBhdXRvIF8yID0gaSArIDI7
CisvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9yIHJlbWFp
bnMgaW4gKCspIGV4cHIgaGVyZS4KKy8vICAgICAgICBmb28oXzMpOworLy8KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfU0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJh
OGM2ZDEyMGIwYjQ1MjIwNjk0YmZiYjY3NGYwZGJjM2QwYzIxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApAQCAt
MCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBTZXBh
cmF0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2VwYXJh
dG9yKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwg
ZmFsc2UsIHRydWUsICZzeW1ib2xUYWJsZSkge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlv
bihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBU
SW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAg
IGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3lt
Ym9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAg
ICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJv
bFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RT
cGVjaWZpZXIoKSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUu
Z2V0U3RydWN0KCk7CisgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAg
ID0gbmV3IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUoc3Ry
dWN0dXJlLCB0cnVlKSwgU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAgICAgICAgICAgICAgYXV0
byAqaW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlVHlwZS0+c2V0UXVhbGlmaWVyKHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gKmluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShtU3ltYm9s
VGFibGUsIHZhci5uYW1lKCksIGluc3RhbmNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSByZXBsYWNlbWVudHM7CisgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RW
YXIpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJt
U3ltYm9sKGluc3RhbmNlVmFyKSk7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVF
bnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFNlcGFyYXRvciBzZXBhcmF0
b3IoY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC50cmF2ZXJzZSgmc2VwYXJh
dG9yKTsKKyAgICBpZiAoIXNlcGFyYXRvci51cGRhdGVUcmVlKCZjb21waWxlciwgJnJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVE
ZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Nl
cGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzEyZTgwZDhh
NTgxZTQ0ZTE5NmU4NjY0MzhmOWJjZTFkYTk0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDI0
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRTVFJVQ1RERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VO
RFNUUlVDVERFQ0xBUkFUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBz
aAoreworCisvLyBFeGFtcGxlOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfSBmb287CisvLyBC
ZWNvbWVzOgorLy8gIHN0cnVjdCBGb28ge2ludCB4OyB9OyBGb28gZm9vOworQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZj
b21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJB
VEVDT01QT1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NraXBwaW5nVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZjQ5ZGFkMjI1MmU0NjdhZDk3OTFhMTc1ODQwYjY4Y2UyMTYzYjcxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKQEAgLTAsMCAr
MSw0NyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKKy8vIEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZl
cnNpbmcgY2hpbGRlbiBieSBkZWZhdWx0LgorY2xhc3MgU2tpcHBpbmdUcmF2ZXJzZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2tpcHBpbmdUcmF2ZXJzZXIo
Ym9vbCBwcmVWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAg
ICAgICAgICAgICAgICAgICAgICBib29sIHBvc3RWaXNpdF8sCisgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogVEludGVy
bVRyYXZlcnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xUYWJsZSkK
KyAgICB7fQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5h
cnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQsIFRJbnRlcm1UZXJuYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdElm
RWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQ
UElOR1RSQVZFUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzUzZGFjZjJkNjg4Y2Jl
NjAxNTg4MDA2YWUyOTdmYWM0MTMwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1N5bWJvbEVudi5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0
ZXhwciBBZGRyZXNzU3BhY2Uga0FkZHJlc3NTcGFjZXNbXSA9IHsKKyAgICBBZGRyZXNzU3BhY2U6
OkNvbnN0YW50LAorICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorICAgIEFkZHJlc3NTcGFjZTo6
VGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqc2g6OnRvU3RyaW5nKEFkZHJlc3NTcGFjZSBzcGFj
ZSkKK3sKKyAgICBzd2l0Y2ggKHNwYWNlKQorICAgIHsKKyAgICAgICAgY2FzZSBBZGRyZXNzU3Bh
Y2U6OkNvbnN0YW50OgorICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7CisgICAgICAgIGNh
c2UgQWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgICAgICByZXR1cm4gImRldmljZSI7Cisg
ICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisgICAgICAgICAgICByZXR1cm4gInRo
cmVhZCI7CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBOYW1l
VG9TdHJ1Y3QgPSBzdGQ6Om1hcDxOYW1lLCBjb25zdCBUU3RydWN0dXJlICo+OworCitjbGFzcyBT
dHJ1Y3RGaW5kZXIgOiBUSW50ZXJtUmVidWlsZAoreworICAgIE5hbWVUb1N0cnVjdCBuYW1lVG9T
dHJ1Y3Q7CisKKyAgICBTdHJ1Y3RGaW5kZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBEZWNsYXJhdGlvbiBkZWNsICAgICA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYg
KHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgICAgIGNv
bnN0IE5hbWUgbmFtZSgqcyk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlIComeiA9IG5h
bWVUb1N0cnVjdFtuYW1lXTsKKyAgICAgICAgICAgIEFTU0VSVCgheik7CisgICAgICAgICAgICB6
ID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFBy
ZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJp
dHM6Ok5laXRoZXJ9OworICAgIH0KKworICBwdWJsaWM6CisgICAgc3RhdGljIE5hbWVUb1N0cnVj
dCBGaW5kU3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisg
ICAgeworICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKyAgICAgICAgaWYg
KCFmaW5kZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShmaW5kZXIubmFt
ZVRvU3RydWN0KTsKKyAgICB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUZW1w
bGF0ZUFyZzo6VGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSkgOiBtS2luZChLaW5kOjpCb29sKSwgbVZh
bHVlKHZhbHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVBcmcoaW50IHZhbHVlKSA6IG1L
aW5kKEtpbmQ6OkludCksIG1WYWx1ZSh2YWx1ZSkge30KKworVGVtcGxhdGVBcmc6OlRlbXBsYXRl
QXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisKK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhjb25zdCBUVHlwZSAmdmFsdWUpIDogbUtpbmQo
S2luZDo6VHlwZSksIG1WYWx1ZSh2YWx1ZSkge30KKworYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0
b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1LaW5kICE9
IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtpbmQ6OkJvb2w6CisgICAgICAg
ICAgICByZXR1cm4gbVZhbHVlLmIgPT0gb3RoZXIubVZhbHVlLmI7CisgICAgICAgIGNhc2UgS2lu
ZDo6SW50OgorICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5pID09IG90aGVyLm1WYWx1ZS5pOwor
ICAgICAgICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0g
b3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToKKyAgICAgICAgICAgIHJl
dHVybiAqbVZhbHVlLnQgPT0gKm90aGVyLm1WYWx1ZS50OworICAgIH0KK30KKworYm9vbCBUZW1w
bGF0ZUFyZzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobUtpbmQgPCBvdGhlci5tS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChtS2luZCA+IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBj
YXNlIEtpbmQ6OkJvb2w6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFs
dWUuYjsKKyAgICAgICAgY2FzZSBLaW5kOjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVl
LmkgPCBvdGhlci5tVmFsdWUuaTsKKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorICAgICAgICAg
ICAgcmV0dXJuIG1WYWx1ZS51IDwgb3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6
VHlwZToKKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7Cisg
ICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFN5bWJvbEVudjo6VGVt
cGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJhc2VOYW1lID09IG90aGVyLmJhc2VOYW1lICYmIHRlbXBsYXRlQXJncyA9
PSBvdGhlci50ZW1wbGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6
Om9wZXJhdG9yPChjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChi
YXNlTmFtZSA8IG90aGVyLmJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChvdGhlci5iYXNlTmFtZSA8IGJhc2VOYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVt
cGxhdGVBcmdzOworfQorCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJhc2VOYW1lLmVtcHR5KCkgJiYgdGVtcGxhdGVBcmdzLmVtcHR5
KCk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmNsZWFyKCkKK3sKKyAgICBi
YXNlTmFtZSA9IE5hbWUoKTsKKyAgICB0ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKK30KKworTmFtZSBT
eW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUoc3RkOjpzdHJpbmcgJmJ1ZmZlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQoYnVmZmVyLmVtcHR5KCkpOworCisgICAgaWYgKHRlbXBsYXRlQXJn
cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VOYW1lOworICAgIH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG4gPSBzdGQ6Om1heCh7CisgICAgICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisgICAgICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6ZGlnaXRzMTAsICAgICAgIC8vCisgICAgICAgIDUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heF9sZW5ndGgoInRydWUiLCAiZmFsc2Ui
KQorICAgIH0pOworCisgICAgYnVmZmVyLnJlc2VydmUoYmFzZU5hbWUucmF3TmFtZSgpLmxlbmd0
aCgpICsgKG4gKyAyKSAqIHRlbXBsYXRlQXJncy5zaXplKCkgKyAxKTsKKyAgICBidWZmZXIgKz0g
YmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKworICAgIGlmICghdGVtcGxhdGVBcmdzLmVtcHR5
KCkpCisgICAgeworICAgICAgICBidWZmZXIgKz0gIjwiOworCisgICAgICAgIGJvb2wgZmlyc3Qg
PSB0cnVlOworICAgICAgICBjaGFyIGFyZ0J1ZmZlcltuICsgMV07CisgICAgICAgIGZvciAoY29u
c3QgVGVtcGxhdGVBcmcgJmFyZyA6IHRlbXBsYXRlQXJncykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYnVmZmVyICs9ICIsICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnOjpWYWx1ZSB2YWx1ZSA9IGFyZy52YWx1ZSgpOworICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmc6OktpbmQga2luZCAgID0gYXJnLmtpbmQoKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRl
bXBsYXRlQXJnOjpLaW5kOjpCb29sOgorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9
ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciAr
PSAiZmFsc2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6SW50OgorICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdmFsdWUuaSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoK
KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIldSIsIHZhbHVlLnUpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OlR5
cGU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICp2YWx1ZS50OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBzLT5uYW1lKCkuZGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlw
ZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7ICAvLyBUT0RPCisgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJn
QnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBl
LmdldENvbHMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1
ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gIngiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldFJv
d3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJ1ZmZlciArPSAiPiI7CisgICAgfQorCisgICAgY29uc3QgSW1tdXRh
YmxlU3RyaW5nIG5hbWUoYnVmZmVyKTsKKyAgICBidWZmZXIuY2xlYXIoKTsKKworICAgIHJldHVy
biBOYW1lKG5hbWUsIGJhc2VOYW1lLnN5bWJvbFR5cGUoKSk7Cit9CisKK3ZvaWQgU3ltYm9sRW52
OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbihjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYXJnQ291bnQs
IGNvbnN0IFRlbXBsYXRlQXJnICphcmdzKQoreworICAgIGJhc2VOYW1lID0gbmFtZTsKKyAgICB0
ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisgICAgeworICAgICAgICB0ZW1wbGF0ZUFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOwor
ICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU3ltYm9sRW52OjpTeW1ib2xF
bnYoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorICAgIDogbVN5bWJv
bFRhYmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbU5hbWVUb1N0cnVjdChT
dHJ1Y3RGaW5kZXI6OkZpbmRTdHJ1Y3RzKGNvbXBpbGVyLCByb290KSkKK3t9CisKK2NvbnN0IFRT
dHJ1Y3R1cmUgJlN5bWJvbEVudjo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sK
KyAgICBjb25zdCBOYW1lIG5hbWUocyk7CisgICAgYXV0byBpdGVyID0gbU5hbWVUb1N0cnVjdC5m
aW5kKG5hbWUpOworICAgIGlmIChpdGVyID09IG1OYW1lVG9TdHJ1Y3QuZW5kKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gczsKKyAgICB9CisgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVy
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHo7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgKlN5bWJvbEVu
djo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3QKK3sKKyAgICBpZiAocykKKyAgICB7
CisgICAgICAgIHJldHVybiAmcmVtYXAoKnMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KCkKK3sKKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKworICAgIFNp
Z1RvRnVuYyAmc2lnVG9GdW5jID0gbU92ZXJsb2Fkc1ttUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZm
ZXJdOworICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJsZVNpZ0J1
ZmZlcl07CisKKyAgICBpZiAoIWZ1bmMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmcmV0
dXJuVHlwZSA9IG1SZXVzYWJsZVNpZ0J1ZmZlci5iYWNrKCk7CisgICAgICAgIG1SZXVzYWJsZVNp
Z0J1ZmZlci5wb3BfYmFjaygpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1SZXVzYWJs
ZVRlbXBsYXRlTmFtZUJ1ZmZlci5mdWxsTmFtZShtUmV1c2FibGVTdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsKKyAgICAgICAgZm9yIChj
b25zdCBUVHlwZSAmcGFyYW1UeXBlIDogbVJldXNhYmxlU2lnQnVmZmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgbmV3IFRWYXJp
YWJsZSgmbVN5bWJvbFRhYmxlLCBrRW1wdHlJbW11dGFibGVTdHJpbmcsICZwYXJhbVR5cGUsIFN5
bWJvbFR5cGU6OkVtcHR5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUmV1c2FibGVTaWdC
dWZmZXIuY2xlYXIoKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsK
KworICAgIHJldHVybiAqZnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6Omdl
dEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFt
Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKyAg
ICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBtUmV1
c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKCpwYXJhbVR5cGVzW2ldKTsKKyAgICB9CisgICAgbVJl
dXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKyAgICBtUmV1c2FibGVUZW1w
bGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJnQ291bnQsIHRlbXBsYXRlQXJn
cyk7CisgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7Cit9CisKK1RJbnRlcm1B
Z2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1
ZmZlci5lbXB0eSgpKTsKKyAgICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVt
cHR5KCkpOworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKyAgICB7CisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NF
UlQodGFyZyk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2sodGFyZy0+Z2V0
VHlwZSgpKTsKKyAgICB9CisgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5U
eXBlKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBs
YXRlQXJnQ291bnQsIHRlbXBsYXRlQXJncyk7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKyAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6
OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1
cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcykKK3sKKyAgICBBU1NFUlQobmFtZS5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBUU3RydWN0dXJlIComcyA9IG1BbmdsZVN0cnVjdHNbbmFt
ZS5yYXdOYW1lKCldOworICAgIEFTU0VSVCghcyk7CisgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7
CisgICAgcmV0dXJuICpzOworfQorCitjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFRl
eHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVy
KHNhbXBsZXJUeXBlKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqJmVudiA9IG1UZXh0dXJlRW52
c1tzYW1wbGVyVHlwZV07CisgICAgaWYgKGVudiA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAg
YXV0byAqdGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOworICAgICAgICBhdXRv
ICp0ZXh0dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygi
dGV4dHVyZSIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4
dHVyZSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIGF1dG8gKnNhbXBsZXIgPQor
ICAgICAgICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFs
c2UpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIG1hcmtBc1Bv
aW50ZXIoKnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKworICAgICAgICBzdGQ6OnN0
cmluZyBlbnZOYW1lOworICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisgICAgICAg
IGVudk5hbWUgKz0gR2V0VGV4dHVyZVR5cGVOYW1lKHNhbXBsZXJUeXBlKS5yYXdOYW1lKCkuZGF0
YSgpOworICAgICAgICBlbnZOYW1lICs9ICI+IjsKKworICAgICAgICBlbnYgPSAmbmV3U3RydWN0
dXJlKE5hbWUoZW52TmFtZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKm5ldyBURmllbGRMaXN0e3RleHR1cmUsIHNhbXBsZXJ9KTsKKyAg
ICB9CisgICAgcmV0dXJuICplbnY7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6
Z2V0U2FtcGxlclN0cnVjdCgpCit7CisgICAgaWYgKCFtU2FtcGxlcikKKyAgICB7CisgICAgICAg
IG1TYW1wbGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5n
KCJtZXRhbDo6c2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICB9CisgICAgcmV0
dXJuICptU2FtcGxlcjsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtTcGFjZShWYXJGaWVsZCB4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1Nw
YWNlPiAmbWFwKQoreworICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJsZSB0byBo
YXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1dCB0aGlz
CisgICAgLy8gaXMgbm90IHJlcXVpcmVkIGZvciBub3cgYW5kIHdvdWxkIHJlcXVpcmUgY29kZSBj
aGFuZ2VzIHRvIGdldCByaWdodC4KKyAgICBBU1NFUlQoIWlzUG9pbnRlcih4KSk7CisgICAgQVNT
RVJUKCFpc1JlZmVyZW5jZSh4KSk7CisKKyAgICBtYXBbeF0gPSBzcGFjZTsKK30KKworY29uc3Qg
QWRkcmVzc1NwYWNlICpTeW1ib2xFbnY6OmlzU3BhY2UoVmFyRmllbGQgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJG
aWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gaXRlciA9
IG1hcC5maW5kKHgpOworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ugc3BhY2UgPSBp
dGVyLT5zZWNvbmQ7CisgICAgY29uc3QgYXV0byBpbmRleCAgICAgICAgID0gc3RhdGljX2Nhc3Q8
c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxBZGRyZXNzU3BhY2U+PihzcGFjZSk7CisgICAgcmV0dXJu
ICZrQWRkcmVzc1NwYWNlc1tpbmRleF07Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2lu
dGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1Nw
YWNlKHgsIHNwYWNlLCBtUG9pbnRlcnMpOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya0FzUmVm
ZXJlbmNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFy
a1NwYWNlKHgsIHNwYWNlLCBtUmVmZXJlbmNlcyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAq
U3ltYm9sRW52Ojppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNT
cGFjZSh4LCBtUG9pbnRlcnMpOworfQorCitjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4LCBt
UmVmZXJlbmNlcyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQYWNrZWQoY29uc3QgVEZp
ZWxkICZmaWVsZCkKK3sKKyAgICBtUGFja2VkRmllbGRzLmluc2VydCgmZmllbGQpOworfQorCiti
b29sIFN5bWJvbEVudjo6aXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQo
KTsKK30KKworc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBl
IGJhc2ljVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKGJhc2ljVHlwZSkpOworCisgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4
dGVybmFsT0VTOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyVmlkZW9XRUJHTDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJy
YXlTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFNh
bXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVB
cnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0U2hh
ZG93OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworCisgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6
CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkRNU0FycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEludDsKKworICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5Ogor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
TVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEUmVjdDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmVBcnJh
eToKKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRVSW50OworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIFRC
YXNpY1R5cGU6OkVidFZvaWQ7CisgICAgfQorfQorCitOYW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5h
bWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBs
ZXJUeXBlKSk7CisKKyAgICBjb25zdCBUQmFzaWNUeXBlIHRleHR1cmVUeXBlID0gR2V0VGV4dHVy
ZUJhc2ljVHlwZShzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmlu
ZSBIQU5ETEVfVEVYVFVSRV9OQU1FKGJhc2VOYW1lKSAgICAgICAgICAgICAgICBcCisgICAgZG8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBz
d2l0Y2ggKHRleHR1cmVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgIG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxmbG9hdD4iOyBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNh
c2UgVEJhc2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxpbnQ+IjsgICBcCisgICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5h
bWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjx1aW50PiI7ICBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSA9
IG51bGxwdHI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAg
ICBzd2l0Y2ggKHNhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgLy8gMWQKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMUQ6ICAvLyBEZXNrdG9wIEdMU0wgc2FtcGxlciB0eXBlOgorICAgICAgICBj
YXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxRDoKKyAgICAgICAg
ICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUxZCIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gMWQgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIxREFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2Fy
cmF5Iik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
QnVmZmVyOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICAgICAgSEFO
RExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZV9idWZmZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIDJkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRS
ZWN0OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgidGV4dHVyZTJkIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyAzZCB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAg
ICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIDJkIGFycmF5IHRleHR1cmVzCisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgSEFORExFX1RFWFRV
UkVfTkFNRSgidGV4dHVyZTJkX21zIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJy
YXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXNfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIGN1YmUgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZWN1YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNoYWRv
dworICAgICAgICBjYXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMURBcnJheVNoYWRvdzoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEUmVjdFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAg
ICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlIik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGgyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAvLyBFeHRlbnRpb25zCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOiAgICAgICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhp
c3RzOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOiAgLy8gT25seSB2
YWxpZCBpZiBHTF9FWFRfWVVWX3RhcmdldCBleGlzdHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxl
clZpZGVvV0VCR0w6CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJUT0RPIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRy
OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFN
RQorCisgICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRjOTY0NWUwNTE5ODg2N2YyNWRjMDMwYzAyZWVjMDc1NjVmYmQy
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgKQEAgLTAsMCAr
MSwyMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3Bh
Y2Ugc2gKK3sKKworZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UKK3sKKyAgICBDb25zdGFudCwKKyAg
ICBEZXZpY2UsCisgICAgVGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqdG9TdHJpbmcoQWRkcmVz
c1NwYWNlIHNwYWNlKTsKKworY2xhc3MgVmFyRmllbGQKK3sKKyAgcHVibGljOgorICAgIFZhckZp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSA6IG1WYXJpYWJsZSgmdmFyKSB7fQorICAgIFZhckZp
ZWxkKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCkge30KKworICAgIEFOR0xF
X0lOTElORSBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbVZhcmlh
YmxlOyB9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIG1GaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWYXJGaWVsZCAmb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVZhcmlhYmxl
ID09IG90aGVyLm1WYXJpYWJsZSAmJiBtRmllbGQgPT0gb3RoZXIubUZpZWxkOworICAgIH0KKwor
ICBwcml2YXRlOgorICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7Cit9OworCit9ICAvLyBuYW1l
c3BhY2Ugc2gKKworbmFtZXNwYWNlIHN0ZAoreworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IGhhc2g8
c2g6OlZhckZpZWxkPgoreworICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHNoOjpWYXJGaWVs
ZCAmeCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IHNoOjpUVmFyaWFibGUgKnZhciA9IHgu
dmFyaWFibGUoKTsKKyAgICAgICAgaWYgKHZhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VFZhcmlhYmxlICo+KCkodmFyKTsKKyAgICAgICAgfQor
ICAgICAgICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VEZpZWxkICo+KCkoZmllbGQpOworICAgIH0KK307CisK
K30gIC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIHNoCit7CisKK2NsYXNzIFRlbXBsYXRl
QXJnCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQKKyAgICB7CisgICAgICAgIEJv
b2wsCisgICAgICAgIEludCwKKyAgICAgICAgVUludCwKKyAgICAgICAgVHlwZSwKKyAgICB9Owor
CisgICAgdW5pb24gVmFsdWUKKyAgICB7CisgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDogYih2
YWx1ZSkge30KKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisgICAgICAg
IFZhbHVlKHVuc2lnbmVkIHZhbHVlKSA6IHUodmFsdWUpIHt9CisgICAgICAgIFZhbHVlKGNvbnN0
IFRUeXBlICZ2YWx1ZSkgOiB0KCZ2YWx1ZSkge30KKworICAgICAgICBib29sIGI7CisgICAgICAg
IGludCBpOworICAgICAgICB1bnNpZ25lZCB1OworICAgICAgICBjb25zdCBUVHlwZSAqdDsKKyAg
ICB9OworCisgICAgVGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoaW50
IHZhbHVlKTsKKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisgICAgVGVtcGxhdGVB
cmcoY29uc3QgVFR5cGUgJnZhbHVlKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1w
bGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRl
QXJnICZvdGhlcikgY29uc3Q7CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtS2lu
ZDsgfQorICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisKKyAgcHVi
bGljOgorICAgIEtpbmQgbUtpbmQ7CisgICAgVmFsdWUgbVZhbHVlOworfTsKKworLy8gQW4gZW52
aXJvbm1lbnQgZm9yIGNyZWF0aW5nIGFuZCB1bmlxdWVseSBzaGFyaW5nIFRTeW1ib2wgb2JqZWN0
cy4KK2NsYXNzIFN5bWJvbEVudgoreworICAgIGNsYXNzIFRlbXBsYXRlTmFtZQorICAgIHsKKyAg
ICAgICAgTmFtZSBiYXNlTmFtZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VGVtcGxhdGVBcmc+IHRl
bXBsYXRlQXJnczsKKworICAgICAgcHVibGljOgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGVtcGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgICAgIGJvb2wgZW1wdHkoKSBj
b25zdDsKKyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgICAgIE5hbWUgZnVsbE5hbWUoc3Rk
OjpzdHJpbmcgJmJ1ZmZlcikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgTmFt
ZSAmbmFtZSwgc2l6ZV90IGFyZ0NvdW50LCBjb25zdCBUZW1wbGF0ZUFyZyAqYXJncyk7CisgICAg
fTsKKworICAgIHVzaW5nIFR5cGVSZWYgICAgICAgID0gQ1JlZjxUVHlwZT47CisgICAgdXNpbmcg
U2lnICAgICAgICAgICAgPSBzdGQ6OnZlY3RvcjxUeXBlUmVmPjsgIC8vIFBhcmFtMCwgUGFyYW0x
LCAuLi4gUGFyYW1OLCBSZXR1cm4KKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFw
PFNpZywgVEZ1bmN0aW9uICo+OworICAgIHVzaW5nIE92ZXJsb2FkcyAgICAgID0gc3RkOjptYXA8
VGVtcGxhdGVOYW1lLCBTaWdUb0Z1bmM+OworICAgIHVzaW5nIEFuZ2xlU3RydWN0cyAgID0gc3Rk
OjptYXA8SW1tdXRhYmxlU3RyaW5nLCBUU3RydWN0dXJlICo+OworICAgIHVzaW5nIFRleHR1cmVT
dHJ1Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKworICBwdWJsaWM6
CisgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbVN5bWJvbFRhYmxl
OyB9CisKKyAgICAvLyBUaGVyZSBleGlzdCBBbmdsZSByZXdyaXRlcyB0aGF0IGNhbiBsZWFkIHRv
IGluY29oZXJlbnQgc3RydWN0cworICAgIC8vCisgICAgLy8gRXhhbXBsZQorICAgIC8vICAgIHN0
cnVjdCBBIHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEnIGE7IH0gLy8gQScgaGFzIHNh
bWUgbmFtZSBhcyBBIGJ1dCBpcyBub3QgaWRlbnRpY2FsLgorICAgIC8vIGJlY29tZXMKKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisgICAgLy8gICAgc3RydWN0IEIgeyBBIGE7IH0KKyAgICAv
LworICAgIC8vIFRoaXMgbm90YWJseSBoYXBwZW5zIHdoZW4gQSBjb250YWlucyBhIHNhbXBsZXIg
aW4gdGhlIG9yaWdpbmFsIEdMU0wgY29kZSBidXQgaXMgcmV3cml0dGVuIHRvCisgICAgLy8gbm90
IGhhdmUgYSBzYW1wbGVyLCB5ZXQgdGhlIEEnIHN0cnVjdCBmaWVsZCBzdGlsbCBjb250YWlucyB0
aGUgc2FtcGxlciBmaWVsZC4KKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3Ry
dWN0dXJlICZzKSBjb25zdDsKKworICAgIC8vIExpa2UgYFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpYCBidXQgYWRkaXRpb25hbGx5IG1hcHMgbnVsbCB0byBudWxsLgorICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0OworCisg
ICAgY29uc3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkKGNvbnN0IE5hbWUgJm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZy
ZXR1cm5UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgcGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFR5cGUgKipwYXJhbVR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBs
YXRlQXJncyA9IG51bGxwdHIpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291
bnQgICAgICAgICA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncyA9IG51bGxwdHIpOworCisgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcyk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZnZXRUZXh0dXJlRW52KFRCYXNpY1R5
cGUgc2FtcGxlclR5cGUpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3Qo
KTsKKworICAgIHZvaWQgbWFya0FzUG9pbnRlcihWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3Bh
Y2UpOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0
OworCisgICAgdm9pZCBtYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNw
YWNlKTsKKyAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNv
bnN0OworCisgICAgdm9pZCBtYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAg
Ym9vbCBpc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKworICAgIHZv
aWQgbWFya1NwYWNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSwgc3RkOjp1bm9yZGVy
ZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApOworICAgIGNvbnN0IEFkZHJlc3NT
cGFjZSAqaXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKwor
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKyAg
ICBPdmVybG9hZHMgbU92ZXJsb2FkczsKKyAgICBTaWcgbVJldXNhYmxlU2lnQnVmZmVyOworICAg
IFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisgICAgc3RkOjpzdHJp
bmcgbVJldXNhYmxlU3RyaW5nQnVmZmVyOworCisgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVj
dHM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRCYXNpY1R5cGUsIGNvbnN0IFRTdHJ1Y3R1cmUg
Kj4gbVRleHR1cmVFbnZzOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKm1TYW1wbGVyID0gbnVsbHB0
cjsKKworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiBtUG9p
bnRlcnM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1S
ZWZlcmVuY2VzOworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tl
ZEZpZWxkczsKK307CisKK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxl
clR5cGUpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3Ry
dWN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg0MzMzMmRkOGRhYzI3OTJkYjJkMjYwOGI4NmVlZTEyOWI1
YzFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CkBAIC0wLDAgKzEsMzgzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVk
ZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJp
bmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFZGdlcyA9IHN0ZDo6dW5vcmRlcmVkX3Nl
dDxUPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBHcmFwaCA9IHN0ZDo6dW5vcmRl
cmVkX21hcDxULCBFZGdlczxUPj47CisKK3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZz
eW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUg
KnMpCit7CisgICAgaWYgKGcuZmluZChzKSAhPSBnLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmVzID0gZ1tzXTsK
KworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisgICAgZm9yIChjb25z
dCBURmllbGQgKmYgOiBmcykKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6
ID0gc3ltYm9sRW52LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcy5pbnNlcnQoeik7CisgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1i
b2xFbnYsIGcsIHopOworICAgICAgICAgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXog
PSBnW3pdOworICAgICAgICAgICAgZXMuaW5zZXJ0KGV6LmJlZ2luKCksIGV6LmVuZCgpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBCdWlsZEdyYXBo
KFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnN0cnVjdHMpCit7Cisg
ICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnOworICAgIGZvciAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA6IHN0cnVjdHMpCisgICAgeworICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYs
IGcsIHMpOworICAgIH0KKyAgICByZXR1cm4gZzsKK30KKworLy8gQWxnb3J0aG06IGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2Vh
cmNoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6dmVjdG9yPFQ+IFRvcG9zb3J0KGNvbnN0
IEdyYXBoPFQ+ICZnKQoreworICAgIC8vIG5vZGVzIHdpdGggdGVtcG9yYXJ5IG1hcmsKKyAgICBz
dGQ6OnVub3JkZXJlZF9zZXQ8VD4gdGVtcHM7CisKKyAgICAvLyBub2RlcyB3aXRob3V0IHBlcm1h
bmVudCBtYXJrCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PFQ+IGludlBlcm1zOworICAgIGZvciAo
Y29uc3QgYXV0byAmZW50cnkgOiBnKQorICAgIHsKKyAgICAgICAgaW52UGVybXMuaW5zZXJ0KGVu
dHJ5LmZpcnN0KTsKKyAgICB9CisKKyAgICAvLyBMIOKGkCBFbXB0eSBsaXN0IHRoYXQgd2lsbCBj
b250YWluIHRoZSBzb3J0ZWQgZWxlbWVudHMKKyAgICBzdGQ6OnZlY3RvcjxUPiBMOworCisgICAg
Ly8gZnVuY3Rpb24gdmlzaXQobm9kZSBuKQorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlz
aXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKyAgICAgICAgLy8gaWYgbiBoYXMgYSBwZXJtYW5lbnQg
bWFyayB0aGVuCisgICAgICAgIGlmIChpbnZQZXJtcy5maW5kKG4pID09IGludlBlcm1zLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyByZXR1cm4KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBpZiBuIGhhcyBhIHRlbXBvcmFyeSBtYXJrIHRoZW4KKyAg
ICAgICAgaWYgKHRlbXBzLmZpbmQobikgIT0gdGVtcHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIHN0b3AgICAobm90IGEgREFHKQorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgdGVtcG9yYXJ5IG1hcmsKKyAg
ICAgICAgdGVtcHMuaW5zZXJ0KG4pOworCisgICAgICAgIC8vIGZvciBlYWNoIG5vZGUgbSB3aXRo
IGFuIGVkZ2UgZnJvbSBuIHRvIG0gZG8KKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7
CisgICAgICAgIEFTU0VSVChlbkl0ZXIgIT0gZy5lbmQoKSk7CisgICAgICAgIGNvbnN0IEVkZ2Vz
PFQ+ICZlbiA9IGVuSXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKFQgbSA6IGVuKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyB2aXNpdChtKQorICAgICAgICAgICAgdmlzaXQobSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisgICAgICAg
IHRlbXBzLmVyYXNlKG4pOworICAgICAgICAvLyBtYXJrIG4gd2l0aCBhIHBlcm1hbmVudCBtYXJr
CisgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworICAgICAgICAvLyBhZGQgbiB0byBoZWFkIG9m
IEwKKyAgICAgICAgTC5wdXNoX2JhY2sobik7CisgICAgfTsKKworICAgIC8vIHdoaWxlIGV4aXN0
cyBub2RlcyB3aXRob3V0IGEgcGVybWFuZW50IG1hcmsgZG8KKyAgICB3aGlsZSAoIWludlBlcm1z
LmVtcHR5KCkpCisgICAgeworICAgICAgICAvLyBzZWxlY3QgYW4gdW5tYXJrZWQgbm9kZSBuCisg
ICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworICAgICAgICAvLyB2aXNpdChuKQorICAg
ICAgICB2aXNpdChuKTsKKyAgICB9CisKKyAgICByZXR1cm4gTDsKK30KKworVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAqQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKK3sKKyAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisgICAgYXV0byAmZnVuY0VxdWFsaXR5ID0KKyAgICAgICAgKm5l
dyBURnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgYXV0byAmYVN0cnVjdCA9IENyZWF0ZUlu
c3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJhIikpOworICAg
IGF1dG8gJmJTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYiIpKTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3Ry
dWN0KTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZiU3RydWN0KTsKKworICAgIGF1
dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgc3RkOjp2ZWN0b3I8
VEludGVybVR5cGVkICo+IGFuZE5vZGVzOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAg
ICBjb25zdCBURmllbGRMaXN0ICZhRmllbGRzID0gYVN0cnVjdFR5cGUuZmllbGRzKCk7CisgICAg
Y29uc3Qgc2l6ZV90IHNpemUgICAgICAgICA9IGFGaWVsZHMuc2l6ZSgpOworCisgICAgYXV0byB0
ZXN0RXF1YWxpdHkgPSBbJl0oVEludGVybVR5cGVkICZhLCBUSW50ZXJtVHlwZWQgJmIpIC0+IFRJ
bnRlcm1UeXBlZCAqIHsKKyAgICAgICAgQVNTRVJUKGEuZ2V0VHlwZSgpID09IGIuZ2V0VHlwZSgp
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKyAgICAgICAgaWYg
KHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkgfHwgdHlwZS5nZXRTdHJ1Y3QoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byAqZnVuYyA9CisgICAgICAgICAgICAgICAgbmV3
IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
VHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVl
bmNleyZhLCAmYn0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wRXF1YWwsICZhLCAm
Yik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwg
c2l6ZTsgKytpZHgpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmFGaWVsZCAgICA9ICph
RmllbGRzW2lkeF07CisgICAgICAgIGNvbnN0IFRUeXBlICZhRmllbGRUeXBlID0gKmFGaWVsZC50
eXBlKCk7CisgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KworICAgICAgICBpZiAoYUZpZWxkVHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghYUZpZWxkVHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7ICAvLyBUT0RPCisgICAg
ICAgICAgICBpbnQgZGltID0gYUZpZWxkVHlwZS5nZXRPdXRlcm1vc3RBcnJheVNpemUoKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0ZpZWxkKGFT
dHJ1Y3QsIGFGaWVsZE5hbWUpLCBkKTsKKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0g
QWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAg
ICAgICAgICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7
CisgICAgICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRv
ICZhQWNjZXNzID0gQWNjZXNzRmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAg
ICBhdXRvICZiQWNjZXNzID0gQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAg
ICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOwor
ICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBU1NFUlQoYW5kTm9kZXMuc2l6ZSgpID4gMCk7ICAvLyBFbXB0eSBzdHJ1Y3RzIGFy
ZSBub3QgYWxsb3dlZCBpbiBHTFNMCisgICAgVEludGVybVR5cGVkICpvdXROb2RlID0gYW5kTm9k
ZXMuYmFjaygpOworICAgIGFuZE5vZGVzLnBvcF9iYWNrKCk7CisgICAgZm9yIChUSW50ZXJtVHlw
ZWQgKmFuZE5vZGUgOiBhbmROb2RlcykKKyAgICB7CisgICAgICAgIG91dE5vZGUgPSBuZXcgVElu
dGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQsIGFuZE5vZGUsIG91dE5vZGUpOwor
ICAgIH0KKyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNo
KFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisgICAgYXV0byAqZnVuY1Byb3RvRXF1
YWxpdHkgPSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jRXF1YWxpdHkpOworICAg
IHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG9FcXVhbGl0eSwg
JmJvZHlFcXVhbGl0eSk7Cit9CisKK3N0cnVjdCBEZWNsYXJlZFN0cnVjdHVyZQoreworICAgIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGU7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZXF1YWxpdHlGdW5jdGlvbkRlZmluaXRpb247CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlOworfTsKKworYm9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3lt
Ym9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmVkU3RydWN0dXJlICZvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFN0
cnVjdHVyZSAqPiAmdXNlZFN0cnVjdHMpCit7CisgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAq
ZGVjbE5vZGUgPSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgeworICAgICAgICBB
U1NFUlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5v
ZGUgJm5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKworICAgICAgICBpZiAoVElu
dGVybVN5bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFi
bGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsK
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG91dC5kZWNsTm9kZSAgPSBkZWNsTm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgb3V0LnN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmVx
dWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRT
dHJ1Y3RzLmZpbmQoc3RydWN0dXJlKSA9PSB1c2VkU3RydWN0cy5lbmQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
Q3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNz
IEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbVVzZWRTdHJ1Y3RzOworCisgICAgRmluZFN0cnVjdEVxdWFs
aXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
ZmFsc2UsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisgICAge30KKworICAg
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICA9IGJp
bmFyeS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IGJpbmFyeS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkp
OworICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBtU3lt
Ym9sRW52LnJlbWFwKGxlZnRUeXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgdXNlU3RydWN0KGNvbnN0IFRT
dHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdWJTdHJ1Y3QgPSBtU3ltYm9sRW52
LnJlbWFwKGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlRvcG9z
b3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZp
ZyAmcHBjKQoreworICAgIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSBmaW5kZXIoc3ltYm9sRW52KTsK
KyAgICByb290LnRyYXZlcnNlKCZmaW5kZXIpOworICAgIHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5k
ZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisKKyAgICBEZWNsYXJlZFN0cnVjdHVyZSBkZWNsYXJl
ZFN0cnVjdDsKKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1
Y3RzOworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vblN0cnVjdFN0bXROb2RlczsK
KworICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN0bXRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRD
b3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAmc3RtdE5vZGUgPSAqcm9vdC5nZXRD
aGlsZE5vZGUoaSk7CisgICAgICAgICAgICBpZiAoR2V0QXNEZWNsYXJlZFN0cnVjdHVyZShzeW1i
b2xFbnYsIHN0bXROb2RlLCBkZWNsYXJlZFN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0
cnVjdHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5w
dXNoX2JhY2soZGVjbGFyZWRTdHJ1Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNo
X2JhY2soJnN0bXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworICAg
ICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBEZWNsYXJlZFN0cnVj
dHVyZT4gcmF3VG9EZWNsYXJlZDsKKworICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0
dXJlICZkIDogZGVjbGFyZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Rz
LnB1c2hfYmFjayhkLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJl
ZC5maW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKyAgICAgICAgICAg
IHJhd1RvRGVjbGFyZWRbZC5zdHJ1Y3R1cmVdID0gZDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdGU6IEdyYXBoIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmx5IGV4cGxpY2l0bHkgZGVjbGFy
ZWQgc3RydWN0dXJlcy4KKyAgICAgICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnICAgICAg
ICAgICAgICAgICAgID0gQnVpbGRHcmFwaChzeW1ib2xFbnYsIHN0cnVjdHMpOworICAgICAgICBz
dGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChn
KTsKKyAgICAgICAgQVNTRVJUKGRlY2xhcmVkU3RydWN0cy5zaXplKCkgPD0gc29ydGVkU3RydWN0
cy5zaXplKCkpOworCisgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworICAgICAgICBm
b3IgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgOiBzb3J0ZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworICAgICAgICAgICAgaWYg
KGl0ICE9IHJhd1RvRGVjbGFyZWQuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGQuZGVjbE5v
ZGUpOworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2JhY2soZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1
ZW5jZSBuZXdTdG10Tm9kZXM7CisKKyAgICAgICAgZm9yIChEZWNsYXJlZFN0cnVjdHVyZSAmZGVj
bGFyZWRTdHJ1Y3QgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisgICAgICAgICAgICBuZXdTdG10Tm9kZXMu
cHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIGlmIChkZWNs
YXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmVxdWFs
aXR5RnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoVEludGVybU5vZGUgKnN0bXROb2RlIDogbm9uU3RydWN0U3RtdE5vZGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3RtdE5vZGUpOworICAgICAgICAgICAgbmV3U3Rt
dE5vZGVzLnB1c2hfYmFjayhzdG10Tm9kZSk7CisgICAgICAgIH0KKworICAgICAgICAqcm9vdC5n
ZXRTZXF1ZW5jZSgpID0gbmV3U3RtdE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBjb21waWxl
ci52YWxpZGF0ZUFTVCgmcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3Nv
cnRTdHJ1Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTM5MDhlMzRkZDRkOTZjZDA0ZDYwMjc0ZGYxODFiMGQ0ODkzM2E1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApAQCAtMCwwICsxLDI3IEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1RPUE9TT1JUU1RSVUNUU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBEb2VzIGEgdG9wb3Nv
cnQgb24gc3RydWN0cyBiYXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKy8vIFN0cnVjdCB0eXBl
IGRlY2xhcmF0aW9ucyBhcmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgcm9vdCBibG9jay4KK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBUb3Bvc29ydFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE0YmM2M2ZjYTI5OGViYTRjZmRhNDY3OTRjZTk2OGExMWZi
ZDhjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAKQEAgLTAs
MCArMSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgV3JhcHBlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHByaXZhdGU6CisgICAgSWRHZW4gJm1JZEdlbjsK
KworICBwdWJsaWM6CisgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUs
ICZzeW1ib2xUYWJsZSksIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdEJs
b2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKmJsb2NrTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpu
b2RlIDogKmJsb2NrTm9kZS0+Z2V0U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gbm9kZS0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmMuaXNNYWluKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2
b2lkIHZpc2l0TWFpbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
KmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4o
KSk7CisgICAgICAgIEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3Vu
dCgpID09IDApOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZXh0ZXJuYWxNYWluRnVuYyA9
ICpmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZp
bnRlcm5hbE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4
dGVybmFsTWFpbkZ1bmMpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqZXh0
ZXJuYWxNYWluUHJvdG8gPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAg
ICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisgICAg
ICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZpbnRlcm5hbE1haW5GdW5jKTsK
KworICAgICAgICBUSW50ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisgICAgICAgIGV4dGVybmFsTWFpbkJvZHktPmFwcGVuZFN0YXRlbWVudCgKKyAgICAg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm5hbE1haW5G
dW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmlu
dGVybmFsTWFpbkJvZHkgPSBmdW5jRGVmTm9kZS0+Z2V0Qm9keSgpOworCisgICAgICAgIFRJbnRl
cm1GdW5jdGlvbkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisgICAgICAgICAgICBuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihleHRlcm5hbE1haW5Qcm90bywgZXh0ZXJuYWxNYWlu
Qm9keSk7CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmludGVybmFsTWFpbkRl
ZiA9CisgICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1h
aW5Qcm90bywgaW50ZXJuYWxNYWluQm9keSk7CisKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjayhOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVudHJ5KAorICAgICAgICAgICAgJnJv
b3QsIGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5h
bE1haW5EZWZ9KSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6Oldy
YXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZy
b290KQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworICAg
IHJvb3QudHJhdmVyc2UoJndyYXBwZXIpOworICAgIGlmICghd3JhcHBlci51cGRhdGVUcmVlKCZj
b21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIwZWRmZjQyYjhlMzRkZDFhODBh
Mjc1NTIyZGYzYjdkNDZhNDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIK
KworbmFtZXNwYWNlIHNoCit7CisKKy8vIENoYW5nZXMKKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7
IG1haW4tYm9keSB9CisvLyBUbworLy8gICAgdm9pZCBGUkVTSF9OQU1FKGFyZ3MpIHsgbWFpbi1i
b2R5IH0KKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKy8vCisv
LyBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWZ1bCBpZiB0aGUgb3JpZ2luYWwgYG1haW5gIGhh
cyBtdWx0aXBsZSByZXR1cm4gcGF0aHMgYmVjYXVzZSB0aGlzCisvLyByZWR1Y2VzIGRvd24gdG8g
YSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNsZWFu
dXAgY29kZSBpbiBgbWFpbmAuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgV3JhcE1haW4oVENvbXBp
bGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYThiZjNhZmQxMjMwZTY1ZmRkY2NlOTgxOGFh
N2NjMmNiOThkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAKQEAgLTAsMCAr
MSwzMDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDcxOCkKKyNlbmRpZgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y2xpbWl0cz4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisK
K25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01ldGFsU3RyaW5nKGNvbnN0
IFRUeXBlICp0KQoreworICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgeworICAg
ICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAg
ICAgICAgICByZXR1cm4gImJvb2wiOworICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhU
OgorICAgICAgICAgICAgcmV0dXJuICJ5dXZDc2NTdGFuZGFyZEVYVCI7CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICBj
YXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsKKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckN1YmUi
OworICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJldHVy
biAic2FtcGxlckV4dGVybmFsT0VTIjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWwy
RFkyWUVYVDoKKyAgICAgICAgICAgIHJldHVybiAiX19zYW1wbGVyRXh0ZXJuYWwyRFkyWUVYVCI7
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlcjJEUmVjdCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyRE1TQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRE1TQXJyYXkiOworICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXJDdWJlQXJyYXkiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICBy
ZXR1cm4gImlzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAg
ICAgICByZXR1cm4gImlzYW1wbGVyM0QiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJE
TVMiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0
dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJy
YXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsKKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsK
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInVzYW1w
bGVyQ3ViZSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAg
cmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJETVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TQXJyYXkiOwor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1
c2FtcGxlckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAg
ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyREFycmF5U2hhZG93IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKyAg
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7Cisg
ICAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICByZXR1cm4gImludGVy
ZmFjZSBibG9jayI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVy
biAidGV4dHVyZTJkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyRDoKKyAgICAgICAgICAgIHJl
dHVybiAidGV4dHVyZTJkPGludD4iOworICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorICAgICAg
ICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQ8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlM0Q6
CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisgICAgICAgIGNhc2UgRWJ0SUltYWdl
M0Q6CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDxpbnQ+IjsKKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPHVpbnQ+IjsKKyAgICAg
ICAgY2FzZSBFYnRJbWFnZTJEQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJy
YXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlMmQ+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5p
c1Vuc2l6ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAi
YXJyYXlfcmVmPHRleHR1cmUyZDxpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5U
RUQiOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEVidFVJbWFnZTJEQXJyYXk6CisgICAg
ICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlMmQ8dWludD4+IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SW1h
Z2VDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7CisgICAgICAgIGNhc2Ug
RWJ0SUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8aW50PiI7Cisg
ICAgICAgIGNhc2UgRWJ0VUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1
YmU8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlQ3ViZUFycmF5OgorICAgICAgICAgICAg
aWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBM
RU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlQ3ViZUFycmF5
OgorICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU8aW50Pj4iOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBFYnRVSW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXko
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0
dXJlY3ViZTx1aW50Pj4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRBdG9taWNDb3VudGVyOgorICAgICAgICAgICAgcmV0
dXJuICJhdG9taWNfdWludCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6Cisg
ICAgICAgICAgICByZXR1cm4gIiRzYW1wbGVyVmlkZW9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IHR5cGUiOworICAgIH0KK30KKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVT
dHJpbmcoY29uc3QgVFR5cGUgKnQpCit7CisgICAgaWYgKHQtPmlzTWF0cml4KCkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHQtPmdldENvbHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDJ4NCI7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxv
YXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDN4NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJmbG9hdDR4MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh0LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0LT5nZXRCYXNp
Y1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MiI7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MyI7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiaW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFYnRCb29sOgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sNCI7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidWludDIiOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJ1aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnRl
cmZhY2VCbG9jayk7CisgICAgcmV0dXJuIGdldEJhc2ljTWV0YWxTdHJpbmcodCk7Cit9CisKK0lt
bXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBTaEhhc2hG
dW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwgTmFtZU1hcCAqbmFtZU1hcCkKK3sKKyAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHJldHVybiBIYXNoTmFtZSh0
eXBlLmdldFN0cnVjdCgpLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXApOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIEltbXV0YWJsZVN0cmluZyhnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0cmluZygm
dHlwZSkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlM2NlM2NlZmQ3MzY5MTU4M2FhMzJmODgx
ODYyZjc3ZDc2NDNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCkBAIC0wLDAg
KzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXwor
I2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKK25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRC
YXNpY01ldGFsU3RyaW5nKGNvbnN0IFRUeXBlICp0KTsKKworY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitJbW11dGFibGVTdHJpbmcg
R2V0TWV0YWxUeXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JWdWxrYW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKaW5kZXggMjAxY2JjOTFmNmUzYzIxZGQxOTI1NDVk
NmM1ZDUwZjkzODc0YmY3MS4uYzVlYzY3ZGVlNjI1OTBmY2I4MTJkOGRiZTMyYjVjNWRkYTQ4NzVi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKQEAgLTE2Myw2ICsx
NjMsOCBAQCBjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRQb2ludENv
b3JkTmFtZSAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZFBvaW50Q29vcmQiKTsKIGNvbnN0
ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJs
ZVN0cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
RW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRURlcHRoUmFu
Z2VQYXJhbXMiKTsKK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zQmxvY2tOYW1l
ICAgICAgICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlmb3JtQmxvY2siKTsKK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOwogCiBjb25zdGV4cHIgZ2w6OlNoYWRlck1hcDxjb25zdCBj
aGFyICo+IGtEZWZhdWx0VW5pZm9ybU5hbWVzID0gewogICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCkBAIC00NTAsOSArNDUyLDkgQEAgY29u
c3QgVFZhcmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOwogCiAgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgotICAgIHJldHVy
biBEZWNsYXJlSW50ZXJmYWNlQmxvY2soCi0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2
ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAot
ICAgICAgICBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc0Jsb2NrTmFtZSksIElt
bXV0YWJsZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zVmFyTmFtZSkpOworICAgIHJldHVybiBE
ZWNsYXJlSW50ZXJmYWNlQmxvY2socm9vdCwgc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFs
aWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrVW5pZm9ybXNWYXJOYW1lKTsKIH0KIAogY29uc3QgVFZhcmlhYmxl
ICpBZGRDb21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxvY2sgKnJvb3QsIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAppbmRleCBhM2UwMzk5ZTNlODA3
MmFiNjk3M2Q3YmFlZmYxNjM5MGQwMmYyYzc0Li44ZjZmYzQ2NWZhZTk4ZjdmYzEzOTEyNmRmNmQ0
NGMzMDJiYTM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgKQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBU
VHlwZQogCiAgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID4g
MSAmJiBzZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25z
dCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJy
YXkoKTsgfQorICAgIGJvb2wgaXNSYW5rMCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPT0gMSAmJiBzZWNvbmRhcnlTaXplID09
IDEgJiYgIW1TdHJ1Y3R1cmUgJiYgIWlzQXJyYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNU
LmNwcAppbmRleCA3NmE4YmMyZjVlNGE4MzAxYzFlMWU5ZmExNmZmYzZkMTE2NTI2ZWUxLi5iYTRk
NmYzZTVmNWJjYTUwNzE5NTU3N2VkZDUyMDY3MDQwZDc2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFs
aWRhdGVBU1QuY3BwCkBAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1Qo
VEludGVybU5vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNz
ICpkaWFnbm9zdGljcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWxpZGF0ZUFT
VE9wdGlvbnMgJm9wdGlvbnMpCiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0
cnVlLCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cykKLXsKLSAgICBpZiAobU9wdGlvbnMudmFsaWRhdGVTaW5nbGVQYXJlbnQpCi0gICAgewotICAg
ICAgICBtUGFyZW50W3Jvb3RdID0gbnVsbHB0cjsKLSAgICB9Ci19Cit7fQogCiB2b2lkIFZhbGlk
YXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQogewpAQCAt
OTAsMTIgKzg1LDEzIEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwg
VEludGVybU5vZGUgKm5vZGUpCiAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0
Q2hpbGRDb3VudCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7
ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnQuZmluZChjaGlsZCkgIT0g
bVBhcmVudC5lbmQoKSkKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOworICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBtUGFy
ZW50W2NoaWxkXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3VnaCB0aGUg
c2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgogICAgICAgICAgICAgICAgIC8v
IHRoZSBhbmNlc3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKG1QYXJlbnRbY2hpbGRdICE9IG5v
ZGUpCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5l
KCksICJGb3VuZCBjaGlsZCB3aXRoIHR3byBwYXJlbnRzIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIpOwpAQCAtMTAzLDE3
ICs5OSwxNyBAQCB2b2lkIFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Ob2RlICpub2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgbVBhcmVudFtjaGlsZF0gPSBub2RlOworICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENo
aWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0X2NvdW50
KQordm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291bnQpCiB7CiAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0ICYmIG1PcHRpb25zLnZhbGlkYXRlTnVsbE5vZGVzKQogICAgIHsKICAgICAgICAg
c2l6ZV90IGNoaWxkQ291bnQgPSBub2RlLT5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGlmIChj
aGlsZENvdW50IDwgbGVhc3RfY291bnQpCisgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RD
b3VudCkKICAgICAgICAgewogICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5n
ZXRMaW5lKCksICJUb28gZmV3IGNoaWxkcmVuIiwgIjx2YWxpZGF0ZU51bGxOb2Rlcz4iKTsKICAg
ICAgICAgICAgIG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9i
YWxJbml0aWFsaXplcnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwCmluZGV4IGRm
YTIzYWFmMTliZTQ4OTk1Y2MwNjM2OGI1MWQwMWIwYTEyOWZkOWIuLmJiYzhkY2Q0ZThhODJlNDcy
MGE3N2QwODFiMzdjOWY2ZDdkMGY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKQEAgLTUzLDcgKzUzLDgg
QEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xh
cmF0aW9uLAogICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CiAgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZXhwcmVzc2lvbiA9IGluaXQtPmdldFJpZ2h0KCk7CiAKLSAgICAgICAgaWYgKGV4cHJlc3Np
b24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFu
dFZhbHVlKCkpCisgICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFD
b25zdCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpIHx8CisgICAgICAgICAgICBz
eW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIEZvciB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBjb25zdGFudCwgZGVmZXIgdGhl
aXIgcmVhbCBpbml0aWFsaXphdGlvbiB1bnRpbAogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5p
dGlhbGl6ZSB1bmlmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVu
ZUVtcHR5Q2FzZXMuY3BwCmluZGV4IDI4OWRlMjE1MmU5YzUxNDU5NGY2MjMxZDRkZjkyZDY2YjE3
OWEyYjcuLjJlZTgyMzkzZmNlNTExYTBkYTc3OTRkYjlhNjMxNzEwZGM4Nzc1NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcApAQCAtMTcs
NyArMTcsNyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1ib29sIEFyZUVtcHR5Qmxv
Y2tzKFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7Citib29sIEFyZUVtcHR5QmxvY2tzKGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CiAKIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQogewpAQCAtMzcsNyArMzcsNyBAQCBib29sIElzRW1wdHlCbG9jayhU
SW50ZXJtTm9kZSAqbm9kZSkKIAogLy8gUmV0dXJuIHRydWUgaWYgYWxsIHN0YXRlbWVudHMgaW4g
InN0YXRlbWVudHMiIGNvbnNpc3Qgb25seSBvZiBlbXB0eSBibG9ja3MgYW5kIG5vLW9wIHN0YXRl
bWVudHMuCiAvLyBSZXR1cm5zIHRydWUgYWxzbyBpZiB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cy4K
LWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorYm9vbCBB
cmVFbXB0eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFs
bFRocm91Z2guY3BwCmluZGV4IDQ1MDBhZWE0ZTQ4MmMwMjMwOTBjYzdiZDhlNjhlZGFjNTE0YTQ5
MjAuLmRkOGRkNTQzZjZlMWEyMjUxMzM3ZWQ0ZGIwN2ZmYmRmNzcwMWEwMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1JlbW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3Vn
aC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2
ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCwgVEludGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG91dHB1dFNlcXVl
bmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KTsKKyAgICB2
b2lkIG91dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVf
dCBzdGFydEluZGV4KTsKICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgpOwogCiAgICAgVElu
dGVybUJsb2NrICptU3RhdGVtZW50TGlzdDsKQEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVt
b3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJt
U3dpdGNoICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaFRyYXZlcnNlcjo6b3V0cHV0U2VxdWVuY2UoVEludGVybVNlcXVlbmNlICpzZXF1
ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit2b2lkIFJlbW92ZVN3aXRjaEZhbGxUaHJvdWdoVHJh
dmVyc2VyOjpvdXRwdXRTZXF1ZW5jZShjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHN0YXJ0SW5kZXgpCiB7CisgICAgYXV0byAmb3V0U2VxID0gKm1TdGF0ZW1lbnRMaXN0T3V0
LT5nZXRTZXF1ZW5jZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2Vx
dWVuY2UtPnNpemUoKTsgKytpKQogICAgIHsKLSAgICAgICAgbVN0YXRlbWVudExpc3RPdXQtPmdl
dFNlcXVlbmNlKCktPnB1c2hfYmFjayhzZXF1ZW5jZS0+YXQoaSkpOworICAgICAgICBvdXRTZXEu
cHVzaF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1w
bGlmeUxvb3BDb25kaXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCmluZGV4
IDc0MTQ1NDAwZWJjNjNhN2I5NGEzYzM1NzgyNGZhODlmYzJjN2YxMWUuLjBjMmFhOGZiNmNiMWNh
ZGE4ODlkMDk0ODljYTdmNTQzN2IzOGNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCkBAIC0yMSwxMCArMjEs
MTcgQEAgbmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAorc3RydWN0IExvb3BJbmZvCit7Cisg
ICAgY29uc3QgVFZhcmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IG51bGxwdHI7CisgICAgVElu
dGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisgICAgVEludGVybVR5
cGVkICpleHByZXNzaW9uICAgICAgICAgICA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBTaW1wbGlm
eUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNl
cgogewogICBwdWJsaWM6Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcih1bnNp
Z25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgIFNpbXBsaWZ5TG9vcENvbmRp
dGlvbnNUcmF2ZXJzZXIoY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25z
VG9TaW1wbGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUpOwogCiAgICAgdm9pZCB0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpIG92ZXJyaWRlOwpAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpIG92
ZXJyaWRlOwogICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFy
eSAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsg
fQogCkBAIC00MiwxNiArNTAsMTkgQEAgY2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZl
cnNlciA6IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIKICAgICAvLyBmb3VuZC4KICAg
ICBib29sIG1Gb3VuZExvb3BUb0NoYW5nZTsKICAgICBib29sIG1JbnNpZGVMb29wSW5pdENvbmRp
dGlvbk9yRXhwcmVzc2lvbjsKLSAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlv
bnNUb1NpbXBsaWZ5OworICAgIGNvbnN0IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciAqbUNvbmRp
dGlvbnNUb1NpbXBsaWZ5OworCisgIHByaXZhdGU6CisgICAgTG9vcEluZm8gbUxvb3A7CiB9Owog
CiBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjpTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyKAotICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisg
ICAgY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwK
ICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQogICAgIDogVExWYWx1ZVRyYWNraW5nVHJh
dmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgc3ltYm9sVGFibGUpLAogICAgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlKGZhbHNlKSwKICAgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVz
c2lvbihmYWxzZSksCi0gICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2lt
cGxpZnlNYXNrKQorICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBs
aWZ5KQoge30KIAogLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29u
ZGl0aW9uLCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdApAQCAt
NjgsNyArNzksOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZQogICAgIGlmIChtRm91bmRMb29w
VG9DaGFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBj
aGFuZ2UgdGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNU
b1NpbXBsaWZ5Lm1hdGNoKG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2go
bm9kZSk7CiAgICAgcmV0dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKQEAgLTgwLDcgKzky
LDkgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm8KICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRo
aXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlm
eS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOwor
ICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5n
ZSA9CisgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50
Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BU
b0NoYW5nZTsKIH0KIApAQCAtOTIsNyArMTA2LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2EK
ICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBB
bHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkp
OworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgp
KTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTA0LDcgKzExOSw4
IEBAIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqCiAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlz
IGxvb3AuCiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnku
bWF0Y2gobm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlKTsKICAg
ICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTE2LDEwICsxMzIsMzUgQEAg
Ym9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtRGVjbGEKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9v
cC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlKTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAgIHJl
dHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2Rl
KQoreworICAgIGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3Au
Y29uZGl0aW9uIHx8IG1Mb29wLmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgVEludGVybUJs
b2NrICpwYXJlbnQgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgQVNT
RVJUKHBhcmVudCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisgICAgICAgIGlmICht
TG9vcC5leHByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1M
b29wLmV4cHJlc3Npb24tPmRlZXBDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtTG9vcC5jb25kaXRp
b25WYXJpYWJsZSk7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorICAgICAgICAgICAgICAg
IENyZWF0ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3Au
Y29uZGl0aW9uLT5kZWVwQ29weSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgc2VxLnB1c2hfYmFj
ayhub2RlKTsKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hfYmFjayhOb2RlUmVwbGFj
ZVdpdGhNdWx0aXBsZUVudHJ5KHBhcmVudCwgbm9kZSwgc3RkOjptb3ZlKHNlcSkpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgLy8gTWFyayB0
aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRl
cm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKQEAgLTEyOCw3ICsxNjksNyBAQCB2b2lkIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICBTY29wZWROb2RlSW5UcmF2ZXJzYWxQYXRoIGFkZFRvUGF0aCh0aGlzLCBub2Rl
KTsKIAogICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IHRydWU7Ci0g
ICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9TaW1wbGlm
eTsKIAogICAgIGlmICghbUZvdW5kTG9vcFRvQ2hhbmdlICYmIG5vZGUtPmdldEluaXQoKSkKICAg
ICB7CkBAIC0xNDcsODMgKzE4OCwxNDEgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBtSW5zaWRlTG9v
cEluaXRDb25kaXRpb25PckV4cHJlc3Npb24gPSBmYWxzZTsKIAorICAgIGNvbnN0IExvb3BJbmZv
IHByZXZMb29wID0gbUxvb3A7CisKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgIHsK
LSAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgICAgICA9IFN0YXRpY1R5cGU6OkdldDxF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKLSAgICAgICAgVFZh
cmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFi
bGUsIGJvb2xUeXBlKTsKKyAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgPSBTdGF0aWNU
eXBlOjpHZXQ8RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFUZW1wb3JhcnksIDEsIDE+KCk7Cisg
ICAgICAgIG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgYm9vbFR5cGUpOworICAgICAgICBtTG9vcC5jb25kaXRpb24gICAgICAgICA9IG5v
ZGUtPmdldENvbmRpdGlvbigpOworICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5v
ZGUtPmdldEV4cHJlc3Npb24oKTsKIAogICAgICAgICAvLyBSZXBsYWNlIHRoZSBsb29wIGNvbmRp
dGlvbiB3aXRoIGEgYm9vbGVhbiB2YXJpYWJsZSB0aGF0J3MgdXBkYXRlZCBvbiBlYWNoIGl0ZXJh
dGlvbi4KICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAg
ICAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9Ci0g
ICAgICAgICAgICAvLyBpbnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOwotICAg
ICAgICAgICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsgfQotICAgICAg
ICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KLSAgICAgICAg
ICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOwotICAgICAgICAgICAgaW5zZXJ0U3Rh
dGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKLQotICAgICAgICAgICAg
VEludGVybUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbUxvb3AuZXhwcmVzc2lv
bik7CisKKyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29u
dGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAg
ICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8v
ICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAg
ICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgd2hp
bGUgKHMwKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRl
bXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERl
Y2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVj
bGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRl
bXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgor
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHBy
OworICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IHsgYm9keTsgfSBzMCA9IGV4cHI7
IH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3Rh
dGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMwID0g
ZXhwcjsgY29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1w
SW5pdERlY2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xh
cmF0aW9uKTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2Uo
KS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKworICAgICAgICAgICAgICAgIC8vIENh
bid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1h
eSBoYXZlIGJlZW4gbnVsbHB0ci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKKyAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBh
bnkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxv
b3AuY29uZGl0aW9uVmFyaWFibGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld0Jv
ZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5k
ZWVwQ29weSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50
IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAg
ICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhl
cmUgLSB0aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBiZQotICAgICAgICAgICAgLy8gdHJhdmVyc2Vk
LCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+
c2V0Qm9keShuZXdCb2R5KTsKLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVU
ZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBkbyB7Ci0gICAgICAgICAgICAvLyAgICAg
Ym9keTsKLSAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhwcik7Ci0gICAgICAgICAgICAvLyBp
bnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSB0cnVlOwotICAgICAgICAgICAgLy8gICBk
byB7Ci0gICAgICAgICAgICAvLyAgICAgeyBib2R5OyB9Ci0gICAgICAgICAgICAvLyAgICAgczAg
PSBleHByOwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7Ci0gICAgICAgICAgICBUSW50
ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAgICAgICAgIENy
ZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBDcmVhdGVCb29s
Tm9kZSh0cnVlKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRl
bXBJbml0RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkg
PSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQor
ICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKworICAgICAgICAgICAgaWYg
KG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJv
ZHkoKSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0
aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAg
ICAgLy8gICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAg
ICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBib29sIHMwID0gZXhw
cjsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9k
eTsKKyAgICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJs
ZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBh
cmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q29uZGl0aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRp
b24gdmFyaWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51
bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZG8gewor
ICAgICAgICAgICAgICAgIC8vICAgICBib2R5OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoZXhwcik7CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
Ym9vbCBzMDsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsKKyAgICAgICAg
ICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNl
IHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgICAgICAgICAgLy8gICBz
MCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAq
dGVtcEluaXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBEZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlu
c2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2Rl
LT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9u
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byBy
ZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCisgICAgICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVy
ZSAtIHRoZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gdHJhdmVy
c2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAg
IG5vZGUtPnNldEJvZHkobmV3Qm9keSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0
aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2so
Ci0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlh
YmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOwotCi0gICAgICAgICAgICAv
LyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBp
dCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCi0gICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKLSAgICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFueSBw
cm9ibGVtcy4KLSAgICAgICAgICAgIG5vZGUtPnNldEJvZHkobmV3Qm9keSk7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUoY29uZGl0aW9uVmFyaWFi
bGUpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikK
ICAgICAgICAgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRl
IHRoZSBsb29wLgotICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBm
b3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vIGludG8KLSAg
ICAgICAgICAgIC8vICAgewotICAgICAgICAgICAgLy8gICAgIGluaXQ7Ci0gICAgICAgICAgICAv
LyAgICAgYm9vbCBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7Ci0g
ICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICAgIGV4cHJC
OwotICAgICAgICAgICAgLy8gICAgICAgczAgPSBleHByOwotICAgICAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgICAgIC8vICAgfQorICAgICAgICAgICAgaWYgKCFtTG9vcC5jb25kaXRpb24pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gQ3JlYXRlQm9v
bE5vZGUodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3
aGlsZUxvb3A7CiAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKmxvb3BTY29wZSAgICAgICAgICAg
ID0gbmV3IFRJbnRlcm1CbG9jaygpOwogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29w
U2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKIApAQCAtMjMzLDQ4ICsz
MzIsMTMwIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VM
b29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNl
LT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0g
dHJ1ZTsiIG90aGVyd2lzZQotICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kaXRpb25Jbml0
aWFsaXplciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
CisgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IG5vZGUt
PmdldENvbmRpdGlvbigpLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhl
IGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFu
c2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIHdoaWxl
IChleHByKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExv
Y2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAg
ICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBi
b2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAq
d2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBp
biB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9u
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShleHByKSB7IHdo
aWxlTG9vcEJvZHkgfSIKKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPQorICAgICAgICAgICAg
ICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0
aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sg
Y29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAg
ICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uSW5p
dGlhbGl6ZXIgPSBDcmVhdGVCb29sTm9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBNb3Zl
IHRoZSBsb29wIGNvbmRpdGlvbiBpbnNpZGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgLy8g
VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikg
eyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
eworICAgICAgICAgICAgICAgIC8vICAgICBpbml0OworICAgICAgICAgICAgICAgIC8vICAgICBi
b29sIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgIH0K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVt
ZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBj
b250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7Igor
ICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2soCisgICAgICAgICAg
ICAgICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZh
cmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsg
Ym9keTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
KndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIg
aW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lv
bigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9k
eS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1l
bnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFNjb3BlU2Vx
dWVuY2UtPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0
aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKLQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRC
b2R5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGlu
IHRoZSB3aGlsZSBsb29wCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNl
KCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAotICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lk
ZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAg
ICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAg
ICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAgICAgICAgICAgLy8gICAg
IGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIGJvb2wgczAgPSBleHByOworICAgICAgICAg
ICAgICAgIC8vICAgICB3aGlsZSAoczApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2Fs
IGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAv
LyAgIGV4cHJCOyBzMCA9IGV4cHI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0ICJib29sIHMwID0gZXhwcjsiCisgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAg
ICAgICAgICAgIC8vIEluc2VydCAieyBib2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2so
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIEluc2VydCAiZXhwckI7IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+
Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
SW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAogICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRD
b25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+
ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgIndo
aWxlKHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKLSAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGls
ZUxvb3AgPQotICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxs
cHRyLCBDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOwogICAgICAgICAg
ICAgbG9vcFNjb3BlLT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sod2hpbGVMb29wKTsKICAgICAg
ICAgICAgIHF1ZXVlUmVwbGFjZW1lbnQobG9vcFNjb3BlLCBPcmlnaW5hbE5vZGU6OklTX0RST1BQ
RUQpOwogCiAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRoZSBvbGQgYm9keSBub2RlIHdpbGwg
YmUgdHJhdmVyc2VkIGFuZCBsb29wcyBpbnNpZGUgaXQgbWF5IGJlCi0gICAgICAgICAgICAvLyB0
cmFuc2Zvcm1lZC4gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIHN0
aWxsIGJlIGluIHRoZSBBU1QgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlv
biB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRv
ZXNuJ3QgbmVlZCB0bwotICAgICAgICAgICAgLy8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zv
cm0gcGF0aCB0byBpdC4KKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUs
IHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlcgor
ICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5k
IHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorICAgICAgICAgICAgLy8gbmVl
ZCB0byBrbm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9ybSBwYXRoIHRvIGl0LgogICAgICAgICB9
CiAgICAgfQogCkBAIC0yODMsMTYgKzQ2NCwyNiBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAvLyBXZSB0
cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9y
bWVkLgogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBtTG9vcCA9IHByZXZMb29wOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UKIAorYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIs
IFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQoreworICAgIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgdHJhdmVyc2VyKG51bGxwdHIsIHN5bWJvbFRh
YmxlKTsKKyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKyAgICByZXR1cm4gdHJhdmVy
c2VyLnVwZGF0ZVRyZWUoY29tcGlsZXIsIHJvb3QpOworfQorCiBib29sIFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiB7Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0
aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xU
YWJsZSk7CisgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyIGNvbmRpdGlvbnNUb1NpbXBsaWZ5
KGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzayk7CisgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1Ry
YXZlcnNlciB0cmF2ZXJzZXIoJmNvbmRpdGlvbnNUb1NpbXBsaWZ5LCBzeW1ib2xUYWJsZSk7CiAg
ICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CiAgICAgcmV0dXJuIHRyYXZlcnNlci51cGRh
dGVUcmVlKGNvbXBpbGVyLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAppbmRleCA0Y2RlZGU2ODMyZGU5MzAy
NDM0OGQ3YzY5YWE5ZTYxYzA2YmI0NTBmLi42OGI5OGY4NWM0ODliOGY0Mjg4YjU5NDgzZDlmM2M5
YWQ5MDU2YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2lt
cGxpZnlMb29wQ29uZGl0aW9ucy5oCkBAIC0xOSw2ICsxOSwxMCBAQCBjbGFzcyBUQ29tcGlsZXI7
CiBjbGFzcyBUSW50ZXJtTm9kZTsKIGNsYXNzIFRTeW1ib2xUYWJsZTsKIAorQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJv
bFRhYmxlICpzeW1ib2xUYWJsZSk7CisKIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxv
b3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9T
aW1wbGlmeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzZkZTE4MmQ5ZWYyM2IzYWIwMmM0MDllYmQxM2E2YjZlMzQ2OWZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0FzTm9kZS5oCkBAIC0wLDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5o
IgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFjZSBw
cml2Cit7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFzTm9kZQore307CisKK3Rl
bXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Ob2RlPgoreworICAgIHN0YXRpYyBBTkdM
RV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJuIG5v
ZGU7IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UeXBlZD4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDog
bnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJt
U3ltYm9sPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhU
SW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0
QXNTeW1ib2xOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Db25zdGFudFVuaW9uPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybUNvbnN0YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpIDogbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Q
cm90b3R5cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkgOiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1QcmVwcm9jZXNzb3JE
aXJlY3RpdmU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpIDogbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3dpenpsZT4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2Rl
ICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N3aXp6bGVO
b2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1CaW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmluYXJ5
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBu
b2RlLT5nZXRBc0JpbmFyeU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBBc05vZGU8VEludGVybVVuYXJ5PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1VuYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVGVybmFyeT4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1Rlcm5hcnlOb2RlKCkg
OiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1JZkVsc2U+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0lmRWxzZU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybVN3aXRjaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZSA/IG5vZGUtPmdldEFzU3dpdGNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQ2FzZT4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Nhc2VOb2RlKCkgOiBudWxscHRyOwor
ICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQWdncmVnYXRlPgoreworICAg
IHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VElu
dGVybUJsb2NrPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0Jsb2NrKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbj4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50
ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybURlY2xhcmF0aW9uPgoreworICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0RlY2xhcmF0aW9u
Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9k
ZTxUSW50ZXJtTG9vcD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpl
eGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2Rl
LT5nZXRBc0xvb3BOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+Citz
dHJ1Y3QgQXNOb2RlPFRJbnRlcm1CcmFuY2g+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5vZGUgPyBub2RlLT5nZXRBc0JyYW5jaE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsK
KworfSAgLy8gbmFtZXNwYWNlIHByaXYKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9J
TkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIHJldHVybiBwcml2OjpB
c05vZGU8VD46OmV4ZWMobm9kZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIuY3BwCmluZGV4IGQwOGMzODZkYTA3ZmU5MGRmNmFlMjE5ODJhNDhlMTExYzNkYzdmMGUu
LmFjYzc4OTI5NmIyYjcxZTFiODMzYTkzMjM4OTE3NGE4OGU4MDNjMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJ
c0R5bmFtaWNJbmRleGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCiAgICAgcmV0
dXJuIElzRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeChub2RlKSAmJiBub2RlLT5nZXRM
ZWZ0KCktPmdldEFzU3dpenpsZU5vZGUoKTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXI6Om1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbChU
SW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAg
ICBpZiAoKG1NYXNrICYga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVy
bmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5
ICpub2RlKQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0FycmF5TGVuZ3RoTWV0aG9kKSAh
PSAwKQogICAgIHsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QK
IHsKICAgICAvLyBMLXZhbHVlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB0byBjaGVj
ayBmb3IgZHluYW1pYyBpbmRleGluZyBpbiBMLXZhbHVlLgogICAgIC8vIFRyYXZlcnNlcnMgdGhh
dCBkb24ndCB0cmFjayBsLXZhbHVlcyBjYW4gc3RpbGwgdXNlIHRoaXMgY2xhc3MgYW5kIG1hdGNo
IGJpbmFyeSBub2RlcyB3aXRoCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJl
bnROb2QKIAogYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5h
cnkgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgKnBhcmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBjb25zdAogewogICAgIGlmIChtYXRjaElu
dGVybmFsKG5vZGUsIHBhcmVudE5vZGUpKQogICAgIHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29s
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRj
aChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0V4cHJl
c3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC0xNjEsNyArMTYxLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkKK2Jvb2wgSW50
ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3QK
IHsKICAgICBpZiAoKG1NYXNrICYga1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbikgIT0g
MCkKICAgICB7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKChtTWFzayAmIGtNdWx0aURlY2xhcmF0aW9u
KSAhPSAwKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAppbmRleCBlOWM0YmNmYTUzMWZhOTQzYWZlNTRj
MDYzZWNlYWUyMDc3OGIzOTJlLi42ZjNkODczNTU2NzRlMGM4N2E3ZWQ0Nzc1ODdjNzIwNDQ1NTJk
ZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVQYXR0ZXJuTWF0Y2hlci5oCkBAIC0yOCw1MiArMjgsNTIgQEAgY2xhc3MgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyCiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rv
ck9yTWF0cml4KFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogICAgIHN0YXRpYyBib29sIElzRHluYW1p
Y0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAotICAgIGVu
dW0gUGF0dGVyblR5cGUKKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CiAgICAg
ewogICAgICAgICAvLyBNYXRjaGVzIGV4cHJlc3Npb25zIHRoYXQgYXJlIHVuZm9sZGVkIHRvIGlm
IHN0YXRlbWVudHMgYnkgVW5mb2xkU2hvcnRDaXJjdWl0VG9JZgotICAgICAgICBrVW5mb2xkZWRT
aG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorICAgICAgICBrVW5mb2xkZWRTaG9ydENp
cmN1aXRFeHByZXNzaW9uID0gMXUgPDwgMHUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBleHByZXNz
aW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBzdGF0
ZW1lbnRzIHdoZXJlIGEKICAgICAgICAgLy8gY29uc3RydWN0b3Igb3IgZnVuY3Rpb24gY2FsbCBy
ZXN1bHQgaXMgYXNzaWduZWQuCi0gICAgICAgIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkgPSAw
eDAwMDEgPDwgMSwKKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1IDw8IDF1
LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZHluYW1pYyBpbmRleGluZyBvZiB2ZWN0b3JzIG9yIG1h
dHJpY2VzIGluIGwtdmFsdWVzLgotICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1h
dHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisgICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZl
Y3Rvck9yTWF0cml4SW5MVmFsdWUgPSAxdSA8PCAydSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRl
Y2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFibGVzLgotICAgICAg
ICBrTXVsdGlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCAzLAorICAgICAgICBrTXVsdGlEZWNsYXJh
dGlvbiA9IDF1IDw8IDN1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIGFy
cmF5cy4KLSAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNCwKKyAgICAgICAg
a0FycmF5RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xh
cmF0aW9ucyBvZiBzdHJ1Y3RzIHdoZXJlIHRoZSBzdHJ1Y3QgdHlwZSBkb2VzIG5vdCBoYXZlIGEg
bmFtZS4KLSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwK
KyAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAxdSA8PCA1dSwKIAogICAgICAg
ICAvLyBNYXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhvZC4KLSAgICAgICAga0FycmF5TGVuZ3Ro
TWV0aG9kID0gMHgwMDAxIDw8IDYsCisgICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDF1IDw8
IDZ1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgYSB2ZWN0b3Igb3IgbWF0cml4IGNvbnN0cnVjdG9y
IHdob3NlIGFyZ3VtZW50cyBhcmUgc2NhbGFyaXplZCBieSB0aGUKICAgICAgICAgLy8gU0hfU0NB
TEFSSVpFX1ZFQ19PUl9NQVRfQ09OU1RSVUNUT1JfQVJHVU1FTlRTIHdvcmthcm91bmQuCi0gICAg
ICAgIGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisgICAgICAg
IGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDF1IDw8IDd1LAogICAgIH07CiAgICAg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKIAotICAg
IGJvb2wgbWF0Y2goVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1V
bmFyeSAqbm9kZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkg
Km5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKIAogICAgIC8vIFVzZSB0aGlz
IHZlcnNpb24gZm9yIGNoZWNraW5nIGJpbmFyeSBub2RlIG1hdGNoZXMgaW4gY2FzZSB5b3UncmUg
dXNpbmcgZmxhZwogICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCi0gICAgYm9vbCBtYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFy
ZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSk7CisgICAgYm9vbCBtYXRjaChUSW50
ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJl
cXVpcmVkSGVyZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJu
YXJ5ICpub2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7Cisg
ICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50
Tm9kZSkgY29uc3Q7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3Q7
CisgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OwogCiAgIHBy
aXZhdGU6CiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOwogCi0gICAgYm9vbCBtYXRjaElu
dGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpIGNvbnN0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
SW50ZXJtTm9kZV91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCmluZGV4IDZhYjEzYmE0
Njk1ZWMxYzQzMGJiYTFjNjI5NmE1NjFhNGY5NzQzMmUuLmQzZTFmY2EwMDE0Mjk5YjRjNDY5MzAy
N2NiNThkNmZkMGNlNjE2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuY3BwCkBAIC0yMjQsNiArMjI0LDUwIEBAIFRWYXJpYWJsZSAqRGVj
bGFyZVRlbXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgIHJldHVybiB2
YXJpYWJsZTsKIH0KIAorc3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gRGVjbGFyZVN0cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAg
VFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5
UXVhbGlmaWVyLAorICAgIHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVT
dHJpbmcgJnN0cnVjdFR5cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0
SW5zdGFuY2VOYW1lKQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9CisgICAgICAgIG5l
dyBUU3RydWN0dXJlKHN5bWJvbFRhYmxlLCBzdHJ1Y3RUeXBlTmFtZSwgZmllbGRMaXN0LCBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIGF1dG8gbWFrZVN0cnVjdHVyZVR5cGUgPSBb
Jl0oYm9vbCBpc1N0cnVjdFNwZWNpZmllcikgeworICAgICAgICBUVHlwZSAqc3RydWN0dXJlVHlw
ZSA9IG5ldyBUVHlwZShzdHJ1Y3R1cmUsIGlzU3RydWN0U3BlY2lmaWVyKTsKKyAgICAgICAgc3Ry
dWN0dXJlVHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgICAgIHN0cnVjdHVyZVR5
cGUtPnNldE1lbW9yeVF1YWxpZmllcihtZW1vcnlRdWFsaWZpZXIpOworICAgICAgICBpZiAoYXJy
YXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0dXJlVHlwZS0+bWFrZUFy
cmF5KGFycmF5U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisgICAgfTsKKworICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKworICAgIFRW
YXJpYWJsZSAqdHlwZVZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtFbXB0eUltbXV0
YWJsZVN0cmluZywgbWFrZVN0cnVjdHVyZVR5cGUodHJ1ZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisgICAgaW5zZXJ0U2VxdWVu
Y2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dHlwZVZhcn0pOworCisgICAgVFZh
cmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisgICAgaWYgKHN0cnVjdEluc3RhbmNlTmFt
ZSkKKyAgICB7CisgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJs
ZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisgICAgICAgIGluc2VydFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9u
e2luc3RhbmNlVmFyfSk7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0RnVuY3Rpb25JbmRleCA9
IEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KHJvb3QpOworICAgIHJvb3QtPmluc2Vy
dENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisKKyAgICBy
ZXR1cm4ge3R5cGVWYXIsIGluc3RhbmNlVmFyfTsKK30KKwogY29uc3QgVFZhcmlhYmxlICpEZWNs
YXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAppbmRleCAz
OWI4NmRkMWJmMjk2YjcwMzk1NmY3MTI2ZDA3NGJkNTlhY2U2YzRjLi5mNWQxYzkzNTgyYWEwZjUx
MTcwNTcyNjA1NTkzODViNmI3N2Y1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCkBAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRl
Y2xhcmVUZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsK
K3N0ZDo6cGFpcjxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxlICo+IERlY2xhcmVT
dHJ1Y3R1cmUoCisgICAgVEludGVybUJsb2NrICpyb290LAorICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LAorICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyLAorICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKyAg
ICB1aW50MzJfdCBhcnJheVNpemUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7
CiBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZp
ZWxkTGlzdCAqZmllbGRMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODM0NzM4ODU4YzBjOWZjNjcyODhlYjE1ZTYz
MzFhNTNhNDQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAKQEAgLTAs
MCArMSwxMDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisKKyNkZWZpbmUgR1VBUkQyKGNvbmQsIGZhaWxWYWwpIFwKKyAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCEoY29uZCkpICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsVmFsOyAgIFwKKyAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBH
VUFSRChjb25kKSBHVUFSRDIoY29uZCwgbnVsbHB0cikKKworbmFtZXNwYWNlIHNoCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5MSU5FIGJvb2wgQWxsQml0
cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhheXN0YWNrICYgbmVlZGxl
KSA9PSBuZWVkbGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5H
TEVfSU5MSU5FIGJvb2wgQW55Qml0cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1
cm4gKGhheXN0YWNrICYgbmVlZGxlKSAhPSAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVzdWx0ICZv
dGhlcikKKyAgICA6IG1BY3Rpb24ob3RoZXIubUFjdGlvbiksCisgICAgICBtVmlzaXQob3RoZXIu
bVZpc2l0KSwKKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisgICAgICBtTXVsdGkoc3Rk
Ojptb3ZlKG90aGVyLm1NdWx0aSkpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6
QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFj
dGlvbihBY3Rpb246OlJlcGxhY2VTaW5nbGUpLCBtVmlzaXQodmlzaXQpLCBtU2luZ2xlKCZub2Rl
KQore30KKworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5v
ZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkKKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6
UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisgICAgICBtVmlzaXQobm9kZSA/IHZpc2l0
IDogVmlzaXRCaXRzOjpOZWl0aGVyKSwKKyAgICAgIG1TaW5nbGUobm9kZSkKK3t9CisKK1RJbnRl
cm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KG51bGxwdHJfdCkKKyAgICA6IG1BY3Rp
b24oQWN0aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVs
bHB0cikKK3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwp
CisgICAgOiBtQWN0aW9uKEFjdGlvbjo6RmFpbCksIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIp
LCBtU2luZ2xlKG51bGxwdHIpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgIDogbUFjdGlv
bihBY3Rpb246OlJlcGxhY2VNdWx0aSksCisgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVy
KSwKKyAgICAgIG1TaW5nbGUobnVsbHB0ciksCisgICAgICBtTXVsdGkoc3RkOjptb3ZlKG5vZGVz
KSkKK3t9CisKK3ZvaWQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om1vdmVBc3NpZ25JbXBs
KEJhc2VSZXN1bHQgJm90aGVyKQoreworICAgIG1BY3Rpb24gPSBvdGhlci5tQWN0aW9uOworICAg
IG1WaXNpdCAgPSBvdGhlci5tVmlzaXQ7CisgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisg
ICAgbU11bHRpICA9IHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpOworfQorCitUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6TXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUo
bm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworICAgIG5vZGVzLmVyYXNlKGl0
LCBub2Rlcy5lbmQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7Cit9CisKK2Jvb2wg
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1BY3Rpb24gPT0gQWN0aW9uOjpGYWlsOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpCYXNl
UmVzdWx0Ojppc0Ryb3AoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6
RHJvcDsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpzaW5n
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtU2luZ2xlOworfQorCitjb25zdCBzdGQ6OnZlY3Rv
cjxUSW50ZXJtTm9kZSAqPiAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om11bHRpKCkgY29u
c3QKK3sKKyAgICBpZiAobUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmbU11bHRpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUHJlUmVzdWx0ID0gVEludGVybVJlYnVp
bGQ6OlByZVJlc3VsdDsKKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0
OjpQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVz
dWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQobnVsbHB0cl90KSA6IEJh
c2VSZXN1bHQobnVsbHB0cikge30KK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJl
c3VsdChGYWlsKCkpIHt9CisKK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhl
cikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0
ICYmb3RoZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KKwordm9pZCBQcmVSZXN1bHQ6Om9wZXJh
dG9yPShQcmVSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1wbChvdGhlcik7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJt
UmVidWlsZDo6UG9zdFJlc3VsdDsKKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9k
ZSAmbm9kZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KG51bGxwdHJfdCkg
OiBCYXNlUmVzdWx0KG51bGxwdHIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEZhaWwpIDog
QmFzZVJlc3VsdChGYWlsKCkpIHt9CisKK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoUG9zdFJlc3Vs
dCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0
KEJhc2VSZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFBvc3RS
ZXN1bHQ6Om9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpCit7CisgICAgbW92ZUFzc2lnbklt
cGwob3RoZXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUSW50ZXJtUmVidWls
ZDo6VEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNpdCwgYm9v
bCBwb3N0VmlzaXQpCisgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgbVN5bWJvbFRh
YmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbVByZVZpc2l0KHByZVZpc2l0
KSwKKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQoreworICAgIEFTU0VSVChwcmVWaXNpdCB8
fCBwb3N0VmlzaXQpOworfQorCitUSW50ZXJtUmVidWlsZDo6flRJbnRlcm1SZWJ1aWxkKCkKK3sK
KyAgICBBU1NFUlQoIW1Ob2RlU3RhY2sudmFsdWUpOworICAgIEFTU0VSVCghbU5vZGVTdGFjay50
YWlsKTsKK30KKworY29uc3QgVEZ1bmN0aW9uICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50RnVu
Y3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50RnVuYzsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisgICAgYXV0byBwYXJlbnQgPSAqbU5vZGVT
dGFjay50YWlsOworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgLS1vZmZz
ZXQ7CisgICAgICAgIEFTU0VSVChwYXJlbnQudGFpbCk7CisgICAgICAgIHBhcmVudCA9ICpwYXJl
bnQudGFpbDsKKyAgICB9CisgICAgcmV0dXJuIHBhcmVudC52YWx1ZTsKK30KKworYm9vbCBUSW50
ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICgh
cmVidWlsZEluUGxhY2Uocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBtQ29tcGlsZXIudmFsaWRhdGVBU1QoJnJvb3QpOworfQorCitib29sIFRJ
bnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQorewor
ICAgIHJldHVybiByZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICByZXR1cm4g
cmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1
aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHJlYnVp
bGRJblBsYWNlSW1wbChub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+Citib29s
IFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKK3sKKyAgICBh
dXRvICpuZXdOb2RlID0gdHJhdmVyc2VBbnlBczxOb2RlPihub2RlKTsKKyAgICBpZiAoIW5ld05v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5ld05v
ZGUgIT0gJm5vZGUpCisgICAgeworICAgICAgICAqbm9kZS5nZXRTZXF1ZW5jZSgpID0gc3RkOjpt
b3ZlKCpuZXdOb2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6cmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSkKK3sKKyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorTm9kZSAqVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgIXJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBhc05vZGU8Tm9kZT4ocmVzdWx0Lm1TaW5nbGUpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
QW55QXMoVEludGVybU5vZGUgJm5vZGUsIE5vZGUgKiZvdXQpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgcmVzdWx0Lm1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVsdGkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb3V0ID0gYXNOb2RlPE5v
ZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyAgICByZXR1cm4gb3V0OworfQorCitib29sIFRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFz
ZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBjaGlsZHJlbiA9IG5vZGUuZ2V0U2VxdWVuY2Uo
KTsKKyAgICBBU1NFUlQoY2hpbGRyZW4pOworICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJl
bjsKKworICAgIGZvciAoVEludGVybU5vZGUgKmNoaWxkIDogKmNoaWxkcmVuKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNoaWxkKTsKKyAgICAgICAgUG9zdFJlc3VsdCByZXN1bHQodHJhdmVyc2VB
bnkoKmNoaWxkKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQubUFjdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisgICAgICAgICAgICAg
ICAgbmV3Q2hpbGRyZW4ucHVzaF9iYWNrKHJlc3VsdC5tU2luZ2xlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VNdWx0aToKKyAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpuZXdOb2RlIDogcmVzdWx0Lm1NdWx0aSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNo
X2JhY2sobmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpEcm9w
OgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6RmFp
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAqY2hpbGRyZW4gPSBzdGQ6Om1vdmUobmV3Q2hpbGRyZW4pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0cnVjdCBUSW50ZXJtUmVidWlsZDo6
Tm9kZVN0YWNrR3VhcmQKK3sKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBvbGROb2RlU3Rh
Y2s7CisgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gJm5vZGVTdGFjazsKKyAgICBOb2RlU3Rh
Y2tHdWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorICAgICAgICA6IG9s
ZE5vZGVTdGFjayhub2RlU3RhY2spLCBub2RlU3RhY2sobm9kZVN0YWNrKQorICAgIHt9CisgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KK307CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5h
bE5vZGUpCit7CisgICAgUHJlUmVzdWx0IHByZVJlc3VsdCA9IHRyYXZlcnNlUHJlKG9yaWdpbmFs
Tm9kZSk7CisgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChwcmVSZXN1bHQubVZpc2l0ID09IFZpc2l0Qml0czo6TmVpdGhlcik7CisgICAgICAgIHJldHVy
biBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5v
ZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKyAgICBjb25zdCBWaXNpdEJpdHMgdmlzaXQg
ICAgICAgPSBwcmVSZXN1bHQubVZpc2l0OworICAgIGNvbnN0IE5vZGVUeXBlIGN1cnJOb2RlVHlw
ZSA9IGdldE5vZGVUeXBlKCpjdXJyTm9kZSk7CisKKyAgICBjdXJyTm9kZSA9IHRyYXZlcnNlQ2hp
bGRyZW4oY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwgdmlzaXQpOworICAg
IGlmICghY3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRmFpbCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cmF2ZXJzZVBvc3QoY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJy
Tm9kZSwgdmlzaXQpOworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlUHJl
KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpCit7CisgICAgaWYgKCFtUHJlVmlzaXQpCisgICAg
eworICAgICAgICByZXR1cm4ge29yaWdpbmFsTm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyAgICB9
CisKKyAgICBOb2RlU3RhY2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNr
ID0geyZvcmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgY29uc3QgTm9k
ZVR5cGUgb3JpZ2luYWxOb2RlVHlwZSA9IGdldE5vZGVUeXBlKG9yaWdpbmFsTm9kZSk7CisKKyAg
ICBzd2l0Y2ggKG9yaWdpbmFsTm9kZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBl
OjpVbmtub3duOgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
biBGYWlsKCk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFN5bWJvbFByZSgqb3JpZ2luYWxOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2
aXNpdENvbnN0YW50VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Z1bmN0
aW9uUHJvdG90eXBlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29y
RGlyZWN0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZl
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNQcmVwcm9jZXNzb3JEaXJlY3RpdmUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
QmluYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QmluYXJ5UHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCaW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0VGVybmFyeVByZSgqb3JpZ2luYWxOb2RlLmdldEFzVGVybmFy
eU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
SWZFbHNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0Y2hQcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNh
c2U6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXND
YXNlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKCpvcmlnaW5hbE5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFn
Z3JlZ2F0ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVByZSgqb3JpZ2luYWxO
b2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSgKKyAg
ICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25Ob2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdERlY2xhcmF0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNEZWNsYXJh
dGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRMb29wUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNo
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBlIGN1cnJOb2Rl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCit7CisgICAg
aWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFueUJpdHModmlzaXQsIFZpc2l0
Qml0czo6Q2hpbGRyZW5SZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0gJmN1cnJOb2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBOb2RlU3Rh
Y2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwg
Jmd1YXJkLm9sZE5vZGVTdGFja307CisKKyAgICBzd2l0Y2ggKGN1cnJOb2RlVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVy
biAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2
ZToKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAg
ICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Jp
bmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzVGVybmFyeU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1
cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUlmRWxzZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVN3aXRj
aENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9u
RGVmaW5pdGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQWdn
cmVnYXRlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpCbG9jazoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAqY3Vyck5vZGUu
Z2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRGVjbGFyYXRp
b25DaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNh
c2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VMb29wQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJy
YW5jaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9k
ZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1
cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCkKK3sKKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisgICAgeworICAgICAgICByZXR1cm4g
Y3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBv
c3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAgIGlmIChB
bnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBvc3RSZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5v
ZGUgIT0gJmN1cnJOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0K
KworICAgIE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sg
PSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5v
ZGVUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbCgpOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0
KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNv
bnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDb25zdGFudFVuaW9uUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpG
dW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUG9zdCgqY3Vyck5vZGUuZ2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vz
c29yRGlyZWN0aXZlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmFyeToKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFVuYXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNVbmFyeU5vZGUoKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJp
bmFyeVBvc3QoKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6VGVybmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJy
Tm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l6emxl
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpenpsZVBvc3QoKmN1cnJOb2RlLmdldEFzU3dp
enpsZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAg
IHJldHVybiB2aXNpdElmRWxzZVBvc3QoKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dp
dGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpDYXNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Q2FzZVBvc3QoKmN1cnJOb2RlLmdl
dEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlv
bjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoKmN1cnJO
b2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpB
Z2dyZWdhdGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9k
ZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmxvY2s6CisgICAg
ICAgICAgICByZXR1cm4gdmlzaXRCbG9ja1Bvc3QoKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorICAgICAg
ICAgICAgICAgICpjdXJyTm9kZS5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1
cm4gdmlzaXREZWNsYXJhdGlvblBvc3QoKmN1cnJOb2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkp
OworICAgICAgICBjYXNlIE5vZGVUeXBlOjpMb29wOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
TG9vcFBvc3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5
cGU6OkJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJyYW5jaFBvc3QoKmN1cnJOb2Rl
LmdldEFzQnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJl
bihUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJh
c2VDaGlsZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJh
dmVyc2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBpZiAodHJhdmVy
c2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gJm5v
ZGU7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitUSW50ZXJtTm9kZSAqVEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlRGVjbGFyYXRpb25DaGlsZHJlbihUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJl
bihUSW50ZXJtU3dpenpsZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqbmV3T3Bl
cmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQo
bmV3T3BlcmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6
bGVPZmZzZXRzKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkg
Jm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgbGVmdCA9IG5vZGUuZ2V0TGVmdCgpOworICAgIEFT
U0VSVChsZWZ0KTsKKyAgICBhdXRvICpjb25zdCByaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAg
ICBBU1NFUlQocmlnaHQpOworCisgICAgYXV0byAqY29uc3QgbmV3TGVmdCA9IHRyYXZlcnNlQW55
QXM8VEludGVybVR5cGVkPigqbGVmdCk7CisgICAgR1VBUkQobmV3TGVmdCk7CisgICAgYXV0byAq
Y29uc3QgbmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKyAg
ICBHVUFSRChuZXdSaWdodCk7CisKKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0
ICE9IHJpZ2h0KQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRPcCgpOwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG5ld0xlZnQtPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dEludGVyZmFjZUJsb2NrOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgICAgICByZXR1cm4gVElu
dGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRT
aGFkZXJWZXJzaW9uKCkpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9w
LCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihUSW50ZXJt
VW5hcnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFu
ZCgpOworICAgIEFTU0VSVChvcGVyYW5kKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld09wZXJhbmQg
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworICAgIEdVQVJEKG5ld09w
ZXJhbmQpOworCisgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgVEludGVybVVuYXJ5KG5vZGUuZ2V0T3AoKSwgbmV3T3BlcmFuZCwgbm9kZS5n
ZXRGdW5jdGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1O
b2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5h
cnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7
CisgICAgQVNTRVJUKGNvbmQpOworICAgIGF1dG8gKmNvbnN0IHRydWVfID0gbm9kZS5nZXRUcnVl
RXhwcmVzc2lvbigpOworICAgIEFTU0VSVCh0cnVlXyk7CisgICAgYXV0byAqY29uc3QgZmFsc2Vf
ID0gbm9kZS5nZXRGYWxzZUV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZmFsc2VfKTsKKworICAg
IGF1dG8gKmNvbnN0IG5ld0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQp
OworICAgIEdVQVJEKG5ld0NvbmQpOworICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJz
ZUFueUFzPFRJbnRlcm1UeXBlZD4oKnRydWVfKTsKKyAgICBHVUFSRChuZXdUcnVlKTsKKyAgICBh
dXRvICpjb25zdCBuZXdGYWxzZSA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqZmFsc2Vf
KTsKKyAgICBHVUFSRChuZXdGYWxzZSk7CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5l
d1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBUSW50ZXJtVGVybmFyeShuZXdDb25kLCBuZXdUcnVlLCBuZXdGYWxzZSk7CisgICAg
fQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICBhdXRv
ICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCk7Cisg
ICAgYXV0byAqY29uc3QgdHJ1ZV8gID0gbm9kZS5nZXRUcnVlQmxvY2soKTsKKyAgICBhdXRvICpj
b25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKworICAgIGF1dG8gKmNvbnN0IG5l
d0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAgIEdVQVJEKG5l
d0NvbmQpOworICAgIFRJbnRlcm1CbG9jayAqbmV3VHJ1ZSA9IG51bGxwdHI7CisgICAgaWYgKHRy
dWVfKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqdHJ1ZV8sIG5ld1RydWUp
KTsKKyAgICB9CisgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisgICAgaWYg
KGZhbHNlXykKKyAgICB7CisgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNlXywgbmV3
RmFsc2UpKTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUgIT0g
dHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtSWZFbHNlKG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VT
d2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGlu
aXQgPSBub2RlLmdldEluaXQoKTsKKyAgICBBU1NFUlQoaW5pdCk7CisgICAgYXV0byAqY29uc3Qg
c3RtdHMgPSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKyAgICBBU1NFUlQoc3RtdHMpOworCisg
ICAgYXV0byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5p
dCk7CisgICAgR1VBUkQobmV3SW5pdCk7CisgICAgYXV0byAqY29uc3QgbmV3U3RtdHMgPSB0cmF2
ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4oKnN0bXRzKTsKKyAgICBHVUFSRChuZXdTdG10cyk7CisK
KyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld1N0bXRzICE9IHN0bXRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpdGNoKG5ld0luaXQsIG5ld1N0bXRzKTsKKyAgICB9
CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgYXV0byAqY29u
c3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0Nv
bmQgPSBudWxscHRyOworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVy
c2VBbnlBcygqY29uZCwgbmV3Q29uZCkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNv
bmQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1DYXNlKG5ld0NvbmQpOworICAg
IH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxk
Ojp0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxkcmVuKFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gJm5vZGUpCit7CisgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRl
ZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisgICAgbVBhcmVudEZ1bmMgPSBub2RlLmdldEZ1
bmN0aW9uKCk7CisgICAgc3RydWN0IE9uRXhpdAorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uIComcGFyZW50RnVuYzsKKyAgICAgICAgT25FeGl0KGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVu
dEZ1bmMpIDogcGFyZW50RnVuYyhwYXJlbnRGdW5jKSB7fQorICAgICAgICB+T25FeGl0KCkgeyBw
YXJlbnRGdW5jID0gbnVsbHB0cjsgfQorICAgIH0gb25FeGl0KG1QYXJlbnRGdW5jKTsKKworICAg
IGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgIEFT
U0VSVChwcm90byk7CisgICAgYXV0byAqY29uc3QgYm9keSA9IG5vZGUuZ2V0Qm9keSgpOworICAg
IEFTU0VSVChib2R5KTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1Byb3RvID0gdHJhdmVyc2VBbnlB
czxUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU+KCpwcm90byk7CisgICAgR1VBUkQobmV3UHJvdG8p
OworICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4o
KmJvZHkpOworICAgIEdVQVJEKG5ld0JvZHkpOworCisgICAgaWYgKG5ld1Byb3RvICE9IHByb3Rv
IHx8IG5ld0JvZHkgIT0gYm9keSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJu
ICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRT
eW1ib2woKTsKKyAgICBBU1NFUlQoc3ltYm9sKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJv
bCA9IHRyYXZlcnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisgICAgR1VBUkQobmV3
U3ltYm9sKTsKKworICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24obmV3U3ltYm9sLCBu
b2RlLmlzUHJlY2lzZSgpLCBub2RlLmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZu
b2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxk
cmVuKFRJbnRlcm1Mb29wICZub2RlKQoreworICAgIGNvbnN0IFRMb29wVHlwZSBsb29wVHlwZSA9
IG5vZGUuZ2V0VHlwZSgpOworCisgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgp
OworICAgIGF1dG8gKmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIGF1dG8g
KmNvbnN0IGV4cHIgPSBub2RlLmdldEV4cHJlc3Npb24oKTsKKyAgICBhdXRvICpjb25zdCBib2R5
ID0gbm9kZS5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOworCisjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfQVNTRVJUUykKKyAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BE
b1doaWxlOgorICAgICAgICAgICAgQVNTRVJUKGNvbmQpOworICAgICAgICAgICAgQVNTRVJUKCFp
bml0ICYmICFleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAg
YXV0byAqY29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqYm9keSk7
CisgICAgR1VBUkQobmV3Qm9keSk7CisgICAgVEludGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRy
OworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5p
dCwgbmV3SW5pdCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBudWxscHRy
OworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqY29u
ZCwgbmV3Q29uZCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRy
OworICAgIGlmIChleHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZXhw
ciwgbmV3RXhwcikpOworICAgIH0KKworICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3Q29u
ZCAhPSBjb25kIHx8IG5ld0V4cHIgIT0gZXhwciB8fCBuZXdCb2R5ICE9IGJvZHkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRM
b29wVHlwZTo6RUxvb3BGb3I6CisgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BXaGls
ZToKKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisgICAgICAgICAg
ICAgICAgR1VBUkQobmV3Q29uZCAmJiBuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBHVUFSRCgh
bmV3SW5pdCAmJiAhbmV3RXhwcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtTG9vcChsb29wVHlwZSwgbmV3SW5pdCwgbmV3Q29u
ZCwgbmV3RXhwciwgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVy
bUJyYW5jaCAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBleHByID0gbm9kZS5nZXRFeHByZXNz
aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAgIGlmIChl
eHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpl
eHByLCBuZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUJyYW5jaChub2RlLmdldEZsb3dPcCgpLCBuZXdF
eHByKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQcmUoVEludGVy
bVN5bWJvbCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9
CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpC
b3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAm
bm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCit7
CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAg
cmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSkKK3sKKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiB7
bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2
aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwg
VmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3
aXRjaFByZShUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQcmUo
VEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFByZShUSW50ZXJtTG9v
cCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1By
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9k
ZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVS
ZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsK
K30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkK
K3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9z
dChUSW50ZXJtU3ltYm9sICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRl
cm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0
IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Qmlu
YXJ5UG9zdChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVy
biBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBvc3Qo
VEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUp
Cit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZp
c2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKQoreworICAgIHJldHVybiBub2RlOwor
fQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkKK3sK
KyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRB
Z2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiBub2Rl
OworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCgKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5v
ZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5
N2U0MGUzNTU0YjZjMDlmNjZkY2NlY2Q5YmExNWUzNDRmNTJhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgKQEAgLTAsMCArMSwzMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIgorCituYW1lc3BhY2Ug
c2gKK3sKKworLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKy8vIFRoaXMgY2xh
c3MgaXMgaW50ZW5kZWQgdG8gYmUgZGVyaXZlZCB3aXRoIG92ZXJyaWRkZW4gdmlzaXRYWFggZnVu
Y3Rpb25zLgorLy8KKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZl
IGEgVmlzaXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisvLyBleGFj
dGx5IG9uY2UsIHJlZ2FyZGxlc3Mgb2YgKHByZVZpc2l0KSBvciAocG9zdFZpc2l0KSB2YWx1ZXMu
CisKKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIg
YmVoYXZlcyBhcyBmb2xsb3dzOgorLy8gICAgKiBJZiAocHJlVmlzaXQpOgorLy8gICAgICAtIFRo
ZSBub2RlIGlzIHZpc2l0ZWQgYmVmb3JlIGNoaWxkcmVuIGFyZSB0cmF2ZXJzZWQuCisvLyAgICAg
IC0gVGhlIHJldHVybmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2Rl
LiBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisvLyAgICAgICAgYXMgdGhlIG9y
aWdpbmFsIG5vZGUuCisvLyAgICAgIC0gSWYgbXVsdGlwbGUgbm9kZXMgYXJlIHJldHVybmVkLCBj
aGlsZHJlbiBhbmQgcG9zdCB2aXNpdHMgb2YgdGhlIHJldHVybmVkIG5vZGVzIGFyZSBub3QKKy8v
ICAgICAgICBwcmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4K
Ky8vICAgICogSWYgKGNoaWxkVmlzaXQpCisvLyAgICAgIC0gSWYgYW55IG5ldyBjaGlsZHJlbiBh
cmUgcmV0dXJuZWQsIHRoZSBub2RlIGlzIGF1dG9tYXRpY2FsbHkgcmVidWlsdCB3aXRoIHRoZSBu
ZXcgY2hpbGRyZW4KKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKy8vICAgICAgLSBEZXBl
bmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIG5vZGUsIG51bGwgY2hpbGRyZW4gbWF5IGJlIGRpc2Nh
cmRlZC4KKy8vICAgICAgLSBJbGwtdHlwZWQgY2hpbGRyZW4gY2F1c2UgcmVidWlsZCBlcnJvcnMu
IElsbC10eXBlZCBtZWFucyB0aGUgbm9kZSB0byBhdXRvbWF0aWNhbGx5IHJlYnVpbGQKKy8vICAg
ICAgICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8g
aXRzIGNvbnN0cnVjdG9yLgorLy8gICAgICAtIE9ubHkgaW5zdGFuY2VzIG9mIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlIGNhbiBhY2NlcHQgTXVsdGkgcmVzdWx0cyBmb3IgYW55IG9mIGl0cyBjaGlsZHJl
bi4KKy8vICAgICAgICBJZiBzdXBwbGllZCwgdGhlIG5vZGVzIGFyZSBzcGxpY2VkIGNoaWxkcmVu
IGF0IHRoZSBzcG90IG9mIHRoZSBvcmlnaW5hbCBjaGlsZC4KKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKy8vICAgICAgLSBUaGUgbm9kZSBpcyB2aXNpdGVkIGFmdGVyIGFueSBjaGlsZHJlbiBhcmUg
dHJhdmVyc2VkLgorLy8gICAgICAtIE9ubHkgYWZ0ZXIgc3VjaCBhIHJlYnVpbGQgKG9yIGxhY2sg
dGhlcmVvZiksIHRoZSBwb3N0LXZpc2l0IGlzIHBlcmZvcm1lZC4KKy8vCisvLyBOb2RlcyBpbiB2
aXNpdCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgaW4gcGxhY2UsIGluY2x1
ZGluZyBUSW50ZXJtQWdncmVnYXRlQmFzZQorLy8gY2hpbGQgc2VxdWVuY2VzLgorLy8KKy8vIFRo
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiBhbGwgdGhlIHZpc2l0WFhYIGZ1bmN0aW9ucyBz
dXBwb3J0IGZ1bGwgcHJlIGFuZCBwb3N0IHRyYXZlcnNhbAorLy8gd2l0aG91dCBtb2RpZnlpbmcg
dGhlIHZpc2l0ZWQgbm9kZXMuCisvLworY2xhc3MgVEludGVybVJlYnVpbGQgOiBhbmdsZTo6Tm9u
Q29weWFibGUKK3sKKworICAgIGVudW0gY2xhc3MgQWN0aW9uCisgICAgeworICAgICAgICBSZXBs
YWNlU2luZ2xlLAorICAgICAgICBSZXBsYWNlTXVsdGksCisgICAgICAgIERyb3AsCisgICAgICAg
IEZhaWwsCisgICAgfTsKKworICBwdWJsaWM6CisgICAgc3RydWN0IEZhaWwKKyAgICB7fTsKKwor
ICAgIGVudW0gVmlzaXRCaXRzIDogc2l6ZV90CisgICAgeworICAgICAgICAvLyBObyBiaXRzIGFy
ZSBzZXQuCisgICAgICAgIEVtcHR5ID0gMHUsCisKKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2Yg
cmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgorICAgICAgICBDaGlsZHJlbiA9IDF1IDw8IDB1LAor
CisgICAgICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKyAgICAgICAg
UG9zdCA9IDF1IDw8IDF1LAorCisgICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZp
c2l0IGlmIHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorICAgICAgICBDaGlsZHJlblJlcXVpcmVzU2FtZSA9IDF1IDw8IDJ1LAorCisgICAgICAgIC8v
IElmIChQb3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNh
bWUgYXMgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIFBvc3RSZXF1aXJlc1NhbWUgPSAxdSA8
PCAzdSwKKworICAgICAgICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBv
c3RSZXF1aXJlc1NhbWUsCisgICAgICAgIE5laXRoZXIgICAgICA9IEVtcHR5LAorICAgICAgICBC
b3RoICAgICAgICAgPSBDaGlsZHJlbiB8IFBvc3QsCisgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJv
dGggfCBSZXF1aXJlU2FtZSwKKyAgICB9OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVT
dGFja0d1YXJkOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENvbnNM
aXN0CisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBDb25zTGlzdDxUPiAqdGFpbDsK
KyAgICB9OworCisgICAgY2xhc3MgQmFzZVJlc3VsdAorICAgIHsKKyAgICAgICAgQmFzZVJlc3Vs
dChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworICAgICAgICBCYXNlUmVzdWx0ICZvcGVy
YXRvcj0oY29uc3QgQmFzZVJlc3VsdCAmKSA9IGRlbGV0ZTsKKworICAgICAgcHVibGljOgorICAg
ICAgICBCYXNlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBC
YXNlUmVzdWx0KEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGNvbnN0
cnVjdG9yIGltcGxzCisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQobnVsbHB0cl90KTsKKyAgICAgICAgQmFz
ZVJlc3VsdChGYWlsKTsKKyAgICAgICAgQmFzZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmJm5vZGVzKTsKKworICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQg
Jm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworCisgICAgICAgIHN0
YXRpYyBCYXNlUmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBzdGF0aWMgQmFz
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vZGVzOworICAgICAgICAg
ICAgZm9yIChJdGVyIG5vZGVzQ3VyciA9IG5vZGVzQmVnaW47IG5vZGVzQ3VyciAhPSBub2Rlc0Vu
ZDsgKytub2Rlc0N1cnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVz
aF9iYWNrKCpub2Rlc0N1cnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShub2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0
OworICAgICAgICBib29sIGlzRHJvcCgpIGNvbnN0OworICAgICAgICBUSW50ZXJtTm9kZSAqc2lu
Z2xlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpt
dWx0aSgpIGNvbnN0OworCisgICAgICBwdWJsaWM6CisgICAgICAgIEFjdGlvbiBtQWN0aW9uOwor
ICAgICAgICBWaXNpdEJpdHMgbVZpc2l0OworICAgICAgICBUSW50ZXJtTm9kZSAqbVNpbmdsZTsK
KyAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworICAgIH07CisKKyAg
cHVibGljOgorICAgIGNsYXNzIFByZVJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorICAgIHsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworCisgICAgICBwdWJsaWM6Cisg
ICAgICAgIFByZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFByZVJlc3VsdChU
SW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNh
bWUpOworICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNp
dCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJf
dCk7ICAvLyBVc2VkIHRvIGRyb3AgYSBub2RlLgorICAgICAgICBQcmVSZXN1bHQoRmFpbCk7ICAg
ICAgIC8vIFVzZWQgdG8gc2lnbmFsIGZhaWx1cmUuCisKKyAgICAgICAgdm9pZCBvcGVyYXRvcj0o
UHJlUmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVsdGkoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2RlcykpOworICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBQcmVSZXN1
bHQgTXVsdGkoSXRlciBub2Rlc0JlZ2luLCBJdGVyIG5vZGVzRW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworICAgICAgICB1
c2luZyBCYXNlUmVzdWx0Ojppc0ZhaWw7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRp
OworICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisKKyAgICAgIHByaXZhdGU6Cisg
ICAgICAgIFByZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAgIH07CisKKyAgICBjbGFz
cyBQb3N0UmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBmcmllbmQg
Y2xhc3MgVEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgUG9zdFJlc3Vs
dChQb3N0UmVzdWx0ICYmb3RoZXIpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZu
b2RlKTsKKyAgICAgICAgUG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgICAgIFBv
c3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUKKyAgICAgICAgUG9z
dFJlc3VsdChGYWlsKTsgICAgICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAg
ICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQ
b3N0UmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9k
ZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAg
ICAgICBzdGF0aWMgUG9zdFJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNF
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rl
c0JlZ2luLCBub2Rlc0VuZCk7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0
Ojppc0Ryb3A7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNp
bmcgQmFzZVJlc3VsdDo6bXVsdGk7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsK
KworICAgICAgcHJpdmF0ZToKKyAgICAgICAgUG9zdFJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIp
OworICAgIH07CisKKyAgcHVibGljOgorICAgIFRJbnRlcm1SZWJ1aWxkKFRDb21waWxlciAmY29t
cGlsZXIsIGJvb2wgcHJlVmlzaXQsIGJvb2wgcG9zdFZpc2l0KTsKKworICAgIHZpcnR1YWwgflRJ
bnRlcm1SZWJ1aWxkKCk7CisKKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisgICAgLy8gcm9vdCwgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuIGJlY29tZSB0aGF0IG9mIHRo
ZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUKKyAgICAvLyBvY2N1
cnJlZC4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2Nr
ICZyb290KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1i
b2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRD
b25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJl
Y3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVh
bCBQcmVSZXN1bHQgdmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1
YWwgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIHZp
cnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7Cisg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZu
b2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNo
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNhc2Ug
Jm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5j
aCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QmxvY2tQ
cmUoVEludGVybUJsb2NrICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEFnZ3Jl
Z2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UHJlKFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICB2aXJ0
dWFsIFBvc3RSZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3Rv
dHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNz
b3JEaXJlY3RpdmUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9z
dChUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFy
eVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0
VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3Vs
dCB2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSk7CisgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUp
OworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChU
SW50ZXJtQmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0
ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8v
IENhbiBiZSB1c2VkIHRvIHJlYnVpbGQgYSBzcGVjaWZpYyBub2RlIGR1cmluZyBhIHRyYXZlcnNh
bC4gVXNlZnVsIGZvciBmaW5lIGNvbnRyb2wgb2YKKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdz
IGNoaWxkcmVuLgorICAgIEFOR0xFX05PX0RJU0NBUkQgUG9zdFJlc3VsdCByZWJ1aWxkKFRJbnRl
cm1Ob2RlICZub2RlKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBs
YWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGls
ZHJlbgorICAgIC8vIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5z
IGZhbHNlIGlmIGZhaWx1cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJl
YnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMg
dGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJu
ZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5l
dyBub2RlIGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBB
TkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsK
KworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBu
b2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJblBsYWNlKFRJ
bnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVs
b3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9u
IHRoYXQgZW5jbG9zZXMKKyAgICAvLyB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZS4gKFRoaXMg
cmV0dXJucyBudWxsIGlmIGF0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS4pCisgICAgY29u
c3QgVEZ1bmN0aW9uICpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0OworCisgICAgVEludGVybU5v
ZGUgKmdldFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCA9IDApIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29s
IHJlYnVpbGRJblBsYWNlSW1wbChOb2RlICZub2RlKTsKKworICAgIFBvc3RSZXN1bHQgdHJhdmVy
c2VBbnkoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+
CisgICAgTm9kZSAqdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4KKyAgICBib29sIHRyYXZlcnNlQW55QXMoVEludGVybU5vZGUg
Jm5vZGUsIE5vZGUgKiZvdXQpOworCisgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJbnRlcm1O
b2RlICZvcmlnaW5hbE5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUNoaWxkcmVuKE5v
ZGVUeXBlIGN1cnJOb2RlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpOworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VQb3N0
KE5vZGVUeXBlIG5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJ
bnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybU5vZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCk7CisKKyAgICBib29sIHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRl
cm1BZ2dyZWdhdGVCYXNlICZub2RlKTsKKworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5
Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VC
aW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJh
dmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1O
b2RlICp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSk7
CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlU3dpdGNoQ2hpbGRyZW4oVEludGVybVN3aXRjaCAm
bm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNl
ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxv
b3AgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKFRJbnRl
cm1CcmFuY2ggJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hp
bGRyZW4oVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVy
c2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlQWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uICZub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVENvbXBpbGVyICZtQ29t
cGlsZXI7CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAgY29uc3QgVEZ1bmN0
aW9uICptUGFyZW50RnVuYyA9IG51bGxwdHI7CisgICAgR2V0Tm9kZVR5cGUgZ2V0Tm9kZVR5cGU7
CisKKyAgcHJpdmF0ZToKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBtTm9kZVN0YWNre251
bGxwdHIsIG51bGxwdHJ9OworICAgIGJvb2wgbVByZVZpc2l0OworICAgIGJvb2wgbVBvc3RWaXNp
dDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvTm9kZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTllNWFmMmQ1YWFjY2I1Y2I5MGUyNDJkNTBkZjg0
ZWZlMDljYzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKQEAgLTAsMCArMSwxNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RF
VFlQRV9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVUWVBFX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJz
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworZW51bSBjbGFzcyBOb2RlVHlwZQoreworICAgIFVu
a25vd24sCisgICAgU3ltYm9sLAorICAgIENvbnN0YW50VW5pb24sCisgICAgRnVuY3Rpb25Qcm90
b3R5cGUsCisgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorICAgIFVuYXJ5LAorICAgIEJpbmFy
eSwKKyAgICBUZXJuYXJ5LAorICAgIFN3aXp6bGUsCisgICAgSWZFbHNlLAorICAgIFN3aXRjaCwK
KyAgICBDYXNlLAorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiwKKyAgICBBZ2dyZWdhdGUsCisgICAg
QmxvY2ssCisgICAgR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24sCisgICAgRGVjbGFyYXRpb24s
CisgICAgTG9vcCwKKyAgICBCcmFuY2gsCit9OworCisvLyBUaGlzIGlzIGEgZnVuY3Rpb24gbGlr
ZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHRoYXQgc3RhY2sgYWxsb2NhdGVzIHRoaXMg
YmVjYXVzZQorLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1
Y3QuCitjbGFzcyBHZXROb2RlVHlwZSA6IHByaXZhdGUgVEludGVybVRyYXZlcnNlcgoreworICAg
IE5vZGVUeXBlIG5vZGVUeXBlOworCisgIHB1YmxpYzoKKyAgICBHZXROb2RlVHlwZSgpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisKKyAgICBOb2RlVHlwZSBvcGVy
YXRvcigpKFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52aXNpdChWaXNp
dDo6UHJlVmlzaXQsIHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZVR5cGU7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRl
IHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9sOyB9CisKKyAgICB2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZSB7IG5vZGVUeXBlID0gTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb247IH0KKworICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlw
ZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQg
dmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAq
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6UHJlcHJvY2Vz
c29yRGlyZWN0aXZlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50
ZXJtU3dpenpsZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlw
ZTo6U3dpenpsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG5vZGVUeXBlID0gTm9kZVR5cGU6OkJpbmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopIG92ZXJyaWRl
CisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpVbmFyeTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJt
VGVybmFyeSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6
VGVybmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRJ
ZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OklmRWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXRjaDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2Fz
ZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q2FzZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OkFnZ3JlZ2F0ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCbG9jazsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
bjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXREZWNsYXJh
dGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpEZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6TG9vcDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRl
cm1CcmFuY2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
OkJyYW5jaDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVz
cGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZ
UEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdXRpbC5jcHAKaW5kZXggMzQ2NDcwZTRiMjA1M2Y0YzkyMDJkNjVjMTZmM2Ix
NDUxNjgxNTI4Yy4uNTgyZGRjNzBjOTZjMGFkYTAwMTY1YzIxY2ExZTk2NmY3OTU4NGFhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdXRpbC5jcHAKQEAgLTgwNCw2ICs4MDQsMTAgQEAgYm9vbCBJc091dHB1dE1ldGFsKFNo
U2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVU
QUxfT1VUUFVUOwogfQorYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91
dHB1dCkKK3sKKyAgICByZXR1cm4gb3V0cHV0ID09IFNIX01TTF9NRVRBTF9PVVRQVVQ7Cit9CiAK
IGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmgKaW5kZXggNTNlZTc1NTIwM2Q5Mjg4YjkyZGJiMjYwYmYyNGE1Y2FhNDFlMzE5NS4uZjlh
ZTliYjFkNmVhNDMwYTUzMDQ3MzhjMzQ3NzNmMTI3N2YxNjExNCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApAQCAt
NzcsNiArNzcsNyBAQCBib29sIElzT3V0cHV0R0xTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwog
Ym9vbCBJc091dHB1dEhMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRW
dWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRl
ck91dHB1dCBvdXRwdXQpOworYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0
IG91dHB1dCk7CiAKIGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5v
ZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQppbmRleCBhNDlkYzUyNzNmZjA2NjExN2Rl
NzIwN2Q5ZGI3YzllNjRiYWVkMjQyLi4xNTAwZmZmNDIyYzAwMGZkMWU3ZWFlZmJjMDBkMDM3MTVk
MzAyMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE5LDcgKzE5LDI1IEBAIG5hbWVzcGFjZSBhbmdsZQogCiBib29sIEdldFN5c3RlbUluZm8o
U3lzdGVtSW5mbyAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8
fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorIyAgICBpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKKyAg
ICBzdGF0aWMgYm9vbCBpc2lPU0FwcE9uTWFjID0gZmFsc2U7CisgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICBpc2lPU0Fw
cE9uTWFjID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBpc2lPU0FwcE9uTWFjXTsKKyAg
ICB9KTsKKworICAgIGlmIChpc2lPU0FwcE9uTWFjKQorICAgIHsKKyAgICAgICAgR2V0U3lzdGVt
SW5mb19pb3MoaW5mbyk7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmZvLT5pc2lPU0FwcE9uTWFjID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW5mbzsKKyAgICB9CisKKyAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CisjICAg
IGVsaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9NQUNDQVRBTFlTVCkKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CiAj
ICAgIGVsc2UKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lv
cy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX2lvcy5jcHAKaW5kZXggZTUyZWNiMzI3NWRkMjZmOTNlODM3NTY0NWQ2MGI3NDk3N2U3MTIx
ZC4uN2E5ZDlmYTI4NmIwMmU5ZjNiYjMwMTQ3ZGNlYWFmZWZkNzdhZTU5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3Mu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9faW9zLmNwcApAQCAtMTgsOSArMTgsMTYgQEAgbmFtZXNwYWNlIGFuZ2xlCiBib29sIEdl
dFN5c3RlbUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCiB7CiAgICAgewotICAgICAgICAvLyBU
T0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNpb24gYW5k
IEdQVSBpbmZvLgorICAgICAgICAvLyAgICAgICAgR1BVRGV2aWNlSW5mbyBkZXZpY2VJbmZvOwor
ICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby52ZW5kb3JJZCAgICAgID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVuZG9yICA9ICJBcHBsZSI7CisgICAg
ICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlcnNpb24gPSAiMC4wIjsKKyAgICAgICAg
Ly8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisKKyAgICAg
ICAgLy8gVE9ETyhhbmdsZWJ1Zy5jb20vNDI3NSk6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJz
aW9uLgogICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0gICAgICAg
IGluZm8tPmdwdXMuZW1wbGFjZV9iYWNrKCkudmVuZG9ySWQgPSBrVmVuZG9ySURfQXBwbGU7Cisg
ICAgICAgIC8vIGluZm8tPmdwdXMucHVzaF9iYWNrKGRldmljZUluZm8pOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0NhcHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Nh
cHMuY3BwCmluZGV4IDFkZGRkNGQ4NTQ4MzJiMmQyOWIzODBhMDQ4YmQ0YTQzNzk5MzdjM2YuLjc5
MzEwMDliMmFlYThlZTE2ZThlMGQ3ZTkzZjcxN2Y0OTU5NWY3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBz
dGF0aWMgYm9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4
dHVyZUNhcHMsCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1aXJlZEZvcm1hdHNT
aXplOyBpKyspCiAgICAgewotICAgICAgICBjb25zdCBUZXh0dXJlQ2FwcyAmY2FwID0gdGV4dHVy
ZUNhcHMuZ2V0KHJlcXVpcmVkRm9ybWF0c1tpXSk7CiAKKyAgICAgICAgY29uc3QgVGV4dHVyZUNh
cHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOwogICAgICAgICBp
ZiAocmVxdWlyZXNUZXh0dXJpbmcgJiYgIWNhcC50ZXh0dXJhYmxlKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjIsNyArNDYyLDYgQEAgc3RhdGljIGJvb2wgRGV0
ZXJtaW5lQVNUQ0xEUlRleHR1cmVTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0dXJl
Q2FwcykKICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiwg
IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSLAogICAgICAgICBHTF9D
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMngxMl9LSFIsCiAgICAgfTsKLQogICAgIHJldHVybiBHZXRGb3JtYXRT
dXBwb3J0KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBm
YWxzZSwgZmFsc2UpOwogfQogCkBAIC02MzAsMTIgKzYyOSw3IEBAIHN0YXRpYyBib29sIERldGVy
bWluZURlcHRoVGV4dHVyZUFOR0xFU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVy
ZUNhcHMpCiB7CiAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKICAg
ICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMTYsCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1f
SU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpIHx8ICFkZWZpbmVk
KEFOR0xFX0NQVV9BUk02NCkpCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSAgICAgICAgLy8g
YmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIG9uIGlPUy4KLSAgICAgICAgLy8gVE9ETyhkaW5v
KTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBjaGVjayB3aGVuIHJ1bm5pbmcg
YW4gaU9TIGFwcCBvbiBNYWMuCiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywKLSNl
bmRpZgogICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywKICAgICB9OwogCkBAIC02NDcs
MTIgKzY0MSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQo
Y29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBHTGVu
dW0gcmVxdWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAot
I2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAgICAv
LyBUT0RPKGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhf
Q09NUE9ORU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBv
biBpT1MuCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBh
IHJ1bnRpbWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAgICBH
TF9ERVBUSF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICB9OwogCiAgICAgcmV0dXJuIEdl
dEZvcm1hdFN1cHBvcnQodGV4dHVyZUNhcHMsIHJlcXVpcmVkRm9ybWF0cywgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0Rpc3BsYXkuY3BwCmluZGV4IGRkZTQzMzdiYTViN2ZjN2I0ODJlYzI3NTE4OTBiNWRi
ZjMzYTMwNDAuLjY1NzgxNGZlMDY3Mzg5NWE4MzFhNDNjZmNjZWZiNjk5ZTI1NmZjNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAg
LTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50
KCkKICAgICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX05VTExfQU5HTEU7CiAg
ICAgfQogI2VuZGlmCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfTUVUQUwpCisgICAgaWYgKGFu
Z2xlRGVmYXVsdEVudiA9PSAibWV0YWwiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9QTEFU
Rk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFOworICAgIH0KIAorI2VuZGlmCiAjaWYgZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEMTEpCiAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0QzRDExX0FOR0xFOwogI2VsaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKQEAgLTEzMjUs
NiArMTMzMSw0NyBAQCBFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChnbDo6Q29udGV4dCAqcHJl
dmlvdXNDb250ZXh0LAogICAgIHJldHVybiBOb0Vycm9yKCk7CiB9CiAKK0Vycm9yIERpc3BsYXk6
Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWdsOjpTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVnbDo6U3VyZmFjZSAqcmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIW1Jbml0aWFsaXplZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBOb0Vycm9yKCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKnBy
ZXZpb3VzQ29udGV4dCA9IHRocmVhZC0+Z2V0Q29udGV4dCgpOworICAgIGlmIChwcmV2aW91c0Nv
bnRleHQpCisgICAgeworICAgICAgICBBTkdMRV9UUlkocHJldmlvdXNDb250ZXh0LT51bk1ha2VD
dXJyZW50KHRoaXMpKTsKKyAgICB9CisKKyAgICBBTkdMRV9UUlkobUltcGxlbWVudGF0aW9uLT5t
YWtlQ3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UsIGNvbnRleHQpKTsKKwor
ICAgIGlmIChjb250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoY29u
dGV4dC0+bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlKSk7CisgICAg
fQorCisgICAgLy8gVGljayBhbGwgdGhlIHNjcmF0Y2ggYnVmZmVycyB0byBtYWtlIHN1cmUgdGhl
eSBnZXQgY2xlYW5lZCB1cCBldmVudHVhbGx5IGlmIHRoZXkgc3RvcCBiZWluZworICAgIC8vIHVz
ZWQuCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU2Ny
YXRjaEJ1ZmZlck11dGV4KTsKKworICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZz
Y2F0Y2hCdWZmZXIgOiBtU2NyYXRjaEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRj
aEJ1ZmZlciAmemVyb0ZpbGxlZEJ1ZmZlciA6IG1aZXJvRmlsbGVkQnVmZmVycykKKyAgICAgICAg
eworICAgICAgICAgICAgemVyb0ZpbGxlZEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gTm9FcnJvcigpOworfQorCiBFcnJvciBEaXNwbGF5OjpyZXN0b3JlTG9z
dERldmljZSgpCiB7CiAgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4
dFNldC5iZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKaW5kZXggNGFjNjMzNmUw
ZjNhY2IwNmVhNTk1YzU0NzVhYTk4ZTRiODZjN2U5NC4uMTZmYWYyYmY1Y2JjZDM5MjhiNTBjNWQx
Y2U1ZDA3MDRjZWE1ZTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvRGlzcGxheS5oCkBAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwg
OiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZU1hcCAmYXR0cmlicywKICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0
ICoqb3V0Q29udGV4dCk7CiAKKyAgICBFcnJvciBtYWtlQ3VycmVudChjb25zdCBUaHJlYWQgKnRo
cmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCk7CisKICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0
IGdsOjpDb250ZXh0ICpjdXJyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIEVHTGVu
dW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmli
cywKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9n
cmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCmlu
ZGV4IGZlM2VjMjg1OWJhYTc2Mjg3YjY5ZmM3Y2JmMDNmZDc5ODljNDExZGYuLmJhOTI2N2EwM2M5
Mzk2YzU3YmRlNGQ0N2QyM2M3ODEzNTgxNmMzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaApAQCAtMjc2LDYgKzI3NiwxMSBAQCBjbGFzcyBQ
cm9ncmFtU3RhdGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOwog
ICAgIH0KKyAgICB2b2lkIHNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoCisgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1F
eGVjdXRhYmxlLT5zZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKF9tTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgfQogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdM
c2l6ZWk+ICZnZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhl
Y3V0YWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1F
eGVjdXRhYmxlLmgKaW5kZXggOTUwODMyYjRlODA1MTdhZWNiMDVkZGM2YmNiZWJiODBhYzYyYjRk
Zi4uNDhmM2JkMjE3NTQwODQ3OTZkOThkNTI4MmRkYTZlNWI0ZmE4NjkzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRh
YmxlLmgKQEAgLTIyOSw2ICsyMjksMTEgQEAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGUgZmluYWwg
OiBwdWJsaWMgYW5nbGU6OlN1YmplY3QKICAgICB7CiAgICAgICAgIHJldHVybiBtTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nczsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFuc2Zvcm1G
ZWVkYmFja1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKKyAgICB7
CisgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIH0KICAgICBHTGludCBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlOyB9CiAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKaW5kZXgg
ZDRjNmFlZDZlY2MwODNjYTUzYWRlMzZhNzA1MjgzMmRmNTIzMjNmZC4uMjIzNjRiMzQyN2Y4ZGNk
Y2Y1ZDkzYWM2YTk3NmZkMmU3M2Y4ZjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAK
QEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBj
b25zdCBPU1ZlcnNpb24gJmIpCiAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBi
Lm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOwogfQogCi0jaWYgIWRlZmluZWQoQU5HTEVf
UExBVEZPUk1fQVBQTEUpCisjaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1Zl
cnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNp
b24KQEAgLTIxMyw2ICsyMTMsMTQgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB9CiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKyAgICByZXR1
cm4gT1NWZXJzaW9uKDAsIDAsIDApOworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX0xJTlVYKQogYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNp
b24sIGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVy
X3V0aWxzLmgKaW5kZXggMjYxOWJjMzRmMzM3OTAyNjJkODZhMTMzZDhhNjAzOTJjNmExZjk5MS4u
Nzg3NzJhZTJmZDEzNzY4ZDdlZjRmZDJkMjIxYzcwZjI3ODMxODdiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaApAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKICNl
bmRpZgogfQogCitpbmxpbmUgYm9vbCBJc01hYygpCit7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBib29s
IElzRnVjaHNpYSgpCiB7CiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQpAQCAt
MjA0LDYgKzIxMyw4IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0
IE9TVmVyc2lvbiAmYik7CiAKIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKIAorT1NWZXJz
aW9uIEdldGlPU1ZlcnNpb24oKTsKKwogT1NWZXJzaW9uIEdldExpbnV4T1NWZXJzaW9uKCk7CiAK
IGlubGluZSBib29sIElzQW5kcm9pZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3YTg0NWMwNzI1ZjA5NGY2MmU3Y2EzNzMyZjE1MzYxOWNlYzY1ZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQpAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBkcml2ZXJfdXRpbHNfaW9zLm1tIDogcHJvdmlkZXMgaW9zLXNwZWNpZmljIGluZm9ybWF0aW9u
IGFib3V0IGN1cnJlbnQgZHJpdmVyLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJp
dmVyX3V0aWxzLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1l
c3BhY2UgcngKK3sKKworT1NWZXJzaW9uIEdldGlPU1ZlcnNpb24oKQoreworICAgIE9TVmVyc2lv
biByZXN1bHQ7CisKKyAgICBOU09wZXJhdGluZ1N5c3RlbVZlcnNpb24gdmVyc2lvbiA9IFtbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl07CisgICAgcmVz
dWx0Lm1ham9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWFqb3JWZXJzaW9uKTsKKyAgICByZXN1bHQubWlub3JWZXJzaW9uICAgICAgICAgICAgICA9IHN0
YXRpY19jYXN0PGludD4odmVyc2lvbi5taW5vclZlcnNpb24pOworICAgIHJlc3VsdC5wYXRjaFZl
cnNpb24gICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnBhdGNoVmVyc2lv
bik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRp
bHNfbWFjLm1tCmluZGV4IDNhZjQ2ZmM4ODc4YjhiOTU1MzU1ODM5MTYzNTYzMWNhN2RkN2E2MjAu
LjliNTNlYjczNGVhZmFlYjA3MzAyYThiNjA1NzQzYmVlOGFmNjhiMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNf
bWFjLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9kcml2ZXJfdXRpbHNfbWFjLm1tCkBAIC0xMyw2ICsxMyw3IEBACiBuYW1lc3BhY2UgcngKIHsK
IAorI2lmICFUQVJHRVRfT1NfSU9TCiBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAg
ICBPU1ZlcnNpb24gcmVzdWx0OwpAQCAtMjQsNSArMjUsNSBAQCBPU1ZlcnNpb24gR2V0TWFjT1NW
ZXJzaW9uKCkKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KKyNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRM
aW5raW5nX2FwcGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjNhNmQ3YTAyZWI3ZmI0
MjMzN2RjMGU1NzRkYzZjNTU4Yzg0MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmgK
QEAgLTAsMCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0
LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorCisjaWZuZGVmIFNPRlRfTElOS0lO
R19BUFBMRV9IXworI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKwor
IyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworIyAgICBpbXBvcnQgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjICAgIGltcG9ydCA8ZGxmY24uaD4KKyMgICAgaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKworIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvbiwgbWVzc2FnZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
KGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBzdGF0aWNfY2Fz
dDx2b2lkPigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFp
bGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gPDwgIjoiIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9u
IDw8ICJcblx0ISBNZXNzYWdlOiAiIDw8IG1lc3NhZ2UpKQorCisjICAgIGlmZGVmIF9fY3BsdXNw
bHVzCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfQkVHSU4gZXh0ZXJuICJDIiB7CisjICAgICAg
ICBkZWZpbmUgRVhURVJOX0NfRU5EIH0KKyMgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIEVYVEVS
Tl9DX0JFR0lOCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5ECisjICAgIGVuZGlmCisKKyMg
ICAgZGVmaW5lIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKGZyYW1ld29yaykgZXh0ZXJuIHZv
aWQgKmZyYW1ld29yayMjTGlicmFyeSgpOworCisjICAgIGRlZmluZSBTT0ZUX0xJTktfRlJBTUVX
T1JLX1NPVVJDRShmcmFtZXdvcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHZvaWQgKmZyYW1ld29yayMjTGlicmFyeSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2UgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgdm9pZCAqZnJhbWV3
b3JrTGlicmFyeSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAi
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2Zy
YW1ld29yaywgUlRMRF9OT1cpOyBcCisgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1l
d29ya0xpYnJhcnksICJVbmFibGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsg
ICAgICBcCisgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZp
bmUgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVz
dWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhURVJOX0NfQkVHSU4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJh
dGlvbnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIEVYVEVSTl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0ZXJuIHJl
c3VsdFR5cGUgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRp
b25zOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gcmVzdWx0VHlwZSgqc29m
dExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7ICAg
ICAgICAgICAgICBcCisgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp
bmVfXykpIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwK
KyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
cmV0dXJuIHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUg
U09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0
VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlKCpzb2Z0TGluayMjZnJhbWV3
b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9ICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRl
Y2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICBzb2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgPSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgKHJlc3VsdFR5cGUoKikgcGFyYW1ldGVyRGVjbGFyYXRpb25zKWRsc3ltKGZy
YW1ld29yayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICAgICAgfSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNm
cmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19DTEFTU19I
RUFERVIoY2xhc3NOYW1lKSAgICBcCisgICAgICAgIEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMj
Q2xhc3MpKCk7IFwKKyAgICAgICAgY2xhc3NOYW1lICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5j
ZSgpOyBcCisgICAgICAgIGlubGluZSBjbGFzc05hbWUgKmFsbG9jIyNjbGFzc05hbWUjI0luc3Rh
bmNlKCkgeyByZXR1cm4gW2dldCMjY2xhc3NOYW1lIyNDbGFzcygpIGFsbG9jXTsgfQorCisjICAg
IGRlZmluZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05hbWUpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY2xhc3MgY2xhc3NOYW1lOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENsYXNzICgq
Z2V0IyNjbGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1lOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNzTmFtZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBDbGFzcyBjbGFzc05h
bWUjI0Z1bmN0aW9uKCkgeyByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgfSAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIENs
YXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2UsIF57ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbGFz
cyMjY2xhc3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1lKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNz
TmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisgICAgICAg
ICAgICAgIGdldCMjY2xhc3NOYW1lIyNDbGFzcyA9IGNsYXNzTmFtZSMjRnVuY3Rpb247ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2giKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9u
XCIiKSBzdGF0aWMgY2xhc3NOYW1lICBcCisgICAgICAgICAgICAgICAgKmFsbG9jIyNjbGFzc05h
bWUjI0luc3RhbmNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBb
Z2V0IyNjbGFzc05hbWUjI0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBf
UHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdM
RV9QTEFURk9STV9BUFBMRSkKKworI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTVjMGY2
YmFhNGY4OGRjMWIxOTUzZTM3MzljZmRhN2RmYWMzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRo
ZSBzb2Z0LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgor
CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9NQUNDQVRBTFlTVCkKKworU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMKQor
CitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xQaXhlbEZv
cm1hdE9iaiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgKm5waXgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKK1NPRlRfTElO
S19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xD
cmVhdGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9i
aiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KHBpeCwgc2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5H
TCwKKyAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENHTEVycm9yLAorICAgIChDR0xQ
aXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
IGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhfbnVtLCBhdHRyaWIsIHZhbHVl
KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xEZXN0cm95Q29udGV4dCwg
Q0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9O
X1NPVVJDRShPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhl
bEZvcm1hdE9iaiBwaXgpLCAocGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdM
LCBDR0xFcnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3Ip
KQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2
b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VS
Q0UoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2Jq
IGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4
dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgs
IHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAgICBD
R0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2Jq
IGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwK
KyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBm
b3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAor
ICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5L
X0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dM
Q29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKworU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAg
ICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAo
Q0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3Bl
cnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1
ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xSZW5kZXJlckluZm9P
YmogcmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVy
eVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xSZW5kZXJlcklu
Zm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChk
aXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2NnbC9DR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZiODcxZTRiZWM4
YWJjMGUyNzJlMjNjNGE2ZTU1NGRlZDVjMGIyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25z
LmgKQEAgLTAsMCArMSw4NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gQ0dMRnVuY3Rpb25zLmg6IEV4cG9zaW5nIHRoZSBzb2Z0LWxp
bmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8KKyNkZWZpbmUg
Q0dMX0ZVTkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKQorCisjICAgIGluY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKworIyAgICBpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJ
TktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0wpCisKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIo
T3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqICpwaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChh
dHRyaWJzLCBwaXgsIG5waXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHTENyZWF0ZUNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUGl4
ZWxGb3JtYXRPYmogcGl4LCBDR0xDb250ZXh0T2JqIHNoYXJlLCBDR0xDb250ZXh0T2JqICpjdHgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAocGl4LCBzaGFyZSwgY3R4KSkKK1NPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoCisgICAgT3BlbkdMLAorICAgIENHTERlc2NyaWJlUGl4ZWxGb3Jt
YXQsCisgICAgQ0dMRXJyb3IsCisgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgR0xpbnQgcGl4
X251bSwgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmliLCBHTGludCAqdmFsdWUpLAorICAg
IChwaXgsIHBpeF9udW0sIGF0dHJpYiwgdmFsdWUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURF
UigKKyAgICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwK
KyAgICAoQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJl
clByb3BlcnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9w
LCB2YWx1ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMRGVzdHJveUNv
bnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19G
VU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xEZXN0cm95UGl4ZWxGb3JtYXQsIENHTEVycm9yLCAo
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4KSwgKHBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVS
KE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5m
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xFcnJv
clN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09GVF9M
SU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TFF1ZXJ5UmVuZGVyZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRl
cmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGRpc3BsYXlfbWFzaywgcmVuZCwgbnJlbmQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURF
UihPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAo
Y3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29u
dGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZV
TkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFNldFZp
cnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJ
T05fSEVBREVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAg
IENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwK
KyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAg
R0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAor
ICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChj
dHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENH
TFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKwor
I2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorCisjZW5kaWYgIC8vIENHTF9GVU5DVElPTlNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvRGlzcGxheUNHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQppbmRleCBiNWE2MzFhZTQzMjFmMWFkOWI0
ODU2NmZhYTA5ZGZmZmEzOTQ2MzkxLi45MGU4MDU4ZjU4NWZhYjcxZDY1ZTI0MTk1MjA2Mjg0Zjg0
NDU1YjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCkBAIC0yOSw2ICsy
OSw4IEBACiAjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJm
YWNlQ0dMLmgiCiAjICAgIGluY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3JtTWV0aG9kcy5oIgogCisj
ICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKwog
bmFtZXNwYWNlCiB7CiAKQEAgLTE2Myw5ICsxNjUsMTAgQEAgZWdsOjpFcnJvciBEaXNwbGF5Q0dM
Ojppbml0aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRp
c3BsYXk7CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwg
Zm9yIEdldFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29u
dGFpbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1J
bmZvKCZpbmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBx
dWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICAvLyBUaGlzIGNvZGUgaW1w
bGVtZW50cyB0aGUgZWZmZWN0IG9mIHRoZQogICAgIC8vIGRpc2FibGVHUFVTd2l0Y2hpbmdTdXBw
b3J0IHdvcmthcm91bmQgaW4gRmVhdHVyZXNHTC4KQEAgLTQ0MCw3ICs0NDMsNyBAQCBlZ2w6OkVy
cm9yIERpc3BsYXlDR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlz
cGxheSkKIAogYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luZG93KSBjb25zdAogewotICAgIE5TT2JqZWN0ICpsYXllciA9IChfX2JyaWRn
ZSBOU09iamVjdCAqKXdpbmRvdzsKKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9j
YXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CiAgICAgcmV0dXJuIFtsYXllciBpc0tpbmRPZkNsYXNz
OltDQUxheWVyIGNsYXNzXV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVB
R0wubW0KaW5kZXggYTc5NTAzN2QxNDc5YTNjZjFkYmNjMjE5ZjQ5MzZkMmI1MDc3ZTcwNi4uYzU1
YWU3ZmJmM2FiNzY5MTU5ZGNlYWU2MWY4MDEzMzcyYjFkZTRlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVB
R0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2VhZ2wvRGlzcGxheUVBR0wubW0KQEAgLTI3LDYgKzI3LDggQEAKICMgICAgaW1wb3J0IDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICMgICAgaW1wb3J0IDxkbGZjbi5oPgogCisjICAgIGlt
cG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisKIG5hbWVz
cGFjZQogewogCkBAIC02NCw5ICs2NiwxMCBAQCBlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjppbml0
aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7
CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdl
dFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBp
bmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZp
bmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBB
TkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICBtQ29udGV4dCA9IFthbGxvY0VBR0xD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTM107
CiAgICAgaWYgKG1Db250ZXh0ID09IG51bGxwdHIpCkBAIC0xMTMsNiArMTE2LDcgQEAgdm9pZCBE
aXNwbGF5RUFHTDo6dGVybWluYXRlKCkKICAgICBpZiAobUNvbnRleHQgIT0gbnVsbHB0cikKICAg
ICB7CiAgICAgICAgIFtnZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmls
XTsKKyAgICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwogICAgICAgICBtQ29udGV4dCA9IG51bGxw
dHI7CiAgICAgICAgIG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CiAgICAgfQpA
QCAtMjc1LDcgKzI3OSw3IEBAIGVnbDo6RXJyb3IgRGlzcGxheUVBR0w6OnJlc3RvcmVMb3N0RGV2
aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBEaXNwbGF5RUFHTDo6aXNW
YWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdykgY29uc3QKIHsKLSAg
ICBOU09iamVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3QgKil3aW5kb3c7CisgICAgTlNP
YmplY3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAqPih3aW5kb3cpOwogICAg
IHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOwogfQogCkBAIC0z
MTEsOSArMzE1LDggQEAgdm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6
RGlzcGxheUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnMKICAgICBvdXRFeHRlbnNpb25z
LT5zdXJmYWNlbGVzc0NvbnRleHQgICAgPSB0cnVlOwogICAgIG91dEV4dGVuc2lvbnMtPmRldmlj
ZVF1ZXJ5ICAgICAgICAgICA9IHRydWU7CiAKLSAgICAvLyBDb250ZXh0cyBhcmUgdmlydHVhbGl6
ZWQgc28gdGV4dHVyZXMgYW5zIHNlbWFwaG9yZXMgY2FuIGJlIHNoYXJlZCBnbG9iYWxseQotICAg
IG91dEV4dGVuc2lvbnMtPmRpc3BsYXlUZXh0dXJlU2hhcmVHcm91cCAgID0gdHJ1ZTsKLSAgICBv
dXRFeHRlbnNpb25zLT5kaXNwbGF5U2VtYXBob3JlU2hhcmVHcm91cCA9IHRydWU7CisgICAgLy8g
Q29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFs
bHkKKyAgICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgPSB0cnVlOwog
CiAgICAgb3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWds
L0VBR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjEyNTEzMzhlZWU2
OGY3MDM0ZGM4YzY3NWFlZWZmZmNhNDE5NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9u
cy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5jdGlvbnMuaDogRXhwb3NpbmcgdGhlIHNvZnQt
bGlua2VkIEVBR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIEVBR0xfRlVOQ1RJT05TX0hfCisjZGVm
aW5lIEVBR0xfRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKwor
I2lmIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fTUFDQ0FUQUxZU1QpKSB8fCBcCisgICAgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKKworIyAgICBpbXBvcnQgPE9wZW5H
TEVTL0VBR0wuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyMgICAg
aW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoT3BlbkdMRVMpCisKK1NPRlRfTElOS19DTEFTU19IRUFERVIoRUFHTENvbnRleHQp
CisKKyNlbmRpZiAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8CisgICAgICAgIC8vIChkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCisKKyNl
bmRpZiAgLy8gQ0dMX0ZVTkNUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5tbSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xG
dW5jdGlvbnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIxZWI3MGM3NWY0ODc5ZDhjZDE4Yzg4NmRmNjllZjM5
YTIzMTg4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0KQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gRUFHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVy
ZmFjZS4KKworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgKGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkp
IHx8IFwKKyAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5l
ZChBTkdMRV9DUFVfQVJNNjQpKQorCisjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorIyAg
ICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorIyAgICBpbXBvcnQgPE9wZW5HTEVT
L0VBR0xJT1N1cmZhY2UuaD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9T
b2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX1NPVVJDRShPcGVuR0xF
UykKKworU09GVF9MSU5LX0NMQVNTKE9wZW5HTEVTLCBFQUdMQ29udGV4dCkKKworI2VuZGlmICAv
LyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKSkgfHwKKyAgICAgICAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
Q0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCmlu
ZGV4IGQ3MGFlNThhMGJmNDlmNjJkZjkyZTg1MjY5ODc3YjMwMTEyZDNmODIuLjYxNWRkNDRkMTRl
OGRiNzAyNmNiOGQ5MThmNWVjZmY5OGE4YmExYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNs
YW5nX3dyYXBwZXJfdXRpbHMuY3BwCkBAIC0yODEsMTAgKzI4MSwxMiBAQCBzdGQ6OnN0cmluZyBT
dWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmln
aW5hbFNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyAmeGZiT3V0KQogewogICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNs
TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5maW5kKGtYZmJEZWNsTWFya2VyKTsKLSAgICBj
b25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCAgID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29u
c3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworICAgIEFTU0VSVCh4ZmJEZWNsTWFya2VyU3RhcnQg
IT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyRW5k
ID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOwogCiAg
ICAgY29uc3Qgc2l6ZV90IHhmYk91dE1hcmtlclN0YXJ0ID0gb3JpZ2luYWxTb3VyY2UuZmluZChr
WGZiT3V0TWFya2VyLCB4ZmJEZWNsTWFya2VyU3RhcnQpOwotICAgIGNvbnN0IHNpemVfdCB4ZmJP
dXRNYXJrZXJFbmQgICA9IHhmYk91dE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYk91dE1h
cmtlcik7CisgICAgQVNTRVJUKHhmYk91dE1hcmtlclN0YXJ0ICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKyAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyRW5kID0geGZiT3V0TWFya2VyU3RhcnQg
KyBDb25zdFN0ckxlbihrWGZiT3V0TWFya2VyKTsKIAogICAgIC8vIFRoZSBzaGFkZXIgaXMgdGhl
IGZvbGxvd2luZyBmb3JtOgogICAgIC8vCkBAIC0zNjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0
ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0
aW9ucyAmb3B0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUlu
Zm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAqdmVydGV4U2hhZGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJs
ZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJp
YWJsZUluZm9NYXBPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCiB7CiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gJnZhcnlpbmdzID0KICAgICAgICAgcHJvZ3JhbVN0YXRl
LmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKQEAgLTQxMyw2ICs0MTYsMTAg
QEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBH
bHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgIG91dHB1dE9mZnNldCArPSBp
bmZvLmNvbHVtbkNvdW50ICogaW5mby5yb3dDb3VudCAqIHZhcnlpbmcuc2l6ZSgpOwogICAgICAg
ICB9CiAgICAgfQorICAgIGlmIChlYXJseVJldHVybikKKyAgICB7CisgICAgICAgIHhmYk91dCAr
PSAicmV0dXJuOyI7CisgICAgfQogICAgIHhmYk91dCArPSAifVxuIjsKIAogICAgICp2ZXJ0ZXhT
aGFkZXIgPSBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKCp2ZXJ0ZXhTaGFkZXIs
IHhmYkRlY2wsIHhmYk91dCk7CkBAIC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xz
bGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CiAgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwogfQogCi1zdGQ6OnN0cmluZyBHZXRYZmJCdWZmZXJO
YW1lKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4KQotewotICAgIHJldHVybiAieGZiQnVmZmVy
IiArIFN0cihidWZmZXJJbmRleCk7Ci19Ci0KIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRi
YWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9n
cmFtSW50ZXJmYWNlSW5mbywKQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQgR2xzbGFuZ0dlblRy
YW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9u
cyAmb3B0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpCiB7CiAg
ICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMob3B0aW9ucywgcHJv
Z3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hh
ZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQsIGZhbHNlKTsKIH0KIAogdm9pZCBHbHNsYW5nQXNzaWdu
TG9jYXRpb25zKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLApAQCAtMzQyOCw2
ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhjb25zdCBHbHNsYW5nU291
cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGVJbmZvTWFwT3V0KTsKIH0KIAorc3RkOjpzdHJpbmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1
aW50MzJfdCBidWZmZXJJbmRleCkKK3sKKyAgICByZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVm
ZmVySW5kZXgpOworfQorCisKK3ZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhHbHNsYW5nU291
cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UHJvZ3JhbUV4ZWN1dGFibGUgJnByb2dyYW1FeGVjdXRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50
ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZh
Y2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKK3sKKyAgICAvLyBBc3NpZ24g
b3V0cHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVyLCBpZiBhbnkuCisgICAgaWYgKChzaGFkZXJU
eXBlID09IGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCkgJiYKKyAgICAgICAgcHJvZ3JhbUV4ZWN1
dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKyAg
ICB7CisgICAgICAgIEFzc2lnbk91dHB1dExvY2F0aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6
OlNoYWRlclR5cGU6OkZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigq
dmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKTsKKyAgICB9CisK
KyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNoYWRlciwgaWYgYW55Lgor
ICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSAmJgorICAgICAg
ICBwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFnZShnbDo6U2hhZGVyVHlwZTo6
VmVydGV4KSkKKyAgICB7CisgICAgICAgIEFzc2lnbkF0dHJpYnV0ZUxvY2F0aW9ucyhwcm9ncmFt
RXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRl
eF0pOworICAgIH0KKworICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVy
U3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkNvbXB1dGUpKQorICAgIHsKKyAgICAgICAgLy8gQXNzaWdu
IHZhcnlpbmcgbG9jYXRpb25zLgorICAgICAgICBBc3NpZ25WYXJ5aW5nTG9jYXRpb25zKG9wdGlv
bnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworCisg
ICAgICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUuZ2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncygpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFuc2Zv
cm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzaWduVHJhbnNmb3JtRmVlZGJhY2tFeHRl
bnNpb25RdWFsaWZpZXJzKAorICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxlLCBwcm9n
cmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKyAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2ds
OjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFzc2lnblVu
aWZvcm1CaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJv
Z3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5m
b01hcE91dCk7CisgICAgQXNzaWduVGV4dHVyZUJpbmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVj
dXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKKyAgICBBc3NpZ25Ob25UZXh0dXJlQmlu
ZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRl
cmZhY2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBP
dXQpOworfQorCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCkBAIC0zNDYyLDcg
KzM1MTUsOCBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgR2VuZXJh
dGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoCiAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sIHZlcnRleFNvdXJj
ZSwKLSAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSk7CisgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91
dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
dHJhbnNmb3JtRmVlZGJhY2tFYXJseVJldHVybik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0
aWxzLmgKaW5kZXggMmJkMmM2MWE4NzE4NWY0MTYwYjQwZmUyNjRhMzg4YTIxYzU4ZTJkZC4uNjAy
NDhjZGJhZDc2NTk2MDE4OTA4ZmQxMzcyMDkwNzA1YTE5NWE4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91
dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFu
Z1NvdXJjZU9wdGlvbnMKICAgICBib29sIHN1cHBvcnRzVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNp
b24gPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAg
PSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBm
YWxzZTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4gICAgICAgPSBmYWxz
ZTsKIH07CiAKIHVzaW5nIFNwaXJ2QmxvYiA9IHN0ZDo6dmVjdG9yPHVpbnQzMl90PjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2Fk
X2Z1bmN0aW9uc19kYXRhLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCmluZGV4IDhjM2ZkMDU1ZDJkM2Ni
YzQ4OTc4MjJjZDRmM2JkMjQ1OTFhODdhZGMuLjdiY2RlZDA3ZDRjMjRmZjdkNWM4NjhjMDQ1ZDMw
YjNkNDFiOTJiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNv
bgpAQCAtNjcyLDYgKzY3Miw5IEBACiAgICAgIkQzMl9GTE9BVF9TOFgyNF9VSU5UIjogewogICAg
ICAgIkdMX1VOU0lHTkVEX0lOVF8yNF84IjogIkxvYWREMjRTOFRvRDMyRlM4WDI0IiwKICAgICAg
ICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKyAgICB9LAorICAgICJEMzJf
RkxPQVQiOiB7CisgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWREMjRTOFRvRDMyRiIKICAg
ICB9CiAgIH0sCiAgICJHTF9SMzJJIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4u
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRf
ZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCmluZGV4IDIwZTcwNmY3YzliYzgzNzlhMzIwNjRj
MGFmNTkzYTE5MGNkOWRlNGQuLjJlZjAxY2EzY2ZlOTA1NzhjODMwNWRiYTA0MzkxNGFmNzZjMDQ4
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfdGFibGVfYXV0
b2dlbi5jcHAKQEAgLTQ0Niw4ICs0NDYsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJF
U1NFRF9SR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fQgogICAg
IH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSygKLSAgICBHTGVudW0g
dHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfVU5PUk1fQkxPQ0soR0xlbnVtIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VG
dW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19S
OEc4QjhBOF9VTk9STQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvCi1DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19C
QzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdM
RV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5
cGUpCiAgICAgewpAQCAtMTMxMiw4ICsxMzEwLDcgQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIENP
TVBSRVNTRURfU1JHQjhfRVRDMl90b19SOEc4QjhBOF9VTk9STV9TUkdCKEdMZW51bSB0eXBlKQog
ICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lf
REVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51
bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVD
T0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQog
ewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xMzI1LDggKzEzMjIsNyBAQCBMb2FkSW1h
Z2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90
b19CQzFfUkdCX1VOT1JNXwogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBS
RVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JH
Ql9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19FVEMyX1I4RzhCOEExX1NSR0Jf
QkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTEzNTAs
OSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNI
VEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCiAgICAgfQogfQogCi1Mb2FkSW1h
Z2VGdW5jdGlvbkluZm8KLUNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NT
WV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdM
ZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hU
SFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9T
UkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0x
NTEwLDYgKzE1MDQsMTggQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0
X3RvX0QyNF9VTk9STV9YOF9VSU5UKEdMZW51bSB0eXBlKQogICAgIH0KIH0KIAorTG9hZEltYWdl
RnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1hZ2VGdW5jdGlvbkluZm8oTG9hZEQyNFM4VG9E
MzJGLCB0cnVlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICByZXR1cm4gTG9hZEltYWdlRnVuY3Rpb25JbmZvKFVucmVhY2hhYmxlTG9h
ZEZ1bmN0aW9uLCB0cnVlKTsKKyAgICB9Cit9CisKIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBU
SF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVudW0gdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpCkBAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0
TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9y
bWF0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0
X1VOT1JNX1M4X1VJTlQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDI0X1VOT1JN
X1g4X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90
b19EMjRfVU5PUk1fWDhfVUlOVDsKKyAgICAgICAgICAgICAgICBjYXNlIEZvcm1hdElEOjpEMzJf
RkxPQVQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19E
MzJfRkxPQVQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0
X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19E
MzJfRkxPQVRfUzhYMjRfVUlOVDsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JV
SUxELmduIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0JVSUxELmduCmluZGV4IDg2OGM0NzZiOTQ0NWI3ZDllOGE1YWMwNWU0YTU4N2NmMDRmNzFi
NDcuLjBkNTBkODFjZGZlNjhlNDdlOTNiNTMwZTU1MWI3ZGZlOTQ2MjFlZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlM
RC5nbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQlVJTEQuZ24KQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCgiLi4vLi4vLi4vLi4vZ25p
L2FuZ2xlLmduaSIpCiAKLWFzc2VydChpc19tYWMpCithc3NlcnQoaXNfbWFjIHx8IGlzX2lvcykK
IGFzc2VydChhbmdsZV9lbmFibGVfbWV0YWwpCiAKIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBb
CkBAIC0yMSw2ICsyMSw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJEaXNwbGF5
TXRsX2FwaS5oIiwKICAgIkZyYW1lQnVmZmVyTXRsLmgiLAogICAiRnJhbWVCdWZmZXJNdGwubW0i
LAorICAiSU9TdXJmYWNlU3VyZmFjZU10bC5oIiwKKyAgIklPU3VyZmFjZVN1cmZhY2VNdGwubW0i
LAogICAiUHJvZ3JhbU10bC5oIiwKICAgIlByb2dyYW1NdGwubW0iLAogICAiUXVlcnlNdGwuaCIs
CkBAIC01Miw2ICs1NCw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfZm9y
bWF0X3RhYmxlX2F1dG9nZW4ubW0iLAogICAibXRsX2Zvcm1hdF91dGlscy5oIiwKICAgIm10bF9m
b3JtYXRfdXRpbHMubW0iLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiLAorICAibXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tIiwKICAgIm10bF9nbHNsYW5nX3V0aWxzLmgiLAogICAibXRsX2ds
c2xhbmdfdXRpbHMubW0iLAogICAibXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgiLApAQCAtNjUs
MTIgKzY5LDExIEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfdXRpbHMuaCIs
CiAgICJtdGxfdXRpbHMubW0iLAogICAic2hhZGVycy9jb25zdGFudHMuaCIsCi0gICJzaGFkZXJz
L2Zvcm1hdF9hdXRvZ2VuLmgiLAotICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19h
dXRvZ2VuLmluYyIsCisgICJzaGFkZXJzL210bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jIgogXQogCiBjb25maWcoImFuZ2xlX21ldGFsX2JhY2tlbmRfY29uZmlnIikgewotICBkZWZp
bmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiBdCisgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFC
TEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCiAgIGxkZmxhZ3MgPSBbCiAg
ICAgIi13ZWFrX2ZyYW1ld29yayIsCiAgICAgIk1ldGFsIiwKQEAgLTk2LDEyICs5OSwxNiBAQCBh
bmdsZV9zb3VyY2Vfc2V0KCJhbmdsZV9tZXRhbF9iYWNrZW5kIikgewogICAgICIke2FuZ2xlX3Jv
b3R9OmxpYkFOR0xFX2hlYWRlcnMiLAogICBdCiAKLSAgZGVwcyA9IFsgIiR7YW5nbGVfc3BpcnZf
Y3Jvc3NfZGlyfS9nbjpzcGlydl9jcm9zc19zb3VyY2VzIiBdCisgIGRlcHMgPSBbCisgICAgIiRh
bmdsZV9zcGlydl90b29sc19kaXI6c3B2dG9vbHNfdmFsIiwKKyAgICAiJHthbmdsZV9zcGlydl9j
cm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiLAorICBdCiAKICAgb2JqY19mbGFncyA9
IFsKICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAogICAgICItV25vLXVuZ3Vh
cmRlZC1hdmFpbGFiaWxpdHkiLAogICAgICItZm5vLW9iamMtYXJjIiwKKyAgICAiLVduby1leHRy
YS1zZW1pLXN0bXQiLAogICBdCiAgIGNmbGFnc19vYmpjICs9IG9iamNfZmxhZ3MKICAgY2ZsYWdz
X29iamNjICs9IG9iamNfZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaAppbmRleCA3
NjI1NDllNGQyNzBmOWNmMjQ0ZjMzZTFmZTBiMTkwNWZhMmExMzkyLi45ZjllYzZjYmQ5YzgzMTU3
ZTMxNDc0ZTY2OGQzNTIyZjJlZDRmMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5o
CkBAIC0xNTIsMTAgKzE1MiwxNSBAQCBjbGFzcyBCdWZmZXJNdGwgOiBwdWJsaWMgQnVmZmVySW1w
bCwgcHVibGljIEJ1ZmZlckhvbGRlck10bAogCiAgICAgQ29udmVyc2lvbkJ1ZmZlck10bCAqZ2V0
VW5pZm9ybUNvbnZlcnNpb25CdWZmZXIoQ29udGV4dE10bCAqY29udGV4dCwgc2l6ZV90IG9mZnNl
dCk7CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BV
LCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGljaXRseQorICAgIC8vIGNhbGxlZC4KKyAgICB2
b2lkIG1hcmtDb252ZXJzaW9uQnVmZmVyc0RpcnR5KCk7CisKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obVN0YXRlLmdldFNpemUoKSk7IH0KIAog
ICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyQmlu
ZGluZyB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpk
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNhZ2UpOwpAQCAtMTY3LDIw
ICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBC
dWZmZXJIb2xkZXJNdGwKICAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdFNoYWRvd0NvcHkoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0U2hhZG93Q29w
eShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgc2l6ZV90IHNpemUpOwogCi0gICAgdm9pZCBt
YXJrQ29udmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOwotCiAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25C
dWZmZXJzKCk7CisKICAgICBib29sIGNsaWVudFNoYWRvd0NvcHlEYXRhTmVlZFN5bmMoQ29udGV4
dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQ
VShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKICAgICB1aW50OF90ICpzeW5jQW5kT2J0YWluU2hh
ZG93Q29weShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKIAorICAgIC8vIENvbnZlbmllbnQgbWV0
aG9kCisgICAgY29uc3QgdWludDhfdCAqZ2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93
Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKyAgICB9CiAgICAgLy8gQ2xpZW50IHNp
ZGUgc2hhZG93IGJ1ZmZlcgogICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7CiAK
ICAgICAvLyBHUFUgc2lkZSBidWZmZXJzIHBvb2wKICAgICBtdGw6OkJ1ZmZlclBvb2wgbUJ1ZmZl
clBvb2w7CiAKLSAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCBidWZmZXIgZGF0YS4KKyAgICAv
LyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KICAgICBzdGQ6OnZlY3RvcjxWZXJ0
ZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtVmVydGV4Q29udmVyc2lvbkJ1ZmZlcnM7CiAKICAgICBz
dGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENvbnZlcnNpb25CdWZm
ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwubW0KaW5kZXggNjRjN2RlOGEzMjhkNWZj
Y2E2MGI0Y2M1ZWVkMjRmYzY4YjU5NjAwNS4uODA5Njk5NmUyODhmNTk1MTMyMWViODhmZmVkN2Rh
MGQwOTkyMTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1tCkBAIC0yMyw2ICsy
MywxMCBAQCBuYW1lc3BhY2UKIC8vIFN0YXJ0IHdpdGggYSBmYWlybHkgc21hbGwgYnVmZmVyIHNp
emUuIFdlIGNhbiBpbmNyZWFzZSB0aGlzIGR5bmFtaWNhbGx5IGFzIHdlIGNvbnZlcnQgbW9yZSBk
YXRhLgogY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVudEFycmF5QnVmZmVySW5pdGlh
bFNpemUgPSAxMDI0ICogODsKIAorLy8gVGhlIG1heCBzaXplIHRoYXQgd2Ugd2lsbCB1c2UgYnVm
ZmVyIHBvb2wgZm9yIGR5bmFtaWMgdXBkYXRlLgorLy8gSWYgdGhlIGJ1ZmZlciBzaXplIGV4Y2Vl
ZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUgYnVmZmVyIGluc3RlYWQgb2YgdXNp
bmcgdGhlIHBvb2wuCitjb25zdGV4cHIgc2l6ZV90IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNp
emUgPSAxMjggKiAxMDI0OworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgogYW5nbGU6
OlJlc3VsdCBHZXRGaXJzdExhc3RJbmRpY2VzKGNvbnN0IEluZGV4VHlwZSAqaW5kaWNlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsCkBAIC0xMDUsNyAr
MTA5LDcgQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldERhdGEoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW50
ZW5kZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVz
YWdlIHVzYWdlKQogewotICAgIHJldHVybiBzZXREYXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRl
bmRlZFNpemUsIHVzYWdlKTsKKyAgICByZXR1cm4gc2V0RGF0YUltcGwoY29udGV4dCwgdGFyZ2V0
LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBCdWZmZXJN
dGw6OnNldFN1YkRhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0xNjQsNyArMTY4
LDggQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6Om1hcFJhbmdlKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogewogICAgIGlmIChhY2Nlc3MgJiBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJf
QklUKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZKHNldERhdGFJbXBsKGNvbnRleHQsIG51bGxw
dHIsIHNpemUoKSwgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgICAgQU5HTEVfVFJZKHNldERh
dGFJbXBsKGNvbnRleHQsIGdsOjpCdWZmZXJCaW5kaW5nOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwg
c2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkp
KTsKICAgICB9CiAKICAgICBpZiAobWFwUHRyKQpAQCAtMTczLDcgKzE3OCw3IEBAIGFuZ2xlOjpS
ZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgaWYgKG1CdWZmZXJQb29sLmdldE1heEJ1ZmZlcnMoKSA9PSAxKQogICAgICAgICB7CiAg
ICAgICAgICAgICAqbWFwUHRyID0gbUJ1ZmZlci0+bWFwV2l0aE9wdChjb250ZXh0TXRsLCAoYWNj
ZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hS
T05JWkVEX0JJVCkgKwogICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDsKICAgICAgICAgfQog
ICAgICAgICBlbHNlCkBAIC0zOTUsNiArNDAwLDcgQEAgdm9pZCBCdWZmZXJNdGw6OmNsZWFyQ29u
dmVyc2lvbkJ1ZmZlcnMoKQogfQogCiBhbmdsZTo6UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUlt
cGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNhZ2UpCkBAIC00MTMsNiArNDE5
LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKIAogICAgIHNpemVfdCBhZGp1c3RlZFNpemUgPSBzdGQ6Om1heDxzaXpl
X3Q+KDEsIGludGVuZGVkU2l6ZSk7CiAKKyAgICAvLyBFbnN1cmVzIG5vIHZhbGlkYXRpb24gbGF5
ZXIgaXNzdWVzIGluIHN0ZDE0MCB3aXRoIGRhdGEgdHlwZXMgbGlrZSB2ZWMzIGJlaW5nIDEyIGJ5
dGVzIHZzIDE2CisgICAgLy8gaW4gTVNMLgorICAgIGlmICh0YXJnZXQgPT0gZ2w6OkJ1ZmZlckJp
bmRpbmc6OlVuaWZvcm0pCisgICAgeworICAgICAgICBhZGp1c3RlZFNpemUgPSByb3VuZFVwUG93
MihhZGp1c3RlZFNpemUsIChzaXplX3QpMTYpOworICAgIH0KKwogICAgIHNpemVfdCBtYXhCdWZm
ZXJzOwogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewpAQCAtNDI3LDcgKzQ0MCw3IEBAIGFuZ2xl
OjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIGR5bmFtaWMgYnVmZmVyLCBhbGxv
dyB1cCB0byAxMCB1cGRhdGUgcGVyIGZyYW1lL2VuY29kaW5nIHdpdGhvdXQKICAgICAgICAgICAg
IC8vIHdhaXRpbmcgZm9yIEdQVS4KLSAgICAgICAgICAgIGlmIChhZGp1c3RlZFNpemUgPD0gbXRs
OjprU2hhcmVkTWVtQnVmZmVyTWF4QnVmU2l6ZUhpbnQpCisgICAgICAgICAgICBpZiAoYWRqdXN0
ZWRTaXplIDw9IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNpemUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgbWF4QnVmZmVycyA9IDEwOwogICAgICAgICAgICAgICAgIG1CdWZmZXJQ
b29sLnNldEFsd2F5c1VzZVNoYXJlZE1lbSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVy
TXRsLm1tCmluZGV4IGE1ODY2NzAxYmQ1ZjAyNTYyMmI2MzU0Mjc4OWQ2NDlhNzE0OTJjMGUuLjNl
MjliNGRkODExODJiODgzZThlYjJjZjA3NjRjY2JmYTkwOThlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10
bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQ29tcGlsZXJNdGwubW0KQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RW52aXJvbm1lbnRWYXJpYWJsZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTIwLDcgKzIxLDE2
IEBAIENvbXBpbGVyTXRsOjp+Q29tcGlsZXJNdGwoKSB7fQogCiBTaFNoYWRlck91dHB1dCBDb21w
aWxlck10bDo6Z2V0VHJhbnNsYXRvck91dHB1dFR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBT
SF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICBpZiAoc2g6OnJlYWRCb29sRW52VmFyKCJBTkdMRV9H
RU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJu
IEdMIG91dHB1dCBmaXJzdCwgd2UgY2FuJ3QgYWN0dWFsbHkKKyAgICAgICAgLy8gZ2V0IE1TTCBj
b2RlIHVudGlsIGxpbmsgdGltZS4gVHJhbnNsYXRpb24gdGltZSBpcyB0b28gZWFybHkKKyAgICAg
ICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVUOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gU0hfTVNMX01FVEFMX09VVFBVVDsKKyAgICB9CiB9CiAKIH0gIC8vIG5h
bWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKaW5kZXggMTY4N2M4Yzkx
NDdiZmI5N2RmN2M1YTY0NDAxMmI1ZDIyMDEzY2VkYy4uMmYzOTM3MWQ5ODMzZGExMzY5NTYzNmY4
MzQwMjAzMzBjZWFhZGNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oCkBAIC0y
OSw4ICsyOSw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsOwogY2xhc3MgVmVydGV4QXJyYXlNdGw7
CiBjbGFzcyBQcm9ncmFtTXRsOwogY2xhc3MgUmVuZGVyVGFyZ2V0TXRsOwotY2xhc3MgV2luZG93
U3VyZmFjZU10bDsKLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsOworY2xhc3MgU3VyZmFjZU10
bFByb3RvY29sOworY2xhc3MgQnVmZmVyTXRsOwogCiBjbGFzcyBDb250ZXh0TXRsIDogcHVibGlj
IENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiB7CkBAIC04NSw3ICs4NSw3IEBAIGNs
YXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3Vs
dCBkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLApAQCAtMTU3LDYg
KzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMg
bXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xpbnQgKmJhc2VWZXJ0aWNlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHTHVpbnQgKmJhc2VJbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3
Y291bnQpIG92ZXJyaWRlOworICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzU2ltcGxlVHlw
ZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAg
Ly8gRGV2aWNlIGxvc3MKICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1
cygpIG92ZXJyaWRlOwpAQCAtMTk2LDYgKzIwMiw4IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJs
aWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICBjb25zdCBnbDo6RXh0ZW5z
aW9ucyAmZ2V0TmF0aXZlRXh0ZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IGds
OjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKIAor
ICAgIGNvbnN0IFByb2dyYW1NdGwgKmdldFByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtUHJvZ3Jh
bTsgfQorCiAgICAgLy8gU2hhZGVyIGNyZWF0aW9uCiAgICAgQ29tcGlsZXJJbXBsICpjcmVhdGVD
b21waWxlcigpIG92ZXJyaWRlOwogICAgIFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBn
bDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKQEAgLTI0OSwxMiArMjU3LDI0IEBAIGNs
YXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQK
ICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJpZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIEdMYml0ZmllbGQgYmFycmllcnMpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxk
IGJhcnJpZXJzKSBvdmVycmlkZTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNo
YW5nZWQoKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKyAg
ICAgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorICAgICAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKworICAgIHZvaWQgb25F
bmRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQoCisgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICAgICAgY29uc3QgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmYnVmZmVycyk7CiAgICAgLy8g
b3ZlcnJpZGUgbXRsOjpFcnJvckhhbmRsZXIKICAgICB2b2lkIGhhbmRsZUVycm9yKEdMZW51bSBl
cnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3Ig
Kl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAog
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtMjcyLDEyICsyOTIsMTIgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIHZvaWQgb25E
cmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlck10bCAqZnJh
bWVidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
bmRlclBhc3NDaGFuZ2VkKTsKLSAgICB2b2lkIG9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpOworICAgIHZv
aWQgb25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFj
ZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKIAogICAgIC8vIEludm9rZSBieSBRdWVyeU10bAot
ICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25RdWVyeUJlZ2luKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOwotICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVu
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKLSAgICB2b2lk
IG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcXVlcnkpOworICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25RdWVyeUJlZ2FuKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIHZvaWQgb25P
Y2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAq
cXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeURlc3Ryb3llZChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9jY2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIv
YmxpdCB3aXRoIGRyYXcuCiAgICAgYm9vbCBoYXNBY3RpdmVPY2NsdXNpb25RdWVyeSgpIGNvbnN0
IHsgcmV0dXJuIG1PY2NsdXNpb25RdWVyeTsgfQpAQCAtMzY3LDcgKzM4Nyw3IEBAIGNsYXNzIENv
bnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlT3JOb25lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CiAKICAgICBhbmdsZTo6UmVzdWx0
IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LApAQCAtNDE3LDYgKzQzNywxOCBA
QCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGlj
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VD
b3VudCk7CiAKKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJp
bWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRleFN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworCisgICAgdm9p
ZCBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlIGluZGV4VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJl
ZiAmaW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBpbnN0YW5jZXMpOworCiAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSk7CiAKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KEZyYW1lYnVmZmVyTXRs
ICpmcmFtZWJ1ZmZlck10bCwKQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDog
cHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgYW5nbGU6OlJlc3Vs
dCBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0aWNlc1Blcklu
c3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHNraXBwZWRJbnN0YW5jZXMpOworICAgIGFuZ2xlOjpSZXN1bHQgaGFuZGxlRGlydHlHcmFwaGlj
c1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0VtdWxhdGlvbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5
RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0
IGhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC00
NzAsNiArNTAzLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVi
bGljIG10bDo6Q29udGV4dAogICAgICAgICBESVJUWV9CSVRfUkVOREVSX1BJUEVMSU5FLAogICAg
ICAgICBESVJUWV9CSVRfVU5JRk9STV9CVUZGRVJTX0JJTkRJTkcsCiAgICAgICAgIERJUlRZX0JJ
VF9SQVNURVJJWkVSX0RJU0NBUkQsCisgICAgICAgIERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSUywKICAgICAgICAgRElSVFlfQklUX01BWCwKICAgICB9OwogCkBAIC00ODgsNyAr
NTIyLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAogICAgICAgICB1aW50MzJfdCB4ZmJBY3RpdmVVbnBhdXNlZDsKICAgICAgICAg
dWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3OwogICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBw
YWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVy
ZS4KLSAgICAgICAgaW50MzJfdCBwYWRkaW5nWzNdOworICAgICAgICBpbnQzMl90IHBhZGRpbmdf
MFszXTsKIAogICAgICAgICBpbnQzMl90IHhmYkJ1ZmZlck9mZnNldHNbNF07CiAgICAgICAgIHVp
bnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CkBAIC01MDgsMTIgKzU0MiwxNSBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAKICAg
ICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOwogCi0gICAgICAgIGZsb2F0IHBhZGRpbmcyWzNd
OworICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKworICAgICAgICAvLyBOT1RF
OiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQg
aW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFbMl07CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCiAgICAgewotICAgICAgICB1aW50OF90IHZhbHVl
c1tzaXplb2YoZmxvYXQpICogNF07CisgICAgICAgIGZsb2F0IHZhbHVlc1s0XTsKICAgICB9Owog
CiAgICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKQEAgLTUy
Miw2ICs1NTksMTMgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVi
bGljIG10bDo6Q29udGV4dAogICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgbVJlbmRlckVu
Y29kZXI7CiAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOwogICAgIG10
bDo6Q29tcHV0ZUNvbW1hbmRFbmNvZGVyIG1Db21wdXRlRW5jb2RlcjsKKyAgICAvLyBUT0RPKGpj
dW5uaW5naGFtKToKKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJzdFZl
cnRleCB0byBiZSBwYXNzZWQgdG8KKyAgICAvLyBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVm
ZmVyT2Zmc2V0cy4gIFdlIHNob3VsZCBzd2l0Y2gKKyAgICAvLyB0byB1c2luZyBnbF9CYXNlVmVy
dGV4IC0+IGJhc2VfdmVydGV4IGluIE1TTAorICAgIEdMaW50IG1YZmJCYXNlVmVydGV4OworICAg
IC8vIENhY2hlIHRoZSBjdXJyZW50IGRyYXcgY2FsbCdzIHZlcnRleCBjb3VudCBhcyB3ZWxsIHRv
IHN1cHBvcnQgaW5zdGFuY2VkIGRyYXcgY2FsbHMKKyAgICBHTHVpbnQgbVhmYlZlcnRleENvdW50
UGVySW5zdGFuY2U7CiAKICAgICAvLyBDYWNoZWQgYmFjay1lbmQgb2JqZWN0cwogICAgIEZyYW1l
YnVmZmVyTXRsICptRHJhd0ZyYW1lYnVmZmVyID0gbnVsbHB0cjsKQEAgLTU1NCw2ICs1OTgsOCBA
QCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiAgICAgbXRsOjpCdWZmZXJQb29sIG1UcmlGYW5JbmRleEJ1ZmZlcjsKICAgICAvLyBvbmUg
YnVmZmVyIGNhbiBiZSByZXVzZWQgZm9yIGFueSBzdGFydGluZyB2ZXJ0ZXggaW4gRHJhd0FycmF5
cygpCiAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyOworICAgIC8v
CisgICAgbXRsOjpCdWZmZXJQb29sIG1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyOwogCiAgICAgLy8g
RHVtbXkgdGV4dHVyZSB0byBiZSB1c2VkIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgb25seSBwYXNz
LgogICAgIG10bDo6VGV4dHVyZVJlZiBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlOwpAQCAtNTYyLDYg
KzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBt
dGw6OkNvbnRleHQKIAogICAgIERlZmF1bHRBdHRyaWJ1dGUgbURlZmF1bHRBdHRyaWJ1dGVzW210
bDo6a01heFZlcnRleEF0dHJpYnNdOwogCisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZl
cnMuCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IEJ1ZmZlck10bCAqPiBtQ3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyczsKKwogICAgIEluY29tcGxldGVUZXh0dXJlU2V0IG1JbmNv
bXBsZXRlVGV4dHVyZXM7CiAgICAgYm9vbCBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCmluZGV4IDI3ZTY5
Nzg3MDIxZjc4ZDdiZGI3ZWQwYzgwMGVlYTVjNDEwMWE0NmYuLjMyODUwYzk4N2JkODk0MmIxNjM4
MzA5OWQ4YmRiOTdmOGY5ZjQ3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1t
CkBAIC00NCwyNSArNDQsNiBAQCBjb25zdGV4cHIgdWludDMyX3Qga01heFRyaUZhbkxpbmVMb29w
QnVmZmVyc1BlckZyYW1lID0gMDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4VHJpRmFuTGluZUxv
b3BCdWZmZXJzUGVyRnJhbWUgPSAxMDsKICNlbmRpZgogCi0jZGVmaW5lIEFOR0xFX01UTF9YRkJf
RFJBVyhEUkFXX1BST0MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIE5vcm1hbCBkcmF3
IGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAvKiBGaXJzdCBwYXNzOiB3cml0ZSB0byBYRkIgYnVmZmVycyBpbiB2ZXJ0ZXggc2hhZGVy
LCBmcmFnbWVudCBzaGFkZXIgaW5hY3RpdmUgKi8gICBcCi0gICAgICAgIERSQVdfUFJPQyh0cnVl
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAvKiBTZWNvbmQg
cGFzczogZnVsbCByYXN0ZXJpemF0aW9uOiB2ZXJ0ZXggc2hhZGVyICsgZnJhZ21lbnQgc2hhZGVy
IGFyZSBhY3RpdmUuIFwKLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRvIHN0
YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAotICAg
ICAgICAgICAgaW52YWxpZGF0ZVJlbmRlclBpcGVsaW5lKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBEUkFXX1BST0Mo
ZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0KLQogYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29u
dGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCkBAIC04NCwxMSAr
NjUsMTEgQEAgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2wo
Q29udGV4dE10bCAqY29udGV4dCwKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQWxsb2NhdGVMaW5lTG9vcEJ1ZmZlckZyb21Qb29sKENvbnRl
eHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTHNpemVpIGluZGljZXNUb1Jlc2VydmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
Km9mZnNldE91dCkKK2FuZ2xlOjpSZXN1bHQgQWxsb2NhdGVCdWZmZXJGcm9tUG9vbChDb250ZXh0
TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgaW5kaWNlc1RvUmVzZXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCAqb2Zmc2V0T3V0KQogewogICAgIHNpemVfdCBvZmZzZXQ7
CiAgICAgcG9vbC0+cmVsZWFzZUluRmxpZ2h0QnVmZmVycyhjb250ZXh0KTsKQEAgLTEwNSwxMiAr
ODYsNyBAQCBib29sIE5lZWRUb0ludmVydERlcHRoUmFuZ2UoZmxvYXQgbmVhciwgZmxvYXQgZmFy
KQogICAgIHJldHVybiBuZWFyID4gZmFyOwogfQogCi1ib29sIElzVHJhbnNmb3JtRmVlZGJhY2tP
bmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKLXsKLSAgICByZXR1cm4gZ2xTdGF0ZS5pc1Ry
YW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSAmJiBnbFN0YXRlLmlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCk7Ci19Ci0KLXN0ZDo6c3RyaW5nIENvbnZlcnRNYXJrZXJUb1N0cmluZyhH
THNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorc3RkOjpzdHJpbmcgQ29udmVydE1h
cmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCiB7CiAgICAgc3Rk
OjpzdHJpbmcgY3BwU3RyaW5nOwogICAgIGlmIChsZW5ndGggPT0gMCkKQEAgLTE3Myw3ICsxNDks
NyBAQCBjbGFzcyBMaW5lTG9vcExhc3RTZWdtZW50SGVscGVyCiAgICAgICAgICAgICAgICAgICAg
IHtpbmRleFR5cGVPck5vbmUsIHZlcnRleE9ySW5kZXhDb3VudCwgaW5kaWNlcywgbUxpbmVMb29w
SW5kZXhCdWZmZXIsIDB9KSk7CiAgICAgICAgIH0KIAotICAgICAgICBBTkdMRV9UUlkoaW5kZXhC
dWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwpKTsKKyAgICAgICAgQU5HTEVfVFJZKGluZGV4
QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRsLCBmYWxzZSkpOwogCiAgICAgICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9CkBAIC0xOTEsNyArMTY3LDggQEAgQ29u
dGV4dE10bDo6Q29udGV4dE10bChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLCBnbDo6RXJyb3JTZXQg
KmVycm9yU2V0LCBEaXNwbGF5TXQKICAgICAgIG1DbWRCdWZmZXIoJmRpc3BsYXktPmNtZFF1ZXVl
KCkpLAogICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZmZXIsIG1PY2NsdXNpb25RdWVyeVBv
b2wpLAogICAgICAgbUJsaXRFbmNvZGVyKCZtQ21kQnVmZmVyKSwKLSAgICAgIG1Db21wdXRlRW5j
b2RlcigmbUNtZEJ1ZmZlcikKKyAgICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlciksCisg
ICAgICBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5jZSgwKQoge30KIAogQ29udGV4dE10bDo6fkNv
bnRleHRNdGwoKSB7fQpAQCAtMjA4LDYgKzE4NSw4IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10
bDo6aW5pdGlhbGl6ZSgpCiAgICAgbUxpbmVMb29wTGFzdFNlZ21lbnRJbmRleEJ1ZmZlci5pbml0
aWFsaXplKHRoaXMsIDIgKiBzaXplb2YodWludDMyX3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRy
aUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKKyAgICBtUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
ci5pbml0aWFsaXplKHRoaXMsIDAsIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVMb29w
QnVmZmVyc1BlckZyYW1lKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KQEAgLTIyNywyMyArMjA2LDIwIEBAIHZvaWQgQ29udGV4dE10bDo6b25EZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmVuc3Vy
ZUluY29tcGxldGVUZXh0dXJlc0NyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7
Ci0gICAgaWYgKEFOR0xFX0xJS0VMWShtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0ge2ds
OjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVyZVR5cGU6Ol8zRCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlw
ZTo6XzJEQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6OkN1YmVNYXB9OwotICAgIGZvciAoZ2w6OlRl
eHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisgICAgaWYgKEFOR0xF
X1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQogICAgIHsKLSAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0gICAgICAgIEFOR0xFX1RSWShtSW5jb21wbGV0ZVRl
eHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0
ZXh0dXJlKSk7Ci0KLSAgICAgICAgVGV4dHVyZU10bCAqdGV4dHVyZU10bCAgICAgICAgICAgICAg
ICAgICAgICA9IG10bDo6R2V0SW1wbCh0ZXh0dXJlKTsKLSAgICAgICAgdGV4dHVyZU10bC0+Z2V0
TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1cmUiOworICAg
ICAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0g
eworICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJE
QXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAorICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpDdWJlTWFwfTsKKyAgICAgICAgZm9yIChhdXRvIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJl
VHlwZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAg
ICAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKHRleHR1cmUpOworICAgICAgICAgICAgQU5H
TEVfVFJZKAorICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMuZ2V0SW5jb21wbGV0
ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUpKTsKKyAgICAgICAg
fQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0K
LSAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC0yODIsNyArMjU4LDE3IEBAIGFuZ2xl
OjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c1dpdGhCYXNlVmVydGV4KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250CiAgICAgICAgICAgICB0aGlzLCB7MCwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGNvdW50KSwgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyLCAwfSkpOwogICAgIH0KIAot
ICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkK
KyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2
ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlKSk7CisgICAgICAgIC8vIERyYXcgd2l0aCB0aGUgemVybyBzdGFydGluZyBpbmRleCBi
dWZmZXIsIHNoaWZ0IHRoZSB2ZXJ0ZXggaW5kZXggdXNpbmcgYmFzZVZlcnRleAorICAgICAgICAv
LyBpbnN0YW5jZWQgZHJhdzoKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0
YW5jZWRCYXNlVmVydGV4KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TVRMSW5kZXhUeXBlVUludDMyLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpbnN0YW5jZXMs
IGZpcnN0KTsKKyAgICB9CiAKICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKQEAgLTMxMSwxNiArMjk3LDIzIEBAIGFu
Z2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgdGhpcywge3N0YXRpY19jYXN0PHVpbnQzMl90Pihm
aXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAgIEFOR0xFX1RSWShtVHJpRmFu
SW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVm
ZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOwogCi0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKyAgICBpZiAobVN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKHNl
dHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsKIAorICAgICAgICBleGVjRHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworICAgIH0KICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9pZCAqPigwKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7CiAKLSAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGlj
ZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0KTsKKyAgICBleGVjRHJhd0luZGV4
ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1U
TEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0zNjgsMjIgKzM2MSwyNyBAQCBhbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEFycmF5cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAgICAgdWludDMyX3QgZ2VuSW5k
aWNlc0NvdW50ID0gY291bnQgKyAxOwogCi0gICAgQU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BC
dWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhC
dWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICBBTkdMRV9UUlkoQWxsb2NhdGVCdWZm
ZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwg
JmdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2Vu
SWR4QnVmZmVyT2Zmc2V0KSk7CiAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMo
KS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cygKICAgICAgICAgdGhpcywge3N0YXRp
Y19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdl
bklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAg
IEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgIEFOR0xF
X1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcywgZmFsc2UpKTsKIAotICAgIEFT
U0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7Cisg
ICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7
CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6
OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUp
KTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxp
bmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwg
aW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6
UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxs
cHRyLCBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQo
TVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zdGFuY2VzKTsKKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJp
bWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVy
T2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQpAQCAtNDEzLDIxICs0MTEsMzMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3
QXJyYXlzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIE1UTFByaW1pdGl2
ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKIAotI2RlZmluZSBE
UkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFOR0xFX1RSWShzZXR1cERy
YXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsIGdsOjpEcmF3RWxlbWVu
dHNUeXBlOjpJbnZhbGlkRW51bSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwg
eGZiUGFzcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAvKiBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUs
IGZpcnN0LCBjb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VDb3VudCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQs
IG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOwor
CisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gbm9ybWFsIGRyYXdBcnJheXMoKQorICAgICAgICAg
ICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291bnQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQo
bXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICAgICAgfQogICAgIH0K
KyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgQU5HTEVfTVRMX1hGQl9EUkFXKERS
QVdfR0VORVJJQ19BUlJBWSkKKyAgICBpZiAoaW5zdGFuY2VzID09IDApCisgICAgeworICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpCisgICAg
ICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcobXRsVHlwZSwgZmlyc3QsIGNvdW50KTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9CkBAIC00ODAsMTYgKzQ5MCwyNSBAQCBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmRyYXdUcmlGYW5FbGVtZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4
QnVmZmVyT2Zmc2V0LCAmZ2VuSW5kaWNlc0NvdW50KSk7CiAKICAgICAgICAgQU5HTEVfVFJZKGdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5KAotICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0pKTsKKyAgICAgICAgICAg
IHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkp
OworCisgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZh
bHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5w
YXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250
ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIDAsIGNvdW50LCBpbnN0YW5jZXMs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIHRydWUpKTsK
IAotICAgICAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7Cisg
ICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwg
aW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29u
dGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2Vz
LCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIGZhbHNlKSk7CiAK
LSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZl
VHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5J
ZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmlt
aXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZm
ZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogICAgIH0gIC8vIGlmIChjb3VudCA+IDMpCkBAIC01MzIsMjcgKzU1MSw4NyBAQCBh
bmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEVsZW1lbnRzKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAg
ICAgICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50ICogMjsKICAgICAgICAgdWlu
dDMyX3QgZ2VuSW5kaWNlc0NvdW50OwotICAgICAgICBBTkdMRV9UUlkoQWxsb2NhdGVMaW5lTG9v
cEJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICAgICAgQU5HTEVfVFJZKEFs
bG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2VzLCAmbUxpbmVMb29wSW5k
ZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5J
ZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKIAogICAgICAgICBBTkdMRV9UUlkoZ2V0
RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tRWxlbWVudHNB
cnJheSgKICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAogICAgICAgICAgICAg
JmdlbkluZGljZXNDb3VudCkpOwogCi0gICAgICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1
ZmZlci5jb21taXQodGhpcykpOworICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZm
ZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVf
VFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNv
dW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGljZXMsIHRydWUpKTsKKworICAgICAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1U
TFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUlu
dDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwg
Z2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworICAgICAgICB9CiAKICAgICAgICAgQU5H
TEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAs
IGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
aWNlcywgZmFsc2UpKTsKIAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwg
Z2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhl
ZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1U
TEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9ICAvLyBpZiAoY291bnQgPj0gMikKICAg
ICByZXR1cm4gZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2Rl
OjpMaW5lcywgY291bnQsIHR5cGUsIGluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnN0YW5jZXMpOwogfQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxl
bWVudHNTaW1wbGVUeXBlc1ByaW1pdGl2ZVJlc3RhcnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpCit7CisKKyAgICBt
dGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7CisgICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zm
c2V0OworICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50OworICAgIHNpemVfdCBn
ZW5JbmRpY2VzQ291bnQ7CisgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhp
cywgcmVzZXJ2ZWRJbmRpY2VzLCAmbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIsICZnZW5JZHhCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9m
ZnNldCkpOworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgZ2w6OlByaW1p
dGl2ZU1vZGU6OlBvaW50czoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdl
dFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorICAgICAgICAg
ICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhC
dWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5l
czoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoCisgICAgICAgICAgICAgICAgdGhpcywge3R5
cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1
ZX0sCisgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlczoKKyAgICAgICAg
ICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3Vu
dCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAg
ICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0KKyAgICBBTkdMRV9UUlkobVByaW1pdGl2
ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5
cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShz
ZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
IHRydWUpKTsKKworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgKHVp
bnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGlu
c3RhbmNlcyk7CisgICAgfQorICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwg
MCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2UpKTsKKworICAgIGV4ZWNE
cmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2VuSW5kaWNlc0NvdW50LCBN
VExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworCisgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdF
bGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKQEAgLTU2
Myw3ICs2NDIsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgLy8gUmVhbCBpbnN0YW5jZXMgY291
bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCiAgICAgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsKLQogICAgIGlmIChtQ3Vs
bEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNTc3LDE4ICs2NTUsMzkgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgcmV0dXJuIGRyYXdMaW5lTG9vcEVsZW1lbnRzKGNv
bnRleHQsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbnN0YW5jZUNvdW50KTsKICAgICB9Ci0KICAg
ICBtdGw6OkJ1ZmZlclJlZiBpZHhCdWZmZXI7CiAgICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCAg
ICAgICAgICAgICA9IDA7CiAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVkVHlwZSA9
IHR5cGU7CisgICAgc2l6ZV90IGNvbnZlcnRlZENvdW50ICAgICAgICAgICAgICA9IChzaXplX3Qp
Y291bnQ7CiAKLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250
ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVydGVkT2Zmc2V0LCAmY29udmVydGVkVHlw
ZSkpOworICAgIEFOR0xFX1RSWShtVmVydGV4QXJyYXktPmdldEluZGV4QnVmZmVyKGNvbnRleHQs
IHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCAmaWR4QnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQsICZjb252ZXJ0ZWRU
eXBlLCAmY29udmVydGVkQ291bnQpKTsKIAogICAgIEFTU0VSVChpZHhCdWZmZXIpOwogICAgIEFT
U0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQp
ID09IDApOworICAgIHVpbnQzMl90IGNvbnZlcnRlZENvdW50aTMyID0gKHVpbnQzMl90KWNvbnZl
cnRlZENvdW50OworICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1
c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIHRydWUpKTsK
KyAgICAgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBl
KG1vZGUpOwogCi0gICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb3Vu
dCwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBmYWxzZSkpOworICAgICAgICBNVExJbmRleFR5
cGUgbXRsSWR4VHlwZSA9IG10bDo6R2V0SW5kZXhUeXBlKGNvbnZlcnRlZFR5cGUpOworCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm9ybWFs
IGRyYXcKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNv
bnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKyAgICAg
ICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkz
MiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnZlcnRlZE9mZnNldCwgaW5zdGFuY2VDb3VudCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENv
dW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CiAKICAgICBNVExQcmlt
aXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CiAKQEAgLTU5
NywxMyArNjk2LDE0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICBpZiAoaW5zdGFuY2VzID09IDApCiAg
ICAgewogICAgICAgICAvLyBOb3JtYWwgZHJhdwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5kZXhlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRP
ZmZzZXQpOworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252
ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewogICAgICAgICAvLyBJbnN0YW5jZWQgZHJhdwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBj
b252ZXJ0ZWRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc3RhbmNlQ291bnQpOworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRs
VHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVk
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNjI1LDcg
KzcyNSw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzQmFzZVZlcnRl
eChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCiB7
Ci0gICAgLy8gTk9URShocWxlKTogRVMgMy4yCiAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQpAQCAtNjQ5LDEwICs3NDgsOSBAQCBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNlVmVydGV4KQogewotICAgIC8vIE5PVEUoaHFs
ZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6U3RvcDsKIH0KQEAgLTY2OSw3ICs3NjcsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhCYXNlSW5zdGFuY2UoY29uc3QgZ2w6Ogog
ICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0K
LQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3UmFuZ2VFbGVtZW50cyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LApAQCAtNjkwLDcgKzc4Nyw2IEBAIGFuZ2xl
OjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkKIHsK
LSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CkBAIC03MTMsNiArODA5LDY0IEBAIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW5kaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CiAKK3ZvaWQgQ29u
dGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNl
cykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJ
bnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5zdGFuY2VkKHByaW1pdGl2ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0ZXhDb3VudCwgaW5zdGFu
Y2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJh
dyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQpOworICAgICAgICBmb3Ig
KHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2luc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5lbXVsYXRlZEluc3RhbmNlSUQgPSBpbnN0Owor
CisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3Jt
cywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworCisgICAgICAgICAgICBtVmVy
dGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7
CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcocHJpbWl0aXZlVHlwZSwgdmVydGV4
U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCBpbnN0YW5j
ZSBJRCB0byB6ZXJvCisgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0
ZXAoJm1SZW5kZXJFbmNvZGVyLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dE10bDo6ZXhl
Y0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5
cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBp
ZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3
LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3Rh
bmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJPZmZzZXQs
IGluc3RhbmNlcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUsIGluZGV4Q291bnQsIGluZGV4VHlwZSwgaW5k
ZXhCdWZmZXIsIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIGZvciAodWludDMyX3QgaW5zdCA9IDE7
IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgbURyaXZl
clVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisKKyAgICAgICAgICAgIG1SZW5k
ZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlm
b3Jtc0JpbmRpbmdJbmRleCk7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUlu
c3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCBpbnN0KTsKKworICAgICAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhU
eXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlck9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQg
dG8gemVybworICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZt
UmVuZGVyRW5jb2RlciwgMCk7CisgICAgfQorfQorCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
Om11bHRpRHJhd0FycmF5cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGludCAqZmly
c3RzLApAQCAtODAyLDE1ICs5NTYsMTUgQEAgc3RkOjpzdHJpbmcgQ29udGV4dE10bDo6Z2V0UmVu
ZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiAvLyBFWFRfZGVidWdfbWFya2VyCiBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBj
aGFyICptYXJrZXIpCiB7CisgICAgbUNtZEJ1ZmZlci5pbnNlcnREZWJ1Z1NpZ24oQ29udmVydE1h
cmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihH
THNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQogewotICAgIG1DbWRCdWZmZXIucHVz
aERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvU3RyaW5nKGxlbmd0aCwgbWFya2VyKSk7CisgICAg
bUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJr
ZXIpKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9Ci0KIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6cG9wR3JvdXBNYXJrZXIoKQogewogICAgIG1DbWRCdWZmZXIucG9w
RGVidWdHcm91cCgpOwpAQCAtMTE1NSwxMCArMTMwOSwxMiBAQCBRdWVyeUltcGwgKkNvbnRleHRN
dGw6OmNyZWF0ZVF1ZXJ5KGdsOjpRdWVyeVR5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gbmV3IFF1
ZXJ5TXRsKHR5cGUpOwogfQorCiBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRlRmVuY2VO
VigpCiB7CiAgICAgcmV0dXJuIG5ldyBGZW5jZU5WTXRsKCk7CiB9CisKIFN5bmNJbXBsICpDb250
ZXh0TXRsOjpjcmVhdGVTeW5jKCkKIHsKICAgICByZXR1cm4gbmV3IFN5bmNNdGwoKTsKQEAgLTEy
MDUsNiArMTM2MSw2OSBAQCBPdmVybGF5SW1wbCAqQ29udGV4dE10bDo6Y3JlYXRlT3ZlcmxheShj
b25zdCBnbDo6T3ZlcmxheVN0YXRlICZzdGF0ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
dm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
cygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1EaXJ0eUJpdHMuc2V0KERJUlRZ
X0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyk7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChnZXRE
aXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQp
CisgICAgeworICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKyAgICB9Cit9CisK
K2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25CZWdpblRyYW5zZm9ybUZlZWRiYWNrKAorICAg
IHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIG9uVHJhbnNmb3JtRmVlZGJh
Y2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAgICB7CisgICAgICAgIGlm
IChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycy5jb3VudChidWZmZXJzW2J1ZmZlcklu
ZGV4XSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5kRW5jb2RpbmcobVJlbmRlckVu
Y29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwb3B1
bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KGJ1ZmZlckNvdW50LCBidWZmZXJzKTsKKwor
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKwordm9pZCBDb250ZXh0TXRs
Ojpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KAorICAgIHNpemVfdCBidWZmZXJD
b3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVy
TXRsICo+ICZidWZmZXJzKQoreworICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAgICB7CisgICAgICAgIG1D
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4
XSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2so
KQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9y
bUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBvblRyYW5zZm9ybUZlZWRiYWNrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgfQorfQorCithbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVy
ZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG9u
VHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRpc3Bh
dGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBudW1Hcm91cHNYLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG51bUdyb3Vwc1ksCkBAIC0xMzMx
LDYgKzE1NTAsMTEgQEAgY29uc3QgbXRsOjpGb3JtYXQgJkNvbnRleHRNdGw6OmdldFBpeGVsRm9y
bWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkKSBjb24KICAgICByZXR1cm4gZ2V0RGlz
cGxheSgpLT5nZXRQaXhlbEZvcm1hdChhbmdsZUZvcm1hdElkKTsKIH0KIAorY29uc3QgbXRsOjpG
b3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRpdmVGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
IG10bEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKG10bEZvcm1hdCk7Cit9CisKIC8vIFNlZSBtdGw6OkZvcm1hdFRhYmxlOjpnZXRW
ZXJ0ZXhGb3JtYXQoKQogY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJkNvbnRleHRNdGw6OmdldFZl
cnRleEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQgYW5nbGVGb3JtYXRJZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2Vk
KSBjb25zdApAQCAtMTMzOCwxMSArMTU2Miw2IEBAIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZD
b250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQoYW5nbGU6OkZvcm1hdElEIGFuZ2xlRm9ybWF0CiAg
ICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVydGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRp
Z2h0bHlQYWNrZWQpOwogfQogCi1jb25zdCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6Omdl
dE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAotewotICAg
IHJldHVybiBnZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMobXRsRm9ybWF0KTsKLX0K
LQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpnZXRJbmNvbXBsZXRlVGV4dHVyZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICoqdGV4dHVyZU91dCkKQEAgLTEz
NjIsNiArMTU4MSwyMiBAQCB2b2lkIENvbnRleHRNdGw6OmVuZFJlbmRlckVuY29kaW5nKG10bDo6
UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIpCiAKICAgICAvLyBSZXNvbHZlIHZpc2liaWxp
dHkgcmVzdWx0cwogICAgIG1PY2NsdXNpb25RdWVyeVBvb2wucmVzb2x2ZVZpc2liaWxpdHlSZXN1
bHRzKHRoaXMpOworCisgICAgbUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIo
KTsKKworICAgIC8vIFJlc2V0IHNlcmlhbHMgZm9yIFhGQiBpZiBhY3RpdmUuCisgICAgaWYgKG1T
dGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9n
cmFtRXhlY3V0YWJsZSgpOworICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisgICAgICAgIHNp
emVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQoKTsKKworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVl
ZGJhY2tNdGwgPQorICAgICAgICAgICAgbXRsOjpHZXRJbXBsKG1TdGF0ZS5nZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSk7CisKKyAgICAgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja010bC0+Z2V0QnVmZmVySGFuZGxlcygpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5k
ZXJQYXNzQ29udGVudCkKQEAgLTEzOTAsNyArMTYyNSw3IEBAIHZvaWQgQ29udGV4dE10bDo6ZW5k
RW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkKIAogdm9pZCBDb250ZXh0
TXRsOjpmbHVzaENvbW1hbmRCdWZlcigpCiB7Ci0gICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkp
CisgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTQ1NCw2ICsxNjg5LDI3IEBAIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKkNv
bnRleHRNdGw6OmdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rlcihjb25zdCBtdGw6OlJlCiAgICAg
Ly8gTmVlZCB0byByZS1hcHBseSBldmVyeXRoaW5nIG9uIG5leHQgZHJhdyBjYWxsLgogICAgIG1E
aXJ0eUJpdHMuc2V0KCk7CiAKKyAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZ2V0RGlz
cGxheSgpLT5nZXRNZXRhbERldmljZSgpOworICAgIGlmIChtdGw6OkRldmljZUhhc01heGltdW1S
ZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkKKyAgICB7CisgICAgICAgIE1UTFJlbmRlclBh
c3NEZXNjcmlwdG9yICpvYmpDRGVzYyA9IFtNVExSZW5kZXJQYXNzRGVzY3JpcHRvciByZW5kZXJQ
YXNzRGVzY3JpcHRvcl07CisgICAgICAgIGRlc2MuY29udmVydFRvTWV0YWxEZXNjKG9iakNEZXNj
KTsKKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXplID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRT
aXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAgIE5TVUludGVnZXIgcmVu
ZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJl
bmRlclBhc3NEZXNjcmlwdG9yKG9iakNEZXNjLCB0aGlzLCBtZXRhbERldmljZSk7CisgICAgICAg
IGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
TlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRl
cyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJwaXhl
bCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0cyAlbHUgYnl0ZXMuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylyZW5kZXJUYXJn
ZXRTaXplLCAodW5zaWduZWQgbG9uZyltYXhTaXplXTsKKyAgICAgICAgICAgIE5TRXJyb3IgKmVy
ciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25FcnJvciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTotMQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6
ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisgICAgICAgICAgICB0aGlzLT5oYW5k
bGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19MSU5FX18pOworICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gJm1SZW5kZXJF
bmNvZGVyLnJlc3RhcnQoZGVzYyk7CiB9CiAKQEAgLTE0NjcsMTEgKzE3MjMsMTIgQEAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0VGV4dHVyZVJlbmRlckNvbW1hbmRF
bmNvZGVyKAogCiAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyBycERlc2M7CiAKLSAgICBycERlc2Mu
Y29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0OwotICAgIHJw
RGVzYy5jb2xvckF0dGFjaG1lbnRzWzBdLmxldmVsICAgICAgICA9IGluZGV4LmdldE5hdGl2ZUxl
dmVsKCk7Ci0gICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0uc2xpY2VPckRlcHRoID0gaW5k
ZXguaGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7Ci0gICAgcnBEZXNjLm51
bUNvbG9yQXR0YWNobWVudHMgICAgICAgICAgICAgID0gMTsKLSAgICBycERlc2Muc2FtcGxlQ291
bnQgICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgICAg
cnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4dHVy
ZVRhcmdldDsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5yZW5kZXJUYXJnZXQtPmxl
dmVsICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworICAgIHJwRGVzYy5jb2xvckF0dGFjaG1l
bnRzWzBdLnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0KKyAgICAgICAgaW5kZXguaGFzTGF5
ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgcnBEZXNjLm51bUNvbG9yQXR0
YWNobWVudHMgPSAxOworICAgIHJwRGVzYy5zYW1wbGVDb3VudCAgICAgICAgID0gdGV4dHVyZVRh
cmdldC0+c2FtcGxlcygpOwogCiAgICAgcmV0dXJuIGdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rl
cihycERlc2MpOwogfQpAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBtdGw6OkNvbXB1dGVDb21tYW5k
RW5jb2RlciAqQ29udGV4dE10bDo6Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCkKIAogdm9pZCBD
b250ZXh0TXRsOjplbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKQogewotICAgIGlmICghbUNtZEJ1
ZmZlci5yZWFkeSgpKQorICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgpKQogICAgIHsKICAgICAg
ICAgbUNtZEJ1ZmZlci5yZXN0YXJ0KCk7CiAgICAgfQogCi0gICAgQVNTRVJUKG1DbWRCdWZmZXIu
cmVhZHkoKSk7CisgICAgQVNTRVJUKG1DbWRCdWZmZXIudmFsaWQoKSk7CiB9CiAKIHZvaWQgQ29u
dGV4dE10bDo6dXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLApA
QCAtMTY3Nyw3ICsxOTM0LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbkRyYXdGcmFtZUJ1ZmZlckNo
YW5nZWRTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKLXZvaWQg
Q29udGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcikKK3ZvaWQgQ29udGV4dE10bDo6b25CYWNr
YnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3Rv
Y29sICpiYWNrYnVmZmVyKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICA9IGdl
dFN0YXRlKCk7CiAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpHZXRJbXBs
KGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwpAQCAtMTY4NiwxMCArMTk0MywxMyBAQCB2
b2lkIENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFdpbmRvd1N1cmZhY2VNdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgdXBk
YXRlVmlld3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5n
ZXROZWFyUGxhbmUoKSwKKyAgICAgICAgICAgICAgICAgICBnbFN0YXRlLmdldEZhclBsYW5lKCkp
OworICAgIHVwZGF0ZVNjaXNzb3IoZ2xTdGF0ZSk7CiAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFu
Z2VkU3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOwogfQogCi1hbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvbk9jY2x1
c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSkKIHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOwogICAgIG1PY2Ns
dXNpb25RdWVyeSA9IHF1ZXJ5OwpAQCAtMTcwNiw3ICsxOTY2LDcgQEAgYW5nbGU6OlJlc3VsdCBD
b250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXIKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLXZvaWQg
Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgUXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5k
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBB
U1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KTsKIApAQCAtMTcxOCw3ICsxOTc4LDcgQEAg
dm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LCBRdWVyeU10bCAqcXVlcnkKIAogICAgIG1PY2NsdXNpb25RdWVyeSA9IG51bGxwdHI7
CiB9Ci12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCit2b2lkIENvbnRleHRNdGw6Om9uT2Nj
bHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRs
ICpxdWVyeSkKIHsKICAgICBpZiAocXVlcnktPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRz
KCkuZW1wdHkoKSkKICAgICB7CkBAIC0xNzI2LDcgKzE5ODYsNyBAQCB2b2lkIENvbnRleHRNdGw6
Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcQogICAgIH0KICAgICBpZiAobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KQogICAgIHsK
LSAgICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisgICAgICAgIG9u
T2NjbHVzaW9uUXVlcnlFbmRlZChjb250ZXh0LCBxdWVyeSk7CiAgICAgfQogICAgIG1PY2NsdXNp
b25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKIH0KQEAgLTE3
NzAsMjAgKzIwMzAsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnN0YXJ0T2NjbHVzaW9u
UXVlcnlJblJlbmRlclBhc3MoUXVlcnlNdGwgKnF1ZXJ5LCBib29sCiAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi12b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRiYWNr
TXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBlbmQgY3VycmVudCBy
ZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBYRkIKLSAgICAvLyBi
dWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJldHRlciBh
cHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDb250ZXh0TXRsOjpv
blRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRy
YW5zZm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0
byBlbmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9y
ZSBYRkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25z
aWRlciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQogdm9p
ZCBDb250ZXh0TXRsOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYg
JmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHko
KTsKQEAgLTE4NDIsMTAgKzIwODgsMTkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1
cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKIHsK
ICAgICBBU1NFUlQobVByb2dyYW0pOwogCisgICAgLy8gVXBkYXRlIHRyYW5zZm9ybSBmZWVkYmFj
ayBvZmZzZXRzIG9uIGV2ZXJ5IGRyYXcgY2FsbC4KKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpcnN0VmVy
dGV4ICE9IC0xKTsKKyAgICAgICAgbVhmYkJhc2VWZXJ0ZXggICAgICAgICAgICAgPSBmaXJzdFZl
cnRleDsKKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPckluZGV4
Q291bnQ7CisgICAgICAgIGludmFsaWRhdGVEcml2ZXJVbmlmb3JtcygpOworICAgIH0KKwogICAg
IC8vIGluc3RhbmNlcz0wIG1lYW5zIG5vIGluc3RhbmNlZCBkcmF3LgogICAgIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CiAKQEAgLTE4NjIsMjAgKzIx
MTcsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5QWN0aXZlVGV4dHVy
ZXMoY29udGV4dCkpOwogICAgIH0KIAotICAgIGlmIChtRGlydHlCaXRzLnRlc3QoRElSVFlfQklU
X1JBU1RFUklaRVJfRElTQ0FSRCkpCi0gICAgewotICAgICAgICBpZiAoZ2V0U3RhdGUoKS5pc1Ry
YW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNzIHNpbmNlIHdl
IGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgotICAgICAgICAgICAgLy8gdGFyZ2V0IGlmIG9ubHkg
WEZCIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGludmFsaWRhdGVTdGF0ZShjb250ZXh0KTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVS
ZW5kZXJQaXBlbGluZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFtUmVuZGVyRW5j
b2Rlci52YWxpZCgpKQogICAgIHsKICAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZwpAQCAt
MTg4NCw3ICsyMTI1LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJU
WV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCiAgICAgewotICAgICAgICBBTkdMRV9UUlkoaGFuZGxl
RGlydHlSZW5kZXJQYXNzKGNvbnRleHQpKTsKKyAgICAgICAgLy8gU3RhcnQgbmV3IHJlbmRlciBj
b21tYW5kIGVuY29kZXIKKyAgICAgICAgQU5HTEVfTVRMX1RSWSh0aGlzLCBtRHJhd0ZyYW1lYnVm
ZmVyLT5lbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb250ZXh0KSk7CisKKyAgICAgICAgLy8gcmUt
YXBwbHkgZXZlcnl0aGluZworICAgICAgICBpbnZhbGlkYXRlU3RhdGUoY29udGV4dCk7CiAgICAg
fQogCiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSAmJiBtT2NjbHVzaW9uUXVlcnlQb29sLmdldE51
bVJlbmRlclBhc3NBbGxvY2F0ZWRRdWVyaWVzKCkgPT0gMCkKQEAgLTE4OTQsMTcgKzIxMzksMTEg
QEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQ
YXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKICAgICB9CiAKLSAgICBib29sIGlzUGlwZWxp
bmVEZXNjQ2hhbmdlZDsKLSAgICBBTkdMRV9UUlkoY2hlY2tJZlBpcGVsaW5lQ2hhbmdlZChjb250
ZXh0LCBtb2RlLCB4ZmJQYXNzLCAmaXNQaXBlbGluZURlc2NDaGFuZ2VkKSk7CisgICAgYm9vbCBj
aGFuZ2VkUGlwZWxpbmU7CisgICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29u
dGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZFBpcGVsaW5lKSk7CiAKICAgICBi
b29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxzZTsKLQotICAgIGlmIChJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShnZXRTdGF0ZSgpKSkKLSAgICB7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW5u
ZWVkZWQgZGlydHkgYml0cwotICAgICAgICBmaWx0ZXJPdXRYRkJPbmx5RGlydHlCaXRzKGNvbnRl
eHQpOwotICAgIH0KLQogICAgIGZvciAoc2l6ZV90IGJpdCA6IG1EaXJ0eUJpdHMpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGJpdCkKQEAgLTE5NTMsOCArMjE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HOgogICAgICAgICAg
ICAgICAgIHVuaWZvcm1CdWZmZXJzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6
CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29udGV4dCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgotICAgICAg
ICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTE5
NjIsODIgKzIyMDMsMzEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoeGZi
UGFzcyAmJiAhbURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQotICAg
IHsKLSAgICAgICAgLy8gSWYgaGFuZGxlRGlydHlEcml2ZXJVbmlmb3JtcygpIHdhcyBub3QgY2Fs
bGVkIGFuZCB0aGlzIGlzIFhGQiBwYXNzLCB3ZSBzdGlsbCBuZWVkIHRvCi0gICAgICAgIC8vIHVw
ZGF0ZSBYRkIgcmVsYXRlZCB1bmlmb3JtcwotICAgICAgICBBTkdMRV9UUlkoCi0gICAgICAgICAg
ICBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoZmlyc3RWZXJ0ZXgsIHZlcnRleE9ySW5kZXhDb3VudCwg
LyoqIHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRW
ZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5k
ZXgpOwotICAgIH0KLQogICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKIAotICAgIEFOR0xFX1RSWSht
UHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVs
aW5lRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVz
Y0NoYW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7Ci0KLSAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLXZvaWQgQ29udGV4dE10bDo6Zmls
dGVyT3V0WEZCT25seURpcnR5Qml0cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAg
ICBBU1NFUlQoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoZ2V0U3RhdGUoKSkpOwotCi0gICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50
ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOwotCi0gICAgLy8gSW4gdHJhbnNmb3Jt
IGZlZWRiYWNrIG9ubHkgcGFzcywgb25seSB2ZXJ0ZXggc2hhZGVyJ3MgcmVsYXRlZCBzdGF0ZXMg
YXJlIG5lZWRlZC4KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQotICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX1NURU5DSUxfREVTQykgfAotICAg
ICAgICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX0JJQVMpIHwgYW5nbGU6OkJp
dDxzaXplX3Q+KERJUlRZX0JJVF9TVEVOQ0lMX1JFRikgfAotICAgICAgICBhbmdsZTo6Qml0PHNp
emVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9C
SVRfVklFV1BPUlQpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9TQ0lT
U09SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfQ1VMTF9NT0RFKSB8Ci0gICAgICAg
IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfV0lORElORyk7Ci0KLSAgICBtRGlydHlCaXRz
ICY9IH5rVW5uZWVkZWRCaXRzOwotfQotCi1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRs
ZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAo
IUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisgICAgaWYgKHRyYW5zZm9ybUZlZWRi
YWNrRHJhdykKICAgICB7Ci0gICAgICAgIC8vIFN0YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNv
ZGVyCi0gICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJl
UmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICAvLyBYRkIgaXMgYWN0aXZlIGFuZCByYXN0ZXJpemF0aW9uIGlzIGRpc2FibGVkLiBVc2Ug
ZHVtbXkgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgLy8gV2UgY3VycmVudGx5IG5lZWQgdG8gZW5k
IHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNp
bmcKLSAgICAgICAgLy8gYSBzbWFsbCBkdW1teSByZW5kZXIgdGFyZ2V0IHdvdWxkIG1ha2UgdGhl
IHJlbmRlciBwYXNzIGVuZGluZyB2ZXJ5IGNoZWFwLgotICAgICAgICBpZiAoIW1EdW1teVhGQlJl
bmRlclRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1
cmU6Ok1ha2UyRFRleHR1cmUodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhB
OF9VTk9STSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAmbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOwotICAg
ICAgICB9Ci0gICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIgPSBnZXRU
ZXh0dXJlUmVuZGVyQ29tbWFuZEVuY29kZXIoCi0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJU
ZXh0dXJlLAotICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9H
TEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpKTsKLSAgICAgICAgZW5jb2Rlci0+c2V0
Q29sb3JMb2FkQWN0aW9uKE1UTExvYWRBY3Rpb25Eb250Q2FyZSwgTVRMQ2xlYXJDb2xvcigpLCAw
KTsKLSAgICAgICAgZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRv
bnRDYXJlKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJU
cmFuc2Zvcm1GZWVkYmFja09ubHlQYXNzIik7Ci0jZW5kaWYKKyAgICAgICAgbXRsOjpSZW5kZXJV
dGlscyAmdXRpbHMgPSBnZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgICAgIGFuZ2xlOjpS
ZXN1bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHV0aWxzLmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNr
UFNPKGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYyk7CisgICAg
ICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShyZXN1bHQpOworICAgICAgICBhc3NlcnQocmVzdWx0
ID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKyAgICAgICAgY2hhbmdlZFBpcGVsaW5lID0g
dHJ1ZTsKICAgICB9CiAKLSAgICAvLyByZS1hcHBseSBldmVyeXRoaW5nCi0gICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRl
eHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVDaGFuZ2VkLCB1bmlm
b3JtQnVmZmVyc0RpcnR5LCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpKTsKIAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewot
ICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgID0gbVN0YXRlOwotICAgIGNvbnN0IGdsOjpQ
cm9ncmFtICpwcm9ncmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7CisgICAgY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlICAgICAgICAgICAgICAgID0gbVN0YXRlOworICAgIGNvbnN0IGdsOjpQcm9n
cmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3Jh
bUV4ZWN1dGFibGUoKTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZ0ZXh0
dXJlcyAgICAgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKLSAgICBjb25zdCBn
bDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0
YWJsZSgpLmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0
dXJlTWFzayAmYWN0aXZlVGV4dHVyZXMgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyc01h
c2soKTsKIAogICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCiAg
ICAgewpAQCAtMjA2Nyw2ICsyMjU3LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eURlZmF1bHRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIH0K
IAogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICBtUmVuZGVyRW5jb2Rl
ci5zZXRGcmFnbWVudERhdGEobURlZmF1bHRBdHRyaWJ1dGVzLCBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVs
dEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKIAogICAgIG1E
aXJ0eURlZmF1bHRBdHRyaWJzTWFzay5yZXNldCgpOwpAQCAtMjEyMCw5ICsyMzExLDYgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgIH0KICAgICBtRHJpdmVyVW5pZm9ybXMuY292ZXJhZ2VN
YXNrID0gY292ZXJhZ2VNYXNrOwogCi0gICAgQU5HTEVfVFJZKAotICAgICAgICBmaWxsRHJpdmVy
WEZCVW5pZm9ybXMoZHJhd0NhbGxGaXJzdFZlcnRleCwgdmVydGljZXNQZXJJbnN0YW5jZSwgLyoq
IHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotCiAgICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnZh
bGlkKCkpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRHJpdmVyVW5pZm9y
bXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKICAgICBtUmVuZGVyRW5jb2Rl
ci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5k
aW5nSW5kZXgpOwpAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVy
dGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgdmVydGljZXNQZXJJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpCithbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnNFbXVsYXRpb24oCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxl
ICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJU
KGV4ZWN1dGFibGUpOwogCi0gICAgbURyaXZlclVuaWZvcm1zLnhmYkFjdGl2ZVVucGF1c2VkID0g
Z2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKTsKLSAgICBpZiAo
IXRyYW5zZm9ybUZlZWRiYWNrIHx8ICFtRHJpdmVyVW5pZm9ybXMueGZiQWN0aXZlVW5wYXVzZWQp
CisgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgpIHx8ICFt
U3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIG1Ecml2ZXJVbmlmb3Jtcy54
ZmJWZXJ0aWNlc1BlckRyYXcgPSB2ZXJ0aWNlc1Blckluc3RhbmNlOworICAgIFRyYW5zZm9ybUZl
ZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0
Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgIHNpemVfdCBidWZmZXJDb3VudCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQoKTsKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8
QnVmZmVyTXRsICo+ICZidWZmZXJIYW5kbGVzID0KKyAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tN
dGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKIAotICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFu
c2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAg
Zm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJ1ZmZlckNvdW50OyAr
K2J1ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJIYW5kbGUgPSBi
dWZmZXJIYW5kbGVzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckhhbmRsZSk7
CisgICAgICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICAgICAgbVJlbmRl
ckVuY29kZXIuc2V0QnVmZmVyRm9yV3JpdGUoCisgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKKyAgICAgICAgICAg
IG10bDo6a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgKHVpbnQzMl90KWJ1ZmZlcklu
ZGV4KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZl
ck9mZnNldHModGhpcywgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJJbnN0YW5jZSAqIHNraXBw
ZWRJbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsKKyAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFu
ZGxlRGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAg
LTIxNTksMTMgKzIzNTUsMTMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0
eURlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICBtdGw6OkRl
cHRoU3RlbmNpbERlc2MgZHNEZXNjICAgICAgICAgICAgICA9IG1EZXB0aFN0ZW5jaWxEZXNjOwog
ICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNjID0gbVJlbmRlckVu
Y29kZXIucmVuZGVyUGFzc0Rlc2MoKTsKIAotICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhB
dHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQudGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmRlcHRoV3JpdGVFbmFibGVkICAg
ID0gZmFsc2U7CiAgICAgICAgIGRzRGVzYy5kZXB0aENvbXBhcmVGdW5jdGlvbiA9IE1UTENvbXBh
cmVGdW5jdGlvbkFsd2F5czsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5j
aWxBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0
YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBkc0Rlc2MuZnJvbnRGYWNlU3RlbmNp
bC5yZXNldCgpOwogICAgICAgICBkc0Rlc2MuYmFja0ZhY2VTdGVuY2lsLnJlc2V0KCk7CkBAIC0y
MTk2LDggKzIzOTIsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVw
dGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlBy
aW1pdGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaXNQaXBlbGluZURlc2NDaGFuZ2VkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGJm
UGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQogewogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52
YWxpZCgpKTsKICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgdG9wb2xvZ3lDbGFzcyA9
IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVNb2RlKTsKQEAgLTIyMTYs
MjQgKzI0MTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVD
aGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICByZW5kZXJQYXNzRGVz
Yy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhtQmxlbmREZXNjLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBp
cGVsaW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKIAotICAgICAgICBpZiAoeGZiUGFzcykKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQg
c2hhZGVyLgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlw
ZSA9IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIG5vdCBhY3RpdmUgYW5kIHJhc3Rl
cml6ZXIgZGlzY2FyZCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlCi0gICAgICAg
ICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRlciBtaWdo
dCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAotICAgICAgICAgICAgLy8gTWV0YWwg
ZG9lc24ndCBhbGxvdyByYXN0ZXJpemF0aW9uIHRvIGJlIGRpc2FibGVkLgotICAgICAgICAgICAg
bVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9Ci0gICAgICAgICAgICAgICAg
bXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZDsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGlu
ZURlc2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlv
bjo6RW5hYmxlZDsKLSAgICAgICAgfQogICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLmlucHV0
UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworICAgICAgICBtUmVuZGVyUGlwZWxp
bmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKyAgICAgICAgICAgIChtU3RhdGUuaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSA/IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpF
bXVsYXRlZERpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbmFibGVkKTsKICAg
ICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gbVN0YXRl
LmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwogICAgICAgICBtUmVuZGVyUGlwZWxp
bmVEZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBtU3RhdGUuaXNTYW1wbGVDb3ZlcmFnZUVu
YWJsZWQoKTsKIApAQCAtMjI0MSw3ICsyNDIzLDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgbURyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RhdGUoKS5nZXRFbmFibGVkRHJhd0J1ZmZl
cnMoKSk7CiAgICAgfQogCi0gICAgKmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsK
KyAgICAqcGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKIAogICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCmlu
ZGV4IGIwMGRlMWIyZDljODczNTdhZWFlNWFmYjAxYTY3MzQyNTI0MDY2YjQuLjI0MTcxMjIwYzVh
NjUwYWVhMzhjOTI0ZTRhZmQyNGFkYWFmMzk2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwuaApAQCAtNTIsNiArNTIsMTAgQEAgY2xhc3MgRGlzcGxheU10bCA6IHB1YmxpYyBEaXNw
bGF5SW1wbAogCiAgICAgZWdsOjpFcnJvciB3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIHdhaXROYXRpdmUoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3Ig
dmFsaWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRy
aWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgU3VyZmFjZUltcGwgKmNy
ZWF0ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93
LApAQCAtOTYsMTEgKzEwMCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUlt
cGwKIAogICAgIGJvb2wgaXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdp
bmRvdykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBlZ2w6OkVycm9yIHZhbGlkYXRlQ2xpZW50QnVm
ZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJz
KSBjb25zdCBvdmVycmlkZTsKLQogICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygp
IG92ZXJyaWRlOwogCiAgICAgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNv
bnN0OwpAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxh
eUltcGwKICAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3Q7CiAgICAgdm9pZCBp
bml0aWFsaXplVGV4dHVyZUNhcHMoKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJl
cygpOworICAgIHZvaWQgaW5pdGlhbGl6ZUxpbWl0YXRpb25zKCk7CisKICAgICBhbmdsZTo6UmVz
dWx0IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CiAKICAgICBtdGw6OkF1dG9PYmpDUHRyPGlk
PE1UTERldmljZT4+IG1NZXRhbERldmljZSA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwubW0KaW5kZXggMjQ3ZDc2YTgwOTI1NDk4N2NlYzU0YTI2ODcwMDQ5OWU1NjdiZGQzZC4u
MWQxMWNkNjRjZTgwMWM1ZDNiODc3ODIzY2UzOTFmZjRlMjRlMmU5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0Rpc3BsYXlNdGwubW0KQEAgLTgsMTIgKzgsMTQgQEAKIAogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9zeXN0
ZW1fdXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvRGlzcGxheS5oIgog
I2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9T
dXJmYWNlU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1
cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgpAQCAtMjIs
OSArMjQsNjIgQEAKIAogI2luY2x1ZGUgIkVHTC9lZ2xleHQuaCIKIAorI2lmIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1Qp
Citjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVG
RVJSRURfREVWSUNFIjsKKyNlbmRpZgorY29uc3RleHByIGNoYXIga0FOR0xFVHJhbnNmb3JtRmVl
ZGJhY2tFbnZbXSA9ICJBTkdMRV9NRVRBTF9YRkJfRU5BQkxFIjsKKwogbmFtZXNwYWNlIHJ4CiB7
CiAKK3N0YXRpYyBFR0xpbnQgR2V0RGVwdGhTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5D
SUxfSU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMjQ6CisgICAgICAgICAgICByZXR1cm4gMjQ7CisgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDI0OworICAg
ICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDMyOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxm
b3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgRUdMaW50
IEdldFN0ZW5jaWxTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50
ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAg
ICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQyNDoK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMy
X09FUzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDg6CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDMy
Rl9TVEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCiBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKIHsK
ICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5j
ZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9yIE1ldGFsIDIuMC4KQEAgLTU3LDcgKzExMiw3IEBA
IHN0cnVjdCBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsCiB9OwogCiBEaXNwbGF5TXRsOjpEaXNw
bGF5TXRsKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICA6IERpc3BsYXlJbXBs
KHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorICAgIDog
RGlzcGxheUltcGwoc3RhdGUpLCBtU3RhdGVDYWNoZShtRmVhdHVyZXMpLCBtVXRpbHModGhpcykK
IHt9CiAKIERpc3BsYXlNdGw6On5EaXNwbGF5TXRsKCkge30KQEAgLTc4LDEwICsxMzMsMjcgQEAg
YW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplSW1wbChlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7Ci0gICAgICAgIG1NZXRh
bERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9S
RUxFQVNFXTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBhbmds
ZVByZWZlcnJlZERldmljZSA9IGFuZ2xlOjpHZXRFbnZpcm9ubWVudFZhcihrQU5HTEVQcmVmZXJy
ZWREZXZpY2VFbnYpOworICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZpY2UgIT0gIiIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIE5TQXJyYXk8aWQ8TVRMRGV2aWNlPj4gKmRldmljZXMgPSBb
TVRMQ29weUFsbERldmljZXMoKSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAg
Zm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChbZGV2aWNlLm5hbWUubG93ZXJjYXNlU3RyaW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAubG93ZXJjYXNlU3RyaW5nXSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcgTWV0YWwgRGV2aWNlOiAlQCIsIFtk
ZXZpY2UgbmFtZV0pOworICAgICAgICAgICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbZGV2aWNl
IEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAg
IGlmICghbU1ldGFsRGV2aWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6U3RvcDsKKyAgICAgICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0
ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKICAgICAgICAgfQogCiAg
ICAgICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gbXRsOjpHZXREZXZpY2VWZW5kb3JJZChtTWV0
YWxEZXZpY2UpOwpAQCAtODksMTIgKzE2MSwxMyBAQCBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6
OmluaXRpYWxpemVJbXBsKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICAgICAgbUNtZFF1ZXVl
LnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9BVVRP
UkVMRUFTRV0pOwogCiAgICAgICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQorI2lmIEFO
R0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgICAgICBpZiAoIW1HbHNsYW5nSW5pdGlhbGl6ZWQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEdsc2xhbmdJbml0aWFsaXplKCk7CiAgICAgICAgICAg
ICBtR2xzbGFuZ0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAg
ICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKICAgICAgICAgewpAQCAtMTIwLDEy
ICsxOTMsMTMgQEAgdm9pZCBEaXNwbGF5TXRsOjp0ZXJtaW5hdGUoKQogICAgIG1DYXBzSW5pdGlh
bGl6ZWQgPSBmYWxzZTsKIAogICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gMDsKLQorI2lmIEFO
R0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgIGlmIChtR2xzbGFuZ0luaXRpYWxpemVkKQogICAg
IHsKICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsKICAgICAgICAgbUdsc2xhbmdJbml0aWFsaXpl
ZCA9IGZhbHNlOwogICAgIH0KKyNlbmRpZgogfQogCiBib29sIERpc3BsYXlNdGw6OnRlc3REZXZp
Y2VMb3N0KCkKQEAgLTE3MSw2ICsyNDUsMTUgQEAgZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp3YWl0
Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHJldHVybiBlZ2w6Ok5vRXJy
b3IoKTsKIH0KIAorZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihj
b25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBGaWxsIG91dCBwcm9w
ZXJseQorICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwogZWdsOjpFcnJvciBEaXNwbGF5
TXRsOjp3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5l
KQogewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE4Nyw3ICsyNzAsOCBAQCBTdXJmYWNlSW1w
bCAqRGlzcGxheU10bDo6Y3JlYXRlV2luZG93U3VyZmFjZShjb25zdCBlZ2w6OlN1cmZhY2VTdGF0
ZSAmc3RhdGUsCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlclN1cmZhY2Uo
Y29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQog
ewotICAgIHJldHVybiBuZXcgUEJ1ZmZlclN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGF0dHJpYnMp
OworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUlt
cGwgKj4oMCk7CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJv
bUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCkBAIC0xOTUsMTUg
KzI3OSw3IEBAIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVu
dEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsKLSAgICBzd2l0Y2ggKGJ1
ZnR5cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZBQ0VfQU5HTEU6Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGNsaWVudEJ1
ZmZlciwgYXR0cmlicyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZU10bCh0aGlzLCBzdGF0ZSwgY2xpZW50QnVmZmVy
LCBhdHRyaWJzKTsKIH0KIAogU3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBpeG1hcFN1
cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAtMjQwLDE3ICszMTYsMTIg
QEAgU3RyZWFtUHJvZHVjZXJJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTdHJlYW1Qcm9kdWNlckQz
RFRleHR1cmUoCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJlR3JvdXBJbXBsICpEaXNw
bGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKLXsKLSAgICByZXR1cm4gbmV3IFNoYXJlR3JvdXBN
dGwoKTsKLX0KLQogZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJz
aW9uKCkgY29uc3QKIHsKICAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0cyBHTEVTIDMuMCBvbiBp
T1MgR1BVIGZhbWlseSA0KyBmb3Igbm93LgogICAgIGlmIChzdXBwb3J0c0VpdGhlckdQVUZhbWls
eSg0LCAxKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtdGw6OmtNYXhTdXBwb3J0ZWRHTFZlcnNp
b247CisgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAwKTsKICAgICB9CiAgICAgcmV0dXJu
IGdsOjpWZXJzaW9uKDIsIDApOwogfQpAQCAtMjY1LDYgKzMzNiwxMSBAQCBFR0xTeW5jSW1wbCAq
RGlzcGxheU10bDo6Y3JlYXRlU3luYyhjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykK
ICAgICByZXR1cm4gbmV3IEVHTFN5bmNNdGwoYXR0cmlicyk7CiB9CiAKK1NoYXJlR3JvdXBJbXBs
ICpEaXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKK3sKKyAgICByZXR1cm4gbmV3IFNoYXJl
R3JvdXBJbXBsKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6bWFrZUN1cnJlbnQoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
Z2w6OlN1cmZhY2UgKmRyYXdTdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLApAQCAtMzI2LDcgKzQwMiw3IEBAIGVnbDo6
Q29uZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAgICAgY29uZmlnLnRyYW5z
cGFyZW50VHlwZSA9IEVHTF9OT05FOwogCiAgICAgLy8gUGJ1ZmZlcgotICAgIGNvbmZpZy5iaW5k
VG9UZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisgICAgY29uZmlnLmJpbmRUb1RleHR1
cmVUYXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7CiAgICAgY29uZmlnLm1heFBC
dWZmZXJXaWR0aCAgICAgPSA0MDk2OwogICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0g
NDA5NjsKICAgICBjb25maWcubWF4UEJ1ZmZlclBpeGVscyAgICA9IDQwOTYgKiA0MDk2OwpAQCAt
MzYxLDQxICs0MzcsMTggQEAgZWdsOjpDb25maWdTZXQgRGlzcGxheU10bDo6Z2VuZXJhdGVDb25m
aWdzKCkKIAogICAgIGNvbmZpZy5jb2xvckNvbXBvbmVudFR5cGUgPSBFR0xfQ09MT1JfQ09NUE9O
RU5UX1RZUEVfRklYRURfRVhUOwogCi0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVk
W10gPSB7MCwgNH07CisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29uZmlnLnJlZFNpemUgICAg
PSA4OworICAgIGNvbmZpZy5ncmVlblNpemUgID0gODsKKyAgICBjb25maWcuYmx1ZVNpemUgICA9
IDg7CisgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgIGNvbmZpZy5idWZmZXJTaXplID0g
Y29uZmlnLnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmlnLmJsdWVTaXplICsgY29u
ZmlnLmFscGhhU2l6ZTsKIAotICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVk
KQotICAgIHsKLSAgICAgICAgY29uZmlnLnNhbXBsZXMgICAgICAgPSBzYW1wbGVzOwotICAgICAg
ICBjb25maWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7Ci0KLSAgICAg
ICAgLy8gQnVmZmVyIHNpemVzCi0gICAgICAgIGNvbmZpZy5yZWRTaXplICAgID0gODsKLSAgICAg
ICAgY29uZmlnLmdyZWVuU2l6ZSAgPSA4OwotICAgICAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7
Ci0gICAgICAgIGNvbmZpZy5hbHBoYVNpemUgID0gODsKLSAgICAgICAgY29uZmlnLmJ1ZmZlclNp
emUgPSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUg
KyBjb25maWcuYWxwaGFTaXplOwotCi0gICAgICAgIC8vIFdpdGggRFMKLSAgICAgICAgY29uZmln
LmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7Ci0KLSAg
ICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLQotICAgICAgICAvLyBXaXRoIEQKLSAgICAgICAg
Y29uZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7
Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gV2l0aCBTCi0gICAg
ICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9
IDg7Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gTm8gRFMKLSAg
ICAgICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMDsKLSAgICAgICAgY29uZmlnLnN0ZW5jaWxTaXpl
ID0gMDsKLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLSAgICB9CisgICAgLy8gVGVzdHMg
bGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVwdGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRI
X1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYKKyAgICAvLyByZW5kZXJDb25maWcgYXR0cmli
dXRlcyBhcmUgc2V0IHRvIGdsdTo6UmVuZGVyQ29uZmlnOjpET05UX0NBUkUKKyAgICBjb25maWcu
ZGVwdGhTaXplICAgPSBHZXREZXB0aFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7Cisg
ICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNp
bEZvcm1hdCk7CisgICAgY29uZmlncy5hZGQoY29uZmlnKTsKIAogICAgIHJldHVybiBjb25maWdz
OwogfQpAQCAtNDA5LDI2ICs0NjIsNiBAQCBib29sIERpc3BsYXlNdGw6OmlzVmFsaWROYXRpdmVX
aW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiAgICAgfQogfQogCi1lZ2w6
OkVycm9yIERpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xlbnVtIGJ1ZnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRy
aWJzKSBjb25zdAotewotICAgIHN3aXRjaCAoYnVmdHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2Ug
RUdMX0lPU1VSRkFDRV9BTkdMRToKLSAgICAgICAgICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZU10
bDo6VmFsaWRhdGVBdHRyaWJ1dGVzKGNsaWVudEJ1ZmZlciwgYXR0cmlicykpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBdHRyaWJ1
dGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwotfQotCiBzdGQ6OnN0cmlu
ZyBEaXNwbGF5TXRsOjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQpAQCAtNTEyLDEwICs1NDUsMTYgQEAgdm9pZCBEaXNwbGF5TXRsOjpl
bnN1cmVDYXBzSW5pdGlhbGl6ZWQoKSBjb25zdAogICAgIG1OYXRpdmVDYXBzLm1heFJlbmRlcmJ1
ZmZlclNpemUgICA9IG1OYXRpdmVDYXBzLm1heDJEVGV4dHVyZVNpemU7CiAgICAgbU5hdGl2ZUNh
cHMubWluQWxpYXNlZFBvaW50U2l6ZSAgID0gMTsKICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBo
YXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBwb2ludCBzaXplIGV2ZW4gdGhvdWdoCi0gICAg
Ly8gTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQgbWF4IHN1cHBvcnRlZCBw
b2ludCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gNjQgZm9yCi0gICAgLy8gbm93LgotICAg
IC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgxNgotICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQ
b2ludFNpemUgPSA2NDsKKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMg
dGhhdCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUK
KyAgICAvLyBvbiBJbnRlbCBhbmQgNjQgb24gQU1EIGZvciBub3cuCisgICAgaWYgKFttTWV0YWxE
ZXZpY2UuZ2V0KCkubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05v
dEZvdW5kKQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNlZFBvaW50U2l6ZSA9
IDI1NTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxp
YXNlZFBvaW50U2l6ZSA9IDY0OworICAgIH0KIAogICAgIG1OYXRpdmVDYXBzLm1pbkFsaWFzZWRM
aW5lV2lkdGggPSAxLjBmOwogICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAx
LjBmOwpAQCAtNjE1LDYgKzY1NCw5IEBAIHZvaWQgRGlzcGxheU10bDo6ZW5zdXJlQ2Fwc0luaXRp
YWxpemVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFy
YXRlQ29tcG9uZW50cyA9CiAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM7CiAKKyAgICAvLyBHTF9PRVNfZ2V0X3Byb2dy
YW1fYmluYXJ5CisgICAgbU5hdGl2ZUNhcHMucHJvZ3JhbUJpbmFyeUZvcm1hdHMucHVzaF9iYWNr
KEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFu
Y2UKICAgICBtTmF0aXZlQ2Fwcy5tYXhDbGlwRGlzdGFuY2VzID0gODsKIApAQCAtNjQ3LDYgKzY4
OSwxNSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3QKICAg
ICBtTmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQm9yZGVyQ2xhbXBPRVMgID0gZmFsc2U7ICAvLyBu
b3QgaW1wbGVtZW50ZWQgeWV0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRl
clNvdXJjZSA9IHRydWU7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGlzY2FyZEZyYW1lYnVmZmVy
ICAgICA9IHRydWU7CisgICAgLy8gTm90IGltcGxlbWVudGVkIGJ1dCBleHBvc2UKKyAgICBtTmF0
aXZlRXh0ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKworICAgIC8vIEVYVF9tdWx0
aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlz
YW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICBtRmVhdHVyZXMuaGFzRGVw
dGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmIG1GZWF0dXJlcy5oYXNTdGVuY2lsQXV0b1Jlc29sdmUu
ZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJl
bmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgfQogCiAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9t
aW5tYXgKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5ibGVuZE1pbk1heCA9IHRydWU7CkBAIC02NjIs
OCArNzEzLDggQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0
CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5zZW1hcGhvcmVGZCA9IGZhbHNlOwogCi0gICAgbU5hdGl2ZUV4dGVuc2lvbnMu
aW5zdGFuY2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERy
YXcuZW5hYmxlZDsKLSAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNFWFQgICA9
IG1OYXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFOworICAgIG1OYXRpdmVFeHRl
bnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFID0gdHJ1ZTsKKyAgICBtTmF0aXZlRXh0ZW5zaW9u
cy5pbnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CiAKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5y
b2J1c3RCdWZmZXJBY2Nlc3NCZWhhdmlvciA9IGZhbHNlOwogCkBAIC02ODYsNiArNzM3LDkgQEAg
dm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAKICAgICBtTmF0
aXZlRXh0ZW5zaW9ucy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsKIAorICAgIC8vIEdMX09F
U19nZXRfcHJvZ3JhbV9iaW5hcnkKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmlu
YXJ5T0VTID0gdHJ1ZTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UKICAgICBtTmF0
aXZlRXh0ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CiAKQEAgLTcxMywxMSArNzY3
LDE3IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVRleHR1cmVDYXBzKCkgY29uc3QKIAog
ICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4dGVuc2lvbnMuCiAgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuc2V0VGV4dHVyZUV4dGVuc2lvblN1cHBvcnQobU5hdGl2ZVRleHR1cmVDYXBzKTsKLQorICAg
IC8vIE1vZGlmeSBleHRlbnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0CiAgICAgLy8gRGlzYWJs
ZSBhbGwgZGVwdGggYnVmZmVyIGFuZCBzdGVuY2lsIGJ1ZmZlciByZWFkYmFjayBleHRlbnNpb25z
IHVudGlsIHdlIG5lZWQgdGhlbQogICAgIG1OYXRpdmVFeHRlbnNpb25zLnJlYWREZXB0aE5WICAg
ICAgICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAg
ID0gZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGVwdGhCdWZmZXJGbG9hdDJOViA9IGZh
bHNlOworICAgIG1OYXRpdmVFeHRlbnNpb25zLnRleHR1cmVDb21wcmVzc2lvbkFTVENMRFJLSFIg
Jj0gc3VwcG9ydHNJT1NHUFVGYW1pbHkoMik7Cit9CisKK3ZvaWQgRGlzcGxheU10bDo6aW5pdGlh
bGl6ZUxpbWl0YXRpb25zKCkKK3sKKyAgICBtTmF0aXZlTGltaXRhdGlvbnMubm9WZXJ0ZXhBdHRy
aWJ1dGVBbGlhc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUZl
YXR1cmVzKCkKQEAgLTc3OSw2ICs4MzksOSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVG
ZWF0dXJlcygpCiAgICAgQU5HTEVfRkVBVFVSRV9DT05ESVRJT04oKCZtRmVhdHVyZXMpLCBhbGxv
d1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWlzT1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CiAKKyAgICBtRmVhdHVy
ZXMuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQgPQorICAgICAgICBhbmdsZTo6R2V0
RW52aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKwog
ICAgIGFuZ2xlOjpQbGF0Zm9ybU1ldGhvZHMgKnBsYXRmb3JtID0gQU5HTEVQbGF0Zm9ybUN1cnJl
bnQoKTsKICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0
dXJlcyk7CiAKQEAgLTc4Nyw2ICs4NTAsMjcgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXpl
RmVhdHVyZXMoKQogCiBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJM
aWJyYXJ5KCkKIHsKKyAgICAjaWZkZWYgQU5HTEVfTUVUQUxfWENPREVfQlVJTERTX1NIQURFUlMK
KyAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVy
QXN5bmNJbmZvTXRsKTsKKyAgICAgICAgCisgICAgCisgICAgICAgIE5TU3RyaW5nICpwYXRoID0g
W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRs
ZVBhdGg7CisgICAgICAgIE5TRXJyb3IgKiBlcnJvciA9IG51bGxwdHI7CisgICAgICAgIG1EZWZh
dWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnMgPSBbZ2V0TWV0YWxEZXZpY2UoKSBu
ZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOnBhdGhd
IGVycm9yOiZlcnJvcl07CisKKyAgICAgICAgaWYgKGVycm9yICYmICFtRGVmYXVsdFNoYWRlcnNB
c3luY0luZm8tPmRlZmF1bHRTaGFkZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigpIDw8ICJJ
bnRlcm5hbCBlcnJvcjogbmV3RGVmYXVsdExpYnJhcnlXaXRoQnVuZGxlIGZhaWxlZC4gIiA8PCBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVyc0NvbXBpbGVF
cnJvciA9IHN0ZDo6bW92ZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6U3RvcDsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5jb21waWxlZCA9IHRydWU7CisgICAgICAgIAorICAgICNlbHNlCiAg
ICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJ
bmZvTXRsKTsKIAogICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIGFzeW5jIGluZm8gc3RydWN0
IHNpbmNlIGl0IG1pZ2h0IGJlIHJlbGVhc2VkIGluIHRlcm1pbmF0ZSgpLCBidXQgdGhlCkBAIC04
MTUsNyArODk5LDcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVy
TGlicmFyeSgpCiAKICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAg
ICAgfQotCisgICAgI2VuZGlmCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwog
fQogCkBAIC04NDcsMTQ0ICs5MzEsMTIgQEAgaWQ8TVRMTGlicmFyeT4gRGlzcGxheU10bDo6Z2V0
RGVmYXVsdFNoYWRlcnNMaWIoKQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzSU9TR1BVRmFt
aWx5KHVpbnQ4X3QgaU9TRmFtaWx5KSBjb25zdAogewotI2lmICghVEFSR0VUX09TX0lPUyAmJiAh
VEFSR0VUX09TX1RWKSB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZWxzZQotIyAgICBpZiAoX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAw
MDApIHx8IChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQotICAgIC8vIElm
IGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlIGl0
LgotICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSgxMy4wKSkKLSAgICB7Ci0gICAgICAg
IE1UTEdQVUZhbWlseSBmYW1pbHk7Ci0gICAgICAgIHN3aXRjaCAoaU9TRmFtaWx5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BV
RmFtaWx5QXBwbGUxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAy
OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlMjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBmYW1p
bHkgPSBNVExHUFVGYW1pbHlBcHBsZTM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU0
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSMgICAgICAgIGlmIFRBUkdFVF9PU19JT1MKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTY7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0jICAgICAgICBlbmRpZgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtnZXRNZXRhbERl
dmljZSgpIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07Ci0gICAgfSAgLy8gTWV0YWwgMi4yCi0jICAg
IGVuZGlmICAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VECi0KLSAgICAvLyBJZiBk
ZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1
c2UKLSAgICAvLyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgotICAgIE1UTEZlYXR1
cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKLSAgICB7Ci0jICAgIGlm
IFRBUkdFVF9PU19JT1MKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9
IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9T
X0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTNfdjE7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgZmVhdHVyZVNl
dCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTRfdjE7Ci0gICAgICAgICAgICBicmVhazsK
LSMgICAgICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTIwMDAwCi0g
ICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lP
U19HUFVGYW1pbHk1X3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAgICBlbmRpZiAgLy8g
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAotIyAgICBlbGlmIFRBUkdFVF9PU19UVgot
ICAgICAgICBjYXNlIDE6Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZlYXR1cmVTZXQg
PSBNVExGZWF0dXJlU2V0X3R2T1NfR1BVRmFtaWx5MV92MTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF90
dk9TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSMgICAgZW5kaWYgIC8vIFRB
UkdFVF9PU19JT1MKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9ydHNGZWF0dXJlU2V0
OmZlYXR1cmVTZXRdOwotI2VuZGlmICAgICAgLy8gVEFSR0VUX09TX0lPUyB8fCBUQVJHRVRfT1Nf
VFYKKyAgICByZXR1cm4gbXRsOjpTdXBwb3J0c0lPU0dQVUZhbWlseShnZXRNZXRhbERldmljZSgp
LCBpT1NGYW1pbHkpOwogfQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzTWFjR1BVRmFtaWx5
KHVpbnQ4X3QgbWFjRmFtaWx5KSBjb25zdAogewotI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUCi0jICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTUpCi0gICAgLy8gSWYg
ZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UgaXQu
Ci0gICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQygxMC4xNSwgMTMuMCkpCi0gICAgewot
ICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OwotCi0gICAgICAgIHN3aXRjaCAobWFjRmFtaWx5
KQotICAgICAgICB7Ci0jICAgICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICAgICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWNDYXRh
bHlzdDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5c3QyOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotIyAgICAgICAgZWxzZSAgIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVAot
ICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWls
eU1hYzE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSMgICAgICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIFtnZXRNZXRhbERldmljZSgpIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07
Ci0gICAgfSAgLy8gTWV0YWwgMi4yCi0jICAgIGVuZGlmCi0KLSAgICAvLyBJZiBkZXZpY2UgZG9l
c24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKLSAgICAv
LyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgotIyAgICBpZiBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKLSAgICBVTlJFQUNIQUJMRSgpOwotICAgIHJldHVybiBmYWxzZTsKLSMgICAgZWxz
ZQotICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0Y2ggKG1hY0ZhbWlseSkK
LSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0
dXJlU2V0X21hY09TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSMgICAgICAg
IGlmIGRlZmluZWQoX19NQUNfMTBfMTQpCi0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZl
YXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAg
ICBicmVhazsKLSMgICAgICAgIGVuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBbZ2V0TWV0YWxEZXZpY2UoKSBzdXBwb3J0
c0ZlYXR1cmVTZXQ6ZmVhdHVyZVNldF07Ci0jICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKLSNlbHNlICAgICAgIC8vICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUND
QVRBTFlTVAotCi0gICAgcmV0dXJuIGZhbHNlOwotCi0jZW5kaWYKKyAgICByZXR1cm4gbXRsOjpT
dXBwb3J0c01hY0dQVUZhbWlseShnZXRNZXRhbERldmljZSgpLCBtYWNGYW1pbHkpOwogfQogCiBi
b29sIERpc3BsYXlNdGw6OnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KHVpbnQ4X3QgaU9TRmFtaWx5
LCB1aW50OF90IG1hY0ZhbWlseSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVm
ZmVyTXRsLmgKaW5kZXggYjQ1OGJkOTFiYmVmYWY2ZGRiMjIyNjRiNzgxZTNlODZjN2MzZjdlNi4u
NWU1Y2NlOWM1MWNmOGZiMmJmYmFkZmYxNTczMzVlYTczYTI0OThhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVm
ZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKQEAgLTIzLDEyICsyMywxNCBAQCBuYW1lc3BhY2Ug
bXRsCiBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2RlcjsKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIGNs
YXNzIENvbnRleHRNdGw7Ci1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworY2xhc3MgU3VyZmFjZU10
bDsKIAogY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCiB7CiAg
IHB1YmxpYzoKLSAgICBGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUsIGJvb2wgZmxpcFksIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpOworICAgIGV4
cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1ZmZlcik7CiAgICAgfkZyYW1l
YnVmZmVyTXRsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KSBvdmVycmlkZTsKIApAQCAtOTcsNyArOTksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZl
ck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKIAogICAgIGdsOjpSZWN0YW5nbGUgZ2V0Q29t
cGxldGVSZW5kZXJBcmVhKCkgY29uc3Q7CiAgICAgaW50IGdldFNhbXBsZXMoKSBjb25zdDsKLSAg
ICBXaW5kb3dTdXJmYWNlTXRsICpnZXRBdHRhY2hlZEJhY2tidWZmZXIoKSBjb25zdCB7IHJldHVy
biBtQmFja2J1ZmZlcjsgfQorICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqZ2V0QXR0YWNoZWRCYWNr
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KIAogICAgIGJvb2wgcmVuZGVy
UGFzc0hhc1N0YXJ0ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkgY29uc3Q7CiAgICAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwpAQCAtMTYyLDYgKzE2NCwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10
bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVy
ICplbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtdGw6OlJlbmRlclBhc3NEZXNjICZkZXNjKTsKIAorICAgIHZvaWQgb3ZlcnJpZGVDbGVhckNv
bG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNVExDbGVhckNvbG9yIGNsZWFyQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOworCiAgICAgYW5nbGU6OlJlc3VsdCB1cGRh
dGVDb2xvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgc2l6ZV90IGNv
bG9ySW5kZXhHTCk7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVEZXB0aFJlbmRlclRhcmdldChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVTdGVu
Y2lsUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKQEAgLTE2OSwxMSAr
MTc1LDM3IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDogcHVibGljIEZyYW1lYnVmZmVySW1wbAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0TXRsICoqY2FjaGVkUmVuZGVyVGFyZ2V0KTsK
IAorICAgIC8vIFRoaXMgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgdGhlIHJlbmRlciB0YXJnZXQn
cyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUgdGV4dHVyZSBpcyByZWFkYWJsZQorICAgIC8vIG9yIGNy
ZWF0ZSBhIGNvcHkgb2YgdGhhdCB0ZXh0dXJlIHRoYXQgaXMgcmVhZGFibGUgaWYgbm90LiBUaGlz
IGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkCisgICAgLy8gZm9yIHBhY2tlZCBkZXB0aCBzdGVu
Y2lsIHdoZXJlIHJlYWRpbmcgc3RlbmNpbCByZXF1aXJlcyBhIHN0ZW5jaWwgdmlldy4gSG93ZXZl
ciBpZiBhIHRleHR1cmUKKyAgICAvLyBoYXMgYm90aCByZW5kZXIgdGFyZ2V0LCBwaXhlbCBmb3Jt
YXQgdmlldyAmIHNoYWRlciByZWFkYWJsZSB1c2FnZSBmbGFncywgdGhlcmUgd2lsbCBiZQorICAg
IC8vIHNvbWUgZ2xpdGNoZXMgaGFwcGVuIGluIE1ldGFsIGZyYW1ld29yay4KKyAgICAvLyBTbyB0
aGUgc29sdXRpb24gaXMgY3JlYXRpbmcgYSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgd2l0aG91dCBw
aXhlbCBmb3JtYXQgdmlldyBmbGFnIGJ1dCBoYXMKKyAgICAvLyByZW5kZXIgdGFyZ2V0IGZsYWcs
IHRoZW4gZHVyaW5nIGJsaXR0aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVyZSBpcyBjb3BpZWQgdG8g
YW5vdGhlcgorICAgIC8vIGludGVybWlkaWF0ZSB0ZXh0dXJlIGhhdmluZyBwaXhlbCBmb3JtYXQg
dmlldyBmbGFnLCBidXQgbm90IHJlbmRlciB0YXJnZXQgZmxhZy4KKyAgICBhbmdsZTo6UmVzdWx0
IGdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZW5kZXJUYXJnZXRNdGwgJnJ0dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYg
KnJlYWRhYmxlRGVwdGhWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVh
ZGFibGVWaWV3TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmll
d0FyZWEpOworCiAgICAgYW5nbGU6OlJlc3VsdCByZWFkUGl4ZWxzVG9QQk8oY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmYXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYWNrUGl4ZWxzUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KSBj
b25zdDsKIAorICAgIGFuZ2xlOjpSZXN1bHQgcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93T3JkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
QnVmZmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpkc3RCdWZmZXIpIGNvbnN0OworCiAgICAgLy8gTk9U
RTogd2UgY2Fubm90IHVzZSBSZW5kZXJUYXJnZXRDYWNoZSBoZXJlIGJlY2F1c2UgaXQgZG9lc24n
dCBzdXBwb3J0IHNlcGFyYXRlCiAgICAgLy8gZGVwdGggJiBzdGVuY2lsIGF0dGFjaG1lbnRzIGFz
IG9mIG5vdy4gU2VwYXJhdGUgZGVwdGggJiBzdGVuY2lsIGNvdWxkIGJlIHVzZWZ1bCB0bwogICAg
IC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1BhY2tlZERlcHRoU3RlbmNp
bFN1cHBvcnQubWQuCkBAIC0xODksOCArMjIxLDEwIEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDog
cHVibGljIEZyYW1lYnVmZmVySW1wbAogICAgIC8vIGFzIGJ5IGEgY29tcHV0ZSBwYXNzLgogICAg
IGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CiAKLSAgICBXaW5kb3dTdXJmYWNl
TXRsICptQmFja2J1ZmZlciA9IG51bGxwdHI7Ci0gICAgY29uc3QgYm9vbCBtRmxpcFkgICAgICAg
ICAgICAgPSBmYWxzZTsKKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1CYWNrYnVmZmVyID0gbnVs
bHB0cjsKKyAgICBjb25zdCBib29sIG1GbGlwWSAgICAgICAgICAgICAgID0gZmFsc2U7CisKKyAg
ICBtdGw6OkJ1ZmZlclJlZiBtUmVhZFBpeGVsQnVmZmVyOwogfTsKIH0gIC8vIG5hbWVzcGFjZSBy
eAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KaW5kZXggODRlNDIy
NzBhNzE1MzA3NzVhNzA4NmQ3MjcyNGRiZjkxOWM4NGFkNy4uZDcxZGU3MmQyZGQyNTFiMjhiYTZj
YzlmZmZjMTE1MzNjMDFkMDJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5tbQpAQCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKICAgICAqY29sb3JPdXQgPQogICAgICAgICBt
dGw6OkVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKGNsZWFyQ29sb3IudG9NVExDbGVhckNvbG9yKCks
IHRleHR1cmUtPmdldENvbG9yV3JpdGFibGVNYXNrKCkpOwogfQorCitjb25zdCBnbDo6SW50ZXJu
YWxGb3JtYXQgJkdldFJlYWRBdHRhY2htZW50SW5mbyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KQoreworICAgIEdMZW51bSBpbXBsRm9ybWF0OworCisg
ICAgaWYgKHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpKQorICAgIHsK
KyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCktPmFjdHVhbEFu
Z2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgaW1wbEZvcm1hdCA9IEdMX05PTkU7CisgICAgfQorCisgICAg
cmV0dXJuIGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0SW5mbyhpbXBsRm9ybWF0KTsKK30KKwog
fQogCiAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgogRnJhbWVidWZmZXJNdGw6OkZy
YW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKQogICAgIDogRnJh
bWVidWZmZXJJbXBsKHN0YXRlKSwgbUJhY2tidWZmZXIoYmFja2J1ZmZlciksIG1GbGlwWShmbGlw
WSkKIHsKICAgICByZXNldCgpOwpAQCAtNTUsNiArNzMsOCBAQCB2b2lkIEZyYW1lYnVmZmVyTXRs
OjpyZXNldCgpCiAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5jaWxSZW5kZXJUYXJnZXQg
PSBudWxscHRyOwogCiAgICAgbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZvcm1hdCA9
IG51bGxwdHI7CisKKyAgICBtUmVhZFBpeGVsQnVmZmVyID0gbnVsbHB0cjsKIH0KIAogdm9pZCBG
cmFtZWJ1ZmZlck10bDo6ZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAgLTEy
Miw3ICsxNDIsNiBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZ2
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCiB7CiAgICAgbXRsOjpDbGVh
clJlY3RQYXJhbXMgY2xlYXJPcHRzOwotCiAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29s
b3JCdWZmZXJzOwogICAgIGlmIChidWZmZXIgPT0gR0xfREVQVEgpCiAgICAgewpAQCAtMTMzLDcg
KzE1Miw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZnYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChk
cmF3YnVmZmVyKTsKICAgICAgICAgY2xlYXJPcHRzLmNsZWFyQ29sb3IgPSBtdGw6OkNsZWFyQ29s
b3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOwogICAg
IH0KLQogICAgIHJldHVybiBjbGVhckltcGwoY29udGV4dCwgY2xlYXJDb2xvckJ1ZmZlcnMsICZj
bGVhck9wdHMpOwogfQogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1
aXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0xNDUsOCArMTYzLDcgQEAgYW5nbGU6
OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgY2xlYXJDb2xvckJ1ZmZlcnMuc2V0KGRyYXdidWZmZXIpOwogCiAgICAg
bXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOwotICAgIGNsZWFyT3B0cy5jbGVhckNvbG9y
ID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwg
dmFsdWVzWzNdKTsKLQorICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gIG10bDo6Q2xlYXJDb2xv
clZhbHVlKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7CiAgICAg
cmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBjbGVhckNvbG9yQnVmZmVycywgJmNsZWFyT3B0cyk7
CiB9CiBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcml2KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LApAQCAtMTU5LDcgKzE3Niw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJh
bWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyaXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JCdWZmZXJzOwogICAgIGlmIChidWZmZXIg
PT0gR0xfU1RFTkNJTCkKICAgICB7Ci0gICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSB2
YWx1ZXNbMF0gJiBtdGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICAgICAgY2xlYXJPcHRzLmNsZWFy
U3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRpY19jYXN0PEdMaW50PihtdGw6
OmtTdGVuY2lsTWFza0FsbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTc3LDcgKzE5
NCw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgbXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJP
cHRzOwogICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsKLSAgICBjbGVhck9wdHMu
Y2xlYXJTdGVuY2lsID0gc3RlbmNpbCAmIG10bDo6a1N0ZW5jaWxNYXNrQWxsOworICAgIGNsZWFy
T3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAoc3RlbmNpbCwgMCwgc3RhdGljX2Nhc3Q8R0xp
bnQ+KG10bDo6a1N0ZW5jaWxNYXNrQWxsKSk7CiAKICAgICByZXR1cm4gY2xlYXJJbXBsKGNvbnRl
eHQsIGdsOjpEcmF3QnVmZmVyTWFzaygpLCAmY2xlYXJPcHRzKTsKIH0KQEAgLTE4NSwxMiArMjAy
LDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJmaShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmRnJhbWVidWZm
ZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAogICAgIGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KSBjb25zdAogewotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgICA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKLSAgICBHTGVudW0gc2l6ZWRGb3JtYXQgICAgICAgPSBt
U3RhdGUuZ2V0UmVhZEF0dGFjaG1lbnQoKS0+Z2V0Rm9ybWF0KCkuaW5mby0+c2l6ZWRJbnRlcm5h
bEZvcm1hdDsKLSAgICBhbmdsZTo6Rm9ybWF0SUQgZm9ybWF0SUQgPSBhbmdsZTo6Rm9ybWF0OjpJ
bnRlcm5hbEZvcm1hdFRvSUQoc2l6ZWRGb3JtYXQpOwotICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZt
dGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBpeGVsRm9ybWF0KGZvcm1h
dElEKTsKLSAgICBHTGVudW0gaW1wbEZvcm1hdCAgICAgICAgICAgID0gbXRsRm9ybWF0LmFjdHVh
bEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKLSAgICByZXR1
cm4gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXRJbmZvKGltcGxGb3JtYXQpOworICAgIHJldHVy
biBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JSZWFkUmVuZGVyVGFyZ2V0
KGNvbnRleHQpKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVs
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTU5MCw2ICs2MDIsOSBAQCBhbmdsZTo6
UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpzeW5jU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uRHJhd0ZyYW1lQnVmZmVy
Q2hhbmdlZFN0YXRlKGNvbnRleHQsIHRoaXMsIHJlbmRlclBhc3NDaGFuZ2VkKTsKICAgICAgICAg
fQorCisgICAgICAgIC8vIFJlY3JlYXRlIHBpeGVsIHJlYWRpbmcgYnVmZmVyIGlmIG5lZWRlZCBp
biBmdXR1cmUuCisgICAgICAgIG1SZWFkUGl4ZWxCdWZmZXIgPSBudWxscHRyOwogICAgIH0KIAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTc0OCw3ICs3NjMsNyBAQCB2
b2lkIEZyYW1lYnVmZmVyTXRsOjpvblN0YXJ0ZWREcmF3aW5nVG9GcmFtZUJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkKIAogdm9pZCBGcmFtZWJ1ZmZlck10bDo6b25GcmFtZUVuZChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBpZiAoIW1CYWNrYnVmZmVyKQorICAg
IGlmICghbUJhY2tidWZmZXIgfHwgbUJhY2tidWZmZXItPnByZXNlcnZlQnVmZmVyKCkpCiAgICAg
ewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODEyLDYgKzgyNyw5MiBAQCBhbmdsZTo6UmVz
dWx0IEZyYW1lYnVmZmVyTXRsOjp1cGRhdGVDYWNoZWRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAor
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVWaWV3Rm9yUmVuZGVyVGFy
Z2V0KAorICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgIGNvbnN0IFJlbmRlclRh
cmdldE10bCAmcnR0LAorICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorICAgIG10
bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0aFZpZXdPdXQsCisgICAgbXRsOjpUZXh0dXJlUmVm
ICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0LAorICAgIHVpbnQzMl90ICpyZWFkYWJsZVZpZXdMZXZl
bCwKKyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisgICAgZ2w6OlJlY3RhbmdsZSAq
cmVhZGFibGVWaWV3QXJlYSkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgICA9IG10
bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBtdGw6OlRleHR1cmVSZWYgc3JjVGV4dHVyZSA9IHJ0
dC5nZXRUZXh0dXJlKCk7CisgICAgdWludDMyX3QgbGV2ZWwgICAgICAgICAgICAgPSBydHQuZ2V0
TGV2ZWxJbmRleCgpLmdldCgpOworICAgIHVpbnQzMl90IHNsaWNlICAgICAgICAgICAgID0gcnR0
LmdldExheWVySW5kZXgoKTsKKworICAgIC8vIE5PVEUoaHFsZSk6IHNsaWNlIGlzIG5vdCB1c2Vk
IGF0bS4KKyAgICBBU1NFUlQoc2xpY2UgPT0gMCk7CisKKyAgICBib29sIHJlYWRTdGVuY2lsID0g
cmVhZGFibGVTdGVuY2lsVmlld091dDsKKworICAgIGlmICghc3JjVGV4dHVyZSkKKyAgICB7Cisg
ICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091dCkKKyAgICAgICAgeworICAgICAgICAgICAg
KnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVhZGFibGVTdGVuY2lsVmlld091dCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlYWRhYmxl
U3RlbmNpbFZpZXdPdXQgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgICpyZWFkYWJsZVZp
ZXdBcmVhID0gcmVhZEFyZWE7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKKyAgICB9CisKKyAgICBib29sIHNraXBDb3B5ID0gc3JjVGV4dHVyZS0+aXNTaGFkZXJSZWFk
YWJsZSgpOworICAgIGlmIChydHQuZ2V0Rm9ybWF0KCktPmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMo
KSAmJiByZWFkU3RlbmNpbCkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHBh
Y2tlZCBkZXB0aCBzdGVuY2lsLCBhbmQgd2UgbmVlZCBzdGVuY2lsIHZpZXcsCisgICAgICAgIC8v
IHRoZW4gaXQgbXVzdCBzdXBwb3J0IGNyZWF0aW5nIGRpZmZlcmVudCBmb3JtYXQgdmlldy4KKyAg
ICAgICAgc2tpcENvcHkgPSBza2lwQ29weSAmJiBzcmNUZXh0dXJlLT5zdXBwb3J0Rm9ybWF0Vmll
dygpOworICAgIH0KKworICAgIGlmIChza2lwQ29weSkKKyAgICB7CisgICAgICAgIC8vIFRleHR1
cmUgc3VwcG9ydHMgc3RlbmNpbCB2aWV3LCBqdXN0IHVzZSBpdCBkaXJlY3RseQorICAgICAgICBp
ZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJs
ZURlcHRoVmlld091dCA9IHNyY1RleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRh
YmxlU3RlbmNpbFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5j
aWxWaWV3T3V0ID0gc3JjVGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICAqcmVhZGFibGVWaWV3
TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0gc2xpY2U7CisgICAg
ICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IHJlYWRBcmVhOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBBU1NFUlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSAhPSBNVExUZXh0dXJl
VHlwZTNEKTsKKworICAgICAgICAvLyBUZXh0dXJlIGRvZXNuJ3Qgc3VwcG9ydCBzdGVuY2lsIHZp
ZXcgb3Igbm90IHNoYWRlciByZWFkYWJsZSwgY29weSB0byBhbiBpbnRlcm1pbmF0ZQorICAgICAg
ICAvLyB0ZXh0dXJlIHRoYXQgc3VwcG9ydHMgc3RlbmNpbCB2aWV3IGFuZCBzaGFkZXIgcmVhZC4K
KyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0gc3JjVGV4dHVyZS0+Z2V0
UmVhZGFibGVDb3B5KAorICAgICAgICAgICAgY29udGV4dE10bCwgY29udGV4dE10bC0+Z2V0Qmxp
dENvbW1hbmRFbmNvZGVyKCksIGxldmVsLCBzbGljZSwKKyAgICAgICAgICAgIE1UTFJlZ2lvbk1h
a2UyRChyZWFkQXJlYS54LCByZWFkQXJlYS55LCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVp
Z2h0KSk7CisKKyAgICAgICAgQU5HTEVfQ0hFQ0tfR0xfQUxMT0MoY29udGV4dE10bCwgZm9ybWF0
YWJsZVZpZXcpOworCisgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091dCkKKyAgICAgICAg
eworICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gZm9ybWF0YWJsZVZpZXc7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gZm9ybWF0YWJsZVZpZXctPmdl
dFN0ZW5jaWxWaWV3KCk7CisgICAgICAgIH0KKworICAgICAgICAqcmVhZGFibGVWaWV3TGV2ZWwg
PSAwOworICAgICAgICAqcmVhZGFibGVWaWV3TGF5ZXIgPSAwOworICAgICAgICAqcmVhZGFibGVW
aWV3QXJlYSAgPSBnbDo6UmVjdGFuZ2xlKDAsIDAsIHJlYWRBcmVhLndpZHRoLCByZWFkQXJlYS5o
ZWlnaHQpOworICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30K
KwogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJlbmRlclBhc3MoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlclBhc3NEZXNjICpwRGVzY091dCkKIHsKQEAgLTgzMiw5
ICs5MzMsOSBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpwcmVwYXJlUmVuZGVyUGFz
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgaWYgKGNvbG9yUmVuZGVyVGFy
Z2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb2xvclJlbmRlclRhcmdldC0+dG9SZW5kZXJQ
YXNzQXR0YWNobWVudERlc2MoJmNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICBkZXNjLnNh
bXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgY29sb3JSZW5kZXJUYXJnZXQt
PmdldFJlbmRlclNhbXBsZXMoKSk7CiAKICAgICAgICAgICAgIGRlc2MubnVtQ29sb3JBdHRhY2ht
ZW50cyA9IHN0ZDo6bWF4KGRlc2MubnVtQ29sb3JBdHRhY2htZW50cywgY29sb3JJbmRleEdMICsg
MSk7Ci0gICAgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVD
b3VudCwgY29sb3JSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CiAKICAgICAgICAg
ICAgIGlmICghbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZvcm1hdCkKICAgICAgICAg
ICAgIHsKQEAgLTg2MiwyMiArOTYzLDI5IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6
OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICBt
RGVwdGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLmRlcHRo
QXR0YWNobWVudCk7CiAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNh
bXBsZUNvdW50LCBtRGVwdGhSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CiAgICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGRlc2MuZGVwdGhBdHRhY2htZW50LnJlc2V0KCk7
Ci0gICAgfQogCiAgICAgaWYgKG1TdGVuY2lsUmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAg
bVN0ZW5jaWxSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLnN0
ZW5jaWxBdHRhY2htZW50KTsKICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRl
c2Muc2FtcGxlQ291bnQsIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkp
OwogICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworLy8g
T3ZlcnJpZGUgY2xlYXIgY29sb3IgYmFzZWQgb24gdGV4dHVyZSdzIHdyaXRlIG1hc2sKK3ZvaWQg
RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xl
YXJDb2xvciBjbGVhckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1UTENsZWFyQ29sb3IgKmNvbG9yT3V0KQoreworICAgIGlmICh0ZXh0dXJlKQorICAgIHsK
KyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFscGhhQ2xlYXJDb2xvcihjbGVhckNv
bG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygpKTsKKyAgICB9CiAgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgZGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZXNldCgpOworICAgICAgICAq
Y29sb3JPdXQgPSBjbGVhckNvbG9yOwogICAgIH0KLQotICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJXaXRo
TG9hZE9wKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtOTIzLDcgKzEwMzEsNyBAQCBh
bmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3BSZW5kZXJQYXNzTm90
U3RhcnRlZCgKIAogICAgICAgICBtdGw6OlJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZj
b2xvckF0dGFjaG1lbnQgPQogICAgICAgICAgICAgdGVtcERlc2MuY29sb3JBdHRhY2htZW50c1tj
b2xvckluZGV4R0xdOwotICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBj
b2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0
ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1cmUoKTsKIAogICAgICAgICBpZiAoY2xlYXJD
b2xvckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQogICAgICAgICB7CkBAIC05NjYsNyArMTA3
NCw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRPcFJlbmRl
clBhc3NTdGFydGVkKAogCiAgICAgICAgIG10bDo6UmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERl
c2MgJmNvbG9yQXR0YWNobWVudCA9CiAgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuY29sb3JB
dHRhY2htZW50c1tjb2xvckluZGV4R0xdOwotICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUgPSBjb2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICAgICAgY29uc3QgbXRsOjpU
ZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1cmUoKTsKIAogICAgICAg
ICBpZiAoY2xlYXJDb2xvckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQogICAgICAgICB7CkBA
IC0xMTkzLDggKzEzMDEsOSBAQCBnbDo6UmVjdGFuZ2xlIEZyYW1lYnVmZmVyTXRsOjpnZXRDb3Jy
ZWN0RmxpcHBlZFJlYWRBcmVhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZQogICAgIGdsOjpSZWN0
YW5nbGUgZmxpcHBlZEFyZWEgPSBnbEFyZWE7CiAgICAgaWYgKG1GbGlwWSkKICAgICB7Ci0gICAg
ICAgIGZsaXBwZWRBcmVhLnkgPSByZWFkUlQtPmdldFRleHR1cmUoKS0+aGVpZ2h0KHJlYWRSVC0+
Z2V0TGV2ZWxJbmRleCgpKSAtIGZsaXBwZWRBcmVhLnkgLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZmxpcHBlZEFyZWEuaGVpZ2h0OworICAgICAgICBmbGlwcGVkQXJlYS55ID0KKyAgICAgICAg
ICAgIHJlYWRSVC0+Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVhZFJULT5nZXRMZXZlbEluZGV4KCkp
IC0KKyAgICAgICAgICAgIGZsaXBwZWRBcmVhLnkgLSBmbGlwcGVkQXJlYS5oZWlnaHQ7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZsaXBwZWRBcmVhOwpAQCAtMTIxMSw3ICsxMzIwLDYgQEAgYW5nbGU6
OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
CiAgICAgfQotCiAgICAgaWYgKHBhY2tQaXhlbHNQYXJhbXMucGFja0J1ZmZlcikKICAgICB7CiAg
ICAgICAgIHJldHVybiByZWFkUGl4ZWxzVG9QQk8oY29udGV4dCwgYXJlYSwgcGFja1BpeGVsc1Bh
cmFtcywgcmVuZGVyVGFyZ2V0KTsKQEAgLTEyNjEsNyArMTM2OSw3IEBAIGFuZ2xlOjpSZXN1bHQg
RnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogCiAgICAgICAgIC8vIENvbnZlcnQgdG8gZGVzdGluYXRpb24gZm9ybWF0CiAgICAgICAgIFBh
Y2tQaXhlbHMocGFja1BpeGVsc1Jvd1BhcmFtcywgcmVhZEFuZ2xlRm9ybWF0LCBidWZmZXJSb3dQ
aXRjaCwgcmVhZFBpeGVsUm93QnVmZmVyLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICBwaXhl
bHMpOworICAgICAgICAgICBwaXhlbHMpOwogICAgIH0KIAogICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKQEAgLTEyNzksMTkgKzEzODcsMzYgQEAgYW5nbGU6OlJlc3VsdCBGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
CiAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRleHRNdGwsIHBhY2tQaXhlbHNQYXJhbXMub2Zmc2V0
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKICAgICAgICAgICAgICAg
ICAgICAgR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIGNvbnN0IHVpbnQzMl90IGRzdEJ1ZmZl
ck9mZnNldCAgICAgID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhY2tQaXhlbHNQYXJhbXMub2Zm
c2V0KTsKLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCAgICA9IHBhY2tQaXhl
bHNQYXJhbXMub3V0cHV0UGl0Y2g7Ci0gICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVG
b3JtYXQgPSAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9ybWF0OwotICAgIGNvbnN0IGJvb2wgcmV2
ZXJzZVJvd09yZGVyICAgICAgICAgID0gcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXI7
CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhY2tQaXhlbHNQ
YXJhbXMub2Zmc2V0KTsKIAogICAgIEJ1ZmZlck10bCAqcGFja0J1ZmZlck10bCA9IG10bDo6R2V0
SW1wbChwYWNrUGl4ZWxzUGFyYW1zLnBhY2tCdWZmZXIpOwogICAgIG10bDo6QnVmZmVyUmVmIGRz
dEJ1ZmZlciA9IHBhY2tCdWZmZXJNdGwtPmdldEN1cnJlbnRCdWZmZXIoKTsKIAorICAgIHJldHVy
biByZWFkUGl4ZWxzVG9CdWZmZXIoY29udGV4dCwgYXJlYSwgcmVuZGVyVGFyZ2V0LCBwYWNrUGl4
ZWxzUGFyYW1zLnJldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpwYWNrUGl4ZWxzUGFyYW1zLmRlc3RGb3JtYXQsIG9mZnNldCwgcGFja1BpeGVsc1BhcmFtcy5v
dXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkc3RCdWZmZXIpOwor
fQorCithbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRN
dGwgKnJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZkc3RBbmdsZUZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0QnVmZmVyUm93UGl0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJS
ZWYgKnBEc3RCdWZmZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlclRhcmdldCk7CisKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworCiAgICAg
Y29uc3QgbXRsOjpGb3JtYXQgJnJlYWRGb3JtYXQgICAgICAgID0gKnJlbmRlclRhcmdldC0+Z2V0
Rm9ybWF0KCk7CiAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmcmVhZEFuZ2xlRm9ybWF0ID0gcmVh
ZEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpOwogCiAgICAgbXRsOjpUZXh0dXJlUmVmIHRleHR1
cmUgPSByZW5kZXJUYXJnZXQtPmdldFRleHR1cmUoKTsKIAorICAgIGNvbnN0IG10bDo6QnVmZmVy
UmVmICZkc3RCdWZmZXIgPSAqcERzdEJ1ZmZlcjsKKwogICAgIGlmIChkc3RBbmdsZUZvcm1hdC5p
ZCAhPSByZWFkQW5nbGVGb3JtYXQuaWQgfHwgdGV4dHVyZS0+c2FtcGxlcygpID4gMSB8fAogICAg
ICAgICAoZHN0QnVmZmVyT2Zmc2V0ICUgZHN0QW5nbGVGb3JtYXQucGl4ZWxCeXRlcykgfHwKICAg
ICAgICAgKGRzdEJ1ZmZlck9mZnNldCAlIG10bDo6a1RleHR1cmVUb0J1ZmZlckJsaXR0aW5nQWxp
Z25tZW50KSkKQEAgLTEzNTksOCArMTQ4NCw4IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJN
dGw6OnJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgICAg
ICAgICAgdWludDMyX3QgYnVmZmVyUm93T2Zmc2V0ID0gZHN0QnVmZmVyT2Zmc2V0OwogICAgICAg
ICAgICAgLy8gQ29weSBwaXhlbHMgcm93IGJ5IHJvdwotICAgICAgICAgICAgZm9yIChpbnQgciA9
IHN0YXJ0Um93LCBjb3BpZWRSb3dzID0gMDsgY29waWVkUm93cyA8IGFyZWEuaGVpZ2h0OwotICAg
ICAgICAgICAgICAgICArK2NvcGllZFJvd3MsIC0tciwgYnVmZmVyUm93T2Zmc2V0ICs9IGRzdEJ1
ZmZlclJvd1BpdGNoKQorICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0YXJ0Um93LCBpID0gMDsg
aSA8IGFyZWEuaGVpZ2h0OworICAgICAgICAgICAgICAgICArK2ksIC0tciwgYnVmZmVyUm93T2Zm
c2V0ICs9IGRzdEJ1ZmZlclJvd1BpdGNoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHNyY1Jvd1JlZ2lvbi55ID0gcjsKIApAQCAtMTM3NSw1ICsxNTAwLDQgQEAgYW5nbGU6OlJlc3Vs
dCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NTQ4ZTVkYjkwOWJhOGJlNDQwZTE5ZjQyMTc3MmRkZDFmM2VhNjE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lP
U3VyZmFjZVN1cmZhY2VNdGwuaApAQCAtMCwwICsxLDEyNiBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRMX0hfCisjZGVmaW5l
IExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX0lPU1VSRkFDRVNVUkZBQ0VNVExfSF8KKworI2luY2x1
ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2VSZWYuaD4KKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9TdXJmYWNlSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgi
CisKK25hbWVzcGFjZSBtZXRhbAoreworY2xhc3MgQXR0cmlidXRlTWFwOworfSAgLy8gbmFtZXNw
YWNlIG1ldGFsCisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBEaXNwbGF5TVRMOworCitjbGFz
cyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVibGljIFN1cmZhY2VNdGxQcm90b2NvbAoreworICBw
dWJsaWM6CisgICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKKyAgICB+SU9T
dXJmYWNlU3VyZmFjZU10bCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBkZXN0cm95KGNvbnN0IGVn
bDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7CisKKyAgICBlZ2w6OkVycm9yIGluaXRpYWxp
emUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KSBvdmVycmlkZTsKKyAgICBGcmFtZWJ1ZmZl
ckltcGwgKmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBt
YWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWds
OjpFcnJvciB1bk1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlk
ZTsKKyAgICBlZ2w6OkVycm9yIHN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJy
aWRlOworICAgIGVnbDo6RXJyb3IgcG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBoZWln
aHQpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUo
RUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9y
IGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHJlbGVhc2VU
ZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikgb3ZlcnJp
ZGU7CisgICAgZWdsOjpFcnJvciBnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2NEtIUiAqdXN0LCBFR0x1
aW50NjRLSFIgKm1zYywgRUdMdWludDY0S0hSICpzYmMpIG92ZXJyaWRlOworICAgIGVnbDo6RXJy
b3IgZ2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpkZW5vbWluYXRvcikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldEZpeGVkV2lkdGgoRUdMaW50IHdpZHRoKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgLy8gV2lk
dGggY2FuIGNoYW5nZSB3aGVuIHRoZSBjbGllbnQgd2luZG93IHJlc2l6ZXMuCisgICAgRUdMaW50
IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gSGVpZ2h0IGNhbiBjaGFuZ2Ugd2hl
biB0aGUgY2xpZW50IHdpbmRvdyByZXNpemVzLgorICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIEVHTGludCBpc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBFR0xpbnQgZ2V0U3dhcEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBiaW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7CisKKyAgICBhbmdsZTo6UmVzdWx0IGVu
c3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBv
dmVycmlkZTsKKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVk
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQpIG92ZXJyaWRlOworICAg
IGludCBnZXRTYW1wbGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMTsgfQorICAgIGJvb2wg
cHJlc2VydmVCdWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIG10
bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAg
ICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQ
aXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQorICAgIGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUlPU3VyZmFj
ZVRleHR1cmU7IH0KKworICBwcml2YXRlOgorICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlVGV4dHVy
ZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgIGFuZ2xlOjpSZXN1bHQg
Y3JlYXRlQmFja2luZ1RleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgIGFu
Z2xlOjpSZXN1bHQgY3JlYXRlVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYgKnRleHR1cmVPdXQpOworCisgICAgYW5n
bGU6OlJlc3VsdCBpbml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBHTHVpbnQgdGV4dHVyZSk7CisKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19T
SU1VTEFUT1IpCisgICAgSU9TdXJmYWNlTG9ja09wdGlvbnMgZ2V0SU9TdXJmYWNlTG9ja09wdGlv
bnMoKSBjb25zdDsKKyNlbmRpZgorCisgICAgQ29udGV4dE10bCAqY29udGV4dE1UTDsKKyAgICBJ
T1N1cmZhY2VSZWYgbUlPU3VyZmFjZTsKKyAgICBtdGw6OlRleHR1cmVSZWYgbUlPU3VyZmFjZVRl
eHR1cmU7CisgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlVmlldzsKKyAgICBt
dGw6OkZvcm1hdCBtRm9ybWF0OworICAgIG10bDo6Rm9ybWF0IG1JbnRlcm5hbEZvcm1hdDsKKyAg
ICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKKyAgICBib29sIG1JT1N1cmZhY2VUZXh0
dXJlQ3JlYXRlZDsKKyAgICBpbnQgbVdpZHRoOworICAgIGludCBtSGVpZ2h0OworICAgIGludCBt
UGxhbmU7CisgICAgaW50IG1Gb3JtYXRJbmRleDsKKyAgICBpbnQgbVJvd1N0cmlkZUluUGl4ZWxz
OworCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQorICAgIEdMdWlu
dCBtQm91bmRUZXh0dXJlSUQ7CisgICAgYm9vbCBtVXBsb2FkRnJvbUlPU3VyZmFjZTsKKyAgICBi
b29sIG1SZWFkYmFja1RvSU9TdXJmYWNlOworI2VuZGlmCit9OworCit9ICAvLyBuYW1lc3BhY2Ug
cngKKworI2VuZGlmICAvLyBMSUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdMX0lPU1VSRkFDRVNVUkZB
Q0VFQUdMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRs
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNjY2M3NmE3MGMzNmI2NDM0MmVjZGFjOWU0MDBhNDA5MjdmOGRmZjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbQpAQCAtMCwwICsxLDQ2NyBAQAor
Ly8KKy8vIENvcHlyaWdodCAyMDE5IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKy8vIElPU3VyZmFjZVN1cmZhY2VNdGwubW06CisvLyAgICBJbXBsZW1lbnRzIHRo
ZSBjbGFzcyBtZXRob2RzIGZvciBJT1N1cmZhY2VTdXJmYWNlTXRsLgorLy8KKworI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCIKKworI2luY2x1
ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorCisjaW5jbHVkZSAibGliQU5HTEUvRGlzcGxheS5o
IgorI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1l
QnVmZmVyTXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF91dGlscy5oIgorCisvLyBDb21waWxlciBjYW4gdHVybiBvbiBwcm9ncmFtbWF0aWNhbCBmcmFt
ZSBjYXB0dXJlIGluIHJlbGVhc2UgYnVpbGQgYnkgZGVmaW5pbmcKKy8vIEFOR0xFX01FVEFMX0ZS
QU1FX0NBUFRVUkUgZmxhZy4KKyNpZiBkZWZpbmVkKE5ERUJVRykgJiYgIWRlZmluZWQoQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRSkKKyMgICAgZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkVfRU5BQkxFRCAwCisjZWxzZQorIyAgICBkZWZpbmUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVS
RV9FTkFCTEVEIEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSQorI2VuZGlmCituYW1lc3BhY2Ug
cngKK3sKKworbmFtZXNwYWNlCit7CisKK3N0cnVjdCBJT1N1cmZhY2VGb3JtYXRJbmZvCit7Cisg
ICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworICAgIEdMZW51bSB0eXBlOworICAgIGFuZ2xlOjpG
b3JtYXRJRCBwaXhlbEZvcm1hdDsKKyAgICBhbmdsZTo6Rm9ybWF0SUQgaW50ZXJuYWxQaXhlbEZv
cm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBJT1N1cmZhY2VGb3JtYXRJbmZvIGtJT1N1cmZhY2VG
b3JtYXRzW10gPSB7CisgICAge0dMX1JFRCwgR0xfVU5TSUdORURfQllURSwgYW5nbGU6OkZvcm1h
dElEOjpSOF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpSOF9VTk9STX0sCisgICAge0dMX1IxNlVJ
LCBHTF9VTlNJR05FRF9TSE9SVCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZfVUlOVCwgYW5nbGU6
OkZvcm1hdElEOjpSMTZHMTZfVUlOVH0sCisgICAge0dMX1JHLCBHTF9VTlNJR05FRF9CWVRFLCBh
bmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STX0s
CisgICAge0dMX1JHQiwgR0xfVU5TSUdORURfQllURSwgYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhB
OF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCisgICAge0dMX0JHUkFf
RVhULCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNLAor
ICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKKyAgICB7R0xfUkdCMTBfQTIs
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgYW5nbGU6OkZvcm1hdElEOjpSMTBHMTBC
MTBBMl9VTk9STSwKKyAgICAgYW5nbGU6OkZvcm1hdElEOjpSMTBHMTBCMTBBMl9VTk9STX0sCisg
ICAge0dMX1JHQkEsIEdMX0hBTEZfRkxPQVQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2
X0ZMT0FULAorICAgICBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkExNl9GTE9BVH0sCit9Owor
CitpbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xl
bnVtIHR5cGUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9ybWF0cykpOyArK2kpCisgICAgeworICAgICAgICBj
b25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNbaV07CisgICAgICAgIGlm
IChmb3JtYXRJbmZvLmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdElu
Zm8udHlwZSA9PSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFRP
RE8oamN1bm5pbmdoYW0pIDogcmVmYWN0b3IgdGhpcyBhbmQgc3VyZmFjZW10bCB0byByZWR1Y2Ug
Y29weStwYXN0ZWQgY29kZQorCitBTkdMRV9NVExfVU5VU0VECitib29sIElzRnJhbWVDYXB0dXJl
RW5hYmxlZCgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAg
IHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGZyYW1lIGNhcHR1
cmUgcHJvZ3JhbW1hdGljYWxseSBpZiB0aGUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRQorICAg
IC8vIGVudmlyb25tZW50IGZsYWcgaXMgc2V0LiBPdGhlcndpc2UsIGl0IHdpbGwgc2xvdyBkb3du
IHRoZSByZW5kZXJpbmcuIFRoaXMgYWxsb3dzIHVzZXIgdG8KKyAgICAvLyBmaW5lbHkgY29udHJv
bCB3aGV0aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBmb3IgcGFydGljdWxhciBh
cHBsaWNhdGlvbiBvciBub3QuCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICA9IHN0ZDo6
Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFIik7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgZW5hYmxlZCA9IHZhciA/IChzdHJjbXAodmFyLCAiMSIpID09IDApIDogZmFsc2U7CisKKyAg
ICByZXR1cm4gZW5hYmxlZDsKKyNlbmRpZgorfQorCitBTkdMRV9NVExfVU5VU0VECitzdGQ6OnN0
cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQ
VFVSRV9FTkFCTEVECisgICAgcmV0dXJuICIiOworI2Vsc2UKKyAgICBhdXRvIHZhciAgICAgICAg
ICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0ZJTEUi
KTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6ICIiOworCisg
ICAgcmV0dXJuIGZpbGVQYXRoOworI2VuZGlmCit9CisKK0FOR0xFX01UTF9VTlVTRUQKK3NpemVf
dCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQ
VFVSRV9FTkFCTEVECisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIGF1dG8gdmFyICAgICAgICAg
ICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfTUFY
Iik7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZXMgPSB2YXIgPyBzdGQ6OmF0b2ko
dmFyKSA6IDEwMDsKKworICAgIHJldHVybiBtYXhGcmFtZXM7CisjZW5kaWYKK30KKworQU5HTEVf
TVRMX1VOVVNFRAorc2l6ZV90IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKQoreworI2lmICFBTkdM
RV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAg
YXV0byB2YXIgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9G
UkFNRV9DQVBUVVJFX01JTiIpOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRnJhbWUgPSB2
YXIgPyBzdGQ6OmF0b2kodmFyKSA6IDA7CisKKyAgICByZXR1cm4gbWluRnJhbWU7CisjZW5kaWYK
K30KKworQU5HTEVfTVRMX1VOVVNFRAorYm9vbCBGcmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpCit7
CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIHJldHVybiBmYWxz
ZTsKKyNlbHNlCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVu
digiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9TQ09QRSIpOworICAgIHN0YXRpYyBjb25zdCBi
b29sIHNjb3BlRGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZpY2UiKSA9PSAwKSA6IGZh
bHNlOworCisgICAgcmV0dXJuIHNjb3BlRGV2aWNlOworI2VuZGlmCit9CisKK0FOR0xFX01UTF9V
TlVTRUQKK3N0ZDo6YXRvbWljPHNpemVfdD4gZ0ZyYW1lQ2FwdHVyZWQoMCk7CisKK0FOR0xFX01U
TF9VTlVTRUQKK3ZvaWQgU3RhcnRGcmFtZUNhcHR1cmUoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSwgaWQ8TVRMQ29tbWFuZFF1ZXVlPiBtZXRhbENtZFF1ZXVlKQoreworI2lmIEFOR0xFX01FVEFM
X0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIGlmICghSXNGcmFtZUNhcHR1cmVFbmFibGVkKCkp
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdGcmFtZUNhcHR1cmVk
ID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBNVExDYXB0dXJlTWFuYWdlciAqY2FwdHVyZU1hbmFnZXIgPSBbTVRMQ2FwdHVy
ZU1hbmFnZXIgc2hhcmVkQ2FwdHVyZU1hbmFnZXJdOworICAgIGlmIChjYXB0dXJlTWFuYWdlci5p
c0NhcHR1cmluZykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnRnJhbWVD
YXB0dXJlZCsrOworCisgICAgaWYgKGdGcmFtZUNhcHR1cmVkIDwgTWluQWxsb3dlZEZyYW1lQ2Fw
dHVyZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworIyAgICBpZmRlZiBfX01B
Q18xMF8xNQorICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAx
MykpCisgICAgeworICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0
b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKyAgICAgICAgY2FwdHVy
ZURlc2NyaXB0b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoICAgICAgICAgICAgICA9IEdldE1ldGFsQ2FwdHVy
ZUZpbGUoKTsKKyAgICAgICAgaWYgKGZpbGVQYXRoICE9ICIiKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyBudW1iZXJlZFBhdGggPQorICAgICAgICAgICAgICAgIGZp
bGVQYXRoICsgc3RkOjp0b19zdHJpbmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2Ui
OworICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRpb24gPSBNVExDYXB0dXJl
RGVzdGluYXRpb25HUFVUcmFjZURvY3VtZW50OworICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0
b3Iub3V0cHV0VVJMID0KKyAgICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltO
U1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OmZhbHNlXTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBwYXVzZSBleGVj
dXRpb24gb25seSBpZiBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCBpbnNpZGUgWGNvZGUK
KyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURl
c3RpbmF0aW9uRGV2ZWxvcGVyVG9vbHM7CisgICAgICAgIH0KKworICAgICAgICBOU0Vycm9yICpl
cnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJlV2l0aERlc2Ny
aXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKKyAgICAgICAgeworICAgICAg
ICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorIyAgICBlbmRpZiAgLy8gX19NQUNfMTBfMTUK
KyAgICAgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzKSkK
KyAgICB7CisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9
IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAgICAgICBjYXB0dXJlRGVz
Y3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsKKworICAgICAgICBO
U0Vycm9yICplcnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJl
V2l0aERlc2NyaXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKKyAgICAgICAg
eworICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAi
LCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgIC8vIEFOR0xFX01FVEFMX0ZSQU1F
X0NBUFRVUkVfRU5BQkxFRAorfQorCit2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKENvbnRleHRNdGwg
KmNvbnRleHQpCit7CisgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4dC0+Z2V0TWV0YWxEZXZp
Y2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5nZXQoKSk7Cit9CisKK3ZvaWQgU3RvcEZyYW1lQ2Fw
dHVyZSgpCit7CisjaWYgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgaWYg
KCFJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgTVRMQ2FwdHVyZU1hbmFnZXIgKmNhcHR1cmVNYW5hZ2VyID0gW01UTENhcHR1cmVNYW5h
Z2VyIHNoYXJlZENhcHR1cmVNYW5hZ2VyXTsKKyAgICBpZiAoY2FwdHVyZU1hbmFnZXIuaXNDYXB0
dXJpbmcpCisgICAgeworICAgICAgICBbY2FwdHVyZU1hbmFnZXIgc3RvcENhcHR1cmVdOworICAg
IH0KKyNlbmRpZgorfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0lPU3VyZmFjZVN1
cmZhY2VNdGw6OklPU3VyZmFjZVN1cmZhY2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3Rh
dGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xD
bGllbnRCdWZmZXIgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKKyAgICA6IFN1cmZhY2VNdGxQ
cm90b2NvbChzdGF0ZSkKK3sKKyAgICAvLyBLZWVwIHJlZmVyZW5jZSB0byB0aGUgSU9TdXJmYWNl
IHNvIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlIHBidWZmZXIgZXhpc3RzLgorICAg
IG1JT1N1cmZhY2UgPSByZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJlZj4oYnVmZmVyKTsKKyAg
ICBDRlJldGFpbihtSU9TdXJmYWNlKTsKKworICAgIC8vIEV4dHJhY3QgYXR0cmlicyB1c2VmdWwg
Zm9yIHRoZSBjYWxsIHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisgICAgbVdpZHRoICA9IHN0
YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX1dJRFRIKSk7CisgICAgbUhlaWdodCA9IHN0
YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX0hFSUdIVCkpOworICAgIG1QbGFuZSAgPSBz
dGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsK
KyAgICAvLyBIb3BlZnVsbHkgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgcm93IGlzIGFsd2F5cyBh
biBpbnRlZ2VyIG51bWJlciBvZiBwaXhlbHMuIFdlIHVzZQorICAgIC8vIGdsUmVhZFBpeGVscyB0
byBmaWxsIHRoZSBJT1N1cmZhY2UgaW4gdGhlIHNpbXVsYXRvciBhbmQgaXQgY2FuIG9ubHkgc3Vw
cG9ydCBzdHJpZGVzIHRoYXQgYXJlCisgICAgLy8gYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxz
LgorICAgIEFTU0VSVChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUobUlPU3VyZmFjZSwg
bVBsYW5lKSAlCisgICAgICAgICAgICAgICBJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBs
YW5lKG1JT1N1cmZhY2UsIG1QbGFuZSkgPT0KKyAgICAgICAgICAgMCk7CisgICAgbVJvd1N0cmlk
ZUluUGl4ZWxzID0gc3RhdGljX2Nhc3Q8aW50PihJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxh
bmUobUlPU3VyZmFjZSwgbVBsYW5lKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5lKG1JT1N1cmZhY2Us
IG1QbGFuZSkpOworCisgICAgRUdMQXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQo
RUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFKTsKKyAgICBFR0xBdHRyaWIgdHlwZSAg
ICAgICAgICAgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9UWVBFX0FOR0xFKTsKKyAgICBtRm9y
bWF0SW5kZXggPQorICAgICAgICBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoc3RhdGljX2Nhc3Q8
R0xlbnVtPihpbnRlcm5hbEZvcm1hdCksIHN0YXRpY19jYXN0PEdMZW51bT4odHlwZSkpOworICAg
IEFTU0VSVChtRm9ybWF0SW5kZXggPj0gMCk7CisgICAgbUZvcm1hdCAgICAgICAgID0gZGlzcGxh
eS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5waXhlbEZv
cm1hdCk7CisgICAgbUludGVybmFsRm9ybWF0ID0gZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lP
U3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5pbnRlcm5hbFBpeGVsRm9ybWF0KTsKK30KKwor
SU9TdXJmYWNlU3VyZmFjZU10bDo6fklPU3VyZmFjZVN1cmZhY2VNdGwoKQoreworICAgIFN0b3BG
cmFtZUNhcHR1cmUoKTsKKyAgICBpZiAobUlPU3VyZmFjZSAhPSBudWxscHRyKQorICAgIHsKKyAg
ICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworICAgICAgICBtSU9TdXJmYWNlID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveShjb25zdCBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkpIHt9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10
bDo6aW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCit7CisgICAgRGlzcGxh
eU10bCAqZGlzcGxheU10bCAgICA9IG10bDo6R2V0SW1wbChkaXNwbGF5KTsKKyAgICBpZDxNVExE
ZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheU10bC0+Z2V0TWV0YWxEZXZpY2UoKTsKKworICAg
IFN0YXJ0RnJhbWVDYXB0dXJlKG1ldGFsRGV2aWNlLCBkaXNwbGF5TXRsLT5jbWRRdWV1ZSgpLmdl
dCgpKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK0ZyYW1lYnVmZmVySW1wbCAq
SU9TdXJmYWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRl
KQoreworICAgIGF1dG8gZmJvID0gbmV3IEZyYW1lYnVmZmVyTXRsKHN0YXRlLCAvKiBmbGlwWSAq
LyB0cnVlLCAvKiBiYWNrYnVmZmVyICovIHRoaXMpOworICAgIHJldHVybiBmYm87Cit9CisKK2Vn
bDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6bWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1w
bChjb250ZXh0KTsKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0TXRsKTsKKyAgICByZXR1
cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6
dW5NYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBTdG9wRnJh
bWVDYXB0dXJlKCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9y
IElPU3VyZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgU3RvcEZyYW1lQ2FwdHVyZSgpOworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBt
dGw6OkdldEltcGwoY29udGV4dCk7CisgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4dE10bCk7
CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1
cmZhY2VNdGw6OnBvc3RTdWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBoZWln
aHQpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2Vz
cygpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnF1ZXJ5U3VyZmFjZVBv
aW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCit7CisgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCitlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlICp0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRUdMaW50IGJ1ZmZlcikKK3sKKworICAgIGFuZ2xlOjpSZXN1bHQgcmVzID0gY3Jl
YXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisgICAgaWYgKHJlcyA9PSBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZSkKKyAgICAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJm
YWNlU3VyZmFjZU10bDo6cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBFR0xpbnQgYnVmZmVyKQoreworICAgIC8vIFRoaXMgd2lsbCBuZWVkIGltcGxlbWVudGF0aW9u
CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAg
ICBpZiAoY29udGV4dE10bC0+Zmx1c2goY29udGV4dCkgPT0gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWUpCisgICAgeworICAgICAgICBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworICAgIH0KKyAgICByZXR1cm4gZWdsOjpFZ2xC
YWRBY2Nlc3MoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTeW5j
VmFsdWVzKEVHTHVpbnQ2NEtIUiAqdXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVHTHVpbnQ2NEtIUiAqbXNjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVHTHVpbnQ2NEtIUiAqc2JjKQoreworICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKworZWdsOjpF
cnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRNc2NSYXRlKEVHTGludCAqbnVtZXJhdG9yLCBF
R0xpbnQgKmRlbm9taW5hdG9yKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4g
ZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpzZXRT
d2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKK30K
Kwordm9pZCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKEVHTGludCB3aWR0aCkK
K3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6
c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9
CisKKy8vIHdpZHRoIGFuZCBoZWlnaHQgY2FuIGNoYW5nZSB3aXRoIGNsaWVudCB3aW5kb3cgcmVz
aXppbmcKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEVHTGludD4obVdpZHRoKTsKK30KKworRUdMaW50IElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEVHTGludD4obUhlaWdodCk7Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBFR0xfRkFMU0U7
Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IoKSBjb25z
dAoreworICAgIHJldHVybiBFR0xfQlVGRkVSX0RFU1RST1lFRDsKK30KKworYW5nbGU6OlJlc3Vs
dCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KAorICAgIGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgIEdMZW51bSBiaW5kaW5nLAorICAgIGNvbnN0
IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4LAorICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICBG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkKK3sKKyAgICBBTkdMRV9U
UlkoZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29udGV4dCkpOworICAgICpydE91dCA9ICZtUmVuZGVy
VGFyZ2V0OworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5nbGU6
OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5l
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpCit7Cisg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorYW5nbGU6OlJlc3VsdCBJT1N1
cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Y3JlYXRlQmFja2luZ1Rl
eHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgbXRsOjpUZXh0dXJlUmVm
IG1UZW1wb3JhcnlTdXJmYWNlUmVmOworICAgIEFOR0xFX1RSWShjcmVhdGVUZXh0dXJlKGNvbnRl
eHQsIG1Gb3JtYXQsIG1XaWR0aCwgbUhlaWdodCwgZmFsc2UsICZtVGVtcG9yYXJ5U3VyZmFjZVJl
ZikpOworICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5kIHRoZSBiYXNlIGZvcm1hdCBv
ZiB0aGUgdGV4dHVyZS4KKyAgICBtSU9TdXJmYWNlVGV4dHVyZSA9CisgICAgICAgIG1UZW1wb3Jh
cnlTdXJmYWNlUmVmLT5jcmVhdGVWaWV3V2l0aERpZmZlcmVudEZvcm1hdChNVExQaXhlbEZvcm1h
dEJHUkE4VW5vcm0pOworICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1JT1N1cmZhY2VUZXh0dXJlLCBt
dGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5hbEZvcm1hdCk7CisgICAgbUlPU3Vy
ZmFjZVRleHR1cmVDcmVhdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4
dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKCFtSU9T
dXJmYWNlVGV4dHVyZUNyZWF0ZWQpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQmFja2lu
Z1RleHR1cmUoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKworbXRsOjpUZXh0dXJlUmVmIElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1
cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKGVuc3VyZUN1cnJlbnRE
cmF3YWJsZU9idGFpbmVkKGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOworICAgIH0KKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVU
ZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYgKnRleHR1cmVPdXQpCit7
CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAg
ICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlSU9TdXJmYWNlVGV4dHVyZShjb250ZXh0TXRs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIG1JT1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBsYW5lLCB0ZXh0dXJlT3V0KSk7CisgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Q
cm9ncmFtTXRsLmgKaW5kZXggMzg5ZWNlNzUwZTdjYTMyNzcwMmY3MzU5NTNhMjIxYzI0NmU5YWJm
ZS4uZWI5YmIwMTU1YzJmOTEzNTNiOGI1YmM5NmNjMjEzNjlkNjY3OGJkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUHJvZ3JhbU10bC5oCkBAIC0yMCwxMiArMjAsMTMgQEAKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKLSNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CisjZGVmaW5l
IFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCiBjbGFzcyBDb250ZXh0TXRsOwogCiBzdHJ1Y3Qg
UHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10bApAQCAtMTM0LDYgKzEzNSwxMCBAQCBjbGFz
cyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBl
bGluZUNhY2hlU3BlY2lhbGl6ZQogICAgIGJvb2wgaGFzU3BlY2lhbGl6ZWRTaGFkZXIoZ2w6OlNo
YWRlclR5cGUgc2hhZGVyVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURlc2MpIG92ZXJyaWRlOwog
CisgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVNc2xTaGFkZXJMaWIobXRsOjpDb250ZXh0ICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBl
IHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpUcmFuc2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZE1zbEluZm8pOwogICAgIC8vIENhbGxz
IHRoaXMgYmVmb3JlIGRyYXdpbmcsIGNoYW5nZWRQaXBlbGluZURlc2MgaXMgcGFzc2VkIHdoZW4g
dmVydGV4IGF0dHJpYnV0ZXMgZGVzYyBhbmQvb3IKICAgICAvLyBzaGFkZXIgcHJvZ3JhbSBjaGFu
Z2VkLgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENv
bnRleHQsCkBAIC0xNDEsNyArMTQ2LDEyIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJv
Z3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBp
cGVsaW5lRGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBpcGVsaW5lRGVz
Y0NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVRleHR1cmVz
U2V0dGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJz
RGlydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNE
aXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNr
RHJhdyk7CisKKyAgICBzdGQ6OnN0cmluZyBnZXRYZmJNc2xTb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtWGZiTXNsU291cmNlOyB9CisKKyAgICBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGUgKm1NZXRh
bFhmYlJlbmRlclBpcGVsaW5lQ2FjaGU7CiAKICAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8aW50
IGNvbHMsIGludCByb3dzPgpAQCAtMTU2LDYgKzE2NiwxMSBAQCBjbGFzcyBQcm9ncmFtTXRsIDog
cHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lh
bGl6ZQogICAgIHZvaWQgc2V0VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IFQgKnYsIEdMZW51bSBlbnRyeVBvaW50VHlwZSk7CiAKICAgICBhbmdsZTo6UmVz
dWx0IGluaXREZWZhdWx0VW5pZm9ybUJsb2Nrcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
KTsKKyAgICBhbmdsZTo6UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyTWFwPHNpemVfdD4gJnJlcXVp
cmVkQnVmZmVyU2l6ZSk7CisgICAgdm9pZCBzYXZlRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKGds
OjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSk7CisgICAgYW5nbGU6OlJlc3VsdCBsb2FkRGVm
YXVsdFVuaWZvcm1CbG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1
dFN0cmVhbSAqc3RyZWFtKTsKIAogICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0VW5pZm9ybXMoQ29u
dGV4dE10bCAqY29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rlcik7
CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xD
b250ZXh0LApAQCAtMTc3LDIxICsxOTIsMzMgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQ
cm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzLAogICAg
ICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKIAotICAgIGFuZ2xlOjpSZXN1bHQgdXBk
YXRlWGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5l
RGVzYyAmcGlwZWxpbmVEZXNjKTsKLQogICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4
dCk7CiAKKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3Ry
ZWFtICpzdHJlYW0pOworICAgIHZvaWQgbG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJ
bnB1dFN0cmVhbSAqc3RyZWFtKTsKKworICAgIHZvaWQgc2F2ZVNoYWRlckludGVybmFsSW5mbyhn
bDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworICAgIHZvaWQgbG9hZFNoYWRlckludGVy
bmFsSW5mbyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisKKyNpZiBBTkdMRV9FTkFC
TEVfTUVUQUxfU1BJUlYKKworICAgIGFuZ2xlOjpSZXN1bHQgbGlua0ltcGxTcGlydihjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisjZW5kaWYKKworICAg
IGFuZ2xlOjpSZXN1bHQgbGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlu
a2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisKICAgICB2b2lkIGxpbmtSZXNvdXJjZXMoY29uc3Qg
Z2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcyk7CiAgICAgYW5nbGU6OlJlc3Vs
dCBsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKIAotICAg
IGFuZ2xlOjpSZXN1bHQgY3JlYXRlTXNsU2hhZGVyTGliKG10bDo6Q29udGV4dCAqY29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFk
ZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9n
ICZpbmZvTG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VHJh
bnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvKTsKKyAgICBhbmdsZTo6UmVzdWx0
IGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVh
bSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJ
bmZvTG9nICZpbmZvTG9nKTsKIAogICAgIC8vIFN0YXRlIGZvciB0aGUgZGVmYXVsdCB1bmlmb3Jt
IGJsb2Nrcy4KICAgICBzdHJ1Y3QgRGVmYXVsdFVuaWZvcm1CbG9jayBmaW5hbCA6IHByaXZhdGUg
YW5nbGU6Ok5vbkNvcHlhYmxlCkBAIC0yMzAsNiArMjU3LDcgQEAgY2xhc3MgUHJvZ3JhbU10bCA6
IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNp
YWxpemUKICAgICAvLyBDYWNoZWQgcmVmZXJlbmNlcyBvZiBjdXJyZW50IHNoYWRlciB2YXJpYW50
cy4KICAgICBnbDo6U2hhZGVyTWFwPFByb2dyYW1TaGFkZXJPYmpWYXJpYW50TXRsICo+IG1DdXJy
ZW50U2hhZGVyVmFyaWFudHM7CiAKKyAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgbVZhcmlhYmxlSW5mb01hcDsKICAgICAvLyBTY3JhdGNoIGRhdGE6CiAgICAgLy8gTGVnYWxp
emVkIGJ1ZmZlcnMgYW5kIHRoZWlyIG9mZnNldHMuIEZvciBleGFtcGxlLCB1bmlmb3JtIGJ1ZmZl
cidzIG9mZnNldD0xIGlzIG5vdCBhIHZhbGlkCiAgICAgLy8gb2Zmc2V0LCBpdCB3aWxsIGJlIGNv
bnZlcnRlZCB0byBsZWdhbCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMg
YXJyYXkuCkBAIC0yMzgsNyArMjY2LDEwIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJv
Z3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAg
Ly8gaW50byBhbiBhcmd1bWVudCBidWZmZXIuCiAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1B
cmd1bWVudEJ1ZmZlclJlbmRlclN0YWdlVXNhZ2VzOwogCisgICAgdWludDMyX3QgbVNoYWRvd0Nv
bXBhcmVNb2Rlc1ttdGw6OmtNYXhTaGFkZXJTYW1wbGVyc10gPSB7MH07CisKICAgICBtdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGUgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyAgICBzdGQ6OnN0
cmluZyBtWGZiTXNsU291cmNlOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJv
Z3JhbU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9Qcm9ncmFtTXRsLm1tCmluZGV4IDUwZTJmNjM4N2ZkNDdlN2ZjMzljNTcwYzZkNzI1
NjZjM2JmNWMyM2QuLjZkYTg2NjQxY2FhODUzNTY4YzA4NWE2YTA4YmM0Y2Y2NWY1MDAyNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9Qcm9ncmFtTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCkBAIC0xNCwyNSArMTQsMzEgQEAKICNp
bmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvUHJvZ3Jh
bUxpbmtlZFJlc291cmNlcy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1
ZmZlck10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwu
aCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oIgotI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvcmVuZGVyZXJfdXRpbHMuaCIKIAorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElS
VgorIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGls
cy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSByeAogewogCiBuYW1lc3BhY2UKIHsKLQotI2RlZmlu
ZSBTSEFERVJfRU5UUllfTkFNRSBAIm1haW4wIgorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElS
VgogY29uc3RleHByIGNoYXIga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhbXSA9ICJfdG1wIjsK
LQorI2VuZGlmCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIFNjb3BlZEF1dG9DbGVhclZl
Y3RvcgogewpAQCAtNzgsNiArODQsNyBAQCB2b2lkIEluaXREZWZhdWx0VW5pZm9ybUJsb2NrKGNv
bnN0IHN0ZDo6dmVjdG9yPHNoOjpVbmlmb3JtPiAmdW5pZm9ybXMsCiAKICAgICBzaXplX3QgYmxv
Y2tTaXplID0gYmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsKIAorICAgIC8vIFRPRE8o
am1hZGlsbCk6IEkgdGhpbmsgd2Ugc3RpbGwgbmVlZCBhIHZhbGlkIGJsb2NrIGZvciB0aGUgcGlw
ZWxpbmUgZXZlbiBpZiB6ZXJvIHNpemVkLgogICAgIGlmIChibG9ja1NpemUgPT0gMCkKICAgICB7
CiAgICAgICAgICpibG9ja1NpemVPdXQgPSAwOwpAQCAtMjI4LDExICsyMzUsMTYgQEAgUHJvZ3Jh
bU10bDo6RGVmYXVsdFVuaWZvcm1CbG9jazo6RGVmYXVsdFVuaWZvcm1CbG9jaygpIHt9CiAKIFBy
b2dyYW1NdGw6OkRlZmF1bHRVbmlmb3JtQmxvY2s6On5EZWZhdWx0VW5pZm9ybUJsb2NrKCkgPSBk
ZWZhdWx0OwogCi1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUg
JnN0YXRlKQotICAgIDogUHJvZ3JhbUltcGwoc3RhdGUpLCBtTWV0YWxSZW5kZXJQaXBlbGluZUNh
Y2hlKHRoaXMpCi17fQorUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25zdCBnbDo6UHJvZ3JhbVN0
YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisgICAgbU1ldGFsUmVuZGVyUGlwZWxp
bmVDYWNoZSh0aGlzKQoreworICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUgPSBuZXcg
bXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7Cit9CiAKLVByb2dyYW1NdGw6On5Qcm9ncmFtTXRs
KCkge30KK1Byb2dyYW1NdGw6On5Qcm9ncmFtTXRsKCkKK3sKKyAgICBkZWxldGUgbU1ldGFsWGZi
UmVuZGVyUGlwZWxpbmVDYWNoZTsKK30KIAogdm9pZCBQcm9ncmFtTXRsOjpkZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewpAQCAtMjYyLDI1ICsyNzQsNDYgQEAgdm9pZCBQcm9n
cmFtTXRsOjpyZXNldChDb250ZXh0TXRsICpjb250ZXh0KQogICAgIHsKICAgICAgICAgdmFyLnJl
c2V0KGNvbnRleHQpOwogICAgIH0KLQogICAgIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGUuY2xl
YXIoKTsKKyAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5jbGVhcigpOworfQorCit2
b2lkIFByb2dyYW1NdGw6OnNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3Ry
ZWFtICpzdHJlYW0pCit7CisgICAgLy8gV3JpdGUgb3V0IHNoYWRlciBzb3VyY2VzIGZvciBhbGwg
c2hhZGVyIHR5cGVzCisgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDog
Z2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBzdHJlYW0tPndyaXRlU3RyaW5n
KG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLm1ldGFsU2hhZGVyU291cmNlKTsK
KyAgICB9CisgICAgc3RyZWFtLT53cml0ZVN0cmluZyhtWGZiTXNsU291cmNlKTsKK30KKwordm9p
ZCBQcm9ncmFtTXRsOjpsb2FkVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJpbmFyeUlucHV0U3RyZWFt
ICpzdHJlYW0pCit7CisgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNoYWRl
ciB0eXBlcworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpB
bGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9b
c2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmcoKTsKKyAg
ICB9CisgICAgbVhmYk1zbFNvdXJjZSA9IHN0cmVhbS0+cmVhZFN0cmluZygpOwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8cng6OkxpbmtFdmVudD4gUHJvZ3JhbU10bDo6bG9hZChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpCiB7Ci0g
ICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCi0gICAgVU5JTVBMRU1FTlRF
RCgpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVudERvbmU+KGFuZ2xlOjpS
ZXN1bHQ6OlN0b3ApOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9u
ZT4obGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnRleHQsIHN0cmVhbSwgaW5mb0xvZykpOwogfQog
CiB2b2lkIFByb2dyYW1NdGw6OnNhdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIGdsOjpC
aW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBzdXBwb3J0
IGJpbmFyeSBzaGFkZXIKLSAgICBVTklNUExFTUVOVEVEKCk7CisgICAgc2F2ZVRyYW5zbGF0ZWRT
aGFkZXJzKHN0cmVhbSk7CisgICAgc2F2ZVNoYWRlckludGVybmFsSW5mbyhzdHJlYW0pOworICAg
IHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oc3RyZWFtKTsKIH0KIAorCiB2b2lkIFByb2dy
YW1NdGw6OnNldEJpbmFyeVJldHJpZXZhYmxlSGludChib29sIHJldHJpZXZhYmxlKQogewogICAg
IFVOSU1QTEVNRU5URUQoKTsKQEAgLTI5NCw3ICszMjcsNyBAQCB2b2lkIFByb2dyYW1NdGw6OnNl
dFNlcGFyYWJsZShib29sIHNlcGFyYWJsZSkKIHN0ZDo6dW5pcXVlX3B0cjxMaW5rRXZlbnQ+IFBy
b2dyYW1NdGw6OmxpbmsoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVz
b3VyY2VzICZyZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbU1lcmdlZFZhcnlpbmdzICYgLyogbWVy
Z2VkVmFyeWluZ3MgKi8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJm1lcmdlZFZhcnlpbmdzKQogewog
ICAgIC8vIExpbmsgcmVzb3VyY2VzIGJlZm9yZSBjYWxsaW5nIEdldFNoYWRlclNvdXJjZSB0byBt
YWtlIHN1cmUgdGhleSBhcmUgcmVhZHkgZm9yIHRoZSBzZXQvYmluZGluZwogICAgIC8vIGFzc2ln
bm1lbnQgZG9uZSBpbiB0aGF0IGZ1bmN0aW9uLgpAQCAtMzA0LDcgKzMzNyw4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxMaW5rRXZlbnQ+IFByb2dyYW1NdGw6OmxpbmsoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4obGlua0lt
cGwoY29udGV4dCwgcmVzb3VyY2VzLCBpbmZvTG9nKSk7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgUHJv
Z3JhbU10bDo6bGlua0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyNpZiBBTkdM
RV9FTkFCTEVfTUVUQUxfU1BJUlYKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxT
cGlydihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2Vz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xv
ZykKIHsKQEAgLTM1NSw2ICszODksNzUgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5r
SW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQorI2VuZGlmCisKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6
bGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMg
JnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9M
b2cgJmluZm9Mb2cpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1w
bChnbENvbnRleHQpOworCisgICAgcmVzZXQoY29udGV4dE10bCk7CisgICAgQU5HTEVfVFJZKGlu
aXREZWZhdWx0VW5pZm9ybUJsb2NrcyhnbENvbnRleHQpKTsKKyAgICBTaGFkZXJNYXBJbnRlcmZh
Y2VWYXJpYWJsZUluZm9NYXAgdmFyaWFibGVJbmZvTWFwOworCisgICAgZ2w6OlNoYWRlck1hcDxz
dGQ6OnN0cmluZz4gc2hhZGVyU291cmNlczsKKyAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5n
PiB0cmFuc2xhdGVkTXNsU2hhZGVyczsKKyAgICBtdGw6Ok1TTEdldFNoYWRlclNvdXJjZShtU3Rh
dGUsIHJlc291cmNlcywgJnNoYWRlclNvdXJjZXMsICZ2YXJpYWJsZUluZm9NYXApOworCisgICAg
QU5HTEVfVFJZKG10bDo6R2xzbGFuZ0dldE1TTChnbENvbnRleHQsIG1TdGF0ZSwgY29udGV4dE10
bC0+Z2V0Q2FwcygpLCBzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGVJbmZvTWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZE1zbFNoYWRlcnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLmdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKSkpOworCisKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBl
IHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAg
Ly8gQ3JlYXRlIGFjdHVhbCBNZXRhbCBzaGFkZXIKKyAgICAgICAgQU5HTEVfVFJZKAorICAgICAg
ICAgICAgY3JlYXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRlclR5cGUsIGluZm9Mb2cs
ICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOworICAgIH0KKyAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10
bDo6bGlua0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJl
c291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cg
JmluZm9Mb2cpCit7CisgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdheSBvZiB0b2dnbGluZyB0
aGlzLgorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgIGlmIChzaDo6cmVhZEJvb2xF
bnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9TUElSViIpKQorICAgIHsKKyAgICAgICByZXR1cm4g
bGlua0ltcGxTcGlydihnbENvbnRleHQsIHJlc291cmNlcywgaW5mb0xvZyk7CisgICAgfQorICAg
IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICByZXR1cm4gbGlua0ltcGxEaXJlY3QoZ2xDb250
ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworICAgIH0KK30KKworCithbmdsZTo6UmVzdWx0IFBy
b2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBDb250ZXh0
TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4dCk7CisgICAgLy8gTk9URSho
cWxlKTogTm8gdHJhbnNmb3JtIGZlZWRiYWNrcyBmb3Igbm93LCBzaW5jZSB3ZSBvbmx5IHN1cHBv
cnQgRVMgMi4wIGF0bQorCisgICAgcmVzZXQoY29udGV4dE10bCk7CisKKyAgICBsb2FkVHJhbnNs
YXRlZFNoYWRlcnMoc3RyZWFtKTsKKyAgICBsb2FkU2hhZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7
CisgICAgQU5HTEVfVFJZKGxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2xDb250ZXh0LCBz
dHJlYW0pKTsKKworICAgIEFOR0xFX1RSWShjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwg
Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgaW5mb0xvZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSkp
OworICAgIEFOR0xFX1RSWShjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgZ2w6OlNoYWRl
clR5cGU6OkZyYWdtZW50LCBpbmZvTG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudF0pKTsKKwor
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KIAogdm9pZCBQcm9ncmFtTXRs
OjpsaW5rUmVzb3VyY2VzKGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJj
ZXMpCiB7CkBAIC0zNjYsOCArNDY5LDYgQEAgdm9pZCBQcm9ncmFtTXRsOjpsaW5rUmVzb3VyY2Vz
KGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMpCiAKIGFuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250
ZXh0ICpnbENvbnRleHQpCiB7Ci0gICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0
SW1wbChnbENvbnRleHQpOwotCiAgICAgLy8gUHJvY2VzcyB2ZXJ0ZXggYW5kIGZyYWdtZW50IHVu
aWZvcm1zIGludG8gc3RkMTQwIHBhY2tpbmcuCiAgICAgZ2w6OlNoYWRlck1hcDxzaDo6QmxvY2tM
YXlvdXRNYXA+IGxheW91dE1hcDsKICAgICBnbDo6U2hhZGVyTWFwPHNpemVfdD4gcmVxdWlyZWRC
dWZmZXJTaXplOwpAQCAtNDI2LDYgKzUyNywxNSBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6
OmluaXREZWZhdWx0VW5pZm9ybUJsb2Nrcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0KQog
ICAgICAgICB9CiAgICAgfQogCisgICAgcmV0dXJuIHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tz
TWVtb3J5KGdsQ29udGV4dCwgcmVxdWlyZWRCdWZmZXJTaXplKTsKK30KKworYW5nbGU6OlJlc3Vs
dCBQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSgKKyAgICBjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c2l6ZV90
PiAmcmVxdWlyZWRCdWZmZXJTaXplKQoreworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBt
dGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKwogICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVy
VHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCiAgICAgewogICAgICAgICBpZiAocmVx
dWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4gMCkKQEAgLTQ1Myw2ICs1NjMsOSBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVyKG10bDo6Q29udGV4dCAq
Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWQ8TVRMRnVuY3Rpb24+ICpzaGFkZXJPdXQpCiB7CiAgICAgc3RhdGljX2Fzc2VydChZRVMgPT0g
MSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisgICAgI2lmIEFOR0xFX0VOQUJMRV9N
RVRBTF9TUElSVgorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB1c2VTcGlydiA9IHNoOjpyZWFk
Qm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIik7CisgICAgI2VuZGlmCiAKICAg
ICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNsSW5mbyA9ICZtTXNsU2hh
ZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXTsKICAgICBQcm9ncmFtU2hhZGVyT2JqVmFyaWFu
dE10bCAqc2hhZGVyVmFyaWFudDsKQEAgLTQ5MCw5ICs2MDMsMjIgQEAgYW5nbGU6OlJlc3VsdCBQ
cm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICBCT09MIGVtdWxhdGVEaXNjYXJkID0gcmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rl
cml6YXRpb25UeXBlID09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpS
ZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZDsKIAotICAgICAgICAg
ICAgTlNTdHJpbmcgKmRpc2NhcmRFbmFibGVkU3RyID0KLSAgICAgICAgICAgICAgICBbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLCBzaDo6bXRsOjprUmFzdGVyaXplckRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4XTsKKyAgICAgICAgICAgIE5TU3RyaW5nICpk
aXNjYXJkRW5hYmxlZFN0cjsKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAg
ICAgIGlmICh1c2VTcGlydikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaXNjYXJk
RW5hYmxlZFN0ciA9IFtOU1N0cmluZworICAgICAgICAgICAgICAgICAgICBzdHJpbmdXaXRoRm9y
bWF0OkAiJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRy
YW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29u
c3RTdWZmaXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGlzY2FyZEVuYWJsZWRTdHIgPQorICAgICAgICAg
ICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRyYW5zbGF0b3JN
ZXRhbERpcmVjdDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCldOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0gW1tNVExGdW5jdGlv
bkNvbnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKICAgICAgICAgICAgIFtmdW5jQ29uc3RhbnRz
IHNldENvbnN0YW50VmFsdWU6JmVtdWxhdGVEaXNjYXJkCkBAIC01MTUsOSArNjQxLDIyIEBAIGFu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIobXRsOjpDb250ZXh0
ICpjb250ZXh0LAogCiAgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIE5TU3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0KLSAgICAgICAgICAg
ICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLCBzaDo6bXRsOjprQ292ZXJh
Z2VNYXNrRW5hYmxlZENvbnN0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICBOU1N0
cmluZyAqY292ZXJhZ2VNYXNrRW5hYmxlZFN0cjsKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJ
UlYKKyAgICAgICAgICAgIGlmICh1c2VTcGlydikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0gW05TU3RyaW5nCisgICAgICAgICAgICAgICAg
ICAgIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29u
c3ROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jv
c3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2Vu
ZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY292ZXJhZ2VNYXNrRW5hYmxlZFN0
ciA9CisgICAgICAgICAgICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpz
aDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
KCldOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0gW1tNVExG
dW5jdGlvbkNvbnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKICAgICAgICAgICAgIFtmdW5jQ29u
c3RhbnRzIHNldENvbnN0YW50VmFsdWU6JmVtdWxhdGVDb3ZlcmFnZU1hc2sKQEAgLTU1NSw2ICs2
OTQsNyBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVyKG10
bDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KKwogYm9vbCBQcm9ncmFtTXRsOjpoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVy
VHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcmVuZGVyUGlwZWxpbmVEZXNjKQogewpAQCAt
NTkyLDYgKzczMiw5MyBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmNyZWF0ZU1zbFNoYWRl
ckxpYihtdGw6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgfQogfQogCit2b2lkIFByb2dyYW1NdGw6
OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3Ry
ZWFtKQoreworICAgIC8vIFNlcmlhbGl6ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVm
YXVsdFVuaWZvcm1CbG9ja3MKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBn
bDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3Jt
Q291bnQgPSBtRGVmYXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0udW5pZm9ybUxheW91dC5z
aXplKCk7CisgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8c2l6ZV90Pih1bmlmb3JtQ291bnQpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCB1bmlmb3JtQ291bnQ7ICsrdW5pZm9ybUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBz
aDo6QmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8gPQorICAgICAgICAgICAgICAgIG1EZWZhdWx0
VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3VuaWZvcm1JbmRleF07Cisg
ICAgICAgICAgICBnbDo6V3JpdGVCbG9ja01lbWJlckluZm8oc3RyZWFtLCBibG9ja0luZm8pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2VyaWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJs
b2NrIG1lbW9yeSBzaXplcworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgc3RyZWFtLT53cml0ZUludChtRGVm
YXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0udW5pZm9ybURhdGEuc2l6ZSgpKTsKKyAgICB9
Cit9CisKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1bHRVbmlmb3JtQmxvY2tz
SW5mbyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAq
c3RyZWFtKQoreworICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7
CisgICAgcmVxdWlyZWRCdWZmZXJTaXplLmZpbGwoMCk7CisKKyAgICAvLyBEZXNlcmlhbGl6ZXMg
dGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1CbG9ja3MKKyAgICBmb3Ig
KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7
CisgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQgPSBzdHJlYW0tPnJlYWRJbnQ8c2l6
ZV90PigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsrdW5pZm9ybUluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKKyAgICAgICAgICAgIGdsOjpM
b2FkQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgJmJsb2NrSW5mbyk7CisgICAgICAgICAgICBtRGVm
YXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0udW5pZm9ybUxheW91dC5wdXNoX2JhY2soYmxv
Y2tJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlc2VyaWFsaXplcyByZXF1aXJl
ZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hh
ZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgcmVxdWlyZWRC
dWZmZXJTaXplW3NoYWRlclR5cGVdID0gc3RyZWFtLT5yZWFkSW50PHNpemVfdD4oKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoZ2xDb250ZXh0
LCByZXF1aXJlZEJ1ZmZlclNpemUpOworfQorCit2b2lkIFByb2dyYW1NdGw6OnNhdmVTaGFkZXJJ
bnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKQoreworICAgIGZvciAo
Z2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsK
KyAgICAgICAgc3RyZWFtLT53cml0ZUludDxpbnQ+KG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3No
YWRlclR5cGVdLmhhc1VCT0FyZ3VtZW50QnVmZmVyKTsKKyAgICAgICAgZm9yIChjb25zdCBtdGw6
OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDoKKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNs
YXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8dWludDMyX3Q+KGJpbmRpbmcudGV4dHVyZUJpbmRp
bmcpOworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy5zYW1w
bGVyQmluZGluZyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQzMl90IHVib0JpbmRp
bmcgOiBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5n
cykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4odWJv
QmluZGluZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbU10bDo6bG9hZFNo
YWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICBm
b3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAg
ICB7CisgICAgICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmhhc1VCT0Fy
Z3VtZW50QnVmZmVyID0gc3RyZWFtLT5yZWFkSW50PGludD4oKSAhPSAwOworICAgICAgICBmb3Ig
KG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgorICAgICAgICAgICAgIG1Nc2xTaGFkZXJU
cmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFNhbXBsZXJCaW5kaW5ncykKKyAgICAgICAg
eworICAgICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0cmVhbS0+cmVhZEludDx1
aW50MzJfdD4oKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2FtcGxlckJpbmRpbmcgPSBzdHJlYW0t
PnJlYWRJbnQ8dWludDMyX3Q+KCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQzMl90
ICZ1Ym9CaW5kaW5nIDogbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uYWN0dWFs
VUJPQmluZGluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVib0JpbmRpbmcgPSBzdHJlYW0t
PnJlYWRJbnQ8dWludDMyX3Q+KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIEdMYm9vbGVhbiBQ
cm9ncmFtTXRsOjp2YWxpZGF0ZShjb25zdCBnbDo6Q2FwcyAmY2FwcywgZ2w6OkluZm9Mb2cgKmlu
Zm9Mb2cpCiB7CiAgICAgLy8gTm8tb3AuIFRoZSBzcGVjIGlzIHZlcnkgdmFndWUgYWJvdXQgdGhl
IGJlaGF2aW9yIG9mIHZhbGlkYXRpb24uCkBAIC04NzcsMTQgKzExMDQsMjUgQEAgYW5nbGU6OlJl
c3VsdCBQcm9ncmFtTXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBpcGVsaW5lRGVzY0NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZvcmNlVGV4dHVyZXNTZXR0aW5nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcp
CiB7CiAgICAgQ29udGV4dE10bCAqY29udGV4dCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOwog
ICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQogICAgIHsKICAgICAgICAgLy8gUmVuZGVyIHBp
cGVsaW5lIHN0YXRlIG5lZWRzIHRvIGJlIGNoYW5nZWQKLSAgICAgICAgaWQ8TVRMUmVuZGVyUGlw
ZWxpbmVTdGF0ZT4gcGlwZWxpbmVTdGF0ZSA9Ci0gICAgICAgICAgICBtTWV0YWxSZW5kZXJQaXBl
bGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxpbmVEZXNjKTsK
KyAgICAgICAgaWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gcGlwZWxpbmVTdGF0ZSA9IG5pbDsK
KyAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKKyAgICAgICAgeworICAgICAgICAg
ICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNjID0gbXRsOjpSZW5kZXJQ
aXBlbGluZURlc2MocGlwZWxpbmVEZXNjKTsKKyAgICAgICAgICAgIHhmYlBpcGVsaW5lRGVzYy5y
YXN0ZXJpemF0aW9uVHlwZSAgICA9IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpE
aXNhYmxlZDsKKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPQorICAgICAgICAgICAgICAgIG1N
ZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUtPmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4
dCwgeGZiUGlwZWxpbmVEZXNjKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPSBtTWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlLmdl
dFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxpbmVEZXNjKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAoIXBpcGVsaW5lU3RhdGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEVy
cm9yIGFscmVhZHkgbG9nZ2VkIGluc2lkZSBnZXRSZW5kZXJQaXBlbGluZVN0YXRlKCkKQEAgLTkx
MywxMSArMTE1MSw2IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6c2V0dXBEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgIEFOR0xFX1RSWSh1cGRhdGVVbmlmb3Jt
QnVmZmVycyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpKTsKICAgICB9CiAKLSAg
ICBpZiAocGlwZWxpbmVEZXNjQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIEFOR0xFX1RSWSh1cGRh
dGVYZmJCdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykpOwotICAgIH0K
LQogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtOTQ4LDEwICsx
MTgxLDEyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMoY29uc3Qg
Z2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVVwZGF0ZSkKIHsKLSAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4dCk7Ci0gICAg
Y29uc3QgYXV0byAmZ2xTdGF0ZSAgICA9IGdsQ29udGV4dC0+Z2V0U3RhdGUoKTsKKyAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoZ2xDb250
ZXh0KTsKKyAgICBjb25zdCBhdXRvICZnbFN0YXRlICAgICAgICAgICAgICAgICAgICAgPSBnbENv
bnRleHQtPmdldFN0YXRlKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVj
dXRhYmxlID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CiAK
ICAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZXNDYWNoZSAmY29tcGxldGVUZXh0dXJlcyA9IGds
U3RhdGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0
dXJlVHlwZUFycmF5ICZ0ZXh0dXJlVHlwZXMgID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxl
clR5cGVzKCk7CiAKICAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxs
R0xFUzJTaGFkZXJUeXBlcygpKQogICAgIHsKQEAgLTk2NCw2ICsxMTk5LDggQEAgYW5nbGU6OlJl
c3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgICAgICBjb25zdCBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZv
ID0KICAgICAgICAgICAgICptQ3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFu
c2xhdGVkU3JjSW5mbzsKIAorICAgICAgICBib29sIGhhc0RlcHRoU2FtcGxlciA9IGZhbHNlOwor
CiAgICAgICAgIGZvciAodWludDMyX3QgdGV4dHVyZUluZGV4ID0gMDsgdGV4dHVyZUluZGV4IDwg
bVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygpLnNpemUoKTsKICAgICAgICAgICAgICArK3RleHR1
cmVJbmRleCkKICAgICAgICAgewpAQCAtOTc1LDE2ICsxMjEyLDE2IEBAIGFuZ2xlOjpSZXN1bHQg
UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Z2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gc2FtcGxlckJpbmRpbmcudGV4dHVyZVR5cGU7
CiAKICAgICAgICAgICAgIGZvciAodWludDMyX3QgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVt
ZW50IDwgc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgpOwogICAgICAgICAg
ICAgICAgICArK2FycmF5RWxlbWVudCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBH
THVpbnQgdGV4dHVyZVVuaXQgICA9IHNhbXBsZXJCaW5kaW5nLmJvdW5kVGV4dHVyZVVuaXRzW2Fy
cmF5RWxlbWVudF07Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb21w
bGV0ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKLSAgICAgICAgICAgICAgICBnbDo6U2FtcGxlciAq
c2FtcGxlciA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0U2FtcGxlcih0ZXh0dXJlVW5pdCk7
Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdGV4dHVyZVNsb3QgPSBtc2xCaW5kaW5nLnRleHR1
cmVCaW5kaW5nICsgYXJyYXlFbGVtZW50OwotICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBs
ZXJTbG90ID0gbXNsQmluZGluZy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxlbWVudDsKKyAgICAg
ICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQgICAgICAgICAgPSBzYW1wbGVyQmluZGluZy5i
b3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRdOworICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlICAgICAgICA9IGNvbXBsZXRlVGV4dHVyZXNbdGV4dHVyZVVuaXRdOworICAg
ICAgICAgICAgICAgIGdsOjpTYW1wbGVyICpzYW1wbGVyICAgICAgICA9IGNvbnRleHRNdGwtPmdl
dFN0YXRlKCkuZ2V0U2FtcGxlcih0ZXh0dXJlVW5pdCk7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlIHRleHR1cmVUeXBlID0gdGV4dHVyZVR5cGVzW3RleHR1cmVVbml0XTsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCB0ZXh0dXJlU2xvdCAgICAgICAgPSBtc2xCaW5kaW5nLnRleHR1
cmVCaW5kaW5nICsgYXJyYXlFbGVtZW50OworICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBs
ZXJTbG90ICAgICAgICA9IG1zbEJpbmRpbmcuc2FtcGxlckJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7
CiAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPmdldEluY29tcGxldGVUZXh0dXJl
KGdsQ29udGV4dCwgdGV4dHVyZVR5cGUsICZ0ZXh0dXJlKSk7CkBAIC05OTQsMjUgKzEyMzEsMjIg
QEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6Q29u
dGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgIFRleHR1cmVNdGwgKnRleHR1cmVNdGwg
PSBtdGw6OkdldEltcGwodGV4dHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJCaW5k
aW5nLmZvcm1hdCA9PSBnbDo6U2FtcGxlckZvcm1hdDo6U2hhZG93KQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2FuZ2xlYnVnLmNvbS81MTA3Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBhIGNvbXBhcmUgbW9kZSB3
aGVyZSBzYW1wbGluZyBhIHNoYWRvdyBzYW1wbGVyIGNvdWxkCi0gICAgICAgICAgICAgICAgICAg
IC8vIHJldHVybiBhIHNhbWUgdmFsdWUgYXMgaWYgc2FtcGxpbmcgZnJvbSBhIG5vcm1hbCBzYW1w
bGVyLgotICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0aW5nIHRoaXMgY291bGQgcmVxdWly
ZSBoYWNraW5nIHNwaXJ2LWNyb3NzIHRvIGNoYW5nZSBzYW1wbGVfY29tcGFyZSgpCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHNhbXBsZSgpLgotICAgICAgICAgICAgICAgICAgICBpZiAoQU5H
TEVfVU5MSUtFTFkoc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9kZSgpICE9IEdMX0NPTVBBUkVf
UkVGX1RPX1RFWFRVUkUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBFUlIoKSA8PCAiR0xfVEVYVFVSRV9DT01QQVJFX01PREUgIT0gR0xfQ09NUEFSRV9S
RUZfVE9fVEVYVFVSRSBpcyBub3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN1cHBvcnRlZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTkdMRV9NVExfVFJZKGNvbnRl
eHRNdGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJTdGF0
ZS0+Z2V0Q29tcGFyZU1vZGUoKSA9PSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBoYXNEZXB0aFNhbXBsZXIgICAg
ICAgICAgICAgICAgICA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1TaGFkb3dDb21wYXJl
TW9kZXNbdGV4dHVyZVNsb3RdID0gbXRsOjpNc2xHZXRTaGFkZXJTaGFkb3dDb21wYXJlTW9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSwg
c2FtcGxlclN0YXRlLT5nZXRDb21wYXJlRnVuYygpKTsKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBBTkdMRV9UUlkodGV4dHVyZU10bC0+YmluZFRvU2hhZGVyKGdsQ29udGV4
dCwgY21kRW5jb2Rlciwgc2hhZGVyVHlwZSwgc2FtcGxlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVTbG90LCBzYW1wbGVyU2xvdCkp
OwogICAgICAgICAgICAgfSAgLy8gZm9yIGFycmF5IGVsZW1lbnRzCiAgICAgICAgIH0gICAgICAv
LyBmb3Igc2FtcGxlciBiaW5kaW5ncwotICAgIH0gICAgICAgICAgLy8gZm9yIHNoYWRlciB0eXBl
cworCisgICAgICAgIGlmIChoYXNEZXB0aFNhbXBsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNtZEVuY29kZXItPnNldERhdGEoc2hhZGVyVHlwZSwgbVNoYWRvd0NvbXBhcmVNb2RlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjprU2hhZG93U2FtcGxlckNvbXBhcmVN
b2Rlc0JpbmRpbmdJbmRleCk7CisgICAgICAgIH0KKyAgICB9ICAvLyBmb3Igc2hhZGVyIHR5cGVz
CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0xMDQwLDExICsx
Mjc0LDYgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVVbmlmb3JtQnVmZmVycyhD
b250ZXh0TXRsICpjb250ZXh0LAogCiAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
IDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKICAgICB7Ci0gICAgICAgIGlmICghbUN1cnJl
bnRTaGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobUN1cnJlbnRTaGFkZXJWYXJpYW50c1tz
aGFkZXJUeXBlXS0+dHJhbnNsYXRlZFNyY0luZm8tPmhhc1VCT0FyZ3VtZW50QnVmZmVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBTkdMRV9UUlkoCkBAIC0xMTQ5LDggKzEzNzgsNiBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OmJpbmRVbmlmb3JtQnVmZmVyc1RvRGlzY3JldGVTbG90cygK
ICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAm
Z2xTdGF0ZSA9IGNvbnRleHQtPmdldFN0YXRlKCk7Ci0gICAgY29uc3QgbXRsOjpUcmFuc2xhdGVk
U2hhZGVySW5mbyAmc2hhZGVySW5mbyA9Ci0gICAgICAgICptQ3VycmVudFNoYWRlclZhcmlhbnRz
W3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKICAgICBmb3IgKHVpbnQzMl90IGJ1ZmZl
ckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlckluZGV4KQog
ICAgIHsKICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJsb2Nrc1ti
dWZmZXJJbmRleF07CkBAIC0xMTYyLDcgKzEzODksOCBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1N
dGw6OmJpbmRVbmlmb3JtQnVmZmVyc1RvRGlzY3JldGVTbG90cygKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgYWN0dWFsQnVmZmVySWR4ID0gc2hh
ZGVySW5mby5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07CisgICAgICAgIHVpbnQzMl90
IGFjdHVhbEJ1ZmZlcklkeCA9CisgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tz
aGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07CiAKICAgICAgICAgaWYg
KGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzKQogICAgICAgICB7CkBA
IC0xMTk5LDEyICsxNDI3LDEyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6ZW5jb2RlVW5p
Zm9ybUJ1ZmZlcnNJbmZvQXJndW1lbnRCdWZmZXIoCiAgICAgW2J1ZmZlckVuY29kZXIubWV0YWxB
cmdCdWZmZXJFbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOmFyZ3VtZW50QnVmZmVyLT5nZXQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDphcmd1bWVudEJ1ZmZlck9mZnNldF07CiAKLSAgICBzdGF0aWNfYXNzZXJ0KE1UTFJlbmRlclN0
YWdlVmVydGV4ID09ICgweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGdsOjpTaGFkZXJUeXBl
OjpWZXJ0ZXgpKSwKLSAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVu
dW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOwotICAgIHN0YXRp
Y19hc3NlcnQoCi0gICAgICAgIE1UTFJlbmRlclN0YWdlRnJhZ21lbnQgPT0gKDB4MSA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSksCi0gICAgICAgICJF
eHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8g
ZWFjaCBvdGhlciIpOwotICAgIGF1dG8gbXRsUmVuZGVyU3RhZ2UgPSBzdGF0aWNfY2FzdDxNVExS
ZW5kZXJTdGFnZXM+KDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2hhZGVyVHlwZSkpOwor
ICAgIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPE1UTFJlbmRlclN0YWdlcz4ga1NoYWRlclN0YWdl
TWFwID0geworICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgbXRsOjprUmVuZGVyU3Rh
Z2VWZXJ0ZXh9LAorICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OkZyYWdtZW50LCBtdGw6OmtSZW5k
ZXJTdGFnZUZyYWdtZW50fSwKKyAgICB9OworCisgICAgYXV0byBtdGxSZW5kZXJTdGFnZSA9IGtT
aGFkZXJTdGFnZU1hcFtzaGFkZXJUeXBlXTsKIAogICAgIGZvciAodWludDMyX3QgYnVmZmVySW5k
ZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySW5kZXgpCiAgICAg
ewpAQCAtMTIzOSw0OSArMTQ2Nyw0IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6ZW5jb2Rl
VW5pZm9ybUJ1ZmZlcnNJbmZvQXJndW1lbnRCdWZmZXIoCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVhmYkJ1
ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVy
UGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCi17Ci0gICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0
YXRlICAgICAgICAgICAgICAgICA9IGNvbnRleHQtPmdldFN0YXRlKCk7Ci0gICAgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdsU3RhdGUuZ2V0Q3VycmVudFRyYW5z
Zm9ybUZlZWRiYWNrKCk7Ci0KLSAgICBpZiAocGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25FbmFi
bGVkKCkgfHwgIWdsU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkgfHwK
LSAgICAgICAgQU5HTEVfVU5MSUtFTFkoIXRyYW5zZm9ybUZlZWRiYWNrKSkKLSAgICB7Ci0gICAg
ICAgIC8vIFhGQiBvdXRwdXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJhc3Rlcml6YXRpb24gZGlz
YWJsZWQuCi0gICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKLSAgICB9Ci0K
LSAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBnbFN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxl
KCktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKLQotICAgIEFTU0VSVCh4ZmJC
dWZmZXJDb3VudCA+IDApOwotICAgIEFTU0VSVChtU3RhdGUuZ2V0VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJNb2RlKCkgIT0gR0xfSU5URVJMRUFWRURfQVRUUklCUyB8fAotICAgICAgICAgICB4ZmJC
dWZmZXJDb3VudCA9PSAxKTsKLQotICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKLSAgICB7Ci0gICAgICAg
IHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9IG1Nc2xYZmJPbmx5VmVydGV4U2hhZGVySW5mby5h
Y3R1YWxYRkJCaW5kaW5nc1tidWZmZXJJbmRleF07Ci0KLSAgICAgICAgaWYgKGFjdHVhbEJ1ZmZl
cklkeCA+PSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9p
bnRlcjxnbDo6QnVmZmVyPiAmYnVmZmVyQmluZGluZyA9Ci0gICAgICAgICAgICB0cmFuc2Zvcm1G
ZWVkYmFjay0+Z2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7Ci0gICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlciA9IGJ1ZmZlckJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCgoYnVmZmVy
QmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwotICAgICAgICBBU1NFUlQoYnVmZmVyICE9
IG51bGxwdHIpOwotCi0gICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0gbXRsOjpHZXRJbXBs
KGJ1ZmZlcik7Ci0KLSAgICAgICAgLy8gVXNlIG9mZnNldD0wLCBhY3R1YWwgb2Zmc2V0IHdpbGwg
YmUgc2V0IGluIERyaXZlciBVbmlmb3JtIGluc2lkZSBDb250ZXh0TXRsLgotICAgICAgICBjbWRF
bmNvZGVyLT5zZXRCdWZmZXJGb3JXcml0ZShnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJN
dGwtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0dWFsQnVmZmVySWR4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7Ci19Ci0KIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRs
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UXVlcnlNdGwuaAppbmRleCAyMTg1NGY2ODhmOWJiMDg4NDE4ZjhlNjdjZDdhZDNlOWFiM2NjOWIx
Li4yNzhmMWRmMTZiZWYwNDFkODZlMTU2NWZjNDk4ZGY5ODQ2MzIxYTExIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlN
dGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUXVlcnlNdGwuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTk4LDggKzk4LDcgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJsaWMgUXVlcnlJbXBsCiAgICAg
Y29uc3QgbXRsOjpCdWZmZXJSZWYgJmdldFZpc2liaWxpdHlSZXN1bHRCdWZmZXIoKSBjb25zdCB7
IHJldHVybiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsgfQogICAgIC8vIFJlc2V0IHRoZSBvY2Ns
dXNpb24gcXVlcnkgcmVzdWx0IHN0b3JlZCBpbiBidWZmZXIgdG8gemVybwogICAgIHZvaWQgcmVz
ZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwotCi0gICAgdm9pZCBv
blRyYW5zZm9ybUZlZWRiYWNrRW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICB2
b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pOwog
CiAgIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBAIC0xMDgsOCArMTA3LDEz
IEBAIGNsYXNzIFF1ZXJ5TXRsIDogcHVibGljIFF1ZXJ5SW1wbAogICAgIC8vIExpc3Qgb2Ygb2Zm
c2V0cyBpbiB0aGUgcmVuZGVyIHBhc3MncyBvY2NsdXNpb24gcXVlcnkgcG9vbCBidWZmZXIgYWxs
b2NhdGVkIGZvciB0aGlzIHF1ZXJ5CiAgICAgVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgbVZp
c2liaWxpdHlCdWZmZXJPZmZzZXRzOwogICAgIG10bDo6QnVmZmVyUmVmIG1WaXNpYmlsaXR5UmVz
dWx0QnVmZmVyOworICAgIC8vIFVzZWQgd2l0aCBUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNX
cml0dGVuIHdoZW4gdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGVtdWxhdGVkLgorICAgIHNpemVfdCBt
VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CiAKLSAgICBzaXplX3QgbVRyYW5zZm9y
bUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduID0gMDsKKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTog
Y3VycmVudGx5IG9ubHkgdXNlZCBmb3IgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXdu
CisgICAgLy8gYnV0IGNhbiBiZSB1c2VkIGZvciByZXN0IG9mIHJlc3VsdHMKKyAgICB1aW50NjRf
dCBtQ2FjaGVkUmVzdWx0OworICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZhbGlkOwogfTsKIAogfSAg
Ly8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KaW5kZXggZjVlOWJm
M2I4MjdkOGQzMGYxYjM2NzE0ZDA2NTAyM2UxNDE1YTA5MS4uYWIwZTdiZjA4MDExNTJjMDdhYmIw
MjAwMzNiOGNmNTU1Yzc1M2MwNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEzLDcgKzEzLDEyIEBACiAK
IG5hbWVzcGFjZSByeAogewotUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpRdWVyeVR5cGUgdHlwZSkg
OiBRdWVyeUltcGwodHlwZSkge30KK1F1ZXJ5TXRsOjpRdWVyeU10bChnbDo6UXVlcnlUeXBlIHR5
cGUpCisgICAgOiBRdWVyeUltcGwodHlwZSksCisgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmlt
aXRpdmVzRHJhd24oMCksCisgICAgICBtQ2FjaGVkUmVzdWx0KDApLAorICAgICAgbUNhY2hlZFJl
c3VsdFZhbGlkKGZhbHNlKQore30KIAogUXVlcnlNdGw6On5RdWVyeU10bCgpIHt9CiAKQEAgLTIy
LDEzICsyNywxNCBAQCB2b2lkIFF1ZXJ5TXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpCiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250
ZXh0KTsKICAgICBpZiAoIWdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRzKCkuZW1wdHkoKSkK
ICAgICB7Ci0gICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnRl
eHQsIHRoaXMpOworICAgICAgICBjb250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RGVzdHJveWVk
KGNvbnRleHQsIHRoaXMpOwogICAgIH0KICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlciA9IG51
bGxwdHI7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgUXVlcnlNdGw6OmJlZ2luKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KQogeworICAgIG1DYWNoZWRSZXN1bHRWYWxpZCAgICAgPSBmYWxzZTsKICAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwogICAgIHN3
aXRjaCAoZ2V0VHlwZSgpKQogICAgIHsKQEAgLTQ3LDcgKzUzLDcgQEAgYW5nbGU6OlJlc3VsdCBR
dWVyeU10bDo6YmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBTkdMRV9UUlkoY29udGV4dE10bC0+
b25PY2NsdXNpb25RdWVyeUJlZ2luKGNvbnRleHQsIHRoaXMpKTsKKyAgICAgICAgICAgIEFOR0xF
X1RSWShjb250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29udGV4dCwgdGhpcykpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3Jt
RmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNEcmF3biA9IDA7CkBAIC02NiwxMyArNzIsMjMgQEAgYW5nbGU6OlJlc3VsdCBR
dWVyeU10bDo6ZW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHsKICAgICAgICAg
Y2FzZSBnbDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgogICAgICAgICBjYXNlIGdsOjpRdWVyeVR5
cGU6OkFueVNhbXBsZXNDb25zZXJ2YXRpdmU6Ci0gICAgICAgICAgICBjb250ZXh0TXRsLT5vbk9j
Y2x1c2lvblF1ZXJ5RW5kKGNvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgY29udGV4dE10bC0+
b25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVz
V3JpdHRlbjoKKyAgICAgICAgeworICAgICAgICAgICAgbUNhY2hlZFJlc3VsdCA9IG1UcmFuc2Zv
cm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bjsKKwogICAgICAgICAgICAgLy8gVGhlcmUgY291bGQg
YmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBhZGQgdGhlIHByaW1pdGl2ZXMg
ZHJhd24gc28gZmFyCiAgICAgICAgICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBm
ZWVkYmFjayBvYmplY3QuCi0gICAgICAgICAgICBvblRyYW5zZm9ybUZlZWRiYWNrRW5kKGNvbnRl
eHQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJh
Y2sgKnRyYW5zZm9ybUZlZWRiYWNrID0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTdGF0
ZSgpLmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybUZlZWRiYWNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1DYWNoZWRSZXN1
bHQgKz0gdHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwLDcgKzEyNiw3IEBAIGFuZ2xlOjpSZXN1
bHQgUXVlcnlNdGw6OndhaXRBbmRHZXRSZXN1bHQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
IFQgKnBhcmFtcykKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBnbDo6
UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0dGVuOgotICAgICAgICAg
ICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNE
cmF3bik7CisgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8VD4obUNhY2hlZFJlc3Vs
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKQEAgLTEzNyw3ICsxNTMsNyBAQCBhbmdsZTo6UmVzdWx0IFF1ZXJ5TXRs
Ojppc1Jlc3VsdEF2YWlsYWJsZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqYXZh
aQogICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+aXNC
ZWluZ1VzZWRCeUdQVShjb250ZXh0TXRsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW46Ci0g
ICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICphdmFpbGFibGUgPSBt
Q2FjaGVkUmVzdWx0VmFsaWQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE3NSwxMyArMTkxLDkgQEAgdm9pZCBR
dWVyeU10bDo6cmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpCiAg
ICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXItPnN5bmNDb250ZW50KGNvbnRleHRNdGwsIGJsaXRF
bmNvZGVyKTsKIH0KIAotdm9pZCBRdWVyeU10bDo6b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3ZvaWQgUXVlcnlNdGw6Om9uVHJhbnNmb3JtRmVlZGJh
Y2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCiB7Ci0gICAgZ2w6OlRyYW5zZm9ybUZl
ZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7Ci0gICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrKQotICAgIHsK
LSAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduICs9IHRyYW5zZm9ybUZl
ZWRiYWNrLT5nZXRQcmltaXRpdmVzRHJhd24oKTsKLSAgICB9CisgICAgbVRyYW5zZm9ybUZlZWRi
YWNrUHJpbWl0aXZlc0RyYXduICs9IHByaW1pdGl2ZXNEcmF3bjsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Jl
bmRlckJ1ZmZlck10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oCmluZGV4IDZmZDdiMWI5OTRiODk2N2ZiZWNj
Y2E4NTE1OTVmOTBjOTVmODQwODEuLjA1MzAyMGM1ZTNhNWE4NzA5MGEyY2IyZjVhZDVkZjA3MzA3
NjVlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKQEAgLTU3
LDYgKzU3LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyTXRsIDogcHVibGljIFJlbmRlcmJ1ZmZlcklt
cGwKIAogICAgIG10bDo6Rm9ybWF0IG1Gb3JtYXQ7CiAgICAgbXRsOjpUZXh0dXJlUmVmIG1UZXh0
dXJlOworICAgIG10bDo6VGV4dHVyZVJlZiBtSW1wbGljaXRNU1RleHR1cmU7CiAgICAgUmVuZGVy
VGFyZ2V0TXRsIG1SZW5kZXJUYXJnZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLm1t
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Jl
bmRlckJ1ZmZlck10bC5tbQppbmRleCA2M2Q2ZjRiNzI4Mzk1ODBjOTMzMDQ1YmVlNGU1ZTMyOTU2
MjNiNDAwLi4yZjliNWY2MzJkNTBiYmQ3MjExNjFkM2MzZmUzNmI1MzY2ODdkMjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyQnVmZmVyTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwubW0KQEAgLTI3LDcgKzI3LDggQEAg
dm9pZCBSZW5kZXJidWZmZXJNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCkKIAogdm9pZCBSZW5kZXJidWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKCkKIHsKLSAgICBtVGV4
dHVyZSA9IG51bGxwdHI7CisgICAgbVRleHR1cmUgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBt
SW1wbGljaXRNU1RleHR1cmUgPSBudWxscHRyOwogfQogCiBhbmdsZTo6UmVzdWx0IFJlbmRlcmJ1
ZmZlck10bDo6c2V0U3RvcmFnZUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC00
Miw4ICs0Myw5IEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyYnVmZmVyTXRsOjpzZXRTdG9yYWdlSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGFn
YWluc3QgdGhlIHN0YXRlIGlmIHdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIHN0b3JhZ2UuCiAgICAg
ICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBtU3RhdGUuZ2V0Rm9ybWF0KCkuaW5mby0+aW50ZXJu
YWxGb3JtYXQgfHwKLSAgICAgICAgICAgIHdpZHRoICE9IG1TdGF0ZS5nZXRXaWR0aCgpIHx8IGhl
aWdodCAhPSBtU3RhdGUuZ2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgICAgIHNhbXBsZXMgIT0gbVN0
YXRlLmdldFNhbXBsZXMoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHdpZHRo
KSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXpl
aT4oaGVpZ2h0KSAhPSBtU3RhdGUuZ2V0SGVpZ2h0KCkgfHwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KHNhbXBsZXMpICE9IG1TdGF0ZS5nZXRTYW1wbGVzKCkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJlbGVhc2VUZXh0dXJlKCk7CiAgICAgICAgIH0KQEAgLTcyLDMwICs3NCw2
MiBAQCBhbmdsZTo6UmVzdWx0IFJlbmRlcmJ1ZmZlck10bDo6c2V0U3RvcmFnZUltcGwoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICBpZiAoKG1UZXh0dXJlID09IG51bGxwdHIgfHwg
IW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCkpCiAgICAg
ewotICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA9PSAxKQorICAgICAgICBpZiAoYWN0dWFsU2Ft
cGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSAmJiBtRm9ybWF0
LmdldENhcHMoKS5yZXNvbHZlKSkKICAgICAgICAgewotICAgICAgICAgICAgQU5HTEVfVFJZKG10
bDo6VGV4dHVyZTo6TWFrZTJEVGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCAxLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCksICZtVGV4dHVyZSkpOwor
ICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJEVGV4dHVyZShjb250ZXh0
TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaGVpZ2h0KSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxsb3dGb3JtYXRWaWV3ICovIGZh
bHNlLCAmbVRleHR1cmUpKTsKKworICAgICAgICAgICAgLy8gVXNlIGltcGxpY2l0IHJlc29sdmUg
Zm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aGVuZXZlciBwb3NzaWJsZS4gVGhpcyBpcyBiZWNh
dXNlCisgICAgICAgICAgICAvLyBmb3IgZGVwdGggc3RlbmNpbCB0ZXh0dXJlLCBpZiBzdGVuY2ls
IG5lZWRzIHRvIGJlIGJsaXR0ZWQsIGEgZm9ybWF0dGVkIGNsb25lIGhhcworICAgICAgICAgICAg
Ly8gdG8gYmUgY3JlYXRlZC4gQW5kIGl0IGlzIGV4cGVuc2l2ZSB0byBjbG9uZSBhIG11bHRpc2Ft
cGxlIHRleHR1cmUuCisgICAgICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA+IDEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtYXQgbXVzdCBzdXBwb3J0cyBpbXBs
aWNpdCByZXNvbHZlCisgICAgICAgICAgICAgICAgQVNTRVJUKG1Gb3JtYXQuZ2V0Q2FwcygpLnJl
c29sdmUpOworCisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJE
TVNUZXh0dXJlKAorICAgICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAg
LyogcmVuZGVyVGFyZ2V0T25seSAqLyB0cnVlLAorICAgICAgICAgICAgICAgICAgICAvKiBhbGxv
d0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZtSW1wbGljaXRNU1RleHR1cmUpKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xF
X1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZSgKLSAgICAgICAgICAgICAgICBjb250
ZXh0TXRsLCBtRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1wbGVzLAotICAgICAgICAg
ICAgICAgIC8qIHJlbmRlclRhcmdldE9ubHkgKi8gZmFsc2UsCi0gICAgICAgICAgICAgICAgLyog
YWxsb3dGb3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpLCAmbVRl
eHR1cmUpKTsKKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRE1TVGV4
dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aWR0aCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGhlaWdodCksIGFjdHVhbFNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBm
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZtVGV4dHVyZSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgbVJlbmRlclRhcmdldC5zZXQobVRleHR1cmUsIG10bDo6a1plcm9OYXRpdmVNaXBM
ZXZlbCwgMCwgbUZvcm1hdCk7CisgICAgICAgIG1SZW5kZXJUYXJnZXQuc2V0V2l0aEltcGxpY2l0
TVNUZXh0dXJlKG1UZXh0dXJlLCBtSW1wbGljaXRNU1RleHR1cmUsIG10bDo6a1plcm9OYXRpdmVN
aXBMZXZlbCwgMCwgbUZvcm1hdCk7CiAKICAgICAgICAgLy8gRm9yIGVtdWxhdGVkIGNoYW5uZWxz
IHRoYXQgR0wgdGV4dHVyZSBpbnRlbmRzIHRvIG5vdCBoYXZlLAogICAgICAgICAvLyB3ZSBuZWVk
IHRvIGluaXRpYWxpemUgdGhlaXIgY29udGVudC4KICAgICAgICAgYm9vbCBlbXVsYXRlZENoYW5u
ZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQpOwogICAgICAgICBpZiAoZW11bGF0
ZWRDaGFubmVscykKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBpbmRleCA9IG10bDo6SW1h
Z2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRleDo6TWFrZTJE
KDApKTsKLQotICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250
ZW50cyhjb250ZXh0LCBtVGV4dHVyZSwgbUZvcm1hdCwgaW5kZXgpKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgZ2w6OkltYWdlSW5kZXggaW5kZXg7CisKKyAgICAgICAgICAgIGlmIChhY3R1YWxT
YW1wbGVzID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmRleCA9IGdsOjpJ
bWFnZUluZGV4OjpNYWtlMkRNdWx0aXNhbXBsZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6OkltYWdl
SW5kZXg6Ok1ha2UyRCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQU5HTEVfVFJZ
KG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtVGV4dHVyZSwgbUZvcm1h
dCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAwKSkpOworICAgICAgICAgICAgaWYgKG1J
bXBsaWNpdE1TVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBTkdMRV9U
UlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1JbXBsaWNpdE1TVGV4
dHVyZSwgbUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6SW1hZ2VOYXRpdmVJbmRleChnbDo6SW1hZ2VJbmRleDo6TWFr
ZTJETXVsdGlzYW1wbGUoKSwgMCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgLy8gaWYg
KGVtdWxhdGVkQ2hhbm5lbHMpCiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwpAQCAtMTMzLDcgKzE2Nyw2IEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyYnVmZmVyTXRs
OjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkK
IHsKLSAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0IE1TQUEuCiAgICAgQVNTRVJUKG1UZXh0dXJl
ICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKICAgICAqcnRPdXQgPSAmbVJlbmRlclRhcmdldDsKICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRs
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLmgKaW5kZXggYmFmNGU0ZDI2NjkxODE0MGNiMDEyMzI4MWFkZTAzZjY0
MTRiZWY4OS4uMGM1NzUxNzVhMTE3MTk4ZWRkZjViZWNhYTJmZWRmYTQ1MDc2ZDcwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1JlbmRlclRhcmdldE10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaApAQCAtNDYsMjEgKzQ2LDE5IEBA
IGNsYXNzIFJlbmRlclRhcmdldE10bCBmaW5hbCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRSZW5kZXJUYXJnZXQKICAgICB2b2lkIGR1cGxpY2F0ZUZyb20oY29uc3QgUmVuZGVyVGFyZ2V0
TXRsICZzcmMpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIG10bDo6VGV4dHVyZVJlZiBnZXRU
ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmUubG9jaygpOyB9Ci0gICAgbXRsOjpUZXh0
dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbUltcGxpY2l0TVNU
ZXh0dXJlLmxvY2soKTsgfQotICAgIGNvbnN0IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgJmdldExl
dmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtTGV2ZWxJbmRleDsgfQotICAgIHVpbnQzMl90IGdl
dExheWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtTGF5ZXJJbmRleDsgfQorICAgIG10bDo6VGV4
dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJ
bmZvLT5nZXRUZXh0dXJlUmVmKCk7IH0KKyAgICBtdGw6OlRleHR1cmVSZWYgZ2V0SW1wbGljaXRN
U1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldElt
cGxpY2l0TVNUZXh0dXJlUmVmKCk7IH0KKyAgICBjb25zdCBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVs
ICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT5sZXZlbDsgfQorICAgIHVpbnQzMl90IGdldExheWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBt
VGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aDsgfQogICAgIHVpbnQzMl90IGdl
dFJlbmRlclNhbXBsZXMoKSBjb25zdDsKICAgICBjb25zdCBtdGw6OkZvcm1hdCAqZ2V0Rm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gbUZvcm1hdDsgfQogCiAgICAgdm9pZCB0b1JlbmRlclBhc3NBdHRh
Y2htZW50RGVzYyhtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAqcnBhRGVzY091dCkgY29u
c3Q7CiAKICAgcHJpdmF0ZToKLSAgICBtdGw6OlRleHR1cmVXZWFrUmVmIG1UZXh0dXJlOwotICAg
IG10bDo6VGV4dHVyZVdlYWtSZWYgbUltcGxpY2l0TVNUZXh0dXJlOwotICAgIG10bDo6TWlwbWFw
TmF0aXZlTGV2ZWwgbUxldmVsSW5kZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7Ci0gICAg
dWludDMyX3QgbUxheWVySW5kZXggICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3QgbXRsOjpG
b3JtYXQgKm1Gb3JtYXQgICAgICAgICA9IG51bGxwdHI7CisvLyBUaGlzIGlzIHNoYXJlZCBwb2lu
dGVyIHRvIGF2b2lkIGNyYXNoaW5nIHdoZW4gdGV4dHVyZSBkZWxldGVkIGFmdGVyIGJvdW5kIHRv
IGEgZnJhbWUgYnVmZmVyLgorICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50VGV4dHVyZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKKyAgICBj
b25zdCBtdGw6OkZvcm1hdCAqbUZvcm1hdCA9IG51bGxwdHI7CiB9OwogfSAgLy8gbmFtZXNwYWNl
IHJ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLm1tCmluZGV4IGU4
OWU3NjE0ODFkZDY0ZGM0N2M3NTA3YWFiOWJlZmE1ZjI0YzRlMmYuLmUxMjZkYmI2YmVlMDExOWEx
NjY5YTAxZTdlMDk2YzJkODRhN2Q4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRl
clRhcmdldE10bC5tbQpAQCAtMTEsNyArMTEsMTAgQEAKIAogbmFtZXNwYWNlIHJ4CiB7Ci1SZW5k
ZXJUYXJnZXRNdGw6OlJlbmRlclRhcmdldE10bCgpIHt9CitSZW5kZXJUYXJnZXRNdGw6OlJlbmRl
clRhcmdldE10bCgpIDoKKyAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKHN0ZDo6bWFrZV9zaGFy
ZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjPigpKSwKKyAgbUZv
cm1hdChudWxscHRyKQore30KIAogUmVuZGVyVGFyZ2V0TXRsOjp+UmVuZGVyVGFyZ2V0TXRsKCkK
IHsKQEAgLTE5LDEwICsyMiw3IEBAIFJlbmRlclRhcmdldE10bDo6flJlbmRlclRhcmdldE10bCgp
CiB9CiAKIFJlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJlbmRlclRhcmdldE10bCAm
Jm90aGVyKQotICAgIDogbVRleHR1cmUoc3RkOjptb3ZlKG90aGVyLm1UZXh0dXJlKSksCi0gICAg
ICBtSW1wbGljaXRNU1RleHR1cmUoc3RkOjptb3ZlKG90aGVyLm1JbXBsaWNpdE1TVGV4dHVyZSkp
LAotICAgICAgbUxldmVsSW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAotICAgICAgbUxheWVySW5k
ZXgob3RoZXIubUxheWVySW5kZXgpCisgICAgOiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8oc3Rk
Ojptb3ZlKG90aGVyLm1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbykpCiB7fQogCiB2b2lkIFJlbmRl
clRhcmdldE10bDo6c2V0KGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKQEAgLTM5LDIx
ICszOSwyMSBAQCB2b2lkIFJlbmRlclRhcmdldE10bDo6c2V0V2l0aEltcGxpY2l0TVNUZXh0dXJl
KGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGF5ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQp
CiB7Ci0gICAgbVRleHR1cmUgICAgICAgICAgID0gdGV4dHVyZTsKLSAgICBtSW1wbGljaXRNU1Rl
eHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBtTGV2ZWxJbmRleCAgICAgICAgPSBsZXZl
bDsKLSAgICBtTGF5ZXJJbmRleCAgICAgICAgPSBsYXllcjsKKyAgICBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPnRleHR1cmUgICAgICAgICAgID0gdGV4dHVyZTsKKyAgICBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm8tPmltcGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7CisgICAg
bVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKyAgICBtVGV4
dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aCAgICAgICAgPSBsYXllcjsKICAgICBt
Rm9ybWF0ICAgICAgICAgICAgPSAmZm9ybWF0OwogfQogCiB2b2lkIFJlbmRlclRhcmdldE10bDo6
c2V0VGV4dHVyZShjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUpCiB7Ci0gICAgbVRleHR1
cmUgPSB0ZXh0dXJlOworICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZSA9IHRl
eHR1cmU7CiB9CiAKIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRJbXBsaWNpdE1TVGV4dHVyZShj
b25zdCBtdGw6OlRleHR1cmVSZWYgJmltcGxpY2l0TVNUZXh0dXJlKQogewotICAgIG1JbXBsaWNp
dE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0
SW5mby0+aW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKIH0KIAogdm9pZCBS
ZW5kZXJUYXJnZXRNdGw6OmR1cGxpY2F0ZUZyb20oY29uc3QgUmVuZGVyVGFyZ2V0TXRsICZzcmMp
CkBAIC02NCwyNSArNjQsMTkgQEAgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OmR1cGxpY2F0ZUZyb20o
Y29uc3QgUmVuZGVyVGFyZ2V0TXRsICZzcmMpCiAKIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpyZXNl
dCgpCiB7Ci0gICAgbVRleHR1cmUucmVzZXQoKTsKLSAgICBtSW1wbGljaXRNU1RleHR1cmUucmVz
ZXQoKTsKLSAgICBtTGV2ZWxJbmRleCA9IG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbDsKLSAgICBt
TGF5ZXJJbmRleCA9IDA7Ci0gICAgbUZvcm1hdCAgICAgPSBudWxscHRyOworICAgIG1UZXh0dXJl
UmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZS5yZXNldCgpOworICAgIG1UZXh0dXJlUmVuZGVyVGFy
Z2V0SW5mby0+aW1wbGljaXRNU1RleHR1cmUucmVzZXQoKTsKKyAgICBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPmxldmVsICAgICAgICA9IG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbDsKKyAgICBt
VGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aCA9IDA7CisgICAgbUZvcm1hdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBudWxscHRyOwogfQogCiB1aW50MzJfdCBS
ZW5kZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMoKSBjb25zdAogewotICAgIG10bDo6VGV4
dHVyZVJlZiBpbXBsaWNpdE1TVGV4ID0gZ2V0SW1wbGljaXRNU1RleHR1cmUoKTsKLSAgICBtdGw6
OlRleHR1cmVSZWYgdGV4ICAgICAgICAgICA9IGdldFRleHR1cmUoKTsKLSAgICByZXR1cm4gaW1w
bGljaXRNU1RleCA/IGltcGxpY2l0TVNUZXgtPnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBs
ZXMoKSA6IDEpOworICAgIHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldFJlbmRl
clNhbXBsZXMoKTsKIH0KIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjp0b1JlbmRlclBhc3NBdHRhY2ht
ZW50RGVzYyhtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAqcnBhRGVzY091dCkgY29uc3QK
IHsKLSAgICBycGFEZXNjT3V0LT50ZXh0dXJlICAgICAgICAgICA9IG1UZXh0dXJlLmxvY2soKTsK
LSAgICBycGFEZXNjT3V0LT5pbXBsaWNpdE1TVGV4dHVyZSA9IG1JbXBsaWNpdE1TVGV4dHVyZS5s
b2NrKCk7Ci0gICAgcnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAgPSBtTGV2ZWxJbmRleDsK
LSAgICBycGFEZXNjT3V0LT5zbGljZU9yRGVwdGggICAgICA9IG1MYXllckluZGV4OwotICAgIHJw
YURlc2NPdXQtPmJsZW5kYWJsZSAgICAgICAgID0gbUZvcm1hdCA/IG1Gb3JtYXQtPmdldENhcHMo
KS5ibGVuZGFibGUgOiBmYWxzZTsKKyAgICBycGFEZXNjT3V0LT5yZW5kZXJUYXJnZXQgPSBtVGV4
dHVyZVJlbmRlclRhcmdldEluZm87CiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgK
aW5kZXggN2IyY2ZkNTBjYmRmZTQxZmYzNjg4MGY2MTBhNzhmNDQ0NmNhYTdlMS4uNTJlOTFhZmI2
ZjEzMjY1YjU2NjU4OTVhNzAyYWE5N2E4NzgwZDZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFk
ZXJNdGwuaApAQCAtMTEsOCArMTEsOCBAQAogCiAjaW5jbHVkZSA8bWFwPgogCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgiCi0KIG5hbWVzcGFjZSByeAogewogCkBAIC0y
Niw3ICsyNiwxOSBAQCBjbGFzcyBTaGFkZXJNdGwgOiBwdWJsaWMgU2hhZGVySW1wbAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxl
ckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMpIG92ZXJyaWRl
OwogCisgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ0cmFuc2xhdG9yTWV0YWxSZWZs
ZWN0aW9uOworICAgIH0KICAgICBzdGQ6OnN0cmluZyBnZXREZWJ1Z0luZm8oKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24gPSB7fTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxXYWl0
YWJsZUNvbXBpbGVFdmVudD4gY29tcGlsZUltcGxNdGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcgJnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpOwogfTsK
IAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbQppbmRl
eCBmOTA5ZmI1MDkzODViYzhlY2IxODdiNTVmNTI3MGFlOWNhMmRmNmZjLi5hZDAxZGJmNDVmYjhm
NDc5MDRiZmRiMWQ0Yjg0Njg2NmZlYjk4OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJN
dGwubW0KQEAgLTEwLDggKzEwLDEzIEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvU2hhZGVyTXRsLmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUv
Q29udGV4dC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkFO
R0xFL1dvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Nv
bnRleHRNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRs
LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjAsMTAgKzI1LDEwMCBAQCBTaGFkZXJNdGw6OlNo
YWRlck10bChjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSA6IFNoYWRlckltcGwoc3RhdGUp
IHt9CiAKIFNoYWRlck10bDo6flNoYWRlck10bCgpIHt9CiAKK2NsYXNzIFRyYW5zbGF0ZVRhc2sg
OiBwdWJsaWMgYW5nbGU6OkNsb3N1cmUKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0ZVRhc2so
U2hIYW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZzb3VyY2UpCisgICAgICAgIDogbUhhbmRsZShoYW5kbGUpLCBtT3B0aW9ucyhvcHRpb25z
KSwgbVNvdXJjZShzb3VyY2UpLCBtUmVzdWx0KGZhbHNlKQorICAgIHt9CisKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc291cmNlID0g
bVNvdXJjZS5jX3N0cigpOworICAgICAgICBtUmVzdWx0ICAgICAgICAgICAgPSBzaDo6Q29tcGls
ZShtSGFuZGxlLCAmc291cmNlLCAxLCBtT3B0aW9ucyk7CisgICAgfQorCisgICAgYm9vbCBnZXRS
ZXN1bHQoKSB7IHJldHVybiBtUmVzdWx0OyB9CisKKyAgICBTaEhhbmRsZSBnZXRIYW5kbGUoKSB7
IHJldHVybiBtSGFuZGxlOyB9CisKKyAgcHJpdmF0ZToKKyAgICBTaEhhbmRsZSBtSGFuZGxlOwor
ICAgIFNoQ29tcGlsZU9wdGlvbnMgbU9wdGlvbnM7CisgICAgc3RkOjpzdHJpbmcgbVNvdXJjZTsK
KyAgICBib29sIG1SZXN1bHQ7Cit9OworCitjbGFzcyBNVExXYWl0YWJsZUNvbXBpbGVFdmVudElt
cGwgZmluYWwgOiBwdWJsaWMgV2FpdGFibGVDb21waWxlRXZlbnQKK3sKKyAgcHVibGljOgorICAg
IE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbChTaGFkZXJNdGwgKnNoYWRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGFuZ2xlOjpXYWl0YWJsZUV2
ZW50PiB3YWl0YWJsZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnNoYXJlZF9wdHI8VHJhbnNsYXRlVGFzaz4gdHJhbnNsYXRlVGFzaykKKyAgICAgICAgOiBXYWl0
YWJsZUNvbXBpbGVFdmVudCh3YWl0YWJsZUV2ZW50KSwgbVRyYW5zbGF0ZVRhc2sodHJhbnNsYXRl
VGFzayksIG1TaGFkZXIoc2hhZGVyKQorICAgIHt9CisKKyAgICBib29sIGdldFJlc3VsdCgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1UcmFuc2xhdGVUYXNrLT5nZXRSZXN1bHQoKTsgfQorCisgICAgYm9v
bCBwb3N0VHJhbnNsYXRlKHN0ZDo6c3RyaW5nICppbmZvTG9nKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgICAgPSBzdGF0aWNfY2FzdDxzaDo6VFNoSGFu
ZGxlQmFzZSAqPihtVHJhbnNsYXRlVGFzay0+Z2V0SGFuZGxlKCkpOworICAgICAgICBhdXRvIHRy
YW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCk7
CisgICAgICAgIGlmICh0cmFuc2xhdG9yTWV0YWxEaXJlY3QgIT0gbnVsbHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQ29weSByZWZsZWN0aW9uIGZyb20gdHJhbnNsYXRpb24uCisgICAg
ICAgICAgICBtU2hhZGVyLT50cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0KKyAgICAgICAgICAg
ICAgICAqKHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bigpKTsKKyAgICAgICAgICAgIHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+Z2V0VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbigpLT5yZXNldCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNr
PiBtVHJhbnNsYXRlVGFzazsKKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7Cit9OworCitzdGQ6OnNo
YXJlZF9wdHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwo
CisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgZ2w6OlNoQ29tcGlsZXJJbnN0
YW5jZSAqY29tcGlsZXJJbnN0YW5jZSwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAor
ICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCit7CisjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfQVNTRVJUUykKKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9WQUxJREFURV9BU1Q7
CisjZW5kaWYKKworICAgIGF1dG8gd29ya2VyVGhyZWFkUG9vbCA9IGNvbnRleHQtPmdldFdvcmtl
clRocmVhZFBvb2woKTsKKyAgICBhdXRvIHRyYW5zbGF0ZVRhc2sgPQorICAgICAgICBzdGQ6Om1h
a2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFuY2UtPmdldEhhbmRsZSgpLCBj
b21waWxlT3B0aW9ucywgc291cmNlKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPE1U
TFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbD4oCisgICAgICAgIHRoaXMsIGFuZ2xlOjpXb3JrZXJU
aHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJlYWRQb29sLCB0cmFuc2xhdGVUYXNr
KSwKKyAgICAgICAgdHJhbnNsYXRlVGFzayk7Cit9CisKIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJs
ZUNvbXBpbGVFdmVudD4gU2hhZGVyTXRsOjpjb21waWxlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5jZSAqY29tcGlsZXJJbnN0YW5jZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGls
ZU9wdGlvbnMgb3B0aW9ucykKIHsKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGNvbnRleHQpOworICAgIGlmIChnZXRTdGF0ZSgpLmdldFNoYWRlclR5cGUoKSA9PSBn
bDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5
KCktPmdldEZlYXR1cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAorICAgICAgICBzaDo6VFNoSGFu
ZGxlQmFzZSAqYmFzZSA9IHN0YXRpY19jYXN0PHNoOjpUU2hIYW5kbGVCYXNlICo+KGNvbXBpbGVy
SW5zdGFuY2UtPmdldEhhbmRsZSgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0YWxEaXJl
Y3QgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpOworICAgICAgICBpZiAodHJh
bnNsYXRvck1ldGFsRGlyZWN0ID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsID0gc3RhdGljX2Nhc3Q8c2g6OlRyYW5zbGF0b3JNZXRhbCAqPihi
YXNlLT5nZXRBc0NvbXBpbGVyKCkpOworICAgICAgICAgICAgdHJhbnNsYXRvck1ldGFsLT5lbmFi
bGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmVuYWJsZUVtdWxhdGVk
SW5zdGFuY2VJRCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KICAgICBTaENvbXBpbGVPcHRpb25z
IGNvbXBpbGVPcHRpb25zID0gU0hfSU5JVElBTElaRV9VTklOSVRJQUxJWkVEX0xPQ0FMUzsKIAog
ICAgIGJvb2wgaXNXZWJHTCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS53ZWJnbENvbXBhdGli
aWxpdHk7CkBAIC0zMyw4ICsxMjgsMTEgQEAgc3RkOjpzaGFyZWRfcHRyPFdhaXRhYmxlQ29tcGls
ZUV2ZW50PiBTaGFkZXJNdGw6OmNvbXBpbGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnQKICAgICB9
CiAKICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9QT0lOVF9TSVpFOworI2lmIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkKKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9GUkFHX0RFUFRIOworI2VuZGlm
CiAKLSAgICByZXR1cm4gY29tcGlsZUltcGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5jZSwgbVN0
YXRlLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlvbnMpOworICAgIHJldHVybiBj
b21waWxlSW1wbE10bChjb250ZXh0LCBjb21waWxlckluc3RhbmNlLCBnZXRTdGF0ZSgpLmdldFNv
dXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlvbnMpOwogfQogCiBzdGQ6OnN0cmluZyBTaGFk
ZXJNdGw6OmdldERlYnVnSW5mbygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
aAppbmRleCA5ZTg0Zjg4Zjc1NGQxMGUzYjY2YzIwMmNlMjM0ODk2YjJkMTkxZDkwLi4wYWRjMzYw
NjA4NmE5ZDg4ZGNjZTNiNGNmMDFlZDZkNjM5NTAwNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9T
dXJmYWNlTXRsLmgKQEAgLTI0LDcgKzI0LDI3IEBAIG5hbWVzcGFjZSByeAogCiBjbGFzcyBEaXNw
bGF5TXRsOwogCi1jbGFzcyBTdXJmYWNlTXRsIDogcHVibGljIFN1cmZhY2VJbXBsCitjbGFzcyBT
dXJmYWNlTXRsUHJvdG9jb2wgOiBwdWJsaWMgU3VyZmFjZUltcGwKK3sKKyAgcHVibGljOgorICAg
IFN1cmZhY2VNdGxQcm90b2NvbChjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUpIDogU3Vy
ZmFjZUltcGwoc3RhdGUpIHt9CisgICAgdmlydHVhbCBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0ICAg
ICAgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFn
ZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91
dCkgb3ZlcnJpZGUgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc1JvYnVzdFJlc291cmNlSW5p
dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERy
YXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpID0gMDsKKyAgICB2aXJ0
dWFsIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIGJvb2wgKm5ld0RyYXdhYmxlT3V0KSA9IDA7CisgICAgdmlydHVh
bCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworICAgIHZpcnR1YWwgY29uc3QgbXRsOjpUZXh0
dXJlUmVmICYgZ2V0Q29sb3JUZXh0dXJlKCkgPSAwOworfTsKKworY2xhc3MgU3VyZmFjZU10bCA6
IHB1YmxpYyBTdXJmYWNlTXRsUHJvdG9jb2wKIHsKICAgcHVibGljOgogICAgIFN1cmZhY2VNdGwo
RGlzcGxheU10bCAqZGlzcGxheSwKQEAgLTY3LDExICs4NywxMSBAQCBjbGFzcyBTdXJmYWNlTXRs
IDogcHVibGljIFN1cmZhY2VJbXBsCiAgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFsaXplQ29udGVu
dHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgpIG92ZXJyaWRlOwog
Ci0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1cmUoKSB7IHJldHVybiBt
Q29sb3JUZXh0dXJlOyB9CisgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1
cmUoKSBvdmVycmlkZSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CiAgICAgY29uc3QgbXRsOjpG
b3JtYXQgJmdldENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUNvbG9yRm9ybWF0OyB9Ci0g
ICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtU2FtcGxlczsgfQorICAgIGludCBn
ZXRTYW1wbGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVNhbXBsZXM7IH0KIAotICAgIGJv
b2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3QgeyByZXR1cm4gbVJvYnVzdFJlc291cmNl
SW5pdDsgfQorICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQogCiAgICAgYW5nbGU6OlJlc3VsdCBnZXRB
dHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKQEAg
LTE0NCwxMyArMTY0LDE0IEBAIGNsYXNzIFdpbmRvd1N1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFj
ZU10bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZy
YW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKIAorICAg
IGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVu
dERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZXdEcmF3YWJsZU91
dCAvKiogbnVsbGFibGUgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQgLyoqIG51bGxhYmxlICovKSBvdmVycmlk
ZTsKIAogICAgIC8vIEVuc3VyZSB0aGUgdGhlIHRleHR1cmUgcmV0dXJuZWQgZnJvbSBnZXRDb2xv
clRleHR1cmUoKSBpcyByZWFkeSBmb3IgZ2xSZWFkUGl4ZWxzKCkuIFRoaXMKICAgICAvLyBpbXBs
aWNpdGx5IGNhbGxzIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKCkuCi0gICAgYW5nbGU6
OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwotCisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVS
ZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOwor
ICAgIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtUmV0YWlu
QnVmZmVyOyB9CiAgIHByaXZhdGU6CiAgICAgYW5nbGU6OlJlc3VsdCBzd2FwSW1wbChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBvYnRhaW5OZXh0RHJhd2Fi
bGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtMTY4LDYgKzE4OSw4IEBAIGNsYXNz
IFdpbmRvd1N1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZU10bAogICAgIC8vIGV2ZW50LiBXZSBk
b24ndCB1c2UgbU1ldGFsTGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5IHNpbmNlIGl0IG1pZ2h0
IGJlIGNoYW5nZWQgaW50ZXJuYWxseSBieQogICAgIC8vIG1ldGFsIHJ1bnRpbWUuCiAgICAgQ0dT
aXplIG1DdXJyZW50S25vd25EcmF3YWJsZVNpemU7CisKKyAgICBib29sIG1SZXRhaW5CdWZmZXIg
PSBmYWxzZTsKIH07CiAKIC8vIE9mZnNjcmVlbiBzdXJmYWNlLCBiYXNlIGNsYXNzIG9mIFBCdWZm
ZXIsIElPU3VyZmFjZS4KQEAgLTIxMiwzNyArMjM1LDUgQEAgY2xhc3MgUEJ1ZmZlclN1cmZhY2VN
dGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3VyZmFjZU10bAogICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQo
RUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7CiB9OwogCi0vLyBPZmZzY3JlZW4gY3JlYXRlZCBmcm9t
IElPU3VyZmFjZQotY2xhc3MgSU9TdXJmYWNlU3VyZmFjZU10bCA6IHB1YmxpYyBPZmZzY3JlZW5T
dXJmYWNlTXRsCi17Ci0gIHB1YmxpYzoKLSAgICBJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlN
dGwgKmRpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZhY2VT
dGF0ZSAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0
dHJpYnMpOwotICAgIH5JT1N1cmZhY2VTdXJmYWNlTXRsKCkgb3ZlcnJpZGU7Ci0KLSAgICBlZ2w6
OkVycm9yIGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKLSAgICBlZ2w6OkVycm9yIHJl
bGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikg
b3ZlcnJpZGU7Ci0KLSAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzYW1wbGVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgZWds
OjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOwotCi0gIHByaXZhdGU6Ci0gICAgYW5nbGU6OlJlc3Vs
dCBlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsK
LQotICAgIElPU3VyZmFjZVJlZiBtSU9TdXJmYWNlOwotICAgIE5TVUludGVnZXIgbUlPU3VyZmFj
ZVBsYW5lOwotICAgIGludCBtSU9TdXJmYWNlRm9ybWF0SWR4OwotfTsKLQogfSAgLy8gbmFtZXNw
YWNlIHJ4Ci0KICNlbmRpZiAvKiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9TVVJGQUNFTVRMX0hf
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCmluZGV4IDMwM2ZiMTY3NDk2ZTc4
MDk1YTBkMWI0YmM5MjJjMWY2Y2Q4YmRjYWEuLmM5ZWUyNGJmYWFjMWY4NTYxOGNjN2MzMWIxNjFj
Y2M4Yjc3Y2I0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCkBAIC0zMyw1
NSArMzMsMTkgQEAgbmFtZXNwYWNlCiB7CiAKICNkZWZpbmUgQU5HTEVfVE9fRUdMX1RSWShFWFBS
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgaWYgKEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZSkpIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZhY2UoKTsg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQorZG8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBpZiAoQU5HTEVfVU5MSUtFTFkoKEVYUFIpICE9IGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlKSkgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZhY2UoKTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKIAogY29uc3RleHByIGFuZ2xlOjpG
b3JtYXRJRCBrRGVmYXVsdEZyYW1lQnVmZmVyRGVwdGhGb3JtYXRJZCAgID0gYW5nbGU6OkZvcm1h
dElEOjpEMzJfRkxPQVQ7CiBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVC
dWZmZXJTdGVuY2lsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OlM4X1VJTlQ7CiBjb25zdGV4
cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0aFN0ZW5jaWxGb3JtYXRJ
ZCA9CiAgICAgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDsKIAotc3RydWN0IElP
U3VyZmFjZUZvcm1hdEluZm8KLXsKLSAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQ7Ci0gICAgR0xl
bnVtIHR5cGU7Ci0gICAgc2l6ZV90IGNvbXBvbmVudEJ5dGVzOwotCi0gICAgYW5nbGU6OkZvcm1h
dElEIG5hdGl2ZUFuZ2xlRm9ybWF0SWQ7Ci19OwotCi0vLyBjbGFuZy1mb3JtYXQgb2ZmCi0vLyBO
T1RFKGhxbGUpOiBTdXBwb3J0IFIxNl9VSU5UIG9uY2UgR0xFUzMgaXMgY29tcGxldGUuCi1jb25z
dGV4cHIgc3RkOjphcnJheTxJT1N1cmZhY2VGb3JtYXRJbmZvLCA4PiBrSU9TdXJmYWNlRm9ybWF0
cyA9IHt7Ci0gICAge0dMX1JFRCwgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
IDEsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19LAotICAgIHtHTF9SRUQsICAgICAgR0xfVU5T
SUdORURfU0hPUlQsICAgICAgICAgICAgICAyLCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNl9VTk9STX0s
Ci0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDIsIGFu
Z2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STX0sCi0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05F
RF9TSE9SVCwgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VOT1JNfSwK
LSAgICB7R0xfUkdCLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgNCwgYW5n
bGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCi0gICAge0dMX0JHUkFfRVhULCBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk19LAotICAgIHtHTF9SR0JBLCAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICA4
LCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkExNl9GTE9BVH0sCi0gICAge0dMX1JHQjEwX0Ey
LCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsIDQsIGFuZ2xlOjpGb3JtYXRJRDo6QjEw
RzEwUjEwQTJfVU5PUk19LAotfX07Ci0vLyBjbGFuZy1mb3JtYXQgb24KLQotaW50IEZpbmRJT1N1
cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihrSU9TdXJmYWNlRm9ybWF0
cy5zaXplKCkpOyArK2kpCi0gICAgewotICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0g
a0lPU3VyZmFjZUZvcm1hdHNbaV07Ci0gICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9y
bWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVUZXh0dXJlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IHdpZHRoLApAQCAtMTI4LDYgKzkyLDE5IEBAIGJvb2wgSXNGcmFtZUNhcHR1
cmVFbmFibGVkKCkKICNlbmRpZgogfQogCitBTkdMRV9NVExfVU5VU0VECitzdGQ6OnN0cmluZyBH
ZXRNZXRhbENhcHR1cmVGaWxlKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9F
TkFCTEVECisgICAgcmV0dXJuICIiOworI2Vsc2UKKyAgICBhdXRvIHZhciAgICAgICAgICAgICAg
ICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0ZJTEUiKTsKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6ICIiOworCisgICAgcmV0
dXJuIGZpbGVQYXRoOworI2VuZGlmCit9CisKIEFOR0xFX01UTF9VTlVTRUQKIHNpemVfdCBNYXhB
bGxvd2VkRnJhbWVDYXB0dXJlKCkKIHsKQEAgLTIwMiw2ICsxNzksMjEgQEAgdm9pZCBTdGFydEZy
YW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLCBpZDxNVExDb21tYW5kUXVldWU+
IG1ldGFsQ21kUXUKICAgICB7CiAgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJl
RGVzY3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOwogICAgICAg
ICBjYXB0dXJlRGVzY3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsK
KyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAgICAgID0gR2V0TWV0
YWxDYXB0dXJlRmlsZSgpOworICAgICAgICBpZiAoZmlsZVBhdGggIT0gIiIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9CisgICAgICAgICAg
ICAgICAgZmlsZVBhdGggKyBzdGQ6OnRvX3N0cmluZyhnRnJhbWVDYXB0dXJlZCAtIDEpICsgIi5n
cHV0cmFjZSI7CisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9IE1U
TENhcHR1cmVEZXN0aW5hdGlvbkdQVVRyYWNlRG9jdW1lbnQ7CisgICAgICAgICAgICBjYXB0dXJl
RGVzY3JpcHRvci5vdXRwdXRVUkwgPQorICAgICAgICAgICAgICAgIFtOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm51bWJlcmVkUGF0aC5jX3N0cigp
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6ZmFsc2VdOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBh
dXNlIGV4ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lk
ZSBYY29kZQorICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRpb24gPSBNVExD
YXB0dXJlRGVzdGluYXRpb25EZXZlbG9wZXJUb29sczsKKyAgICAgICAgfQogCiAgICAgICAgIE5T
RXJyb3IgKmVycm9yOwogICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVX
aXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQpAQCAtMjExLDE0
ICsyMDMsMTUgQEAgdm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2
aWNlLCBpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsQ21kUXUKICAgICB9CiAgICAgZWxzZQogIyAg
ICBlbmRpZiAgLy8gX19NQUNfMTBfMTUKKyAgICAgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YQ0koMTAuMTUsIDEzLjAsIDEzKSkKICAgICB7Ci0gICAgICAgIGlmIChGcmFtZUNhcHR1cmVE
ZXZpY2VTY29wZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBbY2FwdHVyZU1hbmFnZXIgc3Rh
cnRDYXB0dXJlV2l0aERldmljZTptZXRhbERldmljZV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQorICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01U
TENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKyAgICAgICAgY2FwdHVyZURlc2NyaXB0
b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisKKyAgICAgICAgTlNFcnJv
ciAqZXJyb3I7CisgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhE
ZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRoQ29tbWFuZFF1ZXVlOm1l
dGFsQ21kUXVldWVdOworICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVy
ZSwgZXJyb3IgJUAiLCBlcnJvcik7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgIC8vIEFOR0xF
X01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRApAQCAtMjQ1LDExICsyMzgsMTAgQEAgdm9pZCBT
dG9wRnJhbWVDYXB0dXJlKCkKIH0KIH0KIAotLy8gU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlvbgog
U3VyZmFjZU10bDo6U3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQotICAgIDogU3VyZmFj
ZUltcGwoc3RhdGUpCisgICAgOiBTdXJmYWNlTXRsUHJvdG9jb2woc3RhdGUpCiB7CiAgICAgbVJv
YnVzdFJlc291cmNlSW5pdCA9CiAgICAgICAgIGF0dHJpYnMuZ2V0KEVHTF9ST0JVU1RfUkVTT1VS
Q0VfSU5JVElBTElaQVRJT05fQU5HTEUsIEVHTF9GQUxTRSkgPT0gRUdMX1RSVUU7CkBAIC02OTMs
NiArNjg1LDEwIEBAIGFuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFjZU10bDo6Z2V0QXR0YWNobWVu
dFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29uCiAgICAgcmV0dXJuIFN1cmZhY2VN
dGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4dCwgYmluZGluZywgaW1hZ2VJbmRl
eCwgc2FtcGxlcywgcnRPdXQpOwogfQogCithbmdsZTo6UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6
OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
KQoreworICAgIHJldHVybiBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb250ZXh0LCBu
dWxscHRyKTsKK30KIGFuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVu
dERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Km5ld0RyYXdhYmxlT3V0KQogewpAQCAtOTQzLDE1NyArOTM5LDUgQEAgdm9pZCBQQnVmZmVyU3Vy
ZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKICAgICBtU2l6ZS5oZWlnaHQg
PSBoZWlnaHQ7CiB9CiAKLS8vIElPU3VyZmFjZVN1cmZhY2VNdGwgaW1wbGVtZW50YXRpb24uCi1J
T1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3Bs
YXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6
U3VyZmFjZVN0YXRlICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCi0gICAgOiBP
ZmZzY3JlZW5TdXJmYWNlTXRsKGRpc3BsYXksIHN0YXRlLCBhdHRyaWJzKSwgbUlPU3VyZmFjZSgo
X19icmlkZ2UgSU9TdXJmYWNlUmVmKShidWZmZXIpKQotewotICAgIENGUmV0YWluKG1JT1N1cmZh
Y2UpOwotCi0gICAgbUlPU3VyZmFjZVBsYW5lID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdl
dChFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKSk7Ci0KLSAgICBFR0xBdHRyaWIgaW50ZXJuYWxG
b3JtYXQgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOwot
ICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUpOwotICAgIG1JT1N1cmZhY2VGb3JtYXRJZHggPQotICAgICAgICBGaW5kSU9TdXJm
YWNlRm9ybWF0SW5kZXgoc3RhdGljX2Nhc3Q8R0xlbnVtPihpbnRlcm5hbEZvcm1hdCksIHN0YXRp
Y19jYXN0PEdMZW51bT4odHlwZSkpOwotICAgIEFTU0VSVChtSU9TdXJmYWNlRm9ybWF0SWR4ID49
IDApOwotCi0gICAgbUNvbG9yRm9ybWF0ID0KLSAgICAgICAgZGlzcGxheS0+Z2V0UGl4ZWxGb3Jt
YXQoa0lPU3VyZmFjZUZvcm1hdHNbbUlPU3VyZmFjZUZvcm1hdElkeF0ubmF0aXZlQW5nbGVGb3Jt
YXRJZCk7Ci19Ci1JT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCgpCi17
Ci0gICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0cikKLSAgICB7Ci0gICAgICAgIENGUmVsZWFz
ZShtSU9TdXJmYWNlKTsKLSAgICAgICAgbUlPU3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgfQotfQot
Ci1lZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwotICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNv
bnRleHRNdGwpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBvZmZzY3JlZW4gdGV4dHVyZSBpZiBuZWVk
ZWQ6Ci0gICAgQU5HTEVfVE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnRl
eHQpKTsKLQotICAgIHJldHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29u
dGV4dCwgdGV4dHVyZSwgYnVmZmVyKTsKLX0KLQotZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBi
dWZmZXIpCi17Ci0gICAgZWdsOjpFcnJvciByZSA9IE9mZnNjcmVlblN1cmZhY2VNdGw6OnJlbGVh
c2VUZXhJbWFnZShjb250ZXh0LCBidWZmZXIpOwotICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKLSAg
ICByZXR1cm4gcmU7Ci19Ci0KLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0
QXR0YWNobWVudFJlbmRlclRhcmdldCgKLSAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
LSAgICBHTGVudW0gYmluZGluZywKLSAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRl
eCwKLSAgICBHTHNpemVpIHNhbXBsZXMsCi0gICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVy
VGFyZ2V0ICoqcnRPdXQpCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSBvZmZzY3JlZW4gdGV4dHVyZSBp
ZiBuZWVkZWQ6Ci0gICAgQU5HTEVfVFJZKGVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQoY29udGV4
dCkpOwotCi0gICAgcmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQoY29udGV4dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydE91dCk7
Ci19Ci0KLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlQ29sb3JUZXh0
dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAobUNvbG9y
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
LSAgICB9Ci0gICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0
KTsKLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQotICAgIHsKLSAgICAgICAgYXV0byB0ZXhEZXNj
ID0KLSAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkREZXNjcmlwdG9y
V2l0aFBpeGVsRm9ybWF0Om1Db2xvckZvcm1hdC5tZXRhbEZvcm1hdAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6bVNp
emUud2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0Om1TaXplLmhlaWdodAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXBwZWQ6Tk9dOwotCi0g
ICAgICAgIHRleERlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFkIHwgTVRMVGV4
dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OwotCi0gICAgICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUg
PQotICAgICAgICAgICAgW2NvbnRleHRNdGwtPmdldE1ldGFsRGV2aWNlKCkgbmV3VGV4dHVyZVdp
dGhEZXNjcmlwdG9yOnRleERlc2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlvc3VyZmFjZTptSU9TdXJmYWNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmU6bUlP
U3VyZmFjZVBsYW5lXTsKLQotICAgICAgICBtQ29sb3JUZXh0dXJlID0gbXRsOjpUZXh0dXJlOjpN
YWtlRnJvbU1ldGFsKFt0ZXh0dXJlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOwotICAgIH0KLQot
ICAgIG1Db2xvclJlbmRlclRhcmdldC5zZXQobUNvbG9yVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtQ29sb3JGb3JtYXQpOwotCi0gICAgaWYgKGtJT1N1cmZhY2VGb3JtYXRz
W21JT1N1cmZhY2VGb3JtYXRJZHhdLmludGVybmFsRm9ybWF0ID09IEdMX1JHQikKLSAgICB7Ci0g
ICAgICAgIC8vIFRoaXMgZm9ybWF0IGhhcyBlbXVsYXRlZCBhbHBoYSBjaGFubmVsLiBJbml0aWFs
aXplIHRleHR1cmUncyBhbHBoYSBjaGFubmVsIHRvIDEuMC4KLSAgICAgICAgY29uc3QgbXRsOjpG
b3JtYXQgJnJnYkNsZWFyRm9ybWF0ID0KLSAgICAgICAgICAgIGNvbnRleHRNdGwtPmdldFBpeGVs
Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKLSAgICAgICAgQU5HTEVfVFJZ
KG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50c0dQVSgKLSAgICAgICAgICAgIGNvbnRleHQs
IG1Db2xvclRleHR1cmUsIHJnYkNsZWFyRm9ybWF0LAotICAgICAgICAgICAgbXRsOjpJbWFnZU5h
dGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkp
LAotICAgICAgICAgICAgTVRMQ29sb3JXcml0ZU1hc2tBbHBoYSkpOwotCi0gICAgICAgIC8vIERp
c2FibGUgc3Vic2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgbUNv
bG9yVGV4dHVyZS0+c2V0Q29sb3JXcml0YWJsZU1hc2soTVRMQ29sb3JXcml0ZU1hc2tBbGwgJiAo
fk1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjpWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKQotewotICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UgPSAoX19icmlkZ2UgSU9T
dXJmYWNlUmVmKShidWZmZXIpOwotCi0gICAgLy8gVGhlIHBsYW5lIG11c3QgZXhpc3QgZm9yIHRo
aXMgSU9TdXJmYWNlLiBJT1N1cmZhY2VHZXRQbGFuZUNvdW50IGNhbiByZXR1cm4gMCBmb3Igbm9u
LXBsYW5hcgotICAgIC8vIGlvU3VyZmFjZXMgYnV0IHdlIHdpbGwgdHJlYXQgbm9uLXBsYW5hciBs
aWtlIGl0IGlzIGEgc2luZ2xlIHBsYW5lLgotICAgIHNpemVfdCBzdXJmYWNlUGxhbmVDb3VudCA9
IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChpb1N1cmZhY2UpKTsK
LSAgICBFR0xBdHRyaWIgcGxhbmUgICAgICAgICAgPSBhdHRyaWJzLmdldChFR0xfSU9TVVJGQUNF
X1BMQU5FX0FOR0xFKTsKLSAgICBpZiAocGxhbmUgPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4o
cGxhbmUpID49IHN1cmZhY2VQbGFuZUNvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFRoZSB3aWR0aCBoZWlnaHQgc3BlY2lmaWVkIG11c3QgYmUgYXQg
bGVhc3QgKDEsIDEpIGFuZCBhdCBtb3N0IHRoZSBwbGFuZSBzaXplCi0gICAgRUdMQXR0cmliIHdp
ZHRoICA9IGF0dHJpYnMuZ2V0KEVHTF9XSURUSCk7Ci0gICAgRUdMQXR0cmliIGhlaWdodCA9IGF0
dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOwotICAgIGlmICh3aWR0aCA8PSAwIHx8IHN0YXRpY19jYXN0
PHNpemVfdD4od2lkdGgpID4gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKGlvU3VyZmFjZSwgcGxh
bmUpIHx8Ci0gICAgICAgIGhlaWdodCA8PSAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaGVpZ2h0
KSA+IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoaW9TdXJmYWNlLCBwbGFuZSkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGlzIElPU3VyZmFj
ZSBmb3JtYXQKLSAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJzLmdldChFR0xf
VEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOwotICAgIEVHTEF0dHJpYiB0eXBlICAgICAg
ICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOwotCi0gICAgaW50IGZv
cm1hdEluZGV4ID0KLSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0
PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKLQot
ICAgIGlmIChmb3JtYXRJbmRleCA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZm9ybWF0IG1hdGNoZXMgdGhpcyBJT1N1cmZh
Y2UgcGxhbmUKLSAgICBpZiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50T2ZQbGFuZShpb1N1
cmZhY2UsIHBsYW5lKSAhPQotICAgICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0u
Y29tcG9uZW50Qnl0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oCmluZGV4IDYy
Zjk2ZWUyODVkYjJmM2FkOTYzNTRhZDAzMzc5OWIzMGM2ODAxNzcuLmY0YmNhZTkwZTMxYjk5MjBj
NDhhMjk0MGYwYmU2NWFlZTgxNjNhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIG10bAogCiAvLyBDb21tb24gY2xhc3MgdG8gYmUgdXNlZCBieSBib3RoIFN5bmNJbXBs
IGFuZCBFR0xTeW5jSW1wbC4KIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQg
b24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKLSNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxF
CisjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQogY2xh
c3MgU3luYwogewogICBwdWJsaWM6CkBAIC01OSw3ICs1OSw3IEBAIGNsYXNzIFN5bmMKICAgICBz
dGQ6OnNoYXJlZF9wdHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+IG1DdjsKICAgICBzdGQ6OnNo
YXJlZF9wdHI8c3RkOjptdXRleD4gbUxvY2s7CiB9OwotI2Vsc2UgICAvLyAjaWYgQU5HTEVfTVRM
X0VWRU5UX0FWQUlMQUJMRQorI2Vsc2UgICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8
fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQogY2xhc3MgU3luYwogewogICBwdWJsaWM6CkBAIC05MCw3
ICs5MCw3IEBAIGNsYXNzIFN5bmMKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7
CiAgICAgfQogfTsKLSNlbmRpZiAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKyNl
bmRpZiAgLy8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8x
NCkKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIAogY2xhc3MgRmVuY2VOVk10bCA6IHB1YmxpYyBGZW5j
ZU5WSW1wbApAQCAtOTgsOSArOTgsNyBAQCBjbGFzcyBGZW5jZU5WTXRsIDogcHVibGljIEZlbmNl
TlZJbXBsCiAgIHB1YmxpYzoKICAgICBGZW5jZU5WTXRsKCk7CiAgICAgfkZlbmNlTlZNdGwoKSBv
dmVycmlkZTsKLQogICAgIHZvaWQgb25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
KSBvdmVycmlkZTsKLQogICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LCBHTGVudW0gY29uZGl0aW9uKSBvdmVycmlkZTsKICAgICBhbmdsZTo6UmVzdWx0IHRl
c3QoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMYm9vbGVhbiAqb3V0RmluaXNoZWQpIG92
ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluaXNoKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KSBvdmVycmlkZTsKQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xTeW5jTXRsIGZpbmFs
IDogcHVibGljIEVHTFN5bmNJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCBm
bGFncykgb3ZlcnJpZGU7CiAgICAgZWdsOjpFcnJvciBnZXRTdGF0dXMoY29uc3QgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5LCBFR0xpbnQgKm91dFN0YXR1cykgb3ZlcnJpZGU7CiAKKyAgICBlZ2w6OkVy
cm9yIGR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQg
KnJlc3VsdCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgcHJpdmF0ZToKICAgICBtdGw6OlN5bmMgbVN5
bmM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQppbmRleCBkZmY4MDAzMTIwYThhNmNl
NDYyYjUwNmVmNjU3NTViNzI0ZjFmMjYyLi5mOGYzZWU2OTc5OGJiMWMyOGYzZTJkYTE5NTY5NjUy
OWI3ZTgwYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQpAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAgbmFtZXNwYWNlIHJ4CiBu
YW1lc3BhY2UgbXRsCiB7CiAvLyBTaGFyZWRFdmVudCBpcyBvbmx5IGF2YWlsYWJsZSBvbiBpT1Mg
MTIuMCsgb3IgbWFjIDEwLjE0KwotI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKyNpZiBk
ZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCiBTeW5jOjpTeW5j
KCkge30KIFN5bmM6On5TeW5jKCkge30KIApAQCAtODcsNyArODcsNyBAQCBhbmdsZTo6UmVzdWx0
IFN5bmM6OmNsaWVudFdhaXQoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAvLyBvbkRlc3Ry
b3koKSwgYnV0IHRoZSBjYWxsYmFjayBtaWdodCBzdGlsbCBub3QgYmUgZmlyZWQgeWV0LgogICAg
IHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4gY3ZSZWYgPSBtQ3Y7CiAg
ICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IGxvY2tSZWYgICAgICAgICAgICA9IG1Mb2Nr
OwotCisjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQogICAgIEF1dG9PYmpDT2JqPE1UTFNo
YXJlZEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPQogICAgICAgICBjb250ZXh0TXRsLT5n
ZXREaXNwbGF5KCktPmdldE9yQ3JlYXRlU2hhcmVkRXZlbnRMaXN0ZW5lcigpOwogICAgIFttTWV0
YWxTaGFyZWRFdmVudC5nZXQoKSBub3RpZnlMaXN0ZW5lcjpldmVudExpc3RlbmVyCkBAIC0xMDYs
NiArMTA2LDcgQEAgYW5nbGU6OlJlc3VsdCBTeW5jOjpjbGllbnRXYWl0KENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCiAKICAgICBBU1NFUlQobU1ldGFsU2hhcmVkRXZlbnQuZ2V0KCkuc2lnbmFsZWRW
YWx1ZSA+PSBtU2V0Q291bnRlcik7CiAgICAgKm91dFJlc3VsdCA9IEdMX0NPTkRJVElPTl9TQVRJ
U0ZJRUQ7CisjZW5kaWYKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0K
QEAgLTExOCw3ICsxMTksNyBAQCBhbmdsZTo6UmVzdWx0IFN5bmM6OmdldFN0YXR1cyhib29sICpz
aWduYWxlZCkKICAgICAqc2lnbmFsZWQgPSBtTWV0YWxTaGFyZWRFdmVudC5nZXQoKS5zaWduYWxl
ZFZhbHVlID49IG1TZXRDb3VudGVyOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KLSNlbmRpZiAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKyNlbmRpZiAg
Ly8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKIH0g
IC8vIG5hbWVzcGFjZSBtdGwKIAogLy8gRmVuY2VOVk10bCBpbXBsZW1lbnRhdGlvbgpAQCAtMTI4
LDcgKzEyOSw4IEBAIEZlbmNlTlZNdGw6On5GZW5jZU5WTXRsKCkge30KIAogdm9pZCBGZW5jZU5W
TXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgbVN5bmMu
b25EZXN0cm95KCk7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybjsKIH0KIAogYW5n
bGU6OlJlc3VsdCBGZW5jZU5WTXRsOjpzZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdM
ZW51bSBjb25kaXRpb24pCkBAIC0zMDcsNCArMzA5LDEwIEBAIGVnbDo6RXJyb3IgRUdMU3luY010
bDo6Z2V0U3RhdHVzKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpvdXRTdGF0
dXMpCiAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwogfQogCitlZ2w6OkVycm9yIEVHTFN5bmNN
dGw6OmR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQg
KnJlc3VsdCkgY29uc3QKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBlZ2w6OkVn
bEJhZERpc3BsYXkoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmgKaW5k
ZXggNWMyMTQxYmQwYmFjNzcwOTI1ZDdlOWY2MTE0OWFmNjVlYzc5MWJkYy4uNWY0YjJkNDBmNzAz
ZTQ3ZWQ5MWZiOWI5ZDc4MGMzNTYyOWM0YjhlZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVy
ZU10bC5oCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAiY29tbW9uL1BhY2tlZEVudW1zLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvVGV4dHVyZUltcGwuaCIKICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaCIKKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgotCiBuYW1lc3BhY2UgcngKIHsKIApAQCAtMzIs
NiArMzIsOCBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiB7CiAgIHB1
YmxpYzoKICAgICBUZXh0dXJlTXRsKGNvbnN0IGdsOjpUZXh0dXJlU3RhdGUgJnN0YXRlKTsKKyAg
ICAvLyBUZXh0dXJlICB2aWV3CisgICAgVGV4dHVyZU10bChjb25zdCBUZXh0dXJlTXRsICZtdGws
IEdMZW51bSBmb3JtYXQpOwogICAgIH5UZXh0dXJlTXRsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBv
bkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOwogCkBAIC0xOTMs
NiArMTk1LDcgQEAgY2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAogICAgIElt
YWdlRGVmaW5pdGlvbk10bCAmZ2V0SW1hZ2VEZWZpbml0aW9uKGNvbnN0IGdsOjpJbWFnZUluZGV4
ICZpbWFnZUluZGV4KTsKICAgICBSZW5kZXJUYXJnZXRNdGwgJmdldFJlbmRlclRhcmdldChjb25z
dCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CiAgICAgYm9vbCBpc0luZGV4V2l0aGluTWlu
TWF4TGV2ZWxzKGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBjb25zdDsKKyAgICBt
dGw6OlRleHR1cmVSZWYgJmdldEltcGxpY2l0TVNUZXh0dXJlKGNvbnN0IGdsOjpJbWFnZUluZGV4
ICZpbWFnZUluZGV4KTsKIAogICAgIC8vIElmIGxldmVscyA9IDAsIHRoaXMgZnVuY3Rpb24gd2ls
bCBjcmVhdGUgZnVsbCBtaXBtYXBzIHRleHR1cmUuCiAgICAgYW5nbGU6OlJlc3VsdCBzZXRTdG9y
YWdlSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTMxMiw4ICszMTUsOSBAQCBj
bGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiAgICAgYW5nbGU6OlJlc3VsdCBn
ZW5lcmF0ZU1pcG1hcENQVShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAKICAgICBtdGw6
OkZvcm1hdCBtRm9ybWF0OworICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqbUJvdW5kU3VyZmFjZSA9
IG5pbDsKICAgICAvLyBUaGUgcmVhbCB0ZXh0dXJlIHVzZWQgYnkgTWV0YWwgZHJhdyBjYWxscy4K
LSAgICBtdGw6OlRleHR1cmVSZWYgbU5hdGl2ZVRleHR1cmU7CisgICAgbXRsOjpUZXh0dXJlUmVm
IG1OYXRpdmVUZXh0dXJlICAgICAgICAgPSBuaWw7CiAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBt
TWV0YWxTYW1wbGVyU3RhdGUgPSBuaWw7CiAKICAgICAvLyBOdW1iZXIgb2Ygc2xpY2VzCkBAIC0z
MjMsMTggKzMyNywxNCBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiAg
ICAgLy8gT25jZSB0aGUgaW1hZ2VzIGFycmF5IGlzIGNvbXBsZXRlLCB0aGV5IHdpbGwgYmUgdHJh
bnNmZXJyZWQgdG8gcmVhbCB0ZXh0dXJlIG9iamVjdC4KICAgICAvLyBOT1RFOgogICAgIC8vICAt
IFRoZSBzZWNvbmQgZGltZW5zaW9uIGlzIGluZGV4ZWQgYnkgY29uZmlndXJlZCBiYXNlIGxldmVs
ICsgYWN0dWFsIG5hdGl2ZSBsZXZlbAotICAgIC8vICAtIEZvciBDdWJlIG1hcCwgdGhlcmUgd2ls
bCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbVRleEltYWdlRGVmcyB0YWJsZSwgb25lIGZv
ciBlYWNoCi0gICAgLy8gIGZhY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgQ3ViZSBtYXAncyBpbWFn
ZSBpcyBkZWZpbmVkIHBlciBmYWNlICYgcGVyIGxldmVsLgorICAgIC8vICAtIEZvciBDdWJlIG1h
cCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbWFwIHRhYmxlLCBvbmUg
Zm9yIGVhY2ggZmFjZS4gVGhpcyBpcworICAgIC8vICBiZWNhdXNlIHRoZSBDdWJlIG1hcCdzIGlt
YWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2ZWwuCiAgICAgLy8gIC0gRm9yIG90aGVy
IHRleHR1cmUgdHlwZXMsIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgZW50cnkgaW4gdGhlIG1hcCB0
YWJsZS4gQWxsIG90aGVyIHRleHR1cmVzCiAgICAgLy8gIGV4Y2VwdCBDdWJlIG1hcCBoYXMgdGV4
dHVyZSBpbWFnZSBkZWZpbmVkIHBlciBsZXZlbCAoYWxsIHNsaWNlcyBpbmNsdWRlZCkuCisgICAg
Ly8gIC0gVGhlc2UgdGhyZWUgdmFyaWFibGVzJyBzZWNvbmQgZGltZW5zaW9uIGFyZSBpbmRleGVk
IGJ5IGltYWdlIGluZGV4IChiYXNlIGxldmVsIGluY2x1ZGVkKS4KICAgICBzdGQ6Om1hcDxpbnQs
IGdsOjpUZXhMZXZlbEFycmF5PEltYWdlRGVmaW5pdGlvbk10bD4+IG1UZXhJbWFnZURlZnM7Ci0K
LSAgICAvLyBSZW5kZXIgVGFyZ2V0IHBlciBzbGljZS9kZXB0aC9jdWJlIGZhY2UuCi0gICAgLy8g
LSBGb3IgMkQgdGV4dHVyZTogVGhlcmUgd2lsbCBiZSBvbmUga2V5IGVudHJ5IGluIHRoZSBtYXAu
Ci0gICAgLy8gLSBGb3IgQ3ViZSBtYXA6IFRoZXJlIHdpbGwgYmUgYXQgbW9zdCA2IGtleSBlbnRy
aWVzLgotICAgIC8vIC0gRm9yIGFycmF5LzNEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgYXQgbW9z
dCBzbGljZXMvZGVwdGhzIG51bWJlciBvZiBrZXkgZW50cmllcy4KLSAgICAvLyAtIFRoZSBzZWNv
bmQgZGltZW5zaW9uIGlzIGluZGV4ZWQgYnkgY29uZmlndXJlZCBiYXNlIGxldmVsICsgYWN0dWFs
IG5hdGl2ZSBsZXZlbAogICAgIHN0ZDo6bWFwPGludCwgZ2w6OlRleExldmVsQXJyYXk8UmVuZGVy
VGFyZ2V0TXRsPj4gbVBlckxheWVyUmVuZGVyVGFyZ2V0czsKKyAgICBzdGQ6Om1hcDxpbnQsIGds
OjpUZXhMZXZlbEFycmF5PG10bDo6VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1TVGV4dHVyZXM7CiAK
ICAgICAvLyBNaXBtYXAgdmlld3MgYXJlIGluZGV4ZWQgYnkgbmF0aXZlIGxldmVsIChpZ25vcmVk
IGJhc2UgbGV2ZWwpOgogICAgIG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBtTmF0aXZlTGV2ZWxW
aWV3czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KaW5kZXggNjIzYzEwNGM5ZThm
NzBiOTM4MjRmYzQ5ZjQ1ZjliMjdmNjhkMjE2MC4uM2IxYzhhZjcxZWIzNThlN2ZhZjhhMGNkNGM0
YTBmNGE4ZjYyMGU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KQEAgLTIw
LDggKzIwLDggQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRs
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgiCisjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NhbXBsZXJNdGwuaCIKLSNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9mb3JtYXRfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfdXRpbHMuaCIKQEAgLTUzNCw2ICs1MzQsMTAgQEAgdm9pZCBUZXh0dXJlTXRsOjpyZWxl
YXNlVGV4dHVyZShib29sIHJlbGVhc2VJbWFnZXMsIGJvb2wgcmVsZWFzZVRleHR1cmVPYmplY3Rz
T24KIAogYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjplbnN1cmVUZXh0dXJlQ3JlYXRlZChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICB9CiAgICAgaWYg
KG1OYXRpdmVUZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwpAQCAtMTIwNywyNSArMTIxMSwxNSBAQCBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6
OnNldEJhc2VMZXZlbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1aW50IGJhc2VMZQog
CiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQogewotICAgIHJlbGVhc2VUZXh0dXJl
KHRydWUpOwotCi0gICAgYXV0byBwQnVmZmVyICAgICA9IEdldEltcGxBczxPZmZzY3JlZW5TdXJm
YWNlTXRsPihzdXJmYWNlKTsKLSAgICBtTmF0aXZlVGV4dHVyZSAgID0gcEJ1ZmZlci0+Z2V0Q29s
b3JUZXh0dXJlKCk7Ci0gICAgbUZvcm1hdCAgICAgICAgICA9IHBCdWZmZXItPmdldENvbG9yRm9y
bWF0KCk7Ci0gICAgZ2w6OkV4dGVudHMgc2l6ZSA9IG1OYXRpdmVUZXh0dXJlLT5zaXplQXQwKCk7
Ci0gICAgbUlzUG93MiAgICAgICAgICA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6Omlz
UG93MihzaXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKLSAgICBBTkdMRV9U
UlkoZW5zdXJlU2FtcGxlclN0YXRlQ3JlYXRlZChjb250ZXh0KSk7Ci0KLSAgICAvLyBUZWxsIGNv
bnRleHQgdG8gcmViaW5kIHRleHR1cmVzCi0gICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10
bDo6R2V0SW1wbChjb250ZXh0KTsKLSAgICBjb250ZXh0TXRsLT5pbnZhbGlkYXRlQ3VycmVudFRl
eHR1cmVzKCk7Ci0KKyAgICBJT1N1cmZhY2VTdXJmYWNlTXRsICpzdXJmYWNlTXRsID0gKElPU3Vy
ZmFjZVN1cmZhY2VNdGwgKiltdGw6OkdldEltcGwoc3VyZmFjZSk7CisgICAgbUJvdW5kU3VyZmFj
ZSAgICAgICAgICAgICAgICAgICA9IHN1cmZhY2VNdGw7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6OnJlbGVhc2VUZXhJ
bWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICByZWxlYXNlVGV4dHVyZSh0
cnVlKTsKKyAgICBtQm91bmRTdXJmYWNlID0gbmlsOworCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwogfQogCkBAIC0xMjM1LDYgKzEyMjksMTIgQEAgYW5nbGU6OlJlc3VsdCBU
ZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91
dCkKIHsKKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWSgK
KyAgICAgICAgICAgIG1Cb3VuZFN1cmZhY2UtPmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29u
dGV4dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpKTsKKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0KICAgICBBTkdMRV9UUlkoZW5zdXJl
VGV4dHVyZUNyZWF0ZWQoY29udGV4dCkpOwogCiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5z
Zm9ybUZlZWRiYWNrTXRsLmgKaW5kZXggYWE0NWJmOTRlMDI0OWIxMTZhOGIxNGZlZGRmY2VhM2Q2
ZjI1ZTdjYi4uMjBhMmMyMGY5ZGI4YmVmYWQ4MzFlYWUwMGI5YTQ2MTExODcwY2UwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKQEAgLTEwLDEy
ICsxMCwyMCBAQAogI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9UUkFOU0ZPUk1GRUVE
QkFDS01UTF9IXwogI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9UUkFOU0ZPUk1GRUVE
QkFDS01UTF9IXwogCisjaW5jbHVkZSA8TWV0YWwvTWV0YWwuaD4KICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9UcmFuc2Zvcm1GZWVkYmFja0ltcGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVzb3VyY2VzLmgiCiAKLW5hbWVzcGFjZSByeAordHlwZWRlZiB1aW50NjRfdCBN
dGxEZXZpY2VTaXplOworCituYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFByb2dyYW1TdGF0ZTsKK30g
IC8vIG5hbWVzcGFjZSBnbAogCi1jbGFzcyBDb250ZXh0TXRsOworbmFtZXNwYWNlIHJ4Cit7CiAK
IGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsIDogcHVibGljIFRyYW5zZm9ybUZlZWRiYWNrSW1w
bAogewpAQCAtMzIsMTcgKzQwLDIzIEBAIGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsIDogcHVi
bGljIFRyYW5zZm9ybUZlZWRiYWNrSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nKSBvdmVy
cmlkZTsKIAotICAgIC8vIFBhcmFtczoKLSAgICAvLyAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXggaXMg
Zmlyc3QgdmVydGV4IHVzZWQgYnkgZ2xEcmF3QXJyYXlzKi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVj
YXVzZQotICAgIC8vIGdsX1ZlcnRleEluZGV4IGlzIHN0YXJ0aW5nIGZyb20gdGhpcy4KLSAgICAv
LyAtIHNraXBwZWRWZXJ0aWNlcyBpcyBudW1iZXIgb2Ygc2tpcHBlZCB2ZXJ0aWNlcyAodXNlZnVs
IGZvciBtdWx0aXBsZSBtZXRhbCBkcmF3cyBwZXIgR0wgZHJhdwotICAgIC8vIGNhbGwpLgotICAg
IGFuZ2xlOjpSZXN1bHQgZ2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0VmVy
dGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBza2lwcGVk
VmVydGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKm9m
ZnNldHNPdXQpOworICAgIHZvaWQgZ2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250ZXh0
TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0c1NpemUpIGNvbnN0OworCisgICAgY29u
c3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmZ2V0QnVm
ZmVySGFuZGxlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbUJ1ZmZlckhhbmRsZXM7
CisgICAgfQogCiAgIHByaXZhdGU6CisgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0Fy
cmF5PEJ1ZmZlck10bCAqPiBtQnVmZmVySGFuZGxlczsKKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlck9mZnNldHM7CisgICAgZ2w6OlRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10bERldmljZVNpemU+IG1CdWZmZXJTaXplczsK
KworICAgIC8vIEFsaWduZWQgb2Zmc2V0IGZvciBlbXVsYXRpb24uIENvdWxkIGJlIHNtYWxsZXIg
dGhhbiBvZmZzZXQuCisgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10bERl
dmljZVNpemU+IG1BbGlnbmVkQnVmZmVyT2Zmc2V0czsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBy
eApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCmlu
ZGV4IGQ5NDBjM2Q1NmExNGJkYTM2NDEwY2RhNmJhZjk2OGMxZGQ3NTBiNjUuLmRlN2E5MDkzNTdi
NjkyNGY5ZDBlYjViYzAyZDIyN2UyZjYzNDIwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010
bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KQEAgLTgsMTggKzgsMjcgQEAKIC8vCiAKICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oIgor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUHJvZ3JhbU10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1F1ZXJ5TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1v
bi5oIgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvQ29u
dGV4dC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgotI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAogbmFtZXNw
YWNlIHJ4CiB7CiAKIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpUcmFuc2Zvcm1GZWVkYmFja010bChj
b25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tTdGF0ZSAmc3RhdGUpCi0gICAgOiBUcmFuc2Zvcm1G
ZWVkYmFja0ltcGwoc3RhdGUpCisgICAgOiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwoc3RhdGUpLAor
ICAgICAgbUJ1ZmZlckhhbmRsZXN7fSwKKyAgICAgIG1CdWZmZXJPZmZzZXRze30sCisgICAgICBt
QnVmZmVyU2l6ZXN7fSwKKyAgICAgIG1BbGlnbmVkQnVmZmVyT2Zmc2V0c3t9CiB7fQogCiBUcmFu
c2Zvcm1GZWVkYmFja010bDo6flRyYW5zZm9ybUZlZWRiYWNrTXRsKCkge30KQEAgLTI3LDQwICsz
Niw3OSBAQCBUcmFuc2Zvcm1GZWVkYmFja010bDo6flRyYW5zZm9ybUZlZWRiYWNrTXRsKCkge30K
IGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSkKIHsKLSAgICBtdGw6OkdldEltcGwoY29u
dGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7CisgICAgQ29u
dGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAvLyBOb3Qg
Y3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIG1zbCBjb21waWxlcgorICAgIGlmICghY29udGV4dE10
bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5l
bmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAg
fQogCi0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIGNvbnN0IGdsOjpQ
cm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0
UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisgICAgc2l6ZV90
IHhmYkJ1ZmZlckNvdW50ID0gZXhlY3V0YWJsZS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJD
b3VudCgpOworCisgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8
IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6
Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nID0gbVN0YXRlLmdldElu
ZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworICAgICAgICBBU1NFUlQoYmluZGluZy5nZXQoKSk7
CisKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwoYmluZGluZy5n
ZXQoKSk7CisKKyAgICAgICAgYXNzZXJ0KGJ1ZmZlck10bCk7CisgICAgICAgIG1CdWZmZXJPZmZz
ZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRpbmcuZ2V0T2Zmc2V0KCk7CisgICAgICAgIG1CdWZmZXJT
aXplc1tidWZmZXJJbmRleF0gICA9IGdsOjpHZXRCb3VuZEJ1ZmZlckF2YWlsYWJsZVNpemUoYmlu
ZGluZyk7CisgICAgICAgIG1CdWZmZXJIYW5kbGVzW2J1ZmZlckluZGV4XSA9IGJ1ZmZlck10bDsK
KworICAgICAgICBBU1NFUlQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygp
LmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKTsKKyAgICAgICAgY29uc3QgTXRsRGV2
aWNlU2l6ZSBvZmZzZXRBbGlnbm1lbnQgPSBtdGw6OmtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNl
dE1pbkFsaWdubWVudDsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwb3NzaWJs
ZSB1bmRlci9vdmVyZmxvdyB3aXRoIGJpbmRpbmcgc2l6ZS4KKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoTXRsRGV2aWNlU2l6ZSkgPj0gc2l6ZW9mKGJpbmRpbmcuZ2V0U2l6ZSgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAiTXRsRGV2aWNlU2l6ZSB0b28gc21hbGwiKTsKKworICAgICAg
ICAvLyBTZXQgdGhlIG9mZnNldCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgcmVxdWVzdGVk
IG9mZnNldCB3aGlsZSByZW1haW5pbmcgYWxpZ25lZC4KKyAgICAgICAgbUFsaWduZWRCdWZmZXJP
ZmZzZXRzW2J1ZmZlckluZGV4XSA9CisgICAgICAgICAgICAobUJ1ZmZlck9mZnNldHNbYnVmZmVy
SW5kZXhdIC8gb2Zmc2V0QWxpZ25tZW50KSAqIG9mZnNldEFsaWdubWVudDsKKyAgICB9CisKKyAg
ICByZXR1cm4gY29udGV4dE10bC0+b25CZWdpblRyYW5zZm9ybUZlZWRiYWNrKHhmYkJ1ZmZlckNv
dW50LCBtQnVmZmVySGFuZGxlcyk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJh
Y2tNdGw6OmVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKKyAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8vIE5vdCBjdXJyZW50
bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisgICAgaWYgKCFjb250ZXh0TXRsLT5nZXRE
aXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQp
CisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyAgICB9CisKKyAg
ICAvLyBJZiB0aGVyZSdzIGFuIGFjdGl2ZSB0cmFuc2Zvcm0gZmVlZGJhY2sgcXVlcnksIGFjY3Vt
dWxhdGUgdGhlIHByaW1pdGl2ZXMgZHJhd24uCiAgICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRl
ID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKICAgICBnbDo6UXVlcnkgKnRyYW5zZm9ybUZlZWRiYWNr
UXVlcnkgPQogICAgICAgICBnbFN0YXRlLmdldEFjdGl2ZVF1ZXJ5KGdsOjpRdWVyeVR5cGU6OlRy
YW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4pOworCiAgICAgaWYgKHRyYW5zZm9ybUZl
ZWRiYWNrUXVlcnkpCiAgICAgewotICAgICAgICBtdGw6OkdldEltcGwodHJhbnNmb3JtRmVlZGJh
Y2tRdWVyeSktPm9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29udGV4dCk7CisgICAgICAgIG10bDo6
R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZCht
U3RhdGUuZ2V0UHJpbWl0aXZlc0RyYXduKCkpOwogICAgIH0KLQotICAgIG10bDo6R2V0SW1wbChj
b250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOwotCisg
ICAgY29udGV4dE10bC0+b25FbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFj
a010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgLy8gV2hlbiBY
RkIgaXMgcGF1c2VkLCBPcGVuR0wgYWxsb3dzIFhGQiBidWZmZXJzIHRvIGJlIGJvdW5kIGZvciBv
dGhlciBwdXJwb3Nlcy4gV2UgbmVlZCB0byBjYWxsCi0gICAgLy8gb25UcmFuc2Zvcm1GZWVkYmFj
a0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgotICAgIG10bDo6R2V0SW1wbChjb250ZXh0KS0+
b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOwotCi0gICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBt
dGw6OkdldEltcGwoY29udGV4dCk7CisgICAgcmV0dXJuIGNvbnRleHRNdGwtPm9uUGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRs
OjpyZXN1bWUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgbXRsOjpHZXRJbXBs
KGNvbnRleHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKGNvbnRleHQsIHRoaXMpOwotCi0g
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBjb25z
dCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBjb250ZXh0TXRsLT5nZXRTdGF0
ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworICAg
IHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyQ291bnQoKTsKKyAgICByZXR1cm4gY29udGV4dE10bC0+b25CZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKHhmYkJ1ZmZlckNvdW50LCBtQnVmZmVySGFuZGxlcyk7CiB9CiAKIGFuZ2xlOjpSZXN1
bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVkQnVmZmVyKApAQCAtNjgsMTcgKzEx
NiwyMCBAQCBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpiaW5kSW5kZXhlZEJ1
ZmZlcigKICAgICBzaXplX3QgaW5kZXgsCiAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2lu
dGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdwor
ICAgIFVOSU1QTEVNRU5URUQoKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBza2lwcGVkVmVydGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgKm9mZnNldHNPdXQpCit2b2lkIFRyYW5zZm9ybUZlZWRi
YWNrTXRsOjpnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgKm9mZnNldHNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3QKIHsKLSAgICBpbnQ2NF90IHZlcnRpY2VzRHJh
d24gPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihtU3RhdGUuZ2V0VmVydGljZXNEcmF3bigpKSArIHNr
aXBwZWRWZXJ0aWNlczsKKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVh
dHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR0xzaXplaXB0ciB2ZXJ0aWNlc0RyYXduID0gbVN0YXRlLmdldFZlcnRpY2VzRHJh
d24oKTsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxHTHNpemVpPiAmYnVmZmVyU3RyaWRlcyA9CiAg
ICAgICAgIG1TdGF0ZS5nZXRCb3VuZFByb2dyYW0oKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tTdHJp
ZGVzKCk7CiAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29u
dGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOwpAQCAtODcsMjcgKzEz
OCwyNSBAQCBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpnZXRCdWZmZXJPZmZz
ZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAKICAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQg
PiAwKTsKIAorICAgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0cyBh
cnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgVGhlIG1heGltdW0gcG9zc2libGUKKyAgICAvLyBudW1i
ZXIgb2Ygb3V0cHV0cyBpcyBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTLgorICAgIEFTU0VSVChvZmZzZXRzU2l6ZSA+PSB4ZmJCdWZmZXJDb3VudCk7CisK
ICAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgeGZiQnVmZmVy
Q291bnQ7ICsrYnVmZmVySW5kZXgpCiAgICAgewotICAgICAgICBjb25zdCBnbDo6T2Zmc2V0Qmlu
ZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJ1ZmZlckJpbmRpbmcgPQotICAgICAgICAgICAgbVN0
YXRlLmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOwotCi0gICAgICAgIEFTU0VSVCgoYnVm
ZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwotCi0gICAgICAgIC8vIE9mZnNldCB0
aGUgZ2xfVmVydGV4SW5kZXggYnkgZHJhd0NhbGxGaXJzdFZlcnRleAorICAgICAgICBpbnQ2NF90
IG9mZnNldEZyb21EZXNjcmlwdG9yID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+
KG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAtIG1BbGlnbmVkQnVmZmVyT2Zmc2V0c1tidWZm
ZXJJbmRleF0pOwogICAgICAgICBpbnQ2NF90IGRyYXdDYWxsVmVydGV4T2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4odmVydGljZXNEcmF3bikgLSBkcmF3Q2FsbEZpcnN0VmVydGV4OwogCiAg
ICAgICAgIGludDY0X3Qgd3JpdGVPZmZzZXQgPQotICAgICAgICAgICAgKGJ1ZmZlckJpbmRpbmcu
Z2V0T2Zmc2V0KCkgKyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNbYnVmZmVy
SW5kZXhdKSAvCisgICAgICAgICAgICAob2Zmc2V0RnJvbURlc2NyaXB0b3IgKyBkcmF3Q2FsbFZl
cnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNbYnVmZmVySW5kZXhdKSAvCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzaXplb2YodWludDMyX3QpKTsKIAogICAgICAgICBvZmZzZXRz
T3V0W2J1ZmZlckluZGV4XSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHdyaXRlT2Zmc2V0KTsKIAot
ICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCi0gICAgICAgIEFOR0xFX0NIRUNLX0dMX0FM
TE9DKGNvbnRleHRNdGwsIG9mZnNldHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRlT2Zmc2V0KTsK
KyAgICAgICAgLy8gQXNzZXJ0IG9uIG92ZXJmbG93LiAgRm9yIG5vdywgc3VwcG9ydCB0cmFuc2Zv
cm0gZmVlZGJhY2sgdXAgdG8gMkdCLgorICAgICAgICBBU1NFUlQob2Zmc2V0c091dFtidWZmZXJJ
bmRleF0gPT0gd3JpdGVPZmZzZXQpOwogICAgIH0KLQotICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlN
dGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9WZXJ0ZXhBcnJheU10bC5oCmluZGV4IGMyZmI4NDZkNDFkOTQxMmEwMGY4N2EzNzA4M2M1NWFk
YmFjNDFkZWUuLmZlNmI1ZjdhOWU5MDZmMTk4NzkzZWFhY2Q0NzQ3Mjc4MWUyNGNiNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9WZXJ0ZXhBcnJheU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCkBAIC00Myw4ICs0Myw5IEBAIGNs
YXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzKTsKIAogICAgIC8v
IHZlcnRleERlc2NDaGFuZ2VkIGlzIGJvdGggaW5wdXQgYW5kIG91dHB1dCwgdGhlIGlucHV0IHZh
bHVlIGlmIGlzIHRydWUsIHdpbGwgZm9yY2UgbmV3Ci0gICAgLy8gbXRsOjpWZXJ0ZXhEZXNjIHRv
IGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBPdGhlcndpc2UsIGl0IGlzIG9ubHkgcmV0
dXJuZWQgd2hlbiB0aGUKLSAgICAvLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkKKyAgICAvLyBtdGw6
OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIFRoaXMgdHlwaWNh
bGx5IGhhcHBlbnMgd2hlbiBhY3RpdmUgc2hhZGVyCisgICAgLy8gcHJvZ3JhbSBpcyBjaGFuZ2Vk
LgorICAgIC8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZSB2ZXJ0ZXgg
YXJyYXkgaXMgZGlydHkuCiAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXcoY29uc3QgZ2w6OkNv
bnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRl
ckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgKnZlcnRleERlc2NDaGFuZ2VkLApAQCAtNTIsMTEgKzUzLDI0IEBAIGNsYXNzIFZlcnRl
eEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAogCiAgICAgYW5nbGU6OlJlc3VsdCBn
ZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZl
TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc291cmNlUG9p
bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpp
ZHhCdWZmZXJPdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlk
eEJ1ZmZlck9mZnNldE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpE
cmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJDb3VudE91dCk7CisKKyAg
ICAvLyBVc2UgdG8gZW11bGF0ZSBpbnN0YW5jZWQgZHJhdyBmb3IgaW5zdGFuY2UgPGluc3RhbmNl
SWQ+LgorICAgIC8vIFRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgZm9yIGVtdWxhdGVkIGluc3Rh
bmNlIGRyYXcgaXM6CisgICAgLy8gLSBzZXR1cERyYXcoKQorICAgIC8vIC0gZHJhdy4KKyAgICAv
LyAtIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKDEpCisgICAgLy8gLSBkcmF3LgorICAgIC8vIC0g
ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAobikKKyAgICAvLyAtIGRyYXcuCisgICAgLy8gLSBlbXVs
YXRlSW5zdGFuY2VEcmF3U3RlcCgwKQorICAgIHZvaWQgZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAo
bXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwgdWludDMyX3QgaW5zdGFuY2VJ
ZCk7CiAKICAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwgKmNvbnRleHQpOwpA
QCAtNzIsMTUgKzg2LDE5IEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFy
cmF5SW1wbAogCiAgICAgYW5nbGU6OlJlc3VsdCBjb252ZXJ0SW5kZXhCdWZmZXIoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zm
c2V0T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
ZXhCdWZmZXJDb3VudE91dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBzdHJlYW1JbmRleEJ1ZmZlckZy
b21DbGllbnQoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlBy
aW1pdGl2ZU1vZGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVm
ICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyQ291bnRPdXQpOwogCiAgICAgYW5nbGU6OlJlc3VsdCBjb252ZXJ0SW5kZXhCdWZmZXJHUFUo
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCkBAIC0xMTcsNyAr
MTM1LDIwIEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAog
ICAgIGdsOjpBdHRyaWJBcnJheTxCdWZmZXJIb2xkZXJNdGwgKj4gbUN1cnJlbnRBcnJheUJ1ZmZl
cnM7CiAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBsZVdlYWtCdWZmZXJIb2xkZXJNdGw+IG1Db252
ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CiAgICAgZ2w6OkF0dHJpYkFycmF5PHNpemVfdD4gbUN1
cnJlbnRBcnJheUJ1ZmZlck9mZnNldHM7CisKKyAgICAvLyBTaXplIHRvIGJlIHVwbG9hZGVkIGFz
IGlubGluZSBjb25zdGFudCBkYXRhLiBVc2VkIGZvciBjbGllbnQgdmVydGV4IGF0dHJpYnV0ZSdz
IGRhdGEgdGhhdAorICAgIC8vIGlzIHNtYWxsIGVub3VnaCB0aGF0IHdlIGNhbiBzZW5kIGRpcmVj
dGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRhIGluc3RlYWQgb2Ygc3RyZWFtaW5nCisgICAgLy8g
dGhyb3VnaCBhIGJ1ZmZlci4KKyAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90PiBtQ3VycmVudEFy
cmF5SW5saW5lRGF0YVNpemVzOworICAgIC8vIEFycmF5IG9mIGhvc3QgYnVmZmVycyBzdG9yaW5n
IGNvbnZlcnRlZCBkYXRhIGZvciBjbGllbnQgYXR0cmlidXRlcyB0aGF0IGFyZSBzbWFsbCBlbm91
Z2guCisgICAgZ2w6OkF0dHJpYkFycmF5PGFuZ2xlOjpNZW1vcnlCdWZmZXI+IG1Db252ZXJ0ZWRD
bGllbnRTbWFsbEFycmF5czsKKyAgICBnbDo6QXR0cmliQXJyYXk8Y29uc3QgdWludDhfdCAqPiBt
Q3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzOworICAgIC8vIE1heCBzaXplIG9mIGlubGlu
ZSBjb25zdGFudCBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNsaWVudCB2ZXJ0ZXggYXR0cmli
dXRlLgorICAgIHNpemVfdCBtSW5saW5lRGF0YU1heFNpemU7CisKKyAgICAvLyBTdHJpZGUgcGVy
IHZlcnRleCBhdHRyaWJ1dGUKICAgICBnbDo6QXR0cmliQXJyYXk8R0x1aW50PiBtQ3VycmVudEFy
cmF5QnVmZmVyU3RyaWRlczsKKyAgICAvLyBGb3JtYXQgcGVyIHZlcnRleCBhdHRyaWJ1dGUKICAg
ICBnbDo6QXR0cmliQXJyYXk8Y29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgKj4gbUN1cnJlbnRBcnJh
eUJ1ZmZlckZvcm1hdHM7CiAKICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmbURlZmF1bHRG
bG9hdFZlcnRleEZvcm1hdDsKQEAgLTEyNyw2ICsxNTgsOCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10
bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKICAgICBtdGw6OkJ1ZmZlclBvb2wgbUR5bmFtaWNW
ZXJ0ZXhEYXRhOwogICAgIG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY0luZGV4RGF0YTsKIAorICAg
IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnM7CisKICAgICBi
b29sIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsKIH07CiB9ICAvLyBuYW1lc3BhY2UgcngKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9WZXJ0ZXhBcnJheU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQppbmRleCBjZDk2MWMxODE5ZDhh
Yjc3MzFjYmJkYTJmMDU1ZWU5NGFmYjJhN2I3Li4wMjE5NWQ4MjY5ODJhNTkxZTQ4NzljNGQ3NDky
NjZhZDMzNjdmN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLm1t
CkBAIC04LDYgKzgsOSBAQAogLy8KIAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1ZlcnRleEFycmF5TXRsLmgiCisKKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KKwog
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgogI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCkBAIC03NiwxNSArNzksMTUgQEAgYW5nbGU6
OlJlc3VsdCBTdHJlYW1JbmRleERhdGEoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNvdXJjZVBvaW50ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnVmZmVyT2Zmc2V0T3V0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpidWZmZXJPZmZzZXRPdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4Q291bnRPdXQpCiB7CiAgICAg
ZHluYW1pY0J1ZmZlci0+cmVsZWFzZUluRmxpZ2h0QnVmZmVycyhjb250ZXh0TXRsKTsKLQogICAg
IGNvbnN0IHNpemVfdCBhbW91bnQgPSBHZXRJbmRleENvbnZlcnRlZEJ1ZmZlclNpemUoaW5kZXhU
eXBlLCBpbmRleENvdW50KTsKICAgICBHTHVieXRlICpkc3QgICAgICAgID0gbnVsbHB0cjsKLQog
ICAgIEFOR0xFX1RSWSgKICAgICAgICAgZHluYW1pY0J1ZmZlci0+YWxsb2NhdGUoY29udGV4dE10
bCwgYW1vdW50LCAmZHN0LCBidWZmZXJPdXQsIGJ1ZmZlck9mZnNldE91dCwgbnVsbHB0cikpOwog
CkBAIC0xMjEsNiArMTI0LDcgQEAgYW5nbGU6OlJlc3VsdCBTdHJlYW1JbmRleERhdGEoQ29udGV4
dE10bCAqY29udGV4dE10bCwKICAgICB7CiAgICAgICAgIG1lbWNweShkc3QsIHNvdXJjZVBvaW50
ZXIsIGFtb3VudCk7CiAgICAgfQorICAgICppbmRleENvdW50T3V0ID0gaW5kZXhDb3VudDsKICAg
ICBBTkdMRV9UUlkoZHluYW1pY0J1ZmZlci0+Y29tbWl0KGNvbnRleHRNdGwpKTsKIAogICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTIwOCw2ICsyMTIsMzAgQEAgdm9pZCBW
ZXJ0ZXhBcnJheU10bDo6cmVzZXQoQ29udGV4dE10bCAqY29udGV4dCkKICAgICAgICAgZm9ybWF0
ID0gJm1EZWZhdWx0RmxvYXRWZXJ0ZXhGb3JtYXQ7CiAgICAgfQogCisgICAgZm9yIChzaXplX3Qg
JmlubGluZURhdGFTaXplIDogbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplcykKKyAgICB7Cisg
ICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKyAgICB9CisKKyAgICBmb3IgKGFuZ2xlOjpNZW1v
cnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5IDogbUNvbnZlcnRlZENsaWVudFNtYWxsQXJy
YXlzKQorICAgIHsKKyAgICAgICAgY29udmVydGVkQ2xpZW50QXJyYXkuY2xlYXIoKTsKKyAgICB9
CisKKyAgICBmb3IgKGNvbnN0IHVpbnQ4X3QgKiZjbGllbnRQb2ludGVyIDogbUN1cnJlbnRBcnJh
eUlubGluZURhdGFQb2ludGVycykKKyAgICB7CisgICAgICAgIGNsaWVudFBvaW50ZXIgPSBudWxs
cHRyOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVz
KCkuYWxsb3dJbmxpbmVDb25zdFZlcnRleERhdGEuZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1J
bmxpbmVEYXRhTWF4U2l6ZSA9IG10bDo6a0lubGluZUNvbnN0RGF0YU1heFNpemU7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9IDA7CisgICAgfQor
CiAgICAgbVZlcnRleEFycmF5RGlydHkgPSB0cnVlOwogfQogCkBAIC0zMTUsMjIgKzM0MywyOCBA
QCBBTkdMRV9JTkxJTkUgdm9pZCBWZXJ0ZXhBcnJheU10bDo6Z2V0VmVydGV4QXR0cmliRm9ybWF0
QW5kQXJyYXlTaXplKGNvbnN0IHNoOjpTaAogfQogCiAvLyB2ZXJ0ZXhEZXNjQ2hhbmdlZCBpcyBi
b3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1dCB2YWx1ZSBpZiBpcyB0cnVlLCB3aWxsIGZv
cmNlIG5ldwotLy8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNj
T3V0LiBPdGhlcndpc2UsIGl0IGlzIG9ubHkgcmV0dXJuZWQgd2hlbiB0aGUKLS8vIHZlcnRleCBh
cnJheSBpcyBkaXJ0eQorLy8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0
ZXhEZXNjT3V0LiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZlIHNoYWRlcgorLy8g
cHJvZ3JhbSBpcyBjaGFuZ2VkLgorLy8gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdo
ZW4gdGhlIHZlcnRleCBhcnJheSBpcyBkaXJ0eS4KIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlN
dGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNt
ZEVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAq
dmVydGV4RGVzY0NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpWZXJ0ZXhEZXNjICp2ZXJ0ZXhEZXNjT3V0KQogeworICAgIC8vIE5PVEUoaHFsZSk6
IGNvbnNpZGVyIG9ubHkgdXBkYXRpbmcgZGlydHkgYXR0cmlidXRlcwogICAgIGJvb2wgZGlydHkg
PSBtVmVydGV4QXJyYXlEaXJ0eSB8fCAqdmVydGV4RGVzY0NoYW5nZWQ7CiAKICAgICBpZiAoZGly
dHkpCiAgICAgeworICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGdsQ29udGV4dCk7CisKICAgICAgICAgbVZlcnRleEFycmF5RGlydHkgPSBmYWxzZTsKKyAgICAg
ICAgbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzLmNsZWFyKCk7CiAKLSAgICAgICAgY29uc3QgZ2w6
OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFBy
b2dyYW0oKS0+Z2V0U3RhdGUoKTsKKyAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxl
ICpleGVjdXRhYmxlID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxl
KCk7CiAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJvZ3JhbUFjdGl2ZUF0dHJp
YnNNYXNrID0KLSAgICAgICAgICAgIGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkt
PmdldEV4ZWN1dGFibGUoKS5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbnNNYXNrKCk7CisgICAgICAg
ICAgICBleGVjdXRhYmxlLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbnNNYXNrKCk7CisgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3Rh
dGUoKS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CiAKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8Z2w6OlZlcnRleEF0dHJpYnV0ZT4gJmF0dHJpYnMgPSBtU3RhdGUuZ2V0VmVydGV4QXR0cmli
dXRlcygpOwogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QmluZGluZz4gJmJp
bmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOwpAQCAtMzYwLDggKzM5NCw3IEBA
IGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJpbmRpbmcgJmJpbmRp
bmcgPSBiaW5kaW5nc1thdHRyaWIuYmluZGluZ0luZGV4XTsKIAogICAgICAgICAgICAgYm9vbCBh
dHRyaWJFbmFibGVkID0gYXR0cmliLmVuYWJsZWQ7Ci0gICAgICAgICAgICBpZiAoYXR0cmliRW5h
YmxlZCAmJgotICAgICAgICAgICAgICAgICghbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0gfHwgIW1D
dXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVmZmVyKCkpKQorICAgICAgICAgICAg
aWYgKGF0dHJpYkVuYWJsZWQgJiYgIW1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdICYmICFtQ3VycmVu
dEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW3ZdKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIC8vIERpc2FibGUgaXQgdG8gYXZvaWQgY3Jhc2guCiAgICAgICAgICAgICAgICAgYXR0cmli
RW5hYmxlZCA9IGZhbHNlOwpAQCAtMzY5LDMzICs0MDIsMzAgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0
ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAKICAg
ICAgICAgICAgIGlmICghYXR0cmliRW5hYmxlZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBVc2UgZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICBkZXNjLmF0dHJp
YnV0ZXNbdl0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleDsK
KyAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdl0ub2Zmc2V0ICAgICAgPSB2ICogbXRs
OjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7CiAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBmaW5k
IHRoZSBhdHRyaWJ1dGUgaGF2aW5nIHRoZSBleGFjdCBiaW5kaW5nIGxvY2F0aW9uID0gdiBpbiB0
aGUgcHJvZ3JhbQogICAgICAgICAgICAgICAgIC8vIGlucHV0cyBsaXN0IHRvIHJldHJpZXZlIGl0
cyBjb3Jlc3BvbmRpbmcgZGF0YSB0eXBlOgogICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gJnByb2dyYW1JbnB1dHMgPQogICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtU3RhdGUuZ2V0UHJvZ3JhbUlucHV0cygpOwogICAgICAgICAgICAgICAgIHN0
ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT46OmNvbnN0X2l0ZXJhdG9yIGF0dHJpYkluZm9J
dGUgPSBzdGQ6OmZpbmRfaWYoCiAgICAgICAgICAgICAgICAgICAgIGJlZ2luKHByb2dyYW1JbnB1
dHMpLCBlbmQocHJvZ3JhbUlucHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUgJnN2
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHN2LmxvY2F0aW9uKSA9PSB2OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikgPD0gdiAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYgPCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9jYXRpb24pICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWYXJpYWJsZUF0dHJpYnV0
ZUNvdW50KHN2LnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAg
ICAgIGlmIChhdHRyaWJJbmZvSXRlID09IGVuZChwcm9ncmFtSW5wdXRzKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1vc3QgbGlrZWx5IHRoaXMgaXMgYXJyYXkg
ZWxlbWVudCB3aXRoIGluZGV4ID4gMC4KLSAgICAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBo
YW5kbGVkIHdoZW4gZW5jb3VudGVyIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVpbnQzMl90
IGFycmF5U2l6ZTsKLSAgICAgICAgICAgICAgICBNVExWZXJ0ZXhGb3JtYXQgZm9ybWF0OwotCi0g
ICAgICAgICAgICAgICAgZ2V0VmVydGV4QXR0cmliRm9ybWF0QW5kQXJyYXlTaXplKCphdHRyaWJJ
bmZvSXRlLCAmZm9ybWF0LCAmYXJyYXlTaXplKTsKLQotICAgICAgICAgICAgICAgIGZvciAodWlu
dDMyX3QgdmFJZHggPSB2OyB2YUlkeCA8IHYgKyBhcnJheVNpemU7ICsrdmFJZHgpCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGF0dHJpYkluZm9JdGUgIT0gZW5kKHByb2dyYW1JbnB1dHMpKTsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGdsOjpWYXJpYWJsZUNvbXBvbmVudFR5cGUoYXR0cmliSW5m
b0l0ZS0+dHlwZSkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkZXNj
LmF0dHJpYnV0ZXNbdmFJZHhdLmJ1ZmZlckluZGV4ID0gbXRsOjprRGVmYXVsdEF0dHJpYnNCaW5k
aW5nSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlkeF0ub2Zm
c2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1bHRBdHRyaWJ1dGVTaXplOwotICAgICAgICAg
ICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdmFJZHhdLmZvcm1hdCAgICAgID0gZm9ybWF0Owor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEludFZlcnRleEZvcm1hdC5tZXRh
bEZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Mu
YXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdFVJbnRWZXJ0ZXhGb3JtYXQubWV0YWxGb3Jt
YXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3Jt
YXQgPSBtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0OwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTQxNywxNyArNDQ3LDM1
IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29u
dGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVy
SWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25QZXJWZXJ0ZXg7CiAgICAg
ICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IDE7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQmFz
ZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBGdW5jdGlvbiA9IE1UTFZl
cnRleFN0ZXBGdW5jdGlvblBlckluc3RhbmNlOwogICAgICAgICAgICAgICAgICAgICBkZXNjLmxh
eW91dHNbYnVmZmVySWR4XS5zdGVwUmF0ZSAgICAgPSBiaW5kaW5nLmdldERpdmlzb3IoKTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKyAgICAg
ICAgICAgICAgICAgICAgbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzLnB1c2hfYmFjayh2KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0g
TVRMVmVydGV4U3RlcEZ1bmN0aW9uQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIGRlc2Mu
bGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IDA7CisgICAgICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RyaWRlID0gbUN1cnJl
bnRBcnJheUJ1ZmZlclN0cmlkZXNbdl07CiAKLSAgICAgICAgICAgICAgICBjbWRFbmNvZGVyLT5z
ZXRWZXJ0ZXhCdWZmZXIobUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyT2Zm
c2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVy
c1t2XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNtZEVuY29kZXIt
PnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1t2XS0+Z2V0Q3VycmVudEJ1ZmZl
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBObyBidWZm
ZXIgc3BlY2lmaWVkLCB1c2UgdGhlIGNsaWVudCBtZW1vcnkgZGlyZWN0bHkgYXMgaW5saW5lIGNv
bnN0YW50IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1DdXJyZW50QXJyYXlJbmxp
bmVEYXRhU2l6ZXNbdl0gPD0gbUlubGluZURhdGFNYXhTaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1cnJlbnRBcnJheUlubGluZURhdGFQb2lu
dGVyc1t2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1t2XSwgYnVmZmVySWR4KTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSAgLy8gZm9yICh2KQog
ICAgIH0KIAogICAgICp2ZXJ0ZXhEZXNjQ2hhbmdlZCA9IGRpcnR5OwpAQCAtNDM1LDYgKzQ4Myw0
MiBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNv
bnRleHQgKmdsQ29udGV4dCwKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9
CiAKK3ZvaWQgVmVydGV4QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKG10bDo6UmVu
ZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZUlkKQoreworCisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEF0dHJpYnV0ZT4gJmF0dHJpYnMgPSBtU3RhdGUuZ2V0VmVy
dGV4QXR0cmlidXRlcygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhCaW5kaW5n
PiAmYmluZGluZ3MgID0gbVN0YXRlLmdldFZlcnRleEJpbmRpbmdzKCk7CisKKyAgICBmb3IgKHVp
bnQzMl90IGluc3RhbmNlQXR0cmliSWR4IDogbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzKQorICAg
IHsKKyAgICAgICAgdWludDMyX3QgYnVmZmVySWR4ICAgICAgICAgICAgICAgPSBtdGw6OmtWYm9C
aW5kaW5nSW5kZXhTdGFydCArIGluc3RhbmNlQXR0cmliSWR4OworICAgICAgICBjb25zdCBhdXRv
ICZhdHRyaWIgICAgICAgICAgICAgICA9IGF0dHJpYnNbaW5zdGFuY2VBdHRyaWJJZHhdOworICAg
ICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAmYmluZGluZyA9IGJpbmRpbmdzW2F0dHJpYi5i
aW5kaW5nSW5kZXhdOworICAgICAgICB1aW50MzJfdCBvZmZzZXQgPQorICAgICAgICAgICAgaW5z
dGFuY2VJZCAvIGJpbmRpbmcuZ2V0RGl2aXNvcigpICogbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlk
ZXNbaW5zdGFuY2VBdHRyaWJJZHhdOworICAgICAgICBpZiAobUN1cnJlbnRBcnJheUJ1ZmZlcnNb
aW5zdGFuY2VBdHRyaWJJZHhdKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2luc3RhbmNlQXR0
cmliSWR4XSk7CisKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3Vy
cmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0tPmdldEN1cnJlbnRCdWZmZXIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ1ZmZlcklk
eCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBO
byBidWZmZXIgc3BlY2lmaWVkLCB1c2UgdGhlIGNsaWVudCBtZW1vcnkgZGlyZWN0bHkgYXMgaW5s
aW5lIGNvbnN0YW50IGRhdGEKKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5SW5saW5l
RGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworICAg
ICAgICAgICAgaWYgKG9mZnNldCA+IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFu
Y2VBdHRyaWJJZHhdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNl
QXR0cmliSWR4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRW
ZXJ0ZXhCeXRlcyhtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW2luc3RhbmNlQXR0cmli
SWR4XSArIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIC0gb2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVySWR4KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBkYXRlQ2xp
ZW50QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3RWZXJ0ZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgdmVy
dGV4T3JJbmRleENvdW50LApAQCAtNDYzLDEwICs1NDcsNyBAQCBhbmdsZTo6UmVzdWx0IFZlcnRl
eEFycmF5TXRsOjp1cGRhdGVDbGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogICAgICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAmYmluZGluZyAgPSBiaW5kaW5nc1th
dHRyaWIuYmluZGluZ0luZGV4XTsKICAgICAgICAgQVNTRVJUKGF0dHJpYi5lbmFibGVkICYmIGJp
bmRpbmcuZ2V0QnVmZmVyKCkuZ2V0KCkgPT0gbnVsbHB0cik7CiAKLSAgICAgICAgR0x1aW50IHN0
cmlkZTsKLSAgICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCA9Ci0g
ICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0dHJpYi5m
b3JtYXQtPmlkLCAmc3RyaWRlKTsKLQorICAgICAgICAvLyBTb3VyY2UgY2xpZW50IG1lbW9yeSBw
b2ludGVyCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOwogICAgICAgICBBU1NFUlQoc3JjKTsKIApAQCAtNDg0
LDIyICs1NjUsNzYgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBkYXRlQ2xpZW50
QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgIHN0YXJ0RWxl
bWVudCA9IDA7CiAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSBVbnNpZ25lZENlaWxEaXZpZGUo
aW5zdGFuY2VDb3VudCwgYmluZGluZy5nZXREaXZpc29yKCkpOwogICAgICAgICB9Ci0gICAgICAg
IC8vIEFsbG9jYXRlIHNwYWNlIGZvciBzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQgc28gaW5k
ZXhpbmcgd2lsbCB3b3JrLiAgSWYgd2UgZG9uJ3QKLSAgICAgICAgLy8gc3RhcnQgYXQgemVybyBh
bGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCi0gICAgICAgIC8vIE9ubHkgZWxlbWVudENvdW50
IHZlcnRpY2VzIHdpbGwgYmUgdXNlZCBieSB0aGUgdXBjb21pbmcgZHJhdyBzbyB0aGF0IGlzIGFs
bCB3ZSBjb3B5LgotICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0gKHN0YXJ0RWxlbWVu
dCArIGVsZW1lbnRDb3VudCkgKiBzdHJpZGU7Ci0gICAgICAgIHNyYyArPSBzdGFydEVsZW1lbnQg
KiBiaW5kaW5nLmdldFN0cmlkZSgpOwotICAgICAgICBzaXplX3QgZGVzdE9mZnNldCA9IHN0YXJ0
RWxlbWVudCAqIHN0cmlkZTsKLQotICAgICAgICBtRHluYW1pY1ZlcnRleERhdGEudXBkYXRlQWxp
Z25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBpeGVs
Qnl0ZXMpOwotICAgICAgICBBTkdMRV9UUlkoU3RyZWFtVmVydGV4RGF0YSgKLSAgICAgICAgICAg
IGNvbnRleHRNdGwsICZtRHluYW1pY1ZlcnRleERhdGEsIHNyYywgYnl0ZXNUb0FsbG9jYXRlLCBk
ZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsCi0gICAgICAgICAgICBiaW5kaW5nLmdldFN0cmlkZSgp
LCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAotICAgICAgICAgICAgJm1Db252ZXJ0
ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLCAmbUN1cnJlbnRBcnJheUJ1ZmZlck9m
ZnNldHNbYXR0cmliSW5kZXhdKSk7CisgICAgICAgIHNpemVfdCBieXRlc0ludGVuZGVkVG9Vc2Ug
PSAoc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50KSAqIGJpbmRpbmcuZ2V0U3RyaWRlKCk7CiAK
LSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAgICAgID0gJm1Db252
ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdOwotICAgICAgICBtQ3VycmVudEFy
cmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gPSAmdmVydGV4Rm9ybWF0OwotICAgICAgICBt
Q3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gPSBzdHJpZGU7CisgICAgICAg
IGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZmb3JtYXQgPSBjb250ZXh0TXRsLT5nZXRWZXJ0ZXhG
b3JtYXQoYXR0cmliLmZvcm1hdC0+aWQsIGZhbHNlKTsKKyAgICAgICAgYm9vbCBuZWVkU3RyZWFt
aW5nICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAhPSBmb3JtYXQuaW50ZW5k
ZWRGb3JtYXRJZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRT
dHJpZGUoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSA8IGZv
cm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBpeGVsQnl0ZXMpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKwor
ICAgICAgICBpZiAoIW5lZWRTdHJlYW1pbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERh
dGEgd2lsbCBiZSB1cGxvYWRlZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0YQorICAg
ICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAgICAgICAgICAgPSBu
dWxscHRyOworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVyc1thdHRy
aWJJbmRleF0gPSBzcmM7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVz
W2F0dHJpYkluZGV4XSAgICA9IGJ5dGVzSW50ZW5kZWRUb1VzZTsKKyAgICAgICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSAgICAgID0gMDsKKyAgICAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSAgICAgID0gJmZvcm1hdDsK
KyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2F0dHJpYkluZGV4XSAgICAg
ID0gYmluZGluZy5nZXRTdHJpZGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIEdMdWludCBjb252ZXJ0ZWRTdHJpZGU7CisgICAgICAgICAgICAvLyBO
ZWVkIHRvIHN0cmVhbSB0aGUgY2xpZW50IHZlcnRleCBkYXRhIHRvIGEgYnVmZmVyLgorICAgICAg
ICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJnN0cmVhbUZvcm1hdCA9CisgICAgICAgICAg
ICAgICAgR2V0VmVydGV4Q29udmVyc2lvbkZvcm1hdChjb250ZXh0TXRsLCBhdHRyaWIuZm9ybWF0
LT5pZCwgJmNvbnZlcnRlZFN0cmlkZSk7CisKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIHNwYWNl
IGZvciBzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQgc28gaW5kZXhpbmcgd2lsbCB3b3JrLiAg
SWYgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHN0YXJ0IGF0IHplcm8gYWxsIHRoZSBpbmRpY2Vz
IHdpbGwgYmUgb2ZmLgorICAgICAgICAgICAgLy8gT25seSBlbGVtZW50Q291bnQgdmVydGljZXMg
d2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNvIHRoYXQgaXMgYWxsIHdlIGNvcHku
CisgICAgICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0gKHN0YXJ0RWxlbWVudCArIGVs
ZW1lbnRDb3VudCkgKiBjb252ZXJ0ZWRTdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3RhcnRF
bGVtZW50ICogYmluZGluZy5nZXRTdHJpZGUoKTsKKyAgICAgICAgICAgIHNpemVfdCBkZXN0T2Zm
c2V0ID0gc3RhcnRFbGVtZW50ICogY29udmVydGVkU3RyaWRlOworCisgICAgICAgICAgICBtQ3Vy
cmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gPSAmc3RyZWFtRm9ybWF0OworICAg
ICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gY29udmVy
dGVkU3RyaWRlOworCisgICAgICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlIDw9IG1JbmxpbmVE
YXRhTWF4U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGF0
YSBpcyBzbWFsbCBlbm91Z2gsIHVzZSBob3N0IG1lbW9yeSBpbnN0ZWFkIG9mIGNyZWF0aW5nIEdQ
VSBidWZmZXIuIFRvCisgICAgICAgICAgICAgICAgLy8gYXZvaWQgc3luY2hyb25pemluZyBhY2Nl
c3MgdG8gR1BVIGJ1ZmZlciB0aGF0IGlzIHN0aWxsIGluIHVzZS4KKyAgICAgICAgICAgICAgICBh
bmdsZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJheSA9CisgICAgICAgICAgICAg
ICAgICAgIG1Db252ZXJ0ZWRDbGllbnRTbWFsbEFycmF5c1thdHRyaWJJbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKGJ5dGVzVG9BbGxvY2F0ZSA+IGNvbnZlcnRlZENsaWVudEFycmF5LnNpemUo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFOR0xFX0NIRUNLX0dM
X0FMTE9DKGNvbnRleHRNdGwsIGNvbnZlcnRlZENsaWVudEFycmF5LnJlc2l6ZShieXRlc1RvQWxs
b2NhdGUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3Ry
ZWFtRm9ybWF0LnZlcnRleExvYWRGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgc3RyZWFtRm9y
bWF0LnZlcnRleExvYWRGdW5jdGlvbihzcmMsIGJpbmRpbmcuZ2V0U3RyaWRlKCksIGVsZW1lbnRD
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRlc3RPZmZzZXQpOworCisgICAgICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAgICAgICAgICAgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbYXR0cmli
SW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpOworICAgICAgICAgICAgICAgIG1D
dXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbYXR0cmliSW5kZXhdICAgID0gYnl0ZXNUb0FsbG9j
YXRlOworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYklu
ZGV4XSAgICAgID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdHJlYW0gdGhlIGNsaWVudCBkYXRhIHRvIGEgR1BV
IGJ1ZmZlci4gU3luY2hyb25pemF0aW9uIG1pZ2h0IGhhcHBlbiBpZiBidWZmZXIgaXMKKyAgICAg
ICAgICAgICAgICAvLyBpbiB1c2UuCisgICAgICAgICAgICAgICAgbUR5bmFtaWNWZXJ0ZXhEYXRh
LnVwZGF0ZUFsaWdubWVudChjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCku
cGl4ZWxCeXRlcyk7CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKFN0cmVhbVZlcnRleERhdGEo
Y29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2NhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE9mZnNldCwgZWxl
bWVudENvdW50LCBiaW5kaW5nLmdldFN0cmlkZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Db252ZXJ0ZWRBcnJheUJ1
ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1thdHRyaWJJbmRleF0pKTsK
KworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJzW2F0dHJpYkluZGV4XSA9ICZt
Q29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSAgLy8gaWYgKG5lZWRTdHJlYW1pbmcpCiAgICAgfQogCiAgICAgbVZlcnRleEFy
cmF5RGlydHkgPSB0cnVlOwpAQCAtNTI2LDcgKzY2MSw3IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4
QXJyYXlNdGw6OnN5bmNEaXJ0eUF0dHJpYihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAog
ICAgICAgICAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgZm9ybWF0
LmFjdHVhbEZvcm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8CiAgICAgICAgICAg
ICAgICAgKGJpbmRpbmcuZ2V0T2Zmc2V0KCkgJSBmb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5w
aXhlbEJ5dGVzKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0T2Zmc2V0KCkg
JSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDAgfHwKKyAgICAg
ICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAgfHwKICAgICAgICAgICAg
ICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSA8IGZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBp
eGVsQnl0ZXMpIHx8CiAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3RyaWRlKCkgJSBtdGw6
OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDA7CiAKQEAgLTU2MywxOSAr
Njk4LDIxIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnN5bmNEaXJ0eUF0dHJpYihj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5
TXRsOjpnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBl
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZl
ck9mZnNldE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBl
T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICppbmRleEJ1ZmZlckNvdW50T3V0KQogewogICAgIGNvbnN0IGdsOjpCdWZmZXIgKmdsRWxlbWVu
dEFycmF5QnVmZmVyID0gZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKIAogICAg
IHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgPSByZWludGVycHJldF9jYXN0PHNpemVfdD4oaW5kaWNl
cyk7CiAgICAgaWYgKCFnbEVsZW1lbnRBcnJheUJ1ZmZlcikKICAgICB7Ci0gICAgICAgIEFOR0xF
X1RSWShzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29udGV4dCwgdHlwZSwgY291bnQsIGlu
ZGljZXMsIGlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQpKTsKKyAgICAgICAgQU5HTEVfVFJZKHN0cmVh
bUluZGV4QnVmZmVyRnJvbUNsaWVudChjb250ZXh0LCB0eXBlLCBtb2RlLCBjb3VudCwgaW5kaWNl
cywgaWR4QnVmZmVyT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewpAQCAtNTgzLDggKzcyMCw4IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4
QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnZlcnRlZE9mZnNldCAlIG10bDo6a0luZGV4
QnVmZmVyT2Zmc2V0QWxpZ25tZW50KSAhPSAwOwogICAgICAgICBpZiAobmVlZENvbnZlcnNpb24p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShjb252ZXJ0SW5kZXhCdWZmZXIoY29u
dGV4dCwgdHlwZSwgY29udmVydGVkT2Zmc2V0LCBpZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCkpOworICAgICAg
ICAgICAgQU5HTEVfVFJZKGNvbnZlcnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2RlLCBj
b252ZXJ0ZWRPZmZzZXQsIGlkeEJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0LCBpbmRleEJ1ZmZlckNvdW50T3V0KSk7
CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC01OTIsNiArNzI5LDcgQEAg
YW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICBCdWZmZXJNdGwgKmJ1ZmZlck10bCA9IG10bDo6
R2V0SW1wbChnbEVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICAqaWR4QnVmZmVyT3V0
ICAgICAgICA9IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOwogICAgICAgICAgICAgKmlk
eEJ1ZmZlck9mZnNldE91dCAgPSBjb252ZXJ0ZWRPZmZzZXQ7CisgICAgICAgICAgICAqaW5kZXhC
dWZmZXJDb3VudE91dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgfQogCkBAIC02MDcsOSArNzQ1
LDExIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpj
b252ZXJ0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRz
VHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZm
ZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRleEJ1
ZmZlckNvdW50T3V0KQogewogICAgIHNpemVfdCBvZmZzZXRNb2R1bG8gPSBvZmZzZXQgJSBtdGw6
OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudDsKICAgICBBU1NFUlQob2Zmc2V0TW9kdWxvICE9
IDAgfHwgaW5kZXhUeXBlID09IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZEJ5dGUpOwpA
QCAtNjM4LDE1ICs3NzgsMTUgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29udmVy
dEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgfQogCiAgICAg
c2l6ZV90IGluZGV4Q291bnQgPSBHZXRJbmRleENvdW50KGlkeEJ1ZmZlciwgb2Zmc2V0TW9kdWxv
LCBpbmRleFR5cGUpOwotCi0gICAgaWYgKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYKLSAgICAgICAgY29udGV4dE10
bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkKKyAgICBpZiAoKCFjb250ZXh0TXRsLT5nZXRE
aXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5lbmFibGVkICYm
CisgICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkKICAgICB7
CiAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB1c2UgR1BVIHRvIGNvbnZlcnQgd2hlbiB3ZSBhcmUg
aW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KICAgICAgICAgQU5HTEVfVFJZKFN0cmVhbUlu
ZGV4RGF0YShjb250ZXh0TXRsLCAmY29udmVyc2lvbi0+ZGF0YSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZHhCdWZmZXItPmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnRl
eHRNdGwpICsgb2Zmc2V0TW9kdWxvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4VHlwZSwgaW5kZXhDb3VudCwgZ2xTdGF0ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVk
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZl
cnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwgZ2xTdGF0
ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZl
cnRlZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEJ1ZmZl
ckNvdW50T3V0KSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC02OTUsMTggKzgzNSwyMCBA
QCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252ZXJ0SW5kZXhCdWZmZXJHUFUoY29u
c3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dAogCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRs
OjpzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGluZGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc291cmNlUG9pbnRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
dGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyQ291bnRP
dXQpCiB7CiAgICAgQVNTRVJUKGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkgPT0g
bnVsbHB0cik7CiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250
ZXh0KTsKIAogICAgIGF1dG8gc3JjRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4o
c291cmNlUG9pbnRlcik7Ci0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRs
LCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwKKyAg
ICBBTkdMRV9UUlkoU3RyZWFtSW5kZXhEYXRhKGNvbnRleHRNdGwsICZtRHluYW1pY0luZGV4RGF0
YSwgc3JjRGF0YSwgaW5kZXhUeXBlLCBpbmRleENvdW50LCBtb2RlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0U3RhdGUoKS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFi
bGVkKCksIGlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1
ZmZlck9mZnNldE91dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVy
T2Zmc2V0T3V0LCBpZHhCdWZmZXJDb3VudE91dCkpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwogfQpAQCAtNzQ0LDcgKzg4Niw2IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4
QXJyYXlNdGw6OmNvbnZlcnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKICAgICAvLyBIYXMgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlciBoYXMgY2hhbmdlZCBzaW5j
ZSBsYXN0IGNvbnZlcnNpb24/CiAgICAgaWYgKCFjb252ZXJzaW9uLT5kaXJ0eSkKICAgICB7Ci0g
ICAgICAgIC8vIEJ1ZmZlcidzIGRhdGEgaGFzbid0IGJlZW4gY2hhbmdlZC4gUmUtdXNlIGxhc3Qg
Y29udmVydGVkIHJlc3VsdHMKICAgICAgICAgbUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1th
dHRyaWJJbmRleF0uc2V0KGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlcik7CiAgICAgICAgIG1D
dXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSA9IGNvbnZlcnNpb24tPmNvbnZl
cnRlZE9mZnNldDsKIApAQCAtNzYxLDcgKzkwMiw3IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OmNvbnZlcnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
ICAgICBib29sIGNhbkV4cGFuZENvbXBvbmVudHNPbkdQVSA9IGNvbnZlcnRlZEZvcm1hdC5hY3R1
YWxTYW1lR0xUeXBlOwogCiAgICAgaWYgKGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1hbmRFbmNv
ZGVyKCkgJiYKLSAgICAgICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5oYXNDaGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgorICAgICAgICAhY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmJyZWFrUmVuZGVyUGFzc0lzQ2hlYXAuZW5hYmxlZCAm
JgogICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0V4
cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQogICAgIHsKICAgICAgICAgLy8gQ2Fubm90IHVzZSBH
UFUgdG8gY29udmVydCB3aGVuIHdlIGFyZSBpbiBhIG1pZGRsZSBvZiBhIHJlbmRlciBwYXNzLgpA
QCAtNzkyLDYgKzkzMyw5IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRW
ZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICBjb252ZXJzaW9u
LT5jb252ZXJ0ZWRCdWZmZXIgPSBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYklu
ZGV4XS5nZXRDdXJyZW50QnVmZmVyKCk7CiAgICAgY29udmVyc2lvbi0+Y29udmVydGVkT2Zmc2V0
ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdOwogCisgICAgQVNTRVJU
KGNvbnZlcnNpb24tPmRpcnR5KTsKKyAgICBjb252ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworCiAj
aWZuZGVmIE5ERUJVRwogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewpAQCAtODAxLDkg
Kzk0NSw2IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRWZXJ0ZXhCdWZm
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICB9CiAjZW5kaWYKIAotICAgIEFT
U0VSVChjb252ZXJzaW9uLT5kaXJ0eSk7Ci0gICAgY29udmVyc2lvbi0+ZGlydHkgPSBmYWxzZTsK
LQogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9B
UFBMRV9jbGlwX2Rpc3RhbmNlLm1kIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1kCmluZGV4IGZhMDcz
YWU2MjNmOWMxMmU3NjE5MjBjNWNjODBhZGRjZWM2MzVlZDIuLjEzYWZkYzM0ZGExZGFiN2YwMzdk
MDhhNTg5MDg1ZThhNWJhODUyM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
ZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQKQEAgLTYsNiArNiwzMSBAQCBsZXZlbCBzaWRlLiBX
cml0aW5nIHRvIGBnbF9DbGlwRGlzdGFuY2VbaV1gIGluIHNoYWRlciB3aWxsIGJlIGlnbm9yZWQg
aWYgaXQgaXMgZAogZG9lc24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0byBkaXNhYmxlL2Vu
YWJsZSB0aGUgd3JpdGluZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9kaXN0YW5jZWAKIHZh
cmlhYmxlIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBpdC4KIAotVG8gZW11bGF0ZSB0aGlzIGVuYWJs
aW5nL2Rpc2FibGluZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEgc2ltaWxhciBpbXBs
ZW1lbnRhdGlvbiBhcyB3aGF0Ci1bVnVsa2FuIGJhY2stZW5kIGRvZXNdKC4uLy4uL3Z1bGthbi9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCkuIFBsZWFzZSByZWZlciB0byB0aGF0IGRvY3VtZW50
IGZvcgotbW9yZSBkZXRhaWxzLgorVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxpbmcvZGlzYWJsaW5n
IEFQSSBpbiBNZXRhbCBiYWNrLWVuZDoKKworLSBUaGUgc2hhZGVyIGNvbXBpbGVyIHdpbGwgdHJh
bnNsYXRlIGVhY2ggYGdsX0NsaXBEaXN0YW5jZVtpXWAgYXNzaWdubWVudCB0byBhbiBhc3NpZ25t
ZW50IHRvCisgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUuCistIEEgc3BlY2lhbCBk
cml2ZXIgdW5pZm9ybSB2YXJpYWJsZSBgY2xpcERpc3RhbmNlc0VuYWJsZWRgIHdpbGwgY29udGFp
biBvbmUgYml0IGZsYWcgZm9yIGVhY2gKKyAgZW5hYmxlZCBgZ2xfQ2xpcERpc3RhbmNlW2ldYC4g
VGhpcyB2YXJpYWJsZSBzdXBwb3J0cyB1cCB0byAzMiBgZ2xfQ2xpcERpc3RhbmNlYCBpbmRpY2Vz
LgorLSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBlbmFibGVkIGBnbF9DbGlwRGlz
dGFuY2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3RpdmUKKyAgdmFsdWUgZnJvbSBg
QU5HTEVDbGlwRGlzdGFuY2VbaV1gLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhvc2UgZGlzYWJsZWQg
ZWxlbWVudHMgd2lsbCBiZSBhc3NpZ25lZAorICB6ZXJvIHZhbHVlLiBUaGlzIHN0ZXAgaXMgZGVz
Y3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgY29kZToKKyAgICBgYGAKKyAgICBmb3IgKGludCBpbmRl
eCA6IGFycmF5bGVuZ3RoKGdsX0NsaXBEaXN0YW5jZSkpCisgICAgeworICAgICAgICBpZiAoQU5H
TEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAmICgweDEgPDwgaW5kZXgpKQorICAgICAg
ICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9IEFOR0xFQ2xpcERpc3RhbmNlW2luZGV4XTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9IDA7Cisg
ICAgfQorICAgIGBgYAorLSBTb21lIG1pbm9yIG9wdGltaXphdGlvbnM6CisgICAgLSBPbmx5IHRo
b3NlIGluZGljZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2luYWwgY29kZSB3aWxs
IGJlIHVzZWQgaW4gaWYgZWxzZSBibG9jaworICAgICAgYWJvdmUuCisgICAgLSBUaG9zZSBlbGVt
ZW50cyB3aG9zZSBpbmRleCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2luYWwgY29kZSB3aWxs
IGJlIHplcm9pc2VkIGluc3RlYWQuCisgICAgLSBJZiB0aGUgb3JpZ2luYWwgY29kZSBvbmx5IHVz
ZXMgdXAgdG8gYW4gaW5kZXggPCBgZ2xfTWF4Q2xpcERpc3RhbmNlc2AsIHRoZW4KKyAgICAgIHRo
ZSBsb29wIHdpbGwgaGF2ZSBhdCBtb3N0IGBpbmRleCsxYCBpdGVyYXRpb25zLiBJZiB0aGVyZSBp
cyBhdCBsZWFzdCBvbmUgaW5kZXggbm90IGJlaW5nCisgICAgICBpbnRlZ3JhbCBjb25zdGFudCB2
YWx1ZSBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlbiBkZWNsYXJlZCBzaXplIG9mIGBnbF9DbGlw
RGlzdGFuY2VgCisgICAgICB3aWxsIGJlIHRoZSBsb29wIHNpemUuCisgICAgLSBGaW5hbGx5LCBp
ZiB0aGUgb3JpZ2luYWwgY29kZSBkb2Vzbid0IHVzZSBgZ2xfQ2xpcERpc3RhbmNlYCwgdGhlbiBh
bGwgdGhlIHN0ZXBzIGFib3ZlIHdpbGwgYmUKKyAgICAgIG9taXR0ZWQuClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL2dlbl9tdGxfZm9ybWF0X3RhYmxlLnB5IGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2dlbl9tdGxfZm9ybWF0
X3RhYmxlLnB5CmluZGV4IDNjZTE0MmU1NmM2ZjYyYTA5MDQ4YzU5Y2JmYWU5ZDRjZjk5NzczYTMu
Ljg4OGI3OWY5NzQ1OThlMDhmZDY2OTc0OWY3OWZlMzQ4NWUwMTJmNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRs
X2Zvcm1hdF90YWJsZS5weQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKQEAgLTM3LDYgKzM3LDcg
QEAgdGVtcGxhdGVfYXV0b2dlbl9pbmwgPSAiIiIvLyBHRU5FUkFURUQgRklMRSAtIERPIE5PVCBF
RElULgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL0Zvcm1hdC5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBhbmdsZTsKIApAQCAt
NDgsNyArNDksNiBAQCBuYW1lc3BhY2UgbXRsCiB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNw
bGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiB7ewog
ICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElkXzsKLQogICAgIGlk
PE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwogCiAg
ICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KQEAgLTEwOSw2ICsxMDksMjMgQEAgaW1hZ2VfZm9ybWF0
X2Fzc2lnbl90ZW1wbGF0ZTIgPSAiIiIKICAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rp
b24gPSB7aW5pdF9mdW5jdGlvbl9mYWxsYmFja307CiAgICAgICAgICAgICB9fQogIiIiCisjRDE2
IGlzIGZ1bGx5IHN1cHBvcnRlZCBvbiAgQXBwbGUzKy4gSG93ZXZlciwgb24KKyNwcmV2aW91cyAg
dmVyc2lvbnMgb2YgQXBwbGUgaGFyZHdhcmUsIHNvbWUgb3BlcmF0aW9ucyBjYW4gY2F1c2UKKyN1
bmRlZmluZWQgYmVoYXZpb3IuCitpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMyA9ICIiIgor
ICAgICAgICAgICAgaWYgKG10bDo6U3VwcG9ydHNJT1NHUFVGYW1pbHkobWV0YWxEZXZpY2UsIDMp
KQorICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9IHtt
dGxfZm9ybWF0fTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xl
OjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXR9OworICAgICAgICAgICAgICAgIHRoaXMt
PmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKyAgICAgICAgICAgIH19CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9y
bWF0ID0ge210bF9mb3JtYXRfZmFsbGJhY2t9OworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjp7YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFj
a307CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25f
ZmFsbGJhY2t9OworICAgICAgICAgICAgfX0KKyIiIgogCiBjYXNlX2ltYWdlX2Zvcm1hdF90ZW1w
bGF0ZTEgPSAiIiIgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjp7YW5nbGVfZm9ybWF0fToK
ICAgICAgICAgICAgIHtpbWFnZV9mb3JtYXRfYXNzaWdufQpAQCAtMjEzLDYgKzIzMCw4IEBAIGRl
ZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1hdCwg
ZHN0X2Zvcm1hdCk6CiAKIAogIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2Fz
ZSAoZ2VuZXJpYyBjYXNlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxfbWFwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduX2dlbl9mdW5jKToKICAgICBpZiBpc2lu
c3RhbmNlKGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgZGljdCk6CkBAIC0yNTUsNiArMjc0LDgg
QEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KIAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJz
aW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0
Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3Rv
X210bF9tYXApOgogCkBAIC0yNzAsNiArMjkxLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNo
X3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmcK
IAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChNYWMgY2FzZSkK
KworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1
YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAsIG1hY19mYWxsYmFja3MpOgogICAgIGdsX2Zv
cm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KQEAgLTMwMSwxMSArMzI0LDQzIEBAIGRl
ZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmds
ZV9mb3JtYXRfaW5mbywgYW5nbGVfCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuX2Zvcm1hdF9hc3NpZ25fY29kZSkKIAogCitkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
aW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAs
IGlvc19mYWxsYmFja3MpOgorICAgIGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1h
dF0KKworICAgIGRlZiBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKGFjdHVhbF9hbmdsZV9mb3JtYXQs
IGFuZ2xlX3RvX210bF9tYXApOgorICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlv
c19mYWxsYmFja3M6CisgICAgICAgICAgICAjIFRoaXMgZm9ybWF0IChEZXB0aDE2VW5pZm9ybSkg
cmVxdWlyZXMgZmFsbGJhY2sgd2hlbiBpT1MgaGFyZHdhcmUgZG9lcyBub3QgZnVsbHkgc3VwcG9y
dCBkZXB0aDE2LgorICAgICAgICAgICAgIyBGYWxsYmFjayBmb3JtYXQ6CisgICAgICAgICAgICBh
Y3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVf
Zm9ybWF0XQorICAgICAgICAgICAgIyByZXR1cm4gaWYgZWxzZSBibG9jazoKKyAgICAgICAgICAg
IHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMy5mb3JtYXQoCisgICAgICAgICAg
ICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAg
ICAgICAgIG10bF9mb3JtYXQ9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0XSwK
KyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5nZXRfaW50
ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQs
IGFjdHVhbF9hbmdsZV9mb3JtYXQpLAorICAgICAgICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3Jt
YXRfZmFsbGJhY2s9YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICBtdGxfZm9ybWF0X2ZhbGxiYWNrPWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1h
dF9mYWxsYmFja10sCisgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmds
ZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKyAgICAgICAg
ICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorICAgICAg
ICAgICAgcmV0dXJuIGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUxLmZvcm1hdCgKKyAgICAg
ICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0PWFjdHVhbF9hbmdsZV9mb3JtYXQsCisgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorICAgICAgICAgICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdl
dF9pbnRlcm5hbF9mb3JtYXRfaW5pdGlhbGl6ZXIoCisgICAgICAgICAgICAgICAgICAgIGdsX2Zv
cm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCkpCisKKyAgICByZXR1cm4gZ2VuX2ltYWdlX21hcF9z
d2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVf
dG9fbXRsX21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fZm9y
bWF0X2Fzc2lnbl9jb2RlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1h
Z2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBhbmdsZV9vdmVycmlkZSA9IGltYWdlX3RhYmxl
WyJvdmVycmlkZSJdCiAgICAgbWFjX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX21h
YyJdCiAgICAgaW9zX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX2lvcyJdCi0gICAg
bWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3NfbWFjIl0KKyAgICBt
YWNfZmFsbGJhY2tzID0gaW1hZ2VfdGFibGVbImZhbGxiYWNrc19tYWMiXQorICAgIGlvc19mYWxs
YmFja3MgPSBpbWFnZV90YWJsZVsiZmFsbGJhY2tzX2lvcyJdCiAgICAgYW5nbGVfdG9fbXRsID0g
aW1hZ2VfdGFibGVbIm1hcCJdCiAgICAgbWFjX3NwZWNpZmljX21hcCA9IGltYWdlX3RhYmxlWyJt
YXBfbWFjIl0KICAgICBpb3Nfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVbIm1hcF9pb3MiXQpA
QCAtMzIyLDggKzM3Nyw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1hZ2Vf
dGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfY29tbW9u
X2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KToKICAgICAgICAgbWFjX2Nh
c2UgPSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQsIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGwsIG1hY19mYWxsYmFja3MpCi0gICAg
ICAgIG5vbl9tYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFuZ2xlX3RvX210bCkK
KyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdlX21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5n
bGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19nbCwgYW5nbGVfdG9fbXRsLCBp
b3NfZmFsbGJhY2tzKQogICAgICAgICBpZiBtYWNfY2FzZSA9PSBub25fbWFjX2Nhc2U6CiAgICAg
ICAgICAgICByZXR1cm4gbWFjX2Nhc2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZm
ZXJfcG9vbC5oCmluZGV4IDIwNzlmZDcyN2E1MTJiMjg3MjVkMzgzOTA3YTQ5M2RjZDJkY2QzN2Mu
LjIwNGViYjk0OTg3MzExMmMwMTAyNDJiMmIxNmIwODYwY2Q0MGMwMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVm
ZmVyX3Bvb2wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVm
ZmVyUG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3QnVmZmVyQWxsb2Nh
dGVkT3V0ID0gbnVsbHB0cik7CiAKICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0
ZXMsIGNhbGwgY29tbWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZp
Y2UuCi0gICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCk7Cisg
ICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCwgYm9vbCBmbHVz
aEVudGlyZUJ1ZmZlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgcmVsZWFzZXMgYWxsIHRoZSBi
dWZmZXJzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzaW5jZSB0aGlzIHdhcyBsYXN0IGNhbGxl
ZC4KICAgICB2b2lkIHJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dE10
bCk7CkBAIC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAogICAgIGFuZ2xlOjpSZXN1
bHQgYWxsb2NhdGVOZXdCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBk
ZXN0cm95QnVmZmVyTGlzdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBzdGQ6OmRlcXVlPEJ1ZmZl
clJlZj4gKmJ1ZmZlcnMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVy
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwotCiAgICAgc2l6ZV90IG1Jbml0aWFsU2l6ZTsKICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKICAgICB1aW50MzJfdCBtTmV4dEFsbG9jYXRpb25PZmZzZXQ7
CkBAIC0xMjcsNyArMTI2LDcgQEAgY2xhc3MgQnVmZmVyUG9vbAogCiAgICAgc2l6ZV90IG1CdWZm
ZXJzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtTWF4QnVmZmVyczsKLSAgICBCdWZmZXJQb29sTWVt
UG9saWN5IG1NZW1Qb2xpY3k7CisgICAgQnVmZmVyUG9vbE1lbVBvbGljeSBtTWVtUG9saWN5ID0g
QnVmZmVyUG9vbE1lbVBvbGljeTo6QXV0bzsKICAgICBib29sIG1BbHdheXNBbGxvY2F0ZU5ld0J1
ZmZlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCmlu
ZGV4IDA0MjM4ZWYxZThmYWIyMTY3NjU5YjY2OGMxY2NmYjk0ZmY1YTJkMmUuLmE1OGI1YTVhM2U5
Nzc4MGY3ODc1OTIwN2EwZmExMjU1MTlhOWQ1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9idWZmZXJfcG9vbC5tbQpAQCAtMjUwLDExICsyNTAsMTggQEAgYW5nbGU6OlJlc3VsdCBC
dWZmZXJQb29sOjphbGxvY2F0ZShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBCdWZmZXJQb29sOjpj
b21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6
Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCiB7
CiAgICAgaWYgKG1CdWZmZXIgJiYgbU5leHRBbGxvY2F0aW9uT2Zmc2V0ID4gbUxhc3RGbHVzaE9m
ZnNldCkKICAgICB7Ci0gICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIG1MYXN0Rmx1
c2hPZmZzZXQsIG1OZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hPZmZzZXQpOworICAg
ICAgICBpZiAoZmx1c2hFbnRpcmVCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1CdWZm
ZXItPmZsdXNoKGNvbnRleHRNdGwsIDAsIG1MYXN0Rmx1c2hPZmZzZXQpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4
dE10bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVz
aE9mZnNldCk7CisgICAgICAgIH0KICAgICAgICAgbUxhc3RGbHVzaE9mZnNldCA9IG1OZXh0QWxs
b2NhdGlvbk9mZnNldDsKICAgICB9CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oCmluZGV4IDU1
ZmY2NDlkYjZkNTc3NWRjZTdhYzljYTUzMGExMjViZDY1ZDI4MWYuLjNhYTgyNmFmNjdmY2QyMDFi
OWYzYjJjYzhmMWE4ZTc3YTAxMWIyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2NvbW1hbmRfYnVmZmVyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVy
IGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmds
ZTo6TgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tbWFuZCBidWZmZXIgY2FuIGJlIGVuY29k
ZWQgaW50by4gUmV0dXJuIGZhbHNlIGlmIGl0IGhhcyBiZWVuIGNvbW1pdHRlZAogICAgIC8vIGFu
ZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCi0gICAgYm9vbCByZWFkeSgpIGNvbnN0OworICAgIGJv
b2wgdmFsaWQoKSBjb25zdDsKICAgICB2b2lkIGNvbW1pdCgpOwogICAgIC8vIHdhaXQgZm9yIGNv
bW1pdHRlZCBjb21tYW5kIGJ1ZmZlciB0byBmaW5pc2guCiAgICAgdm9pZCBmaW5pc2goKTsKQEAg
LTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBw
ZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogCiAgICAgdm9pZCBxdWV1
ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2
YWx1ZSk7CiAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJl
ZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKworICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduKGNv
bnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOwogICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qg
c3RkOjpzdHJpbmcgJm1hcmtlcik7CiAgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTEy
OCw3ICsxMzAsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRP
YmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogICAgIHZvaWQgc2V0KGlkPE1U
TENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKTsKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAg
IGJvb2wgcmVhZHlJbXBsKCkgY29uc3Q7CisgICAgYm9vbCB2YWxpZEltcGwoKSBjb25zdDsKICAg
ICB2b2lkIGNvbW1pdEltcGwoKTsKICAgICB2b2lkIGZvcmNlRW5kaW5nQ3VycmVudEVuY29kZXIo
KTsKIApAQCAtMTQ5LDYgKzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJs
aWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCiAKICAgICBt
dXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CiAKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
bVBlbmRpbmdEZWJ1Z1NpZ25zOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxtdGw6OlNoYXJl
ZEV2ZW50UmVmLCB1aW50NjRfdD4+IG1QZW5kaW5nU2lnbmFsRXZlbnRzOwogCiAgICAgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IG1EZWJ1Z0dyb3VwczsKQEAgLTE3Niw2ICsxNzksOCBAQCBjbGFz
cyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNv
ZGVyPj4sIGFuZ2xlOjpOb25DbwogICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWlu
Z1dyaXR0ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CiAgICAgQ29tbWFuZEVuY29k
ZXIgJm1hcmtSZXNvdXJjZUJlaW5nV3JpdHRlbkJ5R1BVKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpOwogCisgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBwdXNoRGVidWdHcm91cChOU1N0cmluZyAqbGFiZWwpOwogICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTE4OSw2ICsxOTQsOCBAQCBjbGFzcyBDb21t
YW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNvZGVyPj4s
IGFuZ2xlOjpOb25DbwogCiAgICAgdm9pZCBzZXQoaWQ8TVRMQ29tbWFuZEVuY29kZXI+IG1ldGFs
Q21kRW5jb2Rlcik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbWFya2VyKTsKKwogICBwcml2YXRlOgogICAgIGNvbnN0IFR5cGUgbVR5cGU7CiAgICAg
Q29tbWFuZEJ1ZmZlciAmbUNtZEJ1ZmZlcjsKQEAgLTIwMSw3ICsyMDgsNyBAQCBjbGFzcyBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5s
aW5lIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gJnB1c2goY29uc3QgVCAmdmFsKQogICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90ICo+KCZ2YWwpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCAqPigmdmFsKTsKICAgICAgICAgbUJ1ZmZlci5pbnNlcnQobUJ1ZmZlci5lbmQoKSwg
cHRyLCBwdHIgKyBzaXplb2YoVCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAt
MjE3LDcgKzIyNCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KICAgICB7CiAg
ICAgICAgIEFTU0VSVChtUmVhZFB0ciA8PSBtQnVmZmVyLnNpemUoKSAtIHNpemVvZihUKSk7CiAg
ICAgICAgIFQgcmU7Ci0gICAgICAgIHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCAqPigmcmUpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCAqPigmcmUpOwogICAgICAgICBzdGQ6OmNvcHkobUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciwg
bUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciArIHNpemVvZihUKSwgcHRyKTsKICAgICAgICAgcmV0
dXJuIHJlOwogICAgIH0KQEAgLTIyNSw3ICsyMzIsNyBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21t
YW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIFQgZmV0Y2go
KQogICAgIHsKLSAgICAgICAgVCByZSA9IHBlZWs8VD4oKTsKKyAgICAgICAgYXV0byByZSA9IHBl
ZWs8VD4oKTsKICAgICAgICAgbVJlYWRQdHIgKz0gc2l6ZW9mKFQpOwogICAgICAgICByZXR1cm4g
cmU7CiAgICAgfQpAQCAtMjMzLDcgKzI0MCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0KICAgICBpbmxpbmUgY29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIuc2l6ZSgpIC0gYnl0ZXMpOwot
ICAgICAgICBzaXplX3QgY3VyID0gbVJlYWRQdHI7CisgICAgICAgIGF1dG8gY3VyID0gbVJlYWRQ
dHI7CiAgICAgICAgIG1SZWFkUHRyICs9IGJ5dGVzOwogICAgICAgICByZXR1cm4gbUJ1ZmZlci5k
YXRhKCkgKyBjdXI7CiAgICAgfQpAQCAtNDc5LDEyICs0ODYsMTYgQEAgY2xhc3MgUmVuZGVyQ29t
bWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29kZXIKICAgICB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4+KENvbW1hbmRF
bmNvZGVyOjpnZXQoKSk7CiAgICAgfQorICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbGFiZWwpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0QXR0YWNobWVudFdyaXRlRGVw
ZW5kZW5jeUFuZFNjaXNzb3JSZWN0KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0
YWNobWVudCk7CisgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYg
JnRleHR1cmUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihNVExSZW5kZXJQ
YXNzQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNSZW5kZXJQYXNzQXR0YWNobWVudCk7CiAKICAg
ICB2b2lkIGVuY29kZU1ldGFsRW5jb2RlcigpOworICAgIHZvaWQgc2ltdWxhdGVEaXNjYXJkRnJh
bWVidWZmZXIoKTsKKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlzY2Fy
ZFNpbXVsYXRpb24pOwogCiAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJmNvbW1vblNldEJ1ZmZl
cihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCkBAIC01NjAsMTEgKzU3MSwy
MCBAQCBjbGFzcyBCbGl0Q29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29k
ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsaWNlQ291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZXZlbENv
dW50KTsKIAorICAgIEJsaXRDb21tYW5kRW5jb2RlciAmY29weVRleHR1cmUoY29uc3QgVGV4dHVy
ZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c3JjU2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
cmNMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1
cmVSZWYgJmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGRzdFNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
bGljZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGV2ZWxDb3VudCk7CisKICAgICBCbGl0Q29tbWFuZEVuY29kZXIgJmZpbGxCdWZmZXIoY29uc3Qg
QnVmZmVyUmVmICZidWZmZXIsIE5TUmFuZ2UgcmFuZ2UsIHVpbnQ4X3QgdmFsdWUpOwogCiAgICAg
QmxpdENvbW1hbmRFbmNvZGVyICZnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1
cmVSZWYgJnRleHR1cmUpOwotICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlclB0cik7Ci0gICAgQmxpdENvbW1hbmRFbmNvZGVyICZzeW5jaHJv
bml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIpOworICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmc3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOwogCiAgIHByaXZhdGU6CiAgICAgaWQ8TVRMQmxpdENvbW1hbmRFbmNvZGVyPiBnZXQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KaW5kZXgg
NDQzM2IwMjIxN2MzMGFhZTIwODk2NzA4YTc0YWYyNTQ3MzVkMjM2OC4uYjRhMzM0NzQyZTYyN2Nh
MDQ5MTIxMDNlMmZhZGZjYzczMTI0N2YzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbW1hbmRfYnVmZmVyLm1tCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAKICNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVNDQVJEX0ZSQU1FQlVGRkVSCisjICAgIGlu
Y2x1ZGUgPHJhbmRvbT4KKyNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgi
CkBAIC02NSw2ICs2OCw3IEBAIG5hbWVzcGFjZQogICAgIFBST0MoU2V0VmlzaWJpbGl0eVJlc3Vs
dE1vZGUpICAgICAgICBcCiAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAg
IFwKICAgICBQUk9DKE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2UpICAgICAgXAorICAgIFBST0Mo
SW5zZXJ0RGVidWdzaWduKSAgICAgICAgICAgICAgICBcCiAgICAgUFJPQyhQdXNoRGVidWdHcm91
cCkgICAgICAgICAgICAgICAgIFwKICAgICBQUk9DKFBvcERlYnVnR3JvdXApCiAKQEAgLTg1LDQy
ICs4OSw0MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgogdm9pZCBTZXRSZW5kZXJQaXBlbGlu
ZVN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
IHsKLSAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CisgICAgYXV0byBzdGF0ZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CiAgICAgW3N0YXRlIEFOR0xFX01UTF9SRUxFQVNFXTsK
IH0KIAogdm9pZCBTZXRUcmlhbmdsZUZpbGxNb2RlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAg
TVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmdsZUZpbGxN
b2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJpYW5nbGVGaWxsTW9k
ZT4oKTsKICAgICBbZW5jb2RlciBzZXRUcmlhbmdsZUZpbGxNb2RlOm1vZGVdOwogfQogCiB2b2lk
IFNldEZyb250RmFjaW5nV2luZGluZ0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExXaW5kaW5nIHdpbmRpbmcgPSBzdHJlYW0tPmZldGNo
PE1UTFdpbmRpbmc+KCk7CisgICAgYXV0byB3aW5kaW5nID0gc3RyZWFtLT5mZXRjaDxNVExXaW5k
aW5nPigpOwogICAgIFtlbmNvZGVyIHNldEZyb250RmFjaW5nV2luZGluZzp3aW5kaW5nXTsKIH0K
IAogdm9pZCBTZXRDdWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTEN1bGxNb2Rl
IG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0
cmVhbS0+ZmV0Y2g8TVRMQ3VsbE1vZGU+KCk7CiAgICAgW2VuY29kZXIgc2V0Q3VsbE1vZGU6bW9k
ZV07CiB9CiAKIHZvaWQgU2V0RGVwdGhTdGVuY2lsU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsK
LSAgICBpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1U
TERlcHRoU3RlbmNpbFN0YXRlPj4oKTsKKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2ls
U3RhdGU6c3RhdGVdOwogICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQg
U2V0RGVwdGhCaWFzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgZmxvYXQgZGVwdGhCaWFzICA9
IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgc2xvcGVTY2FsZSA9IHN0cmVhbS0+
ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgY2xhbXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8Zmxv
YXQ+KCk7CisgICAgYXV0byBkZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAg
ICBhdXRvIHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGF1dG8gY2xh
bXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhC
aWFzOmRlcHRoQmlhcyBzbG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOwogfQogCkBA
IC0xMzQsMTMgKzEzOCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogCiB2b2lkIFNldFZp
ZXdwb3J0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMVmlld3BvcnQgdmlld3BvcnQgPSBz
dHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOworICAgIGF1dG8gdmlld3BvcnQgPSBzdHJlYW0t
PmZldGNoPE1UTFZpZXdwb3J0PigpOwogICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0
XTsKIH0KIAogdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1U
TFNjaXNzb3JSZWN0IHJlY3QgPSBzdHJlYW0tPmZldGNoPE1UTFNjaXNzb3JSZWN0PigpOworICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0U2Npc3NvclJlY3Q6cmVjdF07CiB9CiAKQEAgLTE1NSw5ICsxNTksOSBAQCB2b2lkIFNl
dEJsZW5kQ29sb3JDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVy
bWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFt
KQogewotICAgIGlkPE1UTEJ1ZmZlcj4gYnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZm
ZXI+PigpOwotICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisgICAgYXV0byBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7Cisg
ICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5k
ZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRWZXJ0ZXhC
dWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CiAgICAgW2J1ZmZlciBB
TkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0xNjUsMjYgKzE2OSwyNiBAQCB2b2lkIFNldFZlcnRl
eEJ1ZmZlckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZAogdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgPSBzdHJlYW0t
PmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAg
ICAgW2VuY29kZXIgc2V0VmVydGV4QnVmZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
IH0KIAogdm9pZCBTZXRWZXJ0ZXhCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIHNpemVf
dCBzaXplICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7Ci0gICAgY29uc3QgdWlu
dDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOwotICAgIHVpbnQzMl90IGluZGV4ICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHNpemUgID0gc3RyZWFt
LT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7
CisgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CiB9CiAK
IHZvaWQgU2V0VmVydGV4U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBz
dHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7Ci0gICAgZmxvYXQgbG9kTWluQ2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgbG9kTWF4Q2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgdWludDMyX3QgaW5kZXgg
ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBzdGF0ZSAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisgICAgZmxvYXQg
bG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGZsb2F0IGxvZE1heENs
YW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBhdXRvIGluZGV4ICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0
YXRlOnN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1w
CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1heENsYW1wOmxvZE1heENsYW1wCkBAIC0xOTUs
MTcgKzE5OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIAogdm9pZCBTZXRWZXJ0ZXhUZXh0dXJlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMVGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmluZGV4
XTsKICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQgU2V0RnJhZ21l
bnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9
IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICB1aW50MzJfdCBvZmZzZXQgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gYnVmZmVyID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CiAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJ
bmRleDppbmRleF07CiAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0yMTMs
MjYgKzIxNywyNiBAQCB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogdm9pZCBTZXRGcmFnbWVudEJ1
ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3Ry
ZWFtKQogewotICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
Ci0gICAgdWludDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBh
dXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBpbmRleCAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldEZyYWdtZW50QnVm
ZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKIH0KIAogdm9pZCBTZXRGcmFnbWVudEJ5
dGVzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJl
YW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICBjb25zdCB1aW50OF90ICpieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOworICAgIGF1dG8gc2l6ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAg
ICBhdXRvIGJ5dGVzID0gc3RyZWFtLT5mZXRjaChzaXplKTsKKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5
dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6aW5kZXhdOwogfQogCiB2b2lkIFNldEZyYWdtZW50U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8
TVRMU2FtcGxlclN0YXRlPj4oKTsKLSAgICBmbG9hdCBsb2RNaW5DbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICBmbG9hdCBsb2RNYXhDbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHN0YXRlICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRlPj4oKTsKKyAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZl
dGNoPGZsb2F0PigpOworICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1wCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKQEAgLTI0MiwyNiArMjQ2LDI2
IEBAIHZvaWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVu
Y29kZXI+IGVuY29kZXIsCiAKIHZvaWQgU2V0RnJhZ21lbnRUZXh0dXJlQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRM
VGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwog
ICAgIFtlbmNvZGVyIHNldEZyYWdtZW50VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5kZXhdOwog
ICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKIH0KIAogdm9pZCBEcmF3Q21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFt
LT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0ICAg
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4
Q291bnQgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHBy
aW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0
byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHZl
cnRleENvdW50ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQgdmVydGV4
Q291bnQ6dmVydGV4Q291bnRdOwogfQogCiB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKIHsKLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZl
dGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4U3RhcnQgICAgICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCB2ZXJ0ZXhDb3Vu
dCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IGlu
c3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworICAg
IGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGlu
c3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKICAgICAgICAgICAgICAgICB2ZXJ0ZXhTdGFydDp2
ZXJ0ZXhTdGFydAogICAgICAgICAgICAgICAgIHZlcnRleENvdW50OnZlcnRleENvdW50CkBAIC0y
NzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIERyYXdJbmRl
eGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVU
eXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IGlu
ZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+
ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291bnQgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAgICA9IHN0cmVhbS0+
ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNldCAgPSBzdHJlYW0t
PmZldGNoPHNpemVfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJp
bWl0aXZlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlwZQpAQCAtMjg1LDEy
ICsyODksMTIgQEAgdm9pZCBEcmF3SW5kZXhlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmUKIAogdm9pZCBEcmF3SW5kZXhlZElu
c3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJf
dCBpbmRleENvdW50ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAg
IE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhU
eXBlPigpOwotICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0ICAgICAgICAgICAg
PSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291
bnQgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNl
dCAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAgICBhdXRvIGluc3RhbmNlcyAgICAgPSBz
dHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0
aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50Omlu
ZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBlCkBA
IC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbwogdm9pZCBEcmF3SW5k
ZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXhDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90
IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAg
TVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRj
aDxpZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9
IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOwotICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgYmFzZVZlcnRl
eCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHByaW1p
dGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0byBp
bmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4
VHlwZSAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4VHlwZT4oKTsKKyAgICBhdXRvIGluZGV4
QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisgICAgYXV0byBidWZm
ZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBpbnN0YW5jZXMg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGJhc2VWZXJ0ZXggICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJp
bWl0aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50
OmluZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBl
CkBAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRl
eENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIHZvaWQgU2V0VmlzaWJp
bGl0eVJlc3VsdE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0g
KnN0cmVhbSkKIHsKLSAgICBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZSBtb2RlID0gc3RyZWFtLT5m
ZXRjaDxNVExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKLSAgICBzaXplX3Qgb2Zmc2V0ICAgICAg
ICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBtb2RlICAgPSBz
dHJlYW0tPmZldGNoPE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlPigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmlzaWJpbGl0eVJl
c3VsdE1vZGU6bW9kZSBvZmZzZXQ6b2Zmc2V0XTsKIH0KIAogdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFJlc291cmNlPiByZXNvdXJjZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVzb3VyY2U+PigpOwotICAgIE1UTFJlc291cmNlVXNhZ2UgdXNhZ2UgICA9
IHN0cmVhbS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsKLSAgICBtdGw6OlJlbmRlclN0YWdl
cyBzdGFnZXMgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgIGF1dG8g
cmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKyAgICBhdXRvIHVz
YWdlICAgID0gc3RyZWFtLT5mZXRjaDxNVExSZXNvdXJjZVVzYWdlPigpOworICAgIGF1dG8gc3Rh
Z2VzICAgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOwogICAgIEFOR0xFX1VO
VVNFRF9WQVJJQUJMRShzdGFnZXMpOwogI2lmIGRlZmluZWQoX19JUEhPTkVfMTNfMCkgfHwgZGVm
aW5lZChfX01BQ18xMF8xNSkKICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4x
NSwgMTMuMCwgMTMuMCkpCkBAIC0zNTEsOSArMzU1LDkgQEAgdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmUKIHZvaWQgTWVtb3J5QmFycmllcldpdGhSZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMUmVzb3VyY2U+IHJl
c291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7Ci0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKLSAg
ICBtdGw6OlJlbmRlclN0YWdlcyBiZWZvcmUgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3Rh
Z2VzPigpOworICAgIGF1dG8gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNl
Pj4oKTsKKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKKyAgICBhdXRvIGJlZm9yZSAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYWZ0ZXIpOwogICAgIEFOR0xFX1VOVVNF
RF9WQVJJQUJMRShiZWZvcmUpOwogI2lmIGRlZmluZWQoX19NQUNfMTBfMTQpICYmIChUQVJHRVRf
T1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkKQEAgLTM2OCw5ICszNzIsMTYgQEAgdm9p
ZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKK3ZvaWQg
SW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCit7CisgICAgYXV0byBsYWJlbCA9IHN0
cmVhbS0+ZmV0Y2g8TlNTdHJpbmcgKj4oKTsKKyAgICBbZW5jb2RlciBpbnNlcnREZWJ1Z1NpZ25w
b3N0OmxhYmVsXTsKKyAgICBbbGFiZWwgQU5HTEVfTVRMX1JFTEVBU0VdOworfQorCiB2b2lkIFB1
c2hEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0g
c3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgIGF1dG8gbGFiZWwgPSBzdHJlYW0tPmZl
dGNoPE5TU3RyaW5nICo+KCk7CiAgICAgW2VuY29kZXIgcHVzaERlYnVnR3JvdXA6bGFiZWxdOwog
ICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0zODgsNyArMzk5LDcgQEAgY29u
c3RleHByIENvbW1hbmRFbmNvZGVyRnVuYyBnQ29tbWFuZEVuY29kZXJzW10gPSB7QU5HTEVfTVRM
X0NNRF9YKEFOR0xFX01UTF9DTUQKIAogTlNTdHJpbmcgKmNwcExhYmVsVG9PYmpDKGNvbnN0IHN0
ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKKyAgICBhdXRvIGxhYmVsID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKICAgICBpZiAoIWxh
YmVsKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBzdHJpbmcgaXMg
bm90IGEgdmFsaWQgYXNjaWkgc3RyaW5nLgpAQCAtMzk2LDcgKzQwNyw2IEBAIE5TU3RyaW5nICpj
cHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQogICAgIH0KICAgICByZXR1
cm4gbGFiZWw7CiB9Ci0KIH0KIAogLy8gQ29tbWFuZFF1ZXVlIGltcGxlbWVudGF0aW9uCkBAIC01
NjUsMTEgKzU3NSwxMSBAQCBDb21tYW5kQnVmZmVyOjp+Q29tbWFuZEJ1ZmZlcigpCiAgICAgY2xl
YW51cCgpOwogfQogCi1ib29sIENvbW1hbmRCdWZmZXI6OnJlYWR5KCkgY29uc3QKK2Jvb2wgQ29t
bWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAogewogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsZyhtTG9jayk7CiAKLSAgICByZXR1cm4gcmVhZHlJbXBsKCk7CisgICAgcmV0dXJuIHZh
bGlkSW1wbCgpOwogfQogCiB2b2lkIENvbW1hbmRCdWZmZXI6OmNvbW1pdCgpCkBAIC01OTgsNyAr
NjA4LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpzZXRXcml0ZURlcGVuZGVuY3koY29uc3QgUmVz
b3VyY2VSZWYgJnJlc291cmNlKQogCiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxn
KG1Mb2NrKTsKIAotICAgIGlmICghcmVhZHlJbXBsKCkpCisgICAgaWYgKCF2YWxpZEltcGwoKSkK
ICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MjAsNyArNjMwLDcgQEAgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRSZWFkRGVwZW5kZW5jeShSZXNvdXJjZSAqcmVzb3VyY2UpCiAKICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOwogCi0gICAgaWYgKCFyZWFk
eUltcGwoKSkKKyAgICBpZiAoIXZhbGlkSW1wbCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6cmVzdGFydCgp
CiAgICAgQVNTRVJUKG1ldGFsQ21kQnVmZmVyKTsKIH0KIAotdm9pZCBDb21tYW5kQnVmZmVyOjpx
dWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRf
dCB2YWx1ZSkKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW5zZXJ0RGVidWdTaWduKGNvbnN0IHN0ZDo6
c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1M
b2NrKTsKLQotICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Ci0KLSAgICBpZiAobUFjdGl2ZUNvbW1h
bmRFbmNvZGVyICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgpID09IENvbW1hbmRF
bmNvZGVyOjpSRU5ERVIpCisgICAgbXRsOjpDb21tYW5kRW5jb2RlciAqY3VycmVudEVuY29kZXIg
PSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisgICAgaWYgKGN1cnJlbnRFbmNvZGVyKQogICAgIHsK
LSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVudCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBy
ZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcgdW50aWwgdGhlCi0gICAgICAgIC8vIHBhc3Mg
ZW5kLgotICAgICAgICBtUGVuZGluZ1NpZ25hbEV2ZW50cy5wdXNoX2JhY2soe2V2ZW50LCB2YWx1
ZX0pOworICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2VyKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOworICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICAg
ICBtUGVuZGluZ0RlYnVnU2lnbnMucHVzaF9iYWNrKG1hcmtlcik7CiAgICAgfQogfQogCi12b2lk
IENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRFdmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCit2b2lkIENvbW1hbmRCdWZmZXI6OnB1c2hEZWJ1Z0dy
b3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKLSAgICBBU1NFUlQocmVhZHlJbXBsKCkpOwotCi0gICAgd2Fp
dEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgIC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVu
dCB0aGlzCiB9CiAKLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCiB7
Ci0gICAgbURlYnVnR3JvdXBzLnB1c2hfYmFjayhtYXJrZXIpOworICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCit9CiAKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNp
Z25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAotICAgIGlmIChy
ZWFkeUltcGwoKSkKKyAgICBBU1NFUlQodmFsaWRJbXBsKCkpOworCisgICAgaWYgKG1BY3RpdmVD
b21tYW5kRW5jb2RlciAmJiBtQWN0aXZlQ29tbWFuZEVuY29kZXItPmdldFR5cGUoKSA9PSBDb21t
YW5kRW5jb2Rlcjo6UkVOREVSKQogICAgIHsKLSAgICAgICAgcHVzaERlYnVnR3JvdXBJbXBsKG1h
cmtlcik7CisgICAgICAgIC8vIFdlIGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBh
Y3RpdmUgcmVuZGVyIHBhc3MsIGRlZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRoZQorICAgICAgICAv
LyBwYXNzIGVuZC4KKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMucHVzaF9iYWNrKHtldmVu
dCwgdmFsdWV9KTsKICAgICB9Ci19Ci0KLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91
cCgpCi17Ci0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHkoKSkKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsKKyAgICAgICAgc2V0RXZlbnRJbXBsKGV2
ZW50LCB2YWx1ZSk7CiAgICAgfQorfQogCit2b2lkIENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRF
dmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAgICBBU1NFUlQo
dmFsaWRJbXBsKCkpOwogCi0gICAgaWYgKHJlYWR5SW1wbCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CiB9CiAKIC8qKiBw
cml2YXRlIHVzZSBvbmx5ICovCkBAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgQ29tbWFuZEJ1ZmZl
cjo6c2V0KGlkPE1UTENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKQogdm9pZCBDb21tYW5kQnVm
ZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5jb2RlcikKIHsK
ICAgICBtQWN0aXZlQ29tbWFuZEVuY29kZXIgPSBlbmNvZGVyOworICAgIGZvciAoYXV0byAmbWFy
a2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorICAgIHsKKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsYWJlbCA9IGNwcExhYmVsVG9PYmpD
KG1hcmtlcik7CisgICAgICAgICAgICBlbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOwor
ICAgICAgICB9CisgICAgfQorICAgIG1QZW5kaW5nRGVidWdTaWducy5jbGVhcigpOwogfQogCiB2
b2lkIENvbW1hbmRCdWZmZXI6OmludmFsaWRhdGVBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5k
RW5jb2RlciAqZW5jb2RlcikKQEAgLTcyOSw3ICs3NDgsNyBAQCB2b2lkIENvbW1hbmRCdWZmZXI6
OmNsZWFudXAoKQogICAgIFBhcmVudENsYXNzOjpzZXQobmlsKTsKIH0KIAotYm9vbCBDb21tYW5k
QnVmZmVyOjpyZWFkeUltcGwoKSBjb25zdAorYm9vbCBDb21tYW5kQnVmZmVyOjp2YWxpZEltcGwo
KSBjb25zdAogewogICAgIGlmICghUGFyZW50Q2xhc3M6OnZhbGlkKCkpCiAgICAgewpAQCAtNzQx
LDcgKzc2MCw3IEBAIGJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKIAogdm9p
ZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKIHsKLSAgICBpZiAoIXJlYWR5SW1wbCgpKQor
ICAgIGlmICghdmFsaWRJbXBsKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODg5LDYgKzkwOCwxNyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAg
ICBbZ2V0KCkgcG9wRGVidWdHcm91cF07CiB9CiAKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbihOU1N0cmluZyAqbGFiZWwpCit7CisgICAgaW5zZXJ0RGVidWdTaWduSW1wbChs
YWJlbCk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwoTlNT
dHJpbmcgKmxhYmVsKQoreworICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICBbZ2V0
KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07Cit9CisKIC8vIFJlbmRlckNvbW1hbmRFbmNv
ZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCiBSZW5kZXJDb21tYW5kRW5jb2RlclNoYWRl
clN0YXRlczo6UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXMoKQogewpAQCAtOTUxLDYg
Kzk4MSw5IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0KCkKICAgICB7
CiAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOwogICAgIH0KKworICAgIHZpc2liaWxpdHlS
ZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZURpc2FibGVkOworICAg
IHZpc2liaWxpdHlSZXN1bHRCdWZmZXJPZmZzZXQgPSAwOwogfQogCiAvLyBSZW5kZXJDb21tYW5k
RW5jb2RlciBpbXBsZW10YXRpb24KQEAgLTEwMTQsMTEgKzEwNDcsMTIgQEAgdm9pZCBSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6ZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oCiAgICAgewogICAgICAgICBp
ZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9u
U3RvcmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEUoaHFsZSk6IEN1cnJlbnRseSBp
ZiB0aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1wbGljaXQgTVMgdGV4dHVyZSBpcwotICAgICAgICAg
ICAgLy8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRv
IHN0b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKLSAgICAgICAgICAgIC8vIG1pZ2h0IGludHJv
ZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gQ29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBh
cyBvbmx5IHN0b3JlIHRoZQotICAgICAgICAgICAgLy8gTVMgdGV4dHVyZSwgYW5kIHJlc29sdmUg
b25seSBhdCB0aGUgZW5kIG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUg
aXMKLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisgICAgICAgICAgICAvLyBOT1RF
KGhxbGUpOiBDdXJyZW50bHkgaWYgdGhlIHN0b3JlIGFjdGlvbiB3aXRoIGltcGxpY2l0IE1TIHRl
eHR1cmUgaXMgTVRMU3RvcmVBY3Rpb24sCisgICAgICAgICAgICAvLyBpdCBpcyBhdXRvbWF0aWNh
bGx5IGNvbnZlcnQgdG8gc3RvcmUgYW5kIHJlc29sdmUgYWN0aW9uLiBJdCBtaWdodCBpbnRyb2R1
Y2UKKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorICAgICAgICAgICAgLy8g
Q29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBhcyBvbmx5IHN0b3JlIHRoZSBNUyB0ZXh0dXJl
LCBhbmQgcmVzb2x2ZSBvbmx5IGF0CisgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHJlYWwgcmVu
ZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUgd2FzIGludGVycnVwdGVkIGJ5IGNvbXB1dGUg
cGFzcykKKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBvcGVyYXRp
b24gc3RhcnRzLgogICAgICAgICAgICAgb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0
aW9uID0gTVRMU3RvcmVBY3Rpb25TdG9yZUFuZE11bHRpc2FtcGxlUmVzb2x2ZTsKICAgICAgICAg
fQogICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3RvcmVBY3Rpb24g
PT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKQEAgLTEwMzYsNiArMTA3MCwxMSBAQCB2b2lkIFJl
bmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbigKIH0KIAogdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQoreworICAgIGVuZEVuY29kaW5nSW1w
bCh0cnVlKTsKK30KKwordm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmdJbXBs
KGJvb2wgY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKIHsKICAgICBpZiAoIXZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQogICAgICAgICBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihv
YmpDUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CiAgICAgfQogCi0gICAgLy8g
VXBkYXRlIGRlcHRoIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVu
Y29kaW5nKCkKKyAgICAvLyBVcGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQo
KSBhbmQgZW5kRW5jb2RpbmcoKQogICAgIG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQuc3RvcmVBY3Rpb24gPSBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0
aW9uOwogICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0
aEF0dGFjaG1lbnQpOwogCi0gICAgLy8gVXBkYXRlIHN0ZW5jaWwgc3RvcmUgYWN0aW9uIHNldCBi
ZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorICAgIC8vIFVwZGF0ZSBzdG9yZSBh
Y3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygpCiAgICAgb2JqQ1Jl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uOwogICAgIGZpbmFsaXpl
TG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CkBA
IC0xMDc1LDI2ICsxMTE0LDc4IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVuY29k
aW5nKCkKIAogICAgIENvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZygpOwogCisjaWYgQU5HTEVf
TVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKyAgICBpZiAoY29uc2lkZXJEaXNjYXJk
U2ltdWxhdGlvbikKKyAgICB7CisgICAgICAgIHNpbXVsYXRlRGlzY2FyZEZyYW1lYnVmZmVyKCk7
CisgICAgfQorI2VuZGlmCisKICAgICAvLyByZXNldCBzdGF0ZQogICAgIG1SZW5kZXJQYXNzRGVz
YyA9IFJlbmRlclBhc3NEZXNjKCk7CiAgICAgbVN0YXRlQ2FjaGUucmVzZXQoKTsKIH0KIAotaW5s
aW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoCi0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZh
dHRhY2htZW50KQoraW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRXcml0ZURl
cGVuZGVuY3koY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBUZXh0dXJlUmVmIHRl
eHR1cmUgPSBhdHRhY2htZW50LnRleHR1cmU7CiAgICAgaWYgKHRleHR1cmUpCiAgICAgewogICAg
ICAgICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisgICAgfQorfQog
Ci0gICAgICAgIGNvbnN0IE1pcG1hcE5hdGl2ZUxldmVsICZtaXBMZXZlbCA9IGF0dGFjaG1lbnQu
bGV2ZWw7Cit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpzaW11bGF0ZURpc2NhcmRGcmFtZWJ1
ZmZlcigpCit7CisgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJh
dGlvbiBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVf
RElTQ0FSRF9GUkFNRUJVRkZFUgorICAgIHN0ZDo6cmFuZG9tX2RldmljZSByZDsgICAvLyBXaWxs
IGJlIHVzZWQgdG8gb2J0YWluIGEgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZW5naW5lCisg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKyAgICBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRp
b248ZmxvYXQ+IGRpcygwLjAsIDEuMGYpOworICAgIGJvb2wgaGFzRGlzY2FyZCA9IGZhbHNlOwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JBdHRh
Y2htZW50czsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0
dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSB0cnVlOworICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNo
bWVudHNbaV0ubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKyAgICAgICAgICAgIG1S
ZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQorICAgICAgICAg
ICAgICAgIE1UTENsZWFyQ29sb3JNYWtlKGRpcyhnZW4pLCBkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gPSBNVExMb2Fk
QWN0aW9uTG9hZDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoID0KLSAgICAgICAgICAgIHN0ZDo6bWluPE5TVUludGVnZXI+KG1SZW5k
ZXJQYXNzTWF4U2Npc3NvclJlY3Qud2lkdGgsIHRleHR1cmUtPndpZHRoKG1pcExldmVsKSk7Ci0g
ICAgICAgIG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0ID0KLSAgICAgICAgICAgIHN0
ZDo6bWluPE5TVUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0
dXJlLT5oZWlnaHQobWlwTGV2ZWwpKTsKKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0
YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAg
ICAgICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1ZTsK
KyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRM
TG9hZEFjdGlvbkNsZWFyOworICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50
LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlv
bkxvYWQ7CisgICAgfQorCisgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVu
dC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAgICAgICAg
aGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRydWU7Cisg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBN
VExMb2FkQWN0aW9uQ2xlYXI7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNo
bWVudC5jbGVhclN0ZW5jaWwgPSByYW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9h
ZEFjdGlvbkxvYWQ7CiAgICAgfQorCisgICAgaWYgKGhhc0Rpc2NhcmQpCisgICAgeworICAgICAg
ICBhdXRvIHRtcERlc2MgPSBtUmVuZGVyUGFzc0Rlc2M7CisgICAgICAgIHJlc3RhcnQodG1wRGVz
Yyk7CisgICAgICAgIGVuZEVuY29kaW5nSW1wbChmYWxzZSk7CisgICAgfQorI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgogfQogCiB2b2lkIFJlbmRlckNv
bW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQpAQCAtMTEwMiw3ICsxMTkzLDcgQEAg
dm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5jb2RlTWV0YWxFbmNvZGVyKCkKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgQU5HTEVfTVRMX0xPRygiQ3JlYXRpbmcg
bmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIgd2l0aCBkZXNjOiAlQCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgbUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQy5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgW21DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKIAogICAg
ICAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbWV0YWxDbWRFbmNvZGVyID0KICAgICAg
ICAgICAgIFtjbWRCdWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlw
dG9yOm1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakNdOwpAQCAtMTExMCw3ICsxMjAxLDExIEBAIHZv
aWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAgICAgICAgIHNl
dChtZXRhbENtZEVuY29kZXIpOwogCiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGl0IHdhcyBjcmVh
dGVkIHN1Y2Nlc3NmdWxseQotICAgICAgICBBU1NFUlQobWV0YWxDbWRFbmNvZGVyKTsKKyAgICAg
ICAgQVNTRVJUKGdldCgpKTsKKworICAgICAgICAvLyBXb3JrLWFyb3VuZCBkcml2ZXIgYnVnIG9u
IGlPUyBkZXZpY2VzOiBzdGVuY2lsIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gemVybworICAg
ICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5
IHplcm8uCisgICAgICAgIFttZXRhbENtZEVuY29kZXIgc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVl
OjBdOwogCiAgICAgICAgIGlmIChtTGFiZWwpCiAgICAgICAgIHsKQEAgLTExMTksNyArMTIxNCw3
IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAKICAg
ICAgICAgd2hpbGUgKG1Db21tYW5kcy5nb29kKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIENt
ZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNoPENtZFR5cGU+KCk7Cisg
ICAgICAgICAgICBhdXRvIGNtZFR5cGUgICAgICAgICAgICAgICA9IG1Db21tYW5kcy5mZXRjaDxD
bWRUeXBlPigpOwogICAgICAgICAgICAgQ29tbWFuZEVuY29kZXJGdW5jIGVuY29kZXIgPSBnQ29t
bWFuZEVuY29kZXJzW3N0YXRpY19jYXN0PGludD4oY21kVHlwZSldOwogICAgICAgICAgICAgZW5j
b2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOwogICAgICAgICB9CkBAIC0xMTQyLDQx
ICsxMjM3LDM0IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
cmVzdGFydChjb25zdCBSZW5kZXJQYXNzRGVzYyAmZGVzYykKICAgICAgICAgZW5kRW5jb2Rpbmco
KTsKICAgICB9CiAKLSAgICBpZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisgICAgaWYgKCFjbWRC
dWZmZXIoKS52YWxpZCgpKQogICAgIHsKICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIG1MYWJlbC5yZXNldCgpOworICAgIG1SZW5kZXJQYXNzRGVz
YyA9IGRlc2M7CisgICAgbVJlY29yZGluZyAgICAgID0gdHJ1ZTsKKyAgICBtSGFzRHJhd0NhbGxz
ICAgPSBmYWxzZTsKIAotICAgIG1SZW5kZXJQYXNzRGVzYyAgICAgICAgICAgPSBkZXNjOwotICAg
IG1SZWNvcmRpbmcgICAgICAgICAgICAgICAgPSB0cnVlOwotICAgIG1IYXNEcmF3Q2FsbHMgICAg
ICAgICAgICAgPSBmYWxzZTsKLSAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAg
ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnkgICAgICA9IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2lkdGggID0gc3RkOjpudW1lcmljX2xp
bWl0czxOU1VJbnRlZ2VyPjo6bWF4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuaGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OwotCi0g
ICAgLy8gU2V0IHdyaXRpbmcgZGVwZW5kZW5jeSAmIGNvbnN0cmFpbiB0aGUgc2Npc3NvciByZWN0
CisgICAgLy8gbWFzayB3cml0aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUg
b3B0aW9ucwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVt
Q29sb3JBdHRhY2htZW50czsgKytpKQogICAgIHsKLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0
ZURlcGVuZGVuY3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXSk7CisgICAgICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmNvbG9y
QXR0YWNobWVudHNbaV0udGV4dHVyZSgpKTsKICAgICB9CiAKLSAgICBpbml0QXR0YWNobWVudFdy
aXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQpOworICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlKCkpOwogCi0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQpOworICAgIGluaXRX
cml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUo
KSk7CiAKICAgICAvLyBDb252ZXJ0IHRvIE9iamVjdGl2ZS1DIGRlc2NyaXB0b3IKICAgICBtUmVu
ZGVyUGFzc0Rlc2MuY29udmVydFRvTWV0YWxEZXNjKG1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMp
OwogCi0gICAgLy8gVGhlIGFjdHVhbCBPYmplY3RpdmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRl
ZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBkbyBzbyBpbgotICAgIC8vIG9yZGVyIHRvIGJl
IGFibGUgdG8gc29ydCB0aGUgY29tbWFuZHMgb3IgZG8gdGhlIHByZXByb2Nlc3NpbmcgYmVmb3Jl
IHRoZSBhY3R1YWwKLSAgICAvLyBlbmNvZGluZy4KKyAgICAvLyBUaGUgYWN0dWFsIE9iamVjdGl2
ZS1DIGVuY29kZXIgd2lsbCBiZSBjcmVhdGVkIGxhdGVyIGluIGVuZEVuY29kaW5nKCksIHdlIGRv
IHNvIGluIG9yZGVyCisgICAgLy8gdG8gYmUgYWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBk
byB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUgdGhlIGFjdHVhbCBlbmNvZGluZy4KIAotICAgIC8v
IFNpbmNlIHdlIGRlZmVyIHRoZSBuYXRpdmUgZW5jb2RlciBjcmVhdGlvbiwgd2UgbmVlZCB0byBl
eHBsaWNpdGx5IHRlbGwgY29tbWFuZCBidWZmZXIKLSAgICAvLyB0aGF0IHRoaXMgb2JqZWN0IGlz
IHRoZSBhY3RpdmUgZW5jb2RlcjoKKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVu
Y29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVy
IHRoYXQKKyAgICAvLyB0aGlzIG9iamVjdCBpcyB0aGUgYWN0aXZlIGVuY29kZXI6CiAgICAgY21k
QnVmZmVyKCkuc2V0QWN0aXZlQ29tbWFuZEVuY29kZXIodGhpcyk7CiAKICAgICByZXR1cm4gKnRo
aXM7CkBAIC0xMzAyLDE2ICsxMzkwLDYgQEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpzZXRTY2lzc29yUmVjdChjb25zdCBNVExTY2lzc29yUmVjdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWShy
ZWN0LnggKyByZWN0LndpZHRoID4gbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0LmhlaWdodCA+IG1SZW5kZXJQYXNz
TWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIFdBUk4oKSA8PCAiT3V0IG9m
IGJvdW5kIHNjaXNzb3IgcmVjdCBkZXRlY3RlZCAiIDw8IHJlY3QueCA8PCAiICIgPDwgcmVjdC55
IDw8ICIgIgotICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0aCA8PCAiICIgPDwgcmVjdC5oZWln
aHQ7Ci0gICAgICAgIC8vIE91dCBvZiBib3VuZCByZWN0IHdpbGwgY3Jhc2ggdGhlIG1ldGFsIHJ1
bnRpbWUsIGlnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAgIG1T
dGF0ZUNhY2hlLnNjaXNzb3JSZWN0ID0gcmVjdDsKIAogICAgIG1Db21tYW5kcy5wdXNoKENtZFR5
cGU6OlNldFNjaXNzb3JSZWN0KS5wdXNoKHJlY3QpOwpAQCAtMTM4Myw3ICsxNDYxLDcgQEAgUmVu
ZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpjb21tb25TZXRCdWZmZXIo
Z2w6OlNoYWRlclR5cGUgc2hhZGUKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVu
dCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZzZXQgb25seS4KKyAgICAgICAgLy8gSWYgYnVm
ZmVyIGFscmVhZHkgYm91bmQgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldCwgdGhlbiB1cGRhdGUg
dGhlIG9mZmVyIG9ubHkuCiAgICAgICAgIHNoYWRlclN0YXRlcy5idWZmZXJPZmZzZXRzW2luZGV4
XSA9IG9mZnNldDsKIAogICAgICAgICBtQ29tbWFuZHMucHVzaChzdGF0aWNfY2FzdDxDbWRUeXBl
PihtU2V0QnVmZmVyT2Zmc2V0Q21kc1tzaGFkZXJUeXBlXSkpCkBAIC0xNDkwLDEyICsxNTY4LDYg
QEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3KE1UTFBy
aW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCkK
IHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkK
LSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVy
IHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotCiAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CiAgICAgbUNvbW1hbmRzLnB1c2go
Q21kVHlwZTo6RHJhdykucHVzaChwcmltaXRpdmVUeXBlKS5wdXNoKHZlcnRleFN0YXJ0KS5wdXNo
KHZlcnRleENvdW50KTsKIApAQCAtMTUwNywxMiArMTU3OSw2IEBAIFJlbmRlckNvbW1hbmRFbmNv
ZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
IHByaW1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKQogewot
ICAgIGlmIChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQotICAg
IHsKLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KICAgICBtSGFzRHJhd0NhbGxzID0gdHJ1ZTsKICAgICBtQ29tbWFuZHMucHVzaChDbWRU
eXBlOjpEcmF3SW5zdGFuY2VkKQogICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQpAQCAtMTUy
OSwxMyArMTU5NSw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6ZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAm
aW5kZXhCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCiB7Ci0gICAgaWYgKEFOR0xFX1VOTElL
RUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAgewotICAgICAgICAvLyBJZ25v
cmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBzZXQgcHJp
b3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5kZXhCdWZmZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTU2MCwxMyArMTYyMCw3IEBAIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luZGV4ZWRJbnN0YW5j
ZWQoTVRMUHJpbWl0aXZlVHlwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGluc3RhbmNlcykKIHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNh
Y2hlLnJlbmRlclBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwg
aWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFp
bmRleEJ1ZmZlcikpCisgICAgaWYgKCFpbmRleEJ1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CkBAIC0xNTk0LDEzICsxNjQ4LDcgQEAgUmVuZGVyQ29tbWFuZEVuY29k
ZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgo
CiAgICAgdWludDMyX3QgaW5zdGFuY2VzLAogICAgIHVpbnQzMl90IGJhc2VWZXJ0ZXgpCiB7Ci0g
ICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAg
ewotICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBl
bGluZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5k
ZXhCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
bWVtb3J5QmFycmllcldpdGhSZXNvdXJjZShjb25zdCBCdWZmCiAgICAgcmV0dXJuICp0aGlzOwog
fQogCit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ25JbXBsKE5TU3Ry
aW5nICpsYWJlbCkKK3sKKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVuZEVuY29k
aW5nKCkKKyAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpJbnNlcnREZWJ1Z3NpZ24pLnB1c2go
W2xhYmVsIEFOR0xFX01UTF9SRVRBSU5dKTsKK30KKwogdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6cHVzaERlYnVnR3JvdXAoTlNTdHJpbmcgKmxhYmVsKQogewogICAgIC8vIERlZmVyIHRoZSBp
bnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQpAQCAtMTc5OSw3ICsxODUzLDcgQEAgQmxpdENv
bW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnJlc3RhcnQoKQogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFk
eSgpKQorICAgICAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0xOTYyLDYgKzIw
MTYsNjYgQEAgQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OmZpbGxCdWZm
ZXIoY29uc3QgQnVmZmVyUmVmICZidWZmZXIsCiAgICAgcmV0dXJuICp0aGlzOwogfQogCitCbGl0
Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUoY29uc3QgVGV4
dHVyZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjU3RhcnRMZXZlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZXh0dXJlUmVmICZkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RTdGFydExldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHNsaWNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKK3sKKyAgICBpZiAoIXNyYyB8fCAhZHN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNtZEJ1ZmZlcigp
LnNldFJlYWREZXBlbmRlbmN5KHNyYyk7CisgICAgY21kQnVmZmVyKCkuc2V0V3JpdGVEZXBlbmRl
bmN5KGRzdCk7CisKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNf
MTBfMTUpCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEz
LjApKQorICAgIHsKKyAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c3JjU3RhcnRTbGljZQorICAgICAgICAgICAg
ICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgIHRv
VGV4dHVyZTpkc3QtPmdldCgpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U3Rh
cnRTbGljZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKyAg
ICAgICAgICAgICAgICAgICAgc2xpY2VDb3VudDpzbGljZUNvdW50CisgICAgICAgICAgICAgICAg
ICAgIGxldmVsQ291bnQ6bGV2ZWxDb3VudF07CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAg
IHsKKyAgICAgICAgTVRMT3JpZ2luIG9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoMCwgMCwgMCk7Cisg
ICAgICAgIGZvciAodWludDMyX3Qgc2xpY2UgPSAwOyBzbGljZSA8IHNsaWNlQ291bnQ7ICsrc2xp
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNlID0gc3JjU3RhcnRT
bGljZSArIHNsaWNlOworICAgICAgICAgICAgdWludDMyX3QgZHN0U2xpY2UgPSBkc3RTdGFydFNs
aWNlICsgc2xpY2U7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbENvdW50OyArK2xldmVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG10
bDo6TWlwbWFwTmF0aXZlTGV2ZWwgc3JjTGV2ZWwgPSBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKHNy
Y1N0YXJ0TGV2ZWwgKyBsZXZlbCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwg
PSBkc3RTdGFydExldmVsICsgbGV2ZWw7CisgICAgICAgICAgICAgICAgTVRMU2l6ZSBzcmNTaXpl
ID0KKyAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2Uoc3JjLT53aWR0aChzcmNMZXZlbCks
IHNyYy0+aGVpZ2h0KHNyY0xldmVsKSwgc3JjLT5kZXB0aChzcmNMZXZlbCkpOworCisgICAgICAg
ICAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzcmNTbGljZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlT3JpZ2luOm9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c3JjU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0
LT5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U2xpY2UK
KyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdExldmVsCisgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCiBCbGl0Q29tbWFuZEVu
Y29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKQEAgLTE5NzQsNyAr
MjA4OCw3IEBAIEJsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0
ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1cmVSCiAKICAgICByZXR1cm4gKnRoaXM7CiB9
Ci1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlcikKK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNv
ZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IEJ1ZmZlclJlZiAmYnVmZmVyKQogewogICAg
IGlmICghYnVmZmVyKQogICAgIHsKQEAgLTE5ODksNyArMjEwMyw3IEBAIEJsaXRDb21tYW5kRW5j
b2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVm
ZmVyKQogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQotQmxpdENvbW1hbmRFbmNvZGVyICZC
bGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoVGV4dHVyZSAqdGV4dHVyZSkK
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291
cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
IHsKQEAgLTIwMjgsNyArMjE0Miw3IEBAIENvbXB1dGVDb21tYW5kRW5jb2RlciAmQ29tcHV0ZUNv
bW1hbmRFbmNvZGVyOjpyZXN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKyAgICAgICAgaWYgKCFj
bWRCdWZmZXIoKS52YWxpZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXNldCgpOwogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKaW5k
ZXggOTdjY2I5M2Y5NmMyNmM0ZmZiOTY2OTkzZWZiYTQxYmEzZjE2ZjRmOC4uM2ZjNWUzOWQxNzhj
MDE0MGFhZTI3ODQ1MzcxMzlhOGQ0MWMwNmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oCkBAIC0yNyw5ICsyNywxOCBAQAogI2luY2x1ZGUgImxpYkFOR0xFL2FuZ2xldHlwZXMu
aCIKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKKyMgICAgaWYgIWRlZmluZWQoX19JUEhPTkVfMTFf
MCkKKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV8xMV8wIDExMDAwMAorIyAgICBlbmRpZgogIyAg
ICBpZiAhZGVmaW5lZChBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCkKICMgICAgICAgIGRlZmluZSBB
TkdMRV9JT1NfREVQTE9ZX1RBUkdFVCBfX0lQSE9ORV8xMV8wCiAjICAgIGVuZGlmCisjICAgIGlm
ICFkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisjICAgICAgICBkZWZp
bmUgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisjICAgIGVu
ZGlmCisjICAgIGlmICFkZWZpbmVkKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCkKKyMgICAg
ICAgIGRlZmluZSBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgX19JUEhPTkVfMTFfMAorIyAg
ICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCkBA
IC02Niw2ICs3NSw3IEBAIG5hbWVzcGFjZSBlZ2wKIHsKIGNsYXNzIERpc3BsYXk7CiBjbGFzcyBJ
bWFnZTsKK2NsYXNzIFN1cmZhY2U7CiB9ICAvLyBuYW1lc3BhY2UgZWdsCiAKICNkZWZpbmUgQU5H
TEVfR0xfT0JKRUNUU19YKFBST0MpIFwKQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJl
TXRsOwogY2xhc3MgUHJvZ3JhbU10bDsKIGNsYXNzIFNhbXBsZXJNdGw7CiBjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFja010bDsKK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKIAogQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCiAKQEAgLTEyOCw3ICsxMzksOCBA
QCBjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxv
YXQpOwogLy8gTWV0YWwgbGltaXRzCiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZl
cnMgICAgID0gMzE7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclNhbXBsZXJzICAgID0g
MTY7Ci1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAqIDEwMjQ7
Citjb25zdGV4cHIgc2l6ZV90IGtJbmxpbmVDb25zdERhdGFNYXhTaXplID0gNCAqIDEwMjQ7Citj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0RGF0
YU1heFNpemU7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAgICAgID0gMTsK
IAogY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQg
PSA0OwpAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBrSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OwogY29uc3RleHByIHVpbnQzMl90IGtBcmd1bWVudEJ1
ZmZlck9mZnNldEFsaWdubWVudCAgICA9IGtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFs
aWdubWVudDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGln
bm1lbnQgPSAyNTY7CiAKLS8vIEZyb250IGVuZCBiaW5kaW5nIGxpbWl0cworLy8gRm9udCBlbmQg
YmluZGluZyBsaW1pdHMKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmluZGluZ3Mg
PSAyICoga01heFNoYWRlclNhbXBsZXJzOwogY29uc3RleHByIHVpbnQzMl90IGtNYXhHTFVCT0Jp
bmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKIApAQCAtMTU1LDIxICsxNjcsMjMgQEAg
Y29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5k
aW5nSW5kZXhTdGFydCArIGtNYXhWZXIKIGNvbnN0ZXhwciB1aW50MzJfdCBrRHJpdmVyVW5pZm9y
bXNCaW5kaW5nSW5kZXggPSBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggKyAxOwogLy8gQmlu
ZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKIGNvbnN0ZXhwciB1aW50MzJfdCBrRGVm
YXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MzsKLS8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlciBvciBzdGFydGlu
ZyBkaXNjcmV0ZSBzbG90Ci1jb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmlu
ZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisvLyBCaW5kaW5n
IGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50
MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIHNoYWRvdyBzYW1wbGVycycgY29t
cGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVz
QmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKy8vIEJp
bmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlcgorY29uc3RleHByIHVpbnQzMl90
IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1v
ZGVzQmluZGluZ0luZGV4ICsgMTsKIAotY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0Fs
bCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2lsIGlzIHN1cHBvcnRlZAorY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0IHN0ZW5jaWwg
aXMgc3VwcG9ydGVkCiAKIC8vIFRoaXMgc3BlY2lhbCBjb25zdGFudCBpcyB1c2VkIHRvIGluZGlj
YXRlIHRoYXQgYSBwYXJ0aWN1bGFyIHZlcnRleCBkZXNjcmlwdG9yJ3MgYnVmZmVyIGxheW91dAog
Ly8gaW5kZXggaXMgdW51c2VkLgogY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVy
dGV4U3RlcEZ1bmN0aW9uSW52YWxpZCA9CiAgICAgc3RhdGljX2Nhc3Q8TVRMVmVydGV4U3RlcEZ1
bmN0aW9uPigweGZmKTsKIAotY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsK
LQotY29uc3RleHByIHNpemVfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKK2NvbnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKIAot
Y29uc3RleHByIGdsOjpWZXJzaW9uIGtNYXhTdXBwb3J0ZWRHTFZlcnNpb24gPSBnbDo6VmVyc2lv
bigzLCAwKTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0g
c2l6ZW9mKHVpbnQ2NF90KTsKIAogLy8gV29yay1hcm91bmQgdGhlIGVudW0gaXMgbm90IGF2YWls
YWJsZSBvbiBtYWNPUwogI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNU
CkBAIC0xNzksMTMgKzE5MywxMSBAQCBjb25zdGV4cHIgTVRMQmxpdE9wdGlvbiBrQmxpdE9wdGlv
blJvd0xpbmVhclBWUlRDICAgICAgICAgID0gTVRMQmxpdE9wdGlvblJvd0xpbgogI2VuZGlmCiAK
ICNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCi0jICAg
IGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMQogdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CiB1c2luZyBSZW5kZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTVRMUmVu
ZGVyU3RhZ2VzOwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXgg
ICA9IE1UTFJlbmRlclN0YWdlVmVydGV4OwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVu
ZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CiAjZWxzZQotIyAgICBk
ZWZpbmUgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFIDAKIHVzaW5nIFRleHR1cmVTd2l6emxl
Q2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CiB1c2luZyBSZW5k
ZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaW50Owog
Y29uc3RleHByIFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICAgICAgICAgICAgICAg
ICA9IDE7CkBAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpE
aXNwbGF5PgogewogICAgIHVzaW5nIEltcGxUeXBlID0gRGlzcGxheU10bDsKIH07Ci0KK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNlPgoreworICAgIHVzaW5n
IEltcGxUeXBlID0gU3VyZmFjZU10bFByb3RvY29sOworfTsKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgogdXNpbmcgR2V0SW1wbFR5cGUgPSB0eXBlbmFtZSBJbXBsVHlwZUhlbHBlcjxUPjo6SW1wbFR5
cGU7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29u
c3QgVCAqX05vbm51bGwgZ2xPYmplY3QpCitHZXRJbXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBU
ICpnbE9iamVjdCkKIHsKICAgICByZXR1cm4gR2V0SW1wbEFzPEdldEltcGxUeXBlPFQ+PihnbE9i
amVjdCk7CiB9CkBAIC0zNDYsMjEgKzM2MiwxNiBAQCB1c2luZyBBdXRvT2JqQ09iaiA9IEF1dG9P
YmpDUHRyPFQgKj47CiAKIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24g
aU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKICNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRl
ZmluZWQoX19NQUNfMTBfMTQpCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxF
IDEKIHVzaW5nIFNoYXJlZEV2ZW50UmVmID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+
PjsKICNlbHNlCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFIDAKIHVzaW5n
IFNoYXJlZEV2ZW50UmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBB
dXRvT2JqQ09iajxOU09iamVjdD47CiAjZW5kaWYKIAogLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRl
eCB1c2VkIGJ5IE1ldGFsIGJhY2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1p
cG1hcCBsZXZlbCBpbnN0ZWFkCiAvLyBvZiAidmlydHVhbCIgbGV2ZWwgbW9kaWZpZWQgYnkgT3Bl
bkdMJ3MgYmFzZSBsZXZlbC4KIHVzaW5nIE1pcG1hcE5hdGl2ZUxldmVsID0gZ2w6OkxldmVsSW5k
ZXhXcmFwcGVyPHVpbnQzMl90PjsKLQogY29uc3RleHByIE1pcG1hcE5hdGl2ZUxldmVsIGtaZXJv
TmF0aXZlTWlwTGV2ZWwoMCk7Ci0KIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleCBmaW5hbAogewogICBwdWJsaWM6CkBAIC0zNzAsNTUgKzM4
MSw0MiBAQCBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4IGZpbmFsCiAgICAgICAgIG1OYXRpdmVJbmRl
eCA9IGdsOjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExl
dmVsSW5kZXgoKSAtIGJhc2VMZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0TGF5ZXJJbmRleCgpLCBzcmMuZ2V0TGF5ZXJDb3Vu
dCgpKTsKICAgICB9Ci0KICAgICBzdGF0aWMgSW1hZ2VOYXRpdmVJbmRleCBGcm9tQmFzZVplcm9H
TEluZGV4KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZzcmMpCiAgICAgewogICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOwogICAgIH0KLQogICAgIE1pcG1hcE5hdGl2ZUxldmVs
IGdldE5hdGl2ZUxldmVsKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBNaXBtYXBOYXRp
dmVMZXZlbChtTmF0aXZlSW5kZXguZ2V0TGV2ZWxJbmRleCgpKTsKICAgICB9Ci0KICAgICBnbDo6
VGV4dHVyZVR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRUeXBl
KCk7IH0KICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUlu
ZGV4LmdldExheWVySW5kZXgoKTsgfQogICAgIEdMaW50IGdldExheWVyQ291bnQoKSBjb25zdCB7
IHJldHVybiBtTmF0aXZlSW5kZXguZ2V0TGF5ZXJDb3VudCgpOyB9CiAgICAgR0xpbnQgY3ViZU1h
cEZhY2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5jdWJlTWFwRmFjZUluZGV4
KCk7IH0KLQogICAgIGJvb2wgaXNMYXllcmVkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmlzTGF5ZXJlZCgpOyB9CiAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleC5oYXNMYXllcigpOyB9CiAgICAgYm9vbCBoYXMzRExheWVyKCkgY29uc3QgeyByZXR1
cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQogICAgIGJvb2wgdXNlc1RleDNEKCkgY29u
c3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnVzZXNUZXgzRCgpOyB9Ci0KICAgICBib29sIHZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7IH0KLQogICAgIEltYWdlTmF0
aXZlSW5kZXhJdGVyYXRvciBnZXRMYXllckl0ZXJhdG9yKEdMaW50IGxheWVyQ291bnQpIGNvbnN0
OwotCiAgIHByaXZhdGU6CiAgICAgZ2w6OkltYWdlSW5kZXggbU5hdGl2ZUluZGV4OwogfTsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGZpbmFsCiB7CiAgIHB1YmxpYzoKICAgICBJ
bWFnZU5hdGl2ZUluZGV4IG5leHQoKSB7IHJldHVybiBJbWFnZU5hdGl2ZUluZGV4KG1OYXRpdmVJ
bmRleEl0ZS5uZXh0KCksIDApOyB9CiAgICAgSW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29u
c3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAw
KTsgfQogICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleEl0ZS5o
YXNOZXh0KCk7IH0KLQogICBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3MgaXMgb25seSBjb25z
dHJ1Y3RhYmxlIGZyb20gSW1hZ2VOYXRpdmVJbmRleAogICAgIGZyaWVuZCBjbGFzcyBJbWFnZU5h
dGl2ZUluZGV4OwotCiAgICAgZXhwbGljaXQgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yKGNvbnN0
IGdsOjpJbWFnZUluZGV4SXRlcmF0b3IgJmJhc2VaZXJvU3JjKQogICAgICAgICA6IG1OYXRpdmVJ
bmRleEl0ZShiYXNlWmVyb1NyYykKICAgICB7fQotCiAgICAgZ2w6OkltYWdlSW5kZXhJdGVyYXRv
ciBtTmF0aXZlSW5kZXhJdGU7CiB9OwotCiB1c2luZyBDbGVhckNvbG9yVmFsdWVCeXRlcyA9IHN0
ZDo6YXJyYXk8dWludDhfdCwgNCAqIHNpemVvZihmbG9hdCk+OwotCiBjbGFzcyBDbGVhckNvbG9y
VmFsdWUKIHsKICAgcHVibGljOgpAQCAtNDM3LDIyICs0MzUsMTUgQEAgY2xhc3MgQ2xlYXJDb2xv
clZhbHVlCiAgICAgY29uc3RleHByIENsZWFyQ29sb3JWYWx1ZShjb25zdCBDbGVhckNvbG9yVmFs
dWUgJnNyYykKICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZh
bHVlQnl0ZXMpCiAgICAge30KLQogICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkg
Y29uc3Q7Ci0KICAgICBQaXhlbFR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9
Ci0KICAgICBjb25zdCBDbGVhckNvbG9yVmFsdWVCeXRlcyAmZ2V0VmFsdWVCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1WYWx1ZUJ5dGVzOyB9Ci0KICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJhdG9y
PShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7Ci0KICAgICB2b2lkIHNldEFzRmxvYXQoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiAgICAgdm9pZCBzZXRBc0ludChpbnQz
Ml90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOwogICAgIHZvaWQgc2V0QXNV
SW50KHVpbnQzMl90IHIsIHVpbnQzMl90IGcsIHVpbnQzMl90IGIsIHVpbnQzMl90IGEpOwotCiAg
IHByaXZhdGU6CiAgICAgUGl4ZWxUeXBlIG1UeXBlOwotCiAgICAgdW5pb24KICAgICB7CiAgICAg
ICAgIHN0cnVjdApAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQogICAg
ICAgICB7CiAgICAgICAgICAgICB1aW50MzJfdCBtUmVkVSwgbUdyZWVuVSwgbUJsdWVVLCBtQWxw
aGFVOwogICAgICAgICB9OwotCiAgICAgICAgIENsZWFyQ29sb3JWYWx1ZUJ5dGVzIG1WYWx1ZUJ5
dGVzOwogICAgIH07CiB9OwpAQCAtNDgzLDcgKzQ3Myw3IEBAIGNsYXNzIEVycm9ySGFuZGxlcgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGxpbmUpID0gMDsKQEAgLTQ5Myw3ICs0ODMsNyBAQCBjbGFzcyBDb250ZXh0IDog
cHVibGljIEVycm9ySGFuZGxlcgogewogICBwdWJsaWM6CiAgICAgQ29udGV4dChEaXNwbGF5TXRs
ICpkaXNwbGF5TXRsKTsKLSAgICBfTnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmlj
ZSgpIGNvbnN0OworICAgIGlkPE1UTERldmljZT4gZ2V0TWV0YWxEZXZpY2UoKSBjb25zdDsKICAg
ICBtdGw6OkNvbW1hbmRRdWV1ZSAmY21kUXVldWUoKTsKIAogICAgIERpc3BsYXlNdGwgKmdldERp
c3BsYXkoKSBjb25zdCB7IHJldHVybiBtRGlzcGxheTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIwYjJjZGY3NDRlNjQ2NDExZjlkOGJmYjc5YWQy
ZDIxNzcwMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKQEAgLTAsMCArMSw3MyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIG10bF9jb21tb24uaDoKKy8vICAgICAgRGVjbGFyZXMgbnVtZXJpY2Fs
IGNvbnN0YW50cyB1c2VkIGluIE1ldGFsLgorLy8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xh
c3MuCisvLworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNf
SAorI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExfQ09OU1RBTlRTX0gKKyNpbmNs
dWRlICJsaWJBTkdMRS9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvYW5nbGV0eXBlcy5oIgorCituYW1lc3BhY2UgcngKK3sKK25h
bWVzcGFjZSBtdGwKK3sKKworLy8gTk9URShocWxlKTogc3VwcG9ydCB2YXJpYWJsZSBtYXggbnVt
YmVyIG9mIHZlcnRleCBhdHRyaWJ1dGVzCitjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0
dHJpYnMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworLy8gTk9URShocWxlKTogc3VwcG9ydCB2
YXJpYWJsZSBtYXggbnVtYmVyIG9mIHJlbmRlciB0YXJnZXRzCitjb25zdGV4cHIgdWludDMyX3Qg
a01heFJlbmRlclRhcmdldHMgPSA0OworCitjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclVC
T3MgPSAxMjsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4VUJPU2l6ZSAgICA9IDE2Mzg0OworCitj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxvYXQp
OworCisvLyBNZXRhbCBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyQnVmZmVy
cyAgICAgPSAzMTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMgICAgPSAx
NjsKK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
K2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5lQ29uc3RE
YXRhTWF4U2l6ZTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4Vmlld3BvcnRzICAgICAgICAgPSAx
OworCitjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVu
dCA9IDQ7CisvLyBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIG9mZnNldCBwYXNzZWQgdG8gc2V0
VmVydGV4fEZyYWdtZW50QnVmZmVyCisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZzZXRN
aW5BbGlnbm1lbnQgPSAyNTY7CisjZWxzZQorY29uc3RleHByIHVpbnQzMl90IGtVbmlmb3JtQnVm
ZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisjZW5kaWYKK2NvbnN0ZXhwciB1aW50
MzJfdCBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworY29uc3RleHByIHVp
bnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKworLy8gRm9u
dCBlbmQgYmluZGluZyBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmlu
ZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworY29uc3RleHByIHVpbnQzMl90IGtNYXhH
TFVCT0JpbmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKKworLy8gQmluZGluZyBpbmRl
eCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKK2NvbnN0ZXhwciB1aW50MzJfdCBrVmJv
QmluZGluZ0luZGV4U3RhcnQgPSAwOworCisvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IGF0
dHJpYnV0ZSBidWZmZXI6Citjb25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRBdHRyaWJzQmluZGlu
Z0luZGV4ID0ga1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsga01heFZlcnRleEF0dHJpYnM7CisvLyBC
aW5kaW5nIGluZGV4IGZvciBkcml2ZXIgdW5pZm9ybXM6Citjb25zdGV4cHIgdWludDMyX3Qga0Ry
aXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRlZmF1bHQgdW5pZm9ybXM6Citjb25zdGV4cHIgdWlu
dDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRp
bmdJbmRleCArIDM7CisvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVm
ZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5k
ZXggPSBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXgg
Zm9yIHNoYWRvdyBzYW1wbGVycycgY29tcGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtT
aGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNr
QmluZGluZ0luZGV4ICsgNDsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1
ZmZlcgorY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9
IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKKworY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2ls
IGlzIHN1cHBvcnRlZAorCit9ICAvLyBuYW1lc3BhY2UgbXRsCit9ICAvLyBuYW1lc3BhY2UgcngK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgppbmRl
eCA0YTEyYTkwNzU5YmE5NjUzMzI5ODc2MDE3Nzg2ZTZiZWRjNGRiYjNlLi4yZGE3NDIxYzUxM2Qz
NzAyNDQxMDQ1YTAzMzlmNjFiMTIyYjJlN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF9tYXAuanNvbgpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgICAgICAiRDMy
X0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0IiwKICAgICAgICAgICAgICJTOF9V
SU5UIjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAogICAgICAgICAgICAgIkQzMl9GTE9BVF9T
OFgyNF9VSU5UIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4IiwKLSAgICAg
ICAgICAgICJCMTBHMTBSMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybSIs
CiAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKICAgICAgICAgICAgICJSMTBHMTBCMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdFJH
QjEwQTJVbm9ybSIsCiAgICAgICAgICAgICAiUjExRzExQjEwX0ZMT0FUIjogIk1UTFBpeGVsRm9y
bWF0UkcxMUIxMEZsb2F0IiwKLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAiTVRM
UGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKyAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAi
OiAiTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIsCisgICAgICAgICAgICAiRDE2X1VOT1JNIjog
Ik1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtIgogICAgICAgICB9LAogICAgICAgICAibWFwX2lv
cyI6IHsKICAgICAgICAgICAgICJSNUc2QjVfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRCNUc2UjVV
bm9ybSIsCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICAgICAgICAiUFZSVEMxX1JHQl80QlBQX1VO
T1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUF9zUkdCIiwKICAg
ICAgICAgICAgICJQVlJUQzFfUkdCQV8yQlBQX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiIsCiAgICAgICAgICAgICAiUFZSVEMxX1JHQkFfNEJQ
UF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQX3NSR0Ii
LAorICAgICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
RVRDMl9SR0I4IiwKICAgICAgICAgICAgICJFVEMyX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVUQzJfUkdCOCIsCiAgICAgICAgICAgICAiRVRDMl9SOEc4QjhfU1JHQl9CTE9D
SyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKICAgICAgICAgICAgICJFVEMyX1I4
RzhCOEExX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTEiLApAQCAtMTAw
LDM5ICsxMDEsMzggQEAKICAgICAgICAgICAgICJFVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCiAgICAgICAgICAgICAiRUFDX1IxMV9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSIsCiAgICAgICAgICAgICAiRUFD
X1IxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFTbm9ybSIsCi0gICAgICAg
ICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5v
cm0iLAorICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRFQUNfUjExVW5vcm0iLAogICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtIiwKLSAgICAgICAgICAgICJBU1RDXzR4NF9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIsCi0gICAgICAgICAgICAiQVNU
Q180eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X3NSR0IiLAotICAgICAg
ICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERS
IiwKLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q181eDRfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ181eDVfVU5PUk1fQkxPQ0siOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzV4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfNXg1X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzZ4NV9V
Tk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCi0gICAgICAgICAgICAi
QVNUQ182eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAotICAg
ICAgICAgICAgIkFTVENfNng2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZf
TERSIiwKLSAgICAgICAgICAgICJBU1RDXzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfOHg1X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzh4
Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCi0gICAgICAgICAg
ICAiQVNUQ184eDZfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X3NSR0IiLAot
ICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184
eDhfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ184eDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1NS
R0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiIsCi0gICAgICAgICAgICAi
QVNUQ18xMHg2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCi0g
ICAgICAgICAgICAiQVNUQ18xMHg2X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg4X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHgx
MF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfTERSIiwKLSAgICAgICAg
ICAgICJBU1RDXzEweDEwX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NS
R0IiLAotICAgICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEyeDEwX0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMngxMF9TUkdCX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzEyeDEy
X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIiLAotICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIKKyAgICAgICAgICAgICJBU1RDXzR4NF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfNHg0X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfNXg0X1NSR0JfQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzZ4
NV9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfNng2X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIs
CisgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzh4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhl
bEZvcm1hdEFTVENfOHg2X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfOHg4X1NSR0JfQkxPQ0si
IDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHg1
X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfMTB4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9zUkdC
IiwKKyAgICAgICAgICAgICJBU1RDXzEweDhfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzEweDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NLIiA6ICJN
VExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMngxMF9T
UkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCisgICAgICAgICAg
ICAiQVNUQ18xMngxMl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIsCisgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ180eDRfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzV4NF9VTk9STV9CTE9DSyIgOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorICAgICAgICAgICAgIkFTVENfNXg1X1VOT1JNX0JM
T0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ182
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzZ4Nl9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIi
LAorICAgICAgICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzh4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4
NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xE
UiIsCisgICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxPQ0siIDog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTJ4MTBf
VU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIiLAorICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9M
RFIiCiAgICAgICAgIH0sCiAgICAgICAgICJtYXBfbWFjIjogewotICAgICAgICAgICAgIkQxNl9V
Tk9STSI6ICJNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybSIsCiAgICAgICAgICAgICAiRDI0X1VO
T1JNX1M4X1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDI0VW5vcm1fU3RlbmNpbDgiLAogICAg
ICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEi
LAogICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRCQzFfUkdCQV9zUkdCIiwKQEAgLTE3NSw5ICsxNzUsNyBAQAogICAgICAgICAgICAgIkQzMl9V
Tk9STSI6ICJEMzJfRkxPQVQiCiAgICAgICAgIH0sCiAgICAgICAgICJvdmVycmlkZV9pb3MiOiB7
Ci0gICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQi
LAotICAgICAgICAgICAgIkQxNl9VTk9STSI6ICJEMzJfRkxPQVQiLAotICAgICAgICAgICAgIkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLIgorICAgICAg
ICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgogICAgICAg
ICB9LAogICAgICAgICAib3ZlcnJpZGVfbWFjIjogewogICAgICAgICAgICAgIlI1RzZCNV9VTk9S
TSI6ICJSOEc4QjhBOF9VTk9STSIsCkBAIC0yMDMsNyArMjAxLDggQEAKICAgICAgICAgICAgICJF
QUNfUjExRzExX1VOT1JNX0JMT0NLIjogIlIxNkcxNl9VTk9STSIsCiAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJSMTZHMTZfU05PUk0iCiAgICAgICAgIH0sCi0gICAgICAg
ICJkMjRzOF9mYWxsYmFja3NfbWFjIjogeworICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKyAg
ICAgICAgICAgICJCOEc4UjhBOF9VTk9STSI6ICJSOEc4QjhBOF9VTk9STSIsCiAgICAgICAgICAg
ICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiCiAgICAgICAgIH0s
CiAgICAgICAgICJjYXBzIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0KaW5kZXggYzIxYzU5M2YyMjg4NWY1ODk2ODlhNTA5Nzk3
OTgxYzZiYmI4NDNjNC4uNmUyNjk0ZTdmN2FjYjU5ODk0MDBiMjYzNTA1NDExNzBhYWYzOWY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9hdXRv
Z2VuLm1tCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvRm9y
bWF0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgog
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCIKLQor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIgogdXNpbmcgbmFt
ZXNwYWNlIGFuZ2xlOwogCiBuYW1lc3BhY2UgcngKQEAgLTI3LDggKzI3LDcgQEAgbmFtZXNwYWNl
IG10bAogCiB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmds
ZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiB7Ci0gICAgdGhpcy0+aW50ZW5kZWRGb3Jt
YXRJZCA9IGludGVuZGVkRm9ybWF0SWRfOwotCisgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCAg
ICA9IGludGVuZGVkRm9ybWF0SWRfOwogICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBk
aXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwogCiAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KQEAg
LTQzLDE1ICs0MiwyNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNw
bGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlz
LT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBh
bmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNOgorI2lmIFRBUkdFVF9PU19PU1ggfHwg
VEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpCOEc4
UjhBOF9VTk9STToKIAotICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhl
bEZvcm1hdEJHUjEwQTJVbm9ybTsKLSAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0g
YW5nbGU6OkZvcm1hdElEOjpCMTBHMTBSMTBBMl9VTk9STTsKLSAgICAgICAgICAgIHRoaXMtPmlu
aXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0
aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybTsK
KyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6
QjhHOFI4QThfVU5PUk07CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBu
dWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRSR0JB
OFVub3JtOworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZv
cm1hdElEOjpSOEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rp
b24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHRoaXMtPnN3aXp6
bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAorI2Vsc2UgIC8vIFRBUkdFVF9PU19P
U1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElE
OjpCOEc4UjhBOF9VTk9STToKIAogICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBN
VExQaXhlbEZvcm1hdEJHUkE4VW5vcm07CkBAIC02MSw2ICs3MSw3IEBAIHZvaWQgRm9ybWF0Ojpp
bml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZv
cm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAg
ICBicmVhazsKIAorI2VuZGlmICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk1fU1JHQjoK
IAogICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm1fc1JHQjsKQEAgLTcwLDYgKzgxLDM2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERp
c3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAg
ICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAor
I2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgICAgIGNhc2Ug
YW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk06CisKKyAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9y
bWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAgICAgICAgICB0aGlzLT5h
Y3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOworICAgICAgICAgICAg
dGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworCisgICAgICAgICAgICB0aGlzLT5zd2l6
emxlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisKKyNlbHNlICAvLyBUQVJHRVRfT1Nf
T1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJ
RDo6RDE2X1VOT1JNOgorCisgICAgICAgICAgICBpZiAoU3VwcG9ydHNJT1NHUFVGYW1pbHkobWV0
YWxEZXZpY2UsIDMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFs
Rm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAgICAgICAgICAgICAg
dGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAg
ICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOwor
ICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworCisjZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFM
WVNUCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6CiAKICAgICAgICAg
ICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQ7CkBA
IC04MTUsMTUgKzg1Niw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRp
c3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRo
aXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNl
IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZv
cm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOwotICAgICAgICAgICAgdGhpcy0+
YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKLSAgICAgICAgICAg
IHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dp
enpsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAgICAgaWYgKG1ldGFsRGV2
aWNlLmRlcHRoMjRTdGVuY2lsOFBpeGVsRm9ybWF0U3VwcG9ydGVkICYmCkBAIC0xMjgxLDcgKzEz
MTMsNyBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmds
ZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAKICAgICAgICAgY2FzZSBhbmdsZTo6Rm9y
bWF0SUQ6OkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6CiAKLSAgICAgICAgICAgIHRoaXMtPm1ldGFs
Rm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtOworICAgICAgICAgICAgdGhp
cy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybTsKICAgICAgICAg
ICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VO
T1JNX0JMT0NLOwogICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOwog
CkBAIC0xMzA2LDYgKzEzMzgsMTUgQEAgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10
bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAg
ICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
IGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzoKKworICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVUQzJfUkdCODsKKyAg
ICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4
RzhCOF9VTk9STV9CTE9DSzsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVs
bHB0cjsKKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOEExX1NS
R0JfQkxPQ0s6CiAKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxG
b3JtYXRFVEMyX1JHQjhBMV9zUkdCOwpAQCAtMTQ1OSwxNSArMTUwMCw2IEBAIHZvaWQgRm9ybWF0
Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRl
ZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgot
Ci0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgz
MkZsb2F0OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0
SUQ6OkQzMl9GTE9BVDsKLSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0
cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoK
IAogICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdF9TdGVuY2lsODsKQEAgLTE0NzcsMTUgKzE1MDksNiBAQCB2b2lkIEZvcm1hdDo6aW5p
dChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3Jt
YXRJZF8pCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JN
X0JMT0NLOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9y
bWF0RVRDMl9SR0I4OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6
Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLOwotICAgICAgICAgICAgdGhpcy0+aW5p
dEZ1bmN0aW9uICAgPSBudWxscHRyOwotCi0gICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZh
bHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0KICNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBU
QVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHRoaXMt
Pm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgKaW5kZXggYmJiMjdkNGZlZWQ0YzA2N2FmYWY3MjY3
MWU3NmJmNGE0N2E1NTMwOS4uZjM5NjgxZDNhOGM2NzkzYzg0ZjViNTI0MTg2YmM4ZGIwODcxZGEx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCkBAIC00OCwx
MyArNDgsMTggQEAgc3RydWN0IEZvcm1hdENhcHMKIHsKICAgICBib29sIGlzUmVuZGVyYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGNvbG9yUmVuZGVyYWJsZSB8fCBkZXB0aFJlbmRlcmFibGU7IH0KIAot
ICAgIGJvb2wgZmlsdGVyYWJsZSAgICAgID0gZmFsc2U7Ci0gICAgYm9vbCB3cml0YWJsZSAgICAg
ICAgPSBmYWxzZTsKLSAgICBib29sIGNvbG9yUmVuZGVyYWJsZSA9IGZhbHNlOwotICAgIGJvb2wg
ZGVwdGhSZW5kZXJhYmxlID0gZmFsc2U7Ci0gICAgYm9vbCBibGVuZGFibGUgICAgICAgPSBmYWxz
ZTsKLSAgICBib29sIG11bHRpc2FtcGxlICAgICA9IGZhbHNlOyAgLy8gY2FuIGJlIHVzZWQgYXMg
TVNBQSB0YXJnZXQKLSAgICBib29sIHJlc29sdmUgICAgICAgICA9IGZhbHNlOyAgLy8gQ2FuIGJl
IHVzZWQgYXMgcmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGZpbHRlcmFibGUgICAgICAgICAgID0g
ZmFsc2U7CisgICAgYm9vbCB3cml0YWJsZSAgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wg
Y29sb3JSZW5kZXJhYmxlICAgICAgPSBmYWxzZTsKKyAgICBib29sIGRlcHRoUmVuZGVyYWJsZSAg
ICAgID0gZmFsc2U7CisgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAg
IGJvb2wgbXVsdGlzYW1wbGUgICAgICAgICAgPSBmYWxzZTsgIC8vIGNhbiBiZSB1c2VkIGFzIE1T
QUEgdGFyZ2V0CisgICAgYm9vbCByZXNvbHZlICAgICAgICAgICAgICA9IGZhbHNlOyAgLy8gQ2Fu
IGJlIHVzZWQgYXMgcmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGNvbXByZXNzZWQgICAgICAgICAg
ID0gZmFsc2U7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzICAgICA9IDA7CisgICAgTlNVSW50
ZWdlciBwaXhlbEJ5dGVzTVNBQSA9IDA7CisgICAgTlNVSW50ZWdlciBjaGFubmVscyAgICAgICA9
IDA7CisgICAgdWludDhfdCBhbGlnbm1lbnQgICAgICAgICA9IDA7CiB9OwogCiAvLyBQaXhlbCBm
b3JtYXQKQEAgLTE0Myw2ICsxNDgsNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5hbCA6IGFuZ2xl
OjpOb25Db3B5YWJsZQogICBwcml2YXRlOgogICAgIHZvaWQgaW5pdE5hdGl2ZUZvcm1hdENhcHNB
dXRvZ2VuKGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXkpOwogICAgIHZvaWQgaW5pdE5hdGl2ZUZv
cm1hdENhcHMoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisKICAgICB2b2lkIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKQEAg
LTE1MCw2ICsxNTYsMTcgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAogICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yUmVuZGVyYWJsZSk7CisKKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXQgZm9ybWF0SWQsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1w
bGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE5T
VUludGVnZXIgYnl0ZXNQZXJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRl
Z2VyIGNoYW5uZWxzKTsKKwogICAgIHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBm
b3JtYXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAogICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLApAQCAtMTU5LDggKzE3NiwyNCBAQCBjbGFz
cyBGb3JtYXRUYWJsZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBkZXB0aFJlbmRlcmFibGUpOwogCisgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0IGZvcm1hdElkLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmxlbmRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2Ft
cGxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBi
eXRlc1BlckNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5l
bHMpOworCiAgICAgdm9pZCBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBm
b3JtYXRJZCwgYm9vbCBmaWx0ZXJhYmxlKTsKIAorICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0Zv
ckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHN1cHBvcnRzaU9TNCk7CisKICAgICBzdGQ6OmFycmF5PEZvcm1hdCwgYW5nbGU6
OmtOdW1BTkdMRUZvcm1hdHM+IG1QaXhlbEZvcm1hdFRhYmxlOwogICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxNVExQaXhlbEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1Rh
YmxlOwogICAgIC8vIE9uZSBmb3IgdGlnaHRseSBwYWNrZWQgYnVmZmVycywgb25lIGZvciBnZW5l
cmFsIGNhc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQpp
bmRleCBmYjFkNWNhOGJjMmZlYmE0NDllYTM1YjQ4YTQyYjkzNTMyOGFmNjIxLi40MTZhZDVjN2Zm
MTQxNjhlMDk3OGJiYzdiN2UxYzg4NjlmNmU3YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2Zvcm1hdF91dGlscy5tbQpAQCAtNzcsOCArNzcsOCBAQCB2b2lkIEdlbmVyYXRlVGV4
dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxlLAogICAgICAgICAgICAg
dGV4dHVyZUNhcHMucmVuZGVyYnVmZmVyID0KICAgICAgICAgICAgICAgICBtdGxGb3JtYXQuZ2V0
Q2FwcygpLmNvbG9yUmVuZGVyYWJsZSB8fCBtdGxGb3JtYXQuZ2V0Q2FwcygpLmRlcHRoUmVuZGVy
YWJsZTsKICAgICAgICAgICAgIHRleHR1cmVDYXBzLnRleHR1cmFibGUgICAgICAgID0gdHJ1ZTsK
LSAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0Lmdl
dENhcHMoKS5ibGVuZGFibGU7CiAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy50ZXh0dXJlQXR0YWNo
bWVudCA9IHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlcjsKKyAgICAgICAgICAgIHRleHR1cmVDYXBz
LmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVuZGFibGU7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoZm9ybWF0Q2Fwcy5tdWx0aXNhbXBsZSkKQEAgLTE0OCwxMiAr
MTQ4LDYgQEAgYm9vbCBGb3JtYXQ6Om5lZWRDb252ZXJzaW9uKGFuZ2xlOjpGb3JtYXRJRCBzcmNG
b3JtYXRJZCkgY29uc3QKICAgICAgICAgLy8gV2ViR0wgYWxsb3dzIHVuc3dpenpsZWQgbWFwcGlu
ZyB3aGVuIHN3aXp6bGluZyBpcyBub3QgYXZhaWxhYmxlLiBObyBuZWVkIHRvIGNvbnZlcnQuCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHNyY0Zvcm1hdElkID09IGFuZ2xl
OjpGb3JtYXRJRDo6RVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0sgJiYKLSAgICAgICAgYWN0dWFsRm9y
bWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOF9VTk9STV9CTE9DSykKLSAgICB7
Ci0gICAgICAgIC8vIEVUQzEgUkdCICYgRVRDMiBSR0IgYXJlIHRlY2huaWNhbGx5IHRoZSBzYW1l
LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBzcmNGb3JtYXRJZCAh
PSBhY3R1YWxGb3JtYXRJZDsKIH0KIApAQCAtMTkyLDggKzE4Niw3IEBAIGFuZ2xlOjpSZXN1bHQg
Rm9ybWF0VGFibGU6OmluaXRpYWxpemUoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKICAgICAg
ICAgbVBpeGVsRm9ybWF0VGFibGVbaV0uaW5pdChkaXNwbGF5LCBmb3JtYXRJZCk7CiAgICAgICAg
IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W21QaXhlbEZvcm1hdFRhYmxlW2ldLm1ldGFsRm9ybWF0XTsKIAotICAgICAgICBpZiAoIW1QaXhl
bEZvcm1hdFRhYmxlW2ldLmNhcHMtPmRlcHRoUmVuZGVyYWJsZSAmJgotICAgICAgICAgICAgbVBp
eGVsRm9ybWF0VGFibGVbaV0uYWN0dWFsRm9ybWF0SWQgIT0gbVBpeGVsRm9ybWF0VGFibGVbaV0u
aW50ZW5kZWRGb3JtYXRJZCkKKyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVh
bEZvcm1hdElkICE9IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLnRleHR1cmVMb2FkRnVuY3Rp
b25zID0gYW5nbGU6OkdldExvYWRGdW5jdGlvbnNNYXAoCiAgICAgICAgICAgICAgICAgbVBpeGVs
Rm9ybWF0VGFibGVbaV0uaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCkBA
IC0yMDQsNiArMTk3LDE5IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6OmluaXRpYWxpemUo
Y29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sx
XVtpXS5pbml0KGZvcm1hdElkLCB0cnVlKTsKICAgICB9CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBX
b3JrLWFyb3VuZCBBTUQncyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJu
cyB6ZXJvIGR1cmluZyBzYW1wbGluZzoKKyAgICBpZiAoZGlzcGxheS0+Z2V0UmVuZGVyZXJEZXNj
cmlwdGlvbigpLmZpbmQoIkFNRCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisgICAgICAgIEZvcm1hdCAm
Zm9ybWF0ID0KKyAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW3N0YXRpY19jYXN0PHVpbnQz
Ml90PihhbmdsZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UKV07CisgICAgICAgIGZvcm1h
dC5hY3R1YWxGb3JtYXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0
X1VJTlQ7CisgICAgICAgIGZvcm1hdC5tZXRhbEZvcm1hdCAgICAgICAgICA9IE1UTFBpeGVsRm9y
bWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4OworICAgICAgICBmb3JtYXQuaW5pdEZ1bmN0aW9uICAg
ICAgICAgPSBudWxscHRyOworICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBu
dWxscHRyOworICAgICAgICBmb3JtYXQuY2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFi
bGVbTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXRfU3RlbmNpbDhdOworICAgIH0KKwogICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtMjM5LDEwICsyNDUsMjMgQEAg
dm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpCiB7
CiAgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFibGUsIGJsZW5k
YWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKLSAgICAgICAgICAg
ICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKK30KK3ZvaWQgRm9y
bWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbXVsdGlzYW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cmVzb2x2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRl
cmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxC
eXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVs
cykKK3sKKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCB3cml0YWJsZSwg
YmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgZmFsc2UsIHBpeGVsQnl0ZXMsIGNoYW5uZWxzKTsKIH0KIAotdm9pZCBGb3Jt
YXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKK3ZvaWQgRm9ybWF0VGFi
bGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBibGVuZGFibGUsCkBAIC0yNTAsNiArMjY5LDIwIEBAIHZvaWQgRm9ybWF0VGFibGU6
OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjb2xvclJlbmRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZGVwdGhSZW5kZXJhYmxlKQoreworICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRl
cmFibGUsIHdyaXRhYmxlLCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJl
bmRlcmFibGUsCisgICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworfQor
dm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBtdWx0aXNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZXNvbHZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVu
ZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRl
cmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxC
eXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVs
cykKIHsKICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmZpbHRlcmFibGUgICAg
ICA9IGZpbHRlcmFibGU7CiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS53cml0
YWJsZSAgICAgICAgPSB3cml0YWJsZTsKQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKICAgICBtTmF0aXZlUGl4ZWxG
b3JtYXRDYXBzVGFibGVbaWRdLmJsZW5kYWJsZSAgICAgICA9IGJsZW5kYWJsZTsKICAgICBtTmF0
aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLm11bHRpc2FtcGxlICAgICA9IG11bHRpc2FtcGxl
OwogICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVzb2x2ZSAgICAgICAgID0g
cmVzb2x2ZTsKKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMg
ICAgICA9IHBpeGVsQnl0ZXM7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5w
aXhlbEJ5dGVzTVNBQSAgPSBwaXhlbEJ5dGVzOworICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNU
YWJsZVtpZF0uY2hhbm5lbHMgICAgICAgID0gY2hhbm5lbHM7CisgICAgaWYgKGNoYW5uZWxzICE9
IDApCisgICAgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50ID0g
TUFYKHBpeGVsQnl0ZXMgLyBjaGFubmVscywgMVUpOwogfQogCiB2b2lkIEZvcm1hdFRhYmxlOjpz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9vbCBmaWx0
ZXJhYmxlKQpAQCAtMjY1LDkgKzMwMywyNzQgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Q29tcHJl
c3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wgZmlsdGVyYWIKICAg
ICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIH0KIAordm9pZCBGb3JtYXRUYWJsZTo6YWRqdXN0Rm9y
bWF0Q2Fwc0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9T
NCkKK3sKKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKQorCisg
ICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IG1OYXRpdmVQaXhlbEZvcm1hdENh
cHNUYWJsZVtpZF0ucGl4ZWxCeXRlczsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXJN
U0FBID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNBQTsKKyAg
ICBOU1VJbnRlZ2VyIGFsaWdubWVudCAgICAgICAgICAgID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlW2lkXS5hbGlnbm1lbnQ7CisKKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0
ZXNSZW5kZXIKKyMgICAgZGVmaW5lIFNQRUNJRklDKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNS
ZW5kZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGNhc2UgX3BpeGVsRm9ybWF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxC
eXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXJNU0FB
ID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBhbGlnbm1lbnQgPSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7IFwKKyAgICAgICAgICAgIGJyZWFr
CisvLyBPdmVycmlkZSB0aGUgY3VycmVudCBwaXhlbCBieXRlcyByZW5kZXIsIGFuZCBNU0FBCisj
ICAgIGRlZmluZSBTUEVDSUZJQ19NU0FBKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIs
IF9waXhlbEJ5dGVzUmVuZGVyTVNBQSkgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIF9w
aXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIg
ICAgID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5
dGVzUmVuZGVyTVNBQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgYWxpZ25tZW50ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBzdXBwb3J0c2lPUzQgPyBfcGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENh
cHNUYWJsZVtpZF0uY2hhbm5lbHMgOiA0OyBcCisgICAgICAgICAgICBicmVhaworLy8gT3ZlcnJp
ZGUgdGhlIGN1cnJlbnQgcGl4ZWxCeXRlc1JlbmRlciwgYW5kIGFsaWdubWVudAorIyAgICBkZWZp
bmUgU1BFQ0lGSUNfQUxJR04oX3BpeGVsRm9ybWF0LCBfcGl4ZWxCeXRlc1JlbmRlciwgX2FsaWdu
bWVudCkgXAorICAgICAgICBjYXNlIF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAg
ICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
cGl4ZWxCeXRlc1JlbmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgYWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICghbU5h
dGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAg
Ly8gT24gQXBwbGVHUFVGYW1pbHk0KywgdGhlcmUgaXMgbm8gNGJ5dGUgbWluaW11bSByZXF1aXJl
bWVudCBmb3IgcmVuZGVyIHRhcmdldHMKKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBz
dXBwb3J0c2lPUzQgPyAxVSA6IDRVOworICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IE1B
WChtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMsIG1pblNpemUpOwor
ICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IHBpeGVsQnl0ZXNSZW5kZXI7CisgICAgICAg
IGFsaWdubWVudCA9CisgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBNQVgocGl4ZWxCeXRlc1Jl
bmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMsIDFVKSA6IDQ7
CisgICAgfQorCisgICAgLy8gVGhpcyBsaXN0IG9mIHRhYmxlcyBzdGFydHMgZnJvbSBhIGdlbmVy
YWwgbXVsdGktcGxhdGZvcm0gdGFibGUsCisgICAgLy8gdG8gc3BlY2lmaWMgcGxhdGZvcm1zIChp
LmUuIGlvczIsIGlvczQpIGluaGVyaXRpbmcgZnJvbSB0aGUgcHJldmlvdXMgdGFibGVzCisKKyAg
ICAvLyBTdGFydCBvZmYgd2l0aCB0aGUgZ2VuZXJhbCBjYXNlCisgICAgc3dpdGNoICgoTlNVSW50
ZWdlcilpZCkKKyAgICB7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5v
cm0sIDRVKTsKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgNFUp
OworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKyAgICAg
ICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgNFUpOworCisgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworICAgICAgICBTUEVDSUZJQyhN
VExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICBTUEVDSUZJQ19NU0FBKE1U
TFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVDSUZJQ19N
U0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVD
SUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUsIDhVKTsKKyAgICAgICAgU1BF
Q0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUpOworCisgICAgICAg
IFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCA4VSk7CisgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMo
TVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsIDhVKTsKKworICAgICAgICBTUEVDSUZJQyhNVExQ
aXhlbEZvcm1hdFJHQjlFNUZsb2F0LCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxG
b3JtYXRTdGVuY2lsOCwgMVUpOworICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGJhc2VkIGlvczIK
KyAgICBpZiAoc3VwcG9ydHNpT1MyKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdl
cilpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCNUc2
UjVVbm9ybSwgOFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVV
bm9ybSwgOFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBQkdSNFVub3Jt
LCA4VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCA4
VSk7CisgICAgICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwg
NFUsIDhVKTsKKyAgICAgICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRCR1JBOFVu
b3JtLCA0VSwgOFUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3ZlcnJpZGUgYmFzZWQg
b24gaW9zNAorICAgIGlmIChzdXBwb3J0c2lPUzQpCisgICAgeworICAgICAgICBzd2l0Y2ggKChO
U1VJbnRlZ2VyKWlkKQorICAgICAgICB7CisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQ
aXhlbEZvcm1hdEI1RzZSNVVub3JtLCA2VSwgMlUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRM
UGl4ZWxGb3JtYXRSR0JBOFVub3JtLCA0VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhl
bEZvcm1hdEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxG
b3JtYXRSR0JBOFVub3JtX3NSR0IsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSk7CisKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBp
eGVsRm9ybWF0UkdCQThTbm9ybSwgNFUpOworCisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihN
VExQaXhlbEZvcm1hdFJHQjEwQTJVbm9ybSwgNFUsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklD
X0FMSUdOKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA0VSwgNFUpOworICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworCisgICAgICAgICAgICBT
UEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgNFUsIDRVKTsKKworICAg
ICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgNFUsIDRV
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRd
LnBpeGVsQnl0ZXMgICAgID0gcGl4ZWxCeXRlc1JlbmRlcjsKKyAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBID0gcGl4ZWxCeXRlc1JlbmRlck1TQUE7Cisg
ICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9IGFsaWdu
bWVudDsKKworIyAgICB1bmRlZiBTUEVDSUZJQworIyAgICB1bmRlZiBTUEVDSUZJQ19BTElHTgor
IyAgICB1bmRlZiBTUEVDSUZJQ19NU0FBCisjZW5kaWYKKyAgICAvLyBtYWNPUyBkb2VzIG5vdCBu
ZWVkIHRvIHBlcmZvcm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhlc2UgdmFsdWVzIGFy
ZSBvbmx5IHVzZWQgdG8gY2hlY2sKKyAgICAvLyB2YWxpZCBNUlQgc2l6ZXMgb24gaU9TLgorfQor
CiB2b2lkIEZvcm1hdFRhYmxlOjppbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRs
ICpkaXNwbGF5KQogewotICAgIGluaXROYXRpdmVGb3JtYXRDYXBzQXV0b2dlbihkaXNwbGF5KTsK
KyAgICBjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzTXRsID0gZGlzcGxheS0+Z2V0
RmVhdHVyZXMoKTsKKyAgICAvLyBTa2lwIGF1dG8gcmVzb2x2ZSBpZiBlaXRoZXIgaGFzRGVwdGgv
U3RlbmNpbEF1dG9SZXNvbHZlIG9yIGFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUKKyAg
ICAvLyBmZWF0dXJlIGFyZSBkaXNhYmxlZC4KKyAgICBib29sIHN1cHBvcnREZXB0aEF1dG9SZXNv
bHZlID0gZmVhdHVyZXNNdGwuaGFzRGVwdGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1wbGVT
dG9yZUFuZFJlc29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29s
dmUgPSBmZWF0dXJlc010bC5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5hYmxlZCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnREZXB0aFN0ZW5jaWxB
dXRvUmVzb2x2ZSA9IHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlICYmIHN1cHBvcnRTdGVuY2lsQXV0
b1Jlc29sdmU7CisKKyAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9t
ZXRhbC9NZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmCisgICAgLy8gY2xhbmctZm9ybWF0IG9m
ZgorCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmls
dGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJl
c29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGJ5
dGVzUGVyQ2hhbm5lbCB8IGNoYW5uZWwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
QThVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgIGZhbHNlLCAgICAg
ICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZSwgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUs
IDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTbm9ybSwgICAgICAgIHRy
dWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRp
c3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwgIDFVLCAxVSk7Cisg
ICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVub3JtLCAgICAgICB0cnVlLCAgICAg
ICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5z
dXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICAyVSwgMVUpOworICAg
IHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAg
ICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3Vw
cG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4VW5vcm0sICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0Ukc4U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwgIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFJHMTZVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0
cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWls
eSgxLCAxKSwgICAgICAgIHRydWUsICA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzE2U25vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MSwgMSksICAgICAgICB0cnVlLCAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkdCQTE2VW5vcm0sICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUs
ICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEs
IDEpLCAgICAgICAgdHJ1ZSwgIDhVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHQkExNlNub3JtLCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAx
KSwgICAgICAgIHRydWUsICA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRSR0JBMTZGbG9hdCwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsICA4VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAg
ICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgNFUs
IDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCAg
ICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMiksICAgICAg
dHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkdCQThTbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgICAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgICA0VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1JB
OFVub3JtX3NSR0IsICAgICB0cnVlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZh
bWlseSgyKSwgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworCisgICAgLy8gICAg
ICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAg
ICAgICAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29s
dmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNkZsb2F0LCAgICAgICB0cnVlLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAyVSwgMVUp
OworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAg
NFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyRmxvYXQsICAgIGRp
c3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwx
KSwgICAgICAgIHRydWUsICAgIDRVLCAxVSk7CisKKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJH
RVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAg
ICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgfCAgbXVs
dGlzYW1wbGUgfCAgcmVzb2x2ZSAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxz
ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAg
MlUsIDNVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgICAg
ICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0QkdSNUExVW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAg
IHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsK
KyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sICAgICAgdHJ1ZSwg
ICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyNlbmRpZgorCisgICAgLy8gICAgICAgICAgICB8ICBm
b3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8
ICByZXNvbHZlICAgfCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRCR1IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHQjEwQTJVbm9ybSwgICAgIHRydWUsICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMywgMSksICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICB0cnVlLCAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
UkdCMTBBMlVpbnQsICAgICAgZmFsc2UsICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgzLCAxKSwgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwg
ICAgIHRydWUsICA0VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzEx
QjEwRmxvYXQsICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFt
aWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAg
dHJ1ZSwgIDRVLCAzVSk7CisKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAg
ICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIGJsZW5kYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAg
ICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVu
ZGVyYWJsZSAgICAgICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRSR0I5RTVGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NH
UFVGYW1pbHkoMyksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgIGRpc3BsYXkt
PnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgx
KSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAzVSk7CisKKyAgICAvLyAg
ICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdy
aXRhYmxlICB8ICBibGVuZGFibGUgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgcmVzb2x2ZSAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRSOFNpbnQsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRy
dWUsIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVpbnQsICAg
ICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDFVKTsK
KyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2U2ludCwgICAgICAgZmFsc2UsICAg
ICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRSRzhVaW50LCAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUs
ICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZhbHNlLCAgICAgICAgIHRydWUsIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHOFNpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNl
LCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAg
ICAgdHJ1ZSwgMlUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyVWlu
dCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRp
c3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVl
LCA0VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMzJTaW50LCAgICAg
ICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAx
VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVaW50LCAgICAgIGZhbHNl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDJVKTsKKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0
cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRSR0JBOFVpbnQsICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBm
YWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAg
ICAgICAgIHRydWUsIDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJH
QkE4U2ludCwgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAg
ICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwg
NFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAg
ZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUp
OworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzMyU2ludCwgICAgICBmYWxzZSwg
ICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNF
aXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDhVLCAyVSk7CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlVpbnQsICAgIGZhbHNlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgOFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UkdCQTE2U2ludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwgICAgICAgICB0cnVlLCA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRSR0JBMzJVaW50LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAg
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAg
ICAgIHRydWUsIDE2VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JB
MzJTaW50LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAg
ZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRy
dWUsIDE2VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAg
ICAgICAgICB8IGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgfCAgd3JpdGFibGUgIHwg
IGJsZW5kYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAg
ICAgICAgICAgfCAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVy
YWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJGbG9hdCwgICAgICAg
ZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVG
YW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAg
ICAgdHJ1ZSwgIDhVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEz
MkZsb2F0LCAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVl
LCAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BV
RmFtaWx5KDEsMSksICAgICAgICAgdHJ1ZSwgIDE2VSwgNFUpOworCisgICAgLy8gICAgICAgICAg
ICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBs
ZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVy
YWJsZSB8IGRlcHRoUmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgfAorICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAg
ICAgICAgdHJ1ZSwgICAgc3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICAgICB0cnVlLCAgNFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0U3RlbmNpbDgsICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAg
IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAg
ICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERl
cHRoMzJGbG9hdF9TdGVuY2lsOCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWls
eSgxLDEpLCAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0
RGVwdGhTdGVuY2lsQXV0b1Jlc29sdmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRy
dWUsICA4VSwgMlUpOworLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtLCAgICAgICAgICAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRy
dWUsICAgIHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAgICAgICAgZmFsc2Us
ICAgICAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVu
b3JtX1N0ZW5jaWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0
ZW5jaWxBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkEsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQSwgdHJ1ZSk7Cisg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQV9zUkdCLCB0
cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JB
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19S
R0JBX3NSR0IsIHRydWUpOworI2Vsc2UKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFAsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBf
c1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQ
VlJUQ19SR0JBXzJCUFAsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UFZSVENfUkdCQV8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUF9zUkdCLCB0
cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SMTFV
bm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRF
QUNfUjExU25vcm0sIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0RUFDX1JHMTFVbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiwgdHJ1ZSk7CisgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgsIHRydWUpOworICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4X3NSR0IsIHRy
dWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4
QTEsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRD
Ml9SR0I4QTFfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRBU1RDXzR4NF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEFTVENfNXg0X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ181eDVfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X3NSR0IsIHRy
dWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVf
c1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRB
U1RDXzh4Nl9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEFTVENfOHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IsIHRydWUpOworICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NSR0IsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9zUkdC
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
MTJ4MTBfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRBU1RDXzEyeDEyX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ180eDRfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNXg0X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJl
c3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9MRFIsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSLCB0cnVlKTsK
KyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4
NV9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
QVNUQ184eDZfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEFTVENfOHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiwgdHJ1
ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEw
X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRB
U1RDXzEyeDEyX0xEUiwgdHJ1ZSk7CisjZW5kaWYKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KIH0K
IAogfSAgLy8gbmFtZXNwYWNlIG10bApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9n
bHNsYW5nX210bF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYzEwOTk3MzhkOWM1NjgyMjExNjdlMmUx
NWM2NDU3MDExMjIzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKQEAg
LTAsMCArMSw1NyBAQAorLy8KKy8vICBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaAorLy8gIEFOR0xF
CisvLworLy8gIENyZWF0ZWQgYnkgS3lsZSBQaWRkaW5ndG9uIG9uIDExLzEwLzIwLgorLy8KKwor
I2lmbmRlZiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaAorI2RlZmluZSBtdGxfZ2xzbGFuZ19tdGxf
dXRpbHNfaAorI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9Qcm9ncmFtSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2ds
c2xhbmdfd3JhcHBlcl91dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9jb21tb24uaCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CitzdHJ1
Y3QgU2FtcGxlckJpbmRpbmcKK3sKKyAgICB1aW50MzJfdCB0ZXh0dXJlQmluZGluZyA9IDA7Cisg
ICAgdWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOworfTsKKworc3RydWN0IFRyYW5zbGF0ZWRT
aGFkZXJJbmZvCit7CisgICAgdm9pZCByZXNldCgpOworICAgIC8vIFRyYW5zbGF0ZWQgTWV0YWwg
c291cmNlIGNvZGUKKyAgICBzdGQ6OnN0cmluZyBtZXRhbFNoYWRlclNvdXJjZTsKKyAgICAvLyBN
ZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJv
Z3JhbU10bC4KKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJyYXJ5Owor
ICAgIHN0ZDo6YXJyYXk8U2FtcGxlckJpbmRpbmcsIGtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gYWN0
dWFsU2FtcGxlckJpbmRpbmdzOworICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0Jp
bmRpbmdzPiBhY3R1YWxVQk9CaW5kaW5nczsKKyAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4
U2hhZGVyWEZCcz4gYWN0dWFsWEZCQmluZGluZ3M7CisgICAgYm9vbCBoYXNVQk9Bcmd1bWVudEJ1
ZmZlcjsKK307Cit2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRl
ICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3Jh
bUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5m
b01hcE91dCk7CisKK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9n
cmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFy
aWFibGVJbmZvTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8
VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdl
dCBlcXVpdmFsZW50IHNoYWRvdyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0
ZWQgbXNsIHNoYWRlci4KK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVt
IG1vZGUsIEdMZW51bSBmdW5jKTsKKworfSAgLy8gbmFtZXNwYWNlIG10bAorfSAgLy8gbmFtZXNw
YWNlIHJ4CisKKyNlbmRpZiAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX210bF91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVmNWJlZjQzMTAwZjExM2U0OTNkZDlkYjZlMGUyZmQ1NDYxNWEyYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KQEAgLTAsMCArMSwyNDEgQEAKKy8vCisvLyAgbWdsX2ds
c2xhbmdfbXRsX3V0aWxzLm0KKy8vICBBTkdMRSAoc3RhdGljKQorLy8KKy8vICBDcmVhdGVkIGJ5
IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKy8vCisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJN
dGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxf
dXRpbHMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CisKK3ZvaWQgVHJh
bnNsYXRlZFNoYWRlckluZm86OnJlc2V0KCkKK3sKKyAgICBtZXRhbFNoYWRlclNvdXJjZS5jbGVh
cigpOworICAgIG1ldGFsTGlicmFyeSAgICAgICAgID0gbmlsOworICAgIGhhc1VCT0FyZ3VtZW50
QnVmZmVyID0gZmFsc2U7CisgICAgZm9yIChtdGw6OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDog
YWN0dWFsU2FtcGxlckJpbmRpbmdzKQorICAgIHsKKyAgICAgICAgYmluZGluZy50ZXh0dXJlQmlu
ZGluZyA9IG10bDo6a01heFNoYWRlclNhbXBsZXJzOworICAgIH0KKworICAgIGZvciAodWludDMy
X3QgJmJpbmRpbmcgOiBhY3R1YWxVQk9CaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcg
PSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgJmJp
bmRpbmcgOiBhY3R1YWxYRkJCaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcgPSBtdGw6
OmtNYXhTaGFkZXJCdWZmZXJzOworICAgIH0KK30KKworLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBm
cm9udCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4g
Zm9ybSBvZgorLy8gc2xvdDpjb3VudCBwYWlyKQordXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGlu
Z01hcCA9CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjxz
dGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4+OworCitib29sIE1hcHBlZFNhbXBsZXJOYW1l
TmVlZHNVc2VyRGVmaW5lZFByZWZpeChjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQor
eworICAgIHJldHVybiBvcmlnaW5hbE5hbWUuZmluZCgnLicpID09IHN0ZDo6c3RyaW5nOjpucG9z
OworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoY29uc3Qg
c3RkOjpzdHJpbmcgJm9yaWdpbmFsTmFtZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBzYW1wbGVyTmFt
ZSA9IG9yaWdpbmFsTmFtZTsKKworICAgIC8vIFNhbXBsZXJzIGluIHN0cnVjdHMgYXJlIGV4dHJh
Y3RlZC4KKyAgICBzdGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwgc2FtcGxlck5hbWUu
ZW5kKCksICcuJywgJ18nKTsKKworICAgIC8vIFJlbW92ZSBhcnJheSBlbGVtZW50cworICAgIGF1
dG8gb3V0ID0gc2FtcGxlck5hbWUuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8gaW4gPSBzYW1wbGVy
TmFtZS5iZWdpbigpOyBpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKTsgaW4rKykKKyAgICB7CisgICAg
ICAgIGlmICgqaW4gPT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmluICE9
ICddJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAg
ICAgIEFTU0VSVChpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0KysgPSAqaW47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzYW1wbGVyTmFtZS5lcmFzZShvdXQsIHNhbXBsZXJO
YW1lLmVuZCgpKTsKKworICAgIGlmIChNYXBwZWRTYW1wbGVyTmFtZU5lZWRzVXNlckRlZmluZWRQ
cmVmaXgob3JpZ2luYWxOYW1lKSkKKyAgICB7CisgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtV
c2VyRGVmaW5lZE5hbWVQcmVmaXggKyBzYW1wbGVyTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4g
c2FtcGxlck5hbWU7Cit9CisKK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9n
cmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFy
aWFibGVJbmZvTWFwT3V0KQoreworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVy
VHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgZ2w6OlNoYWRlciAq
Z2xTaGFkZXIgICAgICAgICAgICA9IHByb2dyYW1TdGF0ZS5nZXRBdHRhY2hlZFNoYWRlcihzaGFk
ZXJUeXBlKTsKKyAgICAgICAgKCpzaGFkZXJTb3VyY2VzT3V0KVtzaGFkZXJUeXBlXSA9IGdsU2hh
ZGVyID8gZ2xTaGFkZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSA6ICIiOworICAgIH0KK30KKwor
dm9pZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFs
UmVmbGVjdGlvbiAqcmVmbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxCaW5kaW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5n
PiAmc3RydWN0U2FtcGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8U2FtcGxlckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGlu
Z3MpCit7CisgICAgZm9yIChhdXRvICZzYW1wbGVyIDogcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJp
bmRpbmdzKCkpCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSAgICAgICAg
ICA9IHNhbXBsZXIuZmlyc3Q7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGFjdHVhbFNhbXBsZXJT
bG90ID0gKHVpbnQzMl90KXJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5nKG5hbWUpOworICAg
ICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdClyZWZsZWN0
aW9uLT5nZXRUZXh0dXJlQmluZGluZyhuYW1lKTsKKworICAgICAgICAvLyBBc3NpZ24gc2VxdWVu
dGlhbCBpbmRleCBmb3Igc3Vic2VxdWVudCBhcnJheSBlbGVtZW50cworICAgICAgICBjb25zdCBi
b29sIHN0cnVjdFNhbXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9IHN0cnVjdFNh
bXBsZXJzLmVuZCgpOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBtYXBwZWROYW1lID0KKyAg
ICAgICAgICAgIHN0cnVjdFNhbXBsZXIgPyBuYW1lIDogTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUo
c2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXggKyBuYW1lKTsKKyAgICAgICAgYXV0byBvcmlnaW5h
bCA9IG9yaWdpbmFsQmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKyAgICAgICAgaWYgKG9yaWdp
bmFsICE9IG9yaWdpbmFsQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+PiAmcmVzT3JpZ25h
bEJpbmRpbmdzID0KKyAgICAgICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdzLmF0KG1hcHBlZE5h
bWUpOworICAgICAgICAgICAgdWludDMyX3QgY3VycmVudFRleHR1cmVTbG90ID0gYWN0dWFsVGV4
dHVyZVNsb3Q7CisgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50U2FtcGxlclNsb3QgPSBhY3R1
YWxTYW1wbGVyU2xvdDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPHVpbnQzMl90
LCB1aW50MzJfdD4gJm9yaWdpbmFsQmluZGluZ1JhbmdlIDogcmVzT3JpZ25hbEJpbmRpbmdzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhbXBsZXJCaW5kaW5nICZhY3R1YWxCaW5k
aW5nID0gYmluZGluZ3MtPmF0KG9yaWdpbmFsQmluZGluZ1JhbmdlLmZpcnN0KTsKKyAgICAgICAg
ICAgICAgICBhY3R1YWxCaW5kaW5nLnRleHR1cmVCaW5kaW5nICA9IGN1cnJlbnRUZXh0dXJlU2xv
dDsKKyAgICAgICAgICAgICAgICBhY3R1YWxCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICA9IGN1cnJl
bnRTYW1wbGVyU2xvdDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0dXJlU2xvdCArPSBv
cmlnaW5hbEJpbmRpbmdSYW5nZS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgY3VycmVudFNhbXBs
ZXJTbG90ICs9IG9yaWdpbmFsQmluZGluZ1JhbmdlLnNlY29uZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJl
ZmxlY3Rpb25Gcm9tU2hhZGVyKGdsOjpTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBTaGFkZXJNdGwg
KnNoYWRlckluc3RhbmNlID0gc3RhdGljX2Nhc3Q8U2hhZGVyTXRsICo+KHNoYWRlci0+Z2V0SW1w
bGVtZW50YXRpb24oKSk7CisgICAgcmV0dXJuIHNoYWRlckluc3RhbmNlLT5nZXRUcmFuc2xhdG9y
TWV0YWxSZWZsZWN0aW9uKCk7Cit9CisKK3NoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpn
ZXRSZWZsZWN0aW9uRnJvbUNvbXBpbGVyKGdsOjpDb21waWxlciAqY29tcGlsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hh
ZGVyVHlwZSB0eXBlKQoreworICAgIGF1dG8gY29tcGlsZXJJbnN0YW5jZSAgICAgID0gY29tcGls
ZXItPmdldEluc3RhbmNlKHR5cGUpOworICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0g
c3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5k
bGUoKSk7CisgICAgYXV0byB0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPSBiYXNlLT5nZXRBc1RyYW5z
bGF0b3JNZXRhbERpcmVjdCgpOworICAgIGNvbXBpbGVyLT5wdXRJbnN0YW5jZShzdGQ6Om1vdmUo
Y29tcGlsZXJJbnN0YW5jZSkpOworICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdl
dFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKK30KKworYW5nbGU6OlJlc3VsdCBHbHNsYW5n
R2V0TVNMKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNv
dXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJm
YWNlVmFyaWFibGVJbmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlcklu
Zm9PdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0
cmluZz4gKm1zbENvZGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHhm
YkJ1ZmZlckNvdW50KQoreworICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVy
IGJpbmRpbmdzIGdlbmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJl
bWFwLgorICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+IHVib09y
aWdpbmFsQmluZGluZ3M7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
PiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1CbG9ja3MoKTsKKyAgICBmb3IgKHVp
bnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVy
SWR4KQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJs
b2Nrc1tidWZmZXJJZHhdOworICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3MuY291bnQo
YmxvY2subWFwcGVkTmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVib09yaWdpbmFsQmlu
ZGluZ3NbYmxvY2subWFwcGVkTmFtZV0gPSBidWZmZXJJZHg7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLy8gUmV0cmlldmUgb3JpZ2luYWwgc2FtcGxlciBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9u
dCBlbmQuCisgICAgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5hbFNhbXBsZXJCaW5k
aW5nczsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6U2FtcGxlckJpbmRpbmc+ICZzYW1wbGVy
QmluZGluZ3MgPSBwcm9ncmFtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCk7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0+ICZ1bmlmb3JtcyAgICAgICAgID0gcHJvZ3Jh
bVN0YXRlLmdldFVuaWZvcm1zKCk7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJp
bmc+IHN0cnVjdFNhbXBsZXJzID0ge307CisKKyAgICBmb3IgKHVpbnQzMl90IHRleHR1cmVJbmRl
eCA9IDA7IHRleHR1cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5zaXplKCk7ICsrdGV4dHVyZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlNhbXBsZXJCaW5kaW5nICZzYW1wbGVyQmlu
ZGluZyA9IHNhbXBsZXJCaW5kaW5nc1t0ZXh0dXJlSW5kZXhdOworICAgICAgICB1aW50MzJfdCB1
bmlmb3JtSW5kZXggPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUluZGV4RnJvbVNhbXBsZXJJbmRl
eCh0ZXh0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9ybSAmc2FtcGxl
clVuaWZvcm0gPSB1bmlmb3Jtc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBib29sIGlzU2FtcGxl
ckluU3RydWN0ICAgICAgICA9IHNhbXBsZXJVbmlmb3JtLm5hbWUuZmluZCgnLicpICE9IHN0ZDo6
c3RyaW5nOjpucG9zOworICAgICAgICBzdGQ6OnN0cmluZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlz
U2FtcGxlckluU3RydWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoc2FtcGxlclVuaWZvcm0ubmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNU0xHZXRNYXBwZWRTYW1w
bGVyTmFtZShzYW1wbGVyVW5pZm9ybS5tYXBwZWROYW1lKTsKKyAgICAgICAgLy8gVGhlc2UgbmVl
ZCB0byBiZSBwcmVmaXhlZCBsYXRlciBzZXBlcmF0ZWx5CisgICAgICAgIGlmIChpc1NhbXBsZXJJ
blN0cnVjdCkKKyAgICAgICAgICAgIHN0cnVjdFNhbXBsZXJzLmluc2VydChtYXBwZWRTYW1wbGVy
TmFtZSk7CisgICAgICAgIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1l
XS5wdXNoX2JhY2soCisgICAgICAgICAgICB7dGV4dHVyZUluZGV4LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgpKX0pOworICAgIH0K
KyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwg
Z2w6OlNoYWRlclR5cGU6OkZyYWdtZW50fSkKKyAgICB7CisgICAgICAgICgqbXNsQ29kZU91dClb
dHlwZV0gICAgICAgICAgICAgICAgICAgICAgICAgPSBzaGFkZXJTb3VyY2VzW3R5cGVdOworICAg
ICAgICAoKm1zbFNoYWRlckluZm9PdXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVy
U291cmNlc1t0eXBlXTsKKyAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyICAgICAgICAgICAgICAg
ICAgICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIodHlwZSk7CisgICAgICAg
IHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0gZ2V0UmVmbGVjdGlv
bkZyb21TaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1
cmUgc2xvdCBhc3NpZ25tZW50cworICAgICAgICBpZiAob3JpZ2luYWxTYW1wbGVyQmluZGluZ3Mu
c2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmlu
ZGluZ3MocmVmbGVjdGlvbiwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zbFNoYWRlckluZm9P
dXQtPmF0KHR5cGUpLmFjdHVhbFNhbXBsZXJCaW5kaW5ncyk7CisgICAgICAgIH0KKyAgICAgICAg
cmVmbGVjdGlvbi0+cmVzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworfQorCit1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBt
b2RlLCBHTGVudW0gZnVuYykKK3sKKyAgICAvLyBTZWUgU3BpcnZUb01zbENvbXBpbGVyOjplbWl0
X2hlYWRlcigpCisgICAgaWYgKG1vZGUgPT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKGZ1bmMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiAy
OworICAgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgICAgICAgIHJldHVybiAz
OworICAgICAgICAgICAgY2FzZSBHTF9HRVFVQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7
CisgICAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgICAgICAgIHJldHVybiA1Owor
ICAgICAgICAgICAgY2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIDY7Cisg
ICAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiA3OworICAg
ICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gODsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KK30KK30gIC8vIG5hbWVzcGFj
ZSBtdGwKK30gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2ds
c2xhbmdfdXRpbHMuaAppbmRleCAxM2M5N2VlMjQ0N2ZhNDY5MjZlZmU3OGQzMDAzMjQ0N2EyM2Ni
MjQ4Li5jMDI0NDZhOTgyMDg1NWYzY2ZmNDdjYTM5NjY3NDQwMzI4ODMzYjcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2dsc2xhbmdfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaApAQCAtMTQsMzMgKzE0LDExIEBA
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCi0KKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKIG5hbWVzcGFjZSByeAogewog
bmFtZXNwYWNlIG10bAogewotCi1zdHJ1Y3QgU2FtcGxlckJpbmRpbmcKLXsKLSAgICB1aW50MzJf
dCB0ZXh0dXJlQmluZGluZyA9IDA7Ci0gICAgdWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOwot
fTsKLQotc3RydWN0IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCi17Ci0gICAgdm9pZCByZXNldCgpOwot
Ci0gICAgLy8gVHJhbnNsYXRlZCBNZXRhbCBzb3VyY2UgY29kZQotICAgIHN0ZDo6c3RyaW5nIG1l
dGFsU2hhZGVyU291cmNlOwotICAgIC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3Vy
Y2UgY29kZSBhYm92ZS4gVXNlZCBieSBQcm9ncmFtTXRsLgotICAgIEF1dG9PYmpDUHRyPGlkPE1U
TExpYnJhcnk+PiBtZXRhbExpYnJhcnk7Ci0KLSAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5n
LCBrTWF4R0xTYW1wbGVyQmluZGluZ3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKLSAgICBzdGQ6
OmFycmF5PHVpbnQzMl90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFsVUJPQmluZGluZ3M7Ci0g
ICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVhbFhGQkJpbmRpbmdz
OwotICAgIGJvb2wgaGFzVUJPQXJndW1lbnRCdWZmZXI7Ci19OwotCiAvLyAtIHNoYWRlclNvdXJj
ZXNPdXQgaXMgcmVzdWx0IEdMU0wgY29kZSBwZXIgc2hhZGVyIHN0YWdlIHdoZW4gWEZCIGVtdWxh
dGlvbiBpcyB0dXJuZWQgb2ZmLgogLy8gLSB4ZmJPbmx5U2hhZGVyU291cmNlT3V0IHdpbGwgY29u
dGFpbiB2ZXJ0ZXggc2hhZGVyJ3MgR0xTTCBjb2RlIHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJu
ZWQgb24uCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0
ZSAmcHJvZ3JhbVN0YXRlLApAQCAtNTcsNiArMzUsMTMgQEAgYW5nbGU6OlJlc3VsdCBHbHNsYW5n
R2V0U2hhZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJs
ZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNv
ZGVPdXQpOwogCithbmdsZTo6UmVzdWx0IE1TTEdldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRs
ZXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNo
YWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjp2ZWN0b3I8
dWludDMyX3Q+PiAqc2hhZGVyQ29kZU91dCk7CisKIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBj
b2RlIHRvIE1ldGFsIHNoYWRlciBzb3VyY2UgY29kZS4KIC8vIC0gc3BpcnZTaGFkZXJDb2RlIGlz
IFNQSVJWIGNvZGUgcGVyIHNoYWRlciBzdGFnZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVk
IG9mZi4KIC8vIC0geGZiT25seVNwaXJ2Q29kZSBpcyAgdmVydGV4IHNoYWRlcidzIFNQSVJWIGNv
ZGUgd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KQEAgLTcwLDYgKzU1LDIzIEBAIGFu
Z2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1z
bFNoYWRlckluZm9PdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRT
aGFkZXJJbmZvICptc2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8pOwogCit2
b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3Rh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxz
dGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisK
K2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNoYWRlclN0
YWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpz
dHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlcklu
Zm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVpdmFsZW50IHNoYWRv
dyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KK3Vp
bnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5j
KTsKKwogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQppbmRleCBjYWEwZTU2MTk3NDc0
MWUxOGU5YTg4ZGY0NTMxYWQ1M2VjZDhlYzFiLi40Y2Y3MTdhYTZlMmQ2MTI2YjkzODRkMjc5Y2Vk
NDVlNGE2YTkxZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0
aWxzLm1tCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8c3BpcnZfbXNsLmhwcD4KIAogI2lu
Y2x1ZGUgImNvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvRGlzcGxheU10bC5oIgogCkBAIC0yMiwxMiArMjMsMTMgQEAgbmFtZXNwYWNlIG10bAog
ewogbmFtZXNwYWNlCiB7Ci0KIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ1RleHR1cmVEZXNj
U2V0ICAgICAgICAgICAgICA9IDA7CiBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdEZWZhdWx0
VW5pZm9ybUFuZFhmYkRlc2NTZXQgPSAxOwogY29uc3RleHByIHVpbnQzMl90IGtHbHNsYW5nRHJp
dmVyVW5pZm9ybXNEZXNjU2V0ICAgICAgID0gMjsKIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFu
Z1NoYWRlclJlc291cmNlRGVzY1NldCAgICAgICA9IDM7CiAKK2NvbnN0ZXhwciBjaGFyIGtTaGFk
b3dTYW1wbGVyQ29tcGFyZU1vZGVzVmFyTmFtZVtdID0gIkFOR0xFU2hhZG93Q29tcGFyZU1vZGVz
IjsKKwogLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUg
dG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgogLy8gc2xvdDpjb3VudCBwYWly
KQogdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9CkBAIC01Niw5ICs1OCwxMyBAQCB2
b2lkIFJlc2V0R2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvKEdsc2xhbmdQcm9ncmFtSW50ZXJm
YWNlSW5mbyAqcHJvZ3JhbUludGVyZgogICAgIHN0YXRpY19hc3NlcnQoa0RyaXZlclVuaWZvcm1z
QmluZGluZ0luZGV4ICE9IDAsICJrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggbXVzdCBub3Qg
YmUgMCIpOwogfQogCisKIEdsc2xhbmdTb3VyY2VPcHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMo
KQogewogICAgIEdsc2xhbmdTb3VyY2VPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5lbXVs
YXRlVHJhbnNmb3JtRmVlZGJhY2sgPSB0cnVlOworICAgIC8vIFdlIGNhbiBlYXJseSBvdXQgaW4g
dGhlIE1TTCBvbmNlIHRyYW5zZm9ybSBmZWVkYmFjayBpcyB3cml0dGVuCisgICAgb3B0aW9ucy50
cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuID0gdHJ1ZTsKICAgICByZXR1cm4gb3B0aW9uczsK
IH0KIApAQCAtNzksOCArODUsOCBAQCBzcHY6OkV4ZWN1dGlvbk1vZGVsIFNoYWRlclR5cGVUb1Nw
dkV4ZWN1dGlvbk1vZGVsKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB2b2lkIEJpbmRCdWZm
ZXJzKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IHNwaXJ2X2Nyb3NzOjpTbWFsbFZlY3RvcjxzcGlydl9jcm9zczo6UmVzb3VyY2U+ICZy
ZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCi0g
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWlu
dDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywK
KyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQz
Ml90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6
Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKICAgICAg
ICAgICAgICAgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heEdMVUJPQmluZGluZ3M+ICp1Ym9C
aW5kaW5nc1JlbWFwT3V0LAogICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBr
TWF4U2hhZGVyWEZCcz4gKnhmYkJpbmRpbmdSZW1hcE91dCwKICAgICAgICAgICAgICAgICAgYm9v
bCAqdWJvQXJndW1lbnRCdWZmZXJVc2VkKQpAQCAtMjUzLDMwICsyNTksNTAgQEAgdm9pZCBHZXRB
c3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wgJmNv
bXBpbGVyTXNsLAogICAgIH0KIH0KIAotc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVk
TXNsKGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkU291cmNlKQorc3RkOjpzdHJpbmcgUG9z
dFByb2Nlc3NUcmFuc2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1wbGVyLCBjb25zdCBzdGQ6OnN0
cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKIHsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2U7CisgICAg
aWYgKGhhc0RlcHRoU2FtcGxlcikKKyAgICB7CisgICAgICAgIC8vIEFkZCBBTkdMRVNoYWRvd0Nv
bXBhcmVNb2RlcyB2YXJpYWJsZSB0byBtYWluKCksIFdlIG5lZWQgdG8gYWRkIGhlcmUgYmVjYXVz
ZSBpdCBpcyB0aGUKKyAgICAgICAgLy8gb25seSB3YXkgd2l0aG91dCBtb2RpZnlpbmcgc3BpcnYt
Y3Jvc3MuCisgICAgICAgIHN0ZDo6cmVnZXggbWFpbkRlY2xhcmVSZWdleCgKKyAgICAgICAgICAg
IFIiKCgodmVydGV4fGZyYWdtZW50fGtlcm5lbClccytbX2EtekEtWjAtOTw+XStccyttYWluW15c
KF0qXCgpKSIpOworICAgICAgICBzdGQ6OnN0cmluZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBz
dGQ6OnN0cmluZygiJDFjb25zdGFudCB1bmlmb3JtPHVpbnQ+ICoiKSArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVz
VmFyTmFtZSArICJbW2J1ZmZlcigiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyKGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KSAr
ICIpXV0sICI7CisgICAgICAgIHNvdXJjZSA9IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVk
U291cmNlLCBtYWluRGVjbGFyZVJlZ2V4LCBtYWluRGVjbGFyZVJlcGxhY2VTdHIpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2UgPSB0cmFuc2xhdGVkU291cmNlOworICAg
IH0KKwogICAgIC8vIEFkZCBmdW5jdGlvbl9jb25zdGFudCBhdHRyaWJ1dGUgdG8gZ2xfU2FtcGxl
TWFzay4KICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIHZhcnlpbmcgaXMgb25seSB1c2VkIHdoZW4g
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIGlzIHRydWUsCiAgICAgLy8gdGhlIHNwaXJ2LWNyb3Nz
IGRvZXNuJ3QgYXNzaWduIGZ1bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBp
dCB3b24ndCBiZSBkZWFkLWNvZGUKICAgICAvLyByZW1vdmVkIHdoZW4gQU5HTEVDb3ZlcmFnZU1h
c2tFbmFibGVkPWZhbHNlLgogICAgIHN0ZDo6c3RyaW5nIHNhbXBsZU1hc2tSZXBsYWNlU3RyID0g
c3RkOjpzdHJpbmcoIltbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KCIpICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tF
bmFibGVkQ29uc3ROYW1lICsgIildXSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildXSI7CiAK
ICAgICAvLyBUaGlzIHJlcGxhY2VzICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2tdXSIKICAg
ICAvLyAgICAgICAgICB3aXRoICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2ssIGZ1bmN0aW9u
X2NvbnN0YW50KEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCldXSIKICAgICBzdGQ6OnJlZ2V4IHNh
bXBsZU1hc2tEZWNsYXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSki
KTsKLSAgICByZXR1cm4gc3RkOjpyZWdleF9yZXBsYWNlKHRyYW5zbGF0ZWRTb3VyY2UsIHNhbXBs
ZU1hc2tEZWNsYXJlUmVnZXgsIHNhbXBsZU1hc2tSZXBsYWNlU3RyKTsKKyAgICByZXR1cm4gc3Rk
OjpyZWdleF9yZXBsYWNlKHNvdXJjZSwgc2FtcGxlTWFza0RlY2xhcmVSZWdleCwgc2FtcGxlTWFz
a1JlcGxhY2VTdHIpOwogfQogCiAvLyBDdXN0b21pemVkIHNwaXJ2LWNyb3NzIGNvbXBpbGVyCiBj
bGFzcyBTcGlydlRvTXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNM
CiB7CiAgIHB1YmxpYzoKLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMy
X3Q+ICYmc3ByaXYpIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorICAgIFNw
aXJ2VG9Nc2xDb21waWxlcihDb250ZXh0ICpjb250ZXh0LCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4g
JiZzcHJpdikKKyAgICAgICAgOiBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0woc3ByaXYpLCBtQ29u
dGV4dChjb250ZXh0KQorICAgIHt9CiAKICAgICB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4
ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNo
TWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisgICAgICAg
ICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZi
T3JpZ2luYWxCaW5kaW5ncywKICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNhbXBs
ZXJCaW5kaW5nTWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKICAgICAgICAgICAgICAgICAg
ICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsU2hhZGVySW5mb091dCkKICAgICB7CkBAIC0zMjgs
OCArMzU0LDcgQEAgY2xhc3MgU3BpcnZUb01zbENvbXBpbGVyIDogcHVibGljIHNwaXJ2X2Nyb3Nz
OjpDb21waWxlck1TTAogICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5n
cyBmb3IgdGV4dHVyZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKICAgICAg
ICAgICAgIC8vIGluc3RlYWQgb2YgdXNpbmcgYXJndW1lbnQgYnVmZmVyLgogICAgICAgICAgICAg
c3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0ds
c2xhbmdUZXh0dXJlRGVzY1NldCk7Ci0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJN
U0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldCgKLSAgICAgICAgICAgICAgICBrR2xzbGFu
Z0RlZmF1bHRVbmlmb3JtQW5kWGZiRGVzY1NldCk7CisgICAgICAgICAgICBzcGlydl9jcm9zczo6
Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RlZmF1bHRV
bmlmb3JtQW5kWGZiRGVzY1NldCk7CiAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJN
U0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1zRGVz
Y1NldCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQwLDMxICszNjUsNzQyIEBAIGNs
YXNzIFNwaXJ2VG9Nc2xDb21waWxlciA6IHB1YmxpYyBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wK
IAogICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21w
T3B0KTsKIAorICAgICAgICBhZGRCdWlsdEluUmVzb3VyY2VzKCk7CisgICAgICAgIGFuYWx5emVT
aGFkZXJWYXJpYWJsZXMoKTsKKwogICAgICAgICAvLyBBY3R1YWwgY29tcGlsYXRpb24KICAgICAg
ICAgbXNsU2hhZGVySW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgUG9z
dFByb2Nlc3NUcmFuc2xhdGVkTXNsKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgp
KTsKKyAgICAgICAgICAgIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChtSGFzRGVwdGhTYW1wbGVy
LCBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CiAKICAgICAgICAgLy8gUmV0
cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50cwogICAgICAgICBHZXRBc3Np
Z25lZFNhbXBsZXJCaW5kaW5ncygqdGhpcywgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1YWxT
YW1wbGVyQmluZGluZ3MpOwogICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIE92ZXJyaWRlIENv
bXBpbGVyTVNMCisgICAgdm9pZCBlbWl0X2hlYWRlcigpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmVtaXRfaGVhZGVyKCk7CisgICAgICAgIGlmICgh
bUhhc0RlcHRoU2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNlIGlzc3VlczoKKyAgICAg
ICAgLy8gLSBzcHJpdl9jcm9zcyBhbHdheXMgdHJhbnNsYXRlcyBzaGFkb3cgdGV4dHVyZSdzIHNh
bXBsaW5nIHRvIHNhbXBsZV9jb21wYXJlKCkgYW5kIGRvZXNuJ3QKKyAgICAgICAgLy8gdGFrZSBp
bnRvIGFjY291bnQgR0xfVEVYVFVSRV9DT01QQVJFX01PREU9R0xfTk9ORS4KKyAgICAgICAgLy8g
LSBvbiBtYWNPUywgZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBhcmFtZXRlciBpcyBub3Qgc3Vw
cG9ydGVkIGluIHNhbXBsZV9jb21wYXJlKCkuCisgICAgICAgIC8vIC0gb24gZGV2aWNlcyBwcmlv
ciB0byBpT1MgR1BVIGZhbWlseSAzLCBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBtb2RlIG91
dHNpZGUgc2hhZGVyIGlzCisgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgIGlmICgh
bUNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd1J1bnRpbWVTYW1wbGVy
Q29tcGFyZU1vZGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGVtZW50KCIj
ZGVmaW5lIEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFIik7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0ZW1lbnQoImVudW0gY2xhc3MgQU5HTEVDb21wYXJlTW9kZSA6
IHVpbnQiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IE5vbmUgPSAwLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzLCIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICBMZXNzRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEdyZWF0
ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXJFcXVhbCwiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgTmV2ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEFsd2F5cywi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIE5vdEVxdWFsLCIpOworICAgICAgICBzdGF0ZW1lbnQoIn07Iik7CisgICAgICAgIHN0YXRl
bWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdM
RWNvbXBhcmUoVCBkZXB0aCwgVCBkcmVmLCBVbmlmb3JtT3JVSW50IGNvbXBhcmVNb2RlKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICBBTkdMRUNvbXBh
cmVNb2RlIG1vZGUgPSBzdGF0aWNfY2FzdDxBTkdMRUNvbXBhcmVNb2RlPihjb21wYXJlTW9kZSk7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgc3dpdGNoIChtb2RlKSIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21w
YXJlTW9kZTo6TGVzczoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4g
ZHJlZiA8IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNv
bXBhcmVNb2RlOjpMZXNzRXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgPD0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNl
IEFOR0xFQ29tcGFyZU1vZGU6OkdyZWF0ZXI6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAg
ICAgICAgcmV0dXJuIGRyZWYgPiBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
IGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6R3JlYXRlckVxdWFsOiIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmID49IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgICAgICAgICByZXR1cm4gMDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6QWx3YXlzOiIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgICAgIHJldHVybiAxOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2Fz
ZSBBTkdMRUNvbXBhcmVNb2RlOjpFcXVhbDoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
ICAgICByZXR1cm4gZHJlZiA9PSBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
IGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICAgICAgcmV0dXJuIGRyZWYgIT0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICBkZWZhdWx0OiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVy
biAxOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9
Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFw
cGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIC8v
IDJEIFBDRiBzYW1wbGluZworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRl
bWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlUENGKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3Zh
bHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFy
ZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNp
ZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQyIGRpbXMgPSBmbG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwgdGV4dHVyZS5nZXRfaGVpZ2h0
KCkpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29vcmQgPSBjb29yZCAq
IGRpbXM7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAg
LyBkaW1zOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgd2VpZ2h0ID0gZnJhY3Qo
aW1nQ29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0bCA9IEFOR0xFY29t
cGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAgICAg
ICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUo
cywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAgICAg
ICJvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJsID0gQU5HTEVjb21wYXJlKHRleHR1cmUu
c2FtcGxlKHMsIGNvb3JkICsgZmxvYXQyKDAuMCwgdGV4ZWxTaXplLnkpLCAiCisgICAgICAgICAg
ICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1v
ZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBiciA9IEFOR0xFY29tcGFyZSh0
ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIHRleGVsU2l6ZSwgb3B0aW9ucywgIgorICAgICAgICAg
ICAgICAgICAgIm9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0Lngp
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3
ZWlnaHQueCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBtaXgodG9wLCBib3R0
b20sIHdlaWdodC55KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5l
ZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCksICIKKyAg
ICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXyki
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgLy8gQ3ViZSBQQ0Ygc2FtcGxpbmcKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAg
ICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAg
ICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJl
TW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVudCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBy
ZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zKSwgY29t
cGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAg
ICAgLy8gMkQgYXJyYXkgUENGIHNhbXBsaW5nCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAg
ICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihk
ZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIK
KyAgICAgICAgICAgICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIGlu
dDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9k
ZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2lmIGRl
ZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIg
ZGltcyA9IGZsb2F0Mih0ZXh0dXJlLmdldF93aWR0aCgpLCB0ZXh0dXJlLmdldF9oZWlnaHQoKSk7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICogZGlt
czsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRp
bXM7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB3ZWlnaHQgPSBmcmFjdChpbWdD
b29yZCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVjb21wYXJl
KHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAg
ICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1w
bGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAg
ICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFy
ZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBibCA9IEFOR0xFY29tcGFy
ZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIGZsb2F0MigwLjAsIHRleGVsU2l6ZS55KSwgIgor
ICAgICAgICAgICAgICAgICAgImFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVl
LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJy
ID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4ZWxTaXplLCBhcnJh
eSwgIgorICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUs
IHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdG9w
ID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9h
dCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHJldHVybiBtaXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQs
IGFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92
YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiAg
Ly8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgifSIp
OworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIHRleHR1cmUncyBzYW1w
bGVfY29tcGFyZSgpIHdyYXBwZXIKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBz
dGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNv
bXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRl
bWVudCgKKyAgICAgICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmlu
ZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQs
IGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNo
YWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwg
Y29tcGFyZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIj
ZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7
CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBU
IEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBv
cHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0
ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNv
bXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAg
ICAgICAgICAgICAgICJpbnQyKDApLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0
YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkPFQ+IHRl
eHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAg
ICAiY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFy
ZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNp
ZiBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgb2Zmc2V0LCAiCisgICAgICAgICAgICAg
ICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNl
bmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsK
KworICAgICAgICAvLyBDdWJlIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAi
aW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBP
cHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAgICAgICIjaWYgZGVm
aW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVO
VElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIK
KyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMpOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAg
ICAgICAiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3Zh
bHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FN
UExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0
dXJuIEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgbGV2
ZWwoMCksICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUpOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3Mgc2FtcGxlX2Nv
bXBhcmUoKSB3cmFwcGVyCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVt
ZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVy
ZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsICIKKyAgICAgICAgICAgICAgICAgICJ1aW50IGFy
cmF5LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZv
cm1PclVJbnQgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgIiNp
ZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExF
Ul9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJu
IEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoCisg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBh
cnJheSwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZs
b2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBh
cmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBj
b21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgaW50MigwKSwgc2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFO
R0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZs
b2F0MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBh
cmVfdmFsdWUsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICAgICAg
ICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiI2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01Q
QVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQ
Q0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgor
ICAgICAgICAgICAgICAgICAgIm9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgb2Zmc2V0
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9
Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQgdGV4dHVyZSdzIGdl
bmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFwcGVyIGZ1
bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAg
ICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSki
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwg
cywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNo
YWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwg
b2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1l
bnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBz
dGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBs
ZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92
YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4
dHVyZSwgcywgY29vcmQsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAg
ICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJp
bnQyIG9mZnNldCwgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21w
YXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUo
dGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAg
ICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBP
cHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5l
IFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29v
cmQsIE9wdCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1
ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVy
ZSwgcywgY29vcmQsIG9wdGlvbnMsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAg
ICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIp
OworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIEN1YmUgdGV4dHVyZSdzIGdl
bmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxv
YXQzIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5p
Zm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJu
IEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsICIK
KyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUocywgY29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAg
IHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUg
VW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1
cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgor
ICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdM
RXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25z
LCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zKTsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5j
dGlvbgorICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVy
ZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50
ICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKyAgICAgICAgICAg
ICAgICAgICJmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVN
b2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
aWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0
dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAg
ICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCwgYXJyYXksIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9y
VUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgy
ZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAg
ICAgICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJh
eSwgaW50MigwKSwgY29tcGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0Nv
bXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwgT3B0IG9wdGlv
bnMsIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1
ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
cmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21w
YXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0LCBzaGFkb3dD
b21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5
LCBvcHRpb25zLCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAg
ICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0
YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUo
ZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAi
CisgICAgICAgICAgICAgICAgICAiYXJyYXksIE9wdCBvcHRpb25zLCBmbG9hdCBjb21wYXJlX3Zh
bHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0
dXJlLCBzLCBjb29yZCwgYXJyYXksIG9wdGlvbnMsIGludDIoMCksICIKKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworICAgIH0KKworICAgIHN0ZDo6c3Ry
aW5nIHRvX2Z1bmN0aW9uX25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZp
bWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNBcnJheU9mZnNldHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGhhc09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzRHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxv
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbkxvZCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmICghaGFzRHJlZikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVuY3Rpb25fbmFtZShpbWcs
IGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0
cywgaGFzT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNHcmFkLCBoYXNEcmVmLCBsb2QsIG1pbkxvZCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBVc2UgY3VzdG9tIEFOR0xFdGV4dHVyZSBmdW5jdGlvbiBpbnN0
ZWFkIG9mIHVzaW5nIGJ1aWx0LWluIHNhbXBsZV9jb21wYXJlKCkKKyAgICAgICAgcmV0dXJuICJB
TkdMRXRleHR1cmUiOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9uX2FyZ3Mo
c3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgY29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb29y
ZENvbXBvbmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk
cmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ3JhZFgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBncmFkWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBiaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgY29tcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNh
bXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbmxvZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBGb3J3YXJkKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICBzdGQ6OnN0cmluZyBhcmdz
V2l0aG91dERyZWYgPSBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1bmN0aW9uX2FyZ3Mo
CisgICAgICAgICAgICBpbWcsIGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLCBpc1Byb2osIGNv
b3JkLCBjb29yZENvbXBvbmVudHMsIDAsIGdyYWRYLCBncmFkWSwgbG9kLAorICAgICAgICAgICAg
Y29mZnNldCwgb2Zmc2V0LCBiaWFzLCBjb21wLCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOwor
CisgICAgICAgIGlmICghZHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBGb3J3YXJk
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJnc1dpdGhvdXREcmVmOworICAgICAg
ICB9CisgICAgICAgIC8vIENvbnZlcnQgdG8gYXJndW1lbnRzIHRvIEFOR0xFdGV4dHVyZS4KKyAg
ICAgICAgc3RkOjpzdHJpbmcgYXJncyA9IHRvX2V4cHJlc3Npb24oaW1nKTsKKyAgICAgICAgYXJn
cyArPSAiLCAiOworICAgICAgICBhcmdzICs9IGFyZ3NXaXRob3V0RHJlZjsKKyAgICAgICAgYXJn
cyArPSAiLCAiOworCisgICAgICAgIGZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSBmb3J3YXJkICYmIHNob3VsZF9mb3J3YXJkKGRyZWYpOworICAgICAgICBjb25zdCBzcGly
dl9jcm9zczo6U1BJUlR5cGUgJmRyZWZUeXBlID0gZXhwcmVzc2lvbl90eXBlKGRyZWYpOworICAg
ICAgICBzdGQ6OnN0cmluZyBkcmVmRXhwcjsKKyAgICAgICAgdWludDMyX3QgYWx0Q29vcmRDb21w
b25lbnQgPSAwOworICAgICAgICBzd2l0Y2ggKGltZ1R5cGUuaW1hZ2UuZGltKQorICAgICAgICB7
CisgICAgICAgICAgICBjYXNlIHNwdjo6RGltMkQ6CisgICAgICAgICAgICAgICAgYWx0Q29vcmRD
b21wb25lbnQgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBz
cHY6OkRpbTNEOgorICAgICAgICAgICAgY2FzZSBzcHY6OkRpbUN1YmU6CisgICAgICAgICAgICAg
ICAgYWx0Q29vcmRDb21wb25lbnQgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc1Byb2opCisgICAgICAgICAg
ICBkcmVmRXhwciA9IHNwaXJ2X2Nyb3NzOjpqb2luKHRvX2VuY2xvc2VkX2V4cHJlc3Npb24oZHJl
ZiksICIgLyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19l
eHRyYWN0X2NvbXBvbmVudF9leHByZXNzaW9uKGNvb3JkLCBhbHRDb29yZENvbXBvbmVudCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmVmRXhwciA9IHRvX2V4cHJlc3Npb24oZHJlZik7
CisKKyAgICAgICAgaWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Nyb3NzOjpTUElSVHlw
ZTo6SGFsZikKKyAgICAgICAgICAgIGRyZWZFeHByID0gY29udmVydF90b19mMzIoZHJlZkV4cHIs
IDEpOworCisgICAgICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisgICAgICAgIGFyZ3MgKz0gIiwgIjsK
KyAgICAgICAgYXJncyArPSB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbihpbWcpOworCisg
ICAgICAgIGlmIChwRm9yd2FyZCkKKyAgICAgICAgeworICAgICAgICAgICAgKnBGb3J3YXJkID0g
Zm9yd2FyZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKworICAg
IC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlwZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cg
Y29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdpdGggdGhlIHNoYWRv
dyBzYW1wbGVyLiBOT1RFKGhxbGUpOiBUaGlzIGlzIGp1c3QgOTAlIGNvcHkgb2Ygc3BpcnZfbXNs
J3MgY29kZS4KKyAgICAvLyBUaGUgYmV0dGVyIHdheSBpcyBtb2RpZnlpbmcgYW5kIGNyZWF0aW5n
IGEgUFIgb24gc3BpcnYtY3Jvc3MgcmVwbyBkaXJlY3RseS4gQnV0IHRoaXMgc2hvdWxkCisgICAg
Ly8gYmUgYSB3b3JrIGFyb3VuZCBzb2x1dGlvbiBmb3Igbm93LgorICAgIHZvaWQgZW1pdF9mdW5j
dGlvbl9wcm90b3R5cGUoc3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbiAmZnVuYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpCaXRzZXQgJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIC8vIFR1cm4gb2ZmIGNsYW5nLWZvcm1hdCB0byBlYXNpZXIg
Y29tcGFyZSB3aXRoIG9yaWdpbmFsIGNvZGUKKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgor
ICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3BpcnZfY3Jvc3M7CisgICAgICAgIHVzaW5nIG5hbWVz
cGFjZSBzcHY7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyAgICAgICAgaWYgKGZ1
bmMuc2VsZiAhPSBpci5kZWZhdWx0X2VudHJ5X3BvaW50KQorICAgICAgICAgICAgYWRkX2Z1bmN0
aW9uX292ZXJsb2FkKGZ1bmMpOworCisgICAgICAgIGxvY2FsX3ZhcmlhYmxlX25hbWVzID0gcmVz
b3VyY2VfbmFtZXM7CisgICAgICAgIHN0cmluZyBkZWNsOworCisgICAgICAgIHByb2Nlc3Npbmdf
ZW50cnlfcG9pbnQgPSBmdW5jLnNlbGYgPT0gaXIuZGVmYXVsdF9lbnRyeV9wb2ludDsKKworICAg
ICAgICAvLyBNZXRhbCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGlu
ZSBvdGhlcndpc2UgdGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVy
IGluIGEgc2luZ2xlIE1ldGFsbGliLgorICAgICAgICBpZiAoIXByb2Nlc3NpbmdfZW50cnlfcG9p
bnQpCisgICAgICAgICAgICBzdGF0ZW1lbnQoInN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygo
YWx3YXlzX2lubGluZSkpIik7CisKKyAgICAgICAgYXV0byAmdHlwZSA9IGdldDxTUElSVHlwZT4o
ZnVuYy5yZXR1cm5fdHlwZSk7CisKKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYg
bXNsX29wdGlvbnMuZm9yY2VfbmF0aXZlX2FycmF5cykKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gV2UgY2Fubm90IHJldHVybiBuYXRpdmUgYXJyYXlzIGluIE1TTCwgc28gInJldHVybiIgdGhy
b3VnaCBhbiBvdXQgdmFyaWFibGUuCisgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlY2wgKz0gZnVuY190
eXBlX2RlY2wodHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIgIjsKKyAgICAg
ICAgZGVjbCArPSB0b19uYW1lKGZ1bmMuc2VsZik7CisgICAgICAgIGRlY2wgKz0gIigiOworCisg
ICAgICAgIGlmICghdHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25zLmZvcmNlX25hdGl2
ZV9hcnJheXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZha2UgYXJyYXlzIHJldHVybnMg
Ynkgd3JpdGluZyB0byBhbiBvdXQgYXJyYXkgaW5zdGVhZC4KKyAgICAgICAgICAgIGRlY2wgKz0g
InRocmVhZCAiOworICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2dsc2wodHlwZSk7CisgICAg
ICAgICAgICBkZWNsICs9ICIgKCZTUElSVl9Dcm9zc19yZXR1cm5fdmFsdWUpIjsKKyAgICAgICAg
ICAgIGRlY2wgKz0gdHlwZV90b19hcnJheV9nbHNsKHR5cGUpOworICAgICAgICAgICAgaWYgKCFm
dW5jLmFyZ3VtZW50cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIGRlY2wgKz0gIiwgIjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobXNsX29wdGlvbnMuYXJndW1lbnRfYnVmZmVycykKKyAgICAgICAg
ICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfYXJndW1lbnRfYnVmZmVyKCFmdW5jLmFy
Z3VtZW50cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGVudHJ5X3BvaW50X2FyZ3NfY2xhc3NpYyghZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisK
KyAgICAgICAgICAgIC8vIElmIGVudHJ5IHBvaW50IGZ1bmN0aW9uIGhhcyB2YXJpYWJsZXMgdGhh
dCByZXF1aXJlIGVhcmx5IGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkg
ZWFjaCBoYXZlIGFuIGVtcHR5IGluaXRpYWxpemVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBkb25lIGF0IHRoaXMgbGF0ZSBzdGFnZSBiZWNhdXNlIHRo
ZSBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uCisgICAgICAgICAgICAvLyBpcyBjbGVhcmVkIGFm
dGVyIGVhY2ggY29tcGlsYXRpb24gcGFzcy4KKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQg
OiB2YXJzX25lZWRpbmdfZWFybHlfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byAmZWRfdmFyID0gZ2V0PFNQSVJWYXJpYWJsZT4odmFyX2lkKTsKKyAgICAg
ICAgICAgICAgICBJRCAmaW5pdGlhbGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisgICAgICAg
ICAgICAgICAgaWYgKCFpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6
ZXIgPSBpci5pbmNyZWFzZV9ib3VuZF9ieSgxKTsKKworICAgICAgICAgICAgICAgIC8vIERvIG5v
dCBvdmVycmlkZSBwcm9wZXIgaW5pdGlhbGl6ZXJzLgorICAgICAgICAgICAgICAgIGlmIChpci5p
ZHNbaW5pdGlhbGl6ZXJdLmdldF90eXBlKCkgPT0gVHlwZU5vbmUgfHwgaXIuaWRzW2luaXRpYWxp
emVyXS5nZXRfdHlwZSgpID09IFR5cGVFeHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICBz
ZXQ8U1BJUkV4cHJlc3Npb24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0
eXBlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0
byAmYXJnIDogZnVuYy5hcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90
IG5hbWVfaWQgPSBhcmcuaWQ7CisKKyAgICAgICAgICAgIGF1dG8gKnZhciA9IG1heWJlX2dldDxT
UElSVmFyaWFibGU+KGFyZy5pZCk7CisgICAgICAgICAgICBpZiAodmFyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIHRo
ZSB2YXJpYWJsZSwgbWFrZSBzdXJlIHdlIG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCisg
ICAgICAgICAgICAgICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisg
ICAgICAgICAgICAgICAgaWYgKGFyZy5hbGlhc19nbG9iYWxfdmFyaWFibGUgJiYgdmFyLT5iYXNl
dmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIG5hbWVfaWQgPSB2YXItPmJhc2V2YXJpYWJs
ZTsKKworICAgICAgICAgICAgICAgIHZhci0+cGFyYW1ldGVyID0gJmFyZzsgLy8gSG9sZCBhIHBv
aW50ZXIgdG8gdGhlIHBhcmFtZXRlciBzbyB3ZSBjYW4gaW52YWxpZGF0ZSB0aGUgcmVhZG9ubHkg
ZmllbGQgaWYgbmVlZGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGRfbG9jYWxf
dmFyaWFibGVfbmFtZShuYW1lX2lkKTsKKworICAgICAgICAgICAgZGVjbCArPSBhcmd1bWVudF9k
ZWNsKGFyZyk7CisKKyAgICAgICAgICAgIGJvb2wgaXNfZHluYW1pY19pbWdfc2FtcGxlciA9IGhh
c19leHRlbmRlZF9kZWNvcmF0aW9uKGFyZy5pZCwgU1BJUlZDcm9zc0RlY29yYXRpb25EeW5hbWlj
SW1hZ2VTYW1wbGVyKTsKKworICAgICAgICAgICAgYXV0byAmYXJnX3R5cGUgPSBnZXQ8U1BJUlR5
cGU+KGFyZy50eXBlKTsKKyAgICAgICAgICAgIGlmIChhcmdfdHlwZS5iYXNldHlwZSA9PSBTUElS
VHlwZTo6U2FtcGxlZEltYWdlICYmICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBwbGFuZSBhcmdz
IGZvciBtdWx0aXBsYW5hciB0ZXh0dXJlCisgICAgICAgICAgICAgICAgdWludDMyX3QgcGxhbmVz
ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHByX3NhbXBsZXIgPSBmaW5k
X2NvbnN0ZXhwcl9zYW1wbGVyKG5hbWVfaWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoY29u
c3RleHByX3NhbXBsZXItPnljYmNyX2NvbnZlcnNpb25fZW5hYmxlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcGxhbmVzID0gY29uc3RleHByX3NhbXBsZXItPnBsYW5lczsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspCisgICAgICAgICAgICAg
ICAgICAgIGRlY2wgKz0gam9pbigiLCAiLCBhcmd1bWVudF9kZWNsKGFyZyksIHBsYW5lX25hbWVf
c3VmZml4LCBpKTsKKworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBz
YW1wbGVyIGFyZyBmb3IgU2FtcGxlZEltYWdlIHRleHR1cmUKKyAgICAgICAgICAgICAgICBpZiAo
YXJnX3R5cGUuaW1hZ2UuZGltICE9IERpbUJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgZGVj
bCArPSBqb2luKCIsIHRocmVhZCBjb25zdCAiLCBzYW1wbGVyX3R5cGUoYXJnX3R5cGUpLCAiICIs
IHRvX3NhbXBsZXJfZXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gTWFudWZhY3R1cmUgYXV0b21hdGljIHN3aXp6bGUgYXJnLgorICAgICAgICAgICAg
aWYgKG1zbF9vcHRpb25zLnN3aXp6bGVfdGV4dHVyZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2lt
YWdlcyAmJiBpc19zYW1wbGVkX2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmCisgICAgICAgICAgICAg
ICAgIWlzX2R5bmFtaWNfaW1nX3NhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAg
ICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIq
ICIgOiAiJiAiLCB0b19zd2l6emxlX2V4cHJlc3Npb24oYXJnLmlkKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChidWZmZXJzX3JlcXVpcmluZ19hcnJheV9sZW5ndGguY291bnQo
bmFtZV9pZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJy
YXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICBkZWNsICs9IGpv
aW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLCB0b19idWZm
ZXJfc2l6ZV9leHByZXNzaW9uKG5hbWVfaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzX3NhbXBsZWRfaW1hZ2VfdHlwZShhcmdfdHlwZSkgJiYgYXJnX3R5cGUuaW1hZ2Uu
ZGVwdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkg
PSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgc2hh
ZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIHRoZSBhcmd1bWVudCBzZXF1ZW5jZToKKyAgICAgICAg
ICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGFyZ19pc19h
cnJheSA/ICIqICIgOiAiJiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRv
d0NvbXBhcmVNb2RlRXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCZhcmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKyAgICAgICAgICAgICAg
ICBkZWNsICs9ICIsICI7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIpIjsKKyAgICAg
ICAgc3RhdGVtZW50KGRlY2wpOworCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorICAgIH0K
KworICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzIHBhc3NpbmcgZ2VuZXJh
dG9yIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorICAgIC8vIHRv
Z2V0aGVyIHdpdGggdGhlIHNoYWRvdyBzYW1wbGVyCisgICAgc3RkOjpzdHJpbmcgdG9fZnVuY19j
YWxsX2FyZyhjb25zdCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFyZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlkKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpDb21waWxl
ck1TTDo6dG9fZnVuY19jYWxsX2FyZyhhcmcsIGlkKTsKKworICAgICAgICBjb25zdCBzcGlydl9j
cm9zczo6U1BJUlR5cGUgJnR5cGUgPSBleHByZXNzaW9uX3R5cGUoaWQpOworCisgICAgICAgIGlm
IChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5pbWFnZS5kZXB0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1vZGUgZmxhZyB0byB0
aGUgYXJndW1lbnQgc2VxdWVuY2U6CisgICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBi
YXNlIHZhcmlhYmxlIGluIGNhc2Ugd2UgbmVlZCB0byBhcHBseSBhIHF1YWxpZmllZCBhbGlhcy4K
KyAgICAgICAgICAgIHVpbnQzMl90IHZhcl9pZCA9IDA7CisgICAgICAgICAgICBhdXRvICp2YXIg
ICAgICAgPSBtYXliZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZT4oaWQpOworICAgICAg
ICAgICAgaWYgKHZhcikKKyAgICAgICAgICAgICAgICB2YXJfaWQgPSB2YXItPmJhc2V2YXJpYWJs
ZTsKKworICAgICAgICAgICAgYXJnX3N0ciArPSAiLCAiICsgdG9TaGFkb3dDb21wYXJlTW9kZUV4
cHJlc3Npb24odmFyX2lkID8gdmFyX2lkIDogaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBhcmdfc3RyOworICAgIH0KKworICAgIC8vIEFkZGl0aW9uYWwgZnVuY3Rpb25zCisgICAgdm9p
ZCBhZGRCdWlsdEluUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhcklkID0g
YnVpbGRfY29uc3RhbnRfdWludF9hcnJheV9wb2ludGVyKCk7CisgICAgICAgIHNldF9uYW1lKHZh
cklkLCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUpOworICAgICAgICAvLyBUaGlz
IHNob3VsZCBuZXZlciBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFy
SWQsIHNwdjo6RGVjb3JhdGlvbkRlc2NyaXB0b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1v
ZGVzQmluZGluZ0luZGV4KTsKKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVj
b3JhdGlvbkJpbmRpbmcsIDApOworICAgICAgICBzZXRfZXh0ZW5kZWRfZGVjb3JhdGlvbih2YXJJ
ZCwgc3BpcnZfY3Jvc3M6OlNQSVJWQ3Jvc3NEZWNvcmF0aW9uUmVzb3VyY2VJbmRleFByaW1hcnks
IDApOworICAgICAgICBtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworICAg
IH0KKworICAgIHZvaWQgYW5hbHl6ZVNoYWRlclZhcmlhYmxlcygpCisgICAgeworICAgICAgICBp
ci5mb3JfZWFjaF90eXBlZF9pZDxzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlPihbdGhpc10odWlu
dDMyX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKyAgICAgICAg
ICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGdldF92YXJpYWJsZV9kYXRh
X3R5cGUodmFyKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHZhcklkICAgICAgICAgICAgICAgICAg
ICA9IHZhci5zZWxmOworCisgICAgICAgICAgICBpZiAodmFyLnN0b3JhZ2UgPT0gc3B2OjpTdG9y
YWdlQ2xhc3NVbmlmb3JtQ29uc3RhbnQgJiYgIWlzX2hpZGRlbl92YXJpYWJsZSh2YXIpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlw
ZSkgJiYgdHlwZS5pbWFnZS5kZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1IYXNEZXB0aFNhbXBsZXIgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gJmVudHJ5X2Z1bmMgPSB0aGlzLT5nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbj4oaXIu
ZGVmYXVsdF9lbnRyeV9wb2ludCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X2Z1bmMuZml4
dXBfaG9va3NfaW4ucHVzaF9iYWNrKFt0aGlzLCAmdHlwZSwgJnZhciwgdmFySWRdKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCgiY29uc3RhbnQgdW5pZm9y
bTx1aW50PiIsIGlzQXJyYXlUeXBlID8gIiogIiA6ICImICIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJyYXlUeXBlID8gIiA9ICYiIDogIiA9
ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fbmFtZShtQU5HTEVTaGFk
b3dDb21wYXJlTW9kZXNWYXJJZCksICJbIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGlydl9jcm9zczo6Y29udmVydF90b19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldF9tZXRhbF9yZXNvdXJjZV9pbmRleCh2YXIsIHNwaXJ2X2Ny
b3NzOjpTUElSVHlwZTo6SW1hZ2UpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiXTsiKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB0b1NoYWRv
d0NvbXBhcmVNb2RlRXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKyAgICB7CisgICAgICAgIGNvbnN0
ZXhwciBjaGFyIGtDb21wYXJlTW9kZVN1ZmZpeFtdID0gIl9Db21wTW9kZSI7CisgICAgICAgIGF1
dG8gKmNvbWJpbmVkICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0PHNwaXJ2X2Nyb3Nz
OjpTUElSQ29tYmluZWRJbWFnZVNhbXBsZXI+KGlkKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBl
eHByID0gdG9fZXhwcmVzc2lvbihjb21iaW5lZCA/IGNvbWJpbmVkLT5pbWFnZSA6IHNwaXJ2X2Ny
b3NzOjpWYXJpYWJsZUlEKGlkKSk7CisgICAgICAgIGF1dG8gaW5kZXggICAgICAgPSBleHByLmZp
bmRfZmlyc3Rfb2YoJ1snKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gc3RkOjpzdHJpbmc6Om5w
b3MpCisgICAgICAgICAgICByZXR1cm4gZXhwciArIGtDb21wYXJlTW9kZVN1ZmZpeDsKKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGltYWdlRXhwciA9IGV4cHIuc3Vi
c3RyKDAsIGluZGV4KTsKKyAgICAgICAgICAgIGF1dG8gYXJyYXlFeHByID0gZXhwci5zdWJzdHIo
aW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGltYWdlRXhwciArIGtDb21wYXJlTW9kZVN1ZmZp
eCArIGFycmF5RXhwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRleHQgKm1Db250ZXh0
OworICAgIHVpbnQzMl90IG1BTkdMRVNoYWRvd0NvbXBhcmVNb2Rlc1ZhcklkID0gMDsKKyAgICBi
b29sIG1IYXNEZXB0aFNhbXBsZXIgICAgICAgICAgICAgICAgICA9IGZhbHNlOwogfTsKIAotYW5n
bGU6OlJlc3VsdCBDb252ZXJ0U3BpcnZUb01zbCgKLSAgICBDb250ZXh0ICpjb250ZXh0LAotICAg
IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCi0gICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCi0gICAgY29uc3Qg
c3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGlu
Z3MsCi0gICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVy
QmluZGluZ3MsCi0gICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCi0gICAgVHJh
bnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRTaGFkZXJJbmZvT3V0KQorYW5nbGU6OlJlc3Vs
dCBDb252ZXJ0U3BpcnZUb01zbChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmluZywgdWludDMy
X3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBhbmdsZTo6SGFzaE1hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJp
bmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNh
bXBsZXJCaW5kaW5nTWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xh
dGVkU2hhZGVySW5mb091dCkKIHsKICAgICBpZiAoIXNwcml2Q29kZSB8fCBzcHJpdkNvZGUtPmVt
cHR5KCkpCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiAg
ICAgfQogCi0gICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3By
aXZDb2RlKSk7CisgICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKGNvbnRleHQsIHN0
ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CiAKICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1
c2VzIGV4Y2VwdGlvbnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCiAg
ICAgLy8gaW4gY2FzZSBvZiBlcnJvcj8KQEAgLTQzMSwxMiArMTE2NywxMyBAQCB2b2lkIEdsc2xh
bmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAog
ICAgICAgICAgICAgb3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8s
IHhmYk9ubHlTaGFkZXJTb3VyY2VPdXQsCiAgICAgICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFw
c1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CiAKLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0
aW9ucyhvcHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlw
ZTo6VmVydGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4ZmJPbmx5SW50ZXJm
YWNlSW5mbywgJnhmYk9ubHlWYXJpYWJsZU1hcHMpOworICAgICAgICBHbHNsYW5nQXNzaWduTG9j
YXRpb25zKG9wdGlvbnMsIHByb2dyYW1TdGF0ZS5nZXRFeGVjdXRhYmxlKCksIGdsOjpTaGFkZXJU
eXBlOjpWZXJ0ZXgsICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwcyk7CiAgICAgICAgICp4ZmJPbmx5VlNWYXJp
YWJsZUluZm9NYXBPdXQgPSBzdGQ6Om1vdmUoeGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSk7CiAgICAgfQogfQogCisKIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNo
YWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVy
U3RhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpDYXBzICZnbENhcHMsCkBAIC00NzgsNyArMTIxNSw3IEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZD
b2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHJhbnNsYXRlZFNoYWRlckluZm8gKm1zbFhmYk9ubHlTaGFkZXJJbmZvT3V0IC8qKiBudWxsYWJs
ZSAqLykKIHsKICAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBiaW5kaW5n
cyBnZW5lcmF0ZWQgYnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1hcC4KLSAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9PcmlnaW5hbEJp
bmRpbmdzOworICAgIGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3Jp
Z2luYWxCaW5kaW5nczsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOwogICAgIGZvciAodWlu
dDMyX3QgYnVmZmVySWR4ID0gMDsgYnVmZmVySWR4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJ
ZHgpCiAgICAgewpAQCAtNDg5LDcgKzEyMjYsNyBAQCBhbmdsZTo6UmVzdWx0IFNwaXJ2Q29kZVRv
TXNsKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gUmV0cmlldmUg
b3JpZ2luYWwgWEZCIGJ1ZmZlcnMgYmluZGluZ3MgcHJvZHVjZWQgYnkgZnJvbnQgZW5kLgotICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGlu
Z3M7CisgICAgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiB4ZmJPcmlnaW5hbEJp
bmRpbmdzOwogICAgIGZvciAodWludDMyX3QgYnVmZmVySWR4ID0gMDsgYnVmZmVySWR4IDwga01h
eFNoYWRlclhGQnM7ICsrYnVmZmVySWR4KQogICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYnVm
ZmVyTmFtZSA9IHJ4OjpHZXRYZmJCdWZmZXJOYW1lKGJ1ZmZlcklkeCk7CkBAIC01MzMsNiArMTI3
MCw1IEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKIAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfSAgLy8gbmFtZXNwYWNl
IG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29s
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKaW5kZXggODdkYzIxNzY0NjM3YTFiMWZmZTM5YmU3
MWMzZTI4NDRlODkxMjdjYS4uZjg1NzAzNDk5ZDYxYmNlZmIxOGUwNTkxMTI1Y2NkY2Q2NzYyYTkz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5
X3Bvb2wuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCmluZGV4
IDM2OGRiZjQ2Njk2YWQyZjU0ODEyMzMyOTQwYWZiYjQyMjNlN2JmYWQuLjdjYzg5OTAwNGVjN2Vh
ODNmZWY2ODVkZWFlZThjODBlMjk2NDY4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bv
b2wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDE2ICs1MiwxNSBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1
c2lvblF1ZXJ5UG9vbDo6YWxsb2NhdGVRdWVyeU9mZnNldChDb250ZXh0TXRsICpjb250ZXh0TXRs
LAogICAgIHsKICAgICAgICAgLy8gRmlyc3QgYWxsb2NhdGlvbgogICAgICAgICBBTkdMRV9UUlko
QnVmZmVyOjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3Jh
Z2VNb2RlUHJpdmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlS
ZXN1bHRTaXplLCBudWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwogICAgICAgICBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5nZXQoKS5sYWJlbCA9IEAiT2NjbHVzaW9uUXVlcnlQb29s
IjsKICAgICB9CiAgICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJl
c3VsdFNpemUgPiBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCiAgICAgewogICAgICAg
ICAvLyBEb3VibGUgdGhlIGNhcGFjaXR5CiAgICAgICAgIEFOR0xFX1RSWShCdWZmZXI6Ok1ha2VC
dWZmZXJXaXRoUmVzT3B0KGNvbnRleHRNdGwsIE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVy
UGFzc1Jlc3VsdHNQb29sLT5zaXplKCkgKiAyLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJQYXNzUmVzdWx0c1Bv
b2wtPnNpemUoKSAqIDIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKICAgICAgICAgbVJlbmRlclBhc3NSZXN1
bHRzUG9vbC0+Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7CiAgICAgfQogCkBA
IC04OCw2ICs4NywxMiBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9vbDo6YWxsb2Nh
dGVRdWVyeU9mZnNldChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIGlmIChjdXJyZW50T2Zm
c2V0ID09IDApCiAgICAgewogICAgICAgICBtUmVzZXRGaXJzdFF1ZXJ5ID0gY2xlYXJPbGRWYWx1
ZTsKKyAgICAgICAgaWYgKCFjbGVhck9sZFZhbHVlICYmICFjb250ZXh0TXRsLT5nZXREaXNwbGF5
KCktPmdldEZlYXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gSWYgb2xkIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IG5lZWRzIHRvIGJl
IHJldGFpbmVkIGFuZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlcgorICAgICAgICAgICAg
Ly8gcmVhZC13cml0ZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9mZnNldCB0byBzdG9yZSB0aGUg
b2xkIHZhbHVlIG9mIHRoZSBxdWVyeS4KKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5
T2Zmc2V0KGNvbnRleHRNdGwsIHF1ZXJ5LCBmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMTIsMTAgKzExNywzNCBAQCB2
b2lkIE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKENvbnRleHRN
dGwgKmNvbnRleHRNdGwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJVdGls
cyAmdXRpbHMgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgUmVu
ZGVyVXRpbHMgJnV0aWxzICAgICAgICAgICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+
Z2V0VXRpbHMoKTsKKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0
cjsKKyAgICAvLyBDb21iaW5lIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvZmZzZXRzIGFsbG9j
YXRlZCBmb3IgZmlyc3QgcXVlcnkKKyAgICBpZiAobUFsbG9jYXRlZFF1ZXJpZXNbMF0pCisgICAg
eworICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZiA9IG1BbGxvY2F0ZWRRdWVyaWVzWzBd
LT5nZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVyKCk7CisgICAgICAgIGNvbnN0IFZpc2liaWxpdHlC
dWZmZXJPZmZzZXRzTXRsICZhbGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgIG1BbGxvY2F0
ZWRRdWVyaWVzWzBdLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworICAgICAgICBp
ZiAoIW1SZXNldEZpcnN0UXVlcnkgJiYKKyAgICAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNw
bGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSWYgd2UgY2Fubm90IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBz
YW1lIGJ1ZmZlciBpbiBzaGFkZXIuIFdlIG5lZWQgdG8gY29weSB0aGUgb2xkCisgICAgICAgICAg
ICAvLyB2YWx1ZSBvZiBmaXJzdCBxdWVyeSB0byBmaXJzdCBvZmZzZXQgYWxsb2NhdGVkIGZvciBp
dC4KKyAgICAgICAgICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRF
bmNvZGVyKCk7CisgICAgICAgICAgICBibGl0RW5jb2Rlci0+Y29weUJ1ZmZlcihkc3RCdWYsIDAs
IG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wsIGFsbG9jYXRlZE9mZnNldHMuZnJvbnQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUp
OworICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10bCwg
ZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxp
dHlSZXN1bHQoY29udGV4dE10bCwgIW1SZXNldEZpcnN0UXVlcnksIGFsbG9jYXRlZE9mZnNldHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gQ29tYmluZSB0
aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggb2YgdGhl
IHJlbWFpbmluZyBxdWVyaWVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQWxsb2NhdGVk
UXVlcmllcy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0
ZWRRdWVyaWVzLnNpemUoKTsgKytpKQogICAgIHsKICAgICAgICAgUXVlcnlNdGwgKnF1ZXJ5ID0g
bUFsbG9jYXRlZFF1ZXJpZXNbaV07CiAgICAgICAgIGlmICghcXVlcnkpCkBAIC0xMjYsMTIgKzE1
NSwxMiBAQCB2b2lkIE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRz
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpCiAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVm
ID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1bHRCdWZmZXIoKTsKICAg
ICAgICAgY29uc3QgVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMg
PQogICAgICAgICAgICAgbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldEFsbG9jYXRlZFZpc2liaWxp
dHlPZmZzZXRzKCk7Ci0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRl
eHRNdGwsIC8qKiBrZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFtUmVzZXRGaXJzdFF1ZXJ5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRPZmZzZXRzLCBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB1dGlscy5jb21iaW5lVmlz
aWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCBmYWxzZSwgYWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRl
clBhc3NSZXN1bHRzUG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZHN0QnVmKTsKICAgICB9CiAKICAgICAvLyBSZXF1ZXN0IHN5bmNocm9uaXphdGlvbiBhbmQgY2xl
YW51cAotICAgIEJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5n
ZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKyAgICBibGl0RW5jb2RlciA9IGNvbnRleHRNdGwtPmdl
dEJsaXRDb21tYW5kRW5jb2RlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9j
YXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBRdWVyeU10bCAqcXVlcnkg
PSBtQWxsb2NhdGVkUXVlcmllc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRl
cl91dGlscy5oCmluZGV4IDZiOTY3ZGU4ZmQ0OTBhNDgxMzU4ODMyYTc2ZjIwNjU0ZGIwZTkxMTku
LmQwYTQ4MzcxOGZlMDU0NGRiNTdkZmU5ZWVlZWIzYzdiNDhlNGJhMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVu
ZGVyX3V0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaApAQCAtNiw2ICs2LDggQEAKIC8vIG10bF9y
ZW5kZXJfdXRpbHMuaDoKIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVu
ZGVyVXRpbHMsIHdoaWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRl
cnMKIC8vICAgIGZvciBjb252ZXJ0aW5nLCBibGl0dGluZywgY29weWluZyBhcyB3ZWxsIGFzIGdl
bmVyYXRpbmcgZGF0YSwgYW5kIG1hbnkgbW9yZS4KKy8vIE5PVEUoaHFsZSk6IENvbnNpZGVyIHNw
bGl0dGluZyB0aGlzIGNsYXNzIGludG8gbXVsdGlwbGUgY2xhc3NlcyBlYWNoIGRvaW5nIGRpZmZl
cmVudCB1dGlsaXRpZXMuCisvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KIC8vCiAK
ICNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXwpAQCAt
ODksNiArOTEsOCBAQCBzdHJ1Y3QgQ29sb3JCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMK
IHN0cnVjdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMKIHsKICAg
ICBUZXh0dXJlUmVmIHNyY1N0ZW5jaWw7CisgICAgdWludDMyX3Qgc3JjU3RlbmNpbExldmVsID0g
MDsKKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOwogfTsKIAogLy8gU3RlbmNpbCBi
bGl0IHZpYSBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4dHVy
ZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KQEAgLTMwOSwyMSArMzEzLDE3IEBAIGNsYXNzIEluZGV4
R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgcHVibGljOgogICAg
IHZvaWQgb25EZXN0cm95KCk7CiAKLSAgICAvLyBDb252ZXJ0IGluZGV4IGJ1ZmZlci4KICAgICBh
bmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpjb250ZXh0TXRs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4Q29u
dmVyc2lvblBhcmFtcyAmcGFyYW1zKTsKLSAgICAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4gaW5k
ZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXMoKS4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRl
VHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGlu
ZUxvb3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7CiAgICAgLy8gR2VuZXJhdGUgdHJpYW5nbGUg
ZmFuIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3RWxlbWVudHMoKS4KICAgICBhbmdsZTo6UmVzdWx0
IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29udGV4dE10bCAqY29udGV4
dE10bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdl
bmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpOwogCi0g
ICAgLy8gR2VuZXJhdGUgbGluZSBsb29wIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzKCku
CiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cyhDb250
ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJheVBhcmFtcyAmcGFy
YW1zKTsKLSAgICAvLyBHZW5lcmF0ZSBsaW5lIGxvb3AncyBsYXN0IHNlZ21lbnQgaW5kZXggYnVm
ZmVyIGZvciBnbERyYXdBcnJheXMoKS4KLSAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiBwcmltaXRp
dmUgcmVzdGFydCBpcyBub3QgZW5hYmxlZC4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGlu
ZUxvb3BMYXN0U2VnbWVudChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpcnN0VmVydGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RW
ZXJ0ZXgsCkBAIC0zNDAsNiArMzQwLDE4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmlu
YWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxv
b3BMYXN0U2VnbWVudEZyb21FbGVtZW50c0FycmF5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CiAKKyAgICBhbmdsZTo6
UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
aWNlc0dlbmVyYXRlZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRp
b25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKKyAgICBhbmdsZTo6
UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKICAgcHJpdmF0ZToKICAgICAvLyBJbmRleCBnZW5l
cmF0b3IgY29tcHV0ZSBwaXBlbGluZXM6CiAgICAgLy8gIC0gRmlyc3QgZGltZW5zaW9uOiBpbmRl
eCB0eXBlLgpAQCAtMzQ4LDcgKzM2MCw2IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmlu
YWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1
dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAogICAgICAgICAgICAg
ICAgICAgIGFuZ2xlOjpFbnVtU2l6ZTxnbDo6RHJhd0VsZW1lbnRzVHlwZT4oKT47CiAKLSAgICAv
LyBHZXQgY29tcHV0ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4K
ICAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IGdldEluZGV4Q29u
dmVyc2lvblBpcGVsaW5lKAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAg
ICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBzcmNUeXBlLApAQCAtMzc1LDcgKzM4Niw4IEBAIGNsYXNz
IEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAg
Ly8gTXVzdCBiZSBtdWx0aXBsZXMgb2Yga0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50CiAgICAg
ICAgIHVpbnQzMl90IGRzdE9mZnNldCk7CiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZh
bkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0
aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKTsKIAogICAg
IGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0FycmF5R1BV
KAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLApAQCAtMzkzLDYgKzQwNSwxMSBAQCBj
bGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAg
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlv
blBhcmFtcyAmcGFyYW1zKTsKIAorICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVmVydGljZXNQZXJQcmlt
aXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsK
KwogICAgIEluZGV4Q29udmVyc2lvblBpcGVsaW5lQXJyYXkgbUluZGV4Q29udmVyc2lvblBpcGVs
aW5lQ2FjaGVzOwogCiAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtVHJpRmFuRnJv
bUVsZW1BcnJheUdlbmVyYXRvclBpcGVsaW5lQ2FjaGVzOwpAQCAtNDI5LDcgKzQ0Niw3IEBAIGNs
YXNzIE1pcG1hcFV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgIHB1YmxpYzoKICAg
ICB2b2lkIG9uRGVzdHJveSgpOwogCi0gICAgLy8gQ29tcHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJh
dGlvbi4gT25seSBwb3NzaWJsZSBmb3IgM0QgdGV4dHVyZSBmb3Igbm93LgorICAgIC8vIENvbXB1
dGUgYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24uCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZU1p
cG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKQEAgLTQzNyw5ICs0NTQsMTUgQEAg
Y2xhc3MgTWlwbWFwVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKIAogICBwcml2YXRl
OgogICAgIHZvaWQgZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRB
cnJheU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10
bCk7CisgICAgdm9pZCBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChD
b250ZXh0TXRsICpjb250ZXh0TXRsKTsKIAogICAgIC8vIE1pcG1hcHMgZ2VuZXJhdGluZyBjb21w
dXRlIHBpcGVsaW5lOgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRl
Pj4gbTNETWlwR2VuZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0
ZVBpcGVsaW5lU3RhdGU+PiBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKyAgICBBdXRvT2JqQ1B0
cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxp
bmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtQ3ViZU1p
cEdlbmVyYXRvclBpcGVsaW5lOwogfTsKIAogLy8gVXRpbCBjbGFzcyBmb3IgaGFuZGxpbmcgcGl4
ZWxzIGNvcHkgYmV0d2VlbiBidWZmZXJzIGFuZCB0ZXh0dXJlcwpAQCAtNTQzLDYgKzU2NiwyMSBA
QCBjbGFzcyBWZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKICAgICBSZW5kZXJQaXBlbGluZUNhY2hlIG1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlw
ZWxpbmVDYWNoZTsKIH07CiAKKy8vIFV0aWwgY2xhc3MgZm9yIGhhbmRsaW5nIHRyYW5zZm9ybSBm
ZWVkYmFjaworICAgIGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMKK3sKKyAgcHVibGljOgor
ICAgIHZvaWQgb25EZXN0cm95KCk7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxp
bmVTdGF0ZT4+IGdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisgICAgICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRF
bmNvZGVyLAorICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsK
KworICBwcml2YXRlOgorICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVNc2xY
ZmJMaWJyYXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0
ZWRNc2wpOworfTsKKwogLy8gUmVuZGVyVXRpbHM6IGNvbnRhaW5lciBjbGFzcyBvZiB2YXJpb3Vz
IHV0aWwgY2xhc3NlcyBhYm92ZQogY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwg
YW5nbGU6Ok5vbkNvcHlhYmxlCiB7CkBAIC01ODcsNyArNjI1LDggQEAgY2xhc3MgUmVuZGVyVXRp
bHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgYW5nbGU6OlJlc3Vs
dCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAqY29udGV4dE10bCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
cmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwogICAgIGFuZ2xlOjpSZXN1
bHQgZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250
ZXh0TXRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4
R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAK
ICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJh
bXMpOwpAQCAtNjM5LDYgKzY3OCwxOSBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250
ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmds
ZTo6Rm9ybWF0ICZzcmNBbmdsZUZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXRDb252ZXJ0UGFyYW1zICZwYXJh
bXMpOworICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2tQU08oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVE
ZXNjICZwaXBlbGluZURlc2MpOworCisgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdl
bmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworICAgIGFu
Z2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10
bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp
bmRpY2VzR2VuZXJhdGVkKTsKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4
R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAK
ICAgcHJpdmF0ZToKICAgICAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKQEAgLTY0Niw3ICs2OTgs
NyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6Tm9uQ29weWFi
bGUKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKl9O
dWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGxpbmUpIG92ZXJyaWRlOwpAQCAtNjYyLDYgKzcxNCw3IEBAIGNsYXNzIFJlbmRlclV0aWxzIDog
cHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIE1pcG1hcFV0aWxzIG1NaXBt
YXBVdGlsczsKICAgICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXpl
PFBpeGVsVHlwZT4oKT4gbUNvcHlQaXhlbHNVdGlsczsKICAgICBWZXJ0ZXhGb3JtYXRDb252ZXJz
aW9uVXRpbHMgbVZlcnRleEZvcm1hdFV0aWxzOworICAgIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMg
bVRyYW5zZm9ybUZlZWRiYWNrVXRpbHM7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgbXRsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3JlbmRlcl91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCmluZGV4IGQyMjQ4MDE0Mjcz
YzM3ZDRkNGIyYmVlNzBjZmRhYjExOTVjMThiYTYuLjMyYjMzY2FiOGZiZTkxMWJiMjZhODAyM2Y5
ZmViMzFjNTdjOTE2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0
aWxzLm1tCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIK
KyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCiAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3V0aWxzLmgiCkBAIC01NCwxMCArNTUsMTIgQEAgc3RydWN0IEJsaXRQYXJh
bXNVbmlmb3JtCiAgICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOwogICAgIGludCBzcmNMZXZl
bCAgICAgICAgID0gMDsKICAgICBpbnQgc3JjTGF5ZXIgICAgICAgICA9IDA7CisgICAgaW50IHNy
Y0xldmVsMiAgICAgICAgPSAwOworICAgIGludCBzcmNMYXllcjIgICAgICAgID0gMDsKICAgICB1
aW50OF90IGRzdEZsaXBYICAgICA9IDA7CiAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAwOwog
ICAgIHVpbnQ4X3QgZHN0THVtaW5hbmNlID0gMDsgIC8vIGRlc3QgdGV4dHVyZSBpcyBsdW1pbmFj
ZQotICAgIHVpbnQ4X3QgcGFkZGluZ1sxM107CisgICAgdWludDhfdCBwYWRkaW5nWzldOwogfTsK
IAogc3RydWN0IEJsaXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCkBAIC05MCw3ICs5Myw3
IEBAIHN0cnVjdCBJbmRleENvbnZlcnNpb25Vbmlmb3JtCiAgICAgdWludDhfdCBwYWRkaW5nWzdd
OwogfTsKIAotLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0
eS5tZXRhbAorLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRh
bAogc3RydWN0IENvbWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQogewogICAgIHVpbnQzMl90
IHN0YXJ0T2Zmc2V0OwpAQCAtOTksMTIgKzEwMiwxMSBAQCBzdHJ1Y3QgQ29tYmluZVZpc2liaWxp
dHlSZXN1bHRVbmlmb3JtCiB9OwogCiAvLyBTZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy9nZW5fbWlwbWFwLm1ldGFsCi1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBVbmlmb3JtCitzdHJ1
Y3QgR2VuZXJhdGUzRE1pcG1hcFVuaWZvcm0KIHsKICAgICB1aW50MzJfdCBzcmNMZXZlbDsKICAg
ICB1aW50MzJfdCBudW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICB1aW50OF90IHNSR0I7Ci0gICAg
dWludDhfdCBwYWRkaW5nWzddOworICAgIHVpbnQzMl90IHBhZGRpbmdbMl07CiB9OwogCiAvLyBT
ZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbApAQCAt
MTU2LDE5ICsxNTgsMzYgQEAgc3RydWN0IENvcHlWZXJ0ZXhVbmlmb3JtcwogLy8gZXhpdGluZyBi
bG9jay4KIHN0cnVjdCBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkKIHsKLSAgICBTY29wZWRE
aXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10bCwgYW5nbGU6OlJlc3Vs
dCAqcmVzdWx0T3V0KQotICAgICAgICA6IG1Db250ZXh0TXRsKGNvbnRleHRNdGwpLCBtUmVzdWx0
T3V0KHJlc3VsdE91dCkKKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10
bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29t
bWFuZEVuY29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
Z2xlOjpSZXN1bHQgKnJlc3VsdE91dCkKKyAgICAgICAgOiBtQ29udGV4dE10bChjb250ZXh0TXRs
KSwgbUVuY29kZXIoZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQogICAgIHsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2NsdXNpb25RdWVy
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVyLT5wdXNoRGVidWdHcm91cChAIkRp
c2FibGVkIE9jY2x1c2lvblF1ZXJ5Iik7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAvLyB0
ZW1wb3JhcmlseSBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeQogICAgICAgICBjb250ZXh0TXRsLT5k
aXNhYmxlQWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKICAgICB9CiAgICAgflNj
b3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSgpCiAgICAgewogICAgICAgICAqbVJlc3VsdE91dCA9
IG1Db250ZXh0TXRsLT5yZXN0YXJ0QWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChtQ29udGV4dE10bC0+aGFzQWN0aXZlT2NjbHVz
aW9uUXVlcnkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUVuY29kZXItPnBvcERlYnVnR3Jv
dXAoKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKG1F
bmNvZGVyKTsKKyNlbmRpZgogICAgIH0KIAogICBwcml2YXRlOgogICAgIENvbnRleHRNdGwgKm1D
b250ZXh0TXRsOworICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICptRW5jb2RlcjsKIAogICAgIGFu
Z2xlOjpSZXN1bHQgKm1SZXN1bHRPdXQ7CiB9OwpAQCAtMjE5LDY2ICsyMzgsNDMgQEAgYW5nbGU6
OlJlc3VsdCBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0
aXZlUmVzdGFydEVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAyKTsKLQotICAgIHVpbnQzMl90IGdlbkluZGlj
ZXNDb3VudDsKLSAgICBBTkdMRV9UUlkobXRsOjpHZXRUcmlhbmdsZUZhbkluZGljZXNDb3VudChj
b250ZXh0TXRsLCBjb3VudCwgJmdlbkluZGljZXNDb3VudCkpOwotCi0gICAgY29uc3RleHByIFQg
a1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCAgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1h
eCgpOwotICAgIGNvbnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KKyAgICBjb25zdGV4cHIgVCBrU3Jj
UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7Cisg
ICAgR0xzaXplaSBkc3RUcmlhbmdsZSAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAgdWludDMy
X3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAo
Y29udGV4dE10bCkgKyBkc3RPZmZzZXQpOwotICAgIFQgdHJpRmlyc3RJZHggICAgPSAwOyAgLy8g
VmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMXN0IHZlcnRleAotICAgIFQgc3JjUHJldklkeCAg
ICAgPSAwOyAgLy8gVmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMm5kIHZlcnRleAorICAgIFQg
dHJpRmlyc3RJZHgsIHNyY1ByZXZJZHg7CiAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNl
cywgc2l6ZW9mKHRyaUZpcnN0SWR4KSk7CisgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2Vz
ICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKIAogICAgIGlmIChwcmltaXRpdmVSZXN0YXJ0RW5h
YmxlZCkKICAgICB7Ci0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBMb2NhdGlvbiBvZiBjdXJy
ZW50IHRyaWFuZ2xlJ3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZlci4KICAgICAgICAgR0xz
aXplaSB0cmlGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlICh0cmlGaXJzdElkeCA9PSBr
U3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHko
JmRzdFB0clt0cmlGaXJzdElkeExvYysrXSwgJmtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgpKTsKKyAg
ICAgICAgICAgICsrdHJpRmlyc3RJZHhMb2M7CiAgICAgICAgICAgICBtZW1jcHkoJnRyaUZpcnN0
SWR4LCBpbmRpY2VzICsgdHJpRmlyc3RJZHhMb2MsIHNpemVvZih0cmlGaXJzdElkeCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHRyaUZpcnN0SWR4TG9jICsgMiA+PSBjb3VudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCBpbmRpY2VzLgotICAgICAgICAgICAgZm9y
IChHTHNpemVpIGkgPSB0cmlGaXJzdElkeExvYzsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVz
dGFydEluZGV4LCBzaXplb2Yoa0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNv
dW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoJnNyY1ByZXZJZHgsIGluZGljZXMg
KyB0cmlGaXJzdElkeExvYyArIDEsIHNpemVvZihzcmNQcmV2SWR4KSk7Ci0gICAgICAgIH0KLQog
ICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IHRyaUZpcnN0SWR4TG9jICsgMjsgaSA8IGNvdW50OyAr
K2kpCiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQzMl90IHRyaUluZGljZXNbM107Ci0KICAg
ICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJZHgsIGluZGljZXMg
KyBpLCBzaXplb2Yoc3JjSWR4KSk7CisgICAgICAgICAgICBib29sIGNvbXBsZXRlVHJpYW5nbGUg
PSB0cnVlOwogICAgICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3Rh
cnRJbmRleCB8fCBzcmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLgotICAgICAgICAg
ICAgICAgIHRyaUluZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAg
ICAgICAgICAgICB0cmlJbmRpY2VzWzFdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0g
ICAgICAgICAgICAgICAgdHJpSW5kaWNlc1syXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4
OwotICAgICAgICAgICAgICAgIHRyaUZpcnN0SWR4ICAgID0gc3JjSWR4OwotICAgICAgICAgICAg
ICAgIHRyaUZpcnN0SWR4TG9jID0gaTsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRy
aWFuZ2xlLiBNb3ZlIHRvIG5leHQgdHJpYW5nbGUgYW5kIHNldCB0cmlGaXJzdEluZGV4CisgICAg
ICAgICAgICAgICAgdHJpRmlyc3RJZHggICAgICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICB0
cmlGaXJzdElkeExvYyAgID0gaTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xlID0g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChpIDwgdHJpRmlyc3RJ
ZHhMb2MgKyAyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUg
dHJpYW5nbGUKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdID0ga0RzdFByaW1pdGl2ZVJl
c3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdID0ga0RzdFByaW1pdGl2
ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1p
dGl2ZVJlc3RhcnRJbmRleDsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xl
LCBtb3ZlIHRvIG5leHQgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xl
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CkBAIC0yODYsMTUgKzI4MiwxNiBAQCBhbmdsZTo6UmVzdWx0IEdlblRyaUZhbkZyb21DbGllbnRF
bGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgIHRyaUluZGlj
ZXNbMV0gPSBzcmNQcmV2SWR4OwogICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJ
ZHg7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tcGxldGVUcmlhbmdsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIGRzdFRyaWFu
Z2xlLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAgICAgICsr
ZHN0VHJpYW5nbGU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNQcmV2SWR4ID0gc3Jj
SWR4OwotCi0gICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGlj
ZXMsIHNpemVvZih0cmlJbmRpY2VzKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1By
ZXZJZHgpKTsKLQogICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDI7IGkgPCBjb3VudDsgKytpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBUIHNyY0lkeDsKQEAgLTMwNiwxMSArMzAzLDY1IEBAIGFu
Z2xlOjpSZXN1bHQgR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCiAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OwogICAgICAgICAgICAg
c3JjUHJldklkeCAgICA9IHNyY0lkeDsKIAotICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMg
KiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAg
bWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJpSW5kaWNlcywgc2l6ZW9mKHRyaUlu
ZGljZXMpKTsKKyAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZHN0QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNvbnRleHRNdGwsIGRzdE9mZnNldCwg
Z2VuSW5kaWNlc0NvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYgKGluZGljZXNHZW5l
cmF0ZWQpCisgICAgICAgICppbmRpY2VzR2VuZXJhdGVkID0gZHN0VHJpYW5nbGUgKiAzOworICAg
IGRzdEJ1ZmZlci0+dW5tYXAoY29udGV4dE10bCk7CisKKyAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7Cit9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYW5nbGU6OlJlc3VsdCBH
ZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRp
dmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5k
aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZm
ZXJSZWYgJmRzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBkc3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIGNvbnN0ZXhwciBUIGtTcmNQ
cmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKyAg
ICB1aW50MzJfdCAqZHN0UHRyICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0
QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworICAgIEdMc2l6ZWkgcmVhZFZh
bHVlTG9jID0gMDsKKyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisgICAgdWludDMyX3Qg
ZHN0SWR4ICAgICAgPSAwOworICAgIG1lbWNweSgmcmVhZFZhbHVlLCBpbmRpY2VzLCBzaXplb2Yo
cmVhZFZhbHVlKSk7CisgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFy
dEluZGV4KQorICAgIHsKKworICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKyAgICAgICAgbWVtY3B5
KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFsdWUpKTsK
KyAgICB9CisgICAgd2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0g
Y291bnQpCisgICAgeworCisgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKyAgICAg
ICAgYm9vbCBmb3VuZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBr
IDwgaW5kaWNlc1BlclByaW1pdGl2ZTsgKytrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1j
cHkoJnJlYWRWYWx1ZSwgaW5kaWNlcyArIHJlYWRWYWx1ZUxvYywgc2l6ZW9mKHJlYWRWYWx1ZSkp
OworICAgICAgICAgICAgKytyZWFkVmFsdWVMb2M7CisgICAgICAgICAgICBpZiAocmVhZFZhbHVl
ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm91bmRQcmltaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBwcmltSW5kaWNpZXNba10gPSAodWludDMyX3QpcmVhZFZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFByaW1pdGl2ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbWVtY3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUluZGljaWVzLCAoaW5kaWNlc1Bl
clByaW1pdGl2ZSkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIGRzdElkeCArPSBp
bmRpY2VzUGVyUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbmRpY2VzR2Vu
ZXJhdGVkKQorICAgICAgICAqaW5kaWNlc0dlbmVyYXRlZCA9IGRzdElkeDsKICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTMyOCwxNCArMzc5LDExIEBAIGFuZ2xl
OjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4
dE10bCwKICAgICBjb25zdCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCiAgICAgdWludDMyX3QgKmRzdFB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10
bCkgKyBkc3RPZmZzZXQpOwotICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1
cnJlbnQgbGluZSBsb29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KLSAg
ICAvLyBlbmNvdW50ZXIgYSBwcmltaXRpdmUgcmVzdGFydCBpbmRleC4KICAgICBUIGxpbmVMb29w
Rmlyc3RJZHg7CiAgICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2Yo
bGluZUxvb3BGaXJzdElkeCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKQog
ICAgIHsKLSAgICAgICAgLy8gbGluZUxvb3BGaXJzdElkeExvYzogbG9jYXRpb24gb2YgY3VycmVu
dCBsaW5lIGxvb3AncyBmaXJzdCB2ZXJ0ZXggaW4gdGhlIHNvdXJjZSBidWZmZXIuCiAgICAgICAg
IEdMc2l6ZWkgbGluZUxvb3BGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlIChsaW5lTG9v
cEZpcnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCiAgICAgICAgIHsKQEAgLTM0
NCwxNSArMzkyLDEyIEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xpZW50RWxlbWVu
dHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BG
aXJzdElkeCwgaW5kaWNlcyArIGxpbmVMb29wRmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZp
cnN0SWR4KSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRl
eCB0byBiZSB3cml0dGVuIHRvIGRlc3QgYnVmZmVyCiAgICAgICAgIHVpbnQzMl90IGRzdElkeCA9
IGxpbmVMb29wRmlyc3RJZHg7CiAgICAgICAgIG1lbWNweSgmZHN0UHRyW2xpbmVMb29wRmlyc3RJ
ZHhMb2NdLCAmZHN0SWR4LCBzaXplb2YoZHN0SWR4KSk7Ci0gICAgICAgIC8vIGRzdFdyaXR0ZW46
IG51bWJlciBvZiBpbmRpY2VzIHdyaXR0ZW4gdG8gZGVzdCBidWZmZXIKICAgICAgICAgdWludDMy
X3QgZHN0V3JpdHRlbiA9IGxpbmVMb29wRmlyc3RJZHhMb2MgKyAxOwogCiAgICAgICAgIGZvciAo
R0xzaXplaSBpID0gbGluZUxvb3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBzcmNJZHggOiB2YWx1ZSBvZiBpbmRleCBmcm9tIHNvdXJj
ZSBidWZmZXIKICAgICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJ
ZHgsIGluZGljZXMgKyBpLCBzaXplb2Yoc3JjSWR4KSk7CiAgICAgICAgICAgICBpZiAoc3JjSWR4
ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCkBAIC00MDAsNyArNDQ1LDcgQEAgYW5nbGU6
OlJlc3VsdCBHZW5MaW5lTG9vcEZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0
TXRsLAogCiAgICAgICAgICppbmRpY2VzR2VuZXJhdGVkID0gY291bnQgKyAxOwogICAgIH0KLSAg
ICBkc3RCdWZmZXItPnVubWFwQW5kRmx1c2hTdWJzZXQoY29udGV4dE10bCwgZHN0T2Zmc2V0LCAo
KmluZGljZXNHZW5lcmF0ZWQpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgZHN0QnVmZmVyLT51
bm1hcChjb250ZXh0TXRsKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KQEAgLTQ3Miw3ICs1MTcsNyBAQCB2b2lkIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxp
emVkKERpc3BsYXlNdGwgKmRpc3BsYXksCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7
CiAgICAgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERl
dmljZSgpOwotICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0gZGlzcGxheS0+Z2V0
RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICAgICAgICA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CiAgICAgICAgIE5TRXJyb3IgKmVyciAg
ICAgICAgICAgICAgPSBuaWw7CiAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgICAgPSBb
c2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rpb25OYW1lXTsKIApAQCAtNTEyLDcg
KzU1Nyw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXpl
ZCgKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgaWQ8TVRMRGV2aWNl
PiBtZXRhbERldmljZSA9IGRpc3BsYXktPmdldE1ldGFsRGV2aWNlKCk7Ci0gICAgICAgIGlkPE1U
TExpYnJhcnk+IHNoYWRlckxpYiAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwor
ICAgICAgICBhdXRvIHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNo
YWRlcnNMaWIoKTsKICAgICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKIAog
ICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldp
dGhOYW1lOmZ1bmN0aW9uTmFtZQpAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lh
bGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKIEFOR0xFX0lOTElORQogdm9pZCBFbnN1
cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNTdHJpbmcgKnZlcnRleEZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyUGlw
ZWxpbmVDYWNoZSAqcGlwZWxpbmVDYWNoZU91dCkKIHsKICAgICBSZW5kZXJQaXBlbGluZUNhY2hl
ICZwaXBlbGluZUNhY2hlID0gKnBpcGVsaW5lQ2FjaGVPdXQ7CkBAIC01NDksOSArNTk1LDcgQEAg
dm9pZCBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRl
eHQgKmNvbnRleHQsCiAKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKLSAgICAgICAg
RGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOwotICAgICAg
ICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xp
YigpOwotICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgPSBbc2hhZGVyTGliIG5ld0Z1
bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAgICAgICAgaWQ8TVRMRnVuY3Rp
b24+IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlv
bk5hbWVdOwogCiAgICAgICAgIEFTU0VSVChbc2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0p
OwogCkBAIC01NzAsNyArNjE0LDkgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRleFNoYWRl
ck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCiAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQog
ICAgIHsKICAgICAgICAgLy8gTm9uIHNwZWNpYWxpemVkIGNvbnN0YW50cyBwcm92aWRlZCwgdXNl
IGRlZmF1bHQgY3JlYXRpb24gZnVuY3Rpb24uCi0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9u
bHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAor
ICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworICAg
ICAgICBhdXRvIHNoYWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIo
KTsKKyAgICAgICAgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXpl
ZChjb250ZXh0LCB2ZXJ0ZXhGdW5jdGlvbk5hbWUsIHNoYWRlckxpYiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUNhY2hlT3V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU4NCw5ICs2MzAsOSBAQCB2b2lkIEVuc3Vy
ZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZCgKIAog
ICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewotICAgICAgICBEaXNwbGF5TXRsICpkaXNw
bGF5ICAgICAgPSBjb250ZXh0LT5nZXREaXNwbGF5KCk7Ci0gICAgICAgIGlkPE1UTExpYnJhcnk+
IHNoYWRlckxpYiA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7Ci0gICAgICAgIE5T
RXJyb3IgKmVyciAgICAgICAgICAgICA9IG5pbDsKKyAgICAgICAgRGlzcGxheU10bCAqZGlzcGxh
eSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgIE5TRXJyb3IgKmVyciAg
ICAgICAgPSBuaWw7CiAKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFkZXJM
aWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudFZhbHVlczpmdW5jQ29u
c3RhbnRzCkBAIC02MDksMTIgKzY1NSwyOCBAQCBSZW5kZXJQaXBlbGluZURlc2MgR2V0Q29tcHV0
aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRQogICAg
IGNvbnN0IFJlbmRlclBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNtZEVuY29kZXItPnJlbmRl
clBhc3NEZXNjKCk7CiAKICAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5l
T3V0cHV0RGVzYygmcGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOwotICAgIHBpcGVsaW5l
RGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgICAgID0gUmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9u
OjpEaXNhYmxlZDsKKyAgICBwaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgICA9IFJlbmRl
clBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CiAgICAgcGlwZWxpbmVEZXNjLmlucHV0
UHJpbWl0aXZlVG9wb2xvZ3kgPSBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1BvaW50OwogCiAgICAg
cmV0dXJuIHBpcGVsaW5lRGVzYzsKIH0KIAorLy8gR2V0IHBpcGVsaW5lIGRlc2NyaXB0b3IgZm9y
IHJlbmRlciBwaXBlbGluZSB0aGF0IGNvbnRhaW5zIHZlcnRleCBzaGFkZXIgYWN0aW5nIGFzIHRy
YW5zZm9ybQorLy8gZmVlZGJhY2suCitBTkdMRV9JTkxJTkUKK1JlbmRlclBpcGVsaW5lRGVzYyBH
ZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKQor
eworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgICA9IFJlbmRlclBpcGVs
aW5lRGVzYyhwaXBlbGluZURlc2MpOworICAgIGNvbnN0IFJlbmRlclBhc3NEZXNjICZyZW5kZXJQ
YXNzRGVzYyA9IGNtZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7CisKKyAgICByZW5kZXJQYXNz
RGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygmcGlwZWxpbmVEZXNjLm91dHB1
dERlc2NyaXB0b3IpOworICAgIHhmYlBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgID0g
UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICB4ZmJQaXBlbGluZURl
c2MuaW5wdXRQcmltaXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7
CisKKyAgICByZXR1cm4geGZiUGlwZWxpbmVEZXNjOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KIHZvaWQgQ2xlYXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNoZUFy
cmF5KQogewpAQCAtNzEyLDggKzc3NCwxNCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9y
bURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgdW5pZm9ybVBhcmFt
cy5zcmNMYXllciA9IHBhcmFtcy5zcmNMYXllcjsKICAgICBpZiAoaXNDb2xvckJsaXQpCiAgICAg
ewotICAgICAgICBjb25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQ29sb3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOwotICAgICAgICB1bmlmb3JtUGFy
YW1zLmRzdEx1bWluYW5jZSAgICAgICAgID0gY29sb3JQYXJhbXMtPmRzdEx1bWluYW5jZSA/IDEg
OiAwOworICAgICAgICBjb25zdCBhdXRvIGNvbG9yUGFyYW1zICAgICA9IHN0YXRpY19jYXN0PGNv
bnN0IENvbG9yQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5pZm9ybVBhcmFtcy5k
c3RMdW1pbmFuY2UgPSBjb2xvclBhcmFtcy0+ZHN0THVtaW5hbmNlID8gMSA6IDA7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAg
dW5pZm9ybVBhcmFtcy5zcmNMZXZlbDIgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsOworICAg
ICAgICB1bmlmb3JtUGFyYW1zLnNyY0xheWVyMiA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsTGF5ZXI7
CiAgICAgfQogCiAgICAgLy8gQ29tcHV0ZSBzb3VyY2UgdGV4Q29vcmRzCkBAIC03MjcsOCArNzk1
LDggQEAgdm9pZCBTZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLAogICAgIHsKICAgICAgICAgY29uc3QgRGVwdGhTdGVuY2lsQmxpdFBh
cmFtcyAqZHNQYXJhbXMgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRGVwdGhTdGVu
Y2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMt
PnNyY1N0ZW5jaWwtPndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7Ci0gICAgICAgIHNyY0hlaWdo
dCA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT5oZWlnaHQoZHNQYXJhbXMtPnNyY0xldmVsKTsKKyAg
ICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwtPndpZHRoKG10bDo6TWlwbWFw
TmF0aXZlTGV2ZWwoZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICAgICBzcmNIZWln
aHQgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwo
ZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAt
NzM5LDggKzgwNyw4IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdVbmlmb3JtRGF0YShSZW5kZXJD
b21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKICAgICBHZXRCbGl0VGV4Q29vcmRzKHNyY1dpZHRo
LCBzcmNIZWlnaHQsIHBhcmFtcy5zcmNSZWN0LCBwYXJhbXMuc3JjWUZsaXBwZWQsIHBhcmFtcy51
bnBhY2tGbGlwWCwKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUw
LCAmdjAsICZ1MSwgJnYxKTsKIAotICAgIGZsb2F0IGR1ID0gdTEgLSB1MDsKLSAgICBmbG9hdCBk
diA9IHYxIC0gdjA7CisgICAgYXV0byBkdSA9IHUxIC0gdTA7CisgICAgYXV0byBkdiA9IHYxIC0g
djA7CiAKICAgICAvLyBsb3dlciBsZWZ0CiAgICAgdW5pZm9ybVBhcmFtcy5zcmNUZXhDb29yZHNb
MF1bMF0gPSB1MDsKQEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBp
cGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAogLy8gU3RlbmNpbEJs
aXRWaWFCdWZmZXJQYXJhbXMgaW1wbGVtZW50YXRpb24KIFN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFy
YW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcygpIHt9CiAKLVN0ZW5jaWxCbGl0VmlhQnVm
ZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxC
bGl0UGFyYW1zICZzcmNJbikKK1N0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxp
dFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZzcmNQYXJhbXMp
CiB7Ci0gICAgZHN0VGV4dHVyZVNpemUgPSBzcmNJbi5kc3RUZXh0dXJlU2l6ZTsKLSAgICBkc3RS
ZWN0ICAgICAgICA9IHNyY0luLmRzdFJlY3Q7Ci0gICAgZHN0U2Npc3NvclJlY3QgPSBzcmNJbi5k
c3RTY2lzc29yUmVjdDsKLSAgICBkc3RGbGlwWSAgICAgICA9IHNyY0luLmRzdEZsaXBZOwotICAg
IGRzdEZsaXBYICAgICAgID0gc3JjSW4uZHN0RmxpcFg7Ci0gICAgc3JjUmVjdCAgICAgICAgPSBz
cmNJbi5zcmNSZWN0OwotICAgIHNyY1lGbGlwcGVkICAgID0gc3JjSW4uc3JjWUZsaXBwZWQ7Ci0g
ICAgdW5wYWNrRmxpcFggICAgPSBzcmNJbi51bnBhY2tGbGlwWDsKLSAgICB1bnBhY2tGbGlwWSAg
ICA9IHNyY0luLnVucGFja0ZsaXBZOworICAgIGRzdFRleHR1cmVTaXplID0gc3JjUGFyYW1zLmRz
dFRleHR1cmVTaXplOworICAgIGRzdFJlY3QgICAgICAgID0gc3JjUGFyYW1zLmRzdFJlY3Q7Cisg
ICAgZHN0U2Npc3NvclJlY3QgPSBzcmNQYXJhbXMuZHN0U2Npc3NvclJlY3Q7CisgICAgZHN0Rmxp
cFkgICAgICAgPSBzcmNQYXJhbXMuZHN0RmxpcFk7CisgICAgZHN0RmxpcFggICAgICAgPSBzcmNQ
YXJhbXMuZHN0RmxpcFg7CisgICAgc3JjUmVjdCAgICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsK
KyAgICBzcmNZRmxpcHBlZCAgICA9IHNyY1BhcmFtcy5zcmNZRmxpcHBlZDsKKyAgICB1bnBhY2tG
bGlwWCAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWDsKKyAgICB1bnBhY2tGbGlwWSAgICA9IHNy
Y1BhcmFtcy51bnBhY2tGbGlwWTsKIAotICAgIHNyY1N0ZW5jaWwgPSBzcmNJbi5zcmNTdGVuY2ls
OworICAgIHNyY1N0ZW5jaWwgICAgICA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworICAgIHNyY1N0
ZW5jaWxMZXZlbCA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGV2ZWw7CisgICAgc3JjU3RlbmNpbExh
eWVyID0gc3JjUGFyYW1zLnNyY1N0ZW5jaWxMYXllcjsKIH0KIAogLy8gUmVuZGVyVXRpbHMgaW1w
bGVtZW50YXRpb24KQEAgLTkwMyw2ICs5NzMsNyBAQCB2b2lkIFJlbmRlclV0aWxzOjpvbkRlc3Ry
b3koKQogICAgIH0KIH0KIAorCiAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKIHZvaWQgUmVuZGVy
VXRpbHM6OmhhbmRsZUVycm9yKEdMZW51bSBnbEVycm9yQ29kZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCkBAIC0xMDE2LDkgKzEwODcsMTAgQEAgYW5n
bGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tQXJyYXlzKAog
fQogYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxl
bWVudHNBcnJheSgKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgIGNvbnN0IEluZGV4
R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFt
cyAmcGFyYW1zLAorICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKQogewotICAgIHJldHVy
biBtSW5kZXhVdGlscy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KGNvbnRl
eHRNdGwsIHBhcmFtcyk7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlVHJpRmFuQnVm
ZmVyRnJvbUVsZW1lbnRzQXJyYXkoY29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVk
KTsKIH0KIAogYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVMaW5lTG9vcEJ1ZmZl
ckZyb21BcnJheXMoCkBAIC0xMDUwLDYgKzExMjIsMjYgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJV
dGlsczo6Z2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoCiB7CiAg
ICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudEZyb21FbGVt
ZW50c0FycmF5KGNvbnRleHRNdGwsIHBhcmFtcyk7CiB9CithbmdsZTo6UmVzdWx0IFJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgcmV0dXJuIG1JbmRleFV0aWxz
LmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMs
IGluZGljZXNHZW5lcmF0ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp
bmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0
ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0
YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29u
c3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2Vu
ZXJhdGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3Rh
cnRUcmlhbmdsZXNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVy
YXRlZCk7Cit9CiAKIHZvaWQgUmVuZGVyVXRpbHM6OmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KAog
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCkBAIC0xMTIxLDYgKzEyMTMsMjEgQEAgYW5nbGU6
OlJlc3VsdCBSZW5kZXJVdGlsczo6ZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9uZW50c1ZTKGNvbnN0
IGdsOjpDb250ZXh0ICpjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMpOwogfQogCithbmdsZTo6UmVzdWx0IFJlbmRl
clV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGlu
ZURlc2MgJnBpcGVsaW5lRGVzYykKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgdGhlIFBTTworICAg
IGF1dG8gcHNvID0gbVRyYW5zZm9ybUZlZWRiYWNrVXRpbHMuZ2V0VHJhbnNmb3JtRmVlZGJhY2tS
ZW5kZXJQaXBlbGluZShjb250ZXh0TXRsLCByZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaXBlbGluZURlc2MpOworICAgIGlmIChwc28pCisgICAgeworICAgICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpT
dG9wOworfQorCiAvLyBDbGVhclV0aWxzIGltcGxlbWVudGF0aW9uCiBDbGVhclV0aWxzOjpDbGVh
clV0aWxzKGNvbnN0IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRlck5hbWUpCiAgICAgOiBtRnJh
Z21lbnRTaGFkZXJOYW1lKGZyYWdtZW50U2hhZGVyTmFtZSkKQEAgLTEyODcsMTEgKzEzOTQsMTEg
QEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgb3ZlcnJpZGVkUGFyYW1zLmNsZWFyQ29sb3Iu
cmVzZXQoKTsKICAgICB9Ci0gICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQu
dGV4dHVyZSkKKyAgICBpZiAoIXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJl
KCkpCiAgICAgewogICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJEZXB0aC5yZXNldCgpOwog
ICAgIH0KLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUp
CisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCiAg
ICAgewogICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJTdGVuY2lsLnJlc2V0KCk7CiAgICAg
fQpAQCAtMTMwNyw3ICsxNDE0LDcgQEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0aWxzOjpjbGVhcldp
dGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQgcmVz
dWx0OwogICAgIHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeSwg
b3RoZXJ3aXNlIGNsZWFyaW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcKLSAg
ICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShj
b250ZXh0TXRsLCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5
IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0KTsK
ICAgICAgICAgLy8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAgY21k
RW5jb2Rlci0+ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0KQEAg
LTE0ODEsNyArMTU4OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29sb3JCbGl0VXRpbHM6OmJsaXRDb2xv
cldpdGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQg
cmVzdWx0OwogICAgIHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVy
eSwgb3RoZXJ3aXNlIGJsaXR0aW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcK
LSAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVy
eShjb250ZXh0TXRsLCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1
ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0
KTsKICAgICAgICAgLy8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAg
Y21kRW5jb2Rlci0+ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0K
QEAgLTE3MDMsNyArMTgxMCw3IEBAIGFuZ2xlOjpSZXN1bHQgRGVwdGhTdGVuY2lsQmxpdFV0aWxz
OjpibGl0RGVwdGhTdGVuY2lsV2l0aERyYXcoY29uc3QgZ2w6OkNvbnRleHQKICAgICBhbmdsZTo6
UmVzdWx0IHJlc3VsdDsKICAgICB7CiAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNp
b24gcXVlcnksIG90aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNv
dW50aW5nCi0gICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVz
aW9uUXVlcnkoY29udGV4dE10bCwgJnJlc3VsdCk7CisgICAgICAgIFNjb3BlZERpc2FibGVPY2Ns
dXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2Rlciwg
JnJlc3VsdCk7CiAgICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCiAg
ICAgICAgIGNtZEVuY29kZXItPmRyYXcoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCAwLCAzKTsK
ICAgICB9CkBAIC0yMDAyLDcgKzIxMDksOCBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9y
VXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cygKIAogYW5nbGU6OlJlc3VsdCBJ
bmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5
KAogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9u
UGFyYW1zICZwYXJhbXMpCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMs
CisgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCiB7CiAgICAgY29uc3QgZ2w6OlZlcnRl
eEFycmF5ICp2ZXJ0ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJy
YXkoKTsKICAgICBjb25zdCBnbDo6QnVmZmVyICplbGVtZW50QnVmZmVyICAgID0gdmVydGV4QXJy
YXktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwpAQCAtMjAxMywxMyArMjEyMSwxNCBAQCBhbmds
ZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVs
ZW1lbnRzQXJyYXkoCiAgICAgICAgIEFOR0xFX0NIRUNLKGNvbnRleHRNdGwsIHNyY09mZnNldCA8
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAg
ICAgICJJbmRleCBvZmZzZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgIGlmIChwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQgfHwKLSAgICAgICAgICAgICgh
Y29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFz
cy5lbmFibGVkICYmCisgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0
RmVhdHVyZXMoKS5icmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKICAgICAgICAgICAg
ICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkKICAgICAgICAgewogICAg
ICAgICAgICAgSW5kZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CiAg
ICAgICAgICAgICBjcHVQYXRoUGFyYW1zLmluZGljZXMgPQogICAgICAgICAgICAgICAgIGVsZW1l
bnRCdWZmZXJNdGwtPmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnRleHRNdGwpICsgc3JjT2Zm
c2V0OwotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRz
QXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBjcHVQ
YXRoUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQogICAgICAgICB7CkBAIC0yMDMwLDcgKzIxMzksNyBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAg
fQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZy
b21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisgICAgICAgIHJldHVybiBn
ZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFt
cywgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgfQogfQogCkBAIC0yMDc0LDIyICsyMTgzLDIzIEBA
IGFuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJG
cm9tRWxlbWVudHNBcnJheUdQVSgKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxz
OjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAogICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMp
CisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgdWludDMyX3Qg
KmdlbkluZGljZXMpCiB7CiAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKICAgICB7CiAgICAg
ICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKICAgICAgICAgICAg
IHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCiAgICAgICAgICAgICAgICAgY29u
dGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxl
ZCwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KHBhcmFtcy5p
bmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFt
cy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBjYXNl
IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgogICAgICAgICAgICAgcmV0dXJu
IEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygKICAgICAgICAgICAgICAgICBjb250ZXh0TXRs
LCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHBhcmFtcy5pbmRpY2Vz
KSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0
QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKICAgICAgICAgY2FzZSBnbDo6
RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gR2VuVHJp
RmFuRnJvbUNsaWVudEVsZW1lbnRzKAogICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIHBhcmFt
cy5pbmRleENvdW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCi0gICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJh
bXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIs
IHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICB9CkBAIC0yMzAxLDYgKzI0MTEsNTYgQEAgYW5nbGU6
OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnRG
cm9tRWxlbWVudHNBcnJheUMKICAgICByZXR1cm4gZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50
KGNvbnRleHRNdGwsIGZpcnN0LCBsYXN0LCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zm
c2V0KTsKIH0KIAorYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVBy
aW1pdGl2ZVJlc3RhcnRCdWZmZXIoCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICB1
bnNpZ25lZCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKyAgICBjb25zdCBJbmRleEdlbmVyYXRp
b25QYXJhbXMgJnBhcmFtcywKKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAg
c3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKKyAgICAgICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1Bl
clByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ocGFyYW1zLmluZGljZXMpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFy
YW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdF
bGVtZW50c1R5cGU6OlVuc2lnbmVkU2hvcnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0
aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGlj
ZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVy
LCBwYXJhbXMuZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgY2FzZSBnbDo6
RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJp
bWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVy
dGljZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVm
ZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6U3RvcDsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JV
dGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBnZW5lcmF0
ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10bCwgMywgcGFyYW1zLCBpbmRpY2VzR2Vu
ZXJhdGVkKTsKK30KKworYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0
ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcigKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHNpemVfdCAq
aW5kaWNlc0dlbmVyYXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0
QnVmZmVyKGNvbnRleHRNdGwsIDIsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CisKK2Fu
Z2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0
UG9pbnRzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVk
KQoreworICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10
bCwgMSwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KKwogLy8gVmlzaWJpbGl0eVJlc3Vs
dFV0aWxzIGltcGxlbWVudGF0aW9uCiB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGlsczo6b25EZXN0
cm95KCkKIHsKQEAgLTIzNzUsNyArMjUzNSwxMCBAQCB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGls
czo6Y29tYmluZVZpc2liaWxpdHlSZXN1bHQoCiAvLyBNaXBtYXBVdGlscyBpbXBsZW1lbnRhdGlv
bgogdm9pZCBNaXBtYXBVdGlsczo6b25EZXN0cm95KCkKIHsKLSAgICBtM0RNaXBHZW5lcmF0b3JQ
aXBlbGluZSA9IG5pbDsKKyAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOwor
ICAgIG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lICAgICAgPSBuaWw7CisgICAgbTJEQXJyYXlNaXBH
ZW5lcmF0b3JQaXBlbGluZSA9IG5pbDsKKyAgICBtQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lICAg
ID0gbmlsOwogfQogCiB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKQEAgLTIzODQsNjYgKzI1NDcs
NzggQEAgdm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRp
YWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOwogfQogCit2b2lkIE1pcG1hcFV0
aWxzOjplbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAq
Y29udGV4dE10bCkKK3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCksIEAiZ2VuZXJhdGUyRE1pcG1hcHMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7Cit9CisK
K3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRp
YWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5zdXJlQ29tcHV0ZVBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBAImdlbmVyYXRlMkRBcnJh
eU1pcG1hcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRBcnJh
eU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKK30KKwordm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlQ3Vi
ZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXRE
aXNwbGF5KCksIEAiZ2VuZXJhdGVDdWJlTWlwbWFwcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworfQorCiBhbmdsZTo6
UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRl
eHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmF0aXZlVGV4TGV2ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRleExldmVs
QXJyYXkgKiBtaXBtYXBPdXRwdXRWaWV3cykKIHsKLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4
dHVyZSBmb3Igbm93LgotICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpID09IE1U
TFRleHR1cmVUeXBlM0QpOworICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9
IGNvbnRleHRNdGwtPmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOworICAgIEFTU0VSVChjbWRF
bmNvZGVyKTsKIAogICAgIE1UTFNpemUgdGhyZWFkR3JvdXBTaXplOwotICAgIHVpbnQzMl90IHNs
aWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGlkPE1UTENvbXB1dGVQ
aXBlbGluZVN0YXRlPiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7Ci0KLSAgICBlbnN1cmUzRE1pcEdl
bmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7Ci0gICAgY29tcHV0ZVBpcGVs
aW5lID0gbTNETWlwR2VuZXJhdG9yUGlwZWxpbmU7Ci0gICAgdGhyZWFkR3JvdXBTaXplID0KLSAg
ICAgICAgTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVyRGltLCBrR2Vu
ZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCi0gICAgICAgICAgICAgICAgICAgIGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSk7Ci0KLSAgICAvLyBUaGUgY29tcHV0ZSBzaGFk
ZXIgc3VwcG9ydHMgdXAgdG8gNCBtaXBtYXBzIGdlbmVyYXRlZCBwZXIgcGFzcy4KLSAgICAvLyBT
ZWUgc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCi0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNo
ID0gNDsKLQotICAgIGlmICh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUu
aGVpZ2h0ICogdGhyZWFkR3JvdXBTaXplLmRlcHRoID4KLSAgICAgICAgICAgIGNvbXB1dGVQaXBl
bGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCB8fAotICAgICAgICBBTkdMRV9VTkxJ
S0VMWSgKLSAgICAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVz
KCkuYWxsb3dHZW5NdWx0aXBsZU1pcHNQZXJQYXNzLmVuYWJsZWQpKQorICAgIHVpbnQzMl90IHNs
aWNlcyA9IDE7CisgICAgc3dpdGNoIChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpKQogICAgIHsK
LSAgICAgICAgLy8gTXVsdGlwbGUgbWlwbWFwcyBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQg
ZHVlIHRvIGhhcmR3YXJlJ3MgdGhyZWFkIGdyb3VwIHNpemUgbGltaXRzLgotICAgICAgICAvLyBG
YWxsYmFjayB0byBnZW5lcmF0ZSBvbmUgbWlwIHBlciBwYXNzIGFuZCByZWR1Y2UgdGhyZWFkIGdy
b3VwIHNpemUuCi0gICAgICAgIGlmIChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lk
dGggKiB0aHJlYWRHcm91cFNpemUuaGVpZ2h0ID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3
ZSBjYW5ub3QgcHJvY2VlZC4KLSAgICAgICAgICAgIC8vIEhBQ0s6IHVzZSBibGl0IGNvbW1hbmQg
ZW5jb2RlciB0byBnZW5lcmF0ZSBtaXBtYXBzIGlmIGl0IGlzIG5vdCBwb3NzaWJsZQotICAgICAg
ICAgICAgLy8gdG8gdXNlIGNvbXB1dGUgc2hhZGVyIGR1ZSB0byBoYXJkd2FyZSBsaW1pdHMuCi0g
ICAgICAgICAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+
Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7Ci0gICAgICAgICAgICBibGl0RW5jb2Rlci0+Z2VuZXJh
dGVNaXBtYXBzRm9yVGV4dHVyZShzcmNUZXh0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZEdyb3VwU2l6
ZS5kZXB0aCA9IDE7Ci0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisgICAgICAg
IGNhc2UgTVRMVGV4dHVyZVR5cGUyRDoKKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9y
UGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXIt
PnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAg
ICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdy
b3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTJEQXJyYXk6CisgICAgICAgICAgICBlbnN1
cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAg
ICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yREFycmF5TWlw
R2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAgICAgID0gc3JjVGV4
dHVyZS0+YXJyYXlMZW5ndGgoKTsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNp
emVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBl
ckRpbSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlw
ZUN1YmU6CisgICAgICAgICAgICBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFs
aXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBl
bGluZVN0YXRlKG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgc2xpY2Vz
ICAgICAgICAgID0gNjsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtl
KGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwg
MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTNEOgor
ICAgICAgICAgICAgZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKGNvbnRl
eHRNdGwpOworICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUo
bTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplID0K
KyAgICAgICAgICAgICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQ
ZXJEaW0sIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwogICAgIH0KIAotICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9IGNvbnRl
eHRNdGwtPmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOwotICAgIEFTU0VSVChjbWRFbmNvZGVy
KTsKLSAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShjb21wdXRlUGlwZWxp
bmUpOwotCi0gICAgR2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisgICAgR2VuZXJhdGUz
RE1pcG1hcFVuaWZvcm0gb3B0aW9uczsKKyAgICB1aW50MzJfdCBtYXhNaXBzUGVyQmF0Y2ggPSA0
OwogCi0gICAgdWludDMyX3QgcmVtYWluTWlwcyAgICAgICAgICAgICA9IHNyY1RleHR1cmUtPm1p
cG1hcExldmVscygpIC0gMTsKLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBiYXRjaFNyY0xldmVsID0g
a1plcm9OYXRpdmVNaXBMZXZlbDsKLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAg
ID0gYmF0Y2hTcmNMZXZlbC5nZXQoKTsKLSAgICBvcHRpb25zLnNSR0IgICAgICAgICAgICAgICAg
ICAgID0gc1JHQk1pcG1hcDsKKyAgICB1aW50MzJfdCByZW1haW5NaXBzID0gc3JjVGV4dHVyZS0+
bWlwbWFwTGV2ZWxzKCkgLSAxOworICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOwogCiAgICAg
Y21kRW5jb2Rlci0+c2V0VGV4dHVyZShzcmNUZXh0dXJlLCAwKTsKICAgICBjbWRFbmNvZGVyLT5t
YXJrUmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKICAgICB3aGlsZSAocmVt
YWluTWlwcykKICAgICB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9
IG1pcG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisgICAgICAgIGNvbnN0
IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1p
cG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyAxKSk7CiAgICAgICAgIGdsOjpFeHRl
bnRzIHNpemUgICAgICAgICAgICAgICA9IGZpcnN0TWlwVmlldy0+c2l6ZUF0MCgpOwogICAgICAg
ICBib29sIGlzUG93MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93MihzaXpl
LmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKIApAQCAtMjQ2MSwyMCArMjYzNiwx
OCBAQCBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCiAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8PSBvcHRp
b25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNt
ZEVuY29kZXItPnNldFRleHR1cmUobWlwbWFwT3V0cHV0Vmlld3MtPmF0KGJhdGNoU3JjTGV2ZWwg
KyBpKSwgaSk7CisgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1pcG1hcE91dHB1
dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyBpKSks
IGkpOwogICAgICAgICB9CiAKICAgICAgICAgdWludDMyX3QgdGhyZWFkc1BlclogPSBzdGQ6Om1h
eChzbGljZXMsIGZpcnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CiAKLSAgICAgICAgRGlzcGF0Y2hD
b21wdXRlKAotICAgICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2RlciwKLSAgICAgICAgICAg
IC8qKiBhbGxvd05vblVuaWZvcm0gKi8gZmFsc2UsCi0gICAgICAgICAgICBNVExTaXplTWFrZShm
aXJzdE1pcFZpZXctPndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0QXQwKCksIHRocmVh
ZHNQZXJaKSwKLSAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSk7CisgICAgICAgIERpc3BhdGNo
Q29tcHV0ZShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
LyoqIGFsbG93Tm9uVW5pZm9ybSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1U
TFNpemVNYWtlKGZpcnN0TWlwVmlldy0+d2lkdGhBdDAoKSwgZmlyc3RNaXBWaWV3LT5oZWlnaHRB
dDAoKSwgdGhyZWFkc1BlclopLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkR3JvdXBT
aXplKTsKIAogICAgICAgICByZW1haW5NaXBzIC09IG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJh
dGU7Ci0gICAgICAgIGJhdGNoU3JjTGV2ZWwgICAgPSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5u
dW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICAgICAgb3B0aW9ucy5zcmNMZXZlbCA9IGJhdGNoU3Jj
TGV2ZWwuZ2V0KCk7CisgICAgICAgIG9wdGlvbnMuc3JjTGV2ZWwgKz0gb3B0aW9ucy5udW1NaXBt
YXBzVG9HZW5lcmF0ZTsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CkBAIC0yNTA0LDggKzI2NzcsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxp
bmVTdGF0ZT4+IENvcHlQaXhlbHNVdGlsczo6Z2V0UGl4ZWxzQ29weVBpcGVsaW5lKAogICAgIGlu
dCBzaGFkZXJUZXh0dXJlVHlwZSA9IEdldFNoYWRlclRleHR1cmVUeXBlKHRleHR1cmUpOwogICAg
IGludCBpbmRleDIgPSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5cGVDb3VudCAqIChidWZmZXJXcml0
ZSA/IDEgOiAwKSArIHNoYWRlclRleHR1cmVUeXBlOwogCi0gICAgQXV0b09iakNQdHI8aWQ8TVRM
Q29tcHV0ZVBpcGVsaW5lU3RhdGU+PiAmY2FjaGUgPQotICAgICAgICBtUGl4ZWxzQ29weVBpcGVs
aW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CisgICAgYXV0byAmY2FjaGUgPSBtUGl4
ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CiAKICAgICBpZiAo
IWNhY2hlKQogICAgIHsKQEAgLTI3ODMsNyArMjk1NSwxMCBAQCBBdXRvT2JqQ1B0cjxpZDxNVExS
ZW5kZXJQaXBlbGluZVN0YXRlPj4KIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29t
cG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlcikKIHsKKyAgICBEaXNwbGF5TXRsICpk
aXNwbGF5ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworICAgIGF1dG8gc2hhZGVyTGliICAg
ICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwogICAgIEVuc3VyZVZlcnRleFNo
YWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgQCJleHBhbmRWZXJ0
ZXhGb3JtYXRDb21wb25lbnRzVlMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2hhZGVyTGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVD
YWNoZSk7CiAKICAgICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0gR2V0Q29tcHV0
aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyKTsKQEAgLTI3
OTcsOCArMjk3Miw3IEBAIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0RmxvYXRDb252
ZXJzdGlvbkNvbXB1dGVQaXBlbGluZShDb250ZXh0TXRsICpjb250CiB7CiAgICAgaW50IGZvcm1h
dElEVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY0FuZ2xlRm9ybWF0LmlkKTsKIAotICAgIEF1
dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KLSAgICAgICAg
bUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdOworICAgIGF1
dG8gJmNhY2hlID0gbUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFs
dWVdOwogCiAgICAgaWYgKCFjYWNoZSkKICAgICB7CkBAIC0yODQ5LDUgKzMwMjMsNTMgQEAgVmVy
dGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uUmVuZGVyUGlwZWxp
bmUoQ29udGV4dE10bCAqY29udGUKICAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVT
dGF0ZShjb250ZXh0TXRsLCBwaXBlbGluZURlc2MpOwogfQogCitBdXRvT2JqQ1B0cjxpZDxNVExM
aWJyYXJ5Pj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6Y3JlYXRlTXNsWGZiTGlicmFyeSgKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xh
dGVkTXNsKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAgICAgICBEaXNw
bGF5TXRsICpkaXNwbGF5ICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKTsKKyAgICAgICAg
aWQ8TVRMRGV2aWNlPiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworCisg
ICAgICAgIC8vIENvbnZlcnQgdG8gYWN0dWFsIGJpbmFyeSBzaGFkZXIKKyAgICAgICAgbXRsOjpB
dXRvT2JqQ1B0cjxOU0Vycm9yICo+IGVyciA9IG5pbDsKKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0
cjxpZDxNVExMaWJyYXJ5Pj4gbXRsU2hhZGVyTGliID0KKyAgICAgICAgICAgIG10bDo6Q3JlYXRl
U2hhZGVyTGlicmFyeShtdGxEZXZpY2UsIHRyYW5zbGF0ZWRNc2wsICZlcnIpOworICAgICAgICBp
ZiAoZXJyICYmICFtdGxTaGFkZXJMaWIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TTG9nKEAi
JUAiLCBlcnIuZ2V0KCkpOworICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtdGxTaGFkZXJMaWI7CisgICAgfQorfQorCitBdXRvT2JqQ1B0cjxpZDxNVExS
ZW5kZXJQaXBlbGluZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6Z2V0VHJhbnNmb3Jt
RmVlZGJhY2tSZW5kZXJQaXBlbGluZSgKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAg
IFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAgIG10bDo6UmVuZGVyUGlwZWxp
bmVEZXNjICZwaXBlbGluZURlc2MpCit7CisgICAgY29uc3QgUHJvZ3JhbU10bCAqcHJvZ3JhbU10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW0oKSk7Cisg
ICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmY2FjaGUgICA9ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJS
ZW5kZXJQaXBlbGluZUNhY2hlOworCisgICAgaWYgKCFjYWNoZS5nZXRWZXJ0ZXhTaGFkZXIoKSkK
KyAgICB7CisgICAgICAgIC8vIFBpcGVsaW5lIGNhY2hlIG5vdCBpbnRpYWxpemVkLCBkbyBpdCBu
b3c6CisgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gc2hhZGVyTGliID0gY3JlYXRlTXNsWGZiTGlicmFyeShjb250ZXh0TXRsLCBwcm9ncmFt
TXRsLT5nZXRYZmJNc2xTb3VyY2UoKSk7CisgICAgICAgICAgICAvLyBOb24gc3BlY2lhbGl6ZWQg
Y29uc3RhbnRzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlvbi4KKyAgICAg
ICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29u
dGV4dE10bCwgU0hBREVSX0VOVFJZX05BTUUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgPQor
ICAgICAgICBHZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVy
LCBwaXBlbGluZURlc2MpOworCisgICAgcmV0dXJuIGNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3Rh
dGUoY29udGV4dE10bCwgeGZiUGlwZWxpbmVEZXNjKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIG10
bAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMu
aAppbmRleCBmMjIwNjUwOTMzODZhMGI0OWVjOWE5MGQzMDQxOGQyZjFlMjViYzRjLi4yZTMzMzRk
ZmUyNTJiYmYxMDlkMzFiZWVkNjg2YjU5M2Q2OTJjYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfcmVzb3VyY2VzLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgUmVzb3VyY2UgOiBhbmds
ZTo6Tm9uQ29weWFibGUKICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3QgeyBy
ZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KICAgICB2b2lkIHJlc2V0Q1BV
UmVhZE1lbU5lZWRTeW5jKCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1OZWVkU3luYyA9IGZhbHNl
OyB9CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVyTXRsIHRv
IGtub3cgd2hldGhlciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQogICAgIGJvb2wg
aXNDUFVSZWFkTWVtRGlydHkoKSBjb25zdCB7IHJldHVybiBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1E
aXJ0eTsgfQogICAgIHZvaWQgcmVzZXRDUFVSZWFkTWVtRGlydHkoKSB7IG1Vc2FnZVJlZi0+Y3B1
UmVhZE1lbURpcnR5ID0gZmFsc2U7IH0KIApAQCAtODEsNyArODAsNyBAQCBjbGFzcyBSZXNvdXJj
ZSA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICB1aW50NjRfdCBjbWRCdWZmZXJRdWV1ZVNl
cmlhbCA9IDA7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIG1lYW5zIHRoZSByZXNvdXJjZSB3YXMg
aXNzdWVkIHRvIGJlIG1vZGlmaWVkIGJ5IEdQVSwgaWYgQ1BVIHdhbnRzIHRvIHJlYWQKLSAgICAg
ICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBjYWxsIG11c3QgYmUg
aW52b2tlZC4KKyAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5bmNob3JuaXphdGlv
biBjYWxsIG11c3QgYmUgaW52b2tlZC4KICAgICAgICAgYm9vbCBjcHVSZWFkTWVtTmVlZFN5bmMg
PSBmYWxzZTsKIAogICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNlZnVsIGZvciBCdWZmZXJNdGwg
dG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNoYWRvdyBjb3B5CkBAIC0xMTAs
NiArMTA5LDEzIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91
dCk7CiAKKyAgICAvLyBPbiBtYWNPUywgbWVtb3J5IHdpbGwgc3RpbGwgYmUgYWxsb2NhdGVkIGZv
ciB0aGlzIHRleHR1cmUuCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZU1lbW9yeUxlc3My
RFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4dHVyZVJlZiAqcmVmT3V0KTsKKwogICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJl
VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKQEAgLTE0NywxMCArMTUzLDIxIEBA
IGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBz
dGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZvcm1hdCAmZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgcmVmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisK
ICAgICBzdGF0aWMgVGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFs
VGV4dHVyZSk7CiAKICAgICAvLyBBbGxvdyBDUFUgdG8gcmVhZCAmIHdyaXRlIGRhdGEgZGlyZWN0
bHkgdG8gdGhpcyB0ZXh0dXJlPwogICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7Cisg
ICAgLy8gQWxsb3cgc2hhZGVycyB0byByZWFkL3NhbXBsZSB0aGlzIHRleHR1cmU/CisgICAgLy8g
VGV4dHVyZSBjcmVhdGVkIHdpdGggcmVuZGVyVGFyZ2V0T25seSBmbGFnIHdvbid0IGJlIHJlYWRh
YmxlCisgICAgYm9vbCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CiAKICAgICBib29sIHN1cHBv
cnRGb3JtYXRWaWV3KCkgY29uc3Q7CiAKQEAgLTIxOCwxNiArMjM1LDI5IEBAIGNsYXNzIFRleHR1
cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgTVRMQ29sb3JXcml0ZU1hc2sgZ2V0Q29s
b3JXcml0YWJsZU1hc2soKSBjb25zdCB7IHJldHVybiAqbUNvbG9yV3JpdGFibGVNYXNrOyB9CiAg
ICAgdm9pZCBzZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICpt
Q29sb3JXcml0YWJsZU1hc2sgPSBtYXNrOyB9CiAKLSAgICAvLyBHZXQgbGluZWFyIGNvbG9yIHNw
YWNlIHZpZXcuIE9ubHkgdXNhYmxlIGZvciBzUkdCIHRleHR1cmVzLgotICAgIFRleHR1cmVSZWYg
Z2V0TGluZWFyQ29sb3JWaWV3KCk7CisgICAgLy8gR2V0IHJlYWRpbmcgY29weS4gVXNlZCBmb3Ig
cmVhZGluZyBub24tcmVhZGFibGUgdGV4dHVyZSBvciByZWFkaW5nIHN0ZW5jaWwgdmFsdWUgZnJv
bQorICAgIC8vIHBhY2tlZCBkZXB0aCAmIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAvLyBOT1RFOiB0
aGlzIG9ubHkgY29waWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisgICAgLy8g
VGhlIHRleGVscyB3aWxsIGJlIGNvcGllZCB0byByZWdpb24oMCwgMCwgMCwgYXJlYVRvQ29weS5z
aXplKSBvZiB0aGUgcmV0dXJuZWQgdGV4dHVyZS4KKyAgICAvLyBUaGUgcmV0dXJuZWQgcG9pbnRl
ciB3aWxsIGJlIHJldGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAv
LyBDYWxsaW5nIGdldFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZpb3VzbHkgcmV0
dXJuZWQgdGV4dHVyZS4KKyAgICBUZXh0dXJlUmVmIGdldFJlYWRhYmxlQ29weShDb250ZXh0TXRs
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQzMl90IGxldmVsVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQzMl90IHNsaWNlVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1UTFJlZ2lvbiAmYXJlYVRvQ29weSk7CisKKyAgICB2b2lkIHJlbGVhc2VSZWFkYWJs
ZUNvcHkoKTsKIAogICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKICAgICBUZXh0dXJlUmVmIGdldFN0
ZW5jaWxWaWV3KCk7CisgICAgLy9HZXQgbGluZWFyIGNvbG9yCisgICAgVGV4dHVyZVJlZiBnZXRM
aW5lYXJDb2xvclZpZXcoKTsKIAogICAgIC8vIENoYW5nZSB0aGUgd3JhcHBlZCBtZXRhbCBvYmpl
Y3QuIFNwZWNpYWwgY2FzZSBmb3Igc3dhcGNoYWluIGltYWdlCiAgICAgdm9pZCBzZXQoaWQ8TVRM
VGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKIAotICAgIC8vIHN5bmMgY29udGVudCBiZXR3ZWVuIENQ
VSBhbmQgR1BVCisgICAgLy8gRXhwbGljaXRseSBzeW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5k
IEdQVQogICAgIHZvaWQgc3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0
Q29tbWFuZEVuY29kZXIgKmVuY29kZXIpOwogCiAgIHByaXZhdGU6CkBAIC0yNDEsMTIgKzI3MSw0
MSBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBz
dGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IG1pcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJU
YXJnZXRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
b3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bWVtb3J5TGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJl
UmVmICpyZWZPdXQpOworCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZVRleHR1cmUoQ29u
dGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworCiAgICAgVGV4dHVy
ZShpZDxNVExUZXh0dXJlPiBtZXRhbFRleHR1cmUpOwogICAgIFRleHR1cmUoQ29udGV4dE10bCAq
Y29udGV4dCwKICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAogICAgICAg
ICAgICAgdWludDMyX3QgbWlwcywKICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwK
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKyAgICBUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCisgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAg
ICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9u
bHksCisgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAgICAgIGJvb2wg
bWVtb3J5TGVzcyk7CisKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAg
ICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgIElPU3VyZmFjZVJl
ZiBpb3N1cmZhY2UsCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAorICAgICAgICAgICAg
Ym9vbCByZW5kZXJUYXJnZXRPbmx5KTsKIAogICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdmlldwog
ICAgIFRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0IGZvcm1hdCk7CkBA
IC0yNjQsOSArMzIzLDE0IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2Us
CiAgICAgVGV4dHVyZVJlZiBtTGluZWFyQ29sb3JWaWV3OwogCiAgICAgVGV4dHVyZVJlZiBtU3Rl
bmNpbFZpZXc7CisgICAgLy9SZWFkYWJsZSBjb3B5IG9mIHRleHR1cmUKKyAgICBUZXh0dXJlUmVm
IG1SZWFkQ29weTsKKwogfTsKIAotY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJlc291cmNl
LCBwdWJsaWMgV3JhcHBlZE9iamVjdDxpZDxNVExCdWZmZXI+PgorY2xhc3MgQnVmZmVyIGZpbmFs
IDogcHVibGljIFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdyYXBwZWRP
YmplY3Q8aWQ8TVRMQnVmZmVyPj4sCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjpl
bmFibGVfc2hhcmVkX2Zyb21fdGhpczxCdWZmZXI+CiB7CiAgIHB1YmxpYzoKICAgICBzdGF0aWMg
YW5nbGU6OlJlc3VsdCBNYWtlQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3Jlc291cmNlcy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCmluZGV4IDliZWU0NzVmODY2ZDY0YmIyNWM4NWIz
NmVmMTc4ZWU3Y2ZhZWRiMTguLmQwNDc1YWU3YTM5ZjRlYTIzZjExMTk2Y2E3MzBkZjhiY2I1ODU0
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCkBAIC0zNCwyMCAr
MzQsMjIgQEAgaW5saW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXpl
LCBjb25zdCBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCkKIC8vIEFzeW5jaHJvbm91c2x5IHN5bmNo
cm9uaXplIHRoZSBjb250ZW50IG9mIGEgcmVzb3VyY2UgYmV0d2VlbiBHUFUgbWVtb3J5IGFuZCBp
dHMgQ1BVIGNhY2hlLgogLy8gTk9URTogVGhpcyBvcGVyYXRpb24gZG9lc24ndCBmaW5pc2ggaW1t
ZWRpYXRlbHkgdXBvbiBmdW5jdGlvbidzIHJldHVybi4KIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9p
ZCBJbnZva2VDUFVNZW1TeW5jKENvbnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRF
bmNvZGVyICpibGl0RW5jb2RlciwgVCAqcmVzb3VyY2UpCit2b2lkIFN5bmNDb250ZW50KENvbnRl
eHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVy
ICpibGl0RW5jb2RlciwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFQ+
ICZyZXNvdXJjZSkKIHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlT
VAogICAgIGlmIChibGl0RW5jb2RlcikKICAgICB7CiAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5j
aHJvbml6ZVJlc291cmNlKHJlc291cmNlKTsKKwogICAgICAgICByZXNvdXJjZS0+cmVzZXRDUFVS
ZWFkTWVtTmVlZFN5bmMoKTsKICAgICB9CiAjZW5kaWYKIH0KLS8vIEVuc3VyZSB0aGF0IGEgcmVz
b3VyY2UncyBDUFUgY2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZpbmlzaGVz
IGl0cyBtb2RpZmljYXRpb25zIG9uCi0vLyB0aGUgcmVzb3VyY2UuCisKIHRlbXBsYXRlIDxjbGFz
cyBUPgotdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwg
VCAqcmVzb3VyY2UpCit2b2lkIEVuc3VyZUNvbnRlbnRTeW5jZWQoQ29udGV4dE10bCAqY29udGV4
dCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKIHsKICNpZiBUQVJHRVRfT1Nf
T1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAogICAgIC8vIE1ha2Ugc3VyZSBHUFUgJiBDUFUg
Y29udGVudHMgYXJlIHN5bmNocm9uaXplZC4KQEAgLTU2LDcgKzU4LDcgQEAgdm9pZCBFbnN1cmVD
UFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCiAgICAg
aWYgKHJlc291cmNlLT5nZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdlTW9kZU1hbmFnZWQg
JiYgcmVzb3VyY2UtPmlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkpCiAgICAgewogICAgICAgICBtdGw6
OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0LT5nZXRCbGl0Q29tbWFu
ZEVuY29kZXIoKTsKLSAgICAgICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2Rl
ciwgcmVzb3VyY2UpOworICAgICAgICBTeW5jQ29udGVudChjb250ZXh0LCBibGl0RW5jb2Rlciwg
cmVzb3VyY2UpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTIyLDYgKzEyNCwyNCBAQCBhbmdsZTo6
UmVzdWx0IFRleHR1cmU6Ok1ha2UyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICB9
ICAvLyBBTkdMRV9NVExfT0JKQ19TQ09QRQogfQogCisvKiogc3RhdGljICovCithbmdsZTo6UmVz
dWx0IFRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZv
cm1hdCAmZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgQU5HTEVfTVRM
X09CSkNfU0NPUEUKKyAgICB7CisgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0K
KyAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0
aFBpeGVsRm9ybWF0OmZvcm1hdC5tZXRhbEZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0OmhlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtaXBtYXBwZWQ6Tk9dOworCisgICAgICAgIHJldHVybiBNYWtlVGV4
dHVyZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIDEsIHRydWUsIGZhbHNlLCB0cnVlLCByZWZPdXQp
OworICAgIH0gIC8vIEFOR0xFX01UTF9PQkpDX1NDT1BFCit9CiAvKiogc3RhdGljICovCiBhbmds
ZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3Jt
YXQsCkBAIC0yMjMsNiArMjQzLDIzIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZTNEVGV4
dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29u
dGV4dCwgZm9ybWF0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZp
ZXcsIHJlZk91dCk7CiAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKIH0KK2FuZ2xlOjpS
ZXN1bHQgVGV4dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0
ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElPU3VyZmFjZVJlZiByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgTVRMVGV4dHVyZURl
c2NyaXB0b3IgKmRlc2MgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FV
VE9SRUxFQVNFXTsKKyAgICBkZXNjLnRleHR1cmVUeXBlICAgICAgICAgICA9IE1UTFRleHR1cmVU
eXBlMkQ7CisgICAgZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAgPSBmb3JtYXQubWV0YWxGb3Jt
YXQ7CisgICAgZGVzYy53aWR0aCAgICAgICAgICAgICAgICAgPSB3aWR0aDsKKyAgICBkZXNjLmhl
aWdodCAgICAgICAgICAgICAgICA9IGhlaWdodDsKKyAgICBkZXNjLm1pcG1hcExldmVsQ291bnQg
ICAgICA9IDE7CisgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgICAgICAgPSAxOworICAgIHJldHVy
biBNYWtlVGV4dHVyZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIHJlZiwgcGxhbmUsIE5PLCByZWZP
dXQpOworfQogCiAvKiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0
dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCkBAIC0yMzMsNyArMjcwLDQyIEBAIGFuZ2xlOjpSZXN1
bHQgVGV4dHVyZTo6TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKIHsKLSAgICByZWZP
dXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9u
bHksIGFsbG93Rm9ybWF0VmlldykpOworICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBt
dGxGb3JtYXQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9ybWF0Vmlldywg
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgIHJlZk91dCk7Cit9CisKK2FuZ2xlOjpSZXN1
bHQgVGV4dHVyZTo6TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKK3sKKyAgICBy
ZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdl
dE9ubHksIGFsbG93Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworCisgICAgaWYgKCFyZWZPdXQg
fHwgIXJlZk91dC0+Z2V0KCkpCisgICAgeworICAgICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4
dCwgZmFsc2UsIEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICBpZiAoIW10bEZvcm1hdC5o
YXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkpCisgICAgeworICAgICAgICByZWZPdXQtPmdldCgpLT5z
ZXRDb2xvcldyaXRhYmxlTWFzayhHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCkp
OworICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5n
bGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJm10bEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3Ig
KmRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBz
dXJmYWNlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2Vy
IHNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRh
cmdldE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYg
KnJlZk91dCkKK3sKKyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2Ms
IHN1cmZhY2VSZWYsIHNsaWNlLCByZW5kZXJUYXJnZXRPbmx5KSk7CiAKICAgICBpZiAoISgqcmVm
T3V0KSB8fCAhKCpyZWZPdXQpLT5nZXQoKSkKICAgICB7CkBAIC0yNjQsNiArMzM2LDE1IEBAIFRl
eHR1cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbWlwcywKICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAogICAg
ICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldykKKyAgICA6IFRleHR1cmUoY29udGV4
dCwgZGVzYywgbWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSkK
K3t9CisKK1RleHR1cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IG1pcHMsCisgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgIGJvb2wg
bWVtb3J5TGVzcykKICAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1U
TENvbG9yV3JpdGVNYXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCiB7CiAgICAgQU5HTEVfTVRM
X09CSkNfU0NPUEUKQEAgLTI4Myw4ICszNjQsMTYgQEAgVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAogICAgICAgICAgICAgZGVzYy51c2FnZSB8PSBNVExUZXh0dXJlVXNhZ2VS
ZW5kZXJUYXJnZXQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udGV4dC0+Z2V0TmF0aXZl
Rm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKLSAgICAgICAg
ICAgIGRlc2MudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAg
ICAgICBpZiAobWVtb3J5TGVzcykKKyAgICAgICAgeworI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRB
UkdFVF9PU19UVikgJiYgIVRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgICAgZGVzYy5y
ZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWVtb3J5bGVzczsKKyNlbHNl
CisgICAgICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1v
ZGVQcml2YXRlOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+
Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwK
KyAgICAgICAgICAgICAgICAgZGVzYy50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTJETXVs
dGlzYW1wbGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9y
dCBob3N0IGFjY2VzcyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCiAgICAgICAgICAg
ICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOwpA
QCAtMzEwLDYgKzM5OSw0NiBAQCBUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQs
CiAgICAgfQogfQogCitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAgICAg
ICBJT1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBs
YW5lLAorICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHkpCisgICAgOiBtQ29s
b3JXcml0YWJsZU1hc2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRlTWFzaz4oTVRMQ29s
b3JXcml0ZU1hc2tBbGwpKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAg
ICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4dC0+Z2V0TWV0YWxEZXZpY2Uo
KTsKKworICAgICAgICAvLyBFdmVyeSB0ZXh0dXJlIHdpbGwgc3VwcG9ydCBiZWluZyByZW5kZXJl
ZCBmb3Igbm93CisgICAgICAgIGRlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNhZ2VQaXhlbEZvcm1h
dFZpZXc7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzYy5w
aXhlbEZvcm1hdCkuaXNSZW5kZXJhYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2Mu
dXNhZ2UgfD0gTVRMVGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OworICAgICAgICB9CisKKyNpZiAo
VEFSR0VUX09TX0lPUyB8fCBUQVJHRVRfT1NfVFYpICYmICFUQVJHRVRfT1NfTUFDQ0FUQUxZU1QK
KyAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hh
cmVkOworI2Vsc2UKKyAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0
b3JhZ2VNb2RlTWFuYWdlZDsKKyNlbmRpZgorCisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0T25s
eSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExU
ZXh0dXJlVXNhZ2VTaGFkZXJSZWFkOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2
ZUZvcm1hdENhcHMoZGVzYy5waXhlbEZvcm1hdCkud3JpdGFibGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJXcml0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZDxNVExUZXh0
dXJlPiBpb3N1cmZUZXh0dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRv
cjpkZXNjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW9zdXJmYWNlOmlvc3VyZmFjZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFu
ZTpwbGFuZV07CisgICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVB
U0VdKTsKKyAgICB9Cit9CisKIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1U
TFBpeGVsRm9ybWF0IGZvcm1hdCkKICAgICA6IFJlc291cmNlKG9yaWdpbmFsKSwKICAgICAgIG1D
b2xvcldyaXRhYmxlTWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUg
Y29sb3Igd3JpdGUgbWFzayBwcm9wZXJ0eQpAQCAtMzQxLDcgKzQ3MCw3IEBAIFRleHR1cmU6OlRl
eHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIGNvbnN0IFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgJnN3
aXp6bGUpCiAgICAgOiBSZXNvdXJjZShvcmlnaW5hbCksCiAgICAgICBtQ29sb3JXcml0YWJsZU1h
c2sob3JpZ2luYWwtPm1Db2xvcldyaXRhYmxlTWFzaykgIC8vIFNoYXJlIGNvbG9yIHdyaXRlIG1h
c2sgcHJvcGVydHkKIHsKLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKyNpZiBkZWZp
bmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCiAgICAgQU5HTEVfTVRM
X09CSkNfU0NPUEUKICAgICB7CiAgICAgICAgIGF1dG8gdmlldyA9IFtvcmlnaW5hbC0+Z2V0KCkK
QEAgLTM2MCwxMiArNDg5LDEyIEBAIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWws
IGNvbnN0IFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiAKIHZvaWQgVGV4dHVyZTo6
c3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIg
KmJsaXRFbmNvZGVyKQogewotICAgIEludm9rZUNQVU1lbVN5bmMoY29udGV4dCwgYmxpdEVuY29k
ZXIsIHRoaXMpOworICAgIFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRf
ZnJvbV90aGlzKCkpOwogfQogCiB2b2lkIFRleHR1cmU6OnN5bmNDb250ZW50SWZOZWVkZWQoQ29u
dGV4dE10bCAqY29udGV4dCkKIHsKLSAgICBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoY29udGV4
dCwgdGhpcyk7CisgICAgRW5zdXJlQ29udGVudFN5bmNlZChjb250ZXh0LCBzaGFyZWRfZnJvbV90
aGlzKCkpOwogfQogCiBib29sIFRleHR1cmU6OmlzQ1BVQWNjZXNzaWJsZSgpIGNvbnN0CkBAIC0z
NzksNiArNTA4LDExIEBAIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKICAg
ICByZXR1cm4gZ2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3RvcmFnZU1vZGVTaGFyZWQ7CiB9CiAK
K2Jvb2wgVGV4dHVyZTo6aXNTaGFkZXJSZWFkYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdl
dCgpLnVzYWdlICYgTVRMVGV4dHVyZVVzYWdlU2hhZGVyUmVhZDsKK30KKwogYm9vbCBUZXh0dXJl
OjpzdXBwb3J0Rm9ybWF0VmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldCgpLnVzYWdlICYg
TVRMVGV4dHVyZVVzYWdlUGl4ZWxGb3JtYXRWaWV3OwpAQCAtNTE0LDEyICs2NDgsMTQgQEAgVGV4
dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aERpZmZlcmVudEZvcm1hdChNVExQaXhlbEZv
cm1hdCBmb3JtYXQpCiAgICAgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOwogICAgIHJldHVy
biBUZXh0dXJlUmVmKG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQorCiBUZXh0dXJlUmVm
IFRleHR1cmU6OmNyZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdChNVExQaXhlbEZvcm1hdCBm
b3JtYXQpCiB7Ci0gICAgLy8gTm8gbmVlZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkp
OwogICAgIHJldHVybiBUZXh0dXJlUmVmKG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQog
CisKKwogVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJl
U3dpenpsZUNoYW5uZWxzICZzd2l6emxlKQogewogI2lmIEFOR0xFX01UTF9TV0laWkxFX0FWQUlM
QUJMRQpAQCAtNjUyLDYgKzc4OCw0OCBAQCBUZXh0dXJlUmVmIFRleHR1cmU6OmdldExpbmVhckNv
bG9yVmlldygpCiAgICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CiB9CiAKK1RleHR1cmVSZWYg
VGV4dHVyZTo6Z2V0UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqZW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGxl
dmVsVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu
dDMyX3Qgc2xpY2VUb0NvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBNVExSZWdpb24gJmFyZWFUb0NvcHkpCit7CisgICAgZ2w6OkV4dGVudHMgZmlyc3RMZXZl
bFNpemUgPSBzaXplKGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworICAgIGlmICghbVJlYWRDb3B5IHx8
IG1SZWFkQ29weS0+Z2V0KCkud2lkdGggPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpcnN0TGV2ZWxT
aXplLndpZHRoKSB8fAorICAgICAgICBtUmVhZENvcHktPmdldCgpLmhlaWdodCA8IHN0YXRpY19j
YXN0PHNpemVfdD4oZmlyc3RMZXZlbFNpemUuaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIC8vIENy
ZWF0ZSBhIHRleHR1cmUgdGhhdCBiaWcgZW5vdWdoIHRvIHN0b3JlIHRoZSBmaXJzdCBsZXZlbCBk
YXRhIGFuZCBhbnkgc21hbGxlciBsZXZlbAorICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGRlc2MgICAgICAgICAgICA9IFtbTVRMVGV4dHVy
ZURlc2NyaXB0b3IgbmV3XSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAgZGVz
Yy50ZXh0dXJlVHlwZSAgICAgPSBnZXQoKS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIGRlc2Mu
cGl4ZWxGb3JtYXQgICAgID0gZ2V0KCkucGl4ZWxGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLndp
ZHRoICAgICAgICAgICA9IGZpcnN0TGV2ZWxTaXplLndpZHRoOworICAgICAgICAgICAgZGVzYy5o
ZWlnaHQgICAgICAgICAgPSBmaXJzdExldmVsU2l6ZS5oZWlnaHQ7CisgICAgICAgICAgICBkZXNj
LmRlcHRoICAgICAgICAgICA9IDE7CisgICAgICAgICAgICBkZXNjLmFycmF5TGVuZ3RoICAgICA9
IDE7CisgICAgICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFn
ZU1vZGVQcml2YXRlOworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5z
YW1wbGVDb3VudDsKKyAgICAgICAgICAgIGRlc2MudXNhZ2UgICAgICAgICAgID0gTVRMVGV4dHVy
ZVVzYWdlU2hhZGVyUmVhZCB8IE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0VmlldzsKKworICAg
ICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERl
dmljZSgpIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjXTsKKyAgICAgICAgICAgIG1SZWFk
Q29weS5yZXNldChuZXcgVGV4dHVyZShtdGxUZXh0dXJlKSk7CisgICAgICAgIH0gIC8vIEFOR0xF
X01UTF9PQkpDX1NDT1BFCisgICAgfQorCisgICAgQVNTRVJUKGVuY29kZXIpOworCisgICAgZW5j
b2Rlci0+Y29weVRleHR1cmUoc2hhcmVkX2Zyb21fdGhpcygpLCBzbGljZVRvQ29weSwgbGV2ZWxU
b0NvcHksIG1SZWFkQ29weSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAxKTsK
KworICAgIHJldHVybiBtUmVhZENvcHk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVJlYWRh
YmxlQ29weSgpCit7CisgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKK30KKwogVGV4dHVyZVJlZiBU
ZXh0dXJlOjpnZXRTdGVuY2lsVmlldygpCiB7CiAgICAgaWYgKG1TdGVuY2lsVmlldykKQEAgLTc5
OSw3ICs5NzcsNyBAQCBhbmdsZTo6UmVzdWx0IEJ1ZmZlcjo6cmVzZXRXaXRoUmVzT3B0KENvbnRl
eHRNdGwgKmNvbnRleHQsCiAKIHZvaWQgQnVmZmVyOjpzeW5jQ29udGVudChDb250ZXh0TXRsICpj
b250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCiB7Ci0gICAgSW52
b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisgICAgU3luY0NvbnRl
bnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CiB9CiAKIGNvbnN0
IHVpbnQ4X3QgKkJ1ZmZlcjo6bWFwUmVhZE9ubHkoQ29udGV4dE10bCAqY29udGV4dCkKQEAgLTgy
MCw3ICs5OTgsNyBAQCB1aW50OF90ICpCdWZmZXI6Om1hcFdpdGhPcHQoQ29udGV4dE10bCAqY29u
dGV4dCwgYm9vbCByZWFkb25seSwgYm9vbCBub1N5bmMpCiAgICAgewogICAgICAgICBDb21tYW5k
UXVldWUgJmNtZFF1ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKIAotICAgICAgICBFbnN1cmVD
UFVNZW1XaWxsQmVTeW5jZWQoY29udGV4dCwgdGhpcyk7CisgICAgICAgIEVuc3VyZUNvbnRlbnRT
eW5jZWQoY29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIAogICAgICAgICBpZiAodGhpcy0+
aXNCZWluZ1VzZWRCeUdQVShjb250ZXh0KSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9j
YWNoZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9zdGF0ZV9jYWNoZS5oCmluZGV4IDc2OGMzNjk3ZTg1ZTA2YjU2OGJkNWE1NzkwM2Qz
MzA5ZDQ4YmFkYzEuLmU2YmY3MWQ4MjlhMzVjZWZkODgxZDFjNDMwZTFkYzUxNzI4Mjg3YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLmgKQEAgLTIyLDYgKzIyLDEx
IEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1UTENsZWFyQ29sb3Ig
JmxocywgY29uc3QgTVRMQ2xlYXJDb2xvciAmcmhzKTsKIAorbmFtZXNwYWNlIGFuZ2xlCit7Citz
dHJ1Y3QgRmVhdHVyZXNNdGw7Cit9CisKIG5hbWVzcGFjZSByeAogewogY2xhc3MgQ29udGV4dE10
bDsKQEAgLTIyMyw3ICsyMjgsOCBAQCBzdHJ1Y3QgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjCiB9
OwogCiAvLyBTb21lIFNESyBsZXZlbHMgZG9uJ3QgZGVjbGFyZSBNVExQcmltaXRpdmVUb3BvbG9n
eUNsYXNzLiBOZWVkcyB0byBkbyBjb21waWxlIHRpbWUgY2hlY2sgaGVyZToKLSNpZiAhKFRBUkdF
VF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RB
UkdFVCA8IF9fSVBIT05FXzEyXzAKKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01B
Q0NBVEFMWVNUKSAmJiBcCisgICAgKCFkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IEFOR0xFX0lP
U19ERVBMT1lfVEFSR0VUIDwgX19JUEhPTkVfMTJfMCkKICMgICAgZGVmaW5lIEFOR0xFX01UTF9Q
UklNSVRJVkVfVE9QT0xPR1lfQ0xBU1NfQVZBSUxBQkxFIDAKIHVzaW5nIFByaW1pdGl2ZVRvcG9s
b2d5Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB1aW50MzJfdDsK
IGNvbnN0ZXhwciBQcmltaXRpdmVUb3BvbG9neUNsYXNzIGtQcmltaXRpdmVUb3BvbG9neUNsYXNz
VHJpYW5nbGUgPSAwOwpAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRl
clBpcGVsaW5lRGVzYwogICAgIFJlbmRlclBpcGVsaW5lRGVzYyAmb3BlcmF0b3I9KGNvbnN0IFJl
bmRlclBpcGVsaW5lRGVzYyAmc3JjKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5k
ZXJQaXBlbGluZURlc2MgJnJocykgY29uc3Q7Ci0KICAgICBzaXplX3QgaGFzaCgpIGNvbnN0Owot
CiAgICAgYm9vbCByYXN0ZXJpemF0aW9uRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgVmVydGV4RGVz
YyB2ZXJ0ZXhEZXNjcmlwdG9yOwpAQCAtMjg4LDYgKzI5MiwyNyBAQCBzdHJ1Y3QgYWxpZ25hcyg0
KSBSZW5kZXJQaXBlbGluZURlc2MKICAgICBib29sIGVtdWxhdGVDb3ZlcmFnZU1hc2sgOiAxOwog
fTsKIAorc3RydWN0IFJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2MKK3sKKyAg
ICBUZXh0dXJlUmVmIGdldFRleHR1cmVSZWYoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlLmxvY2so
KTsgfQorICAgIFRleHR1cmVSZWYgZ2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSBjb25zdCB7IHJl
dHVybiBpbXBsaWNpdE1TVGV4dHVyZS5sb2NrKCk7IH0KKyAgICBib29sIGhhc0ltcGxpY2l0TVNU
ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQoKTsgfQor
ICAgIHVpbnQzMl90IGdldFJlbmRlclNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVGV4
dHVyZVJlZiB0ZXggICA9IGdldFRleHR1cmVSZWYoKTsKKyAgICAgICAgVGV4dHVyZVJlZiBtc1Rl
eCA9IGdldEltcGxpY2l0TVNUZXh0dXJlUmVmKCk7CisgICAgICAgIHJldHVybiBtc1RleCA/IG1z
VGV4LT5zYW1wbGVzKCkgOiAodGV4ID8gdGV4LT5zYW1wbGVzKCkgOiAxKTsKKyAgICB9CisKKyAg
ICBUZXh0dXJlV2Vha1JlZiB0ZXh0dXJlOworICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRl
eHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5k
IG9mCisgICAgLy8gYSByZW5kZXIgcGFzcy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGlu
dG8gbm9ybWFsIHRleHR1cmUgYWJvdmUuCisgICAgVGV4dHVyZVdlYWtSZWYgaW1wbGljaXRNU1Rl
eHR1cmU7CisgICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBrWmVyb05hdGl2ZU1pcExldmVs
OworICAgIHVpbnQzMl90IHNsaWNlT3JEZXB0aCAgID0gMDsKKyAgICBib29sIGJsZW5kYWJsZSAg
ICAgICAgICA9IHRydWU7Cit9OworCiBzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjCiB7
CiAgICAgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCk7CkBAIC0yOTcsMTggKzMyMiwzNCBAQCBz
dHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjCiAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRT
dG9yZU9wdGlvbnMoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3Ro
ZXIpIGNvbnN0OwogCi0gICAgQU5HTEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUo
KSBjb25zdCB7IHJldHVybiBpbXBsaWNpdE1TVGV4dHVyZS5nZXQoKTsgfQotCi0gICAgVGV4dHVy
ZVJlZiB0ZXh0dXJlOwotICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3
aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCi0gICAgLy8g
YSByZW5kZXIgcGFzcy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGludG8gbm9ybWFsIHRl
eHR1cmUgYWJvdmUuCi0gICAgVGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbDsKLSAgICB1aW50MzJfdCBzbGljZU9yRGVwdGg7Ci0KLSAgICAv
LyBUaGlzIGF0dGFjaG1lbnQgaXMgYmxlbmRhYmxlIG9yIG5vdC4KLSAgICBib29sIGJsZW5kYWJs
ZTsKKyAgICBBTkdMRV9JTkxJTkUgVGV4dHVyZVJlZiB0ZXh0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmdldFRleHR1cmVSZWYo
KSA6IG51bGxwdHI7CisgICAgfQorICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0
TVNUZXh0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyBy
ZW5kZXJUYXJnZXQtPmdldEltcGxpY2l0TVNUZXh0dXJlUmVmKCkgOiBudWxscHRyOworICAgIH0K
KyAgICBBTkdMRV9JTkxJTkUgYm9vbCBoYXNJbXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNp
dE1TVGV4dHVyZSgpIDogZmFsc2U7CisgICAgfQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCBy
ZW5kZXJTYW1wbGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQg
PyByZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSA6IDE7CisgICAgfQorICAgIEFOR0xF
X0lOTElORSBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5sZXZlbCA6IGtaZXJvTmF0aXZlTWlw
TGV2ZWw7CisgICAgfQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCBzbGljZU9yRGVwdGgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+
c2xpY2VPckRlcHRoIDogMDsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIGJvb2wgYmxlbmRhYmxl
KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5ibGVuZGFibGUg
OiBmYWxzZTsgfQogCisgICAgLy8gVGhpcyBpcyBzaGFyZWQgcG9pbnRlciB0byBhdm9pZCBjcmFz
aGluZyB3aGVuIHRleHR1cmUgZGVsZXRlZCBhZnRlciBib3VuZCB0byBhIGZyYW1lIGJ1ZmZlci4K
KyAgICBzdGQ6OnNoYXJlZF9wdHI8UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVz
Yz4gcmVuZGVyVGFyZ2V0OwogICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlvbjsKICAgICBNVExT
dG9yZUFjdGlvbiBzdG9yZUFjdGlvbjsKICAgICBNVExTdG9yZUFjdGlvbk9wdGlvbnMgc3RvcmVB
Y3Rpb25PcHRpb25zOwpAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1N0ZW5j
aWxBdHRhY2htZW50RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKICAgICB1
aW50MzJfdCBjbGVhclN0ZW5jaWwgPSAwOwogfTsKIAorLy8KKy8vIFRoaXMgaXMgQysrIGVxdWl2
YWxlbnQgb2YgT2JqZWN0aXZlLUMgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IuCisvLyBXZSBjb3Vs
ZCB1c2UgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0bHksIGhvd2V2ZXIsIHVzaW5nIEMr
KyBzdHJ1Y3QgaGFzIGJlbmVmaXRzIG9mIGZhc3QKKy8vIGNvcHksIHN0YWNrIGFsbG9jYXRpb24s
IGlubGluZWQgY29tcGFyaW5nIGZ1bmN0aW9uLCBldGMuCisvLwogc3RydWN0IFJlbmRlclBhc3NE
ZXNjCiB7CiAgICAgUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2MgY29sb3JBdHRhY2htZW50
c1trTWF4UmVuZGVyVGFyZ2V0c107CkBAIC00MTcsNyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlw
ZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CiB7CiAgIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5SZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1
bHQ7Ci0KICAgICAvLyBHZXQgc3BlY2lhbGl6ZWQgc2hhZGVyIGZvciB0aGUgcmVuZGVyIHBpcGVs
aW5lIGNhY2hlLgogICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRl
cihDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLApAQCAtNDI5LDcgKzQ3NCw3IEBA
IGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2Mg
JnJlbmRlclBpcGVsaW5lRGVzYykgPSAwOwogfTsKIAotLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRl
IGNhY2hlIHBlciBzaGFkZXIgcHJvZ3JhbS4KKy8vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBjYWNo
ZSBwZXIgc2hhZGVyIHByb2dyYW0KIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBh
bmdsZTo6Tm9uQ29weWFibGUKIHsKICAgcHVibGljOgpAQCAtNDU5LDYgKzUwNCw3IEBAIGNsYXNz
IFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBBdXRv
T2JqQ1B0cjxpZDxNVExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CiAgICAgLy8gTm9uLXNwZWNp
YWxpemVkIGZyYWdtZW50IHNoYWRlcgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTEZ1bmN0aW9uPj4g
bUZyYWdtZW50U2hhZGVyOworICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6
YXRpb24gZGlzY2FyZCwgb25lIHdpdGhvdXQKIAogICBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJQ
aXBlbGluZVN0YXRlcygpOwpAQCAtNDc3LDE0ICs1MjMsMTMgQEAgY2xhc3MgUmVuZGVyUGlwZWxp
bmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIC8vIE9uZSB0YWJsZSB3aXRo
IGRlZmF1bHQgYXR0cmliIGFuZCBvbmUgdGFibGUgd2l0aG91dC4KICAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8UmVuZGVyUGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGlu
ZVN0YXRlPj4+CiAgICAgICAgIG1SZW5kZXJQaXBlbGluZVN0YXRlc1syXTsKLQogICAgIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVy
RmFjdG9yeTsKIH07CiAKIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKIHsKICAgcHVibGljOgotICAgIFN0YXRlQ2FjaGUoKTsKKyAgICBTdGF0ZUNhY2hlKGNvbnN0
IGFuZ2xlOjpGZWF0dXJlc010bCAmZmVhdHVyZXMpOwogICAgIH5TdGF0ZUNhY2hlKCk7CiAKICAg
ICAvLyBOdWxsIGRlcHRoIHN0ZW5jaWwgc3RhdGUgaGFzIGRlcHRoL3N0ZWNpbCByZWFkICYgd3Jp
dGUgZGlzYWJsZWQuCkBAIC01MDIsNiArNTQ3LDggQEAgY2xhc3MgU3RhdGVDYWNoZSBmaW5hbCA6
IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIHZvaWQgY2xlYXIoKTsKIAogICBwcml2YXRlOgorICAg
IGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworCiAgICAgQXV0b09iakNQdHI8
aWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+PiBtTnVsbERlcHRoU3RlbmNpbFN0YXRlID0gbmlsOwog
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNjLCBBdXRvT2JqQ1B0cjxpZDxN
VExEZXB0aFN0ZW5jaWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3RhdGVzOwogICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxTYW1wbGVyRGVzYywgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4+
IG1TYW1wbGVyU3RhdGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUu
bW0KaW5kZXggMWNmMjM3YWQ2NDA0MmZiNTk3NjYzM2M5OGM3YjUxMTI0MGY5Mzc0OC4uNDVjNzE5
ZGQ3MTBjN2Y5YjZiNjE1MmYzOTkxNTA3OTNmM2RjMTg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNo
ZS5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfdXRpbHMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9GZWF0dXJlc010bC5oIgog
CiAjZGVmaW5lIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCiAg
ICAgKERTVCkuUFJPUEVSVFkgPSBzdGF0aWNfY2FzdDxfX3R5cGVvZl9fKChEU1QpLlBST1BFUlRZ
KT4oVG9PYmpDKChTUkMpLlBST1BFUlRZKSkKQEAgLTE4MiwxMCArMTgzLDEwIEBAIGlkPE1UTFRl
eHR1cmU+IFRvT2JqQyhjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogICAgIHJldHVybiB0ZXh0
dXJlUmVmID8gdGV4dHVyZVJlZi0+Z2V0KCkgOiBuaWw7CiB9CiAKLXZvaWQgQmFzZVJlbmRlclBh
c3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNy
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExSZW5kZXJQYXNz
QXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCkKK3ZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50
RGVzY1RvT2JqQyhNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MgJnNyYykKIHsKLSAgICBjb25zdCBUZXh0dXJlUmVmICZpbXBsaWNpdE1zVGV4dHVy
ZSA9IHNyYy5pbXBsaWNpdE1TVGV4dHVyZTsKKyAgICBhdXRvIGltcGxpY2l0TXNUZXh0dXJlID0g
c3JjLmltcGxpY2l0TVNUZXh0dXJlKCk7CiAKICAgICBpZiAoaW1wbGljaXRNc1RleHR1cmUpCiAg
ICAgewpAQCAtMTkzLDMxICsxOTQsMzEgQEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnRE
ZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAogICAgICAgICBk
c3QubGV2ZWwgICAgICAgICAgPSAwOwogICAgICAgICBkc3Quc2xpY2UgICAgICAgICAgPSAwOwog
ICAgICAgICBkc3QuZGVwdGhQbGFuZSAgICAgPSAwOwotICAgICAgICBkc3QucmVzb2x2ZVRleHR1
cmUgPSBUb09iakMoc3JjLnRleHR1cmUpOwotICAgICAgICBkc3QucmVzb2x2ZUxldmVsICAgPSBz
cmMubGV2ZWwuZ2V0KCk7CisgICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMu
dGV4dHVyZSgpKTsKKyAgICAgICAgZHN0LnJlc29sdmVMZXZlbCAgID0gc3JjLmxldmVsKCkuZ2V0
KCk7CiAgICAgICAgIGlmIChkc3QucmVzb2x2ZVRleHR1cmUudGV4dHVyZVR5cGUgPT0gTVRMVGV4
dHVyZVR5cGUzRCkKICAgICAgICAgewotICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5l
ID0gc3JjLnNsaWNlT3JEZXB0aDsKKyAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9
IHNyYy5zbGljZU9yRGVwdGgoKTsKICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9
IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBkc3Qu
cmVzb2x2ZVNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAgZHN0LnJl
c29sdmVTbGljZSAgICAgID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0LnJl
c29sdmVEZXB0aFBsYW5lID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBkc3QudGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSk7Ci0gICAgICAgIGRzdC5s
ZXZlbCAgID0gc3JjLmxldmVsLmdldCgpOworICAgICAgICBkc3QudGV4dHVyZSA9IFRvT2JqQyhz
cmMudGV4dHVyZSgpKTsKKyAgICAgICAgZHN0LmxldmVsICAgPSBzcmMubGV2ZWwoKS5nZXQoKTsK
ICAgICAgICAgaWYgKGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBlM0Qp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0
aDsKKyAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAg
ICAgICAgICAgZHN0LnNsaWNlICAgICAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAg
ICAgICAgewotICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOwor
ICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAgICAg
ICAgICBkc3QuZGVwdGhQbGFuZSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZHN0LnJlc29sdmVU
ZXh0dXJlICAgID0gbmlsOwpAQCAtMjMxLDI2ICsyMzIsMjYgQEAgdm9pZCBCYXNlUmVuZGVyUGFz
c0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3Jj
LAogICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkoZHN0LCBzcmMsIHN0b3JlQWN0aW9uT3B0aW9u
cyk7CiB9CiAKLXZvaWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNj
ICZkZXNjLAotICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2NyaXB0
b3IgKm9iakNEZXNjKQordm9pZCBUb09iakMoTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERl
c2NyaXB0b3IgKm9iakNEZXNjLAorICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0NvbG9yQXR0
YWNobWVudERlc2MgJmRlc2MpCiB7Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1Rv
T2JqQyhkZXNjLCBvYmpDRGVzYyk7CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1Rv
T2JqQyhvYmpDRGVzYywgZGVzYyk7CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNE
ZXNjLCBkZXNjLCBjbGVhckNvbG9yKTsKIH0KIAotdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFz
c0RlcHRoQXR0YWNobWVudERlc2MgJmRlc2MsCi0gICAgICAgICAgICBNVExSZW5kZXJQYXNzRGVw
dGhBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MpCit2b2lkIFRvT2JqQyhNVExSZW5kZXJQ
YXNzRGVwdGhBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MsCisgICAgICAgICAgICBjb25z
dCBSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50RGVzYyAmZGVzYykKIHsKLSAgICBCYXNlUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNjKTsKKyAgICBCYXNlUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKIAogICAgIEFOR0xFX09C
SkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOwogfQogCi12b2lkIFRv
T2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAotICAgICAg
ICAgICAgTVRMUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2Mp
Cit2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yICpv
YmpDRGVzYywKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERl
c2MgJmRlc2MpCiB7Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhkZXNj
LCBvYmpDRGVzYyk7CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpD
RGVzYywgZGVzYyk7CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBkZXNj
LCBjbGVhclN0ZW5jaWwpOwogfQpAQCAtNjk2LDExICs2OTcsNyBAQCBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2M6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYygpCiAKIHZvaWQgUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpyZXNldCgpCiB7Ci0gICAgdGV4dHVyZS5yZXNldCgpOwotICAgIGltcGxp
Y2l0TVNUZXh0dXJlLnJlc2V0KCk7Ci0gICAgbGV2ZWwgICAgICAgICAgICAgID0gbXRsOjprWmVy
b05hdGl2ZU1pcExldmVsOwotICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7Ci0gICAgYmxlbmRh
YmxlICAgICAgICAgID0gZmFsc2U7CisgICAgcmVuZGVyVGFyZ2V0ICAgICAgID0gbnVsbHB0cjsK
ICAgICBsb2FkQWN0aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKICAgICBzdG9yZUFj
dGlvbiAgICAgICAgPSBNVExTdG9yZUFjdGlvblN0b3JlOwogICAgIHN0b3JlQWN0aW9uT3B0aW9u
cyA9IE1UTFN0b3JlQWN0aW9uT3B0aW9uTm9uZTsKQEAgLTcwOSw4ICs3MDYsOSBAQCB2b2lkIFJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6cmVzZXQoKQogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVu
dERlc2M6OmVxdWFsSWdub3JlTG9hZFN0b3JlT3B0aW9ucygKICAgICBjb25zdCBSZW5kZXJQYXNz
QXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdAogewotICAgIHJldHVybiB0ZXh0dXJlID09IG90
aGVyLnRleHR1cmUgJiYgaW1wbGljaXRNU1RleHR1cmUgPT0gb3RoZXIuaW1wbGljaXRNU1RleHR1
cmUgJiYKLSAgICAgICAgICAgbGV2ZWwgPT0gb3RoZXIubGV2ZWwgJiYgc2xpY2VPckRlcHRoID09
IG90aGVyLnNsaWNlT3JEZXB0aDsKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJl
bmRlclRhcmdldCB8fAorICAgICAgICAgICAodGV4dHVyZSgpID09IG90aGVyLnRleHR1cmUoKSAm
JiBsZXZlbCgpID09IG90aGVyLmxldmVsKCkgJiYKKyAgICAgICAgICAgIHNsaWNlT3JEZXB0aCgp
ID09IG90aGVyLnNsaWNlT3JEZXB0aCgpKTsKIH0KIAogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVu
dERlc2M6Om9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikg
Y29uc3QKQEAgLTcyMyw2ICs3MjEsMzAgQEAgYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6
Om9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikKICAgICBy
ZXR1cm4gbG9hZEFjdGlvbiA9PSBvdGhlci5sb2FkQWN0aW9uICYmIHN0b3JlQWN0aW9uID09IG90
aGVyLnN0b3JlQWN0aW9uICYmCiAgICAgICAgICAgIHN0b3JlQWN0aW9uT3B0aW9ucyA9PSBvdGhl
ci5zdG9yZUFjdGlvbk9wdGlvbnM7CiB9CisvLyBDb252ZXJ0IHRvIE1ldGFsIG9iamVjdAordm9p
ZCBSZW5kZXJQYXNzRGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBhc3NEZXNjcmlw
dG9yICpvYmpDRGVzYykgY29uc3QKK3sKKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgIHsK
KyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgVG9PYmpDKG9iakNEZXNjLmNvbG9yQXR0YWNobWVu
dHNbaV0sIGNvbG9yQXR0YWNobWVudHNbaV0pOworICAgICAgICB9CisgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IG51bUNvbG9yQXR0YWNobWVudHM7IGkgPCBrTWF4UmVuZGVyVGFyZ2V0czsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisgICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUgICAgID0gbmlsOwor
ICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sZXZlbCAgICAgICA9IDA7
CisgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0g
MDsKKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uZGVwdGhQbGFuZSAg
PSAwOworICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9u
ICA9IE1UTExvYWRBY3Rpb25Eb250Q2FyZTsKKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0
YWNobWVudHNbaV0uc3RvcmVBY3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworICAgICAg
ICB9CisKKyAgICAgICAgVG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRh
Y2htZW50KTsKKyAgICAgICAgVG9PYmpDKG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50LCBzdGVu
Y2lsQXR0YWNobWVudCk7CisgICAgfQorfQogCiB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhSZW5kZXJQaXBlbGluZU91dHB1dERlc2MgKm91dERl
c2MpIGNvbnN0CiB7CkBAIC03NDIsMTkgKzc2NCwxOSBAQCB2b2lkIFJlbmRlclBhc3NEZXNjOjpw
b3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhNVExDb2xvcldyaXRlTWFzayBjb2xvcldy
aQogdm9pZCBSZW5kZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2Mo
Y29uc3QgQmxlbmREZXNjICZibGVuZFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXRE
ZXNjKSBjb25zdAogewotICAgIFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAmb3V0cHV0RGVzY3Jp
cHRvciA9ICpvdXREZXNjOwotICAgIG91dHB1dERlc2NyaXB0b3IubnVtQ29sb3JBdHRhY2htZW50
cyAgICAgICA9IHRoaXMtPm51bUNvbG9yQXR0YWNobWVudHM7Ci0gICAgb3V0cHV0RGVzY3JpcHRv
ci5zYW1wbGVDb3VudCAgICAgICAgICAgICAgID0gdGhpcy0+c2FtcGxlQ291bnQ7CisgICAgYXV0
byAmb3V0cHV0RGVzY3JpcHRvciAgICAgICAgICAgICAgID0gKm91dERlc2M7CisgICAgb3V0cHV0
RGVzY3JpcHRvci5udW1Db2xvckF0dGFjaG1lbnRzID0gdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50
czsKKyAgICBvdXRwdXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1w
bGVDb3VudDsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdGhpcy0+bnVtQ29sb3JBdHRh
Y2htZW50czsgKytpKQogICAgIHsKICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0YWNo
bWVudCA9IHRoaXMtPmNvbG9yQXR0YWNobWVudHNbaV07Ci0gICAgICAgIGF1dG8gdGV4dHVyZSAg
ICAgICAgICAgICAgICAgICAgPSByZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LnRleHR1cmU7Cisg
ICAgICAgIGF1dG8gdGV4dHVyZSAgICAgICAgICAgICAgICAgICAgPSByZW5kZXJQYXNzQ29sb3JB
dHRhY2htZW50LnRleHR1cmUoKTsKIAogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgewog
ICAgICAgICAgICAgLy8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUKICAgICAgICAg
ICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS51cGRhdGUoYmxlbmRTdGF0
ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQuYmxlbmRhYmxl
KQorICAgICAgICAgICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LmJsZW5kYWJsZSgp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYmxlbmRpbmcgaWYg
dGhlIGF0dGFjaG1lbnQncyByZW5kZXIgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBibGVuZGluZy4K
ICAgICAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0uYmxl
bmRpbmdFbmFibGVkID0gZmFsc2U7CkBAIC03ODEsMTEgKzgwMywxMSBAQCB2b2lkIFJlbmRlclBh
c3NEZXNjOjpwb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2Mg
JmJsZW5kU3RhdAogICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0u
cmVzZXQoKTsKICAgICB9CiAKLSAgICBhdXRvIGRlcHRoVGV4dHVyZSA9IHRoaXMtPmRlcHRoQXR0
YWNobWVudC50ZXh0dXJlOworICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRh
Y2htZW50LnRleHR1cmUoKTsKICAgICBvdXRwdXREZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBp
eGVsRm9ybWF0ID0KICAgICAgICAgZGVwdGhUZXh0dXJlID8gZGVwdGhUZXh0dXJlLT5waXhlbEZv
cm1hdCgpIDogTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwogCi0gICAgYXV0byBzdGVuY2lsVGV4dHVy
ZSA9IHRoaXMtPnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmU7CisgICAgYXV0byBzdGVuY2lsVGV4
dHVyZSA9IHRoaXMtPnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKTsKICAgICBvdXRwdXREZXNj
cmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQogICAgICAgICBzdGVuY2lsVGV4
dHVyZSA/IHN0ZW5jaWxUZXh0dXJlLT5waXhlbEZvcm1hdCgpIDogTVRMUGl4ZWxGb3JtYXRJbnZh
bGlkOwogfQpAQCAtODMxLDQyICs4NTMsMjEgQEAgYm9vbCBSZW5kZXJQYXNzRGVzYzo6b3BlcmF0
b3I9PShjb25zdCBSZW5kZXJQYXNzRGVzYyAmb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGRlcHRo
QXR0YWNobWVudCA9PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQg
PT0gb3RoZXIuc3RlbmNpbEF0dGFjaG1lbnQ7CiB9CiAKLS8vIENvbnZlcnQgdG8gTWV0YWwgb2Jq
ZWN0Ci12b2lkIFJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERlc2MoTVRMUmVuZGVyUGFz
c0Rlc2NyaXB0b3IgKm9iakNEZXNjKSBjb25zdAotewotICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
Ci0gICAgewotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtQ29sb3JBdHRhY2ht
ZW50czsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBUb09iakMoY29sb3JBdHRhY2htZW50
c1tpXSwgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhSZW5kZXJUYXJn
ZXRzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluYWN0aXZlIHJlbmRlciB0YXJn
ZXQKLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAgICAg
PSBuaWw7Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAg
ICAgID0gMDsKLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc2xpY2Ug
ICAgICAgPSAwOwotICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5kZXB0
aFBsYW5lICA9IDA7Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxv
YWRBY3Rpb24gID0gTVRMTG9hZEFjdGlvbkRvbnRDYXJlOwotICAgICAgICAgICAgb2JqQ0Rlc2Mu
Y29sb3JBdHRhY2htZW50c1tpXS5zdG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uRG9udENhcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICBUb09iakMoZGVwdGhBdHRhY2htZW50LCBvYmpDRGVzYy5k
ZXB0aEF0dGFjaG1lbnQpOwotICAgICAgICBUb09iakMoc3RlbmNpbEF0dGFjaG1lbnQsIG9iakNE
ZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKLSAgICB9Ci19Ci0KIC8vIFJlbmRlclBpcGVsaW5lQ2Fj
aGUgaW1wbGVtZW50YXRpb24KLVJlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2Fj
aGUoKSA6IFJlbmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikge30KK1JlbmRlclBpcGVsaW5lQ2Fj
aGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJlbmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikg
eworfQogCiBSZW5kZXJQaXBlbGluZUNhY2hlOjpSZW5kZXJQaXBlbGluZUNhY2hlKAogICAgIFJl
bmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqc3BlY2lhbGl6ZWRTaGFk
ZXJGYWN0b3J5KQogICAgIDogbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeShzcGVjaWFsaXplZFNo
YWRlckZhY3RvcnkpCi17fQoreworCit9CiAKIFJlbmRlclBpcGVsaW5lQ2FjaGU6On5SZW5kZXJQ
aXBlbGluZUNhY2hlKCkge30KIAotdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhT
aGFkZXIoQ29udGV4dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3ZvaWQgUmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hh
ZGVyKQogewogICAgIG1WZXJ0ZXhTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CiAKQEAgLTg3
OSw3ICs4ODAsOCBAQCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldFZlcnRleFNoYWRlcihD
b250ZXh0ICpjb250ZXh0LCBpZDxNVExGdW5jdGlvbj4gc2hhZAogICAgIHJlY3JlYXRlUGlwZWxp
bmVTdGF0ZXMoY29udGV4dCk7CiB9CiAKLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJh
Z21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3Zv
aWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRnVu
Y3Rpb24+IHNoYWRlcikKIHsKICAgICBtRnJhZ21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRl
cik7CiAKQEAgLTkyOSwxMCArOTMxLDYgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxp
bmVTdGF0ZT4+IFJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW4KIHsKICAg
ICBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gbmV3U3RhdGUgPQogICAg
ICAgICBjcmVhdGVSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIGRlc2MsIGluc2VydERlZmF1
bHRBdHRyaWJMYXlvdXQpOwotICAgIGlmICghbmV3U3RhdGUpCi0gICAgewotICAgICAgICByZXR1
cm4gbmlsOwotICAgIH0KIAogICAgIGludCB0YWJsZUlkeCA9IGluc2VydERlZmF1bHRBdHRyaWJM
YXlvdXQgPyAxIDogMDsKICAgICBhdXRvIHJlICAgICAgPSBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNb
dGFibGVJZHhdLmluc2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBuZXdTdGF0ZSkpOwpAQCAtOTQ0
LDYgKzk0Miw3IEBAIEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5k
ZXJQaXBlbGluZUNhY2hlOjppbnNlcnRSZW5kZXJQaXBlbGluCiAgICAgcmV0dXJuIHJlLmZpcnN0
LT5zZWNvbmQ7CiB9CiAKKwogQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+
IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCiAgICAgQ29u
dGV4dCAqY29udGV4dCwKICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJm9yaWdpbmFsRGVz
YywKQEAgLTk1OSw3ICs5NTgsNiBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbgogICAgICAgICAg
ICAgZGVzYy5lbXVsYXRlQ292ZXJhZ2VNYXNrICAgID0gZmFsc2U7CiAgICAgICAgICAgICBkZXNj
LmFscGhhVG9Db3ZlcmFnZUVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgfQotCiAgICAgICAgIC8v
IENob29zZSBzaGFkZXIgdmFyaWFudAogICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRl
ciA9IG5pbDsKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IGZyYWdTaGFkZXIgPSBuaWw7CkBAIC0x
MDA0LDcgKzEwMDIsMjUgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+
IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW4KIAogICAgICAgICAvLyBD
b252ZXJ0IHRvIE9iamVjdGl2ZS1DIGRlc2M6CiAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakModmVydFNoYWRlciwgZnJhZ1No
YWRlciwgZGVzYyk7Ci0KKyAgICAgICAgLy8gVmFsaWRhdGUgUmVuZGVyIFBpcGVsaW5lIFN0YXRl
OgorICAgICAgICBpZiAoRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZp
Y2UpKQorICAgICAgICB7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIG1heFNpemUgPSBHZXRNYXhS
ZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAgICAg
ICBOU1VJbnRlZ2VyIHJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIENvbXB1dGVU
b3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250
ZXh0LCBtZXRhbERldmljZSk7CisgICAgICAgICAgICBpZiAocmVuZGVyVGFyZ2V0U2l6ZSA+IG1h
eFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3Ry
aW5nID0KKyAgICAgICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJU
aGlzIHNldCBvZiByZW5kZXIgdGFyZ2V0cyByZXF1aXJlcyAlbHUgYnl0ZXMgb2YgIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAInBpeGVsIHN0b3JhZ2Uu
IFRoaXMgZGV2aWNlIHN1cHBvcnRzICVsdSBieXRlcy4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKyAg
ICAgICAgICAgICAgICBOU0Vycm9yICplcnIgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJN
VExWYWxpZGF0aW9uRXJyb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlOi0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9y
U3RyaW5nfV07CisgICAgICAgICAgICAgICAgY29udGV4dC0+aGFuZGxlRXJyb3IoZXJyLCBfX0ZJ
TEVfXywgQU5HTEVfRlVOQ1RJT04sIF9fTElORV9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bmlsOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIC8vIFNwZWNpYWwgYXR0cmli
dXRlIHNsb3QgZm9yIGRlZmF1bHQgYXR0cmlidXRlCiAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0
QXR0cmliTGF5b3V0KQogICAgICAgICB7CkBAIC0xMDMyLDYgKzEwNDgsNyBAQCBBdXRvT2JqQ1B0
cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRl
UmVuZGVyUGlwZWxpbgogICAgIH0KIH0KIAorCiB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnJl
Y3JlYXRlUGlwZWxpbmVTdGF0ZXMoQ29udGV4dCAqY29udGV4dCkKIHsKICAgICBmb3IgKGludCBo
YXNEZWZhdWx0QXR0cmliID0gMDsgaGFzRGVmYXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRB
dHRyaWIpCkBAIC0xMDYyLDcgKzEwNzksNyBAQCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNs
ZWFyUGlwZWxpbmVTdGF0ZXMoKQogfQogCiAvLyBTdGF0ZUNhY2hlIGltcGxlbWVudGF0aW9uCi1T
dGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKCkge30KK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3Qg
YW5nbGU6OkZlYXR1cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CiAK
IFN0YXRlQ2FjaGU6On5TdGF0ZUNhY2hlKCkge30KIApAQCAtMTExMyw2ICsxMTMwLDExIEBAIEF1
dG9PYmpDUHRyPGlkPE1UTFNhbXBsZXJTdGF0ZT4+IFN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0
ZShpZDxNVExEZXZpY2U+IG1ldGFsCiAgICAgICAgIGlmIChpdGUgPT0gbVNhbXBsZXJTdGF0ZXMu
ZW5kKCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFNhbXBsZXJEZXNj
cmlwdG9yPiBvYmpDRGVzYyA9IFRvT2JqQyhkZXNjKTsKKyAgICAgICAgICAgIGlmICghbUZlYXR1
cmVzLmFsbG93UnVudGltZVNhbXBsZXJDb21wYXJlTW9kZS5lbmFibGVkKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIFJ1bnRpbWUgc2FtcGxlciBjb21wYXJlIG1vZGUgaXMgbm90
IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gbmV2ZXIuCisgICAgICAgICAgICAgICAgb2JqQ0Rlc2Mu
Z2V0KCkuY29tcGFyZUZ1bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uTmV2ZXI7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBBdXRvT2JqQ1B0cjxpZDxNVExTYW1wbGVyU3RhdGU+PiBuZXdT
dGF0ZSA9CiAgICAgICAgICAgICAgICAgW1ttZXRhbERldmljZSBuZXdTYW1wbGVyU3RhdGVXaXRo
RGVzY3JpcHRvcjpvYmpDRGVzY10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oCmluZGV4IGE4NGFjNzNlYTAzM2ZhNmJlNGZmMjQxNDZkNTBlY2Rj
ZGJjYzhkNzAuLjQ5MDBlY2JiZThlYjdlNTdmYmU2ODMxNmIzMWU2ZTVjMWYwMTc2YWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgKQEAgLTk4LDYgKzk4LDEwIEBAIEF1dG9PYmpDUHRy
PGlkPE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5RnJvbUJpbmFyeShpZDxNVExEZXZp
Y2U+IG1ldGFsRGV2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGJpbmFyeVNvdXJjZUxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvT2JqQ1B0cjxOU0Vy
cm9yICo+ICplcnJvcik7CiAKK2Jvb2wgU3VwcG9ydHNJT1NHUFVGYW1pbHkoaWQ8TVRMRGV2aWNl
PiBkZXZpY2UsIHVpbnQ4X3QgaU9TRmFtaWx5KTsKKworYm9vbCBTdXBwb3J0c01hY0dQVUZhbWls
eShpZDxNVExEZXZpY2U+IGRldmljZSwgdWludDhfdCBtYWNGYW1pbHkpOworCiAvLyBOZWVkIHRv
IGRlZmluZSBpbnZhbGlkIGVudW0gdmFsdWUgc2luY2UgTWV0YWwgZG9lc24ndCBkZWZpbmUgaXQK
IGNvbnN0ZXhwciBNVExUZXh0dXJlVHlwZSBNVExUZXh0dXJlVHlwZUludmFsaWQgPSBzdGF0aWNf
Y2FzdDxNVExUZXh0dXJlVHlwZT4oTlNVSW50ZWdlck1heCk7CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihNVExUZXh0dXJlVHlwZSkgPT0gc2l6ZW9mKE5TVUludGVnZXIpLApAQCAtMTM1LDE1ICsxMzks
MzAgQEAgTVRMVGV4dHVyZVN3aXp6bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6bGUp
OwogCiAvLyBHZXQgY29sb3Igd3JpdGUgbWFzayBmb3IgYSBzcGVjaWZpZWQgZm9ybWF0LiBTb21l
IGZvcm1hdHMgc3VjaCBhcyBSR0I1NjUgZG9lc24ndCBoYXZlIGFscGhhCiAvLyBjaGFubmVsIGJ1
dCBpcyBlbXVsYXRlZCBieSBhIFJHQkE4IGZvcm1hdCwgd2UgbmVlZCB0byBkaXNhYmxlIGFscGhh
IHdyaXRlIGZvciB0aGlzIGZvcm1hdC4KLS8vIC0gaXNGb3JtYXRFbXVsYXRlZDogaWYgdGhlIGZv
cm1hdCBpcyBlbXVsYXRlZCwgdGhpcyBwb2ludGVyIHdpbGwgc3RvcmUgYSB0cnVlIHZhbHVlLgot
TVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZv
cm1hdCAmbXRsRm9ybWF0LCBib29sICppc0Zvcm1hdEVtdWxhdGVkKTsKKy8vIC0gZW11bGF0ZWRD
aGFubmVsc091dDogaWYgdGhlIGZvcm1hdCBpcyBlbXVsYXRlZCwgdGhpcyBwb2ludGVyIHdpbGwg
c3RvcmUgYSB0cnVlIHZhbHVlLgorTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldy
aXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICplbXVsYXRlZENoYW5uZWxzT3V0KTsKIE1U
TENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3Jt
YXQgJm10bEZvcm1hdCk7CiBib29sIElzRm9ybWF0RW11bGF0ZWQoY29uc3QgbXRsOjpGb3JtYXQg
Jm10bEZvcm1hdCk7CiAKK05TVUludGVnZXIgR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmlj
ZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworTlNVSW50ZWdlciBHZXRNYXhOdW1iZXJP
ZlJlbmRlclRhcmdldHNGb3JEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworYm9vbCBEZXZp
Y2VIYXNNYXhpbXVtUmVuZGVyVGFyZ2V0U2l6ZShpZDxNVExEZXZpY2U+IGRldmljZSk7CisKIC8v
IFVzZWZ1bCB0byBzZXQgY2xlYXIgY29sb3IgZm9yIHRleHR1cmUgb3JpZ2luYWxseSBoYXZpbmcg
bm8gYWxwaGEgaW4gR0wsIGJ1dCBiYWNrZW5kJ3MgZm9ybWF0CiAvLyBoYXMgYWxwaGEgY2hhbm5l
bC4KIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBj
b2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKTsKIAorCitOU1VJbnRlZ2VyIENvbXB1
dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IoY29uc3QgTVRMUmVuZGVy
UGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGV4dCAqY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZDxNVExEZXZpY2U+IGRldmljZSk7CisKK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRG
b3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoCisgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yICpkZXNjcmlwdG9yLAorICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisg
ICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCiBnbDo6Qm94IE1UTFJlZ2lvblRvR0xCb3goY29u
c3QgTVRMUmVnaW9uICZtdGxSZWdpb24pOwogCiBNaXBtYXBOYXRpdmVMZXZlbCBHZXROYXRpdmVN
aXBMZXZlbChHTHVpbnQgbGV2ZWwsIEdMdWludCBiYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3V0aWxzLm1tCmluZGV4IDA3NmU2MDk4YzNhMjYzMGQ5ZTFhZjA3ODBjZTY3YWUyNmEwMjFkOGMu
LjNmMjQ5Zjk2YTFiZjgwOWYzODgyMjJiZGIyYjViMWQ4MjlmOTRiMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRp
bHMubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5tbQpAQCAtMTAsOSArMTAsMTEgQEAKIAogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIgogCisjaW5jbHVkZSA8QXZhaWxhYmlsaXR5
Lmg+CiAjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CiAKICNpbmNsdWRlICJjb21tb24v
TWVtb3J5QnVmZmVyLmgiCisjaW5jbHVkZSAiY29tbW9uL3N5c3RlbV91dGlscy5oIgogI2luY2x1
ZGUgImdwdV9pbmZvX3V0aWwvU3lzdGVtSW5mby5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0NvbnRleHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCkBAIC0yNCw2ICsyNiw4IEBAIG5hbWVzcGFjZSByeAogbmFtZXNwYWNl
IG10bAogewogCitjb25zdGV4cHIgY2hhciBrQU5HTEVQcmludE1TTEVudltdID0gIkFOR0xFX01F
VEFMX1BSSU5UX01TTF9FTkFCTEUiOworCiBuYW1lc3BhY2UKIHsKIApAQCAtMTAzLDI0ICsxMDcs
NDMgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEltYWdlTmF0aXZlSW5kZXggJmluZGV4KQogewogICAgIEFTU0VSVCh0ZXh0dXJlICYm
IHRleHR1cmUtPnZhbGlkKCkpOwotICAgIC8vIE9ubHkgb25lIHNsaWNlIGNhbiBiZSBpbml0aWFs
aXplZCBhdCBhIHRpbWUuCi0gICAgQVNTRVJUKCFpbmRleC5pc0xheWVyZWQoKSB8fCBpbmRleC5n
ZXRUeXBlKCkgPT0gZ2w6OlRleHR1cmVUeXBlOjpfM0QpOwogICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CiAKKyAgICBjb25zdCBhbmdsZTo6Rm9ybWF0
ICZhY3R1YWxBbmdsZUZvcm1hdCAgICAgICAgICAgPSB0ZXh0dXJlT2JqRm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCk7CiAgICAgY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZpbnRlbmRlZEludGVy
bmFsRm9ybWF0ID0gdGV4dHVyZU9iakZvcm1hdC5pbnRlbmRlZEludGVybmFsRm9ybWF0KCk7CiAK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBtYW55IHBsYWNlcyB0byBpbml0aWFs
aXplIHRoZSBjb250ZW50IG9mIGEgdGV4dHVyZS4KLSAgICAvLyBTbyBpdCdzIGJldHRlciB3ZSBk
byB0aGUgaW5pdGlhbCBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRoZSBjYWxsZXJzIGRvIGl0
IHRoZW1zZWx2ZXM6Ci0gICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LnZhbGlkKCkgfHwgaW50ZW5k
ZWRJbnRlcm5hbEZvcm1hdC5jb21wcmVzc2VkKQorICAgIC8vIFNvIGl0J3MgYmV0dGVyIHdlIGRv
IHRoZSBzYW5pdHkgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIGxldCB0aGUgY2FsbGVycyBkbyBpdCB0
aGVtc2VsdmVzOgorICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52YWxpZCgpIHx8IGFjdHVhbEFu
Z2xlRm9ybWF0LmlzQmxvY2sgfHwgYWN0dWFsQW5nbGVGb3JtYXQuZGVwdGhCaXRzID4gMCB8fAor
ICAgICAgICBhY3R1YWxBbmdsZUZvcm1hdC5zdGVuY2lsQml0cyA+IDApCiAgICAgeworICAgICAg
ICAvLyBJZiBkc3QgZm9ybWF0IGlzIGNvbXByZXNzZWQsIGlnbm9yZS4KICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAogICAgIGdsOjpFeHRlbnRzIHNpemUg
PSB0ZXh0dXJlLT5zaXplKGluZGV4KTsKIAotICAgIC8vIEludGlpYWxpemUgdGhlIGNvbnRlbnQg
dG8gYmxhY2sKLSAgICBHTGludCBsYXllciwgc3RhcnREZXB0aDsKLSAgICBHZXRTbGljZUFuZERl
cHRoKGluZGV4LCAmbGF5ZXIsICZzdGFydERlcHRoKTsKKyAgICAvLyBJbnRpYWxpemUgdGhlIGNv
bnRlbnQgdG8gYmxhY2sKKyAgICBHTGludCBsYXllciAgICAgID0gMDsKKyAgICBHTGludCBzdGFy
dERlcHRoID0gMDsKKyAgICBpZiAoaW5kZXguaGFzTGF5ZXIoKSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoaW5kZXguZ2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGdsOjpU
ZXh0dXJlVHlwZTo6Q3ViZU1hcDoKKyAgICAgICAgICAgICAgICBsYXllciA9IGluZGV4LmN1YmVN
YXBGYWNlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Z2w6OlRleHR1cmVUeXBlOjpfMkRBcnJheToKKyAgICAgICAgICAgICAgICBsYXllciA9IGluZGV4
LmdldExheWVySW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgZ2w6OlRleHR1cmVUeXBlOjpfM0Q6CisgICAgICAgICAgICAgICAgc3RhcnREZXB0aCA9IGlu
ZGV4LmdldExheWVySW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vz
c2libGUoKSAmJiBpbmRleC5nZXRUeXBlKCkgIT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRNdWx0aXNh
bXBsZSAmJgogICAgICAgICBpbmRleC5nZXRUeXBlKCkgIT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRN
dWx0aXNhbXBsZUFycmF5KQpAQCAtMTM2LDYgKzE1OSwxMyBAQCBhbmdsZTo6UmVzdWx0IEluaXRp
YWxpemVUZXh0dXJlQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRleHR1cmVPYmpG
b3JtYXQudmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9ybWF0LmNvbXByZXNzZWQgfHwKKyAg
ICAgICAgICAgICAgICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmRlcHRoQml0cyA+IDAgfHwgaW50
ZW5kZWRJbnRlcm5hbEZvcm1hdC5zdGVuY2lsQml0cyA+IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gSWYgc291cmNlIGZvcm1hdCBpcyBjb21wcmVzc2VkLCBpZ25vcmUuCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZzcmNGb3JtYXQgPSBhbmds
ZTo6Rm9ybWF0OjpHZXQoCiAgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRlcm5hbEZvcm1hdC5h
bHBoYUJpdHMgPiAwID8gYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhBOF9VTk9STQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOEI4X1VOT1JNKTsKQEAgLTE2MiwxMCArMTkyLDEwIEBAIGFuZ2xlOjpSZXN1bHQg
SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAog
ICAgICAgICAgICAgICAgIC8vIFVwbG9hZCB0byB0ZXh0dXJlCiAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+cmVwbGFjZTJEUmVnaW9uKGNvbnRleHRNdGwsIG10bFJvd1JlZ2lvbiwgaW5kZXguZ2V0
TmF0aXZlTGV2ZWwoKSwgbGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnZlcnNpb25Sb3cuZGF0YSgpLCBkc3RSb3dQaXRjaCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uUm93LmRhdGEoKSwgZHN0Um93UGl0
Y2gpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQorICAgIH0gIC8vIGlmICh0ZXh0
dXJlLT5pc0NQVUFjY2Vzc2libGUoKSkKICAgICBlbHNlCiAgICAgewogICAgICAgICBBTkdMRV9U
UlkoSW5pdGlhbGl6ZVRleHR1cmVDb250ZW50c0dQVShjb250ZXh0LCB0ZXh0dXJlLCB0ZXh0dXJl
T2JqRm9ybWF0LCBpbmRleCwKQEAgLTIxMCw3ICsyNDAsNyBAQCBhbmdsZTo6UmVzdWx0IEluaXRp
YWxpemVUZXh0dXJlQ29udGVudHNHUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAg
UmVuZGVyVGFyZ2V0TXRsIHRlbXBSdHQ7CiAgICAgdGVtcFJ0dC5zZXQodGV4dHVyZSwgaW5kZXgu
Z2V0TmF0aXZlTGV2ZWwoKSwgc2xpY2VPckRlcHRoLCB0ZXh0dXJlT2JqRm9ybWF0KTsKIAotICAg
IGludCBjbGVhckFscGhhID0gMDsKKyAgICBmbG9hdCBjbGVhckFscGhhID0gMDsKICAgICBpZiAo
IXRleHR1cmVPYmpGb3JtYXQuaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmFscGhhQml0cykKICAgICB7
CiAgICAgICAgIC8vIGlmIGludGVuZGVkIGZvcm1hdCBkb2Vzbid0IGhhdmUgYWxwaGEsIHNldCBp
dCB0byAxLjAuCkBAIC0yNDAsMTEgKzI3MCwxMSBAQCBhbmdsZTo6UmVzdWx0IEluaXRpYWxpemVU
ZXh0dXJlQ29udGVudHNHUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIENs
ZWFyQ29sb3JWYWx1ZSBjbGVhckNvbG9yOwogICAgICAgICBpZiAoYW5nbGVGb3JtYXQuaXNTaW50
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNJbnQoMCwgMCwgMCwg
Y2xlYXJBbHBoYSk7CisgICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzSW50KDAsIDAsIDAsIChp
bnQpY2xlYXJBbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYW5nbGVGb3JtYXQu
aXNVaW50KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50KDAs
IDAsIDAsIGNsZWFyQWxwaGEpOworICAgICAgICAgICAgY2xlYXJDb2xvci5zZXRBc1VJbnQoMCwg
MCwgMCwgKGludCljbGVhckFscGhhKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAg
IHsKQEAgLTI4MywxNyArMzEzLDE3IEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlhbGl6ZURlcHRoU3Rl
bmNpbFRleHR1cmVDb250ZW50c0dQVShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4CiAgICAgcnBE
ZXNjLnNhbXBsZUNvdW50ID0gdGV4dHVyZS0+c2FtcGxlcygpOwogICAgIGlmIChhbmdsZUZvcm1h
dC5kZXB0aEJpdHMpCiAgICAgewotICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1
cmUgICAgICA9IHRleHR1cmU7Ci0gICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQubGV2ZWwg
ICAgICAgID0gbGV2ZWw7Ci0gICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQuc2xpY2VPckRl
cHRoID0gbGF5ZXI7CisgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0
LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50
LnJlbmRlclRhcmdldC0+bGV2ZWwgICAgICAgID0gbGV2ZWw7CisgICAgICAgIHJwRGVzYy5kZXB0
aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPSBsYXllcjsKICAgICAgICAg
cnBEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xlYXI7
CiAgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQuY2xlYXJEZXB0aCAgID0gMS4wOwogICAg
IH0KICAgICBpZiAoYW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMpCiAgICAgewotICAgICAgICBycERl
c2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSAgICAgID0gdGV4dHVyZTsKLSAgICAgICAgcnBE
ZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOwotICAgICAgICBycERl
c2Muc3RlbmNpbEF0dGFjaG1lbnQuc2xpY2VPckRlcHRoID0gbGF5ZXI7CisgICAgICAgIHJwRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnRleHR1cmUgICAgICA9IHRleHR1cmU7
CisgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPmxldmVsICAg
ICAgICA9IGxldmVsOworICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyVGFy
Z2V0LT5zbGljZU9yRGVwdGggPSBsYXllcjsKICAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LmxvYWRBY3Rpb24gICA9IE1UTExvYWRBY3Rpb25DbGVhcjsKICAgICB9CiAKQEAgLTQ1Niw2
ICs0ODYsMzAgQEAgQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IENyZWF0ZVNoYWRlckxpYnJh
cnkoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSwKICAgICByZXR1cm4gQ3JlYXRlU2hhZGVyTGli
cmFyeShtZXRhbERldmljZSwgc291cmNlLmNfc3RyKCksIHNvdXJjZS5zaXplKCksIGVycm9yKTsK
IH0KIAorI2lmIDAKK3N0YXRpYyBNVExMYW5ndWFnZVZlcnNpb24gR2V0SGlnaGVzdFN1cHBvcnRl
ZE1TTFZlcnNpb24oKQoreworICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1
bWVudGF0aW9uL21ldGFsL210bGxhbmd1YWdldmVyc2lvbj9sYW5ndWFnZT1vYmpjCisgICAgaWYg
KEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTEuMCwgMTQuMCwgMTQuMCkpCisgICAgICAgIHJl
dHVybiBNVExMYW5ndWFnZVZlcnNpb24yXzM7CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YQ0koMTAuMTUsIDEzLjAsIDEzLjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJz
aW9uMl8yOworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAx
Mi4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMTsKKyAgICBpZiAoQU5H
TEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xMywgMTMuMCwgMTEuMCkpCisgICAgICAgIHJldHVy
biBNVExMYW5ndWFnZVZlcnNpb24yXzA7CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9Y
Q0koMTAuMTIsIDEzLjAsIDEwLjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9u
MV8yOworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjExLCAxMy4wLCA5LjAp
KQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOworIyAgICBpZiBUQVJHRVRf
T1NfSU9TCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JKDkuMCkpCisgICAgICAgIHJl
dHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzA7CisjICAgIGVuZGlmCisgICAgcmV0dXJuIE1UTExh
bmd1YWdlVmVyc2lvbjFfMTsKK30KKyNlbmRpZgorCiBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5
Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc291
cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHNvdXJjZUxlbiwKQEAgLTQ2OSw4ICs1MjMsMjUgQEAgQXV0b09iakNQdHI8aWQ8TVRMTGli
cmFyeT4+IENyZWF0ZVNoYWRlckxpYnJhcnkoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcmVlV2hlbkRvbmU6Tk9dOwogICAgICAgICBhdXRvIG9wdGlvbnMg
ICAgID0gW1tbTVRMQ29tcGlsZU9wdGlvbnMgYWxsb2NdIGluaXRdIEFOR0xFX01UTF9BVVRPUkVM
RUFTRV07CisgICAgICAgIC8vIE1hcmsgYWxsIHBvc2l0aW9ucyBpbiBWUyB3aXRoIGF0dHJpYnV0
ZSBpbnZhcmlhbnQgYXMgbm9uLW9wdGltaXphYmxlCisjaWYgKGRlZmluZWQoX19NQUNfMTFfMCkg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IF9fTUFDXzExXzApIHx8ICAgICAg
ICBcCisgICAgKGRlZmluZWQoX19JUEhPTkVfMTRfMCkgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
QVhfQUxMT1dFRCA+PSBfX0lQSE9ORV8xNF8wKSB8fCBcCisgICAgKGRlZmluZWQoX19UVk9TXzE0
XzApICYmIF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX1RWT1NfMTRfMCkKKyAgICAg
ICAgb3B0aW9ucy5wcmVzZXJ2ZUludmFyaWFuY2UgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgLy8g
Tm8gcHJlc2VydmVJbnZhcmlhbmNlIGF2YWlsYWJsZSBjb21waWxpbmcgZnJvbSBzb3VyY2UsIHNv
IGp1c3QgZGlzYWJsZSBmYXN0bWF0aC4KKyAgICAgICAgb3B0aW9ucy5mYXN0TWF0aEVuYWJsZWQg
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogd29ya2Fyb3Vu
ZCBmb3IgaW50ZWwgZHJpdmVyIG5vdCBwcmVzZXJ2aW5nIGludmFyaWFuY2Ugb24gYWxsIHNoYWRl
cnMKKyAgICAgICAgaWYgKFttZXRhbERldmljZS5uYW1lIHJhbmdlT2ZTdHJpbmc6QCJJbnRlbCJd
LmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbnMu
ZmFzdE1hdGhFbmFibGVkID0gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgYXV0byBsaWJyYXJ5
ID0gW21ldGFsRGV2aWNlIG5ld0xpYnJhcnlXaXRoU291cmNlOm5zU291cmNlIG9wdGlvbnM6b3B0
aW9ucyBlcnJvcjombnNFcnJvcl07Ci0KKyAgICAgICAgaWYgKGFuZ2xlOjpHZXRFbnZpcm9ubWVu
dFZhcihrQU5HTEVQcmludE1TTEVudilbMF0gPT0gJzEnKQorICAgICAgICB7CisgICAgICAgICAg
ICBOU0xvZyhAIiVAXG4iLCBuc1NvdXJjZSk7CisgICAgICAgIH0KICAgICAgICAgW25zU291cmNl
IEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAKICAgICAgICAgKmVycm9yT3V0ID0gc3RkOjptb3Zl
KG5zRXJyb3IpOwpAQCAtNzcyLDE1ICs4NDMsMTUgQEAgTVRMVGV4dHVyZVN3aXp6bGUgR2V0VGV4
dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6bGUpCiB9CiAjZW5kaWYKIAotTVRMQ29sb3JXcml0ZU1h
c2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0
LCBib29sICppc0VtdWxhdGVkT3V0KQorTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xv
cldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LCBib29sICplbXVsYXRlZENo
YW5uZWxzT3V0KQogewogICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmludGVuZGVkRm9ybWF0ID0g
bXRsRm9ybWF0LmludGVuZGVkQW5nbGVGb3JtYXQoKTsKICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0
ICZhY3R1YWxGb3JtYXQgICA9IG10bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpOwotICAgIGJv
b2wgaXNGb3JtYXRFbXVsYXRlZCAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgYm9vbCBlbXVs
YXRlZENoYW5uZWxzICAgICAgICAgICAgICAgPSBmYWxzZTsKICAgICBNVExDb2xvcldyaXRlTWFz
ayBjb2xvcldyaXRhYmxlTWFzayA9IE1UTENvbG9yV3JpdGVNYXNrQWxsOwogICAgIGlmIChpbnRl
bmRlZEZvcm1hdC5hbHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYWxwaGFCaXRzKQogICAg
IHsKLSAgICAgICAgaXNGb3JtYXRFbXVsYXRlZCA9IHRydWU7CisgICAgICAgIGVtdWxhdGVkQ2hh
bm5lbHMgPSB0cnVlOwogICAgICAgICAvLyBEaXNhYmxlIGFscGhhIHdyaXRlIHRvIHRoaXMgdGV4
dHVyZQogICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5N
VExDb2xvcldyaXRlTWFza0FscGhhKTsKICAgICB9CkBAIC03ODgsNDEgKzg1OSw0MSBAQCBNVExD
b2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0
ICZtdGxGb3JtYXQsIGJvb2wgKgogICAgIHsKICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LnJl
ZEJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQucmVkQml0cykKICAgICAgICAgewotICAgICAgICAg
ICAgaXNGb3JtYXRFbXVsYXRlZCA9IHRydWU7CisgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxz
ID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIERpc2FibGUgcmVkIHdyaXRlIHRvIHRoaXMgdGV4dHVy
ZQogICAgICAgICAgICAgY29sb3JXcml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+
TVRMQ29sb3JXcml0ZU1hc2tSZWQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbnRlbmRlZEZv
cm1hdC5ncmVlbkJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuZ3JlZW5CaXRzKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtdWxh
dGVkQ2hhbm5lbHMgPSB0cnVlOwogICAgICAgICAgICAgLy8gRGlzYWJsZSBncmVlbiB3cml0ZSB0
byB0aGlzIHRleHR1cmUKICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0
YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrR3JlZW4pOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpbnRlbmRlZEZvcm1hdC5ibHVlQml0cyA9PSAwICYmIGFjdHVhbEZvcm1hdC5ibHVlQml0
cykKICAgICAgICAgewotICAgICAgICAgICAgaXNGb3JtYXRFbXVsYXRlZCA9IHRydWU7CisgICAg
ICAgICAgICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIERpc2FibGUg
Ymx1ZSB3cml0ZSB0byB0aGlzIHRleHR1cmUKICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNr
ID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrQmx1ZSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICAqaXNFbXVsYXRlZE91dCA9IGlzRm9ybWF0RW11bGF0ZWQ7CisgICAg
KmVtdWxhdGVkQ2hhbm5lbHNPdXQgPSBlbXVsYXRlZENoYW5uZWxzOwogCiAgICAgcmV0dXJuIGNv
bG9yV3JpdGFibGVNYXNrOwogfQogCiBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9y
V3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpCiB7Ci0gICAgLy8gSWdub3Jl
IGlzRm9ybWF0RW11bGF0ZWQgYm9vbGVhbiB2YWx1ZQotICAgIGJvb2wgaXNGb3JtYXRFbXVsYXRl
ZDsKLSAgICByZXR1cm4gR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zv
cm1hdEVtdWxhdGVkKTsKKyAgICAvLyBJZ25vcmUgZW11bGF0ZWRDaGFubmVscyBib29sZWFuIHZh
bHVlCisgICAgYm9vbCBlbXVsYXRlZENoYW5uZWxzOworICAgIHJldHVybiBHZXRFbXVsYXRlZENv
bG9yV3JpdGVNYXNrKG10bEZvcm1hdCwgJmVtdWxhdGVkQ2hhbm5lbHMpOwogfQogCiBib29sIElz
Rm9ybWF0RW11bGF0ZWQoY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCkKIHsKLSAgICBib29s
IGlzRm9ybWF0RW11bGF0ZWQ7Ci0gICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayht
dGxGb3JtYXQsICZpc0Zvcm1hdEVtdWxhdGVkKTsKLSAgICByZXR1cm4gaXNGb3JtYXRFbXVsYXRl
ZDsKKyAgICBib29sIGVtdWxhdGVkQ2hhbm5lbHM7CisgICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xv
cldyaXRlTWFzayhtdGxGb3JtYXQsICZlbXVsYXRlZENoYW5uZWxzKTsKKyAgICByZXR1cm4gZW11
bGF0ZWRDaGFubmVsczsKIH0KIAogTVRMQ2xlYXJDb2xvciBFbXVsYXRlZEFscGhhQ2xlYXJDb2xv
cihNVExDbGVhckNvbG9yIGNvbG9yLCBNVExDb2xvcldyaXRlTWFzayBjb2xvck1hc2spCkBAIC04
MzcsNiArOTA4LDI5NSBAQCBNVExDbGVhckNvbG9yIEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1U
TENsZWFyQ29sb3IgY29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNvbAogICAgIHJldHVybiByZTsK
IH0KIAorTlNVSW50ZWdlciBHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhp
ZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBpZiAoU3VwcG9ydHNJT1NHUFVGYW1pbHkoZGV2
aWNlLCA0KSkKKyAgICB7CisgICAgICAgIHJldHVybiA2NDsKKyAgICB9CisgICAgZWxzZSBpZiAo
U3VwcG9ydHNJT1NHUFVGYW1pbHkoZGV2aWNlLCAyKSkKKyAgICB7CisgICAgICAgIHJldHVybiAz
MjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE2OworICAgIH0KK30K
KworTlNVSW50ZWdlciBHZXRNYXhOdW1iZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UoaWQ8TVRM
RGV2aWNlPiBkZXZpY2UpCit7CisgICAgaWYgKFN1cHBvcnRzSU9TR1BVRmFtaWx5KGRldmljZSwg
Mil8fFN1cHBvcnRzTWFjR1BVRmFtaWx5KGRldmljZSwgMSkpCisgICAgeworICAgICAgICByZXR1
cm4gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQor
fQorCitib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKGlkPE1UTERldmljZT4g
ZGV2aWNlKQoreworICAgICAgICByZXR1cm4gU3VwcG9ydHNJT1NHUFVGYW1pbHkoZGV2aWNlLCAx
KTsKK30KKworYm9vbCBTdXBwb3J0c0lPU0dQVUZhbWlseShpZDxNVExEZXZpY2U+IGRldmljZSwg
dWludDhfdCBpT1NGYW1pbHkpCit7CisjaWYgKCFUQVJHRVRfT1NfSU9TICYmICFUQVJHRVRfT1Nf
VFYpIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisj
ICAgIGlmIChfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEzMDAwMCkgfHwgKF9f
VFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAwMDApCisgICAgLy8gSWYgZGV2aWNlIHN1
cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UgaXQuCisgICAgaWYg
KEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JKDEzLjApKQorICAgIHsKKyAgICAgICAgTVRMR1BVRmFt
aWx5IGZhbWlseTsKKyAgICAgICAgc3dpdGNoIChpT1NGYW1pbHkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBs
ZTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGUyOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQ
VUZhbWlseUFwcGxlMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
NDoKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgZmFt
aWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU1OworICAgICAgICAgICAgICAgIGJyZWFrOworIyAgICAg
ICAgaWYgVEFSR0VUX09TX0lPUworICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAg
IGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyMg
ICAgICAgIGVuZGlmCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2RldmljZSBzdXBwb3J0c0ZhbWls
eTpmYW1pbHldOworICAgIH0gIC8vIE1ldGFsIDIuMgorIyAgICBlbmRpZiAgLy8gX19JUEhPTkVf
T1NfVkVSU0lPTl9NQVhfQUxMT1dFRAorCisgICAgLy8gSWYgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y
dCBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlCisgICAgLy8gW01UTERldmlj
ZSBzdXBwb3J0c0ZlYXR1cmVTZXQ6XS4KKyAgICBNVExGZWF0dXJlU2V0IGZlYXR1cmVTZXQ7Cisg
ICAgc3dpdGNoIChpT1NGYW1pbHkpCisgICAgeworIyAgICBpZiBUQVJHRVRfT1NfSU9TCisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19H
UFVGYW1pbHkxX3YxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkyX3YxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGZlYXR1cmVTZXQg
PSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkzX3YxOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lP
U19HUFVGYW1pbHk0X3YxOworICAgICAgICAgICAgYnJlYWs7CisjICAgICAgICBpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEyMDAwMAorICAgICAgICBjYXNlIDU6CisgICAg
ICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF9pT1NfR1BVRmFtaWx5NV92MTsKKyAg
ICAgICAgICAgIGJyZWFrOworIyAgICAgICAgZW5kaWYgIC8vIF9fSVBIT05FX09TX1ZFUlNJT05f
TUFYX0FMTE9XRUQKKyMgICAgZWxpZiBUQVJHRVRfT1NfVFYKKyAgICAgICAgY2FzZSAxOgorICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF90dk9T
X0dQVUZhbWlseTFfdjE7CisgICAgICAgICAgICBicmVhazsKKyMgICAgICAgIGlmIF9fVFZfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAwMDAKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAg
ICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfdHZPU19HUFVGYW1pbHkyX3YxOworICAgICAg
ICAgICAgYnJlYWs7CisjICAgICAgIGVuZGlmIC8vIF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dF
RAorIyAgICBlbmRpZiAgLy8gVEFSR0VUX09TX0lPUworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRz
RmVhdHVyZVNldDpmZWF0dXJlU2V0XTsKKyNlbmRpZiAgICAgIC8vIFRBUkdFVF9PU19JT1MgfHwg
VEFSR0VUX09TX1RWCit9CisKK2Jvb2wgU3VwcG9ydHNNYWNHUFVGYW1pbHkoaWQ8TVRMRGV2aWNl
PiBkZXZpY2UsIHVpbnQ4X3QgbWFjRmFtaWx5KQoreworI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFS
R0VUX09TX01BQ0NBVEFMWVNUCisjICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTUpCisgICAgLy8g
SWYgZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2Ug
aXQuCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQygxMC4xNSwgMTMuMCkpCisgICAg
eworICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OworCisgICAgICAgIHN3aXRjaCAobWFjRmFt
aWx5KQorICAgICAgICB7CisjICAgICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWND
YXRhbHlzdDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5c3QyOworICAgICAg
ICAgICAgICAgIGJyZWFrOworIyAgICAgICAgZWxzZSAgIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZh
bWlseU1hYzE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyMgICAgICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6ZmFtaWx5XTsKKyAgICB9
ICAvLyBNZXRhbCAyLjIKKyMgICAgZW5kaWYKKworICAgIC8vIElmIGRldmljZSBkb2Vzbid0IHN1
cHBvcnQgW01UTERldmljZSBzdXBwb3J0c0ZhbWlseTpdLCB0aGVuIHVzZQorICAgIC8vIFtNVExE
ZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0Ol0uCisjICAgIGlmIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworIyAgICBlbHNlCisgICAg
TVRMRmVhdHVyZVNldCBmZWF0dXJlU2V0OworICAgIHN3aXRjaCAobWFjRmFtaWx5KQorICAgIHsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRf
bWFjT1NfR1BVRmFtaWx5MV92MTsKKyAgICAgICAgICAgIGJyZWFrOworIyAgICAgICAgaWYgZGVm
aW5lZChfX01BQ18xMF8xNCkKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgZmVhdHVyZVNl
dCA9IE1UTEZlYXR1cmVTZXRfbWFjT1NfR1BVRmFtaWx5Ml92MTsKKyAgICAgICAgICAgIGJyZWFr
OworIyAgICAgICAgZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0OmZlYXR1
cmVTZXRdOworIyAgICBlbmRpZiAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCisjZWxzZSAgICAg
ICAvLyAjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKworICAgIHJl
dHVybiBmYWxzZTsKKworI2VuZGlmCit9CisKK3N0YXRpYyBOU1VJbnRlZ2VyIGdldE5leHRMb2Nh
dGlvbkZvckZvcm1hdChjb25zdCBGb3JtYXRDYXBzICZjYXBzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRhcmdldFNp
emUpCit7CisgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworICAgIHVpbnQ4X3QgYWxpZ25t
ZW50ICAgICAgICAgPSBjYXBzLmFsaWdubWVudDsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXMg
ICAgID0gY2Fwcy5waXhlbEJ5dGVzOworICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlc01TQUEgPSBj
YXBzLnBpeGVsQnl0ZXNNU0FBOworICAgIHBpeGVsQnl0ZXMgICAgICAgICAgICAgICAgPSBpc01T
QUEgPyBwaXhlbEJ5dGVzTVNBQSA6IHBpeGVsQnl0ZXM7CisKKyAgICBjdXJyZW50UmVuZGVyVGFy
Z2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1lbnQgLSAxKSkgJiB+
KGFsaWdubWVudCAtIDEpOworICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplICs9IHBpeGVsQnl0
ZXM7CisgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplOworfQorCitOU1VJbnRlZ2Vy
IENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IoY29uc3QgTVRM
UmVuZGVyUGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5k
ZXJUYXJnZXRTaXplID0gMDsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdldE1h
eE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgeworICAg
ICAgICBNVExQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2ht
ZW50c1tpXS50ZXh0dXJlLnBpeGVsRm9ybWF0OworICAgICAgICBib29sIGlzTXNhYSAgICAgICAg
ICAgICAgICA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLnNhbXBsZUNv
dW50ID4gMTsKKyAgICAgICAgaWYgKHBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxp
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRl
eHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhwaXhlbEZvcm1hdCk7CisgICAg
ICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4
dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUp
OworICAgICAgICB9CisgICAgfQorICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50
ZXh0dXJlLnBpeGVsRm9ybWF0ID09CisgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1l
bnQudGV4dHVyZS5waXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIGJvb2wgaXNNc2FhID0gZGVz
Y3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAgICAg
IGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0ICE9IE1U
TFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0
Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcygK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVs
Rm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKyAgICAgICAg
ICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0g
TVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlzTXNh
YSAgICAgICAgICAgID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVD
b3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+
Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworICAgICAgICAgICAg
Y3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlv
bkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlLnBp
eGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQu
dGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZj
YXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1h
dCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAg
ICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRh
cmdldFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFy
Z2V0U2l6ZTsKK30KK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IoCisgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ICpkZXNjcmlwdG9yLAorICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgaWQ8TVRMRGV2
aWNlPiBkZXZpY2UpCit7CisgICAgTlNVSW50ZWdlciBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9
IDA7CisgICAgYm9vbCBpc01zYWEgICAgICAgICAgICAgICAgICAgICAgICA9IGRlc2NyaXB0b3Iu
c2FtcGxlQ291bnQgPiAxOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdldE1heE51
bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgeworICAgICAg
ICBNVExSZW5kZXJQaXBlbGluZUNvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKmNvbG9yID0gZGVz
Y3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldOworICAgICAgICBpZiAoY29sb3IucGl4ZWxGb3Jt
YXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3Jt
YXRDYXBzKGNvbG9yLnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJn
ZXRTaXplID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2Fwcywg
aXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgPT0gZGVzY3JpcHRvci5z
dGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQorICAgIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0
b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0KKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzY3Jp
cHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0
KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVu
dFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAgICAgICAgICAgICAgY29udGV4dC0+
Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2ht
ZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQor
ICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1
cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2Ny
aXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50
UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9y
bWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKK30KKwogZ2w6OkJveCBN
VExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQogewogICAgIHJldHVy
biBnbDo6Qm94KHN0YXRpY19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi54KSwgc3RhdGljX2Nh
c3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLnkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFk
ZXJzL2JsaXQubWV0YWwKaW5kZXggNDI3MmM0ZjBhODQ4MDA5YTYzMmQ0YWViYzVmYWMxZDQ0N2Zm
YzJkNy4uMmE5YmI1ZGUzNzQ2YzJjZGFjZjMxZjJlYjEyYTQ5YTMzMTEzNzMxNCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3No
YWRlcnMvYmxpdC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCkBAIC0zMzQsNyArMzM0LDcgQEAg
a2VybmVsIHZvaWQgYmxpdFN0ZW5jaWxUb0J1ZmZlckNTKHVzaG9ydDIgZ0luZGljZXMgW1t0aHJl
YWRfcG9zaXRpb25faW5fZ3JpZF1dLAogfQogCiAvLyBGcmFnbWVudCdzIHN0ZW5jaWwgb3V0cHV0
IGlzIG9ubHkgYXZhaWxhYmxlIHNpbmNlIE1ldGFsIDIuMQotQEAjaWYgX19NRVRBTF9WRVJTSU9O
X18gPj0gMjEwCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCiAKIHN0cnVjdCBGcmFnbWVu
dFN0ZW5jaWxPdXQKIHsKQEAgLTM5Nyw0ICszOTcsNCBAQCBmcmFnbWVudCBGcmFnbWVudERlcHRo
U3RlbmNpbE91dCBibGl0RGVwdGhTdGVuY2lsRlMoCiAgICAgICAgICAgICAgICAgICAgICAgc3Jj
U3RlbmNpbFRleHR1cmVDdWJlLCBpbnB1dC50ZXhDb29yZHMsIG9wdGlvbnMuc3JjTGV2ZWwsIG9w
dGlvbnMuc3JjTGF5ZXIpOwogICAgIHJldHVybiByZTsKIH0KLUBAI2VuZGlmICAvLyBfX01FVEFM
X1ZFUlNJT05fXyA+PSAyMTAKKyNlbmRpZiAgLy8gX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvc2hhZGVycy9jb21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCmluZGV4IDY4Yzc3NDUzNzJiZGZm
ZTlhOGY5NTk4MTliZWY5MzYxYWZmYWFjYTAuLmU2NjczYjVkYmRmMDFkNDY5OWI2ZmYyOWQyODYx
MGJhYmUxNGNmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCkBA
IC0xMCw4ICsxMCw4IEBACiAKIC8vIGNsYW5nLWZvcm1hdCBvZmYKICNpZm5kZWYgU0tJUF9TVERf
SEVBREVSUwotQEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgotQEAjICAgIGluY2x1ZGUgPG1l
dGFsX3N0ZGxpYj4KKyMgICAgaW5jbHVkZSA8c2ltZC9zaW1kLmg+CisjICAgIGluY2x1ZGUgPG1l
dGFsX3N0ZGxpYj4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy9jb3B5X2J1ZmZlci5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCmluZGV4IGRmN2M0
Yzk2MjVmMjc3MDEwYmIwNjEwOGEwZGUzMWVjNzk1ZWYyNTUuLjFiNDA4ZDg4OTI0YTAzYmM3ZDBi
ZGFkNmZiYjQzYTY2OThjOTJlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCkBAIC00LDIyICs0LDIyIEBACiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KIC8vIGNvcHlfYnVmZmVyLm1ldGFsOiBpbXBsZW1lbnRzIGNv
bXB1dGUgc2hhZGVyIHRoYXQgY29weSBmb3JtYXR0ZWQgZGF0YSBmcm9tIGJ1ZmZlciB0byB0ZXh0
dXJlLAotLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisvLyBmcm9tIHRleHR1cmUgdG8g
YnVmZmVyIGFuZCBmcm9tIGJ1ZmZlciB0byBidWZmZXIuCiAvLyBOT1RFKGhxbGUpOiBUaGlzIGZp
bGUgaXMgYSBiaXQgaGFyZCB0byByZWFkIGJ1dCB0aGVyZSBhcmUgYSBsb3Qgb2YgcmVwZWF0ZWQg
d29ya3MsIGFuZCBpdCB3b3VsZAogLy8gYmUgYSBwYWluIHRvIGltcGxlbWVudCB3aXRob3V0IHRo
ZSB1c2Ugb2YgbWFjcm9zLgogLy8KIAotQEAjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyNpbmNsdWRl
IDxtZXRhbF9wYWNrPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZm9ybWF0X2F1
dG9nZW4uaCIKIAogdXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOwogCi1jb25zdGFudCBp
bnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMTApXV07Citjb25zdGFudCBp
bnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLyogLS0tLS0t
LS0gY29weSBwaXhlbCBkYXRhIGJldHdlZW4gYnVmZmVyIGFuZCB0ZXh0dXJlIC0tLS0tLS0tLSov
Ci1jb25zdGFudCBpbnQga0NvcHlUZXh0dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDIwKV1d
OworY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFudCgyKV1d
OwogY29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkQgICAgICA9IGtDb3B5VGV4dHVyZVR5
cGUgPT0ga1RleHR1cmVUeXBlMkQ7CiBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5cGUyREFy
cmF5ID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OwogY29uc3RhbnQg
Ym9vbCBrQ29weVRleHR1cmVUeXBlMkRNUyAgICA9IGtDb3B5VGV4dHVyZVR5cGUgPT0ga1RleHR1
cmVUeXBlMkRNdWx0aXNhbXBsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9mb3JtYXRfYXV0b2dlbi5oCmluZGV4IGExN2VhZDM0YjhkOWU0YTRmNjIzOWMzOGZhNjlmOGE4
N2M0MDU2YzQuLmI5OTFlNDhmNmE3ZGZjNGQyOWU5NGM4YTljNjgwZDI3NWQwY2UzNWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4uaApAQCAt
MjQ1LDUgKzI0NSw1IEBAIGVudW0KIAogfQogCi19ICAvLyBuYW1lc3BhY2UgbXRsX3NoYWRlcgot
fSAgLy8gbmFtZXNwYWNlIHJ4Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNlcy5tZXRh
bCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCmluZGV4IDJkODM1M2JhYWNkYjgyZTEzNDhkMTIwNmFm
NDMyZWZlNTBmOTIzNDYuLmVlZDYxZWE4M2JkNjM5OWMxNTNkMDJmN2U2NGJjOTllZThmMDRmYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1l
dGFsCkBAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVbmFsaWduZWRVMzIo
Y29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBpZHgpCiAgICAgcmV0dXJu
IGlucHV0MCB8IChpbnB1dDEgPDwgOCkgfCAoaW5wdXQyIDw8IDE2KSB8IChpbnB1dDMgPDwgMjQp
OwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0aHJlYWRf
cG9zaXRpb25faW5fZ3JpZF1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRbW2J1ZmZlcigx
KV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRw
dXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1UxNih1aW50IGlk
eCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigw
KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5w
dXQgW1tidWZmZXIoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNl
IHVzaG9ydCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJ
T05fR1VBUkQoaWR4LCBvcHRpb25zKTsKIApAQCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5lbCB2b2lk
IGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0s
CiAgICAgfQogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYoCi0gICAgdWludCBpZHhb
W3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9u
UGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRb
WyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpIF1d
LAotICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkW1sgYnVmZmVyKDEpLCBmdW5jdGlv
bl9jb25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCkgXV0sCi0gICAgZGV2aWNlIHVzaG9ydCAq
b3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNih1aW50IGlk
eCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtT
b3VyY2VCdWZmZXJVbmFsaWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3RhbnQgdXNob3J0ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
W2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtbYnVmZmVy
KDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsK
IApAQCAtOTYsMTIgKzk3LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNigKICAgICBv
dXRwdXRbaWR4XSA9IHZhbHVlOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMzIoCi0g
ICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQgSW5k
ZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJV
bmFsaWduZWQpIF1dLAotICAgIGNvbnN0YW50IHVpbnQgKmlucHV0QWxpZ25lZFtbIGJ1ZmZlcigx
KSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpIF1dLAotICAgIGRldmlj
ZSB1aW50ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4VTMy
KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZm
ZXIoMCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5w
dXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29u
c3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQp
XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91dHB1dCBbW2J1
ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9u
cyk7CiAKQEAgLTE0MCw5ICsxNDIsOSBAQCBrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJv
bUFycmF5KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKIAogaW5saW5lIHVp
bnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4W1tm
dW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5jdGlvbl9jb25zdGFudChrVXNl
U291cmNlQnVmZmVyVTE2KV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWlu
dCAqaW5wdXRVMzJbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpXV0pCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOCBbW2Z1bmN0aW9u
X2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNl
QnVmZmVyVTE2KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWludCAqaW5w
dXRVMzIgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dKQogewogICAg
IGlmIChrVXNlU291cmNlQnVmZmVyVTgpCiAgICAgewpAQCAtMTcwLDEzICsxNzIsMTUgQEAgaW5s
aW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAvLyBOT1RFKGhxbGUpOiB0cmlhbmds
ZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBwcmltaXRpdmUgcmVzdGFy
dC4KIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRpY2VzIGZyb20gYW4gaW5kaWNlcyBidWZm
ZXIuIGluZGV4Q291bnQgb3B0aW9ucyBpbmRpY2F0ZXMgbnVtYmVyCiAvLyBvZiBpbmRpY2VzIHN0
YXJ0aW5nIGZyb20gdGhlIDNyZC4KLWtlcm5lbCB2b2lkIGdlblRyaUZhbkluZGljZXNGcm9tRWxl
bWVudHMoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29u
c3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBj
b25zdGFudCB1Y2hhciAqaW5wdXRVOFtbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1Vz
ZVNvdXJjZUJ1ZmZlclU4KSBdXSwKLSAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1sgYnVm
ZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KSBdXSwKLSAgICBj
b25zdGFudCB1aW50ICppbnB1dFUzMltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1Vz
ZVNvdXJjZUJ1ZmZlclUzMikgXV0sCi0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIp
XV0pCitrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJvbUVsZW1lbnRzKHVpbnQgaWR4IFtb
dGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVm
ZmVyKDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
YW50IHVjaGFyICppbnB1dFU4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVzaG9y
dCAqaW5wdXRVMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ti
dWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0
VTMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVmZmVyKDEp
LCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtbYnVmZmVy
KDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwK
aW5kZXggYjNhMzY3NWQ5ZTVkYjliNzM0OTI3YjkyY2E3ZGQ0NzEyN2U1OWY3Ny4uZjIzMzhiMmY4
MmUwNTU2MmE2OGY1NWY3ZmI1ZmRmODBmYjVmOWY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1h
cC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCkBAIC0yMyw4ICsyMyw2IEBAIHVzaW5n
IG5hbWVzcGFjZSByeDo6bXRsX3NoYWRlcjsKIAogI2RlZmluZSBURVhFTF9MT0FEKGluZGV4KSBm
bG9hdDQoc1JbaW5kZXhdLCBzR1tpbmRleF0sIHNCW2luZGV4XSwgc0FbaW5kZXhdKQogCi0jZGVm
aW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVhcih0ZXhlbCkg
OiB0ZXhlbCkKLQogI2RlZmluZSBPVVRfT0ZfQk9VTkRfQ0hFQ0soZWRnZVZhbHVlLCB0YXJnZXRW
YWx1ZSwgY29uZGl0aW9uKSBcCiAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZhbHVlKSA6ICh0YXJn
ZXRWYWx1ZSkKIApAQCAtMzIsNyArMzAsNiBAQCBzdHJ1Y3QgR2VuTWlwUGFyYW1zCiB7CiAgICAg
dWludCBzcmNMZXZlbDsKICAgICB1aW50IG51bU1pcExldmVsc1RvR2VuOwotICAgIGJvb2wgc1JH
QjsKIH07CiAKIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBMZXZlbHNUb0dlbiA+IDEsIHRoaXMg
ZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dlciBvZiB0d28uIElmIGl0CkBAIC00
Niw4ICs0Myw4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtb
dGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlM2Q8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQp
XV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMg
Jm9wdGlvbnMgW1tidWZmZXIoMCldXSkKIHsKLSAgICB1c2hvcnQzIG1pcFNpemUgID0gdXNob3J0
Myhkc3RNaXAxLmdldF93aWR0aCgpLCBkc3RNaXAxLmdldF9oZWlnaHQoKSwgZHN0TWlwMS5nZXRf
ZGVwdGgoKSk7Ci0gICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBTaXplLngg
JiYgZ0luZGljZXMueSA8IG1pcFNpemUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56OworICAg
IHVzaG9ydDMgbWlwU2l6ZSAgICA9IHVzaG9ydDMoZHN0TWlwMS5nZXRfd2lkdGgoKSwgZHN0TWlw
MS5nZXRfaGVpZ2h0KCksIGRzdE1pcDEuZ2V0X2RlcHRoKCkpOworICAgIGJvb2wgdmFsaWRUaHJl
YWQgICA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUueSAm
JiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56OwogCiAgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVy
ZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0
ZXI6OmxpbmVhcik7CiAKQEAgLTgzLDEwICs4MCw2IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RN
aXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAgICAg
Ly8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCiAKICAgICAvLyBXcml0ZSB0byBzaGFy
ZWQgbWVtb3J5Ci0gICAgaWYgKG9wdGlvbnMuc1JHQikKLSAgICB7Ci0gICAgICAgIHRleGVsMSA9
IGxpbmVhclRvU1JHQih0ZXhlbDEpOwotICAgIH0KICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRl
eGVsMSk7CiAKICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdy
b3VwKTsKQEAgLTExOSw3ICsxMTIsNyBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNETWlwbWFwcyh1
aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAogCiAgICAgICAgIHRl
eGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUgKyB0ZXhl
bDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOwogCi0gICAgICAgIGRzdE1pcDIud3JpdGUoVE9f
TElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDEpOworICAgICAgICBkc3RNaXAyLndyaXRlKHRl
eGVsMSwgZ0luZGljZXMgPj4gMSk7CiAKICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9y
eQogICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CkBAIC0xNjUsNyArMTU4LDcg
QEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5k
ZXhfaW5fdGhyZWFkZ3JvdXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwy
ICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAv
IDguMDsKIAotICAgICAgICBkc3RNaXAzLndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNl
cyA+PiAyKTsKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOwog
CiAgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKICAgICAgICAgVEVYRUxfU1RPUkUo
bEluZGV4LCB0ZXhlbDEpOwpAQCAtMjExLDYgKzIwNCwzNDggQEAga2VybmVsIHZvaWQgZ2VuZXJh
dGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwK
IAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsg
dGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKIAotICAgICAgICBkc3RN
aXA0LndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAzKTsKKyAgICAgICAgZHN0
TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwora2VybmVsIHZv
aWQgZ2VuZXJhdGUyRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFk
Z3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDIgZ0luZGljZXMg
W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZTJkPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RN
aXAxIFtbdGV4dHVyZSgxKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4dHVyZSgyKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBk
c3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVyZSg0KV1dLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25z
IFtbYnVmZmVyKDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNM
ZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXBTaXplID0KKyAgICAgICAgdXNob3J0MihzcmNUZXh0
dXJlLmdldF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0
TWlwTGV2ZWwpKTsKKyAgICBib29sIHZhbGlkVGhyZWFkID0gZ0luZGljZXMueCA8IG1pcFNpemUu
eCAmJiBnSW5kaWNlcy55IDwgbWlwU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4
dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9m
aWx0ZXI6OmxpbmVhcik7CisKKyAgICAvLyBOT1RFKGhxbGUpOiBVc2Ugc2ltZF9ncm91cCBmdW5j
dGlvbiB3aGVuZXZlciBhdmFpbGFibGUuIFRoYXQgY291bGQgYXZvaWQgYmFycmllciB1c2UuCisK
KyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3Qu
CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFldOworICAgIHRocmVhZGdy
b3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQltr
VGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fba1RocmVhZEdyb3VwWFld
OworCisgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9hdDQgdGV4
ZWwxOworICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0MiB0ZXhDb29y
ZHMgPSAoZmxvYXQyKGdJbmRpY2VzKSArIGZsb2F0MigwLjUsIDAuNSkpIC8gZmxvYXQyKG1pcFNp
emUpOworICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5zYW1wbGUodGV4dHVy
ZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisgICAgICAg
IC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAgICAgZHN0TWlwMS53cml0ZSh0ZXhlbDEsIGdJbmRp
Y2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFs
aWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZmZmY7
CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAgICB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIFNlY29uZCBtaXAgbGV2ZWwg
LS0tLS0tLS0KKworICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICBURVhFTF9TVE9S
RShsSW5kZXgsIHRleGVsMSk7CisKKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgZXZlbgorICAgIGlmICgo
bEluZGV4ICYgMHgwOSkgPT0gMCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisgICAgewor
ICAgICAgICBib29sMiBhdEVkZ2UgPSBnSW5kaWNlcyA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkp
OworCisgICAgICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAg
aXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwy
ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRF
ZGdlLngpOworICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0gT1VU
X09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyBrVGhyZWFkR3JvdXBY
KSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhl
bDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArIChrVGhy
ZWFkR3JvdXBYICsgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0
ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDIud3JpdGUo
dGV4ZWwxLCBnSW5kaWNlcyA+PiAxKTsKKworICAgICAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVt
b3J5CisgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKyAgICB9CisKKyAgICBp
ZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIC0tLS0gM3JkIG1pcCBsZXZlbCAtLS0tLS0tLQorICAgIHRocmVh
ZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAgLy8gSW5k
ZXggbXVzdCBiZSBtdWx0aXBsZSBvZiA0CisgICAgaWYgKChsSW5kZXggJiAweDFiKSA9PSAwKSAg
Ly8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKyAgICB7CisgICAgICAgIG1pcFNpemUgICAgICA9
IG1heChtaXBTaXplID4+IDEsIHVzaG9ydDIoMSkpOworICAgICAgICBib29sMiBhdEVkZ2UgPSAo
Z0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAo
eCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxs
IGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9D
SEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMiksIGF0RWRnZS54KTsKKyAgICAgICAg
Ly8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisgICAgICAgICAgICBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIgKiBrVGhyZWFkR3JvdXBY
KSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhl
bDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICgyICog
a1RocmVhZEdyb3VwWCArIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAodGV4ZWwx
ICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RNaXAzLndy
aXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMik7CisKKyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisgICAgfQorCisg
ICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMykKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDR0aCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAgICB0
aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8v
IEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgOAorICAgIGlmICgobEluZGV4ICYgMHgzZikgPT0g
MCkgIC8vIChsSW5kZXggJiBiMTExMTExKSA9PSAwCisgICAgeworICAgICAgICBtaXBTaXplICAg
ICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKyAgICAgICAgYm9vbDIgYXRFZGdl
ID0gKGdJbmRpY2VzID4+IDIpID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisKKyAgICAgICAg
Ly8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIg
d2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisgICAg
ICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDMgPQorICAgICAgICAgICAgT1VU
X09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdy
b3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQg
dGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAo
NCAqIGtUaHJlYWRHcm91cFggKyA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwxID0gKHRl
eGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAgZHN0TWlw
NC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmVUeXBlUiwgdHlwZW5hbWUgVGV4dHVyZVR5cGVXPgorc3RhdGljIF9fYXR0
cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFu
ZE1vcmVNaXBtYXBzKAorICAgIHVpbnQgbEluZGV4LAorICAgIHVzaG9ydDMgZ0luZGljZXMsCisg
ICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDIsCisg
ICAgVGV4dHVyZVR5cGVXIGRzdE1pcDMsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDQsCisgICAg
dXNob3J0MiBtaXAxU2l6ZSwKKyAgICBmbG9hdDQgbWlwMVRleGVsLAorICAgIHRocmVhZGdyb3Vw
IGZsb2F0ICpzUiwKKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0csCisgICAgdGhyZWFkZ3JvdXAg
ZmxvYXQgKnNCLAorICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwKKyAgICBjb25zdGFudCBHZW5N
aXBQYXJhbXMgJm9wdGlvbnMpCit7CisgICAgdXNob3J0MiBtaXBTaXplID0gbWlwMVNpemU7Cisg
ICAgZmxvYXQ0IHRleGVsMSAgID0gbWlwMVRleGVsOworCisgICAgLy8gLS0tLSBTZWNvbmQgbWlw
IGxldmVsIC0tLS0tLS0tCisKKyAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAgVEVY
RUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworCisgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1f
ZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIGV2ZW4KKyAg
ICBpZiAoKGxJbmRleCAmIDB4MDkpID09IDApICAvLyAobEluZGV4ICYgYjAwMTAwMSkgPT0gMAor
ICAgIHsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gZ0luZGljZXMueHkgPT0gKG1pcFNpemUgLSB1
c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lk
dGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxv
YXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4
ICsgMSksIGF0RWRnZS54KTsKKyAgICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRl
eGVsMyA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsga1Ro
cmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBm
bG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5k
ZXggKyAoa1RocmVhZEdyb3VwWCArIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAo
dGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RN
aXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMueHkgPj4gMSwgZ0luZGljZXMueik7CisKKyAgICAg
ICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgs
IHRleGVsMSk7CiAgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0g
MikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDNyZCBtaXAg
bGV2ZWwgLS0tLS0tLS0KKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3Ro
cmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAorICAgIGlm
ICgobEluZGV4ICYgMHgxYikgPT0gMCkgIC8vIChsSW5kZXggJiBiMDExMDExKSA9PSAwCisgICAg
eworICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsK
KyAgICAgICAgYm9vbDIgYXRFZGdlID0gKGdJbmRpY2VzLnh5ID4+IDEpID09IChtaXBTaXplIC0g
dXNob3J0MigxKSk7CisKKyAgICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdp
ZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZs
b2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRl
eCArIDIpLCBhdEVkZ2UueCk7CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0
ZXhlbDMgPQorICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9B
RChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgr
MSwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVs
MiwgVEVYRUxfTE9BRChsSW5kZXggKyAoMiAqIGtUaHJlYWRHcm91cFggKyAyKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7
CisKKyAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkg
LyA0LjA7CisKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzLnh5ID4+IDIs
IGdJbmRpY2VzLnopOworCisgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICAg
ICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworICAgIH0KKworICAgIGlmIChvcHRpb25z
Lm51bU1pcExldmVsc1RvR2VuID09IDMpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisgICAgdGhyZWFkZ3JvdXBfYmFy
cmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJl
IG11bHRpcGxlIG9mIDgKKyAgICBpZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAobEluZGV4
ICYgYjExMTExMSkgPT0gMAorICAgIHsKKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNp
emUgPj4gMSwgdXNob3J0MigxKSk7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNlcy54
eSA+PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworCisgICAgICAgIC8vICh4KzEsIHkp
CisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwg
dG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNLKHRl
eGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0KSwgYXRFZGdlLngpOworICAgICAgICAvLyAoeCwg
eSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKyAgICAgICAgICAgIE9VVF9PRl9CT1VORF9D
SEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCAqIGtUaHJlYWRHcm91cFgpLCBhdEVk
Z2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsNCA9IE9V
VF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBrVGhyZWFk
R3JvdXBYICsgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhl
bDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDQud3JpdGUodGV4
ZWwxLCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKyAgICB9Cit9CisKK2tlcm5lbCB2
b2lkIGdlbmVyYXRlQ3ViZU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhy
ZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0MyBnSW5k
aWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNz
Ojp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0
dXJlKDIpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZs
b2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0
TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAgdWludCBm
aXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXAxU2l6
ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmlyc3RNaXBMZXZlbCks
IHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisgICAgYm9vbCB2YWxpZFRo
cmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXAxU2l6ZS55
OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGlu
ZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAgICAvLyAt
LS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0NCBtaXAxVGV4ZWw7CisgICAg
aWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQyIHRleENvb3JkcyA9IChmbG9h
dDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBmbG9hdDIobWlwMVNpemUpOwor
ICAgICAgICBtaXAxVGV4ZWwgPSBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxlciwgY3Vi
ZVRleGNvb3Jkcyh0ZXhDb29yZHMsIGludChnSW5kaWNlcy56KSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKworICAgICAg
ICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAgICAgIGRzdE1pcDEud3JpdGUobWlwMVRleGVsLCBn
SW5kaWNlcy54eSwgZ0luZGljZXMueik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworICAgICAgICBs
SW5kZXggPSAweGZmZmZmZmZmOworICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1pcExldmVs
c1RvR2VuID09IDEpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXNl
IHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9hdCBz
R1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdyb3Vw
WFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKworICAgIGdl
bmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMsIHNy
Y1RleHR1cmUsIGRzdE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNHLCBzQiwg
c0EsIG9wdGlvbnMpOworfQorCitrZXJuZWwgdm9pZCBnZW5lcmF0ZTJEQXJyYXlNaXBtYXBzKHVp
bnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMgZ0luZGljZXMgW1t0aHJlYWRfcG9zaXRpb25f
aW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRf
YXJyYXk8ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4g
ZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZTJkX2FycmF5PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4dHVy
ZSgyKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJy
YXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNz
Ojp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0p
Cit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisgICAg
dXNob3J0MiBtaXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgo
Zmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7Cisg
ICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2Vz
LnkgPCBtaXAxU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIo
bWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVh
cik7CisKKyAgICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0NCBt
aXAxVGV4ZWw7CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQyIHRl
eENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBmbG9h
dDIobWlwMVNpemUpOworICAgICAgICBtaXAxVGV4ZWwgPQorICAgICAgICAgICAgc3JjVGV4dHVy
ZS5zYW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgZ0luZGljZXMueiwgbGV2ZWwob3B0
aW9ucy5zcmNMZXZlbCkpOworCisgICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAgICAg
ZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUgYWxsIHN1
YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZmZmY7CisgICAgfQorCisg
ICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lk
IGJhbmsgY29uZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFld
OworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRn
cm91cCBmbG9hdCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fb
a1RocmVhZEdyb3VwWFldOworCisgICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5kTW9yZU1p
cG1hcHMobEluZGV4LCBnSW5kaWNlcywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlwMywgZHN0
TWlwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXAxU2l6
ZSwgbWlwMVRleGVsLCBzUiwgc0csIHNCLCBzQSwgb3B0aW9ucyk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy92aXNpYmlsaXR5Lm1ldGFsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAppbmRleCA5MDVjMTk2MzUy
NzU1ZTAxNDdhZTQyN2M0ODMwNGUwYzYzZmZkMmYxLi5hZDU4NjBmNzUzZjc1NzUxMzBmNmRiNjMw
NjYwMzQ3YTA4NTMyZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJz
L3Zpc2liaWxpdHkubWV0YWwKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIK
IAotY29uc3RhbnQgYm9vbCBrQ29tYmluZVdpdGhFeGlzdGluZ1Jlc3VsdCBbW2Z1bmN0aW9uX2Nv
bnN0YW50KDEwMDApXV07Citjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0
IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLy8gQ29tYmluZSB0aGUgdmlzaWJpbGl0eSBy
ZXN1bHQgb2YgY3VycmVudCByZW5kZXIgcGFzcyB3aXRoIHByZXZpb3VzIHZhbHVlIGZyb20gcHJl
dmlvdXMgcmVuZGVyCiAvLyBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAppbmRleCA3NTViZDYxZDdm
MmQzMjMzODZlZWViZDc2OGQ5MmUyY2I5MWU2Y2ExLi43ZDVhYzU4NGIxNGRmMmQyMzQ5YmM0YTk1
YWY2OWZkOWViMTA1MWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKQEAgLTQyOCw4ICs0MjgsNiBA
QCBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIEVHTF9EZXN0cm95Q29udGV4dChFR0xEaXNwbGF5IGRw
eSwgRUdMQ29udGV4dCBjdHgpCiAKICAgICBpZiAoY29udGV4dFdhc0N1cnJlbnQpCiAgICAgewot
ICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQsIGRpc3BsYXktPm1ha2VDdXJyZW50
KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZWdsRGVzdHJveUNvbnRleHQiLCBHZXRDb250ZXh0SWZWYWxpZChkaXNwbGF5
LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQodGhyZWFk
LCBudWxscHRyKTsKICAgICB9CiAKQEAgLTQ2Niw5ICs0NjQsOSBAQCBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIEVHTF9NYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwKICAgICAvLyBPbmx5IGNhbGwg
bWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Igc3VyZmFjZXMgaGF2ZSBjaGFuZ2VkLgogICAg
IGlmIChwcmV2aW91c0RyYXcgIT0gZHJhd1N1cmZhY2UgfHwgcHJldmlvdXNSZWFkICE9IHJlYWRT
dXJmYWNlIHx8IHByZXZpb3VzQ29udGV4dCAhPSBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQU5H
TEVfRUdMX1RSWV9SRVRVUk4oCi0gICAgICAgICAgICB0aHJlYWQsIGRpc3BsYXktPm1ha2VDdXJy
ZW50KHByZXZpb3VzQ29udGV4dCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwK
LSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZhbGlkKGRpc3BsYXks
IGNvbnRleHQpLCBFR0xfRkFMU0UpOworICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJl
YWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPm1ha2VDdXJyZW50KHRo
cmVhZCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IiwgR2V0Q29udGV4dElmVmFsaWQoZGlzcGxh
eSwgY29udGV4dCksIEVHTF9GQUxTRSk7CiAKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQodGhy
ZWFkLCBjb250ZXh0KTsKICAgICB9CkBAIC04MTgsOSArODE2LDkgQEAgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBFR0xfUmVsZWFzZVRocmVhZCh2b2lkKQogICAgICAgICBpZiAocHJldmlvdXNEcmF3
ICE9IEVHTF9OT19TVVJGQUNFIHx8IHByZXZpb3VzUmVhZCAhPSBFR0xfTk9fU1VSRkFDRSB8fAog
ICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQogICAgICAgICB7
Ci0gICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTigKLSAgICAgICAgICAgICAgICB0aHJl
YWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250ZXh0LCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyKSwKLSAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVhZCIs
IG51bGxwdHIsIEVHTF9GQUxTRSk7CisgICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0
aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Rpc3BsYXkt
Pm1ha2VDdXJyZW50KHRocmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVhZCIsIG51bGxwdHIsIEVH
TF9GQUxTRSk7CiAgICAgICAgIH0KICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4odGhyZWFk
LCBwcmV2aW91c0Rpc3BsYXktPnJlbGVhc2VUaHJlYWQoKSwgImVnbFJlbGVhc2VUaHJlYWQiLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREaXNwbGF5SWZWYWxpZChwcmV2aW91c0Rp
c3BsYXkpLCBFR0xfRkFMU0UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416012</attachid>
            <date>2020-12-11 10:46:19 -0800</date>
            <delta_ts>2020-12-11 14:46:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201211104608.patch</filename>
            <type>text/plain</type>
            <size>2855268</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uZjJi
YzdiODQ5YmViZTYxOTUxYThmZGE1MjdkNTU3YTJjZTNiOGQ5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQxIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi87IH07CisJCUZGODFGRjAyMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovOyB9OworCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRF
MjQgLyogRnJhbWVCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUJDMjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5o
ICovOyB9OworCQlGRjgxRkYwNDI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJEMjU4MThE
NjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5oICovOyB9OworCQlGRjgxRkYwNTI1ODE4RDY5MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5tbSAqLzsgfTsKKwkJRkY4MUZGMDYyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLzsgfTsKKwkJ
RkY4MUZGMDcyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0
IC8qIENvbXBpbGVyTXRsLm1tICovOyB9OworCQlGRjgxRkYwODI1ODE4RDY5MDA4OTRFMjQgLyog
bXRsX2J1ZmZlcl9wb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZlcl9wb29sLmggKi87
IH07CisJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi87IH07CisJCUZG
ODFGRjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDNTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2J1ZmZlcl9wb29sLm1tICovOyB9OworCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRF
MjQgLyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICovOyB9
OworCQlGRjgxRkYwRDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzcyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEUyNTgxOEQ2
QTAwODk0RTI0IC8qIG10bF9zdGF0ZV9jYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzgyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9zdGF0
ZV9jYWNoZS5oICovOyB9OworCQlGRjgxRkYwRjI1ODE4RDZBMDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0gKi87IH07CisJCUZG
ODFGRjEwMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNBMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZG
MTEyNTgxOEQ2QTAwODk0RTI0IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRl
ck10bC5oICovOyB9OworCQlGRjgxRkYxMjI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0My
NTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMTMyNTgxOEQ2
QTAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRDI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0IC8qIERpc3BsYXlNdGwubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRTI1ODE4
RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMUIyNTgxOTBDQTAw
ODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbERpcmVjdC5oICovOyB9OworCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRFMjQgLyog
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0
YWxEaXJlY3QuY3BwICovOyB9OworCQlGRjgxRkYxRDI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGlj
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLzsgfTsKKwkJRkY4MUZGMUUy
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjE5MjU4MTkwQ0EwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgKi87IH07CisJCUZGODFGRjFGMjU4MTkwQ0Ew
MDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmggKi87IH07CisJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAqLzsgfTsKKwkJRkY4MUZGNUMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyMjI1ODE5MTk3MDA4OTRF
MjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNUQyNTgx
OTE5NzAwODk0RTI0IC8qIERlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLzsgfTsK
KwkJRkY4MUZGNUUyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmggKi87IH07CisJCUZGODFGRjVGMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjI1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGNjAyNTgxOTE5NzAwODk0
RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyNjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNw
cCAqLzsgfTsKKwkJRkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJs
b2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oICovOyB9Owor
CQlGRjgxRkY2MjI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjgyNTgxOTE5
NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLzsgfTsKKwkJRkY4MUZGNjMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI5MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjY0
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
OyB9OworCQlGRjgxRkY2NTI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWdTaW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQjI1ODE5MTk3MDA4
OTRFMjQgLyogRGVidWdTaW5rLmggKi87IH07CisJCUZGODFGRjY2MjU4MTkxOTcwMDg5NEUyNCAv
KiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQzI1ODE5MTk3MDA4OTRFMjQgLyog
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oICovOyB9OworCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0
YWwuY3BwICovOyB9OworCQlGRjgxRkY2ODI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91dEFy
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICovOyB9OworCQlGRjgxRkY2
OTI1ODE5MTk4MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFw
U3ltYm9scy5jcHAgKi87IH07CisJCUZGODFGRjZBMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMzAyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi87IH07CisJCUZGODFGRjZC
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlS2V5d29yZHMuaCAqLzsgfTsKKwkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLzsgfTsKKwkJRkY4MUZGNkQy
NTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzMzI1ODE5MTk3MDA4OTRFMjQgLyog
VG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi87IH07CisJCUZGODFGRjZGMjU4MTkxOTgwMDg5NEUyNCAvKiBT
a2lwcGluZ1RyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmgg
Ki87IH07CisJCUZGODFGRjcwMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuY3BwICovOyB9OworCQlGRjgxRkY3MTI1
ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5l
LmNwcCAqLzsgfTsKKwkJRkY4MUZGNzIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzODI1ODE5MTk3
MDA4OTRFMjQgLyogSWRHZW4uaCAqLzsgfTsKKwkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzkyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRl
Q29tcG91bmRFeHByZXNzaW9ucy5oICovOyB9OworCQlGRjgxRkY3NDI1ODE5MTk4MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0
VHlwZUNhc3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzUyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5
bWJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi87IH07CisJCUZGODFGRjc2
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0
IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50
ZXJmYWNlQmxvY2tzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzgyNTgxOTE5ODAwODk0RTI0IC8qIEFz
dEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwICovOyB9OworCQlG
RjgxRkY3OTI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYz
RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi87
IH07CisJCUZGODFGRjdBMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQwMjU4MTkxOTcwMDg5NEUy
NCAvKiBMYXlvdXQuaCAqLzsgfTsKKwkJRkY4MUZGN0IyNTgxOTE5ODAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwICovOyB9OworCQlGRjgxRkY3QzI1ODE5
MTk4MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFt
UHJlbHVkZS5oICovOyB9OworCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzLmggKi87IH07CisJCUZGODFGRjdFMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLzsgfTsKKwkJRkY4MUZGN0YyNTgx
OTE5ODAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NTI1ODE5MTk3MDA4
OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZG
ODAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGODEyNTgxOTE5ODAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ3MjU4MTkxOTcwMDg5
NEUyNCAvKiBBc3RIZWxwZXJzLmggKi87IH07CisJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAv
KiBIb2lzdENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0ODI1ODE5MTk3MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3Bw
ICovOyB9OworCQlGRjgxRkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ5MjU4MTkxOTcw
MDg5NEUyNCAvKiBQaXBlbGluZS5oICovOyB9OworCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQg
LyogUmV3cml0ZVBpcGVsaW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGNEEyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMu
aCAqLzsgfTsKKwkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEIyNTgxOTE5
NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovOyB9OworCQlGRjgxRkY4NjI1ODE5MTk4MDA4OTRF
MjQgLyogSG9pc3RDb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRDMjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5o
ICovOyB9OworCQlGRjgxRkY4NzI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEQyNTgxOTE5
NzAwODk0RTI0IC8qIFdyYXBNYWluLmNwcCAqLzsgfTsKKwkJRkY4MUZGODgyNTgxOTE5ODAwODk0
RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmgg
Ki87IH07CisJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEYy
NTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAgKi87IH07CisJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MDI1ODE5MTk3MDA4OTRFMjQgLyog
UHJvZ3JhbVByZWx1ZGUuY3BwICovOyB9OworCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLzsgfTsKKwkJRkY4MUZGOEMy
NTgxOTE5ODAwODk0RTI0IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRh
bC5oICovOyB9OworCQlGRjgxRkY4RDI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUzMjU4MTkx
OTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICovOyB9OworCQlGRjgxRkY4RTI1ODE5MTk4MDA4OTRF
MjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNp
dFR5cGVDYXN0cy5oICovOyB9OworCQlGRjgxRkY4RjI1ODE5MTk4MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwICovOyB9OworCQlGRjgxRkY5MDI1ODE5MTk4MDA4OTRFMjQgLyog
TW9kaWZ5U3RydWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY1NjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi87IH07CisJ
CUZGODFGRjkxMjU4MTkxOTgwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU3MjU4MTkxOTcwMDg5
NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLzsgfTsKKwkJRkY4MUZGOTIyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU4MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTkyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVD
YXNlRGVjbGFyYXRpb25zLmggKi87IH07CisJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBN
YXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8q
IE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRjk1MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgKi87
IH07CisJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBOb2RlVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTcyNTgxQTNDMTAwODk0
RTI0IC8qIE5vZGVUeXBlLmggKi87IH07CisJCUZGODFGRjlDMjU4MUEzQzIwMDg5NEUyNCAvKiBB
c05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLzsgfTsKKwkJRkY4MUZGOUQyNTgx
QTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVy
bVJlYnVpbGQuY3BwICovOyB9OworCQlGRjgxRkY5RTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLzsgfTsKKwkJRkY4
MUZGOUYyNTgxQUQwNDAwODk0RTI0IC8qIGJsaXQubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBQTI1ODE4RDY4MDA4OTRFMjQgLyogYmxp
dC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHku
bWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLzsgfTsKKwkJRkY4MUZG
QTEyNTgxQUQwNDAwODk0RTI0IC8qIGNvcHlfYnVmZmVyLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8q
IGNvcHlfYnVmZmVyLm1ldGFsICovOyB9OworCQlGRjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyog
Y2xlYXIubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkVCMTI1ODE4RDY4MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgKi87IH07CisJCUZGODFG
RkEzMjU4MUFEMDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8q
IGdlbl9taXBtYXAubWV0YWwgKi87IH07CisJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUyNCAvKiBn
ZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLzsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZFJ1
bGUgc2VjdGlvbiAqLwpAQCAtMjAzMCw2ICsyMTY1LDE0MyBAQAogCQlBM0QzMjkxMzIzQ0ZDQjc2
MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5
IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgwMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBtdGxfZ2xzbGFuZ191dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmFtTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRTgyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TXRsX2FwaS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3lu
Y010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5bmNNdGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg0MjU4MThENjgwMDg5NEUy
NCAvKiBRdWVyeU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWVyeU10
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4NTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IG10bF9mb3JtYXRfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRTg2MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJCdWZmZXJNdGwubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg4MjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9jb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRs
X2NvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4QTI1ODE4
RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTYW1wbGVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThC
MjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3luY010bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU4RDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBRdWVyeU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVy
QnVmZmVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckJ1ZmZl
ck10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MDI1ODE4RDY4MDA4
OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNmb3JtRmVlZGJhY2tNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1ZmZlck10bC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRf
dGFibGVfYXV0b2dlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOTMyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlclRhcmdldE10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdXJmYWNlTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IG10bF9nbHNsYW5nX210bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1hbmRfYnVmZmVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQg
LyogVmVydGV4QXJyYXlNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVy
dGV4QXJyYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTgyNTgx
OEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGFyZ2V0TXRsLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWZXJ0ZXhBcnJh
eU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUIyNTgxOEQ2ODAw
ODk0RTI0IC8qIG10bF9jb21tYW5kX2J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfY29tbWFuZF9idWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCdWZmZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1
cmZhY2VNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJT1N1
cmZhY2VTdXJmYWNlTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
RjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZXNvdXJjZXMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9yZXNvdXJjZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10
bF9zdGF0ZV9jYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTMy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVl
ZGJhY2tNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUcmFu
c2Zvcm1GZWVkYmFja010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZF
QTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNjI1ODE4RDY4MDA4OTRFMjQgLyogVGV4dHVyZU10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHR1cmVNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE3MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHR1cmVN
dGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW1wbGVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
QTI1ODE4RDY4MDA4OTRFMjQgLyogYmxpdC5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0
YWw7IHBhdGggPSBibGl0Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUubWV0YWw7IHBhdGggPSB2aXNpYmlsaXR5Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyogY29uc3RhbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnBhc2NhbDsgcGF0aCA9IG10
bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBRjI1ODE4RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gY29weV9idWZmZXIubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3Jt
YXRfYXV0b2dlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmb3JtYXRfYXV0
b2dlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCMTI1ODE4RDY4MDA4
OTRFMjQgLyogY2xlYXIubWV0YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0g
Y2xlYXIubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIyMjU4MThE
NjgwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRh
bDsgcGF0aCA9IGdlbl9taXBtYXAubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBnZW5faW5kaWNlcy5tZXRhbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNp
b25fcXVlcnlfcG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZyYW1lQnVmZmVyTXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJEMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlck10bC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNdGwubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUMwMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbXBpbGVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10
bF9idWZmZXJfcG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMjI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG10bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NDI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb250ZXh0TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRUM1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfYnVmZmVyX3Bvb2wubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29t
bW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1v
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzcyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX3JlbmRlcl91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9zdGF0ZV9jYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGcmFtZUJ1ZmZlck10bC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQ0MyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYWRlck10bC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dy
YW1NdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9ncmFt
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRTI1ODE4RDY4MDA4
OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpc3BsYXlNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYxODI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTkyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbFV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbFV0aWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyMjI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjUyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZFN0cnVj
dERlY2xhcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjI2
MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U3RydWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjgyNTgxOTE5NzAwODk0
RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRW52aXJvbm1lbnRWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJCMjU4MTkx
OTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdTaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJDMjU4
MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMkQyNTgxOTE5
NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFbWl0TWV0YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYyRTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZU91dEFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMkYyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwU3ltYm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjMwMjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sRW52LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0
IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXdyaXRlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzIy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYzMzI1ODE5MTk3MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRvcG9zb3J0U3RydWN0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNraXBwaW5nVHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJn
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlT3V0QXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM3MjU4MTkxOTcwMDg5
NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQaXBlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM4MjU4
MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJZEdlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzOTI1ODE5MTk3
MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhw
bGljaXRUeXBlQ2FzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYzQjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXBTeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVQaXBlbGluZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyog
UmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzdEhlbHBlcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0MTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNDIyNTgxOTE5NzAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sRW52Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVy
RGVjbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0
NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3RIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb2lzdENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQ5MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXBlbGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlUGlwZWxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRCMjU4MTkxOTcwMDg5
NEUyNCAvKiBSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVm
ZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRDMjU4MTkxOTcw
MDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIb2lzdENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV3JhcE1haW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUtleXdv
cmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElkR2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFbWl0TWV0YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyYXBNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1NTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2Rp
ZnlTdHJ1Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U3RydWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VG9wb3NvcnRTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU4
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU5MjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY1QTI1ODE5MTk3MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTUy
NTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTWV0
YWwuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbC5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQlGRjgxRkY5NzI1ODFBM0MxMDA4OTRF
MjQgLyogTm9kZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTgyNTgxQTNDMTAwODk0
RTI0IC8qIEFzTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc05vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0
IC8qIEludGVybVJlYnVpbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZXJtUmVidWlsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludGVybVJlYnVpbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjA0NSw2ICsyMzE3LDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1Q0IzMDQ5NDFE
RTQxNTcyMDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJCUZGODFGRjk2MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLywKIAkJCQk1Q0IzMDQ5MzFERTQxNTZCMDBEMkM0MDUgLyogUXVhcnR6Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTIwNTUsNiArMjMyOCw4IEBACiAJCTMxMDEyRDlGMThC
OTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJhbnNsYXRv
ck1ldGFsRGlyZWN0ICovLAorCQkJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QgKi8sCiAJCQkJNUNCRDU5NjkyMjgyNkEwMDAwMkIyMkFBIC8qIHRyZWVv
cHMgKi8sCiAJCQkJNUM1NUQ2RUEyMjgyNkM5ODAwQjVCQTJDIC8qIHRyZWV1dGlsICovLAogCQkJ
CTVDMURCQkZCMUIwNDM3NUYwMDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuY3BwICovLApAQCAt
MjE0NCw2ICsyNDE5LDcgQEAKIAkJCQkzMUEzMzFEMTFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJp
dHkuaCAqLywKIAkJCQkzMTAxMkRGMjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAg
Ki8sCiAJCQkJNUMxREJDMUExQjA0Mzc1RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwICovLAor
CQkJCUZGODFGRjE3MjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggKi8sCiAJCQkJMzE1
RUJENDcxRkNFNDQyODAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuY3BwICovLAogCQkJCTMxNUVC
RDczMUZDRTQ0MzQwMEFDN0E4OSAvKiBTdHJ1Y3R1cmVITFNMLmggKi8sCiAJCQkJNUM1NUQ2RDky
MjgyNkM3ODAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgKi8sCkBAIC0yMTYwLDYgKzI0MzYsMTAgQEAK
IAkJCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJ
CQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJ
CTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUZG
ODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwICovLAor
CQkJCUZGODFGRjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAq
LywKKwkJCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
Y3BwICovLAorCQkJCUZGODFGRjFBMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxV
dGlscy5oICovLAogCQkJCTMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVs
a2FuLmNwcCAqLywKIAkJCQkzMTVFQkQ2NjFGQ0U0NDMxMDBBQzdBODkgLyogVHJhbnNsYXRvclZ1
bGthbi5oICovLAogCQkJCTVDMURCQzFEMUIwNDM3NUYwMDIzNTU1MiAvKiBUeXBlcy5jcHAgKi8s
CkBAIC0yNTIyLDYgKzI4MDIsNyBAQAogCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLywKIAkJCQlBMzAzMDZGRTIzMDVG
NjM2MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBMzAzMDZGRjIzMDVGNjM2
MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmggKi8sCiAJCQkJNUM1NUQ2RUQyMjgyNkNCMjAwQjVC
QTJDIC8qIEZpbmRNYWluLmNwcCAqLywKQEAgLTI1MzIsOSArMjgxMywxMiBAQAogCQkJCTVDNTVE
NkVFMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlX3V0aWwuaCAqLywKIAkJCQk1QzU1RDZG
NDIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCAqLywKIAkJ
CQk1QzU1RDZGODIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgg
Ki8sCisJCQkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwICov
LAorCQkJCUZGODFGRjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8sCiAJ
CQkJNUM1NUQ2RjIyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQk1QzU1RDZGMTIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCAqLywKIAkJCQk1
QzU1RDZGNzIyODI2Q0IzMDBCNUJBMkMgLyogTm9kZVNlYXJjaC5oICovLAorCQkJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovLAogCQkJCUEzQzNGRTEyMjU1REREOTIw
MEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuY3BwICovLAogCQkJCUEzQzNG
RTExMjU1REREOTIwMEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuaCAqLywK
IAkJCQk2RUIwMUMxRjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlh
YmxlLmNwcCAqLywKQEAgLTI1OTAsNiArMjg3NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTVDQjMwMERGMURFMzlGMDMwMEQyQzQwNSAvKiBnbCAqLywKKwkJ
CQlGRjgxRkU3RjI1ODE4RDY4MDA4OTRFMjQgLyogbWV0YWwgKi8sCiAJCQkJNkUzM0U4RTcyNEQw
RDE5NjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwICovLAogCQkJCTVDQjMwNEFBMURFNDE2NDgw
MEQyQzQwNSAvKiBCdWZmZXJJbXBsLmggKi8sCiAJCQkJNUNCMzA0QUIxREU0MTY0ODAwRDJDNDA1
IC8qIENvbXBpbGVySW1wbC5oICovLApAQCAtMjc0NSw2ICszMDMwLDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzA0OEIxREU0MTQzNTAwRDJDNDA1IC8q
IENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8sCisJCQkJRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0
IC8qIE1ldGFsLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RDFERTQxNDQ0MDBEMkM0MDUgLyog
T3BlbkdMLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RjFERTQxNDU1MDBEMkM0MDUgLyogUXVh
cnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkpOwpAQCAtMzE4Nyw2ICszNDczLDE1NCBAQAogCQkJ
cGF0aCA9IGluY2x1ZGUvR0xTTEFORzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8q
IHNoYWRlcnMgKi8sCisJCQkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
ICovLAorCQkJCUZGODFGRTkxMjU4MThENjgwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gKi8sCisJ
CQkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi8sCisJCQkJRkY4
MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tICovLAorCQkJCUZGODFGRUM0
MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8sCisJCQkJRkY4MUZFQkYyNTgxOEQ2
ODAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gKi8sCisJCQkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0
RTI0IC8qIERpc3BsYXlNdGwuaCAqLywKKwkJCQlGRjgxRkVDRTI1ODE4RDY4MDA4OTRFMjQgLyog
RGlzcGxheU10bC5tbSAqLywKKwkJCQlGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxh
eU10bF9hcGkuaCAqLywKKwkJCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwuaCAqLywKKwkJCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFQTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZh
Y2VNdGwuaCAqLywKKwkJCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3Vy
ZmFjZU10bC5tbSAqLywKKwkJCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZl
cl9wb29sLmggKi8sCisJCQkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJf
cG9vbC5tbSAqLywKKwkJCQlGRjgxRkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRf
YnVmZmVyLmggKi8sCisJCQkJRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5k
X2J1ZmZlci5tbSAqLywKKwkJCQlGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1v
bi5oICovLAorCQkJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICov
LAorCQkJCUZGODFGRTg5MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggKi8sCisJ
CQkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5t
bSAqLywKKwkJCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
ICovLAorCQkJCUZGODFGRTg1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1t
ICovLAorCQkJCUZGODFGRTk1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRp
bHMuaCAqLywKKwkJCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFu
Z191dGlscy5oICovLAorCQkJCUZGODFGRUNBMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVz
aW9uX3F1ZXJ5X3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovLAorCQkJCUZGODFGRUM3MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfcmVuZGVyX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQTMyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZXNvdXJjZXMuaCAqLywKKwkJCQlGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3Jlc291cmNlcy5tbSAqLywKKwkJCQlGRjgxRkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X3N0YXRlX2NhY2hlLmggKi8sCisJCQkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLywKKwkJCQlGRjgxRkVDMjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0
aWxzLmggKi8sCisJCQkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LywKKwkJCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovLAorCQkJ
CUZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tICovLAorCQkJCUZGODFG
RTg0MjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5oICovLAorCQkJCUZGODFGRThEMjU4MThE
NjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLywKKwkJCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRF
MjQgLyogUmVuZGVyQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0
IC8qIFJlbmRlckJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQg
LyogUmVuZGVyVGFyZ2V0TXRsLmggKi8sCisJCQkJRkY4MUZFOTkyNTgxOEQ2ODAwODk0RTI0IC8q
IFJlbmRlclRhcmdldE10bC5tbSAqLywKKwkJCQlGRjgxRkU4QTI1ODE4RDY4MDA4OTRFMjQgLyog
U2FtcGxlck10bC5oICovLAorCQkJCUZGODFGRUE4MjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVy
TXRsLm1tICovLAorCQkJCUZGODFGRUNCMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJNdGwuaCAq
LywKKwkJCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovLAorCQkJ
CUZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggKi8sCisJCQkJRkY4MUZF
OTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0gKi8sCisJCQkJRkY4MUZFOEMyNTgx
OEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLywKKwkJCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRF
MjQgLyogU3luY010bC5tbSAqLywKKwkJCQlGRjgxRkVBNzI1ODE4RDY4MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oICovLAorCQkJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAvKiBUZXh0dXJlTXRs
Lm1tICovLAorCQkJCUZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFj
a010bC5oICovLAorCQkJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSAqLywKKwkJCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJy
YXlNdGwuaCAqLywKKwkJCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1ldGFsOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8qIHNoYWRlcnMgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRUFBMjU4MThE
NjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovLAorCQkJCUZGODFGRUIxMjU4MThENjgwMDg5NEUy
NCAvKiBjbGVhci5tZXRhbCAqLywKKwkJCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29t
bW9uLmggKi8sCisJCQkJRkY4MUZFQUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICov
LAorCQkJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRhbCAqLywK
KwkJCQlGRjgxRkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLywKKwkJ
CQlGRjgxRkVCMzI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX2luZGljZXMubWV0YWwgKi8sCisJCQkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8sCisJCQkJRkY4
MUZFQUUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jICovLAorCQkJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFs
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzaGFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJRkY4MUZGMjAyNTgxOTE5NzAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4
MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCAqLywKKwkJ
CQlGRjgxRkY1NDI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCAqLywK
KwkJCQlGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgKi8sCisJCQkJ
RkY4MUZGNDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLywKKwkJCQlGRjgxRkY0
RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovLAorCQkJCUZGODFGRjIzMjU4
MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oICovLAorCQkJCUZGODFGRjJCMjU4MTkxOTcwMDg5NEUy
NCAvKiBEZWJ1Z1NpbmsuaCAqLywKKwkJCQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjIyMjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovLAorCQkJCUZGODFGRjQxMjU4
MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAq
LywKKwkJCQlGRjgxRkYyQTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oICovLAorCQkJCUZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0
TWV0YWwuY3BwICovLAorCQkJCUZGODFGRjUyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCAqLywKKwkJCQlGRjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJs
ZS5oICovLAorCQkJCUZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgKi8sCisJCQkJRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmgg
Ki8sCisJCQkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLywKKwkJCQlG
RjgxRkYzODI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uaCAqLywKKwkJCQlGRjgxRkYzMjI1ODE5
MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLywKKwkJCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRF
MjQgLyogTGF5b3V0LmggKi8sCisJCQkJRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUy
NCAvKiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmggKi8sCisJCQkJRkY4MUZGMkYyNTgxOTE5
NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovLAorCQkJCUZGODFGRjNCMjU4MTkxOTcwMDg5
NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8sCisJCQkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8q
IE1vZGlmeVN0cnVjdC5jcHAgKi8sCisJCQkJRkY4MUZGNTYyNTgxOTE5NzAwODk0RTI0IC8qIE1v
ZGlmeVN0cnVjdC5oICovLAorCQkJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNw
cCAqLywKKwkJCQlGRjgxRkYyNDI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oICovLAorCQkJCUZG
ODFGRjM3MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8sCisJCQkJRkY4MUZGNDky
NTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi8sCisJCQkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLywKKwkJCQlGRjgxRkY0MjI1ODE5MTk3MDA4
OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCAqLywKKwkJCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRF
MjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLywKKwkJCQlGRjgxRkYyNzI1ODE5MTk3
MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmggKi8sCisJCQkJRkY4MUZGNEIyNTgx
OTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovLAorCQkJCUZGODFGRjU4MjU4MTkxOTcwMDg5
NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZG
NDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8s
CisJCQkJRkY4MUZGNDMyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJE
ZWNscy5oICovLAorCQkJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovLAorCQkJCUZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuaCAqLywKKwkJCQlGRjgxRkYzNjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3Mu
Y3BwICovLAorCQkJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5o
ICovLAorCQkJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNw
cCAqLywKKwkJCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBpcGVsaW5lcy5o
ICovLAorCQkJCUZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuY3BwICovLAorCQkJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLywKKwkJCQlGRjgxRkY1NTI1ODE5MTk3MDA4
OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQlGRjgxRkYz
OTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8sCisJ
CQkJRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjJDMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZGMzUyNTgxOTE5NzAw
ODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMzAyNTgxOTE5NzAw
ODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8sCisJCQkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0
IC8qIFN5bWJvbEVudi5oICovLAorCQkJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuY3BwICovLAorCQkJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuaCAqLywKKwkJCQlGRjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uY3BwICovLAorCQkJCUZGODFGRjUzMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMzYxMSw2ICs0MDQ1LDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCUEzQzQ5QzE1MjU1REY4NjUwMDVFOERGNyAvKiBBZGRBbmRUcnVl
VG9Mb29wQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5NzIyODI2QjlGMDBC
NUJBMkMgLyogQWRkRGVmYXVsdFJldHVyblN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjhFMjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjQyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDdBMTIzMDYyNUM2MDAyREE5NzIgLyogYW5kcm9p
ZF91dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc5OTIzMDYwMjUzMDAyREE5NzIgLyog
YW5nbGVfZ2wuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxOCw2ICs0MDUzLDggQEAKIAkJCQk1Q0M3
RDQ2QjE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2OEEyMjgyNkI5RjAwQjVCQTJDIC8qIEFycmF5UmV0dXJuVmFsdWVU
b091dFBhcmFtZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUMyNTgxQTNDMjAwODk0
RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODEyNTgxOTE5ODAwODk0
RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzIzMUIwNDM3NUYw
MDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREQ2
MUIwNDM4RDMwMDIzNTU1MiAvKiBBdHRyaWJ1dGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzYzMSw2ICs0MDY4LDcgQEAKIAkJCQk1QzFEQkREOTFCMDQzOEQzMDAyMzU1NTIgLyogQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDExOTFERTM5RjFBMDBEMkM0MDUgLyogQnVmZmVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERCMURFNDE2NDgwMEQyQzQwNSAvKiBCdWZm
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFQjI1ODE4RDY5MDA4OTRFMjQgLyog
QnVmZmVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzI5
MUIwNDM3NUYwMDIzNTU1MiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCRDdEMUZDRTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvckhMU0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzY0MywxMyArNDA4MSwxNyBAQAogCQkJ
CTMxNUVCRDlBMUZDRTQ0MzYwMEFDN0E4OSAvKiBDb2xsZWN0VmFyaWFibGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE4RTFEQkZFQTEwMDA2MDY2QjggLyogQ29sb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRUZCMjU4MThENjkwMDg5NEUyNCAvKiBjb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCREREMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJDMkMxQjA0Mzc1RjAwMjM1NTUyIC8qIENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDExQjFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGlsZXJHTC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REMxREU0MTY0ODAwRDJDNDA1IC8qIENvbXBpbGVySW1w
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMDQyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBp
bGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUJGMzI1NURGNjk3MDA1RThERjcgLyog
Y29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREUw
MUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg4
MjU4MTkxOTgwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFMTFCMDQzOEQzMDAyMzU1NTIgLyogQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVGQTI1ODE4RDY5MDA4OTRFMjQgLyogY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJERTMxQjA0MzhEMzAwMjM1NTUyIC8qIENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUEzMDMwNzI3MjMwNUY3QzQwMDJEQTk3MiAvKiBDb250ZXh0LmlubC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjU3LDkgKzQwOTksMTIgQEAKIAkJCQkzMTNCQ0U1RjIzNjExMzNB
MDBGQzM5RTUgLyogQ29udGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFEMURF
MzlGMUEwMEQyQzQwNSAvKiBDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERF
MURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQ0Q1OThFMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1hZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQ0Q4MTczMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDNTVENzM0MjI4Mjc0REUwMEI1QkEyQyAvKiBEZWNsYXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY1RTIyODI2QjlGMDBCNUJBMkMgLyogRGVjbGFyZUFuZEluaXRCdWlsdGlu
c0Zvckluc3RhbmNlZE11bHRpdmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODkyMjgy
NkI5RjAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM2NzIsNiArNDExNyw4IEBACiAJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNUMyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2NDI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292
ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
QkMxRkNFNDRCRjAwQUM3QTg5IC8qIERpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzFEQkRFOTFCMDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTNDNDlDMUUyNTVERjg4RTAwNUU4REY3IC8qIERpc3BsYXlBcHBsZV9hcGku
aCBpbiBIZWFkZXJzICovLApAQCAtMzY3OSw2ICs0MTI2LDggQEAKIAkJCQkzMTNCQ0U1NDIzNjEx
MzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFG
MURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEUyMURFNDE2NDgwMEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZFREEyNTgxOEQ2OTAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZGODFGRUQyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzkxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkVCMDFDMUQyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21l
bnRUZXN0c09wdGltaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NTgyNDkxQzg0
NTAwOTgyODc4IC8qIGVnbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg5LDYgKzQxMzgsNyBAQAog
CQkJCUEzQzQ5QkY5MjU1REY2RTUwMDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTY3MjI4NEY3OTYwMDE4RjJEOCAvKiBFR0xTeW5jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBM0M0OUJGQTI1NURGNkU1MDA1RThERjcgLyogRUdMU3luY0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjhDMjU4MTkxOTgwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjZBMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRl
R0xGcmFnQ29sb3JCcm9hZGNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY3MjMwNUY1
RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hhZGVyQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDNTVENkEzMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRlUHJlY2lzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3MDEsNiArNDE1MSw3IEBACiAJCQkJQTMwQjU4MkIyMzhERjgy
NjAwNzlGRERDIC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMl9hdXRvZ2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMURCNzk2QzI0OTFDOEY1MDA5ODI4NzggLyogZW50cnlfcG9pbnRzX2dsZXNfZXh0
X2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzI1MjMwNUY3QzQwMDJEQTk3MiAv
KiBlbnRyeV9wb2ludHNfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYyMjU4MTkx
OTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFQjFCMDQzOEQzMDAyMzU1NTIgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREU5MUZDRTQ1MkQwMEFDN0E4OSAvKiBFcnJvclN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzcyMiw2ICs0MTczLDcgQEAKIAkJCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEg
LyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkE0MjI4MjZC
OUYwMEI1QkEyQyAvKiBGb2xkRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEU4MURFNDE2NDgwMEQyQzQwNSAvKiBGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxREJERjIxQjA0MzhEMzAwMjM1NTUyIC8qIGZvcm1hdHV0aWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0IzMDEyNjFERTM5RjFBMDBEMkM0MDUgLyogZm9ybWF0dXRpbHNnbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkUzM0U4RUUyNEQwRDIwOTAwMjMwOUFDIC8qIGZyYW1lX2NhcHR1cmVf
dXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzczMSw2ICs0MTgzLDcgQEAKIAkJCQk1Q0IzMDEy
ODFERTM5RjFBMDBEMkM0MDUgLyogRnJhbWVidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNCMzA0RUIxREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RUExREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbF9tb2Nr
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRFMjQgLyogRnJhbWVC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkU5MjI4MjZDNzkwMEI1QkEyQyAv
KiBGdW5jdGlvbkxvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDAyNTVERjcxMTAw
NUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDUyNTVE
RjczNTAwNUU4REY3IC8qIEZ1bmN0aW9uc0VBR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzc2MCw2
ICs0MjEzLDggQEAKIAkJCQk1QzU1RDcyQzIyODI3NDc3MDBCNUJBMkMgLyogaGFzaF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERkExQjA0MzhEMzAwMjM1NTUyIC8qIGhpc3Rv
Z3JhbV9tYWNyb3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg2MjU4MTkxOTgwMDg5NEUy
NCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzIyNTgxOTE5
ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE3NzFEQkZFOTk5
MDA2MDY2QjggLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTkzMjI4NEZDNDAw
MDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRDk2MUZD
RTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0aW9uSExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NzgwLDExICs0MjM1LDE0IEBACiAJCQkJNUMxREJDMzExQjA0Mzc1RjAwMjM1NTUyIC8qIEludGVy
bU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkZFMjI4MjZDQjMwMEI1QkEyQyAvKiBJ
bnRlcm1Ob2RlX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzA4MjI4MjZDQjMwMEI1
QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjlFMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwMTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTc3MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNl
Q0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NTIzNjExMzNBMDBGQzM5RTUgLyogSU9T
dXJmYWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY0MjU4MThENjkw
MDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVF
QkQ4RTFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxREI3OTY2MjQ5MUM4ODIwMDk4Mjg3OCAvKiBraHJwbGF0Zm9ybS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJDMzIxQjA0Mzc1RjAwMjM1NTUyIC8qIGxlbmd0aF9saW1pdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjAxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVu
Y3Rpb25zX3RhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTIsNiArNDI1MCw4IEBACiAJCQkJ
MzE1RUJERjExRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjZFMjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3NTI1ODE5MTk4MDA4OTRF
MjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE5MDFEQkZFQTEw
MDA2MDY2QjggLyogbWF0cml4X3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGMjFC
MDQzNkVDMDAyMzU1NTIgLyogTWVtb3J5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTks
OSArNDI1OSwyNCBAQAogCQkJCUEzMDMwNzhDMjMwNUY4RjAwMDJEQTk3MiAvKiBNZW1vcnlPYmpl
Y3RHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5ODIyMjg0RkI5MDAwMThGMkQ4IC8qIE1l
bW9yeU9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVEMUZDRTQ1MkQwMEFD
N0E4OSAvKiBNZW1vcnlQcm9ncmFtQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkw
MjU4MTkxOTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjA4MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUVBMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Nv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREQyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9mb3JtYXRfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUU0MjU4MThENjkw
MDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRUQwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlf
cG9vbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMEQyNTgxOEQ2QTAwODk0RTI0IC8qIG10
bF9yZW5kZXJfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVGMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRTI1ODE4
RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkYwOTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjkyMjgyNkI5RjAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcwQjIzMDVGNkI1MDAyREE5NzIgLyogbm9fZGVzdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MDcyMjgyNkNCMzAwQjVCQTJDIC8qIE5vZGVT
ZWFyY2guaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBO
b2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEQzIxRkNFNDRCRjAwQUM3QTg5IC8q
IG51bGxfZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2
RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTY2MjI4NEY3
OTYwMDE4RjJEOCAvKiBPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODIxLDYgKzQyOTYs
NyBAQAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQjMwMTUxMURFMzlGNDcwMEQyQzQwNSAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNUQyMzYxMTMzQTAwRkMzOUU1IC8qIFBi
dWZmZXJTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODMyNTgxOTE5ODAw
ODk0RTI0IC8qIFBpcGVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNTFCMDQzNkVD
MDAyMzU1NTIgLyogcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRTI5MUZDRjgw
OEMwMEFDN0E4OSAvKiBQTXVySGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjcyMjgy
NzQ3NzAwQjVCQTJDIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODM0LDkgKzQz
MTAsMTEgQEAKIAkJCQk1Q0IzMDRGMzFERTQxNjQ4MDBEMkM0MDUgLyogUHJvZ3JhbUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQjMwNEYyMURFNDE2NDgwMEQyQzQwNSAvKiBQcm9ncmFtSW1w
bF9tb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRFNjFGQ0U0NTJEMDBBQzdBODkgLyog
UHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDEyNTgx
OEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVF
MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxNUVCREJCMUZDRTQ0QkYwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmVHTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzgxRkNFNDRFNDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZUlt
cGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9n
cmFtUHJlbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NzcyMjgyNkI5RjAwQjVCQTJD
IC8qIFBydW5lRW1wdHlDYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTUyMjgyNkI5
RjAwQjVCQTJDIC8qIFBydW5lTm9PcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MUI2MURC
RkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQ0
LDEwICs0MzIyLDEzIEBACiAJCQkJNUMxREJFMDQxQjA0MzhEMzAwMjM1NTUyIC8qIHF1ZXJ5Y29u
dmVyc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTMyMURFMzlGMUEwMEQyQzQwNSAv
KiBRdWVyeUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGNDFERTQxNjQ4MDBEMkM0MDUg
LyogUXVlcnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVENDI1ODE4RDY5MDA4OTRF
MjQgLyogUXVlcnlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTdEMURCRkU5OTkwMDYw
NjZCOCAvKiBxdWVyeXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3QzIyODI2QjlG
MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzQzQ5QzEzMjU1REY4NjUwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRl
ZFRvU3RydWN0dXJlZEJ1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYxMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMURCRTA2MUIwNDM4RDMwMDIzNTU1MiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2NUMyMjgyNkI5RjAwQjVCQTJDIC8qIFJlZ2VuZXJhdGVTdHJ1Y3RO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUEyMjgyNkI5RjAwQjVCQTJDIC8qIFJl
bW92ZUFycmF5TGVuZ3RoTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUQ3QkRGMTI0MzJD
Q0M0MDBFMDE1MDMgLyogUmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKQEAgLTM4NjEsMTEgKzQzNDIsMTMgQEAKIAkJCQk1Q0IzMDEzNDFERTM5RjFBMDBEMkM0MDUg
LyogUmVuZGVyYnVmZmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY2MURFNDE2NDgw
MEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRG
NTFERTQxNjQ4MDBEMkM0MDUgLyogUmVuZGVyYnVmZmVySW1wbF9tb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRjgxRkVERTI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGODFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRp
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTdDMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5k
ZXJlckNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8q
IFJlbmRlcmVyRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzgxREUzOUYxQTAwRDJD
NDA1IC8qIFJlbmRlcmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM2MURFMzlGMUEw
MEQyQzQwNSAvKiByZW5kZXJlcmdsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
MjI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMxQTI1NURGODZGMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMyMjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFj
ZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcwNzIzMDVG
NjM2MDAyREE5NzIgLyogUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zODc2LDE2ICs0MzU5LDIyIEBACiAJCQkJMzE1RUJERjkxRkNFNDUyRDAwQUM3QTg5IC8q
IFJlc291cmNlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZGNjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1
NzIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0aW9uRXhwcmVzc2lvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlQ2Fz
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjkyMzA1RjVFRTAwMkRB
OTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEzMDMwNkY4MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlRGZkeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2NEUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVEb1doaWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzU1RDY5MTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUVsc2VC
bG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjlFMjI4MjZCOUYwMEI1QkEyQyAvKiBS
ZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVyU3RvcmFnZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxNDI1NURGODY1MDA1RThERjcgLyogUmV3
cml0ZUludGVycG9sYXRlQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjZCMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODQyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjY4MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0
ZWRBc3NpZ25Ub1N3aXp6bGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkxNTIzQ0ZDQjc3
MDAzNzU2NTcgLyogUmV3cml0ZVJvd01ham9yTWF0cmljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDNTVENjRGMjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjg3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlVGV4ZWxG
ZXRjaE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzkyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2ODQyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3Jp
dGVVbmFyeU1pbnVzT3BlcmF0b3JJbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzBBMjI4
MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4OTYsMTIgKzQzODUsMTUgQEAKIAkJCQk1QzFEQkYyODFCMDQzOEQzMDAyMzU1NTIgLyogU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxM0ExREUzOUYxQTAwRDJDNDA1IC8qIFNh
bXBsZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjkxREU0MTY0ODAwRDJDNDA1IC8q
IFNhbXBsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEOTI1ODE4RDY5MDA4OTRF
MjQgLyogU2FtcGxlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OEUyMjgyNkI5RjAw
QjVCQTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTMwMzA3MjkyMzA1RjdDNDAwMkRBOTcyIC8qIFNlbWFwaG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTMwMzA3OEQyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcyQjIzMDVGODAwMDAyREE5NzIgLyogU2VtYXBob3JlSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2N0QyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFy
YXRlQXJyYXlDb25zdHJ1Y3RvclN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk2MjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjczMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY2MjU4MTkxOTcwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY3MDIyODI2QjlGMDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjRDMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkw
MzIzQ0ZDNUEzMDAzNzU2NTcgLyogc2VyaWFsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5
MTAsMTQgKzQ0MDIsMTcgQEAKIAkJCQk1Q0IzMDEzQzFERTM5RjFBMDBEMkM0MDUgLyogU2hhZGVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEZBMURFNDE2NDgwMEQyQzQwNSAvKiBTaGFk
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2NDI0OTFDODc2MDA5ODI4NzggLyog
U2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMTEyNTgxOEQ2QTAwODk0RTI0
IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjUyNDkxQzg3NjAwOTgy
ODc4IC8qIFNoYWRlclZhcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjYxMjI4MjZCOUYw
MEI1QkEyQyAvKiBTaW1wbGlmeUxvb3BDb25kaXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTVFQkRGMDFGQ0U0NTJEMDBBQzdBODkgLyogU2l6ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGNkYyNTgxOTE5ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBM0M0OUMwMzI1NURGNzE5MDA1RThERjcgLyogU29mdExpbmtpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMwMTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUIyMjgyNkI5RjAwQjVCQTJDIC8q
IFNwbGl0U2VxdWVuY2VPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJGMkMxQjA0
MzhEMzAwMjM1NTUyIC8qIFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzRTFERTM5
RjFBMDBEMkM0MDUgLyogU3RhdGVNYW5hZ2VyR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RjFEMjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0NEODE4MTFEQkZFOTk5MDA2MDY2QjggLyogU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDRGQjFERTQxNjQ4MDBEMkM0MDUgLyogU3RyZWFtUHJvZHVjZXJJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE5MjFEQkZFQTEwMDA2MDY2QjggLyogc3RyaW5nX3V0aWxzLmggaW4g
SGVhZGVycyAqLywKQEAgLTM5MjUsMTIgKzQ0MjAsMTUgQEAKIAkJCQk1QzFEQkYyRjFCMDQzOEQz
MDAyMzU1NTIgLyogU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDAxREUzOUYx
QTAwRDJDNDA1IC8qIFN1cmZhY2VHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkQxREU0
MTY0ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
NzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2RTYyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGN0UyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwRDIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEODUxRkNFNDQzNjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1
ZUlkLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRCOTFGQ0U0NEJGMDBBQzdBODkgLyogU3lu
Y0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDQjFGQ0U0NEU0MDBBQzdBODkgLyogU3lu
Y0ltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURCMjU4MThENjkwMDg5NEUyNCAvKiBT
eW5jTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEzMzFDNzFFQTVFRDVGMDBGRDIyMDMgLyog
c3lzdGVtX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk5QzIyODRGQzc1MDAxOEYy
RDggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFCMTU3MjIyMzZCODAzMzAw
Q0FBNEZEIC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzOSwx
OCArNDQzNywyMyBAQAogCQkJCTVDQjMwMTQyMURFMzlGMUEwMEQyQzQwNSAvKiBUZXh0dXJlR0wu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAwMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJl
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkUxREU0MTY0ODAwRDJDNDA1IC8qIFRl
eHR1cmVJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY2MjU4MThENjkwMDg5
NEUyNCAvKiBUZXh0dXJlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRGNDFGQ0U0NTJE
MDBBQzdBODkgLyogVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNzFCMDQzNkVD
MDAyMzU1NTIgLyogdGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkxMjU4MTkxOTgw
MDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzIw
MjMwNUY3QzQwMDJEQTk3MiAvKiB0cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMzMxRTIx
RUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFE
QkYzNDFCMDQzOEQzMDAyMzU1NTIgLyogVHJhbnNmb3JtRmVlZGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwMTQ0MURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMjFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3Jt
RmVlZGJhY2tJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMTFERTQxNjQ4MDBEMkM0
MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRURGMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2RDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFCMjU4MTkwQ0EwMDg5NEUyNCAvKiBU
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFGMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJEOUQxRkNFNDQzNjAwQUM3QTg5IC8qIFRyYW5zbGF0b3JWdWxrYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2ODYyMjgyNkI5RjAwQjVCQTJDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDEwLDExICs0NTEzLDEzIEBACiAJCQkJNUMxREJGNDAx
QjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0Iz
MDE0NjFERTM5RjFBMDBEMkM0MDUgLyogVmVydGV4QXJyYXlHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzA1MDMxREU0MTY0ODAwRDJDNDA1IC8qIFZlcnRleEFycmF5SW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5TXRsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkY0MjFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0
cmlidXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwMDIyODI2Q0IzMDBCNUJBMkMgLyog
VmlzaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMUI2MTgzMjMwQjc0N0YwMDE2MTBENyAvKiBX
aW5kb3dTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RTIzNjExMzNBMDBG
QzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREZB
MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2NzUyMjgyNkI5RjAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTUxMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2gu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTQxMzcsMTQgKzQ2NDIsMTcgQEAKIAkJCWZpbGVz
ID0gKAogCQkJCUEzQzQ5QzBFMjU1REY4NUYwMDVFOERGNyAvKiBBZGRBbmRUcnVlVG9Mb29wQ29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkE5MjI4MjZCQzgwMEI1QkEyQyAv
KiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkY3NDI1ODE5MTk4MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ3MjEyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwN0EwMjMwNjI1QzYwMDJEQTk3MiAvKiBhbmRyb2lk
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDMxQjA0MzhEMzAwMjM1NTUyIC8q
IGFuZ2xldHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjAxQjA0MzZFQzAwMjM1
NTUyIC8qIGFuZ2xldXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2
MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZBQTIyODI2QkM4MDBCNUJBMkMgLyogQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc4MjU4MTkxOTgwMDg5NEUyNCAvKiBBc3RI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQzIyMUIwNDM3NUYwMDIzNTU1MiAv
KiBBU1RNZXRhZGF0YUhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDUxQjA0MzhE
MzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMw
MTE2MURFMzlGMUEwMEQyQzQwNSAvKiBCbGl0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5NjEyMjg0Rjc5NjAwMThGMkQ4IC8qIEJsb2JDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzFEQkMyNDFCMDQzNzVGMDAyMzU1NTIgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00MTUzLDYgKzQ2NjEsNyBAQAogCQkJCTVDMURCREQ4MUIwNDM4RDMwMDIzNTU1MiAv
KiBCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMTgxREUzOUYxQTAwRDJDNDA1
IC8qIEJ1ZmZlckdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMzNFOEU4MjREMEQxRUIwMDIz
MDlBQyAvKiBCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUwMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxMzE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxREJDMjgxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkQ4NDFGQ0U0NDM2MDBBQzdBODkg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDE2
MSwxMiArNDY3MCwxNCBAQAogCQkJCTVDMURCRERBMUIwNDM4RDMwMDIzNTU1MiAvKiBDYXBzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFDMjI4MjZCQzgwMEI1QkEyQyAvKiBDbGFtcEZy
YWdEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZBRDIyODI2QkM4MDBCNUJBMkMg
LyogQ2xhbXBQb2ludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGQTIyNTgxQUQw
NDAwODk0RTI0IC8qIGNsZWFyLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkQxRkNF
NDRCRjAwQUM3QTg5IC8qIENsZWFyTXVsdGl2aWV3R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE1RUJEOEMxRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDMURCRERDMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExQTFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGls
ZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyog
Q29tcGlsZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGMjI1NURGNjk3MDA1RThE
RjcgLyogY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuY2MgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRERjFCMDQzOEQzMDAyMzU1NTIgLyogQ29uZmlnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q4MUIwMURCRkVBNUMwMDYwNjZCOCAvKiBDb25zdGFudFVuaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDE3Nyw2ICs0Njg4LDggQEAKIAkJCQkzMTNCQ0U1ODIzNjExMzNBMDBGQzM5RTUg
LyogQ29udGV4dEVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUMxREUzOUYxQTAw
RDJDNDA1IC8qIENvbnRleHRHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERDFERTQx
NjQ4MDBEMkM0MDUgLyogQ29udGV4dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MDYyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4gU291cmNlcyAq
LywKIAkJCQk1Q0NENTk4RjIyODRGQzQwMDAxOEYyRDggLyogY29weWltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQ0Q4MTcyMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MTkyLDYgKzQ3MDUsOCBAQAogCQkJCTMxMDEyRTI4MThCOTdCOUIwMDM5
MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRjYzMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3QjI1ODE5MTk4
MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTVFQkRCRTFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdM
X2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERTgxQjA0MzhEMzAwMjM1NTUy
IC8qIERpc3BsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMUMyNTVERjg4OTAwNUU4
REY3IC8qIERpc3BsYXlBcHBsZV9hcGkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTk5LDEyICs0
NzE0LDE0IEBACiAJCQkJMzEzQkNFNjEyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUUxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRFMTFERTQxNjQ4MDBEMkM0MDUgLyogRGlz
cGxheUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0
IC8qIERpc3BsYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRDQzFGQ0U0NEU0MDBB
QzdBODkgLyogZHJpdmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzlEMjMw
NjI1NjUwMDJEQTk3MiAvKiBkcml2ZXJfdXRpbHNfbWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NkVCMDFDMUUyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21lbnRUZXN0c09wdGltaXphdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGNzI1NURGNkRGMDA1RThERjcgLyogRUdM
UmV1c2FibGVTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZBMjI4NEY3OTYwMDE4
RjJEOCAvKiBFR0xTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY4MjU1REY2RTEw
MDVFOERGNyAvKiBFR0xTeW5jSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RDk3MUZDRTQ0MzYwMEFDN0E4OSAvKiBlbXVsYXRlZF9idWlsdGluX2Z1bmN0aW9uc19obHNsX2F1
dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjEyMjgyNkJDODAwQjVCQTJDIC8q
IEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAz
MDZGQzIzMDVGNUVFMDAyREE5NzIgLyogRW11bGF0ZU11bHRpRHJhd1NoYWRlckJ1aWx0aW5zLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDI0MiwxMSArNDc1OSwxNCBAQAogCQkJCTVDMURCREYzMUIw
NDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFE
QkRGNTFCMDQzOEQzMDAyMzU1NTIgLyogRnJhbWVidWZmZXJBdHRhY2htZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTI3MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjBGMjU4MThENkEwMDg5NEUyNCAvKiBGcmFtZUJ1
ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTZFQTBENjkzMjM1MTVBNUMwMEI4NjUxRiAv
KiBGcmFtZUNhcHR1cmVfbW9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZFNDIyODI2
Qzc5MDBCNUJBMkMgLyogRnVuY3Rpb25Mb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlDMDIyNTVERjcxNDAwNUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0M0OUMwNzI1NURGNzM5MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTJCMURFMzlGMUEwMEQyQzQwNSAvKiBGdW5jdGlvbnNHTC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBNDI1ODFBRDA0MDA4OTRFMjQgLyogZ2VuX2luZGlj
ZXMubWV0YWwgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBMzI1ODFBRDA0MDA4OTRFMjQgLyog
Z2VuX21pcG1hcC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZCMjI4NEY3OTYwMDE4
RjJEOCAvKiBHTEVTMVJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTYzMjI4
NEY3OTYwMDE4RjJEOCAvKiBHTEVTMVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMUJB
QUIxMURGQjZGMzMwMDI5MDZCQiAvKiBnbG9iYWxfc3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MjU0LDYgKzQ3NzQsOCBAQAogCQkJCUEzRDMyOTBCMjNDRkNCNEQwMDM3NTY1NyAvKiBnbHNs
YW5nX3RhYl9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREY4MUIwNDM4RDMw
MDIzNTU1MiAvKiBIYW5kbGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
ODYxRkNFNDQzNjAwQUM3QTg5IC8qIEhhc2hOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY4MjI1ODE5MTk4MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGOEIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q4MTc2MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk5MTIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3JtYXRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNUVCRDgzMUZDRTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0
aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyNzAsMTAgKzQ3OTIsMTMgQEAKIAkJCQk1
QzFEQkMzMDFCMDQzNzVGMDAyMzU1NTIgLyogSW50ZXJtTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QzU1RDcwOTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZV91dGlsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDNTVENzA0MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOUQyNTgxQTNDMjAwODk0
RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDIyMjgy
NkNCMzAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVD
Q0Q1OTc5MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTVDMjM2MTEzM0EwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNl
RUFHTC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUVEMjU4MThENjkwMDg5NEUyNCAvKiBJ
T1N1cmZhY2VTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEOUMxRkNFNDQz
NjAwQUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjZDMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEVGMURFNDE2NDgwMEQyQzQwNSAvKiBsb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTk1MjI4NEZDNDAwMDE4RjJEOCAvKiBs
b2FkaW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjgxLDEyICs0ODA2LDI3IEBACiAJCQkJ
MzE1RUJERTgxRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QjgxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEJBMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5j
dGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjY5MjU4MTkx
OTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDcy
MTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDcyNTIyODI3NDc3MDBCNUJBMkMgLyogbWF0cml4X3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDMURCQkYxMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NjQyMjg0Rjc5NjAwMThGMkQ4IC8qIE1lbW9yeU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDc4QjIzMDVGOEYwMDAyREE5NzIgLyogTWVtb3J5T2Jq
ZWN0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERjMxRkNFNDUyRDAwQUM3QTg5IC8q
IE1lbW9yeVByb2dyYW1DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2MDI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEMyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9jb21tb24u
bW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFMTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zv
cm1hdF90YWJsZV9hdXRvZ2VuLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRDUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkY4MUZGMDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYyMjU4MThENjkwMDg5NEUyNCAv
KiBtdGxfcmVuZGVyX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVG
MDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkY4MUZFRUMyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGlscy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkI2MjI4MjZCQzgwMEI1QkEyQyAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRCRjFGQ0U0NEJGMDBBQzdBODkgLyog
bnVsbF9mdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5NjkyMjg0Rjc5NjAw
MThGMkQ4IC8qIE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDMwNiw2ICs0ODQ2LDcg
QEAKIAkJCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDQ0Q1OTZGMjI4NEY5NTUwMDE4RjJEOCAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTNCQ0U1NjIzNjExMzNBMDBGQzM5RTUgLyog
UGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjcxMjU4MTkx
OTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRGRTFC
MDQzOEQzMDAyMzU1NTIgLyogUGxhdGZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJF
MjgxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MzE4LDkgKzQ4NTksMTEgQEAKIAkJCQk2RUQ3QkRGNjI0MzJDRDYyMDBFMDE1MDMgLyogUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkYxREUzOUYxQTAw
RDJDNDA1IC8qIFByb2dyYW1HTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFQzFGQ0U0
NTJEMDBBQzdBODkgLyogUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNUVCREU1MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkExRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1Q
aXBlbGluZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQjAxQzI0MjQ3NzI3QzIwMEU1MEIz
NSAvKiBQcm9ncmFtUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDZCNzIyODI2QkM4MDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkI4MjI4MjZCQzgwMEI1QkEyQyAvKiBQcnVuZU5vT3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQ0Q4MUI1MURCRkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJU
eXBlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMjgsOSArNDg3MSwxMSBAQAogCQkJCTVDMURC
RTAzMUIwNDM4RDMwMDIzNTU1MiAvKiBxdWVyeWNvbnZlcnNpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDQjMwMTMxMURFMzlGMUEwMEQyQzQwNSAvKiBRdWVyeUdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgwMjI4NEZCOTAwMDE4RjJEOCAvKiBRdWVyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFREMyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxN0MxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjkyMjgyNkJDODAwQjVCQTJDIC8qIFJlY29y
ZENvbnN0YW50UHJlY2lzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzBDMjU1REY4
NUYwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRlZFRvU3RydWN0dXJlZEJ1
ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0IC8q
IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCQTIy
ODI2QkM4MDBCNUJBMkMgLyogUmVnZW5lcmF0ZVN0cnVjdE5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkJCMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVBcnJheUxlbmd0aE1ldGhv
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUQ3QkRGMDI0MzJDQ0M0MDBFMDE1MDMgLyogUmVt
b3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM0MiwxMSAr
NDg4NywxMyBAQAogCQkJCTVDNTVENkMwMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVVbnJlZmVy
ZW5jZWRWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJFMDcxQjA0MzhEMzAw
MjM1NTUyIC8qIFJlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzMzFE
RTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwNEY3MURFNDE2NDgwMEQyQzQwNSAvKiByZW5kZXJlcl91dGlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk3QTIyODRGQTgzMDAxOEYyRDggLyogUmVuZGVyZXJD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNTkyMzYxMTMzQTAwRkMzOUU1IC8qIFJl
bmRlcmVyRUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNzFERTM5RjFBMDBEMkM0
MDUgLyogUmVuZGVyZXJHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNTFERTM5RjFB
MDBEMkM0MDUgLyogcmVuZGVyZXJnbF91dGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkVFODI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTNDNDlDMTkyNTVERjg2QzAwNUU4REY3IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFy
eWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUIwMUMyMTI0NzcyN0E5MDBFNTBCMzUgLyog
UmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMw
NzA1MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDM1NCwyNyArNDkwMSwzNiBAQAogCQkJCTVDMURCRjI1MUIwNDM4RDMw
MDIzNTU1MiAvKiBSZXNvdXJjZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2
RkIyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVBdG9taWNDb3VudGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDMTIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0
aW9uRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTIyNTgxOTE5ODAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEzMDMwNkZEMjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFy
cmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNkZBMjMwNUY1RUUwMDJEQTk3MiAvKiBS
ZXdyaXRlRGZkeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMjIyODI2QkM4MDBCNUJB
MkMgLyogUmV3cml0ZURvV2hpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzMyMjgy
NkJDODAwQjVCQTJDIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM0MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVy
U3RvcmFnZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjdGMjU4MTkxOTgwMDg5
NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTNDNDlDMEQyNTVERjg1RjAwNUU4REY3IC8qIFJld3JpdGVJbnRlcnBvbGF0ZUF0T2Zmc2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdy
aXRlS2V5d29yZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzAyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc2MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM1MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0ZWRBc3NpZ25Ub1N3aXp6
bGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzRDMyOTE0MjNDRkNCNzcwMDM3NTY1NyAvKiBS
ZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDNjIy
ODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVN0cnVjdFNhbXBsZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQ0QwMENDMjQ5MTk2QTUwMDQ4NkYyNyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnNP
bGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzcyMjgyNkJDODAwQjVCQTJDIC8qIFJl
d3JpdGVUZXhlbEZldGNoT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjgwMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzgyMjgyNkJDODAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1p
bnVzT3BlcmF0b3JGbG9hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDOTIyODI2QkM4
MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZGQzIyODI2Q0IzMDBCNUJBMkMgLyogUnVuQXRUaGVFbmRPZlNoYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYyNzFCMDQzOEQzMDAyMzU1NTIgLyogU2FtcGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzOTFERTM5RjFBMDBEMkM0MDUgLyogU2Ft
cGxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUY3MjU4MThENjkwMDg5NEUyNCAv
KiBTYW1wbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0EyMjgyNkJDODAwQjVC
QTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMzAzMDcyODIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBob3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEzMDMwNzhBMjMwNUY4RjAwMDJEQTk3MiAvKiBTZW1hcGhvcmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQjIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVB
cnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZD
QzIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVBcnJheUluaXRpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRjhGMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUYyNTgxOTE5NzAw
ODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0QyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRGVjbGFyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNFMjI4MjZCQzgwMEI1QkEyQyAvKiBT
ZXBhcmF0ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q1OTg0MjI4NEZCRTcwMDE4RjJEOCAvKiBzaGExLmNjIGluIFNvdXJjZXMgKi8sCkBAIC00
MzgyLDYgKzQ5MzgsNyBAQAogCQkJCTVDQjMwMTNCMURFMzlGMUEwMEQyQzQwNSAvKiBTaGFkZXJH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk4MTIyODRGQjkwMDAxOEYyRDggLyogU2hh
ZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxMjI1ODE4RDZBMDA4
OTRFMjQgLyogU2hhZGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDExQjA0Mzc1
RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0Yy
MjgyNkJDODAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUM1NUQ2RDAyMjgyNkJDODAwQjVCQTJDIC8qIFNwbGl0U2VxdWVuY2VPcGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzOTMsMTEgKzQ5NTAsMTQgQEAKIAkJCQk1QzFEQkYy
RTFCMDQzOEQzMDAyMzU1NTIgLyogU3VyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDEzRjFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEZDMURFNDE2NDgwMEQyQzQwNSAvKiBTdXJmYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkVFMzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkUzMjI4MjZDNzkwMEI1QkEyQyAvKiBTeW1ib2wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkEyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MEUyMjgyNzQxNDAwQjVCQTJDIC8qIFN5
bWJvbFRhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQUUxRkNFNDQz
NjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1ZUlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
REMwMUZDRTQ0QkYwMEFDN0E4OSAvKiBTeW5jR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4
MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
M0M0OUMyMTI1NURGOTczMDA1RThERjcgLyogc3lzdGVtX3V0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQTMzMUM2MUVBNUVENUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHNfbWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzMwMjI4Mjc0NzcwMEI1QkEyQyAvKiBzeXN0ZW1fdXRp
bHNfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDA5LDEzICs0OTY5LDE4IEBACiAJCQkJ
MzE1RUJEOTkxRkNFNDQzNjAwQUM3QTg5IC8qIFRleHR1cmVGdW5jdGlvbkhMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNCMzAxNDExREUzOUYxQTAwRDJDNDA1IC8qIFRleHR1cmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRGRjFERTQxNjQ4MDBEMkM0MDUgLyogVGV4dHVyZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRjUyNTgxOEQ2OTAwODk0RTI0IC8qIFRl
eHR1cmVNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMjFGQ0U0NTJEMDBBQzdBODkg
LyogVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQkY2MUIwNDM2RUMwMDIzNTU1
MiAvKiB0bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjZEMjU4MTkxOTgwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJGMzMxQjA0
MzhEMzAwMjM1NTUyIC8qIFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwMTQzMURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRUYzMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2QzE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MUMyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRp
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJENzgxRkNFNDQzNjAwQUM3QTg5IC8qIFRy
YW5zbGF0b3JWdWxrYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDQxQjA0Mzc1RjAw
MjM1NTUyIC8qIFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQxMjI4MjZCQzgw
MEI1QkEyQyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NDY2LDEwICs1MDMxLDEzIEBACiAJCQkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjNGMUIwNDM4RDMwMDIzNTU1MiAv
KiBWZXJ0ZXhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDE0NTFERTM5RjFBMDBE
MkM0MDUgLyogVmVydGV4QXJyYXlHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFOTI1
ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkY0MTFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRkEwMjU4MUFEMDQwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTMxQjYxODQyMzBCNzQ3RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZh
Y2VDR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUIxNTcyMzIzNkI4MkJCMDBDQUE0RkQgLyog
V2luZG93U3VyZmFjZUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFNzFGQ0U0NTJE
MDBBQzdBODkgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg3
MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZENTIyODI2QkM4MDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk1MDIyODRFQ0QxMDAxOEYyRDggLyogeHhoYXNoLmMg
aW4gU291cmNlcyAqLywKIAkJCSk7CkBAIC00NTUyLDYgKzUxMjAsMTcgQEAKIAkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAzMUNE
RkRFRjI0OTE3Rjg5MDA0ODZGMjcgLyogQU5HTEUtc3RhdGljLnhjY29uZmlnICovOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiJChERUJVR19ERUZJTkVTKSIsCisJCQkJCUxJQkdMRVNWMl9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJTElCQU5HTEVfSU1QTEVNRU5UQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9PUEVOR0wsCisJ
CQkJCUFOR0xFX0VOQUJMRV9HTFNMLAorCQkJCQlBTkdMRV9FTkFCTEVfRVNTTCwKKwkJCQkJR0xf
U0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJR0xFU19TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJ
CQlBTkdMRV9FTkFCTEVfTUVUQUwsCisJCQkJKTsKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKQEAgLTQ1NzQsNiArNTE1MywxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkw
MDQ4NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RF
RklORVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9J
TVBMRU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5B
QkxFX0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJF
Q0FUSU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJM
RV9NRVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKQEAgLTQ1ODEs
NiArNTE3MSwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4NkYyNyAvKiBBTkdMRS1z
dGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19QUkVQUk9D
RVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKKwkJCQkJTElC
R0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0dMU0wsCisJCQkJCUFO
R0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJCQlHTEVT
X1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9NRVRBTCwKKwkJCQkpOwog
CQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcK
aW5kZXggNmNiYmUxN2JlZjE5YTg1ODVjZGUxYjljNGVjYmIwNjk4NjRlNTFkNC4uYzU0ZDI3M2Ew
MjgyOGExYjZjNWQ3OTg3OTYzMjIxM2UyMGVmZThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29u
ZmlnCkBAIC00LDcgKzQsNyBAQAogUFJPRFVDVF9OQU1FID0gQU5HTEUtc2hhcmVkOwogRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CiAKLUFOR0xFX09USEVSX0xERkxBR1MgPSAtYWxsb3dhYmxlX2Ns
aWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9ydCAtZnJhbWV3
b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBGb3VuZGF0
aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKSAkKEFOR0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CitBTkdMRV9PVEhF
Ul9MREZMQUdTID0gLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZSAtYWxsb3dhYmxlX2NsaWVudCBX
ZWJDb3JlVGVzdFN1cHBvcnQgLWZyYW1ld29yayBRdWFydHpDb3JlIC1mcmFtZXdvcmsgQ29yZUdy
YXBoaWNzIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3
b3JrIE1ldGFsICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKSAkKEFO
R0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9u
ZW9zID0gLWx6OwogQU5HTEVfT1RIRVJfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKEFOR0xF
X09USEVSX0xERkxBR1NfaXBob25lb3MpOwogQU5HTEVfT1RIRVJfTERGTEFHU193YXRjaG9zID0g
JChBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9uZW9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NoYW5n
ZXMuZGlmZgppbmRleCBhODMwMTRhZWM4M2VmZjM5YTJjZmZmYWE0ZmQ3MThjZmRjNDQ0MWIwLi4w
N2FkYjFjYmRmYmQyZTZiNDZkZWMzNDE2ZjMwMDE5NjdjZjg2NTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY2hhbmdlcy5kaWZmCkBAIC0xMCw2ICsxMCwxOTggQEAgaW5kZXggNmQ5MDQwYS4uYzhj
OWI2YyAxMDA2NDQKICAvdG9vbHMvY2xhbmcKICAvdG9vbHMvZmxleC1iaXNvbi9saW51eC9iaXNv
bgogIC90b29scy9mbGV4LWJpc29uL2xpbnV4L2ZsZXgKK2RpZmYgLS1naXQgYS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAoraW5kZXgg
ZTEwZDExMi4uNmY2YTcyYiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmgKKysrKyBiL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK0BAIC03Myw2ICs3Myw5IEBA
IGVudW0gU2hTaGFkZXJPdXRwdXQKKyAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wgdG8g
YmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVkIHRv
IE1ldGFsCisgICAgIC8vIGxhdGVyLgorICAgICBTSF9HTFNMX01FVEFMX09VVFBVVCA9IDB4OEI0
QywKKysKKysgICAgLy8gT3V0cHV0IGZvciBNU0wKKysgICAgU0hfTVNMX01FVEFMX09VVFBVVCA9
IDB4OEI0RCwKKyB9OworIAorIC8vIENvbXBpbGUgb3B0aW9ucy4KK2RpZmYgLS1naXQgYS9pbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRs
LmgKK2luZGV4IGZlNWU4YWIuLjlhMGJlZTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3BsYXRmb3Jt
L0ZlYXR1cmVzTXRsLmgKKysrKyBiL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaAorQEAg
LTI3LDcgKzI3LDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAg
ICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBvdGhl
ciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFN1cHBvcnQgZXhwbGljaXQg
bWVtb3J5IGJhcnJpZXIKKy0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisrICAgIEZlYXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRf
bWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZXhwbGlj
aXQgbWVtb3J5IGJhcnJpZXIiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFNvbWUgcmVuZGVyZXIg
Y2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFwbHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgor
QEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIg
ZGlzcGF0Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OworIAorICAgICAvLyBmcmFnbWVudCBz
dGVuY2lsIG91dHB1dCBzdXBwb3J0CistICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsi
aGFzX3NoYWRlcl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKysgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHN0ZW5jaWwgb3V0cHV0IGZyb20gZnJh
Z21lbnQgc2hhZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJz
fTsKKyAKK0BAIC01OSw2ICs1OSwxMCBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0
QmFzZQorICAgICBGZWF0dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUg
cmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZtZW1iZXJzfTsKKyAKKysgICAg
RmVhdHVyZSBhbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YSA9IHsKKysgICAgICAgICJhbGxvd19p
bmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CisrICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHVzaW5nIGlubGluZSBjb25zdGFudCBk
YXRhIGZvciBzbWFsbCBjbGllbnQgdmVydGV4IGRhdGEiLCAmbWVtYmVyc307CisrCisgICAgIC8v
IE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBhcmUgbm90IHN1cHBy
b3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCisgICAgIC8vIHRoZXkgYXJlIHN1cHByb3Rl
ZDoKKyAgICAgRmVhdHVyZSBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CitA
QCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJ3aGVyZWFzIG90aGVycyBzdWNoIGFzIG1hY09TIGRvbid0IiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKysgICAgRmVhdHVyZSBhbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUg
PSB7CisrICAgICAgICAiYWxsb3dfcnVudGltZV9zYW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAmbWVt
YmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dTYW1wbGVyQ29tcGFyZUdyYWRpZW50ID0gewor
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxl
X2NvbXBhcmUgd2l0aCBncmFkaWVudHMiLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxs
b3dTYW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxlX2NvbXBhcmUgd2l0aCBsb2Qi
LCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFs
bG93X2J1ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgYnVmZmVyIHJlYWQgJiB3cml0ZSBpbiB0aGUgc2FtZSBzaGFkZXIiLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKysKKyAgICAgRmVhdHVyZSBhbGxv
d011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlID0geworICAgICAgICAgImFsbG93X21zYWFfc3Rv
cmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAg
ICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNh
bWUgcGFzcyIsICZtZW1iZXJzfTsKK0BAIC03NSwxNCArOTQsMjcgQEAgc3RydWN0IEZlYXR1cmVz
TXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlwc19wZXJfcGFz
cyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICJUaGUgcmVuZGVy
ZXIgc3VwcG9ydHMgZ2VuZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJl
cnN9OworIAorKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJmb3JjZV9k
MjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5j
aWw4IGZvcm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUg
YnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQnJlYWtpbmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24i
LCAmbWVtYmVyc307CisrCisgICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewor
LSAgICAgICAgImZvcmNlX2J1ZmZlcl9ncHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCistICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBi
dWZmZXIncyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBtZW1vcnkgKHN1Y2gg
YXMgIgorLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9u
IGZvciBidWZmZXJzLiIsCisrICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVh
dHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorKyAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBz
dXBwb3J0IGJvdGggYnVmZmVyJyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBt
ZW1vcnkgKHN1Y2ggYXMgIgorKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9y
eSBhbGxvY2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKy0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9y
Y2VfZDI0czhfYXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcmNlIERlcHRoMjRT
dGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwgJm1lbWJlcnN9OworKyAgICBGZWF0dXJl
IGZvcmNlTm9uQ1NCYXNlTWlwbWFwR2VuZXJhdGlvbiA9IHsKKysgICAgICAgICJmb3JjZV9ub25f
Y3NfbWlwbWFwX2dlbiIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAg
ICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBDb21wdXRlIFNoYWRlciBiYXNlZCBt
aXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgorKyAgICAgICAgImJhc2VkIG1pcG1h
cCBnZW5lcmF0aW9uIG1pZ2h0IGNhdXNlIEdQVSBoYW5nIG9uIHNvbWUgb2xkZXIgaU9TIGRldmlj
ZXMuIiwKKysgICAgICAgICZtZW1iZXJzfTsKKysKKysgICAgRmVhdHVyZSBlbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2sgPSB7CisrICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAiVHVybiB0aGlzIG9uIHRv
IGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBhIDItcGFzcyBWUyBmb3Ig
R0xFUzMuIiwgJm1lbWJlcnN9OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwIGIvc3JjL2NvbW1vbi9Qb29sQWxsb2Mu
Y3BwCitpbmRleCAyN2RkOTMwLi4zYmRjYzMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuY3BwCisrKysgYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5jcHAKK0BAIC0zMzUsNyArMzM1
LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQorIHZvaWQgQWxsb2NhdGlvbjo6Y2hl
Y2tBbGxvY0xpc3QoKSBjb25zdAorIHsKKyAgICAgZm9yIChjb25zdCBBbGxvY2F0aW9uICphbGxv
YyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1QcmV2QWxsb2MpCistICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKKysgICAgICAgIGFsbG9jLT5jaGVja0FsbG9jKCk7CisgfQorIAor
IH0gIC8vIG5hbWVzcGFjZSBhbmdsZQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vUG9vbEFsbG9j
LmggYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCitpbmRleCA2OTI5OTJjLi5jZDI2NmEwIDEwMDY0
NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuaAorKysrIGIvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaAorQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQWxsb2NhdGlvbgorICNlbmRpZgorICAgICB9
CisgCistICAgIHZvaWQgY2hlY2soKSBjb25zdAorKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25z
dAorICAgICB7CisgICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwga0d1YXJkQmxv
Y2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFy
ZCgpLCBrR3VhcmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIGIvc3JjL2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGls
cy5oCitpbmRleCA1NWViYjdhLi44M2FiNTMyIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCisrKysgYi9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxz
LmgKK0BAIC0xNSwyNCArMTUsMzIgQEAKKyAKKyAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1Qgb25s
eSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CisgCisrI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUg
MyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisgLy8gYXZhaWxh
YmxlOgorLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAgICAg
ICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBp
T1MgaU9TVmVyLCAqKQorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0
aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcworIC8v
IGF2YWlsYWJsZToKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFjVmVy
LCBtYWNDYXRhbHlzdFZlcikgXAorICAgICAgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1h
Y0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9D
STogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4g
dmVyaW9ucyBpcworKy8vIGF2YWlsYWJsZToKKysjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJ
TEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorKyAgICAgICAgQGF2YWlsYWJsZSht
YWNDYXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKKyAjZWxzZQorICMgICAg
ZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwg
aU9TVmVyKSBcCisgICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NW
ZXIpCistLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhl
IDIgcGxhdGZvcm1zIChPU1gvQ2F0YWx5c3QpIG1pbiB2ZXJpb25zIGlzCistLy8gYXZhaWxhYmxl
OgorKworICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIsIG1hY0Nh
dGFseXN0VmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgKikKKysjICAgIGRlZmluZSBBTkdM
RV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShp
T1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKyAjZW5kaWYKKyAKKyAvLyBBTkdMRV9BUFBMRV9B
VkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9pT1Mp
IG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKKy0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YSShtYWNWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIs
ICopCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpIFwK
KysgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAq
KQorKworKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JOiBjaGVjayBpZiBhIHBhcnRpY3VsYXIg
aU9TIHZlcnNpb24gaXMgYXZhaWxhYmxlCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCisgCisgI2Vu
ZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvc3JjL2NvbW1vbi9kZWJ1Zy5o
CitpbmRleCBlMDAzN2E0Li4yODE3MGE1IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9kZWJ1Zy5o
CisrKysgYi9zcmMvY29tbW9uL2RlYnVnLmgKK0BAIC0zMTQsOSArMzE0LDE1IEBAIHN0ZDo6b3N0
cmVhbSAmRm10SGV4KHN0ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCisgLy8gQSBtYWNybyBhc3Nl
cnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxv
ZworICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICMgICAgZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAg
ICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9f
RlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklMRV9fIFwKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIjoiIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uKSkKKysg
ICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
ICAgICAgICAgX19idWlsdGluX2RlYnVndHJhcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBpbnQgeCA9IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBj
YWxsIHNpdGUuICovIFwKKysgICAgICAgICAgICAodm9pZCl4OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gd2hp
bGUgKGZhbHNlKQorICNlbHNlCisgIyAgICBkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgQU5HTEVf
RUFUX1NUUkVBTV9QQVJBTUVURVJTIDw8ICEoY29uZGl0aW9uKQorICNlbmRpZiAgLy8gZGVmaW5l
ZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2dsL2NnbC9G
dW5jdGlvbnNDR0wuY3BwIGIvc3JjL2NvbW1vbi9nbC9jZ2wvRnVuY3Rpb25zQ0dMLmNwcAogaW5k
ZXggYjU3ZjQyYi4uM2U1YTM3YSAxMDA2NDQKIC0tLSBhL3NyYy9jb21tb24vZ2wvY2dsL0Z1bmN0
aW9uc0NHTC5jcHAKQEAgLTM0LDIyICsyMjYsMTMyIEBAIGluZGV4IDkxMTI2NTkuLjM5ZGY2ZmUg
MTAwNjQ0CiAgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFNldEN1cnJlbnRD
b250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCiAgU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xT
ZXRWaXJ0dWFsU2NyZWVuLAorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lv
cy5tbSBiL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLmEzNmJlYTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21t
b24vc3lzdGVtX3V0aWxzX2lvcy5tbQorQEAgLTAsMCArMSw1MyBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMTUgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKy8vIHN5c3RlbV91dGlsc19pb3MubW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZp
YyBmdW5jdGlvbnMgZm9yIE9TWAorKworKyNpbmNsdWRlICJzeXN0ZW1fdXRpbHMuaCIKKysKKysj
aW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2Vydmlj
ZXMuaD4KKysjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKysjaW5jbHVkZSA8bWFjaC9tYWNoLmg+
CisrI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisrI2luY2x1ZGUgPGFycmF5PgorKyNpbmNs
dWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0ZDo6c3RyaW5nIEdl
dEV4ZWN1dGFibGVQYXRoKCkKKyt7CisrCisrICAgIE5TU3RyaW5nICpleGVjdXRhYmxlU3RyaW5n
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisrICAgIHN0ZDo6c3Ry
aW5nIHJlc3VsdChbZXhlY3V0YWJsZVN0cmluZyBVVEY4U3RyaW5nXSk7CisrICAgIHJldHVybiBy
ZXN1bHQ7CisrfQorKworK3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKQorK3sK
KysgICAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZVBhdGggPSBHZXRFeGVjdXRhYmxlUGF0aCgpOwor
KyAgICBzaXplX3QgbGFzdFBhdGhTZXBMb2MgICAgICA9IGV4ZWN1dGFibGVQYXRoLmZpbmRfbGFz
dF9vZigiLyIpOworKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsKKyt9
CisrCisrY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCisreworKyAgICBy
ZXR1cm4gImR5bGliIjsKKyt9CisrCisrZG91YmxlIEdldEN1cnJlbnRUaW1lKCkKKyt7CisrICAg
IG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOworKyAgICBtYWNoX3RpbWVi
YXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisrCisrICAgIGRvdWJsZSBzZWNvbmRDb2VmZiA9IHRp
bWViYXNlSW5mby5udW1lciAqIDFlLTkgLyB0aW1lYmFzZUluZm8uZGVub207CisrICAgIHJldHVy
biBzZWNvbmRDb2VmZiAqIG1hY2hfYWJzb2x1dGVfdGltZSgpOworK30KKyt9ICAvLyBuYW1lc3Bh
Y2UgYW5nbGUKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAgYi9zcmMvY29t
bW9uL3V0aWxpdGllcy5jcHAKLWluZGV4IGM5NTNmZjkuLjYzYjNhNTkgMTAwNjQ0CitpbmRleCBj
OTUzZmY5Li5kMDllMjcwIDEwMDY0NAogLS0tIGEvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCiAr
KysgYi9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKLUBAIC02LDYgKzYsMTEgQEAKLSAKLSAvLyB1
dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0
aW5lcy4KK0BAIC00NzEsNiArNDcxLDUwIEBAIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51
bSB0eXBlKQogIAotKy8vIE9sZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2
ZSBvbiB0aGlzIHdhcm5pbmcgaGVyZS4KLSsjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0rI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSsjZW5k
aWYKKyAgICAgcmV0dXJuIDA7CisgfQorKy8qKgorK0RldGVybWluZSB0aGUgbnVtYmVyIG9mIGF0
dHJpYnV0ZSBzbG90cyB1c2VkIGJ5IGEgdmFyaWFibGUgdHlwZQorKyovCisraW50IFZhcmlhYmxl
QXR0cmlidXRlQ291bnQoR0xlbnVtIHR5cGUpCisreworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAg
IHsKKysgICAgICAgIGNhc2UgR0xfTk9ORToKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAg
ICAgIGNhc2UgR0xfQk9PTDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisrICAgICAgICBjYXNl
IEdMX0lOVDoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisrICAgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKysgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorKyAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisrICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKKysgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisrICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF9WRUM0OgorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisrICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKysgICAgICAgICAgICByZXR1cm4gMjsKKysgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorKyAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisrICAgICAgICAgICAgcmV0dXJuIDM7CisrICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKysgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorKyAgICAgICAgICAgIHJldHVybiA0OworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICB9CiArCi0gI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKLSAjaW5jbHVkZSAiR0xFUzMvZ2wzLmgiCi0gI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorKyAgICByZXR1cm4gMDsKKyt9CisgCisgYm9vbCBJ
c1NhbXBsZXJUeXBlKEdMZW51bSB0eXBlKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0
aWxpdGllcy5oIGIvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAoraW5kZXggMGM3ZDgxMS4uYmE2OTNh
MiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysrKyBiL3NyYy9jb21tb24v
dXRpbGl0aWVzLmgKK0BAIC0zNyw2ICszNyw3IEBAIHNpemVfdCBWYXJpYWJsZUludGVybmFsU2l6
ZShHTGVudW0gdHlwZSk7Cisgc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBl
KTsKKyBpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CisgaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOworK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51
bSB0eXBlKTsKKyBib29sIElzU2FtcGxlclR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNTYW1w
bGVyQ3ViZVR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUp
OwogZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcAogaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKIC0tLSBhL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3RhYl9hdXRvZ2VuLmNwcApAQCAtNjIs
MjM4ICszNjQsMjE2ODYgQEAgaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKICAvKiBCaXNv
biBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogIAogICAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUsIDIwMTgtMjAxOSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWJfYXV0b2dlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yl9hdXRvZ2VuLmNwcAotaW5kZXggMTMwYjk4YS4uMzNiODNkYiAxMDA2NDQKLS0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwCi0rKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAotQEAgLTEsNSArMSw3IEBA
Ci0gLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitpbmRleCBhNDQ0NDk5Li5jYWM5ZjQ5IDEwMDY0NAor
LS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitAQCAtMjEsOCArMjEsMTEgQEAKKyAjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9WVUxLQU4KICAKLSsvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lk
YW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisgI2lmZGVmIEFOR0xFX0VOQUJMRV9N
RVRBTAorLSMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwu
aCIKKysjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0LmgiCisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKKysjaWZkZWYgQU5HTEVfRU5B
QkxFX01FVEFMX1NQSVJWCisrIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbC5oIgorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgCisg
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorIAorQEAgLTY0LDExICs2Nywx
NyBAQCBUQ29tcGlsZXIgKkNvbnN0cnVjdENvbXBpbGVyKHNoOjpHTGVudW0gdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0CisgICAgIH0KKyAjZW5kaWYgIC8vIEFOR0xFX0VO
QUJMRV9WVUxLQU4KKyAKKy0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisrI2lmZGVmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAoSXNPdXRwdXRNZXRhbChvdXRwdXQpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRhbCh0eXBlLCBzcGVjKTsKKyAg
ICAgfQorKyNlbmRpZgorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgaWYgKElzT3V0
cHV0TWV0YWxEaXJlY3Qob3V0cHV0KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUcmFu
c2xhdG9yTWV0YWxEaXJlY3QodHlwZSwgc3BlYywgb3V0cHV0KTsKKysgICAgfQorICNlbmRpZiAg
Ly8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICAgIC8vIFVuc3VwcG9ydGVkIGNvbXBpbGVyIG9y
IHVua25vd24gZm9ybWF0LiBSZXR1cm4gbnVsbHB0ciBwZXIgdGhlIHNoOjpDb25zdHJ1Y3RDb21w
aWxlciBBUEkuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAoraW5kZXggODM1YzkwYS4uMWMwOWNk
YSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAorQEAgLTMxLDYgKzMxLDggQEAgc3RydWN0
IFRTb3VyY2VMb2MKKyAgICAgaW50IGxhc3RfbGluZTsKKyB9OworIAorK2NvbnN0ZXhwciBUU291
cmNlTG9jIGtOb1NvdXJjZUxvY3stMSwgLTEsIC0xLCAtMX07CiArCi0gLyogQmlzb24gaW1wbGVt
ZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAvLworIC8vIFB1dCBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMg
c2NoZW1lLgorIC8vCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCitpbmRleCAzNGQ4
ZTEyLi45MzE2ZTJlIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKK0BAIC03
MjIsNyArNzIyLDcgQEAgYm9vbCBUQ29tcGlsZXI6OmNoZWNrQW5kU2ltcGxpZnlBU1QoVEludGVy
bUJsb2NrICpyb290LAorICAgICAgICAgfQorICAgICB9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9h
dXRvZ2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgK
LWluZGV4IDUzMDYwMzIuLjAyNTAzMDAgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKLSsrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiX2F1dG9nZW4uaAotQEAgLTEsNSArMSw3IEBACi0gLyogQSBCaXNvbiBwYXJz
ZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy0gICAgaW50IHNpbXBsaWZ5U2NhbGFy
aXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNfQU5EX01BVF9DT05TVFJV
Q1RPUl9BUkdTKQorKyAgICB1bnNpZ25lZCBpbnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBp
bGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKICAKLSsvKiBBcHBsZSBOb3RlOiBG
b3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgKK2luZGV4IGQwYjI0YmEuLjA0M2RkZDUgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oCitAQCAtMzUsNiArMzUsOSBAQCBjbGFzcyBUUGFyc2VDb250ZXh0
OworICNpZmRlZiBBTkdMRV9FTkFCTEVfSExTTAorIGNsYXNzIFRyYW5zbGF0b3JITFNMOworICNl
bmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKysjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisr
Y2xhc3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01F
VEFMCisgCisgLy8KKyAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNoYWRlciB0
eXBlIGlzIEdMU0wuCitAQCAtNjMsNiArNjYsOSBAQCBjbGFzcyBUU2hIYW5kbGVCYXNlCisgI2lm
ZGVmIEFOR0xFX0VOQUJMRV9ITFNMCisgICAgIHZpcnR1YWwgVHJhbnNsYXRvckhMU0wgKmdldEFz
VHJhbnNsYXRvckhMU0woKSB7IHJldHVybiAwOyB9CisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVf
SExTTAorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgdmlydHVhbCBUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICBwcm90ZWN0ZWQ6Cisg
ICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1
aXJlZCBieSB0aGUgY29tcGlsZXIuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcAoraW5kZXggMDMzNTE3MS4uMTA0YWZmYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db25zdGFudFVuaW9uLmNwcAorQEAgLTY3LDExICs2NywxNSBAQCBib29sIElzVmFsaWRT
aGlmdE9mZnNldChjb25zdCBUQ29uc3RhbnRVbmlvbiAmcmhzKQorIAorIH0gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKyAKKy1UQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKQorLXsKKy0g
ICAgaUNvbnN0ID0gMDsKKy0gICAgdHlwZSAgID0gRWJ0Vm9pZDsKKy19CisrVENvbnN0YW50VW5p
b246OlRDb25zdGFudFVuaW9uKCkgOiBpQ29uc3QoMCksIHR5cGUoRWJ0Vm9pZCkge30KICsKLSAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKytUQ29uc3RhbnRV
bmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkpLCB0eXBlKEVidEludCkge30K
KysKKytUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpIDogdUNv
bnN0KHUpLCB0eXBlKEVidFVJbnQpIHt9CisrCisrVENvbnN0YW50VW5pb246OlRDb25zdGFudFVu
aW9uKGZsb2F0IGYpIDogZkNvbnN0KGYpLCB0eXBlKEVidEZsb2F0KSB7fQorKworK1RDb25zdGFu
dFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0eXBlKEVidEJvb2wp
IHt9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAx
OC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2lu
Zm9fdXRpbC9TeXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3Bw
Ci1pbmRleCBmNzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwv
U3lzdGVtSW5mby5jcHAKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCi1A
QCAtNDcsNiArNDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikK
LSAgICAgICAgICAgICByZXR1cm4gIlZpdmFudGUiOwotICAgICAgICAgY2FzZSBrVmVuZG9ySURf
Vk1XYXJlOgotICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKLSsgICAgICAgIGNhc2Uga1Zl
bmRvcklEX0FwcGxlOgotKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOwotICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2
ZW5kb3IpICsgIikiOworIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QKKyB7
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCitpbmRleCBhNjIzZDY1Li5k
ZjUzODU3IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKK0BAIC0y
MCw2ICsyMCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgorICAgcHVibGljOgorICAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFCisgICAgIFRDb25zdGFudFVuaW9uKCk7CisrICAgIFRDb25z
dGFudFVuaW9uKGludCBpKTsKKysgICAgVENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpOwor
KyAgICBUQ29uc3RhbnRVbmlvbihmbG9hdCBmKTsKKysgICAgVENvbnN0YW50VW5pb24oYm9vbCBi
KTsKKyAKKyAgICAgYm9vbCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50
VW5pb24gJmNvbnN0YW50KTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9JbnRlcm1Ob2RlLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuY3Bw
CitpbmRleCBiYmRmODY2Li41MTM2ZDIwIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW50ZXJtTm9kZS5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bU5vZGUuY3BwCitAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lv
bihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQpCisgVENvbnN0YW50VW5pb24gKlZl
Y3Rvcml6ZShjb25zdCBUQ29uc3RhbnRVbmlvbiAmY29uc3RhbnQsIHNpemVfdCBzaXplKQorIHsK
KyAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcgVENvbnN0YW50VW5pb25bc2l6
ZV07CistICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgIGNvbnN0VW5pb25baV0g
PSBjb25zdGFudDsKKyAKKyAgICAgcmV0dXJuIGNvbnN0VW5pb247CitAQCAtNDE1LDYgKzQxNSwx
NCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJtQmxvY2sgJm5vZGUp
CiAgICAgIH0KLUBAIC0xNjAsNiArMTYyLDExIEBAIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZl
bmRvcklkKQotICAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX1ZpdmFudGU7CiAgfQog
IAotK2Jvb2wgSXNBcHBsZShWZW5kb3JJRCB2ZW5kb3JJZCkKKytUSW50ZXJtQmxvY2s6OlRJbnRl
cm1CbG9jayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCiArewot
KyAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworKyAgICBmb3IgKFRJbnRl
cm1Ob2RlICpzdG10IDogc3RtdHMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZFN0YXRlbWVudChz
dG10KTsKKysgICAgfQogK30KICsKLSBib29sIFBhcnNlQU1EQnJhaG1hRHJpdmVyVmVyc2lvbihj
b25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZlcnNpb24pCisgc2l6ZV90
IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiAgewotICAgICBjb25zdCBzaXpl
X3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rfb2YoIjAxMjM0NTY3ODkiKTsKLWRpZmYgLS1n
aXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmgKLWluZGV4IGFkMTc2OTguLjUwOWExZTkgMTAwNjQ0Ci0tLS0gYS9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm8uaAotQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0IFN5c3RlbUluZm8KLSAgICAgYm9vbCBpc0FN
RFN3aXRjaGFibGUgPSBmYWxzZTsKLSAgICAgLy8gT25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBs
YXB0b3BzLgotICAgICBib29sIGlzTWFjU3dpdGNoYWJsZSA9IGZhbHNlOwotLSAgICAvLyBPbmx5
IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdoZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCi0t
ICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3Vu
ZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1pb3NhcHBvbm1hYwotLSAgICBib29sIGlzaU9T
QXBwT25NYWMgPSBmYWxzZTsKLSsgICAgLy8gT25seSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFj
cyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3QuCi0rICAgIGJvb2wgbmVlZHNFQUdMT25NYWMg
ICA9IGZhbHNlOwotIAotICAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiBBbmRyb2lkCi0gICAgIHN0
ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7Ci1AQCAtOTksNiArOTgsNyBAQCBjb25zdGV4
cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAgID0gMHg4MDg2OwotIGNvbnN0ZXhwciBWZW5k
b3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEwREU7Ci0gY29uc3RleHByIFZlbmRvcklEIGtW
ZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklE
X1ZNV2FyZSAgID0gMHgxNWFkOwotK2NvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUg
ICAgPSAweDEwNkI7Ci0gCi0gLy8gS25vd24gbm9uLVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVy
ZWQpIHZlbmRvciBJRHMKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAg
ID0gMHgxMDAwMTsKLUBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRv
cklEIHZlbmRvcklkKTsKLSBib29sIElzVmVyaVNpbGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOwot
IGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9ySWQpOwotIGJvb2wgSXNWaXZhbnRlKFZlbmRv
cklEIHZlbmRvcklkKTsKLStib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpOworICAgICBy
ZXR1cm4gbVN0YXRlbWVudHMuc2l6ZSgpOworQEAgLTQ0Niw2ICs0NTQsMzcgQEAgYm9vbCBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKm9yaWdp
bmFsLCBUSW50ZXJtTm8KKyAgICAgcmV0dXJuIGZhbHNlOworIH0KICAKLSAvLyBVc2UgYSBoZXVy
aXN0aWMgdG8gYXR0ZW1wdCB0byBmaW5kIHRoZSBHUFUgdXNlZCBmb3IgM0QgZ3JhcGhpY3MuIFNl
dHMgYWN0aXZlR1BVSW5kZXgsCi0gLy8gaXNPcHRpbXVzLCBhbmQgaXNBTURTd2l0Y2hhYmxlLgot
ZGlmZiAtLWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0gYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCi1pbmRleCBjNzc1NmY2Li5hNDlkYzUy
IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotKysr
IGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotQEAgLTE5LDI1ICsxOSw3
IEBAIG5hbWVzcGFjZSBhbmdsZQorK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQorK3sKKysg
ICAgaWYgKGluaXRFeHByKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKAorKyAg
ICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSwgbmV3
IFRJbnRlcm1TeW1ib2wodmFyKSwgaW5pdEV4cHIpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24oc3Rk
Ojppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJsZSAqPiBkZWNsYXJhdG9ycykKKysgICAg
OiBUSW50ZXJtRGVjbGFyYXRpb24oKQorK3sKKysgICAgZm9yIChhdXRvICpkIDogZGVjbGFyYXRv
cnMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wo
ZCkpOworKyAgICB9CisrfQorKworK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpCisr
ICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKKyt7CisrICAgIGZvciAoYXV0byAqZCA6IGRlY2xh
cmF0b3JzKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworKyAgICB9Cisr
fQorKworIHNpemVfdCBUSW50ZXJtRGVjbGFyYXRpb246OmdldENoaWxkQ291bnQoKSBjb25zdAor
IHsKKyAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CitAQCAtNDYzLDkgKzUwMiwxMCBA
QCBib29sIFRJbnRlcm1EZWNsYXJhdGlvbjo6cmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZQogIAotIGJvb2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1J
bmZvICppbmZvKQorIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJ
bnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkK
ICB7Ci0tIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZp
bmVkKEFOR0xFX0NQVV9BUk02NCkKLS0gICAgc3RhdGljIGJvb2wgaXNpT1NBcHBPbk1hYyA9IGZh
bHNlOwotLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0tICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2UsIF57Ci0tICAgICAgaXNpT1NBcHBPbk1hYyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gaXNpT1NBcHBPbk1hY107Ci0tICAgIH0pOwotLQotLSAgICBpZiAoaXNpT1NBcHBP
bk1hYykKLS0gICAgewotLSAgICAgICAgR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci0tICAgICAg
ICBpZiAoaW5mbykKLS0gICAgICAgIHsKLS0gICAgICAgICAgICBpbmZvLT5pc2lPU0FwcE9uTWFj
ID0gdHJ1ZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBpbmZvOwotLSAgICB9Ci0tCi0t
ICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKLS0jICAgIGVsaWYgZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlT
VCkKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkKLSAgICAgcmV0dXJuIEdldFN5c3RlbUluZm9fbWFjKGluZm8p
OwotICMgICAgZWxzZQotICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci1kaWZm
IC0tZ2l0IGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwIGIvc3JjL2dwdV9p
bmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi1pbmRleCAzMjNhZjJjLi5lNTJlY2IzIDEwMDY0
NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi0rKysgYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAKLUBAIC0xOCw4ICsxOCw5IEBAIG5hbWVz
cGFjZSBhbmdsZQotIGJvb2wgR2V0U3lzdGVtSW5mb19pb3MoU3lzdGVtSW5mbyAqaW5mbykKKy0g
ICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGdldFNlcXVlbmNlKCktPnNpemUoKTsgKytpaSkK
KysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGZvciAoYXV0byAqJm5vZGUg
OiBzZXEpCisgICAgIHsKKy0gICAgICAgIFJFUExBQ0VfSUZfSVMoKCpnZXRTZXF1ZW5jZSgpKVtp
aV0sIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworKyAgICAgICAgUkVQTEFD
RV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICAg
fQorICAgICByZXR1cm4gZmFsc2U7CisgfQorQEAgLTQ3MywxMiArNTEzLDEzIEBAIGJvb2wgVElu
dGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxk
Tm9kZVdpdGhNdWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2Vx
dWVuY2UgJnJlcGxhY2VtZW50cykKICB7CistICAgIGZvciAoYXV0byBpdCA9IGdldFNlcXVlbmNl
KCktPmJlZ2luKCk7IGl0IDwgZ2V0U2VxdWVuY2UoKS0+ZW5kKCk7ICsraXQpCisrICAgIGF1dG8g
JnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworKyAgICBmb3IgKGF1dG8gaXQgPSBzZXEuYmVnaW4oKTsg
aXQgPCBzZXEuZW5kKCk7ICsraXQpCiAgICAgIHsKLS0gICAgICAgIC8vIFRPRE8oYW5nbGVidWcu
Y29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbi4KLSsgICAgICAgIC8vIFRP
RE8oYW5nbGVidWcuY29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbiBhbmQg
R1BVIGluZm8uCi0gICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0r
ICAgICAgICBpbmZvLT5ncHVzLmVtcGxhY2VfYmFjaygpLnZlbmRvcklkID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAgaWYgKCppdCA9PSBvcmlnaW5hbCkKKyAgICAgICAgIHsKKy0gICAgICAg
ICAgICBpdCA9IGdldFNlcXVlbmNlKCktPmVyYXNlKGl0KTsKKy0gICAgICAgICAgICBnZXRTZXF1
ZW5jZSgpLT5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBsYWNlbWVudHMuZW5k
KCkpOworKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0KTsKKysgICAgICAgICAgICBzZXEu
aW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgIH0KICAgICAgfQotIAotICAgICByZXR1
cm4gdHJ1ZTsKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29z
Lm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQotaW5kZXggYjFjZDA1
NS4uYzVlMDM5ZSAxMDA2NDQKLS0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFj
b3MubW0KLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KLUBAIC0z
MjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5mbyAqaW5mbykK
LSAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CitAQCAtNDg4LDEyICs1Mjks
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZVdpdGhNdWx0
aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6
aW5zZXJ0Q2hpbGROb2RlcyhUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBwb3NpdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmaW5zZXJ0aW9ucykKKyB7CistICAgIGlmIChwb3NpdGlvbiA+IGdldFNlcXVlbmNl
KCktPnNpemUoKSkKKysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGlmIChw
b3NpdGlvbiA+IHNlcS5zaXplKCkpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgfQotICAgICAKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYg
ZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpCi0rICAgIGluZm8tPm5lZWRzRUFHTE9uTWFjID0gdHJ1
ZTsKLSsjZW5kaWYKLSsKKy0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkgKyBw
b3NpdGlvbjsKKy0gICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCBpbnNlcnRpb25zLmJlZ2lu
KCksIGluc2VydGlvbnMuZW5kKCkpOworKyAgICBhdXRvIGl0ID0gc2VxLmJlZ2luKCkgKyBwb3Np
dGlvbjsKKysgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRpb25z
LmVuZCgpKTsKICAgICAgcmV0dXJuIHRydWU7CiAgfQogIAotZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9DYXBzLmNwcCBiL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotaW5kZXggZjkwNjc4My4uMWRk
ZGQ0ZCAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotKysrIGIvc3JjL2xpYkFO
R0xFL0NhcHMuY3BwCi1AQCAtNjMwLDcgKzYzMCwxMiBAQCBzdGF0aWMgYm9vbCBEZXRlcm1pbmVE
ZXB0aFRleHR1cmVBTkdMRVN1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBz
KQotIHsKLSAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKLSAgICAg
ICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotKyNpZiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmICghZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgfHwgIWRlZmluZWQo
QU5HTEVfQ1BVX0FSTTY0KSkKLSsgICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSsgICAgICAgIC8v
IGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1MuCi0rICAgICAgICAvLyBUT0RPKGRp
bm8pOiBJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBydW50aW1lIGNoZWNrIHdoZW4gcnVubmlu
ZyBhbiBpT1MgYXBwIG9uIE1hYy4KLSAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywK
LSsjZW5kaWYKLSAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLAotICAgICB9OworQEAg
LTEwNDAsOCArMTA4Miw4IEBAIFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKICAKLUBAIC02NDIsNyArNjQ3LDEyIEBAIHN0YXRp
YyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNN
YXAgJnRleHR1cmVDYXBzKQorIFRJbnRlcm1BZ2dyZWdhdGUgKlRJbnRlcm1BZ2dyZWdhdGU6OnNo
YWxsb3dDb3B5KCkgY29uc3QKICB7Ci0gICAgIGNvbnN0ZXhwciBHTGVudW0gcmVxdWlyZWRGb3Jt
YXRzW10gPSB7Ci0gICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwKLSsjaWYgIWRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZ
U1QpIHx8ICFkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCi0rICAgICAgICAvLyBUT0RPKGRpbm8p
OiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTCi0rICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgb24gaU9TLgotKyAg
ICAgICAgLy8gVE9ETyhkaW5vKTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBj
aGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9TIGFwcCBvbiBNYWMuCi0gICAgICAgICBHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVMsCi0rI2VuZGlmCi0gICAgIH07CistICAgIFRJbnRlcm1TZXF1ZW5jZSAq
Y29weVNlcSA9IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKy0gICAgY29weVNlcS0+aW5zZXJ0KGNv
cHlTZXEtPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmVu
ZCgpKTsKKysgICAgYXV0byAmc2VxICAgICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsK
KysgICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxICAgPSBuZXcgVEludGVybVNlcXVlbmNlKHNl
cS5iZWdpbigpLCBzZXEuZW5kKCkpOworICAgICBUSW50ZXJtQWdncmVnYXRlICpjb3B5Tm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKG1GdW5jdGlvbiwgbVR5cGUsIG1PcCwgY29weVNlcSk7Cisg
ICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKKyAgICAgcmV0dXJuIGNvcHlOb2RlOworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAoraW5kZXggMzY0Mzg0Ny4uM2I2Zjg3MiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCitAQCAtNjc0LDYgKzY3NCw3IEBAIGNs
YXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlCisgeworICAgcHVibGljOgorICAgICBUSW50ZXJtQmxvY2soKSA6IFRJbnRlcm1O
b2RlKCkge30KKysgICAgVEludGVybUJsb2NrKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJt
Tm9kZSAqPiBzdG10cyk7CisgICAgIH5USW50ZXJtQmxvY2soKSBvdmVycmlkZSB7fQogIAotICAg
ICByZXR1cm4gR2V0Rm9ybWF0U3VwcG9ydCh0ZXh0dXJlQ2FwcywgcmVxdWlyZWRGb3JtYXRzLCB0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L1N0YXRlLmNwcCBiL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKLWluZGV4IDdiMDhkOGQuLmE4MDQ0
ODYgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvU3RhdGUuY3BwCi0rKysgYi9zcmMvbGliQU5H
TEUvU3RhdGUuY3BwCi1AQCAtNiw2ICs2LDkgQEAKKyAgICAgVEludGVybUJsb2NrICpnZXRBc0Js
b2NrKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFz
cyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJt
QWdncmVnYXRlQmFzZQorIHsKKyAgIHB1YmxpYzoKKyAgICAgVEludGVybURlY2xhcmF0aW9uKCkg
OiBUSW50ZXJtTm9kZSgpIHt9CisrICAgIFRJbnRlcm1EZWNsYXJhdGlvbihjb25zdCBUVmFyaWFi
bGUgKnZhciwgVEludGVybVR5cGVkICppbml0RXhwcik7CisrICAgIFRJbnRlcm1EZWNsYXJhdGlv
bihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRlY2xhcmF0b3JzKTsK
KysgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlw
ZWQgKj4gZGVjbGFyYXRvcnMpOworICAgICB+VEludGVybURlY2xhcmF0aW9uKCkgb3ZlcnJpZGUg
e30KICAKLSAvLyBTdGF0ZS5jcHA6IEltcGxlbWVudHMgdGhlIFN0YXRlIGNsYXNzLCBlbmNhcHN1
bGF0aW5nIHJhdyBHTCBzdGF0ZS4KKyAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0RlY2xh
cmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sLmNwcAoraW5kZXggZDAzODlhZi4uZmUyZTE5YiAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5jcHAKK0BAIC0xOTYsNyArMTk2LDggQEAgdm9pZCBURnVuY3Rpb246OnNoYXJlUGFy
YW1ldGVycyhjb25zdCBURnVuY3Rpb24gJnBhcmFtZXRlcnNTb3VyY2UpCiAgCi0rLy8gT2xkZXIg
Y2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2FybmluZyBoZXJl
LgotKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2dsb2JhbC1jb25zdHJ1Y3Rv
cnMiCi0rCi0gI2luY2x1ZGUgImxpYkFOR0xFL1N0YXRlLmgiCisgSW1tdXRhYmxlU3RyaW5nIFRG
dW5jdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CisgeworLSAgICBzdGQ6OnN0cmluZyBu
ZXdOYW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisrICAgIEltbXV0YWJsZVN0
cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOworKyAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVk
TmFtZVNlcGFyYXRvcjsKICAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAK
LWluZGV4IDNmOWYzN2QuLjVlNjI4ZjIgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvZm9ybWF0
dXRpbHMuY3BwCi0rKysgYi9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwCi1AQCAtMTAzNCw3
ICsxMDM0LDcgQEAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEludGVybmFsRm9y
bWF0SW5mb01hcCgpCi0gICAgIGFuZ2xlOjpTeXN0ZW1JbmZvIGluZm87Ci0gICAgIGlmIChhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCi0gICAgIHsKLS0gICAgICAgIGlmIChpbmZvLmlzaU9T
QXBwT25NYWMpCi0rICAgICAgICBpZiAoaW5mby5uZWVkc0VBR0xPbk1hYykKLSAgICAgICAgIHsK
LSAgICAgICAgICAgICAvLyBVc2luZyBPcGVuR0xFUy5mcmFtZXdvcmsuCi0gICAgICAgICAgICAg
QWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgZmFsc2UsICA4LCAgOCwgIDgs
ICA4LCAwLCBHTF9CR1JBX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFUzwyLCAw
PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rp
c3BsYXlBcHBsZV9hcGkuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3Bs
YXlBcHBsZV9hcGkuY3BwCi1pbmRleCBkZTIxNmZiLi5lNjNhOGI2IDEwMDY0NAotLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3BsYXlBcHBsZV9hcGkuY3BwCi0rKysgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKLUBAIC0z
Nyw3ICszNyw3IEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVn
bDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICAgICAgIGJyZWFrOwotICAgICB9CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaAoraW5kZXggYjljZjkwOC4uMGFiYjFkNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuaAorQEAgLTIyMiw3ICsyMjIsNyBAQCBjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJv
bAorICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9CiAg
Ci0tICAgIGlmIChpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlmIChpbmZvLm5lZWRzRUFHTE9u
TWFjKQotICAgICB7Ci0gICAgICAgICByZXR1cm4gbmV3IHJ4OjpEaXNwbGF5RUFHTChzdGF0ZSk7
Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NvbnRl
eHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9Db250ZXh0Q0dMLmNwcAot
aW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9j
Z2wvQ29udGV4dENHTC5jcHAKLUBAIC0xMyw2ICsxMyw4IEBACi0gI2luY2x1ZGUgImxpYkFOR0xF
L0Rpc3BsYXkuaCIKLSAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlD
R0wuaCIKKyAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorLSAgICBi
b29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKysgICAgYm9vbCBpc0RlZmluZWQo
KSBjb25zdCB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgIHZvaWQgc2V0SGFzUHJvdG90eXBlRGVj
bGFyYXRpb24oKSB7IG1IYXNQcm90b3R5cGVEZWNsYXJhdGlvbiA9IHRydWU7IH0KKyAgICAgYm9v
bCBoYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1IYXNQcm90b3R5cGVE
ZWNsYXJhdGlvbjsgfQogIAotKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQotKwotIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCitpbmRleCBhMWZjZjhj
Li5lYTU2NmIxIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
LmNwcAorQEAgLTQxLDggKzQxLDE0IEBAIGNvbnN0IGNoYXIga1Jhc3Rlcml6ZXJEaXNjYXJkRW5h
YmxlZENvbnN0TmFtZVtdID0gIkFOR0xFUmFzdGVyaXplckRpc2FibGVkIjsKKyBuYW1lc3BhY2UK
ICB7CiAgCi1AQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtSYXN0
ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgPQorKyAgICBJbW11dGFibGVTdHJpbmco
IkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmlu
ZyBrQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSA9CisrICAgIEltbXV0YWJsZVN0cmluZygi
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIik7CisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
Q292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJpbmcoImNvdmVyYWdlTWFzayIp
OworK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0VtdUluc3RhbmNlSURGaWVsZCAgICAgID0g
SW1tdXRhYmxlU3RyaW5nKCJlbXVsYXRlZEluc3RhbmNlSUQiKTsKKyBjb25zdGV4cHIgSW1tdXRh
YmxlU3RyaW5nIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSA9IEltbXV0YWJsZVN0cmluZygiQU5H
TEVXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtEaXNjYXJk
V3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEaXNjYXJkV3JhcHBlciIp
OworIAorIFRJbnRlcm1CaW5hcnkgKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoY29uc3QgVFZhcmlh
YmxlICpkcml2ZXJVbmlmb3JtcywgY29uc3QgY2hhciAqZmllbGROYW1lKQorIHsKK0BAIC04Niw2
ICs5MiwyMSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRp
b25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgKmNvbQorICAgICByZXR1cm4gUnVuQXRUaGVF
bmRPZlNoYWRlcihjb21waWxlciwgcm9vdCwgYXNzaWdubWVudCwgc3ltYm9sVGFibGUpOwogIH0K
ICAKLSB9ICAvLyBuYW1lc3BhY2UgcngKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW11bGF0ZUlu
c3RhbmNlSUQoVENvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKmRyaXZlclVu
aWZvcm1zKQorK3sKKysgICAgLy8gZW11SW5zdGFuY2VJRAorKyAgICBUSW50ZXJtQmluYXJ5ICpl
bXVJbnN0YW5jZUlEID0KKysgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5p
Zm9ybXMsIGtFbXVJbnN0YW5jZUlERmllbGQuZGF0YSgpKTsKICsKLSsjZW5kaWYgIC8vIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpCi1cIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysgICAgLy8gQ3JlYXRlIGEgc3lt
Ym9sIHJlZmVyZW5jZSB0byAiZ2xfSW5zdGFuY2VJbmRleCIKKysgICAgY29uc3QgVFZhcmlhYmxl
ICppbnN0YW5jZUlEID0gQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrCisr
ICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoY29tcGlsZXIsIHJvb3QsIGluc3Rh
bmNlSUQsIGVtdUluc3RhbmNlSUQpOworK30KKysKKyAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5
aW5nIG91dHB1dHMuCisgQU5HTEVfTk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRw
dXRzKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKK0BAIC0xMjMsNiArMTQ0
LDE4IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50
ZXJtQmxvY2sgKnJvb3QsCisgCisgfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorIAorKy8qKiBz
dGF0aWMgKi8KKytjb25zdCBjaGFyICpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0Vu
YWJsZWRDb25zdE5hbWUoKQorK3sKKysgICAgcmV0dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29u
c3ROYW1lLmRhdGEoKTsKKyt9CisrCisrLyoqIHN0YXRpYyAqLworK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7
CisrICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lLmRhdGEo
KTsKKyt9CisrCisgVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5cGUsIHNwZWMpCisg
e30KKyAKK0BAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRhbDo6dHJhbnNs
YXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgeworICAgICAgICAgYXV0byBuZWdGbGlwWSA9
IGdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZihkcml2ZXJVbmlmb3Jtcyk7CisgCisrICAgICAg
ICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBF
bXVsYXRlIGdsX0luc3RhbmNlSUQKKysgICAgICAgICAgICBpZiAoIUVtdWxhdGVJbnN0YW5jZUlE
KHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKworICAgICAgICAgLy8gQXBwZW5kIGdsX1Bvc2l0aW9uLnkgY29ycmVjdGlv
biB0byBtYWluCisgICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJl
Y3Rpb25Ub01haW4odGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIG5lZ0ZsaXBZKSkKKyAg
ICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgCistICAg
ICAgICAvLyBJbnNlcnQgcmFzdGVyaXplciBkaXNjYXJkIGxvZ2ljCistICAgICAgICBpZiAoIWlu
c2VydFJhc3Rlcml6ZXJEaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICAvLyBJbnNlcnQgcmFz
dGVyaXphdGlvbiBkaXNjYXJkIGxvZ2ljCisrICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6YXRp
b25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIEluaXRpYWxpemUgdW51c2VkIHZh
cnlpbmcgb3V0cHV0cyB0byBhdm9pZCBzcGlydi1jcm9zcyBkZWFkLWNvZGUgcmVtb3ZpbmcgdGhl
bSBpbiBsYXRlcgorKyAgICAvLyBzdGFnZS4gT25seSBkbyB0aGlzIGlmIFNIX0lOSVRfT1VUUFVU
X1ZBUklBQkxFUyBpcyBub3Qgc3BlY2lmaWVkLgorKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9
PSBHTF9WRVJURVhfU0hBREVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFE
RVJfRVhUKSAmJgorKyAgICAgICAgIShjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfT1VUUFVUX1ZB
UklBQkxFUykpCisrICAgIHsKKysgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKysgICAg
ICAgIGZvciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiBtT3V0cHV0VmFyeWluZ3Mp
CisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCF2YXIuYWN0aXZlKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgbGlzdC5wdXNoX2JhY2sodmFyKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJv
b3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0KSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgeworKyAgICAgICAgLy8gRm9yIG5v
biB2b2lkIE1TTCBmcmFnbWVudCBmdW5jdGlvbnMgcmVwbGFjZSBkaXNjYXJkCisrICAgICAgICAv
LyB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKQorKyAgICAgICAgaWYgKG1PdXRwdXRWYXJpYWJs
ZXMuc2l6ZSgpID4gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIXJlcGxhY2VBbGxN
YWluRGlzY2FyZFVzZXMocm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgICAgaWYgKCFp
bnNlcnRTYW1wbGVNYXNrV3JpdGluZ0xvZ2ljKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CitAQCAtMjM1LDYgKzMwNiwxMyBAQCB2
b2lkIFRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9y
bUZpZWxkcyhzdGQ6OnZlY3RvcjxURgorICAgICBURmllbGQgKmNvdmVyYWdlTWFza0ZpZWxkID0K
KyAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNrRmll
bGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgIGZpZWxk
c091dC0+cHVzaF9iYWNrKGNvdmVyYWdlTWFza0ZpZWxkKTsKKysKKysgICAgaWYgKG1FbXVsYXRl
ZEluc3RhbmNlSUQpCisrICAgIHsKKysgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZpZWxk
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9j
KCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKyAgICAgICAgZmllbGRzT3V0LT5wdXNo
X2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKysgICAgfQorIH0KKyAKKyAvLyBBZGQgc2FtcGxl
X21hc2sgd3JpdGluZyB0byBtYWluLCBndWFyZGVkIGJ5IHRoZSBzcGVjaWFsaXphdGlvbiBjb25z
dGFudAorQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xh
dG9yTWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCisgICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworIH0KKyAKKy1BTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNl
cnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKyB7CisgICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAg
ICAgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9
ICZnZXRTeW1ib2xUYWJsZSgpOworIAorICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbkRpc2Fi
bGVkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50LgorLSAgICBzaW5rIDw8ICJsYXlvdXQgKGNvbnN0
YW50X2lkPTApIGNvbnN0IGJvb2wgIiA8PCBtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWU7CisrICAgIHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9v
bCAiIDw8IGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisgICAgIHNpbmsg
PDwgIiA9IGZhbHNlO1xuIjsKKyAKKy0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUgdmFyaWFibGUgcmVmZXJlbmNlLgorKyAgICAvLyBDcmVhdGUga1Jhc3Rl
cml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSBhbmQga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RnVuY05hbWUgdmFyaWFibGUKKysgICAgLy8gcmVmZXJlbmNlcy4KKyAgICAgVFR5cGUgKmJvb2xU
eXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgICBib29sVHlwZS0+c2V0UXVhbGlmaWVyKEV2
cUNvbnN0KTsKKy0gICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CistICAgICAgICBu
ZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXpl
ckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKSwKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxl
ZFZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAKKyAgICAg
Ly8gSW5zZXJ0IHRoaXMgY29kZSB0byB0aGUgZW5kIG9mIG1haW4oKQorLSAgICAvLyBpZiAoQU5H
TEVSYXN0ZXJpemVyRGlzYWJsZWQpCisrICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6YXRpb25EaXNh
YmxlZCkKKyAgICAgLy8geworICAgICAvLyAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgtMy4wLCAt
My4wLCAtMy4wLCAxLjApOworICAgICAvLyB9CitAQCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jaworICAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCBy
b290LCBpZkNhbGwsIHN5bWJvbFRhYmxlKTsKKyB9CisgCisrLy8gSWYgdGhlIE1TTCBmcmFnbWVu
dCBzaGFkZXIgaXMgbm9uLXZvaWQsIHdlIG5lZWQgdG8gZW5zdXJlCisrLy8gdGhhdCB0aGVyZSBp
cyBhIHJldHVybiBhdCB0aGUgZW5kLiBUaGUgTVNMIGNvbXBpbGVyCisrLy8gd2lsbCBlcnJvciBv
dXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBpZiBhbGwKKysvLyBwYXRo
cyBsZWFkIHRvIGRpc2NhcmRfZnJhZ21lbnQoKS4gU28gd3JhcCBkaXNjYXJkIGluIGEgd3JhcHBl
ciBmdW5jdGlvbi4KKysvLyBGaXhlcyBkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5kaXNj
YXJkLmJhc2ljX2Fsd2F5cworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290KQorK3sKKysgICAg
Ly8gYmVmb3JlCisrICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKysgICAgLy8geworKyAgICAvLyAg
ICAgb19jb2xvciA9IHZfY29sb3I7CisrICAgIC8vICAgICBkaXNjYXJkOworKyAgICAvLyB9Cisr
CisrICAgIC8vIGFmdGVyCisrICAgIC8vIHZvaWQgQU5HTEVEaXNjYXJkV3JhcHBlcigpCisrICAg
IC8vIHsKKysgICAgLy8gICAgZGlzY2FyZDsKKysgICAgLy8gfQorKyAgICAvLyB2b2lkIG1haW4g
KHZvaWQpCisrICAgIC8vIHsKKysgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworKyAgICAv
LyAgICAgQU5HTEVEaXNjYXJkV3JhcHBlcigpOworKyAgICAvLyB9CisrCisrICAgIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKm1haW4gICA9IEZpbmRNYWluKHJvb3QpOworKyAgICBUSW50ZXJt
QmxvY2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisrICAgIFRJbnRl
cm1TZXF1ZW5jZSAqZnVuY3Rpb25TZXF1ZW5jZSA9IG1haW5Cb2R5LT5nZXRTZXF1ZW5jZSgpOwor
KyAgICBUSW50ZXJtQWdncmVnYXRlICpkaXNjYXJkRnVuYyAgICAgPSBudWxscHRyOworKyAgICAv
LyBJdGVyYXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNl
IGFsbCB1c2VzCisrICAgIC8vIG9mIGRpc2NhcmQgd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCku
CisrICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmdW5jdGlvblNlcXVlbmNlLT5z
aXplKCk7ICsraW5kZXgpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpmdW5jdGlvbk5v
ZGUgPSAoKmZ1bmN0aW9uU2VxdWVuY2UpW2luZGV4XTsKKysgICAgICAgIFRJbnRlcm1CcmFuY2gg
KmJyYW5jaE5vZGUgPSBmdW5jdGlvbk5vZGUtPmdldEFzQnJhbmNoTm9kZSgpOworKyAgICAgICAg
aWYgKGJyYW5jaE5vZGUgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
YnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCkgPT0gRU9wS2lsbCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChkaXNjYXJkRnVuYyA9PSBudWxscHRyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFw
cGVyRnVuYyhyb290KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBib29s
IHJlcGxhY2VkID0gbWFpbkJvZHktPnJlcGxhY2VDaGlsZE5vZGUoYnJhbmNoTm9kZSwgZGlzY2Fy
ZEZ1bmMpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHZhbGlk
YXRlQVNUKHJvb3QpOworK30KKysKKysvLyBDcmVhdGUgZGlzY2FyZF93cmFwcGVyIGZ1bmN0aW9u
IHRvIGVuc3VyZSB0aGF0IFNQSVJWLUNyb3NzIHdpbGwgYWx3YXlzIGhhdmUgYSByZXR1cm4gYXQg
dGhlIGVuZAorKy8vIG9mIGZyYWdtZW50IHNoYWRlcnMKKytBTkdMRV9OT19ESVNDQVJEIFRJbnRl
cm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJ
bnRlcm1CbG9jayAqcm9vdCkKKyt7CisrICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAgICAgPSBn
ZXRJbmZvU2luaygpLm9iajsKKysgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRT
eW1ib2xUYWJsZSgpOworKworKyAgICBzaW5rIDw8ICJ2b2lkICIgPDwga0Rpc2NhcmRXcmFwcGVy
RnVuY05hbWUgPDwgIigpXG4iOworKyAgICBzaW5rIDw8ICJ7XG4iOworKyAgICBzaW5rIDw8ICIg
ICBkaXNjYXJkO1xuIjsKKysgICAgc2luayA8PCAifVxuIjsKKysKKysgICAgVEZ1bmN0aW9uICpk
aXNjYXJkV3JhcHBlckZ1bmMgPQorKyAgICAgICAgbmV3IFRGdW5jdGlvbihzeW1ib2xUYWJsZSwg
a0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCksIHRydWUp
OworKworKyAgICBUSW50ZXJtQWdncmVnYXRlICpjYWxsRGlzY2FyZFdyYXBwZXJGdW5jID0KKysg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdyYXBw
ZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworKyAgICByZXR1cm4gY2FsbERpc2NhcmRX
cmFwcGVyRnVuYzsKKyt9CisrCisgfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmggYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAoraW5kZXggMGY0ZjFjYy4uYmNjMzE4NyAxMDA2NDQK
Ky0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAorQEAgLTI1LDYgKzI1LDEx
IEBAIGNsYXNzIFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCisgICBw
dWJsaWM6CisgICAgIFRyYW5zbGF0b3JNZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjKTsKKyAKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25E
aXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5z
dGFuY2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysKKyAgIHByb3Rl
Y3RlZDoKKyAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZShUSW50ZXJtQmxvY2sg
KnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0
aW9ucyBjb21waWxlT3B0aW9ucywKK0BAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9y
TWV0YWwgOiBwdWJsaWMgVHJhbnNsYXRvclZ1bGthbgorIAorICAgICBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgaW5zZXJ0U2FtcGxlTWFza1dyaXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMpOworLSAgICBBTkdMRV9OT19ESVNDQVJEIGJv
b2wgaW5zZXJ0UmFzdGVyaXplckRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKyAg
ICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhU
SW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVwbGFj
ZUFsbE1haW5EaXNjYXJkVXNlcyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9O
T19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50
ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBib29sIG1FbXVsYXRlZEluc3RhbmNlSUQgPSBmYWxz
ZTsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNGUxMDIyOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAorQEAgLTAsMCArMSwxNDM5IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgiCisrCisrI2luY2x1ZGUgImFuZ2xlX2dsLmgiCisrI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWls
dGluc1dvcmthcm91bmRHTFNMLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1t
dXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091
dHB1dFZ1bGthbkdMU0wuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TdGF0aWNU
eXBlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvSG9pc3RDb25zdGFudHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VE
ZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlT3V0QXJncy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJl
bmNlcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERl
Y2xhcmF0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZUVtYmVkZGVkVW5pZm9y
bVN0cnVjdHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVBdG9taWNDb3VudGVyQnVpbHRpbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2Ft
cGxlcnNBczJEQXJyYXkuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1Jld3JpdGVTdHJ1Y3RTYW1wbGVycy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9CdWlsdEluLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9GaW5kTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9GaW5kU3ltYm9sTm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorKworK25hbWVzcGFjZSBzaAor
K3sKKysKKytuYW1lc3BhY2UKKyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0Zp
ZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrY29uc3RleHBy
IE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQpOworKyNpZiAwCisrY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0
ZUZ1bmNOYW1lKCJXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdy
YXBwZXJGdW5jTmFtZSgiRGlzY2FyZFdyYXBwZXIiKTsKKysjZW5kaWYKKytjb25zdGV4cHIgTmFt
ZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7CisrY29uc3Rl
eHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CisrY29uc3RleHBy
IE5hbWUga1VuaWZvcm1zVmFyTmFtZSgiYW5nbGVVbmlmb3JtcyIpOworK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysKKytjb25zdGV4cHIg
Y29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAgICAgICA9ICJ2aWV3cG9ydCI7CisrY29uc3Rl
eHByIGNvbnN0IGNoYXIga0hhbGZSZW5kZXJBcmVhW10gICAgICAgPSAiaGFsZlJlbmRlckFyZWEi
OworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtGbGlwWFlbXSAgICAgICAgICAgICAgID0gImZsaXBY
WSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtdICAgICAgICAgICAgPSAibmVn
RmxpcFhZIjsKKytjb25zdGV4cHIgY29uc3QgY2hhciBrQ2xpcERpc3RhbmNlc0VuYWJsZWRbXSA9
ICJjbGlwRGlzdGFuY2VzRW5hYmxlZCI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1hmYkFjdGl2
ZVVucGF1c2VkW10gICAgPSAieGZiQWN0aXZlVW5wYXVzZWQiOworK2NvbnN0ZXhwciBjb25zdCBj
aGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2VzUGVyRHJhdyI7CisrY29u
c3RleHByIGNvbnN0IGNoYXIga1hmYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAieGZiQnVmZmVyT2Zm
c2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0FjYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAi
YWNiQnVmZmVyT2Zmc2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0RlcHRoUmFuZ2VbXSAg
ICAgICAgICAgPSAiZGVwdGhSYW5nZSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1ByZVJvdGF0
aW9uW10gICAgICAgICAgPSAicHJlUm90YXRpb24iOworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtG
cmFnUm90YXRpb25bXSAgICAgICAgID0gImZyYWdSb3RhdGlvbiI7CisrCisrY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSBrZ2xfVmVydGV4SW5kZXhNZXRhbCgKKysgICAgQnVpbHRJbklkOjpnbF9W
ZXJ0ZXhJbmRleCwKKysgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIpLAorKyAg
ICBTeW1ib2xUeXBlOjpCdWlsdEluLAorKyAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQsCisrICAg
IFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4oKSk7
CisrCisrY29uc3RleHByIHNpemVfdCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3JtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7CisrY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dy
YXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworKyAgICB7a1ZpZXdwb3J0LCBrSGFsZlJlbmRl
ckFyZWEsIGtGbGlwWFksIGtOZWdGbGlwWFksIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCwga1hmYkFj
dGl2ZVVucGF1c2VkLAorKyAgICAga1hmYlZlcnRpY2VzUGVyRHJhdywga1hmYkJ1ZmZlck9mZnNl
dHMsIGtBY2JCdWZmZXJPZmZzZXRzLCBrRGVwdGhSYW5nZSwga1ByZVJvdGF0aW9uLAorKyAgICAg
a0ZyYWdSb3RhdGlvbn19OworKworK2NvbnN0ZXhwciBzaXplX3Qga051bUNvbXB1dGVEcml2ZXJV
bmlmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
OworK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisrICAgIHtrQWNiQnVmZmVy
T2Zmc2V0c319OworKworK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBleHBsaWNpdCBEZWNsYXJl
U3RydWN0VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorKyAgICAgICAgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXRwdXRNU0wob3V0cHV0TVNM
KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgQVNTRVJU
KHZpc2l0ID09IFByZVZpc2l0KTsKKysgICAgICAgIGlmICghbUluR2xvYmFsU2NvcGUpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgY29uc3QgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmRlY2xhcmF0b3IgICAgICAgID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAg
ICAgICAgICA9IGRlY2xhcmF0b3ItPmdldFR5cGUoKTsKKysKKysgICAgICAgIGlmICh0eXBlLmlz
U3RydWN0U3BlY2lmaWVyKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKysKKysgICAgICAgICAgICAvLyBF
bWJlZGRlZCBzdHJ1Y3RzIHNob3VsZCBiZSBwYXJzZWQgYXdheSBieSBub3cuCisrICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsK
KysgICAgICAgICAgICAvLyBvdXRwdXRNU0wtPndyaXRlU3RydWN0VHlwZShzdHJ1Y3R1cmUpOwor
KworKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgICAgICBpZiAoc3ltYm9sTm9kZSAmJiBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3RydWN0IHNwZWNpZmll
ciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKysg
ICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7CisrICAgICAg
ICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50Tm9kZSgp
LT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92ZSAndW5zdWVkJyB3
YXJuaW5nCisrICAgICAgICBtT3V0cHV0TVNMID0gbnVsbHB0cjsKKysKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgVE91dHB1dE1TTCAqbU91dHB1
dE1TTDsKKyt9OworKworK2NsYXNzIERlY2xhcmVEZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgRGVjbGFyZURlZmF1
bHRVbmlmb3Jtc1RyYXZlcnNlcihUSW5mb1NpbmtCYXNlICpzaW5rLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisrICAg
ICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1T
aW5rKHNpbmspLAorKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisrICAg
ICAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAorKyAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybShm
YWxzZSkKKysgICAge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSAqKG5vZGUtPmdldFNlcXVlbmNlKCkpOwor
KworKyAgICAgICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorKyAg
ICAgICAgQVNTRVJUKHNlcXVlbmNlLnNpemUoKSA9PSAxKTsKKysKKysgICAgICAgIFRJbnRlcm1U
eXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAg
ICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKysgICAgICAg
IGJvb2wgaXNVbmlmb3JtICAgICAgICAgPSB0eXBlLmdldFF1YWxpZmllcigpID09IEV2cVVuaWZv
cm0gJiYgIXR5cGUuaXNJbnRlcmZhY2VCbG9jaygpICYmCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICFJc09wYXF1ZVR5cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisrCisrICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGlzVW5pZm9y
bSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8
PCBHZXRUeXBlTmFtZSh0eXBlLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworKyAg
ICAgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IHRydWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGlzVW5pZm9ybTsKKysgICAgICAg
IH0KKysgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgKCptU2luaykgPDwgIjtcbiI7CisrCisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
dW5pZm9ybSBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fp
bi4KKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7Cisr
ICAgICAgICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50
Tm9kZSgpLT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQor
KworKyAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlmb3JtID0gZmFsc2U7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKG1JbkRl
ZmF1bHRVbmlmb3JtKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmbmFtZSA9IHN5bWJvbC0+dmFyaWFibGUoKS5uYW1lKCk7CisrICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKysgICAgICAgICAgICAoKm1TaW5rKSA8PCBI
YXNoTmFtZSgmc3ltYm9sLT52YXJpYWJsZSgpLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkKKysg
ICAgICAgICAgICAgICAgICAgICA8PCBBcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7Cisr
ICAgICAgICB9CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgKm1T
aW5rOworKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247CisrICAgIE5hbWVNYXAg
Km1OYW1lTWFwOworKyAgICBib29sIG1JbkRlZmF1bHRVbmlmb3JtOworK307CisrCisrVEludGVy
bUJpbmFyeSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihjb25zdCBUVmFyaWFibGUgJmRyaXZlclVu
aWZvcm1zLCBjb25zdCBjaGFyICpmaWVsZE5hbWUpCisreworKyAgICBzaXplX3QgZmllbGRJbmRl
eCA9IEZpbmRGaWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCksIGZpZWxkTmFtZSk7CisrCisrICAgIFRJbnRlcm1TeW1ib2wgKmFuZ2xlVW5pZm9y
bXNSZWYgPSBuZXcgVEludGVybVN5bWJvbCgmZHJpdmVyVW5pZm9ybXMpOworKyAgICBUQ29uc3Rh
bnRVbmlvbiAqdW5pZm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworKyAgICB1bmlm
b3JtSW5kZXgtPnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KGZpZWxkSW5kZXgpKTsKKysgICAg
VEludGVybUNvbnN0YW50VW5pb24gKmluZGV4UmVmID0KKysgICAgICAgIG5ldyBUSW50ZXJtQ29u
c3RhbnRVbmlvbih1bmlmb3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkp
OworKyAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsIGFu
Z2xlVW5pZm9ybXNSZWYsIGluZGV4UmVmKTsKKyt9CisrCisrI2lmIDAKKysvLyBVbmxpa2UgVnVs
a2FuIGhhdmluZyBhdXRvIHZpZXdwb3J0IGZsaXBwaW5nIGV4dGVuc2lvbiwgaW4gTWV0YWwgd2Ug
aGF2ZSB0byBmbGlwIGdsX1Bvc2l0aW9uLnkKKysvLyBtYW51YWxseS4KKysvLyBUaGlzIG9wZXJh
dGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xfUG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJl
c3Npb246CisrLy8gZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNj
YWxlWQorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllD
b3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Td2l6emxlICZuZWdGbGlwWSkKKyt7CisrICAg
IFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOwor
KworKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKysg
ICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCk7CisrICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1i
b2wocG9zaXRpb24pOworKworKyAgICAvLyBDcmVhdGUgYSBzd2l6emxlIHRvICJnbF9Qb3NpdGlv
bi55IgorKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFk7CisrICAgIHN3aXp6bGVPZmZz
ZXRZLnB1c2hfYmFjaygxKTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWSA9IG5ldyBU
SW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFkpOworKworKyAgICAvLyBD
cmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlwWSIKKysgICAgVElu
dGVybUJpbmFyeSAqaW52ZXJzZVkgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9u
WS0+ZGVlcENvcHkoKSwgJm5lZ0ZsaXBZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25t
ZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisr
ICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25ZTEhTID0gcG9zaXRpb25ZLT5kZWVwQ29weSgpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZKTsKKysKKysgICAgLy8gQXBw
ZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRl
ci4KKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgYXNz
aWdubWVudCwgJnN5bWJvbFRhYmxlKTsKKyt9CisrI2VuZGlmCisrCisrI2lmIDAKKysvLyBJbml0
aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIElu
aXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5pdFZhcmlhYmxlTGlzdCAmdW51c2VkVmFycykKKyt7CisrICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgIFRJ
bnRlcm1TZXF1ZW5jZSAqaW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybVNlcXVlbmNlOworKwor
KyAgICBmb3IgKGNvbnN0IHNoOjpTaGFkZXJWYXJpYWJsZSAmdmFyIDogdW51c2VkVmFycykKKysg
ICAgeworKyAgICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKysgICAgICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCB2YXIubmFtZSk7CisrICAg
ICAgICBBU1NFUlQoc3ltYm9sKTsKKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAqaW5pdENv
ZGUgPSBDcmVhdGVJbml0Q29kZShzeW1ib2wsIGZhbHNlLCBmYWxzZSwgJnN5bWJvbFRhYmxlKTsK
KysKKysgICAgICAgIGluc2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgp
LCBpbml0Q29kZS0+YmVnaW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKysgICAgfQorKworKyAgICBp
ZiAoaW5zZXJ0U2VxdWVuY2UpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKm1haW4gPSBGaW5kTWFpbigmcm9vdCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
Km1haW5TZXF1ZW5jZSAgID0gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworKworKyAg
ICAgICAgLy8gSW5zZXJ0IGluaXQgY29kZSBhdCB0aGUgc3RhcnQgb2YgbWFpbigpCisrICAgICAg
ICBtYWluU2VxdWVuY2UtPmluc2VydChtYWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVl
bmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1ZW5jZS0+ZW5kKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiB0cnVlOworK30KKysjZW5kaWYKKysKKytjb25zdCBUVmFyaWFibGUgKkFkZENvbXB1dGVE
cml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSkKKyt7CisrICAgIC8vIFRoaXMgZmllbGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1
Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGluIENvbnRleHRWay5jcHAuCisrICAgIFRG
aWVsZExpc3QgKmRyaXZlckZpZWxkTGlzdCA9IG5ldyBURmllbGRMaXN0OworKworKyAgICBjb25z
dCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJV
bmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQsIDQpLAorKyAgICB9
fTsKKysKKysgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
a051bUNvbXB1dGVEcml2ZXJVbmlmb3JtczsgKyt1bmlmb3JtSW5kZXgpCisrICAgIHsKKysgICAg
ICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKysgICAgICAgICAgICBuZXcgVEZpZWxk
KGtEcml2ZXJVbmlmb3JtVHlwZXNbdW5pZm9ybUluZGV4XSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIEltbXV0YWJsZVN0cmluZyhrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5k
ZXhdKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2
ZXJVbmlmb3JtRmllbGQpOworKyAgICB9CisrCisrICAgIHJldHVybiBEZWNsYXJlU3RydWN0dXJl
KCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5pZm9ybSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtV
bmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysgICAgICAgIC5zZWNvbmQ7CisrfQorKwor
Ky8vIFRoZSBBZGQqRHJpdmVyVW5pZm9ybXNUb1NoYWRlciBvcGVyYXRpb24gYWRkcyBhbiBpbnRl
cm5hbCB1bmlmb3JtIGJsb2NrIHRvIGEgc2hhZGVyLiBUaGUgZHJpdmVyCisrLy8gYmxvY2sgaXMg
dXNlZCB0byBpbXBsZW1lbnQgVnVsa2FuLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3b3JrYXJvdW5k
cy4gUmV0dXJucyB0aGUgZHJpdmVyIHVuaWZvcm1zCisrLy8gdmFyaWFibGUuCisrLy8KKysvLyBU
aGVyZSBhcmUgR3JhcGhpY3MgYW5kIENvbXB1dGUgdmFyaWF0aW9ucyBhcyB0aGV5IHJlcXVpcmUg
ZGlmZmVyZW50IHVuaWZvcm1zLgorK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJV
bmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmYWRkaXRpb25hbEZpZWxkcykKKyt7CisrICAgIC8v
IEluaXQgdGhlIGRlcHRoIHJhbmdlIHR5cGUuCisrICAgIFRGaWVsZExpc3QgKmRlcHRoUmFuZ2VQ
YXJhbXNGaWVsZHMgPSBuZXcgVEZpZWxkTGlzdCgpOworKyAgICBkZXB0aFJhbmdlUGFyYW1zRmll
bGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltbXV0YWJsZVN0cmluZygibmVhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpKTsKKysgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFi
bGVTdHJpbmcoImZhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKysg
ICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoImRpZmYiKSwg
a05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrICAgIC8vIFRoaXMgYWRkaXRp
b25hbCBmaWVsZCBtaWdodCBiZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1l
dGFsLgorKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygi
cmVzZXJ2ZWQiKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKmVtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9CisrICAgICAgICBE
ZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVs
ZHMsIEV2cUdsb2JhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmll
cjo6Q3JlYXRlKCksIDAsIGtFbXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMucmF3TmFtZSgpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKQorKyAgICAgICAgICAgIC5maXJzdC0+Z2V0
VHlwZSgpCisrICAgICAgICAgICAgLmdldFN0cnVjdCgpOworKworKyAgICAvLyBUaGlzIGZpZWxk
IGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4g
Q29udGV4dFZrLmNwcC4KKysgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisrCisrICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5cGUgKiwga051bUdyYXBoaWNz
RHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRU
eXBlKEVidEZsb2F0LCA0KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisrICAg
ICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorKyAgICAgICAgbmV3IFRUeXBlKEVidEZsb2F0
LCAyKSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwgIC8vIHVpbnQgY2xpcERpc3RhbmNl
c0VuYWJsZWQ7ICAvLyAzMiBiaXRzIGZvciAzMiBjbGlwIGRpc3RhbmNlcyBtYXgKKysgICAgICAg
IG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAg
ICAgIC8vIE5PVEU6IFRoZXJlJ3MgYSB2ZWMzIGdhcCBoZXJlIHRoYXQgY2FuIGJlIHVzZWQgaW4g
dGhlIGZ1dHVyZQorKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisrICAgICAgICBuZXcg
VFR5cGUoRWJ0VUludCwgNCksCisrICAgICAgICBuZXcgVFR5cGUoZW11bGF0ZWREZXB0aFJhbmdl
UGFyYW1zLCBmYWxzZSksCisrICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorKyAg
ICAgICAgbmV3IFRUeXBlKEVidEZsb2F0LCAyLCA0KSwKKysgICAgfX07CisrCisrICAgIGZvciAo
c2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGtOdW1HcmFwaGljc0RyaXZl
clVuaWZvcm1zOyArK3VuaWZvcm1JbmRleCkKKysgICAgeworKyAgICAgICAgVEZpZWxkICpkcml2
ZXJVbmlmb3JtRmllbGQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1U
eXBlc1t1bmlmb3JtSW5kZXhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3Ry
aW5nKGtHcmFwaGljc0RyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNl
TG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2ZXJVbmlmb3JtRmllbGQp
OworKyAgICB9CisrCisrICAgIC8vIEJhY2stZW5kIHNwZWNpZmljIGZpZWxkcworKyAgICBkcml2
ZXJGaWVsZExpc3QtPmluc2VydChkcml2ZXJGaWVsZExpc3QtPmVuZCgpLCBhZGRpdGlvbmFsRmll
bGRzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVs
ZHMuZW5kKCkpOworKworKyAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5H
TEVVbmlmb3JtQmxvY2siIHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCisrICAg
IHJldHVybiBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxk
TGlzdCwgRXZxVW5pZm9ybSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1
YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysg
ICAgICAgIC5zZWNvbmQ7CisrfQorKworKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJl
cGxhY2UgZ2xfRGVwdGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5p
Zm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2
ZXJVbmlmb3JtKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIC8vIENy
ZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2UgdG8gImdsX0RlcHRoUmFuZ2UiCisrICAgIGNvbnN0IFRW
YXJpYWJsZSAqZGVwdGhSYW5nZVZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSAqPigK
KysgICAgICAgIHN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCAwKSk7CisrCisrICAgIC8vIEFOR0xFVW5pZm9ybXMuZGVwdGhSYW5nZQorKyAg
ICBUSW50ZXJtQmluYXJ5ICphbmdsZUVtdWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZl
clVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKysKKysgICAgLy8gVXNl
IHRoaXMgdmFyaWFibGUgaW5zdGVhZCBvZiBnbF9EZXB0aFJhbmdlIGV2ZXJ5d2hlcmUuCisrICAg
IHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhS
YW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRoUmFuZ2VSZWYpOworK30KKysKKytUSW50ZXJtU2Vx
dWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1haW4oJnJvb3QpOworKyAgICByZXR1
cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworK30KKysKKytBTkdMRV9OT19ESVND
QVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4o
VENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQor
K3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRh
YmxlKCk7CisrICAgIFRWYXJpYWJsZSAqeGZiUGxhY2Vob2xkZXIgPSBuZXcgVFZhcmlhYmxlKCZz
eW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJAQCBYRkItT1VUIEBAIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZSgpLCBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFz
IGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKysgICAgcmV0dXJuIFJ1bkF0
VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgbmV3IFRJbnRlcm1TeW1ib2woeGZiUGxh
Y2Vob2xkZXIpLCAmc3ltYm9sVGFibGUpOworK30KKysKKysvLyBUaGlzIG9wZXJhdGlvbiBwZXJm
b3JtcyB0aGUgdmlld3BvcnQgZGVwdGggdHJhbnNsYXRpb24gbmVlZGVkIGJ5IFZ1bGthbi4gSW4g
R0wgdGhlIHZpZXdwb3J0CisrLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50
IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhlCisr
Ly8gVmlld3BvcnQiLiBJbiBWdWxrYW4gdGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBzZWN0aW9uIGlz
IGN1cnJlbnRseSAiMjMuNC4gQ29vcmRpbmF0ZQorKy8vIFRyYW5zZm9ybWF0aW9ucyIuCisrLy8g
VGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKysvLworKy8vICAgICB6X3Zr
ID0gMC41ICogKHdfZ2wgKyB6X2dsKQorKy8vCisrLy8gd2hlcmUgel92ayBpcyB0aGUgZGVwdGgg
b3V0cHV0IG9mIGEgVnVsa2FuIHZlcnRleCBzaGFkZXIgYW5kIHpfZ2wgaXMgdGhlIHNhbWUgZm9y
IEdMLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJl
Y3Rpb25Ub01haW4oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIFRWZWN0b3I8aW50PiBzd2l6
emxlT2Zmc2V0WiA9IHsyfTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3
IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisrCisrICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICpvbmVIYWxmID0gQ3JlYXRlRmxvYXROb2RlKDAuNWYpOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblcgICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZi0+ZGVlcENv
cHkoKSwgc3dpenpsZU9mZnNldFcpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24g
IihnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorKyAgICBUSW50ZXJtQmlu
YXJ5ICp6UGx1c1cgPSBuZXcgVEludGVybUJpbmFyeShFT3BBZGQsIHBvc2l0aW9uWi0+ZGVlcENv
cHkoKSwgcG9zaXRpb25XLT5kZWVwQ29weSgpKTsKKysgICAgVEludGVybUJpbmFyeSAqaGFsZlpQ
bHVzVyA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgelBsdXNXLCBvbmVIYWxmLT5kZWVwQ29w
eSgpKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0g
KGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNSIKKysgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5h
cnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24s
IHBvc2l0aW9uWkxIUywgaGFsZlpQbHVzVyk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdu
bWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJldHVy
biBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1i
b2xUYWJsZSk7CisrfQorKworKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJl
LXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3IgQW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVy
CisrLy8gcGxhdGZvcm1zKSwgdGhlIGRldmljZSBtYXkgcm90YXRlLCBzdWNoIHRoYXQgdGhlIG9y
aWVudGF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyByb3RhdGVkCisrLy8gcmVsYXRpdmUgdG8g
dGhlIG5hdGl2ZSBvcmllbnRhdGlvbiBvZiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBjb3JyZWN0ZWQg
aW4gcGFydCBieSBtdWx0aXBseWluZworKy8vIGdsX1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKysvLyBU
aGUgZXF1YXRpb25zIHJlZHVjZSB0byBhbiBleHByZXNzaW9uOgorKy8vCisrLy8gICAgIGdsX1Bv
c2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlvbgorK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBBcHBlbmRQcmVSb3RhdGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJp
dmVyVW5pZm9ybXMpCisreworKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlICAgICA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKnByZVJvdGF0aW9u
UmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga1ByZVJvdGF0aW9u
KTsKKysgICAgVEludGVybVN5bWJvbCAqZ2xQb3MgICAgICAgICAgPSBuZXcgVEludGVybVN5bWJv
bChCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKyAgICBUVmVjdG9yPGludD4gc3dp
enpsZU9mZnNldFhZICA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmdsUG9zWFkgICAg
ICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7CisrCisrICAg
IC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24p
IgorKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisrICAgICAgICBuZXcgVEludGVybUJp
bmFyeShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgcHJlUm90YXRpb25SZWYtPmRlZXBDb3B5KCksIGds
UG9zWFktPmRlZXBDb3B5KCkpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImds
X1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorKyAgICBUSW50
ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBnbFBvc1hZLT5kZWVwQ29weSgpLCB6Um90YXRlZCk7CisrCisrICAg
IC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRo
ZSBzaGFkZXIuCisrICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJv
b3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSb3RhdGVBbmRGbGlwQnVpbHRpblZhcmlhYmxlKFRDb21waWxlciAmY29tcGlsZXIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0U2VxdWVuY2UsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZmbGlw
WFksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZidWlsdGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJmZsaXBwZWRWYXJpYWJsZU5hbWUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkICZwaXZvdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKKyt7CisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICAv
LyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICdidWlsdGluJy4KKysgICAgVEludGVybVN5
bWJvbCAqYnVpbHRpblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKCZidWlsdGluKTsKKysKKysgICAg
Ly8gQ3JlYXRlIGEgc3dpenpsZSB0byAiYnVpbHRpbi54eSIKKysgICAgVFZlY3RvcjxpbnQ+IHN3
aXp6bGVPZmZzZXRYWSA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAg
ICA9IG5ldyBUSW50ZXJtU3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworKwor
KyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvIG91ciBuZXcgdmFyaWFibGUgdGhh
dCB3aWxsIGhvbGQgdGhlIG1vZGlmaWVkIGJ1aWx0aW4uCisrICAgIGNvbnN0IFRUeXBlICp0eXBl
ID0gU3RhdGljVHlwZTo6R2V0Rm9yVmVjPEVidEZsb2F0PigKKysgICAgICAgIEV2cUdsb2JhbCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYnVpbHRpbi5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSkpOworKyAgICBUVmFyaWFibGUgKnJlcGxhY2VtZW50VmFyID0gbmV3IFRWYXJpYWJsZSgm
c3ltYm9sVGFibGUsIGZsaXBwZWRWYXJpYWJsZU5hbWUucmF3TmFtZSgpLCB0eXBlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVO
YW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgcmVw
bGFjZW1lbnRWYXIpOworKyAgICBUSW50ZXJtU3ltYm9sICpmbGlwcGVkQnVpbHRpblJlZiA9IG5l
dyBUSW50ZXJtU3ltYm9sKHJlcGxhY2VtZW50VmFyKTsKKysKKysgICAgLy8gVXNlIHRoaXMgbmV3
IHZhcmlhYmxlIGluc3RlYWQgb2YgJ2J1aWx0aW4nIGV2ZXJ5d2hlcmUuCisrICAgIGlmICghUmVw
bGFjZVZhcmlhYmxlKCZjb21waWxlciwgJnJvb3QsICZidWlsdGluLCByZXBsYWNlbWVudFZhcikp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBDcmVh
dGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGluLnh5ICogZnJhZ1JvdGF0aW9uKSIKKysgICAgVElu
dGVybVR5cGVkICpyb3RhdGVkWFk7CisrICAgIGlmIChmcmFnUm90YXRpb24pCisrICAgIHsKKysg
ICAgICAgIHJvdGF0ZWRYWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9y
LCBmcmFnUm90YXRpb24tPmRlZXBDb3B5KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOworKyAgICB9CisrICAgIGVsc2UKKysg
ICAgeworKyAgICAgICAgLy8gTm8gcm90YXRpb24gYXBwbGllZCwgdXNlIG9yaWdpbmFsIHZhcmlh
YmxlLgorKyAgICAgICAgcm90YXRlZFhZID0gYnVpbHRpblhZLT5kZWVwQ29weSgpOworKyAgICB9
CisrCisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgLSBwaXZvdCkg
KiBmbGlwWFkgKyBwaXZvdAorKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9IG5ldyBU
SW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworKyAgICBUSW50ZXJtQmlu
YXJ5ICppbnZlcnNlWFkgICA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgcmVtb3ZlUGl2b3Qs
ICZmbGlwWFkpOworKyAgICBUSW50ZXJtQmluYXJ5ICpwbHVzUGl2b3QgICA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEFkZCwgaW52ZXJzZVhZLCBwaXZvdC5kZWVwQ29weSgpKTsKKysKKysgICAgLy8g
Q3JlYXRlIHRoZSBjb3JyZWN0ZWQgdmFyaWFibGUgYW5kIGNvcHkgdGhlIHZhbHVlIG9mIHRoZSBv
cmlnaW5hbCBidWlsdGluLgorKyAgICBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlID0gbmV3IFRJ
bnRlcm1TZXF1ZW5jZSgpOworKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRl
ZXBDb3B5KCkpOworKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBUSW50ZXJtQWdn
cmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihidWlsdGluLmdldFR5cGUoKSwgc2VxdWVuY2UpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICAgPSBuZXcgVEludGVybUJpbmFyeShFT3BJ
bml0aWFsaXplLCBmbGlwcGVkQnVpbHRpblJlZiwgYWdncmVnYXRlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGFzc2lnbm1lbnQgdG8gdGhlIHJlcGxhY2VkIHZhcmlhYmxlJ3MgLnh5LgorKyAgICBU
SW50ZXJtU3dpenpsZSAqY29ycmVjdGVkWFkgPQorKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworKyAgICBU
SW50ZXJtQmluYXJ5ICphc3NpZ25Ub1kgPSBuZXcgVEludGVybUJpbmFyeShFT3BBc3NpZ24sIGNv
cnJlY3RlZFhZLCBwbHVzUGl2b3QpOworKworKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorKyAgICB7CisrICAgICAgICBUSW50
ZXJtQmluYXJ5ICpub2Rlc1tdID0ge2Fzc2lnbm1lbnQsIGFzc2lnblRvWX07CisrICAgICAgICBp
bnNlcnRTZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihu
b2RlcyksIHN0ZDo6ZW5kKG5vZGVzKSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVy
LnZhbGlkYXRlQVNUKCZyb290KTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2Vy
dEZyYWdDb29yZENvcnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBp
bGVPcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAmZHJpdmVyVW5pZm9ybXMpCisreworKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisrICAg
IFRJbnRlcm1CaW5hcnkgJnBpdm90ICAgICAgICA9ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRy
aXZlclVuaWZvcm1zLCBrSGFsZlJlbmRlckFyZWEpOworKyAgICBUSW50ZXJtQmluYXJ5ICpmcmFn
Um90YXRpb24gPSAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfUFJFX1JPVEFUSU9OKQorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0aW9uKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyOworKyAgICByZXR1cm4gUm90YXRlQW5kRmxpcEJ1aWx0
aW5WYXJpYWJsZShjb21waWxlciwgcm9vdCwgaW5zZXJ0U2VxdWVuY2UsIGZsaXBYWSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xf
RnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl2b3QsIGZyYWdSb3RhdGlvbik7CisrfQorKworK1RJbnRl
cm1CaW5hcnkgKkdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihjb25z
dCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVEludGVybUJpbmFyeSAqZGVw
dGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJh
bmdlKTsKKysKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0U3Ry
dWN0LCBkZXB0aFJhbmdlLCBDcmVhdGVJbmRleE5vZGUoMykpOworK30KKysKKyt2b2lkIERlY2xh
cmVSaWdodEJlZm9yZU1haW4oVEludGVybUJsb2NrICZyb290LCBjb25zdCBUVmFyaWFibGUgJnZh
cikKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwg
e25ldyBUSW50ZXJtRGVjbGFyYXRpb257JnZhcn19KTsKKyt9CisrCisrdm9pZCBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUpCisreworKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgmcm9vdCks
CisrICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2V7bmV3IFRJbnRlcm1E
ZWNsYXJhdGlvbntCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb2xvcigpfX0pOworK30KKysKKyt2
b2lkIEFkZEZyYWdEZXB0aERlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRh
YmxlICZzeW1ib2xUYWJsZSkKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFp
bkluZGV4KCZyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0RlcHRoKCl9
fSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKyAgICBj
b25zdCBpbnQgbWF4RHJhd0J1ZmZlcnMgID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuTWF4RHJh
d0J1ZmZlcnM7CisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGUgICAgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEpOworKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworKyAgICBUSW50ZXJtU2VxdWVuY2Ug
ZGVjbGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZTsKKysKKysgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRh
XzAsMSwyLDMKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQor
KyAgICB7CisrICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJn
bF9GcmFnRGF0YV8iKSArIDIpOworKyAgICAgICAgYnVpbGRlciA8PCAiZ2xfRnJhZ0RhdGFfIjsK
KysgICAgICAgIGJ1aWxkZXIuYXBwZW5kRGVjaW1hbChpKTsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xGcmFnRGF0YSA9CisrICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFi
bGUsIGJ1aWxkZXIsIGdsX0ZyYWdEYXRhVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb246OlVOREVGSU5FRCk7CisrICAg
ICAgICBnbEZyYWdEYXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworKyAgICAgICAgZGVj
bGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntn
bEZyYWdEYXRhfSk7CisrICAgIH0KKysgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWlu
SW5kZXgoJnJvb3QpLCBkZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGludGVybmFsIGdsX0ZyYWdEYXRhIGFycmF5IHR5cGUsIGNvbXBhdGlibGUgd2l0aCBp
bmRleGluZyBzeW50YXguCisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworKyAgICBnbF9GcmFn
RGF0YVR5cGVBcnJheS0+bWFrZUFycmF5KG1heERyYXdCdWZmZXJzKTsKKysgICAgY29uc3QgVFZh
cmlhYmxlICpnbEZyYWdEYXRhR2xvYmFsID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIElt
bXV0YWJsZVN0cmluZygiZ2xfRnJhZ0RhdGEiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9s
VHlwZTo6QnVpbHRJbik7CisrCisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFn
RGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRh
IikpOworKyAgICBBU1NFUlQob3JpZ2luYWxHTEZyYWdEYXRhKTsKKysKKysgICAgLy8gUmVwbGFj
ZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGdsb2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKysgICAg
aWYgKCFSZXBsYWNlVmFyaWFibGUoJmNvbXBpbGVyLCAmcm9vdCwgJihvcmlnaW5hbEdMRnJhZ0Rh
dGEtPnZhcmlhYmxlKCkpLCBnbEZyYWdEYXRhR2xvYmFsKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIEFzc2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0
ZSB0byBhbiBvdXRwdXQKKysgICAgVEludGVybUJsb2NrICppbnNlcnRTZXF1ZW5jZSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsg
aSsrKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmdsRnJhZ0RhdGFTbG90ICAgICAg
ICAgPSBuZXcgVEludGVybVN5bWJvbChnbEZyYWdEYXRhU2xvdHNbaV0pOworKyAgICAgICAgVElu
dGVybVR5cGVkICpnbEZyYWdEYXRhR2xvYmFsU3ltYm9sID0gbmV3IFRJbnRlcm1TeW1ib2woZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAgICAgICAgICAgICAg
ICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwgaSk7CisrICAgICAg
ICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgICAgICBuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xGcmFnRGF0YVNsb3QsICZhY2Nlc3MpOworKyAg
ICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50KTsKKysgICAg
fQorKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290LCBpbnNl
cnRTZXF1ZW5jZSwgJnN5bWJvbFRhYmxlKTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEVtdWxhdGVJbnN0YW5jZUlEKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcykKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorKyAgICAgICAg
Q3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0VtdUluc3RhbmNlSURGaWVs
ZC5yYXdOYW1lKCkuZGF0YSgpKTsKKysgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrICAgIHJldHVybiBSZXBsYWNl
VmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFu
Y2VJRCk7CisrfQorKworKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ky8vIG1hbnVhbGx5LgorKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBn
bF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKysvLyBnbF9Qb3NpdGlvbi55ID0g
Z2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVyICZj
b21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVN3aXp6bGUgJm5lZ0ZsaXBZKQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9z
aXRpb24gID0gQnVpbHRJblZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpOworKyAgICBUSW50ZXJtU3lt
Ym9sICpwb3NpdGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKysKKysgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZOworKyAgICBzd2l6emxlT2Zmc2V0WS5wdXNoX2Jh
Y2soMSk7CisrICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6
bGUocG9zaXRpb25SZWYsIHN3aXp6bGVPZmZzZXRZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBl
eHByZXNzaW9uICJnbF9Qb3NpdGlvbi55ICogbmVnRmxpcFkiCisrICAgIFRJbnRlcm1CaW5hcnkg
KmludmVyc2VZID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5
KCksICZuZWdGbGlwWSk7CisrCisrICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9z
aXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorKyAgICBUSW50ZXJt
VHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKysgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFz
c2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNz
aWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJl
dHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZz
eW1ib2xUYWJsZSk7CisrfQorKworK30gIC8vIG5hbWVzcGFjZQorKworK1RyYW5zbGF0b3JNZXRh
bERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0KHNoOjpHTGVudW0gdHlwZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlclNwZWMgc3BlYywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91
dHB1dCBvdXRwdXQpCisrICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkKKyt7fQor
KworKy8vIHN0YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0Q292
ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCisreworKyAgICByZXR1cm4gY29uc3RhbnRfbmFt
ZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7CisrfQorKworKy8vIHN0
YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0UmFzdGVyaXphdGlv
bkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7CisrICAgIHJldHVybiBjb25zdGFudF9uYW1l
czo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOworK30KKysK
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRSYXN0
ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUoKTsKKysKKysgICAgVFR5cGUg
KmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworKyAgICBib29sVHlwZS0+c2V0UXVhbGlm
aWVyKEV2cUNvbnN0KTsKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisrICAg
ICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6
YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCksIGJvb2xUeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5zeW1i
b2xUeXBlKCkpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIC8vIENyZWF0ZSB2ZWM0KC0z
LCAtMywgLTMsIDEpOgorKyAgICBhdXRvIHZlYzRUeXBlICAgICAgICAgICAgID0gbmV3IFRUeXBl
KEVidEZsb2F0LCA0KTsKKysgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50
ZXJtU2VxdWVuY2UoKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUo
LTMuMGYpKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYp
KTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysg
ICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoMS4wZikpOworKyAgICBUSW50
ZXJtQWdncmVnYXRlICpjb25zdFZhckNvbnN0cnVjdG9yID0KKysgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworKworKyAgICAv
LyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uID0gdmVjNCgtMywgLTMsIC0zLCAx
KSIKKysgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCA9CisrICAgICAgICBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25SZWYtPmRlZXBDb3B5KCksIGNv
bnN0VmFyQ29uc3RydWN0b3IpOworKworKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9
IG5ldyBUSW50ZXJtQmxvY2s7CisrICAgIGRpc2NhcmRCbG9jay0+YXBwZW5kU3RhdGVtZW50KGFz
c2lnbm1lbnQpOworKworKyAgICBUSW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBU
SW50ZXJtU3ltYm9sKGRpc2NhcmRFbmFibGVkVmFyKTsKKysgICAgVEludGVybUlmRWxzZSAqaWZD
YWxsICAgICAgICAgPSBuZXcgVEludGVybUlmRWxzZShkaXNjYXJkRW5hYmxlZCwgZGlzY2FyZEJs
b2NrLCBudWxscHRyKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywg
JnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOworK30KKysKKysvLyBNZXRhbCBuZWVkcyB0byBp
bnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJhbmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4g
ZGVwdGggbmVhciA+IGRlcHRoIGZhcgorKy8vIFRoaXMgaXMgYWNoaWV2ZWQgYnkgbXVsdGlwbHkg
dGhlIGRlcHRoIHZhbHVlIHdpdGggc2NhbGUgdmFsdWUgc3RvcmVkIGluCisrLy8gZHJpdmVyIHVu
aWZvcm0ncyBkZXB0aFJhbmdlLnJlc2VydmVkCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgY29uc3QgVFZhcmlhYmxl
ICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisrICAgIFRJbnRl
cm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7Mn07CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenps
ZU9mZnNldFopOworKworKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpTY2FsZSA9IEdldERy
aXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJVbmlmb3Jtcyk7Cisr
CisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFu
Z2UucmVzZXJ2ZWQiLgorKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcgVEludGVybUJp
bmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2NhbGUpOworKwor
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlv
bi56ICogZGVwdGhSYW5nZS5yZXNlcnZlZCIKKysgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpM
SFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1l
bnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxI
UywgelNjYWxlKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJv
b3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKKyt9CisrCisrdm9pZCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVs
ZHMoCisrICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0KQorK3sKKysgICAgLy8g
QWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBi
dWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKysgICAgLy8gZXF1aXZhbGVudCBmdW5j
dGlvbmFsaXR5LCBuZWVkcyB0byBlbXVsYXRlIGl0IHVzaW5nIGZyYWdtZW50IHNoYWRlcidzIFtb
c2FtcGxlX21hc2tdXSBvdXRwdXQKKysgICAgLy8gdmFsdWUuCisrICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga05vU291cmNlTG9jLCBrQ292ZXJhZ2VNYXNrRmllbGQuc3ltYm9sVHlwZSgpKTsKKysg
ICAgZmllbGRzT3V0LnB1c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisrCisrICAgIGlmICht
RW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICB7CisrICAgICAgICBURmllbGQgKmVtdUluc3RhbmNl
SURGaWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmll
bGQucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtOb1NvdXJjZUxvYywga0VtdUluc3RhbmNlSURGaWVsZC5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworKyAgICB9
CisrfQorKworK1RJbnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZl
clVuaWZvcm1OZWdGbGlwWVJlZigKKysgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3QKKyt7CisrICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55Igor
KyAgICBUSW50ZXJtQmluYXJ5ICpuZWdGbGlwWFkgICAgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrTmVnRmxpcFhZKTsKKysgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVP
ZmZzZXRZID0gezF9OworKyAgICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVElu
dGVybVN3aXp6bGUobmVnRmxpcFhZLCBzd2l6emxlT2Zmc2V0WSk7CisrICAgIHJldHVybiBuZWdG
bGlwWTsKKyt9CisrCisrc3RhdGljIHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5
d29yZHMoKQorK3sKKysgICAgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKysK
KysgICAga2V5d29yZHMuZW1wbGFjZSgiYWxpZ25hcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJhbGlnbm9mIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImFzX3R5cGUiKTsKKysgICAga2V5
d29yZHMuZW1wbGFjZSgiYXV0byIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjaGFyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNs
YXNzIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nhc3QiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiY29uc3RhbnQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RleHBy
Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBlIik7CisrICAgIGtleXdvcmRzLmVt
cGxhY2UoImRlbGV0ZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZXZpY2UiKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
ImVudW0iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImV4dGVybiIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmFnbWVudCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJmcmllbmQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZ290byIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJoYWxmIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOworKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlu
dDMyX3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7Cisr
ICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWFp
bjAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKKysgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJuYW1lc3BhY2UiKTsKKysg
ICAga2V5d29yZHMuZW1wbGFjZSgibmV3Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhj
ZXB0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm51bGxwdHJfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJudWxscHRyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm92ZXJyaWRlIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInByaXZhdGUiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInB0cmRpZmZfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJw
dWJsaWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgicmVnaXN0ZXIiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsK
KysgICAga2V5d29yZHMuZW1wbGFjZSgic2lnbmVkIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InNpemVfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplb2YiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fz
c2VydCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfY2FzdCIpOworKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJzdGF0aWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGVtcGxhdGUi
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhpcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ0aHJlYWRfbG9jYWwiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdyb3VwX2ltYWdlYmxvY2siKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyb3ci
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHJ5Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InR5cGVkZWYiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWlkIik7CisrICAgIGtleXdv
cmRzLmVtcGxhY2UoInR5cGVuYW1lIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVjaGFyIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQzMl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQ2NF90Iik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInVpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5p
b24iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKysgICAga2V5d29yZHMu
ZW1wbGFjZSgidXNob3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaW5nIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2aXJ0
dWFsIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7CisrICAgIGtleXdvcmRz
LmVtcGxhY2UoIndjaGFyX3QiKTsKKysKKysgICAgcmV0dXJuIGtleXdvcmRzOworK30KKysKKyti
b29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxvY2sgJnJv
b3QsIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCisreworKyAgICBUU3ltYm9sVGFi
bGUgJnN5bWJvbFRhYmxlID0gZ2V0U3ltYm9sVGFibGUoKTsKKysgICAgSWRHZW4gaWRHZW47Cisr
ICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKysKKysgICAgaWYgKCFXcmFwTWFpbigqdGhp
cywgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2JqOworKyNpZiAw
CisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgewor
KyAgICAgICAgaWYgKCFTaGFkZXJCdWlsdGluc1dvcmthcm91bmQodGhpcywgJnJvb3QsICZzeW1i
b2xUYWJsZSwgY29tcGlsZU9wdGlvbnMpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorKworKyAgICAvLyBTdHJpcCBh
bnkgaW5hY3RpdmUgdmFyaWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisrICAgIGlmICghUmVtb3Zl
SW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXModGhpcywgJnJvb3QsIGdldEF0dHJpYnV0ZXMoKSwg
Z2V0SW5wdXRWYXJ5aW5ncygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldE91dHB1dFZhcmlhYmxlcygpLCBnZXRVbmlmb3JtcygpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIFdyaXRlIG91
dCBkZWZhdWx0IHVuaWZvcm1zIGludG8gYSB1bmlmb3JtIGJsb2NrIGFzc2lnbmVkIHRvIGEgc3Bl
Y2lmaWMgc2V0L2JpbmRpbmcuCisrICAgIGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAg
ICA9IDA7CisrICAgIGludCBhZ2dyZWdhdGVUeXBlc1VzZWRGb3JVbmlmb3JtcyA9IDA7CisrICAg
IGludCBhdG9taWNDb3VudGVyQ291bnQgICAgICAgICAgICA9IDA7CisrICAgIGZvciAoY29uc3Qg
YXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1zKCkpCisrICAgIHsKKysgICAgICAgIGlmICghdW5p
Zm9ybS5pc0J1aWx0SW4oKSAmJiB1bmlmb3JtLmFjdGl2ZSAmJiAhZ2w6OklzT3BhcXVlVHlwZSh1
bmlmb3JtLnR5cGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZGVmYXVsdFVuaWZvcm1D
b3VudDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh1bmlmb3JtLmlzU3RydWN0KCkgfHwg
dW5pZm9ybS5pc0FycmF5T2ZBcnJheXMoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICArK2Fn
Z3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYg
KHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVuaWZvcm0udHlwZSkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgKythdG9taWNDb3VudGVyQ291bnQ7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zID4g
MCkKKysgICAgeworKyAgICAgICAgaWYgKCFOYW1lRW1iZWRkZWRTdHJ1Y3RVbmlmb3Jtcyh0aGlz
LCAmcm9vdCwgJnN5bWJvbFRhYmxlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBib29sIHJld3JpdGVTdHJ1Y3RTYW1wbGVy
c1Jlc3VsdDsKKysgICAgICAgIGludCByZW1vdmVkVW5pZm9ybXNDb3VudDsKKysKKysgICAgICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1VTRV9PTERfUkVXUklURV9TVFJVQ1RfU0FNUExFUlMp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzT2xkKHRoaXMsICZyb290LCAm
c3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVz
dWx0ID0KKysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrCisr
ICAgICAgICBpZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBkZWZhdWx0VW5p
Zm9ybUNvdW50IC09IHJlbW92ZWRVbmlmb3Jtc0NvdW50OworKworKyNpZiAwCisrICAgICAgICAv
LyBXZSBtdXN0IGRlY2xhcmUgdGhlIHN0cnVjdCB0eXBlcyBiZWZvcmUgdXNpbmcgdGhlbS4KKysg
ICAgICAgIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciBzdHJ1Y3RUeXBlc1RyYXZlcnNlcihv
dXRwdXRNU0wpOworKyAgICAgICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2Vy
KTsKKysgICAgICAgIGlmICghc3RydWN0VHlwZXNUcmF2ZXJzZXIudXBkYXRlVHJlZSh0aGlzLCBy
b290KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9
CisrI2VuZGlmCisrICAgIH0KKysKKysgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFU
RV9TRUFNRlVMX0NVQkVfTUFQX1NBTVBMSU5HKQorKyAgICB7CisrICAgICAgICBpZiAoIVJld3Jp
dGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysjaWYgMAorKyAgICAvLyBXcml0ZSBk
ZWZhdWx0IHVuaWZvcm0gYmxvY2sKKysgICAgaWYgKGRlZmF1bHRVbmlmb3JtQ291bnQgPiAwKQor
KyAgICB7CisrICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0gZ2w6OkZyb21HTGVu
dW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7CisrICAgICAgICBzaW5rIDw8ICJc
bnN0cnVjdCAiIDw8IGtEZWZhdWx0VW5pZm9ybU5hbWVzW3NoYWRlclR5cGVdIDw8ICJcbntcbiI7
CisrICAgICAgICBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIGRlZmF1bHRUcmF2ZXJz
ZXIoJnNpbmssIGdldEhhc2hGdW5jdGlvbigpLCAmZ2V0TmFtZU1hcCgpKTsKKysgICAgICAgIHJv
b3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKysgICAgICAgIGlmICghZGVmYXVsdFRy
YXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpbmsgPDwgIn07XG4iOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMg
PSAqWyZdKCkgeworKyAgICAgICAgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NI
QURFUikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gQWRkQ29tcHV0ZURyaXZlclVu
aWZvcm1zVG9TaGFkZXIocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiBhZGRp
dGlvbmFsRmllbGRzOworKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZl
clVuaWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisrICAgICAgICAgICAgcmV0dXJuIEFk
ZEdyYXBoaWNzRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSwgYWRkaXRp
b25hbEZpZWxkcyk7CisrICAgICAgICB9CisrICAgIH0oKTsKKysKKysgICAgaWYgKGF0b21pY0Nv
dW50ZXJDb3VudCA+IDApCisrICAgIHsKKysgICAgICAgIC8vIEFOR0xFVW5pZm9ybXMuYWNiQnVm
ZmVyT2Zmc2V0cworKyAgICAgICAgY29uc3QgVEludGVybUJpbmFyeSAqYWNiQnVmZmVyT2Zmc2V0
cyA9CisrICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a0FjYkJ1ZmZlck9mZnNldHMpOworKworKyAgICAgICAgaWYgKCFSZXdyaXRlQXRvbWljQ291bnRl
cnModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwgYWNiQnVmZmVyT2Zmc2V0cykpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrICAg
IGVsc2UgaWYgKGdldFNoYWRlclZlcnNpb24oKSA+PSAzMTApCisrICAgIHsKKysgICAgICAgIC8v
IFZ1bGthbiBkb2Vzbid0IHN1cHBvcnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNz
LCBidXQgd2UndmUgc2VlbgorKyAgICAgICAgLy8gY2FzZXMgd2hlcmUgYnVpbHRpbnMgYXJlIHVz
aW5nIGl0IGV2ZW4gd2l0aCBubyBhY3RpdmUgYXRvbWljIGNvdW50ZXJzLgorKyAgICAgICAgLy8g
VGhpcyBwYXNzIHNpbXBseSByZW1vdmVzIHRob3NlIGJ1aWx0aW5zIGluIHRoYXQgc2NlbmFyaW8u
CisrICAgICAgICBpZiAoIVJlbW92ZUF0b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisr
ICAgIHsKKysgICAgICAgIGlmICghUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2ZXJVbmlmb3Jt
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyNpZiAwCisrICAgICAgICAvLyBBZGQgc3Bl
Y2lhbGl6YXRpb24gY29uc3RhbnQgZGVjbGFyYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhlIHNwZWNpYWxpemF0aW9uCisrICAgICAgICAvLyBjb25zdGFudCBpcyBpcnJlbGV2YW50LCBh
cyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4KKysgICAgICAgIGlm
IChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9O
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25zdGFudF9pZD0i
CisrICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odms6OlNwZWNpYWxp
emF0aW9uQ29uc3RhbnRJZDo6TGluZVJhc3RlckVtdWxhdGlvbikKKysgICAgICAgICAgICAgICAg
IDw8ICIpIGNvbnN0IGJvb2wgIiA8PCBrTGluZVJhc3RlckVtdWxhdGlvblNwZWNDb25zdFZhck5h
bWUgPDwgIiA9IGZhbHNlO1xuXG4iOworKyAgICAgICAgfQorKyNlbmRpZgorKyAgICB9CisrCisr
ICAgIHsKKysgICAgICAgIGJvb2wgdXNlc0luc3RhbmNlSWQgPSBmYWxzZTsKKysgICAgICAgIGZv
ciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmICh2YXIuaXNCdWlsdEluKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBpZiAodmFyLm5hbWUgPT0gImdsX0luc3RhbmNlSUQiKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAodXNlc0luc3RhbmNlSWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgcm9vdC5pbnNlcnRD
aGlsZE5vZGVzKAorKyAgICAgICAgICAgICAgICBGaW5kTWFpbkluZGV4KCZyb290KSwKKysgICAg
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJ
blZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCl9fSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgLy8gRGVjbGFyZSBnbF9GcmFnQ29sb3IgYW5kIGdsRnJhZ0RhdGEgYXMgd2ViZ2xfRnJhZ0Nv
bG9yIGFuZCB3ZWJnbF9GcmFnRGF0YQorKyAgICAvLyBpZiBpdCdzIGNvcmUgcHJvZmlsZSBzaGFk
ZXJzIGFuZCB0aGV5IGFyZSB1c2VkLgorKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKysgICAgeworKyAgICAgICAgYm9vbCB1c2VzUG9pbnRDb29yZCAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisrICAgICAgICBi
b29sIHVzZXNGcm9udEZhY2luZyA9IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJW
YXJpYWJsZSAmaW5wdXRWYXJ5aW5nIDogbUlucHV0VmFyeWluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKGlucHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVzZXNQb2ludENvb3Jk
ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChp
bnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb29yZCA9IHRydWU7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYXJ5aW5nLm5hbWUgPT0gImds
X0Zyb250RmFjaW5nIikKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
dXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZhbHNlOwor
KyAgICAgICAgYm9vbCB1c2VzRnJhZ0RhdGEgID0gZmFsc2U7CisrICAgICAgICBib29sIHVzZXNG
cmFnRGVwdGggPSBmYWxzZTsKKysgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91
dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGlmIChvdXRwdXRWYXJ5aW5nLmlzQnVpbHRJbigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKG91dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRydWU7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFy
eWluZy5uYW1lID09ICJnbF9GcmFnRGF0YSIpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIHVzZXNGcmFnRGF0YSA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVw
dGgiKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0Rl
cHRoID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdDb2xvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihyb290LCBzeW1ib2xUYWJsZSk7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdEYXRhKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICghQWRkRnJh
Z0RhdGFEZWNsYXJhdGlvbigqdGhpcywgcm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnRGVwdGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgQWRkRnJh
Z0RlcHRoRGVjbGFyYXRpb24ocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKworKyNp
ZiAwCisrICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVf
UkFTVEVSX0VNVUxBVElPTikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIUFkZEJyZXNl
bmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVPcHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9s
VGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJV
bmlmb3JtcywgdXNlc0ZyYWdDb29yZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyNlbmRpZgorKwor
KyAgICAgICAgYm9vbCB1c2VQcmVSb3RhdGlvbiA9IGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BS
RV9ST1RBVElPTjsKKysKKysgICAgICAgIGlmICh1c2VzUG9pbnRDb29yZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVy
VW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisrICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gJnBpdm90ID0gKkNyZWF0ZUZsb2F0Tm9kZSgwLjVmKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAgICB1
c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtG
cmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJvdGF0ZUFuZEZsaXBC
dWlsdGluVmFyaWFibGUoKnRoaXMsIHJvb3QsICpHZXRNYWluU2VxdWVuY2Uocm9vdCksIGZsaXBY
WSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0
SW5WYXJpYWJsZTo6Z2xfUG9pbnRDb29yZCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJhZ1Jv
dGF0aW9uKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290
LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludENvb3JkKCkpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnQ29vcmQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHJpdmVyVW5pZm9ybXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb29yZCgpKTsKKysg
ICAgICAgIH0KKysKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlw
WFkgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKysg
ICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAg
ICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5
KHRoaXMsICZyb290LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZy
YWdSb3RhdGlvbikpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNGcm9u
dEZhY2luZykKKysgICAgICAgIHsKKysgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0Zyb250RmFjaW5nKCkpOworKyAgICAgICAgfQor
KworKyAgICAgICAgRW1pdEVhcmx5RnJhZ21lbnRUZXN0c0dMU0woKnRoaXMsIHNpbmspOworKyAg
ICB9CisrICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQor
KyAgICB7CisrICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFy
aWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKworKyAgICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZy
b290LCBCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50U2l6ZSgpLT5uYW1lKCkpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIERlY2xhcmVSaWdodEJlZm9yZU1haW4ocm9vdCwgKkJ1aWx0SW5WYXJp
YWJsZTo6Z2xfUG9pbnRTaXplKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKEZpbmRT
eW1ib2xOb2RlKCZyb290LCBCdWlsdEluVmFyaWFibGU6OmdsX1ZlcnRleEluZGV4KCktPm5hbWUo
KSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFSZXBsYWNlVmFyaWFibGUodGhpcywg
JnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAma2dsX1ZlcnRleEluZGV4TWV0YWwpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsIGtnbF9WZXJ0ZXhJbmRleE1ldGFs
KTsKKysgICAgICAgIH0KKysKKysjaWYgMAorKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYg
U0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKCFBZGRCcmVzZW5oYW1FbXVsYXRpb25WUyh0aGlzLCByb290LCAmc3ltYm9s
VGFibGUsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBBZGQgYSBtYWNybyB0byBkZWNsYXJlIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAg
ICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKysjZW5kaWYKKysKKysgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKysgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVy
VHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4oKnRoaXMsIHJvb3QpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8vIFNl
YXJjaCBmb3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQg
dG8gZG8gc29tZSByZXBsYWNlbWVudHMuCisrICAgICAgICBib29sIHVzZUNsaXBEaXN0YW5jZSA9
IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWlu
ZyA6IG1PdXRwdXRWYXJ5aW5ncykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob3V0cHV0
VmFyeWluZy5uYW1lID09ICJnbF9DbGlwRGlzdGFuY2UiKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgdXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZUNsaXBE
aXN0YW5jZSAmJiAhUmVwbGFjZUNsaXBEaXN0YW5jZUFzc2lnbm1lbnRzKAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghdHJhbnNm
b3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIUFwcGVuZFZlcnRleFNoYWRlckRlcHRoQ29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKwor
KyAgICAgICAgaWYgKChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT04pICE9IDAg
JiYKKysgICAgICAgICAgICAhQXBwZW5kUHJlUm90YXRpb24oKnRoaXMsIHJvb3QsIGRyaXZlclVu
aWZvcm1zKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0dFT01FVFJZ
X1NIQURFUikKKysgICAgeworKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxheW91dFF1YWxp
ZmllcnMoCisrICAgICAgICAgICAgc2luaywgZ2V0R2VvbWV0cnlTaGFkZXJJbnB1dFByaW1pdGl2
ZVR5cGUoKSwgZ2V0R2VvbWV0cnlTaGFkZXJJbnZvY2F0aW9ucygpLAorKyAgICAgICAgICAgIGdl
dEdlb21ldHJ5U2hhZGVyT3V0cHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlck1h
eFZlcnRpY2VzKCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgQVNTRVJU
KGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisrICAgICAgICBFbWl0V29y
a0dyb3VwU2l6ZUdMU0woKnRoaXMsIHNpbmspOworKyAgICB9CisrCisrICAgIGlmIChnZXRTaGFk
ZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgeworKyAgICAgICAgYXV0byAmbmVn
RmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKysK
KysgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGlmICghRW11bGF0ZUluc3RhbmNlSUQoKnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBv
c2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QsIG5lZ0ZsaXBZKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIWluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
ICghdmFsaWRhdGVBU1QoJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFSZXdyaXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBH
ZXRNc2xLZXl3b3JkcygpKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrCisrICAgIGlmICghUmVkdWNlSW50ZXJmYWNlQmxvY2tzKCp0aGlzLCByb290KSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdGVD
b21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IHNp
emUgcmVxdWlyZWQgdG8gcGFzcyBhbGwgdGhlIHRlc3RzIGluCisrICAgIC8vIChkRVFQLUdMRVMz
LmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisrICAgIC8vIFRoaXMg
dmFsdWUgY291bGQgaW4gcHJpbmNpcGxlIGJlIHNtYWxsZXIuCisrICAgIGNvbnN0IHNpemVfdCBo
b2lzdFRocmVzaG9sZFNpemUgPSAyNTY7CisrICAgIGlmICghSG9pc3RDb25zdGFudHMoKnRoaXMs
IHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgSW52YXJpYW50cyBpbnZhcmlhbnRzOworKyAgICBp
ZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50cykp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBTeW1ib2xF
bnYgc3ltYm9sRW52KCp0aGlzLCByb290KTsKKysKKysgICAgaWYgKCFBZGRFeHBsaWNpdFR5cGVD
YXN0cygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7Cisr
ICAgIGlmICghUmV3cml0ZVBpcGVsaW5lcygqdGhpcywgcm9vdCwgaWRHZW4sIGRyaXZlclVuaWZv
cm1zLCBzeW1ib2xFbnYsIGludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBw
aXBlbGluZVN0cnVjdHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoKnRoaXMsIHN5bWJvbEVu
diwgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVJld3JpdGVV
bmFkZHJlc3NhYmxlUmVmZXJlbmNlcygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghUmV3cml0ZU91dEFy
Z3MoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBpZiAoIVRvcG9zb3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52
LCByb290LCBwcGMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgaWYgKCFFbWl0TWV0YWwoKnRoaXMsIHJvb3QsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMs
IGludmFyaWFudHMsIHN5bWJvbEVudiwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIEFTU0VSVCh2YWxpZGF0ZUFTVCgmcm9vdCkpOworKworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5z
bGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdu
b3N0aWNzKQorK3sKKysgICAgaWYgKCFyb290KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCku
b2JqOworKworKyAgICBib29sIHByZWNpc2lvbkVtdWxhdGlvbiA9IGZhbHNlOworKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysKKysjaWYgMAorKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGls
ZU9wdGlvbnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworKworKyAg
ICBUT3V0cHV0TVNMIG91dHB1dE1TTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAmZ2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJz
aW9uKCksIGdldE91dHB1dFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lz
aW9uRW11bGF0aW9uLCBlbmFibGVQcmVjaXNpb24sIGNvbXBpbGVPcHRpb25zKTsKKysjZW5kaWYK
KysKKysgICAgaWYgKCF0cmFuc2xhdGVJbXBsKCpyb290LCBjb21waWxlT3B0aW9ucykpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyNpZiAwCisrICAgIC8vIFdy
aXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgorKyAgICByb290LT50cmF2ZXJzZShvdXRwdXRNU0wpOwor
KyNlbmRpZgorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpCisreworKyAgICAv
LyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJhbnNmb3JtYXRpb24uCisrICAgIHJldHVybiBmYWxz
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLmVmY2IzMDYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oCitAQCAtMCwwICsxLDEzMiBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrY2xhc3MgVE91dHB1dE1TTDsKKysKKyt0eXBlZGVmIHN0ZDo6
dW5vcmRlcmVkX21hcDxzaXplX3QsIHN0ZDo6c3RyaW5nPiBvcmlnaW5hbE5hbWVzTWFwOworK3R5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5k
aW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+
IHRleHR1cmVCaW5kaW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBzaXplX3Q+IHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwOworKworK2NsYXNzIFRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb24KKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorKyAgICB+VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisrCisr
ICAgIHZvaWQgYWRkT3JpZ2luYWxOYW1lKGNvbnN0IHNpemVfdCBpZCwgY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpCisrICAgIHsKKysgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0KHtpZCwgbmFt
ZX0pOworKyAgICB9CisrICAgIHZvaWQgYWRkU2FtcGxlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUsIHNpemVfdCBzYW1wbGVyQmluZGluZykKKysgICAgeworKyAgICAgICAgc2FtcGxl
ckJpbmRpbmdzLmluc2VydCh7bmFtZSwgc2FtcGxlckJpbmRpbmd9KTsKKysgICAgfQorKyAgICB2
b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdGV4
dHVyZUJpbmRpbmcpCisrICAgIHsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5pbnNlcnQoe25h
bWUsIHRleHR1cmVCaW5kaW5nfSk7CisrICAgIH0KKysgICAgdm9pZCBhZGRVbmlmb3JtQnVmZmVy
QmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgc2l6ZV90IHVuaWZvcm1CdWZmZXJCaW5k
aW5nKQorKyAgICB7CisrICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1l
LCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworKyAgICB9CisrICAgIHN0ZDo6c3RyaW5nIGdldE9y
aWdpbmFsTmFtZShjb25zdCBzaXplX3QgaWQpIHsgcmV0dXJuIG9yaWdpbmFsTmFtZXMuYXQoaWQp
OyB9CisrICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorKyAgICB0ZXh0dXJlQmluZGluZ01hcCBnZXRUZXh0
dXJlQmluZGluZ3MoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlQmluZGluZ3M7IH0KKysgICAgdW5p
Zm9ybUJ1ZmZlckJpbmRpbmdNYXAgZ2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzOyB9CisrICAgIHNpemVfdCBnZXRTYW1wbGVyQmlu
ZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0
byBpdCA9IHNhbXBsZXJCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHNh
bXBsZXJCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHNpemVf
dCBnZXRUZXh0dXJlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAg
eworKyAgICAgICAgYXV0byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAg
ICAgaWYgKGl0ICE9IHRleHR1cmVCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsK
KysgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAg
ICB9CisrICAgIHNpemVfdCBnZXRVbmlmb3JtQnVmZmVyQmluZGluZyhjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IHVuaWZvcm1CdWZmZXJC
aW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHVuaWZvcm1CdWZmZXJCaW5k
aW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHZvaWQgcmVzZXQoKQor
KyAgICB7CisrICAgICAgICBvcmlnaW5hbE5hbWVzLmNsZWFyKCk7CisrICAgICAgICBzYW1wbGVy
QmluZGluZ3MuY2xlYXIoKTsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5jbGVhcigpOworKyAg
ICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmNsZWFyKCk7CisrICAgIH0KKysKKysgIHByaXZh
dGU6CisrICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKysgICAgc2FtcGxlckJp
bmRpbmdNYXAgc2FtcGxlckJpbmRpbmdzOworKyAgICB0ZXh0dXJlQmluZGluZ01hcCB0ZXh0dXJl
QmluZGluZ3M7CisrICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZmZXJCaW5k
aW5nczsKKyt9OworKworK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBUQ29t
cGlsZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xl
bnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworKwor
KyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpn
ZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKysj
ZW5kaWYKKysKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNj
YXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFu
Y2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysgICAgVHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiAqZ2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHsgcmV0dXJu
ICZ0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOyB9CisrCisrICBwcm90ZWN0ZWQ6CisrICAgIGJv
b2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKysgICAgICAgICAgICAgICAgICAgU2hD
b21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgUGVyZm9y
bWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKysKKysgICAgQU5H
TEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZyb290LCBTaENv
bXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBi
b29sIHNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpIG92ZXJyaWRlOworKwor
KyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKTsK
KysgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9n
aWMoVEludGVybUJsb2NrICZyb290KTsKKysKKysgICAgdm9pZCBjcmVhdGVBZGRpdGlvbmFsR3Jh
cGhpY3NEcml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0
KTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5p
Zm9ybU5lZ0ZsaXBZUmVmKAorKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3Q7CisrCisrICAgIGJvb2wgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworKwor
KyAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
PSB7fTsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjUzNDExODAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKK0BAIC0w
LDAgKzEsOTUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVy
cy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1
aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKytj
bGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgICAgU3ltYm9sRW52
ICZtU3ltYm9sRW52OworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisrICAgIHt9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNh
bGxOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYXJnQ291bnQg
PSBjYWxsTm9kZS5nZXRDaGlsZENvdW50KCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmcmV0VHlw
ZSAgPSBjYWxsTm9kZS5nZXRUeXBlKCk7CisrCisrICAgICAgICBpZiAoY2FsbE5vZGUuaXNDb25z
dHJ1Y3RvcigpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJhc2ljVHlw
ZShyZXRUeXBlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChhcmdDb3Vu
dCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKysgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29lcmNlU2ltcGxlKHJldFR5cGUsIFN1YlZlY3Rv
cihhcmcsIDAsIDEpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT0gMSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZh
cmcgICA9IEdldEFyZyhjYWxsTm9kZSwgMCk7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChh
cmdUeXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3IoYXJnLCAw
LCByZXRUeXBlLmdldE5vbWluYWxTaXplKCkpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50OyArK2kpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnID0gR2V0QXJnKGNhbGxOb2RlLCBpKTsKKysgICAgICAgICAgICAg
ICAgICAgIFNldEFyZyhjYWxsTm9kZSwgaSwgQ29lcmNlU2ltcGxlKHJldFR5cGUuZ2V0QmFzaWNU
eXBlKCksIGFyZykpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKHJldFR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChhcmdDb3VudCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAw
KTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUuaXNNYXRyaXgoKSkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VHlwZS5n
ZXRDb2xzKCkgIT0gYXJnVHlwZS5nZXRDb2xzKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0VHlwZS5nZXRSb3dzKCkgIT0gYXJnVHlwZS5nZXRSb3dzKCkpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUFy
ZyB0ZW1wbGF0ZUFyZ3NbXSA9IHtyZXRUeXBlLmdldENvbHMoKSwgcmV0VHlwZS5nZXRSb3dzKCl9
OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVN5bWJvbEVudi5jYWxsRnVu
Y3Rpb25PdmVybG9hZCgKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUoImNh
c3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJn
cyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAg
ICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisrCisrYm9vbCBzaDo6QWRkRXhwbGljaXRUeXBlQ2FzdHMoVENvbXBpbGVyICZjb21w
aWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyt7CisrICAg
IFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0
VHlwZUNhc3RzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDM0Mjg4
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaAorQEAgLTAsMCArMSwyNCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQURERVhQTElDSVRUWVBFQ0FTVFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQRUNBU1RTX0hfCisrCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEFkZHMgZXhwbGljaXQgdHlw
ZSBjYXN0cyBpbnRvIHRoZSBBU1Qgd2hlcmUgY2FzdGluZyBpcyBkb25lIGltcGxpY2l0bHkuCisr
QU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3ltYm9sRW52ICZzeW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi40YmE0ZWM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAK
K0BAIC0wLDAgKzEsNDc0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+
CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCisreworKyAgICBBU1NFUlQo
ZGVjbE5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICBUSW50ZXJtTm9kZSAqY2hpbGRO
b2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworKyAgICBBU1NFUlQoY2hpbGROb2RlKTsK
KysgICAgVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZTsKKysgICAgaWYgKChzeW1ib2xOb2RlID0g
Y2hpbGROb2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7
KnN5bWJvbE5vZGUsIG51bGxwdHJ9OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgVEludGVybUJpbmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgp
OworKyAgICAgICAgQVNTRVJUKGluaXROb2RlKTsKKysgICAgICAgIEFTU0VSVChpbml0Tm9kZS0+
Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOworKyAgICAgICAgc3ltYm9sTm9k
ZSA9IGluaXROb2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworKyAgICAgICAgQVNT
RVJUKHN5bWJvbE5vZGUpOworKyAgICAgICAgcmV0dXJuIHsqc3ltYm9sTm9kZSwgaW5pdE5vZGUt
PmdldFJpZ2h0KCl9OworKyAgICB9CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0
ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZz
dHJ1Y3R1cmUpCisreworKyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRy
dWUpOworKyAgICBhdXRvICp2YXIgID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0
YWJsZVN0cmluZygiIiksIHR5cGUsIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysgICAgcmV0dXJuICp2
YXI7CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUo
VFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJm5hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMpCisreworKyAgICBhdXRvICp0
eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIGZhbHNlKTsKKysgICAgdHlwZS0+c2V0UXVhbGlm
aWVyKHF1YWxpZmllcik7CisrICAgIGlmIChhcnJheVNpemVzKQorKyAgICB7CisrICAgICAgICB0
eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKysgICAgfQorKyAgICBhdXRvICp2YXIgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksIHR5cGUsIG5hbWUuc3lt
Ym9sVHlwZSgpKTsKKysgICAgcmV0dXJuICp2YXI7CisrfQorKworK3N0YXRpYyB2b2lkIEFjcXVp
cmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQor
K3sKKysgICAgaWYgKHNyYy5pc0RlZmluZWQoKSkKKysgICAgeworKyAgICAgICAgZGVzdC5zZXRE
ZWZpbmVkKCk7CisrICAgIH0KKysKKysgICAgaWYgKHNyYy5oYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpKQorKyAgICB7CisrICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7
CisrICAgIH0KKyt9CisrCisrVEludGVybVNlcXVlbmNlICZzaDo6Q2xvbmVTZXF1ZW5jZUFuZFBy
ZXBlbmQoY29uc3QgVEludGVybVNlcXVlbmNlICZzZXEsIFRJbnRlcm1Ob2RlICZub2RlKQorK3sK
KysgICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworKyAgICBuZXdTZXEt
PnB1c2hfYmFjaygmbm9kZSk7CisrCisrICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBz
ZXEpCisrICAgIHsKKysgICAgICAgIG5ld1NlcS0+cHVzaF9iYWNrKG9sZE5vZGUpOworKyAgICB9
CisrCisrICAgIHJldHVybiAqbmV3U2VxOworK30KKysKKyt2b2lkIHNoOjpBZGRQYXJhbWV0ZXJz
RnJvbShURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQorK3sKKysgICAgY29u
c3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBzcmMuZ2V0UGFyYW1Db3VudCgpOworKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICp2YXIgPSBzcmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBkZXN0LmFkZFBhcmFt
ZXRlcih2YXIpOworKyAgICB9CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVu
Y3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYykKKyt7CisrICAgIEFTU0VSVChvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrCisrICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSk7CisrCisrICAgIGF1
dG8gJm5ld0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFt
ZSgpLCBuZXdOYW1lLnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZl
U2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBv
bGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7CisrCisr
ICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1
bmN0aW9uQW5kUHJlcGVuZFBhcmFtKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJm5ld1BhcmFtKQorK3sKKysgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkIHx8Cisr
ICAgICAgICAgICBvbGRGdW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKysKKysgICAgTmFtZSBuZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFt
ZShOYW1lKG9sZEZ1bmMpKSA6IE5hbWUob2xkRnVuYyk7CisrCisrICAgIGF1dG8gJm5ld0Z1bmMg
PSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1l
LnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRG
dW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMo
KSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKysg
ICAgbmV3RnVuYy5hZGRQYXJhbWV0ZXIoJm5ld1BhcmFtKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zy
b20obmV3RnVuYywgb2xkRnVuYyk7CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytj
b25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtcykKKyt7CisrICAgIEFTU0VSVChvbGRG
dW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorKyAgICAgICAg
ICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
CisrICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShv
bGRGdW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworKworKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRS
ZXR1cm5UeXBlKCksIG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworKwor
KyAgICBBY3F1aXJlRnVuY3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisrICAgIEFkZFBh
cmFtZXRlcnNGcm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworKyAgICBmb3IgKGF1dG8gKnBhcmFtIDog
bmV3UGFyYW1zKQorKyAgICB7CisrICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIG5ld0Z1bmM7CisrfQorKworK2NvbnN0IFRGdW5jdGlv
biAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
dWN0dXJlICZuZXdSZXR1cm4pCisreworKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkg
PT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworKworKyAgICBOYW1lIG5ld05hbWUgPSBpZEdl
biA/IGlkR2VuLT5jcmVhdGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsK
KysKKysgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgmbmV3UmV0dXJuLCB0cnVl
KTsKKysgICAgYXV0byAmbmV3RnVuYyAgICAgICA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJs
ZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmV0dXJuVHlwZSwgb2xkRnVuYy5pc0tub3duVG9O
b3RIYXZlU2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdG
dW5jLCBvbGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7
CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytUSW50ZXJtVHlwZWQgJnNoOjpHZXRB
cmcoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4KQorK3sKKysgICAg
QVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworKyAgICBhdXRvICphcmcgPSBj
YWxsLmdldENoaWxkTm9kZShpbmRleCk7CisrICAgIEFTU0VSVChhcmcpOworKyAgICBhdXRvICp0
YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisrICAgIEFTU0VSVCh0YXJnKTsKKysgICAgcmV0dXJu
ICp0YXJnOworK30KKysKKyt2b2lkIHNoOjpTZXRBcmcoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwg
c2l6ZV90IGluZGV4LCBUSW50ZXJtVHlwZWQgJmFyZykKKyt7CisrICAgIEFTU0VSVChpbmRleCA8
IGNhbGwuZ2V0Q2hpbGRDb3VudCgpKTsKKysgICAgKCpjYWxsLmdldFNlcXVlbmNlKCkpW2luZGV4
XSA9ICZhcmc7CisrfQorKworK2ludCBzaDo6R2V0RmllbGRJbmRleChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAg
Y29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gc3RydWN0dXJlLmZpZWxkcygpOworKworKyAg
ICBpbnQgaSA9IDA7CisrICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKysgICAg
eworKyAgICAgICAgaWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBpOworKyAgICAgICAgfQorKyAgICAgICAgKytpOworKyAgICB9
CisrCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0Zp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVy
bVN5bWJvbCgmc3RydWN0SW5zdGFuY2VWYXIpLCBmaWVsZE5hbWUpOworK30KKysKKytUSW50ZXJt
QmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0
YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0
dXJlID0gb2JqZWN0LmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKysgICAgQVNTRVJUKHN0cnVjdHVy
ZSk7CisrCisrICAgIGNvbnN0IGludCBpbmRleCA9IEdldEZpZWxkSW5kZXgoKnN0cnVjdHVyZSwg
ZmllbGROYW1lKTsKKysgICAgQVNTRVJUKGluZGV4ID49IDApOworKyAgICByZXR1cm4gQWNjZXNz
RmllbGRCeUluZGV4KG9iamVjdCwgaW5kZXgpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6
QWNjZXNzRmllbGRCeUluZGV4KFRJbnRlcm1UeXBlZCAmb2JqZWN0LCBpbnQgaW5kZXgpCisrewor
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlw
ZSA9IG9iamVjdC5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCghdHlwZS5pc0FycmF5KCkpOworKyAg
ICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICBB
U1NFUlQoc3RydWN0dXJlKTsKKysgICAgQVNTRVJUKDAgPD0gaW5kZXgpOworKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNpemUoKSk7
CisrI2VuZGlmCisrCisrICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisrICAgICAgICBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0LCAmb2JqZWN0LAorKyAgICAgICAgbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0SW50KSkpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNz
SW5kZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpCisreworKyNpZiBk
ZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGlu
ZGV4YWJsZU5vZGUuZ2V0VHlwZSgpOworKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisrI2VuZGlmCisrCisrICAgIGF1dG8g
KmFjY2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAgIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3QsICZpbmRleGFibGVOb2RlLAorKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFu
dFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6
RWJ0SW50KSkpOworKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7CisrfQorKworK1RJbnRlcm1UeXBl
ZCAmc2g6OkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkK
Kyt7CisrICAgIGlmIChpbmRleCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIEFjY2Vzc0luZGV4
KG5vZGUsICppbmRleCk7CisrICAgIH0KKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1RJbnRl
cm1UeXBlZCAmc2g6OlN1YlZlY3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdp
biwgaW50IGVuZCkKKyt7CisrICAgIEFTU0VSVCh2ZWN0b3JOb2RlLmdldFR5cGUoKS5pc1ZlY3Rv
cigpKTsKKysgICAgQVNTRVJUKDAgPD0gYmVnaW4pOworKyAgICBBU1NFUlQoZW5kIDw9IDQpOwor
KyAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKysgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09
IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB2ZWN0b3JOb2RlOworKyAgICB9CisrICAgIFRWZWN0b3I8aW50PiBvZmZzZXRzKHN0
YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gYmVnaW4pKTsKKysgICAgc3RkOjppb3RhKG9mZnNldHMu
YmVnaW4oKSwgb2Zmc2V0cy5lbmQoKSwgYmVnaW4pOworKyAgICBhdXRvICpzd2l6emxlID0gbmV3
IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBvZmZzZXRzKTsKKysgICAgcmV0dXJuICpzd2l6
emxlOworK30KKysKKytib29sIHNoOjpJc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKKyt7CisrICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsK
Kyt9CisrCisrYm9vbCBzaDo6SXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUpCisr
eworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrICAgIHJldHVybiBIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSk7CisrfQor
KworK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpCisreworKyAg
ICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQ6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKysgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50Ogor
KyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKQorK3sKKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlLmdldEJhc2ljVHlw
ZSgpKTsKKyt9CisrCisrc3RhdGljIHZvaWQgSW5pdFR5cGUoVFR5cGUgJnR5cGUpCisreworKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAgIHsKKysgICAgICAgIGF1dG8gc2l6ZXMgPSB0eXBl
LmdldEFycmF5U2l6ZXMoKTsKKysgICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisrICAg
ICAgICB0eXBlLm1ha2VBcnJheXMoc2l6ZXMpOworKyAgICB9CisrfQorKworK1RUeXBlICZzaDo6
Q2xvbmVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgYXV0byAmY2xvbmUgPSAqbmV3
IFRUeXBlKHR5cGUpOworKyAgICBJbml0VHlwZShjbG9uZSk7CisrICAgIHJldHVybiBjbG9uZTsK
Kyt9CisrCisrVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sK
KysgICAgYXV0byAmaW5uZXIgPSAqbmV3IFRUeXBlKHR5cGUpOworKyAgICBpbm5lci50b0FycmF5
QmFzZVR5cGUoKTsKKysgICAgSW5pdFR5cGUoaW5uZXIpOworKyAgICByZXR1cm4gaW5uZXI7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpCisr
eworKyAgICBBU1NFUlQobWF0cml4VHlwZS5pc01hdHJpeCgpKTsKKysgICAgQVNTRVJUKEhhc1Nj
YWxhckJhc2ljVHlwZShtYXRyaXhUeXBlKSk7CisrICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1l
ID0gbnVsbHB0cjsKKysKKysgICAgYXV0byAmdmVjdG9yVHlwZSA9CisrICAgICAgICAqbmV3IFRU
eXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9uKCks
IG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAgICAgICAgIG1hdHJpeFR5
cGUuZ2V0Um93cygpLCAxLCBtYXRyaXhUeXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUp
OworKyAgICBJbml0VHlwZSh2ZWN0b3JUeXBlKTsKKysgICAgcmV0dXJuIHZlY3RvclR5cGU7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5
cGUpCisreworKyAgICBBU1NFUlQoYXJyYXlUeXBlLmlzQXJyYXkoKSk7CisrICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKysgICAgY29uc3QgYXV0byAmYXJyYXlTaXplcyAg
PSBhcnJheVR5cGUuZ2V0QXJyYXlTaXplcygpOworKworKyAgICBhdXRvICZpbm5lclR5cGUgPQor
KyAgICAgICAgKm5ldyBUVHlwZShhcnJheVR5cGUuZ2V0QmFzaWNUeXBlKCksIGFycmF5VHlwZS5n
ZXRQcmVjaXNpb24oKSwgYXJyYXlUeXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAg
ICAgICBhcnJheVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgYXJyYXlUeXBlLmdldFNlY29uZGFyeVNp
emUoKSwKKysgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6
ZXMuc2l6ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUoaW5uZXJUeXBlKTsK
KysgICAgcmV0dXJuIGlubmVyVHlwZTsKKyt9CisrCisrc3RhdGljIFRUeXBlICZTZXRUeXBlRGlt
c0ltcGwoY29uc3QgVFR5cGUgJnR5cGUsIGludCBwcmltYXJ5LCBpbnQgc2Vjb25kYXJ5KQorK3sK
KysgICAgQVNTRVJUKDEgPCBwcmltYXJ5ICYmIHByaW1hcnkgPD0gNCk7CisrICAgIEFTU0VSVCgx
IDw9IHNlY29uZGFyeSAmJiBzZWNvbmRhcnkgPD0gNCk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUodHlwZSkpOworKyAgICBjb25zdCBjaGFyICptYW5nbGVkTmFtZSA9IG51bGxwdHI7
CisrCisrICAgIGF1dG8gJm5ld1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCks
IHR5cGUuZ2V0UHJlY2lzaW9uKCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW1hcnksIHNlY29uZGFyeSwgdHlwZS5nZXRBcnJheVNpemVz
KCksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUobmV3VHlwZSk7CisrICAgIHJldHVybiBu
ZXdUeXBlOworK30KKysKKytUVHlwZSAmc2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlw
ZSwgaW50IG5ld0RpbSkKKyt7CisrICAgIEFTU0VSVCh0eXBlLmlzUmFuazAoKSB8fCB0eXBlLmlz
VmVjdG9yKCkpOworKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7
CisrfQorKworK1RUeXBlICZzaDo6U2V0TWF0cml4Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhU
eXBlLCBpbnQgbmV3RGltKQorK3sKKysgICAgQVNTRVJUKG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7
CisrICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0RpbSA8PSA0KTsKKysgICAgcmV0dXJuIFNl
dFR5cGVEaW1zSW1wbChtYXRyaXhUeXBlLCBtYXRyaXhUeXBlLmdldENvbHMoKSwgbmV3RGltKTsK
Kyt9CisrCisrYm9vbCBzaDo6SGFzTWF0cml4RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlKQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxk
cygpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFsc2U7Cisr
fQorKworK2Jvb2wgc2g6Okhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygp
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOwor
KyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
CisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50
ZXJtVHlwZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJv
bU5vZGUuZ2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlw
ZSkpOworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFT
U0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysKKysgICAgaWYgKHRvVHlwZSAhPSBmcm9tVHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdncmVn
YXRlOjpDcmVhdGVDb25zdHJ1Y3RvcigKKysgICAgICAgICAgICAqbmV3IFRUeXBlKHRvVHlwZSwg
ZnJvbVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgZnJvbVR5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpKSwK
KysgICAgICAgICAgICBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAgICB9Cisr
ICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2lt
cGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpCisreworKyAg
ICBjb25zdCBUVHlwZSAmZnJvbVR5cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisrCisrICAgIEFT
U0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUoZnJvbVR5cGUpKTsKKysgICAgQVNTRVJUKHRvVHlwZS5nZXROb21pbmFsU2l6ZSgp
ID09IGZyb21UeXBlLmdldE5vbWluYWxTaXplKCkpOworKyAgICBBU1NFUlQodG9UeXBlLmdldFNl
Y29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRTZWNvbmRhcnlTaXplKCkpOworKyAgICBBU1NF
UlQoIXRvVHlwZS5pc0FycmF5KCkpOworKyAgICBBU1NFUlQoIWZyb21UeXBlLmlzQXJyYXkoKSk7
CisrCisrICAgIGlmICh0b1R5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gZnJvbVR5cGUuZ2V0QmFzaWNU
eXBlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
Q29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAg
ICB9CisrICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6QXNU
eXBlKFN5bWJvbEVudiAmc3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUu
Z2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlwZSkpOwor
KyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFTU0VSVCgh
dG9UeXBlLmlzQXJyYXkoKSk7CisrICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysK
KysgICAgaWYgKHRvVHlwZSA9PSBmcm9tVHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZy
b21Ob2RlOworKyAgICB9CisrICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKysgICAgcmV0
dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJhc190eXBlIiwgU3ltYm9s
VHlwZTo6QnVpbHRJbiksIHRvVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbU5vZGV9LCAxLCAmdGFyZyk7Cisr
fQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Bc3RIZWxwZXJzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZDllODlmZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaAorQEAgLTAsMCArMSwxNTcgQEAKKysv
LworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4K
KysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TeW1ib2xFbnYuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQSBjb252
ZW5pZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KKytz
dHJ1Y3QgRGVjbGFyYXRpb24KKyt7CisrICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKysgICAg
VEludGVybVR5cGVkICppbml0RXhwcjsgIC8vIE5vbi1udWxsIGlmZiBkZWNsYXJhdGlvbiBpcyBp
bml0aWFsaXplZC4KKyt9OworKworKy8vIFJldHVybnMgYSBgRGVjbGFyYXRpb25gIHZpZXcgb2Yg
dGhlIGdpdmVuIG5vZGUuCisrRGVjbGFyYXRpb24gVmlld0RlY2xhcmF0aW9uKFRJbnRlcm1EZWNs
YXJhdGlvbiAmZGVjbE5vZGUpOworKworKy8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1
Y3QgdHlwZS4KKytjb25zdCBUVmFyaWFibGUgJkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOworKwor
Ky8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1Y3QgaW5zdGFuY2UuCisrY29uc3QgVFZh
cmlhYmxlICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBUUXVhbGlmaWVyOjpFdnFUZW1wb3JhcnksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVu
c2lnbmVkIGludD4gKmFycmF5U2l6ZXMgPSBudWxscHRyKTsKKysKKysvLyBUaGUgaW5wdXQgc2Vx
dWVuY2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCBmcm9tIEFTVCBhZnRlciB0aGlzIGlzIGNhbGxlZC4K
KytUSW50ZXJtU2VxdWVuY2UgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9kZSk7CisrCisrLy8gQXBwZW5kcyBwYXJhbWV0
ZXJzIGZyb20gYHNyY2AgZnVuY3Rpb24gdG8gYGRlc3RgIGZ1bmN0aW9uLgorK3ZvaWQgQWRkUGFy
YW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisrCisr
Ly8gQ2xvbmVzIGEgZnVuY3Rpb24uCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2VuICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZv
bGRGdW5jKTsKKysKKysvLyBDbG9uZXMgYSBmdW5jdGlvbiBhbmQgcHJlcGVuZHMgdGhlIHByb3Zp
ZGVkIGV4dHIgcGFyYW1ldGVyLgorKy8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFs
IGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rp
b24gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4g
KmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBwYXJhbWV0ZXJzLgor
Ky8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlz
Y2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rpb25BbmRB
cHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1
bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGl0cyByZXR1cm4gdHlwZS4KKysvLyBJZiBgaWRHZW5g
IGlzIG51bGwsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBtdXN0IGJlIGRpc2NhcmRlZCBmcm9tIHRo
ZSBBU1QuCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJuVHlw
ZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5j
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKysKKysvLyBHZXRzIHRoZSBhcmd1bWVudCBvZiBh
IGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGdpdmVuIGluZGV4LgorK1RJbnRlcm1UeXBlZCAmR2V0QXJn
KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisrCisrLy8gU2V0
cyB0aGUgYXJndW1lbnQgb2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KKyt2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKysKKysvLyBSZXR1cm5zIHRoZSBmaWVsZCBpbmRleCB3aXRoaW4gdGhlIGdp
dmVuIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuCisrLy8gUmV0dXJucyAtMSBpZiB0
aGUgc3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorK2ludCBHZXRGaWVs
ZEluZGV4KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgSW1tdXRhYmxlU3RyaW5n
ICZmaWVsZE5hbWUpOworKworKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJp
YWJsZSB3aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSB2YXJpYWJsZSBtdXN0IGJl
IGEgc3RydWN0IGluc3RhbmNlLgorK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkKGNvbnN0IFRW
YXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGRO
YW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSBub2RlIG11c3QgYmUgYSBzdHJ1Y3QgaW5zdGFu
Y2UuCisrVEludGVybUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNv
bnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxk
IGZvciB0aGUgZ2l2ZW4gbm9kZSBieSBpdHMgZmllbGQgaW5kZXguCisrLy8gVGhlIG5vZGUgbXVz
dCBiZSBhIHN0cnVjdCBpbnN0YW5jZS4KKytUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZEJ5SW5k
ZXgoVEludGVybVR5cGVkICZvYmplY3QsIGludCBpbmRleCk7CisrCisrLy8gQWNjZXNzZXMgYW4g
ZWxlbWVudCBieSBpbmRleCBmb3IgdGhlIGdpdmVuIG5vZGUuCisrLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXguCisrVEludGVybUJpbmFyeSAmQWNjZXNzSW5k
ZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpOworKworKy8vIEFjY2Vz
c2VzIGFuIGVsZW1lbnQgYnkgaW5kZXggZm9yIHRoZSBnaXZlbiBub2RlIGlmIGBpbmRleGAgaXMg
bm9uLW51bGwuCisrLy8gUmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBpZiBgaW5kZXhgIGlzIG51
bGwuCisrLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYg
YGluZGV4YCBpcyBub24tbnVsbC4KKytUSW50ZXJtVHlwZWQgJkFjY2Vzc0luZGV4KFRJbnRlcm1U
eXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCk7CisrCisrLy8gUmV0dXJucyBhIHN1YnZlY3Rv
ciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2UgcmFuZ2UuCisrLy8gVGhpcyByZXR1cm5zIHRoZSBv
cmlnaW5hbCBub2RlIGlmIHRoZSBzbGljZSBpcyBhbiBpZGVudGl0eSBmb3IgdGhlIG5vZGUuCisr
VEludGVybVR5cGVkICZTdWJWZWN0b3IoVEludGVybVR5cGVkICZ2ZWN0b3JOb2RlLCBpbnQgYmVn
aW4sIGludCBlbmQpOworKworKy8vIE1hdGNoZXMgc2NhbGFyIGJvb2wsIGludCwgdWludCwgZmxv
YXQsIGRvdWJsZS4KKytib29sIElzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsK
KysKKysvLyBNYXRjaGVzIHZlY3RvciBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisr
Ym9vbCBJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gTWF0Y2hl
cyBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisrLy8gVHlwZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIGEgc2NhbGFyLgorK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKyti
b29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworKworKy8vIENsb25lcyBh
IHR5cGUuCisrVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gQ2xv
bmVzIGEgdHlwZSBhbmQgZHJvcHMgYWxsIGFycmF5IGRpbWVuc2lvbnMuCisrVFR5cGUgJklubmVy
bW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworKworKy8vIENyZWF0ZXMgYSB2ZWN0b3IgdHlw
ZSBieSBkcm9wcGluZyB0aGUgY29sdW1ucyBvZmYgb2YgYSBtYXRyaXggdHlwZS4KKytUVHlwZSAm
RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworKworKy8vIENyZWF0ZXMgYSB0
eXBlIGJ5IGRyb3BwaW5nIHRoZSBvdXRlciBkaW1lbnNpb24gb2ZmIG9mIGFuIGFycmF5IHR5cGUu
CisrVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKysK
KysvLyBDcmVhdGVzIGEgc2NhbGFyIG9yIHZlY3RvciB0eXBlIGJ5IGNoYW5naW5nIHRoZSBkaW1l
bnNpb25zIG9mIGEgdmVjdG9yIHR5cGUuCisrVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisrCisrLy8gQ3JlYXRlcyBhIG1hdHJpeCB0eXBlIGJ5IGNo
YW5naW5nIHRoZSByb3cgZGltZW5zaW9ucyBvZiBhIG1hdHJpeCB0eXBlLgorK1RUeXBlICZTZXRN
YXRyaXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworKworKy8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBhIGZpZWxk
IHdpdGggbWF0cml4IHR5cGUuCisrYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUpOworKworKy8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJl
Y3RseSBjb250YWlucyBhIGZpZWxkIHdpdGggYXJyYXkgdHlwZS4KKytib29sIEhhc0FycmF5Rmll
bGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKysKKysvLyBDb2VyY2VzIGBmcm9tTm9k
ZWAgdG8gYHRvVHlwZWAgYnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlmIHRoZWly
IHR5cGVzIGRpZmZlci4KKysvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRh
aW5lZC4KKysvLyBBcnJheSB0eXBlcyBhcmUgbm90IGFsbG93ZWQuCisrVEludGVybVR5cGVkICZD
b2VyY2VTaW1wbGUoVEJhc2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOwor
KworKy8vIENvZXJjZXMgYGZyb21Ob2RlYCB0byBgdG9UeXBlYCBieSBhIGNvbnN0cnVjdG9yIGNh
bGwgb2YgYHRvVHlwZWAgaWYgdGhlaXIgdHlwZXMgZGlmZmVyLgorKy8vIFZlY3RvciBhbmQgbWF0
cml4IGRpbWVuc2lvbnMgbXVzdCBjb2luY2lkZSBiZXR3ZWVuIHRvIGFuZCBmcm9tLgorKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KKytUSW50ZXJtVHlwZWQgJkNvZXJjZVNpbXBsZShj
b25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKysKKytUSW50ZXJt
VHlwZWQgJkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQ
RVJTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Db25zdGFudE5hbWVzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5mZGRkODY1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCitAQCAtMCww
ICsxLDI2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFt
ZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMK
Kyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0VuYWJsZWQoIkFOR0xFX0NvdmVy
YWdlTWFza0VuYWJsZWQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKytjb25zdGV4cHIg
TmFtZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKCJBTkdMRV9SYXN0ZXJpemF0aW9uRGlz
Y2FyZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKyt9ICAvLyBuYW1lc3BhY2UgY29uc3RhbnRfbmFt
ZXMKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNUQU5UX05BTUVTX0hfCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaAor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4NWU5YTYKKy0tLSAvZGV2L251
bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Zy5oCitAQCAtMCwwICsxLDE2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisrCisrI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNl
KQorKworKyNkZWZpbmUgTE9HSUNfRVJST1IoKSBBU1NFUlQoZmFsc2UpCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Z1NpbmsuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg3MmFk
ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaAorQEAgLTAsMCArMSwxNTkgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaW5jbHVkZSA8aW9zdHJlYW0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW5mb1NpbmsuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY2xhc3MgU3RyaW5n
T2JzZXJ2ZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6
c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRsZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgp
KTsgfQorKworKyAgICBib29sIG9ic2VydmUoY2hhciBjKQorKyAgICB7CisrICAgICAgICBpZiAo
bmVlZGxlW2N1cnJQb3NdID09IGMpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytjdXJyUG9z
OworKyAgICAgICAgICAgIGlmIChjdXJyUG9zID09IG5lZWRsZS5zaXplKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXNldCgpOworKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0TmVlZGxlKCkgY29u
c3QgeyByZXR1cm4gbmVlZGxlOyB9CisrCisrICAgIHZvaWQgcmVzZXQoKSB7IGN1cnJQb3MgPSAw
OyB9CisrCisrICBwcml2YXRlOgorKyAgICBzdGQ6OnN0cmluZyBuZWVkbGU7CisrICAgIHNpemVf
dCBjdXJyUG9zID0gMDsKKyt9OworKworK2NsYXNzIERlYnVnU2luayA6IGFuZ2xlOjpOb25Db3B5
YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgZnJpZW5kIGNsYXNzIEVzY2FwZWRTaW5rOworKyAg
ICBjbGFzcyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorKyAgICB7CisrICAgICAg
ICBmcmllbmQgY2xhc3MgRGVidWdTaW5rOworKworKyAgICAgIHByaXZhdGU6CisrICAgICAgICBF
c2NhcGVkU2luayhEZWJ1Z1NpbmsgJm93bmVyKSA6IG1Pd25lcihvd25lciksIG1CZWdpbihvd25l
ci5zaXplKCkpIHt9CisrCisrICAgICAgcHVibGljOgorKyAgICAgICAgRXNjYXBlZFNpbmsoRXNj
YXBlZFNpbmsgJiZvdGhlcikgOiBtT3duZXIob3RoZXIubU93bmVyKSwgbUJlZ2luKG90aGVyLm1C
ZWdpbikge30KKysKKysgICAgICAgIH5Fc2NhcGVkU2luaygpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgY29uc3QgY2hhciAqcCA9IG1Pd25lci5jX3N0cigpOworKyAgICAgICAgICAgIGNvbnN0
IGludCBlbmQgPSBtT3duZXIuc2l6ZSgpOworKyAgICAgICAgICAgIG1Pd25lci5vbldyaXRlKHAg
KyBtQmVnaW4sIHAgKyBlbmQpOworKyAgICAgICAgfQorKworKyAgICAgICAgVEluZm9TaW5rQmFz
ZSAmZ2V0KCkgeyByZXR1cm4gbU93bmVyLm1QYXJlbnQ7IH0KKysKKysgICAgICAgIG9wZXJhdG9y
IFRJbmZvU2lua0Jhc2UgJigpIHsgcmV0dXJuIGdldCgpOyB9CisrCisrICAgICAgcHJpdmF0ZToK
KysgICAgICAgIERlYnVnU2luayAmbU93bmVyOworKyAgICAgICAgY29uc3QgaW50IG1CZWdpbjsK
KysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgRGVidWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBh
cmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisrICAgICAgICA6IG1QYXJlbnQocGFyZW50KSwg
bUFsc29Mb2dUb1N0ZG91dChhbHNvTG9nVG9TdGRvdXQpCisrICAgIHt9CisrCisrICAgIHZvaWQg
d2F0Y2goc3RkOjpzdHJpbmcgY29uc3QgJm5lZWRsZSkKKysgICAgeworKyAgICAgICAgaWYgKCFu
ZWVkbGUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT2JzZXJ2ZXJzLmVtcGxh
Y2VfYmFjayhuZWVkbGUpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHZvaWQgZXJhc2Uo
KQorKyAgICB7CisrICAgICAgICBtUGFyZW50LmVyYXNlKCk7CisrICAgICAgICBmb3IgKFN0cmlu
Z09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgb2JzZXJ2ZXIucmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpbnQgc2l6
ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisrCisrICAgIGNvbnN0IFRQZXJzaXN0U3Ry
aW5nICZzdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LnN0cigpOyB9CisrCisrICAgIGNvbnN0
IGNoYXIgKmNfc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5jX3N0cigpOyB9CisrCisrICAg
IEVzY2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorKwor
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNv
bnN0IFQgJnZhbHVlKQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBtUGFy
ZW50LnNpemUoKTsKKysgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisrICAgICAgICBjb25zdCBz
aXplX3QgZW5kID0gbVBhcmVudC5zaXplKCk7CisrCisrICAgICAgICBjb25zdCBjaGFyICpwID0g
bVBhcmVudC5jX3N0cigpOworKyAgICAgICAgb25Xcml0ZShwICsgYmVnaW4sIHAgKyBlbmQpOwor
KworKyAgICAgICAgcmV0dXJuICp0aGlzOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2
b2lkIG9uV3JpdGUoY29uc3QgY2hhciAqYmVnaW4sIGNoYXIgY29uc3QgKmVuZCkKKysgICAgewor
KyAgICAgICAgY29uc3QgY2hhciAqcCA9IGJlZ2luOworKyAgICAgICAgd2hpbGUgKHAgIT0gZW5k
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICpwOworKyAgICAgICAgICAg
IH0KKysKKysgICAgICAgICAgICBmb3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNl
cnZlcnMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIub2Jz
ZXJ2ZSgqcCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmICht
QWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6Y291dC5mbHVzaCgpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5lZWRsZSA9IG9ic2VydmVyLmdl
dE5lZWRsZSgpOworKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpbmVlZGxlOworKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVha3BvaW50IGhlcmUK
KysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICArK3A7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUFsc29Mb2dUb1N0ZG91dCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKysgICAgICAgIH0KKysgICAgfQor
KworKyAgcHJpdmF0ZToKKysgICAgVEluZm9TaW5rQmFzZSAmbVBhcmVudDsKKysgICAgc3RkOjp2
ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisrICAgIGJvb2wgbUFsc29Mb2dUb1N0
ZG91dDsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNDJkZjQzMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rp
b25zLmNwcAorQEAgLTAsMCArMSwxMzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisrCisrdXNpbmcgbmFtZXNw
YWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisrewor
KworK2NsYXNzIERpc2NvdmVyZXIgOiBwdWJsaWMgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlcgorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChj
b25zdCBUVmFyaWFibGUgJik+ICZtVmFyczsKKysgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRp
b24gJm1GdW5jVG9EZWY7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24g
Kj4gbU5vbkRlcEZ1bmN0aW9uczsKKysKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRf
c2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtRGVwRnVuY3Rpb25zOworKworKyAgcHVibGljOgorKyAg
ICBEaXNjb3ZlcmVyKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUgJik+
ICZ2YXJzLAorKyAgICAgICAgICAgICAgIGNvbnN0IEZ1bmN0aW9uVG9EZWZpbml0aW9uICZmdW5j
VG9EZWYpCisrICAgICAgICA6IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1
ZSwgZmFsc2UsIHRydWUpLCBtVmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisrICAg
IHt9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKCFtVmFycyh2YXIpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqb3duZXIgPSBkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKHN5bWJvbE5vZGUpOworKyAgICAg
ICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsK
KysgICAgfQorKworKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAo
dmlzaXQgIT0gVmlzaXQ6OlByZVZpc2l0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFhZ2dyZWdhdGVOb2RlLT5pc0Nv
bnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpm
dW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgICAgICAgICBpZiAo
bU5vbkRlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1Ob25EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAg
ICB9CisrCisrICAgICAgICAgICAgaWYgKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVw
RnVuY3Rpb25zLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBp
dCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ID09IG1G
dW5jVG9EZWYuZW5kKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorKyAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGFzc3VtZXMgKGRpcmVjdCBhbmQgbXV0dWFsKSByZWN1cnNpb24gaXMgcHJvaGliaXRlZC4KKysg
ICAgICAgICAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUgPSAq
aXQtPnNlY29uZDsKKysgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7
CisrICAgICAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5v
bkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKTsK
KysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9
IGRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oYWdncmVnYXRlTm9kZSk7CisrICAgICAgICAgICAg
QVNTRVJUKG93bmVyKTsKKysgICAgICAgICAgICBtRGVwRnVuY3Rpb25zLmluc2VydChvd25lcik7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpmdW5jRGVmTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrCisrICAgICAg
ICBpZiAodmlzaXQgIT0gVmlzaXQ6OlBvc3RWaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0g
bU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU5vbkRl
cEZ1bmN0aW9ucy5pbnNlcnQoZnVuYyk7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlCisrCisrc3RkOjp1bm9yZGVy
ZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBzaDo6RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMo
CisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCisreworKyAgICBjb25zdCBGdW5jdGlvblRvRGVm
aW5pdGlvbiBmdW5jVG9EZWYgPSBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKHJvb3QpOworKyAg
ICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKysgICAgcm9vdC50cmF2
ZXJzZSgmZGlzY292ZXJlcik7CisrICAgIHJldHVybiBzdGQ6Om1vdmUoZGlzY292ZXJlci5tRGVw
RnVuY3Rpb25zKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRG
dW5jdGlvbnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVkMWJmMjcK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCitAQCAtMCwwICsxLDI1IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRG
VU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorK0FOR0xF
X05PX0RJU0NBUkQgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBEaXNjb3Zl
ckRlcGVuZGVudEZ1bmN0aW9ucygKKysgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisrCisrfSAg
Ly8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2Vy
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIyZDM5MGUKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcAorQEAgLTAsMCArMSwz
MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
b3N0VmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKysg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKHByZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5
bWJvbFRhYmxlKQorK3t9CisrCisrY29uc3QgVEZ1bmN0aW9uICpEaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKFRJbnRlcm1Ob2RlICpu
b2RlKQorK3sKKysgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysKKysgICAgdW5zaWduZWQgaGVpZ2h0ID0gMDsKKysgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICph
bmNlc3RvciA9IGdldEFuY2VzdG9yTm9kZShoZWlnaHQpKQorKyAgICB7CisrICAgICAgICBpZiAo
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBhbmNlc3Rvci0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICB9CisrICAgICAgICArK2hlaWdodDsK
KysgICAgfQorKworKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb25UcmF2ZXJzZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mOWNiMmFhCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJF
bmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCitAQCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ky8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisrI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNU
SU9OVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgVElu
dGVybVRyYXZlcnNlciB0aGF0IHN1cHBvcnRzIGRpc2NvdmVyeSBvZiB0aGUgZnVuY3Rpb24gYSBu
b2RlIGJlbG9uZ3MgdG8uCisrY2xhc3MgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBEaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSBudWxs
cHRyKTsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgZnVuY3Rpb24gYSBub2RlIGJlbG9uZ3MgaW5z
aWRlLgorKyAgICAvLyBSZXR1cm5zIG51bGwgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGlu
c2lkZSBhIGZ1bmN0aW9uLgorKyAgICBjb25zdCBURnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOworK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFiYmRkM2YKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9FbWl0TWV0YWwuY3BwCitAQCAtMCwwICsxLDI0NTUgQEAKKysvLworKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysK
KysjaW5jbHVkZSA8Y2N0eXBlPgorKyNpbmNsdWRlIDxtYXA+CisrCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vt
aXRNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbnN0YW50cy5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorK3Vz
aW5nIFNpbmsgPSBEZWJ1Z1Npbms7CisrI2Vsc2UKKyt1c2luZyBTaW5rID0gVEluZm9TaW5rQmFz
ZTsKKysjZW5kaWYKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQor
K3sKKysKKytzdHJ1Y3QgVmFyRGVjbAorK3sKKysgICAgZXhwbGljaXQgVmFyRGVjbChjb25zdCBU
VmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhciksIG1Jc0ZpZWxkKGZhbHNlKSB7fQorKyAg
ICBleHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCks
IG1Jc0ZpZWxkKHRydWUpIHt9CisrCisrICAgIEFOR0xFX0lOTElORSBjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKCkgY29uc3QKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzVmFyaWFibGUoKSk7
CisrICAgICAgICByZXR1cm4gKm1WYXJpYWJsZTsKKysgICAgfQorKworKyAgICBBTkdMRV9JTkxJ
TkUgY29uc3QgVEZpZWxkICZmaWVsZCgpIGNvbnN0CisrICAgIHsKKysgICAgICAgIEFTU0VSVChp
c0ZpZWxkKCkpOworKyAgICAgICAgcmV0dXJuICptRmllbGQ7CisrICAgIH0KKysKKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtSXNGaWVsZDsgfQor
KworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBpc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gbUlzRmll
bGQ7IH0KKysKKysgICAgY29uc3QgVFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxk
KCkgPyAqZmllbGQoKS50eXBlKCkgOiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorKworKyAgICBT
eW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gaXNG
aWVsZCgpID8gZmllbGQoKS5zeW1ib2xUeXBlKCkgOiB2YXJpYWJsZSgpLnN5bWJvbFR5cGUoKTsK
KysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29u
c3QgVFZhcmlhYmxlICptVmFyaWFibGU7CisrICAgICAgICBjb25zdCBURmllbGQgKm1GaWVsZDsK
KysgICAgfTsKKysgICAgYm9vbCBtSXNGaWVsZDsKKyt9OworKworK2NsYXNzIEdlbk1ldGFsVHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6CisrICAgIH5H
ZW5NZXRhbFRyYXZlcnNlcigpIG92ZXJyaWRlOworKworKyAgICBHZW5NZXRhbFRyYXZlcnNlcihj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICBTaW5rICZv
dXQsCisrICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKysgICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRV
bmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFN3
aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFRl
cm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisrICAgIHZvaWQgdmlzaXRGdW5j
dGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGU7CisrICAg
IGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVElu
dGVybUJsb2NrICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKSBvdmVy
cmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAq
KSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdEZvckxvb3AoVEludGVybUxvb3AgKik7CisrICAg
IGJvb2wgdmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisrICAgIGJvb2wgdmlzaXREb1do
aWxlTG9vcChUSW50ZXJtTG9vcCAqKTsKKysgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCAqKSBvdmVycmlkZTsKKysKKysgIHByaXZhdGU6CisrICAgIHVzaW5nIEZ1bmNU
b05hbWUgPSBzdGQ6Om1hcDxJbW11dGFibGVTdHJpbmcsIE5hbWU+OworKyAgICBzdGF0aWMgRnVu
Y1RvTmFtZSBCdWlsZEZ1bmNUb05hbWUoKTsKKysKKysgICAgc3RydWN0IEVtaXRWYXJpYWJsZURl
Y2xhcmF0aW9uQ29uZmlnCisrICAgIHsKKysgICAgICAgIGJvb2wgaXNQYXJhbWV0ZXIgICAgICAg
ICAgICAgICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgaXNNYWluUGFyYW1ldGVyICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgaXNQYWNrZWQgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGJvb2wgZGlzYWJsZVN0cnVjdFNwZWNpZmllciAgICAgPSBmYWxzZTsKKysgICAg
ICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyICAgPSBudWxscHRyOworKyAgICAgICAg
Y29uc3QgQWRkcmVzc1NwYWNlICppc1JlZmVyZW5jZSA9IG51bGxwdHI7CisrICAgIH07CisrCisr
ICAgIHN0cnVjdCBFbWl0VHlwZUNvbmZpZworKyAgICB7CisrICAgICAgICBjb25zdCBFbWl0VmFy
aWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29uZmlnID0gbnVsbHB0cjsKKysgICAgfTsKKysK
KysgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25TaWdu
YXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25SZXR1
cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25QYXJhbWV0
ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKTsKKysKKysg
ICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRGaWVsZCAmb2JqZWN0KTsKKysgICAgdm9pZCBlbWl0
TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisrICAgIHZvaWQgZW1pdE5hbWVPZihjb25z
dCBWYXJEZWNsICZvYmplY3QpOworKworKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5hbWUoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7CisrICAgIHZvaWQg
ZW1pdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisrICAgIHZvaWQgZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWYXJEZWNsICZkZWNsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKTsKKysKKysgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGljZXMK
KysgICAgeworKyAgICAgICAgc2l6ZV90IGF0dHJpYnV0ZSA9IDA7CisrICAgICAgICBzaXplX3Qg
Y29sb3IgICAgID0gMDsKKysgICAgfTsKKysKKysgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlv
bihjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnBhcmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcyk7CisrICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKysgICAgdm9pZCBlbWl0U3RydWN0RGVjbGFy
YXRpb24oY29uc3QgVFR5cGUgJnR5cGUpOworKyAgICB2b2lkIGVtaXRPcmRpbmFyeVZhcmlhYmxl
RGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZl
dmRDb25maWcpOworKyAgICB2b2lkIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRl
Y2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZh
cmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZyk7CisrCisrICAgIHZvaWQgZW1pdE9w
ZW5CcmFjZSgpOworKyAgICB2b2lkIGVtaXRDbG9zZUJyYWNlKCk7CisrCisrICAgIHZvaWQgZ3Jv
dXBlZFRyYXZlcnNlKFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgY29uc3QgVEZpZWxkICZn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAmaW5k
ZXgpOworKyAgICBjb25zdCBURmllbGQgJmdldERpcmVjdEZpZWxkKGNvbnN0IFRJbnRlcm1UeXBl
ZCAmZmllbGRzTm9kZSwgVEludGVybVR5cGVkICZpbmRleE5vZGUpOworKworKyAgICBjb25zdCBU
Q29uc3RhbnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb25BcnJheShjb25zdCBUQ29uc3RhbnRVbmlv
biAqY29uc3QgY29uc3RVbmlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUpOworKworKyAgICBjb25zdCBUQ29uc3Rh
bnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRDb25z
dGFudFVuaW9uICpjb25zdFVuaW9uKTsKKysKKysgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQo
Y29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5pb24pOworKworKyAgcHJpdmF0ZToK
KysgICAgU2luayAmbU91dDsKKysgICAgY29uc3QgVENvbXBpbGVyICZtQ29tcGlsZXI7CisrICAg
IGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmbVBpcGVsaW5lU3RydWN0czsKKysgICAgY29uc3QgSW52
YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysgICAg
SWRHZW4gJm1JZEdlbjsKKysgICAgaW50IG1JbmRlbnRMZXZlbCAgICAgICAgPSAtMTsKKysgICAg
aW50IG1MYXN0SW5kZW50YXRpb25Qb3MgPSAtMTsKKysgICAgYm9vbCBtUGFyZW50SXNTd2l0Y2gg
ICAgPSBmYWxzZTsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFt
ZT4gbVJlbmFtZWRTeW1ib2xzOworKyAgICBjb25zdCBGdW5jVG9OYW1lIG1GdW5jVG9OYW1lICAg
PSBCdWlsZEZ1bmNUb05hbWUoKTsKKysgICAgc2l6ZV90IG1NYWluVGV4dHVyZUluZGV4ICAgICAg
ID0gMDsKKysgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAgID0gMDsKKysgICAgc2l6
ZV90IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4ID0gcng6Om10bDo6a0RlZmF1bHRVbmlmb3Jtc0Jp
bmRpbmdJbmRleDsKKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytHZW5N
ZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKKyt7CisrICAgIEFTU0VSVChtSW5k
ZW50TGV2ZWwgPT0gLTEpOworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrfQorKwor
K0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNv
bXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rICZvdXQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3Rz
ICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKysgICAgICBtT3V0KG91dCksCisrICAgICAgbUNvbXBp
bGVyKGNvbXBpbGVyKSwKKysgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisrICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgbVN5bWJvbEVudihzeW1i
b2xFbnYpLAorKyAgICAgIG1JZEdlbihpZEdlbikKKyt7fQorKworK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRJbmRlbnRhdGlvbigpCisreworKyAgICBBU1NFUlQobUluZGVudExldmVsID49
IDApOworKworKyAgICBpZiAobUxhc3RJbmRlbnRhdGlvblBvcyA9PSBtT3V0LnNpemUoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorKyAg
ICB9CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIiAgIjsKKysgICAgfQorKworKyAgICBtTGFzdEluZGVudGF0
aW9uUG9zID0gbU91dC5zaXplKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpHZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisrewor
KyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29t
bWE6CisrICAgICAgICAgICAgcmV0dXJuICIsIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICI9IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgICAgIHJldHVybiAiPSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiKz0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysgICAgICAgICAgICByZXR1
cm4gIi09IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisrICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWdu
OgorKyAgICAgICAgICAgIHJldHVybiAiLz0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cElNb2RBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICIlPSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiPDw9
IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgICAg
IHJldHVybiAiPj49IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlm
dGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiAiJj0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VYb3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICJePSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAifD0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgICAgICByZXR1cm4gIisi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICByZXR1cm4g
Ii0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKysgICAgICAgICAgICByZXR1
cm4gIioiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKysgICAgICAgICAgICBy
ZXR1cm4gIi8iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICAg
ICAgcmV0dXJuICIlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6
CisrICAgICAgICAgICAgcmV0dXJuICI8PCI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFy
aXRobWV0aWMgc2hpZnRpbmcuCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodDoKKysgICAgICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwg
dnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlQW5kOgorKyAgICAgICAgICAgIHJldHVybiAiJiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZVhvcjoKKysgICAgICAgICAgICByZXR1cm4gIl4iOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjoKKysgICAgICAgICAgICByZXR1cm4gInwiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorKyAgICAgICAgICAgIHJldHVybiAi
PCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisrICAgICAgICAg
ICAgcmV0dXJuICI+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFs
OgorKyAgICAgICAgICAgIHJldHVybiAiPD0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICAgICAgcmV0dXJuICI+PSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJl
dHVybiAiPCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBv
bmVudFdpc2U6CisrICAgICAgICAgICAgcmV0dXJuICI8PSI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICAgICAgcmV0
dXJuICI+PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25l
bnRXaXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9naWNhbE9yOgorKyAgICAgICAgICAgIHJldHVybiAifHwiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICAgICAgcmV0dXJuICIhPS8qeG9y
Ki8iOyAgLy8gWFhYOiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBm
b3Igc29tZSBvYnR1c2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
Y2FzZS4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorKyAgICAgICAg
ICAgIHJldHVybiAiJiYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgor
KyAgICAgICAgICAgIHJldHVybiAiLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
aXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICIiOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gIisiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxO
b3Q6CisrICAgICAgICAgICAgcmV0dXJuICIhIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiEiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICAgICAgcmV0dXJu
ICJ+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3REZWNy
ZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuICItLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wUHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKysgICAgICAgICAgICByZXR1cm4gIi0t
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoK
KysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAg
ICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1l
c01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorKyAgICAg
ICAgICAgIHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGlt
ZXNWZWN0b3I6CisrICAgICAgICAgICAgcmV0dXJuICIqIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgICAg
IHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWxDb21wb25lbnRX
aXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPT0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoKGFy
Z1R5cGUwLT5pc1ZlY3RvcigpICYmIGFyZ1R5cGUxLT5pc1ZlY3RvcigpKSB8fAorKyAgICAgICAg
ICAgICAgICAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkg
fHwKKysgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlz
QXJyYXkoKSkpCisrCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFO
R0xFX2VxdWFsIjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuICI9PSI7
CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisrICAgICAgICAgICAg
aWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkgfHwKKysg
ICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXko
KSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX25vdEVx
dWFsIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoYXJnVHlwZTAtPmdl
dFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbm90RXF1YWxTdHJ1Y3QiOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BLaWxsOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gImtp
bGwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKysgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQnJlYWs6CisrICAg
ICAgICAgICAgcmV0dXJuICJicmVhayI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29u
dGludWU6CisrICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wUmFkaWFuczoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JhZGlh
bnMiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAgICAgICAgICAg
cmV0dXJuICJBTkdMRV9kZWdyZWVzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
OgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfYXRhbiI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTW9kOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbW9kIjsgIC8vIGRpZmZl
cnMgZnJvbSBtZXRhbDo6bW9kCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFjdDoK
KysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcERpc3RhbmNlOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZGlzdGFuY2Ui
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2xlbmd0aCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRG90OgorKyAg
ICAgICAgICAgIHJldHVybiAiQU5HTEVfZG90IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BOb3JtYWxpemU6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3JtYWxpemUiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfZmFjZWZvcndhcmQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxl
Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9yZWZsZWN0IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfY29tcG9uZW50V2lzZU11bHRpcGx5IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9vdXRlclByb2R1
Y3QiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpZ246CisrICAgICAgICAgICAgcmV0
dXJuICJBTkdMRV9zaWduIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBbGw6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWxsIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBbnk6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YW55IjsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW46CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6c2luIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3M6CisrICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6Y29zIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46
CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBc2luOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YWNvcyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKysgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpzaW5oIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3NoOgor
KyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFRhbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuaCI7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YXNpbmgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OmFjb3NoIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
aDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphdGFuaCI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRm1hOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZtYSI7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnBvdyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwOgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKysg
ICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpleHAyIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMb2c6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmxvZzIi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6c3FydCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zmxvb3IiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFRydW5jOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRydW5jIjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNl
aWwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyYWN0OgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmZyYWN0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaW46Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWluIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNYXg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWF4IjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyb3Vu
ZCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmRFdmVuOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnJpbnQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1w
OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNsYW1wIjsgIC8vIFRPRE8gZmFzdCB2cyBw
cmVjaXNlIG5hbWVzcGFjZQorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1peDoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFN0ZXA6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c3RlcCI7CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpz
bW9vdGhzdGVwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2RmOgorKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElz
bmFuOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzbmFuIjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJc2luZjoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc2luZiI7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6bGRleHAiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyZXhwOgorKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyZXhwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbnZlcnNlc3FydDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyc3FydCI7Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ3Jvc3M6CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERGZHg6CisrICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6ZGZkeCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
REZkeToKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZmR5IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGd2lkdGg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRo
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6dHJhbnNwb3NlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZXRlcm1pbmFudDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZXRlcm1pbmFudCI7Cisr
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2ludmVyc2UiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0
Qml0c1RvSW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvVWludDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxvYXQ6CisrICAgICAgICB7CisrI2RlZmluZSBS
RVRVUk5fQVNfVFlQRShwb3N0KSAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldEJhc2ljVHlwZSgpKSAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5
cGU6OkVidEludDogICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5
cGU8aW50IiBwb3N0ICI+IjsgICBcCisrICAgICAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRV
SW50OiAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQi
IHBvc3QgIj4iOyAgXAorKyAgICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAg
ICAgICAgICBcCisrICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdCIgcG9zdCAi
PiI7IFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgICAgICBUT0RPKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOyAgICAgICAgIFwKKysgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB3aGls
ZSAoZmFsc2UpCisrCisrICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUuaXNTY2FsYXIoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCIiKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0VHlwZS5pc1ZlY3RvcigpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRUeXBlLmdldE5v
bWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIpOworKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9BU19UWVBFKCIzIik7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0FTX1RZUEUoIjQiKTsKKysgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworKyAgICAgICAgICAgIH0KKysKKysjdW5kZWYgUkVUVVJOX0FTX1RZUEUKKysgICAgICAg
IH0KKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm0yeDE2OgorKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm0yeDE2IjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm0yeDE2IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19m
bG9hdF90b191bm9ybTR4OCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3Jt
NHg4OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgi
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisrICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6dW5wYWNrX3Nub3JtMngxNl90b19mbG9hdCI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6dW5wYWNrX3Vub3JtNHg4X3RvX2Zsb2F0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVbnBhY2tTbm9ybTR4ODoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfc25v
cm00eDhfdG9fZmxvYXQiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxm
MngxNjoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3BhY2tfaGFsZl8yeDE2IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tIYWxmMngxNjoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVs
ZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJyeToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVsRXh0ZW5kZWQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllcklt
YWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJTaGFyZWQ6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRp
dmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFycmF5
TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gIlRPcGVy
YXRvcl9UT0RPIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
SW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0Ogor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgICAgICBMT0dJQ19FUlJP
UigpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrfQorKworKyNpZiAw
Cisrc3RhdGljIGludCBHZXRPcGVyYXRvclByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysg
ICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1h
OiB7CisrICAgICAgICAgICAgcmV0dXJuIDE3OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VY
b3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOiB7
CisrICAgICAgICAgICAgcmV0dXJuIDE2OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3I6IHsKKysgICAgICAgICAgICByZXR1cm4gMTU7
CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6IHsKKysgICAgICAgICAgICByZXR1cm4gMTQ7CisrICAgICAgICB9IGJyZWFrOworKwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjogeworKyAgICAgICAgICAgIHJl
dHVybiAxMzsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQml0d2lzZVhvcjogeworKyAgICAgICAgICAgIHJldHVybiAxMjsKKysgICAgICAgIH0gYnJl
YWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworKyAgICAg
ICAgICAgIHJldHVybiAxMTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVh
bDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworKyAgICAgICAgICAg
IHJldHVybiAxMDsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsOiB7CisrICAgICAgICAgICAgcmV0dXJu
IDk7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dFNoaWZ0TGVmdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7
CisrICAgICAgICAgICAgcmV0dXJuIDc7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6
IHsKKysgICAgICAgICAgICByZXR1cm4gNjsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
djoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOiB7CisrICAgICAgICAgICAgcmV0
dXJuIDU7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE5lZ2F0aXZlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU5vdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVJbmNyZW1l
bnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OiB7CisrICAgICAg
ICAgICAgcmV0dXJuIDM7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
dERlY3JlbWVudDogeworKyAgICAgICAgICAgIHJldHVybiAyOworKyAgICAgICAgfSBicmVhazsK
KysKKysgICAgICAgIGRlZmF1bHQ6IHsKKysgICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAg
ICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK25hbWVzcGFjZQorK3sK
KysKKytlbnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKKyt7CisrICAgIE5vbmUsCisrICAgIExlZnQs
CisrICAgIFJpZ2h0LAorK307CisrCisrfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrc3Rh
dGljIEFzc29jaWF0aXZpdHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCisreworKyAg
ICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhh
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNh
bE9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BDb21tYTogeworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpMZWZ0OworKyAg
ICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBZGRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNz
aWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOiB7CisrICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZp
dHk6OlJpZ2h0OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdElu
Y3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6IHsKKysgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRp
dml0eTo6Tm9uZTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OiB7Cisr
ICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpO
b25lOworKyAgICAgICAgfQorKyAgICB9CisrfQorKyNlbmRpZgorKworK3N0YXRpYyBib29sIElz
U3ltYm9saWNPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisreworKyAgICBpZiAob3Ag
PT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuICFzdGQ6OmlzYWxudW0oR2V0T3BlcmF0
b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsIGFyZ1R5cGUwLCBhcmdUeXBlMSlbMF0pOworK30KKysK
KytzdGF0aWMgVEludGVybUJpbmFyeSAqQXNTcGVjaWZpY0JpbmFyeU5vZGUoVEludGVybU5vZGUg
Jm5vZGUsIFRPcGVyYXRvciBvcCkKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUg
PSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworKyAgICBpZiAoYmluYXJ5Tm9kZSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3AgPyBiaW5hcnlOb2RlIDog
bnVsbHB0cjsKKysgICAgfQorKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CisrCisrc3RhdGljIGJv
b2wgUGFyZW50aGVzaXplKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgaWYgKG5vZGUuZ2V0
QXNTeW1ib2xOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAobm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc1N3
aXp6bGVOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkp
CisrICAgIHsKKysgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0
aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBsLgorKyAgICAgICAgY29uc3Qg
VFR5cGUgJnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0
IFRUeXBlICZhcmdUeXBlICAgID0gdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsK
KysgICAgICAgIHJldHVybiBJc1N5bWJvbGljT3BlcmF0b3IodW5hcnlOb2RlLT5nZXRPcCgpLCBy
ZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisrICAgIH0KKysKKysgICAgaWYgKFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICAv
LyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVzIGluc3RlYWQg
b2YgdGhpcyBhZC1ob2MgaW1wbC4KKysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFy
eU5vZGUtPmdldE9wKCk7CisrICAgICAgICBzd2l0Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICAgICAgICAgIHJldHVybiBQYXJl
bnRoZXNpemUoKmJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisrCisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZToKKysgICAgICAgICAgICAgICAgcmV0dXJuIEFzU3BlY2lmaWNCaW5hcnlOb2RlKCpi
aW5hcnlOb2RlLT5nZXRSaWdodCgpLCBUT3BlcmF0b3I6OkVPcENvbW1hKTsKKysKKysgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlOb2RlLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gYmluYXJ5Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gSXNTeW1i
b2xpY09wZXJhdG9yKGJpbmFyeU5vZGUtPmdldE9wKCksIHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwg
JnJpZ2h0VHlwZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpncm91cGVkVHJh
dmVyc2UoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBjb25zdCBib29sIGVtaXRQYXJlbnMg
PSBQYXJlbnRoZXNpemUobm9kZSk7CisrCisrICAgIGlmIChlbWl0UGFyZW5zKQorKyAgICB7Cisr
ICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgfQorKworKyAgICBub2RlLnRyYXZlcnNlKHRoaXMp
OworKworKyAgICBpZiAoZW1pdFBhcmVucykKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNs
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKQorK3sKKysgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAgICAgICBjYXNlIFRRdWFs
aWZpZXI6OkV2cUZyYWdDb29yZDoKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1twb3NpdGlvbl1d
IjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
UG9pbnRTaXplOgorKyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElE
OgorKyAgICAgICAgICAgIGlmIChldmRDb25maWcuaXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFt
ZXRlcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50
X2Nvb3JkXV0iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJvbnRGYWNpbmc6CisrICAgICAgICAgICAgaWYgKGV2
ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBtT3V0IDw8ICIgW1tmcm9udF9mYWNpbmddXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorKworKyAgICBjb25zdCBib29sIGlzSW52YXJpYW50ID0KKysgICAgICAgIGRlY2wuaXNG
aWVsZCgpID8gbUludmFyaWFudHMuY29udGFpbnMoZGVjbC5maWVsZCgpKSA6IG1JbnZhcmlhbnRz
LmNvbnRhaW5zKGRlY2wudmFyaWFibGUoKSk7CisrCisrICAgIGlmIChpc0ludmFyaWFudCkKKysg
ICAgeworKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworKyAgICB9CisrfQorKwor
K3N0YXRpYyB2b2lkIEVtaXROYW1lKFNpbmsgJm91dCwgY29uc3QgTmFtZSAmbmFtZSkKKyt7Cisr
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisrICAgIERlYnVnU2luazo6RXNjYXBl
ZFNpbmsgZXNjYXBlZE91dChvdXQuZXNjYXBlKCkpOworKyNlbHNlCisrICAgIFRJbmZvU2lua0Jh
c2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisrI2VuZGlmCisrICAgIG5hbWUuZW1pdChlc2NhcGVkT3V0
KTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBURmll
bGQgJm9iamVjdCkKKyt7CisrICAgIEVtaXROYW1lKG1PdXQsIE5hbWUob2JqZWN0KSk7CisrfQor
KworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVFN5bWJvbCAmb2Jq
ZWN0KQorK3sKKysgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOwor
KyAgICBpZiAoaXQgPT0gbVJlbmFtZWRTeW1ib2xzLmVuZCgpKQorKyAgICB7CisrICAgICAgICBF
bWl0TmFtZShtT3V0LCBOYW1lKG9iamVjdCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmplY3QpCisr
eworKyAgICBpZiAob2JqZWN0LmlzRmllbGQoKSkKKysgICAgeworKyAgICAgICAgZW1pdE5hbWVP
ZihvYmplY3QuZmllbGQoKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBl
bWl0TmFtZU9mKG9iamVjdC52YXJpYWJsZSgpKTsKKysgICAgfQorK30KKysKKyt2b2lkIEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0QmFyZVR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBF
bWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2lj
VHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQor
KyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFZvaWQ6CisrICAgICAgICBjYXNl
IFRCYXNpY1R5cGU6OkVidEJvb2w6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisrICAgICAgICBjYXNlIFRCYXNp
Y1R5cGU6OkVidFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0eXBlLmdl
dEJhc2ljU3RyaW5nKCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAg
ICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
IHsKKysgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKysgICAgICAgICAgICBlbWl0TmFtZU9mKGludGVy
ZmFjZUJsb2NrKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVm
YXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBHZXRUZXh0dXJlVHlwZU5h
bWUoYmFzaWNUeXBlKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxz
ZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0
dXJlICZlbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKysgICAgICAg
ICAgICAgICAgICAgIGVtaXROYW1lT2YoZW52KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBUT0RPKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25z
dCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnKQorKyAgICB7CisrICAgICAgICBjb25zdCBhdXRvICZldmRDb25maWcgPSAqZXRDb25maWcu
ZXZkQ29uZmlnOworKyAgICAgICAgaWYgKGV2ZENvbmZpZy5pc1BvaW50ZXIpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUG9pbnRlcik7Cisr
ICAgICAgICAgICAgbU91dCA8PCAiICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChl
dmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0
b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIg
IjsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIkFOR0xFX3RlbnNvcjwiOworKyAgICB9CisrCisrICAgIGlm
ICh0eXBlLmlzVmVjdG9yKCkgfHwgdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8ICJtZXRhbDo6IjsKKysgICAgfQorKworKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisrICAgIHsKKysgICAgICAgIG1PdXQg
PDwgInBhY2tlZF8iOworKyAgICB9CisrCisrICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwgZXRD
b25maWcpOworKworKyAgICBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysgICAgfQorKyAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgdHlwZS5nZXRDb2xzKCkgPDwg
IngiIDw8IHR5cGUuZ2V0Um93cygpOworKyAgICB9CisrCisrICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKysgICAgeworKyAgICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMo
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIsICIgPDwgc2l6ZTsKKysgICAg
ICAgIH0KKysgICAgICAgIG1PdXQgPDwgIj4iOworKyAgICB9CisrCisrICAgIGlmIChldENvbmZp
Zy5ldmRDb25maWcpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpl
dENvbmZpZy5ldmRDb25maWc7CisrICAgICAgICBpZiAoZXZkQ29uZmlnLmlzUG9pbnRlcikKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgKiI7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlIGlmIChldmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgbU91dCA8PCAiICYiOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAmcGFyZW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
Y29uc3QgVFR5cGUgJnR5cGUgICAgICA9ICpmaWVsZC50eXBlKCk7CisrICAgIGNvbnN0IFRCYXNp
Y1R5cGUgYmFzaWMgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworKworKyAgICBFbWl0VmFyaWFibGVE
ZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisrICAgIGV2ZENvbmZpZy5lbWl0UG9zdFF1YWxp
ZmllciAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIg
PSB0cnVlOworKyAgICBldmRDb25maWcuaXNQYWNrZWQgICAgICAgICAgICAgICA9IG1TeW1ib2xF
bnYuaXNQYWNrZWQoZmllbGQpOworKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgICAg
ICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKGZpZWxkKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKysgICAgZW1p
dFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyRGVjbChmaWVsZCksIGV2ZENvbmZpZyk7CisrCisrICAg
IGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisrICAgIHN3aXRj
aCAocXVhbCkKKysgICAgeworKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46Cisr
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZVN0cnVjdHMuZnJhZ21lbnRJbi5leHRlcm5hbCA9PSAm
cGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFGcmFnRGF0YToKKysgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVu
dE91dC5leHRlcm5hbCA9PSAmcGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaWYgKCh0eXBlLmlzVmVjdG9yKCkgJiYKKysgICAgICAgICAgICAgICAgICAgICAoYmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgYmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpKSB8
fAorKyAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0
YSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzoKKysg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gZ2VuZXJhbCBhbmQg
bmVlZHMgYSByZWltcGxlbWVudGF0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xT
TCAzLjAsIFdlIGNhbid0IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUg
aW5kZXguCisrICAgICAgICAgICAgICAgICAgICAvLyBTZWUgNC4zLjguMgorKyAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNz
L2VzLzMuMC9HTFNMX0VTX1NwZWNpZmljYXRpb25fMy4wMC5wZGYKKysgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisrICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgW1tjb2xvcigiIDw8IGluZGV4IDw8ICIpXV0iOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisrICAgICAgICAgICAgbU91dCA8
PCAiIFtbZGVwdGgoYW55KV1dIjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRl
ZmF1bHQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHN0ZDo6
bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0ZUluZGV4TWFwKAorKyAgICBj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICBjb25zdCBQaXBlbGluZVNjb3BlZDxUU3Ry
dWN0dXJlPiAmc3RydWN0dXJlKQorK3sKKysgICAgQVNTRVJUKHN0cnVjdHVyZS5pc1RvdGFsbHlG
dWxsKCkpOworKworKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9IGNvbXBpbGVyLmdl
dEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc2l6ZV90IHNoYWRlclZhclNpemUgPSBzaGFkZXJW
YXJzLnNpemUoKTsKKysgICAgc2l6ZV90IHNoYWRlclZhckluZGV4ICAgICAgPSAwOworKworKyAg
ICBjb25zdCBhdXRvICZleHRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5leHRlcm5hbC0+ZmllbGRz
KCk7CisrICAgIGNvbnN0IHNpemVfdCBleHRlcm5hbFNpemUgID0gZXh0ZXJuYWxGaWVsZHMuc2l6
ZSgpOworKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisrCisrICAgIGNvbnN0
IGF1dG8gJmludGVybmFsRmllbGRzID0gc3RydWN0dXJlLmludGVybmFsLT5maWVsZHMoKTsKKysg
ICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7Cisr
ICAgIHNpemVfdCBpbnRlcm5hbEluZGV4ICAgICAgID0gMDsKKysKKysgICAgLy8gSW50ZXJuYWwg
ZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3Bs
aXQuCisrICAgIEFTU0VSVChleHRlcm5hbFNpemUgPj0gaW50ZXJuYWxTaXplKTsKKysKKysgICAg
Ly8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorKyAgICBB
U1NFUlQoc2hhZGVyVmFyU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworKworKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisrICAgIHNpemVfdCBh
dHRyaWJ1dGVJbmRleCA9IDA7CisrCisrICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJu
YWxTaXplKQorKyAgICB7CisrICAgICAgICBjb25zdCBURmllbGQgJmludGVybmFsRmllbGQgPSAq
aW50ZXJuYWxGaWVsZHNbaW50ZXJuYWxJbmRleF07CisrICAgICAgICBjb25zdCBOYW1lIGludGVy
bmFsTmFtZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworKyAgICAgICAgY29uc3QgVFR5cGUg
JmludGVybmFsVHlwZSAgID0gKmludGVybmFsRmllbGQudHlwZSgpOworKyAgICAgICAgd2hpbGUg
KGludGVybmFsTmFtZS5yYXdOYW1lKCkgIT0gc2hhZGVyVmFyc1tzaGFkZXJWYXJJbmRleF0ubmFt
ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBp
bmFjdGl2ZSBmaWVsZC4KKysKKysgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworKyAgICAg
ICAgICAgIEFTU0VSVChzaGFkZXJWYXJJbmRleCA8IHNoYWRlclZhclNpemUpOworKworKyAgICAg
ICAgICAgICsrYXR0cmlidXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVu
dCBtb3JlIGlmIHNoYWRlciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IHNpemVfdCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRl
cm5hbFR5cGUuZ2V0Q29scygpIDogMTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBj
IDwgY29sczsgKytjKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZXh0
ZXJuYWxGaWVsZCA9ICpleHRlcm5hbEZpZWxkc1tleHRlcm5hbEluZGV4XTsKKysgICAgICAgICAg
ICBjb25zdCBOYW1lIGV4dGVybmFsTmFtZSAgICAgPSBOYW1lKGV4dGVybmFsRmllbGQpOworKyAg
ICAgICAgICAgIEFTU0VSVCghZXh0ZXJuYWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworKwor
KyAgICAgICAgICAgIGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXhbZXh0ZXJuYWxOYW1lXSA9
IGF0dHJpYnV0ZUluZGV4OworKworKyAgICAgICAgICAgICsrZXh0ZXJuYWxJbmRleDsKKysgICAg
ICAgICAgICArK2F0dHJpYnV0ZUluZGV4OworKyAgICAgICAgfQorKworKyAgICAgICAgKytzaGFk
ZXJWYXJJbmRleDsKKysgICAgICAgICsraW50ZXJuYWxJbmRleDsKKysgICAgfQorKworKyAgICBB
U1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7CisrICAgIEFTU0VSVChleHRl
cm5hbEluZGV4IDw9IGV4dGVybmFsU2l6ZSk7ICAvLyBsZXNzIHRoYW4gaWYgcGFkZGluZyB3YXMg
aW50cm9kdWNlZAorKyAgICBBU1NFUlQoaW50ZXJuYWxJbmRleCA9PSBpbnRlcm5hbFNpemUpOwor
KworKyAgICByZXR1cm4gZXh0ZXJuYWxOYW1lVG9BdHRyaWJ1dGVJbmRleDsKKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVs
ZCAmZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
RW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZkQ29uZmlnOworKyAgICBldmRDb25maWcu
ZGlzYWJsZVN0cnVjdFNwZWNpZmllciA9IHRydWU7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0
aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworKyAgICBtT3V0IDw8ICIgW1thdHRyaWJ1
dGUoIiA8PCBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUrKyA8PCAiKV1dIjsKKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKQorK3sKKysgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlw
ZTo6RWJ0U3RydWN0KTsKKysgICAgQVNTRVJUKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSk7Cisr
CisrICAgIG1PdXQgPDwgInN0cnVjdCAiOworKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIHt9
KTsKKysKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBlbWl0T3BlbkJyYWNlKCk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICBz
dGQ6Om1hcDxOYW1lLCBzaXplX3Q+IGZpZWxkVG9BdHRyaWJ1dGVJbmRleDsKKysgICAgY29uc3Qg
Ym9vbCBoYXNBdHRyaWJ1dGVJbmRpY2VzICAgICAgICAgICA9IG1QaXBlbGluZVN0cnVjdHMudmVy
dGV4SW4uZXh0ZXJuYWwgPT0gJnN0cnVjdHVyZTsKKysgICAgY29uc3QgYm9vbCByZWNsYWltVW51
c2VkQXR0cmlidXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7
CisrCisrICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorKyAgICB7CisrICAgICAgICBmaWVs
ZFRvQXR0cmlidXRlSW5kZXggPQorKyAgICAgICAgICAgIEJ1aWxkRXh0ZXJuYWxBdHRyaWJ1dGVJ
bmRleE1hcChtQ29tcGlsZXIsIG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4pOworKyAgICB9Cisr
CisrICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgYW5ub3RhdGlvbkluZGljZXM7CisrCisrICAg
IGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHN0cnVjdHVyZS5maWVsZHMoKSkKKysgICAgewor
KyAgICAgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgICAgICBpZiAoaGFzQXR0cmlidXRlSW5k
aWNlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0
dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgqZmllbGQpKTsKKysgICAgICAgICAgICBpZiAoaXQgPT0g
ZmllbGRUb0F0dHJpYnV0ZUluZGV4LmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+bmFtZSgpLmJlZ2luc1dpdGgo
Il8iKSk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5h
bWUoKS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJh
dGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmllbGQtPnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsIHx8
CisrICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQtPm5hbWUoKS5iZWdpbnNXaXRoKCJfIikg
fHwKKysgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUo
KS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlY2xhaW1VbnVzZWRB
dHRyaWJ1dGVJbmRpY2VzKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIGVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigqZmllbGQs
IGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZW1pdEZpZWxkRGVjbGFyYXRpb24oKmZp
ZWxkLCBzdHJ1Y3R1cmUsIGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgIH0KKysgICAgICAg
IG1PdXQgPDwgIjtcbiI7CisrICAgIH0KKysKKysgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1h
dGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKysgICAgeworKyAgICAgICAgTWV0YWxMYXlv
dXRPZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1w
bGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisrICAgICAgICBMYXlvdXQgbGF5b3V0ICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29uZmlnKTsKKysg
ICAgICAgIHNpemVfdCBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGF5b3V0LnNp
emVPZiAlIDE2OworKyAgICAgICAgaWYgKHBhZCAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKysg
ICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBtSWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIikpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgIlsiIDw8IHBhZCA8PCAiXTtcbiI7CisrICAgICAgICB9Cisr
ICAgIH0KKysKKysgICAgZW1pdENsb3NlQnJhY2UoKTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKysgICAgY29uc3QgVmFy
RGVjbCAmZGVjbCwKKysgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2
ZENvbmZpZykKKyt7CisrICAgIEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKyAgICBldENvbmZp
Zy5ldmRDb25maWcgPSAmZXZkQ29uZmlnOworKworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGRl
Y2wudHlwZSgpOworKyAgICBlbWl0VHlwZSh0eXBlLCBldENvbmZpZyk7CisrCisrICAgIGlmIChk
ZWNsLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiICI7CisrICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZh
ckRlY2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKKyt7
CisrICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IGRlY2wuc3ltYm9sVHlwZSgpOwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBkZWNsLnR5cGUoKTsKKysgICAgY29u
c3QgVEJhc2ljVHlwZSBiYXNpY1R5cGUgID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0
U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICh0eXBlLmlzU3RydWN0U3BlY2lm
aWVyKCkgJiYgIWV2ZENvbmZpZy5kaXNhYmxlU3RydWN0U3BlY2lmaWVyKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAg
ICAgICAgICAgICAgICBlbWl0U3RydWN0RGVjbGFyYXRpb24odHlwZSk7CisrICAgICAgICAgICAg
ICAgIGlmIChzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8ICIgIjsKKysgICAgICAgICAgICAgICAg
ICAgIGVtaXROYW1lT2YoZGVjbCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbihkZWNsLCBldmRDb25maWcpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoK
KysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBl
OjpFbXB0eSB8fCBldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAgICAgICAgICAgIGVtaXRPcmRp
bmFyeVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICBpZiAoZXZkQ29uZmlnLmVtaXRQb3N0UXVhbGlmaWVyKQorKyAgICB7Cisr
ICAgICAgICBlbWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlm
aWVyKCkpOworKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCisreworKyAgICBjb25zdCBUVmFyaWFibGUg
JnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisrICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ID0gdmFyLmdldFR5cGUoKTsKKysKKysgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3lt
Ym9sVHlwZTo6RW1wdHkpOworKworKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFz
aWNUeXBlOjpFYnRWb2lkKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8ICIvKiI7CisrICAgICAg
ICBlbWl0TmFtZU9mKHZhcik7CisrICAgICAgICBtT3V0IDw8ICIqLyI7CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0TmFtZU9mKHZhcik7CisrICAgIH0KKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0IFRDb25zdGFu
dFVuaW9uICpjb25zdCBjb25zdFVuaW9uKQorK3sKKysgICAgc3dpdGNoIChjb25zdFVuaW9uLT5n
ZXRUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IChjb25zdFVuaW9uLT5nZXRCQ29uc3QoKSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorKyAgICAgICAgeworKyAgICAgICAgICAg
IG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkgPDwgImYiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOworKyAg
ICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVi
dFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRV
Q29uc3QoKSA8PCAidSI7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgfQor
KyAgICB9CisrfQorKworK2NvbnN0IFRDb25zdGFudFVuaW9uICpHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdENvbnN0YW50VW5pb25BcnJheSgKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0
IGNvbnN0VW5pb24sCisrICAgIGNvbnN0IHNpemVfdCBzaXplKQorK3sKKysgICAgY29uc3QgVENv
bnN0YW50VW5pb24gKmNvbnN0VW5pb25JdGVyYXRlZCA9IGNvbnN0VW5pb247CisrICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKysgICAg
eworKyAgICAgICAgZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0VW5pb25JdGVyYXRlZCk7CisrCisr
ICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0
IDw8ICIsICI7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVy
YXRlZDsKKyt9CisrCisrY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVu
aW9uICpjb25zdFVuaW9uQmVnaW4pCisreworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29u
c3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47CisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0
cnVjdHVyZSAgICAgICAgICA9IHR5cGUuZ2V0U3RydWN0KCk7CisrICAgIGlmIChzdHJ1Y3R1cmUp
CisrICAgIHsKKysgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmln
e251bGxwdHJ9OworKyAgICAgICAgZW1pdFR5cGUodHlwZSwgY29uZmlnKTsKKysgICAgICAgIG1P
dXQgPDwgInsiOworKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJl
LT5maWVsZHMoKTsKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgKytpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUg
PSBmaWVsZHNbaV0tPnR5cGUoKTsKKysgICAgICAgICAgICBjb25zdFVuaW9uQ3VyciAgICAgICAg
ID0gZW1pdENvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbkN1cnIpOworKyAgICAg
ICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgbU91dCA8PCAiLCAiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysg
ICAgICAgIG1PdXQgPDwgIn0iOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAg
c2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKysgICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7CisrICAgICAgICBpZiAod3JpdGVUeXBlKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmlne251bGxw
dHJ9OworKyAgICAgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZpZyk7CisrICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdFVuaW9uQ3VyciA9IGVtaXRD
b25zdGFudFVuaW9uQXJyYXkoY29uc3RVbmlvbkN1cnIsIHNpemUpOworKyAgICAgICAgaWYgKHdy
aXRlVHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIpIjsKKysgICAgICAg
IH0KKysgICAgfQorKyAgICByZXR1cm4gY29uc3RVbmlvbkN1cnI7CisrfQorKworK3ZvaWQgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RWYWx1ZU5vZGUpCisreworKyAgICBlbWl0Q29uc3RhbnRVbmlvbihjb25zdFZhbHVlTm9k
ZS0+Z2V0VHlwZSgpLCBjb25zdFZhbHVlTm9kZS0+Z2V0Q29uc3RhbnRWYWx1ZSgpKTsKKyt9Cisr
CisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dp
enpsZSAqc3dpenpsZU5vZGUpCisreworKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2Rl
LT5nZXRPcGVyYW5kKCkpOworKyAgICBtT3V0IDw8ICIuIjsKKysKKysgICAgeworKyNpZiBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICAgICAgRGVidWdTaW5rOjpFc2NhcGVkU2lu
ayBlc2NhcGVkT3V0KG1PdXQuZXNjYXBlKCkpOworKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gZXNjYXBlZE91dC5nZXQoKTsKKysjZWxzZQorKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ICAgICAgICA9IG1PdXQ7CisrI2VuZGlmCisrICAgICAgICBzd2l6emxlTm9kZS0+d3JpdGVPZmZz
ZXRzQXNYWVpXKCZvdXQpOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisr
Y29uc3QgVEZpZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gJmZpZWxkTGlzdENvbGxlY3Rpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmlu
ZGV4KQorK3sKKysgICAgQVNTRVJUKGluZGV4LmdldFR5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRJ
bnQpOworKworKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBmaWVsZExpc3RDb2xs
ZWN0aW9uLmZpZWxkcygpOworKyAgICBjb25zdCBpbnQgaW5kZXhWYWwgICAgICAgICAgPSBpbmRl
eC5nZXRJQ29uc3QoKTsKKysgICAgY29uc3QgVEZpZWxkICZmaWVsZCAgICAgICAgID0gKmZpZWxk
TGlzdFtpbmRleFZhbF07CisrCisrICAgIHJldHVybiBmaWVsZDsKKyt9CisrCisrY29uc3QgVEZp
ZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEludGVybVR5cGVk
ICZmaWVsZHNOb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZp
ZWxkc1R5cGUgPSBmaWVsZHNOb2RlLmdldFR5cGUoKTsKKysKKysgICAgY29uc3QgVEZpZWxkTGlz
dENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgp
OworKyAgICBpZiAoZmllbGRMaXN0Q29sbGVjdGlvbiA9PSBudWxscHRyKQorKyAgICB7CisrICAg
ICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygp
OworKyAgICB9CisrICAgIEFTU0VSVChmaWVsZExpc3RDb2xsZWN0aW9uKTsKKysKKysgICAgY29u
c3QgVEludGVybUNvbnN0YW50VW5pb24gKmluZGV4Tm9kZV8gPSBpbmRleE5vZGUuZ2V0QXNDb25z
dGFudFVuaW9uKCk7CisrICAgIEFTU0VSVChpbmRleE5vZGVfKTsKKysgICAgY29uc3QgVENvbnN0
YW50VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKysKKysg
ICAgcmV0dXJuIGdldERpcmVjdEZpZWxkKCpmaWVsZExpc3RDb2xsZWN0aW9uLCBpbmRleCk7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJt
QmluYXJ5ICpiaW5hcnlOb2RlKQorK3sKKysgICAgY29uc3QgVE9wZXJhdG9yIG9wICAgICAgPSBi
aW5hcnlOb2RlLT5nZXRPcCgpOworKyAgICBUSW50ZXJtVHlwZWQgJmxlZnROb2RlICA9ICpiaW5h
cnlOb2RlLT5nZXRMZWZ0KCk7CisrICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFy
eU5vZGUtPmdldFJpZ2h0KCk7CisrCisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAi
LiI7CisrICAgICAgICAgICAgZW1pdE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmln
aHROb2RlKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleEluZGlyZWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShs
ZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAiWyI7CisrICAgICAgICAgICAgcmlnaHRO
b2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgIG1PdXQgPDwgIl0iOworKyAgICAgICAg
fQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlwZSgp
OworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gbGVmdE5vZGUuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gcmlnaHROb2RlLmdl
dFR5cGUoKTsKKysKKysgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXN1
bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKysgICAgICAgICAgICAgICAgaWYg
KG9wICE9IFRPcGVyYXRvcjo6RU9wQ29tbWEpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0VHlw
ZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uo
cmlnaHROb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVz
dWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSA8PCAiKCI7CisrICAgICAgICAgICAgICAg
IGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7
CisrICAgICAgICAgICAgICAgIHJpZ2h0Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9Cisr
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIGJvb2wgSXNQb3N0Zml4KFRPcGVy
YXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBv
c3REZWNyZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAgICAgICBkZWZh
dWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9k
ZSkKKyt7CisrICAgIGNvbnN0IFRPcGVyYXRvciBvcCAgICAgID0gdW5hcnlOb2RlLT5nZXRPcCgp
OworKyAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOwor
KworKyAgICBUSW50ZXJtVHlwZWQgJmFyZyAgICA9ICp1bmFyeU5vZGUtPmdldE9wZXJhbmQoKTsK
KysgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKworKyAgICBjb25z
dCBjaGFyICpuYW1lID0gR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBl
KTsKKysKKysgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmFyZ1R5
cGUpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIHBvc3RmaXggPSBJc1Bvc3RmaXgob3Ap
OworKyAgICAgICAgaWYgKCFwb3N0Zml4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgbmFtZTsKKysgICAgICAgIH0KKysgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShhcmcpOworKyAg
ICAgICAgaWYgKHBvc3RmaXgpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBuYW1l
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8
PCBuYW1lIDw8ICIoIjsKKysgICAgICAgIGFyZy50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIG1P
dXQgPDwgIikiOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBH
ZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29u
ZGl0aW9uYWxOb2RlKQorK3sKKysgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25hbE5vZGUt
PmdldENvbmRpdGlvbigpKTsKKysgICAgbU91dCA8PCAiID8gIjsKKysgICAgZ3JvdXBlZFRyYXZl
cnNlKCpjb25kaXRpb25hbE5vZGUtPmdldFRydWVFeHByZXNzaW9uKCkpOworKyAgICBtT3V0IDw8
ICIgOiAiOworKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VF
eHByZXNzaW9uKCkpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICppZlRoZW5FbHNl
Tm9kZSkKKyt7CisrICAgIFRJbnRlcm1UeXBlZCAmY29uZE5vZGUgPSAqaWZUaGVuRWxzZU5vZGUt
PmdldENvbmRpdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgKnRoZW5Ob2RlID0gaWZUaGVuRWxz
ZU5vZGUtPmdldFRydWVCbG9jaygpOworKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZU
aGVuRWxzZU5vZGUtPmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7
CisrICAgIG1PdXQgPDwgImlmICgiOworKyAgICBjb25kTm9kZS50cmF2ZXJzZSh0aGlzKTsKKysg
ICAgbU91dCA8PCAiKSI7CisrCisrICAgIGlmICh0aGVuTm9kZSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiXG4iOworKyAgICAgICAgdGhlbk5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiIHt9IjsKKysgICAgfQorKwor
KyAgICBpZiAoZWxzZU5vZGUpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIlxuIjsKKysgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgbU91dCA8PCAiZWxzZVxuIjsKKysgICAg
ICAgIGVsc2VOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIC8vIEFsd2F5cyBlbWl0ICJlbHNlIiBldmVuIHdoZW4gZW1wdHkgYmxvY2sgdG8g
YXZvaWQgbmVzdGVkIGlmLXN0bXQgaXNzdWVzLgorKyAgICAgICAgbU91dCA8PCAiIGVsc2Uge30i
OworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRy
YXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5vZGUpCisr
eworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAic3dpdGNoICgiOworKyAg
ICBzd2l0Y2hOb2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworKyAgICBtT3V0IDw8ICIp
XG4iOworKworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrICAgIG1QYXJlbnRJc1N3
aXRjaCA9IHRydWU7CisrICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVy
c2UodGhpcyk7CisrICAgIG1QYXJlbnRJc1N3aXRjaCA9IGZhbHNlOworKworKyAgICByZXR1cm4g
ZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwg
VEludGVybUNhc2UgKmNhc2VOb2RlKQorK3sKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrCisr
ICAgIGlmIChjYXNlTm9kZS0+aGFzQ29uZGl0aW9uKCkpCisrICAgIHsKKysgICAgICAgIFRJbnRl
cm1UeXBlZCAqY29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgICAgICBt
T3V0IDw8ICJjYXNlICI7CisrICAgICAgICBjb25kRXhwci0+dHJhdmVyc2UodGhpcyk7CisrICAg
ICAgICBtT3V0IDw8ICI6IjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1P
dXQgPDwgImRlZmF1bHQ6XG4iOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IFRG
dW5jdGlvbiAmZnVuYykKKyt7CisrICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4o
KTsKKysKKysgICAgZW1pdEZ1bmN0aW9uUmV0dXJuKGZ1bmMpOworKworKyAgICBtT3V0IDw8ICIg
IjsKKysgICAgZW1pdE5hbWVPZihmdW5jKTsKKysgICAgaWYgKGlzTWFpbikKKysgICAgeworKyAg
ICAgICAgbU91dCA8PCAiMCI7CisrICAgIH0KKysgICAgbU91dCA8PCAiKCI7CisrCisrICAgIGJv
b2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBwYXJhbUNv
dW50ID0gZnVuYy5nZXRQYXJhbUNvdW50KCk7CisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFyYW1Db3VudDsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAoZW1pdENvbW1hKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKysgICAgICAgIH0KKysgICAgICAgIGVt
aXRDb21tYSA9IHRydWU7CisrCisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoZnVuYywgcGFy
YW0pOworKyAgICB9CisrCisrICAgIG1PdXQgPDwgIikiOworK30KKysKKyt2b2lkIEdlbk1ldGFs
VHJhdmVyc2VyOjplbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorK3sK
KysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKworKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworKyAgICBpZiAoaXNNYWlu
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5U
eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBudWxscHRyKTsK
KysgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0Lm1hdGNoZXMoKnN0cnVj
dHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiZnJhZ21lbnQgIjsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1h
dGNoZXMoKnN0cnVjdHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAidmVy
dGV4ICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVtaXRUeXBlKHJldHVyblR5cGUs
IEVtaXRUeXBlQ29uZmlnKCkpOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUg
JnBhcmFtKQorK3sKKysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBwYXJhbS5nZXRUeXBlKCk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisrCisrICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysgICAgZXZkQ29uZmln
LmlzUGFyYW1ldGVyICAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRl
ciAgID0gaXNNYWluOworKyAgICBldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIgPSBpc01haW47
CisrICAgIGV2ZENvbmZpZy5pc1BvaW50ZXIgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQb2ludGVy
KHBhcmFtKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAgICAgID0gbVN5bWJvbEVudi5p
c1JlZmVyZW5jZShwYXJhbSk7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2wo
cGFyYW0pLCBldmRDb25maWcpOworKworKyAgICBpZiAoaXNNYWluKQorKyAgICB7CisrICAgICAg
ICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0KKysgICAgICAgICAgICAo
KHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbigpOworKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNoZXMoKnN0cnVj
dHVyZSkgfHwKKysgICAgICAgICAgICAgICAgbVBpcGVsaW5lU3RydWN0cy52ZXJ0ZXhJbi5tYXRj
aGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8
PCAiIFtbc3RhZ2VfaW5dXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg
KG1QaXBlbGluZVN0cnVjdHMuYW5nbGVVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbYnVmZmVyKCIgPDwgcng6
Om10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4IDw8ICIpXV0iOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5t
YXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbYnVmZmVyKCIgPDwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPDwgIildXSI7Cisr
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFt
Lm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKysgICAgICAgICAgICAg
ICAgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBt
T3V0IDw8ICIgW1tzYW1wbGVyKCIgPDwgKG1NYWluU2FtcGxlckluZGV4KSA8PCAiKV1dIjsKKysg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKysgICAgICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmdldE9yaWdpbmFsTmFtZShwYXJhbS51bmlxdWVJZCgp
LmdldCgpKTsKKysgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkU2FtcGxlckJpbmRpbmco
b3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgICAgIG1NYWlu
U2FtcGxlckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1t0ZXh0dXJlKCIg
PDwgKG1NYWluVGV4dHVyZUluZGV4KSA8PCAiKV1dIjsKKysgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyBvcmlnaW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0u
dW5pcXVlSWQoKS5nZXQoKSk7CisrICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkVGV4dHVyZUJp
bmRpbmcob3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgbU1h
aW5UZXh0dXJlSW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlIGlmIChOYW1lKHBhcmFtKSA9PSBQaXBlbGluZXtQaXBlbGluZTo6VHlw
ZTo6SW5zdGFuY2VJZCwgbnVsbHB0cn0uZ2V0U3RydWN0SW5zdGFuY2VOYW1lKAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiIFtbaW5zdGFuY2VfaWRdXSI7Cisr
ICAgICAgICB9CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRG
dW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUp
CisreworKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKQorK3sKKysgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRG
dW5jdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgJmJvZHkgICAgPSAqZnVuY0RlZk5vZGUtPmdl
dEJvZHkoKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBib2R5LnRyYXZlcnNlKHRo
aXMpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK0dlbk1ldGFsVHJhdmVyc2VyOjpG
dW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorK3sKKysgICAg
RnVuY1RvTmFtZSBtYXA7CisrCisrICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3QgY2hhciAq
bmFtZVN0cikgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIG5hbWUobmFtZVN0cik7
CisrICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKysgICAgICAg
IG1hcFtuYW1lXSA9IE5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
ICAgIH07CisrCisrICAgIHB1dEFuZ2xlKCJ0ZXhlbEZldGNoIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXhlbEZldGNoT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisrICAgIHB1dEFu
Z2xlKCJ0ZXh0dXJlMUQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUxRExvZCIpOworKyAgICBw
dXRBbmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkRMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUy
RFByb2oiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2pMb2QiKTsKKysgICAgcHV0QW5n
bGUoInRleHR1cmUzRCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisrICAgIHB1
dEFuZ2xlKCJ0ZXh0dXJlM0RQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZSIp
OworKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1
cmVDdWJlUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZUdyYWQiKTsKKysgICAgcHV0
QW5nbGUoInRleHR1cmVHcmFkT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvaiIpOworKyAgICBwdXRBbmds
ZSgidGV4dHVyZVByb2pHcmFkIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZz
ZXQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXh0dXJlUHJvakxvZE9mZnNldCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQi
KTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVTaXplIik7CisrCisrICAgIHJldHVybiBtYXA7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQorK3sKKysgICAgY29uc3QgVEludGVybVNlcXVl
bmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUtPmdldFNlcXVlbmNlKCk7CisrCisrICAgIGF1dG8g
ZW1pdEFyZ0xpc3QgPSBbJl0oY29uc3QgY2hhciAqb3BlbiwgY29uc3QgY2hhciAqY2xvc2UpIHsK
KysgICAgICAgIG1PdXQgPDwgb3BlbjsKKysKKysgICAgICAgIGJvb2wgZW1pdENvbW1hID0gZmFs
c2U7CisrICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICphcmcgOiBhcmdzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChlbWl0Q29tbWEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIsICI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVtaXRDb21t
YSA9IHRydWU7CisrICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIG1PdXQgPDwgY2xvc2U7CisrICAgIH07CisrCisrICAgIGNvbnN0IFRUeXBl
ICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworKworKyAgICBpZiAoYWdncmVn
YXRlTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIGlz
U3RhbmRhbG9uZSA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgaWYg
KGlzU3RhbmRhbG9uZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBQcmV2ZW50IGNvbnN0
cnVjdG9yIGZyb20gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYSBkZWNsYXJhdGlvbiBieSB3cmFwcGlu
ZyBpbiBwYXJlbnMuCisrICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGdpdmVuIHNv
bWV0aGluZyBsaWtlOgorKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRo
aXMgd2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQu
CisrICAgICAgICAgICAgLy8gU28gaW5zdGVhZCBlbWl0OgorKyAgICAgICAgICAgIC8vICAgICAg
KGludChzeW1ib2wpKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKworKyAgICAgICAgaWYg
KHJldFR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJl
dFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAgICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7Cisr
ICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmdldFN0cnVjdCgpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAg
ICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisr
ICAgICAgICB7CisrICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworKyAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmIChpc1N0YW5kYWxvbmUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgZWxz
ZQorKyAgICB7CisrICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBhZ2dyZWdhdGVOb2RlLT5n
ZXRPcCgpOworKyAgICAgICAgc3dpdGNoIChvcCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUtPmdl
dEZ1bmN0aW9uKCk7CisrICAgICAgICAgICAgICAgIGVtaXROYW1lT2YoZnVuYyk7CisrICAgICAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlvbigpOwor
KyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5k
KGZ1bmMubmFtZSgpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1GdW5jVG9OYW1l
LmVuZCgpKTsKKysgICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7Cisr
ICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNp
emVfdCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisrICAgICAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPCBhcmdzLnNpemUoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICZhcmctPmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgICAgICBBU1NFUlQoIWFyZ3MuZW1wdHkoKSk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCA9IGdldEFyZ1R5cGUoMCk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisrICAgICAg
ICAgICAgICAgIEFTU0VSVChhcmdUeXBlMCk7CisrCisrICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm9wTmFtZSA9IEdldE9wZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJn
VHlwZTEpOworKworKyAgICAgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCBy
ZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKQorKyAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZvcGVyYW5k
Tm9kZSA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgob3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5k
Tm9kZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uob3BlcmFuZE5vZGUpOworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgJmxlZnROb2RlICA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdncmVnYXRl
Tm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91
cGVkVHJhdmVyc2UobGVmdE5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0
IDw8ICIgIiA8PCBvcE5hbWUgPDwgIiAiOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKysgICAgICAgICAgICAg
ICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysgICAgfQorK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkK
Kyt7CisrICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMCk7CisrCisrICAgIGVtaXRJbmRlbnRh
dGlvbigpOworKyAgICBtT3V0IDw8ICJ7XG4iOworKyAgICArK21JbmRlbnRMZXZlbDsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UoKQorK3sKKysgICAgQVNT
RVJUKG1JbmRlbnRMZXZlbCA+PSAxKTsKKysKKysgICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIGVt
aXRJbmRlbnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJ9IjsKKyt9CisrCisrc3RhdGljIGJvb2wg
UmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAg
aWYgKG5vZGUuZ2V0QXNCbG9jaygpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc0Nhc2VOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CisrCisrc3RhdGljIGJvb2wgTmV3bGluZVBhZChUSW50ZXJtTm9kZSAmbm9kZSkKKyt7Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xO
b2RlID0gbm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NF
UlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjaGlsZE5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysgICAgICAgIGlmIChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKysgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVj
dFNwZWNpZmllcigpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpCisreworKyAgICBBU1NFUlQo
bUluZGVudExldmVsID49IC0xKTsKKysgICAgY29uc3QgYm9vbCBpc0dsb2JhbFNjb3BlICA9IG1J
bmRlbnRMZXZlbCA9PSAtMTsKKysgICAgY29uc3QgYm9vbCBwYXJlbnRJc1N3aXRjaCA9IG1QYXJl
bnRJc1N3aXRjaDsKKysgICAgbVBhcmVudElzU3dpdGNoICAgICAgICAgICA9IGZhbHNlOworKwor
KyAgICBpZiAoaXNHbG9iYWxTY29wZSkKKysgICAgeworKyAgICAgICAgKyttSW5kZW50TGV2ZWw7
CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0T3BlbkJyYWNlKCk7Cisr
ICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytt
SW5kZW50TGV2ZWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgVEludGVybU5vZGUgKnBy
ZXZTdG10Tm9kZSA9IG51bGxwdHI7CisrCisrICAgIGNvbnN0IHNpemVfdCBzdG10Q291bnQgPSBi
bG9ja05vZGUtPmdldENoaWxkQ291bnQoKTsKKysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dG10Q291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgVEludGVybU5vZGUgJnN0bXROb2RlID0g
KmJsb2NrTm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworKworKyAgICAgICAgaWYgKGlzR2xvYmFsU2Nv
cGUgJiYgcHJldlN0bXROb2RlICYmIChOZXdsaW5lUGFkKCpwcmV2U3RtdE5vZGUpIHx8IE5ld2xp
bmVQYWQoc3RtdE5vZGUpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICJcbiI7
CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBib29sIGlzQ2FzZSA9IHN0bXROb2RlLmdldEFz
Q2FzZU5vZGUoKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisrICAgICAgICBl
bWl0SW5kZW50YXRpb24oKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCArPSBpc0Nhc2U7CisrICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIGlmIChSZXF1aXJlc1NlbWlj
b2xvblRlcm1pbmF0b3Ioc3RtdE5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgIjsiOworKyAgICAgICAgfQorKyAgICAgICAgbU91dCA8PCAiXG4iOworKworKyAgICAgICAg
cHJldlN0bXROb2RlID0gJnN0bXROb2RlOworKyAgICB9CisrCisrICAgIGlmIChpc0dsb2JhbFNj
b3BlKQorKyAgICB7CisrICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworKyAgICAg
ICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBp
ZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1JbmRl
bnRMZXZlbCA+PSAxKTsKKysgICAgICAgICAgICAtLW1JbmRlbnRMZXZlbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVtaXRDbG9zZUJyYWNlKCk7CisrICAgICAgICBtUGFyZW50SXNTd2l0Y2ggPSBw
YXJlbnRJc1N3aXRjaDsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlz
aXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKQorK3sKKysgICAgTE9HSUNf
RVJST1IoKTsgIC8vIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZCBiZWZvcmUgdGhpcy4KKysgICAgcmV0dXJuIGZhbHNlOworK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2xOb2RlKQorK3sKKysgICAgQVNTRVJUKGRlY2xOb2RlLT5nZXRDaGlsZENvdW50KCkg
PT0gMSk7CisrICAgIFRJbnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUo
MCk7CisrCisrICAgIEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysK
KysgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9k
ZSgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUt
PnZhcmlhYmxlKCk7CisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZh
ciksIGV2ZENvbmZpZyk7CisrICAgIH0KKysgICAgZWxzZSBpZiAoVEludGVybUJpbmFyeSAqaW5p
dE5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NFUlQo
aW5pdE5vZGUtPmdldE9wKCkgPT0gVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKysgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUg
JiYgdmFsdWVOb2RlKTsKKysKKysgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVu
dEJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMgc2hvdWxkIGhhdmUgdHVybmVkIG5vbi1jb25zdCBnbG9iYWwgaW5pdGlhbGl6ZXJzIGlu
dG8KKysgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworKyAgICAgICAgICAg
IC8vIEV2cUNvbnN0IGluIHNvbWUgQU5HTEUgY29kZSBidXQgbm90IGFjdHVhbGx5IGhhdmUgdGhl
aXIgcXVhbGlmaWVyIGFjdHVhbGx5IGNoYW5nZWQgdG8KKysgICAgICAgICAgICAvLyBFdnFDb25z
dC4gVGh1cyBqdXN0IGFzc3VtZSBhbGwgRXZxR2xvYmFsIGFyZSBhY3R1YWxseSBFdnFDb25zdCBm
b3IgYWxsIGNvZGUgcnVuIGFmdGVyCisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMuCisrICAgICAgICAgICAgbU91dCA8PCAiY29uc3RhbnQgIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KysgICAgICAgIGNvbnN0IE5hbWUgdmFyTmFtZSh2YXIpOworKworKyAgICAgICAgaWYgKEV4cHJl
c3Npb25Db250YWluc05hbWUodmFyTmFtZSwgKnZhbHVlTm9kZSkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgbVJlbmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFy
TmFtZSk7CisrICAgICAgICB9CisrCisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihW
YXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisrICAgICAgICBtT3V0IDw8ICIgPSAiOworKyAgICAg
ICAgZ3JvdXBlZFRyYXZlcnNlKCp2YWx1ZU5vZGUpOworKyAgICB9CisrICAgIGVsc2UKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7
CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgY29uc3QgVExvb3BUeXBlIGxvb3BUeXBlID0gbG9v
cE5vZGUtPmdldFR5cGUoKTsKKysKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysgICAgeworKyAg
ICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIHJldHVybiB2aXNp
dEZvckxvb3AobG9vcE5vZGUpOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BOb2RlKTsKKysgICAgICAg
IGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0
RG9XaGlsZUxvb3AobG9vcE5vZGUpOworKyAgICB9CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCisreworKyAgICBBU1NF
UlQobG9vcE5vZGUtPmdldFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRm9yKTsKKysKKysgICAg
VEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworKyAgICBUSW50
ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysgICAgQVNTRVJUKGJv
ZHlOb2RlKTsKKysKKysgICAgbU91dCA8PCAiZm9yICgiOworKworKyAgICBpZiAoaW5pdE5vZGUp
CisrICAgIHsKKysgICAgICAgIGluaXROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAg
ICBlbHNlCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICB9CisrCisrICAgIG1P
dXQgPDwgIjsgIjsKKysKKysgICAgaWYgKGNvbmROb2RlKQorKyAgICB7CisrICAgICAgICBjb25k
Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisrICAgIH0KKysKKysgICAgbU91dCA8PCAiOyAiOworKwor
KyAgICBpZiAoZXhwck5vZGUpCisrICAgIHsKKysgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0
aGlzKTsKKysgICAgfQorKworKyAgICBtT3V0IDw8ICIpXG4iOworKworKyAgICBib2R5Tm9kZS0+
dHJhdmVyc2UodGhpcyk7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQorK3sK
KysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcFdoaWxl
KTsKKysKKysgICAgVEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigp
OworKyAgICBUSW50ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysg
ICAgQVNTRVJUKGNvbmROb2RlICYmIGJvZHlOb2RlKTsKKysgICAgQVNTRVJUKCFpbml0Tm9kZSAm
JiAhZXhwck5vZGUpOworKworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAi
d2hpbGUgKCI7CisrICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgbU91dCA8PCAi
KVxuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworKworKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0RG9XaGlsZUxvb3AoVElu
dGVybUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkg
PT0gVExvb3BUeXBlOjpFTG9vcERvV2hpbGUpOworKworKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKysgICAgVEludGVybVR5cGVkICpjb25kTm9kZSA9
IGxvb3BOb2RlLT5nZXRDb25kaXRpb24oKTsKKysgICAgVEludGVybVR5cGVkICpleHByTm9kZSA9
IGxvb3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisrICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUg
PSBsb29wTm9kZS0+Z2V0Qm9keSgpOworKyAgICBBU1NFUlQoY29uZE5vZGUgJiYgYm9keU5vZGUp
OworKyAgICBBU1NFUlQoIWluaXROb2RlICYmICFleHByTm9kZSk7CisrCisrICAgIGVtaXRJbmRl
bnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJkb1xuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNl
KHRoaXMpOworKyAgICBtT3V0IDw8ICJcbiI7CisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAg
ICBtT3V0IDw8ICJ3aGlsZSAoIjsKKysgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAg
ICBtT3V0IDw8ICIpOyI7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5v
ZGUpCisreworKyAgICBjb25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxv
d09wKCk7CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBicmFuY2hOb2RlLT5nZXRFeHBy
ZXNzaW9uKCk7CisrCisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKworKyAgICBzd2l0Y2ggKGZs
b3dPcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6CisrICAgICAg
ICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOworKyAgICAgICAg
ICAgIG1PdXQgPDwgIm1ldGFsOjpkaXNjYXJkX2ZyYWdtZW50KCkiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorKyAg
ICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgInJldHVybiI7CisrICAgICAgICAgICAgaWYg
KGV4cHJOb2RlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7
CisrICAgICAgICAgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCcmVhazoKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUg
PT0gbnVsbHB0cik7CisrICAgICAgICAgICAgbU91dCA8PCAiYnJlYWsiOworKyAgICAgICAgfQor
KyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6
CisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgImNvbnRpbnVlIjsKKysgICAgICAgIH0KKysgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9
CisrCisrc3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworKworK2Jvb2wgc2g6
OkVtaXRNZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICBj
b25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gY29tcGlsZXIuZ2V0SW5mb1NpbmsoKS5vYmo7CisrCisrICAgIHsKKysgICAgICAgICsr
ZW1pdE1ldGFsQ2FsbENvdW50OworKyAgICAgICAgYXV0byBmaWxlbmFtZVByb3RvID0gcmVhZFN0
cmluZ0VudlZhcigiR01EX0ZJWEVEX0VNSVQiKTsKKysgICAgICAgIGlmICghZmlsZW5hbWVQcm90
by5lbXB0eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChmaWxlbmFtZVByb3RvICE9
ICIvZGV2L251bGwiKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byB0cnlP
cGVuID0gWyZdKGNoYXIgY29uc3QgKmV4dCkgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byBm
aWxlbmFtZSA9IGZpbGVuYW1lUHJvdG87CisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSAr
PSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxDYWxsQ291bnQpOworKyAgICAgICAgICAgICAgICAg
ICAgZmlsZW5hbWUgKz0gIi4iOworKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gZXh0
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJy
YiIpOworKyAgICAgICAgICAgICAgICB9OworKyAgICAgICAgICAgICAgICBGSUxFICpmaWxlID0g
dHJ5T3BlbigibWV0YWwiKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWxlKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBmaWxlID0gdHJ5T3BlbigiY3BwIik7Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKGZpbGUpOworKworKyAg
ICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisrICAgICAgICAgICAgICAg
IHNpemVfdCBmaWxlU2l6ZSA9IGZ0ZWxsKGZpbGUpOworKyAgICAgICAgICAgICAgICBmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCk7CisrCisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IGJ1ZmY7CisrICAgICAgICAgICAgICAgIGJ1ZmYucmVzaXplKGZpbGVTaXplICsgMSk7CisrICAg
ICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7CisrICAg
ICAgICAgICAgICAgIGJ1ZmYuYmFjaygpID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgZmNs
b3NlKGZpbGUpOworKworKyAgICAgICAgICAgICAgICBvdXQgPDwgYnVmZi5kYXRhKCk7CisrICAg
ICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIG91dCA8PCAiXG5cbiI7CisrCisrICAgIGlmICghRW1pdFByb2dyYW1QcmVs
dWRlKHJvb3QsIG91dCwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHsKKysjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAg
ICAgIERlYnVnU2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQi
KSk7CisrICAgICAgICBvdXRXcmFwcGVyLndhdGNoKHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9XQVRD
SF9TVFJJTkciKSk7CisrI2Vsc2UKKysgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIg
PSBvdXQ7CisrI2VuZGlmCisrICAgICAgICBHZW5NZXRhbFRyYXZlcnNlciBnZW4oY29tcGlsZXIs
IG91dFdyYXBwZXIsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVu
dik7CisrICAgICAgICByb290LnRyYXZlcnNlKCZnZW4pOworKyAgICB9CisrCisrICAgIG91dCA8
PCAiXG4iOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDQ4YWY5YQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRN
ZXRhbC5oCitAQCAtMCwwICsxLDMyIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9I
XworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFj
ZSBzaAorK3sKKysKKysvLyBXYWxrcyB0aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0TWV0YWwoVENvbXBpbGVyICZjb21waWxlciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJp
YW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RW52aXJvbm1lbnRWYXJpYWJsZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLmQ4MjNmYzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgK
K0BAIC0wLDAgKzEsNDUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKysj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05N
RU5UVkFSSUFCTEVfSF8KKysKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8c3RyaW5n
PgorKworKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7Cisr
CisraW5saW5lIGJvb2wgcmVhZEJvb2xFbnZWYXIoY29uc3QgY2hhciAqdmFyKQorK3sKKysgICAg
Y29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysgICAgaWYgKHN0ciA9PSBudWxs
cHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKHN0
cmNtcChzdHIsICIwIikgPT0gMCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIEFTU0VSVChzdHJjbXAoc3RyLCAiMSIpID09IDApOworKyAgICByZXR1cm4gdHJ1
ZTsKKyt9CisrCisraW5saW5lIHN0ZDo6c3RyaW5nIHJlYWRTdHJpbmdFbnZWYXIoY29uc3QgY2hh
ciAqdmFyKQorK3sKKysgICAgY29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysg
ICAgaWYgKHN0ciA9PSBudWxscHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gIiI7CisrICAg
IH0KKysgICAgcmV0dXJuIHN0cjsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9O
TUVOVFZBUklBQkxFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTljMDNlCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25z
dGFudHMuY3BwCitAQCAtMCwwICsxLDk2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysK
KysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBS
ZXdyaXRlciA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKKyt7CisrICBwcml2YXRlOgorKyAgICBj
b25zdCBzaXplX3QgbU1pblJlcXVpcmVkU2l6ZTsKKysgICAgVEludGVybVNlcXVlbmNlIG1Ib2lz
dGVkRGVjbE5vZGVzOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBzaXplX3QgbWluUmVxdWlyZWRTaXplKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLCBtTWluUmVxdWlyZWRTaXplKG1pblJlcXVpcmVkU2l6
ZSkKKysgICAge30KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVy
bURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKGdl
dFBhcmVudEZ1bmN0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgRGVjbGFyYXRpb24g
ZGVjbCAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmICh0eXBl
LmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cUNvbnN0KQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFz
Q29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IE1ldGFsTGF5b3V0T2YodHlwZSkuc2l6ZU9mOworKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1pblJlcXVpcmVkU2l6ZSkKKysgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSG9pc3RlZERlY2xOb2Rlcy5w
dXNoX2JhY2soJmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgYm9vbCByZXdyaXRlKFRJbnRlcm1CbG9jayAm
cm9vdCwgSWRHZW4gJmlkR2VuKQorKyAgICB7CisrICAgICAgICBpZiAoIXJlYnVpbGRSb290KHJv
b3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcm9vdC5p
bnNlcnRDaGlsZE5vZGVzKEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KCZyb290KSwg
bUhvaXN0ZWREZWNsTm9kZXMpOworKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqb3BhcXVl
RGVjbE5vZGUgOiBtSG9pc3RlZERlY2xOb2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGRlY2xOb2RlKTsKKysgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJm9sZFZhciA9IFZpZXdEZWNsYXJhdGlvbigqZGVjbE5vZGUpLnN5
bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0g
aWRHZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKysgICAgICAgICAgICBhdXRvICpu
ZXdWYXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCAm
b2xkVmFyLmdldFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld05hbWUuc3ltYm9sVHlwZSgpKTsKKysgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJp
YWJsZSgmbUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9vbCBz
aDo6SG9pc3RDb25zdGFudHMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5SZXF1aXJlZFNp
emUpCisreworKyAgICByZXR1cm4gUmV3cml0ZXIoY29tcGlsZXIsIG1pblJlcXVpcmVkU2l6ZSku
cmV3cml0ZShyb290LCBpZEdlbik7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMzA2YTVlCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9p
c3RDb25zdGFudHMuaAorQEAgLTAsMCArMSwyNiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFO
VFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0hPSVNUQ09OU1RBTlRTX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysKKytuYW1l
c3BhY2Ugc2gKKyt7CisrCisrLy8gSG9pc3RzIGZ1bmN0aW9uLWxvY2FsIGNvbnN0YW50cyB0byB0
aGUgZ2xvYmFsIHNjb3BlIGlmIHRoZWlyIE1ldGFsIHNpemVvZiBtZWV0cworKy8vIGBtaW5SZXF1
aXJlZFNpemVgLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGls
ZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG1pblJlcXVpcmVkU2l6ZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5U
U19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9JZEdlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
ODRhZWQ2YgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcAorQEAgLTAsMCArMSw5NyBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxjY3R5cGU+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1
ZGUgPGxpbWl0cz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKwor
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrSWRHZW46OklkR2VuKCkge30KKysKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBTdHJpbmdUb0ltbXV0YWJsZT4KKytOYW1l
IElkR2VuOjpjcmVhdGVOZXdOYW1lKHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKQorK3sKKysgICAgY29uc3Qg
dW5zaWduZWQgaWQgPSBtTmV4dCsrOworKyAgICBjaGFyIGlkQnVmZmVyW3N0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCArIDFdOworKyAgICBzcHJpbnRmKGlkQnVmZmVyLCAi
JXUiLCBpZCk7CisrCisrICAgIG1OZXdOYW1lQnVmZmVyLmNsZWFyKCk7CisrICAgIG1OZXdOYW1l
QnVmZmVyICs9ICdfJzsKKysgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisrCisrICAg
IC8vIE5vdGU6CisrICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGlu
IEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorKyAg
ICAvLyB0YWtlIGNhcmUgbm90IHRvIGludHJvZHVjZSBhbnkuCisrCisrICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxl
U3RyaW5nIGJhc2VOYW1lID0gdG9JbW11dGFibGUoYmFzZU5hbWVzW2ldKTsKKysgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBjaGFy
ICpiYXNlID0gYmFzZU5hbWUuZGF0YSgpOworKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdp
bnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgIGJhc2UgKz0gc2l6ZW9mKGtBbmdsZUludGVybmFsUHJlZml4KSAtIDE7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGlmICgqYmFzZSA9PSAnXycpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICArK2Jhc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEFT
U0VSVCgqYmFzZSAhPSAnXycpOworKworKyAgICAgICAgICAgIGlmIChtTmV3TmFtZUJ1ZmZlci5i
YWNrKCkgIT0gJ18nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU5ld05hbWVC
dWZmZXIgKz0gJ18nOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBtTmV3TmFtZUJ1
ZmZlciArPSBiYXNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBOYW1lKElt
bXV0YWJsZVN0cmluZyhtTmV3TmFtZUJ1ZmZlciksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworK30KKysKKytOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyAmYmFzZU5hbWUpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsK
Kyt9CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkK
Kyt7CisrICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKGJhc2VOYW1lLnJhd05hbWUoKSk7CisrfQor
KworK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpCisrewor
KyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShJbW11dGFibGVTdHJpbmcoYmFzZU5hbWUpKTsKKyt9
CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SW1t
dXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgW10oY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzKSB7IHJldHVybiBzOyB9KTsKKyt9Cisr
CisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4g
YmFzZU5hbWVzKQorK3sKKysgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNpemUo
KSwgYmFzZU5hbWVzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0
IE5hbWUgJnMpIHsgcmV0dXJuIHMucmF3TmFtZSgpOyB9KTsKKyt9CisrCisrTmFtZSBJZEdlbjo6
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhciAqPiBiYXNlTmFt
ZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNl
TmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgY2hhciAq
cykgeyByZXR1cm4gSW1tdXRhYmxlU3RyaW5nKHMpOyB9KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmggYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4MjA4OWYKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5o
CitAQCAtMCwwICsxLDQxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysv
LyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorKy8vIEFsbCBuYW1lcyBjcmVhdGVkIGFy
ZSBtYXJrZWQgYXMgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbC4KKytjbGFzcyBJZEdlbiA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgSWRHZW4oKTsKKysKKysgICAg
TmFtZSBjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmYmFzZU5hbWUpOworKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoY29uc3QgTmFtZSAmYmFzZU5hbWUpOworKyAgICBOYW1lIGNy
ZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5ld05h
bWUoc3RkOjppbml0aWFsaXplcl9saXN0PEltbXV0YWJsZVN0cmluZz4gYmFzZU5hbWVzKTsKKysg
ICAgTmFtZSBjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxOYW1lPiBiYXNlTmFt
ZXMpOworKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0
IGNoYXIgKj4gYmFzZU5hbWVzKTsKKysKKysgIHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorKyAgICBOYW1lIGNyZWF0
ZU5ld05hbWUoc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcgKmJhc2VOYW1lcywgY29uc3QgU3Ry
aW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKTsKKysKKysgIHByaXZhdGU6CisrICAgIHVuc2ln
bmVkIG1OZXh0ID0gMDsgICAgICAgICAgLy8gYHVuc2lnbmVkYCBiZWNhdXNlIG9mICIldSIgdXNl
IGluIHNwcmludGYKKysgICAgc3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7ICAvLyByZXVzYWJs
ZSBidWZmZXIgdG8gYXZvaWQgdG9ucyBvZiByZWFsbG9jYXRpb25zCisrfTsKKysKKyt9ICAvLyBu
YW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0lER0VOX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjUzNDZmNmYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCitAQCAtMCww
ICsxLDQwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2lu
Y2x1ZGUgPGNjdHlwZT4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8bGltaXRzPgor
KyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKysK
Kyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytl
bnVtIGNsYXNzIExhbmd1YWdlCisreworKyAgICBNZXRhbCwKKysgICAgR0xTTCwKKyt9OworKwor
K3N0YXRpYyBzaXplX3QgUm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCwgc2l6ZV90IG11bHRp
cGxlKQorK3sKKysgICAgY29uc3Qgc2l6ZV90IHJlbSA9IHggJSBtdWx0aXBsZTsKKysgICAgcmV0
dXJuIHJlbSA9PSAwID8geCA6IHggKyAobXVsdGlwbGUgLSByZW0pOworK30KKysKKyt2b2lkIExh
eW91dDo6cmVxdWlyZUFsaWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKQorK3sKKysgICAg
YWxpZ25PZiA9IHN0ZDo6bWF4KGFsaWduT2YsIGFsaWduKTsKKysgICAgaWYgKHBhZCkKKysgICAg
eworKyAgICAgICAgc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlwbGVPZihzaXplT2YsIGFsaWduKTsK
KysgICAgfQorK30KKysKKytib29sIExheW91dDo6b3BlcmF0b3I9PShjb25zdCBMYXlvdXQgJm90
aGVyKSBjb25zdAorK3sKKysgICAgcmV0dXJuIHNpemVPZiA9PSBvdGhlci5zaXplT2YgJiYgYWxp
Z25PZiA9PSBvdGhlci5hbGlnbk9mOworK30KKysKKyt2b2lkIExheW91dDo6b3BlcmF0b3IrPShj
b25zdCBMYXlvdXQgJm90aGVyKQorK3sKKysgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGln
bk9mLCB0cnVlKTsKKysgICAgc2l6ZU9mICs9IG90aGVyLnNpemVPZjsKKyt9CisrCisrdm9pZCBM
YXlvdXQ6Om9wZXJhdG9yKj0oc2l6ZV90IHNjYWxlKQorK3sKKysgICAgc2l6ZU9mICo9IHNjYWxl
OworK30KKysKKytMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICs9IG90aGVyOwor
KyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrTGF5b3V0IExheW91dDo6b3BlcmF0b3IqKHNpemVf
dCBzY2FsZSkgY29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICo9
IHNjYWxlOworKyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrc3RhdGljIExheW91dCBTY2FsYXJM
YXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTGFuZ3VhZ2UgbGFuZ3VhZ2UpCisreworKyAgICBj
b25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrICAgIHN3
aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJv
b2w6CisrICAgICAgICAgICAgcmV0dXJuIHsxLCAxfTsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorKyAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDoKKysgICAgICAgICAgICByZXR1cm4gezQsIDR9Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhbmd1YWdlKQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIExhbmd1YWdlOjpNZXRh
bDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gezgsIDh9OworKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBMYW5ndWFnZTo6R0xTTDoKKysgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gezQsIDR9OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisr
ICAgIH0KKyt9CisrCisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1BhY2tlZFtdICAg
PSB7MCwgMSwgMiwgMywgNH07Cisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1VucGFj
a2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisrCisrTGF5b3V0IHNoOjpNZXRhbExheW91dE9mKGNv
bnN0IFRUeXBlICZ0eXBlLCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZykKKyt7CisrICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPD0gNCk7CisrICAgIEFTU0VSVCh0eXBlLmdldFNl
Y29uZGFyeVNpemUoKSA8PSA0KTsKKysKKysgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3JhZ2U7CisrCisrICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTaGFyZWQpOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNv
bmZpZy5tYXNrQXJyYXkpCisrICAgIHsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSB0
cnVlOworKyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwg
Y29uZmlnKTsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSBmYWxzZTsKKysgICAgICAg
IGNvbnN0IHNpemVfdCB2b2wgICAgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAg
ICAgIHJldHVybiBsYXlvdXQgKiB2b2w7CisrICAgIH0KKysKKysgICAgaWYgKGNvbnN0IFRTdHJ1
Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisrICAgICAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisrICAgICAgICBhdXRvIGNvbmZpZzIgICAgICAgICAg
ICAgPSBjb25maWc7CisrICAgICAgICBjb25maWcyLm1hc2tBcnJheSAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGF1dG8gbGF5b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsK
KysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7
CisrICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbGF5b3V0ICs9IE1ldGFsTGF5b3V0T2YoKmZpZWxkLT50eXBlKCksIGNv
bmZpZzIpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJl
VGFpbFBhZGRlZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzaXplX3QgcGFkID0gbGF5b3V0
LnNpemVPZiAlIDE2OworKyAgICAgICAgICAgIGxheW91dC5zaXplT2YgKz0gcGFkOworKyAgICAg
ICAgfQorKyAgICAgICAgbGF5b3V0LnNpemVPZiA9IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0
LnNpemVPZiwgbGF5b3V0LmFsaWduT2YpOworKyAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
fQorKworKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxlcnNBc1RleHR1cmVFbnYgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gezE2LCA4
fTsgIC8vIHBvaW50ZXJ7OCw4fSBhbmQgbWV0YWw6OnNhbXBsZXJ7OCw4fQorKyAgICB9CisrCisr
ICAgIGNvbnN0IExheW91dCBzY2FsYXJMYXlvdXQgPSBTY2FsYXJMYXlvdXRPZih0eXBlLCBMYW5n
dWFnZTo6TWV0YWwpOworKworKyAgICBpZiAodHlwZS5pc1JhbmswKCkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0KKysgICAgZWxzZSBpZiAodHlwZS5pc1Zl
Y3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQYWNrZWQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0e3Nj
YWxhckxheW91dC5zaXplT2YgKiBpbm5lclNjYWxlLCBzY2FsYXJMYXlvdXQuYWxpZ25PZn07Cisr
ICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2Nh
bGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKysgICAgICAgICAgICBhdXRvIGxh
eW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5u
ZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOwor
KyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQpOworKyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKysgICAgICAgIGNvbnN0IHNp
emVfdCBpbm5lclNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldFJvd3MoKV07Cisr
ICAgICAgICBjb25zdCBzaXplX3Qgb3V0ZXJTY2FsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlw
ZS5nZXRDb2xzKCkpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJM
YXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZTsKKysgICAgICAgIHJldHVybiB7biAqIG91dGVyU2Nh
bGUsIG59OworKyAgICB9CisrfQorKworK1RMYXlvdXRCbG9ja1N0b3JhZ2Ugc2g6Ok92ZXJsYXko
VExheW91dEJsb2NrU3RvcmFnZSBvbGRTdG9yYWdlLCBjb25zdCBUVHlwZSAmdHlwZSkKKyt7Cisr
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgbmV3U3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworKyAgICBzd2l0Y2ggKG5ld1N0b3JhZ2UpCisrICAg
IHsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6Cisr
ICAgICAgICAgICAgcmV0dXJuIG9sZFN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
VW5zcGVjaWZpZWQgPyBrRGVmYXVsdExheW91dEJsb2NrU3RvcmFnZQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
b2xkU3RvcmFnZTsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIG5ld1N0
b3JhZ2U7CisrICAgIH0KKyt9CisrCisrVExheW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXko
VExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpCisrewor
KyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBuZXdQYWNraW5nID0gdHlwZS5nZXRMYXlv
dXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nOworKyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisr
ICAgIHsKKysgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVk
OgorKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5nID09IFRMYXlvdXRNYXRyaXhQYWNraW5n
OjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG9sZFBhY2tpbmc7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVy
biBuZXdQYWNraW5nOworKyAgICB9CisrfQorKworK2Jvb2wgc2g6OkNhbkJlUGFja2VkKFRMYXlv
dXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKKyt7CisrICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAg
eworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisrICAgICAg
ICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOgor
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisrICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNV
bnNwZWNpZmllZDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIHNoOjpDYW5CZVBhY2tlZChUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcikKKyt7CisrICAgIHJldHVybiBDYW5CZVBhY2tlZChs
YXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlKTsKKyt9CisrCisrYm9vbCBzaDo6Q2FuQmVQYWNr
ZWQoY29uc3QgVFR5cGUgJnR5cGUpCisreworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBDYW5CZVBh
Y2tlZCh0eXBlLmdldExheW91dFF1YWxpZmllcigpKTsKKyt9CisrCisrdm9pZCBzaDo6U2V0Qmxv
Y2tTdG9yYWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpCisrewor
KyAgICBhdXRvIHF1YWwgICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisrICAg
IHF1YWwuYmxvY2tTdG9yYWdlID0gc3RvcmFnZTsKKysgICAgdHlwZS5zZXRMYXlvdXRRdWFsaWZp
ZXIocXVhbCk7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2Us
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1h
dHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJheSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKKyt7CisrICAgIGNv
bnN0IGJvb2wgaXNQYWNrZWQgPQorKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9y
YWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFy
ZWQ7CisrCisrICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICBmb3Ig
KGF1dG8gaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorKyAgICB7CisrICAgICAg
ICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIpLT50eXBlKCksIHN0b3JhZ2UsIG1hdHJp
eFBhY2tpbmcsIGZhbHNlKTsKKysgICAgfQorKyAgICBpZiAoIWlzUGFja2VkKSAgLy8gWFhYOiBD
b3JyZWN0PworKyAgICB7CisrICAgICAgICBsYXlvdXQuc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlw
bGVPZihsYXlvdXQuc2l6ZU9mLCBsYXlvdXQuYWxpZ25PZik7CisrICAgIH0KKysgICAgbGF5b3V0
LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisrICAgIHJldHVybiBsYXlv
dXQ7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbExheW91dE9mKGNvbnN0IFRUeXBl
ICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFza0FycmF5LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBiYXNlQWxpZ25tZW50KQorK3sKKysgICAg
QVNTRVJUKHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOwor
KworKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKysgICAgICAgIHN0b3JhZ2UgPT0gVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkIHx8IHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzU2hhcmVkOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRy
aXgoKSAmJiAhbWFza0FycmF5KQorKyAgICB7CisrICAgICAgICBhdXRvIGxheW91dCA9IEdsc2xM
YXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCB0cnVlKTsKKysgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgICAgIGxheW91dC5yZXF1
aXJlQWxpZ25tZW50KGJhc2VBbGlnbm1lbnQsIHRydWUpOworKyAgICAgICAgcmV0dXJuIGxheW91
dDsKKysgICAgfQorKworKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNp
emUoKSA9PSAxKTsKKysgICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSAx
KTsKKysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRz
KCk7CisrICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGZpZWxkcy5kYXRh
KCksIGZpZWxkcy5kYXRhKCkgKyBmaWVsZHMuc2l6ZSgpLCBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIGJh
c2VBbGlnbm1lbnQpOworKyAgICB9CisrCisrICAgIGNvbnN0IGF1dG8gc2NhbGFyTGF5b3V0ID0g
U2NhbGFyTGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6OkdMU0wpOworKworKyAgICBpZiAodHlwZS5p
c1JhbmswKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0K
KysgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQ
YWNrZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAg
PSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBhbGlnblNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldE5v
bWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0KKysgICAgICAgICAgICAg
ICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXplT2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5h
bGlnbk9mICogYWxpZ25TY2FsZX07CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXpl
X3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgp
XTsKKysgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChz
Y2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxh
eW91dDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmlzTWF0cml4KCkpOworKworKyAgICAgICAgc2l6ZV90IGlubmVyRGltOworKyAg
ICAgICAgc2l6ZV90IG91dGVyRGltOworKworKyAgICAgICAgc3dpdGNoIChtYXRyaXhQYWNraW5n
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVt
cENvbHVtbk1ham9yOgorKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRpY19jYXN0PHNp
emVfdD4odHlwZS5nZXRSb3dzKCkpOworKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRp
Y19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworKyAgICAgICAgICAgICAgICBicmVhazsK
KysgICAgICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBSb3dNYWpvcjoKKysg
ICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKysgICAgICAgICAgICAgICAgb3V0ZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5
cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgICAgIGlubmVyRGltID0gMDsKKysgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworKyAgICAgICAgfQorKworKyAgICAgICAgb3V0ZXJEaW0g
Kj0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrCisrICAgICAgICBjb25zdCBzaXplX3Qg
aW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbaW5uZXJEaW1dOworKyAgICAgICAgY29u
c3Qgc2l6ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsK
KysgICAgICAgIExheW91dCBsYXlvdXQgICAgICAgICAgID0ge291dGVyRGltICogbiwgbn07Cisr
ICAgICAgICBsYXlvdXQucmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKysg
ICAgICAgIHJldHVybiBsYXlvdXQ7CisrICAgIH0KKyt9CisrCisrTGF5b3V0IHNoOjpHbHNsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRN
YXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtYXNrQXJyYXkpCisreworKyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQp
OworKyAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisrCisrICAgIHN0
b3JhZ2UgICAgICAgPSBPdmVybGF5KHN0b3JhZ2UsIHR5cGUpOworKyAgICBtYXRyaXhQYWNraW5n
ID0gT3ZlcmxheShtYXRyaXhQYWNraW5nLCB0eXBlKTsKKysKKysgICAgc3dpdGNoIChzdG9yYWdl
KQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoK
KysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9m
KHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJu
IENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJy
YXksIDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgor
KyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0
cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3Rv
cmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBMYXlvdXQgc2g6Okdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNv
bnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQ
YWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKKyt7CisrICAgIEFTU0VSVChzdG9yYWdlICE9
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkKTsKKysgICAgQVNTRVJUKG1hdHJp
eFBhY2tpbmcgIT0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkKTsKKysKKysg
ICAgc3dpdGNoIChzdG9yYWdlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExh
eW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAg
ICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2Us
IG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAgY2FzZSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1
Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXks
IDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAg
ICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3Rv
cmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1Io
KTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQxM2VkZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5oCitAQCAtMCwwICsxLDg4IEBACisrLy8KKysvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisr
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworK2Nv
bnN0ZXhwciBjb25zdCBhdXRvIGtEZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlICA9IFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKytjb25zdGV4cHIgY29uc3QgYXV0byBrRGVmYXVsdExh
eW91dE1hdHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wQ29sdW1uTWFqb3I7
CisrCisrLy8gUmV0dXJucyBgb2xkU3RvcmFnZWAgaWYgYHR5cGVgIGhhcyB1bnNwZWNpZmllZCBi
bG9jayBzdG9yYWdlLgorKy8vIE90aGVyd2lzZSByZXR1cm5zIGJsb2NrIHN0b3JhZ2Ugb2YgYHR5
cGVgLgorK1RMYXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9s
ZFN0b3JhZ2UsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBSZXR1cm5zIGBvbGRQYWNraW5n
YCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIG1hdHJpeCBwYWNraW5nLgorKy8vIE90aGVyd2lz
ZSByZXR1cm5zIG1hdHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KKytUTGF5b3V0TWF0cml4UGFja2lu
ZyBPdmVybGF5KFRMYXlvdXRNYXRyaXhQYWNraW5nIG9sZFBhY2tpbmcsIGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZv
ciB0aGUgYmxvY2sgc3RvcmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCisrYm9v
bCBDYW5CZVBhY2tlZChUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIFJldHVy
bnMgd2hldGhlciBvciBub3QgaXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlm
aWVyIHRvIHVzZSBhIHBhY2tlZCByZXByZXNlbnRhdGlvbi4KKytib29sIENhbkJlUGFja2VkKFRM
YXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIg
b3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVw
cmVzZW50YXRpb24uCisrYm9vbCBDYW5CZVBhY2tlZChjb25zdCBUVHlwZSAmdHlwZSk7CisrCisr
Ly8gU2V0cyB0aGUgYmxvY2sgc3RvcmFnZSBmb3IgYSB0eXBlLgorK3ZvaWQgU2V0QmxvY2tTdG9y
YWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIENv
bnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25vZmAgaW5mb3JtYXRpb24uCisrc3RydWN0IExheW91
dAorK3sKKysgICAgc2l6ZV90IHNpemVPZjsKKysgICAgc2l6ZV90IGFsaWduT2Y7CisrCisrICAg
IHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVybiB7MCwgMX07IH0KKysgICAgc3RhdGlj
IExheW91dCBJbnZhbGlkKCkgeyByZXR1cm4gezAsIDB9OyB9CisrICAgIHN0YXRpYyBMYXlvdXQg
Qm90aChzaXplX3QgbikgeyByZXR1cm4ge24sIG59OyB9CisrCisrICAgIHZvaWQgcmVxdWlyZUFs
aWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKTsKKysKKysgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKworKyAgICB2b2lkIG9wZXJhdG9yKz0oY29u
c3QgTGF5b3V0ICZvdGhlcik7CisrICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpOwor
KworKyAgICBMYXlvdXQgb3BlcmF0b3IrKGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKyAg
ICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7CisrfTsKKysKKytzdHJ1Y3Qg
TWV0YWxMYXlvdXRPZkNvbmZpZworK3sKKysgICAgYm9vbCBkaXNhYmxlUGFja2luZyAgICAgICAg
ICAgICA9IGZhbHNlOworKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFs
c2U7CisrICAgIGJvb2wgdHJlYXRTYW1wbGVyc0FzVGV4dHVyZUVudiAgPSBmYWxzZTsKKysgICAg
Ym9vbCBhc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IGZhbHNlOyAgLy8gUGFkIHRvIG11bHRp
cGxlIG9mIDE2CisrfTsKKysKKysvLyBSZXR1cm5zIHRoZSBsYXlvdXQgb2YgYSB0eXBlIGlmIGl0
IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBNZXRhbCBwcm9ncmFtLgorKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IE1ldGFsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsIE1ldGFsTGF5b3V0T2ZDb25maWcgY29uZmlnID0ge30p
OworKworKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSBy
ZXByZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KKytBTkdMRV9OT19ESVNDQVJEIExheW91dAor
K0dsc2xMYXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgVExheW91dEJs
b2NrU3RvcmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3Bl
Y2lmaWVkLAorKyAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5n
ID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkLAorKyAgICAgICAgICAgICBi
b29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgICAgID0gZmFsc2UpOworKworKy8vIFJldHVy
bnMgdGhlIGxheW91dCBvZiBhIHN0cnVjdHVyZSBpZiBpdCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVk
IGluIGEgR0xTTCBwcm9ncmFtLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IEdsc2xTdHJ1Y3RM
YXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRM
YXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworKworK30gIC8v
IG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTEFZT1VUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0
aW9uc1RvRGVmaW5pdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uM2UzMGRhZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCitAQCAt
MCwwICsxLDM0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysKKyt1c2luZyBuYW1l
c3BhY2Ugc2g7CisrCisrY2xhc3MgTWFwcGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7
CisrICBwdWJsaWM6CisrICAgIEZ1bmN0aW9uVG9EZWZpbml0aW9uIG1GdW5jVG9EZWY7CisrCisr
ICBwdWJsaWM6CisrICAgIE1hcHBlcigpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpIHt9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24o
KTsKKysgICAgICAgIEFTU0VSVChmdW5jLT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVP
cE51bGwpOworKyAgICAgICAgbUZ1bmNUb0RlZltmdW5jXSA9IGZ1bmNEZWZOb2RlOworKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKytGdW5jdGlvblRvRGVmaW5pdGlvbiBz
aDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAg
ICBNYXBwZXIgbWFwcGVyOworKyAgICByb290LnRyYXZlcnNlKCZtYXBwZXIpOworKyAgICByZXR1
cm4gc3RkOjptb3ZlKG1hcHBlci5tRnVuY1RvRGVmKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi40ZTU2ZGRlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5o
CitAQCAtMCwwICsxLDI1IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05T
X0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9N
QVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisrCisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZl
cnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgbWFwIGZyb20gZnVuY3Rpb25z
IHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMuCisrdXNpbmcgRnVuY3Rpb25Ub0Rl
ZmluaXRpb24gPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKj47CisrCisrLy8gTWFwcyBmdW5jdGlvbnMgdG8gdGhlaXIgY29y
cmVzcG9uZGluZyBkZWZpbml0aW9ucy4KKytBTkdMRV9OT19ESVNDQVJEIEZ1bmN0aW9uVG9EZWZp
bml0aW9uIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMoVEludGVybUJsb2NrICZyb290KTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFw
U3ltYm9scy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTWFwU3ltYm9scy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4w
MzVjOTMwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5jcHAKK0BAIC0wLDAgKzEsNDYgQEAKKysvLwor
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTWFwU3ltYm9scy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFJld3Jp
dGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgcHJpdmF0ZToKKysgICAgc3RkOjpm
dW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYp
PiBtTWFwOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1bmN0
aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbU1hcChtYXApCisrICAgIHt9CisrCisrICAgIFBvc3RS
ZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJv
bE5vZGUpOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpN
YXBTeW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRl
cm1Ob2RlICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyt7Cisr
ICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzdGQ6Om1vdmUobWFwKSk7CisrICAgIGlm
ICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgK
K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NTY4OTBhCistLS0gL2Rldi9u
dWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TWFwU3ltYm9scy5oCitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNU
T01FTUJFUkFDQ0VTU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9S
TUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKysKKysjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKysvLyBNYXBzIFRJbnRlcm1TeW1ib2wgbm9kZXMgdG8gVEludGVybU5vZGUgbm9kZXMuCisr
Ly8gVGhlIHBhcmVudCBmdW5jdGlvbiBvZiBhIHN5bWJvbCBpcyBwcm92aWRlZCB0byB0aGUgbWFw
cGluZyB3aGVuIGFwcGxpY2FibGUuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMo
CisrICAgIFRDb21waWxlciAmY29tcGlsZXIsCisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysg
ICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJt
U3ltYm9sICYpPiBtYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuY3BwCituZXcgZmlsZSBtb2Rl
IDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTc3OGQzNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5j
cHAKK0BAIC0wLDAgKzEsMTAwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TW9kaWZ5U3RydWN0LmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrc2l6ZV90IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUo
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIG9yZGVyaW5nLnNpemUoKTsKKyt9CisrCisrY29uc3Qg
TW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0KHNp
emVfdCBpbmRleCkgY29uc3QKKyt7CisrICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnMgICAgICAgICAgICAgID0gb3JkZXJpbmdbaW5kZXhdOworKyAg
ICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZpbmQoKnMpOworKyAgICBBU1NF
UlQobSk7CisrICAgIHJldHVybiAqbTsKKyt9CisrCisrY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNo
aW5lcnkgKk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQoY29uc3QgVFN0cnVjdHVyZSAm
cykgY29uc3QKKyt7CisrICAgIGF1dG8gaXRlciA9IG9yaWdpbmFsVG9NYWNoaW5lcnkuZmluZCgm
cyk7CisrICAgIGlmIChpdGVyID09IG9yaWdpbmFsVG9NYWNoaW5lcnkuZW5kKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrICAgIHJldHVybiAmaXRlci0+c2Vj
b25kOworK30KKysKKyt2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChjb25z
dCBUU3RydWN0dXJlICZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpCisreworKyAgICBBU1NF
UlQoIWZpbmQocykpOworKyAgICBvcmlnaW5hbFRvTWFjaGluZXJ5WyZzXSA9IG1hY2hpbmVyeTsK
KysgICAgb3JkZXJpbmcucHVzaF9iYWNrKCZzKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrVEludGVybVR5cGVkICZGbGF0dGVuKFN5bWJv
bEVudiAmc3ltYm9sRW52LCBUSW50ZXJtVHlwZWQgJm5vZGUpCisreworKyAgICBhdXRvICZ0eXBl
ID0gbm9kZS5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CisrCisrICAg
IGF1dG8gJnJldFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworKyAgICByZXRUeXBlLm1ha2VB
cnJheSgxKTsKKysKKysgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChO
YW1lKCJmbGF0dGVuIiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cisr
fQorKworK3N0cnVjdCBGbGF0dGVuQXJyYXkKKyt7fTsKKysKKytzdHJ1Y3QgUGF0aEl0ZW0KKyt7
CisrICAgIGVudW0gY2xhc3MgVHlwZQorKyAgICB7CisrICAgICAgICBGaWVsZCwgICAgICAgICAv
LyBTdHJ1Y3QgZmllbGQgaW5kZXhpbmcuCisrICAgICAgICBJbmRleCwgICAgICAgICAvLyBBcnJh
eSwgdmVjdG9yLCBvciBtYXRyaXggaW5kZXhpbmcuCisrICAgICAgICBGbGF0dGVuQXJyYXksICAv
LyBBcnJheSBvZiBhbnkgcmFuayAtPiBwb2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorKyAgICB9
OworKworKyAgICBQYXRoSXRlbShjb25zdCBURmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCks
IHR5cGUoVHlwZTo6RmllbGQpIHt9CisrICAgIFBhdGhJdGVtKGludCBpbmRleCkgOiBpbmRleChp
bmRleCksIHR5cGUoVHlwZTo6SW5kZXgpIHt9CisrICAgIFBhdGhJdGVtKHVuc2lnbmVkIGluZGV4
KSA6IFBhdGhJdGVtKHN0YXRpY19jYXN0PGludD4oaW5kZXgpKSB7fQorKyAgICBQYXRoSXRlbShG
bGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5cGU6OkZsYXR0ZW5BcnJheSkge30KKysKKysg
ICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZDsKKysgICAgICAg
IGludCBpbmRleDsKKysgICAgfTsKKysgICAgVHlwZSB0eXBlOworK307CisrCisrVEludGVybVR5
cGVkICZCdWlsZFBhdGhBY2Nlc3MoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRoKQorK3sKKysg
ICAgVEludGVybVR5cGVkICpjdXJyID0gbmV3IFRJbnRlcm1TeW1ib2woJnZhcik7CisrICAgIGZv
ciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorKyAgICB7CisrICAgICAgICBzd2l0Y2gg
KGl0ZW0udHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBl
OjpGaWVsZDoKKysgICAgICAgICAgICAgICAgY3VyciA9ICZBY2Nlc3NGaWVsZCgqY3VyciwgaXRl
bS5maWVsZC0+bmFtZSgpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
Y2FzZSBQYXRoSXRlbTo6VHlwZTo6SW5kZXg6CisrICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNj
ZXNzSW5kZXgoKmN1cnIsIGl0ZW0uaW5kZXgpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpGbGF0dGVuQXJyYXk6CisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiAqY3VycjsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kyt1c2luZyBPcmlnaW5hbFBhcmFtID0gY29uc3QgVFZhcmlhYmxlICY7CisrdXNpbmcgTW9kaWZp
ZWRQYXJhbSA9IGNvbnN0IFRWYXJpYWJsZSAmOworKworK3VzaW5nIE9yaWdpbmFsQWNjZXNzID0g
VEludGVybVR5cGVkOworK3VzaW5nIE1vZGlmaWVkQWNjZXNzID0gVEludGVybVR5cGVkOworKwor
K3N0cnVjdCBBY2Nlc3MKKyt7CisrICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKysgICAg
TW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkOworKworKyAgICBzdHJ1Y3QgRW52CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IENvbnZlcnRUeXBlIHR5cGU7CisrICAgIH07CisrfTsKKysKKyt1c2luZyBD
b252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rpb248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNzICYpPjsKKysKKytjbGFzcyBDb252ZXJ0U3RydWN0
U3RhdGUgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyt7CisrICBwcml2YXRlOgorKyAgICBzdHJ1Y3Qg
Q29udmVyc2lvbkluZm8KKysgICAgeworKyAgICAgICAgQ29udmVyc2lvbkZ1bmMgc3RkRnVuYzsK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqYXN0RnVuYzsKKysgICAgICAgIHN0ZDo6dmVjdG9y
PFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrICAgICAgICBJbW11dGFibGVTdHJpbmcgcGF0aE5hbWU7
CisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIENvbnZlcnRTdHJ1Y3RTdGF0ZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnLAor
KyAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFj
aGluZXJpZXMpCisrICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorKyAgICAgICAgICBzeW1ib2xF
bnYoc3ltYm9sRW52KSwKKysgICAgICAgICAgbW9kaWZpZWRGaWVsZHMoKm5ldyBURmllbGRMaXN0
KCkpLAorKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSksCisr
ICAgICAgICAgIGlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgb3V0TWFjaGluZXJpZXMob3V0TWFj
aGluZXJpZXMpCisrICAgIHt9CisrCisrICAgIH5Db252ZXJ0U3RydWN0U3RhdGUoKQorKyAgICB7
CisrICAgICAgICBBU1NFUlQobmFtZVBhdGguZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1Ymxpc2goY29uc3Qg
VFN0cnVjdHVyZSAmb3JpZ2luYWxTdHJ1Y3QsIGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFt
ZSkKKysgICAgeworKyAgICAgICAgY29uc3QgYm9vbCBpc09yaWdpbmFsVG9Nb2RpZmllZCA9IGNv
bmZpZy5jb252ZXJ0VHlwZSA9PSBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOworKwor
KyAgICAgICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRh
YmxlLCBtb2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGlmaWVkRmllbGRzLCBtb2RpZmllZFN0cnVj
dE5hbWUuc3ltYm9sVHlwZSgpKTsKKysKKysgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5j
dGlvbigKKysgICAgICAgICAgICAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgaWRHZW4uY3Jl
YXRlTmV3TmFtZShpc09yaWdpbmFsVG9Nb2RpZmllZCA/ICJvcmlnaW5hbFRvTW9kaWZpZWQiIDog
Im1vZGlmaWVkVG9PcmlnaW5hbCIpCisrICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwgbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidFZvaWQpLCBmYWxzZSk7CisrCisrICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFy
YW0gPQorKyAgICAgICAgICAgIENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIG9y
aWdpbmFsU3RydWN0LCBOYW1lKCJvcmlnaW5hbCIpKTsKKysgICAgICAgIE1vZGlmaWVkUGFyYW0g
bW9kaWZpZWRQYXJhbSA9CisrICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1i
b2xUYWJsZSwgbW9kaWZpZWRTdHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworKyAgICAgICAgc3lt
Ym9sRW52Lm1hcmtBc1JlZmVyZW5jZShvcmlnaW5hbFBhcmFtLCBBZGRyZXNzU3BhY2U6OlRocmVh
ZCk7CisrICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG1vZGlmaWVkUGFyYW0sIGNv
bmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSk7CisrICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9k
aWZpZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdp
bmFsUGFyYW0pOworKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFt
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBm
dW5jLmFkZFBhcmFtZXRlcigmbW9kaWZpZWRQYXJhbSk7CisrICAgICAgICAgICAgZnVuYy5hZGRQ
YXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVy
bUJsb2NrICZib2R5ID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysKKysgICAgICAgIEFjY2Vzczo6
RW52IGVudntjb25maWcuY29udmVydFR5cGV9OworKworKyAgICAgICAgZm9yIChDb252ZXJzaW9u
SW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBh
dXRvIGNvbnZlcnQgPSBbJl0oT3JpZ2luYWxBY2Nlc3MgJm9yaWdpbmFsLCBNb2RpZmllZEFjY2Vz
cyAmbW9kaWZpZWQpIHsKKysgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0RnVuYykKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmZvLnN0ZEZ1bmMp
OworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBvcmlnaW5hbCA6IG1vZGlm
aWVkOworKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgICAgICpp
bmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7CisrICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5zdGRGdW5jKTsKKysgICAgICAgICAgICAg
ICAgICAgIEFjY2VzcyBhY2Nlc3MgICAgICA9IGluZm8uc3RkRnVuYyhlbnYsIG9yaWdpbmFsLCBt
b2RpZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09y
aWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKysg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZGVzdCA9IGlzT3JpZ2luYWxUb01vZGlm
aWVkID8gYWNjZXNzLm1vZGlmaWVkIDogYWNjZXNzLm9yaWdpbmFsOworKyAgICAgICAgICAgICAg
ICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpF
T3BBc3NpZ24sICZkZXN0LCAmc3JjKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisrICAg
ICAgICAgICAgTW9kaWZpZWRBY2Nlc3MgKm1vZGlmaWVkID0gJkFjY2Vzc0ZpZWxkKG1vZGlmaWVk
UGFyYW0sIGluZm8ucGF0aE5hbWUpOworKworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0g
b3JpZ2luYWwtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSBtdCA9IG1vZGlm
aWVkLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgQVNTRVJUKG90LmlzQXJyYXkoKSA9PSBtdC5p
c0FycmF5KCkpOworKworKyAgICAgICAgICAgIGlmIChvdC5pc0FycmF5KCkgJiYgb3QgIT0gbXQp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXpl
cygpID09IG10LmdldEFycmF5U2l6ZXMoKSk7CisrICAgICAgICAgICAgICAgIGlmIChvdC5pc0Fy
cmF5T2ZBcnJheXMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
b3JpZ2luYWwgPSAmRmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisrICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllZCA9ICZGbGF0dGVuKHN5bWJvbEVudiwgKm1vZGlmaWVkKTsKKysgICAg
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGlj
X2Nhc3Q8aW50PihvdC5nZXRBcnJheVNpemVQcm9kdWN0KCkpOworKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsID0gb3JpZ2luYWwtPmRlZXBDb3B5KCk7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsK
KysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNj
ZXNzICZvID0gQWNjZXNzSW5kZXgoKm9yaWdpbmFsLCBpKTsKKysgICAgICAgICAgICAgICAgICAg
IE9yaWdpbmFsQWNjZXNzICZtID0gQWNjZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnZlcnQobywgbSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmllZCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKworKyAgICAgICAgYXV0byAqZnVuY1Byb3RvID0gbmV3IFRJbnRlcm1GdW5jdGlvblBy
b3RvdHlwZSgmZnVuYyk7CisrICAgICAgICBhdXRvICpmdW5jRGVmICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG8sICZib2R5KTsKKysKKysgICAgICAgIE1vZGlmaWVk
U3RydWN0TWFjaGluZXJ5IG1hY2hpbmVyeTsKKysgICAgICAgIG1hY2hpbmVyeS5tb2RpZmllZFN0
cnVjdCAgICAgICAgICAgICAgICAgICA9ICZtb2RpZmllZFN0cnVjdDsKKysgICAgICAgIG1hY2hp
bmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNEZWY7CisrCisrICAg
ICAgICBvdXRNYWNoaW5lcmllcy5pbnNlcnQob3JpZ2luYWxTdHJ1Y3QsIG1hY2hpbmVyeSk7Cisr
ICAgIH0KKysKKysgICAgdm9pZCBwdXNoUGF0aChQYXRoSXRlbSBjb25zdCAmaXRlbSkKKysgICAg
eworKyAgICAgICAgcGF0aEl0ZW1zLnB1c2hfYmFjayhpdGVtKTsKKysKKysgICAgICAgIHN3aXRj
aCAoaXRlbS50eXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZpZWxkOgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFt
ZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgo
aXRlbS5pbmRleCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKysgICAgICAgICAgICAgICAgbmFtZVBh
dGhTaXplcy5wdXNoX2JhY2sobmFtZVBhdGguc2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BQYXRoKCkKKysgICAgewor
KyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKysgICAgICAgIEFTU0VSVCghbmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgICAgIG5hbWVQYXRoLnJlc2l6ZShuYW1lUGF0aFNp
emVzLmJhY2soKSk7CisrICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisrCisrICAg
ICAgICBBU1NFUlQoIXBhdGhJdGVtcy5lbXB0eSgpKTsKKysgICAgICAgIHBhdGhJdGVtcy5wb3Bf
YmFjaygpOworKyAgICB9CisrCisrICAgIHZvaWQgZmluYWxpemUoKQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQoIWZpbmFsaXplZCk7CisrICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworKyAgICAg
ICAgaW50cm9kdWNlUGFja2luZygpOworKyAgICAgICAgQVNTRVJUKG1ldGFsTGF5b3V0VG90YWwg
PT0gTGF5b3V0OjpJZGVudGl0eSgpKTsKKysgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKysg
ICAgfQorKworKyAgICB2b2lkIGFkZE1vZGlmaWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlICZuZXdUeXBlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKysgICAgeworKyAg
ICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBuZXdUeXBlLmdldExheW91
dFF1YWxpZmllcigpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAg
PSBzdG9yYWdlOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgICAgPSBw
YWNraW5nOworKyAgICAgICAgbmV3VHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlm
aWVyKTsKKysKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBwYXRoTmFtZShuYW1lUGF0
aCk7CisrICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2sobmV3IFRGaWVsZCgmbmV3VHlw
ZSwgcGF0aE5hbWUsIGZpZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKSk7CisrICAgIH0K
KysKKysgICAgdm9pZCBhZGRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNpb25GdW5jICZmdW5jKQor
KyAgICB7CisrICAgICAgICBBU1NFUlQoIW1vZGlmaWVkRmllbGRzLmVtcHR5KCkpOworKyAgICAg
ICAgY29udmVyc2lvbkluZm9zLnB1c2hfYmFjayh7ZnVuYywgbnVsbHB0ciwgcGF0aEl0ZW1zLCBt
b2RpZmllZEZpZWxkcy5iYWNrKCktPm5hbWUoKX0pOworKyAgICB9CisrCisrICAgIHZvaWQgYWRk
Q29udmVyc2lvbihjb25zdCBURnVuY3Rpb24gJmZ1bmMpCisrICAgIHsKKysgICAgICAgIEFTU0VS
VCghbW9kaWZpZWRGaWVsZHMuZW1wdHkoKSk7CisrICAgICAgICBjb252ZXJzaW9uSW5mb3MucHVz
aF9iYWNrKHt7fSwgJmZ1bmMsIHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1l
KCl9KTsKKysgICAgfQorKworKyAgICBib29sIGhhc1BhY2tpbmcoKSBjb25zdCB7IHJldHVybiBj
b250YWluc1BhY2tlZDsgfQorKworKyAgICBib29sIGhhc1BhZGRpbmcoKSBjb25zdCB7IHJldHVy
biBwYWRGaWVsZENvdW50ID4gMDsgfQorKworKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
KyAgICB7CisrICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IG91dE1h
Y2hpbmVyaWVzLmZpbmQoc3RydWN0dXJlKTsKKysgICAgICAgIGlmIChtID09IG51bGxwdHIpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3
TmFtZShzdHJ1Y3R1cmUubmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgaWYgKCFUcnlDcmVh
dGVNb2RpZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFt
ZSwgb3V0TWFjaGluZXJpZXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBtID0gb3V0TWFjaGluZXJp
ZXMuZmluZChzdHJ1Y3R1cmUpOworKyAgICAgICAgICAgIEFTU0VSVChtKTsKKysgICAgICAgIH0K
KysgICAgICAgIG91dE1hY2hpbmVyeSA9ICptOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAg
IH0KKysKKysgIHByaXZhdGU6CisrICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50
LCBib29sIHVwZGF0ZUxheW91dCkKKysgICAgeworKyAgICAgICAgaWYgKHBhZEFtb3VudCA9PSAw
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysKKysgICAg
ICAgIGNvbnN0IHNpemVfdCBiZWdpbiA9IG1vZGlmaWVkRmllbGRzLnNpemUoKTsKKysKKysgICAg
ICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBpbiBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVj
YXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxsIG5vdAorKyAgICAgICAgLy8gYWxsb3cgbWF0cml4
IG9yIGFycmF5IG1lbWJlcnMuCisrICAgICAgICB3aGlsZSAocGFkQW1vdW50ID4gMCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBUVHlwZSAqcGFkVHlwZTsKKysgICAgICAgICAgICBpZiAocGFk
QW1vdW50ID49IDE2KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDE2OworKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidEZsb2F0LCA0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocGFk
QW1vdW50ID49IDgpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBwYWRBbW91bnQg
LT0gODsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRGbG9hdCwgMik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBhZEFt
b3VudCA+PSA0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09
IDQ7CisrICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0
RmxvYXQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQg
Pj0gMikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBhZEFtb3VudCAtPSAyOwor
KyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2ws
IDIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworKyAgICAgICAgICAgICAg
ICBwYWRBbW91bnQgLT0gMTsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KHVwZGF0ZUxheW91dCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5
b3V0VG90YWwgKz0gTWV0YWxMYXlvdXRPZigqcGFkVHlwZSk7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoInBhZCIp
OworKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjaygKKysgICAgICAgICAgICAg
ICAgbmV3IFRGaWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1l
LnN5bWJvbFR5cGUoKSkpOworKyAgICAgICAgICAgICsrcGFkRmllbGRDb3VudDsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHN0ZDo6cmV2ZXJzZShtb2RpZmllZEZpZWxkcy5iZWdpbigpICsgYmVn
aW4sIG1vZGlmaWVkRmllbGRzLmVuZCgpKTsKKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVj
ZVBhY2tpbmcoKQorKyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAg
YXV0byBzZXRVbnBhY2tlZFN0b3JhZ2UgPSBbXShUVHlwZSAmdHlwZSkgeworKyAgICAgICAgICAg
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCku
YmxvY2tTdG9yYWdlOworKyAgICAgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVk
OgorKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBj
YXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7CisrICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzU3RkNDMwOgorKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1Vuc3BlY2lmaWVkOgorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIFNldEJsb2NrU3RvcmFnZSh0eXBlLCBzdG9yYWdlKTsKKysgICAgICAg
IH07CisrCisrICAgICAgICBMYXlvdXQgZ2xzbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVkRmllbGRzLnNp
emUoKTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIFRGaWVsZCAmY3VyciAgICAgICAgICAgPSAqbW9kaWZpZWRG
aWVsZHNbaV07CisrICAgICAgICAgICAgVFR5cGUgJmN1cnJUeXBlICAgICAgICA9ICpjdXJyLnR5
cGUoKTsKKysgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNrZWQo
Y3VyclR5cGUpOworKworKyAgICAgICAgICAgIGF1dG8gZG9udFBhY2sgPSBbJl0oKSB7CisrICAg
ICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgc2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKysgICAgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgICAgICBnbHNsTGF5b3V0VG90YWwgKz0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKysgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgIGlmICghQ2FuQmVQ
YWNrZWQoY3VyclR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZG9udFBh
Y2soKTsKKysgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgfQorKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBwYWNrZWRHbHNsTGF5b3V0ICAgICAgICAgICA9IEdsc2xM
YXlvdXRPZihjdXJyVHlwZSk7CisrICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBwYWNrZWRTdG9yYWdlID0gY3VyclR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9y
YWdlOworKyAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisrICAgICAg
ICAgICAgY29uc3QgTGF5b3V0IHVucGFja2VkR2xzbExheW91dCA9IEdsc2xMYXlvdXRPZihjdXJy
VHlwZSk7CisrICAgICAgICAgICAgU2V0QmxvY2tTdG9yYWdlKGN1cnJUeXBlLCBwYWNrZWRTdG9y
YWdlKTsKKysKKysgICAgICAgICAgICBBU1NFUlQocGFja2VkR2xzbExheW91dC5zaXplT2YgPD0g
dW5wYWNrZWRHbHNsTGF5b3V0LnNpemVPZik7CisrICAgICAgICAgICAgaWYgKHBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mID09IHVucGFja2VkR2xzbExheW91dC5zaXplT2YpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkb250UGFjaygpOworKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGogPSBpICsg
MTsKKysgICAgICAgICAgICBpZiAoaiA9PSBzaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZG9udFBhY2soKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFj
a2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNrZWRHbHNsTGF5b3V0LnNpemVPZjsKKysgICAgICAg
ICAgICBjb25zdCBURmllbGQgJm5leHQgICAgICAgICAgPSAqbW9kaWZpZWRGaWVsZHNbal07Cisr
ICAgICAgICAgICAgY29uc3QgTGF5b3V0IG5leHRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKCpu
ZXh0LnR5cGUoKSk7CisrCisrICAgICAgICAgICAgaWYgKHBhZCA8IG5leHRHbHNsTGF5b3V0LnNp
emVPZikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisrICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBz
eW1ib2xFbnYubWFya0FzUGFja2VkKGN1cnIpOworKyAgICAgICAgICAgIGdsc2xMYXlvdXRUb3Rh
bCArPSBwYWNrZWRHbHNsTGF5b3V0OworKyAgICAgICAgICAgIGNvbnRhaW5zUGFja2VkID0gdHJ1
ZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVjZVBhZGRpbmcoKQor
KyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAgTWV0YWxMYXlvdXRP
ZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tp
bmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKysgICAgICAgIGxheW91dENv
bmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IHRydWU7CisrCisrICAgICAgICBURmll
bGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisrICAgICAgICBBU1NF
UlQoIWZpZWxkcy5lbXB0eSgpKTsgIC8vIEdMU0wgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1lbWJl
ci4KKysKKysgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKysKKysgICAgICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkcykKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsK
KysgICAgICAgICAgICBjb25zdCBMYXlvdXQgbWV0YWxMYXlvdXQgPSBNZXRhbExheW91dE9mKHR5
cGUsIGxheW91dENvbmZpZyk7CisrCisrICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9
IDA7CisrICAgICAgICAgICAgaWYgKGdsc2xMYXlvdXQuYWxpZ25PZiA+IG1ldGFsTGF5b3V0LmFs
aWduT2YgJiYgZmllbGQgIT0gZmlyc3QpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOwor
KyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRvdGFsLnJlcXVpcmVBbGlnbm1lbnQoZ2xzbExh
eW91dC5hbGlnbk9mLCB0cnVlKTsKKysgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZGRl
ZFNpemUgPSBtZXRhbExheW91dFRvdGFsLnNpemVPZjsKKysgICAgICAgICAgICAgICAgcHJlUGFk
QW1vdW50ICAgICAgICAgICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKysgICAgICAg
ICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCArPSBtZXRhbExheW91dDsKKysgICAgICAgICAgICAg
ICAgYWRkUGFkZGluZyhwcmVQYWRBbW91bnQsIGZhbHNlKTsgIC8vIE5vdGU6IHJlcXVpcmVBbGln
bm1lbnQoKSBhbHJlYWR5IHVwZGF0ZWQgbGF5b3V0CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90
YWwgKz0gbWV0YWxMYXlvdXQ7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIG1vZGlm
aWVkRmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisrCisrICAgICAgICAgICAgaWYgKGdsc2xMYXlv
dXQuc2l6ZU9mID4gbWV0YWxMYXlvdXQuc2l6ZU9mICYmIGZpZWxkICE9IGZpZWxkcy5iYWNrKCkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBib29sIHVwZGF0ZUxheW91
dCA9IHRydWU7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwYWRBbW91bnQgID0gZ2xzbExheW91dC5zaXplT2YgLSBtZXRhbExheW91dC5zaXplT2Y7Cisr
ICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFkQW1vdW50LCB1cGRhdGVMYXlvdXQpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0
aChjb25zdCBjaGFyICpleHRyYSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKGV4dHJhICYmICpl
eHRyYSAhPSAnXDAnKTsKKysgICAgICAgIG5hbWVQYXRoU2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRo
LnNpemUoKSk7CisrICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7CisrICAgICAgICBpZiAo
bmFtZVBhdGguZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBuYW1lUGF0aCA9IHA7
CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgd2hpbGUgKCpwID09
ICdfJykKKysgICAgICAgIHsKKysgICAgICAgICAgICArK3A7CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoKnAgPT0gJ1wwJykKKysgICAgICAgIHsKKysgICAgICAgICAgICBwID0gIngiOworKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKG5hbWVQYXRoLmJhY2soKSAhPSAnXycpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbmFtZVBhdGggKz0gJ18nOworKyAgICAgICAgfQorKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBl
eHRyYSkKKysgICAgeworKyAgICAgICAgY2hhciBidWZmZXJbc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisrICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1Iiwg
ZXh0cmEpOworKyAgICAgICAgcHVzaE5hbWVQYXRoKGJ1ZmZlcik7CisrICAgIH0KKysKKysgIHB1
YmxpYzoKKysgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZjb25maWc7CisrICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52OworKworKyAgcHJpdmF0ZToKKysgICAgVEZpZWxkTGlzdCAmbW9kaWZp
ZWRGaWVsZHM7CisrICAgIExheW91dCBtZXRhbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICBzaXplX3QgcGFkRmllbGRDb3VudCAgICA9IDA7CisrICAgIGJvb2wgY29udGFp
bnNQYWNrZWQgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZmluYWxpemVkICAgICAgICAgID0gZmFs
c2U7CisrCisrICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrCisrICAgIHN0
ZDo6dmVjdG9yPHNpemVfdD4gbmFtZVBhdGhTaXplczsKKysgICAgc3RkOjpzdHJpbmcgbmFtZVBh
dGg7CisrCisrICAgIHN0ZDo6dmVjdG9yPENvbnZlcnNpb25JbmZvPiBjb252ZXJzaW9uSW5mb3M7
CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGU7CisrICAgIElkR2VuICZpZEdlbjsKKysg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXM7CisrfTsKKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIE1vZGlmeUZ1bmMgPSBib29sICgqKShD
b252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpOworKworK2Jvb2wgTW9kaWZ5UmVj
dXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisrCisrYm9vbCBJZGVudGl0eU1vZGlmeShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAg
IHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIENsb25lVHlwZSh0eXBlKSwgc3RvcmFnZSwg
cGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKysgICAgfSk7CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAg
ICAgID0gKmZpZWxkLnR5cGUoKTsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJl
ID0gc3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworKyAgICBpZiAoIXN1
YnN0cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIGlmICghc3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBURmllbGRMaXN0
ICZzdWJmaWVsZHMgPSBzdWJzdHJ1Y3R1cmUtPmZpZWxkcygpOworKyAgICBmb3IgKGNvbnN0IFRG
aWVsZCAqc3ViZmllbGQgOiBzdWJmaWVsZHMpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBl
ICZzdWJ0eXBlICAgICAgICAgICAgICAgICAgPSAqc3ViZmllbGQtPnR5cGUoKTsKKysgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2Us
IHN1YnR5cGUpOworKyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgc3VicGFja2lu
ZyA9IE92ZXJsYXkocGFja2luZywgc3VidHlwZSk7CisrICAgICAgICBNb2RpZnlSZWN1cnNpdmUo
c3RhdGUsICpzdWJmaWVsZCwgc3Vic3RvcmFnZSwgc3VicGFja2luZyk7CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUmVjdXJzZVN0cnVjdChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
KyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisr
eworKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgICAgPSAqZmllbGQudHlwZSgpOwor
KyAgICBjb25zdCBUU3RydWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBzdGF0ZS5zeW1ib2xFbnYucmVt
YXAodHlwZS5nZXRTdHJ1Y3QoKSk7CisrICAgIGlmICghc3Vic3RydWN0dXJlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFzdGF0ZS5jb25maWcucmVj
dXJzZVN0cnVjdChmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisrICAgIGlmICgh
c3RhdGUucmVjdXJzZSgqc3Vic3RydWN0dXJlLCBtYWNoaW5lcnkpKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRU
eXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworKyAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCisrICAgIHsKKysgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisrICAgIH0KKysKKysgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29u
dmVydGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUp
OworKyAgICBBU1NFUlQoY29udmVydGVyKTsKKysKKysgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVs
ZChmaWVsZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZl
cnNpb24oKmNvbnZlcnRlci0+Z2V0RnVuY3Rpb24oKSk7CisrCisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICgh
dHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysgICAgaWYgKCFzdGF0ZS5jb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zKGZpZWxkKSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xz
ID0gdHlwZS5nZXRDb2xzKCk7CisrICAgIFRUeXBlICZyb3dUeXBlID0gRHJvcENvbHVtbnModHlw
ZSk7CisrCisrICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgKytjKQorKyAgICB7CisrICAg
ICAgICBzdGF0ZS5wdXNoUGF0aChjKTsKKysKKysgICAgICAgIHN0YXRlLmFkZE1vZGlmaWVkRmll
bGQoZmllbGQsIHJvd1R5cGUsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3RhdGUuYWRk
Q29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVk
QWNjZXNzICZtKSB7CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvLCBtfTsKKysgICAgICAg
IH0pOworKworKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIHJldHVy
biB0cnVlOworK30KKysKKytib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3RydWN0U3Rh
dGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5n
IHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7Cisr
ICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysgICAgY29uc3QgaW50IHJvd3MgICAgICAgPSB0eXBlLmdldFJvd3MoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzdGF0ZS5jb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
KGZpZWxkKTsKKysgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRD
b2xzKCk7CisrICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVy
YXRpb24pOworKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9y
YWdlLCBwYWNraW5nKTsKKysKKysgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisr
ICAgIHsKKysgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgKytyKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgICAgICAgICBh
dXRvICZvXyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0luZGV4KG8sIGMpLCByKTsKKysgICAgICAgICAg
ICAgICAgYXV0byAmbV8gPSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9KTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUZXN0
Qm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxk
KQorK3sKKysgICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gVEJhc2ljVHlw
ZTo6RWJ0Qm9vbCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29sVG9VaW50KGZpZWxkKSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytB
Y2Nlc3MgQ29udmVydEJvb2xUb1VpbnQoQ29udmVydFR5cGUgY29udmVydFR5cGUsIE9yaWdpbmFs
QWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkKKyt7CisrICAgIGF1dG8gY29lcmNlID0gW10o
VEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50ZXJtVHlwZWQgJiB7
CisrICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHRv
LmdldFR5cGUoKSwgbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbX0pOworKyAgICB9OworKyAgICBz
d2l0Y2ggKGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpP
cmlnaW5hbFRvTW9kaWZpZWQ6CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2VyY2UobSwg
byksIG19OworKyAgICAgICAgY2FzZSBDb252ZXJ0VHlwZTo6TW9kaWZpZWRUb09yaWdpbmFsOgor
KyAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7bywgY29lcmNlKG8sIG0pfTsKKysgICAgfQorK30K
KysKKytib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRl
ICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxk
ICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFycmF5KQorK3sKKysgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgIT0gYXJyYXkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoISgodHlw
ZS5pc1JhbmswKCkgJiYgSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUpKSB8fCB0eXBlLmlzVmVjdG9y
KCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgY29uc3Qg
YXV0byBzYXR1cmF0b3IgPQorKyAgICAgICAgYXJyYXkgPyBzdGF0ZS5jb25maWcuc2F0dXJhdGVT
Y2FsYXJPclZlY3RvckFycmF5cyA6IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9y
OworKyAgICBjb25zdCBpbnQgZGltICAgICAgICA9IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworKyAgICBpZiAoc2F0
dXJhdGlvbiA8PSBkaW0pCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KworKyAgICBUVHlwZSAmc2F0VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJh
dGlvbik7CisrICAgIGNvbnN0IGJvb2wgYm9vbFRvVWludCA9IFRlc3RCb29sVG9VaW50KHN0YXRl
LCBmaWVsZCk7CisrICAgIGlmIChib29sVG9VaW50KQorKyAgICB7CisrICAgICAgICBzYXRUeXBl
LnNldEJhc2ljVHlwZShUQmFzaWNUeXBlOjpFYnRVSW50KTsKKysgICAgfQorKyAgICBzdGF0ZS5h
ZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKysKKysg
ICAgZm9yIChpbnQgZCA9IDA7IGQgPCBkaW07ICsrZCkKKysgICAgeworKyAgICAgICAgc3RhdGUu
YWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJmVudiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1v
ZGlmaWVkQWNjZXNzICZtKSB7CisrICAgICAgICAgICAgYXV0byAmb18gPSBkaW0gPiAxID8gQWNj
ZXNzSW5kZXgobywgZCkgOiBvOworKyAgICAgICAgICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgo
bSwgZCk7CisrICAgICAgICAgICAgaWYgKGJvb2xUb1VpbnQpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xUb1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICB9KTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBTYXR1
cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9y
VmVjdG9yQ29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgdHJ1ZSk7CisrfQor
KworK2Jvb2wgU2F0dXJhdGVTY2FsYXJPclZlY3RvcihDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCisreworKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJPclZlY3RvckNvbW1v
bihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIGZhbHNlKTsKKyt9CisrCisrYm9vbCBQ
cm9tb3RlQm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBpZiAoIVRl
c3RCb29sVG9VaW50KHN0YXRlLCBmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBhdXRvICZwcm9tb3RlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxk
LnR5cGUoKSk7CisrICAgIHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0
VUludCk7CisrICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHByb21vdGVkVHlwZSwg
c3RvcmFnZSwgcGFja2luZyk7CisrCisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vz
czo6RW52ICZlbnYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRCb29sVG9VaW50KGVudi50eXBlLCBvLCBtKTsKKysgICAgfSk7
CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIE1vZGlmeUNvbW1vbihDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmll
bGQsCisrICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdl
LAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10gPSB7CisrICAgICAgICBJbmxpbmVTdHJ1Y3Qs
ICAgICAgICAgICAgICAgICAgLy8KKysgICAgICAgIFJlY3Vyc2VTdHJ1Y3QsICAgICAgICAgICAg
ICAgICAvLworKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAgICAgICAgICAgIC8vCisrICAg
ICAgICBTYXR1cmF0ZU1hdHJpeFJvd3MsICAgICAgICAgICAgLy8KKysgICAgICAgIFNhdHVyYXRl
U2NhbGFyT3JWZWN0b3JBcnJheXMsICAvLworKyAgICAgICAgU2F0dXJhdGVTY2FsYXJPclZlY3Rv
ciwgICAgICAgIC8vCisrICAgICAgICBQcm9tb3RlQm9vbFRvVWludCwgICAgICAgICAgICAgLy8K
KysgICAgfTsKKysKKysgICAgZm9yIChNb2RpZnlGdW5jIGZ1bmMgOiBmdW5jcykKKysgICAgewor
KyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKwor
KyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyt9CisrCisrYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
KyAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5p
bmxpbmVBcnJheShmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1
Y3QoKTsKKysgICAgY29uc3QgYm9vbCBpc011bHRpRGltID0gdHlwZS5pc0FycmF5T2ZBcnJheXMo
KTsKKysKKysgICAgYXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7Cisr
ICAgIGNvbnN0IFRGaWVsZCBpbm5lcm1vc3RGaWVsZCgmaW5uZXJtb3N0VHlwZSwgZmllbGQubmFt
ZSgpLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJvbFR5cGUoKSk7CisrCisrICAgIGlmIChpc011
bHRpRGltKQorKyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChGbGF0dGVuQXJyYXkoKSk7
CisrICAgIH0KKysKKysgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQor
KyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChpKTsKKysgICAgICAgIE1vZGlmeUNvbW1v
bihzdGF0ZSwgaW5uZXJtb3N0RmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3Rh
dGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIGlmIChpc011bHRpRGltKQorKyAgICB7Cisr
ICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7Cisr
fQorKworK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisr
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHN0
YXRlLnB1c2hQYXRoKGZpZWxkKTsKKysKKysgICAgYm9vbCBtb2RpZmllZDsKKysgICAgaWYgKElu
bGluZUFycmF5KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZykpCisrICAgIHsKKysgICAg
ICAgIG1vZGlmaWVkID0gdHJ1ZTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IG1vZGlmaWVkID0gTW9kaWZ5Q29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZyk7
CisrICAgIH0KKysKKysgICAgc3RhdGUucG9wUGF0aCgpOworKworKyAgICByZXR1cm4gbW9kaWZp
ZWQ7CisrfQorKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworKworK2Jvb2wgc2g6OlRyeUNyZWF0ZU1vZGlmaWVkU3RydWN0KFN5bWJvbEVu
diAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1
Y3RDb25maWcgJmNvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUU3RydWN0dXJlICZvcmlnaW5hbFN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJp
ZXMpCisreworKyAgICBDb252ZXJ0U3RydWN0U3RhdGUgc3RhdGUoc3ltYm9sRW52LCBpZEdlbiwg
Y29uZmlnLCBvdXRNYWNoaW5lcmllcyk7CisrICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50
ID0gMDsKKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmb3JpZ2luYWxGaWVsZHMgPSBvcmlnaW5h
bFN0cnVjdC5maWVsZHMoKTsKKysgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmln
aW5hbEZpZWxkcykKKysgICAgeworKyAgICAgICAgY29uc3QgVFR5cGUgJm9yaWdpbmFsVHlwZSAg
ICAgICAgICA9ICpvcmlnaW5hbEZpZWxkLT50eXBlKCk7CisrICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFn
ZSwgb3JpZ2luYWxUeXBlKTsKKysgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcgPSBPdmVybGF5KGNvbmZpZy5pbml0aWFsTWF0cml4UGFja2luZywgb3JpZ2luYWxUeXBl
KTsKKysgICAgICAgIGlmICghTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqb3JpZ2luYWxGaWVsZCwg
c3RvcmFnZSwgcGFja2luZykpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytpZGVudGljYWxG
aWVsZENvdW50OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHN0YXRlLmZpbmFsaXplKCk7
CisrCisrICAgIGlmIChpZGVudGljYWxGaWVsZENvdW50ID09IG9yaWdpbmFsRmllbGRzLnNpemUo
KSAmJiAhc3RhdGUuaGFzUGFja2luZygpICYmICFzdGF0ZS5oYXNQYWRkaW5nKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBzdGF0ZS5wdWJsaXNoKG9y
aWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUpOworKworKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L01vZGlmeVN0cnVjdC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uNGI4Y2ZjNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCitAQCAtMCwwICsxLDEz
NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1RfSF8KKysKKysjaW5jbHVk
ZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisr
CisrbmFtZXNwYWNlIHNoCisreworKworK2VudW0gY2xhc3MgQ29udmVydFR5cGUKKyt7CisrICAg
IE9yaWdpbmFsVG9Nb2RpZmllZCwKKysgICAgTW9kaWZpZWRUb09yaWdpbmFsLAorK307CisrCisr
Ly8gQ29uZmlndXJlcyBob3cgc3RydWN0IG1vZGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuCisrY2xh
c3MgTW9kaWZ5U3RydWN0Q29uZmlnCisreworKyAgcHVibGljOgorKyAgICBzdHJ1Y3QgUHJlZGlj
YXRlCisrICAgIHsKKysgICAgICAgIHVzaW5nIEZ1bmMgPSBib29sICgqKShjb25zdCBURmllbGQg
Jik7CisrICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgICAgIHN0YXRpYyBib29sIFRydWUoY29uc3QgVEZpZWxkICYpIHsgcmV0
dXJuIHRydWU7IH0KKysgICAgfTsKKysKKysgICAgc3RydWN0IFNhdHVyYXRlVmVjdG9yCisrICAg
IHsKKysgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4K
KysgICAgICAgIC8vIElmIG9yaWdpbmFsIGRpbSA+PSByZXR1cm4gdmFsdWUsIHRoZSBmaWVsZCBy
ZW1haW5zIHVudG91Y2hlZC4KKysgICAgICAgIHVzaW5nIEZ1bmMgPSBpbnQgKCopKGNvbnN0IFRG
aWVsZCAmKTsKKysgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAm
KSB7IHJldHVybiAwOyB9CisrICAgICAgICBzdGF0aWMgaW50IEZ1bGx5U2F0dXJhdGUoY29uc3Qg
VEZpZWxkICYpIHsgcmV0dXJuIDQ7IH0KKysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgTW9k
aWZ5U3RydWN0Q29uZmlnKENvbnZlcnRUeXBlIGNvbnZlcnRUeXBlLCBib29sIGFsbG93UGFja2lu
ZywgYm9vbCBhbGxvd1BhZGRpbmcpCisrICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBl
KSwgYWxsb3dQYWNraW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcp
CisrICAgIHt9CisrCisrICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxl
IGZpZWxkcyBvZiByb3cgdmVjdG9ycy4KKysgICAgUHJlZGljYXRlOjpGdW5jIHNwbGl0TWF0cml4
Q29sdW1ucyA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8vIEFycmF5IGZpZWxkcyBhcmUg
c3BsaXQgaW50byBtdWx0aXBsZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorKyAgICBQcmVkaWNh
dGU6OkZ1bmMgaW5saW5lQXJyYXkgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBTdHJ1
Y3QgZmllbGRzIGhhdmUgdGhlaXIgc3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisrICAgIFBy
ZWRpY2F0ZTo6RnVuYyBpbmxpbmVTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAv
LyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZC4KKysgICAgUHJlZGljYXRlOjpGdW5jIHJlY3Vy
c2VTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxh
ciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQgdG8gdWludCBmaWVsZHMuCisrICAgIFByZWRpY2F0
ZTo6RnVuYyBwcm9tb3RlQm9vbFRvVWludCA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8v
IENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFy
ZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKysgICAgLy8gZS5nLiBgZmxvYXQgLT4gZmxvYXQ0YC4KKysg
ICAgLy8gZS5nLiBgZmxvYXQyIC0+IGZsb2F0NGAuCisrICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5j
IHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOwor
KworKyAgICAvLyBDcmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBzY2FsYXIgb3IgdmVjdG9y
IGFycmF5IGZpZWxkcyBhcmUgc2F0dXJhdGVkLgorKyAgICAvLyBlLmcuIGBmbG9hdFsxMF0gLT4g
ZmxvYXQ0WzEwXWAKKysgICAgLy8gZS5nLiBgZmxvYXQyWzEwXSAtPiBmbG9hdDRbMTBdYAorKyAg
ICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzID0gU2F0
dXJhdGVWZWN0b3I6OkRvbnRTYXR1cmF0ZTsKKysKKysgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1
Y3R1cmUgd2hlcmUgbWF0cml4IGZpZWxkcyBhcmUgcm93LXNhdHVyYXRlZC4KKysgICAgLy8gZS5n
LiBgZmxvYXQyeDIgLT4gZmxvYXQyeDRgLgorKyAgICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1
cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworKworKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIGluaXRpYWxCbG9ja1N0b3JhZ2UgICA9IGtEZWZhdWx0TGF5b3V0
QmxvY2tTdG9yYWdlOworKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0cml4UGFj
a2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKysgICAgQ29udmVydFR5cGUgY29u
dmVydFR5cGU7CisrICAgIGJvb2wgYWxsb3dQYWNraW5nOworKyAgICBib29sIGFsbG93UGFkZGlu
ZzsKKysgICAgQWRkcmVzc1NwYWNlIGV4dGVybmFsQWRkcmVzc1NwYWNlOworK307CisrCisrc3Ry
dWN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5CisreworKyAgICBjb25zdCBUU3RydWN0dXJlICpt
b2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKysgICAgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxs
cHRyOworKworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uIComZ2V0Q29udmVydGVyKENv
bnZlcnRUeXBlIGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBpZiAoY29udmVydFR5cGUg
PT0gQ29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gZnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgICAgIH0KKysgICAgICAg
IGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9Pcmln
aW5hbDsKKysgICAgICAgIH0KKysgICAgfQorK307CisrCisrLy8gSW5kZXhlZCBieSB0b3BvbG9n
aWNhbCBvcmRlci4KKytjbGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCisreworKyAgcHVi
bGljOgorKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworKyAgICBjb25zdCBNb2RpZmllZFN0cnVj
dE1hY2hpbmVyeSAmYXQoc2l6ZV90IGluZGV4KSBjb25zdDsKKysgICAgY29uc3QgTW9kaWZpZWRT
dHJ1Y3RNYWNoaW5lcnkgKmZpbmQoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3Q7CisrICAgIHZv
aWQgaW5zZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJ5ICZtYWNoaW5lcnkpOworKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9N
YWNoaW5lcnk7CisrICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gb3JkZXJpbmc7
CisrfTsKKysKKysvLyBSZXR1cm5zIHRydWUgYW5kIGBvdXRNYWNoaW5lcnlgIHBvcHVsYXRlZCBp
ZiBtb2RpZmljYXRpb25zIHdlcmUgcGVyZm9ybWVkLgorKy8vIFJldHVybnMgZmFsc2Ugb3RoZXJ3
aXNlLgorK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNvbmZpZywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3Ry
dWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmbW9kaWZpZWRT
dHJ1Y3ROYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RN
YWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9E
SUZZU1RSVUNUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw
MDAwMC4uMDdjNWQxOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCitAQCAtMCwwICsxLDIyMCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
KworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyBJbW11dGFibGVTdHJpbmcgR2V0TmFtZShU
IGNvbnN0ICZvYmplY3QpCisreworKyAgICBpZiAob2JqZWN0LnN5bWJvbFR5cGUoKSA9PSBTeW1i
b2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGtFbXB0eUltbXV0YWJsZVN0
cmluZzsKKysgICAgfQorKyAgICByZXR1cm4gb2JqZWN0Lm5hbWUoKTsKKyt9CisrCisrTmFtZTo6
TmFtZShjb25zdCBURmllbGQgJmZpZWxkKSA6IE5hbWUoR2V0TmFtZShmaWVsZCksIGZpZWxkLnN5
bWJvbFR5cGUoKSkge30KKysKKytOYW1lOjpOYW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCkgOiBO
YW1lKEdldE5hbWUoc3ltYm9sKSwgc3ltYm9sLnN5bWJvbFR5cGUoKSkge30KKysKKytib29sIE5h
bWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4g
bVJhd05hbWUgPT0gb3RoZXIubVJhd05hbWUgJiYgbVN5bWJvbFR5cGUgPT0gb3RoZXIubVN5bWJv
bFR5cGU7CisrfQorKworK2Jvb2wgTmFtZTo6b3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyt9CisrCisrYm9vbCBO
YW1lOjpvcGVyYXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICBpZiAobVJh
d05hbWUgPCBvdGhlci5tUmF3TmFtZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7Cisr
ICAgIH0KKysgICAgaWYgKG90aGVyLm1SYXdOYW1lIDwgbVJhd05hbWUpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gbVN5bWJvbFR5cGUgPCBvdGhl
ci5tU3ltYm9sVHlwZTsKKyt9CisrCisrYm9vbCBOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAg
ICByZXR1cm4gbVN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHk7CisrfQorKworK2Jvb2wg
TmFtZTo6YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0CisreworKyAgICBpZiAo
bVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1TeW1ib2xUeXBlKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIG1SYXdOYW1lLmJlZ2luc1dpdGgocHJlZml4
Lm1SYXdOYW1lKTsKKyt9CisrCisrdm9pZCBOYW1lOjplbWl0KFRJbmZvU2lua0Jhc2UgJm91dCkg
Y29uc3QKKyt7CisrICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKysgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQ6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKysgICAgICAg
ICAgICBvdXQgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3
TmFtZS5lbXB0eSgpKTsKKysgICAgICAgICAgICBpZiAobVJhd05hbWUuYmVnaW5zV2l0aChrQW5n
bGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBvdXQg
PDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1SYXdO
YW1lWzBdICE9ICdfJykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8PCBr
QW5nbGVJbnRlcm5hbFByZWZpeCA8PCAnXycgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8
PCBrQW5nbGVJbnRlcm5hbFByZWZpeCA8PCBtUmF3TmFtZTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrLy8g
Tk9URTogVGhpcyBtYXRjaGVzIG1vcmUgdGhpbmdzIHRoYW4gRmluZFN5bWJvbE5vZGUuCisrY2xh
c3MgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgorK3sKKysgICAgTmFtZSBtTmFtZTsKKysgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7Cisr
CisrICBwdWJsaWM6CisrICAgIEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5h
bWUgJm5hbWUpCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNl
KSwgbU5hbWUobmFtZSkKKysgICAge30KKysKKysgICAgYm9vbCBmb3VuZE5hbWUoKSBjb25zdCB7
IHJldHVybiBtRm91bmROYW1lOyB9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKE5hbWUobm9kZS0+dmFy
aWFibGUoKSkgPT0gbU5hbWUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUZvdW5kTmFtZSA9
IHRydWU7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlz
aXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9Cisr
CisrICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
IG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9CisrCisrICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZSAgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZSB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQorKworKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1Y3RvcigpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IG5v
ZGUtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUg
PSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUgJiYgTmFtZSgq
c3RydWN0dXJlKSA9PSBtTmFtZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1G
b3VuZE5hbWUgPSB0cnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBub2Rl
LT5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09
IG1OYW1lKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRy
dWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuICFtRm91bmRO
YW1lOworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRJZkVsc2UoVmlzaXQgdmlzaXQsIFRJbnRl
cm1JZkVsc2UgKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRj
aChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGJvb2wgdmlz
aXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHZv
aWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3Zl
cnJpZGUgeyBMT0dJQ19FUlJPUigpOyB9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlk
ZQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisrICAg
IHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0QnJhbmNoKFZp
c2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VS
Uk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgdm9pZCB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92
ZXJyaWRlIHsgTE9HSUNfRVJST1IoKTsgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorKworK2Jvb2wgc2g6OkV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFt
ZSwgVEludGVybVR5cGVkICZub2RlKQorK3sKKysgICAgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZp
c2l0b3IgdmlzaXRvcihuYW1lKTsKKysgICAgbm9kZS50cmF2ZXJzZSgmdmlzaXRvcik7CisrICAg
IHJldHVybiB2aXNpdG9yLmZvdW5kTmFtZSgpOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaAorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ2ZWFlYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKK0BAIC0wLDAg
KzEsNjggQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbmZvU2luay5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5v
ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysK
Kytjb25zdGV4cHIgY2hhciBrQW5nbGVJbnRlcm5hbFByZWZpeFtdID0gIkFOR0xFIjsKKysKKysv
LyBSZXByZXNlbnRzIHRoZSBuYW1lIG9mIGEgc3ltYm9sLgorK2NsYXNzIE5hbWUKKyt7CisrICBw
dWJsaWM6CisrICAgIGNvbnN0ZXhwciBOYW1lKGNvbnN0IE5hbWUgJikgPSBkZWZhdWx0OworKwor
KyAgICBjb25zdGV4cHIgTmFtZSgpIDogTmFtZShrRW1wdHlJbW11dGFibGVTdHJpbmcsIFN5bWJv
bFR5cGU6OkVtcHR5KSB7fQorKworKyAgICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFi
bGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorKyAgICAgICAgOiBtUmF3
TmFtZShyYXdOYW1lKSwgbVN5bWJvbFR5cGUoc3ltYm9sVHlwZSkKKysgICAgeworKyAgICAgICAg
QVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAoc3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0
eSkpOworKyAgICB9CisrCisrICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIg
KnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJu
YWwpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBzeW1ib2xUeXBl
KQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZyYXdO
YW1lLCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3Ry
aW5nKHJhd05hbWUpLCBzeW1ib2xUeXBlKQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1l
KGNvbnN0IFRGaWVsZCAmZmllbGQpOworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRTeW1ib2wg
JnN5bWJvbCk7CisrCisrICAgIE5hbWUgJm9wZXJhdG9yPShjb25zdCBOYW1lICYpID0gZGVmYXVs
dDsKKysgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworKworKyAgICBjb25zdGV4cHIgY29uc3Qg
SW1tdXRhYmxlU3RyaW5nICZyYXdOYW1lKCkgY29uc3QgeyByZXR1cm4gbVJhd05hbWU7IH0KKysg
ICAgY29uc3RleHByIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1TeW1i
b2xUeXBlOyB9CisrCisrICAgIGJvb2wgZW1wdHkoKSBjb25zdDsKKysgICAgYm9vbCBiZWdpbnNX
aXRoKGNvbnN0IE5hbWUgJnByZWZpeCkgY29uc3Q7CisrCisrICAgIHZvaWQgZW1pdChUSW5mb1Np
bmtCYXNlICZvdXQpIGNvbnN0OworKworKyAgcHJpdmF0ZToKKysgICAgSW1tdXRhYmxlU3RyaW5n
IG1SYXdOYW1lOworKyAgICBTeW1ib2xUeXBlIG1TeW1ib2xUeXBlOworK307CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwg
VEludGVybVR5cGVkICZub2RlKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UGlwZWxpbmUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1BpcGVsaW5lLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU0
YzM3OGEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAKK0BAIC0wLDAgKzEsNDc2IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0J1aWx0SW4uaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKysKKysjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNl
KSAodmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorKwor
K2Jvb2wgUGlwZWxpbmU6OnVzZXMoY29uc3QgVFZhcmlhYmxlICZ2YXIpIGNvbnN0CisreworKyAg
ICBpZiAodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChnbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ2YXIgPT0gZ2xvYmFsSW5zdGFuY2VWYXI7Cisr
ICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBlICAgICAgPSB2YXIuZ2V0VHlwZSgp
OworKyAgICBjb25zdCBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmll
cigpOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4SW46CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUF0dHJpYnV0ZToKKysgICAg
ICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJbjoKKysgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhP
dXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRmxhdE91dDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludFNpemU6CisrICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUNlbnRyb2lkT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cU5vUGVyc3BlY3RpdmVPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
VmFyeWluZ091dDoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAg
ICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFGbGF0SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxU21vb3RoSW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJv
aWRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZl
SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ0luOgorKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBzd2l0Y2ggKHF1
YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxRnJhZ21lbnRPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0NvbG9yOgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEYXRh
OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEZXB0aDoKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysg
ICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVh
bGlmaWVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFVbmlmb3JtOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6
CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUdsb2JhbDoKKysgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6
OkV2cVZlcnRleElEOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRH
bG9iYWxzOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29vcmQ6CisrICAgICAg
ICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcm9udEZhY2luZzoKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlw
ZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8gZ2xvYmFs
SW5zdGFuY2VWYXIgc2hvdWxkIGJlIG5vbi1udWxsIGFuZCB0aHVzIG5ldmVyIHJlYWNoIGhlcmUu
CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBl
KCkpOworKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJl
dHVybiBOYW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkp
OworKyAgICB9CisrfQorKworK05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdFR5cGVOYW1lKFZhcmlh
bnQgdmFyaWFudCkgY29uc3QKKyt7CisrICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAgIHN3aXRj
aCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAg
ICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJWZXJ0ZXhJbiIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVmVydGV4T3V0Iik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiRnJhZ21lbnRJbiIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBuYW1l
ID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJGcmFnbWVudE91dCIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVXNlclVuaWZvcm1zIik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiQW5nbGVVbmlmb3JtcyIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAg
ICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiTm9uQ29uc3RHbG9iYWxzIik7
CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0
ZXhHbG9iYWxzOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIklu
dm9jYXRpb25WZXJ0ZXhHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9
IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscyIpOworKyAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAg
ICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIlRleHR1cmVFbnZzIik7CisrICAgICAg
ICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAg
ICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW5zdGFuY2VJZCIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICB9CisrICAgIHJldHVybiBOYW1lKG5hbWUpOworK30KKysKKytOYW1l
IFBpcGVsaW5lOjpnZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25zdAor
K3sKKysgICAgY29uc3QgY2hhciAqbmFtZTsKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5U
X05BTUUodmFyaWFudCwgInZlcnRleEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJ2ZXJ0ZXhPdXQiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJmcmFnbWVudEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgImZyYWdtZW50T3V0Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OlVzZXJVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJ1c2VyVW5pZm9ybXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJhbmdsZVVuaWZvcm1zIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFS
SUFOVF9OQU1FKHZhcmlhbnQsICJub25Db25zdEdsb2JhbHMiKTsKKysgICAgICAgICAgICBicmVh
azsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAg
ICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiaW52b2NhdGlvblZlcnRleEdsb2Jh
bHMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlv
bkZyYWdtZW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidGV4dHVyZUVudnMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnN0YW5jZUlkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0K
KysgICAgcmV0dXJuIE5hbWUobmFtZSk7CisrfQorKworK3N0YXRpYyBib29sIEFsbG93UGFja2lu
ZyhQaXBlbGluZTo6VHlwZSB0eXBlKQorK3sKKysgICAgdXNpbmcgVHlwZSA9IFBpcGVsaW5lOjpU
eXBlOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2Fz
ZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91
dDoKKysgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgIGNhc2UgVHlw
ZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
czoKKysgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKysgICAgICAgIGNhc2UgVHlwZTo6SW5z
dGFuY2VJZDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrc3Rh
dGljIGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCisreworKyAgICB1c2lu
ZyBUeXBlID0gUGlwZWxpbmU6OlR5cGU7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgewor
KyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OlZl
cnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5
cGU6OkZyYWdtZW50SW46CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25z
dGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
OgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorK30KKytlbnVtIENvbXBhcmUKKyt7CisrICAgIExULAorKyAgICBMVEUsCisrICAg
IEVRLAorKyAgICBHVEUsCisrICAgIEdULAorK307CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cisrc3RhdGljIGJvb2wgQ29tcGFyZUJ5KENvbXBhcmUgb3AsIGNvbnN0IFQgJngsIGNvbnN0IFQg
JnkpCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIExUOgorKyAg
ICAgICAgICAgIHJldHVybiB4IDwgeTsKKysgICAgICAgIGNhc2UgTFRFOgorKyAgICAgICAgICAg
IHJldHVybiB4IDw9IHk7CisrICAgICAgICBjYXNlIEVROgorKyAgICAgICAgICAgIHJldHVybiB4
ID09IHk7CisrICAgICAgICBjYXNlIEdURToKKysgICAgICAgICAgICByZXR1cm4geCA+PSB5Owor
KyAgICAgICAgY2FzZSBHVDoKKysgICAgICAgICAgICByZXR1cm4geCA+IHk7CisrICAgIH0KKyt9
CisrCisrdGVtcGxhdGUgPFRCYXNpY1R5cGUgQlQsIENvbXBhcmUgQ21wLCBpbnQgTWF0Y2hEaW0s
IGludCBOZXdEaW0+Cisrc3RhdGljIGludCBTYXR1cmF0ZVZlY3Rvck9mKGNvbnN0IFRGaWVsZCAm
ZmllbGQpCisreworKyAgICBzdGF0aWNfYXNzZXJ0KE5ld0RpbSA+PSBNYXRjaERpbSwgIiIpOwor
KworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIEFTU0VSVCh0
eXBlLmlzU2NhbGFyKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKysKKysgICAgY29uc3QgYm9vbCBj
b25kID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKysg
ICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZUJ5KENtcCwgdHlwZS5nZXROb21pbmFsU2l6ZSgp
LCBNYXRjaERpbSk7CisrCisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
TmV3RGltOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKytNb2RpZnlTdHJ1Y3RDb25m
aWcgUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCkgY29uc3QKKyt7CisrICAg
IHVzaW5nIFByZWQgICA9IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworKyAgICB1c2lu
ZyBTYXRWZWMgPSBNb2RpZnlTdHJ1Y3RDb25maWc6OlNhdHVyYXRlVmVjdG9yOworKworKyAgICBN
b2RpZnlTdHJ1Y3RDb25maWcgY29uZmlnKAorKyAgICAgICAgaXNQaXBlbGluZU91dCgpID8gQ29u
dmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCA6IENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3Jp
Z2luYWwsCisrICAgICAgICBBbGxvd1BhY2tpbmcodHlwZSksIEFsbG93UGFkZGluZyh0eXBlKSk7
CisrCisrICAgIGNvbmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSA9IGV4dGVybmFsQWRkcmVzc1Nw
YWNlKCk7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBl
OjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZDo6
VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1
ZTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0
OgorKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOwor
KyAgICAgICAgICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAg
ICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAg
ICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAg
ICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisrICAgICAgICAgICAg
Y29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAg
ICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmllbGQp
IHsKKysgICAgICAgICAgICAgICAgaWYgKGludCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNU
eXBlOjpFYnRJbnQsIExULCA0LCA0PihmaWVsZCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGlmIChpbnQgcyA9IFNhdHVyYXRlVmVjdG9yT2Y8VEJhc2ljVHlwZTo6RWJ0VUludCwg
TFQsIDQsIDQ+KGZpZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHM7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICAgICAgfTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VXNl
clVuaWZvcm1zOgorKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAg
ICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
ICAgICAgICAgICA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysgICAgICAgICAgICBjb25maWcu
c2F0dXJhdGVTY2FsYXJPclZlY3RvckFycmF5cyA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysg
ICAgICAgICAgICBjb25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRy
dWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5p
Zm9ybXM6CisrICAgICAgICAgICAgY29uZmlnLmluaXRpYWxCbG9ja1N0b3JhZ2UgPSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAg
YnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEds
b2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNl
SWQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbmZpZzsK
Kyt9CisrCisrYm9vbCBQaXBlbGluZTo6YWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25Jbk1haW4oKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudElu
OgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6
OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrfQorKworK2Jvb2wgUGlwZWxpbmU6OmlzUGlwZWxpbmVPdXQoKSBjb25zdAorK3sKKysg
ICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2Vy
VW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICBj
YXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5
cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrfQorKworK0FkZHJlc3NTcGFjZSBQ
aXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2Fz
ZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2Jh
bHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBU
eXBlOjpUZXh0dXJlOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAg
Y2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OlRocmVhZDsKKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1z
OgorKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworKyAgICB9Cisr
fQorKworK2Jvb2wgUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzKGNvbnN0IFRTdHJ1Y3R1cmUgJnMs
IGJvb2wgaW50ZXJuYWwsIGJvb2wgZXh0ZXJuYWwpIGNvbnN0CisreworKyAgICBQaXBlbGluZVNj
b3BlZDxUU3RydWN0dXJlPiBwc1tdID0geworKyAgICAgICAgZnJhZ21lbnRJbiwKKysgICAgICAg
IGZyYWdtZW50T3V0LAorKyAgICAgICAgdmVydGV4SW4sCisrICAgICAgICB2ZXJ0ZXhPdXQsCisr
ICAgICAgICB1c2VyVW5pZm9ybXMsCisrICAgICAgICBhbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
bm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgdGV4dHVyZSwKKysg
ICAgICAgIGluc3RhbmNlSWQsCisrICAgIH07CisrICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHBz
KQorKyAgICB7CisrICAgICAgICBpZiAoaW50ZXJuYWwgJiYgcC5pbnRlcm5hbCA9PSAmcykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAg
IGlmIChleHRlcm5hbCAmJiBwLmV4dGVybmFsID09ICZzKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUGlwZWxpbmUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LjliZjQ3NmEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5oCitAQCAtMCwwICsxLDEyMyBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUElQRUxJTkVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKysvLyBEYXRhIHRoYXQgaXMgc2NvcGVkIGFzIGBleHRlcm5hbGAgYW5kIGBpbnRl
cm5hbGAgZm9yIGEgZ2l2ZW4gcGlwZWxpbmUuCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3Ry
dWN0IFBpcGVsaW5lU2NvcGVkCisreworKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0
byB0YWxrIGV4dGVybmFsbHkgdG8gdGhlIHByb2dyYW0uCisrICAgIC8vIE1heSBjb2luY2lkZSB3
aXRoIGBpbnRlcm5hbGAsIGJ1dCBtYXkgYWxzbyBkaXZlcmdlIGZyb20gYGludGVybmFsYC4KKysg
ICAgY29uc3QgVCAqZXh0ZXJuYWwgPSBudWxscHRyOworKworKyAgICAvLyBEYXRhIHRoYXQgaXMg
Y29uZmlndXJlZCB0byB0YWxrIGludGVybmFsbHkgd2l0aGluIHRoZSBwcm9ncmFtLgorKyAgICAv
LyBNYXkgY29pbmNpZGUgd2l0aCBgZXh0ZXJuYWxgLCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9t
IGBleHRlcm5hbGAuCisrICAgIGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKysKKysgICAg
Ly8gUmV0dXJucyB0cnVlIGlmZiB0aGUgaW5wdXQgY29pbmNpZGVzIHdpdGggZWl0aGVyIGBleHRl
cm5hbGAgb3IgYGludGVybmFsYCBkYXRhLgorKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2Jq
ZWN0KSBjb25zdCB7IHJldHVybiBleHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZv
YmplY3Q7IH0KKysKKysgICAgLy8gQm90aCBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIHJlcHJl
c2VudGF0aW9ucyBhcmUgbm9uLW51bGwuCisrICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0
IHsgcmV0dXJuIGV4dGVybmFsICYmIGludGVybmFsOyB9CisrCisrICAgIC8vIEJvdGggYGV4dGVy
bmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG51bGwuCisrICAgIGJvb2wg
aXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9
CisrCisrICAgIC8vIEJvdGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlv
bnMgYXJlIHRoZSBzYW1lLgorKyAgICBib29sIGlzVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4
dGVybmFsID09IGludGVybmFsOyB9CisrfTsKKysKKysvLyBSZXByZXNlbnRzIGEgaGlnaC1sZXZl
bCBwcm9ncmFtIHBpcGVsaW5lLgorK2NsYXNzIFBpcGVsaW5lCisreworKyAgcHVibGljOgorKyAg
ICBlbnVtIGNsYXNzIFR5cGUKKysgICAgeworKyAgICAgICAgVmVydGV4SW4sCisrICAgICAgICBW
ZXJ0ZXhPdXQsCisrICAgICAgICBGcmFnbWVudEluLAorKyAgICAgICAgRnJhZ21lbnRPdXQsCisr
ICAgICAgICBVc2VyVW5pZm9ybXMsCisrICAgICAgICBBbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
Tm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgSW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgVGV4dHVyZSwKKysg
ICAgICAgIEluc3RhbmNlSWQsCisrICAgIH07CisrCisrICAgIGVudW0gY2xhc3MgVmFyaWFudAor
KyAgICB7CisrICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisrICAg
ICAgICAvLyBGb3IgZXh0ZXJuYWwgcGlwZWxpbmUgdXNlcyBpZiBwaXBlbGluZSBkb2VzIG5vdCBy
ZXF1aXJlIHNwbGl0dGluZyBvciBzYXR1cmF0aW9uLgorKyAgICAgICAgT3JpZ2luYWwsCisrCisr
ICAgICAgICAvLyBPbmx5IGZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHRoZSBwaXBlbGlu
ZSB3YXMgc3BsaXQgb3Igc2F0dXJhdGVkLgorKyAgICAgICAgTW9kaWZpZWQsCisrICAgIH07Cisr
CisrICBwdWJsaWM6CisrICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKysgICAgVHlw
ZSB0eXBlOworKworKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUg
cGlwZWxpbmUgc3RydWN0IGFscmVhZHkgZXhpc3RzLgorKyAgICAvLyBJZiBub24tbnVsbCBzdHJ1
Y3Qgc3BsaXR0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkLgorKyAgICBjb25zdCBUVmFyaWFibGUg
Kmdsb2JhbEluc3RhbmNlVmFyOworKworKyAgcHVibGljOgorKyAgICAvLyBSZXR1cm5zIHRydWUg
aWZmIHRoZSB2YXJpYWJsZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS4KKysgICAgYm9vbCB1c2Vz
KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgbmFt
ZSBmb3IgdGhlIHN0cnVjdCB0eXBlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlzIHBpcGVs
aW5lLgorKyAgICBOYW1lIGdldFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7
CisrCisrICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgaW5zdGFuY2UgdGhh
dCBzdG9yZXMgdmFyaWFibGVzIG9mIHRoaXMgcGlwZWxpbmUuCisrICAgIE5hbWUgZ2V0U3RydWN0
SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisrCisrICAgIE1vZGlmeVN0cnVj
dENvbmZpZyBleHRlcm5hbFN0cnVjdE1vZGlmeUNvbmZpZygpIGNvbnN0OworKworKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHBpcGVsaW5lIGFsd2F5cyByZXF1aXJlcyBhIG5vbi1wYXJhbWV0
ZXIgbG9jYWwgaW5zdGFuY2UgZGVjbGFyYXRpb24gb2YKKysgICAgLy8gdGhlIHBpcGVsaW5lIHN0
cnVjdHVyZXMuCisrICAgIGJvb2wgYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRp
b25Jbk1haW4oKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgcGlwZWxp
bmUgaXMgYW4gb3V0cHV0IHBpcGVsaW5lLiBUaGUgZXh0ZXJuYWwgcGlwZWxpbmUgc3RydWN0dXJl
IHNob3VsZAorKyAgICAvLyBiZSByZXR1cm5lZCBmcm9tIGBtYWluYC4KKysgICAgYm9vbCBpc1Bp
cGVsaW5lT3V0KCkgY29uc3Q7CisrCisrICAgIEFkZHJlc3NTcGFjZSBleHRlcm5hbEFkZHJlc3NT
cGFjZSgpIGNvbnN0OworK307CisrCisrLy8gQSBjb2xsZWN0aW9uIG9mIHZhcmlvdXMgcGlwZWxp
bmUgc3RydWN0dXJlcy4KKytzdHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RzIDogYW5nbGU6Ok5vbkNvcHlh
YmxlCisreworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudEluOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudE91dDsKKysgICAgUGlwZWxpbmVT
Y29wZWQ8VFN0cnVjdHVyZT4gdmVydGV4SW47CisrICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1
cmU+IHZlcnRleE91dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gdXNlclVuaWZv
cm1zOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBhbmdsZVVuaWZvcm1zOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7CisrICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOworKyAgICBQ
aXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiBpbnN0YW5jZUlkOworKworKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0
cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7CisrfTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJl
bHVkZS5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YmY1YTAyCist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuY3BwCitAQCAtMCwwICsxLDM3NTcgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaW5jbHVkZSA8Y2N0eXBlPgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIKKyt7CisrICAgIHVzaW5nIExpbmVUYWcgICAgICAgPSB1bnNpZ25lZDsKKysg
ICAgdXNpbmcgRnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0
IFRGdW5jdGlvbiAmKTsKKysgICAgdXNpbmcgRnVuY1RvRW1pdHRlciA9IHN0ZDo6bWFwPE5hbWUs
IEZ1bmNFbWl0dGVyPjsKKysKKysgIHB1YmxpYzoKKysgICAgUHJvZ3JhbVByZWx1ZGUoVEluZm9T
aW5rQmFzZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorKyAgICAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXQob3V0KQorKyAgICB7
CisrICAgICAgICBBTFdBWVNfSU5MSU5FKCk7CisrCisrICAgICAgICBpZiAocHBjLmhhc1N0cnVj
dEVxKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVxdWFsVmVjdG9yKCk7CisrICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKTsKKysgICAgICAgIH0KKysKKysjaWYgMQorKyAgICAgICAgbU91dCA8
PCAiI2RlZmluZSBBTkdMRV90ZW5zb3IgbWV0YWw6OmFycmF5XG4iOworKyNlbHNlCisrICAgICAg
ICB0ZW5zb3IoKTsKKysjZW5kaWYKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgYm9vbCBl
bWl0R3VhcmQoTGluZVRhZyBsaW5lVGFnKQorKyAgICB7CisrICAgICAgICBpZiAobUVtaXR0ZWQu
ZmluZChsaW5lVGFnKSAhPSBtRW1pdHRlZC5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBtRW1pdHRlZC5pbnNlcnQobGlu
ZVRhZyk7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBzdGF0aWMgRnVu
Y1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKysKKysgICAgdm9pZCB2aXNpdE9wZXJh
dG9yKFRPcGVyYXRvciBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqZnVuYywKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCwK
KysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIp
OworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpOworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgVFZhcmlhYmxlICZ2YXIpOwor
KyAgICB2b2lkIHZpc2l0U3RydWN0dXJlKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpOworKworKyAgICBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKSBvdmVycmlkZTsKKysg
ICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92ZXJyaWRlOwor
KyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBv
dmVycmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wgKm5vZGUpIG92ZXJyaWRlOworKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCBBTFdBWVNfSU5M
SU5FKCk7CisrCisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9hdG9taWMoKTsKKysgICAgdm9pZCBp
bmNsdWRlX21ldGFsX2NvbW1vbigpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmlj
KCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICB2b2lkIGluY2x1
ZGVfbWV0YWxfbWF0aCgpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisrICAg
IHZvaWQgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9yZWxh
dGlvbmFsKCk7CisrCisrICAgIHZvaWQgZW5hYmxlX2lmKCk7CisrICAgIHZvaWQgc2NhbGFyX29m
KCk7CisrICAgIHZvaWQgaXNfc2NhbGFyKCk7CisrICAgIHZvaWQgaXNfdmVjdG9yKCk7CisrICAg
IHZvaWQgaXNfbWF0cml4KCk7CisrICAgIHZvaWQgYWRkcmVzc29mKCk7CisrICAgIHZvaWQgZGlz
dGFuY2UoKTsKKysgICAgdm9pZCBsZW5ndGgoKTsKKysgICAgdm9pZCBkb3QoKTsKKysgICAgdm9p
ZCBub3JtYWxpemUoKTsKKysgICAgdm9pZCBmYWNlZm9yd2FyZCgpOworKyAgICB2b2lkIHJlZmxl
Y3QoKTsKKysgICAgdm9pZCByZWZyYWN0KCk7CisrICAgIHZvaWQgZGVncmVlcygpOworKyAgICB2
b2lkIHJhZGlhbnMoKTsKKysgICAgdm9pZCBtb2QoKTsKKysgICAgdm9pZCBwb3N0SW5jcmVtZW50
TWF0cml4KCk7CisrICAgIHZvaWQgcHJlSW5jcmVtZW50TWF0cml4KCk7CisrICAgIHZvaWQgcG9z
dERlY3JlbWVudE1hdHJpeCgpOworKyAgICB2b2lkIHByZURlY3JlbWVudE1hdHJpeCgpOworKyAg
ICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworKyAgICB2b2lkIG1hdG11bEFzc2lnbigpOworKyAgICB2
b2lkIGF0YW4oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9p
ZCBzdWJNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXIoKTsK
KysgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXIo
KTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJGYXN0KCk7CisrICAgIHZvaWQgZGl2TWF0cml4
U2NhbGFyQXNzaWduKCk7CisrICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduRmFzdCgpOwor
KyAgICB2b2lkIHRlbnNvcigpOworKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUoKTsKKysg
ICAgdm9pZCBjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduKCk7CisrICAgIHZvaWQgY29tcG9uZW50
V2lzZU11bHRpcGx5KCk7CisrICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisrICAgIHZvaWQgaW52
ZXJzZTIoKTsKKysgICAgdm9pZCBpbnZlcnNlMygpOworKyAgICB2b2lkIGludmVyc2U0KCk7Cisr
ICAgIHZvaWQgZXF1YWxWZWN0b3IoKTsKKysgICAgdm9pZCBlcXVhbE1hdHJpeCgpOworKyAgICB2
b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgIHZvaWQgbm90RXF1YWxTdHJ1Y3QoKTsKKysgICAg
dm9pZCBlcXVhbEFycmF5KCk7CisrICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworKyAgICB2b2lk
IHNpZ24oKTsKKysgICAgdm9pZCBwYWNrX2hhbGZfMngxNigpOworKyAgICB2b2lkIHVucGFja19o
YWxmXzJ4MTYoKTsKKysgICAgdm9pZCB2ZWN0b3JFbGVtUmVmKCk7CisrICAgIHZvaWQgc3dpenps
ZVJlZigpOworKyAgICB2b2lkIG91dCgpOworKyAgICB2b2lkIGlub3V0KCk7CisrICAgIHZvaWQg
ZmxhdHRlbkFycmF5KCk7CisrICAgIHZvaWQgY2FzdFZlY3RvcigpOworKyAgICB2b2lkIGNhc3RN
YXRyaXgoKTsKKysgICAgdm9pZCBmdW5jdGlvbkNvbnN0YW50cygpOworKyAgICB2b2lkIGdyYWRp
ZW50KCk7CisrICAgIHZvaWQgdGV4dHVyZUVudigpOworKyAgICB2b2lkIHRleGVsRmV0Y2goKTsK
KysgICAgdm9pZCB0ZXhlbEZldGNoT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZSgpOworKyAg
ICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlX2dlbmVy
aWNfZmxvYXQyX2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZV9nZW5lcmljX2Zsb2F0MygpOwor
KyAgICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19m
bG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2
b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0
NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9p
ZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4
dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZTFETG9kKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZTFEUHJvaigpOworKyAgICB2b2lkIHRleHR1cmUxRFByb2pMb2QoKTsK
KysgICAgdm9pZCB0ZXh0dXJlMkQoKTsKKysgICAgdm9pZCB0ZXh0dXJlMkRMb2QoKTsKKysgICAg
dm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisrICAgIHZvaWQgdGV4dHVyZTJEUHJvakxvZCgpOworKyAg
ICB2b2lkIHRleHR1cmUzRExvZCgpOworKyAgICB2b2lkIHRleHR1cmUzRFByb2ooKTsKKysgICAg
dm9pZCB0ZXh0dXJlM0RQcm9qTG9kKCk7CisrICAgIHZvaWQgdGV4dHVyZUN1YmUoKTsKKysgICAg
dm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworKyAgICB2b2lkIHRleHR1cmVDdWJlUHJvaigpOworKyAg
ICB2b2lkIHRleHR1cmVDdWJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVHcmFkKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworKyAg
ICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKysgICAg
dm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisrICAgIHZv
aWQgdGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lk
IHRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
IHZvaWQgdGV4dHVyZUdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9n
ZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKysgICAgdm9pZCB0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3Vi
ZV9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZz
ZXRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICB2b2lkIHRl
eHR1cmVMb2QoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisrICAg
IHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2Rf
ZGVwdGgyZF9mbG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zs
b2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUxvZE9mZnNldCgpOworKyAgICB2b2lkIHRleHR1cmVPZmZzZXQoKTsK
KysgICAgdm9pZCB0ZXh0dXJlUHJvaigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIo
KTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0
MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19m
bG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKysgICAgdm9pZCB0ZXh0
dXJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakxvZF9kZXB0aDJkX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9k
X3RleHR1cmUzZF9mbG9hdDQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZE9mZnNldCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZVNpemUoKTsK
KysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgJm1PdXQ7CisrICAgIHN0ZDo6dW5v
cmRlcmVkX3NldDxMaW5lVGFnPiBtRW1pdHRlZDsKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNv
bnN0IFRTeW1ib2wgKj4gbUhhbmRsZWQ7CisrICAgIGNvbnN0IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNU
b0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKyt9OworKworK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNkZWZpbmUgUFJP
R1JBTV9QUkVMVURFX0lOQ0xVREUoaGVhZGVyKSAgICAgICAgICAgICBcCisrICAgIHZvaWQgUHJv
Z3JhbVByZWx1ZGU6OmluY2x1ZGVfIyNoZWFkZXIoKSAgICAgICAgIFwKKysgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVt
aXRHdWFyZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBtT3V0
IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorKyAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKysjZGVmaW5l
IFBST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5hbWUsIGNvZGUsIC4uLikgICAgICAgICAgICAgICAg
XAorKyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjpuYW1lKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEFTU0VSVChjb2RlWzBdID09ICdcbicp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVtaXRHdWFy
ZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgLyogZGVwZW5kZW5jaWVzICovICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgIG1PdXQgPDwgKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIg
Kj4oY29kZSAiXG4iKSArIDEpOyBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfYXRvbWljKQor
K1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKKytQUk9HUkFNX1BSRUxVREVf
SU5DTFVERShtZXRhbF9nZW9tZXRyaWMpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxf
Z3JhcGhpY3MpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKKytQUk9HUkFN
X1BSRUxVREVfSU5DTFVERShtZXRhbF9tYXRyaXgpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUo
bWV0YWxfcGFjaykKKytQUk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQor
KworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
QUxXQVlTX0lOTElORSwgUiIoCisrI2RlZmluZSBBTkdMRV9BTFdBWVNfSU5MSU5FIF9fYXR0cmli
dXRlX18oKGFsd2F5c19pbmxpbmUpKQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGVuYWJsZV9pZiwgUiIoCisrdGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cisr
c3RydWN0IEFOR0xFX2VuYWJsZV9pZiB7fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1
Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+CisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9
OworK3RlbXBsYXRlIDxib29sIEI+CisrdXNpbmcgQU5HTEVfZW5hYmxlX2lmX3QgPSB0eXBlbmFt
ZSBBTkdMRV9lbmFibGVfaWY8Qj46OnR5cGU7CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoc2NhbGFyX29mLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5H
TEVfc2NhbGFyX29mCisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9OworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUgQU5HTEVfc2Nh
bGFyX29mPFQ+Ojp0eXBlOworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3Nj
YWxhciwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2lzX3NjYWxh
ciB7fTsKKysjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisrICAgIHRlbXBs
YXRlIDw+IHN0cnVjdCBBTkdMRV9pc19zY2FsYXI8c2NhbGFyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfQorK0FOR0xFX0RFRklORV9TQ0FMQVIoYm9vbCk7CisrQU5HTEVfREVGSU5FX1NDQUxB
UihjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKGludCk7CisrQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKHVjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVzaG9ydCk7CisrQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVsb25nKTsKKytBTkdMRV9ERUZJ
TkVfU0NBTEFSKGhhbGYpOworK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKykiKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9y
CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9OworK307CisrI2RlZmluZSBBTkdMRV9E
RUZJTkVfVkVDVE9SKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
dmVjdG9yPG1ldGFsOjpzY2FsYXIgIyMgMj4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwK
KysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMj
IDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBBTkdMRV9pc192ZWN0b3I8bWV0YWw6OnNjYWxhciAjIyA0PiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgMj4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9v
ZjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RF
RklORV9WRUNUT1IoYm9vbCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKKytBTkdMRV9E
RUZJTkVfVkVDVE9SKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGludCk7CisrQU5HTEVf
REVGSU5FX1ZFQ1RPUihsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKHVjaGFyKTsKKytBTkdM
RV9ERUZJTkVfVkVDVE9SKHVzaG9ydCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKKytB
TkdMRV9ERUZJTkVfVkVDVE9SKHVsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGhhbGYpOwor
K0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOworKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjYWxhcl9vZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX21hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9Owor
K307CisrI2RlZmluZSBBTkdMRV9ERUZJTkVfTUFUUklYKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
bWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMng0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0geyB2YWx1
ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4
PG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3g0
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFs
OjpzY2FsYXIgIyMgNHgzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHg0PiB7IGVu
dW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFy
ICMjIDJ4Mz4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDQ+IHsgdXNpbmcgdHlwZSA9
IHNjYWxhcjsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1l
dGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDN4Mz4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDR4Mz4geyB1c2luZyB0eXBlID0g
c2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0
YWw6OnNjYWxhciAjIyA0eDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RFRklO
RV9NQVRSSVgoaGFsZik7CisrQU5HTEVfREVGSU5FX01BVFJJWChmbG9hdCk7CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoYWRkcmVzc29mLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIFQgKiBBTkdMRV9hZGRy
ZXNzb2YodGhyZWFkIFQgJnJlZikKKyt7CisrICAgIHJldHVybiAmcmVmOworK30KKyspIikKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K
KytzdHJ1Y3QgQU5HTEVfZGlzdGFuY2VfaW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZ
U19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgsIFQgeSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0YW5jZSh4LCB5KTsKKysgICAgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2ltcGw8VCwgQU5HTEVfZW5h
YmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBtZXRhbDo6YWJzKHggLSB5KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kaXN0YW5j
ZShUIHgsIFQgeSkKKyt7CisrICAgIHJldHVybiBBTkdMRV9kaXN0YW5jZV9pbXBsPFQ+OjpleGVj
KHgsIHkpOworK307CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRh
bF9nZW9tZXRyaWMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21h
dGgoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc192
ZWN0b3IoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0
IEFOR0xFX2xlbmd0aF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBleGVjKFQgeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1l
dGFsOjpsZW5ndGgoeCk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0
cnVjdCBBTkdMRV9sZW5ndGhfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2Fs
YXI8VD46OnZhbHVlPj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhl
YyhUIHgpCisrICAgIHsKKysgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworKyAgICB9Cisr
fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3Nj
YWxhcl9vZl90PFQ+IEFOR0xFX2xlbmd0aChUIHgpCisreworKyAgICByZXR1cm4gQU5HTEVfbGVu
Z3RoX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJp
eCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRvdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9p
ZD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGwKKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBtZXRhbDo6ZG90KHgsIHkpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB4ICogeTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kb3QoVCB4LCBUIHkpCisreworKyAgICByZXR1cm4g
QU5HTEVfZG90X2ltcGw8VD46OmV4ZWMoeCwgeSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vcm1h
bGl6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGwK
Kyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBtZXRhbDo6bm9ybWFsaXplKHgpOworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVf
ZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMg
QU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
QU5HTEVfc2lnbih4KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX25vcm1hbGl6ZShUIHgpCisreworKyAgICByZXR1cm4g
QU5HTEVfbm9ybWFsaXplX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgc2lnbigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZhY2Vmb3J3YXJkLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lk
PgorK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVf
QUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgeworKyAgICAgICAg
cmV0dXJuIG1ldGFsOjpmYWNlZm9yd2FyZChuLCBpLCBucmVmKTsKKysgICAgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VCwgQU5H
TEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDogLW47CisrICAg
IH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9mYWNlZm9yd2FyZChUIG4sIFQgaSwgVCBucmVmKQorK3sKKysgICAgcmV0dXJuIEFOR0xF
X2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7CisrfTsKKyspIiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IGRvdCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJlZmxlY3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJs
ZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3JlZmxlY3RfaW1wbAorK3sKKysgICAgc3RhdGljIEFO
R0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbWV0YWw6OnJlZmxlY3QoaSwgbik7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK3N0cnVjdCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCBpLCBUIG4pCisrICAgIHsKKysgICAgICAgIHJldHVybiBpIC0gVCgyKSAq
IEFOR0xFX2RvdChuLCBpKSAqIG47CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9yZWZsZWN0KFQgaSwgVCBuKQorK3sKKysg
ICAgcmV0dXJuIEFOR0xFX3JlZmxlY3RfaW1wbDxUPjo6ZXhlYyhpLCBuKTsKKyt9OworKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfc2NhbGFyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgZG90KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmcmFjdCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfcmVmcmFjdF9pbXBsCisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4sIEFOR0xFX3NjYWxhcl9vZl90
PFQ+IGV0YSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZyYWN0KGksIG4sIGV0
YSk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdMRV9y
ZWZyYWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1
ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4s
IFQgZXRhKQorKyAgICB7CisrICAgICAgICBhdXRvIGRvdE5JID0gbiAqIGk7CisrICAgICAgICBh
dXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKysgICAg
ICAgIGlmIChrIDwgVCgwKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gVCgwKTsK
KysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZXRhICogaSAtIChldGEgKiBkb3ROSSArIG1ldGFsOjpzcXJ0KGspKSAqIG47CisrICAgICAg
ICB9CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEp
CisreworKyAgICByZXR1cm4gQU5HTEVfcmVmcmFjdF9pbXBsPFQ+OjpleGVjKGksIG4sIGV0YSk7
CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3Rvcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHNpZ24sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3Np
Z25faW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpzaWduKHgpOworKyAgICB9CisrfTsKKyt0
ZW1wbGF0ZSA8PgorK3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8aW50PgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0FMV0FZU19JTkxJTkUgaW50IGV4ZWMoaW50IHgpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBOPgor
K3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8bWV0YWw6OnZlYzxpbnQsIE4+PgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+IGV4ZWMobWV0YWw6OnZl
YzxpbnQsIE4+IHgpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjp2ZWM8aW50LCBOPiBzOworKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgc1tpXSA9IEFOR0xFX3NpZ25faW1wbDxpbnQ+OjpleGVjKHhbaV0pOworKyAgICAgICAgfQor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9zaWduKFQgeCkKKyt7CisrICAgIHJldHVybiBB
TkdMRV9zaWduX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGF0YW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCisrewor
KyAgICByZXR1cm4gbWV0YWw6OmF0YW4oeU92ZXJYKTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5LCBUIHgpCisreworKyAg
ICByZXR1cm4gbWV0YWw6OmF0YW4yKHksIHgpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RShkZWdyZWVzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfZGVncmVlcyhUIHgpCisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
NTcuMjk1Nzc5NTEzMDgyMzIpICogeDsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUocmFkaWFucywgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX3JhZGlhbnMoVCB4KQorK3sKKysgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUtMikgKiB4OworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShtb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CisrQU5HTEVfQUxXQVlTX0lOTElORSBYIEFOR0xF
X21vZChYIHgsIFkgeSkKKyt7CisrICAgIHJldHVybiB4IC0geSAqIG1ldGFsOjpmbG9vcih4IC8g
eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0
aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBhY2tfaGFsZl8yeDE2LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19JTkxJTkUgdWludCBBTkdMRV9w
YWNrX2hhbGZfMngxNihmbG9hdDIgdikKKyt7CisrICAgIHJldHVybiBhc190eXBlPHVpbnQ+KGhh
bGYyKHYpKTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh1bnBhY2tf
aGFsZl8yeDE2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19J
TkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorK3sKKysgICAgcmV0
dXJuIGZsb2F0Mihhc190eXBlPGhhbGYyPih4KSk7CisrfQorKykiLCApCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBO
PiAmb3BlcmF0b3IqPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBOLCBOPiBiKQorK3sKKysgICAgYSA9IGEgKiBiOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZhLCBpbnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhICs9IFQoMSk7CisrICAgIHJl
dHVybiBiOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRy
aXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBDb2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZhKQorK3sKKysgICAgYSArPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdERlY3JlbWVudE1hdHJpeCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBS
b3dzPiBvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBp
bnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhIC09IFQoMSk7CisrICAgIHJldHVybiBi
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXJBc3Np
Z24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVEZWNyZW1lbnRNYXRyaXgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBD
b2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZhKQorK3sKKysgICAgYSAtPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmVnYXRlTWF0cml4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9y
LShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0pCisreworKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAgdGhyZWFkIGF1dG8g
Jm1Db2wgPSBtW2NvbF07CisrICAgICAgICBtQ29sID0gLW1Db2w7CisrICAgIH0KKysgICAgcmV0
dXJuIG07CisrfQorKykiLCApCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4
U2NhbGFyQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywg
Um93cz4gJm9wZXJhdG9yKz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0s
IFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQor
KyAgICB7CisrICAgICAgICBtW2NvbF0gKz0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKKyt7
CisrICAgIG0gKz0geDsKKysgICAgcmV0dXJuIG07CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHN1Yk1hdHJpeFNjYWxhckFzc2lnbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9y
LT0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAg
ICBtW2NvbF0gLT0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQorK3sKKysgICAgbSAtPSB4
OworKyAgICByZXR1cm4gbTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
TWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0
cml4U2NhbGFyQXNzaWduRmFzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFk
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIHggPSBUKDEp
IC8geDsKKysgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisrICAg
IHsKKysgICAgICAgIG1bY29sXSAqPSB4OworKyAgICB9CisrICAgIHJldHVybiBtOworK30KKysp
IiwgKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNjYWxhckFzc2lnbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRy
aXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29s
cywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENv
bHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBtW2NvbF0gLz0geDsKKysgICAgfQorKyAgICBy
ZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRy
aXhTY2FsYXJGYXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNpZiBfX01FVEFM
X1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBv
cGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCisreworKyAgICBt
IC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ25GYXN0KCkpCisrCisrUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBU
IHgpCisreworKyAgICBtIC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlLCBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCisreworKyAgICBm
b3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAg
YVtjb2xdIC89IGJbY29sXTsKKysgICAgfQorKyAgICByZXR1cm4gYTsKKyt9CisrKSIpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwg
Q29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gJmEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGEgPSBhIC8g
YjsKKysgICAgcmV0dXJuIGE7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudFdpc2VEaXZpZGUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25l
bnRXaXNlTXVsdGlwbHksIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50
IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IEFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBseShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IGEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGZvciAoc2l6ZV90
IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBhW2NvbF0gKj0g
Yltjb2xdOworKyAgICB9CisrICAgIHJldHVybiBhOworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBp
bnQgTSwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIE4sIE0+
IEFOR0xFX291dGVyUHJvZHVjdChtZXRhbDo6dmVjPFQsIE0+IHUsIG1ldGFsOjp2ZWM8VCwgTj4g
dikKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgTiwgTT4gbzsKKysgICAgZm9yIChzaXplX3Qg
biA9IDA7IG4gPCBOOyArK24pCisrICAgIHsKKysgICAgICAgIG9bbl0gPSB1ICogdltuXTsKKysg
ICAgfQorKyAgICByZXR1cm4gbzsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUoaW52ZXJzZTIsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjptYXRyaXg8
VCwgMiwgMj4gbSkKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gYWRqOworKyAgICBh
ZGpbMF1bMF0gPSAgbVsxXVsxXTsKKysgICAgYWRqWzBdWzFdID0gLW1bMF1bMV07CisrICAgIGFk
alsxXVswXSA9IC1tWzFdWzBdOworKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKysgICAgVCBk
ZXQgPSAoYWRqWzBdWzBdICogbVswXVswXSkgKyAoYWRqWzBdWzFdICogbVsxXVswXSk7CisrICAg
IHJldHVybiBhZGogKiAoVCgxKSAvIGRldCk7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gQU5HTEVfaW52ZXJzZShtZXRhbDo6
bWF0cml4PFQsIDMsIDM+IG0pCisreworKyAgICBUIGEgPSBtWzFdWzFdICogbVsyXVsyXSAtIG1b
Ml1bMV0gKiBtWzFdWzJdOworKyAgICBUIGIgPSBtWzFdWzBdICogbVsyXVsyXTsKKysgICAgVCBj
ID0gbVsxXVsyXSAqIG1bMl1bMF07CisrICAgIFQgZCA9IG1bMV1bMF0gKiBtWzJdWzFdOworKyAg
ICBUIGRldCA9IG1bMF1bMF0gKiAoYSkgLQorKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMp
ICsKKysgICAgICAgICAgICBtWzBdWzJdICogKGQgLSBtWzFdWzFdICogbVsyXVswXSk7CisrICAg
IGRldCA9IFQoMSkgLyBkZXQ7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKysg
ICAgbWludlswXVswXSA9IChhKSAqIGRldDsKKysgICAgbWludlswXVsxXSA9IChtWzBdWzJdICog
bVsyXVsxXSAtIG1bMF1bMV0gKiBtWzJdWzJdKSAqIGRldDsKKysgICAgbWludlswXVsyXSA9ICht
WzBdWzFdICogbVsxXVsyXSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsx
XVswXSA9IChjIC0gYikgKiBkZXQ7CisrICAgIG1pbnZbMV1bMV0gPSAobVswXVswXSAqIG1bMl1b
Ml0gLSBtWzBdWzJdICogbVsyXVswXSkgKiBkZXQ7CisrICAgIG1pbnZbMV1bMl0gPSAobVsxXVsw
XSAqIG1bMF1bMl0gLSBtWzBdWzBdICogbVsxXVsyXSkgKiBkZXQ7CisrICAgIG1pbnZbMl1bMF0g
PSAoZCAtIG1bMl1bMF0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsxXSA9IChtWzJd
WzBdICogbVswXVsxXSAtIG1bMF1bMF0gKiBtWzJdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsy
XSA9IChtWzBdWzBdICogbVsxXVsxXSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKysgICAg
cmV0dXJuIG1pbnY7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVy
c2U0LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjptYXRyaXg8VCwgNCwgND4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0cml4PFQsIDQsIDQ+
IG0pCisreworKyAgICBUIEEyMzIzID0gbVsyXVsyXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVsz
XVsyXTsKKysgICAgVCBBMTMyMyA9IG1bMl1bMV0gKiBtWzNdWzNdIC0gbVsyXVszXSAqIG1bM11b
MV07CisrICAgIFQgQTEyMjMgPSBtWzJdWzFdICogbVszXVsyXSAtIG1bMl1bMl0gKiBtWzNdWzFd
OworKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVswXTsK
KysgICAgVCBBMDIyMyA9IG1bMl1bMF0gKiBtWzNdWzJdIC0gbVsyXVsyXSAqIG1bM11bMF07Cisr
ICAgIFQgQTAxMjMgPSBtWzJdWzBdICogbVszXVsxXSAtIG1bMl1bMV0gKiBtWzNdWzBdOworKyAg
ICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVsyXTsKKysgICAg
VCBBMTMxMyA9IG1bMV1bMV0gKiBtWzNdWzNdIC0gbVsxXVszXSAqIG1bM11bMV07CisrICAgIFQg
QTEyMTMgPSBtWzFdWzFdICogbVszXVsyXSAtIG1bMV1bMl0gKiBtWzNdWzFdOworKyAgICBUIEEy
MzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsKKysgICAgVCBBMTMx
MiA9IG1bMV1bMV0gKiBtWzJdWzNdIC0gbVsxXVszXSAqIG1bMl1bMV07CisrICAgIFQgQTEyMTIg
PSBtWzFdWzFdICogbVsyXVsyXSAtIG1bMV1bMl0gKiBtWzJdWzFdOworKyAgICBUIEEwMzEzID0g
bVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKysgICAgVCBBMDIxMyA9IG1b
MV1bMF0gKiBtWzNdWzJdIC0gbVsxXVsyXSAqIG1bM11bMF07CisrICAgIFQgQTAzMTIgPSBtWzFd
WzBdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJdWzBdOworKyAgICBUIEEwMjEyID0gbVsxXVsw
XSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKysgICAgVCBBMDExMyA9IG1bMV1bMF0g
KiBtWzNdWzFdIC0gbVsxXVsxXSAqIG1bM11bMF07CisrICAgIFQgQTAxMTIgPSBtWzFdWzBdICog
bVsyXVsxXSAtIG1bMV1bMV0gKiBtWzJdWzBdOworKyAgICBUIGEgPSBtWzFdWzFdICogQTIzMjMg
LSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisrICAgIFQgYiA9IG1bMV1bMF0g
KiBBMjMyMyAtIG1bMV1bMl0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDIyMzsKKysgICAgVCBjID0g
bVsxXVswXSAqIEExMzIzIC0gbVsxXVsxXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMTIzOworKyAg
ICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAx
MjM7CisrICAgIFQgZGV0ID0gbVswXVswXSAqICggYSApCisrICAgICAgICAgIC0gbVswXVsxXSAq
ICggYiApCisrICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisrICAgICAgICAgIC0gbVswXVsz
XSAqICggZCApOworKyAgICBkZXQgPSBUKDEpIC8gZGV0OworKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworKyAgICBpbVswXVswXSA9IGRldCAqICAgKCBhICk7CisrICAgIGltWzBdWzFd
ID0gZGV0ICogLSAoIG1bMF1bMV0gKiBBMjMyMyAtIG1bMF1bMl0gKiBBMTMyMyArIG1bMF1bM10g
KiBBMTIyMyApOworKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBt
WzBdWzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKysgICAgaW1bMF1bM10gPSBkZXQg
KiAtICggbVswXVsxXSAqIEEyMzEyIC0gbVswXVsyXSAqIEExMzEyICsgbVswXVszXSAqIEExMjEy
ICk7CisrICAgIGltWzFdWzBdID0gZGV0ICogLSAoIGIgKTsKKysgICAgaW1bMV1bMV0gPSBkZXQg
KiAgICggbVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIz
ICk7CisrICAgIGltWzFdWzJdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMjMxMyAtIG1bMF1bMl0g
KiBBMDMxMyArIG1bMF1bM10gKiBBMDIxMyApOworKyAgICBpbVsxXVszXSA9IGRldCAqICAgKCBt
WzBdWzBdICogQTIzMTIgLSBtWzBdWzJdICogQTAzMTIgKyBtWzBdWzNdICogQTAyMTIgKTsKKysg
ICAgaW1bMl1bMF0gPSBkZXQgKiAgICggYyApOworKyAgICBpbVsyXVsxXSA9IGRldCAqIC0gKCBt
WzBdWzBdICogQTEzMjMgLSBtWzBdWzFdICogQTAzMjMgKyBtWzBdWzNdICogQTAxMjMgKTsKKysg
ICAgaW1bMl1bMl0gPSBkZXQgKiAgICggbVswXVswXSAqIEExMzEzIC0gbVswXVsxXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMTEzICk7CisrICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0g
KiBBMTMxMiAtIG1bMF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworKyAgICBpbVsz
XVswXSA9IGRldCAqIC0gKCBkICk7CisrICAgIGltWzNdWzFdID0gZGV0ICogICAoIG1bMF1bMF0g
KiBBMTIyMyAtIG1bMF1bMV0gKiBBMDIyMyArIG1bMF1bMl0gKiBBMDEyMyApOworKyAgICBpbVsz
XVsyXSA9IGRldCAqIC0gKCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBd
WzJdICogQTAxMTMgKTsKKysgICAgaW1bM11bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEExMjEy
IC0gbVswXVsxXSAqIEEwMjEyICsgbVswXVsyXSAqIEEwMTEyICk7CisrICAgIHJldHVybiBpbTsK
Kyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBO
PiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4gdikKKyt7CisrICAgIGZvcihzaXplX3QgaSA9IDA7IGkg
PCBOOyBpKyspCisrICAgICAgICBpZiAodVtpXSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisrICAg
IHJldHVybiB0cnVlOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShub3RF
cXVhbEFycmF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1
YWwobWV0YWw6OmFycmF5PFQsIE4+IHUsIG1ldGFsOjphcnJheTxULCBOPiB2KQorK3sKKysgICAg
cmV0dXJuICFBTkdMRV9lcXVhbCh1LHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbEFycmF5KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxWZWN0
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRhbDo6dmVj
PFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKKyt7CisrICAgIHJldHVybiBtZXRhbDo6YWxs
KHUgPT0gdik7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0
YWxfbWF0aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVxdWFsTWF0cml4LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywg
aW50IFI+CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjptYXRy
aXg8VCwgQywgUj4gYSwgbWV0YWw6Om1hdHJpeDxULCBDLCBSPiBiKQorK3sKKysgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisrICAgIHsKKysgICAgICAgIGlmICghQU5HTEVfZXF1YWwo
YVtjXSwgYltjXSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KG5vdEVxdWFsVmVjdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90
RXF1YWwobWV0YWw6OnZlYzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCisreworKyAgICBy
ZXR1cm4gIUFOR0xFX2VxdWFsKHUsIHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFs
U3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9ub3RFcXVhbFN0cnVjdCh0aHJl
YWQgY29uc3QgVCAmYSwgdGhyZWFkIGNvbnN0IFQgJmIpCisreworKyAgICByZXR1cm4gIUFOR0xF
X2VxdWFsKGEsIGIpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZl
Y3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsTWF0cml4KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJlZiwgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdMRV9WZWN0b3JFbGVtUmVmCisreworKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxULCBOPiAmbVZlYzsKKysgICAgVCBtUmVmOworKyAgICBjb25zdCBpbnQg
bUluZGV4OworKyAgICB+QU5HTEVfVmVjdG9yRWxlbVJlZigpIHsgbVZlY1ttSW5kZXhdID0gbVJl
ZjsgfQorKyAgICBBTkdMRV9WZWN0b3JFbGVtUmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2
ZWMsIGludCBpbmRleCkKKysgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tpbmRleF0pLCBt
SW5kZXgoaW5kZXgpCisrICAgIHt9CisrICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVy
biBtUmVmOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+IEFOR0xFX2VsZW1fcmVmKHRocmVh
ZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkKKyt7CisrICAgIHJldHVybiBBTkdM
RV9WZWN0b3JFbGVtUmVmPFQsIE4+KHZlYywgaW5kZXgpOworK30KKyspIikKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShzd2l6emxlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgVk4sIGludCBTTj4KKytzdHJ1Y3QgQU5HTEVf
U3dpenpsZVJlZgorK3sKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8VCwgVk4+ICZtVmVjOworKyAg
ICBtZXRhbDo6dmVjPFQsIFNOPiBtUmVmOworKyAgICBpbnQgbUluZGljZXNbU05dOworKyAgICB+
QU5HTEVfU3dpenpsZVJlZigpCisrICAgIHsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
U047ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1JbmRpY2Vz
W2ldOworKyAgICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIEFOR0xFX1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhy
ZWFkIGNvbnN0IGludCAqaW5kaWNlcykKKysgICAgICAgIDogbVZlYyh2ZWMpCisrICAgIHsKKysg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjb25zdCBpbnQgaiA9IGluZGljZXNbaV07CisrICAgICAgICAgICAgbUluZGljZXNbaV0g
PSBqOworKyAgICAgICAgICAgIG1SZWZbaV0gPSBtVmVjW2pdOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIG9wZXJhdG9yIHRocmVhZCBtZXRhbDo6dmVjPFQsIFNOPiAmKCkgeyByZXR1cm4gbVJl
ZjsgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQg
bWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTApCisreworKyAgICByZXR1cm4gQU5HTEVfVmVj
dG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBB
TkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGlu
dCBpMSkKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEgfTsKKysgICAgcmV0dXJu
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBpcyk7CisrfQorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX1N3aXp6bGVSZWY8VCwg
TiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50
IGkwLCBpbnQgaTEsIGludCBpMikKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEs
IGkyIH07CisrICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+KHZlYywgaXMpOwor
K30KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6
dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykKKyt7CisrICAg
IGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEsIGkyLCBpMyB9OworKyAgICByZXR1cm4gQU5HTEVf
U3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG91
dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX091dAorK3sKKysg
ICAgVCBtVGVtcDsKKysgICAgdGhyZWFkIFQgJm1EZXN0OworKyAgICB+QU5HTEVfT3V0KCkgeyBt
RGVzdCA9IG1UZW1wOyB9CisrICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKysgICAgICAg
IDogbURlc3QoZGVzdCkKKysgICAge30KKysgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0
dXJuIG1UZW1wOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCisreworKyAgICBy
ZXR1cm4gQU5HTEVfT3V0PFQ+KGRlc3QpOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShpbm91dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xF
X0luT3V0CisreworKyAgICBUIG1UZW1wOworKyAgICB0aHJlYWQgVCAmbURlc3Q7CisrICAgIH5B
TkdMRV9Jbk91dCgpIHsgbURlc3QgPSBtVGVtcDsgfQorKyAgICBBTkdMRV9Jbk91dCh0aHJlYWQg
VCAmZGVzdCkKKysgICAgICAgIDogbVRlbXAoZGVzdCksIG1EZXN0KGRlc3QpCisrICAgIHt9Cisr
ICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVybiBtVGVtcDsgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9Jbk91dDxUPiBBTkdM
RV9pbm91dCh0aHJlYWQgVCAmZGVzdCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihk
ZXN0KTsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZmxhdHRlbkFycmF5
LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBs
CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgVCAqZXhlYyh0aHJl
YWQgVCAmeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ4OworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Cisrc3RydWN0IEFOR0xFX2ZsYXR0ZW5faW1wbDxt
ZXRhbDo6YXJyYXk8VCwgTj4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIGV4ZWModGhyZWFkIG1ldGFsOjphcnJheTxULCBOPiAmYXJyKSAtPiBUCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsKKysgICAg
fQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV9mbGF0dGVuKHRocmVhZCBtZXRhbDo6YXJyYXk8VCwgTj4gJmFycikg
LT4gVAorK3sKKysgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0p
OworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjYXN0VmVjdG9yLCBSIigK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4xLCBpbnQgTjI+Cisrc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdM
RV9jYXN0VmVjdG9yPFQsIE4sIE4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6dmVjPFQsIE4+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gY29uc3QgJnYp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB2OworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAyLCAzPgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRh
bDo6dmVjPFQsIDM+IGNvbnN0ICZ2KQorKyAgICB7CisrICAgICAgICByZXR1cm4gdi54eTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Nhc3RWZWN0
b3I8VCwgMiwgND4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgMj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHYueHk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDMsIDQ+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDM+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8
VCwgND4gY29uc3QgJnYpCisrICAgIHsKKysgICAgICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2
ZWM8VCwgMz4+KHYpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIE4xPiBBTkdMRV9j
YXN0KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4yPiBjb25zdCAmdikKKyt7CisrICAgIHJldHVybiBB
TkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7CisrfQorKykiKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGNhc3RNYXRyaXgsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBS
MiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfY2FzdE1hdHJpeAorK3sK
KysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+
IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisrICAgIHsK
KysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysgICAgICAgIGNvbnN0IGlu
dCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworKyAgICAgICAgY29uc3QgaW50IE1pblIgPSBS
MSA8PSBSMiA/IFIxIDogUjI7CisrICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IE1pbkM7ICsr
YykKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1pblI7ICsr
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBSMjsgciA8IFIxOyAr
K3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtMVtjXVtyXSA9IGMgPT0gciA/
IFQoMSkgOiBUKDApOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZvciAo
aW50IGMgPSBDMjsgYyA8IEMxOyArK2MpCisrICAgICAgICB7CisrICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCBSMTsgKytyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
bTFbY11bcl0gPSBjID09IHIgPyBUKDEpIDogVCgwKTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrICAgICAgICByZXR1cm4gbTE7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCBpbnQgQzEsIGludCBSMSwgaW50IEMyLCBpbnQgUjI+Cisrc3RydWN0IEFOR0xFX2Nhc3RN
YXRyaXg8VCwgQzEsIFIxLCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBS
MSA8PSBSMik+PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25z
dCAmbTIpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysg
ICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBjIDwgQzE7ICsrYykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtMVtjXSA9IEFOR0xFX2Nhc3Q8UjE+KG0yW2NdKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBtMTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBp
bnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjpt
YXRyaXg8VCwgQzEsIFIxPiBBTkdMRV9jYXN0KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBS
Mj4gY29uc3QgJm0pCisreworKyAgICByZXR1cm4gQU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEs
IEMyLCBSMj46OmV4ZWMobSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGVfaWYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmVjdG9yKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90Li4uIERTPgorK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzOworK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBzaXplX3QgRD4KKytzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0czxULCBE
PgorK3sKKysgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKysgICAgdXNpbmcg
aW5uZXJfdHlwZSA9IFQ7CisrICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOwor
K307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBELCBzaXplX3QuLi4gRFM+Cisrc3Ry
dWN0IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRCwgRFMuLi4+CisreworKyAgICBlbnVtIDogc2l6
ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAgICB1c2luZyBpbm5lcl90eXBlID0gdHlwZW5hbWUg
QU5HTEVfdGVuc29yX3RyYWl0czxULCBEUy4uLj46Om91dGVyX3R5cGU7CisrICAgIHVzaW5nIG91
dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworK307CisrdGVtcGxhdGUgPHNpemVfdCBELCB0eXBl
bmFtZSB2YWx1ZV90eXBlXywgdHlwZW5hbWUgaW5uZXJfdHlwZV8+Cisrc3RydWN0IEFOR0xFX3Rl
bnNvcl9pbXBsCisreworKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisrICAgIHVzaW5nIGlubmVyX3R5cGUg
PSBpbm5lcl90eXBlXzsKKysgICAgdXNpbmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07Cisr
ICAgIG91dGVyX3R5cGUgX2RhdGE7CisrICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBvdXRlcl9kaW07IH0KKysgICAgQU5HTEVfQUxXQVlTX0lOTElO
RSBpbm5lcl90eXBlICZvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBfZGF0YVtpXTsgfQor
KyAgICBBTkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgc2l6ZV90Li4uIERTPgorK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9p
bXBsPAorKyAgICBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6b3V0ZXJfZGltLAorKyAg
ICBULAorKyAgICB0eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJf
dHlwZT47CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPGludCBOPgorK3N0cnVjdCBBTkdM
RV9ncmFkaWVudF90cmFpdHM7CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRf
dHJhaXRzPDI+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDJkOyB9OworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwzPiB7IHVzaW5nIHR5cGUgPSBtZXRh
bDo6Z3JhZGllbnQzZDsgfTsKKysKKyt0ZW1wbGF0ZSA8aW50IE4+CisrdXNpbmcgQU5HTEVfZ3Jh
ZGllbnQgPSB0eXBlbmFtZSBBTkdMRV9ncmFkaWVudF90cmFpdHM8Tj46OnR5cGU7CisrKSIpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUVudiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfVGV4dHVy
ZUVudgorK3sKKysgICAgdGhyZWFkIFQgKnRleHR1cmU7CisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciAqc2FtcGxlcjsKKyt9OworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZ1
bmN0aW9uQ29uc3RhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUg
QU5HTEVfU0FNUExFX0NPTVBBUkVfR1JBRElFTlRfSU5ERVggMAorKyNkZWZpbmUgQU5HTEVfU0FN
UExFX0NPTVBBUkVfTE9EX0lOREVYICAgICAgMQorKyNkZWZpbmUgQU5HTEVfUkFTVEVSSVpBVElP
Tl9ESVNDQVJEX0lOREVYICAgMgorKworK2NvbnN0YW50IGJvb2wgQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50IFtbZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfU0FNUExFX0NPTVBBUkVfR1JB
RElFTlRfSU5ERVgpXV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9k
ICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0RfSU5ERVgp
XV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCAgICAgW1tmdW5j
dGlvbl9jb25zdGFudChBTkdMRV9SQVNURVJJWkFUSU9OX0RJU0NBUkRfSU5ERVgpXV07CisrKSIp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4ZWxGZXRjaCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xF
X3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhl
bEZldGNoX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJmNvb3JkLAorKyAgICB1aW50IGxldmVsKQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVs
RmV0Y2hfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwpCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkKSwgbGV2ZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9p
bXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZjb29yZCwKKysgICAgdWludCBsZXZlbCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkpLCB1aW50KGNvb3JkLnop
LCBsZXZlbCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoT2Zmc2V0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChl
bnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9B
UkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmY29vcmQsCisrICAg
IHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorK3sK
KysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9mZnNldCksIGxldmVsKTsK
Kyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVp
bnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Myhjb29yZCArIG9mZnNldCksIGxldmVsKTsKKyt9
CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRf
YXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQs
CisrICAgIHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZC54eSArIG9mZnNldCks
IHVpbnQoY29vcmQueiksIGxldmVsKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5l
cmljX2Zsb2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVfZGVwdGgyZF9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJv
dW5kKGNvb3JkLnopKSwgY29vcmQudyk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRo
MmRhcnJheV9mbG9hdDRfZmxvYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgY29tcGFyZSkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludCht
ZXRhbDo6cm91bmQoY29vcmQudykpLCBjb21wYXJlKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHl6KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zs
b2F0NF9mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9h
cnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJl
MmRhcnJheV9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1w
bCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysg
ICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmJpYXMoYmlhcykp
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
ZmxvYXQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFEUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZTFEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQueSwgbWV0YWw6
OmJpYXMoYmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLngvY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
dGV4dHVyZTFEUHJvakxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5l
IEFOR0xFX3RleHR1cmUxRFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2Rf
aW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmUxRFByb2pMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngv
Y29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlMkQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpi
aWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
digpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUyRExvZCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmUyRExvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZTJETG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6
OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvaihl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7
CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qTG9kLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvakxvZChlbnYsIC4uLikg
QU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBf
X1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTNETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2osCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qKGVudiwgLi4uKSBBTkdM
RV90ZXh0dXJlM0RQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJH
U19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDAp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3Jk
LncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFBy
b2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlM0RQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9q
TG9kX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVDdWJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlTG9k
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1
YmVMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZUxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVDdWJlUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFO
R0xFX3RleHR1cmVDdWJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
Q3ViZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlh
cykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmVQcm9qTG9kLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlUHJvakxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZUdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwK
KysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHkpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQ
ZHgsIGRQZHkpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdy
YWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29v
cmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR5KQorK3sKKysgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFk
aWVudCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRh
bDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC56KSksIGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7CisrICAg
IH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAgIH0KKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFk
IG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIGNvb3JkLncsIG1ldGFsOjpn
cmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eXosIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAg
IH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxv
YXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2Vu
ZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHksCisrICAgIHRocmVhZCBtZXRhbDo6dmVjPGlu
dCwgTj4gY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCwgQU5HTEVfZ3JhZGllbnQ8Tj4oZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50KCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2lt
cGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29u
c3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJk
X2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBk
eSwKKysgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBpZiAo
QU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwg
Y29vcmQueiwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5
KSwgb2Zmc2V0KSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
R3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0
ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGll
bnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSks
IGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikp
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOworKyAg
ICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRz
KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0
X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1
cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisr
ICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3Qg
Jm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
KyNkZWZpbmUgQU5HTEVfdGV4dHVyZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMb2QoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9k
X2RlcHRoMmRfZmxvYXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVMb2QpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IG1ldGFsOjpsZXZlbChsZXZlbCkpID4gY29vcmQueik7CisrICAgIH0KKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWlu
dChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6
dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2RPZmZzZXQoZW52
LCAuLi4pIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2Ft
cGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAg
ICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVs
KSwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwg
b2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
ZmxvYXQgbGV2ZWwsCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBp
ZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UK
KysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpID4gY29vcmQueik7
CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
LAorKyAgICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsLAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
dykpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZU9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1w
bCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisr
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMp
LCBvZmZzZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBvZmZzZXQpOworK30KKysKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxv
YXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKysgICAg
ZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0
ICZvZmZzZXQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MyBj
b25zdCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBvZmZz
ZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQyIGNv
bnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVBy
b2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmJpYXMo
YmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFz
ID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9j
b29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cisr
fQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakdyYWQoZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qR3JhZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQ
cm9qR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQy
ZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3Jh
ZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29v
cmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkg
PiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZVByb2pHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pH
cmFkX3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVy
ZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHksCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
X2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3Jh
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsK
Kyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0
KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0X2Rl
cHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlm
IChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSks
IG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1l
dGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQuei9jb29yZC53KTsK
KysgICAgfQorK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0
YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0
dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQz
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZVByb2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisr
I2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9k
X2RlcHRoMmRfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIGlmIChB
TkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpKTsKKysgICAgfQorKyAgICBl
bHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3Jk
LnovY29vcmQudyk7CisrICAgIH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX3RleHR1
cmUzZF9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxv
ZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pM
b2RPZmZzZXQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxv
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJl
YWQgaW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cisr
fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBs
ZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdM
RV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBj
b29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9Cisr
ICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9m
ZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQg
aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlUHJvak9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigK
KysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
UHJvak9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IGludDIgY29uc3QgJm9mZnNldCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmJpYXMo
YmlhcyksIG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKAorKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMgPSAw
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29y
ZC53LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVTaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJl
LCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIGludCBsZXZlbCkKKyt7CisrICAgIHJldHVybiBpbnQyKHRl
eHR1cmUuZ2V0X3dpZHRoKHVpbnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KHVpbnQobGV2
ZWwpKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1
cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIGludDMo
dGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9kZXB0aCh1aW50KGxldmVsKSkpOworK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNp
emVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICBpbnQgbGV2ZWwpCisreworKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKysvLyBSZXR1cm5lZCBOYW1lIGlzIHZhbGlkIGZvciBhcyBsb25n
IGFzIGBidWZmZXJgIGlzIHN0aWxsIGFsaXZlLgorKy8vIFJldHVybnMgZmFsc2UgaWYgbm8gdGVt
cGxhdGUgYXJncyBleGlzdC4KKysvLyBSZXR1cm5zIGZhbHNlIGlmIGJ1ZmZlciBpcyBub3QgbGFy
Z2UgZW5vdWdoLgorKy8vCisrLy8gRXhhbXBsZToKKysvLyAgImZvbzwxLDI+IiAtLT4gImZvbzw+
IgorK3N0YXRpYyBzdGQ6OnBhaXI8TmFtZSwgYm9vbD4gTWFza1RlbXBsYXRlQXJncyhjb25zdCBO
YW1lICZuYW1lLCBzaXplX3QgYnVmZmVyU2l6ZSwgY2hhciAqYnVmZmVyKQorK3sKKysgICAgY29u
c3QgY2hhciAqYmVnaW4gPSBuYW1lLnJhd05hbWUoKS5kYXRhKCk7CisrICAgIGNvbnN0IGNoYXIg
KmVuZCAgID0gc3RyY2hyKGJlZ2luLCAnPCcpOworKyAgICBpZiAoIWVuZCkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIHt7fSwgZmFsc2V9OworKyAgICB9CisrICAgIHNpemVfdCBuID0gZW5kIC0g
YmVnaW47CisrICAgIGlmIChuICsgMyA+IGJ1ZmZlclNpemUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB7e30sIGZhbHNlfTsKKysgICAgfQorKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47
ICsraSkKKysgICAgeworKyAgICAgICAgYnVmZmVyW2ldID0gYmVnaW5baV07CisrICAgIH0KKysg
ICAgYnVmZmVyW24gKyAwXSA9ICc8JzsKKysgICAgYnVmZmVyW24gKyAxXSA9ICc+JzsKKysgICAg
YnVmZmVyW24gKyAyXSA9ICdcMCc7CisrICAgIHJldHVybiB7TmFtZShidWZmZXIsIG5hbWUuc3lt
Ym9sVHlwZSgpKSwgdHJ1ZX07CisrfQorKworK1Byb2dyYW1QcmVsdWRlOjpGdW5jVG9FbWl0dGVy
IFByb2dyYW1QcmVsdWRlOjpCdWlsZEZ1bmNUb0VtaXR0ZXIoKQorK3sKKysjZGVmaW5lIEVNSVRf
TUVUSE9EKG1ldGhvZCkgXAorKyAgICBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5j
dGlvbiAmKSAtPiB2b2lkIHsgcmV0dXJuIHBwLm1ldGhvZCgpOyB9CisrICAgIEZ1bmNUb0VtaXR0
ZXIgbWFwOworKworKyAgICBhdXRvIHB1dCA9IFsmXShOYW1lIG5hbWUsIEZ1bmNFbWl0dGVyIGVt
aXR0ZXIpIHsKKysgICAgICAgIEZ1bmNFbWl0dGVyICZkZXN0ID0gbWFwW25hbWVdOworKyAgICAg
ICAgQVNTRVJUKCFkZXN0KTsKKysgICAgICAgIGRlc3QgPSBlbWl0dGVyOworKyAgICB9OworKwor
KyAgICBhdXRvIHB1dEFuZ2xlID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmds
ZUludGVybmFsKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysg
ICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpCdWls
dEluKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysgICAgcHV0
QW5nbGUoImFkZHJlc3NvZiIsIEVNSVRfTUVUSE9EKGFkZHJlc3NvZikpOworKyAgICBwdXRBbmds
ZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkpOworKyAgICBwdXRBbmdsZSgiZWxl
bV9yZWYiLCBFTUlUX01FVEhPRCh2ZWN0b3JFbGVtUmVmKSk7CisrICAgIHB1dEFuZ2xlKCJmbGF0
dGVuIiwgRU1JVF9NRVRIT0QoZmxhdHRlbkFycmF5KSk7CisrICAgIHB1dEFuZ2xlKCJpbm91dCIs
IEVNSVRfTUVUSE9EKGlub3V0KSk7CisrICAgIHB1dEFuZ2xlKCJvdXQiLCBFTUlUX01FVEhPRChv
dXQpKTsKKysgICAgcHV0QW5nbGUoInN3aXp6bGVfcmVmIiwgRU1JVF9NRVRIT0Qoc3dpenpsZVJl
ZikpOworKworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoIiwgRU1JVF9NRVRIT0QodGV4ZWxG
ZXRjaCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoT2Zmc2V0IiwgRU1JVF9NRVRIT0Qo
dGV4ZWxGZXRjaE9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10oUHJvZ3Jh
bVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IElt
bXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgx
KS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAg
PSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKysgICAgICAgIGlmICh0ZXh0dXJl
TmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aDJk
X2Zsb2F0M19mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJl
dHVybiBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1
YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBpZiAoYmlhcykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoY3ViZV9m
bG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmRfYXJyYXk8IikpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVf
ZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJh
eV9mbG9hdDNfZmxvYXQoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYg
Y29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0g
VEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDIpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MigpOworKyAgICAgICAgfQor
KyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9h
dCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5l
cmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFETG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFETG9kKSk7
CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQ
cm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMURQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRCIsIEVNSVRfTUVU
SE9EKHRleHR1cmUyRCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlMkRMb2QpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTJEUHJvaiIsIEVN
SVRfTUVUSE9EKHRleHR1cmUyRFByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTNETG9k
IiwgRU1JVF9NRVRIT0QodGV4dHVyZTNETG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUz
RFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmUzRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qTG9kKSk7CisrICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmUpKTsKKysgICAg
cHV0QnVpbHRJbigidGV4dHVyZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkp
OworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlQ3ViZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
Q3ViZVByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVQcm9qTG9kIiwgRU1JVF9N
RVRIT0QodGV4dHVyZUN1YmVQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFBy
b2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVHcmFkIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGgyZF9m
bG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYm
IGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQz
KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7
CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7CisrICAgIH0pOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlR3JhZE9mZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0
aW9uICZmdW5jKSB7CisrICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUg
PQorKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUoKTsKKysgICAgICAgIGNvbnN0IFRUeXBlICZj
b29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKysgICAgICAgIGNv
bnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworKyAgICAg
ICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsK
KysgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMikt
PmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHgu
Z2V0Tm9taW5hbFNpemUoKTsKKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJt
ZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6
ZGVwdGgyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1l
dGFsOjpkZXB0aGN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRh
bDo6dGV4dHVyZWN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSBkUGR4TikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROKCk7CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7
CisrICAgIH0pOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlTG9kIiwgW10oUHJvZ3JhbVByZWx1
ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1
bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAg
ICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29y
ZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMo
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJl
TG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3Rl
eHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAy
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX2dlbmVyaWNf
ZmxvYXQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAg
ICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVy
ZU9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigi
dGV4dHVyZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvaikpOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlv
biAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0K
KysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmY29v
cmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisrICAgICAgICBjb25z
dCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAg
IGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7Cisr
ICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5n
ZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgZFBkeE4gICAgICAgICAgICAgPSBkUGR4Lmdl
dE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0
YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNk
PCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9m
bG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAz
ICYmIGRQZHhOID09IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisrICAgICAgICB9Cisr
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAg
fQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVBy
b2pHcmFkT2Zmc2V0IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4
dHVyZTNkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNf
ZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygp
OworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2QiLCBbXShQcm9ncmFt
UHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1t
dXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5h
bWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7
CisrICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29y
ZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZGVwdGgy
ZF9mbG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gNCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlUHJvakxvZF90ZXh0dXJlM2RfZmxvYXQ0KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
fQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9q
TG9kX2dlbmVyaWNfZmxvYXQzKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysg
ICAgICAgIH0KKysgICAgICAgIFRPRE8oKTsKKysgICAgfSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pMb2RPZmZzZXQpKTsK
KysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
UHJvak9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9E
KHRleHR1cmVTaXplKSk7CisrCisrICAgIHJldHVybiBtYXA7CisrCisrI3VuZGVmIEVNSVRfTUVU
SE9ECisrfQorKworK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0T3BlcmF0b3IoVE9wZXJhdG9y
IG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgKmFyZ1R5cGUxKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJhZGlhbnM6CisrICAgICAgICAgICAgcmFkaWFucygpOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAg
ICAgICAgICAgZGVncmVlcygpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0YW46CisrICAgICAgICAgICAgYXRhbigpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1vZDoKKysgICAgICAgICAgICBtb2Qo
KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZy
YWN0OgorKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXN0YW5jZToKKysgICAgICAgICAgICBkaXN0YW5jZSgp
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0
aDoKKysgICAgICAgICAgICBsZW5ndGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEb3Q6CisrICAgICAgICAgICAgZG90KCk7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorKyAgICAg
ICAgICAgIG5vcm1hbGl6ZSgpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmbGVjdDoK
KysgICAgICAgICAgICByZWZsZWN0KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXNpbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpbmg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29zaDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW5oOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzaW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFiczoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbWE6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZzoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxv
b3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2VpbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmFjdDoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BSb3VuZEV2ZW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZGV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGcmV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlc3FydDoKKysgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoYXJnVHlw
ZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAvLyBFdmVuIGlmIEFyZzAgaXMgYSB2ZWN0b3Igb3IgbWF0cml4LCBpdCBjb3VsZCBhbHNv
IGJlIGFuIGFycmF5LgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFy
Z1R5cGUxLT5pc0FycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBlcXVh
bEFycmF5KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3Ry
dWN0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgp
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLgorKyAgICAg
ICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbEFycmF5KCk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcENyb3NzOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lnbjoKKysg
ICAgICAgICAgICBzaWduKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ2xhbXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1heDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNaXg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTbW9vdGhzdGVwOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxf
Y29tbW9uKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQWxsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJc25hbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2lu
ZjoKKysgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcERGZHk6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRndp
ZHRoOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGV0ZXJtaW5hbnQ6CisrICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9tYXRyaXgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBZGQ6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgYWRkTWF0cml4U2NhbGFyKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFr
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzU2NhbGFyKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2
OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUxLT5pc1Nj
YWxhcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBkaXZNYXRy
aXhTY2FsYXIoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246Cisr
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5pc01hdHJp
eCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZUFzc2lnbigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAg
ICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgb3V0ZXJQcm9kdWN0KCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJz
ZToKKysgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUwLT5nZXRDb2xzKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpbnZl
cnNlMigpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGNh
c2UgMzoKKysgICAgICAgICAgICAgICAgICAgIGludmVyc2UzKCk7CisrICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICAgICAg
ICAgaW52ZXJzZTQoKTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisrICAgICAgICAgICAgbWF0bXVsQXNzaWdu
KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRy
aXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBvc3RJbmNyZW1lbnRNYXRy
aXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZURlY3Jl
bWVudE1hdHJpeCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgICAgIGlm
IChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJl
YWs7CisrCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTmVnYXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbW1hOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcElNb2RBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRM
ZWZ0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRSaWdodDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NU
aGFuOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNz
VGhhbkNvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5F
cXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRo
YW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlTm90OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1h
dHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3Rv
clRpbWVzU2NhbGFyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0
cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzVmVjdG9yOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFJldHVybjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90
RXF1YWxDb21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGly
ZWN0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbG9hdEJpdHNUb0ludDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxv
YXQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE51bGw6CisrICAgICAgICAgICAgLy8gZG8gbm90aGluZwor
KyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6
CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtMngxNjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a1Nub3JtNHg4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtMngxNjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVW5wYWNrU25vcm00eDg6CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0hhbGYyeDE2OgorKyAgICAgICAgICAgIHBhY2tfaGFsZl8yeDE2KCk7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisrICAg
ICAgICAgICAgdW5wYWNrX2hhbGZfMngxNigpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXRmaWVsZFJldmVyc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGaW5kTVNCOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJy
eToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbXVsRXh0ZW5kZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJTaGFyZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1v
cnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXRvbWljTWF4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBdG9taWNYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWlj
RXhjaGFuZ2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRy
YW5zZm9ybToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFycmF5TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb25zdHJ1Y3Q6
CisrICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgorKyAgICAgICAgICAgIEFTU0VSVChm
dW5jKTsKKysgICAgICAgICAgICBpZiAobUhhbmRsZWQuaW5zZXJ0KGZ1bmMpLnNlY29uZCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisr
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gZW5kID0gbUZ1bmNUb0VtaXR0ZXIuZW5kKCk7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciAgICAgID0gbUZ1bmNUb0VtaXR0ZXIuZmluZChuYW1l
KTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorKyAgICAgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclszMl07CisrICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBi
dWZmZXIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2suc2Vjb25kKQorKyAgICAgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1p
dHRlci5maW5kKG1hc2suZmlyc3QpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byAmZW1pdHRlciA9IGl0ZXIt
PnNlY29uZDsKKysgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFZhcmlhYmxlKGNvbnN0IE5h
bWUgJm5hbWUsIGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBOYW1lIHR5
cGVOYW1lKCpzKTsKKysgICAgICAgIGlmICh0eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1
cmVFbnY8IikpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHRleHR1cmVFbnYoKTsKKysgICAg
ICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGlmIChuYW1lID09IGNv
bnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7CisrICAgICAgICB9CisrICAgIH0KKyt9
CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcikKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnZhcikuc2Vjb25kKQorKyAgICB7
CisrICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7CisrICAg
IH0KKyt9CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRTdHJ1Y3R1cmUoY29uc3QgVFN0
cnVjdHVyZSAmcykKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKysg
ICAgeworKyAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogcy5maWVsZHMoKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGUoTmFtZSgqZmllbGQpLCB0eXBlKTsKKysgICAg
ICAgIH0KKysgICAgfQorK30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IFRUeXBlICZs
ZWZ0VHlwZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKysgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVy
YXRvcihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUgPSBub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVyYXRv
cihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmYXJnVHlwZSk7CisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9
IG5vZGUtPmdldENoaWxkQ291bnQoKTsKKysKKysgICAgYXV0byBnZXRBcmdUeXBlID0gW25vZGUs
IGFyZ0NvdW50XShzaXplX3QgaW5kZXgpIC0+IGNvbnN0IFRUeXBlICYgeworKyAgICAgICAgQVNT
RVJUKGluZGV4IDwgYXJnQ291bnQpOworKyAgICAgICAgVEludGVybVR5cGVkICphcmcgPSBub2Rl
LT5nZXRDaGlsZE5vZGUoaW5kZXgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBBU1NFUlQoYXJn
KTsKKysgICAgICAgIHJldHVybiBhcmctPmdldFR5cGUoKTsKKysgICAgfTsKKysKKysgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgc3dpdGNo
IChub2RlLT5nZXRDaGlsZENvdW50KCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMsIG51
bGxwdHIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIDE6
CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUwID0gZ2V0QXJn
VHlwZSgwKTsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMs
ICZhcmdUeXBlMCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNh
c2UgMjoKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTAgPSBn
ZXRBcmdUeXBlKDApOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9IGdldEFy
Z1R5cGUoMSk7CisrICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5j
LCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysK
KysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJn
VHlwZTEgPSBnZXRBcmdUeXBlKDEpOworKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwLCAmYXJnVHlwZTEpOworKyAgICAgICAgfQorKyAgICAg
ICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKKyt7CisrICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2Rl
KTsKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBkZWNsLnN5bWJvbC5nZXRUeXBlKCk7CisrICAg
IGlmICh0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHMpOworKyAg
ICAgICAgdmlzaXRTdHJ1Y3R1cmUoKnMpOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30K
KysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2Rl
KQorK3sKKysgICAgdmlzaXRWYXJpYWJsZShub2RlLT52YXJpYWJsZSgpKTsKKyt9CisrCisrYm9v
bCBzaDo6RW1pdFByb2dyYW1QcmVsdWRlKFRJbnRlcm1CbG9jayAmcm9vdCwgVEluZm9TaW5rQmFz
ZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgUHJvZ3Jh
bVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBwcGMpOworKyAgICByb290LnRyYXZlcnNlKCZw
cm9ncmFtUHJlbHVkZSk7CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFt
UHJlbHVkZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTAwNDEzZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKK0BAIC0wLDAgKzEsMzUgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1BST0dSQU1QUkVMVURFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9QUk9HUkFNUFJFTFVERV9IXworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRf
c2V0PgorKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKytjbGFzcyBUSW5mb1NpbmtCYXNlOworK2NsYXNzIFRJbnRlcm1CbG9jazsKKysK
KytzdHJ1Y3QgUHJvZ3JhbVByZWx1ZGVDb25maWcKKyt7CisrICAgIGJvb2wgaGFzU3RydWN0RXEg
PSBmYWxzZTsKKyt9OworKworKy8vIFRoaXMgZW1pdHMgZml4ZWQgaGVscGVyIE1ldGFsIGNvZGUg
ZGlyZWN0bHkgd2l0aG91dCBhZGRpbmcgY29kZSB0byB0aGUgQVNULiBUaGlzIHdhbGtzIHRoZSBB
U1QgdG8KKysvLyBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCB3aGF0IHByZWx1ZGUgTVNMIGNvZGUg
aXMgbmVlZGVkIGZvciB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgQVNULiBZb3UgY2FuCisrLy8gdGhp
bmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRpb25zIG9mIGEg
aGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorKy8vIE1ldGFsIHByb2dyYW0uCisrQU5H
TEVfTk9fRElTQ0FSRCBib29sIEVtaXRQcm9ncmFtUHJlbHVkZShUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNl
ICZvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
cm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BST0dS
QU1QUkVMVURFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNw
cAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhODE2OTYKKy0tLSAvZGV2
L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwCitAQCAtMCwwICsxLDEzMCBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFj
ZQorK3sKKysKKytjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEludGVyZmFjZUJsb2NrICosIHN0ZDo6bWFwPElt
bXV0YWJsZVN0cmluZywgY29uc3QgVFZhcmlhYmxlICo+PgorKyAgICAgICAgbUxpZnRlZE1hcDsK
KysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gbUluc3RhbmNlTWFwOworKworKyAgcHVibGljOgorKyAgICBSZWR1Y2VyKFRDb21waWxl
ciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7fQor
KworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
JmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0
Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5v
ZGUuZ2V0Q2hpbGROb2RlKDApOworKworKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmdmFyICAgICAgICA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7Cisr
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgID0gdmFyLmdldFR5cGUoKTsK
KysgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlw
ZSgpOworKyAgICAgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJs
b2NrID0gdHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKHN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisrICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJm5hbWVUb1ZhciA9IG1MaWZ0ZWRN
YXBbaW50ZXJmYWNlQmxvY2tdOworKyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gcmVwbGFjZW1lbnRzOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChURmll
bGQgKmZpZWxkIDogaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpKQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5
cGUoKmZpZWxkLT50eXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0
ZWRUeXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0gfHwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBU
UXVhbGlmaWVyOjpFdnFHbG9iYWwpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5
cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
ZmllbGQtPm5hbWUoKSwgJmxpZnRlZFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+c3ltYm9sVHlwZSgpKTsKKysKKysg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lVG9WYXJbZmllbGQtPm5hbWUoKV0gPSBsaWZ0ZWRW
YXI7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjaygK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1EZWNsYXJhdGlvbntuZXcg
VEludGVybVN5bWJvbChsaWZ0ZWRWYXIpfSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUocmVwbGFj
ZW1lbnRzKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRRdWFs
aWZpZXIoKSA9PSBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtKTsKKysKKysgICAgICAgICAgICAgICAg
ICAgIGF1dG8gJnN0cnVjdHVyZSA9CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUU3Ry
dWN0dXJlKCZtU3ltYm9sVGFibGUsIGludGVyZmFjZUJsb2NrLT5uYW1lKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcmZhY2VCbG9jay0+ZmllbGRzKCks
IGludGVyZmFjZUJsb2NrLT5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0
byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgc3Ry
dWN0dXJlKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmluc3RhbmNlVmFyID0KKysgICAg
ICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwg
c3RydWN0dXJlLCBOYW1lKHZhciksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNpemVz
KCkpOworKworKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlTWFwWyZ2YXJdID0gJmluc3Rh
bmNlVmFyOworKworKyAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
c1tdID0geworKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
bmV3IFRJbnRlcm1TeW1ib2woJnN0cnVjdFZhcil9LAorKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZVJlc3VsdDo6TXVsdGkoc3RkOjpiZWdp
bihyZXBsYWNlbWVudHMpLCBzdGQ6OmVuZChyZXBsYWNlbWVudHMpKTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB7ZGVj
bE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZp
c2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOwor
KyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gaXQgPSBtSW5zdGFuY2VNYXAuZmluZCgmdmFy
KTsKKysgICAgICAgICAgICBpZiAoaXQgIT0gbUluc3RhbmNlTWFwLmVuZCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChpdC0+c2Vj
b25kKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppYiA9IHZhci5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKysg
ICAgICAgICAgICBpZiAoaXQgIT0gbUxpZnRlZE1hcC5lbmQoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07
CisrICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0ZWRWYXIpOworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcik7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN5bWJvbE5vZGU7CisrICAgIH0KKyt9OworKworK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K2Jvb2wgc2g6OlJlZHVjZUludGVyZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50
ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBSZWR1Y2VyIHJlZHVjZXIoY29tcGlsZXIpOworKyAg
ICBpZiAoIXJlZHVjZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRpb25zKCZjb21w
aWxlciwgJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VC
bG9ja3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM2OTVjYmEKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaAorQEAgLTAsMCArMSwzNSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVEVUNFSU5URVJGQUNFQkxPQ0tTX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHJld3Jp
dGVzIGludGVyZmFjZSBibG9jayBkZWNsYXJhdGlvbnMgb25seS4KKysvLworKy8vIEFjY2VzcyBv
ZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKysvLyBYWFg6IF4gU3RpbGwgdHJ1ZT8KKysv
LworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0gRm9vIHsgaW50IHg7IH07CisrLy8gQmVjb21l
czoKKysvLyAgdW5pZm9ybSBpbnQgeDsKKysvLworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworKy8vIEJlY29tZXM6CisrLy8gIHN0cnVjdCBGb28geyBpbnQg
eDsgfTsgdW5pZm9ybSBGb28geDsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZWR1Y2VJ
bnRlcmZhY2VCbG9ja3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZl
cmVuY2UuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZWZlcmVuY2UuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRiNWQ4NmMK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaAorQEAgLTAsMCArMSw1MCBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVG
RVJFTkNFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9SRUZFUkVOQ0VfSF8KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gU2ltaWxhciB0
byBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJh
dG9ycy4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBSZWYKKyt7CisrICBwdWJsaWM6
CisrICAgIFJlZihjb25zdCBSZWYgJikgPSBkZWZhdWx0OworKyAgICBSZWYoUmVmICYmKSAgICAg
ID0gZGVmYXVsdDsKKysgICAgUmVmKFQgJnJlZikgOiBtUHRyKCZyZWYpIHt9CisrCisrICAgIFJl
ZiAmb3BlcmF0b3I9KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisrICAgIFJlZiAmb3BlcmF0b3I9
KFJlZiAmJikgPSBkZWZhdWx0OworKworKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZv
dGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKysgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJlZiAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptUHRyICE9ICpvdGhl
ci5tUHRyOyB9CisrICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7
IHJldHVybiAqbVB0ciA8PSAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKysg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PCAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBSZWYgJm90aGVyKSBj
b25zdCB7IHJldHVybiAqbVB0ciA+ICpvdGhlci5tUHRyOyB9CisrCisrICAgIFQgJmdldCgpIHsg
cmV0dXJuICptUHRyOyB9CisrICAgIFQgY29uc3QgJmdldCgpIGNvbnN0IHsgcmV0dXJuICptUHRy
OyB9CisrCisrICAgIG9wZXJhdG9yIFQgJigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJh
dG9yIFQgY29uc3QgJigpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisrCisrICAgIG9wZXJhdG9y
IFQgKigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJhdG9yIFQgY29uc3QgKigpIGNvbnN0
IHsgcmV0dXJuICptUHRyOyB9CisrCisrICBwcml2YXRlOgorKyAgICBUICptUHRyOworK307Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNpbmcgQ1JlZiA9IFJlZjxUIGNvbnN0PjsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRkVSRU5DRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0
aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uYzc3ODE3NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcAor
QEAgLTAsMCArMSw5MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgUmV3cml0ZXIgOiBwdWJs
aWMgVEludGVybVJlYnVpbGQKKyt7CisrICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNvbnN0
IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisrCisrICBwdWJsaWM6CisrICAgIFJl
d3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRy
dWUsIHRydWUpIHt9CisrCisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1EZWNs
YXJlZFZhclN0YWNrLmVtcHR5KCkpOyB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQg
dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAg
ICAgICAgbURlY2xhcmVkVmFyU3RhY2suZW1wbGFjZV9iYWNrKCk7CisrICAgICAgICByZXR1cm4g
bm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJt
U3dpdGNoICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoIW1EZWNsYXJl
ZFZhclN0YWNrLmVtcHR5KCkpOworKyAgICAgICAgY29uc3QgYXV0byB2YXJzID0gc3RkOjptb3Zl
KG1EZWNsYXJlZFZhclN0YWNrLmJhY2soKSk7CisrICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5w
b3BfYmFjaygpOworKyAgICAgICAgaWYgKCF2YXJzLmVtcHR5KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAg
IGZvciAoY29uc3QgVFZhcmlhYmxlICp2YXIgOiB2YXJzKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
dmFyfSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJsb2NrLmFwcGVuZFN0YXRlbWVu
dCgmbm9kZSk7CisrICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworKyAgICAgICAgfQorKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBpZiAoIW1EZWNsYXJlZFZhclN0YWNrLmVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVEludGVybU5vZGUgKnBhcmVudCA9IGdldFBhcmVudE5vZGUoKTsKKysgICAgICAgICAgICBp
ZiAocGFyZW50LT5nZXRBc0Jsb2NrKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJlbnQgPSBnZXRQYXJlbnROb2RlKDEpOworKyAgICAgICAg
ICAgICAgICBpZiAoZ3JhbmRwYXJlbnQgJiYgZ3JhbmRwYXJlbnQtPmdldEFzU3dpdGNoTm9kZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBk
ZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgbURlY2xh
cmVkVmFyU3RhY2suYmFjaygpLnB1c2hfYmFjaygmZGVjbC5zeW1ib2wudmFyaWFibGUoKSk7Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0RXhwcikKKysgICAgICAgICAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvcjo6RU9wQXNzaWduLCAmZGVjbC5zeW1ib2wsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsLmluaXRFeHByKTsKKysgICAgICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAg
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29s
IHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJt
QmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJl
dHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTVhODgyMQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmgKK0BAIC0wLDAgKzEsNTAgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFQ0FTRURFQ0xBUkFUSU9OU19IXworKwor
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEVYQU1QTEUK
KysvLyAgICBzd2l0Y2ggKGV4cHIpCisrLy8gICAgeworKy8vICAgICAgY2FzZSAwOgorKy8vICAg
ICAgICBpbnQgeCA9IDA7CisrLy8gICAgICAgIGJyZWFrOworKy8vICAgICAgY2FzZSAxOgorKy8v
ICAgICAgICBpbnQgeSA9IDA7CisrLy8gICAgICAgIHsKKysvLyAgICAgICAgICBpbnQgeiA9IDA7
CisrLy8gICAgICAgIH0KKysvLyAgICAgICAgYnJlYWs7CisrLy8gICAgfQorKy8vIEJlY29tZXMK
KysvLyAgICB7CisrLy8gICAgICBpbnQgeDsKKysvLyAgICAgIGludCB5OworKy8vICAgICAgc3dp
dGNoIChleHByKQorKy8vICAgICAgeworKy8vICAgICAgICBjYXNlIDA6CisrLy8gICAgICAgICAg
eCA9IDA7CisrLy8gICAgICAgICAgYnJlYWs7CisrLy8gICAgICAgIGNhc2UgMToKKysvLyAgICAg
ICAgICB5ID0gMDsKKysvLyAgICAgICAgICB7CisrLy8gICAgICAgICAgICBpbnQgeiA9IDA7Cisr
Ly8gICAgICAgICAgfQorKy8vICAgICAgICAgIGJyZWFrOworKy8vICAgICAgfQorKy8vICAgIH0K
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gK
KysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNs
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLjRhZDVhMzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
Y3BwCitAQCAtMCwwICsxLDExNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKytuYW1lc3Bh
Y2UKKyt7CisrCisrY2xhc3MgRmluZERlY2xhcmVkR2xvYmFscyA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJp
YWJsZSAqPiBtRGVjbGFyZWRHbG9iYWxzOworKworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzKFRD
b21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNl
KSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFy
YXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtTm9kZSAq
ZGVjbGFyYXRvck5vZGUgPSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworKworKyAgICAgICAgaWYgKFRJbnRl
cm1CaW5hcnkgKmluaXROb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIHN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzeW1ib2xOb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzU3ltYm9s
Tm9kZSgpOworKyAgICAgICAgfQorKworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUpOworKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworKwor
KyAgICAgICAgbURlY2xhcmVkR2xvYmFscy5pbnNlcnQoJnZhcik7CisrCisrICAgICAgICByZXR1
cm4ge2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICAgIFByZVJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKyt9OworKworK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJ
bnRlcm1SZWJ1aWxkCisreworKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZh
cmlhYmxlICo+ICZtRGVjbGFyZWRHbG9iYWxzOworKyAgICBJbnZhcmlhbnRzICZtT3V0SW52YXJp
YW50czsKKysKKysgIHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwK
KysgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAq
PiAmZGVjbGFyZWRHbG9iYWxzLAorKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlh
bnRzKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLAor
KyAgICAgICAgICBtRGVjbGFyZWRHbG9iYWxzKGRlY2xhcmVkR2xvYmFscyksCisrICAgICAgICAg
IG1PdXRJbnZhcmlhbnRzKG91dEludmFyaWFudHMpCisrICAgIHt9CisrCisrICAgIFByZVJlc3Vs
dCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKAorKyAgICAgICAgVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZncURlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBUSW50ZXJtU3ltYm9sICZzeW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9s
KCk7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciAgICAgID0gc3ltYm9sTm9kZS52YXJp
YWJsZSgpOworKworKyAgICAgICAgaWYgKGdxRGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0SW52YXJpYW50cy5pbnNlcnQodmFyKTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmIChtRGVjbGFyZWRHbG9iYWxzLmZpbmQoJnZhcikgPT0gbURlY2xh
cmVkR2xvYmFscy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBU
SW50ZXJtRGVjbGFyYXRpb257JnN5bWJvbE5vZGV9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Q
cmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRz
OjpOZWl0aGVyfTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
KworK2Jvb2wgc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyhUQ29tcGlsZXIgJmNvbXBp
bGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMg
Jm91dEludmFyaWFudHMpCisreworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzIGZkZyhjb21waWxl
cik7CisrICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIFJl
d3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJp
YW50cyk7CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTEzMWJjYQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCitAQCAtMCwwICsxLDQ4IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9S
RVdSSVRFR0xPQkFMUVVBTElGSUVSREVDTFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXwor
KworKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYWNrcyBU
VmFyaWFibGVzIGFuZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KKytj
bGFzcyBJbnZhcmlhbnRzCisreworKyAgcHVibGljOgorKyAgICB2b2lkIGluc2VydChjb25zdCBU
VmFyaWFibGUgJnZhcikgeyBtSW52YXJpYW50cy5pbnNlcnQoJnZhcik7IH0KKysKKysgICAgdm9p
ZCBpbnNlcnQoY29uc3QgVEZpZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxk
KTsgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAor
KyAgICB7CisrICAgICAgICByZXR1cm4gbUludmFyaWFudHMuZmluZCgmdmFyKSAhPSBtSW52YXJp
YW50cy5lbmQoKTsKKysgICAgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRGaWVsZCAm
ZmllbGQpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZm
aWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCB2b2lkICo+IG1JbnZhcmlhbnRzOworK307CisrCisr
Ly8gVGhpcyByZXdyaXRlcyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25zIGFzIFRJ
bnRlcm1EZWNsYXJhdGlvbnMuCisrLy8gYG91dEludmFyaWFudHNgIGlzIHBvcHVsYXRlZCB3aXRo
IHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IGJ5IHN1Y2ggYQor
Ky8vIHRyYW5zZm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJ
bnZhcmlhbnRzKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJ
RVJERUNMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAKK25ldyBmaWxlIG1v
ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDE0ZjQwCistLS0gL2Rldi9udWxsCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcAorQEAgLTAsMCArMSw0MzQgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y2N0eXBlPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxsaW1pdHM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrdXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFQgKiwgY29uc3QgVCAqPjsKKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJm1LZXl3b3JkczsKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgUmVtYXBwaW5nPFRGaWVs
ZD4gbW9kaWZpZWRGaWVsZHM7CisrICAgIFJlbWFwcGluZzxURmllbGRMaXN0PiBtRmllbGRMaXN0
czsKKysgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKysgICAgUmVtYXBwaW5n
PFRJbnRlcmZhY2VCbG9jaz4gbUludGVyZmFjZUJsb2NrczsKKysgICAgUmVtYXBwaW5nPFRTdHJ1
Y3R1cmU+IG1TdHJ1Y3R1cmVzOworKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVz
OworKyAgICBzdGQ6OnN0cmluZyBtTmV3TmFtZUJ1ZmZlcjsKKysKKysgIHByaXZhdGU6CisrICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgICBJbW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVO
ZXdOYW1lKFQgY29uc3QgJm9iamVjdCkKKysgICAgeworKyAgICAgICAgaWYgKG5lZWRzUmVuYW1p
bmcob2JqZWN0LCBmYWxzZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG1JZEdl
bi5jcmVhdGVOZXdOYW1lKE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworKyAgICAgICAgfQorKyAg
ICAgICAgcmV0dXJuIE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7CisrICAgIH0KKysKKysgICAgY29u
c3QgVEZpZWxkICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysg
ICAgICAgIGF1dG8gKnJlbmFtZWQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoY29uc3RfY2Fz
dDxUVHlwZSAqPigmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKmZpZWxkLnR5cGUoKSkpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgbWF5YmVDcmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgp
LCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRGaWVsZExpc3QgKmNyZWF0ZVJlbmFtZWQoY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRMaXN0KQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0g
bmV3IFRGaWVsZExpc3QoKTsKKysgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IGZp
ZWxkTGlzdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZW5hbWVkLT5wdXNoX2JhY2soY29u
c3RfY2FzdDxURmllbGQgKj4oJmdldFJlbmFtZWRPck9yaWdpbmFsKCpmaWVsZCkpKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRG
dW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uKQorKyAgICB7
CisrICAgICAgICBhdXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEZ1bmN0aW9uKCZt
U3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsKKysKKysgICAgICAg
IGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOworKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJh
bShpKTsKKysgICAgICAgICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFtZWRPck9y
aWdpbmFsKHBhcmFtKSk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoZnVuY3Rpb24uaXNE
ZWZpbmVkKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0RGVmaW5lZCgp
OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGZ1bmN0aW9uLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90
eXBlRGVjbGFyYXRpb24oKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChj
b25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICBU
TGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0
ZSgpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZh
Y2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsKKysgICAgICAgIGxheW91dFF1YWxpZmllci5iaW5kaW5n
ICAgICAgICAgID0gaW50ZXJmYWNlQmxvY2suYmxvY2tCaW5kaW5nKCk7CisrCisrICAgICAgICBh
dXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEludGVyZmFjZUJsb2NrKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShpbnRlcmZhY2VCbG9jayksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2su
ZmllbGRzKCkpLCBsYXlvdXRRdWFsaWZpZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24o
KSk7CisrCisrICAgICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICBjb25zdCBU
U3RydWN0dXJlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKysg
ICAgeworKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisrICAgICAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdOYW1lKHN0cnVjdHVyZSksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVs
ZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKworKyAgICAgICAgcmVuYW1lZC0+
c2V0QXRHbG9iYWxTY29wZShzdHJ1Y3R1cmUuYXRHbG9iYWxTY29wZSgpKTsKKysKKysgICAgICAg
IHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRUeXBlICpjcmVhdGVSZW5h
bWVkKGNvbnN0IFRUeXBlICZ0eXBlKQorKyAgICB7CisrICAgICAgICBUVHlwZSAqcmVuYW1lZDsK
KysKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJlbmFtZWQgPSBuZXcgVFR5cGUoJmdl
dFJlbmFtZWRPck9yaWdpbmFsKCpzdHJ1Y3R1cmUpLCB0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkp
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICpp
bnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZW5hbWVkID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JPcmlnaW5hbCgqaW50
ZXJmYWNlQmxvY2spLCB0eXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIENh
bid0IHJlbmFtZSBidWlsdC1pbiB0eXBlcy4KKysgICAgICAgICAgICByZW5hbWVkID0gbnVsbHB0
cjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZW5hbWVkLT5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlTaXplcygp
KTsKKysgICAgICAgIH0KKysgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisrICAgICAgICByZW5hbWVkLT5zZXRJbnZhcmlhbnQodHlwZS5pc0ludmFyaWFudCgp
KTsKKysgICAgICAgIHJlbmFtZWQtPnNldE1lbW9yeVF1YWxpZmllcih0eXBlLmdldE1lbW9yeVF1
YWxpZmllcigpKTsKKysgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdl
dExheW91dFF1YWxpZmllcigpKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9
CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRWYXJpYWJs
ZSgmbVN5bWJvbFRhYmxlLCBtYXliZUNyZWF0ZU5ld05hbWUodmFyaWFibGUpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHZhcmlh
YmxlLmdldFR5cGUoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisrCisrICAg
ICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKysgICAgY29uc3QgVCAqdHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1h
cHBpbmc8VD4gKnJlbWFwcGluZykKKysgICAgeworKyAgICAgICAgaWYgKCFuZWVkc1JlbmFtaW5n
KG9iamVjdCwgdHJ1ZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocmVtYXBwaW5nKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZpbmQoJm9iamVjdCk7CisrICAgICAgICAg
ICAgaWYgKGl0ICE9IHJlbWFwcGluZy0+ZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9Cisr
CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkT2JqZWN0ID0gY3JlYXRlUmVuYW1lZChvYmplY3Qp
OworKworKyAgICAgICAgaWYgKHJlbWFwcGluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAo
KnJlbWFwcGluZylbJm9iamVjdF0gPSByZW5hbWVkT2JqZWN0OworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIHJlbmFtZWRPYmplY3Q7CisrICAgIH0KKysKKysgICAgY29uc3QgVEZpZWxk
ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB0cnlHZXRSZW5hbWVkSW1wbChmaWVsZCwgJm1vZGlmaWVkRmllbGRzKTsKKysgICAgfQor
KworKyAgICBjb25zdCBURmllbGRMaXN0ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkTGlzdCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKysgICAgfQorKworKyAgICBjb25zdCBURnVuY3Rpb24g
KnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoZnVuYywgJm1GdW5jdGlvbnMpOworKyAgICB9CisrCisr
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqdHJ5R2V0UmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwoaW50ZXJmYWNlQmxvY2ssICZtSW50ZXJmYWNlQmxvY2tzKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUU3RydWN0dXJlICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVj
dHVyZSwgJm1TdHJ1Y3R1cmVzKTsKKysgICAgfQorKworKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0
UmVuYW1lZChjb25zdCBUVHlwZSAmdHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdl
dFJlbmFtZWRJbXBsKHR5cGUsIHN0YXRpY19jYXN0PFJlbWFwcGluZzxUVHlwZT4gKj4obnVsbHB0
cikpOworKyAgICB9CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVmFyaWFibGUgJnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwodmFyaWFibGUsICZtVmFyaWFibGVzKTsKKysgICAgfQorKworKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKysgICAgY29uc3QgVCAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoY29uc3Qg
VCAmb2JqZWN0KQorKyAgICB7CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkID0gdHJ5R2V0UmVu
YW1lZChvYmplY3QpOworKyAgICAgICAgaWYgKHJlbmFtZWQpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICpyZW5hbWVkOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgYm9vbCBuZWVk
c1JlbmFtaW5nSW1wbChjb25zdCBUICZvYmplY3QpIGNvbnN0CisrICAgIHsKKysgICAgICAgIGNv
bnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xUeXBlKCk7CisrICAgICAg
ICBzd2l0Y2ggKHN5bWJvbFR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpCdWlsdEluOgorKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbDoKKysgICAgICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpVc2Vy
RGVmaW5lZDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAg
ICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7Cisr
ICAgICAgICBpZiAobUtleXdvcmRzLmZpbmQobmFtZSkgIT0gbUtleXdvcmRzLmVuZCgpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVs
ZCAmZmllbGQsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bmVlZHNSZW5hbWluZ0ltcGwoZmllbGQpIHx8IChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZygq
ZmllbGQudHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5n
KGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIEFTU0VSVChyZWN1cnNpdmUpOworKyAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogZmllbGRMaXN0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChuZWVk
c1JlbmFtaW5nKCpmaWVsZCwgdHJ1ZSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGdW5j
dGlvbiAmZnVuY3Rpb24sIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICBp
ZiAobmVlZHNSZW5hbWluZ0ltcGwoZnVuY3Rpb24pKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAg
ICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
CisrICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdl
dFBhcmFtKGkpOworKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBhcmFtLCB0cnVlKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VC
bG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChpbnRlcmZhY2VCbG9jaykgfHwKKysgICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKysg
ICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmdJbXBsKHN0cnVjdHVyZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
ICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkg
Y29uc3QKKysgICAgeworKyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmcoKnN0cnVjdHVyZSwgcmVjdXJzaXZlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVu
YW1pbmcoKmludGVyZmFjZUJsb2NrLCByZWN1cnNpdmUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysgICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcodmFyaWFibGUuZ2V0VHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
IHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2Vu
LCBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZrZXl3b3JkcykKKysgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRz
KSwgbUlkR2VuKGlkR2VuKQorKyAgICB7fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKG5lZWRzUmVu
YW1pbmcodmFyLCB0cnVlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJnJWYXIgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXIpOworKyAgICAgICAgICAgIHJldHVy
biAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu
IHN5bWJvbE5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJv
dG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgewor
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmln
aW5hbChmdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUoJnJGdW5jKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBmdW5jUHJvdG9Ob2Rl
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0
KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVu
Y0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmZnVuYyAgICAgICAgICAgICAgICAgICA9ICpmdW5jUHJvdG9Ob2RlLmdldEZ1bmN0aW9uKCk7
CisrICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJnJGdW5jID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwo
ZnVuYyk7CisrICAgICAgICAgICAgYXV0byAqckZ1bmNQcm90b05vZGUgICA9IG5ldyBUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5
KCkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworKyAgICB9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmFn
Z3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChhZ2dyZWdhdGVOb2Rl
LmlzQ29uc3RydWN0b3IoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmIChuZWVkc1Jl
bmFtaW5nKHR5cGUsIHRydWUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJUeXBlID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisrICAgICAgICAg
ICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihyVHlwZSwg
YWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAgICAgICBpZiAo
bmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
KysgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVOb2RlLmdldE9wKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
RnVuY3Rpb25JbkFTVDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKHJGdW5jLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRl
Tm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlUmF3RnVuY3Rpb25DYWxsKHJGdW5jLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJGdW5jLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCkpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlJld3JpdGVL
ZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3Ry
aW5nPiAma2V5d29yZHMpCisreworKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRH
ZW4sIGtleXdvcmRzKTsKKysgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOwor
K30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5iMTYyYmM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK0BAIC0w
LDAgKzEsMjcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hf
CisrCisrI2luY2x1ZGUgPHNldD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorKworK25h
bWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHdhbGtzIHRoZSB0cmVlIGFuZCByZW5hbWVzIGFs
bCBuYW1lcyB0aGF0IGNvbmZsaWN0IHdpdGggdGhlIGlucHV0IGBrZXl3b3Jkc2AuCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIFJld3JpdGVLZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRh
YmxlU3RyaW5nPiAma2V5d29yZHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtF
WVdPUkRTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MWMwMzdkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3Mu
Y3BwCitAQCAtMCwwICsxLDIwNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBTbWFsbE11bHRpU2V0CisreworKyAgcHVibGljOgorKyAg
ICBzdHJ1Y3QgRW50cnkKKysgICAgeworKyAgICAgICAgVCBlbGVtOworKyAgICAgICAgc2l6ZV90
IGNvdW50OworKyAgICB9OworKworKyAgICBjb25zdCBFbnRyeSAqZmluZChjb25zdCBUICZ4KSBj
b25zdAorKyAgICB7CisrICAgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgaWYgKHggPT0gZW50cnkuZWxlbSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiAmZW50cnk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgc2l6ZV90IG11
bHRpcGxpY2l0eShjb25zdCBUICZ4KSBjb25zdAorKyAgICB7CisrICAgICAgICBjb25zdCBFbnRy
eSAqZW50cnkgPSBmaW5kKHgpOworKyAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvdW50
IDogMDsKKysgICAgfQorKworKyAgICBjb25zdCBFbnRyeSAmaW5zZXJ0KGNvbnN0IFQgJngpCisr
ICAgIHsKKysgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgpOworKyAgICAgICAg
aWYgKGVudHJ5KQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZW50cnktPmNvdW50OworKyAg
ICAgICAgICAgIHJldHVybiAqZW50cnk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgbUVudHJpZXMucHVzaF9iYWNrKHt4LCAxfSk7CisrICAgICAg
ICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAg
ICB2b2lkIGNsZWFyKCkgeyBtRW50cmllcy5jbGVhcigpOyB9CisrCisrICAgIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisrCisrICAgIHNpemVfdCB1bmlx
dWVTaXplKCkgY29uc3QgeyByZXR1cm4gbUVudHJpZXMuc2l6ZSgpOyB9CisrCisrICBwcml2YXRl
OgorKyAgICBBTkdMRV9JTkxJTkUgRW50cnkgKmZpbmRNdXRhYmxlKGNvbnN0IFQgJngpIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8RW50cnkgKj4oZmluZCh4KSk7IH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dmVjdG9yPEVudHJ5PiBtRW50cmllczsKKyt9OworKworK2NvbnN0IFRWYXJpYWJsZSAq
R2V0VmFyaWFibGUoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBUSW50ZXJtVHlwZWQgKnR5
Tm9kZSA9IG5vZGUuZ2V0QXNUeXBlZCgpOworKyAgICBBU1NFUlQodHlOb2RlKTsKKysgICAgaWYg
KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiAmc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICB9CisrICAgIHJl
dHVybiBudWxscHRyOworK30KKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgICAgU21hbGxNdWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZl
cjsgIC8vIHJldXNhYmxlIGJ1ZmZlcgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrCisr
ICBwdWJsaWM6CisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1WYXJCdWZmZXIu
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9s
RW52ICZzeW1ib2xFbnYpCisrICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxz
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQb3N0UmVz
dWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBv
dmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsKKysK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYyA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmICghZnVuYykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gYWdncmVnYXRlTm9kZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzaXplX3Qg
YXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKysKKysgICAgICAgIGF1dG8gZ2V0UGFyYW1R
dWFsaWZpZXIgPSBbJl0oc2l6ZV90IGkpIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
JnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKysgICAgICAgICAgICBjb25zdCBUVHlw
ZSAmcGFyYW1UeXBlICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBU
UXVhbGlmaWVyIHBhcmFtUXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsKKysgICAgICAg
ICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sRW52LmlzUmVm
ZXJlbmNlKHBhcmFtKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICBicmVh
azsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKysgICAg
ICAgIH07CisrCisrICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKysKKysgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHBhcmFtUXVhbCA9IGdldFBhcmFtUXVhbGlmaWVyKGkp
OworKworKyAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxSW5PdXQ6CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyID0gR2V0VmFyaWFibGUoKmFyZ3NbaV0p
OworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQg
PiAxKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1p
Z2h0QWxpYXMgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBh
cmdDb3VudDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IGJvb2wgaGFzSW5kZXRlcm1pbmF0ZVZhciA9IG1WYXJCdWZmZXIuZmluZChu
dWxscHRyKTsKKysKKysgICAgICAgIGlmICghbWlnaHRBbGlhcykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtaWdodEFsaWFzID0gaGFzSW5kZXRlcm1pbmF0ZVZhciAmJiBtVmFyQnVmZmVyLnVu
aXF1ZVNpemUoKSA+IDE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobWlnaHRBbGlhcykK
KysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFy
ZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7
CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyICAgICAgID0gR2V0VmFyaWFi
bGUoKmFyZyk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0g
Z2V0UGFyYW1RdWFsaWZpZXIoaSk7CisrCisrICAgICAgICAgICAgICAgIGlmIChoYXNJbmRldGVy
bWluYXRlVmFyIHx8IG1WYXJCdWZmZXIubXVsdGlwbGljaXR5KHZhcikgPiAxKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cU91dDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9ICZtU3lt
Ym9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoIm91dCIpLCBhcmctPmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpuZXcgVEludGVybVNlcXVlbmNle2FyZ30pOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lKCJpbm91dCIpLCBhcmctPmdldFR5cGUoKSwgKm5ldyBUSW50
ZXJtU2VxdWVuY2V7YXJnfSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgbVZhckJ1ZmZlci5j
bGVhcigpOworKworKyAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9Owor
KworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpSZXdyaXRlT3V0QXJn
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3lt
Ym9sRW52KQorK3sKKysgICAgUmV3cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7
CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZU91dEFyZ3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4
MmI3NDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCitAQCAtMCwwICsxLDMzIEBACisrLy8K
KysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9SRVdSSVRFT1VUQVJHU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURU9VVEFSR1NfSF8KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gZS5nLjoKKysvLyAgICAvKnZvaWQgZm9vKG91dCBp
bnQgeCwgaW5vdXQgaW50IHkpKi8KKysvLyAgICBmb28oeiwgdyk7CisrLy8gYmVjb21lcworKy8v
ICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKysvLyB1bmxlc3MgYHpgIGFuZCBgd2AgYXJlIGRl
dGVjdGVkIHRvIG5ldmVyIGFsaWFzLgorKy8vIFRoZSB0cmFuc2xhdGVkIGV4YW1wbGUgZWZmZWN0
aXZlbHkgYmVoYXZlcyB0aGUgc2FtZSBhczoKKysvLyAgICBpbnQgXzE7CisrLy8gICAgaW50IF8y
ID0gdzsKKysvLyAgICBmb28oXzEsIF8yKTsKKysvLyAgICB6ID0gXzE7CisrLy8gICAgdyA9IF8y
OworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlT3V0QXJncyhUQ29tcGlsZXIgJmNvbXBp
bGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKyt9ICAv
LyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQ
aXBlbGluZXMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzYzN2Uy
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3BwCitAQCAtMCwwICsxLDkzOCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lTm9PcHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZE1haW4uaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKyt1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJl
ZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OworK3VzaW5nIFZhcmlhYmxlTGlzdCA9IHN0ZDo6dmVj
dG9yPGNvbnN0IFRWYXJpYWJsZSAqPjsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3N0cnVjdCBQaXBlbGluZVN0cnVjdEluZm8KKyt7CisrICAgIFZhcmlhYmxlU2V0IHBpcGVsaW5l
VmFyaWFibGVzOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVj
dDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0
cjsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0
cjsKKysKKysgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKysgICAgeworKyAgICAgICAgaWYgKHBp
cGVsaW5lU3RydWN0LmlzVG90YWxseUVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
QVNTRVJUKHBpcGVsaW5lVmFyaWFibGVzLmVtcHR5KCkpOworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAg
IEFTU0VSVChwaXBlbGluZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworKyAgICAgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVWYXJpYWJsZXMuZW1wdHkoKSk7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrfTsKKysKKytjbGFzcyBHZW5lcmF0ZVBpcGVsaW5l
U3RydWN0IDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNv
bnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysg
ICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFZhcmlhYmxlTGlzdCBtUGlwZWxpbmVW
YXJpYWJsZUxpc3Q7CisrICAgIElkR2VuICZtSWRHZW47CisrICAgIFBpcGVsaW5lU3RydWN0SW5m
byBtSW5mbzsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wgRXhlYyhQaXBlbGluZVN0
cnVjdEluZm8gJm91dCwKKysgICAgICAgICAgICAgICAgICAgICBUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisrICAg
IHsKKysgICAgICAgIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qgc2VsZihjb21waWxlciwgaWRHZW4s
IHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpOworKyAgICAgICAgaWYgKCFzZWxmLmV4
ZWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAg
ICAgfQorKyAgICAgICAgb3V0ID0gc2VsZi5tSW5mbzsKKysgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzKQorKyAgICAgICAg
OiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1QaXBl
bGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAg
ICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgICAgIG1JZEdlbihpZEdlbikK
KysgICAge30KKysKKysgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKysgICAgewor
KyAgICAgICAgaWYgKCFyZWJ1aWxkUm9vdChyb290KSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUluZm8ucGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisrCisrICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZwaXBlbGluZVN0cnVjdCA9IFsmXSgpIC0+IGNvbnN0IFRT
dHJ1Y3R1cmUgJiB7CisrICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KHJvb3QsIHNlcSk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgfSgpOworKworKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyBt
b2RpZmllZE1hY2hpbmVyaWVzOworKyAgICAgICAgY29uc3QgYm9vbCBtb2RpZmllZCA9IFRyeUNy
ZWF0ZU1vZGlmaWVkU3RydWN0KAorKyAgICAgICAgICAgIG1TeW1ib2xFbnYsIG1JZEdlbiwgbVBp
cGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVsaW5lU3RydWN0LAorKyAg
ICAgICAgICAgIG1QaXBlbGluZS5nZXRTdHJ1Y3RUeXBlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6
TW9kaWZpZWQpLCBtb2RpZmllZE1hY2hpbmVyaWVzKTsKKysKKysgICAgICAgIGlmIChtb2RpZmll
ZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lLnR5cGUgIT0gUGlw
ZWxpbmU6OlR5cGU6OlRleHR1cmUpOworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBjb25zdHJ1Y3Rp
b24uCisrCisrICAgICAgICAgICAgYXV0byBnZXRGdW5jdGlvbiA9IFtdKHNoOjpUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVjbCkgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisrICAgICAgICAgICAg
fTsKKysKKysgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGluZXJp
ZXMuc2l6ZSgpOworKyAgICAgICAgICAgIEFTU0VSVChzaXplID4gMCk7CisrICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmbWFjaGluZXJ5ID0gbW9k
aWZpZWRNYWNoaW5lcmllcy5hdChpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVy
eS5tb2RpZmllZFN0cnVjdCk7CisrCisrICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobmV3
IFRJbnRlcm1EZWNsYXJhdGlvbnsKKysgICAgICAgICAgICAgICAgICAgICZDcmVhdGVTdHJ1Y3RU
eXBlVmFyaWFibGUobVN5bWJvbFRhYmxlLCAqbWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0KX0pOwor
KworKyAgICAgICAgICAgICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5j
T3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbWFjaGlu
ZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworKyAgICAgICAgICAgICAgICAgICAgc2VxLnB1
c2hfYmFjayhtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2Rp
ZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1hY2hpbmVyeS5mdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PSBzaXplIC0gMSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgbUluZm8uZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IGdldEZ1bmN0aW9uKG1hY2hp
bmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIG1JbmZv
LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY01vZGlm
aWVkVG9PcmlnaW5hbCk7CisrCisrICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0
cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICAgICAgICAgIG1J
bmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0KKysgICAgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllZCA/IG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5h
bCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJvb3Qu
aW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwgc2VxKTsKKysKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRo
ZXJ9OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVElu
dGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgRGVj
bGFyYXRpb24gZGVjbCAgICAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKworKyAgICAg
ICAgaWYgKG1QaXBlbGluZS51c2VzKHZhcikpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmZpbmQoJnZhcikgPT0gbUluZm8ucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCkpOworKyAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmlu
c2VydCgmdmFyKTsKKysgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNr
KCZ2YXIpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIGRlY2xOb2RlOworKyAgICB9CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3QoVEludGVybUJsb2NrICZyb290LCBUSW50ZXJt
U2VxdWVuY2UgJm91dERlY2xTZXEpCisrICAgIHsKKysgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpu
ZXcgVEZpZWxkTGlzdCgpOworKworKyAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6
IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtSW52YXJpYW50cy5jb250YWlucygqdmFyKSk7CisrICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7
CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUQmFzaWNUeXBlIHNhbXBsZXJUeXBlID0gdmFy
VHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnRleHR1cmVFbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUp
OworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdGV4dHVyZUVudlR5cGUgICAgICAgICA9IG5l
dyBUVHlwZSgmdGV4dHVyZUVudiwgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
clR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnZUeXBlLT5tYWtlQXJyYXlzKHZhclR5cGUuZ2V0QXJyYXlTaXpl
cygpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGZp
ZWxkcy5wdXNoX2JhY2soCisrICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0
dXJlRW52VHlwZSwgdmFyLT5uYW1lKCksIGtOb1NvdXJjZUxvYywgdmFyLT5zeW1ib2xUeXBlKCkp
KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVh
azsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmdHlwZSAgPSBD
bG9uZVR5cGUodmFyLT5nZXRUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqZmll
bGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUoKSwga05vU291cmNlTG9jLCB2YXItPnN5
bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKGZpZWxk
KTsKKysKKysgICAgICAgICAgICAgICAgICAgIGlmIChtSW52YXJpYW50cy5jb250YWlucygqdmFy
KSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSW52
YXJpYW50cy5pbnNlcnQoKmZpZWxkKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IH0KKysKKysgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5lLmdldFN0
cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisrICAgICAgICBhdXRv
ICZzID0gKm5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIHBpcGVsaW5lU3RydWN0TmFtZS5y
YXdOYW1lKCksICZmaWVsZHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lU3RydWN0TmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgb3V0RGVjbFNlcS5w
dXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxl
KG1TeW1ib2xUYWJsZSwgcyl9KTsKKysKKysgICAgICAgIHJldHVybiBzOworKyAgICB9CisrfTsK
KysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5l
U3RydWN0KQorK3sKKysgICAgQVNTRVJUKHBpcGVsaW5lU3RydWN0LmlzVG90YWxseUZ1bGwoKSk7
CisrCisrICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7
CisrCisrICAgIGF1dG8gcG9wdWxhdGVFeHRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKysg
ICAgICAgIEFTU0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworKyAgICAgICAg
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgK
KysgICAgICAgICAgICBzeW1ib2xUYWJsZSwgKnBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorKyAg
ICAgICAgICAgIHBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5p
c1VuaWZvcm0oKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBQaXBlbGluZTo6VmFyaWFudDo6T3JpZ2luYWwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSk7
CisrICAgIH07CisrCisrICAgIGF1dG8gcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2Fs
VmFyID0gWyZdKCkgeworKyAgICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCk7CisrICAgICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9CisrICAgICAg
ICAgICAgJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVj
dC5pbnRlcm5hbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGlu
ZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7Cisr
ICAgIH07CisrCisrICAgIGlmIChwaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0
YW5jZUlkKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9j
YWxWYXIoKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChwaXBlbGluZS5hbHdheXNSZXF1aXJlc0xv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0
ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisrCisrICAgICAgICBpZiAocGlwZWxpbmVTdHJ1Y3Qu
aXNVbmlmb3JtKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxW
YXIuaW50ZXJuYWwgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwb3B1bGF0ZURpc3RpbmN0
SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIGlm
ICghcGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisrICAgIHsKKysgICAgICAgIHBvcHVsYXRl
RGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhcigpOworKyAgICB9CisrCisrICAgIHJldHVybiBw
aXBlbGluZU1haW5Mb2NhbFZhcjsKKyt9CisrCisrY2xhc3MgUGlwZWxpbmVGdW5jdGlvbkVudgor
K3sKKysgIHByaXZhdGU6CisrICAgIFRDb21waWxlciAmbUNvbXBpbGVyOworKyAgICBTeW1ib2xF
bnYgJm1TeW1ib2xFbnY7CisrICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworKyAgICBJ
ZEdlbiAmbUlkR2VuOworKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisrICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVj
dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFy
OworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIGNvbnN0IFRG
dW5jdGlvbiAqPiBtRnVuY01hcDsKKysKKysgIHB1YmxpYzoKKysgICAgUGlwZWxpbmVGdW5jdGlv
bkVudihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5j
dGlvbiAqPiAmcGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxWYXIp
CisrICAgICAgICA6IG1Db21waWxlcihjb21waWxlciksCisrICAgICAgICAgIG1TeW1ib2xFbnYo
c3ltYm9sRW52KSwKKysgICAgICAgICAgbVN5bWJvbFRhYmxlKHN5bWJvbEVudi5zeW1ib2xUYWJs
ZSgpKSwKKysgICAgICAgICAgbUlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgbVBpcGVsaW5lKHBp
cGVsaW5lKSwKKysgICAgICAgICAgbVBpcGVsaW5lRnVuY3Rpb25zKHBpcGVsaW5lRnVuY3Rpb25z
KSwKKysgICAgICAgICAgbVBpcGVsaW5lU3RydWN0KHBpcGVsaW5lU3RydWN0KSwKKysgICAgICAg
ICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorKyAgICB7fQor
KworKyAgICBib29sIGlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAm
ZnVuYykgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1QaXBlbGluZUZ1bmN0aW9ucy5m
aW5kKCZmdW5jKSAhPSBtUGlwZWxpbmVGdW5jdGlvbnMuZW5kKCk7CisrICAgIH0KKysKKysgICAg
Ym9vbCBpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29u
c3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAg
ICAgICAgaWYgKGl0ID09IG1GdW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiAmZnVuYyA9PSBpdC0+
c2Vjb25kOworKyAgICB9CisrCisrICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0VXBkYXRlZEZ1bmN0
aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzT3Jp
Z2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpIHx8IGlzVXBkYXRlZFBpcGVsaW5lRnVuY3Rpb24o
ZnVuYykpOworKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpuZXdGdW5jOworKworKyAgICAg
ICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAgICAgICAgaWYgKGl0ID09IG1G
dW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNNYWlu
ID0gZnVuYy5pc01haW4oKTsKKysKKysgICAgICAgICAgICBpZiAoaXNNYWluICYmIG1QaXBlbGlu
ZS5pc1BpcGVsaW5lT3V0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NF
UlQoZnVuYy5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0
Vm9pZCk7CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZENoYW5n
ZVJldHVyblR5cGUobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVT
dHJ1Y3QuZXh0ZXJuYWwpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChp
c01haW4gJiYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxl
ICo+IHZhcmlhYmxlczsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayhuZXcgVFZhcmlhYmxl
KCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxkLT50eXBlKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJv
bFR5cGUoKSkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMg
PSAmQ2xvbmVGdW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1
bmMsIHZhcmlhYmxlcyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
TWFpbiAmJiBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisrICAgICAgICAgICAgICAgIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
KnJlZmxlY3Rpb24gPQorKyAgICAgICAgICAgICAgICAgICAgKChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0ICopJm1Db21waWxlciktPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKysg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0
LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFN0cnVjdHVyZSAqdGV4dHVyZUVudiA9IGZpZWxkLT50eXBlKCktPmdldFN0
cnVjdCgpOworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVy
ZUVudi0+ZmllbGRzKCkuc2l6ZSgpID09IDIpOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBURmllbGQgKnN1YmZpZWxkIDogdGV4dHVyZUVudi0+ZmllbGRzKCkpCisrICAgICAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0g
bUlkR2VuLmNyZWF0ZU5ld05hbWUoe2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsK
KysgICAgICAgICAgICAgICAgICAgICAgICBUVHlwZSAmdHlwZSAgICAgPSAqbmV3IFRUeXBlKCpz
dWJmaWVsZC0+dHlwZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmll
bGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXplcygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvICp2YXIgPQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmdHlwZSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRPcmlnaW5hbE5hbWUodmFyLT51bmlx
dWVJZCgpLmdldCgpLCBmaWVsZC0+bmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgdmFy
aWFibGVzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgTmFtZSBuYW1lID0gbVBpcGVsaW5lLmdldFN0cnVjdElu
c3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpOworKyAgICAgICAgICAgICAg
ICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRVSW50KSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAg
ICBuZXdGdW5jICAgPSAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShtU3ltYm9sVGFibGUs
IG51bGxwdHIsIGZ1bmMsICp2YXIpOworKyAgICAgICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtB
c1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSk7CisrICAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCA9IHZhcjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS5hbHdh
eXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAqdmFyOworKyAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlOworKworKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluICYmICFtUGlwZWxpbmVN
YWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1TeW1ib2xUYWJsZSwgKm1QaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICB2YXIgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgKKysgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6T3JpZ2luYWwpKTsKKysgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NT
cGFjZSA9IG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNl
KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFj
ZTo6VGhyZWFkOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGJvb2wg
bWFya0FzUmVmZXJlbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgaWYgKGlzTWFpbikKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUu
dHlwZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrQXNSZWZlcmVuY2UgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbVN5bWJvbEVudi5tYXJr
QXNSZWZlcmVuY2UoKnZhciwgYWRkcmVzc1NwYWNlKTsKKysgICAgICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0o
bVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKysgICAgICAgICAgICB9CisrCisr
ICAgICAgICAgICAgbUZ1bmNNYXBbJmZ1bmNdICAgPSBuZXdGdW5jOworKyAgICAgICAgICAgIG1G
dW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBuZXdGdW5jID0gaXQtPnNlY29uZDsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHJldHVybiAqbmV3RnVuYzsKKysgICAgfQorKworKyAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgKmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZSgKKysgICAgICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgeworKyAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsK
KysgICAgICAgIGlmICghaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24oZnVuYykgJiYgIWlzVXBk
YXRlZFBpcGVsaW5lRnVuY3Rpb24oZnVuYykpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1
bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmbmV3RnVuYyk7CisrICAgIH0KKyt9OworKworK2NsYXNzIFVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHBy
aXZhdGU6CisrICAgIGNvbnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIGNvbnN0IFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKysgICAgUGlwZWxpbmVTY29w
ZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFyOworKyAgICBTeW1ib2xFbnYgJm1T
eW1ib2xFbnY7CisrICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKysgICAgY29uc3QgVEZ1
bmN0aW9uICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpt
RnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wg
VGhyZWFkUGlwZWxpbmUoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxW
YXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY09yaWdpbmFsVG9N
b2RpZmllZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsKQorKyAgICB7CisrICAgICAgICBVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9ucyBzZWxmKGNvbXBpbGVyLCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBp
cGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBl
bGluZU1haW5Mb2NhbFZhciwgaWRHZW4sIHN5bWJvbEVudiwgZnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisrICAgICAgICBpZiAoIXNlbGYucmVidWlsZFJvb3Qocm9vdCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIHRydWU7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFVwZGF0ZVBpcGVsaW5lRnVu
Y3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlwZWxpbmVGdW5j
dGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1
Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisr
ICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisrICAgICAg
ICAgIG1QaXBlbGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1QaXBlbGluZVN0cnVjdChwaXBl
bGluZVN0cnVjdCksCisrICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGluZU1h
aW5Mb2NhbFZhciksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAgICAg
ICAgbUVudihjb21waWxlciwKKysgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisrICAgICAgICAg
ICAgICAgaWRHZW4sCisrICAgICAgICAgICAgICAgcGlwZWxpbmUsCisrICAgICAgICAgICAgICAg
cGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1Y3QsCisrICAg
ICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKSwKKysgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisrICAgICAgICAgIG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKGZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisrICAgIHsKKysgICAg
ICAgIEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBU
RnVuY3Rpb24gJnBpcGVsaW5lRnVuYykKKysgICAgeworKyAgICAgICAgaWYgKHBpcGVsaW5lRnVu
Yy5pc01haW4oKSAmJiAobVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xh
cmF0aW9uSW5NYWluKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFtUGlwZWxpbmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAgICAgICAg
ICAgIHJldHVybiAqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworKyAgICAgICAgfQor
KyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZUZ1
bmMuZ2V0UGFyYW1Db3VudCgpID4gMCk7CisrICAgICAgICAgICAgcmV0dXJuICpwaXBlbGluZUZ1
bmMuZ2V0UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgY29uc3QgVFZhcmlh
YmxlICZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVu
YykKKysgICAgeworKyAgICAgICAgQVNTRVJUKG1haW5GdW5jLmlzTWFpbigpKTsKKysgICAgICAg
IGlmIChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICptUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWw7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5j
LmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHJldHVybiAqbWFpbkZ1bmMuZ2V0
UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEFn
Z3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChjYWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkQ2FsbGVkRnVuYyA9ICpj
YWxsTm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmICghbUVudi5pc09yaWdpbmFs
UGlwZWxpbmVGdW5jdGlvbihvbGRDYWxsZWRGdW5jKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsTm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rpb24o
b2xkQ2FsbGVkRnVuYyk7CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvbGRPd25l
ckZ1bmMgPSBnZXRQYXJlbnRGdW5jdGlvbigpOworKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25l
ckZ1bmMpOworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmbmV3T3duZXJGdW5jID0gbUVu
di5nZXRVcGRhdGVkRnVuY3Rpb24oKm9sZE93bmVyRnVuYyk7CisrCisrICAgICAgICAgICAgcmV0
dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgIG5ld0NhbGxlZEZ1bmMsICZDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCgKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTm9kZS5nZXRTZXF1ZW5jZSgpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKysgICAgICAgIH0KKysgICAg
fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1G
dW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAg
ICAgICBtRW52LmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsK
KysgICAgICAgIGlmIChuZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZ1bmNQcm90b05vZGU7CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gKm5ld0Z1bmNQcm90b05vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0Rl
Zk5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChmdW5jRGVmTm9kZS5nZXRGdW5j
dGlvbigpLT5pc01haW4oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRN
YWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gdmlzaXROb25NYWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtTm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Q
cm90b3R5cGUoKTsKKysgICAgICAgIEFTU0VSVCghZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
LT5pc01haW4oKSk7CisrCisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1
bmNQcm90b05vZGUgPQorKyAgICAgICAgICAgIG1FbnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJv
dG90eXBlKGZ1bmNQcm90b05vZGUpOworKyAgICAgICAgaWYgKG5ld0Z1bmNQcm90b05vZGUgPT0g
bnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY0RlZk5vZGU7Cisr
ICAgICAgICB9CisrCisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqbmV3RnVuY1By
b3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysgICAgICAgIEFTU0VSVCghZnVuYy5pc01haW4oKSk7
CisrCisrICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7
CisrCisrICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKG5ld0Z1
bmNQcm90b05vZGUsIGJvZHkpOworKyAgICB9CisrCisrICAgIFRJbnRlcm1Ob2RlICZ2aXNpdE1h
aW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpCisrICAgIHsKKysgICAg
ICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSA9ICpmdW5jRGVmTm9k
ZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgQVNTRVJUKGZ1bmNQcm90b05vZGUu
Z2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpOworKworKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAgICAgICBtRW52LmNyZWF0ZVVwZGF0
ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsKKysgICAgICAgIGlmIChuZXdGdW5j
UHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZ1
bmNEZWZOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5j
ID0gKm5ld0Z1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICBBU1NFUlQoZnVu
Yy5pc01haW4oKSk7CisrCisrICAgICAgICBhdXRvIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwgPSBb
Jl0oVEludGVybUJsb2NrICZib2R5KSB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pbnRlcm5hbCk7CisrICAgICAgICAgICAgaWYgKCFtUGlwZWxpbmUuaXNQaXBl
bGluZU91dCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBUSW50
ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworKyAgICAgICAg
ICAgICAgICBhdXRvICpvID0gbmV3IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgKm1G
dW5jTW9kaWZpZWRUb09yaWdpbmFsLCBuZXcgVEludGVybVNlcXVlbmNle20sIG99KSk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfTsKKysKKysgICAgICAgIGF1dG8gY2FsbE9yaWdpbmFsVG9N
b2RpZmllZCA9IFsmXShUSW50ZXJtQmxvY2sgJmJvZHkpIHsKKysgICAgICAgICAgICBBU1NFUlQo
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKysgICAgICAgICAgICBpZiAobVBpcGVs
aW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChtRnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAgICAgIGF1dG8gKm8g
PSBuZXcgVEludGVybVN5bWJvbChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAg
ICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlw
ZWxpbmVWYXJpYWJsZShmdW5jKSk7CisrICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKysgICAgICAgICAgICAg
ICAgICAgICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgbmV3IFRJbnRlcm1TZXF1ZW5jZXtvLCBt
fSkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH07CisrCisrICAgICAgICBUSW50ZXJtQmxv
Y2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7CisrCisrICAgICAgICBpZiAobVBpcGVs
aW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKworKyAgICAgICAgICAgIGF1dG8gKm5ld0JvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisrICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJt
RGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsfSk7CisrCisrICAgICAg
ICAgICAgaWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGlu
ZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHN0cnVjdCBpbnN0YW5jZSB3aXRoIHJlZmVyZW5jZXMg
dG8gZ2xvYmFsIHBpcGVsaW5lIHZhcmlhYmxlcy4KKysgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdmFyICAgICAgICA9
IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwgZmllbGQtPnR5cGUo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQt
PnN5bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICpzeW1ib2wgICAgID0g
bmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmFjY2Vz
c05vZGUgPSBBY2Nlc3NGaWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsLCB2YXIt
Pm5hbWUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3IFRJ
bnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wpOwor
KyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGFzc2lnbk5vZGUp
OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVs
aW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KGZ1bmMuZ2V0UGFyYW1Db3VudCgpID49IDIgKiBmaWVsZHMuc2l6ZSgpKTsKKysgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworKworKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQg
OiBmaWVsZHMpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmdGV4dHVyZVBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsK
KysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmc2FtcGxlclBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGF1dG8g
Z28gPSBbJl0oVEludGVybVR5cGVkICZlbnYsIGNvbnN0IGludCAqaW5kZXgpIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnRleHR1cmVGaWVsZCA9IEFjY2Vzc0ZpZWxk
KAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5
KCksIGluZGV4KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAmc2FtcGxlckZpZWxkID0gQWNjZXNzRmllbGQoCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5k
ZXgpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSk7CisrCisrICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBta0Fzc2lnbiA9IFsmXShUSW50ZXJtVHlwZWQgJmZpZWxkLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
VEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgJmZpZWxkLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2Fs
bEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZSgiYWRkcmVzc29mIiksIGZpZWxkLmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmQWNjZXNzSW5kZXgoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5
bWJvbCgmcGFyYW0pLCBpbmRleCl9KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysK
KysgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3Np
Z24odGV4dHVyZUZpZWxkLCB0ZXh0dXJlUGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24oc2FtcGxlckZpZWxkLCBzYW1wbGVy
UGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgIH07CisrCisrICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgJmVudiA9IEFjY2Vzc0ZpZWxkKCptUGlwZWxpbmVNYWluTG9jYWxWYXIu
aW50ZXJuYWwsIGZpZWxkLT5uYW1lKCkpOworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJmVudlR5cGUgPSBlbnYuZ2V0VHlwZSgpOworKworKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVudlR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBuID0gc3RhdGljX2Nhc3Q8aW50PihlbnZUeXBl
LmdldEFycmF5U2l6ZVByb2R1Y3QoKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbyhlbnYsICZpKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNl
CisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ28oZW52
LCBudWxscHRyKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQ
aXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAg
ICAgICAgICAgICAgIFRPcGVyYXRvcjo6RU9wQXNzaWduLAorKyAgICAgICAgICAgICAgICAgICAg
JkFjY2Vzc0ZpZWxkQnlJbmRleCgqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVybmFsUGlwZWxp
bmVWYXJpYWJsZShmdW5jKSksIDApLAorKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZShtU3lt
Ym9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmZ2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlh
YmxlKGZ1bmMpKSkpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoIW1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9u
e21QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbH0pOworKyAgICAgICAgICAgICAgICBjYWxs
TW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworKworKyAgICAgICAgICAgIGlm
ICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsVG9Nb2RpZmllZCgqbmV3Qm9keSk7CisrICAgICAg
ICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50
KG5ldyBUSW50ZXJtQnJhbmNoKAorKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BS
ZXR1cm4sIG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCkp
KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYm9keSA9IG5ld0JvZHk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9y
bSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmV4dGVybmFsKTsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysKKysgICAgICAgICAgICBhdXRvICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1C
bG9jaygpOworKyAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVy
bURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworKyAgICAgICAg
ICAgIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwoKm5ld0JvZHkpOworKyAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChib2R5KTsKKysgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01v
ZGlmaWVkKCpuZXdCb2R5KTsKKysgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24obmV3
RnVuY1Byb3RvTm9kZSwgYm9keSk7CisrICAgIH0KKyt9OworKworKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisrCisrYm9vbCBVcGRhdGVQaXBlbGluZVN5bWJvbHMoUGlwZWxpbmU6OlR5cGUgcGlw
ZWxpbmVUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb21waWxlciAmY29tcGls
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhcmlhYmxlU2V0ICZwaXBlbGluZVZhcmlhYmxlcywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+IHBp
cGVsaW5lTWFpbkxvY2FsVmFyKQorK3sKKysgICAgYXV0byBtYXAgPSBbJl0oY29uc3QgVEZ1bmN0
aW9uICpvd25lciwgVEludGVybVN5bWJvbCAmc3ltYm9sKSAtPiBUSW50ZXJtTm9kZSAmIHsKKysg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7CisrICAgICAg
ICBpZiAocGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBwaXBlbGluZVZhcmlhYmxlcy5l
bmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworKyAgICAgICAg
fQorKyAgICAgICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqc3Ry
dWN0SW5zdGFuY2VWYXI7CisrICAgICAgICBpZiAob3duZXItPmlzTWFpbigpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7Cisr
ICAgICAgICAgICAgc3RydWN0SW5zdGFuY2VWYXIgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBBU1NFUlQob3duZXItPmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworKyAgICAgICAgfQorKyAgICAgICAg
QVNTRVJUKHN0cnVjdEluc3RhbmNlVmFyKTsKKysgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgq
c3RydWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworKyAgICB9OworKyAgICByZXR1cm4gTWFw
U3ltYm9scyhjb21waWxlciwgcm9vdCwgbWFwKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytib29sIFJld3JpdGVQaXBlbGluZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUg
JnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAor
KyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdCkKKyt7Cisr
ICAgIEFTU0VSVChvdXRTdHJ1Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisrCisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICBQ
aXBlbGluZVN0cnVjdEluZm8gcHNpOworKyAgICBpZiAoIUdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6
OkV4ZWMocHNpLCBjb21waWxlciwgcm9vdCwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGlu
dmFyaWFudHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgaWYgKHBzaS5pc0VtcHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrCisrICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVu
ZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAg
IHJldHVybiBwc2kucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSAhPSBwc2kucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCk7CisrICAgIH0pOworKworKyAgICBhdXRvIHBpcGVsaW5lTWFpbkxvY2Fs
VmFyID0KKysgICAgICAgIENyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKHN5bWJvbFRhYmxlLCBw
aXBlbGluZSwgcHNpLnBpcGVsaW5lU3RydWN0KTsKKysKKysgICAgaWYgKCFVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6VGhyZWFkUGlwZWxpbmUoCisrICAgICAgICAgICAgY29tcGlsZXIsIHJvb3Qs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcHNpLnBpcGVsaW5lU3RydWN0LCBwaXBlbGlu
ZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBwc2kuZnVuY09y
aWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFwaXBlbGluZS5nbG9i
YWxJbnN0YW5jZVZhcikKKysgICAgeworKyAgICAgICAgaWYgKCFVcGRhdGVQaXBlbGluZVN5bWJv
bHMocGlwZWxpbmUudHlwZSwgY29tcGlsZXIsIHJvb3QsIHN5bWJvbEVudiwgcHNpLnBpcGVsaW5l
VmFyaWFibGVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVN
YWluTG9jYWxWYXIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIVBydW5lTm9PcHMoJmNvbXBpbGVyLCAmcm9v
dCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgb3V0U3RydWN0ID0gcHNpLnBpcGVsaW5lU3RydWN0Owor
KyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKwor
K2Jvb2wgc2g6OlJld3JpdGVQaXBlbGluZXMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmYW5nbGVVbmlmb3Jtc0dsb2JhbEluc3RhbmNlVmFyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGlwZWxpbmVTdHJ1Y3RzICZvdXRTdHJ1Y3RzKQorK3sKKysgICAgc3RydWN0IEluZm8KKysg
ICAgeworKyAgICAgICAgUGlwZWxpbmU6OlR5cGUgcGlwZWxpbmVUeXBlOworKyAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdDsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xvYmFsSW5zdGFuY2VWYXI7CisrICAgIH07CisrCisrICAgIEluZm8gaW5mb3NbXSA9
IHsKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCwgb3V0U3RydWN0cy5pbnN0
YW5jZUlkLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0
U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6Tm9u
Q29uc3RhbnRHbG9iYWxzLCBvdXRTdHJ1Y3RzLm5vbkNvbnN0YW50R2xvYmFscywgbnVsbHB0cn0s
CisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkFuZ2xlVW5pZm9ybXMsIG91dFN0cnVjdHMuYW5n
bGVVbmlmb3JtcywgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhcn0sCisrICAgICAgICB7
UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywgb3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51
bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbiwgb3V0U3RydWN0cy52
ZXJ0ZXhJbiwgbnVsbHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZlcnRleE91dCwg
b3V0U3RydWN0cy52ZXJ0ZXhPdXQsIG51bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51bGxwdHJ9LAorKyAgICAgICAg
e1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudE91dCwgb3V0U3RydWN0cy5mcmFnbWVudE91dCwgbnVs
bHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
LCBvdXRTdHJ1Y3RzLmludm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBudWxscHRyfSwKKysgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywgb3V0U3RydWN0cy5p
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwKKysgICAgfTsKKysKKysgICAgZm9y
IChJbmZvICZpbmZvIDogaW5mb3MpCisrICAgIHsKKysgICAgICAgIFBpcGVsaW5lIHBpcGVsaW5l
e2luZm8ucGlwZWxpbmVUeXBlLCBpbmZvLmdsb2JhbEluc3RhbmNlVmFyfTsKKysgICAgICAgIGlm
ICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxpbmUsIHN5bWJv
bEVudiwgaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ub3V0
U3RydWN0KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVz
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZVBpcGVsaW5lcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzkxYmE4
MgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaAorQEAgLTAsMCArMSw0NSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKworKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBp
bGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gVGhpcyByZXdyaXRlcyBhbGwgcGlwZWxp
bmVzLgorKy8vCisrLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisrLy8gICAgLSBEaXNjb3ZlciBhbGwg
dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisrLy8gICAgLSBNb3ZlIHRo
ZSB2YXJpYWJsZXMgaW50byBhbiBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaW5zdGFuY2UgYW5k
IHVwZGF0ZSBvbGQgdmFyaWFibGVzIHRvIGJlCisrLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisrLy8gICAgLSBEZXBlbmRlbmN5IGluamVjdCB0aGUgaW50ZXJuYWwgcGlwZWxpbmUgc3Ry
dWN0IHRvIGFsbCBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdmFyaWFibGVzIGZyb20KKysvLyAgICAg
IHRoZSBzdHJ1Y3QuCisrLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMg
Y3JlYXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisr
Ly8gICAgICBleHRlcm5hbCBhbmQgaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0cyBhcmUgdGhlIHNh
bWUuCisrLy8gICAgLSBBZGQgYG1haW5gIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUgZm9yIHRo
ZSBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgYXMgbmVlZGVkLgorKy8vICAgIC0gSW5zaWRlIGBt
YWluYCwgbWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0
aGV5IGRpZmZlciBhbmQgaXMgcHJvdmlkZWQKKysvLyAgICAgIGFzIGEgcGFyYW1ldGVyIHRvIGBt
YWluYC4KKysvLyAgICAtIEluc2lkZSBgbWFpbmAsIG1hcCB0aGUgaW50ZXJuYWwgc3RydWN0IHRv
IHRoZSBleHRlcm5hbCBzdHJ1Y3QgaWYgdGhleSBkaWZmZXIgYW5kIGlzIHJldHVybmVkCisrLy8g
ICAgICBmcm9tIGBtYWluYC4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVBpcGVsaW5l
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1i
b2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50
cyAmaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
aXBlbGluZVN0cnVjdHMgJm91dFN0cnVjdHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURVBJUEVMSU5FU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw
MDAwLi5lNzdjMWE1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNw
cAorQEAgLTAsMCArMSwzNzYgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvQXNOb2RlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
bmFtZXNwYWNlCisreworKworK2Jvb2wgSXNPdXRQYXJhbShjb25zdCBUVHlwZSAmcGFyYW1UeXBl
KQorK3sKKysgICAgY29uc3QgVFF1YWxpZmllciBxdWFsID0gcGFyYW1UeXBlLmdldFF1YWxpZmll
cigpOworKyAgICBzd2l0Y2ggKHF1YWwpCisrICAgIHsKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVybUJp
bmFyeSAmYmluYXJ5KQorK3sKKysgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5LmdldE9wKCk7Cisr
ICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorKyAg
ICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlID0gYmluYXJ5
LmdldExlZnQoKS0+Z2V0VHlwZSgpOworKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkgfHwg
bGVmdFR5cGUuaXNBcnJheSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgQVNTRVJUKElzU2NhbGFyQmFzaWNUeXBlKGJpbmFyeS5nZXRUeXBlKCkpKTsK
KysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVy
bU5vZGUgJm5vZGUpCisreworKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5v
ZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIElzVmVjdG9yQWNjZXNzKCpiaW4pOworKyAg
ICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrLy8gRGlmZmVycyBmcm9tIElzQXNzaWdu
bWVudCBpbiB0aGF0IGl0IGRvZXMgbm90IGluY2x1ZGUgKCsrKSBvciAoLS0pLgorK2Jvb2wgSXNB
c3NpZ25FcXVhbHNTaWduKFRPcGVyYXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAg
IHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrLy8gT25seSBpbmNsdWRlcyAoJD0pIHN0
eWxlIGFzc2lnbnMsIHdoZXJlICgkKSBpcyBhIGJpbmFyeSBvcC4KKytib29sIElzQ29tcG91bmRB
c3NpZ24oVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BTdWJBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2ln
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysK
Kytib29sIFJldHVybnNSZWZlcmVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChv
cCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
dkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3Np
Z246CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVE
ZWNyZW1lbnQ6CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3Ao
KTsKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAg
ICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJB
c3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFy
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsK
KysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoK
KysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisrICAg
ICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFz
c2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKysgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2ln
bjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OworKyAgICB9CisrCisrICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisrICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBh
bGxvd3MgdGhpcyBjb2RlIHRvIG5vdCBuZWVkIHRvIGludHJvZHVjZSB0ZW1wb3Jhcmllcy4KKysg
ICAgLy8KKysgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6CisrICAgIC8vICAg
ICAgdmVjW2hhc1NpZGVFZmZlY3QoKV0gKj0gNAorKyAgICAvLyBiZWNvbWluZworKyAgICAvLyAg
ICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0CisrCisr
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKysgICAgVEludGVybVR5
cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKysgICAgcmV0dXJuICpuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbGVmdC0+ZGVlcENvcHkoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShvcCwgbGVmdCwgcmlnaHQpKTsK
Kyt9CisrCisrY2xhc3MgUmV3cml0ZXIxIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
cHVibGljOgorKyAgICBSZXdyaXRlcjEoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVi
dWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpIHt9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRC
aW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysgICAgICAg
IGlmIChJc0NvbXBvdW5kQXNzaWduKG9wKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisrICAgICAgICAgICAgaWYg
KGxlZnQuZ2V0QXNTd2l6emxlTm9kZSgpIHx8IElzVmVjdG9yQWNjZXNzKGxlZnQpKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdu
bWVudChiaW5hcnlOb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gYmluYXJ5Tm9kZTsKKysgICAgfQorK307CisrCisrY2xhc3MgUmV3cml0ZXIyIDogcHVi
bGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNB
ZGRyZXNzaW5nU3RhY2s7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysKKysgIHByaXZh
dGU6CisrICAgIGJvb2wgcmVxdWlyZXNBZGRyZXNzaW5nKCkgY29uc3QKKysgICAgeworKyAgICAg
ICAgaWYgKG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBtUmVx
dWlyZXNBZGRyZXNzaW5nU3RhY2suYmFjaygpOworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAg
IH5SZXdyaXRlcjIoKSBvdmVycmlkZSB7IEFTU0VSVChtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2su
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJv
bEVudiAmc3ltYm9sRW52KQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQcmVSZXN1
bHQgdmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmYWdncmVnYXRlTm9kZSkgb3Zl
cnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRl
Tm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgaWYgKCFmdW5jKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKTsKKysg
ICAgICAgIHNpemVfdCBhcmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworKworKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisrICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAg
ICAgICAgICBUSW50ZXJtTm9kZSAqYXJnICAgICAgID0gYXJnc1tpXTsKKysgICAgICAgICAgICBB
U1NFUlQoYXJnKTsKKysKKysgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKElzT3V0UGFyYW0ocGFyYW1UeXBlKSk7CisrICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGFyZ3NbaV0pOworKyAg
ICAgICAgICAgIEFTU0VSVCghbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOworKyAg
ICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworKyAgICAgICAg
fQorKworKyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dp
enpsZSAmc3dpenpsZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghcmVxdWly
ZXNBZGRyZXNzaW5nKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHN3aXp6bGVO
b2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVybVR5cGVkICZ2ZWNOb2RlICAgICAg
ICAgPSAqc3dpenpsZU5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgY29uc3QgVFF1YWxpZmll
ckxpc3QgJm9mZnNldHMgPSBzd2l6emxlTm9kZS5nZXRTd2l6emxlT2Zmc2V0cygpOworKyAgICAg
ICAgQVNTRVJUKCFvZmZzZXRzLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG9mZnNldHMuc2l6
ZSgpIDw9IDQpOworKworKyAgICAgICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNl
KCk7CisrICAgICAgICBhcmdzLnJlc2VydmUob2Zmc2V0cy5zaXplKCkgKyAxKTsKKysgICAgICAg
IGFyZ3MucHVzaF9iYWNrKCZ2ZWNOb2RlKTsKKysgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9m
ZnNldHMpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXJncy5wdXNoX2JhY2sobmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihvZmZzZXQpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNp
Y1R5cGU6OkVidEludCkpKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBtU3ltYm9s
RW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoInN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2Rl
LmdldFR5cGUoKSwgYXJncyk7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysKKysgICAgICAgIGNv
bnN0IGJvb2wgaXNBY2Nlc3MgPSBJc1ZlY3RvckFjY2VzcyhiaW5hcnlOb2RlKTsKKysKKysgICAg
ICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVuY2Uob3ApIHx8ICFy
ZXF1aXJlc0FkZHJlc3NpbmcoKTsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZUxlZnQgID0g
ZGlzYWJsZVRvcDsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVJpZ2h0ID0gZGlzYWJsZVRv
cCB8fCBpc0FjY2VzcyB8fCBJc0Fzc2lnbkVxdWFsc1NpZ24ob3ApOworKworKyAgICAgICAgYXV0
byB0cmF2ZXJzZSA9IFsmXShUSW50ZXJtVHlwZWQgJm5vZGUsIGNvbnN0IGJvb2wgZGlzYWJsZSkg
LT4gVEludGVybVR5cGVkICYgeworKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFj
ayhmYWxzZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUgPSBh
c05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKysgICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZSk7CisrICAgICAgICAgICAgaWYgKGRpc2FibGUpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworKyAgICAg
ICAgfTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworKyAgICAgICAgVEludGVybVR5cGVkICZyaWdodE5vZGUgPSAqYmluYXJ5Tm9k
ZS5nZXRSaWdodCgpOworKworKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZl
cnNlKGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgJm5ld1Jp
Z2h0ID0gdHJhdmVyc2UocmlnaHROb2RlLCBkaXNhYmxlUmlnaHQpOworKworKyAgICAgICAgaWYg
KCFpc0FjY2VzcyB8fCBkaXNhYmxlVG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICgm
bGVmdE5vZGUgPT0gJm5ld0xlZnQgJiYgJnJpZ2h0Tm9kZSA9PSAmbmV3UmlnaHQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4geyZiaW5hcnlOb2RlLCBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4geypuZXcgVElu
dGVybUJpbmFyeShvcCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoTmFtZSgiZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7Jm5ld0xlZnQsICZuZXdSaWdodH0pLAorKyAgICAgICAgICAgICAgICBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisr
CisrYm9vbCBzaDo6UmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYpCisreworKyAgICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVi
dWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAoIVJld3JpdGVyMihjb21waWxlciwgc3ltYm9sRW52KS5yZWJ1aWxkUm9vdChyb290
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0
cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43N2RhOTg0
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKK0BAIC0wLDAgKzEs
MzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVO
QUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNo
CisreworKworKy8vIEdpdmVuOgorKy8vICAgdm9pZCBmb28ob3V0IHgpOworKy8vIEl0IGlzIHBv
c3NpYmxlIGZvciB0aGUgZm9sbG93aW5nIHRvIGJlIGxlZ2FsIGluIEdMU0wgYnV0IG5vdCBpbiBN
ZXRhbDoKKysvLyAgIGZvbyhleHByZXNzaW9uKTsKKysvLyBUaGlzIGNhbiBoYXBwZW4gaW4gY2Fz
ZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3IgdmVjdG9yIGVsZW1l
bnQgYWNjZXNzLgorKy8vIFRoaXMgcmV3cml0ZSBmdW5jdGlvbmFsaXR5IGludHJvZHVjZXMgdGVt
cG9yYXJpZXMgdGhhdCBzZXJ2ZSBhcyBwcm94aWVzIHRvIGJlIHBhc3NlZCB0byB0aGUKKysvLyBv
dXQvaW5vdXQgcGFyYW1ldGVycyBhcyBuZWVkZWQuIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Np
b25zIGdldCBwb3B1bGF0ZWQgd2l0aCB0aGVpcgorKy8vIHByb3hpZXMgYWZ0ZXIgdGhlIGZ1bmN0
aW9uIGNhbGwuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVm
ZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVS
RUZFUkVOQ0VTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4
cHJlc3Npb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVhN2Iz
NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwCitAQCAtMCwwICsx
LDY1NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlM
b29wQ29uZGl0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2Jvb2wgSXNJbmRleChUT3Bl
cmF0b3Igb3ApCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrYm9vbCBJc0luZGV4KFRJbnRlcm1U
eXBlZCAmZXhwcikKKyt7CisrICAgIGlmIChhdXRvICpiaW5hcnkgPSBleHByLmdldEFzQmluYXJ5
Tm9kZSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkp
OworKyAgICB9CisrICAgIHJldHVybiBleHByLmdldEFzU3dpenpsZU5vZGUoKTsKKyt9CisrCisr
Ym9vbCBWaWV3QmluYXJ5Q2hhaW4oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQgJm5vZGUsIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmb3V0KQorK3sKKysgICAgVEludGVybUJpbmFyeSAq
YmluYXJ5ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKTsKKysgICAgaWYgKCFiaW5hcnkgfHwgYmlu
YXJ5LT5nZXRPcCgpICE9IG9wKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgVEludGVybVR5cGVkICpsZWZ0ICA9IGJpbmFyeS0+Z2V0TGVmdCgpOworKyAg
ICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gYmluYXJ5LT5nZXRSaWdodCgpOworKworKyAgICBpZiAo
IVZpZXdCaW5hcnlDaGFpbihvcCwgKmxlZnQsIG91dCkpCisrICAgIHsKKysgICAgICAgIG91dC5w
dXNoX2JhY2sobGVmdCk7CisrICAgIH0KKysKKysgICAgaWYgKCFWaWV3QmluYXJ5Q2hhaW4ob3As
ICpyaWdodCwgb3V0KSkKKysgICAgeworKyAgICAgICAgb3V0LnB1c2hfYmFjayhyaWdodCk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBWaWV3QmluYXJ5Q2hhaW4oVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBjaGFpbjsKKysgICAgVmlld0JpbmFyeUNoYWluKG5v
ZGUuZ2V0T3AoKSwgbm9kZSwgY2hhaW4pOworKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49IDIp
OworKyAgICByZXR1cm4gY2hhaW47CisrfQorKworK2NsYXNzIFByZVBhc3MgOiBwdWJsaWMgVElu
dGVybVJlYnVpbGQKKyt7CisrICBwdWJsaWM6CisrICAgIFByZVBhc3MoVENvbXBpbGVyICZjb21w
aWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSkge30KKysKKysgIHBy
aXZhdGU6CisrICAgIC8vIENoYW5nZSBjaGFpbnMgb2YKKysgICAgLy8gICAgICB4IE9QIHkgT1Ag
egorKyAgICAvLyB0bworKyAgICAvLyAgICAgIHggT1AgKHkgT1AgeikKKysgICAgLy8gcmVnYXJk
bGVzcyBvZiBvcmlnaW5hbCBwYXJlbnRoZXNpemF0aW9uLgorKyAgICBUSW50ZXJtVHlwZWQgJnJl
YXNzb2NpYXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKysgICAgeworKyAgICAgICAgY29u
c3QgVE9wZXJhdG9yIG9wICAgICAgICAgICAgICAgID0gbm9kZS5nZXRPcCgpOworKyAgICAgICAg
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUp
OworKworKyAgICAgICAgVEludGVybVR5cGVkICpyZXN1bHQgPSBjaGFpbi5iYWNrKCk7CisrICAg
ICAgICBjaGFpbi5wb3BfYmFjaygpOworKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisrCisrICAg
ICAgICBjb25zdCBhdXRvIGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisrICAgICAgICBjb25zdCBh
dXRvIGVuZCAgID0gY2hhaW4ucmVuZCgpOworKworKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKnBhcnQgPSAqaXRlcjsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAg
ICAgICAgICAgVEludGVybU5vZGUgKnRlbXAgPSByZWJ1aWxkKCpwYXJ0KS5zaW5nbGUoKTsKKysg
ICAgICAgICAgICBBU1NFUlQodGVtcCk7CisrICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFz
VHlwZWQoKTsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAgICAgICAgICAgcmVzdWx0
ID0gbmV3IFRJbnRlcm1CaW5hcnkob3AsIHBhcnQsIHJlc3VsdCk7CisrICAgICAgICB9CisrICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgUHJlUmVz
dWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlm
IChvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BM
b2dpY2FsT3IpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHtyZWFzc29jaWF0ZVJp
Z2h0KG5vZGUpLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKyt9OworKworK2NsYXNzIFNlcGFyYXRvciA6IHB1YmxpYyBUSW50
ZXJtUmVidWlsZAorK3sKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgc3RkOjp2ZWN0b3I8c3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4+IG1TdG10c1N0YWNrOworKyAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNsYXJhdGlvbiAq
Pj4gbUJpbmRpbmdNYXBTdGFjazsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1UeXBl
ZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxU
SW50ZXJtRGVjbGFyYXRpb24gKj4gbU1hc2tlZERlY2xzOworKworKyAgcHVibGljOgorKyAgICBT
ZXBhcmF0b3IoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYsIElkR2Vu
ICZpZEdlbikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUp
LCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIH5TZXBhcmF0b3IoKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBBU1NFUlQobVN0bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICBB
U1NFUlQobUV4cHJNYXAuZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFj
ay5lbXB0eSgpKTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJmdldEN1cnJTdG10cygpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbVN0
bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICByZXR1cm4gbVN0bXRzU3RhY2suYmFjaygpOwor
KyAgICB9CisrCisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUVmFyaWFibGUgKiwgVElu
dGVybURlY2xhcmF0aW9uICo+ICZnZXRDdXJyQmluZGluZ01hcCgpCisrICAgIHsKKysgICAgICAg
IEFTU0VSVCghbUJpbmRpbmdNYXBTdGFjay5lbXB0eSgpKTsKKysgICAgICAgIHJldHVybiBtQmlu
ZGluZ01hcFN0YWNrLmJhY2soKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdG10KFRJbnRl
cm1Ob2RlICZub2RlKSB7IGdldEN1cnJTdG10cygpLnB1c2hfYmFjaygmbm9kZSk7IH0KKysKKysg
ICAgYm9vbCBpc1Rlcm1pbmFsRXhwcihUSW50ZXJtTm9kZSAmbm9kZSkKKysgICAgeworKyAgICAg
ICAgTm9kZVR5cGUgbm9kZVR5cGUgPSBnZXROb2RlVHlwZShub2RlKTsKKysgICAgICAgIHN3aXRj
aCAobm9kZVR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3lt
Ym9sOgorKyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50VW5pb246CisrICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBUSW50ZXJt
VHlwZWQgKnB1bGxNYXBwZWRFeHByKFRJbnRlcm1UeXBlZCAqbm9kZSwgYm9vbCBhbGxvd0JhY2t0
cmFjaykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICpleHByOworKworKyAgICAgICAg
eworKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9kZSk7CisrICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gbUV4cHJNYXAuZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgQVNT
RVJUKG5vZGUpOworKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisrICAgICAgICAg
ICAgQVNTRVJUKGV4cHIpOworKyAgICAgICAgICAgIG1FeHByTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgaWYgKGFsbG93QmFja3RyYWNrKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gJmJpbmRpbmdNYXAgPSBnZXRDdXJyQmluZGluZ01hcCgpOworKyAgICAg
ICAgICAgIHdoaWxlIChUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBleHByLT5nZXRBc1N5bWJvbE5v
ZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
dmFyID0gc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAg
ICAgICAgICA9IGJpbmRpbmdNYXAuZmluZCgmdmFyKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4cHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IGl0ZXItPnNlY29u
ZDsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworKyAgICAgICAgICAgICAgICBleHBy
ID0gVmlld0RlY2xhcmF0aW9uKCpkZWNsKS5pbml0RXhwcjsKKysgICAgICAgICAgICAgICAgQVNT
RVJUKGV4cHIpOworKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgICAgICAgICBtTWFza2VkRGVjbHMuaW5zZXJ0KGRlY2wpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBleHByOworKyAgICB9CisrCisrICAgIGJv
b2wgaXNTdGFuZGFsb25lRXhwcihUSW50ZXJtVHlwZWQgJmV4cHIpCisrICAgIHsKKysgICAgICAg
IGlmIChnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVChleHByLmdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBl
ZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7CisrICAgICAgICBpZiAo
aXNTdGFuZGFsb25lRXhwcihuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNo
U3RtdChuZXdFeHByKTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoSXNJbmRleChuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtRXhwck1h
cFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9
CisrICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdNYXAoKTsKKysgICAg
ICAgIGNvbnN0IE5hbWUgbmFtZSAgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAg
ICBhdXRvICp2YXIgPQorKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
bmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgYXV0byAqZGVjbCA9IG5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCAmbmV3RXhw
cik7CisrICAgICAgICBwdXNoU3RtdCgqZGVjbCk7CisrICAgICAgICBtRXhwck1hcFsmb2xkRXhw
cl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworKyAgICAgICAgYmluZGluZ01hcFt2YXJdICAg
ID0gZGVjbDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdGFja3MoKQorKyAgICB7CisrICAg
ICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3Rh
Y2suZW1wbGFjZV9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BTdGFja3MoKQorKyAg
ICB7CisrICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisrICAgICAg
ICBBU1NFUlQoIW1TdG10c1N0YWNrLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG1TdG10c1N0
YWNrLmJhY2soKS5lbXB0eSgpKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgIG1TdG10c1N0YWNrLnBvcF9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9p
ZCBwdXNoU3RtdHNJbnRvQmxvY2soVEludGVybUJsb2NrICZibG9jaywgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJnN0bXRzKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cSA9ICpibG9jay5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dCA6IHN0bXRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2wgPSBzdG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbU1hc2tlZERlY2xzLmZpbmQoZGVjbCk7Cisr
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKysgICAgICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbU1hc2tlZERlY2xzLmVyYXNlKGl0ZXIp
OworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtQmxvY2sgJmJ1aWxkQmxvY2tXaXRoVGFpbEFzc2ln
bihjb25zdCBUVmFyaWFibGUgJnZhciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRD
dXJyU3RtdHMoKSk7CisrICAgICAgICBwb3BTdGFja3MoKTsKKysKKysgICAgICAgIGF1dG8gJmJs
b2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgIGF1dG8gJnNlcSAgID0gKmJsb2Nr
LmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzZXEucmVzZXJ2ZSgxICsgc3RtdHMuc2l6ZSgpKTsK
KysgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9jaywgc3RtdHMpOworKyAgICAgICAgc2Vx
LnB1c2hfYmFjayhuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbmV3IFRJ
bnRlcm1TeW1ib2woJnZhciksICZuZXdFeHByKSk7CisrCisrICAgICAgICByZXR1cm4gYmxvY2s7
CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFByZVJlc3VsdCB2aXNpdEJsb2NrUHJlKFRJ
bnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0YWNrcygp
OworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJTdG10
cygpKTsKKysgICAgICAgIHBvcFN0YWNrcygpOworKworKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgc2VxLmNsZWFyKCk7CisrICAg
ICAgICBzZXEucmVzZXJ2ZShzdG10cy5zaXplKCkpOworKyAgICAgICAgcHVzaFN0bXRzSW50b0Js
b2NrKG5vZGUsIHN0bXRzKTsKKysKKysgICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQgPSBnZXRQ
YXJlbnROb2RlKCk7CisrICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAgICAgfQor
KworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAg
ICAgICAgaWYgKCFkZWNsLmluaXRFeHByIHx8IGlzVGVybWluYWxFeHByKCpkZWNsLmluaXRFeHBy
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgICAgICB9CisrICAgICAg
ICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgRGVjbGFyYXRpb24gZGVjbCA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKysgICAgICAgIEFT
U0VSVChkZWNsLnN5bWJvbC52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpF
bXB0eSk7CisrICAgICAgICBBU1NFUlQoIWRlY2wuc3ltYm9sLnZhcmlhYmxlKCkuZ2V0VHlwZSgp
LmlzU3RydWN0U3BlY2lmaWVyKCkpOworKworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdJbml0
RXhwciA9IHB1bGxNYXBwZWRFeHByKGRlY2wuaW5pdEV4cHIsIHRydWUpOworKyAgICAgICAgaWYg
KGRlY2wuaW5pdEV4cHIgPT0gbmV3SW5pdEV4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cHVzaFN0bXQobm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmbmV3Tm9kZSA9ICpuZXcgVEludGVybURlY2xhcmF0aW9uKCk7Cisr
ICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAorKyAgICAgICAgICAgICAgICBu
ZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsICZkZWNsLnN5bWJvbCwg
bmV3SW5pdEV4cHIpKTsKKysgICAgICAgICAgICBwdXNoU3RtdChuZXdOb2RlKTsKKysgICAgICAg
IH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlz
aXRVbmFyeVBvc3QoVEludGVybVVuYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKysgICAgICAgIFRJ
bnRlcm1UeXBlZCAqbmV3RXhwciA9IHB1bGxNYXBwZWRFeHByKGV4cHIsIGZhbHNlKTsKKysgICAg
ICAgIGlmIChleHByID09IG5ld0V4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHVzaEJp
bmRpbmcobm9kZSwgbm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtVW5hcnkobm9kZS5n
ZXRPcCgpLCBuZXdFeHByLCBub2RlLmdldEZ1bmN0aW9uKCkpKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVBy
ZShUSW50ZXJtQmluYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsK
KysgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworKwor
KyAgICAgICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0UmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgICAgICBw
dXNoU3RhY2tzKCk7CisrICAgICAgICAgICAgUG9zdFJlc3VsdCByaWdodFJlc3VsdCA9IHJlYnVp
bGQoKnJpZ2h0KTsKKysgICAgICAgICAgICBBU1NFUlQocmlnaHRSZXN1bHQuc2luZ2xlKCkpOwor
KworKyAgICAgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQg
dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChv
cCA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUgJiYgZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Rl
Y2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz
ZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVjbGFyYXRpb25Qb3N0CisrICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisrICAgICAgICB9CisrCisrICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9k
ZS5nZXRMZWZ0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdo
dCgpOworKworKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZCB8fCBv
cCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAgICAgICAg
YXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwg
bmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2wpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAqbmV3UmlnaHQgICA9IHB1bGxNYXBwZWRFeHByKHJpZ2h0LCB0cnVlKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgKnJpZ2h0QmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNz
aWduKCp2YXIsICpuZXdSaWdodCk7CisrICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdMZWZ0
ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisrCisrICAgICAgICAgICAgVEludGVy
bVR5cGVkICpjb25kID0gbmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICBpZiAo
b3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBjb25kID0gbmV3IFRJbnRlcm1VbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Qs
IGNvbmQsIG51bGxwdHIpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBwdXNoU3Rt
dCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIsIG5ld0xlZnQpKTsKKysgICAgICAgICAgICBw
dXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikpOwor
KyAgICAgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAg
ICAgfQorKworKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0xlZnQgID0gcHVsbE1hcHBlZEV4cHIobGVm
dCwgZmFsc2UpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCA9IHB1bGxNYXBwZWRF
eHByKHJpZ2h0LCBpc0Fzc2lnbik7CisrCisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpF
T3BDb21tYSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3
UmlnaHQpOworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKm5ld05vZGU7Cisr
ICAgICAgICAgICAgaWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG5ld05vZGUgPSAmbm9kZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdOb2RlKTsK
KysgICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBQ
cmVSZXN1bHQgdmlzaXRUZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBQb3N0UmVzdWx0IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdl
dENvbmRpdGlvbigpKTsKKysgICAgICAgIEFTU0VSVChjb25kUmVzdWx0LnNpbmdsZSgpKTsKKysK
KysgICAgICAgIHB1c2hTdGFja3MoKTsKKysgICAgICAgIFBvc3RSZXN1bHQgdGhlblJlc3VsdCA9
IHJlYnVpbGQoKm5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisrICAgICAgICBBU1NFUlQodGhl
blJlc3VsdC5zaW5nbGUoKSk7CisrCisrICAgICAgICBwdXNoU3RhY2tzKCk7CisrICAgICAgICBQ
b3N0UmVzdWx0IGVsc2VSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldEZhbHNlRXhwcmVzc2lvbigp
KTsKKysgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgIHJl
dHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0
IHZpc2l0VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAg
ICAgICAgVEludGVybVR5cGVkICp0aGVuICA9IG5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKTsKKysg
ICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpOwor
KworKyAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoIiIpOwor
KyAgICAgICAgYXV0byAqdmFyID0KKysgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCAmbm9kZS5nZXRUeXBlKCksIG5hbWUuc3ltYm9sVHlwZSgp
KTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIo
ZWxzZV8sIGZhbHNlKTsKKysgICAgICAgIFRJbnRlcm1CbG9jayAqZWxzZUJsb2NrID0gJmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3RWxzZSk7CisrICAgICAgICBUSW50ZXJtVHlw
ZWQgKm5ld1RoZW4gICA9IHB1bGxNYXBwZWRFeHByKHRoZW4sIHRydWUpOworKyAgICAgICAgVElu
dGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpu
ZXdUaGVuKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCAgID0gcHVsbE1hcHBlZEV4
cHIoY29uZCwgdHJ1ZSk7CisrCisrICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKysgICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybUlmRWxzZShuZXdDb25k
LCB0aGVuQmxvY2ssIGVsc2VCbG9jaykpOworKyAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHBy
KG5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBU
SW50ZXJtU3ltYm9sKHZhcik7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsK
KysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6
bGUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAg
ICA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0g
cHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhw
cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmlu
ZGluZyhub2RlLCAqbmV3IFRJbnRlcm1Td2l6emxlKG5ld0V4cHIsIG5vZGUuZ2V0U3dpenpsZU9m
ZnNldHMoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysK
KysgICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9k
ZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5v
ZGUuZ2V0U2VxdWVuY2UoKTsKKysgICAgICAgIGZvciAoVEludGVybU5vZGUgKiZhcmcgOiBhcmdz
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0
QXNUeXBlZCgpOworKyAgICAgICAgICAgIEFTU0VSVCh0YXJnKTsKKysgICAgICAgICAgICBhcmcg
PSBwdWxsTWFwcGVkRXhwcih0YXJnLCBmYWxzZSk7CisrICAgICAgICB9CisrICAgICAgICBwdXNo
QmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisr
ICAgIFBvc3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVw
cm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHB1c2hT
dG10KG5vZGUpOworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghZ2V0UGFyZW50RnVuY3Rpb24o
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIH0K
KysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdENh
c2VQcmUoVEludGVybUNhc2UgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChU
SW50ZXJtVHlwZWQgKmNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworKyAgICAgICAgfQorKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVElu
dGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVk
ICppbml0ICAgID0gbm9kZS5nZXRJbml0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0lu
aXQgPSBwdWxsTWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisrICAgICAgICBpZiAoaW5pdCA9PSBu
ZXdJbml0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAg
ICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KCpu
ZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBub2RlLmdldFN0YXRlbWVudExpc3QoKSkpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAg
ICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0SWZFbHNl
UG9zdChUSW50ZXJtSWZFbHNlICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50
ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdDb25kID0gcHVsbE1hcHBlZEV4cHIoY29uZCwgZmFsc2UpOworKyAgICAgICAg
aWYgKGNvbmQgPT0gbmV3Q29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbm9kZS5nZXRUcnVlQmxvY2so
KSwgbm9kZS5nZXRGYWxzZUJsb2NrKCkpKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBu
b2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1C
cmFuY2ggJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhw
ciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdF
eHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0g
bmV3RXhwcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdCgq
bmV3IFRJbnRlcm1CcmFuY2gobm9kZS5nZXRGbG93T3AoKSwgbmV3RXhwcikpOworKyAgICAgICAg
fQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
TG9vcFByZShUSW50ZXJtTG9vcCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYg
KCFyZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICBwdXNoU3RtdChub2RlKTsK
KysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKysgICAgfQorKwor
KyAgICBQb3N0UmVzdWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5p
b24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
bm9kZS5nZXRUeXBlKCk7CisrICAgICAgICBpZiAoIXR5cGUuaXNTY2FsYXIoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIH0KKysg
ICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9i
YWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8g
VGhlc2Ugc2hvdWxkIGJlIHNjcnViYmVkIGZyb20gQVNUIGJlZm9yZSByZXdyaXRlciBpcyBjYWxs
ZWQuCisrICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAg
ICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytib29sIHNoOjpTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENv
bXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290KQorK3sKKysgICAgaWYgKHJlYWRCb29sRW52VmFyKCJHTVRfRElT
QUJMRV9TRVBBUkFURV9DT01QT1VORF9FWFBSRVNTSU9OUyIpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBpZiAoIVNpbXBsaWZ5TG9vcENvbmRpdGlvbnMo
JmNvbXBpbGVyLCAmcm9vdCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFQcmVQYXNzKGNvbXBp
bGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdG9yKGNvbXBpbGVyLCBzeW1ib2xFbnYsIGlkR2Vu
KS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi41ZTQwYTU1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgK
K0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9O
U19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
U0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYW5zZm9ybXMgY29k
ZSB0byAodXN1YWxseSkgaGF2ZSBtb3N0IG9uZSBub24tdGVybWluYWwgZXhwcmVzc2lvbiBwZXIg
c3RhdGVtZW50LgorKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBp
bnRvIHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisrLy8K
KysvLyBlLmcuCisrLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKysvLyBiZWNvbWVz
CisrLy8gICAgYXV0byBfMSA9IGJhcigpOworKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOwor
Ky8vICAgIGF1dG8gXzMgPSA2ICsgXzI7CisrLy8gICAgaW50IHggPSBfMzsKKysvLworKy8vIFdB
Uk5JTkc6CisrLy8gICAgLSBUaGlzIGRvZXMgbm90IHJld3JpdGUgb2JqZWN0IGluZGV4aW5nIG9w
ZXJhdG9ycyBhcyBhIHdob2xlIChlLmcuIGZvby54LCBmb29beF0pLCBidXQgd2lsbAorKy8vICAg
ICAgcmV3cml0ZSB0aGUgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxl
KS4KKysvLyAgICAgIGUuZy4KKysvLyAgICAgICAgZm9vKGdldFZlYygpW2kgKyAyXSArIDEpOwor
Ky8vICAgICAgYmVjb21lcworKy8vICAgICAgICBhdXRvIF8xID0gZ2V0VmVjKCk7CisrLy8gICAg
ICAgIGF1dG8gXzIgPSBpICsgMjsKKysvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8v
IEluZGV4IG9wZXJhdG9yIHJlbWFpbnMgaW4gKCspIGV4cHIgaGVyZS4KKysvLyAgICAgICAgZm9v
KF8zKTsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBS
RVNTSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjRiYThjNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRp
b25zLmNwcAorQEAgLTAsMCArMSw3NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBTZXBhcmF0b3IgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgU2VwYXJhdG9yKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1ib2xU
YWJsZSkge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVj
bGFyYXRpb24gKmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVj
bE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2RlICZub2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrCisrICAgICAgICBpZiAoVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFy
aWFibGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSB2YXIu
Z2V0VHlwZSgpOworKyAgICAgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IHZh
ci5zeW1ib2xUeXBlKCk7CisrICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIo
KSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKysgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3
IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKHN0cnVjdHVy
ZSwgdHJ1ZSksIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysKKysgICAgICAgICAgICAgICAgYXV0byAq
aW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZVR5cGUtPnNldFF1YWxpZmllcih0eXBlLmdldFF1YWxpZmllcigpKTsKKysg
ICAgICAgICAgICAgICAgYXV0byAqaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xU
YWJsZSwgdmFyLm5hbWUoKSwgaW5zdGFuY2VUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KysKKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIHJlcGxhY2VtZW50czsKKysgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1
Y3RWYXIpKTsKKysgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVElu
dGVybVN5bWJvbChpbnN0YW5jZVZhcikpOworKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNl
bWVudHMucHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVs
dGlwbGVFbnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorK3sKKysg
ICAgU2VwYXJhdG9yIHNlcGFyYXRvcihjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKTsKKysgICAg
cm9vdC50cmF2ZXJzZSgmc2VwYXJhdG9yKTsKKysgICAgaWYgKCFzZXBhcmF0b3IudXBkYXRlVHJl
ZSgmY29tcGlsZXIsICZyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIGlmICghU2VwYXJhdGVEZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4g
dHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
U3RydWN0RGVjbGFyYXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw
Li4wNzEyZTgwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5o
CitAQCAtMCwwICsxLDI0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVD
TEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCisrCisrI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gRXhhbXBsZToKKysvLyAg
c3RydWN0IEZvbyB7IGludCB4OyB9IGZvbzsKKysvLyBCZWNvbWVzOgorKy8vICBzdHJ1Y3QgRm9v
IHtpbnQgeDsgfTsgRm9vIGZvbzsKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sg
JnJvb3QpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVDVERF
Q0xBUkFUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ta2lwcGluZ1RyYXZlcnNlci5oIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mZjQ5ZGFkCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdU
cmF2ZXJzZXIuaAorQEAgLTAsMCArMSw0NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0tJUFBJTkdUUkFWRVJT
RVJfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1NLSVBQSU5HVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8v
IEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcgY2hpbGRlbiBieSBkZWZh
dWx0LgorK2NsYXNzIFNraXBwaW5nVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
Kyt7CisrICBwdWJsaWM6CisrICAgIFNraXBwaW5nVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXRfLAor
KyAgICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBvc3RWaXNpdF8sCisrICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSAqc3ltYm9sVGFibGUgPSBudWxscHRyKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHBy
ZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQorKyAgICB7fQorKwor
KyAgICBib29sIHZpc2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFy
eSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0VGVybmFyeShWaXNpdCwgVElu
dGVybVRlcm5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdElmRWxzZShW
aXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJv
b2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAg
ICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNp
dEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIHsgcmV0
dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
KikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1NLSVBQSU5HVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3NTNkYWMKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xF
bnYuY3BwCitAQCAtMCwwICsxLDY4MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrI2luY2x1ZGUgPGxpbWl0cz4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVp
bGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKysKKytjb25zdGV4cHIgQWRkcmVzc1NwYWNlIGtBZGRyZXNzU3BhY2VzW10gPSB7CisrICAg
IEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQsCisrICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorKyAg
ICBBZGRyZXNzU3BhY2U6OlRocmVhZCwKKyt9OworKworK2NoYXIgY29uc3QgKnNoOjp0b1N0cmlu
ZyhBZGRyZXNzU3BhY2Ugc3BhY2UpCisreworKyAgICBzd2l0Y2ggKHNwYWNlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJjb25zdGFudCI7CisrICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorKyAgICAg
ICAgICAgIHJldHVybiAiZGV2aWNlIjsKKysgICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJl
YWQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0aHJlYWQiOworKyAgICB9CisrfQorKworKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisrCisrdXNpbmcgTmFtZVRvU3RydWN0ID0gc3RkOjptYXA8TmFt
ZSwgY29uc3QgVFN0cnVjdHVyZSAqPjsKKysKKytjbGFzcyBTdHJ1Y3RGaW5kZXIgOiBUSW50ZXJt
UmVidWlsZAorK3sKKysgICAgTmFtZVRvU3RydWN0IG5hbWVUb1N0cnVjdDsKKysKKysgICAgU3Ry
dWN0RmluZGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIs
IHRydWUsIGZhbHNlKSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworKworKyAgICAgICAgaWYgKHZhci5zeW1i
b2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmllcigp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdl
dFN0cnVjdCgpOworKyAgICAgICAgICAgIEFTU0VSVChzKTsKKysgICAgICAgICAgICBjb25zdCBO
YW1lIG5hbWUoKnMpOworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZ6ID0gbmFtZVRv
U3RydWN0W25hbWVdOworKyAgICAgICAgICAgIEFTU0VSVCgheik7CisrICAgICAgICAgICAgeiA9
IHM7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAg
ICBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAgIHN0YXRpYyBO
YW1lVG9TdHJ1Y3QgRmluZFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2Nr
ICZyb290KQorKyAgICB7CisrICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsK
KysgICAgICAgIGlmICghZmluZGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlKGZpbmRlci5uYW1lVG9TdHJ1Y3QpOworKyAgICB9CisrfTsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhib29sIHZhbHVlKSA6
IG1LaW5kKEtpbmQ6OkJvb2wpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRl
bXBsYXRlQXJnKGludCB2YWx1ZSkgOiBtS2luZChLaW5kOjpJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtp
bmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJn
KGNvbnN0IFRUeXBlICZ2YWx1ZSkgOiBtS2luZChLaW5kOjpUeXBlKSwgbVZhbHVlKHZhbHVlKSB7
fQorKworK2Jvb2wgVGVtcGxhdGVBcmc6Om9wZXJhdG9yPT0oY29uc3QgVGVtcGxhdGVBcmcgJm90
aGVyKSBjb25zdAorK3sKKysgICAgaWYgKG1LaW5kICE9IG90aGVyLm1LaW5kKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChtS2luZCkKKysg
ICAgeworKyAgICAgICAgY2FzZSBLaW5kOjpCb29sOgorKyAgICAgICAgICAgIHJldHVybiBtVmFs
dWUuYiA9PSBvdGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAg
ICAgICAgIHJldHVybiBtVmFsdWUuaSA9PSBvdGhlci5tVmFsdWUuaTsKKysgICAgICAgIGNhc2Ug
S2luZDo6VUludDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIubVZhbHVl
LnU7CisrICAgICAgICBjYXNlIEtpbmQ6OlR5cGU6CisrICAgICAgICAgICAgcmV0dXJuICptVmFs
dWUudCA9PSAqb3RoZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrYm9vbCBUZW1wbGF0ZUFy
Zzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKKyt7CisrICAgIGlm
IChtS2luZCA8IG90aGVyLm1LaW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgICBpZiAobUtpbmQgPiBvdGhlci5tS2luZCkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHN3aXRjaCAobUtpbmQpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgS2luZDo6Qm9vbDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBv
dGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAgICAgICAgIHJl
dHVybiBtVmFsdWUuaSA8IG90aGVyLm1WYWx1ZS5pOworKyAgICAgICAgY2FzZSBLaW5kOjpVSW50
OgorKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUudSA8IG90aGVyLm1WYWx1ZS51OworKyAgICAg
ICAgY2FzZSBLaW5kOjpUeXBlOgorKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3Ro
ZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kytib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRl
TmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4gYmFzZU5hbWUgPT0gb3RoZXIuYmFz
ZU5hbWUgJiYgdGVtcGxhdGVBcmdzID09IG90aGVyLnRlbXBsYXRlQXJnczsKKyt9CisrCisrYm9v
bCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0CisreworKyAgICBpZiAoYmFzZU5hbWUgPCBvdGhlci5iYXNlTmFtZSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysgICAgaWYgKG90aGVyLmJhc2VO
YW1lIDwgYmFzZU5hbWUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVBcmdzOworK30KKysKKyti
b29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAgICByZXR1
cm4gYmFzZU5hbWUuZW1wdHkoKSAmJiB0ZW1wbGF0ZUFyZ3MuZW1wdHkoKTsKKyt9CisrCisrdm9p
ZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6Y2xlYXIoKQorK3sKKysgICAgYmFzZU5hbWUgPSBO
YW1lKCk7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigpOworK30KKysKKytOYW1lIFN5bWJvbEVu
djo6VGVtcGxhdGVOYW1lOjpmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25zdAorK3sK
KysgICAgQVNTRVJUKGJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgaWYgKHRlbXBsYXRlQXJncy5l
bXB0eSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gYmFzZU5hbWU7CisrICAgIH0KKysKKysg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbiA9IHN0ZDo6bWF4KHsKKysgICAgICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisrICAgICAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46OmRpZ2l0czEwLCAgICAgICAvLworKyAgICAgICAgNSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4X2xlbmd0aCgidHJ1ZSIsICJm
YWxzZSIpCisrICAgIH0pOworKworKyAgICBidWZmZXIucmVzZXJ2ZShiYXNlTmFtZS5yYXdOYW1l
KCkubGVuZ3RoKCkgKyAobiArIDIpICogdGVtcGxhdGVBcmdzLnNpemUoKSArIDEpOworKyAgICBi
dWZmZXIgKz0gYmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKysKKysgICAgaWYgKCF0ZW1wbGF0
ZUFyZ3MuZW1wdHkoKSkKKysgICAgeworKyAgICAgICAgYnVmZmVyICs9ICI8IjsKKysKKysgICAg
ICAgIGJvb2wgZmlyc3QgPSB0cnVlOworKyAgICAgICAgY2hhciBhcmdCdWZmZXJbbiArIDFdOwor
KyAgICAgICAgZm9yIChjb25zdCBUZW1wbGF0ZUFyZyAmYXJnIDogdGVtcGxhdGVBcmdzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChmaXJzdCkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiLCAiOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6VmFsdWUgdmFs
dWUgPSBhcmcudmFsdWUoKTsKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6S2luZCBr
aW5kICAgPSBhcmcua2luZCgpOworKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkJvb2w6Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikKKysgICAgICAgICAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gInRydWUiOworKyAgICAgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFsc2UiOworKyAgICAg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkludDoKKysgICAgICAgICAgICAgICAg
ICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB2YWx1ZS5pKTsKKysgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysK
KysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKysgICAgICAg
ICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJXUiLCB2YWx1ZS51KTsKKysgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKysKKysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VHlwZToK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSAqdmFsdWUudDsKKysgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJl
ICpzID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcy0+bmFtZSgpLmRhdGEoKTsKKysgICAgICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2lj
VHlwZSh0eXBlKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXR5cGUuaXNBcnJheSgpKTsgIC8vIFRPRE8KKysgICAgICAgICAgICAgICAg
ICAgICAgICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwg
dHlwZS5nZXROb21pbmFsU2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZm
ZXIsICIlaSIsIHR5cGUuZ2V0Q29scygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
ICs9ICJ4IjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIs
ICIlaSIsIHR5cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgYnVmZmVyICs9ICI+IjsK
KysgICAgfQorKworKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZShidWZmZXIpOworKyAg
ICBidWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuIE5hbWUobmFtZSwgYmFzZU5hbWUuc3lt
Ym9sVHlwZSgpKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6YXNzaWdu
KGNvbnN0IE5hbWUgJm5hbWUsIHNpemVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFy
Z3MpCisreworKyAgICBiYXNlTmFtZSA9IG5hbWU7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigp
OworKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisrICAgIHsKKysg
ICAgICAgIHRlbXBsYXRlQXJncy5wdXNoX2JhY2soYXJnc1tpXSk7CisrICAgIH0KKyt9CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytTeW1ib2xFbnY6OlN5bWJvbEVudihUQ29tcGls
ZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisrICAgIDogbVN5bWJvbFRhYmxlKGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorKyAgICAgIG1OYW1lVG9TdHJ1Y3QoU3RydWN0Rmlu
ZGVyOjpGaW5kU3RydWN0cyhjb21waWxlciwgcm9vdCkpCisre30KKysKKytjb25zdCBUU3RydWN0
dXJlICZTeW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0CisreworKyAg
ICBjb25zdCBOYW1lIG5hbWUocyk7CisrICAgIGF1dG8gaXRlciA9IG1OYW1lVG9TdHJ1Y3QuZmlu
ZChuYW1lKTsKKysgICAgaWYgKGl0ZXIgPT0gbU5hbWVUb1N0cnVjdC5lbmQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKysgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICpp
dGVyLT5zZWNvbmQ7CisrICAgIHJldHVybiB6OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICpT
eW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0CisreworKyAgICBpZiAo
cykKKysgICAgeworKyAgICAgICAgcmV0dXJuICZyZW1hcCgqcyk7CisrICAgIH0KKysgICAgcmV0
dXJuIG51bGxwdHI7CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmU3ltYm9sRW52OjpnZXRGdW5j
dGlvbk92ZXJsb2FkSW1wbCgpCisreworKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5l
bXB0eSgpKTsKKysKKysgICAgU2lnVG9GdW5jICZzaWdUb0Z1bmMgPSBtT3ZlcmxvYWRzW21SZXVz
YWJsZVRlbXBsYXRlTmFtZUJ1ZmZlcl07CisrICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2ln
VG9GdW5jW21SZXVzYWJsZVNpZ0J1ZmZlcl07CisrCisrICAgIGlmICghZnVuYykKKysgICAgewor
KyAgICAgICAgY29uc3QgVFR5cGUgJnJldHVyblR5cGUgPSBtUmV1c2FibGVTaWdCdWZmZXIuYmFj
aygpOworKyAgICAgICAgbVJldXNhYmxlU2lnQnVmZmVyLnBvcF9iYWNrKCk7CisrCisrICAgICAg
ICBjb25zdCBOYW1lIG5hbWUgPSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZnVsbE5hbWUo
bVJldXNhYmxlU3RyaW5nQnVmZmVyKTsKKysKKysgICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9u
KCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVy
blR5cGUsIGZhbHNlKTsKKysgICAgICAgIGZvciAoY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA6IG1S
ZXVzYWJsZVNpZ0J1ZmZlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBmdW5jLT5hZGRQYXJh
bWV0ZXIoCisrICAgICAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwga0Vt
cHR5SW1tdXRhYmxlU3RyaW5nLCAmcGFyYW1UeXBlLCBTeW1ib2xUeXBlOjpFbXB0eSkpOworKyAg
ICAgICAgfQorKyAgICB9CisrCisrICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5jbGVhcigpOworKyAg
ICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuICpm
dW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVy
bG9hZChjb25zdCBOYW1lICZuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICoqcGFyYW1UeXBlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdz
KQorK3sKKysgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNT
RVJUKG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgIHsKKysgICAgICAgIG1SZXVz
YWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2soKnBhcmFtVHlwZXNbaV0pOworKyAgICB9CisrICAgIG1S
ZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2socmV0dXJuVHlwZSk7CisrICAgIG1SZXVzYWJsZVRl
bXBsYXRlTmFtZUJ1ZmZlci5hc3NpZ24obmFtZSwgdGVtcGxhdGVBcmdDb3VudCwgdGVtcGxhdGVB
cmdzKTsKKysgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7CisrfQorKworK1RJ
bnRlcm1BZ2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFt
ZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRl
QXJnQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdzKQorK3sKKysgICAgQVNTRVJUKG1S
ZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNTRVJUKG1SZXVzYWJsZVRlbXBsYXRl
TmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJn
cykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICBBU1NFUlQodGFyZyk7CisrICAgICAgICBtUmV1c2FibGVTaWdCdWZmZXIu
cHVzaF9iYWNrKHRhcmctPmdldFR5cGUoKSk7CisrICAgIH0KKysgICAgbVJldXNhYmxlU2lnQnVm
ZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKysgICAgbVJldXNhYmxlVGVtcGxhdGVOYW1lQnVm
ZmVyLmFzc2lnbihuYW1lLCB0ZW1wbGF0ZUFyZ0NvdW50LCB0ZW1wbGF0ZUFyZ3MpOworKyAgICBj
b25zdCBURnVuY3Rpb24gJmZ1bmMgPSBnZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworKyAgICBy
ZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJn
cyk7CisrfQorKworK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNv
bnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcykKKyt7CisrICAgIEFTU0VSVChuYW1l
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgVFN0
cnVjdHVyZSAqJnMgPSBtQW5nbGVTdHJ1Y3RzW25hbWUucmF3TmFtZSgpXTsKKysgICAgQVNTRVJU
KCFzKTsKKysgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFt
ZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIHJldHVybiAqczsKKyt9Cisr
CisrY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUg
c2FtcGxlclR5cGUpCisreworKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7Cisr
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZlbnYgPSBtVGV4dHVyZUVudnNbc2FtcGxlclR5cGVdOwor
KyAgICBpZiAoZW52ID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIGF1dG8gKnRleHR1cmVU
eXBlID0gbmV3IFRUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgICAgIGF1dG8gKnRleHR1cmUgICAg
ID0gbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtO
b1NvdXJjZUxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIoKnRleHR1cmUsIEFkZHJl
c3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorKyAgICAgICAg
ICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCksIGZhbHNlKSwgSW1t
dXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICBrTm9Tb3Vy
Y2VMb2MsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIHN0ZDo6c3RyaW5n
IGVudk5hbWU7CisrICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisrICAgICAgICBl
bnZOYW1lICs9IEdldFRleHR1cmVUeXBlTmFtZShzYW1wbGVyVHlwZSkucmF3TmFtZSgpLmRhdGEo
KTsKKysgICAgICAgIGVudk5hbWUgKz0gIj4iOworKworKyAgICAgICAgZW52ID0gJm5ld1N0cnVj
dHVyZShOYW1lKGVudk5hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRGaWVsZExpc3R7dGV4dHVyZSwgc2FtcGxlcn0pOwor
KyAgICB9CisrICAgIHJldHVybiAqZW52OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICZTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QoKQorK3sKKysgICAgaWYgKCFtU2FtcGxlcikKKysgICAg
eworKyAgICAgICAgbVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcoIm1ldGFsOjpzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysg
ICAgfQorKyAgICByZXR1cm4gKm1TYW1wbGVyOworK30KKysKKyt2b2lkIFN5bWJvbEVudjo6bWFy
a1NwYWNlKFZhckZpZWxkIHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3Bh
Y2Ugc3BhY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkKKyt7CisrICAgIC8vIEl0IGlzIGluIHByaW5j
aXBsZSBwZXJtaXNzaWJsZSB0byBoYXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlw
bGUgcG9pbnRlcnMsIGJ1dCB0aGlzCisrICAgIC8vIGlzIG5vdCByZXF1aXJlZCBmb3Igbm93IGFu
ZCB3b3VsZCByZXF1aXJlIGNvZGUgY2hhbmdlcyB0byBnZXQgcmlnaHQuCisrICAgIEFTU0VSVCgh
aXNQb2ludGVyKHgpKTsKKysgICAgQVNTRVJUKCFpc1JlZmVyZW5jZSh4KSk7CisrCisrICAgIG1h
cFt4XSA9IHNwYWNlOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNT
cGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBj
b25zdAorK3sKKysgICAgY29uc3QgYXV0byBpdGVyID0gbWFwLmZpbmQoeCk7CisrICAgIGlmIChp
dGVyID09IG1hcC5lbmQoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAg
IH0KKysgICAgY29uc3QgQWRkcmVzc1NwYWNlIHNwYWNlID0gaXRlci0+c2Vjb25kOworKyAgICBj
b25zdCBhdXRvIGluZGV4ICAgICAgICAgPSBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlw
ZV90PEFkZHJlc3NTcGFjZT4+KHNwYWNlKTsKKysgICAgcmV0dXJuICZrQWRkcmVzc1NwYWNlc1tp
bmRleF07CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZhckZpZWxkIHgs
IEFkZHJlc3NTcGFjZSBzcGFjZSkKKyt7CisrICAgIHJldHVybiBtYXJrU3BhY2UoeCwgc3BhY2Us
IG1Qb2ludGVycyk7CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNSZWZlcmVuY2UoVmFy
RmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKQorK3sKKysgICAgcmV0dXJuIG1hcmtTcGFjZSh4
LCBzcGFjZSwgbVJlZmVyZW5jZXMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJv
bEVudjo6aXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0CisreworKyAgICByZXR1cm4gaXNTcGFj
ZSh4LCBtUG9pbnRlcnMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKKyt7CisrICAgIHJldHVybiBpc1NwYWNlKHgs
IG1SZWZlcmVuY2VzKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BhY2tlZChjb25z
dCBURmllbGQgJmZpZWxkKQorK3sKKysgICAgbVBhY2tlZEZpZWxkcy5pbnNlcnQoJmZpZWxkKTsK
Kyt9CisrCisrYm9vbCBTeW1ib2xFbnY6OmlzUGFja2VkKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNv
bnN0CisreworKyAgICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tl
ZEZpZWxkcy5lbmQoKTsKKyt9CisrCisrc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2lj
VHlwZShUQmFzaWNUeXBlIGJhc2ljVHlwZSkKKyt7CisrICAgIEFTU0VSVChJc1NhbXBsZXIoYmFz
aWNUeXBlKSk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRN
U0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlkZW9XRUJHTDoKKysgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEQXJyYXk6CisrICAgICAg
ICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVy
QnVmZmVyOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURT
aGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICAg
ICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworKworKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVNBcnJh
eToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoKKysgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5
OgorKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRJbnQ7CisrCisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVM6CisrICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRNU0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjFEQXJyYXk6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0Ogor
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFVJbnQ7Cisr
CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAg
ICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFZvaWQ7CisrICAgIH0KKyt9CisrCisrTmFtZSBz
aDo6R2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUpCisreworKyAgICBB
U1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7CisrCisrICAgIGNvbnN0IFRCYXNpY1R5cGUg
dGV4dHVyZVR5cGUgPSBHZXRUZXh0dXJlQmFzaWNUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgY29u
c3QgY2hhciAqbmFtZTsKKysKKysjZGVmaW5lIEhBTkRMRV9URVhUVVJFX05BTUUoYmFzZU5hbWUp
ICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OiAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGZsb2F0PiI7IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDog
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGludD4iOyAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPHVpbnQ+IjsgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7ICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgfSB3aGlsZSAoZmFsc2UpCisrCisrICAgIHN3aXRjaCAo
c2FtcGxlclR5cGUpCisrICAgIHsKKysgICAgICAgIC8vIDFkCisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIxRDogIC8vIERlc2t0b3AgR0xTTCBzYW1wbGVyIHR5cGU6CisrICAgICAgICBjYXNlIEVi
dElTYW1wbGVyMUQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMUQ6CisrICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICAvLyAxZCBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjFEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFk
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBCdWZmZXIgdGV4
dHVyZXMKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorKyAgICAg
ICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmVfYnVmZmVyIik7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAvLyAyZCB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRSZWN0OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoK
KysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmQiKTsKKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIC8vIDNkIHRleHR1cmVzCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJl
M2QiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoInRleHR1cmVjdWJlIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAvLyAyZCBhcnJheSB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZTJkX2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRNUzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0
ZXh0dXJlMmRfbXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJETVNBcnJheToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNU0FycmF5OgorKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9tc19hcnJheSIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgLy8gY3ViZSBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmVBcnJheToKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgi
dGV4dHVyZWN1YmVfYXJyYXkiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8v
IFNoYWRvdworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAg
ICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJUT0RPIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0
aDJkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJD
dWJlU2hhZG93OgorKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoImRlcHRoY3ViZSIp
OworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkX2FycmF5
Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
QXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJl
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBFeHRlbnRpb25z
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICAgICAgLy8gT25seSB2YWxp
ZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6ICAvLyBPbmx5IHZhbGlkIGlmIEdMX0VYVF9ZVVZfdGFyZ2V0
IGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKysg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKysgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKysgICAgICAgICAgICBi
cmVhazsKKysgICAgfQorKworKyN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCisrCisrICAgIHJl
dHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVu
di5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGM5NjQ1ZQorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1N5bWJvbEVudi5oCitAQCAtMCwwICsxLDIxOCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9M
RU5WX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9TWU1CT0xFTlZfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisrewor
KworK2VudW0gY2xhc3MgQWRkcmVzc1NwYWNlCisreworKyAgICBDb25zdGFudCwKKysgICAgRGV2
aWNlLAorKyAgICBUaHJlYWQsCisrfTsKKysKKytjaGFyIGNvbnN0ICp0b1N0cmluZyhBZGRyZXNz
U3BhY2Ugc3BhY2UpOworKworK2NsYXNzIFZhckZpZWxkCisreworKyAgcHVibGljOgorKyAgICBW
YXJGaWVsZChjb25zdCBUVmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhcikge30KKysgICAg
VmFyRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSB7fQorKworKyAg
ICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1WYXJpYWJsZTsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgp
IGNvbnN0IHsgcmV0dXJuIG1GaWVsZDsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZhckZpZWxkICZvdGhlcikgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0
dXJuIG1WYXJpYWJsZSA9PSBvdGhlci5tVmFyaWFibGUgJiYgbUZpZWxkID09IG90aGVyLm1GaWVs
ZDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgY29uc3QgVFZhcmlhYmxlICptVmFyaWFi
bGUgPSBudWxscHRyOworKyAgICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7
CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKytuYW1lc3BhY2Ugc3RkCisreworKwor
K3RlbXBsYXRlIDw+Cisrc3RydWN0IGhhc2g8c2g6OlZhckZpZWxkPgorK3sKKysgICAgc2l6ZV90
IG9wZXJhdG9yKCkoY29uc3Qgc2g6OlZhckZpZWxkICZ4KSBjb25zdAorKyAgICB7CisrICAgICAg
ICBjb25zdCBzaDo6VFZhcmlhYmxlICp2YXIgPSB4LnZhcmlhYmxlKCk7CisrICAgICAgICBpZiAo
dmFyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qgc2g6
OlRWYXJpYWJsZSAqPigpKHZhcik7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBzaDo6VEZp
ZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKysgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qg
c2g6OlRGaWVsZCAqPigpKGZpZWxkKTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNl
IHN0ZAorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytjbGFzcyBUZW1wbGF0ZUFyZworK3sKKysg
IHB1YmxpYzoKKysgICAgZW51bSBjbGFzcyBLaW5kCisrICAgIHsKKysgICAgICAgIEJvb2wsCisr
ICAgICAgICBJbnQsCisrICAgICAgICBVSW50LAorKyAgICAgICAgVHlwZSwKKysgICAgfTsKKysK
KysgICAgdW5pb24gVmFsdWUKKysgICAgeworKyAgICAgICAgVmFsdWUoYm9vbCB2YWx1ZSkgOiBi
KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisrICAg
ICAgICBWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkgOiB1KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUo
Y29uc3QgVFR5cGUgJnZhbHVlKSA6IHQoJnZhbHVlKSB7fQorKworKyAgICAgICAgYm9vbCBiOwor
KyAgICAgICAgaW50IGk7CisrICAgICAgICB1bnNpZ25lZCB1OworKyAgICAgICAgY29uc3QgVFR5
cGUgKnQ7CisrICAgIH07CisrCisrICAgIFRlbXBsYXRlQXJnKGJvb2wgdmFsdWUpOworKyAgICBU
ZW1wbGF0ZUFyZyhpbnQgdmFsdWUpOworKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7
CisrICAgIFRlbXBsYXRlQXJnKGNvbnN0IFRUeXBlICZ2YWx1ZSk7CisrCisrICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKyAgICBib29sIG9wZXJh
dG9yPChjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKworKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtS2luZDsgfQorKyAgICBWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1WYWx1ZTsgfQorKworKyAgcHVibGljOgorKyAgICBLaW5kIG1LaW5kOworKyAgICBWYWx1
ZSBtVmFsdWU7CisrfTsKKysKKysvLyBBbiBlbnZpcm9ubWVudCBmb3IgY3JlYXRpbmcgYW5kIHVu
aXF1ZWx5IHNoYXJpbmcgVFN5bWJvbCBvYmplY3RzLgorK2NsYXNzIFN5bWJvbEVudgorK3sKKysg
ICAgY2xhc3MgVGVtcGxhdGVOYW1lCisrICAgIHsKKysgICAgICAgIE5hbWUgYmFzZU5hbWU7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUZW1wbGF0ZUFyZz4gdGVtcGxhdGVBcmdzOworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZU5hbWUgJm90
aGVyKSBjb25zdDsKKysgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0OworKworKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworKyAgICAgICAg
dm9pZCBjbGVhcigpOworKworKyAgICAgICAgTmFtZSBmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVm
ZmVyKSBjb25zdDsKKysKKysgICAgICAgIHZvaWQgYXNzaWduKGNvbnN0IE5hbWUgJm5hbWUsIHNp
emVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpOworKyAgICB9OworKworKyAg
ICB1c2luZyBUeXBlUmVmICAgICAgICA9IENSZWY8VFR5cGU+OworKyAgICB1c2luZyBTaWcgICAg
ICAgICAgICA9IHN0ZDo6dmVjdG9yPFR5cGVSZWY+OyAgLy8gUGFyYW0wLCBQYXJhbTEsIC4uLiBQ
YXJhbU4sIFJldHVybgorKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywg
VEZ1bmN0aW9uICo+OworKyAgICB1c2luZyBPdmVybG9hZHMgICAgICA9IHN0ZDo6bWFwPFRlbXBs
YXRlTmFtZSwgU2lnVG9GdW5jPjsKKysgICAgdXNpbmcgQW5nbGVTdHJ1Y3RzICAgPSBzdGQ6Om1h
cDxJbW11dGFibGVTdHJpbmcsIFRTdHJ1Y3R1cmUgKj47CisrICAgIHVzaW5nIFRleHR1cmVTdHJ1
Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKysKKysgIHB1YmxpYzoK
KysgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisrCisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUoKSB7IHJldHVybiBtU3ltYm9sVGFi
bGU7IH0KKysKKysgICAgLy8gVGhlcmUgZXhpc3QgQW5nbGUgcmV3cml0ZXMgdGhhdCBjYW4gbGVh
ZCB0byBpbmNvaGVyZW50IHN0cnVjdHMKKysgICAgLy8KKysgICAgLy8gRXhhbXBsZQorKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisrICAgIC8vICAgIHN0cnVjdCBCIHsgQScgYTsgfSAvLyBB
JyBoYXMgc2FtZSBuYW1lIGFzIEEgYnV0IGlzIG5vdCBpZGVudGljYWwuCisrICAgIC8vIGJlY29t
ZXMKKysgICAgLy8gICAgc3RydWN0IEEgeyAuLi4gfQorKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEg
YTsgfQorKyAgICAvLworKyAgICAvLyBUaGlzIG5vdGFibHkgaGFwcGVucyB3aGVuIEEgY29udGFp
bnMgYSBzYW1wbGVyIGluIHRoZSBvcmlnaW5hbCBHTFNMIGNvZGUgYnV0IGlzIHJld3JpdHRlbiB0
bworKyAgICAvLyBub3QgaGF2ZSBhIHNhbXBsZXIsIHlldCB0aGUgQScgc3RydWN0IGZpZWxkIHN0
aWxsIGNvbnRhaW5zIHRoZSBzYW1wbGVyIGZpZWxkLgorKyAgICBjb25zdCBUU3RydWN0dXJlICZy
ZW1hcChjb25zdCBUU3RydWN0dXJlICZzKSBjb25zdDsKKysKKysgICAgLy8gTGlrZSBgVFN0cnVj
dHVyZSAmcmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcylgIGJ1dCBhZGRpdGlvbmFsbHkgbWFwcyBu
dWxsIHRvIG51bGwuCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMpIGNvbnN0OworKworKyAgICBjb25zdCBURnVuY3Rpb24gJmdldEZ1bmN0aW9uT3Zlcmxv
YWQoY29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3Vu
dCAgICAgICAgID0gMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgVElu
dGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJl
dHVyblR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmYXJncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQgICAgICAgICA9IDAsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0
dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcyk7CisrCisrICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJmdldFRleHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKysKKysgICAgdm9pZCBtYXJr
QXNQb2ludGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSk7CisrICAgIGNvbnN0IEFk
ZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2b2lkIG1h
cmtBc1JlZmVyZW5jZShWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOworKyAgICBjb25z
dCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2
b2lkIG1hcmtBc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKTsKKysgICAgYm9vbCBpc1BhY2tl
ZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKysKKysgIHByaXZhdGU6CisrICAgIGNvbnN0
IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKysKKysgICAgdm9pZCBtYXJr
U3BhY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlLCBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCk7CisrICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNTcGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApIGNvbnN0
OworKworKyAgcHJpdmF0ZToKKysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrCisr
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKysg
ICAgT3ZlcmxvYWRzIG1PdmVybG9hZHM7CisrICAgIFNpZyBtUmV1c2FibGVTaWdCdWZmZXI7Cisr
ICAgIFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisrICAgIHN0ZDo6
c3RyaW5nIG1SZXVzYWJsZVN0cmluZ0J1ZmZlcjsKKysKKysgICAgQW5nbGVTdHJ1Y3RzIG1Bbmds
ZVN0cnVjdHM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxUQmFzaWNUeXBlLCBjb25zdCBUU3Ry
dWN0dXJlICo+IG1UZXh0dXJlRW52czsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqbVNhbXBsZXIg
PSBudWxscHRyOworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NT
cGFjZT4gbVBvaW50ZXJzOworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJl
c3NTcGFjZT4gbVJlZmVyZW5jZXM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmll
bGQgKj4gbVBhY2tlZEZpZWxkczsKKyt9OworKworK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRC
YXNpY1R5cGUgc2FtcGxlclR5cGUpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5W
X0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1RvcG9zb3J0U3RydWN0cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjk4NDMzMzIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CitAQCAtMCwwICsxLDM4MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisr
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxmdW5jdGlv
bmFsPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0
PgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0
aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJh
dmVyc2UuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNp
bmcgRWRnZXMgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8VD47CisrCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrdXNpbmcgR3JhcGggPSBzdGQ6OnVub3JkZXJlZF9tYXA8VCwgRWRnZXM8VD4+OworKwor
K3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZzeW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRT
dHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCisreworKyAgICBpZiAoZy5maW5k
KHMpICE9IGcuZW5kKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAg
ICBFZGdlczxjb25zdCBUU3RydWN0dXJlICo+ICZlcyA9IGdbc107CisrCisrICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisrICAgIGZvciAoY29uc3QgVEZpZWxkICpmIDog
ZnMpCisrICAgIHsKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3ltYm9sRW52
LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGVzLmluc2VydCh6KTsKKysgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcs
IHopOworKyAgICAgICAgICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmV6ID0gZ1t6XTsK
KysgICAgICAgICAgICBlcy5pbnNlcnQoZXouYmVnaW4oKSwgZXouZW5kKCkpOworKyAgICAgICAg
fQorKyAgICB9CisrfQorKworK0dyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gQnVpbGRHcmFwaChT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiAmc3RydWN0cykKKyt7Cisr
ICAgIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gZzsKKysgICAgZm9yIChjb25zdCBUU3RydWN0
dXJlICpzIDogc3RydWN0cykKKysgICAgeworKyAgICAgICAgQnVpbGRHcmFwaEltcGwoc3ltYm9s
RW52LCBnLCBzKTsKKysgICAgfQorKyAgICByZXR1cm4gZzsKKyt9CisrCisrLy8gQWxnb3J0aG06
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgt
Zmlyc3Rfc2VhcmNoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RkOjp2ZWN0b3I8VD4gVG9w
b3NvcnQoY29uc3QgR3JhcGg8VD4gJmcpCisreworKyAgICAvLyBub2RlcyB3aXRoIHRlbXBvcmFy
eSBtYXJrCisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxUPiB0ZW1wczsKKysKKysgICAgLy8gbm9k
ZXMgd2l0aG91dCBwZXJtYW5lbnQgbWFyaworKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8VD4gaW52
UGVybXM7CisrICAgIGZvciAoY29uc3QgYXV0byAmZW50cnkgOiBnKQorKyAgICB7CisrICAgICAg
ICBpbnZQZXJtcy5pbnNlcnQoZW50cnkuZmlyc3QpOworKyAgICB9CisrCisrICAgIC8vIEwg4oaQ
IEVtcHR5IGxpc3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNvcnRlZCBlbGVtZW50cworKyAgICBz
dGQ6OnZlY3RvcjxUPiBMOworKworKyAgICAvLyBmdW5jdGlvbiB2aXNpdChub2RlIG4pCisrICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlzaXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKysgICAg
ICAgIC8vIGlmIG4gaGFzIGEgcGVybWFuZW50IG1hcmsgdGhlbgorKyAgICAgICAgaWYgKGludlBl
cm1zLmZpbmQobikgPT0gaW52UGVybXMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
Ly8gcmV0dXJuCisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8g
aWYgbiBoYXMgYSB0ZW1wb3JhcnkgbWFyayB0aGVuCisrICAgICAgICBpZiAodGVtcHMuZmluZChu
KSAhPSB0ZW1wcy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBzdG9wICAgKG5v
dCBhIERBRykKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgLy8gbWFyayBuIHdpdGggYSB0ZW1wb3JhcnkgbWFyaworKyAgICAgICAgdGVtcHMuaW5z
ZXJ0KG4pOworKworKyAgICAgICAgLy8gZm9yIGVhY2ggbm9kZSBtIHdpdGggYW4gZWRnZSBmcm9t
IG4gdG8gbSBkbworKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisrICAgICAgICBB
U1NFUlQoZW5JdGVyICE9IGcuZW5kKCkpOworKyAgICAgICAgY29uc3QgRWRnZXM8VD4gJmVuID0g
ZW5JdGVyLT5zZWNvbmQ7CisrICAgICAgICBmb3IgKFQgbSA6IGVuKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIC8vIHZpc2l0KG0pCisrICAgICAgICAgICAgdmlzaXQobSk7CisrICAgICAgICB9
CisrCisrICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisrICAgICAgICB0
ZW1wcy5lcmFzZShuKTsKKysgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgcGVybWFuZW50IG1hcmsK
KysgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworKyAgICAgICAgLy8gYWRkIG4gdG8gaGVhZCBv
ZiBMCisrICAgICAgICBMLnB1c2hfYmFjayhuKTsKKysgICAgfTsKKysKKysgICAgLy8gd2hpbGUg
ZXhpc3RzIG5vZGVzIHdpdGhvdXQgYSBwZXJtYW5lbnQgbWFyayBkbworKyAgICB3aGlsZSAoIWlu
dlBlcm1zLmVtcHR5KCkpCisrICAgIHsKKysgICAgICAgIC8vIHNlbGVjdCBhbiB1bm1hcmtlZCBu
b2RlIG4KKysgICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworKyAgICAgICAgLy8gdmlz
aXQobikKKysgICAgICAgIHZpc2l0KG4pOworKyAgICB9CisrCisrICAgIHJldHVybiBMOworK30K
KysKKytUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpDcmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0
aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0
VHlwZSkKKyt7CisrICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrICAgIGF1dG8gJmZ1bmNF
cXVhbGl0eSA9CisrICAgICAgICAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJs
ZVN0cmluZygiZXF1YWwiKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKysgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisrICAg
IGF1dG8gJmFTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYSIpKTsKKysgICAgYXV0byAmYlN0cnVjdCA9IENyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJiIikpOworKyAgICBmdW5j
RXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3RydWN0KTsKKysgICAgZnVuY0VxdWFsaXR5LmFkZFBh
cmFtZXRlcigmYlN0cnVjdCk7CisrCisrICAgIGF1dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVElu
dGVybUJsb2NrKCk7CisrICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBhbmROb2RlczsK
KysgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmYUZp
ZWxkcyA9IGFTdHJ1Y3RUeXBlLmZpZWxkcygpOworKyAgICBjb25zdCBzaXplX3Qgc2l6ZSAgICAg
ICAgID0gYUZpZWxkcy5zaXplKCk7CisrCisrICAgIGF1dG8gdGVzdEVxdWFsaXR5ID0gWyZdKFRJ
bnRlcm1UeXBlZCAmYSwgVEludGVybVR5cGVkICZiKSAtPiBUSW50ZXJtVHlwZWQgKiB7CisrICAg
ICAgICBBU1NFUlQoYS5nZXRUeXBlKCkgPT0gYi5nZXRUeXBlKCkpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKysgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkg
fHwgdHlwZS5pc01hdHJpeCgpIHx8IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAqZnVuYyA9CisrICAgICAgICAgICAgICAgIG5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5
cGU6OkVidEJvb2wpLCB0cnVlKTsKKysgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0
ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZhLCAmYn0p
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEVxdWFsLCAmYSwgJmIpOworKyAg
ICAgICAgfQorKyAgICB9OworKworKyAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBzaXpl
OyArK2lkeCkKKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICZhRmllbGQgICAgPSAqYUZp
ZWxkc1tpZHhdOworKyAgICAgICAgY29uc3QgVFR5cGUgJmFGaWVsZFR5cGUgPSAqYUZpZWxkLnR5
cGUoKTsKKysgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KysKKysgICAgICAgIGlmIChhRmllbGRUeXBlLmlzQXJyYXkoKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBBU1NFUlQoIWFGaWVsZFR5cGUuaXNBcnJheU9mQXJyYXlzKCkpOyAgLy8gVE9ETwor
KyAgICAgICAgICAgIGludCBkaW0gPSBhRmllbGRUeXBlLmdldE91dGVybW9zdEFycmF5U2l6ZSgp
OworKyAgICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZhQWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNz
RmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworKyAgICAgICAgICAgICAgICBhdXRvICZi
QWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQp
OworKyAgICAgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3Ms
IGFBY2Nlc3MpOworKyAgICAgICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0ZpZWxkKGFTdHJ1Y3QsIGFGaWVsZE5h
bWUpOworKyAgICAgICAgICAgIGF1dG8gJmJBY2Nlc3MgPSBBY2Nlc3NGaWVsZChiU3RydWN0LCBh
RmllbGROYW1lKTsKKysgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJB
Y2Nlc3MsIGFBY2Nlc3MpOworKyAgICAgICAgICAgIGFuZE5vZGVzLnB1c2hfYmFjayhlcU5vZGUp
OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIEFTU0VSVChhbmROb2Rlcy5zaXplKCkgPiAw
KTsgIC8vIEVtcHR5IHN0cnVjdHMgYXJlIG5vdCBhbGxvd2VkIGluIEdMU0wKKysgICAgVEludGVy
bVR5cGVkICpvdXROb2RlID0gYW5kTm9kZXMuYmFjaygpOworKyAgICBhbmROb2Rlcy5wb3BfYmFj
aygpOworKyAgICBmb3IgKFRJbnRlcm1UeXBlZCAqYW5kTm9kZSA6IGFuZE5vZGVzKQorKyAgICB7
CisrICAgICAgICBvdXROb2RlID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsQW5kLCBhbmROb2RlLCBvdXROb2RlKTsKKysgICAgfQorKyAgICBib2R5RXF1YWxpdHkuYXBw
ZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXRO
b2RlKSk7CisrICAgIGF1dG8gKmZ1bmNQcm90b0VxdWFsaXR5ID0gbmV3IFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZSgmZnVuY0VxdWFsaXR5KTsKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uKGZ1bmNQcm90b0VxdWFsaXR5LCAmYm9keUVxdWFsaXR5KTsKKyt9CisrCisr
c3RydWN0IERlY2xhcmVkU3RydWN0dXJlCisreworKyAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRl
Y2xOb2RlOworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICplcXVhbGl0eUZ1bmN0aW9u
RGVmaW5pdGlvbjsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlOworK307CisrCisr
Ym9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAmbm9kZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVjbGFyZWRTdHJ1Y3R1cmUgJm91dCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTdHJ1Y3R1cmUgKj4g
JnVzZWRTdHJ1Y3RzKQorK3sKKysgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGUg
PSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChk
ZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5v
ZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysKKysgICAgICAgIGlmIChUSW50ZXJt
U3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxl
KCk7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOwor
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBpZiAodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBvdXQuZGVjbE5vZGUgID0gZGVjbE5vZGU7CisrICAgICAgICAgICAg
ICAgICAgICBvdXQuc3RydWN0dXJlID0gc3RydWN0dXJlOworKyAgICAgICAgICAgICAgICAgICAg
b3V0LmVxdWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKysgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkU3RydWN0cy5maW5kKHN0cnVjdHVyZSkgPT0gdXNlZFN0cnVjdHMuZW5kKCkKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxscHRyCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVj
dHVyZSk7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2NsYXNzIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7Cisr
ICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3RydWN0dXJlICo+IG1Vc2VkU3RydWN0czsK
KysKKysgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAg
ICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpiaW5hcnkpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKysKKysgICAgICAgIHN3aXRjaCAob3ApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsOgorKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBiaW5hcnktPmdldExlZnQoKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0gYmluYXJ5
LT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChsZWZ0VHlw
ZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gbVN5bWJvbEVudi5yZW1hcChsZWZ0
VHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB0cnVl
OworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2b2lkIHVzZVN0cnVjdChjb25zdCBUU3Ry
dWN0dXJlICZzdHJ1Y3R1cmUpCisrICAgIHsKKysgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGNv
bnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3ViU3RydWN0ID0gbVN5bWJv
bEVudi5yZW1hcChmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK307CisrCisr
fSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrYm9vbCBzaDo6VG9wb3NvcnRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg
IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisreworKyAgICBGaW5kU3RydWN0RXF1YWxpdHlV
c2UgZmluZGVyKHN5bWJvbEVudik7CisrICAgIHJvb3QudHJhdmVyc2UoJmZpbmRlcik7CisrICAg
IHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5kZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisrCisrICAg
IERlY2xhcmVkU3RydWN0dXJlIGRlY2xhcmVkU3RydWN0OworKyAgICBzdGQ6OnZlY3RvcjxEZWNs
YXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1Y3RzOworKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBub25TdHJ1Y3RTdG10Tm9kZXM7CisrCisrICAgIHsKKysgICAgICAgIGNvbnN0IHNp
emVfdCBzdG10Q291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKKysgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RtdENvdW50OyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAg
VEludGVybU5vZGUgJnN0bXROb2RlID0gKnJvb3QuZ2V0Q2hpbGROb2RlKGkpOworKyAgICAgICAg
ICAgIGlmIChHZXRBc0RlY2xhcmVkU3RydWN0dXJlKHN5bWJvbEVudiwgc3RtdE5vZGUsIGRlY2xh
cmVkU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkZWNsYXJlZFN0
cnVjdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2soJnN0bXROb2Rl
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgeworKyAgICAg
ICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworKyAgICAgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgRGVjbGFyZWRTdHJ1Y3R1cmU+IHJh
d1RvRGVjbGFyZWQ7CisrCisrICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZk
IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHMucHVz
aF9iYWNrKGQuc3RydWN0dXJlKTsKKysgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5m
aW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKysgICAgICAgICAgICBy
YXdUb0RlY2xhcmVkW2Quc3RydWN0dXJlXSA9IGQ7CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBOb3RlOiBHcmFwaCBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25seSBleHBsaWNpdGx5IGRlY2xh
cmVkIHN0cnVjdHVyZXMuCisrICAgICAgICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGcgICAg
ICAgICAgICAgICAgICAgPSBCdWlsZEdyYXBoKHN5bWJvbEVudiwgc3RydWN0cyk7CisrICAgICAg
ICBzdGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29y
dChnKTsKKysgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdHMuc2l6ZSgpIDw9IHNvcnRlZFN0
cnVjdHMuc2l6ZSgpKTsKKysKKysgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworKyAg
ICAgICAgZm9yIChjb25zdCBUU3RydWN0dXJlICpzIDogc29ydGVkU3RydWN0cykKKysgICAgICAg
IHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworKyAgICAg
ICAgICAgIGlmIChpdCAhPSByYXdUb0RlY2xhcmVkLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChkLmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hf
YmFjayhkKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgewor
KyAgICAgICAgVEludGVybVNlcXVlbmNlIG5ld1N0bXROb2RlczsKKysKKysgICAgICAgIGZvciAo
RGVjbGFyZWRTdHJ1Y3R1cmUgJmRlY2xhcmVkU3RydWN0IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7Cisr
ICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5kZWNsTm9k
ZSk7CisrICAgICAgICAgICAgaWYgKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVuY3Rpb25EZWZp
bml0aW9uKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1
c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbik7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dE5vZGUgOiBub25TdHJ1Y3RTdG10Tm9kZXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKHN0bXROb2RlKTsKKysgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKHN0bXRO
b2RlKTsKKysgICAgICAgIH0KKysKKysgICAgICAgICpyb290LmdldFNlcXVlbmNlKCkgPSBuZXdT
dG10Tm9kZXM7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCituZXcgZmlsZSBtb2RlIDEw
MDY0NAoraW5kZXggMDAwMDAwMC4uYTM5MDhlMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
CitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RS
VUNUU19IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgor
KworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBEb2VzIGEgdG9wb3NvcnQgb24gc3RydWN0cyBi
YXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKysvLyBTdHJ1Y3QgdHlwZSBkZWNsYXJhdGlvbnMg
YXJlIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIHJvb3QgYmxvY2suCisrQU5HTEVfTk9fRElTQ0FS
RCBib29sIFRvcG9zb3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAm
cHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
V3JhcE1haW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDE0YmM2
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcAorQEAgLTAsMCArMSw5NCBAQAorKy8vCisrLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysv
LworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9XcmFwTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCisreworKyAgcHJpdmF0ZToKKysgICAgSWRHZW4gJm1JZEdlbjsKKysK
KysgIHB1YmxpYzoKKysgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
LCAmc3ltYm9sVGFibGUpLCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZvciAoVElu
dGVybU5vZGUgKm5vZGUgOiAqYmxvY2tOb2RlLT5nZXRTZXF1ZW5jZSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSA9
IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0
aW9uKCk7CisrICAgICAgICAgICAgICAgIGlmIChmdW5jLmlzTWFpbigpKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0Rl
Zk5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCB2aXNpdE1haW4oVEludGVybUJsb2NrICZy
b290LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKKysgICAgeworKyAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigp
OworKyAgICAgICAgQVNTRVJUKGZ1bmMuaXNNYWluKCkpOworKyAgICAgICAgQVNTRVJUKGZ1bmMu
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidFZvaWQpOwor
KyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09IDApOworKworKyAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZleHRlcm5hbE1haW5GdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5j
dGlvbigpOworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5hbE1haW5GdW5jID0gQ2xv
bmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFsTWFpbkZ1bmMpOworKwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpleHRlcm5hbE1haW5Qcm90byA9IGZ1
bmNEZWZOb2RlLT5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisrICAgICAgICAgICAgbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmaW50ZXJuYWxNYWluRnVuYyk7CisrCisrICAgICAgICBUSW50
ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAg
ICBleHRlcm5hbE1haW5Cb2R5LT5hcHBlbmRTdGF0ZW1lbnQoCisrICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKGludGVybmFsTWFpbkZ1bmMsIG5ldyBUSW50
ZXJtU2VxdWVuY2UoKSkpOworKworKyAgICAgICAgVEludGVybUJsb2NrICppbnRlcm5hbE1haW5C
b2R5ID0gZnVuY0RlZk5vZGUtPmdldEJvZHkoKTsKKysKKysgICAgICAgIFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisrICAgICAgICAgICAgbmV3IFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24oZXh0ZXJuYWxNYWluUHJvdG8sIGV4dGVybmFsTWFpbkJvZHkpOwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqaW50ZXJuYWxNYWluRGVmID0KKysg
ICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90
bywgaW50ZXJuYWxNYWluQm9keSk7CisrCisrICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVz
aF9iYWNrKE5vZGVSZXBsYWNlV2l0aE11bHRpcGxlRW50cnkoCisrICAgICAgICAgICAgJnJvb3Qs
IGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1h
aW5EZWZ9KSk7CisrICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6
OldyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2Nr
ICZyb290KQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdl
dFN5bWJvbFRhYmxlKCk7CisrICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4p
OworKyAgICByb290LnRyYXZlcnNlKCZ3cmFwcGVyKTsKKysgICAgaWYgKCF3cmFwcGVyLnVwZGF0
ZVRyZWUoJmNvbXBpbGVyLCAmcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjViMGVkZmYKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5o
CitAQCAtMCwwICsxLDI4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVy
c2UuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQ2hhbmdlcworKy8vICAgIHZvaWQg
bWFpbihhcmdzKSB7IG1haW4tYm9keSB9CisrLy8gVG8KKysvLyAgICB2b2lkIEZSRVNIX05BTUUo
YXJncykgeyBtYWluLWJvZHkgfQorKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUo
YXJncyk7IH0KKysvLworKy8vIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZnVsIGlmIHRoZSBv
cmlnaW5hbCBgbWFpbmAgaGFzIG11bHRpcGxlIHJldHVybiBwYXRocyBiZWNhdXNlIHRoaXMKKysv
LyByZWR1Y2VzIGRvd24gdG8gYSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBm
b3IgaW5zZXJ0aW5nIGNsZWFudXAgY29kZSBpbiBgbWFpbmAuCisrQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFdyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1dSQVBNQUlOX0hfCitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCituZXcgZmls
ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTBhOGJmMworLS0tIC9kZXYvbnVsbAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCitAQCAt
MCwwICsxLDMwNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMDIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
KyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3MTgpCisrI2VuZGlmCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVkZSA8
YWxnb3JpdGhtPgorKyNpbmNsdWRlIDxjbGltaXRzPgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0
YWJsZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY29uc3QgY2hh
ciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAqdCkKKyt7CisrICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKysgICAg
ICAgICAgICByZXR1cm4gInZvaWQiOworKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKysgICAgICAg
ICAgICByZXR1cm4gImZsb2F0IjsKKysgICAgICAgIGNhc2UgRWJ0SW50OgorKyAgICAgICAgICAg
IHJldHVybiAiaW50IjsKKysgICAgICAgIGNhc2UgRWJ0VUludDoKKysgICAgICAgICAgICByZXR1
cm4gInVpbnQiOworKyAgICAgICAgY2FzZSBFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiAi
Ym9vbCI7CisrICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorKyAgICAgICAgICAg
IHJldHVybiAieXV2Q3NjU3RhbmRhcmRFWFQiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOworKyAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKKysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsKKysgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlckV4dGVybmFsT0VTIjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllF
WFQ6CisrICAgICAgICAgICAgcmV0dXJuICJfX3NhbXBsZXJFeHRlcm5hbDJEWTJZRVhUIjsKKysg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKysgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyRFJlY3QiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKysgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNUyI7CisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNU0FycmF5IjsK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToKKysgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDdWJlQXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorKyAgICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0SVNh
bXBsZXJDdWJlOgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIy
REFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJl
dHVybiAiaXNhbXBsZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNl
IEVidElTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJl
QXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorKyAgICAgICAgICAgIHJldHVy
biAidXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgor
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsKKysg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBs
ZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlQXJyYXkiOworKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkRTaGFkb3ciOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKysgICAg
ICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlU2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheVNo
YWRvdyI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisrICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0
U3RydWN0OgorKyAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsKKysgICAgICAgIGNhc2Ug
RWJ0SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuICJpbnRlcmZhY2UgYmxvY2si
OworKyAgICAgICAgY2FzZSBFYnRJbWFnZTJEOgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVy
ZTJkIjsKKysgICAgICAgIGNhc2UgRWJ0SUltYWdlMkQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0
ZXh0dXJlMmQ8aW50PiI7CisrICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorKyAgICAgICAgICAg
IHJldHVybiAidGV4dHVyZTJkPHVpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0SW1hZ2UzRDoKKysg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisrICAgICAgICBjYXNlIEVidElJbWFnZTNE
OgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPGludD4iOworKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDx1aW50PiI7CisrICAg
ICAgICBjYXNlIEVidEltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVk
QXJyYXkoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlf
cmVmPHRleHR1cmUyZD4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyREFycmF5OgorKyAgICAgICAg
ICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJheSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZTJkPGludD4+IjsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuICJOT1RfSU1QTEVNRU5URUQiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIGNhc2UgRWJ0
VUltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUy
ZDx1aW50Pj4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJbWFnZUN1YmU6CisrICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlY3ViZSI7CisrICAgICAgICBjYXNlIEVidElJbWFnZUN1YmU6CisrICAgICAgICAg
ICAgcmV0dXJuICJ0ZXh0dXJlY3ViZTxpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0VUltYWdlQ3Vi
ZToKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlPHVpbnQ+IjsKKysgICAgICAgIGNh
c2UgRWJ0SW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlY3ViZT4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAg
ICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZTxpbnQ+PiI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJl
dHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysgICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVi
dFVJbWFnZUN1YmVBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1
cmVjdWJlPHVpbnQ+PiI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysg
ICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVidEF0b21pY0NvdW50ZXI6CisrICAgICAgICAg
ICAgcmV0dXJuICJhdG9taWNfdWludCI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJWaWRlb1dF
QkdMOgorKyAgICAgICAgICAgIHJldHVybiAiJHNhbXBsZXJWaWRlb1dFQkdMIjsKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICByZXR1
cm4gInVua25vd24gdHlwZSI7CisrICAgIH0KKyt9CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpCisreworKyAgICBpZiAodC0+aXNN
YXRyaXgoKSkKKysgICAgeworKyAgICAgICAgc3dpdGNoICh0LT5nZXRDb2xzKCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dFJvd3MoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQyIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
MngzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gImZsb2F0Mng0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGNhc2UgMzoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0M3gyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MyI7CisrICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9h
dDN4NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAg
ICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdDR4MiI7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDR4MyI7CisrICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICB9Cisr
ICAgIH0KKysgICAgaWYgKHQtPmlzVmVjdG9yKCkpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEludDoKKysgICAg
ICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImludDMiOworKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50NCI7CisrICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisrICAgICAgICAgICAgICAgIHN3
aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9v
bDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDMiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbDQiOworKyAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dE5vbWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQyIjsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gInVpbnQ0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKyAgICB9CisrICAgIEFTU0VSVCh0LT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOworKyAgICBBU1NFUlQodC0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworKyAgICByZXR1cm4gZ2V0QmFzaWNNZXRhbFN0cmlu
Zyh0KTsKKyt9CisrCisrSW1tdXRhYmxlU3RyaW5nIEdldE1ldGFsVHlwZU5hbWUoY29uc3QgVFR5
cGUgJnR5cGUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLCBOYW1lTWFwICpuYW1lTWFw
KQorK3sKKysgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorKyAgICAg
ICAgcmV0dXJuIEhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCksIGhhc2hGdW5jdGlvbiwgbmFtZU1h
cCk7CisrICAgIGVsc2UKKysgICAgICAgIHJldHVybiBJbW11dGFibGVTdHJpbmcoZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoJnR5cGUpKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRp
bHMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTNjZTNjCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCitA
QCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBUUkFOU0xBVE9SX01F
VEFMX1VUSUxTX0hfCisrI2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisrCisrI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJs
ZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFVuaXF1ZUlk
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKytuYW1lc3BhY2Ug
c2gKKyt7CisrCisrY29uc3QgY2hhciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAq
dCk7CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3Qg
VFR5cGUgKnQpOworKworK0ltbXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRU
eXBlICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0
aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5h
bWVNYXAgKm5hbWVNYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
VFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JWdWxrYW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvclZ1bGthbi5jcHAKK2luZGV4IDIwMWNiYzkuLmM1ZWM2N2QgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKK0BAIC0xNjMsNiArMTYzLDgg
QEAgY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZFBvaW50Q29vcmRO
YW1lICAgID0gSW1tdXRhYmxlU3RyaW5nKCJmbGlwcGVkUG9pbnRDb29yZCIpOworIGNvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0
cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOworIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0Vt
dWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEZXB0aFJhbmdl
UGFyYW1zIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNCbG9ja05hbWUg
ICAgICAgID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRVVuaWZvcm1CbG9jayIpOworK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOworIAorIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPGNvbnN0
IGNoYXIgKj4ga0RlZmF1bHRVbmlmb3JtTmFtZXMgPSB7CisgICAgIHtnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCitAQCAtNDUwLDkgKzQ1Miw5IEBA
IGNvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRl
cm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZp
ZWxkcy5lbmQoKSk7CisgCisgICAgIC8vIERlZmluZSBhIGRyaXZlciB1bmlmb3JtIGJsb2NrICJB
TkdMRVVuaWZvcm1CbG9jayIgd2l0aCBpbnN0YW5jZSBuYW1lICJBTkdMRVVuaWZvcm1zIi4KKy0g
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jaygKKy0gICAgICAgIHJvb3QsIHN5bWJvbFRh
YmxlLCBkcml2ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0
ZSgpLCAwLAorLSAgICAgICAgSW1tdXRhYmxlU3RyaW5nKHZrOjprRHJpdmVyVW5pZm9ybXNCbG9j
a05hbWUpLCBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc1Zhck5hbWUpKTsKKysg
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jayhyb290LCBzeW1ib2xUYWJsZSwgZHJpdmVy
RmllbGRMaXN0LCBFdnFVbmlmb3JtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VuaWZvcm1zVmFyTmFtZSk7CisgfQorIAor
IGNvbnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVy
bUJsb2NrICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorZGlmZiAtLWdpdCBhL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
eXBlcy5oCitpbmRleCBhM2UwMzk5Li44ZjZmYzQ2IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMu
aAorQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBUVHlwZQorIAorICAgICBib29sIGlzVmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsg
fQorICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsgfQorKyAgICBib29sIGlzUmFu
azAoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0g
MTsgfQorICAgICBib29sIGlzU2NhbGFyKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJu
IHByaW1hcnlTaXplID09IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFtU3RydWN0dXJlICYm
ICFpc0FycmF5KCk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVBU1QuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwCitpbmRl
eCA3NmE4YmMyLi5iYTRkNmYzIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVBU1QuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFT
VC5jcHAKK0BAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVy
bU5vZGUgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyAqZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlQVNUT3B0
aW9ucyAmb3B0aW9ucykKKyAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVl
LCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
Ky17CistICAgIGlmIChtT3B0aW9ucy52YWxpZGF0ZVNpbmdsZVBhcmVudCkKKy0gICAgeworLSAg
ICAgICAgbVBhcmVudFtyb290XSA9IG51bGxwdHI7CistICAgIH0KKy19Cisre30KKyAKKyB2b2lk
IFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQor
IHsKK0BAIC05MSwxMSArODYsMTIgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRDb3VudDsgKytpKQorICAgICAgICAgeworICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpjaGlsZCAgID0gbm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworLSAgICAgICAgICAgIGlmIChtUGFy
ZW50LmZpbmQoY2hpbGQpICE9IG1QYXJlbnQuZW5kKCkpCisrICAgICAgICAgICAgVEludGVybU5v
ZGUgKiZwYXJlbnQgPSBtUGFyZW50W2NoaWxkXTsKKysgICAgICAgICAgICBpZiAocGFyZW50KQor
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0
d2ljZSBidXQgdGhyb3VnaCB0aGUgc2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBv
ZgorICAgICAgICAgICAgICAgICAvLyB0aGUgYW5jZXN0b3JzLgorLSAgICAgICAgICAgICAgICBp
ZiAobVBhcmVudFtjaGlsZF0gIT0gbm9kZSkKKysgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAh
PSBub2RlKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwgIkZvdW5kIGNoaWxkIHdpdGggdHdvIHBhcmVu
dHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRl
U2luZ2xlUGFyZW50PiIpOworQEAgLTEwMywxNyArOTksMTcgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6
dmlzaXROb2RlKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBtUGFyZW50W2NoaWxkXSA9IG5v
ZGU7CisrICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKKyAgICAgICAgIH0KKyAgICAgfQorIH0K
KyAKKy12b2lkIFZhbGlkYXRlQVNUOjpleHBlY3ROb25OdWxsQ2hpbGRyZW4oVmlzaXQgdmlzaXQs
IFRJbnRlcm1Ob2RlICpub2RlLCBzaXplX3QgbGVhc3RfY291bnQpCisrdm9pZCBWYWxpZGF0ZUFT
VDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwg
c2l6ZV90IGxlYXN0Q291bnQpCisgeworICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgbU9w
dGlvbnMudmFsaWRhdGVOdWxsTm9kZXMpCisgICAgIHsKKyAgICAgICAgIHNpemVfdCBjaGlsZENv
dW50ID0gbm9kZS0+Z2V0Q2hpbGRDb3VudCgpOworLSAgICAgICAgaWYgKGNoaWxkQ291bnQgPCBs
ZWFzdF9jb3VudCkKKysgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwg
IlRvbyBmZXcgY2hpbGRyZW4iLCAiPHZhbGlkYXRlTnVsbE5vZGVzPiIpOworICAgICAgICAgICAg
IG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK2luZGV4IDEzMGI5OGEuLjMzYjgzZGIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK0BAIC0x
LDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4g
ICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxl
IGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJT
RCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAt
MjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKK2luZGV4IDUzMDYwMzIuLjAyNTAz
MDAgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRv
Z2VuLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4u
aAorQEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDMuMy4yLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3Vi
dCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxp
a2UgcGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQg
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVy
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRp
YWxpemVycy5jcHAKK2luZGV4IGRmYTIzYWEuLmJiYzhkY2QgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9uLAorICAgICAgICAgQVNTRVJUKHN5bWJvbE5v
ZGUpOworICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0gaW5pdC0+Z2V0UmlnaHQo
KTsKKyAKKy0gICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25z
dCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgaWYgKGV4cHJl
c3Npb24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25z
dGFudFZhbHVlKCkgfHwKKysgICAgICAgICAgICBzeW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFHbG9iYWwpCisgICAgICAgICB7CisgICAgICAgICAgICAgLy8gRm9yIHZhcmlhYmxlcyB3
aGljaCBhcmUgbm90IGNvbnN0YW50LCBkZWZlciB0aGVpciByZWFsIGluaXRpYWxpemF0aW9uIHVu
dGlsCisgICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6ZSB1bmlmb3Jtcy4KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMu
Y3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNw
cAoraW5kZXggMjg5ZGUyMS4uMmVlODIzOSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrKyBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKK0BAIC0xNyw3ICsxNyw3IEBA
IG5hbWVzcGFjZSBzaAorIG5hbWVzcGFjZQorIHsKKyAKKy1ib29sIEFyZUVtcHR5QmxvY2tzKFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CisrYm9vbCBBcmVFbXB0eUJsb2Nrcyhjb25zdCBU
SW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpOworIAorIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRl
cm1Ob2RlICpub2RlKQorIHsKK0BAIC0zNyw3ICszNyw3IEBAIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQorIAorIC8vIFJldHVybiB0cnVlIGlmIGFsbCBzdGF0ZW1lbnRzIGlu
ICJzdGF0ZW1lbnRzIiBjb25zaXN0IG9ubHkgb2YgZW1wdHkgYmxvY2tzIGFuZCBuby1vcCBzdGF0
ZW1lbnRzLgorIC8vIFJldHVybnMgdHJ1ZSBhbHNvIGlmIHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRz
LgorLWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorK2Jv
b2wgQXJlRW1wdHlCbG9ja3MoY29uc3QgVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorIHsK
KyAgICAgZm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCisg
ICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAKK2luZGV4IDQ1MDBhZWEuLmRkOGRkNTQgMTAw
NjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jl
bW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3Zl
U3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorICAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpIG92ZXJyaWRlOworICAg
ICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsK
KyAKKy0gICAgdm9pZCBvdXRwdXRTZXF1ZW5jZShUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLCBz
aXplX3Qgc3RhcnRJbmRleCk7CisrICAgIHZvaWQgb3V0cHV0U2VxdWVuY2UoY29uc3QgVEludGVy
bVNlcXVlbmNlICpzZXF1ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpOworICAgICB2b2lkIGhhbmRs
ZVByZXZpb3VzQ2FzZSgpOworIAorICAgICBUSW50ZXJtQmxvY2sgKm1TdGF0ZW1lbnRMaXN0Owor
QEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJz
ZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICpub2RlKQorICAgICByZXR1cm4g
ZmFsc2U7CisgfQorIAorLXZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91
dHB1dFNlcXVlbmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4
KQorK3ZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91dHB1dFNlcXVlbmNl
KGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXgpCisgewor
KyAgICBhdXRvICZvdXRTZXEgPSAqbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVlbmNlKCk7Cisg
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2UtPnNpemUoKTsgKytp
KQorICAgICB7CistICAgICAgICBtU3RhdGVtZW50TGlzdE91dC0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CisrICAgICAgICBvdXRTZXEucHVzaF9iYWNrKHNlcXVl
bmNlLT5hdChpKSk7CisgICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAoraW5kZXgg
NzQxNDU0MC4uMGMyYWE4ZiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAorQEAgLTIxLDEwICsy
MSwxNyBAQCBuYW1lc3BhY2Ugc2gKKyBuYW1lc3BhY2UKKyB7CisgCisrc3RydWN0IExvb3BJbmZv
CisreworKyAgICBjb25zdCBUVmFyaWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gbnVsbHB0cjsK
KysgICAgVEludGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiAgICAgICAgICAgPSBudWxscHRyOworK307CisrCisg
Y2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciA6IHB1YmxpYyBUTFZhbHVlVHJh
Y2tpbmdUcmF2ZXJzZXIKKyB7CisgICBwdWJsaWM6CistICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXIodW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAg
U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcihjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIgKmNvbmRpdGlvbnNUb1NpbXBsaWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworIAorICAgICB2b2lkIHRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CitAQCAtMzQsNiArNDEsNyBAQCBj
bGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFj
a2luZ1RyYXZlcnNlcgorICAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJy
aWRlOworKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpu
b2RlKSBvdmVycmlkZTsKKyAKKyAgICAgYm9vbCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsgfQorIAorQEAgLTQyLDE2ICs1MCwxOSBAQCBjbGFz
cyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2lu
Z1RyYXZlcnNlcgorICAgICAvLyBmb3VuZC4KKyAgICAgYm9vbCBtRm91bmRMb29wVG9DaGFuZ2U7
CisgICAgIGJvb2wgbUluc2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNzaW9uOworLSAgICBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5OworKyAgICBjb25z
dCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKm1Db25kaXRpb25zVG9TaW1wbGlmeTsKKysKKysg
IHByaXZhdGU6CisrICAgIExvb3BJbmZvIG1Mb29wOworIH07CisgCisgU2ltcGxpZnlMb29wQ29u
ZGl0aW9uc1RyYXZlcnNlcjo6U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcigKKy0gICAg
dW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAgY29uc3QgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKKyAgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSkKKyAgICAgOiBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIodHJ1ZSwg
ZmFsc2UsIGZhbHNlLCBzeW1ib2xUYWJsZSksCisgICAgICAgbUZvdW5kTG9vcFRvQ2hhbmdlKGZh
bHNlKSwKKyAgICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4cHJlc3Npb24oZmFsc2Up
LAorLSAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlmeU1hc2sp
CisrICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQorIHt9
CisgCisgLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9u
LCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdAorQEAgLTY4LDcg
Kzc5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0No
YW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFu
Z2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1Rv
U2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9CisgCitAQCAtODAs
NyArOTIsOSBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpubworICAgICBpZiAobUZvdW5kTG9vcFRv
Q2hhbmdlKQorICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNo
YW5nZSB0aGlzIGxvb3AuCisgCistICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25z
VG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRI
ZXJlKCkpOworKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKysgICAgbUZvdW5k
TG9vcFRvQ2hhbmdlID0KKysgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9k
ZSwgZ2V0UGFyZW50Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKKyAgICAgcmV0dXJu
ICFtRm91bmRMb29wVG9DaGFuZ2U7CisgfQorIAorQEAgLTkyLDcgKzEwNiw4IEBAIGJvb2wgU2lt
cGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhCisgICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCisgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KKyAK
Ky0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNoKG5v
ZGUsIGdldFBhcmVudE5vZGUoKSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUsIGdldFBhcmVudE5vZGUoKSk7CisgICAgIHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdl
OworIH0KKyAKK0BAIC0xMDQsNyArMTE5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICoKKyAg
ICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFs
cmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9D
aGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVCht
Q29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0
aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0No
YW5nZTsKKyB9CisgCitAQCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVj
bGEKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsg
IC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFT
U0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBt
Q29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExv
b3BUb0NoYW5nZTsKKyB9CisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKKyt7CisrICAg
IGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0aW9u
IHx8IG1Mb29wLmV4cHJlc3Npb24pKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtQmxvY2sgKnBh
cmVudCA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgQVNTRVJUKHBh
cmVudCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxOworKyAgICAgICAgaWYgKG1Mb29w
LmV4cHJlc3Npb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtTG9v
cC5leHByZXNzaW9uLT5kZWVwQ29weSgpKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1Mb29wLmNvbmRp
dGlvblZhcmlhYmxlKTsKKysgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorKyAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1M
b29wLmNvbmRpdGlvbi0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgc2VxLnB1
c2hfYmFjayhub2RlKTsKKysgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5wdXNoX2JhY2soTm9k
ZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShwYXJlbnQsIG5vZGUsIHN0ZDo6bW92ZShzZXEpKSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworIHZvaWQgU2ltcGxpZnlMb29w
Q29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorIHsK
KyAgICAgLy8gTWFyayB0aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJl
c3Npb24sIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKK0BAIC0xMjgsNyAr
MTY5LDcgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpCisgICAgIFNjb3BlZE5vZGVJblRyYXZlcnNhbFBhdGggYWRk
VG9QYXRoKHRoaXMsIG5vZGUpOworIAorICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4
cHJlc3Npb24gPSB0cnVlOworLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0g
IW1Db25kaXRpb25zVG9TaW1wbGlmeTsKKyAKKyAgICAgaWYgKCFtRm91bmRMb29wVG9DaGFuZ2Ug
JiYgbm9kZS0+Z2V0SW5pdCgpKQorICAgICB7CitAQCAtMTQ3LDIyICsxODgsNTQgQEAgdm9pZCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpCisgCisgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IGZh
bHNlOworIAorKyAgICBjb25zdCBMb29wSW5mbyBwcmV2TG9vcCA9IG1Mb29wOworKworICAgICBp
ZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQorICAgICB7CisgICAgICAgICBjb25zdCBUVHlwZSAqYm9v
bFR5cGUgICA9IFN0YXRpY1R5cGU6OkdldDxFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBv
cmFyeSwgMSwgMT4oKTsKKy0gICAgICAgIFRWYXJpYWJsZSAqY29uZGl0aW9uVmFyaWFibGUgPSBD
cmVhdGVUZW1wVmFyaWFibGUobVN5bWJvbFRhYmxlLCBib29sVHlwZSk7CisrICAgICAgICBtTG9v
cC5jb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJv
b2xUeXBlKTsKKysgICAgICAgIG1Mb29wLmNvbmRpdGlvbiAgICAgICAgID0gbm9kZS0+Z2V0Q29u
ZGl0aW9uKCk7CisrICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdldEV4
cHJlc3Npb24oKTsKKyAKKyAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGxvb3AgY29uZGl0aW9uIHdp
dGggYSBib29sZWFuIHZhcmlhYmxlIHRoYXQncyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0aW9uLgor
ICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAg
aWYgKGxvb3BUeXBlID09IEVMb29wV2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisr
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06Cisr
ICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorKyAgICAgICAgICAg
ICAgICAvLyBpbnRvCisrICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7CisrICAg
ICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IGJvZHk7IH0KKysgICAgICAgICAgICAgICAg
VEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KKysgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlh
YmxlLCBtTG9vcC5jb25kaXRpb24pOworKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJ
blBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworKworKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFy
aWFibGUpKTsKKysKKysgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQg
Y29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0
aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAg
ICAvLyAgIHdoaWxlIChleHByKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8gaW50bwor
ICAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgICAv
LyAgIHdoaWxlIChzMCkgeyB7IGJvZHk7IH0gczAgPSBleHByOyB9CisrICAgICAgICAgICAgICAg
IC8vCisrICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNm
b3JtZWQgaW50bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24g
PQorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRp
b25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOworKyAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9u
VmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgIGluc2VydFN0YXRl
bWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisgCisgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKK0BAIC0xNzEs
MjggKzI0NCw2MCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFj
aygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZh
cmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKyAKKyAgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQg
bWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
ZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3Rp
bGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVh
dGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkp
OworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShj
b25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24o
Q3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAgICAg
ICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcERv
V2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9u
KTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUo
KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUgc3Rh
dGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisrICAgICAgICAgICAgICAgIG1Mb29w
LmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
ZG8geworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKysgICAgICAgICAgICAgICAgLy8g
ICB9IHdoaWxlIChleHByKTsKKysgICAgICAgICAgICAgICAgLy8gaW50bworKyAgICAgICAgICAg
ICAgICAvLyAgIGJvb2wgczAgPSBleHByOworKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKysg
ICAgICAgICAgICAgICAgLy8gICAgIGJvZHk7CisrICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoczApOworKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVj
bGFyYXRpb24gPQorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisrICAgICAg
ICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlv
bik7CisrCisrICAgICAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3lt
Ym9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSkpOworKworKyAgICAgICAgICAgICAgICAv
LyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAg
ICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRyOworKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgICAv
LyAgICAgYm9keTsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAg
ICAgICAgICAgICAgLy8gaW50bworLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IHRydWU7Cisr
ICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMDsKKyAgICAgICAgICAgICAgICAgLy8gICBkbyB7
CisgICAgICAgICAgICAgICAgIC8vICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8g
ICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7CisrICAg
ICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50
bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorLSAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJs
ZSwgQ3JlYXRlQm9vbE5vZGUodHJ1ZSkpOworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVt
cERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7Cisg
CisgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxv
Y2soKTsKK0BAIC0yMDEsMTUgKzMwNiw2OCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVl
bmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnRO
b2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkp
OworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNv
bmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAKKyAgICAgICAgICAgICAgICAg
Ly8gQ2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2Ug
aXQgbWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUg
dG8gZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwg
c3RpbGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBj
cmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0Jv
ZHkpOworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9k
ZShjb25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRp
b24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAg
ICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9v
cEZvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIW1Mb29wLmNvbmRpdGlvbikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IENyZWF0ZUJv
b2xOb2RlKHRydWUpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBUSW50ZXJtTG9v
cCAqd2hpbGVMb29wOworKyAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAg
ICAgICAgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICpsb29wU2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysKKysgICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+
cHVzaF9iYWNrKG5vZGUtPmdldEluaXQoKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAg
ICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRo
ZSBsb29wLgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAg
IC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAg
IC8vIGludG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAg
ICBpbml0OworKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKGV4cHIpIHsKKysgICAgICAg
ICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4
cHJCOworKyAgICAgICAgICAgICAgICAvLyAgICAgfQorKyAgICAgICAgICAgICAgICAvLyAgIH0K
KysgICAgICAgICAgICAgICAgLy8KKysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0
ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJC
OyBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGlu
IHRoZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29w
Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dEJvZHkoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgd2hpbGVM
b29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRo
ZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoZXhwcikgeyB3
aGlsZUxvb3BCb2R5IH0iCisrICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9CisrICAgICAgICAg
ICAgICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29u
ZGl0aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKysKKysgICAgICAgICAgICAgICAgLy8g
TWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAg
ICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29u
ZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgor
QEAgLTIyMSwzMSArMzc5LDU2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
cjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAvLyAg
ICAgd2hpbGUgKHMwKSB7CisgICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKy0gICAgICAgICAgICAvLyAgICAgICBzMCA9
IGV4cHI7CisgICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgIC8vICAg
fQorLSAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAgPSBuZXcg
VEludGVybUJsb2NrKCk7CistICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVT
ZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysgICAgICAgICAgICAgICAgLy8K
KysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1l
ZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKyAKKy0gICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAg
ICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAg
ICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFi
bGUsIG1Mb29wLmNvbmRpdGlvbikpOworKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9k
eTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKysgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3
aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGxv
b3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKKysgICAgICAgICAg
ICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5n
ZXRCb2R5KCkpOworICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gSW5zZXJ0
ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsiIG90aGVy
d2lzZQorLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBu
dWxscHRyOworLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKysgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisrICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgIHsKKy0g
ICAgICAgICAgICAgICAgY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBub2RlLT5nZXRDb25kaXRpb24o
KS0+ZGVlcENvcHkoKTsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNl
cXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxv
b3BXaGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVs
bHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHkpOworKworKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVu
dCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IENyZWF0
ZUJvb2xOb2RlKHRydWUpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xh
cmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKKysg
ICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29w
LgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
Zm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vIGlu
dG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAgICBpbml0
OworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9vbCBzMCA9IGV4cHI7CisrICAgICAgICAgICAg
ICAgIC8vICAgICB3aGlsZSAoczApIHsKKysgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5
OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOworKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisrICAgICAgICAgICAgICAgIC8vICAgICB9CisrICAgICAgICAg
ICAgICAgIC8vICAgfQorKyAgICAgICAgICAgICAgICAvLworKyAgICAgICAgICAgICAgICAvLyBM
b2NhbCBjYXNlIHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisrICAgICAgICAgICAg
ICAgIC8vICAgZXhwckI7IHMwID0gZXhwcjsgY29udGludWU7CisgCisrICAgICAgICAgICAgICAg
IC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAgICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXRE
ZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikp
OworICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdoaWxlIGxv
b3AKKyAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0gbmV3IFRJ
bnRlcm1CbG9jaygpOworICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorQEAg
LTI1OCwyMyArNDQxLDIxIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6
dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24o
KSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9
IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25k
aXRpb24oKSkKKy0gICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCkt
PmRlZXBDb3B5KCkpKTsKKysgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3NpZ25tZW50
Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uLT5kZWVwQ29weSgp
KSk7CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29wQm9k
eSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxvb3BX
aGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVsbHB0
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxl
KHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKKy0gICAgICAgICAgICBUSW50ZXJtTG9vcCAqd2hpbGVM
b29wID0KKy0gICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1Mb29wKEVMb29wV2hpbGUsIG51bGxw
dHIsIENyZWF0ZVRlbXBTeW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSwKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOworICAgICAgICAg
ICAgIGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHdoaWxlTG9vcCk7CisgICAg
ICAgICAgICAgcXVldWVSZXBsYWNlbWVudChsb29wU2NvcGUsIE9yaWdpbmFsTm9kZTo6SVNfRFJP
UFBFRCk7CisgCisgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhpcyB0aGUgb2xkIGJvZHkgbm9kZSB3
aWxsIGJlIHRyYXZlcnNlZCBhbmQgbG9vcHMgaW5zaWRlIGl0IG1heSBiZQorLSAgICAgICAgICAg
IC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdp
bGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlciB0aGUKKy0gICAgICAgICAgICAvLyB0cmFuc2Zv
cm1hdGlvbiB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRl
IGl0IGRvZXNuJ3QgbmVlZCB0bworLSAgICAgICAgICAgIC8vIGtub3cgdGhlIGV4YWN0IHBvc3Qt
dHJhbnNmb3JtIHBhdGggdG8gaXQuCisrICAgICAgICAgICAgLy8gdHJhbnNmb3JtZWQuIFRoaXMg
aXMgZmluZSwgc2luY2UgdGhlIG9sZCBib2R5IG5vZGUgd2lsbCBzdGlsbCBiZSBpbiB0aGUgQVNU
IGFmdGVyCisrICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQg
aGVyZSwgYW5kIHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorKyAgICAgICAg
ICAgIC8vIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0aCB0byBpdC4K
KyAgICAgICAgIH0KKyAgICAgfQorIAorQEAgLTI4MywxNiArNDY0LDI2IEBAIHZvaWQgU2ltcGxp
ZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2Rl
KQorICAgICAvLyBXZSB0cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBs
b29wIGlzIHRyYW5zZm9ybWVkLgorICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAg
bm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKysKKysgICAgbUxvb3AgPSBwcmV2TG9v
cDsKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlCisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zKFRDb21waWxlciAqY29tcGlsZXIsIFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlKQorK3sKKysgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0
cmF2ZXJzZXIobnVsbHB0ciwgc3ltYm9sVGFibGUpOworKyAgICByb290LT50cmF2ZXJzZSgmdHJh
dmVyc2VyKTsKKysgICAgcmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVlKGNvbXBpbGVyLCByb290
KTsKKyt9CisrCisgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxp
ZnlNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJv
bFRhYmxlKQorIHsKKy0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJz
ZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7CisrICAgIEludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlciBjb25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlm
eU1hc2spOworKyAgICBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIHRyYXZlcnNlcigm
Y29uZGl0aW9uc1RvU2ltcGxpZnksIHN5bWJvbFRhYmxlKTsKKyAgICAgcm9vdC0+dHJhdmVyc2Uo
JnRyYXZlcnNlcik7CisgICAgIHJldHVybiB0cmF2ZXJzZXIudXBkYXRlVHJlZShjb21waWxlciwg
cm9vdCk7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAoraW5kZXggNGNkZWRlNi4uNjhiOThmOCAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENv
bmRpdGlvbnMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxp
ZnlMb29wQ29uZGl0aW9ucy5oCitAQCAtMTksNiArMTksMTAgQEAgY2xhc3MgVENvbXBpbGVyOwor
IGNsYXNzIFRJbnRlcm1Ob2RlOworIGNsYXNzIFRTeW1ib2xUYWJsZTsKKyAKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworKworIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1w
bGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbmRp
dGlvbnNUb1NpbXBsaWZ5LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05v
ZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFjNmRlMTgKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUu
aAorQEAgLTAsMCArMSwyMTIgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisrI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTUFTTk9ERV9IXworKworKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUu
aCIKKysKKysjaW5jbHVkZSA8dXRpbGl0eT4KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrbmFt
ZXNwYWNlIHByaXYKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFzTm9k
ZQorK3t9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtTm9kZT4KKyt7
CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUg
Km5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFz
Tm9kZTxUSW50ZXJtVHlwZWQ+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1U
eXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1w
bGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN5bWJvbD4KKyt7CisrICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
Q29uc3RhbnRVbmlvbj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUNvbnN0
YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBub2RlID8gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUZ1bmN0aW9uUHJvdG90
eXBlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2Rl
ID8gbm9kZS0+Z2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0K
Kyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkgOiBudWxscHRy
OworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN3
aXp6bGU+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PmdldEFzU3dpenpsZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQmluYXJ5PgorK3sKKysgICAgc3RhdGljIEFOR0xF
X0lOTElORSBUSW50ZXJtQmluYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpIDogbnVsbHB0cjsK
KysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1VbmFy
eT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFz
VW5hcnlOb2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0
cnVjdCBBc05vZGU8VEludGVybVRlcm5hcnk+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVGVybmFyeU5vZGUoKSA6IG51bGxwdHI7CisrICAg
IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtSWZFbHNlPgor
K3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRlcm1O
b2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzSWZF
bHNlTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Td2l0Y2g+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBub2RlID8gbm9kZS0+Z2V0QXNTd2l0Y2hOb2RlKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUNhc2U+CisreworKyAg
ICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ2FzZU5vZGUoKSA6
IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkg
OiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8
VEludGVybUFnZ3JlZ2F0ZT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFn
Z3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307Cisr
CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1CbG9jaz4KKyt7CisrICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmxvY2soKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9kZSAqbm9k
ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0dsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9uTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxh
dGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1EZWNsYXJhdGlvbj4KKyt7CisrICAgIHN0YXRp
YyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBB
c05vZGU8VEludGVybUxvb3A+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1M
b29wICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzTG9vcE5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3Rl
bXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQnJhbmNoPgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0lOTElORSBUSW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQnJhbmNoTm9kZSgpIDogbnVs
bHB0cjsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHByaXYKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9JTkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2Rl
KQorK3sKKysgICAgcmV0dXJuIHByaXY6OkFzTm9kZTxUPjo6ZXhlYyhub2RlKTsKKyt9CisrCisr
fSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
RUVVVElMX0lOVEVSTUFTTk9ERV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK2luZGV4
IGQwOGMzODYuLmFjYzc4OTIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK0BAIC02
NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFtaWNJbmRl
eGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCisgICAgIHJldHVybiBJc0R5bmFt
aWNJbmRleGluZ09mVmVjdG9yT3JNYXRyaXgobm9kZSkgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N3aXp6bGVOb2RlKCk7CisgfQorIAorLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaEludGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2Rl
KQorK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJbnRlcm1C
aW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsKKyAgICAgaWYg
KChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDApCisgICAgIHsKK0BAIC04
Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFs
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCisgICAgIHJldHVybiBmYWxzZTsK
KyB9CisgCistYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkKKytib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVu
YXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtBcnJheUxlbmd0aE1ldGhv
ZCkgIT0gMCkKKyAgICAgeworQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKKyAgICAgcmV0dXJuIGZhbHNlOwor
IH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFy
eSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnRO
b2RlKSBjb25zdAorIHsKKyAgICAgLy8gTC12YWx1ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBu
ZWVkZWQgdG8gY2hlY2sgZm9yIGR5bmFtaWMgaW5kZXhpbmcgaW4gTC12YWx1ZS4KKyAgICAgLy8g
VHJhdmVyc2VycyB0aGF0IGRvbid0IHRyYWNrIGwtdmFsdWVzIGNhbiBzdGlsbCB1c2UgdGhpcyBj
bGFzcyBhbmQgbWF0Y2ggYmluYXJ5IG5vZGVzIHdpdGgKK0BAIC0xMTAsNyArMTEwLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2QKKyAKKyBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybU5vZGUgKnBhcmVudE5vZGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpIGNvbnN0
CisgeworICAgICBpZiAobWF0Y2hJbnRlcm5hbChub2RlLCBwYXJlbnROb2RlKSkKKyAgICAgewor
QEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2go
VEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25z
dAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDAp
CisgICAgIHsKK0BAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnQKKyAg
ICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybVRlcm5hcnkgKm5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFz
ayAmIGtVbmZvbGRlZFNob3J0Q2lyY3VpdEV4cHJlc3Npb24pICE9IDApCisgICAgIHsKK0BAIC0x
NzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRl
cm1UZXJuYXJ5ICpub2RlKQorICAgICByZXR1cm4gZmFsc2U7CisgfQorIAorLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpCisrYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSkgY29uc3QKKyB7CisgICAgIGlmICgobU1hc2sgJiBrTXVsdGlEZWNsYXJhdGlvbikgIT0gMCkK
KyAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAoraW5kZXggZTljNGJjZi4uNmYzZDg3MyAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXIuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oCitAQCAtMjgsNTIgKzI4LDUyIEBAIGNsYXNzIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcgorICAgICBzdGF0aWMgYm9vbCBJc0R5bmFtaWNJbmRleGlu
Z09mVmVjdG9yT3JNYXRyaXgoVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAgIHN0YXRpYyBib29s
IElzRHluYW1pY0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsK
KyAKKy0gICAgZW51bSBQYXR0ZXJuVHlwZQorKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWdu
ZWQgaW50CisgICAgIHsKKyAgICAgICAgIC8vIE1hdGNoZXMgZXhwcmVzc2lvbnMgdGhhdCBhcmUg
dW5mb2xkZWQgdG8gaWYgc3RhdGVtZW50cyBieSBVbmZvbGRTaG9ydENpcmN1aXRUb0lmCistICAg
ICAgICBrVW5mb2xkZWRTaG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorKyAgICAgICAg
a1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbiA9IDF1IDw8IDB1LAorIAorICAgICAgICAg
Ly8gTWF0Y2hlcyBleHByZXNzaW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIHNpbXBsZSBzdGF0ZW1lbnRzIHdoZXJlIGEKKyAgICAgICAgIC8vIGNvbnN0cnVjdG9y
IG9yIGZ1bmN0aW9uIGNhbGwgcmVzdWx0IGlzIGFzc2lnbmVkLgorLSAgICAgICAga0V4cHJlc3Np
b25SZXR1cm5pbmdBcnJheSA9IDB4MDAwMSA8PCAxLAorKyAgICAgICAga0V4cHJlc3Npb25SZXR1
cm5pbmdBcnJheSA9IDF1IDw8IDF1LAorIAorICAgICAgICAgLy8gTWF0Y2hlcyBkeW5hbWljIGlu
ZGV4aW5nIG9mIHZlY3RvcnMgb3IgbWF0cmljZXMgaW4gbC12YWx1ZXMuCistICAgICAgICBrRHlu
YW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisrICAg
ICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMXUgPDwgMnUs
CisgCisgICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUg
ZGVjbGFyZWQgdmFyaWFibGVzLgorLSAgICAgICAga011bHRpRGVjbGFyYXRpb24gPSAweDAwMDEg
PDwgMywKKysgICAgICAgIGtNdWx0aURlY2xhcmF0aW9uID0gMXUgPDwgM3UsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyBvZiBhcnJheXMuCistICAgICAgICBrQXJyYXlEZWNs
YXJhdGlvbiA9IDB4MDAwMSA8PCA0LAorKyAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAxdSA8
PCA0dSwKKyAKKyAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIHN0cnVjdHMgd2hl
cmUgdGhlIHN0cnVjdCB0eXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lLgorLSAgICAgICAga05hbWVs
ZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwKKysgICAgICAgIGtOYW1lbGVzc1N0
cnVjdERlY2xhcmF0aW9uID0gMXUgPDwgNXUsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGFycmF5
IGxlbmd0aCgpIG1ldGhvZC4KKy0gICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDB4MDAwMSA8
PCA2LAorKyAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9kID0gMXUgPDwgNnUsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGEgdmVjdG9yIG9yIG1hdHJpeCBjb25zdHJ1Y3RvciB3aG9zZSBhcmd1bWVu
dHMgYXJlIHNjYWxhcml6ZWQgYnkgdGhlCisgICAgICAgICAvLyBTSF9TQ0FMQVJJWkVfVkVDX09S
X01BVF9DT05TVFJVQ1RPUl9BUkdVTUVOVFMgd29ya2Fyb3VuZC4KKy0gICAgICAgIGtTY2FsYXJp
emVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisrICAgICAgICBrU2NhbGFyaXpl
ZFZlY09yTWF0Q29uc3RydWN0b3IgPSAxdSA8PCA3dSwKKyAgICAgfTsKKyAgICAgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKKyAKKy0gICAgYm9vbCBt
YXRjaChUSW50ZXJtVW5hcnkgKm5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAq
bm9kZSkgY29uc3Q7CisgCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKKyAKKyAgICAgLy8gVXNlIHRoaXMg
dmVyc2lvbiBmb3IgY2hlY2tpbmcgYmluYXJ5IG5vZGUgbWF0Y2hlcyBpbiBjYXNlIHlvdSdyZSB1
c2luZyBmbGFnCisgICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUsIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpOworKyAgICBib29sIG1hdGNoKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlLCBib29sIGlzTFZhbHVl
UmVxdWlyZWRIZXJlKSBjb25zdDsKKyAKKy0gICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRl
ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSk7CistICAgIGJvb2wgbWF0Y2goVEludGVy
bVRlcm5hcnkgKm5vZGUpOworLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSk7CisrICAgIGJvb2wgbWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVEludGVybU5vZGUg
KnBhcmVudE5vZGUpIGNvbnN0OworKyAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2Rl
KSBjb25zdDsKKysgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0
OworIAorICAgcHJpdmF0ZToKKyAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOworIAorLSAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpOworKyAgICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwg
VEludGVybU5vZGUgKnBhcmVudE5vZGUpIGNvbnN0OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNl
IHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVfdXRpbC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZV91dGlsLmNwcAoraW5kZXggNmFiMTNiYS4uZDNlMWZjYSAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcAorQEAg
LTIyNCw2ICsyMjQsNTAgQEAgVFZhcmlhYmxlICpEZWNsYXJlVGVtcFZhcmlhYmxlKFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUsCisgICAgIHJldHVybiB2YXJpYWJsZTsKKyB9CisgCisrc3RkOjpw
YWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gRGVjbGFyZVN0cnVjdHVy
ZSgKKysgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRh
YmxlLAorKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisrICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyLAorKyAgICBjb25zdCBUTWVtb3J5UXVhbGlmaWVyICZtZW1vcnlRdWFsaWZpZXIsCisrICAg
IHVpbnQzMl90IGFycmF5U2l6ZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICpzdHJ1Y3RJbnN0YW5jZU5hbWUp
CisreworKyAgICBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPQorKyAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoc3ltYm9sVGFibGUsIHN0cnVjdFR5cGVOYW1lLCBmaWVsZExpc3QsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKworKyAgICBhdXRvIG1ha2VTdHJ1Y3R1cmVUeXBlID0gWyZdKGJvb2wg
aXNTdHJ1Y3RTcGVjaWZpZXIpIHsKKysgICAgICAgIFRUeXBlICpzdHJ1Y3R1cmVUeXBlID0gbmV3
IFRUeXBlKHN0cnVjdHVyZSwgaXNTdHJ1Y3RTcGVjaWZpZXIpOworKyAgICAgICAgc3RydWN0dXJl
VHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisrICAgICAgICBzdHJ1Y3R1cmVUeXBlLT5z
ZXRNZW1vcnlRdWFsaWZpZXIobWVtb3J5UXVhbGlmaWVyKTsKKysgICAgICAgIGlmIChhcnJheVNp
emUgPiAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHVyZVR5cGUtPm1ha2VBcnJh
eShhcnJheVNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisrICAgIH07CisrCisrICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKysKKysg
ICAgVFZhcmlhYmxlICp0eXBlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwga0VtcHR5
SW1tdXRhYmxlU3RyaW5nLCBtYWtlU3RydWN0dXJlVHlwZSh0cnVlKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisrICAgIGluc2Vy
dFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue3R5cGVWYXJ9KTsKKysK
KysgICAgVFZhcmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisrICAgIGlmIChzdHJ1Y3RJ
bnN0YW5jZU5hbWUpCisrICAgIHsKKysgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJs
ZShzeW1ib2xUYWJsZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFs
c2UpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50
ZXJtRGVjbGFyYXRpb257aW5zdGFuY2VWYXJ9KTsKKysgICAgfQorKworKyAgICBzaXplX3QgZmly
c3RGdW5jdGlvbkluZGV4ID0gRmluZEZpcnN0RnVuY3Rpb25EZWZpbml0aW9uSW5kZXgocm9vdCk7
CisrICAgIHJvb3QtPmluc2VydENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRT
ZXF1ZW5jZSk7CisrCisrICAgIHJldHVybiB7dHlwZVZhciwgaW5zdGFuY2VWYXJ9OworK30KKysK
KyBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
RmllbGRMaXN0ICpmaWVsZExpc3QsCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCitpbmRleCAzOWI4NmRkLi5mNWQxYzkzIDEwMDY0
NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRp
bC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91
dGlsLmgKK0BAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVUZW1wVmFyaWFibGUo
VFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICppbml0aWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKKytzdGQ6OnBhaXI8Y29u
c3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJsZSAqPiBEZWNsYXJlU3RydWN0dXJlKAorKyAg
ICBUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisr
ICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKKysgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisr
ICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKysgICAgdWludDMy
X3QgYXJyYXlTaXplLAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgJnN0cnVjdFR5cGVOYW1l
LAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CisgY29u
c3QgVFZhcmlhYmxlICpEZWNsYXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxk
TGlzdCAqZmllbGRMaXN0LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw
MDAuLmQ4ODM0NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorQEAgLTAsMCArMSwxMDI4IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgPGFsZ29yaXRobT4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Fz
Tm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmgiCisrCisrI2RlZmluZSBHVUFSRDIoY29uZCwgZmFpbFZhbCkgXAorKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICBpZiAoIShjb25kKSkgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gZmFpbFZhbDsgICBcCisrICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9IHdoaWxlIChmYWxzZSkKKysKKysjZGVmaW5l
IEdVQVJEKGNvbmQpIEdVQVJEMihjb25kLCBudWxscHRyKQorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9v
bCBBbGxCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxlKQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFj
ayAmIG5lZWRsZSkgPT0gbmVlZGxlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9vbCBBbnlCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxl
KQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFjayAmIG5lZWRsZSkgIT0gMDsKKyt9CisrCisrLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChCYXNlUmVzdWx0ICZvdGhlcikKKysgICAgOiBtQWN0aW9uKG90aGVyLm1BY3Rpb24p
LAorKyAgICAgIG1WaXNpdChvdGhlci5tVmlzaXQpLAorKyAgICAgIG1TaW5nbGUob3RoZXIubVNp
bmdsZSksCisrICAgICAgbU11bHRpKHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpKQorK3t9CisrCisr
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6UmVwbGFjZVNpbmdsZSks
IG1WaXNpdCh2aXNpdCksIG1TaW5nbGUoJm5vZGUpCisre30KKysKKytUSW50ZXJtUmVidWlsZDo6
QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0
KQorKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6
RHJvcCksCisrICAgICAgbVZpc2l0KG5vZGUgPyB2aXNpdCA6IFZpc2l0Qml0czo6TmVpdGhlciks
CisrICAgICAgbVNpbmdsZShub2RlKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1
bHQ6OkJhc2VSZXN1bHQobnVsbHB0cl90KQorKyAgICA6IG1BY3Rpb24oQWN0aW9uOjpEcm9wKSwg
bVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikKKyt7fQorKworK1RJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisrICAgIDogbUFjdGlv
bihBY3Rpb246OkZhaWwpLCBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwgbVNpbmdsZShudWxs
cHRyKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6
UmVwbGFjZU11bHRpKSwKKysgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKysgICAg
ICBtU2luZ2xlKG51bGxwdHIpLAorKyAgICAgIG1NdWx0aShzdGQ6Om1vdmUobm9kZXMpKQorK3t9
CisrCisrdm9pZCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwoQmFz
ZVJlc3VsdCAmb3RoZXIpCisreworKyAgICBtQWN0aW9uID0gb3RoZXIubUFjdGlvbjsKKysgICAg
bVZpc2l0ICA9IG90aGVyLm1WaXNpdDsKKysgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisr
ICAgIG1NdWx0aSAgPSBzdGQ6Om1vdmUob3RoZXIubU11bHRpKTsKKyt9CisrCisrVEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6
dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisreworKyAgICBhdXRvIGl0ID0gc3RkOjpy
ZW1vdmUobm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworKyAgICBub2Rlcy5l
cmFzZShpdCwgbm9kZXMuZW5kKCkpOworKyAgICByZXR1cm4gc3RkOjptb3ZlKG5vZGVzKTsKKyt9
CisrCisrYm9vbCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNGYWlsKCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6RmFpbDsKKyt9CisrCisrYm9vbCBUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNEcm9wKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBt
QWN0aW9uID09IEFjdGlvbjo6RHJvcDsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjpCYXNlUmVzdWx0OjpzaW5nbGUoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIG1TaW5nbGU7
CisrfQorKworK2NvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdDo6bXVsdGkoKSBjb25zdAorK3sKKysgICAgaWYgKG1BY3Rpb24gPT0gQWN0
aW9uOjpSZXBsYWNlTXVsdGkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbU11bHRpOworKyAg
ICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworKworK3VzaW5nIFByZVJlc3VsdCA9IFRJbnRlcm1SZWJ1aWxkOjpQcmVSZXN1bHQ7CisrCisr
UHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkg
OiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlLCBWaXNpdEJpdHMgdmlzaXQpIDogQmFzZVJlc3VsdChub2RlLCB2aXNpdCkg
e30KKytQcmVSZXN1bHQ6OlByZVJlc3VsdChudWxscHRyX3QpIDogQmFzZVJlc3VsdChudWxscHRy
KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChGYWlsKCkpIHt9
CisrCisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1
bHQob3RoZXIpIHt9CisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3RoZXIpIDog
QmFzZVJlc3VsdChvdGhlcikge30KKysKKyt2b2lkIFByZVJlc3VsdDo6b3BlcmF0b3I9KFByZVJl
c3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVi
dWlsZDo6UG9zdFJlc3VsdDsKKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFRJbnRlcm1Ob2Rl
ICZub2RlKSA6IEJhc2VSZXN1bHQobm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyKSB7fQorK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CisrUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChudWxscHRyX3Qp
IDogQmFzZVJlc3VsdChudWxscHRyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoRmFpbCkg
OiBCYXNlUmVzdWx0KEZhaWwoKSkge30KKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFBvc3RS
ZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RS
ZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CisrCisrdm9p
ZCBQb3N0UmVzdWx0OjpvcGVyYXRvcj0oUG9zdFJlc3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92
ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K1RJbnRlcm1SZWJ1aWxkOjpUSW50ZXJtUmVidWlsZChUQ29tcGlsZXIgJmNvbXBpbGVyLCBib29s
IHByZVZpc2l0LCBib29sIHBvc3RWaXNpdCkKKysgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAor
KyAgICAgIG1TeW1ib2xUYWJsZShjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSwKKysgICAgICBt
UHJlVmlzaXQocHJlVmlzaXQpLAorKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQorK3sKKysg
ICAgQVNTRVJUKHByZVZpc2l0IHx8IHBvc3RWaXNpdCk7CisrfQorKworK1RJbnRlcm1SZWJ1aWxk
Ojp+VEludGVybVJlYnVpbGQoKQorK3sKKysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnZhbHVlKTsK
KysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnRhaWwpOworK30KKysKKytjb25zdCBURnVuY3Rpb24g
KlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0CisreworKyAgICByZXR1
cm4gbVBhcmVudEZ1bmM7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6Z2V0
UGFyZW50Tm9kZShzaXplX3Qgb2Zmc2V0KSBjb25zdAorK3sKKysgICAgQVNTRVJUKG1Ob2RlU3Rh
Y2sudGFpbCk7CisrICAgIGF1dG8gcGFyZW50ID0gKm1Ob2RlU3RhY2sudGFpbDsKKysgICAgd2hp
bGUgKG9mZnNldCA+IDApCisrICAgIHsKKysgICAgICAgIC0tb2Zmc2V0OworKyAgICAgICAgQVNT
RVJUKHBhcmVudC50YWlsKTsKKysgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFpbDsKKysgICAg
fQorKyAgICByZXR1cm4gcGFyZW50LnZhbHVlOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxk
OjpyZWJ1aWxkUm9vdChUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIXJlYnVpbGRJ
blBsYWNlKHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysg
ICAgcmV0dXJuIG1Db21waWxlci52YWxpZGF0ZUFTVCgmcm9vdCk7CisrfQorKworK2Jvb2wgVElu
dGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCisrewor
KyAgICByZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1
aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4KKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAm
bm9kZSkKKyt7CisrICAgIGF1dG8gKm5ld05vZGUgPSB0cmF2ZXJzZUFueUFzPE5vZGU+KG5vZGUp
OworKyAgICBpZiAoIW5ld05vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3Tm9kZSAhPSAmbm9kZSkKKysgICAgeworKyAgICAgICAgKm5v
ZGUuZ2V0U2VxdWVuY2UoKSA9IHN0ZDo6bW92ZSgqbmV3Tm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGQoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICByZXR1cm4gdHJhdmVy
c2VBbnkobm9kZSk7CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMo
VEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJzZUFu
eShub2RlKSk7CisrICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZhaWwgfHwgIXJl
c3VsdC5tU2luZ2xlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgfQor
KyAgICByZXR1cm4gYXNOb2RlPE5vZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyt9CisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrYm9vbCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBbnlBcyhU
SW50ZXJtTm9kZSAmbm9kZSwgTm9kZSAqJm91dCkKKyt7CisrICAgIFBvc3RSZXN1bHQgcmVzdWx0
KHRyYXZlcnNlQW55KG5vZGUpKTsKKysgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlvbjo6
RmFpbCB8fCByZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrICAgIG91dCA9IGFzTm9k
ZTxOb2RlPihyZXN1bHQubVNpbmdsZSk7CisrICAgIHJldHVybiBvdXQ7CisrfQorKworK2Jvb2wg
VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgY2hpbGRyZW4gPSBub2RlLmdl
dFNlcXVlbmNlKCk7CisrICAgIEFTU0VSVChjaGlsZHJlbik7CisrICAgIFRJbnRlcm1TZXF1ZW5j
ZSBuZXdDaGlsZHJlbjsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqY2hpbGQgOiAqY2hpbGRy
ZW4pCisrICAgIHsKKysgICAgICAgIEFTU0VSVChjaGlsZCk7CisrICAgICAgICBQb3N0UmVzdWx0
IHJlc3VsdCh0cmF2ZXJzZUFueSgqY2hpbGQpKTsKKysKKysgICAgICAgIHN3aXRjaCAocmVzdWx0
Lm1BY3Rpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VT
aW5nbGU6CisrICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2hfYmFjayhyZXN1bHQubVNp
bmdsZSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0
aW9uOjpSZXBsYWNlTXVsdGk6CisrICAgICAgICAgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5l
d05vZGUgOiByZXN1bHQubU11bHRpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICBpZiAobmV3Tm9kZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoX2JhY2sobmV3Tm9kZSk7CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OkRyb3A6CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpGYWlsOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgKmNoaWxkcmVuID0g
c3RkOjptb3ZlKG5ld0NoaWxkcmVuKTsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrc3RydWN0IFRJbnRlcm1SZWJ1aWxkOjpOb2RlU3Rh
Y2tHdWFyZAorK3sKKysgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gb2xkTm9kZVN0YWNrOwor
KyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrOworKyAgICBOb2RlU3RhY2tH
dWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorKyAgICAgICAgOiBvbGRO
b2RlU3RhY2sobm9kZVN0YWNrKSwgbm9kZVN0YWNrKG5vZGVTdGFjaykKKysgICAge30KKysgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KKyt9OworKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmln
aW5hbE5vZGUpCisreworKyAgICBQcmVSZXN1bHQgcHJlUmVzdWx0ID0gdHJhdmVyc2VQcmUob3Jp
Z2luYWxOb2RlKTsKKysgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKysgICAgeworKyAgICAg
ICAgQVNTRVJUKHByZVJlc3VsdC5tVmlzaXQgPT0gVmlzaXRCaXRzOjpOZWl0aGVyKTsKKysgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKysgICAgfQorKworKyAgICBUSW50ZXJt
Tm9kZSAqY3Vyck5vZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKysgICAgY29uc3QgVmlz
aXRCaXRzIHZpc2l0ICAgICAgID0gcHJlUmVzdWx0Lm1WaXNpdDsKKysgICAgY29uc3QgTm9kZVR5
cGUgY3Vyck5vZGVUeXBlID0gZ2V0Tm9kZVR5cGUoKmN1cnJOb2RlKTsKKysKKysgICAgY3Vyck5v
ZGUgPSB0cmF2ZXJzZUNoaWxkcmVuKGN1cnJOb2RlVHlwZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5v
ZGUsIHZpc2l0KTsKKysgICAgaWYgKCFjdXJyTm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IEZhaWwoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJhdmVyc2VQb3N0KGN1cnJOb2RlVHlw
ZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5vZGUsIHZpc2l0KTsKKyt9CisrCisrUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVByZShUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlKQorK3sK
KysgICAgaWYgKCFtUHJlVmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7b3JpZ2luYWxO
b2RlLCBWaXNpdEJpdHM6OkJvdGh9OworKyAgICB9CisrCisrICAgIE5vZGVTdGFja0d1YXJkIGd1
YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZvcmlnaW5hbE5vZGUsICZndWFy
ZC5vbGROb2RlU3RhY2t9OworKworKyAgICBjb25zdCBOb2RlVHlwZSBvcmlnaW5hbE5vZGVUeXBl
ID0gZ2V0Tm9kZVR5cGUob3JpZ2luYWxOb2RlKTsKKysKKysgICAgc3dpdGNoIChvcmlnaW5hbE5v
ZGVUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1i
b2xQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5v
ZGVUeXBlOjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50
VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRGdW5jdGlvblByb3RvdHlwZVByZSgqb3JpZ2luYWxOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5
cGVOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZl
OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVByZSgqb3Jp
Z2luYWxOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFy
eToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRCaW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRB
c0JpbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1Rlcm5hcnlO
b2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRJZkVsc2VQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUHJl
KCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5p
dGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorKyAgICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFy
YXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25QcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxv
b3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFByZSgqb3JpZ2luYWxOb2RlLmdldEFz
TG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0QnJhbmNoUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VD
aGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjdXJyTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlzaXRCaXRzIHZpc2l0KQorK3sKKysgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJp
dHM6OkNoaWxkcmVuKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKysgICAg
fQorKworKyAgICBpZiAoQW55Qml0cyh2aXNpdCwgVmlzaXRCaXRzOjpDaGlsZHJlblJlcXVpcmVz
U2FtZSkgJiYgJm9yaWdpbmFsTm9kZSAhPSAmY3Vyck5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAmY3Vyck5vZGU7CisrICAgIH0KKysKKysgICAgTm9kZVN0YWNrR3VhcmQgZ3VhcmQobU5v
ZGVTdGFjayk7CisrICAgIG1Ob2RlU3RhY2sgPSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0
YWNrfTsKKysKKysgICAgc3dpdGNoIChjdXJyTm9kZVR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgTm9kZVR5cGU6OlVua25vd246CisrICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKysgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
Q29uc3RhbnRVbmlvbjoKKysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25Qcm90b3R5cGU6CisrICAgICAgICAgICAgcmV0dXJuICZj
dXJyTm9kZTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCaW5hcnk6Cisr
ICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFz
QmluYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisrICAgICAg
ICAgICAgcmV0dXJuIHRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1Rlcm5h
cnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5v
ZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpJZkVsc2U6CisrICAgICAgICAgICAgcmV0
dXJuIHRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKysgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTd2l0Y2hDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNl
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvbkRlZmluaXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRnVu
Y3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9u
KCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorKyAgICAgICAgICAgIHJl
dHVybiB0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgp
KTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB0
cmF2ZXJzZUJsb2NrQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorKyAgICAg
ICAgICAgICAgICAqY3Vyck5vZGUuZ2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUo
KSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0
aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAgICAgICAgICAg
cmV0dXJuIHRyYXZlcnNlTG9vcENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0xvb3BOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisrICAgIH0K
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VQb3N0KE5vZGVUeXBl
IGN1cnJOb2RlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEludGVybU5vZGUgJm9yaWdpbmFsTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCisreworKyAgICBpZiAo
IW1Qb3N0VmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQor
KworKyAgICBpZiAoIUFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9zdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAoQW55Qml0cyh2aXNp
dCwgVmlzaXRCaXRzOjpQb3N0UmVxdWlyZXNTYW1lKSAmJiAmb3JpZ2luYWxOb2RlICE9ICZjdXJy
Tm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworKyAgICB9CisrCisrICAg
IE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZj
dXJyTm9kZSwgJmd1YXJkLm9sZE5vZGVTdGFja307CisrCisrICAgIHN3aXRjaCAoY3Vyck5vZGVU
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQ
b3N0KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBl
OjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25Q
b3N0KCpjdXJyTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlv
blByb3RvdHlwZVBvc3QoKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFz
UHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1VuYXJ5
Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRCaW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5vZGUoKSk7CisrICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRl
cm5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6emxlUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Oklm
RWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRJZkVsc2VQb3N0KCpjdXJyTm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkp
OworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRDYXNlUG9zdCgqY3Vyck5vZGUuZ2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5j
dGlvbkRlZmluaXRpb25Qb3N0KCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4g
dmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUG9z
dCgqY3Vyck5vZGUuZ2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uUG9zdCgKKysgICAgICAgICAgICAgICAgKmN1cnJOb2RlLmdldEFz
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6RGVjbGFyYXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25Qb3N0
KCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5
cGU6Okxvb3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBvc3QoKmN1cnJOb2RlLmdl
dEFzTG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpCisreworKyAgICBpZiAodHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4o
bm9kZSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbm9kZTsKKysgICAgfQorKyAgICByZXR1
cm4gbnVsbHB0cjsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJsb2NrQ2hpbGRyZW4oVEludGVybUJsb2NrICZub2RlKQorK3sKKysgICAgaWYgKHRyYXZlcnNl
QWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gJm5v
ZGU7CisrICAgIH0KKysgICAgcmV0dXJuIG51bGxwdHI7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKFRJbnRlcm1EZWNsYXJh
dGlvbiAmbm9kZSkKKyt7CisrICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihu
b2RlKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZub2RlOworKyAgICB9CisrICAgIHJldHVy
biBudWxscHRyOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
U3dpenpsZUNoaWxkcmVuKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgYXV0byAqY29u
c3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICBBU1NFUlQob3BlcmFuZCk7Cisr
CisrICAgIGF1dG8gKm5ld09wZXJhbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9w
ZXJhbmQpOworKyAgICBHVUFSRChuZXdPcGVyYW5kKTsKKysKKysgICAgaWYgKG5ld09wZXJhbmQg
IT0gb3BlcmFuZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShu
ZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25z
dCBsZWZ0ID0gbm9kZS5nZXRMZWZ0KCk7CisrICAgIEFTU0VSVChsZWZ0KTsKKysgICAgYXV0byAq
Y29uc3QgcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisrICAgIEFTU0VSVChyaWdodCk7CisrCisr
ICAgIGF1dG8gKmNvbnN0IG5ld0xlZnQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmxl
ZnQpOworKyAgICBHVUFSRChuZXdMZWZ0KTsKKysgICAgYXV0byAqY29uc3QgbmV3UmlnaHQgPSB0
cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKysgICAgR1VBUkQobmV3UmlnaHQp
OworKworKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJpZ2h0KQorKyAg
ICB7CisrICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBzd2l0
Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAobmV3
TGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVEludGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21w
aWxlci5nZXRTaGFkZXJWZXJzaW9uKCkpOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0
dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
VW5hcnlDaGlsZHJlbihUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBv
cGVyYW5kID0gbm9kZS5nZXRPcGVyYW5kKCk7CisrICAgIEFTU0VSVChvcGVyYW5kKTsKKysKKysg
ICAgYXV0byAqY29uc3QgbmV3T3BlcmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigq
b3BlcmFuZCk7CisrICAgIEdVQVJEKG5ld09wZXJhbmQpOworKworKyAgICBpZiAobmV3T3BlcmFu
ZCAhPSBvcGVyYW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1VbmFyeShu
b2RlLmdldE9wKCksIG5ld09wZXJhbmQsIG5vZGUuZ2V0RnVuY3Rpb24oKSk7CisrICAgIH0KKysK
KysgICAgcmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKFRJbnRlcm1UZXJuYXJ5ICZub2RlKQorK3sKKysgICAg
YXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrICAgIEFTU0VSVChjb25k
KTsKKysgICAgYXV0byAqY29uc3QgdHJ1ZV8gPSBub2RlLmdldFRydWVFeHByZXNzaW9uKCk7Cisr
ICAgIEFTU0VSVCh0cnVlXyk7CisrICAgIGF1dG8gKmNvbnN0IGZhbHNlXyA9IG5vZGUuZ2V0RmFs
c2VFeHByZXNzaW9uKCk7CisrICAgIEFTU0VSVChmYWxzZV8pOworKworKyAgICBhdXRvICpjb25z
dCBuZXdDb25kID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpjb25kKTsKKysgICAgR1VB
UkQobmV3Q29uZCk7CisrICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFzPFRJ
bnRlcm1UeXBlZD4oKnRydWVfKTsKKysgICAgR1VBUkQobmV3VHJ1ZSk7CisrICAgIGF1dG8gKmNv
bnN0IG5ld0ZhbHNlID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpmYWxzZV8pOworKyAg
ICBHVUFSRChuZXdGYWxzZSk7CisrCisrICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3VHJ1
ZSAhPSB0cnVlXyB8fCBuZXdGYWxzZSAhPSBmYWxzZV8pCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVRlcm5hcnkobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworKyAgICB9
CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAg
ICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysgICAgQVNTRVJUKGNv
bmQpOworKyAgICBhdXRvICpjb25zdCB0cnVlXyAgPSBub2RlLmdldFRydWVCbG9jaygpOworKyAg
ICBhdXRvICpjb25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgYXV0
byAqY29uc3QgbmV3Q29uZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7Cisr
ICAgIEdVQVJEKG5ld0NvbmQpOworKyAgICBUSW50ZXJtQmxvY2sgKm5ld1RydWUgPSBudWxscHRy
OworKyAgICBpZiAodHJ1ZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMo
KnRydWVfLCBuZXdUcnVlKSk7CisrICAgIH0KKysgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9
IG51bGxwdHI7CisrICAgIGlmIChmYWxzZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZl
cnNlQW55QXMoKmZhbHNlXywgbmV3RmFsc2UpKTsKKysgICAgfQorKworKyAgICBpZiAobmV3Q29u
ZCAhPSBjb25kIHx8IG5ld1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbmV3VHJ1ZSwg
bmV3RmFsc2UpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXRjaENoaWxkcmVuKFRJbnRlcm1Td2l0
Y2ggJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBpbml0ID0gbm9kZS5nZXRJbml0KCk7Cisr
ICAgIEFTU0VSVChpbml0KTsKKysgICAgYXV0byAqY29uc3Qgc3RtdHMgPSBub2RlLmdldFN0YXRl
bWVudExpc3QoKTsKKysgICAgQVNTRVJUKHN0bXRzKTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3
SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7CisrICAgIEdVQVJEKG5l
d0luaXQpOworKyAgICBhdXRvICpjb25zdCBuZXdTdG10cyA9IHRyYXZlcnNlQW55QXM8VEludGVy
bUJsb2NrPigqc3RtdHMpOworKyAgICBHVUFSRChuZXdTdG10cyk7CisrCisrICAgIGlmIChuZXdJ
bml0ICE9IGluaXQgfHwgbmV3U3RtdHMgIT0gc3RtdHMpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBuZXdTdG10cyk7CisrICAgIH0KKysKKysgICAg
cmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZl
cnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qg
Y29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrCisrICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29u
ZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICBHVUFSRCh0cmF2
ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0NvbmQg
IT0gY29uZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQ2FzZShuZXdDb25k
KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbihUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQorK3sKKysgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsg
IC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisrICAgIG1QYXJlbnRG
dW5jID0gbm9kZS5nZXRGdW5jdGlvbigpOworKyAgICBzdHJ1Y3QgT25FeGl0CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVudEZ1bmM7CisrICAgICAgICBPbkV4aXQoY29u
c3QgVEZ1bmN0aW9uIComcGFyZW50RnVuYykgOiBwYXJlbnRGdW5jKHBhcmVudEZ1bmMpIHt9Cisr
ICAgICAgICB+T25FeGl0KCkgeyBwYXJlbnRGdW5jID0gbnVsbHB0cjsgfQorKyAgICB9IG9uRXhp
dChtUGFyZW50RnVuYyk7CisrCisrICAgIGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5j
dGlvblByb3RvdHlwZSgpOworKyAgICBBU1NFUlQocHJvdG8pOworKyAgICBhdXRvICpjb25zdCBi
b2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysgICAgYXV0byAq
Y29uc3QgbmV3UHJvdG8gPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZT4o
KnByb3RvKTsKKysgICAgR1VBUkQobmV3UHJvdG8pOworKyAgICBhdXRvICpjb25zdCBuZXdCb2R5
ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtQmxvY2s+KCpib2R5KTsKKysgICAgR1VBUkQobmV3Qm9k
eSk7CisrCisrICAgIGlmIChuZXdQcm90byAhPSBwcm90byB8fCBuZXdCb2R5ICE9IGJvZHkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdQ
cm90bywgbmV3Qm9keSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOworK30KKysKKytU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb25DaGlsZHJlbigKKysgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZu
b2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2woKTsKKysg
ICAgQVNTRVJUKHN5bWJvbCk7CisrCisrICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRyYXZl
cnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisrICAgIEdVQVJEKG5ld1N5bWJvbCk7
CisrCisrICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbmV3IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihuZXdTeW1ib2wsIG5vZGUu
aXNQcmVjaXNlKCksIG5vZGUuZ2V0TGluZSgpKTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5v
ZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VMb29wQ2hp
bGRyZW4oVEludGVybUxvb3AgJm5vZGUpCisreworKyAgICBjb25zdCBUTG9vcFR5cGUgbG9vcFR5
cGUgPSBub2RlLmdldFR5cGUoKTsKKysKKysgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0
SW5pdCgpOworKyAgICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysg
ICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICBhdXRvICpj
b25zdCBib2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisrICAgICAgICBjYXNl
IFRMb29wVHlwZTo6RUxvb3BEb1doaWxlOgorKyAgICAgICAgICAgIEFTU0VSVChjb25kKTsKKysg
ICAgICAgICAgICBBU1NFUlQoIWluaXQgJiYgIWV4cHIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFu
eUFzPFRJbnRlcm1CbG9jaz4oKmJvZHkpOworKyAgICBHVUFSRChuZXdCb2R5KTsKKysgICAgVElu
dGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRyOworKyAgICBpZiAoaW5pdCkKKysgICAgeworKyAg
ICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5pdCwgbmV3SW5pdCkpOworKyAgICB9CisrICAg
IFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7
CisrICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0K
KysgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gbnVsbHB0cjsKKysgICAgaWYgKGV4cHIpCisr
ICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmV4cHIsIG5ld0V4cHIpKTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld0NvbmQgIT0gY29uZCB8fCBu
ZXdFeHByICE9IGV4cHIgfHwgbmV3Qm9keSAhPSBib2R5KQorKyAgICB7CisrICAgICAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpF
TG9vcEZvcjoKKysgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgICAg
IEdVQVJEKG5ld0NvbmQgJiYgbmV3Qm9keSk7CisrICAgICAgICAgICAgICAgIEdVQVJEKCFuZXdJ
bml0ICYmICFuZXdFeHByKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1Mb29wKGxvb3BUeXBlLCBuZXdJbml0LCBuZXdDb25k
LCBuZXdFeHByLCBuZXdCb2R5KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQor
KworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbihU
SW50ZXJtQnJhbmNoICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0
RXhwcmVzc2lvbigpOworKworKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOwor
KyAgICBpZiAoZXhwcikKKysgICAgeworKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50
ZXJtVHlwZWQ+KCpleHByLCBuZXdFeHByKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0V4cHIg
IT0gZXhwcikKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQnJhbmNoKG5vZGUu
Z2V0Rmxvd09wKCksIG5ld0V4cHIpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKQorK3sK
KysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUHJlKFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpCisreworKyAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJt
UmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFRlcm5hcnlQcmUoVEludGVybVRlcm5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0
dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRMb29wUHJlKFRJbnRlcm1Mb29wICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
QnJhbmNoUHJlKFRJbnRlcm1CcmFuY2ggJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysK
KytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25QcmUoCisrICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKKyt7
CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN5bWJv
bFBvc3QoVEludGVybVN5bWJvbCAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBv
c3QoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBu
b2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChU
SW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUp
CisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdChUSW50ZXJtVGVybmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXp6bGVQ
b3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0SWZFbHNlUG9zdChUSW50ZXJtSWZFbHNl
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKQorK3sKKysgICAg
cmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2Fz
ZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisr
UG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdChUSW50ZXJtTG9vcCAmbm9k
ZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEJyYW5jaFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0
aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsK
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1Bvc3QoVEludGVy
bUJsb2NrICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2Rl
KQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorKyAgICBUSW50
ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9k
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi4zMDk3ZTQwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oCitAQCAtMCwwICsxLDMyOCBAQAor
Ky8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9J
TlRFUk1SRUJVSUxEX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lO
VEVSTVJFQlVJTERfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvTm9kZVR5cGUuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gV2Fsa3MgdGhl
IHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKysvLyBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJl
IGRlcml2ZWQgd2l0aCBvdmVycmlkZGVuIHZpc2l0WFhYIGZ1bmN0aW9ucy4KKysvLworKy8vIEVh
Y2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlzaXQgcGFyYW1ldGVy
IHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisrLy8gZXhhY3RseSBvbmNlLCByZWdhcmRs
ZXNzIG9mIChwcmVWaXNpdCkgb3IgKHBvc3RWaXNpdCkgdmFsdWVzLgorKworKy8vIEVhY2ggdmlz
aXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZlcyBhcyBmb2xs
b3dzOgorKy8vICAgICogSWYgKHByZVZpc2l0KToKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlz
aXRlZCBiZWZvcmUgY2hpbGRyZW4gYXJlIHRyYXZlcnNlZC4KKysvLyAgICAgIC0gVGhlIHJldHVy
bmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUgcmV0dXJu
ZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisrLy8gICAgICAgIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorKy8vICAgICAgLSBJZiBtdWx0aXBsZSBub2RlcyBhcmUgcmV0dXJuZWQsIGNoaWxkcmVuIGFu
ZCBwb3N0IHZpc2l0cyBvZiB0aGUgcmV0dXJuZWQgbm9kZXMgYXJlIG5vdAorKy8vICAgICAgICBw
cmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKysvLyAgICAq
IElmIChjaGlsZFZpc2l0KQorKy8vICAgICAgLSBJZiBhbnkgbmV3IGNoaWxkcmVuIGFyZSByZXR1
cm5lZCwgdGhlIG5vZGUgaXMgYXV0b21hdGljYWxseSByZWJ1aWx0IHdpdGggdGhlIG5ldyBjaGls
ZHJlbgorKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKysvLyAgICAgIC0gRGVwZW5kaW5n
IG9uIHRoZSB0eXBlIG9mIHRoZSBub2RlLCBudWxsIGNoaWxkcmVuIG1heSBiZSBkaXNjYXJkZWQu
CisrLy8gICAgICAtIElsbC10eXBlZCBjaGlsZHJlbiBjYXVzZSByZWJ1aWxkIGVycm9ycy4gSWxs
LXR5cGVkIG1lYW5zIHRoZSBub2RlIHRvIGF1dG9tYXRpY2FsbHkgcmVidWlsZAorKy8vICAgICAg
ICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRz
IGNvbnN0cnVjdG9yLgorKy8vICAgICAgLSBPbmx5IGluc3RhbmNlcyBvZiBUSW50ZXJtQWdncmVn
YXRlQmFzZSBjYW4gYWNjZXB0IE11bHRpIHJlc3VsdHMgZm9yIGFueSBvZiBpdHMgY2hpbGRyZW4u
CisrLy8gICAgICAgIElmIHN1cHBsaWVkLCB0aGUgbm9kZXMgYXJlIHNwbGljZWQgY2hpbGRyZW4g
YXQgdGhlIHNwb3Qgb2YgdGhlIG9yaWdpbmFsIGNoaWxkLgorKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlzaXRlZCBhZnRlciBhbnkgY2hpbGRyZW4gYXJl
IHRyYXZlcnNlZC4KKysvLyAgICAgIC0gT25seSBhZnRlciBzdWNoIGEgcmVidWlsZCAob3IgbGFj
ayB0aGVyZW9mKSwgdGhlIHBvc3QtdmlzaXQgaXMgcGVyZm9ybWVkLgorKy8vCisrLy8gTm9kZXMg
aW4gdmlzaXQgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIGluIHBsYWNlLCBp
bmNsdWRpbmcgVEludGVybUFnZ3JlZ2F0ZUJhc2UKKysvLyBjaGlsZCBzZXF1ZW5jZXMuCisrLy8K
KysvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIHRoZSB2aXNpdFhYWCBmdW5j
dGlvbnMgc3VwcG9ydCBmdWxsIHByZSBhbmQgcG9zdCB0cmF2ZXJzYWwKKysvLyB3aXRob3V0IG1v
ZGlmeWluZyB0aGUgdmlzaXRlZCBub2Rlcy4KKysvLworK2NsYXNzIFRJbnRlcm1SZWJ1aWxkIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCisreworKworKyAgICBlbnVtIGNsYXNzIEFjdGlvbgorKyAgICB7
CisrICAgICAgICBSZXBsYWNlU2luZ2xlLAorKyAgICAgICAgUmVwbGFjZU11bHRpLAorKyAgICAg
ICAgRHJvcCwKKysgICAgICAgIEZhaWwsCisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIHN0
cnVjdCBGYWlsCisrICAgIHt9OworKworKyAgICBlbnVtIFZpc2l0Qml0cyA6IHNpemVfdAorKyAg
ICB7CisrICAgICAgICAvLyBObyBiaXRzIGFyZSBzZXQuCisrICAgICAgICBFbXB0eSA9IDB1LAor
KworKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICAgICAgQ2hpbGRyZW4gPSAxdSA8PCAwdSwKKysKKysgICAgICAgIC8vIEFsbG93IHBvc3Qg
dmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKysgICAgICAgIFBvc3QgPSAxdSA8PCAxdSwKKysKKysg
ICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlmIHRoZSByZXR1cm5lZCBu
b2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorKyAgICAgICAgQ2hpbGRyZW5S
ZXF1aXJlc1NhbWUgPSAxdSA8PCAydSwKKysKKysgICAgICAgIC8vIElmIChQb3N0KSBiaXQsIG9u
bHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IG5vZGUuCisrICAgICAgICBQb3N0UmVxdWlyZXNTYW1lID0gMXUgPDwgM3UsCisrCisrICAgICAg
ICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1aXJlc1NhbWUs
CisrICAgICAgICBOZWl0aGVyICAgICAgPSBFbXB0eSwKKysgICAgICAgIEJvdGggICAgICAgICA9
IENoaWxkcmVuIHwgUG9zdCwKKysgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBSZXF1aXJl
U2FtZSwKKysgICAgfTsKKysKKysgIHByaXZhdGU6CisrICAgIHN0cnVjdCBOb2RlU3RhY2tHdWFy
ZDsKKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIHN0cnVjdCBDb25zTGlzdAor
KyAgICB7CisrICAgICAgICBUIHZhbHVlOworKyAgICAgICAgQ29uc0xpc3Q8VD4gKnRhaWw7Cisr
ICAgIH07CisrCisrICAgIGNsYXNzIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgQmFzZVJl
c3VsdChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworKyAgICAgICAgQmFzZVJlc3VsdCAm
b3BlcmF0b3I9KGNvbnN0IEJhc2VSZXN1bHQgJikgPSBkZWxldGU7CisrCisrICAgICAgcHVibGlj
OgorKyAgICAgICAgQmFzZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpID0gZGVmYXVsdDsKKysg
ICAgICAgIEJhc2VSZXN1bHQoQmFzZVJlc3VsdCAmb3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1v
dmUgY29uc3RydWN0b3IgaW1wbHMKKysgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5v
ZGUsIFZpc2l0Qml0cyB2aXNpdCk7CisrICAgICAgICBCYXNlUmVzdWx0KFRJbnRlcm1Ob2RlICpu
b2RlLCBWaXNpdEJpdHMgdmlzaXQpOworKyAgICAgICAgQmFzZVJlc3VsdChudWxscHRyX3QpOwor
KyAgICAgICAgQmFzZVJlc3VsdChGYWlsKTsKKysgICAgICAgIEJhc2VSZXN1bHQoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB2b2lkIG1vdmVBc3NpZ25J
bXBsKEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBs
cworKworKyAgICAgICAgc3RhdGljIEJhc2VSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVy
bU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4K
KysgICAgICAgIHN0YXRpYyBCYXNlUmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBu
b2Rlc0VuZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiBub2RlczsKKysgICAgICAgICAgICBmb3IgKEl0ZXIgbm9kZXNDdXJyID0gbm9kZXNCZWdp
bjsgbm9kZXNDdXJyICE9IG5vZGVzRW5kOyArK25vZGVzQ3VycikKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vZGVzLnB1c2hfYmFjaygqbm9kZXNDdXJyKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7CisrICAgICAgICB9Cisr
CisrICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0OworKyAgICAgICAgYm9vbCBpc0Ryb3AoKSBj
b25zdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpzaW5nbGUoKSBjb25zdDsKKysgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICptdWx0aSgpIGNvbnN0OworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIEFjdGlvbiBtQWN0aW9uOworKyAgICAgICAgVmlzaXRCaXRzIG1W
aXNpdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICptU2luZ2xlOworKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworKyAgICB9OworKworKyAgcHVibGljOgorKyAgICBj
bGFzcyBQcmVSZXN1bHQgOiBwcml2YXRlIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworKworKyAgICAgIHB1YmxpYzoKKysgICAgICAgIFBy
ZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisrICAgICAgICBQcmVSZXN1bHQoVEludGVybU5v
ZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKysg
ICAgICAgIFByZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlz
aXRCaXRzOjpCb3RoV2hlblNhbWUpOworKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAv
LyBVc2VkIHRvIGRyb3AgYSBub2RlLgorKyAgICAgICAgUHJlUmVzdWx0KEZhaWwpOyAgICAgICAv
LyBVc2VkIHRvIHNpZ25hbCBmYWlsdXJlLgorKworKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJl
UmVzdWx0ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShzdGQ6
OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorKyAgICAgICAgc3RhdGljIFBy
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKG5vZGVzQmVnaW4sIG5vZGVz
RW5kKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRHJvcDsK
KysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKysgICAgICAgIHVzaW5nIEJhc2VS
ZXN1bHQ6Om11bHRpOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6c2luZ2xlOworKworKyAg
ICAgIHByaXZhdGU6CisrICAgICAgICBQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysg
ICAgfTsKKysKKysgICAgY2xhc3MgUG9zdFJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorKyAg
ICB7CisrICAgICAgICBmcmllbmQgY2xhc3MgVEludGVybVJlYnVpbGQ7CisrCisrICAgICAgcHVi
bGljOgorKyAgICAgICAgUG9zdFJlc3VsdChQb3N0UmVzdWx0ICYmb3RoZXIpOworKyAgICAgICAg
UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSk7CisrICAgICAgICBQb3N0UmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlKTsKKysgICAgICAgIFBvc3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQg
dG8gZHJvcCBhIG5vZGUKKysgICAgICAgIFBvc3RSZXN1bHQoRmFpbCk7ICAgICAgIC8vIFVzZWQg
dG8gc2lnbmFsIGZhaWx1cmUuCisrCisrICAgICAgICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0
ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFBvc3RSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gQmFzZVJlc3VsdDo6TXVsdGkoc3RkOjptb3ZlKG5vZGVzKSk7CisrICAgICAgICB9CisrCisr
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KKysgICAgICAgIHN0YXRpYyBQb3N0UmVz
dWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQp
OworKyAgICAgICAgfQorKworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworKyAg
ICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNGYWlsOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3Vs
dDo6bXVsdGk7CisrICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisrCisrICAgICAg
cHJpdmF0ZToKKysgICAgICAgIFBvc3RSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysgICAg
fTsKKysKKysgIHB1YmxpYzoKKysgICAgVEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxl
ciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0VmlzaXQpOworKworKyAgICB2aXJ0dWFsIH5USW50
ZXJtUmVidWlsZCgpOworKworKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisrICAgIC8vIHJvb3QsIHRoZSByb290IG5vZGUncyBjaGlsZHJlbiBiZWNvbWUgdGhhdCBvZiB0
aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlCisrICAgIC8vIG9j
Y3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJs
b2NrICZyb290KTsKKysKKysgIHByb3RlY3RlZDoKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlz
aXRTeW1ib2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0
IHZpc2l0Q29uc3RhbnRVbmlvblByZShUSW50ZXJtQ29uc3RhbnRVbmlvbiAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9j
ZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VW5hcnlQcmUoVEludGVybVVuYXJ5ICZub2RlKTsK
KysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9k
ZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFy
eSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0U3dpenpsZVByZShUSW50ZXJt
U3dpenpsZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0SWZFbHNlUHJlKFRJ
bnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFBy
ZShUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDYXNl
UHJlKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRMb29w
UHJlKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFu
Y2hQcmUoVEludGVybUJyYW5jaCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKysgICAgdmlydHVhbCBQ
cmVSZXN1bHQgdmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0R2xv
YmFsUXVhbGlmaWVyRGVjbGFyYXRpb25QcmUoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKTsKKysKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChU
SW50ZXJtU3ltYm9sICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q29uc3Rh
bnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpOworKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90
eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKTsKKysgICAgdmly
dHVhbCBQb3N0UmVzdWx0IHZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7
CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVy
bVN3aXp6bGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0
KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRTd2l0
Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlz
aXRDYXNlUG9zdChUSW50ZXJtQ2FzZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2
aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0
IHZpc2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0
UmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUp
OworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpOworKyAgICB2aXJ0dWFs
IFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKysKKysgICAgLy8gQ2FuIGJlIHVzZWQg
dG8gcmVidWlsZCBhIHNwZWNpZmljIG5vZGUgZHVyaW5nIGEgdHJhdmVyc2FsLiBVc2VmdWwgZm9y
IGZpbmUgY29udHJvbCBvZgorKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICBBTkdMRV9OT19ESVNDQVJEIFBvc3RSZXN1bHQgcmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBh
IG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAg
ICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBp
ZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZElu
UGxhY2UoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBw
cm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0
aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAgICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5v
ZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdM
RV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKysK
KysgICAgLy8gUmVidWlsZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5v
ZGUgd291bGQgYmUgcmV0dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisrICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisrICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkSW5QbGFjZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworKworKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3Ig
YmVsb3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0
aW9uIHRoYXQgZW5jbG9zZXMKKysgICAgLy8gdGhlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGUuIChU
aGlzIHJldHVybnMgbnVsbCBpZiBhdCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuKQorKyAg
ICBjb25zdCBURnVuY3Rpb24gKmdldFBhcmVudEZ1bmN0aW9uKCkgY29uc3Q7CisrCisrICAgIFRJ
bnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQgPSAwKSBjb25zdDsKKysKKysg
IHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2VJbXBsKE5vZGUgJm5vZGUpOworKworKyAgICBQb3N0
UmVzdWx0IHRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE5vZGU+CisrICAgIE5vZGUgKnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5v
ZGUpOworKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKysgICAgYm9vbCB0cmF2ZXJz
ZUFueUFzKFRJbnRlcm1Ob2RlICZub2RlLCBOb2RlIComb3V0KTsKKysKKysgICAgUHJlUmVzdWx0
IHRyYXZlcnNlUHJlKFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpOworKyAgICBUSW50ZXJtTm9k
ZSAqdHJhdmVyc2VDaGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysg
ICAgUG9zdFJlc3VsdCB0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgbm9kZVR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysKKysgICAgYm9vbCB0cmF2
ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9kZSk7Cisr
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZu
b2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oVEludGVybUJp
bmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbihU
SW50ZXJtVGVybmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVN3aXp6bGVD
aGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJz
ZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAq
dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgVEludGVy
bU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlTG9vcENoaWxkcmVuKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5jaCAmbm9kZSk7
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4oVEludGVybURl
Y2xhcmF0aW9uICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmxvY2tDaGlsZHJl
bihUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uQ2hpbGRyZW4oCisrICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJm5vZGUpOworKworKyAgcHJvdGVjdGVkOgorKyAgICBUQ29tcGlsZXIgJm1Db21waWxlcjsK
KysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrICAgIGNvbnN0IFRGdW5jdGlvbiAq
bVBhcmVudEZ1bmMgPSBudWxscHRyOworKyAgICBHZXROb2RlVHlwZSBnZXROb2RlVHlwZTsKKysK
KysgIHByaXZhdGU6CisrICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG1Ob2RlU3RhY2t7bnVs
bHB0ciwgbnVsbHB0cn07CisrICAgIGJvb2wgbVByZVZpc2l0OworKyAgICBib29sIG1Qb3N0Vmlz
aXQ7CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi5hNTllNWFmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUuaAorQEAgLTAsMCArMSwxNTUgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2Uu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrZW51bSBjbGFzcyBOb2RlVHlwZQorK3sKKysg
ICAgVW5rbm93biwKKysgICAgU3ltYm9sLAorKyAgICBDb25zdGFudFVuaW9uLAorKyAgICBGdW5j
dGlvblByb3RvdHlwZSwKKysgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorKyAgICBVbmFyeSwK
KysgICAgQmluYXJ5LAorKyAgICBUZXJuYXJ5LAorKyAgICBTd2l6emxlLAorKyAgICBJZkVsc2Us
CisrICAgIFN3aXRjaCwKKysgICAgQ2FzZSwKKysgICAgRnVuY3Rpb25EZWZpbml0aW9uLAorKyAg
ICBBZ2dyZWdhdGUsCisrICAgIEJsb2NrLAorKyAgICBHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
biwKKysgICAgRGVjbGFyYXRpb24sCisrICAgIExvb3AsCisrICAgIEJyYW5jaCwKKyt9OworKwor
Ky8vIFRoaXMgaXMgYSBmdW5jdGlvbiBsaWtlIG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24g
dGhhdCBzdGFjayBhbGxvY2F0ZXMgdGhpcyBiZWNhdXNlCisrLy8gVEludGVybVRyYXZlcnNlciBp
cyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1Y3QuCisrY2xhc3MgR2V0Tm9kZVR5cGUgOiBwcml2
YXRlIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICAgIE5vZGVUeXBlIG5vZGVUeXBlOworKworKyAg
cHVibGljOgorKyAgICBHZXROb2RlVHlwZSgpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxz
ZSwgZmFsc2UpIHt9CisrCisrICAgIE5vZGVUeXBlIG9wZXJhdG9yKCkoVEludGVybU5vZGUgJm5v
ZGUpCisrICAgIHsKKysgICAgICAgIG5vZGUudmlzaXQoVmlzaXQ6OlByZVZpc2l0LCB0aGlzKTsK
KysgICAgICAgIHJldHVybiBub2RlVHlwZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBO
b2RlVHlwZTo6U3ltYm9sOyB9CisrCisrICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q29uc3Rh
bnRVbmlvbjsgfQorKworKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGUoVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0g
Tm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworKyAgICB9CisrCisrICAgIHZvaWQgdmlzaXRQ
cmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpQcmVwcm9jZXNzb3JE
aXJlY3RpdmU7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRl
cm1Td2l6emxlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5
cGU6OlN3aXp6bGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9v
bCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCaW5hcnk7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkg
Kikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VW5hcnk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5h
cnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OlRlcm5hcnk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpJZkVsc2U7CisrICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNp
dCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9
IE5vZGVUeXBlOjpTd2l0Y2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1DYXNlICopIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkNhc2U7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBu
b2RlVHlwZSA9IE5vZGVUeXBlOjpGdW5jdGlvbkRlZmluaXRpb247CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVU
eXBlOjpBZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg
Ym9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgb3ZlcnJpZGUKKysgICAgewor
KyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6QmxvY2s7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
KFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysg
ICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb247CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6RGVjbGFyYXRpb247CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
Okxvb3A7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCcmFuY2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5j
cHAKK2luZGV4IDM0NjQ3MGUuLjU4MmRkYzcgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci91dGlsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAK
K0BAIC04MDQsNiArODA0LDEwIEBAIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1dCBv
dXRwdXQpCisgeworICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VUUFVUOwor
IH0KKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorK3sK
KysgICAgcmV0dXJuIG91dHB1dCA9PSBTSF9NU0xfTUVUQUxfT1VUUFVUOworK30KKyAKKyBib29s
IElzSW5TaGFkZXJTdG9yYWdlQmxvY2soVEludGVybVR5cGVkICpub2RlKQorIHsKK2RpZmYgLS1n
aXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmgKK2luZGV4IDUzZWU3NTUuLmY5YWU5YmIgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci91dGlsLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuaAorQEAgLTc3LDYgKzc3LDcgQEAgYm9vbCBJc091dHB1dEdMU0woU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KTsKKyBib29sIElzT3V0cHV0SExTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOworIGJv
b2wgSXNPdXRwdXRWdWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyBib29sIElzT3V0cHV0
TWV0YWwoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3Qo
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyAKKyBib29sIElzSW5TaGFkZXJTdG9yYWdlQmxvY2so
VEludGVybVR5cGVkICpub2RlKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitpbmRleCBm
NzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAorLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5m
by5jcHAKKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitAQCAtNDcsNiAr
NDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikKKyAgICAgICAg
ICAgICByZXR1cm4gIlZpdmFudGUiOworICAgICAgICAgY2FzZSBrVmVuZG9ySURfVk1XYXJlOgor
ICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKKysgICAgICAgIGNhc2Uga1ZlbmRvcklEX0Fw
cGxlOgorKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOworICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2ZW5kb3IpICsg
IikiOworICAgICB9CitAQCAtMTYwLDYgKzE2MiwxMSBAQCBib29sIElzVml2YW50ZShWZW5kb3JJ
RCB2ZW5kb3JJZCkKKyAgICAgcmV0dXJuIHZlbmRvcklkID09IGtWZW5kb3JJRF9WaXZhbnRlOwor
IH0KKyAKKytib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpCisreworKyAgICByZXR1cm4g
dmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworK30KKysKKyBib29sIFBhcnNlQU1EQnJhaG1h
RHJpdmVyVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZl
cnNpb24pCisgeworICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rf
b2YoIjAxMjM0NTY3ODkiKTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKK2luZGV4IGFkMTc2OTguLjUw
OWExZTkgMTAwNjQ0CistLS0gYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKKysrKyBi
L3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaAorQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0
IFN5c3RlbUluZm8KKyAgICAgYm9vbCBpc0FNRFN3aXRjaGFibGUgPSBmYWxzZTsKKyAgICAgLy8g
T25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBsYXB0b3BzLgorICAgICBib29sIGlzTWFjU3dpdGNo
YWJsZSA9IGZhbHNlOworLSAgICAvLyBPbmx5IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdo
ZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCistICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5h
cHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3VuZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1p
b3NhcHBvbm1hYworLSAgICBib29sIGlzaU9TQXBwT25NYWMgPSBmYWxzZTsKKysgICAgLy8gT25s
eSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFjcyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3Qu
CisrICAgIGJvb2wgbmVlZHNFQUdMT25NYWMgICA9IGZhbHNlOworIAorICAgICAvLyBPbmx5IGF2
YWlsYWJsZSBvbiBBbmRyb2lkCisgICAgIHN0ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7
CitAQCAtOTksNiArOTgsNyBAQCBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAg
ID0gMHg4MDg2OworIGNvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEw
REU7CisgY29uc3RleHByIFZlbmRvcklEIGtWZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKKyBj
b25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZNV2FyZSAgID0gMHgxNWFkOworK2NvbnN0ZXhw
ciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUgICAgPSAweDEwNkI7CisgCisgLy8gS25vd24gbm9u
LVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVyZWQpIHZlbmRvciBJRHMKKyBjb25zdGV4cHIgVmVu
ZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAgID0gMHgxMDAwMTsKK0BAIC0xMjQsNiArMTI0LDcg
QEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRvcklEIHZlbmRvcklkKTsKKyBib29sIElzVmVyaVNp
bGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOworIGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9y
SWQpOworIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZlbmRvcklkKTsKKytib29sIElzQXBwbGUo
VmVuZG9ySUQgdmVuZG9ySWQpOworIAorIC8vIFVzZSBhIGhldXJpc3RpYyB0byBhdHRlbXB0IHRv
IGZpbmQgdGhlIEdQVSB1c2VkIGZvciAzRCBncmFwaGljcy4gU2V0cyBhY3RpdmVHUFVJbmRleCwK
KyAvLyBpc09wdGltdXMsIGFuZCBpc0FNRFN3aXRjaGFibGUuCitkaWZmIC0tZ2l0IGEvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbSBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fYXBwbGUubW0KK2luZGV4IGM3NzU2ZjYuLjE1MDBmZmYgMTAwNjQ0CistLS0gYS9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKysgYi9zcmMvZ3B1X2luZm9fdXRp
bC9TeXN0ZW1JbmZvX2FwcGxlLm1tCitAQCAtMSw1ICsxLDUgQEAKKyAvLworLS8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAt
LWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcCBiL3NyYy9ncHVfaW5m
b191dGlsL1N5c3RlbUluZm9faW9zLmNwcAoraW5kZXggMzIzYWYyYy4uN2E5ZDlmYSAxMDA2NDQK
Ky0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcAorKysrIGIvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCitAQCAtMTgsOCArMTgsMTYgQEAgbmFtZXNw
YWNlIGFuZ2xlCisgYm9vbCBHZXRTeXN0ZW1JbmZvX2lvcyhTeXN0ZW1JbmZvICppbmZvKQorIHsK
KyAgICAgeworKyAgICAgICAgLy8gICAgICAgIEdQVURldmljZUluZm8gZGV2aWNlSW5mbzsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLnZlbmRvcklkICAgICAgPSBrVmVuZG9ySURfQXBw
bGU7CisrICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlbmRvciAgPSAiQXBwbGUiOworKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVyc2lvbiA9ICIwLjAiOworKyAgICAg
ICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisrCisg
ICAgICAgICAvLyBUT0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVt
IHZlcnNpb24uCisgICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Cisr
ICAgICAgICAvLyBpbmZvLT5ncHVzLnB1c2hfYmFjayhkZXZpY2VJbmZvKTsKKyAgICAgfQorIAor
ICAgICByZXR1cm4gdHJ1ZTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX21hY29zLm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQoraW5k
ZXggYjFjZDA1NS4uYzVlMDM5ZSAxMDA2NDQKKy0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fbWFjb3MubW0KKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3Mu
bW0KK0BAIC0zMjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5m
byAqaW5mbykKKyAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CisgICAgIH0K
KyAgICAgCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmlu
ZWQoQU5HTEVfQ1BVX0FSTTY0KQorKyAgICBpbmZvLT5uZWVkc0VBR0xPbk1hYyA9IHRydWU7Cisr
I2VuZGlmCisrCisgICAgIHJldHVybiB0cnVlOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvQ2Fwcy5jcHAgYi9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKK2luZGV4IGY5MDY3ODMuLjc5
MzEwMDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKKysrKyBiL3NyYy9saWJB
TkdMRS9DYXBzLmNwcAorQEAgLTE3MCw4ICsxNzAsOCBAQCBzdGF0aWMgYm9vbCBHZXRGb3JtYXRT
dXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMsCisgeworICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVpcmVkRm9ybWF0c1NpemU7IGkrKykKKyAgICAgewor
LSAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJl
ZEZvcm1hdHNbaV0pOworIAorKyAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1
cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOworICAgICAgICAgaWYgKHJlcXVpcmVzVGV4
dHVyaW5nICYmICFjYXAudGV4dHVyYWJsZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CitAQCAtNDYyLDcgKzQ2Miw2IEBAIHN0YXRpYyBib29sIERldGVybWluZUFTVENM
RFJUZXh0dXJlU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMpCisgICAg
ICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSLCAgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIsCisgICAgICAgICBHTF9DT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMngxMl9LSFIsCisgICAgIH07CistCisgICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0
KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAgYi9z
cmMvbGliQU5HTEUvRGlzcGxheS5jcHAKK2luZGV4IGRkZTQzMzcuLjY1NzgxNGYgMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5
LmNwcAorQEAgLTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVu
dmlyb25tZW50KCkKKyAgICAgICAgIHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9OVUxM
X0FOR0xFOworICAgICB9CisgI2VuZGlmCisrI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX01FVEFM
KQorKyAgICBpZiAoYW5nbGVEZWZhdWx0RW52ID09ICJtZXRhbCIpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdMRTsKKysgICAgfQorIAor
KyNlbmRpZgorICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyAgICAgcmV0dXJuIEVH
TF9QTEFURk9STV9BTkdMRV9UWVBFX0QzRDExX0FOR0xFOworICNlbGlmIGRlZmluZWQoQU5HTEVf
RU5BQkxFX0QzRDkpCitAQCAtMTMyNSw2ICsxMzMxLDQ3IEBAIEVycm9yIERpc3BsYXk6Om1ha2VD
dXJyZW50KGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQsCisgICAgIHJldHVybiBOb0Vycm9y
KCk7CisgfQorIAorK0Vycm9yIERpc3BsYXk6Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhy
ZWFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1cmZh
Y2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsOjpTdXJmYWNlICpyZWFkU3VyZmFj
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7
CisrICAgIGlmICghbUluaXRpYWxpemVkKQorKyAgICB7CisrICAgICAgICByZXR1cm4gTm9FcnJv
cigpOworKyAgICB9CisrCisrICAgIGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQgPSB0aHJl
YWQtPmdldENvbnRleHQoKTsKKysgICAgaWYgKHByZXZpb3VzQ29udGV4dCkKKysgICAgeworKyAg
ICAgICAgQU5HTEVfVFJZKHByZXZpb3VzQ29udGV4dC0+dW5NYWtlQ3VycmVudCh0aGlzKSk7Cisr
ICAgIH0KKysKKysgICAgQU5HTEVfVFJZKG1JbXBsZW1lbnRhdGlvbi0+bWFrZUN1cnJlbnQodGhp
cywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSk7CisrCisrICAgIGlmIChjb250
ZXh0ICE9IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShjb250ZXh0LT5tYWtl
Q3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UpKTsKKysgICAgfQorKworKyAg
ICAvLyBUaWNrIGFsbCB0aGUgc2NyYXRjaCBidWZmZXJzIHRvIG1ha2Ugc3VyZSB0aGV5IGdldCBj
bGVhbmVkIHVwIGV2ZW50dWFsbHkgaWYgdGhleSBzdG9wIGJlaW5nCisrICAgIC8vIHVzZWQuCisr
ICAgIHsKKysgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1TY3JhdGNo
QnVmZmVyTXV0ZXgpOworKworKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZlciAmc2Nh
dGNoQnVmZmVyIDogbVNjcmF0Y2hCdWZmZXJzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisrICAgICAgICB9CisrICAgICAgICBmb3IgKGFuZ2xlOjpTY3Jh
dGNoQnVmZmVyICZ6ZXJvRmlsbGVkQnVmZmVyIDogbVplcm9GaWxsZWRCdWZmZXJzKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHplcm9GaWxsZWRCdWZmZXIudGljaygpOworKyAgICAgICAgfQor
KyAgICB9CisrCisrICAgIHJldHVybiBOb0Vycm9yKCk7CisrfQorKworIEVycm9yIERpc3BsYXk6
OnJlc3RvcmVMb3N0RGV2aWNlKCkKKyB7CisgICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3Ig
Y3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgr
KykKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5oIGIvc3JjL2xpYkFOR0xFL0Rp
c3BsYXkuaAoraW5kZXggNGFjNjMzNi4uMTZmYWYyYiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9EaXNwbGF5LmgKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKK0BAIC0xNjYsNiArMTY2
LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwgOiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKipvdXRDb250ZXh0KTsKKyAKKysgICAgRXJy
b3IgbWFrZUN1cnJlbnQoY29uc3QgVGhyZWFkICp0aHJlYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgIFN1cmZhY2UgKmRyYXdTdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNl
ICpyZWFkU3VyZmFjZSwKKysgICAgICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOworKworICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0IGdsOjpDb250ZXh0ICpjdXJyZW50
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlTWFwICZhdHRyaWJzLAorZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9Qcm9ncmFtLmggYi9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCitpbmRleCBmZTNl
YzI4Li5iYTkyNjdhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorKysrIGIv
c3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorQEAgLTI3Niw2ICsyNzYsMTEgQEAgY2xhc3MgUHJvZ3Jh
bVN0YXRlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHsKKyAgICAgICAgIHJldHVy
biBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOworICAg
ICB9CisrICAgIHZvaWQgc2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygKKysgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bUV4ZWN1dGFibGUtPnNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKysgICAgfQorICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxHTHNpemVpPiAmZ2V0VHJhbnNmb3JtRmVlZGJhY2tTdHJpZGVzKCkgY29uc3QKKyAgICAgewor
ICAgICAgICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMo
KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL3NyYy9s
aWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitpbmRleCA5NTA4MzJiLi40OGYzYmQyIDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitAQCAtMjI5LDYgKzIyOSwxMSBAQCBjbGFzcyBQcm9n
cmFtRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBhbmdsZTo6U3ViamVjdAorICAgICB7CisgICAg
ICAgICByZXR1cm4gbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7CisgICAgIH0KKysg
ICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKAorKyAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nPiBfbUxpbmtlZFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MpCisrICAgIHsKKysgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworKyAgICB9
CisgICAgIEdMaW50IGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7IH0KKyAgICAgR0x1aW50IGdldFVuaWZv
cm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAorICAgICB7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL1NoYWRlci5jcHAgYi9zcmMvbGliQU5HTEUvU2hhZGVy
LmNwcAoraW5kZXggNmY5YTc4YS4uOTYwMDZkOSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9T
aGFkZXIuY3BwCisrKysgYi9zcmMvbGliQU5HTEUvU2hhZGVyLmNwcAorQEAgLTY1NSw3ICs2NTUs
OSBAQCBzdGQ6OnN0cmluZyBTaGFkZXI6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01hcHBl
ZE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJnRmVgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgR0x1aW50IGZpZWxkSW5kZXggPSAwOworICAgICAgICAgICAgICAgICBjb25zdCBhdXRv
ICpmaWVsZCA9IHZhcnlpbmcuZmluZEZpZWxkKHRmVmFyeWluZ05hbWUsICZmaWVsZEluZGV4KTsK
Ky0gICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkICE9IG51bGxwdHIgJiYgIWZpZWxkLT5pc1N0
cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWVs
ZCkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICBBU1NF
UlQoIWZpZWxkLT5pc1N0cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKyAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhcnlpbmcubWFwcGVkTmFtZSArICIuIiArIGZpZWxkLT5tYXBwZWROYW1l
OworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
U3RhdGUuY3BwIGIvc3JjL2xpYkFOR0xFL1N0YXRlLmNwcAoraW5kZXggN2IwOGQ4ZC4uYTgwNDQ4
NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9TdGF0ZS5jcHAKK0BAIC02LDYgKzYsOSBAQAorIAorIC8vIFN0YXRlLmNwcDogSW1wbGVtZW50
cyB0aGUgU3RhdGUgY2xhc3MsIGVuY2Fwc3VsYXRpbmcgcmF3IEdMIHN0YXRlLgorIAorKy8vIE9s
ZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHdhcm5pbmcg
aGVyZS4KKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3Ry
dWN0b3JzIgorKworICNpbmNsdWRlICJsaWJBTkdMRS9TdGF0ZS5oIgorIAorICNpbmNsdWRlIDxz
dHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwIGIvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcAoraW5kZXggM2Y5ZjM3ZC4uNWU2MjhmMiAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9m
b3JtYXR1dGlscy5jcHAKK0BAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3Jt
YXRJbmZvTWFwIEJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCkKKyAgICAgYW5nbGU6OlN5c3Rl
bUluZm8gaW5mbzsKKyAgICAgaWYgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICAg
eworLSAgICAgICAgaWYgKGluZm8uaXNpT1NBcHBPbk1hYykKKysgICAgICAgIGlmIChpbmZvLm5l
ZWRzRUFHTE9uTWFjKQorICAgICAgICAgeworICAgICAgICAgICAgIC8vIFVzaW5nIE9wZW5HTEVT
LmZyYW1ld29yay4KKyAgICAgICAgICAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICBmYWxzZSwgIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNl
LCBSZXF1aXJlRVM8MiwgMD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmV2ZXJTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkKTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9k
cml2ZXJfdXRpbHMuY3BwCitpbmRleCBkNGM2YWVkLi4yMjM2NGIzIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCitAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0IE9TVmVyc2lvbiAmYikKKyAgICAgICAgICAg
IHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBiLm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24p
OworIH0KKyAKKy0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQor
IHsKKyAgICAgLy8gUmV0dXJuIGEgZGVmYXVsdCB2ZXJzaW9uCitAQCAtMjEzLDYgKzIxMywxNCBA
QCBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKKyB9CisgI2VuZGlmCisgCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpCisrewor
KyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKysgICAgcmV0dXJuIE9TVmVyc2lvbigw
LCAwLCAwKTsKKyt9CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTElO
VVgpCisgYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCAq
bWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCisgeworZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaAoraW5kZXggMjYxOWJjMy4uNzg3NzJhZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5oCitAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxl
KCkKKyAjZW5kaWYKKyB9CisgCisraW5saW5lIGJvb2wgSXNNYWMoKQorK3sKKysjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykK
KysgICAgcmV0dXJuIHRydWU7CisrI2Vsc2UKKysgICAgcmV0dXJuIGZhbHNlOworKyNlbmRpZgor
K30KKysKKyBpbmxpbmUgYm9vbCBJc0Z1Y2hzaWEoKQorIHsKKyAjaWYgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9GVUNIU0lBKQorQEAgLTIwNCw2ICsyMTMsOCBAQCBib29sIG9wZXJhdG9yPj0oY29u
c3QgT1NWZXJzaW9uICZhLCBjb25zdCBPU1ZlcnNpb24gJmIpOworIAorIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKTsKKyAKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpOworKworIE9TVmVy
c2lvbiBHZXRMaW51eE9TVmVyc2lvbigpOworIAorIGlubGluZSBib29sIElzQW5kcm9pZCgpCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19pb3MubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmU3YTg0NWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1tCitAQCAtMCwwICsxLDI4IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrCisrLy8gZHJpdmVyX3V0aWxzX2lvcy5tbSA6IHByb3ZpZGVzIGlvcy1z
cGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGRyaXZlci4KKysKKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmgiCisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIHJ4CisreworKworK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKKyt7CisrICAgIE9TVmVyc2lvbiByZXN1bHQ7CisrCisrICAgIE5TT3BlcmF0
aW5nU3lzdGVtVmVyc2lvbiB2ZXJzaW9uID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBv
cGVyYXRpbmdTeXN0ZW1WZXJzaW9uXTsKKysgICAgcmVzdWx0Lm1ham9yVmVyc2lvbiAgICAgICAg
ICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWFqb3JWZXJzaW9uKTsKKysgICAgcmVz
dWx0Lm1pbm9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWlub3JWZXJzaW9uKTsKKysgICAgcmVzdWx0LnBhdGNoVmVyc2lvbiAgICAgICAgICAgICAgPSBz
dGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ucGF0Y2hWZXJzaW9uKTsKKysKKysgICAgcmV0dXJuIHJl
c3VsdDsKKyt9CisrCisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfbWFjLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMu
bW0KK2luZGV4IDNhZjQ2ZmMuLjliNTNlYjcgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2Ry
aXZlcl91dGlsc19tYWMubW0KK0BAIC0xMyw2ICsxMyw3IEBACisgbmFtZXNwYWNlIHJ4Cisgewor
IAorKyNpZiAhVEFSR0VUX09TX0lPUworIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQorIHsK
KyAgICAgT1NWZXJzaW9uIHJlc3VsdDsKK0BAIC0yNCw1ICsyNSw1IEBAIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKQorIAorICAgICByZXR1cm4gcmVzdWx0OworIH0KKy0KKysjZW5kaWYKKyB9
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxl
LmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmM2E2ZDcKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oCitAQCAtMCww
ICsxLDExMiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0
LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorKworKyNpZm5kZWYgU09GVF9MSU5L
SU5HX0FQUExFX0hfCisrI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL3BsYXRmb3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQ
TEUpCisrCisrIyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKysjICAgIGltcG9ydCA8
ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKysjICAgIGltcG9ydCA8ZGxmY24uaD4KKysjICAgIGltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CisrCisrIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVz
c2lvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKysgICAgICAgIChleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICA/IHN0YXRpY19jYXN0PHZvaWQ+KDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgIDogKEZBVEFMKCkg
PDwgIlx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19G
SUxFX18gPDwgIjoiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICA8PCBfX0xJTkVfXyA8PCAi
KTogIiA8PCAjZXhwcmVzc2lvbiA8PCAiXG5cdCEgTWVzc2FnZTogIiA8PCBtZXNzYWdlKSkKKysK
KysjICAgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lO
IGV4dGVybiAiQyIgeworKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19FTkQgfQorKyMgICAgZWxz
ZQorKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19CRUdJTgorKyMgICAgICAgIGRlZmluZSBFWFRF
Uk5fQ19FTkQKKysjICAgIGVuZGlmCisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoZnJhbWV3b3JrKSBleHRlcm4gdm9pZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCk7Cisr
CisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoZnJhbWV3b3JrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgdm9p
ZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgIHN0YXRpYyB2b2lkICpmcmFtZXdvcmtMaWJyYXJ5ID0gTlVMTDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdvcmtM
aWJyYXJ5ID0gZGxvcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICIvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBSVExEX05PVyk7
IFwKKysgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xpYnJhcnksICJVbmFi
bGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBmcmFt
ZXdvcmtMaWJyYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJTktf
RlVOQ1RJT05fSEVBREVSKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJh
bWV0ZXJEZWNsYXJhdGlvbnMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgIEVYVEVSTl9DX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg
ICAgICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEVYVEVS
Tl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBl
IGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBlKCpzb2Z0TGluayMj
ZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAg
ICAgIFwKKysgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKysgICAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1
cm4gc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBT
T0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRU
eXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsICBcCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1l
d29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgICAgICBpbml0IyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwg
XnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25O
YW1lID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICAgICAgICAocmVzdWx0VHlwZSgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMp
ZGxzeW0oZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBz
b2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZU
X0xJTktfQ0xBU1NfSEVBREVSKGNsYXNzTmFtZSkgICAgXAorKyAgICAgICAgQGNsYXNzIGNsYXNz
TmFtZTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBleHRlcm4gQ2xhc3MgKCpn
ZXQjI2NsYXNzTmFtZSMjQ2xhc3MpKCk7IFwKKysgICAgICAgIGNsYXNzTmFtZSAqYWxsb2MjI2Ns
YXNzTmFtZSMjSW5zdGFuY2UoKTsgXAorKyAgICAgICAgaW5saW5lIGNsYXNzTmFtZSAqYWxsb2Mj
I2NsYXNzTmFtZSMjSW5zdGFuY2UoKSB7IHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNzKCkg
YWxsb2NdOyB9CisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0NMQVNTKGZyYW1ld29yaywgY2xh
c3NOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
IEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2Ns
YXNzTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisrICAgICAgICBDbGFzcyAoKmdldCMjY2xhc3NOYW1lIyNDbGFzcykoKSA9IGluaXQjI2Ns
YXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0YXRpYyBD
bGFzcyBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg
ICAgICBzdGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzIyNj
bGFzc05hbWU7IH0gICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
KyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdv
cmsjI0xpYnJhcnkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICAgIGNsYXNzIyNjbGFzc05hbWUgPSBvYmpjX2dldENs
YXNzKCNjbGFzc05hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFp
bGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisrICAgICAgICAgICAgICBnZXQjI2NsYXNzTmFtZSMj
Q2xhc3MgPSBjbGFzc05hbWUjI0Z1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVy
biBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBzdGF0aWMgY2xhc3NO
YW1lICBcCisrICAgICAgICAgICAgICAgICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNjbGFzc05hbWUj
I0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgcG9wIikKKysKKysjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1f
QVBQTEUpCisrCisrI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKK2luZGV4
IGRlMjE2ZmIuLjU1ZGNkOTAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
YXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9hcHBsZS9EaXNwbGF5QXBwbGVfYXBpLmNwcAorQEAgLTEwLDYgKzEwLDcgQEAKKyAjaWZuZGVm
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAjZGVmaW5l
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAKKysjaW5j
bHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL0Rpc3BsYXlJbXBsLmgiCisgCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
T1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitAQCAtMzMsMTEgKzM0
LDEwIEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVnbDo6RGlz
cGxheVN0YXRlICZzdGF0ZSkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICAgaWYg
KCFhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgIHsKKy0gICAgICAgIGltcGwgPSBu
dWxscHRyOworLSAgICAgICAgYnJlYWs7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
fQorIAorLSAgICBpZiAoaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoaW5mby5uZWVkc0VB
R0xPbk1hYykKKyAgICAgeworICAgICAgICAgcmV0dXJuIG5ldyByeDo6RGlzcGxheUVBR0woc3Rh
dGUpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTk1YzBmNgorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCitAQCAtMCwwICsxLDc3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrLy8gQ0dMRnVuY3Rpb25zLmNwcDogRXhwb3Np
bmcgdGhlIHNvZnQtbGlua2VkIENHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRm
b3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrU09GVF9MSU5LX0ZSQU1FV09SS19TT1VS
Q0UoT3BlbkdMKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50ICpucGl4KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJzLCBw
aXgsIG5waXgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dMQ3JlYXRlQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTEVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9y
bWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwaXgsIHNoYXJlLCBjdHgpKQorK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoCisrICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1h
dCwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBp
eF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKysg
ICAgKHBpeCwgcGl4X251bSwgYXR0cmliLCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NP
VVJDRShPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmog
Y3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTERlc3Ry
b3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgpLCAocGl4KSkK
KytTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRXJyb3JTdHJpbmcsIGNvbnN0
IGNoYXIgKiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05f
U09VUkNFKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0
eCksIChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xTZXRDdXJy
ZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRf
TElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMU2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBz
Y3JlZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9T
dXJmYWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAg
ICBHTGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdM
c2l6ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQs
CisrICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAg
ICBHTHVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktf
RlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xD
b250ZXh0T2JqIGN0eCksIChjdHgpKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoCisr
ICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisr
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVy
UHJvcGVydHkgcHJvcCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9w
LCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dMRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUmVu
ZGVyZXJJbmZvT2JqIHJlbmQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmQpKQor
K1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMUXVlcnlSZW5kZXJlckluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBD
R0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNr
LCBDR0xSZW5kZXJlckluZm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZGlzcGxheV9tYXNrLCByZW5kLCBucmVuZCkpCisrCisrI2VuZGlmICAv
LyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTZiODcxZQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMu
aAorQEAgLTAsMCArMSw4NCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIENHTEZ1bmN0aW9ucy5oOiBFeHBvc2luZyB0aGUg
c29mdC1saW5rZWQgQ0dMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8K
KysjZGVmaW5lIENHTF9GVU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3Jt
LmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrIyAgICBpbmNsdWRlIDxPcGVuR0wvT3BlbkdM
Lmg+CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19h
cHBsZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTCkKKysKKytTT0ZU
X0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IENHTENob29zZVBpeGVsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJy
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUgKmF0dHJpYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUGl4ZWxGb3Jt
YXRPYmogKnBpeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TENyZWF0ZUNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIENHTENvbnRl
eHRPYmogc2hhcmUsIENHTENvbnRleHRPYmogKmN0eCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAocGl4LCBzaGFyZSwgY3R4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKAorKyAg
ICBPcGVuR0wsCisrICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisrICAgIENHTEVycm9yLAor
KyAgICAoQ0dMUGl4ZWxGb3JtYXRPYmogcGl4LCBHTGludCBwaXhfbnVtLCBDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZSBhdHRyaWIsIEdMaW50ICp2YWx1ZSksCisrICAgIChwaXgsIHBpeF9udW0sIGF0
dHJpYiwgdmFsdWUpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisrICAgIE9wZW5HTCwK
KysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xSZW5k
ZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVyUHJvcGVydHkgcHJv
cCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCisr
U09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xF
cnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hF
QURFUihPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZv
cm1hdE9iaiBwaXgpLCAocGl4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAocmVuZCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTEVycm9yU3Ry
aW5nLCBjb25zdCBjaGFyICosIChDR0xFcnJvciBlcnJvciksIChlcnJvcikpCisrU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xR
dWVyeVJlbmRlcmVySW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRl
cmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChkaXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0eCks
IChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50
Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dM
U2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3Jl
ZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9TdXJm
YWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAgICBH
TGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdMc2l6
ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQsCisr
ICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAgICBH
THVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktfRlVO
Q1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250
ZXh0T2JqIGN0eCksIChjdHgpKQorKworKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKysjZW5k
aWYgIC8vIENHTF9GVU5DVElPTlNfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NvbnRleHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
b250ZXh0Q0dMLmNwcAoraW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKKy0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKK0BAIC0xMyw2ICsxMyw4IEBACisgI2lu
Y2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0Rpc3BsYXlDR0wuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKyBuYW1lc3BhY2Ug
cngKKyB7CisgCitAQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4Cisr
CisrI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCitpbmRleCBiNWE2MzFh
Li45MGU4MDU4IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNw
bGF5Q0dMLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wu
bW0KK0BAIC0yOSw2ICsyOSw4IEBACisgIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvV2luZG93U3VyZmFjZUNHTC5oIgorICMgICAgaW5jbHVkZSAicGxhdGZvcm0vUGxhdGZv
cm1NZXRob2RzLmgiCisgCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNlCisgeworIAorQEAgLTE2Myw5ICsxNjUsMTAg
QEAgc3RhdGljIHZvaWQgU2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9i
aiwKKyAgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OworIAorICAgICBhbmdsZTo6U3lzdGVtSW5m
byBpbmZvOworLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0ZW1JbmZvIHRvIHJldHVybiBm
YWxzZSBhbmQgdGhlcmVieQorLSAgICAvLyBjb250YWluIGluY29tcGxldGUgaW5mb3JtYXRpb24u
CistICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKysgICAgaWYgKCFhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisrICAgIHsKKysgICAgICAgIHJldHVybiBlZ2w6OkVn
bE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8u
IjsKKysgICAgfQorIAorICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgZWZmZWN0IG9m
IHRoZQorICAgICAvLyBkaXNhYmxlR1BVU3dpdGNoaW5nU3VwcG9ydCB3b3JrYXJvdW5kIGluIEZl
YXR1cmVzR0wuCitAQCAtNDQwLDcgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIFNldEdQVUJ5UmVnaXN0
cnlJRChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosCisgCisgYm9vbCBEaXNwbGF5Q0dMOjppc1Zh
bGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0g
ICAgTlNPYmplY3QgKmxheWVyID0gKF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBO
U09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7Cisg
ICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAK
K2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5t
bSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCitpbmRleCBh
Nzk1MDM3Li5jNTVhZTdmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGlzcGxheUVBR0wubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rp
c3BsYXlFQUdMLm1tCitAQCAtMjcsNiArMjcsOCBAQAorICMgICAgaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KKyAjICAgIGltcG9ydCA8ZGxmY24uaD4KKyAKKysjICAgIGltcG9ydCAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNl
CisgeworIAorQEAgLTY0LDkgKzY2LDEwIEBACisgICAgIG1FR0xEaXNwbGF5ID0gZGlzcGxheTsK
KyAKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgLy8gSXQncyBsZWdhbCBmb3Ig
R2V0U3lzdGVtSW5mbyB0byByZXR1cm4gZmFsc2UgYW5kIHRoZXJlYnkKKy0gICAgLy8gY29udGFp
biBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgorLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5m
bygmaW5mbyk7CisrICAgIGlmICghYW5nbGU6OkdldFN5c3RlbUluZm8oJmluZm8pKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8g
cXVlcnkgQU5HTEUncyBTeXN0ZW1JbmZvLiI7CisrICAgIH0KKyAKKyAgICAgbUNvbnRleHQgPSBb
YWxsb2NFQUdMQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElP
cGVuR0xFUzNdOworICAgICBpZiAobUNvbnRleHQgPT0gbnVsbHB0cikKK0BAIC0xMTMsNiArMTE2
LDcgQEAKKyAgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCisgICAgIHsKKyAgICAgICAgIFtn
ZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKysgICAgICAgIFtt
Q29udGV4dCByZWxlYXNlXTsKKyAgICAgICAgIG1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAg
IG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CisgICAgIH0KK0BAIC0yNzUsNyAr
Mjc5LDcgQEAKKyAKKyBib29sIERpc3BsYXlFQUdMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5h
dGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0gICAgTlNPYmplY3QgKmxheWVyID0g
KF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWlu
dGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CisgICAgIHJldHVybiBbbGF5ZXIgaXNL
aW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAKK0BAIC0zMTEsOSArMzE1LDggQEAK
KyAgICAgb3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0ICAgID0gdHJ1ZTsKKyAgICAg
b3V0RXh0ZW5zaW9ucy0+ZGV2aWNlUXVlcnkgICAgICAgICAgID0gdHJ1ZTsKKyAKKy0gICAgLy8g
Q29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGFucyBzZW1hcGhvcmVzIGNhbiBi
ZSBzaGFyZWQgZ2xvYmFsbHkKKysgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRl
eHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxh
eVRleHR1cmVTaGFyZUdyb3VwID0gdHJ1ZTsKKy0gICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxheVNl
bWFwaG9yZVNoYXJlR3JvdXAgPSB0cnVlOworIAorICAgICBvdXRFeHRlbnNpb25zLT5wb3dlclBy
ZWZlcmVuY2UgPSBmYWxzZTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9FQUdMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MjEy
NTEzCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysvLyBFQUdMRnVuY3Rpb25zLmg6
IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIEVB
R0xfRlVOQ1RJT05TX0hfCisrI2RlZmluZSBFQUdMX0ZVTkNUSU9OU19IXworKworKyNpbmNsdWRl
ICJjb21tb24vcGxhdGZvcm0uaCIKKysKKysjaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9T
KSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKKysgICAgKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FS
TTY0KSkKKysKKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorKyMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3Vy
ZmFjZS5oPgorKworKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtp
bmdfYXBwbGUuaCIKKysKKytTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0xFUykKKysK
KytTT0ZUX0xJTktfQ0xBU1NfSEVBREVSKEVBR0xDb250ZXh0KQorKworKyNlbmRpZiAgLy8gKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUND
QVRBTFlTVCkpIHx8CisrICAgICAgICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorKworKyNlbmRpZiAgLy8gQ0dMX0ZV
TkNUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VB
R0xGdW5jdGlvbnMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rp
b25zLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGIxZWI3MAorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0
aW9ucy5tbQorQEAgLTAsMCArMSwyNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIEVBR0xGdW5jdGlvbnMuY3BwOiBFeHBv
c2luZyB0aGUgc29mdC1saW5rZWQgRUFHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImNvbW1v
bi9wbGF0Zm9ybS5oIgorKworKyNpZiAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwgXAorKyAgICAoZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQor
KworKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisrIyAgICBpbXBvcnQgPE9wZW5HTEVT
L0VBR0xEcmF3YWJsZS5oPgorKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+
CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBs
ZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorKworK1NPRlRf
TElOS19DTEFTUyhPcGVuR0xFUywgRUFHTENvbnRleHQpCisrCisrI2VuZGlmICAvLyAoZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKSkgfHwKKysgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNU
KSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKIGRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNF
QUdMLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKIGlu
ZGV4IGVjZTIzNWEuLmFlMDIwN2IgMTAwNjQ0CiAtLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKQEAgLTMwMiw2MCArMjIwNTIsMTMxMTUgQEAgaW5kZXgg
ZWNlMjM1YS4uYWUwMjA3YiAxMDA2NDQKICAjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdh
YmxlLmg+CiAgIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4KICAKLS0jICAg
IGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAg
ICBpbmNsdWRlICJjb21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKy0jICAgIGluY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCisrIyAgICBpbmNsdWRlICJj
b21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKyAKKyBTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURF
UihPcGVuR0xFUykKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVuY3Rp
b25zRUFHTC5tbQoraW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KK0BAIC0xNCw3ICsxNCw3IEBACisg
IyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorICMgICAgaW1wb3J0IDxPcGVu
R0xFUy9FQUdMSU9TdXJmYWNlLmg+CisgCistIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9nbC9hcHBsZS9Tb2Z0TGlua2luZy5oIgorKyMgICAgaW5jbHVkZSAiY29tbW9uL2FwcGxlL1Nv
ZnRMaW5raW5nLmgiCisgCisgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMRVMpCisg
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3Vy
ZmFjZUVBR0wubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJm
YWNlRUFHTC5tbQoraW5kZXggZjE2YzNlNy4uZTMwOWE4NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbQorQEAgLTgz
LDggKzgzLDggQEAgaW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSB0eXBlKQorICAgICAgIG1XaWR0aCgwKSwKKyAgICAgICBtSGVpZ2h0KDAp
LAorICAgICAgIG1QbGFuZSgwKSwKKy0gICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUZvcm1hdEluZGV4KC0xKSwKKysgICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUFscGhhSW5pdGlhbGl6ZWQoZmFsc2UpCisgeworICAgICAvLyBLZWVwIHJlZmVyZW5jZSB0
byB0aGUgSU9TdXJmYWNlIHNvIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlIHBidWZm
ZXIgZXhpc3RzLgorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJl
cmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcAoraW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCitAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBH
ZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKyAKKyAjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgaWYgKGFuZ2xlOjpHZXRT
eXN0ZW1JbmZvKCZpbmZvKSAmJiAhaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoYW5nbGU6
OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLm5lZWRzRUFHTE9uTWFjKQorICAgICB7Cisg
ICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5jdGlvbnMpOworICAgICAg
ICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkgJiYgKm1heFN1cHBvcnRl
ZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCitpbmRleCBkNzBhZTU4Li42MTVkZDQ0IDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5j
cHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3Bw
CitAQCAtMjgxLDkgKzI4MSwxMSBAQCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVl
ZGJhY2tNYXJrZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
JnhmYk91dCkKKyB7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmln
aW5hbFNvdXJjZS5maW5kKGtYZmJEZWNsTWFya2VyKTsKKysgICAgQVNTRVJUKHhmYkRlY2xNYXJr
ZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNs
TWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJr
ZXIpOworIAorICAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNv
dXJjZS5maW5kKGtYZmJPdXRNYXJrZXIsIHhmYkRlY2xNYXJrZXJTdGFydCk7CisrICAgIEFTU0VS
VCh4ZmJPdXRNYXJrZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNp
emVfdCB4ZmJPdXRNYXJrZXJFbmQgPSB4ZmJPdXRNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtY
ZmJPdXRNYXJrZXIpOworIAorICAgICAvLyBUaGUgc2hhZGVyIGlzIHRoZSBmb2xsb3dpbmcgZm9y
bToKK0BAIC0zNjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11
bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFj
ZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyAqdmVydGV4U2hhZGVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJs
ZUluZm9NYXBPdXQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFy
bHlSZXR1cm4pCisgeworICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nPiAmdmFyeWluZ3MgPQorICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKK0BAIC00MTMsNiArNDE2LDEwIEBAIHZvaWQgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvCisgICAgICAgICAgICAgb3V0cHV0T2Zmc2V0ICs9IGluZm8uY29sdW1u
Q291bnQgKiBpbmZvLnJvd0NvdW50ICogdmFyeWluZy5zaXplKCk7CisgICAgICAgICB9CisgICAg
IH0KKysgICAgaWYgKGVhcmx5UmV0dXJuKQorKyAgICB7CisrICAgICAgICB4ZmJPdXQgKz0gInJl
dHVybjsiOworKyAgICB9CisgICAgIHhmYk91dCArPSAifVxuIjsKKyAKKyAgICAgKnZlcnRleFNo
YWRlciA9IFN1YnN0aXR1dGVUcmFuc2Zvcm1GZWVkYmFja01hcmtlcnMoKnZlcnRleFNoYWRlciwg
eGZiRGVjbCwgeGZiT3V0KTsKK0BAIC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xz
bGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisgICAgIHJldHVybiBzYW1wbGVyTmFtZTsKKyB9CisgCistc3RkOjpzdHJpbmcgR2V0WGZiQnVm
ZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKKy17CistICAgIHJldHVybiAieGZi
QnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7CistfQorLQorIHZvaWQgR2xzbGFuZ0dlblRyYW5z
Zm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAm
b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFj
ZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAorQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQg
R2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5n
U291cmNlT3B0aW9ucyAmb3B0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoYWRlckludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZv
TWFwT3V0KQorIHsKKyAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJp
YWJsZUluZm9NYXBPdXQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCwgZmFsc2UpOworIH0KKyAK
KyB2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMg
Jm9wdGlvbnMsCitAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0
aW9ucyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgfQorIAorK3N0ZDo6c3RyaW5n
IEdldFhmYkJ1ZmZlck5hbWUoY29uc3QgdWludDMyX3QgYnVmZmVySW5kZXgpCisreworKyAgICBy
ZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworK30KKysKKysKKyt2b2lkIEds
c2xhbmdBc3NpZ25Mb2NhdGlvbnMoR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAmcHJv
Z3JhbUV4ZWN1dGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpT
aGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsc2xh
bmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFjZUluZm8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFy
aWFibGVJbmZvTWFwT3V0KQorK3sKKysgICAgLy8gQXNzaWduIG91dHB1dHMgdG8gdGhlIGZyYWdt
ZW50IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50KSAmJgorKyAgICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hh
ZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKysgICAgeworKyAgICAgICAgQXNz
aWduT3V0cHV0TG9jYXRpb25zKHByb2dyYW1FeGVjdXRhYmxlLCBnbDo6U2hhZGVyVHlwZTo6RnJh
Z21lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKTsKKysgICAgfQorKworKyAgICAvLyBBc3Np
Z24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNo
YWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkgJiYKKysgICAgICAgIHByb2dyYW1F
eGVjdXRhYmxlLmhhc0xpbmtlZFNoYWRlclN0YWdlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgpKQor
KyAgICB7CisrICAgICAgICBBc3NpZ25BdHRyaWJ1dGVMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFi
bGUsIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFn
ZShnbDo6U2hhZGVyVHlwZTo6Q29tcHV0ZSkpCisrICAgIHsKKysgICAgICAgIC8vIEFzc2lnbiB2
YXJ5aW5nIGxvY2F0aW9ucy4KKysgICAgICAgIEFzc2lnblZhcnlpbmdMb2NhdGlvbnMob3B0aW9u
cywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKwor
KyAgICAgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5nZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzKCkuZW1wdHkoKSAmJgorKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFu
c2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6
VmVydGV4KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBc3NpZ25UcmFuc2Zvcm1GZWVkYmFj
a0V4dGVuc2lvblF1YWxpZmllcnMoCisrICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxl
LCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKysg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgQXNzaWduVW5pZm9ybUJpbmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFk
ZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlSW5mb01hcE91dCk7CisrICAgIEFzc2lnblRleHR1cmVCaW5kaW5ncyhvcHRpb25z
LCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKyAgICBBc3Np
Z25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5
cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVJbmZvTWFwT3V0KTsKKyt9CisrCisgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNl
KGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZy
ZXNvdXJjZXMsCitAQCAtMzQ2Miw3ICszNTE1LDggQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291
cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMoCisgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBwcm9ncmFtU3RhdGUsIHByb2dyYW1J
bnRlcmZhY2VJbmZvLCB2ZXJ0ZXhTb3VyY2UsCistICAgICAgICAgICAgICAgICAgICAmKCp2YXJp
YWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKysgICAgICAgICAgICAg
ICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisr
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4p
OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAoraW5kZXggMmJk
MmM2MS4uNjAyNDhjZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5n
X3dyYXBwZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3Jh
cHBlcl91dGlscy5oCitAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMKKyAgICAgYm9vbCBzdXBwb3J0c1RyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uID0gZmFsc2U7
CisgICAgIGJvb2wgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICA9IGZhbHNlOwor
ICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKysg
ICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuICAgICAgID0gZmFsc2U7CisgfTsK
KyAKKyB1c2luZyBTcGlydkJsb2IgPSBzdGQ6OnZlY3Rvcjx1aW50MzJfdD47CitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbiBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KK2luZGV4IDhjM2ZkMDUu
LjdiY2RlZDAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlv
bnNfZGF0YS5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNf
ZGF0YS5qc29uCitAQCAtNjcyLDYgKzY3Miw5IEBACisgICAgICJEMzJfRkxPQVRfUzhYMjRfVUlO
VCI6IHsKKyAgICAgICAiR0xfVU5TSUdORURfSU5UXzI0XzgiOiAiTG9hZEQyNFM4VG9EMzJGUzhY
MjQiLAorICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKysgICAg
fSwKKysgICAgIkQzMl9GTE9BVCI6IHsKKysgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWRE
MjRTOFRvRDMyRiIKKyAgICAgfQorICAgfSwKKyAgICJHTF9SMzJJIjogeworZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAor
aW5kZXggMjBlNzA2Zi4uMmVmMDFjYSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCitAQCAtNDQ2LDggKzQ0Niw3
IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfTE9TU1lfREVDT0RFX0VU
QzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9CCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgeworQEAgLTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09N
UFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQor
ICAgICB9CisgfQorIAorLUxvYWRJbWFnZUZ1bmN0aW9uSW5mbworLUNPTVBSRVNTRURfUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VO
T1JNX0JMT0NLKEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFf
UkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzMTIsOCArMTMxMCw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X0VUQzJfdG9fUjhHOEI4QThfVU5PUk1fU1JHQihHTGVudW0gdHlwZSkKKyAgICAg
fQorIH0KKyAKKy1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9E
RUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNX1NSR0JfQkxPQ0soCistICAgIEdMZW51
bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RF
Q09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkK
KyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTEzMjUsOCArMTMyMiw3IEBAIExv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCisgICAg
IH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25JbmZvCistQ09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VOT1JN
X1NSR0JfQkxPQ0soCistICAgIEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5H
TEVfdG9fQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTE1MTAsNiArMTUwNCwxOCBAQCBMb2FkSW1hZ2VGdW5j
dGlvbkluZm8gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JNX1g4X1VJTlQoR0xlbnVtIHR5
cGUpCisgICAgIH0KKyB9CisgCisrTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVO
VDI0X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkKKyt7CisrICAgIHN3aXRjaCAodHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisrICAgICAgICAgICAgcmV0dXJu
IExvYWRJbWFnZUZ1bmN0aW9uSW5mbyhMb2FkRDI0UzhUb0QzMkYsIHRydWUpOworKyAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAgICAgIHJldHVy
biBMb2FkSW1hZ2VGdW5jdGlvbkluZm8oVW5yZWFjaGFibGVMb2FkRnVuY3Rpb24sIHRydWUpOwor
KyAgICB9CisrfQorKworIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90
b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKK0BAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9u
c01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQorICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9TOF9V
SU5UOworICAgICAgICAgICAgICAgICBjYXNlIEZvcm1hdElEOjpEMjRfVU5PUk1fWDhfVUlOVDoK
KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5P
Uk1fWDhfVUlOVDsKKysgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUOgor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9B
VDsKKyAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6
CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZM
T0FUX1M4WDI0X1VJTlQ7CisgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0JVSUxELmduCitpbmRleCA4NjhjNDc2Li4wZDUwZDgxIDEwMDY0NAorLS0tIGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCisrKysgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KK0BAIC02LDcgKzYsNyBAQAorIAorIGltcG9ydCgiLi4v
Li4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCisgCistYXNzZXJ0KGlzX21hYykKKythc3NlcnQoaXNf
bWFjIHx8IGlzX2lvcykKKyBhc3NlcnQoYW5nbGVfZW5hYmxlX21ldGFsKQorIAorIF9tZXRhbF9i
YWNrZW5kX3NvdXJjZXMgPSBbCitAQCAtMjEsNiArMjEsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3Vy
Y2VzID0gWworICAgIkRpc3BsYXlNdGxfYXBpLmgiLAorICAgIkZyYW1lQnVmZmVyTXRsLmgiLAor
ICAgIkZyYW1lQnVmZmVyTXRsLm1tIiwKKysgICJJT1N1cmZhY2VTdXJmYWNlTXRsLmgiLAorKyAg
IklPU3VyZmFjZVN1cmZhY2VNdGwubW0iLAorICAgIlByb2dyYW1NdGwuaCIsCisgICAiUHJvZ3Jh
bU10bC5tbSIsCisgICAiUXVlcnlNdGwuaCIsCitAQCAtNTIsNiArNTQsOCBAQCBfbWV0YWxfYmFj
a2VuZF9zb3VyY2VzID0gWworICAgIm10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSIsCisgICAi
bXRsX2Zvcm1hdF91dGlscy5oIiwKKyAgICJtdGxfZm9ybWF0X3V0aWxzLm1tIiwKKysgICJtdGxf
Z2xzbGFuZ19tdGxfdXRpbHMuaCIsCisrICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKKyAg
ICJtdGxfZ2xzbGFuZ191dGlscy5oIiwKKyAgICJtdGxfZ2xzbGFuZ191dGlscy5tbSIsCisgICAi
bXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgiLAorQEAgLTY1LDEyICs2OSwxMSBAQCBfbWV0YWxf
YmFja2VuZF9zb3VyY2VzID0gWworICAgIm10bF91dGlscy5oIiwKKyAgICJtdGxfdXRpbHMubW0i
LAorICAgInNoYWRlcnMvY29uc3RhbnRzLmgiLAorLSAgInNoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aCIsCistICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisr
ICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIKKyBdCisgCisg
Y29uZmlnKCJhbmdsZV9tZXRhbF9iYWNrZW5kX2NvbmZpZyIpIHsKKy0gIGRlZmluZXMgPSBbICJB
TkdMRV9FTkFCTEVfTUVUQUwiIF0KKysgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwi
LCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCisgICBsZGZsYWdzID0gWworICAgICAiLXdl
YWtfZnJhbWV3b3JrIiwKKyAgICAgIk1ldGFsIiwKK0BAIC05NiwxMiArOTksMTYgQEAgYW5nbGVf
c291cmNlX3NldCgiYW5nbGVfbWV0YWxfYmFja2VuZCIpIHsKKyAgICAgIiR7YW5nbGVfcm9vdH06
bGliQU5HTEVfaGVhZGVycyIsCisgICBdCisgCistICBkZXBzID0gWyAiJHthbmdsZV9zcGlydl9j
cm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiIF0KKysgIGRlcHMgPSBbCisrICAgICIk
YW5nbGVfc3BpcnZfdG9vbHNfZGlyOnNwdnRvb2xzX3ZhbCIsCisrICAgICIke2FuZ2xlX3NwaXJ2
X2Nyb3NzX2Rpcn0vZ246c3BpcnZfY3Jvc3Nfc291cmNlcyIsCisrICBdCisgCisgICBvYmpjX2Zs
YWdzID0gWworICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAorICAgICAiLVdu
by11bmd1YXJkZWQtYXZhaWxhYmlsaXR5IiwKKyAgICAgIi1mbm8tb2JqYy1hcmMiLAorKyAgICAi
LVduby1leHRyYS1zZW1pLXN0bXQiLAorICAgXQorICAgY2ZsYWdzX29iamMgKz0gb2JqY19mbGFn
cworICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKK2luZGV4IDc2MjU0OWUuLjlmOWVjNmMgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaAorQEAgLTE1MiwxMCArMTUyLDE1IEBAIGNsYXNzIEJ1
ZmZlck10bCA6IHB1YmxpYyBCdWZmZXJJbXBsLCBwdWJsaWMgQnVmZmVySG9sZGVyTXRsCisgCisg
ICAgIENvbnZlcnNpb25CdWZmZXJNdGwgKmdldFVuaWZvcm1Db252ZXJzaW9uQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHQsIHNpemVfdCBvZmZzZXQpOworIAorKyAgICAvLyBOT1RFKGhxbGUpOiBJ
ZiB0aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhw
bGljaXRseQorKyAgICAvLyBjYWxsZWQuCisrICAgIHZvaWQgbWFya0NvbnZlcnNpb25CdWZmZXJz
RGlydHkoKTsKKysKKyAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1TdGF0ZS5nZXRTaXplKCkpOyB9CisgCisgICBwcml2YXRlOgorICAgICBhbmds
ZTo6UmVzdWx0IHNldERhdGFJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSk7CitAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xh
c3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwK
KyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3Qgc2l6ZSk7CisgCistICAgIHZvaWQgbWFya0NvbnZlcnNp
b25CdWZmZXJzRGlydHkoKTsKKy0KKyAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7
CisrCisgICAgIGJvb2wgY2xpZW50U2hhZG93Q29weURhdGFOZWVkU3luYyhDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKKyAgICAgdm9pZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250
ZXh0TXRsICpjb250ZXh0TXRsKTsKKyAgICAgdWludDhfdCAqc3luY0FuZE9idGFpblNoYWRvd0Nv
cHkoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgCisrICAgIC8vIENvbnZlbmllbnQgbWV0aG9k
CisrICAgIGNvbnN0IHVpbnQ4X3QgKmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93
Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKysgICAgfQorICAgICAvLyBDbGllbnQg
c2lkZSBzaGFkb3cgYnVmZmVyCisgICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7
CisgCisgICAgIC8vIEdQVSBzaWRlIGJ1ZmZlcnMgcG9vbAorICAgICBtdGw6OkJ1ZmZlclBvb2wg
bUJ1ZmZlclBvb2w7CisgCistICAgIC8vIEEgY2FjaGUgb2YgY29udmVydGVkIGJ1ZmZlciBkYXRh
LgorKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KKyAgICAgc3RkOjp2
ZWN0b3I8VmVydGV4Q29udmVyc2lvbkJ1ZmZlck10bD4gbVZlcnRleENvbnZlcnNpb25CdWZmZXJz
OworIAorICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENv
bnZlcnNpb25CdWZmZXJzOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9CdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1t
CitpbmRleCA2NGM3ZGU4Li44MDk2OTk2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5tbQorQEAgLTIzLDYgKzIzLDEwIEBACisgLy8gU3RhcnQgd2l0aCBhIGZhaXJs
eSBzbWFsbCBidWZmZXIgc2l6ZS4gV2UgY2FuIGluY3JlYXNlIHRoaXMgZHluYW1pY2FsbHkgYXMg
d2UgY29udmVydCBtb3JlIGRhdGEuCisgY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVu
dEFycmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKKyAKKysvLyBUaGUgbWF4IHNpemUg
dGhhdCB3ZSB3aWxsIHVzZSBidWZmZXIgcG9vbCBmb3IgZHluYW1pYyB1cGRhdGUuCisrLy8gSWYg
dGhlIGJ1ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUg
YnVmZmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCisrY29uc3RleHByIHNpemVfdCBrRHlu
YW1pY0J1ZmZlclBvb2xNYXhCdWZTaXplID0gMTI4ICogMTAyNDsKKysKKyB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorIGFuZ2xlOjpSZXN1bHQgR2V0Rmlyc3RMYXN0SW5kaWNlcyhjb25z
dCBJbmRleFR5cGUgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBjb3VudCwKK0BAIC0xMDUsNyArMTA5LDcgQEAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSkKKyB7CistICAgIHJldHVybiBzZXRE
YXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKysgICAgcmV0dXJu
IHNldERhdGFJbXBsKGNvbnRleHQsIHRhcmdldCwgZGF0YSwgaW50ZW5kZWRTaXplLCB1c2FnZSk7
CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXRTdWJEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorQEAgLTE2NCw3ICsxNjgsOCBAQAorIHsKKyAgICAgaWYgKGFjY2Vz
cyAmIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQpCisgICAgIHsKKy0gICAgICAgIEFOR0xF
X1RSWShzZXREYXRhSW1wbChjb250ZXh0LCBudWxscHRyLCBzaXplKCksIG1TdGF0ZS5nZXRVc2Fn
ZSgpKSk7CisrICAgICAgICBBTkdMRV9UUlkoc2V0RGF0YUltcGwoY29udGV4dCwgZ2w6OkJ1ZmZl
ckJpbmRpbmc6OkludmFsaWRFbnVtLCBudWxscHRyLCBzaXplKCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgfQorIAorICAgICBpZiAo
bWFwUHRyKQorQEAgLTM5NSw2ICs0MDAsNyBAQAorIH0KKyAKKyBhbmdsZTo6UmVzdWx0IEJ1ZmZl
ck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVz
YWdlKQorQEAgLTQxMyw2ICs0MTksMTMgQEAKKyAKKyAgICAgc2l6ZV90IGFkanVzdGVkU2l6ZSA9
IHN0ZDo6bWF4PHNpemVfdD4oMSwgaW50ZW5kZWRTaXplKTsKKyAKKysgICAgLy8gRW5zdXJlcyBu
byB2YWxpZGF0aW9uIGxheWVyIGlzc3VlcyBpbiBzdGQxNDAgd2l0aCBkYXRhIHR5cGVzIGxpa2Ug
dmVjMyBiZWluZyAxMiBieXRlcyB2cyAxNgorKyAgICAvLyBpbiBNU0wuCisrICAgIGlmICh0YXJn
ZXQgPT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisrICAgIHsKKysgICAgICAgIGFkanVz
dGVkU2l6ZSA9IHJvdW5kVXBQb3cyKGFkanVzdGVkU2l6ZSwgKHNpemVfdCkxNik7CisrICAgIH0K
KysKKyAgICAgc2l6ZV90IG1heEJ1ZmZlcnM7CisgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgIHsK
K0BAIC00MjcsNyArNDQwLDcgQEAKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgLy8g
ZHluYW1pYyBidWZmZXIsIGFsbG93IHVwIHRvIDEwIHVwZGF0ZSBwZXIgZnJhbWUvZW5jb2Rpbmcg
d2l0aG91dAorICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KKy0gICAgICAgICAgICBp
ZiAoYWRqdXN0ZWRTaXplIDw9IG10bDo6a1NoYXJlZE1lbUJ1ZmZlck1heEJ1ZlNpemVIaW50KQor
KyAgICAgICAgICAgIGlmIChhZGp1c3RlZFNpemUgPD0ga0R5bmFtaWNCdWZmZXJQb29sTWF4QnVm
U2l6ZSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIG1heEJ1ZmZlcnMgPSAxMDsK
KyAgICAgICAgICAgICAgICAgbUJ1ZmZlclBvb2wuc2V0QWx3YXlzVXNlU2hhcmVkTWVtKCk7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCitpbmRleCBhNTg2Njcw
Li4zZTI5YjRkIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBp
bGVyTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwu
bW0KK0BAIC0xMCw2ICsxMCw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0NvbXBpbGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZh
cmlhYmxlLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDcgKzIxLDE2IEBACisgCisg
U2hTaGFkZXJPdXRwdXQgQ29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlKCkgY29u
c3QKKyB7CisrICAgIGlmIChzaDo6cmVhZEJvb2xFbnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9T
UElSViIpKQorKyAgICB7CisrICAgICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBHTCBvdXRwdXQg
Zmlyc3QsIHdlIGNhbid0IGFjdHVhbGx5CisrICAgICAgICAvLyBnZXQgTVNMIGNvZGUgdW50aWwg
bGluayB0aW1lLiBUcmFuc2xhdGlvbiB0aW1lIGlzIHRvbyBlYXJseQorICAgICAgICAgcmV0dXJu
IFNIX0dMU0xfTUVUQUxfT1VUUFVUOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgcmV0dXJuIFNIX01TTF9NRVRBTF9PVVRQVVQ7CisrICAgIH0KKyB9CisgCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKK2luZGV4
IDE2ODdjOGMuLjJmMzkzNzEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQ29udGV4dE10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oCitAQCAtMjksOCArMjksOCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bDsKKyBjbGFzcyBW
ZXJ0ZXhBcnJheU10bDsKKyBjbGFzcyBQcm9ncmFtTXRsOworIGNsYXNzIFJlbmRlclRhcmdldE10
bDsKKy1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRs
OworK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKKytjbGFzcyBCdWZmZXJNdGw7CisgCisgY2xh
c3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAor
IHsKK0BAIC04NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dElt
cGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRl
eCkgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFz
ZVZlcnRleEJhc2VJbnN0YW5jZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpQcmltaXRpdmVNb2RlIG1vZGUsCitAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0
TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdMaW50ICpiYXNlVmVydGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqYmFz
ZUluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworKyAg
ICBhbmdsZTo6UmVzdWx0IGRyYXdFbGVtZW50c1NpbXBsZVR5cGVzUHJpbWl0aXZlUmVzdGFydChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5kaWNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpOworIAorICAgICAvLyBEZXZpY2UgbG9z
cworICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRl
OworQEAgLTE5Niw2ICsyMDIsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJ
bXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgIGNvbnN0IGdsOjpFeHRlbnNpb25zICZnZXRO
YXRpdmVFeHRlbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgIGNvbnN0IGdsOjpMaW1pdGF0
aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKKyAKKysgICAgY29u
c3QgUHJvZ3JhbU10bCAqZ2V0UHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1Qcm9ncmFtOyB9Cisr
CisgICAgIC8vIFNoYWRlciBjcmVhdGlvbgorICAgICBDb21waWxlckltcGwgKmNyZWF0ZUNvbXBp
bGVyKCkgb3ZlcnJpZGU7CisgICAgIFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6
U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKK0BAIC0yNDksMTIgKzI1NywyNCBAQCBjbGFz
cyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgR0xiaXRmaWVsZCBiYXJyaWVycykgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxk
IGJhcnJpZXJzKSBvdmVycmlkZTsKKyAKKysgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0
ZUNoYW5nZWQoKTsKKysgICAgYW5nbGU6OlJlc3VsdCBvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2so
CisrICAgICAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgICAgICBjb25zdCBnbDo6VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKysKKysgICAg
dm9pZCBvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisrCisrICAgIHZvaWQgcG9wdWxhdGVUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlclNldCgKKysgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKysgICAgICAgIGNv
bnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZl
cnMpOworICAgICAvLyBvdmVycmlkZSBtdGw6OkVycm9ySGFuZGxlcgorICAgICB2b2lkIGhhbmRs
ZUVycm9yKEdMZW51bSBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpm
aWxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKKy0gICAgdm9pZCBo
YW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZvaWQgaGFuZGxlRXJy
b3IoTlNFcnJvciAqZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkgb3ZlcnJpZGU7CitAQCAtMjcyLDEyICsy
OTIsMTIgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAorICAgICB2b2lkIG9uRHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKKy0gICAgdm9pZCBv
bkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBXaW5kb3dTdXJm
YWNlTXRsICpiYWNrYnVmZmVyKTsKKysgICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpOwor
IAorICAgICAvLyBJbnZva2UgYnkgUXVlcnlNdGwKKy0gICAgYW5nbGU6OlJlc3VsdCBvbk9jY2x1
c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSk7CistICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKy0gICAgdm9pZCBvbk9jY2x1c2lvblF1ZXJ5RGVzdHJv
eShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKysgICAgYW5n
bGU6OlJlc3VsdCBvbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXJ5TXRsICpxdWVyeSk7CisrICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworKyAgICB2b2lkIG9u
T2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5
TXRsICpxdWVyeSk7CisgCisgICAgIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhl
biByZXN0YXJ0IG9jY2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCisg
ICAgIGJvb2wgaGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSBjb25zdCB7IHJldHVybiBtT2NjbHVz
aW9uUXVlcnk7IH0KK0BAIC0zNjcsNyArMzg3LDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1Ymxp
YyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlG
YW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwKK0BAIC00MTcsNiArNDM3LDE4IEBAIGNsYXNz
IENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQp
OworIAorKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFy
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworKworKyAgICB2
b2lkIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5
cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291
bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRl
eFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGJ1ZmZlck9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaW5zdGFuY2VzKTsKKysKKyAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNv
bnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CisgCisgICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoRnJh
bWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLAorQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAg
IGFuZ2xlOjpSZXN1bHQgZmlsbERyaXZlclhGQlVuaWZvcm1zKEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworKyAgICBhbmdsZTo6UmVzdWx0IGhh
bmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6
UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsK
KyAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpOworQEAgLTQ3MCw2ICs1MDMsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVi
bGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICBESVJUWV9CSVRf
UkVOREVSX1BJUEVMSU5FLAorICAgICAgICAgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5E
SU5HLAorICAgICAgICAgRElSVFlfQklUX1JBU1RFUklaRVJfRElTQ0FSRCwKKysgICAgICAgIERJ
UlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKKyAgICAgICAgIERJUlRZX0JJVF9N
QVgsCisgICAgIH07CisgCitAQCAtNDg4LDcgKzUyMiw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBw
dWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgIHVpbnQzMl90
IHhmYkFjdGl2ZVVucGF1c2VkOworICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3
OworICAgICAgICAgLy8gTk9URTogRXhwbGljaXQgcGFkZGluZy4gRmlsbCBpbiB3aXRoIHVzZWZ1
bCBkYXRhIHdoZW4gbmVlZGVkIGluIHRoZSBmdXR1cmUuCistICAgICAgICBpbnQzMl90IHBhZGRp
bmdbM107CisrICAgICAgICBpbnQzMl90IHBhZGRpbmdfMFszXTsKKyAKKyAgICAgICAgIGludDMy
X3QgeGZiQnVmZmVyT2Zmc2V0c1s0XTsKKyAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNl
dHNbNF07CitAQCAtNTA4LDEyICs1NDIsMTUgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBD
b250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorIAorICAgICAgICAgdWludDMyX3QgY292
ZXJhZ2VNYXNrOworIAorLSAgICAgICAgZmxvYXQgcGFkZGluZzJbM107CisrICAgICAgICBpbnQz
Ml90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKysKKysgICAgICAgIC8vIE5PVEU6IEV4cGxpY2l0IHBh
ZGRpbmcuIEZpbGwgaW4gd2l0aCB1c2VmdWwgZGF0YSB3aGVuIG5lZWRlZCBpbiB0aGUgZnV0dXJl
LgorKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFbMl07CisgICAgIH07CisgCisgICAgIHN0cnVj
dCBEZWZhdWx0QXR0cmlidXRlCisgICAgIHsKKy0gICAgICAgIHVpbnQ4X3QgdmFsdWVzW3NpemVv
ZihmbG9hdCkgKiA0XTsKKysgICAgICAgIGZsb2F0IHZhbHVlc1s0XTsKKyAgICAgfTsKKyAKKyAg
ICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKK0BAIC01MjIs
NiArNTU5LDEzIEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1Ymxp
YyBtdGw6OkNvbnRleHQKKyAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciBtUmVuZGVyRW5j
b2RlcjsKKyAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOworICAgICBt
dGw6OkNvbXB1dGVDb21tYW5kRW5jb2RlciBtQ29tcHV0ZUVuY29kZXI7CisrICAgIC8vIFRPRE8o
amN1bm5pbmdoYW0pOgorKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJz
dFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKysgICAgLy8gVHJhbnNmb3JtRmVlZGJhY2tNdGw6Omdl
dEJ1ZmZlck9mZnNldHMuICBXZSBzaG91bGQgc3dpdGNoCisrICAgIC8vIHRvIHVzaW5nIGdsX0Jh
c2VWZXJ0ZXggLT4gYmFzZV92ZXJ0ZXggaW4gTVNMCisrICAgIEdMaW50IG1YZmJCYXNlVmVydGV4
OworKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyB2ZXJ0ZXggY291bnQgYXMg
d2VsbCB0byBzdXBwb3J0IGluc3RhbmNlZCBkcmF3IGNhbGxzCisrICAgIEdMdWludCBtWGZiVmVy
dGV4Q291bnRQZXJJbnN0YW5jZTsKKyAKKyAgICAgLy8gQ2FjaGVkIGJhY2stZW5kIG9iamVjdHMK
KyAgICAgRnJhbWVidWZmZXJNdGwgKm1EcmF3RnJhbWVidWZmZXIgPSBudWxscHRyOworQEAgLTU1
NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJs
aWMgbXRsOjpDb250ZXh0CisgICAgIG10bDo6QnVmZmVyUG9vbCBtVHJpRmFuSW5kZXhCdWZmZXI7
CisgICAgIC8vIG9uZSBidWZmZXIgY2FuIGJlIHJldXNlZCBmb3IgYW55IHN0YXJ0aW5nIHZlcnRl
eCBpbiBEcmF3QXJyYXlzKCkKKyAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4
QnVmZmVyOworKyAgICAvLworKyAgICBtdGw6OkJ1ZmZlclBvb2wgbVByaW1pdGl2ZVJlc3RhcnRC
dWZmZXI7CisgCisgICAgIC8vIER1bW15IHRleHR1cmUgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9ubHkgcGFzcy4KKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1EdW1teVhGQlJlbmRl
clRleHR1cmU7CitAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMg
Q29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAKKyAgICAgRGVmYXVsdEF0dHJpYnV0
ZSBtRGVmYXVsdEF0dHJpYnV0ZXNbbXRsOjprTWF4VmVydGV4QXR0cmlic107CisgCisrICAgIC8v
IFRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29u
c3QgQnVmZmVyTXRsICo+IG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzOworKworICAg
ICBJbmNvbXBsZXRlVGV4dHVyZVNldCBtSW5jb21wbGV0ZVRleHR1cmVzOworICAgICBib29sIG1J
bmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9IGZhbHNlOworIH07CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwubW0gYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQoraW5kZXggMjdlNjk3OC4uNDVhMDkyOCAxMDA2
NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQorQEAgLTQ0LDI1ICs0
NCw2IEBACisgY29uc3RleHByIHVpbnQzMl90IGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJG
cmFtZSA9IDEwOworICNlbmRpZgorIAorLSNkZWZpbmUgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdf
UFJPQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgLyogTm9ybWFsIGRyYXcgY2FsbCAq
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAg
ICAgLyogRmlyc3QgcGFzczogd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgaW4gdmVydGV4IHNoYWRlciwg
ZnJhZ21lbnQgc2hhZGVyIGluYWN0aXZlICovICAgXAorLSAgICAgICAgRFJBV19QUk9DKHRydWUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIC8qIFNlY29u
ZCBwYXNzOiBmdWxsIHJhc3Rlcml6YXRpb246IHZlcnRleCBzaGFkZXIgKyBmcmFnbWVudCBzaGFk
ZXIgYXJlIGFjdGl2ZS4gXAorLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRv
IHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAor
LSAgICAgICAgICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIERSQVdf
UFJPQyhmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorLSAgICB9CistCisgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJv
bVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHZlcnRleENvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUG9vbCAqcG9vbCwK
K0BAIC04NCw3ICs2NSw3IEBACisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCistYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZUxpbmVMb29wQnVmZmVyRnJvbVBvb2woQ29u
dGV4dE10bCAqY29udGV4dCwKKythbmdsZTo6UmVzdWx0IEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wo
Q29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbmRpY2VzVG9SZXNlcnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpidWZmZXJPdXQsCitAQCAtMTA1LDEyICs4
Niw3IEBAIGJvb2wgTmVlZFRvSW52ZXJ0RGVwdGhSYW5nZShmbG9hdCBuZWFyLCBmbG9hdCBmYXIp
CisgICAgIHJldHVybiBuZWFyID4gZmFyOworIH0KKyAKKy1ib29sIElzVHJhbnNmb3JtRmVlZGJh
Y2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKy17CistICAgIHJldHVybiBnbFN0YXRl
LmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpICYmIGdsU3RhdGUuaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKTsKKy19CistCistc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRv
U3RyaW5nKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisrc3RkOjpzdHJpbmcg
Q29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworICAgICBzdGQ6OnN0cmluZyBjcHBTdHJpbmc7CisgICAgIGlmIChsZW5ndGggPT0gMCkKK0BA
IC0xNzMsNyArMTQ5LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICB7aW5kZXhUeXBlT3JOb25lLCB2
ZXJ0ZXhPckluZGV4Q291bnQsIGluZGljZXMsIG1MaW5lTG9vcEluZGV4QnVmZmVyLCAwfSkpOwor
ICAgICAgICAgfQorIAorLSAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0
KG1Db250ZXh0TXRsKSk7CisrICAgICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21t
aXQobUNvbnRleHRNdGwsIGZhbHNlKSk7CisgCisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgICAgIH0KK0BAIC0xOTEsNyArMTY3LDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgbUNtZEJ1ZmZl
cigmZGlzcGxheS0+Y21kUXVldWUoKSksCisgICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZm
ZXIsIG1PY2NsdXNpb25RdWVyeVBvb2wpLAorICAgICAgIG1CbGl0RW5jb2RlcigmbUNtZEJ1ZmZl
ciksCistICAgICAgbUNvbXB1dGVFbmNvZGVyKCZtQ21kQnVmZmVyKQorKyAgICAgIG1Db21wdXRl
RW5jb2RlcigmbUNtZEJ1ZmZlciksCisrICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2Uo
MCkKKyB7fQorIAorIENvbnRleHRNdGw6On5Db250ZXh0TXRsKCkge30KK0BAIC0yMDgsNiArMTg1
LDggQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIG1MaW5lTG9vcExhc3RTZWdtZW50SW5kZXhCdWZmZXIuaW5pdGlhbGl6ZSh0aGlz
LCAyICogc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVM
b29wQnVmZmVyc1BlckZyYW1lKTsKKysgICAgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuaW5pdGlh
bGl6ZSh0aGlzLCAwLCBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJz
UGVyRnJhbWUpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQor
QEAgLTIyNywyMyArMjA2LDIwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3Qg
Z2w6OlN0YXRlICZnbFN0YXRlKQorIAorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZW5zdXJl
SW5jb21wbGV0ZVRleHR1cmVzQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7
CistICAgIGlmIChBTkdMRV9MSUtFTFkobUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkK
KysgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQp
KQorICAgICB7CistICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistICAg
IH0KKy0gICAgY29uc3RleHByIGdsOjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNb
XSA9IHtnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgZ2w6OlRleHR1cmVUeXBlOjpfM0QsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlOjpfMkRBcnJheSwKKysgICAgICAgIGNvbnN0ZXhwciBnbDo6VGV4dHVyZVR5cGUg
c3VwcG9ydGVkVGV4dHVyZVR5cGVzW10gPSB7CisrICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAor
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcH07CistICAgIGZvciAoZ2w6OlRl
eHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisrICAgICAgICBmb3Ig
KGF1dG8gdGV4VHlwZSA6IHN1cHBvcnRlZFRleHR1cmVUeXBlcykKKyAgICAgICAgIHsKKyAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKy0gICAgICAgIEFOR0xFX1RSWShtSW5jb21w
bGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxw
dHIsICZ0ZXh0dXJlKSk7CistCistICAgICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsICAgICAg
ICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworLSAgICAgICAgdGV4dHVy
ZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1
cmUiOworKyAgICAgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRSh0ZXh0dXJlKTsKKysgICAg
ICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMu
Z2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUp
KTsKKyAgICAgICAgIH0KKyAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9
IHRydWU7CistCisrICAgIH0KKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
IH0KKyAKK0BAIC0yODIsNyArMjU4LDE3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIHRoaXMsIHswLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oY291bnQpLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsIDB9KSk7Cisg
ICAgIH0KKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0
LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52
YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSkpOworKyAgICAgICAgLy8gRHJhdyB3aXRoIHRoZSB6ZXJv
IHN0YXJ0aW5nIGluZGV4IGJ1ZmZlciwgc2hpZnQgdGhlIHZlcnRleCBpbmRleCB1c2luZyBiYXNl
VmVydGV4CisrICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKysgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleChNVExQcmltaXRpdmVUeXBlVHJpYW5n
bGUsIGdlbkluZGljZXNDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIG1UcmlGYW5BcnJheXNJbmRl
eEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKysgICAgfQorIAorICAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
CitAQCAtMzExLDE2ICsyOTcsMjMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25z
dCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGZpcnN0KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAor
ICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZ
KG1UcmlGYW5JbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworKyAgICBBTkdMRV9UUlkobVRyaUZh
bkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOworIAorLSAgICBBU1NFUlQoIWdldFN0
YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpOworKyAgICBpZiAobVN0
YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KDApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7Cisg
CisrICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5z
dGFuY2VzKTsKKysgICAgfQorICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UpKTsKKyAKKy0gICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQoTVRMUHJpbWl0
aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKy0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQpOworKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTM2OCwyMiArMzYxLDI3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CisgICAg
IHVpbnQzMl90IGdlbkluZGljZXNDb3VudCA9IGNvdW50ICsgMTsKKyAKKy0gICAgQU5HTEVfVFJZ
KEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZt
TGluZUxvb3BJbmRleEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZ2VuSWR4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIEFO
R0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIGdlbkluZGljZXNDb3VudCwgJm1M
aW5lTG9vcEluZGV4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgIEFOR0xFX1RSWShn
ZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMo
CisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpcnN0KSwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAorICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVy
LmNvbW1pdCh0aGlzKSk7CisrICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21t
aXQodGhpcywgZmFsc2UpKTsKKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwg
aW5zdGFuY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKKyAKKysgICAgICAgIGV4ZWNEcmF3
SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQor
ICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5l
TG9vcCwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOworIAor
LSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
TGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZm
ZXJPZmZzZXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Rh
bmNlcyk7CisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGlu
ZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTQxMywyMSArNDExLDMzIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorIAorICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6
OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVko
eGZiUGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorLSAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVu
dW0sIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCB4ZmJQYXNzKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBpZiAoaW5zdGFu
Y2VzID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCistICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJv
bSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291
bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIGVsc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbnN0YW5j
ZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1
c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9k
ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworKwor
KyAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIG5vcm1hbCBkcmF3QXJyYXlzKCkKKysgICAgICAg
ICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZXhlY0RyYXdJbnN0
YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0K
KyAgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgZmFsc2UpKTsKKyAKKy0gICAgQU5HTEVfTVRM
X1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKysgICAgaWYgKGluc3RhbmNlcyA9PSAwKQor
KyAgICB7CisrICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJh
d0FycmF5cygpCisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBj
b3VudCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBleGVjRHJhd0luc3Rh
bmNlZChtdGxUeXBlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlQ291bnQpOworKyAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtNDgwLDE2ICs0OTAs
MjUgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZnZW5JZHhCdWZmZXJPZmZzZXQsICZnZW5JbmRpY2VzQ291bnQpKTsKKyAKKyAgICAgICAgIEFO
R0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSgKKy0gICAgICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMs
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBwcmltaXRpdmVSZXN0YXJ0fSkpOwor
KyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBn
ZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorKyAgICAgICAgICAgICZnZW5J
bmRpY2VzQ291bnQpKTsKKyAKKy0gICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIu
Y29tbWl0KHRoaXMpKTsKKysgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29t
bWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBj
b3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNl
ZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBl
VUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgICAgIH0KKyAKKyAgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRpY2VzLCBmYWxzZSkpOworIAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRl
eFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKysgICAgICAg
IGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbklu
ZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwor
IAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAvLyBp
ZiAoY291bnQgPiAzKQorQEAgLTUzMiwyNyArNTUxLDg3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgdWludDMyX3QgZ2Vu
SWR4QnVmZmVyT2Zmc2V0OworICAgICAgICAgdWludDMyX3QgcmVzZXJ2ZWRJbmRpY2VzID0gY291
bnQgKiAyOworICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OworLSAgICAgICAgQU5H
TEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCByZXNlcnZlZEluZGlj
ZXMsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKKysgICAgICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1
ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZl
ciwgJmdlbklkeEJ1ZmZlck9mZnNldCkpOworIAorICAgICAgICAgQU5HTEVfVFJZKGdldERpc3Bs
YXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXko
CisgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIs
IGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0sCisgICAgICAgICAgICAgJmdl
bkluZGljZXNDb3VudCkpOworIAorLSAgICAgICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVm
ZmVyLmNvbW1pdCh0aGlzKSk7CisrICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZm
ZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFO
R0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAw
LCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4
VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4
QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisrICAgICAgICB9CisgCisg
ICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpM
aW5lTG9vcCwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKKyAKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRy
YXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXND
b3VudCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTElu
ZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOworKyAgICAg
ICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdl
bkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworIAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAv
LyBpZiAoY291bnQgPj0gMikKKyAgICAgcmV0dXJuIGRyYXdFbGVtZW50c0luc3RhbmNlZChjb250
ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXMsIGNvdW50LCB0eXBlLCBpbmRpY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgfQorK2FuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2Rl
IG1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBpbnN0YW5jZXMpCisreworKworKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZm
ZXI7CisrICAgIHVpbnQzMl90IGdlbklkeEJ1ZmZlck9mZnNldDsKKysgICAgdWludDMyX3QgcmVz
ZXJ2ZWRJbmRpY2VzID0gY291bnQ7CisrICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisrICAg
IEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywg
Jm1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIHN3aXRj
aCAobW9kZSkKKysgICAgeworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6UG9pbnRz
OgorKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorKyAgICAgICAgICAgICAgICB0aGlzLCB7
dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCB0
cnVlfSwKKysgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXM6CisrICAgICAg
ICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRMaW5lc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50
LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAg
ICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlczoKKysgICAgICAgICAgICBB
TkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBp
bmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAgICAg
ICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQorKyAgICBBTkdMRV9UUlkobVByaW1p
dGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKysgICAgTVRMUHJpbWl0aXZlVHlwZSBt
dGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOworKyAgICBpZiAobVN0YXRlLmlz
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAgICBBTkdM
RV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p
ZCAqPigwKSwgdHJ1ZSkpOworKworKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsICh1aW50MzJfdClnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZl
ck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7
CisrCisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2Vu
SW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysK
KysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKyAKKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCitAQCAtNTYzLDcgKzY0Miw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIHsKKyAgICAgLy8gUmVhbCBpbnN0
YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCisgICAg
IEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CistCisg
ICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtNTc3LDE4
ICs2NTUsMzkgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBkcmF3TGluZUxvb3BFbGVtZW50cyhj
b250ZXh0LCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKy0K
KyAgICAgbXRsOjpCdWZmZXJSZWYgaWR4QnVmZmVyOworICAgICBzaXplX3QgY29udmVydGVkT2Zm
c2V0ICAgICAgICAgICAgID0gMDsKKyAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVk
VHlwZSA9IHR5cGU7CisrICAgIHNpemVfdCBjb252ZXJ0ZWRDb3VudCAgICAgICAgICAgICAgPSAo
c2l6ZV90KWNvdW50OworIAorLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1
ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnRlZE9mZnNldCwgJmNv
bnZlcnRlZFR5cGUpKTsKKysgICAgQU5HTEVfVFJZKG1WZXJ0ZXhBcnJheS0+Z2V0SW5kZXhCdWZm
ZXIoY29udGV4dCwgdHlwZSwgbW9kZSwgY291bnQsIGluZGljZXMsICZpZHhCdWZmZXIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQs
ICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKKyAKKyAgICAgQVNTRVJUKGlkeEJ1
ZmZlcik7CisgICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQpID09IDApOworKyAgICB1aW50MzJfdCBjb252ZXJ0ZWRDb3VudGkzMiA9
ICh1aW50MzJfdCljb252ZXJ0ZWRDb3VudDsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb252ZXJ0ZWRDb3VudGkzMiwgaW5zdGFuY2VzLCB0eXBl
LCBpbmRpY2VzLCB0cnVlKSk7CisrICAgICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBt
dGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2Up
KTsKKysgICAgICAgIE1UTEluZGV4VHlwZSBtdGxJZHhUeXBlID0gbXRsOjpHZXRJbmRleFR5cGUo
Y29udmVydGVkVHlwZSk7CisrCisrICAgICAgICBpZiAoaW5zdGFuY2VzID09IDApCisrICAgICAg
ICB7CisrICAgICAgICAgICAgLy8gTm9ybWFsIGRyYXcKKysgICAgICAgICAgICBtUmVuZGVyRW5j
b2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwg
aWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRlZE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAg
ICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKysgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZl
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkT2Zmc2V0
LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMs
IHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CisgCisgICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlw
ZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKKyAKK0BAIC01OTcsMTIgKzY5NiwxMyBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorICAgICB7CisgICAgICAgICAvLyBOb3JtYWwgZHJh
dworLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQobXRsVHlwZSwgY291bnQsIG10
bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0KTsKKysgICAgICAgIG1SZW5kZXJF
bmNvZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBl
LCBpZHhCdWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWRPZmZzZXQpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworICAgICAgICAgLy8gSW5zdGFu
Y2VkIGRyYXcKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsIGNvdW50LCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsIGNvbnZlcnRlZE9mZnNldCwKKysg
ICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkz
MiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKyAKK0BAIC02MjUs
NyArNzI1LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBOT1RFKGhx
bGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKyB9CitAQCAtNjQ5LDEwICs3NDgsOSBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZl
cnRleCkKKyB7CistICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgorICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworIH0KK0BAIC02NjksNyArNzY3
LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0
b3A7CisgfQorLQorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHMo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LAorQEAgLTY5MCw3ICs3
ODcsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xT
dGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBO
T1RFKGhxbGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6U3RvcDsKKyB9CitAQCAtNzEzLDYgKzgwOSw2NCBAQCBib29sIElzVHJhbnNm
b3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisgfQorIAorK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0
YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyt7CisrICAgIGlmIChn
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5h
YmxlZCkKKysgICAgeworKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZChwcmlt
aXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisrICAgIH0K
KysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KHByaW1pdGl2
ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0ZXhDb3VudCk7CisrICAgICAgICBmb3IgKHVpbnQzMl90
IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2luc3QpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisrCisrICAg
ICAgICAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10
bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKKysKKysgICAgICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7Cisr
CisrICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhT
dGFydCwgdmVydGV4Q291bnQpOworKyAgICAgICAgfQorKyAgICAgICAgLy8gUmVzZXQgaW5zdGFu
Y2UgSUQgdG8gemVybworKyAgICAgICAgbVZlcnRleEFycmF5LT5lbXVsYXRlSW5zdGFuY2VEcmF3
U3RlcCgmbVJlbmRlckVuY29kZXIsIDApOworKyAgICB9CisrfQorKworK3ZvaWQgQ29udGV4dE10
bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBp
bmRleENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1U
TEluZGV4VHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2Vz
KQorK3sKKysgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4
SW5zdGFuY2VkRHJhdy5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUs
IGluZGV4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhD
b3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwgYnVmZmVyT2Zmc2V0KTsKKysgICAgICAgIGZv
ciAodWludDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtRHJpdmVyVW5pZm9ybXMuZW11bGF0ZWRJbnN0YW5jZUlEID0gaW5z
dDsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJV
bmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworKworKyAgICAgICAg
ICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVy
LCBpbnN0KTsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChwcmlt
aXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisrICAgICAgICB9
CisrICAgICAgICAvLyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisrICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisrICAg
IH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjptdWx0aURyYXdBcnJheXMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGludCAqZmlyc3RzLAorQEAgLTgwMiwxNSAr
OTU2LDE1IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZn
bFN0YXRlKQorIC8vIEVYVF9kZWJ1Z19tYXJrZXIKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworKyAgICBtQ21kQnVmZmVyLmluc2VydERlYnVnU2lnbihDb252ZXJ0TWFya2VyVG9DcHAobGVu
Z3RoLCBtYXJrZXIpKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxl
bmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorIHsKKy0gICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdH
cm91cChDb252ZXJ0TWFya2VyVG9TdHJpbmcobGVuZ3RoLCBtYXJrZXIpKTsKKysgICAgbUNtZEJ1
ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsK
KyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0KKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OnBvcEdyb3VwTWFya2VyKCkKKyB7CisgICAgIG1DbWRCdWZmZXIucG9w
RGVidWdHcm91cCgpOworQEAgLTExNTUsMTAgKzEzMDksMTIgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgeworICAgICByZXR1cm4gbmV3
IFF1ZXJ5TXRsKHR5cGUpOworIH0KKysKKyBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRl
RmVuY2VOVigpCisgeworICAgICByZXR1cm4gbmV3IEZlbmNlTlZNdGwoKTsKKyB9CisrCisgU3lu
Y0ltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVN5bmMoKQorIHsKKyAgICAgcmV0dXJuIG5ldyBTeW5j
TXRsKCk7CitAQCAtMTIwNSw2ICsxMzYxLDY5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gbnVsbHB0cjsKKyB9Cisg
Cisrdm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtRGlydHlCaXRzLnNl
dChESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpOworKyAgICB9CisrfQorKwor
K3ZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpCisrewor
KyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVk
YmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMo
KTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uQmVnaW5UcmFu
c2Zvcm1GZWVkYmFjaygKKysgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorKyAgICBjb25zdCBnbDo6
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQorK3sK
KysgICAgb25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpOworKworKyAgICBmb3IgKHNp
emVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVmZmVyQ291bnQ7ICsrYnVmZmVy
SW5kZXgpCisrICAgIHsKKysgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycy5jb3VudChidWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBlbmRFbmNvZGluZyhtUmVuZGVyRW5jb2Rlcik7CisrICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlclNldChidWZmZXJDb3VudCwgYnVmZmVycyk7CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyU2V0KAorKyAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgIGNvbnN0
IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMp
CisreworKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVm
ZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisrICAgIHsKKysgICAgICAgIG1DdXJyZW50VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisrICAgIH0K
Kyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKKyt7Cisr
ICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNo
YW5nZWQoKTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAg
ICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisrICAgIH0KKysgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBz
WSwKK0BAIC0xMzMxLDYgKzE1NTAsMTEgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldFBp
eGVsRm9ybWF0KGFuZ2xlRm9ybWF0SWQpOworIH0KKyAKKytjb25zdCBtdGw6OkZvcm1hdENhcHMg
JkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fw
cyhtdGxGb3JtYXQpOworK30KKysKKyAvLyBTZWUgbXRsOjpGb3JtYXRUYWJsZTo6Z2V0VmVydGV4
Rm9ybWF0KCkKKyBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmQ29udGV4dE10bDo6Z2V0VmVydGV4
Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBj
b25zdAorQEAgLTEzMzgsMTEgKzE1NjIsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0
VmVydGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOworIH0KKyAKKy1jb25z
dCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAorLXsKKy0gICAgcmV0dXJuIGdldERpc3BsYXkoKS0+
Z2V0TmF0aXZlRm9ybWF0Q2FwcyhtdGxGb3JtYXQpOworLX0KKy0KKyBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmdldEluY29tcGxldGVUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqKnRleHR1cmVPdXQpCitAQCAtMTM2Miw2ICsxNTgxLDIyIEBA
IGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQor
IAorICAgICAvLyBSZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cworICAgICBtT2NjbHVzaW9uUXVl
cnlQb29sLnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyh0aGlzKTsKKysKKysgICAgbUN1cnJlbnRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIoKTsKKysKKysgICAgLy8gUmVzZXQgc2VyaWFs
cyBmb3IgWEZCIGlmIGFjdGl2ZS4KKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVj
dXRhYmxlICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisrICAg
ICAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisrICAgICAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQg
PSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrCisrICAg
ICAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorKyAgICAg
ICAgICAgIG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkp
OworKworKyAgICAgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZm
ZXJDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKSk7CisrICAgIH0KKyB9CisgCisg
dm9pZCBDb250ZXh0TXRsOjplbmRFbmNvZGluZyhib29sIGZvcmNlU2F2ZVJlbmRlclBhc3NDb250
ZW50KQorQEAgLTEzOTAsNyArMTYyNSw3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIAorIHZvaWQgQ29udGV4dE10bDo6Zmx1c2hDb21t
YW5kQnVmZXIoKQorIHsKKy0gICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisrICAgIGlmICgh
bUNtZEJ1ZmZlci52YWxpZCgpKQorICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0KK0BA
IC0xNDU0LDYgKzE2ODksMjcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIC8vIE5lZWQgdG8gcmUtYXBwbHkgZXZlcnl0aGluZyBv
biBuZXh0IGRyYXcgY2FsbC4KKyAgICAgbURpcnR5Qml0cy5zZXQoKTsKKyAKKysgICAgaWQ8TVRM
RGV2aWNlPiBtZXRhbERldmljZSA9IGdldERpc3BsYXkoKS0+Z2V0TWV0YWxEZXZpY2UoKTsKKysg
ICAgaWYgKG10bDo6RGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2Up
KQorKyAgICB7CisrICAgICAgICBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqb2JqQ0Rlc2MgPSBb
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgcmVuZGVyUGFzc0Rlc2NyaXB0b3JdOworKyAgICAgICAg
ZGVzYy5jb252ZXJ0VG9NZXRhbERlc2Mob2JqQ0Rlc2MpOworKyAgICAgICAgTlNVSW50ZWdlciBt
YXhTaXplID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRh
bERldmljZSk7CisrICAgICAgICBOU1VJbnRlZ2VyIHJlbmRlclRhcmdldFNpemUgPQorKyAgICAg
ICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Iob2Jq
Q0Rlc2MsIHRoaXMsIG1ldGFsRGV2aWNlKTsKKysgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXpl
ID4gbWF4U2l6ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBOU1N0cmluZyAqZXJyb3JTdHJp
bmcgPQorKyAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMg
c2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBk
ZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFNpemUsIG1heFNpemVdOworKyAgICAgICAgICAg
IE5TRXJyb3IgKmVyciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25F
cnJvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGU6LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklu
Zm86QHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5IDogZXJyb3JTdHJpbmd9XTsKKysgICAgICAg
ICAgICB0aGlzLT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19M
SU5FX18pOworKyAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICB9CisrICAgIH0KKyAg
ICAgcmV0dXJuICZtUmVuZGVyRW5jb2Rlci5yZXN0YXJ0KGRlc2MpOworIH0KKyAKK0BAIC0xNDY3
LDkgKzE3MjMsMTAgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3Rh
dGUgJmdsU3RhdGUpCisgCisgICAgIG10bDo6UmVuZGVyUGFzc0Rlc2MgcnBEZXNjOworIAorLSAg
ICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0
OworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5sZXZlbCAgICAgICAgPSBpbmRleC5n
ZXROYXRpdmVMZXZlbCgpOworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5zbGljZU9y
RGVwdGggPSBpbmRleC5oYXNMYXllcigpID8gaW5kZXguZ2V0TGF5ZXJJbmRleCgpIDogMDsKKysg
ICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4
dHVyZVRhcmdldDsKKysgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0
LT5sZXZlbCAgID0gaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKTsKKysgICAgcnBEZXNjLmNvbG9yQXR0
YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPQorKyAgICAgICAgaW5kZXgu
aGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgIHJwRGVzYy5udW1D
b2xvckF0dGFjaG1lbnRzID0gMTsKKyAgICAgcnBEZXNjLnNhbXBsZUNvdW50ICAgICAgICAgPSB0
ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgCitAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBib29s
IElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyB2
b2lkIENvbnRleHRNdGw6OmVuc3VyZUNvbW1hbmRCdWZmZXJSZWFkeSgpCisgeworLSAgICBpZiAo
IW1DbWRCdWZmZXIucmVhZHkoKSkKKysgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCisgICAg
IHsKKyAgICAgICAgIG1DbWRCdWZmZXIucmVzdGFydCgpOworICAgICB9CisgCistICAgIEFTU0VS
VChtQ21kQnVmZmVyLnJlYWR5KCkpOworKyAgICBBU1NFUlQobUNtZEJ1ZmZlci52YWxpZCgpKTsK
KyB9CisgCisgdm9pZCBDb250ZXh0TXRsOjp1cGRhdGVWaWV3cG9ydChGcmFtZWJ1ZmZlck10bCAq
ZnJhbWVidWZmZXJNdGwsCitAQCAtMTY3Nyw3ICsxOTM0LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyB9CisgCistdm9p
ZCBDb250ZXh0TXRsOjpvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorK3ZvaWQgQ29udGV4dE10bDo6b25C
YWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFBy
b3RvY29sICpiYWNrYnVmZmVyKQorIHsKKyAgICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlICAg
ID0gZ2V0U3RhdGUoKTsKKyAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpH
ZXRJbXBsKGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworQEAgLTE2ODYsMTAgKzE5NDMs
MTMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgICAgdXBkYXRlVmlld3BvcnQoZnJh
bWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXROZWFyUGxhbmUoKSwK
KysgICAgICAgICAgICAgICAgICAgZ2xTdGF0ZS5nZXRGYXJQbGFuZSgpKTsKKysgICAgdXBkYXRl
U2Npc3NvcihnbFN0YXRlKTsKKyAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29u
dGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVl
cnlNdGwgKnF1ZXJ5KQorK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVy
eUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCisgewor
ICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOworICAgICBtT2NjbHVzaW9u
UXVlcnkgPSBxdWVyeTsKK0BAIC0xNzA2LDcgKzE5NjYsNyBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVl
cnlFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lk
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorIHsKKyAgICAgQVNTRVJUKG1PY2NsdXNpb25RdWVyeSA9
PSBxdWVyeSk7CisgCitAQCAtMTcxOCw3ICsxOTc4LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgICAgIG1PY2NsdXNpb25RdWVy
eSA9IG51bGxwdHI7CisgfQorLXZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ry
b3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lkIENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyB7CisgICAgIGlmIChxdWVyeS0+Z2V0QWxsb2NhdGVk
VmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CitAQCAtMTcyNiw3ICsxOTg2LDcg
QEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUp
CisgICAgIH0KKyAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSA9PSBxdWVyeSkKKyAgICAgeworLSAg
ICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisrICAgICAgICBvbk9j
Y2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgcXVlcnkpOworICAgICB9CisgICAgIG1PY2NsdXNp
b25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKKyB9CitAQCAt
MTc3MCwyMCArMjAzMCw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorLXZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgVHJhbnNmb3JtRmVlZGJhY2tNdGwgKnhmYikKKy17CistICAg
IC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJlbnQgcmVuZGVyIHBhc3MgdG8gZW5h
YmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCistICAgIC8vIGJ1ZmZlcnMgY291bGQgYmUg
dXNlZCBhcyB2ZXJ0ZXggaW5wdXQuIENvbnNpZGVyIGEgYmV0dGVyIGFwcHJvYWNoLgorLSAgICBl
bmRFbmNvZGluZyh0cnVlKTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZl
ZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRi
YWNrTXRsICp4ZmIpCisteworLSAgICAvLyBOT1RFKGhxbGUpOiBXZSBoYXZlIHRvIGVuZCBjdXJy
ZW50IHJlbmRlciBwYXNzIHRvIGVuYWJsZSBzeW5jaHJvbml6YXRpb24gYmVmb3JlIFhGQgorLSAg
ICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJl
dHRlciBhcHByb2FjaC4KKy0gICAgZW5kRW5jb2RpbmcodHJ1ZSk7CistfQorLQorIHZvaWQgQ29u
dGV4dE10bDo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVu
dCwgdWludDY0X3QgdmFsdWUpCisgeworICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKTsK
K0BAIC0xODQyLDEwICsyMDg4LDE5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGZiUGFzcykKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKKyB7CisgICAg
IEFTU0VSVChtUHJvZ3JhbSk7CisgCisrICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2Zmc2V0cyBvbiBldmVyeSBkcmF3IGNhbGwuCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChmaXJzdFZl
cnRleCAhPSAtMSk7CisrICAgICAgICBtWGZiQmFzZVZlcnRleCAgICAgICAgICAgICA9IGZpcnN0
VmVydGV4OworKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPcklu
ZGV4Q291bnQ7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKysgICAgfQor
KworICAgICAvLyBpbnN0YW5jZXM9MCBtZWFucyBubyBpbnN0YW5jZWQgZHJhdy4KKyAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsKKyAKK0BAIC0x
ODYyLDIwICsyMTE3LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGlydHlBY3RpdmVUZXh0
dXJlcyhjb250ZXh0KSk7CisgICAgIH0KKyAKKy0gICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJU
WV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEKSkKKy0gICAgeworLSAgICAgICAgaWYgKGdldFN0YXRl
KCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCistICAgICAgICB7CistICAg
ICAgICAgICAgLy8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNz
IHNpbmNlIHdlIGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgorLSAgICAgICAgICAgIC8vIHRhcmdl
dCBpZiBvbmx5IFhGQiBpcyBuZWVkZWQuCistICAgICAgICAgICAgaW52YWxpZGF0ZVN0YXRlKGNv
bnRleHQpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOworLSAgICAgICAgfQorLSAgICB9CistCisg
ICAgIGlmICghbVJlbmRlckVuY29kZXIudmFsaWQoKSkKKyAgICAgeworICAgICAgICAgLy8gcmUt
YXBwbHkgZXZlcnl0aGluZworQEAgLTE4ODQsNyArMjEyNSwxMSBAQCBib29sIElzVHJhbnNmb3Jt
RmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgaWYgKG1EaXJ0
eUJpdHMudGVzdChESVJUWV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCisgICAgIHsKKy0gICAgICAg
IEFOR0xFX1RSWShoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29udGV4dCkpOworKyAgICAgICAgLy8g
U3RhcnQgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIKKysgICAgICAgIEFOR0xFX01UTF9UUlko
dGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkp
OworKworKyAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworKyAgICAgICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworICAgICB9CisgCisgICAgIGlmIChtT2NjbHVzaW9uUXVlcnkgJiYg
bU9jY2x1c2lvblF1ZXJ5UG9vbC5nZXROdW1SZW5kZXJQYXNzQWxsb2NhdGVkUXVlcmllcygpID09
IDApCitAQCAtMTg5NCwxNyArMjEzOSwxMSBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1
c2lvblF1ZXJ5SW5SZW5kZXJQYXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKKyAgICAgfQor
IAorLSAgICBib29sIGlzUGlwZWxpbmVEZXNjQ2hhbmdlZDsKKy0gICAgQU5HTEVfVFJZKGNoZWNr
SWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgeGZiUGFzcywgJmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkpOworKyAgICBib29sIGNoYW5nZWRQaXBlbGluZTsKKysgICAgQU5HTEVfVFJZKGNo
ZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNo
YW5nZWRQaXBlbGluZSkpOworIAorICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxz
ZTsKKy0KKy0gICAgaWYgKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKQorLSAg
ICB7CistICAgICAgICAvLyBGaWx0ZXIgb3V0IHVubmVlZGVkIGRpcnR5IGJpdHMKKy0gICAgICAg
IGZpbHRlck91dFhGQk9ubHlEaXJ0eUJpdHMoY29udGV4dCk7CistICAgIH0KKy0KKyAgICAgZm9y
IChzaXplX3QgYml0IDogbURpcnR5Qml0cykKKyAgICAgeworICAgICAgICAgc3dpdGNoIChiaXQp
CitAQCAtMTk1Myw4ICsyMTkyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZP
Uk1fQlVGRkVSU19CSU5ESU5HOgorICAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc0RpcnR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBESVJU
WV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6CisrICAgICAgICAgICAgICAgIEFOR0xF
X1RSWShoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9u
KGNvbnRleHQpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBE
SVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgorLSAgICAgICAgICAgICAgICAvLyBBbHJlYWR5
IGhhbmRsZWQuCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CitAQCAtMTk2Miw3MSArMjIwMywyMCBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICBpZiAoeGZiUGFzcyAmJiAhbURpcnR5Qml0cy50
ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQorLSAgICB7CistICAgICAgICAvLyBJZiBo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKCkgd2FzIG5vdCBjYWxsZWQgYW5kIHRoaXMgaXMgWEZC
IHBhc3MsIHdlIHN0aWxsIG5lZWQgdG8KKy0gICAgICAgIC8vIHVwZGF0ZSBYRkIgcmVsYXRlZCB1
bmlmb3JtcworLSAgICAgICAgQU5HTEVfVFJZKAorLSAgICAgICAgICAgIGZpbGxEcml2ZXJYRkJV
bmlmb3JtcyhmaXJzdFZlcnRleCwgdmVydGV4T3JJbmRleENvdW50LCAvKiogc2tpcHBlZEluc3Rh
bmNlcyAqLyAwKSk7CistICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2
ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworLSAgICB9Cist
CisgICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1Qcm9ncmFtLT5z
ZXR1cERyYXcoY29udGV4dCwgJm1SZW5kZXJFbmNvZGVyLCBtUmVuZGVyUGlwZWxpbmVEZXNjLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVzY0NoYW5nZWQs
IHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7CistCistICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpmaWx0ZXJP
dXRYRkJPbmx5RGlydHlCaXRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0gICAg
QVNTRVJUKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKTsKKy0KKy0gICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50
ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOworLQorLSAgICAvLyBJbiB0cmFuc2Zv
cm0gZmVlZGJhY2sgb25seSBwYXNzLCBvbmx5IHZlcnRleCBzaGFkZXIncyByZWxhdGVkIHN0YXRl
cyBhcmUgbmVlZGVkLgorLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQorLSAg
ICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9TVEVOQ0lMX0RFU0MpIHwK
Ky0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfREVQVEhfQklBUykgfCBhbmds
ZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX1NURU5DSUxfUkVGKSB8CistICAgICAgICBhbmdsZTo6
Qml0PHNpemVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihE
SVJUWV9CSVRfVklFV1BPUlQpIHwKKy0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9C
SVRfU0NJU1NPUikgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0NVTExfTU9ERSkgfAor
LSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9XSU5ESU5HKTsKKy0KKy0gICAg
bURpcnR5Qml0cyAmPSB+a1VubmVlZGVkQml0czsKKy19CistCistYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CisteworLSAgICBpZiAoIUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisrICAgIGlm
ICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCisgICAgIHsKKy0gICAgICAgIC8vIFN0YXJ0IG5ldyBy
ZW5kZXIgY29tbWFuZCBlbmNvZGVyCistICAgICAgICBBTkdMRV9NVExfVFJZKHRoaXMsIG1EcmF3
RnJhbWVidWZmZXItPmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnRleHQpKTsKKy0gICAgfQor
LSAgICBlbHNlCistICAgIHsKKy0gICAgICAgIC8vIFhGQiBpcyBhY3RpdmUgYW5kIHJhc3Rlcml6
YXRpb24gaXMgZGlzYWJsZWQuIFVzZSBkdW1teSByZW5kZXIgdGFyZ2V0LgorLSAgICAgICAgLy8g
V2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3Rp
dmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcKKy0gICAgICAgIC8vIGEgc21hbGwgZHVtbXkgcmVu
ZGVyIHRhcmdldCB3b3VsZCBtYWtlIHRoZSByZW5kZXIgcGFzcyBlbmRpbmcgdmVyeSBjaGVhcC4K
Ky0gICAgICAgIGlmICghbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKHRoaXMsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQaXhlbEZv
cm1hdChhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOEE4X1VOT1JNKSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAm
bUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOworLSAgICAgICAgfQorLSAgICAgICAgbXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2RlciAqZW5jb2RlciA9IGdldFRleHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rl
cigKKy0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlLAorLSAgICAgICAgICAgIG10
bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRleDo6
TWFrZTJEKDApKSk7CistICAgICAgICBlbmNvZGVyLT5zZXRDb2xvckxvYWRBY3Rpb24oTVRMTG9h
ZEFjdGlvbkRvbnRDYXJlLCBNVExDbGVhckNvbG9yKCksIDApOworLSAgICAgICAgZW5jb2Rlci0+
c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRDYXJlKTsKKy0KKy0jaWZuZGVm
IE5ERUJVRworLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFuc2Zvcm1GZWVkYmFja09u
bHlQYXNzIik7CistI2VuZGlmCisrICAgICAgICBtdGw6OlJlbmRlclV0aWxzICZ1dGlscyA9IGdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsKKysgICAgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0ID0K
KysgICAgICAgICAgICB1dGlscy5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb250ZXh0LCAm
bVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MpOworKyAgICAgICAgQU5HTEVfVU5V
U0VEX1ZBUklBQkxFKHJlc3VsdCk7CisrICAgICAgICBhc3NlcnQocmVzdWx0ID09IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKTsKKysgICAgICAgIGNoYW5nZWRQaXBlbGluZSA9IHRydWU7CisgICAg
IH0KKyAKKy0gICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworLSAgICBpbnZhbGlkYXRlU3RhdGUo
Y29udGV4dCk7CisrICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZt
UmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5lLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ2hhbmdlZCwgdW5pZm9ybUJ1
ZmZlcnNEaXJ0eSwgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KSk7CisgCisgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtMjAzNCwxMCArMjIyNCwxMCBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgICAgICAg
ICAgICAgICAgPSBtU3RhdGU7CistICAgIGNvbnN0IGdsOjpQcm9ncmFtICpwcm9ncmFtID0gZ2xT
dGF0ZS5nZXRQcm9ncmFtKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAK
KyAgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJnRleHR1cmVzICAgICA9IGdsU3Rh
dGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworLSAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVy
ZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2
ZVNhbXBsZXJzTWFzaygpOworKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2
ZVRleHR1cmVzID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxlcnNNYXNrKCk7CisgCisgICAg
IGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCisgICAgIHsKK0BAIC0y
MDY3LDYgKzIyNTcsNyBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSkKKyAgICAgfQorIAorICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRGVmYXVsdEF0dHJp
YnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKKyAgICAgbVJlbmRlckVu
Y29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRy
aWJzQmluZGluZ0luZGV4KTsKKyAKKyAgICAgbURpcnR5RGVmYXVsdEF0dHJpYnNNYXNrLnJlc2V0
KCk7CitAQCAtMjEyMCw5ICsyMzExLDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyAgICAgbURyaXZlclVuaWZvcm1zLmNv
dmVyYWdlTWFzayA9IGNvdmVyYWdlTWFzazsKKyAKKy0gICAgQU5HTEVfVFJZKAorLSAgICAgICAg
ZmlsbERyaXZlclhGQlVuaWZvcm1zKGRyYXdDYWxsRmlyc3RWZXJ0ZXgsIHZlcnRpY2VzUGVySW5z
dGFuY2UsIC8qKiBza2lwcGVkSW5zdGFuY2VzICovIDApKTsKKy0KKyAgICAgQVNTRVJUKG1SZW5k
ZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFnbWVudERhdGEo
bURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisgICAg
IG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2
ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CitAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZEluc3RhbmNlcykKKythbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNF
bXVsYXRpb24oCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKKy0gICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJs
ZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworKyAgICBBU1NF
UlQoZXhlY3V0YWJsZSk7CisgCistICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBhdXNl
ZCA9IGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCk7CistICAg
IGlmICghdHJhbnNmb3JtRmVlZGJhY2sgfHwgIW1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBh
dXNlZCkKKysgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgp
IHx8ICFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgbURyaXZl
clVuaWZvcm1zLnhmYlZlcnRpY2VzUGVyRHJhdyA9IHZlcnRpY2VzUGVySW5zdGFuY2U7CisrICAg
IFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1w
bChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworKyAgICBzaXplX3QgYnVm
ZmVyQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlckhhbmRsZXMgPQorKyAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKKyAKKy0gICAgVHJhbnNmb3Jt
RmVlZGJhY2tNdGwgKnRyYW5zZm9ybUZlZWRiYWNrTXRsID0gbXRsOjpHZXRJbXBsKHRyYW5zZm9y
bUZlZWRiYWNrKTsKKysgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRl
eCA8IGJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorKyAgICB7CisrICAgICAgICBCdWZmZXJN
dGwgKmJ1ZmZlckhhbmRsZSA9IGJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdOworKyAgICAgICAg
QVNTRVJUKGJ1ZmZlckhhbmRsZSk7CisrICAgICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRCdWZmZXJGb3JXcml0ZSgKKysgICAg
ICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRC
dWZmZXIoKSwgMCwKKysgICAgICAgICAgICBtdGw6OmtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJ
bmRleCArICh1aW50MzJfdClidWZmZXJJbmRleCk7CisrICAgIH0KKyAKKy0gICAgcmV0dXJuIHRy
YW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZmZXJPZmZzZXRzKHRoaXMsIGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0aWNlc1Blckluc3RhbmNlICogc2tpcHBlZEluc3RhbmNlcywKKy0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJC
dWZmZXJPZmZzZXRzKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhTdGVuY2lsU3Rh
dGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitAQCAtMjE1OSwxMyArMjM1NSwxMyBAQCBi
b29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAg
ICAgbXRsOjpEZXB0aFN0ZW5jaWxEZXNjIGRzRGVzYyAgICAgICAgICAgICAgPSBtRGVwdGhTdGVu
Y2lsRGVzYzsKKyAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmcmVuZGVyUGFzc0Rlc2Mg
PSBtUmVuZGVyRW5jb2Rlci5yZW5kZXJQYXNzRGVzYygpOworIAorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIGRzRGVzYy5kZXB0
aFdyaXRlRW5hYmxlZCAgICA9IGZhbHNlOworICAgICAgICAgZHNEZXNjLmRlcHRoQ29tcGFyZUZ1
bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uQWx3YXlzOworICAgICB9CisgCistICAgIGlmICgh
cmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSkKKysgICAgaWYgKCFyZW5k
ZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAg
IGRzRGVzYy5mcm9udEZhY2VTdGVuY2lsLnJlc2V0KCk7CisgICAgICAgICBkc0Rlc2MuYmFja0Zh
Y2VTdGVuY2lsLnJlc2V0KCk7CitAQCAtMjE5Niw4ICsyMzkyLDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgYW5nbGU6OlJlc3Vs
dCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCistICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB4YmZQYXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQorIHsKKyAgICAgQVNTRVJUKG1S
ZW5kZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3Mg
dG9wb2xvZ3lDbGFzcyA9IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVN
b2RlKTsKK0BAIC0yMjE2LDI0ICsyNDEyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgcmVuZGVyUGFzc0Rlc2MucG9w
dWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MobUJsZW5kRGVzYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUmVuZGVyUGlwZWxp
bmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworIAorLSAgICAgICAgaWYgKHhmYlBhc3MpCistICAg
ICAgICB7CistICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQg
c2hhZGVyLgorLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5
cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CistICAgICAg
ICB9CistICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQo
KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyBJZiBYRkIgaXMgbm90IGFjdGl2ZSBhbmQg
cmFzdGVyaXplciBkaXNjYXJkIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZW11bGF0ZSB0aGUKKy0g
ICAgICAgICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRl
ciBtaWdodCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAorLSAgICAgICAgICAgIC8v
IE1ldGFsIGRvZXNuJ3QgYWxsb3cgcmFzdGVyaXphdGlvbiB0byBiZSBkaXNhYmxlZC4KKy0gICAg
ICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKy0gICAgICAg
ICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2Fy
ZDsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBt
UmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVuYWJsZWQ7CistICAgICAgICB9CisgICAgICAgICBtUmVuZGVyUGlw
ZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworKyAgICAg
ICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9CisrICAgICAgICAgICAg
KG1TdGF0ZS5pc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpID8gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0
aW9uOjpFbmFibGVkKTsKKyAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuYWxwaGFUb0NvdmVy
YWdlRW5hYmxlZCA9IG1TdGF0ZS5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAg
ICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuZW11bGF0ZUNvdmVyYWdlTWFzayAgICA9IG1TdGF0
ZS5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworIAorQEAgLTIyNDEsNyArMjQyMyw3IEBAIGJv
b2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAg
ICAgICAgICAgIG1EcmF3RnJhbWVidWZmZXItPmdldFN0YXRlKCkuZ2V0RW5hYmxlZERyYXdCdWZm
ZXJzKCkpOworICAgICB9CisgCistICAgICppc1BpcGVsaW5lRGVzY0NoYW5nZWQgPSBycHBDaGFu
Z2U7CisrICAgICpwaXBlbGluZURlc2NDaGFuZ2VkID0gcnBwQ2hhbmdlOworIAorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oCitpbmRleCBiMDBkZTFiLi4yNDE3MTIyIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorQEAgLTUyLDYgKzUyLDEwIEBAIGNsYXNzIERp
c3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgZWdsOjpFcnJvciB3YWl0Q2xp
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICAgZWdsOjpFcnJv
ciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKSBv
dmVycmlkZTsKKysgICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3Zl
cnJpZGU7CisgCisgICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dTdXJmYWNlKGNvbnN0IGVn
bDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csCitAQCAtOTYsMTEgKzEwMCw2IEBAIGNs
YXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgYm9vbCBpc1ZhbGlk
TmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdCBvdmVycmlkZTsK
KyAKKy0gICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlndXJhdGlvbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
Q2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3ZlcnJpZGU7
CistCisgICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92ZXJyaWRlOworIAor
ICAgICBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7CitAQCAtMTY1
LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAgICAg
dm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVU
ZXh0dXJlQ2FwcygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJlcygpOworKyAg
ICB2b2lkIGluaXRpYWxpemVMaW1pdGF0aW9ucygpOworKworICAgICBhbmdsZTo6UmVzdWx0IGlu
aXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CisgCisgICAgIG10bDo6QXV0b09iakNQdHI8aWQ8TVRM
RGV2aWNlPj4gbU1ldGFsRGV2aWNlID0gbmlsOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0Rpc3BsYXlNdGwubW0KK2luZGV4IDI0N2Q3NmEuLmMxNTljMDUgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KK0BAIC04LDEyICs4LDE0IEBACisgCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKKysjaW5jbHVk
ZSAiY29tbW9uL3N5c3RlbV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3Rl
bUluZm8uaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9EaXNwbGF5LmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1N5bmNNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1vbi5oIgorQEAgLTIyLDkgKzI0LDYyIEBACisgCisgI2luY2x1ZGUgIkVHTC9l
Z2xleHQuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKytjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVm
ZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJSRURfREVWSUNFIjsKKysjZW5kaWYKKytj
b25zdGV4cHIgY2hhciBrQU5HTEVUcmFuc2Zvcm1GZWVkYmFja0VudltdID0gIkFOR0xFX01FVEFM
X1hGQl9FTkFCTEUiOworKworIG5hbWVzcGFjZSByeAorIHsKKyAKKytzdGF0aWMgRUdMaW50IEdl
dERlcHRoU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6CisrICAg
ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2Ogor
KyAgICAgICAgICAgIHJldHVybiAxNjsKKysgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MjQ6CisrICAgICAgICAgICAgcmV0dXJuIDI0OworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiAyNDsKKysgICAgICAg
IGNhc2UgR0xfREVQVEgzMkZfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5hbGZv
cm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrc3RhdGljIEVH
TGludCBHZXRTdGVuY2lsU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQyNDoKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAg
ICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiA4Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5h
bGZvcm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgeworICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFj
b3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9y
IE1ldGFsIDIuMC4KK0BAIC01Nyw3ICsxMTIsNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxh
YmxlKCkKKyB9OworIAorIERpc3BsYXlNdGw6OkRpc3BsYXlNdGwoY29uc3QgZWdsOjpEaXNwbGF5
U3RhdGUgJnN0YXRlKQorLSAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBt
R2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorKyAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVN0
YXRlQ2FjaGUobUZlYXR1cmVzKSwgbVV0aWxzKHRoaXMpCisge30KKyAKKyBEaXNwbGF5TXRsOjp+
RGlzcGxheU10bCgpIHt9CitAQCAtNzgsMTAgKzEzMywyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyB7CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKy0gICAg
ICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVf
TVRMX0FVVE9SRUxFQVNFXTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nIGFuZ2xlUHJlZmVycmVkRGV2aWNlID0gYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtB
TkdMRVByZWZlcnJlZERldmljZUVudik7CisrICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZp
Y2UgIT0gIiIpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNBcnJheTxpZDxNVExEZXZpY2U+
PiAqZGV2aWNlcyA9IFtNVExDb3B5QWxsRGV2aWNlcygpIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07
CisrICAgICAgICAgICAgZm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKFtkZXZpY2UubmFtZS5sb3dlcmNhc2VT
dHJpbmcKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxvd2VyY2FzZVN0cmluZ10p
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcg
TWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZpY2UgbmFtZV0pOworKyAgICAgICAgICAgICAgICAgICAg
bU1ldGFsRGV2aWNlID0gW2RldmljZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9Cisr
ICAgICAgICB9CisrI2VuZGlmCisgICAgICAgICBpZiAoIW1NZXRhbERldmljZSkKKyAgICAgICAg
IHsKKy0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgICAgICAg
ICBtTWV0YWxEZXZpY2UgPSBbTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisgICAgICAgICB9CisgCisgICAgICAgICBtTWV0YWxEZXZpY2VWZW5k
b3JJZCA9IG10bDo6R2V0RGV2aWNlVmVuZG9ySWQobU1ldGFsRGV2aWNlKTsKK0BAIC04OSwxMiAr
MTYxLDEzIEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICAgICAgbUNtZFF1
ZXVlLnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9B
VVRPUkVMRUFTRV0pOworIAorICAgICAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworLQor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAgIGlmICghbUdsc2xhbmdJbml0
aWFsaXplZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBHbHNsYW5nSW5pdGlhbGl6ZSgpOwor
ICAgICAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgfQorKyNl
bmRpZgorIAorICAgICAgICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKKyAgICAg
ICAgIHsKK0BAIC0xMjAsMTIgKzE5MywxMyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworIAorICAgICBtTWV0YWxEZXZpY2VW
ZW5kb3JJZCA9IDA7CistCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAo
bUdsc2xhbmdJbml0aWFsaXplZCkKKyAgICAgeworICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsK
KyAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgfQorKyNlbmRpZgor
IH0KKyAKKyBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VMb3N0KCkKK0BAIC0xNzEsNiArMjQ1
LDE1IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICByZXR1cm4gZWdsOjpO
b0Vycm9yKCk7CisgfQorIAorK2VnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRC
dWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50
QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisreworKyAgICAvLyBUT0RPOiBG
aWxsIG91dCBwcm9wZXJseQorKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworIGVn
bDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdE5hdGl2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgRUdMaW50IGVuZ2luZSkKKyB7CisgICAgIFVOSU1QTEVNRU5URUQoKTsKK0BAIC0xODcsNyAr
MjcwLDggQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgU3VyZmFjZUltcGwgKkRp
c3BsYXlNdGw6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICByZXR1cm4gbmV3IFBCdWZm
ZXJTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBhdHRyaWJzKTsKKysgICAgVU5JTVBMRU1FTlRFRCgp
OworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwgKj4oMCk7CisgfQorIAorIFN1
cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMTk1LDE1ICsyNzksNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKyAgICAgcmV0dXJu
IG5ldyBJT1N1cmZhY2VTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBjbGllbnRCdWZmZXIsIGF0dHJp
YnMpOworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworLSAgICB9CistICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKyBT
dXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGl4bWFwU3VyZmFjZShjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMjQwLDE3ICszMTYsMTIgQEAgYm9vbCBJc01ldGFsRGlz
cGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKy1TaGFyZUdyb3Vw
SW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCgpCisteworLSAgICByZXR1cm4gbmV3
IFNoYXJlR3JvdXBNdGwoKTsKKy19CistCisgZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4
U3VwcG9ydGVkRVNWZXJzaW9uKCkgY29uc3QKKyB7CisgICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBv
cnRzIEdMRVMgMy4wIG9uIGlPUyBHUFUgZmFtaWx5IDQrIGZvciBub3cuCisgICAgIGlmIChzdXBw
b3J0c0VpdGhlckdQVUZhbWlseSg0LCAxKSkKKyAgICAgeworLSAgICAgICAgcmV0dXJuIG10bDo6
a01heFN1cHBvcnRlZEdMVmVyc2lvbjsKKysgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAw
KTsKKyAgICAgfQorICAgICByZXR1cm4gZ2w6OlZlcnNpb24oMiwgMCk7CisgfQorQEAgLTI2NSw2
ICszMzYsMTEgQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBu
ZXcgRUdMU3luY010bChhdHRyaWJzKTsKKyB9CisgCisrU2hhcmVHcm91cEltcGwgKkRpc3BsYXlN
dGw6OmNyZWF0ZVNoYXJlR3JvdXAoKQorK3sKKysgICAgcmV0dXJuIG5ldyBTaGFyZUdyb3VwSW1w
bCgpOworK30KKysKKyBlZ2w6OkVycm9yIERpc3BsYXlNdGw6Om1ha2VDdXJyZW50KGVnbDo6RGlz
cGxheSAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6
U3VyZmFjZSAqZHJhd1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLAorQEAgLTMyNiw3ICs0MDIsNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgY29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVH
TF9OT05FOworIAorICAgICAvLyBQYnVmZmVyCistICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFy
Z2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisrICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFyZ2V0ID0g
RUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgICBjb25maWcubWF4UEJ1ZmZlcldpZHRo
ICAgICA9IDQwOTY7CisgICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0gNDA5NjsKKyAg
ICAgY29uZmlnLm1heFBCdWZmZXJQaXhlbHMgICAgPSA0MDk2ICogNDA5NjsKK0BAIC0zNjEsMTMg
KzQzNyw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBjb25maWcu
Y29sb3JDb21wb25lbnRUeXBlID0gRUdMX0NPTE9SX0NPTVBPTkVOVF9UWVBFX0ZJWEVEX0VYVDsK
KyAKKy0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10gPSB7MCwgNH07CistCist
ICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQorLSAgICB7CistICAgICAg
ICBjb25maWcuc2FtcGxlcyAgICAgICA9IHNhbXBsZXM7CistICAgICAgICBjb25maWcuc2FtcGxl
QnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7CistCisgICAgIC8vIEJ1ZmZlciBzaXpl
cworICAgICBjb25maWcucmVkU2l6ZSAgICA9IDg7CisgICAgIGNvbmZpZy5ncmVlblNpemUgID0g
ODsKK0BAIC0zNzUsMjggKzQ0NCwxMiBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgICBjb25maWcuYnVmZmVyU2l6ZSA9IGNv
bmZpZy5yZWRTaXplICsgY29uZmlnLmdyZWVuU2l6ZSArIGNvbmZpZy5ibHVlU2l6ZSArIGNvbmZp
Zy5hbHBoYVNpemU7CisgCistICAgICAgICAvLyBXaXRoIERTCistICAgICAgICBjb25maWcuZGVw
dGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7CistCistICAg
ICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBECistICAgICAg
ICBjb25maWcuZGVwdGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9
IDA7CistICAgICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBT
CistICAgICAgICBjb25maWcuZGVwdGhTaXplICAgPSAwOworLSAgICAgICAgY29uZmlnLnN0ZW5j
aWxTaXplID0gODsKKysgICAgLy8gVGVzdHMgbGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVw
dGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYK
KysgICAgLy8gcmVuZGVyQ29uZmlnIGF0dHJpYnV0ZXMgYXJlIHNldCB0byBnbHU6OlJlbmRlckNv
bmZpZzo6RE9OVF9DQVJFCisrICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IEdldERlcHRoU2l6ZShj
b25maWcuZGVwdGhTdGVuY2lsRm9ybWF0KTsKKysgICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0
U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgIGNvbmZpZ3MuYWRk
KGNvbmZpZyk7CisgCistICAgICAgICAvLyBObyBEUworLSAgICAgICAgY29uZmlnLmRlcHRoU2l6
ZSAgID0gMDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7CistICAgICAgICBjb25m
aWdzLmFkZChjb25maWcpOworLSAgICB9CistCisgICAgIHJldHVybiBjb25maWdzOworIH0KKyAK
K0BAIC00MDksMjYgKzQ2Miw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICB9CisgfQorIAorLWVnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRCdWZmZXIo
Y29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVy
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWds
OjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisteworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKy0gICAgICAgICAg
ICBpZiAoIUlPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhjbGllbnRCdWZm
ZXIsIGF0dHJpYnMpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGVn
bDo6RWdsQmFkQXR0cmlidXRlKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFr
OworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworLSAgICAg
ICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZEF0dHJpYnV0ZSgpOworLSAgICB9CistICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKKy19CistCisgc3RkOjpzdHJpbmcgRGlzcGxheU10bDo6Z2V0UmVu
ZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CisgeworICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQor
QEAgLTUxMiwxMCArNTQ1LDE2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICBtTmF0aXZlQ2Fwcy5tYXhSZW5kZXJidWZmZXJTaXplICAgPSBtTmF0aXZlQ2Fwcy5tYXgyRFRl
eHR1cmVTaXplOworICAgICBtTmF0aXZlQ2Fwcy5taW5BbGlhc2VkUG9pbnRTaXplICAgPSAxOwor
ICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBw
b2ludCBzaXplIGV2ZW4gdGhvdWdoCistICAgIC8vIE1ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5w
ZGYgc2F5cyB0aGF0IG1heCBzdXBwb3J0ZWQgcG9pbnQgc2l6ZSBpcyA1MTEuIFdlIGxpbWl0IGl0
IHRvIDY0IGZvcgorLSAgICAvLyBub3cuCistICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgx
NgorKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhhdCBtYXggc3Vw
cG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKysgICAgLy8gb24g
SW50ZWwgYW5kIDY0IG9uIEFNRCBmb3Igbm93LgorKyAgICBpZiAoW21NZXRhbERldmljZS5nZXQo
KS5uYW1lIHJhbmdlT2ZTdHJpbmc6QCJJbnRlbCJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNpemUgPSAyNTU7Cisr
ICAgIH0KKysgICAgZWxzZQorKyAgICB7CisgICAgICAgICBtTmF0aXZlQ2Fwcy5tYXhBbGlhc2Vk
UG9pbnRTaXplID0gNjQ7CisrICAgIH0KKyAKKyAgICAgbU5hdGl2ZUNhcHMubWluQWxpYXNlZExp
bmVXaWR0aCA9IDEuMGY7CisgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAx
LjBmOworQEAgLTYxNSw2ICs2NTQsOSBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgbU5hdGl2ZUNhcHMubWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMg
PQorICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQ
QVJBVEVfQ09NUE9ORU5UUzsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQor
KyAgICBtTmF0aXZlQ2Fwcy5wcm9ncmFtQmluYXJ5Rm9ybWF0cy5wdXNoX2JhY2soR0xfUFJPR1JB
TV9CSU5BUllfQU5HTEUpOworKworICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3RhbmNlCisgICAg
IG1OYXRpdmVDYXBzLm1heENsaXBEaXN0YW5jZXMgPSA4OworIAorQEAgLTY0Nyw2ICs2ODksMTUg
QEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIG1OYXRpdmVFeHRlbnNpb25z
LnRleHR1cmVCb3JkZXJDbGFtcE9FUyAgPSBmYWxzZTsgIC8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IHRydWU7Cisg
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmRpc2NhcmRGcmFtZWJ1ZmZlciAgICAgPSB0cnVlOworKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQgYnV0IGV4cG9zZQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy50
ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKysKKysgICAgLy8gRVhUX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQorKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFu
ZFJlc29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgbUZlYXR1cmVzLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJiBtRmVhdHVyZXMuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJlbmRlclRvVGV4
dHVyZSA9IHRydWU7CisrICAgIH0KKyAKKyAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9taW5tYXgK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuYmxlbmRNaW5NYXggPSB0cnVlOworQEAgLTY2Miw4ICs3
MTMsOCBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgbU5hdGl2ZUV4dGVu
c2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBo
b3JlRmQgPSBmYWxzZTsKKyAKKy0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlz
QU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZDsKKy0g
ICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzRVhUICAgPSBtTmF0aXZlRXh0ZW5z
aW9ucy5pbnN0YW5jZWRBcnJheXNBTkdMRTsKKysgICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFu
Y2VkQXJyYXlzQU5HTEUgPSB0cnVlOworKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRB
cnJheXNFWFQgICA9IHRydWU7CisgCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnJvYnVzdEJ1ZmZl
ckFjY2Vzc0JlaGF2aW9yID0gZmFsc2U7CisgCitAQCAtNjg2LDYgKzczNyw5IEBAIGJvb2wgSXNN
ZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5lbGVtZW50
SW5kZXhVaW50T0VTID0gdHJ1ZTsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5T0VTID0gdHJ1ZTsKKysK
KyAgICAgLy8gR0xfQVBQTEVfY2xpcF9kaXN0YW5jZQorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5j
bGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CisgCitAQCAtNzEzLDExICs3NjcsMTcgQEAgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgCisgICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4
dGVuc2lvbnMuCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnNldFRleHR1cmVFeHRlbnNpb25TdXBw
b3J0KG1OYXRpdmVUZXh0dXJlQ2Fwcyk7CistCisrICAgIC8vIE1vZGlmeSBleHRlbnNpb25zIGJh
c2VkIG9mZiBvZiBzdXBwb3J0CisgICAgIC8vIERpc2FibGUgYWxsIGRlcHRoIGJ1ZmZlciBhbmQg
c3RlbmNpbCBidWZmZXIgcmVhZGJhY2sgZXh0ZW5zaW9ucyB1bnRpbCB3ZSBuZWVkIHRoZW0KKyAg
ICAgbU5hdGl2ZUV4dGVuc2lvbnMucmVhZERlcHRoTlYgICAgICAgICA9IGZhbHNlOworICAgICBt
TmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0gZmFsc2U7CisgICAgIG1OYXRp
dmVFeHRlbnNpb25zLmRlcHRoQnVmZmVyRmxvYXQyTlYgPSBmYWxzZTsKKysgICAgbU5hdGl2ZUV4
dGVuc2lvbnMudGV4dHVyZUNvbXByZXNzaW9uQVNUQ0xEUktIUiAmPSBzdXBwb3J0c0lPU0dQVUZh
bWlseSgyKTsKKyt9CisrCisrdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplTGltaXRhdGlvbnMo
KQorK3sKKysgICAgbU5hdGl2ZUxpbWl0YXRpb25zLm5vVmVydGV4QXR0cmlidXRlQWxpYXNpbmcg
PSB0cnVlOworIH0KKyAKKyB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0dXJlcygpCitA
QCAtNzc5LDYgKzgzOSw5IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICBB
TkdMRV9GRUFUVVJFX0NPTkRJVElPTigoJm1GZWF0dXJlcyksIGFsbG93U2VwYXJhdGVkRGVwdGhT
dGVuY2lsQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzT1NYICYmICFp
c0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CisgCisrICAgIG1GZWF0dXJlcy5lbXVsYXRlVHJh
bnNmb3JtRmVlZGJhY2suZW5hYmxlZCA9CisrICAgICAgICBhbmdsZTo6R2V0RW52aXJvbm1lbnRW
YXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKysKKyAgICAgYW5nbGU6
OlBsYXRmb3JtTWV0aG9kcyAqcGxhdGZvcm0gPSBBTkdMRVBsYXRmb3JtQ3VycmVudCgpOworICAg
ICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0dXJlcyk7Cisg
CitAQCAtNzg3LDYgKzg1MCwyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAK
KyBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCkKKyB7
CisrICAgICNpZmRlZiBBTkdMRV9NRVRBTF9YQ09ERV9CVUlMRFNfU0hBREVSUworKyAgICAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZv
TXRsKTsKKysgICAgICAgIAorKyAgICAKKysgICAgICAgIE5TU3RyaW5nICpwYXRoID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRsZVBhdGg7
CisrICAgICAgICBOU0Vycm9yICogZXJyb3IgPSBudWxscHRyOworKyAgICAgICAgbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVycyA9IFtnZXRNZXRhbERldmljZSgpIG5ld0Rl
ZmF1bHRMaWJyYXJ5V2l0aEJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGF0aF0gZXJy
b3I6JmVycm9yXTsKKysKKysgICAgICAgIGlmIChlcnJvciAmJiAhbURlZmF1bHRTaGFkZXJzQXN5
bmNJbmZvLT5kZWZhdWx0U2hhZGVycykKKysgICAgICAgIHsKKysgICAgICAgICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRVJSKCkgPDwg
IkludGVybmFsIGVycm9yOiBuZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGUgZmFpbGVkLiAiIDw8
IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uLlVURjhTdHJpbmc7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnNDb21w
aWxlRXJyb3IgPSBzdGQ6Om1vdmUoZXJyb3IpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpTdG9wOworKyAgICAgICAgICAgICAgICAgCisrICAgICAgICB9CisrICAgICAgICBt
RGVmYXVsdFNoYWRlcnNBc3luY0luZm8tPmNvbXBpbGVkID0gdHJ1ZTsKKysgICAgICAgIAorKyAg
ICAjZWxzZQorICAgICBtRGVmYXVsdFNoYWRlcnNBc3luY0luZm8ucmVzZXQobmV3IERlZmF1bHRT
aGFkZXJBc3luY0luZm9NdGwpOworIAorICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byBhc3lu
YyBpbmZvIHN0cnVjdCBzaW5jZSBpdCBtaWdodCBiZSByZWxlYXNlZCBpbiB0ZXJtaW5hdGUoKSwg
YnV0IHRoZQorQEAgLTgxNSw3ICs4OTksNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAKKyAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICB9
CistCisrICAgICNlbmRpZgorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKK2lu
ZGV4IGI0NThiZDkuLjVlNWNjZTkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvRnJhbWVCdWZmZXJNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLmgKK0BAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAorIGNs
YXNzIFJlbmRlckNvbW1hbmRFbmNvZGVyOworIH0gIC8vIG5hbWVzcGFjZSBtdGwKKyBjbGFzcyBD
b250ZXh0TXRsOworLWNsYXNzIFdpbmRvd1N1cmZhY2VNdGw7CisrY2xhc3MgU3VyZmFjZU10bDsK
KyAKKyBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyB7Cisg
ICBwdWJsaWM6CistICAgIEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRl
ICZzdGF0ZSwgYm9vbCBmbGlwWSwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcik7CisrICAg
IGV4cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKKyAgICAg
fkZyYW1lYnVmZmVyTXRsKCkgb3ZlcnJpZGU7CisgICAgIHZvaWQgZGVzdHJveShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtOTcsNyArOTksNyBAQCBjbGFzcyBG
cmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAKKyAgICAgZ2w6OlJlY3Rh
bmdsZSBnZXRDb21wbGV0ZVJlbmRlckFyZWEoKSBjb25zdDsKKyAgICAgaW50IGdldFNhbXBsZXMo
KSBjb25zdDsKKy0gICAgV2luZG93U3VyZmFjZU10bCAqZ2V0QXR0YWNoZWRCYWNrYnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKysgICAgU3VyZmFjZU10bFByb3RvY29sICpn
ZXRBdHRhY2hlZEJhY2tidWZmZXIoKSBjb25zdCB7IHJldHVybiBtQmFja2J1ZmZlcjsgfQorIAor
ICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFydGVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpIGNv
bnN0OworICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICplbnN1cmVSZW5kZXJQYXNzU3Rh
cnRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CitAQCAtMTYyLDYgKzE2NCwxMCBAQCBj
bGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJmRlc2MpOworIAorKyAg
ICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZUNvbG9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3QgY29sb3JJbmRleEdMKTsKKyAgICAgYW5nbGU6OlJlc3Vs
dCB1cGRhdGVEZXB0aFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCk7CitAQCAtMTY5LDExICsxNzUsMzcgQEAgY2xhc3MgRnJhbWVidWZmZXJN
dGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CisgCisrICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZWl0aGVyIHJldHVybnMgdGhlIHJlbmRlciB0YXJnZXQncyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUg
dGV4dHVyZSBpcyByZWFkYWJsZQorKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgdGV4
dHVyZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkg
dXNlZAorKyAgICAvLyBmb3IgcGFja2VkIGRlcHRoIHN0ZW5jaWwgd2hlcmUgcmVhZGluZyBzdGVu
Y2lsIHJlcXVpcmVzIGEgc3RlbmNpbCB2aWV3LiBIb3dldmVyIGlmIGEgdGV4dHVyZQorKyAgICAv
LyBoYXMgYm90aCByZW5kZXIgdGFyZ2V0LCBwaXhlbCBmb3JtYXQgdmlldyAmIHNoYWRlciByZWFk
YWJsZSB1c2FnZSBmbGFncywgdGhlcmUgd2lsbCBiZQorKyAgICAvLyBzb21lIGdsaXRjaGVzIGhh
cHBlbiBpbiBNZXRhbCBmcmFtZXdvcmsuCisrICAgIC8vIFNvIHRoZSBzb2x1dGlvbiBpcyBjcmVh
dGluZyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aXRob3V0IHBpeGVsIGZvcm1hdCB2aWV3IGZs
YWcgYnV0IGhhcworKyAgICAvLyByZW5kZXIgdGFyZ2V0IGZsYWcsIHRoZW4gZHVyaW5nIGJsaXR0
aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVyZSBpcyBjb3BpZWQgdG8gYW5vdGhlcgorKyAgICAvLyBp
bnRlcm1pZGlhdGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywgYnV0IG5v
dCByZW5kZXIgdGFyZ2V0IGZsYWcuCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2V0UmVhZGFibGVWaWV3
Rm9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRN
dGwgJnJ0dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0
aFZpZXcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlldywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xl
dmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmlld0FyZWEpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFja1BpeGVsc1BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQpIGNvbnN0
OworIAorKyAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZkc3RBbmds
ZUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0QnVmZmVyT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgKmRzdEJ1ZmZlcikgY29uc3Q7CisrCisgICAg
IC8vIE5PVEU6IHdlIGNhbm5vdCB1c2UgUmVuZGVyVGFyZ2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0
IGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZQorICAgICAvLyBkZXB0aCAmIHN0ZW5jaWwgYXR0YWNo
bWVudHMgYXMgb2Ygbm93LiBTZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgY291bGQgYmUgdXNlZnVs
IHRvCisgICAgIC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1BhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnQubWQuCitAQCAtMTg5LDggKzIyMSwxMCBAQCBjbGFzcyBGcmFtZWJ1
ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgLy8gYXMgYnkgYSBjb21wdXRl
IHBhc3MuCisgICAgIGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CisgCistICAg
IFdpbmRvd1N1cmZhY2VNdGwgKm1CYWNrYnVmZmVyID0gbnVsbHB0cjsKKysgICAgU3VyZmFjZU10
bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAgIGNvbnN0IGJvb2wgbUZsaXBZ
ICAgICAgICAgICAgICAgPSBmYWxzZTsKKysKKysgICAgbXRsOjpCdWZmZXJSZWYgbVJlYWRQaXhl
bEJ1ZmZlcjsKKyB9OworIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQoraW5kZXggODRlNDIyNy4uZDcxZGU3MiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5t
bQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCitA
QCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgKmNvbG9yT3V0ID0KKyAgICAgICAgIG10bDo6RW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvci50b01UTENsZWFyQ29sb3IoKSwgdGV4dHVy
ZS0+Z2V0Q29sb3JXcml0YWJsZU1hc2soKSk7CisgfQorKworK2NvbnN0IGdsOjpJbnRlcm5hbEZv
cm1hdCAmR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqcmVuZGVyVGFyZ2V0KQorK3sKKysgICAgR0xlbnVtIGltcGxGb3JtYXQ7CisrCisr
ICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKysgICAg
eworKyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCktPmFjdHVh
bEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKKysgICAgfQor
KyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGltcGxGb3JtYXQgPSBHTF9OT05FOworKyAgICB9
CisrCisrICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrfQorKworIH0KKyAKKyAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgorIEZy
YW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFj
a2J1ZmZlcikKKyAgICAgOiBGcmFtZWJ1ZmZlckltcGwoc3RhdGUpLCBtQmFja2J1ZmZlcihiYWNr
YnVmZmVyKSwgbUZsaXBZKGZsaXBZKQorIHsKKyAgICAgcmVzZXQoKTsKK0BAIC01NSw2ICs3Myw4
IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4
dHVyZSwKKyAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBu
dWxscHRyOworIAorICAgICBtUmVuZGVyUGFzc0ZpcnN0Q29sb3JBdHRhY2htZW50Rm9ybWF0ID0g
bnVsbHB0cjsKKysKKysgICAgbVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgfQorIAorIHZv
aWQgRnJhbWVidWZmZXJNdGw6OmRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitA
QCAtMTIyLDcgKzE0Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKKyB7CisgICAgIG10bDo6Q2xlYXJSZWN0
UGFyYW1zIGNsZWFyT3B0czsKKy0KKyAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JC
dWZmZXJzOworICAgICBpZiAoYnVmZmVyID09IEdMX0RFUFRIKQorICAgICB7CitAQCAtMTMzLDcg
KzE1Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJl
ZiAmdGV4dHVyZSwKKyAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChkcmF3YnVmZmVyKTsK
KyAgICAgICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFs
dWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgfQorLQorICAg
ICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRz
KTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCitAQCAtMTQ2LDcgKzE2NCw2IEBAIHZvaWQgT3ZlcnJp
ZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAKKyAgICAg
bXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOworICAgICBjbGVhck9wdHMuY2xlYXJDb2xv
ciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJd
LCB2YWx1ZXNbM10pOworLQorICAgICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29s
b3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC0xNTksNyAr
MTc2LDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVm
ICZ0ZXh0dXJlLAorICAgICBnbDo6RHJhd0J1ZmZlck1hc2sgY2xlYXJDb2xvckJ1ZmZlcnM7Cisg
ICAgIGlmIChidWZmZXIgPT0gR0xfU1RFTkNJTCkKKyAgICAgeworLSAgICAgICAgY2xlYXJPcHRz
LmNsZWFyU3RlbmNpbCA9IHZhbHVlc1swXSAmIG10bDo6a1N0ZW5jaWxNYXNrQWxsOworKyAgICAg
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRp
Y19jYXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkpOworICAgICB9CisgICAgIGVsc2UK
KyAgICAgeworQEAgLTE3Nyw3ICsxOTQsNyBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihj
b25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgeworICAgICBtdGw6OkNsZWFyUmVjdFBh
cmFtcyBjbGVhck9wdHM7CisgICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsKKy0g
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IHN0ZW5jaWwgJiBtdGw6OmtTdGVuY2lsTWFza0Fs
bDsKKysgICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcChzdGVuY2lsLCAwLCBz
dGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKKyAKKyAgICAgcmV0dXJu
IGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJhd0J1ZmZlck1hc2soKSwgJmNsZWFyT3B0cyk7Cisg
fQorQEAgLTE4NSwxMiArMjAyLDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3Qg
bXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmRnJh
bWVidWZmZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAorICAgICBjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgY29uc3QKKyB7CistICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKy0gICAgR0xlbnVtIHNpemVkRm9ybWF0
ICAgICAgID0gbVN0YXRlLmdldFJlYWRBdHRhY2htZW50KCktPmdldEZvcm1hdCgpLmluZm8tPnNp
emVkSW50ZXJuYWxGb3JtYXQ7CistICAgIGFuZ2xlOjpGb3JtYXRJRCBmb3JtYXRJRCA9IGFuZ2xl
OjpGb3JtYXQ6OkludGVybmFsRm9ybWF0VG9JRChzaXplZEZvcm1hdCk7CistICAgIGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBpeGVs
Rm9ybWF0KGZvcm1hdElEKTsKKy0gICAgR0xlbnVtIGltcGxGb3JtYXQgICAgICAgICAgICA9IG10
bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3Jt
YXQ7CistICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrICAgIHJldHVybiBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JS
ZWFkUmVuZGVyVGFyZ2V0KGNvbnRleHQpKTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6cmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC01OTAs
NiArNjAyLDkgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9y
bWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb250ZXh0LCB0
aGlzLCByZW5kZXJQYXNzQ2hhbmdlZCk7CisgICAgICAgICB9CisrCisrICAgICAgICAvLyBSZWNy
ZWF0ZSBwaXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgorKyAgICAgICAg
bVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTc0OCw3ICs3NjMsNyBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorIHZvaWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworLSAgICBpZiAoIW1CYWNrYnVmZmVyKQorKyAgICBpZiAoIW1C
YWNrYnVmZmVyIHx8IG1CYWNrYnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQorICAgICB7CisgICAg
ICAgICByZXR1cm47CisgICAgIH0KK0BAIC04MTIsNiArODI3LDkyIEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisr
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVWaWV3Rm9yUmVuZGVyVGFy
Z2V0KAorKyAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgY29uc3QgUmVuZGVy
VGFyZ2V0TXRsICZydHQsCisrICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorKyAg
ICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVwdGhWaWV3T3V0LAorKyAgICBtdGw6OlRleHR1
cmVSZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXdPdXQsCisrICAgIHVpbnQzMl90ICpyZWFkYWJsZVZp
ZXdMZXZlbCwKKysgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorKyAgICBnbDo6UmVj
dGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIG10bDo6VGV4dHVyZVJlZiBzcmNU
ZXh0dXJlID0gcnR0LmdldFRleHR1cmUoKTsKKysgICAgdWludDMyX3QgbGV2ZWwgICAgICAgICAg
ICAgPSBydHQuZ2V0TGV2ZWxJbmRleCgpLmdldCgpOworKyAgICB1aW50MzJfdCBzbGljZSAgICAg
ICAgICAgICA9IHJ0dC5nZXRMYXllckluZGV4KCk7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IHNs
aWNlIGlzIG5vdCB1c2VkIGF0bS4KKysgICAgQVNTRVJUKHNsaWNlID09IDApOworKworKyAgICBi
b29sIHJlYWRTdGVuY2lsID0gcmVhZGFibGVTdGVuY2lsVmlld091dDsKKysKKysgICAgaWYgKCFz
cmNUZXh0dXJlKQorKyAgICB7CisrICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsK
KysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorKyAgICAg
ICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gbnVsbHB0cjsKKysg
ICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhID0gcmVhZEFyZWE7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysKKysgICAgYm9vbCBz
a2lwQ29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKysgICAgaWYgKHJ0dC5n
ZXRGb3JtYXQoKS0+aGFzRGVwdGhBbmRTdGVuY2lsQml0cygpICYmIHJlYWRTdGVuY2lsKQorKyAg
ICB7CisrICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGggc3RlbmNpbCwg
YW5kIHdlIG5lZWQgc3RlbmNpbCB2aWV3LAorKyAgICAgICAgLy8gdGhlbiBpdCBtdXN0IHN1cHBv
cnQgY3JlYXRpbmcgZGlmZmVyZW50IGZvcm1hdCB2aWV3LgorKyAgICAgICAgc2tpcENvcHkgPSBz
a2lwQ29weSAmJiBzcmNUZXh0dXJlLT5zdXBwb3J0Rm9ybWF0VmlldygpOworKyAgICB9CisrCisr
ICAgIGlmIChza2lwQ29weSkKKysgICAgeworKyAgICAgICAgLy8gVGV4dHVyZSBzdXBwb3J0cyBz
dGVuY2lsIHZpZXcsIGp1c3QgdXNlIGl0IGRpcmVjdGx5CisrICAgICAgICBpZiAocmVhZGFibGVE
ZXB0aFZpZXdPdXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5j
aWxWaWV3T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdMZXZl
bCA9IGxldmVsOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0gc2xpY2U7CisrICAgICAg
ICAqcmVhZGFibGVWaWV3QXJlYSAgPSByZWFkQXJlYTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpICE9IE1UTFRleHR1
cmVUeXBlM0QpOworKworKyAgICAgICAgLy8gVGV4dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNp
bCB2aWV3IG9yIG5vdCBzaGFkZXIgcmVhZGFibGUsIGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKysg
ICAgICAgIC8vIHRleHR1cmUgdGhhdCBzdXBwb3J0cyBzdGVuY2lsIHZpZXcgYW5kIHNoYWRlciBy
ZWFkLgorKyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0gc3JjVGV4dHVy
ZS0+Z2V0UmVhZGFibGVDb3B5KAorKyAgICAgICAgICAgIGNvbnRleHRNdGwsIGNvbnRleHRNdGwt
PmdldEJsaXRDb21tYW5kRW5jb2RlcigpLCBsZXZlbCwgc2xpY2UsCisrICAgICAgICAgICAgTVRM
UmVnaW9uTWFrZTJEKHJlYWRBcmVhLngsIHJlYWRBcmVhLnksIHJlYWRBcmVhLndpZHRoLCByZWFk
QXJlYS5oZWlnaHQpKTsKKysKKysgICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRN
dGwsIGZvcm1hdGFibGVWaWV3KTsKKysKKysgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091
dCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdPdXQgPSBmb3Jt
YXRhYmxlVmlldzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0g
Zm9ybWF0YWJsZVZpZXctPmdldFN0ZW5jaWxWaWV3KCk7CisrICAgICAgICB9CisrCisrICAgICAg
ICAqcmVhZGFibGVWaWV3TGV2ZWwgPSAwOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0g
MDsKKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IGdsOjpSZWN0YW5nbGUoMCwgMCwgcmVh
ZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpwcmVwYXJlUmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBh
c3NEZXNjICpwRGVzY091dCkKKyB7CitAQCAtODMyLDkgKzkzMyw5IEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgICAgICBpZiAoY29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICB7Cisg
ICAgICAgICAgICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
KCZjb2xvckF0dGFjaG1lbnQpOworKyAgICAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6
Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJlbmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxl
cygpKTsKKyAKKyAgICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6Om1h
eChkZXNjLm51bUNvbG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOworLSAgICAgICAg
ICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKKyAKKyAgICAgICAgICAgICBpZiAoIW1S
ZW5kZXJQYXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQpCisgICAgICAgICAgICAgeworQEAg
LTg2MiwyMiArOTYzLDI5IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBh
bmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisgICAgICAgICBtRGVw
dGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLmRlcHRoQXR0
YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1w
bGVDb3VudCwgbURlcHRoUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOworICAgICB9
CistICAgIGVsc2UKKy0gICAgeworLSAgICAgICAgZGVzYy5kZXB0aEF0dGFjaG1lbnQucmVzZXQo
KTsKKy0gICAgfQorIAorICAgICBpZiAobVN0ZW5jaWxSZW5kZXJUYXJnZXQpCisgICAgIHsKKyAg
ICAgICAgIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygm
ZGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3Rk
OjptYXgoZGVzYy5zYW1wbGVDb3VudCwgbVN0ZW5jaWxSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNh
bXBsZXMoKSk7CisgICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OworK30KKysKKysvLyBPdmVycmlkZSBjbGVhciBjb2xvciBiYXNlZCBvbiB0ZXh0dXJlJ3Mgd3Jp
dGUgbWFzaworK3ZvaWQgRnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpCisreworKyAgICBp
ZiAodGV4dHVyZSkKKysgICAgeworKyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFs
cGhhQ2xlYXJDb2xvcihjbGVhckNvbG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygp
KTsKKysgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0gICAgICAgIGRlc2Muc3RlbmNpbEF0dGFj
aG1lbnQucmVzZXQoKTsKKysgICAgICAgICpjb2xvck91dCA9IGNsZWFyQ29sb3I7CisgICAgIH0K
Ky0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKyBhbmdsZTo6
UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3AoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCitAQCAtOTIzLDcgKzEwMzEsNyBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhm
bGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgor
IAorICAgICAgICAgbXRsOjpSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRh
Y2htZW50ID0KKyAgICAgICAgICAgICB0ZW1wRGVzYy5jb2xvckF0dGFjaG1lbnRzW2NvbG9ySW5k
ZXhHTF07CistICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0
dGFjaG1lbnQudGV4dHVyZTsKKysgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVy
ZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CisgCisgICAgICAgICBpZiAoY2xlYXJDb2xv
ckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQorICAgICAgICAgeworQEAgLTk2Niw3ICsxMDc0
LDcgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBv
dXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAgICAgIG10bDo6UmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmNvbG9yQXR0YWNobWVudCA9CisgICAgICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsKKy0gICAgICAgIGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlOwor
KyAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50
LnRleHR1cmUoKTsKKyAKKyAgICAgICAgIGlmIChjbGVhckNvbG9yQnVmZmVycy50ZXN0KGNvbG9y
SW5kZXhHTCkpCisgICAgICAgICB7CitAQCAtMTE5Myw4ICsxMzAxLDkgQEAgUGFja1BpeGVsc1Bh
cmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5y
ZXZlcnNlUm93T3IKKyAgICAgZ2w6OlJlY3RhbmdsZSBmbGlwcGVkQXJlYSA9IGdsQXJlYTsKKyAg
ICAgaWYgKG1GbGlwWSkKKyAgICAgeworLSAgICAgICAgZmxpcHBlZEFyZWEueSA9IHJlYWRSVC0+
Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVhZFJULT5nZXRMZXZlbEluZGV4KCkpIC0gZmxpcHBlZEFy
ZWEueSAtCistICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZEFyZWEuaGVpZ2h0OworKyAg
ICAgICAgZmxpcHBlZEFyZWEueSA9CisrICAgICAgICAgICAgcmVhZFJULT5nZXRUZXh0dXJlKCkt
PmhlaWdodChyZWFkUlQtPmdldExldmVsSW5kZXgoKSkgLQorKyAgICAgICAgICAgIGZsaXBwZWRB
cmVhLnkgLSBmbGlwcGVkQXJlYS5oZWlnaHQ7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGZsaXBw
ZWRBcmVhOworQEAgLTEyMTEsNyArMTMyMCw2IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZs
aXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisg
ICAgIHsKKyAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAgfQor
LQorICAgICBpZiAocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gcmVhZFBpeGVsc1RvUEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMs
IHJlbmRlclRhcmdldCk7CitAQCAtMTI3OSwxOSArMTM4NywzNiBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dE10bCwgcGFja1BpeGVsc1Bh
cmFtcy5vZmZzZXQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAg
ICAgICAgICAgICAgICAgICAgR0xfSU5WQUxJRF9PUEVSQVRJT04pOworLSAgICBjb25zdCB1aW50
MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAgICA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4
ZWxzUGFyYW1zLm9mZnNldCk7CistICAgIGNvbnN0IHVpbnQzMl90IGRzdEJ1ZmZlclJvd1BpdGNo
ICAgID0gcGFja1BpeGVsc1BhcmFtcy5vdXRwdXRQaXRjaDsKKy0gICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmZHN0QW5nbGVGb3JtYXQgPSAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9ybWF0OworLSAg
ICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRlciAgICAgICAgICA9IHBhY2tQaXhlbHNQYXJhbXMu
cmV2ZXJzZVJvd09yZGVyOworKyAgICB1aW50MzJfdCBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4ocGFja1BpeGVsc1BhcmFtcy5vZmZzZXQpOworIAorICAgICBCdWZmZXJNdGwgKnBhY2tC
dWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKTsKKyAg
ICAgbXRsOjpCdWZmZXJSZWYgZHN0QnVmZmVyID0gcGFja0J1ZmZlck10bC0+Z2V0Q3VycmVudEJ1
ZmZlcigpOworIAorKyAgICByZXR1cm4gcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnRleHQsIGFyZWEs
IHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhY2tQaXhlbHNQYXJhbXMuZGVzdEZvcm1hdCwgb2Zm
c2V0LCBwYWNrUGl4ZWxzUGFyYW1zLm91dHB1dFBpdGNoLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZkc3RCdWZmZXIpOworK30KKysKKythbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmFyZWEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2VSb3dP
cmRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNldCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgZHN0QnVmZmVyUm93UGl0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVmZmVyKSBjb25zdAor
K3sKKysgICAgQVNTRVJUKHJlbmRlclRhcmdldCk7CisrCisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrCisgICAgIGNvbnN0IG10bDo6Rm9ybWF0
ICZyZWFkRm9ybWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOworICAgICBj
b25zdCBhbmdsZTo6Rm9ybWF0ICZyZWFkQW5nbGVGb3JtYXQgPSByZWFkRm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCk7CisgCisgICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVyVGFy
Z2V0LT5nZXRUZXh0dXJlKCk7CisgCisrICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZkc3RCdWZm
ZXIgPSAqcERzdEJ1ZmZlcjsKKysKKyAgICAgaWYgKGRzdEFuZ2xlRm9ybWF0LmlkICE9IHJlYWRB
bmdsZUZvcm1hdC5pZCB8fCB0ZXh0dXJlLT5zYW1wbGVzKCkgPiAxIHx8CisgICAgICAgICAoZHN0
QnVmZmVyT2Zmc2V0ICUgZHN0QW5nbGVGb3JtYXQucGl4ZWxCeXRlcykgfHwKKyAgICAgICAgIChk
c3RCdWZmZXJPZmZzZXQgJSBtdGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkp
CitAQCAtMTM1OSw4ICsxNDg0LDggQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFy
ZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAg
ICAgICAgICB1aW50MzJfdCBidWZmZXJSb3dPZmZzZXQgPSBkc3RCdWZmZXJPZmZzZXQ7CisgICAg
ICAgICAgICAgLy8gQ29weSBwaXhlbHMgcm93IGJ5IHJvdworLSAgICAgICAgICAgIGZvciAoaW50
IHIgPSBzdGFydFJvdywgY29waWVkUm93cyA9IDA7IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsK
Ky0gICAgICAgICAgICAgICAgICsrY29waWVkUm93cywgLS1yLCBidWZmZXJSb3dPZmZzZXQgKz0g
ZHN0QnVmZmVyUm93UGl0Y2gpCisrICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0YXJ0Um93LCBp
ID0gMDsgaSA8IGFyZWEuaGVpZ2h0OworKyAgICAgICAgICAgICAgICAgKytpLCAtLXIsIGJ1ZmZl
clJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkKKyAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgIHNyY1Jvd1JlZ2lvbi55ID0gcjsKKyAKK0BAIC0xMzc1LDUgKzE1MDAsNCBAQCBQ
YWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBp
dGNoLCBwYWNrLnJldmVyc2VSb3dPcgorIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorLQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lP
U3VyZmFjZVN1cmZhY2VNdGwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
Ljk1NDhlNWQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKK0BAIC0wLDAgKzEsMTI2IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrCisrI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2VSZWYuaD4KKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9TdXJmYWNlTXRsLmgiCisrCisrbmFtZXNwYWNlIG1ldGFsCisreworK2NsYXNzIEF0dHJp
YnV0ZU1hcDsKKyt9ICAvLyBuYW1lc3BhY2UgbWV0YWwKKysKKytuYW1lc3BhY2UgcngKKyt7Cisr
CisrY2xhc3MgRGlzcGxheU1UTDsKKysKKytjbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVi
bGljIFN1cmZhY2VNdGxQcm90b2NvbAorK3sKKysgIHB1YmxpYzoKKysgICAgSU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBF
R0xDbGllbnRCdWZmZXIgYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVn
bDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKKysgICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBv
dmVycmlkZTsKKysKKysgICAgdm9pZCBkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxh
eSkgb3ZlcnJpZGU7CisrCisrICAgIGVnbDo6RXJyb3IgaW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkpIG92ZXJyaWRlOworKyAgICBGcmFtZWJ1ZmZlckltcGwgKmNyZWF0ZURl
ZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVy
U3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVnbDo6RXJyb3IgdW5N
YWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVn
bDo6RXJyb3Igc3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAg
IGVnbDo6RXJyb3IgcG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMaW50IHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xp
bnQgd2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBv
dmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdM
aW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciBi
aW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciByZWxlYXNl
VGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJy
aWRlOworKyAgICBlZ2w6OkVycm9yIGdldFN5bmNWYWx1ZXMoRUdMdWludDY0S0hSICp1c3QsIEVH
THVpbnQ2NEtIUiAqbXNjLCBFR0x1aW50NjRLSFIgKnNiYykgb3ZlcnJpZGU7CisrICAgIGVnbDo6
RXJyb3IgZ2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpkZW5vbWluYXRvcikg
b3ZlcnJpZGU7CisrICAgIHZvaWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3Zl
cnJpZGU7CisrICAgIHZvaWQgc2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lkdGgpIG92ZXJyaWRlOwor
KyAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpIG92ZXJyaWRlOworKworKyAg
ICAvLyBXaWR0aCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysg
ICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIC8vIEhlaWdodCBjYW4g
Y2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysgICAgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0IG92ZXJyaWRlOworKworKyAgICBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIEVHTGludCBnZXRTd2FwQmVoYXZpb3IoKSBj
b25zdCBvdmVycmlkZTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVy
VGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJ
bmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKKysK
KysgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJl
Q3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJh
d2FibGVPdXQpIG92ZXJyaWRlOworKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDE7IH0KKysgICAgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBhbmdsZTo6UmVzdWx0IGVu
c3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworKyAgICB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0
dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7IH0KKysKKysgIHByaXZh
dGU6CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tpbmdUZXh0dXJl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVU
ZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBp
bml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQg
dGV4dHVyZSk7CisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TX1NJTVVMQVRPUikK
KysgICAgSU9TdXJmYWNlTG9ja09wdGlvbnMgZ2V0SU9TdXJmYWNlTG9ja09wdGlvbnMoKSBjb25z
dDsKKysjZW5kaWYKKysKKysgICAgQ29udGV4dE10bCAqY29udGV4dE1UTDsKKysgICAgSU9TdXJm
YWNlUmVmIG1JT1N1cmZhY2U7CisrICAgIG10bDo6VGV4dHVyZVJlZiBtSU9TdXJmYWNlVGV4dHVy
ZTsKKysgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlVmlldzsKKysgICAgbXRs
OjpGb3JtYXQgbUZvcm1hdDsKKysgICAgbXRsOjpGb3JtYXQgbUludGVybmFsRm9ybWF0OworKyAg
ICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKKysgICAgYm9vbCBtSU9TdXJmYWNlVGV4
dHVyZUNyZWF0ZWQ7CisrICAgIGludCBtV2lkdGg7CisrICAgIGludCBtSGVpZ2h0OworKyAgICBp
bnQgbVBsYW5lOworKyAgICBpbnQgbUZvcm1hdEluZGV4OworKyAgICBpbnQgbVJvd1N0cmlkZUlu
UGl4ZWxzOworKworKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisr
ICAgIEdMdWludCBtQm91bmRUZXh0dXJlSUQ7CisrICAgIGJvb2wgbVVwbG9hZEZyb21JT1N1cmZh
Y2U7CisrICAgIGJvb2wgbVJlYWRiYWNrVG9JT1N1cmZhY2U7CisrI2VuZGlmCisrfTsKKysKKyt9
ICAvLyBuYW1lc3BhY2UgcngKKysKKysjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VB
R0xfSU9TVVJGQUNFU1VSRkFDRUVBR0xfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k
ZXggMDAwMDAwMC4uOGI5NDg1OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwubW0KK0BAIC0wLDAgKzEsNDY3IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrLy8gSU9TdXJmYWNlU3VyZmFjZU10bC5tbToKKysvLyAgICBJbXBsZW1l
bnRzIHRoZSBjbGFzcyBtZXRob2RzIGZvciBJT1N1cmZhY2VTdXJmYWNlTXRsLgorKy8vCisrCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCIK
KysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisrI2luY2x1ZGUgImxpYkFO
R0xFL0Rpc3BsYXkuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvU3VyZmFjZS5oIgorKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgorKworKy8vIENvbXBpbGVyIGNhbiB0dXJuIG9u
IHByb2dyYW1tYXRpY2FsIGZyYW1lIGNhcHR1cmUgaW4gcmVsZWFzZSBidWlsZCBieSBkZWZpbmlu
ZworKy8vIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUgZmxhZy4KKysjaWYgZGVmaW5lZChOREVC
VUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCisrIyAgICBkZWZpbmUg
QU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIDAKKysjZWxzZQorKyMgICAgZGVmaW5l
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAxCisrI2VuZGlmCisrbmFtZXNwYWNl
IHJ4CisreworKworK25hbWVzcGFjZQorK3sKKysKKytzdHJ1Y3QgSU9TdXJmYWNlRm9ybWF0SW5m
bworK3sKKysgICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworKyAgICBHTGVudW0gdHlwZTsKKysg
ICAgYW5nbGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworKyAgICBhbmdsZTo6Rm9ybWF0SUQgaW50
ZXJuYWxQaXhlbEZvcm1hdDsKKyt9OworKworK3N0YXRpYyBjb25zdCBJT1N1cmZhY2VGb3JtYXRJ
bmZvIGtJT1N1cmZhY2VGb3JtYXRzW10gPSB7CisrICAgIHtHTF9SRUQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19
LAorKyAgICB7R0xfUjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNl9VSU5ULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwKKysgICAge0dMX1JHLCBH
TF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk0sIGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOF9VTk9STX0sCisrICAgIHtHTF9SR0IsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xl
OjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk19LAorKyAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJ
RDo6QjhHOFI4QThfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JN
fSwKKysgICAge0dMX1JHQjEwX0EyLCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsIGFu
Z2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6
OlIxMEcxMEIxMEEyX1VOT1JNfSwKKysgICAge0dMX1JHQkEsIEdMX0hBTEZfRkxPQVQsIGFuZ2xl
OjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FULAorKyAgICAgYW5nbGU6OkZvcm1hdElEOjpS
MTZHMTZCMTZBMTZfRkxPQVR9LAorK307CisrCisraW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRl
eChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQorK3sKKysgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9y
bWF0cykpOyArK2kpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdEluZm8gPSBr
SU9TdXJmYWNlRm9ybWF0c1tpXTsKKysgICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9y
bWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGkpOworKyAgICAgICAg
fQorKyAgICB9CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLy8gVE9ETyhqY3VubmluZ2hhbSkg
OiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJlZHVjZSBjb3B5K3Bhc3RlZCBjb2Rl
CisrCisrQU5HTEVfTVRMX1VOVVNFRAorK2Jvb2wgSXNGcmFtZUNhcHR1cmVFbmFibGVkKCkKKyt7
CisrI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuIGZh
bHNlOworKyNlbHNlCisrICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBmcmFtZSBjYXB0dXJlIHByb2dy
YW1tYXRpY2FsbHkgaWYgdGhlIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUKKysgICAgLy8gZW52
aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzbG93IGRvd24gdGhlIHJl
bmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworKyAgICAvLyBmaW5lbHkgY29udHJvbCB3aGV0
aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBmb3IgcGFydGljdWxhciBhcHBsaWNh
dGlvbiBvciBub3QuCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVu
digiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSIpOworKyAgICBzdGF0aWMgY29uc3QgYm9vbCBl
bmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBmYWxzZTsKKysKKysgICAg
cmV0dXJuIGVuYWJsZWQ7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzdGQ6
OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKKyt7CisrI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuICIiOworKyNlbHNlCisrICAgIGF1dG8gdmFy
ICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkVfRklMRSIpOworKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6
ICIiOworKworKyAgICByZXR1cm4gZmlsZVBhdGg7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01U
TF9VTlVTRUQKKytzaXplX3QgTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5H
TEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisr
ICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfTUFYIik7CisrICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJh
bWVzID0gdmFyID8gc3RkOjphdG9pKHZhcikgOiAxMDA7CisrCisrICAgIHJldHVybiBtYXhGcmFt
ZXM7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzaXplX3QgTWluQWxsb3dl
ZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFC
TEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAg
ICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9NSU4iKTsKKysg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFtZSA9IHZhciA/IHN0ZDo6YXRvaSh2YXIpIDog
MDsKKysKKysgICAgcmV0dXJuIG1pbkZyYW1lOworKyNlbmRpZgorK30KKysKKytBTkdMRV9NVExf
VU5VU0VECisrYm9vbCBGcmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpCisreworKyNpZiAhQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiBmYWxzZTsKKysjZWxzZQor
KyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisrICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3Bl
RGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZpY2UiKSA9PSAwKSA6IGZhbHNlOworKwor
KyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVT
RUQKKytzdGQ6OmF0b21pYzxzaXplX3Q+IGdGcmFtZUNhcHR1cmVkKDApOworKworK0FOR0xFX01U
TF9VTlVTRUQKKyt2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdWV1ZSkKKyt7CisrI2lmIEFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorKyAgICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxl
ZCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgaWYgKGdGcmFt
ZUNhcHR1cmVkID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuOworKyAgICB9CisrCisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdl
ciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAgIGlmIChj
YXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgcmV0dXJuOworKyAg
ICB9CisrCisrICAgIGdGcmFtZUNhcHR1cmVkKys7CisrCisrICAgIGlmIChnRnJhbWVDYXB0dXJl
ZCA8IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuOwor
KyAgICB9CisrCisrIyAgICBpZmRlZiBfX01BQ18xMF8xNQorKyAgICBpZiAoQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQorKyAgICB7CisrICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisrCisrICAgICAgICBOU0Vycm9yICplcnJvcjsKKysg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisrICAg
ICAgICB9CisrICAgIH0KKysgICAgZWxzZQorKyMgICAgZW5kaWYgIC8vIF9fTUFDXzEwXzE1Cisr
ICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQor
KyAgICB7CisrICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3Ig
PSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVE
ZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworKworKyAgICAg
ICAgTlNFcnJvciAqZXJyb3I7CisrICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENh
cHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVy
cm9yICVAIiwgZXJyb3IpOworKyAgICAgICAgfQorKyAgICB9CisrI2VuZGlmICAvLyBBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyt9CisrCisrdm9pZCBTdGFydEZyYW1lQ2FwdHVy
ZShDb250ZXh0TXRsICpjb250ZXh0KQorK3sKKysgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5nZXQoKSk7CisrfQorKwor
K3ZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKysgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJl
TWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAg
IGlmIChjYXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgW2NhcHR1
cmVNYW5hZ2VyIHN0b3BDYXB0dXJlXTsKKysgICAgfQorKyNlbmRpZgorK30KKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrSU9TdXJmYWNlU3VyZmFjZU10bDo6SU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0
cmlidXRlTWFwICZhdHRyaWJzKQorKyAgICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKKyt7
CisrICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1cmZhY2Ugc28gaXQgZG9lc24ndCBn
ZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMuCisrICAgIG1JT1N1cmZhY2UgPSBy
ZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJlZj4oYnVmZmVyKTsKKysgICAgQ0ZSZXRhaW4obUlP
U3VyZmFjZSk7CisrCisrICAgIC8vIEV4dHJhY3QgYXR0cmlicyB1c2VmdWwgZm9yIHRoZSBjYWxs
IHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisrICAgIG1XaWR0aCAgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworKyAgICBtSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisrICAgIG1QbGFuZSAgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKysgICAgLy8g
SG9wZWZ1bGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHJvdyBpcyBhbHdheXMgYW4gaW50ZWdl
ciBudW1iZXIgb2YgcGl4ZWxzLiBXZSB1c2UKKysgICAgLy8gZ2xSZWFkUGl4ZWxzIHRvIGZpbGwg
dGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4gb25seSBzdXBwb3J0IHN0
cmlkZXMgdGhhdCBhcmUKKysgICAgLy8gYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxzLgorKyAg
ICBBU1NFUlQoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFu
ZSkgJQorKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUo
bUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorKyAgICAgICAgICAgMCk7CisrICAgIG1Sb3dTdHJpZGVJ
blBpeGVscyA9IHN0YXRpY19jYXN0PGludD4oSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5l
KG1JT1N1cmZhY2UsIG1QbGFuZSkgLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUobUlPU3VyZmFjZSwg
bVBsYW5lKSk7CisrCisrICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0
KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7CisrICAgIEVHTEF0dHJpYiB0eXBl
ICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworKyAgICBt
Rm9ybWF0SW5kZXggPQorKyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19j
YXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsK
KysgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKysgICAgbUZvcm1hdCAgICAgICAgID0g
ZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5w
aXhlbEZvcm1hdCk7CisrICAgIG1JbnRlcm5hbEZvcm1hdCA9IGRpc3BsYXktPmdldFBpeGVsRm9y
bWF0KGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF0uaW50ZXJuYWxQaXhlbEZvcm1hdCk7
CisrfQorKworK0lPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRsKCkKKyt7
CisrICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKKysgICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKysgICAgeworKyAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworKyAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CisrICAgIH0KKyt9CisrCisrdm9pZCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkge30KKysKKytlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KQorK3sKKysgICAgRGlzcGxheU10bCAqZGlzcGxheU10bCAgICA9IG10bDo6R2V0SW1w
bChkaXNwbGF5KTsKKysgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRpc3BsYXlNdGwt
PmdldE1ldGFsRGV2aWNlKCk7CisrCisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKG1ldGFsRGV2aWNl
LCBkaXNwbGF5TXRsLT5jbWRRdWV1ZSgpLmdldCgpKTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJv
cigpOworK30KKysKKytGcmFtZWJ1ZmZlckltcGwgKklPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0
ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpCisreworKyAgICBhdXRvIGZibyA9IG5l
dyBGcmFtZWJ1ZmZlck10bChzdGF0ZSwgLyogZmxpcFkgKi8gdHJ1ZSwgLyogYmFja2J1ZmZlciAq
LyB0aGlzKTsKKysgICAgcmV0dXJuIGZibzsKKyt9CisrCisrZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAg
IFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworKyAgICByZXR1cm4gZWdsOjpOb0Vycm9y
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6dW5NYWtlQ3VycmVu
dChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIFN0b3BGcmFtZUNhcHR1cmUo
KTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworK30KKysKKytlZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisreworKyAg
ICBTdG9wRnJhbWVDYXB0dXJlKCk7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6
OkdldEltcGwoY29udGV4dCk7CisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOwor
KyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNl
U3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGlu
dCBoZWlnaHQpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVn
bEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnF1
ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCisr
eworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2Vzcygp
OworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQorK3sKKysKKysgICAg
YW5nbGU6OlJlc3VsdCByZXMgPSBjcmVhdGVCYWNraW5nVGV4dHVyZShjb250ZXh0KTsKKysgICAg
aWYgKHJlcyA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKysgICAgICAgIHJldHVybiBlZ2w6
Ok5vRXJyb3IoKTsKKysgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNz
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cmVsZWFzZVRleElt
YWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQorK3sKKysgICAg
Ly8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50YXRpb24KKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgaWYgKGNvbnRleHRNdGwtPmZsdXNo
KGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorKyAgICB7CisrICAgICAgICBt
SU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSBmYWxzZTsKKysgICAgICAgIHJldHVybiBlZ2w6Ok5v
RXJyb3IoKTsKKysgICAgfQorKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKKyt9Cisr
CisrZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2
NEtIUiAqdXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0x1aW50NjRLSFIgKm1zYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7
CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElP
U3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1lcmF0b3IsIEVHTGludCAq
ZGVub21pbmF0b3IpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworK30KKysKKyt2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldFN3
YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7Cisr
fQorKworK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lk
dGgpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrfQorKworK3ZvaWQgSU9TdXJmYWNlU3Vy
ZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKKyt7CisrICAgIFVOSU1QTEVN
RU5URUQoKTsKKyt9CisrCisrLy8gd2lkdGggYW5kIGhlaWdodCBjYW4gY2hhbmdlIHdpdGggY2xp
ZW50IHdpbmRvdyByZXNpemluZworK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRXaWR0
aCgpIGNvbnN0CisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdMaW50PihtV2lkdGgpOwor
K30KKysKKytFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVpZ2h0KCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDxFR0xpbnQ+KG1IZWlnaHQpOworK30KKysKKytFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QK
Kyt7CisrICAgIHJldHVybiBFR0xfRkFMU0U7CisrfQorKworK0VHTGludCBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIEVHTF9CVUZG
RVJfREVTVFJPWUVEOworK30KKysKKythbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorKyAgICBHTGVudW0gYmluZGluZywKKysgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmlt
YWdlSW5kZXgsCisrICAgIEdMc2l6ZWkgc2FtcGxlcywKKysgICAgRnJhbWVidWZmZXJBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCisreworKyAgICBBTkdMRV9UUlkoZW5zdXJlVGV4dHVy
ZUNyZWF0ZWQoY29udGV4dCkpOworKyAgICAqcnRPdXQgPSAmbVJlbmRlclRhcmdldDsKKysgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKythbmdsZTo6UmVzdWx0IElP
U3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkKKyt7CisrICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VT
dXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKKyt7CisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9
CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4
dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIG10bDo6VGV4dHVyZVJl
ZiBtVGVtcG9yYXJ5U3VyZmFjZVJlZjsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZVRleHR1cmUoY29u
dGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1UZW1wb3JhcnlTdXJmYWNl
UmVmKSk7CisrICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5kIHRoZSBiYXNlIGZvcm1h
dCBvZiB0aGUgdGV4dHVyZS4KKysgICAgbUlPU3VyZmFjZVRleHR1cmUgPQorKyAgICAgICAgbVRl
bXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybSk7CisrICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1JT1N1cmZhY2VUZXh0
dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5hbEZvcm1hdCk7CisrICAg
IG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IHRydWU7CisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjplbnN1cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmICghbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyttdGw6OlRleHR1cmVSZWYgSU9TdXJmYWNl
U3VyZmFjZU10bDo6Z2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmIChlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb250ZXh0KSA9PSBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1JT1N1cmZhY2VUZXh0
dXJlOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKythbmdsZTo6UmVzdWx0
IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFy
Z2V0T25seSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KQorK3sKKysgICAgQ29udGV4dE10bCAqY29u
dGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgQU5HTEVfVFJZKG10bDo6VGV4
dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoY29udGV4dE10bCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBtSU9TdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworK30KKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1Byb2dyYW1NdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFt
TXRsLmgKK2luZGV4IDM4OWVjZTcuLmViOWJiMDEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5oCitAQCAtMjAsMTIgKzIwLDEzIEBACisgI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCistI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgorIAorIG5hbWVzcGFjZSByeAorIHsK
KysjZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisgY2xhc3MgQ29udGV4dE10bDsK
KyAKKyBzdHJ1Y3QgUHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10bAorQEAgLTEzNCw2ICsx
MzUsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10
bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKKyAgICAgYm9vbCBoYXNTcGVjaWFsaXpl
ZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURl
c2MpIG92ZXJyaWRlOworIAorKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxpYiht
dGw6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNs
SW5mbyk7CisgICAgIC8vIENhbGxzIHRoaXMgYmVmb3JlIGRyYXdpbmcsIGNoYW5nZWRQaXBlbGlu
ZURlc2MgaXMgcGFzc2VkIHdoZW4gdmVydGV4IGF0dHJpYnV0ZXMgZGVzYyBhbmQvb3IKKyAgICAg
Ly8gc2hhZGVyIHByb2dyYW0gY2hhbmdlZC4KKyAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKK0BAIC0xNDEsNyArMTQ2LDEyIEBAIGNsYXNz
IFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVs
aW5lQ2FjaGVTcGVjaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10
bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmb3JjZVRleHR1cmVzU2V0dGluZywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CisrCisrICAgIHN0ZDo6c3RyaW5n
IGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1YZmJNc2xTb3VyY2U7IH0KKysKKysg
ICAgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlICptTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hl
OworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK0BA
IC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGws
IHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCisgICAgIHZvaWQgc2V0
VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IFQgKnYsIEdM
ZW51bSBlbnRyeVBvaW50VHlwZSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgaW5pdERlZmF1bHRV
bmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQpOworKyAgICBhbmdsZTo6
UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzaXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNpemUp
OworKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2w6OkJpbmFyeU91dHB1
dFN0cmVhbSAqc3RyZWFtKTsKKysgICAgYW5nbGU6OlJlc3VsdCBsb2FkRGVmYXVsdFVuaWZvcm1C
bG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0VW5pZm9ybXMoQ29udGV4dE10bCAq
Y29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rlcik7CisgICAgIGFu
Z2xlOjpSZXN1bHQgdXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
K0BAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1J
bXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzLAorICAgICAgICAg
Z2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSk7CisgCistICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRl
WGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVE
ZXNjICZwaXBlbGluZURlc2MpOworLQorICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwgKmNvbnRl
eHQpOworIAorKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0
U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6Qmlu
YXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisrCisrICAgIHZvaWQgc2F2ZVNoYWRlckludGVybmFs
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRTaGFk
ZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworKworKyNpZiBB
TkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysKKysgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbFNw
aXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOwor
KyNlbmRpZgorKworKyAgICBhbmdsZTo6UmVzdWx0IGxpbmtJbXBsRGlyZWN0KGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisrCisgICAgIHZvaWQg
bGlua1Jlc291cmNlcyhjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2Vz
KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2Vk
UmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2cpOworIAorLSAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxp
YihtdGw6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVk
TXNsSW5mbyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgbGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisgCisgICAg
IC8vIFN0YXRlIGZvciB0aGUgZGVmYXVsdCB1bmlmb3JtIGJsb2Nrcy4KKyAgICAgc3RydWN0IERl
ZmF1bHRVbmlmb3JtQmxvY2sgZmluYWwgOiBwcml2YXRlIGFuZ2xlOjpOb25Db3B5YWJsZQorQEAg
LTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBw
dWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBDYWNoZWQg
cmVmZXJlbmNlcyBvZiBjdXJyZW50IHNoYWRlciB2YXJpYW50cy4KKyAgICAgZ2w6OlNoYWRlck1h
cDxQcm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqPiBtQ3VycmVudFNoYWRlclZhcmlhbnRzOwor
IAorKyAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgbVZhcmlhYmxlSW5mb01h
cDsKKyAgICAgLy8gU2NyYXRjaCBkYXRhOgorICAgICAvLyBMZWdhbGl6ZWQgYnVmZmVycyBhbmQg
dGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0gYnVmZmVyJ3Mgb2Zmc2V0PTEgaXMg
bm90IGEgdmFsaWQKKyAgICAgLy8gb2Zmc2V0LCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsZWdh
bCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgYXJyYXkuCitAQCAtMjM4
LDcgKzI2NiwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJs
aWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBpbnRvIGFuIGFy
Z3VtZW50IGJ1ZmZlci4KKyAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1Bcmd1bWVudEJ1ZmZl
clJlbmRlclN0YWdlVXNhZ2VzOworIAorKyAgICB1aW50MzJfdCBtU2hhZG93Q29tcGFyZU1vZGVz
W210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKysKKyAgICAgbXRsOjpSZW5kZXJQaXBl
bGluZUNhY2hlIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGU7CisrICAgIHN0ZDo6c3RyaW5nIG1Y
ZmJNc2xTb3VyY2U7CisgfTsKKyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitpbmRleCA1MGUyZjYzLi42ZGE4NjY0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitAQCAtMTQsMjUgKzE0
LDMxIEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9u
bWVudFZhcmlhYmxlLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1
cmVNdGwuaCIKKy0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
dXRpbHMuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
bXRsX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGls
cy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9yZW5kZXJlcl91dGlscy5oIgorIAor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysjICAgIGluY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2VuZGlmCisrCisgbmFtZXNwYWNl
IHJ4CisgeworIAorIG5hbWVzcGFjZQorIHsKKy0KKy0jZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1F
IEAibWFpbjAiCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIGNvbnN0ZXhwciBjaGFy
IGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4W10gPSAiX3RtcCI7CistCisrI2VuZGlmCisgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgY2xhc3MgU2NvcGVkQXV0b0NsZWFyVmVjdG9yCisgeworQEAg
LTc4LDYgKzg0LDcgQEAgdm9pZCBJbml0RGVmYXVsdFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnZl
Y3RvcjxzaDo6VW5pZm9ybT4gJnVuaWZvcm1zLAorIAorICAgICBzaXplX3QgYmxvY2tTaXplID0g
YmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsKKyAKKysgICAgLy8gVE9ETyhqbWFkaWxs
KTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9yIHRoZSBwaXBlbGluZSBl
dmVuIGlmIHplcm8gc2l6ZWQuCisgICAgIGlmIChibG9ja1NpemUgPT0gMCkKKyAgICAgeworICAg
ICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CitAQCAtMjI4LDExICsyMzUsMTYgQEAgdm9pZCBJbml0
QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAKKyBQcm9ncmFt
TXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjp+RGVmYXVsdFVuaWZvcm1CbG9jaygpID0gZGVmYXVs
dDsKKyAKKy1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnN0
YXRlKQorLSAgICA6IFByb2dyYW1JbXBsKHN0YXRlKSwgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZSh0aGlzKQorLXt9CisrUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25zdCBnbDo6UHJvZ3JhbVN0
YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisrICAgIG1NZXRhbFJlbmRlclBpcGVs
aW5lQ2FjaGUodGhpcykKKyt7CisrICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUgPSBu
ZXcgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7CisrfQorIAorLVByb2dyYW1NdGw6On5Qcm9n
cmFtTXRsKCkge30KKytQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCgpCisreworKyAgICBkZWxldGUg
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyt9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpk
ZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKK0BAIC0yNjIsMjUgKzI3NCw0
NiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICB7CisgICAgICAgICB2YXIucmVzZXQoY29udGV4dCk7CisgICAgIH0KKy0KKyAgICAg
bU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5jbGVhcigpOworKyAgICBtTWV0YWxYZmJSZW5kZXJQ
aXBlbGluZUNhY2hlLT5jbGVhcigpOworK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OnNhdmVUcmFu
c2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAv
LyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9yIGFsbCBzaGFkZXIgdHlwZXMKKysgICAgZm9y
IChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkp
CisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVTdHJpbmcobU1zbFNoYWRlclRyYW5zbGF0
ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UpOworKyAgICB9CisrICAgIHN0cmVh
bS0+d3JpdGVTdHJpbmcobVhmYk1zbFNvdXJjZSk7CisrfQorKworK3ZvaWQgUHJvZ3JhbU10bDo6
bG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQorK3sK
KysgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNoYWRlciB0eXBlcworKyAg
ICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlw
ZXMoKSkKKysgICAgeworKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlw
ZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmcoKTsKKysgICAgfQorKyAg
ICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CisgfQorIAorIHN0ZDo6dW5p
cXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQorIHsKKy0g
ICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCistICAgIFVOSU1QTEVNRU5U
RUQoKTsKKy0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4oYW5nbGU6
OlJlc3VsdDo6U3RvcCk7CisrCisrICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVu
dERvbmU+KGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb250ZXh0LCBzdHJlYW0sIGluZm9Mb2cpKTsK
KyB9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpzYXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisgeworLSAgICAvLyBOT1RFKGhxbGUp
OiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKKy0gICAgVU5JTVBMRU1FTlRFRCgpOworKyAgICBzYXZl
VHJhbnNsYXRlZFNoYWRlcnMoc3RyZWFtKTsKKysgICAgc2F2ZVNoYWRlckludGVybmFsSW5mbyhz
dHJlYW0pOworKyAgICBzYXZlRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKHN0cmVhbSk7CisgfQor
IAorKworIHZvaWQgUHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFibGVIaW50KGJvb2wgcmV0
cmlldmFibGUpCisgeworICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMjk0LDcgKzMyNyw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
c3RkOjp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xv
ZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAvKiBtZXJnZWRWYXJ5aW5ncyAqLykKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVy
Z2VkVmFyeWluZ3MgJm1lcmdlZFZhcnlpbmdzKQorIHsKKyAgICAgLy8gTGluayByZXNvdXJjZXMg
YmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSByZWFk
eSBmb3IgdGhlIHNldC9iaW5kaW5nCisgICAgIC8vIGFzc2lnbm1lbnQgZG9uZSBpbiB0aGF0IGZ1
bmN0aW9uLgorQEAgLTMwNCw3ICszMzcsOCBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29k
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxM
aW5rRXZlbnREb25lPihsaW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpKTsKKyB9
CisgCistYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKythbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsU3BpcnYoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
TGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyB7CitAQCAtMzU1LDYgKzM4OSw3NSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorIAor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorKyNlbmRpZgorKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyt7CisrICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKysKKysgICAgcmVzZXQo
Y29udGV4dE10bCk7CisrICAgIEFOR0xFX1RSWShpbml0RGVmYXVsdFVuaWZvcm1CbG9ja3MoZ2xD
b250ZXh0KSk7CisrICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCB2YXJpYWJs
ZUluZm9NYXA7CisrCisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHNoYWRlclNvdXJj
ZXM7CisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHRyYW5zbGF0ZWRNc2xTaGFkZXJz
OworKyAgICBtdGw6Ok1TTEdldFNoYWRlclNvdXJjZShtU3RhdGUsIHJlc291cmNlcywgJnNoYWRl
clNvdXJjZXMsICZ2YXJpYWJsZUluZm9NYXApOworKworKyAgICBBTkdMRV9UUlkobXRsOjpHbHNs
YW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250ZXh0TXRsLT5nZXRDYXBzKCksIHNoYWRl
clNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZv
TWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnRyYW5zbGF0ZWRNc2xTaGFkZXJzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJDb3VudCgpKSk7CisrCisrCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6
IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIC8vIENyZWF0ZSBh
Y3R1YWwgTWV0YWwgc2hhZGVyCisrICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgY3Jl
YXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRlclR5cGUsIGluZm9Mb2csICZtTXNsU2hh
ZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOworKyAgICB9CisrICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjps
aW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291
cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQorK3sKKysgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdheSBvZiB0b2dnbGluZyB0
aGlzLgorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgaWYgKHNoOjpyZWFkQm9v
bEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisrICAgIHsKKysgICAgICAgcmV0
dXJuIGxpbmtJbXBsU3BpcnYoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9
CisrICAgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgICByZXR1cm4gbGlua0ltcGxEaXJl
Y3QoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9CisrfQorKworKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cp
CisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4
dCk7CisrICAgIC8vIE5PVEUoaHFsZSk6IE5vIHRyYW5zZm9ybSBmZWVkYmFja3MgZm9yIG5vdywg
c2luY2Ugd2Ugb25seSBzdXBwb3J0IEVTIDIuMCBhdG0KKysKKysgICAgcmVzZXQoY29udGV4dE10
bCk7CisrCisrICAgIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhzdHJlYW0pOworKyAgICBsb2FkU2hh
ZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7CisrICAgIEFOR0xFX1RSWShsb2FkRGVmYXVsdFVuaWZv
cm1CbG9ja3NJbmZvKGdsQ29udGV4dCwgc3RyZWFtKSk7CisrCisrICAgIEFOR0xFX1RSWShjcmVh
dGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgaW5mb0xv
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU1zbFNoYWRlclRyYW5zbGF0ZUlu
Zm9bZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pKTsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNo
YWRlckxpYihjb250ZXh0TXRsLCBnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsIGluZm9Mb2csCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2ds
OjpTaGFkZXJUeXBlOjpGcmFnbWVudF0pKTsKKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworK30KKyAKKyB2b2lkIFByb2dyYW1NdGw6OmxpbmtSZXNvdXJjZXMoY29uc3Qg
Z2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKKyB7CitAQCAtMzY2LDggKzQ2
OSw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRl
eHQsCisgCisgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVsdFVuaWZvcm1CbG9j
a3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCkKKyB7CistICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKy0KKyAgICAgLy8gUHJvY2VzcyB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHVuaWZvcm1zIGludG8gc3RkMTQwIHBhY2tpbmcuCisgICAgIGds
OjpTaGFkZXJNYXA8c2g6OkJsb2NrTGF5b3V0TWFwPiBsYXlvdXRNYXA7CisgICAgIGdsOjpTaGFk
ZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7CitAQCAtNDI2LDYgKzUyNywxNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgfQorICAgICB9CisgCisrICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nr
c01lbW9yeShnbENvbnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7CisrfQorKworK2FuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6cmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoCisrICAg
IGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8
c2l6ZV90PiAmcmVxdWlyZWRCdWZmZXJTaXplKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworKworICAgICBmb3IgKGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQorICAgICB7CisgICAg
ICAgICBpZiAocmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4gMCkKK0BAIC00NTMsNiAr
NTYzLDkgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
PE1UTEZ1bmN0aW9uPiAqc2hhZGVyT3V0KQorIHsKKyAgICAgc3RhdGljX2Fzc2VydChZRVMgPT0g
MSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisrICAgICNpZiBBTkdMRV9FTkFCTEVf
TUVUQUxfU1BJUlYKKysgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVNwaXJ2ID0gc2g6OnJl
YWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsKKysgICAgI2VuZGlmCisg
CisgICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvID0gJm1N
c2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOworICAgICBQcm9ncmFtU2hhZGVyT2Jq
VmFyaWFudE10bCAqc2hhZGVyVmFyaWFudDsKK0BAIC00OTAsOSArNjAzLDIyIEBAIHZvaWQgSW5p
dEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAg
ICAgQk9PTCBlbXVsYXRlRGlzY2FyZCA9IHJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9u
VHlwZSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBp
cGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOworIAorLSAgICAgICAgICAgIE5T
U3RyaW5nICpkaXNjYXJkRW5hYmxlZFN0ciA9CistICAgICAgICAgICAgICAgIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmRpc2NhcmRFbmFibGVkU3RyOwor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgICAgICAgICBpZiAodXNlU3BpcnYp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9IFtO
U1N0cmluZworKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFs
OjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9CisrICAgICAgICAgICAgICAg
ICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRyYW5zbGF0b3JNZXRhbERp
cmVjdDo6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpXTsKKysgICAg
ICAgICAgICB9CisgCisgICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9IFtbTVRMRnVuY3Rpb25D
b25zdGFudFZhbHVlcyBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAgW2Z1bmNDb25zdGFudHMg
c2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKK0BAIC01MTUsOSArNjQxLDIyIEBAIHZv
aWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgCisg
ICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICAgeworLSAgICAgICAgICAgIE5T
U3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0KKy0gICAgICAgICAgICAgICAgW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a0NvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVyYWdlTWFza0VuYWJsZWRT
dHI7CisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorKyAgICAgICAgICAgIGlmICh1c2VT
cGlydikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJs
ZWRTdHIgPSBbTlNTdHJpbmcKKysgICAgICAgICAgICAgICAgICAgIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlcyVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQorKyAgICAgICAg
ICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnNoOjpUcmFuc2xhdG9y
TWV0YWxEaXJlY3Q6OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCldOworKyAgICAg
ICAgICAgIH0KKyAKKyAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0gW1tNVExGdW5jdGlvbkNv
bnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICBbZnVuY0NvbnN0YW50cyBz
ZXRDb25zdGFudFZhbHVlOiZlbXVsYXRlQ292ZXJhZ2VNYXNrCitAQCAtNTU1LDYgKzY5NCw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisrCisgYm9vbCBQcm9n
cmFtTXRsOjpoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQ
aXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykKKyB7CitAQCAtNTkyLDYgKzczMiw5MyBA
QCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICB9CisgfQorIAorK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tz
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAvLyBTZXJpYWxp
emVzIHRoZSB1bmlmb3JtTGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlmb3JtQmxvY2tzCisrICAg
IGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQor
KyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgdW5pZm9ybUNvdW50ID0gbURlZmF1bHRVbmlm
b3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQuc2l6ZSgpOworKyAgICAgICAgc3Ry
ZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3VudCk7CisrICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsr
dW5pZm9ybUluZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNoOjpCbG9ja01lbWJlcklu
Zm8gJmJsb2NrSW5mbyA9CisrICAgICAgICAgICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tz
aGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3VuaWZvcm1JbmRleF07CisrICAgICAgICAgICAgZ2w6
OldyaXRlQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgYmxvY2tJbmZvKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZvcm0gYmxvY2sgbWVtb3J5
IHNpemVzCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFk
ZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBzdHJlYW0tPndyaXRlSW50KG1EZWZhdWx0VW5p
Zm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkpOworKyAgICB9CisrfQor
KworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1bHRVbmlmb3JtQmxvY2tzSW5m
byhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSkKKyt7CisrICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7
CisrICAgIHJlcXVpcmVkQnVmZmVyU2l6ZS5maWxsKDApOworKworKyAgICAvLyBEZXNlcmlhbGl6
ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1CbG9ja3MKKysgICAg
Zm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQgPSBzdHJlYW0tPnJlYWRJ
bnQ8c2l6ZV90PigpOworKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUNvdW50OyArK3VuaWZvcm1JbmRleCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKKysgICAgICAg
ICAgICBnbDo6TG9hZEJsb2NrTWVtYmVySW5mbyhzdHJlYW0sICZibG9ja0luZm8pOworKyAgICAg
ICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0LnB1
c2hfYmFjayhibG9ja0luZm8pOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIERlc2Vy
aWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworKyAgICBmb3IgKGds
OjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgewor
KyAgICAgICAgcmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID0gc3RyZWFtLT5yZWFkSW50
PHNpemVfdD4oKTsKKysgICAgfQorKworKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1C
bG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworK30KKysKKyt2b2lk
IFByb2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVh
bSAqc3RyZWFtKQorK3sKKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8aW50
PihtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5oYXNVQk9Bcmd1bWVudEJ1ZmZl
cik7CisrICAgICAgICBmb3IgKGNvbnN0IG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgor
KyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxT
YW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAgICAgICAgICAgc3RyZWFtLT53cml0ZUlu
dDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJlQmluZGluZyk7CisrICAgICAgICAgICAgc3RyZWFt
LT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy5zYW1wbGVyQmluZGluZyk7CisrICAgICAgICB9
CisrCisrICAgICAgICBmb3IgKHVpbnQzMl90IHVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNs
YXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5ncykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90Pih1Ym9CaW5kaW5nKTsKKysgICAgICAg
IH0KKysgICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OmxvYWRTaGFkZXJJbnRlcm5hbElu
Zm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICBmb3IgKGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgeworKyAgICAg
ICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFzVUJPQXJndW1lbnRCdWZm
ZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisrICAgICAgICBmb3IgKG10bDo6U2Ft
cGxlckJpbmRpbmcgJmJpbmRpbmcgOgorKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0cmVhbS0+cmVhZEludDx1aW50MzJf
dD4oKTsKKysgICAgICAgICAgICBiaW5kaW5nLnNhbXBsZXJCaW5kaW5nID0gc3RyZWFtLT5yZWFk
SW50PHVpbnQzMl90PigpOworKyAgICAgICAgfQorKworKyAgICAgICAgZm9yICh1aW50MzJfdCAm
dWJvQmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVC
T0JpbmRpbmdzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVib0JpbmRpbmcgPSBzdHJlYW0t
PnJlYWRJbnQ8dWludDMyX3Q+KCk7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisgR0xib29s
ZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZjYXBzLCBnbDo6SW5mb0xv
ZyAqaW5mb0xvZykKKyB7CisgICAgIC8vIE5vLW9wLiBUaGUgc3BlYyBpcyB2ZXJ5IHZhZ3VlIGFi
b3V0IHRoZSBiZWhhdmlvciBvZiB2YWxpZGF0aW9uLgorQEAgLTg3NywxNCArMTEwNCwyNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxp
bmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwaXBlbGluZURlc2NDaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KQorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJh
dykKKyB7CisgICAgIENvbnRleHRNdGwgKmNvbnRleHQgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0
KTsKKyAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCisgICAgIHsKKyAgICAgICAgIC8vIFJl
bmRlciBwaXBlbGluZSBzdGF0ZSBuZWVkcyB0byBiZSBjaGFuZ2VkCistICAgICAgICBpZDxNVExS
ZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KKy0gICAgICAgICAgICBtTWV0YWxS
ZW5kZXJQaXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxp
bmVEZXNjKTsKKysgICAgICAgIGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3Rh
dGUgPSBuaWw7CisrICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tEcmF3KQorKyAgICAgICAg
eworKyAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9
IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjKHBpcGVsaW5lRGVzYyk7CisrICAgICAgICAgICAgeGZi
UGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpSZW5kZXJQaXBlbGluZVJh
c3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPQorKyAg
ICAgICAgICAgICAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5nZXRSZW5kZXJQaXBl
bGluZVN0YXRlKGNvbnRleHQsIHhmYlBpcGVsaW5lRGVzYyk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9IG1NZXRhbFJl
bmRlclBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGlu
ZURlc2MpOworKyAgICAgICAgfQorICAgICAgICAgaWYgKCFwaXBlbGluZVN0YXRlKQorICAgICAg
ICAgeworICAgICAgICAgICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGluc2lkZSBnZXRSZW5k
ZXJQaXBlbGluZVN0YXRlKCkKK0BAIC05MTMsMTEgKzExNTEsNiBAQCB2b2lkIEluaXRBcmd1bWVu
dEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgQU5HTEVfVFJZ
KHVwZGF0ZVVuaWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykp
OworICAgICB9CisgCistICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQorLSAgICB7CistICAg
ICAgICBBTkdMRV9UUlkodXBkYXRlWGZiQnVmZmVycyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBl
bGluZURlc2MpKTsKKy0gICAgfQorLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CisgfQorIAorQEAgLTk1MCw4ICsxMTgzLDEwIEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVy
RW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgeworICAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICAg
Y29uc3QgYXV0byAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgICAgID0gZ2xDb250ZXh0LT5nZXRT
dGF0ZSgpOworKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBn
bENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAKKyAgICAgY29u
c3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJmNvbXBsZXRlVGV4dHVyZXMgPSBnbFN0YXRlLmdl
dEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKKysgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVUeXBl
QXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyVHlwZXMo
KTsKKyAKKyAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMy
U2hhZGVyVHlwZXMoKSkKKyAgICAgeworQEAgLTk2NCw2ICsxMTk5LDggQEAgdm9pZCBJbml0QXJn
dW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgIGNvbnN0
IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRlckluZm8gPQorICAgICAgICAgICAgICpt
Q3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAK
KysgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFsc2U7CisrCisgICAgICAgICBmb3Ig
KHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IG1TdGF0ZS5nZXRTYW1w
bGVyQmluZGluZ3MoKS5zaXplKCk7CisgICAgICAgICAgICAgICsrdGV4dHVyZUluZGV4KQorICAg
ICAgICAgeworQEAgLTk3NSw3ICsxMjEyLDYgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNv
ZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZSB0ZXh0dXJlVHlw
ZSA9IHNhbXBsZXJCaW5kaW5nLnRleHR1cmVUeXBlOworIAorICAgICAgICAgICAgIGZvciAodWlu
dDMyX3QgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgc2FtcGxlckJpbmRpbmcuYm91
bmRUZXh0dXJlVW5pdHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgKythcnJheUVsZW1lbnQp
CitAQCAtOTgzLDYgKzEyMTksNyBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRs
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQg
ICAgICAgICAgPSBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRd
OworICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSAgICAgICAgPSBjb21wbGV0
ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNh
bXBsZXIgICAgICAgID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVV
bml0KTsKKysgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gdGV4
dHVyZVR5cGVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgdGV4dHVy
ZVNsb3QgICAgICAgID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyArIGFycmF5RWxlbWVudDsK
KyAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlclNsb3QgICAgICAgID0gbXNsQmluZGlu
Zy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlKQorQEAgLTk5NCwyNCArMTIzMSwyMSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBUZXh0dXJlTXRs
ICp0ZXh0dXJlTXRsID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworICAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9ybWF0OjpTaGFkb3cpCisg
ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9hbmdsZWJ1
Zy5jb20vNTEwNworLSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwgZG9lc24ndCBzdXBwb3J0
IGEgY29tcGFyZSBtb2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNhbXBsZXIgY291bGQKKy0g
ICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIHNhbWUgdmFsdWUgYXMgaWYgc2FtcGxpbmcg
ZnJvbSBhIG5vcm1hbCBzYW1wbGVyLgorLSAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydGlu
ZyB0aGlzIGNvdWxkIHJlcXVpcmUgaGFja2luZyBzcGlydi1jcm9zcyB0byBjaGFuZ2Ugc2FtcGxl
X2NvbXBhcmUoKQorLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2FtcGxlKCkuCistICAgICAg
ICAgICAgICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoc2FtcGxlclN0YXRlLT5nZXRDb21wYXJl
TW9kZSgpICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpKQorLSAgICAgICAgICAgICAgICAg
ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIEVSUigpIDw8ICJHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERSAhPSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFIGlzIG5vdCAiCistICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCI7CistICAgICAgICAgICAgICAgICAg
ICAgICAgQU5HTEVfTVRMX1RSWShjb250ZXh0TXRsLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9kZSgpID09IEdMX0NPTVBB
UkVfUkVGX1RPX1RFWFRVUkUpOworLSAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
ICAgICAgICAgaGFzRGVwdGhTYW1wbGVyICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAg
ICAgICAgICAgICAgICAgbVNoYWRvd0NvbXBhcmVNb2Rlc1t0ZXh0dXJlU2xvdF0gPSBtdGw6Ok1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNh
bXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSwgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlRnVu
YygpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICBBTkdMRV9UUlko
dGV4dHVyZU10bC0+YmluZFRvU2hhZGVyKGdsQ29udGV4dCwgY21kRW5jb2Rlciwgc2hhZGVyVHlw
ZSwgc2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlU2xvdCwgc2FtcGxlclNsb3QpKTsKKyAgICAgICAgICAgICB9ICAvLyBm
b3IgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgIH0gICAgICAvLyBmb3Igc2FtcGxlciBiaW5kaW5n
cworKworKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjbWRFbmNvZGVyLT5zZXREYXRhKHNoYWRlclR5cGUsIG1TaGFkb3dDb21wYXJlTW9kZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAgIH0KKyAgICAgfSAgLy8gZm9yIHNoYWRl
ciB0eXBlcworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtMTA0
MCwxMSArMTI3NCw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgCisgICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgIHsKKy0gICAgICAgIGlmICghbUN1cnJlbnRT
aGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjb250
aW51ZTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGlmIChtQ3VycmVudFNoYWRlclZhcmlhbnRz
W3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJndW1lbnRCdWZmZXIpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgQU5HTEVfVFJZKAorQEAgLTExNDksOCArMTM3OCw2IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOworLSAgICBjb25zdCBtdGw6OlRyYW5zbGF0
ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KKy0gICAgICAgICptQ3VycmVudFNoYWRlclZhcmlh
bnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAgICAgZm9yICh1aW50MzJfdCBi
dWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRl
eCkKKyAgICAgeworICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJs
b2Nrc1tidWZmZXJJbmRleF07CitAQCAtMTE2Miw3ICsxMzg5LDggQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9
IHNoYWRlckluZm8uYWN0dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhdOworKyAgICAgICAgdWlu
dDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKysgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07CisgCisgICAg
ICAgICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCisgICAg
ICAgICB7CitAQCAtMTE5OSwxMiArMTQyNywxMiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICBbYnVmZmVyRW5jb2Rlci5tZXRhbEFy
Z0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRCdWZmZXItPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDphcmd1bWVudEJ1ZmZlck9mZnNldF07CisgCistICAgIHN0YXRpY19hc3NlcnQoTVRMUmVuZGVy
U3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRlclR5
cGU6OlZlcnRleCkpLAorLSAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBl
IGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBz
dGF0aWNfYXNzZXJ0KAorLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFnbWVudCA9PSAoMHgxIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQpKSwKKy0gICAg
ICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRp
dmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBhdXRvIG10bFJlbmRlclN0YWdlID0gc3RhdGljX2Nh
c3Q8TVRMUmVuZGVyU3RhZ2VzPigweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNoYWRlclR5
cGUpKTsKKysgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVuZGVyU3RhZ2VzPiBrU2hh
ZGVyU3RhZ2VNYXAgPSB7CisrICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgbXRsOjpr
UmVuZGVyU3RhZ2VWZXJ0ZXh9LAorKyAgICAgICAge2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCwg
bXRsOjprUmVuZGVyU3RhZ2VGcmFnbWVudH0sCisrICAgIH07CisrCisrICAgIGF1dG8gbXRsUmVu
ZGVyU3RhZ2UgPSBrU2hhZGVyU3RhZ2VNYXBbc2hhZGVyVHlwZV07CisgCisgICAgIGZvciAodWlu
dDMyX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySW5kZXgpCisgICAgIHsKK0BAIC0xMjM5LDQ5ICsxNDY3LDQgQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVw
ZGF0ZVhmYkJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKKy17CistICAgIGNvbnN0IGds
OjpTdGF0ZSAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwor
LSAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gZ2xTdGF0ZS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0KKy0gICAgaWYgKHBpcGVsaW5lRGVzYy5y
YXN0ZXJpemF0aW9uRW5hYmxlZCgpIHx8ICFnbFN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpIHx8CistICAgICAgICBBTkdMRV9VTkxJS0VMWSghdHJhbnNmb3JtRmVlZGJh
Y2spKQorLSAgICB7CistICAgICAgICAvLyBYRkIgb3V0cHV0IGNhbiBvbmx5IGJlIHVzZWQgd2l0
aCByYXN0ZXJpemF0aW9uIGRpc2FibGVkLgorLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLSAgICB9CistCistICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGdsU3Rh
dGUuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3Vu
dCgpOworLQorLSAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQgPiAwKTsKKy0gICAgQVNTRVJUKG1T
dGF0ZS5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSAhPSBHTF9JTlRFUkxFQVZFRF9B
VFRSSUJTIHx8CistICAgICAgICAgICB4ZmJCdWZmZXJDb3VudCA9PSAxKTsKKy0KKy0gICAgZm9y
IChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyAr
K2J1ZmZlckluZGV4KQorLSAgICB7CistICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZmZXJJZHgg
PSBtTXNsWGZiT25seVZlcnRleFNoYWRlckluZm8uYWN0dWFsWEZCQmluZGluZ3NbYnVmZmVySW5k
ZXhdOworLQorLSAgICAgICAgaWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJC
dWZmZXJzKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNvbnRpbnVlOworLSAgICAgICAgfQor
LQorLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZi
dWZmZXJCaW5kaW5nID0KKy0gICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0SW5kZXhl
ZEJ1ZmZlcihidWZmZXJJbmRleCk7CistICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBidWZm
ZXJCaW5kaW5nLmdldCgpOworLSAgICAgICAgQVNTRVJUKChidWZmZXJCaW5kaW5nLmdldE9mZnNl
dCgpICUgNCkgPT0gMCk7CistICAgICAgICBBU1NFUlQoYnVmZmVyICE9IG51bGxwdHIpOworLQor
LSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwoYnVmZmVyKTsKKy0K
Ky0gICAgICAgIC8vIFVzZSBvZmZzZXQ9MCwgYWN0dWFsIG9mZnNldCB3aWxsIGJlIHNldCBpbiBE
cml2ZXIgVW5pZm9ybSBpbnNpZGUgQ29udGV4dE10bC4KKy0gICAgICAgIGNtZEVuY29kZXItPnNl
dEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1ZmZlck10bC0+Z2V0Q3Vy
cmVudEJ1ZmZlcigpLCAwLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0dWFsQnVmZmVySWR4KTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CistfQorLQorIH0gIC8vIG5hbWVzcGFjZSByeAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLmgKK2luZGV4IDIxODU0ZjYuLjI3OGYxZGYgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKK0BAIC0xLDUgKzEsNSBAQAorIC8vCistLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKyAvLworQEAgLTk4LDggKzk4LDcgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJs
aWMgUXVlcnlJbXBsCisgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZnZXRWaXNpYmlsaXR5UmVz
dWx0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbVZpc2liaWxpdHlSZXN1bHRCdWZmZXI7IH0KKyAg
ICAgLy8gUmVzZXQgdGhlIG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3RvcmVkIGluIGJ1ZmZlciB0
byB6ZXJvCisgICAgIHZvaWQgcmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOworLQorLSAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXpl
aXB0ciBwcmltaXRpdmVzRHJhd24pOworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitAQCAtMTA4LDggKzEwNywxMyBAQCBjbGFzcyBRdWVyeU10bCA6IHB1YmxpYyBR
dWVyeUltcGwKKyAgICAgLy8gTGlzdCBvZiBvZmZzZXRzIGluIHRoZSByZW5kZXIgcGFzcydzIG9j
Y2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoaXMgcXVlcnkKKyAgICAg
VmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgbVZpc2liaWxpdHlCdWZmZXJPZmZzZXRzOworICAg
ICBtdGw6OkJ1ZmZlclJlZiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsKKysgICAgLy8gVXNlZCB3
aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4gd2hlbiB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgZW11bGF0ZWQuCisrICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRp
dmVzRHJhd247CisgCistICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJh
d24gPSAwOworKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogY3VycmVudGx5IG9ubHkgdXNlZCBm
b3IgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduCisrICAgIC8vIGJ1dCBjYW4gYmUg
dXNlZCBmb3IgcmVzdCBvZiByZXN1bHRzCisrICAgIHVpbnQ2NF90IG1DYWNoZWRSZXN1bHQ7Cisr
ICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZhbGlkOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCitpbmRleCBmNWU5YmYzLi5h
YjBlN2JmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworQEAgLTEzLDcgKzEzLDEy
IEBACisgCisgbmFtZXNwYWNlIHJ4CisgeworLVF1ZXJ5TXRsOjpRdWVyeU10bChnbDo6UXVlcnlU
eXBlIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpIHt9CisrUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpR
dWVyeVR5cGUgdHlwZSkKKysgICAgOiBRdWVyeUltcGwodHlwZSksCisrICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduKDApLAorKyAgICAgIG1DYWNoZWRSZXN1bHQoMCksCisr
ICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkKGZhbHNlKQorK3t9CisgCisgUXVlcnlNdGw6On5RdWVy
eU10bCgpIHt9CisgCitAQCAtMjIsMTMgKzI3LDE0IEBACisgICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgIGlmICghZ2V0QWxsb2NhdGVkVmlz
aWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CistICAgICAgICBjb250ZXh0TXRsLT5v
bk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29udGV4dCwgdGhpcyk7CisgICAgIH0KKyAg
ICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXIgPSBudWxscHRyOworIH0KKyAKKyBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CisrICAg
IG1DYWNoZWRSZXN1bHRWYWxpZCAgICAgPSBmYWxzZTsKKyAgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisg
ICAgIHsKK0BAIC00Nyw3ICs1Myw3IEBACisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICB9CisgCistICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVl
cnlCZWdpbihjb250ZXh0LCB0aGlzKSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlzKSk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJp
bWl0aXZlc1dyaXR0ZW46CisgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZl
c0RyYXduID0gMDsKK0BAIC02NiwxMiArNzIsMjIgQEAKKyAgICAgeworICAgICAgICAgY2FzZSBn
bDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgorICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpB
bnlTYW1wbGVzQ29uc2VydmF0aXZlOgorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVz
aW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisrICAgICAgICAgICAgY29udGV4dE10bC0+b25P
Y2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNX
cml0dGVuOgorKyAgICAgICAgeworKyAgICAgICAgICAgIG1DYWNoZWRSZXN1bHQgPSBtVHJhbnNm
b3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CisrCisgICAgICAgICAgICAgLy8gVGhlcmUgY291
bGQgYmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBhZGQgdGhlIHByaW1pdGl2
ZXMgZHJhd24gc28gZmFyCisgICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCB0cmFuc2Zv
cm0gZmVlZGJhY2sgb2JqZWN0LgorLSAgICAgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQo
Y29udGV4dCk7CisrICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1G
ZWVkYmFjayA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUNhY2hlZFJlc3VsdCArPSB0cmFu
c2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZCA9IHRydWU7CisrICAgICAgICB9CisgICAgICAg
ICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworQEAgLTExMCw3ICsxMjYsNyBAQAorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAg
ICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0
ZW46CistICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1UcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNEcmF3bik7CisrICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PFQ+KG1DYWNoZWRSZXN1bHQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTM3LDcgKzE1Myw3IEBACisg
ICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+aXNCZWlu
Z1VzZWRCeUdQVShjb250ZXh0TXRsKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNh
c2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKKy0g
ICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKysgICAgICAgICAgICAqYXZhaWxhYmxlID0g
bUNhY2hlZFJlc3VsdFZhbGlkOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTc1LDEzICsxOTEsOSBAQAor
ICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQoY29udGV4dE10bCwgYmxp
dEVuY29kZXIpOworIH0KKyAKKy12b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5k
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3ZvaWQgUXVlcnlNdGw6Om9uVHJhbnNmb3Jt
RmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCisgeworLSAgICBnbDo6VHJh
bnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0U3RhdGUoKS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0gICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorLSAgICB7CistICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0g
dHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOworLSAgICB9CisrICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biArPSBwcmltaXRpdmVzRHJhd247CisgfQor
IAorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVm
ZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgK
K2luZGV4IDZmZDdiMWIuLjA1MzAyMGMgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgUmVuZGVyYnVm
ZmVyTXRsIDogcHVibGljIFJlbmRlcmJ1ZmZlckltcGwKKyAKKyAgICAgbXRsOjpGb3JtYXQgbUZv
cm1hdDsKKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1UZXh0dXJlOworKyAgICBtdGw6OlRleHR1cmVS
ZWYgbUltcGxpY2l0TVNUZXh0dXJlOworICAgICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdl
dDsKKyB9OworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5k
ZXJCdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVy
TXRsLm1tCitpbmRleCA2M2Q2ZjRiLi4yZjliNWY2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorQEAgLTI4LDYgKzI4LDcgQEAKKyB2b2lk
IFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQorIHsKKyAgICAgbVRleHR1cmUgICAg
ICAgICAgID0gbnVsbHB0cjsKKysgICAgbUltcGxpY2l0TVNUZXh0dXJlID0gbnVsbHB0cjsKKyB9
CisgCisgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3JhZ2VJbXBsKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTQyLDggKzQzLDkgQEAKKyAgICAgeworICAgICAg
ICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUg
c3RvcmFnZS4KKyAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBtU3RhdGUuZ2V0Rm9ybWF0
KCkuaW5mby0+aW50ZXJuYWxGb3JtYXQgfHwKKy0gICAgICAgICAgICB3aWR0aCAhPSBtU3RhdGUu
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8CistICAgICAgICAg
ICAgc2FtcGxlcyAhPSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KHdpZHRoKSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fAorKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8Cisr
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykgIT0gbVN0YXRlLmdldFNh
bXBsZXMoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZWxlYXNlVGV4dHVyZSgpOworICAg
ICAgICAgfQorQEAgLTcyLDMwICs3NCw2MiBAQAorIAorICAgICBpZiAoKG1UZXh0dXJlID09IG51
bGxwdHIgfHwgIW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0g
MCkpCisgICAgIHsKKy0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09IDEpCisrICAgICAgICBp
ZiAoYWN0dWFsU2FtcGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMo
KSAmJiBtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2Uy
RFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1hdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFs
bG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CisrCisrICAgICAgICAgICAgLy8g
VXNlIGltcGxpY2l0IHJlc29sdmUgZm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aGVuZXZlciBw
b3NzaWJsZS4gVGhpcyBpcyBiZWNhdXNlCisrICAgICAgICAgICAgLy8gZm9yIGRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSwgaWYgc3RlbmNpbCBuZWVkcyB0byBiZSBibGl0dGVkLCBhIGZvcm1hdHRlZCBj
bG9uZSBoYXMKKysgICAgICAgICAgICAvLyB0byBiZSBjcmVhdGVkLiBBbmQgaXQgaXMgZXhwZW5z
aXZlIHRvIGNsb25lIGEgbXVsdGlzYW1wbGUgdGV4dHVyZS4KKysgICAgICAgICAgICBpZiAoYWN0
dWFsU2FtcGxlcyA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUaGlz
IGZvcm1hdCBtdXN0IHN1cHBvcnRzIGltcGxpY2l0IHJlc29sdmUKKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1Gb3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpOworKworKyAgICAgICAgICAgICAgICBB
TkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoCisrICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAor
KyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhlaWdodCksIGFjdHVh
bFNhbXBsZXMsCisrICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIHRy
dWUsCisrICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZt
SW1wbGljaXRNU1RleHR1cmUpKTsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAg
ICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6
TWFrZTJETVNUZXh0dXJlKAorLSAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1wbGVzLAorKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6
OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
aW50MzJfdD4od2lkdGgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKy0gICAgICAgICAgICAgICAgLyogYWxsb3dG
b3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpLCAmbVRleHR1cmUp
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogYWxsb3dGb3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsKKyAgICAgICAgIH0KKyAK
Ky0gICAgICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1UZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlw
TGV2ZWwsIDAsIG1Gb3JtYXQpOworKyAgICAgICAgbVJlbmRlclRhcmdldC5zZXRXaXRoSW1wbGlj
aXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAKKyAgICAgICAgIC8vIEZvciBlbXVsYXRlZCBjaGFu
bmVscyB0aGF0IEdMIHRleHR1cmUgaW50ZW5kcyB0byBub3QgaGF2ZSwKKyAgICAgICAgIC8vIHdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgorICAgICAgICAgYm9vbCBlbXVsYXRl
ZENoYW5uZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQpOworICAgICAgICAgaWYg
KGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgICAgICB7CistICAgICAgICAgICAgYXV0byBpbmRleCA9
IG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRl
eDo6TWFrZTJEKDApKTsKKysgICAgICAgICAgICBnbDo6SW1hZ2VJbmRleCBpbmRleDsKKyAKKy0g
ICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRl
eHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOworKyAgICAgICAgICAgIGlmIChhY3R1YWxT
YW1wbGVzID4gMSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRCgwKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAg
QU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtVGV4dHVy
ZSwgbUZvcm1hdCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAwKSkpOworKyAgICAgICAg
ICAgIGlmIChtSW1wbGljaXRNU1RleHR1cmUpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1J
bXBsaWNpdE1TVGV4dHVyZSwgbUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkltYWdlTmF0aXZlSW5kZXgoZ2w6Oklt
YWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCksIDApKSk7CisgICAgICAgICAgICAgfQorKyAg
ICAgICAgfSAgLy8gaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgIH0KKyAKKyAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTEzMyw3ICsxNjcsNiBAQAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
c2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkKKyB7
CistICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KKyAgICAgQVNTRVJUKG1UZXh0dXJl
ICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKKyAgICAgKnJ0T3V0ID0gJm1SZW5kZXJUYXJnZXQ7Cisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmggYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKK2luZGV4IGJhZjRlNGQuLjBjNTc1MTcgMTAw
NjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgK
KysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaAorQEAg
LTQ2LDIwICs0NiwxOCBAQCBjbGFzcyBSZW5kZXJUYXJnZXRNdGwgZmluYWwgOiBwdWJsaWMgRnJh
bWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0CisgICAgIHZvaWQgZHVwbGljYXRlRnJvbShj
b25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYyk7CisgICAgIHZvaWQgcmVzZXQoKTsKKyAKKy0gICAg
bXRsOjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZS5sb2Nr
KCk7IH0KKy0gICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorLSAgICBjb25zdCBtdGw6Ok1p
cG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbUxldmVsSW5k
ZXg7IH0KKy0gICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MYXll
ckluZGV4OyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRUZXh0dXJlUmVmKCk7IH0KKysgICAgbXRs
OjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1
cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOyB9CisrICAgIGNv
bnN0IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsOyB9CisrICAgIHVpbnQzMl90IGdldExh
eWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNl
T3JEZXB0aDsgfQorICAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3Q7CisgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9
CisgCisgICAgIHZvaWQgdG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MobXRsOjpSZW5kZXJQYXNz
QXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0OworIAorICAgcHJpdmF0ZToKKy0gICAg
bXRsOjpUZXh0dXJlV2Vha1JlZiBtVGV4dHVyZTsKKy0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBt
SW1wbGljaXRNU1RleHR1cmU7CistICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgbUxldmVsSW5k
ZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHVpbnQzMl90IG1MYXllckluZGV4
ICAgICAgICAgICAgICAgPSAwOworKy8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8gYXZvaWQg
Y3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFtZSBidWZm
ZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVy
ZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKKyAgICAgY29uc3QgbXRsOjpG
b3JtYXQgKm1Gb3JtYXQgPSBudWxscHRyOworIH07CisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZm
IC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KK2luZGV4IGU4
OWU3NjEuLmUxMjZkYmIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyVGFyZ2V0TXRsLm1tCitAQCAtMTEsNyArMTEsMTAgQEAKKyAKKyBuYW1lc3BhY2UgcngKKyB7
CistUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoKSB7fQorK1JlbmRlclRhcmdldE10
bDo6UmVuZGVyVGFyZ2V0TXRsKCkgOgorKyAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKHN0ZDo6
bWFrZV9zaGFyZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjPigp
KSwKKysgIG1Gb3JtYXQobnVsbHB0cikKKyt7fQorIAorIFJlbmRlclRhcmdldE10bDo6flJlbmRl
clRhcmdldE10bCgpCisgeworQEAgLTE5LDEwICsyMiw3IEBACisgfQorIAorIFJlbmRlclRhcmdl
dE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJlbmRlclRhcmdldE10bCAmJm90aGVyKQorLSAgICA6IG1U
ZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tVGV4dHVyZSkpLAorLSAgICAgIG1JbXBsaWNpdE1TVGV4
dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0dXJlKSksCistICAgICAgbUxldmVs
SW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAorLSAgICAgIG1MYXllckluZGV4KG90aGVyLm1MYXll
ckluZGV4KQorKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbyhzdGQ6Om1vdmUob3RoZXIu
bVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKKyB7fQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRs
OjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorQEAgLTM5LDIxICszOSwyMSBA
QAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0KQorIHsKKy0gICAgbVRleHR1cmUgICAgICAgICAg
ID0gdGV4dHVyZTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7
CistICAgIG1MZXZlbEluZGV4ICAgICAgICA9IGxldmVsOworLSAgICBtTGF5ZXJJbmRleCAgICAg
ICAgPSBsYXllcjsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlICAgICAg
ICAgICA9IHRleHR1cmU7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRN
U1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJ
bmZvLT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT5zbGljZU9yRGVwdGggICAgICAgID0gbGF5ZXI7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICA9
ICZmb3JtYXQ7CisgfQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJlKGNvbnN0
IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKKyB7CistICAgIG1UZXh0dXJlID0gdGV4dHVyZTsK
KysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlID0gdGV4dHVyZTsKKyB9Cisg
Cisgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCisgeworLSAgICBtSW1wbGljaXRNU1RleHR1
cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5p
bXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworIH0KKyAKKyB2b2lkIFJlbmRl
clRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYykKK0BA
IC02NCwyNSArNjQsMTkgQEAKKyAKKyB2b2lkIFJlbmRlclRhcmdldE10bDo6cmVzZXQoKQorIHsK
Ky0gICAgbVRleHR1cmUucmVzZXQoKTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlLnJlc2V0KCk7
CistICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOworLSAgICBtTGF5
ZXJJbmRleCA9IDA7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZS5yZXNl
dCgpOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxpY2l0TVNUZXh0dXJlLnJl
c2V0KCk7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbXRs
OjprWmVyb05hdGl2ZU1pcExldmVsOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNs
aWNlT3JEZXB0aCA9IDA7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gbnVsbHB0cjsKKyB9CisgCisgdWludDMyX3QgUmVuZGVyVGFyZ2V0TXRsOjpnZXRSZW5k
ZXJTYW1wbGVzKCkgY29uc3QKKyB7CistICAgIG10bDo6VGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4
ID0gZ2V0SW1wbGljaXRNU1RleHR1cmUoKTsKKy0gICAgbXRsOjpUZXh0dXJlUmVmIHRleCAgICAg
ICAgICAgPSBnZXRUZXh0dXJlKCk7CistICAgIHJldHVybiBpbXBsaWNpdE1TVGV4ID8gaW1wbGlj
aXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+c2FtcGxlcygpIDogMSk7CisrICAgIHJl
dHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldFJlbmRlclNhbXBsZXMoKTsKKyB9Cisg
dm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKG10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBjb25zdAorIHsKKy0gICAgcnBhRGVz
Y091dC0+dGV4dHVyZSAgICAgICAgICAgPSBtVGV4dHVyZS5sb2NrKCk7CistICAgIHJwYURlc2NP
dXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsKKy0gICAg
cnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAgPSBtTGV2ZWxJbmRleDsKKy0gICAgcnBhRGVz
Y091dC0+c2xpY2VPckRlcHRoICAgICAgPSBtTGF5ZXJJbmRleDsKKy0gICAgcnBhRGVzY091dC0+
YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0Q2FwcygpLmJsZW5kYWJs
ZSA6IGZhbHNlOworKyAgICBycGFEZXNjT3V0LT5yZW5kZXJUYXJnZXQgPSBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm87CisgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU2hhZGVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRs
LmgKK2luZGV4IDdiMmNmZDUuLjUyZTkxYWYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TaGFkZXJNdGwuaAorQEAgLTExLDggKzExLDggQEAKKyAKKyAjaW5jbHVkZSA8bWFwPgorIAor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgor
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgiCistCisgbmFtZXNwYWNl
IHJ4CisgeworIAorQEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRlck10bCA6IHB1YmxpYyBT
aGFkZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9u
cyBvcHRpb25zKSBvdmVycmlkZTsKKyAKKysgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24gKmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gJnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247CisrICAgIH0KKyAgICAgc3RkOjpzdHJpbmcg
Z2V0RGVidWdJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7CisrCisrICAgIHNoOjpUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKKysKKysgIHByaXZh
dGU6CisrICAgIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gY29tcGlsZUlt
cGxNdGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5j
ZSAqY29tcGlsZXJJbnN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29t
cGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KK2luZGV4IGY5MDlmYjUu
LmFkMDFkYmYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVy
TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tCitA
QCAtMTAsOCArMTAsMTMgQEAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hh
ZGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9D
b250ZXh0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9Xb3JrZXJUaHJlYWQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
Q29udGV4dE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5
TXRsLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDEwICsyNSwxMDAgQEAKKyAKKyBT
aGFkZXJNdGw6On5TaGFkZXJNdGwoKSB7fQorIAorK2NsYXNzIFRyYW5zbGF0ZVRhc2sgOiBwdWJs
aWMgYW5nbGU6OkNsb3N1cmUKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0ZVRhc2soU2hI
YW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5n
ICZzb3VyY2UpCisrICAgICAgICA6IG1IYW5kbGUoaGFuZGxlKSwgbU9wdGlvbnMob3B0aW9ucyks
IG1Tb3VyY2Uoc291cmNlKSwgbVJlc3VsdChmYWxzZSkKKysgICAge30KKysKKysgICAgdm9pZCBv
cGVyYXRvcigpKCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqc291cmNl
ID0gbVNvdXJjZS5jX3N0cigpOworKyAgICAgICAgbVJlc3VsdCAgICAgICAgICAgID0gc2g6OkNv
bXBpbGUobUhhbmRsZSwgJnNvdXJjZSwgMSwgbU9wdGlvbnMpOworKyAgICB9CisrCisrICAgIGJv
b2wgZ2V0UmVzdWx0KCkgeyByZXR1cm4gbVJlc3VsdDsgfQorKworKyAgICBTaEhhbmRsZSBnZXRI
YW5kbGUoKSB7IHJldHVybiBtSGFuZGxlOyB9CisrCisrICBwcml2YXRlOgorKyAgICBTaEhhbmRs
ZSBtSGFuZGxlOworKyAgICBTaENvbXBpbGVPcHRpb25zIG1PcHRpb25zOworKyAgICBzdGQ6OnN0
cmluZyBtU291cmNlOworKyAgICBib29sIG1SZXN1bHQ7CisrfTsKKysKKytjbGFzcyBNVExXYWl0
YWJsZUNvbXBpbGVFdmVudEltcGwgZmluYWwgOiBwdWJsaWMgV2FpdGFibGVDb21waWxlRXZlbnQK
Kyt7CisrICBwdWJsaWM6CisrICAgIE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbChTaGFkZXJN
dGwgKnNoYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVk
X3B0cjxhbmdsZTo6V2FpdGFibGVFdmVudD4gd2FpdGFibGVFdmVudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNrPiB0cmFuc2xh
dGVUYXNrKQorKyAgICAgICAgOiBXYWl0YWJsZUNvbXBpbGVFdmVudCh3YWl0YWJsZUV2ZW50KSwg
bVRyYW5zbGF0ZVRhc2sodHJhbnNsYXRlVGFzayksIG1TaGFkZXIoc2hhZGVyKQorKyAgICB7fQor
KworKyAgICBib29sIGdldFJlc3VsdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1UcmFuc2xhdGVUYXNr
LT5nZXRSZXN1bHQoKTsgfQorKworKyAgICBib29sIHBvc3RUcmFuc2xhdGUoc3RkOjpzdHJpbmcg
KmluZm9Mb2cpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHNoOjpUU2hIYW5kbGVCYXNlICpi
YXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4obVRyYW5zbGF0ZVRhc2st
PmdldEhhbmRsZSgpKTsKKysgICAgICAgIGF1dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFz
ZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKTsKKysgICAgICAgIGlmICh0cmFuc2xhdG9y
TWV0YWxEaXJlY3QgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBDb3B5
IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4KKysgICAgICAgICAgICBtU2hhZGVyLT50cmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uID0KKysgICAgICAgICAgICAgICAgKih0cmFuc2xhdG9yTWV0
YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSk7CisrICAgICAgICAgICAg
dHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCktPnJl
c2V0KCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAg
cHJpdmF0ZToKKysgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0ZVRhc2s+IG1UcmFuc2xhdGVU
YXNrOworKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7CisrfTsKKysKKytzdGQ6OnNoYXJlZF9wdHI8
V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwoCisrICAgIGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpj
b21waWxlckluc3RhbmNlLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICBT
aENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQorK3sKKysjaWYgZGVmaW5lZChBTkdMRV9F
TkFCTEVfQVNTRVJUUykKKysgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfQVNUOwor
KyNlbmRpZgorKworKyAgICBhdXRvIHdvcmtlclRocmVhZFBvb2wgPSBjb250ZXh0LT5nZXRXb3Jr
ZXJUaHJlYWRQb29sKCk7CisrICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9CisrICAgICAgICBzdGQ6
Om1ha2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFuY2UtPmdldEhhbmRsZSgp
LCBjb21waWxlT3B0aW9ucywgc291cmNlKTsKKysKKysgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKysgICAgICAgIHRoaXMsIGFuZ2xlOjpX
b3JrZXJUaHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJlYWRQb29sLCB0cmFuc2xh
dGVUYXNrKSwKKysgICAgICAgIHRyYW5zbGF0ZVRhc2spOworK30KKysKKyBzdGQ6OnNoYXJlZF9w
dHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykKKyB7CisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIGlmIChnZXRTdGF0ZSgpLmdldFNo
YWRlclR5cGUoKSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisrICAgICAgICAhY29udGV4
dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWRE
cmF3LmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAor
KyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgPSBzdGF0aWNfY2FzdDxzaDo6VFNoSGFu
ZGxlQmFzZSAqPihjb21waWxlckluc3RhbmNlLT5nZXRIYW5kbGUoKSk7CisrICAgICAgICBhdXRv
IHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0
KCk7CisrICAgICAgICBpZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ID09IG51bGxwdHIpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0YWwgPSBzdGF0aWNfY2FzdDxz
aDo6VHJhbnNsYXRvck1ldGFsICo+KGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisrICAgICAgICAg
ICAgdHJhbnNsYXRvck1ldGFsLT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgdHJhbnNsYXRv
ck1ldGFsRGlyZWN0LT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAgICAgICB9
CisrICAgIH0KKyAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucyA9IFNIX0lOSVRJ
QUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisgCisgICAgIGJvb2wgaXNXZWJHTCA9IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS53ZWJnbENvbXBhdGliaWxpdHk7CitAQCAtMzMsOCArMTI4LDEx
IEBACisgICAgIH0KKyAKKyAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfQ0xBTVBfUE9JTlRfU0la
RTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKQorKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9GUkFH
X0RFUFRIOworKyNlbmRpZgorIAorLSAgICByZXR1cm4gY29tcGlsZUltcGwoY29udGV4dCwgY29t
cGlsZXJJbnN0YW5jZSwgbVN0YXRlLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlv
bnMpOworKyAgICByZXR1cm4gY29tcGlsZUltcGxNdGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5j
ZSwgZ2V0U3RhdGUoKS5nZXRTb3VyY2UoKSwgY29tcGlsZU9wdGlvbnMgfCBvcHRpb25zKTsKKyB9
CisgCisgc3RkOjpzdHJpbmcgU2hhZGVyTXRsOjpnZXREZWJ1Z0luZm8oKSBjb25zdAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmggYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oCitpbmRleCA5ZTg0Zjg4Li4wYWRjMzYw
IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAor
KysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAorQEAgLTI0LDcg
KzI0LDI3IEBAIG5hbWVzcGFjZSByeAorIAorIGNsYXNzIERpc3BsYXlNdGw7CisgCistY2xhc3Mg
U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK2NsYXNzIFN1cmZhY2VNdGxQcm90b2Nv
bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK3sKKysgIHB1YmxpYzoKKysgICAgU3VyZmFjZU10bFBy
b3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkgOiBTdXJmYWNlSW1wbChzdGF0
ZSkge30KKysgICAgdmlydHVhbCBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0ICAgICAgPSAwOworKyAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCA9IDA7CisrCisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gYmluZGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92
ZXJyaWRlID0gMDsKKysKKysgICAgdmlydHVhbCBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgp
IGNvbnN0ID0gMDsKKysgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3
YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0gMDsKKysgICAgdmlydHVh
bCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworKyAgICB2aXJ0dWFsIGNvbnN0IG10bDo6VGV4
dHVyZVJlZiAmIGdldENvbG9yVGV4dHVyZSgpID0gMDsKKyt9OworKworK2NsYXNzIFN1cmZhY2VN
dGwgOiBwdWJsaWMgU3VyZmFjZU10bFByb3RvY29sCisgeworICAgcHVibGljOgorICAgICBTdXJm
YWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCitAQCAtNjcsMTEgKzg3LDExIEBAIGNsYXNzIFN1
cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKKyAgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFs
aXplQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBv
dmVycmlkZTsKKyAKKy0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1cmUo
KSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAm
Z2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUNvbG9yVGV4dHVyZTsgfQorICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQ29s
b3JGb3JtYXQ7IH0KKy0gICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtU2FtcGxl
czsgfQorKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1TYW1w
bGVzOyB9CisgCistICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3QgeyByZXR1
cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQorKyAgICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5p
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1Sb2J1c3RSZXNvdXJjZUluaXQ7IH0KKyAKKyAg
ICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGJpbmRpbmcsCitAQCAtMTQ0LDEzICsxNjQsMTQgQEAgY2xhc3MgV2luZG93U3Vy
ZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQg
KipydE91dCkgb3ZlcnJpZGU7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERy
YXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAg
ICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0IC8qKiBudWxsYWJsZSAqLyk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2Fi
bGVPdXQgLyoqIG51bGxhYmxlICovKSBvdmVycmlkZTsKKyAKKyAgICAgLy8gRW5zdXJlIHRoZSB0
aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdldENvbG9yVGV4dHVyZSgpIGlzIHJlYWR5IGZvciBn
bFJlYWRQaXhlbHMoKS4gVGhpcworICAgICAvLyBpbXBsaWNpdGx5IGNhbGxzIGVuc3VyZUN1cnJl
bnREcmF3YWJsZU9idGFpbmVkKCkuCistICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0
dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKysg
ICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBib29sIHByZXNlcnZlQnVm
ZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJldGFpbkJ1ZmZlcjsgfQorICAgcHJpdmF0
ZToKKyAgICAgYW5nbGU6OlJlc3VsdCBzd2FwSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgb2J0YWluTmV4dERyYXdhYmxlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KTsKK0BAIC0xNjgsNiArMTg5LDggQEAgY2xhc3MgV2luZG93U3VyZmFjZU10
bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgIC8vIGV2ZW50LiBXZSBkb24ndCB1c2UgbU1ldGFs
TGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5IHNpbmNlIGl0IG1pZ2h0IGJlIGNoYW5nZWQgaW50
ZXJuYWxseSBieQorICAgICAvLyBtZXRhbCBydW50aW1lLgorICAgICBDR1NpemUgbUN1cnJlbnRL
bm93bkRyYXdhYmxlU2l6ZTsKKysKKysgICAgYm9vbCBtUmV0YWluQnVmZmVyID0gZmFsc2U7Cisg
fTsKKyAKKyAvLyBPZmZzY3JlZW4gc3VyZmFjZSwgYmFzZSBjbGFzcyBvZiBQQnVmZmVyLCBJT1N1
cmZhY2UuCitAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVyU3VyZmFjZU10bCA6IHB1
YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCisgICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQoRUdMaW50
IGhlaWdodCkgb3ZlcnJpZGU7CisgfTsKKyAKKy0vLyBPZmZzY3JlZW4gY3JlYXRlZCBmcm9tIElP
U3VyZmFjZQorLWNsYXNzIElPU3VyZmFjZVN1cmZhY2VNdGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3Vy
ZmFjZU10bAorLXsKKy0gIHB1YmxpYzoKKy0gICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5
TXRsICpkaXNwbGF5LAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIg
YnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKTsKKy0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlkZTsKKy0KKy0g
ICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKy0gICAgZWds
OjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGlu
dCBidWZmZXIpIG92ZXJyaWRlOworLQorLSAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRS
ZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZp
bWFnZUluZGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzYW1wbGVzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRl
OworLQorLSAgICBzdGF0aWMgYm9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVy
IGJ1ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOworLQorLSAgcHJpdmF0
ZToKKy0gICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKy0gICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Cist
ICAgIE5TVUludGVnZXIgbUlPU3VyZmFjZVBsYW5lOworLSAgICBpbnQgbUlPU3VyZmFjZUZvcm1h
dElkeDsKKy19OworLQorIH0gIC8vIG5hbWVzcGFjZSByeAorLQorICNlbmRpZiAvKiBMSUJBTkdM
RV9SRU5ERVJFUl9NRVRBTF9TVVJGQUNFTVRMX0hfICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU3VyZmFjZU10bC5tbQoraW5kZXggMzAzZmIxNi4uYzllZTI0YiAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQorQEAgLTMzLDU1ICszMywxOSBAQAor
IHsKKyAKKyAjZGVmaW5lIEFOR0xFX1RPX0VHTF9UUlkoRVhQUikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgaWYg
KEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkpIFwKKyAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZhY2UoKTsgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKy0gICAgfSB3aGlsZSAoMCkKKyt9IHdoaWxlICgwKQorIAorIGNvbnN0
ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlckRlcHRoRm9ybWF0SWQgICA9
IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQg
a0RlZmF1bHRGcmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6Uzhf
VUlOVDsKKyBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0
aFN0ZW5jaWxGb3JtYXRJZCA9CisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJ
TlQ7CisgCistc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8KKy17CistICAgIEdMZW51bSBpbnRl
cm5hbEZvcm1hdDsKKy0gICAgR0xlbnVtIHR5cGU7CistICAgIHNpemVfdCBjb21wb25lbnRCeXRl
czsKKy0KKy0gICAgYW5nbGU6OkZvcm1hdElEIG5hdGl2ZUFuZ2xlRm9ybWF0SWQ7CistfTsKKy0K
Ky0vLyBjbGFuZy1mb3JtYXQgb2ZmCistLy8gTk9URShocWxlKTogU3VwcG9ydCBSMTZfVUlOVCBv
bmNlIEdMRVMzIGlzIGNvbXBsZXRlLgorLWNvbnN0ZXhwciBzdGQ6OmFycmF5PElPU3VyZmFjZUZv
cm1hdEluZm8sIDg+IGtJT1N1cmZhY2VGb3JtYXRzID0ge3sKKy0gICAge0dMX1JFRCwgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDEsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5P
Uk19LAorLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
MiwgYW5nbGU6OkZvcm1hdElEOjpSMTZfVU5PUk19LAorLSAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgMiwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VOT1JN
fSwKKy0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDQs
IGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VOT1JNfSwKKy0gICAge0dMX1JHQiwgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThf
VU5PUk19LAorLSAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCistICAgIHtHTF9SR0JBLCAg
ICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICA4LCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNkIxNkExNl9GTE9BVH0sCistICAgIHtHTF9SR0IxMF9BMiwgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWLCA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNfSwKKy19
fTsKKy0vLyBjbGFuZy1mb3JtYXQgb24KKy0KKy1pbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCisteworLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4oa0lPU3VyZmFjZUZvcm1hdHMuc2l6ZSgpKTsgKytp
KQorLSAgICB7CistICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZv
cm1hdHNbaV07CistICAgICAgICBpZiAoZm9ybWF0SW5mby5pbnRlcm5hbEZvcm1hdCA9PSBpbnRl
cm5hbEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0gdHlwZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICByZXR1cm4gaTsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICByZXR1cm4gLTE7Cist
fQorLQorIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVUZXh0dXJlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgd2lkdGgsCitAQCAtMTI4LDYgKzkyLDE5IEBAIGJvb2wgSXNGcmFtZUNhcHR1
cmVFbmFibGVkKCkKKyAjZW5kaWYKKyB9CisgCisrQU5HTEVfTVRMX1VOVVNFRAorK3N0ZDo6c3Ry
aW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQorK3sKKysjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NB
UFRVUkVfRU5BQkxFRAorKyAgICByZXR1cm4gIiI7CisrI2Vsc2UKKysgICAgYXV0byB2YXIgICAg
ICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9G
SUxFIik7CisrICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7
CisrCisrICAgIHJldHVybiBmaWxlUGF0aDsKKysjZW5kaWYKKyt9CisrCisgQU5HTEVfTVRMX1VO
VVNFRAorIHNpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKKyB7CitAQCAtMjAyLDYgKzE3
OSwyMSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2Us
IGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQorICAgICB7CisgICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisgCisgICAgICAgICBOU0Vycm9yICplcnJvcjsKKyAg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCitAQCAtMjExLDE0ICsyMDMsMTUgQEAgdm9p
ZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLCBpZDxNVExDb21t
YW5kUXVldWU+IG1ldGFsQ21kUXUKKyAgICAgfQorICAgICBlbHNlCisgIyAgICBlbmRpZiAgLy8g
X19NQUNfMTBfMTUKKysgICAgICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1
LCAxMy4wLCAxMykpCisgICAgIHsKKy0gICAgICAgIGlmIChGcmFtZUNhcHR1cmVEZXZpY2VTY29w
ZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1
cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKysg
ICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9IFtbTVRMQ2Fw
dHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworKyAgICAgICAgY2FwdHVyZURlc2NyaXB0b3Iu
Y2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisrCisrICAgICAgICBOU0Vycm9y
ICplcnJvcjsKKysgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhE
ZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisgICAgICAgICB7Cist
ICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhDb21tYW5kUXVldWU6
bWV0YWxDbWRRdWV1ZV07CisrICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2Fw
dHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisgICAgICAgICB9CisgICAgIH0KKyAjZW5kaWYgIC8v
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorQEAgLTI0NSwxMSArMjM4LDEwIEBA
IHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgfQorIH0KKyAKKy0vLyBTdXJmYWNlTXRsIGltcGxl
bWVudGF0aW9uCisgU3VyZmFjZU10bDo6U3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogU3VyZmFjZUltcGwoc3RhdGUpCisrICAgIDogU3VyZmFjZU10bFByb3RvY29sKHN0
YXRlKQorIHsKKyAgICAgbVJvYnVzdFJlc291cmNlSW5pdCA9CisgICAgICAgICBhdHRyaWJzLmdl
dChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFLCBFR0xfRkFMU0UpID09
IEVHTF9UUlVFOworQEAgLTY5Myw2ICs2ODUsMTAgQEAgdm9pZCBTdG9wRnJhbWVDYXB0dXJlKCkK
KyAgICAgcmV0dXJuIFN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4
dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpOworIH0KKyAKKythbmdsZTo6
UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3sKKysgICAgcmV0dXJuIGVuc3VyZUN1cnJlbnRE
cmF3YWJsZU9idGFpbmVkKGNvbnRleHQsIG51bGxwdHIpOworK30KKyBhbmdsZTo6UmVzdWx0IFdp
bmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQpCisgeworQEAgLTk0
MywxNTcgKzkzOSw1IEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgICAgIG1TaXplLmhlaWdo
dCA9IGhlaWdodDsKKyB9CisgCistLy8gSU9TdXJmYWNlU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlv
bi4KKy1JT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlNdGwg
KmRpc3BsYXksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogT2Zmc2NyZWVuU3VyZmFjZU10bChkaXNwbGF5LCBzdGF0ZSwgYXR0cmlicyksIG1J
T1N1cmZhY2UoKF9fYnJpZGdlIElPU3VyZmFjZVJlZikoYnVmZmVyKSkKKy17CistICAgIENGUmV0
YWluKG1JT1N1cmZhY2UpOworLQorLSAgICBtSU9TdXJmYWNlUGxhbmUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKy0KKy0gICAgRUdM
QXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfSU5URVJOQUxf
Rk9STUFUX0FOR0xFKTsKKy0gICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0gYXR0cmlicy5n
ZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7CistICAgIG1JT1N1cmZhY2VGb3JtYXRJZHggPQor
LSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50
ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0gICAgQVNTRVJUKG1J
T1N1cmZhY2VGb3JtYXRJZHggPj0gMCk7CistCistICAgIG1Db2xvckZvcm1hdCA9CistICAgICAg
ICBkaXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9y
bWF0SWR4XS5uYXRpdmVBbmdsZUZvcm1hdElkKTsKKy19CistSU9TdXJmYWNlU3VyZmFjZU10bDo6
fklPU3VyZmFjZVN1cmZhY2VNdGwoKQorLXsKKy0gICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKy0gICAgeworLSAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworLSAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CistICAgIH0KKy19CistCistZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGJ1ZmZlcikKKy17CistICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldElt
cGwoY29udGV4dCk7CistICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworLQorLSAg
ICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlmIG5lZWRlZDoKKy0gICAgQU5HTEVf
VE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAg
cmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb250ZXh0LCB0ZXh0dXJl
LCBidWZmZXIpOworLX0KKy0KKy1lZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikKKy17
CistICAgIGVnbDo6RXJyb3IgcmUgPSBPZmZzY3JlZW5TdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1h
Z2UoY29udGV4dCwgYnVmZmVyKTsKKy0gICAgU3RvcEZyYW1lQ2FwdHVyZSgpOworLSAgICByZXR1
cm4gcmU7CistfQorLQorLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0QXR0
YWNobWVudFJlbmRlclRhcmdldCgKKy0gICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgIEdMZW51bSBiaW5kaW5nLAorLSAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRl
eCwKKy0gICAgR0xzaXplaSBzYW1wbGVzLAorLSAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQgKipydE91dCkKKy17CistICAgIC8vIEluaXRpYWxpemUgb2Zmc2NyZWVuIHRleHR1
cmUgaWYgbmVlZGVkOgorLSAgICBBTkdMRV9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChj
b250ZXh0KSk7CistCistICAgIHJldHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpnZXRBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ0T3V0KTsKKy19CistCistYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1
cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0g
ICAgaWYgKG1Db2xvclRleHR1cmUpCistICAgIHsKKy0gICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKy0gICAgfQorLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorLSAgICB7Cist
ICAgICAgICBhdXRvIHRleERlc2MgPQorLSAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRv
ciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0Om1Db2xvckZvcm1hdC5tZXRhbEZv
cm1hdAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOm1TaXplLndpZHRoCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6bVNpemUuaGVpZ2h0
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBwZWQ6Tk9dOworLQorLSAgICAgICAgdGV4RGVzYy51c2FnZSA9IE1UTFRleHR1
cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7CistCistICAg
ICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlID0KKy0gICAgICAgICAgICBbY29udGV4dE10bC0+
Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2NyaXB0b3I6dGV4RGVzYworLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3Vy
ZmFjZTptSU9TdXJmYWNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOm1JT1N1cmZhY2VQbGFuZV07CistCistICAgICAg
ICBtQ29sb3JUZXh0dXJlID0gbXRsOjpUZXh0dXJlOjpNYWtlRnJvbU1ldGFsKFt0ZXh0dXJlIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV0pOworLSAgICB9CistCistICAgIG1Db2xvclJlbmRlclRhcmdl
dC5zZXQobUNvbG9yVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2ZU1pcExldmVsLCAwLCBtQ29sb3JG
b3JtYXQpOworLQorLSAgICBpZiAoa0lPU3VyZmFjZUZvcm1hdHNbbUlPU3VyZmFjZUZvcm1hdElk
eF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQorLSAgICB7CistICAgICAgICAvLyBUaGlzIGZv
cm1hdCBoYXMgZW11bGF0ZWQgYWxwaGEgY2hhbm5lbC4gSW5pdGlhbGl6ZSB0ZXh0dXJlJ3MgYWxw
aGEgY2hhbm5lbCB0byAxLjAuCistICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmcmdiQ2xlYXJG
b3JtYXQgPQorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpG
b3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKKy0gICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRpYWxp
emVUZXh0dXJlQ29udGVudHNHUFUoCistICAgICAgICAgICAgY29udGV4dCwgbUNvbG9yVGV4dHVy
ZSwgcmdiQ2xlYXJGb3JtYXQsCistICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpG
cm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpLAorLSAgICAgICAg
ICAgIE1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKKy0KKy0gICAgICAgIC8vIERpc2FibGUgc3Vi
c2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4KKy0gICAgICAgIG1Db2xvclRleHR1
cmUtPnNldENvbG9yV3JpdGFibGVNYXNrKE1UTENvbG9yV3JpdGVNYXNrQWxsICYgKH5NVExDb2xv
cldyaXRlTWFza0FscGhhKSk7CistICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLX0KKy0KKy0vLyBzdGF0aWMKKy1ib29sIElPU3VyZmFjZVN1cmZhY2VNdGw6
OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKQorLXsKKy0gICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IChfX2JyaWRnZSBJ
T1N1cmZhY2VSZWYpKGJ1ZmZlcik7CistCistICAgIC8vIFRoZSBwbGFuZSBtdXN0IGV4aXN0IGZv
ciB0aGlzIElPU3VyZmFjZS4gSU9TdXJmYWNlR2V0UGxhbmVDb3VudCBjYW4gcmV0dXJuIDAgZm9y
IG5vbi1wbGFuYXIKKy0gICAgLy8gaW9TdXJmYWNlcyBidXQgd2Ugd2lsbCB0cmVhdCBub24tcGxh
bmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCistICAgIHNpemVfdCBzdXJmYWNlUGxhbmVD
b3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChpb1N1cmZh
Y2UpKTsKKy0gICAgRUdMQXR0cmliIHBsYW5lICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX0lP
U1VSRkFDRV9QTEFORV9BTkdMRSk7CistICAgIGlmIChwbGFuZSA8IDAgfHwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQpCistICAgIHsKKy0gICAgICAgIHJl
dHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICAvLyBUaGUgd2lkdGggaGVpZ2h0IHNwZWNpZmll
ZCBtdXN0IGJlIGF0IGxlYXN0ICgxLCAxKSBhbmQgYXQgbW9zdCB0aGUgcGxhbmUgc2l6ZQorLSAg
ICBFR0xBdHRyaWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdMX1dJRFRIKTsKKy0gICAgRUdMQXR0
cmliIGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOworLSAgICBpZiAod2lkdGggPD0g
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFu
ZShpb1N1cmZhY2UsIHBsYW5lKSB8fAorLSAgICAgICAgaGVpZ2h0IDw9IDAgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihoZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShpb1N1cmZhY2Us
IHBsYW5lKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAg
IC8vIEZpbmQgdGhpcyBJT1N1cmZhY2UgZm9ybWF0CistICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZv
cm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7Cist
ICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUpOworLQorLSAgICBpbnQgZm9ybWF0SW5kZXggPQorLSAgICAgICAgRmluZElPU3Vy
ZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0
aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0KKy0gICAgaWYgKGZvcm1hdEluZGV4IDwgMCkKKy0g
ICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAgIC8vIENoZWNrIHRo
YXQgdGhlIGZvcm1hdCBtYXRjaGVzIHRoaXMgSU9TdXJmYWNlIHBsYW5lCistICAgIGlmIChJT1N1
cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5lKGlvU3VyZmFjZSwgcGxhbmUpICE9CistICAg
ICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCistICAg
IHsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gdHJ1ZTsK
Ky19CisgCisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5j
TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oCitpbmRleCA2MmY5
NmVlLi5mNGJjYWU5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5
bmNNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorQEAg
LTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgbXRsCisgCisgLy8gQ29tbW9uIGNsYXNzIHRvIGJlIHVzZWQgYnkgYm90
aCBTeW5jSW1wbCBhbmQgRUdMU3luY0ltcGwuCisgLy8gTk9URTogU2hhcmVkRXZlbnQgaXMgb25s
eSBkZWNsYXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KworLSNpZiBBTkdMRV9NVExfRVZF
TlRfQVZBSUxBQkxFCisrI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKKyBjbGFzcyBTeW5jCisgeworICAgcHVibGljOgorQEAgLTU5LDcgKzU5LDcgQEAg
Y2xhc3MgU3luYworICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+
IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IG1Mb2NrOworIH07CistI2Vs
c2UgICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorKyNlbHNlICAgLy8gI2lmIGRl
ZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKKyBjbGFzcyBTeW5j
CisgeworICAgcHVibGljOgorQEAgLTkwLDcgKzkwLDcgQEAgY2xhc3MgU3luYworICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgIH0KKyB9OworLSNlbmRpZiAgLy8gI2lm
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKysjZW5kaWYgIC8vICNpZiBkZWZpbmVkKF9fSVBI
T05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisgfSAgLy8gbmFtZXNwYWNlIG10bAor
IAorIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKK0BAIC05OCw5ICs5OCw3
IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKKyAgIHB1YmxpYzoKKyAg
ICAgRmVuY2VOVk10bCgpOworICAgICB+RmVuY2VOVk10bCgpIG92ZXJyaWRlOworLQorICAgICB2
b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CistCisg
ICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0g
Y29uZGl0aW9uKSBvdmVycmlkZTsKKyAgICAgYW5nbGU6OlJlc3VsdCB0ZXN0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJvb2xlYW4gKm91dEZpbmlzaGVkKSBvdmVycmlkZTsKKyAgICAg
YW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
OworQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xTeW5jTXRsIGZpbmFsIDogcHVibGljIEVH
TFN5bmNJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgZmxhZ3MpIG92ZXJy
aWRlOworICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKKyAKKysgICAgZWdsOjpFcnJvciBkdXBO
YXRpdmVGZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpyZXN1bHQp
IGNvbnN0IG92ZXJyaWRlOworKworICAgcHJpdmF0ZToKKyAgICAgbXRsOjpTeW5jIG1TeW5jOwor
IH07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0g
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQoraW5kZXggZGZmODAwMy4u
ZjhmM2VlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQorQEAgLTEs
NSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMjIsNyArMjIsNyBA
QAorIG5hbWVzcGFjZSBtdGwKKyB7CisgLy8gU2hhcmVkRXZlbnQgaXMgb25seSBhdmFpbGFibGUg
b24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKy0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisg
U3luYzo6U3luYygpIHt9CisgU3luYzo6flN5bmMoKSB7fQorIAorQEAgLTg3LDcgKzg3LDcgQEAK
KyAgICAgLy8gb25EZXN0cm95KCksIGJ1dCB0aGUgY2FsbGJhY2sgbWlnaHQgc3RpbGwgbm90IGJl
IGZpcmVkIHlldC4KKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
PiBjdlJlZiA9IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IGxvY2tSZWYg
ICAgICAgICAgICA9IG1Mb2NrOworLQorKyNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisg
ICAgIEF1dG9PYmpDT2JqPE1UTFNoYXJlZEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPQor
ICAgICAgICAgY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRPckNyZWF0ZVNoYXJlZEV2ZW50
TGlzdGVuZXIoKTsKKyAgICAgW21NZXRhbFNoYXJlZEV2ZW50LmdldCgpIG5vdGlmeUxpc3RlbmVy
OmV2ZW50TGlzdGVuZXIKK0BAIC0xMDYsNiArMTA2LDcgQEAKKyAKKyAgICAgQVNTRVJUKG1NZXRh
bFNoYXJlZEV2ZW50LmdldCgpLnNpZ25hbGVkVmFsdWUgPj0gbVNldENvdW50ZXIpOworICAgICAq
b3V0UmVzdWx0ID0gR0xfQ09ORElUSU9OX1NBVElTRklFRDsKKysjZW5kaWYKKyAKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KK0BAIC0xMTgsNyArMTE5LDcgQEAKKyAg
ICAgKnNpZ25hbGVkID0gbU1ldGFsU2hhcmVkRXZlbnQuZ2V0KCkuc2lnbmFsZWRWYWx1ZSA+PSBt
U2V0Q291bnRlcjsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0j
ZW5kaWYgIC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisrI2VuZGlmICAvLyAjaWYg
ZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorIH0gIC8vIG5h
bWVzcGFjZSBtdGwKKyAKKyAvLyBGZW5jZU5WTXRsIGltcGxlbWVudGF0aW9uCitAQCAtMTI4LDcg
KzEyOSw4IEBACisgCisgdm9pZCBGZW5jZU5WTXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworLSAgICBtU3luYy5vbkRlc3Ryb3koKTsKKysgICAgVU5JTVBMRU1F
TlRFRCgpOworKyAgICByZXR1cm47CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgRmVuY2VOVk10bDo6
c2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9uKQorQEAgLTMw
Nyw0ICszMDksMTAgQEAKKyAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworIH0KKyAKKytlZ2w6
OkVycm9yIEVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3QKKyt7CisrICAgIFVOUkVBQ0hBQkxFKCk7Cisr
ICAgIHJldHVybiBlZ2w6OkVnbEJhZERpc3BsYXkoKTsKKyt9CisrCisgfQorZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmggYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCitpbmRleCA1YzIxNDFiLi41ZjRiMmQ0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorKysrIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorQEAgLTE1LDkgKzE1LDkg
QEAKKyAjaW5jbHVkZSAiY29tbW9uL1BhY2tlZEVudW1zLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL1RleHR1cmVJbXBsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1JlbmRlclRhcmdldE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9j
b21tYW5kX2J1ZmZlci5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
cmVzb3VyY2VzLmgiCistCisgbmFtZXNwYWNlIHJ4CisgeworIAorQEAgLTMyLDYgKzMyLDggQEAg
Y2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAorIHsKKyAgIHB1YmxpYzoKKyAg
ICAgVGV4dHVyZU10bChjb25zdCBnbDo6VGV4dHVyZVN0YXRlICZzdGF0ZSk7CisrICAgIC8vIFRl
eHR1cmUgIHZpZXcKKysgICAgVGV4dHVyZU10bChjb25zdCBUZXh0dXJlTXRsICZtdGwsIEdMZW51
bSBmb3JtYXQpOworICAgICB+VGV4dHVyZU10bCgpIG92ZXJyaWRlOworICAgICB2b2lkIG9uRGVz
dHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtMTkzLDYg
KzE5NSw3IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKKyAgICAgSW1h
Z2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24oY29uc3QgZ2w6OkltYWdlSW5kZXgg
JmltYWdlSW5kZXgpOworICAgICBSZW5kZXJUYXJnZXRNdGwgJmdldFJlbmRlclRhcmdldChjb25z
dCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CisgICAgIGJvb2wgaXNJbmRleFdpdGhpbk1p
bk1heExldmVscyhjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgY29uc3Q7CisrICAg
IG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgZ2w6OkltYWdlSW5k
ZXggJmltYWdlSW5kZXgpOworIAorICAgICAvLyBJZiBsZXZlbHMgPSAwLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgY3JlYXRlIGZ1bGwgbWlwbWFwcyB0ZXh0dXJlLgorICAgICBhbmdsZTo6UmVzdWx0IHNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTMxMiw4ICszMTUs
OSBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCisgICAgIGFuZ2xlOjpS
ZXN1bHQgZ2VuZXJhdGVNaXBtYXBDUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworIAor
ICAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1Cb3Vu
ZFN1cmZhY2UgPSBuaWw7CisgICAgIC8vIFRoZSByZWFsIHRleHR1cmUgdXNlZCBieSBNZXRhbCBk
cmF3IGNhbGxzLgorLSAgICBtdGw6OlRleHR1cmVSZWYgbU5hdGl2ZVRleHR1cmU7CisrICAgIG10
bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZSAgICAgICAgID0gbmlsOworICAgICBpZDxNVExT
YW1wbGVyU3RhdGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5pbDsKKyAKKyAgICAgLy8gTnVtYmVy
IG9mIHNsaWNlcworQEAgLTMyMywxOCArMzI3LDE0IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJs
aWMgVGV4dHVyZUltcGwKKyAgICAgLy8gT25jZSB0aGUgaW1hZ2VzIGFycmF5IGlzIGNvbXBsZXRl
LCB0aGV5IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gcmVhbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAg
Ly8gTk9URToKKyAgICAgLy8gIC0gVGhlIHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBj
b25maWd1cmVkIGJhc2UgbGV2ZWwgKyBhY3R1YWwgbmF0aXZlIGxldmVsCistICAgIC8vICAtIEZv
ciBDdWJlIG1hcCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbVRleElt
YWdlRGVmcyB0YWJsZSwgb25lIGZvciBlYWNoCistICAgIC8vICBmYWNlLiBUaGlzIGlzIGJlY2F1
c2UgdGhlIEN1YmUgbWFwJ3MgaW1hZ2UgaXMgZGVmaW5lZCBwZXIgZmFjZSAmIHBlciBsZXZlbC4K
KysgICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVz
IGluIHRoZSBtYXAgdGFibGUsIG9uZSBmb3IgZWFjaCBmYWNlLiBUaGlzIGlzCisrICAgIC8vICBi
ZWNhdXNlIHRoZSBDdWJlIG1hcCdzIGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2
ZWwuCisgICAgIC8vICAtIEZvciBvdGhlciB0ZXh0dXJlIHR5cGVzLCB0aGVyZSB3aWxsIGJlIG9u
bHkgb25lIGVudHJ5IGluIHRoZSBtYXAgdGFibGUuIEFsbCBvdGhlciB0ZXh0dXJlcworICAgICAv
LyAgZXhjZXB0IEN1YmUgbWFwIGhhcyB0ZXh0dXJlIGltYWdlIGRlZmluZWQgcGVyIGxldmVsIChh
bGwgc2xpY2VzIGluY2x1ZGVkKS4KKysgICAgLy8gIC0gVGhlc2UgdGhyZWUgdmFyaWFibGVzJyBz
ZWNvbmQgZGltZW5zaW9uIGFyZSBpbmRleGVkIGJ5IGltYWdlIGluZGV4IChiYXNlIGxldmVsIGlu
Y2x1ZGVkKS4KKyAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxJbWFnZURlZmlu
aXRpb25NdGw+PiBtVGV4SW1hZ2VEZWZzOworLQorLSAgICAvLyBSZW5kZXIgVGFyZ2V0IHBlciBz
bGljZS9kZXB0aC9jdWJlIGZhY2UuCistICAgIC8vIC0gRm9yIDJEIHRleHR1cmU6IFRoZXJlIHdp
bGwgYmUgb25lIGtleSBlbnRyeSBpbiB0aGUgbWFwLgorLSAgICAvLyAtIEZvciBDdWJlIG1hcDog
VGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5IGVudHJpZXMuCistICAgIC8vIC0gRm9yIGFycmF5
LzNEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgYXQgbW9zdCBzbGljZXMvZGVwdGhzIG51bWJlciBv
ZiBrZXkgZW50cmllcy4KKy0gICAgLy8gLSBUaGUgc2Vjb25kIGRpbWVuc2lvbiBpcyBpbmRleGVk
IGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBuYXRpdmUgbGV2ZWwKKyAgICAgc3Rk
OjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxSZW5kZXJUYXJnZXRNdGw+PiBtUGVyTGF5ZXJS
ZW5kZXJUYXJnZXRzOworKyAgICBzdGQ6Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PG10bDo6
VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1TVGV4dHVyZXM7CisgCisgICAgIC8vIE1pcG1hcCB2aWV3
cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGlnbm9yZWQgYmFzZSBsZXZlbCk6CisgICAg
IG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBtTmF0aXZlTGV2ZWxWaWV3czsKK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbSBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitpbmRleCA2MjNjMTA0Li4zYjFjOGFmIDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitAQCAtMjAsOCAr
MjAsOCBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgi
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TYW1wbGVyTXRsLmgiCistI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgorQEAgLTUzNCw2ICs1MzQsMTAgQEAgR0xlbnVtIE92ZXJyaWRl
U3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1
bHQgVGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCisgeworKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICB9CisgICAgIGlmIChtTmF0aXZlVGV4
dHVyZSkKKyAgICAgeworICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
QEAgLTEyMDcsMjUgKzEyMTEsMTUgQEAgR0xlbnVtIE92ZXJyaWRlU3dpenpsZVZhbHVlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6Ymlu
ZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKy0KKy0gICAgYXV0byBwQnVmZmVy
ICAgICA9IEdldEltcGxBczxPZmZzY3JlZW5TdXJmYWNlTXRsPihzdXJmYWNlKTsKKy0gICAgbU5h
dGl2ZVRleHR1cmUgICA9IHBCdWZmZXItPmdldENvbG9yVGV4dHVyZSgpOworLSAgICBtRm9ybWF0
ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29sb3JGb3JtYXQoKTsKKy0gICAgZ2w6OkV4dGVudHMg
c2l6ZSA9IG1OYXRpdmVUZXh0dXJlLT5zaXplQXQwKCk7CistICAgIG1Jc1BvdzIgICAgICAgICAg
PSBnbDo6aXNQb3cyKHNpemUud2lkdGgpICYmIGdsOjppc1BvdzIoc2l6ZS5oZWlnaHQpICYmIGds
Ojppc1BvdzIoc2l6ZS5kZXB0aCk7CistICAgIEFOR0xFX1RSWShlbnN1cmVTYW1wbGVyU3RhdGVD
cmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAgLy8gVGVsbCBjb250ZXh0IHRvIHJlYmluZCB0ZXh0
dXJlcworLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworLSAgICBjb250ZXh0TXRsLT5pbnZhbGlkYXRlQ3VycmVudFRleHR1cmVzKCk7CistCisrICAg
IElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAoSU9TdXJmYWNlU3VyZmFjZU10bCAq
KW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKysgICAgbUJvdW5kU3VyZmFjZSAgICAgICAgICAgICAg
ICAgICA9IHN1cmZhY2VNdGw7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCisgYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKysg
ICAgbUJvdW5kU3VyZmFjZSA9IG5pbDsKKysKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworIH0KKyAKK0BAIC0xMjM1LDYgKzEyMjksMTIgQEAgR0xlbnVtIE92ZXJyaWRlU3dp
enpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVm
ZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQorIHsKKysgICAgaWYgKG1Cb3VuZFN1
cmZhY2UpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWSgKKysgICAgICAgICAgICBtQm91bmRT
dXJmYWNlLT5nZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdl
SW5kZXgsIHNhbXBsZXMsIHJ0T3V0KSk7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CisrICAgIH0KKyAgICAgQU5HTEVfVFJZKGVuc3VyZVRleHR1cmVDcmVhdGVkKGNv
bnRleHQpKTsKKyAKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChj
b250ZXh0KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNm
b3JtRmVlZGJhY2tNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1G
ZWVkYmFja010bC5oCitpbmRleCBhYTQ1YmY5Li4yMGEyYzIwIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oCitAQCAtMTAsMTIg
KzEwLDIwIEBACisgI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9UUkFOU0ZPUk1GRUVE
QkFDS01UTF9IXworICNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfVFJBTlNGT1JNRkVF
REJBQ0tNVExfSF8KKyAKKysjaW5jbHVkZSA8TWV0YWwvTWV0YWwuaD4KKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgCistbmFtZXNwYWNlIHJ4CisrdHlwZWRlZiB1
aW50NjRfdCBNdGxEZXZpY2VTaXplOworKworK25hbWVzcGFjZSBnbAorIHsKKytjbGFzcyBQcm9n
cmFtU3RhdGU7CisrfSAgLy8gbmFtZXNwYWNlIGdsCisgCistY2xhc3MgQ29udGV4dE10bDsKKytu
YW1lc3BhY2UgcngKKyt7CisgCisgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwgOiBwdWJsaWMg
VHJhbnNmb3JtRmVlZGJhY2tJbXBsCisgeworQEAgLTMyLDE3ICs0MCwyMyBAQCBjbGFzcyBUcmFu
c2Zvcm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1GZWVkYmFja0ltcGwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGds
OjpCdWZmZXI+ICZiaW5kaW5nKSBvdmVycmlkZTsKKyAKKy0gICAgLy8gUGFyYW1zOgorLSAgICAv
LyAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXggaXMgZmlyc3QgdmVydGV4IHVzZWQgYnkgZ2xEcmF3QXJy
YXlzKi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZQorLSAgICAvLyBnbF9WZXJ0ZXhJbmRleCBp
cyBzdGFydGluZyBmcm9tIHRoaXMuCistICAgIC8vIC0gc2tpcHBlZFZlcnRpY2VzIGlzIG51bWJl
ciBvZiBza2lwcGVkIHZlcnRpY2VzICh1c2VmdWwgZm9yIG11bHRpcGxlIG1ldGFsIGRyYXdzIHBl
ciBHTCBkcmF3CistICAgIC8vIGNhbGwpLgorLSAgICBhbmdsZTo6UmVzdWx0IGdldEJ1ZmZlck9m
ZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgdm9pZCBnZXRCdWZmZXJPZmZzZXRz
KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkcmF3Q2FsbEZpcnN0VmVydGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2tpcHBlZFZlcnRpY2VzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCk7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG9mZnNldHNTaXplKSBjb25zdDsKKysKKysgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmZ2V0QnVmZmVySGFuZGxlcygpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIHJldHVybiBtQnVmZmVySGFuZGxlczsKKysgICAgfQorIAorICAgcHJpdmF0
ZToKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiBt
QnVmZmVySGFuZGxlczsKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10
bERldmljZVNpemU+IG1CdWZmZXJPZmZzZXRzOworKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNpemVzOworKworKyAgICAvLyBBbGln
bmVkIG9mZnNldCBmb3IgZW11bGF0aW9uLiBDb3VsZCBiZSBzbWFsbGVyIHRoYW4gb2Zmc2V0Lgor
KyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUFs
aWduZWRCdWZmZXJPZmZzZXRzOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1t
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCitp
bmRleCBkOTQwYzNkLi5kZTdhOTA5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KK0BAIC04LDE4ICs4LDI3IEBACisgLy8K
KyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tN
dGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaCIKKyAKKy0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvUXVlcnkuaCIKKy0j
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorLSNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIgorKworKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKyAKKyBuYW1lc3BhY2UgcngKKyB7CisgCisgVHJhbnNmb3JtRmVlZGJhY2tN
dGw6OlRyYW5zZm9ybUZlZWRiYWNrTXRsKGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja1N0YXRl
ICZzdGF0ZSkKKy0gICAgOiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwoc3RhdGUpCisrICAgIDogVHJh
bnNmb3JtRmVlZGJhY2tJbXBsKHN0YXRlKSwKKysgICAgICBtQnVmZmVySGFuZGxlc3t9LAorKyAg
ICAgIG1CdWZmZXJPZmZzZXRze30sCisrICAgICAgbUJ1ZmZlclNpemVze30sCisrICAgICAgbUFs
aWduZWRCdWZmZXJPZmZzZXRze30KKyB7fQorIAorIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJh
bnNmb3JtRmVlZGJhY2tNdGwoKSB7fQorQEAgLTI3LDQwICszNiw3OSBAQAorIGFuZ2xlOjpSZXN1
bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRp
dmVNb2RlIHByaW1pdGl2ZU1vZGUpCisgeworLSAgICBtdGw6OkdldEltcGwoY29udGV4dCktPm9u
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7CisrICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIC8vIE5vdCBjdXJyZW50
bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisrICAgIGlmICghY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVk
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQor
IAorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIGNvbnN0IGdsOjpQ
cm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0
UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworKyAgICBzaXpl
X3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ckNvdW50KCk7CisrCisrICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5k
ZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKysgICAgeworKyAgICAgICAgY29u
c3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nID0gbVN0YXRl
LmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworKyAgICAgICAgQVNTRVJUKGJpbmRpbmcu
Z2V0KCkpOworKworKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwo
YmluZGluZy5nZXQoKSk7CisrCisrICAgICAgICBhc3NlcnQoYnVmZmVyTXRsKTsKKysgICAgICAg
IG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRpbmcuZ2V0T2Zmc2V0KCk7CisrICAg
ICAgICBtQnVmZmVyU2l6ZXNbYnVmZmVySW5kZXhdICAgPSBnbDo6R2V0Qm91bmRCdWZmZXJBdmFp
bGFibGVTaXplKGJpbmRpbmcpOworKyAgICAgICAgbUJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhd
ID0gYnVmZmVyTXRsOworKworKyAgICAgICAgQVNTRVJUKGNvbnRleHRNdGwtPmdldERpc3BsYXko
KS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCk7CisrICAg
ICAgICBjb25zdCBNdGxEZXZpY2VTaXplIG9mZnNldEFsaWdubWVudCA9IG10bDo6a1VuaWZvcm1C
dWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50OworKworKyAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZXJlJ3Mgbm8gcG9zc2libGUgdW5kZXIvb3ZlcmZsb3cgd2l0aCBiaW5kaW5nIHNpemUuCisr
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNdGxEZXZpY2VTaXplKSA+PSBzaXplb2YoYmlu
ZGluZy5nZXRTaXplKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAiTXRsRGV2aWNlU2l6ZSB0
b28gc21hbGwiKTsKKysKKysgICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGFzIGNsb3NlIGFzIHBv
c3NpYmxlIHRvIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IHdoaWxlIHJlbWFpbmluZyBhbGlnbmVkLgor
KyAgICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9CisrICAgICAgICAg
ICAgKG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAvIG9mZnNldEFsaWdubWVudCkgKiBvZmZz
ZXRBbGlnbm1lbnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbnRleHRNdGwtPm9uQmVnaW5U
cmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZmZXJDb3VudCwgbUJ1ZmZlckhhbmRsZXMpOworIH0KKyAK
KyBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJ
bXBsKGNvbnRleHQpOworKyAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIG1zbCBj
b21waWxlcgorKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisrICAgIH0KKysKKysgICAgLy8gSWYgdGhlcmUncyBh
biBhY3RpdmUgdHJhbnNmb3JtIGZlZWRiYWNrIHF1ZXJ5LCBhY2N1bXVsYXRlIHRoZSBwcmltaXRp
dmVzIGRyYXduLgorICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgPSBjb250ZXh0LT5nZXRT
dGF0ZSgpOworICAgICBnbDo6UXVlcnkgKnRyYW5zZm9ybUZlZWRiYWNrUXVlcnkgPQorICAgICAg
ICAgZ2xTdGF0ZS5nZXRBY3RpdmVRdWVyeShnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNXcml0dGVuKTsKKysKKyAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkp
CisgICAgIHsKKy0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+
b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKysgICAgICAgIG10bDo6R2V0SW1wbCh0
cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChtU3RhdGUuZ2V0
UHJpbWl0aXZlc0RyYXduKCkpOworICAgICB9CistCistICAgIG10bDo6R2V0SW1wbChjb250ZXh0
KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOworLQorKyAgICBj
b250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFj
a010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICAvLyBXaGVu
IFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1ZmZlcnMgdG8gYmUgYm91bmQgZm9y
IG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKKy0gICAgLy8gb25UcmFuc2Zvcm1GZWVk
YmFja0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgorLSAgICBtdGw6OkdldEltcGwoY29udGV4
dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tJbmFjdGl2ZShjb250ZXh0LCB0aGlzKTsKKy0KKy0gICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICByZXR1cm4gY29udGV4dE10bC0+b25Q
YXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3Jt
RmVlZGJhY2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CistICAg
IG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0
LCB0aGlzKTsKKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoY29u
dGV4dCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNv
bnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJU
KGV4ZWN1dGFibGUpOworKyAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIHJldHVybiBjb250ZXh0TXRs
LT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVmZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVz
KTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4
ZWRCdWZmZXIoCitAQCAtNjgsMTcgKzExNiwyMCBAQAorICAgICBzaXplX3QgaW5kZXgsCisgICAg
IGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYmluZGluZykKKyB7
CistICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdworKyAgICBVTklNUExFTUVOVEVEKCk7CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCistYW5nbGU6OlJlc3Vs
dCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBza2lwcGVkVmVydGlj
ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3QKKyB7CistICAg
IGludDY0X3QgdmVydGljZXNEcmF3biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG1TdGF0ZS5nZXRW
ZXJ0aWNlc0RyYXduKCkpICsgc2tpcHBlZFZlcnRpY2VzOworKyAgICBpZiAoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5h
YmxlZCkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgR0xzaXplaXB0ciB2ZXJ0aWNlc0RyYXdu
ID0gbVN0YXRlLmdldFZlcnRpY2VzRHJhd24oKTsKKyAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8R0xz
aXplaT4gJmJ1ZmZlclN0cmlkZXMgPQorICAgICAgICAgbVN0YXRlLmdldEJvdW5kUHJvZ3JhbSgp
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKKyAgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFt
RXhlY3V0YWJsZSgpOworQEAgLTg3LDI3ICsxMzgsMjUgQEAKKyAKKyAgICAgQVNTRVJUKHhmYkJ1
ZmZlckNvdW50ID4gMCk7CisgCisrICAgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0
aGUgb2Zmc2V0cyBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgVGhlIG1heGltdW0gcG9zc2libGUK
KysgICAgLy8gbnVtYmVyIG9mIG91dHB1dHMgaXMgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUy4KKysgICAgQVNTRVJUKG9mZnNldHNTaXplID49IHhmYkJ1
ZmZlckNvdW50KTsKKysKKyAgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJ
bmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgICB7CistICAgICAgICBj
b25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJ1ZmZlckJpbmRpbmcg
PQorLSAgICAgICAgICAgIG1TdGF0ZS5nZXRJbmRleGVkQnVmZmVyKGJ1ZmZlckluZGV4KTsKKy0K
Ky0gICAgICAgIEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwor
LQorLSAgICAgICAgLy8gT2Zmc2V0IHRoZSBnbF9WZXJ0ZXhJbmRleCBieSBkcmF3Q2FsbEZpcnN0
VmVydGV4CisrICAgICAgICBpbnQ2NF90IG9mZnNldEZyb21EZXNjcmlwdG9yID0KKysgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihtQnVmZmVyT2Zmc2V0c1tidWZmZXJJbmRleF0gLSBt
QWxpZ25lZEJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdKTsKKyAgICAgICAgIGludDY0X3QgZHJh
d0NhbGxWZXJ0ZXhPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2ZXJ0aWNlc0RyYXduKSAt
IGRyYXdDYWxsRmlyc3RWZXJ0ZXg7CisgCisgICAgICAgICBpbnQ2NF90IHdyaXRlT2Zmc2V0ID0K
Ky0gICAgICAgICAgICAoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSArIGRyYXdDYWxsVmVydGV4
T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0pIC8KKysgICAgICAgICAgICAob2Zm
c2V0RnJvbURlc2NyaXB0b3IgKyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNb
YnVmZmVySW5kZXhdKSAvCisgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc2l6ZW9m
KHVpbnQzMl90KSk7CisgCisgICAgICAgICBvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KHdyaXRlT2Zmc2V0KTsKKyAKKy0gICAgICAgIC8vIENoZWNrIGZvciBv
dmVyZmxvdy4KKy0gICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIG9mZnNl
dHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRlT2Zmc2V0KTsKKysgICAgICAgIC8vIEFzc2VydCBv
biBvdmVyZmxvdy4gIEZvciBub3csIHN1cHBvcnQgdHJhbnNmb3JtIGZlZWRiYWNrIHVwIHRvIDJH
Qi4KKysgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNl
dCk7CisgICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9W
ZXJ0ZXhBcnJheU10bC5oCitpbmRleCBjMmZiODQ2Li5mZTZiNWY3IDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCitAQCAtNDMsOCArNDMsOSBAQCBj
bGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMpOworIAorICAg
ICAvLyB2ZXJ0ZXhEZXNjQ2hhbmdlZCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1
dCB2YWx1ZSBpZiBpcyB0cnVlLCB3aWxsIGZvcmNlIG5ldworLSAgICAvLyBtdGw6OlZlcnRleERl
c2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25s
eSByZXR1cm5lZCB3aGVuIHRoZQorLSAgICAvLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkKKysgICAg
Ly8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBUaGlz
IHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZlIHNoYWRlcgorKyAgICAvLyBwcm9ncmFtIGlz
IGNoYW5nZWQuCisrICAgIC8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRo
ZSB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkuCisgICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFuZ2VkLAorQEAgLTUyLDExICs1MywyNCBA
QCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAKKyAgICAg
YW5nbGU6OlJlc3VsdCBnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBl
IGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0
aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpbmRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0KTsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5k
ZXhUeXBlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
ZXhCdWZmZXJDb3VudE91dCk7CisrCisrICAgIC8vIFVzZSB0byBlbXVsYXRlIGluc3RhbmNlZCBk
cmF3IGZvciBpbnN0YW5jZSA8aW5zdGFuY2VJZD4uCisrICAgIC8vIFRoZSB0eXBpY2FsIGNhbGwg
c2VxdWVuY2UgZm9yIGVtdWxhdGVkIGluc3RhbmNlIGRyYXcgaXM6CisrICAgIC8vIC0gc2V0dXBE
cmF3KCkKKysgICAgLy8gLSBkcmF3LgorKyAgICAvLyAtIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVw
KDEpCisrICAgIC8vIC0gZHJhdy4KKysgICAgLy8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChu
KQorKyAgICAvLyAtIGRyYXcuCisrICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoMCkK
KysgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0YW5jZUlkKTsKKyAKKyAgIHByaXZhdGU6Cisg
ICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4dCk7CitAQCAtNzIsMTUgKzg2LDE5IEBA
IGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAorIAorICAgICBh
bmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJD
b3VudE91dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2
ZU1vZGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpp
ZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyQ291bnRPdXQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQ
VShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCitAQCAtMTE3
LDcgKzEzNSwyMCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUlt
cGwKKyAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRlck10bCAqPiBtQ3VycmVudEFycmF5
QnVmZmVyczsKKyAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBsZVdlYWtCdWZmZXJIb2xkZXJNdGw+
IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CisgICAgIGdsOjpBdHRyaWJBcnJheTxzaXpl
X3Q+IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzOworKworKyAgICAvLyBTaXplIHRvIGJlIHVw
bG9hZGVkIGFzIGlubGluZSBjb25zdGFudCBkYXRhLiBVc2VkIGZvciBjbGllbnQgdmVydGV4IGF0
dHJpYnV0ZSdzIGRhdGEgdGhhdAorKyAgICAvLyBpcyBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBjYW4g
c2VuZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0YSBpbnN0ZWFkIG9mIHN0cmVhbWlu
ZworKyAgICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorKyAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzOworKyAgICAvLyBBcnJheSBvZiBob3N0IGJ1
ZmZlcnMgc3RvcmluZyBjb252ZXJ0ZWQgZGF0YSBmb3IgY2xpZW50IGF0dHJpYnV0ZXMgdGhhdCBh
cmUgc21hbGwgZW5vdWdoLgorKyAgICBnbDo6QXR0cmliQXJyYXk8YW5nbGU6Ok1lbW9yeUJ1ZmZl
cj4gbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzOworKyAgICBnbDo6QXR0cmliQXJyYXk8Y29u
c3QgdWludDhfdCAqPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzOworKyAgICAvLyBN
YXggc2l6ZSBvZiBpbmxpbmUgY29uc3RhbnQgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGZvciBjbGll
bnQgdmVydGV4IGF0dHJpYnV0ZS4KKysgICAgc2l6ZV90IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgLy8gU3RyaWRlIHBlciB2ZXJ0ZXggYXR0cmlidXRlCisgICAgIGdsOjpBdHRyaWJBcnJh
eTxHTHVpbnQ+IG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzOworKyAgICAvLyBGb3JtYXQgcGVy
IHZlcnRleCBhdHRyaWJ1dGUKKyAgICAgZ2w6OkF0dHJpYkFycmF5PGNvbnN0IG10bDo6VmVydGV4
Rm9ybWF0ICo+IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzOworIAorICAgICBjb25zdCBtdGw6
OlZlcnRleEZvcm1hdCAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKK0BAIC0xMjcsNiArMTU4
LDggQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCisgICAg
IG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY1ZlcnRleERhdGE7CisgICAgIG10bDo6QnVmZmVyUG9v
bCBtRHluYW1pY0luZGV4RGF0YTsKKyAKKysgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmliczsKKysKKyAgICAgYm9vbCBtVmVydGV4QXJyYXlEaXJ0eSA9IHRy
dWU7CisgfTsKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwubW0KK2luZGV4IGNkOTYxYzEuLjAyMTk1ZDggMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQorQEAgLTgsNiAr
OCw5IEBACisgLy8KKyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4
QXJyYXlNdGwuaCIKKysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKK0BAIC03NiwxNSArNzksMTUgQEAgc2l6ZV90
IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5
cGUsIHNpemVfdCBpbmRleEMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90ICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5kZXhDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4Q291bnRPdXQpCisgeworICAgICBkeW5hbWljQnVmZmVyLT5yZWxl
YXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOworLQorICAgICBjb25zdCBzaXplX3QgYW1v
dW50ID0gR2V0SW5kZXhDb252ZXJ0ZWRCdWZmZXJTaXplKGluZGV4VHlwZSwgaW5kZXhDb3VudCk7
CisgICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRyOworLQorICAgICBBTkdMRV9UUlko
CisgICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShjb250ZXh0TXRsLCBhbW91bnQsICZk
c3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxscHRyKSk7CisgCitAQCAtMTIxLDYg
KzEyNCw3IEBAIHNpemVfdCBHZXRJbmRleENvbnZlcnRlZEJ1ZmZlclNpemUoZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlLCBzaXplX3QgaW5kZXhDCisgICAgIHsKKyAgICAgICAgIG1lbWNw
eShkc3QsIHNvdXJjZVBvaW50ZXIsIGFtb3VudCk7CisgICAgIH0KKysgICAgKmluZGV4Q291bnRP
dXQgPSBpbmRleENvdW50OworICAgICBBTkdMRV9UUlkoZHluYW1pY0J1ZmZlci0+Y29tbWl0KGNv
bnRleHRNdGwpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAg
LTIwOCw2ICsyMTIsMzAgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91
dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgIGZvcm1hdCA9
ICZtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0OworICAgICB9CisgCisrICAgIGZvciAoc2l6ZV90
ICZpbmxpbmVEYXRhU2l6ZSA6IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXMpCisrICAgIHsK
KysgICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKysgICAgfQorKworKyAgICBmb3IgKGFuZ2xl
OjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5IDogbUNvbnZlcnRlZENsaWVudFNt
YWxsQXJyYXlzKQorKyAgICB7CisrICAgICAgICBjb252ZXJ0ZWRDbGllbnRBcnJheS5jbGVhcigp
OworKyAgICB9CisrCisrICAgIGZvciAoY29uc3QgdWludDhfdCAqJmNsaWVudFBvaW50ZXIgOiBt
Q3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorKyAgICB7CisrICAgICAgICBjbGllbnRQ
b2ludGVyID0gbnVsbHB0cjsKKysgICAgfQorKworKyAgICBpZiAoY29udGV4dC0+Z2V0RGlzcGxh
eSgpLT5nZXRGZWF0dXJlcygpLmFsbG93SW5saW5lQ29uc3RWZXJ0ZXhEYXRhLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9IG10bDo6a0lubGluZUNvbnN0RGF0
YU1heFNpemU7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtSW5saW5lRGF0
YU1heFNpemUgPSAwOworKyAgICB9CisrCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsK
KyB9CisgCitAQCAtMzE1LDIyICszNDMsMjggQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyB9Cisg
CisgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB0aGUgaW5w
dXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKKy0vLyBtdGw6OlZlcnRleERlc2Mg
dG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25seSBy
ZXR1cm5lZCB3aGVuIHRoZQorLS8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorKy8vIG10bDo6VmVy
dGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhpcyB0eXBpY2FsbHkg
aGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKysvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisrLy8g
T3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlIHZlcnRleCBhcnJheSBpcyBk
aXJ0eS4KKyBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VmVydGV4RGVzYyAq
dmVydGV4RGVzY091dCkKKyB7CisrICAgIC8vIE5PVEUoaHFsZSk6IGNvbnNpZGVyIG9ubHkgdXBk
YXRpbmcgZGlydHkgYXR0cmlidXRlcworICAgICBib29sIGRpcnR5ID0gbVZlcnRleEFycmF5RGly
dHkgfHwgKnZlcnRleERlc2NDaGFuZ2VkOworIAorICAgICBpZiAoZGlydHkpCisgICAgIHsKKysg
ICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
KysKKyAgICAgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gZmFsc2U7CisrICAgICAgICBtRW11bGF0
ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKKyAKKy0gICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkt
PmdldFN0YXRlKCk7CisrICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJvZ3JhbUFjdGl2ZUF0dHJpYnNNYXNr
ID0KKy0gICAgICAgICAgICBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbSgpLT5nZXRF
eGVjdXRhYmxlKCkuZ2V0QWN0aXZlQXR0cmliTG9jYXRpb25zTWFzaygpOworKyAgICAgICAgICAg
IGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKysgICAgICAgIGNv
bnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUo
KS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CisgCisgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5nZXRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QmluZGluZz4gJmJp
bmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOworQEAgLTM2MCw4ICszOTQsNyBA
QCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVm
ZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5k
aW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisgCisgICAgICAg
ICAgICAgYm9vbCBhdHRyaWJFbmFibGVkID0gYXR0cmliLmVuYWJsZWQ7CistICAgICAgICAgICAg
aWYgKGF0dHJpYkVuYWJsZWQgJiYKKy0gICAgICAgICAgICAgICAgKCFtQ3VycmVudEFycmF5QnVm
ZmVyc1t2XSB8fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSkp
CisrICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYgIW1DdXJyZW50QXJyYXlCdWZmZXJz
W3ZdICYmICFtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW3ZdKQorICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBpdCB0byBhdm9pZCBjcmFzaC4KKyAgICAg
ICAgICAgICAgICAgYXR0cmliRW5hYmxlZCA9IGZhbHNlOworQEAgLTM2OSwzMyArNDAyLDMwIEBA
IGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZm
ZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgICAgICAgICAgICAgaWYgKCFhdHRyaWJFbmFibGVk
KQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gVXNlIGRlZmF1bHQgYXR0cmli
dXRlCisrICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5idWZmZXJJbmRleCA9IG10
bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4OworKyAgICAgICAgICAgICAgICBkZXNjLmF0
dHJpYnV0ZXNbdl0ub2Zmc2V0ICAgICAgPSB2ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7
CisgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmluZCB0aGUgYXR0cmlidXRlIGhhdmluZyB0
aGUgZXhhY3QgYmluZGluZyBsb2NhdGlvbiA9IHYgaW4gdGhlIHByb2dyYW0KKyAgICAgICAgICAg
ICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmlldmUgaXRzIGNvcmVzcG9uZGluZyBkYXRhIHR5
cGU6CisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJs
ZT4gJnByb2dyYW1JbnB1dHMgPQorICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbVN0YXRlLmdl
dFByb2dyYW1JbnB1dHMoKTsKKyAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRl
clZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmliSW5mb0l0ZSA9IHN0ZDo6ZmluZF9pZigK
KyAgICAgICAgICAgICAgICAgICAgIGJlZ2luKHByb2dyYW1JbnB1dHMpLCBlbmQocHJvZ3JhbUlu
cHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUgJnN2KSB7CistICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikgPT0g
djsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYg
PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9jYXRpb24pICsKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmFyaWFibGVBdHRyaWJ1dGVDb3VudChzdi50eXBl
KTsKKyAgICAgICAgICAgICAgICAgICAgIH0pOworIAorLSAgICAgICAgICAgICAgICBpZiAoYXR0
cmliSW5mb0l0ZSA9PSBlbmQocHJvZ3JhbUlucHV0cykpCisrICAgICAgICAgICAgICAgIEFTU0VS
VChhdHRyaWJJbmZvSXRlICE9IGVuZChwcm9ncmFtSW5wdXRzKSk7CisrICAgICAgICAgICAgICAg
IHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShhdHRyaWJJbmZvSXRlLT50eXBlKSkK
KyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkg
dGhpcyBpcyBhcnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAwLgorLSAgICAgICAgICAgICAgICAg
ICAgLy8gQWxyZWFkeSBoYW5kbGVkIHdoZW4gZW5jb3VudGVyIGZpcnN0IGVsZW1lbnQuCistICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAg
ICAgICAgICAgICB1aW50MzJfdCBhcnJheVNpemU7CistICAgICAgICAgICAgICAgIE1UTFZlcnRl
eEZvcm1hdCBmb3JtYXQ7CistCistICAgICAgICAgICAgICAgIGdldFZlcnRleEF0dHJpYkZvcm1h
dEFuZEFycmF5U2l6ZSgqYXR0cmliSW5mb0l0ZSwgJmZvcm1hdCwgJmFycmF5U2l6ZSk7CistCist
ICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgdmFJZHggPSB2OyB2YUlkeCA8IHYgKyBhcnJh
eVNpemU7ICsrdmFJZHgpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleDsKKy0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlk
eF0ub2Zmc2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1bHRBdHRyaWJ1dGVTaXplOworLSAg
ICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZhSWR4XS5mb3JtYXQgICAgICA9IGZv
cm1hdDsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEludFZlcnRleEZv
cm1hdC5tZXRhbEZvcm1hdDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdFVJbnRWZXJ0ZXhGb3Jt
YXQubWV0YWxGb3JtYXQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0
cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UK
K0BAIC00MTcsMTcgKzQ0NywzNSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVy
TGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAg
ICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0gTVRMVmVydGV4
U3RlcEZ1bmN0aW9uUGVyVmVydGV4OworICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRz
W2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMTsKKyAgICAgICAgICAgICAgICAgfQorLSAgICAg
ICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRleHRNdGwtPmdl
dERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFi
bGVkKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91
dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25QZXJJbnN0
YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBS
YXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigpOworICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKysgICAgICAgICAgICAgICAgICAgIG1F
bXVsYXRlZEluc3RhbmNlQXR0cmlicy5wdXNoX2JhY2sodik7CisrICAgICAgICAgICAgICAgICAg
ICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVu
Y3Rpb25Db25zdGFudDsKKysgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJ
ZHhdLnN0ZXBSYXRlICAgICA9IDA7CisrICAgICAgICAgICAgICAgIH0KKysKKyAgICAgICAgICAg
ICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RyaWRlID0gbUN1cnJlbnRBcnJheUJ1ZmZl
clN0cmlkZXNbdl07CisgCisrICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVy
c1t2XSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY21kRW5jb2Rl
ci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVm
ZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm8gYnVmZmVyIHNwZWNpZmllZCwgdXNlIHRoZSBjbGllbnQgbWVtb3J5IGRpcmVjdGx5IGFzIGlu
bGluZSBjb25zdGFudCBkYXRhCisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRB
cnJheUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAg
ICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1cnJlbnRBcnJheUlubGlu
ZURhdGFQb2ludGVyc1t2XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbdl0sIGJ1ZmZlcklkeCk7Cisr
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisrICAgICAgICB9ICAvLyBmb3IgKHYp
CisgICAgIH0KKyAKKyAgICAgKnZlcnRleERlc2NDaGFuZ2VkID0gZGlydHk7CitAQCAtNDM1LDYg
KzQ4Myw0MiBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6
VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgfQorIAorK3ZvaWQgVmVydGV4QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VJ
ZCkKKyt7CisrCisrICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhBdHRyaWJ1dGU+ICZh
dHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OlZlcnRleEJpbmRpbmc+ICZiaW5kaW5ncyAgPSBtU3RhdGUuZ2V0VmVydGV4Qmlu
ZGluZ3MoKTsKKysKKysgICAgZm9yICh1aW50MzJfdCBpbnN0YW5jZUF0dHJpYklkeCA6IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmlicykKKysgICAgeworKyAgICAgICAgdWludDMyX3QgYnVmZmVySWR4
ICAgICAgICAgICAgICAgPSBtdGw6OmtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGluc3RhbmNlQXR0
cmliSWR4OworKyAgICAgICAgY29uc3QgYXV0byAmYXR0cmliICAgICAgICAgICAgICAgPSBhdHRy
aWJzW2luc3RhbmNlQXR0cmliSWR4XTsKKysgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5n
ICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisrICAgICAgICB1aW50
MzJfdCBvZmZzZXQgPQorKyAgICAgICAgICAgIGluc3RhbmNlSWQgLyBiaW5kaW5nLmdldERpdmlz
b3IoKSAqIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2luc3RhbmNlQXR0cmliSWR4XTsKKysg
ICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0pCisrICAg
ICAgICB7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtQ3Vy
cmVudEFycmF5QnVmZmVyT2Zmc2V0c1tpbnN0YW5jZUF0dHJpYklkeF0pOworKworKyAgICAgICAg
ICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0
YW5jZUF0dHJpYklkeF0tPmdldEN1cnJlbnRCdWZmZXIoKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBidWZmZXJJZHgpOworKyAgICAgICAgfQorKyAg
ICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIE5vIGJ1ZmZlciBzcGVjaWZp
ZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0
YQorKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3Rh
bmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ5dGVz
KG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5zdGFuY2VBdHRyaWJJZHhdICsgb2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QXJy
YXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIC0gb2Zmc2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkeCk7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBkYXRlQ2xpZW50
QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0VmVydGV4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB2ZXJ0
ZXhPckluZGV4Q291bnQsCitAQCAtNDYzLDEwICs1NDcsNyBAQCBpbmxpbmUgdm9pZCBTZXREZWZh
dWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0
KQorICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJpbmRpbmcgJmJpbmRpbmcgID0gYmluZGluZ3Nb
YXR0cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgICBBU1NFUlQoYXR0cmliLmVuYWJsZWQgJiYg
YmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRyKTsKKyAKKy0gICAgICAgIEdMdWlu
dCBzdHJpZGU7CistICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0
ID0KKy0gICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0
dHJpYi5mb3JtYXQtPmlkLCAmc3RyaWRlKTsKKy0KKysgICAgICAgIC8vIFNvdXJjZSBjbGllbnQg
bWVtb3J5IHBvaW50ZXIKKyAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOworICAgICAgICAgQVNTRVJUKHNyYyk7
CisgCitAQCAtNDg0LDIyICs1NjUsNzYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1
ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAg
ICAgICBzdGFydEVsZW1lbnQgPSAwOworICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IFVuc2ln
bmVkQ2VpbERpdmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5nLmdldERpdmlzb3IoKSk7CisgICAg
ICAgICB9CisrICAgICAgICBzaXplX3QgYnl0ZXNJbnRlbmRlZFRvVXNlID0gKHN0YXJ0RWxlbWVu
dCArIGVsZW1lbnRDb3VudCkgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworKworKyAgICAgICAgY29u
c3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRleHRNdGwtPmdldFZlcnRleEZvcm1h
dChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworKyAgICAgICAgYm9vbCBuZWVkU3RyZWFtaW5n
ICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAhPSBmb3JtYXQuaW50ZW5kZWRG
b3JtYXRJZCB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3Ry
aWRlKCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDAgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpIDwgZm9y
bWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgfHwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBEYXRhIHdpbGwgYmUgdXBsb2FkZWQgZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEK
KysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAg
ICA9IG51bGxwdHI7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVy
c1thdHRyaWJJbmRleF0gPSBzcmM7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURh
dGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc0ludGVuZGVkVG9Vc2U7CisrICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSAgICAgID0g
JmZvcm1hdDsKKysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJ
bmRleF0gICAgICA9IGJpbmRpbmcuZ2V0U3RyaWRlKCk7CisrICAgICAgICB9CisrICAgICAgICBl
bHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgR0x1aW50IGNvbnZlcnRlZFN0cmlkZTsKKysg
ICAgICAgICAgICAvLyBOZWVkIHRvIHN0cmVhbSB0aGUgY2xpZW50IHZlcnRleCBkYXRhIHRvIGEg
YnVmZmVyLgorKyAgICAgICAgICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZzdHJlYW1Gb3Jt
YXQgPQorKyAgICAgICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRN
dGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmY29udmVydGVkU3RyaWRlKTsKKysKKyAgICAgICAgICAg
ICAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50IHNvIGlu
ZGV4aW5nIHdpbGwgd29yay4gIElmIHdlIGRvbid0CisgICAgICAgICAgICAgLy8gc3RhcnQgYXQg
emVybyBhbGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCisgICAgICAgICAgICAgLy8gT25seSBl
bGVtZW50Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNv
IHRoYXQgaXMgYWxsIHdlIGNvcHkuCistICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0g
KHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6
ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICogY29u
dmVydGVkU3RyaWRlOworICAgICAgICAgICAgIHNyYyArPSBzdGFydEVsZW1lbnQgKiBiaW5kaW5n
LmdldFN0cmlkZSgpOworLSAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBjb252ZXJ0ZWRTdHJpZGU7CisgCistICAgICAgICBtRHluYW1pY1ZlcnRleERhdGEudXBkYXRl
QWxpZ25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBp
eGVsQnl0ZXMpOworLSAgICAgICAgQU5HTEVfVFJZKFN0cmVhbVZlcnRleERhdGEoCistICAgICAg
ICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2Nh
dGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKKy0gICAgICAgICAgICBiaW5kaW5nLmdldFN0
cmlkZSgpLCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAorLSAgICAgICAgICAgICZt
Q29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwgJm1DdXJyZW50QXJyYXlC
dWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSkpOworKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlC
dWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1Gb3JtYXQ7CisrICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gY29udmVydGVkU3RyaWRl
OworKworKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2NhdGUgPD0gbUlubGluZURhdGFNYXhT
aXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMg
c21hbGwgZW5vdWdoLCB1c2UgaG9zdCBtZW1vcnkgaW5zdGVhZCBvZiBjcmVhdGluZyBHUFUgYnVm
ZmVyLiBUbworKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0
byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgorKyAgICAgICAgICAgICAgICBhbmds
ZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJheSA9CisrICAgICAgICAgICAgICAg
ICAgICBtQ29udmVydGVkQ2xpZW50U21hbGxBcnJheXNbYXR0cmliSW5kZXhdOworKyAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVydGVkQ2xpZW50QXJyYXkuc2l6ZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBTkdMRV9DSEVDS19H
TF9BTExPQyhjb250ZXh0TXRsLCBjb252ZXJ0ZWRDbGllbnRBcnJheS5yZXNpemUoYnl0ZXNUb0Fs
bG9jYXRlKSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24pOworKyAgICAgICAgICAgICAgICBzdHJl
YW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmluZGluZy5nZXRTdHJpZGUoKSwgZWxl
bWVudENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRlc3RPZmZzZXQpOworKworKyAgICAg
ICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRl
cnNbYXR0cmliSW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpOworKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2F0dHJpYkluZGV4XSAgICA9IGJ5
dGVzVG9BbGxvY2F0ZTsKKysgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNl
dHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBl
bHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBTdHJlYW0gdGhlIGNsaWVu
dCBkYXRhIHRvIGEgR1BVIGJ1ZmZlci4gU3luY2hyb25pemF0aW9uIG1pZ2h0IGhhcHBlbiBpZiBi
dWZmZXIgaXMKKysgICAgICAgICAgICAgICAgLy8gaW4gdXNlLgorKyAgICAgICAgICAgICAgICBt
RHluYW1pY1ZlcnRleERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LmFj
dHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcyk7CisrICAgICAgICAgICAgICAgIEFOR0xFX1RS
WShTdHJlYW1WZXJ0ZXhEYXRhKGNvbnRleHRNdGwsICZtRHluYW1pY1ZlcnRleERhdGEsIHNyYywg
Ynl0ZXNUb0FsbG9jYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsIGJpbmRpbmcuZ2V0U3RyaWRlKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0
ZXhMb2FkRnVuY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdXJyZW50QXJyYXlCdWZmZXJP
ZmZzZXRzW2F0dHJpYkluZGV4XSkpOworIAorICAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5
QnVmZmVyc1thdHRyaWJJbmRleF0gPSAmbUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRy
aWJJbmRleF07CistICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRl
eF0gPSAmdmVydGV4Rm9ybWF0OworLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNb
YXR0cmliSW5kZXhdID0gc3RyaWRlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gIC8vIGlm
IChuZWVkU3RyZWFtaW5nKQorICAgICB9CisgCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1
ZTsKK0BAIC01MjYsNyArNjYxLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZl
ckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgICAg
ICBib29sIG5lZWRDb252ZXJzaW9uID0KKyAgICAgICAgICAgICAgICAgZm9ybWF0LmFjdHVhbEZv
cm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8CisgICAgICAgICAgICAgICAgIChi
aW5kaW5nLmdldE9mZnNldCgpICUgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRl
cykgIT0gMCB8fAorLSAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIG10bDo6
a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8fAorKyAgICAgICAgICAg
ICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAg
KGJpbmRpbmcuZ2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5waXhlbEJ5
dGVzKSB8fAorICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSAlIG10bDo6a1Zl
cnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMDsKKyAKK0BAIC01NjMsMTkgKzY5
OCwyMSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVy
dGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorIAorIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNU
eXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aWR4QnVmZmVyT2Zmc2V0T3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
KmluZGV4VHlwZU91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBjb25zdCBnbDo6QnVm
ZmVyICpnbEVsZW1lbnRBcnJheUJ1ZmZlciA9IGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7CisgCisgICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgPSByZWludGVycHJldF9jYXN0
PHNpemVfdD4oaW5kaWNlcyk7CisgICAgIGlmICghZ2xFbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
IHsKKy0gICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29udGV4
dCwgdHlwZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAg
ICAgICBBTkdMRV9UUlkoc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUs
IG1vZGUsIGNvdW50LCBpbmRpY2VzLCBpZHhCdWZmZXJPdXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZm
ZXJDb3VudE91dCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTU4Myw4ICs3MjAs
OCBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4
QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb252ZXJ0ZWRPZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCkgIT0g
MDsKKyAgICAgICAgIGlmIChuZWVkQ29udmVyc2lvbikKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIGNvbnZlcnRlZE9m
ZnNldCwgaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZl
cnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2RlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1
ZmZlck91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1
ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICAgICAgfQorICAgICAg
ICAgZWxzZQorICAgICAgICAgeworQEAgLTU5Miw2ICs3MjksNyBAQCBpbmxpbmUgdm9pZCBTZXRE
ZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5
b3V0KQorICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0gbXRsOjpHZXRJbXBsKGds
RWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAqaWR4QnVmZmVyT3V0ICAgICAgICA9
IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOworICAgICAgICAgICAgICppZHhCdWZmZXJP
ZmZzZXRPdXQgID0gY29udmVydGVkT2Zmc2V0OworKyAgICAgICAgICAgICppbmRleEJ1ZmZlckNv
dW50T3V0ID0gY291bnQ7CisgICAgICAgICB9CisgICAgIH0KKyAKK0BAIC02MDcsOSArNzQ1LDEx
IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhC
dWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10
bDo6Y29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYg
KmlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBzaXplX3Qgb2Zmc2V0TW9kdWxvID0g
b2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQ7CisgICAgIEFTU0VSVChv
ZmZzZXRNb2R1bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVu
c2lnbmVkQnl0ZSk7CitAQCAtNjM4LDE1ICs3NzgsMTUgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgfQorIAorICAgICBzaXplX3QgaW5kZXhDb3VudCA9IEdldEluZGV4Q291bnQoaWR4QnVm
ZmVyLCBvZmZzZXRNb2R1bG8sIGluZGV4VHlwZSk7CistCistICAgIGlmICghY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYm
CistICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKQorKyAgICBp
ZiAoKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQ
YXNzSXNDaGVhcC5lbmFibGVkICYmCisrICAgICAgICAgY29udGV4dE10bC0+Z2V0UmVuZGVyQ29t
bWFuZEVuY29kZXIoKSkpCisgICAgIHsKKyAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB1c2UgR1BV
IHRvIGNvbnZlcnQgd2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KKyAg
ICAgICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJmNvbnZlcnNpb24t
PmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlci0+Z2V0
Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBvZmZzZXRNb2R1bG8sCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgZ2xTdGF0
ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIsICZjb252ZXJzaW9uLT5jb252
ZXJ0ZWRPZmZzZXQpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhU
eXBlLCBpbmRleENvdW50LCBtb2RlLCBnbFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZl
cnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICB9CisgICAg
IGVsc2UKKyAgICAgeworQEAgLTY5NSwxOCArODM1LDIwIEBAIGlubGluZSB2b2lkIFNldERlZmF1
bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQp
CisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4
QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhC
dWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBB
U1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSA9PSBudWxscHRyKTsKKyAg
ICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAKKyAg
ICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihzb3VyY2VQb2lu
dGVyKTsKKy0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFt
aWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwKKysgICAgQU5HTEVf
VFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0Rh
dGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQoKSwg
aWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9m
ZnNldE91dCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNl
dE91dCwgaWR4QnVmZmVyQ291bnRPdXQpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworIH0KK0BAIC03NDQsNyArODg2LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgLy8gSGFzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2Ug
bGFzdCBjb252ZXJzaW9uPworICAgICBpZiAoIWNvbnZlcnNpb24tPmRpcnR5KQorICAgICB7Cist
ICAgICAgICAvLyBCdWZmZXIncyBkYXRhIGhhc24ndCBiZWVuIGNoYW5nZWQuIFJlLXVzZSBsYXN0
IGNvbnZlcnRlZCByZXN1bHRzCisgICAgICAgICBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJz
W2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyKTsKKyAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSA9IGNvbnZlcnNpb24tPmNv
bnZlcnRlZE9mZnNldDsKKyAKK0BAIC03NjEsNyArOTAyLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVm
YXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91
dCkKKyAgICAgYm9vbCBjYW5FeHBhbmRDb21wb25lbnRzT25HUFUgPSBjb252ZXJ0ZWRGb3JtYXQu
YWN0dWFsU2FtZUdMVHlwZTsKKyAKKyAgICAgaWYgKGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1h
bmRFbmNvZGVyKCkgJiYKKy0gICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYKKysgICAgICAgICFjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5l
bmFibGVkICYmCisgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJl
cygpLmhhc0V4cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQorICAgICB7CisgICAgICAgICAvLyBD
YW5ub3QgdXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgcmVu
ZGVyIHBhc3MuCitAQCAtNzkyLDYgKzkzMyw5IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0
ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgICAg
IGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRl
cnNbYXR0cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsKKyAgICAgY29udmVyc2lvbi0+Y29u
dmVydGVkT2Zmc2V0ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdOwor
IAorKyAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworKyAgICBjb252ZXJzaW9uLT5kaXJ0
eSA9IGZhbHNlOworKworICNpZm5kZWYgTkRFQlVHCisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
CisgICAgIHsKK0BAIC04MDEsOSArOTQ1LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAg
fQorICNlbmRpZgorIAorLSAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworLSAgICBjb252
ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAoraW5kZXggZmEwNzNhZS4uMTNhZmRjMyAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5j
ZS5tZAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rp
c3RhbmNlLm1kCitAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNpZGUuIFdyaXRpbmcgdG8gYGdsX0Ns
aXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdub3JlZCBpZiBpdCBpcyBkCisgZG9l
c24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0byBkaXNhYmxlL2VuYWJsZSB0aGUgd3JpdGlu
ZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9kaXN0YW5jZWAKKyB2YXJpYWJsZSBhdXRvbWF0
aWNhbGx5IGVuYWJsZXMgaXQuCisgCistVG8gZW11bGF0ZSB0aGlzIGVuYWJsaW5nL2Rpc2FibGlu
ZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEgc2ltaWxhciBpbXBsZW1lbnRhdGlvbiBh
cyB3aGF0CistW1Z1bGthbiBiYWNrLWVuZCBkb2VzXSguLi8uLi92dWxrYW4vZG9jL0FQUExFX2Ns
aXBfZGlzdGFuY2UubWQpLiBQbGVhc2UgcmVmZXIgdG8gdGhhdCBkb2N1bWVudCBmb3IKKy1tb3Jl
IGRldGFpbHMuCisrVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxpbmcvZGlzYWJsaW5nIEFQSSBpbiBN
ZXRhbCBiYWNrLWVuZDoKKysKKystIFRoZSBzaGFkZXIgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUg
ZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50IHRvIGFuIGFzc2lnbm1lbnQgdG8K
KysgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUuCisrLSBBIHNwZWNpYWwgZHJpdmVy
IHVuaWZvcm0gdmFyaWFibGUgYGNsaXBEaXN0YW5jZXNFbmFibGVkYCB3aWxsIGNvbnRhaW4gb25l
IGJpdCBmbGFnIGZvciBlYWNoCisrICBlbmFibGVkIGBnbF9DbGlwRGlzdGFuY2VbaV1gLiBUaGlz
IHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlwRGlzdGFuY2VgIGluZGljZXMuCisr
LSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBlbmFibGVkIGBnbF9DbGlwRGlzdGFu
Y2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3RpdmUKKysgIHZhbHVlIGZyb20gYEFO
R0xFQ2xpcERpc3RhbmNlW2ldYC4gT24gdGhlIG90aGVyIGhhbmQsIHRob3NlIGRpc2FibGVkIGVs
ZW1lbnRzIHdpbGwgYmUgYXNzaWduZWQKKysgIHplcm8gdmFsdWUuIFRoaXMgc3RlcCBpcyBkZXNj
cmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorKyAgICBgYGAKKysgICAgZm9yIChpbnQgaW5k
ZXggOiBhcnJheWxlbmd0aChnbF9DbGlwRGlzdGFuY2UpKQorKyAgICB7CisrICAgICAgICBpZiAo
QU5HTEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAmICgweDEgPDwgaW5kZXgpKQorKyAg
ICAgICAgICAgIGdsX0NsaXBEaXN0YW5jZVtpbmRleF0gPSBBTkdMRUNsaXBEaXN0YW5jZVtpbmRl
eF07CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9
IDA7CisrICAgIH0KKysgICAgYGBgCisrLSBTb21lIG1pbm9yIG9wdGltaXphdGlvbnM6CisrICAg
IC0gT25seSB0aG9zZSBpbmRpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgaW4gdGhlIG9yaWdpbmFs
IGNvZGUgd2lsbCBiZSB1c2VkIGluIGlmIGVsc2UgYmxvY2sKKysgICAgICBhYm92ZS4KKysgICAg
LSBUaG9zZSBlbGVtZW50cyB3aG9zZSBpbmRleCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2lu
YWwgY29kZSB3aWxsIGJlIHplcm9pc2VkIGluc3RlYWQuCisrICAgIC0gSWYgdGhlIG9yaWdpbmFs
IGNvZGUgb25seSB1c2VzIHVwIHRvIGFuIGluZGV4IDwgYGdsX01heENsaXBEaXN0YW5jZXNgLCB0
aGVuCisrICAgICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1vc3QgYGluZGV4KzFgIGl0ZXJhdGlv
bnMuIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBub3QgYmVpbmcKKysgICAgICBpbnRl
Z3JhbCBjb25zdGFudCB2YWx1ZSBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlbiBkZWNsYXJlZCBz
aXplIG9mIGBnbF9DbGlwRGlzdGFuY2VgCisrICAgICAgd2lsbCBiZSB0aGUgbG9vcCBzaXplLgor
KyAgICAtIEZpbmFsbHksIGlmIHRoZSBvcmlnaW5hbCBjb2RlIGRvZXNuJ3QgdXNlIGBnbF9DbGlw
RGlzdGFuY2VgLCB0aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUgd2lsbCBiZQorKyAgICAgIG9taXR0
ZWQuCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKK2luZGV4IDNjZTE0MmUuLjZl
YWI0MDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9m
b3JtYXRfdGFibGUucHkKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRs
X2Zvcm1hdF90YWJsZS5weQorQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNlIG10bAorIHZvaWQg
Rm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBp
bnRlbmRlZEZvcm1hdElkXykKKyB7eworICAgICB0aGlzLT5pbnRlbmRlZEZvcm1hdElkID0gaW50
ZW5kZWRGb3JtYXRJZF87CistCisgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNw
bGF5LT5nZXRNZXRhbERldmljZSgpOworIAorICAgICAvLyBBY3R1YWwgY29udmVyc2lvbgorQEAg
LTEwOSw2ICsxMDgsMjMgQEAgaW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTIgPSAiIiIKKyAg
ICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFsbGJh
Y2t9OworICAgICAgICAgICAgIH19CisgIiIiCisrI0QxNiBpcyBmdWxseSBzdXBwb3J0ZWQgb24g
IEFwcGxlMysuIEhvd2V2ZXIsIG9uCisrI3ByZXZpb3VzICB2ZXJzaW9ucyBvZiBBcHBsZSBoYXJk
d2FyZSwgc29tZSBvcGVyYXRpb25zIGNhbiBjYXVzZQorKyN1bmRlZmluZWQgYmVoYXZpb3IuCisr
aW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTMgPSAiIiIKKysgICAgICAgICAgICBpZiAoW21l
dGFsRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlM10pCisrICAgICAgICAg
ICAge3sKKysgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgPSB7bXRsX2Zvcm1hdH07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElE
Ojp7YWN0dWFsX2FuZ2xlX2Zvcm1hdH07CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5j
dGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKysgICAgICAgICAgICB9fQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7eworKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9
IHttdGxfZm9ybWF0X2ZhbGxiYWNrfTsKKysgICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OnthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrfTsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFs
bGJhY2t9OworKyAgICAgICAgICAgIH19CisrIiIiCisgCisgY2FzZV9pbWFnZV9mb3JtYXRfdGVt
cGxhdGUxID0gIiIiICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6e2FuZ2xlX2Zvcm1hdH06
CisgICAgICAgICAgICAge2ltYWdlX2Zvcm1hdF9hc3NpZ259CitAQCAtMjEzLDYgKzIyOSw4IEBA
IGRlZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1h
dCwgZHN0X2Zvcm1hdCk6CisgCisgCisgIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0
Y2ggY2FzZSAoZ2VuZXJpYyBjYXNlKQorKworKworIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9j
YXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxf
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbl9nZW5fZnVuYyk6Cisg
ICAgIGlmIGlzaW5zdGFuY2UoYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBkaWN0KToKK0BAIC0y
NTUsNiArMjczLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0
LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KKyAKKyAKKyAjIEdlbmVyYXRl
IGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKysKKysKKyBkZWYg
Z2VuX2ltYWdlX21hcF9zd2l0Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZV90b19tdGxfbWFwKToKKyAKK0BAIC0yNzAsNiArMjkwLDggQEAgZGVm
IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2Fu
Z2xlX2Zvcm1hdF9pbmZvLCBhbmcKKyAKKyAKKyAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9u
IHN3aXRjaCBjYXNlIChNYWMgY2FzZSkKKysKKysKKyBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
bWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19tdGxfbWFw
LCBtYWNfZmFsbGJhY2tzKToKKyAgICAgZ2xfZm9ybWF0ID0gYW5nbGVfdG9fZ2xbYW5nbGVfZm9y
bWF0XQorQEAgLTMwMSwxMSArMzIzLDQzIEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNf
Y2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9mb3JtYXRfYXNzaWduX2NvZGUp
CisgCisgCisrZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFuZ2xlX2Zvcm1hdCwg
YWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fbXRsX21hcCwgaW9zX2ZhbGxiYWNrcyk6CisrICAg
IGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KKysKKysgICAgZGVmIGdlbl9m
b3JtYXRfYXNzaWduX2NvZGUoYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fbXRsX21hcCk6
CisrICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlvc19mYWxsYmFja3M6CisrICAg
ICAgICAgICAgIyBUaGlzIGZvcm1hdCAoRGVwdGgxNlVuaWZvcm0pIHJlcXVpcmVzIGZhbGxiYWNr
IHdoZW4gaU9TIGhhcmR3YXJlIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgZGVwdGgxNi4KKysgICAg
ICAgICAgICAjIEZhbGxiYWNrIGZvcm1hdDoKKysgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9y
bWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVfZm9ybWF0XQorKyAgICAg
ICAgICAgICMgcmV0dXJuIGlmIGVsc2UgYmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuIGltYWdl
X2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUzLmZvcm1hdCgKKysgICAgICAgICAgICAgICAgYWN0dWFs
X2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorKyAgICAgICAgICAgICAgICBtdGxf
Zm9ybWF0PWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0sCisrICAgICAgICAg
ICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdldF9pbnRlcm5hbF9mb3Jt
YXRfaW5pdGlhbGl6ZXIoCisrICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQpLAorKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrPWFjdHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2ssCisrICAgICAgICAgICAgICAgIG10bF9m
b3JtYXRfZmFsbGJhY2s9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrXSwKKysgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmdsZV9mb3Jt
YXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKysgICAgICAgICAgICAg
ICAgICAgIGdsX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaykpCisrICAgICAg
ICBlbHNlOgorKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMS5mb3JtYXQoCisrICAgICAg
ICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3JtYXQ9YWN0dWFsX2FuZ2xlX2Zvcm1hdCwKKysgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorKyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5n
ZXRfaW50ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorKyAgICAgICAgICAgICAgICAgICAgZ2xf
Zm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KSkKKysKKysgICAgcmV0dXJuIGdlbl9pbWFnZV9t
YXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX210bF9tYXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bl9mb3JtYXRfYXNzaWduX2NvZGUpCisrCisrCisgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX3N0
cmluZyhpbWFnZV90YWJsZSwgYW5nbGVfdG9fZ2wpOgorICAgICBhbmdsZV9vdmVycmlkZSA9IGlt
YWdlX3RhYmxlWyJvdmVycmlkZSJdCisgICAgIG1hY19vdmVycmlkZSA9IGltYWdlX3RhYmxlWyJv
dmVycmlkZV9tYWMiXQorICAgICBpb3Nfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGVf
aW9zIl0KKy0gICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3Nf
bWFjIl0KKysgICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfbWFjIl0K
KysgICAgaW9zX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfaW9zIl0KKyAgICAg
YW5nbGVfdG9fbXRsID0gaW1hZ2VfdGFibGVbIm1hcCJdCisgICAgIG1hY19zcGVjaWZpY19tYXAg
PSBpbWFnZV90YWJsZVsibWFwX21hYyJdCisgICAgIGlvc19zcGVjaWZpY19tYXAgPSBpbWFnZV90
YWJsZVsibWFwX2lvcyJdCitAQCAtMzIyLDggKzM3Niw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zdHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKKyAgICAgZGVmIGdlbl9pbWFn
ZV9tYXBfc3dpdGNoX2NvbW1vbl9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1h
dCk6CisgICAgICAgICBtYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX21hY19jYXNlKGFu
Z2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fZ2wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGws
IG1hY19mYWxsYmFja3MpCistICAgICAgICBub25fbWFjX2Nhc2UgPSBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zaW1wbGVfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZV90b19nbCwgYW5nbGVfdG9fbXRsKQorKyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdl
X21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5n
bGVfdG9fZ2wsIGFuZ2xlX3RvX210bCwgaW9zX2ZhbGxiYWNrcykKKyAgICAgICAgIGlmIG1hY19j
YXNlID09IG5vbl9tYWNfY2FzZToKKyAgICAgICAgICAgICByZXR1cm4gbWFjX2Nhc2UKKyAKK2Rp
ZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKK2luZGV4IDIw
NzlmZDcuLjIwNGViYjkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2J1ZmZlcl9wb29sLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
YnVmZmVyX3Bvb2wuaAorQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0J1ZmZlckFsbG9jYXRlZE91dCA9IG51bGxw
dHIpOworIAorICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0ZXMsIGNhbGwgY29t
bWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZpY2UuCistICAgIGFu
Z2xlOjpSZXN1bHQgY29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICBhbmdsZTo6
UmVzdWx0IGNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBib29sIGZsdXNoRW50aXJlQnVm
ZmVyID0gZmFsc2UpOworIAorICAgICAvLyBUaGlzIHJlbGVhc2VzIGFsbCB0aGUgYnVmZmVycyB0
aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgc2luY2UgdGhpcyB3YXMgbGFzdCBjYWxsZWQuCisgICAg
IHZvaWQgcmVsZWFzZUluRmxpZ2h0QnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKK0BA
IC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICBhbmdsZTo6UmVzdWx0IGFs
bG9jYXRlTmV3QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgICB2b2lkIGRlc3Ry
b3lCdWZmZXJMaXN0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIHN0ZDo6ZGVxdWU8QnVmZmVyUmVm
PiAqYnVmZmVycyk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVyKENv
bnRleHRNdGwgKmNvbnRleHRNdGwpOworLQorICAgICBzaXplX3QgbUluaXRpYWxTaXplOworICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKKyAgICAgdWludDMyX3QgbU5leHRBbGxvY2F0aW9uT2Zmc2V0
OworQEAgLTEyNyw3ICsxMjYsNyBAQCBjbGFzcyBCdWZmZXJQb29sCisgCisgICAgIHNpemVfdCBt
QnVmZmVyc0FsbG9jYXRlZDsKKyAgICAgc2l6ZV90IG1NYXhCdWZmZXJzOworLSAgICBCdWZmZXJQ
b29sTWVtUG9saWN5IG1NZW1Qb2xpY3k7CisrICAgIEJ1ZmZlclBvb2xNZW1Qb2xpY3kgbU1lbVBv
bGljeSA9IEJ1ZmZlclBvb2xNZW1Qb2xpY3k6OkF1dG87CisgICAgIGJvb2wgbUFsd2F5c0FsbG9j
YXRlTmV3QnVmZmVyOworIH07CisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9idWZmZXJfcG9vbC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfYnVmZmVyX3Bvb2wubW0KK2luZGV4IDA0MjM4ZWYuLmE1OGI1YTUgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCitAQCAtMjUwLDExICsy
NTAsMTggQEAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1h
bmdsZTo6UmVzdWx0IEJ1ZmZlclBvb2w6OmNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsKQor
K2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGws
IGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCisgeworICAgICBpZiAobUJ1ZmZlciAmJiBtTmV4dEFs
bG9jYXRpb25PZmZzZXQgPiBtTGFzdEZsdXNoT2Zmc2V0KQorKyAgICB7CisrICAgICAgICBpZiAo
Zmx1c2hFbnRpcmVCdWZmZXIpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1
c2goY29udGV4dE10bCwgMCwgbUxhc3RGbHVzaE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4dE10
bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVzaE9m
ZnNldCk7CisrICAgICAgICB9CisgICAgICAgICBtTGFzdEZsdXNoT2Zmc2V0ID0gbU5leHRBbGxv
Y2F0aW9uT2Zmc2V0OworICAgICB9CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
LmgKK2luZGV4IDU1ZmY2NDkuLjNhYTgyNmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFz
cyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFu
ZEJ1ZmZlcj4+LCBhbmdsZTo6TgorIAorICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb21tYW5kIGJ1
ZmZlciBjYW4gYmUgZW5jb2RlZCBpbnRvLiBSZXR1cm4gZmFsc2UgaWYgaXQgaGFzIGJlZW4gY29t
bWl0dGVkCisgICAgIC8vIGFuZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCistICAgIGJvb2wgcmVh
ZHkoKSBjb25zdDsKKysgICAgYm9vbCB2YWxpZCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdCgp
OworICAgICAvLyB3YWl0IGZvciBjb21taXR0ZWQgY29tbWFuZCBidWZmZXIgdG8gZmluaXNoLgor
ICAgICB2b2lkIGZpbmlzaCgpOworQEAgLTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVm
ZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBh
bmdsZTo6TgorIAorICAgICB2b2lkIHF1ZXVlRXZlbnRTaWduYWwoY29uc3QgbXRsOjpTaGFyZWRF
dmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKyAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZl
bnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKysK
KysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7Cisg
ICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7CisgICAg
IHZvaWQgcG9wRGVidWdHcm91cCgpOworIAorQEAgLTEyOCw3ICsxMzAsNyBAQCBjbGFzcyBDb21t
YW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZl
cj4+LCBhbmdsZTo6TgorICAgICB2b2lkIHNldChpZDxNVExDb21tYW5kQnVmZmVyPiBtZXRhbEJ1
ZmZlcik7CisgICAgIHZvaWQgY2xlYW51cCgpOworIAorLSAgICBib29sIHJlYWR5SW1wbCgpIGNv
bnN0OworKyAgICBib29sIHZhbGlkSW1wbCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdEltcGwo
KTsKKyAgICAgdm9pZCBmb3JjZUVuZGluZ0N1cnJlbnRFbmNvZGVyKCk7CisgCitAQCAtMTQ5LDYg
KzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJsaWMgV3JhcHBlZE9iamVj
dDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCisgCisgICAgIG11dGFibGUgc3RkOjpt
dXRleCBtTG9jazsKKyAKKysgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1QZW5kaW5nRGVi
dWdTaWduczsKKyAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPG10bDo6U2hhcmVkRXZlbnRSZWYs
IHVpbnQ2NF90Pj4gbVBlbmRpbmdTaWduYWxFdmVudHM7CisgCisgICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBtRGVidWdHcm91cHM7CitAQCAtMTc2LDYgKzE3OSw4IEBAIGNsYXNzIENvbW1h
bmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+Piwg
YW5nbGU6Ok5vbkNvCisgICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWluZ1dyaXR0
ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgIENvbW1hbmRFbmNvZGVyICZt
YXJrUmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsK
KyAKKysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKysKKyAgICAg
dmlydHVhbCB2b2lkIHB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCk7CisgICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CisgCitAQCAtMTg5LDYgKzE5NCw4IEBAIGNsYXNzIENv
bW1hbmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+
PiwgYW5nbGU6Ok5vbkNvCisgCisgICAgIHZvaWQgc2V0KGlkPE1UTENvbW1hbmRFbmNvZGVyPiBt
ZXRhbENtZEVuY29kZXIpOworIAorKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1w
bChOU1N0cmluZyAqbWFya2VyKTsKKysKKyAgIHByaXZhdGU6CisgICAgIGNvbnN0IFR5cGUgbVR5
cGU7CisgICAgIENvbW1hbmRCdWZmZXIgJm1DbWRCdWZmZXI7CitAQCAtMjAxLDcgKzIwOCw3IEBA
IGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgIGlubGluZSBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICZwdXNoKGNvbnN0IFQg
JnZhbCkKKyAgICAgeworLSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90ICo+KCZ2YWwpOworKyAgICAgICAgYXV0byBwdHIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oJnZhbCk7CisgICAgICAgICBtQnVmZmVyLmluc2Vy
dChtQnVmZmVyLmVuZCgpLCBwdHIsIHB0ciArIHNpemVvZihUKSk7CisgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgIH0KK0BAIC0yMTcsNyArMjI0LDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbQorICAgICB7CisgICAgICAgICBBU1NFUlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5z
aXplKCkgLSBzaXplb2YoVCkpOworICAgICAgICAgVCByZTsKKy0gICAgICAgIHVpbnQ4X3QgKnB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmcmUpOworKyAgICAgICAgYXV0byBwdHIg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnJlKTsKKyAgICAgICAgIHN0ZDo6Y29weSht
QnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyLCBtQnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyICsgc2l6
ZW9mKFQpLCBwdHIpOworICAgICAgICAgcmV0dXJuIHJlOworICAgICB9CitAQCAtMjI1LDcgKzIz
Miw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgIGlubGluZSBUIGZldGNoKCkKKyAgICAgeworLSAgICAgICAgVCByZSA9
IHBlZWs8VD4oKTsKKysgICAgICAgIGF1dG8gcmUgPSBwZWVrPFQ+KCk7CisgICAgICAgICBtUmVh
ZFB0ciArPSBzaXplb2YoVCk7CisgICAgICAgICByZXR1cm4gcmU7CisgICAgIH0KK0BAIC0yMzMs
NyArMjQwLDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbQorICAgICBpbmxpbmUg
Y29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQorICAgICB7CisgICAgICAgICBBU1NF
UlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5zaXplKCkgLSBieXRlcyk7CistICAgICAgICBzaXplX3Qg
Y3VyID0gbVJlYWRQdHI7CisrICAgICAgICBhdXRvIGN1ciA9IG1SZWFkUHRyOworICAgICAgICAg
bVJlYWRQdHIgKz0gYnl0ZXM7CisgICAgICAgICByZXR1cm4gbUJ1ZmZlci5kYXRhKCkgKyBjdXI7
CisgICAgIH0KK0BAIC00NzksMTIgKzQ4NiwxNiBAQCBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2Rl
ciBmaW5hbCA6IHB1YmxpYyBDb21tYW5kRW5jb2RlcgorICAgICB7CisgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+PihDb21tYW5kRW5jb2Rlcjo6
Z2V0KCkpOworICAgICB9CisrICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0cmluZyAq
bGFiZWwpIG92ZXJyaWRlOworIAorICAgICB2b2lkIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2ht
ZW50KTsKKysgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOworIAorICAgICB2b2lkIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKE1UTFJlbmRlclBh
c3NBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50KTsKKyAKKyAg
ICAgdm9pZCBlbmNvZGVNZXRhbEVuY29kZXIoKTsKKysgICAgdm9pZCBzaW11bGF0ZURpc2NhcmRG
cmFtZWJ1ZmZlcigpOworKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlz
Y2FyZFNpbXVsYXRpb24pOworIAorICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAmY29tbW9uU2V0
QnVmZmVyKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCitAQCAtNTYwLDEx
ICs1NzEsMjAgQEAgY2xhc3MgQmxpdENvbW1hbmRFbmNvZGVyIGZpbmFsIDogcHVibGljIENvbW1h
bmRFbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2xpY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBsZXZlbENvdW50KTsKKyAKKysgICAgQmxpdENvbW1hbmRFbmNvZGVyICZjb3B5VGV4dHVyZShj
b25zdCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjU2xpY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjTGV2ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGV4dHVyZVJlZiAmZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdFNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdExldmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNsaWNlQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CisrCisgICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmZmlsbEJ1ZmZlcihjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlciwgTlNSYW5nZSByYW5nZSwgdWlu
dDhfdCB2YWx1ZSk7CisgCisgICAgIEJsaXRDb21tYW5kRW5jb2RlciAmZ2VuZXJhdGVNaXBtYXBz
Rm9yVGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKKy0gICAgQmxpdENvbW1hbmRF
bmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVmZmVyUHRyKTsKKy0gICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIp
OworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVzb3VyY2UoY29uc3QgQnVm
ZmVyUmVmICZidWZmZXIpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVz
b3VyY2UoY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSk7CisgCisgICBwcml2YXRlOgorICAgICBp
ZDxNVExCbGl0Q29tbWFuZEVuY29kZXI+IGdldCgpCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KK2luZGV4IDQ0MzNiMDIuLmI0YTMzNDcg
MTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCitAQCAtMTEsNiArMTEsOSBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKKyAKKyAjaW5jbHVkZSA8Y2Fzc2VydD4KKysjaWYg
QU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKysjICAgIGluY2x1ZGUgPHJh
bmRvbT4KKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIgorQEAg
LTY1LDYgKzY4LDcgQEAKKyAgICAgUFJPQyhTZXRWaXNpYmlsaXR5UmVzdWx0TW9kZSkgICAgICAg
IFwKKyAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgUFJP
QyhNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlKSAgICAgIFwKKysgICAgUFJPQyhJbnNlcnREZWJ1
Z3NpZ24pICAgICAgICAgICAgICAgIFwKKyAgICAgUFJPQyhQdXNoRGVidWdHcm91cCkgICAgICAg
ICAgICAgICAgIFwKKyAgICAgUFJPQyhQb3BEZWJ1Z0dyb3VwKQorIAorQEAgLTg1LDQyICs4OSw0
MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIs
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgorIHZvaWQgU2V0UmVuZGVyUGlwZWxpbmVTdGF0
ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgaWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PigpOworKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4oKTsKKyAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CisgICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07
CisgfQorIAorIHZvaWQgU2V0VHJpYW5nbGVGaWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgTVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmds
ZUZpbGxNb2RlPigpOworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTFRyaWFuZ2xl
RmlsbE1vZGU+KCk7CisgICAgIFtlbmNvZGVyIHNldFRyaWFuZ2xlRmlsbE1vZGU6bW9kZV07Cisg
fQorIAorIHZvaWQgU2V0RnJvbnRGYWNpbmdXaW5kaW5nQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFdpbmRpbmcgd2luZGluZyA9
IHN0cmVhbS0+ZmV0Y2g8TVRMV2luZGluZz4oKTsKKysgICAgYXV0byB3aW5kaW5nID0gc3RyZWFt
LT5mZXRjaDxNVExXaW5kaW5nPigpOworICAgICBbZW5jb2RlciBzZXRGcm9udEZhY2luZ1dpbmRp
bmc6d2luZGluZ107CisgfQorIAorIHZvaWQgU2V0Q3VsbE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIE1UTEN1bGxNb2RlIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigp
OworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgICBb
ZW5jb2RlciBzZXRDdWxsTW9kZTptb2RlXTsKKyB9CisgCisgdm9pZCBTZXREZXB0aFN0ZW5jaWxT
dGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+
IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CisrICAg
IGF1dG8gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPj4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2lsU3RhdGU6c3RhdGVdOworICAgICBbc3RhdGUg
QU5HTEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyB2b2lkIFNldERlcHRoQmlhc0NtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgZmxvYXQgZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+
KCk7CistICAgIGZsb2F0IHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworLSAg
ICBmbG9hdCBjbGFtcCAgICAgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBk
ZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBzbG9wZVNjYWxl
ID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBjbGFtcCAgICAgID0gc3RyZWFt
LT5mZXRjaDxmbG9hdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RGVwdGhCaWFzOmRlcHRoQmlhcyBz
bG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOworIH0KKyAKK0BAIC0xMzQsMTMgKzEz
OCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQorIAorIHZvaWQgU2V0Vmlld3BvcnRDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFZpZXdwb3J0IHZpZXdwb3J0ID0gc3RyZWFtLT5m
ZXRjaDxNVExWaWV3cG9ydD4oKTsKKysgICAgYXV0byB2aWV3cG9ydCA9IHN0cmVhbS0+ZmV0Y2g8
TVRMVmlld3BvcnQ+KCk7CisgICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0XTsKKyB9
CisgCisgdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRM
U2Npc3NvclJlY3QgcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisrICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFNjaXNzb3JSZWN0OnJlY3RdOworIH0KKyAKK0BAIC0xNTUsOSArMTU5LDkgQEAgdm9p
ZCBTZXRCbGVuZENvbG9yQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTEJ1ZmZlcj4+KCk7CistICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
KyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFZlcnRleEJ1ZmZlcjpidWZmZXIgb2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
KyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorQEAgLTE2NSwyNiArMTY5LDI2
IEBAIHZvaWQgU2V0VmVydGV4QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kCisgdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgdWlu
dDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBvZmZz
ZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIGluZGV4ICA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIHNldFZlcnRleEJ1ZmZlck9mZnNl
dDpvZmZzZXQgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4Qnl0ZXNDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHNpemVfdCBzaXplICAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxzaXplX3Q+KCk7CistICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzID0gc3RyZWFtLT5mZXRj
aChzaXplKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQz
Ml90PigpOworKyAgICBhdXRvIHNpemUgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAg
IGF1dG8gYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0
ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVh
bSkKKyB7CistICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisrICAgIGF1dG8gc3RhdGUgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOworICAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgIGZsb2F0IGxvZE1heENsYW1wID0gc3RyZWFtLT5m
ZXRjaDxmbG9hdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0YXRlOnN0YXRl
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKK0BAIC0xOTUsMTcgKzE5
OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKKyAKKyB2b2lkIFNldFZlcnRleFRleHR1cmVDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKKyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFRleHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5k
ZXhdOworICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorIAorIHZvaWQgU2V0
RnJhZ21lbnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1UTEJ1ZmZlcj4g
YnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworLSAgICB1aW50MzJfdCBv
ZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGlu
ZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBidWZmZXIg
PSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlcjpidWZmZXIgb2Zm
c2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKKyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFT
RV07CisgfQorQEAgLTIxMywyNiArMjE3LDI2IEBAIHZvaWQgU2V0RnJhZ21lbnRCdWZmZXJDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hCisg
dm9pZCBTZXRGcmFnbWVudEJ1ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0
ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGluZGV4ICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAg
ICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlck9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07
CisgfQorIAorIHZvaWQgU2V0RnJhZ21lbnRCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKy0gICAg
Y29uc3QgdWludDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworLSAgICB1aW50MzJf
dCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gc2l6
ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7CisrICAgIGF1dG8gaW5kZXggPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90Pigp
OworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5k
ZXg6aW5kZXhdOworIH0KKyAKKyB2b2lkIFNldEZyYWdtZW50U2FtcGxlclN0YXRlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8
TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRl
Pj4oKTsKKysgICAgYXV0byBzdGF0ZSAgICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBs
ZXJTdGF0ZT4+KCk7CisgICAgIGZsb2F0IGxvZE1pbkNsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9h
dD4oKTsKKyAgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOwor
LSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4o
KTsKKysgICAgYXV0byBpbmRleCAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2RNYXhDbGFtcDpsb2RNYXhDbGFtcAorQEAgLTI0MiwyNiArMjQ2LDI2IEBAIHZv
aWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsCisgCisgdm9pZCBTZXRGcmFnbWVudFRleHR1cmVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFRl
eHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDppbmRleF07
CisgICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKKyB9CisgCisgdm9pZCBEcmF3Q21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3RyZWFtICpzdHJlYW0pCisgeworLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUg
PSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CistICAgIHVpbnQzMl90IHZlcnRl
eFN0YXJ0ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQz
Ml90IHZlcnRleENvdW50ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisr
ICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4o
KTsKKysgICAgYXV0byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KysgICAgYXV0byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICAgW2VuY29kZXIgZHJhd1ByaW1pdGl2ZXM6cHJpbWl0aXZlVHlwZSB2ZXJ0ZXhTdGFydDp2ZXJ0
ZXhTdGFydCB2ZXJ0ZXhDb3VudDp2ZXJ0ZXhDb3VudF07CisgfQorIAorIHZvaWQgRHJhd0luc3Rh
bmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworLSAgICB1aW50MzJf
dCB2ZXJ0ZXhTdGFydCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworLSAg
ICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOworLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1U
TFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gdmVydGV4Q291bnQgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKKyAg
ICAgICAgICAgICAgICAgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQKKyAgICAgICAgICAgICAgICAg
dmVydGV4Q291bnQ6dmVydGV4Q291bnQKK0BAIC0yNzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJ
bnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdAorIAorIHZvaWQgRHJhd0luZGV4ZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7
CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRM
UHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZl
cj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0g
ICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0yODUsMTIgKzI4OSwxMiBA
QCB2b2lkIERyYXdJbmRleGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZQorIAorIHZvaWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5k
ZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKysgICAgYXV0byBpbmRleENv
dW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUg
ICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZm
ZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJP
ZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVk
UHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhD
b3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRl
eFR5cGUKK0BAIC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbworIHZv
aWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2
ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsK
Ky0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9m
ZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90
IGluc3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAg
IHVpbnQzMl90IGJhc2VWZXJ0ZXggICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CisrICAgIGF1dG8gYmFzZVZlcnRleCAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisg
ICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lk
IERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwKKyB2b2lkIFNldFZpc2liaWxpdHlSZXN1bHRNb2RlQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMVmlz
aWJpbGl0eVJlc3VsdE1vZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVmlzaWJpbGl0eVJlc3Vs
dE1vZGU+KCk7CistICAgIHNpemVfdCBvZmZzZXQgICAgICAgICAgICAgICAgPSBzdHJlYW0tPmZl
dGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBtb2RlICAgPSBzdHJlYW0tPmZldGNoPE1UTFZpc2li
aWxpdHlSZXN1bHRNb2RlPigpOworKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8c2l6
ZV90PigpOworICAgICBbZW5jb2RlciBzZXRWaXNpYmlsaXR5UmVzdWx0TW9kZTptb2RlIG9mZnNl
dDpvZmZzZXRdOworIH0KKyAKKyB2b2lkIFVzZVJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisg
eworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJl
c291cmNlPj4oKTsKKy0gICAgTVRMUmVzb3VyY2VVc2FnZSB1c2FnZSAgID0gc3RyZWFtLT5mZXRj
aDxNVExSZXNvdXJjZVVzYWdlPigpOworLSAgICBtdGw6OlJlbmRlclN0YWdlcyBzdGFnZXMgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworKyAgICBhdXRvIHJlc291cmNlID0g
c3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CisrICAgIGF1dG8gdXNhZ2UgICAgPSBz
dHJlYW0tPmZldGNoPE1UTFJlc291cmNlVXNhZ2U+KCk7CisrICAgIGF1dG8gc3RhZ2VzICAgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgICBBTkdMRV9VTlVTRURfVkFS
SUFCTEUoc3RhZ2VzKTsKKyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9f
TUFDXzEwXzE1KQorICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMu
MCwgMTMuMCkpCitAQCAtMzUxLDkgKzM1NSw5IEBAIHZvaWQgVXNlUmVzb3VyY2VDbWQoaWQ8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlCisg
dm9pZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1l
ZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVz
b3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKy0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKKy0g
ICAgbXRsOjpSZW5kZXJTdGFnZXMgYmVmb3JlID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byByZXNvdXJjZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVzb3Vy
Y2U+PigpOworKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byBiZWZvcmUgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJT
dGFnZXM+KCk7CisgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShhZnRlcik7CisgICAgIEFOR0xF
X1VOVVNFRF9WQVJJQUJMRShiZWZvcmUpOworICNpZiBkZWZpbmVkKF9fTUFDXzEwXzE0KSAmJiAo
VEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtMzY4LDkgKzM3Miwx
NiBAQCB2b2lkIE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsCisgICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorIAorK3ZvaWQgSW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisreworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBbZW5jb2RlciBp
bnNlcnREZWJ1Z1NpZ25wb3N0OmxhYmVsXTsKKysgICAgW2xhYmVsIEFOR0xFX01UTF9SRUxFQVNF
XTsKKyt9CisrCisgdm9pZCBQdXNoRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgTlNTdHJpbmcgKmxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgICBbZW5jb2RlciBw
dXNoRGVidWdHcm91cDpsYWJlbF07CisgICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorQEAgLTM4OCw3ICszOTksNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIAorIE5TU3Ry
aW5nICpjcHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQorIHsKKy0gICAg
TlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5j
X3N0cigpXTsKKysgICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzptYXJrZXIuY19zdHIoKV07CisgICAgIGlmICghbGFiZWwpCisgICAgIHsKKyAgICAgICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGFzY2lpIHN0cmlu
Zy4KK0BAIC0zOTYsNyArNDA3LDYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgfQor
ICAgICByZXR1cm4gbGFiZWw7CisgfQorLQorIH0KKyAKKyAvLyBDb21tYW5kUXVldWUgaW1wbGVt
ZW50YXRpb24KK0BAIC01NjUsMTEgKzU3NSwxMSBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAor
ICAgICBjbGVhbnVwKCk7CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHkoKSBjb25z
dAorK2Jvb2wgQ29tbWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAorIHsKKyAgICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgcmV0dXJuIHJlYWR5SW1wbCgp
OworKyAgICByZXR1cm4gdmFsaWRJbXBsKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6
Y29tbWl0KCkKK0BAIC01OTgsNyArNjA4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAK
KyAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgaWYg
KCFyZWFkeUltcGwoKSkKKysgICAgaWYgKCF2YWxpZEltcGwoKSkKKyAgICAgeworICAgICAgICAg
cmV0dXJuOworICAgICB9CitAQCAtNjIwLDcgKzYzMCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgCisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CisgCist
ICAgIGlmICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAg
ICAgICAgIHJldHVybjsKKyAgICAgfQorQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgUG9wRGVi
dWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0CisgICAgIEFTU0VSVChtZXRhbENtZEJ1ZmZlcik7CisgfQorIAorLXZvaWQg
Q29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCisrdm9pZCBDb21tYW5kQnVmZmVyOjppbnNlcnREZWJ1
Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CistCistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Cist
CistICAgIGlmIChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVy
LT5nZXRUeXBlKCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKysgICAgbXRsOjpDb21tYW5k
RW5jb2RlciAqY3VycmVudEVuY29kZXIgPSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisrICAgIGlm
IChjdXJyZW50RW5jb2RlcikKKyAgICAgeworLSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVu
dCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSByZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcg
dW50aWwgdGhlCistICAgICAgICAvLyBwYXNzIGVuZC4KKy0gICAgICAgIG1QZW5kaW5nU2lnbmFs
RXZlbnRzLnB1c2hfYmFjayh7ZXZlbnQsIHZhbHVlfSk7CisrICAgICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwgPSBjcHBMYWJlbFRv
T2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGN1cnJlbnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1Np
Z24obGFiZWwpOworKyAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAg
ICAgc2V0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CisrICAgICAgICBtUGVuZGluZ0RlYnVnU2ln
bnMucHVzaF9iYWNrKG1hcmtlcik7CisgICAgIH0KKyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVy
OjpzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2
NF90IHZhbHVlKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
ZyhtTG9jayk7CistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7CistCistICAgIHdhaXRFdmVudElt
cGwoZXZlbnQsIHZhbHVlKTsKKysgICAgLy8gTk9URShocWxlKTogdG8gaW1wbGVtZW50IHRoaXMK
KyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cChjb25zdCBzdGQ6OnN0
cmluZyAmbWFya2VyKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCisgewor
LSAgICBtRGVidWdHcm91cHMucHVzaF9iYWNrKG1hcmtlcik7CisrICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCisrfQorIAorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVu
dFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUp
CisreworICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworIAorLSAg
ICBpZiAocmVhZHlJbXBsKCkpCisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisrCisrICAgIGlm
IChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVyLT5nZXRUeXBl
KCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKyAgICAgeworLSAgICAgICAgcHVzaERlYnVn
R3JvdXBJbXBsKG1hcmtlcik7CisrICAgICAgICAvLyBXZSBjYW5ub3Qgc2V0IGV2ZW50IHdoZW4g
dGhlcmUgaXMgYW4gYWN0aXZlIHJlbmRlciBwYXNzLCBkZWZlciB0aGUgc2V0dGluZyB1bnRpbCB0
aGUKKysgICAgICAgIC8vIHBhc3MgZW5kLgorKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMu
cHVzaF9iYWNrKHtldmVudCwgdmFsdWV9KTsKKyAgICAgfQorLX0KKy0KKy12b2lkIENvbW1hbmRC
dWZmZXI6OnBvcERlYnVnR3JvdXAoKQorLXsKKy0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHko
KSkKKysgICAgZWxzZQorICAgICB7CistICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsK
KysgICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICB9CisrfQorIAorK3Zv
aWQgQ29tbWFuZEJ1ZmZlcjo6c2VydmVyV2FpdEV2ZW50KGNvbnN0IG10bDo6U2hhcmVkRXZlbnRS
ZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKKyt7CisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsZyhtTG9jayk7CisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisgCistICAgIGlm
IChyZWFkeUltcGwoKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuOworLSAgICB9CisrICAgIHdh
aXRFdmVudEltcGwoZXZlbnQsIHZhbHVlKTsKKyB9CisgCisgLyoqIHByaXZhdGUgdXNlIG9ubHkg
Ki8KK0BAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5k
ZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0Cisgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5j
b2RlcikKKyB7CisgICAgIG1BY3RpdmVDb21tYW5kRW5jb2RlciA9IGVuY29kZXI7CisrICAgIGZv
ciAoYXV0byAmbWFya2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorKyAgICB7CisrICAgICAgICBB
TkdMRV9NVExfT0JKQ19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwg
PSBjcHBMYWJlbFRvT2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGVuY29kZXItPmluc2VydERl
YnVnU2lnbihsYWJlbCk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbVBlbmRpbmdEZWJ1Z1Np
Z25zLmNsZWFyKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW52YWxpZGF0ZUFjdGl2
ZUNvbW1hbmRFbmNvZGVyKENvbW1hbmRFbmNvZGVyICplbmNvZGVyKQorQEAgLTcyOSw3ICs3NDgs
NyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICBQYXJlbnRDbGFzczo6c2V0KG5pbCk7
CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKKytib29sIENv
bW1hbmRCdWZmZXI6OnZhbGlkSW1wbCgpIGNvbnN0CisgeworICAgICBpZiAoIVBhcmVudENsYXNz
Ojp2YWxpZCgpKQorICAgICB7CitAQCAtNzQxLDcgKzc2MCw3IEBAIHZvaWQgUG9wRGVidWdHcm91
cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0CisgCisgdm9pZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKKyB7CistICAgIGlm
ICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAgICAgICAg
IHJldHVybjsKKyAgICAgfQorQEAgLTg4OSw2ICs5MDgsMTcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAgICAgW2dldCgpIHBvcERlYnVnR3JvdXBdOworIH0KKyAKKyt2b2lkIENvbW1hbmRF
bmNvZGVyOjppbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgaW5zZXJ0
RGVidWdTaWduSW1wbChsYWJlbCk7CisrfQorKworK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgLy8gRGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbgorKyAgICBbZ2V0KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07CisrfQor
KworIC8vIFJlbmRlckNvbW1hbmRFbmNvZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCisg
UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXM6OlJlbmRlckNvbW1hbmRFbmNvZGVyU2hh
ZGVyU3RhdGVzKCkKKyB7CitAQCAtOTUxLDYgKzk4MSw5IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgICAgIHsKKyAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOworICAgICB9CisrCisr
ICAgIHZpc2liaWxpdHlSZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9k
ZURpc2FibGVkOworKyAgICB2aXNpYmlsaXR5UmVzdWx0QnVmZmVyT2Zmc2V0ID0gMDsKKyB9Cisg
CisgLy8gUmVuZGVyQ29tbWFuZEVuY29kZXIgaW1wbGVtdGF0aW9uCitAQCAtMTAxNCwxMSArMTA0
NywxMiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICB7CisgICAgICAgICBpZiAob2Jq
Q1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uU3RvcmUp
CisgICAgICAgICB7CistICAgICAgICAgICAgLy8gTk9URShocWxlKTogQ3VycmVudGx5IGlmIHRo
ZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0ZXh0dXJlIGlzCistICAgICAgICAgICAg
Ly8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRvIHN0
b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKKy0gICAgICAgICAgICAvLyBtaWdodCBpbnRyb2R1
Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMg
b25seSBzdG9yZSB0aGUKKy0gICAgICAgICAgICAvLyBNUyB0ZXh0dXJlLCBhbmQgcmVzb2x2ZSBv
bmx5IGF0IHRoZSBlbmQgb2YgcmVhbCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSBp
cworLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisrICAgICAgICAgICAgLy8gTk9U
RShocWxlKTogQ3VycmVudGx5IGlmIHRoZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0
ZXh0dXJlIGlzIE1UTFN0b3JlQWN0aW9uLAorKyAgICAgICAgICAgIC8vIGl0IGlzIGF1dG9tYXRp
Y2FsbHkgY29udmVydCB0byBzdG9yZSBhbmQgcmVzb2x2ZSBhY3Rpb24uIEl0IG1pZ2h0IGludHJv
ZHVjZQorKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorKyAgICAgICAgICAg
IC8vIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMgb25seSBzdG9yZSB0aGUgTVMgdGV4
dHVyZSwgYW5kIHJlc29sdmUgb25seSBhdAorKyAgICAgICAgICAgIC8vIHRoZSBlbmQgb2YgcmVh
bCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSB3YXMgaW50ZXJydXB0ZWQgYnkgY29t
cHV0ZSBwYXNzKQorKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBv
cGVyYXRpb24gc3RhcnRzLgorICAgICAgICAgICAgIG9iakNSZW5kZXJQYXNzQXR0YWNobWVudC5z
dG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uU3RvcmVBbmRNdWx0aXNhbXBsZVJlc29sdmU7Cisg
ICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3Rv
cmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKK0BAIC0xMDM2LDYgKzEwNzAsMTEg
QEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyB9CisgCisgdm9pZCBSZW5kZXJDb21tYW5kRW5j
b2Rlcjo6ZW5kRW5jb2RpbmcoKQorK3sKKysgICAgZW5kRW5jb2RpbmdJbXBsKHRydWUpOworK30K
KysKKyt2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZ0ltcGwoYm9vbCBjb25z
aWRlckRpc2NhcmRTaW11bGF0aW9uKQorIHsKKyAgICAgaWYgKCF2YWxpZCgpKQorICAgICAgICAg
cmV0dXJuOworQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5jb2xv
ckF0dGFjaG1lbnRzW2ldKTsKKyAgICAgfQorIAorLSAgICAvLyBVcGRhdGUgZGVwdGggc3RvcmUg
YWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorKyAgICAvLyBV
cGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2Rpbmco
KQorICAgICBvYmpDUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID0g
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxp
emVMb2FkU3RvcmVBY3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudCk7Cisg
CistICAgIC8vIFVwZGF0ZSBzdGVuY2lsIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0
KCkgYW5kIGVuZEVuY29kaW5nKCkKKysgICAgLy8gVXBkYXRlIHN0b3JlIGFjdGlvbiBzZXQgYmV0
d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAgb2JqQ1JlbmRlclBhc3NEZXNj
LnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KKyAgICAgICAgIG1SZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxpemVMb2FkU3RvcmVB
Y3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKK0BAIC0xMDc1LDI2
ICsxMTE0LDc4IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgIENvbW1hbmRFbmNv
ZGVyOjplbmRFbmNvZGluZygpOworIAorKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9G
UkFNRUJVRkZFUgorKyAgICBpZiAoY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKKysgICAgewor
KyAgICAgICAgc2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIoKTsKKysgICAgfQorKyNlbmRpZgor
KworICAgICAvLyByZXNldCBzdGF0ZQorICAgICBtUmVuZGVyUGFzc0Rlc2MgPSBSZW5kZXJQYXNz
RGVzYygpOworICAgICBtU3RhdGVDYWNoZS5yZXNldCgpOworIH0KKyAKKy1pbmxpbmUgdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRTY2lz
c29yUmVjdCgKKy0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2htZW50
KQorK2lubGluZSB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbml0V3JpdGVEZXBlbmRlbmN5
KGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworLSAgICBUZXh0dXJlUmVmIHRleHR1cmUg
PSBhdHRhY2htZW50LnRleHR1cmU7CisgICAgIGlmICh0ZXh0dXJlKQorICAgICB7CisgICAgICAg
ICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisrICAgIH0KKyt9Cisr
Cisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIo
KQorK3sKKysgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJhdGlv
biBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKysjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJ
U0NBUkRfRlJBTUVCVUZGRVIKKysgICAgc3RkOjpyYW5kb21fZGV2aWNlIHJkOyAgIC8vIFdpbGwg
YmUgdXNlZCB0byBvYnRhaW4gYSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBlbmdpbmUKKysg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKysgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0
aW9uPGZsb2F0PiBkaXMoMC4wLCAxLjBmKTsKKysgICAgYm9vbCBoYXNEaXNjYXJkID0gZmFsc2U7
CisrICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JB
dHRhY2htZW50czsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAobVJlbmRlclBhc3NEZXNjLmNv
bG9yQXR0YWNobWVudHNbaV0uc3RvcmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gdHJ1ZTsKKysgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuY29s
b3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlvbkNsZWFyOworKyAgICAg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQor
KyAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yTWFrZShkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pLCBkaXMoZ2VuKSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFj
dGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
IChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3Jl
QWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IHRydWU7CisrICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVw
dGhBdHRhY2htZW50LmxvYWRBY3Rpb24gPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKysg
ICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0
dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICB9CisgCistICAg
ICAgICBjb25zdCBNaXBtYXBOYXRpdmVMZXZlbCAmbWlwTGV2ZWwgPSBhdHRhY2htZW50LmxldmVs
OworKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9u
ID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxvYWRBY3Rpb24gICA9IE1UTExvYWRBY3Rp
b25DbGVhcjsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5jbGVh
clN0ZW5jaWwgPSByYW5kKCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rp
b25Mb2FkOworKyAgICB9CisgCistICAgICAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0Lndp
ZHRoID0KKy0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRlZ2VyPihtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoLCB0ZXh0dXJlLT53aWR0aChtaXBMZXZlbCkpOworLSAgICAgICAgbVJl
bmRlclBhc3NNYXhTY2lzc29yUmVjdC5oZWlnaHQgPQorLSAgICAgICAgICAgIHN0ZDo6bWluPE5T
VUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0dXJlLT5oZWln
aHQobWlwTGV2ZWwpKTsKKysgICAgaWYgKGhhc0Rpc2NhcmQpCisrICAgIHsKKysgICAgICAgIGF1
dG8gdG1wRGVzYyA9IG1SZW5kZXJQYXNzRGVzYzsKKysgICAgICAgIHJlc3RhcnQodG1wRGVzYyk7
CisrICAgICAgICBlbmRFbmNvZGluZ0ltcGwoZmFsc2UpOworICAgICB9CisrI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgorIH0KKyAKKyB2b2lkIFJlbmRl
ckNvbW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQorQEAgLTExMDIsNyArMTE5Myw3
IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisg
ICAgIHsKKyAgICAgICAgIEFOR0xFX01UTF9MT0coIkNyZWF0aW5nIG5ldyByZW5kZXIgY29tbWFu
ZCBlbmNvZGVyIHdpdGggZGVzYzogJUAiLAorLSAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGVk
UmVuZGVyUGFzc0Rlc2NPYmpDLmdldCgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgW21DYWNo
ZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKKyAKKyAgICAgICAgIGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBtZXRhbENtZEVuY29kZXIgPQorICAgICAgICAgICAgIFtjbWRC
dWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlwdG9yOm1DYWNoZWRS
ZW5kZXJQYXNzRGVzY09iakNdOworQEAgLTExMTAsNyArMTIwMSwxMSBAQCB2b2lkIFBvcERlYnVn
R3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0
ZUNvbW1hbmRTdAorICAgICAgICAgc2V0KG1ldGFsQ21kRW5jb2Rlcik7CisgCisgICAgICAgICAv
LyBWZXJpZnkgdGhhdCBpdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKy0gICAgICAgIEFTU0VS
VChtZXRhbENtZEVuY29kZXIpOworKyAgICAgICAgQVNTRVJUKGdldCgpKTsKKysKKysgICAgICAg
IC8vIFdvcmstYXJvdW5kIGRyaXZlciBidWcgb24gaU9TIGRldmljZXM6IHN0ZW5jaWwgbXVzdCBi
ZSBleHBsaWNpdGx5IHNldCB0byB6ZXJvCisrICAgICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5
cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5IHplcm8uCisrICAgICAgICBbbWV0YWxDbWRF
bmNvZGVyIHNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZTowXTsKKyAKKyAgICAgICAgIGlmIChtTGFi
ZWwpCisgICAgICAgICB7CitAQCAtMTExOSw3ICsxMjE0LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAKKyAgICAgICAgIHdoaWxlIChtQ29tbWFuZHMuZ29vZCgpKQorICAgICAgICAgewor
LSAgICAgICAgICAgIENtZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNo
PENtZFR5cGU+KCk7CisrICAgICAgICAgICAgYXV0byBjbWRUeXBlICAgICAgICAgICAgICAgPSBt
Q29tbWFuZHMuZmV0Y2g8Q21kVHlwZT4oKTsKKyAgICAgICAgICAgICBDb21tYW5kRW5jb2RlckZ1
bmMgZW5jb2RlciA9IGdDb21tYW5kRW5jb2RlcnNbc3RhdGljX2Nhc3Q8aW50PihjbWRUeXBlKV07
CisgICAgICAgICAgICAgZW5jb2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOworICAg
ICAgICAgfQorQEAgLTExNDIsNDEgKzEyMzcsMzQgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGVuZEVuY29kaW5nKCk7CisgICAgIH0KKyAKKy0gICAgaWYgKCFjbWRCdWZmZXIo
KS5yZWFkeSgpKQorKyAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCisgICAgIHsKKyAgICAg
ICAgIHJlc2V0KCk7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKyAKKy0gICAgbUxh
YmVsLnJlc2V0KCk7CistCisgICAgIG1SZW5kZXJQYXNzRGVzYyA9IGRlc2M7CisgICAgIG1SZWNv
cmRpbmcgICAgICA9IHRydWU7CisgICAgIG1IYXNEcmF3Q2FsbHMgICA9IGZhbHNlOworLSAgICBt
UmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAgICAgPSAwLAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC55ICAgICAgPSAwLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC53aWR0aCAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPE5TVUludGVnZXI+OjptYXgo
KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGVpZ2h0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OworIAorLSAgICAvLyBTZXQgd3JpdGluZyBk
ZXBlbmRlbmN5ICYgY29uc3RyYWluIHRoZSBzY2lzc29yIHJlY3QKKysgICAgLy8gbWFzayB3cml0
aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUgb3B0aW9ucworICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVudHM7
ICsraSkKKyAgICAgeworLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CisrICAgICAg
ICBpbml0V3JpdGVEZXBlbmRlbmN5KG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ld
LnRleHR1cmUoKSk7CisgICAgIH0KKyAKKy0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVu
Y3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50KTsKKysgICAg
aW5pdFdyaXRlRGVwZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1
cmUoKSk7CisgCistICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJl
Y3QobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKysgICAgaW5pdFdyaXRlRGVw
ZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpKTsKKyAK
KyAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjcmlwdG9yCisgICAgIG1SZW5kZXJQ
YXNzRGVzYy5jb252ZXJ0VG9NZXRhbERlc2MobUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQyk7Cisg
CistICAgIC8vIFRoZSBhY3R1YWwgT2JqZWN0aXZlLUMgZW5jb2RlciB3aWxsIGJlIGNyZWF0ZWQg
bGF0ZXIgaW4gZW5kRW5jb2RpbmcoKSwgd2UgZG8gc28gaW4KKy0gICAgLy8gb3JkZXIgdG8gYmUg
YWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBkbyB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUg
dGhlIGFjdHVhbAorLSAgICAvLyBlbmNvZGluZy4KKysgICAgLy8gVGhlIGFjdHVhbCBPYmplY3Rp
dmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRlZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBk
byBzbyBpbiBvcmRlcgorKyAgICAvLyB0byBiZSBhYmxlIHRvIHNvcnQgdGhlIGNvbW1hbmRzIG9y
IGRvIHRoZSBwcmVwcm9jZXNzaW5nIGJlZm9yZSB0aGUgYWN0dWFsIGVuY29kaW5nLgorIAorLSAg
ICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQg
dG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVyCistICAgIC8vIHRoYXQgdGhpcyBvYmpl
Y3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgorKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0
aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQg
YnVmZmVyIHRoYXQKKysgICAgLy8gdGhpcyBvYmplY3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgor
ICAgICBjbWRCdWZmZXIoKS5zZXRBY3RpdmVDb21tYW5kRW5jb2Rlcih0aGlzKTsKKyAKKyAgICAg
cmV0dXJuICp0aGlzOworQEAgLTEzMDIsMTYgKzEzOTAsNiBAQCB2b2lkIFBvcERlYnVnR3JvdXBD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdAorICAgICB7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKy0KKy0gICAgaWYg
KEFOR0xFX1VOTElLRUxZKHJlY3QueCArIHJlY3Qud2lkdGggPiBtUmVuZGVyUGFzc01heFNjaXNz
b3JSZWN0LndpZHRoIHx8CistICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0Lmhl
aWdodCA+IG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKKy0gICAgeworLSAgICAg
ICAgV0FSTigpIDw8ICJPdXQgb2YgYm91bmQgc2Npc3NvciByZWN0IGRldGVjdGVkICIgPDwgcmVj
dC54IDw8ICIgIiA8PCByZWN0LnkgPDwgIiAiCistICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0
aCA8PCAiICIgPDwgcmVjdC5oZWlnaHQ7CistICAgICAgICAvLyBPdXQgb2YgYm91bmQgcmVjdCB3
aWxsIGNyYXNoIHRoZSBtZXRhbCBydW50aW1lLCBpZ25vcmUgaXQuCistICAgICAgICByZXR1cm4g
KnRoaXM7CistICAgIH0KKy0KKyAgICAgbVN0YXRlQ2FjaGUuc2Npc3NvclJlY3QgPSByZWN0Owor
IAorICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpTZXRTY2lzc29yUmVjdCkucHVzaChyZWN0
KTsKK0BAIC0xMzgzLDcgKzE0NjEsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIC8vIElmIGJ1ZmZl
ciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRo
ZSBvZmZzZXQgb25seS4KKysgICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3
aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZlciBvbmx5LgorICAgICAg
ICAgc2hhZGVyU3RhdGVzLmJ1ZmZlck9mZnNldHNbaW5kZXhdID0gb2Zmc2V0OworIAorICAgICAg
ICAgbUNvbW1hbmRzLnB1c2goc3RhdGljX2Nhc3Q8Q21kVHlwZT4obVNldEJ1ZmZlck9mZnNldENt
ZHNbc2hhZGVyVHlwZV0pKQorQEAgLTE0OTAsMTIgKzE1NjgsNiBAQCB2b2lkIFBvcERlYnVnR3Jv
dXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNv
bW1hbmRTdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQpCisgeworLSAgICBpZiAoQU5H
TEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAgICAg
ICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3Rh
dGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0K
KyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNoKENtZFR5cGU6
OkRyYXcpLnB1c2gocHJpbWl0aXZlVHlwZSkucHVzaCh2ZXJ0ZXhTdGFydCkucHVzaCh2ZXJ0ZXhD
b3VudCk7CisgCitAQCAtMTUwNywxMiArMTU3OSw2IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IHZlcnRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpCisgeworLSAg
ICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAg
eworLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7Cist
ICAgIH0KKy0KKyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNo
KENtZFR5cGU6OkRyYXdJbnN0YW5jZWQpCisgICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQor
QEAgLTE1MjksMTMgKzE1OTUsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCisgeworLSAgICBpZiAo
QU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAg
ICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUg
c3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0K
Ky0KKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFpbmRleEJ1ZmZlcikpCisrICAgIGlmICghaW5k
ZXhCdWZmZXIpCisgICAgIHsKKyAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgfQorQEAgLTE1
NjAsMTMgKzE2MjAsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyB7CistICAgIGlm
IChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7Cist
ICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGlu
ZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAg
fQorLQorLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFp
bmRleEJ1ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAt
MTU5NCwxMyArMTY0OCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21t
YW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHVpbnQzMl90
IGluc3RhbmNlcywKKyAgICAgdWludDMyX3QgYmFzZVZlcnRleCkKKyB7CistICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7CistICAgICAg
ICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0
ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQor
LSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFpbmRleEJ1
ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHJldHVybiAqdGhpczsK
KyB9CisgCisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdTaWduSW1wbChO
U1N0cmluZyAqbGFiZWwpCisreworKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVu
ZEVuY29kaW5nKCkKKysgICAgbUNvbW1hbmRzLnB1c2goQ21kVHlwZTo6SW5zZXJ0RGVidWdzaWdu
KS5wdXNoKFtsYWJlbCBBTkdMRV9NVExfUkVUQUlOXSk7CisrfQorKworIHZvaWQgUmVuZGVyQ29t
bWFuZEVuY29kZXI6OnB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCkKKyB7CisgICAgIC8v
IERlZmVyIHRoZSBpbnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQorQEAgLTE3OTksNyArMTg1
Myw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgfQorIAorLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFkeSgpKQorKyAg
ICAgICAgaWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQorICAgICAgICAgeworICAgICAgICAgICAg
IHJlc2V0KCk7CisgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworQEAgLTE5NjIsNiArMjAxNiw2
NiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICByZXR1cm4gKnRoaXM7CisgfQorIAor
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0TGV2
ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHR1cmVSZWYgJmRzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3Rh
cnRMZXZlbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgc2xpY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKKyt7CisrICAgIGlm
ICghc3JjIHx8ICFkc3QpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqdGhpczsKKysgICAgfQor
KworKyAgICBjbWRCdWZmZXIoKS5zZXRSZWFkRGVwZW5kZW5jeShzcmMpOworKyAgICBjbWRCdWZm
ZXIoKS5zZXRXcml0ZURlcGVuZGVuY3koZHN0KTsKKysKKysjaWYgZGVmaW5lZChfX0lQSE9ORV8x
M18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMuMCkpCisrICAgIHsKKysgICAgICAgIFtnZXQoKSBjb3B5
RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpz
cmNTdGFydFNsaWNlCisrICAgICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2
ZWwKKysgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5nZXQoKQorKyAgICAgICAg
ICAgICAgZGVzdGluYXRpb25TbGljZTpkc3RTdGFydFNsaWNlCisrICAgICAgICAgICAgICBkZXN0
aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKysgICAgICAgICAgICAgICAgICAgIHNsaWNlQ291
bnQ6c2xpY2VDb3VudAorKyAgICAgICAgICAgICAgICAgICAgbGV2ZWxDb3VudDpsZXZlbENvdW50
XTsKKysgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIE1UTE9yaWdp
biBvcmlnaW4gPSBNVExPcmlnaW5NYWtlKDAsIDAsIDApOworKyAgICAgICAgZm9yICh1aW50MzJf
dCBzbGljZSA9IDA7IHNsaWNlIDwgc2xpY2VDb3VudDsgKytzbGljZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICB1aW50MzJfdCBzcmNTbGljZSA9IHNyY1N0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICB1aW50MzJfdCBkc3RTbGljZSA9IGRzdFN0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyAr
K2xldmVsKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbXRsOjpNaXBtYXBOYXRp
dmVMZXZlbCBzcmNMZXZlbCA9IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoc3JjU3RhcnRMZXZlbCAr
IGxldmVsKTsKKysgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwgPSBkc3RTdGFydExl
dmVsICsgbGV2ZWw7CisrICAgICAgICAgICAgICAgIE1UTFNpemUgc3JjU2l6ZSA9CisrICAgICAg
ICAgICAgICAgICAgICBNVExTaXplTWFrZShzcmMtPndpZHRoKHNyY0xldmVsKSwgc3JjLT5oZWln
aHQoc3JjTGV2ZWwpLCBzcmMtPmRlcHRoKHNyY0xldmVsKSk7CisrCisrICAgICAgICAgICAgICAg
IFtnZXQoKSBjb3B5RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVNsaWNlOnNyY1NsaWNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZU9yaWdpbjpvcmlnaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlU2l6
ZTpzcmNTaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5n
ZXQoKQorKyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRzdFNsaWNlCisr
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZHN0TGV2ZWwKKysgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gKnRoaXM7CisrfQorKworIEJsaXRD
b21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0
dXJlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCitA
QCAtMTk3NCw3ICsyMDg4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyAgICAgcmV0
dXJuICp0aGlzOworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6
c3luY2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlcikKKytCbGl0Q29tbWFuZEVuY29kZXIg
JkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYg
JmJ1ZmZlcikKKyB7CisgICAgIGlmICghYnVmZmVyKQorICAgICB7CitAQCAtMTk4OSw3ICsyMTAz
LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAjZW5kaWYKKyAgICAgcmV0dXJuICp0aGlz
OworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25p
emVSZXNvdXJjZShUZXh0dXJlICp0ZXh0dXJlKQorK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENv
bW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCisgICAgIHsKK0BAIC0yMDI4LDcgKzIxNDIsNyBA
QCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgIH0KKyAKKy0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKysgICAgICAg
IGlmICghY21kQnVmZmVyKCkudmFsaWQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXNl
dCgpOworICAgICAgICAgICAgIHJldHVybiAqdGhpczsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaAoraW5kZXggOTdjY2I5My4uM2ZjNWUzOSAxMDA2NDQKKy0tLSBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKK0BAIC0yNyw5ICsyNywxOCBAQAorICNpbmNs
dWRlICJsaWJBTkdMRS9hbmdsZXR5cGVzLmgiCisgCisgI2lmIFRBUkdFVF9PU19JUEhPTkUKKysj
ICAgIGlmICFkZWZpbmVkKF9fSVBIT05FXzExXzApCisrIyAgICAgICAgZGVmaW5lIF9fSVBIT05F
XzExXzAgMTEwMDAwCisrIyAgICBlbmRpZgorICMgICAgaWYgIWRlZmluZWQoQU5HTEVfSU9TX0RF
UExPWV9UQVJHRVQpCisgIyAgICAgICAgZGVmaW5lIEFOR0xFX0lPU19ERVBMT1lfVEFSR0VUIF9f
SVBIT05FXzExXzAKKyAjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5lZChfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEKQorKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV9PU19WRVJTSU9O
X01BWF9BTExPV0VEIF9fSVBIT05FXzExXzAKKysjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5l
ZChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisrIyAgICAgICAgZGVmaW5lIF9fVFZfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisrIyAgICBlbmRpZgorICNlbmRpZgor
IAorICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtNjYsNiArNzUsNyBA
QCBuYW1lc3BhY2UgZWdsCisgeworIGNsYXNzIERpc3BsYXk7CisgY2xhc3MgSW1hZ2U7CisrY2xh
c3MgU3VyZmFjZTsKKyB9ICAvLyBuYW1lc3BhY2UgZWdsCisgCisgI2RlZmluZSBBTkdMRV9HTF9P
QkpFQ1RTX1goUFJPQykgXAorQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJlTXRsOwor
IGNsYXNzIFByb2dyYW1NdGw7CisgY2xhc3MgU2FtcGxlck10bDsKKyBjbGFzcyBUcmFuc2Zvcm1G
ZWVkYmFja010bDsKKytjbGFzcyBTdXJmYWNlTXRsUHJvdG9jb2w7CisgCisgQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCisgCitAQCAtMTI4LDcgKzEzOSw4
IEBAIGNvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRBdHRyaWJ1dGVTaXplID0gNCAqIHNpemVvZihm
bG9hdCk7CisgLy8gTWV0YWwgbGltaXRzCisgY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJC
dWZmZXJzICAgICA9IDMxOworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMg
ICAgPSAxNjsKKy1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAq
IDEwMjQ7CisrY29uc3RleHByIHNpemVfdCBrSW5saW5lQ29uc3REYXRhTWF4U2l6ZSA9IDQgKiAx
MDI0OworK2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5l
Q29uc3REYXRhTWF4U2l6ZTsKKyBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAg
ICAgID0gMTsKKyAKKyBjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlk
ZUFsaWdubWVudCA9IDQ7CitAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworIGNvbnN0ZXhwciB1aW50MzJf
dCBrQXJndW1lbnRCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgPSBrVW5pZm9ybUJ1ZmZlclNldHRp
bmdPZmZzZXRNaW5BbGlnbm1lbnQ7CisgY29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZm
ZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKyAKKy0vLyBGcm9udCBlbmQgYmluZGluZyBsaW1p
dHMKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4
R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7CisgCitA
QCAtMTU1LDIxICsxNjcsMjMgQEAgY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtNYXhWZXIKKyBjb25zdGV4cHIg
dWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmlu
ZGluZ0luZGV4ICsgMTsKKyAvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IHVuaWZvcm1zOgor
IGNvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKy0vLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBh
cmd1bWVudCBidWZmZXIgb3Igc3RhcnRpbmcgZGlzY3JldGUgc2xvdAorLWNvbnN0ZXhwciB1aW50
MzJfdCBrVUJPQXJndW1lbnRCdWZmZXJCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sg
QnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qga1RyYW5zZm9ybUZlZWRiYWNrQmluZGlu
Z0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisrLy8gQmluZGluZyBp
bmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJlIG1vZGVzCisrY29uc3RleHByIHVpbnQz
Ml90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZl
ZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBhcmd1
bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmluZGlu
Z0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXggKyAxOworIAor
LWNvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tBbGwgPSAweGZmOyAgLy8gT25seSA4IGJp
dHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKytjb25zdGV4cHIgdWludDMyX3Qga1N0ZW5jaWxNYXNr
QWxsID0gMHhmZjsgIC8vIE9ubHkgOCBiaXQgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKyAKKyAvLyBU
aGlzIHNwZWNpYWwgY29uc3RhbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFydGljdWxh
ciB2ZXJ0ZXggZGVzY3JpcHRvcidzIGJ1ZmZlciBsYXlvdXQKKyAvLyBpbmRleCBpcyB1bnVzZWQu
CisgY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVydGV4U3RlcEZ1bmN0aW9uSW52
YWxpZCA9CisgICAgIHN0YXRpY19jYXN0PE1UTFZlcnRleFN0ZXBGdW5jdGlvbj4oMHhmZik7Cisg
CistY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsKKy0KKy1jb25zdGV4cHIg
c2l6ZV90IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUgPSBzaXplb2YodWludDY0X3QpOworK2Nv
bnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKKyAKKy1jb25zdGV4cHIg
Z2w6OlZlcnNpb24ga01heFN1cHBvcnRlZEdMVmVyc2lvbiA9IGdsOjpWZXJzaW9uKDMsIDApOwor
K2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyAKKyAvLyBXb3JrLWFyb3VuZCB0aGUgZW51bSBpcyBub3QgYXZhaWxhYmxlIG9u
IG1hY09TCisgI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCitAQCAt
MTc5LDEzICsxOTMsMTEgQEAgY29uc3RleHByIE1UTEJsaXRPcHRpb24ga0JsaXRPcHRpb25Sb3dM
aW5lYXJQVlJUQyAgICAgICAgICA9IE1UTEJsaXRPcHRpb25Sb3dMaW4KKyAjZW5kaWYKKyAKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRSAxCisgdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CisgdXNpbmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE1UTFJl
bmRlclN0YWdlczsKKyBjb25zdGV4cHIgTVRMUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRl
eCAgID0gTVRMUmVuZGVyU3RhZ2VWZXJ0ZXg7CisgY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBr
UmVuZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CisgI2Vsc2UKKy0j
ICAgIGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMAorIHVzaW5nIFRleHR1cmVT
d2l6emxlQ2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CisgdXNp
bmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IGludDsKKyBjb25zdGV4cHIgUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRleCAgICAgICAg
ICAgICAgICAgID0gMTsKK0BAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxw
ZXI8ZWdsOjpEaXNwbGF5PgorIHsKKyAgICAgdXNpbmcgSW1wbFR5cGUgPSBEaXNwbGF5TXRsOwor
IH07CistCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNl
PgorK3sKKysgICAgdXNpbmcgSW1wbFR5cGUgPSBTdXJmYWNlTXRsUHJvdG9jb2w7CisrfTsKKyB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB1c2luZyBHZXRJbXBsVHlwZSA9IHR5cGVuYW1lIEltcGxU
eXBlSGVscGVyPFQ+OjpJbXBsVHlwZTsKKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1HZXRJ
bXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpfTm9ubnVsbCBnbE9iamVjdCkKKytHZXRJbXBs
VHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpnbE9iamVjdCkKKyB7CisgICAgIHJldHVybiBHZXRJ
bXBsQXM8R2V0SW1wbFR5cGU8VD4+KGdsT2JqZWN0KTsKKyB9CitAQCAtMzQ2LDIxICszNjIsMTYg
QEAgdXNpbmcgQXV0b09iakNPYmogPSBBdXRvT2JqQ1B0cjxUICo+OworIAorIC8vIE5PVEU6IFNo
YXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMQorIHVzaW5nIFNoYXJlZEV2ZW50UmVm
ID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+PjsKKyAjZWxzZQorLSMgICAgZGVmaW5l
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMAorIHVzaW5nIFNoYXJlZEV2ZW50UmVmICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBBdXRvT2JqQ09iajxOU09iamVjdD47
CisgI2VuZGlmCisgCisgLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRleCB1c2VkIGJ5IE1ldGFsIGJh
Y2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1pcG1hcCBsZXZlbCBpbnN0ZWFk
CisgLy8gb2YgInZpcnR1YWwiIGxldmVsIG1vZGlmaWVkIGJ5IE9wZW5HTCdzIGJhc2UgbGV2ZWwu
CisgdXNpbmcgTWlwbWFwTmF0aXZlTGV2ZWwgPSBnbDo6TGV2ZWxJbmRleFdyYXBwZXI8dWludDMy
X3Q+OworLQorIGNvbnN0ZXhwciBNaXBtYXBOYXRpdmVMZXZlbCBrWmVyb05hdGl2ZU1pcExldmVs
KDApOworLQorIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKKy0KKyBjbGFzcyBJbWFn
ZU5hdGl2ZUluZGV4IGZpbmFsCisgeworICAgcHVibGljOgorQEAgLTM3MCw1NSArMzgxLDQyIEBA
IGNsYXNzIEltYWdlTmF0aXZlSW5kZXggZmluYWwKKyAgICAgICAgIG1OYXRpdmVJbmRleCA9IGds
OjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExldmVsSW5k
ZXgoKSAtIGJhc2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjLmdldExheWVySW5kZXgoKSwgc3JjLmdldExheWVyQ291bnQoKSk7
CisgICAgIH0KKy0KKyAgICAgc3RhdGljIEltYWdlTmF0aXZlSW5kZXggRnJvbUJhc2VaZXJvR0xJ
bmRleChjb25zdCBnbDo6SW1hZ2VJbmRleCAmc3JjKQorICAgICB7CisgICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOworICAgICB9CistCisgICAgIE1pcG1hcE5hdGl2ZUxl
dmVsIGdldE5hdGl2ZUxldmVsKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJuIE1pcG1h
cE5hdGl2ZUxldmVsKG1OYXRpdmVJbmRleC5nZXRMZXZlbEluZGV4KCkpOworICAgICB9CistCisg
ICAgIGdsOjpUZXh0dXJlVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmdldFR5cGUoKTsgfQorICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4g
bU5hdGl2ZUluZGV4LmdldExheWVySW5kZXgoKTsgfQorICAgICBHTGludCBnZXRMYXllckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmdldExheWVyQ291bnQoKTsgfQorICAgICBH
TGludCBjdWJlTWFwRmFjZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmN1YmVN
YXBGYWNlSW5kZXgoKTsgfQorLQorICAgICBib29sIGlzTGF5ZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1OYXRpdmVJbmRleC5pc0xheWVyZWQoKTsgfQorICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbU5hdGl2ZUluZGV4Lmhhc0xheWVyKCk7IH0KKyAgICAgYm9vbCBoYXMzRExheWVy
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQorICAgICBib29s
IHVzZXNUZXgzRCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC51c2VzVGV4M0QoKTsgfQor
LQorICAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7
IH0KKy0KKyAgICAgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGdldExheWVySXRlcmF0b3IoR0xp
bnQgbGF5ZXJDb3VudCkgY29uc3Q7CistCisgICBwcml2YXRlOgorICAgICBnbDo6SW1hZ2VJbmRl
eCBtTmF0aXZlSW5kZXg7CisgfTsKKy0KKyBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4SXRlcmF0b3Ig
ZmluYWwKKyB7CisgICBwdWJsaWM6CisgICAgIEltYWdlTmF0aXZlSW5kZXggbmV4dCgpIHsgcmV0
dXJuIEltYWdlTmF0aXZlSW5kZXgobU5hdGl2ZUluZGV4SXRlLm5leHQoKSwgMCk7IH0KKyAgICAg
SW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRl
eChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAwKTsgfQorICAgICBib29sIGhhc05leHQoKSBj
b25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXhJdGUuaGFzTmV4dCgpOyB9CistCisgICBwcml2YXRl
OgorICAgICAvLyBUaGlzIGNsYXNzIGlzIG9ubHkgY29uc3RydWN0YWJsZSBmcm9tIEltYWdlTmF0
aXZlSW5kZXgKKyAgICAgZnJpZW5kIGNsYXNzIEltYWdlTmF0aXZlSW5kZXg7CistCisgICAgIGV4
cGxpY2l0IEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcihjb25zdCBnbDo6SW1hZ2VJbmRleEl0ZXJh
dG9yICZiYXNlWmVyb1NyYykKKyAgICAgICAgIDogbU5hdGl2ZUluZGV4SXRlKGJhc2VaZXJvU3Jj
KQorICAgICB7fQorLQorICAgICBnbDo6SW1hZ2VJbmRleEl0ZXJhdG9yIG1OYXRpdmVJbmRleEl0
ZTsKKyB9OworLQorIHVzaW5nIENsZWFyQ29sb3JWYWx1ZUJ5dGVzID0gc3RkOjphcnJheTx1aW50
OF90LCA0ICogc2l6ZW9mKGZsb2F0KT47CistCisgY2xhc3MgQ2xlYXJDb2xvclZhbHVlCisgewor
ICAgcHVibGljOgorQEAgLTQzNywyMiArNDM1LDE1IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQor
ICAgICBjb25zdGV4cHIgQ2xlYXJDb2xvclZhbHVlKGNvbnN0IENsZWFyQ29sb3JWYWx1ZSAmc3Jj
KQorICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZhbHVlQnl0
ZXMpCisgICAgIHt9CistCisgICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkgY29u
c3Q7CistCisgICAgIFBpeGVsVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0K
Ky0KKyAgICAgY29uc3QgQ2xlYXJDb2xvclZhbHVlQnl0ZXMgJmdldFZhbHVlQnl0ZXMoKSBjb25z
dCB7IHJldHVybiBtVmFsdWVCeXRlczsgfQorLQorICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJh
dG9yPShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7CistCisgICAgIHZvaWQgc2V0QXNGbG9h
dChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgdm9pZCBzZXRBc0lu
dChpbnQzMl90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOworICAgICB2b2lk
IHNldEFzVUludCh1aW50MzJfdCByLCB1aW50MzJfdCBnLCB1aW50MzJfdCBiLCB1aW50MzJfdCBh
KTsKKy0KKyAgIHByaXZhdGU6CisgICAgIFBpeGVsVHlwZSBtVHlwZTsKKy0KKyAgICAgdW5pb24K
KyAgICAgeworICAgICAgICAgc3RydWN0CitAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFy
Q29sb3JWYWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIHVpbnQzMl90IG1SZWRVLCBtR3Jl
ZW5VLCBtQmx1ZVUsIG1BbHBoYVU7CisgICAgICAgICB9OworLQorICAgICAgICAgQ2xlYXJDb2xv
clZhbHVlQnl0ZXMgbVZhbHVlQnl0ZXM7CisgICAgIH07CisgfTsKK0BAIC00ODMsNyArNDczLDcg
QEAgY2xhc3MgRXJyb3JIYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBsaW5lKSA9IDA7CisgCistICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICplcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSA9IDA7CitAQCAt
NDkzLDcgKzQ4Myw3IEBAIGNsYXNzIENvbnRleHQgOiBwdWJsaWMgRXJyb3JIYW5kbGVyCisgewor
ICAgcHVibGljOgorICAgICBDb250ZXh0KERpc3BsYXlNdGwgKmRpc3BsYXlNdGwpOworLSAgICBf
TnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmljZSgpIGNvbnN0OworKyAgICBpZDxN
VExEZXZpY2U+IGdldE1ldGFsRGV2aWNlKCkgY29uc3Q7CisgICAgIG10bDo6Q29tbWFuZFF1ZXVl
ICZjbWRRdWV1ZSgpOworIAorICAgICBEaXNwbGF5TXRsICpnZXREaXNwbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbURpc3BsYXk7IH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbnN0YW50cy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25z
dGFudHMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyMGIyY2QKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3Rh
bnRzLmgKK0BAIC0wLDAgKzEsNzMgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysvLyBtdGxfY29tbW9uLmg6
CisrLy8gICAgICBEZWNsYXJlcyBudW1lcmljYWwgY29uc3RhbnRzIHVzZWQgaW4gTWV0YWwuCisr
Ly8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xhc3MuCisrLy8KKysKKysjaWZuZGVmIExJQkFO
R0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNfSAorKyNkZWZpbmUgTElCQU5HTEVfUkVO
REVSRVJfTUVUQUxfTVRMX0NPTlNUQU5UU19ICisrI2luY2x1ZGUgImxpYkFOR0xFL0NvbnN0YW50
cy5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L2FuZ2xldHlwZXMuaCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sK
KysKKysvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IHZhcmlhYmxlIG1heCBudW1iZXIgb2YgdmVydGV4
IGF0dHJpYnV0ZXMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0dHJpYnMgPSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOworKy8vIE5PVEUoaHFsZSk6IHN1cHBvcnQgdmFyaWFibGUgbWF4
IG51bWJlciBvZiByZW5kZXIgdGFyZ2V0cworK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4UmVuZGVy
VGFyZ2V0cyA9IDQ7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJVQk9zID0gMTI7
CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhVQk9TaXplICAgID0gMTYzODQ7CisrCisrY29uc3Rl
eHByIHNpemVfdCBrRGVmYXVsdEF0dHJpYnV0ZVNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKysK
KysvLyBNZXRhbCBsaW1pdHMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZlcnMg
ICAgID0gMzE7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJTYW1wbGVycyAgICA9IDE2
OworK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
Kytjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0
RGF0YU1heFNpemU7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhWaWV3cG9ydHMgICAgICAgICA9
IDE7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGln
bm1lbnQgPSA0OworKy8vIEFsaWdubWVudCByZXF1aXJlbWVudCBmb3Igb2Zmc2V0IHBhc3NlZCB0
byBzZXRWZXJ0ZXh8RnJhZ21lbnRCdWZmZXIKKysjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKytjb25zdGV4cHIgdWludDMyX3Qga1VuaWZvcm1CdWZmZXJTZXR0aW5n
T2Zmc2V0TWluQWxpZ25tZW50ID0gMjU2OworKyNlbHNlCisrY29uc3RleHByIHVpbnQzMl90IGtV
bmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisrI2VuZGlmCisrY29u
c3RleHByIHVpbnQzMl90IGtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCAgICAgICA9IDQ7Cisr
Y29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1
NjsKKysKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworK2NvbnN0ZXhwciB1aW50MzJfdCBr
TWF4R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworK2NvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7Cisr
CisrLy8gQmluZGluZyBpbmRleCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKKytjb25z
dGV4cHIgdWludDMyX3Qga1Zib0JpbmRpbmdJbmRleFN0YXJ0ID0gMDsKKysKKysvLyBCaW5kaW5n
IGluZGV4IGZvciBkZWZhdWx0IGF0dHJpYnV0ZSBidWZmZXI6CisrY29uc3RleHByIHVpbnQzMl90
IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtN
YXhWZXJ0ZXhBdHRyaWJzOworKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRyaXZlciB1bmlmb3JtczoK
Kytjb25zdGV4cHIgdWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0
IHVuaWZvcm1zOgorK2NvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0lu
ZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKysvLyBCaW5kaW5nIGluZGV4
IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qg
a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJ
bmRleCArIDE7CisrLy8gQmluZGluZyBpbmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJl
IG1vZGVzCisrY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmlu
ZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5k
aW5nIGluZGV4IGZvciBVQk8ncyBhcmd1bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qg
a1VCT0FyZ3VtZW50QnVmZmVyQmluZGluZ0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNCaW5kaW5nSW5kZXggKyAxOworKworK2NvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tB
bGwgPSAweGZmOyAgLy8gT25seSA4IGJpdHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrI2VuZGlmCitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgoraW5kZXggNGExMmE5
MC4uMmRhNzQyMSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X21hcC5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zv
cm1hdF9tYXAuanNvbgorQEAgLTc0LDExICs3NCwxMSBAQAorICAgICAgICAgICAgICJEMzJfRkxP
QVQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQiLAorICAgICAgICAgICAgICJTOF9VSU5U
IjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAorICAgICAgICAgICAgICJEMzJfRkxPQVRfUzhY
MjRfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOCIsCistICAgICAg
ICAgICAgIkIxMEcxMFIxMEEyX1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtIiwK
KyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKKyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRS
R0IxMEEyVW5vcm0iLAorICAgICAgICAgICAgICJSMTFHMTFCMTBfRkxPQVQiOiAiTVRMUGl4ZWxG
b3JtYXRSRzExQjEwRmxvYXQiLAorLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAi
TVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKysgICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVE
RVhQIjogIk1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQiLAorKyAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm0iCisgICAgICAgICB9LAorICAgICAgICAg
Im1hcF9pb3MiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJNVExQaXhlbEZvcm1h
dEI1RzZSNVVub3JtIiwKK0BAIC05Miw2ICs5Miw3IEBACisgICAgICAgICAgICAgIlBWUlRDMV9S
R0JfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBf
c1JHQiIsCisgICAgICAgICAgICAgIlBWUlRDMV9SR0JBXzJCUFBfVU5PUk1fU1JHQl9CTE9DSyI6
ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfMkJQUF9zUkdCIiwKKyAgICAgICAgICAgICAiUFZS
VEMxX1JHQkFfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdC
QV80QlBQX3NSR0IiLAorKyAgICAgICAgICAgICJFVEMxX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJN
VExQaXhlbEZvcm1hdEVUQzJfUkdCOCIsCisgICAgICAgICAgICAgIkVUQzJfUjhHOEI4X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4IiwKKyAgICAgICAgICAgICAiRVRDMl9S
OEc4QjhfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKKyAgICAg
ICAgICAgICAiRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJf
UkdCOEExIiwKK0BAIC0xMDAsMzkgKzEwMSwzOCBAQAorICAgICAgICAgICAgICJFVEMyX1I4RzhC
OEE4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCisgICAgICAg
ICAgICAgIkVBQ19SMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0i
LAorICAgICAgICAgICAgICJFQUNfUjExX1NOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFD
X1IxMVNub3JtIiwKKy0gICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVBQ19SRzExVW5vcm0iLAorKyAgICAgICAgICAgICJFQUNfUjExRzExX1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtIiwKKyAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0iLAorLSAg
ICAgICAgICAgICJBU1RDXzR4NF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0
X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNHg0X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzR4NF9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdC
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCistICAgICAgICAgICAgIkFT
VENfNXg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKy0gICAg
ICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X3NS
R0IiLAorLSAgICAgICAgICAgICJBU1RDXzZ4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfNng1X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNng1X1NSR0JfQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIiLAorLSAgICAgICAgICAgICJBU1RD
XzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIsCistICAgICAg
ICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERS
IiwKKy0gICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzh4Nl9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCistICAgICAgICAgICAgIkFTVENfOHg2X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ184
eDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorLSAgICAgICAg
ICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIs
CistICAgICAgICAgICAgIkFTVENfMTB4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTB4NV9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEweDVfU1JHQl9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTB4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg2X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTB4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IiLAorLSAg
ICAgICAgICAgICJBU1RDXzEweDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDhfTERSIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzEweDhfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENf
MTB4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCistICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEy
eDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhl
bEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTJfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JHQiIKKysg
ICAgICAgICAgICAiQVNUQ180eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4
NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzV4NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyIg
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ182eDVf
U1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKysgICAgICAgICAg
ICAiQVNUQ182eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9zUkdCIiwK
KysgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDhfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorKyAgICAg
ICAgICAgICJBU1RDXzEweDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDZf
c1JHQiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NL
IiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENf
MTJ4MTBfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IiLAorKyAg
ICAgICAgICAgICJBU1RDXzEyeDEyX1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ180eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxP
Q0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKysgICAgICAg
ICAgICAiQVNUQ182eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERS
IiwKKysgICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ184eDVfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1f
QkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKysgICAgICAgICAgICAiQVNU
Q184eDhfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfTERSIiwKKysgICAg
ICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4
NV9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfTERSIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHgxMF9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCisrICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMF9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEyeDEyX1VOT1JNX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTJ4MTJfTERSIgorICAgICAgICAgfSwKKyAgICAgICAgICJtYXBfbWFj
IjogeworLSAgICAgICAgICAgICJEMTZfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5v
cm0iLAorICAgICAgICAgICAgICJEMjRfVU5PUk1fUzhfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERl
cHRoMjRVbm9ybV9TdGVuY2lsOCIsCisgICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NL
IjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEiLAorICAgICAgICAgICAgICJCQzFfUkdCQV9VTk9S
TV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiIsCitAQCAtMTc1LDkg
KzE3NSw3IEBACisgICAgICAgICAgICAgIkQzMl9VTk9STSI6ICJEMzJfRkxPQVQiCisgICAgICAg
ICB9LAorICAgICAgICAgIm92ZXJyaWRlX2lvcyI6IHsKKy0gICAgICAgICAgICAiRDI0X1VOT1JN
X1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiLAorLSAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiRDMyX0ZMT0FUIiwKKy0gICAgICAgICAgICAiRVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0si
OiAiRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0siCisrICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9V
SU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgorICAgICAgICAgfSwKKyAgICAgICAgICJvdmVy
cmlkZV9tYWMiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJSOEc4QjhBOF9VTk9S
TSIsCitAQCAtMjAzLDcgKzIwMSw4IEBACisgICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1f
QkxPQ0siOiAiUjE2RzE2X1VOT1JNIiwKKyAgICAgICAgICAgICAiRUFDX1IxMUcxMV9TTk9STV9C
TE9DSyI6ICJSMTZHMTZfU05PUk0iCisgICAgICAgICB9LAorLSAgICAgICAgImQyNHM4X2ZhbGxi
YWNrc19tYWMiOiB7CisrICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKysgICAgICAgICAgICAi
QjhHOFI4QThfVU5PUk0iOiAiUjhHOEI4QThfVU5PUk0iLAorICAgICAgICAgICAgICJEMjRfVU5P
Uk1fUzhfVUlOVCI6ICJEMzJfRkxPQVRfUzhYMjRfVUlOVCIKKyAgICAgICAgIH0sCisgICAgICAg
ICAiY2FwcyI6IHsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQoraW5kZXggYzIxYzU5My4uZDNlYTViMCAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9n
ZW4ubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxl
X2F1dG9nZW4ubW0KK0BAIC0yOCw3ICsyOCw2IEBACisgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3Qg
RGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQor
IHsKKyAgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCAgICA9IGludGVuZGVkRm9ybWF0SWRfOwor
LQorICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZp
Y2UoKTsKKyAKKyAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KK0BAIC00MywxNSArNDIsMjYgQEAK
KyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFr
OworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNOgor
KyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgY2Fz
ZSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOgorIAorLSAgICAgICAgICAgIHRoaXMt
Pm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07CistICAgICAgICAg
ICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VO
T1JNOworKyAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZv
cm1hdFN1cHBvcnRlZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworKyAgICAgICAgICAgICAg
ICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm07Cisr
ICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpS
OEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBu
dWxscHRyOworKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9
IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NY
IHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6
OkI4RzhSOEE4X1VOT1JNOgorIAorICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworQEAgLTYxLDYgKzcxLDcgQEAKKyAgICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGNh
c2UgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STV9TUkdCOgorIAorICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CitA
QCAtNzAsNiArODEsMzYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19N
QUNDQVRBTFlTVAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKKysK
KysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgx
NlVub3JtOworKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1h
dElEOjpEMTZfVU5PUk07CisrICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxs
cHRyOworKworKyAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrI2Vsc2UgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUCisrICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgorKworKyAg
ICAgICAgICAgIGlmIChbbWV0YWxEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBw
bGUzXSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisrICAgICAgICAgICAgICAgIHRoaXMt
PmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk07CisrICAgICAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVDsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworKyAgICAg
ICAgICAgIH0KKysKKysgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1Nf
TUFDQ0FUQUxZU1QKKyAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6Cisg
CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdDsKK0BAIC04MTUsMTUgKzg1Niw2IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenps
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpEMTZfVU5PUk06CistCistICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybTsKKy0gICAgICAgICAgICB0aGlzLT5hY3R1
YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOworLSAgICAgICAgICAgIHRo
aXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAgICB0aGlzLT5zd2l6
emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICAgICAgICAgY2FzZSBhbmds
ZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOgorIAorICAgICAgICAgICAgIGlmIChtZXRh
bERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCAmJgorQEAgLTEyODEs
NyArMTMxMyw3IEBACisgCisgICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RUFDX1IxMUcx
MV9VTk9STV9CTE9DSzoKKyAKKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RUFDX1JHMTFVbm9ybTsKKysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1h
dCAgICA9IE1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtOworICAgICAgICAgICAgIHRoaXMtPmFj
dHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VOT1JNX0JMT0NLOwor
ICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAKK0BAIC0xMzA2
LDYgKzEzMzgsMTUgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAg
ICAgICAgICAgIGJyZWFrOworIAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFf
UjhHOEI4X1VOT1JNX0JMT0NLOgorKworKyAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CisrICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLOworKyAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysKKysgICAgICAgICAgICB0
aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAgICAgICAgIGJyZWFrOworKworICAgICAgICAg
Y2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoKKyAKKyAgICAg
ICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFf
c1JHQjsKK0BAIC0xNDU5LDE1ICsxNTAwLDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6
Rm9ybWF0SUQ6OkQxNl9VTk9STToKKy0KKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OworLSAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7CistICAgICAgICAgICAgdGhp
cy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworLQorLSAgICAgICAgICAgIHRoaXMtPnN3aXp6
bGVkID0gZmFsc2U7CistICAgICAgICAgICAgYnJlYWs7CistCisgICAgICAgICBjYXNlIGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ6CisgCisgICAgICAgICAgICAgdGhpcy0+bWV0
YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsODsKK0BAIC0x
NDc3LDE1ICsxNTA5LDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLOgorLQorLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CistICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLOworLSAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1h
dEludmFsaWQ7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9m
b3JtYXRfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0
aWxzLmgKK2luZGV4IGJiYjI3ZDQuLmYzOTY4MWQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCitAQCAtNTUsNiArNTUsMTEgQEAgc3RydWN0
IEZvcm1hdENhcHMKKyAgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAg
ICBib29sIG11bHRpc2FtcGxlICAgICAgICAgID0gZmFsc2U7ICAvLyBjYW4gYmUgdXNlZCBhcyBN
U0FBIHRhcmdldAorICAgICBib29sIHJlc29sdmUgICAgICAgICAgICAgID0gZmFsc2U7ICAvLyBD
YW4gYmUgdXNlZCBhcyByZXNvbHZlIHRhcmdldAorKyAgICBib29sIGNvbXByZXNzZWQgICAgICAg
ICAgID0gZmFsc2U7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcyAgICAgPSAwOworKyAgICBO
U1VJbnRlZ2VyIHBpeGVsQnl0ZXNNU0FBID0gMDsKKysgICAgTlNVSW50ZWdlciBjaGFubmVscyAg
ICAgICA9IDA7CisrICAgIHVpbnQ4X3QgYWxpZ25tZW50ICAgICAgICAgPSAwOworIH07CisgCisg
Ly8gUGl4ZWwgZm9ybWF0CitAQCAtMTQzLDYgKzE0OCw3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwcml2YXRlOgorICAgICB2b2lkIGluaXROYXRp
dmVGb3JtYXRDYXBzQXV0b2dlbihjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKyAgICAgdm9p
ZCBpbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKysKKyAg
ICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0YWJsZSwKK0BAIC0xNTAsNiArMTU2LDE3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11
bHRpc2FtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpOworKworKyAgICB2b2lkIHNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGJ5dGVzUGVyQ2hhbm5lbCwK
KysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworKworICAgICB2
b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHdyaXRhYmxlLAorQEAgLTE1OSw4ICsxNzYsMjQgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwg
OiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JS
ZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUp
OworIAorKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisr
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjb2xvclJlbmRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRo
UmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0ZXNQZXJD
aGFubmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscyk7Cisr
CisgICAgIHZvaWQgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0
SWQsIGJvb2wgZmlsdGVyYWJsZSk7CisgCisrICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0ZvckRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdXBwb3J0c2lPUzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHN1cHBvcnRzaU9TNCk7CisrCisgICAgIHN0ZDo6YXJyYXk8Rm9ybWF0LCBhbmds
ZTo6a051bUFOR0xFRm9ybWF0cz4gbVBpeGVsRm9ybWF0VGFibGU7CisgICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDxNVExQaXhlbEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlOworICAgICAvLyBPbmUgZm9yIHRpZ2h0bHkgcGFja2VkIGJ1ZmZlcnMsIG9uZSBmb3Ig
Z2VuZXJhbCBjYXNlcy4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9y
bWF0X3V0aWxzLm1tCitpbmRleCBmYjFkNWNhLi40MTZhZDVjIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0KKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLm1tCitAQCAtNzcsOCArNzcsOCBA
QCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRh
YmxlLAorICAgICAgICAgICAgIHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlciA9CisgICAgICAgICAg
ICAgICAgIG10bEZvcm1hdC5nZXRDYXBzKCkuY29sb3JSZW5kZXJhYmxlIHx8IG10bEZvcm1hdC5n
ZXRDYXBzKCkuZGVwdGhSZW5kZXJhYmxlOworICAgICAgICAgICAgIHRleHR1cmVDYXBzLnRleHR1
cmFibGUgICAgICAgID0gdHJ1ZTsKKy0gICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5ibGVuZGFibGUg
ICAgICAgICA9IG10bEZvcm1hdC5nZXRDYXBzKCkuYmxlbmRhYmxlOworICAgICAgICAgICAgIHRl
eHR1cmVDYXBzLnRleHR1cmVBdHRhY2htZW50ID0gdGV4dHVyZUNhcHMucmVuZGVyYnVmZmVyOwor
KyAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0Lmdl
dENhcHMoKS5ibGVuZGFibGU7CisgICAgICAgICB9CisgCisgICAgICAgICBpZiAoZm9ybWF0Q2Fw
cy5tdWx0aXNhbXBsZSkKK0BAIC0xNDgsMTIgKzE0OCw2IEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJl
Q2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAvLyBXZWJH
TCBhbGxvd3MgdW5zd2l6emxlZCBtYXBwaW5nIHdoZW4gc3dpenpsaW5nIGlzIG5vdCBhdmFpbGFi
bGUuIE5vIG5lZWQgdG8gY29udmVydC4KKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQor
LSAgICBpZiAoc3JjRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9S
TV9CTE9DSyAmJgorLSAgICAgICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpF
VEMyX1I4RzhCOF9VTk9STV9CTE9DSykKKy0gICAgeworLSAgICAgICAgLy8gRVRDMSBSR0IgJiBF
VEMyIFJHQiBhcmUgdGVjaG5pY2FsbHkgdGhlIHNhbWUuCistICAgICAgICByZXR1cm4gZmFsc2U7
CistICAgIH0KKyAgICAgcmV0dXJuIHNyY0Zvcm1hdElkICE9IGFjdHVhbEZvcm1hdElkOworIH0K
KyAKK0BAIC0xOTIsOCArMTg2LDcgQEAgdm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0
IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ld
LmluaXQoZGlzcGxheSwgZm9ybWF0SWQpOworICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
Y2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbbVBpeGVsRm9ybWF0VGFibGVbaV0u
bWV0YWxGb3JtYXRdOworIAorLSAgICAgICAgaWYgKCFtUGl4ZWxGb3JtYXRUYWJsZVtpXS5jYXBz
LT5kZXB0aFJlbmRlcmFibGUgJiYKKy0gICAgICAgICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5h
Y3R1YWxGb3JtYXRJZCAhPSBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5pbnRlbmRlZEZvcm1hdElkKQor
KyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVhbEZvcm1hdElkICE9IG1QaXhl
bEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCisgICAgICAgICB7CisgICAgICAgICAg
ICAgbVBpeGVsRm9ybWF0VGFibGVbaV0udGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBhbmdsZTo6R2V0
TG9hZEZ1bmN0aW9uc01hcCgKKyAgICAgICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
aW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCitAQCAtMjA0LDYgKzE5Nywx
OSBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1h
dFRhYmxlLAorICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sxXVtpXS5pbml0KGZvcm1hdElk
LCB0cnVlKTsKKyAgICAgfQorIAorKyAgICAvLyBOT1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBBTUQn
cyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJucyB6ZXJvIGR1cmluZyBz
YW1wbGluZzoKKysgICAgaWYgKGRpc3BsYXktPmdldFJlbmRlcmVyRGVzY3JpcHRpb24oKS5maW5k
KCJBTUQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgeworKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisrICAgICAgICBGb3JtYXQgJmZvcm1hdCA9Cisr
ICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQpXTsKKysgICAgICAgIGZvcm1hdC5hY3R1YWxG
b3JtYXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ7Cisr
ICAgICAgICBmb3JtYXQubWV0YWxGb3JtYXQgICAgICAgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdF9TdGVuY2lsODsKKysgICAgICAgIGZvcm1hdC5pbml0RnVuY3Rpb24gICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBudWxscHRy
OworKyAgICAgICAgZm9ybWF0LmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW01U
TFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4XTsKKysgICAgfQorKworICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorQEAgLTIzOSwxMCArMjQ1LDIzIEBA
IHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJs
ZSkKKyB7CisgICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxl
LCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCistICAg
ICAgICAgICAgICAgICAgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyt9
Cisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJ
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlc29sdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNvbG9yUmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgY2hhbm5lbHMpCisreworKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBm
aWx0ZXJhYmxlLCB3cml0YWJsZSwgYmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29s
b3JSZW5kZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgIGZhbHNlLCBwaXhlbEJ5dGVzLCBjaGFu
bmVscyk7CisgfQorIAorLXZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXQgaWQsCisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBmb3JtYXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKK0BAIC0yNTAs
NiArMjY5LDIwIEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJs
ZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
c29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlKQorK3sKKysgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFi
bGUsIGJsZW5kYWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworK30KKyt2b2lkIEZvcm1h
dFRhYmxlOjpzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmxlbmRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtdWx0aXNhbXBsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
b2x2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxz
KQorIHsKKyAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5maWx0ZXJhYmxlICAg
ICAgPSBmaWx0ZXJhYmxlOworICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLndy
aXRhYmxlICAgICAgICA9IHdyaXRhYmxlOworQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBHZW5l
cmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAg
bU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5ibGVuZGFibGUgICAgICAgPSBibGVuZGFi
bGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ubXVsdGlzYW1wbGUgICAg
ID0gbXVsdGlzYW1wbGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVz
b2x2ZSAgICAgICAgID0gcmVzb2x2ZTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICAgPSBwaXhlbEJ5dGVzOworKyAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBICA9IHBpeGVsQnl0ZXM7CisrICAgIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgICAgICAgID0gY2hhbm5lbHM7Cisr
ICAgIGlmIChjaGFubmVscyAhPSAwKQorKyAgICAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1Rh
YmxlW2lkXS5hbGlnbm1lbnQgPSBNQVgocGl4ZWxCeXRlcyAvIGNoYW5uZWxzLCAxVSk7CisgfQor
IAorIHZvaWQgRm9ybWF0VGFibGU6OnNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0IGZvcm1hdElkLCBib29sIGZpbHRlcmFibGUpCitAQCAtMjY1LDkgKzMwMywyNzQgQEAgdm9p
ZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwK
KyAgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgfQorIAorK3ZvaWQgRm9ybWF0VGFibGU6OmFk
anVzdEZvcm1hdENhcHNGb3JEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExQaXhlbEZvcm1hdCBpZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNp
T1MyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dXBwb3J0c2lPUzQpCisreworKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUKQorKworKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gbU5hdGl2
ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzOworKyAgICBOU1VJbnRlZ2VyIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhl
bEJ5dGVzTVNBQTsKKysgICAgTlNVSW50ZWdlciBhbGlnbm1lbnQgICAgICAgICAgICA9IG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50OworKworKy8vIE92ZXJyaWRlIHRo
ZSBjdXJyZW50IHBpeGVsQnl0ZXNSZW5kZXIKKysjICAgIGRlZmluZSBTUEVDSUZJQyhfcGl4ZWxG
b3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhl
bEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6
IDQ7IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVs
IGJ5dGVzIHJlbmRlciwgYW5kIE1TQUEKKysjICAgIGRlZmluZSBTUEVDSUZJQ19NU0FBKF9waXhl
bEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVzUmVuZGVyTVNBQSkgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBw
aXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNBQTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5
dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7
IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0
ZXNSZW5kZXIsIGFuZCBhbGlnbm1lbnQKKysjICAgIGRlZmluZSBTUEVDSUZJQ19BTElHTihfcGl4
ZWxGb3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyLCBfYWxpZ25tZW50KSBcCisrICAgICAgICBjYXNl
IF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5k
ZXI7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNB
QSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg
YWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIGJyZWFrCisrCisrICAgIGlmICghbU5hdGl2ZVBpeGVsRm9ybWF0
Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorKyAgICB7CisrICAgICAgICAvLyBPbiBBcHBsZUdQ
VUZhbWlseTQrLCB0aGVyZSBpcyBubyA0Ynl0ZSBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciByZW5k
ZXIgdGFyZ2V0cworKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQg
PyAxVSA6IDRVOworKyAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBNQVgobU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzLCBtaW5TaXplKTsKKysgICAgICAgIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gcGl4ZWxCeXRlc1JlbmRlcjsKKysgICAgICAgIGFsaWdubWVu
dCA9CisrICAgICAgICAgICAgc3VwcG9ydHNpT1M0ID8gTUFYKHBpeGVsQnl0ZXNSZW5kZXIgLyBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5uZWxzLCAxVSkgOiA0OworKyAgICB9
CisrCisrICAgIC8vIFRoaXMgbGlzdCBvZiB0YWJsZXMgc3RhcnRzIGZyb20gYSBnZW5lcmFsIG11
bHRpLXBsYXRmb3JtIHRhYmxlLAorKyAgICAvLyB0byBzcGVjaWZpYyBwbGF0Zm9ybXMgKGkuZS4g
aW9zMiwgaW9zNCkgaW5oZXJpdGluZyBmcm9tIHRoZSBwcmV2aW91cyB0YWJsZXMKKysKKysgICAg
Ly8gU3RhcnQgb2ZmIHdpdGggdGhlIGdlbmVyYWwgY2FzZQorKyAgICBzd2l0Y2ggKChOU1VJbnRl
Z2VyKWlkKQorKyAgICB7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVu
b3JtLCA0VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEExQkdSNVVub3JtLCA0
VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKysg
ICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDRVKTsKKysKKysgICAg
ICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworKyAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCA0VSk7CisrCisrICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworKyAgICAgICAg
U1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKysg
ICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRSR0JBOFNub3JtLCA0VSwgOFUpOwor
KyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUp
OworKworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDhVKTsK
KysgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisrCisr
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgOFUpOworKworKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgOFUpOworKworKyAgICAg
ICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2lsOCwgMVUpOworKyAgICB9CisrCisrICAg
IC8vIE92ZXJyaWRlIGJhc2VkIGlvczIKKysgICAgaWYgKHN1cHBvcnRzaU9TMikKKysgICAgewor
KyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVub3JtLCA4VSk7CisrICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDhVKTsKKysgICAgICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAgICAgICBT
UEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICAvLyBPdmVycmlkZSBiYXNlZCBvbiBpb3M0CisrICAgIGlmIChz
dXBwb3J0c2lPUzQpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRCNUc2
UjVVbm9ybSwgNlUsIDJVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJH
QkE4VW5vcm0sIDRVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm0sIDRVKTsKKysKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQkE4
VW5vcm1fc1JHQiwgNFUpOworKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdS
QThVbm9ybV9zUkdCLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRSR0JBOFNub3JtLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4
ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJ
R04oTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworKworKyAgICAgICAgICAgIFNQ
RUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0LCA0VSwgNFUpOworKworKyAg
ICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsIDRVLCA0
VSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICA9IHBpeGVsQnl0ZXNSZW5kZXI7CisrICAgIG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlc01TQUEgPSBwaXhlbEJ5dGVzUmVuZGVyTVNB
QTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9
IGFsaWdubWVudDsKKysKKysjICAgIHVuZGVmIFNQRUNJRklDCisrIyAgICB1bmRlZiBTUEVDSUZJ
Q19BTElHTgorKyMgICAgdW5kZWYgU1BFQ0lGSUNfTVNBQQorKyNlbmRpZgorKyAgICAvLyBtYWNP
UyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZvcm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhl
c2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQgdG8gY2hlY2sKKysgICAgLy8gdmFsaWQgTVJUIHNpemVz
IG9uIGlPUy4KKyt9CisrCisgdm9pZCBGb3JtYXRUYWJsZTo6aW5pdE5hdGl2ZUZvcm1hdENhcHMo
Y29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKKyB7CistICAgIGluaXROYXRpdmVGb3JtYXRDYXBz
QXV0b2dlbihkaXNwbGF5KTsKKysgICAgY29uc3QgYW5nbGU6OkZlYXR1cmVzTXRsICZmZWF0dXJl
c010bCA9IGRpc3BsYXktPmdldEZlYXR1cmVzKCk7CisrICAgIC8vIFNraXAgYXV0byByZXNvbHZl
IGlmIGVpdGhlciBoYXNEZXB0aC9TdGVuY2lsQXV0b1Jlc29sdmUgb3IgYWxsb3dNdWx0aXNhbXBs
ZVN0b3JlQW5kUmVzb2x2ZQorKyAgICAvLyBmZWF0dXJlIGFyZSBkaXNhYmxlZC4KKysgICAgYm9v
bCBzdXBwb3J0RGVwdGhBdXRvUmVzb2x2ZSA9IGZlYXR1cmVzTXRsLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVy
ZXNNdGwuYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZS5lbmFibGVkOworKyAgICBib29s
IHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJlc010bC5oYXNTdGVuY2lsQXV0b1Jl
c29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
ZWF0dXJlc010bC5hbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlLmVuYWJsZWQ7CisrICAg
IGJvb2wgc3VwcG9ydERlcHRoU3RlbmNpbEF1dG9SZXNvbHZlID0gc3VwcG9ydERlcHRoQXV0b1Jl
c29sdmUgJiYgc3VwcG9ydFN0ZW5jaWxBdXRvUmVzb2x2ZTsKKysKKysgICAgLy8gU291cmNlOiBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbWV0YWwvTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVz
LnBkZgorKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrCisrICAgIC8vICAgICAgICAgICAgfCAg
Zm9ybWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwg
IGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfCBieXRlc1BlckNoYW5uZWwgfCBjaGFubmVsCisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBOFVub3JtLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAgICAgICAgIGZhbHNlLCAgICAgICBmYWxzZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAxVSwgMVUpOworKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAg
dHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFI4U25vcm0sICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgyLCAxKSwgIHRydWUsICAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VW5vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5
KDEsIDEpLCAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHOFVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
RzhTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMiwgMSksICB0
cnVlLCAgMlUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVbm9y
bSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNub3Jt
LCAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1
ZSwgIDRVLCAyVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZVbm9y
bSwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVl
LCAgOFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNub3Jt
LCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUs
ICA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2RmxvYXQs
ICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgOFUsIDRV
KTsKKysKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAg
ICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
YmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRSR0JBOFVub3JtLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrICAg
IHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVub3JtX3NSR0IsICAgICB0cnVlLCAg
ICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwgICAgICB0cnVlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdC
QThTbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKysgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRy
dWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
ICAgNFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1f
c1JHQiwgICAgIHRydWUsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDIp
LCAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrCisrICAgIC8vICAgICAgICAg
ICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAg
ICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2RmxvYXQsICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgIDJVLCAxVSk7Cisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgNFUs
IDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIzMkZsb2F0LCAgICBkaXNw
bGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgICAgICB0cnVlLCAgICA0VSwgMVUpOworKworKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJH
RVRfT1NfTUFDQ0FUQUxZU1QKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAg
ICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11
bHRpc2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIGZh
bHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRydWUs
ICAyVSwgM1UpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwg
ICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCA0
VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgICAgICB0
cnVlLCAgICAgICAgICAgIGZhbHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAg
ICB0cnVlLCAgICAgIHRydWUsICAyVSwgNFUpOworKyNlbmRpZgorKworKyAgICAvLyAgICAgICAg
ICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRh
YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlIHwgIG11bHRp
c2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgICAgICBmYWxzZSwgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IHRydWUsICAgICAgdHJ1ZSwgIDRVLCAzVSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9y
bWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgbXVs
dGlzYW1wbGUgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAg
ICAgIHwgY29sb3JSZW5kZXJhYmxlICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWls
eSgxKSwgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0
c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAz
VSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICB8IGZp
bHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSAgfCAgbXVsdGlzYW1wbGUgICAg
ICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAor
KyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAg
ICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAg
ICAgICB0cnVlLCAyVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2
U2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4VWludCwgICAgICAg
ZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4U2ludCwgICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UjMyVWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAg
ICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEs
MSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UjMyU2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAg
ZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBm
YWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkcxNlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2Us
ICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICB0cnVlLCA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNp
bnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwg
MlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVaW50LCAgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThTaW50LCAgICAgZmFsc2UsICAgICAgICAg
ICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UkczMlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxz
ZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQTE2VWludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2U2lu
dCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgNFUp
OworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTMyVWludCwgICAgZmFsc2Us
ICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCAxNlUsIDRVKTsKKysg
ICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMlNpbnQsICAgIGZhbHNlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMTZVLCA0VSk7CisrCisrICAg
IC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxl
ICAgICAgICAgICAgICAgICAgICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgICAgICAgICAg
ICAgICAgICAgICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMkZsb2F0LCAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLDEpLCAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICAgICAgICB0cnVlLCAgOFUsIDJVKTsK
KysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMkZsb2F0LCAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVG
YW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAg
ICAgdHJ1ZSwgIDE2VSwgNFUpOworKworKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAgICAgICAgICAg
ICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwgZGVwdGhSZW5k
ZXJhYmxlICAgICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
c3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICAgICB0cnVlLCAgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFN0
ZW5jaWw4LCAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBmYWxzZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICAx
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0
ZW5jaWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFs
c2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxB
dXRvUmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwgIDhVLCAyVSk7
CisrLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdERlcHRoMTZVbm9ybSwgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBw
b3J0RGVwdGhBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAg
IHRydWUsICAyVSwgMVUpOworKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5j
aWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFsc2Us
ICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRv
UmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNF
aXRoZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKysKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCQzFfUkdCQSwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMyX1JHQkEsIHRydWUpOworKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDMl9SR0JBX3NSR0IsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBLCB0
cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdC
QV9zUkdCLCB0cnVlKTsKKysjZWxzZQorKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfMkJQUF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUCwgdHJ1ZSk7
CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRC
UFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UFZSVENfUkdCQV8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzRCUFBf
c1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
RUFDX1IxMVVub3JtLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRFQUNfUjExU25vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0sIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisrICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JHQkE4X3NSR0IsIHRy
dWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdC
OCwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRD
Ml9SR0I4X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEVUQzJfUkdCOEExLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjhBMV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9zUkdCLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdC
LCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzZ4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRBU1RDXzZ4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiwg
dHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18x
MHg2X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwgdHJ1ZSk7CisrICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9zUkdCLCB0cnVl
KTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9M
RFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFT
VENfNXg0X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ181eDVfTERSLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERSLCB0cnVlKTsKKysgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9MRFIsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg4X0xE
UiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNU
Q18xMHg1X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIsIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfTERSLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiwgdHJ1ZSk7CisrI2VuZGlmCisrICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorIH0KKyAKKyB9ICAv
LyBuYW1lc3BhY2UgbXRsCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX210bF91dGlscy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZGJjMTA5OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9nbHNsYW5nX210bF91dGlscy5oCitAQCAtMCwwICsxLDU3IEBACisrLy8KKysvLyAg
bXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKKysvLyAgQU5HTEUKKysvLworKy8vICBDcmVhdGVkIGJ5
IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKysvLworKworKyNpZm5kZWYgbXRsX2dsc2xh
bmdfbXRsX3V0aWxzX2gKKysjZGVmaW5lIG10bF9nbHNsYW5nX210bF91dGlsc19oCisrI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJv
Z3JhbUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVy
X3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24u
aCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sKKytzdHJ1Y3QgU2Ft
cGxlckJpbmRpbmcKKyt7CisrICAgIHVpbnQzMl90IHRleHR1cmVCaW5kaW5nID0gMDsKKysgICAg
dWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOworK307CisrCisrc3RydWN0IFRyYW5zbGF0ZWRT
aGFkZXJJbmZvCisreworKyAgICB2b2lkIHJlc2V0KCk7CisrICAgIC8vIFRyYW5zbGF0ZWQgTWV0
YWwgc291cmNlIGNvZGUKKysgICAgc3RkOjpzdHJpbmcgbWV0YWxTaGFkZXJTb3VyY2U7CisrICAg
IC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92ZS4gVXNlZCBi
eSBQcm9ncmFtTXRsLgorKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJy
YXJ5OworKyAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1wbGVyQmluZGlu
Z3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKKysgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01h
eEdMVUJPQmluZGluZ3M+IGFjdHVhbFVCT0JpbmRpbmdzOworKyAgICBzdGQ6OmFycmF5PHVpbnQz
Ml90LCBrTWF4U2hhZGVyWEZCcz4gYWN0dWFsWEZCQmluZGluZ3M7CisrICAgIGJvb2wgaGFzVUJP
QXJndW1lbnRCdWZmZXI7CisrfTsKKyt2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6
UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNM
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJj
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFj
ZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5m
b091dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0
cmluZz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4
ZmJCdWZmZXJDb3VudCk7CisrCisrLy8gR2V0IGVxdWl2YWxlbnQgc2hhZG93IGNvbXBhcmUgbW9k
ZSB0aGF0IGlzIHVzZWQgaW4gdHJhbnNsYXRlZCBtc2wgc2hhZGVyLgorK3VpbnQgTXNsR2V0U2hh
ZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrCisrI2VuZGlmIC8qIG10bF9n
bHNsYW5nX210bF91dGlsc19oICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi4zNWY1YmVmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCitAQCAtMCwwICsxLDI0MSBAQAor
Ky8vCisrLy8gIG1nbF9nbHNsYW5nX210bF91dGlscy5tCisrLy8gIEFOR0xFIChzdGF0aWMpCisr
Ly8KKysvLyAgQ3JlYXRlZCBieSBLeWxlIFBpZGRpbmd0b24gb24gMTEvMTAvMjAuCisrLy8KKysK
KysjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorKworK25hbWVzcGFjZSByeAorK3sK
KytuYW1lc3BhY2UgbXRsCisreworKworK3ZvaWQgVHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0
KCkKKyt7CisrICAgIG1ldGFsU2hhZGVyU291cmNlLmNsZWFyKCk7CisrICAgIG1ldGFsTGlicmFy
eSAgICAgICAgID0gbmlsOworKyAgICBoYXNVQk9Bcmd1bWVudEJ1ZmZlciA9IGZhbHNlOworKyAg
ICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOiBhY3R1YWxTYW1wbGVyQmluZGlu
Z3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcudGV4dHVyZUJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJTYW1wbGVyczsKKysgICAgfQorKworKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDog
YWN0dWFsVUJPQmluZGluZ3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJCdWZmZXJzOworKyAgICB9CisrCisrICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBh
Y3R1YWxYRkJCaW5kaW5ncykKKysgICAgeworKyAgICAgICAgYmluZGluZyA9IG10bDo6a01heFNo
YWRlckJ1ZmZlcnM7CisrICAgIH0KKyt9CisrCisrLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9u
dCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9y
bSBvZgorKy8vIHNsb3Q6Y291bnQgcGFpcikKKyt1c2luZyBPcmlnaW5hbFNhbXBsZXJCaW5kaW5n
TWFwID0KKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjxz
dGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4+OworKworK2Jvb2wgTWFwcGVkU2FtcGxlck5h
bWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisreworKyAgICByZXR1cm4gb3JpZ2luYWxOYW1lLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6
bnBvczsKKyt9CisrCisrc3RhdGljIHN0ZDo6c3RyaW5nIE1TTEdldE1hcHBlZFNhbXBsZXJOYW1l
KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCisreworKyAgICBzdGQ6OnN0cmluZyBz
YW1wbGVyTmFtZSA9IG9yaWdpbmFsTmFtZTsKKysKKysgICAgLy8gU2FtcGxlcnMgaW4gc3RydWN0
cyBhcmUgZXh0cmFjdGVkLgorKyAgICBzdGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwg
c2FtcGxlck5hbWUuZW5kKCksICcuJywgJ18nKTsKKysKKysgICAgLy8gUmVtb3ZlIGFycmF5IGVs
ZW1lbnRzCisrICAgIGF1dG8gb3V0ID0gc2FtcGxlck5hbWUuYmVnaW4oKTsKKysgICAgZm9yIChh
dXRvIGluID0gc2FtcGxlck5hbWUuYmVnaW4oKTsgaW4gIT0gc2FtcGxlck5hbWUuZW5kKCk7IGlu
KyspCisrICAgIHsKKysgICAgICAgIGlmICgqaW4gPT0gJ1snKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHdoaWxlICgqaW4gIT0gJ10nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaW4rKzsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGluICE9IHNhbXBsZXJOYW1lLmVuZCgp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgKm91dCsrID0gKmluOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHNhbXBsZXJOYW1lLmVyYXNlKG91dCwgc2FtcGxlck5hbWUuZW5kKCkpOworKworKyAgICBpZiAo
TWFwcGVkU2FtcGxlck5hbWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KG9yaWdpbmFsTmFtZSkpCisr
ICAgIHsKKysgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXgg
KyBzYW1wbGVyTmFtZTsKKysgICAgfQorKworKyAgICByZXR1cm4gc2FtcGxlck5hbWU7CisrfQor
KworK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dy
YW1TdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtl
ZFJlc291cmNlcyAmcmVzb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFk
ZXJNYXA8c3RkOjpzdHJpbmc+ICpzaGFkZXJTb3VyY2VzT3V0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0KQorK3sKKysgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIGdsOjpTaGFkZXIgKmdsU2hhZGVy
ICAgICAgICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7
CisrICAgICAgICAoKnNoYWRlclNvdXJjZXNPdXQpW3NoYWRlclR5cGVdID0gZ2xTaGFkZXIgPyBn
bFNoYWRlci0+Z2V0VHJhbnNsYXRlZFNvdXJjZSgpIDogIiI7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFsUmVm
bGVjdGlvbiAqcmVmbGVjdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+
ICZzdHJ1Y3RTYW1wbGVycywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8U2FtcGxlckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGlu
Z3MpCisreworKyAgICBmb3IgKGF1dG8gJnNhbXBsZXIgOiByZWZsZWN0aW9uLT5nZXRTYW1wbGVy
QmluZGluZ3MoKSkKKysgICAgeworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgICAg
ICAgICAgPSBzYW1wbGVyLmZpcnN0OworKyAgICAgICAgY29uc3QgdWludDMyX3QgYWN0dWFsU2Ft
cGxlclNsb3QgPSAodWludDMyX3QpcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJpbmRpbmcobmFtZSk7
CisrICAgICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdCly
ZWZsZWN0aW9uLT5nZXRUZXh0dXJlQmluZGluZyhuYW1lKTsKKysKKysgICAgICAgIC8vIEFzc2ln
biBzZXF1ZW50aWFsIGluZGV4IGZvciBzdWJzZXF1ZW50IGFycmF5IGVsZW1lbnRzCisrICAgICAg
ICBjb25zdCBib29sIHN0cnVjdFNhbXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9
IHN0cnVjdFNhbXBsZXJzLmVuZCgpOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWFwcGVk
TmFtZSA9CisrICAgICAgICAgICAgc3RydWN0U2FtcGxlciA/IG5hbWUgOiBNU0xHZXRNYXBwZWRT
YW1wbGVyTmFtZShzaDo6a1VzZXJEZWZpbmVkTmFtZVByZWZpeCArIG5hbWUpOworKyAgICAgICAg
YXV0byBvcmlnaW5hbCA9IG9yaWdpbmFsQmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKysgICAg
ICAgIGlmIChvcmlnaW5hbCAhPSBvcmlnaW5hbEJpbmRpbmdzLmVuZCgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0KKysgICAgICAgICAgICAgICAgb3JpZ2luYWxCaW5k
aW5ncy5hdChtYXBwZWROYW1lKTsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50VGV4dHVy
ZVNsb3QgPSBhY3R1YWxUZXh0dXJlU2xvdDsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50
U2FtcGxlclNsb3QgPSBhY3R1YWxTYW1wbGVyU2xvdDsKKysgICAgICAgICAgICBmb3IgKGNvbnN0
IHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ICZvcmlnaW5hbEJpbmRpbmdSYW5nZSA6IHJl
c09yaWduYWxCaW5kaW5ncykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFNhbXBs
ZXJCaW5kaW5nICZhY3R1YWxCaW5kaW5nID0gYmluZGluZ3MtPmF0KG9yaWdpbmFsQmluZGluZ1Jh
bmdlLmZpcnN0KTsKKysgICAgICAgICAgICAgICAgYWN0dWFsQmluZGluZy50ZXh0dXJlQmluZGlu
ZyAgPSBjdXJyZW50VGV4dHVyZVNsb3Q7CisrICAgICAgICAgICAgICAgIGFjdHVhbEJpbmRpbmcu
c2FtcGxlckJpbmRpbmcgID0gY3VycmVudFNhbXBsZXJTbG90OworKworKyAgICAgICAgICAgICAg
ICBjdXJyZW50VGV4dHVyZVNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uuc2Vjb25kOworKyAg
ICAgICAgICAgICAgICBjdXJyZW50U2FtcGxlclNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uu
c2Vjb25kOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK30KKysKKytzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIoZ2w6OlNo
YWRlciAqc2hhZGVyKQorK3sKKysgICAgU2hhZGVyTXRsICpzaGFkZXJJbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PFNoYWRlck10bCAqPihzaGFkZXItPmdldEltcGxlbWVudGF0aW9uKCkpOworKyAgICBy
ZXR1cm4gc2hhZGVySW5zdGFuY2UtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKyt9
CisrCisrc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9tQ29t
cGlsZXIoZ2w6OkNvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSB0eXBlKQorK3sK
KysgICAgYXV0byBjb21waWxlckluc3RhbmNlICAgICAgPSBjb21waWxlci0+Z2V0SW5zdGFuY2Uo
dHlwZSk7CisrICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6
OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5kbGUoKSk7CisrICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKysgICAgY29tcGlsZXItPnB1dEluc3RhbmNlKHN0ZDo6bW92ZShjb21waWxlckluc3Rh
bmNlKSk7CisrICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb24oKTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNMKGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZh
cmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5mb091
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmlu
Zz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJC
dWZmZXJDb3VudCkKKyt7CisrICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVy
IGJpbmRpbmdzIGdlbmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJl
bWFwLgorKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9P
cmlnaW5hbEJpbmRpbmdzOworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxv
Y2s+ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOworKyAgICBmb3Ig
KHVpbnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySWR4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmJsb2Nr
ID0gYmxvY2tzW2J1ZmZlcklkeF07CisrICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3Mu
Y291bnQoYmxvY2subWFwcGVkTmFtZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgdWJvT3Jp
Z2luYWxCaW5kaW5nc1tibG9jay5tYXBwZWROYW1lXSA9IGJ1ZmZlcklkeDsKKysgICAgICAgIH0K
KysgICAgfQorKyAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCBzYW1wbGVyIGJpbmRpbmdzIHByb2R1
Y2VkIGJ5IGZyb250IGVuZC4KKysgICAgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5h
bFNhbXBsZXJCaW5kaW5nczsKKysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlNhbXBsZXJCaW5k
aW5nPiAmc2FtcGxlckJpbmRpbmdzID0gcHJvZ3JhbVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygp
OworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybT4gJnVuaWZvcm1zICAg
ICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybXMoKTsKKysKKysgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PHN0ZDo6c3RyaW5nPiBzdHJ1Y3RTYW1wbGVycyA9IHt9OworKworKyAgICBmb3IgKHVp
bnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5z
aXplKCk7ICsrdGV4dHVyZUluZGV4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6U2FtcGxl
ckJpbmRpbmcgJnNhbXBsZXJCaW5kaW5nID0gc2FtcGxlckJpbmRpbmdzW3RleHR1cmVJbmRleF07
CisrICAgICAgICB1aW50MzJfdCB1bmlmb3JtSW5kZXggPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9y
bUluZGV4RnJvbVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5kZXgpOworKyAgICAgICAgY29uc3QgZ2w6
OkxpbmtlZFVuaWZvcm0gJnNhbXBsZXJVbmlmb3JtID0gdW5pZm9ybXNbdW5pZm9ybUluZGV4XTsK
KysgICAgICAgIGJvb2wgaXNTYW1wbGVySW5TdHJ1Y3QgICAgICAgID0gc2FtcGxlclVuaWZvcm0u
bmFtZS5maW5kKCcuJykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlzU2FtcGxlckluU3RydWN0CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNh
bXBsZXJVbmlmb3JtLm5hbWUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNhbXBsZXJVbmlmb3JtLm1hcHBlZE5h
bWUpOworKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcmVmaXhlZCBsYXRlciBzZXBlcmF0
ZWx5CisrICAgICAgICBpZiAoaXNTYW1wbGVySW5TdHJ1Y3QpCisrICAgICAgICAgICAgc3RydWN0
U2FtcGxlcnMuaW5zZXJ0KG1hcHBlZFNhbXBsZXJOYW1lKTsKKysgICAgICAgIG9yaWdpbmFsU2Ft
cGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2soCisrICAgICAgICAgICAg
e3RleHR1cmVJbmRleCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNhbXBsZXJCaW5kaW5nLmJvdW5k
VGV4dHVyZVVuaXRzLnNpemUoKSl9KTsKKysgICAgfQorKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBl
IHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50
fSkKKysgICAgeworKyAgICAgICAgKCptc2xDb2RlT3V0KVt0eXBlXSAgICAgICAgICAgICAgICAg
ICAgICAgICA9IHNoYWRlclNvdXJjZXNbdHlwZV07CisrICAgICAgICAoKm1zbFNoYWRlckluZm9P
dXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVyU291cmNlc1t0eXBlXTsKKysgICAg
ICAgIGdsOjpTaGFkZXIgKnNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgID0gcHJvZ3JhbVN0
YXRlLmdldEF0dGFjaGVkU2hhZGVyKHR5cGUpOworKyAgICAgICAgc2g6OlRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24gKnJlZmxlY3Rpb24gPSBnZXRSZWZsZWN0aW9uRnJvbVNoYWRlcihzaGFkZXIp
OworKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50
cworKyAgICAgICAgaWYgKG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLnNpemUoKSA+IDApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MocmVmbGVjdGlv
biwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJzLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hdCh0eXBlKS5h
Y3R1YWxTYW1wbGVyQmluZGluZ3MpOworKyAgICAgICAgfQorKyAgICAgICAgcmVmbGVjdGlvbi0+
cmVzZXQoKTsKKysgICAgfQorKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisr
fQorKworK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdM
ZW51bSBmdW5jKQorK3sKKysgICAgLy8gU2VlIFNwaXJ2VG9Nc2xDb21waWxlcjo6ZW1pdF9oZWFk
ZXIoKQorKyAgICBpZiAobW9kZSA9PSBHTF9OT05FKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
MDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoZnVuYykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIEdMX0xFU1M6CisrICAgICAgICAgICAgICAgIHJl
dHVybiAxOworKyAgICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMjsKKysgICAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6CisrICAgICAgICAgICAgICAg
IHJldHVybiAzOworKyAgICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNDsKKysgICAgICAgICAgICBjYXNlIEdMX05FVkVSOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNTsKKysgICAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDY7CisrICAgICAgICAgICAgY2FzZSBHTF9FUVVBTDoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDc7CisrICAgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKysgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrfSAgLy8gbmFtZXNwYWNlIG10bAorK30gIC8vIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5o
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgKK2luZGV4
IDEzYzk3ZWUuLmMwMjQ0NmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX3V0aWxzLmgKK0BAIC0xNCwzMyArMTQsMTEgQEAKKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9jb21tb24uaCIKKy0KKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCisgbmFtZXNwYWNlIHJ4CisgeworIG5hbWVzcGFj
ZSBtdGwKKyB7CistCistc3RydWN0IFNhbXBsZXJCaW5kaW5nCisteworLSAgICB1aW50MzJfdCB0
ZXh0dXJlQmluZGluZyA9IDA7CistICAgIHVpbnQzMl90IHNhbXBsZXJCaW5kaW5nID0gMDsKKy19
OworLQorLXN0cnVjdCBUcmFuc2xhdGVkU2hhZGVySW5mbworLXsKKy0gICAgdm9pZCByZXNldCgp
OworLQorLSAgICAvLyBUcmFuc2xhdGVkIE1ldGFsIHNvdXJjZSBjb2RlCistICAgIHN0ZDo6c3Ry
aW5nIG1ldGFsU2hhZGVyU291cmNlOworLSAgICAvLyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZy
b20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJvZ3JhbU10bC4KKy0gICAgQXV0b09iakNQ
dHI8aWQ8TVRMTGlicmFyeT4+IG1ldGFsTGlicmFyeTsKKy0KKy0gICAgc3RkOjphcnJheTxTYW1w
bGVyQmluZGluZywga01heEdMU2FtcGxlckJpbmRpbmdzPiBhY3R1YWxTYW1wbGVyQmluZGluZ3M7
CistICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1YWxVQk9C
aW5kaW5nczsKKy0gICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVh
bFhGQkJpbmRpbmdzOworLSAgICBib29sIGhhc1VCT0FyZ3VtZW50QnVmZmVyOworLX07CistCisg
Ly8gLSBzaGFkZXJTb3VyY2VzT3V0IGlzIHJlc3VsdCBHTFNMIGNvZGUgcGVyIHNoYWRlciBzdGFn
ZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9mZi4KKyAvLyAtIHhmYk9ubHlTaGFkZXJT
b3VyY2VPdXQgd2lsbCBjb250YWluIHZlcnRleCBzaGFkZXIncyBHTFNMIGNvZGUgd2hlbiBYRkIg
ZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KKyB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29u
c3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorQEAgLTU3LDYgKzM1LDEzIEBAIGFu
Z2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRl
ck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9y
PHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOworIAorK2FuZ2xlOjpSZXN1bHQgTVNMR2V0U2hh
ZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFn
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMg
JmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAmc2hhZGVyU291cmNlcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOwor
KworIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBjb2RlIHRvIE1ldGFsIHNoYWRlciBzb3VyY2Ug
Y29kZS4KKyAvLyAtIHNwaXJ2U2hhZGVyQ29kZSBpcyBTUElSViBjb2RlIHBlciBzaGFkZXIgc3Rh
Z2Ugd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvZmYuCisgLy8gLSB4ZmJPbmx5U3BpcnZD
b2RlIGlzICB2ZXJ0ZXggc2hhZGVyJ3MgU1BJUlYgY29kZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMg
dHVybmVkIG9uLgorQEAgLTcwLDYgKzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9N
c2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNoYWRlckluZm8gKm1zbFhmYk9ubHlT
aGFkZXJJbmZvT3V0IC8qKiBudWxsYWJsZSAqLyk7CisgCisrdm9pZCBNU0xHZXRTaGFkZXJTb3Vy
Y2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRl
clNvdXJjZXNPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJmYWNl
VmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpOworKworK2FuZ2xlOjpSZXN1bHQg
R2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFk
ZXJTb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJ
bnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNo
YWRlckluZm9PdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8
c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgeGZiQnVmZmVyQ291bnQpOworKworKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21w
YXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KKyt1aW50IE1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYyk7Cisr
CisgfSAgLy8gbmFtZXNwYWNlIG10bAorIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbSBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQoraW5kZXggY2Fh
MGU1Ni4uNGNmNzE3YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX3V0aWxzLm1tCitAQCAtMTMsNiArMTMsNyBAQAorICNpbmNsdWRlIDxzcGlydl9t
c2wuaHBwPgorIAorICNpbmNsdWRlICJjb21tb24vYXBwbGVfcGxhdGZvcm1fdXRpbHMuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKK0BAIC0yMiwxMiArMjMs
MTMgQEAKKyB7CisgbmFtZXNwYWNlCisgeworLQorIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFu
Z1RleHR1cmVEZXNjU2V0ICAgICAgICAgICAgICA9IDA7CisgY29uc3RleHByIHVpbnQzMl90IGtH
bHNsYW5nRGVmYXVsdFVuaWZvcm1BbmRYZmJEZXNjU2V0ID0gMTsKKyBjb25zdGV4cHIgdWludDMy
X3Qga0dsc2xhbmdEcml2ZXJVbmlmb3Jtc0Rlc2NTZXQgICAgICAgPSAyOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291cmNlRGVzY1NldCAgICAgICA9IDM7CisgCisrY29u
c3RleHByIGNoYXIga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNWYXJOYW1lW10gPSAiQU5HTEVT
aGFkb3dDb21wYXJlTW9kZXMiOworKworIC8vIE9yaWdpbmFsIG1hcHBpbmcgb2YgZnJvbnQgZW5k
IGZyb20gc2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNhbXBsZXIgc2xvdHMgKGluIGZvcm0gb2YK
KyAvLyBzbG90OmNvdW50IHBhaXIpCisgdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9
CitAQCAtNTYsOSArNTgsMTMgQEAgdm9pZCBSZXNldEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5m
byhHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmYKKyAgICAgc3RhdGlj
X2Fzc2VydChrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggIT0gMCwgImtEcml2ZXJVbmlmb3Jt
c0JpbmRpbmdJbmRleCBtdXN0IG5vdCBiZSAwIik7CisgfQorIAorKworIEdsc2xhbmdTb3VyY2VP
cHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMoKQorIHsKKyAgICAgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMgb3B0aW9uczsKKysgICAgb3B0aW9ucy5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2sgPSB0cnVl
OworKyAgICAvLyBXZSBjYW4gZWFybHkgb3V0IGluIHRoZSBNU0wgb25jZSB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgd3JpdHRlbgorKyAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1
cm4gPSB0cnVlOworICAgICByZXR1cm4gb3B0aW9uczsKKyB9CisgCitAQCAtNzksOCArODUsOCBA
QCBHbHNsYW5nU291cmNlT3B0aW9ucyBDcmVhdGVTb3VyY2VPcHRpb25zKCkKKyB2b2lkIEJpbmRC
dWZmZXJzKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICBjb25zdCBzcGlydl9jcm9zczo6U21hbGxWZWN0b3I8c3BpcnZfY3Jvc3M6OlJlc291cmNl
PiAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKKy0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmlu
ZGluZ3MsCisrICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorKyAgICAgICAgICAgICAgICAgY29u
c3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5n
cywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRp
bmdzPiAqdWJvQmluZGluZ3NSZW1hcE91dCwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIGtNYXhTaGFkZXJYRkJzPiAqeGZiQmluZGluZ1JlbWFwT3V0LAorICAgICAgICAg
ICAgICAgICAgYm9vbCAqdWJvQXJndW1lbnRCdWZmZXJVc2VkKQorQEAgLTI1MywzMCArMjU5LDUw
IEBAIHZvaWQgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MoY29uc3Qgc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMICZjb21waWxlck1zbCwKKyAgICAgfQorIH0KKyAKKy1zdGQ6OnN0cmluZyBQb3N0
UHJvY2Vzc1RyYW5zbGF0ZWRNc2woY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRTb3VyY2Up
Cisrc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1w
bGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKKyB7CisrICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZTsKKysgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgeworKyAgICAg
ICAgLy8gQWRkIEFOR0xFU2hhZG93Q29tcGFyZU1vZGVzIHZhcmlhYmxlIHRvIG1haW4oKSwgV2Ug
bmVlZCB0byBhZGQgaGVyZSBiZWNhdXNlIGl0IGlzIHRoZQorKyAgICAgICAgLy8gb25seSB3YXkg
d2l0aG91dCBtb2RpZnlpbmcgc3BpcnYtY3Jvc3MuCisrICAgICAgICBzdGQ6OnJlZ2V4IG1haW5E
ZWNsYXJlUmVnZXgoCisrICAgICAgICAgICAgUiIoKCh2ZXJ0ZXh8ZnJhZ21lbnR8a2VybmVsKVxz
K1tfYS16QS1aMC05PD5dK1xzK21haW5bXlwoXSpcKCkpIik7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiJDFjb25zdGFudCB1bmlmb3Jt
PHVpbnQ+ICoiKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUgKyAiW1tidWZmZXIoIiArCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIoa1NoYWRvd1NhbXBs
ZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXgpICsgIildXSwgIjsKKysgICAgICAgIHNvdXJjZSA9
IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBtYWluRGVjbGFyZVJlZ2V4LCBt
YWluRGVjbGFyZVJlcGxhY2VTdHIpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgc291cmNlID0gdHJhbnNsYXRlZFNvdXJjZTsKKysgICAgfQorKworICAgICAvLyBBZGQgZnVu
Y3Rpb25fY29uc3RhbnQgYXR0cmlidXRlIHRvIGdsX1NhbXBsZU1hc2suCisgICAgIC8vIEV2ZW4g
dGhvdWdoIHRoaXMgdmFyeWluZyBpcyBvbmx5IHVzZWQgd2hlbiBBTkdMRUNvdmVyYWdlTWFza0Vu
YWJsZWQgaXMgdHJ1ZSwKKyAgICAgLy8gdGhlIHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNzaWduIGZ1
bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBpdCB3b24ndCBiZSBkZWFkLWNv
ZGUKKyAgICAgLy8gcmVtb3ZlZCB3aGVuIEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZD1mYWxzZS4K
KyAgICAgc3RkOjpzdHJpbmcgc2FtcGxlTWFza1JlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiW1tz
YW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQoIikgKworLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ICsgIildXSI7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRy
YW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpICsKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKV1dIjsKKyAKKyAgICAgLy8gVGhp
cyByZXBsYWNlcyAiZ2xfU2FtcGxlTWFzayBbW3NhbXBsZV9tYXNrXV0iCisgICAgIC8vICAgICAg
ICAgIHdpdGggImdsX1NhbXBsZU1hc2sgW1tzYW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQo
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkKV1dIgorICAgICBzdGQ6OnJlZ2V4IHNhbXBsZU1hc2tE
ZWNsYXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSkiKTsKKy0gICAg
cmV0dXJuIHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBzYW1wbGVNYXNrRGVj
bGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFjZVN0cik7CisrICAgIHJldHVybiBzdGQ6OnJlZ2V4
X3JlcGxhY2Uoc291cmNlLCBzYW1wbGVNYXNrRGVjbGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFj
ZVN0cik7CisgfQorIAorIC8vIEN1c3RvbWl6ZWQgc3BpcnYtY3Jvc3MgY29tcGlsZXIKKyBjbGFz
cyBTcGlydlRvTXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCisg
eworICAgcHVibGljOgorLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMy
X3Q+ICYmc3ByaXYpIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorKyAgICBT
cGlydlRvTXNsQ29tcGlsZXIoQ29udGV4dCAqY29udGV4dCwgc3RkOjp2ZWN0b3I8dWludDMyX3Q+
ICYmc3ByaXYpCisrICAgICAgICA6IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTChzcHJpdiksIG1D
b250ZXh0KGNvbnRleHQpCisrICAgIHt9CisgCisgICAgIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5n
bGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywK
KysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgT3Jp
Z2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICptc2xTaGFkZXJJbmZvT3V0KQorICAg
ICB7CitAQCAtMzI4LDggKzM1NCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCisgICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5ncyBm
b3IgdGV4dHVyZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKKyAgICAgICAg
ICAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIGFyZ3VtZW50IGJ1ZmZlci4KKyAgICAgICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xz
bGFuZ1RleHR1cmVEZXNjU2V0KTsKKy0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJN
U0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldCgKKy0gICAgICAgICAgICAgICAga0dsc2xh
bmdEZWZhdWx0VW5pZm9ybUFuZFhmYkRlc2NTZXQpOworKyAgICAgICAgICAgIHNwaXJ2X2Nyb3Nz
OjpDb21waWxlck1TTDo6YWRkX2Rpc2NyZXRlX2Rlc2NyaXB0b3Jfc2V0KGtHbHNsYW5nRGVmYXVs
dFVuaWZvcm1BbmRYZmJEZXNjU2V0KTsKKyAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGls
ZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1z
RGVzY1NldCk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCitAQCAtMzQwLDIxICszNjUsNzMy
IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgCisgICAgICAg
ICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21wT3B0KTsKKyAK
KysgICAgICAgIGFkZEJ1aWx0SW5SZXNvdXJjZXMoKTsKKysgICAgICAgIGFuYWx5emVTaGFkZXJW
YXJpYWJsZXMoKTsKKysKKyAgICAgICAgIC8vIEFjdHVhbCBjb21waWxhdGlvbgorICAgICAgICAg
bXNsU2hhZGVySW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQorLSAgICAgICAgICAgIFBvc3RQ
cm9jZXNzVHJhbnNsYXRlZE1zbChzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7
CisrICAgICAgICAgICAgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKG1IYXNEZXB0aFNhbXBsZXIs
IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgpKTsKKyAKKyAgICAgICAgIC8vIFJl
dHJpZXZlIGF1dG9tYXRpYyB0ZXh0dXJlIHNsb3QgYXNzaWdubWVudHMKKyAgICAgICAgIEdldEFz
c2lnbmVkU2FtcGxlckJpbmRpbmdzKCp0aGlzLCBvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1
YWxTYW1wbGVyQmluZGluZ3MpOworICAgICB9CisrCisrICBwcml2YXRlOgorKyAgICAvLyBPdmVy
cmlkZSBDb21waWxlck1TTAorKyAgICB2b2lkIGVtaXRfaGVhZGVyKCkgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjplbWl0X2hlYWRlcigpOworKyAg
ICAgICAgaWYgKCFtSGFzRGVwdGhTYW1wbGVyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybjsKKysgICAgICAgIH0KKysgICAgICAgIC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNl
IGlzc3VlczoKKysgICAgICAgIC8vIC0gc3ByaXZfY3Jvc3MgYWx3YXlzIHRyYW5zbGF0ZXMgc2hh
ZG93IHRleHR1cmUncyBzYW1wbGluZyB0byBzYW1wbGVfY29tcGFyZSgpIGFuZCBkb2Vzbid0Cisr
ICAgICAgICAvLyB0YWtlIGludG8gYWNjb3VudCBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERT1HTF9O
T05FLgorKyAgICAgICAgLy8gLSBvbiBtYWNPUywgZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBh
cmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHNhbXBsZV9jb21wYXJlKCkuCisrICAgICAgICAv
LyAtIG9uIGRldmljZXMgcHJpb3IgdG8gaU9TIEdQVSBmYW1pbHkgMywgY2hhbmdpbmcgc2FtcGxl
cidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlciBpcworKyAgICAgICAgLy8gbm90IHN1cHBv
cnRlZC4KKysgICAgICAgIGlmICghbUNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUuZW5hYmxlZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBzdGF0ZW1lbnQoIiNkZWZpbmUgQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElN
RV9DT01QQVJFX01PREUiKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0YXRlbWVudCgiZW51
bSBjbGFzcyBBTkdMRUNvbXBhcmVNb2RlIDogdWludCIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb25lID0gMCwiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIExlc3MsIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzRXF1YWwsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBHcmVhdGVyLCIpOworKyAgICAgICAgc3RhdGVtZW50
KCIgICAgR3JlYXRlckVxdWFsLCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgTmV2ZXIsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBBbHdheXMsIik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBFcXVhbCwiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIE5vdEVxdWFsLCIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9OyIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJ
bnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFY29tcGFyZShUIGRlcHRo
LCBUIGRyZWYsIFVuaWZvcm1PclVJbnQgY29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgQU5HTEVDb21wYXJlTW9kZSBtb2RlID0g
c3RhdGljX2Nhc3Q8QU5HTEVDb21wYXJlTW9kZT4oY29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICBzd2l0Y2ggKG1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgIHsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6Okxl
c3M6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmIDwgZGVw
dGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2Rl
OjpMZXNzRXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBk
cmVmIDw9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6R3JlYXRlcjoiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgPiBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNl
IEFOR0xFQ29tcGFyZU1vZGU6OkdyZWF0ZXJFcXVhbDoiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICAgICAgcmV0dXJuIGRyZWYgPj0gZGVwdGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICAgICAgcmV0dXJuIDA7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpBbHdheXM6Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgICAgIHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNh
c2UgQU5HTEVDb21wYXJlTW9kZTo6RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgICAgIHJldHVybiBkcmVmID09IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmICE9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIGRlZmF1bHQ6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAg
IHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICB9Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1l
bnQoIi8vIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBzaGFkb3cgdGV4dHVyZSBmdW5jdGlvbnMiKTsK
KysgICAgICAgIC8vIDJEIFBDRiBzYW1wbGluZworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGgyZDxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJ
bnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBmbG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwg
dGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQy
IGltZ0Nvb3JkID0gY29vcmQgKiBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRpbXM7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBm
bG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgdGwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlv
bnMsIG9mZnNldCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdM
RWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAu
MCksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1
ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQg
YmwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0
ZXhlbFNpemUueSksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29t
cGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYnIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyB0ZXhl
bFNpemUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAib2Zmc2V0KSwgY29tcGFyZV92
YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYm90dG9tID0gbWl4KGJsLCBiciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIG1peCh0b3AsIGJvdHRvbSwgd2VpZ2h0LnkpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxl
KHMsIGNvb3JkLCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBh
cmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vu
ZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUgUENG
IHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1
ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIC8vIE5PVEUoaHFs
ZSk6IHRvIGltcGxlbWVudCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xF
Y29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucyksIGNvbXBhcmVfdmFsdWUs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgLy8g
MkQgYXJyYXkgUENGIHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0
aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKysg
ICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCAiCisrICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNpZiBk
ZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0
MiBkaW1zID0gZmxvYXQyKHRleHR1cmUuZ2V0X3dpZHRoKCksIHRleHR1cmUuZ2V0X2hlaWdodCgp
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICog
ZGltczsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAg
LyBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHdlaWdodCA9IGZyYWN0
KGltZ0Nvb3JkKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwg
IgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0ciA9IEFOR0xFY29tcGFyZSh0ZXh0
dXJlLnNhbXBsZShzLCBjb29yZCArIGZsb2F0Mih0ZXhlbFNpemUueCwgMC4wKSwgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYmwgPSBB
TkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0ZXhlbFNp
emUueSksICIKKysgICAgICAgICAgICAgICAgICAiYXJyYXksIG9wdGlvbnMsIG9mZnNldCksIGNv
bXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGZsb2F0IGJyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4
ZWxTaXplLCBhcnJheSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBvZmZzZXQpLCBj
b21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBmbG9hdCB0b3AgPSBtaXgodGwsIHRyLCB3ZWlnaHQueCk7Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gbWl4KHRvcCwgYm90dG9tLCB3ZWlnaHQueSk7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1Nf
XykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVy
ZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAg
ICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIC8vIDJEIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKysgICAgICAgIHN0
YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
Q29tcGFyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9h
dCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0
YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAgICAgICIjaWYgZGVm
aW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVO
VElNRV9DT01QQVJFX01PREUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5H
TEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCBv
ZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMs
IG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3Jt
T3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21w
YXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIK
KysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAg
ImludDIoMCksIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIp
OworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBz
YW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAgICAgICJjb21w
YXJlX3ZhbHVlLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSki
KTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVm
aW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29v
cmQsIGNvbXBhcmVfdmFsdWUsIGxldmVsKDApLCBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywg
Y29vcmQsIGNvbXBhcmVfdmFsdWUsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNl
bmRpZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIp
OworKworKyAgICAgICAgLy8gQ3ViZSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVy
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQs
IHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAg
ICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUs
IHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisrICAgICAgICAgICAgImNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAg
ICAgIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9f
U0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlv
bnMpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUo
ZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisr
ICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2lm
IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJz
aGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29y
ZCwgY29tcGFyZV92YWx1ZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAg
ICAgLy8gMkQgYXJyYXkgdGV4dHVyZSdzIHNhbXBsZV9jb21wYXJlKCkgd3JhcHBlcgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFt
ZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQgY29tcGFyZV92
YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKysgICAgICAg
ICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgKKysgICAgICAgICAgICAiI2lmIGRlZmluZWQoX19NRVRB
TF9NQUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFS
RV9NT0RFKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBD
Rih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysg
ICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBh
cmVfdmFsdWUsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRp
ZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29t
cGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBpbnQyKDApLCBzaGFk
b3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0
YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgIgorKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5U
SU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZl
bCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92
YWx1ZSwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICAv
LyAyRCB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAgICAgc3RhdGVt
ZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlm
b3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUo
ZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgaW50MiBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUlu
dCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdM
RXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFO
R0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBm
bG9hdCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQsIGlu
dDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFy
ZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAiaW50MiBvZmZzZXQs
IGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJl
LCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAg
ICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
Iik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCBPcHQgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAgICJmbG9hdCBjb21wYXJl
X3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJl
KHRleHR1cmUsIHMsIGNvb3JkLCBvcHRpb25zLCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisr
ICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUg
dGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29t
cGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAg
IHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBh
cmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3Jk
LCBjb21wYXJlX3ZhbHVlLCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25z
LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIp
OworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAo
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
eyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
LCBjb29yZCwgb3B0aW9ucyk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUlu
dD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRf
YXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
ZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUocywgY29vcmQsIGFycmF5LCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
KGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQg
IgorKyAgICAgICAgICAgICAgICAgICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBj
b29yZCwgYXJyYXksIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAg
ICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAg
ImFycmF5LCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
cHRpb25zLCBvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAgImFy
cmF5LCBPcHQgb3B0aW9ucywgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXks
IG9wdGlvbnMsIGludDIoMCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwg
c2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKyAgICB9CisrCisrICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9u
X25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRmV0Y2gsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0FycmF5T2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc09mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0dyYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNE
cmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaW5Mb2QpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIGlmICghaGFzRHJlZikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjp0b19mdW5jdGlvbl9uYW1lKGltZywg
aW1nVHlwZSwgaXNGZXRjaCwgaXNHYXRoZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0
cywgaGFzT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzR3JhZCwgaGFzRHJlZiwgbG9kLCBtaW5Mb2QpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgLy8gVXNlIGN1c3RvbSBBTkdMRXRleHR1cmUgZnVuY3Rpb24g
aW5zdGVhZCBvZiB1c2luZyBidWlsdC1pbiBzYW1wbGVfY29tcGFyZSgpCisrICAgICAgICByZXR1
cm4gIkFOR0xFdGV4dHVyZSI7CisrICAgIH0KKysKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVuY3Rp
b25fYXJncyhzcGlydl9jcm9zczo6VmFyaWFibGVJRCBpbWcsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGZXRjaCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzR2F0aGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGNvb3JkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGNvb3JkQ29tcG9uZW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBkcmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGdyYWRYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGdyYWRZLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb2Zmc2V0LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaWFzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXAsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG1pbmxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sICpwRm9yd2FyZCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgYm9vbCBmb3J3YXJk
OworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnc1dpdGhvdXREcmVmID0gc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMOjp0b19mdW5jdGlvbl9hcmdzKAorKyAgICAgICAgICAgIGltZywgaW1nVHlwZSwg
aXNGZXRjaCwgaXNHYXRoZXIsIGlzUHJvaiwgY29vcmQsIGNvb3JkQ29tcG9uZW50cywgMCwgZ3Jh
ZFgsIGdyYWRZLCBsb2QsCisrICAgICAgICAgICAgY29mZnNldCwgb2Zmc2V0LCBiaWFzLCBjb21w
LCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOworKworKyAgICAgICAgaWYgKCFkcmVmKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChwRm9yd2FyZCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIHJldHVybiBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICB9CisrICAgICAgICAvLyBD
b252ZXJ0IHRvIGFyZ3VtZW50cyB0byBBTkdMRXRleHR1cmUuCisrICAgICAgICBzdGQ6OnN0cmlu
ZyBhcmdzID0gdG9fZXhwcmVzc2lvbihpbWcpOworKyAgICAgICAgYXJncyArPSAiLCAiOworKyAg
ICAgICAgYXJncyArPSBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICBhcmdzICs9ICIsICI7Cisr
CisrICAgICAgICBmb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZm9yd2Fy
ZCAmJiBzaG91bGRfZm9yd2FyZChkcmVmKTsKKysgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpT
UElSVHlwZSAmZHJlZlR5cGUgPSBleHByZXNzaW9uX3R5cGUoZHJlZik7CisrICAgICAgICBzdGQ6
OnN0cmluZyBkcmVmRXhwcjsKKysgICAgICAgIHVpbnQzMl90IGFsdENvb3JkQ29tcG9uZW50ID0g
MDsKKysgICAgICAgIHN3aXRjaCAoaW1nVHlwZS5pbWFnZS5kaW0pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY2FzZSBzcHY6OkRpbTJEOgorKyAgICAgICAgICAgICAgICBhbHRDb29yZENvbXBv
bmVudCA9IDI7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugc3B2
OjpEaW0zRDoKKysgICAgICAgICAgICBjYXNlIHNwdjo6RGltQ3ViZToKKysgICAgICAgICAgICAg
ICAgYWx0Q29vcmRDb21wb25lbnQgPSAzOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChpc1Byb2opCisrICAg
ICAgICAgICAgZHJlZkV4cHIgPSBzcGlydl9jcm9zczo6am9pbih0b19lbmNsb3NlZF9leHByZXNz
aW9uKGRyZWYpLCAiIC8gIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvX2V4dHJhY3RfY29tcG9uZW50X2V4cHJlc3Npb24oY29vcmQsIGFsdENvb3JkQ29tcG9u
ZW50KSk7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZHJlZkV4cHIgPSB0b19leHByZXNz
aW9uKGRyZWYpOworKworKyAgICAgICAgaWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Ny
b3NzOjpTUElSVHlwZTo6SGFsZikKKysgICAgICAgICAgICBkcmVmRXhwciA9IGNvbnZlcnRfdG9f
ZjMyKGRyZWZFeHByLCAxKTsKKysKKysgICAgICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisrICAgICAg
ICBhcmdzICs9ICIsICI7CisrICAgICAgICBhcmdzICs9IHRvU2hhZG93Q29tcGFyZU1vZGVFeHBy
ZXNzaW9uKGltZyk7CisrCisrICAgICAgICBpZiAocEZvcndhcmQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgKnBGb3J3YXJkID0gZm9yd2FyZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJl
dHVybiBhcmdzOworKyAgICB9CisrCisrICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlw
ZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorKyAg
ICAvLyB0b2dldGhlciB3aXRoIHRoZSBzaGFkb3cgc2FtcGxlci4gTk9URShocWxlKTogVGhpcyBp
cyBqdXN0IDkwJSBjb3B5IG9mIHNwaXJ2X21zbCdzIGNvZGUuCisrICAgIC8vIFRoZSBiZXR0ZXIg
d2F5IGlzIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgYSBQUiBvbiBzcGlydi1jcm9zcyByZXBvIGRp
cmVjdGx5LiBCdXQgdGhpcyBzaG91bGQKKysgICAgLy8gYmUgYSB3b3JrIGFyb3VuZCBzb2x1dGlv
biBmb3Igbm93LgorKyAgICB2b2lkIGVtaXRfZnVuY3Rpb25fcHJvdG90eXBlKHNwaXJ2X2Nyb3Nz
OjpTUElSRnVuY3Rpb24gJmZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3BpcnZfY3Jvc3M6OkJpdHNldCAmKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICAv
LyBUdXJuIG9mZiBjbGFuZy1mb3JtYXQgdG8gZWFzaWVyIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBj
b2RlCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrICAgICAgICB1c2luZyBuYW1lc3Bh
Y2Ugc3BpcnZfY3Jvc3M7CisrICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3B2OworKyAgICAgICAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKysKKysgICAgICAgIGlmIChmdW5jLnNlbGYgIT0gaXIuZGVm
YXVsdF9lbnRyeV9wb2ludCkKKysgICAgICAgICAgICBhZGRfZnVuY3Rpb25fb3ZlcmxvYWQoZnVu
Yyk7CisrCisrICAgICAgICBsb2NhbF92YXJpYWJsZV9uYW1lcyA9IHJlc291cmNlX25hbWVzOwor
KyAgICAgICAgc3RyaW5nIGRlY2w7CisrCisrICAgICAgICBwcm9jZXNzaW5nX2VudHJ5X3BvaW50
ID0gZnVuYy5zZWxmID09IGlyLmRlZmF1bHRfZW50cnlfcG9pbnQ7CisrCisrICAgICAgICAvLyBN
ZXRhbCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGluZSBvdGhlcndp
c2UgdGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVyIGluIGEgc2lu
Z2xlIE1ldGFsbGliLgorKyAgICAgICAgaWYgKCFwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorKyAg
ICAgICAgICAgIHN0YXRlbWVudCgic3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkiKTsKKysKKysgICAgICAgIGF1dG8gJnR5cGUgPSBnZXQ8U1BJUlR5cGU+KGZ1bmMu
cmV0dXJuX3R5cGUpOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNs
X29wdGlvbnMuZm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBXZSBjYW5ub3QgcmV0dXJuIG5hdGl2ZSBhcnJheXMgaW4gTVNMLCBzbyAicmV0dXJuIiB0aHJv
dWdoIGFuIG91dCB2YXJpYWJsZS4KKysgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBkZWNsICs9IGZ1
bmNfdHlwZV9kZWNsKHR5cGUpOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiICI7
CisrICAgICAgICBkZWNsICs9IHRvX25hbWUoZnVuYy5zZWxmKTsKKysgICAgICAgIGRlY2wgKz0g
IigiOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMu
Zm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBGYWtlIGFy
cmF5cyByZXR1cm5zIGJ5IHdyaXRpbmcgdG8gYW4gb3V0IGFycmF5IGluc3RlYWQuCisrICAgICAg
ICAgICAgZGVjbCArPSAidGhyZWFkICI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2ds
c2wodHlwZSk7CisrICAgICAgICAgICAgZGVjbCArPSAiICgmU1BJUlZfQ3Jvc3NfcmV0dXJuX3Zh
bHVlKSI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2FycmF5X2dsc2wodHlwZSk7Cisr
ICAgICAgICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50cy5lbXB0eSgpKQorKyAgICAgICAgICAgICAg
ICBkZWNsICs9ICIsICI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocHJvY2Vzc2luZ19l
bnRyeV9wb2ludCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAobXNsX29wdGlvbnMuYXJn
dW1lbnRfYnVmZmVycykKKysgICAgICAgICAgICAgICAgZGVjbCArPSBlbnRyeV9wb2ludF9hcmdz
X2FyZ3VtZW50X2J1ZmZlcighZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrICAgICAgICAgICAg
ZWxzZQorKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfY2xhc3NpYygh
ZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrCisrICAgICAgICAgICAgLy8gSWYgZW50cnkgcG9p
bnQgZnVuY3Rpb24gaGFzIHZhcmlhYmxlcyB0aGF0IHJlcXVpcmUgZWFybHkgZGVjbGFyYXRpb24s
CisrICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFuIGVtcHR5IGluaXRpYWxp
emVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgorKyAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9u
ZSBhdCB0aGlzIGxhdGUgc3RhZ2UgYmVjYXVzZSB0aGUgaW5pdGlhbGl6YXRpb24gZXhwcmVzc2lv
bgorKyAgICAgICAgICAgIC8vIGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBjb21waWxhdGlvbiBwYXNz
LgorKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQgOiB2YXJzX25lZWRpbmdfZWFybHlfZGVj
bGFyYXRpb24pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZlZF92YXIg
PSBnZXQ8U1BJUlZhcmlhYmxlPih2YXJfaWQpOworKyAgICAgICAgICAgICAgICBJRCAmaW5pdGlh
bGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisrICAgICAgICAgICAgICAgIGlmICghaW5pdGlh
bGl6ZXIpCisrICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGlyLmluY3JlYXNlX2Jv
dW5kX2J5KDEpOworKworKyAgICAgICAgICAgICAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgcHJvcGVy
IGluaXRpYWxpemVycy4KKysgICAgICAgICAgICAgICAgaWYgKGlyLmlkc1tpbml0aWFsaXplcl0u
Z2V0X3R5cGUoKSA9PSBUeXBlTm9uZSB8fCBpci5pZHNbaW5pdGlhbGl6ZXJdLmdldF90eXBlKCkg
PT0gVHlwZUV4cHJlc3Npb24pCisrICAgICAgICAgICAgICAgICAgICBzZXQ8U1BJUkV4cHJlc3Np
b24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsKKysg
ICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBmb3IgKGF1dG8gJmFyZyA6IGZ1
bmMuYXJndW1lbnRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfaWQg
PSBhcmcuaWQ7CisrCisrICAgICAgICAgICAgYXV0byAqdmFyID0gbWF5YmVfZ2V0PFNQSVJWYXJp
YWJsZT4oYXJnLmlkKTsKKysgICAgICAgICAgICBpZiAodmFyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBtb2RpZnkgdGhlIG5hbWUgb2YgdGhlIHZh
cmlhYmxlLCBtYWtlIHN1cmUgd2UgbW9kaWZ5IHRoZSBvcmlnaW5hbCB2YXJpYWJsZS4KKysgICAg
ICAgICAgICAgICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisrICAg
ICAgICAgICAgICAgIGlmIChhcmcuYWxpYXNfZ2xvYmFsX3ZhcmlhYmxlICYmIHZhci0+YmFzZXZh
cmlhYmxlKQorKyAgICAgICAgICAgICAgICAgICAgbmFtZV9pZCA9IHZhci0+YmFzZXZhcmlhYmxl
OworKworKyAgICAgICAgICAgICAgICB2YXItPnBhcmFtZXRlciA9ICZhcmc7IC8vIEhvbGQgYSBw
b2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgc28gd2UgY2FuIGludmFsaWRhdGUgdGhlIHJlYWRvbmx5
IGZpZWxkIGlmIG5lZWRlZC4KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYWRkX2xv
Y2FsX3ZhcmlhYmxlX25hbWUobmFtZV9pZCk7CisrCisrICAgICAgICAgICAgZGVjbCArPSBhcmd1
bWVudF9kZWNsKGFyZyk7CisrCisrICAgICAgICAgICAgYm9vbCBpc19keW5hbWljX2ltZ19zYW1w
bGVyID0gaGFzX2V4dGVuZGVkX2RlY29yYXRpb24oYXJnLmlkLCBTUElSVkNyb3NzRGVjb3JhdGlv
bkR5bmFtaWNJbWFnZVNhbXBsZXIpOworKworKyAgICAgICAgICAgIGF1dG8gJmFyZ190eXBlID0g
Z2V0PFNQSVJUeXBlPihhcmcudHlwZSk7CisrICAgICAgICAgICAgaWYgKGFyZ190eXBlLmJhc2V0
eXBlID09IFNQSVJUeXBlOjpTYW1wbGVkSW1hZ2UgJiYgIWlzX2R5bmFtaWNfaW1nX3NhbXBsZXIp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0
aWMgcGxhbmUgYXJncyBmb3IgbXVsdGlwbGFuYXIgdGV4dHVyZQorKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBwbGFuZXMgPSAxOworKyAgICAgICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHBy
X3NhbXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9zYW1wbGVyKG5hbWVfaWQpKQorKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0ZXhwcl9zYW1wbGVyLT55Y2Jjcl9jb252ZXJzaW9uX2VuYWJsZSkK
KysgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZXMgPSBjb25zdGV4cHJfc2FtcGxlci0+cGxh
bmVzOworKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBp
KyspCisrICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgIiwgYXJndW1lbnRfZGVj
bChhcmcpLCBwbGFuZV9uYW1lX3N1ZmZpeCwgaSk7CisrCisrICAgICAgICAgICAgICAgIC8vIE1h
bnVmYWN0dXJlIGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBmb3IgU2FtcGxlZEltYWdlIHRleHR1cmUK
KysgICAgICAgICAgICAgICAgaWYgKGFyZ190eXBlLmltYWdlLmRpbSAhPSBEaW1CdWZmZXIpCisr
ICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgdGhyZWFkIGNvbnN0ICIsIHNhbXBs
ZXJfdHlwZShhcmdfdHlwZSksICIgIiwgdG9fc2FtcGxlcl9leHByZXNzaW9uKGFyZy5pZCkpOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0aWMg
c3dpenpsZSBhcmcuCisrICAgICAgICAgICAgaWYgKG1zbF9vcHRpb25zLnN3aXp6bGVfdGV4dHVy
ZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2ltYWdlcyAmJiBpc19zYW1wbGVkX2ltYWdlX3R5cGUo
YXJnX3R5cGUpICYmCisrICAgICAgICAgICAgICAgICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJn
X3R5cGUuYXJyYXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNv
bnN0YW50IHVpbnQiLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fc3dpenpsZV9leHBy
ZXNzaW9uKGFyZy5pZCkpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiAoYnVm
ZmVyc19yZXF1aXJpbmdfYXJyYXlfbGVuZ3RoLmNvdW50KG5hbWVfaWQpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXku
ZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNvbnN0YW50IHVpbnQi
LCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fYnVmZmVyX3NpemVfZXhwcmVzc2lvbihu
YW1lX2lkKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChpc19zYW1wbGVk
X2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmIGFyZ190eXBlLmltYWdlLmRlcHRoKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJy
YXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgICAgIGRlY2wg
Kz0gam9pbigiLCBjb25zdGFudCB1bmlmb3JtPHVpbnQ+IiwgYXJnX2lzX2FycmF5ID8gIiogIiA6
ICImICIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbihhcmcuaWQpKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KCZhcmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKysgICAgICAgICAgICAgICAgZGVjbCAr
PSAiLCAiOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiKSI7CisrICAgICAgICBz
dGF0ZW1lbnQoZGVjbCk7CisrCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb24KKysgICAgfQor
KworKyAgICAvLyBPdmVycmlkZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cyBwYXNzaW5nIGdlbmVy
YXRvciB0byBpbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIGNvbWUKKysgICAgLy8g
dG9nZXRoZXIgd2l0aCB0aGUgc2hhZG93IHNhbXBsZXIKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVu
Y19jYWxsX2FyZyhjb25zdCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFy
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpZCkgb3ZlcnJp
ZGUKKysgICAgeworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpD
b21waWxlck1TTDo6dG9fZnVuY19jYWxsX2FyZyhhcmcsIGlkKTsKKysKKysgICAgICAgIGNvbnN0
IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGV4cHJlc3Npb25fdHlwZShpZCk7CisrCisr
ICAgICAgICBpZiAoaXNfc2FtcGxlZF9pbWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1hZ2UuZGVw
dGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgLy8gTmVlZCB0
byBjaGVjayB0aGUgYmFzZSB2YXJpYWJsZSBpbiBjYXNlIHdlIG5lZWQgdG8gYXBwbHkgYSBxdWFs
aWZpZWQgYWxpYXMuCisrICAgICAgICAgICAgdWludDMyX3QgdmFyX2lkID0gMDsKKysgICAgICAg
ICAgICBhdXRvICp2YXIgICAgICAgPSBtYXliZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJs
ZT4oaWQpOworKyAgICAgICAgICAgIGlmICh2YXIpCisrICAgICAgICAgICAgICAgIHZhcl9pZCA9
IHZhci0+YmFzZXZhcmlhYmxlOworKworKyAgICAgICAgICAgIGFyZ19zdHIgKz0gIiwgIiArIHRv
U2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcl9pZCA/IHZhcl9pZCA6IGlkKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiBhcmdfc3RyOworKyAgICB9CisrCisrICAgIC8vIEFkZGl0
aW9uYWwgZnVuY3Rpb25zCisrICAgIHZvaWQgYWRkQnVpbHRJblJlc291cmNlcygpCisrICAgIHsK
KysgICAgICAgIHVpbnQzMl90IHZhcklkID0gYnVpbGRfY29uc3RhbnRfdWludF9hcnJheV9wb2lu
dGVyKCk7CisrICAgICAgICBzZXRfbmFtZSh2YXJJZCwga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNWYXJOYW1lKTsKKysgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG1hdGNoIGFueXRoaW5n
LgorKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkRlc2NyaXB0
b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAg
IHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29yYXRpb25CaW5kaW5nLCAwKTsKKysgICAg
ICAgIHNldF9leHRlbmRlZF9kZWNvcmF0aW9uKHZhcklkLCBzcGlydl9jcm9zczo6U1BJUlZDcm9z
c0RlY29yYXRpb25SZXNvdXJjZUluZGV4UHJpbWFyeSwgMCk7CisrICAgICAgICBtQU5HTEVTaGFk
b3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworKyAgICB9CisrCisrICAgIHZvaWQgYW5hbHl6
ZVNoYWRlclZhcmlhYmxlcygpCisrICAgIHsKKysgICAgICAgIGlyLmZvcl9lYWNoX3R5cGVkX2lk
PHNwaXJ2X2Nyb3NzOjpTUElSVmFyaWFibGU+KFt0aGlzXSh1aW50MzJfdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGly
dl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAgICAgICBjb25zdCBzcGlydl9j
cm9zczo6U1BJUlR5cGUgJnR5cGUgPSBnZXRfdmFyaWFibGVfZGF0YV90eXBlKHZhcik7CisrICAg
ICAgICAgICAgdWludDMyX3QgdmFySWQgICAgICAgICAgICAgICAgICAgID0gdmFyLnNlbGY7Cisr
CisrICAgICAgICAgICAgaWYgKHZhci5zdG9yYWdlID09IHNwdjo6U3RvcmFnZUNsYXNzVW5pZm9y
bUNvbnN0YW50ICYmICFpc19oaWRkZW5fdmFyaWFibGUodmFyKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5p
bWFnZS5kZXB0aCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbUhh
c0RlcHRoU2FtcGxlciA9IHRydWU7CisrCisrICAgICAgICAgICAgICAgICAgICBhdXRvICZlbnRy
eV9mdW5jID0gdGhpcy0+Z2V0PHNwaXJ2X2Nyb3NzOjpTUElSRnVuY3Rpb24+KGlyLmRlZmF1bHRf
ZW50cnlfcG9pbnQpOworKyAgICAgICAgICAgICAgICAgICAgZW50cnlfZnVuYy5maXh1cF9ob29r
c19pbi5wdXNoX2JhY2soW3RoaXMsICZ0eXBlLCAmdmFyLCB2YXJJZF0oKSB7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5KCk7Cisr
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50KCJjb25zdGFudCB1bmlmb3JtPHVp
bnQ+IiwgaXNBcnJheVR5cGUgPyAiKiAiIDogIiYgIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5VHlwZSA/ICIgPSAmIiA6ICIgPSAi
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19uYW1lKG1BTkdMRVNoYWRv
d0NvbXBhcmVNb2Rlc1ZhcklkKSwgIlsiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGlydl9jcm9zczo6Y29udmVydF90b19zdHJpbmcoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRfbWV0YWxfcmVzb3VyY2VfaW5kZXgodmFyLCBzcGlydl9j
cm9zczo6U1BJUlR5cGU6OkltYWdlKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJdOyIpOworKyAgICAgICAgICAgICAgICAgICAgfSk7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9KTsKKysgICAgfQorKworKyAgICBzdGQ6OnN0cmlu
ZyB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKysgICAgeworKyAg
ICAgICAgY29uc3RleHByIGNoYXIga0NvbXBhcmVNb2RlU3VmZml4W10gPSAiX0NvbXBNb2RlIjsK
KysgICAgICAgIGF1dG8gKmNvbWJpbmVkICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0
PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmluZWRJbWFnZVNhbXBsZXI+KGlkKTsKKysKKysgICAgICAg
IHN0ZDo6c3RyaW5nIGV4cHIgPSB0b19leHByZXNzaW9uKGNvbWJpbmVkID8gY29tYmluZWQtPmlt
YWdlIDogc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQoaWQpKTsKKysgICAgICAgIGF1dG8gaW5kZXgg
ICAgICAgPSBleHByLmZpbmRfZmlyc3Rfb2YoJ1snKTsKKysKKysgICAgICAgIGlmIChpbmRleCA9
PSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgICAgICAgICByZXR1cm4gZXhwciArIGtDb21wYXJl
TW9kZVN1ZmZpeDsKKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRv
IGltYWdlRXhwciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4KTsKKysgICAgICAgICAgICBhdXRvIGFy
cmF5RXhwciA9IGV4cHIuc3Vic3RyKGluZGV4KTsKKysgICAgICAgICAgICByZXR1cm4gaW1hZ2VF
eHByICsga0NvbXBhcmVNb2RlU3VmZml4ICsgYXJyYXlFeHByOworKyAgICAgICAgfQorKyAgICB9
CisrCisrICAgIENvbnRleHQgKm1Db250ZXh0OworKyAgICB1aW50MzJfdCBtQU5HTEVTaGFkb3dD
b21wYXJlTW9kZXNWYXJJZCA9IDA7CisrICAgIGJvb2wgbUhhc0RlcHRoU2FtcGxlciAgICAgICAg
ICAgICAgICAgID0gZmFsc2U7CisgfTsKKyAKKy1hbmdsZTo6UmVzdWx0IENvbnZlcnRTcGlydlRv
TXNsKAorLSAgICBDb250ZXh0ICpjb250ZXh0LAorK2FuZ2xlOjpSZXN1bHQgQ29udmVydFNwaXJ2
VG9Nc2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNo
TWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDx1aW50MzJfdCwg
dWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVy
QmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1
aW50MzJfdD4gKnNwcml2Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkU2hhZGVySW5mb091dCkKK0BAIC0zNjQsNyAr
MTEwMCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAg
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgU3Bp
cnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CisrICAg
IFNwaXJ2VG9Nc2xDb21waWxlciBjb21waWxlck1zbChjb250ZXh0LCBzdGQ6Om1vdmUoKnNwcml2
Q29kZSkpOworIAorICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlv
bnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCisgICAgIC8vIGluIGNh
c2Ugb2YgZXJyb3I/CitAQCAtNDMxLDEyICsxMTY3LDEzIEBAIHZvaWQgR2xzbGFuZ0dldFNoYWRl
clNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAg
ICAgb3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8sIHhmYk9ubHlT
aGFkZXJTb3VyY2VPdXQsCisgICAgICAgICAgICAgJnhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNo
YWRlclR5cGU6OlZlcnRleF0pOworIAorLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhv
cHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGZiT25seUludGVyZmFjZUlu
Zm8sICZ4ZmJPbmx5VmFyaWFibGVNYXBzKTsKKysgICAgICAgIEdsc2xhbmdBc3NpZ25Mb2NhdGlv
bnMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLmdldEV4ZWN1dGFibGUoKSwgZ2w6OlNoYWRlclR5cGU6
OlZlcnRleCwgJnhmYk9ubHlJbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwcyk7CisgICAgICAgICAqeGZiT25seVZTVmFyaWFi
bGVJbmZvTWFwT3V0ID0gc3RkOjptb3ZlKHhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNoYWRlclR5
cGU6OlZlcnRleF0pOworICAgICB9CisgfQorIAorKworIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dl
dFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNo
YWRlclN0YWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OkNhcHMgJmdsQ2FwcywKK0BAIC00NzgsNyArMTIxNSw3IEBAIHZvaWQgR2xzbGFuZ0dl
dFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsWGZiT25s
eVNoYWRlckluZm9PdXQgLyoqIG51bGxhYmxlICovKQorIHsKKyAgICAgLy8gUmV0cmlldmUgb3Jp
Z2luYWwgdW5pZm9ybSBidWZmZXIgYmluZGluZ3MgZ2VuZXJhdGVkIGJ5IGZyb250IGVuZC4gV2Ug
d2lsbCBuZWVkIHRvIGRvIGEgcmVtYXAuCistICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGluZ3M7CisrICAgIGFuZ2xlOjpIYXNoTWFw
PHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5nczsKKyAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdl
dFVuaWZvcm1CbG9ja3MoKTsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZm
ZXJJZHggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlcklkeCkKKyAgICAgeworQEAgLTQ4OSw3ICsx
MjI2LDcgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3Rh
dGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgIH0KKyAgICAgfQorICAgICAvLyBSZXRyaWV2ZSBv
cmlnaW5hbCBYRkIgYnVmZmVycyBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9udCBlbmQuCistICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGlu
Z3M7CisrICAgIGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdD4geGZiT3JpZ2luYWxC
aW5kaW5nczsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZmZXJJZHggPCBr
TWF4U2hhZGVyWEZCczsgKytidWZmZXJJZHgpCisgICAgIHsKKyAgICAgICAgIHN0ZDo6c3RyaW5n
IGJ1ZmZlck5hbWUgPSByeDo6R2V0WGZiQnVmZmVyTmFtZShidWZmZXJJZHgpOworQEAgLTUzMyw2
ICsxMjcwLDUgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworIH0KKy0KKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFtZXNwYWNlIHJ4Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oCitpbmRleCA4N2RjMjE3Li5mODU3MDM0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCitp
bmRleCAzNjhkYmY0Li43Y2M4OTkwIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorQEAgLTEsNSArMSw1IEBA
CisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtNTIsOCArNTIsNyBAQAorICAgICB7
CisgICAgICAgICAvLyBGaXJzdCBhbGxvY2F0aW9uCisgICAgICAgICBBTkdMRV9UUlkoQnVmZmVy
OjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2Rl
UHJpdmF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUsIG51bGxwdHIsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1
bHRTaXplLCBudWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOworICAgICAgICAgbVJl
bmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7
CisgICAgIH0KKyAgICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJl
c3VsdFNpemUgPiBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCitAQCAtODgsNiArODcs
MTIgQEAKKyAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPT0gMCkKKyAgICAgeworICAgICAgICAgbVJl
c2V0Rmlyc3RRdWVyeSA9IGNsZWFyT2xkVmFsdWU7CisrICAgICAgICBpZiAoIWNsZWFyT2xkVmFs
dWUgJiYgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZl
clJlYWRXcml0ZS5lbmFibGVkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIG9sZCB2
YWx1ZSBvZiBmaXJzdCBxdWVyeSBuZWVkcyB0byBiZSByZXRhaW5lZCBhbmQgZGV2aWNlIGRvZXNu
J3Qgc3VwcG9ydCBidWZmZXIKKysgICAgICAgICAgICAvLyByZWFkLXdyaXRlLCB3ZSBuZWVkIGFu
IGFkZGl0aW9uYWwgb2Zmc2V0IHRvIHN0b3JlIHRoZSBvbGQgdmFsdWUgb2YgdGhlIHF1ZXJ5Lgor
KyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRleHRNdGwsIHF1ZXJ5
LCBmYWxzZSk7CisrICAgICAgICB9CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworQEAgLTExMyw5ICsxMTgsMzMgQEAKKyAgICAgfQorIAorICAgICBSZW5k
ZXJVdGlscyAmdXRpbHMgICAgICAgICAgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRVdGlscygpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0
cjsKKysgICAgLy8gQ29tYmluZSB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxv
Y2F0ZWQgZm9yIGZpcnN0IHF1ZXJ5CisrICAgIGlmIChtQWxsb2NhdGVkUXVlcmllc1swXSkKKysg
ICAgeworKyAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWYgPSBtQWxsb2NhdGVkUXVlcmll
c1swXS0+Z2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpOworKyAgICAgICAgY29uc3QgVmlzaWJp
bGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQorKyAgICAgICAgICAgIG1B
bGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworKyAg
ICAgICAgaWYgKCFtUmVzZXRGaXJzdFF1ZXJ5ICYmCisrICAgICAgICAgICAgIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZlclJlYWRXcml0ZS5lbmFibGVk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCByZWFkIGFuZCB3cml0
ZSB0byB0aGUgc2FtZSBidWZmZXIgaW4gc2hhZGVyLiBXZSBuZWVkIHRvIGNvcHkgdGhlIG9sZAor
KyAgICAgICAgICAgIC8vIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IHRvIGZpcnN0IG9mZnNldCBhbGxv
Y2F0ZWQgZm9yIGl0LgorKyAgICAgICAgICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgICAgICAgICAgYmxpdEVuY29kZXItPmNvcHlCdWZm
ZXIoZHN0QnVmLCAwLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBhbGxvY2F0ZWRPZmZzZXRzLmZy
b250KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1
ZXJ5UmVzdWx0U2l6ZSk7CisrICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1
bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVm
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICB1
dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCAhbVJlc2V0Rmlyc3RRdWVy
eSwgYWxsb2NhdGVkT2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworKyAgICAgICAgfQorKyAg
ICB9CisgCisgICAgIC8vIENvbWJpbmUgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG9mZnNldHMg
YWxsb2NhdGVkIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVlcmllcworLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorKyAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorICAgICB7
CisgICAgICAgICBRdWVyeU10bCAqcXVlcnkgPSBtQWxsb2NhdGVkUXVlcmllc1tpXTsKKyAgICAg
ICAgIGlmICghcXVlcnkpCitAQCAtMTI2LDEyICsxNTUsMTIgQEAKKyAgICAgICAgIGNvbnN0IEJ1
ZmZlclJlZiAmZHN0QnVmID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1
bHRCdWZmZXIoKTsKKyAgICAgICAgIGNvbnN0IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRzTXRsICZh
bGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgICBtQWxsb2NhdGVkUXVlcmllc1tpXS0+Z2V0
QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKTsKKy0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNp
YmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBrZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFt
UmVzZXRGaXJzdFF1ZXJ5LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVmKTsKKysgICAg
ICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIGZhbHNlLCBhbGxv
Y2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0QnVmKTsKKyAgICAgfQorIAorICAgICAvLyBSZXF1ZXN0
IHN5bmNocm9uaXphdGlvbiBhbmQgY2xlYW51cAorLSAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgIGJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCisgICAg
IHsKKyAgICAgICAgIFF1ZXJ5TXRsICpxdWVyeSA9IG1BbGxvY2F0ZWRRdWVyaWVzW2ldOworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCitpbmRleCA2
Yjk2N2RlLi5kMGE0ODM3IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZW5kZXJfdXRpbHMuaAorQEAgLTYsNiArNiw4IEBACisgLy8gbXRsX3JlbmRlcl91dGlscy5o
OgorIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdo
aWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRlcnMKKyAvLyAgICBm
b3IgY29udmVydGluZywgYmxpdHRpbmcsIGNvcHlpbmcgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGRh
dGEsIGFuZCBtYW55IG1vcmUuCisrLy8gTk9URShocWxlKTogQ29uc2lkZXIgc3BsaXR0aW5nIHRo
aXMgY2xhc3MgaW50byBtdWx0aXBsZSBjbGFzc2VzIGVhY2ggZG9pbmcgZGlmZmVyZW50IHV0aWxp
dGllcy4KKysvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KKyAvLworIAorICNpZm5k
ZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXworQEAgLTg5LDYg
KzkxLDggQEAgc3RydWN0IENvbG9yQmxpdFBhcmFtcyA6IHB1YmxpYyBCbGl0UGFyYW1zCisgc3Ry
dWN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgOiBwdWJsaWMgQmxpdFBhcmFtcworIHsKKyAgICAg
VGV4dHVyZVJlZiBzcmNTdGVuY2lsOworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGV2ZWwgPSAw
OworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOworIH07CisgCisgLy8gU3RlbmNp
bCBibGl0IHZpYSBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4
dHVyZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KK0BAIC0zMDksMjEgKzMxMywxNyBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwdWJsaWM6
CisgICAgIHZvaWQgb25EZXN0cm95KCk7CisgCistICAgIC8vIENvbnZlcnQgaW5kZXggYnVmZmVy
LgorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIHRyaWFu
Z2xlIGZhbiBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAgICAvLyBHZW5l
cmF0ZSB0cmlhbmdsZSBmYW4gaW5kZXggYnVmZmVyIGZvciBnbERyYXdFbGVtZW50cygpLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorLSAgICAvLyBHZW5lcmF0ZSBsaW5lIGxvb3AgaW5kZXggYnVmZmVy
IGZvciBnbERyYXdBcnJheXMoKS4KKyAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29w
QnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxv
b3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIGxpbmUgbG9vcCdz
IGxhc3Qgc2VnbWVudCBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorLSAgICAvLyBU
aGlzIGlzIHVzZWQgd2hlbiBwcmltaXRpdmUgcmVzdGFydCBpcyBub3QgZW5hYmxlZC4KKyAgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnQoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgZmlyc3RWZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RWZXJ0ZXgsCitAQCAtMzQwLDYgKzM0MCwxOCBAQCBj
bGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAg
IGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJy
YXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25Q
YXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworKworKyAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVBy
aW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dl
bmVyYXRlZCk7CisrCisgICBwcml2YXRlOgorICAgICAvLyBJbmRleCBnZW5lcmF0b3IgY29tcHV0
ZSBwaXBlbGluZXM6CisgICAgIC8vICAtIEZpcnN0IGRpbWVuc2lvbjogaW5kZXggdHlwZS4KK0BA
IC0zNDgsNyArMzYwLDYgQEAgY2xhc3MgSW5kZXhHZW5lcmF0b3JVdGlscyBmaW5hbCA6IGFuZ2xl
OjpOb25Db3B5YWJsZQorICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1dG9PYmpDUHRy
PGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAorICAgICAgICAgICAgICAgICAgICBh
bmdsZTo6RW51bVNpemU8Z2w6OkRyYXdFbGVtZW50c1R5cGU+KCk+OworIAorLSAgICAvLyBHZXQg
Y29tcHV0ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4KKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBnZXRJbmRleENvbnZlcnNp
b25QaXBlbGluZSgKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBn
bDo6RHJhd0VsZW1lbnRzVHlwZSBzcmNUeXBlLAorQEAgLTM3NSw3ICszODYsOCBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAv
LyBNdXN0IGJlIG11bHRpcGxlcyBvZiBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQKKyAgICAg
ICAgIHVpbnQzMl90IGRzdE9mZnNldCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7Cisg
CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5R1BVKAorICAgICAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0zOTMsNiArNDA1
LDExIEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBjb25zdCBJbmRl
eEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bVZl
cnRpY2VzUGVyUHJpbWl0aXZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKTsKKysKKyAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtSW5k
ZXhDb252ZXJzaW9uUGlwZWxpbmVDYWNoZXM7CisgCisgICAgIEluZGV4Q29udmVyc2lvblBpcGVs
aW5lQXJyYXkgbVRyaUZhbkZyb21FbGVtQXJyYXlHZW5lcmF0b3JQaXBlbGluZUNhY2hlczsKK0BA
IC00MjksNyArNDQ2LDcgQEAgY2xhc3MgTWlwbWFwVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyAgIHB1YmxpYzoKKyAgICAgdm9pZCBvbkRlc3Ryb3koKTsKKyAKKy0gICAgLy8gQ29t
cHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gT25seSBwb3NzaWJsZSBmb3IgM0QgdGV4dHVy
ZSBmb3Igbm93LgorKyAgICAvLyBDb21wdXRlIGJhc2VkIG1pcG1hcCBnZW5lcmF0aW9uLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTWlwbWFwQ1MoQ29udGV4dE10bCAqY29udGV4dE10bCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNy
Y1RleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNSR0JN
aXBtYXAsCitAQCAtNDM3LDkgKzQ1NCwxNSBAQCBjbGFzcyBNaXBtYXBVdGlscyBmaW5hbCA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorIAorICAgcHJpdmF0ZToKKyAgICAgdm9pZCBlbnN1cmUzRE1pcEdl
bmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisrICAg
IHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZUN1
YmVNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwp
OworIAorICAgICAvLyBNaXBtYXBzIGdlbmVyYXRpbmcgY29tcHV0ZSBwaXBlbGluZToKKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtM0RNaXBHZW5lcmF0b3JQ
aXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBt
MkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBp
cGVsaW5lU3RhdGU+PiBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lOworKyAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxp
bmU7CisgfTsKKyAKKyAvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyBwaXhlbHMgY29weSBiZXR3
ZWVuIGJ1ZmZlcnMgYW5kIHRleHR1cmVzCitAQCAtNTQzLDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0
ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAg
UmVuZGVyUGlwZWxpbmVDYWNoZSBtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lQ2FjaGU7
CisgfTsKKyAKKysvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyB0cmFuc2Zvcm0gZmVlZGJhY2sK
KysgICAgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tVdGlscworK3sKKysgIHB1YmxpYzoKKysgICAg
dm9pZCBvbkRlc3Ryb3koKTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVT
dGF0ZT4+IGdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisrICAgICAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVu
Y29kZXIsCisrICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsK
KysKKysgIHByaXZhdGU6CisrICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVN
c2xYZmJMaWJyYXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFu
c2xhdGVkTXNsKTsKKyt9OworKworIC8vIFJlbmRlclV0aWxzOiBjb250YWluZXIgY2xhc3Mgb2Yg
dmFyaW91cyB1dGlsIGNsYXNzZXMgYWJvdmUKKyBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyB7CitAQCAtNTg3LDcgKzYyNSw4IEBAIGNsYXNz
IFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBh
bmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZm
ZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZy
b21BcnJheVBhcmFtcyAmcGFyYW1zKTsKK0BAIC02MzksNiArNjc4LDE5IEBAIGNsYXNzIFJlbmRl
clV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmc3JjQW5nbGVGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZv
cm1hdENvbnZlcnRQYXJhbXMgJnBhcmFtcyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KnJlbmRlckVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYyk7CisrCisrICAgIGFu
Z2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpOworKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgCisgICBwcml2YXRlOgorICAgICAv
LyBvdmVycmlkZSBFcnJvckhhbmRsZXIKK0BAIC02NDYsNyArNjk4LDcgQEAgY2xhc3MgUmVuZGVy
VXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkg
b3ZlcnJpZGU7CistICAgIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqX051bGxhYmxlIGVycm9y
LAorKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92
ZXJyaWRlOworQEAgLTY2Miw2ICs3MTQsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgTWlwbWFwVXRpbHMgbU1pcG1hcFV0aWxz
OworICAgICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXplPFBpeGVs
VHlwZT4oKT4gbUNvcHlQaXhlbHNVdGlsczsKKyAgICAgVmVydGV4Rm9ybWF0Q29udmVyc2lvblV0
aWxzIG1WZXJ0ZXhGb3JtYXRVdGlsczsKKysgICAgVHJhbnNmb3JtRmVlZGJhY2tVdGlscyBtVHJh
bnNmb3JtRmVlZGJhY2tVdGlsczsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBtdGwKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCitpbmRleCBk
MjI0ODAxLi4zMmIzM2NhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVuZGVyX3V0aWxzLm1tCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKK0BAIC01NCwxMCArNTUs
MTIgQEAKKyAgICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOworICAgICBpbnQgc3JjTGV2ZWwg
ICAgICAgICA9IDA7CisgICAgIGludCBzcmNMYXllciAgICAgICAgID0gMDsKKysgICAgaW50IHNy
Y0xldmVsMiAgICAgICAgPSAwOworKyAgICBpbnQgc3JjTGF5ZXIyICAgICAgICA9IDA7CisgICAg
IHVpbnQ4X3QgZHN0RmxpcFggICAgID0gMDsKKyAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAw
OworICAgICB1aW50OF90IGRzdEx1bWluYW5jZSA9IDA7ICAvLyBkZXN0IHRleHR1cmUgaXMgbHVt
aW5hY2UKKy0gICAgdWludDhfdCBwYWRkaW5nWzEzXTsKKysgICAgdWludDhfdCBwYWRkaW5nWzld
OworIH07CisgCisgc3RydWN0IEJsaXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCitAQCAt
OTAsNyArOTMsNyBAQAorICAgICB1aW50OF90IHBhZGRpbmdbN107CisgfTsKKyAKKy0vLyBTZWUg
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisrLy8gU2Vl
IGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRhbAorIHN0cnVjdCBDb21i
aW5lVmlzaWJpbGl0eVJlc3VsdFVuaWZvcm0KKyB7CisgICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0
OworQEAgLTk5LDEyICsxMDIsMTEgQEAKKyB9OworIAorIC8vIFNlZSBsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwKKy1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBV
bmlmb3JtCisrc3RydWN0IEdlbmVyYXRlM0RNaXBtYXBVbmlmb3JtCisgeworICAgICB1aW50MzJf
dCBzcmNMZXZlbDsKKyAgICAgdWludDMyX3QgbnVtTWlwbWFwc1RvR2VuZXJhdGU7CistICAgIHVp
bnQ4X3Qgc1JHQjsKKy0gICAgdWludDhfdCBwYWRkaW5nWzddOworKyAgICB1aW50MzJfdCBwYWRk
aW5nWzJdOworIH07CisgCisgLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Y29weV9idWZmZXIubWV0YWwKK0BAIC0xNTYsMTkgKzE1OCwzNiBAQAorIC8vIGV4aXRpbmcgYmxv
Y2suCisgc3RydWN0IFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeQorIHsKKy0gICAgU2NvcGVk
RGlzYWJsZU9jY2x1c2lvblF1ZXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGFuZ2xlOjpSZXN1
bHQgKnJlc3VsdE91dCkKKy0gICAgICAgIDogbUNvbnRleHRNdGwoY29udGV4dE10bCksIG1SZXN1
bHRPdXQocmVzdWx0T3V0KQorKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4
dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0KQorKyAgICAgICAgOiBtQ29udGV4dE10bChjb250
ZXh0TXRsKSwgbUVuY29kZXIoZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQorKyAgICB7
CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2Ns
dXNpb25RdWVyeSgpKQorICAgICAgICAgeworKyAgICAgICAgICAgIGVuY29kZXItPnB1c2hEZWJ1
Z0dyb3VwKEAiRGlzYWJsZWQgT2NjbHVzaW9uUXVlcnkiKTsKKysgICAgICAgIH0KKysjZW5kaWYK
KyAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5CisgICAgICAg
ICBjb250ZXh0TXRsLT5kaXNhYmxlQWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsK
KyAgICAgfQorICAgICB+U2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5KCkKKyAgICAgeworICAg
ICAgICAgKm1SZXN1bHRPdXQgPSBtQ29udGV4dE10bC0+cmVzdGFydEFjdGl2ZU9jY2x1c2lvblF1
ZXJ5SW5SZW5kZXJQYXNzKCk7CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChtQ29udGV4
dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBtRW5jb2Rlci0+cG9wRGVidWdHcm91cCgpOworKyAgICAgICAgfQorKyNlbHNlCisrICAgICAg
ICBBTkdMRV9VTlVTRURfVkFSSUFCTEUobUVuY29kZXIpOworKyNlbmRpZgorICAgICB9CisgCisg
ICBwcml2YXRlOgorICAgICBDb250ZXh0TXRsICptQ29udGV4dE10bDsKKysgICAgUmVuZGVyQ29t
bWFuZEVuY29kZXIgKm1FbmNvZGVyOworIAorICAgICBhbmdsZTo6UmVzdWx0ICptUmVzdWx0T3V0
OworIH07CitAQCAtMjE5LDY2ICsyMzgsNDMgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQz
Ml90IHNyY1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZmZlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
T2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgQVNTRVJUKGNvdW50ID4gMik7CistCist
ICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudDsKKy0gICAgQU5HTEVfVFJZKG10bDo6R2V0VHJp
YW5nbGVGYW5JbmRpY2VzQ291bnQoY29udGV4dE10bCwgY291bnQsICZnZW5JbmRpY2VzQ291bnQp
KTsKKy0KKyAgICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworLSAgICBjb25zdCB1aW50MzJfdCBrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
LQorKyAgICBHTHNpemVpIGRzdFRyaWFuZ2xlICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAg
dWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVy
LT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworLSAgICBUIHRyaUZpcnN0SWR4ICAgID0g
MDsgIC8vIFZlcnRleCBpbmRleCBvZiB0cmlhbmxnZSdzIDFzdCB2ZXJ0ZXgKKy0gICAgVCBzcmNQ
cmV2SWR4ICAgICA9IDA7ICAvLyBWZXJ0ZXggaW5kZXggb2YgdHJpYW5sZ2UncyAybmQgdmVydGV4
CisrICAgIFQgdHJpRmlyc3RJZHgsIHNyY1ByZXZJZHg7CisgICAgIG1lbWNweSgmdHJpRmlyc3RJ
ZHgsIGluZGljZXMsIHNpemVvZih0cmlGaXJzdElkeCkpOworKyAgICBtZW1jcHkoJnNyY1ByZXZJ
ZHgsIGluZGljZXMgKyAxLCBzaXplb2Yoc3JjUHJldklkeCkpOworIAorICAgICBpZiAocHJpbWl0
aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsKKy0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBM
b2NhdGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xlJ3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZl
ci4KKyAgICAgICAgIEdMc2l6ZWkgdHJpRmlyc3RJZHhMb2MgPSAwOworICAgICAgICAgd2hpbGUg
KHRyaUZpcnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7Cist
ICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbdHJpRmlyc3RJZHhMb2MrK10sICZrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4LAorLSAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0RzdFByaW1pdGl2
ZVJlc3RhcnRJbmRleCkpOworKyAgICAgICAgICAgICsrdHJpRmlyc3RJZHhMb2M7CisgICAgICAg
ICAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jLCBzaXpl
b2YodHJpRmlyc3RJZHgpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIGlmICh0cmlGaXJzdElk
eExvYyArIDIgPj0gY291bnQpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gTm90IGVub3Vn
aCBpbmRpY2VzLgorLSAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gdHJpRmlyc3RJZHhMb2M7
IGkgPCBjb3VudDsgKytpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbWVtY3B5
KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LCBzaXplb2Yoa0RzdFByaW1p
dGl2ZVJlc3RhcnRJbmRleCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAg
IGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNvdW50KQorLSAgICAgICAgeworLSAgICAg
ICAgICAgIG1lbWNweSgmc3JjUHJldklkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jICsgMSwg
c2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gdHJpRmlyc3RJZHhMb2MgKyAyOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgIHsKKyAg
ICAgICAgICAgICB1aW50MzJfdCB0cmlJbmRpY2VzWzNdOworLQorICAgICAgICAgICAgIFQgc3Jj
SWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsgaSwgc2l6ZW9mKHNy
Y0lkeCkpOworKyAgICAgICAgICAgIGJvb2wgY29tcGxldGVUcmlhbmdsZSA9IHRydWU7CisgICAg
ICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBz
cmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKKyAgICAgICAgICAgICB7CistICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuCistICAgICAgICAgICAgICAgIHRy
aUluZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKKy0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1sxXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAgICAgICAg
ICAgICAgICB0cmlJbmRpY2VzWzJdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CisrICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuIE1vdmUgdG8gbmV4dCB0cmlhbmds
ZSBhbmQgc2V0IHRyaUZpcnN0SW5kZXgKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHggICAg
ICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHhMb2MgICA9IGk7CisrICAg
ICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgZWxzZSBpZiAoaSA8IHRyaUZpcnN0SWR4TG9jICsgMikKKyAgICAgICAgICAg
ICB7CistICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUKKy0gICAgICAgICAg
ICAgICAgdHJpSW5kaWNlc1swXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CistICAgICAg
ICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsK
KysgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlhbmdsZSwgbW92ZSB0byBuZXh0IHRy
aWFuZ2xlCisrICAgICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHsKK0BAIC0yODYsMTUg
KzI4MiwxNiBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAg
ICAgICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBzcmNQcmV2SWR4OworICAgICAgICAgICAgICAg
ICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBp
ZiAoY29tcGxldGVUcmlhbmdsZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1l
bWNweShkc3RQdHIgKyAzICogZHN0VHJpYW5nbGUsIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CisrICAgICAgICAgICAgfQor
ICAgICAgICAgICAgIHNyY1ByZXZJZHggPSBzcmNJZHg7CistCistICAgICAgICAgICAgbWVtY3B5
KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOwor
ICAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAgICAgbWVtY3B5KCZz
cmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0KKyAgICAgICAg
IGZvciAoR0xzaXplaSBpID0gMjsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICB7CisgICAgICAg
ICAgICAgVCBzcmNJZHg7CitAQCAtMzA2LDE0ICszMDMsNjggQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJ
ZHg7CisgICAgICAgICAgICAgc3JjUHJldklkeCAgICA9IHNyY0lkeDsKKyAKKy0gICAgICAgICAg
ICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJp
SW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKysgICAgICAgICAgICArK2RzdFRyaWFuZ2xl
OworICAgICAgICAgfQorICAgICB9CistICAgIGRzdEJ1ZmZlci0+dW5tYXBBbmRGbHVzaFN1YnNl
dChjb250ZXh0TXRsLCBkc3RPZmZzZXQsIGdlbkluZGljZXNDb3VudCAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJh
dGVkID0gZHN0VHJpYW5nbGUgKiAzOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwp
OworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorK2FuZ2xlOjpSZXN1bHQgR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQgKmluZGljZXMsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVmZmVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZz
ZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
aWNlc0dlbmVyYXRlZCkKKyt7CisrICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0YXJ0
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKysgICAgdWludDMyX3QgKmRz
dFB0ciAgICAgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNv
bnRleHRNdGwpICsgZHN0T2Zmc2V0KTsKKysgICAgR0xzaXplaSByZWFkVmFsdWVMb2MgPSAwOwor
KyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisrICAgIHVpbnQzMl90IGRzdElkeCAgICAg
ID0gMDsKKysgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMsIHNpemVvZihyZWFkVmFsdWUp
KTsKKysgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQor
KyAgICB7CisrCisrICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgIG1lbWNweSgmcmVh
ZFZhbHVlLCBpbmRpY2VzICsgcmVhZFZhbHVlTG9jLCBzaXplb2YocmVhZFZhbHVlKSk7CisrICAg
IH0KKysgICAgd2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0gY291
bnQpCisrICAgIHsKKysKKysgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKysgICAg
ICAgIGJvb2wgZm91bmRQcmltaXRpdmUgPSB0cnVlOworKyAgICAgICAgZm9yIChpbnQgayA9IDA7
IGsgPCBpbmRpY2VzUGVyUHJpbWl0aXZlOyArK2spCisrICAgICAgICB7CisrICAgICAgICAgICAg
bWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFs
dWUpKTsKKysgICAgICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgICAgICBpZiAocmVh
ZFZhbHVlID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICBmb3VuZFByaW1pdGl2ZSA9IGZhbHNlOworKyAgICAgICAgICAgICAgICBi
cmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgcHJpbUluZGljaWVzW2tdID0gKHVpbnQzMl90KXJlYWRWYWx1ZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoZm91bmRQcmltaXRpdmUp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUlu
ZGljaWVzLCAoaW5kaWNlc1BlclByaW1pdGl2ZSkgKiBzaXplb2YodWludDMyX3QpKTsKKysgICAg
ICAgICAgICBkc3RJZHggKz0gaW5kaWNlc1BlclByaW1pdGl2ZTsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJhdGVk
ID0gZHN0SWR4OworKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrfQorKwor
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xp
ZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCitAQCAtMzI4LDE0ICszNzks
MTEgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICBjb25z
dCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOworIAorICAgICB1aW50MzJfdCAqZHN0UHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCAqPihkc3RCdWZmZXItPm1hcChjb250ZXh0TXRsKSArIGRzdE9mZnNl
dCk7CistICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1cnJlbnQgbGluZSBs
b29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KKy0gICAgLy8gZW5jb3Vu
dGVyIGEgcHJpbWl0aXZlIHJlc3RhcnQgaW5kZXguCisgICAgIFQgbGluZUxvb3BGaXJzdElkeDsK
KyAgICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2YobGluZUxvb3BG
aXJzdElkeCkpOworIAorICAgICBpZiAocHJpbWl0aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsK
Ky0gICAgICAgIC8vIGxpbmVMb29wRmlyc3RJZHhMb2M6IGxvY2F0aW9uIG9mIGN1cnJlbnQgbGlu
ZSBsb29wJ3MgZmlyc3QgdmVydGV4IGluIHRoZSBzb3VyY2UgYnVmZmVyLgorICAgICAgICAgR0xz
aXplaSBsaW5lTG9vcEZpcnN0SWR4TG9jID0gMDsKKyAgICAgICAgIHdoaWxlIChsaW5lTG9vcEZp
cnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7CitAQCAtMzQ0
LDE1ICszOTIsMTIgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAor
ICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BGaXJzdElkeCwgaW5kaWNlcyArIGxpbmVMb29w
Rmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CisgICAgICAgICB9CisgCist
ICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0dGVuIHRvIGRlc3Qg
YnVmZmVyCisgICAgICAgICB1aW50MzJfdCBkc3RJZHggPSBsaW5lTG9vcEZpcnN0SWR4OworICAg
ICAgICAgbWVtY3B5KCZkc3RQdHJbbGluZUxvb3BGaXJzdElkeExvY10sICZkc3RJZHgsIHNpemVv
Zihkc3RJZHgpKTsKKy0gICAgICAgIC8vIGRzdFdyaXR0ZW46IG51bWJlciBvZiBpbmRpY2VzIHdy
aXR0ZW4gdG8gZGVzdCBidWZmZXIKKyAgICAgICAgIHVpbnQzMl90IGRzdFdyaXR0ZW4gPSBsaW5l
TG9vcEZpcnN0SWR4TG9jICsgMTsKKyAKKyAgICAgICAgIGZvciAoR0xzaXplaSBpID0gbGluZUxv
b3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgeworLSAgICAgICAg
ICAgIC8vIHNyY0lkeCA6IHZhbHVlIG9mIGluZGV4IGZyb20gc291cmNlIGJ1ZmZlcgorICAgICAg
ICAgICAgIFQgc3JjSWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsg
aSwgc2l6ZW9mKHNyY0lkeCkpOworICAgICAgICAgICAgIGlmIChzcmNJZHggPT0ga1NyY1ByaW1p
dGl2ZVJlc3RhcnRJbmRleCkKK0BAIC00MDAsNyArNDQ1LDcgQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorIAorICAgICAgICAgKmluZGljZXNHZW5lcmF0ZWQgPSBj
b3VudCArIDE7CisgICAgIH0KKy0gICAgZHN0QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNv
bnRleHRNdGwsIGRzdE9mZnNldCwgKCppbmRpY2VzR2VuZXJhdGVkKSAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwpOworIAorICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTQ3Miw3ICs1MTcsNyBAQCB2b2lkIEVu
c3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKERpc3BsYXlNdGwgKmRpc3BsYXksCisgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKyAgICAgICAgIGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworLSAgICAgICAgaWQ8TVRMTGli
cmFyeT4gc2hhZGVyTGliICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisrICAg
ICAgICBhdXRvIHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRl
cnNMaWIoKTsKKyAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICAgPSBuaWw7CisgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldp
dGhOYW1lOmZ1bmN0aW9uTmFtZV07CisgCitAQCAtNTEyLDcgKzU1Nyw3IEBAIHZvaWQgRW5zdXJl
U3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKKyAgICAgQU5HTEVfTVRMX09C
SkNfU0NPUEUKKyAgICAgeworICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRp
c3BsYXktPmdldE1ldGFsRGV2aWNlKCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJM
aWIgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKysgICAgICAgIGF1dG8gc2hh
ZGVyTGliICAgICAgICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAg
ICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKKyAKKyAgICAgICAgIGlkPE1U
TEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rp
b25OYW1lCitAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRl
UGlwZWxpbmVJbml0aWFsaXplZCgKKyBBTkdMRV9JTkxJTkUKKyB2b2lkIEVuc3VyZVZlcnRleFNo
YWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcg
KnZlcnRleEZ1bmN0aW9uTmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJQaXBlbGluZUNh
Y2hlICpwaXBlbGluZUNhY2hlT3V0KQorIHsKKyAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmcGlw
ZWxpbmVDYWNoZSA9ICpwaXBlbGluZUNhY2hlT3V0OworQEAgLTU0OSw4ICs1OTUsNiBAQCB2b2lk
IEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAq
Y29udGV4dCwKKyAKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgeworLSAgICAgICAg
RGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworLSAgICAg
ICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNM
aWIoKTsKKyAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1
bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAKKyAgICAgICAgIEFTU0VSVChb
c2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOworQEAgLTU3MCw3ICs2MTQsOSBAQCB2b2lk
IEVuc3VyZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXpl
ZCgKKyAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQorICAgICB7CisgICAgICAgICAvLyBOb24gc3Bl
Y2lhbGl6ZWQgY29uc3RhbnRzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlv
bi4KKy0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6
ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAorKyAgICAgICAgRGlzcGxheU10bCAqZGlz
cGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKysgICAgICAgIGF1dG8gc2hhZGVyTGliICAg
ICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2ZXJ0ZXhGdW5j
dGlvbk5hbWUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVDYWNoZU91dCk7CisgICAgICAgICByZXR1cm47
CisgICAgIH0KK0BAIC01ODUsNyArNjMxLDcgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRl
eFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCisgICAgIEFOR0xFX01UTF9PQkpD
X1NDT1BFCisgICAgIHsKKyAgICAgICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgPSBjb250ZXh0LT5n
ZXREaXNwbGF5KCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5
LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgICBOU0Vycm9yICplcnIg
ICAgICAgID0gbmlsOworIAorICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFk
ZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKK0BAIC02MTUsNiAr
NjYxLDIyIEBAIFJlbmRlclBpcGVsaW5lRGVzYyBHZXRDb21wdXRpbmdWZXJ0ZXhTaGFkZXJPbmx5
UmVuZGVyUGlwZWxpbmVEZXNjKFJlbmRlckNvbW1hbmRFCisgICAgIHJldHVybiBwaXBlbGluZURl
c2M7CisgfQorIAorKy8vIEdldCBwaXBlbGluZSBkZXNjcmlwdG9yIGZvciByZW5kZXIgcGlwZWxp
bmUgdGhhdCBjb250YWlucyB2ZXJ0ZXggc2hhZGVyIGFjdGluZyBhcyB0cmFuc2Zvcm0KKysvLyBm
ZWVkYmFjay4KKytBTkdMRV9JTkxJTkUKKytSZW5kZXJQaXBlbGluZURlc2MgR2V0VHJhbnNmb3Jt
RmVlZGJhY2tSZW5kZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBS
ZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNjICAgPSBSZW5kZXJQaXBlbGluZURlc2Mo
cGlwZWxpbmVEZXNjKTsKKysgICAgY29uc3QgUmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNj
ID0gY21kRW5jb2Rlci0+cmVuZGVyUGFzc0Rlc2MoKTsKKysKKysgICAgcmVuZGVyUGFzc0Rlc2Mu
cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoJnBpcGVsaW5lRGVzYy5vdXRwdXREZXNj
cmlwdG9yKTsKKysgICAgeGZiUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgPSBSZW5k
ZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICB4ZmJQaXBlbGluZURlc2Mu
aW5wdXRQcmltaXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7Cisr
CisrICAgIHJldHVybiB4ZmJQaXBlbGluZURlc2M7CisrfQorKworIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorIHZvaWQgQ2xlYXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNo
ZUFycmF5KQorIHsKK0BAIC03MTIsOSArNzc0LDE1IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdV
bmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgdW5pZm9y
bVBhcmFtcy5zcmNMYXllciA9IHBhcmFtcy5zcmNMYXllcjsKKyAgICAgaWYgKGlzQ29sb3JCbGl0
KQorICAgICB7CistICAgICAgICBjb25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOworKyAgICAgICAg
Y29uc3QgYXV0byBjb2xvclBhcmFtcyAgICAgPSBzdGF0aWNfY2FzdDxjb25zdCBDb2xvckJsaXRQ
YXJhbXMgKj4oJnBhcmFtcyk7CisgICAgICAgICB1bmlmb3JtUGFyYW1zLmRzdEx1bWluYW5jZSA9
IGNvbG9yUGFyYW1zLT5kc3RMdW1pbmFuY2UgPyAxIDogMDsKKyAgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKysgICAgICAgIHVuaWZvcm1Q
YXJhbXMuc3JjTGV2ZWwyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbDsKKysgICAgICAgIHVu
aWZvcm1QYXJhbXMuc3JjTGF5ZXIyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMYXllcjsKKysgICAg
fQorIAorICAgICAvLyBDb21wdXRlIHNvdXJjZSB0ZXhDb29yZHMKKyAgICAgdWludDMyX3Qgc3Jj
V2lkdGggPSAwLCBzcmNIZWlnaHQgPSAwOworQEAgLTcyNyw4ICs3OTUsOCBAQCB2b2lkIFNldHVw
QmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
CisgICAgIHsKKyAgICAgICAgIGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKmRzUGFyYW1z
ID0KKyAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1z
ICo+KCZwYXJhbXMpOworLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwt
PndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7CistICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbC0+aGVpZ2h0KGRzUGFyYW1zLT5zcmNMZXZlbCk7CisrICAgICAgICBzcmNX
aWR0aCAgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+d2lkdGgobXRsOjpNaXBtYXBOYXRpdmVMZXZl
bChkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsKSk7CisrICAgICAgICBzcmNIZWlnaHQgPSBkc1Bh
cmFtcy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMt
PnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTczOSw4
ICs4MDcsOCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgIEdldEJsaXRUZXhDb29yZHMoc3JjV2lkdGgsIHNy
Y0hlaWdodCwgcGFyYW1zLnNyY1JlY3QsIHBhcmFtcy5zcmNZRmxpcHBlZCwgcGFyYW1zLnVucGFj
a0ZsaXBYLAorICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUwLCAm
djAsICZ1MSwgJnYxKTsKKyAKKy0gICAgZmxvYXQgZHUgPSB1MSAtIHUwOworLSAgICBmbG9hdCBk
diA9IHYxIC0gdjA7CisrICAgIGF1dG8gZHUgPSB1MSAtIHUwOworKyAgICBhdXRvIGR2ID0gdjEg
LSB2MDsKKyAKKyAgICAgLy8gbG93ZXIgbGVmdAorICAgICB1bmlmb3JtUGFyYW1zLnNyY1RleENv
b3Jkc1swXVswXSA9IHUwOworQEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lk
IFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIC8vIFN0
ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zIGltcGxlbWVudGF0aW9uCisgU3RlbmNpbEJsaXRWaWFC
dWZmZXJQYXJhbXM6OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKCkge30KKyAKKy1TdGVuY2ls
QmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMoY29uc3QgRGVw
dGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjSW4pCisrU3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXM6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMg
JnNyY1BhcmFtcykKKyB7CistICAgIGRzdFRleHR1cmVTaXplID0gc3JjSW4uZHN0VGV4dHVyZVNp
emU7CistICAgIGRzdFJlY3QgICAgICAgID0gc3JjSW4uZHN0UmVjdDsKKy0gICAgZHN0U2Npc3Nv
clJlY3QgPSBzcmNJbi5kc3RTY2lzc29yUmVjdDsKKy0gICAgZHN0RmxpcFkgICAgICAgPSBzcmNJ
bi5kc3RGbGlwWTsKKy0gICAgZHN0RmxpcFggICAgICAgPSBzcmNJbi5kc3RGbGlwWDsKKy0gICAg
c3JjUmVjdCAgICAgICAgPSBzcmNJbi5zcmNSZWN0OworLSAgICBzcmNZRmxpcHBlZCAgICA9IHNy
Y0luLnNyY1lGbGlwcGVkOworLSAgICB1bnBhY2tGbGlwWCAgICA9IHNyY0luLnVucGFja0ZsaXBY
OworLSAgICB1bnBhY2tGbGlwWSAgICA9IHNyY0luLnVucGFja0ZsaXBZOworKyAgICBkc3RUZXh0
dXJlU2l6ZSA9IHNyY1BhcmFtcy5kc3RUZXh0dXJlU2l6ZTsKKysgICAgZHN0UmVjdCAgICAgICAg
PSBzcmNQYXJhbXMuZHN0UmVjdDsKKysgICAgZHN0U2Npc3NvclJlY3QgPSBzcmNQYXJhbXMuZHN0
U2Npc3NvclJlY3Q7CisrICAgIGRzdEZsaXBZICAgICAgID0gc3JjUGFyYW1zLmRzdEZsaXBZOwor
KyAgICBkc3RGbGlwWCAgICAgICA9IHNyY1BhcmFtcy5kc3RGbGlwWDsKKysgICAgc3JjUmVjdCAg
ICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsKKysgICAgc3JjWUZsaXBwZWQgICAgPSBzcmNQYXJh
bXMuc3JjWUZsaXBwZWQ7CisrICAgIHVucGFja0ZsaXBYICAgID0gc3JjUGFyYW1zLnVucGFja0Zs
aXBYOworKyAgICB1bnBhY2tGbGlwWSAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWTsKKyAKKy0g
ICAgc3JjU3RlbmNpbCA9IHNyY0luLnNyY1N0ZW5jaWw7CisrICAgIHNyY1N0ZW5jaWwgICAgICA9
IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworKyAgICBzcmNTdGVuY2lsTGV2ZWwgPSBzcmNQYXJhbXMu
c3JjU3RlbmNpbExldmVsOworKyAgICBzcmNTdGVuY2lsTGF5ZXIgPSBzcmNQYXJhbXMuc3JjU3Rl
bmNpbExheWVyOworIH0KKyAKKyAvLyBSZW5kZXJVdGlscyBpbXBsZW1lbnRhdGlvbgorQEAgLTkw
Myw2ICs5NzMsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorIH0KKyAKKysKKyAvLyBvdmVycmlkZSBF
cnJvckhhbmRsZXIKKyB2b2lkIFJlbmRlclV0aWxzOjpoYW5kbGVFcnJvcihHTGVudW0gZ2xFcnJv
ckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwK
K0BAIC0xMDE2LDkgKzEwODcsMTAgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0
ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgfQorIGFuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCisgICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAm
cGFyYW1zKQorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
dWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCisgeworLSAgICByZXR1cm4gbUluZGV4VXRpbHMu
Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMp
OworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVu
dHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworIH0KKyAKKyBh
bmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5
cygKK0BAIC0xMDUwLDYgKzExMjIsMjYgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVT
dGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgeworICAgICByZXR1cm4gbUlu
ZGV4VXRpbHMuZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoY29u
dGV4dE10bCwgcGFyYW1zKTsKKyB9CisrYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNl
c0dlbmVyYXRlZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRl
ZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCkKKyt7CisrICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlj
ZXNHZW5lcmF0ZWQpOworK30KKyAKKyB2b2lkIFJlbmRlclV0aWxzOjpjb21iaW5lVmlzaWJpbGl0
eVJlc3VsdCgKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0xMTIxLDYgKzEyMTMs
MjEgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNPKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
ID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBQ
U08KKysgICAgYXV0byBwc28gPSBtVHJhbnNmb3JtRmVlZGJhY2tVdGlscy5nZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lKGNvbnRleHRNdGwsIHJlbmRlckVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwaXBlbGluZURlc2MpOworKyAgICBpZiAocHNvKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisrfQorKworIC8vIENsZWFyVXRpbHMgaW1wbGVtZW50YXRpb24K
KyBDbGVhclV0aWxzOjpDbGVhclV0aWxzKGNvbnN0IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRl
ck5hbWUpCisgICAgIDogbUZyYWdtZW50U2hhZGVyTmFtZShmcmFnbWVudFNoYWRlck5hbWUpCitA
QCAtMTI4NywxMSArMTM5NCwxMSBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRl
KENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgeworICAgICAgICAgb3ZlcnJp
ZGVkUGFyYW1zLmNsZWFyQ29sb3IucmVzZXQoKTsKKyAgICAgfQorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIG92ZXJyaWRlZFBh
cmFtcy5jbGVhckRlcHRoLnJlc2V0KCk7CisgICAgIH0KKy0gICAgaWYgKCFyZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0
ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKSkKKyAgICAgeworICAgICAgICAgb3ZlcnJpZGVkUGFy
YW1zLmNsZWFyU3RlbmNpbC5yZXNldCgpOworICAgICB9CitAQCAtMTMwNyw3ICsxNDE0LDcgQEAg
QU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAgICAv
LyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgY2xlYXJpbmcgd2ls
bCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJsZU9j
Y2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0KTsK
KysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVl
cnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3IHRo
ZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhNVExQ
cmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTQ4MSw3ICsxNTg4LDcg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAg
ICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRpbmcg
d2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJs
ZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0
KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9u
UXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3
IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhN
VExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTcwMyw3ICsxODEw
LDcgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAg
ICAgICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRp
bmcgd2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlz
YWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVz
dWx0KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVz
aW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBE
cmF3IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJh
dyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMjAwMiw3ICsy
MTA5LDggQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFu
ZEVuY29kZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxz
OjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAorICAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykK
KysgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90
ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgY29uc3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0
ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJyYXkoKTsKKyAgICAg
Y29uc3QgZ2w6OkJ1ZmZlciAqZWxlbWVudEJ1ZmZlciAgICA9IHZlcnRleEFycmF5LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKK0BAIC0yMDEzLDEzICsyMTIxLDE0IEBAIEFOR0xFX0lOTElORSB2
b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAg
ICAgICAgQU5HTEVfQ0hFQ0soY29udGV4dE10bCwgc3JjT2Zmc2V0IDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICJJbmRleCBvZmZz
ZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICBpZiAocGFyYW1z
LnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkIHx8CistICAgICAgICAgICAgKCFjb250ZXh0TXRsLT5n
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYK
KysgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5i
cmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKKyAgICAgICAgICAgICAgY29udGV4dE10
bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkpCisgICAgICAgICB7CisgICAgICAgICAgICAg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAg
ICAgY3B1UGF0aFBhcmFtcy5pbmRpY2VzID0KKyAgICAgICAgICAgICAgICAgZWxlbWVudEJ1ZmZl
ck10bC0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBzcmNPZmZzZXQ7Cist
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlD
UFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisrICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBh
cmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UK
KyAgICAgICAgIHsKK0BAIC0yMDMwLDcgKzIxMzksNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQ
aXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorICAg
ICBlbHNlCisgICAgIHsKKy0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisrICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBwYXJhbXMs
IGluZGljZXNHZW5lcmF0ZWQpOworICAgICB9CisgfQorIAorQEAgLTIwNzQsMjIgKzIxODMsMjMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5l
cmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAorICAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykKKysg
ICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90ICpn
ZW5JbmRpY2VzKQorIHsKKyAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKKyAgICAgeworICAg
ICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRCeXRlOgorICAgICAgICAg
ICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCisgICAgICAgICAgICAgICAg
IGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQsCistICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ocGFy
YW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRTaG9ydDoKKyAgICAgICAgICAg
ICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKAorICAgICAgICAgICAgICAgICBj
b250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFi
bGVkLAorLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJh
bXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQpOworKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICAg
cmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygKKyAgICAgICAgICAgICAgICAgY29u
dGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxl
ZCwKKy0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1z
LmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBw
YXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKKyAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgfQorQEAgLTIzMDEs
NiArMjQxMSw1NiBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgcmV0dXJuIGdlbmVyYXRlTGluZUxvb3BMYXN0
U2VnbWVudChjb250ZXh0TXRsLCBmaXJzdCwgbGFzdCwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1z
LmRzdE9mZnNldCk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6
Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLAorKyAgICB1bnNpZ25lZCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKKyt7CisrICAgIHN3aXRjaCAocGFyYW1zLnNyY1R5cGUpCisrICAgIHsKKysgICAgICAg
IGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKKysgICAgICAgICAgICBy
ZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhD
b3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMu
aW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7Cisr
ICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgorKyAgICAg
ICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFt
cy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAq
PihwYXJhbXMuaW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVy
YXRlZCk7CisrICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZEludDoK
KysgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRs
LCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGluZGlj
ZXNHZW5lcmF0ZWQpOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworKyAgICB9Cisr
fQorKworK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRp
dmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
KyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICpp
bmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dEJ1ZmZlcihjb250ZXh0TXRsLCAzLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysK
KythbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydExpbmVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25z
dCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICppbmRpY2VzR2Vu
ZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihj
b250ZXh0TXRsLCAyLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysKKythbmdsZTo6
UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50
c0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkK
Kyt7CisrICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10
bCwgMSwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKKyt9CisrCisgLy8gVmlzaWJpbGl0eVJl
c3VsdFV0aWxzIGltcGxlbWVudGF0aW9uCisgdm9pZCBWaXNpYmlsaXR5UmVzdWx0VXRpbHM6Om9u
RGVzdHJveSgpCisgeworQEAgLTIzNzYsNiArMjUzNiw5IEBAIEFOR0xFX0lOTElORSB2b2lkIFNl
dFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIHZvaWQgTWlw
bWFwVXRpbHM6Om9uRGVzdHJveSgpCisgeworICAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAg
ICAgID0gbmlsOworKyAgICBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOworKyAg
ICBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lID0gbmlsOworKyAgICBtQ3ViZU1pcEdlbmVy
YXRvclBpcGVsaW5lICAgID0gbmlsOworIH0KKyAKKyB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUz
RE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K0BAIC0yMzg0LDY2ICsyNTQ3LDc4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3Rh
dGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworIH0KKyAKKyt2b2lk
IE1pcG1hcFV0aWxzOjplbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZTJETWlwbWFwcyIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBl
bGluZSk7CisrfQorKworK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0
b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCisreworKyAgICBF
bnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCks
IEAiZ2VuZXJhdGUyREFycmF5TWlwbWFwcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyt9CisrCisrdm9pZCBN
aXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZUN1YmVNaXBtYXBzIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdWJlTWlwR2VuZXJhdG9y
UGlwZWxpbmUpOworK30KKysKKyBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1p
cG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZzcmNUZXh0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzUkdCTWlwbWFwLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVGV4TGV2
ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYXRpdmVUZXhMZXZlbEFycmF5ICogbWlwbWFwT3V0cHV0Vmlld3Mp
CisgeworLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93LgorLSAgICBBU1NF
UlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSA9PSBNVExUZXh0dXJlVHlwZTNEKTsKKysgICAg
Q29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0Q29tcHV0
ZUNvbW1hbmRFbmNvZGVyKCk7CisrICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKKyAKKyAgICAgTVRM
U2l6ZSB0aHJlYWRHcm91cFNpemU7CisgICAgIHVpbnQzMl90IHNsaWNlcyA9IDE7CistICAgIGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7CistCisrICAg
IHN3aXRjaCAoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBNVExUZXh0dXJlVHlwZTJEOgorKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlw
ZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5z
ZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgdGhyZWFkR3JvdXBTaXplID0gTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlMkRBcnJheToKKysgICAgICAgICAgICBl
bnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsK
KysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRBcnJh
eU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKysgICAgICAgICAgICBzbGljZXMgICAgICAgICAgPSBz
cmNUZXh0dXJlLT5hcnJheUxlbmd0aCgpOworKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9
IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91
cFNpemVQZXJEaW0sIDEpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBNVExU
ZXh0dXJlVHlwZUN1YmU6CisrICAgICAgICAgICAgZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CisrICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0
Q29tcHV0ZVBpcGVsaW5lU3RhdGUobUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgc2xpY2VzICAgICAgICAgID0gNjsKKysgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUg
PSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLCAxKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgTVRM
VGV4dHVyZVR5cGUzRDoKKyAgICAgICAgICAgICBlbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CistICAgIGNvbXB1dGVQaXBlbGluZSA9IG0zRE1pcEdl
bmVyYXRvclBpcGVsaW5lOworKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBl
bGluZVN0YXRlKG0zRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgICB0aHJlYWRH
cm91cFNpemUgPQorICAgICAgICAgICAgICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVy
RGltKTsKKy0KKy0gICAgLy8gVGhlIGNvbXB1dGUgc2hhZGVyIHN1cHBvcnRzIHVwIHRvIDQgbWlw
bWFwcyBnZW5lcmF0ZWQgcGVyIHBhc3MuCistICAgIC8vIFNlZSBzaGFkZXJzL2dlbl9taXBtYXAu
bWV0YWwKKy0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKKy0KKy0gICAgaWYgKHRo
cmVhZEdyb3VwU2l6ZS53aWR0aCAqIHRocmVhZEdyb3VwU2l6ZS5oZWlnaHQgKiB0aHJlYWRHcm91
cFNpemUuZGVwdGggPgorLSAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVh
ZHNQZXJUaHJlYWRncm91cCB8fAorLSAgICAgICAgQU5HTEVfVU5MSUtFTFkoCistICAgICAgICAg
ICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0dlbk11bHRp
cGxlTWlwc1BlclBhc3MuZW5hYmxlZCkpCistICAgIHsKKy0gICAgICAgIC8vIE11bHRpcGxlIG1p
cG1hcHMgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBoYXJkd2FyZSdzIHRocmVh
ZCBncm91cCBzaXplIGxpbWl0cy4KKy0gICAgICAgIC8vIEZhbGxiYWNrIHRvIGdlbmVyYXRlIG9u
ZSBtaXAgcGVyIHBhc3MgYW5kIHJlZHVjZSB0aHJlYWQgZ3JvdXAgc2l6ZS4KKy0gICAgICAgIGlm
IChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUu
aGVpZ2h0ID4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlUGlwZWxpbmUubWF4
VG90YWxUaHJlYWRzUGVyVGhyZWFkZ3JvdXApKQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8v
IEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3ZSBjYW5ub3QgcHJvY2VlZC4K
Ky0gICAgICAgICAgICAvLyBIQUNLOiB1c2UgYmxpdCBjb21tYW5kIGVuY29kZXIgdG8gZ2VuZXJh
dGUgbWlwbWFwcyBpZiBpdCBpcyBub3QgcG9zc2libGUKKy0gICAgICAgICAgICAvLyB0byB1c2Ug
Y29tcHV0ZSBzaGFkZXIgZHVlIHRvIGhhcmR3YXJlIGxpbWl0cy4KKy0gICAgICAgICAgICBCbGl0
Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRF
bmNvZGVyKCk7CistICAgICAgICAgICAgYmxpdEVuY29kZXItPmdlbmVyYXRlTWlwbWFwc0ZvclRl
eHR1cmUoc3JjVGV4dHVyZSk7CistICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworLSAgICAgICAgfQorLQorLSAgICAgICAgdGhyZWFkR3JvdXBTaXplLmRlcHRoID0g
MTsKKy0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
IH0KKyAKKy0gICAgQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10
bC0+Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCk7CistICAgIEFTU0VSVChjbWRFbmNvZGVyKTsK
Ky0gICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUoY29tcHV0ZVBpcGVsaW5l
KTsKKy0KKy0gICAgR2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIEdlbmVyYXRl
M0RNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIHVpbnQzMl90IG1heE1pcHNQZXJCYXRjaCA9
IDQ7CisgCisgICAgIHVpbnQzMl90IHJlbWFpbk1pcHMgPSBzcmNUZXh0dXJlLT5taXBtYXBMZXZl
bHMoKSAtIDE7CistICAgIE1pcG1hcE5hdGl2ZUxldmVsIGJhdGNoU3JjTGV2ZWwgPSBrWmVyb05h
dGl2ZU1pcExldmVsOworLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAgID0gYmF0
Y2hTcmNMZXZlbC5nZXQoKTsKKy0gICAgb3B0aW9ucy5zUkdCICAgICAgICAgICAgICAgICAgICA9
IHNSR0JNaXBtYXA7CisrICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOworIAorICAgICBjbWRF
bmNvZGVyLT5zZXRUZXh0dXJlKHNyY1RleHR1cmUsIDApOworICAgICBjbWRFbmNvZGVyLT5tYXJr
UmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKKyAgICAgd2hpbGUgKHJlbWFp
bk1pcHMpCisgICAgIHsKKy0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9
IG1pcG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisrICAgICAgICBjb25z
dCBUZXh0dXJlUmVmICZmaXJzdE1pcFZpZXcgPSBtaXBtYXBPdXRwdXRWaWV3cy0+YXQobXRsOjpN
aXBtYXBOYXRpdmVMZXZlbChvcHRpb25zLnNyY0xldmVsICsgMSkpOworICAgICAgICAgZ2w6OkV4
dGVudHMgc2l6ZSAgICAgICAgICAgICAgID0gZmlyc3RNaXBWaWV3LT5zaXplQXQwKCk7CisgICAg
ICAgICBib29sIGlzUG93MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93Mihz
aXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKKyAKK0BAIC0yNDYxLDIwICsy
NjM2LDE4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIAorICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8
PSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOyArK2kpCisgICAgICAgICB7CistICAgICAg
ICAgICAgY21kRW5jb2Rlci0+c2V0VGV4dHVyZShtaXBtYXBPdXRwdXRWaWV3cy0+YXQoYmF0Y2hT
cmNMZXZlbCArIGkpLCBpKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1p
cG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2
ZWwgKyBpKSksIGkpOworICAgICAgICAgfQorIAorICAgICAgICAgdWludDMyX3QgdGhyZWFkc1Bl
clogPSBzdGQ6Om1heChzbGljZXMsIGZpcnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CisgCistICAg
ICAgICBEaXNwYXRjaENvbXB1dGUoCistICAgICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2Rl
ciwKKysgICAgICAgIERpc3BhdGNoQ29tcHV0ZShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qKiBhbGxvd05vblVuaWZvcm0gKi8gZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2UoZmlyc3RNaXBWaWV3LT53aWR0aEF0MCgp
LCBmaXJzdE1pcFZpZXctPmhlaWdodEF0MCgpLCB0aHJlYWRzUGVyWiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplKTsKKyAKKyAgICAgICAgIHJlbWFpbk1pcHMgLT0g
b3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAgIGJhdGNoU3JjTGV2ZWwgICAg
PSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAg
IG9wdGlvbnMuc3JjTGV2ZWwgPSBiYXRjaFNyY0xldmVsLmdldCgpOworKyAgICAgICAgb3B0aW9u
cy5zcmNMZXZlbCArPSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOworICAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK0BAIC0yNTA0LDggKzI2NzcsNyBA
QCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2Rl
ciAqZW5jb2RlciwKKyAgICAgaW50IHNoYWRlclRleHR1cmVUeXBlID0gR2V0U2hhZGVyVGV4dHVy
ZVR5cGUodGV4dHVyZSk7CisgICAgIGludCBpbmRleDIgPSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5
cGVDb3VudCAqIChidWZmZXJXcml0ZSA/IDEgOiAwKSArIHNoYWRlclRleHR1cmVUeXBlOworIAor
LSAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+ICZjYWNoZSA9Cist
ICAgICAgICBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07
CisrICAgIGF1dG8gJmNhY2hlID0gbVBpeGVsc0NvcHlQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZh
bHVlXVtpbmRleDJdOworIAorICAgICBpZiAoIWNhY2hlKQorICAgICB7CitAQCAtMjc4Myw3ICsy
OTU1LDEwIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29t
cG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIpCisgeworKyAgICBEaXNwbGF5TXRs
ICpkaXNwbGF5ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICBhdXRvIHNoYWRlckxp
YiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0TXRsLCBAImV4cGFu
ZFZlcnRleEZvcm1hdENvbXBvbmVudHNWUyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTGliLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBp
cGVsaW5lQ2FjaGUpOworIAorICAgICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0g
R2V0Q29tcHV0aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVy
KTsKK0BAIC0yNzk3LDggKzI5NzIsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0
YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyB7CisgICAgIGludCBmb3JtYXRJ
RFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihzcmNBbmdsZUZvcm1hdC5pZCk7CisgCistICAgIEF1
dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KKy0gICAgICAg
IG1Db252ZXJ0VG9GbG9hdENvbXBQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKKysgICAg
YXV0byAmY2FjaGUgPSBtQ29udmVydFRvRmxvYXRDb21wUGlwZWxpbmVDYWNoZXNbZm9ybWF0SURW
YWx1ZV07CisgCisgICAgIGlmICghY2FjaGUpCisgICAgIHsKK0BAIC0yODQ5LDUgKzMwMjMsNTMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIHJldHVybiBjYWNoZS5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNv
bnRleHRNdGwsIHBpcGVsaW5lRGVzYyk7CisgfQorIAorK0F1dG9PYmpDUHRyPGlkPE1UTExpYnJh
cnk+PiBUcmFuc2Zvcm1GZWVkYmFja1V0aWxzOjpjcmVhdGVNc2xYZmJMaWJyYXJ5KAorKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRl
ZE1zbCkKKyt7CisrICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgIHsKKysgICAgICAgIERp
c3BsYXlNdGwgKmRpc3BsYXkgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICAg
ICAgaWQ8TVRMRGV2aWNlPiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwor
KworKyAgICAgICAgLy8gQ29udmVydCB0byBhY3R1YWwgYmluYXJ5IHNoYWRlcgorKyAgICAgICAg
bXRsOjpBdXRvT2JqQ1B0cjxOU0Vycm9yICo+IGVyciA9IG5pbDsKKysgICAgICAgIG10bDo6QXV0
b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG10bFNoYWRlckxpYiA9CisrICAgICAgICAgICAgbXRs
OjpDcmVhdGVTaGFkZXJMaWJyYXJ5KG10bERldmljZSwgdHJhbnNsYXRlZE1zbCwgJmVycik7Cisr
ICAgICAgICBpZiAoZXJyICYmICFtdGxTaGFkZXJMaWIpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgTlNMb2coQCIlQCIsIGVyci5nZXQoKSk7CisrICAgICAgICAgICAgYXNzZXJ0KDApOworKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIG10bFNoYWRlckxpYjsKKysgICAgfQorK30KKysKKytB
dXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tV
dGlsczo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSgKKysgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCwKKysgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisr
ICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBjb25z
dCBQcm9ncmFtTXRsICpwcm9ncmFtTXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHRNdGwtPmdldFN0
YXRlKCkuZ2V0UHJvZ3JhbSgpKTsKKysgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmY2FjaGUgICA9
ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworKworKyAgICBpZiAo
IWNhY2hlLmdldFZlcnRleFNoYWRlcigpKQorKyAgICB7CisrICAgICAgICAvLyBQaXBlbGluZSBj
YWNoZSBub3QgaW50aWFsaXplZCwgZG8gaXQgbm93OgorKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIHNoYWRlckxpYiA9IGNyZWF0ZU1z
bFhmYkxpYnJhcnkoY29udGV4dE10bCwgcHJvZ3JhbU10bC0+Z2V0WGZiTXNsU291cmNlKCkpOwor
KyAgICAgICAgICAgIC8vIE5vbiBzcGVjaWFsaXplZCBjb25zdGFudHMgcHJvdmlkZWQsIHVzZSBk
ZWZhdWx0IGNyZWF0aW9uIGZ1bmN0aW9uLgorKyAgICAgICAgICAgIEVuc3VyZVZlcnRleFNoYWRl
ck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgU0hBREVSX0VOVFJZX05B
TUUsIHNoYWRlckxpYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjYWNoZSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAg
UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9CisrICAgICAgICBHZXRUcmFuc2Zv
cm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpOwor
KworKyAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0TXRsLCB4
ZmJQaXBlbGluZURlc2MpOworK30KKysKKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgK
K2luZGV4IGYyMjA2NTAuLjJlMzMzNGQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3Jlc291cmNlcy5oCitAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBSZXNvdXJjZSA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3Qg
eyByZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KKyAgICAgdm9pZCByZXNl
dENQVVJlYWRNZW1OZWVkU3luYygpIHsgbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmMgPSBm
YWxzZTsgfQorIAorLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVy
TXRsIHRvIGtub3cgd2hldGhlciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQorICAg
ICBib29sIGlzQ1BVUmVhZE1lbURpcnR5KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlUmVmLT5jcHVS
ZWFkTWVtRGlydHk7IH0KKyAgICAgdm9pZCByZXNldENQVVJlYWRNZW1EaXJ0eSgpIHsgbVVzYWdl
UmVmLT5jcHVSZWFkTWVtRGlydHkgPSBmYWxzZTsgfQorIAorQEAgLTgxLDcgKzgwLDcgQEAgY2xh
c3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgIHVpbnQ2NF90IGNtZEJ1
ZmZlclF1ZXVlU2VyaWFsID0gMDsKKyAKKyAgICAgICAgIC8vIFRoaXMgZmxhZyBtZWFucyB0aGUg
cmVzb3VyY2Ugd2FzIGlzc3VlZCB0byBiZSBtb2RpZmllZCBieSBHUFUsIGlmIENQVSB3YW50cyB0
byByZWFkCistICAgICAgICAvLyBpdHMgY29udGVudCwgZXhwbGljaXQgc3luY2hyb25pemF0aW9u
IGNhbGwgbXVzdCBiZSBpbnZva2VkLgorKyAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0
IHN5bmNob3JuaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KKyAgICAgICAgIGJvb2wgY3B1
UmVhZE1lbU5lZWRTeW5jID0gZmFsc2U7CisgCisgICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNl
ZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNo
YWRvdyBjb3B5CitAQCAtMTEwLDYgKzEwOSwxMyBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVi
bGljIFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIC8vIE9uIG1hY09TLCBtZW1vcnkgd2ls
bCBzdGlsbCBiZSBhbGxvY2F0ZWQgZm9yIHRoaXMgdGV4dHVyZS4KKysgICAgc3RhdGljIGFuZ2xl
OjpSZXN1bHQgTWFrZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9y
bWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAg
IHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0
ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBzaXplLAorQEAgLTE0NywxMCArMTUzLDIxIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBw
dWJsaWMgUmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKyAKKysgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQg
TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdp
ZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworKworICAgICBzdGF0aWMg
VGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7Cisg
CisgICAgIC8vIEFsbG93IENQVSB0byByZWFkICYgd3JpdGUgZGF0YSBkaXJlY3RseSB0byB0aGlz
IHRleHR1cmU/CisgICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7CisrICAgIC8vIEFs
bG93IHNoYWRlcnMgdG8gcmVhZC9zYW1wbGUgdGhpcyB0ZXh0dXJlPworKyAgICAvLyBUZXh0dXJl
IGNyZWF0ZWQgd2l0aCByZW5kZXJUYXJnZXRPbmx5IGZsYWcgd29uJ3QgYmUgcmVhZGFibGUKKysg
ICAgYm9vbCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CisgCisgICAgIGJvb2wgc3VwcG9ydEZv
cm1hdFZpZXcoKSBjb25zdDsKKyAKK0BAIC0yMTgsMTYgKzIzNSwyOSBAQCBjbGFzcyBUZXh0dXJl
IGZpbmFsIDogcHVibGljIFJlc291cmNlLAorICAgICBNVExDb2xvcldyaXRlTWFzayBnZXRDb2xv
cldyaXRhYmxlTWFzaygpIGNvbnN0IHsgcmV0dXJuICptQ29sb3JXcml0YWJsZU1hc2s7IH0KKyAg
ICAgdm9pZCBzZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICpt
Q29sb3JXcml0YWJsZU1hc2sgPSBtYXNrOyB9CisgCistICAgIC8vIEdldCBsaW5lYXIgY29sb3Ig
c3BhY2Ugdmlldy4gT25seSB1c2FibGUgZm9yIHNSR0IgdGV4dHVyZXMuCistICAgIFRleHR1cmVS
ZWYgZ2V0TGluZWFyQ29sb3JWaWV3KCk7CisrICAgIC8vIEdldCByZWFkaW5nIGNvcHkuIFVzZWQg
Zm9yIHJlYWRpbmcgbm9uLXJlYWRhYmxlIHRleHR1cmUgb3IgcmVhZGluZyBzdGVuY2lsIHZhbHVl
IGZyb20KKysgICAgLy8gcGFja2VkIGRlcHRoICYgc3RlbmNpbCB0ZXh0dXJlLgorKyAgICAvLyBO
T1RFOiB0aGlzIG9ubHkgY29waWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisr
ICAgIC8vIFRoZSB0ZXhlbHMgd2lsbCBiZSBjb3BpZWQgdG8gcmVnaW9uKDAsIDAsIDAsIGFyZWFU
b0NvcHkuc2l6ZSkgb2YgdGhlIHJldHVybmVkIHRleHR1cmUuCisrICAgIC8vIFRoZSByZXR1cm5l
ZCBwb2ludGVyIHdpbGwgYmUgcmV0YWluZWQgYnkgdGhlIG9yaWdpbmFsIHRleHR1cmUgb2JqZWN0
LgorKyAgICAvLyBDYWxsaW5nIGdldFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZp
b3VzbHkgcmV0dXJuZWQgdGV4dHVyZS4KKysgICAgVGV4dHVyZVJlZiBnZXRSZWFkYWJsZUNvcHko
Q29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzbGljZVRvQ29weSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KTsKKysKKysgICAgdm9p
ZCByZWxlYXNlUmVhZGFibGVDb3B5KCk7CisgCisgICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKKyAg
ICAgVGV4dHVyZVJlZiBnZXRTdGVuY2lsVmlldygpOworKyAgICAvL0dldCBsaW5lYXIgY29sb3IK
KysgICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZpZXcoKTsKKyAKKyAgICAgLy8gQ2hhbmdl
IHRoZSB3cmFwcGVkIG1ldGFsIG9iamVjdC4gU3BlY2lhbCBjYXNlIGZvciBzd2FwY2hhaW4gaW1h
Z2UKKyAgICAgdm9pZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAKKy0gICAg
Ly8gc3luYyBjb250ZW50IGJldHdlZW4gQ1BVIGFuZCBHUFUKKysgICAgLy8gRXhwbGljaXRseSBz
eW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQorICAgICB2b2lkIHN5bmNDb250ZW50KENv
bnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVyKTsKKyAK
KyAgIHByaXZhdGU6CitAQCAtMjQxLDEyICsyNzEsNDEgQEAgY2xhc3MgVGV4dHVyZSBmaW5hbCA6
IHB1YmxpYyBSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1h
a2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZW1vcnlMZXNzLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwor
KworKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4
dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAgIFRleHR1cmUoaWQ8
TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAgICAgVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAg
ICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKysgICAgVGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
KyAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisrICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJn
ZXRPbmx5LAorKyAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorKyAgICAgICAgICAg
IGJvb2wgbWVtb3J5TGVzcyk7CisrCisrICAgIFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KysgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAgICAgICBJ
T1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorKyAgICAgICAgICAgIE5TVUludGVnZXIgcGxhbmUsCisr
ICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5KTsKKyAKKyAgICAgLy8gQ3JlYXRlIGEg
dGV4dHVyZSB2aWV3CisgICAgIFRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9y
bWF0IGZvcm1hdCk7CitAQCAtMjY0LDkgKzMyMywxNCBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDog
cHVibGljIFJlc291cmNlLAorICAgICBUZXh0dXJlUmVmIG1MaW5lYXJDb2xvclZpZXc7CisgCisg
ICAgIFRleHR1cmVSZWYgbVN0ZW5jaWxWaWV3OworKyAgICAvL1JlYWRhYmxlIGNvcHkgb2YgdGV4
dHVyZQorKyAgICBUZXh0dXJlUmVmIG1SZWFkQ29weTsKKysKKyB9OworIAorLWNsYXNzIEJ1ZmZl
ciBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVm
ZmVyPj4KKytjbGFzcyBCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVmZmVyPj4sCisrICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8QnVmZmVy
PgorIHsKKyAgIHB1YmxpYzoKKyAgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZUJ1ZmZlcihD
b250ZXh0TXRsICpjb250ZXh0LAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVzb3VyY2VzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMubW0KK2luZGV4IDliZWU0NzUuLmQwNDc1YWUgMTAwNjQ0CistLS0gYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMubW0KK0BAIC0zNCwyMCArMzQsMjIgQEAgaW5s
aW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXplLCBjb25zdCBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCkKKyAvLyBBc3luY2hyb25vdXNseSBzeW5jaHJvbml6ZSB0aGUg
Y29udGVudCBvZiBhIHJlc291cmNlIGJldHdlZW4gR1BVIG1lbW9yeSBhbmQgaXRzIENQVSBjYWNo
ZS4KKyAvLyBOT1RFOiBUaGlzIG9wZXJhdGlvbiBkb2Vzbid0IGZpbmlzaCBpbW1lZGlhdGVseSB1
cG9uIGZ1bmN0aW9uJ3MgcmV0dXJuLgorIHRlbXBsYXRlIDxjbGFzcyBUPgorLXZvaWQgSW52b2tl
Q1BVTWVtU3luYyhDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAq
YmxpdEVuY29kZXIsIFQgKnJlc291cmNlKQorK3ZvaWQgU3luY0NvbnRlbnQoQ29udGV4dE10bCAq
Y29udGV4dCwKKysgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0
RW5jb2RlciwKKysgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxUPiAmcmVz
b3VyY2UpCisgeworICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
ICAgICBpZiAoYmxpdEVuY29kZXIpCisgICAgIHsKKyAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5j
aHJvbml6ZVJlc291cmNlKHJlc291cmNlKTsKKysKKyAgICAgICAgIHJlc291cmNlLT5yZXNldENQ
VVJlYWRNZW1OZWVkU3luYygpOworICAgICB9CisgI2VuZGlmCisgfQorLS8vIEVuc3VyZSB0aGF0
IGEgcmVzb3VyY2UncyBDUFUgY2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZp
bmlzaGVzIGl0cyBtb2RpZmljYXRpb25zIG9uCistLy8gdGhlIHJlc291cmNlLgorKworIHRlbXBs
YXRlIDxjbGFzcyBUPgorLXZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwg
KmNvbnRleHQsIFQgKnJlc291cmNlKQorK3ZvaWQgRW5zdXJlQ29udGVudFN5bmNlZChDb250ZXh0
TXRsICpjb250ZXh0LCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8VD4gJnJlc291cmNlKQorIHsKKyAj
aWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgLy8gTWFrZSBz
dXJlIEdQVSAmIENQVSBjb250ZW50cyBhcmUgc3luY2hyb25pemVkLgorQEAgLTU2LDcgKzU4LDcg
QEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAq
cmVzb3VyY2UpCisgICAgIGlmIChyZXNvdXJjZS0+Z2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3Rv
cmFnZU1vZGVNYW5hZ2VkICYmIHJlc291cmNlLT5pc0NQVVJlYWRNZW1OZWVkU3luYygpKQorICAg
ICB7CisgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250
ZXh0LT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKy0gICAgICAgIEludm9rZUNQVU1lbVN5bmMo
Y29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsKKysgICAgICAgIFN5bmNDb250ZW50KGNv
bnRleHQsIGJsaXRFbmNvZGVyLCByZXNvdXJjZSk7CisgICAgIH0KKyAjZW5kaWYKKyB9CitAQCAt
MTIyLDYgKzEyNCwyNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUK
KyB9CisgCisrLyoqIHN0YXRpYyAqLworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZU1lbW9y
eUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorKyAg
ICB7CisrICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYyA9CisrICAgICAgICAgICAg
W01UTFRleHR1cmVEZXNjcmlwdG9yIHRleHR1cmUyRERlc2NyaXB0b3JXaXRoUGl4ZWxGb3JtYXQ6
Zm9ybWF0Lm1ldGFsRm9ybWF0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWln
aHQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1pcG1hcHBlZDpOT107CisrCisrICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29u
dGV4dCwgZm9ybWF0LCBkZXNjLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgcmVmT3V0KTsKKysgICAg
fSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyt9CisgLyoqIHN0YXRpYyAqLworIGFuZ2xlOjpS
ZXN1bHQgVGV4dHVyZTo6TWFrZUN1YmVUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQs
CitAQCAtMjIzLDYgKzI0MywyMyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250
ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9y
bWF0VmlldywgcmVmT3V0KTsKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyB9Cisr
YW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB3aWR0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwbGFuZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKKyt7Cisr
ICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0gW1tNVExUZXh0dXJlRGVzY3JpcHRvciBu
ZXddIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisrICAgIGRlc2MudGV4dHVyZVR5cGUgICAgICAg
ICAgID0gTVRMVGV4dHVyZVR5cGUyRDsKKysgICAgZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAg
PSBmb3JtYXQubWV0YWxGb3JtYXQ7CisrICAgIGRlc2Mud2lkdGggICAgICAgICAgICAgICAgID0g
d2lkdGg7CisrICAgIGRlc2MuaGVpZ2h0ICAgICAgICAgICAgICAgID0gaGVpZ2h0OworKyAgICBk
ZXNjLm1pcG1hcExldmVsQ291bnQgICAgICA9IDE7CisrICAgIGRlc2Muc2FtcGxlQ291bnQgICAg
ICAgICAgID0gMTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIGZvcm1hdCwgZGVz
YywgcmVmLCBwbGFuZSwgTk8sIHJlZk91dCk7CisrfQorIAorIC8qKiBzdGF0aWMgKi8KKyBhbmds
ZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCitAQCAt
MjMzLDcgKzI3MCw0MiBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorIHsKKy0gICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZp
ZXcpKTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIG10bEZvcm1hdCwgZGVzYywg
bWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgIHJlZk91dCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICByZWZP
dXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9u
bHksIGFsbG93Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworKworKyAgICBpZiAoIXJlZk91dCB8
fCAhcmVmT3V0LT5nZXQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRl
eHQsIGZhbHNlLCBHTF9PVVRfT0ZfTUVNT1JZKTsKKysgICAgfQorKyAgICBpZiAoIW10bEZvcm1h
dC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkpCisrICAgIHsKKysgICAgICAgIHJlZk91dC0+Z2V0
KCktPnNldENvbG9yV3JpdGFibGVNYXNrKEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9y
bWF0KSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
K30KKysKKythbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1
cmVEZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU9TdXJmYWNlUmVmIHN1cmZhY2VSZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorK3sKKysgICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBzdXJmYWNlUmVmLCBzbGljZSwgcmVuZGVyVGFyZ2V0T25seSkp
OworIAorICAgICBpZiAoISgqcmVmT3V0KSB8fCAhKCpyZWZPdXQpLT5nZXQoKSkKKyAgICAgewor
QEAgLTI2NCw2ICszMzYsMTUgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4
dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCBt
aXBzLAorICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcpCisrICAgIDogVGV4dHVyZShjb250ZXh0LCBk
ZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIGZhbHNlKQorK3t9
CisrCisrVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICB1aW50
MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAg
ICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAgICAgICAgICBi
b29sIG1lbW9yeUxlc3MpCisgICAgIDogbUNvbG9yV3JpdGFibGVNYXNrKHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMQ29sb3JXcml0ZU1hc2s+KE1UTENvbG9yV3JpdGVNYXNrQWxsKSkKKyB7CisgICAgIEFO
R0xFX01UTF9PQkpDX1NDT1BFCitAQCAtMjgzLDcgKzM2NCwxNSBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAg
ICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRhcmdldDsKKyAgICAgICAg
IH0KKyAKKy0gICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLmRlcHRoUmVuZGVyYWJsZSB8fAorKyAgICAgICAgaWYgKG1lbW9yeUxlc3MpCisr
ICAgICAgICB7CisrI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVikgJiYgIVRBUkdF
VF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRM
UmVzb3VyY2VTdG9yYWdlTW9kZU1lbW9yeWxlc3M7CisrI2Vsc2UKKysgICAgICAgICAgICBkZXNj
LnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOworKyNlbmRp
ZgorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0
Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKKyAgICAgICAgICAgICAg
ICAgIGRlc2MudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAg
ICAgICAgeworICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2Vz
cyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCitAQCAtMzEwLDYgKzM5OSw0NiBAQCB2
b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNv
dXJjZSkKKyAgICAgfQorIH0KKyAKKytUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRl
eHQsCisrICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAg
ICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2UsCisrICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIHBsYW5lLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5
KQorKyAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1UTENvbG9yV3Jp
dGVNYXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19T
Q09QRQorKyAgICB7CisrICAgICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKTsKKysKKysgICAgICAgIC8vIEV2ZXJ5IHRleHR1cmUgd2lsbCBz
dXBwb3J0IGJlaW5nIHJlbmRlcmVkIGZvciBub3cKKysgICAgICAgIGRlc2MudXNhZ2UgPSBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICBpZiAoY29udGV4dC0+Z2V0
TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5pc1JlbmRlcmFibGUoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRh
cmdldDsKKysgICAgICAgIH0KKysKKysjaWYgKFRBUkdFVF9PU19JT1MgfHwgVEFSR0VUX09TX1RW
KSAmJiAhVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9u
cyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVTaGFyZWQ7CisrI2Vsc2UKKysgICAgICAgIGRlc2Mu
cmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZU1hbmFnZWQ7CisrI2VuZGlm
CisrCisrICAgICAgICBpZiAoIXJlbmRlclRhcmdldE9ubHkpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFk
OworKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLndyaXRhYmxlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZGVz
Yy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZUZXh0
dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvc3VyZmFjZTppb3N1cmZhY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOnBsYW5lXTsKKysg
ICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKysgICAg
fQorK30KKysKKyBUZXh0dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBNVExQaXhlbEZv
cm1hdCBmb3JtYXQpCisgICAgIDogUmVzb3VyY2Uob3JpZ2luYWwpLAorICAgICAgIG1Db2xvcldy
aXRhYmxlTWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Ig
d3JpdGUgbWFzayBwcm9wZXJ0eQorQEAgLTM0MSw3ICs0NzAsNyBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgOiBS
ZXNvdXJjZShvcmlnaW5hbCksCisgICAgICAgbUNvbG9yV3JpdGFibGVNYXNrKG9yaWdpbmFsLT5t
Q29sb3JXcml0YWJsZU1hc2spICAvLyBTaGFyZSBjb2xvciB3cml0ZSBtYXNrIHByb3BlcnR5Cisg
eworLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKysjaWYgZGVmaW5lZChfX0lQSE9O
RV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorICAgICBBTkdMRV9NVExfT0JKQ19TQ09Q
RQorICAgICB7CisgICAgICAgICBhdXRvIHZpZXcgPSBbb3JpZ2luYWwtPmdldCgpCitAQCAtMzYw
LDEyICs0ODksMTIgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAq
Y29udGV4dCwgVCAqcmVzb3VyY2UpCisgCisgdm9pZCBUZXh0dXJlOjpzeW5jQ29udGVudChDb250
ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCisg
eworLSAgICBJbnZva2VDUFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKysg
ICAgU3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZChDb250ZXh0TXRsICpj
b250ZXh0KQorIHsKKy0gICAgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQsIHRoaXMp
OworKyAgICBFbnN1cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKK0BAIC0zNzks
NiArNTA4LDExIEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNv
bnRleHQsIFQgKnJlc291cmNlKQorICAgICByZXR1cm4gZ2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRM
U3RvcmFnZU1vZGVTaGFyZWQ7CisgfQorIAorK2Jvb2wgVGV4dHVyZTo6aXNTaGFkZXJSZWFkYWJs
ZSgpIGNvbnN0CisreworKyAgICByZXR1cm4gZ2V0KCkudXNhZ2UgJiBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJSZWFkOworK30KKysKKyBib29sIFRleHR1cmU6OnN1cHBvcnRGb3JtYXRWaWV3KCkgY29u
c3QKKyB7CisgICAgIHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2FnZVBpeGVsRm9y
bWF0VmlldzsKK0BAIC01MTQsMTIgKzY0OCwxNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5
bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgQVNTRVJUKHN1cHBv
cnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVyZSh0aGlz
LCBmb3JtYXQpKTsKKyB9CisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aENv
bXBhdGlibGVGb3JtYXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQorIHsKKy0gICAgLy8gTm8gbmVl
ZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJl
ZihuZXcgVGV4dHVyZSh0aGlzLCBmb3JtYXQpKTsKKyB9CisgCisrCisrCisgVGV4dHVyZVJlZiBU
ZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICZz
d2l6emxlKQorIHsKKyAjaWYgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFCitAQCAtNjUyLDYg
Kzc4OCw0OCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250
ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CisgfQorIAor
K1RleHR1cmVSZWYgVGV4dHVyZTo6Z2V0UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDMyX3QgbGV2ZWxUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDMyX3Qgc2xpY2VUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KQorK3sKKysgICAgZ2w6
OkV4dGVudHMgZmlyc3RMZXZlbFNpemUgPSBzaXplKGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworKyAg
ICBpZiAoIW1SZWFkQ29weSB8fCBtUmVhZENvcHktPmdldCgpLndpZHRoIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihmaXJzdExldmVsU2l6ZS53aWR0aCkgfHwKKysgICAgICAgIG1SZWFkQ29weS0+Z2V0
KCkuaGVpZ2h0IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdExldmVsU2l6ZS5oZWlnaHQpKQor
KyAgICB7CisrICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRoYXQgYmlnIGVub3VnaCB0byBz
dG9yZSB0aGUgZmlyc3QgbGV2ZWwgZGF0YSBhbmQgYW55IHNtYWxsZXIgbGV2ZWwKKysgICAgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byBkZXNj
ICAgICAgICAgICAgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9S
RUxFQVNFXTsKKysgICAgICAgICAgICBkZXNjLnRleHR1cmVUeXBlICAgICA9IGdldCgpLnRleHR1
cmVUeXBlOworKyAgICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQgICAgID0gZ2V0KCkucGl4ZWxG
b3JtYXQ7CisrICAgICAgICAgICAgZGVzYy53aWR0aCAgICAgICAgICAgPSBmaXJzdExldmVsU2l6
ZS53aWR0aDsKKysgICAgICAgICAgICBkZXNjLmhlaWdodCAgICAgICAgICA9IGZpcnN0TGV2ZWxT
aXplLmhlaWdodDsKKysgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAgICAgICA9IDE7CisrICAg
ICAgICAgICAgZGVzYy5hcnJheUxlbmd0aCAgICAgPSAxOworKyAgICAgICAgICAgIGRlc2MucmVz
b3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVByaXZhdGU7CisrICAgICAgICAg
ICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsKKysgICAgICAgICAg
ICBkZXNjLnVzYWdlICAgICAgICAgICA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICAgICAgaWQ8TVRMVGV4dHVy
ZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1RleHR1cmVXaXRo
RGVzY3JpcHRvcjpkZXNjXTsKKysgICAgICAgICAgICBtUmVhZENvcHkucmVzZXQobmV3IFRleHR1
cmUobXRsVGV4dHVyZSkpOworKyAgICAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKysg
ICAgfQorKworKyAgICBBU1NFUlQoZW5jb2Rlcik7CisrCisrICAgIGVuY29kZXItPmNvcHlUZXh0
dXJlKHNoYXJlZF9mcm9tX3RoaXMoKSwgc2xpY2VUb0NvcHksIGxldmVsVG9Db3B5LCBtUmVhZENv
cHksIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDEpOworKworKyAgICByZXR1
cm4gbVJlYWRDb3B5OworK30KKysKKyt2b2lkIFRleHR1cmU6OnJlbGVhc2VSZWFkYWJsZUNvcHko
KQorK3sKKysgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKKyt9CisrCisgVGV4dHVyZVJlZiBUZXh0
dXJlOjpnZXRTdGVuY2lsVmlldygpCisgeworICAgICBpZiAobVN0ZW5jaWxWaWV3KQorQEAgLTc5
OSw3ICs5NzcsNyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpj
b250ZXh0LCBUICpyZXNvdXJjZSkKKyAKKyB2b2lkIEJ1ZmZlcjo6c3luY0NvbnRlbnQoQ29udGV4
dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyKQorIHsK
Ky0gICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisrICAg
IFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkpOwor
IH0KKyAKKyBjb25zdCB1aW50OF90ICpCdWZmZXI6Om1hcFJlYWRPbmx5KENvbnRleHRNdGwgKmNv
bnRleHQpCitAQCAtODIwLDcgKzk5OCw3IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2Vk
KENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB7CisgICAgICAgICBDb21t
YW5kUXVldWUgJmNtZFF1ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKKyAKKy0gICAgICAgIEVu
c3VyZUNQVU1lbVdpbGxCZVN5bmNlZChjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIEVuc3VyZUNv
bnRlbnRTeW5jZWQoY29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAKKyAgICAgICAgIGlm
ICh0aGlzLT5pc0JlaW5nVXNlZEJ5R1BVKGNvbnRleHQpKQorICAgICAgICAgeworZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAoraW5kZXggNzY4YzM2OS4u
ZTZiZjcxZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3Rh
dGVfY2FjaGUuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9j
YWNoZS5oCitAQCAtMjIsNiArMjIsMTEgQEAKKyAKKyBzdGF0aWMgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBNVExDbGVhckNvbG9yICZsaHMsIGNvbnN0IE1UTENsZWFyQ29sb3IgJnJocyk7
CisgCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0cnVjdCBGZWF0dXJlc010bDsKKyt9CisrCisg
bmFtZXNwYWNlIHJ4CisgeworIGNsYXNzIENvbnRleHRNdGw7CitAQCAtMjIzLDcgKzIyOCw4IEBA
IHN0cnVjdCBSZW5kZXJQaXBlbGluZU91dHB1dERlc2MKKyB9OworIAorIC8vIFNvbWUgU0RLIGxl
dmVscyBkb24ndCBkZWNsYXJlIE1UTFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MuIE5lZWRzIHRvIGRv
IGNvbXBpbGUgdGltZSBjaGVjayBoZXJlOgorLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBIT05FXzEy
XzAKKysjaWYgIShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkgJiYgXAor
KyAgICAoIWRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgQU5HTEVfSU9TX0RFUExPWV9UQVJHRVQg
PCBfX0lQSE9ORV8xMl8wKQorICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9QT0xP
R1lfQ0xBU1NfQVZBSUxBQkxFIDAKKyB1c2luZyBQcmltaXRpdmVUb3BvbG9neUNsYXNzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdWludDMyX3Q7CisgY29uc3RleHByIFBy
aW1pdGl2ZVRvcG9sb2d5Q2xhc3Mga1ByaW1pdGl2ZVRvcG9sb2d5Q2xhc3NUcmlhbmdsZSA9IDA7
CitAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVz
YworICAgICBSZW5kZXJQaXBlbGluZURlc2MgJm9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnNyYyk7CisgCisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnJocykgY29uc3Q7CistCisgICAgIHNpemVfdCBoYXNoKCkgY29uc3Q7CistCisgICAg
IGJvb2wgcmFzdGVyaXphdGlvbkVuYWJsZWQoKSBjb25zdDsKKyAKKyAgICAgVmVydGV4RGVzYyB2
ZXJ0ZXhEZXNjcmlwdG9yOworQEAgLTI4OCw2ICsyOTIsMjcgQEAgc3RydWN0IGFsaWduYXMoNCkg
UmVuZGVyUGlwZWxpbmVEZXNjCisgICAgIGJvb2wgZW11bGF0ZUNvdmVyYWdlTWFzayA6IDE7Cisg
fTsKKyAKKytzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYworK3sK
KysgICAgVGV4dHVyZVJlZiBnZXRUZXh0dXJlUmVmKCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZS5s
b2NrKCk7IH0KKysgICAgVGV4dHVyZVJlZiBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpIGNvbnN0
IHsgcmV0dXJuIGltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorKyAgICBib29sIGhhc0ltcGxp
Y2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQo
KTsgfQorKyAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKKysgICAgeworKyAg
ICAgICAgVGV4dHVyZVJlZiB0ZXggICA9IGdldFRleHR1cmVSZWYoKTsKKysgICAgICAgIFRleHR1
cmVSZWYgbXNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOworKyAgICAgICAgcmV0dXJu
IG1zVGV4ID8gbXNUZXgtPnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOwor
KyAgICB9CisrCisrICAgIFRleHR1cmVXZWFrUmVmIHRleHR1cmU7CisrICAgIC8vIEltcGxpY2l0
IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2Nh
cmRlZCBhdCB0aGUgZW5kIG9mCisrICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQgd2ls
bCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorKyAgICBUZXh0dXJlV2Vh
a1JlZiBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBr
WmVyb05hdGl2ZU1pcExldmVsOworKyAgICB1aW50MzJfdCBzbGljZU9yRGVwdGggICA9IDA7Cisr
ICAgIGJvb2wgYmxlbmRhYmxlICAgICAgICAgID0gdHJ1ZTsKKyt9OworKworIHN0cnVjdCBSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2MKKyB7CisgICAgIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYygp
OworQEAgLTI5NywxOCArMzIyLDM0IEBAIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MK
KyAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMoY29uc3QgUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7CisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKKyAKKy0gICAgQU5HTEVfSU5M
SU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBpbXBsaWNpdE1T
VGV4dHVyZS5nZXQoKTsgfQorLQorLSAgICBUZXh0dXJlUmVmIHRleHR1cmU7CistICAgIC8vIElt
cGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5k
IGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCistICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1
bHQgd2lsbCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorLSAgICBUZXh0
dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlOworLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbDsK
Ky0gICAgdWludDMyX3Qgc2xpY2VPckRlcHRoOworLQorLSAgICAvLyBUaGlzIGF0dGFjaG1lbnQg
aXMgYmxlbmRhYmxlIG9yIG5vdC4KKy0gICAgYm9vbCBibGVuZGFibGU7CisrICAgIEFOR0xFX0lO
TElORSBUZXh0dXJlUmVmIHRleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0dXJlUmVmKCkgOiBudWxscHRyOwor
KyAgICB9CisrICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdl
dC0+Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSA6IG51bGxwdHI7CisrICAgIH0KKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAg
ICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4
dHVyZSgpIDogZmFsc2U7CisrICAgIH0KKysgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHJlbmRl
clNhbXBsZXMoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8g
cmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkgOiAxOworKyAgICB9CisrICAgIEFOR0xF
X0lOTElORSBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisrICAgIHsKKysgICAgICAg
IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmxldmVsIDoga1plcm9OYXRpdmVN
aXBMZXZlbDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgdWludDMyX3Qgc2xpY2VPckRlcHRo
KCkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRh
cmdldC0+c2xpY2VPckRlcHRoIDogMDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBi
bGVuZGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmJs
ZW5kYWJsZSA6IGZhbHNlOyB9CisgCisrICAgIC8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8g
YXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFt
ZSBidWZmZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1
cmVUYXJnZXREZXNjPiByZW5kZXJUYXJnZXQ7CisgICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlv
bjsKKyAgICAgTVRMU3RvcmVBY3Rpb24gc3RvcmVBY3Rpb247CisgICAgIE1UTFN0b3JlQWN0aW9u
T3B0aW9ucyBzdG9yZUFjdGlvbk9wdGlvbnM7CitAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3Qg
UmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MKKyAgICAgdWludDMyX3QgY2xlYXJTdGVuY2lsID0gMDsKKyB9OworIAorKy8vCisr
Ly8gVGhpcyBpcyBDKysgZXF1aXZhbGVudCBvZiBPYmplY3RpdmUtQyBNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvci4KKysvLyBXZSBjb3VsZCB1c2UgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0
bHksIGhvd2V2ZXIsIHVzaW5nIEMrKyBzdHJ1Y3QgaGFzIGJlbmVmaXRzIG9mIGZhc3QKKysvLyBj
b3B5LCBzdGFjayBhbGxvY2F0aW9uLCBpbmxpbmVkIGNvbXBhcmluZyBmdW5jdGlvbiwgZXRjLgor
Ky8vCisgc3RydWN0IFJlbmRlclBhc3NEZXNjCisgeworICAgICBSZW5kZXJQYXNzQ29sb3JBdHRh
Y2htZW50RGVzYyBjb2xvckF0dGFjaG1lbnRzW2tNYXhSZW5kZXJUYXJnZXRzXTsKK0BAIC00MTcs
NyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0
b3J5CisgeworICAgcHVibGljOgorICAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUNhY2hlU3Bl
Y2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7CistCisgICAgIC8vIEdldCBzcGVjaWFs
aXplZCBzaGFkZXIgZm9yIHRoZSByZW5kZXIgcGlwZWxpbmUgY2FjaGUuCisgICAgIHZpcnR1YWwg
YW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSwKK0BAIC00MjksNyArNDc0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVD
YWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykg
PSAwOworIH07CisgCistLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBzaGFkZXIg
cHJvZ3JhbS4KKysvLyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2FjaGUgcGVyIHNoYWRlciBwcm9n
cmFtCisgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQorIHsKKyAgIHB1YmxpYzoKK0BAIC00NTksNiArNTA0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxp
bmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CisgICAgIC8vIE5vbi1zcGVjaWFsaXplZCBmcmFn
bWVudCBzaGFkZXIKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBtRnJhZ21lbnRT
aGFkZXI7CisrICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlz
Y2FyZCwgb25lIHdpdGhvdXQKKyAKKyAgIHByaXZhdGU6CisgICAgIHZvaWQgY2xlYXJQaXBlbGlu
ZVN0YXRlcygpOworQEAgLTQ3NywxNCArNTIzLDEzIEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2Fj
aGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgLy8gT25lIHRhYmxlIHdpdGggZGVm
YXVsdCBhdHRyaWIgYW5kIG9uZSB0YWJsZSB3aXRob3V0LgorICAgICBzdGQ6OnVub3JkZXJlZF9t
YXA8UmVuZGVyUGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPj4+CisgICAgICAgICBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbMl07CistCisgICAgIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVy
RmFjdG9yeTsKKyB9OworIAorIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyB7CisgICBwdWJsaWM6CistICAgIFN0YXRlQ2FjaGUoKTsKKysgICAgU3RhdGVDYWNo
ZShjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzKTsKKyAgICAgflN0YXRlQ2FjaGUo
KTsKKyAKKyAgICAgLy8gTnVsbCBkZXB0aCBzdGVuY2lsIHN0YXRlIGhhcyBkZXB0aC9zdGVjaWwg
cmVhZCAmIHdyaXRlIGRpc2FibGVkLgorQEAgLTUwMiw2ICs1NDcsOCBAQCBjbGFzcyBTdGF0ZUNh
Y2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHZvaWQgY2xlYXIoKTsKKyAKKyAg
IHByaXZhdGU6CisrICAgIGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworKwor
ICAgICBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+IG1OdWxsRGVwdGhTdGVu
Y2lsU3RhdGUgPSBuaWw7CisgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNj
LCBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3Rh
dGVzOworICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8U2FtcGxlckRlc2MsIEF1dG9PYmpDUHRyPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+PiBtU2FtcGxlclN0YXRlczsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQoraW5kZXggMWNmMjM3YS4uNDVjNzE5ZCAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUu
bW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0K
K0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Nv
bnRleHRNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291
cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIK
KysjaW5jbHVkZSAicGxhdGZvcm0vRmVhdHVyZXNNdGwuaCIKKyAKKyAjZGVmaW5lIEFOR0xFX09C
SkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCisgICAgIChEU1QpLlBST1BFUlRZ
ID0gc3RhdGljX2Nhc3Q8X190eXBlb2ZfXygoRFNUKS5QUk9QRVJUWSk+KFRvT2JqQygoU1JDKS5Q
Uk9QRVJUWSkpCitAQCAtMTgyLDEwICsxODMsMTAgQEAgaW5saW5lIFQgVG9PYmpDKGNvbnN0IFQg
cCkKKyAgICAgcmV0dXJuIHRleHR1cmVSZWYgPyB0ZXh0dXJlUmVmLT5nZXQoKSA6IG5pbDsKKyB9
CisgCistdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRl
clBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCkKKyt2b2lk
IEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoTVRMUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjcmlwdG9yICpkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjKQorIHsKKy0gICAgY29uc3Qg
VGV4dHVyZVJlZiAmaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmU7Cisr
ICAgIGF1dG8gaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmUoKTsKKyAK
KyAgICAgaWYgKGltcGxpY2l0TXNUZXh0dXJlKQorICAgICB7CitAQCAtMTkzLDMxICsxOTQsMzEg
QEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBh
c3NBdHRhY2htZW50RGVzYyAmc3JjLAorICAgICAgICAgZHN0LmxldmVsICAgICAgICAgID0gMDsK
KyAgICAgICAgIGRzdC5zbGljZSAgICAgICAgICA9IDA7CisgICAgICAgICBkc3QuZGVwdGhQbGFu
ZSAgICAgPSAwOworLSAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0
dXJlKTsKKy0gICAgICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbC5nZXQoKTsKKysg
ICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsKKysgICAg
ICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOworICAgICAgICAgaWYg
KGRzdC5yZXNvbHZlVGV4dHVyZS50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTNEKQorICAg
ICAgICAgeworLSAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9y
RGVwdGg7CisrICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JE
ZXB0aCgpOworICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CisgICAgICAg
ICB9CisgICAgICAgICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LnJlc29sdmVT
bGljZSAgICAgID0gc3JjLnNsaWNlT3JEZXB0aDsKKysgICAgICAgICAgICBkc3QucmVzb2x2ZVNs
aWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CisgICAgICAgICAgICAgZHN0LnJlc29sdmVE
ZXB0aFBsYW5lID0gMDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0g
ICAgICAgIGRzdC50ZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKKy0gICAgICAgIGRzdC5s
ZXZlbCAgID0gc3JjLmxldmVsLmdldCgpOworKyAgICAgICAgZHN0LnRleHR1cmUgPSBUb09iakMo
c3JjLnRleHR1cmUoKSk7CisrICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgp
OworICAgICAgICAgaWYgKGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBl
M0QpCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VP
ckRlcHRoOworKyAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgp
OworICAgICAgICAgICAgIGRzdC5zbGljZSAgICAgID0gMDsKKyAgICAgICAgIH0KKyAgICAgICAg
IGVsc2UKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGlj
ZU9yRGVwdGg7CisrICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRo
KCk7CisgICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSAwOworICAgICAgICAgfQorICAgICAg
ICAgZHN0LnJlc29sdmVUZXh0dXJlICAgID0gbmlsOworQEAgLTIzMSwyNiArMjMyLDI2IEBAIHZv
aWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0
YWNobWVudERlc2MgJnNyYywKKyAgICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShkc3QsIHNyYywg
c3RvcmVBY3Rpb25PcHRpb25zKTsKKyB9CisgCistdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmRlc2MsCistICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0Nv
bG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpDKE1UTFJlbmRl
clBhc3NDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKysgICAgICAgICAgICBj
b25zdCBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmZGVzYykKKyB7CistICAgIEJhc2VS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworKyAgICBCYXNl
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKKyAKKyAgICAg
QU5HTEVfT0JKQ19DUF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJDb2xvcik7CisgfQor
IAorLXZvaWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNj
LAorLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjcmlwdG9yICpv
YmpDRGVzYykKKyt2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50RGVzY3Jp
cHRvciAqb2JqQ0Rlc2MsCisrICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNo
bWVudERlc2MgJmRlc2MpCisgeworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9P
YmpDKGRlc2MsIG9iakNEZXNjKTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1Rv
T2JqQyhvYmpDRGVzYywgZGVzYyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2Jq
Q0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOworIH0KKyAKKy12b2lkIFRvT2JqQyhjb25zdCBSZW5k
ZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorLSAgICAgICAgICAgIE1UTFJlbmRl
clBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpD
KE1UTFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjLAorKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCisg
eworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNj
KTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVz
Yyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFy
U3RlbmNpbCk7CisgfQorQEAgLTY5NiwxMSArNjk3LDcgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAKKyB2b2lkIFJlbmRlclBhc3NB
dHRhY2htZW50RGVzYzo6cmVzZXQoKQorIHsKKy0gICAgdGV4dHVyZS5yZXNldCgpOworLSAgICBp
bXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOworLSAgICBsZXZlbCAgICAgICAgICAgICAgPSBtdGw6
OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7CistICAg
IGJsZW5kYWJsZSAgICAgICAgICA9IGZhbHNlOworKyAgICByZW5kZXJUYXJnZXQgICAgICAgPSBu
dWxscHRyOworICAgICBsb2FkQWN0aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKKyAg
ICAgc3RvcmVBY3Rpb24gICAgICAgID0gTVRMU3RvcmVBY3Rpb25TdG9yZTsKKyAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID0gTVRMU3RvcmVBY3Rpb25PcHRpb25Ob25lOworQEAgLTcwOSw4ICs3MDYs
OSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjplcXVhbElnbm9yZUxvYWRTdG9y
ZU9wdGlvbnMoCisgICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNv
bnN0CisgeworLSAgICByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlICYmIGltcGxpY2l0
TVNUZXh0dXJlID09IG90aGVyLmltcGxpY2l0TVNUZXh0dXJlICYmCistICAgICAgICAgICBsZXZl
bCA9PSBvdGhlci5sZXZlbCAmJiBzbGljZU9yRGVwdGggPT0gb3RoZXIuc2xpY2VPckRlcHRoOwor
KyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8fAorKyAgICAg
ICAgICAgKHRleHR1cmUoKSA9PSBvdGhlci50ZXh0dXJlKCkgJiYgbGV2ZWwoKSA9PSBvdGhlci5s
ZXZlbCgpICYmCisrICAgICAgICAgICAgc2xpY2VPckRlcHRoKCkgPT0gb3RoZXIuc2xpY2VPckRl
cHRoKCkpOworIH0KKyAKKyBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6b3BlcmF0b3I9
PShjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdAorQEAgLTcyMyw2
ICs3MjEsMzAgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50
RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGxvYWRBY3Rpb24gPT0gb3RoZXIubG9hZEFjdGlvbiAm
JiBzdG9yZUFjdGlvbiA9PSBvdGhlci5zdG9yZUFjdGlvbiAmJgorICAgICAgICAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID09IG90aGVyLnN0b3JlQWN0aW9uT3B0aW9uczsKKyB9CisrLy8gQ29udmVy
dCB0byBNZXRhbCBvYmplY3QKKyt2b2lkIFJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKm9iakNEZXNjKSBjb25zdAorK3sKKysgICAgQU5H
TEVfTVRMX09CSkNfU0NPUEUKKysgICAgeworKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
b09iakMob2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSwgY29sb3JBdHRhY2htZW50c1tpXSk7
CisrICAgICAgICB9CisrICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1l
bnRzOyBpIDwga01heFJlbmRlclRhcmdldHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisrICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS50ZXh0dXJlICAgICA9IG5pbDsKKysgICAgICAgICAgICBvYmpDRGVzYy5j
b2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVz
Yy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmRlcHRoUGxhbmUgID0gMDsKKysgICAgICAgICAgICBv
YmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0gTVRMTG9hZEFjdGlvbkRv
bnRDYXJlOworKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc3RvcmVB
Y3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKysgICAg
ICAgIFRvT2JqQyhvYmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCwgc3RlbmNpbEF0dGFjaG1lbnQp
OworKyAgICB9CisrfQorIAorIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjKFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykgY29uc3QK
KyB7CitAQCAtNzQyLDE5ICs3NjQsMTkgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0
ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAorIHsKKy0gICAgUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjICZvdXRwdXREZXNjcmlwdG9yID0gKm91dERlc2M7CisrICAgIGF1dG8g
Jm91dHB1dERlc2NyaXB0b3IgICAgICAgICAgICAgICA9ICpvdXREZXNjOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLm51bUNvbG9yQXR0YWNobWVudHMgPSB0aGlzLT5udW1Db2xvckF0dGFjaG1lbnRz
OworICAgICBvdXRwdXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1w
bGVDb3VudDsKKyAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPm51bUNvbG9yQXR0
YWNobWVudHM7ICsraSkKKyAgICAgeworICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0
YWNobWVudCA9IHRoaXMtPmNvbG9yQXR0YWNobWVudHNbaV07CistICAgICAgICBhdXRvIHRleHR1
cmUgICAgICAgICAgICAgICAgICAgID0gcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJl
OworKyAgICAgICAgYXV0byB0ZXh0dXJlICAgICAgICAgICAgICAgICAgICA9IHJlbmRlclBhc3ND
b2xvckF0dGFjaG1lbnQudGV4dHVyZSgpOworIAorICAgICAgICAgaWYgKHRleHR1cmUpCisgICAg
ICAgICB7CisgICAgICAgICAgICAgLy8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUK
KyAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udXBkYXRl
KGJsZW5kU3RhdGUpOworLSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVu
dC5ibGVuZGFibGUpCisrICAgICAgICAgICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50
LmJsZW5kYWJsZSgpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJs
ZSBibGVuZGluZyBpZiB0aGUgYXR0YWNobWVudCdzIHJlbmRlciB0YXJnZXQgZG9lc24ndCBzdXBw
b3J0IGJsZW5kaW5nLgorICAgICAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0
YWNobWVudHNbaV0uYmxlbmRpbmdFbmFibGVkID0gZmFsc2U7CitAQCAtNzgxLDExICs4MDMsMTEg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5yZXNldCgp
OworICAgICB9CisgCistICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmU7CisrICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUoKTsKKyAgICAgb3V0cHV0RGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhl
bEZvcm1hdCA9CisgICAgICAgICBkZXB0aFRleHR1cmUgPyBkZXB0aFRleHR1cmUtPnBpeGVsRm9y
bWF0KCkgOiBNVExQaXhlbEZvcm1hdEludmFsaWQ7CisgCistICAgIGF1dG8gc3RlbmNpbFRleHR1
cmUgPSB0aGlzLT5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlOworKyAgICBhdXRvIHN0ZW5jaWxU
ZXh0dXJlID0gdGhpcy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQorICAgICAgICAgc3RlbmNp
bFRleHR1cmUgPyBzdGVuY2lsVGV4dHVyZS0+cGl4ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0
SW52YWxpZDsKKyB9CitAQCAtODMxLDQyICs4NTMsMjEgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGRlcHRoQXR0
YWNobWVudCA9PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0g
b3RoZXIuc3RlbmNpbEF0dGFjaG1lbnQ7CisgfQorIAorLS8vIENvbnZlcnQgdG8gTWV0YWwgb2Jq
ZWN0Cistdm9pZCBSZW5kZXJQYXNzRGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBh
c3NEZXNjcmlwdG9yICpvYmpDRGVzYykgY29uc3QKKy17CistICAgIEFOR0xFX01UTF9PQkpDX1ND
T1BFCistICAgIHsKKy0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Db2xvckF0
dGFjaG1lbnRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgVG9PYmpDKGNvbG9yQXR0
YWNobWVudHNbaV0sIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworLSAgICAgICAgfQor
LSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhS
ZW5kZXJUYXJnZXRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gSW5hY3RpdmUg
cmVuZGVyIHRhcmdldAorLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0u
dGV4dHVyZSAgICAgPSBuaWw7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXS5sZXZlbCAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zbGljZSAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRh
Y2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRBY3Rpb25Eb250Q2FyZTsKKy0gICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0gTVRMU3Rv
cmVBY3Rpb25Eb250Q2FyZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIFRvT2JqQyhkZXB0aEF0
dGFjaG1lbnQsIG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCk7CistICAgICAgICBUb09iakMoc3Rl
bmNpbEF0dGFjaG1lbnQsIG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKy0gICAgfQorLX0K
Ky0KKyAvLyBSZW5kZXJQaXBlbGluZUNhY2hlIGltcGxlbWVudGF0aW9uCistUmVuZGVyUGlwZWxp
bmVDYWNoZTo6UmVuZGVyUGlwZWxpbmVDYWNoZSgpIDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxs
cHRyKSB7fQorK1JlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJl
bmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikgeworK30KKyAKKyBSZW5kZXJQaXBlbGluZUNhY2hl
OjpSZW5kZXJQaXBlbGluZUNhY2hlKAorICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZVNoYWRlckZhY3RvcnkgKnNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKyAgICAgOiBtU3BlY2lh
bGl6ZWRTaGFkZXJGYWN0b3J5KHNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKy17fQorK3sKKysK
Kyt9CisgCisgUmVuZGVyUGlwZWxpbmVDYWNoZTo6flJlbmRlclBpcGVsaW5lQ2FjaGUoKSB7fQor
IAorLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNv
bnRleHQsIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisrdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hl
OjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorIHsKKyAgICAg
bVZlcnRleFNoYWRlci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsKKyAKK0BAIC04NzksNyArODgwLDgg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgcmVjcmVhdGVQaXBlbGluZVN0YXRlcyhjb250ZXh0KTsKKyB9CisgCistdm9pZCBS
ZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBp
ZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorK3ZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJh
Z21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisgeworICAgICBtRnJh
Z21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CisgCitAQCAtOTI5LDEwICs5MzEsNiBA
QCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNj
LAorIHsKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IG5ld1N0
YXRlID0KKyAgICAgICAgIGNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgZGVzYywg
aW5zZXJ0RGVmYXVsdEF0dHJpYkxheW91dCk7CistICAgIGlmICghbmV3U3RhdGUpCistICAgIHsK
Ky0gICAgICAgIHJldHVybiBuaWw7CistICAgIH0KKyAKKyAgICAgaW50IHRhYmxlSWR4ID0gaW5z
ZXJ0RGVmYXVsdEF0dHJpYkxheW91dCA/IDEgOiAwOworICAgICBhdXRvIHJlICAgICAgPSBtUmVu
ZGVyUGlwZWxpbmVTdGF0ZXNbdGFibGVJZHhdLmluc2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBu
ZXdTdGF0ZSkpOworQEAgLTk0NCw2ICs5NDIsNyBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQ
YXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICByZXR1cm4gcmUuZmlyc3QtPnNl
Y29uZDsKKyB9CisgCisrCisgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+
IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCisgICAgIENv
bnRleHQgKmNvbnRleHQsCisgICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmb3JpZ2luYWxE
ZXNjLAorQEAgLTk1OSw3ICs5NTgsNiBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3Rl
bmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAgICAgIGRlc2MuZW11bGF0ZUNvdmVy
YWdlTWFzayAgICA9IGZhbHNlOworICAgICAgICAgICAgIGRlc2MuYWxwaGFUb0NvdmVyYWdlRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICAgfQorLQorICAgICAgICAgLy8gQ2hvb3NlIHNoYWRlciB2
YXJpYW50CisgICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKKyAgICAg
ICAgIGlkPE1UTEZ1bmN0aW9uPiBmcmFnU2hhZGVyID0gbmlsOworQEAgLTEwMDQsNyArMTAwMiwy
NSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIAorICAgICAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjOgorICAgICAg
ICAgQXV0b09iakNPYmo8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBvYmpDRGVzYyA9IFRv
T2JqQyh2ZXJ0U2hhZGVyLCBmcmFnU2hhZGVyLCBkZXNjKTsKKy0KKysgICAgICAgIC8vIFZhbGlk
YXRlIFJlbmRlciBQaXBlbGluZSBTdGF0ZToKKysgICAgICAgIGlmIChEZXZpY2VIYXNNYXhpbXVt
UmVuZGVyVGFyZ2V0U2l6ZShtZXRhbERldmljZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNVSW50ZWdlciBtYXhTaXplID0gR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0
ZXMobWV0YWxEZXZpY2UpOworKyAgICAgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6
ZSA9CisrICAgICAgICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERldmljZSk7CisrICAgICAg
ICAgICAgaWYgKHJlbmRlclRhcmdldFNpemUgPiBtYXhTaXplKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKysgICAgICAgICAgICAgICAg
ICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVGhpcyBzZXQgb2YgcmVuZGVyIHRhcmdl
dHMgcmVxdWlyZXMgJWx1IGJ5dGVzIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBkZXZpY2Ugc3VwcG9ydHMg
JWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKysgICAgICAgICAgICAgICAgTlNFcnJv
ciAqZXJyID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiTVRMVmFsaWRhdGlvbkVycm9yIgor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6
LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJ
bmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisrICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmhhbmRsZUVycm9yKGVyciwgX19GSUxFX18sIEFOR0xFX0ZVTkNU
SU9OLCBfX0xJTkVfXyk7CisrICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorICAgICAgICAgLy8gU3BlY2lhbCBhdHRyaWJ1dGUgc2xvdCBmb3Ig
ZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0
KQorICAgICAgICAgeworQEAgLTEwMzIsNiArMTA0OCw3IEBAIHZvaWQgVG9PYmpDKGNvbnN0IFJl
bmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MsCisgICAgIH0KKyB9CisgCisrCisg
dm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpyZWNyZWF0ZVBpcGVsaW5lU3RhdGVzKENvbnRleHQg
KmNvbnRleHQpCisgeworICAgICBmb3IgKGludCBoYXNEZWZhdWx0QXR0cmliID0gMDsgaGFzRGVm
YXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCitAQCAtMTA2Miw3ICsxMDc5LDcg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyB9CisgCisgLy8gU3RhdGVDYWNoZSBpbXBsZW1lbnRhdGlvbgorLVN0YXRlQ2FjaGU6OlN0
YXRlQ2FjaGUoKSB7fQorK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3QgYW5nbGU6OkZlYXR1
cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CisgCisgU3RhdGVDYWNo
ZTo6flN0YXRlQ2FjaGUoKSB7fQorIAorQEAgLTExMTMsNiArMTEzMCwxMSBAQCB2b2lkIFRvT2Jq
Qyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAg
aWYgKGl0ZSA9PSBtU2FtcGxlclN0YXRlcy5lbmQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAg
ICBBdXRvT2JqQ09iajxNVExTYW1wbGVyRGVzY3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakMoZGVz
Yyk7CisrICAgICAgICAgICAgaWYgKCFtRmVhdHVyZXMuYWxsb3dSdW50aW1lU2FtcGxlckNvbXBh
cmVNb2RlLmVuYWJsZWQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBSdW50
aW1lIHNhbXBsZXIgY29tcGFyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5l
dmVyLgorKyAgICAgICAgICAgICAgICBvYmpDRGVzYy5nZXQoKS5jb21wYXJlRnVuY3Rpb24gPSBN
VExDb21wYXJlRnVuY3Rpb25OZXZlcjsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgQXV0
b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4gbmV3U3RhdGUgPQorICAgICAgICAgICAgICAg
ICBbW21ldGFsRGV2aWNlIG5ld1NhbXBsZXJTdGF0ZVdpdGhEZXNjcmlwdG9yOm9iakNEZXNjXSBB
TkdMRV9NVExfQVVUT1JFTEVBU0VdOworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
dXRpbHMuaAoraW5kZXggYTg0YWM3My4uODA1NzI5ZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oCitAQCAtMTM1LDE1ICsxMzUsMzAgQEAgTVRMVGV4dHVyZVN3aXp6
bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6bGUpOworIAorIC8vIEdldCBjb2xvciB3
cml0ZSBtYXNrIGZvciBhIHNwZWNpZmllZCBmb3JtYXQuIFNvbWUgZm9ybWF0cyBzdWNoIGFzIFJH
QjU2NSBkb2Vzbid0IGhhdmUgYWxwaGEKKyAvLyBjaGFubmVsIGJ1dCBpcyBlbXVsYXRlZCBieSBh
IFJHQkE4IGZvcm1hdCwgd2UgbmVlZCB0byBkaXNhYmxlIGFscGhhIHdyaXRlIGZvciB0aGlzIGZv
cm1hdC4KKy0vLyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQs
IHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KKy1NVExDb2xvcldyaXRlTWFz
ayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQs
IGJvb2wgKmlzRm9ybWF0RW11bGF0ZWQpOworKy8vIC0gZW11bGF0ZWRDaGFubmVsc091dDogaWYg
dGhlIGZvcm1hdCBpcyBlbXVsYXRlZCwgdGhpcyBwb2ludGVyIHdpbGwgc3RvcmUgYSB0cnVlIHZh
bHVlLgorK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpOworIE1UTENvbG9yV3JpdGVN
YXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1h
dCk7CisgYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQp
OwogIAotIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTEVTKQorK05TVUludGVnZXIg
R2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZp
Y2UpOworK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRT
aXplKGlkPE1UTERldmljZT4gZGV2aWNlKTsKKysKKyAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNv
bG9yIGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFj
a2VuZCdzIGZvcm1hdAorIC8vIGhhcyBhbHBoYSBjaGFubmVsLgorIE1UTENsZWFyQ29sb3IgRW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1h
c2sgY29sb3JNYXNrKTsKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVu
Y3Rpb25zRUFHTC5tbQotaW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKLS0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLSsrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLUBAIC0xNCw3ICsxNCw3IEBA
Ci0gIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgotICMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXpl
VXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlw
dG9yICpkZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExEZXZp
Y2U+IGRldmljZSk7CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcigKKysgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yLAorKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICBp
ZDxNVExEZXZpY2U+IGRldmljZSk7CisrCisgZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0
IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsKICAKLS0jICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAgICBpbmNsdWRlICJjb21tb24vYXBwbGUv
U29mdExpbmtpbmcuaCIKKyBNaXBtYXBOYXRpdmVMZXZlbCBHZXROYXRpdmVNaXBMZXZlbChHTHVp
bnQgbGV2ZWwsIEdMdWludCBiYXNlKTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91
dGlscy5tbQoraW5kZXggMDc2ZTYwOS4uMDA5YWY1YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfdXRpbHMubW0KK0BAIC0xMCw5ICsxMCwxMSBAQAogIAotIFNPRlRfTElOS19G
UkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfdXRpbHMuaCIKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCi1pbmRleCBmMTZjM2U3Li40NWU2ZDBmIDEw
MDY0NAotLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFj
ZUVBR0wubW0KLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1
cmZhY2VFQUdMLm1tCi1AQCAtMjA2LDcgKzIwNiw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAg
ICAgIC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVyZSwgaW5j
bHVkaW5nIHNldHRpbmcgYW55Ci0gICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAg
d2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCi0gICAgICAgICBnbDo6UGl4ZWxVbnBhY2tTdGF0
ZSBkZWZhdWx0VW5wYWNrU3RhdGU7Ci0tICAgICAgICBzdGF0ZU1hbmFnZXItPnNldFBpeGVsVW5w
YWNrU3RhdGUoZGVmYXVsdFVucGFja1N0YXRlKTsKLSsgICAgICAgIGlmIChJc0Vycm9yKHN0YXRl
TWFuYWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShjb250ZXh0LCBkZWZhdWx0VW5wYWNrU3RhdGUp
KSkgewotKyAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0
byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0rICAgICAgICB9Ci0gICAgICAgICB0ZXh0dXJl
RGF0YSA9IElPU3VyZmFjZUdldEJhc2VBZGRyZXNzKG1JT1N1cmZhY2UpOwotICAgICB9Ci0gCi1A
QCAtMjM4LDcgKzI0MCw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMCi0gICAgICAgICBnbDo6
UGl4ZWxQYWNrU3RhdGUgc3RhdGU7Ci0gICAgICAgICBzdGF0ZS5yb3dMZW5ndGggPSBtUm93U3Ry
aWRlSW5QaXhlbHM7Ci0gICAgICAgICBzdGF0ZS5hbGlnbm1lbnQgPSAxOwotLSAgICAgICAgc3Rh
dGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tTdGF0ZShzdGF0ZSk7Ci0rICAgICAgICBpZiAoSXNFcnJv
cihzdGF0ZU1hbmFnZXItPnNldFBpeGVsUGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKLSsg
ICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBp
eGVsIHVucGFjayBzdGF0ZS4iOwotKyAgICAgICAgfQotICAgICAgICAgLy8gVE9ETyhrYnIpOiBw
b3NzaWJseSBtb3JlIHN0YXRlIHRvIGJlIHNldCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyBhbnkK
LSAgICAgICAgIC8vIHBpeGVsIHBhY2sgYnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAzLjAgY29u
dGV4dHMuCi0gICAgICAgICBjb25zdCBhdXRvICZmb3JtYXQgPSBrSU9TdXJmYWNlRm9ybWF0c1tt
Rm9ybWF0SW5kZXhdOwotZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5k
ZXJlcmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0
aWxzLmNwcAotaW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAotKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCi1AQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9p
ZCBHZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKysjaW5jbHVkZSA8
QXZhaWxhYmlsaXR5Lmg+CisgI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgogIAotICNp
ZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQotICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotLSAgICBpZiAoYW5n
bGU6OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlm
IChhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykgJiYgIWluZm8ubmVlZHNFQUdMT25NYWMpCisg
I2luY2x1ZGUgImNvbW1vbi9NZW1vcnlCdWZmZXIuaCIKKysjaW5jbHVkZSAiY29tbW9uL3N5c3Rl
bV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCitAQCAtMjQsNiArMjYsOCBAQAor
IG5hbWVzcGFjZSBtdGwKKyB7CisgCisrY29uc3RleHByIGNoYXIga0FOR0xFUHJpbnRNU0xFbnZb
XSA9ICJBTkdMRV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKysKKyBuYW1lc3BhY2UKKyB7Cisg
CitAQCAtMTAzLDI0ICsxMDcsNDMgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdl
TmF0aXZlSW5kZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyB7CisgICAgIEFTU0VSVCh0ZXh0
dXJlICYmIHRleHR1cmUtPnZhbGlkKCkpOworLSAgICAvLyBPbmx5IG9uZSBzbGljZSBjYW4gYmUg
aW5pdGlhbGl6ZWQgYXQgYSB0aW1lLgorLSAgICBBU1NFUlQoIWluZGV4LmlzTGF5ZXJlZCgpIHx8
IGluZGV4LmdldFR5cGUoKSA9PSBnbDo6VGV4dHVyZVR5cGU6Ol8zRCk7CisgICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgCisrICAgIGNvbnN0IGFu
Z2xlOjpGb3JtYXQgJmFjdHVhbEFuZ2xlRm9ybWF0ICAgICAgICAgICA9IHRleHR1cmVPYmpGb3Jt
YXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKKyAgICAgY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZp
bnRlbmRlZEludGVybmFsRm9ybWF0ID0gdGV4dHVyZU9iakZvcm1hdC5pbnRlbmRlZEludGVybmFs
Rm9ybWF0KCk7CisgCisgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG1hbnkgcGxh
Y2VzIHRvIGluaXRpYWxpemUgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0dXJlLgorLSAgICAvLyBTbyBp
dCdzIGJldHRlciB3ZSBkbyB0aGUgaW5pdGlhbCBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CistICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3NlZCkKKysgICAgLy8gU28g
aXQncyBiZXR0ZXIgd2UgZG8gdGhlIHNhbml0eSBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CisrICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGFjdHVhbEFuZ2xlRm9ybWF0LmlzQmxvY2sgfHwgYWN0dWFsQW5nbGVGb3JtYXQu
ZGVwdGhCaXRzID4gMCB8fAorKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMg
PiAwKQogICAgICB7Ci0gICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5j
dGlvbnMpOwotICAgICAgICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkg
JiYgKm1heFN1cHBvcnRlZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKKysgICAgICAg
IC8vIElmIGRzdCBmb3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3JlLgorICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9CisgCisgICAgIGdsOjpFeHRlbnRzIHNp
emUgPSB0ZXh0dXJlLT5zaXplKGluZGV4KTsKKyAKKy0gICAgLy8gSW50aWlhbGl6ZSB0aGUgY29u
dGVudCB0byBibGFjaworLSAgICBHTGludCBsYXllciwgc3RhcnREZXB0aDsKKy0gICAgR2V0U2xp
Y2VBbmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnREZXB0aCk7CisrICAgIC8vIEludGlhbGl6
ZSB0aGUgY29udGVudCB0byBibGFjaworKyAgICBHTGludCBsYXllciAgICAgID0gMDsKKysgICAg
R0xpbnQgc3RhcnREZXB0aCA9IDA7CisrICAgIGlmIChpbmRleC5oYXNMYXllcigpKQorKyAgICB7
CisrICAgICAgICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcDoKKysgICAgICAgICAgICAgICAgbGF5
ZXIgPSBpbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfMkRBcnJheToKKysgICAgICAgICAg
ICAgICAgbGF5ZXIgPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfM0Q6CisrICAgICAgICAg
ICAgICAgIHN0YXJ0RGVwdGggPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9Cisg
CisgICAgIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSAmJiBpbmRleC5nZXRUeXBlKCkg
IT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRNdWx0aXNhbXBsZSAmJgorICAgICAgICAgaW5kZXguZ2V0
VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGVBcnJheSkKK0BAIC0xMzYs
NiArMTU5LDEzIEBAIEdMaW50IEdldFNsaWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4
ICZpbmRleCkKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9y
bWF0LmNvbXByZXNzZWQgfHwKKysgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRlcm5hbEZvcm1h
dC5kZXB0aEJpdHMgPiAwIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNpbEJpdHMgPiAw
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgc291cmNlIGZvcm1hdCBp
cyBjb21wcmVzc2VkLCBpZ25vcmUuCisrICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKysgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgY29uc3QgYW5n
bGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0gYW5nbGU6OkZvcm1hdDo6R2V0KAorICAgICAgICAgICAg
ICAgICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmFscGhhQml0cyA+IDAgPyBhbmdsZTo6Rm9ybWF0
SUQ6OlI4RzhCOEE4X1VOT1JNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKK0BAIC0x
NjUsNyArMTk1LDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnNpb25Sb3cuZGF0YSgpLCBkc3RSb3dQaXRjaCk7CisgICAgICAgICAgICAgfQorICAgICAgICAg
fQorLSAgICB9CisrICAgIH0gIC8vIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSkKKyAg
ICAgZWxzZQorICAgICB7CisgICAgICAgICBBTkdMRV9UUlkoSW5pdGlhbGl6ZVRleHR1cmVDb250
ZW50c0dQVShjb250ZXh0LCB0ZXh0dXJlLCB0ZXh0dXJlT2JqRm9ybWF0LCBpbmRleCwKK0BAIC0y
MTAsNyArMjQwLDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICBSZW5kZXJUYXJnZXRNdGwgdGVtcFJ0dDsKKyAgICAgdGVtcFJ0dC5z
ZXQodGV4dHVyZSwgaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKSwgc2xpY2VPckRlcHRoLCB0ZXh0dXJl
T2JqRm9ybWF0KTsKKyAKKy0gICAgaW50IGNsZWFyQWxwaGEgPSAwOworKyAgICBmbG9hdCBjbGVh
ckFscGhhID0gMDsKKyAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVkQW5nbGVGb3Jt
YXQoKS5hbHBoYUJpdHMpCisgICAgIHsKKyAgICAgICAgIC8vIGlmIGludGVuZGVkIGZvcm1hdCBk
b2Vzbid0IGhhdmUgYWxwaGEsIHNldCBpdCB0byAxLjAuCitAQCAtMjQwLDExICsyNzAsMTEgQEAg
R0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5kZXggJmluZGV4KQorICAg
ICAgICAgQ2xlYXJDb2xvclZhbHVlIGNsZWFyQ29sb3I7CisgICAgICAgICBpZiAoYW5nbGVGb3Jt
YXQuaXNTaW50KCkpCisgICAgICAgICB7CistICAgICAgICAgICAgY2xlYXJDb2xvci5zZXRBc0lu
dCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzSW50
KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlm
IChhbmdsZUZvcm1hdC5pc1VpbnQoKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOworICAgICAgICAgfQorICAg
ICAgICAgZWxzZQorICAgICAgICAgeworQEAgLTI4MywxNyArMzEzLDE3IEBAIEdMaW50IEdldFNs
aWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyAgICAgcnBEZXNjLnNh
bXBsZUNvdW50ID0gdGV4dHVyZS0+c2FtcGxlcygpOworICAgICBpZiAoYW5nbGVGb3JtYXQuZGVw
dGhCaXRzKQorICAgICB7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUg
ICAgICA9IHRleHR1cmU7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxldmVsICAg
ICAgICA9IGxldmVsOworLSAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5zbGljZU9yRGVw
dGggPSBsYXllcjsKKysgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0
LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworKyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVu
dC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLmRl
cHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAg
ICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xl
YXI7CisgICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsK
KyAgICAgfQorICAgICBpZiAoYW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMpCisgICAgIHsKKy0gICAg
ICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworKyAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+dGV4dHVyZSAgICAg
ID0gdGV4dHVyZTsKKysgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJn
ZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7CisgICAgICAgICBycERlc2Mu
c3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNsZWFyOworICAg
ICB9CisgCitAQCAtNDU2LDYgKzQ4NiwzMCBAQCB1aW50MzJfdCBHZXREZXZpY2VWZW5kb3JJZChp
ZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlKQorICAgICByZXR1cm4gQ3JlYXRlU2hhZGVyTGlicmFy
eShtZXRhbERldmljZSwgc291cmNlLmNfc3RyKCksIHNvdXJjZS5zaXplKCksIGVycm9yKTsKKyB9
CisgCisrI2lmIDAKKytzdGF0aWMgTVRMTGFuZ3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBwb3J0
ZWRNU0xWZXJzaW9uKCkKKyt7CisrICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9k
b2N1bWVudGF0aW9uL21ldGFsL210bGxhbmd1YWdldmVyc2lvbj9sYW5ndWFnZT1vYmpjCisrICAg
IGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDExLjAsIDE0LjAsIDE0LjApKQorKyAgICAg
ICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMzsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1
YWdlVmVyc2lvbjJfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUs
IDEzLjAsIDEyLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMTsKKysg
ICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTMsIDEzLjAsIDExLjApKQorKyAg
ICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMDsKKysgICAgaWYgKEFOR0xFX0FQUExF
X0FWQUlMQUJMRV9YQ0koMTAuMTIsIDEzLjAsIDEwLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExh
bmd1YWdlVmVyc2lvbjFfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTEsIDEzLjAsIDkuMCkpCisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOwor
KyMgICAgaWYgVEFSR0VUX09TX0lPUworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0ko
OS4wKSkKKysgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzA7CisrIyAgICBlbmRp
ZgorKyAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOworK30KKysjZW5kaWYKKysKKyBB
dXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxNVExEZXZp
Y2U+IG1ldGFsRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc291cmNlTGVuLAorQEAgLTQ2OSw4ICs1MjMs
MjUgQEAgdWludDMyX3QgR2V0RGV2aWNlVmVuZG9ySWQoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVXaGVuRG9uZTpOT107CisgICAgICAgICBhdXRv
IG9wdGlvbnMgICAgID0gW1tbTVRMQ29tcGlsZU9wdGlvbnMgYWxsb2NdIGluaXRdIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisrICAgICAgICAvLyBNYXJrIGFsbCBwb3NpdGlvbnMgaW4gVlMgd2l0
aCBhdHRyaWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6YWJsZQorKyNpZiAoZGVmaW5lZChf
X01BQ18xMV8wKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19NQUNfMTFf
MCkgfHwgICAgICAgIFwKKysgICAgKGRlZmluZWQoX19JUEhPTkVfMTRfMCkgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX0lQSE9ORV8xNF8wKSB8fCBcCisrICAgIChkZWZp
bmVkKF9fVFZPU18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19UVk9T
XzE0XzApCisrICAgICAgICBvcHRpb25zLnByZXNlcnZlSW52YXJpYW5jZSA9IHRydWU7CisrI2Vs
c2UKKysgICAgICAgIC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFpbGFibGUgY29tcGlsaW5n
IGZyb20gc291cmNlLCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisrICAgICAgICBvcHRpb25z
LmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyNlbmRpZgorKyAgICAgICAgLy8gVE9ETyhqY3Vu
bmluZ2hhbSk6IHdvcmthcm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJlc2VydmluZyBpbnZh
cmlhbmNlIG9uIGFsbCBzaGFkZXJzCisrICAgICAgICBpZiAoW21ldGFsRGV2aWNlLm5hbWUgcmFu
Z2VPZlN0cmluZzpAIkludGVsIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyAgICAgICAg
fQorICAgICAgICAgYXV0byBsaWJyYXJ5ID0gW21ldGFsRGV2aWNlIG5ld0xpYnJhcnlXaXRoU291
cmNlOm5zU291cmNlIG9wdGlvbnM6b3B0aW9ucyBlcnJvcjombnNFcnJvcl07CistCisrICAgICAg
ICBpZiAoYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtBTkdMRVByaW50TVNMRW52KVswXSA9PSAn
MScpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2UpOwor
KyAgICAgICAgfQorICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07Cisg
CisgICAgICAgICAqZXJyb3JPdXQgPSBzdGQ6Om1vdmUobnNFcnJvcik7CitAQCAtNzcyLDE1ICs4
NDMsMTUgQEAgTVRMVGV4dHVyZVN3aXp6bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6
bGUpCisgfQorICNlbmRpZgorIAorLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JX
cml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91
dCkKKytNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpCisgeworICAg
ICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1hdCA9IG10bEZvcm1hdC5pbnRlbmRl
ZEFuZ2xlRm9ybWF0KCk7CisgICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmFjdHVhbEZvcm1hdCAg
ID0gbXRsRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCk7CistICAgIGJvb2wgaXNGb3JtYXRFbXVs
YXRlZCAgICAgICAgICAgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyAg
ICAgICAgICAgICAgID0gZmFsc2U7CisgICAgIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yV3JpdGFi
bGVNYXNrID0gTVRMQ29sb3JXcml0ZU1hc2tBbGw7CisgICAgIGlmIChpbnRlbmRlZEZvcm1hdC5h
bHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYWxwaGFCaXRzKQorICAgICB7CistICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0
cnVlOworICAgICAgICAgLy8gRGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAg
ICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9y
V3JpdGVNYXNrQWxwaGEpOworICAgICB9CitAQCAtNzg4LDQxICs4NTksNDEgQEAgTVRMQ29sb3JX
cml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRs
Rm9ybWF0LCBib29sICoKKyAgICAgeworICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LnJlZEJp
dHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQucmVkQml0cykKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRleHR1
cmUKKyAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYg
KH5NVExDb2xvcldyaXRlTWFza1JlZCk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoaW50ZW5k
ZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LmdyZWVuQml0cykKKyAgICAg
ICAgIHsKKy0gICAgICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAg
ICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyZWVu
IHdyaXRlIHRvIHRoaXMgdGV4dHVyZQorICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0g
Y29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrR3JlZW4pOworICAgICAgICAg
fQorICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LmJsdWVCaXRzID09IDAgJiYgYWN0dWFsRm9y
bWF0LmJsdWVCaXRzKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQg
PSB0cnVlOworKyAgICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVlOworICAgICAgICAg
ICAgIC8vIERpc2FibGUgYmx1ZSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAgICAgICAgICAgICBj
b2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFz
a0JsdWUpOworICAgICAgICAgfQorICAgICB9CisgCistICAgICppc0VtdWxhdGVkT3V0ID0gaXNG
b3JtYXRFbXVsYXRlZDsKKysgICAgKmVtdWxhdGVkQ2hhbm5lbHNPdXQgPSBlbXVsYXRlZENoYW5u
ZWxzOworIAorICAgICByZXR1cm4gY29sb3JXcml0YWJsZU1hc2s7CisgfQorIAorIE1UTENvbG9y
V3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10
bEZvcm1hdCkKKyB7CistICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4gdmFs
dWUKKy0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOworLSAgICByZXR1cm4gR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1hdEVtdWxhdGVkKTsKKysgICAgLy8gSWdu
b3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorKyAgICBib29sIGVtdWxhdGVkQ2hh
bm5lbHM7CisrICAgIHJldHVybiBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwg
JmVtdWxhdGVkQ2hhbm5lbHMpOworIH0KKyAKKyBib29sIElzRm9ybWF0RW11bGF0ZWQoY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCkKKyB7CistICAgIGJvb2wgaXNGb3JtYXRFbXVsYXRlZDsK
Ky0gICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1h
dEVtdWxhdGVkKTsKKy0gICAgcmV0dXJuIGlzRm9ybWF0RW11bGF0ZWQ7CisrICAgIGJvb2wgZW11
bGF0ZWRDaGFubmVsczsKKysgICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxG
b3JtYXQsICZlbXVsYXRlZENoYW5uZWxzKTsKKysgICAgcmV0dXJuIGVtdWxhdGVkQ2hhbm5lbHM7
CisgfQorIAorIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJD
b2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQorQEAgLTgzNyw2ICs5MDgs
MTUxIEBAIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xv
ciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sCisgICAgIHJldHVybiByZTsKKyB9CisgCisr
TlNVSW50ZWdlciBHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhpZDxNVExE
ZXZpY2U+IGRldmljZSkKKyt7CisrICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQ
VUZhbWlseUFwcGxlNF0pCisrICAgIHsKKysgICAgICAgIHJldHVybiA2NDsKKysgICAgfQorKyAg
ICBlbHNlIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0pCisr
ICAgIHsKKysgICAgICAgIHJldHVybiAzMjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiAxNjsKKysgICAgfQorK30KKysKKytOU1VJbnRlZ2VyIEdldE1heE51bWJl
ck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSkKKyt7CisrICAg
IGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0gfHwgW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlNYWMxXSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIDg7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gNDsKKysg
ICAgfQorK30KKysKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKGlkPE1U
TERldmljZT4gZGV2aWNlKQorK3sKKysgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6
TVRMR1BVRmFtaWx5QXBwbGUxXTsKKyt9CisrCisrc3RhdGljIE5TVUludGVnZXIgZ2V0TmV4dExv
Y2F0aW9uRm9yRm9ybWF0KGNvbnN0IEZvcm1hdENhcHMgJmNhcHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJn
ZXRTaXplKQorK3sKKysgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworKyAgICB1aW50OF90
IGFsaWdubWVudCAgICAgICAgID0gY2Fwcy5hbGlnbm1lbnQ7CisrICAgIE5TVUludGVnZXIgcGl4
ZWxCeXRlcyAgICAgPSBjYXBzLnBpeGVsQnl0ZXM7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRl
c01TQUEgPSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworKyAgICBwaXhlbEJ5dGVzICAgICAgICAgICAg
ICAgID0gaXNNU0FBID8gcGl4ZWxCeXRlc01TQUEgOiBwaXhlbEJ5dGVzOworKworKyAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1l
bnQgLSAxKSkgJiB+KGFsaWdubWVudCAtIDEpOworKyAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6
ZSArPSBwaXhlbEJ5dGVzOworKyAgICByZXR1cm4gY3VycmVudFJlbmRlclRhcmdldFNpemU7Cisr
fQorKworK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvcihjb25zdCBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCisreworKyAgICBO
U1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKysKKysgICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRl
dmljZSk7IGkrKykKKysgICAgeworKyAgICAgICAgTVRMUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQg
PSBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5waXhlbEZvcm1hdDsKKysg
ICAgICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgID0gZGVzY3JpcHRvci5jb2xvckF0dGFj
aG1lbnRzW2ldLnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKHBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0
U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBp
c01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAg
ICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCA9PQor
KyAgICAgICAgZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
KQorKyAgICB7CisrICAgICAgICBib29sIGlzTXNhYSA9IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVw
dGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPSBjb250
ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworKyAgICAg
ICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4
dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUp
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxG
b3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGJvb2wgaXNNc2FhICAgICAg
ICAgICAgPSBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnNhbXBsZUNvdW50ID4g
MTsKKysgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlz
cGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZv
ckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAg
IH0KKysgICAgICAgIGlmIChkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUucGl4
ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgPSBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50
LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMg
JmNhcHMgPSBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZv
cm1hdCk7CisrICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAg
ICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplOworK30KKytOU1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKAorKyAgICBjb25zdCBNVExSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisrICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisr
ICAgIGlkPE1UTERldmljZT4gZGV2aWNlKQorK3sKKysgICAgTlNVSW50ZWdlciBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9IDA7CisrICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgICAgICAg
ICAgPSBkZXNjcmlwdG9yLnNhbXBsZUNvdW50ID4gMTsKKysgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRldmljZSk7IGkr
KykKKysgICAgeworKyAgICAgICAgTVRMUmVuZGVyUGlwZWxpbmVDb2xvckF0dGFjaG1lbnREZXNj
cmlwdG9yICpjb2xvciA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXTsKKysgICAgICAg
IGlmIChjb2xvci5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERp
c3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhjb2xvci5waXhlbEZvcm1hdCk7CisrICAgICAg
ICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAgICAgICAgICBnZXROZXh0
TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7
CisrICAgICAgICB9CisrICAgIH0KKysgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50
UGl4ZWxGb3JtYXQgPT0gZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQor
KyAgICB7CisrICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1h
dCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29u
c3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldERpc3Bs
YXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVs
Rm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAg
ICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1U
TFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3Jt
YXRDYXBzICZjYXBzID0KKysgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5n
ZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQp
OworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAg
ICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRh
cmdldFNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc3RlbmNpbEF0
dGFjaG1lbnRQaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLnN0
ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJU
YXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNh
cHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKKyt9CisrCisgZ2w6OkJveCBN
VExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQorIHsKKyAgICAgcmV0
dXJuIGdsOjpCb3goc3RhdGljX2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLngpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG10bFJlZ2lvbi5vcmlnaW4ueSksCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWwKK2luZGV4IDQyNzJjNGYuLjJhOWJiNWQgMTAwNjQ0
CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCisr
KysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCitAQCAt
MzM0LDcgKzMzNCw3IEBAIGtlcm5lbCB2b2lkIGJsaXRTdGVuY2lsVG9CdWZmZXJDUyh1c2hvcnQy
IGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyB9CisgCisgLy8gRnJhZ21l
bnQncyBzdGVuY2lsIG91dHB1dCBpcyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBNZXRhbCAyLjEKKy1A
QCNpZiBfX01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKysjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0g
MjEwCisgCisgc3RydWN0IEZyYWdtZW50U3RlbmNpbE91dAorIHsKK0BAIC0zOTcsNCArMzk3LDQg
QEAgZnJhZ21lbnQgRnJhZ21lbnREZXB0aFN0ZW5jaWxPdXQgYmxpdERlcHRoU3RlbmNpbEZTKAor
ICAgICAgICAgICAgICAgICAgICAgICBzcmNTdGVuY2lsVGV4dHVyZUN1YmUsIGlucHV0LnRleENv
b3Jkcywgb3B0aW9ucy5zcmNMZXZlbCwgb3B0aW9ucy5zcmNMYXllcik7CisgICAgIHJldHVybiBy
ZTsKKyB9CistQEAjZW5kaWYgIC8vIF9fTUVUQUxfVkVSU0lPTl9fID49IDIxMAorKyNlbmRpZiAg
Ly8gX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb21tb24uaAoraW5kZXggNjhjNzc0NS4uZTY2NzNiNSAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaAorQEAgLTEwLDggKzEwLDgg
QEAKKyAKKyAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgI2lmbmRlZiBTS0lQX1NURF9IRUFERVJTCist
QEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgorLUBAIyAgICBpbmNsdWRlIDxtZXRhbF9zdGRs
aWI+CisrIyAgICBpbmNsdWRlIDxzaW1kL3NpbWQuaD4KKysjICAgIGluY2x1ZGUgPG1ldGFsX3N0
ZGxpYj4KKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWwgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAoraW5k
ZXggZGY3YzRjOS4uMWI0MDhkOCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAorQEAgLTQsMjIgKzQsMjIgQEAKKyAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCisgLy8gY29weV9idWZmZXIubWV0YWw6
IGltcGxlbWVudHMgY29tcHV0ZSBzaGFkZXIgdGhhdCBjb3B5IGZvcm1hdHRlZCBkYXRhIGZyb20g
YnVmZmVyIHRvIHRleHR1cmUsCistLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisrLy8g
ZnJvbSB0ZXh0dXJlIHRvIGJ1ZmZlciBhbmQgZnJvbSBidWZmZXIgdG8gYnVmZmVyLgorIC8vIE5P
VEUoaHFsZSk6IFRoaXMgZmlsZSBpcyBhIGJpdCBoYXJkIHRvIHJlYWQgYnV0IHRoZXJlIGFyZSBh
IGxvdCBvZiByZXBlYXRlZCB3b3JrcywgYW5kIGl0IHdvdWxkCisgLy8gYmUgYSBwYWluIHRvIGlt
cGxlbWVudCB3aXRob3V0IHRoZSB1c2Ugb2YgbWFjcm9zLgorIC8vCisgCistQEAjaW5jbHVkZSA8
bWV0YWxfcGFjaz4KKysjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyAKKyAjaW5jbHVkZSAiY29tbW9u
LmgiCisgI2luY2x1ZGUgImZvcm1hdF9hdXRvZ2VuLmgiCisgCisgdXNpbmcgbmFtZXNwYWNlIHJ4
OjptdGxfc2hhZGVyOworIAorLWNvbnN0YW50IGludCBrQ29weUZvcm1hdFR5cGUgW1tmdW5jdGlv
bl9jb25zdGFudCgxMCldXTsKKytjb25zdGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rp
b25fY29uc3RhbnQoMSldXTsKKyAKKyAvKiAtLS0tLS0tLSBjb3B5IHBpeGVsIGRhdGEgYmV0d2Vl
biBidWZmZXIgYW5kIHRleHR1cmUgLS0tLS0tLS0tKi8KKy1jb25zdGFudCBpbnQga0NvcHlUZXh0
dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDIwKV1dOworK2NvbnN0YW50IGludCBrQ29weVRl
eHR1cmVUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMildXTsKKyBjb25zdGFudCBib29sIGtDb3B5
VGV4dHVyZVR5cGUyRCAgICAgID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyRDsK
KyBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5cGUyREFycmF5ID0ga0NvcHlUZXh0dXJlVHlw
ZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OworIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJlVHlw
ZTJETVMgICAgPSBrQ29weVRleHR1cmVUeXBlID09IGtUZXh0dXJlVHlwZTJETXVsdGlzYW1wbGU7
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0
X2F1dG9nZW4uaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9h
dXRvZ2VuLmgKK2luZGV4IGExN2VhZDMuLmI5OTFlNDggMTAwNjQ0CistLS0gYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCitAQCAtMjQ1LDUg
KzI0NSw1IEBAIGVudW0KKyAKKyB9CisgCistfSAgLy8gbmFtZXNwYWNlIG10bF9zaGFkZXIKKy19
ICAvLyBuYW1lc3BhY2UgcngKKyt9CisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX2luZGljZXMubWV0YWwKK2luZGV4IDJkODM1M2IuLmVlZDYx
ZWEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5f
aW5kaWNlcy5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Z2VuX2luZGljZXMubWV0YWwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5k
ZXhVbmFsaWduZWRVMzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBp
ZHgpCisgICAgIHJldHVybiBpbnB1dDAgfCAoaW5wdXQxIDw8IDgpIHwgKGlucHV0MiA8PCAxNikg
fCAoaW5wdXQzIDw8IDI0KTsKKyB9CisgCista2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1Ux
Nih1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9uc1tb
YnVmZmVyKDApXV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbW2J1ZmZlcigxKV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMildXSkKKytrZXJuZWwgdm9pZCBjb252
ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBh
cmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0IFtbYnVmZmVyKDEpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRwdXQgW1tidWZmZXIoMildXSkK
KyB7CisgICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9ucyk7CisgCitA
QCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBp
ZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgIH0KKyB9CisgCista2VybmVsIHZv
aWQgY29udmVydEluZGV4VTE2KAorLSAgICB1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dy
aWRdXSwKKy0gICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZm
ZXIoMCldXSwKKy0gICAgY29uc3RhbnQgdWNoYXIgKmlucHV0W1sgYnVmZmVyKDEpLCBmdW5jdGlv
bl9jb25zdGFudChrU291cmNlQnVmZmVyVW5hbGlnbmVkKSBdXSwKKy0gICAgY29uc3RhbnQgdXNo
b3J0ICppbnB1dEFsaWduZWRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VC
dWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMild
XSkKKytrZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYodWludCBpZHggW1t0aHJlYWRfcG9zaXRp
b25faW5fZ3JpZF1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyVW5h
bGlnbmVkKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQg
KmlucHV0QWxpZ25lZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRldmljZSB1c2hvcnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsK
KyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKKyAKK0BAIC05
NiwxMiArOTcsMTMgQEAga2VybmVsIHZvaWQgY29udmVydEluZGV4VTE2KAorICAgICBvdXRwdXRb
aWR4XSA9IHZhbHVlOworIH0KKyAKKy1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMzIoCistICAg
IHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJV
bmFsaWduZWQpIF1dLAorLSAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWRbWyBidWZmZXIo
MSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2
aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgY29udmVydEluZGV4
VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtb
YnVmZmVyKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgdWludCAqaW5wdXRBbGlnbmVkCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVy
QWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91
dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsKKyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQo
aWR4LCBvcHRpb25zKTsKKyAKK0BAIC0xNDAsOSArMTQyLDkgQEAga2VybmVsIHZvaWQgZ2VuVHJp
RmFuSW5kaWNlc0Zyb21BcnJheSh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0s
CisgCisgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludCBpZHgsCistICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQg
dWNoYXIgKmlucHV0VThbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwK
Ky0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5j
dGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291
cmNlQnVmZmVyVTMyKV1dKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dFU4IFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlv
bl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyIFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJj
ZUJ1ZmZlclUzMildXSkKKyB7CisgICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCisgICAgIHsK
K0BAIC0xNzAsMTMgKzE3MiwxNSBAQCBpbmxpbmUgdWludCBnZXRJbmRleFUzMih1aW50IG9mZnNl
dCwKKyAvLyBOT1RFKGhxbGUpOiB0cmlhbmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNu
J3Qgc3VwcG9ydCBwcmltaXRpdmUgcmVzdGFydC4KKyAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4g
aW5kaWNlcyBmcm9tIGFuIGluZGljZXMgYnVmZmVyLiBpbmRleENvdW50IG9wdGlvbnMgaW5kaWNh
dGVzIG51bWJlcgorIC8vIG9mIGluZGljZXMgc3RhcnRpbmcgZnJvbSB0aGUgM3JkLgorLWtlcm5l
bCB2b2lkIGdlblRyaUZhbkluZGljZXNGcm9tRWxlbWVudHMoCistICAgIHVpbnQgaWR4W1t0aHJl
YWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJh
bXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtb
IGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKKy0g
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclUxNikgXV0sCistICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMy
W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKSBdXSwK
Ky0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgZ2Vu
VHJpRmFuSW5kaWNlc0Zyb21FbGVtZW50cyh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9n
cmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNgorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0
aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dFUzMgorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2Nv
bnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCisgewor
ICAgICBBTkdMRV9JRFhfQ09OVkVSU0lPTl9HVUFSRChpZHgsIG9wdGlvbnMpOworIAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0
YWwgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFs
CitpbmRleCBiM2EzNjc1Li5mMjMzOGIyIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorQEAgLTIzLDggKzIzLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOworIAorICNkZWZpbmUgVEVYRUxfTE9BRChp
bmRleCkgZmxvYXQ0KHNSW2luZGV4XSwgc0dbaW5kZXhdLCBzQltpbmRleF0sIHNBW2luZGV4XSkK
KyAKKy0jZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVh
cih0ZXhlbCkgOiB0ZXhlbCkKKy0KKyAjZGVmaW5lIE9VVF9PRl9CT1VORF9DSEVDSyhlZGdlVmFs
dWUsIHRhcmdldFZhbHVlLCBjb25kaXRpb24pIFwKKyAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZh
bHVlKSA6ICh0YXJnZXRWYWx1ZSkKKyAKK0BAIC0zMiw3ICszMCw2IEBAIHN0cnVjdCBHZW5NaXBQ
YXJhbXMKKyB7CisgICAgIHVpbnQgc3JjTGV2ZWw7CisgICAgIHVpbnQgbnVtTWlwTGV2ZWxzVG9H
ZW47CistICAgIGJvb2wgc1JHQjsKKyB9OworIAorIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBM
ZXZlbHNUb0dlbiA+IDEsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dl
ciBvZiB0d28uIElmIGl0CitAQCAtODMsMTAgKzgwLDYgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUz
RE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKyAg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisgCisgICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKy0gICAgaWYgKG9wdGlvbnMuc1JHQikKKy0gICAgeworLSAgICAgICAg
dGV4ZWwxID0gbGluZWFyVG9TUkdCKHRleGVsMSk7CistICAgIH0KKyAgICAgVEVYRUxfU1RPUkUo
bEluZGV4LCB0ZXhlbDEpOworIAorICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKK0BAIC0xMTksNyArMTEyLDcgQEAga2VybmVsIHZvaWQgZ2VuZXJh
dGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwK
KyAKKyAgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQg
KyB0ZXhlbDUgKyB0ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOworIAorLSAgICAgICAg
ZHN0TWlwMi53cml0ZShUT19MSU5FQVIodGV4ZWwxKSwgZ0luZGljZXMgPj4gMSk7CisrICAgICAg
ICBkc3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CisgCisgICAgICAgICAvLyBX
cml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVs
MSk7CitAQCAtMTY1LDcgKzE1OCw3IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVp
bnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0
ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4
ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDMud3JpdGUo
VE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDIpOworKyAgICAgICAgZHN0TWlwMy53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOworIAorICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQorICAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworQEAgLTIxMSw2
ICsyMDQsMzQ4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtb
dGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3
ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDQud3JpdGUoVE9fTElORUFSKHRl
eGVsMSksIGdJbmRpY2VzID4+IDMpOworKyAgICAgICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJ
bmRpY2VzID4+IDMpOworKyAgICB9CisrfQorKworK2tlcm5lbCB2b2lkIGdlbmVyYXRlMkRNaXBt
YXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0MiBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlv
bl9pbl9ncmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZs
b2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUo
MSldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4
dHVyZSgzKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9h
dCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIo
MCldXSkKKyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAx
OworKyAgICB1c2hvcnQyIG1pcFNpemUgPQorKyAgICAgICAgdXNob3J0MihzcmNUZXh0dXJlLmdl
dF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0TWlwTGV2
ZWwpKTsKKysgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYg
Z0luZGljZXMueSA8IG1pcFNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVy
ZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0
ZXI6OmxpbmVhcik7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IFVzZSBzaW1kX2dyb3VwIGZ1bmN0
aW9uIHdoZW5ldmVyIGF2YWlsYWJsZS4gVGhhdCBjb3VsZCBhdm9pZCBiYXJyaWVyIHVzZS4KKysK
KysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0
LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltrVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3Jv
dXBYWV07CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZs
b2F0NCB0ZXhlbDE7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBm
bG9hdDIobWlwU2l6ZSk7CisrICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5z
YW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkp
OworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAgZHN0TWlwMS53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAg
bEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBM
ZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKworKyAg
ICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysKKysg
ICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0gMCkg
IC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0RWRn
ZSA9IGdJbmRpY2VzID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAgICAvLyAo
eCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2ls
bCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5E
X0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOworKyAgICAg
ICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9VTkRfQ0hF
Q0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVkZ2UueSk7
CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdyb3VwWCAr
IDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcyA+PiAxKTsKKysKKysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkK
KysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBp
ZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorKyAgICB7CisrICAgICAgICByZXR1
cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlwIGxldmVsIC0tLS0tLS0tCisrICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAg
ICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysgICAgaWYgKChsSW5kZXggJiAweDFi
KSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlw
U2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29s
MiBhdEVkZ2UgPSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysK
KysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlz
IDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIg
PSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIpLCBhdEVk
Z2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9Cisr
ICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXgg
KyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhF
TF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3VwWCArIDIpKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisr
ICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQu
MDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAyKTsKKysK
KysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JF
KGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZl
bHNUb0dlbiA9PSAzKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAg
Ly8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIo
bWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11
bHRpcGxlIG9mIDgKKysgICAgaWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAm
IGIxMTExMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNp
emUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMg
Pj4gMikgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkp
CisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFs
IHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0so
dGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAo
eCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JP
VU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCks
IGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhl
bDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICog
a1RocmVhZEdyb3VwWCArIDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1p
cDQud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAzKTsKKysgICAgfQorK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZVR5cGVSLCB0eXBlbmFtZSBUZXh0dXJlVHlwZVc+Cisrc3RhdGlj
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJh
eTJuZEFuZE1vcmVNaXBtYXBzKAorKyAgICB1aW50IGxJbmRleCwKKysgICAgdXNob3J0MyBnSW5k
aWNlcywKKysgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisrICAgIFRleHR1cmVUeXBlVyBk
c3RNaXAyLAorKyAgICBUZXh0dXJlVHlwZVcgZHN0TWlwMywKKysgICAgVGV4dHVyZVR5cGVXIGRz
dE1pcDQsCisrICAgIHVzaG9ydDIgbWlwMVNpemUsCisrICAgIGZsb2F0NCBtaXAxVGV4ZWwsCisr
ICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzUiwKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNHLAor
KyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0IsCisrICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwK
KysgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zKQorK3sKKysgICAgdXNob3J0MiBt
aXBTaXplID0gbWlwMVNpemU7CisrICAgIGZsb2F0NCB0ZXhlbDEgICA9IG1pcDFUZXhlbDsKKysK
KysgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKwor
KyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysK
KysgICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0g
MCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0
RWRnZSA9IGdJbmRpY2VzLnh5ID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAg
ICAvLyAoeCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhl
bDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOwor
KyAgICAgICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVk
Z2UueSk7CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0g
T1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdy
b3VwWCArIDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4
ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUo
dGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAxLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdy
aXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwx
KTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQor
KyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlw
IGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1f
dGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysg
ICAgaWYgKChsSW5kZXggJiAweDFiKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAK
KysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0
MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMSkgPT0gKG1p
cFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAv
LyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhF
TF9MT0FEKGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAg
ICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRl
eGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsK
KysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3Vw
WCArIDIpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRF
ZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwy
ICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4
ZWwxLCBnSW5kaWNlcy54eSA+PiAyLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsK
KyAgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAzKQorKyAg
ICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSA0dGggbWlwIGxl
dmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhy
ZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKysgICAg
aWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIxMTExMTEpID09IDAKKysg
ICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0Migx
KSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMikgPT0gKG1pcFNp
emUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJ
ZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysg
ICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9M
T0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAg
ICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVs
MSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysg
ICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICoga1RocmVhZEdyb3VwWCAr
IDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDQud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKysgICAgfQorK30KKysKKytrZXJuZWwg
dm9pZCBnZW5lcmF0ZUN1YmVNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3Ro
cmVhZGdyb3VwXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQzIGdJ
bmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1d
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBb
W3RleHR1cmUoMildXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVj
dWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3Jp
dGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKKyt7Cisr
ICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAgICB1c2hv
cnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmly
c3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisrICAg
IGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5kaWNlcy55
IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIo
bWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVh
cik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZsb2F0
NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkg
LyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0gc3JjVGV4dHVyZS5zYW1w
bGUodGV4dHVyZVNhbXBsZXIsIGN1YmVUZXhjb29yZHModGV4Q29vcmRzLCBpbnQoZ0luZGljZXMu
eikpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwob3B0aW9u
cy5zcmNMZXZlbCkpOworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAg
ZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFs
bCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAgbEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAg
fQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBz
dHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltr
VGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZ
XTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJl
YWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3JvdXBYWV07CisrCisrICAgIGdlbmVyYXRlQ3ViZU9y
MkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMsIHNyY1RleHR1cmUsIGRz
dE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pcDFTaXplLCBtaXAxVGV4ZWwsIHNSLCBzRywgc0IsIHNBLCBvcHRpb25z
KTsKKyt9CisrCisra2VybmVsIHZvaWQgZ2VuZXJhdGUyREFycmF5TWlwbWFwcyh1aW50IGxJbmRl
eCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNob3J0MyBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlk
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1p
cDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIp
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6
d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkK
Kyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAg
ICB1c2hvcnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lk
dGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7
CisrICAgIGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5k
aWNlcy55IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNh
bXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6
OmxpbmVhcik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAg
IGZsb2F0NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAg
ICAgZmxvYXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwg
MC41KSkgLyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0KKysgICAgICAg
ICAgICBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxlciwgdGV4Q29vcmRzLCBnSW5kaWNl
cy56LCBsZXZlbChvcHRpb25zLnNyY0xldmVsKSk7CisrCisrICAgICAgICAvLyBXcml0ZSB0byB0
ZXh0dXJlCisrICAgICAgICBkc3RNaXAxLndyaXRlKG1pcDFUZXhlbCwgZ0luZGljZXMueHksIGdJ
bmRpY2VzLnopOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgLy8gVGhpcyB3
aWxsIGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisrICAgICAgICBsSW5kZXggPSAw
eGZmZmZmZmZmOworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2Vu
ID09IDEpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyBVc2Ug
c3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3QuCisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0dba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3Jv
dXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKysKKysg
ICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5kTW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNl
cywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlwMywgZHN0TWlwNCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNH
LCBzQiwgc0EsIG9wdGlvbnMpOworIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAoraW5kZXggOTA1YzE5Ni4uYWQ1ODYwZiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxp
dHkubWV0YWwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2li
aWxpdHkubWV0YWwKK0BAIC02LDcgKzYsNyBAQAorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAK
Ky1jb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0IFtbZnVuY3Rpb25fY29u
c3RhbnQoMTAwMCldXTsKKytjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0
IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKKyAKKyAvLyBDb21iaW5lIHRoZSB2aXNpYmlsaXR5
IHJlc3VsdCBvZiBjdXJyZW50IHJlbmRlciBwYXNzIHdpdGggcHJldmlvdXMgdmFsdWUgZnJvbSBw
cmV2aW91cyByZW5kZXIKKyAvLyBwYXNzCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcCBiL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKK2lu
ZGV4IDc1NWJkNjEuLjdkNWFjNTggMTAwNjQ0CistLS0gYS9zcmMvbGliR0xFU3YyL2VudHJ5X3Bv
aW50c19lZ2wuY3BwCisrKysgYi9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCitA
QCAtNDI4LDggKzQyOCw2IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX0Rlc3Ryb3lDb250
ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKKyAKKyAgICAgaWYgKGNvbnRleHRX
YXNDdXJyZW50KQorICAgICB7CistICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQs
IGRpc3BsYXktPm1ha2VDdXJyZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIp
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVnbERlc3Ryb3lDb250ZXh0IiwgR2V0
Q29udGV4dElmVmFsaWQoZGlzcGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CisgICAgICAgICBT
ZXRDb250ZXh0Q3VycmVudCh0aHJlYWQsIG51bGxwdHIpOworICAgICB9CisgCitAQCAtNDY2LDgg
KzQ2NCw4IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX01ha2VDdXJyZW50KEVHTERpc3Bs
YXkgZHB5LAorICAgICAvLyBPbmx5IGNhbGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Ig
c3VyZmFjZXMgaGF2ZSBjaGFuZ2VkLgorICAgICBpZiAocHJldmlvdXNEcmF3ICE9IGRyYXdTdXJm
YWNlIHx8IHByZXZpb3VzUmVhZCAhPSByZWFkU3VyZmFjZSB8fCBwcmV2aW91c0NvbnRleHQgIT0g
Y29udGV4dCkKKyAgICAgeworLSAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCistICAgICAg
ICAgICAgdGhyZWFkLCBkaXNwbGF5LT5tYWtlQ3VycmVudChwcmV2aW91c0NvbnRleHQsIGRyYXdT
dXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisrICAgICAgICBBTkdMRV9FR0xfVFJZX1JF
VFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5tYWtl
Q3VycmVudCh0aHJlYWQsIGRyYXdTdXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQiLCBHZXRDb250ZXh0SWZW
YWxpZChkaXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKKyAKKyAgICAgICAgIFNldENvbnRl
eHRDdXJyZW50KHRocmVhZCwgY29udGV4dCk7CitAQCAtODE4LDggKzgxNiw4IEBAIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgRUdMX1JlbGVhc2VUaHJlYWQodm9pZCkKKyAgICAgICAgIGlmIChwcmV2
aW91c0RyYXcgIT0gRUdMX05PX1NVUkZBQ0UgfHwgcHJldmlvdXNSZWFkICE9IEVHTF9OT19TVVJG
QUNFIHx8CisgICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQor
ICAgICAgICAgeworLSAgICAgICAgICAgIEFOR0xFX0VHTF9UUllfUkVUVVJOKAorLSAgICAgICAg
ICAgICAgICB0aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250
ZXh0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKKysgICAgICAgICAgICBBTkdMRV9FR0xf
VFJZX1JFVFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNEaXNwbGF5LT5tYWtlQ3VycmVudCh0aHJlYWQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2xSZWxlYXNlVGhyZWFk
IiwgbnVsbHB0ciwgRUdMX0ZBTFNFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIEFOR0xFX0VHTF9U
UllfUkVUVVJOKHRocmVhZCwgcHJldmlvdXNEaXNwbGF5LT5yZWxlYXNlVGhyZWFkKCksICJlZ2xS
ZWxlYXNlVGhyZWFkIiwKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
ZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9l
Z2xfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVu
YW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9lZ2xfVGVzdEV4cGVjdGF0aW9ucwor
ZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMl90ZXN0X2V4cGVj
dGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczJfVGVzdEV4cGVj
dGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3Jj
L3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMyX1Rlc3RFeHBlY3RhdGlvbnMKK2RpZmYgLS1n
aXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9u
cworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBw
b3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0
cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBh
L3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX1Rlc3RF
eHBlY3RhdGlvbnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3Rz
L2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfVGVzdEV4
cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M190ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xl
czNfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRl
X3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M19yb3RhdGVfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUg
ZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRlX3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM19y
b3RhdGVfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBv
cnQvZGVxcF9raHJfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBf
c3VwcG9ydC9kZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4
IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9raHJfZ2xlczJf
dGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9k
ZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2Rl
cXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rl
c3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxh
cml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
a2hyX2dsZXMzMV90ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEv
c3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50
eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3RzL2RlcXBfc3Vw
cG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMv
dGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CmluZGV4IGUxMGQxMTJjODU1ZTAzZjY1Y2IyNDNmZjE2YzNkOWIyZWMwOWY2ODEuLjZmNmE3MmI5
YWI2ZGQ3MjI4N2Q4MmQ2Y2ZiMjA4MTEyMjdmNmE3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtNzMsNiArNzMs
OSBAQCBlbnVtIFNoU2hhZGVyT3V0cHV0CiAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wg
dG8gYmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVk
IHRvIE1ldGFsCiAgICAgLy8gbGF0ZXIuCiAgICAgU0hfR0xTTF9NRVRBTF9PVVRQVVQgPSAweDhC
NEMsCisKKyAgICAvLyBPdXRwdXQgZm9yIE1TTAorICAgIFNIX01TTF9NRVRBTF9PVVRQVVQgPSAw
eDhCNEQsCiB9OwogCiAvLyBDb21waWxlIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKaW5kZXggZmU1ZThh
YmRmMDYwNDFkNmMxM2I4MDNmYmJmYTM4OGQyOGNjZjVhMy4uOWEwYmVlMDM3YTg5ZjMxYzhkODU3
MWE1YzAxMzJjZjdmMDlmYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaApAQCAtMjcsNyArMjcsNyBAQCBzdHJ1
Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1
cHBvcnRzIGRlcHRoIHRleHR1cmUncyBmaWx0ZXJpbmcgb3RoZXIgdGhhbiBuZWFyZXN0IiwgJm1l
bWJlcnN9OwogCiAgICAgLy8gU3VwcG9ydCBleHBsaWNpdCBtZW1vcnkgYmFycmllcgotICAgIEZl
YXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXJf
bXRsIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgIEZlYXR1cmUgaGFzRXhw
bGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBleHBsaWNpdCBtZW1vcnkgYmFycmllciIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIFNvbWUgcmVuZGVyZXIgY2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFw
bHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgpAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgRmVh
dHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRz
IG5vbiB1bmlmb3JtIGNvbXB1dGUgc2hhZGVyIGRpc3BhdGNoJ3MgZ3JvdXAgc2l6ZSIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIGZyYWdtZW50IHN0ZW5jaWwgb3V0cHV0IHN1cHBvcnQKLSAgICBGZWF0
dXJlIGhhc1N0ZW5jaWxPdXRwdXQgPSB7Imhhc19zaGFkZXJfc3RlbmNpbF9vdXRwdXQiLCBGZWF0
dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0
ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMg
c3RlbmNpbCBvdXRwdXQgZnJvbSBmcmFnbWVudCBzaGFkZXIiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbWVtYmVyc307CiAKQEAgLTU5LDYgKzU5LDEwIEBAIHN0cnVjdCBGZWF0
dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgRmVhdHVyZSBoYXNFdmVudHMgPSB7Imhhc19t
dGxfZXZlbnRzIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZt
ZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxsb3dJbmxpbmVDb25zdFZlcnRleERhdGEgPSB7Cisg
ICAgICAgICJhbGxvd19pbmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgdXNpbmcgaW5s
aW5lIGNvbnN0YW50IGRhdGEgZm9yIHNtYWxsIGNsaWVudCB2ZXJ0ZXggZGF0YSIsICZtZW1iZXJz
fTsKKwogICAgIC8vIE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBh
cmUgbm90IHN1cHByb3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCiAgICAgLy8gdGhleSBh
cmUgc3VwcHJvdGVkOgogICAgIEZlYXR1cmUgYWxsb3dTZXBhcmF0ZWREZXB0aFN0ZW5jaWxCdWZm
ZXJzID0gewpAQCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNl
dEJhc2UKICAgICAgICAgIndoZXJlYXMgb3RoZXJzIHN1Y2ggYXMgbWFjT1MgZG9uJ3QiLAogICAg
ICAgICAmbWVtYmVyc307CiAKKyAgICBGZWF0dXJlIGFsbG93UnVudGltZVNhbXBsZXJDb21wYXJl
TW9kZSA9IHsKKyAgICAgICAgImFsbG93X3J1bnRpbWVfc2FtcGxlcl9jb21wYXJlX21vZGUiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3Vw
cG9ydHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAm
bWVtYmVyc307CisKKyAgICBGZWF0dXJlIGFsbG93U2FtcGxlckNvbXBhcmVHcmFkaWVudCA9IHsK
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVf
Y29tcGFyZSB3aXRoIGdyYWRpZW50cyIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dT
YW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1cmVD
YXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVfY29tcGFyZSB3aXRoIGxvZCIsICZt
ZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFsbG93X2J1
ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBidWZm
ZXIgcmVhZCAmIHdyaXRlIGluIHRoZSBzYW1lIHNoYWRlciIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbWVtYmVyc307CisKICAgICBGZWF0dXJlIGFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUgPSB7CiAgICAgICAgICJhbGxvd19tc2FhX3N0b3JlX2FuZF9yZXNv
bHZlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAiVGhlIHJlbmRl
cmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNhbWUgcGFzcyIsICZt
ZW1iZXJzfTsKQEAgLTc1LDE0ICs5NCwyNyBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJl
U2V0QmFzZQogICAgICAgICAiZ2VuX211bHRpcGxlX21pcHNfcGVyX3Bhc3MiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZ2Vu
ZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJlcnN9OwogCisgICAgRmVh
dHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhfYXNfdW5zdXBwb3J0
ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZvcm1hdCBhcyB1bnN1
cHBvcnRlZC4iLCAmbWVtYmVyc307CisKKyAgICBGZWF0dXJlIGJyZWFrUmVuZGVyUGFzc0lzQ2hl
YXAgPSB7ImJyZWFrX3JlbmRlcl9wYXNzX2lzX2NoZWFwIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRh
bEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJlYWtp
bmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24iLCAmbWVtYmVyc307CisKICAgICBG
ZWF0dXJlIGZvcmNlQnVmZmVyR1BVU3RvcmFnZSA9IHsKLSAgICAgICAgImZvcmNlX2J1ZmZlcl9n
cHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAg
ICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBib3RoIGJ1ZmZlcidzIG1lbW9yeSBhbGxvY2F0aW9u
IG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCi0gICAgICAgICJtYWNPUyksIGZv
cmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycy4iLAorICAgICAgICAi
Zm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVz
LAorICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBidWZmZXInIG1lbW9yeSBh
bGxvY2F0aW9uIG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCisgICAgICAgICJt
YWNPUyksIGZvcmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycyBldmVy
eXRpbWUgb3Igbm90LiIsCiAgICAgICAgICZtZW1iZXJzfTsKIAotICAgIEZlYXR1cmUgZm9yY2VE
MjRTOEFzVW5zdXBwb3J0ZWQgPSB7ImZvcmNlX2QyNHM4X2FzX3Vuc3VwcG9ydGVkIiwgRmVhdHVy
ZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkZvcmNlIERlcHRoMjRTdGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwg
Jm1lbWJlcnN9OworICAgIEZlYXR1cmUgZm9yY2VOb25DU0Jhc2VNaXBtYXBHZW5lcmF0aW9uID0g
eworICAgICAgICAiZm9yY2Vfbm9uX2NzX21pcG1hcF9nZW4iLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1l
dGFsRmVhdHVyZXMsCisgICAgICAgICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBD
b21wdXRlIFNoYWRlciBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgor
ICAgICAgICAiYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24gbWlnaHQgY2F1c2UgR1BVIGhhbmcgb24g
c29tZSBvbGRlciBpT1MgZGV2aWNlcy4iLAorICAgICAgICAmbWVtYmVyc307CisKKyAgICBGZWF0
dXJlIGVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjayA9IHsKKyAgICAgICAgImVtdWxhdGVfdHJhbnNm
b3JtX2ZlZWRiYWNrIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAi
VHVybiB0aGlzIG9uIHRvIGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBh
IDItcGFzcyBWUyBmb3IgR0xFUzMuIiwgJm1lbWJlcnN9OwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bv
b2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxv
Yy5jcHAKaW5kZXggMjdkZDkzMDVhOGI2MzRlMzM5OTM3ODMwNzkzNWY4YTJiOWQ3NjJiZi4uM2Jk
Y2MzMDBhMWQ2ZTY3NzVjMWQyOGMyMTg3Mjk3MGZhZWY2OTU0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcApAQCAtMzM1LDcgKzMzNSw3
IEBAIHZvaWQgUG9vbEFsbG9jYXRvcjo6dW5sb2NrKCkKIHZvaWQgQWxsb2NhdGlvbjo6Y2hlY2tB
bGxvY0xpc3QoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQWxsb2NhdGlvbiAqYWxsb2MgPSB0
aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5tUHJldkFsbG9jKQotICAgICAgICBhbGxv
Yy0+Y2hlY2soKTsKKyAgICAgICAgYWxsb2MtPmNoZWNrQWxsb2MoKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuaAppbmRleCA2OTI5OTJjNDM0M2Q4Y2EwMjNiYjBlNzQzZTViNDg5ZjYzYmMxYzc4Li5j
ZDI2NmEwM2JjNTYyMWI4NzIyOWM1YWU3ZDdkYTBiNjI5ZjliNjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmgKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgQWxsb2NhdGlvbgogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjaGVjaygpIGNvbnN0
CisgICAgdm9pZCBjaGVja0FsbG9jKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrR3VhcmRC
bG9jayhwcmVHdWFyZCgpLCBrR3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CiAgICAgICAg
IGNoZWNrR3VhcmRCbG9jayhwb3N0R3VhcmQoKSwga0d1YXJkQmxvY2tFbmRWYWwsICJhZnRlciIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBsZV9w
bGF0Zm9ybV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCmluZGV4IDU1ZWJiN2E4YWU1NzliMmNmYThkM2M1Y2YxYmU3OThk
ZTViODIwMmUuLjgzYWI1MzI2YzU1MGRmZDZkZGRhM2JkMmI4OTRhNTNlNmJjMzMyZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYXBwbGVfcGxhdGZvcm1f
dXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3Bs
YXRmb3JtX3V0aWxzLmgKQEAgLTE1LDI0ICsxNSwzMiBAQAogCiAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1Qgb25seSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CiAKKyNpZiBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBv
ZiB0aGUgMyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCiAvLyBh
dmFpbGFibGU6Ci0jaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAjICAgIGRlZmluZSBBTkdMRV9B
UFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAogICAg
ICAgICBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgbWFjQ2F0YWx5c3QgbWFjQ2F0YWx5c3RWZXIs
IGlPUyBpT1NWZXIsICopCiAvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVp
dGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKIC8v
IGF2YWlsYWJsZToKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIs
IG1hY0NhdGFseXN0VmVyKSBcCiAgICAgICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWND
YXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgKikKKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9DSTog
Y2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4gdmVy
aW9ucyBpcworLy8gYXZhaWxhYmxlOgorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxF
X0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIFwKKyAgICAgICAgQGF2YWlsYWJsZShtYWNDYXRh
bHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKICNlbHNlCiAjICAgIGRlZmluZSBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1Zlcikg
XAogICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpCi0vLyBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9y
bXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKLS8vIGF2YWlsYWJsZToKKwogIyAgICBk
ZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIpIEBh
dmFpbGFibGUobWFjT1MgbWFjVmVyLCAqKQorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZP
UyBpT1NWZXIsICopCiAjZW5kaWYKIAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJOiBjaGVj
ayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1zIChPU1gvaU9TKSBtaW4gdmVyaW9ucyBpcyBh
dmFpbGFibGU6Ci0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1Zl
cikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsICopCisjZGVmaW5lIEFOR0xF
X0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1ZlcikgXAorICAgIEBhdmFpbGFibGUobWFj
T1MgbWFjVmVyLCBpT1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKworLy8gQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX0k6IGNoZWNrIGlmIGEgcGFydGljdWxhciBpT1MgdmVyc2lvbiBpcyBhdmFpbGFi
bGUKKyNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koaU9TVmVyKSBAYXZhaWxhYmxlKGlP
UyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAqKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vZGVidWcuaAppbmRleCBlMDAzN2E0ZTJjYjg2Yjg1NzMzN2I3NWFmM2Vk
ZjdlN2U0NzNlNjMyLi4yODE3MGE1ZDc3ZTY2NjViOTZlYjgzZmY2ZGJjYzJiYmUzNGIwN2M4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0zMTMsMTAg
KzMxMywxNiBAQCBzdGQ6Om9zdHJlYW0gJkZtdEhleChzdGQ6Om9zdHJlYW0gJm9zLCBUIHZhbHVl
KQogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWls
dXJlcyB0byB0aGUgZGVidWcgbG9nCiAjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykK
LSMgICAgZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChleHByZXNz
aW9uID8gc3RhdGljX2Nhc3Q8dm9pZD4oMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8
ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9fRlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklM
RV9fIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiIgPDwgX19MSU5FX18g
PDwgIik6ICIgPDwgI2V4cHJlc3Npb24pKQorIyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24p
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgaWYgKCEoZXhwcmVzc2lvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBfX2J1aWx0aW5fZGVidWd0cmFwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpbnQgeCA9
IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBjYWxsIHNpdGUu
ICovIFwKKyAgICAgICAgICAgICh2b2lkKXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlIChmYWxzZSkK
ICNlbHNlCiAjICAgIGRlZmluZSBBU1NFUlQoY29uZGl0aW9uKSBBTkdMRV9FQVRfU1RSRUFNX1BB
UkFNRVRFUlMgPDwgIShjb25kaXRpb24pCiAjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfRU5BQkxF
X0FTU0VSVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L3BsYXRmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3Jt
LmgKaW5kZXggNjI2ZGI0MWQ5MmMxNjFlMzJmMWJjZmVhYjc1OTZmNGVmMzBjZGFiMC4uNDFmM2Nm
NGZmNzgzOWZkNjhmMzQ5MjZjMzU5MzIxYTY3YTk5MWQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vcGxhdGZvcm0uaApAQCAtMTMyLDExICsxMzIsMTYgQEAKICMg
ICAgaWYgZGVmaW5lZChfX2FybTY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAjICAgICAg
ICBkZWZpbmUgQU5HTEVfQ1BVX0FSTTY0IDEKICMgICAgZW5kaWYKLS8vIEVBR0wgc2hvdWxkIGJl
IGVuYWJsZWQgb24gaU9TLCBidXQgbm90IE1hYyBDYXRhbHlzdCB1bmxlc3MgaXQgaXMgcnVubmlu
ZyBvbiBBcHBsZSBTaWxpY29uLgorIyAgICAvLyBFQUdMIHNob3VsZCBiZSBlbmFibGVkIG9uIGlP
UywgYnV0IG5vdCBNYWMgQ2F0YWx5c3QgdW5sZXNzIGl0IGlzIHJ1bm5pbmcgb24gQXBwbGUgU2ls
aWNvbi4KICMgICAgaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKICAgICAgICAgKGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKICMgICAg
ICAgIGRlZmluZSBBTkdMRV9FTkFCTEVfRUFHTAogIyAgICBlbmRpZgorIyAgICAvLyBJZGVudGlm
eSBNZXRhbCBBUEkgPj0gd2hhdCBzaGlwcGVkIG9uIG1hY09TIENhdGFsaW5hLgorIyAgICBpZiAo
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9B
TExPV0VEID49IDEwMTUwMCkgfHwgXAorICAgICAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQorIyAgICAg
ICAgZGVmaW5lIEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSSAxCisjICAgIGVuZGlmCiAjZW5k
aWYKIAogLy8gRGVmaW5lIEFOR0xFX1dJVEhfQVNBTiBtYWNyby4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMzZiZWE0MjUxM2MyZGQyODVjZDg4MmFkYjhjMGViNjE0NDI0M2VmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNf
aW9zLm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHN5c3RlbV91dGlsc19pb3Mu
bW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorCisj
aW5jbHVkZSAic3lzdGVtX3V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1
ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoLW8vZHlsZC5o
PgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+Cisj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgYW5nbGUKK3sK
K3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKCkKK3sKKworICAgIE5TU3RyaW5nICpleGVj
dXRhYmxlU3RyaW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07Cisg
ICAgc3RkOjpzdHJpbmcgcmVzdWx0KFtleGVjdXRhYmxlU3RyaW5nIFVURjhTdHJpbmddKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5
KCkKK3sKKyAgICBzdGQ6OnN0cmluZyBleGVjdXRhYmxlUGF0aCA9IEdldEV4ZWN1dGFibGVQYXRo
KCk7CisgICAgc2l6ZV90IGxhc3RQYXRoU2VwTG9jICAgICAgPSBleGVjdXRhYmxlUGF0aC5maW5k
X2xhc3Rfb2YoIi8iKTsKKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5n
OjpucG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsK
K30KKworY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCit7CisgICAgcmV0
dXJuICJkeWxpYiI7Cit9CisKK2RvdWJsZSBHZXRDdXJyZW50VGltZSgpCit7CisgICAgbWFjaF90
aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZv
KCZ0aW1lYmFzZUluZm8pOworCisgICAgZG91YmxlIHNlY29uZENvZWZmID0gdGltZWJhc2VJbmZv
Lm51bWVyICogMWUtOSAvIHRpbWViYXNlSW5mby5kZW5vbTsKKyAgICByZXR1cm4gc2Vjb25kQ29l
ZmYgKiBtYWNoX2Fic29sdXRlX3RpbWUoKTsKK30KK30gIC8vIG5hbWVzcGFjZSBhbmdsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCmluZGV4
IDYzYjNhNTljZGY5MWI5MGEwZDA4MjNlN2RjMmRhZTI3YjY4ODRjYjMuLmQwOWUyNzAwODI5ODk3
ZmZkYjI0YWQ1Y2E1YjhiOWQzODU5ZTVlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKQEAgLTYsMTEgKzYsNiBAQAogCiAvLyB1dGls
aXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5l
cy4KIAotLy8gT2xkZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRo
aXMgd2FybmluZyBoZXJlLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSNlbmRpZgotCiAjaW5j
bHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdMRVMzL2dsMy5oIgogI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgpAQCAtNDc2LDYgKzQ3MSw1MCBAQCBpbnQgVmFyaWFibGVD
b2x1bW5Db3VudChHTGVudW0gdHlwZSkKIAogICAgIHJldHVybiAwOwogfQorLyoqCitEZXRlcm1p
bmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGUgc2xvdHMgdXNlZCBieSBhIHZhcmlhYmxlIHR5cGUK
KyovCitpbnQgVmFyaWFibGVBdHRyaWJ1dGVDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6Cisg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Cisg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyeDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzeDQ6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0eDM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGJvb2wg
SXNTYW1wbGVyVHlwZShHTGVudW0gdHlwZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCmluZGV4IDBjN2Q4MTFhNDZlZGU4YzY2NzA1NzBkMzJj
MjczNDZiY2IxMThjMWEuLmJhNjkzYTI3YWExM2U1YTJmYzM2NDZmMzU0YTkyNTNlMjk0YjYzOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVz
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaApA
QCAtMzcsNiArMzcsNyBAQCBzaXplX3QgVmFyaWFibGVJbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUp
Owogc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJs
ZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0
eXBlKTsKK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKTsKIGJvb2wgSXNT
YW1wbGVyVHlwZShHTGVudW0gdHlwZSk7CiBib29sIElzU2FtcGxlckN1YmVUeXBlKEdMZW51bSB0
eXBlKTsKIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAppbmRleCBhNDQ0NDk5NjVjMDVhZWQ5YzI1NDJhNDA4MWNiMDU3MWYwYWJmNTBhLi5jYWM5ZjQ5
OTRiNzE5ZjgyMWY5MDA1ZDdmZTFkOTYyODAyYzZlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cApAQCAtMjEsOCArMjEsMTEgQEAKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX1ZVTEtBTgogCiAj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCi0jICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAor
I2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVU
QUxfU1BJUlYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgogCkBAIC02
NCwxMSArNjcsMTcgQEAgVENvbXBpbGVyICpDb25zdHJ1Y3RDb21waWxlcihzaDo6R0xlbnVtIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dAogICAgIH0KICNlbmRpZiAgLy8g
QU5HTEVfRU5BQkxFX1ZVTEtBTgogCi0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisjaWZkZWYg
QU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCiAgICAgaWYgKElzT3V0cHV0TWV0YWwob3V0cHV0KSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvck1ldGFsKHR5cGUsIHNwZWMpOwog
ICAgIH0KKyNlbmRpZgorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIGlmIChJc091dHB1
dE1ldGFsRGlyZWN0KG91dHB1dCkpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0
b3JNZXRhbERpcmVjdCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgIH0KICNlbmRpZiAgLy8gQU5H
TEVfRU5BQkxFX01FVEFMCiAKICAgICAvLyBVbnN1cHBvcnRlZCBjb21waWxlciBvciB1bmtub3du
IGZvcm1hdC4gUmV0dXJuIG51bGxwdHIgcGVyIHRoZSBzaDo6Q29uc3RydWN0Q29tcGlsZXIgQVBJ
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAppbmRleCA4MzVjOTBhMzU3MmMxMzU4MmFmNTI0YWY5NjlkYWFlMTBj
OWUxODBmLi4xYzA5Y2RhYTgyMTJjM2UxNzc4MDM5MDhmNDdmYTQwMmZjNjkzNzAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaApAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgVFNvdXJjZUxvYwogICAgIGludCBs
YXN0X2xpbmU7CiB9OwogCitjb25zdGV4cHIgVFNvdXJjZUxvYyBrTm9Tb3VyY2VMb2N7LTEsIC0x
LCAtMSwgLTF9OworCiAvLwogLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFz
ZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCiAvLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwCmluZGV4IDM0ZDhlMTIxYjZiN2M0YTlmMDEwNGJiYzdkZGVlNDgwNmU0NGYyODIu
LjkzMTZlMmU1MWE3ZTY3MjA4MmQ1MDMxMDgzMjhmMGM1MWJmNGE2MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBib29sIFRDb21waWxlcjo6Y2hlY2tBbmRT
aW1wbGlmeUFTVChUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
bnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZF
Q19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0
cnVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgdW5zaWdu
ZWQgaW50IHNpbXBsaWZ5U2NhbGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUkla
RV9WRUNfQU5EX01BVF9DT05TVFJVQ1RPUl9BUkdTKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVk
VmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAwOwogCiAgICAgLy8gU3BsaXQgbXVsdGkgZGVjbGFyYXRpb25zIGFuZCByZW1vdmUg
Y2FsbHMgdG8gYXJyYXkgbGVuZ3RoKCkuCiAgICAgLy8gTm90ZSB0aGF0IFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMgbmVlZHMgdG8gYmUgcnVuIGJlZm9yZSBhbnkgb3RoZXIgQVNUIHRyYW5zZm9ybWF0
aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgKaW5kZXggZDBiMjRiYWEzZTc3NjU5MzdhMjQxN2NkMzlk
ZGFlNTIwODk4NjlkMC4uMDQzZGRkNWFkY2NlODFkMDM5NTBjNGI0MzFmYzA2NjA1OTZhMTY5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oCkBAIC0zNSw2ICszNSw5IEBAIGNsYXNzIFRQYXJzZUNvbnRl
eHQ7CiAjaWZkZWYgQU5HTEVfRU5BQkxFX0hMU0wKIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogI2Vu
ZGlmICAvLyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorY2xh
c3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwK
IAogLy8KIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2hhZGVyIHR5cGUgaXMg
R0xTTC4KQEAgLTYzLDYgKzY2LDkgQEAgY2xhc3MgVFNoSGFuZGxlQmFzZQogI2lmZGVmIEFOR0xF
X0VOQUJMRV9ITFNMCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9y
SExTTCgpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKyNpZmRl
ZiBBTkdMRV9FTkFCTEVfTUVUQUwKKyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAq
Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9NRVRBTAogCiAgIHByb3RlY3RlZDoKICAgICAvLyBNZW1vcnkgYWxs
b2NhdG9yLiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBp
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAppbmRleCAwMzM1MTcxNTAxZjY2
YTdjZWEwNmE3NWY3MWRkZjJhMDUxNDdiMjQ2Li4xMDRhZmZiYWViNzNlMTZhODhkNjBkZGQyMjQx
NDM4YzczMTM5YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcApAQCAtNjcs
MTEgKzY3LDE1IEBAIGJvb2wgSXNWYWxpZFNoaWZ0T2Zmc2V0KGNvbnN0IFRDb25zdGFudFVuaW9u
ICZyaHMpCiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotVENvbnN0YW50VW5pb246OlRD
b25zdGFudFVuaW9uKCkKLXsKLSAgICBpQ29uc3QgPSAwOwotICAgIHR5cGUgICA9IEVidFZvaWQ7
Ci19CitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKSA6IGlDb25zdCgwKSwgdHlwZShF
YnRWb2lkKSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNv
bnN0KGkpLCB0eXBlKEVidEludCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9u
KHVuc2lnbmVkIGludCB1KSA6IHVDb25zdCh1KSwgdHlwZShFYnRVSW50KSB7fQorCitUQ29uc3Rh
bnRVbmlvbjo6VENvbnN0YW50VW5pb24oZmxvYXQgZikgOiBmQ29uc3QoZiksIHR5cGUoRWJ0Rmxv
YXQpIHt9CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0
KGIpLCB0eXBlKEVidEJvb2wpIHt9CiAKIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkg
Y29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAppbmRleCBhNjIzZDY1ZmIxZDU0
NTdhMjlkNzgyZTNkMTNiMDgxODQ4YjJiMGFkLi5kZjUzODU3ZGQzYmY0YjQ4ZmJhYjY1ZWI0ZmVi
MWUwNDU4NjEzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0yMCw2ICsy
MCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgogICBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURQogICAgIFRDb25zdGFudFVuaW9uKCk7CisgICAgVENvbnN0YW50VW5pb24o
aW50IGkpOworICAgIFRDb25zdGFudFVuaW9uKHVuc2lnbmVkIGludCB1KTsKKyAgICBUQ29uc3Rh
bnRVbmlvbihmbG9hdCBmKTsKKyAgICBUQ29uc3RhbnRVbmlvbihib29sIGIpOwogCiAgICAgYm9v
bCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gJmNvbnN0YW50
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtTm9kZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAppbmRleCBiYmRmODY2M2IwNzAxMGVlNjA0
MWVlMDkzODljOTkxYzZmMTU0MDQ1Li41MTM2ZDIwNjhmNzU0MTdkYTFhMTlmYzNjMTk2MGE1Mjcz
OGE3YzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBU
UHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24g
cmlnaHQpCiBUQ29uc3RhbnRVbmlvbiAqVmVjdG9yaXplKGNvbnN0IFRDb25zdGFudFVuaW9uICZj
b25zdGFudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24g
PSBuZXcgVENvbnN0YW50VW5pb25bc2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIGNvbnN0VW5pb25baV0gPSBjb25zdGFudDsKIAogICAgIHJldHVybiBjb25zdFVuaW9u
OwpAQCAtNDE1LDYgKzQxNSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBU
SW50ZXJtQmxvY2sgJm5vZGUpCiAgICAgfQogfQogCitUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9j
ayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCit7CisgICAgZm9y
IChUSW50ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kU3RhdGVt
ZW50KHN0bXQpOworICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3Vu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZW1lbnRzLnNpemUoKTsKQEAgLTQ0Niw2ICs0
NTQsMzcgQEAgYm9vbCBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUo
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAq
dmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQoreworICAgIGlmIChpbml0RXhwcikKKyAgICB7
CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IoCisgICAgICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsIG5ldyBUSW50ZXJtU3ltYm9sKHZhciksIGluaXRF
eHByKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246
OlRJbnRlcm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxl
ICo+IGRlY2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8gKmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2woZCkpOworICAgIH0KK30KKworVEludGVybURlY2xhcmF0aW9uOjpU
SW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBk
ZWNsYXJhdG9ycykKKyAgICA6IFRJbnRlcm1EZWNsYXJhdGlvbigpCit7CisgICAgZm9yIChhdXRv
ICpkIDogZGVjbGFyYXRvcnMpCisgICAgeworICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOwor
ICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1EZWNsYXJhdGlvbjo6Z2V0Q2hpbGRDb3VudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CkBAIC00NjMsOSArNTAyLDEw
IEBAIGJvb2wgVEludGVybURlY2xhcmF0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlCiAKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1O
b2RlICpyZXBsYWNlbWVudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZ2V0U2Vx
dWVuY2UoKS0+c2l6ZSgpOyArK2lpKQorICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOwor
ICAgIGZvciAoYXV0byAqJm5vZGUgOiBzZXEpCiAgICAgewotICAgICAgICBSRVBMQUNFX0lGX0lT
KCgqZ2V0U2VxdWVuY2UoKSlbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKKyAgICAgICAgUkVQTEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDczLDEyICs1MTMs
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZUludGVybmFs
KFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGUKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgJnJlcGxhY2VtZW50cykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBn
ZXRTZXF1ZW5jZSgpLT5iZWdpbigpOyBpdCA8IGdldFNlcXVlbmNlKCktPmVuZCgpOyArK2l0KQor
ICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZvciAoYXV0byBpdCA9IHNlcS5i
ZWdpbigpOyBpdCA8IHNlcS5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGlmICgqaXQgPT0g
b3JpZ2luYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGl0ID0gZ2V0U2VxdWVuY2UoKS0+ZXJh
c2UoaXQpOwotICAgICAgICAgICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCByZXBsYWNlbWVu
dHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAgICAgICAgICAgIGl0ID0gc2VxLmVy
YXNlKGl0KTsKKyAgICAgICAgICAgIHNlcS5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigp
LCByZXBsYWNlbWVudHMuZW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkBAIC00ODgsMTIgKzUyOSwxMyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNl
OjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwKIGJv
b2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6Omluc2VydENoaWxkTm9kZXMoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKIHsKLSAgICBpZiAo
cG9zaXRpb24gPiBnZXRTZXF1ZW5jZSgpLT5zaXplKCkpCisgICAgYXV0byAmc2VxID0gKmdldFNl
cXVlbmNlKCk7CisgICAgaWYgKHBvc2l0aW9uID4gc2VxLnNpemUoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2lu
KCkgKyBwb3NpdGlvbjsKLSAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIGluc2VydGlvbnMu
YmVnaW4oKSwgaW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgYXV0byBpdCA9IHNlcS5iZWdpbigpICsg
cG9zaXRpb247CisgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRp
b25zLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA0MCw4ICsxMDgyLDggQEAg
VEludGVybUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRl
ICZub2RlKQogCiBUSW50ZXJtQWdncmVnYXRlICpUSW50ZXJtQWdncmVnYXRlOjpzaGFsbG93Q29w
eSgpIGNvbnN0CiB7Ci0gICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxID0gbmV3IFRJbnRlcm1T
ZXF1ZW5jZSgpOwotICAgIGNvcHlTZXEtPmluc2VydChjb3B5U2VxLT5iZWdpbigpLCBnZXRTZXF1
ZW5jZSgpLT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgpLT5lbmQoKSk7CisgICAgYXV0byAmc2VxICAg
ICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKmNv
cHlTZXEgICA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uoc2VxLmJlZ2luKCksIHNlcS5lbmQoKSk7CiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqY29weU5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShtRnVu
Y3Rpb24sIG1UeXBlLCBtT3AsIGNvcHlTZXEpOwogICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5l
KTsKICAgICByZXR1cm4gY29weU5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKaW5kZXggMzY0
Mzg0N2Y2OGFhZWE2NTBiZGViZjI2ZjNkZDdkMjg3MmI0MDFhMC4uM2I2Zjg3MmMyM2ZmNjVkNmEy
NGFhZWVhMzQyNmVlZmU1Y2UxYThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaApAQCAtNjc0
LDYgKzY3NCw3IEBAIGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVi
bGljIFRJbnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoKICAgICBUSW50ZXJtQmxvY2so
KSA6IFRJbnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJtQmxvY2soc3RkOjppbml0aWFsaXplcl9s
aXN0PFRJbnRlcm1Ob2RlICo+IHN0bXRzKTsKICAgICB+VEludGVybUJsb2NrKCkgb3ZlcnJpZGUg
e30KIAogICAgIFRJbnRlcm1CbG9jayAqZ2V0QXNCbG9jaygpIG92ZXJyaWRlIHsgcmV0dXJuIHRo
aXM7IH0KQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJs
aWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJtQWdncmVnYXRlQmFzZQogewogICBwdWJsaWM6
CiAgICAgVEludGVybURlY2xhcmF0aW9uKCkgOiBUSW50ZXJtTm9kZSgpIHt9CisgICAgVEludGVy
bURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHBy
KTsKKyAgICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRW
YXJpYWJsZSAqPiBkZWNsYXJhdG9ycyk7CisgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpOwogICAgIH5USW50ZXJt
RGVjbGFyYXRpb24oKSBvdmVycmlkZSB7fQogCiAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRB
c0RlY2xhcmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuY3BwCmluZGV4IGQwMzg5YWY0M2Y1ZjFhMTRmMjRjZTVmM2FmOWRhOTZmYjhiN2I4YWMuLmZl
MmUxOWI5MTQwNzM4MmNhNmE2ODA4YmMzZjZmZWI5OTVmZWU1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmNwcApAQCAtMTk2LDcgKzE5Niw4IEBAIHZvaWQgVEZ1bmN0aW9uOjpzaGFyZVBhcmFtZXRlcnMo
Y29uc3QgVEZ1bmN0aW9uICZwYXJhbWV0ZXJzU291cmNlKQogCiBJbW11dGFibGVTdHJpbmcgVEZ1
bmN0aW9uOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBzdGQ6OnN0cmluZyBuZXdO
YW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisgICAgSW1tdXRhYmxlU3RyaW5n
IG5hbWUgPSB0aGlzLT5uYW1lKCk7CisgICAgc3RkOjpzdHJpbmcgbmV3TmFtZShuYW1lLmRhdGEo
KSwgbmFtZS5sZW5ndGgoKSk7CiAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVkTmFtZVNl
cGFyYXRvcjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbC5oCmluZGV4IGI5Y2Y5MDg5NGU2ZThlM2FiMmM2MjZiMzU5NDE2YzM2YTk2
ZmM0MmYuLjBhYmIxZDQxMTAxMzMyOThkZWEyYmJkM2IyMGUwMDE0MmZlZTg1MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5oCkBAIC0yMjIsNyArMjIyLDcgQEAgY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRT
eW1ib2wKICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9
CiAKICAgICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBp
c0RlZmluZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSBjb25z
dCB7IHJldHVybiBkZWZpbmVkOyB9CiAgICAgdm9pZCBzZXRIYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpIHsgbUhhc1Byb3RvdHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzUHJv
dG90eXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtSGFzUHJvdG90eXBlRGVjbGFyYXRp
b247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dl
bi5jcHAKaW5kZXggN2U4NDU4ZWM5OTlhMTAyZmJiZTdhYWE4NzEyYzNhMTA2M2FlYmQxYy4uZTlk
MWI3MzJlNDU5ZGEzYjE4YjM4MzM1NzY0NDljNDk4MTZmNWVjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNT
TF9hdXRvZ2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwCkBAIC0zNTY4LDcgKzM1Njgs
NyBAQCBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMTBGMTBGMTBGWzNdID0geyZCdWlsdElu
VmFyaWFibGU6OmtwdDEwRiwgJkJ1aWx0SW5WYQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEZ9OwogY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSAqcDIwQjAwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIs
ICZCdWlsdEluVmFyaWFibGU6OmtwdDAwQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCfTsKLWNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEIwMERbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAm
QnVpbHRJblZhcmlhYmxlOjprcHQwMER9OworY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIw
QjAwRFsyXSAgICAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFyaWFi
bGU6OmtwdDAwRH07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBCMDBIWzJdICAgID0g
eyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBIfTsKIGNv
bnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAyMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJs
ZTo6a3B0MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRW
YXJpYWJsZSAqcDIwQjIwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWls
dEluVmFyaWFibGU6OmtwdDIwQiwKQEAgLTM2MDksNyArMzYwOSw3IEBAIGNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEYyMEYyMEZbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBGLCAm
QnVpbHRJblZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZC
dWlsdEluVmFyaWFibGU6OmtwdDIwRn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBC
MDBCMDBCWzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MDBCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVp
bHRJblZhcmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjAw
RFsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFibGU6Omtw
dDAwRH07Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBEWzJdICAgICAgID0geyZC
dWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBEfTsKIGNvbnN0
ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSAqcDMwQjIwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdElu
VmFyaWFibGU6OmtwdDIwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMzBCMDBC
WzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBC
LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKaW5kZXggYTFmY2Y4YzlmMTU1
ZTFjZGRjNzg5NmQ4Yjk0MTczNmEzOTZhODRlNi4uZWE1NjZiMTUzNmIwY2YyNTVhYTE5MjJlNTE4
YTk2M2UwZWIyNmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCkBA
IC00MSw4ICs0MSwxNCBAQCBjb25zdCBjaGFyIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25z
dE5hbWVbXSA9ICJBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCI7CiBuYW1lc3BhY2UKIHsKIAorY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3RO
YW1lID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7
Citjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCIpOwogY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFi
bGVTdHJpbmcoImNvdmVyYWdlTWFzayIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11
SW5zdGFuY2VJREZpZWxkICAgICAgPSBJbW11dGFibGVTdHJpbmcoImVtdWxhdGVkSW5zdGFuY2VJ
RCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUg
PSBJbW11dGFibGVTdHJpbmcoIkFOR0xFV3JpdGVTYW1wbGVNYXNrIik7Citjb25zdGV4cHIgSW1t
dXRhYmxlU3RyaW5nIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVEaXNjYXJkV3JhcHBlciIpOwogCiBUSW50ZXJtQmluYXJ5ICpDcmVhdGVEcml2ZXJVbmlm
b3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMsIGNvbnN0IGNoYXIgKmZpZWxk
TmFtZSkKIHsKQEAgLTg2LDYgKzkyLDIxIEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRW
ZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAqY29tCiAgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoY29tcGlsZXIsIHJvb3QsIGFzc2lnbm1lbnQsIHN5
bWJvbFRhYmxlKTsKIH0KIAorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlE
KFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcykKK3sK
KyAgICAvLyBlbXVJbnN0YW5jZUlECisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9
CisgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0
YW5jZUlERmllbGQuZGF0YSgpKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2Ug
dG8gImdsX0luc3RhbmNlSW5kZXgiCisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisKKyAgICByZXR1cm4gUmVwbGFj
ZVZhcmlhYmxlV2l0aFR5cGVkKGNvbXBpbGVyLCByb290LCBpbnN0YW5jZUlELCBlbXVJbnN0YW5j
ZUlEKTsKK30KKwogLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgogQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAqcm9v
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlLApAQCAtMTIzLDYgKzE0NCwxOCBAQCBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgSW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290LAogCiB9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKKy8qKiBzdGF0aWMgKi8KK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0
dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKworLyoqIHN0YXRp
YyAqLworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKwogVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9y
TWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVs
a2FuKHR5cGUsIHNwZWMpCiB7fQogCkBAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0
b3JNZXRhbDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICB7CiAgICAgICAgIGF1
dG8gbmVnRmxpcFkgPSBnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMp
OwogCisgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgICAgIGlmICghRW11bGF0ZUlu
c3RhbmNlSUQodGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGRyaXZlclVuaWZvcm1zKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKwogICAgICAgICAvLyBBcHBlbmQgZ2xfUG9zaXRpb24ueSBjb3JyZWN0
aW9uIHRvIG1haW4KICAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3Jy
ZWN0aW9uVG9NYWluKHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBuZWdGbGlwWSkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIEluc2VydCByYXN0ZXJpemVyIGRpc2NhcmQgbG9naWMKLSAgICAgICAgaWYgKCFpbnNlcnRS
YXN0ZXJpemVyRGlzY2FyZExvZ2ljKHJvb3QpKQorICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXph
dGlvbiBkaXNjYXJkIGxvZ2ljCisgICAgICAgIGlmICghaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2Nh
cmRMb2dpYyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRz
IHRvIGF2b2lkIHNwaXJ2LWNyb3NzIGRlYWQtY29kZSByZW1vdmluZyB0aGVtIGluIGxhdGVyCisg
ICAgLy8gc3RhZ2UuIE9ubHkgZG8gdGhpcyBpZiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgaXMg
bm90IHNwZWNpZmllZC4KKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorICAg
ICAgICAhKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTKSkKKyAgICB7
CisgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKyAgICAgICAgZm9yIChjb25zdCBzaDo6
U2hhZGVyVmFyaWFibGUgJnZhciA6IG1PdXRwdXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCF2YXIuYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxp
c3QucHVzaF9iYWNrKHZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAg
ICAgeworICAgICAgICAvLyBGb3Igbm9uIHZvaWQgTVNMIGZyYWdtZW50IGZ1bmN0aW9ucyByZXBs
YWNlIGRpc2NhcmQKKyAgICAgICAgLy8gd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAgICAg
ICAgaWYgKG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFyZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKHJvb3QpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBpZiAoIWluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMocm9vdCwgZHJpdmVyVW5p
Zm9ybXMpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzUsNiAr
MzA2LDEzIEBAIHZvaWQgVHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NE
cml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGCiAgICAgVEZpZWxkICpjb3ZlcmFnZU1h
c2tGaWVsZCA9CiAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJh
Z2VNYXNrRmllbGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAg
ICAgZmllbGRzT3V0LT5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1F
bXVsYXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURG
aWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNl
TG9jKCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAgICAgICBmaWVsZHNPdXQtPnB1
c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KIH0KIAogLy8gQWRkIHNhbXBsZV9t
YXNrIHdyaXRpbmcgdG8gbWFpbiwgZ3VhcmRlZCBieSB0aGUgc3BlY2lhbGl6YXRpb24gY29uc3Rh
bnQKQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9y
TWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0
dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7
CiB9CiAKLUFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2VydFJhc3Rl
cml6ZXJEaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KQorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFRyYW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50
ZXJtQmxvY2sgKnJvb3QpCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmc2luayAgICAgICA9IGdldElu
Zm9TaW5rKCkub2JqOwogICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9s
VGFibGUoKTsKIAogICAgIC8vIEluc2VydCByYXN0ZXJpemF0aW9uRGlzYWJsZWQgc3BlY2lhbGl6
YXRpb24gY29uc3RhbnQuCi0gICAgc2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25z
dCBib29sICIgPDwgbXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lOworICAg
IHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJp
emF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CiAgICAgc2luayA8PCAiID0gZmFsc2U7XG4i
OwogCi0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgdmFy
aWFibGUgcmVmZXJlbmNlLgorICAgIC8vIENyZWF0ZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lIGFuZCBrUmFzdGVyaXphdGlvbkRpc2NhcmRGdW5jTmFtZSB2YXJpYWJsZQor
ICAgIC8vIHJlZmVyZW5jZXMuCiAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJv
b2wpOwogICAgIGJvb2xUeXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgIFRWYXJpYWJs
ZSAqZGlzY2FyZEVuYWJsZWRWYXIgPQotICAgICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxl
LCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFyaWFibGUo
c3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbFR5cGUsIFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwogCiAgICAgLy8gSW5zZXJ0IHRoaXMgY29kZSB0byB0
aGUgZW5kIG9mIG1haW4oKQotICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCkKKyAg
ICAvLyBpZiAoQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQpCiAgICAgLy8gewogICAgIC8vICAg
ICAgZ2xfUG9zaXRpb24gPSB2ZWM0KC0zLjAsIC0zLjAsIC0zLjAsIDEuMCk7CiAgICAgLy8gfQpA
QCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFs
OjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jawogICAgIHJldHVybiBS
dW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwogfQog
CisvLyBJZiB0aGUgTVNMIGZyYWdtZW50IHNoYWRlciBpcyBub24tdm9pZCwgd2UgbmVlZCB0byBl
bnN1cmUKKy8vIHRoYXQgdGhlcmUgaXMgYSByZXR1cm4gYXQgdGhlIGVuZC4gVGhlIE1TTCBjb21w
aWxlcgorLy8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwg
ZXZlbiBpZiBhbGwKKy8vIHBhdGhzIGxlYWQgdG8gZGlzY2FyZF9mcmFnbWVudCgpLiBTbyB3cmFw
IGRpc2NhcmQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uLgorLy8gRml4ZXMgZEVRUC1HTEVTMy5mdW5j
dGlvbmFsLnNoYWRlcnMuZGlzY2FyZC5iYXNpY19hbHdheXMKK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBUcmFuc2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2Nr
ICpyb290KQoreworICAgIC8vIGJlZm9yZQorICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKyAgICAv
LyB7CisgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworICAgIC8vICAgICBkaXNjYXJkOwor
ICAgIC8vIH0KKworICAgIC8vIGFmdGVyCisgICAgLy8gdm9pZCBBTkdMRURpc2NhcmRXcmFwcGVy
KCkKKyAgICAvLyB7CisgICAgLy8gICAgZGlzY2FyZDsKKyAgICAvLyB9CisgICAgLy8gdm9pZCBt
YWluICh2b2lkKQorICAgIC8vIHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAg
Ly8gICAgIEFOR0xFRGlzY2FyZFdyYXBwZXIoKTsKKyAgICAvLyB9CisKKyAgICBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICptYWluICAgPSBGaW5kTWFpbihyb290KTsKKyAgICBUSW50ZXJtQmxv
Y2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisgICAgVEludGVybVNl
cXVlbmNlICpmdW5jdGlvblNlcXVlbmNlID0gbWFpbkJvZHktPmdldFNlcXVlbmNlKCk7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSAqZGlzY2FyZEZ1bmMgICAgID0gbnVsbHB0cjsKKyAgICAvLyBJdGVy
YXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1
c2VzCisgICAgLy8gb2YgZGlzY2FyZCB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKS4KKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZnVuY3Rpb25TZXF1ZW5jZS0+c2l6ZSgpOyAr
K2luZGV4KQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKmZ1bmN0aW9uTm9kZSA9ICgqZnVu
Y3Rpb25TZXF1ZW5jZSlbaW5kZXhdOworICAgICAgICBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2Rl
ID0gZnVuY3Rpb25Ob2RlLT5nZXRBc0JyYW5jaE5vZGUoKTsKKyAgICAgICAgaWYgKGJyYW5jaE5v
ZGUgIT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyYW5jaE5vZGUtPmdl
dEZsb3dPcCgpID09IEVPcEtpbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGRpc2NhcmRGdW5jID09IG51bGxwdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlZCA9IG1haW5Cb2R5
LT5yZXBsYWNlQ2hpbGROb2RlKGJyYW5jaE5vZGUsIGRpc2NhcmRGdW5jKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlcGxhY2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVBU1Qocm9vdCk7Cit9CisKKy8vIENyZWF0
ZSBkaXNjYXJkX3dyYXBwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgU1BJUlYtQ3Jvc3Mgd2ls
bCBhbHdheXMgaGF2ZSBhIHJldHVybiBhdCB0aGUgZW5kCisvLyBvZiBmcmFnbWVudCBzaGFkZXJz
CitBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3Jl
YXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlICZzaW5rICAgICAgID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOworCisgICAgc2luayA8PCAidm9pZCAi
IDw8IGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lIDw8ICIoKVxuIjsKKyAgICBzaW5rIDw8ICJ7XG4i
OworICAgIHNpbmsgPDwgIiAgIGRpc2NhcmQ7XG4iOworICAgIHNpbmsgPDwgIn1cbiI7CisKKyAg
ICBURnVuY3Rpb24gKmRpc2NhcmRXcmFwcGVyRnVuYyA9CisgICAgICAgIG5ldyBURnVuY3Rpb24o
c3ltYm9sVGFibGUsIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZv
aWQ+KCksIHRydWUpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY2FsbERpc2NhcmRXcmFwcGVy
RnVuYyA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlz
Y2FyZFdyYXBwZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworICAgIHJldHVybiBjYWxs
RGlzY2FyZFdyYXBwZXJGdW5jOworfQorCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgKaW5kZXggMGY0ZjFjY2UyOWEzNTU3YWVkMDE4OGM4ZjYxNzg3
NjRlYjAwMmI0ZC4uYmNjMzE4NzFhNzFkMTQ4YzU2NWQ4Mjc2NTcxYTEzNjMwYTM4NGMyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgKQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNz
IFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCiAgIHB1YmxpYzoKICAg
ICBUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAK
KyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKGJvb2wgZSkg
eyBtRW11bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorCiAgIHByb3RlY3RlZDoKICAgICBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMs
CkBAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMgVHJhbnNs
YXRvclZ1bGthbgogCiAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFNhbXBsZU1hc2tX
cml0aW5nTG9naWMoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5p
Zm9ybXMpOwotICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemVyRGlzY2Fy
ZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCk7CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KTsKKworICAg
IEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKFRJbnRlcm1C
bG9jayAqcm9vdCk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNy
ZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAgYm9vbCBt
RW11bGF0ZWRJbnN0YW5jZUlEID0gZmFsc2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlMTAyMjgyZWUzYWFhZGY2ZjBiNDI1NmY2N2Y1Mzk4YmFlMGU1MTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisKKyNp
bmNsdWRlICJhbmdsZV9nbC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNl
QmxvY2tzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRy
ZXNzYWJsZVJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lRW1iZWRkZWRV
bmlmb3JtU3RydWN0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUF0b21pY0NvdW50ZXJzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNh
bXBsZXJzQXMyREFycmF5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmV3cml0ZVN0cnVjdFNhbXBsZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvQnVpbHRJbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
RmluZFN5bWJvbE5vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9SZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCisKK25hbWVzcGFjZSBzaAoreworCituYW1lc3Bh
Y2UKK3sKKworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2si
LCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJ
REZpZWxkKCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Cisj
aWYgMAorY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0ZVNhbXBs
ZU1hc2siKTsKK2NvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJk
V3JhcHBlciIpOworI2VuZGlmCitjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFy
YW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7Citjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05h
bWUoIkFuZ2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoImFu
Z2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZs
aXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5h
bWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworCitjb25zdGV4cHIgY29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAg
ICAgICA9ICJ2aWV3cG9ydCI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrSGFsZlJlbmRlckFyZWFb
XSAgICAgICA9ICJoYWxmUmVuZGVyQXJlYSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrRmxpcFhZ
W10gICAgICAgICAgICAgICA9ICJmbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0Zs
aXBYWVtdICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtD
bGlwRGlzdGFuY2VzRW5hYmxlZFtdID0gImNsaXBEaXN0YW5jZXNFbmFibGVkIjsKK2NvbnN0ZXhw
ciBjb25zdCBjaGFyIGtYZmJBY3RpdmVVbnBhdXNlZFtdICAgID0gInhmYkFjdGl2ZVVucGF1c2Vk
IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZl
cnRpY2VzUGVyRHJhdyI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrWGZiQnVmZmVyT2Zmc2V0c1td
ICAgICA9ICJ4ZmJCdWZmZXJPZmZzZXRzIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtBY2JCdWZm
ZXJPZmZzZXRzW10gICAgID0gImFjYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNo
YXIga0RlcHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVwdGhSYW5nZSI7Citjb25zdGV4cHIgY29u
c3QgY2hhciBrUHJlUm90YXRpb25bXSAgICAgICAgICA9ICJwcmVSb3RhdGlvbiI7Citjb25zdGV4
cHIgY29uc3QgY2hhciBrRnJhZ1JvdGF0aW9uW10gICAgICAgICA9ICJmcmFnUm90YXRpb24iOwor
Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKAorICAgIEJ1
aWx0SW5JZDo6Z2xfVmVydGV4SW5kZXgsCisgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJ
bmRleCIpLAorICAgIFN5bWJvbFR5cGU6OkJ1aWx0SW4sCisgICAgVEV4dGVuc2lvbjo6VU5ERUZJ
TkVELAorICAgIFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwg
MSwgMT4oKSk7CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworY29u
c3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jt
cz4ga0dyYXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworICAgIHtrVmlld3BvcnQsIGtIYWxm
UmVuZGVyQXJlYSwga0ZsaXBYWSwga05lZ0ZsaXBYWSwga0NsaXBEaXN0YW5jZXNFbmFibGVkLCBr
WGZiQWN0aXZlVW5wYXVzZWQsCisgICAgIGtYZmJWZXJ0aWNlc1BlckRyYXcsIGtYZmJCdWZmZXJP
ZmZzZXRzLCBrQWNiQnVmZmVyT2Zmc2V0cywga0RlcHRoUmFuZ2UsIGtQcmVSb3RhdGlvbiwKKyAg
ICAga0ZyYWdSb3RhdGlvbn19OworCitjb25zdGV4cHIgc2l6ZV90IGtOdW1Db21wdXRlRHJpdmVy
VW5pZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MTsKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tBY2JCdWZmZXJP
ZmZzZXRzfX07CisKK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0
VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU91dHB1dE1TTChvdXRwdXRNU0wpCisgICAg
e30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURlY2xh
cmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFBy
ZVZpc2l0KTsKKyAgICAgICAgaWYgKCFtSW5HbG9iYWxTY29wZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZGVjbGFyYXRvciAgICAgICAgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVk
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICAgPSBkZWNsYXJhdG9y
LT5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgLy8gRW1iZWRkZWQgc3RydWN0cyBzaG91bGQgYmUg
cGFyc2VkIGF3YXkgYnkgbm93LgorICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9s
VHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgICAgIC8vIG91dHB1dE1TTC0+
d3JpdGVTdHJ1Y3RUeXBlKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAg
IGlmIChzeW1ib2xOb2RlICYmIHN5bWJvbE5vZGUtPnZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpID09
IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJl
bW92ZSB0aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0
IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgZW1w
dHlSZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1wbGFj
ZV9iYWNrKGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRv
IHJlbW92ZSAndW5zdWVkJyB3YXJuaW5nCisgICAgICAgIG1PdXRwdXRNU0wgPSBudWxscHRyOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUT3V0cHV0
TVNMICptT3V0cHV0TVNMOworfTsKKworY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEZWNsYXJl
RGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UgKnNpbmssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisg
ICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgICAgICBt
U2luayhzaW5rKSwKKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAg
ICAgICAgbU5hbWVNYXAobmFtZU1hcCksCisgICAgICAgICAgbUluRGVmYXVsdFVuaWZvcm0oZmFs
c2UpCisgICAge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybURlY2xhcmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorICAgICAgICBBU1NF
UlQoc2VxdWVuY2Uuc2l6ZSgpID09IDEpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFi
bGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlICAgICAgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICBib29sIGlzVW5pZm9y
bSAgICAgICAgID0gdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtICYmICF0eXBlLmlz
SW50ZXJmYWNlQmxvY2soKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5
cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0eXBlLCBt
SGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworICAgICAgICAgICAgICAgIG1JbkRlZmF1
bHRVbmlmb3JtID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBtSW5EZWZhdWx0
VW5pZm9ybSA9IGlzVW5pZm9ybTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKCptU2luaykgPDwgIjtcbiI7CisKKyAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHVuaWZvcm0gZGVjbGFyYXRpb24gZnJvbSB0aGUgdHJlZSBz
byBpdCBpc24ndCBwYXJzZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
IGVtcHR5UmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLmVt
cGxhY2VfYmFjayhnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSwgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5UmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1JbkRlZmF1bHRVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11
dGFibGVTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPnZhcmlhYmxlKCkubmFtZSgpOworICAgICAgICAg
ICAgQVNTRVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKyAgICAgICAgICAgICgqbVNpbmsp
IDw8IEhhc2hOYW1lKCZzeW1ib2wtPnZhcmlhYmxlKCksIG1IYXNoRnVuY3Rpb24sIG1OYW1lTWFw
KQorICAgICAgICAgICAgICAgICAgICAgPDwgQXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkp
OworICAgICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAqbVNp
bms7CisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworICAgIE5hbWVNYXAgKm1O
YW1lTWFwOworICAgIGJvb2wgbUluRGVmYXVsdFVuaWZvcm07Cit9OworCitUSW50ZXJtQmluYXJ5
ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMs
IGNvbnN0IGNoYXIgKmZpZWxkTmFtZSkKK3sKKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRG
aWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCks
IGZpZWxkTmFtZSk7CisKKyAgICBUSW50ZXJtU3ltYm9sICphbmdsZVVuaWZvcm1zUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2woJmRyaXZlclVuaWZvcm1zKTsKKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5p
Zm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworICAgIHVuaWZvcm1JbmRleC0+c2V0
SUNvbnN0KHN0YXRpY19jYXN0PGludD4oZmllbGRJbmRleCkpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICppbmRleFJlZiA9CisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlm
b3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworICAgIHJldHVybiBu
ZXcgVEludGVybUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgYW5nbGVVbmlmb3Jtc1JlZiwg
aW5kZXhSZWYpOworfQorCisjaWYgMAorLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3
cG9ydCBmbGlwcGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3Np
dGlvbi55CisvLyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5n
IHRoZSBnbF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9u
LnkgPSBnbF9Qb3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtU3dpenpsZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVm
ZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9
IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3Np
dGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIC8vIENyZWF0ZSBh
IHN3aXp6bGUgdG8gImdsX1Bvc2l0aW9uLnkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRZOworICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygxKTsKKyAgICBUSW50ZXJtU3dpenps
ZSAqcG9zaXRpb25ZID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zm
c2V0WSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBu
ZWdGbGlwWSIKKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWSA9IG5ldyBUSW50ZXJtQmluYXJ5
KEVPcE11bCwgcG9zaXRpb25ZLT5kZWVwQ29weSgpLCAmbmVnRmxpcFkpOworCisgICAgLy8gQ3Jl
YXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1Zp
ZXdwb3J0U2NhbGVZCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvbllMSFMgPSBwb3NpdGlvblkt
PmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisK
KyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwg
JnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisjZW5kaWYKKworI2lmIDAKKy8v
IEluaXRpYWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cy4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbml0VmFyaWFibGVMaXN0ICZ1bnVzZWRWYXJzKQoreworICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUSW50ZXJt
U2VxdWVuY2UgKmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZTsKKworICAgIGZv
ciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiB1bnVzZWRWYXJzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gRmluZFN5bWJvbE5vZGUoJnJvb3QsIHZhci5uYW1lKTsKKyAgICAgICAgQVNTRVJU
KHN5bWJvbCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNlICppbml0Q29kZSA9IENyZWF0ZUlu
aXRDb2RlKHN5bWJvbCwgZmFsc2UsIGZhbHNlLCAmc3ltYm9sVGFibGUpOworCisgICAgICAgIGlu
c2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVn
aW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKyAgICB9CisKKyAgICBpZiAoaW5zZXJ0U2VxdWVuY2Up
CisgICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1h
aW4oJnJvb3QpOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAgID0gbWFp
bi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgIC8vIEluc2VydCBpbml0IGNv
ZGUgYXQgdGhlIHN0YXJ0IG9mIG1haW4oKQorICAgICAgICBtYWluU2VxdWVuY2UtPmluc2VydCht
YWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1
ZW5jZS0+ZW5kKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Nv
bnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICZyb290LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vIFRoaXMgZmll
bGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGlu
IENvbnRleHRWay5jcHAuCisgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisKKyAgICBjb25zdCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJp
dmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUo
RWJ0VUludCwgNCksCisgICAgfX07CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCBrTnVtQ29tcHV0ZURyaXZlclVuaWZvcm1zOyArK3VuaWZvcm1JbmRl
eCkKKyAgICB7CisgICAgICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKyAgICAgICAg
ICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5kZXhdLAorICAgICAg
ICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoa0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFt
ZXNbdW5pZm9ybUluZGV4XSksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVz
aF9iYWNrKGRyaXZlclVuaWZvcm1GaWVsZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY2xhcmVT
dHJ1Y3R1cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFVbmlmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgp
LCAwLCBrVW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNlY29uZDsKK30K
KworLy8gVGhlIEFkZCpEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyIG9wZXJhdGlvbiBhZGRzIGFuIGlu
dGVybmFsIHVuaWZvcm0gYmxvY2sgdG8gYSBzaGFkZXIuIFRoZSBkcml2ZXIKKy8vIGJsb2NrIGlz
IHVzZWQgdG8gaW1wbGVtZW50IFZ1bGthbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd29ya2Fyb3Vu
ZHMuIFJldHVybnMgdGhlIGRyaXZlciB1bmlmb3JtcworLy8gdmFyaWFibGUuCisvLworLy8gVGhl
cmUgYXJlIEdyYXBoaWNzIGFuZCBDb21wdXRlIHZhcmlhdGlvbnMgYXMgdGhleSByZXF1aXJlIGRp
ZmZlcmVudCB1bmlmb3Jtcy4KK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlm
b3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxURmllbGQgKj4gJmFkZGl0aW9uYWxGaWVsZHMpCit7CisgICAgLy8gSW5pdCB0
aGUgZGVwdGggcmFuZ2UgdHlwZS4KKyAgICBURmllbGRMaXN0ICpkZXB0aFJhbmdlUGFyYW1zRmll
bGRzID0gbmV3IFRGaWVsZExpc3QoKTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNo
X2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwg
MSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1tdXRhYmxlU3RyaW5nKCJuZWFyIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KSk7CisgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3
IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZmFy
IiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisgICAgZGVwdGhSYW5nZVBh
cmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZGlmZiIpLCBrTm9Tb3VyY2VMb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCkpOworICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdodCBi
ZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorICAgIGRlcHRoUmFu
Z2VQYXJhbXNGaWVsZHMtPnB1c2hfYmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxR2xvYmFsLCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoInJlc2VydmVkIiksIGtOb1NvdXJj
ZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICplbXVs
YXRlZERlcHRoUmFuZ2VQYXJhbXMgPQorICAgICAgICBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAm
c3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVhdGUoKSwgMCwga0VtdWxhdGVk
RGVwdGhSYW5nZVBhcmFtcy5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bHB0cikKKyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisgICAgICAgICAgICAuZ2V0U3Ry
dWN0KCk7CisKKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9m
IEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0
ICpkcml2ZXJGaWVsZExpc3QgPSBuZXcgVEZpZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJy
YXk8VFR5cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlw
ZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpLAorICAgICAgICBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAg
ICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCksICAv
LyB1aW50IGNsaXBEaXN0YW5jZXNFbmFibGVkOyAgLy8gMzIgYml0cyBmb3IgMzIgY2xpcCBkaXN0
YW5jZXMgbWF4CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKyAgICAgICAgbmV3IFRUeXBl
KEVidFVJbnQpLAorICAgICAgICAvLyBOT1RFOiBUaGVyZSdzIGEgdmVjMyBnYXAgaGVyZSB0aGF0
IGNhbiBiZSB1c2VkIGluIHRoZSBmdXR1cmUKKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCks
CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50LCA0KSwKKyAgICAgICAgbmV3IFRUeXBlKGVtdWxh
dGVkRGVwdGhSYW5nZVBhcmFtcywgZmFsc2UpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDIsIDQpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorICAgIH19OworCisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUdyYXBo
aWNzRHJpdmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4KQorICAgIHsKKyAgICAgICAgVEZpZWxk
ICpkcml2ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAgICAgbmV3IFRGaWVsZChrRHJpdmVyVW5p
Zm9ybVR5cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJs
ZVN0cmluZyhrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXNbdW5pZm9ybUluZGV4XSksIGtOb1Nv
dXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5h
bCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNrKGRyaXZlclVuaWZvcm1GaWVs
ZCk7CisgICAgfQorCisgICAgLy8gQmFjay1lbmQgc3BlY2lmaWMgZmllbGRzCisgICAgZHJpdmVy
RmllbGRMaXN0LT5pbnNlcnQoZHJpdmVyRmllbGRMaXN0LT5lbmQoKSwgYWRkaXRpb25hbEZpZWxk
cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOworCisgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgorICAgIHJldHVy
biBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVy
OjpDcmVhdGUoKSwgMCwga1VuaWZvcm1zQmxvY2tOYW1lLnJhd05hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAma1VuaWZvcm1zVmFyTmFtZS5yYXdOYW1lKCkpCisgICAgICAgIC5z
ZWNvbmQ7Cit9CisKKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVw
dGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KK0FOR0xF
X05PX0RJU0NBUkQgYm9vbCBSZXBsYWNlR0xEZXB0aFJhbmdlV2l0aERyaXZlclVuaWZvcm0oVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJmRyaXZlclVuaWZvcm1zKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVy
ZW5jZSB0byAiZ2xfRGVwdGhSYW5nZSIKKyAgICBjb25zdCBUVmFyaWFibGUgKmRlcHRoUmFuZ2VW
YXIgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUgKj4oCisgICAgICAgIHN5bWJvbFRhYmxl
LmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7CisKKyAg
ICAvLyBBTkdMRVVuaWZvcm1zLmRlcHRoUmFuZ2UKKyAgICBUSW50ZXJtQmluYXJ5ICphbmdsZUVt
dWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9y
bXMsIGtEZXB0aFJhbmdlKTsKKworICAgIC8vIFVzZSB0aGlzIHZhcmlhYmxlIGluc3RlYWQgb2Yg
Z2xfRGVwdGhSYW5nZSBldmVyeXdoZXJlLgorICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRo
VHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRo
UmFuZ2VSZWYpOworfQorCitUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqbWFpbiA9IEZp
bmRNYWluKCZyb290KTsKKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgp
OworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3Jt
RmVlZGJhY2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisgICAgVFZhcmlhYmxlICp4ZmJQbGFjZWhvbGRlciA9
IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIkBAIFhGQi1PVVQg
QEAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VFR5cGUoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisKKyAgICAvLyBBcHBlbmQgdGhl
IGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIG5ldyBUSW50ZXJt
U3ltYm9sKHhmYlBsYWNlaG9sZGVyKSwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBvcGVy
YXRpb24gcGVyZm9ybXMgdGhlIHZpZXdwb3J0IGRlcHRoIHRyYW5zbGF0aW9uIG5lZWRlZCBieSBW
dWxrYW4uIEluIEdMIHRoZSB2aWV3cG9ydAorLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkg
ZGlmZmVyZW50IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxp
bmcgdGhlCisvLyBWaWV3cG9ydCIuIEluIFZ1bGthbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHNl
Y3Rpb24gaXMgY3VycmVudGx5ICIyMy40LiBDb29yZGluYXRlCisvLyBUcmFuc2Zvcm1hdGlvbnMi
LgorLy8gVGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKy8vCisvLyAgICAg
el92ayA9IDAuNSAqICh3X2dsICsgel9nbCkKKy8vCisvLyB3aGVyZSB6X3ZrIGlzIHRoZSBkZXB0
aCBvdXRwdXQgb2YgYSBWdWxrYW4gdmVydGV4IHNoYWRlciBhbmQgel9nbCBpcyB0aGUgc2FtZSBm
b3IgR0wuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyRGVwdGhDb3Jy
ZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9s
VGFibGUoKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlh
YmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRaID0gezJ9OworICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJt
U3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworCisgICAgVEludGVybUNvbnN0
YW50VW5pb24gKm9uZUhhbGYgPSBDcmVhdGVGbG9hdE5vZGUoMC41Zik7CisKKyAgICBUVmVjdG9y
PGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9u
VyAgID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBzd2l6emxl
T2Zmc2V0Vyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpQbHVzVyA9IG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEFkZCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCBwb3NpdGlvblct
PmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1CaW5hcnkgKmhhbGZaUGx1c1cgPSBuZXcgVEludGVy
bUJpbmFyeShFT3BNdWwsIHpQbHVzVywgb25lSGFsZi0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBD
cmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGds
X1Bvc2l0aW9uLncpICogMC41IgorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25aTEhTID0gcG9z
aXRpb25aLT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgaGFsZlpQ
bHVzVyk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQg
dGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZj
b21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKKy8vIFRoaXMg
b3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3Ig
QW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisvLyBwbGF0Zm9ybXMpLCB0aGUgZGV2aWNl
IG1heSByb3RhdGUsIHN1Y2ggdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9u
IGlzIHJvdGF0ZWQKKy8vIHJlbGF0aXZlIHRvIHRoZSBuYXRpdmUgb3JpZW50YXRpb24gb2YgdGhl
IGRldmljZS4gIFRoaXMgaXMgY29ycmVjdGVkIGluIHBhcnQgYnkgbXVsdGlwbHlpbmcKKy8vIGds
X1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKy8vIFRoZSBlcXVhdGlvbnMgcmVkdWNlIHRvIGFuIGV4cHJl
c3Npb246CisvLworLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVS
b3RhdGlvbgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFByZVJvdGF0aW9uKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSAgICAgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIFRJbnRlcm1C
aW5hcnkgKnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlm
b3Jtcywga1ByZVJvdGF0aW9uKTsKKyAgICBUSW50ZXJtU3ltYm9sICpnbFBvcyAgICAgICAgICA9
IG5ldyBUSW50ZXJtU3ltYm9sKEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSAgPSB7MCwgMX07CisgICAgVEludGVybVN3aXp6
bGUgKmdsUG9zWFkgICAgICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZz
ZXRYWSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi54eSAq
IHByZVJvdGF0aW9uKSIKKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisgICAgICAgIG5l
dyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBwcmVSb3RhdGlvblJlZi0+ZGVl
cENvcHkoKSwgZ2xQb3NYWS0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2ln
bm1lbnQgImdsX1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgor
ICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xQb3NYWS0+ZGVlcENvcHkoKSwgelJvdGF0ZWQpOwor
CisgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQg
b2YgdGhlIHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIs
ICZyb290LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCitBTkdMRV9OT19ESVNDQVJE
IGJvb2wgUm90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVNlcXVlbmNlICZpbnNlcnRTZXF1ZW5jZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZmxpcFhZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZidWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmZmxpcHBlZFZhcmlhYmxlTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAmcGl2b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5
bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBh
IHN5bWJvbCByZWZlcmVuY2UgdG8gJ2J1aWx0aW4nLgorICAgIFRJbnRlcm1TeW1ib2wgKmJ1aWx0
aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbCgmYnVpbHRpbik7CisKKyAgICAvLyBDcmVhdGUgYSBz
d2l6emxlIHRvICJidWlsdGluLnh5IgorICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WFkg
PSB7MCwgMX07CisgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJt
U3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworCisgICAgLy8gQ3JlYXRlIGEg
c3ltYm9sIHJlZmVyZW5jZSB0byBvdXIgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBob2xkIHRoZSBt
b2RpZmllZCBidWlsdGluLgorICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6R2V0
Rm9yVmVjPEVidEZsb2F0PigKKyAgICAgICAgRXZxR2xvYmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihidWlsdGluLmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgVFZhcmlh
YmxlICpyZXBsYWNlbWVudFZhciA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBmbGlwcGVk
VmFyaWFibGVOYW1lLnJhd05hbWUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUoKSk7Cisg
ICAgRGVjbGFyZUdsb2JhbFZhcmlhYmxlKCZyb290LCByZXBsYWNlbWVudFZhcik7CisgICAgVElu
dGVybVN5bWJvbCAqZmxpcHBlZEJ1aWx0aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbChyZXBsYWNl
bWVudFZhcik7CisKKyAgICAvLyBVc2UgdGhpcyBuZXcgdmFyaWFibGUgaW5zdGVhZCBvZiAnYnVp
bHRpbicgZXZlcnl3aGVyZS4KKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZy
b290LCAmYnVpbHRpbiwgcmVwbGFjZW1lbnRWYXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkg
KiBmcmFnUm90YXRpb24pIgorICAgIFRJbnRlcm1UeXBlZCAqcm90YXRlZFhZOworICAgIGlmIChm
cmFnUm90YXRpb24pCisgICAgeworICAgICAgICByb3RhdGVkWFkgPSBuZXcgVEludGVybUJpbmFy
eShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgZnJhZ1JvdGF0aW9uLT5kZWVwQ29weSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBObyByb3RhdGlvbiBhcHBsaWVkLCB1
c2Ugb3JpZ2luYWwgdmFyaWFibGUuCisgICAgICAgIHJvdGF0ZWRYWSA9IGJ1aWx0aW5YWS0+ZGVl
cENvcHkoKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGlu
Lnh5IC0gcGl2b3QpICogZmxpcFhZICsgcGl2b3QKKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQ
aXZvdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworICAg
IFRJbnRlcm1CaW5hcnkgKmludmVyc2VYWSAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBy
ZW1vdmVQaXZvdCwgJmZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAqcGx1c1Bpdm90ICAgPSBu
ZXcgVEludGVybUJpbmFyeShFT3BBZGQsIGludmVyc2VYWSwgcGl2b3QuZGVlcENvcHkoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGNvcnJlY3RlZCB2YXJpYWJsZSBhbmQgY29weSB0aGUgdmFsdWUg
b2YgdGhlIG9yaWdpbmFsIGJ1aWx0aW4uCisgICAgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSA9
IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5S
ZWYtPmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IFRJbnRl
cm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKGJ1aWx0aW4uZ2V0VHlwZSgpLCBzZXF1ZW5j
ZSk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgID0gbmV3IFRJbnRlcm1CaW5hcnko
RU9wSW5pdGlhbGl6ZSwgZmxpcHBlZEJ1aWx0aW5SZWYsIGFnZ3JlZ2F0ZSk7CisKKyAgICAvLyBD
cmVhdGUgYW4gYXNzaWdubWVudCB0byB0aGUgcmVwbGFjZWQgdmFyaWFibGUncyAueHkuCisgICAg
VEludGVybVN3aXp6bGUgKmNvcnJlY3RlZFhZID0KKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworICAgIFRJ
bnRlcm1CaW5hcnkgKmFzc2lnblRvWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbiwgY29y
cmVjdGVkWFksIHBsdXNQaXZvdCk7CisKKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqbm9kZXNbXSA9IHthc3NpZ25tZW50LCBhc3NpZ25Ub1l9OworICAgICAgICBpbnNlcnRT
ZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2Rlcyks
IHN0ZDo6ZW5kKG5vZGVzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRl
QVNUKCZyb290KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENv
cnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5p
Zm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAmcGl2
b3QgICAgICAgID0gKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtIYWxm
UmVuZGVyQXJlYSk7CisgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0gKGNvbXBpbGVP
cHRpb25zICYgU0hfQUREX1BSRV9ST1RBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJh
Z1JvdGF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxw
dHI7CisgICAgcmV0dXJuIFJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUoY29tcGlsZXIsIHJv
b3QsIGluc2VydFNlcXVlbmNlLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJh
Z0Nvb3JkTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZv
dCwgZnJhZ1JvdGF0aW9uKTsKK30KKworVEludGVybUJpbmFyeSAqR2V0RHJpdmVyVW5pZm9ybURl
cHRoUmFuZ2VSZXNlcnZlZEZpZWxkUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1S
ZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKworICAgIHJldHVybiBuZXcgVEludGVy
bUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgZGVwdGhSYW5nZSwgQ3JlYXRlSW5kZXhOb2Rl
KDMpKTsKK30KKwordm9pZCBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKFRJbnRlcm1CbG9jayAmcm9v
dCwgY29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZp
bmRNYWluSW5kZXgoJnJvb3QpLCB7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmdmFyfX0pOworfQor
Cit2b2lkIEFkZEZyYWdDb2xvckRlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJv
bFRhYmxlICZzeW1ib2xUYWJsZSkKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1h
aW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0NvbG9yKCl9
fSk7Cit9CisKK3ZvaWQgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290
LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2Rl
cyhGaW5kTWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFn
RGVwdGgoKX19KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEZyYWdEYXRhRGVjbGFy
YXRpb24oVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAg
IGNvbnN0IGludCBtYXhEcmF3QnVmZmVycyAgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5NYXhE
cmF3QnVmZmVyczsKKyAgICBUVHlwZSAqZ2xfRnJhZ0RhdGFUeXBlICAgID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCAxKTsKKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworICAgIFRJbnRlcm1TZXF1ZW5jZSBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlOworCisgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAs
MSwyLDMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heERyYXdCdWZmZXJzOyBpKyspCisgICAg
eworICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFn
RGF0YV8iKSArIDIpOworICAgICAgICBidWlsZGVyIDw8ICJnbF9GcmFnRGF0YV8iOworICAgICAg
ICBidWlsZGVyLmFwcGVuZERlY2ltYWwoaSk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xG
cmFnRGF0YSA9CisgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgYnVpbGRl
ciwgZ2xfRnJhZ0RhdGFUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQpOworICAgICAgICBnbEZyYWdE
YXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworICAgICAgICBkZWNsYXJlR0xGcmFnZGF0
YVNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2dsRnJhZ0RhdGF9KTsK
KyAgICB9CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKworICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBn
bF9GcmFnRGF0YSBhcnJheSB0eXBlLCBjb21wYXRpYmxlIHdpdGggaW5kZXhpbmcgc3ludGF4Lgor
ICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LT5tYWtl
QXJyYXkobWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0YUds
b2JhbCA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImdsX0Zy
YWdEYXRhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisKKyAg
ICBEZWNsYXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIGdsRnJhZ0RhdGFHbG9iYWwpOworICAgIGNv
bnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZy
b290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworICAgIEFTU0VSVChvcmlnaW5h
bEdMRnJhZ0RhdGEpOworCisgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGds
b2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGls
ZXIsICZyb290LCAmKG9yaWdpbmFsR0xGcmFnRGF0YS0+dmFyaWFibGUoKSksIGdsRnJhZ0RhdGFH
bG9iYWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFz
c2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQKKyAgICBUSW50ZXJtQmxvY2sg
Kmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Z2xGcmFnRGF0YVNsb3QgICAgICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFTbG90
c1tpXSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCA9IG5l
dyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFHbG9iYWwpOworICAgICAgICBhdXRvICZhY2Nlc3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5
bWJvbCwgaSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICAg
ICAgbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGdsRnJhZ0RhdGFTbG90
LCAmYWNjZXNzKTsKKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3Np
Z25tZW50KTsKKyAgICB9CisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVy
LCAmcm9vdCwgaW5zZXJ0U2VxdWVuY2UsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBFbXVsYXRlSW5zdGFuY2VJRChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQoreworICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorICAg
ICAgICBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRW11SW5zdGFuY2VJ
REZpZWxkLnJhd05hbWUoKS5kYXRhKCkpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqaW5zdGFuY2VJ
RCA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfSW5zdGFuY2VJbmRleCgpOworICAgIHJldHVybiBSZXBs
YWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5z
dGFuY2VJRCk7Cit9CisKKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ly8gbWFudWFsbHkuCisvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xf
UG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisvLyBnbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBw
ZW5kVmVydGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgJmNvbXBp
bGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6
bGUgJm5lZ0ZsaXBZKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxl
ci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBC
dWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRp
b25SZWYgPSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4g
c3dpenpsZU9mZnNldFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJ
bnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYs
IHN3aXp6bGVPZmZzZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9z
aXRpb24ueSAqIG5lZ0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJ
bnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlv
bi55ICogbmVnVmlld3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9
IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9
IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGlu
dmVyc2VZKTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBh
dCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
JmNvbXBpbGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlCisKK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0
KHNoOjpHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5
cGUsIHNwZWMsIG91dHB1dCkKK3t9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRv
ck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICBy
ZXR1cm4gY29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRh
KCk7Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpH
ZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBj
b25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0
YSgpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0Ojpp
bnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAg
ICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBU
VHlwZSAqYm9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgYm9vbFR5cGUtPnNldFF1
YWxpZmllcihFdnFDb25zdCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9Cisg
ICAgICAgIG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGNvbnN0YW50X25hbWVzOjprUmFzdGVy
aXphdGlvbkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKSwgYm9vbFR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWQuc3lt
Ym9sVHlwZSgpKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZh
cmlhYmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0g
bmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIHZlYzQoLTMsIC0z
LCAtMywgMSk6CisgICAgYXV0byB2ZWM0VHlwZSAgICAgICAgICAgICA9IG5ldyBUVHlwZShFYnRG
bG9hdCwgNCk7CisgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2Vx
dWVuY2UoKTsKKyAgICB2ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikp
OworICAgIHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7CisgICAg
dmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2ZWM0QXJn
cy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgxLjBmKSk7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSAqY29uc3RWYXJDb25zdHJ1Y3RvciA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworCisgICAgLy8gQ3JlYXRlIHRoZSBh
c3NpZ25tZW50ICJnbF9Qb3NpdGlvbiA9IHZlYzQoLTMsIC0zLCAtMywgMSkiCisgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCBwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgY29uc3RWYXJDb25zdHJ1Y3Rv
cik7CisKKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxvY2s7
CisgICAgZGlzY2FyZEJsb2NrLT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWdubWVudCk7CisKKyAgICBU
SW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRpc2NhcmRF
bmFibGVkVmFyKTsKKyAgICBUSW50ZXJtSWZFbHNlICppZkNhbGwgICAgICAgICA9IG5ldyBUSW50
ZXJtSWZFbHNlKGRpc2NhcmRFbmFibGVkLCBkaXNjYXJkQmxvY2ssIG51bGxwdHIpOworCisgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworfQorCisvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJh
bmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRlcHRoIGZhcgorLy8g
VGhpcyBpcyBhY2hpZXZlZCBieSBtdWx0aXBseSB0aGUgZGVwdGggdmFsdWUgd2l0aCBzY2FsZSB2
YWx1ZSBzdG9yZWQgaW4KKy8vIGRyaXZlciB1bmlmb3JtJ3MgZGVwdGhSYW5nZS5yZXNlcnZlZAor
Ym9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlv
bihUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6Omds
X1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVy
bVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7
Mn07CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxl
KHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3
cG9ydFpTY2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihk
cml2ZXJVbmlmb3Jtcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0
aW9uLnogKiBkZXB0aFJhbmdlLnJlc2VydmVkIi4KKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUg
PSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3Bv
cnRaU2NhbGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56
ID0gZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiCisgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFy
eSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwg
cG9zaXRpb25aTEhTLCB6U2NhbGUpOworCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
dGhpcywgJnJvb3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKK30KKwordm9pZCBU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZv
cm1GaWVsZHMoCisgICAgc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpCit7CisgICAg
Ly8gQWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2
ZSBidWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKyAgICAvLyBlcXVpdmFsZW50IGZ1
bmN0aW9uYWxpdHksIG5lZWRzIHRvIGVtdWxhdGUgaXQgdXNpbmcgZnJhZ21lbnQgc2hhZGVyJ3Mg
W1tzYW1wbGVfbWFza11dIG91dHB1dAorICAgIC8vIHZhbHVlLgorICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrTm9Tb3VyY2VMb2MsIGtDb3ZlcmFnZU1hc2tGaWVsZC5zeW1ib2xUeXBlKCkpOworICAg
IGZpZWxkc091dC5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVs
YXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVs
ZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3
TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBrRW11SW5zdGFuY2VJREZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAgICAg
IGZpZWxkc091dC5wdXNoX2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKyAgICB9Cit9CisKK1RJ
bnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdG
bGlwWVJlZigKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdAorewor
ICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorICAgIFRJbnRlcm1CaW5h
cnkgKm5lZ0ZsaXBYWSAgICA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtOZWdGbGlwWFkpOworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WSA9IHsxfTsKKyAg
ICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVnRmxp
cFhZLCBzd2l6emxlT2Zmc2V0WSk7CisgICAgcmV0dXJuIG5lZ0ZsaXBZOworfQorCitzdGF0aWMg
c3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBHZXRNc2xLZXl3b3JkcygpCit7CisgICAgc3RkOjpz
ZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKworICAgIGtleXdvcmRzLmVtcGxhY2UoImFs
aWduYXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgiYXNfdHlwZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImF1dG8iKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNoYXIiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjbGFzcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNv
bnN0X2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdGFudCIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoImNvbnN0ZXhwciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBl
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGVsZXRlIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZGV2aWNlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgiZW51bSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImV4cGxpY2l0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZXh0ZXJuIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZnJhZ21lbnQiKTsKKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJmcmllbmQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJnb3RvIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiaGFsZiIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGlu
ZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImludDE2X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJpbnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoImludDhfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImtlcm5lbCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJt
YWluMCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1ldGFsIik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5hbWVzcGFjZSIpOworICAg
IGtleXdvcmRzLmVtcGxhY2UoIm5ldyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibnVsbHB0cl90Iik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibnVsbHB0ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgib3ZlcnJpZGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcml2
YXRlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgicHRyZGlmZl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHVibGljIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJy
ZWdpc3RlciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgic2lnbmVkIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgic2l6ZW9mIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2Vf
aW4iKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhdGljX2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWMi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0ZW1wbGF0ZSIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInRoaXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRn
cm91cF9pbWFnZWJsb2NrIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJvdyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRy
eSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJ0eXBlaWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlbmFtZSIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVjaGFyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDE2X3Qi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MzJfdCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQ2NF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDhfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVuaW9uIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ1c2luZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInZpcnR1YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2b2xhdGlsZSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoIndjaGFyX3QiKTsKKworICAgIHJldHVybiBrZXl3b3JkczsK
K30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZUltcGwoVEludGVybUJs
b2NrICZyb290LCBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBnZXRTeW1ib2xUYWJsZSgpOworICAgIElkR2VuIGlkR2Vu
OworICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKworICAgIGlmICghV3JhcE1haW4oKnRo
aXMsIGlkR2VuLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBUSW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisjaWYgMAorICAg
IGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IGlmICghU2hhZGVyQnVpbHRpbnNXb3JrYXJvdW5kKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUs
IGNvbXBpbGVPcHRpb25zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFy
aWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisgICAgaWYgKCFSZW1vdmVJbmFjdGl2ZUludGVyZmFj
ZVZhcmlhYmxlcyh0aGlzLCAmcm9vdCwgZ2V0QXR0cmlidXRlcygpLCBnZXRJbnB1dFZhcnlpbmdz
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXRwdXRW
YXJpYWJsZXMoKSwgZ2V0VW5pZm9ybXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvdXQgZGVmYXVsdCB1bmlmb3JtcyBpbnRv
IGEgdW5pZm9ybSBibG9jayBhc3NpZ25lZCB0byBhIHNwZWNpZmljIHNldC9iaW5kaW5nLgorICAg
IGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisgICAgaW50IGFnZ3JlZ2F0
ZVR5cGVzVXNlZEZvclVuaWZvcm1zID0gMDsKKyAgICBpbnQgYXRvbWljQ291bnRlckNvdW50ICAg
ICAgICAgICAgPSAwOworICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1z
KCkpCisgICAgeworICAgICAgICBpZiAoIXVuaWZvcm0uaXNCdWlsdEluKCkgJiYgdW5pZm9ybS5h
Y3RpdmUgJiYgIWdsOjpJc09wYXF1ZVR5cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgKytkZWZhdWx0VW5pZm9ybUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHVuaWZvcm0uaXNTdHJ1Y3QoKSB8fCB1bmlmb3JtLmlzQXJyYXlPZkFycmF5cygpKQorICAgICAg
ICB7CisgICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJU
eXBlKHVuaWZvcm0udHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrYXRvbWljQ291bnRl
ckNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZv
clVuaWZvcm1zID4gMCkKKyAgICB7CisgICAgICAgIGlmICghTmFtZUVtYmVkZGVkU3RydWN0VW5p
Zm9ybXModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmV3cml0ZVN0cnVjdFNh
bXBsZXJzUmVzdWx0OworICAgICAgICBpbnQgcmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyAgICAg
ICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfVVNFX09MRF9SRVdSSVRFX1NUUlVDVF9TQU1QTEVS
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnNPbGQodGhpcywgJnJvb3QsICZz
eW1ib2xUYWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCA9
CisgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3lt
Ym9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHRVbmlmb3JtQ291bnQgLT0g
cmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyNpZiAwCisgICAgICAgIC8vIFdlIG11c3QgZGVjbGFy
ZSB0aGUgc3RydWN0IHR5cGVzIGJlZm9yZSB1c2luZyB0aGVtLgorICAgICAgICBEZWNsYXJlU3Ry
dWN0VHlwZXNUcmF2ZXJzZXIgc3RydWN0VHlwZXNUcmF2ZXJzZXIob3V0cHV0TVNMKTsKKyAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFz
dHJ1Y3RUeXBlc1RyYXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfU0VBTUZVTF9DVUJFX01BUF9TQU1QTElO
RykKKyAgICB7CisgICAgICAgIGlmICghUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheSh0
aGlzLCAmcm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
I2lmIDAKKyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sKKyAgICBpZiAoZGVmYXVs
dFVuaWZvcm1Db3VudCA+IDApCisgICAgeworICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJU
eXBlID0gZ2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7Cisg
ICAgICAgIHNpbmsgPDwgIlxuc3RydWN0ICIgPDwga0RlZmF1bHRVbmlmb3JtTmFtZXNbc2hhZGVy
VHlwZV0gPDwgIlxue1xuIjsKKyAgICAgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNl
ciBkZWZhdWx0VHJhdmVyc2VyKCZzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgJmdldE5hbWVNYXAo
KSk7CisgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKyAgICAgICAg
aWYgKCFkZWZhdWx0VHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpbmsgPDwg
In07XG4iOworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcyA9ICpbJl0oKSB7CisgICAgICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfQ09NUFVU
RV9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRDb21wdXRlRHJpdmVy
VW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gYWRkaXRp
b25hbEZpZWxkczsKKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVu
aWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisgICAgICAgICAgICByZXR1cm4gQWRkR3Jh
cGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlLCBhZGRpdGlvbmFs
RmllbGRzKTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGlmIChhdG9taWNDb3VudGVyQ291
bnQgPiAwKQorICAgIHsKKyAgICAgICAgLy8gQU5HTEVVbmlmb3Jtcy5hY2JCdWZmZXJPZmZzZXRz
CisgICAgICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkgKmFjYkJ1ZmZlck9mZnNldHMgPQorICAgICAg
ICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9m
ZnNldHMpOworCisgICAgICAgIGlmICghUmV3cml0ZUF0b21pY0NvdW50ZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsIGFjYkJ1ZmZlck9mZnNldHMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VmVyc2lvbigpID49IDMxMCkKKyAgICB7CisgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0IHN1cHBv
cnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2VlbgorICAg
ICAgICAvLyBjYXNlcyB3aGVyZSBidWlsdGlucyBhcmUgdXNpbmcgaXQgZXZlbiB3aXRoIG5vIGFj
dGl2ZSBhdG9taWMgY291bnRlcnMuCisgICAgICAgIC8vIFRoaXMgcGFzcyBzaW1wbHkgcmVtb3Zl
cyB0aG9zZSBidWlsdGlucyBpbiB0aGF0IHNjZW5hcmlvLgorICAgICAgICBpZiAoIVJlbW92ZUF0
b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXRTaGFkZXJUeXBl
KCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisgICAgeworICAgICAgICBpZiAoIVJlcGxhY2VHTERl
cHRoUmFuZ2VXaXRoRHJpdmVyVW5pZm9ybSgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworI2lmIDAK
KyAgICAgICAgLy8gQWRkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50IGRlY2xhcmF0aW9ucy4gIFRo
ZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBzcGVjaWFsaXphdGlvbgorICAgICAgICAvLyBjb25zdGFu
dCBpcyBpcnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBl
bGluZS4KKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5F
X1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91
dChjb25zdGFudF9pZD0iCisgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2azo6U3BlY2lhbGl6YXRpb25Db25zdGFudElkOjpMaW5lUmFzdGVyRW11bGF0aW9uKQorICAg
ICAgICAgICAgICAgICA8PCAiKSBjb25zdCBib29sICIgPDwga0xpbmVSYXN0ZXJFbXVsYXRpb25T
cGVjQ29uc3RWYXJOYW1lIDw8ICIgPSBmYWxzZTtcblxuIjsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisgICAgeworICAgICAgICBib29sIHVzZXNJbnN0YW5jZUlkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodmFyLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICh2YXIubmFtZSA9PSAiZ2xfSW5zdGFuY2VJRCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVz
ZXNJbnN0YW5jZUlkKQorICAgICAgICB7CisgICAgICAgICAgICByb290Lmluc2VydENoaWxkTm9k
ZXMoCisgICAgICAgICAgICAgICAgRmluZE1haW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxl
OjpnbF9JbnN0YW5jZUlEKCl9fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWNsYXJl
IGdsX0ZyYWdDb2xvciBhbmQgZ2xGcmFnRGF0YSBhcyB3ZWJnbF9GcmFnQ29sb3IgYW5kIHdlYmds
X0ZyYWdEYXRhCisgICAgLy8gaWYgaXQncyBjb3JlIHByb2ZpbGUgc2hhZGVycyBhbmQgdGhleSBh
cmUgdXNlZC4KKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikK
KyAgICB7CisgICAgICAgIGJvb2wgdXNlc1BvaW50Q29vcmQgID0gZmFsc2U7CisgICAgICAgIGJv
b2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0Zyb250RmFjaW5n
ID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJmlucHV0VmFyeWlu
ZyA6IG1JbnB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5wdXRWYXJ5
aW5nLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbnB1
dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
Q29vcmQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdD
b29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1c2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdXNlc0Zy
YWdDb2xvciA9IGZhbHNlOworICAgICAgICBib29sIHVzZXNGcmFnRGF0YSAgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCB1c2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hh
ZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29s
b3IiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91
dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
RGVwdGgiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdE
ZXB0aCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNl
c0ZyYWdDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0NvbG9yRGVjbGFyYXRp
b24ocm9vdCwgc3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcmFn
RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KCp0aGlzLCByb290KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdEZXB0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24ocm9vdCwg
c3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAgIGlmIChjb21waWxlT3B0
aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVP
cHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRyaXZlclVuaWZvcm1zLCB1c2VzRnJhZ0Nvb3JkKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlUHJlUm90YXRpb24gPSBjb21waWxl
T3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT047CisKKyAgICAgICAgaWYgKHVzZXNQb2ludENv
b3JkKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7Cisg
ICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAmcGl2b3QgPSAqQ3JlYXRlRmxvYXROb2Rl
KDAuNWYpOworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAg
ICAgICAgICAgICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVy
VW5pZm9ybXMsIGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUm90
YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZSgqdGhpcywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShy
b290KSwgZmxpcFhZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZv
dCwgZnJhZ1JvdGF0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVh
dGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICAgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmZyYWdSb3RhdGlvbiA9CisgICAgICAgICAgICAgICAgdXNlUHJlUm90
YXRpb24gPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0
aW9uKSA6IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290
LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKyAgICAgICAg
eworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlh
YmxlOjpnbF9Gcm9udEZhY2luZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVtaXRFYXJseUZy
YWdtZW50VGVzdHNHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hh
ZGVyVHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworCisg
ICAgICAgIGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2lu
dFNpemUoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUoKSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoRmluZFN5bWJvbE5vZGUoJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6
Z2xfVmVydGV4SW5kZXgoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFS
ZXBsYWNlVmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5k
ZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZ2xfVmVydGV4SW5kZXhN
ZXRhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCBrZ2xf
VmVydGV4SW5kZXhNZXRhbCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBp
bGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uVlModGhpcywgcm9v
dCwgJnN5bWJvbFRhYmxlLCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQWRkIGEgbWFjcm8gdG8gZGVjbGFyZSB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycy4K
KyAgICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKyNlbmRpZgorCisgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJU
cmFuc2Zvcm1GZWVkYmFja091dHB1dFRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlYXJjaCBm
b3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8g
c29tZSByZXBsYWNlbWVudHMuCisgICAgICAgIGJvb2wgdXNlQ2xpcERpc3RhbmNlID0gZmFsc2U7
CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0
cHV0VmFyeWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5h
bWUgPT0gImdsX0NsaXBEaXN0YW5jZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VDbGlwRGlzdGFuY2UgJiYgIVJlcGxh
Y2VDbGlwRGlzdGFuY2VBc3NpZ25tZW50cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0NsaXBE
aXN0YW5jZXNFbmFibGVkKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENv
cnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbXBpbGVPcHRpb25zICYgU0hf
QUREX1BSRV9ST1RBVElPTikgIT0gMCAmJgorICAgICAgICAgICAgIUFwcGVuZFByZVJvdGF0aW9u
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfR0VPTUVUUllfU0hBREVSKQorICAgIHsKKyAgICAgICAgV3JpdGVHZW9tZXRyeVNo
YWRlckxheW91dFF1YWxpZmllcnMoCisgICAgICAgICAgICBzaW5rLCBnZXRHZW9tZXRyeVNoYWRl
cklucHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlckludm9jYXRpb25zKCksCisg
ICAgICAgICAgICBnZXRHZW9tZXRyeVNoYWRlck91dHB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2Vv
bWV0cnlTaGFkZXJNYXhWZXJ0aWNlcygpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisgICAgICAg
IEVtaXRXb3JrR3JvdXBTaXplR0xTTCgqdGhpcywgc2luayk7CisgICAgfQorCisgICAgaWYgKGdl
dFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgYXV0byAm
bmVnRmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsK
KworICAgICAgICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFFbXVsYXRlSW5zdGFuY2VJRCgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRpb25Z
Q29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCwgbmVnRmxpcFkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluc2VydFJh
c3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmFsaWRhdGVBU1QoJnJv
b3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghUmV3
cml0ZUtleXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZWR1Y2VJbnRlcmZh
Y2VCbG9ja3MoKnRoaXMsIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhp
cyBpcyB0aGUgbGFyZ2VzdCBzaXplIHJlcXVpcmVkIHRvIHBhc3MgYWxsIHRoZSB0ZXN0cyBpbgor
ICAgIC8vIChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJh
eXMpCisgICAgLy8gVGhpcyB2YWx1ZSBjb3VsZCBpbiBwcmluY2lwbGUgYmUgc21hbGxlci4KKyAg
ICBjb25zdCBzaXplX3QgaG9pc3RUaHJlc2hvbGRTaXplID0gMjU2OworICAgIGlmICghSG9pc3RD
b25zdGFudHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludmFyaWFudHMgaW52YXJpYW50
czsKKyAgICBpZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52
YXJpYW50cykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3lt
Ym9sRW52IHN5bWJvbEVudigqdGhpcywgcm9vdCk7CisKKyAgICBpZiAoIUFkZEV4cGxpY2l0VHlw
ZUNhc3RzKCp0aGlzLCByb290LCBzeW1ib2xFbnYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisgICAg
aWYgKCFSZXdyaXRlUGlwZWxpbmVzKCp0aGlzLCByb290LCBpZEdlbiwgZHJpdmVyVW5pZm9ybXMs
IHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxp
bmVTdHJ1Y3RzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIVNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucygqdGhpcywgc3ltYm9sRW52LCBpZEdlbiwg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFS
ZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5j
ZXMoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlT3V0QXJncygqdGhpcywgcm9vdCwgc3ltYm9sRW52
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVRvcG9z
b3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghRW1pdE1ldGFsKCp0aGlzLCByb290LCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYsIHBwYykpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHZhbGlkYXRlQVNU
KCZyb290KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlRGlhZ25vc3RpY3Mg
KnBlcmZEaWFnbm9zdGljcykKK3sKKyAgICBpZiAoIXJvb3QpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5r
KCkub2JqOworCisgICAgYm9vbCBwcmVjaXNpb25FbXVsYXRpb24gPSBmYWxzZTsKKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworI2lmIDAKKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlv
bnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworCisgICAgVE91dHB1
dE1TTCBvdXRwdXRNU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0
SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAm
Z2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdl
dE91dHB1dFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25FbXVsYXRp
b24sIGVuYWJsZVByZWNpc2lvbiwgY29tcGlsZU9wdGlvbnMpOworI2VuZGlmCisKKyAgICBpZiAo
IXRyYW5zbGF0ZUltcGwoKnJvb3QsIGNvbXBpbGVPcHRpb25zKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyNpZiAwCisgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFk
ZXIuCisgICAgcm9vdC0+dHJhdmVyc2Uob3V0cHV0TVNMKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IHRydWU7Cit9Citib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKCkKK3sKKyAgICAvLyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJh
bnNmb3JtYXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWZjYjMwNjcxOTc3YmY1ODFiNmFjMjU3MzIxYzdkMTZmNjZmYzU2ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3Mg
VE91dHB1dE1TTDsKKwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c2l6ZV90LCBzdGQ6OnN0
cmluZz4gb3JpZ2luYWxOYW1lc01hcDsKK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHNpemVfdD4gdGV4dHVyZUJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB1bmlmb3JtQnVmZmVyQmluZGlu
Z01hcDsKKworY2xhc3MgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbgoreworICBwdWJsaWM6Cisg
ICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisgICAgflRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorCisgICAgdm9pZCBhZGRPcmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlk
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIG9yaWdpbmFsTmFtZXMu
aW5zZXJ0KHtpZCwgbmFtZX0pOworICAgIH0KKyAgICB2b2lkIGFkZFNhbXBsZXJCaW5kaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qgc2FtcGxlckJpbmRpbmcpCisgICAgeworICAg
ICAgICBzYW1wbGVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCBzYW1wbGVyQmluZGluZ30pOworICAg
IH0KKyAgICB2b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBz
aXplX3QgdGV4dHVyZUJpbmRpbmcpCisgICAgeworICAgICAgICB0ZXh0dXJlQmluZGluZ3MuaW5z
ZXJ0KHtuYW1lLCB0ZXh0dXJlQmluZGluZ30pOworICAgIH0KKyAgICB2b2lkIGFkZFVuaWZvcm1C
dWZmZXJCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdW5pZm9ybUJ1ZmZl
ckJpbmRpbmcpCisgICAgeworICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtu
YW1lLCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBnZXRP
cmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlkKSB7IHJldHVybiBvcmlnaW5hbE5hbWVzLmF0KGlk
KTsgfQorICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorICAgIHRleHR1cmVCaW5kaW5nTWFwIGdldFRleHR1
cmVCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmVCaW5kaW5nczsgfQorICAgIHVuaWZv
cm1CdWZmZXJCaW5kaW5nTWFwIGdldFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0
dXJuIHVuaWZvcm1CdWZmZXJCaW5kaW5nczsgfQorICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGlu
Zyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQg
PSBzYW1wbGVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJC
aW5kaW5ncy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICB9CisgICAgc2l6ZV90IGdldFRleHR1cmVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0
byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gdGV4
dHVyZUJpbmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VW5p
Zm9ybUJ1ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgewor
ICAgICAgICBhdXRvIGl0ID0gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAg
ICAgIGlmIChpdCAhPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7Cisg
ICAgfQorICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5jbGVh
cigpOworICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZUJp
bmRpbmdzLmNsZWFyKCk7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5jbGVhcigpOwor
ICAgIH0KKworICBwcml2YXRlOgorICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsK
KyAgICBzYW1wbGVyQmluZGluZ01hcCBzYW1wbGVyQmluZGluZ3M7CisgICAgdGV4dHVyZUJpbmRp
bmdNYXAgdGV4dHVyZUJpbmRpbmdzOworICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZv
cm1CdWZmZXJCaW5kaW5nczsKK307CisKK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1
YmxpYyBUQ29tcGlsZXIKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChz
aDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
OworCisjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0
ICpnZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
KyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0UmFzdGVyaXphdGlvbkRpc2Nh
cmRFbmFibGVkQ29uc3ROYW1lKCk7CisKKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJ
RChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKyAgICBUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkgeyByZXR1cm4gJnRy
YW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247IH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB0cmFu
c2xhdGUoVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFn
bm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJU0NB
UkQgYm9vbCB0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9u
cyBjb21waWxlT3B0aW9ucyk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgc2hvdWxkRmxh
dHRlblByYWdtYVN0ZGdsSW52YXJpYW50QWxsKCkgb3ZlcnJpZGU7CisKKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpOworICAgIEFOR0xFX05PX0RJ
U0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAm
cm9vdCk7CisKKyAgICB2b2lkIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1G
aWVsZHMoc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpOworCisgICAgQU5HTEVfTk9f
RElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKAorICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdDsKKworICAgIGJvb2wg
bUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworCisgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVj
dGlvbiB0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0ge307Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0
MTE4MGE5MDA0NDIxZWJiNTMyZmYxOGMzMzRkODZhNmU2Y2RjNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKQEAgLTAsMCArMSw5NSBAQAor
Ly8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHVibGljOgorICAg
IFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAg
ICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorICAgIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChU
SW50ZXJtQWdncmVnYXRlICZjYWxsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0
IHNpemVfdCBhcmdDb3VudCA9IGNhbGxOb2RlLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgY29u
c3QgVFR5cGUgJnJldFR5cGUgID0gY2FsbE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgIGlmIChj
YWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1Nj
YWxhckJhc2ljVHlwZShyZXRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJW
ZWN0b3IoYXJnLCAwLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IDEpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAg
ID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
YXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBl
LmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDb2VyY2VTaW1wbGUocmV0VHlwZSwgU3ViVmVjdG9yKGFyZywgMCwgcmV0VHlw
ZS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
ICZhcmcgPSBHZXRBcmcoY2FsbE5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBTZXRBcmco
Y2FsbE5vZGUsIGksIENvZXJjZVNpbXBsZShyZXRUeXBlLmdldEJhc2ljVHlwZSgpLCBhcmcpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy
ZXRUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFy
Z0NvdW50ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFR5cGUgYXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmdUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXRUeXBlLmdldENvbHMoKSAhPSBhcmdUeXBlLmdldENv
bHMoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFR5cGUuZ2V0Um93cygpICE9
IGFyZ1R5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlQXJnIHRlbXBsYXRlQXJnc1tdID0ge3JldFR5cGUu
Z2V0Q29scygpLCByZXRUeXBlLmdldFJvd3MoKX07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgfQorfTsKKworfSAg
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyhU
Q29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9s
RW52KQoreworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworICAg
IGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MDM0Mjg4OWE2ZjJlNmVjYzcxNWE1Mjc1NzM4MTJjMjFlYzky
ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3Rz
LmgKQEAgLTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNUU19IXworI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZ
UEVDQVNUU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dy
YW1QcmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBZGRzIGV4cGxp
Y2l0IHR5cGUgY2FzdHMgaW50byB0aGUgQVNUIHdoZXJlIGNhc3RpbmcgaXMgZG9uZSBpbXBsaWNp
dGx5LgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE0ZWM3N2RlYmRj
ZmI3MWY1MDUzMTYzZDZhZGJiMWRhOGE0YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FzdEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDc0IEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNl
IHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCit7CisgICAgQVNTRVJUKGRl
Y2xOb2RlLmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2Rl
ID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworICAgIEFTU0VSVChjaGlsZE5vZGUpOworICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGU7CisgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGRO
b2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4geypzeW1ib2xO
b2RlLCBudWxscHRyfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaW5pdE5vZGUpOworICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9wKCkgPT0gVE9w
ZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7
CisgICAgICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIGluaXROb2RlLT5nZXRSaWdodCgpfTsKKyAg
ICB9Cit9CisKK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBhdXRv
ICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworICAgIGF1dG8gKnZhciAgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwgdHlwZSwgU3lt
Ym9sVHlwZTo6RW1wdHkpOworICAgIHJldHVybiAqdmFyOworfQorCitjb25zdCBUVmFyaWFibGUg
JnNoOjpDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5
U2l6ZXMpCit7CisgICAgYXV0byAqdHlwZSA9IG5ldyBUVHlwZSgmc3RydWN0dXJlLCBmYWxzZSk7
CisgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgaWYgKGFycmF5U2l6ZXMp
CisgICAgeworICAgICAgICB0eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKyAgICB9Cisg
ICAgYXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCB0eXBlLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK3N0YXRp
YyB2b2lkIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5j
dGlvbiAmc3JjKQoreworICAgIGlmIChzcmMuaXNEZWZpbmVkKCkpCisgICAgeworICAgICAgICBk
ZXN0LnNldERlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoc3JjLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisgICAgeworICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCk7CisgICAgfQorfQorCitUSW50ZXJtU2VxdWVuY2UgJnNoOjpDbG9uZVNlcXVlbmNlQW5kUHJl
cGVuZChjb25zdCBUSW50ZXJtU2VxdWVuY2UgJnNlcSwgVEludGVybU5vZGUgJm5vZGUpCit7Cisg
ICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIG5ld1NlcS0+cHVz
aF9iYWNrKCZub2RlKTsKKworICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisg
ICAgeworICAgICAgICBuZXdTZXEtPnB1c2hfYmFjayhvbGROb2RlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gKm5ld1NlcTsKK30KKwordm9pZCBzaDo6QWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9u
ICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYykKK3sKKyAgICBjb25zdCBzaXplX3QgcGFyYW1D
b3VudCA9IHNyYy5nZXRQYXJhbUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciA9IHNy
Yy5nZXRQYXJhbShpKTsKKyAgICAgICAgZGVzdC5hZGRQYXJhbWV0ZXIodmFyKTsKKyAgICB9Cit9
CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9s
ZEZ1bmMpCit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
TmFtZShvbGRGdW5jKSk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwg
b2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVu
Y3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3
RnVuYywgb2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0
aW9uICZzaDo6Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSkK
K3sKKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQgfHwKKyAgICAgICAgICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVh
dGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKworICAgIGF1dG8gJm5l
d0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm9sZEZ1bmMuZ2V0UmV0dXJuVHlwZSgpLCBvbGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZm
ZWN0cygpKTsKKworICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsK
KyAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcigmbmV3UGFyYW0pOworICAgIEFkZFBhcmFtZXRlcnNG
cm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK2NvbnN0
IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNv
bnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW1zKQoreworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorICAgICAgICAgICBvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBO
YW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAmbmV3RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1i
b2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9s
ZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1
bmMsIG9sZEZ1bmMpOworICAgIGZvciAoYXV0byAqcGFyYW0gOiBuZXdQYXJhbXMpCisgICAgewor
ICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJu
IG5ld0Z1bmM7Cit9CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFu
Z2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pCit7CisgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKwor
ICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRG
dW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBU
VHlwZSgmbmV3UmV0dXJuLCB0cnVlKTsKKyAgICBhdXRvICZuZXdGdW5jICAgICAgID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JldHVyblR5cGUs
IG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1
bmN0aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK1RJbnRlcm1UeXBl
ZCAmc2g6OkdldEFyZyhjb25zdCBUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgp
Cit7CisgICAgQVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgIGF1dG8g
KmFyZyA9IGNhbGwuZ2V0Q2hpbGROb2RlKGluZGV4KTsKKyAgICBBU1NFUlQoYXJnKTsKKyAgICBh
dXRvICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHRhcmcpOworICAgIHJl
dHVybiAqdGFyZzsKK30KKwordm9pZCBzaDo6U2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGws
IHNpemVfdCBpbmRleCwgVEludGVybVR5cGVkICZhcmcpCit7CisgICAgQVNTRVJUKGluZGV4IDwg
Y2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgICgqY2FsbC5nZXRTZXF1ZW5jZSgpKVtpbmRleF0g
PSAmYXJnOworfQorCitpbnQgc2g6OkdldEZpZWxkSW5kZXgoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAgICBjb25zdCBU
RmllbGRMaXN0ICZmaWVsZExpc3QgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisKKyAgICBpbnQgaSA9
IDA7CisgICAgZm9yIChURmllbGQgKmZpZWxkIDogZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAg
aWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoY29uc3QgVFZhcmlhYmxlICZz
dHJ1Y3RJbnN0YW5jZVZhciwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7Cisg
ICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0SW5zdGFuY2VW
YXIpLCBmaWVsZE5hbWUpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVElu
dGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorewor
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG9iamVjdC5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICBjb25zdCBpbnQgaW5kZXggPSBH
ZXRGaWVsZEluZGV4KCpzdHJ1Y3R1cmUsIGZpZWxkTmFtZSk7CisgICAgQVNTRVJUKGluZGV4ID49
IDApOworICAgIHJldHVybiBBY2Nlc3NGaWVsZEJ5SW5kZXgob2JqZWN0LCBpbmRleCk7Cit9CisK
K1RJbnRlcm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVkICZvYmpl
Y3QsIGludCBpbmRleCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gb2JqZWN0LmdldFR5cGUoKTsKKyAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCgwIDw9IGluZGV4KTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxk
cygpLnNpemUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisg
ICAgICAgIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICZvYmplY3QsCisgICAgICAg
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3
IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKK30KKworVEludGVybUJpbmFyeSAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxlTm9kZSwgaW50IGluZGV4KQoreworI2lm
IGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBp
bmRleGFibGVOb2RlLmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisjZW5kaWYKKworICAgIGF1dG8gKmFj
Y2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKyAgICAgICAgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdCwgJmluZGV4YWJsZU5vZGUsCisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidElu
dCkpKTsKKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKK3sKKyAgICBp
ZiAoaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gQWNjZXNzSW5kZXgobm9kZSwgKmluZGV4
KTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OlN1YlZl
Y3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAg
ICBBU1NFUlQodmVjdG9yTm9kZS5nZXRUeXBlKCkuaXNWZWN0b3IoKSk7CisgICAgQVNTRVJUKDAg
PD0gYmVnaW4pOworICAgIEFTU0VSVChlbmQgPD0gNCk7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVu
ZCk7CisgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdl
dE5vbWluYWxTaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yTm9kZTsKKyAgICB9
CisgICAgVFZlY3RvcjxpbnQ+IG9mZnNldHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBiZWdp
bikpOworICAgIHN0ZDo6aW90YShvZmZzZXRzLmJlZ2luKCksIG9mZnNldHMuZW5kKCksIGJlZ2lu
KTsKKyAgICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBv
ZmZzZXRzKTsKKyAgICByZXR1cm4gKnN3aXp6bGU7Cit9CisKK2Jvb2wgc2g6OklzU2NhbGFyQmFz
aWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFy
QmFzaWNUeXBlKHR5cGUpOworfQorCitib29sIHNoOjpJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBl
KTsKK30KKworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZs
b2F0OgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKyAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAg
ICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAg
ICByZXR1cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCkpOworfQorCitz
dGF0aWMgdm9pZCBJbml0VHlwZShUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICBhdXRvIHNpemVzID0gdHlwZS5nZXRBcnJheVNpemVzKCk7Cisg
ICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisgICAgICAgIHR5cGUubWFrZUFycmF5cyhz
aXplcyk7CisgICAgfQorfQorCitUVHlwZSAmc2g6OkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKK3sKKyAgICBhdXRvICZjbG9uZSA9ICpuZXcgVFR5cGUodHlwZSk7CisgICAgSW5pdFR5cGUo
Y2xvbmUpOworICAgIHJldHVybiBjbG9uZTsKK30KKworVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGF1dG8gJmlubmVyID0gKm5ldyBUVHlwZSh0eXBl
KTsKKyAgICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKyAgICBJbml0VHlwZShpbm5lcik7Cisg
ICAgcmV0dXJuIGlubmVyOworfQorCitUVHlwZSAmc2g6OkRyb3BDb2x1bW5zKGNvbnN0IFRUeXBl
ICZtYXRyaXhUeXBlKQoreworICAgIEFTU0VSVChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAg
IEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUobWF0cml4VHlwZSkpOworICAgIGNvbnN0IGNoYXIg
Km1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJnZlY3RvclR5cGUgPQorICAgICAg
ICAqbmV3IFRUeXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJl
Y2lzaW9uKCksIG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
bWF0cml4VHlwZS5nZXRSb3dzKCksIDEsIG1hdHJpeFR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5n
bGVkTmFtZSk7CisgICAgSW5pdFR5cGUodmVjdG9yVHlwZSk7CisgICAgcmV0dXJuIHZlY3RvclR5
cGU7Cit9CisKK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJh
eVR5cGUpCit7CisgICAgQVNTRVJUKGFycmF5VHlwZS5pc0FycmF5KCkpOworICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvICZhcnJheVNpemVzICA9
IGFycmF5VHlwZS5nZXRBcnJheVNpemVzKCk7CisKKyAgICBhdXRvICZpbm5lclR5cGUgPQorICAg
ICAgICAqbmV3IFRUeXBlKGFycmF5VHlwZS5nZXRCYXNpY1R5cGUoKSwgYXJyYXlUeXBlLmdldFBy
ZWNpc2lvbigpLCBhcnJheVR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
YXJyYXlUeXBlLmdldE5vbWluYWxTaXplKCksIGFycmF5VHlwZS5nZXRTZWNvbmRhcnlTaXplKCks
CisgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6
ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKyAgICBJbml0VHlwZShpbm5lclR5cGUpOworICAgIHJl
dHVybiBpbm5lclR5cGU7Cit9CisKK3N0YXRpYyBUVHlwZSAmU2V0VHlwZURpbXNJbXBsKGNvbnN0
IFRUeXBlICZ0eXBlLCBpbnQgcHJpbWFyeSwgaW50IHNlY29uZGFyeSkKK3sKKyAgICBBU1NFUlQo
MSA8IHByaW1hcnkgJiYgcHJpbWFyeSA8PSA0KTsKKyAgICBBU1NFUlQoMSA8PSBzZWNvbmRhcnkg
JiYgc2Vjb25kYXJ5IDw9IDQpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkp
OworICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJm5l
d1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lzaW9u
KCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbWFyeSwgc2Vjb25kYXJ5LCB0eXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOwor
ICAgIEluaXRUeXBlKG5ld1R5cGUpOworICAgIHJldHVybiBuZXdUeXBlOworfQorCitUVHlwZSAm
c2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkKK3sKKyAgICBB
U1NFUlQodHlwZS5pc1JhbmswKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKyAgICByZXR1cm4gU2V0
VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7Cit9CisKK1RUeXBlICZzaDo6U2V0TWF0cml4
Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGltKQoreworICAgIEFTU0VS
VChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0Rp
bSA8PSA0KTsKKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKG1hdHJpeFR5cGUsIG1hdHJpeFR5
cGUuZ2V0Q29scygpLCBuZXdEaW0pOworfQorCitib29sIHNoOjpIYXNNYXRyaXhGaWVsZChjb25z
dCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCit7CisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHNoOjpIYXNBcnJheUZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmll
bGRzKCkpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworVElu
dGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21Ob2RlLmdl
dFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisgICAg
QVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCghZnJvbVR5
cGUuaXNBcnJheSgpKTsKKworICAgIGlmICh0b1R5cGUgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0
cnVjdG9yKAorICAgICAgICAgICAgKm5ldyBUVHlwZSh0b1R5cGUsIGZyb21UeXBlLmdldE5vbWlu
YWxTaXplKCksIGZyb21UeXBlLmdldFNlY29uZGFyeVNpemUoKSksCisgICAgICAgICAgICBuZXcg
VEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9UeXBl
LCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9
IGZyb21Ob2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9U
eXBlKSk7CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFT
U0VSVCh0b1R5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSBmcm9tVHlwZS5nZXROb21pbmFsU2l6ZSgp
KTsKKyAgICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRT
ZWNvbmRhcnlTaXplKCkpOworICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNT
RVJUKCFmcm9tVHlwZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZS5nZXRCYXNpY1R5cGUo
KSAhPSBmcm9tVHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVl
bmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisKK1RJbnRl
cm1UeXBlZCAmc2g6OkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRv
VHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZnJvbVR5
cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBl
KHRvVHlwZSkpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5cGUpKTsKKyAg
ICBBU1NFUlQoIXRvVHlwZS5pc0FycmF5KCkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJh
eSgpKTsKKworICAgIGlmICh0b1R5cGUgPT0gZnJvbVR5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gZnJvbU5vZGU7CisgICAgfQorICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKyAgICBy
ZXR1cm4gc3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImFzX3R5cGUiLCBTeW1i
b2xUeXBlOjpCdWlsdEluKSwgdG9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSwgMSwgJnRhcmcpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDllODlmZWIwNzMyOTBhZTYxYTE2ZmUwNTIwNjQwNmMw
NzUxOGM1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgKQEAg
LTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisKKyNpbmNsdWRlIDxj
c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3Nl
dD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBjb252ZW5p
ZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KK3N0cnVj
dCBEZWNsYXJhdGlvbgoreworICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKyAgICBUSW50ZXJt
VHlwZWQgKmluaXRFeHByOyAgLy8gTm9uLW51bGwgaWZmIGRlY2xhcmF0aW9uIGlzIGluaXRpYWxp
emVkLgorfTsKKworLy8gUmV0dXJucyBhIGBEZWNsYXJhdGlvbmAgdmlldyBvZiB0aGUgZ2l2ZW4g
bm9kZS4KK0RlY2xhcmF0aW9uIFZpZXdEZWNsYXJhdGlvbihUSW50ZXJtRGVjbGFyYXRpb24gJmRl
Y2xOb2RlKTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGZvciBhIHN0cnVjdCB0eXBlLgorY29u
c3QgVFZhcmlhYmxlICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ3JlYXRlcyBhIHZh
cmlhYmxlIGZvciBhIHN0cnVjdCBpbnN0YW5jZS4KK2NvbnN0IFRWYXJpYWJsZSAmQ3JlYXRlSW5z
dGFuY2VWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyID0gVFF1YWxpZmllcjo6RXZxVGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6
ZXMgPSBudWxscHRyKTsKKworLy8gVGhlIGlucHV0IHNlcXVlbmNlIHNob3VsZCBiZSBkaXNjYXJk
ZWQgZnJvbSBBU1QgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQuCitUSW50ZXJtU2VxdWVuY2UgJkNsb25l
U2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9k
ZSAmbm9kZSk7CisKKy8vIEFwcGVuZHMgcGFyYW1ldGVycyBmcm9tIGBzcmNgIGZ1bmN0aW9uIHRv
IGBkZXN0YCBmdW5jdGlvbi4KK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0
LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uLgorY29uc3Qg
VEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2Vu
ICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rp
b24gYW5kIHByZXBlbmRzIHRoZSBwcm92aWRlZCBleHRyIHBhcmFtZXRlci4KKy8vIElmIGBpZEdl
bmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20g
dGhlIEFTVC4KK2NvbnN0IFRGdW5jdGlvbiAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQ
YXJhbSk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBl
eHRyYSBwYXJhbWV0ZXJzLgorLy8gSWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVu
Y3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZD
bG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtKTsK
KworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaXRzIHJldHVybiB0eXBlLgorLy8g
SWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJk
ZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdl
UmV0dXJuVHlwZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAm
b2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKworLy8gR2V0cyB0aGUgYXJndW1lbnQg
b2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK1RJbnRlcm1UeXBlZCAmR2V0
QXJnKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisKKy8vIFNl
dHMgdGhlIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCit2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKworLy8gUmV0dXJucyB0aGUgZmllbGQgaW5kZXggd2l0aGluIHRoZSBnaXZl
biBzdHJ1Y3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gUmV0dXJucyAtMSBpZiB0aGUg
c3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgoraW50IEdldEZpZWxkSW5k
ZXgoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZp
ZWxkTmFtZSk7CisKKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3
aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gVGhlIHZhcmlhYmxlIG11c3QgYmUgYSBzdHJ1
Y3QgaW5zdGFuY2UuCitUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUg
JnN0cnVjdEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSk7CisK
Ky8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIGZp
ZWxkIG5hbWUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGluc3RhbmNlLgorVEludGVy
bUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyAmZmllbGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVu
IG5vZGUgYnkgaXRzIGZpZWxkIGluZGV4LgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBp
bnN0YW5jZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQg
Jm9iamVjdCwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBm
b3IgdGhlIGdpdmVuIG5vZGUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGFuIGFycmF5LCB2ZWN0b3Is
IG9yIG1hdHJpeC4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5k
ZXhhYmxlTm9kZSwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRl
eCBmb3IgdGhlIGdpdmVuIG5vZGUgaWYgYGluZGV4YCBpcyBub24tbnVsbC4KKy8vIFJldHVybnMg
dGhlIG9yaWdpbmFsIG5vZGUgaWYgYGluZGV4YCBpcyBudWxsLgorLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24tbnVsbC4KK1RJ
bnRlcm1UeXBlZCAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmlu
ZGV4KTsKKworLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2Ug
cmFuZ2UuCisvLyBUaGlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vZGUgaWYgdGhlIHNsaWNlIGlz
IGFuIGlkZW50aXR5IGZvciB0aGUgbm9kZS4KK1RJbnRlcm1UeXBlZCAmU3ViVmVjdG9yKFRJbnRl
cm1UeXBlZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworLy8gTWF0Y2hlcyBz
Y2FsYXIgYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1NjYWxhckJhc2lj
VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIE1hdGNoZXMgdmVjdG9yIGJvb2wsIGludCwg
dWludCwgZmxvYXQsIGRvdWJsZS4KK2Jvb2wgSXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUg
JnR5cGUpOworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKy8v
IFR5cGUgZG9lcyBub3QgbmVlZCB0byBiZSBhIHNjYWxhci4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNU
eXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVpbnQsIGZs
b2F0LCBkb3VibGUuCitib29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOwor
CisvLyBDbG9uZXMgYSB0eXBlLgorVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7
CisKKy8vIENsb25lcyBhIHR5cGUgYW5kIGRyb3BzIGFsbCBhcnJheSBkaW1lbnNpb25zLgorVFR5
cGUgJklubmVybW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBDcmVhdGVzIGEgdmVj
dG9yIHR5cGUgYnkgZHJvcHBpbmcgdGhlIGNvbHVtbnMgb2ZmIG9mIGEgbWF0cml4IHR5cGUuCitU
VHlwZSAmRHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworCisvLyBDcmVhdGVz
IGEgdHlwZSBieSBkcm9wcGluZyB0aGUgb3V0ZXIgZGltZW5zaW9uIG9mZiBvZiBhbiBhcnJheSB0
eXBlLgorVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsK
KworLy8gQ3JlYXRlcyBhIHNjYWxhciBvciB2ZWN0b3IgdHlwZSBieSBjaGFuZ2luZyB0aGUgZGlt
ZW5zaW9ucyBvZiBhIHZlY3RvciB0eXBlLgorVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisKKy8vIENyZWF0ZXMgYSBtYXRyaXggdHlwZSBieSBjaGFu
Z2luZyB0aGUgcm93IGRpbWVuc2lvbnMgb2YgYSBtYXRyaXggdHlwZS4KK1RUeXBlICZTZXRNYXRy
aXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworCisvLyBSZXR1
cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMgYSBmaWVsZCB3aXRo
IG1hdHJpeCB0eXBlLgorYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1
Y3R1cmUpOworCisvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29u
dGFpbnMgYSBmaWVsZCB3aXRoIGFycmF5IHR5cGUuCitib29sIEhhc0FycmF5RmllbGQoY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5vZGVgIHRvIGB0b1R5
cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVpciB0eXBlcyBkaWZm
ZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKFRC
YXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKworLy8gQ29lcmNlcyBg
ZnJvbU5vZGVgIHRvIGB0b1R5cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBp
ZiB0aGVpciB0eXBlcyBkaWZmZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIG11
c3QgY29pbmNpZGUgYmV0d2VlbiB0byBhbmQgZnJvbS4KKy8vIEFycmF5IHR5cGVzIGFyZSBub3Qg
YWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUs
IFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOworCitUSW50ZXJtVHlwZWQgJkFzVHlwZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9k
ZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Db25zdGFudE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZkZGQ4NjVjN2NjNmQ1OWQ2ZmViNjU1MDQxYzdiNDkzZWVhN2Q3MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCkBAIC0wLDAgKzEsMjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNl
IHNoCit7CisKK25hbWVzcGFjZSBjb25zdGFudF9uYW1lcworeworCitjb25zdGV4cHIgTmFtZSBr
Q292ZXJhZ2VNYXNrRW5hYmxlZCgiQU5HTEVfQ292ZXJhZ2VNYXNrRW5hYmxlZCIsIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOworY29uc3RleHByIE5hbWUga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZCgiQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKwor
fSAgLy8gbmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNU
QU5UX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NWU5YTY2ZDU4YjkxODc2M2Y2NWMwZTQ0NjhiYzIy
YTYwZGU2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorCisjZGVmaW5lIExPR0lDX0VSUk9SKCkg
QVNTRVJUKGZhbHNlKQorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5r
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYWRkNzcxNDIyMGI0
MTk4YTU3MzYzMzE1OWVjNTY4N2UwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaApAQCAtMCwwICsxLDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGlv
c3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKK3sKKyAgcHVibGljOgorICAg
IFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRs
ZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorCisgICAgYm9vbCBvYnNlcnZlKGNoYXIg
YykKKyAgICB7CisgICAgICAgIGlmIChuZWVkbGVbY3VyclBvc10gPT0gYykKKyAgICAgICAgewor
ICAgICAgICAgICAgKytjdXJyUG9zOworICAgICAgICAgICAgaWYgKGN1cnJQb3MgPT0gbmVlZGxl
LnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldE5lZWRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG5lZWRsZTsgfQorCisgICAgdm9pZCByZXNldCgpIHsgY3VyclBv
cyA9IDA7IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5lZWRsZTsKKyAgICBzaXpl
X3QgY3VyclBvcyA9IDA7Cit9OworCitjbGFzcyBEZWJ1Z1NpbmsgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKK3sKKyAgcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBFc2NhcGVkU2luazsKKyAgICBjbGFz
cyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgIHsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlYnVnU2luazsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRXNjYXBlZFNpbmso
RGVidWdTaW5rICZvd25lcikgOiBtT3duZXIob3duZXIpLCBtQmVnaW4ob3duZXIuc2l6ZSgpKSB7
fQorCisgICAgICBwdWJsaWM6CisgICAgICAgIEVzY2FwZWRTaW5rKEVzY2FwZWRTaW5rICYmb3Ro
ZXIpIDogbU93bmVyKG90aGVyLm1Pd25lciksIG1CZWdpbihvdGhlci5tQmVnaW4pIHt9CisKKyAg
ICAgICAgfkVzY2FwZWRTaW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
cCA9IG1Pd25lci5jX3N0cigpOworICAgICAgICAgICAgY29uc3QgaW50IGVuZCA9IG1Pd25lci5z
aXplKCk7CisgICAgICAgICAgICBtT3duZXIub25Xcml0ZShwICsgbUJlZ2luLCBwICsgZW5kKTsK
KyAgICAgICAgfQorCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJmdldCgpIHsgcmV0dXJuIG1Pd25l
ci5tUGFyZW50OyB9CisKKyAgICAgICAgb3BlcmF0b3IgVEluZm9TaW5rQmFzZSAmKCkgeyByZXR1
cm4gZ2V0KCk7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdTaW5rICZtT3duZXI7
CisgICAgICAgIGNvbnN0IGludCBtQmVnaW47CisgICAgfTsKKworICBwdWJsaWM6CisgICAgRGVi
dWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisgICAg
ICAgIDogbVBhcmVudChwYXJlbnQpLCBtQWxzb0xvZ1RvU3Rkb3V0KGFsc29Mb2dUb1N0ZG91dCkK
KyAgICB7fQorCisgICAgdm9pZCB3YXRjaChzdGQ6OnN0cmluZyBjb25zdCAmbmVlZGxlKQorICAg
IHsKKyAgICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bU9ic2VydmVycy5lbXBsYWNlX2JhY2sobmVlZGxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgZXJhc2UoKQorICAgIHsKKyAgICAgICAgbVBhcmVudC5lcmFzZSgpOworICAgICAgICBm
b3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG9ic2VydmVyLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQg
c2l6ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0
cmluZyAmc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5zdHIoKTsgfQorCisgICAgY29uc3Qg
Y2hhciAqY19zdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LmNfc3RyKCk7IH0KKworICAgIEVz
Y2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQg
JnZhbHVlKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbVBhcmVudC5zaXpl
KCk7CisgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisgICAgICAgIGNvbnN0IHNpemVfdCBlbmQg
PSBtUGFyZW50LnNpemUoKTsKKworICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0
cigpOworICAgICAgICBvbldyaXRlKHAgKyBiZWdpbiwgcCArIGVuZCk7CisKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgb25Xcml0ZShjb25zdCBj
aGFyICpiZWdpbiwgY2hhciBjb25zdCAqZW5kKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAq
cCA9IGJlZ2luOworICAgICAgICB3aGlsZSAocCAhPSBlbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN0ZDo6Y291dCA8PCAqcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJp
bmdPYnNlcnZlciAmb2JzZXJ2ZXIgOiBtT2JzZXJ2ZXJzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvYnNlcnZlci5vYnNlcnZlKCpwKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
bmVlZGxlID0gb2JzZXJ2ZXIuZ2V0TmVlZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lk
KW5lZWRsZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91
ciBicmVha3BvaW50IGhlcmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICsrcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0
KQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgfQor
ICAgIH0KKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1QYXJlbnQ7CisgICAgc3Rk
Ojp2ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisgICAgYm9vbCBtQWxzb0xvZ1Rv
U3Rkb3V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmRmNDMwZTFhYjQxZTFiMTdlMjRk
N2Q2MjFiZjU1YzEyZWI5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2Nv
dmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1
bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIgorCit1c2luZyBuYW1l
c3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitj
bGFzcyBEaXNjb3ZlcmVyIDogcHVibGljIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXIKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZh
cmlhYmxlICYpPiAmbVZhcnM7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5j
VG9EZWY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtTm9uRGVw
RnVuY3Rpb25zOworCisgIHB1YmxpYzoKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1
bmN0aW9uICo+IG1EZXBGdW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIERpc2NvdmVyZXIoY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMsCisgICAgICAg
ICAgICAgICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmZnVuY1RvRGVmKQorICAgICAgICA6
IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUpLCBt
VmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisgICAge30KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAg
ICAgaWYgKCFtVmFycyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oc3ltYm9sTm9kZSk7CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIG1E
ZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQcmVWaXNpdCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAg
ICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rp
b25zLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBpdCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQg
PT0gbUZ1bmNUb0RlZi5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24g
YXNzdW1lcyAoZGlyZWN0IGFuZCBtdXR1YWwpIHJlY3Vyc2lvbiBpcyBwcm9oaWJpdGVkLgorICAg
ICAgICAgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlID0gKml0
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVw
RnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVCht
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uKGFnZ3JlZ2F0ZU5vZGUpOworICAgICAgICAgICAgQVNTRVJUKG93bmVy
KTsKKyAgICAgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQ
b3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQo
ZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtTm9u
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZXBG
dW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtTm9uRGVwRnVuY3Rpb25zLmluc2VydChmdW5jKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6
OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IHNoOjpEaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucygKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgY29uc3Qgc3RkOjpmdW5jdGlv
bjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCit7CisgICAgY29uc3QgRnVuY3Rpb25U
b0RlZmluaXRpb24gZnVuY1RvRGVmID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhyb290KTsK
KyAgICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKyAgICByb290LnRy
YXZlcnNlKCZkaXNjb3ZlcmVyKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKGRpc2NvdmVyZXIubURl
cEZ1bmN0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVkMWJmMjdjOTBjYWIwNmMzYzE4YWUxNDBhZGM4Mzc1ZTJkZGMxNWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
aApAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVS
REVQRU5ERU5URlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorQU5HTEVf
Tk9fRElTQ0FSRCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IERpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBz
dGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjJkMzkwZTc5NWRiMWI3ZjMzY2JkODQ1YWY3NjEyNTdlN2UwZTBmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApA
QCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW5WaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9z
dFZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKyAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIocHJlVmlzaXRfLCBpblZpc2l0XywgcG9zdFZpc2l0Xywgc3ltYm9s
VGFibGUpCit7fQorCitjb25zdCBURnVuY3Rpb24gKkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKworICAgIHVu
c2lnbmVkIGhlaWdodCA9IDA7CisgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdl
dEFuY2VzdG9yTm9kZShoZWlnaHQpKQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gYW5jZXN0b3ItPmdldEFzRnVuY3Rpb25EZWZpbml0
aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICArK2hlaWdodDsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2lu
Z0Z1bmN0aW9uVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2IyYWEwMDE0YTAwNDkzODZlMmE3ZjZkNzkz
MmQ5YjI3M2M0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNs
b3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJF
TkNMT1NJTkdGVU5DVElPTlRSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2
ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQg
c3VwcG9ydHMgZGlzY292ZXJ5IG9mIHRoZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyB0by4KK2Ns
YXNzIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcihib29sIHByZVZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpblZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwb3N0VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cik7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyBpbnNpZGUuCisgICAgLy8gUmV0dXJucyBudWxsIGlm
IHRoZSBub2RlIGRvZXMgbm90IGJlbG9uZyBpbnNpZGUgYSBmdW5jdGlvbi4KKyAgICBjb25zdCBU
RnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJTkdGVU5DVElPTlRSQVZFUlNF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRW1pdE1ldGFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJkZDNmY2QzN2E3YWMzZDBlNjEzNjAwYjVl
OWNhODA4ZTMwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5j
cHAKQEAgLTAsMCArMSwyNDU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2lu
Y2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3Ry
aW5nQnVpbGRlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FT
U0VSVFMpCit1c2luZyBTaW5rID0gRGVidWdTaW5rOworI2Vsc2UKK3VzaW5nIFNpbmsgPSBUSW5m
b1NpbmtCYXNlOworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFj
ZQoreworCitzdHJ1Y3QgVmFyRGVjbAoreworICAgIGV4cGxpY2l0IFZhckRlY2woY29uc3QgVFZh
cmlhYmxlICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpLCBtSXNGaWVsZChmYWxzZSkge30KKyAgICBl
eHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1J
c0ZpZWxkKHRydWUpIHt9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYXJpYWJsZSgpKTsKKyAgICAg
ICAgcmV0dXJuICptVmFyaWFibGU7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGNvbnN0IFRG
aWVsZCAmZmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmllbGQoKSk7Cisg
ICAgICAgIHJldHVybiAqbUZpZWxkOworICAgIH0KKworICAgIEFOR0xFX0lOTElORSBib29sIGlz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhbUlzRmllbGQ7IH0KKworICAgIEFOR0xFX0lOTElO
RSBib29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBtSXNGaWVsZDsgfQorCisgICAgY29uc3Qg
VFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50eXBlKCkg
OiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorCisgICAgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBmaWVsZCgpLnN5bWJvbFR5
cGUoKSA6IHZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpOworICAgIH0KKworICBwcml2YXRlOgorICAg
IHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKm1WYXJpYWJsZTsKKyAgICAg
ICAgY29uc3QgVEZpZWxkICptRmllbGQ7CisgICAgfTsKKyAgICBib29sIG1Jc0ZpZWxkOworfTsK
KworY2xhc3MgR2VuTWV0YWxUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorewor
ICBwdWJsaWM6CisgICAgfkdlbk1ldGFsVHJhdmVyc2VyKCkgb3ZlcnJpZGU7CisKKyAgICBHZW5N
ZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgIFNpbmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVj
dHMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudik7CisKKyAgICB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFRlcm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlz
aXRJZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uUHJvdG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZTsKKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7
CisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikg
b3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJy
aWRlOworICAgIGJvb2wgdmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICopOworICAgIGJvb2wgdmlz
aXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdERvV2hpbGVMb29wKFRJ
bnRlcm1Mb29wICopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
Kikgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICB1c2luZyBGdW5jVG9OYW1lID0gc3RkOjpt
YXA8SW1tdXRhYmxlU3RyaW5nLCBOYW1lPjsKKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1
bmNUb05hbWUoKTsKKworICAgIHN0cnVjdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZwor
ICAgIHsKKyAgICAgICAgYm9vbCBpc1BhcmFtZXRlciAgICAgICAgICAgICAgICA9IGZhbHNlOwor
ICAgICAgICBib29sIGlzTWFpblBhcmFtZXRlciAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAg
IGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBp
c1BhY2tlZCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGRpc2FibGVT
dHJ1Y3RTcGVjaWZpZXIgICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNQb2ludGVyICAgPSBudWxscHRyOworICAgICAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVm
ZXJlbmNlID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgc3RydWN0IEVtaXRUeXBlQ29uZmlnCisg
ICAgeworICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29u
ZmlnID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKyAg
ICB2b2lkIGVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpOworICAg
IHZvaWQgZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAgdm9p
ZCBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKTsKKworICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVj
dCk7CisgICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisgICAgdm9p
ZCBlbWl0TmFtZU9mKGNvbnN0IFZhckRlY2wgJm9iamVjdCk7CisKKyAgICB2b2lkIGVtaXRCYXJl
VHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisgICAgdm9pZCBlbWl0VHlwZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVD
b25maWcgJmV0Q29uZmlnKTsKKyAgICB2b2lkIGVtaXRQb3N0UXVhbGlmaWVyKGNvbnN0IEVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFF1YWxpZmllciBxdWFsaWZpZXIpOworCisgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlv
bkluZGljZXMKKyAgICB7CisgICAgICAgIHNpemVfdCBhdHRyaWJ1dGUgPSAwOworICAgICAgICBz
aXplX3QgY29sb3IgICAgID0gMDsKKyAgICB9OworCisgICAgdm9pZCBlbWl0RmllbGREZWNsYXJh
dGlvbihjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSAmcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmllbGRBbm5vdGF0aW9uSW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKyAgICB2b2lkIGVtaXRTdHJ1Y3REZWNsYXJh
dGlvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCBlbWl0T3JkaW5hcnlWYXJpYWJsZURl
Y2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRD
b25maWcpOworICAgIHZvaWQgZW1pdFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAm
ZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpOworCisgICAgdm9pZCBlbWl0T3BlbkJyYWNl
KCk7CisgICAgdm9pZCBlbWl0Q2xvc2VCcmFjZSgpOworCisgICAgdm9pZCBncm91cGVkVHJhdmVy
c2UoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVs
ZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICZpbmRleCk7CisgICAgY29u
c3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJtVHlwZWQgJmZpZWxkc05vZGUs
IFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpl
bWl0Q29uc3RhbnRVbmlvbkFycmF5KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVu
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBzaXplKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29uc3Rh
bnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5p
b24pOworCisgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50VW5pb24g
KmNvbnN0IGNvbnN0VW5pb24pOworCisgIHByaXZhdGU6CisgICAgU2luayAmbU91dDsKKyAgICBj
b25zdCBUQ29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJm1Q
aXBlbGluZVN0cnVjdHM7CisgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAg
U3ltYm9sRW52ICZtU3ltYm9sRW52OworICAgIElkR2VuICZtSWRHZW47CisgICAgaW50IG1JbmRl
bnRMZXZlbCAgICAgICAgPSAtMTsKKyAgICBpbnQgbUxhc3RJbmRlbnRhdGlvblBvcyA9IC0xOwor
ICAgIGJvb2wgbVBhcmVudElzU3dpdGNoICAgID0gZmFsc2U7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1ib2xzOworICAgIGNvbnN0IEZ1
bmNUb05hbWUgbUZ1bmNUb05hbWUgICA9IEJ1aWxkRnVuY1RvTmFtZSgpOworICAgIHNpemVfdCBt
TWFpblRleHR1cmVJbmRleCAgICAgICA9IDA7CisgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4
ICAgICAgID0gMDsKKyAgICBzaXplX3QgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPSByeDo6bXRs
OjprRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4OworfTsKKworfSAgLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKK3sKKyAg
ICBBU1NFUlQobUluZGVudExldmVsID09IC0xKTsKKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRj
aCk7Cit9CisKK0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29t
cGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp
bmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVT
dHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICA6IFRJbnRlcm1UcmF2
ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgIG1PdXQob3V0KSwKKyAgICAgIG1Db21w
aWxlcihjb21waWxlciksCisgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisgICAgICBtSW52YXJpYW50cyhpbnZhcmlhbnRzKSwKKyAgICAgIG1TeW1ib2xFbnYoc3ltYm9s
RW52KSwKKyAgICAgIG1JZEdlbihpZEdlbikKK3t9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXRJbmRlbnRhdGlvbigpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAwKTsKKwor
ICAgIGlmIChtTGFzdEluZGVudGF0aW9uUG9zID09IG1PdXQuc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorICAgIH0KKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisgICAgeworICAgICAgICBtT3V0
IDw8ICIgICI7CisgICAgfQorCisgICAgbUxhc3RJbmRlbnRhdGlvblBvcyA9IG1PdXQuc2l6ZSgp
OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqR2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1
bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICphcmdUeXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqYXJnVHlwZTEgPSBudWxscHRyKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgICAgICByZXR1cm4gIiwiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICI9
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgICAgICBy
ZXR1cm4gIj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11
bEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIlPSI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBy
ZXR1cm4gIjw8PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRp
bmcuCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAg
ICAgICAgICAgcmV0dXJuICI+Pj0iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1l
dGljIHNoaWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJ8PSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICByZXR1cm4gIisi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgcmV0dXJuICIt
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgICAgIHJldHVybiAi
KiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICByZXR1cm4g
Ii8iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgICAgIHJldHVy
biAiJSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAg
ICAgICByZXR1cm4gIjw8IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBz
aGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisgICAg
ICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRp
YyBzaGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmQ6CisgICAg
ICAgICAgICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhv
cjoKKyAgICAgICAgICAgIHJldHVybiAiXiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlT3I6CisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAi
PD0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAg
ICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5D
b21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJu
ICI8PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsQ29tcG9u
ZW50V2lzZToKKyAgICAgICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgIHJldHVy
biAifHwiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiIT0vKnhvciovIjsgIC8vIFhYWDogVGhpcyBtaWdodCBuZWVkIHRvIGJlIGhh
bmRsZWQgZGlmZmVyZW50bHkgZm9yIHNvbWUgb2J0dXNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB1c2UgY2FzZS4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6CisgICAgICAgICAgICByZXR1cm4gIiYmIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BM
b2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICIhIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgICAgICByZXR1
cm4gIn4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3Jl
bWVudDoKKyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlSW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIi0tIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICByZXR1cm4g
Iio9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4g
Ij09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToK
KyAgICAgICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BF
cXVhbDoKKyAgICAgICAgICAgIGlmICgoYXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEt
PmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAm
JiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5p
c0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuICI9PSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFs
OgorICAgICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNW
ZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdU
eXBlMS0+aXNBcnJheSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkFOR0xFX25vdEVxdWFsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFy
Z1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3RFcXVhbFN0cnVjdCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wS2lsbDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAi
a2lsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKyAgICAg
ICAgICAgIHJldHVybiAiYnJlYWsiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGlu
dWU6CisgICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUmFkaWFuczoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfcmFkaWFucyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVzOgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9kZWdyZWVzIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX2F0YW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9tb2QiOyAgLy8gZGlmZmVycyBmcm9tIG1ldGFs
Ojptb2QKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZnJhY3Q6CisgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFu
Y2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2Rpc3RhbmNlIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbGVuZ3RoIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERvdDoKKyAgICAgICAgICAgIHJldHVybiAiQU5H
TEVfZG90IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiQU5HTEVfbm9ybWFsaXplIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZhY2Vmb3J3YXJkOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9mYWNlZm9yd2FyZCI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9yZWZsZWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBv
bmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBs
eSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAg
ICByZXR1cm4gIkFOR0xFX291dGVyUHJvZHVjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTaWduOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWduIjsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWJzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbnk6CisgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjphbnkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6c2luIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BUYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp0YW4iOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmFjb3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnNpbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29z
aDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wVGFuaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbmgiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjph
c2luaCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zaDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmFjb3NoIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgor
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YXRhbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRm1hOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zm1hIjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFBvdzoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjpleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cDIiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZzI6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2cyIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzcXJ0IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6Zmxvb3IiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisgICAgICAgICAg
ICByZXR1cm4gIm1ldGFsOjp0cnVuYyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWls
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2VpbCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGcmFjdDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyYWN0IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1pbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1p
biI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjptYXgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
ICAgICByZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BS
b3VuZEV2ZW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyaW50IjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2xhbXAi
OyAgLy8gVE9ETyBmYXN0IHZzIHByZWNpc2UgbmFtZXNwYWNlCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNaXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnN0ZXAi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnNtb290aHN0ZXAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
ZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSXNuYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc25hbiI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmlzaW5mIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExkZXhwOgorICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6bGRleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRnJleHA6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpmcmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbnZlcnNlc3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJzcXJ0IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OmRmZHgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZk
eToKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRmZHkiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRndpZHRoOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnRyYW5zcG9zZSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFu
dDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRldGVybWluYW50IjsKKworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfaW52
ZXJzZSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BV
aW50Qml0c1RvRmxvYXQ6CisgICAgICAgIHsKKyNkZWZpbmUgUkVUVVJOX0FTX1RZUEUocG9zdCkg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHJlc3VsdFR5cGUuZ2V0QmFzaWNUeXBl
KCkpICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQiIHBvc3QgIj4iOyAgIFwKKyAg
ICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAorICAgICAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImFzX3R5cGU8ZmxvYXQiIHBvc3QgIj4iOyBcCisgICAgICAgICAgICBkZWZhdWx0OiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRPRE8oKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRv
cl9UT0RPIjsgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHdoaWxlIChmYWxzZSkKKworICAgICAgICAgICAgaWYgKHJlc3Vs
dFR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
QVNfVFlQRSgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRU
eXBlLmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQ
RSgiMiIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fQVNfVFlQRSgiMyIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiNCIpOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9E
TyI7CisgICAgICAgICAgICB9CisKKyN1bmRlZiBSRVRVUk5fQVNfVFlQRQorICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtMngxNiI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFj
a19mbG9hdF90b19zbm9ybTJ4MTYiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNr
VW5vcm00eDg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3Jt
NHg4IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTR4ODoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19z
bm9ybTJ4MTZfdG9fZmxvYXQiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tV
bm9ybTR4ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja191bm9ybTR4OF90b19m
bG9hdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4ODoKKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTR4OF90b19mbG9hdCI7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAi
QU5HTEVfcGFja19oYWxmXzJ4MTYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNr
SGFsZjJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkUmV2ZXJzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEZpbmRNU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVW11bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11
bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyQXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1v
cnlCYXJyaWVySW1hZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
U2hhcmVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXRvbWljT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNY
b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2
ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFVucGFja0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0
aDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29uc3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1
bmN0aW9uSW5BU1Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdG
dW5jdGlvbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxCdWlsdEluRnVuY3Rpb246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisjaWYgMAorc3RhdGljIGludCBHZXRPcGVyYXRv
clByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiAxNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlT3JBc3NpZ246IHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxBbmQ6IHsKKyAgICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3I6IHsKKyAgICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworICAgICAgICAgICAg
cmV0dXJuIDExOworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDEwOwor
ICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdy
ZWF0ZXJUaGFuRXF1YWw6IHsKKyAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICB9IGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisgICAgICAgICAgICByZXR1cm4gNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOiB7CisgICAgICAgICAgICByZXR1cm4gNjsKKyAg
ICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1v
ZDogeworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVu
dDogeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQb3N0RGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfSBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK25hbWVzcGFjZQoreworCitl
bnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKK3sKKyAgICBOb25lLAorICAgIExlZnQsCisgICAgUmln
aHQsCit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworc3RhdGljIEFzc29jaWF0aXZp
dHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BTdWI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
R3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lh
dGl2aXR5OjpMZWZ0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0
TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0
aXZpdHk6OlJpZ2h0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZURlY3JlbWVudDogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5v
bmU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VE9ETygpOworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7CisgICAgICAg
IH0KKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgSXNTeW1ib2xpY09wZXJhdG9yKFRP
cGVyYXRvciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
cmVzdWx0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFy
Z1R5cGUxID0gbnVsbHB0cikKK3sKKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gIXN0ZDo6aXNhbG51bShHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgYXJn
VHlwZTAsIGFyZ1R5cGUxKVswXSk7Cit9CisKK3N0YXRpYyBUSW50ZXJtQmluYXJ5ICpBc1NwZWNp
ZmljQmluYXJ5Tm9kZShUSW50ZXJtTm9kZSAmbm9kZSwgVE9wZXJhdG9yIG9wKQoreworICAgIFRJ
bnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlm
IChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkg
PT0gb3AgPyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3N0YXRpYyBib29sIFBhcmVudGhlc2l6ZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAg
ICBpZiAobm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFz
U3dpenpsZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisg
ICAgeworICAgICAgICAvLyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5
IHJ1bGVzIGluc3RlYWQgb2YgdGhpcyBhZC1ob2MgaW1wbC4KKyAgICAgICAgY29uc3QgVFR5cGUg
JnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUgICAgPSB1bmFyeU5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpOworICAgICAg
ICByZXR1cm4gSXNTeW1ib2xpY09wZXJhdG9yKHVuYXJ5Tm9kZS0+Z2V0T3AoKSwgcmVzdWx0VHlw
ZSwgJmFyZ1R5cGUpOworICAgIH0KKworICAgIGlmIChUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2Rl
ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBh
IHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhv
YyBpbXBsLgorICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLT5nZXRPcCgp
OworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFyeU5vZGUt
PmdldExlZnQoKSk7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQXNTcGVjaWZpY0JpbmFyeU5vZGUoKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCksIFRP
cGVyYXRvcjo6RU9wQ29tbWEpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+
Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmlu
YXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJpZ2h0VHlwZSAgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIElzU3ltYm9saWNPcGVyYXRvcihiaW5hcnlOb2RlLT5nZXRPcCgp
LCByZXN1bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBjb25zdCBi
b29sIGVtaXRQYXJlbnMgPSBQYXJlbnRoZXNpemUobm9kZSk7CisKKyAgICBpZiAoZW1pdFBhcmVu
cykKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIigiOworICAgIH0KKworICAgIG5vZGUudHJhdmVy
c2UodGhpcyk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAgICB7CisgICAgICAgIG1PdXQgPDwg
IikiOworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2ws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUUXVhbGlm
aWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICB7CisgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxRnJhZ0Nvb3JkOgorICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9zaXRpb25dXSI7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50U2l6ZToK
KyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAg
aWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAg
ICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfY29vcmRdXSI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250
RmFjaW5nOgorICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZnJvbnRfZmFjaW5nXV0iOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNJbnZhcmlhbnQgPQor
ICAgICAgICBkZWNsLmlzRmllbGQoKSA/IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wuZmllbGQo
KSkgOiBtSW52YXJpYW50cy5jb250YWlucyhkZWNsLnZhcmlhYmxlKCkpOworCisgICAgaWYgKGlz
SW52YXJpYW50KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgRW1pdE5hbWUoU2luayAmb3V0LCBjb25zdCBOYW1lICZuYW1l
KQoreworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgRGVidWdTaW5rOjpF
c2NhcGVkU2luayBlc2NhcGVkT3V0KG91dC5lc2NhcGUoKSk7CisjZWxzZQorICAgIFRJbmZvU2lu
a0Jhc2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisjZW5kaWYKKyAgICBuYW1lLmVtaXQoZXNjYXBlZE91
dCk7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVEZpZWxk
ICZvYmplY3QpCit7CisgICAgRW1pdE5hbWUobU91dCwgTmFtZShvYmplY3QpKTsKK30KKwordm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBUU3ltYm9sICZvYmplY3QpCit7
CisgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworICAgIGlmIChp
dCA9PSBtUmVuYW1lZFN5bWJvbHMuZW5kKCkpCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0
LCBOYW1lKG9iamVjdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFbWl0TmFt
ZShtT3V0LCBpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXROYW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNG
aWVsZCgpKQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQoKSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yob2JqZWN0LnZhcmlhYmxlKCkp
OworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEJhcmVUeXBlTmFtZShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmlnKQoreworICAg
IGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IHN3aXRjaCAoYmFzaWNUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRW
b2lkOgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1P
dXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAg
ICAgICAgICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludGVyZmFjZUJsb2NrOgorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgIGVtaXROYW1lT2YoaW50ZXJm
YWNlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoYmFzaWNUeXBlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29u
ZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgR2V0VGV4dHVyZVR5cGVOYW1lKGJhc2ljVHlw
ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3lt
Ym9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dE5hbWVPZihlbnYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVt
aXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcp
Cit7CisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlmIChldmRDb25m
aWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpl
dmRDb25maWcuaXNQb2ludGVyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGV2ZENvbmZpZy5pc1JlZmVyZW5jZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiQU5HTEVfdGVuc29yPCI7CisgICAgfQor
CisgICAgaWYgKHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAg
ICAgICBtT3V0IDw8ICJtZXRhbDo6IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisgICAgeworICAgICAgICBtT3V0
IDw8ICJwYWNrZWRfIjsKKyAgICB9CisKKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIGV0Q29u
ZmlnKTsKKworICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBtT3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCB0eXBlLmdldENvbHMoKSA8PCAieCIgPDwgdHlw
ZS5nZXRSb3dzKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbU91dCA8PCAiLCAiIDw8IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgbU91
dCA8PCAiPiI7CisgICAgfQorCisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAg
ICAgIGlmIChldmRDb25maWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0
IDw8ICIgKiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJl
bmNlKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgJiI7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNv
bnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9u
SW5kaWNlcykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gKmZpZWxkLnR5cGUoKTsK
KyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBldmRDb25maWcu
ZW1pdFBvc3RRdWFsaWZpZXIgICAgICA9IHRydWU7CisgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1
Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGV2ZENvbmZpZy5pc1BhY2tlZCAgICAgICAgICAgICAg
ID0gbVN5bWJvbEVudi5pc1BhY2tlZChmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUG9pbnRlciAg
ICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihmaWVsZCk7CisgICAgZXZkQ29uZmln
LmlzUmVmZXJlbmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsK
KyAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKGZpZWxkKSwgZXZkQ29uZmlnKTsK
KworICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAg
c3dpdGNoIChxdWFsKQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46
CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLmV4dGVybmFsID09
ICZwYXJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0RhdGE6CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5l
eHRlcm5hbCA9PSAmcGFyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgo
dHlwZS5pc1ZlY3RvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICBiYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgIHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOgorICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGdlbmVyYWwgYW5kIG5lZWRzIGEgcmVpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0
IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisgICAgICAg
ICAgICAgICAgICAgIC8vIFNlZSA0LjMuOC4yCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5HTC9zcGVjcy9lcy8zLjAvR0xTTF9FU19T
cGVjaWZpY2F0aW9uXzMuMDAucGRmCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwg
IiBbW2NvbG9yKCIgPDwgaW5kZXggPDwgIildXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFGcmFnRGVwdGg6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1tkZXB0aChhbnkpXV0iOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0
dHJpYnV0ZUluZGV4TWFwKAorICAgIGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgY29u
c3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJnN0cnVjdHVyZSkKK3sKKyAgICBBU1NFUlQo
c3RydWN0dXJlLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJz
ICAgICA9IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qgc2hhZGVy
VmFyU2l6ZSA9IHNoYWRlclZhcnMuc2l6ZSgpOworICAgIHNpemVfdCBzaGFkZXJWYXJJbmRleCAg
ICAgID0gMDsKKworICAgIGNvbnN0IGF1dG8gJmV4dGVybmFsRmllbGRzID0gc3RydWN0dXJlLmV4
dGVybmFsLT5maWVsZHMoKTsKKyAgICBjb25zdCBzaXplX3QgZXh0ZXJuYWxTaXplICA9IGV4dGVy
bmFsRmllbGRzLnNpemUoKTsKKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisK
KyAgICBjb25zdCBhdXRvICZpbnRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5pbnRlcm5hbC0+Zmll
bGRzKCk7CisgICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5z
aXplKCk7CisgICAgc2l6ZV90IGludGVybmFsSW5kZXggICAgICAgPSAwOworCisgICAgLy8gSW50
ZXJuYWwgZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGlt
ZXMgc3BsaXQuCisgICAgQVNTRVJUKGV4dGVybmFsU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworCisg
ICAgLy8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorICAg
IEFTU0VSVChzaGFkZXJWYXJTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisgICAgc2l6ZV90IGF0
dHJpYnV0ZUluZGV4ID0gMDsKKworICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxT
aXplKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZpbnRlcm5hbEZpZWxkID0gKmludGVy
bmFsRmllbGRzW2ludGVybmFsSW5kZXhdOworICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFt
ZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworICAgICAgICBjb25zdCBUVHlwZSAmaW50ZXJu
YWxUeXBlICAgPSAqaW50ZXJuYWxGaWVsZC50eXBlKCk7CisgICAgICAgIHdoaWxlIChpbnRlcm5h
bE5hbWUucmF3TmFtZSgpICE9IHNoYWRlclZhcnNbc2hhZGVyVmFySW5kZXhdLm5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluYWN0aXZlIGZp
ZWxkLgorCisgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworICAgICAgICAgICAgQVNTRVJU
KHNoYWRlclZhckluZGV4IDwgc2hhZGVyVmFyU2l6ZSk7CisKKyAgICAgICAgICAgICsrYXR0cmli
dXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRl
ciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVf
dCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29scygp
IDogMTsKKworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZleHRlcm5hbEZpZWxkID0gKmV4dGVybmFs
RmllbGRzW2V4dGVybmFsSW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmFtZSBleHRlcm5hbE5h
bWUgICAgID0gTmFtZShleHRlcm5hbEZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVCghZXh0ZXJu
YWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworCisgICAgICAgICAgICBleHRlcm5hbE5hbWVU
b0F0dHJpYnV0ZUluZGV4W2V4dGVybmFsTmFtZV0gPSBhdHRyaWJ1dGVJbmRleDsKKworICAgICAg
ICAgICAgKytleHRlcm5hbEluZGV4OworICAgICAgICAgICAgKythdHRyaWJ1dGVJbmRleDsKKyAg
ICAgICAgfQorCisgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICsraW50ZXJuYWxJ
bmRleDsKKyAgICB9CisKKyAgICBBU1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6
ZSk7CisgICAgQVNTRVJUKGV4dGVybmFsSW5kZXggPD0gZXh0ZXJuYWxTaXplKTsgIC8vIGxlc3Mg
dGhhbiBpZiBwYWRkaW5nIHdhcyBpbnRyb2R1Y2VkCisgICAgQVNTRVJUKGludGVybmFsSW5kZXgg
PT0gaW50ZXJuYWxTaXplKTsKKworICAgIHJldHVybiBleHRlcm5hbE5hbWVUb0F0dHJpYnV0ZUlu
ZGV4OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QXR0cmlidXRlRGVjbGFyYXRp
b24oY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNl
cykKK3sKKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisgICAg
ZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworICAgIG1PdXQgPDwgIiBb
W2F0dHJpYnV0ZSgiIDw8IGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSsrIDw8ICIpXV0iOwor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3Qg
VFR5cGUgJnR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2lj
VHlwZTo6RWJ0U3RydWN0KTsKKyAgICBBU1NFUlQodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgIG1PdXQgPDwgInN0cnVjdCAiOworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwge30p
OworCisgICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRPcGVuQnJhY2UoKTsKKworICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAgIHN0ZDo6bWFw
PE5hbWUsIHNpemVfdD4gZmllbGRUb0F0dHJpYnV0ZUluZGV4OworICAgIGNvbnN0IGJvb2wgaGFz
QXR0cmlidXRlSW5kaWNlcyAgICAgICAgICAgPSBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluLmV4
dGVybmFsID09ICZzdHJ1Y3R1cmU7CisgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmli
dXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisKKyAgICBp
ZiAoaGFzQXR0cmlidXRlSW5kaWNlcykKKyAgICB7CisgICAgICAgIGZpZWxkVG9BdHRyaWJ1dGVJ
bmRleCA9CisgICAgICAgICAgICBCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXAobUNvbXBp
bGVyLCBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluKTsKKyAgICB9CisKKyAgICBGaWVsZEFubm90
YXRpb25JbmRpY2VzIGFubm90YXRpb25JbmRpY2VzOworCisgICAgZm9yIChjb25zdCBURmllbGQg
KmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgZW1pdEluZGVudGF0
aW9uKCk7CisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgq
ZmllbGQpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZW5k
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xU
eXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGZpZWxkLT5uYW1lKCkuYmVnaW5zV2l0aCgiXyIpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYW5nbGU6OkVuZHNXaXRoKGZpZWxkLT5uYW1lKCkuZGF0YSgpLCAiX3BhZCIpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3Rh
dGlvbkluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+c3ltYm9sVHlwZSgpICE9IFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpZWxkLT5u
YW1lKCkuYmVnaW5zV2l0aCgiXyIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6
RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAgICAgICAgICAg
IGlmICghcmVjbGFpbVVudXNlZEF0dHJpYnV0ZUluZGljZXMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0QXR0cmlidXRlRGVj
bGFyYXRpb24oKmZpZWxkLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RmllbGREZWNs
YXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworICAgICAgICB9
CisgICAgICAgIG1PdXQgPDwgIjtcbiI7CisgICAgfQorCisgICAgaWYgKCFtUGlwZWxpbmVTdHJ1
Y3RzLm1hdGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKyAgICB7CisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcudHJlYXRT
YW1wbGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisgICAgICAgIExheW91dCBsYXlvdXQgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlvdXRDb25maWcpOwor
ICAgICAgICBzaXplX3QgcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxheW91dC5z
aXplT2YgJSAxNjsKKyAgICAgICAgaWYgKHBhZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKyAgICAg
ICAgICAgIEVtaXROYW1lKG1PdXQsIG1JZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKSk7CisgICAg
ICAgICAgICBtT3V0IDw8ICJbIiA8PCBwYWQgPDwgIl07XG4iOworICAgICAgICB9CisgICAgfQor
CisgICAgZW1pdENsb3NlQnJhY2UoKTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKyAgICBjb25zdCBWYXJEZWNsICZkZWNsLAor
ICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpCit7Cisg
ICAgRW1pdFR5cGVDb25maWcgZXRDb25maWc7CisgICAgZXRDb25maWcuZXZkQ29uZmlnID0gJmV2
ZENvbmZpZzsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC50eXBlKCk7CisgICAgZW1p
dFR5cGUodHlwZSwgZXRDb25maWcpOworCisgICAgaWYgKGRlY2wuc3ltYm9sVHlwZSgpICE9IFN5
bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIGVt
aXROYW1lT2YoZGVjbCk7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
VmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZykKK3sKKyAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5
cGUgPSBkZWNsLnN5bWJvbFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAg
PSBkZWNsLnR5cGUoKTsKKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSAgPSB0eXBlLmdl
dEJhc2ljVHlwZSgpOworCisgICAgc3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidFN0cnVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5
cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSAmJiAhZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZp
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQ
YXJhbWV0ZXIpOworICAgICAgICAgICAgICAgIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbih0eXBlKTsK
KyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAg
ICAgICAgICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBlbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wsIGV2ZENvbmZpZyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6
RW1wdHkgfHwgZXZkQ29uZmlnLmlzUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVtaXRPcmRpbmFy
eVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIpCisgICAgeworICAgICAgICBl
bWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSkKK3sKKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5v
ZGUtPnZhcmlhYmxlKCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgp
OworCisgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOwor
CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCkKKyAg
ICB7CisgICAgICAgIG1PdXQgPDwgIi8qIjsKKyAgICAgICAgZW1pdE5hbWVPZih2YXIpOworICAg
ICAgICBtT3V0IDw8ICIqLyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXRO
YW1lT2YodmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTaW5n
bGVDb25zdGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RVbmlvbikKK3sKKyAg
ICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAoY29uc3RV
bmlvbi0+Z2V0QkNvbnN0KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorICAgICAgICB7
CisgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpIDw8ICJmIjsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidElu
dDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3Qo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6
OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0
VUNvbnN0KCkgPDwgInUiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3Rh
bnRVbmlvbkFycmF5KAorICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9u
LAorICAgIGNvbnN0IHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpj
b25zdFVuaW9uSXRlcmF0ZWQgPSBjb25zdFVuaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKyAgICB7CisgICAgICAgIGVtaXRT
aW5nbGVDb25zdGFudChjb25zdFVuaW9uSXRlcmF0ZWQpOworCisgICAgICAgIGlmIChpICE9IHNp
emUgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKK30KKworY29uc3QgVENvbnN0
YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlw
ZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb25CZWdpbikKK3sKKyAg
ICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47
CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlICAgICAgICAgID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRW1pdFR5cGVDb25maWcg
Y29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07CisgICAgICAgIGVtaXRUeXBlKHR5cGUs
IGNvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgInsiOworICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgY29uc3RV
bmlvbkN1cnIgICAgICAgICA9IGVtaXRDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5p
b25DdXJyKTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtT3V0IDw8ICJ9IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9v
bCB3cml0ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVs
bHB0cn07CisgICAgICAgICAgICBlbWl0VHlwZSh0eXBlLCBjb25maWcpOworICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3RVbmlvbkN1cnIgPSBlbWl0Q29u
c3RhbnRVbmlvbkFycmF5KGNvbnN0VW5pb25DdXJyLCBzaXplKTsKKyAgICAgICAgaWYgKHdyaXRl
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25DdXJyOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0VmFsdWVO
b2RlKQoreworICAgIGVtaXRDb25zdGFudFVuaW9uKGNvbnN0VmFsdWVOb2RlLT5nZXRUeXBlKCks
IGNvbnN0VmFsdWVOb2RlLT5nZXRDb25zdGFudFZhbHVlKCkpOworfQorCitib29sIEdlbk1ldGFs
VHJhdmVyc2VyOjp2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICpzd2l6emxlTm9k
ZSkKK3sKKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkpOwor
ICAgIG1PdXQgPDwgIi4iOworCisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VS
VFMpCisgICAgICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91dChtT3V0LmVzY2Fw
ZSgpKTsKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5nZXQoKTsKKyNl
bHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dCAgICAgICAgPSBtT3V0OworI2VuZGlmCisg
ICAgICAgIHN3aXp6bGVOb2RlLT53cml0ZU9mZnNldHNBc1hZWlcoJm91dCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRMaXN0Q29sbGVj
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRDb25zdGFudFVuaW9uICZpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXguZ2V0VHlwZSgp
ID09IFRCYXNpY1R5cGU6OkVidEludCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExp
c3QgPSBmaWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygpOworICAgIGNvbnN0IGludCBpbmRleFZh
bCAgICAgICAgICA9IGluZGV4LmdldElDb25zdCgpOworICAgIGNvbnN0IFRGaWVsZCAmZmllbGQg
ICAgICAgICA9ICpmaWVsZExpc3RbaW5kZXhWYWxdOworCisgICAgcmV0dXJuIGZpZWxkOworfQor
Citjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZChjb25zdCBU
SW50ZXJtVHlwZWQgJmZpZWxkc05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmluZGV4Tm9kZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRzVHlwZSA9IGZpZWxkc05vZGUuZ2V0VHlwZSgpOworCisgICAgY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0
cnVjdCgpOworICAgIGlmIChmaWVsZExpc3RDb2xsZWN0aW9uID09IG51bGxwdHIpCisgICAgewor
ICAgICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgIH0KKyAgICBBU1NFUlQoZmllbGRMaXN0Q29sbGVjdGlvbik7CisKKyAgICBjb25z
dCBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5kZXhOb2RlXyA9IGluZGV4Tm9kZS5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKyAgICBBU1NFUlQoaW5kZXhOb2RlXyk7CisgICAgY29uc3QgVENvbnN0YW50
VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKworICAgIHJl
dHVybiBnZXREaXJlY3RGaWVsZCgqZmllbGRMaXN0Q29sbGVjdGlvbiwgaW5kZXgpOworfQorCiti
b29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
YmluYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Igb3AgICAgICA9IGJpbmFyeU5vZGUt
PmdldE9wKCk7CisgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS0+Z2V0
TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJp
Z2h0KCk7CisKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgeworICAgICAgICAgICAgZ3JvdXBlZFRyYXZl
cnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIi4iOworICAgICAgICAgICAgZW1p
dE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQg
PDwgIlsiOworICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgbU91dCA8PCAiXSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBi
aW5hcnlOb2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUg
ICA9IGxlZnROb2RlLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5
cGUgID0gcmlnaHROb2RlLmdldFR5cGUoKTsKKworICAgICAgICAgICAgaWYgKElzU3ltYm9saWNP
cGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAg
ICAgICAgICAgIGlmIChvcCAhPSBUT3BlcmF0b3I6OkVPcENvbW1hKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUs
ICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworICAgICAgICAgICAgICAgIGdyb3VwZWRU
cmF2ZXJzZShyaWdodE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3As
IHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIigiOworICAgICAgICAgICAg
ICAgIGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwg
IjsKKyAgICAgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIElzUG9zdGZpeChUT3BlcmF0b3Igb3Ap
Cit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3Bl
cmF0b3Igb3AgICAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3AoKTsKKyAgICBjb25zdCBUVHlwZSAmcmVz
dWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworCisgICAgVEludGVybVR5cGVkICZhcmcg
ICAgPSAqdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCk7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUg
PSBhcmcuZ2V0VHlwZSgpOworCisgICAgY29uc3QgY2hhciAqbmFtZSA9IEdldE9wZXJhdG9yU3Ry
aW5nKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisKKyAgICBpZiAoSXNTeW1ib2xpY09wZXJh
dG9yKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSkpCisgICAgeworICAgICAgICBjb25zdCBib29s
IHBvc3RmaXggPSBJc1Bvc3RmaXgob3ApOworICAgICAgICBpZiAoIXBvc3RmaXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBncm91cGVk
VHJhdmVyc2UoYXJnKTsKKyAgICAgICAgaWYgKHBvc3RmaXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtT3V0IDw8IG5hbWUgPDwgIigiOworICAgICAgICBhcmcudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG1PdXQgPDwgIikiOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAq
Y29uZGl0aW9uYWxOb2RlKQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2Rl
LT5nZXRDb25kaXRpb24oKSk7CisgICAgbU91dCA8PCAiID8gIjsKKyAgICBncm91cGVkVHJhdmVy
c2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisgICAgbU91dCA8PCAi
IDogIjsKKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHBy
ZXNzaW9uKCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqaWZUaGVuRWxzZU5vZGUpCit7
CisgICAgVEludGVybVR5cGVkICZjb25kTm9kZSA9ICppZlRoZW5FbHNlTm9kZS0+Z2V0Q29uZGl0
aW9uKCk7CisgICAgVEludGVybUJsb2NrICp0aGVuTm9kZSA9IGlmVGhlbkVsc2VOb2RlLT5nZXRU
cnVlQmxvY2soKTsKKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUt
PmdldEZhbHNlQmxvY2soKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQgPDwg
ImlmICgiOworICAgIGNvbmROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgIG1PdXQgPDwgIikiOwor
CisgICAgaWYgKHRoZW5Ob2RlKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiXG4iOworICAgICAg
ICB0aGVuTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1PdXQgPDwgIiB7fSI7CisgICAgfQorCisgICAgaWYgKGVsc2VOb2RlKQorICAgIHsKKyAg
ICAgICAgbU91dCA8PCAiXG4iOworICAgICAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAg
bU91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgZWxzZU5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBBbHdheXMgZW1pdCAiZWxzZSIgZXZlbiB3
aGVuIGVtcHR5IGJsb2NrIHRvIGF2b2lkIG5lc3RlZCBpZi1zdG10IGlzc3Vlcy4KKyAgICAgICAg
bU91dCA8PCAiIGVsc2Uge30iOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3
aXRjaE5vZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAic3dpdGNo
ICgiOworICAgIHN3aXRjaE5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91
dCA8PCAiKVxuIjsKKworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNoKTsKKyAgICBtUGFyZW50
SXNTd2l0Y2ggPSB0cnVlOworICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVBhcmVudElzU3dpdGNoID0gZmFsc2U7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVElu
dGVybUNhc2UgKmNhc2VOb2RlKQoreworICAgIGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgaWYg
KGNhc2VOb2RlLT5oYXNDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Y29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1PdXQgPDwgImNh
c2UgIjsKKyAgICAgICAgY29uZEV4cHItPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtT3V0IDw8
ICI6IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiZGVmYXVsdDpc
biI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQoreworICAg
IGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGVtaXRGdW5jdGlvblJl
dHVybihmdW5jKTsKKworICAgIG1PdXQgPDwgIiAiOworICAgIGVtaXROYW1lT2YoZnVuYyk7Cisg
ICAgaWYgKGlzTWFpbikKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIjAiOworICAgIH0KKyAgICBt
T3V0IDw8ICIoIjsKKworICAgIGJvb2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisgICAg
Y29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChl
bWl0Q29tbWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBlbWl0Q29tbWEgPSB0cnVlOworCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
cGFyYW0gPSAqZnVuYy5nZXRQYXJhbShpKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUGFyYW1ldGVy
KGZ1bmMsIHBhcmFtKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICIpIjsKK30KKwordm9pZCBHZW5N
ZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykK
K3sKKyAgICBjb25zdCBib29sIGlzTWFpbiA9IGZ1bmMuaXNNYWluKCk7CisKKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworICAgIGlmIChpc01haW4p
CisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBl
LmdldFN0cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IG51bGxwdHIpOworICAg
ICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5tYXRjaGVzKCpzdHJ1Y3R1cmUp
KQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJmcmFnbWVudCAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0
cnVjdHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgInZlcnRleCAiOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAg
ICAgICB9CisgICAgfQorICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmlnKCkp
OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29u
c3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQoreworICAgIGNvbnN0
IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ICAgICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworICAgIGV2ZENvbmZpZy5pc1BhcmFtZXRlciAgICAgICA9IHRydWU7Cisg
ICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5l
bWl0UG9zdFF1YWxpZmllciA9IGlzTWFpbjsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAg
ICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihwYXJhbSk7CisgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJhbSk7CisgICAgZW1pdFZhcmlh
YmxlRGVjbGFyYXRpb24oVmFyRGVjbChwYXJhbSksIGV2ZENvbmZpZyk7CisKKyAgICBpZiAoaXNN
YWluKQorICAgIHsKKyAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlv
biA9CisgICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVy
KS0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpOworICAgICAgICBpZiAoc3RydWN0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudElu
Lm1hdGNoZXMoKnN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3Rz
LnZlcnRleEluLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbc3RhZ2VfaW5dXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMubWF0Y2hlcygqc3RydWN0
dXJlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tidWZmZXIo
IiA8PCByeDo6bXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPDwgIildXSI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlm
b3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1PdXQgPDwgIiBbW2J1ZmZlcigiIDw8IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4IDw8ICIpXV0i
OworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBh
cmFtLm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtTWFpblVuaWZvcm1CdWZmZXJJbmRleCArPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3Qo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbc2FtcGxlcigiIDw8IChtTWFpblNhbXBsZXJJbmRleCkgPDwgIildXSI7CisgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKyAgICAgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+Z2V0T3JpZ2luYWxOYW1lKHBhcmFtLnVuaXF1ZUlkKCkuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFNhbXBsZXJCaW5kaW5nKG9yaWdp
bmFsTmFtZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgICAgIG1NYWluU2FtcGxl
ckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiIFtbdGV4dHVyZSgiIDw8IChtTWFpblRl
eHR1cmVJbmRleCkgPDwgIildXSI7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmln
aW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5n
ZXQoKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRUZXh0dXJlQmluZGluZyhvcmlnaW5h
bE5hbWUsIG1NYWluU2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIG1NYWluVGV4dHVyZUluZGV4
ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKE5hbWUocGFyYW0pID09IFBpcGVsaW5le1BpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkLCBu
dWxscHRyfS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8ICIgW1tpbnN0YW5jZV9pZF1dIjsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCit7CisgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmZ1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICBlbWl0SW5kZW50
YXRpb24oKTsKKyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7Cit9CisKK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1
bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgVEludGVybUJsb2NrICZib2R5
ICAgID0gKmZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsK
KyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7CisgICAgbU91dCA8PCAiXG4iOworICAg
IGJvZHkudHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbk1ldGFs
VHJhdmVyc2VyOjpGdW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUo
KQoreworICAgIEZ1bmNUb05hbWUgbWFwOworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShjb25z
dCBjaGFyICpuYW1lU3RyKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lKG5h
bWVTdHIpOworICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKyAg
ICAgICAgbWFwW25hbWVdID0gTmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KTsKKyAgICB9OworCisgICAgcHV0QW5nbGUoInRleGVsRmV0Y2giKTsKKyAgICBwdXRBbmdsZSgi
dGV4ZWxGZXRjaE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisgICAgcHV0QW5n
bGUoInRleHR1cmUxRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMURMb2QiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkQiKTsKKyAg
ICBwdXRBbmdsZSgidGV4dHVyZTJETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlM0QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisgICAgcHV0QW5nbGUoInRl
eHR1cmUzRFByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmUiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVQcm9qTG9k
Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVHcmFkIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVH
cmFkT2Zmc2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVMb2QiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZUxvZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7CisgICAg
cHV0QW5nbGUoInRleHR1cmVQcm9qIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZCIp
OworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZVByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pMb2RPZmZzZXQiKTsK
KyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZVNpemUiKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQor
eworICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRT
ZXF1ZW5jZSgpOworCisgICAgYXV0byBlbWl0QXJnTGlzdCA9IFsmXShjb25zdCBjaGFyICpvcGVu
LCBjb25zdCBjaGFyICpjbG9zZSkgeworICAgICAgICBtT3V0IDw8IG9wZW47CisKKyAgICAgICAg
Ym9vbCBlbWl0Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDog
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVtaXRDb21tYSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbWl0Q29tbWEgPSB0cnVlOworICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1PdXQgPDwgY2xvc2U7CisgICAgfTsKKworICAgIGNvbnN0
IFRUeXBlICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworCisgICAgaWYgKGFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wg
aXNTdGFuZGFsb25lID0gZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCk7CisgICAgICAgIGlm
IChpc1N0YW5kYWxvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY29uc3Ry
dWN0b3IgZnJvbSBiZWluZyBpbnRlcnByZXRlZCBhcyBhIGRlY2xhcmF0aW9uIGJ5IHdyYXBwaW5n
IGluIHBhcmVucy4KKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBnaXZlbiBzb21l
dGhpbmcgbGlrZToKKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMg
d2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisg
ICAgICAgICAgICAvLyBTbyBpbnN0ZWFkIGVtaXQ6CisgICAgICAgICAgICAvLyAgICAgIChpbnQo
c3ltYm9sKSk7CisgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworCisgICAgICAgIGlmIChyZXRUeXBlLmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25m
aWcpOworICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsiLCAifSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHJldFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCJ7
IiwgIn0iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIo
IiwgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0YW5kYWxvbmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgIikiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Ig
b3AgPSBhZ2dyZWdhdGVOb2RlLT5nZXRPcCgpOworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAg
ICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFn
Z3JlZ2F0ZU5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgZW1pdE5hbWVPZihm
dW5jKTsKKyAgICAgICAgICAgICAgICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFt
ZS5maW5kKGZ1bmMubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbUZ1bmNU
b05hbWUuZW5kKCkpOworICAgICAgICAgICAgICAgIEVtaXROYW1lKG1PdXQsIGl0LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVf
dCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA8IGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAmYXJnLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgIEFTU0VSVCghYXJncy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAqYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGFyZ1R5cGUwKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdldE9w
ZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworCisgICAgICAg
ICAgICAgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmV0VHlwZSwgYXJnVHlwZTAsIGFy
Z1R5cGUxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSAmb3BlcmFuZE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0
Q2hpbGROb2RlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgo
b3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKG9w
ZXJhbmROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5h
bWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICZsZWZ0Tm9kZSAgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2Rl
KDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUg
PSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbU91dCA8PCAiICIgPDwgb3BOYW1lIDw8ICIgIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKK3sKKyAgICBBU1NF
UlQobUluZGVudExldmVsID49IDApOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91
dCA8PCAie1xuIjsKKyAgICArK21JbmRlbnRMZXZlbDsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENsb3NlQnJhY2UoKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7
CisKKyAgICAtLW1JbmRlbnRMZXZlbDsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ9IjsKK30KKworc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJ
bnRlcm1Ob2RlICZub2RlKQoreworICAgIGlmIChub2RlLmdldEFzQmxvY2soKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRB
c1N3aXRjaE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKG5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQ2FzZU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIE5ld2xpbmVQYWQoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAg
aWYgKG5vZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSA9IG5v
ZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWNsTm9k
ZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmY2hpbGROb2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9s
ICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7
CisgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKmJsb2NrTm9kZSkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IC0xKTsKKyAg
ICBjb25zdCBib29sIGlzR2xvYmFsU2NvcGUgID0gbUluZGVudExldmVsID09IC0xOworICAgIGNv
bnN0IGJvb2wgcGFyZW50SXNTd2l0Y2ggPSBtUGFyZW50SXNTd2l0Y2g7CisgICAgbVBhcmVudElz
U3dpdGNoICAgICAgICAgICA9IGZhbHNlOworCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICArK21JbmRlbnRMZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZW1pdE9wZW5CcmFjZSgpOworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisgICAgICAg
IHsKKyAgICAgICAgICAgICsrbUluZGVudExldmVsOworICAgICAgICB9CisgICAgfQorCisgICAg
VEludGVybU5vZGUgKnByZXZTdG10Tm9kZSA9IG51bGxwdHI7CisKKyAgICBjb25zdCBzaXplX3Qg
c3RtdENvdW50ID0gYmxvY2tOb2RlLT5nZXRDaGlsZENvdW50KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdG10Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlICZz
dG10Tm9kZSA9ICpibG9ja05vZGUtPmdldENoaWxkTm9kZShpKTsKKworICAgICAgICBpZiAoaXNH
bG9iYWxTY29wZSAmJiBwcmV2U3RtdE5vZGUgJiYgKE5ld2xpbmVQYWQoKnByZXZTdG10Tm9kZSkg
fHwgTmV3bGluZVBhZChzdG10Tm9kZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8
ICJcbiI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc0Nhc2UgPSBzdG10Tm9kZS5n
ZXRBc0Nhc2VOb2RlKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisgICAgICAg
IGVtaXRJbmRlbnRhdGlvbigpOworICAgICAgICBtSW5kZW50TGV2ZWwgKz0gaXNDYXNlOworICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFJlcXVpcmVzU2VtaWNv
bG9uVGVybWluYXRvcihzdG10Tm9kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
IjsiOworICAgICAgICB9CisgICAgICAgIG1PdXQgPDwgIlxuIjsKKworICAgICAgICBwcmV2U3Rt
dE5vZGUgPSAmc3RtdE5vZGU7CisgICAgfQorCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworICAgICAgICAtLW1JbmRlbnRM
ZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudElzU3dpdGNo
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobUluZGVudExldmVsID49IDEpOworICAg
ICAgICAgICAgLS1tSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICAgICAgZW1pdENsb3NlQnJh
Y2UoKTsKKyAgICAgICAgbVBhcmVudElzU3dpdGNoID0gcGFyZW50SXNTd2l0Y2g7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24gKikKK3sKKyAgICBMT0dJQ19FUlJPUigpOyAgLy8gUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXREZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVjbE5v
ZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNs
Tm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworCisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2Rl
LmdldEFzU3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlv
bihWYXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisgICAgfQorICAgIGVsc2UgaWYgKFRJbnRlcm1C
aW5hcnkgKmluaXROb2RlID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOwor
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBp
bml0Tm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoc3ltYm9s
Tm9kZSAmJiB2YWx1ZU5vZGUpOworCisgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBh
cmVudEJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmVyR2xvYmFsSW5pdGlh
bGl6ZXJzIHNob3VsZCBoYXZlIHR1cm5lZCBub24tY29uc3QgZ2xvYmFsIGluaXRpYWxpemVycyBp
bnRvCisgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworICAgICAgICAgICAg
Ly8gRXZxQ29uc3QgaW4gc29tZSBBTkdMRSBjb2RlIGJ1dCBub3QgYWN0dWFsbHkgaGF2ZSB0aGVp
ciBxdWFsaWZpZXIgYWN0dWFsbHkgY2hhbmdlZCB0bworICAgICAgICAgICAgLy8gRXZxQ29uc3Qu
IFRodXMganVzdCBhc3N1bWUgYWxsIEV2cUdsb2JhbCBhcmUgYWN0dWFsbHkgRXZxQ29uc3QgZm9y
IGFsbCBjb2RlIHJ1biBhZnRlcgorICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXpl
cnMuCisgICAgICAgICAgICBtT3V0IDw8ICJjb25zdGFudCAiOworICAgICAgICB9CisKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAg
ICBjb25zdCBOYW1lIHZhck5hbWUodmFyKTsKKworICAgICAgICBpZiAoRXhwcmVzc2lvbkNvbnRh
aW5zTmFtZSh2YXJOYW1lLCAqdmFsdWVOb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
bmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2
ZENvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgIiA9ICI7CisgICAgICAgIGdyb3VwZWRUcmF2ZXJz
ZSgqdmFsdWVOb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIGNv
bnN0IFRMb29wVHlwZSBsb29wVHlwZSA9IGxvb3BOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0Rm9yTG9vcChsb29wTm9kZSk7CisgICAgICAgIGNhc2Ug
VExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29w
KGxvb3BOb2RlKTsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdERvV2hpbGVMb29wKGxvb3BOb2RlKTsKKyAgICB9Cit9CisKK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUp
Cit7CisgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcEZv
cik7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsK
KyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOwor
ICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOwor
ICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFT
U0VSVChib2R5Tm9kZSk7CisKKyAgICBtT3V0IDw8ICJmb3IgKCI7CisKKyAgICBpZiAoaW5pdE5v
ZGUpCisgICAgeworICAgICAgICBpbml0Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIiAiOworICAgIH0KKworICAgIG1PdXQgPDwg
IjsgIjsKKworICAgIGlmIChjb25kTm9kZSkKKyAgICB7CisgICAgICAgIGNvbmROb2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICI7ICI7CisKKyAgICBpZiAoZXhwck5v
ZGUpCisgICAgeworICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbU91dCA8PCAiKVxuIjsKKworICAgIGJvZHlOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxv
b3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0VHlw
ZSgpID09IFRMb29wVHlwZTo6RUxvb3BXaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0g
bG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBs
b29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBs
b29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7Cisg
ICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9u
KCk7CisgICAgbU91dCA8PCAid2hpbGUgKCI7CisgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMp
OworICAgIG1PdXQgPDwgIilcbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERvV2hp
bGVMb29wKFRJbnRlcm1Mb29wICpsb29wTm9kZSkKK3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdl
dFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmRO
b2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5v
ZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5v
ZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9k
ZSk7CisgICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVu
dGF0aW9uKCk7CisgICAgbU91dCA8PCAiZG9cbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIG1PdXQgPDwgIlxuIjsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ3aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8
PCAiKTsiOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqYnJhbmNoTm9kZSkKK3sKKyAgICBj
b25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisgICAgVElu
dGVybVR5cGVkICpleHByTm9kZSA9IGJyYW5jaE5vZGUtPmdldEV4cHJlc3Npb24oKTsKKworICAg
IGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgc3dpdGNoIChmbG93T3ApCisgICAgeworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wS2lsbDoKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGV4cHJOb2RlID09IG51bGxwdHIpOworICAgICAgICAgICAgbU91dCA8PCAibWV0YWw6OmRpc2Nh
cmRfZnJhZ21lbnQoKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAi
cmV0dXJuIjsKKyAgICAgICAgICAgIGlmIChleHByTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICBleHByTm9kZS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJicmVhayI7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbnRpbnVlOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVs
bHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJjb250aW51ZSI7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworCitib29sIHNoOjpFbWl0TWV0
YWwoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVBy
ZWx1ZGVDb25maWcgJnBwYykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBjb21waWxlci5n
ZXRJbmZvU2luaygpLm9iajsKKworICAgIHsKKyAgICAgICAgKytlbWl0TWV0YWxDYWxsQ291bnQ7
CisgICAgICAgIGF1dG8gZmlsZW5hbWVQcm90byA9IHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9GSVhF
RF9FTUlUIik7CisgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZmlsZW5hbWVQcm90byAhPSAiL2Rldi9udWxsIikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU9wZW4gPSBbJl0oY2hhciBjb25zdCAqZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZVByb3RvOwor
ICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxD
YWxsQ291bnQpOworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSAiLiI7CisgICAgICAg
ICAgICAgICAgICAgIGZpbGVuYW1lICs9IGV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgRklMRSAqZmlsZSA9IHRyeU9wZW4oIm1ldGFsIik7CisgICAgICAgICAgICAg
ICAgaWYgKCFmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmls
ZSA9IHRyeU9wZW4oImNwcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmlsZSk7CisKKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGZpbGVTaXplID0gZnRlbGwoZmlsZSk7CisgICAgICAg
ICAgICAgICAgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8Y2hhcj4gYnVmZjsKKyAgICAgICAgICAgICAgICBidWZmLnJlc2l6ZShmaWxlU2l6
ZSArIDEpOworICAgICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwg
ZmlsZSk7CisgICAgICAgICAgICAgICAgYnVmZi5iYWNrKCkgPSAnXDAnOworCisgICAgICAgICAg
ICAgICAgZmNsb3NlKGZpbGUpOworCisgICAgICAgICAgICAgICAgb3V0IDw8IGJ1ZmYuZGF0YSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG91dCA8PCAiXG5cbiI7CisKKyAgICBpZiAoIUVtaXRQcm9ncmFtUHJlbHVk
ZShyb290LCBvdXQsIHBwYykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgICAgIERlYnVn
U2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisgICAg
ICAgIG91dFdyYXBwZXIud2F0Y2gocmVhZFN0cmluZ0VudlZhcigiR01EX1dBVENIX1NUUklORyIp
KTsKKyNlbHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisjZW5k
aWYKKyAgICAgICAgR2VuTWV0YWxUcmF2ZXJzZXIgZ2VuKGNvbXBpbGVyLCBvdXRXcmFwcGVyLCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYpOworICAgICAgICBy
b290LnRyYXZlcnNlKCZnZW4pOworICAgIH0KKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0
dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRW1pdE1ldGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4YWY5YTFjODdkNTczY2FiNTI3Mjc1
YjRkMjMyY2NmMjRhNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaApAQCAtMCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBXYWxrcyB0
aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRN
ZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxp
bmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfRU1JVE1FVEFMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRW
YXJpYWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kODIzZmM3MjgyMGNmZmRkZjMyNDBkYzI0NjU5YTVlZGNmZGI5ZDI3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApAQCAtMCwwICsxLDQ1IEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworCisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworbmFtZXNwYWNlIHNoCit7CisKK2lubGluZSBib29sIHJlYWRCb29sRW52VmFyKGNvbnN0
IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOwor
ICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHN0cmNtcChzdHIsICIwIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgQVNTRVJUKHN0cmNtcChzdHIsICIxIikgPT0gMCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBzdGQ6OnN0cmluZyByZWFkU3RyaW5nRW52VmFyKGNv
bnN0IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIp
OworICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRW
QVJJQUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5YzAzZWI1ZDM1
ZTg5ZmViMTZkNjc0ZDk2MTcwYzI3MjY5NmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIg
OiBwcml2YXRlIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3Qgc2l6ZV90
IG1NaW5SZXF1aXJlZFNpemU7CisgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVz
OworCisgIHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3Qg
bWluUmVxdWlyZWRTaXplKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVl
LCBmYWxzZSksIG1NaW5SZXF1aXJlZFNpemUobWluUmVxdWlyZWRTaXplKQorICAgIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9uKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9u
KGRlY2xOb2RlKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wu
Z2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxp
Zmllcjo6RXZxQ29uc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBNZXRhbExh
eW91dE9mKHR5cGUpLnNpemVPZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1p
blJlcXVpcmVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbUhvaXN0ZWREZWNsTm9kZXMucHVzaF9iYWNrKCZkZWNsTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
e2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIGJvb2wgcmV3cml0
ZShUSW50ZXJtQmxvY2sgJnJvb3QsIElkR2VuICZpZEdlbikKKyAgICB7CisgICAgICAgIGlmICgh
cmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJv
b3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kRmlyc3RGdW5jdGlvbkRlZmluaXRpb25JbmRleCgmcm9v
dCksIG1Ib2lzdGVkRGVjbE5vZGVzKTsKKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpvcGFx
dWVEZWNsTm9kZSA6IG1Ib2lzdGVkRGVjbE5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjbE5vZGUpOworICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZvbGRWYXIgPSBWaWV3RGVjbGFyYXRpb24oKmRlY2xOb2RlKS5zeW1i
b2wudmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRH
ZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKyAgICAgICAgICAgIGF1dG8gKm5ld1Zh
ciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksICZvbGRW
YXIuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgm
bUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OkhvaXN0Q29uc3RhbnRzKFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKQoreworICAgIHJldHVybiBSZXdy
aXRlcihjb21waWxlciwgbWluUmVxdWlyZWRTaXplKS5yZXdyaXRlKHJvb3QsIGlkR2VuKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0hvaXN0Q29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwNmE1ZTQ3M2M4YmVjNWNjZmE0OGRkNGYx
ZWJmYzNhNDk0NTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0
YW50cy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNf
SF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBIb2lz
dHMgZnVuY3Rpb24tbG9jYWwgY29uc3RhbnRzIHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgdGhlaXIg
TWV0YWwgc2l6ZW9mIG1lZXRzCisvLyBgbWluUmVxdWlyZWRTaXplYC4KK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6ZSk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0hPSVNUQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGFlZDZiOWI4ZTYz
OTY0ZjE1MTNiODM2ZmI5ODg5MDIzMjAyMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0
eXBlPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVu
b3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0lkR2Vu
OjpJZEdlbigpIHt9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmlu
Z1RvSW1tdXRhYmxlPgorTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzaXplX3QgY291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9JbW11dGFibGUp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaWQgPSBtTmV4dCsrOworICAgIGNoYXIgaWRCdWZmZXJb
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisgICAgc3ByaW50
ZihpZEJ1ZmZlciwgIiV1IiwgaWQpOworCisgICAgbU5ld05hbWVCdWZmZXIuY2xlYXIoKTsKKyAg
ICBtTmV3TmFtZUJ1ZmZlciArPSAnXyc7CisgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7
CisKKyAgICAvLyBOb3RlOgorICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxv
d2VkIGluIEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3
ZQorICAgIC8vIHRha2UgY2FyZSBub3QgdG8gaW50cm9kdWNlIGFueS4KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyBiYXNlTmFtZSA9IHRvSW1tdXRhYmxlKGJhc2VOYW1lc1tpXSk7CisgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
YmFzZSA9IGJhc2VOYW1lLmRhdGEoKTsKKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNX
aXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBiYXNlICs9IHNpemVvZihrQW5nbGVJbnRlcm5hbFByZWZpeCkgLSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCpiYXNlID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICArK2Jhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoKmJhc2Ug
IT0gJ18nKTsKKworICAgICAgICAgICAgaWYgKG1OZXdOYW1lQnVmZmVyLmJhY2soKSAhPSAnXycp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5hbWUoSW1tdXRhYmxlU3RyaW5nKG1OZXdOYW1l
QnVmZmVyKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cit9CisKK05hbWUgSWRHZW46OmNy
ZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKK30KKworTmFtZSBJZEdlbjo6Y3JlYXRlTmV3
TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZS5yYXdOYW1lKCkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0
IGNoYXIgKmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKEltbXV0YWJsZVN0
cmluZyhiYXNlTmFtZSkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4g
Y3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBJbW11dGFibGVTdHJpbmcgJnMpIHsgcmV0dXJu
IHM7IH0pOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxOYW1lPiBiYXNlTmFtZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5h
bWVzLnNpemUoKSwgYmFzZU5hbWVzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
W10oY29uc3QgTmFtZSAmcykgeyByZXR1cm4gcy5yYXdOYW1lKCk7IH0pOworfQorCitOYW1lIElk
R2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyICo+IGJh
c2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBi
YXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBjaGFy
ICpzKSB7IHJldHVybiBJbW11dGFibGVTdHJpbmcocyk7IH0pOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0lkR2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODIw
ODlmNDMyZTE4OWQwZjc5MWUwZTdhMjEzY2NlY2Q0NDJiNzJlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworI2Rl
ZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXwor
CisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorLy8gQWxsIG5hbWVzIGNyZWF0ZWQg
YXJlIG1hcmtlZCBhcyBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLgorY2xhc3MgSWRHZW4gOiBh
bmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgcHVibGljOgorICAgIElkR2VuKCk7CisKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSk7CisgICAgTmFt
ZSBjcmVhdGVOZXdOYW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKTsKKyAgICBOYW1lIGNyZWF0ZU5l
d05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpOworICAgIE5hbWUg
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKTsKKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4g
YmFzZU5hbWVzKTsKKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcs
IHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzaXpl
X3QgY291bnQsIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLCBjb25zdCBTdHJpbmdUb0ltbXV0YWJs
ZSAmdG9JbW11dGFibGUpOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQgbU5leHQgPSAwOyAg
ICAgICAgICAvLyBgdW5zaWduZWRgIGJlY2F1c2Ugb2YgIiV1IiB1c2UgaW4gc3ByaW50ZgorICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVyIHRvIGF2b2lk
IHRvbnMgb2YgcmVhbGxvY2F0aW9ucworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM0NmY2ZjgxNDI4MmMxMmFmNjc5MTRkMmEzMDQyMzQxNjBmYTJl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCkBAIC0wLDAgKzEs
NDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlw
ZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZW51bSBjbGFzcyBMYW5ndWFnZQoreworICAg
IE1ldGFsLAorICAgIEdMU0wsCit9OworCitzdGF0aWMgc2l6ZV90IFJvdW5kVXBUb011bHRpcGxl
T2Yoc2l6ZV90IHgsIHNpemVfdCBtdWx0aXBsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgcmVtID0g
eCAlIG11bHRpcGxlOworICAgIHJldHVybiByZW0gPT0gMCA/IHggOiB4ICsgKG11bHRpcGxlIC0g
cmVtKTsKK30KKwordm9pZCBMYXlvdXQ6OnJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBi
b29sIHBhZCkKK3sKKyAgICBhbGlnbk9mID0gc3RkOjptYXgoYWxpZ25PZiwgYWxpZ24pOworICAg
IGlmIChwYWQpCisgICAgeworICAgICAgICBzaXplT2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKHNp
emVPZiwgYWxpZ24pOworICAgIH0KK30KKworYm9vbCBMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3Qg
TGF5b3V0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZU9mID09IG90aGVyLnNpemVP
ZiAmJiBhbGlnbk9mID09IG90aGVyLmFsaWduT2Y7Cit9CisKK3ZvaWQgTGF5b3V0OjpvcGVyYXRv
cis9KGNvbnN0IExheW91dCAmb3RoZXIpCit7CisgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5h
bGlnbk9mLCB0cnVlKTsKKyAgICBzaXplT2YgKz0gb3RoZXIuc2l6ZU9mOworfQorCit2b2lkIExh
eW91dDo6b3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpCit7CisgICAgc2l6ZU9mICo9IHNjYWxlOwor
fQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QK
K3sKKyAgICBhdXRvIHNlbGYgPSAqdGhpczsKKyAgICBzZWxmICs9IG90aGVyOworICAgIHJldHVy
biBzZWxmOworfQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25z
dAoreworICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKj0gc2NhbGU7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBMYXlvdXQgU2NhbGFyTGF5b3V0T2YoY29uc3QgVFR5cGUg
JnR5cGUsIExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNU
eXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiB7
MSwgMX07CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6Cisg
ICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aWYgKElzU2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIExhbmd1YWdlOjpNZXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
OCwgOH07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGFuZ3VhZ2U6OkdMU0w6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6
OkludmFsaWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaW5uZXJTY2FsZXNQ
YWNrZWRbXSAgID0gezAsIDEsIDIsIDMsIDR9Oworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNj
YWxlc1VucGFja2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisKK0xheW91dCBzaDo6TWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcpCit7Cisg
ICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA8PSA0KTsKKyAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKworICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID09IFRMYXlvdXRCbG9j
a1N0b3JhZ2U6OkVic1NoYXJlZCk7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZp
Zy5tYXNrQXJyYXkpCisgICAgeworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gdHJ1ZTsK
KyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmln
KTsKKyAgICAgICAgY29uZmlnLm1hc2tBcnJheSAgICA9IGZhbHNlOworICAgICAgICBjb25zdCBz
aXplX3Qgdm9sICAgID0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIHJldHVy
biBsYXlvdXQgKiB2b2w7CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXRO
b21pbmFsU2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXpl
KCkgPT0gMSk7CisgICAgICAgIGF1dG8gY29uZmlnMiAgICAgICAgICAgICA9IGNvbmZpZzsKKyAg
ICAgICAgY29uZmlnMi5tYXNrQXJyYXkgICAgICAgID0gZmFsc2U7CisgICAgICAgIGF1dG8gbGF5
b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogZmllbGRzKQorICAgICAgICB7CisgICAgICAgICAgICBsYXlvdXQg
Kz0gTWV0YWxMYXlvdXRPZigqZmllbGQtPnR5cGUoKSwgY29uZmlnMik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc2l6ZV90IHBhZCA9IGxheW91dC5zaXplT2YgJSAxNjsKKyAgICAgICAgICAg
IGxheW91dC5zaXplT2YgKz0gcGFkOworICAgICAgICB9CisgICAgICAgIGxheW91dC5zaXplT2Yg
PSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAg
ICAgICAgcmV0dXJuIGxheW91dDsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxl
cnNBc1RleHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsxNiwgOH07ICAvLyBwb2ludGVyezgsOH0gYW5kIG1ldGFsOjpzYW1w
bGVyezgsOH0KKyAgICB9CisKKyAgICBjb25zdCBMYXlvdXQgc2NhbGFyTGF5b3V0ID0gU2NhbGFy
TGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6Ok1ldGFsKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1Bh
Y2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBsYXlvdXQgPSBM
YXlvdXR7c2NhbGFyTGF5b3V0LnNpemVPZiAqIGlubmVyU2NhbGUsIHNjYWxhckxheW91dC5hbGln
bk9mfTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVy
U2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8g
bGF5b3V0ICAgICAgICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBp
bm5lclNjYWxlKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisgICAg
ICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KTsK
KyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKyAgICAgICAgY29uc3Qgc2l6ZV90IGlu
bmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Um93cygpXTsKKyAgICAgICAg
Y29uc3Qgc2l6ZV90IG91dGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6
ZU9mICogaW5uZXJTY2FsZTsKKyAgICAgICAgcmV0dXJuIHtuICogb3V0ZXJTY2FsZSwgbn07Cisg
ICAgfQorfQorCitUTGF5b3V0QmxvY2tTdG9yYWdlIHNoOjpPdmVybGF5KFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugb2xkU3RvcmFnZSwgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBuZXdTdG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9j
a1N0b3JhZ2U7CisgICAgc3dpdGNoIChuZXdTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBv
bGRTdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkID8ga0RlZmF1
bHRMYXlvdXRCbG9ja1N0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBuZXdTdG9yYWdlOworICAgIH0KK30KKworVExh
eW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFj
a2luZywgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tp
bmcgbmV3UGFja2luZyA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZzsK
KyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRNYXRy
aXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5n
ID09IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0
TWF0cml4UGFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkUGFja2luZzsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOworICAgIH0KK30KKworYm9vbCBzaDo6
Q2FuQmVQYWNrZWQoVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIHN3aXRjaCAo
c3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFj
a2VkOgorICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDoKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQYWNrZWQoVExheW91
dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIENhbkJlUGFja2VkKGxh
eW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpOworfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChj
b25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIENhbkJlUGFja2VkKHR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkpOworfQorCit2b2lkIHNoOjpTZXRCbG9ja1N0b3JhZ2UoVFR5
cGUgJnR5cGUsIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKK3sKKyAgICBhdXRvIHF1YWwg
ICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAgcXVhbC5ibG9ja1N0b3Jh
Z2UgPSBzdG9yYWdlOworICAgIHR5cGUuc2V0TGF5b3V0UXVhbGlmaWVyKHF1YWwpOworfQorCitz
dGF0aWMgTGF5b3V0IENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0
ICpiZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBj
b25zdCAqY29uc3QgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1h
c2tBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBiYXNlQWxpZ25tZW50KQoreworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAg
ICBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGF1dG8gbGF5b3V0ID0gTGF5
b3V0OjpJZGVudGl0eSgpOworICAgIGZvciAoYXV0byBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgeworICAgICAgICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIp
LT50eXBlKCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNlKTsKKyAgICB9CisgICAgaWYg
KCFpc1BhY2tlZCkgIC8vIFhYWDogQ29ycmVjdD8KKyAgICB7CisgICAgICAgIGxheW91dC5zaXpl
T2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsK
KyAgICB9CisgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7
CisgICAgcmV0dXJuIGxheW91dDsKK30KKworc3RhdGljIExheW91dCBDb21tb25HbHNsTGF5b3V0
T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBtYXNrQXJyYXksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkK
K3sKKyAgICBBU1NFUlQoc3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNp
ZmllZCk7CisKKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKyAgICAgICAgc3RvcmFnZSA9PSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tT
dG9yYWdlOjpFYnNTaGFyZWQ7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNN
YXRyaXgoKSAmJiAhbWFza0FycmF5KQorICAgIHsKKyAgICAgICAgYXV0byBsYXlvdXQgPSBHbHNs
TGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgdHJ1ZSk7CisgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgbGF5b3V0LnJlcXVp
cmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBsYXlvdXQ7
CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpID09
IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAg
ICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoZmllbGRzLmRhdGEoKSwgZmllbGRz
LmRhdGEoKSArIGZpZWxkcy5zaXplKCksIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0cml4UGFja2luZywgbWFza0FycmF5LCBiYXNlQWxpZ25tZW50
KTsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvIHNjYWxhckxheW91dCA9IFNjYWxhckxheW91dE9m
KHR5cGUsIExhbmd1YWdlOjpHTFNMKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWduU2NhbGUg
PSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAg
ICBhdXRvIGxheW91dCA9CisgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXpl
T2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25TY2FsZX07CisgICAg
ICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFj
a2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCAgICAg
ICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7
CisgICAgICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworCisgICAgICAgIHNpemVf
dCBpbm5lckRpbTsKKyAgICAgICAgc2l6ZV90IG91dGVyRGltOworCisgICAgICAgIHN3aXRjaCAo
bWF0cml4UGFja2luZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4
UGFja2luZzo6RW1wQ29sdW1uTWFqb3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRp
bSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wUm93TWFq
b3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUu
Z2V0Q29scygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVf
dD4odHlwZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAg
ICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IDA7CisgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgb3V0ZXJEaW0gKj0g
dHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVy
U2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW2lubmVyRGltXTsKKyAgICAgICAgY29uc3Qgc2l6
ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKyAgICAg
ICAgTGF5b3V0IGxheW91dCAgICAgICAgICAgPSB7b3V0ZXJEaW0gKiBuLCBufTsKKyAgICAgICAg
bGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBsYXlvdXQ7CisgICAgfQorfQorCitMYXlvdXQgc2g6Okdsc2xMYXlvdXRPZihjb25zdCBU
VHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1h
dHJpeFBhY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sK
KyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBl
LmdldFNlY29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIHN0b3JhZ2UgICAgICAgPSBPdmVybGF5
KHN0b3JhZ2UsIHR5cGUpOworICAgIG1hdHJpeFBhY2tpbmcgPSBPdmVybGF5KG1hdHJpeFBhY2tp
bmcsIHR5cGUpOworCisgICAgc3dpdGNoIChzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9u
R2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5n
LCBtYXNrQXJyYXksIDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNT
dGQxNDA6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5
b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKyAgICAg
ICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisg
ICAgfQorfQorCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBzaDo6R2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCit7CisgICAgQVNTRVJU
KHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworICAgIEFT
U0VSVChtYXRyaXhQYWNraW5nICE9IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmll
ZCk7CisKKyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxKTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAg
ICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxNik7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAg
ICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9y
YWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTQxM2VkZjQ5ZmVmMjdjMDBhZDYxNjZhZWFjZmU1MjZhYTk0ZjFkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApAQCAtMCwwICsxLDg4IEBACisvLworLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9MQVlPVVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3Rl
eHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRCbG9ja1N0b3JhZ2UgID0gVExheW91dEJsb2Nr
U3RvcmFnZTo6RWJzU2hhcmVkOworY29uc3RleHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRN
YXRyaXhQYWNraW5nID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOworCisv
LyBSZXR1cm5zIGBvbGRTdG9yYWdlYCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIGJsb2NrIHN0
b3JhZ2UuCisvLyBPdGhlcndpc2UgcmV0dXJucyBibG9jayBzdG9yYWdlIG9mIGB0eXBlYC4KK1RM
YXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2Us
IGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gUmV0dXJucyBgb2xkUGFja2luZ2AgaWYgYHR5cGVg
IGhhcyB1bnNwZWNpZmllZCBtYXRyaXggcGFja2luZy4KKy8vIE90aGVyd2lzZSByZXR1cm5zIG1h
dHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KK1RMYXlvdXRNYXRyaXhQYWNraW5nIE92ZXJsYXkoVExh
eW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBS
ZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3Rv
cmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFja2VkKFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3Qg
aXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBhY2tl
ZCByZXByZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIpOworCisvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3Nh
YmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENh
bkJlUGFja2VkKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gU2V0cyB0aGUgYmxvY2sgc3RvcmFn
ZSBmb3IgYSB0eXBlLgordm9pZCBTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5cGUsIFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIENvbnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25v
ZmAgaW5mb3JtYXRpb24uCitzdHJ1Y3QgTGF5b3V0Cit7CisgICAgc2l6ZV90IHNpemVPZjsKKyAg
ICBzaXplX3QgYWxpZ25PZjsKKworICAgIHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVy
biB7MCwgMX07IH0KKyAgICBzdGF0aWMgTGF5b3V0IEludmFsaWQoKSB7IHJldHVybiB7MCwgMH07
IH0KKyAgICBzdGF0aWMgTGF5b3V0IEJvdGgoc2l6ZV90IG4pIHsgcmV0dXJuIHtuLCBufTsgfQor
CisgICAgdm9pZCByZXF1aXJlQWxpZ25tZW50KHNpemVfdCBhbGlnbiwgYm9vbCBwYWQpOworCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworCisgICAgdm9p
ZCBvcGVyYXRvcis9KGNvbnN0IExheW91dCAmb3RoZXIpOworICAgIHZvaWQgb3BlcmF0b3IqPShz
aXplX3Qgc2NhbGUpOworCisgICAgTGF5b3V0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVy
KSBjb25zdDsKKyAgICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7Cit9Owor
CitzdHJ1Y3QgTWV0YWxMYXlvdXRPZkNvbmZpZworeworICAgIGJvb2wgZGlzYWJsZVBhY2tpbmcg
ICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAg
ID0gZmFsc2U7CisgICAgYm9vbCB0cmVhdFNhbXBsZXJzQXNUZXh0dXJlRW52ICA9IGZhbHNlOwor
ICAgIGJvb2wgYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSBmYWxzZTsgIC8vIFBhZCB0byBt
dWx0aXBsZSBvZiAxNgorfTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBp
dCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgTWV0YWwgcHJvZ3JhbS4KKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQgTWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcgPSB7fSk7
CisKKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXBy
ZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0CitHbHNs
TGF5b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgVExheW91dEJsb2NrU3Rv
cmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVk
LAorICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBUTGF5
b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgYm9vbCBtYXNr
QXJyYXkgICAgICAgICAgICAgICAgICAgICA9IGZhbHNlKTsKKworLy8gUmV0dXJucyB0aGUgbGF5
b3V0IG9mIGEgc3RydWN0dXJlIGlmIGl0IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBHTFNM
IHByb2dyYW0uCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBHbHNsU3RydWN0TGF5b3V0T2YoVEZp
ZWxkIGNvbnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFj
a2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlP
VVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25z
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZTMwZGFlNmUyZDdiNmU2OTgyZmYwMDI5Mzc0ZTNmYWY0MjNjNWFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCkBAIC0w
LDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CitjbGFzcyBNYXBwZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6Cisg
ICAgRnVuY3Rpb25Ub0RlZmluaXRpb24gbUZ1bmNUb0RlZjsKKworICBwdWJsaWM6CisgICAgTWFw
cGVyKCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIGJv
b2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5j
LT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworICAgICAgICBtRnVuY1Rv
RGVmW2Z1bmNdID0gZnVuY0RlZk5vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCitGdW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgTWFwcGVyIG1hcHBlcjsKKyAgICByb290LnRyYXZl
cnNlKCZtYXBwZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUobWFwcGVyLm1GdW5jVG9EZWYpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1
NmRkZWU0ZDkwNTBhNzAyMzc1ZWM1OThiZWY4MmI0NWVmMzg1YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNf
SF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwor
Ly8gQSBtYXAgZnJvbSBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZpbml0aW9u
cy4KK3VzaW5nIEZ1bmN0aW9uVG9EZWZpbml0aW9uID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFRGdW5jdGlvbiAqLCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICo+OworCisvLyBNYXBzIGZ1
bmN0aW9ucyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zLgorQU5HTEVfTk9fRElT
Q0FSRCBGdW5jdGlvblRvRGVmaW5pdGlvbiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJbnRl
cm1CbG9jayAmcm9vdCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5J
VElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBTeW1ib2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVjOTMwNDY5NWQxZWRmZTBmYmVk
NTIxZDZmYjEwNGNmZGM2NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5
bWJvbHMuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQor
eworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRl
OgorICAgIHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25zdCBURnVuY3Rpb24gKiwgVElu
dGVybVN5bWJvbCAmKT4gbU1hcDsKKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29u
c3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyAgICAgICAgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtTWFwKG1hcCkKKyAgICB7fQorCisgICAg
UG9zdFJlc3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5
bWJvbE5vZGUpOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIHNoOjpNYXBT
eW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9k
ZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN0ZDo6bW92ZShtYXApKTsKKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1i
b2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1Njg5MGExNWNh
MWVjYTU5MDFiMTJhYThjMzkxNmMxNTZmY2JjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTWFwU3ltYm9scy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKworI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIE1hcHMg
VEludGVybVN5bWJvbCBub2RlcyB0byBUSW50ZXJtTm9kZSBub2Rlcy4KKy8vIFRoZSBwYXJlbnQg
ZnVuY3Rpb24gb2YgYSBzeW1ib2wgaXMgcHJvdmlkZWQgdG8gdGhlIG1hcHBpbmcgd2hlbiBhcHBs
aWNhYmxlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisgICAgVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgc3RkOjpmdW5jdGlvbjxU
SW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApOwor
Cit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzc4ZDM0Y2MzMWM1MDliMDk2MzllMDZlYjM4NjUwZjgw
ZjEyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAK
QEAgLTAsMCArMSwxMDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc2l6ZV90
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBv
cmRlcmluZy5zaXplKCk7Cit9CisKK2NvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzOjphdChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzICAgICAgICAgICAg
ICA9IG9yZGVyaW5nW2luZGV4XTsKKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAq
bSA9IGZpbmQoKnMpOworICAgIEFTU0VSVChtKTsKKyAgICByZXR1cm4gKm07Cit9CisKK2NvbnN0
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gb3JpZ2luYWxU
b01hY2hpbmVyeS5maW5kKCZzKTsKKyAgICBpZiAoaXRlciA9PSBvcmlnaW5hbFRvTWFjaGluZXJ5
LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVy
biAmaXRlci0+c2Vjb25kOworfQorCit2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omlu
c2VydChjb25zdCBUU3RydWN0dXJlICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSkKK3sKKyAg
ICBBU1NFUlQoIWZpbmQocykpOworICAgIG9yaWdpbmFsVG9NYWNoaW5lcnlbJnNdID0gbWFjaGlu
ZXJ5OworICAgIG9yZGVyaW5nLnB1c2hfYmFjaygmcyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCitUSW50ZXJtVHlwZWQgJkZsYXR0ZW4oU3ltYm9sRW52
ICZzeW1ib2xFbnYsIFRJbnRlcm1UeXBlZCAmbm9kZSkKK3sKKyAgICBhdXRvICZ0eXBlID0gbm9k
ZS5nZXRUeXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKworICAgIGF1dG8gJnJl
dFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworICAgIHJldFR5cGUubWFrZUFycmF5KDEpOwor
CisgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVu
IiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cit9CisKK3N0cnVjdCBG
bGF0dGVuQXJyYXkKK3t9OworCitzdHJ1Y3QgUGF0aEl0ZW0KK3sKKyAgICBlbnVtIGNsYXNzIFR5
cGUKKyAgICB7CisgICAgICAgIEZpZWxkLCAgICAgICAgIC8vIFN0cnVjdCBmaWVsZCBpbmRleGlu
Zy4KKyAgICAgICAgSW5kZXgsICAgICAgICAgLy8gQXJyYXksIHZlY3Rvciwgb3IgbWF0cml4IGlu
ZGV4aW5nLgorICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkgcmFuayAtPiBw
b2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorICAgIH07CisKKyAgICBQYXRoSXRlbShjb25zdCBU
RmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6RmllbGQpIHt9CisgICAg
UGF0aEl0ZW0oaW50IGluZGV4KSA6IGluZGV4KGluZGV4KSwgdHlwZShUeXBlOjpJbmRleCkge30K
KyAgICBQYXRoSXRlbSh1bnNpZ25lZCBpbmRleCkgOiBQYXRoSXRlbShzdGF0aWNfY2FzdDxpbnQ+
KGluZGV4KSkge30KKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5
cGU6OkZsYXR0ZW5BcnJheSkge30KKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICBUeXBlIHR5cGU7
Cit9OworCitUSW50ZXJtVHlwZWQgJkJ1aWxkUGF0aEFjY2VzcyhTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+
ICZwYXRoKQoreworICAgIFRJbnRlcm1UeXBlZCAqY3VyciA9IG5ldyBUSW50ZXJtU3ltYm9sKCZ2
YXIpOworICAgIGZvciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0
ZW06OlR5cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzRmllbGQoKmN1
cnIsIGl0ZW0uZmllbGQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpJbmRleDoKKyAgICAgICAgICAgICAgICBjdXJyID0g
JkFjY2Vzc0luZGV4KCpjdXJyLCBpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gKmN1cnI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE9y
aWdpbmFsUGFyYW0gPSBjb25zdCBUVmFyaWFibGUgJjsKK3VzaW5nIE1vZGlmaWVkUGFyYW0gPSBj
b25zdCBUVmFyaWFibGUgJjsKKwordXNpbmcgT3JpZ2luYWxBY2Nlc3MgPSBUSW50ZXJtVHlwZWQ7
Cit1c2luZyBNb2RpZmllZEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsKKworc3RydWN0IEFjY2Vzcwor
eworICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKyAgICBNb2RpZmllZEFjY2VzcyAmbW9k
aWZpZWQ7CisKKyAgICBzdHJ1Y3QgRW52CisgICAgeworICAgICAgICBjb25zdCBDb252ZXJ0VHlw
ZSB0eXBlOworICAgIH07Cit9OworCit1c2luZyBDb252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rp
b248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNz
ICYpPjsKKworY2xhc3MgQ29udmVydFN0cnVjdFN0YXRlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCit7
CisgIHByaXZhdGU6CisgICAgc3RydWN0IENvbnZlcnNpb25JbmZvCisgICAgeworICAgICAgICBD
b252ZXJzaW9uRnVuYyBzdGRGdW5jOworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmFzdEZ1bmM7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisgICAgICAgIEltbXV0
YWJsZVN0cmluZyBwYXRoTmFtZTsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBDb252ZXJ0U3Ry
dWN0U3RhdGUoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29u
ZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJpZXMgJm91dE1hY2hpbmVyaWVzKQorICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorICAgICAg
ICAgIHN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1vZGlmaWVkRmllbGRzKCpuZXcg
VEZpZWxkTGlzdCgpKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFi
bGUoKSksCisgICAgICAgICAgaWRHZW4oaWRHZW4pLAorICAgICAgICAgIG91dE1hY2hpbmVyaWVz
KG91dE1hY2hpbmVyaWVzKQorICAgIHt9CisKKyAgICB+Q29udmVydFN0cnVjdFN0YXRlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG5h
bWVQYXRoU2l6ZXMuZW1wdHkoKSk7CisgICAgfQorCisgICAgdm9pZCBwdWJsaXNoKGNvbnN0IFRT
dHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LCBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUp
CisgICAgeworICAgICAgICBjb25zdCBib29sIGlzT3JpZ2luYWxUb01vZGlmaWVkID0gY29uZmln
LmNvbnZlcnRUeXBlID09IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ7CisKKyAgICAg
ICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBt
b2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmbW9kaWZpZWRGaWVsZHMsIG1vZGlmaWVkU3RydWN0TmFtZS5z
eW1ib2xUeXBlKCkpOworCisgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKyAg
ICAgICAgICAgICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgIGlkR2VuLmNyZWF0ZU5ld05hbWUo
aXNPcmlnaW5hbFRvTW9kaWZpZWQgPyAib3JpZ2luYWxUb01vZGlmaWVkIiA6ICJtb2RpZmllZFRv
T3JpZ2luYWwiKQorICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Vm9pZCksIGZh
bHNlKTsKKworICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorICAgICAgICAg
ICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgb3JpZ2luYWxTdHJ1Y3QsIE5h
bWUoIm9yaWdpbmFsIikpOworICAgICAgICBNb2RpZmllZFBhcmFtIG1vZGlmaWVkUGFyYW0gPQor
ICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZpZWRT
dHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJl
bmNlKG9yaWdpbmFsUGFyYW0sIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgc3ltYm9s
RW52Lm1hcmtBc1JlZmVyZW5jZShtb2RpZmllZFBhcmFtLCBjb25maWcuZXh0ZXJuYWxBZGRyZXNz
U3BhY2UpOworICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAgICAg
IGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBh
cmFtKTsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFRJbnRlcm1CbG9jayAmYm9keSA9ICpuZXcgVEludGVybUJsb2Nr
KCk7CisKKyAgICAgICAgQWNjZXNzOjpFbnYgZW52e2NvbmZpZy5jb252ZXJ0VHlwZX07CisKKyAg
ICAgICAgZm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBjb252ZXJ0ID0gWyZdKE9yaWdpbmFsQWNjZXNzICZvcmln
aW5hbCwgTW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGlu
Zm8uYXN0RnVuYykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5mby5zdGRGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMg
ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG9y
aWdpbmFsIDogbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICppbmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnN0ZEZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3MgYWNjZXNzICAgICAgPSBpbmZvLnN0ZEZ1bmMoZW52LCBvcmln
aW5hbCwgbW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAg
PSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBhY2Nlc3MubW9kaWZpZWQgOiBhY2Nlc3Mub3JpZ2luYWw7CisgICAgICAgICAg
ICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCAmZGVzdCwgJnNyYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisgICAg
ICAgICAgICBNb2RpZmllZEFjY2VzcyAqbW9kaWZpZWQgPSAmQWNjZXNzRmllbGQobW9kaWZpZWRQ
YXJhbSwgaW5mby5wYXRoTmFtZSk7CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3Jp
Z2luYWwtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG10ID0gbW9kaWZpZWQt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChvdC5pc0FycmF5KCkgPT0gbXQuaXNBcnJh
eSgpKTsKKworICAgICAgICAgICAgaWYgKG90LmlzQXJyYXkoKSAmJiBvdCAhPSBtdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10
LmdldEFycmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90LmlzQXJyYXlPZkFycmF5
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAm
RmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIG1vZGlm
aWVkID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqbW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5n
ZXRBcnJheVNpemVQcm9kdWN0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdm9sdW1lOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbCA9IG9yaWdpbmFsLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbEFjY2VzcyAmbyA9IEFjY2Vzc0luZGV4KCpv
cmlnaW5hbCwgaSk7CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZtID0gQWNj
ZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydChvLCBt
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmll
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvICpmdW5jUHJvdG8g
PSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jKTsKKyAgICAgICAgYXV0byAqZnVu
Y0RlZiAgID0gbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24oZnVuY1Byb3RvLCAmYm9keSk7
CisKKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgbWFjaGluZXJ5OworICAgICAgICBt
YWNoaW5lcnkubW9kaWZpZWRTdHJ1Y3QgICAgICAgICAgICAgICAgICAgPSAmbW9kaWZpZWRTdHJ1
Y3Q7CisgICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9
IGZ1bmNEZWY7CisKKyAgICAgICAgb3V0TWFjaGluZXJpZXMuaW5zZXJ0KG9yaWdpbmFsU3RydWN0
LCBtYWNoaW5lcnkpOworICAgIH0KKworICAgIHZvaWQgcHVzaFBhdGgoUGF0aEl0ZW0gY29uc3Qg
Jml0ZW0pCisgICAgeworICAgICAgICBwYXRoSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAg
ICAgIHN3aXRjaCAoaXRlbS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBhdGhJ
dGVtOjpUeXBlOjpGaWVsZDoKKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVs
ZC0+bmFtZSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0
aChpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBQYXRoSXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAgICAgICAgIG5hbWVQYXRo
U2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHBvcFBhdGgoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aFNpemVz
LmVtcHR5KCkpOworICAgICAgICBuYW1lUGF0aC5yZXNpemUobmFtZVBhdGhTaXplcy5iYWNrKCkp
OworICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisKKyAgICAgICAgQVNTRVJUKCFw
YXRoSXRlbXMuZW1wdHkoKSk7CisgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworICAgIH0K
KworICAgIHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFmaW5hbGl6ZWQp
OworICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBpbnRyb2R1Y2VQYWNraW5nKCk7
CisgICAgICAgIEFTU0VSVChtZXRhbExheW91dFRvdGFsID09IExheW91dDo6SWRlbnRpdHkoKSk7
CisgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vZGlm
aWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VFR5cGUgJm5ld1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBh
Y2tpbmcgcGFja2luZykKKyAgICB7CisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVh
bGlmaWVyID0gbmV3VHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgbGF5b3V0UXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworICAgICAgICBsYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyAgICA9IHBhY2tpbmc7CisgICAgICAgIG5ld1R5cGUuc2V0TGF5b3V0
UXVhbGlmaWVyKGxheW91dFF1YWxpZmllcik7CisKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3Ry
aW5nIHBhdGhOYW1lKG5hbWVQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNr
KG5ldyBURmllbGQoJm5ld1R5cGUsIHBhdGhOYW1lLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJv
bFR5cGUoKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBDb252ZXJz
aW9uRnVuYyAmZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVsZHMuZW1w
dHkoKSk7CisgICAgICAgIGNvbnZlcnNpb25JbmZvcy5wdXNoX2JhY2soe2Z1bmMsIG51bGxwdHIs
IHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZENvbnZlcnNpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0eSgpKTsKKyAgICAgICAgY29udmVyc2lvbklu
Zm9zLnB1c2hfYmFjayh7e30sICZmdW5jLCBwYXRoSXRlbXMsIG1vZGlmaWVkRmllbGRzLmJhY2so
KS0+bmFtZSgpfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNQYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gY29udGFpbnNQYWNrZWQ7IH0KKworICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0
dXJuIHBhZEZpZWxkQ291bnQgPiAwOyB9CisKKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
ICAgIHsKKyAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKm0gPSBvdXRNYWNo
aW5lcmllcy5maW5kKHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChtID09IG51bGxwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
c3RydWN0dXJlLm5hbWUoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0
TWFjaGluZXJpZXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG0gPSBvdXRNYWNoaW5lcmllcy5maW5kKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQobSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0
TWFjaGluZXJ5ID0gKm07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxheW91
dCkKKyAgICB7CisgICAgICAgIGlmIChwYWRBbW91bnQgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0g
bW9kaWZpZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBp
biBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxs
IG5vdAorICAgICAgICAvLyBhbGxvdyBtYXRyaXggb3IgYXJyYXkgbWVtYmVycy4KKyAgICAgICAg
d2hpbGUgKHBhZEFtb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlICpwYWRU
eXBlOworICAgICAgICAgICAgaWYgKHBhZEFtb3VudCA+PSAxNikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwYWRBbW91bnQgLT0gMTY7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9
IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgNCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQgPj0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwYWRBbW91bnQgLT0gODsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRU
eXBlKFRCYXNpY1R5cGU6OkVidEZsb2F0LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKHBhZEFtb3VudCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhZEFtb3VudCAtPSA0OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJh
c2ljVHlwZTo6RWJ0RmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cGFkQW1vdW50ID49IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDI7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRCb29sLCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworICAgICAgICAgICAg
ICAgIHBhZEFtb3VudCAtPSAxOworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0Qm9vbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1
cGRhdGVMYXlvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRU
b3RhbCArPSBNZXRhbExheW91dE9mKCpwYWRUeXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIik7CisgICAg
ICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgbmV3IFRG
aWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5
cGUoKSkpOworICAgICAgICAgICAgKytwYWRGaWVsZENvdW50OworICAgICAgICB9CisKKyAgICAg
ICAgc3RkOjpyZXZlcnNlKG1vZGlmaWVkRmllbGRzLmJlZ2luKCkgKyBiZWdpbiwgbW9kaWZpZWRG
aWVsZHMuZW5kKCkpOworICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFja2luZygpCisgICAg
eworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2V0VW5wYWNrZWRTdG9yYWdl
ID0gW10oVFR5cGUgJnR5cGUpIHsKKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAgICAgICAg
ICAgc3dpdGNoIChzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Bh
Y2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6
OkVic1N0ZDQzMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRCbG9ja1N0b3JhZ2UodHlwZSwg
c3RvcmFnZSk7CisgICAgICAgIH07CisKKyAgICAgICAgTGF5b3V0IGdsc2xMYXlvdXRUb3RhbCA9
IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1v
ZGlmaWVkRmllbGRzLnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICZjdXJyICAgICAgICAgICA9
ICptb2RpZmllZEZpZWxkc1tpXTsKKyAgICAgICAgICAgIFRUeXBlICZjdXJyVHlwZSAgICAgICAg
PSAqY3Vyci50eXBlKCk7CisgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2Fu
QmVQYWNrZWQoY3VyclR5cGUpOworCisgICAgICAgICAgICBhdXRvIGRvbnRQYWNrID0gWyZdKCkg
eworICAgICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBHbHNsTGF5b3V0
T2YoY3VyclR5cGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFDYW5CZVBh
Y2tlZChjdXJyVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2so
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29uc3QgTGF5b3V0IHBhY2tlZEdsc2xMYXlvdXQgICAgICAgICAgID0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgcGFja2Vk
U3RvcmFnZSA9IGN1cnJUeXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKyAg
ICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICBjb25z
dCBMYXlvdXQgdW5wYWNrZWRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKyAg
ICAgICAgICAgIFNldEJsb2NrU3RvcmFnZShjdXJyVHlwZSwgcGFja2VkU3RvcmFnZSk7CisKKyAg
ICAgICAgICAgIEFTU0VSVChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA8PSB1bnBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA9
PSB1bnBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBqID0gaSArIDE7CisgICAgICAgICAgICBpZiAo
aiA9PSBzaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNr
ZWRHbHNsTGF5b3V0LnNpemVPZjsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmbmV4dCAgICAg
ICAgICA9ICptb2RpZmllZEZpZWxkc1tqXTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dCBuZXh0
R2xzbExheW91dCA9IEdsc2xMYXlvdXRPZigqbmV4dC50eXBlKCkpOworCisgICAgICAgICAgICBp
ZiAocGFkIDwgbmV4dEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN5bWJvbEVudi5tYXJrQXNQYWNrZWQoY3Vycik7CisgICAgICAg
ICAgICBnbHNsTGF5b3V0VG90YWwgKz0gcGFja2VkR2xzbExheW91dDsKKyAgICAgICAgICAgIGNv
bnRhaW5zUGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW50cm9k
dWNlUGFkZGluZygpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJs
ZVBhY2tpbmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKyAgICAgICAgbGF5
b3V0Q29uZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkID0gdHJ1ZTsKKworICAgICAgICBU
RmllbGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisgICAgICAgIEFT
U0VSVCghZmllbGRzLmVtcHR5KCkpOyAgLy8gR0xTTCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWVt
YmVyLgorCisgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKworICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKyAgICAg
ICAgICAgIGNvbnN0IExheW91dCBtZXRhbExheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5
b3V0Q29uZmlnKTsKKworICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisgICAg
ICAgICAgICBpZiAoZ2xzbExheW91dC5hbGlnbk9mID4gbWV0YWxMYXlvdXQuYWxpZ25PZiAmJiBm
aWVsZCAhPSBmaXJzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworICAgICAgICAgICAg
ICAgIG1ldGFsTGF5b3V0VG90YWwucmVxdWlyZUFsaWdubWVudChnbHNsTGF5b3V0LmFsaWduT2Ys
IHRydWUpOworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRkZWRTaXplID0gbWV0YWxM
YXlvdXRUb3RhbC5zaXplT2Y7CisgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAg
ICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKyAgICAgICAgICAgICAgICBtZXRhbExh
eW91dFRvdGFsICs9IG1ldGFsTGF5b3V0OworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocHJl
UGFkQW1vdW50LCBmYWxzZSk7ICAvLyBOb3RlOiByZXF1aXJlQWxpZ25tZW50KCkgYWxyZWFkeSB1
cGRhdGVkIGxheW91dAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjayhmaWVs
ZCk7CisKKyAgICAgICAgICAgIGlmIChnbHNsTGF5b3V0LnNpemVPZiA+IG1ldGFsTGF5b3V0LnNp
emVPZiAmJiBmaWVsZCAhPSBmaWVsZHMuYmFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGJvb2wgdXBkYXRlTGF5b3V0ID0gdHJ1ZTsgIC8vIFhYWDogQ29ycmVjdD8K
KyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgcGFkQW1vdW50ICA9IGdsc2xMYXlvdXQuc2l6
ZU9mIC0gbWV0YWxMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFk
QW1vdW50LCB1cGRhdGVMYXlvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBwdXNoTmFtZVBhdGgoY29uc3QgY2hhciAqZXh0cmEpCisgICAgeworICAgICAg
ICBBU1NFUlQoZXh0cmEgJiYgKmV4dHJhICE9ICdcMCcpOworICAgICAgICBuYW1lUGF0aFNpemVz
LnB1c2hfYmFjayhuYW1lUGF0aC5zaXplKCkpOworICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0
cmE7CisgICAgICAgIGlmIChuYW1lUGF0aC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBuYW1lUGF0aCA9IHA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKCpwID09ICdfJykKKyAgICAgICAgeworICAgICAgICAgICAgKytwOworICAgICAgICB9
CisgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gIngi
OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lUGF0aC5iYWNrKCkgIT0gJ18nKQorICAgICAg
ICB7CisgICAgICAgICAgICBuYW1lUGF0aCArPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRy
YSkKKyAgICB7CisgICAgICAgIGNoYXIgYnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjpkaWdpdHMxMCArIDFdOworICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEp
OworICAgICAgICBwdXNoTmFtZVBhdGgoYnVmZmVyKTsKKyAgICB9CisKKyAgcHVibGljOgorICAg
IGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnOworICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52OworCisgIHByaXZhdGU6CisgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisgICAg
TGF5b3V0IG1ldGFsTGF5b3V0VG90YWwgPSBMYXlvdXQ6OklkZW50aXR5KCk7CisgICAgc2l6ZV90
IHBhZEZpZWxkQ291bnQgICAgPSAwOworICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0gZmFs
c2U7CisgICAgYm9vbCBmaW5hbGl6ZWQgICAgICAgICAgPSBmYWxzZTsKKworICAgIHN0ZDo6dmVj
dG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG5hbWVQ
YXRoU2l6ZXM7CisgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisKKyAgICBzdGQ6OnZlY3RvcjxD
b252ZXJzaW9uSW5mbz4gY29udmVyc2lvbkluZm9zOworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGU7CisgICAgSWRHZW4gJmlkR2VuOworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMg
Jm91dE1hY2hpbmVyaWVzOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcg
TW9kaWZ5RnVuYyA9IGJvb2wgKCopKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7
CisKK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jvb2wgSWRlbnRpdHlN
b2RpZnkoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2Nr
U3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUo
KTsKKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBDbG9uZVR5cGUodHlwZSksIHN0
b3JhZ2UsIHBhY2tpbmcpOworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52
ICYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1
cm4gQWNjZXNze28sIG19OworICAgIH0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9
ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3Rh
dGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
c3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAmc3ViZmllbGRzID0gc3Vic3Ry
dWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiBzdWJm
aWVsZHMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmc3VidHlwZSAgICAgICAgICAgICAg
ICAgID0gKnN1YmZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworICAgICAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBzdWJwYWNraW5nID0gT3ZlcmxheShwYWNraW5nLCBzdWJ0
eXBlKTsKKyAgICAgICAgTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqc3ViZmllbGQsIHN1YnN0b3Jh
Z2UsIHN1YnBhY2tpbmcpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJl
Y3Vyc2VTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAg
ICA9ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0g
c3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0
YXRlLmNvbmZpZy5yZWN1cnNlU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7Cisg
ICAgaWYgKCFzdGF0ZS5yZWN1cnNlKCpzdWJzdHJ1Y3R1cmUsIG1hY2hpbmVyeSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3
IFRUeXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkKKyAgICB7CisgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisgICAgfQorCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVy
dGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOwor
ICAgIEFTU0VSVChjb252ZXJ0ZXIpOworCisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVs
ZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbigq
Y29udmVydGVyLT5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgVFR5
cGUgJnJvd1R5cGUgPSBEcm9wQ29sdW1ucyh0eXBlKTsKKworICAgIGZvciAoaW50IGMgPSAwOyBj
IDwgY29sczsgKytjKQorICAgIHsKKyAgICAgICAgc3RhdGUucHVzaFBhdGgoYyk7CisKKyAgICAg
ICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcm93VHlwZSwgc3RvcmFnZSwgcGFja2lu
Zyk7CisgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252
ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRy
aXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlw
ZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBjb25zdCBpbnQgcm93cyAgICAgICA9IHR5cGUuZ2V0Um93cygpOwor
ICAgIGNvbnN0IGludCBzYXR1cmF0aW9uID0gc3RhdGUuY29uZmlnLnNhdHVyYXRlTWF0cml4Um93
cyhmaWVsZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygp
OworICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24p
OworICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNhdFR5cGUsIHN0b3JhZ2UsIHBh
Y2tpbmcpOworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisgICAgeworICAg
ICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7ICsrcikKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3Mg
Jm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICAgICAgYXV0byAmb18gPSBBY2Nl
c3NJbmRleChBY2Nlc3NJbmRleChvLCBjKSwgcik7CisgICAgICAgICAgICAgICAgYXV0byAmbV8g
PSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEFjY2Vzc3tvXywgbV99OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXN0Qm9vbFRvVWludChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQoreworICAgIGlmIChmaWVsZC50eXBl
KCktPmdldEJhc2ljVHlwZSgpICE9IFRCYXNpY1R5cGU6OkVidEJvb2wpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29s
VG9VaW50KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0FjY2VzcyBDb252ZXJ0Qm9vbFRvVWludChDb252ZXJ0VHlwZSBj
b252ZXJ0VHlwZSwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKQoreworICAg
IGF1dG8gY29lcmNlID0gW10oVEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAt
PiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlQ29uc3RydWN0b3IodG8uZ2V0VHlwZSgpLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tfSk7
CisgICAgfTsKKyAgICBzd2l0Y2ggKGNvbnZlcnRUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBD
b252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOgorICAgICAgICAgICAgcmV0dXJuIEFjY2Vz
c3tjb2VyY2UobSwgbyksIG19OworICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpNb2RpZmllZFRv
T3JpZ2luYWw6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNze28sIGNvZXJjZShvLCBtKX07Cisg
ICAgfQorfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVj
dFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJyYXkpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAhPSBhcnJheSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCEoKHR5cGUuaXNS
YW5rMCgpICYmIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkgfHwgdHlwZS5pc1ZlY3RvcigpKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgYXV0byBzYXR1
cmF0b3IgPQorICAgICAgICBhcnJheSA/IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVj
dG9yQXJyYXlzIDogc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0b3I7CisgICAgY29u
c3QgaW50IGRpbSAgICAgICAgPSB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgY29uc3QgaW50
IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworICAgIGlmIChzYXR1cmF0aW9uIDw9IGRp
bSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmc2F0
VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisgICAgY29uc3Qg
Ym9vbCBib29sVG9VaW50ID0gVGVzdEJvb2xUb1VpbnQoc3RhdGUsIGZpZWxkKTsKKyAgICBpZiAo
Ym9vbFRvVWludCkKKyAgICB7CisgICAgICAgIHNhdFR5cGUuc2V0QmFzaWNUeXBlKFRCYXNpY1R5
cGU6OkVidFVJbnQpOworICAgIH0KKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBz
YXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGlt
OyArK2QpCisgICAgeworICAgICAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVu
diAmZW52LCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAg
ICAgIGF1dG8gJm9fID0gZGltID4gMSA/IEFjY2Vzc0luZGV4KG8sIGQpIDogbzsKKyAgICAgICAg
ICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisgICAgICAgICAgICBpZiAoYm9vbFRv
VWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xU
b1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvXywgbV99Owor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICByZXR1cm4gU2F0dXJhdGVT
Y2FsYXJPclZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIHRydWUp
OworfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3IoQ29udmVydFN0cnVjdFN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9u
KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgZmFsc2UpOworfQorCitib29sIFByb21v
dGVCb29sVG9VaW50KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBpZiAoIVRlc3RCb29sVG9V
aW50KHN0YXRlLCBmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYXV0byAmcHJvbW90ZWRUeXBlID0gQ2xvbmVUeXBlKCpmaWVsZC50eXBlKCkpOworICAg
IHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisgICAgc3Rh
dGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcHJvbW90ZWRUeXBlLCBzdG9yYWdlLCBwYWNraW5n
KTsKKworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQ29udmVy
dEJvb2xUb1VpbnQoZW52LnR5cGUsIG8sIG0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTW9kaWZ5Q29tbW9uKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgY29uc3Qg
VExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10g
PSB7CisgICAgICAgIElubGluZVN0cnVjdCwgICAgICAgICAgICAgICAgICAvLworICAgICAgICBS
ZWN1cnNlU3RydWN0LCAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1
bW5zLCAgICAgICAgICAgIC8vCisgICAgICAgIFNhdHVyYXRlTWF0cml4Um93cywgICAgICAgICAg
ICAvLworICAgICAgICBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzLCAgLy8KKyAgICAgICAg
U2F0dXJhdGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisgICAgICAgIFByb21vdGVCb29sVG9V
aW50LCAgICAgICAgICAgICAvLworICAgIH07CisKKyAgICBmb3IgKE1vZGlmeUZ1bmMgZnVuYyA6
IGZ1bmNzKQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdl
LCBwYWNraW5nKTsKK30KKworYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLmlubGlu
ZUFycmF5KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAg
ICBjb25zdCBib29sIGlzTXVsdGlEaW0gPSB0eXBlLmlzQXJyYXlPZkFycmF5cygpOworCisgICAg
YXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgY29uc3QgVEZp
ZWxkIGlubmVybW9zdEZpZWxkKCZpbm5lcm1vc3RUeXBlLCBmaWVsZC5uYW1lKCksIGZpZWxkLmxp
bmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKTsKKworICAgIGlmIChpc011bHRpRGltKQorICAgIHsK
KyAgICAgICAgc3RhdGUucHVzaFBhdGgoRmxhdHRlbkFycmF5KCkpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2b2x1bWU7ICsraSkKKyAgICB7CisgICAgICAgIHN0YXRl
LnB1c2hQYXRoKGkpOworICAgICAgICBNb2RpZnlDb21tb24oc3RhdGUsIGlubmVybW9zdEZpZWxk
LCBzdG9yYWdlLCBwYWNraW5nKTsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIGlmIChpc011bHRpRGltKQorICAgIHsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZGlmeVJlY3Vyc2l2ZShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCit7CisgICAgc3RhdGUucHVzaFBhdGgoZmllbGQpOworCisgICAgYm9vbCBtb2RpZmll
ZDsKKyAgICBpZiAoSW5saW5lQXJyYXkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkK
KyAgICB7CisgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbW9kaWZpZWQgPSBNb2RpZnlDb21tb24oc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKTsKKyAgICB9CisKKyAgICBzdGF0ZS5wb3BQYXRoKCk7CisKKyAgICByZXR1cm4gbW9k
aWZpZWQ7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworYm9vbCBzaDo6VHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25m
aWcgJmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCit7Cisg
ICAgQ29udmVydFN0cnVjdFN0YXRlIHN0YXRlKHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgb3V0
TWFjaGluZXJpZXMpOworICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJm9yaWdpbmFsRmllbGRzID0gb3JpZ2luYWxTdHJ1Y3QuZmllbGRz
KCk7CisgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZvcmlnaW5hbFR5cGUgICAgICAgICAgPSAqb3JpZ2lu
YWxGaWVsZC0+dHlwZSgpOworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBlKTsK
KyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyA9IE92ZXJsYXkoY29u
ZmlnLmluaXRpYWxNYXRyaXhQYWNraW5nLCBvcmlnaW5hbFR5cGUpOworICAgICAgICBpZiAoIU1v
ZGlmeVJlY3Vyc2l2ZShzdGF0ZSwgKm9yaWdpbmFsRmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICArK2lkZW50aWNhbEZpZWxkQ291bnQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0ZS5maW5hbGl6ZSgpOworCisgICAgaWYgKGlkZW50aWNhbEZpZWxk
Q291bnQgPT0gb3JpZ2luYWxGaWVsZHMuc2l6ZSgpICYmICFzdGF0ZS5oYXNQYWNraW5nKCkgJiYg
IXN0YXRlLmhhc1BhZGRpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4Y2Zj
NTUwNDY4MjQzOGQyYWI3YjEyMzBhOTQ5YzY5OGZkYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllT
VFJVQ1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTU9ESUZZU1RSVUNUX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIENvbnZl
cnRUeXBlCit7CisgICAgT3JpZ2luYWxUb01vZGlmaWVkLAorICAgIE1vZGlmaWVkVG9PcmlnaW5h
bCwKK307CisKKy8vIENvbmZpZ3VyZXMgaG93IHN0cnVjdCBtb2RpZmljYXRpb24gaXMgcGVyZm9y
bWVkLgorY2xhc3MgTW9kaWZ5U3RydWN0Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3Qg
UHJlZGljYXRlCisgICAgeworICAgICAgICB1c2luZyBGdW5jID0gYm9vbCAoKikoY29uc3QgVEZp
ZWxkICYpOworICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgVHJ1ZShjb25zdCBURmllbGQgJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2F0dXJhdGVWZWN0b3IKKyAgICB7
CisgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKyAg
ICAgICAgLy8gSWYgb3JpZ2luYWwgZGltID49IHJldHVybiB2YWx1ZSwgdGhlIGZpZWxkIHJlbWFp
bnMgdW50b3VjaGVkLgorICAgICAgICB1c2luZyBGdW5jID0gaW50ICgqKShjb25zdCBURmllbGQg
Jik7CisgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJl
dHVybiAwOyB9CisgICAgICAgIHN0YXRpYyBpbnQgRnVsbHlTYXR1cmF0ZShjb25zdCBURmllbGQg
JikgeyByZXR1cm4gNDsgfQorICAgIH07CisKKyAgcHVibGljOgorICAgIE1vZGlmeVN0cnVjdENv
bmZpZyhDb252ZXJ0VHlwZSBjb252ZXJ0VHlwZSwgYm9vbCBhbGxvd1BhY2tpbmcsIGJvb2wgYWxs
b3dQYWRkaW5nKQorICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNr
aW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisgICAge30KKwor
ICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cg
dmVjdG9ycy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZGlj
YXRlOjpGYWxzZTsKKworICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0aXBs
ZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorICAgIFByZWRpY2F0ZTo6RnVuYyBpbmxpbmVBcnJh
eSA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUgdGhlaXIg
c3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZVN0
cnVjdCA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2Rp
ZmllZC4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgcmVjdXJzZVN0cnVjdCA9IFByZWRpY2F0ZTo6RmFs
c2U7CisKKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQg
dG8gdWludCBmaWVsZHMuCisgICAgUHJlZGljYXRlOjpGdW5jIHByb21vdGVCb29sVG9VaW50ID0g
UHJlZGljYXRlOjpGYWxzZTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJl
IHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKyAgICAvLyBl
LmcuIGBmbG9hdCAtPiBmbG9hdDRgLgorICAgIC8vIGUuZy4gYGZsb2F0MiAtPiBmbG9hdDRgLgor
ICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0
ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUg
d2hlcmUgc2NhbGFyIG9yIHZlY3RvciBhcnJheSBmaWVsZHMgYXJlIHNhdHVyYXRlZC4KKyAgICAv
LyBlLmcuIGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKyAgICAvLyBlLmcuIGBmbG9hdDJbMTBd
IC0+IGZsb2F0NFsxMF1gCisgICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJP
clZlY3RvckFycmF5cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBD
cmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBtYXRyaXggZmllbGRzIGFyZSByb3ctc2F0dXJh
dGVkLgorICAgIC8vIGUuZy4gYGZsb2F0MngyIC0+IGZsb2F0Mng0YC4KKyAgICBTYXR1cmF0ZVZl
Y3Rvcjo6RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVy
YXRlOworCisgICAgVExheW91dEJsb2NrU3RvcmFnZSBpbml0aWFsQmxvY2tTdG9yYWdlICAgPSBr
RGVmYXVsdExheW91dEJsb2NrU3RvcmFnZTsKKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0
aWFsTWF0cml4UGFja2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKyAgICBDb252
ZXJ0VHlwZSBjb252ZXJ0VHlwZTsKKyAgICBib29sIGFsbG93UGFja2luZzsKKyAgICBib29sIGFs
bG93UGFkZGluZzsKKyAgICBBZGRyZXNzU3BhY2UgZXh0ZXJuYWxBZGRyZXNzU3BhY2U7Cit9Owor
CitzdHJ1Y3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkKK3sKKyAgICBjb25zdCBUU3RydWN0dXJl
ICptb2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVs
bHB0cjsKKworICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKiZnZXRDb252ZXJ0ZXIoQ29u
dmVydFR5cGUgY29udmVydFR5cGUpCisgICAgeworICAgICAgICBpZiAoY29udmVydFR5cGUgPT0g
Q29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKyAg
ICAgICAgfQorICAgIH0KK307CisKKy8vIEluZGV4ZWQgYnkgdG9wb2xvZ2ljYWwgb3JkZXIuCitj
bGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCit7CisgIHB1YmxpYzoKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZhdChzaXpl
X3QgaW5kZXgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRTdHJ1
Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpOworCisg
IHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9k
aWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisgICAgc3RkOjp2ZWN0
b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBvcmRlcmluZzsKK307CisKKy8vIFJldHVybnMgdHJ1ZSBh
bmQgYG91dE1hY2hpbmVyeWAgcG9wdWxhdGVkIGlmIG1vZGlmaWNhdGlvbnMgd2VyZSBwZXJmb3Jt
ZWQuCisvLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRT
dHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5
U3RydWN0Q29uZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1hY2hpbmVyaWVzKTsKKworfSAg
Ly8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TmFtZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjNWQxODVlNmZh
ZDM3NTY5ZWZjYmQ4NTVmMmFlNDAxZTY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgSW1tdXRh
YmxlU3RyaW5nIEdldE5hbWUoVCBjb25zdCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3Quc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtF
bXB0eUltbXV0YWJsZVN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC5uYW1lKCk7Cit9
CisKK05hbWU6Ok5hbWUoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBOYW1lKEdldE5hbWUoZmllbGQp
LCBmaWVsZC5zeW1ib2xUeXBlKCkpIHt9CisKK05hbWU6Ok5hbWUoY29uc3QgVFN5bWJvbCAmc3lt
Ym9sKSA6IE5hbWUoR2V0TmFtZShzeW1ib2wpLCBzeW1ib2wuc3ltYm9sVHlwZSgpKSB7fQorCiti
b29sIE5hbWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SYXdOYW1lID09IG90aGVyLm1SYXdOYW1lICYmIG1TeW1ib2xUeXBlID09IG90aGVyLm1T
eW1ib2xUeXBlOworfQorCitib29sIE5hbWU6Om9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIE5hbWU6
Om9wZXJhdG9yPChjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobVJhd05hbWUg
PCBvdGhlci5tUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAob3RoZXIubVJhd05hbWUgPCBtUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1TeW1ib2xUeXBlIDwgb3RoZXIubVN5bWJvbFR5cGU7
Cit9CisKK2Jvb2wgTmFtZTo6ZW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtU3ltYm9sVHlw
ZSA9PSBTeW1ib2xUeXBlOjpFbXB0eTsKK30KKworYm9vbCBOYW1lOjpiZWdpbnNXaXRoKGNvbnN0
IE5hbWUgJnByZWZpeCkgY29uc3QKK3sKKyAgICBpZiAobVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1T
eW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gbVJhd05hbWUuYmVnaW5zV2l0aChwcmVmaXgubVJhd05hbWUpOworfQorCit2b2lkIE5hbWU6
OmVtaXQoVEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobVN5bWJvbFR5
cGUpCisgICAgeworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1l
LmVtcHR5KCkpOworICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAg
ICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZS5i
ZWdpbnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtUmF3TmFtZVswXSAhPSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8IGtBbmdsZUludGVybmFsUHJlZml4IDw8ICdfJyA8PCBtUmF3TmFtZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwga0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorICAg
ICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKKy8vIE5PVEU6IFRoaXMg
bWF0Y2hlcyBtb3JlIHRoaW5ncyB0aGFuIEZpbmRTeW1ib2xOb2RlLgorY2xhc3MgRXhwcmVzc2lv
bkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICAgIE5h
bWUgbU5hbWU7CisgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisKKyAgcHVibGljOgorICAg
IEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisgICAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtTmFtZShuYW1lKQorICAg
IHt9CisKKyAgICBib29sIGZvdW5kTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZE5hbWU7IH0K
KworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChOYW1lKG5vZGUtPnZhcmlhYmxlKCkpID09IG1OYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRm91bmROYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqKSBvdmVycmlkZSB7
IHJldHVybiAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0K
KworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBv
dmVycmlkZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobm9kZS0+aXND
b25zdHJ1Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAg
ICAgICAgICAgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJl
ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZSAmJiBOYW1lKCpzdHJ1Y3R1cmUpID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0g
bm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMp
ID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAhbUZvdW5kTmFt
ZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0IHZpc2l0LCBUSW50ZXJtSWZF
bHNlICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJ
bnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJ
bnRlcm1DYXNlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZSB7IExPR0lDX0VSUk9SKCk7
IH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QmxvY2soVmlz
aXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1Io
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBU
SW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0TG9vcChW
aXNpdCwgVEludGVybUxvb3AgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QnJhbmNo
KFZpc2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19F
UlJPUigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdFBy
ZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJy
aWRlIHsgTE9HSUNfRVJST1IoKTsgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Citib29sIHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRl
cm1UeXBlZCAmbm9kZSkKK3sKKyAgICBFeHByZXNzaW9uQ29udGFpbnNOYW1lVmlzaXRvciB2aXNp
dG9yKG5hbWUpOworICAgIG5vZGUudHJhdmVyc2UoJnZpc2l0b3IpOworICAgIHJldHVybiB2aXNp
dG9yLmZvdW5kTmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlYWVhOGI0N2JhZjk0MjFlZDU0MDczMDEx
ZjljYjViNTA4NTA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKQEAg
LTAsMCArMSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9OQU1FX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNo
YXIga0FuZ2xlSW50ZXJuYWxQcmVmaXhbXSA9ICJBTkdMRSI7CisKKy8vIFJlcHJlc2VudHMgdGhl
IG5hbWUgb2YgYSBzeW1ib2wuCitjbGFzcyBOYW1lCit7CisgIHB1YmxpYzoKKyAgICBjb25zdGV4
cHIgTmFtZShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0ZXhwciBOYW1lKCkg
OiBOYW1lKGtFbXB0eUltbXV0YWJsZVN0cmluZywgU3ltYm9sVHlwZTo6RW1wdHkpIHt9CisKKyAg
ICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9s
VHlwZSBzeW1ib2xUeXBlKQorICAgICAgICA6IG1SYXdOYW1lKHJhd05hbWUpLCBtU3ltYm9sVHlw
ZShzeW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAo
c3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworICAgIH0KKworICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisgICAgICAgIDogTmFtZShJbW11dGFibGVT
dHJpbmcocmF3TmFtZSksIHN5bWJvbFR5cGUpCisgICAge30KKworICAgIGV4cGxpY2l0IE5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcgJnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAg
ICAgOiBOYW1lKEltbXV0YWJsZVN0cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgTmFtZShjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBleHBsaWNpdCBO
YW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCk7CisKKyAgICBOYW1lICZvcGVyYXRvcj0oY29uc3Qg
TmFtZSAmKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVy
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Owor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKworICAgIGNvbnN0
ZXhwciBjb25zdCBJbW11dGFibGVTdHJpbmcgJnJhd05hbWUoKSBjb25zdCB7IHJldHVybiBtUmF3
TmFtZTsgfQorICAgIGNvbnN0ZXhwciBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtU3ltYm9sVHlwZTsgfQorCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworICAgIGJvb2wg
YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0OworCisgICAgdm9pZCBlbWl0KFRJ
bmZvU2lua0Jhc2UgJm91dCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHJp
bmcgbVJhd05hbWU7CisgICAgU3ltYm9sVHlwZSBtU3ltYm9sVHlwZTsKK307CisKK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJ
bnRlcm1UeXBlZCAmbm9kZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU0YzM3OGExYzk1MDU5ZmQyYjY5NjhlYTYwNDQ3OGJiOWY0OGM4N2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsNDc2
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0J1aWx0SW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAo
dmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorCitib29s
IFBpcGVsaW5lOjp1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAoreworICAgIGlmICh2
YXIuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmdmFyID09IGdsb2JhbEluc3RhbmNlVmFyOworICAgIH0KKworICAgIGNv
bnN0IFRUeXBlICZub2RlVHlwZSAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworCisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxVmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmVydGV4T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9zaXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0
T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorICAgICAgICAgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRPdXQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlT3V0OgorICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmFyeWluZ091dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoK
KyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZsYXRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cVNtb290aEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2Vu
dHJvaWRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3Rp
dmVJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZhcnlpbmdJbjoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmll
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZy
YWdtZW50T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9y
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0RhdGE6CisgICAgICAg
ICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6
OlVzZXJVbmlmb3JtczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVW5pZm9ybToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFHbG9iYWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAg
ICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Nvb3Jk
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5nOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBU
eXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIGdsb2Jh
bEluc3RhbmNlVmFyIHNob3VsZCBiZSBub24tbnVsbCBhbmQgdGh1cyBuZXZlciByZWFjaCBoZXJl
LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkp
OworCisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIHJldHVybiBO
YW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworICAg
IH0KK30KKworTmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50
KSBjb25zdAoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJ
QU5UX05BTUUodmFyaWFudCwgIlZlcnRleEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJWZXJ0ZXhPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJGcmFnbWVudEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpGcmFnbWVudE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
IkZyYWdtZW50T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpV
c2VyVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJV
c2VyVW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkFu
Z2xlVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJB
bmdsZVVuaWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpO
b25Db25zdGFudEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJOb25Db25zdEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklB
TlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisg
ICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uRnJhZ21l
bnRHbG9iYWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVGV4dHVyZUVu
dnMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnN0YW5jZUlkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5hbWUobmFtZSk7Cit9CisK
K05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdEluc3RhbmNlTmFtZShWYXJpYW50IHZhcmlhbnQpIGNv
bnN0Cit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgInZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
ImZyYWdtZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiZnJh
Z21lbnRPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVzZXJV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInVzZXJV
bmlmb3JtcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImFuZ2xl
VW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5vbkNv
bnN0YW50R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
Im5vbkNvbnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAg
ICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImludm9jYXRpb25GcmFnbWVudEds
b2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ0ZXh0dXJlRW52cyIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAg
ICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImluc3RhbmNlSWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKworc3Rh
dGljIGJvb2wgQWxsb3dQYWNraW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcg
VHlwZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
ICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91
dDoKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNh
c2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRp
b25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEds
b2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlw
ZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
SW46CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
QW5nbGVVbmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KK2VudW0gQ29tcGFy
ZQoreworICAgIExULAorICAgIExURSwKKyAgICBFUSwKKyAgICBHVEUsCisgICAgR1QsCit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIENvbXBhcmVCeShDb21wYXJlIG9w
LCBjb25zdCBUICZ4LCBjb25zdCBUICZ5KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIExUOgorICAgICAgICAgICAgcmV0dXJuIHggPCB5OworICAgICAgICBjYXNlIExU
RToKKyAgICAgICAgICAgIHJldHVybiB4IDw9IHk7CisgICAgICAgIGNhc2UgRVE6CisgICAgICAg
ICAgICByZXR1cm4geCA9PSB5OworICAgICAgICBjYXNlIEdURToKKyAgICAgICAgICAgIHJldHVy
biB4ID49IHk7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICByZXR1cm4geCA+IHk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8VEJhc2ljVHlwZSBCVCwgQ29tcGFyZSBDbXAsIGludCBNYXRj
aERpbSwgaW50IE5ld0RpbT4KK3N0YXRpYyBpbnQgU2F0dXJhdGVWZWN0b3JPZihjb25zdCBURmll
bGQgJmZpZWxkKQoreworICAgIHN0YXRpY19hc3NlcnQoTmV3RGltID49IE1hdGNoRGltLCAiIik7
CisKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgQVNTRVJUKHR5
cGUuaXNTY2FsYXIoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworCisgICAgY29uc3QgYm9vbCBjb25k
ID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICBDb21wYXJlQnkoQ21wLCB0eXBlLmdldE5vbWluYWxTaXplKCksIE1h
dGNoRGltKTsKKworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5ld0RpbTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK01vZGlmeVN0cnVjdENvbmZpZyBQaXBlbGluZTo6
ZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlDb25maWcoKSBjb25zdAoreworICAgIHVzaW5nIFByZWQgICA9
IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworICAgIHVzaW5nIFNhdFZlYyA9IE1vZGlm
eVN0cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcg
Y29uZmlnKAorICAgICAgICBpc1BpcGVsaW5lT3V0KCkgPyBDb252ZXJ0VHlwZTo6T3JpZ2luYWxU
b01vZGlmaWVkIDogQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9PcmlnaW5hbCwKKyAgICAgICAgQWxs
b3dQYWNraW5nKHR5cGUpLCBBbGxvd1BhZGRpbmcodHlwZSkpOworCisgICAgY29uZmlnLmV4dGVy
bmFsQWRkcmVzc1NwYWNlID0gZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLmlu
bGluZVN0cnVjdCAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJh
eSAgICAgICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29s
dW1ucyA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAg
ID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVk
OjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRy
dWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVs
ZCAmZmllbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9m
PFRCYXNpY1R5cGU6OkVidEludCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidFVJ
bnQsIExULCA0LCA0PihmaWVsZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3Jt
czoKKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZU1hdHJpeFJvd3MgICAgICAgICAg
ID0gU2F0VmVjOjpGdWxseVNhdHVyYXRlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlU2Nh
bGFyT3JWZWN0b3JBcnJheXMgPSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBj
b25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAg
ICAgICBjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDQzMDsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBU
eXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6OlRleHR1
cmU6CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBjb25maWc7Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmFsd2F5c1Jl
cXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBj
YXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgor
ICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAg
ICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lOjppc1BpcGVsaW5lT3V0KCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
ICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVu
aWZvcm1zOgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25W
ZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2Jh
bHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitBZGRyZXNzU3BhY2UgUGlwZWxpbmU6OmV4dGVybmFs
QWRkcmVzc1NwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6
Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25G
cmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3Bh
Y2U6OlRocmVhZDsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAg
Y2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFj
ZTo6Q29uc3RhbnQ7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lU3RydWN0czo6bWF0Y2hlcyhj
b25zdCBUU3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdAor
eworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBzW10gPSB7CisgICAgICAgIGZyYWdt
ZW50SW4sCisgICAgICAgIGZyYWdtZW50T3V0LAorICAgICAgICB2ZXJ0ZXhJbiwKKyAgICAgICAg
dmVydGV4T3V0LAorICAgICAgICB1c2VyVW5pZm9ybXMsCisgICAgICAgIGFuZ2xlVW5pZm9ybXMs
CisgICAgICAgIG5vbkNvbnN0YW50R2xvYmFscywKKyAgICAgICAgaW52b2NhdGlvblZlcnRleEds
b2JhbHMsCisgICAgICAgIGludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsCisgICAgICAgIHRleHR1
cmUsCisgICAgICAgIGluc3RhbmNlSWQsCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnAg
OiBwcykKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbCAmJiBwLmludGVybmFsID09ICZzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZXh0ZXJuYWwgJiYgcC5leHRlcm5hbCA9PSAmcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YmY0NzZhZGZkNjQ2MGIwZDllZmM2YWIxZDBmMzc5ZDNmMTNiMTc1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMjMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfUElQRUxJTkVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfUElQRUxJTkVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sK
KworLy8gRGF0YSB0aGF0IGlzIHNjb3BlZCBhcyBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIGZv
ciBhIGdpdmVuIHBpcGVsaW5lLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUGlwZWxp
bmVTY29wZWQKK3sKKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVy
bmFsbHkgdG8gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGludGVybmFs
YCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgaW50ZXJuYWxgLgorICAgIGNvbnN0IFQgKmV4
dGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRh
bGsgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdp
dGggYGV4dGVybmFsYCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgZXh0ZXJuYWxgLgorICAg
IGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYg
dGhlIGlucHV0IGNvaW5jaWRlcyB3aXRoIGVpdGhlciBgZXh0ZXJuYWxgIG9yIGBpbnRlcm5hbGAg
ZGF0YS4KKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJldHVybiBl
eHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKworICAgIC8vIEJv
dGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG5vbi1udWxs
LgorICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsICYmIGlu
dGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgcmVwcmVz
ZW50YXRpb25zIGFyZSBudWxsLgorICAgIGJvb2wgaXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAg
YW5kIGBpbnRlcm5hbGAgcmVwcmVzZW50YXRpb25zIGFyZSB0aGUgc2FtZS4KKyAgICBib29sIGlz
VW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVybmFsOyB9Cit9OworCisv
LyBSZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVsaW5lLgorY2xhc3MgUGlwZWxp
bmUKK3sKKyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZQorICAgIHsKKyAgICAgICAgVmVy
dGV4SW4sCisgICAgICAgIFZlcnRleE91dCwKKyAgICAgICAgRnJhZ21lbnRJbiwKKyAgICAgICAg
RnJhZ21lbnRPdXQsCisgICAgICAgIFVzZXJVbmlmb3JtcywKKyAgICAgICAgQW5nbGVVbmlmb3Jt
cywKKyAgICAgICAgTm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uVmVydGV4
R2xvYmFscywKKyAgICAgICAgSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgVGV4
dHVyZSwKKyAgICAgICAgSW5zdGFuY2VJZCwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBWYXJp
YW50CisgICAgeworICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisg
ICAgICAgIC8vIEZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHBpcGVsaW5lIGRvZXMgbm90
IHJlcXVpcmUgc3BsaXR0aW5nIG9yIHNhdHVyYXRpb24uCisgICAgICAgIE9yaWdpbmFsLAorCisg
ICAgICAgIC8vIE9ubHkgZm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgdGhlIHBpcGVsaW5l
IHdhcyBzcGxpdCBvciBzYXR1cmF0ZWQuCisgICAgICAgIE1vZGlmaWVkLAorICAgIH07CisKKyAg
cHVibGljOgorICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKyAgICBUeXBlIHR5cGU7
CisKKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUg
c3RydWN0IGFscmVhZHkgZXhpc3RzLgorICAgIC8vIElmIG5vbi1udWxsIHN0cnVjdCBzcGxpdHRp
bmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCisgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0
YW5jZVZhcjsKKworICBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdmFyaWFi
bGUgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUuCisgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJs
ZSAmdmFyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3Qg
dHlwZSB0aGF0IHN0b3JlcyB2YXJpYWJsZXMgb2YgdGhpcyBwaXBlbGluZS4KKyAgICBOYW1lIGdl
dFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBuYW1lIGZvciB0aGUgc3RydWN0IGluc3RhbmNlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBv
ZiB0aGlzIHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQg
dmFyaWFudCkgY29uc3Q7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgZXh0ZXJuYWxTdHJ1Y3RN
b2RpZnlDb25maWcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGlwZWxp
bmUgYWx3YXlzIHJlcXVpcmVzIGEgbm9uLXBhcmFtZXRlciBsb2NhbCBpbnN0YW5jZSBkZWNsYXJh
dGlvbiBvZgorICAgIC8vIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorICAgIGJvb2wgYWx3YXlz
UmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdDsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHBpcGVsaW5lIGlzIGFuIG91dHB1dCBwaXBlbGluZS4gVGhl
IGV4dGVybmFsIHBpcGVsaW5lIHN0cnVjdHVyZSBzaG91bGQKKyAgICAvLyBiZSByZXR1cm5lZCBm
cm9tIGBtYWluYC4KKyAgICBib29sIGlzUGlwZWxpbmVPdXQoKSBjb25zdDsKKworICAgIEFkZHJl
c3NTcGFjZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0OworfTsKKworLy8gQSBjb2xsZWN0
aW9uIG9mIHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4KK3N0cnVjdCBQaXBlbGluZVN0cnVj
dHMgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBmcmFnbWVudEluOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGZyYWdtZW50T3V0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleEluOworICAgIFBpcGVsaW5l
U2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0
dXJlPiB1c2VyVW5pZm9ybXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gYW5nbGVV
bmlmb3JtczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvblZlcnRleEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvbkZyYWdtZW50R2xv
YmFsczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworICAgIFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGluc3RhbmNlSWQ7CisKKyAgICBib29sIG1hdGNoZXMoY29u
c3QgVFN0cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7Cit9
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QSVBFTElORV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGJmNWEwMmZlMGRiMGJlZDNkMmFhM2M5NTVjYzk5OTI3NTNiN2M4MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKQEAgLTAsMCAr
MSwzNzU3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
bmFtZXNwYWNlCit7CisKK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgICB1c2luZyBMaW5lVGFnICAgICAgID0gdW5zaWduZWQ7CisgICAgdXNpbmcg
RnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlv
biAmKTsKKyAgICB1c2luZyBGdW5jVG9FbWl0dGVyID0gc3RkOjptYXA8TmFtZSwgRnVuY0VtaXR0
ZXI+OworCisgIHB1YmxpYzoKKyAgICBQcm9ncmFtUHJlbHVkZShUSW5mb1NpbmtCYXNlICZvdXQs
IGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0KG91dCkKKyAgICB7CisgICAgICAgIEFMV0FZ
U19JTkxJTkUoKTsKKworICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgZXF1YWxNYXRyaXgoKTsKKyAg
ICAgICAgfQorCisjaWYgMQorICAgICAgICBtT3V0IDw8ICIjZGVmaW5lIEFOR0xFX3RlbnNvciBt
ZXRhbDo6YXJyYXlcbiI7CisjZWxzZQorICAgICAgICB0ZW5zb3IoKTsKKyNlbmRpZgorICAgIH0K
KworICBwcml2YXRlOgorICAgIGJvb2wgZW1pdEd1YXJkKExpbmVUYWcgbGluZVRhZykKKyAgICB7
CisgICAgICAgIGlmIChtRW1pdHRlZC5maW5kKGxpbmVUYWcpICE9IG1FbWl0dGVkLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
bUVtaXR0ZWQuaW5zZXJ0KGxpbmVUYWcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRnVuY1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKworICAgIHZv
aWQgdmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEg
PSBudWxscHRyKTsKKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcik7CisgICAgdm9pZCB2aXNpdFN0cnVjdHVyZShjb25zdCBUU3RydWN0dXJlICZzKTsKKwor
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRl
OworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlk
ZTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNs
YXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpub2RlKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHZvaWQgQUxXQVlTX0lOTElO
RSgpOworCisgICAgdm9pZCBpbmNsdWRlX21ldGFsX2F0b21pYygpOworICAgIHZvaWQgaW5jbHVk
ZV9tZXRhbF9jb21tb24oKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7Cisg
ICAgdm9pZCBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgdm9pZCBpbmNsdWRlX21ldGFs
X21hdGgoKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgdm9pZCBpbmNs
dWRlX21ldGFsX3BhY2soKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgpOwor
CisgICAgdm9pZCBlbmFibGVfaWYoKTsKKyAgICB2b2lkIHNjYWxhcl9vZigpOworICAgIHZvaWQg
aXNfc2NhbGFyKCk7CisgICAgdm9pZCBpc192ZWN0b3IoKTsKKyAgICB2b2lkIGlzX21hdHJpeCgp
OworICAgIHZvaWQgYWRkcmVzc29mKCk7CisgICAgdm9pZCBkaXN0YW5jZSgpOworICAgIHZvaWQg
bGVuZ3RoKCk7CisgICAgdm9pZCBkb3QoKTsKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIHZv
aWQgZmFjZWZvcndhcmQoKTsKKyAgICB2b2lkIHJlZmxlY3QoKTsKKyAgICB2b2lkIHJlZnJhY3Qo
KTsKKyAgICB2b2lkIGRlZ3JlZXMoKTsKKyAgICB2b2lkIHJhZGlhbnMoKTsKKyAgICB2b2lkIG1v
ZCgpOworICAgIHZvaWQgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgcHJlSW5jcmVt
ZW50TWF0cml4KCk7CisgICAgdm9pZCBwb3N0RGVjcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBw
cmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworICAgIHZvaWQg
bWF0bXVsQXNzaWduKCk7CisgICAgdm9pZCBhdGFuKCk7CisgICAgdm9pZCBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpOworICAgIHZvaWQg
YWRkTWF0cml4U2NhbGFyKCk7CisgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lk
IGRpdk1hdHJpeFNjYWxhcigpOworICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyRmFzdCgpOworICAg
IHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJB
c3NpZ25GYXN0KCk7CisgICAgdm9pZCB0ZW5zb3IoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VE
aXZpZGUoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24oKTsKKyAgICB2b2lk
IGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOworICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisgICAg
dm9pZCBpbnZlcnNlMigpOworICAgIHZvaWQgaW52ZXJzZTMoKTsKKyAgICB2b2lkIGludmVyc2U0
KCk7CisgICAgdm9pZCBlcXVhbFZlY3RvcigpOworICAgIHZvaWQgZXF1YWxNYXRyaXgoKTsKKyAg
ICB2b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBub3RFcXVhbFN0cnVjdCgpOworICAg
IHZvaWQgZXF1YWxBcnJheSgpOworICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworICAgIHZvaWQg
c2lnbigpOworICAgIHZvaWQgcGFja19oYWxmXzJ4MTYoKTsKKyAgICB2b2lkIHVucGFja19oYWxm
XzJ4MTYoKTsKKyAgICB2b2lkIHZlY3RvckVsZW1SZWYoKTsKKyAgICB2b2lkIHN3aXp6bGVSZWYo
KTsKKyAgICB2b2lkIG91dCgpOworICAgIHZvaWQgaW5vdXQoKTsKKyAgICB2b2lkIGZsYXR0ZW5B
cnJheSgpOworICAgIHZvaWQgY2FzdFZlY3RvcigpOworICAgIHZvaWQgY2FzdE1hdHJpeCgpOwor
ICAgIHZvaWQgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAgICB2b2lkIGdyYWRpZW50KCk7CisgICAg
dm9pZCB0ZXh0dXJlRW52KCk7CisgICAgdm9pZCB0ZXhlbEZldGNoKCk7CisgICAgdm9pZCB0ZXhl
bEZldGNoT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7
CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7
CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5
X2Zsb2F0NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0M19mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlMURMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUxRFByb2ooKTsKKyAgICB2
b2lkIHRleHR1cmUxRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRCgpOworICAgIHZvaWQg
dGV4dHVyZTJETG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisgICAgdm9pZCB0ZXh0
dXJlMkRQcm9qTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlM0RMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmUzRFByb2ooKTsKKyAgICB2b2lkIHRleHR1cmUzRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVDdWJlKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUN1
YmVQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVHcmFkKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxv
YXROKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQy
KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7
CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOwor
ICAgIHZvaWQgdGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICB2b2lkIHRleHR1cmVH
cmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQg
dGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVf
ZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRf
dGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVy
ZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgIHZvaWQg
dGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF9kZXB0aDJk
X2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisgICAgdm9pZCB0
ZXh0dXJlTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlT2Zmc2V0KCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvaigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisgICAgdm9p
ZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVQ
cm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zs
b2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2QoKTsKKyAgICB2b2lk
IHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxv
ZF9nZW5lcmljX2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvak9mZnNldCgp
OworICAgIHZvaWQgdGV4dHVyZVNpemUoKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jh
c2UgJm1PdXQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PExpbmVUYWc+IG1FbWl0dGVkOworICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3ltYm9sICo+IG1IYW5kbGVkOworICAgIGNvbnN0
IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKK307
CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworI2RlZmluZSBQUk9HUkFNX1BSRUxVREVfSU5DTFVERShoZWFkZXIpICAgICAgICAgICAgIFwK
KyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjppbmNsdWRlXyMjaGVhZGVyKCkgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBpZiAoZW1pdEd1YXJkKF9fTElORV9fKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBtT3V0IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNk
ZWZpbmUgUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmFtZSwgY29kZSwgLi4uKSAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCBQcm9ncmFtUHJlbHVkZTo6bmFtZSgpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQVNTRVJUKGNvZGVbMF0gPT0gJ1xu
Jyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbWl0R3Vh
cmQoX19MSU5FX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIF9fVkFfQVJHU19fOyAvKiBkZXBlbmRlbmNpZXMgKi8gICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBtT3V0IDw8IChzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+
KGNvZGUgIlxuIikgKyAxKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2F0b21pYykKK1BST0dSQU1f
UFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1l
dGFsX2dlb21ldHJpYykKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dyYXBoaWNzKQor
UFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKK1BST0dSQU1fUFJFTFVERV9JTkNM
VURFKG1ldGFsX21hdHJpeCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3BhY2spCitQ
Uk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShBTFdBWVNfSU5MSU5FLCBSIigK
KyNkZWZpbmUgQU5HTEVfQUxXQVlTX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l
KSkKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlbmFibGVfaWYsIFIiKAordGVtcGxh
dGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmIHt9
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+
Cit7CisgICAgdXNpbmcgdHlwZSA9IFQ7Cit9OwordGVtcGxhdGUgPGJvb2wgQj4KK3VzaW5nIEFO
R0xFX2VuYWJsZV9pZl90ID0gdHlwZW5hbWUgQU5HTEVfZW5hYmxlX2lmPEI+Ojp0eXBlOworKSIp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNjYWxhcl9vZiwgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9zY2FsYXJfb2YKK3sKKyAgICB1c2luZyB0eXBlID0gVDsK
K307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlw
ZW5hbWUgQU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGlzX3NjYWxhciwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9pc19zY2FsYXIge307CisjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3NjYWxhcjxzY2FsYXI+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9CitBTkdMRV9ERUZJTkVfU0NBTEFSKGJvb2wpOworQU5HTEVfREVGSU5F
X1NDQUxBUihjaGFyKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoc2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUihpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKK0FOR0xFX0RFRklORV9T
Q0FMQVIodWNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUih1c2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKK0FOR0xFX0RFRklORV9TQ0FMQVIodWxvbmcpOworQU5HTEVfREVGSU5F
X1NDQUxBUihoYWxmKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKSIpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCit7CisgICAg
ZW51bSB7IHZhbHVlID0gZmFsc2UgfTsKK307CisjZGVmaW5lIEFOR0xFX0RFRklORV9WRUNUT1Io
c2NhbGFyKSBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6
c2NhbGFyICMjIDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUg
PD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3Rv
cjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAg
dGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDI+IHsg
dXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwK
KyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMg
ND4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9CitBTkdMRV9ERUZJTkVfVkVDVE9SKGJvb2wpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKK0FOR0xFX0RFRklORV9WRUNUT1Ioc2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihsb25nKTsKK0FO
R0xFX0RFRklORV9WRUNUT1IodWNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1c2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKK0FOR0xFX0RFRklORV9WRUNUT1IodWxvbmcpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihoYWxmKTsKK0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOwor
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoaXNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19tYXRyaXgKK3sKKyAgICBlbnVtIHsg
dmFsdWUgPSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX01BVFJJWChzY2FsYXIp
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMngyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAyeDM+IHsgZW51bSB7IHZhbHVl
ID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxt
ZXRhbDo6c2NhbGFyICMjIDJ4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7
IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdM
RV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9
OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2Nh
bGFyICMjIDN4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2
YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRy
aXg8bWV0YWw6OnNjYWxhciAjIyA0eDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDR4
ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2Fs
YXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpz
Y2FsYXIgIyMgMngzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29m
PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7
IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgzPiB7IHVzaW5nIHR5cGUgPSBz
Y2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgNHg0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9N
QVRSSVgoaGFsZik7CitBTkdMRV9ERUZJTkVfTUFUUklYKGZsb2F0KTsKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGFk
ZHJlc3NvZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBUICogQU5HTEVfYWRkcmVzc29mKHRocmVh
ZCBUICZyZWYpCit7CisgICAgcmV0dXJuICZyZWY7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Rpc3Rh
bmNlX2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0
YW5jZSh4LCB5KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5H
TEVfZGlzdGFuY2VfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46
OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBU
IHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmFicyh4IC0geSk7CisgICAgfQorfTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gQU5HTEVfZGlz
dGFuY2VfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlX21ldGFsX21hdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
c3RydWN0IEFOR0xFX2xlbmd0aF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4g
bWV0YWw6Omxlbmd0aCh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgQU5HTEVfbGVuZ3RoX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8
VD4gQU5HTEVfbGVuZ3RoKFQgeCkKK3sKKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46
OmV4ZWMoeCk7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9y
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZG90LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+
IGV4ZWMoVCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRvdCh4LCB5KTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8
VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAg
c3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHggKiB5OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5HTEVfZG90KFQgeCwgVCB5KQor
eworICAgIHJldHVybiBBTkdMRV9kb3RfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
bm9ybWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWV0YWw6Om5vcm1hbGl6ZSh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxl
X2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9zaWdu
KHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9ub3JtYWxpemUoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9ub3JtYWxpemVf
aW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1
ZGVfbWV0YWxfY29tbW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZh
Y2Vmb3J3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9p
bXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBU
IG5yZWYpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmZhY2Vmb3J3YXJkKG4sIGksIG5y
ZWYpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9mYWNl
Zm9yd2FyZF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6dmFs
dWU+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIG4sIFQgaSwg
VCBucmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkg
PyBuIDogLW47CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX2ZhY2Vmb3J3YXJkKFQgbiwgVCBpLCBUIG5yZWYpCit7CisgICAgcmV0
dXJuIEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7Cit9OworKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmbGVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9
IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfcmVmbGVjdF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZsZWN0KGksIG4pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
aSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgLSBUKDIpICogQU5HTEVfZG90KG4sIGkp
ICogbjsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfcmVmbGVjdChUIGksIFQgbikKK3sKKyAgICByZXR1cm4gQU5HTEVfcmVmbGVj
dF9pbXBsPFQ+OjpleGVjKGksIG4pOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJs
ZV9pZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21h
dHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHJlZnJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3JlZnJh
Y3RfaW1wbAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIGksIFQg
biwgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZyYWN0KGksIG4sIGV0YSk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IEFOR0xFX3JlZnJhY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19z
Y2FsYXI8VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4
ZWMoVCBpLCBUIG4sIFQgZXRhKQorICAgIHsKKyAgICAgICAgYXV0byBkb3ROSSA9IG4gKiBpOwor
ICAgICAgICBhdXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5J
KTsKKyAgICAgICAgaWYgKGsgPCBUKDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
VCgwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBldGEgKiBpIC0gKGV0YSAqIGRvdE5JICsgbWV0YWw6OnNxcnQoaykpICogbjsKKyAgICAg
ICAgfQorICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCit7
CisgICAgcmV0dXJuIEFOR0xFX3JlZnJhY3RfaW1wbDxUPjo6ZXhlYyhpLCBuLCBldGEpOworfTsK
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19z
Y2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfbWF0cml4KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNp
Z24sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbAoreworICAgIHN0
YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1
cm4gbWV0YWw6OnNpZ24oeCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVf
c2lnbl9pbXBsPGludD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBpbnQgZXhl
YyhpbnQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbDxtZXRhbDo6dmVj
PGludCwgTj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxp
bnQsIE4+IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisgICAgeworICAgICAgICBtZXRhbDo6
dmVjPGludCwgTj4gczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNbaV0gPSBBTkdMRV9zaWduX2ltcGw8aW50Pjo6ZXhlYyh4W2ld
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfc2lnbihUIHgpCit7CisgICAg
cmV0dXJuIEFOR0xFX3NpZ25faW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGF0YW4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCit7Cisg
ICAgcmV0dXJuIG1ldGFsOjphdGFuKHlPdmVyWCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9hdGFuKFQgeSwgVCB4KQoreworICAgIHJldHVy
biBtZXRhbDo6YXRhbjIoeSwgeCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2Rl
Z3JlZXMoVCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPig1Ny4yOTU3Nzk1MTMwODIz
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJhZGlhbnMsIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfcmFkaWFu
cyhUIHgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUt
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG1vZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIFggQU5HTEVfbW9kKFggeCwgWSB5KQoreworICAgIHJldHVybiB4
IC0geSAqIG1ldGFsOjpmbG9vcih4IC8geSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwYWNr
X2hhbGZfMngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVfQUxXQVlTX0lO
TElORSB1aW50IEFOR0xFX3BhY2tfaGFsZl8yeDE2KGZsb2F0MiB2KQoreworICAgIHJldHVybiBh
c190eXBlPHVpbnQ+KGhhbGYyKHYpKTsKK30KKykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHVucGFja19oYWxmXzJ4MTYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK0FOR0xF
X0FMV0FZU19JTkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorewor
ICAgIHJldHVybiBmbG9hdDIoYXNfdHlwZTxoYWxmMj4oeCkpOworfQorKSIsICkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwg
Tj4gJm9wZXJhdG9yKj0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJmEsIG1ldGFsOjpt
YXRyaXg8VCwgTiwgTj4gYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9Cisp
IikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBp
bnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQp
Cit7CisgICAgYXV0byBiID0gYTsKKyAgICBhICs9IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQorewor
ICAgIGEgKz0gVCgxKTsKKyAgICByZXR1cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHBvc3REZWNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgaW50KQoreworICAgIGF1dG8gYiA9IGE7CisgICAgYSAt
PSBUKDEpOworICAgIHJldHVybiBiOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dWJNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocHJlRGVj
cmVtZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSkKK3sKKyAgICBhIC09IFQoMSk7CisgICAgcmV0dXJuIGE7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShuZWdhdGVNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSkKK3sKKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIHRocmVhZCBhdXRvICZt
Q29sID0gbVtjb2xdOworICAgICAgICBtQ29sID0gLW1Db2w7CisgICAgfQorICAgIHJldHVybiBt
OworfQorKSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNz
aWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVy
YXRvcis9KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7Cisg
ICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAg
ICBtW2NvbF0gKz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtICs9IHg7CisgICAgcmV0dXJu
IG07Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2ln
bigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXJBc3NpZ24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZvcGVyYXRvci09KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJv
d3M+ICZtLCBUIHgpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytj
b2wpCisgICAgeworICAgICAgICBtW2NvbF0gLT0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9
CispIiwgKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywg
aW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gb3BlcmF0b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAg
IG0gLT0geDsKKyAgICByZXR1cm4gbTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
c3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1h
dHJpeFNjYWxhckFzc2lnbkZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci89KHRocmVhZCBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgeCA9IFQoMSkgLyB4
OworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAg
ICAgICAgbVtjb2xdICo9IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmbSwgVCB4
KQoreworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsK
KyAgICAgICAgbVtjb2xdIC89IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyRmFzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fIDw9IDIyMAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xz
LCBSb3dzPiBtLCBUIHgpCit7CisgICAgbSAvPSB4OworICAgIHJldHVybiBtOworfQorI2VuZGlm
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhckFzc2lnbkZhc3Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENv
bHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5k
aWYKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGUsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAg
Zm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBh
W2NvbF0gLz0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1
cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHksIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBBTkdMRV9jb21wb25lbnRXaXNl
TXVsdGlwbHkobWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+IGIpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsg
Kytjb2wpCisgICAgeworICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworICAgIH0KKyAgICByZXR1
cm4gYTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBNLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBOLCBNPiBBTkdMRV9vdXRlclByb2R1Y3QobWV0YWw6OnZlYzxU
LCBNPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgbWV0YWw6Om1hdHJpeDxULCBOLCBN
PiBvOworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgTjsgKytuKQorICAgIHsKKyAgICAgICAg
b1tuXSA9IHUgKiB2W25dOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShpbnZlcnNlMiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1l
dGFsOjptYXRyaXg8VCwgMiwgMj4gbSkKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IGFk
ajsKKyAgICBhZGpbMF1bMF0gPSAgbVsxXVsxXTsKKyAgICBhZGpbMF1bMV0gPSAtbVswXVsxXTsK
KyAgICBhZGpbMV1bMF0gPSAtbVsxXVswXTsKKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKyAg
ICBUIGRldCA9IChhZGpbMF1bMF0gKiBtWzBdWzBdKSArIChhZGpbMF1bMV0gKiBtWzFdWzBdKTsK
KyAgICByZXR1cm4gYWRqICogKFQoMSkgLyBkZXQpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIDMsIDM+IEFOR0xFX2ludmVyc2UobWV0YWw6Om1h
dHJpeDxULCAzLCAzPiBtKQoreworICAgIFQgYSA9IG1bMV1bMV0gKiBtWzJdWzJdIC0gbVsyXVsx
XSAqIG1bMV1bMl07CisgICAgVCBiID0gbVsxXVswXSAqIG1bMl1bMl07CisgICAgVCBjID0gbVsx
XVsyXSAqIG1bMl1bMF07CisgICAgVCBkID0gbVsxXVswXSAqIG1bMl1bMV07CisgICAgVCBkZXQg
PSBtWzBdWzBdICogKGEpIC0KKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKyAgICAg
ICAgICAgIG1bMF1bMl0gKiAoZCAtIG1bMV1bMV0gKiBtWzJdWzBdKTsKKyAgICBkZXQgPSBUKDEp
IC8gZGV0OworICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKyAgICBtaW52WzBdWzBd
ID0gKGEpICogZGV0OworICAgIG1pbnZbMF1bMV0gPSAobVswXVsyXSAqIG1bMl1bMV0gLSBtWzBd
WzFdICogbVsyXVsyXSkgKiBkZXQ7CisgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsy
XSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKyAgICBtaW52WzFdWzBdID0gKGMgLSBiKSAq
IGRldDsKKyAgICBtaW52WzFdWzFdID0gKG1bMF1bMF0gKiBtWzJdWzJdIC0gbVswXVsyXSAqIG1b
Ml1bMF0pICogZGV0OworICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBtWzBd
WzBdICogbVsxXVsyXSkgKiBkZXQ7CisgICAgbWludlsyXVswXSA9IChkIC0gbVsyXVswXSAqIG1b
MV1bMV0pICogZGV0OworICAgIG1pbnZbMl1bMV0gPSAobVsyXVswXSAqIG1bMF1bMV0gLSBtWzBd
WzBdICogbVsyXVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICogbVsxXVsx
XSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKyAgICByZXR1cm4gbWludjsKK30KKykiKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbnZlcnNlNCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCA0LCA0PiBBTkdMRV9p
bnZlcnNlKG1ldGFsOjptYXRyaXg8VCwgNCwgND4gbSkKK3sKKyAgICBUIEEyMzIzID0gbVsyXVsy
XSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKyAgICBUIEExMzIzID0gbVsyXVsxXSAq
IG1bM11bM10gLSBtWzJdWzNdICogbVszXVsxXTsKKyAgICBUIEExMjIzID0gbVsyXVsxXSAqIG1b
M11bMl0gLSBtWzJdWzJdICogbVszXVsxXTsKKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11b
M10gLSBtWzJdWzNdICogbVszXVswXTsKKyAgICBUIEEwMjIzID0gbVsyXVswXSAqIG1bM11bMl0g
LSBtWzJdWzJdICogbVszXVswXTsKKyAgICBUIEEwMTIzID0gbVsyXVswXSAqIG1bM11bMV0gLSBt
WzJdWzFdICogbVszXVswXTsKKyAgICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFd
WzNdICogbVszXVsyXTsKKyAgICBUIEExMzEzID0gbVsxXVsxXSAqIG1bM11bM10gLSBtWzFdWzNd
ICogbVszXVsxXTsKKyAgICBUIEExMjEzID0gbVsxXVsxXSAqIG1bM11bMl0gLSBtWzFdWzJdICog
bVszXVsxXTsKKyAgICBUIEEyMzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsy
XVsyXTsKKyAgICBUIEExMzEyID0gbVsxXVsxXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsx
XTsKKyAgICBUIEExMjEyID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVsxXTsK
KyAgICBUIEEwMzEzID0gbVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKyAg
ICBUIEEwMjEzID0gbVsxXVswXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVswXTsKKyAgICBU
IEEwMzEyID0gbVsxXVswXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVswXTsKKyAgICBUIEEw
MjEyID0gbVsxXVswXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKyAgICBUIEEwMTEz
ID0gbVsxXVswXSAqIG1bM11bMV0gLSBtWzFdWzFdICogbVszXVswXTsKKyAgICBUIEEwMTEyID0g
bVsxXVswXSAqIG1bMl1bMV0gLSBtWzFdWzFdICogbVsyXVswXTsKKyAgICBUIGEgPSBtWzFdWzFd
ICogQTIzMjMgLSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisgICAgVCBiID0g
bVsxXVswXSAqIEEyMzIzIC0gbVsxXVsyXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMjIzOworICAg
IFQgYyA9IG1bMV1bMF0gKiBBMTMyMyAtIG1bMV1bMV0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDEy
MzsKKyAgICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJd
ICogQTAxMjM7CisgICAgVCBkZXQgPSBtWzBdWzBdICogKCBhICkKKyAgICAgICAgICAtIG1bMF1b
MV0gKiAoIGIgKQorICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisgICAgICAgICAgLSBtWzBd
WzNdICogKCBkICk7CisgICAgZGV0ID0gVCgxKSAvIGRldDsKKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworICAgIGltWzBdWzBdID0gZGV0ICogICAoIGEgKTsKKyAgICBpbVswXVsxXSA9
IGRldCAqIC0gKCBtWzBdWzFdICogQTIzMjMgLSBtWzBdWzJdICogQTEzMjMgKyBtWzBdWzNdICog
QTEyMjMgKTsKKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBd
WzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKyAgICBpbVswXVszXSA9IGRldCAqIC0g
KCBtWzBdWzFdICogQTIzMTIgLSBtWzBdWzJdICogQTEzMTIgKyBtWzBdWzNdICogQTEyMTIgKTsK
KyAgICBpbVsxXVswXSA9IGRldCAqIC0gKCBiICk7CisgICAgaW1bMV1bMV0gPSBkZXQgKiAgICgg
bVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7Cisg
ICAgaW1bMV1bMl0gPSBkZXQgKiAtICggbVswXVswXSAqIEEyMzEzIC0gbVswXVsyXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMjEzICk7CisgICAgaW1bMV1bM10gPSBkZXQgKiAgICggbVswXVswXSAq
IEEyMzEyIC0gbVswXVsyXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMjEyICk7CisgICAgaW1bMl1b
MF0gPSBkZXQgKiAgICggYyApOworICAgIGltWzJdWzFdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBB
MTMyMyAtIG1bMF1bMV0gKiBBMDMyMyArIG1bMF1bM10gKiBBMDEyMyApOworICAgIGltWzJdWzJd
ID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTMxMyAtIG1bMF1bMV0gKiBBMDMxMyArIG1bMF1bM10g
KiBBMDExMyApOworICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1b
MF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworICAgIGltWzNdWzBdID0gZGV0ICog
LSAoIGQgKTsKKyAgICBpbVszXVsxXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMjMgLSBtWzBd
WzFdICogQTAyMjMgKyBtWzBdWzJdICogQTAxMjMgKTsKKyAgICBpbVszXVsyXSA9IGRldCAqIC0g
KCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsK
KyAgICBpbVszXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMTIgLSBtWzBdWzFdICogQTAy
MTIgKyBtWzBdWzJdICogQTAxMTIgKTsKKyAgICByZXR1cm4gaW07Cit9CispIikKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBi
b29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4g
dikKK3sKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBpZiAodVtp
XSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lO
TElORSBib29sIEFOR0xFX25vdEVxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJy
YXk8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKHUsdik7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVxdWFsQXJyYXkoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoZXF1YWxWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVh
bChtZXRhbDo6dmVjPFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4g
bWV0YWw6OmFsbCh1ID09IHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNs
dWRlX21ldGFsX21hdGgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxNYXRyaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQg
QywgaW50IFI+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfZXF1YWwobWV0YWw6Om1h
dHJpeDxULCBDLCBSPiBhLCBtZXRhbDo6bWF0cml4PFQsIEMsIFI+IGIpCit7CisgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisgICAgeworICAgICAgICBpZiAoIUFOR0xFX2VxdWFsKGFb
Y10sIGJbY10pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVxdWFsVmVjdG9yKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVj
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZl
YzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgcmV0dXJuICFBTkdMRV9lcXVh
bCh1LCB2KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxTdHJ1Y3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBib29sIEFOR0xFX25vdEVxdWFsU3RydWN0KHRocmVhZCBjb25zdCBUICZhLCB0aHJlYWQgY29u
c3QgVCAmYikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOworfQorKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJl
ZiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfVmVjdG9y
RWxlbVJlZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZtVmVjOworICAgIFQgbVJl
ZjsKKyAgICBjb25zdCBpbnQgbUluZGV4OworICAgIH5BTkdMRV9WZWN0b3JFbGVtUmVmKCkgeyBt
VmVjW21JbmRleF0gPSBtUmVmOyB9CisgICAgQU5HTEVfVmVjdG9yRWxlbVJlZih0aHJlYWQgbWV0
YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCisgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVm
KHZlY1tpbmRleF0pLCBtSW5kZXgoaW5kZXgpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQg
VCAmKCkgeyByZXR1cm4gbVJlZjsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9lbGVt
X3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCit7CisgICAgcmV0
dXJuIEFOR0xFX1ZlY3RvckVsZW1SZWY8VCwgTj4odmVjLCBpbmRleCk7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoc3dpenpsZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBWTiwgaW50IFNOPgorc3RydWN0IEFOR0xF
X1N3aXp6bGVSZWYKK3sKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxULCBWTj4gJm1WZWM7CisgICAg
bWV0YWw6OnZlYzxULCBTTj4gbVJlZjsKKyAgICBpbnQgbUluZGljZXNbU05dOworICAgIH5BTkdM
RV9Td2l6emxlUmVmKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBtSW5kaWNlc1tpXTsKKyAg
ICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIEFOR0xF
X1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGlu
dCAqaW5kaWNlcykKKyAgICAgICAgOiBtVmVjKHZlYykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgU047ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGog
PSBpbmRpY2VzW2ldOworICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworICAgICAgICAgICAg
bVJlZltpXSA9IG1WZWNbal07CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgdGhyZWFk
IG1ldGFsOjp2ZWM8VCwgU04+ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVm
PFQsIE4+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGlu
dCBpMCkKK3sKKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4
KTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
QU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6
OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9
IHsgaTAsIGkxIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBp
cyk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMikKK3sKKyAgICBjb25zdCBp
bnQgaXNbXSA9IHsgaTAsIGkxLCBpMiB9OworICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQs
IE4sIDM+KHZlYywgaXMpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVm
KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGlu
dCBpMykKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAsIGkxLCBpMiwgaTMgfTsKKyAgICBy
ZXR1cm4gQU5HTEVfU3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKK30KKykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRShvdXQsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfT3V0Cit7
CisgICAgVCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX091dCgpIHsg
bURlc3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKyAgICAgICAg
OiBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJu
IG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCit7CisgICAgcmV0dXJuIEFO
R0xFX091dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91
dCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9Jbk91dAoreworICAg
IFQgbVRlbXA7CisgICAgdGhyZWFkIFQgJm1EZXN0OworICAgIH5BTkdMRV9Jbk91dCgpIHsgbURl
c3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX0luT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6
IG1UZW1wKGRlc3QpLCBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQg
JigpIHsgcmV0dXJuIG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIEFOR0xFX0luT3V0PFQ+IEFOR0xFX2lub3V0KHRocmVhZCBUICZkZXN0KQor
eworICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShmbGF0dGVuQXJyYXksIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIFQgKmV4ZWModGhyZWFkIFQgJngpCisgICAgeworICAgICAgICByZXR1cm4gJng7
CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0cnVjdCBBTkdM
RV9mbGF0dGVuX2ltcGw8bWV0YWw6OmFycmF5PFQsIE4+PgoreworICAgIHN0YXRpYyBBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gZXhlYyh0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+ICZhcnIpIC0+
IFQKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJy
WzBdKTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX2ZsYXR0ZW4odGhyZWFkIG1ldGFsOjphcnJheTxULCBO
PiAmYXJyKSAtPiBUCit7CisgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhh
cnJbMF0pOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNhc3RWZWN0b3IsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOMSwgaW50IE4yPgorc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVf
Y2FzdFZlY3RvcjxULCBOLCBOPgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiBjb25zdCAmdikKKyAg
ICB7CisgICAgICAgIHJldHVybiB2OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDIsIDM+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+
IGNvbnN0ICZ2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYueHk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KK3sKKyAg
ICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFk
IG1ldGFsOjp2ZWM8VCwgND4gY29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3Rv
cjxULCAzLCA0PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8
VCwgMz4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTjE+IEFOR0xFX2Nhc3QodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTjI+IGNvbnN0
ICZ2KQoreworICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7
Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdE1hdHJpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIx
LCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9j
YXN0TWF0cml4Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJp
eDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAm
bTIpCisgICAgeworICAgICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAg
IGNvbnN0IGludCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworICAgICAgICBjb25zdCBpbnQg
TWluUiA9IFIxIDw9IFIyID8gUjEgOiBSMjsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBN
aW5DOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTWlu
UjsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11b
cl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByID0gUjI7IHIgPCBSMTsg
KytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9PSByID8g
VCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg
YyA9IEMyOyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBSMTsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3Jd
ID0gYyA9PSByID8gVCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG0xOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBp
bnQgUjEsIGludCBDMiwgaW50IFIyPgorc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIx
LCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+Pgorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBl
eGVjKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0yKQorICAgIHsKKyAg
ICAgICAgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IG0xOworICAgICAgICBmb3IgKHNpemVfdCBj
ID0gMDsgYyA8IEMxOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG0xW2NdID0gQU5HTEVf
Y2FzdDxSMT4obTJbY10pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtMTsKKyAgICB9Cit9
OwordGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IEFOR0xFX2Nhc3Qo
dGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbSkKK3sKKyAgICByZXR1cm4g
QU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMobSk7Cit9OworKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc3RWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QuLi4gRFM+CitzdHJ1Y3QgQU5HTEVfdGVuc29y
X3RyYWl0czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRD4KK3N0cnVjdCBBTkdMRV90
ZW5zb3JfdHJhaXRzPFQsIEQ+Cit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQg
fTsKKyAgICB1c2luZyBpbm5lcl90eXBlID0gVDsKKyAgICB1c2luZyBvdXRlcl90eXBlID0gaW5u
ZXJfdHlwZVtEXTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEQsIHNpemVfdC4u
LiBEUz4KK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIEQsIERTLi4uPgoreworICAgIGVu
dW0gOiBzaXplX3QgeyBvdXRlcl9kaW0gPSBEIH07CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IHR5
cGVuYW1lIEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl90eXBlOworICAgIHVz
aW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDxzaXplX3QgRCwg
dHlwZW5hbWUgdmFsdWVfdHlwZV8sIHR5cGVuYW1lIGlubmVyX3R5cGVfPgorc3RydWN0IEFOR0xF
X3RlbnNvcl9pbXBsCit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9
IGlubmVyX3R5cGVfOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworICAg
IG91dGVyX3R5cGUgX2RhdGE7CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG91dGVyX2RpbTsgfQorICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgaW5u
ZXJfdHlwZSAmb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gX2RhdGFbaV07IH0KKyAgICBB
TkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdC4uLiBEUz4KK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorICAg
IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl9kaW0sCisgICAgVCwKKyAgICB0
eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CispIikK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFpdHM7
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwyPiB7IHVzaW5nIHR5
cGUgPSBtZXRhbDo6Z3JhZGllbnQyZDsgfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3Jh
ZGllbnRfdHJhaXRzPDM+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDNkOyB9OworCit0
ZW1wbGF0ZSA8aW50IE4+Cit1c2luZyBBTkdMRV9ncmFkaWVudCA9IHR5cGVuYW1lIEFOR0xFX2dy
YWRpZW50X3RyYWl0czxOPjo6dHlwZTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0cnVjdCBBTkdMRV9UZXh0dXJlRW52Cit7CisgICAgdGhyZWFkIFQgKnRleHR1cmU7
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyICpzYW1wbGVyOworfTsKKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShmdW5jdGlvbkNvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV9TQU1QTEVfQ09NUEFSRV9HUkFESUVOVF9JTkRFWCAwCisj
ZGVmaW5lIEFOR0xFX1NBTVBMRV9DT01QQVJFX0xPRF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgQU5H
TEVfUkFTVEVSSVpBVElPTl9ESVNDQVJEX0lOREVYICAgMgorCitjb25zdGFudCBib29sIEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBM
RV9DT01QQVJFX0dSQURJRU5UX0lOREVYKV1dOworY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlTG9kICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFS
RV9MT0RfSU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1Jhc3Rlcml6YXRpb25EaXNjYXJk
ICAgICBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1JBU1RFUklaQVRJT05fRElTQ0FSRF9JTkRF
WCldXTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4p
IEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXhlbEZldGNoX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQpLCBsZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6Omlu
dDMgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
cmVhZCh1aW50Myhjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorICAgIHRocmVh
ZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
aW50MyBjb25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5yZWFkKHVpbnQyKGNvb3JkLnh5KSwgdWludChjb29yZC56KSwgbGV2ZWwpOworfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleGVsRmV0Y2hPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9m
ZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OmludDIgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjpp
bnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29y
ZCArIG9mZnNldCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAm
Y29vcmQsCisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkICsgb2Zmc2V0KSwg
bGV2ZWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0
dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZj
b29yZCwKKyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zm
c2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkgKyBvZmZzZXQp
LCB1aW50KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9m
bG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAg
ZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgY29vcmQudyk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgY29tcGFyZSkKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgY29tcGFyZSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aGN1YmVfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHl6KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRl
cHRoY3ViZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
bWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlf
ZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0
ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0
dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29y
ZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUy
ZGFycmF5X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NF9mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpy
b3VuZChjb29yZC53KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
MURMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvaiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMURQcm9qKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC55LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nv
b3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9q
TG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUx
RFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3Jk
LAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MURQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30K
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlMkQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZTJEKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MkRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUyRF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkRMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZp
bmUgQU5HTEVfdGV4dHVyZTJETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgq
ZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRExv
ZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
Y29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkRQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3Rl
eHR1cmUyRFByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAor
ICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUodGV4dHVyZTJEUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMkRQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
MkRQcm9qTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlMkRQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RMb2QsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RQcm9qLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUzRFByb2ooZW52LCAuLi4pIEFO
R0xFX3RleHR1cmUzRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUzRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0
YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvakxvZChl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxv
YXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
Q3ViZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29v
cmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3Vi
ZUxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgqZW52LnRleHR1cmUs
ICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJv
aiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3Vi
ZVByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJval9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlQ3ViZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmVDdWJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUdyYWRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmUsIGludCBO
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorICAgIHRocmVh
ZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29u
c3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQ
ZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQy
X2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0
YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQueik7CisgICAgfQorfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUdyYWRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgy
ZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFy
ZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQo
ZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGhj
dWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
Y29vcmQudywgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSA+IGNv
b3JkLncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25D
b25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9h
dDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpOwor
fQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxv
YXROX2Zsb2F0Tl9pbnROLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZSwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
Ojp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9h
dCwgTj4gY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0
ICZkUGR5LAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50
PE4+KGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBncmFkaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQz
X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdy
YWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
ZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLnopOwor
ICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRo
cmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91
bmQoY29vcmQueikpLCBjb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zm
c2V0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQo
Y29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3Jk
LncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25z
dGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9h
dDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
R3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisgICAgdGhy
ZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwg
b2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZz
ZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVy
ZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MywKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJl
PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQ
ZHksCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgs
IGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
R3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2QoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19W
QV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2
ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6
bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxv
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZGVwdGgy
ZF9mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFy
ZUxvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSkg
PiBjb29yZC56KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFk
IG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3Qg
JmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBs
ZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBs
ZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhy
ZWFkIGludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RP
ZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUo
c2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0
aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50
KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVPZmZzZXQoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwg
X19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNl
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwK
KyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZCwgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgb2Zmc2V0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAor
ICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpLCBv
ZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAg
IHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmJpYXMoYmlh
cyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2ooZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFz
KGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlUHJvakdyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVByb2pHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVy
ZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnos
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR5KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29y
ZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnovY29vcmQudyk7
CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50
cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0
M19mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBs
KAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4
LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3Jh
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pHcmFk
T2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3Jh
ZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywg
bWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zs
b2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29t
cGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4g
Y29vcmQuei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akdyYWRPZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFk
T2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQzIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5l
IEFOR0xFX3RleHR1cmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwo
CisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHkv
Y29vcmQudywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNv
b3JkLnovY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pM
b2QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfdGV4dHVyZTNk
X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgK
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0KGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZl
bCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zm
c2V0KSA+IGNvb3JkLnovY29vcmQudyk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDMgY29uc3Qg
Jm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9q
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1
cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlhcyA9
IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3Jk
LnosIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0g
MCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXov
Y29vcmQudywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4
dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBf
X1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDIodGV4dHVyZS5nZXRf
d2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVy
ZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9kZXB0aCh1aW50KGxldmVsKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAg
cmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9o
ZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
U2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVF
bnYoKSkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmV0dXJuZWQgTmFtZSBpcyB2
YWxpZCBmb3IgYXMgbG9uZyBhcyBgYnVmZmVyYCBpcyBzdGlsbCBhbGl2ZS4KKy8vIFJldHVybnMg
ZmFsc2UgaWYgbm8gdGVtcGxhdGUgYXJncyBleGlzdC4KKy8vIFJldHVybnMgZmFsc2UgaWYgYnVm
ZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2guCisvLworLy8gRXhhbXBsZToKKy8vICAiZm9vPDEsMj4i
IC0tPiAiZm9vPD4iCitzdGF0aWMgc3RkOjpwYWlyPE5hbWUsIGJvb2w+IE1hc2tUZW1wbGF0ZUFy
Z3MoY29uc3QgTmFtZSAmbmFtZSwgc2l6ZV90IGJ1ZmZlclNpemUsIGNoYXIgKmJ1ZmZlcikKK3sK
KyAgICBjb25zdCBjaGFyICpiZWdpbiA9IG5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyICplbmQgICA9IHN0cmNocihiZWdpbiwgJzwnKTsKKyAgICBpZiAoIWVuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB7e30sIGZhbHNlfTsKKyAgICB9CisgICAgc2l6ZV90IG4gPSBlbmQg
LSBiZWdpbjsKKyAgICBpZiAobiArIDMgPiBidWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHt7fSwgZmFsc2V9OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkKKyAgICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGJlZ2luW2ldOworICAgIH0KKyAgICBidWZm
ZXJbbiArIDBdID0gJzwnOworICAgIGJ1ZmZlcltuICsgMV0gPSAnPic7CisgICAgYnVmZmVyW24g
KyAyXSA9ICdcMCc7CisgICAgcmV0dXJuIHtOYW1lKGJ1ZmZlciwgbmFtZS5zeW1ib2xUeXBlKCkp
LCB0cnVlfTsKK30KKworUHJvZ3JhbVByZWx1ZGU6OkZ1bmNUb0VtaXR0ZXIgUHJvZ3JhbVByZWx1
ZGU6OkJ1aWxkRnVuY1RvRW1pdHRlcigpCit7CisjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkg
XAorICAgIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICYpIC0+IHZvaWQg
eyByZXR1cm4gcHAubWV0aG9kKCk7IH0KKyAgICBGdW5jVG9FbWl0dGVyIG1hcDsKKworICAgIGF1
dG8gcHV0ID0gWyZdKE5hbWUgbmFtZSwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBG
dW5jRW1pdHRlciAmZGVzdCA9IG1hcFtuYW1lXTsKKyAgICAgICAgQVNTRVJUKCFkZXN0KTsKKyAg
ICAgICAgZGVzdCA9IGVtaXR0ZXI7CisgICAgfTsKKworICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0o
Y29uc3QgY2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1l
IG5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIHB1dChu
YW1lLCBlbWl0dGVyKTsKKyAgICB9OworCisgICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0
IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKyAgICAgICAgTmFtZSBuYW1l
KG5hbWVTdHIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOworICAgICAgICBwdXQobmFtZSwgZW1pdHRl
cik7CisgICAgfTsKKworICAgIHB1dEFuZ2xlKCJhZGRyZXNzb2YiLCBFTUlUX01FVEhPRChhZGRy
ZXNzb2YpKTsKKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkp
OworICAgIHB1dEFuZ2xlKCJlbGVtX3JlZiIsIEVNSVRfTUVUSE9EKHZlY3RvckVsZW1SZWYpKTsK
KyAgICBwdXRBbmdsZSgiZmxhdHRlbiIsIEVNSVRfTUVUSE9EKGZsYXR0ZW5BcnJheSkpOworICAg
IHB1dEFuZ2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlub3V0KSk7CisgICAgcHV0QW5nbGUoIm91
dCIsIEVNSVRfTUVUSE9EKG91dCkpOworICAgIHB1dEFuZ2xlKCJzd2l6emxlX3JlZiIsIEVNSVRf
TUVUSE9EKHN3aXp6bGVSZWYpKTsKKworICAgIHB1dEJ1aWx0SW4oInRleGVsRmV0Y2giLCBFTUlU
X01FVEhPRCh0ZXhlbEZldGNoKSk7CisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleGVsRmV0Y2hPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAg
ICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRl
eHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
LnJhd05hbWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFz
aWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAg
ICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBiaWFz
ICAgICAgICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKyAgICAgICAgaWYgKHRl
eHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8Iikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBw
LnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTJkX2FycmF5PCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQzKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmUxRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRExvZCkpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7Cisg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFBy
b2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkRMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRQcm9qIiwgRU1JVF9NRVRIT0QodGV4
dHVyZTJEUHJvaikpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRExvZCIsIEVNSVRfTUVUSE9E
KHRleHR1cmUzRExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvakxvZCIs
IEVNSVRfTUVUSE9EKHRleHR1cmUzRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
Q3ViZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVy
ZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVDdWJlUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvaikpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJv
akxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMkRQcm9qTG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUdyYWQiLCBbXShQcm9n
cmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJ
bW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3Jk
LmdldEJhc2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBj
b29yZC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAg
ICAgPSBmdW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4
TiAgICAgICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0
aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwi
KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9h
dDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHAudGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zs
b2F0MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworICAgICAgICB9
CisgICAgICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7Cisg
ICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBH
ZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1
bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29y
ZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4g
ICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAg
Y29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAg
ICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0
dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVn
aW5zV2l0aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBk
UGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlR3JhZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09
IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0
Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAg
fSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwg
Y29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0
ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJh
bSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0
IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAg
ICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7
CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxT
aXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgy
ZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRl
eHR1cmUyZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMoKTsK
KyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4
dHVyZUxvZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKyAgICBwdXRC
dWlsdEluKCJ0ZXh0dXJlT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZU9mZnNldCkpOworICAg
IHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2opKTsKKyAg
ICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNv
bnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4
dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0o
MCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAgICAgICBjb25zdCBU
VHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAg
ICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOwor
ICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFt
KDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQ
ZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9m
bG9hdDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygp
OworICAgIH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAg
ICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQ
ZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9
PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYg
ZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZVByb2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAg
IFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNX
aXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxv
YXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8IikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90
ZXh0dXJlM2RfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0
MygpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RP
KCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBFTUlU
X01FVEhPRCh0ZXh0dXJlUHJvakxvZE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQ
cm9qT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pPZmZzZXQpKTsKKyAgICBwdXRCdWls
dEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7CisKKyAgICByZXR1
cm4gbWFwOworCisjdW5kZWYgRU1JVF9NRVRIT0QKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6
dmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEpCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmFk
aWFucygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZWdyZWVzOgorICAgICAgICAgICAgZGVncmVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorICAgICAgICAgICAgYXRhbigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6CisgICAgICAgICAg
ICBtb2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UmVmcmFjdDoKKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6CisgICAgICAgICAgICBkaXN0YW5jZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZW5ndGg6
CisgICAgICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRG90OgorICAgICAgICAgICAgZG90KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5v
cm1hbGl6ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGYWNlZm9yd2FyZDoKKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICBy
ZWZsZWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wU2luOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BT
aW5oOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
QXRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3c6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9nMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BGbG9vcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5j
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2VpbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNb2RmOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGcmV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEludmVyc2Vz
cXJ0OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEV2ZW4gaWYgQXJnMCBpcyBhIHZlY3RvciBvciBtYXRyaXgsIGl0IGNvdWxkIGFs
c28gYmUgYW4gYXJyYXkuCisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBh
cmdUeXBlMS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVxdWFs
QXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNW
ZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBub3RFcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChhcmdU
eXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbm90RXF1YWxBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAg
ICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaWduOgorICAgICAgICAgICAgc2lnbigpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWl4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3RlcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNtb290aHN0ZXA6CisgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFueToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSXNpbmY6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZ3aWR0aDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWRkOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGFkZE1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAg
ICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlz
TWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENv
bXBvbmVudFdpc2U6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJn
VHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcG9u
ZW50V2lzZU11bHRpcGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wT3V0ZXJQcm9kdWN0OgorICAgICAgICAgICAgb3V0
ZXJQcm9kdWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZTAtPmdldENvbHMoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
ICAgIGludmVyc2UyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAg
ICAgICBpbnZlcnNlNCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVt
ZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNy
ZW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURl
Y3JlbWVudDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwcmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNo
aWZ0TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE11bDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRT
aGlmdFJpZ2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVu
dFdpc2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsQ29tcG9uZW50
V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25l
bnRXaXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRX
aXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0
cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQnJlYWs6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhJbmRpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVaW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNU
b1VpbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICAgICAgLy8g
ZG8gbm90aGluZworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEtpbGw6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
YWNrU25vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtNHg4OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYy
eDE2OgorICAgICAgICAgICAgcGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisgICAgICAgICAgICB1
bnBhY2tfaGFsZl8yeDE2KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0ZmllbGRFeHRyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0ZmllbGRJbnNlcnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVy
c2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRDb3VudDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZpbmRMU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNC
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVWFkZENhcnJ5OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVXN1YkJvcnJvdzoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEltdWxFeHRlbmRlZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNZW1vcnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmll
ckF0b21pY0NvdW50ZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
QnVmZmVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllclNoYXJlZDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyb3VwTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEF0b21pY0FkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01p
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01heDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21p
Y09yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljWG9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNDb21wU3dhcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVtaXRWZXJ0ZXg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGVHJhbnNmb3JtOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXJyYXlMZW5ndGg6CisgICAgICAgICAgICBU
T0RPKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29uc3RydWN0OgorICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIEFTU0VS
VChmdW5jKTsKKyAgICAgICAgICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoZnVuYykuc2Vjb25kKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBlbmQgPSBtRnVuY1RvRW1pdHRlci5lbmQoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAgICA9IG1GdW5jVG9FbWl0dGVyLmZpbmQobmFtZSk7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICAgICAgICAgICAgICBh
dXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIp
OworICAgICAgICAgICAgICAgICAgICBpZiAobWFzay5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5k
KG1hc2suZmlyc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gJmVtaXR0ZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgp
KQorICAgIHsKKyAgICAgICAgY29uc3QgTmFtZSB0eXBlTmFtZSgqcyk7CisgICAgICAgIGlmICh0
eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorICAgICAgICB7CisgICAg
ICAgICAgICB0ZXh0dXJlRW52KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUo
Y29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmdmFyKS5z
ZWNvbmQpCisgICAgeworICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5
cGUoKSk7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN0cnVjdHVyZShj
b25zdCBUU3RydWN0dXJlICZzKQoreworICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29u
ZCkKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHMuZmllbGRzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBl
KCk7CisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUoKmZpZWxkKSwgdHlwZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmcmlnaHRU
eXBlID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgIHZpc2l0T3BlcmF0b3Iobm9k
ZS0+Z2V0T3AoKSwgbnVsbHB0ciwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlID0gbm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBudWxscHRyLCAmYXJnVHlwZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bVByZWx1ZGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQoreworICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQo
KTsKKworICAgIGF1dG8gZ2V0QXJnVHlwZSA9IFtub2RlLCBhcmdDb3VudF0oc2l6ZV90IGluZGV4
KSAtPiBjb25zdCBUVHlwZSAmIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJnQ291bnQpOwor
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IG5vZGUtPmdldENoaWxkTm9kZShpbmRleCktPmdl
dEFzVHlwZWQoKTsKKyAgICAgICAgQVNTRVJUKGFyZyk7CisgICAgICAgIHJldHVybiBhcmctPmdl
dFR5cGUoKTsKKyAgICB9OworCisgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0
RnVuY3Rpb24oKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Q2hpbGRDb3VudCgpKQorICAgIHsK
KyAgICAgICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5v
ZGUtPmdldE9wKCksIGZ1bmMsIG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMCA9IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEg
PSBnZXRBcmdUeXBlKDEpOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBmdW5jLCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdl
dE9wKCksIGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpub2RlKQorewor
ICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKyAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IGRlY2wuc3ltYm9sLmdldFR5cGUoKTsKKyAgICBpZiAodHlwZS5pc1N0
cnVjdFNwZWNpZmllcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5
cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgdmlzaXRTdHJ1Y3R1
cmUoKnMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sKKyAgICB2aXNpdFZhcmlhYmxl
KG5vZGUtPnZhcmlhYmxlKCkpOworfQorCitib29sIHNoOjpFbWl0UHJvZ3JhbVByZWx1ZGUoVElu
dGVybUJsb2NrICZyb290LCBUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0IFByb2dyYW1QcmVsdWRl
Q29uZmlnICZwcGMpCit7CisgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBw
cGMpOworICAgIHJvb3QudHJhdmVyc2UoJnByb2dyYW1QcmVsdWRlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAwNDEzZjU3NjkyYTA1MzRkYTRk
N2RjOTYzYTA5OGJiODhjZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9n
cmFtUHJlbHVkZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBS
RUxVREVfSF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVEluZm9TaW5rQmFzZTsK
K2NsYXNzIFRJbnRlcm1CbG9jazsKKworc3RydWN0IFByb2dyYW1QcmVsdWRlQ29uZmlnCit7Cisg
ICAgYm9vbCBoYXNTdHJ1Y3RFcSA9IGZhbHNlOworfTsKKworLy8gVGhpcyBlbWl0cyBmaXhlZCBo
ZWxwZXIgTWV0YWwgY29kZSBkaXJlY3RseSB3aXRob3V0IGFkZGluZyBjb2RlIHRvIHRoZSBBU1Qu
IFRoaXMgd2Fsa3MgdGhlIEFTVCB0bworLy8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgd2hhdCBw
cmVsdWRlIE1TTCBjb2RlIGlzIG5lZWRlZCBmb3IgdmFyaW91cyB0aGluZ3MgaW4gdGhlIEFTVC4g
WW91IGNhbgorLy8gdGhpbmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3Vz
IHBvcnRpb25zIG9mIGEgaGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorLy8gTWV0YWwg
cHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW5mb1NpbmtCYXNlICZvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3BhY2Ug
c2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9QUk9HUkFNUFJFTFVERV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVy
ZmFjZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYTgxNjk2ZjA2YWY2OWQ0YWRhMjU3OWMwMmQwOGM0ODk0NWZkOWU4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAKQEAg
LTAsMCArMSwxMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRGVjbGFyYXRpb25zLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5o
IgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25h
bWVzcGFjZQoreworCitjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqLCBzdGQ6Om1hcDxJ
bW11dGFibGVTdHJpbmcsIGNvbnN0IFRWYXJpYWJsZSAqPj4KKyAgICAgICAgbUxpZnRlZE1hcDsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJs
ZSAqPiBtSW5zdGFuY2VNYXA7CisKKyAgcHVibGljOgorICAgIFJlZHVjZXIoVENvbXBpbGVyICZj
b21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2RlLmdldENoaWxkQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hp
bGROb2RlKDApOworCisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9k
ZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlh
YmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBj
b25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAg
ICAgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvICZuYW1lVG9WYXIgPSBtTGlmdGVkTWFwW2ludGVyZmFjZUJsb2NrXTsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVwbGFjZW1l
bnRzOworICAgICAgICAgICAgICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0g
VFF1YWxpZmllcjo6RXZxVW5pZm9ybSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxR2xvYmFsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6
OkV2cVVuaWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqbGlmdGVkVmFyID0g
bmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCAmbGlmdGVkVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQtPnN5bWJvbFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVUb1Zh
cltmaWVsZC0+bmFtZSgpXSA9IGxpZnRlZFZhcjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VEludGVybURlY2xhcmF0aW9ue25ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcil9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpN
dWx0aShzdGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworCisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gJnN0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgaW50ZXJmYWNlQmxvY2stPm5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJmYWNlQmxv
Y2stPmZpZWxkcygpLCBpbnRlcmZhY2VCbG9jay0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAmaW5zdGFuY2VW
YXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShtU3lt
Ym9sVGFibGUsIHN0cnVjdHVyZSwgTmFtZSh2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRB
cnJheVNpemVzKCkpOworCisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZU1hcFsmdmFyXSA9
ICZpbnN0YW5jZVZhcjsKKworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnRzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybURlY2xhcmF0
aW9ue25ldyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RWYXIpfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFy
KX19OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6OmJl
Z2luKHJlcGxhY2VtZW50cyksIHN0ZDo6ZW5kKHJlcGxhY2VtZW50cykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7ZGVjbE5v
ZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0U3lt
Ym9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBpdCA9IG1JbnN0YW5jZU1hcC5maW5kKCZ2YXIpOworICAgICAg
ICAgICAgaWYgKGl0ICE9IG1JbnN0YW5jZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmli
ID0gdmFyLmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKyAgICAgICAgICAgIGlmIChpdCAh
PSBtTGlmdGVkTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
KmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisgICAgICAgICAgICAgICAgQVNT
RVJUKGxpZnRlZFZhcik7CisgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJv
bChsaWZ0ZWRWYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBz
eW1ib2xOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmVkdWNlSW50ZXJmYWNlQmxvY2tzKFRD
b21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBSZWR1Y2VyIHJl
ZHVjZXIoY29tcGlsZXIpOworICAgIGlmICghcmVkdWNlci5yZWJ1aWxkUm9vdChyb290KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRlRGVj
bGFyYXRpb25zKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJs
b2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM2OTVjYmFkZmQ2NGEyMTJhNWJlNTUxODliOWNlNzJjNjhkNzRh
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5URVJG
QUNFQkxPQ0tTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IFRoaXMgcmV3cml0ZXMgaW50ZXJmYWNlIGJsb2NrIGRlY2xhcmF0aW9ucyBvbmx5LgorLy8KKy8v
IEFjY2VzcyBvZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKy8vIFhYWDogXiBTdGlsbCB0
cnVlPworLy8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBGb28geyBpbnQgeDsgfTsKKy8vIEJl
Y29tZXM6CisvLyAgdW5pZm9ybSBpbnQgeDsKKy8vCisvLyBFeGFtcGxlOgorLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworLy8gQmVjb21lczoKKy8vICBzdHJ1Y3QgRm9vIHsgaW50IHg7
IH07IHVuaWZvcm0gRm9vIHg7CisvLworQU5HTEVfTk9fRElTQ0FSRCBib29sIFJlZHVjZUludGVy
ZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9
ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YjVkODZjNzg4ZTVkNmMyMzIxNTFiODM2MjZmODYwMTlhM2NiZGY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
UkVGRVJFTkNFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1JFRkVSRU5DRV9IXworCituYW1lc3BhY2Ugc2gKK3sKKworLy8gU2ltaWxhciB0byBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUmVmCit7CisgIHB1YmxpYzoKKyAgICBS
ZWYoY29uc3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVs
dDsKKyAgICBSZWYoVCAmcmVmKSA6IG1QdHIoJnJlZikge30KKworICAgIFJlZiAmb3BlcmF0b3I9
KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisgICAgUmVmICZvcGVyYXRvcj0oUmVmICYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgIT0gKm90aGVyLm1QdHI7IH0KKyAgICBi
b29sIG9wZXJhdG9yPD0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPD0g
Km90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikgY29u
c3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8ICpvdGhlci5tUHRyOyB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PiAqb3RoZXIubVB0cjsgfQorCisgICAgVCAmZ2V0KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBU
IGNvbnN0ICZnZXQoKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAm
KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVyYXRvciBUIGNvbnN0ICYoKSBjb25zdCB7IHJl
dHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAqKCkgeyByZXR1cm4gKm1QdHI7IH0KKyAg
ICBvcGVyYXRvciBUIGNvbnN0ICooKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgIHByaXZh
dGU6CisgICAgVCAqbVB0cjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQ1Jl
ZiA9IFJlZjxUIGNvbnN0PjsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzc4MTc3NmM1
NjA3OTIxZGUzMjJmZTk2NTlkODM2ZTBhMzJiNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsxLDkxIEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3Bh
Y2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFz
cyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisKKyAgcHVi
bGljOgorICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIHRydWUsIHRydWUpIHt9CisKKyAgICB+UmV3cml0ZXIoKSBvdmVycmlkZSB7IEFT
U0VSVChtRGVjbGFyZWRWYXJTdGFjay5lbXB0eSgpKTsgfQorCisgIHByaXZhdGU6CisgICAgUHJl
UmVzdWx0IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVy
bVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbURlY2xhcmVk
VmFyU3RhY2suZW1wdHkoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gdmFycyA9IHN0ZDo6bW92ZSht
RGVjbGFyZWRWYXJTdGFjay5iYWNrKCkpOworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICBpZiAoIXZhcnMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgZm9yIChj
b25zdCBUVmFyaWFibGUgKnZhciA6IHZhcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay5hcHBlbmRTdGF0ZW1lbnQoJm5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNs
YXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbURlY2xhcmVkVmFy
U3RhY2suZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybU5vZGUgKnBhcmVu
dCA9IGdldFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmdldEFzQmxvY2so
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJl
bnQgPSBnZXRQYXJlbnROb2RlKDEpOworICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVudCAm
JiBncmFuZHBhcmVudC0+Z2V0QXNTd2l0Y2hOb2RlKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5iYWNrKCkucHVzaF9iYWNr
KCZkZWNsLnN5bWJvbC52YXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZWNsLnN5
bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbC5pbml0RXhwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlJld3JpdGVDYXNlRGVjbGFyYXRpb25zKFRDb21waWxlciAmY29tcGlsZXIs
IFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1
aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNs
YXJhdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1YTg4MjE1NDc1ZDA4ZTUxYjIxNzRlZTNlMWEzYWFjYjU0NDUwYzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaApAQCAtMCww
ICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJ
T05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEVYQU1Q
TEUKKy8vICAgIHN3aXRjaCAoZXhwcikKKy8vICAgIHsKKy8vICAgICAgY2FzZSAwOgorLy8gICAg
ICAgIGludCB4ID0gMDsKKy8vICAgICAgICBicmVhazsKKy8vICAgICAgY2FzZSAxOgorLy8gICAg
ICAgIGludCB5ID0gMDsKKy8vICAgICAgICB7CisvLyAgICAgICAgICBpbnQgeiA9IDA7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIGJyZWFrOworLy8gICAgfQorLy8gQmVjb21lcworLy8gICAgewor
Ly8gICAgICBpbnQgeDsKKy8vICAgICAgaW50IHk7CisvLyAgICAgIHN3aXRjaCAoZXhwcikKKy8v
ICAgICAgeworLy8gICAgICAgIGNhc2UgMDoKKy8vICAgICAgICAgIHggPSAwOworLy8gICAgICAg
ICAgYnJlYWs7CisvLyAgICAgICAgY2FzZSAxOgorLy8gICAgICAgICAgeSA9IDA7CisvLyAgICAg
ICAgICB7CisvLyAgICAgICAgICAgIGludCB6ID0gMDsKKy8vICAgICAgICAgIH0KKy8vICAgICAg
ICAgIGJyZWFrOworLy8gICAgICB9CisvLyAgICB9CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3
cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZy
b290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGFkNWEzNmM4MWI1YzcyNDE4YTZhOWJhZDE1NWEzYzQ1MzZiNmJlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCkBAIC0wLDAg
KzEsMTE0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2NsYXNzIEZpbmREZWNsYXJl
ZEdsb2JhbHMgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgcHVibGljOgorICAgIHN0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gbURlY2xhcmVkR2xvYmFsczsKKworICAg
IEZpbmREZWNsYXJlZEdsb2JhbHMoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJh
dGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgVEludGVybU5vZGUgKmRlY2xhcmF0b3JOb2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworCisg
ICAgICAgIGlmIChUSW50ZXJtQmluYXJ5ICppbml0Tm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRB
c0JpbmFyeU5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGluaXRO
b2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChzeW1ib2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgp
OworCisgICAgICAgIG1EZWNsYXJlZEdsb2JhbHMuaW5zZXJ0KCZ2YXIpOworCisgICAgICAgIHJl
dHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisgICAgfQorfTsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJl
YnVpbGQKK3sKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+
ICZtRGVjbGFyZWRHbG9iYWxzOworICAgIEludmFyaWFudHMgJm1PdXRJbnZhcmlhbnRzOworCisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gJmRlY2xhcmVkR2xv
YmFscywKKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorICAgICAgICA6
IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSksCisgICAgICAgICAgbURlY2xh
cmVkR2xvYmFscyhkZWNsYXJlZEdsb2JhbHMpLAorICAgICAgICAgIG1PdXRJbnZhcmlhbnRzKG91
dEludmFyaWFudHMpCisgICAge30KKworICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uUHJlKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJmdxRGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtU3ltYm9sICZz
eW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyICAgICAgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7CisKKyAgICAgICAgaWYgKGdx
RGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dEludmFy
aWFudHMuaW5zZXJ0KHZhcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlY2xhcmVkR2xv
YmFscy5maW5kKCZ2YXIpID09IG1EZWNsYXJlZEdsb2JhbHMuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmc3ltYm9sTm9kZX07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUHJlUmVzdWx0
IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0K
KworICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworYm9vbCBzaDo6UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21waWxlciAm
Y29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFu
dHMgJm91dEludmFyaWFudHMpCit7CisgICAgRmluZERlY2xhcmVkR2xvYmFscyBmZGcoY29tcGls
ZXIpOworICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJld3JpdGVy
IHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7
CisgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTMxYmNhZmJhNmNmMTdm
YTljOThkNTFlZTg1YzM2ZDMwZTdmNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworCisj
aW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFu
ZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KK2NsYXNzIEludmFyaWFu
dHMKK3sKKyAgcHVibGljOgorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSB7
IG1JbnZhcmlhbnRzLmluc2VydCgmdmFyKTsgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVEZp
ZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorCisgICAgYm9vbCBj
b250YWlucyhjb25zdCBUVmFyaWFibGUgJnZhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtSW52YXJpYW50cy5maW5kKCZ2YXIpICE9IG1JbnZhcmlhbnRzLmVuZCgpOworICAgIH0KKwor
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7
CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IHZvaWQg
Kj4gbUludmFyaWFudHM7Cit9OworCisvLyBUaGlzIHJld3JpdGVzIFRJbnRlcm1HbG9iYWxRdWFs
aWZpZXJEZWNsYXJhdGlvbnMgYXMgVEludGVybURlY2xhcmF0aW9ucy4KKy8vIGBvdXRJbnZhcmlh
bnRzYCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBvdGhlcndp
c2UgYmUgbG9zdCBieSBzdWNoIGEKKy8vIHRyYW5zZm9ybS4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZUtleXdvcmRzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwMTRmNDBmODFjY2FkNTAxMzM3MDY1OGJjODk0MmIwMDJkNmI4ZTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcApAQCAtMCwwICsxLDQzNCBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFQgKiwgY29uc3QgVCAqPjsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+ICZtS2V5d29yZHM7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBSZW1hcHBpbmc8VEZpZWxk
PiBtb2RpZmllZEZpZWxkczsKKyAgICBSZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7
CisgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKyAgICBSZW1hcHBpbmc8VElu
dGVyZmFjZUJsb2NrPiBtSW50ZXJmYWNlQmxvY2tzOworICAgIFJlbWFwcGluZzxUU3RydWN0dXJl
PiBtU3RydWN0dXJlczsKKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgSW1tdXRhYmxlU3RyaW5nIG1heWJlQ3JlYXRlTmV3TmFtZShUIGNv
bnN0ICZvYmplY3QpCisgICAgeworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhvYmplY3QsIGZh
bHNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1l
KE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOYW1l
KG9iamVjdCkucmF3TmFtZSgpOworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZCAqY3JlYXRlUmVu
YW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9
CisgICAgICAgICAgICBuZXcgVEZpZWxkKGNvbnN0X2Nhc3Q8VFR5cGUgKj4oJmdldFJlbmFtZWRP
ck9yaWdpbmFsKCpmaWVsZC50eXBlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVD
cmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBURmll
bGRMaXN0ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKyAgICB7
CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgICAgICBmb3Ig
KGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlbmFtZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoKmZpZWxkKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24g
JmZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAgICAgICAgICBu
ZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiks
IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbi5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7
CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNv
dW50KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9u
LmdldFBhcmFtKGkpOworICAgICAgICAgICAgcmVuYW1lZC0+YWRkUGFyYW1ldGVyKCZnZXRSZW5h
bWVkT3JPcmlnaW5hbChwYXJhbSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmN0aW9u
LmlzRGVmaW5lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXREZWZpbmVk
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24uaGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpDcmVhdGUoKTsKKyAgICAg
ICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9j
a1N0b3JhZ2UoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJpbmRpbmcgICAgICAgICAgPSBp
bnRlcmZhY2VCbG9jay5ibG9ja0JpbmRpbmcoKTsKKworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBUSW50ZXJmYWNlQmxvY2soJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVh
dGVOZXdOYW1lKGludGVyZmFjZUJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKGludGVyZmFjZUJsb2NrLmZpZWxkcygpKSwgbGF5b3V0
UXVhbGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0
dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAqY3JlYXRlUmVuYW1l
ZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvICpyZW5h
bWVkID0KKyAgICAgICAgICAgIG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG1heWJlQ3Jl
YXRlTmV3TmFtZShzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJl
bmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwpOworCisgICAgICAgIHJlbmFtZWQtPnNldEF0R2xvYmFsU2NvcGUoc3RydWN0dXJlLmF0
R2xvYmFsU2NvcGUoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAg
Y29uc3QgVFR5cGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFR5cGUgJnR5cGUpCisgICAgeworICAg
ICAgICBUVHlwZSAqcmVuYW1lZDsKKworICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1l
ZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKnN0cnVjdHVyZSksIHR5cGUuaXNT
dHJ1Y3RTcGVjaWZpZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9y
T3JpZ2luYWwoKmludGVyZmFjZUJsb2NrKSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OyAgLy8gQ2FuJ3QgcmVuYW1lIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICAgICAgcmVuYW1lZCA9
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlbmFtZWQtPm1ha2VBcnJheXModHlwZS5nZXRBcnJheVNpemVz
KCkpOworICAgICAgICB9CisgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldEludmFyaWFudCh0eXBlLmlzSW52YXJpYW50KCkp
OworICAgICAgICByZW5hbWVkLT5zZXRNZW1vcnlRdWFsaWZpZXIodHlwZS5nZXRNZW1vcnlRdWFs
aWZpZXIoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExh
eW91dFF1YWxpZmllcigpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAg
ICBjb25zdCBUVmFyaWFibGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJs
ZSkKKyAgICB7CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZSh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXJpYWJsZS5nZXRUeXBl
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bmFtZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCAq
dHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGlu
ZykKKyAgICB7CisgICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChyZW1hcHBpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBp
bmctPmZpbmQoJm9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3Qg
PSBjcmVhdGVSZW5hbWVkKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHJlbWFwcGluZykKKyAgICAg
ICAgeworICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OworICAgIH0KKworICAg
IGNvbnN0IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMp
OworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJ
bXBsKGZpZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKyAgICB9CisKKyAgICBjb25zdCBURnVuY3Rp
b24gKnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKKyAgICB9CisKKyAg
ICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJs
b2NrICZpbnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVk
SW1wbChpbnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOworICAgIH0KKworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1T
dHJ1Y3R1cmVzKTsKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVHlwZSAmdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0
eXBlLCBzdGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKKyAgICB9CisK
KyAgICBjb25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwg
Jm1WYXJpYWJsZXMpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQgJmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKKyAgICB7CisgICAg
ICAgIGNvbnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7CisgICAgICAgIGlm
IChyZW5hbWVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29u
c3QKKyAgICB7CisgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5z
eW1ib2xUeXBlKCk7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0
eToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgU3lt
Ym9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdO
YW1lKCk7CisgICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5k
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZp
ZWxkLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1Jl
bmFtaW5nSW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50
eXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChyZWN1cnNpdmUpOworICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBm
aWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVs
ZCwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJl
Y3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5j
dGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtQ291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZw
YXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFt
aW5nKHBhcmFtLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbmVlZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8CisgICAgICAgICAgICAgICAo
cmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUp
KTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChzdHJ1Y3R1cmUpIHx8CisgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisgICAgfQorCisgICAg
Ym9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWlu
Zygqc3RydWN0dXJlLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJs
b2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRl
cmZhY2VCbG9jaywgcmVjdXJzaXZlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJs
ZSkgfHwKKyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJs
ZS5nZXRUeXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRD
b21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxl
U3RyaW5nPiAma2V5d29yZHMpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZh
bHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisK
KyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisg
ICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUo
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZyVmFyID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFy
KTsKKyAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzeW1ib2xOb2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQg
dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90
b05vZGUpCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3Rv
Tm9kZS5nZXRGdW5jdGlvbigpOworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVl
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJl
bmFtZWRPck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNQ
cm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlv
blBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAq
ZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uICZmdW5jICAgICAgICAgICAgICAgICAgID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChm
dW5jKTsKKyAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJvdG9Ob2RlICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZTsKKyAgICB9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1
Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3Jl
Z2F0ZU5vZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodHlwZSwg
dHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBl
ID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdl
dFNlcXVlbmNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5v
ZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRy
dWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1
bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFnZ3JlZ2F0ZU5vZGUuZ2V0T3AoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwo
ckZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9u
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZVJhd0Z1bmN0aW9uQ2FsbChyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRT
ZXF1ZW5jZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlv
bkNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUu
Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6
UmV3cml0ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFi
bGVTdHJpbmc+ICZrZXl3b3JkcykKK3sKKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwg
aWRHZW4sIGtleXdvcmRzKTsKKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZXdyaXRlS2V5d29yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTYyYmM3OWI0MTE4ZjljNzQ0NzVjMjY4
YjY5ZGU2MjVjNTdmNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVL
ZXl3b3Jkcy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlX
T1JEU19IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKKy8vIFRoaXMgd2Fsa3MgdGhlIHRyZWUgYW5kIHJlbmFtZXMgYWxsIG5h
bWVzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgaW5wdXQgYGtleXdvcmRzYC4KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJmtleXdvcmRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVPdXRBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWMwMzdkNTI5MGFkZjIzMjI1ZWI4OGRk
MGZiNzc4OWFhZTU0ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK2NsYXNzIFNtYWxsTXVsdGlTZXQKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBFbnRy
eQorICAgIHsKKyAgICAgICAgVCBlbGVtOworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsK
KworICAgIGNvbnN0IEVudHJ5ICpmaW5kKGNvbnN0IFQgJngpIGNvbnN0CisgICAgeworICAgICAg
ICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh4ID09IGVudHJ5LmVsZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICZlbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBzaXplX3QgbXVsdGlwbGljaXR5KGNvbnN0IFQgJngpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5kKHgpOworICAgICAgICByZXR1
cm4gZW50cnkgPyBlbnRyeS0+Y291bnQgOiAwOworICAgIH0KKworICAgIGNvbnN0IEVudHJ5ICZp
bnNlcnQoY29uc3QgVCAmeCkKKyAgICB7CisgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRh
YmxlKHgpOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZW50
cnktPmNvdW50OworICAgICAgICAgICAgcmV0dXJuICplbnRyeTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FbnRyaWVzLnB1c2hfYmFjayh7eCwgMX0p
OworICAgICAgICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgY2xlYXIoKSB7IG1FbnRyaWVzLmNsZWFyKCk7IH0KKworICAgIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisKKyAgICBzaXplX3QgdW5p
cXVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQorCisgIHByaXZhdGU6
CisgICAgQU5HTEVfSU5MSU5FIEVudHJ5ICpmaW5kTXV0YWJsZShjb25zdCBUICZ4KSB7IHJldHVy
biBjb25zdF9jYXN0PEVudHJ5ICo+KGZpbmQoeCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6
OnZlY3RvcjxFbnRyeT4gbUVudHJpZXM7Cit9OworCitjb25zdCBUVmFyaWFibGUgKkdldFZhcmlh
YmxlKFRJbnRlcm1Ob2RlICZub2RlKQoreworICAgIFRJbnRlcm1UeXBlZCAqdHlOb2RlID0gbm9k
ZS5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHR5Tm9kZSk7CisgICAgaWYgKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gJnN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgU21hbGxN
dWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxlIGJ1ZmZl
cgorICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAgflJld3JpdGVy
KCkgb3ZlcnJpZGUgeyBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsgfQorCisgICAgUmV3cml0
ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xF
bnYpCisgICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1B
Z2dyZWdhdGUgJmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
bVZhckJ1ZmZlci5lbXB0eSgpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBh
Z2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpOwor
ICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAgICBh
dXRvIGdldFBhcmFtUXVhbGlmaWVyID0gWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZwYXJhbVR5cGUgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAgICAg
ICAgY29uc3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7
CisgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xFbnYu
aXNSZWZlcmVuY2UocGFyYW0pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNl
OjpUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKyAgICAgICAg
fTsKKworICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgKnZhciA9IEdldFZhcmlhYmxlKCphcmdzW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWdodEFsaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBoYXNJbmRldGVybWlu
YXRlVmFyID0gbVZhckJ1ZmZlci5maW5kKG51bGxwdHIpOworCisgICAgICAgIGlmICghbWlnaHRB
bGlhcykKKyAgICAgICAgeworICAgICAgICAgICAgbWlnaHRBbGlhcyA9IGhhc0luZGV0ZXJtaW5h
dGVWYXIgJiYgbVZhckJ1ZmZlci51bmlxdWVTaXplKCkgPiAxOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1pZ2h0QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciAgICAg
ICA9IEdldFZhcmlhYmxlKCphcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIg
cGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
aGFzSW5kZXRlcm1pbmF0ZVZhciB8fCBtVmFyQnVmZmVyLm11bHRpcGxpY2l0eSh2YXIpID4gMSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFs
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0g
Jm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgib3V0IiksIGFyZy0+Z2V0VHlw
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWUoImlub3V0IiksIGFyZy0+Z2V0VHlwZSgpLCAqbmV3IFRJbnRl
cm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1WYXJCdWZmZXIuY2xlYXIoKTsKKwor
ICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVPdXRBcmdzKFRDb21waWxlciAmY29tcGls
ZXIsIFRJbnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAgaWYgKCFyZXdyaXRlci5y
ZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFy
Z3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MmI3NDdh
M2U3ZGVmZTI0YmRiNTllNjIxY2E3NDUwZTMxY2Q0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVP
VVRBUkdTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVPVVRBUkdTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IGUuZy46CisvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50IHkpKi8KKy8vICAg
IGZvbyh6LCB3KTsKKy8vIGJlY29tZXMKKy8vICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKy8v
IHVubGVzcyBgemAgYW5kIGB3YCBhcmUgZGV0ZWN0ZWQgdG8gbmV2ZXIgYWxpYXMuCisvLyBUaGUg
dHJhbnNsYXRlZCBleGFtcGxlIGVmZmVjdGl2ZWx5IGJlaGF2ZXMgdGhlIHNhbWUgYXM6CisvLyAg
ICBpbnQgXzE7CisvLyAgICBpbnQgXzIgPSB3OworLy8gICAgZm9vKF8xLCBfMik7CisvLyAgICB6
ID0gXzE7CisvLyAgICB3ID0gXzI7CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZU91dEFy
Z3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5
bWJvbEVudik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVBpcGVsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzN2UyMzMwMGFiOTllMTBmYjgwYWM4ZjVm
ZjBjNmUxODA2NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmNwcApAQCAtMCwwICsxLDkzOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNzdHJp
bmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0Pgor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1BydW5lTm9PcHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9G
aW5kTWFpbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCit1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3Jk
ZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OwordXNpbmcgVmFyaWFibGVMaXN0ID0gc3RkOjp2
ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitz
dHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RJbmZvCit7CisgICAgVmFyaWFibGVTZXQgcGlwZWxpbmVWYXJp
YWJsZXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3Q7Cisg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZVN0cnVj
dC5pc1RvdGFsbHlFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZVN0
cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaXBlbGluZVZhcmlh
Ymxlcy5lbXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KK307CisKK2NsYXNzIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QgOiBwcml2YXRlIFRJbnRlcm1S
ZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAg
ICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7Cisg
ICAgVmFyaWFibGVMaXN0IG1QaXBlbGluZVZhcmlhYmxlTGlzdDsKKyAgICBJZEdlbiAmbUlkR2Vu
OworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKworICBwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgRXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwKKyAgICAgICAgICAgICAgICAgICAg
IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmlu
dmFyaWFudHMpCisgICAgeworICAgICAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IHNlbGYoY29t
cGlsZXIsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKTsKKyAgICAgICAg
aWYgKCFzZWxmLmV4ZWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBvdXQgPSBzZWxmLm1JbmZvOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1QaXBlbGlu
ZShwaXBlbGluZSksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAg
IG1JbnZhcmlhbnRzKGludmFyaWFudHMpLAorICAgICAgICAgIG1JZEdlbihpZEdlbikKKyAgICB7
fQorCisgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKyAgICB7CisgICAgICAgIGlm
ICghcmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5lbXB0
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAm
cGlwZWxpbmVTdHJ1Y3QgPSBbJl0oKSAtPiBjb25zdCBUU3RydWN0dXJlICYgeworICAgICAgICAg
ICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhci0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0
KHJvb3QsIHNlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKTsKKworICAgICAgICBNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzIG1vZGlmaWVkTWFjaGluZXJpZXM7CisgICAgICAgIGNvbnN0
IGJvb2wgbW9kaWZpZWQgPSBUcnlDcmVhdGVNb2RpZmllZFN0cnVjdCgKKyAgICAgICAgICAgIG1T
eW1ib2xFbnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCks
IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1l
KFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCksIG1vZGlmaWVkTWFjaGluZXJpZXMpOworCisg
ICAgICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZS50eXBlICE9IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBl
biBieSBjb25zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIGF1dG8gZ2V0RnVuY3Rpb24gPSBbXShz
aDo6VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlY2wpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVk
TWFjaGluZXJpZXMuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkg
PSBtb2RpZmllZE1hY2hpbmVyaWVzLmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtYWNo
aW5lcnkubW9kaWZpZWRTdHJ1Y3QpOworCisgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhu
ZXcgVEludGVybURlY2xhcmF0aW9ueworICAgICAgICAgICAgICAgICAgICAmQ3JlYXRlU3RydWN0
VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgKm1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCl9KTsK
KworICAgICAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3Jp
Z2luYWxUb01vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnku
ZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoX2Jh
Y2sobWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPT0g
c2l6ZSAtIDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW5mby5m
dW5jT3JpZ2luYWxUb01vZGlmaWVkID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNPcmlnaW5h
bFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jTW9kaWZpZWRUb09y
aWdpbmFsID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBp
cGVsaW5lU3RydWN0OworICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hpbmVyeS5t
b2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKyAgICAg
ICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0gJnBpcGVsaW5lU3RydWN0Owor
ICAgICAgICB9CisKKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgo
JnJvb3QpLCBzZXEpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNs
YXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgp
OworCisgICAgICAgIGlmIChtUGlwZWxpbmUudXNlcyh2YXIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBtSW5mby5w
aXBlbGluZVZhcmlhYmxlcy5lbmQoKSk7CisgICAgICAgICAgICBtSW5mby5waXBlbGluZVZhcmlh
Ymxlcy5pbnNlcnQoJnZhcik7CisgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVz
aF9iYWNrKCZ2YXIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVjbE5vZGU7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAm
Y3JlYXRlSW50ZXJuYWxQaXBlbGluZVN0cnVjdChUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1T
ZXF1ZW5jZSAmb3V0RGVjbFNlcSkKKyAgICB7CisgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcg
VEZpZWxkTGlzdCgpOworCisgICAgICAgIHN3aXRjaCAobVBpcGVsaW5lLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6OlRleHR1cmU6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGlu
ZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghbUludmFyaWFudHMuY29udGFpbnMoKnZhcikpOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSB2YXJUeXBlLmdldEJhc2lj
VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVF
bnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvICp0ZXh0dXJlRW52VHlwZSAgICAgICAgID0gbmV3IFRUeXBlKCZ0ZXh0dXJl
RW52LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJUeXBlLmlzQXJyYXkoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
dlR5cGUtPm1ha2VBcnJheXModmFyVHlwZS5nZXRBcnJheVNpemVzKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2hfYmFjaygKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGQodGV4dHVyZUVudlR5cGUsIHZhci0+bmFtZSgp
LCBrTm9Tb3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZh
ciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gJnR5cGUgID0gQ2xvbmVUeXBlKHZhci0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUo
KSwga05vU291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZpZWxkcy5wdXNoX2JhY2soZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW52
YXJpYW50cy5jb250YWlucygqdmFyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbUludmFyaWFudHMuaW5zZXJ0KCpmaWVsZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBp
cGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7Cisg
ICAgICAgIGF1dG8gJnMgPSAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgcGlwZWxpbmVT
dHJ1Y3ROYW1lLnJhd05hbWUoKSwgJmZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXBlbGluZVN0cnVjdE5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAgICAgICBvdXRE
ZWNsU2VxLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ueyZDcmVhdGVTdHJ1Y3RUeXBl
VmFyaWFibGUobVN5bWJvbFRhYmxlLCBzKX0pOworCisgICAgICAgIHJldHVybiBzOworICAgIH0K
K307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0
cnVjdCkKK3sKKyAgICBBU1NFUlQocGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKwor
ICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisKKyAg
ICBhdXRvIHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIgPSBbJl0oKSB7CisgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworICAgICAgICBwaXBlbGluZU1h
aW5Mb2NhbFZhci5leHRlcm5hbCA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAg
ICAgc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKyAgICAgICAgICAgIHBp
cGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBpcGVsaW5l
OjpWYXJpYW50OjpPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgIH07CisKKyAg
ICBhdXRvIHBvcHVsYXRlRGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAg
ICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsID0KKyAgICAgICAgICAgICZDcmVhdGVJbnN0YW5j
ZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCAqcGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5h
bWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisgICAgfTsKKworICAgIGlmIChwaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgIHsKKyAgICAgICAg
cG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWlu
KCkpCisgICAgeworICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisKKyAg
ICAgICAgaWYgKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoIXBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgIHsKKyAg
ICAgICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHBpcGVsaW5lTWFpbkxvY2FsVmFyOworfQorCitjbGFzcyBQaXBlbGluZUZ1bmN0
aW9uRW52Cit7CisgIHByaXZhdGU6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7CisgICAgU3lt
Ym9sRW52ICZtU3ltYm9sRW52OworICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworICAg
IElkR2VuICZtSWRHZW47CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisgICAgY29uc3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsK
KworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBURnVuY3Rpb24gKiwgY29uc3QgVEZ1bmN0
aW9uICo+IG1GdW5jTWFwOworCisgIHB1YmxpYzoKKyAgICBQaXBlbGluZUZ1bmN0aW9uRW52KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5
bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8
VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhcikKKyAgICAgICAgOiBt
Q29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKyAg
ICAgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sRW52LnN5bWJvbFRhYmxlKCkpLAorICAgICAgICAg
IG1JZEdlbihpZEdlbiksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAg
ICBtUGlwZWxpbmVGdW5jdGlvbnMocGlwZWxpbmVGdW5jdGlvbnMpLAorICAgICAgICAgIG1QaXBl
bGluZVN0cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorICAgIHt9CisKKyAgICBib29sIGlzT3JpZ2luYWxQ
aXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtUGlwZWxpbmVGdW5jdGlvbnMuZmluZCgmZnVuYykgIT0gbVBpcGVsaW5lRnVu
Y3Rpb25zLmVuZCgpOworICAgIH0KKworICAgIGJvb2wgaXNVcGRhdGVkUGlwZWxpbmVGdW5jdGlv
bihjb25zdCBURnVuY3Rpb24gJmZ1bmMpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bUZ1bmNNYXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlmIChpdCA9PSBtRnVuY01hcC5lbmQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAmZnVuYyA9PSBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlv
biAmZ2V0VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihmdW5jKSB8fCBpc1VwZGF0ZWRQ
aXBlbGluZUZ1bmN0aW9uKGZ1bmMpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKm5ld0Z1
bmM7CisKKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworICAgICAgICBp
ZiAoaXQgPT0gbUZ1bmNNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiBt
UGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBl
OjpFYnRWb2lkKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRD
aGFuZ2VSZXR1cm5UeXBlKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxp
bmVTdHJ1Y3QuZXh0ZXJuYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
aXNNYWluICYmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvblZl
cnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
bVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sobmV3IFRWYXJpYWJsZSgmbVN5
bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+dHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUo
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25l
RnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJp
YWJsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1Q
aXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7
CisgICAgICAgICAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29t
cGlsZXIpLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgKnRleHR1cmVFbnYgPSBmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCkuc2l6
ZSgpID09IDIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmll
bGQgOiB0ZXh0dXJlRW52LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUo
e2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRUeXBlICZ0eXBlICAgICA9ICpuZXcgVFR5cGUoKnN1YmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXpl
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUo
KSwgJnR5cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rp
b24tPmFkZE9yaWdpbmFsTmFtZSh2YXItPnVuaXF1ZUlkKCkuZ2V0KCksIGZpZWxkLT5uYW1lKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJv
bFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBl
OjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9
IG1QaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlm
aWVkKTsKKyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFVJbnQpLCBuYW1lLnN5bWJvbFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgbmV3RnVuYyAgID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5k
UGFyYW0obVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKyAgICAgICAgICAgICAg
ICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRy
ZXNzU3BhY2UoKSk7CisgICAgICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVy
bmFsID0gdmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9j
YWxWYXIuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXI7CisgICAgICAgICAgICAgICAgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZTsKKworICAgICAgICAgICAgICAgIGlmIChpc01haW4gJiYgIW1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6
VmFyaWFudDo6T3JpZ2luYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IG1QaXBlbGluZS5leHRlcm5hbEFkZHJlc3NTcGFjZSgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFk
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJl
bmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlw
ZTo6VmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBc1JlZmVyZW5j
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIGFkZHJlc3NTcGFj
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kUHJlcGVuZFBhcmFtKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgKnZh
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GdW5jTWFwWyZmdW5jXSAgID0gbmV3
RnVuYzsKKyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0Z1bmMgPSBpdC0+c2Vj
b25kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXdGdW5jOworICAgIH0KKworICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBl
KAorICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpCisgICAg
eworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5j
dGlvbigpOworICAgICAgICBpZiAoIWlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpICYm
ICFpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5l
d0Z1bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHJldHVybiBuZXcgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlKCZuZXdGdW5jKTsKKyAgICB9Cit9OworCitjbGFzcyBVcGRh
dGVQaXBlbGluZUZ1bmN0aW9ucyA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0
ZToKKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0IFBpcGVsaW5lU2Nv
cGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKyAgICBQaXBlbGluZVNjb3BlZDxUVmFy
aWFibGU+ICZtUGlwZWxpbmVNYWluTG9jYWxWYXI7CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52
OworICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKyAgICBjb25zdCBURnVuY3Rpb24gKm1G
dW5jT3JpZ2luYWxUb01vZGlmaWVkOworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWw7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBib29sIFRocmVhZFBpcGVsaW5l
KFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBp
cGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZwaXBlbGluZUZ1bmN0aW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCkKKyAgICB7CisgICAgICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIHNlbGYoY29tcGlsZXIs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIsIGlkR2VuLCBz
eW1ib2xFbnYsIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgIGlmICghc2Vs
Zi5yZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgor
ICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rp
b24gKj4gJnBpcGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2Fs
VmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRU
b09yaWdpbmFsKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1
ZSksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlwZWxpbmVT
dHJ1Y3QocGlwZWxpbmVTdHJ1Y3QpLAorICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihw
aXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAor
ICAgICAgICAgIG1FbnYoY29tcGlsZXIsCisgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisgICAg
ICAgICAgICAgICBpZEdlbiwKKyAgICAgICAgICAgICAgIHBpcGVsaW5lLAorICAgICAgICAgICAg
ICAgcGlwZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdCwKKyAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisgICAgICAgICAgbUZ1bmNN
b2RpZmllZFRvT3JpZ2luYWwoZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICB9CisKKyAgICBj
b25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rp
b24gJnBpcGVsaW5lRnVuYykKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZUZ1bmMuaXNNYWlu
KCkgJiYgKG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklu
TWFpbigpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxp
bmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIHJldHVybiAq
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lRnVuYy5nZXRQYXJhbUNvdW50
KCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiAqcGlwZWxpbmVGdW5jLmdldFBhcmFtKDApOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtYWluRnVuYy5pc01haW4oKSk7CisgICAgICAgIGlmIChtUGlwZWxpbmVNYWluTG9jYWxW
YXIuZXh0ZXJuYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lTWFp
bkxvY2FsVmFyLmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAg
ICAgICAgcmV0dXJuICptYWluRnVuYy5nZXRQYXJhbSgwKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNhbGxOb2RlLmlzQ29uc3RydWN0b3Io
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRD
YWxsZWRGdW5jID0gKmNhbGxOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1F
bnYuaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVk
RnVuY3Rpb24ob2xkQ2FsbGVkRnVuYyk7CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAq
b2xkT3duZXJGdW5jID0gZ2V0UGFyZW50RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChv
bGRPd25lckZ1bmMpOworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdPd25lckZ1bmMg
PSBtRW52LmdldFVwZGF0ZWRGdW5jdGlvbigqb2xkT3duZXJGdW5jKTsKKworICAgICAgICAgICAg
cmV0dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAg
ICAgICAgbmV3Q2FsbGVkRnVuYywgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbE5vZGUuZ2V0U2VxdWVuY2UoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1F
bnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAg
ICBpZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY1Byb3RvTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm5ld0Z1
bmNQcm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2aXNpdE1haW4oZnVuY0RlZk5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZp
c2l0Tm9uTWFpbihmdW5jRGVmTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJt
Tm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2Rl
KQorICAgIHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2Rl
ID0gKmZ1bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVCgh
ZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7CisKKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYu
Y3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBp
ZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY0RlZk5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBURnVuY3Rpb24g
JmZ1bmMgPSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJU
KCFmdW5jLmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVm
Tm9kZS5nZXRCb2R5KCk7CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9k
ZSAmdmlzaXRNYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAg
IHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1
bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVChmdW5jUHJv
dG9Ob2RlLmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5jcmVhdGVV
cGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlmIChuZXdG
dW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jRGVmTm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9
ICpuZXdGdW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5p
c01haW4oKSk7CisKKyAgICAgICAgYXV0byBjYWxsTW9kaWZpZWRUb09yaWdpbmFsID0gWyZdKFRJ
bnRlcm1CbG9jayAmYm9keSkgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2Nh
bFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICBpZiAoIW1QaXBlbGluZS5pc1BpcGVsaW5lT3V0
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRU
b09yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2wo
JmdldEV4dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7CisgICAgICAgICAgICAgICAgYXV0
byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7
CisgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6
Q3JlYXRlRnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bSwgb30pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBhdXRvIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQgPSBbJl0oVElu
dGVybUJsb2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdpbmFsVG9N
b2RpZmllZCk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgYXV0byAqbSA9
IG5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOwor
ICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNy
ZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jT3JpZ2luYWxUb01v
ZGlmaWVkLCBuZXcgVEludGVybVNlcXVlbmNle28sIG19KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgVEludGVybUJsb2NrICpib2R5ID0gZnVuY0RlZk5vZGUuZ2V0Qm9k
eSgpOworCisgICAgICAgIGlmIChtUGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxl
RGVjbGFyYXRpb25Jbk1haW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworCisgICAgICAgICAgICBhdXRvICpu
ZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5k
U3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlu
dGVybmFsfSk7CisKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxp
bmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBzdHJ1Y3QgaW5zdGFuY2Ug
d2l0aCByZWZlcmVuY2VzIHRvIGdsb2JhbCBwaXBlbGluZSB2YXJpYWJsZXMuCisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFs
LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
KnZhciAgICAgICAgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCks
IGZpZWxkLT50eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnN5
bWJvbCAgICAgPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICAgICAgICAgICAgICBh
dXRvICZhY2Nlc3NOb2RlID0gQWNjZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCwgdmFyLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2Rl
ID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBz
eW1ib2wpOworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYXNz
aWduTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBp
cGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKworICAgICAgICAgICAgICAgIEFTU0VS
VChmdW5jLmdldFBhcmFtQ291bnQoKSA+PSAyICogZmllbGRzLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
ZmllbGRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZ0ZXh0dXJlUGFyYW0gPSAqZnVuYy5nZXRQYXJhbShwYXJhbUluZGV4KyspOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnNhbXBsZXJQYXJhbSA9ICpmdW5jLmdl
dFBhcmFtKHBhcmFtSW5kZXgrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnbyA9IFsm
XShUSW50ZXJtVHlwZWQgJmVudiwgY29uc3QgaW50ICppbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkICZ0ZXh0dXJlRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4
KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkICZzYW1wbGVyRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1tdXRh
YmxlU3RyaW5nKCJzYW1wbGVyIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1r
QXNzaWduID0gWyZdKFRJbnRlcm1UeXBlZCAmZmllbGQsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnko
VE9wZXJhdG9yOjpFT3BBc3NpZ24sICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lKCJhZGRyZXNzb2YiKSwgZmllbGQuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JkFjY2Vzc0luZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBpbmRl
eCl9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxkLCB0ZXh0
dXJlUGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRl
bWVudChta0Fzc2lnbihzYW1wbGVyRmllbGQsIHNhbXBsZXJQYXJhbSkpOworICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZW52ID0gQWNj
ZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwgZmllbGQtPm5hbWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZlbnZUeXBlID0gZW52LmdldFR5cGUo
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZW52VHlwZS5pc0FycmF5KCkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5p
c0FycmF5T2ZBcnJheXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIG4g
PSBzdGF0aWNfY2FzdDxpbnQ+KGVudlR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvKGVudiwgJmkp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ28oZW52LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFy
eSgKKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BBc3NpZ24sCisgICAgICAgICAg
ICAgICAgICAgICZBY2Nlc3NGaWVsZEJ5SW5kZXgoKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgJkFz
VHlwZShtU3ltYm9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoZnVuYykpKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnttUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWx9KTsKKyAgICAgICAgICAgICAgICBj
YWxsTW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworCisgICAgICAgICAgICBpZiAo
IW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50
ZXJtQnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcFJldHVybiwgbmV3
IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7Cisg
ICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKworICAg
ICAgICAgICAgYXV0byAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAg
IG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworICAgICAgICAgICAgY2FsbE1vZGlmaWVkVG9Pcmln
aW5hbCgqbmV3Qm9keSk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9k
eSk7CisgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAg
ICAgICAgIGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9
Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFVwZGF0ZVBpcGVsaW5lU3lt
Ym9scyhQaXBlbGluZTo6VHlwZSBwaXBlbGluZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJpYWJsZVNldCAm
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUVmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2FsVmFyKQoreworICAgIGF1dG8gbWFwID0g
WyZdKGNvbnN0IFRGdW5jdGlvbiAqb3duZXIsIFRJbnRlcm1TeW1ib2wgJnN5bWJvbCkgLT4gVElu
dGVybU5vZGUgJiB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlh
YmxlKCk7CisgICAgICAgIGlmIChwaXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IHBpcGVs
aW5lVmFyaWFibGVzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9s
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqc3RydWN0SW5zdGFuY2VWYXI7CisgICAgICAgIGlmIChvd25lci0+aXNNYWluKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5h
bCk7CisgICAgICAgICAgICBzdHJ1Y3RJbnN0YW5jZVZhciA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG93bmVyLT5nZXRQYXJhbUNvdW50KCkgPiAwKTsKKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChzdHJ1Y3RJbnN0YW5jZVZhcik7CisgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3Ry
dWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworICAgIH07CisgICAgcmV0dXJuIE1hcFN5bWJv
bHMoY29tcGlsZXIsIHJvb3QsIG1hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
K2Jvb2wgUmV3cml0ZVBpcGVsaW5lKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAm
aWRHZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUU3RydWN0dXJlPiAmb3V0U3RydWN0KQoreworICAgIEFTU0VSVChvdXRTdHJ1
Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0g
Y29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBwc2k7
CisgICAgaWYgKCFHZW5lcmF0ZVBpcGVsaW5lU3RydWN0OjpFeGVjKHBzaSwgY29tcGlsZXIsIHJv
b3QsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHNpLmlzRW1wdHkoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVG
dW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZh
cmlhYmxlICZ2YXIpIHsKKyAgICAgICAgcmV0dXJuIHBzaS5waXBlbGluZVZhcmlhYmxlcy5maW5k
KCZ2YXIpICE9IHBzaS5waXBlbGluZVZhcmlhYmxlcy5lbmQoKTsKKyAgICB9KTsKKworICAgIGF1
dG8gcGlwZWxpbmVNYWluTG9jYWxWYXIgPQorICAgICAgICBDcmVhdGVQaXBlbGluZU1haW5Mb2Nh
bFZhcihzeW1ib2xUYWJsZSwgcGlwZWxpbmUsIHBzaS5waXBlbGluZVN0cnVjdCk7CisKKyAgICBp
ZiAoIVVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zOjpUaHJlYWRQaXBlbGluZSgKKyAgICAgICAgICAg
IGNvbXBpbGVyLCByb290LCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBzaS5waXBlbGlu
ZVN0cnVjdCwgcGlwZWxpbmVNYWluTG9jYWxWYXIsCisgICAgICAgICAgICBpZEdlbiwgc3ltYm9s
RW52LCBwc2kuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2lu
YWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGlw
ZWxpbmUuZ2xvYmFsSW5zdGFuY2VWYXIpCisgICAgeworICAgICAgICBpZiAoIVVwZGF0ZVBpcGVs
aW5lU3ltYm9scyhwaXBlbGluZS50eXBlLCBjb21waWxlciwgcm9vdCwgc3ltYm9sRW52LCBwc2ku
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFQcnVuZU5vT3BzKCZjb21waWxlciwgJnJv
b3QsICZjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBvdXRTdHJ1Y3QgPSBwc2kucGlwZWxpbmVTdHJ1Y3Q7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6
UmV3cml0ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZh
bmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlh
bnRzICZpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVj
dHMgJm91dFN0cnVjdHMpCit7CisgICAgc3RydWN0IEluZm8KKyAgICB7CisgICAgICAgIFBpcGVs
aW5lOjpUeXBlIHBpcGVsaW5lVHlwZTsKKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVy
ZT4gJm91dFN0cnVjdDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZh
cjsKKyAgICB9OworCisgICAgSW5mbyBpbmZvc1tdID0geworICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6Okluc3RhbmNlSWQsIG91dFN0cnVjdHMuaW5zdGFuY2VJZCwgbnVsbHB0cn0sCisgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpOb25Db25zdGFudEdsb2JhbHMsIG91dFN0cnVjdHMu
bm9uQ29uc3RhbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpB
bmdsZVVuaWZvcm1zLCBvdXRTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMsICZhbmdsZVVuaWZvcm1zR2xv
YmFsSW5zdGFuY2VWYXJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywg
b3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6OlZlcnRleEluLCBvdXRTdHJ1Y3RzLnZlcnRleEluLCBudWxscHRyfSwKKyAgICAgICAge1Bp
cGVsaW5lOjpUeXBlOjpWZXJ0ZXhPdXQsIG91dFN0cnVjdHMudmVydGV4T3V0LCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50
SW4sIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50T3V0LCBvdXRT
dHJ1Y3RzLmZyYWdtZW50T3V0LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJ
bnZvY2F0aW9uVmVydGV4R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uVmVydGV4R2xvYmFs
cywgbnVsbHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50
R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwK
KyAgICB9OworCisgICAgZm9yIChJbmZvICZpbmZvIDogaW5mb3MpCisgICAgeworICAgICAgICBQ
aXBlbGluZSBwaXBlbGluZXtpbmZvLnBpcGVsaW5lVHlwZSwgaW5mby5nbG9iYWxJbnN0YW5jZVZh
cn07CisgICAgICAgIGlmICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwg
cGlwZWxpbmUsIHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5vdXRTdHJ1Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBp
cGVsaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MWJhODJiNGU5Njc3ZDJjMjk3NGY5MTRiN2UzNDgwYjBl
ODliNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUaGlzIHJld3JpdGVzIGFsbCBw
aXBlbGluZXMuCisvLworLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisvLyAgICAtIERpc2NvdmVyIGFs
bCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKy8vICAgIC0gTW92ZSB0
aGUgdmFyaWFibGVzIGludG8gYW4gaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGluc3RhbmNlIGFu
ZCB1cGRhdGUgb2xkIHZhcmlhYmxlcyB0byBiZQorLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisvLyAgICAtIERlcGVuZGVuY3kgaW5qZWN0IHRoZSBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1
Y3QgdG8gYWxsIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB2YXJpYWJsZXMgZnJvbQorLy8gICAgICB0
aGUgc3RydWN0LgorLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3Jl
YXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisvLyAg
ICAgIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3RzIGFyZSB0aGUgc2FtZS4K
Ky8vICAgIC0gQWRkIGBtYWluYCBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlIGZvciB0aGUgZXh0
ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGFzIG5lZWRlZC4KKy8vICAgIC0gSW5zaWRlIGBtYWluYCwg
bWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRp
ZmZlciBhbmQgaXMgcHJvdmlkZWQKKy8vICAgICAgYXMgYSBwYXJhbWV0ZXIgdG8gYG1haW5gLgor
Ly8gICAgLSBJbnNpZGUgYG1haW5gLCBtYXAgdGhlIGludGVybmFsIHN0cnVjdCB0byB0aGUgZXh0
ZXJuYWwgc3RydWN0IGlmIHRoZXkgZGlmZmVyIGFuZCBpcyByZXR1cm5lZAorLy8gICAgICBmcm9t
IGBtYWluYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlUGlwZWxpbmVzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
ZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0cyAm
b3V0U3RydWN0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTc3YzFhNTg1NTFiMzJjOWZmNmNkYzllN2JhZWIzOGNhODZiZGQyYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
CkBAIC0wLDAgKzEsMzc2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
QXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQXNOb2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50
ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCiti
b29sIElzT3V0UGFyYW0oY29uc3QgVFR5cGUgJnBhcmFtVHlwZSkKK3sKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNoIChxdWFs
KQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c1ZlY3RvckFjY2VzcyhUSW50ZXJtQmluYXJ5ICZiaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9w
ID0gYmluYXJ5LmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSA9IGJpbmFyeS5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVj
dG9yKCkgfHwgbGVmdFR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIEFTU0VSVChJc1NjYWxhckJhc2ljVHlwZShiaW5hcnkuZ2V0VHlwZSgp
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJc1ZlY3RvckFjY2VzcyhUSW50ZXJt
Tm9kZSAmbm9kZSkKK3sKKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBJc1ZlY3RvckFjY2VzcygqYmluKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEaWZmZXJzIGZyb20gSXNBc3NpZ25tZW50IGluIHRo
YXQgaXQgZG9lcyBub3QgaW5jbHVkZSAoKyspIG9yICgtLSkuCitib29sIElzQXNzaWduRXF1YWxz
U2lnbihUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0
aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIE9u
bHkgaW5jbHVkZXMgKCQ9KSBzdHlsZSBhc3NpZ25zLCB3aGVyZSAoJCkgaXMgYSBiaW5hcnkgb3Au
Citib29sIElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
CisgICAgeworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UmV0dXJuc1JlZmVyZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2Nh
bGFyQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERl
Y3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3Vu
ZEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBu
b2RlLmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAg
ICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNz
aWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgICAg
IG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAgICAgb3AgPSBU
T3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6
RU9wQml0d2lzZU9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBMT0dJQ19FUlJPUigpOworICAgIH0KKworICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBh
cmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisgICAgLy8g
VGhpcyBhc3N1bXB0aW9uIGFsbG93cyB0aGlzIGNvZGUgdG8gbm90IG5lZWQgdG8gaW50cm9kdWNl
IHRlbXBvcmFyaWVzLgorICAgIC8vCisgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJv
dXQ6CisgICAgLy8gICAgICB2ZWNbaGFzU2lkZUVmZmVjdCgpXSAqPSA0CisgICAgLy8gYmVjb21p
bmcKKyAgICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3Qo
KV0gKiA0CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7CisgICAg
VEludGVybVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICByZXR1cm4gKm5ldyBU
SW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBsZWZ0LT5kZWVwQ29weSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkob3AsIGxlZnQsIHJp
Z2h0KSk7Cit9CisKK2NsYXNzIFJld3JpdGVyMSA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorewor
ICBwdWJsaWM6CisgICAgUmV3cml0ZXIxKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJl
YnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJp
bmFyeVBvc3QoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYg
KElzQ29tcG91bmRBc3NpZ24ob3ApKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGVmdC5n
ZXRBc1N3aXp6bGVOb2RlKCkgfHwgSXNWZWN0b3JBY2Nlc3MobGVmdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5h
cnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluYXJ5
Tm9kZTsKKyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlcjIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7Cisg
ICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworCisgIHByaXZhdGU6CisgICAgYm9vbCByZXF1aXJl
c0FkZHJlc3NpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1SZXF1aXJlc0FkZHJlc3Np
bmdTdGFjay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5iYWNrKCk7
CisgICAgfQorCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIyKCkgb3ZlcnJpZGUgeyBBU1NFUlQo
bVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRlcjIoVENv
bXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAg
ICB7fQorCisgICAgUHJlUmVzdWx0IHZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUg
JmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24g
KmZ1bmMgPSBhZ2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0K
KworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1
ZW5jZSgpOworICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7
CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlID0gcGFyYW0uZ2V0VHlwZSgpOwor
ICAgICAgICAgICAgVEludGVybU5vZGUgKmFyZyAgICAgICA9IGFyZ3NbaV07CisgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKworICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1
c2hfYmFjayhJc091dFBhcmFtKHBhcmFtVHlwZSkpOworICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJnc1tpXSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKTsKKyAgICAg
ICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAg
IH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dp
enpsZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJlcXVpcmVzQWRkcmVzc2lu
ZygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3dpenpsZU5vZGU7CisgICAgICAg
IH0KKworICAgICAgICBUSW50ZXJtVHlwZWQgJnZlY05vZGUgICAgICAgICA9ICpzd2l6emxlTm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXJMaXN0ICZvZmZzZXRzID0g
c3dpenpsZU5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKTsKKyAgICAgICAgQVNTRVJUKCFvZmZzZXRz
LmVtcHR5KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0cy5zaXplKCkgPD0gNCk7CisKKyAgICAg
ICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgICAgIGFyZ3MucmVz
ZXJ2ZShvZmZzZXRzLnNpemUoKSArIDEpOworICAgICAgICBhcmdzLnB1c2hfYmFjaygmdmVjTm9k
ZSk7CisgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFyZ3MucHVzaF9iYWNrKG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0
YW50VW5pb24ob2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUo
InN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJncyk7CisgICAgfQorCisg
ICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLmdl
dE9wKCk7CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0FjY2VzcyA9IElzVmVjdG9yQWNjZXNzKGJp
bmFyeU5vZGUpOworCisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNS
ZWZlcmVuY2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3NpbmcoKTsKKyAgICAgICAgY29uc3QgYm9v
bCBkaXNhYmxlTGVmdCAgPSBkaXNhYmxlVG9wOworICAgICAgICBjb25zdCBib29sIGRpc2FibGVS
aWdodCA9IGRpc2FibGVUb3AgfHwgaXNBY2Nlc3MgfHwgSXNBc3NpZ25FcXVhbHNTaWduKG9wKTsK
KworICAgICAgICBhdXRvIHRyYXZlcnNlID0gWyZdKFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3Qg
Ym9vbCBkaXNhYmxlKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgICAgICBpZiAoZGlzYWJs
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3Rh
Y2sucHVzaF9iYWNrKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gKm5l
d05vZGUgPSBhc05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChuZXdOb2RlKTsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworICAg
ICAgICB9OworCisgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgJnJpZ2h0Tm9kZSA9ICpiaW5hcnlOb2Rl
LmdldFJpZ2h0KCk7CisKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNl
KGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmbmV3UmlnaHQg
PSB0cmF2ZXJzZShyaWdodE5vZGUsIGRpc2FibGVSaWdodCk7CisKKyAgICAgICAgaWYgKCFpc0Fj
Y2VzcyB8fCBkaXNhYmxlVG9wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoJmxlZnROb2Rl
ID09ICZuZXdMZWZ0ICYmICZyaWdodE5vZGUgPT0gJm5ld1JpZ2h0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiB7JmJpbmFyeU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShv
cCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgi
ZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmbmV3TGVmdCwg
Jm5ld1JpZ2h0fSksCisgICAgICAgICAgICAgICAgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9
Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAg
ICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghUmV3cml0ZXIyKGNvbXBpbGVyLCBz
eW1ib2xFbnYpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5h
ZGRyZXNzYWJsZVJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2RhOTg0M2ViMmU2MDdlZWNjNjkw
ZmNlYzE2MmM2MjdhNjFiN2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RVVOQUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBHaXZlbjoKKy8vICAgdm9pZCBmb28o
b3V0IHgpOworLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgdG8gYmUgbGVnYWwg
aW4gR0xTTCBidXQgbm90IGluIE1ldGFsOgorLy8gICBmb28oZXhwcmVzc2lvbik7CisvLyBUaGlz
IGNhbiBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6
bGUgb3IgdmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorLy8gVGhpcyByZXdyaXRlIGZ1bmN0aW9uYWxp
dHkgaW50cm9kdWNlcyB0ZW1wb3JhcmllcyB0aGF0IHNlcnZlIGFzIHByb3hpZXMgdG8gYmUgcGFz
c2VkIHRvIHRoZQorLy8gb3V0L2lub3V0IHBhcmFtZXRlcnMgYXMgbmVlZGVkLiBUaGUgY29ycmVz
cG9uZGluZyBleHByZXNzaW9ucyBnZXQgcG9wdWxhdGVkIHdpdGggdGhlaXIKKy8vIHByb3hpZXMg
YWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFVU5BRERS
RVNTQUJMRVJFRkVSRU5DRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHBy
ZXNzaW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3YjM3M2QzMWIyMjkzYWIwODQ5NTJkNDhmMjE5ODFl
MzViZWY0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8
dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Jvb2wgSXNJbmRleChU
T3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4
RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNJbmRleChUSW50ZXJtVHlwZWQgJmV4cHIp
Cit7CisgICAgaWYgKGF1dG8gKmJpbmFyeSA9IGV4cHIuZ2V0QXNCaW5hcnlOb2RlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhwci5nZXRBc1N3aXp6bGVOb2RlKCk7Cit9CisKK2Jvb2wgVmlld0JpbmFyeUNoYWlu
KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkICZub2RlLCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlw
ZWQgKj4gJm91dCkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBub2RlLmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgIGlmICghYmluYXJ5IHx8IGJpbmFyeS0+Z2V0T3AoKSAhPSBvcCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKmxl
ZnQgID0gYmluYXJ5LT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpyaWdodCA9IGJpbmFy
eS0+Z2V0UmlnaHQoKTsKKworICAgIGlmICghVmlld0JpbmFyeUNoYWluKG9wLCAqbGVmdCwgb3V0
KSkKKyAgICB7CisgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYg
KCFWaWV3QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkKKyAgICB7CisgICAgICAgIG91dC5w
dXNoX2JhY2socmlnaHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZl
Y3RvcjxUSW50ZXJtVHlwZWQgKj4gVmlld0JpbmFyeUNoYWluKFRJbnRlcm1CaW5hcnkgJm5vZGUp
Cit7CisgICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluOworICAgIFZpZXdCaW5h
cnlDaGFpbihub2RlLmdldE9wKCksIG5vZGUsIGNoYWluKTsKKyAgICBBU1NFUlQoY2hhaW4uc2l6
ZSgpID49IDIpOworICAgIHJldHVybiBjaGFpbjsKK30KKworY2xhc3MgUHJlUGFzcyA6IHB1Ymxp
YyBUSW50ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgUHJlUGFzcyhUQ29tcGlsZXIgJmNv
bXBpbGVyKSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSB7fQorCisgIHBy
aXZhdGU6CisgICAgLy8gQ2hhbmdlIGNoYWlucyBvZgorICAgIC8vICAgICAgeCBPUCB5IE9QIHoK
KyAgICAvLyB0bworICAgIC8vICAgICAgeCBPUCAoeSBPUCB6KQorICAgIC8vIHJlZ2FyZGxlc3Mg
b2Ygb3JpZ2luYWwgcGFyZW50aGVzaXphdGlvbi4KKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2Np
YXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCAgICAgICAgICAgICAgICA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqcmVzdWx0ID0gY2hhaW4uYmFjaygpOworICAgICAgICBjaGFpbi5w
b3BfYmFjaygpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKworICAgICAgICBjb25zdCBhdXRv
IGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGF1dG8gZW5kICAgPSBjaGFp
bi5yZW5kKCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVR5cGVkICpwYXJ0ID0gKml0
ZXI7CisgICAgICAgICAgICBBU1NFUlQocGFydCk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAq
dGVtcCA9IHJlYnVpbGQoKnBhcnQpLnNpbmdsZSgpOworICAgICAgICAgICAgQVNTRVJUKHRlbXAp
OworICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIEFT
U0VSVChwYXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBw
YXJ0LCByZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0K
KworICBwcml2YXRlOgorICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5
ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gbm9k
ZS5nZXRPcCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8
IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4ge3JlYXNzb2NpYXRlUmlnaHQobm9kZSksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworY2xhc3MgU2VwYXJhdG9y
IDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPj4gbVN0bXRzU3RhY2s7CisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVj
bGFyYXRpb24gKj4+IG1CaW5kaW5nTWFwU3RhY2s7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJ
bnRlcm1UeXBlZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PFRJbnRlcm1EZWNsYXJhdGlvbiAqPiBtTWFza2VkRGVjbHM7CisKKyAgcHVibGljOgor
ICAgIFNlcGFyYXRvcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudiwg
SWRHZW4gJmlkR2VuKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0
cnVlKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICB+U2VwYXJhdG9yKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNT
RVJUKG1FeHByTWFwLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5l
bXB0eSgpKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmZ2V0Q3VyclN0bXRzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2su
ZW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtU3RtdHNTdGFjay5iYWNrKCk7CisgICAgfQorCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRp
b24gKj4gJmdldEN1cnJCaW5kaW5nTWFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRp
bmdNYXBTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1CaW5kaW5nTWFwU3RhY2suYmFj
aygpOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0bXQoVEludGVybU5vZGUgJm5vZGUpIHsgZ2V0
Q3VyclN0bXRzKCkucHVzaF9iYWNrKCZub2RlKTsgfQorCisgICAgYm9vbCBpc1Rlcm1pbmFsRXhw
cihUSW50ZXJtTm9kZSAmbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlID0g
Z2V0Tm9kZVR5cGUobm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqcHVsbE1hcHBlZEV4cHIoVEludGVybVR5cGVk
ICpub2RlLCBib29sIGFsbG93QmFja3RyYWNrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVk
ICpleHByOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZp
bmQobm9kZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtRXhwck1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBBU1NFUlQoZXhwcik7CisgICAgICAgICAgICBtRXhwck1hcC5lcmFzZShp
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd0JhY2t0cmFjaykKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byAmYmluZGluZ01hcCA9IGdldEN1cnJCaW5kaW5nTWFwKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoVEludGVybVN5bWJvbCAqc3ltYm9sID0gZXhwci0+Z2V0QXNTeW1i
b2xOb2RlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ2YXIgPSBzeW1ib2wtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyICAg
ICAgICAgICAgPSBiaW5kaW5nTWFwLmZpbmQoJnZhcik7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAg
ICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworICAgICAgICAgICAgICAgIGV4cHIgPSBWaWV3
RGVjbGFyYXRpb24oKmRlY2wpLmluaXRFeHByOworICAgICAgICAgICAgICAgIEFTU0VSVChleHBy
KTsKKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAg
ICAgIG1NYXNrZWREZWNscy5pbnNlcnQoZGVjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhbmRhbG9uZUV4
cHIoVEludGVybVR5cGVkICZleHByKQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudE5vZGUo
KS0+Z2V0QXNCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwci5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0g
VEJhc2ljVHlwZTo6RWJ0Vm9pZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZu
ZXdFeHByKQorICAgIHsKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZUV4cHIobmV3RXhwcikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5ld0V4cHIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChJc0luZGV4KG5ld0V4cHIpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJp
bmRpbmdNYXAoKTsKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lICA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5z
eW1ib2xUeXBlKCkpOworICAgICAgICBhdXRvICpkZWNsID0gbmV3IFRJbnRlcm1EZWNsYXJhdGlv
bih2YXIsICZuZXdFeHByKTsKKyAgICAgICAgcHVzaFN0bXQoKmRlY2wpOworICAgICAgICBtRXhw
ck1hcFsmb2xkRXhwcl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICBiaW5kaW5n
TWFwW3Zhcl0gICAgPSBkZWNsOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0YWNrcygpCisgICAg
eworICAgICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgbUJpbmRpbmdN
YXBTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFN0YWNrcygpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisgICAgICAg
IEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFj
ay5iYWNrKCkuZW1wdHkoKSk7CisgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsK
KyAgICAgICAgbVN0bXRzU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hT
dG10c0ludG9CbG9jayhUSW50ZXJtQmxvY2sgJmJsb2NrLCBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmc3RtdHMpCisgICAgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9j
ay5nZXRTZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBz
dG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1NYXNrZWREZWNscy5maW5kKGRlY2wpOworICAgICAgICAgICAgICAg
IGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1NYXNrZWREZWNscy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRl
cm1CbG9jayAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKGNvbnN0IFRWYXJpYWJsZSAmdmFyLCBU
SW50ZXJtVHlwZWQgJm5ld0V4cHIpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7CisgICAgICAgIHBvcFN0
YWNrcygpOworCisgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgYXV0byAmc2VxICAgPSAqYmxvY2suZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgc2VxLnJl
c2VydmUoMSArIHN0bXRzLnNpemUoKSk7CisgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9j
aywgc3RtdHMpOworICAgICAgICBzZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBuZXcgVEludGVybVN5bWJvbCgmdmFyKSwgJm5ld0V4cHIpKTsKKwor
ICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0
IHZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcHVzaFN0YWNrcygpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0
UmVzdWx0IHZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdl
dEN1cnJTdG10cygpKTsKKyAgICAgICAgcG9wU3RhY2tzKCk7CisKKyAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEuY2xlYXIoKTsK
KyAgICAgICAgc2VxLnJlc2VydmUoc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50
b0Jsb2NrKG5vZGUsIHN0bXRzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50ID0gZ2V0
UGFyZW50Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0
aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IERlY2xhcmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7CisgICAgICAgIGlmICgh
ZGVjbC5pbml0RXhwciB8fCBpc1Rlcm1pbmFsRXhwcigqZGVjbC5pbml0RXhwcikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOwor
ICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xh
cmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCA9
IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgQVNTRVJUKGRlY2wuc3ltYm9sLnZhcmlh
YmxlKCkuc3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgQVNTRVJU
KCFkZWNsLnN5bWJvbC52YXJpYWJsZSgpLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXRFeHByID0gcHVsbE1hcHBlZEV4cHIoZGVj
bC5pbml0RXhwciwgdHJ1ZSk7CisgICAgICAgIGlmIChkZWNsLmluaXRFeHByID09IG5ld0luaXRF
eHByKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gJm5ld05vZGUgPSAqbmV3
IFRJbnRlcm1EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJh
dG9yKAorICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSwgJmRlY2wuc3ltYm9sLCBuZXdJbml0RXhwcikpOworICAgICAgICAgICAgcHVzaFN0
bXQobmV3Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisg
ICAgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQo
KTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwg
ZmFsc2UpOworICAgICAgICBpZiAoZXhwciA9PSBuZXdFeHByKQorICAgICAgICB7CisgICAgICAg
ICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXcgVEludGVybVVuYXJ5
KG5vZGUuZ2V0T3AoKSwgbmV3RXhwciwgbm9kZS5nZXRGdW5jdGlvbigpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6
OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisKKyAgICAg
ICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworICAgICAgICAg
ICAgQVNTRVJUKGxlZnRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAgICBwdXNoU3RhY2tz
KCk7CisgICAgICAgICAgICBQb3N0UmVzdWx0IHJpZ2h0UmVzdWx0ID0gcmVidWlsZCgqcmlnaHQp
OworICAgICAgICAgICAgQVNTRVJUKHJpZ2h0UmVzdWx0LnNpbmdsZSgpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OlBvc3R9OworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVElu
dGVybUJpbmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRv
ciBvcCA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSAmJiBnZXRQYXJlbnROb2RlKCktPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVj
bGFyYXRpb25Qb3N0CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAgICBpZiAob3AgPT0gVE9w
ZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3
TmFtZSgiIik7CisgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Qm9vbCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3ltYm9sVHlwZSgpKTsK
KworICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCAgID0gcHVsbE1hcHBlZEV4cHIo
cmlnaHQsIHRydWUpOworICAgICAgICAgICAgVEludGVybUJsb2NrICpyaWdodEJsb2NrID0gJmJ1
aWxkQmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3UmlnaHQpOworICAgICAgICAgICAgVElu
dGVybVR5cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7Cisg
ICAgICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uZCA9IG5ldyBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90LCBjb25kLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCBuZXdMZWZ0KSk7CisgICAg
ICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVs
bHB0cikpOworICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3lt
Ym9sKHZhcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3TGVmdCAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0
LCBmYWxzZSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3UmlnaHQgPSBwdWxsTWFwcGVkRXhw
cihyaWdodCwgaXNBc3NpZ24pOworCisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENv
bW1hKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpuZXdOb2RlOworICAgICAgICAgICAg
aWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBuZXdOb2RlID0gJm5vZGU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdFRlcm5hcnlQcmUo
VEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBQb3N0UmVzdWx0
IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUKGNvbmRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFja3MoKTsKKyAgICAg
ICAgUG9zdFJlc3VsdCB0aGVuUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRUcnVlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKHRoZW5SZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1
c2hTdGFja3MoKTsKKyAgICAgICAgUG9zdFJlc3VsdCBlbHNlUmVzdWx0ID0gcmVidWlsZCgqbm9k
ZS5nZXRGYWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmds
ZSgpKTsKKworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb25kICA9IG5vZGUuZ2V0Q29u
ZGl0aW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdGhlbiAgPSBub2RlLmdldFRydWVFeHBy
ZXNzaW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZub2RlLmdldFR5cGUoKSwgbmFtZS5zeW1i
b2xUeXBlKCkpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBl
ZEV4cHIoZWxzZV8sIGZhbHNlKTsKKyAgICAgICAgVEludGVybUJsb2NrICplbHNlQmxvY2sgPSAm
YnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdFbHNlKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdUaGVuICAgPSBwdWxsTWFwcGVkRXhwcih0aGVuLCB0cnVlKTsKKyAgICAgICAg
VEludGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIs
ICpuZXdUaGVuKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25kICAgPSBwdWxsTWFwcGVk
RXhwcihjb25kLCB0cnVlKTsKKworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKyAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IHRoZW5CbG9jaywgZWxzZUJsb2NrKSk7CisgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihu
b2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRl
cm1TeW1ib2wodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmbm9kZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0
T3BlcmFuZCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhw
cihleHByLCBmYWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50
ZXJtU3dpenpsZShuZXdFeHByLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdn
cmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
Zm9yIChUSW50ZXJtTm9kZSAqJmFyZyA6IGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNTRVJU
KHRhcmcpOworICAgICAgICAgICAgYXJnID0gcHVsbE1hcHBlZEV4cHIodGFyZywgZmFsc2UpOwor
ICAgICAgICB9CisgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0
aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFnZXRQYXJl
bnRGdW5jdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlz
aXRDYXNlUHJlKFRJbnRlcm1DYXNlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KFRJbnRlcm1UeXBlZCAqY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworICAgICAgICB9CisgICAg
ICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVp
dGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3
aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdCAg
ICA9IG5vZGUuZ2V0SW5pdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxs
TWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisgICAgICAgIGlmIChpbml0ID09IG5ld0luaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtU3dpdGNo
KG5ld0luaXQsIG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpKSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENv
bmRpdGlvbigpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBwdWxsTWFwcGVkRXhw
cihjb25kLCBmYWxzZSk7CisgICAgICAgIGlmIChjb25kID09IG5ld0NvbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IG5vZGUuZ2V0VHJ1ZUJsb2NrKCksIG5vZGUuZ2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJyYW5j
aFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgICAgICBUSW50ZXJt
VHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBmYWxzZSk7CisgICAgICAgIGlm
IChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0
bXQoKm5ldyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4cHIpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRM
b29wUHJlKFRJbnRlcm1Mb29wICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBM
T0dJQ19FUlJPUigpOworICAgICAgICB9CisgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJl
c3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLmdldFR5cGUo
KTsKKyAgICAgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFRoZXNlIHNob3VsZCBiZSBzY3J1YmJl
ZCBmcm9tIEFTVCBiZWZvcmUgcmV3cml0ZXIgaXMgY2FsbGVkLgorICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpTZXBhcmF0
ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmIChyZWFk
Qm9vbEVudlZhcigiR01UX0RJU0FCTEVfU0VQQVJBVEVfQ09NUE9VTkRfRVhQUkVTU0lPTlMiKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghU2ltcGxpZnlM
b29wQ29uZGl0aW9ucygmY29tcGlsZXIsICZyb290LCAmY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFQcmVQ
YXNzKGNvbXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRvcihjb21waWxlciwgc3ltYm9sRW52LCBp
ZEdlbikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3Vu
ZEV4cHJlc3Npb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU0MGE1NTk2ODJhZGRlYzliNmE1MDAwNzJhNjBj
M2QwNjFkYjRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRF
WFBSRVNTSU9OU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUcmFuc2Zvcm1zIGNvZGUg
dG8gKHVzdWFsbHkpIGhhdmUgbW9zdCBvbmUgbm9uLXRlcm1pbmFsIGV4cHJlc3Npb24gcGVyIHN0
YXRlbWVudC4KKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRv
IHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisvLworLy8g
ZS5nLgorLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKy8vIGJlY29tZXMKKy8vICAg
IGF1dG8gXzEgPSBiYXIoKTsKKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworLy8gICAgYXV0
byBfMyA9IDYgKyBfMjsKKy8vICAgIGludCB4ID0gXzM7CisvLworLy8gV0FSTklORzoKKy8vICAg
IC0gVGhpcyBkb2VzIG5vdCByZXdyaXRlIG9iamVjdCBpbmRleGluZyBvcGVyYXRvcnMgYXMgYSB3
aG9sZSAoZS5nLiBmb28ueCwgZm9vW3hdKSwgYnV0IHdpbGwKKy8vICAgICAgcmV3cml0ZSB0aGUg
YXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKy8vICAgICAgZS5n
LgorLy8gICAgICAgIGZvbyhnZXRWZWMoKVtpICsgMl0gKyAxKTsKKy8vICAgICAgYmVjb21lcwor
Ly8gICAgICAgIGF1dG8gXzEgPSBnZXRWZWMoKTsKKy8vICAgICAgICBhdXRvIF8yID0gaSArIDI7
CisvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9yIHJlbWFp
bnMgaW4gKCspIGV4cHIgaGVyZS4KKy8vICAgICAgICBmb28oXzMpOworLy8KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfU0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJh
OGM2ZDEyMGIwYjQ1MjIwNjk0YmZiYjY3NGYwZGJjM2QwYzIxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApAQCAt
MCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBTZXBh
cmF0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2VwYXJh
dG9yKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwg
ZmFsc2UsIHRydWUsICZzeW1ib2xUYWJsZSkge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlv
bihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBU
SW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAg
IGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3lt
Ym9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAg
ICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJv
bFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RT
cGVjaWZpZXIoKSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUu
Z2V0U3RydWN0KCk7CisgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAg
ID0gbmV3IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUoc3Ry
dWN0dXJlLCB0cnVlKSwgU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAgICAgICAgICAgICAgYXV0
byAqaW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlVHlwZS0+c2V0UXVhbGlmaWVyKHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gKmluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShtU3ltYm9s
VGFibGUsIHZhci5uYW1lKCksIGluc3RhbmNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSByZXBsYWNlbWVudHM7CisgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RW
YXIpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJt
U3ltYm9sKGluc3RhbmNlVmFyKSk7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVF
bnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFNlcGFyYXRvciBzZXBhcmF0
b3IoY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC50cmF2ZXJzZSgmc2VwYXJh
dG9yKTsKKyAgICBpZiAoIXNlcGFyYXRvci51cGRhdGVUcmVlKCZjb21waWxlciwgJnJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVE
ZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Nl
cGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzEyZTgwZDhh
NTgxZTQ0ZTE5NmU4NjY0MzhmOWJjZTFkYTk0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDI0
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRTVFJVQ1RERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VO
RFNUUlVDVERFQ0xBUkFUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBz
aAoreworCisvLyBFeGFtcGxlOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfSBmb287CisvLyBC
ZWNvbWVzOgorLy8gIHN0cnVjdCBGb28ge2ludCB4OyB9OyBGb28gZm9vOworQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZj
b21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJB
VEVDT01QT1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NraXBwaW5nVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZjQ5ZGFkMjI1MmU0NjdhZDk3OTFhMTc1ODQwYjY4Y2UyMTYzYjcxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKQEAgLTAsMCAr
MSw0NyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKKy8vIEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZl
cnNpbmcgY2hpbGRlbiBieSBkZWZhdWx0LgorY2xhc3MgU2tpcHBpbmdUcmF2ZXJzZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2tpcHBpbmdUcmF2ZXJzZXIo
Ym9vbCBwcmVWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAg
ICAgICAgICAgICAgICAgICAgICBib29sIHBvc3RWaXNpdF8sCisgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogVEludGVy
bVRyYXZlcnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xUYWJsZSkK
KyAgICB7fQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5h
cnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQsIFRJbnRlcm1UZXJuYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdElm
RWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQ
UElOR1RSQVZFUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzUzZGFjZjJkNjg4Y2Jl
NjAxNTg4MDA2YWUyOTdmYWM0MTMwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1N5bWJvbEVudi5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0
ZXhwciBBZGRyZXNzU3BhY2Uga0FkZHJlc3NTcGFjZXNbXSA9IHsKKyAgICBBZGRyZXNzU3BhY2U6
OkNvbnN0YW50LAorICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorICAgIEFkZHJlc3NTcGFjZTo6
VGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqc2g6OnRvU3RyaW5nKEFkZHJlc3NTcGFjZSBzcGFj
ZSkKK3sKKyAgICBzd2l0Y2ggKHNwYWNlKQorICAgIHsKKyAgICAgICAgY2FzZSBBZGRyZXNzU3Bh
Y2U6OkNvbnN0YW50OgorICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7CisgICAgICAgIGNh
c2UgQWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgICAgICByZXR1cm4gImRldmljZSI7Cisg
ICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisgICAgICAgICAgICByZXR1cm4gInRo
cmVhZCI7CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBOYW1l
VG9TdHJ1Y3QgPSBzdGQ6Om1hcDxOYW1lLCBjb25zdCBUU3RydWN0dXJlICo+OworCitjbGFzcyBT
dHJ1Y3RGaW5kZXIgOiBUSW50ZXJtUmVidWlsZAoreworICAgIE5hbWVUb1N0cnVjdCBuYW1lVG9T
dHJ1Y3Q7CisKKyAgICBTdHJ1Y3RGaW5kZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBEZWNsYXJhdGlvbiBkZWNsICAgICA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYg
KHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgICAgIGNv
bnN0IE5hbWUgbmFtZSgqcyk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlIComeiA9IG5h
bWVUb1N0cnVjdFtuYW1lXTsKKyAgICAgICAgICAgIEFTU0VSVCgheik7CisgICAgICAgICAgICB6
ID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFBy
ZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJp
dHM6Ok5laXRoZXJ9OworICAgIH0KKworICBwdWJsaWM6CisgICAgc3RhdGljIE5hbWVUb1N0cnVj
dCBGaW5kU3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisg
ICAgeworICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKyAgICAgICAgaWYg
KCFmaW5kZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShmaW5kZXIubmFt
ZVRvU3RydWN0KTsKKyAgICB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUZW1w
bGF0ZUFyZzo6VGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSkgOiBtS2luZChLaW5kOjpCb29sKSwgbVZh
bHVlKHZhbHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVBcmcoaW50IHZhbHVlKSA6IG1L
aW5kKEtpbmQ6OkludCksIG1WYWx1ZSh2YWx1ZSkge30KKworVGVtcGxhdGVBcmc6OlRlbXBsYXRl
QXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisKK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhjb25zdCBUVHlwZSAmdmFsdWUpIDogbUtpbmQo
S2luZDo6VHlwZSksIG1WYWx1ZSh2YWx1ZSkge30KKworYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0
b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1LaW5kICE9
IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtpbmQ6OkJvb2w6CisgICAgICAg
ICAgICByZXR1cm4gbVZhbHVlLmIgPT0gb3RoZXIubVZhbHVlLmI7CisgICAgICAgIGNhc2UgS2lu
ZDo6SW50OgorICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5pID09IG90aGVyLm1WYWx1ZS5pOwor
ICAgICAgICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0g
b3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToKKyAgICAgICAgICAgIHJl
dHVybiAqbVZhbHVlLnQgPT0gKm90aGVyLm1WYWx1ZS50OworICAgIH0KK30KKworYm9vbCBUZW1w
bGF0ZUFyZzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobUtpbmQgPCBvdGhlci5tS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChtS2luZCA+IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBj
YXNlIEtpbmQ6OkJvb2w6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFs
dWUuYjsKKyAgICAgICAgY2FzZSBLaW5kOjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVl
LmkgPCBvdGhlci5tVmFsdWUuaTsKKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorICAgICAgICAg
ICAgcmV0dXJuIG1WYWx1ZS51IDwgb3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6
VHlwZToKKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7Cisg
ICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFN5bWJvbEVudjo6VGVt
cGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJhc2VOYW1lID09IG90aGVyLmJhc2VOYW1lICYmIHRlbXBsYXRlQXJncyA9
PSBvdGhlci50ZW1wbGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6
Om9wZXJhdG9yPChjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChi
YXNlTmFtZSA8IG90aGVyLmJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChvdGhlci5iYXNlTmFtZSA8IGJhc2VOYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVt
cGxhdGVBcmdzOworfQorCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJhc2VOYW1lLmVtcHR5KCkgJiYgdGVtcGxhdGVBcmdzLmVtcHR5
KCk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmNsZWFyKCkKK3sKKyAgICBi
YXNlTmFtZSA9IE5hbWUoKTsKKyAgICB0ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKK30KKworTmFtZSBT
eW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUoc3RkOjpzdHJpbmcgJmJ1ZmZlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQoYnVmZmVyLmVtcHR5KCkpOworCisgICAgaWYgKHRlbXBsYXRlQXJn
cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VOYW1lOworICAgIH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG4gPSBzdGQ6Om1heCh7CisgICAgICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisgICAgICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6ZGlnaXRzMTAsICAgICAgIC8vCisgICAgICAgIDUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heF9sZW5ndGgoInRydWUiLCAiZmFsc2Ui
KQorICAgIH0pOworCisgICAgYnVmZmVyLnJlc2VydmUoYmFzZU5hbWUucmF3TmFtZSgpLmxlbmd0
aCgpICsgKG4gKyAyKSAqIHRlbXBsYXRlQXJncy5zaXplKCkgKyAxKTsKKyAgICBidWZmZXIgKz0g
YmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKworICAgIGlmICghdGVtcGxhdGVBcmdzLmVtcHR5
KCkpCisgICAgeworICAgICAgICBidWZmZXIgKz0gIjwiOworCisgICAgICAgIGJvb2wgZmlyc3Qg
PSB0cnVlOworICAgICAgICBjaGFyIGFyZ0J1ZmZlcltuICsgMV07CisgICAgICAgIGZvciAoY29u
c3QgVGVtcGxhdGVBcmcgJmFyZyA6IHRlbXBsYXRlQXJncykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYnVmZmVyICs9ICIsICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnOjpWYWx1ZSB2YWx1ZSA9IGFyZy52YWx1ZSgpOworICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmc6OktpbmQga2luZCAgID0gYXJnLmtpbmQoKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRl
bXBsYXRlQXJnOjpLaW5kOjpCb29sOgorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9
ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciAr
PSAiZmFsc2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6SW50OgorICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdmFsdWUuaSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoK
KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIldSIsIHZhbHVlLnUpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OlR5
cGU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICp2YWx1ZS50OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBzLT5uYW1lKCkuZGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlw
ZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7ICAvLyBUT0RPCisgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJn
QnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBl
LmdldENvbHMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1
ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gIngiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldFJv
d3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJ1ZmZlciArPSAiPiI7CisgICAgfQorCisgICAgY29uc3QgSW1tdXRh
YmxlU3RyaW5nIG5hbWUoYnVmZmVyKTsKKyAgICBidWZmZXIuY2xlYXIoKTsKKworICAgIHJldHVy
biBOYW1lKG5hbWUsIGJhc2VOYW1lLnN5bWJvbFR5cGUoKSk7Cit9CisKK3ZvaWQgU3ltYm9sRW52
OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbihjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYXJnQ291bnQs
IGNvbnN0IFRlbXBsYXRlQXJnICphcmdzKQoreworICAgIGJhc2VOYW1lID0gbmFtZTsKKyAgICB0
ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisgICAgeworICAgICAgICB0ZW1wbGF0ZUFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOwor
ICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU3ltYm9sRW52OjpTeW1ib2xF
bnYoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorICAgIDogbVN5bWJv
bFRhYmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbU5hbWVUb1N0cnVjdChT
dHJ1Y3RGaW5kZXI6OkZpbmRTdHJ1Y3RzKGNvbXBpbGVyLCByb290KSkKK3t9CisKK2NvbnN0IFRT
dHJ1Y3R1cmUgJlN5bWJvbEVudjo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sK
KyAgICBjb25zdCBOYW1lIG5hbWUocyk7CisgICAgYXV0byBpdGVyID0gbU5hbWVUb1N0cnVjdC5m
aW5kKG5hbWUpOworICAgIGlmIChpdGVyID09IG1OYW1lVG9TdHJ1Y3QuZW5kKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gczsKKyAgICB9CisgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVy
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHo7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgKlN5bWJvbEVu
djo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3QKK3sKKyAgICBpZiAocykKKyAgICB7
CisgICAgICAgIHJldHVybiAmcmVtYXAoKnMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KCkKK3sKKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKworICAgIFNp
Z1RvRnVuYyAmc2lnVG9GdW5jID0gbU92ZXJsb2Fkc1ttUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZm
ZXJdOworICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJsZVNpZ0J1
ZmZlcl07CisKKyAgICBpZiAoIWZ1bmMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmcmV0
dXJuVHlwZSA9IG1SZXVzYWJsZVNpZ0J1ZmZlci5iYWNrKCk7CisgICAgICAgIG1SZXVzYWJsZVNp
Z0J1ZmZlci5wb3BfYmFjaygpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1SZXVzYWJs
ZVRlbXBsYXRlTmFtZUJ1ZmZlci5mdWxsTmFtZShtUmV1c2FibGVTdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsKKyAgICAgICAgZm9yIChj
b25zdCBUVHlwZSAmcGFyYW1UeXBlIDogbVJldXNhYmxlU2lnQnVmZmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgbmV3IFRWYXJp
YWJsZSgmbVN5bWJvbFRhYmxlLCBrRW1wdHlJbW11dGFibGVTdHJpbmcsICZwYXJhbVR5cGUsIFN5
bWJvbFR5cGU6OkVtcHR5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUmV1c2FibGVTaWdC
dWZmZXIuY2xlYXIoKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsK
KworICAgIHJldHVybiAqZnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6Omdl
dEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFt
Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKyAg
ICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBtUmV1
c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKCpwYXJhbVR5cGVzW2ldKTsKKyAgICB9CisgICAgbVJl
dXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKyAgICBtUmV1c2FibGVUZW1w
bGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJnQ291bnQsIHRlbXBsYXRlQXJn
cyk7CisgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7Cit9CisKK1RJbnRlcm1B
Z2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1
ZmZlci5lbXB0eSgpKTsKKyAgICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVt
cHR5KCkpOworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKyAgICB7CisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NF
UlQodGFyZyk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2sodGFyZy0+Z2V0
VHlwZSgpKTsKKyAgICB9CisgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5U
eXBlKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBs
YXRlQXJnQ291bnQsIHRlbXBsYXRlQXJncyk7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKyAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6
OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1
cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcykKK3sKKyAgICBBU1NFUlQobmFtZS5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBUU3RydWN0dXJlIComcyA9IG1BbmdsZVN0cnVjdHNbbmFt
ZS5yYXdOYW1lKCldOworICAgIEFTU0VSVCghcyk7CisgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7
CisgICAgcmV0dXJuICpzOworfQorCitjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFRl
eHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVy
KHNhbXBsZXJUeXBlKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqJmVudiA9IG1UZXh0dXJlRW52
c1tzYW1wbGVyVHlwZV07CisgICAgaWYgKGVudiA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAg
YXV0byAqdGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOworICAgICAgICBhdXRv
ICp0ZXh0dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygi
dGV4dHVyZSIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4
dHVyZSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIGF1dG8gKnNhbXBsZXIgPQor
ICAgICAgICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFs
c2UpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIG1hcmtBc1Bv
aW50ZXIoKnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKworICAgICAgICBzdGQ6OnN0
cmluZyBlbnZOYW1lOworICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisgICAgICAg
IGVudk5hbWUgKz0gR2V0VGV4dHVyZVR5cGVOYW1lKHNhbXBsZXJUeXBlKS5yYXdOYW1lKCkuZGF0
YSgpOworICAgICAgICBlbnZOYW1lICs9ICI+IjsKKworICAgICAgICBlbnYgPSAmbmV3U3RydWN0
dXJlKE5hbWUoZW52TmFtZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKm5ldyBURmllbGRMaXN0e3RleHR1cmUsIHNhbXBsZXJ9KTsKKyAg
ICB9CisgICAgcmV0dXJuICplbnY7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6
Z2V0U2FtcGxlclN0cnVjdCgpCit7CisgICAgaWYgKCFtU2FtcGxlcikKKyAgICB7CisgICAgICAg
IG1TYW1wbGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5n
KCJtZXRhbDo6c2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICB9CisgICAgcmV0
dXJuICptU2FtcGxlcjsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtTcGFjZShWYXJGaWVsZCB4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1Nw
YWNlPiAmbWFwKQoreworICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJsZSB0byBo
YXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1dCB0aGlz
CisgICAgLy8gaXMgbm90IHJlcXVpcmVkIGZvciBub3cgYW5kIHdvdWxkIHJlcXVpcmUgY29kZSBj
aGFuZ2VzIHRvIGdldCByaWdodC4KKyAgICBBU1NFUlQoIWlzUG9pbnRlcih4KSk7CisgICAgQVNT
RVJUKCFpc1JlZmVyZW5jZSh4KSk7CisKKyAgICBtYXBbeF0gPSBzcGFjZTsKK30KKworY29uc3Qg
QWRkcmVzc1NwYWNlICpTeW1ib2xFbnY6OmlzU3BhY2UoVmFyRmllbGQgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJG
aWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gaXRlciA9
IG1hcC5maW5kKHgpOworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ugc3BhY2UgPSBp
dGVyLT5zZWNvbmQ7CisgICAgY29uc3QgYXV0byBpbmRleCAgICAgICAgID0gc3RhdGljX2Nhc3Q8
c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxBZGRyZXNzU3BhY2U+PihzcGFjZSk7CisgICAgcmV0dXJu
ICZrQWRkcmVzc1NwYWNlc1tpbmRleF07Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2lu
dGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1Nw
YWNlKHgsIHNwYWNlLCBtUG9pbnRlcnMpOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya0FzUmVm
ZXJlbmNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFy
a1NwYWNlKHgsIHNwYWNlLCBtUmVmZXJlbmNlcyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAq
U3ltYm9sRW52Ojppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNT
cGFjZSh4LCBtUG9pbnRlcnMpOworfQorCitjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4LCBt
UmVmZXJlbmNlcyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQYWNrZWQoY29uc3QgVEZp
ZWxkICZmaWVsZCkKK3sKKyAgICBtUGFja2VkRmllbGRzLmluc2VydCgmZmllbGQpOworfQorCiti
b29sIFN5bWJvbEVudjo6aXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQo
KTsKK30KKworc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBl
IGJhc2ljVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKGJhc2ljVHlwZSkpOworCisgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4
dGVybmFsT0VTOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyVmlkZW9XRUJHTDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJy
YXlTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFNh
bXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVB
cnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0U2hh
ZG93OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworCisgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6
CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkRNU0FycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEludDsKKworICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5Ogor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
TVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEUmVjdDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmVBcnJh
eToKKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRVSW50OworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIFRC
YXNpY1R5cGU6OkVidFZvaWQ7CisgICAgfQorfQorCitOYW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5h
bWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBs
ZXJUeXBlKSk7CisKKyAgICBjb25zdCBUQmFzaWNUeXBlIHRleHR1cmVUeXBlID0gR2V0VGV4dHVy
ZUJhc2ljVHlwZShzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmlu
ZSBIQU5ETEVfVEVYVFVSRV9OQU1FKGJhc2VOYW1lKSAgICAgICAgICAgICAgICBcCisgICAgZG8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBz
d2l0Y2ggKHRleHR1cmVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgIG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxmbG9hdD4iOyBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNh
c2UgVEJhc2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxpbnQ+IjsgICBcCisgICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5h
bWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjx1aW50PiI7ICBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSA9
IG51bGxwdHI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAg
ICBzd2l0Y2ggKHNhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgLy8gMWQKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMUQ6ICAvLyBEZXNrdG9wIEdMU0wgc2FtcGxlciB0eXBlOgorICAgICAgICBj
YXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxRDoKKyAgICAgICAg
ICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUxZCIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gMWQgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIxREFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2Fy
cmF5Iik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
QnVmZmVyOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICAgICAgSEFO
RExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZV9idWZmZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIDJkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRS
ZWN0OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgidGV4dHVyZTJkIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyAzZCB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAg
ICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIDJkIGFycmF5IHRleHR1cmVzCisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgSEFORExFX1RFWFRV
UkVfTkFNRSgidGV4dHVyZTJkX21zIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJy
YXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXNfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIGN1YmUgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZWN1YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNoYWRv
dworICAgICAgICBjYXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMURBcnJheVNoYWRvdzoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEUmVjdFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAg
ICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlIik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGgyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAvLyBFeHRlbnRpb25zCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOiAgICAgICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhp
c3RzOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOiAgLy8gT25seSB2
YWxpZCBpZiBHTF9FWFRfWVVWX3RhcmdldCBleGlzdHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxl
clZpZGVvV0VCR0w6CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJUT0RPIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRy
OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFN
RQorCisgICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRjOTY0NWUwNTE5ODg2N2YyNWRjMDMwYzAyZWVjMDc1NjVmYmQy
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgKQEAgLTAsMCAr
MSwyMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3Bh
Y2Ugc2gKK3sKKworZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UKK3sKKyAgICBDb25zdGFudCwKKyAg
ICBEZXZpY2UsCisgICAgVGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqdG9TdHJpbmcoQWRkcmVz
c1NwYWNlIHNwYWNlKTsKKworY2xhc3MgVmFyRmllbGQKK3sKKyAgcHVibGljOgorICAgIFZhckZp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSA6IG1WYXJpYWJsZSgmdmFyKSB7fQorICAgIFZhckZp
ZWxkKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCkge30KKworICAgIEFOR0xF
X0lOTElORSBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbVZhcmlh
YmxlOyB9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIG1GaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWYXJGaWVsZCAmb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVZhcmlhYmxl
ID09IG90aGVyLm1WYXJpYWJsZSAmJiBtRmllbGQgPT0gb3RoZXIubUZpZWxkOworICAgIH0KKwor
ICBwcml2YXRlOgorICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7Cit9OworCit9ICAvLyBuYW1l
c3BhY2Ugc2gKKworbmFtZXNwYWNlIHN0ZAoreworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IGhhc2g8
c2g6OlZhckZpZWxkPgoreworICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHNoOjpWYXJGaWVs
ZCAmeCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IHNoOjpUVmFyaWFibGUgKnZhciA9IHgu
dmFyaWFibGUoKTsKKyAgICAgICAgaWYgKHZhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VFZhcmlhYmxlICo+KCkodmFyKTsKKyAgICAgICAgfQor
ICAgICAgICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VEZpZWxkICo+KCkoZmllbGQpOworICAgIH0KK307CisK
K30gIC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIHNoCit7CisKK2NsYXNzIFRlbXBsYXRl
QXJnCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQKKyAgICB7CisgICAgICAgIEJv
b2wsCisgICAgICAgIEludCwKKyAgICAgICAgVUludCwKKyAgICAgICAgVHlwZSwKKyAgICB9Owor
CisgICAgdW5pb24gVmFsdWUKKyAgICB7CisgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDogYih2
YWx1ZSkge30KKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisgICAgICAg
IFZhbHVlKHVuc2lnbmVkIHZhbHVlKSA6IHUodmFsdWUpIHt9CisgICAgICAgIFZhbHVlKGNvbnN0
IFRUeXBlICZ2YWx1ZSkgOiB0KCZ2YWx1ZSkge30KKworICAgICAgICBib29sIGI7CisgICAgICAg
IGludCBpOworICAgICAgICB1bnNpZ25lZCB1OworICAgICAgICBjb25zdCBUVHlwZSAqdDsKKyAg
ICB9OworCisgICAgVGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoaW50
IHZhbHVlKTsKKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisgICAgVGVtcGxhdGVB
cmcoY29uc3QgVFR5cGUgJnZhbHVlKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1w
bGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRl
QXJnICZvdGhlcikgY29uc3Q7CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtS2lu
ZDsgfQorICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisKKyAgcHVi
bGljOgorICAgIEtpbmQgbUtpbmQ7CisgICAgVmFsdWUgbVZhbHVlOworfTsKKworLy8gQW4gZW52
aXJvbm1lbnQgZm9yIGNyZWF0aW5nIGFuZCB1bmlxdWVseSBzaGFyaW5nIFRTeW1ib2wgb2JqZWN0
cy4KK2NsYXNzIFN5bWJvbEVudgoreworICAgIGNsYXNzIFRlbXBsYXRlTmFtZQorICAgIHsKKyAg
ICAgICAgTmFtZSBiYXNlTmFtZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VGVtcGxhdGVBcmc+IHRl
bXBsYXRlQXJnczsKKworICAgICAgcHVibGljOgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGVtcGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgICAgIGJvb2wgZW1wdHkoKSBj
b25zdDsKKyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgICAgIE5hbWUgZnVsbE5hbWUoc3Rk
OjpzdHJpbmcgJmJ1ZmZlcikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgTmFt
ZSAmbmFtZSwgc2l6ZV90IGFyZ0NvdW50LCBjb25zdCBUZW1wbGF0ZUFyZyAqYXJncyk7CisgICAg
fTsKKworICAgIHVzaW5nIFR5cGVSZWYgICAgICAgID0gQ1JlZjxUVHlwZT47CisgICAgdXNpbmcg
U2lnICAgICAgICAgICAgPSBzdGQ6OnZlY3RvcjxUeXBlUmVmPjsgIC8vIFBhcmFtMCwgUGFyYW0x
LCAuLi4gUGFyYW1OLCBSZXR1cm4KKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFw
PFNpZywgVEZ1bmN0aW9uICo+OworICAgIHVzaW5nIE92ZXJsb2FkcyAgICAgID0gc3RkOjptYXA8
VGVtcGxhdGVOYW1lLCBTaWdUb0Z1bmM+OworICAgIHVzaW5nIEFuZ2xlU3RydWN0cyAgID0gc3Rk
OjptYXA8SW1tdXRhYmxlU3RyaW5nLCBUU3RydWN0dXJlICo+OworICAgIHVzaW5nIFRleHR1cmVT
dHJ1Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKworICBwdWJsaWM6
CisgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbVN5bWJvbFRhYmxl
OyB9CisKKyAgICAvLyBUaGVyZSBleGlzdCBBbmdsZSByZXdyaXRlcyB0aGF0IGNhbiBsZWFkIHRv
IGluY29oZXJlbnQgc3RydWN0cworICAgIC8vCisgICAgLy8gRXhhbXBsZQorICAgIC8vICAgIHN0
cnVjdCBBIHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEnIGE7IH0gLy8gQScgaGFzIHNh
bWUgbmFtZSBhcyBBIGJ1dCBpcyBub3QgaWRlbnRpY2FsLgorICAgIC8vIGJlY29tZXMKKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisgICAgLy8gICAgc3RydWN0IEIgeyBBIGE7IH0KKyAgICAv
LworICAgIC8vIFRoaXMgbm90YWJseSBoYXBwZW5zIHdoZW4gQSBjb250YWlucyBhIHNhbXBsZXIg
aW4gdGhlIG9yaWdpbmFsIEdMU0wgY29kZSBidXQgaXMgcmV3cml0dGVuIHRvCisgICAgLy8gbm90
IGhhdmUgYSBzYW1wbGVyLCB5ZXQgdGhlIEEnIHN0cnVjdCBmaWVsZCBzdGlsbCBjb250YWlucyB0
aGUgc2FtcGxlciBmaWVsZC4KKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3Ry
dWN0dXJlICZzKSBjb25zdDsKKworICAgIC8vIExpa2UgYFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpYCBidXQgYWRkaXRpb25hbGx5IG1hcHMgbnVsbCB0byBudWxsLgorICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0OworCisg
ICAgY29uc3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkKGNvbnN0IE5hbWUgJm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZy
ZXR1cm5UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgcGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFR5cGUgKipwYXJhbVR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBs
YXRlQXJncyA9IG51bGxwdHIpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291
bnQgICAgICAgICA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncyA9IG51bGxwdHIpOworCisgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcyk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZnZXRUZXh0dXJlRW52KFRCYXNpY1R5
cGUgc2FtcGxlclR5cGUpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3Qo
KTsKKworICAgIHZvaWQgbWFya0FzUG9pbnRlcihWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3Bh
Y2UpOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0
OworCisgICAgdm9pZCBtYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNw
YWNlKTsKKyAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNv
bnN0OworCisgICAgdm9pZCBtYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAg
Ym9vbCBpc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKworICAgIHZv
aWQgbWFya1NwYWNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSwgc3RkOjp1bm9yZGVy
ZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApOworICAgIGNvbnN0IEFkZHJlc3NT
cGFjZSAqaXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKwor
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKyAg
ICBPdmVybG9hZHMgbU92ZXJsb2FkczsKKyAgICBTaWcgbVJldXNhYmxlU2lnQnVmZmVyOworICAg
IFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisgICAgc3RkOjpzdHJp
bmcgbVJldXNhYmxlU3RyaW5nQnVmZmVyOworCisgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVj
dHM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRCYXNpY1R5cGUsIGNvbnN0IFRTdHJ1Y3R1cmUg
Kj4gbVRleHR1cmVFbnZzOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKm1TYW1wbGVyID0gbnVsbHB0
cjsKKworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiBtUG9p
bnRlcnM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1S
ZWZlcmVuY2VzOworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tl
ZEZpZWxkczsKK307CisKK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxl
clR5cGUpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3Ry
dWN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg0MzMzMmRkOGRhYzI3OTJkYjJkMjYwOGI4NmVlZTEyOWI1
YzFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CkBAIC0wLDAgKzEsMzgzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVk
ZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJp
bmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFZGdlcyA9IHN0ZDo6dW5vcmRlcmVkX3Nl
dDxUPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBHcmFwaCA9IHN0ZDo6dW5vcmRl
cmVkX21hcDxULCBFZGdlczxUPj47CisKK3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZz
eW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUg
KnMpCit7CisgICAgaWYgKGcuZmluZChzKSAhPSBnLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmVzID0gZ1tzXTsK
KworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisgICAgZm9yIChjb25z
dCBURmllbGQgKmYgOiBmcykKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6
ID0gc3ltYm9sRW52LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcy5pbnNlcnQoeik7CisgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1i
b2xFbnYsIGcsIHopOworICAgICAgICAgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXog
PSBnW3pdOworICAgICAgICAgICAgZXMuaW5zZXJ0KGV6LmJlZ2luKCksIGV6LmVuZCgpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBCdWlsZEdyYXBo
KFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnN0cnVjdHMpCit7Cisg
ICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnOworICAgIGZvciAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA6IHN0cnVjdHMpCisgICAgeworICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYs
IGcsIHMpOworICAgIH0KKyAgICByZXR1cm4gZzsKK30KKworLy8gQWxnb3J0aG06IGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2Vh
cmNoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6dmVjdG9yPFQ+IFRvcG9zb3J0KGNvbnN0
IEdyYXBoPFQ+ICZnKQoreworICAgIC8vIG5vZGVzIHdpdGggdGVtcG9yYXJ5IG1hcmsKKyAgICBz
dGQ6OnVub3JkZXJlZF9zZXQ8VD4gdGVtcHM7CisKKyAgICAvLyBub2RlcyB3aXRob3V0IHBlcm1h
bmVudCBtYXJrCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PFQ+IGludlBlcm1zOworICAgIGZvciAo
Y29uc3QgYXV0byAmZW50cnkgOiBnKQorICAgIHsKKyAgICAgICAgaW52UGVybXMuaW5zZXJ0KGVu
dHJ5LmZpcnN0KTsKKyAgICB9CisKKyAgICAvLyBMIOKGkCBFbXB0eSBsaXN0IHRoYXQgd2lsbCBj
b250YWluIHRoZSBzb3J0ZWQgZWxlbWVudHMKKyAgICBzdGQ6OnZlY3RvcjxUPiBMOworCisgICAg
Ly8gZnVuY3Rpb24gdmlzaXQobm9kZSBuKQorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlz
aXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKyAgICAgICAgLy8gaWYgbiBoYXMgYSBwZXJtYW5lbnQg
bWFyayB0aGVuCisgICAgICAgIGlmIChpbnZQZXJtcy5maW5kKG4pID09IGludlBlcm1zLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyByZXR1cm4KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBpZiBuIGhhcyBhIHRlbXBvcmFyeSBtYXJrIHRoZW4KKyAg
ICAgICAgaWYgKHRlbXBzLmZpbmQobikgIT0gdGVtcHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIHN0b3AgICAobm90IGEgREFHKQorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgdGVtcG9yYXJ5IG1hcmsKKyAg
ICAgICAgdGVtcHMuaW5zZXJ0KG4pOworCisgICAgICAgIC8vIGZvciBlYWNoIG5vZGUgbSB3aXRo
IGFuIGVkZ2UgZnJvbSBuIHRvIG0gZG8KKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7
CisgICAgICAgIEFTU0VSVChlbkl0ZXIgIT0gZy5lbmQoKSk7CisgICAgICAgIGNvbnN0IEVkZ2Vz
PFQ+ICZlbiA9IGVuSXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKFQgbSA6IGVuKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyB2aXNpdChtKQorICAgICAgICAgICAgdmlzaXQobSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisgICAgICAg
IHRlbXBzLmVyYXNlKG4pOworICAgICAgICAvLyBtYXJrIG4gd2l0aCBhIHBlcm1hbmVudCBtYXJr
CisgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworICAgICAgICAvLyBhZGQgbiB0byBoZWFkIG9m
IEwKKyAgICAgICAgTC5wdXNoX2JhY2sobik7CisgICAgfTsKKworICAgIC8vIHdoaWxlIGV4aXN0
cyBub2RlcyB3aXRob3V0IGEgcGVybWFuZW50IG1hcmsgZG8KKyAgICB3aGlsZSAoIWludlBlcm1z
LmVtcHR5KCkpCisgICAgeworICAgICAgICAvLyBzZWxlY3QgYW4gdW5tYXJrZWQgbm9kZSBuCisg
ICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworICAgICAgICAvLyB2aXNpdChuKQorICAg
ICAgICB2aXNpdChuKTsKKyAgICB9CisKKyAgICByZXR1cm4gTDsKK30KKworVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAqQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKK3sKKyAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisgICAgYXV0byAmZnVuY0VxdWFsaXR5ID0KKyAgICAgICAgKm5l
dyBURnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgYXV0byAmYVN0cnVjdCA9IENyZWF0ZUlu
c3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJhIikpOworICAg
IGF1dG8gJmJTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYiIpKTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3Ry
dWN0KTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZiU3RydWN0KTsKKworICAgIGF1
dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgc3RkOjp2ZWN0b3I8
VEludGVybVR5cGVkICo+IGFuZE5vZGVzOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAg
ICBjb25zdCBURmllbGRMaXN0ICZhRmllbGRzID0gYVN0cnVjdFR5cGUuZmllbGRzKCk7CisgICAg
Y29uc3Qgc2l6ZV90IHNpemUgICAgICAgICA9IGFGaWVsZHMuc2l6ZSgpOworCisgICAgYXV0byB0
ZXN0RXF1YWxpdHkgPSBbJl0oVEludGVybVR5cGVkICZhLCBUSW50ZXJtVHlwZWQgJmIpIC0+IFRJ
bnRlcm1UeXBlZCAqIHsKKyAgICAgICAgQVNTRVJUKGEuZ2V0VHlwZSgpID09IGIuZ2V0VHlwZSgp
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKyAgICAgICAgaWYg
KHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkgfHwgdHlwZS5nZXRTdHJ1Y3QoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byAqZnVuYyA9CisgICAgICAgICAgICAgICAgbmV3
IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
VHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVl
bmNleyZhLCAmYn0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wRXF1YWwsICZhLCAm
Yik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwg
c2l6ZTsgKytpZHgpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmFGaWVsZCAgICA9ICph
RmllbGRzW2lkeF07CisgICAgICAgIGNvbnN0IFRUeXBlICZhRmllbGRUeXBlID0gKmFGaWVsZC50
eXBlKCk7CisgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KworICAgICAgICBpZiAoYUZpZWxkVHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghYUZpZWxkVHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7ICAvLyBUT0RPCisgICAg
ICAgICAgICBpbnQgZGltID0gYUZpZWxkVHlwZS5nZXRPdXRlcm1vc3RBcnJheVNpemUoKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0ZpZWxkKGFT
dHJ1Y3QsIGFGaWVsZE5hbWUpLCBkKTsKKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0g
QWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAg
ICAgICAgICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7
CisgICAgICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRv
ICZhQWNjZXNzID0gQWNjZXNzRmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAg
ICBhdXRvICZiQWNjZXNzID0gQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAg
ICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOwor
ICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBU1NFUlQoYW5kTm9kZXMuc2l6ZSgpID4gMCk7ICAvLyBFbXB0eSBzdHJ1Y3RzIGFy
ZSBub3QgYWxsb3dlZCBpbiBHTFNMCisgICAgVEludGVybVR5cGVkICpvdXROb2RlID0gYW5kTm9k
ZXMuYmFjaygpOworICAgIGFuZE5vZGVzLnBvcF9iYWNrKCk7CisgICAgZm9yIChUSW50ZXJtVHlw
ZWQgKmFuZE5vZGUgOiBhbmROb2RlcykKKyAgICB7CisgICAgICAgIG91dE5vZGUgPSBuZXcgVElu
dGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQsIGFuZE5vZGUsIG91dE5vZGUpOwor
ICAgIH0KKyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNo
KFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisgICAgYXV0byAqZnVuY1Byb3RvRXF1
YWxpdHkgPSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jRXF1YWxpdHkpOworICAg
IHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG9FcXVhbGl0eSwg
JmJvZHlFcXVhbGl0eSk7Cit9CisKK3N0cnVjdCBEZWNsYXJlZFN0cnVjdHVyZQoreworICAgIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGU7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZXF1YWxpdHlGdW5jdGlvbkRlZmluaXRpb247CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlOworfTsKKworYm9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3lt
Ym9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmVkU3RydWN0dXJlICZvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFN0
cnVjdHVyZSAqPiAmdXNlZFN0cnVjdHMpCit7CisgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAq
ZGVjbE5vZGUgPSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgeworICAgICAgICBB
U1NFUlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5v
ZGUgJm5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKworICAgICAgICBpZiAoVElu
dGVybVN5bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFi
bGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsK
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG91dC5kZWNsTm9kZSAgPSBkZWNsTm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgb3V0LnN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmVx
dWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRT
dHJ1Y3RzLmZpbmQoc3RydWN0dXJlKSA9PSB1c2VkU3RydWN0cy5lbmQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
Q3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNz
IEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbVVzZWRTdHJ1Y3RzOworCisgICAgRmluZFN0cnVjdEVxdWFs
aXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
ZmFsc2UsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisgICAge30KKworICAg
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICA9IGJp
bmFyeS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IGJpbmFyeS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkp
OworICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBtU3lt
Ym9sRW52LnJlbWFwKGxlZnRUeXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgdXNlU3RydWN0KGNvbnN0IFRT
dHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdWJTdHJ1Y3QgPSBtU3ltYm9sRW52
LnJlbWFwKGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlRvcG9z
b3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZp
ZyAmcHBjKQoreworICAgIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSBmaW5kZXIoc3ltYm9sRW52KTsK
KyAgICByb290LnRyYXZlcnNlKCZmaW5kZXIpOworICAgIHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5k
ZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisKKyAgICBEZWNsYXJlZFN0cnVjdHVyZSBkZWNsYXJl
ZFN0cnVjdDsKKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1
Y3RzOworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vblN0cnVjdFN0bXROb2RlczsK
KworICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN0bXRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRD
b3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAmc3RtdE5vZGUgPSAqcm9vdC5nZXRD
aGlsZE5vZGUoaSk7CisgICAgICAgICAgICBpZiAoR2V0QXNEZWNsYXJlZFN0cnVjdHVyZShzeW1i
b2xFbnYsIHN0bXROb2RlLCBkZWNsYXJlZFN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0
cnVjdHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5w
dXNoX2JhY2soZGVjbGFyZWRTdHJ1Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNo
X2JhY2soJnN0bXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworICAg
ICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBEZWNsYXJlZFN0cnVj
dHVyZT4gcmF3VG9EZWNsYXJlZDsKKworICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0
dXJlICZkIDogZGVjbGFyZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Rz
LnB1c2hfYmFjayhkLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJl
ZC5maW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKyAgICAgICAgICAg
IHJhd1RvRGVjbGFyZWRbZC5zdHJ1Y3R1cmVdID0gZDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdGU6IEdyYXBoIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmx5IGV4cGxpY2l0bHkgZGVjbGFy
ZWQgc3RydWN0dXJlcy4KKyAgICAgICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnICAgICAg
ICAgICAgICAgICAgID0gQnVpbGRHcmFwaChzeW1ib2xFbnYsIHN0cnVjdHMpOworICAgICAgICBz
dGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChn
KTsKKyAgICAgICAgQVNTRVJUKGRlY2xhcmVkU3RydWN0cy5zaXplKCkgPD0gc29ydGVkU3RydWN0
cy5zaXplKCkpOworCisgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworICAgICAgICBm
b3IgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgOiBzb3J0ZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworICAgICAgICAgICAgaWYg
KGl0ICE9IHJhd1RvRGVjbGFyZWQuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGQuZGVjbE5v
ZGUpOworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2JhY2soZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1
ZW5jZSBuZXdTdG10Tm9kZXM7CisKKyAgICAgICAgZm9yIChEZWNsYXJlZFN0cnVjdHVyZSAmZGVj
bGFyZWRTdHJ1Y3QgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisgICAgICAgICAgICBuZXdTdG10Tm9kZXMu
cHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIGlmIChkZWNs
YXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmVxdWFs
aXR5RnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoVEludGVybU5vZGUgKnN0bXROb2RlIDogbm9uU3RydWN0U3RtdE5vZGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3RtdE5vZGUpOworICAgICAgICAgICAgbmV3U3Rt
dE5vZGVzLnB1c2hfYmFjayhzdG10Tm9kZSk7CisgICAgICAgIH0KKworICAgICAgICAqcm9vdC5n
ZXRTZXF1ZW5jZSgpID0gbmV3U3RtdE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBjb21waWxl
ci52YWxpZGF0ZUFTVCgmcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3Nv
cnRTdHJ1Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTM5MDhlMzRkZDRkOTZjZDA0ZDYwMjc0ZGYxODFiMGQ0ODkzM2E1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApAQCAtMCwwICsxLDI3IEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1RPUE9TT1JUU1RSVUNUU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBEb2VzIGEgdG9wb3Nv
cnQgb24gc3RydWN0cyBiYXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKy8vIFN0cnVjdCB0eXBl
IGRlY2xhcmF0aW9ucyBhcmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgcm9vdCBibG9jay4KK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBUb3Bvc29ydFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE0YmM2M2ZjYTI5OGViYTRjZmRhNDY3OTRjZTk2OGExMWZi
ZDhjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAKQEAgLTAs
MCArMSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgV3JhcHBlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHByaXZhdGU6CisgICAgSWRHZW4gJm1JZEdlbjsK
KworICBwdWJsaWM6CisgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUs
ICZzeW1ib2xUYWJsZSksIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdEJs
b2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKmJsb2NrTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpu
b2RlIDogKmJsb2NrTm9kZS0+Z2V0U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gbm9kZS0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmMuaXNNYWluKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2
b2lkIHZpc2l0TWFpbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
KmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4o
KSk7CisgICAgICAgIEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3Vu
dCgpID09IDApOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZXh0ZXJuYWxNYWluRnVuYyA9
ICpmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZp
bnRlcm5hbE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4
dGVybmFsTWFpbkZ1bmMpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqZXh0
ZXJuYWxNYWluUHJvdG8gPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAg
ICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisgICAg
ICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZpbnRlcm5hbE1haW5GdW5jKTsK
KworICAgICAgICBUSW50ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisgICAgICAgIGV4dGVybmFsTWFpbkJvZHktPmFwcGVuZFN0YXRlbWVudCgKKyAgICAg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm5hbE1haW5G
dW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmlu
dGVybmFsTWFpbkJvZHkgPSBmdW5jRGVmTm9kZS0+Z2V0Qm9keSgpOworCisgICAgICAgIFRJbnRl
cm1GdW5jdGlvbkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisgICAgICAgICAgICBuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihleHRlcm5hbE1haW5Qcm90bywgZXh0ZXJuYWxNYWlu
Qm9keSk7CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmludGVybmFsTWFpbkRl
ZiA9CisgICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1h
aW5Qcm90bywgaW50ZXJuYWxNYWluQm9keSk7CisKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjayhOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVudHJ5KAorICAgICAgICAgICAgJnJv
b3QsIGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5h
bE1haW5EZWZ9KSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6Oldy
YXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZy
b290KQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworICAg
IHJvb3QudHJhdmVyc2UoJndyYXBwZXIpOworICAgIGlmICghd3JhcHBlci51cGRhdGVUcmVlKCZj
b21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIwZWRmZjQyYjhlMzRkZDFhODBh
Mjc1NTIyZGYzYjdkNDZhNDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIK
KworbmFtZXNwYWNlIHNoCit7CisKKy8vIENoYW5nZXMKKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7
IG1haW4tYm9keSB9CisvLyBUbworLy8gICAgdm9pZCBGUkVTSF9OQU1FKGFyZ3MpIHsgbWFpbi1i
b2R5IH0KKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKy8vCisv
LyBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWZ1bCBpZiB0aGUgb3JpZ2luYWwgYG1haW5gIGhh
cyBtdWx0aXBsZSByZXR1cm4gcGF0aHMgYmVjYXVzZSB0aGlzCisvLyByZWR1Y2VzIGRvd24gdG8g
YSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNsZWFu
dXAgY29kZSBpbiBgbWFpbmAuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgV3JhcE1haW4oVENvbXBp
bGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYThiZjNhZmQxMjMwZTY1ZmRkY2NlOTgxOGFh
N2NjMmNiOThkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAKQEAgLTAsMCAr
MSwzMDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDcxOCkKKyNlbmRpZgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y2xpbWl0cz4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisK
K25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01ldGFsU3RyaW5nKGNvbnN0
IFRUeXBlICp0KQoreworICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgeworICAg
ICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAg
ICAgICAgICByZXR1cm4gImJvb2wiOworICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhU
OgorICAgICAgICAgICAgcmV0dXJuICJ5dXZDc2NTdGFuZGFyZEVYVCI7CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICBj
YXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsKKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckN1YmUi
OworICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJldHVy
biAic2FtcGxlckV4dGVybmFsT0VTIjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWwy
RFkyWUVYVDoKKyAgICAgICAgICAgIHJldHVybiAiX19zYW1wbGVyRXh0ZXJuYWwyRFkyWUVYVCI7
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlcjJEUmVjdCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyRE1TQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRE1TQXJyYXkiOworICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXJDdWJlQXJyYXkiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICBy
ZXR1cm4gImlzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAg
ICAgICByZXR1cm4gImlzYW1wbGVyM0QiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJE
TVMiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0
dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJy
YXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsKKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsK
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInVzYW1w
bGVyQ3ViZSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAg
cmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJETVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TQXJyYXkiOwor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1
c2FtcGxlckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAg
ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyREFycmF5U2hhZG93IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKyAg
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7Cisg
ICAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICByZXR1cm4gImludGVy
ZmFjZSBibG9jayI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVy
biAidGV4dHVyZTJkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyRDoKKyAgICAgICAgICAgIHJl
dHVybiAidGV4dHVyZTJkPGludD4iOworICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorICAgICAg
ICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQ8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlM0Q6
CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisgICAgICAgIGNhc2UgRWJ0SUltYWdl
M0Q6CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDxpbnQ+IjsKKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPHVpbnQ+IjsKKyAgICAg
ICAgY2FzZSBFYnRJbWFnZTJEQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJy
YXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlMmQ+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5p
c1Vuc2l6ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAi
YXJyYXlfcmVmPHRleHR1cmUyZDxpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5U
RUQiOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEVidFVJbWFnZTJEQXJyYXk6CisgICAg
ICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlMmQ8dWludD4+IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SW1h
Z2VDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7CisgICAgICAgIGNhc2Ug
RWJ0SUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8aW50PiI7Cisg
ICAgICAgIGNhc2UgRWJ0VUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1
YmU8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlQ3ViZUFycmF5OgorICAgICAgICAgICAg
aWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBM
RU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlQ3ViZUFycmF5
OgorICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU8aW50Pj4iOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBFYnRVSW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXko
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0
dXJlY3ViZTx1aW50Pj4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRBdG9taWNDb3VudGVyOgorICAgICAgICAgICAgcmV0
dXJuICJhdG9taWNfdWludCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6Cisg
ICAgICAgICAgICByZXR1cm4gIiRzYW1wbGVyVmlkZW9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IHR5cGUiOworICAgIH0KK30KKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVT
dHJpbmcoY29uc3QgVFR5cGUgKnQpCit7CisgICAgaWYgKHQtPmlzTWF0cml4KCkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHQtPmdldENvbHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDJ4NCI7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxv
YXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDN4NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJmbG9hdDR4MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh0LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0LT5nZXRCYXNp
Y1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MiI7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MyI7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiaW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFYnRCb29sOgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sNCI7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidWludDIiOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJ1aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnRl
cmZhY2VCbG9jayk7CisgICAgcmV0dXJuIGdldEJhc2ljTWV0YWxTdHJpbmcodCk7Cit9CisKK0lt
bXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBTaEhhc2hG
dW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwgTmFtZU1hcCAqbmFtZU1hcCkKK3sKKyAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHJldHVybiBIYXNoTmFtZSh0
eXBlLmdldFN0cnVjdCgpLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXApOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIEltbXV0YWJsZVN0cmluZyhnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0cmluZygm
dHlwZSkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlM2NlM2NlZmQ3MzY5MTU4M2FhMzJmODgx
ODYyZjc3ZDc2NDNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCkBAIC0wLDAg
KzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXwor
I2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKK25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRC
YXNpY01ldGFsU3RyaW5nKGNvbnN0IFRUeXBlICp0KTsKKworY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitJbW11dGFibGVTdHJpbmcg
R2V0TWV0YWxUeXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JWdWxrYW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKaW5kZXggMjAxY2JjOTFmNmUzYzIxZGQxOTI1NDVk
NmM1ZDUwZjkzODc0YmY3MS4uYzVlYzY3ZGVlNjI1OTBmY2I4MTJkOGRiZTMyYjVjNWRkYTQ4NzVi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKQEAgLTE2Myw2ICsx
NjMsOCBAQCBjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRQb2ludENv
b3JkTmFtZSAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZFBvaW50Q29vcmQiKTsKIGNvbnN0
ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJs
ZVN0cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
RW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRURlcHRoUmFu
Z2VQYXJhbXMiKTsKK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zQmxvY2tOYW1l
ICAgICAgICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlmb3JtQmxvY2siKTsKK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOwogCiBjb25zdGV4cHIgZ2w6OlNoYWRlck1hcDxjb25zdCBj
aGFyICo+IGtEZWZhdWx0VW5pZm9ybU5hbWVzID0gewogICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCkBAIC00NTAsOSArNDUyLDkgQEAgY29u
c3QgVFZhcmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOwogCiAgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgotICAgIHJldHVy
biBEZWNsYXJlSW50ZXJmYWNlQmxvY2soCi0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2
ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAot
ICAgICAgICBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc0Jsb2NrTmFtZSksIElt
bXV0YWJsZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zVmFyTmFtZSkpOworICAgIHJldHVybiBE
ZWNsYXJlSW50ZXJmYWNlQmxvY2socm9vdCwgc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFs
aWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrVW5pZm9ybXNWYXJOYW1lKTsKIH0KIAogY29uc3QgVFZhcmlhYmxl
ICpBZGRDb21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxvY2sgKnJvb3QsIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAppbmRleCBhM2UwMzk5ZTNlODA3
MmFiNjk3M2Q3YmFlZmYxNjM5MGQwMmYyYzc0Li44ZjZmYzQ2NWZhZTk4ZjdmYzEzOTEyNmRmNmQ0
NGMzMDJiYTM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgKQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBU
VHlwZQogCiAgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID4g
MSAmJiBzZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25z
dCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJy
YXkoKTsgfQorICAgIGJvb2wgaXNSYW5rMCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPT0gMSAmJiBzZWNvbmRhcnlTaXplID09
IDEgJiYgIW1TdHJ1Y3R1cmUgJiYgIWlzQXJyYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNU
LmNwcAppbmRleCA3NmE4YmMyZjVlNGE4MzAxYzFlMWU5ZmExNmZmYzZkMTE2NTI2ZWUxLi5iYTRk
NmYzZTVmNWJjYTUwNzE5NTU3N2VkZDUyMDY3MDQwZDc2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFs
aWRhdGVBU1QuY3BwCkBAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1Qo
VEludGVybU5vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNz
ICpkaWFnbm9zdGljcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWxpZGF0ZUFT
VE9wdGlvbnMgJm9wdGlvbnMpCiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0
cnVlLCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cykKLXsKLSAgICBpZiAobU9wdGlvbnMudmFsaWRhdGVTaW5nbGVQYXJlbnQpCi0gICAgewotICAg
ICAgICBtUGFyZW50W3Jvb3RdID0gbnVsbHB0cjsKLSAgICB9Ci19Cit7fQogCiB2b2lkIFZhbGlk
YXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQogewpAQCAt
OTAsMTIgKzg1LDEzIEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwg
VEludGVybU5vZGUgKm5vZGUpCiAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0
Q2hpbGRDb3VudCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7
ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnQuZmluZChjaGlsZCkgIT0g
bVBhcmVudC5lbmQoKSkKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOworICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBtUGFy
ZW50W2NoaWxkXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3VnaCB0aGUg
c2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgogICAgICAgICAgICAgICAgIC8v
IHRoZSBhbmNlc3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKG1QYXJlbnRbY2hpbGRdICE9IG5v
ZGUpCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5l
KCksICJGb3VuZCBjaGlsZCB3aXRoIHR3byBwYXJlbnRzIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIpOwpAQCAtMTAzLDE3
ICs5OSwxNyBAQCB2b2lkIFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Ob2RlICpub2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgbVBhcmVudFtjaGlsZF0gPSBub2RlOworICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENo
aWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0X2NvdW50
KQordm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291bnQpCiB7CiAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0ICYmIG1PcHRpb25zLnZhbGlkYXRlTnVsbE5vZGVzKQogICAgIHsKICAgICAgICAg
c2l6ZV90IGNoaWxkQ291bnQgPSBub2RlLT5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGlmIChj
aGlsZENvdW50IDwgbGVhc3RfY291bnQpCisgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RD
b3VudCkKICAgICAgICAgewogICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5n
ZXRMaW5lKCksICJUb28gZmV3IGNoaWxkcmVuIiwgIjx2YWxpZGF0ZU51bGxOb2Rlcz4iKTsKICAg
ICAgICAgICAgIG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9i
YWxJbml0aWFsaXplcnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwCmluZGV4IGRm
YTIzYWFmMTliZTQ4OTk1Y2MwNjM2OGI1MWQwMWIwYTEyOWZkOWIuLmJiYzhkY2Q0ZThhODJlNDcy
MGE3N2QwODFiMzdjOWY2ZDdkMGY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKQEAgLTUzLDcgKzUzLDgg
QEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xh
cmF0aW9uLAogICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CiAgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZXhwcmVzc2lvbiA9IGluaXQtPmdldFJpZ2h0KCk7CiAKLSAgICAgICAgaWYgKGV4cHJlc3Np
b24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFu
dFZhbHVlKCkpCisgICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFD
b25zdCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpIHx8CisgICAgICAgICAgICBz
eW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIEZvciB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBjb25zdGFudCwgZGVmZXIgdGhl
aXIgcmVhbCBpbml0aWFsaXphdGlvbiB1bnRpbAogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5p
dGlhbGl6ZSB1bmlmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVu
ZUVtcHR5Q2FzZXMuY3BwCmluZGV4IDI4OWRlMjE1MmU5YzUxNDU5NGY2MjMxZDRkZjkyZDY2YjE3
OWEyYjcuLjJlZTgyMzkzZmNlNTExYTBkYTc3OTRkYjlhNjMxNzEwZGM4Nzc1NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcApAQCAtMTcs
NyArMTcsNyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1ib29sIEFyZUVtcHR5Qmxv
Y2tzKFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7Citib29sIEFyZUVtcHR5QmxvY2tzKGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CiAKIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQogewpAQCAtMzcsNyArMzcsNyBAQCBib29sIElzRW1wdHlCbG9jayhU
SW50ZXJtTm9kZSAqbm9kZSkKIAogLy8gUmV0dXJuIHRydWUgaWYgYWxsIHN0YXRlbWVudHMgaW4g
InN0YXRlbWVudHMiIGNvbnNpc3Qgb25seSBvZiBlbXB0eSBibG9ja3MgYW5kIG5vLW9wIHN0YXRl
bWVudHMuCiAvLyBSZXR1cm5zIHRydWUgYWxzbyBpZiB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cy4K
LWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorYm9vbCBB
cmVFbXB0eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFs
bFRocm91Z2guY3BwCmluZGV4IDQ1MDBhZWE0ZTQ4MmMwMjMwOTBjYzdiZDhlNjhlZGFjNTE0YTQ5
MjAuLmRkOGRkNTQzZjZlMWEyMjUxMzM3ZWQ0ZGIwN2ZmYmRmNzcwMWEwMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1JlbW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3Vn
aC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2
ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCwgVEludGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG91dHB1dFNlcXVl
bmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KTsKKyAgICB2
b2lkIG91dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVf
dCBzdGFydEluZGV4KTsKICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgpOwogCiAgICAgVElu
dGVybUJsb2NrICptU3RhdGVtZW50TGlzdDsKQEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVt
b3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJt
U3dpdGNoICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaFRyYXZlcnNlcjo6b3V0cHV0U2VxdWVuY2UoVEludGVybVNlcXVlbmNlICpzZXF1
ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit2b2lkIFJlbW92ZVN3aXRjaEZhbGxUaHJvdWdoVHJh
dmVyc2VyOjpvdXRwdXRTZXF1ZW5jZShjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHN0YXJ0SW5kZXgpCiB7CisgICAgYXV0byAmb3V0U2VxID0gKm1TdGF0ZW1lbnRMaXN0T3V0
LT5nZXRTZXF1ZW5jZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2Vx
dWVuY2UtPnNpemUoKTsgKytpKQogICAgIHsKLSAgICAgICAgbVN0YXRlbWVudExpc3RPdXQtPmdl
dFNlcXVlbmNlKCktPnB1c2hfYmFjayhzZXF1ZW5jZS0+YXQoaSkpOworICAgICAgICBvdXRTZXEu
cHVzaF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1w
bGlmeUxvb3BDb25kaXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCmluZGV4
IDc0MTQ1NDAwZWJjNjNhN2I5NGEzYzM1NzgyNGZhODlmYzJjN2YxMWUuLjBjMmFhOGZiNmNiMWNh
ZGE4ODlkMDk0ODljYTdmNTQzN2IzOGNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCkBAIC0yMSwxMCArMjEs
MTcgQEAgbmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAorc3RydWN0IExvb3BJbmZvCit7Cisg
ICAgY29uc3QgVFZhcmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IG51bGxwdHI7CisgICAgVElu
dGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisgICAgVEludGVybVR5
cGVkICpleHByZXNzaW9uICAgICAgICAgICA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBTaW1wbGlm
eUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNl
cgogewogICBwdWJsaWM6Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcih1bnNp
Z25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgIFNpbXBsaWZ5TG9vcENvbmRp
dGlvbnNUcmF2ZXJzZXIoY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25z
VG9TaW1wbGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUpOwogCiAgICAgdm9pZCB0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpIG92ZXJyaWRlOwpAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpIG92
ZXJyaWRlOwogICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFy
eSAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsg
fQogCkBAIC00MiwxNiArNTAsMTkgQEAgY2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZl
cnNlciA6IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIKICAgICAvLyBmb3VuZC4KICAg
ICBib29sIG1Gb3VuZExvb3BUb0NoYW5nZTsKICAgICBib29sIG1JbnNpZGVMb29wSW5pdENvbmRp
dGlvbk9yRXhwcmVzc2lvbjsKLSAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlv
bnNUb1NpbXBsaWZ5OworICAgIGNvbnN0IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciAqbUNvbmRp
dGlvbnNUb1NpbXBsaWZ5OworCisgIHByaXZhdGU6CisgICAgTG9vcEluZm8gbUxvb3A7CiB9Owog
CiBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjpTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyKAotICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisg
ICAgY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwK
ICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQogICAgIDogVExWYWx1ZVRyYWNraW5nVHJh
dmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgc3ltYm9sVGFibGUpLAogICAgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlKGZhbHNlKSwKICAgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVz
c2lvbihmYWxzZSksCi0gICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2lt
cGxpZnlNYXNrKQorICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBs
aWZ5KQoge30KIAogLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29u
ZGl0aW9uLCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdApAQCAt
NjgsNyArNzksOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZQogICAgIGlmIChtRm91bmRMb29w
VG9DaGFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBj
aGFuZ2UgdGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNU
b1NpbXBsaWZ5Lm1hdGNoKG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2go
bm9kZSk7CiAgICAgcmV0dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKQEAgLTgwLDcgKzky
LDkgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm8KICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRo
aXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlm
eS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOwor
ICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5n
ZSA9CisgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50
Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BU
b0NoYW5nZTsKIH0KIApAQCAtOTIsNyArMTA2LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2EK
ICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBB
bHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkp
OworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgp
KTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTA0LDcgKzExOSw4
IEBAIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqCiAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlz
IGxvb3AuCiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnku
bWF0Y2gobm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlKTsKICAg
ICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTE2LDEwICsxMzIsMzUgQEAg
Ym9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtRGVjbGEKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9v
cC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlKTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAgIHJl
dHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2Rl
KQoreworICAgIGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3Au
Y29uZGl0aW9uIHx8IG1Mb29wLmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgVEludGVybUJs
b2NrICpwYXJlbnQgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgQVNT
RVJUKHBhcmVudCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisgICAgICAgIGlmICht
TG9vcC5leHByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1M
b29wLmV4cHJlc3Npb24tPmRlZXBDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtTG9vcC5jb25kaXRp
b25WYXJpYWJsZSk7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorICAgICAgICAgICAgICAg
IENyZWF0ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3Au
Y29uZGl0aW9uLT5kZWVwQ29weSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgc2VxLnB1c2hfYmFj
ayhub2RlKTsKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hfYmFjayhOb2RlUmVwbGFj
ZVdpdGhNdWx0aXBsZUVudHJ5KHBhcmVudCwgbm9kZSwgc3RkOjptb3ZlKHNlcSkpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgLy8gTWFyayB0
aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRl
cm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKQEAgLTEyOCw3ICsxNjksNyBAQCB2b2lkIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICBTY29wZWROb2RlSW5UcmF2ZXJzYWxQYXRoIGFkZFRvUGF0aCh0aGlzLCBub2Rl
KTsKIAogICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IHRydWU7Ci0g
ICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9TaW1wbGlm
eTsKIAogICAgIGlmICghbUZvdW5kTG9vcFRvQ2hhbmdlICYmIG5vZGUtPmdldEluaXQoKSkKICAg
ICB7CkBAIC0xNDcsODMgKzE4OCwxNDEgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBtSW5zaWRlTG9v
cEluaXRDb25kaXRpb25PckV4cHJlc3Npb24gPSBmYWxzZTsKIAorICAgIGNvbnN0IExvb3BJbmZv
IHByZXZMb29wID0gbUxvb3A7CisKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgIHsK
LSAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgICAgICA9IFN0YXRpY1R5cGU6OkdldDxF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKLSAgICAgICAgVFZh
cmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFi
bGUsIGJvb2xUeXBlKTsKKyAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgPSBTdGF0aWNU
eXBlOjpHZXQ8RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFUZW1wb3JhcnksIDEsIDE+KCk7Cisg
ICAgICAgIG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgYm9vbFR5cGUpOworICAgICAgICBtTG9vcC5jb25kaXRpb24gICAgICAgICA9IG5v
ZGUtPmdldENvbmRpdGlvbigpOworICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5v
ZGUtPmdldEV4cHJlc3Npb24oKTsKIAogICAgICAgICAvLyBSZXBsYWNlIHRoZSBsb29wIGNvbmRp
dGlvbiB3aXRoIGEgYm9vbGVhbiB2YXJpYWJsZSB0aGF0J3MgdXBkYXRlZCBvbiBlYWNoIGl0ZXJh
dGlvbi4KICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAg
ICAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9Ci0g
ICAgICAgICAgICAvLyBpbnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOwotICAg
ICAgICAgICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsgfQotICAgICAg
ICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KLSAgICAgICAg
ICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOwotICAgICAgICAgICAgaW5zZXJ0U3Rh
dGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKLQotICAgICAgICAgICAg
VEludGVybUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbUxvb3AuZXhwcmVzc2lv
bik7CisKKyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29u
dGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAg
ICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8v
ICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAg
ICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgd2hp
bGUgKHMwKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRl
bXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERl
Y2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVj
bGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRl
bXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgor
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHBy
OworICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IHsgYm9keTsgfSBzMCA9IGV4cHI7
IH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3Rh
dGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMwID0g
ZXhwcjsgY29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1w
SW5pdERlY2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xh
cmF0aW9uKTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2Uo
KS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKworICAgICAgICAgICAgICAgIC8vIENh
bid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1h
eSBoYXZlIGJlZW4gbnVsbHB0ci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKKyAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBh
bnkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxv
b3AuY29uZGl0aW9uVmFyaWFibGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld0Jv
ZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5k
ZWVwQ29weSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50
IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAg
ICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhl
cmUgLSB0aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBiZQotICAgICAgICAgICAgLy8gdHJhdmVyc2Vk
LCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+
c2V0Qm9keShuZXdCb2R5KTsKLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVU
ZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBkbyB7Ci0gICAgICAgICAgICAvLyAgICAg
Ym9keTsKLSAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhwcik7Ci0gICAgICAgICAgICAvLyBp
bnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSB0cnVlOwotICAgICAgICAgICAgLy8gICBk
byB7Ci0gICAgICAgICAgICAvLyAgICAgeyBib2R5OyB9Ci0gICAgICAgICAgICAvLyAgICAgczAg
PSBleHByOwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7Ci0gICAgICAgICAgICBUSW50
ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAgICAgICAgIENy
ZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBDcmVhdGVCb29s
Tm9kZSh0cnVlKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRl
bXBJbml0RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkg
PSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQor
ICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKworICAgICAgICAgICAgaWYg
KG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJv
ZHkoKSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0
aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAg
ICAgLy8gICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAg
ICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBib29sIHMwID0gZXhw
cjsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9k
eTsKKyAgICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJs
ZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBh
cmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q29uZGl0aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRp
b24gdmFyaWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51
bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZG8gewor
ICAgICAgICAgICAgICAgIC8vICAgICBib2R5OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoZXhwcik7CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
Ym9vbCBzMDsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsKKyAgICAgICAg
ICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNl
IHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgICAgICAgICAgLy8gICBz
MCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAq
dGVtcEluaXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBEZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlu
c2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2Rl
LT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9u
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byBy
ZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCisgICAgICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVy
ZSAtIHRoZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gdHJhdmVy
c2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAg
IG5vZGUtPnNldEJvZHkobmV3Qm9keSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0
aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2so
Ci0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlh
YmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOwotCi0gICAgICAgICAgICAv
LyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBp
dCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCi0gICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKLSAgICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFueSBw
cm9ibGVtcy4KLSAgICAgICAgICAgIG5vZGUtPnNldEJvZHkobmV3Qm9keSk7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUoY29uZGl0aW9uVmFyaWFi
bGUpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikK
ICAgICAgICAgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRl
IHRoZSBsb29wLgotICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBm
b3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vIGludG8KLSAg
ICAgICAgICAgIC8vICAgewotICAgICAgICAgICAgLy8gICAgIGluaXQ7Ci0gICAgICAgICAgICAv
LyAgICAgYm9vbCBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7Ci0g
ICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICAgIGV4cHJC
OwotICAgICAgICAgICAgLy8gICAgICAgczAgPSBleHByOwotICAgICAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgICAgIC8vICAgfQorICAgICAgICAgICAgaWYgKCFtTG9vcC5jb25kaXRpb24pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gQ3JlYXRlQm9v
bE5vZGUodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3
aGlsZUxvb3A7CiAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKmxvb3BTY29wZSAgICAgICAgICAg
ID0gbmV3IFRJbnRlcm1CbG9jaygpOwogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29w
U2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKIApAQCAtMjMzLDQ4ICsz
MzIsMTMwIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VM
b29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNl
LT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0g
dHJ1ZTsiIG90aGVyd2lzZQotICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kaXRpb25Jbml0
aWFsaXplciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
CisgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IG5vZGUt
PmdldENvbmRpdGlvbigpLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhl
IGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFu
c2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIHdoaWxl
IChleHByKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExv
Y2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAg
ICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBi
b2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAq
d2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBp
biB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9u
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShleHByKSB7IHdo
aWxlTG9vcEJvZHkgfSIKKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPQorICAgICAgICAgICAg
ICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0
aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sg
Y29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAg
ICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uSW5p
dGlhbGl6ZXIgPSBDcmVhdGVCb29sTm9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBNb3Zl
IHRoZSBsb29wIGNvbmRpdGlvbiBpbnNpZGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgLy8g
VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikg
eyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
eworICAgICAgICAgICAgICAgIC8vICAgICBpbml0OworICAgICAgICAgICAgICAgIC8vICAgICBi
b29sIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgIH0K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVt
ZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBj
b250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7Igor
ICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2soCisgICAgICAgICAg
ICAgICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZh
cmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsg
Ym9keTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
KndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIg
aW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lv
bigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9k
eS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1l
bnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFNjb3BlU2Vx
dWVuY2UtPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0
aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKLQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRC
b2R5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGlu
IHRoZSB3aGlsZSBsb29wCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNl
KCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAotICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lk
ZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAg
ICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAg
ICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAgICAgICAgICAgLy8gICAg
IGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIGJvb2wgczAgPSBleHByOworICAgICAgICAg
ICAgICAgIC8vICAgICB3aGlsZSAoczApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2Fs
IGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAv
LyAgIGV4cHJCOyBzMCA9IGV4cHI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0ICJib29sIHMwID0gZXhwcjsiCisgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAg
ICAgICAgICAgIC8vIEluc2VydCAieyBib2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2so
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIEluc2VydCAiZXhwckI7IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+
Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
SW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAogICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRD
b25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+
ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgIndo
aWxlKHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKLSAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGls
ZUxvb3AgPQotICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxs
cHRyLCBDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOwogICAgICAgICAg
ICAgbG9vcFNjb3BlLT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sod2hpbGVMb29wKTsKICAgICAg
ICAgICAgIHF1ZXVlUmVwbGFjZW1lbnQobG9vcFNjb3BlLCBPcmlnaW5hbE5vZGU6OklTX0RST1BQ
RUQpOwogCiAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRoZSBvbGQgYm9keSBub2RlIHdpbGwg
YmUgdHJhdmVyc2VkIGFuZCBsb29wcyBpbnNpZGUgaXQgbWF5IGJlCi0gICAgICAgICAgICAvLyB0
cmFuc2Zvcm1lZC4gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIHN0
aWxsIGJlIGluIHRoZSBBU1QgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlv
biB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRv
ZXNuJ3QgbmVlZCB0bwotICAgICAgICAgICAgLy8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zv
cm0gcGF0aCB0byBpdC4KKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUs
IHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlcgor
ICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5k
IHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorICAgICAgICAgICAgLy8gbmVl
ZCB0byBrbm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9ybSBwYXRoIHRvIGl0LgogICAgICAgICB9
CiAgICAgfQogCkBAIC0yODMsMTYgKzQ2NCwyNiBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAvLyBXZSB0
cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9y
bWVkLgogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBtTG9vcCA9IHByZXZMb29wOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UKIAorYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIs
IFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQoreworICAgIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgdHJhdmVyc2VyKG51bGxwdHIsIHN5bWJvbFRh
YmxlKTsKKyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKyAgICByZXR1cm4gdHJhdmVy
c2VyLnVwZGF0ZVRyZWUoY29tcGlsZXIsIHJvb3QpOworfQorCiBib29sIFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiB7Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0
aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xU
YWJsZSk7CisgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyIGNvbmRpdGlvbnNUb1NpbXBsaWZ5
KGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzayk7CisgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1Ry
YXZlcnNlciB0cmF2ZXJzZXIoJmNvbmRpdGlvbnNUb1NpbXBsaWZ5LCBzeW1ib2xUYWJsZSk7CiAg
ICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CiAgICAgcmV0dXJuIHRyYXZlcnNlci51cGRh
dGVUcmVlKGNvbXBpbGVyLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAppbmRleCA0Y2RlZGU2ODMyZGU5MzAy
NDM0OGQ3YzY5YWE5ZTYxYzA2YmI0NTBmLi42OGI5OGY4NWM0ODliOGY0Mjg4YjU5NDgzZDlmM2M5
YWQ5MDU2YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2lt
cGxpZnlMb29wQ29uZGl0aW9ucy5oCkBAIC0xOSw2ICsxOSwxMCBAQCBjbGFzcyBUQ29tcGlsZXI7
CiBjbGFzcyBUSW50ZXJtTm9kZTsKIGNsYXNzIFRTeW1ib2xUYWJsZTsKIAorQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJv
bFRhYmxlICpzeW1ib2xUYWJsZSk7CisKIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxv
b3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9T
aW1wbGlmeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzZkZTE4MmQ5ZWYyM2IzYWIwMmM0MDllYmQxM2E2YjZlMzQ2OWZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0FzTm9kZS5oCkBAIC0wLDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5o
IgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFjZSBw
cml2Cit7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFzTm9kZQore307CisKK3Rl
bXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Ob2RlPgoreworICAgIHN0YXRpYyBBTkdM
RV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJuIG5v
ZGU7IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UeXBlZD4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDog
bnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJt
U3ltYm9sPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhU
SW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0
QXNTeW1ib2xOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Db25zdGFudFVuaW9uPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybUNvbnN0YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpIDogbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Q
cm90b3R5cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkgOiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1QcmVwcm9jZXNzb3JE
aXJlY3RpdmU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpIDogbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3dpenpsZT4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2Rl
ICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N3aXp6bGVO
b2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1CaW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmluYXJ5
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBu
b2RlLT5nZXRBc0JpbmFyeU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBBc05vZGU8VEludGVybVVuYXJ5PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1VuYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVGVybmFyeT4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1Rlcm5hcnlOb2RlKCkg
OiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1JZkVsc2U+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0lmRWxzZU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybVN3aXRjaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZSA/IG5vZGUtPmdldEFzU3dpdGNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQ2FzZT4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Nhc2VOb2RlKCkgOiBudWxscHRyOwor
ICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQWdncmVnYXRlPgoreworICAg
IHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VElu
dGVybUJsb2NrPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0Jsb2NrKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbj4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50
ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybURlY2xhcmF0aW9uPgoreworICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0RlY2xhcmF0aW9u
Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9k
ZTxUSW50ZXJtTG9vcD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpl
eGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2Rl
LT5nZXRBc0xvb3BOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+Citz
dHJ1Y3QgQXNOb2RlPFRJbnRlcm1CcmFuY2g+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5vZGUgPyBub2RlLT5nZXRBc0JyYW5jaE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsK
KworfSAgLy8gbmFtZXNwYWNlIHByaXYKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9J
TkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIHJldHVybiBwcml2OjpB
c05vZGU8VD46OmV4ZWMobm9kZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIuY3BwCmluZGV4IGQwOGMzODZkYTA3ZmU5MGRmNmFlMjE5ODJhNDhlMTExYzNkYzdmMGUu
LmFjYzc4OTI5NmIyYjcxZTFiODMzYTkzMjM4OTE3NGE4OGU4MDNjMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJ
c0R5bmFtaWNJbmRleGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCiAgICAgcmV0
dXJuIElzRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeChub2RlKSAmJiBub2RlLT5nZXRM
ZWZ0KCktPmdldEFzU3dpenpsZU5vZGUoKTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXI6Om1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbChU
SW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAg
ICBpZiAoKG1NYXNrICYga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVy
bmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5
ICpub2RlKQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0FycmF5TGVuZ3RoTWV0aG9kKSAh
PSAwKQogICAgIHsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QK
IHsKICAgICAvLyBMLXZhbHVlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB0byBjaGVj
ayBmb3IgZHluYW1pYyBpbmRleGluZyBpbiBMLXZhbHVlLgogICAgIC8vIFRyYXZlcnNlcnMgdGhh
dCBkb24ndCB0cmFjayBsLXZhbHVlcyBjYW4gc3RpbGwgdXNlIHRoaXMgY2xhc3MgYW5kIG1hdGNo
IGJpbmFyeSBub2RlcyB3aXRoCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJl
bnROb2QKIAogYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5h
cnkgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgKnBhcmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBjb25zdAogewogICAgIGlmIChtYXRjaElu
dGVybmFsKG5vZGUsIHBhcmVudE5vZGUpKQogICAgIHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29s
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRj
aChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0V4cHJl
c3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC0xNjEsNyArMTYxLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkKK2Jvb2wgSW50
ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3QK
IHsKICAgICBpZiAoKG1NYXNrICYga1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbikgIT0g
MCkKICAgICB7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKChtTWFzayAmIGtNdWx0aURlY2xhcmF0aW9u
KSAhPSAwKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAppbmRleCBlOWM0YmNmYTUzMWZhOTQzYWZlNTRj
MDYzZWNlYWUyMDc3OGIzOTJlLi42ZjNkODczNTU2NzRlMGM4N2E3ZWQ0Nzc1ODdjNzIwNDQ1NTJk
ZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVQYXR0ZXJuTWF0Y2hlci5oCkBAIC0yOCw1MiArMjgsNTIgQEAgY2xhc3MgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyCiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rv
ck9yTWF0cml4KFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogICAgIHN0YXRpYyBib29sIElzRHluYW1p
Y0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAotICAgIGVu
dW0gUGF0dGVyblR5cGUKKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CiAgICAg
ewogICAgICAgICAvLyBNYXRjaGVzIGV4cHJlc3Npb25zIHRoYXQgYXJlIHVuZm9sZGVkIHRvIGlm
IHN0YXRlbWVudHMgYnkgVW5mb2xkU2hvcnRDaXJjdWl0VG9JZgotICAgICAgICBrVW5mb2xkZWRT
aG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorICAgICAgICBrVW5mb2xkZWRTaG9ydENp
cmN1aXRFeHByZXNzaW9uID0gMXUgPDwgMHUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBleHByZXNz
aW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBzdGF0
ZW1lbnRzIHdoZXJlIGEKICAgICAgICAgLy8gY29uc3RydWN0b3Igb3IgZnVuY3Rpb24gY2FsbCBy
ZXN1bHQgaXMgYXNzaWduZWQuCi0gICAgICAgIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkgPSAw
eDAwMDEgPDwgMSwKKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1IDw8IDF1
LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZHluYW1pYyBpbmRleGluZyBvZiB2ZWN0b3JzIG9yIG1h
dHJpY2VzIGluIGwtdmFsdWVzLgotICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1h
dHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisgICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZl
Y3Rvck9yTWF0cml4SW5MVmFsdWUgPSAxdSA8PCAydSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRl
Y2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFibGVzLgotICAgICAg
ICBrTXVsdGlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCAzLAorICAgICAgICBrTXVsdGlEZWNsYXJh
dGlvbiA9IDF1IDw8IDN1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIGFy
cmF5cy4KLSAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNCwKKyAgICAgICAg
a0FycmF5RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xh
cmF0aW9ucyBvZiBzdHJ1Y3RzIHdoZXJlIHRoZSBzdHJ1Y3QgdHlwZSBkb2VzIG5vdCBoYXZlIGEg
bmFtZS4KLSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwK
KyAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAxdSA8PCA1dSwKIAogICAgICAg
ICAvLyBNYXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhvZC4KLSAgICAgICAga0FycmF5TGVuZ3Ro
TWV0aG9kID0gMHgwMDAxIDw8IDYsCisgICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDF1IDw8
IDZ1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgYSB2ZWN0b3Igb3IgbWF0cml4IGNvbnN0cnVjdG9y
IHdob3NlIGFyZ3VtZW50cyBhcmUgc2NhbGFyaXplZCBieSB0aGUKICAgICAgICAgLy8gU0hfU0NB
TEFSSVpFX1ZFQ19PUl9NQVRfQ09OU1RSVUNUT1JfQVJHVU1FTlRTIHdvcmthcm91bmQuCi0gICAg
ICAgIGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisgICAgICAg
IGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDF1IDw8IDd1LAogICAgIH07CiAgICAg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKIAotICAg
IGJvb2wgbWF0Y2goVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1V
bmFyeSAqbm9kZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkg
Km5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKIAogICAgIC8vIFVzZSB0aGlz
IHZlcnNpb24gZm9yIGNoZWNraW5nIGJpbmFyeSBub2RlIG1hdGNoZXMgaW4gY2FzZSB5b3UncmUg
dXNpbmcgZmxhZwogICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCi0gICAgYm9vbCBtYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFy
ZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSk7CisgICAgYm9vbCBtYXRjaChUSW50
ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJl
cXVpcmVkSGVyZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJu
YXJ5ICpub2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7Cisg
ICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50
Tm9kZSkgY29uc3Q7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3Q7
CisgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OwogCiAgIHBy
aXZhdGU6CiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOwogCi0gICAgYm9vbCBtYXRjaElu
dGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpIGNvbnN0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
SW50ZXJtTm9kZV91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCmluZGV4IDZhYjEzYmE0
Njk1ZWMxYzQzMGJiYTFjNjI5NmE1NjFhNGY5NzQzMmUuLmQzZTFmY2EwMDE0Mjk5YjRjNDY5MzAy
N2NiNThkNmZkMGNlNjE2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuY3BwCkBAIC0yMjQsNiArMjI0LDUwIEBAIFRWYXJpYWJsZSAqRGVj
bGFyZVRlbXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgIHJldHVybiB2
YXJpYWJsZTsKIH0KIAorc3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gRGVjbGFyZVN0cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAg
VFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5
UXVhbGlmaWVyLAorICAgIHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVT
dHJpbmcgJnN0cnVjdFR5cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0
SW5zdGFuY2VOYW1lKQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9CisgICAgICAgIG5l
dyBUU3RydWN0dXJlKHN5bWJvbFRhYmxlLCBzdHJ1Y3RUeXBlTmFtZSwgZmllbGRMaXN0LCBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIGF1dG8gbWFrZVN0cnVjdHVyZVR5cGUgPSBb
Jl0oYm9vbCBpc1N0cnVjdFNwZWNpZmllcikgeworICAgICAgICBUVHlwZSAqc3RydWN0dXJlVHlw
ZSA9IG5ldyBUVHlwZShzdHJ1Y3R1cmUsIGlzU3RydWN0U3BlY2lmaWVyKTsKKyAgICAgICAgc3Ry
dWN0dXJlVHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgICAgIHN0cnVjdHVyZVR5
cGUtPnNldE1lbW9yeVF1YWxpZmllcihtZW1vcnlRdWFsaWZpZXIpOworICAgICAgICBpZiAoYXJy
YXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0dXJlVHlwZS0+bWFrZUFy
cmF5KGFycmF5U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisgICAgfTsKKworICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKworICAgIFRW
YXJpYWJsZSAqdHlwZVZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtFbXB0eUltbXV0
YWJsZVN0cmluZywgbWFrZVN0cnVjdHVyZVR5cGUodHJ1ZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisgICAgaW5zZXJ0U2VxdWVu
Y2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dHlwZVZhcn0pOworCisgICAgVFZh
cmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisgICAgaWYgKHN0cnVjdEluc3RhbmNlTmFt
ZSkKKyAgICB7CisgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJs
ZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisgICAgICAgIGluc2VydFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9u
e2luc3RhbmNlVmFyfSk7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0RnVuY3Rpb25JbmRleCA9
IEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KHJvb3QpOworICAgIHJvb3QtPmluc2Vy
dENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisKKyAgICBy
ZXR1cm4ge3R5cGVWYXIsIGluc3RhbmNlVmFyfTsKK30KKwogY29uc3QgVFZhcmlhYmxlICpEZWNs
YXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAppbmRleCAz
OWI4NmRkMWJmMjk2YjcwMzk1NmY3MTI2ZDA3NGJkNTlhY2U2YzRjLi5mNWQxYzkzNTgyYWEwZjUx
MTcwNTcyNjA1NTkzODViNmI3N2Y1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCkBAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRl
Y2xhcmVUZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsK
K3N0ZDo6cGFpcjxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxlICo+IERlY2xhcmVT
dHJ1Y3R1cmUoCisgICAgVEludGVybUJsb2NrICpyb290LAorICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LAorICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyLAorICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKyAg
ICB1aW50MzJfdCBhcnJheVNpemUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7
CiBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZp
ZWxkTGlzdCAqZmllbGRMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODM0NzM4ODU4YzBjOWZjNjcyODhlYjE1ZTYz
MzFhNTNhNDQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAKQEAgLTAs
MCArMSwxMDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisKKyNkZWZpbmUgR1VBUkQyKGNvbmQsIGZhaWxWYWwpIFwKKyAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCEoY29uZCkpICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsVmFsOyAgIFwKKyAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBH
VUFSRChjb25kKSBHVUFSRDIoY29uZCwgbnVsbHB0cikKKworbmFtZXNwYWNlIHNoCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5MSU5FIGJvb2wgQWxsQml0
cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhheXN0YWNrICYgbmVlZGxl
KSA9PSBuZWVkbGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5H
TEVfSU5MSU5FIGJvb2wgQW55Qml0cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1
cm4gKGhheXN0YWNrICYgbmVlZGxlKSAhPSAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVzdWx0ICZv
dGhlcikKKyAgICA6IG1BY3Rpb24ob3RoZXIubUFjdGlvbiksCisgICAgICBtVmlzaXQob3RoZXIu
bVZpc2l0KSwKKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisgICAgICBtTXVsdGkoc3Rk
Ojptb3ZlKG90aGVyLm1NdWx0aSkpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6
QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFj
dGlvbihBY3Rpb246OlJlcGxhY2VTaW5nbGUpLCBtVmlzaXQodmlzaXQpLCBtU2luZ2xlKCZub2Rl
KQore30KKworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5v
ZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkKKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6
UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisgICAgICBtVmlzaXQobm9kZSA/IHZpc2l0
IDogVmlzaXRCaXRzOjpOZWl0aGVyKSwKKyAgICAgIG1TaW5nbGUobm9kZSkKK3t9CisKK1RJbnRl
cm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KG51bGxwdHJfdCkKKyAgICA6IG1BY3Rp
b24oQWN0aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVs
bHB0cikKK3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwp
CisgICAgOiBtQWN0aW9uKEFjdGlvbjo6RmFpbCksIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIp
LCBtU2luZ2xlKG51bGxwdHIpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgIDogbUFjdGlv
bihBY3Rpb246OlJlcGxhY2VNdWx0aSksCisgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVy
KSwKKyAgICAgIG1TaW5nbGUobnVsbHB0ciksCisgICAgICBtTXVsdGkoc3RkOjptb3ZlKG5vZGVz
KSkKK3t9CisKK3ZvaWQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om1vdmVBc3NpZ25JbXBs
KEJhc2VSZXN1bHQgJm90aGVyKQoreworICAgIG1BY3Rpb24gPSBvdGhlci5tQWN0aW9uOworICAg
IG1WaXNpdCAgPSBvdGhlci5tVmlzaXQ7CisgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisg
ICAgbU11bHRpICA9IHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpOworfQorCitUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6TXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUo
bm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworICAgIG5vZGVzLmVyYXNlKGl0
LCBub2Rlcy5lbmQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7Cit9CisKK2Jvb2wg
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1BY3Rpb24gPT0gQWN0aW9uOjpGYWlsOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpCYXNl
UmVzdWx0Ojppc0Ryb3AoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6
RHJvcDsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpzaW5n
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtU2luZ2xlOworfQorCitjb25zdCBzdGQ6OnZlY3Rv
cjxUSW50ZXJtTm9kZSAqPiAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om11bHRpKCkgY29u
c3QKK3sKKyAgICBpZiAobUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmbU11bHRpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUHJlUmVzdWx0ID0gVEludGVybVJlYnVp
bGQ6OlByZVJlc3VsdDsKKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0
OjpQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVz
dWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQobnVsbHB0cl90KSA6IEJh
c2VSZXN1bHQobnVsbHB0cikge30KK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJl
c3VsdChGYWlsKCkpIHt9CisKK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhl
cikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0
ICYmb3RoZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KKwordm9pZCBQcmVSZXN1bHQ6Om9wZXJh
dG9yPShQcmVSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1wbChvdGhlcik7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJt
UmVidWlsZDo6UG9zdFJlc3VsdDsKKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9k
ZSAmbm9kZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KG51bGxwdHJfdCkg
OiBCYXNlUmVzdWx0KG51bGxwdHIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEZhaWwpIDog
QmFzZVJlc3VsdChGYWlsKCkpIHt9CisKK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoUG9zdFJlc3Vs
dCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0
KEJhc2VSZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFBvc3RS
ZXN1bHQ6Om9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpCit7CisgICAgbW92ZUFzc2lnbklt
cGwob3RoZXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUSW50ZXJtUmVidWls
ZDo6VEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNpdCwgYm9v
bCBwb3N0VmlzaXQpCisgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgbVN5bWJvbFRh
YmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbVByZVZpc2l0KHByZVZpc2l0
KSwKKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQoreworICAgIEFTU0VSVChwcmVWaXNpdCB8
fCBwb3N0VmlzaXQpOworfQorCitUSW50ZXJtUmVidWlsZDo6flRJbnRlcm1SZWJ1aWxkKCkKK3sK
KyAgICBBU1NFUlQoIW1Ob2RlU3RhY2sudmFsdWUpOworICAgIEFTU0VSVCghbU5vZGVTdGFjay50
YWlsKTsKK30KKworY29uc3QgVEZ1bmN0aW9uICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50RnVu
Y3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50RnVuYzsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisgICAgYXV0byBwYXJlbnQgPSAqbU5vZGVT
dGFjay50YWlsOworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgLS1vZmZz
ZXQ7CisgICAgICAgIEFTU0VSVChwYXJlbnQudGFpbCk7CisgICAgICAgIHBhcmVudCA9ICpwYXJl
bnQudGFpbDsKKyAgICB9CisgICAgcmV0dXJuIHBhcmVudC52YWx1ZTsKK30KKworYm9vbCBUSW50
ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICgh
cmVidWlsZEluUGxhY2Uocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBtQ29tcGlsZXIudmFsaWRhdGVBU1QoJnJvb3QpOworfQorCitib29sIFRJ
bnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQorewor
ICAgIHJldHVybiByZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICByZXR1cm4g
cmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1
aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHJlYnVp
bGRJblBsYWNlSW1wbChub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+Citib29s
IFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKK3sKKyAgICBh
dXRvICpuZXdOb2RlID0gdHJhdmVyc2VBbnlBczxOb2RlPihub2RlKTsKKyAgICBpZiAoIW5ld05v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5ld05v
ZGUgIT0gJm5vZGUpCisgICAgeworICAgICAgICAqbm9kZS5nZXRTZXF1ZW5jZSgpID0gc3RkOjpt
b3ZlKCpuZXdOb2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6cmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSkKK3sKKyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorTm9kZSAqVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgIXJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBhc05vZGU8Tm9kZT4ocmVzdWx0Lm1TaW5nbGUpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
QW55QXMoVEludGVybU5vZGUgJm5vZGUsIE5vZGUgKiZvdXQpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgcmVzdWx0Lm1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVsdGkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb3V0ID0gYXNOb2RlPE5v
ZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyAgICByZXR1cm4gb3V0OworfQorCitib29sIFRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFz
ZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBjaGlsZHJlbiA9IG5vZGUuZ2V0U2VxdWVuY2Uo
KTsKKyAgICBBU1NFUlQoY2hpbGRyZW4pOworICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJl
bjsKKworICAgIGZvciAoVEludGVybU5vZGUgKmNoaWxkIDogKmNoaWxkcmVuKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNoaWxkKTsKKyAgICAgICAgUG9zdFJlc3VsdCByZXN1bHQodHJhdmVyc2VB
bnkoKmNoaWxkKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQubUFjdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisgICAgICAgICAgICAg
ICAgbmV3Q2hpbGRyZW4ucHVzaF9iYWNrKHJlc3VsdC5tU2luZ2xlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VNdWx0aToKKyAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpuZXdOb2RlIDogcmVzdWx0Lm1NdWx0aSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNo
X2JhY2sobmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpEcm9w
OgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6RmFp
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAqY2hpbGRyZW4gPSBzdGQ6Om1vdmUobmV3Q2hpbGRyZW4pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0cnVjdCBUSW50ZXJtUmVidWlsZDo6
Tm9kZVN0YWNrR3VhcmQKK3sKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBvbGROb2RlU3Rh
Y2s7CisgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gJm5vZGVTdGFjazsKKyAgICBOb2RlU3Rh
Y2tHdWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorICAgICAgICA6IG9s
ZE5vZGVTdGFjayhub2RlU3RhY2spLCBub2RlU3RhY2sobm9kZVN0YWNrKQorICAgIHt9CisgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KK307CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5h
bE5vZGUpCit7CisgICAgUHJlUmVzdWx0IHByZVJlc3VsdCA9IHRyYXZlcnNlUHJlKG9yaWdpbmFs
Tm9kZSk7CisgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChwcmVSZXN1bHQubVZpc2l0ID09IFZpc2l0Qml0czo6TmVpdGhlcik7CisgICAgICAgIHJldHVy
biBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5v
ZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKyAgICBjb25zdCBWaXNpdEJpdHMgdmlzaXQg
ICAgICAgPSBwcmVSZXN1bHQubVZpc2l0OworICAgIGNvbnN0IE5vZGVUeXBlIGN1cnJOb2RlVHlw
ZSA9IGdldE5vZGVUeXBlKCpjdXJyTm9kZSk7CisKKyAgICBjdXJyTm9kZSA9IHRyYXZlcnNlQ2hp
bGRyZW4oY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwgdmlzaXQpOworICAg
IGlmICghY3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRmFpbCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cmF2ZXJzZVBvc3QoY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJy
Tm9kZSwgdmlzaXQpOworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlUHJl
KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpCit7CisgICAgaWYgKCFtUHJlVmlzaXQpCisgICAg
eworICAgICAgICByZXR1cm4ge29yaWdpbmFsTm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyAgICB9
CisKKyAgICBOb2RlU3RhY2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNr
ID0geyZvcmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgY29uc3QgTm9k
ZVR5cGUgb3JpZ2luYWxOb2RlVHlwZSA9IGdldE5vZGVUeXBlKG9yaWdpbmFsTm9kZSk7CisKKyAg
ICBzd2l0Y2ggKG9yaWdpbmFsTm9kZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBl
OjpVbmtub3duOgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
biBGYWlsKCk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFN5bWJvbFByZSgqb3JpZ2luYWxOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2
aXNpdENvbnN0YW50VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Z1bmN0
aW9uUHJvdG90eXBlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29y
RGlyZWN0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZl
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNQcmVwcm9jZXNzb3JEaXJlY3RpdmUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
QmluYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QmluYXJ5UHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCaW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0VGVybmFyeVByZSgqb3JpZ2luYWxOb2RlLmdldEFzVGVybmFy
eU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
SWZFbHNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0Y2hQcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNh
c2U6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXND
YXNlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKCpvcmlnaW5hbE5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFn
Z3JlZ2F0ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVByZSgqb3JpZ2luYWxO
b2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSgKKyAg
ICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25Ob2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdERlY2xhcmF0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNEZWNsYXJh
dGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRMb29wUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNo
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBlIGN1cnJOb2Rl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCit7CisgICAg
aWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFueUJpdHModmlzaXQsIFZpc2l0
Qml0czo6Q2hpbGRyZW5SZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0gJmN1cnJOb2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBOb2RlU3Rh
Y2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwg
Jmd1YXJkLm9sZE5vZGVTdGFja307CisKKyAgICBzd2l0Y2ggKGN1cnJOb2RlVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVy
biAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2
ZToKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAg
ICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Jp
bmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzVGVybmFyeU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1
cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUlmRWxzZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVN3aXRj
aENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9u
RGVmaW5pdGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQWdn
cmVnYXRlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpCbG9jazoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAqY3Vyck5vZGUu
Z2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRGVjbGFyYXRp
b25DaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNh
c2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VMb29wQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJy
YW5jaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9k
ZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1
cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCkKK3sKKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisgICAgeworICAgICAgICByZXR1cm4g
Y3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBv
c3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAgIGlmIChB
bnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBvc3RSZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5v
ZGUgIT0gJmN1cnJOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0K
KworICAgIE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sg
PSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5v
ZGVUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbCgpOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0
KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNv
bnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDb25zdGFudFVuaW9uUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpG
dW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUG9zdCgqY3Vyck5vZGUuZ2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vz
c29yRGlyZWN0aXZlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmFyeToKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFVuYXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNVbmFyeU5vZGUoKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJp
bmFyeVBvc3QoKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6VGVybmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJy
Tm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l6emxl
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpenpsZVBvc3QoKmN1cnJOb2RlLmdldEFzU3dp
enpsZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAg
IHJldHVybiB2aXNpdElmRWxzZVBvc3QoKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dp
dGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpDYXNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Q2FzZVBvc3QoKmN1cnJOb2RlLmdl
dEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlv
bjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoKmN1cnJO
b2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpB
Z2dyZWdhdGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9k
ZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmxvY2s6CisgICAg
ICAgICAgICByZXR1cm4gdmlzaXRCbG9ja1Bvc3QoKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorICAgICAg
ICAgICAgICAgICpjdXJyTm9kZS5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1
cm4gdmlzaXREZWNsYXJhdGlvblBvc3QoKmN1cnJOb2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkp
OworICAgICAgICBjYXNlIE5vZGVUeXBlOjpMb29wOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
TG9vcFBvc3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5
cGU6OkJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJyYW5jaFBvc3QoKmN1cnJOb2Rl
LmdldEFzQnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJl
bihUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJh
c2VDaGlsZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJh
dmVyc2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBpZiAodHJhdmVy
c2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gJm5v
ZGU7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitUSW50ZXJtTm9kZSAqVEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlRGVjbGFyYXRpb25DaGlsZHJlbihUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJl
bihUSW50ZXJtU3dpenpsZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqbmV3T3Bl
cmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQo
bmV3T3BlcmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6
bGVPZmZzZXRzKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkg
Jm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgbGVmdCA9IG5vZGUuZ2V0TGVmdCgpOworICAgIEFT
U0VSVChsZWZ0KTsKKyAgICBhdXRvICpjb25zdCByaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAg
ICBBU1NFUlQocmlnaHQpOworCisgICAgYXV0byAqY29uc3QgbmV3TGVmdCA9IHRyYXZlcnNlQW55
QXM8VEludGVybVR5cGVkPigqbGVmdCk7CisgICAgR1VBUkQobmV3TGVmdCk7CisgICAgYXV0byAq
Y29uc3QgbmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKyAg
ICBHVUFSRChuZXdSaWdodCk7CisKKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0
ICE9IHJpZ2h0KQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRPcCgpOwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG5ld0xlZnQtPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dEludGVyZmFjZUJsb2NrOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgICAgICByZXR1cm4gVElu
dGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRT
aGFkZXJWZXJzaW9uKCkpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9w
LCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihUSW50ZXJt
VW5hcnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFu
ZCgpOworICAgIEFTU0VSVChvcGVyYW5kKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld09wZXJhbmQg
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworICAgIEdVQVJEKG5ld09w
ZXJhbmQpOworCisgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgVEludGVybVVuYXJ5KG5vZGUuZ2V0T3AoKSwgbmV3T3BlcmFuZCwgbm9kZS5n
ZXRGdW5jdGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1O
b2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5h
cnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7
CisgICAgQVNTRVJUKGNvbmQpOworICAgIGF1dG8gKmNvbnN0IHRydWVfID0gbm9kZS5nZXRUcnVl
RXhwcmVzc2lvbigpOworICAgIEFTU0VSVCh0cnVlXyk7CisgICAgYXV0byAqY29uc3QgZmFsc2Vf
ID0gbm9kZS5nZXRGYWxzZUV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZmFsc2VfKTsKKworICAg
IGF1dG8gKmNvbnN0IG5ld0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQp
OworICAgIEdVQVJEKG5ld0NvbmQpOworICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJz
ZUFueUFzPFRJbnRlcm1UeXBlZD4oKnRydWVfKTsKKyAgICBHVUFSRChuZXdUcnVlKTsKKyAgICBh
dXRvICpjb25zdCBuZXdGYWxzZSA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqZmFsc2Vf
KTsKKyAgICBHVUFSRChuZXdGYWxzZSk7CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5l
d1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBUSW50ZXJtVGVybmFyeShuZXdDb25kLCBuZXdUcnVlLCBuZXdGYWxzZSk7CisgICAg
fQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICBhdXRv
ICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCk7Cisg
ICAgYXV0byAqY29uc3QgdHJ1ZV8gID0gbm9kZS5nZXRUcnVlQmxvY2soKTsKKyAgICBhdXRvICpj
b25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKworICAgIGF1dG8gKmNvbnN0IG5l
d0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAgIEdVQVJEKG5l
d0NvbmQpOworICAgIFRJbnRlcm1CbG9jayAqbmV3VHJ1ZSA9IG51bGxwdHI7CisgICAgaWYgKHRy
dWVfKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqdHJ1ZV8sIG5ld1RydWUp
KTsKKyAgICB9CisgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisgICAgaWYg
KGZhbHNlXykKKyAgICB7CisgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNlXywgbmV3
RmFsc2UpKTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUgIT0g
dHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtSWZFbHNlKG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VT
d2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGlu
aXQgPSBub2RlLmdldEluaXQoKTsKKyAgICBBU1NFUlQoaW5pdCk7CisgICAgYXV0byAqY29uc3Qg
c3RtdHMgPSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKyAgICBBU1NFUlQoc3RtdHMpOworCisg
ICAgYXV0byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5p
dCk7CisgICAgR1VBUkQobmV3SW5pdCk7CisgICAgYXV0byAqY29uc3QgbmV3U3RtdHMgPSB0cmF2
ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4oKnN0bXRzKTsKKyAgICBHVUFSRChuZXdTdG10cyk7CisK
KyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld1N0bXRzICE9IHN0bXRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpdGNoKG5ld0luaXQsIG5ld1N0bXRzKTsKKyAgICB9
CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgYXV0byAqY29u
c3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0Nv
bmQgPSBudWxscHRyOworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVy
c2VBbnlBcygqY29uZCwgbmV3Q29uZCkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNv
bmQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1DYXNlKG5ld0NvbmQpOworICAg
IH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxk
Ojp0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxkcmVuKFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gJm5vZGUpCit7CisgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRl
ZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisgICAgbVBhcmVudEZ1bmMgPSBub2RlLmdldEZ1
bmN0aW9uKCk7CisgICAgc3RydWN0IE9uRXhpdAorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uIComcGFyZW50RnVuYzsKKyAgICAgICAgT25FeGl0KGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVu
dEZ1bmMpIDogcGFyZW50RnVuYyhwYXJlbnRGdW5jKSB7fQorICAgICAgICB+T25FeGl0KCkgeyBw
YXJlbnRGdW5jID0gbnVsbHB0cjsgfQorICAgIH0gb25FeGl0KG1QYXJlbnRGdW5jKTsKKworICAg
IGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgIEFT
U0VSVChwcm90byk7CisgICAgYXV0byAqY29uc3QgYm9keSA9IG5vZGUuZ2V0Qm9keSgpOworICAg
IEFTU0VSVChib2R5KTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1Byb3RvID0gdHJhdmVyc2VBbnlB
czxUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU+KCpwcm90byk7CisgICAgR1VBUkQobmV3UHJvdG8p
OworICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4o
KmJvZHkpOworICAgIEdVQVJEKG5ld0JvZHkpOworCisgICAgaWYgKG5ld1Byb3RvICE9IHByb3Rv
IHx8IG5ld0JvZHkgIT0gYm9keSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJu
ICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRT
eW1ib2woKTsKKyAgICBBU1NFUlQoc3ltYm9sKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJv
bCA9IHRyYXZlcnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisgICAgR1VBUkQobmV3
U3ltYm9sKTsKKworICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24obmV3U3ltYm9sLCBu
b2RlLmlzUHJlY2lzZSgpLCBub2RlLmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZu
b2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxk
cmVuKFRJbnRlcm1Mb29wICZub2RlKQoreworICAgIGNvbnN0IFRMb29wVHlwZSBsb29wVHlwZSA9
IG5vZGUuZ2V0VHlwZSgpOworCisgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgp
OworICAgIGF1dG8gKmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIGF1dG8g
KmNvbnN0IGV4cHIgPSBub2RlLmdldEV4cHJlc3Npb24oKTsKKyAgICBhdXRvICpjb25zdCBib2R5
ID0gbm9kZS5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOworCisjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfQVNTRVJUUykKKyAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BE
b1doaWxlOgorICAgICAgICAgICAgQVNTRVJUKGNvbmQpOworICAgICAgICAgICAgQVNTRVJUKCFp
bml0ICYmICFleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAg
YXV0byAqY29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqYm9keSk7
CisgICAgR1VBUkQobmV3Qm9keSk7CisgICAgVEludGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRy
OworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5p
dCwgbmV3SW5pdCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBudWxscHRy
OworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqY29u
ZCwgbmV3Q29uZCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRy
OworICAgIGlmIChleHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZXhw
ciwgbmV3RXhwcikpOworICAgIH0KKworICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3Q29u
ZCAhPSBjb25kIHx8IG5ld0V4cHIgIT0gZXhwciB8fCBuZXdCb2R5ICE9IGJvZHkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRM
b29wVHlwZTo6RUxvb3BGb3I6CisgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BXaGls
ZToKKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisgICAgICAgICAg
ICAgICAgR1VBUkQobmV3Q29uZCAmJiBuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBHVUFSRCgh
bmV3SW5pdCAmJiAhbmV3RXhwcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtTG9vcChsb29wVHlwZSwgbmV3SW5pdCwgbmV3Q29u
ZCwgbmV3RXhwciwgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVy
bUJyYW5jaCAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBleHByID0gbm9kZS5nZXRFeHByZXNz
aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAgIGlmIChl
eHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpl
eHByLCBuZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUJyYW5jaChub2RlLmdldEZsb3dPcCgpLCBuZXdF
eHByKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQcmUoVEludGVy
bVN5bWJvbCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9
CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpC
b3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAm
bm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCit7
CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAg
cmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSkKK3sKKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiB7
bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2
aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwg
VmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3
aXRjaFByZShUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQcmUo
VEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFByZShUSW50ZXJtTG9v
cCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1By
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9k
ZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVS
ZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsK
K30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkK
K3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9z
dChUSW50ZXJtU3ltYm9sICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRl
cm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0
IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Qmlu
YXJ5UG9zdChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVy
biBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBvc3Qo
VEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUp
Cit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZp
c2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKQoreworICAgIHJldHVybiBub2RlOwor
fQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkKK3sK
KyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRB
Z2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiBub2Rl
OworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCgKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5v
ZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5
N2U0MGUzNTU0YjZjMDlmNjZkY2NlY2Q5YmExNWUzNDRmNTJhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgKQEAgLTAsMCArMSwzMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIgorCituYW1lc3BhY2Ug
c2gKK3sKKworLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKy8vIFRoaXMgY2xh
c3MgaXMgaW50ZW5kZWQgdG8gYmUgZGVyaXZlZCB3aXRoIG92ZXJyaWRkZW4gdmlzaXRYWFggZnVu
Y3Rpb25zLgorLy8KKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZl
IGEgVmlzaXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisvLyBleGFj
dGx5IG9uY2UsIHJlZ2FyZGxlc3Mgb2YgKHByZVZpc2l0KSBvciAocG9zdFZpc2l0KSB2YWx1ZXMu
CisKKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIg
YmVoYXZlcyBhcyBmb2xsb3dzOgorLy8gICAgKiBJZiAocHJlVmlzaXQpOgorLy8gICAgICAtIFRo
ZSBub2RlIGlzIHZpc2l0ZWQgYmVmb3JlIGNoaWxkcmVuIGFyZSB0cmF2ZXJzZWQuCisvLyAgICAg
IC0gVGhlIHJldHVybmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2Rl
LiBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisvLyAgICAgICAgYXMgdGhlIG9y
aWdpbmFsIG5vZGUuCisvLyAgICAgIC0gSWYgbXVsdGlwbGUgbm9kZXMgYXJlIHJldHVybmVkLCBj
aGlsZHJlbiBhbmQgcG9zdCB2aXNpdHMgb2YgdGhlIHJldHVybmVkIG5vZGVzIGFyZSBub3QKKy8v
ICAgICAgICBwcmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4K
Ky8vICAgICogSWYgKGNoaWxkVmlzaXQpCisvLyAgICAgIC0gSWYgYW55IG5ldyBjaGlsZHJlbiBh
cmUgcmV0dXJuZWQsIHRoZSBub2RlIGlzIGF1dG9tYXRpY2FsbHkgcmVidWlsdCB3aXRoIHRoZSBu
ZXcgY2hpbGRyZW4KKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKy8vICAgICAgLSBEZXBl
bmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIG5vZGUsIG51bGwgY2hpbGRyZW4gbWF5IGJlIGRpc2Nh
cmRlZC4KKy8vICAgICAgLSBJbGwtdHlwZWQgY2hpbGRyZW4gY2F1c2UgcmVidWlsZCBlcnJvcnMu
IElsbC10eXBlZCBtZWFucyB0aGUgbm9kZSB0byBhdXRvbWF0aWNhbGx5IHJlYnVpbGQKKy8vICAg
ICAgICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8g
aXRzIGNvbnN0cnVjdG9yLgorLy8gICAgICAtIE9ubHkgaW5zdGFuY2VzIG9mIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlIGNhbiBhY2NlcHQgTXVsdGkgcmVzdWx0cyBmb3IgYW55IG9mIGl0cyBjaGlsZHJl
bi4KKy8vICAgICAgICBJZiBzdXBwbGllZCwgdGhlIG5vZGVzIGFyZSBzcGxpY2VkIGNoaWxkcmVu
IGF0IHRoZSBzcG90IG9mIHRoZSBvcmlnaW5hbCBjaGlsZC4KKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKy8vICAgICAgLSBUaGUgbm9kZSBpcyB2aXNpdGVkIGFmdGVyIGFueSBjaGlsZHJlbiBhcmUg
dHJhdmVyc2VkLgorLy8gICAgICAtIE9ubHkgYWZ0ZXIgc3VjaCBhIHJlYnVpbGQgKG9yIGxhY2sg
dGhlcmVvZiksIHRoZSBwb3N0LXZpc2l0IGlzIHBlcmZvcm1lZC4KKy8vCisvLyBOb2RlcyBpbiB2
aXNpdCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgaW4gcGxhY2UsIGluY2x1
ZGluZyBUSW50ZXJtQWdncmVnYXRlQmFzZQorLy8gY2hpbGQgc2VxdWVuY2VzLgorLy8KKy8vIFRo
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiBhbGwgdGhlIHZpc2l0WFhYIGZ1bmN0aW9ucyBz
dXBwb3J0IGZ1bGwgcHJlIGFuZCBwb3N0IHRyYXZlcnNhbAorLy8gd2l0aG91dCBtb2RpZnlpbmcg
dGhlIHZpc2l0ZWQgbm9kZXMuCisvLworY2xhc3MgVEludGVybVJlYnVpbGQgOiBhbmdsZTo6Tm9u
Q29weWFibGUKK3sKKworICAgIGVudW0gY2xhc3MgQWN0aW9uCisgICAgeworICAgICAgICBSZXBs
YWNlU2luZ2xlLAorICAgICAgICBSZXBsYWNlTXVsdGksCisgICAgICAgIERyb3AsCisgICAgICAg
IEZhaWwsCisgICAgfTsKKworICBwdWJsaWM6CisgICAgc3RydWN0IEZhaWwKKyAgICB7fTsKKwor
ICAgIGVudW0gVmlzaXRCaXRzIDogc2l6ZV90CisgICAgeworICAgICAgICAvLyBObyBiaXRzIGFy
ZSBzZXQuCisgICAgICAgIEVtcHR5ID0gMHUsCisKKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2Yg
cmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgorICAgICAgICBDaGlsZHJlbiA9IDF1IDw8IDB1LAor
CisgICAgICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKyAgICAgICAg
UG9zdCA9IDF1IDw8IDF1LAorCisgICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZp
c2l0IGlmIHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorICAgICAgICBDaGlsZHJlblJlcXVpcmVzU2FtZSA9IDF1IDw8IDJ1LAorCisgICAgICAgIC8v
IElmIChQb3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNh
bWUgYXMgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIFBvc3RSZXF1aXJlc1NhbWUgPSAxdSA8
PCAzdSwKKworICAgICAgICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBv
c3RSZXF1aXJlc1NhbWUsCisgICAgICAgIE5laXRoZXIgICAgICA9IEVtcHR5LAorICAgICAgICBC
b3RoICAgICAgICAgPSBDaGlsZHJlbiB8IFBvc3QsCisgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJv
dGggfCBSZXF1aXJlU2FtZSwKKyAgICB9OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVT
dGFja0d1YXJkOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENvbnNM
aXN0CisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBDb25zTGlzdDxUPiAqdGFpbDsK
KyAgICB9OworCisgICAgY2xhc3MgQmFzZVJlc3VsdAorICAgIHsKKyAgICAgICAgQmFzZVJlc3Vs
dChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworICAgICAgICBCYXNlUmVzdWx0ICZvcGVy
YXRvcj0oY29uc3QgQmFzZVJlc3VsdCAmKSA9IGRlbGV0ZTsKKworICAgICAgcHVibGljOgorICAg
ICAgICBCYXNlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBC
YXNlUmVzdWx0KEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGNvbnN0
cnVjdG9yIGltcGxzCisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQobnVsbHB0cl90KTsKKyAgICAgICAgQmFz
ZVJlc3VsdChGYWlsKTsKKyAgICAgICAgQmFzZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmJm5vZGVzKTsKKworICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQg
Jm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworCisgICAgICAgIHN0
YXRpYyBCYXNlUmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBzdGF0aWMgQmFz
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vZGVzOworICAgICAgICAg
ICAgZm9yIChJdGVyIG5vZGVzQ3VyciA9IG5vZGVzQmVnaW47IG5vZGVzQ3VyciAhPSBub2Rlc0Vu
ZDsgKytub2Rlc0N1cnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVz
aF9iYWNrKCpub2Rlc0N1cnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShub2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0
OworICAgICAgICBib29sIGlzRHJvcCgpIGNvbnN0OworICAgICAgICBUSW50ZXJtTm9kZSAqc2lu
Z2xlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpt
dWx0aSgpIGNvbnN0OworCisgICAgICBwdWJsaWM6CisgICAgICAgIEFjdGlvbiBtQWN0aW9uOwor
ICAgICAgICBWaXNpdEJpdHMgbVZpc2l0OworICAgICAgICBUSW50ZXJtTm9kZSAqbVNpbmdsZTsK
KyAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworICAgIH07CisKKyAg
cHVibGljOgorICAgIGNsYXNzIFByZVJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorICAgIHsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworCisgICAgICBwdWJsaWM6Cisg
ICAgICAgIFByZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFByZVJlc3VsdChU
SW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNh
bWUpOworICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNp
dCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJf
dCk7ICAvLyBVc2VkIHRvIGRyb3AgYSBub2RlLgorICAgICAgICBQcmVSZXN1bHQoRmFpbCk7ICAg
ICAgIC8vIFVzZWQgdG8gc2lnbmFsIGZhaWx1cmUuCisKKyAgICAgICAgdm9pZCBvcGVyYXRvcj0o
UHJlUmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVsdGkoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2RlcykpOworICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBQcmVSZXN1
bHQgTXVsdGkoSXRlciBub2Rlc0JlZ2luLCBJdGVyIG5vZGVzRW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworICAgICAgICB1
c2luZyBCYXNlUmVzdWx0Ojppc0ZhaWw7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRp
OworICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisKKyAgICAgIHByaXZhdGU6Cisg
ICAgICAgIFByZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAgIH07CisKKyAgICBjbGFz
cyBQb3N0UmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBmcmllbmQg
Y2xhc3MgVEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgUG9zdFJlc3Vs
dChQb3N0UmVzdWx0ICYmb3RoZXIpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZu
b2RlKTsKKyAgICAgICAgUG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgICAgIFBv
c3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUKKyAgICAgICAgUG9z
dFJlc3VsdChGYWlsKTsgICAgICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAg
ICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQ
b3N0UmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9k
ZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAg
ICAgICBzdGF0aWMgUG9zdFJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNF
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rl
c0JlZ2luLCBub2Rlc0VuZCk7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0
Ojppc0Ryb3A7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNp
bmcgQmFzZVJlc3VsdDo6bXVsdGk7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsK
KworICAgICAgcHJpdmF0ZToKKyAgICAgICAgUG9zdFJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIp
OworICAgIH07CisKKyAgcHVibGljOgorICAgIFRJbnRlcm1SZWJ1aWxkKFRDb21waWxlciAmY29t
cGlsZXIsIGJvb2wgcHJlVmlzaXQsIGJvb2wgcG9zdFZpc2l0KTsKKworICAgIHZpcnR1YWwgflRJ
bnRlcm1SZWJ1aWxkKCk7CisKKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisgICAgLy8gcm9vdCwgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuIGJlY29tZSB0aGF0IG9mIHRo
ZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUKKyAgICAvLyBvY2N1
cnJlZC4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2Nr
ICZyb290KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1i
b2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRD
b25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJl
Y3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVh
bCBQcmVSZXN1bHQgdmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1
YWwgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIHZp
cnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7Cisg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZu
b2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNo
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNhc2Ug
Jm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5j
aCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QmxvY2tQ
cmUoVEludGVybUJsb2NrICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEFnZ3Jl
Z2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UHJlKFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICB2aXJ0
dWFsIFBvc3RSZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3Rv
dHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNz
b3JEaXJlY3RpdmUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9z
dChUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFy
eVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0
VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3Vs
dCB2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSk7CisgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUp
OworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChU
SW50ZXJtQmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0
ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8v
IENhbiBiZSB1c2VkIHRvIHJlYnVpbGQgYSBzcGVjaWZpYyBub2RlIGR1cmluZyBhIHRyYXZlcnNh
bC4gVXNlZnVsIGZvciBmaW5lIGNvbnRyb2wgb2YKKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdz
IGNoaWxkcmVuLgorICAgIEFOR0xFX05PX0RJU0NBUkQgUG9zdFJlc3VsdCByZWJ1aWxkKFRJbnRl
cm1Ob2RlICZub2RlKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBs
YWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGls
ZHJlbgorICAgIC8vIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5z
IGZhbHNlIGlmIGZhaWx1cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJl
YnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMg
dGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJu
ZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5l
dyBub2RlIGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBB
TkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsK
KworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBu
b2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJblBsYWNlKFRJ
bnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVs
b3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9u
IHRoYXQgZW5jbG9zZXMKKyAgICAvLyB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZS4gKFRoaXMg
cmV0dXJucyBudWxsIGlmIGF0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS4pCisgICAgY29u
c3QgVEZ1bmN0aW9uICpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0OworCisgICAgVEludGVybU5v
ZGUgKmdldFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCA9IDApIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29s
IHJlYnVpbGRJblBsYWNlSW1wbChOb2RlICZub2RlKTsKKworICAgIFBvc3RSZXN1bHQgdHJhdmVy
c2VBbnkoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+
CisgICAgTm9kZSAqdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4KKyAgICBib29sIHRyYXZlcnNlQW55QXMoVEludGVybU5vZGUg
Jm5vZGUsIE5vZGUgKiZvdXQpOworCisgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJbnRlcm1O
b2RlICZvcmlnaW5hbE5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUNoaWxkcmVuKE5v
ZGVUeXBlIGN1cnJOb2RlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpOworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VQb3N0
KE5vZGVUeXBlIG5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJ
bnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybU5vZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCk7CisKKyAgICBib29sIHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRl
cm1BZ2dyZWdhdGVCYXNlICZub2RlKTsKKworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5
Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VC
aW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJh
dmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1O
b2RlICp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSk7
CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlU3dpdGNoQ2hpbGRyZW4oVEludGVybVN3aXRjaCAm
bm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNl
ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxv
b3AgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKFRJbnRl
cm1CcmFuY2ggJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hp
bGRyZW4oVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVy
c2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlQWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uICZub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVENvbXBpbGVyICZtQ29t
cGlsZXI7CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAgY29uc3QgVEZ1bmN0
aW9uICptUGFyZW50RnVuYyA9IG51bGxwdHI7CisgICAgR2V0Tm9kZVR5cGUgZ2V0Tm9kZVR5cGU7
CisKKyAgcHJpdmF0ZToKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBtTm9kZVN0YWNre251
bGxwdHIsIG51bGxwdHJ9OworICAgIGJvb2wgbVByZVZpc2l0OworICAgIGJvb2wgbVBvc3RWaXNp
dDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvTm9kZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTllNWFmMmQ1YWFjY2I1Y2I5MGUyNDJkNTBkZjg0
ZWZlMDljYzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKQEAgLTAsMCArMSwxNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RF
VFlQRV9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVUWVBFX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJz
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworZW51bSBjbGFzcyBOb2RlVHlwZQoreworICAgIFVu
a25vd24sCisgICAgU3ltYm9sLAorICAgIENvbnN0YW50VW5pb24sCisgICAgRnVuY3Rpb25Qcm90
b3R5cGUsCisgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorICAgIFVuYXJ5LAorICAgIEJpbmFy
eSwKKyAgICBUZXJuYXJ5LAorICAgIFN3aXp6bGUsCisgICAgSWZFbHNlLAorICAgIFN3aXRjaCwK
KyAgICBDYXNlLAorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiwKKyAgICBBZ2dyZWdhdGUsCisgICAg
QmxvY2ssCisgICAgR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24sCisgICAgRGVjbGFyYXRpb24s
CisgICAgTG9vcCwKKyAgICBCcmFuY2gsCit9OworCisvLyBUaGlzIGlzIGEgZnVuY3Rpb24gbGlr
ZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHRoYXQgc3RhY2sgYWxsb2NhdGVzIHRoaXMg
YmVjYXVzZQorLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1
Y3QuCitjbGFzcyBHZXROb2RlVHlwZSA6IHByaXZhdGUgVEludGVybVRyYXZlcnNlcgoreworICAg
IE5vZGVUeXBlIG5vZGVUeXBlOworCisgIHB1YmxpYzoKKyAgICBHZXROb2RlVHlwZSgpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisKKyAgICBOb2RlVHlwZSBvcGVy
YXRvcigpKFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52aXNpdChWaXNp
dDo6UHJlVmlzaXQsIHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZVR5cGU7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRl
IHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9sOyB9CisKKyAgICB2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZSB7IG5vZGVUeXBlID0gTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb247IH0KKworICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlw
ZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQg
dmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAq
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6UHJlcHJvY2Vz
c29yRGlyZWN0aXZlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50
ZXJtU3dpenpsZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlw
ZTo6U3dpenpsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG5vZGVUeXBlID0gTm9kZVR5cGU6OkJpbmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopIG92ZXJyaWRl
CisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpVbmFyeTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJt
VGVybmFyeSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6
VGVybmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRJ
ZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OklmRWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXRjaDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2Fz
ZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q2FzZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OkFnZ3JlZ2F0ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCbG9jazsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
bjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXREZWNsYXJh
dGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpEZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6TG9vcDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRl
cm1CcmFuY2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
OkJyYW5jaDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVz
cGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZ
UEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdXRpbC5jcHAKaW5kZXggMzQ2NDcwZTRiMjA1M2Y0YzkyMDJkNjVjMTZmM2Ix
NDUxNjgxNTI4Yy4uNTgyZGRjNzBjOTZjMGFkYTAwMTY1YzIxY2ExZTk2NmY3OTU4NGFhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdXRpbC5jcHAKQEAgLTgwNCw2ICs4MDQsMTAgQEAgYm9vbCBJc091dHB1dE1ldGFsKFNo
U2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVU
QUxfT1VUUFVUOwogfQorYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91
dHB1dCkKK3sKKyAgICByZXR1cm4gb3V0cHV0ID09IFNIX01TTF9NRVRBTF9PVVRQVVQ7Cit9CiAK
IGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmgKaW5kZXggNTNlZTc1NTIwM2Q5Mjg4YjkyZGJiMjYwYmYyNGE1Y2FhNDFlMzE5NS4uZjlh
ZTliYjFkNmVhNDMwYTUzMDQ3MzhjMzQ3NzNmMTI3N2YxNjExNCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApAQCAt
NzcsNiArNzcsNyBAQCBib29sIElzT3V0cHV0R0xTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwog
Ym9vbCBJc091dHB1dEhMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRW
dWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRl
ck91dHB1dCBvdXRwdXQpOworYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0
IG91dHB1dCk7CiAKIGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5v
ZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQppbmRleCBhNDlkYzUyNzNmZjA2NjExN2Rl
NzIwN2Q5ZGI3YzllNjRiYWVkMjQyLi4xNTAwZmZmNDIyYzAwMGZkMWU3ZWFlZmJjMDBkMDM3MTVk
MzAyMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE5LDcgKzE5LDI1IEBAIG5hbWVzcGFjZSBhbmdsZQogCiBib29sIEdldFN5c3RlbUluZm8o
U3lzdGVtSW5mbyAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8
fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorIyAgICBpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKKyAg
ICBzdGF0aWMgYm9vbCBpc2lPU0FwcE9uTWFjID0gZmFsc2U7CisgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICBpc2lPU0Fw
cE9uTWFjID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBpc2lPU0FwcE9uTWFjXTsKKyAg
ICB9KTsKKworICAgIGlmIChpc2lPU0FwcE9uTWFjKQorICAgIHsKKyAgICAgICAgR2V0U3lzdGVt
SW5mb19pb3MoaW5mbyk7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmZvLT5pc2lPU0FwcE9uTWFjID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW5mbzsKKyAgICB9CisKKyAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CisjICAg
IGVsaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9NQUNDQVRBTFlTVCkKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CiAj
ICAgIGVsc2UKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lv
cy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX2lvcy5jcHAKaW5kZXggZTUyZWNiMzI3NWRkMjZmOTNlODM3NTY0NWQ2MGI3NDk3N2U3MTIx
ZC4uN2E5ZDlmYTI4NmIwMmU5ZjNiYjMwMTQ3ZGNlYWFmZWZkNzdhZTU5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3Mu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9faW9zLmNwcApAQCAtMTgsOSArMTgsMTYgQEAgbmFtZXNwYWNlIGFuZ2xlCiBib29sIEdl
dFN5c3RlbUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCiB7CiAgICAgewotICAgICAgICAvLyBU
T0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNpb24gYW5k
IEdQVSBpbmZvLgorICAgICAgICAvLyAgICAgICAgR1BVRGV2aWNlSW5mbyBkZXZpY2VJbmZvOwor
ICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby52ZW5kb3JJZCAgICAgID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVuZG9yICA9ICJBcHBsZSI7CisgICAg
ICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlcnNpb24gPSAiMC4wIjsKKyAgICAgICAg
Ly8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisKKyAgICAg
ICAgLy8gVE9ETyhhbmdsZWJ1Zy5jb20vNDI3NSk6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJz
aW9uLgogICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0gICAgICAg
IGluZm8tPmdwdXMuZW1wbGFjZV9iYWNrKCkudmVuZG9ySWQgPSBrVmVuZG9ySURfQXBwbGU7Cisg
ICAgICAgIC8vIGluZm8tPmdwdXMucHVzaF9iYWNrKGRldmljZUluZm8pOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0NhcHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Nh
cHMuY3BwCmluZGV4IDFkZGRkNGQ4NTQ4MzJiMmQyOWIzODBhMDQ4YmQ0YTQzNzk5MzdjM2YuLjc5
MzEwMDliMmFlYThlZTE2ZThlMGQ3ZTkzZjcxN2Y0OTU5NWY3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBz
dGF0aWMgYm9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4
dHVyZUNhcHMsCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1aXJlZEZvcm1hdHNT
aXplOyBpKyspCiAgICAgewotICAgICAgICBjb25zdCBUZXh0dXJlQ2FwcyAmY2FwID0gdGV4dHVy
ZUNhcHMuZ2V0KHJlcXVpcmVkRm9ybWF0c1tpXSk7CiAKKyAgICAgICAgY29uc3QgVGV4dHVyZUNh
cHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOwogICAgICAgICBp
ZiAocmVxdWlyZXNUZXh0dXJpbmcgJiYgIWNhcC50ZXh0dXJhYmxlKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjIsNyArNDYyLDYgQEAgc3RhdGljIGJvb2wgRGV0
ZXJtaW5lQVNUQ0xEUlRleHR1cmVTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0dXJl
Q2FwcykKICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiwg
IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSLAogICAgICAgICBHTF9D
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMngxMl9LSFIsCiAgICAgfTsKLQogICAgIHJldHVybiBHZXRGb3JtYXRT
dXBwb3J0KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBm
YWxzZSwgZmFsc2UpOwogfQogCkBAIC02MzAsMTIgKzYyOSw3IEBAIHN0YXRpYyBib29sIERldGVy
bWluZURlcHRoVGV4dHVyZUFOR0xFU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVy
ZUNhcHMpCiB7CiAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKICAg
ICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMTYsCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1f
SU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpIHx8ICFkZWZpbmVk
KEFOR0xFX0NQVV9BUk02NCkpCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSAgICAgICAgLy8g
YmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIG9uIGlPUy4KLSAgICAgICAgLy8gVE9ETyhkaW5v
KTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBjaGVjayB3aGVuIHJ1bm5pbmcg
YW4gaU9TIGFwcCBvbiBNYWMuCiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywKLSNl
bmRpZgogICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywKICAgICB9OwogCkBAIC02NDcs
MTIgKzY0MSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQo
Y29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBHTGVu
dW0gcmVxdWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAot
I2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAgICAv
LyBUT0RPKGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhf
Q09NUE9ORU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBv
biBpT1MuCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBh
IHJ1bnRpbWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAgICBH
TF9ERVBUSF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICB9OwogCiAgICAgcmV0dXJuIEdl
dEZvcm1hdFN1cHBvcnQodGV4dHVyZUNhcHMsIHJlcXVpcmVkRm9ybWF0cywgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0Rpc3BsYXkuY3BwCmluZGV4IGRkZTQzMzdiYTViN2ZjN2I0ODJlYzI3NTE4OTBiNWRi
ZjMzYTMwNDAuLjY1NzgxNGZlMDY3Mzg5NWE4MzFhNDNjZmNjZWZiNjk5ZTI1NmZjNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAg
LTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50
KCkKICAgICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX05VTExfQU5HTEU7CiAg
ICAgfQogI2VuZGlmCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfTUVUQUwpCisgICAgaWYgKGFu
Z2xlRGVmYXVsdEVudiA9PSAibWV0YWwiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9QTEFU
Rk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFOworICAgIH0KIAorI2VuZGlmCiAjaWYgZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEMTEpCiAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0QzRDExX0FOR0xFOwogI2VsaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKQEAgLTEzMjUs
NiArMTMzMSw0NyBAQCBFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChnbDo6Q29udGV4dCAqcHJl
dmlvdXNDb250ZXh0LAogICAgIHJldHVybiBOb0Vycm9yKCk7CiB9CiAKK0Vycm9yIERpc3BsYXk6
Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWdsOjpTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVnbDo6U3VyZmFjZSAqcmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIW1Jbml0aWFsaXplZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBOb0Vycm9yKCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKnBy
ZXZpb3VzQ29udGV4dCA9IHRocmVhZC0+Z2V0Q29udGV4dCgpOworICAgIGlmIChwcmV2aW91c0Nv
bnRleHQpCisgICAgeworICAgICAgICBBTkdMRV9UUlkocHJldmlvdXNDb250ZXh0LT51bk1ha2VD
dXJyZW50KHRoaXMpKTsKKyAgICB9CisKKyAgICBBTkdMRV9UUlkobUltcGxlbWVudGF0aW9uLT5t
YWtlQ3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UsIGNvbnRleHQpKTsKKwor
ICAgIGlmIChjb250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoY29u
dGV4dC0+bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlKSk7CisgICAg
fQorCisgICAgLy8gVGljayBhbGwgdGhlIHNjcmF0Y2ggYnVmZmVycyB0byBtYWtlIHN1cmUgdGhl
eSBnZXQgY2xlYW5lZCB1cCBldmVudHVhbGx5IGlmIHRoZXkgc3RvcCBiZWluZworICAgIC8vIHVz
ZWQuCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU2Ny
YXRjaEJ1ZmZlck11dGV4KTsKKworICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZz
Y2F0Y2hCdWZmZXIgOiBtU2NyYXRjaEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRj
aEJ1ZmZlciAmemVyb0ZpbGxlZEJ1ZmZlciA6IG1aZXJvRmlsbGVkQnVmZmVycykKKyAgICAgICAg
eworICAgICAgICAgICAgemVyb0ZpbGxlZEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gTm9FcnJvcigpOworfQorCiBFcnJvciBEaXNwbGF5OjpyZXN0b3JlTG9z
dERldmljZSgpCiB7CiAgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4
dFNldC5iZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKaW5kZXggNGFjNjMzNmUw
ZjNhY2IwNmVhNTk1YzU0NzVhYTk4ZTRiODZjN2U5NC4uMTZmYWYyYmY1Y2JjZDM5MjhiNTBjNWQx
Y2U1ZDA3MDRjZWE1ZTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvRGlzcGxheS5oCkBAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwg
OiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZU1hcCAmYXR0cmlicywKICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0
ICoqb3V0Q29udGV4dCk7CiAKKyAgICBFcnJvciBtYWtlQ3VycmVudChjb25zdCBUaHJlYWQgKnRo
cmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCk7CisKICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0
IGdsOjpDb250ZXh0ICpjdXJyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIEVHTGVu
dW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmli
cywKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9n
cmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCmlu
ZGV4IGZlM2VjMjg1OWJhYTc2Mjg3YjY5ZmM3Y2JmMDNmZDc5ODljNDExZGYuLmJhOTI2N2EwM2M5
Mzk2YzU3YmRlNGQ0N2QyM2M3ODEzNTgxNmMzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaApAQCAtMjc2LDYgKzI3NiwxMSBAQCBjbGFzcyBQ
cm9ncmFtU3RhdGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOwog
ICAgIH0KKyAgICB2b2lkIHNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoCisgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1F
eGVjdXRhYmxlLT5zZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKF9tTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgfQogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdM
c2l6ZWk+ICZnZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhl
Y3V0YWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1F
eGVjdXRhYmxlLmgKaW5kZXggOTUwODMyYjRlODA1MTdhZWNiMDVkZGM2YmNiZWJiODBhYzYyYjRk
Zi4uNDhmM2JkMjE3NTQwODQ3OTZkOThkNTI4MmRkYTZlNWI0ZmE4NjkzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRh
YmxlLmgKQEAgLTIyOSw2ICsyMjksMTEgQEAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGUgZmluYWwg
OiBwdWJsaWMgYW5nbGU6OlN1YmplY3QKICAgICB7CiAgICAgICAgIHJldHVybiBtTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nczsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFuc2Zvcm1G
ZWVkYmFja1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKKyAgICB7
CisgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIH0KICAgICBHTGludCBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlOyB9CiAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKaW5kZXgg
ZDRjNmFlZDZlY2MwODNjYTUzYWRlMzZhNzA1MjgzMmRmNTIzMjNmZC4uMjIzNjRiMzQyN2Y4ZGNk
Y2Y1ZDkzYWM2YTk3NmZkMmU3M2Y4ZjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAK
QEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBj
b25zdCBPU1ZlcnNpb24gJmIpCiAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBi
Lm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOwogfQogCi0jaWYgIWRlZmluZWQoQU5HTEVf
UExBVEZPUk1fQVBQTEUpCisjaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1Zl
cnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNp
b24KQEAgLTIxMyw2ICsyMTMsMTQgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB9CiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKyAgICByZXR1
cm4gT1NWZXJzaW9uKDAsIDAsIDApOworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX0xJTlVYKQogYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNp
b24sIGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVy
X3V0aWxzLmgKaW5kZXggMjYxOWJjMzRmMzM3OTAyNjJkODZhMTMzZDhhNjAzOTJjNmExZjk5MS4u
Nzg3NzJhZTJmZDEzNzY4ZDdlZjRmZDJkMjIxYzcwZjI3ODMxODdiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaApAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKICNl
bmRpZgogfQogCitpbmxpbmUgYm9vbCBJc01hYygpCit7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBib29s
IElzRnVjaHNpYSgpCiB7CiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQpAQCAt
MjA0LDYgKzIxMyw4IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0
IE9TVmVyc2lvbiAmYik7CiAKIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKIAorT1NWZXJz
aW9uIEdldGlPU1ZlcnNpb24oKTsKKwogT1NWZXJzaW9uIEdldExpbnV4T1NWZXJzaW9uKCk7CiAK
IGlubGluZSBib29sIElzQW5kcm9pZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3YTg0NWMwNzI1ZjA5NGY2MmU3Y2EzNzMyZjE1MzYxOWNlYzY1ZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQpAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBkcml2ZXJfdXRpbHNfaW9zLm1tIDogcHJvdmlkZXMgaW9zLXNwZWNpZmljIGluZm9ybWF0aW9u
IGFib3V0IGN1cnJlbnQgZHJpdmVyLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJp
dmVyX3V0aWxzLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1l
c3BhY2UgcngKK3sKKworT1NWZXJzaW9uIEdldGlPU1ZlcnNpb24oKQoreworICAgIE9TVmVyc2lv
biByZXN1bHQ7CisKKyAgICBOU09wZXJhdGluZ1N5c3RlbVZlcnNpb24gdmVyc2lvbiA9IFtbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl07CisgICAgcmVz
dWx0Lm1ham9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWFqb3JWZXJzaW9uKTsKKyAgICByZXN1bHQubWlub3JWZXJzaW9uICAgICAgICAgICAgICA9IHN0
YXRpY19jYXN0PGludD4odmVyc2lvbi5taW5vclZlcnNpb24pOworICAgIHJlc3VsdC5wYXRjaFZl
cnNpb24gICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnBhdGNoVmVyc2lv
bik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRp
bHNfbWFjLm1tCmluZGV4IDNhZjQ2ZmM4ODc4YjhiOTU1MzU1ODM5MTYzNTYzMWNhN2RkN2E2MjAu
LmE4MWVkZTIyNTk0MmEyMzU2NGE3ZDEyMTEyODU5ODUyNjE3MDE2YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNf
bWFjLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9kcml2ZXJfdXRpbHNfbWFjLm1tCkBAIC0xMyw2ICsxMyw3IEBACiBuYW1lc3BhY2UgcngKIHsK
IAorI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1ZlcnNpb24gR2V0TWFjT1NW
ZXJzaW9uKCkKIHsKICAgICBPU1ZlcnNpb24gcmVzdWx0OwpAQCAtMjQsNSArMjUsNSBAQCBPU1Zl
cnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KKyNlbmRp
ZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
ZjNhNmQ3YTAyZWI3ZmI0MjMzN2RjMGU1NzRkYzZjNTU4Yzg0MGNkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRM
aW5raW5nX2FwcGxlLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDog
TWFjcm9zIGZvciBzb2Z0LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorCisjaWZu
ZGVmIFNPRlRfTElOS0lOR19BUFBMRV9IXworI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8K
KworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKKworIyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworIyAgICBpbXBv
cnQgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjICAgIGltcG9ydCA8ZGxmY24uaD4KKyMgICAgaW1w
b3J0IDxvYmpjL3J1bnRpbWUuaD4KKworIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVz
c2lvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgKGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwg
Ilx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxF
X18gPDwgIjoiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IF9fTElORV9fIDw8ICIpOiAi
IDw8ICNleHByZXNzaW9uIDw8ICJcblx0ISBNZXNzYWdlOiAiIDw8IG1lc3NhZ2UpKQorCisjICAg
IGlmZGVmIF9fY3BsdXNwbHVzCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfQkVHSU4gZXh0ZXJu
ICJDIiB7CisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5EIH0KKyMgICAgZWxzZQorIyAgICAg
ICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lOCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5ECisj
ICAgIGVuZGlmCisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKGZyYW1l
d29yaykgZXh0ZXJuIHZvaWQgKmZyYW1ld29yayMjTGlicmFyeSgpOworCisjICAgIGRlZmluZSBT
T0ZUX0xJTktfRlJBTUVXT1JLX1NPVVJDRShmcmFtZXdvcmspICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZvaWQgKmZyYW1ld29yayMjTGli
cmFyeSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2UgICA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0
aWMgdm9pZCAqZnJhbWV3b3JrTGlicmFyeSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
LCBeeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIu
ZnJhbWV3b3JrLyIgI2ZyYW1ld29yaywgUlRMRF9OT1cpOyBcCisgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZyYW1ld29ya0xpYnJhcnksICJVbmFibGUgdG8gbG9hZCAiICNmcmFtZXdvcmsg
Ii5mcmFtZXdvcmsiKTsgICAgICBcCisgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IH0KKworIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihmcmFtZXdvcmssIGZ1
bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhURVJOX0NfQkVH
SU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBw
YXJhbWV0ZXJEZWNsYXJhdGlvbnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIEVYVEVSTl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgZXh0ZXJuIHJlc3VsdFR5cGUgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFy
YW1ldGVyRGVjbGFyYXRpb25zOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4g
cmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnM7ICAgICAgICAgICAgICBcCisgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9f
KChfX2Fsd2F5c19pbmxpbmVfXykpIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRl
Y2xhcmF0aW9ucyAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBw
YXJhbWV0ZXJOYW1lczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0K
KworIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShmcmFtZXdvcmssIGZ1bmN0
aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCAgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlKCpz
b2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaW5pdCMjZnJhbWV3b3JrIyNmdW5j
dGlvbk5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25O
YW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
c3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZGlzcGF0Y2hfb25j
ZSgmb25jZSwgXnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBzb2Z0TGluayMjZnJhbWV3b3JrIyNm
dW5jdGlvbk5hbWUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgKHJlc3VsdFR5cGUoKikgcGFyYW1ldGVyRGVjbGFy
YXRpb25zKWRsc3ltKGZyYW1ld29yayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAg
ICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0
dXJuIHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNP
RlRfTElOS19DTEFTU19IRUFERVIoY2xhc3NOYW1lKSAgICBcCisgICAgICAgIEBjbGFzcyBjbGFz
c05hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gQ2xhc3MgKCpn
ZXQjI2NsYXNzTmFtZSMjQ2xhc3MpKCk7IFwKKyAgICAgICAgY2xhc3NOYW1lICphbGxvYyMjY2xh
c3NOYW1lIyNJbnN0YW5jZSgpOyBcCisgICAgICAgIGlubGluZSBjbGFzc05hbWUgKmFsbG9jIyNj
bGFzc05hbWUjI0luc3RhbmNlKCkgeyByZXR1cm4gW2dldCMjY2xhc3NOYW1lIyNDbGFzcygpIGFs
bG9jXTsgfQorCisjICAgIGRlZmluZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05h
bWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY2xh
c3MgY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFt
ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIENsYXNzICgqZ2V0IyNjbGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1l
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xh
c3MjI2NsYXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRp
YyBDbGFzcyBjbGFzc05hbWUjI0Z1bmN0aW9uKCkgeyByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsg
fSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRp
c3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICBjbGFzcyMjY2xhc3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1lKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2xhc3MjI2NsYXNzTmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZvciAiICNjbGFzc05h
bWUpOyBcCisgICAgICAgICAgICAgIGdldCMjY2xhc3NOYW1lIyNDbGFzcyA9IGNsYXNzTmFtZSMj
RnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFn
bm9zdGljIHB1c2giKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1X
dW51c2VkLWZ1bmN0aW9uXCIiKSBzdGF0aWMgY2xhc3NOYW1lICBcCisgICAgICAgICAgICAgICAg
KmFsbG9jIyNjbGFzc05hbWUjI0luc3RhbmNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCisKKyNlbmRpZiAg
Ly8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKworI2VuZGlmICAvLyBTT0ZUX0xJTktJ
TkdfQVBQTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOTVjMGY2YmFhNGY4OGRjMWIxOTUzZTM3MzljZmRhN2RmYWMzYjc4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2NnbC9DR0xGdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENHTEZ1bmN0aW9ucy5j
cHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1v
bi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVm
aW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKworU09GVF9MSU5LX0ZSQU1FV09SS19T
T1VSQ0UoT3BlbkdMKQorCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgKm5waXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBu
cGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBDR0xDcmVhdGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBD
R0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBp
eCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHBpeCwgc2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09V
UkNFKAorICAgIE9wZW5HTCwKKyAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENHTEVy
cm9yLAorICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhfbnVt
LCBhdHRyaWIsIHZhbHVlKSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xE
ZXN0cm95Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09G
VF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dM
RXJyb3IsIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgpLCAocGl4KSkKK1NPRlRfTElOS19GVU5DVElP
Tl9TT1VSQ0UoT3BlbkdMLCBDR0xFcnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3Ig
ZXJyb3IpLCAoZXJyb3IpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFJl
bGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElO
S19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3Is
IChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShP
cGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjdHgsIHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAg
IE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAg
IChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGlu
dGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQs
CisgICAgIEdMZW51bSBmb3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VS
ZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50
ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxh
bmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQs
IENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKworU09GVF9MSU5LX0ZVTkNU
SU9OX1NPVVJDRSgKKyAgICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBD
R0xFcnJvciwKKyAgICAoQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBD
R0xSZW5kZXJlclByb3BlcnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRf
bnVtLCBwcm9wLCB2YWx1ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChD
R0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5k
KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xRdWVyeVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNr
LCBDR0xSZW5kZXJlckluZm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIChkaXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKworI2VuZGlmICAvLyBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTZiODcxZTRiZWM4YWJjMGUyNzJlMjNjNGE2ZTU1NGRlZDVjMGIyMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9j
Z2wvQ0dMRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw4NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQ0dMRnVuY3Rpb25zLmg6IEV4cG9z
aW5nIHRoZSBzb2Z0LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIENHTF9GVU5DVElP
TlNfSF8KKyNkZWZpbmUgQ0dMX0ZVTkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRm
b3JtLmgiCisKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorCisjICAgIGluY2x1ZGUgPE9wZW5HTC9PcGVuR0wu
aD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBs
ZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0wpCisKK1NPRlRfTElOS19G
VU5DVElPTl9IRUFERVIoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDaG9v
c2VQaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0
cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqICpwaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIChhdHRyaWJzLCBwaXgsIG5waXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hF
QURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTENyZWF0ZUNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRPYmogcGl4LCBDR0xDb250ZXh0T2JqIHNoYXJlLCBDR0xD
b250ZXh0T2JqICpjdHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAocGl4LCBzaGFyZSwg
Y3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisgICAgT3BlbkdMLAorICAgIENHTERl
c2NyaWJlUGl4ZWxGb3JtYXQsCisgICAgQ0dMRXJyb3IsCisgICAgKENHTFBpeGVsRm9ybWF0T2Jq
IHBpeCwgR0xpbnQgcGl4X251bSwgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmliLCBHTGlu
dCAqdmFsdWUpLAorICAgIChwaXgsIHBpeF9udW0sIGF0dHJpYiwgdmFsdWUpKQorU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUigKKyAgICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwK
KyAgICBDR0xFcnJvciwKKyAgICAoQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRf
bnVtLCBDR0xSZW5kZXJlclByb3BlcnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQs
IHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5H
TCwgQ0dMRGVzdHJveUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4
KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xEZXN0cm95UGl4ZWxGb3Jt
YXQsIENHTEVycm9yLCAoQ0dMUGl4ZWxGb3JtYXRPYmogcGl4KSwgKHBpeCkpCitTT0ZUX0xJTktf
RlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVz
dHJveVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIo
T3BlbkdMLCBDR0xFcnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAo
ZXJyb3IpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTFF1ZXJ5UmVuZGVyZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBDR0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5
X21hc2ssIENHTFJlbmRlcmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGRpc3BsYXlfbWFzaywgcmVuZCwgbnJlbmQpKQorU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29u
dGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBD
R0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgp
KQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdM
aW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVlbikpCitT
T0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlP
U3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAg
R0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXpl
aSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQsCisgICAg
IEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQg
cGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hF
QURFUihPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBj
dHgpLCAoY3R4KSkKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8
fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorCisjZW5kaWYgIC8vIENHTF9G
VU5DVElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQppbmRleCBiNWE2
MzFhZTQzMjFmMWFkOWI0ODU2NmZhYTA5ZGZmZmEzOTQ2MzkxLi45MGU4MDU4ZjU4NWZhYjcxZDY1
ZTI0MTk1MjA2Mjg0Zjg0NDU1YjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dM
Lm1tCkBAIC0yOSw2ICsyOSw4IEBACiAjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2ds
L2NnbC9XaW5kb3dTdXJmYWNlQ0dMLmgiCiAjICAgIGluY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3Jt
TWV0aG9kcy5oIgogCisjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xG
dW5jdGlvbnMuaCIKKwogbmFtZXNwYWNlCiB7CiAKQEAgLTE2Myw5ICsxNjUsMTAgQEAgZWdsOjpF
cnJvciBEaXNwbGF5Q0dMOjppbml0aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBt
RUdMRGlzcGxheSA9IGRpc3BsYXk7CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAg
IC8vIEl0J3MgbGVnYWwgZm9yIEdldFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVy
ZWJ5Ci0gICAgLy8gY29udGFpbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFu
Z2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZv
KCZpbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkg
PDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICAv
LyBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgZWZmZWN0IG9mIHRoZQogICAgIC8vIGRpc2FibGVH
UFVTd2l0Y2hpbmdTdXBwb3J0IHdvcmthcm91bmQgaW4gRmVhdHVyZXNHTC4KQEAgLTQ0MCw3ICs0
NDMsNyBAQCBlZ2w6OkVycm9yIERpc3BsYXlDR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVn
bDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0aXZlV2lu
ZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAogewotICAgIE5TT2JqZWN0ICps
YXllciA9IChfX2JyaWRnZSBOU09iamVjdCAqKXdpbmRvdzsKKyAgICBOU09iamVjdCAqbGF5ZXIg
PSByZWludGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CiAgICAgcmV0dXJuIFtsYXll
ciBpc0tpbmRPZkNsYXNzOltDQUxheWVyIGNsYXNzXV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlF
QUdMLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2VhZ2wvRGlzcGxheUVBR0wubW0KaW5kZXggYTc5NTAzN2QxNDc5YTNjZjFkYmNjMjE5ZjQ5MzZk
MmI1MDc3ZTcwNi4uYzU1YWU3ZmJmM2FiNzY5MTU5ZGNlYWU2MWY4MDEzMzcyYjFkZTRlZSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2VhZ2wvRGlzcGxheUVBR0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0KQEAgLTI3LDYgKzI3LDggQEAK
ICMgICAgaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICMgICAgaW1wb3J0IDxkbGZj
bi5oPgogCisjICAgIGltcG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rp
b25zLmgiCisKIG5hbWVzcGFjZQogewogCkBAIC02NCw5ICs2NiwxMCBAQCBlZ2w6OkVycm9yIERp
c3BsYXlFQUdMOjppbml0aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlz
cGxheSA9IGRpc3BsYXk7CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0
J3MgbGVnYWwgZm9yIEdldFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0g
ICAgLy8gY29udGFpbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpH
ZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVu
YWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICBtQ29udGV4
dCA9IFthbGxvY0VBR0xDb250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmlu
Z0FQSU9wZW5HTEVTM107CiAgICAgaWYgKG1Db250ZXh0ID09IG51bGxwdHIpCkBAIC0xMTMsNiAr
MTE2LDcgQEAgdm9pZCBEaXNwbGF5RUFHTDo6dGVybWluYXRlKCkKICAgICBpZiAobUNvbnRleHQg
IT0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIFtnZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3Vy
cmVudENvbnRleHQ6bmlsXTsKKyAgICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwogICAgICAgICBt
Q29udGV4dCA9IG51bGxwdHI7CiAgICAgICAgIG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNs
ZWFyKCk7CiAgICAgfQpAQCAtMjc1LDcgKzI3OSw3IEBAIGVnbDo6RXJyb3IgRGlzcGxheUVBR0w6
OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBE
aXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRv
dykgY29uc3QKIHsKLSAgICBOU09iamVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3QgKil3
aW5kb3c7CisgICAgTlNPYmplY3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAq
Pih3aW5kb3cpOwogICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFz
c11dOwogfQogCkBAIC0zMTEsOSArMzE1LDggQEAgdm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVF
eHRlbnNpb25zKGVnbDo6RGlzcGxheUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnMKICAg
ICBvdXRFeHRlbnNpb25zLT5zdXJmYWNlbGVzc0NvbnRleHQgICAgPSB0cnVlOwogICAgIG91dEV4
dGVuc2lvbnMtPmRldmljZVF1ZXJ5ICAgICAgICAgICA9IHRydWU7CiAKLSAgICAvLyBDb250ZXh0
cyBhcmUgdmlydHVhbGl6ZWQgc28gdGV4dHVyZXMgYW5zIHNlbWFwaG9yZXMgY2FuIGJlIHNoYXJl
ZCBnbG9iYWxseQotICAgIG91dEV4dGVuc2lvbnMtPmRpc3BsYXlUZXh0dXJlU2hhcmVHcm91cCAg
ID0gdHJ1ZTsKLSAgICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5U2VtYXBob3JlU2hhcmVHcm91cCA9
IHRydWU7CisgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBi
ZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJl
R3JvdXAgPSB0cnVlOwogCiAgICAgb3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45MjEyNTEzMzhlZWU2OGY3MDM0ZGM4YzY3NWFlZWZmZmNhNDE5NjU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRUFHTEZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5jdGlvbnMuaDogRXhw
b3NpbmcgdGhlIHNvZnQtbGlua2VkIEVBR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIEVBR0xfRlVO
Q1RJT05TX0hfCisjZGVmaW5lIEVBR0xfRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24v
cGxhdGZvcm0uaCIKKworI2lmIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpKSB8fCBcCisgICAgKGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKKworIyAg
ICBpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJh
d2FibGUuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisKKyMgICAg
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09G
VF9MSU5LX0ZSQU1FV09SS19IRUFERVIoT3BlbkdMRVMpCisKK1NPRlRfTElOS19DTEFTU19IRUFE
RVIoRUFHTENvbnRleHQpCisKKyNlbmRpZiAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9T
KSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8CisgICAgICAgIC8v
IChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQ
VV9BUk02NCkpCisKKyNlbmRpZiAgLy8gQ0dMX0ZVTkNUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIxZWI3MGM3NWY0ODc5ZDhj
ZDE4Yzg4NmRmNjllZjM5YTIzMTg4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0K
QEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gRUFHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxp
bmtlZCBFQUdMIGludGVyZmFjZS4KKworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisj
aWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNDQVRBTFlTVCkpIHx8IFwKKyAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorCisjICAgIGltcG9ydCA8T3BlbkdM
RVMvRUFHTC5oPgorIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorIyAgICBp
bXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JL
X1NPVVJDRShPcGVuR0xFUykKKworU09GVF9MSU5LX0NMQVNTKE9wZW5HTEVTLCBFQUdMQ29udGV4
dCkKKworI2VuZGlmICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwKKyAgICAgICAgLy8gKGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBw
ZXJfdXRpbHMuY3BwCmluZGV4IGQ3MGFlNThhMGJmNDlmNjJkZjkyZTg1MjY5ODc3YjMwMTEyZDNm
ODIuLjYxNWRkNDRkMTRlOGRiNzAyNmNiOGQ5MThmNWVjZmY5OGE4YmExYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dy
YXBwZXJfdXRpbHMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCkBAIC0yODEsMTAgKzI4MSwxMiBA
QCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKGNvbnN0IHN0
ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmeGZiT3V0KQogewogICAgIGNvbnN0
IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5maW5kKGtYZmJEZWNs
TWFya2VyKTsKLSAgICBjb25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCAgID0geGZiRGVjbE1h
cmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworICAgIEFTU0VSVCh4ZmJE
ZWNsTWFya2VyU3RhcnQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGNvbnN0IHNpemVfdCB4
ZmJEZWNsTWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRl
Y2xNYXJrZXIpOwogCiAgICAgY29uc3Qgc2l6ZV90IHhmYk91dE1hcmtlclN0YXJ0ID0gb3JpZ2lu
YWxTb3VyY2UuZmluZChrWGZiT3V0TWFya2VyLCB4ZmJEZWNsTWFya2VyU3RhcnQpOwotICAgIGNv
bnN0IHNpemVfdCB4ZmJPdXRNYXJrZXJFbmQgICA9IHhmYk91dE1hcmtlclN0YXJ0ICsgQ29uc3RT
dHJMZW4oa1hmYk91dE1hcmtlcik7CisgICAgQVNTRVJUKHhmYk91dE1hcmtlclN0YXJ0ICE9IHN0
ZDo6c3RyaW5nOjpucG9zKTsKKyAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyRW5kID0geGZi
T3V0TWFya2VyU3RhcnQgKyBDb25zdFN0ckxlbihrWGZiT3V0TWFya2VyKTsKIAogICAgIC8vIFRo
ZSBzaGFkZXIgaXMgdGhlIGZvbGxvd2luZyBmb3JtOgogICAgIC8vCkBAIC0zNjIsNyArMzY0LDgg
QEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBH
bHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJv
Z3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAqdmVydGV4U2hhZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJJ
bnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFi
bGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCiB7CiAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8Z2w6OlRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gJnZhcnlpbmdzID0KICAgICAg
ICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKQEAg
LTQxMyw2ICs0MTYsMTAgQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9u
T3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgIG91
dHB1dE9mZnNldCArPSBpbmZvLmNvbHVtbkNvdW50ICogaW5mby5yb3dDb3VudCAqIHZhcnlpbmcu
c2l6ZSgpOwogICAgICAgICB9CiAgICAgfQorICAgIGlmIChlYXJseVJldHVybikKKyAgICB7Cisg
ICAgICAgIHhmYk91dCArPSAicmV0dXJuOyI7CisgICAgfQogICAgIHhmYk91dCArPSAifVxuIjsK
IAogICAgICp2ZXJ0ZXhTaGFkZXIgPSBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJz
KCp2ZXJ0ZXhTaGFkZXIsIHhmYkRlY2wsIHhmYk91dCk7CkBAIC0zMzY4LDExICszMzc1LDYgQEAg
c3RkOjpzdHJpbmcgR2xzbGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5n
ICZvcmlnaW5hbE5hbWUpCiAgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwogfQogCi1zdGQ6OnN0cmlu
ZyBHZXRYZmJCdWZmZXJOYW1lKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4KQotewotICAgIHJl
dHVybiAieGZiQnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7Ci19Ci0KIHZvaWQgR2xzbGFuZ0dl
blRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0
aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRl
cmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKQEAgLTMzODAsNyArMzM4Miw3IEBAIHZv
aWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNs
YW5nU291cmNlT3B0aW9ucyAmb3B0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUlu
Zm9NYXBPdXQpCiB7CiAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlh
YmxlSW5mb01hcE91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQsIGZhbHNlKTsKIH0KIAogdm9p
ZCBHbHNsYW5nQXNzaWduTG9jYXRpb25zKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRp
b25zLApAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhj
b25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKIH0KIAorc3RkOjpzdHJpbmcgR2V0WGZiQnVm
ZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKK3sKKyAgICByZXR1cm4gInhmYkJ1
ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworfQorCisKK3ZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0
aW9ucyhHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgJnByb2dyYW1FeGVjdXRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJ
bmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKK3sK
KyAgICAvLyBBc3NpZ24gb3V0cHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVyLCBpZiBhbnkuCisg
ICAgaWYgKChzaGFkZXJUeXBlID09IGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCkgJiYKKyAgICAg
ICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6
OkZyYWdtZW50KSkKKyAgICB7CisgICAgICAgIEFzc2lnbk91dHB1dExvY2F0aW9ucyhwcm9ncmFt
RXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21l
bnRdKTsKKyAgICB9CisKKyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNo
YWRlciwgaWYgYW55LgorICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4KSAmJgorICAgICAgICBwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFnZShn
bDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICB7CisgICAgICAgIEFzc2lnbkF0dHJpYnV0ZUxv
Y2F0aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNo
YWRlclR5cGU6OlZlcnRleF0pOworICAgIH0KKworICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUu
aGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkNvbXB1dGUpKQorICAgIHsKKyAg
ICAgICAgLy8gQXNzaWduIHZhcnlpbmcgbG9jYXRpb25zLgorICAgICAgICBBc3NpZ25WYXJ5aW5n
TG9jYXRpb25zKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFt
SW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUlu
Zm9NYXBPdXQpOworCisgICAgICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUuZ2V0TGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgIG9wdGlvbnMu
c3VwcG9ydHNUcmFuc2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6
U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzaWduVHJhbnNm
b3JtRmVlZGJhY2tFeHRlbnNpb25RdWFsaWZpZXJzKAorICAgICAgICAgICAgICAgIHByb2dyYW1F
eGVjdXRhYmxlLCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVu
c2lvbiwKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCAmKCp2YXJpYWJs
ZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEFzc2lnblVuaWZvcm1CaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFtRXhlY3V0YWJsZSwg
c2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgQXNzaWduVGV4dHVyZUJpbmRpbmdzKG9wdGlv
bnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKKyAgICBBc3Np
Z25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5
cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZUluZm9NYXBPdXQpOworfQorCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29u
c3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJj
ZXMsCkBAIC0zNDYyLDcgKzM1MTUsOCBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29u
c3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoCiAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwgcHJvZ3JhbUludGVyZmFjZUlu
Zm8sIHZlcnRleFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisgICAgICAgICAgICAgICAgICAgICYoKnZh
cmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tFYXJseVJldHVybik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0
aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xz
bGFuZ193cmFwcGVyX3V0aWxzLmgKaW5kZXggMmJkMmM2MWE4NzE4NWY0MTYwYjQwZmUyNjRhMzg4
YTIxYzU4ZTJkZC4uNjAyNDhjZGJhZDc2NTk2MDE4OTA4ZmQxMzcyMDkwNzA1YTE5NWE4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
c2xhbmdfd3JhcHBlcl91dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaApAQCAtNTEsNiArNTEsNyBA
QCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMKICAgICBib29sIHN1cHBvcnRzVHJhbnNmb3Jt
RmVlZGJhY2tFeHRlbnNpb24gPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVUcmFuc2Zvcm1GZWVk
YmFjayAgICAgICAgICAgPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAg
ICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1
cm4gICAgICAgPSBmYWxzZTsKIH07CiAKIHVzaW5nIFNwaXJ2QmxvYiA9IHN0ZDo6dmVjdG9yPHVp
bnQzMl90PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCmluZGV4
IDhjM2ZkMDU1ZDJkM2NiYzQ4OTc4MjJjZDRmM2JkMjQ1OTFhODdhZGMuLjdiY2RlZDA3ZDRjMjRm
ZjdkNWM4NjhjMDQ1ZDMwYjNkNDFiOTJiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVu
Y3Rpb25zX2RhdGEuanNvbgpAQCAtNjcyLDYgKzY3Miw5IEBACiAgICAgIkQzMl9GTE9BVF9TOFgy
NF9VSU5UIjogewogICAgICAgIkdMX1VOU0lHTkVEX0lOVF8yNF84IjogIkxvYWREMjRTOFRvRDMy
RlM4WDI0IiwKICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKyAg
ICB9LAorICAgICJEMzJfRkxPQVQiOiB7CisgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWRE
MjRTOFRvRDMyRiIKICAgICB9CiAgIH0sCiAgICJHTF9SMzJJIjogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25z
X3RhYmxlX2F1dG9nZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCmluZGV4IDIwZTcwNmY3
YzliYzgzNzlhMzIwNjRjMGFmNTkzYTE5MGNkOWRlNGQuLjJlZjAxY2EzY2ZlOTA1NzhjODMwNWRi
YTA0MzkxNGFmNzZjMDQ4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5j
dGlvbnNfdGFibGVfYXV0b2dlbi5jcHAKQEAgLTQ0Niw4ICs0NDYsNyBAQCBMb2FkSW1hZ2VGdW5j
dGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9S
R0JfVU5PUk1fQgogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9D
SygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfVU5PUk1fQkxPQ0so
R0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTQ3MSw4ICs0NzAs
NyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9B
TFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rp
b25JbmZvCi1DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVf
RVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKK0xvYWRJbWFn
ZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9E
RUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKIHsK
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtMTMxMiw4ICsxMzEwLDcgQEAgTG9hZEltYWdl
RnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfRVRDMl90b19SOEc4QjhBOF9VTk9STV9TUkdC
KEdMZW51bSB0eXBlKQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNT
RURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JM
T0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURf
U1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JMT0NL
KEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xMzI1LDggKzEz
MjIsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9ERUNP
REVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNXwogICAgIH0KIH0KIAotTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VU
QzJfUjhHOEI4QTFfU1JHQl9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0
aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19FVEMy
X1I4RzhCOEExX1NSR0JfQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQog
ICAgIHsKQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCiAgICAg
fQogfQogCi1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8KLUNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJP
VUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9TUkdC
X0JMT0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNT
RURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19C
QzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkKICAgICB7CkBAIC0xNTEwLDYgKzE1MDQsMTggQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIERF
UFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9YOF9VSU5UKEdMZW51bSB0eXBlKQogICAgIH0K
IH0KIAorTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9B
VChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1hZ2VGdW5jdGlvbklu
Zm8oTG9hZEQyNFM4VG9EMzJGLCB0cnVlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gTG9hZEltYWdlRnVuY3Rpb25JbmZv
KFVucmVhY2hhYmxlTG9hZEZ1bmN0aW9uLCB0cnVlKTsKKyAgICB9Cit9CisKIExvYWRJbWFnZUZ1
bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVu
dW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCkBAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2Fk
RnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZv
cm1hdElEIGFuZ2xlRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09N
UE9ORU5UMjRfdG9fRDI0X1VOT1JNX1M4X1VJTlQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3Jt
YXRJRDo6RDI0X1VOT1JNX1g4X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBU
SF9DT01QT05FTlQyNF90b19EMjRfVU5PUk1fWDhfVUlOVDsKKyAgICAgICAgICAgICAgICBjYXNl
IEZvcm1hdElEOjpEMzJfRkxPQVQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9D
T01QT05FTlQyNF90b19EMzJfRkxPQVQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9D
T01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVDsKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0JVSUxELmduIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCmluZGV4IDg2OGM0NzZiOTQ0NWI3ZDllOGE1YWMw
NWU0YTU4N2NmMDRmNzFiNDcuLjBkNTBkODFjZGZlNjhlNDdlOTNiNTMwZTU1MWI3ZGZlOTQ2MjFl
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9CVUlMRC5nbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCgi
Li4vLi4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCiAKLWFzc2VydChpc19tYWMpCithc3NlcnQoaXNf
bWFjIHx8IGlzX2lvcykKIGFzc2VydChhbmdsZV9lbmFibGVfbWV0YWwpCiAKIF9tZXRhbF9iYWNr
ZW5kX3NvdXJjZXMgPSBbCkBAIC0yMSw2ICsyMSw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMg
PSBbCiAgICJEaXNwbGF5TXRsX2FwaS5oIiwKICAgIkZyYW1lQnVmZmVyTXRsLmgiLAogICAiRnJh
bWVCdWZmZXJNdGwubW0iLAorICAiSU9TdXJmYWNlU3VyZmFjZU10bC5oIiwKKyAgIklPU3VyZmFj
ZVN1cmZhY2VNdGwubW0iLAogICAiUHJvZ3JhbU10bC5oIiwKICAgIlByb2dyYW1NdGwubW0iLAog
ICAiUXVlcnlNdGwuaCIsCkBAIC01Miw2ICs1NCw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMg
PSBbCiAgICJtdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0iLAogICAibXRsX2Zvcm1hdF91dGls
cy5oIiwKICAgIm10bF9mb3JtYXRfdXRpbHMubW0iLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxz
LmgiLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKICAgIm10bF9nbHNsYW5nX3V0aWxz
LmgiLAogICAibXRsX2dsc2xhbmdfdXRpbHMubW0iLAogICAibXRsX29jY2x1c2lvbl9xdWVyeV9w
b29sLmgiLApAQCAtNjUsMTIgKzY5LDExIEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAg
ICJtdGxfdXRpbHMuaCIsCiAgICJtdGxfdXRpbHMubW0iLAogICAic2hhZGVycy9jb25zdGFudHMu
aCIsCi0gICJzaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgiLAotICAic2hhZGVycy9tdGxfZGVmYXVs
dF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisgICJzaGFkZXJzL210bF9kZWZhdWx0X3NoYWRl
cnNfc3JjX2F1dG9nZW4uaW5jIgogXQogCiBjb25maWcoImFuZ2xlX21ldGFsX2JhY2tlbmRfY29u
ZmlnIikgewotICBkZWZpbmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiBdCisgIGRlZmluZXMg
PSBbICJBTkdMRV9FTkFCTEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCiAg
IGxkZmxhZ3MgPSBbCiAgICAgIi13ZWFrX2ZyYW1ld29yayIsCiAgICAgIk1ldGFsIiwKQEAgLTk2
LDEyICs5OSwxNiBAQCBhbmdsZV9zb3VyY2Vfc2V0KCJhbmdsZV9tZXRhbF9iYWNrZW5kIikgewog
ICAgICIke2FuZ2xlX3Jvb3R9OmxpYkFOR0xFX2hlYWRlcnMiLAogICBdCiAKLSAgZGVwcyA9IFsg
IiR7YW5nbGVfc3BpcnZfY3Jvc3NfZGlyfS9nbjpzcGlydl9jcm9zc19zb3VyY2VzIiBdCisgIGRl
cHMgPSBbCisgICAgIiRhbmdsZV9zcGlydl90b29sc19kaXI6c3B2dG9vbHNfdmFsIiwKKyAgICAi
JHthbmdsZV9zcGlydl9jcm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiLAorICBdCiAK
ICAgb2JqY19mbGFncyA9IFsKICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAog
ICAgICItV25vLXVuZ3VhcmRlZC1hdmFpbGFiaWxpdHkiLAogICAgICItZm5vLW9iamMtYXJjIiwK
KyAgICAiLVduby1leHRyYS1zZW1pLXN0bXQiLAogICBdCiAgIGNmbGFnc19vYmpjICs9IG9iamNf
ZmxhZ3MKICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZm
ZXJNdGwuaAppbmRleCA3NjI1NDllNGQyNzBmOWNmMjQ0ZjMzZTFmZTBiMTkwNWZhMmExMzkyLi45
ZjllYzZjYmQ5YzgzMTU3ZTMxNDc0ZTY2OGQzNTIyZjJlZDRmMjgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRs
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0J1ZmZlck10bC5oCkBAIC0xNTIsMTAgKzE1MiwxNSBAQCBjbGFzcyBCdWZmZXJNdGwgOiBw
dWJsaWMgQnVmZmVySW1wbCwgcHVibGljIEJ1ZmZlckhvbGRlck10bAogCiAgICAgQ29udmVyc2lv
bkJ1ZmZlck10bCAqZ2V0VW5pZm9ybUNvbnZlcnNpb25CdWZmZXIoQ29udGV4dE10bCAqY29udGV4
dCwgc2l6ZV90IG9mZnNldCk7CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0aGUgYnVmZmVyIGlz
IG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGljaXRseQorICAgIC8v
IGNhbGxlZC4KKyAgICB2b2lkIG1hcmtDb252ZXJzaW9uQnVmZmVyc0RpcnR5KCk7CisKICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obVN0YXRlLmdl
dFNpemUoKSk7IH0KIAogICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0RGF0YUltcGwo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QnVmZmVyQmluZGluZyB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNh
Z2UpOwpAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZl
ckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwKICAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdFNo
YWRvd0NvcHkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAgIGFuZ2xlOjpSZXN1bHQg
Y29tbWl0U2hhZG93Q29weShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgc2l6ZV90IHNpemUp
OwogCi0gICAgdm9pZCBtYXJrQ29udmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOwotCiAgICAgdm9pZCBj
bGVhckNvbnZlcnNpb25CdWZmZXJzKCk7CisKICAgICBib29sIGNsaWVudFNoYWRvd0NvcHlEYXRh
TmVlZFN5bmMoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dD
b3B5U3luY2VkRnJvbUdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKICAgICB1aW50OF90ICpz
eW5jQW5kT2J0YWluU2hhZG93Q29weShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKIAorICAgIC8v
IENvbnZlbmllbnQgbWV0aG9kCisgICAgY29uc3QgdWludDhfdCAqZ2V0Q2xpZW50U2hhZG93Q29w
eURhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4g
Z2V0Q2xpZW50U2hhZG93Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKyAgICB9CiAg
ICAgLy8gQ2xpZW50IHNpZGUgc2hhZG93IGJ1ZmZlcgogICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIg
bVNoYWRvd0NvcHk7CiAKICAgICAvLyBHUFUgc2lkZSBidWZmZXJzIHBvb2wKICAgICBtdGw6OkJ1
ZmZlclBvb2wgbUJ1ZmZlclBvb2w7CiAKLSAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCBidWZm
ZXIgZGF0YS4KKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KICAgICBz
dGQ6OnZlY3RvcjxWZXJ0ZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtVmVydGV4Q29udmVyc2lvbkJ1
ZmZlcnM7CiAKICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRl
eENvbnZlcnNpb25CdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwubW0KaW5kZXgg
NjRjN2RlOGEzMjhkNWZjY2E2MGI0Y2M1ZWVkMjRmYzY4YjU5NjAwNS4uODA5Njk5NmUyODhmNTk1
MTMyMWViODhmZmVkN2RhMGQwOTkyMTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRs
Lm1tCkBAIC0yMyw2ICsyMywxMCBAQCBuYW1lc3BhY2UKIC8vIFN0YXJ0IHdpdGggYSBmYWlybHkg
c21hbGwgYnVmZmVyIHNpemUuIFdlIGNhbiBpbmNyZWFzZSB0aGlzIGR5bmFtaWNhbGx5IGFzIHdl
IGNvbnZlcnQgbW9yZSBkYXRhLgogY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVudEFy
cmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKIAorLy8gVGhlIG1heCBzaXplIHRoYXQg
d2Ugd2lsbCB1c2UgYnVmZmVyIHBvb2wgZm9yIGR5bmFtaWMgdXBkYXRlLgorLy8gSWYgdGhlIGJ1
ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUgYnVmZmVy
IGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCitjb25zdGV4cHIgc2l6ZV90IGtEeW5hbWljQnVm
ZmVyUG9vbE1heEJ1ZlNpemUgPSAxMjggKiAxMDI0OworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5k
ZXhUeXBlPgogYW5nbGU6OlJlc3VsdCBHZXRGaXJzdExhc3RJbmRpY2VzKGNvbnN0IEluZGV4VHlw
ZSAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291
bnQsCkBAIC0xMDUsNyArMTA5LDcgQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldERhdGEo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKQogewotICAgIHJldHVybiBzZXREYXRhSW1wbChjb250
ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKyAgICByZXR1cm4gc2V0RGF0YUltcGwo
Y29udGV4dCwgdGFyZ2V0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKIH0KIAogYW5nbGU6
OlJlc3VsdCBCdWZmZXJNdGw6OnNldFN1YkRhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CkBAIC0xNjQsNyArMTY4LDggQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6Om1hcFJhbmdlKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogewogICAgIGlmIChhY2Nlc3MgJiBHTF9NQVBfSU5W
QUxJREFURV9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZKHNldERhdGFJbXBs
KGNvbnRleHQsIG51bGxwdHIsIHNpemUoKSwgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgICAg
QU5HTEVfVFJZKHNldERhdGFJbXBsKGNvbnRleHQsIGdsOjpCdWZmZXJCaW5kaW5nOjpJbnZhbGlk
RW51bSwgbnVsbHB0ciwgc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0
YXRlLmdldFVzYWdlKCkpKTsKICAgICB9CiAKICAgICBpZiAobWFwUHRyKQpAQCAtMTczLDcgKzE3
OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICAgICAgaWYgKG1CdWZmZXJQb29sLmdldE1heEJ1ZmZlcnMoKSA9PSAx
KQogICAgICAgICB7CiAgICAgICAgICAgICAqbWFwUHRyID0gbUJ1ZmZlci0+bWFwV2l0aE9wdChj
b250ZXh0TXRsLCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9O
SVpFRF9CSVQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzICYg
R0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgKwogICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zOTUsNiArNDAwLDcgQEAgdm9pZCBCdWZm
ZXJNdGw6OmNsZWFyQ29udmVyc2lvbkJ1ZmZlcnMoKQogfQogCiBhbmdsZTo6UmVzdWx0IEJ1ZmZl
ck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcgdGFyZ2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNhZ2Up
CkBAIC00MTMsNiArNDE5LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHNpemVfdCBhZGp1c3RlZFNpemUg
PSBzdGQ6Om1heDxzaXplX3Q+KDEsIGludGVuZGVkU2l6ZSk7CiAKKyAgICAvLyBFbnN1cmVzIG5v
IHZhbGlkYXRpb24gbGF5ZXIgaXNzdWVzIGluIHN0ZDE0MCB3aXRoIGRhdGEgdHlwZXMgbGlrZSB2
ZWMzIGJlaW5nIDEyIGJ5dGVzIHZzIDE2CisgICAgLy8gaW4gTVNMLgorICAgIGlmICh0YXJnZXQg
PT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisgICAgeworICAgICAgICBhZGp1c3RlZFNp
emUgPSByb3VuZFVwUG93MihhZGp1c3RlZFNpemUsIChzaXplX3QpMTYpOworICAgIH0KKwogICAg
IHNpemVfdCBtYXhCdWZmZXJzOwogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewpAQCAtNDI3LDcg
KzQ0MCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1wbChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIGR5bmFt
aWMgYnVmZmVyLCBhbGxvdyB1cCB0byAxMCB1cGRhdGUgcGVyIGZyYW1lL2VuY29kaW5nIHdpdGhv
dXQKICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KLSAgICAgICAgICAgIGlmIChhZGp1
c3RlZFNpemUgPD0gbXRsOjprU2hhcmVkTWVtQnVmZmVyTWF4QnVmU2l6ZUhpbnQpCisgICAgICAg
ICAgICBpZiAoYWRqdXN0ZWRTaXplIDw9IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNpemUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbWF4QnVmZmVycyA9IDEwOwogICAgICAgICAg
ICAgICAgIG1CdWZmZXJQb29sLnNldEFsd2F5c1VzZVNoYXJlZE1lbSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBp
bGVyTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0NvbXBpbGVyTXRsLm1tCmluZGV4IGE1ODY2NzAxYmQ1ZjAyNTYyMmI2MzU0Mjc4OWQ2
NDlhNzE0OTJjMGUuLjNlMjliNGRkODExODJiODgzZThlYjJjZjA3NjRjY2JmYTkwOThlNTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9Db21waWxlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW0KQEAgLTEwLDYgKzEwLDcgQEAKICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5oIgogCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oIgogCiBuYW1lc3BhY2UgcngKIHsK
QEAgLTIwLDcgKzIxLDE2IEBAIENvbXBpbGVyTXRsOjp+Q29tcGlsZXJNdGwoKSB7fQogCiBTaFNo
YWRlck91dHB1dCBDb21waWxlck10bDo6Z2V0VHJhbnNsYXRvck91dHB1dFR5cGUoKSBjb25zdAog
ewotICAgIHJldHVybiBTSF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICBpZiAoc2g6OnJlYWRCb29s
RW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7CisgICAgICAgIC8vIFdl
IHdhbnQgdG8gcmV0dXJuIEdMIG91dHB1dCBmaXJzdCwgd2UgY2FuJ3QgYWN0dWFsbHkKKyAgICAg
ICAgLy8gZ2V0IE1TTCBjb2RlIHVudGlsIGxpbmsgdGltZS4gVHJhbnNsYXRpb24gdGltZSBpcyB0
b28gZWFybHkKKyAgICAgICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVUOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gU0hfTVNMX01FVEFMX09VVFBVVDsKKyAgICB9
CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgK
aW5kZXggMTY4N2M4YzkxNDdiZmI5N2RmN2M1YTY0NDAxMmI1ZDIyMDEzY2VkYy4uMmYzOTM3MWQ5
ODMzZGExMzY5NTYzNmY4MzQwMjAzMzBjZWFhZGNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29u
dGV4dE10bC5oCkBAIC0yOSw4ICsyOSw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsOwogY2xhc3Mg
VmVydGV4QXJyYXlNdGw7CiBjbGFzcyBQcm9ncmFtTXRsOwogY2xhc3MgUmVuZGVyVGFyZ2V0TXRs
OwotY2xhc3MgV2luZG93U3VyZmFjZU10bDsKLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsOwor
Y2xhc3MgU3VyZmFjZU10bFByb3RvY29sOworY2xhc3MgQnVmZmVyTXRsOwogCiBjbGFzcyBDb250
ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiB7CkBAIC04
NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1Ymxp
YyBtdGw6OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkgb3ZlcnJpZGU7CiAg
ICAgYW5nbGU6OlJlc3VsdCBkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4QmFzZUluc3Rh
bmNlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBt
b2RlLApAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRl
eHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xpbnQgKmJhc2VW
ZXJ0aWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgKmJhc2VJbnN0YW5jZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0Vs
ZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJh
d0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0
YW5jZXMpOwogCiAgICAgLy8gRGV2aWNlIGxvc3MKICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1
cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRlOwpAQCAtMTk2LDYgKzIwMiw4IEBAIGNsYXNzIENv
bnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICBj
b25zdCBnbDo6RXh0ZW5zaW9ucyAmZ2V0TmF0aXZlRXh0ZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRl
OwogICAgIGNvbnN0IGdsOjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25z
dCBvdmVycmlkZTsKIAorICAgIGNvbnN0IFByb2dyYW1NdGwgKmdldFByb2dyYW0oKSBjb25zdCB7
IHJldHVybiBtUHJvZ3JhbTsgfQorCiAgICAgLy8gU2hhZGVyIGNyZWF0aW9uCiAgICAgQ29tcGls
ZXJJbXBsICpjcmVhdGVDb21waWxlcigpIG92ZXJyaWRlOwogICAgIFNoYWRlckltcGwgKmNyZWF0
ZVNoYWRlcihjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKQEAgLTI0OSwx
MiArMjU3LDI0IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1Ymxp
YyBtdGw6OkNvbnRleHQKICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJpZXIoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIEdMYml0ZmllbGQgYmFycmllcnMpIG92ZXJyaWRlOwogICAgIGFu
Z2xlOjpSZXN1bHQgbWVtb3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBHTGJpdGZpZWxkIGJhcnJpZXJzKSBvdmVycmlkZTsKIAorICAgIHZvaWQgaW52YWxpZGF0
ZUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG9uVHJhbnNmb3Jt
RmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9uQmVnaW5UcmFuc2Zv
cm1GZWVkYmFjaygKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorICAgICAgICBjb25zdCBn
bDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsK
KworICAgIHZvaWQgb25FbmRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGFuZ2xlOjpSZXN1bHQg
b25QYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHBvcHVsYXRlVHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJTZXQoCisgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICAgICAg
Y29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmYnVm
ZmVycyk7CiAgICAgLy8gb3ZlcnJpZGUgbXRsOjpFcnJvckhhbmRsZXIKICAgICB2b2lkIGhhbmRs
ZUVycm9yKEdMZW51bSBlcnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZp
bGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRs
ZUVycm9yKE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5T
RXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtMjcyLDEyICsyOTIsMTIgQEAg
Y2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4
dAogICAgIHZvaWQgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFt
ZWJ1ZmZlck10bCAqZnJhbWVidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKLSAgICB2b2lkIG9uQmFja2J1ZmZlclJl
c2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2ti
dWZmZXIpOworICAgIHZvaWQgb25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKIAogICAgIC8vIEludm9r
ZSBieSBRdWVyeU10bAotICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25RdWVyeUJlZ2luKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOwotICAgIHZvaWQgb25P
Y2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1
ZXJ5KTsKLSAgICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNp
b25RdWVyeUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkp
OworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeURlc3Ryb3ll
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKIAogICAgIC8v
IFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9jY2x1c2lvbiBxdWVy
eSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCiAgICAgYm9vbCBoYXNBY3RpdmVPY2NsdXNp
b25RdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1PY2NsdXNpb25RdWVyeTsgfQpAQCAtMzY3LDcgKzM4
Nyw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6
OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5k
ZXhUeXBlT3JOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlu
ZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CiAKICAg
ICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LApAQCAt
NDE3LDYgKzQzNywxOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBw
dWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgaW5zdGFuY2VDb3VudCk7CiAKKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFBy
aW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHZlcnRleFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
dmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5j
ZXMpOworCisgICAgdm9pZCBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlw
ZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5k
ZXhUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtdGw6OkJ1ZmZlclJlZiAmaW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworCiAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0
YXRlKGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CiAKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0
KEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlck10bCwKQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFz
cyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAg
ICAgYW5nbGU6OlJlc3VsdCBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQgZHJhd0NhbGxGaXJz
dFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCB2ZXJ0aWNlc1Blckluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworICAgIGFuZ2xlOjpSZXN1bHQgaGFu
ZGxlRGlydHlHcmFwaGljc1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0VtdWxhdGlvbihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eURlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVz
dWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAg
ICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCk7CkBAIC00NzAsNiArNTAzLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBD
b250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICBESVJUWV9CSVRfUkVOREVS
X1BJUEVMSU5FLAogICAgICAgICBESVJUWV9CSVRfVU5JRk9STV9CVUZGRVJTX0JJTkRJTkcsCiAg
ICAgICAgIERJUlRZX0JJVF9SQVNURVJJWkVSX0RJU0NBUkQsCisgICAgICAgIERJUlRZX0JJVF9U
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKICAgICAgICAgRElSVFlfQklUX01BWCwKICAgICB9
OwogCkBAIC00ODgsNyArNTIyLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0
SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICB1aW50MzJfdCB4ZmJBY3RpdmVVbnBh
dXNlZDsKICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3OwogICAgICAgICAvLyBO
T1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRhdGEgd2hlbiBuZWVk
ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgaW50MzJfdCBwYWRkaW5nWzNdOworICAgICAgICBp
bnQzMl90IHBhZGRpbmdfMFszXTsKIAogICAgICAgICBpbnQzMl90IHhmYkJ1ZmZlck9mZnNldHNb
NF07CiAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CkBAIC01MDgsMTIgKzU0
MiwxNSBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRs
OjpDb250ZXh0CiAKICAgICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOwogCi0gICAgICAgIGZs
b2F0IHBhZGRpbmcyWzNdOworICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKwor
ICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRh
dGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFb
Ml07CiAgICAgfTsKIAogICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCiAgICAgewotICAgICAg
ICB1aW50OF90IHZhbHVlc1tzaXplb2YoZmxvYXQpICogNF07CisgICAgICAgIGZsb2F0IHZhbHVl
c1s0XTsKICAgICB9OwogCiAgICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1
ZXJ5UG9vbDsKQEAgLTUyMiw2ICs1NTksMTMgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBD
b250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIG10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXIgbVJlbmRlckVuY29kZXI7CiAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRF
bmNvZGVyOwogICAgIG10bDo6Q29tcHV0ZUNvbW1hbmRFbmNvZGVyIG1Db21wdXRlRW5jb2RlcjsK
KyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKToKKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3
IGNhbGwncyBmaXJzdFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKyAgICAvLyBUcmFuc2Zvcm1GZWVk
YmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cy4gIFdlIHNob3VsZCBzd2l0Y2gKKyAgICAvLyB0byB1
c2luZyBnbF9CYXNlVmVydGV4IC0+IGJhc2VfdmVydGV4IGluIE1TTAorICAgIEdMaW50IG1YZmJC
YXNlVmVydGV4OworICAgIC8vIENhY2hlIHRoZSBjdXJyZW50IGRyYXcgY2FsbCdzIHZlcnRleCBj
b3VudCBhcyB3ZWxsIHRvIHN1cHBvcnQgaW5zdGFuY2VkIGRyYXcgY2FsbHMKKyAgICBHTHVpbnQg
bVhmYlZlcnRleENvdW50UGVySW5zdGFuY2U7CiAKICAgICAvLyBDYWNoZWQgYmFjay1lbmQgb2Jq
ZWN0cwogICAgIEZyYW1lYnVmZmVyTXRsICptRHJhd0ZyYW1lYnVmZmVyID0gbnVsbHB0cjsKQEAg
LTU1NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBw
dWJsaWMgbXRsOjpDb250ZXh0CiAgICAgbXRsOjpCdWZmZXJQb29sIG1UcmlGYW5JbmRleEJ1ZmZl
cjsKICAgICAvLyBvbmUgYnVmZmVyIGNhbiBiZSByZXVzZWQgZm9yIGFueSBzdGFydGluZyB2ZXJ0
ZXggaW4gRHJhd0FycmF5cygpCiAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4
QnVmZmVyOworICAgIC8vCisgICAgbXRsOjpCdWZmZXJQb29sIG1QcmltaXRpdmVSZXN0YXJ0QnVm
ZmVyOwogCiAgICAgLy8gRHVtbXkgdGV4dHVyZSB0byBiZSB1c2VkIGZvciB0cmFuc2Zvcm0gZmVl
ZGJhY2sgb25seSBwYXNzLgogICAgIG10bDo6VGV4dHVyZVJlZiBtRHVtbXlYRkJSZW5kZXJUZXh0
dXJlOwpAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4
dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKIAogICAgIERlZmF1bHRBdHRyaWJ1dGUgbURlZmF1
bHRBdHRyaWJ1dGVzW210bDo6a01heFZlcnRleEF0dHJpYnNdOwogCisgICAgLy8gVHJhbnNmb3Jt
IGZlZWRiYWNrIGJ1ZmZlcnMuCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IEJ1ZmZlck10
bCAqPiBtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyczsKKwogICAgIEluY29tcGxldGVU
ZXh0dXJlU2V0IG1JbmNvbXBsZXRlVGV4dHVyZXM7CiAgICAgYm9vbCBtSW5jb21wbGV0ZVRleHR1
cmVzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRs
Lm1tCmluZGV4IDI3ZTY5Nzg3MDIxZjc4ZDdiZGI3ZWQwYzgwMGVlYTVjNDEwMWE0NmYuLjMyODUw
Yzk4N2JkODk0MmIxNjM4MzA5OWQ4YmRiOTdmOGY5ZjQ3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1t
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLm1tCkBAIC00NCwyNSArNDQsNiBAQCBjb25zdGV4cHIgdWludDMyX3Qga01h
eFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lID0gMDsKIGNvbnN0ZXhwciB1aW50MzJfdCBr
TWF4VHJpRmFuTGluZUxvb3BCdWZmZXJzUGVyRnJhbWUgPSAxMDsKICNlbmRpZgogCi0jZGVmaW5l
IEFOR0xFX01UTF9YRkJfRFJBVyhEUkFXX1BST0MpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IC8qIE5vcm1hbCBkcmF3IGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxz
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAvKiBGaXJzdCBwYXNzOiB3cml0ZSB0byBYRkIgYnVmZmVycyBp
biB2ZXJ0ZXggc2hhZGVyLCBmcmFnbWVudCBzaGFkZXIgaW5hY3RpdmUgKi8gICBcCi0gICAgICAg
IERSQVdfUFJPQyh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAvKiBTZWNvbmQgcGFzczogZnVsbCByYXN0ZXJpemF0aW9uOiB2ZXJ0ZXggc2hhZGVyICsg
ZnJhZ21lbnQgc2hhZGVyIGFyZSBhY3RpdmUuIFwKLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFk
ZXIgd3JpdGVzIHRvIHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMg
Ki8gICAgICAgXAotICAgICAgICAgICAgaW52YWxpZGF0ZVJlbmRlclBpcGVsaW5lKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBEUkFXX1BST0MoZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0KLQogYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVm
ZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBv
b2wsCkBAIC04NCwxMSArNjUsMTEgQEAgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFu
QnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQWxsb2NhdGVMaW5lTG9vcEJ1ZmZl
ckZyb21Qb29sKENvbnRleHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNUb1Jlc2VydmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2ws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZl
clJlZiAqYnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgKm9mZnNldE91dCkKK2FuZ2xlOjpSZXN1bHQgQWxsb2NhdGVCdWZmZXJG
cm9tUG9vbChDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5kaWNlc1RvUmVzZXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb2Zmc2V0T3V0KQogewogICAg
IHNpemVfdCBvZmZzZXQ7CiAgICAgcG9vbC0+cmVsZWFzZUluRmxpZ2h0QnVmZmVycyhjb250ZXh0
KTsKQEAgLTEwNSwxMiArODYsNyBAQCBib29sIE5lZWRUb0ludmVydERlcHRoUmFuZ2UoZmxvYXQg
bmVhciwgZmxvYXQgZmFyKQogICAgIHJldHVybiBuZWFyID4gZmFyOwogfQogCi1ib29sIElzVHJh
bnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKLXsKLSAgICByZXR1
cm4gZ2xTdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSAmJiBnbFN0YXRl
LmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCk7Ci19Ci0KLXN0ZDo6c3RyaW5nIENvbnZlcnRN
YXJrZXJUb1N0cmluZyhHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorc3RkOjpz
dHJpbmcgQ29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJr
ZXIpCiB7CiAgICAgc3RkOjpzdHJpbmcgY3BwU3RyaW5nOwogICAgIGlmIChsZW5ndGggPT0gMCkK
QEAgLTE3Myw3ICsxNDksNyBAQCBjbGFzcyBMaW5lTG9vcExhc3RTZWdtZW50SGVscGVyCiAgICAg
ICAgICAgICAgICAgICAgIHtpbmRleFR5cGVPck5vbmUsIHZlcnRleE9ySW5kZXhDb3VudCwgaW5k
aWNlcywgbUxpbmVMb29wSW5kZXhCdWZmZXIsIDB9KSk7CiAgICAgICAgIH0KIAotICAgICAgICBB
TkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwpKTsKKyAgICAgICAg
QU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRsLCBmYWxzZSkpOwog
CiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9CkBAIC0xOTEs
NyArMTY3LDggQEAgQ29udGV4dE10bDo6Q29udGV4dE10bChjb25zdCBnbDo6U3RhdGUgJnN0YXRl
LCBnbDo6RXJyb3JTZXQgKmVycm9yU2V0LCBEaXNwbGF5TXQKICAgICAgIG1DbWRCdWZmZXIoJmRp
c3BsYXktPmNtZFF1ZXVlKCkpLAogICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZmZXIsIG1P
Y2NsdXNpb25RdWVyeVBvb2wpLAogICAgICAgbUJsaXRFbmNvZGVyKCZtQ21kQnVmZmVyKSwKLSAg
ICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlcikKKyAgICAgIG1Db21wdXRlRW5jb2Rlcigm
bUNtZEJ1ZmZlciksCisgICAgICBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5jZSgwKQoge30KIAog
Q29udGV4dE10bDo6fkNvbnRleHRNdGwoKSB7fQpAQCAtMjA4LDYgKzE4NSw4IEBAIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6aW5pdGlhbGl6ZSgpCiAgICAgbUxpbmVMb29wTGFzdFNlZ21lbnRJ
bmRleEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDIgKiBzaXplb2YodWludDMyX3QpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtJbmRleEJ1ZmZl
ck9mZnNldEFsaWdubWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKKyAgICBtUHJpbWl0
aXZlUmVzdGFydEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDAsIG10bDo6a0luZGV4QnVmZmVyT2Zm
c2V0QWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01h
eFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKIH0KQEAgLTIyNywyMyArMjA2LDIwIEBAIHZvaWQgQ29udGV4dE10bDo6
b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0ZWQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCiB7Ci0gICAgaWYgKEFOR0xFX0xJS0VMWShtSW5jb21wbGV0ZVRleHR1cmVz
SW5pdGlhbGl6ZWQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOwotICAgIH0KLSAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRleHR1
cmVUeXBlc1tdID0ge2dsOjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVyZVR5cGU6Ol8zRCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6OkN1YmVNYXB9Owot
ICAgIGZvciAoZ2w6OlRleHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMp
CisgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQp
KQogICAgIHsKLSAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0gICAgICAgIEFOR0xFX1RS
WShtSW5jb21wbGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5
cGUsIG51bGxwdHIsICZ0ZXh0dXJlKSk7Ci0KLSAgICAgICAgVGV4dHVyZU10bCAqdGV4dHVyZU10
bCAgICAgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbCh0ZXh0dXJlKTsKLSAgICAgICAg
dGV4dHVyZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0
ZVRleHR1cmUiOworICAgICAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRl
eHR1cmVUeXBlc1tdID0geworICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpfMkQsIGdsOjpU
ZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAorICAgICAgICAgICAg
Z2w6OlRleHR1cmVUeXBlOjpDdWJlTWFwfTsKKyAgICAgICAgZm9yIChhdXRvIHRleFR5cGUgOiBz
dXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlOworICAgICAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKHRleHR1cmUpOwor
ICAgICAgICAgICAgQU5HTEVfVFJZKAorICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVy
ZXMuZ2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1
cmUpKTsKKyAgICAgICAgfQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQg
PSB0cnVlOwogICAgIH0KLSAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC0yODIsNyAr
MjU4LDE3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c1dpdGhC
YXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250CiAgICAgICAgICAgICB0aGlzLCB7MCwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyLCAw
fSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4
dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291bnQsIGluc3RhbmNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52
YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlKSk7CisgICAgICAgIC8vIERyYXcgd2l0aCB0aGUgemVybyBz
dGFydGluZyBpbmRleCBidWZmZXIsIHNoaWZ0IHRoZSB2ZXJ0ZXggaW5kZXggdXNpbmcgYmFzZVZl
cnRleAorICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKyAgICAgICAgbVJlbmRlckVuY29kZXIu
ZHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwg
Z2VuSW5kaWNlc0NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlVUludDMyLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKyAgICB9CiAKICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3
KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBp
bnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKQEAgLTMxMSwx
NiArMjk3LDIzIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xl
Z2FjeShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgdGhpcywge3N0YXRpY19j
YXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdlbklk
eEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAgIEFO
R0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBBTkdMRV9UUlko
bVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOwogCi0gICAgQVNTRVJUKCFn
ZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKyAgICBpZiAo
bVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAg
ICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5n
bGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsKIAor
ICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xl
LCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5j
ZXMpOworICAgIH0KICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRp
dmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
KSk7CiAKLSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChNVExQcmltaXRpdmVUeXBlVHJp
YW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0KTsKKyAg
ICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5J
bmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0zNjgsMjIgKzM2MSwyNyBA
QCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEFycmF5cyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAgICAg
dWludDMyX3QgZ2VuSW5kaWNlc0NvdW50ID0gY291bnQgKyAxOwogCi0gICAgQU5HTEVfVFJZKEFs
bG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGlu
ZUxvb3BJbmRleEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICBBTkdMRV9U
UlkoQWxsb2NhdGVCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxv
b3BJbmRleEJ1ZmZlciwgJmdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CiAgICAgQU5HTEVfVFJZKGdldERpc3Bs
YXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cygKICAgICAg
ICAgdGhpcywge3N0YXRpY19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihjb3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9m
ZnNldH0pKTsKIAotICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhp
cykpOworICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcywgZmFs
c2UpKTsKIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5w
YXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6
OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0s
IG51bGxwdHIsIHRydWUpKTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50
MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklk
eEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVfVFJZKHNldHVwRHJh
dyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6Oklu
dmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVuY29kZXIuZHJhd0lu
ZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJ
bnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKyAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJ
bmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZl
ciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQpAQCAtNDEzLDIxICs0MTEsMzMgQEAgYW5nbGU6OlJlc3VsdCBD
b250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAog
ICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2Rl
KTsKIAotI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFO
R0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMs
IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgbnVsbHB0ciwgeGZiUGFzcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGlmIChpbnN0YW5jZXMgPT0gMCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAv
KiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVuZGVyRW5jb2Rl
ci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VD
b3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0
dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVs
bHB0ciwgdHJ1ZSkpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gbm9ybWFsIGRyYXdBcnJh
eXMoKQorICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291
bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXhl
Y0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAg
ICAgICAgfQogICAgIH0KKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZp
cnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0s
CisgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgQU5HTEVf
TVRMX1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKyAgICBpZiAoaW5zdGFuY2VzID09IDAp
CisgICAgeworICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJh
d0FycmF5cygpCisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcobXRsVHlwZSwgZmlyc3QsIGNv
dW50KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQo
bXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICB9CiAKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC00ODAsMTYgKzQ5MCwyNSBAQCBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdUcmlGYW5FbGVtZW50cyhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0LCAmZ2VuSW5kaWNlc0NvdW50KSk7CiAKICAgICAg
ICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVRyaUZhbkJ1ZmZl
ckZyb21FbGVtZW50c0FycmF5KAotICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRp
Y2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0p
KTsKKyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVy
LCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorICAgICAgICAgICAgJmdl
bkluZGljZXNDb3VudCkpOworCisgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIu
Y29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVfVFJZ
KHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIDAsIGNv
dW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGljZXMsIHRydWUpKTsKIAotICAgICAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNv
bW1pdCh0aGlzKSk7CisgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJp
bWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklk
eEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBj
b3VudCwgaW5zdGFuY2VzLCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlj
ZXMsIGZhbHNlKSk7CiAKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5j
ZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2Vu
SWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhlZElu
c3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5k
ZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0gIC8vIGlmIChjb3VudCA+IDMpCkBAIC01MzIs
MjcgKzU1MSw4NyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEVsZW1l
bnRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB1aW50MzJfdCBnZW5JZHhC
dWZmZXJPZmZzZXQ7CiAgICAgICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50ICog
MjsKICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OwotICAgICAgICBBTkdMRV9UUlko
QWxsb2NhdGVMaW5lTG9vcEJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1M
aW5lTG9vcEluZGV4QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICAg
ICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2Vz
LCAmbUxpbmVMb29wSW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKIAogICAgICAg
ICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlTGluZUxvb3BCdWZm
ZXJGcm9tRWxlbWVudHNBcnJheSgKICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5k
aWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9
LAogICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOwogCi0gICAgICAgIEFOR0xFX1RSWSht
TGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgICAgICBBTkdMRV9UUlkobUxp
bmVMb29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1T
dGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6
TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGljZXMsIHRydWUpKTsKKworICAgICAgICAgICAgZXhlY0RyYXdJbmRl
eGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwg
TVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworICAgICAgICB9
CiAKICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9k
ZTo6TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKIAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2Vz
Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTElu
ZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAg
IGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5J
bmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwog
CiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9ICAvLyBpZiAo
Y291bnQgPj0gMikKICAgICByZXR1cm4gZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGNvbnRleHQsIGds
OjpQcmltaXRpdmVNb2RlOjpMaW5lcywgY291bnQsIHR5cGUsIGluZGljZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOwogfQorYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpkcmF3RWxlbWVudHNTaW1wbGVUeXBlc1ByaW1pdGl2ZVJlc3RhcnQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5j
ZXMpCit7CisKKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7CisgICAgdWludDMyX3Qg
Z2VuSWR4QnVmZmVyT2Zmc2V0OworICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50
OworICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVm
ZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2VzLCAmbVByaW1pdGl2ZVJlc3RhcnRCdWZm
ZXIsICZnZW5JZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmdlbklkeEJ1ZmZlck9mZnNldCkpOworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgICAg
IGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlBvaW50czoKKyAgICAgICAgICAgIEFOR0xFX1RSWShn
ZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVm
ZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4
QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5J
bmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsOjpQcmlt
aXRpdmVNb2RlOjpMaW5lczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdl
dFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoCisgICAgICAgICAg
ICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1
ZmZlck9mZnNldCwgdHJ1ZX0sCisgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2Vu
ZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRo
aXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZz
ZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0KKyAgICBBTkdM
RV9UUlkobVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBNVExQcmlt
aXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgICAgaWYg
KG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNl
cywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNv
bnN0IHZvaWQgKj4oMCksIHRydWUpKTsKKworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5j
ZWQobXRsVHlwZSwgKHVpbnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhC
dWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2Up
KTsKKworICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2Vu
SW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworCisg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1v
ZGUgbW9kZSwKQEAgLTU2Myw3ICs2NDIsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRy
YXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgLy8gUmVh
bCBpbnN0YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcu
CiAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsK
LQogICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNTc3LDE4
ICs2NTUsMzkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbXBsKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgcmV0dXJuIGRyYXdMaW5l
TG9vcEVsZW1lbnRzKGNvbnRleHQsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbnN0YW5jZUNvdW50
KTsKICAgICB9Ci0KICAgICBtdGw6OkJ1ZmZlclJlZiBpZHhCdWZmZXI7CiAgICAgc2l6ZV90IGNv
bnZlcnRlZE9mZnNldCAgICAgICAgICAgICA9IDA7CiAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
Y29udmVydGVkVHlwZSA9IHR5cGU7CisgICAgc2l6ZV90IGNvbnZlcnRlZENvdW50ICAgICAgICAg
ICAgICA9IChzaXplX3QpY291bnQ7CiAKLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJ
bmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVydGVkT2Zmc2V0
LCAmY29udmVydGVkVHlwZSkpOworICAgIEFOR0xFX1RSWShtVmVydGV4QXJyYXktPmdldEluZGV4
QnVmZmVyKGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCAmaWR4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZz
ZXQsICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKIAogICAgIEFTU0VSVChpZHhC
dWZmZXIpOwogICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQpID09IDApOworICAgIHVpbnQzMl90IGNvbnZlcnRlZENvdW50aTMyID0g
KHVpbnQzMl90KWNvbnZlcnRlZENvdW50OworICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3
KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGlu
ZGljZXMsIHRydWUpKTsKKyAgICAgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxUeXBlID0gbXRsOjpH
ZXRQcmltaXRpdmVUeXBlKG1vZGUpOwogCi0gICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0
LCBtb2RlLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBmYWxzZSkpOworICAg
ICAgICBNVExJbmRleFR5cGUgbXRsSWR4VHlwZSA9IG10bDo6R2V0SW5kZXhUeXBlKGNvbnZlcnRl
ZFR5cGUpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gTm9ybWFsIGRyYXcKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRl
eGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW5zdGFu
Y2VkIGRyYXcKKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBj
b252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZE9mZnNldCwgaW5zdGFuY2VDb3VudCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7
CiAKICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUo
bW9kZSk7CiAKQEAgLTU5NywxMyArNjk2LDE0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6
ZHJhd0VsZW1lbnRzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICBpZiAoaW5z
dGFuY2VzID09IDApCiAgICAgewogICAgICAgICAvLyBOb3JtYWwgZHJhdwotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlwZSwgaWR4QnVm
ZmVyLCBjb252ZXJ0ZWRPZmZzZXQpOworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhl
ZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewogICAgICAgICAvLyBJbnN0YW5jZWQgZHJhdwotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlw
ZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ291bnQpOworICAgICAgICBleGVjRHJhd0luZGV4
ZWRJbnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1
ZmZlciwgY29udmVydGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zdGFuY2VDb3VudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOwpAQCAtNjI1LDcgKzcyNSw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0Vs
ZW1lbnRzQmFzZVZlcnRleChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2Vz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGJhc2VWZXJ0ZXgpCiB7Ci0gICAgLy8gTk9URShocWxlKTogRVMgMy4yCiAgICAgVU5JTVBMRU1F
TlRFRCgpOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQpAQCAtNjQ5LDEwICs3
NDgsOSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJh
c2VWZXJ0ZXgoY29uc3QgZ2w6OkNvbnRleHQgKmNvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRy
YXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNlVmVydGV4KQogewot
ICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0KQEAgLTY2OSw3ICs3NjcsNiBAQCBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhCYXNlSW5zdGFu
Y2UoY29uc3QgZ2w6OgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKIH0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3UmFuZ2VFbGVt
ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LApAQCAtNjkwLDcg
Kzc4Nyw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHNCYXNl
VmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
YmFzZVZlcnRleCkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKICAgICBVTklNUExFTUVO
VEVEKCk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CkBAIC03MTMsNiArODA5
LDY0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW5kaXJlY3QoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7
CiB9CiAKK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlw
ZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgdmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygp
Lmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKHByaW1pdGl2ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0
ZXhDb3VudCwgaW5zdGFuY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQp
OworICAgICAgICBmb3IgKHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2lu
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5lbXVsYXRlZEluc3Rh
bmNlSUQgPSBpbnN0OworCisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRh
KG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworCisg
ICAgICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVy
RW5jb2RlciwgaW5zdCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcocHJpbWl0
aXZlVHlwZSwgdmVydGV4U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAgfQorICAgICAgICAv
LyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0
ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29udGV4dE10bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJp
bWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNVExJbmRleFR5cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3Rh
bmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0
ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUs
IGluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUsIGluZGV4Q291bnQs
IGluZGV4VHlwZSwgaW5kZXhCdWZmZXIsIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIGZvciAodWlu
dDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisKKyAg
ICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBt
dGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhB
cnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCBpbnN0KTsKKwor
ICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5k
ZXhDb3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVz
ZXQgaW5zdGFuY2UgSUQgdG8gemVybworICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0
YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisgICAgfQorfQorCiBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6Om11bHRpRHJhd0FycmF5cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRp
dmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHTGludCAqZmlyc3RzLApAQCAtODAyLDE1ICs5NTYsMTUgQEAgc3RkOjpzdHJpbmcgQ29u
dGV4dE10bDo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiAvLyBFWFRfZGVidWdfbWFy
a2VyCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkg
bGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCiB7CisgICAgbUNtZEJ1ZmZlci5pbnNlcnREZWJ1
Z1NpZ24oQ29udmVydE1hcmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1
c2hHcm91cE1hcmtlcihHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQogewotICAg
IG1DbWRCdWZmZXIucHVzaERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvU3RyaW5nKGxlbmd0aCwg
bWFya2VyKSk7CisgICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9D
cHAobGVuZ3RoLCBtYXJrZXIpKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
CiB9Ci0KIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6cG9wR3JvdXBNYXJrZXIoKQogewogICAg
IG1DbWRCdWZmZXIucG9wRGVidWdHcm91cCgpOwpAQCAtMTE1NSwxMCArMTMwOSwxMiBAQCBRdWVy
eUltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVF1ZXJ5KGdsOjpRdWVyeVR5cGUgdHlwZSkKIHsKICAg
ICByZXR1cm4gbmV3IFF1ZXJ5TXRsKHR5cGUpOwogfQorCiBGZW5jZU5WSW1wbCAqQ29udGV4dE10
bDo6Y3JlYXRlRmVuY2VOVigpCiB7CiAgICAgcmV0dXJuIG5ldyBGZW5jZU5WTXRsKCk7CiB9CisK
IFN5bmNJbXBsICpDb250ZXh0TXRsOjpjcmVhdGVTeW5jKCkKIHsKICAgICByZXR1cm4gbmV3IFN5
bmNNdGwoKTsKQEAgLTEyMDUsNiArMTM2MSw2OSBAQCBPdmVybGF5SW1wbCAqQ29udGV4dE10bDo6
Y3JlYXRlT3ZlcmxheShjb25zdCBnbDo6T3ZlcmxheVN0YXRlICZzdGF0ZSkKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAordm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1EaXJ0
eUJpdHMuc2V0KERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyk7CisgICAgfQor
fQorCit2b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKQor
eworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZl
ZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMo
KTsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25CZWdpblRyYW5zZm9y
bUZlZWRiYWNrKAorICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIG9u
VHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGZvciAoc2l6ZV90IGJ1ZmZl
ckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAg
ICB7CisgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycy5jb3VudChi
dWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5kRW5j
b2RpbmcobVJlbmRlckVuY29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KGJ1ZmZlckNvdW50
LCBidWZmZXJzKTsKKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKwor
dm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KAorICAg
IHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIGZvciAoc2l6ZV90IGJ1ZmZl
ckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAg
ICB7CisgICAgICAgIG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZm
ZXJzW2J1ZmZlckluZGV4XSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6Om9uRW5kVHJh
bnNmb3JtRmVlZGJhY2soKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCku
ZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBvblRyYW5z
Zm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCithbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7CisgICAgaWYgKGdldERpc3Bs
YXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCiBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBudW1Hcm91cHNY
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG51bUdy
b3Vwc1ksCkBAIC0xMzMxLDYgKzE1NTAsMTEgQEAgY29uc3QgbXRsOjpGb3JtYXQgJkNvbnRleHRN
dGw6OmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkKSBjb24KICAg
ICByZXR1cm4gZ2V0RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChhbmdsZUZvcm1hdElkKTsKIH0K
IAorY29uc3QgbXRsOjpGb3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRpdmVGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0IG10bEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RGlzcGxh
eSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKG10bEZvcm1hdCk7Cit9CisKIC8vIFNlZSBtdGw6OkZv
cm1hdFRhYmxlOjpnZXRWZXJ0ZXhGb3JtYXQoKQogY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJkNv
bnRleHRNdGw6OmdldFZlcnRleEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQgYW5nbGVGb3JtYXRJZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCB0aWdodGx5UGFja2VkKSBjb25zdApAQCAtMTMzOCwxMSArMTU2Miw2IEBAIGNvbnN0IG10bDo6
VmVydGV4Rm9ybWF0ICZDb250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQoYW5nbGU6OkZvcm1hdElE
IGFuZ2xlRm9ybWF0CiAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVydGV4Rm9ybWF0KGFu
Z2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOwogfQogCi1jb25zdCBtdGw6OkZvcm1hdENhcHMg
JkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0
KSBjb25zdAotewotICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMo
bXRsRm9ybWF0KTsKLX0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpnZXRJbmNvbXBsZXRl
VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICoqdGV4
dHVyZU91dCkKQEAgLTEzNjIsNiArMTU4MSwyMiBAQCB2b2lkIENvbnRleHRNdGw6OmVuZFJlbmRl
ckVuY29kaW5nKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIpCiAKICAgICAvLyBS
ZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cwogICAgIG1PY2NsdXNpb25RdWVyeVBvb2wucmVzb2x2
ZVZpc2liaWxpdHlSZXN1bHRzKHRoaXMpOworCisgICAgbUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIC8vIFJlc2V0IHNlcmlhbHMgZm9yIFhGQiBpZiBhY3Rp
dmUuCisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkK
KyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9
IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgICAgICBBU1NFUlQoZXhlY3V0YWJs
ZSk7CisgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFibGUtPmdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja010
bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorICAgICAgICAgICAgbXRsOjpHZXRJbXBsKG1TdGF0
ZS5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSk7CisKKyAgICAgICAgcG9wdWxhdGVUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja010bC0+Z2V0QnVmZmVy
SGFuZGxlcygpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9v
bCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkKQEAgLTEzOTAsNyArMTYyNSw3IEBAIHZvaWQg
Q29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkK
IAogdm9pZCBDb250ZXh0TXRsOjpmbHVzaENvbW1hbmRCdWZlcigpCiB7Ci0gICAgaWYgKCFtQ21k
QnVmZmVyLnJlYWR5KCkpCisgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCiAgICAgewogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1NCw2ICsxNjg5LDI3IEBAIG10bDo6UmVuZGVyQ29t
bWFuZEVuY29kZXIgKkNvbnRleHRNdGw6OmdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rlcihjb25z
dCBtdGw6OlJlCiAgICAgLy8gTmVlZCB0byByZS1hcHBseSBldmVyeXRoaW5nIG9uIG5leHQgZHJh
dyBjYWxsLgogICAgIG1EaXJ0eUJpdHMuc2V0KCk7CiAKKyAgICBpZDxNVExEZXZpY2U+IG1ldGFs
RGV2aWNlID0gZ2V0RGlzcGxheSgpLT5nZXRNZXRhbERldmljZSgpOworICAgIGlmIChtdGw6OkRl
dmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkKKyAgICB7CisgICAg
ICAgIE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVzYyA9IFtNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvciByZW5kZXJQYXNzRGVzY3JpcHRvcl07CisgICAgICAgIGRlc2MuY29udmVydFRvTWV0
YWxEZXNjKG9iakNEZXNjKTsKKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXplID0gbXRsOjpHZXRN
YXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAg
IE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICBDb21wdXRlVG90YWxT
aXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKG9iakNEZXNjLCB0aGlzLCBtZXRhbERl
dmljZSk7CisgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAgICAgICAgICAgICBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRlciB0YXJnZXRzIHJl
cXVpcmVzICVsdSBieXRlcyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQCJwaXhlbCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0cyAlbHUgYnl0ZXMu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg
bG9uZylyZW5kZXJUYXJnZXRTaXplLCAodW5zaWduZWQgbG9uZyltYXhTaXplXTsKKyAgICAgICAg
ICAgIE5TRXJyb3IgKmVyciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRp
b25FcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZTotMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJ
bmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisgICAgICAg
ICAgICB0aGlzLT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19M
SU5FX18pOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgIH0KICAgICBy
ZXR1cm4gJm1SZW5kZXJFbmNvZGVyLnJlc3RhcnQoZGVzYyk7CiB9CiAKQEAgLTE0NjcsMTEgKzE3
MjMsMTIgQEAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0VGV4dHVy
ZVJlbmRlckNvbW1hbmRFbmNvZGVyKAogCiAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyBycERlc2M7
CiAKLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJl
VGFyZ2V0OwotICAgIHJwRGVzYy5jb2xvckF0dGFjaG1lbnRzWzBdLmxldmVsICAgICAgICA9IGlu
ZGV4LmdldE5hdGl2ZUxldmVsKCk7Ci0gICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0uc2xp
Y2VPckRlcHRoID0gaW5kZXguaGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7
Ci0gICAgcnBEZXNjLm51bUNvbG9yQXR0YWNobWVudHMgICAgICAgICAgICAgID0gMTsKLSAgICBy
cERlc2Muc2FtcGxlQ291bnQgICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5z
YW1wbGVzKCk7CisgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50
ZXh0dXJlID0gdGV4dHVyZVRhcmdldDsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5y
ZW5kZXJUYXJnZXQtPmxldmVsICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworICAgIHJwRGVz
Yy5jb2xvckF0dGFjaG1lbnRzWzBdLnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0KKyAgICAg
ICAgaW5kZXguaGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgcnBE
ZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSAxOworICAgIHJwRGVzYy5zYW1wbGVDb3VudCAgICAg
ICAgID0gdGV4dHVyZVRhcmdldC0+c2FtcGxlcygpOwogCiAgICAgcmV0dXJuIGdldFJlbmRlclBh
c3NDb21tYW5kRW5jb2RlcihycERlc2MpOwogfQpAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBtdGw6
OkNvbXB1dGVDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0Q29tcHV0ZUNvbW1hbmRFbmNv
ZGVyKCkKIAogdm9pZCBDb250ZXh0TXRsOjplbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKQogewot
ICAgIGlmICghbUNtZEJ1ZmZlci5yZWFkeSgpKQorICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgp
KQogICAgIHsKICAgICAgICAgbUNtZEJ1ZmZlci5yZXN0YXJ0KCk7CiAgICAgfQogCi0gICAgQVNT
RVJUKG1DbWRCdWZmZXIucmVhZHkoKSk7CisgICAgQVNTRVJUKG1DbWRCdWZmZXIudmFsaWQoKSk7
CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6dXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZy
YW1lYnVmZmVyTXRsLApAQCAtMTY3Nyw3ICsxOTM0LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbkRy
YXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICB9CiB9CiAKLXZvaWQgQ29udGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcikKK3ZvaWQgQ29u
dGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
U3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAm
Z2xTdGF0ZSAgICA9IGdldFN0YXRlKCk7CiAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVy
ID0gbXRsOjpHZXRJbXBsKGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwpAQCAtMTY4Niwx
MCArMTk0MywxMyBAQCB2b2lkIENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZhY2VNdAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCisgICAgdXBkYXRlVmlld3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3Bv
cnQoKSwgZ2xTdGF0ZS5nZXROZWFyUGxhbmUoKSwKKyAgICAgICAgICAgICAgICAgICBnbFN0YXRl
LmdldEZhclBsYW5lKCkpOworICAgIHVwZGF0ZVNjaXNzb3IoZ2xTdGF0ZSk7CiAgICAgb25EcmF3
RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOwogfQog
Ci1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
IFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxw
dHIpOwogICAgIG1PY2NsdXNpb25RdWVyeSA9IHF1ZXJ5OwpAQCAtMTcwNiw3ICsxOTY2LDcgQEAg
YW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIFF1ZXIKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKIH0KLXZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9j
Y2x1c2lvblF1ZXJ5RW5kZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpx
dWVyeSkKIHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KTsKIApAQCAtMTcx
OCw3ICsxOTc4LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkKIAogICAgIG1PY2NsdXNpb25R
dWVyeSA9IG51bGxwdHI7CiB9Ci12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0
cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCit2b2lkIENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBpZiAocXVlcnktPmdldEFsbG9jYXRlZFZp
c2liaWxpdHlPZmZzZXRzKCkuZW1wdHkoKSkKICAgICB7CkBAIC0xNzI2LDcgKzE5ODYsNyBAQCB2
b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LCBRdWVyeU10bCAqcQogICAgIH0KICAgICBpZiAobU9jY2x1c2lvblF1ZXJ5ID09
IHF1ZXJ5KQogICAgIHsKLSAgICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVy
eSk7CisgICAgICAgIG9uT2NjbHVzaW9uUXVlcnlFbmRlZChjb250ZXh0LCBxdWVyeSk7CiAgICAg
fQogICAgIG1PY2NsdXNpb25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1
ZXJ5KTsKIH0KQEAgLTE3NzAsMjAgKzIwMzAsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OnN0YXJ0T2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoUXVlcnlNdGwgKnF1ZXJ5LCBib29sCiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi12b2lkIENvbnRleHRNdGw6
Om9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRy
YW5zZm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0
byBlbmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9y
ZSBYRkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25z
aWRlciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQotdm9p
ZCBDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URSho
cWxlKTogV2UgaGF2ZSB0byBlbmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hy
b25pemF0aW9uIGJlZm9yZSBYRkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVy
dGV4IGlucHV0LiBDb25zaWRlciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0
cnVlKTsKLX0KLQogdm9pZCBDb250ZXh0TXRsOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6
U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb21t
YW5kQnVmZmVyUmVhZHkoKTsKQEAgLTE4NDIsMTAgKzIwODgsMTkgQEAgYW5nbGU6OlJlc3VsdCBD
b250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlw
ZU9yTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmluZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBh
c3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZl
ZWRiYWNrRHJhdykKIHsKICAgICBBU1NFUlQobVByb2dyYW0pOwogCisgICAgLy8gVXBkYXRlIHRy
YW5zZm9ybSBmZWVkYmFjayBvZmZzZXRzIG9uIGV2ZXJ5IGRyYXcgY2FsbC4KKyAgICBpZiAobVN0
YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGZpcnN0VmVydGV4ICE9IC0xKTsKKyAgICAgICAgbVhmYkJhc2VWZXJ0ZXggICAgICAg
ICAgICAgPSBmaXJzdFZlcnRleDsKKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2Ug
PSB2ZXJ0ZXhPckluZGV4Q291bnQ7CisgICAgICAgIGludmFsaWRhdGVEcml2ZXJVbmlmb3Jtcygp
OworICAgIH0KKwogICAgIC8vIGluc3RhbmNlcz0wIG1lYW5zIG5vIGluc3RhbmNlZCBkcmF3Lgog
ICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CiAK
QEAgLTE4NjIsMjAgKzIxMTcsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJh
dyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURp
cnR5QWN0aXZlVGV4dHVyZXMoY29udGV4dCkpOwogICAgIH0KIAotICAgIGlmIChtRGlydHlCaXRz
LnRlc3QoRElSVFlfQklUX1JBU1RFUklaRVJfRElTQ0FSRCkpCi0gICAgewotICAgICAgICBpZiAo
Z2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRl
ciBwYXNzIHNpbmNlIHdlIGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgotICAgICAgICAgICAgLy8g
dGFyZ2V0IGlmIG9ubHkgWEZCIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGludmFsaWRhdGVTdGF0
ZShjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAg
aWYgKCFtUmVuZGVyRW5jb2Rlci52YWxpZCgpKQogICAgIHsKICAgICAgICAgLy8gcmUtYXBwbHkg
ZXZlcnl0aGluZwpAQCAtMTg4NCw3ICsyMTI1LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10
bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgaWYgKG1EaXJ0
eUJpdHMudGVzdChESVJUWV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCiAgICAgewotICAgICAgICBB
TkdMRV9UUlkoaGFuZGxlRGlydHlSZW5kZXJQYXNzKGNvbnRleHQpKTsKKyAgICAgICAgLy8gU3Rh
cnQgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIKKyAgICAgICAgQU5HTEVfTVRMX1RSWSh0aGlz
LCBtRHJhd0ZyYW1lYnVmZmVyLT5lbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb250ZXh0KSk7CisK
KyAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworICAgICAgICBpbnZhbGlkYXRlU3RhdGUo
Y29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSAmJiBtT2NjbHVzaW9u
UXVlcnlQb29sLmdldE51bVJlbmRlclBhc3NBbGxvY2F0ZWRRdWVyaWVzKCkgPT0gMCkKQEAgLTE4
OTQsMTcgKzIxMzksMTEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1c2lv
blF1ZXJ5SW5SZW5kZXJQYXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKICAgICB9CiAKLSAg
ICBib29sIGlzUGlwZWxpbmVEZXNjQ2hhbmdlZDsKLSAgICBBTkdMRV9UUlkoY2hlY2tJZlBpcGVs
aW5lQ2hhbmdlZChjb250ZXh0LCBtb2RlLCB4ZmJQYXNzLCAmaXNQaXBlbGluZURlc2NDaGFuZ2Vk
KSk7CisgICAgYm9vbCBjaGFuZ2VkUGlwZWxpbmU7CisgICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBl
bGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZFBpcGVs
aW5lKSk7CiAKICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxzZTsKLQotICAgIGlm
IChJc1RyYW5zZm9ybUZlZWRiYWNrT25seShnZXRTdGF0ZSgpKSkKLSAgICB7Ci0gICAgICAgIC8v
IEZpbHRlciBvdXQgdW5uZWVkZWQgZGlydHkgYml0cwotICAgICAgICBmaWx0ZXJPdXRYRkJPbmx5
RGlydHlCaXRzKGNvbnRleHQpOwotICAgIH0KLQogICAgIGZvciAoc2l6ZV90IGJpdCA6IG1EaXJ0
eUJpdHMpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGJpdCkKQEAgLTE5NTMsOCArMjE5MiwxMCBA
QCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKICAgICAgICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5E
SU5HOgogICAgICAgICAgICAgICAgIHVuaWZvcm1CdWZmZXJzRGlydHkgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlM6CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5R3Jh
cGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29udGV4dCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9E
SVNDQVJEOgotICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZC4KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKQEAgLTE5NjIsODIgKzIyMDMsMzEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoeGZiUGFzcyAmJiAhbURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJf
VU5JRk9STVMpKQotICAgIHsKLSAgICAgICAgLy8gSWYgaGFuZGxlRGlydHlEcml2ZXJVbmlmb3Jt
cygpIHdhcyBub3QgY2FsbGVkIGFuZCB0aGlzIGlzIFhGQiBwYXNzLCB3ZSBzdGlsbCBuZWVkIHRv
Ci0gICAgICAgIC8vIHVwZGF0ZSBYRkIgcmVsYXRlZCB1bmlmb3JtcwotICAgICAgICBBTkdMRV9U
UlkoCi0gICAgICAgICAgICBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoZmlyc3RWZXJ0ZXgsIHZlcnRl
eE9ySW5kZXhDb3VudCwgLyoqIHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5p
Zm9ybXNCaW5kaW5nSW5kZXgpOwotICAgIH0KLQogICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKIAot
ICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2Rl
ciwgbVJlbmRlclBpcGVsaW5lRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc1BpcGVsaW5lRGVzY0NoYW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0Rp
cnR5KSk7Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLXZvaWQg
Q29udGV4dE10bDo6ZmlsdGVyT3V0WEZCT25seURpcnR5Qml0cyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCkKLXsKLSAgICBBU1NFUlQoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoZ2V0U3RhdGUo
KSkpOwotCi0gICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JB
dHRhY2htZW50c1swXS50ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOwotCi0gICAg
Ly8gSW4gdHJhbnNmb3JtIGZlZWRiYWNrIG9ubHkgcGFzcywgb25seSB2ZXJ0ZXggc2hhZGVyJ3Mg
cmVsYXRlZCBzdGF0ZXMgYXJlIG5lZWRlZC4KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRl
ZEJpdHMgPQotICAgICAgICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX1NURU5D
SUxfREVTQykgfAotICAgICAgICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX0JJ
QVMpIHwgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9TVEVOQ0lMX1JFRikgfAotICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8
c2l6ZV90PihESVJUWV9CSVRfVklFV1BPUlQpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+
KERJUlRZX0JJVF9TQ0lTU09SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfQ1VMTF9N
T0RFKSB8Ci0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfV0lORElORyk7Ci0K
LSAgICBtRGlydHlCaXRzICY9IH5rVW5uZWVkZWRCaXRzOwotfQotCi1hbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCkKLXsKLSAgICBpZiAoIUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisgICAgaWYg
KHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKICAgICB7Ci0gICAgICAgIC8vIFN0YXJ0IG5ldyByZW5k
ZXIgY29tbWFuZCBlbmNvZGVyCi0gICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFt
ZWJ1ZmZlci0+ZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICAvLyBYRkIgaXMgYWN0aXZlIGFuZCByYXN0ZXJpemF0aW9uIGlz
IGRpc2FibGVkLiBVc2UgZHVtbXkgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgLy8gV2UgY3VycmVu
dGx5IG5lZWQgdG8gZW5kIHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3RpdmF0ZWQvZGVh
Y3RpdmF0ZWQgc28gdXNpbmcKLSAgICAgICAgLy8gYSBzbWFsbCBkdW1teSByZW5kZXIgdGFyZ2V0
IHdvdWxkIG1ha2UgdGhlIHJlbmRlciBwYXNzIGVuZGluZyB2ZXJ5IGNoZWFwLgotICAgICAgICBp
ZiAoIW1EdW1teVhGQlJlbmRlclRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xF
X1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRFRleHR1cmUodGhpcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGl4ZWxGb3JtYXQoYW5nbGU6OkZv
cm1hdElEOjpSOEc4QjhBOF9VTk9STSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAmbUR1bW15WEZCUmVuZGVy
VGV4dHVyZSkpOwotICAgICAgICB9Ci0gICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIgPSBnZXRUZXh0dXJlUmVuZGVyQ29tbWFuZEVuY29kZXIoCi0gICAgICAgICAgICBt
RHVtbXlYRkJSZW5kZXJUZXh0dXJlLAotICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4
OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpKTsKLSAgICAg
ICAgZW5jb2Rlci0+c2V0Q29sb3JMb2FkQWN0aW9uKE1UTExvYWRBY3Rpb25Eb250Q2FyZSwgTVRM
Q2xlYXJDb2xvcigpLCAwKTsKLSAgICAgICAgZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihN
VExTdG9yZUFjdGlvbkRvbnRDYXJlKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZW5jb2Rl
ci0+c2V0TGFiZWwoQCJUcmFuc2Zvcm1GZWVkYmFja09ubHlQYXNzIik7Ci0jZW5kaWYKKyAgICAg
ICAgbXRsOjpSZW5kZXJVdGlscyAmdXRpbHMgPSBnZXREaXNwbGF5KCktPmdldFV0aWxzKCk7Cisg
ICAgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHV0aWxzLmNyZWF0ZVRy
YW5zZm9ybUZlZWRiYWNrUFNPKGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVs
aW5lRGVzYyk7CisgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShyZXN1bHQpOworICAgICAg
ICBhc3NlcnQocmVzdWx0ID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKyAgICAgICAgY2hh
bmdlZFBpcGVsaW5lID0gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyByZS1hcHBseSBldmVyeXRoaW5n
Ci0gICAgaW52YWxpZGF0ZVN0YXRlKGNvbnRleHQpOworICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+
c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywg
Y2hhbmdlZFBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5LCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpKTsK
IAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3Vs
dCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KQogewotICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgID0gbVN0YXRlOwot
ICAgIGNvbnN0IGdsOjpQcm9ncmFtICpwcm9ncmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7Cisg
ICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlICAgICAgICAgICAgICAgID0gbVN0YXRlOworICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0
YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0
dXJlc0NhY2hlICZ0ZXh0dXJlcyAgICAgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUo
KTsKLSAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJv
Z3JhbS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworICAgIGNvbnN0
IGdsOjpBY3RpdmVUZXh0dXJlTWFzayAmYWN0aXZlVGV4dHVyZXMgPSBleGVjdXRhYmxlLT5nZXRB
Y3RpdmVTYW1wbGVyc01hc2soKTsKIAogICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0
aXZlVGV4dHVyZXMpCiAgICAgewpAQCAtMjA2Nyw2ICsyMjU3LDcgQEAgYW5nbGU6OlJlc3VsdCBD
b250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KQogICAgIH0KIAogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAg
ICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFnbWVudERhdGEobURlZmF1bHRBdHRyaWJ1dGVzLCBtdGw6
OmtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVy
dGV4RGF0YShtRGVmYXVsdEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0lu
ZGV4KTsKIAogICAgIG1EaXJ0eURlZmF1bHRBdHRyaWJzTWFzay5yZXNldCgpOwpAQCAtMjEyMCw5
ICsyMzExLDYgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURyaXZlclVu
aWZvcm1zKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIH0KICAgICBtRHJpdmVyVW5p
Zm9ybXMuY292ZXJhZ2VNYXNrID0gY292ZXJhZ2VNYXNrOwogCi0gICAgQU5HTEVfVFJZKAotICAg
ICAgICBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoZHJhd0NhbGxGaXJzdFZlcnRleCwgdmVydGljZXNQ
ZXJJbnN0YW5jZSwgLyoqIHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotCiAgICAgQVNTRVJUKG1S
ZW5kZXJFbmNvZGVyLnZhbGlkKCkpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0
YShtRHJpdmVyVW5pZm9ybXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKICAg
ICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJp
dmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOwpAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQog
Ci1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBk
cmF3Q2FsbEZpcnN0VmVydGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgdmVydGljZXNQZXJJbnN0YW5jZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5j
ZXMpCithbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpCiB7Ci0gICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdl
dFN0YXRlKCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgY29uc3QgZ2w6OlBy
b2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxl
KCk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUpOwogCi0gICAgbURyaXZlclVuaWZvcm1zLnhmYkFj
dGl2ZVVucGF1c2VkID0gZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVz
ZWQoKTsKLSAgICBpZiAoIXRyYW5zZm9ybUZlZWRiYWNrIHx8ICFtRHJpdmVyVW5pZm9ybXMueGZi
QWN0aXZlVW5wYXVzZWQpCisgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFj
a091dHB1dCgpIHx8ICFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIG1E
cml2ZXJVbmlmb3Jtcy54ZmJWZXJ0aWNlc1BlckRyYXcgPSB2ZXJ0aWNlc1Blckluc3RhbmNlOwor
ICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0
SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgIHNpemVfdCBi
dWZmZXJDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICA9IGV4ZWN1dGFibGUtPmdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJIYW5kbGVzID0KKyAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKIAotICAgIFRyYW5zZm9ybUZl
ZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1G
ZWVkYmFjayk7CisgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8
IGJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgQnVmZmVyTXRsICpi
dWZmZXJIYW5kbGUgPSBidWZmZXJIYW5kbGVzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgQVNTRVJU
KGJ1ZmZlckhhbmRsZSk7CisgICAgICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsK
KyAgICAgICAgbVJlbmRlckVuY29kZXIuc2V0QnVmZmVyRm9yV3JpdGUoCisgICAgICAgICAgICBn
bDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRCdWZmZXIoKSwg
MCwKKyAgICAgICAgICAgIG10bDo6a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgKHVp
bnQzMl90KWJ1ZmZlckluZGV4KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtRmVlZGJh
Y2tNdGwtPmdldEJ1ZmZlck9mZnNldHModGhpcywgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJJ
bnN0YW5jZSAqIHNraXBwZWRJbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsK
KyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQg
Q29udGV4dE10bDo6aGFuZGxlRGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKQEAgLTIxNTksMTMgKzIzNTUsMTMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXgKICAgICBtdGw6OkRlcHRoU3RlbmNpbERlc2MgZHNEZXNjICAgICAgICAgICAgICA9IG1EZXB0
aFN0ZW5jaWxEZXNjOwogICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NE
ZXNjID0gbVJlbmRlckVuY29kZXIucmVuZGVyUGFzc0Rlc2MoKTsKIAotICAgIGlmICghcmVuZGVy
UGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVz
Yy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmRlcHRo
V3JpdGVFbmFibGVkICAgID0gZmFsc2U7CiAgICAgICAgIGRzRGVzYy5kZXB0aENvbXBhcmVGdW5j
dGlvbiA9IE1UTENvbXBhcmVGdW5jdGlvbkFsd2F5czsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRl
clBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNz
RGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBkc0Rlc2Mu
ZnJvbnRGYWNlU3RlbmNpbC5yZXNldCgpOwogICAgICAgICBkc0Rlc2MuYmFja0ZhY2VTdGVuY2ls
LnJlc2V0KCk7CkBAIC0yMTk2LDggKzIzOTIsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OmhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaXNQaXBlbGlu
ZURlc2NDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgeGJmUGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQogewogICAgIEFTU0VSVCht
UmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3Mg
dG9wb2xvZ3lDbGFzcyA9IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVN
b2RlKTsKQEAgLTIyMTYsMjQgKzI0MTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpj
aGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhtQmxlbmRE
ZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbVJlbmRlclBpcGVsaW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKIAotICAgICAgICBp
ZiAoeGZiUGFzcykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRp
c2FibGUgZnJhZ21lbnQgc2hhZGVyLgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5y
YXN0ZXJpemF0aW9uVHlwZSA9IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNh
YmxlZDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIG5vdCBh
Y3RpdmUgYW5kIHJhc3Rlcml6ZXIgZGlzY2FyZCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVtdWxh
dGUgdGhlCi0gICAgICAgICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVy
dGV4IHNoYWRlciBtaWdodCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAotICAgICAg
ICAgICAgLy8gTWV0YWwgZG9lc24ndCBhbGxvdyByYXN0ZXJpemF0aW9uIHRvIGJlIGRpc2FibGVk
LgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9Ci0g
ICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVk
RGlzY2FyZDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVs
aW5lUmFzdGVyaXphdGlvbjo6RW5hYmxlZDsKLSAgICAgICAgfQogICAgICAgICBtUmVuZGVyUGlw
ZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworICAgICAg
ICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKyAgICAgICAgICAgICht
U3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSA/IG10bDo6UmVuZGVyUGlwZWxpbmVS
YXN0ZXJpemF0aW9uOjpFbXVsYXRlZERpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9u
OjpFbmFibGVkKTsKICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5hbHBoYVRvQ292ZXJhZ2VF
bmFibGVkID0gbVN0YXRlLmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwogICAgICAg
ICBtUmVuZGVyUGlwZWxpbmVEZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBtU3RhdGUuaXNT
YW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsKIApAQCAtMjI0MSw3ICsyNDIzLDcgQEAgYW5nbGU6OlJl
c3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogICAgICAgICAgICAgbURyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RhdGUoKS5nZXRF
bmFibGVkRHJhd0J1ZmZlcnMoKSk7CiAgICAgfQogCi0gICAgKmlzUGlwZWxpbmVEZXNjQ2hhbmdl
ZCA9IHJwcENoYW5nZTsKKyAgICAqcGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKIAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRs
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
RGlzcGxheU10bC5oCmluZGV4IGIwMGRlMWIyZDljODczNTdhZWFlNWFmYjAxYTY3MzQyNTI0MDY2
YjQuLjI0MTcxMjIwYzVhNjUwYWVhMzhjOTI0ZTRhZmQyNGFkYWFmMzk2OWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNw
bGF5TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0Rpc3BsYXlNdGwuaApAQCAtNTIsNiArNTIsMTAgQEAgY2xhc3MgRGlzcGxheU10
bCA6IHB1YmxpYyBEaXNwbGF5SW1wbAogCiAgICAgZWdsOjpFcnJvciB3YWl0Q2xpZW50KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIHdhaXROYXRp
dmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpIG92ZXJyaWRlOwor
ICAgIGVnbDo6RXJyb3IgdmFsaWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNv
bmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVt
IGJ1ZnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRC
dWZmZXIgY2xpZW50QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
U3VyZmFjZUltcGwgKmNyZWF0ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUg
JnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luZG93LApAQCAtOTYsMTEgKzEwMCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBw
dWJsaWMgRGlzcGxheUltcGwKIAogICAgIGJvb2wgaXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRp
dmVXaW5kb3dUeXBlIHdpbmRvdykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBlZ2w6OkVycm9yIHZh
bGlkYXRlQ2xpZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmli
dXRlTWFwICZhdHRyaWJzKSBjb25zdCBvdmVycmlkZTsKLQogICAgIGVnbDo6Q29uZmlnU2V0IGdl
bmVyYXRlQ29uZmlncygpIG92ZXJyaWRlOwogCiAgICAgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJE
ZXNjcmlwdGlvbigpIGNvbnN0OwpAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwg
OiBwdWJsaWMgRGlzcGxheUltcGwKICAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCkgY29u
c3Q7CiAgICAgdm9pZCBpbml0aWFsaXplVGV4dHVyZUNhcHMoKSBjb25zdDsKICAgICB2b2lkIGlu
aXRpYWxpemVGZWF0dXJlcygpOworICAgIHZvaWQgaW5pdGlhbGl6ZUxpbWl0YXRpb25zKCk7CisK
ICAgICBhbmdsZTo6UmVzdWx0IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CiAKICAgICBtdGw6
OkF1dG9PYmpDUHRyPGlkPE1UTERldmljZT4+IG1NZXRhbERldmljZSA9IG5pbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9E
aXNwbGF5TXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KaW5kZXggMjQ3ZDc2YTgwOTI1NDk4N2NlYzU0YTI2ODcw
MDQ5OWU1NjdiZGQzZC4uMWQxMWNkNjRjZTgwMWM1ZDNiODc3ODIzY2UzOTFmZjRlMjRlMmU5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0Rpc3BsYXlNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KQEAgLTgsMTIgKzgsMTQgQEAKIAog
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKIAorI2luY2x1
ZGUgImNvbW1vbi9zeXN0ZW1fdXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3Rl
bUluZm8uaCIKICNpbmNsdWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5H
TEUvRGlzcGxheS5oIgogI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9TeW5jTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oIgpAQCAtMjIsOSArMjQsNjIgQEAKIAogI2luY2x1ZGUgIkVHTC9lZ2xleHQuaCIKIAor
I2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fTUFDQ0FUQUxZU1QpCitjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnZb
XSA9ICJBTkdMRV9QUkVGRVJSRURfREVWSUNFIjsKKyNlbmRpZgorY29uc3RleHByIGNoYXIga0FO
R0xFVHJhbnNmb3JtRmVlZGJhY2tFbnZbXSA9ICJBTkdMRV9NRVRBTF9YRkJfRU5BQkxFIjsKKwog
bmFtZXNwYWNlIHJ4CiB7CiAKK3N0YXRpYyBFR0xpbnQgR2V0RGVwdGhTaXplKEdMaW50IGludGVy
bmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMjQ6CisgICAgICAgICAgICByZXR1cm4gMjQ7Cisg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgcmV0dXJu
IDMyOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJl
dHVybiAzMjsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorICAgICAgICAgICAg
cmV0dXJuIDI0OworICAgICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICAg
ICAgcmV0dXJuIDMyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFD
SEFCTEUoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitzdGF0aWMgRUdMaW50IEdldFN0ZW5jaWxTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5D
SUxfSU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQyNDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDMyX09FUzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIEdMX0RFUFRIMjRfU1RFTkNJTDg6CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAg
Y2FzZSBHTF9ERVBUSDMyRl9TVEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiA4OworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3JtYXQp
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKIHsKICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAx
MSBmb3Igbm93LiBTaW5jZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9yIE1ldGFsIDIuMC4KQEAg
LTU3LDcgKzExMiw3IEBAIHN0cnVjdCBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsCiB9OwogCiBE
aXNwbGF5TXRsOjpEaXNwbGF5TXRsKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAg
ICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVk
KGZhbHNlKQorICAgIDogRGlzcGxheUltcGwoc3RhdGUpLCBtU3RhdGVDYWNoZShtRmVhdHVyZXMp
LCBtVXRpbHModGhpcykKIHt9CiAKIERpc3BsYXlNdGw6On5EaXNwbGF5TXRsKCkge30KQEAgLTc4
LDEwICsxMzMsMjcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplSW1wbChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7
Ci0gICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkg
QU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09T
KSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyBhbmdsZVByZWZlcnJlZERldmljZSA9IGFuZ2xlOjpHZXRFbnZpcm9ubWVudFZh
cihrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnYpOworICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWRE
ZXZpY2UgIT0gIiIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TQXJyYXk8aWQ8TVRMRGV2aWNl
Pj4gKmRldmljZXMgPSBbTVRMQ29weUFsbERldmljZXMoKSBBTkdMRV9NVExfQVVUT1JFTEVBU0Vd
OworICAgICAgICAgICAgZm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChbZGV2aWNlLm5hbWUubG93ZXJjYXNlU3Ry
aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubG93ZXJjYXNlU3RyaW5nXSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcgTWV0YWwg
RGV2aWNlOiAlQCIsIFtkZXZpY2UgbmFtZV0pOworICAgICAgICAgICAgICAgICAgICBtTWV0YWxE
ZXZpY2UgPSBbZGV2aWNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
I2VuZGlmCiAgICAgICAgIGlmICghbU1ldGFsRGV2aWNlKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyAgICAgICAgICAgIG1NZXRhbERldmljZSA9
IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsK
ICAgICAgICAgfQogCiAgICAgICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gbXRsOjpHZXREZXZp
Y2VWZW5kb3JJZChtTWV0YWxEZXZpY2UpOwpAQCAtODksMTIgKzE2MSwxMyBAQCBhbmdsZTo6UmVz
dWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVJbXBsKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAg
ICAgICAgbUNtZFF1ZXVlLnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVd
IEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOwogCiAgICAgICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLQorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgICAgICBpZiAoIW1HbHNs
YW5nSW5pdGlhbGl6ZWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdsc2xhbmdJbml0aWFsaXpl
KCk7CiAgICAgICAgICAgICBtR2xzbGFuZ0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgfQor
I2VuZGlmCiAKICAgICAgICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKICAgICAg
ICAgewpAQCAtMTIwLDEyICsxOTMsMTMgQEAgdm9pZCBEaXNwbGF5TXRsOjp0ZXJtaW5hdGUoKQog
ICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAogICAgIG1NZXRhbERldmljZVZlbmRvcklk
ID0gMDsKLQorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgIGlmIChtR2xzbGFuZ0lu
aXRpYWxpemVkKQogICAgIHsKICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsKICAgICAgICAgbUds
c2xhbmdJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIH0KKyNlbmRpZgogfQogCiBib29sIERpc3Bs
YXlNdGw6OnRlc3REZXZpY2VMb3N0KCkKQEAgLTE3MSw2ICsyNDUsMTUgQEAgZWdsOjpFcnJvciBE
aXNwbGF5TXRsOjp3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHJl
dHVybiBlZ2w6Ok5vRXJyb3IoKTsKIH0KIAorZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp2YWxpZGF0
ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIg
Y2xpZW50QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICAvLyBUT0RP
OiBGaWxsIG91dCBwcm9wZXJseQorICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwogZWds
OjpFcnJvciBEaXNwbGF5TXRsOjp3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBFR0xpbnQgZW5naW5lKQogewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE4Nyw3ICsyNzAs
OCBAQCBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlV2luZG93U3VyZmFjZShjb25zdCBl
Z2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRl
UGJ1ZmZlclN1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRl
TWFwICZhdHRyaWJzKQogewotICAgIHJldHVybiBuZXcgUEJ1ZmZlclN1cmZhY2VNdGwodGhpcywg
c3RhdGUsIGF0dHJpYnMpOworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8U3VyZmFjZUltcGwgKj4oMCk7CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpj
cmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3Rh
dGUsCkBAIC0xOTUsMTUgKzI3OSw3IEBAIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQ
YnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50
QnVmZmVyIGNsaWVudEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsK
LSAgICBzd2l0Y2ggKGJ1ZnR5cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZBQ0Vf
QU5HTEU6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywg
c3RhdGUsIGNsaWVudEJ1ZmZlciwgYXR0cmlicyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZU10bCh0aGlzLCBzdGF0
ZSwgY2xpZW50QnVmZmVyLCBhdHRyaWJzKTsKIH0KIAogU3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6
OmNyZWF0ZVBpeG1hcFN1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAt
MjQwLDE3ICszMTYsMTIgQEAgU3RyZWFtUHJvZHVjZXJJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVT
dHJlYW1Qcm9kdWNlckQzRFRleHR1cmUoCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJl
R3JvdXBJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKLXsKLSAgICByZXR1cm4g
bmV3IFNoYXJlR3JvdXBNdGwoKTsKLX0KLQogZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4
U3VwcG9ydGVkRVNWZXJzaW9uKCkgY29uc3QKIHsKICAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0
cyBHTEVTIDMuMCBvbiBpT1MgR1BVIGZhbWlseSA0KyBmb3Igbm93LgogICAgIGlmIChzdXBwb3J0
c0VpdGhlckdQVUZhbWlseSg0LCAxKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtdGw6OmtNYXhT
dXBwb3J0ZWRHTFZlcnNpb247CisgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAwKTsKICAg
ICB9CiAgICAgcmV0dXJuIGdsOjpWZXJzaW9uKDIsIDApOwogfQpAQCAtMjY1LDYgKzMzNiwxMSBA
QCBFR0xTeW5jSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU3luYyhjb25zdCBlZ2w6OkF0dHJpYnV0
ZU1hcCAmYXR0cmlicykKICAgICByZXR1cm4gbmV3IEVHTFN5bmNNdGwoYXR0cmlicyk7CiB9CiAK
K1NoYXJlR3JvdXBJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IFNoYXJlR3JvdXBJbXBsKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6
bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlZ2w6OlN1cmZhY2UgKmRyYXdTdXJmYWNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLApAQCAtMzI2LDcg
KzQwMiw3IEBAIGVnbDo6Q29uZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAg
ICAgY29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOwogCiAgICAgLy8gUGJ1ZmZlcgot
ICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisgICAgY29u
ZmlnLmJpbmRUb1RleHR1cmVUYXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7CiAg
ICAgY29uZmlnLm1heFBCdWZmZXJXaWR0aCAgICAgPSA0MDk2OwogICAgIGNvbmZpZy5tYXhQQnVm
ZmVySGVpZ2h0ICAgID0gNDA5NjsKICAgICBjb25maWcubWF4UEJ1ZmZlclBpeGVscyAgICA9IDQw
OTYgKiA0MDk2OwpAQCAtMzYxLDQxICs0MzcsMTggQEAgZWdsOjpDb25maWdTZXQgRGlzcGxheU10
bDo6Z2VuZXJhdGVDb25maWdzKCkKIAogICAgIGNvbmZpZy5jb2xvckNvbXBvbmVudFR5cGUgPSBF
R0xfQ09MT1JfQ09NUE9ORU5UX1RZUEVfRklYRURfRVhUOwogCi0gICAgY29uc3RleHByIGludCBz
YW1wbGVzU3VwcG9ydGVkW10gPSB7MCwgNH07CisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29u
ZmlnLnJlZFNpemUgICAgPSA4OworICAgIGNvbmZpZy5ncmVlblNpemUgID0gODsKKyAgICBjb25m
aWcuYmx1ZVNpemUgICA9IDg7CisgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgIGNvbmZp
Zy5idWZmZXJTaXplID0gY29uZmlnLnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmln
LmJsdWVTaXplICsgY29uZmlnLmFscGhhU2l6ZTsKIAotICAgIGZvciAoaW50IHNhbXBsZXMgOiBz
YW1wbGVzU3VwcG9ydGVkKQotICAgIHsKLSAgICAgICAgY29uZmlnLnNhbXBsZXMgICAgICAgPSBz
YW1wbGVzOwotICAgICAgICBjb25maWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8g
MCA6IDE7Ci0KLSAgICAgICAgLy8gQnVmZmVyIHNpemVzCi0gICAgICAgIGNvbmZpZy5yZWRTaXpl
ICAgID0gODsKLSAgICAgICAgY29uZmlnLmdyZWVuU2l6ZSAgPSA4OwotICAgICAgICBjb25maWcu
Ymx1ZVNpemUgICA9IDg7Ci0gICAgICAgIGNvbmZpZy5hbHBoYVNpemUgID0gODsKLSAgICAgICAg
Y29uZmlnLmJ1ZmZlclNpemUgPSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBj
b25maWcuYmx1ZVNpemUgKyBjb25maWcuYWxwaGFTaXplOwotCi0gICAgICAgIC8vIFdpdGggRFMK
LSAgICAgICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2ls
U2l6ZSA9IDg7Ci0KLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLQotICAgICAgICAvLyBX
aXRoIEQKLSAgICAgICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5z
dGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAg
Ly8gV2l0aCBTCi0gICAgICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZp
Zy5zdGVuY2lsU2l6ZSA9IDg7Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAg
ICAgLy8gTm8gRFMKLSAgICAgICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMDsKLSAgICAgICAgY29u
ZmlnLnN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLSAgICB9
CisgICAgLy8gVGVzdHMgbGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVwdGhfcmFuZ2UuKiBh
c3N1bWUgRUdMX0RFUFRIX1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYKKyAgICAvLyByZW5k
ZXJDb25maWcgYXR0cmlidXRlcyBhcmUgc2V0IHRvIGdsdTo6UmVuZGVyQ29uZmlnOjpET05UX0NB
UkUKKyAgICBjb25maWcuZGVwdGhTaXplICAgPSBHZXREZXB0aFNpemUoY29uZmlnLmRlcHRoU3Rl
bmNpbEZvcm1hdCk7CisgICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0U3RlbmNpbFNpemUoY29u
ZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgY29uZmlncy5hZGQoY29uZmlnKTsKIAogICAg
IHJldHVybiBjb25maWdzOwogfQpAQCAtNDA5LDI2ICs0NjIsNiBAQCBib29sIERpc3BsYXlNdGw6
OmlzVmFsaWROYXRpdmVXaW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiAg
ICAgfQogfQogCi1lZ2w6OkVycm9yIERpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyKGNv
bnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0
cmlidXRlTWFwICZhdHRyaWJzKSBjb25zdAotewotICAgIHN3aXRjaCAoYnVmdHlwZSkKLSAgICB7
Ci0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKLSAgICAgICAgICAgIGlmICghSU9T
dXJmYWNlU3VyZmFjZU10bDo6VmFsaWRhdGVBdHRyaWJ1dGVzKGNsaWVudEJ1ZmZlciwgYXR0cmli
cykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0
cmlidXRlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWds
OjpFZ2xCYWRBdHRyaWJ1dGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwot
fQotCiBzdGQ6OnN0cmluZyBEaXNwbGF5TXRsOjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29u
c3QKIHsKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQpAQCAtNTEyLDEwICs1NDUsMTYgQEAgdm9p
ZCBEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlhbGl6ZWQoKSBjb25zdAogICAgIG1OYXRpdmVD
YXBzLm1heFJlbmRlcmJ1ZmZlclNpemUgICA9IG1OYXRpdmVDYXBzLm1heDJEVGV4dHVyZVNpemU7
CiAgICAgbU5hdGl2ZUNhcHMubWluQWxpYXNlZFBvaW50U2l6ZSAgID0gMTsKICAgICAvLyBOT1RF
KGhxbGUpOiBNZXRhbCBoYXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBwb2ludCBzaXplIGV2
ZW4gdGhvdWdoCi0gICAgLy8gTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQg
bWF4IHN1cHBvcnRlZCBwb2ludCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gNjQgZm9yCi0g
ICAgLy8gbm93LgotICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgxNgotICAgIG1OYXRpdmVD
YXBzLm1heEFsaWFzZWRQb2ludFNpemUgPSA2NDsKKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1U
YWJsZXMucGRmIHNheXMgdGhhdCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBs
aW1pdCBpdCB0byAyNTUKKyAgICAvLyBvbiBJbnRlbCBhbmQgNjQgb24gQU1EIGZvciBub3cuCisg
ICAgaWYgKFttTWV0YWxEZXZpY2UuZ2V0KCkubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5s
b2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxp
YXNlZFBvaW50U2l6ZSA9IDI1NTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU5h
dGl2ZUNhcHMubWF4QWxpYXNlZFBvaW50U2l6ZSA9IDY0OworICAgIH0KIAogICAgIG1OYXRpdmVD
YXBzLm1pbkFsaWFzZWRMaW5lV2lkdGggPSAxLjBmOwogICAgIG1OYXRpdmVDYXBzLm1heEFsaWFz
ZWRMaW5lV2lkdGggPSAxLjBmOwpAQCAtNjE1LDYgKzY1NCw5IEBAIHZvaWQgRGlzcGxheU10bDo6
ZW5zdXJlQ2Fwc0luaXRpYWxpemVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhUcmFuc2Zv
cm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cyA9CiAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM7CiAKKyAgICAvLyBH
TF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5CisgICAgbU5hdGl2ZUNhcHMucHJvZ3JhbUJpbmFyeUZv
cm1hdHMucHVzaF9iYWNrKEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKTsKKwogICAgIC8vIEdMX0FQ
UExFX2NsaXBfZGlzdGFuY2UKICAgICBtTmF0aXZlQ2Fwcy5tYXhDbGlwRGlzdGFuY2VzID0gODsK
IApAQCAtNjQ3LDYgKzY4OSwxNSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zKCkgY29uc3QKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQm9yZGVyQ2xhbXBPRVMg
ID0gZmFsc2U7ICAvLyBub3QgaW1wbGVtZW50ZWQgeWV0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMu
dHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IHRydWU7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGlz
Y2FyZEZyYW1lYnVmZmVyICAgICA9IHRydWU7CisgICAgLy8gTm90IGltcGxlbWVudGVkIGJ1dCBl
eHBvc2UKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKwor
ICAgIC8vIEVYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICBpZiAobUZlYXR1
cmVzLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICBt
RmVhdHVyZXMuaGFzRGVwdGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmIG1GZWF0dXJlcy5oYXNTdGVu
Y2lsQXV0b1Jlc29sdmUuZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1OYXRpdmVFeHRlbnNpb25z
Lm11bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgfQogCiAgICAgLy8gRW5h
YmxlIEVYVF9ibGVuZF9taW5tYXgKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5ibGVuZE1pbk1heCA9
IHRydWU7CkBAIC02NjIsOCArNzEzLDggQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0
ZW5zaW9ucygpIGNvbnN0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxz
ZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5zZW1hcGhvcmVGZCA9IGZhbHNlOwogCi0gICAgbU5h
dGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZl
cnRleEluc3RhbmNlZERyYXcuZW5hYmxlZDsKLSAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5j
ZWRBcnJheXNFWFQgICA9IG1OYXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFOwor
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFID0gdHJ1ZTsKKyAgICBt
TmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CiAKICAgICBtTmF0
aXZlRXh0ZW5zaW9ucy5yb2J1c3RCdWZmZXJBY2Nlc3NCZWhhdmlvciA9IGZhbHNlOwogCkBAIC02
ODYsNiArNzM3LDkgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNv
bnN0CiAKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsK
IAorICAgIC8vIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkKKyAgICBtTmF0aXZlRXh0ZW5zaW9u
cy5nZXRQcm9ncmFtQmluYXJ5T0VTID0gdHJ1ZTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlz
dGFuY2UKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CiAK
QEAgLTcxMywxMSArNzY3LDE3IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVRleHR1cmVD
YXBzKCkgY29uc3QKIAogICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4dGVuc2lvbnMuCiAgICAg
bU5hdGl2ZUV4dGVuc2lvbnMuc2V0VGV4dHVyZUV4dGVuc2lvblN1cHBvcnQobU5hdGl2ZVRleHR1
cmVDYXBzKTsKLQorICAgIC8vIE1vZGlmeSBleHRlbnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0
CiAgICAgLy8gRGlzYWJsZSBhbGwgZGVwdGggYnVmZmVyIGFuZCBzdGVuY2lsIGJ1ZmZlciByZWFk
YmFjayBleHRlbnNpb25zIHVudGlsIHdlIG5lZWQgdGhlbQogICAgIG1OYXRpdmVFeHRlbnNpb25z
LnJlYWREZXB0aE5WICAgICAgICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFk
U3RlbmNpbE5WICAgICAgID0gZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGVwdGhCdWZm
ZXJGbG9hdDJOViA9IGZhbHNlOworICAgIG1OYXRpdmVFeHRlbnNpb25zLnRleHR1cmVDb21wcmVz
c2lvbkFTVENMRFJLSFIgJj0gc3VwcG9ydHNJT1NHUFVGYW1pbHkoMik7Cit9CisKK3ZvaWQgRGlz
cGxheU10bDo6aW5pdGlhbGl6ZUxpbWl0YXRpb25zKCkKK3sKKyAgICBtTmF0aXZlTGltaXRhdGlv
bnMubm9WZXJ0ZXhBdHRyaWJ1dGVBbGlhc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheU10
bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKCkKQEAgLTc3OSw2ICs4MzksOSBAQCB2b2lkIERpc3BsYXlN
dGw6OmluaXRpYWxpemVGZWF0dXJlcygpCiAgICAgQU5HTEVfRkVBVFVSRV9DT05ESVRJT04oKCZt
RmVhdHVyZXMpLCBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIWlzT1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7
CiAKKyAgICBtRmVhdHVyZXMuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQgPQorICAg
ICAgICBhbmdsZTo6R2V0RW52aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYp
WzBdID09ICcxJzsKKwogICAgIGFuZ2xlOjpQbGF0Zm9ybU1ldGhvZHMgKnBsYXRmb3JtID0gQU5H
TEVQbGF0Zm9ybUN1cnJlbnQoKTsKICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChw
bGF0Zm9ybSwgJm1GZWF0dXJlcyk7CiAKQEAgLTc4Nyw2ICs4NTAsMjcgQEAgdm9pZCBEaXNwbGF5
TXRsOjppbml0aWFsaXplRmVhdHVyZXMoKQogCiBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6Omlu
aXRpYWxpemVTaGFkZXJMaWJyYXJ5KCkKIHsKKyAgICAjaWZkZWYgQU5HTEVfTUVUQUxfWENPREVf
QlVJTERTX1NIQURFUlMKKyAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5l
dyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsKTsKKyAgICAgICAgCisgICAgCisgICAgICAgIE5T
U3RyaW5nICpwYXRoID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxl
LldlYktpdCJdLmJ1bmRsZVBhdGg7CisgICAgICAgIE5TRXJyb3IgKiBlcnJvciA9IG51bGxwdHI7
CisgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnMgPSBbZ2V0
TWV0YWxEZXZpY2UoKSBuZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGU6W05TQnVuZGxlIGJ1bmRs
ZVdpdGhQYXRoOnBhdGhdIGVycm9yOiZlcnJvcl07CisKKyAgICAgICAgaWYgKGVycm9yICYmICFt
RGVmYXVsdFNoYWRlcnNBc3luY0luZm8tPmRlZmF1bHRTaGFkZXJzKQorICAgICAgICB7CisgICAg
ICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEVSUigpIDw8ICJJbnRlcm5hbCBlcnJvcjogbmV3RGVmYXVsdExpYnJhcnlXaXRoQnVuZGxl
IGZhaWxlZC4gIiA8PCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0
U2hhZGVyc0NvbXBpbGVFcnJvciA9IHN0ZDo6bW92ZShlcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAg
ICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5jb21waWxlZCA9IHRydWU7CisgICAgICAg
IAorICAgICNlbHNlCiAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZh
dWx0U2hhZGVyQXN5bmNJbmZvTXRsKTsKIAogICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIGFz
eW5jIGluZm8gc3RydWN0IHNpbmNlIGl0IG1pZ2h0IGJlIHJlbGVhc2VkIGluIHRlcm1pbmF0ZSgp
LCBidXQgdGhlCkBAIC04MTUsNyArODk5LDcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjpp
bml0aWFsaXplU2hhZGVyTGlicmFyeSgpCiAKICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9B
VVRPUkVMRUFTRV07CiAgICAgfQotCisgICAgI2VuZGlmCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwogfQogCkBAIC04NDcsMTQ0ICs5MzEsMTIgQEAgaWQ8TVRMTGlicmFyeT4g
RGlzcGxheU10bDo6Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKQogCiBib29sIERpc3BsYXlNdGw6OnN1
cHBvcnRzSU9TR1BVRmFtaWx5KHVpbnQ4X3QgaU9TRmFtaWx5KSBjb25zdAogewotI2lmICghVEFS
R0VUX09TX0lPUyAmJiAhVEFSR0VUX09TX1RWKSB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotIyAgICBpZiAoX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhf
QUxMT1dFRCA+PSAxMzAwMDApIHx8IChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMw
MDAwKQotICAgIC8vIElmIGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5
Ol0sIHRoZW4gdXNlIGl0LgotICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSgxMy4wKSkK
LSAgICB7Ci0gICAgICAgIE1UTEdQVUZhbWlseSBmYW1pbHk7Ci0gICAgICAgIHN3aXRjaCAoaU9T
RmFtaWx5KQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGUxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFw
cGxlMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTM7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRM
R1BVRmFtaWx5QXBwbGU0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSA1OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSMgICAgICAgIGlmIFRBUkdFVF9PU19JT1MKLSAgICAgICAgICAg
IGNhc2UgNjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTY7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAgICBlbmRpZgotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFtnZXRNZXRhbERldmljZSgpIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07Ci0gICAgfSAgLy8g
TWV0YWwgMi4yCi0jICAgIGVuZGlmICAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VE
Ci0KLSAgICAvLyBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNG
YW1pbHk6XSwgdGhlbiB1c2UKLSAgICAvLyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpd
LgotICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0Y2ggKGlPU0ZhbWlseSkK
LSAgICB7Ci0jICAgIGlmIFRBUkdFVF9PU19JT1MKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1U
TEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSAzOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQ
VUZhbWlseTNfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAg
ICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTRfdjE7Ci0gICAg
ICAgICAgICBicmVhazsKLSMgICAgICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gMTIwMDAwCi0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBN
VExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHk1X3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAg
ICAgICBlbmRpZiAgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAotIyAgICBlbGlm
IFRBUkdFVF9PU19UVgotICAgICAgICBjYXNlIDE6Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X3R2T1NfR1BVRmFtaWx5MV92MTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0g
TVRMRmVhdHVyZVNldF90dk9TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSMg
ICAgZW5kaWYgIC8vIFRBUkdFVF9PU19JT1MKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3Vw
cG9ydHNGZWF0dXJlU2V0OmZlYXR1cmVTZXRdOwotI2VuZGlmICAgICAgLy8gVEFSR0VUX09TX0lP
UyB8fCBUQVJHRVRfT1NfVFYKKyAgICByZXR1cm4gbXRsOjpTdXBwb3J0c0lPU0dQVUZhbWlseShn
ZXRNZXRhbERldmljZSgpLCBpT1NGYW1pbHkpOwogfQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBv
cnRzTWFjR1BVRmFtaWx5KHVpbnQ4X3QgbWFjRmFtaWx5KSBjb25zdAogewotI2lmIFRBUkdFVF9P
U19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0jICAgIGlmIGRlZmluZWQoX19NQUNfMTBf
MTUpCi0gICAgLy8gSWYgZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6
XSwgdGhlbiB1c2UgaXQuCi0gICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQygxMC4xNSwg
MTMuMCkpCi0gICAgewotICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OwotCi0gICAgICAgIHN3
aXRjaCAobWFjRmFtaWx5KQotICAgICAgICB7Ci0jICAgICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExH
UFVGYW1pbHlNYWNDYXRhbHlzdDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5
c3QyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotIyAgICAgICAgZWxzZSAgIC8vIFRBUkdFVF9P
U19NQUNDQVRBTFlTVAotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGZhbWls
eSA9IE1UTEdQVUZhbWlseU1hYzE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSMgICAgICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFtnZXRNZXRhbERldmljZSgpIHN1cHBvcnRz
RmFtaWx5OmZhbWlseV07Ci0gICAgfSAgLy8gTWV0YWwgMi4yCi0jICAgIGVuZGlmCi0KLSAgICAv
LyBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwg
dGhlbiB1c2UKLSAgICAvLyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgotIyAgICBp
ZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICBVTlJFQUNIQUJMRSgpOwotICAgIHJldHVybiBm
YWxzZTsKLSMgICAgZWxzZQotICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0
Y2ggKG1hY0ZhbWlseSkKLSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZlYXR1
cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBi
cmVhazsKLSMgICAgICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTQpCi0gICAgICAgIGNhc2UgMjoK
LSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTJf
djE7Ci0gICAgICAgICAgICBicmVhazsKLSMgICAgICAgIGVuZGlmCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBbZ2V0TWV0YWxE
ZXZpY2UoKSBzdXBwb3J0c0ZlYXR1cmVTZXQ6ZmVhdHVyZVNldF07Ci0jICAgIGVuZGlmICAvLyBU
QVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSNlbHNlICAgICAgIC8vICNpZiBUQVJHRVRfT1NfT1NYIHx8
IFRBUkdFVF9PU19NQUNDQVRBTFlTVAotCi0gICAgcmV0dXJuIGZhbHNlOwotCi0jZW5kaWYKKyAg
ICByZXR1cm4gbXRsOjpTdXBwb3J0c01hY0dQVUZhbWlseShnZXRNZXRhbERldmljZSgpLCBtYWNG
YW1pbHkpOwogfQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KHVp
bnQ4X3QgaU9TRmFtaWx5LCB1aW50OF90IG1hY0ZhbWlseSkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1
ZmZlck10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKaW5kZXggYjQ1OGJkOTFiYmVmYWY2ZGRiMjIyNjRiNzgx
ZTNlODZjN2MzZjdlNi4uNWU1Y2NlOWM1MWNmOGZiMmJmYmFkZmYxNTczMzVlYTczYTI0OThhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKQEAgLTIzLDEyICsyMywx
NCBAQCBuYW1lc3BhY2UgbXRsCiBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2RlcjsKIH0gIC8vIG5h
bWVzcGFjZSBtdGwKIGNsYXNzIENvbnRleHRNdGw7Ci1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOwor
Y2xhc3MgU3VyZmFjZU10bDsKIAogY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVi
dWZmZXJJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJh
bWVidWZmZXJTdGF0ZSAmc3RhdGUsIGJvb2wgZmxpcFksIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2ti
dWZmZXIpOworICAgIGV4cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZl
clN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1ZmZl
cik7CiAgICAgfkZyYW1lYnVmZmVyTXRsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKIApAQCAtOTcsNyArOTksNyBAQCBj
bGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKIAogICAgIGdsOjpS
ZWN0YW5nbGUgZ2V0Q29tcGxldGVSZW5kZXJBcmVhKCkgY29uc3Q7CiAgICAgaW50IGdldFNhbXBs
ZXMoKSBjb25zdDsKLSAgICBXaW5kb3dTdXJmYWNlTXRsICpnZXRBdHRhY2hlZEJhY2tidWZmZXIo
KSBjb25zdCB7IHJldHVybiBtQmFja2J1ZmZlcjsgfQorICAgIFN1cmZhY2VNdGxQcm90b2NvbCAq
Z2V0QXR0YWNoZWRCYWNrYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KIAog
ICAgIGJvb2wgcmVuZGVyUGFzc0hhc1N0YXJ0ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkgY29u
c3Q7CiAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtMTYyLDYgKzE2NCwxMCBAQCBjbGFz
cyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICBtdGw6OlJlbmRl
ckNvbW1hbmRFbmNvZGVyICplbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBhc3NEZXNjICZkZXNjKTsKIAorICAgIHZvaWQg
b3ZlcnJpZGVDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yIGNsZWFyQ29sb3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOworCiAgICAgYW5n
bGU6OlJlc3VsdCB1cGRhdGVDb2xvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgc2l6ZV90IGNvbG9ySW5kZXhHTCk7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVEZXB0
aFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJl
c3VsdCB1cGRhdGVTdGVuY2lsUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
KTsKQEAgLTE2OSwxMSArMTc1LDM3IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDogcHVibGljIEZy
YW1lYnVmZmVySW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0TXRsICoqY2FjaGVk
UmVuZGVyVGFyZ2V0KTsKIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgdGhl
IHJlbmRlciB0YXJnZXQncyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUgdGV4dHVyZSBpcyByZWFkYWJs
ZQorICAgIC8vIG9yIGNyZWF0ZSBhIGNvcHkgb2YgdGhhdCB0ZXh0dXJlIHRoYXQgaXMgcmVhZGFi
bGUgaWYgbm90LiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkCisgICAgLy8gZm9yIHBh
Y2tlZCBkZXB0aCBzdGVuY2lsIHdoZXJlIHJlYWRpbmcgc3RlbmNpbCByZXF1aXJlcyBhIHN0ZW5j
aWwgdmlldy4gSG93ZXZlciBpZiBhIHRleHR1cmUKKyAgICAvLyBoYXMgYm90aCByZW5kZXIgdGFy
Z2V0LCBwaXhlbCBmb3JtYXQgdmlldyAmIHNoYWRlciByZWFkYWJsZSB1c2FnZSBmbGFncywgdGhl
cmUgd2lsbCBiZQorICAgIC8vIHNvbWUgZ2xpdGNoZXMgaGFwcGVuIGluIE1ldGFsIGZyYW1ld29y
ay4KKyAgICAvLyBTbyB0aGUgc29sdXRpb24gaXMgY3JlYXRpbmcgYSBkZXB0aCBzdGVuY2lsIHRl
eHR1cmUgd2l0aG91dCBwaXhlbCBmb3JtYXQgdmlldyBmbGFnIGJ1dCBoYXMKKyAgICAvLyByZW5k
ZXIgdGFyZ2V0IGZsYWcsIHRoZW4gZHVyaW5nIGJsaXR0aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVy
ZSBpcyBjb3BpZWQgdG8gYW5vdGhlcgorICAgIC8vIGludGVybWlkaWF0ZSB0ZXh0dXJlIGhhdmlu
ZyBwaXhlbCBmb3JtYXQgdmlldyBmbGFnLCBidXQgbm90IHJlbmRlciB0YXJnZXQgZmxhZy4KKyAg
ICBhbmdsZTo6UmVzdWx0IGdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnJ0dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
dGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVwdGhWaWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVu
Y2lsVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5n
bGUgKnJlYWRhYmxlVmlld0FyZWEpOworCiAgICAgYW5nbGU6OlJlc3VsdCByZWFkUGl4ZWxzVG9Q
Qk8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYWNrUGl4ZWxzUGFyYW1zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAq
cmVuZGVyVGFyZ2V0KSBjb25zdDsKIAorICAgIGFuZ2xlOjpSZXN1bHQgcmVhZFBpeGVsc1RvQnVm
ZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93T3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmZHN0QW5nbGVGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgZHN0QnVmZmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpkc3RCdWZmZXIpIGNvbnN0
OworCiAgICAgLy8gTk9URTogd2UgY2Fubm90IHVzZSBSZW5kZXJUYXJnZXRDYWNoZSBoZXJlIGJl
Y2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IHNlcGFyYXRlCiAgICAgLy8gZGVwdGggJiBzdGVuY2ls
IGF0dGFjaG1lbnRzIGFzIG9mIG5vdy4gU2VwYXJhdGUgZGVwdGggJiBzdGVuY2lsIGNvdWxkIGJl
IHVzZWZ1bCB0bwogICAgIC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1Bh
Y2tlZERlcHRoU3RlbmNpbFN1cHBvcnQubWQuCkBAIC0xODksOCArMjIxLDEwIEBAIGNsYXNzIEZy
YW1lYnVmZmVyTXRsIDogcHVibGljIEZyYW1lYnVmZmVySW1wbAogICAgIC8vIGFzIGJ5IGEgY29t
cHV0ZSBwYXNzLgogICAgIGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CiAKLSAg
ICBXaW5kb3dTdXJmYWNlTXRsICptQmFja2J1ZmZlciA9IG51bGxwdHI7Ci0gICAgY29uc3QgYm9v
bCBtRmxpcFkgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1C
YWNrYnVmZmVyID0gbnVsbHB0cjsKKyAgICBjb25zdCBib29sIG1GbGlwWSAgICAgICAgICAgICAg
ID0gZmFsc2U7CisKKyAgICBtdGw6OkJ1ZmZlclJlZiBtUmVhZFBpeGVsQnVmZmVyOwogfTsKIH0g
IC8vIG5hbWVzcGFjZSByeAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0gYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwu
bW0KaW5kZXggODRlNDIyNzBhNzE1MzA3NzVhNzA4NmQ3MjcyNGRiZjkxOWM4NGFkNy4uZDcxZGU3
MmQyZGQyNTFiMjhiYTZjYzlmZmZjMTE1MzNjMDFkMDJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRs
Lm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQpAQCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVN
VExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKICAgICAqY29sb3JP
dXQgPQogICAgICAgICBtdGw6OkVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKGNsZWFyQ29sb3IudG9N
VExDbGVhckNvbG9yKCksIHRleHR1cmUtPmdldENvbG9yV3JpdGFibGVNYXNrKCkpOwogfQorCitj
b25zdCBnbDo6SW50ZXJuYWxGb3JtYXQgJkdldFJlYWRBdHRhY2htZW50SW5mbyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KQoreworICAgIEdMZW51bSBp
bXBsRm9ybWF0OworCisgICAgaWYgKHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQtPmdldEZv
cm1hdCgpKQorICAgIHsKKyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9y
bWF0KCktPmFjdHVhbEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1h
dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW1wbEZvcm1hdCA9IEdMX05PTkU7
CisgICAgfQorCisgICAgcmV0dXJuIGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0SW5mbyhpbXBs
Rm9ybWF0KTsKK30KKwogfQogCiAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgogRnJh
bWVidWZmZXJNdGw6OkZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZz
dGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVm
ZmVyKQogICAgIDogRnJhbWVidWZmZXJJbXBsKHN0YXRlKSwgbUJhY2tidWZmZXIoYmFja2J1ZmZl
ciksIG1GbGlwWShmbGlwWSkKIHsKICAgICByZXNldCgpOwpAQCAtNTUsNiArNzMsOCBAQCB2b2lk
IEZyYW1lYnVmZmVyTXRsOjpyZXNldCgpCiAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5j
aWxSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogCiAgICAgbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0
YWNobWVudEZvcm1hdCA9IG51bGxwdHI7CisKKyAgICBtUmVhZFBpeGVsQnVmZmVyID0gbnVsbHB0
cjsKIH0KIAogdm9pZCBGcmFtZWJ1ZmZlck10bDo6ZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCkKQEAgLTEyMiw3ICsxNDIsNiBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRs
OjpjbGVhckJ1ZmZlcmZ2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCiB7
CiAgICAgbXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOwotCiAgICAgZ2w6OkRyYXdCdWZm
ZXJNYXNrIGNsZWFyQ29sb3JCdWZmZXJzOwogICAgIGlmIChidWZmZXIgPT0gR0xfREVQVEgpCiAg
ICAgewpAQCAtMTMzLDcgKzE1Miw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNs
ZWFyQnVmZmVyZnYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGNsZWFyQ29s
b3JCdWZmZXJzLnNldChkcmF3YnVmZmVyKTsKICAgICAgICAgY2xlYXJPcHRzLmNsZWFyQ29sb3Ig
PSBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2
YWx1ZXNbM10pOwogICAgIH0KLQogICAgIHJldHVybiBjbGVhckltcGwoY29udGV4dCwgY2xlYXJD
b2xvckJ1ZmZlcnMsICZjbGVhck9wdHMpOwogfQogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJCdWZmZXJ1aXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0xNDUsOCAr
MTYzLDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgY2xlYXJDb2xvckJ1ZmZlcnMuc2V0KGRyYXdi
dWZmZXIpOwogCiAgICAgbXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOwotICAgIGNsZWFy
T3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNb
MV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKLQorICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0g
IG10bDo6Q2xlYXJDb2xvclZhbHVlKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZh
bHVlc1szXSk7CiAgICAgcmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBjbGVhckNvbG9yQnVmZmVy
cywgJmNsZWFyT3B0cyk7CiB9CiBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1
ZmZlcml2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtMTU5LDcgKzE3Niw3IEBAIGFu
Z2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyaXYoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JCdWZmZXJzOwog
ICAgIGlmIChidWZmZXIgPT0gR0xfU1RFTkNJTCkKICAgICB7Ci0gICAgICAgIGNsZWFyT3B0cy5j
bGVhclN0ZW5jaWwgPSB2YWx1ZXNbMF0gJiBtdGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICAgICAg
Y2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRpY19j
YXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewpAQCAtMTc3LDcgKzE5NCw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFy
QnVmZmVyZmkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgbXRsOjpDbGVhclJl
Y3RQYXJhbXMgY2xlYXJPcHRzOwogICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsK
LSAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gc3RlbmNpbCAmIG10bDo6a1N0ZW5jaWxNYXNr
QWxsOworICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAoc3RlbmNpbCwgMCwg
c3RhdGljX2Nhc3Q8R0xpbnQ+KG10bDo6a1N0ZW5jaWxNYXNrQWxsKSk7CiAKICAgICByZXR1cm4g
Y2xlYXJJbXBsKGNvbnRleHQsIGdsOjpEcmF3QnVmZmVyTWFzaygpLCAmY2xlYXJPcHRzKTsKIH0K
QEAgLTE4NSwxMiArMjAyLDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmaShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIGNvbnN0IGdsOjpJbnRlcm5hbEZv
cm1hdCAmRnJhbWVidWZmZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAog
ICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBjb25zdAogewotICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKLSAgICBHTGVudW0gc2l6ZWRG
b3JtYXQgICAgICAgPSBtU3RhdGUuZ2V0UmVhZEF0dGFjaG1lbnQoKS0+Z2V0Rm9ybWF0KCkuaW5m
by0+c2l6ZWRJbnRlcm5hbEZvcm1hdDsKLSAgICBhbmdsZTo6Rm9ybWF0SUQgZm9ybWF0SUQgPSBh
bmdsZTo6Rm9ybWF0OjpJbnRlcm5hbEZvcm1hdFRvSUQoc2l6ZWRGb3JtYXQpOwotICAgIGNvbnN0
IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBp
eGVsRm9ybWF0KGZvcm1hdElEKTsKLSAgICBHTGVudW0gaW1wbEZvcm1hdCAgICAgICAgICAgID0g
bXRsRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZv
cm1hdDsKLSAgICByZXR1cm4gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXRJbmZvKGltcGxGb3Jt
YXQpOworICAgIHJldHVybiBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JS
ZWFkUmVuZGVyVGFyZ2V0KGNvbnRleHQpKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZl
ck10bDo6cmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTU5MCw2ICs2
MDIsOSBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpzeW5jU3RhdGUoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHRNdGwtPm9u
RHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNvbnRleHQsIHRoaXMsIHJlbmRlclBhc3NDaGFu
Z2VkKTsKICAgICAgICAgfQorCisgICAgICAgIC8vIFJlY3JlYXRlIHBpeGVsIHJlYWRpbmcgYnVm
ZmVyIGlmIG5lZWRlZCBpbiBmdXR1cmUuCisgICAgICAgIG1SZWFkUGl4ZWxCdWZmZXIgPSBudWxs
cHRyOwogICAgIH0KIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTc0
OCw3ICs3NjMsNyBAQCB2b2lkIEZyYW1lYnVmZmVyTXRsOjpvblN0YXJ0ZWREcmF3aW5nVG9GcmFt
ZUJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIAogdm9pZCBGcmFtZWJ1ZmZlck10
bDo6b25GcmFtZUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBpZiAoIW1C
YWNrYnVmZmVyKQorICAgIGlmICghbUJhY2tidWZmZXIgfHwgbUJhY2tidWZmZXItPnByZXNlcnZl
QnVmZmVyKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODEyLDYgKzgyNyw5
MiBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjp1cGRhdGVDYWNoZWRSZW5kZXJUYXJn
ZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKIH0KIAorYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVW
aWV3Rm9yUmVuZGVyVGFyZ2V0KAorICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
IGNvbnN0IFJlbmRlclRhcmdldE10bCAmcnR0LAorICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJl
YWRBcmVhLAorICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0aFZpZXdPdXQsCisgICAg
bXRsOjpUZXh0dXJlUmVmICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0LAorICAgIHVpbnQzMl90ICpy
ZWFkYWJsZVZpZXdMZXZlbCwKKyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisgICAg
Z2w6OlJlY3RhbmdsZSAqcmVhZGFibGVWaWV3QXJlYSkKK3sKKyAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsICAgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBtdGw6OlRleHR1cmVSZWYg
c3JjVGV4dHVyZSA9IHJ0dC5nZXRUZXh0dXJlKCk7CisgICAgdWludDMyX3QgbGV2ZWwgICAgICAg
ICAgICAgPSBydHQuZ2V0TGV2ZWxJbmRleCgpLmdldCgpOworICAgIHVpbnQzMl90IHNsaWNlICAg
ICAgICAgICAgID0gcnR0LmdldExheWVySW5kZXgoKTsKKworICAgIC8vIE5PVEUoaHFsZSk6IHNs
aWNlIGlzIG5vdCB1c2VkIGF0bS4KKyAgICBBU1NFUlQoc2xpY2UgPT0gMCk7CisKKyAgICBib29s
IHJlYWRTdGVuY2lsID0gcmVhZGFibGVTdGVuY2lsVmlld091dDsKKworICAgIGlmICghc3JjVGV4
dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091dCkKKyAgICAgICAg
eworICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsKKyAgICAgICAg
fQorICAgICAgICBpZiAocmVhZGFibGVTdGVuY2lsVmlld091dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKnJlYWRhYmxlU3RlbmNpbFZpZXdPdXQgPSBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgICpyZWFkYWJsZVZpZXdBcmVhID0gcmVhZEFyZWE7CisgICAgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKKyAgICB9CisKKyAgICBib29sIHNraXBDb3B5ID0gc3JjVGV4dHVy
ZS0+aXNTaGFkZXJSZWFkYWJsZSgpOworICAgIGlmIChydHQuZ2V0Rm9ybWF0KCktPmhhc0RlcHRo
QW5kU3RlbmNpbEJpdHMoKSAmJiByZWFkU3RlbmNpbCkKKyAgICB7CisgICAgICAgIC8vIElmIHRo
ZSB0ZXh0dXJlIGlzIHBhY2tlZCBkZXB0aCBzdGVuY2lsLCBhbmQgd2UgbmVlZCBzdGVuY2lsIHZp
ZXcsCisgICAgICAgIC8vIHRoZW4gaXQgbXVzdCBzdXBwb3J0IGNyZWF0aW5nIGRpZmZlcmVudCBm
b3JtYXQgdmlldy4KKyAgICAgICAgc2tpcENvcHkgPSBza2lwQ29weSAmJiBzcmNUZXh0dXJlLT5z
dXBwb3J0Rm9ybWF0VmlldygpOworICAgIH0KKworICAgIGlmIChza2lwQ29weSkKKyAgICB7Cisg
ICAgICAgIC8vIFRleHR1cmUgc3VwcG9ydHMgc3RlbmNpbCB2aWV3LCBqdXN0IHVzZSBpdCBkaXJl
Y3RseQorICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IHNyY1RleHR1cmU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gc3JjVGV4dHVyZTsKKyAgICAgICAgfQorICAgICAg
ICAqcmVhZGFibGVWaWV3TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVy
ID0gc2xpY2U7CisgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IHJlYWRBcmVhOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBBU1NFUlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUo
KSAhPSBNVExUZXh0dXJlVHlwZTNEKTsKKworICAgICAgICAvLyBUZXh0dXJlIGRvZXNuJ3Qgc3Vw
cG9ydCBzdGVuY2lsIHZpZXcgb3Igbm90IHNoYWRlciByZWFkYWJsZSwgY29weSB0byBhbiBpbnRl
cm1pbmF0ZQorICAgICAgICAvLyB0ZXh0dXJlIHRoYXQgc3VwcG9ydHMgc3RlbmNpbCB2aWV3IGFu
ZCBzaGFkZXIgcmVhZC4KKyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0g
c3JjVGV4dHVyZS0+Z2V0UmVhZGFibGVDb3B5KAorICAgICAgICAgICAgY29udGV4dE10bCwgY29u
dGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCksIGxldmVsLCBzbGljZSwKKyAgICAgICAg
ICAgIE1UTFJlZ2lvbk1ha2UyRChyZWFkQXJlYS54LCByZWFkQXJlYS55LCByZWFkQXJlYS53aWR0
aCwgcmVhZEFyZWEuaGVpZ2h0KSk7CisKKyAgICAgICAgQU5HTEVfQ0hFQ0tfR0xfQUxMT0MoY29u
dGV4dE10bCwgZm9ybWF0YWJsZVZpZXcpOworCisgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmll
d091dCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gZm9y
bWF0YWJsZVZpZXc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdP
dXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gZm9y
bWF0YWJsZVZpZXctPmdldFN0ZW5jaWxWaWV3KCk7CisgICAgICAgIH0KKworICAgICAgICAqcmVh
ZGFibGVWaWV3TGV2ZWwgPSAwOworICAgICAgICAqcmVhZGFibGVWaWV3TGF5ZXIgPSAwOworICAg
ICAgICAqcmVhZGFibGVWaWV3QXJlYSAgPSBnbDo6UmVjdGFuZ2xlKDAsIDAsIHJlYWRBcmVhLndp
ZHRoLCByZWFkQXJlYS5oZWlnaHQpOworICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKK30KKwogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJl
bmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBhc3NEZXNjICpwRGVzY091
dCkKIHsKQEAgLTgzMiw5ICs5MzMsOSBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgaWYg
KGNvbG9yUmVuZGVyVGFyZ2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb2xvclJlbmRlclRh
cmdldC0+dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MoJmNvbG9yQXR0YWNobWVudCk7CisgICAg
ICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgY29s
b3JSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CiAKICAgICAgICAgICAgIGRlc2Mu
bnVtQ29sb3JBdHRhY2htZW50cyA9IHN0ZDo6bWF4KGRlc2MubnVtQ29sb3JBdHRhY2htZW50cywg
Y29sb3JJbmRleEdMICsgMSk7Ci0gICAgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjpt
YXgoZGVzYy5zYW1wbGVDb3VudCwgY29sb3JSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMo
KSk7CiAKICAgICAgICAgICAgIGlmICghbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZv
cm1hdCkKICAgICAgICAgICAgIHsKQEAgLTg2MiwyMiArOTYzLDI5IEBAIGFuZ2xlOjpSZXN1bHQg
RnJhbWVidWZmZXJNdGw6OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAogICAgICAgICBtRGVwdGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnRE
ZXNjKCZkZXNjLmRlcHRoQXR0YWNobWVudCk7CiAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBz
dGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBtRGVwdGhSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNh
bXBsZXMoKSk7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGRlc2MuZGVwdGhBdHRh
Y2htZW50LnJlc2V0KCk7Ci0gICAgfQogCiAgICAgaWYgKG1TdGVuY2lsUmVuZGVyVGFyZ2V0KQog
ICAgIHsKICAgICAgICAgbVN0ZW5jaWxSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjKCZkZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKICAgICAgICAgZGVzYy5zYW1wbGVDb3Vu
dCA9IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT5nZXRS
ZW5kZXJTYW1wbGVzKCkpOwogICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKworLy8gT3ZlcnJpZGUgY2xlYXIgY29sb3IgYmFzZWQgb24gdGV4dHVyZSdzIHdy
aXRlIG1hc2sKK3ZvaWQgRnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTVRMQ2xlYXJDb2xvciBjbGVhckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgKmNvbG9yT3V0KQoreworICAgIGlmICh0
ZXh0dXJlKQorICAgIHsKKyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFscGhhQ2xl
YXJDb2xvcihjbGVhckNvbG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygpKTsKKyAg
ICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZXNl
dCgpOworICAgICAgICAqY29sb3JPdXQgPSBjbGVhckNvbG9yOwogICAgIH0KLQotICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZl
ck10bDo6Y2xlYXJXaXRoTG9hZE9wKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtOTIz
LDcgKzEwMzEsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2Fk
T3BSZW5kZXJQYXNzTm90U3RhcnRlZCgKIAogICAgICAgICBtdGw6OlJlbmRlclBhc3NDb2xvckF0
dGFjaG1lbnREZXNjICZjb2xvckF0dGFjaG1lbnQgPQogICAgICAgICAgICAgdGVtcERlc2MuY29s
b3JBdHRhY2htZW50c1tjb2xvckluZGV4R0xdOwotICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVS
ZWYgJnRleHR1cmUgPSBjb2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICAgICAgY29uc3QgbXRs
OjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1cmUoKTsKIAogICAg
ICAgICBpZiAoY2xlYXJDb2xvckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQogICAgICAgICB7
CkBAIC05NjYsNyArMTA3NCw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFy
V2l0aExvYWRPcFJlbmRlclBhc3NTdGFydGVkKAogCiAgICAgICAgIG10bDo6UmVuZGVyUGFzc0Nv
bG9yQXR0YWNobWVudERlc2MgJmNvbG9yQXR0YWNobWVudCA9CiAgICAgICAgICAgICBtUmVuZGVy
UGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tjb2xvckluZGV4R0xdOwotICAgICAgICBjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICAg
ICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1
cmUoKTsKIAogICAgICAgICBpZiAoY2xlYXJDb2xvckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wp
KQogICAgICAgICB7CkBAIC0xMTkzLDggKzEzMDEsOSBAQCBnbDo6UmVjdGFuZ2xlIEZyYW1lYnVm
ZmVyTXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZQogICAgIGdsOjpSZWN0YW5nbGUgZmxpcHBlZEFyZWEgPSBnbEFyZWE7CiAgICAgaWYgKG1GbGlw
WSkKICAgICB7Ci0gICAgICAgIGZsaXBwZWRBcmVhLnkgPSByZWFkUlQtPmdldFRleHR1cmUoKS0+
aGVpZ2h0KHJlYWRSVC0+Z2V0TGV2ZWxJbmRleCgpKSAtIGZsaXBwZWRBcmVhLnkgLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZmxpcHBlZEFyZWEuaGVpZ2h0OworICAgICAgICBmbGlwcGVkQXJl
YS55ID0KKyAgICAgICAgICAgIHJlYWRSVC0+Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVhZFJULT5n
ZXRMZXZlbEluZGV4KCkpIC0KKyAgICAgICAgICAgIGZsaXBwZWRBcmVhLnkgLSBmbGlwcGVkQXJl
YS5oZWlnaHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIGZsaXBwZWRBcmVhOwpAQCAtMTIxMSw3ICsx
MzIwLDYgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CiAgICAgfQotCiAgICAgaWYgKHBhY2tQaXhlbHNQYXJhbXMucGFja0J1
ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVybiByZWFkUGl4ZWxzVG9QQk8oY29udGV4dCwgYXJl
YSwgcGFja1BpeGVsc1BhcmFtcywgcmVuZGVyVGFyZ2V0KTsKQEAgLTEyNjEsNyArMTM2OSw3IEBA
IGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHNJbXBsKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogCiAgICAgICAgIC8vIENvbnZlcnQgdG8gZGVzdGluYXRpb24gZm9y
bWF0CiAgICAgICAgIFBhY2tQaXhlbHMocGFja1BpeGVsc1Jvd1BhcmFtcywgcmVhZEFuZ2xlRm9y
bWF0LCBidWZmZXJSb3dQaXRjaCwgcmVhZFBpeGVsUm93QnVmZmVyLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICAgICBwaXhlbHMpOworICAgICAgICAgICBwaXhlbHMpOwogICAgIH0KIAogICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTEyNzksMTkgKzEzODcsMzYgQEAgYW5n
bGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogCiAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRleHRNdGwsIHBhY2tQaXhl
bHNQYXJhbXMub2Zmc2V0IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwK
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIGNvbnN0IHVp
bnQzMl90IGRzdEJ1ZmZlck9mZnNldCAgICAgID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhY2tQ
aXhlbHNQYXJhbXMub2Zmc2V0KTsKLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRj
aCAgICA9IHBhY2tQaXhlbHNQYXJhbXMub3V0cHV0UGl0Y2g7Ci0gICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmZHN0QW5nbGVGb3JtYXQgPSAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9ybWF0OwotICAg
IGNvbnN0IGJvb2wgcmV2ZXJzZVJvd09yZGVyICAgICAgICAgID0gcGFja1BpeGVsc1BhcmFtcy5y
ZXZlcnNlUm93T3JkZXI7CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHBhY2tQaXhlbHNQYXJhbXMub2Zmc2V0KTsKIAogICAgIEJ1ZmZlck10bCAqcGFja0J1ZmZl
ck10bCA9IG10bDo6R2V0SW1wbChwYWNrUGl4ZWxzUGFyYW1zLnBhY2tCdWZmZXIpOwogICAgIG10
bDo6QnVmZmVyUmVmIGRzdEJ1ZmZlciA9IHBhY2tCdWZmZXJNdGwtPmdldEN1cnJlbnRCdWZmZXIo
KTsKIAorICAgIHJldHVybiByZWFkUGl4ZWxzVG9CdWZmZXIoY29udGV4dCwgYXJlYSwgcmVuZGVy
VGFyZ2V0LCBwYWNrUGl4ZWxzUGFyYW1zLnJldmVyc2VSb3dPcmRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYWNrUGl4ZWxzUGFyYW1zLmRlc3RGb3JtYXQsIG9mZnNldCwgcGFj
a1BpeGVsc1BhcmFtcy5vdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZkc3RCdWZmZXIpOworfQorCithbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4
ZWxzVG9CdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJl
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2VSb3dPcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9y
bWF0ICZkc3RBbmdsZUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0QnVmZmVyUm93UGl0
Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXRsOjpCdWZmZXJSZWYgKnBEc3RCdWZmZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRl
clRhcmdldCk7CisKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOworCiAgICAgY29uc3QgbXRsOjpGb3JtYXQgJnJlYWRGb3JtYXQgICAgICAgID0gKnJl
bmRlclRhcmdldC0+Z2V0Rm9ybWF0KCk7CiAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmcmVhZEFu
Z2xlRm9ybWF0ID0gcmVhZEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpOwogCiAgICAgbXRsOjpU
ZXh0dXJlUmVmIHRleHR1cmUgPSByZW5kZXJUYXJnZXQtPmdldFRleHR1cmUoKTsKIAorICAgIGNv
bnN0IG10bDo6QnVmZmVyUmVmICZkc3RCdWZmZXIgPSAqcERzdEJ1ZmZlcjsKKwogICAgIGlmIChk
c3RBbmdsZUZvcm1hdC5pZCAhPSByZWFkQW5nbGVGb3JtYXQuaWQgfHwgdGV4dHVyZS0+c2FtcGxl
cygpID4gMSB8fAogICAgICAgICAoZHN0QnVmZmVyT2Zmc2V0ICUgZHN0QW5nbGVGb3JtYXQucGl4
ZWxCeXRlcykgfHwKICAgICAgICAgKGRzdEJ1ZmZlck9mZnNldCAlIG10bDo6a1RleHR1cmVUb0J1
ZmZlckJsaXR0aW5nQWxpZ25tZW50KSkKQEAgLTEzNTksOCArMTQ4NCw4IEBAIGFuZ2xlOjpSZXN1
bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKIAogICAgICAgICAgICAgdWludDMyX3QgYnVmZmVyUm93T2Zmc2V0ID0gZHN0QnVmZmVy
T2Zmc2V0OwogICAgICAgICAgICAgLy8gQ29weSBwaXhlbHMgcm93IGJ5IHJvdwotICAgICAgICAg
ICAgZm9yIChpbnQgciA9IHN0YXJ0Um93LCBjb3BpZWRSb3dzID0gMDsgY29waWVkUm93cyA8IGFy
ZWEuaGVpZ2h0OwotICAgICAgICAgICAgICAgICArK2NvcGllZFJvd3MsIC0tciwgYnVmZmVyUm93
T2Zmc2V0ICs9IGRzdEJ1ZmZlclJvd1BpdGNoKQorICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0
YXJ0Um93LCBpID0gMDsgaSA8IGFyZWEuaGVpZ2h0OworICAgICAgICAgICAgICAgICArK2ksIC0t
ciwgYnVmZmVyUm93T2Zmc2V0ICs9IGRzdEJ1ZmZlclJvd1BpdGNoKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHNyY1Jvd1JlZ2lvbi55ID0gcjsKIApAQCAtMTM3NSw1ICsxNTAwLDQg
QEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc1RvUEJPKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTQ4ZTVkYjkwOWJhOGJlNDQwZTE5ZjQyMTc3MmRkZDFmM2VhNjE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaApAQCAtMCwwICsxLDEyNiBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNF
TVRMX0hfCisjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX0lPU1VSRkFDRVNVUkZBQ0VN
VExfSF8KKworI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2VSZWYuaD4KKyNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9TdXJmYWNlSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TdXJmYWNlTXRsLmgiCisKK25hbWVzcGFjZSBtZXRhbAoreworY2xhc3MgQXR0cmlidXRlTWFw
OworfSAgLy8gbmFtZXNwYWNlIG1ldGFsCisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBEaXNw
bGF5TVRMOworCitjbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVibGljIFN1cmZhY2VNdGxQ
cm90b2NvbAoreworICBwdWJsaWM6CisgICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRs
ICpkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3Rh
dGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRy
aWJzKTsKKyAgICB+SU9TdXJmYWNlU3VyZmFjZU10bCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBk
ZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7CisKKyAgICBlZ2w6
OkVycm9yIGluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KSBvdmVycmlkZTsK
KyAgICBGcmFtZWJ1ZmZlckltcGwgKmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpIG92ZXJyaWRlOworCisg
ICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3Zl
cnJpZGU7CisgICAgZWdsOjpFcnJvciB1bk1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHN3YXAoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgcG9zdFN1YkJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50
IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFR0xpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZh
Y2VQb2ludGVyQU5HTEUoRUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsK
KyAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKyAgICBlZ2w6
OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50
IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2
NEtIUiAqdXN0LCBFR0x1aW50NjRLSFIgKm1zYywgRUdMdWludDY0S0hSICpzYmMpIG92ZXJyaWRl
OworICAgIGVnbDo6RXJyb3IgZ2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpk
ZW5vbWluYXRvcikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGlu
dGVydmFsKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZpeGVkV2lkdGgoRUdMaW50IHdpZHRoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpIG92ZXJyaWRl
OworCisgICAgLy8gV2lkdGggY2FuIGNoYW5nZSB3aGVuIHRoZSBjbGllbnQgd2luZG93IHJlc2l6
ZXMuCisgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gSGVpZ2h0
IGNhbiBjaGFuZ2Ugd2hlbiB0aGUgY2xpZW50IHdpbmRvdyByZXNpemVzLgorICAgIEVHTGludCBn
ZXRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIEVHTGludCBpc1Bvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBFR0xpbnQgZ2V0U3dhcEJlaGF2aW9yKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRSZW5kZXJU
YXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBz
YW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7CisKKyAgICBh
bmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnRE
cmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQp
IG92ZXJyaWRlOworICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
MTsgfQorICAgIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KTsKKyAgICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1
cmVSZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQor
ICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7IH0KKworICBwcml2YXRlOgorICAgIGFuZ2xlOjpSZXN1
bHQgZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAg
IGFuZ2xlOjpSZXN1bHQgY3JlYXRlQmFja2luZ1RleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpOworICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVGV4dHVyZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpG
b3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYgKnRleHR1cmVP
dXQpOworCisgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgdGV4dHVyZSk7CisKKyNpZiBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisgICAgSU9TdXJmYWNlTG9ja09wdGlvbnMgZ2V0SU9T
dXJmYWNlTG9ja09wdGlvbnMoKSBjb25zdDsKKyNlbmRpZgorCisgICAgQ29udGV4dE10bCAqY29u
dGV4dE1UTDsKKyAgICBJT1N1cmZhY2VSZWYgbUlPU3VyZmFjZTsKKyAgICBtdGw6OlRleHR1cmVS
ZWYgbUlPU3VyZmFjZVRleHR1cmU7CisgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0
dXJlVmlldzsKKyAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworICAgIG10bDo6Rm9ybWF0IG1JbnRl
cm5hbEZvcm1hdDsKKyAgICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKKyAgICBib29s
IG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZDsKKyAgICBpbnQgbVdpZHRoOworICAgIGludCBtSGVp
Z2h0OworICAgIGludCBtUGxhbmU7CisgICAgaW50IG1Gb3JtYXRJbmRleDsKKyAgICBpbnQgbVJv
d1N0cmlkZUluUGl4ZWxzOworCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxB
VE9SKQorICAgIEdMdWludCBtQm91bmRUZXh0dXJlSUQ7CisgICAgYm9vbCBtVXBsb2FkRnJvbUlP
U3VyZmFjZTsKKyAgICBib29sIG1SZWFkYmFja1RvSU9TdXJmYWNlOworI2VuZGlmCit9OworCit9
ICAvLyBuYW1lc3BhY2UgcngKKworI2VuZGlmICAvLyBMSUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdM
X0lPU1VSRkFDRVNVUkZBQ0VFQUdMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1
cmZhY2VTdXJmYWNlTXRsLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjY2M3NmE3MGMzNmI2NDM0MmVjZGFjOWU0
MDBhNDA5MjdmOGRmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbQpAQCAt
MCwwICsxLDQ2NyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDE5IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIElPU3VyZmFjZVN1cmZhY2VNdGwubW06CisvLyAg
ICBJbXBsZW1lbnRzIHRoZSBjbGFzcyBtZXRob2RzIGZvciBJT1N1cmZhY2VTdXJmYWNlTXRsLgor
Ly8KKworI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VN
dGwuaCIKKworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorCisjaW5jbHVkZSAibGli
QU5HTEUvRGlzcGxheS5oIgorI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgorCisvLyBDb21waWxlciBjYW4gdHVybiBvbiBwcm9n
cmFtbWF0aWNhbCBmcmFtZSBjYXB0dXJlIGluIHJlbGVhc2UgYnVpbGQgYnkgZGVmaW5pbmcKKy8v
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUgZmxhZy4KKyNpZiBkZWZpbmVkKE5ERUJVRykgJiYg
IWRlZmluZWQoQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSkKKyMgICAgZGVmaW5lIEFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAwCisjZWxzZQorIyAgICBkZWZpbmUgQU5HTEVfTUVU
QUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSQorI2Vu
ZGlmCituYW1lc3BhY2UgcngKK3sKKworbmFtZXNwYWNlCit7CisKK3N0cnVjdCBJT1N1cmZhY2VG
b3JtYXRJbmZvCit7CisgICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworICAgIEdMZW51bSB0eXBl
OworICAgIGFuZ2xlOjpGb3JtYXRJRCBwaXhlbEZvcm1hdDsKKyAgICBhbmdsZTo6Rm9ybWF0SUQg
aW50ZXJuYWxQaXhlbEZvcm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBJT1N1cmZhY2VGb3JtYXRJ
bmZvIGtJT1N1cmZhY2VGb3JtYXRzW10gPSB7CisgICAge0dMX1JFRCwgR0xfVU5TSUdORURfQllU
RSwgYW5nbGU6OkZvcm1hdElEOjpSOF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpSOF9VTk9STX0s
CisgICAge0dMX1IxNlVJLCBHTF9VTlNJR05FRF9TSE9SVCwgYW5nbGU6OkZvcm1hdElEOjpSMTZH
MTZfVUlOVCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZfVUlOVH0sCisgICAge0dMX1JHLCBHTF9V
TlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJ
RDo6UjhHOF9VTk9STX0sCisgICAge0dMX1JHQiwgR0xfVU5TSUdORURfQllURSwgYW5nbGU6OkZv
cm1hdElEOjpSOEc4QjhBOF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0s
CisgICAge0dMX0JHUkFfRVhULCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OkI4
RzhSOEE4X1VOT1JNLAorICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKKyAg
ICB7R0xfUkdCMTBfQTIsIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgYW5nbGU6OkZv
cm1hdElEOjpSMTBHMTBCMTBBMl9VTk9STSwKKyAgICAgYW5nbGU6OkZvcm1hdElEOjpSMTBHMTBC
MTBBMl9VTk9STX0sCisgICAge0dMX1JHQkEsIEdMX0hBTEZfRkxPQVQsIGFuZ2xlOjpGb3JtYXRJ
RDo6UjE2RzE2QjE2QTE2X0ZMT0FULAorICAgICBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkEx
Nl9GTE9BVH0sCit9OworCitpbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9ybWF0cykpOyArK2kpCisg
ICAgeworICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNb
aV07CisgICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9y
bWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
LTE7Cit9CisKKy8vIFRPRE8oamN1bm5pbmdoYW0pIDogcmVmYWN0b3IgdGhpcyBhbmQgc3VyZmFj
ZW10bCB0byByZWR1Y2UgY29weStwYXN0ZWQgY29kZQorCitBTkdMRV9NVExfVU5VU0VECitib29s
IElzRnJhbWVDYXB0dXJlRW5hYmxlZCgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkVfRU5BQkxFRAorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgLy8gV2Ugb25seSBzdXBw
b3J0IGZyYW1lIGNhcHR1cmUgcHJvZ3JhbW1hdGljYWxseSBpZiB0aGUgQU5HTEVfTUVUQUxfRlJB
TUVfQ0FQVFVSRQorICAgIC8vIGVudmlyb25tZW50IGZsYWcgaXMgc2V0LiBPdGhlcndpc2UsIGl0
IHdpbGwgc2xvdyBkb3duIHRoZSByZW5kZXJpbmcuIFRoaXMgYWxsb3dzIHVzZXIgdG8KKyAgICAv
LyBmaW5lbHkgY29udHJvbCB3aGV0aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBm
b3IgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvciBub3QuCisgICAgYXV0byB2YXIgICAgICAgICAg
ICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFIik7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgZW5hYmxlZCA9IHZhciA/IChzdHJjbXAodmFyLCAiMSIpID09IDAp
IDogZmFsc2U7CisKKyAgICByZXR1cm4gZW5hYmxlZDsKKyNlbmRpZgorfQorCitBTkdMRV9NVExf
VU5VU0VECitzdGQ6OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKK3sKKyNpZiAhQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJuICIiOworI2Vsc2UKKyAgICBh
dXRvIHZhciAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0ZJTEUiKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/
IHZhciA6ICIiOworCisgICAgcmV0dXJuIGZpbGVQYXRoOworI2VuZGlmCit9CisKK0FOR0xFX01U
TF9VTlVTRUQKK3NpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKK3sKKyNpZiAhQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIGF1
dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZS
QU1FX0NBUFRVUkVfTUFYIik7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZXMgPSB2
YXIgPyBzdGQ6OmF0b2kodmFyKSA6IDEwMDsKKworICAgIHJldHVybiBtYXhGcmFtZXM7CisjZW5k
aWYKK30KKworQU5HTEVfTVRMX1VOVVNFRAorc2l6ZV90IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUo
KQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4g
MDsKKyNlbHNlCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52
KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX01JTiIpOworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbWluRnJhbWUgPSB2YXIgPyBzdGQ6OmF0b2kodmFyKSA6IDA7CisKKyAgICByZXR1cm4gbWlu
RnJhbWU7CisjZW5kaWYKK30KKworQU5HTEVfTVRMX1VOVVNFRAorYm9vbCBGcmFtZUNhcHR1cmVE
ZXZpY2VTY29wZSgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAor
ICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAg
ICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9TQ09QRSIpOworICAg
IHN0YXRpYyBjb25zdCBib29sIHNjb3BlRGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZp
Y2UiKSA9PSAwKSA6IGZhbHNlOworCisgICAgcmV0dXJuIHNjb3BlRGV2aWNlOworI2VuZGlmCit9
CisKK0FOR0xFX01UTF9VTlVTRUQKK3N0ZDo6YXRvbWljPHNpemVfdD4gZ0ZyYW1lQ2FwdHVyZWQo
MCk7CisKK0FOR0xFX01UTF9VTlVTRUQKK3ZvaWQgU3RhcnRGcmFtZUNhcHR1cmUoaWQ8TVRMRGV2
aWNlPiBtZXRhbERldmljZSwgaWQ8TVRMQ29tbWFuZFF1ZXVlPiBtZXRhbENtZFF1ZXVlKQorewor
I2lmIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIGlmICghSXNGcmFtZUNh
cHR1cmVFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGdGcmFtZUNhcHR1cmVkID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNVExDYXB0dXJlTWFuYWdlciAqY2FwdHVyZU1hbmFn
ZXIgPSBbTVRMQ2FwdHVyZU1hbmFnZXIgc2hhcmVkQ2FwdHVyZU1hbmFnZXJdOworICAgIGlmIChj
YXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBnRnJhbWVDYXB0dXJlZCsrOworCisgICAgaWYgKGdGcmFtZUNhcHR1cmVkIDwgTWlu
QWxsb3dlZEZyYW1lQ2FwdHVyZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
IyAgICBpZmRlZiBfX01BQ18xMF8xNQorICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJ
KDEwLjE1LCAxMy4wLCAxMykpCisgICAgeworICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAq
Y2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsK
KyAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxE
ZXZpY2U7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoICAgICAgICAgICAgICA9
IEdldE1ldGFsQ2FwdHVyZUZpbGUoKTsKKyAgICAgICAgaWYgKGZpbGVQYXRoICE9ICIiKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBudW1iZXJlZFBhdGggPQorICAg
ICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJpbmcoZ0ZyYW1lQ2FwdHVyZWQgLSAx
KSArICIuZ3B1dHJhY2UiOworICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRp
b24gPSBNVExDYXB0dXJlRGVzdGluYXRpb25HUFVUcmFjZURvY3VtZW50OworICAgICAgICAgICAg
Y2FwdHVyZURlc2NyaXB0b3Iub3V0cHV0VVJMID0KKyAgICAgICAgICAgICAgICBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpudW1iZXJlZFBhdGgu
Y19zdHIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OmZhbHNlXTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
d2lsbCBwYXVzZSBleGVjdXRpb24gb25seSBpZiBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dl
ZCBpbnNpZGUgWGNvZGUKKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9u
ID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2ZWxvcGVyVG9vbHM7CisgICAgICAgIH0KKworICAg
ICAgICBOU0Vycm9yICplcnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRD
YXB0dXJlV2l0aERlc2NyaXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKKyAg
ICAgICAgeworICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJy
b3IgJUAiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorIyAgICBlbmRpZiAg
Ly8gX19NQUNfMTBfMTUKKyAgICAgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTUsIDEzLjAsIDEzKSkKKyAgICB7CisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0
dXJlRGVzY3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAg
ICAgICBjYXB0dXJlRGVzY3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmlj
ZTsKKworICAgICAgICBOU0Vycm9yICplcnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFn
ZXIgc3RhcnRDYXB0dXJlV2l0aERlc2NyaXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVy
cm9yXSkKKyAgICAgICAgeworICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2Fw
dHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgIC8vIEFO
R0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorfQorCit2b2lkIFN0YXJ0RnJhbWVDYXB0
dXJlKENvbnRleHRNdGwgKmNvbnRleHQpCit7CisgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5nZXQoKSk7Cit9CisKK3Zv
aWQgU3RvcEZyYW1lQ2FwdHVyZSgpCit7CisjaWYgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9F
TkFCTEVECisgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgTVRMQ2FwdHVyZU1hbmFnZXIgKmNhcHR1cmVNYW5hZ2VyID0g
W01UTENhcHR1cmVNYW5hZ2VyIHNoYXJlZENhcHR1cmVNYW5hZ2VyXTsKKyAgICBpZiAoY2FwdHVy
ZU1hbmFnZXIuaXNDYXB0dXJpbmcpCisgICAgeworICAgICAgICBbY2FwdHVyZU1hbmFnZXIgc3Rv
cENhcHR1cmVdOworICAgIH0KKyNlbmRpZgorfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK0lPU3VyZmFjZVN1cmZhY2VNdGw6OklPU3VyZmFjZVN1cmZhY2VNdGwoRGlzcGxheU10bCAq
ZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKKyAg
ICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKK3sKKyAgICAvLyBLZWVwIHJlZmVyZW5jZSB0
byB0aGUgSU9TdXJmYWNlIHNvIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlIHBidWZm
ZXIgZXhpc3RzLgorICAgIG1JT1N1cmZhY2UgPSByZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJl
Zj4oYnVmZmVyKTsKKyAgICBDRlJldGFpbihtSU9TdXJmYWNlKTsKKworICAgIC8vIEV4dHJhY3Qg
YXR0cmlicyB1c2VmdWwgZm9yIHRoZSBjYWxsIHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisg
ICAgbVdpZHRoICA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX1dJRFRIKSk7Cisg
ICAgbUhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX0hFSUdIVCkpOwor
ICAgIG1QbGFuZSAgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0Vf
UExBTkVfQU5HTEUpKTsKKyAgICAvLyBIb3BlZnVsbHkgdGhlIG51bWJlciBvZiBieXRlcyBwZXIg
cm93IGlzIGFsd2F5cyBhbiBpbnRlZ2VyIG51bWJlciBvZiBwaXhlbHMuIFdlIHVzZQorICAgIC8v
IGdsUmVhZFBpeGVscyB0byBmaWxsIHRoZSBJT1N1cmZhY2UgaW4gdGhlIHNpbXVsYXRvciBhbmQg
aXQgY2FuIG9ubHkgc3VwcG9ydCBzdHJpZGVzIHRoYXQgYXJlCisgICAgLy8gYW4gaW50ZWdlciBu
dW1iZXIgb2YgcGl4ZWxzLgorICAgIEFTU0VSVChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxh
bmUobUlPU3VyZmFjZSwgbVBsYW5lKSAlCisgICAgICAgICAgICAgICBJT1N1cmZhY2VHZXRCeXRl
c1BlckVsZW1lbnRPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFuZSkgPT0KKyAgICAgICAgICAgMCk7
CisgICAgbVJvd1N0cmlkZUluUGl4ZWxzID0gc3RhdGljX2Nhc3Q8aW50PihJT1N1cmZhY2VHZXRC
eXRlc1BlclJvd09mUGxhbmUobUlPU3VyZmFjZSwgbVBsYW5lKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBs
YW5lKG1JT1N1cmZhY2UsIG1QbGFuZSkpOworCisgICAgRUdMQXR0cmliIGludGVybmFsRm9ybWF0
ID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFKTsKKyAgICBF
R0xBdHRyaWIgdHlwZSAgICAgICAgICAgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9UWVBFX0FO
R0xFKTsKKyAgICBtRm9ybWF0SW5kZXggPQorICAgICAgICBGaW5kSU9TdXJmYWNlRm9ybWF0SW5k
ZXgoc3RhdGljX2Nhc3Q8R0xlbnVtPihpbnRlcm5hbEZvcm1hdCksIHN0YXRpY19jYXN0PEdMZW51
bT4odHlwZSkpOworICAgIEFTU0VSVChtRm9ybWF0SW5kZXggPj0gMCk7CisgICAgbUZvcm1hdCAg
ICAgICAgID0gZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1h
dEluZGV4XS5waXhlbEZvcm1hdCk7CisgICAgbUludGVybmFsRm9ybWF0ID0gZGlzcGxheS0+Z2V0
UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5pbnRlcm5hbFBpeGVs
Rm9ybWF0KTsKK30KKworSU9TdXJmYWNlU3VyZmFjZU10bDo6fklPU3VyZmFjZVN1cmZhY2VNdGwo
KQoreworICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKKyAgICBpZiAobUlPU3VyZmFjZSAhPSBudWxs
cHRyKQorICAgIHsKKyAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworICAgICAgICBtSU9T
dXJmYWNlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6
ZGVzdHJveShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIHt9CisKK2VnbDo6RXJyb3IgSU9T
dXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkp
Cit7CisgICAgRGlzcGxheU10bCAqZGlzcGxheU10bCAgICA9IG10bDo6R2V0SW1wbChkaXNwbGF5
KTsKKyAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheU10bC0+Z2V0TWV0YWxE
ZXZpY2UoKTsKKworICAgIFN0YXJ0RnJhbWVDYXB0dXJlKG1ldGFsRGV2aWNlLCBkaXNwbGF5TXRs
LT5jbWRRdWV1ZSgpLmdldCgpKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK0Zy
YW1lYnVmZmVySW1wbCAqSU9TdXJmYWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVm
ZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVm
ZmVyU3RhdGUgJnN0YXRlKQoreworICAgIGF1dG8gZmJvID0gbmV3IEZyYW1lYnVmZmVyTXRsKHN0
YXRlLCAvKiBmbGlwWSAqLyB0cnVlLCAvKiBiYWNrYnVmZmVyICovIHRoaXMpOworICAgIHJldHVy
biBmYm87Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6bWFrZUN1cnJlbnQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0
TXRsKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJm
YWNlU3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkK
K3sKKyAgICBTdG9wRnJhbWVDYXB0dXJlKCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwor
fQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCit7CisgICAgU3RvcEZyYW1lQ2FwdHVyZSgpOworICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgU3RhcnRGcmFtZUNhcHR1
cmUoY29udGV4dE10bCk7CisgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnBvc3RTdWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RUdMaW50IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RUdMaW50IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RUdMaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCBoZWlnaHQpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBl
Z2w6OkVnbEJhZEFjY2VzcygpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6
OnF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUp
Cit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2Vzcygp
OworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikKK3sKKworICAgIGFuZ2xlOjpS
ZXN1bHQgcmVzID0gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisgICAgaWYgKHJlcyA9
PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKyAgICAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7Cit9CisKK2Vn
bDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQoreworICAgIC8vIFRoaXMgd2lsbCBuZWVk
IGltcGxlbWVudGF0aW9uCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1w
bChjb250ZXh0KTsKKyAgICBpZiAoY29udGV4dE10bC0+Zmx1c2goY29udGV4dCkgPT0gYW5nbGU6
OlJlc3VsdDo6Q29udGludWUpCisgICAgeworICAgICAgICBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0
ZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworICAgIH0KKyAgICBy
ZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2NEtIUiAqdXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTHVpbnQ2NEtIUiAqbXNjLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTHVpbnQ2NEtIUiAqc2Jj
KQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3Mo
KTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRNc2NSYXRlKEVHTGlu
dCAqbnVtZXJhdG9yLCBFR0xpbnQgKmRlbm9taW5hdG9yKQoreworICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKwordm9pZCBJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQoreworICAgIFVOSU1Q
TEVNRU5URUQoKTsKK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRo
KEVHTGludCB3aWR0aCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgSU9TdXJm
YWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKK3sKKyAgICBVTklN
UExFTUVOVEVEKCk7Cit9CisKKy8vIHdpZHRoIGFuZCBoZWlnaHQgY2FuIGNoYW5nZSB3aXRoIGNs
aWVudCB3aW5kb3cgcmVzaXppbmcKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRXaWR0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVHTGludD4obVdpZHRoKTsKK30K
KworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEVHTGludD4obUhlaWdodCk7Cit9CisKK0VHTGludCBJT1N1cmZh
Y2VTdXJmYWNlTXRsOjppc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTd2Fw
QmVoYXZpb3IoKSBjb25zdAoreworICAgIHJldHVybiBFR0xfQlVGRkVSX0RFU1RST1lFRDsKK30K
KworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVy
VGFyZ2V0KAorICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgIEdMZW51bSBiaW5k
aW5nLAorICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4LAorICAgIEdMc2l6ZWkg
c2FtcGxlcywKKyAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkK
K3sKKyAgICBBTkdMRV9UUlkoZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29udGV4dCkpOworICAgICpy
dE91dCA9ICZtUmVuZGVyVGFyZ2V0OworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50
RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJh
d2FibGVPdXQpCit7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorYW5n
bGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRh
aW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6
Y3JlYXRlQmFja2luZ1RleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAg
bXRsOjpUZXh0dXJlUmVmIG1UZW1wb3JhcnlTdXJmYWNlUmVmOworICAgIEFOR0xFX1RSWShjcmVh
dGVUZXh0dXJlKGNvbnRleHQsIG1Gb3JtYXQsIG1XaWR0aCwgbUhlaWdodCwgZmFsc2UsICZtVGVt
cG9yYXJ5U3VyZmFjZVJlZikpOworICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5kIHRo
ZSBiYXNlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4KKyAgICBtSU9TdXJmYWNlVGV4dHVyZSA9Cisg
ICAgICAgIG1UZW1wb3JhcnlTdXJmYWNlUmVmLT5jcmVhdGVWaWV3V2l0aERpZmZlcmVudEZvcm1h
dChNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0pOworICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1JT1N1
cmZhY2VUZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5hbEZvcm1h
dCk7CisgICAgbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFj
ZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgaWYgKCFtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQpCisgICAgeworICAgICAgICByZXR1
cm4gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworbXRsOjpUZXh0dXJlUmVmIElPU3VyZmFjZVN1cmZh
Y2VNdGw6OmdldFRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYg
KGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOworICAg
IH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpjcmVhdGVUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9y
bWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYg
KnRleHR1cmVPdXQpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1w
bChjb250ZXh0KTsKKyAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlSU9TdXJmYWNlVGV4
dHVyZShjb250ZXh0TXRsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIG1JT1N1cmZhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBsYW5lLCB0ZXh0
dXJlT3V0KSk7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1Byb2dyYW1NdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgKaW5kZXggMzg5ZWNlNzUwZTdjYTMyNzcwMmY3MzU5
NTNhMjIxYzI0NmU5YWJmZS4uZWI5YmIwMTU1YzJmOTEzNTNiOGI1YmM5NmNjMjEzNjlkNjY3OGJk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1Byb2dyYW1NdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCkBAIC0yMCwxMiArMjAsMTMgQEAK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5oIgorI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaCIKICNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CisjZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCiBjbGFzcyBDb250ZXh0
TXRsOwogCiBzdHJ1Y3QgUHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10bApAQCAtMTM0LDYg
KzEzNSwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMg
bXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQogICAgIGJvb2wgaGFzU3BlY2lhbGl6
ZWRTaGFkZXIoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURl
c2MpIG92ZXJyaWRlOwogCisgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVNc2xTaGFkZXJMaWIobXRs
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpUcmFuc2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZE1zbEluZm8p
OwogICAgIC8vIENhbGxzIHRoaXMgYmVmb3JlIGRyYXdpbmcsIGNoYW5nZWRQaXBlbGluZURlc2Mg
aXMgcGFzc2VkIHdoZW4gdmVydGV4IGF0dHJpYnV0ZXMgZGVzYyBhbmQvb3IKICAgICAvLyBzaGFk
ZXIgcHJvZ3JhbSBjaGFuZ2VkLgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNvbnN0IGds
OjpDb250ZXh0ICpnbENvbnRleHQsCkBAIC0xNDEsNyArMTQ2LDEyIEBAIGNsYXNzIFByb2dyYW1N
dGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVT
cGVjaWFsaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQ
aXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHBpcGVsaW5lRGVzY0NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmb3JjZVRleHR1cmVzU2V0dGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHVuaWZvcm1CdWZmZXJzRGlydHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
dW5pZm9ybUJ1ZmZlcnNEaXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRy
YW5zZm9ybUZlZWRiYWNrRHJhdyk7CisKKyAgICBzdGQ6OnN0cmluZyBnZXRYZmJNc2xTb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtWGZiTXNsU291cmNlOyB9CisKKyAgICBtdGw6OlJlbmRlclBpcGVs
aW5lQ2FjaGUgKm1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGU7CiAKICAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgpAQCAtMTU2LDYgKzE2NiwxMSBAQCBjbGFz
cyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBl
bGluZUNhY2hlU3BlY2lhbGl6ZQogICAgIHZvaWQgc2V0VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IFQgKnYsIEdMZW51bSBlbnRyeVBvaW50VHlwZSk7CiAK
ICAgICBhbmdsZTo6UmVzdWx0IGluaXREZWZhdWx0VW5pZm9ybUJsb2Nrcyhjb25zdCBnbDo6Q29u
dGV4dCAqZ2xDb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3Jt
QmxvY2tzTWVtb3J5KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyTWFw
PHNpemVfdD4gJnJlcXVpcmVkQnVmZmVyU2l6ZSk7CisgICAgdm9pZCBzYXZlRGVmYXVsdFVuaWZv
cm1CbG9ja3NJbmZvKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSk7CisgICAgYW5nbGU6
OlJlc3VsdCBsb2FkRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpn
bENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKTsKIAogICAgIGFuZ2xlOjpSZXN1bHQgY29t
bWl0VW5pZm9ybXMoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2Rlcik7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVUZXh0dXJlcyhjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LApAQCAtMTc3LDIxICsxOTIsMzMgQEAgY2xhc3MgUHJvZ3Jh
bU10bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNo
ZVNwZWNpYWxpemUKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
PiAmYmxvY2tzLAogICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKIAotICAgIGFu
Z2xlOjpSZXN1bHQgdXBkYXRlWGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpj
bWRFbmNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6
OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsKLQogICAgIHZvaWQgcmVzZXQoQ29u
dGV4dE10bCAqY29udGV4dCk7CiAKKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6
QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworICAgIHZvaWQgbG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKTsKKworICAgIHZvaWQgc2F2ZVNoYWRl
ckludGVybmFsSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworICAgIHZvaWQg
bG9hZFNoYWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisK
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKworICAgIGFuZ2xlOjpSZXN1bHQgbGlua0lt
cGxTcGlydihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7
CisjZW5kaWYKKworICAgIGFuZ2xlOjpSZXN1bHQgbGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNv
bnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisKICAgICB2b2lkIGxpbmtS
ZXNvdXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcyk7CiAg
ICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJj
ZXMgJnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKTsKIAotICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlTXNsU2hhZGVyTGliKG10bDo6Q29u
dGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvKTsKKyAg
ICBhbmdsZTo6UmVzdWx0IGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb25zdCBnbDo6Q29udGV4dCAq
Z2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpC
aW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKIAogICAgIC8vIFN0YXRlIGZvciB0aGUg
ZGVmYXVsdCB1bmlmb3JtIGJsb2Nrcy4KICAgICBzdHJ1Y3QgRGVmYXVsdFVuaWZvcm1CbG9jayBm
aW5hbCA6IHByaXZhdGUgYW5nbGU6Ok5vbkNvcHlhYmxlCkBAIC0yMzAsNiArMjU3LDcgQEAgY2xh
c3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlw
ZWxpbmVDYWNoZVNwZWNpYWxpemUKICAgICAvLyBDYWNoZWQgcmVmZXJlbmNlcyBvZiBjdXJyZW50
IHNoYWRlciB2YXJpYW50cy4KICAgICBnbDo6U2hhZGVyTWFwPFByb2dyYW1TaGFkZXJPYmpWYXJp
YW50TXRsICo+IG1DdXJyZW50U2hhZGVyVmFyaWFudHM7CiAKKyAgICBTaGFkZXJNYXBJbnRlcmZh
Y2VWYXJpYWJsZUluZm9NYXAgbVZhcmlhYmxlSW5mb01hcDsKICAgICAvLyBTY3JhdGNoIGRhdGE6
CiAgICAgLy8gTGVnYWxpemVkIGJ1ZmZlcnMgYW5kIHRoZWlyIG9mZnNldHMuIEZvciBleGFtcGxl
LCB1bmlmb3JtIGJ1ZmZlcidzIG9mZnNldD0xIGlzIG5vdCBhIHZhbGlkCiAgICAgLy8gb2Zmc2V0
LCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsZWdhbCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMg
c3RvcmVkIGluIHRoaXMgYXJyYXkuCkBAIC0yMzgsNyArMjY2LDEwIEBAIGNsYXNzIFByb2dyYW1N
dGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVT
cGVjaWFsaXplCiAgICAgLy8gaW50byBhbiBhcmd1bWVudCBidWZmZXIuCiAgICAgc3RkOjp2ZWN0
b3I8dWludDMyX3Q+IG1Bcmd1bWVudEJ1ZmZlclJlbmRlclN0YWdlVXNhZ2VzOwogCisgICAgdWlu
dDMyX3QgbVNoYWRvd0NvbXBhcmVNb2Rlc1ttdGw6OmtNYXhTaGFkZXJTYW1wbGVyc10gPSB7MH07
CisKICAgICBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGUgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZTsKKyAgICBzdGQ6OnN0cmluZyBtWGZiTXNsU291cmNlOwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCmluZGV4IDUwZTJmNjM4N2ZkNDdl
N2ZjMzljNTcwYzZkNzI1NjZjM2JmNWMyM2QuLjZkYTg2NjQxY2FhODUzNTY4YzA4NWE2YTA4YmM0
Y2Y2NWY1MDAyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCkBAIC0xNCwy
NSArMTQsMzEgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25t
ZW50VmFyaWFibGUuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0NvbnRleHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNw
bGF5TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5o
IgotI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxz
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvcmVuZGVyZXJfdXRpbHMuaCIKIAorI2lmIEFOR0xFX0VO
QUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSByeAogewogCiBuYW1lc3Bh
Y2UKIHsKLQotI2RlZmluZSBTSEFERVJfRU5UUllfTkFNRSBAIm1haW4wIgorI2lmIEFOR0xFX0VO
QUJMRV9NRVRBTF9TUElSVgogY29uc3RleHByIGNoYXIga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZm
aXhbXSA9ICJfdG1wIjsKLQorI2VuZGlmCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNsYXNzIFNj
b3BlZEF1dG9DbGVhclZlY3RvcgogewpAQCAtNzgsNiArODQsNyBAQCB2b2lkIEluaXREZWZhdWx0
VW5pZm9ybUJsb2NrKGNvbnN0IHN0ZDo6dmVjdG9yPHNoOjpVbmlmb3JtPiAmdW5pZm9ybXMsCiAK
ICAgICBzaXplX3QgYmxvY2tTaXplID0gYmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsK
IAorICAgIC8vIFRPRE8oam1hZGlsbCk6IEkgdGhpbmsgd2Ugc3RpbGwgbmVlZCBhIHZhbGlkIGJs
b2NrIGZvciB0aGUgcGlwZWxpbmUgZXZlbiBpZiB6ZXJvIHNpemVkLgogICAgIGlmIChibG9ja1Np
emUgPT0gMCkKICAgICB7CiAgICAgICAgICpibG9ja1NpemVPdXQgPSAwOwpAQCAtMjI4LDExICsy
MzUsMTYgQEAgUHJvZ3JhbU10bDo6RGVmYXVsdFVuaWZvcm1CbG9jazo6RGVmYXVsdFVuaWZvcm1C
bG9jaygpIHt9CiAKIFByb2dyYW1NdGw6OkRlZmF1bHRVbmlmb3JtQmxvY2s6On5EZWZhdWx0VW5p
Zm9ybUJsb2NrKCkgPSBkZWZhdWx0OwogCi1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGds
OjpQcm9ncmFtU3RhdGUgJnN0YXRlKQotICAgIDogUHJvZ3JhbUltcGwoc3RhdGUpLCBtTWV0YWxS
ZW5kZXJQaXBlbGluZUNhY2hlKHRoaXMpCi17fQorUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25z
dCBnbDo6UHJvZ3JhbVN0YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisgICAgbU1l
dGFsUmVuZGVyUGlwZWxpbmVDYWNoZSh0aGlzKQoreworICAgIG1NZXRhbFhmYlJlbmRlclBpcGVs
aW5lQ2FjaGUgPSBuZXcgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7Cit9CiAKLVByb2dyYW1N
dGw6On5Qcm9ncmFtTXRsKCkge30KK1Byb2dyYW1NdGw6On5Qcm9ncmFtTXRsKCkKK3sKKyAgICBk
ZWxldGUgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKK30KIAogdm9pZCBQcm9ncmFtTXRs
OjpkZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewpAQCAtMjYyLDI1ICsyNzQs
NDYgQEAgdm9pZCBQcm9ncmFtTXRsOjpyZXNldChDb250ZXh0TXRsICpjb250ZXh0KQogICAgIHsK
ICAgICAgICAgdmFyLnJlc2V0KGNvbnRleHQpOwogICAgIH0KLQogICAgIG1NZXRhbFJlbmRlclBp
cGVsaW5lQ2FjaGUuY2xlYXIoKTsKKyAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5j
bGVhcigpOworfQorCit2b2lkIFByb2dyYW1NdGw6OnNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6
QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAgLy8gV3JpdGUgb3V0IHNoYWRlciBz
b3VyY2VzIGZvciBhbGwgc2hhZGVyIHR5cGVzCisgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBzdHJl
YW0tPndyaXRlU3RyaW5nKG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLm1ldGFs
U2hhZGVyU291cmNlKTsKKyAgICB9CisgICAgc3RyZWFtLT53cml0ZVN0cmluZyhtWGZiTXNsU291
cmNlKTsKK30KKwordm9pZCBQcm9ncmFtTXRsOjpsb2FkVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJp
bmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNl
cyBmb3IgYWxsIHNoYWRlciB0eXBlcworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hh
ZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgbU1zbFNoYWRl
clRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJl
YWRTdHJpbmcoKTsKKyAgICB9CisgICAgbVhmYk1zbFNvdXJjZSA9IHN0cmVhbS0+cmVhZFN0cmlu
ZygpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8cng6OkxpbmtFdmVudD4gUHJvZ3JhbU10bDo6bG9h
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cg
JmluZm9Mb2cpCiB7Ci0gICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCi0g
ICAgVU5JTVBMRU1FTlRFRCgpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVu
dERvbmU+KGFuZ2xlOjpSZXN1bHQ6OlN0b3ApOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8TGlua0V2ZW50RG9uZT4obGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnRleHQsIHN0cmVhbSwg
aW5mb0xvZykpOwogfQogCiB2b2lkIFByb2dyYW1NdGw6OnNhdmUoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsIGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICAvLyBOT1RF
KGhxbGUpOiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKLSAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
c2F2ZVRyYW5zbGF0ZWRTaGFkZXJzKHN0cmVhbSk7CisgICAgc2F2ZVNoYWRlckludGVybmFsSW5m
byhzdHJlYW0pOworICAgIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oc3RyZWFtKTsKIH0K
IAorCiB2b2lkIFByb2dyYW1NdGw6OnNldEJpbmFyeVJldHJpZXZhYmxlSGludChib29sIHJldHJp
ZXZhYmxlKQogewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTI5NCw3ICszMjcsNyBAQCB2b2lk
IFByb2dyYW1NdGw6OnNldFNlcGFyYWJsZShib29sIHNlcGFyYWJsZSkKIHN0ZDo6dW5pcXVlX3B0
cjxMaW5rRXZlbnQ+IFByb2dyYW1NdGw6OmxpbmsoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQ
cm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbU1lcmdlZFZh
cnlpbmdzICYgLyogbWVyZ2VkVmFyeWluZ3MgKi8pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJm1lcmdl
ZFZhcnlpbmdzKQogewogICAgIC8vIExpbmsgcmVzb3VyY2VzIGJlZm9yZSBjYWxsaW5nIEdldFNo
YWRlclNvdXJjZSB0byBtYWtlIHN1cmUgdGhleSBhcmUgcmVhZHkgZm9yIHRoZSBzZXQvYmluZGlu
ZwogICAgIC8vIGFzc2lnbm1lbnQgZG9uZSBpbiB0aGF0IGZ1bmN0aW9uLgpAQCAtMzA0LDcgKzMz
Nyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxMaW5rRXZlbnQ+IFByb2dyYW1NdGw6OmxpbmsoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2
ZW50RG9uZT4obGlua0ltcGwoY29udGV4dCwgcmVzb3VyY2VzLCBpbmZvTG9nKSk7CiB9CiAKLWFu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29u
dGV4dCwKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKK2FuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6bGlua0ltcGxTcGlydihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
SW5mb0xvZyAmaW5mb0xvZykKIHsKQEAgLTM1NSw2ICszODksNzUgQEAgYW5nbGU6OlJlc3VsdCBQ
cm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogCiAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQorI2VuZGlmCisKK2FuZ2xlOjpSZXN1
bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1M
aW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworCisgICAgcmVzZXQoY29udGV4dE10bCk7Cisg
ICAgQU5HTEVfVFJZKGluaXREZWZhdWx0VW5pZm9ybUJsb2NrcyhnbENvbnRleHQpKTsKKyAgICBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgdmFyaWFibGVJbmZvTWFwOworCisgICAg
Z2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gc2hhZGVyU291cmNlczsKKyAgICBnbDo6U2hhZGVy
TWFwPHN0ZDo6c3RyaW5nPiB0cmFuc2xhdGVkTXNsU2hhZGVyczsKKyAgICBtdGw6Ok1TTEdldFNo
YWRlclNvdXJjZShtU3RhdGUsIHJlc291cmNlcywgJnNoYWRlclNvdXJjZXMsICZ2YXJpYWJsZUlu
Zm9NYXApOworCisgICAgQU5HTEVfVFJZKG10bDo6R2xzbGFuZ0dldE1TTChnbENvbnRleHQsIG1T
dGF0ZSwgY29udGV4dE10bC0+Z2V0Q2FwcygpLCBzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0
ZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZE1zbFNo
YWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuZ2V0RXhlY3V0
YWJsZSgpLmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKSkpOworCisKKyAgICBmb3Ig
KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQor
ICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGFjdHVhbCBNZXRhbCBzaGFkZXIKKyAgICAgICAgQU5H
TEVfVFJZKAorICAgICAgICAgICAgY3JlYXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRl
clR5cGUsIGluZm9Mb2csICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOwor
ICAgIH0KKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5r
ZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdh
eSBvZiB0b2dnbGluZyB0aGlzLgorI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgIGlm
IChzaDo6cmVhZEJvb2xFbnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9TUElSViIpKQorICAgIHsK
KyAgICAgICByZXR1cm4gbGlua0ltcGxTcGlydihnbENvbnRleHQsIHJlc291cmNlcywgaW5mb0xv
Zyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICByZXR1cm4gbGlua0lt
cGxEaXJlY3QoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworICAgIH0KK30KKworCith
bmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb25zdCBnbDo6
Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykK
K3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4dCk7
CisgICAgLy8gTk9URShocWxlKTogTm8gdHJhbnNmb3JtIGZlZWRiYWNrcyBmb3Igbm93LCBzaW5j
ZSB3ZSBvbmx5IHN1cHBvcnQgRVMgMi4wIGF0bQorCisgICAgcmVzZXQoY29udGV4dE10bCk7CisK
KyAgICBsb2FkVHJhbnNsYXRlZFNoYWRlcnMoc3RyZWFtKTsKKyAgICBsb2FkU2hhZGVySW50ZXJu
YWxJbmZvKHN0cmVhbSk7CisgICAgQU5HTEVfVFJZKGxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0lu
Zm8oZ2xDb250ZXh0LCBzdHJlYW0pKTsKKworICAgIEFOR0xFX1RSWShjcmVhdGVNc2xTaGFkZXJM
aWIoY29udGV4dE10bCwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgaW5mb0xvZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSkpOworICAgIEFOR0xFX1RSWShjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4
dE10bCwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50LCBpbmZvTG9nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2dsOjpTaGFkZXJUeXBlOjpG
cmFnbWVudF0pKTsKKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KIAog
dm9pZCBQcm9ncmFtTXRsOjpsaW5rUmVzb3VyY2VzKGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVz
b3VyY2VzICZyZXNvdXJjZXMpCiB7CkBAIC0zNjYsOCArNDY5LDYgQEAgdm9pZCBQcm9ncmFtTXRs
OjpsaW5rUmVzb3VyY2VzKGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJj
ZXMpCiAKIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tz
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQpCiB7Ci0gICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOwotCiAgICAgLy8gUHJvY2VzcyB2ZXJ0ZXgg
YW5kIGZyYWdtZW50IHVuaWZvcm1zIGludG8gc3RkMTQwIHBhY2tpbmcuCiAgICAgZ2w6OlNoYWRl
ck1hcDxzaDo6QmxvY2tMYXlvdXRNYXA+IGxheW91dE1hcDsKICAgICBnbDo6U2hhZGVyTWFwPHNp
emVfdD4gcmVxdWlyZWRCdWZmZXJTaXplOwpAQCAtNDI2LDYgKzUyNywxNSBAQCBhbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmluaXREZWZhdWx0VW5pZm9ybUJsb2Nrcyhjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0KQogICAgICAgICB9CiAgICAgfQogCisgICAgcmV0dXJuIHJlc2l6ZURlZmF1
bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGdsQ29udGV4dCwgcmVxdWlyZWRCdWZmZXJTaXplKTsKK30K
KworYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01l
bW9yeSgKKyAgICBjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgIGNvbnN0IGdsOjpT
aGFkZXJNYXA8c2l6ZV90PiAmcmVxdWlyZWRCdWZmZXJTaXplKQoreworICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKwogICAgIGZvciAoZ2w6OlNo
YWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCiAgICAgewog
ICAgICAgICBpZiAocmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4gMCkKQEAgLTQ1Myw2
ICs1NjMsOSBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVy
KG10bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+ICpzaGFkZXJPdXQpCiB7CiAgICAgc3RhdGlj
X2Fzc2VydChZRVMgPT0gMSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisgICAgI2lm
IEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB1c2VT
cGlydiA9IHNoOjpyZWFkQm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIik7Cisg
ICAgI2VuZGlmCiAKICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNs
SW5mbyA9ICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXTsKICAgICBQcm9ncmFt
U2hhZGVyT2JqVmFyaWFudE10bCAqc2hhZGVyVmFyaWFudDsKQEAgLTQ5MCw5ICs2MDMsMjIgQEAg
YW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICBCT09MIGVtdWxhdGVEaXNjYXJkID0gcmVuZGVyUGlw
ZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID09CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2Fy
ZDsKIAotICAgICAgICAgICAgTlNTdHJpbmcgKmRpc2NhcmRFbmFibGVkU3RyID0KLSAgICAgICAg
ICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLCBzaDo6bXRsOjprUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4XTsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICpkaXNjYXJkRW5hYmxlZFN0cjsKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxf
U1BJUlYKKyAgICAgICAgICAgIGlmICh1c2VTcGlydikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9IFtOU1N0cmluZworICAgICAgICAgICAgICAgICAg
ICBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1Nw
aXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGlzY2FyZEVuYWJsZWRT
dHIgPQorICAgICAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
c2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVk
Q29uc3ROYW1lKCldOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jQ29uc3RhbnRz
ID0gW1tNVExGdW5jdGlvbkNvbnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKICAgICAgICAgICAg
IFtmdW5jQ29uc3RhbnRzIHNldENvbnN0YW50VmFsdWU6JmVtdWxhdGVEaXNjYXJkCkBAIC01MTUs
OSArNjQxLDIyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFk
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
CiAgICAgICAgIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3Ry
ID0KLSAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLCBz
aDo6bXRsOjprQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07Cisg
ICAgICAgICAgICBOU1N0cmluZyAqY292ZXJhZ2VNYXNrRW5hYmxlZFN0cjsKKyNpZiBBTkdMRV9F
TkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAgICAgIGlmICh1c2VTcGlydikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0gW05TU3RyaW5nCisg
ICAgICAgICAgICAgICAgICAgIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFn
ZU1hc2tFbmFibGVkQ29uc3ROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY292ZXJh
Z2VNYXNrRW5hYmxlZFN0ciA9CisgICAgICAgICAgICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzpzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tF
bmFibGVkQ29uc3ROYW1lKCldOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jQ29u
c3RhbnRzID0gW1tNVExGdW5jdGlvbkNvbnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKICAgICAg
ICAgICAgIFtmdW5jQ29uc3RhbnRzIHNldENvbnN0YW50VmFsdWU6JmVtdWxhdGVDb3ZlcmFnZU1h
c2sKQEAgLTU1NSw2ICs2OTQsNyBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmdldFNwZWNp
YWxpemVkU2hhZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KKwogYm9vbCBQcm9ncmFtTXRsOjpoYXNTcGVjaWFsaXplZFNo
YWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcmVuZGVyUGlwZWxp
bmVEZXNjKQogewpAQCAtNTkyLDYgKzczMiw5MyBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6
OmNyZWF0ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgfQogfQogCit2
b2lkIFByb2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2w6OkJpbmFyeU91
dHB1dFN0cmVhbSAqc3RyZWFtKQoreworICAgIC8vIFNlcmlhbGl6ZXMgdGhlIHVuaWZvcm1MYXlv
dXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1CbG9ja3MKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBl
IHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIGNvbnN0
IHNpemVfdCB1bmlmb3JtQ291bnQgPSBtRGVmYXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0u
dW5pZm9ybUxheW91dC5zaXplKCk7CisgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8c2l6ZV90Pih1
bmlmb3JtQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsrdW5pZm9ybUluZGV4KQorICAgICAgICB7
CisgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8gPQorICAgICAgICAg
ICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3Vu
aWZvcm1JbmRleF07CisgICAgICAgICAgICBnbDo6V3JpdGVCbG9ja01lbWJlckluZm8oc3RyZWFt
LCBibG9ja0luZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2VyaWFsaXplcyByZXF1
aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUg
c2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgc3RyZWFt
LT53cml0ZUludChtRGVmYXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0udW5pZm9ybURhdGEu
c2l6ZSgpKTsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1
bHRVbmlmb3JtQmxvY2tzSW5mbyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5h
cnlJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1
aXJlZEJ1ZmZlclNpemU7CisgICAgcmVxdWlyZWRCdWZmZXJTaXplLmZpbGwoMCk7CisKKyAgICAv
LyBEZXNlcmlhbGl6ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1C
bG9ja3MKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVy
VHlwZXMoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQgPSBzdHJl
YW0tPnJlYWRJbnQ8c2l6ZV90PigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3Jt
SW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsrdW5pZm9ybUluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKKyAg
ICAgICAgICAgIGdsOjpMb2FkQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgJmJsb2NrSW5mbyk7Cisg
ICAgICAgICAgICBtRGVmYXVsdFVuaWZvcm1CbG9ja3Nbc2hhZGVyVHlwZV0udW5pZm9ybUxheW91
dC5wdXNoX2JhY2soYmxvY2tJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlc2Vy
aWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworICAgIGZvciAoZ2w6
OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAg
ICAgICAgcmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID0gc3RyZWFtLT5yZWFkSW50PHNp
emVfdD4oKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NN
ZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworfQorCit2b2lkIFByb2dyYW1N
dGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFt
KQoreworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJU
eXBlcygpKQorICAgIHsKKyAgICAgICAgc3RyZWFtLT53cml0ZUludDxpbnQ+KG1Nc2xTaGFkZXJU
cmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmhhc1VCT0FyZ3VtZW50QnVmZmVyKTsKKyAgICAgICAg
Zm9yIChjb25zdCBtdGw6OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDoKKyAgICAgICAgICAgICBt
TXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3Mp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8dWludDMyX3Q+KGJpbmRp
bmcudGV4dHVyZUJpbmRpbmcpOworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJf
dD4oYmluZGluZy5zYW1wbGVyQmluZGluZyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVp
bnQzMl90IHVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5h
Y3R1YWxVQk9CaW5kaW5ncykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUlu
dDx1aW50MzJfdD4odWJvQmluZGluZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbU10bDo6bG9hZFNoYWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSkKK3sKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hh
ZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRl
clR5cGVdLmhhc1VCT0FyZ3VtZW50QnVmZmVyID0gc3RyZWFtLT5yZWFkSW50PGludD4oKSAhPSAw
OworICAgICAgICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgorICAgICAgICAg
ICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFNhbXBsZXJCaW5k
aW5ncykKKyAgICAgICAgeworICAgICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0
cmVhbS0+cmVhZEludDx1aW50MzJfdD4oKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2FtcGxlckJp
bmRpbmcgPSBzdHJlYW0tPnJlYWRJbnQ8dWludDMyX3Q+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKHVpbnQzMl90ICZ1Ym9CaW5kaW5nIDogbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hh
ZGVyVHlwZV0uYWN0dWFsVUJPQmluZGluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVib0Jp
bmRpbmcgPSBzdHJlYW0tPnJlYWRJbnQ8dWludDMyX3Q+KCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIEdMYm9vbGVhbiBQcm9ncmFtTXRsOjp2YWxpZGF0ZShjb25zdCBnbDo6Q2FwcyAmY2Fwcywg
Z2w6OkluZm9Mb2cgKmluZm9Mb2cpCiB7CiAgICAgLy8gTm8tb3AuIFRoZSBzcGVjIGlzIHZlcnkg
dmFndWUgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIHZhbGlkYXRpb24uCkBAIC04NzcsMTQgKzExMDQs
MjUgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHBpcGVsaW5lRGVzY0NoYW5nZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlVGV4dHVyZXNTZXR0aW5nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVy
c0RpcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0RyYXcpCiB7CiAgICAgQ29udGV4dE10bCAqY29udGV4dCA9IG10bDo6R2V0SW1w
bChnbENvbnRleHQpOwogICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQogICAgIHsKICAgICAg
ICAgLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIG5lZWRzIHRvIGJlIGNoYW5nZWQKLSAgICAgICAg
aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gcGlwZWxpbmVTdGF0ZSA9Ci0gICAgICAgICAgICBt
TWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwg
cGlwZWxpbmVEZXNjKTsKKyAgICAgICAgaWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gcGlwZWxp
bmVTdGF0ZSA9IG5pbDsKKyAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKKyAgICAg
ICAgeworICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNj
ID0gbXRsOjpSZW5kZXJQaXBlbGluZURlc2MocGlwZWxpbmVEZXNjKTsKKyAgICAgICAgICAgIHhm
YlBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgICA9IG10bDo6UmVuZGVyUGlwZWxpbmVS
YXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPQorICAg
ICAgICAgICAgICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUtPmdldFJlbmRlclBpcGVs
aW5lU3RhdGUoY29udGV4dCwgeGZiUGlwZWxpbmVEZXNjKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPSBtTWV0YWxSZW5kZXJQ
aXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxpbmVEZXNj
KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIXBpcGVsaW5lU3RhdGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGluc2lkZSBnZXRSZW5kZXJQaXBlbGlu
ZVN0YXRlKCkKQEAgLTkxMywxMSArMTE1MSw2IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6
c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgIEFOR0xFX1RS
WSh1cGRhdGVVbmlmb3JtQnVmZmVycyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBlbGluZURlc2Mp
KTsKICAgICB9CiAKLSAgICBpZiAocGlwZWxpbmVEZXNjQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAg
IEFOR0xFX1RSWSh1cGRhdGVYZmJCdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5l
RGVzYykpOwotICAgIH0KLQogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0K
IApAQCAtOTQ4LDEwICsxMTgxLDEyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRl
VGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3Jj
ZVVwZGF0ZSkKIHsKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGds
Q29udGV4dCk7Ci0gICAgY29uc3QgYXV0byAmZ2xTdGF0ZSAgICA9IGdsQ29udGV4dC0+Z2V0U3Rh
dGUoKTsKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6
OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICBjb25zdCBhdXRvICZnbFN0YXRlICAgICAgICAgICAg
ICAgICAgICAgPSBnbENvbnRleHQtPmdldFN0YXRlKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICpleGVjdXRhYmxlID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dyYW1F
eGVjdXRhYmxlKCk7CiAKICAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZXNDYWNoZSAmY29tcGxl
dGVUZXh0dXJlcyA9IGdsU3RhdGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworICAgIGNvbnN0
IGdsOjpBY3RpdmVUZXh0dXJlVHlwZUFycmF5ICZ0ZXh0dXJlVHlwZXMgID0gZXhlY3V0YWJsZS0+
Z2V0QWN0aXZlU2FtcGxlclR5cGVzKCk7CiAKICAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRl
clR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQogICAgIHsKQEAgLTk2NCw2ICsxMTk5
LDggQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6
Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICBjb25zdCBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJ
bmZvICZzaGFkZXJJbmZvID0KICAgICAgICAgICAgICptQ3VycmVudFNoYWRlclZhcmlhbnRzW3No
YWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKIAorICAgICAgICBib29sIGhhc0RlcHRoU2Ft
cGxlciA9IGZhbHNlOworCiAgICAgICAgIGZvciAodWludDMyX3QgdGV4dHVyZUluZGV4ID0gMDsg
dGV4dHVyZUluZGV4IDwgbVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygpLnNpemUoKTsKICAgICAg
ICAgICAgICArK3RleHR1cmVJbmRleCkKICAgICAgICAgewpAQCAtOTc1LDE2ICsxMjEyLDE2IEBA
IGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gc2FtcGxlckJpbmRp
bmcudGV4dHVyZVR5cGU7CiAKICAgICAgICAgICAgIGZvciAodWludDMyX3QgYXJyYXlFbGVtZW50
ID0gMDsgYXJyYXlFbGVtZW50IDwgc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6
ZSgpOwogICAgICAgICAgICAgICAgICArK2FycmF5RWxlbWVudCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQgICA9IHNhbXBsZXJCaW5kaW5nLmJvdW5k
VGV4dHVyZVVuaXRzW2FycmF5RWxlbWVudF07Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUgPSBjb21wbGV0ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKLSAgICAgICAgICAgICAg
ICBnbDo6U2FtcGxlciAqc2FtcGxlciA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0U2FtcGxl
cih0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdGV4dHVyZVNsb3QgPSBt
c2xCaW5kaW5nLnRleHR1cmVCaW5kaW5nICsgYXJyYXlFbGVtZW50OwotICAgICAgICAgICAgICAg
IHVpbnQzMl90IHNhbXBsZXJTbG90ID0gbXNsQmluZGluZy5zYW1wbGVyQmluZGluZyArIGFycmF5
RWxlbWVudDsKKyAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQgICAgICAgICAgPSBz
YW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRdOworICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlICAgICAgICA9IGNvbXBsZXRlVGV4dHVyZXNbdGV4
dHVyZVVuaXRdOworICAgICAgICAgICAgICAgIGdsOjpTYW1wbGVyICpzYW1wbGVyICAgICAgICA9
IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0U2FtcGxlcih0ZXh0dXJlVW5pdCk7CisgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gdGV4dHVyZVR5cGVzW3RleHR1
cmVVbml0XTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB0ZXh0dXJlU2xvdCAgICAgICAgPSBt
c2xCaW5kaW5nLnRleHR1cmVCaW5kaW5nICsgYXJyYXlFbGVtZW50OworICAgICAgICAgICAgICAg
IHVpbnQzMl90IHNhbXBsZXJTbG90ICAgICAgICA9IG1zbEJpbmRpbmcuc2FtcGxlckJpbmRpbmcg
KyBhcnJheUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPmdldElu
Y29tcGxldGVUZXh0dXJlKGdsQ29udGV4dCwgdGV4dHVyZVR5cGUsICZ0ZXh0dXJlKSk7CkBAIC05
OTQsMjUgKzEyMzEsMjIgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJl
cyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgIFRleHR1cmVN
dGwgKnRleHR1cmVNdGwgPSBtdGw6OkdldEltcGwodGV4dHVyZSk7CiAgICAgICAgICAgICAgICAg
aWYgKHNhbXBsZXJCaW5kaW5nLmZvcm1hdCA9PSBnbDo6U2FtcGxlckZvcm1hdDo6U2hhZG93KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2FuZ2xlYnVn
LmNvbS81MTA3Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBh
IGNvbXBhcmUgbW9kZSB3aGVyZSBzYW1wbGluZyBhIHNoYWRvdyBzYW1wbGVyIGNvdWxkCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIHNhbWUgdmFsdWUgYXMgaWYgc2FtcGxpbmcgZnJv
bSBhIG5vcm1hbCBzYW1wbGVyLgotICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0aW5nIHRo
aXMgY291bGQgcmVxdWlyZSBoYWNraW5nIHNwaXJ2LWNyb3NzIHRvIGNoYW5nZSBzYW1wbGVfY29t
cGFyZSgpCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIHNhbXBsZSgpLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9kZSgp
ICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBFUlIoKSA8PCAiR0xfVEVYVFVSRV9DT01QQVJFX01PREUg
IT0gR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSBpcyBub3QgIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN1cHBvcnRlZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTkdM
RV9NVExfVFJZKGNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhbXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSA9PSBHTF9DT01QQVJFX1JFRl9UT19U
RVhUVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBoYXNE
ZXB0aFNhbXBsZXIgICAgICAgICAgICAgICAgICA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IG1TaGFkb3dDb21wYXJlTW9kZXNbdGV4dHVyZVNsb3RdID0gbXRsOjpNc2xHZXRTaGFkZXJTaGFk
b3dDb21wYXJlTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXJTdGF0ZS0+Z2V0
Q29tcGFyZU1vZGUoKSwgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlRnVuYygpKTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBBTkdMRV9UUlkodGV4dHVyZU10bC0+YmluZFRv
U2hhZGVyKGdsQ29udGV4dCwgY21kRW5jb2Rlciwgc2hhZGVyVHlwZSwgc2FtcGxlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVTbG90
LCBzYW1wbGVyU2xvdCkpOwogICAgICAgICAgICAgfSAgLy8gZm9yIGFycmF5IGVsZW1lbnRzCiAg
ICAgICAgIH0gICAgICAvLyBmb3Igc2FtcGxlciBiaW5kaW5ncwotICAgIH0gICAgICAgICAgLy8g
Zm9yIHNoYWRlciB0eXBlcworCisgICAgICAgIGlmIChoYXNEZXB0aFNhbXBsZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldERhdGEoc2hhZGVyVHlwZSwgbVNoYWRvd0Nv
bXBhcmVNb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjprU2hhZG93
U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCk7CisgICAgICAgIH0KKyAgICB9ICAvLyBm
b3Igc2hhZGVyIHR5cGVzCiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9
CkBAIC0xMDQwLDExICsxMjc0LDYgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVV
bmlmb3JtQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAogCiAgICAgZm9yIChnbDo6U2hhZGVy
VHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKICAgICB7Ci0gICAg
ICAgIGlmICghbUN1cnJlbnRTaGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobUN1cnJlbnRT
aGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXS0+dHJhbnNsYXRlZFNyY0luZm8tPmhhc1VCT0FyZ3Vt
ZW50QnVmZmVyKQogICAgICAgICB7CiAgICAgICAgICAgICBBTkdMRV9UUlkoCkBAIC0xMTQ5LDgg
KzEzNzgsNiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmJpbmRVbmlmb3JtQnVmZmVyc1Rv
RGlzY3JldGVTbG90cygKICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogewogICAgIGNv
bnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSA9IGNvbnRleHQtPmdldFN0YXRlKCk7Ci0gICAgY29uc3Qg
bXRsOjpUcmFuc2xhdGVkU2hhZGVySW5mbyAmc2hhZGVySW5mbyA9Ci0gICAgICAgICptQ3VycmVu
dFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKICAgICBmb3Ig
KHVpbnQzMl90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBibG9ja3Muc2l6ZSgpOyAr
K2J1ZmZlckluZGV4KQogICAgIHsKICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZi
bG9jayA9IGJsb2Nrc1tidWZmZXJJbmRleF07CkBAIC0xMTYyLDcgKzEzODksOCBAQCBhbmdsZTo6
UmVzdWx0IFByb2dyYW1NdGw6OmJpbmRVbmlmb3JtQnVmZmVyc1RvRGlzY3JldGVTbG90cygKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdWludDMyX3QgYWN0dWFs
QnVmZmVySWR4ID0gc2hhZGVySW5mby5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07Cisg
ICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9CisgICAgICAgICAgICBtTXNsU2hhZGVy
VHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07
CiAKICAgICAgICAgaWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJz
KQogICAgICAgICB7CkBAIC0xMTk5LDEyICsxNDI3LDEyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6ZW5jb2RlVW5pZm9ybUJ1ZmZlcnNJbmZvQXJndW1lbnRCdWZmZXIoCiAgICAgW2J1ZmZl
ckVuY29kZXIubWV0YWxBcmdCdWZmZXJFbmNvZGVyIHNldEFyZ3VtZW50QnVmZmVyOmFyZ3VtZW50
QnVmZmVyLT5nZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldDphcmd1bWVudEJ1ZmZlck9mZnNldF07CiAKLSAgICBzdGF0aWNfYXNz
ZXJ0KE1UTFJlbmRlclN0YWdlVmVydGV4ID09ICgweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgpKSwKLSAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBn
bCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhl
ciIpOwotICAgIHN0YXRpY19hc3NlcnQoCi0gICAgICAgIE1UTFJlbmRlclN0YWdlRnJhZ21lbnQg
PT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50
KSksCi0gICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0g
dG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOwotICAgIGF1dG8gbXRsUmVuZGVyU3RhZ2UgPSBz
dGF0aWNfY2FzdDxNVExSZW5kZXJTdGFnZXM+KDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
c2hhZGVyVHlwZSkpOworICAgIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPE1UTFJlbmRlclN0YWdl
cz4ga1NoYWRlclN0YWdlTWFwID0geworICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwg
bXRsOjprUmVuZGVyU3RhZ2VWZXJ0ZXh9LAorICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OkZyYWdt
ZW50LCBtdGw6OmtSZW5kZXJTdGFnZUZyYWdtZW50fSwKKyAgICB9OworCisgICAgYXV0byBtdGxS
ZW5kZXJTdGFnZSA9IGtTaGFkZXJTdGFnZU1hcFtzaGFkZXJUeXBlXTsKIAogICAgIGZvciAodWlu
dDMyX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySW5kZXgpCiAgICAgewpAQCAtMTIzOSw0OSArMTQ2Nyw0IEBAIGFuZ2xlOjpSZXN1bHQgUHJv
Z3JhbU10bDo6ZW5jb2RlVW5pZm9ybUJ1ZmZlcnNJbmZvQXJndW1lbnRCdWZmZXIoCiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IFByb2dyYW1N
dGw6OnVwZGF0ZVhmYkJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpj
bWRFbmNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCi17Ci0gICAgY29uc3Qg
Z2w6OlN0YXRlICZnbFN0YXRlICAgICAgICAgICAgICAgICA9IGNvbnRleHQtPmdldFN0YXRlKCk7
Ci0gICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdsU3RhdGUu
Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Ci0KLSAgICBpZiAocGlwZWxpbmVEZXNjLnJh
c3Rlcml6YXRpb25FbmFibGVkKCkgfHwgIWdsU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZVVucGF1c2VkKCkgfHwKLSAgICAgICAgQU5HTEVfVU5MSUtFTFkoIXRyYW5zZm9ybUZlZWRiYWNr
KSkKLSAgICB7Ci0gICAgICAgIC8vIFhGQiBvdXRwdXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHJh
c3Rlcml6YXRpb24gZGlzYWJsZWQuCi0gICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBnbFN0YXRlLmdldFBy
b2dyYW1FeGVjdXRhYmxlKCktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKLQot
ICAgIEFTU0VSVCh4ZmJCdWZmZXJDb3VudCA+IDApOwotICAgIEFTU0VSVChtU3RhdGUuZ2V0VHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgIT0gR0xfSU5URVJMRUFWRURfQVRUUklCUyB8fAot
ICAgICAgICAgICB4ZmJCdWZmZXJDb3VudCA9PSAxKTsKLQotICAgIGZvciAoc2l6ZV90IGJ1ZmZl
ckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkK
LSAgICB7Ci0gICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9IG1Nc2xYZmJPbmx5VmVy
dGV4U2hhZGVySW5mby5hY3R1YWxYRkJCaW5kaW5nc1tidWZmZXJJbmRleF07Ci0KLSAgICAgICAg
aWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGdsOjpP
ZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYnVmZmVyQmluZGluZyA9Ci0gICAgICAg
ICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7Ci0g
ICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGJ1ZmZlckJpbmRpbmcuZ2V0KCk7Ci0gICAgICAg
IEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwotICAgICAgICBB
U1NFUlQoYnVmZmVyICE9IG51bGxwdHIpOwotCi0gICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRs
ID0gbXRsOjpHZXRJbXBsKGJ1ZmZlcik7Ci0KLSAgICAgICAgLy8gVXNlIG9mZnNldD0wLCBhY3R1
YWwgb2Zmc2V0IHdpbGwgYmUgc2V0IGluIERyaXZlciBVbmlmb3JtIGluc2lkZSBDb250ZXh0TXRs
LgotICAgICAgICBjbWRFbmNvZGVyLT5zZXRCdWZmZXJGb3JXcml0ZShnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCBidWZmZXJNdGwtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQnVmZmVySWR4KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KIH0gIC8vIG5hbWVzcGFjZSByeApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaAppbmRleCAyMTg1NGY2ODhmOWJiMDg4NDE4ZjhlNjdj
ZDdhZDNlOWFiM2NjOWIxLi4yNzhmMWRmMTZiZWYwNDFkODZlMTU2NWZjNDk4ZGY5ODQ2MzIxYTEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUXVlcnlNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTk4LDggKzk4LDcgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJsaWMg
UXVlcnlJbXBsCiAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmdldFZpc2liaWxpdHlSZXN1bHRC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsgfQogICAgIC8v
IFJlc2V0IHRoZSBvY2NsdXNpb24gcXVlcnkgcmVzdWx0IHN0b3JlZCBpbiBidWZmZXIgdG8gemVy
bwogICAgIHZvaWQgcmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRleHRNdGwp
OwotCi0gICAgdm9pZCBvblRyYW5zZm9ybUZlZWRiYWNrRW5kKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmlt
aXRpdmVzRHJhd24pOwogCiAgIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBA
IC0xMDgsOCArMTA3LDEzIEBAIGNsYXNzIFF1ZXJ5TXRsIDogcHVibGljIFF1ZXJ5SW1wbAogICAg
IC8vIExpc3Qgb2Ygb2Zmc2V0cyBpbiB0aGUgcmVuZGVyIHBhc3MncyBvY2NsdXNpb24gcXVlcnkg
cG9vbCBidWZmZXIgYWxsb2NhdGVkIGZvciB0aGlzIHF1ZXJ5CiAgICAgVmlzaWJpbGl0eUJ1ZmZl
ck9mZnNldHNNdGwgbVZpc2liaWxpdHlCdWZmZXJPZmZzZXRzOwogICAgIG10bDo6QnVmZmVyUmVm
IG1WaXNpYmlsaXR5UmVzdWx0QnVmZmVyOworICAgIC8vIFVzZWQgd2l0aCBUcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNXcml0dGVuIHdoZW4gdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGVtdWxhdGVk
LgorICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CiAKLSAgICBz
aXplX3QgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduID0gMDsKKyAgICAvLyBUT0RP
KGpjdW5uaW5naGFtKTogY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgbVRyYW5zZm9ybUZlZWRiYWNr
UHJpbWl0aXZlc0RyYXduCisgICAgLy8gYnV0IGNhbiBiZSB1c2VkIGZvciByZXN0IG9mIHJlc3Vs
dHMKKyAgICB1aW50NjRfdCBtQ2FjaGVkUmVzdWx0OworICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZh
bGlkOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwu
bW0KaW5kZXggZjVlOWJmM2I4MjdkOGQzMGYxYjM2NzE0ZDA2NTAyM2UxNDE1YTA5MS4uYWIwZTdi
ZjA4MDExNTJjMDdhYmIwMjAwMzNiOGNmNTU1Yzc1M2MwNSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9R
dWVyeU10bC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEz
LDcgKzEzLDEyIEBACiAKIG5hbWVzcGFjZSByeAogewotUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpR
dWVyeVR5cGUgdHlwZSkgOiBRdWVyeUltcGwodHlwZSkge30KK1F1ZXJ5TXRsOjpRdWVyeU10bChn
bDo6UXVlcnlUeXBlIHR5cGUpCisgICAgOiBRdWVyeUltcGwodHlwZSksCisgICAgICBtVHJhbnNm
b3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24oMCksCisgICAgICBtQ2FjaGVkUmVzdWx0KDApLAor
ICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkKGZhbHNlKQore30KIAogUXVlcnlNdGw6On5RdWVyeU10
bCgpIHt9CiAKQEAgLTIyLDEzICsyNywxNCBAQCB2b2lkIFF1ZXJ5TXRsOjpvbkRlc3Ryb3koY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10
bDo6R2V0SW1wbChjb250ZXh0KTsKICAgICBpZiAoIWdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZz
ZXRzKCkuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVl
cnlEZXN0cm95KGNvbnRleHQsIHRoaXMpOworICAgICAgICBjb250ZXh0TXRsLT5vbk9jY2x1c2lv
blF1ZXJ5RGVzdHJveWVkKGNvbnRleHQsIHRoaXMpOwogICAgIH0KICAgICBtVmlzaWJpbGl0eVJl
c3VsdEJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgUXVlcnlNdGw6OmJlZ2lu
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogeworICAgIG1DYWNoZWRSZXN1bHRWYWxpZCAg
ICAgPSBmYWxzZTsKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOwogICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQogICAgIHsKQEAgLTQ3LDcgKzUzLDcgQEAg
YW5nbGU6OlJlc3VsdCBRdWVyeU10bDo6YmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBTkdMRV9U
UlkoY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeUJlZ2luKGNvbnRleHQsIHRoaXMpKTsKKyAg
ICAgICAgICAgIEFOR0xFX1RSWShjb250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29u
dGV4dCwgdGhpcykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5
VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKICAgICAgICAgICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biA9IDA7CkBAIC02NiwxMyArNzIsMjMgQEAg
YW5nbGU6OlJlc3VsdCBRdWVyeU10bDo6ZW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQog
ICAgIHsKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgogICAgICAgICBj
YXNlIGdsOjpRdWVyeVR5cGU6OkFueVNhbXBsZXNDb25zZXJ2YXRpdmU6Ci0gICAgICAgICAgICBj
b250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnRleHQsIHRoaXMpOworICAgICAgICAg
ICAgY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVl
ZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKKyAgICAgICAgeworICAgICAgICAgICAgbUNhY2hlZFJl
c3VsdCA9IG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bjsKKwogICAgICAgICAgICAg
Ly8gVGhlcmUgY291bGQgYmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBhZGQg
dGhlIHByaW1pdGl2ZXMgZHJhd24gc28gZmFyCiAgICAgICAgICAgICAvLyBmcm9tIHRoZSBjdXJy
ZW50IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QuCi0gICAgICAgICAgICBvblRyYW5zZm9ybUZl
ZWRiYWNrRW5kKGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnbDo6
VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0KKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5nZXRTdGF0ZSgpLmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1DYWNoZWRSZXN1bHQgKz0gdHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3
bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwLDcgKzEyNiw3
IEBAIGFuZ2xlOjpSZXN1bHQgUXVlcnlNdGw6OndhaXRBbmRHZXRSZXN1bHQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsIFQgKnBhcmFtcykKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0
dGVuOgotICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1UcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNEcmF3bik7CisgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
VD4obUNhY2hlZFJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTEzNyw3ICsxNTMsNyBAQCBhbmdsZTo6
UmVzdWx0IFF1ZXJ5TXRsOjppc1Jlc3VsdEF2YWlsYWJsZShjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgYm9vbCAqYXZhaQogICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJl
c3VsdEJ1ZmZlci0+aXNCZWluZ1VzZWRCeUdQVShjb250ZXh0TXRsKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0
aXZlc1dyaXR0ZW46Ci0gICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICphdmFpbGFibGUgPSBtQ2FjaGVkUmVzdWx0VmFsaWQ7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE3NSwxMyAr
MTkxLDkgQEAgdm9pZCBRdWVyeU10bDo6cmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwg
KmNvbnRleHRNdGwpCiAgICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXItPnN5bmNDb250ZW50KGNv
bnRleHRNdGwsIGJsaXRFbmNvZGVyKTsKIH0KIAotdm9pZCBRdWVyeU10bDo6b25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3ZvaWQgUXVlcnlNdGw6Om9u
VHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCiB7Ci0gICAg
Z2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldFN0
YXRlKCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Ci0gICAgaWYgKHRyYW5zZm9ybUZl
ZWRiYWNrKQotICAgIHsKLSAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXdu
ICs9IHRyYW5zZm9ybUZlZWRiYWNrLT5nZXRQcmltaXRpdmVzRHJhd24oKTsKLSAgICB9CisgICAg
bVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduICs9IHByaW1pdGl2ZXNEcmF3bjsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oCmluZGV4IDZmZDdi
MWI5OTRiODk2N2ZiZWNjY2E4NTE1OTVmOTBjOTVmODQwODEuLjA1MzAyMGM1ZTNhNWE4NzA5MGEy
Y2IyZjVhZDVkZjA3MzA3NjVlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVm
ZmVyTXRsLmgKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyTXRsIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckltcGwKIAogICAgIG10bDo6Rm9ybWF0IG1Gb3JtYXQ7CiAgICAgbXRsOjpU
ZXh0dXJlUmVmIG1UZXh0dXJlOworICAgIG10bDo6VGV4dHVyZVJlZiBtSW1wbGljaXRNU1RleHR1
cmU7CiAgICAgUmVuZGVyVGFyZ2V0TXRsIG1SZW5kZXJUYXJnZXQ7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyQnVmZmVyTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQppbmRleCA2M2Q2ZjRiNzI4Mzk1ODBjOTMz
MDQ1YmVlNGU1ZTMyOTU2MjNiNDAwLi4yZjliNWY2MzJkNTBiYmQ3MjExNjFkM2MzZmUzNmI1MzY2
ODdkMjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwubW0KQEAg
LTI3LDcgKzI3LDggQEAgdm9pZCBSZW5kZXJidWZmZXJNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkKIAogdm9pZCBSZW5kZXJidWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJl
KCkKIHsKLSAgICBtVGV4dHVyZSA9IG51bGxwdHI7CisgICAgbVRleHR1cmUgICAgICAgICAgID0g
bnVsbHB0cjsKKyAgICBtSW1wbGljaXRNU1RleHR1cmUgPSBudWxscHRyOwogfQogCiBhbmdsZTo6
UmVzdWx0IFJlbmRlcmJ1ZmZlck10bDo6c2V0U3RvcmFnZUltcGwoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCkBAIC00Miw4ICs0Myw5IEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyYnVmZmVyTXRs
OjpzZXRTdG9yYWdlSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB7CiAgICAg
ICAgIC8vIENoZWNrIGFnYWluc3QgdGhlIHN0YXRlIGlmIHdlIG5lZWQgdG8gcmVjcmVhdGUgdGhl
IHN0b3JhZ2UuCiAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBtU3RhdGUuZ2V0Rm9ybWF0
KCkuaW5mby0+aW50ZXJuYWxGb3JtYXQgfHwKLSAgICAgICAgICAgIHdpZHRoICE9IG1TdGF0ZS5n
ZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBtU3RhdGUuZ2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgICAg
IHNhbXBsZXMgIT0gbVN0YXRlLmdldFNhbXBsZXMoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KHdpZHRoKSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R0xzaXplaT4oaGVpZ2h0KSAhPSBtU3RhdGUuZ2V0SGVpZ2h0KCkgfHwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHNhbXBsZXMpICE9IG1TdGF0ZS5nZXRTYW1wbGVz
KCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJlbGVhc2VUZXh0dXJlKCk7CiAgICAgICAgIH0K
QEAgLTcyLDMwICs3NCw2MiBAQCBhbmdsZTo6UmVzdWx0IFJlbmRlcmJ1ZmZlck10bDo6c2V0U3Rv
cmFnZUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICBpZiAoKG1UZXh0dXJl
ID09IG51bGxwdHIgfHwgIW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0gMCAmJiBoZWln
aHQgIT0gMCkpCiAgICAgewotICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA9PSAxKQorICAgICAg
ICBpZiAoYWN0dWFsU2FtcGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJp
dHMoKSAmJiBtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKSkKICAgICAgICAgewotICAgICAgICAg
ICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJEVGV4dHVyZShjb250ZXh0TXRsLCBtRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJE
VGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxsb3dG
b3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsKKworICAgICAgICAgICAgLy8gVXNlIGlt
cGxpY2l0IHJlc29sdmUgZm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aGVuZXZlciBwb3NzaWJs
ZS4gVGhpcyBpcyBiZWNhdXNlCisgICAgICAgICAgICAvLyBmb3IgZGVwdGggc3RlbmNpbCB0ZXh0
dXJlLCBpZiBzdGVuY2lsIG5lZWRzIHRvIGJlIGJsaXR0ZWQsIGEgZm9ybWF0dGVkIGNsb25lIGhh
cworICAgICAgICAgICAgLy8gdG8gYmUgY3JlYXRlZC4gQW5kIGl0IGlzIGV4cGVuc2l2ZSB0byBj
bG9uZSBhIG11bHRpc2FtcGxlIHRleHR1cmUuCisgICAgICAgICAgICBpZiAoYWN0dWFsU2FtcGxl
cyA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtYXQgbXVz
dCBzdXBwb3J0cyBpbXBsaWNpdCByZXNvbHZlCisgICAgICAgICAgICAgICAgQVNTRVJUKG1Gb3Jt
YXQuZ2V0Q2FwcygpLnJlc29sdmUpOworCisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6
VGV4dHVyZTo6TWFrZTJETVNUZXh0dXJlKAorICAgICAgICAgICAgICAgICAgICBjb250ZXh0TXRs
LCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAorICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxlcywKKyAgICAg
ICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyB0cnVlLAorICAgICAgICAgICAg
ICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZtSW1wbGljaXRNU1RleHR1cmUp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZSgKLSAgICAg
ICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1w
bGVzLAotICAgICAgICAgICAgICAgIC8qIHJlbmRlclRhcmdldE9ubHkgKi8gZmFsc2UsCi0gICAg
ICAgICAgICAgICAgLyogYWxsb3dGb3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVu
Y2lsQml0cygpLCAmbVRleHR1cmUpKTsKKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1
cmU6Ok1ha2UyRE1TVGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih3aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhlaWdodCksIGFjdHVhbFNhbXBsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVy
VGFyZ2V0T25seSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZtVGV4dHVyZSkp
OwogICAgICAgICB9CiAKLSAgICAgICAgbVJlbmRlclRhcmdldC5zZXQobVRleHR1cmUsIG10bDo6
a1plcm9OYXRpdmVNaXBMZXZlbCwgMCwgbUZvcm1hdCk7CisgICAgICAgIG1SZW5kZXJUYXJnZXQu
c2V0V2l0aEltcGxpY2l0TVNUZXh0dXJlKG1UZXh0dXJlLCBtSW1wbGljaXRNU1RleHR1cmUsIG10
bDo6a1plcm9OYXRpdmVNaXBMZXZlbCwgMCwgbUZvcm1hdCk7CiAKICAgICAgICAgLy8gRm9yIGVt
dWxhdGVkIGNoYW5uZWxzIHRoYXQgR0wgdGV4dHVyZSBpbnRlbmRzIHRvIG5vdCBoYXZlLAogICAg
ICAgICAvLyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlaXIgY29udGVudC4KICAgICAgICAgYm9v
bCBlbXVsYXRlZENoYW5uZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQpOwogICAg
ICAgICBpZiAoZW11bGF0ZWRDaGFubmVscykKICAgICAgICAgewotICAgICAgICAgICAgYXV0byBp
bmRleCA9IG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1h
Z2VJbmRleDo6TWFrZTJEKDApKTsKLQotICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6SW5pdGlh
bGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtVGV4dHVyZSwgbUZvcm1hdCwgaW5kZXgpKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkltYWdlSW5kZXggaW5kZXg7CisKKyAgICAgICAg
ICAgIGlmIChhY3R1YWxTYW1wbGVzID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbmRleCA9IGdsOjpJbWFnZUluZGV4OjpNYWtlMkRNdWx0aXNhbXBsZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlu
ZGV4ID0gZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgQU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBt
VGV4dHVyZSwgbUZvcm1hdCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAwKSkpOworICAg
ICAgICAgICAgaWYgKG1JbXBsaWNpdE1TVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQs
IG1JbXBsaWNpdE1TVGV4dHVyZSwgbUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6SW1hZ2VOYXRpdmVJbmRleChnbDo6
SW1hZ2VJbmRleDo6TWFrZTJETXVsdGlzYW1wbGUoKSwgMCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSAgLy8gaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCiAgICAgfQogCiAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtMTMzLDcgKzE2Nyw2IEBAIGFuZ2xlOjpSZXN1bHQg
UmVuZGVyYnVmZmVyTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJU
YXJnZXQgKipydE91dCkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0IE1TQUEuCiAgICAg
QVNTRVJUKG1UZXh0dXJlICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKICAgICAqcnRPdXQgPSAmbVJl
bmRlclRhcmdldDsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKaW5kZXggYmFmNGU0ZDI2NjkxODE0MGNi
MDEyMzI4MWFkZTAzZjY0MTRiZWY4OS4uMGM1NzUxNzVhMTE3MTk4ZWRkZjViZWNhYTJmZWRmYTQ1
MDc2ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaApAQCAt
NDYsMjEgKzQ2LDE5IEBAIGNsYXNzIFJlbmRlclRhcmdldE10bCBmaW5hbCA6IHB1YmxpYyBGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQKICAgICB2b2lkIGR1cGxpY2F0ZUZyb20oY29u
c3QgUmVuZGVyVGFyZ2V0TXRsICZzcmMpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIG10bDo6
VGV4dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmUubG9jaygpOyB9
Ci0gICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQotICAgIGNvbnN0IG10bDo6TWlwbWFwTmF0
aXZlTGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtTGV2ZWxJbmRleDsgfQot
ICAgIHVpbnQzMl90IGdldExheWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtTGF5ZXJJbmRleDsg
fQorICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1
cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRUZXh0dXJlUmVmKCk7IH0KKyAgICBtdGw6OlRleHR1cmVS
ZWYgZ2V0SW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPmdldEltcGxpY2l0TVNUZXh0dXJlUmVmKCk7IH0KKyAgICBjb25zdCBtdGw6Ok1p
cG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmVS
ZW5kZXJUYXJnZXRJbmZvLT5sZXZlbDsgfQorICAgIHVpbnQzMl90IGdldExheWVySW5kZXgoKSBj
b25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aDsgfQog
ICAgIHVpbnQzMl90IGdldFJlbmRlclNhbXBsZXMoKSBjb25zdDsKICAgICBjb25zdCBtdGw6OkZv
cm1hdCAqZ2V0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUZvcm1hdDsgfQogCiAgICAgdm9pZCB0
b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYyhtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAq
cnBhRGVzY091dCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICBtdGw6OlRleHR1cmVXZWFrUmVm
IG1UZXh0dXJlOwotICAgIG10bDo6VGV4dHVyZVdlYWtSZWYgbUltcGxpY2l0TVNUZXh0dXJlOwot
ICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgbUxldmVsSW5kZXggPSBtdGw6OmtaZXJvTmF0aXZl
TWlwTGV2ZWw7Ci0gICAgdWludDMyX3QgbUxheWVySW5kZXggICAgICAgICAgICAgICA9IDA7Ci0g
ICAgY29uc3QgbXRsOjpGb3JtYXQgKm1Gb3JtYXQgICAgICAgICA9IG51bGxwdHI7CisvLyBUaGlz
IGlzIHNoYXJlZCBwb2ludGVyIHRvIGF2b2lkIGNyYXNoaW5nIHdoZW4gdGV4dHVyZSBkZWxldGVk
IGFmdGVyIGJvdW5kIHRvIGEgZnJhbWUgYnVmZmVyLgorICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFy
Z2V0SW5mbzsKKyAgICBjb25zdCBtdGw6OkZvcm1hdCAqbUZvcm1hdCA9IG51bGxwdHI7CiB9Owog
fSAgLy8gbmFtZXNwYWNlIHJ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0
TXRsLm1tCmluZGV4IGU4OWU3NjE0ODFkZDY0ZGM0N2M3NTA3YWFiOWJlZmE1ZjI0YzRlMmYuLmUx
MjZkYmI2YmVlMDExOWExNjY5YTAxZTdlMDk2YzJkODRhN2Q4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJn
ZXRNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbQpAQCAtMTEsNyArMTEsMTAgQEAKIAogbmFtZXNw
YWNlIHJ4CiB7Ci1SZW5kZXJUYXJnZXRNdGw6OlJlbmRlclRhcmdldE10bCgpIHt9CitSZW5kZXJU
YXJnZXRNdGw6OlJlbmRlclRhcmdldE10bCgpIDoKKyAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
KHN0ZDo6bWFrZV9zaGFyZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjPigpKSwKKyAgbUZvcm1hdChudWxscHRyKQore30KIAogUmVuZGVyVGFyZ2V0TXRsOjp+UmVu
ZGVyVGFyZ2V0TXRsKCkKIHsKQEAgLTE5LDEwICsyMiw3IEBAIFJlbmRlclRhcmdldE10bDo6flJl
bmRlclRhcmdldE10bCgpCiB9CiAKIFJlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJl
bmRlclRhcmdldE10bCAmJm90aGVyKQotICAgIDogbVRleHR1cmUoc3RkOjptb3ZlKG90aGVyLm1U
ZXh0dXJlKSksCi0gICAgICBtSW1wbGljaXRNU1RleHR1cmUoc3RkOjptb3ZlKG90aGVyLm1JbXBs
aWNpdE1TVGV4dHVyZSkpLAotICAgICAgbUxldmVsSW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAot
ICAgICAgbUxheWVySW5kZXgob3RoZXIubUxheWVySW5kZXgpCisgICAgOiBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm8oc3RkOjptb3ZlKG90aGVyLm1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbykpCiB7
fQogCiB2b2lkIFJlbmRlclRhcmdldE10bDo6c2V0KGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4
dHVyZSwKQEAgLTM5LDIxICszOSwyMSBAQCB2b2lkIFJlbmRlclRhcmdldE10bDo6c2V0V2l0aElt
cGxpY2l0TVNUZXh0dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGF5ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6
Rm9ybWF0ICZmb3JtYXQpCiB7Ci0gICAgbVRleHR1cmUgICAgICAgICAgID0gdGV4dHVyZTsKLSAg
ICBtSW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBtTGV2ZWxJbmRl
eCAgICAgICAgPSBsZXZlbDsKLSAgICBtTGF5ZXJJbmRleCAgICAgICAgPSBsYXllcjsKKyAgICBt
VGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnRleHR1cmUgICAgICAgICAgID0gdGV4dHVyZTsKKyAg
ICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRN
U1RleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5sZXZlbCAgICAgICAgPSBs
ZXZlbDsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aCAgICAgICAg
PSBsYXllcjsKICAgICBtRm9ybWF0ICAgICAgICAgICAgPSAmZm9ybWF0OwogfQogCiB2b2lkIFJl
bmRlclRhcmdldE10bDo6c2V0VGV4dHVyZShjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUp
CiB7Ci0gICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5m
by0+dGV4dHVyZSA9IHRleHR1cmU7CiB9CiAKIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRJbXBs
aWNpdE1TVGV4dHVyZShjb25zdCBtdGw6OlRleHR1cmVSZWYgJmltcGxpY2l0TVNUZXh0dXJlKQog
ewotICAgIG1JbXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworICAgIG1UZXh0
dXJlUmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVy
ZTsKIH0KIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OmR1cGxpY2F0ZUZyb20oY29uc3QgUmVuZGVy
VGFyZ2V0TXRsICZzcmMpCkBAIC02NCwyNSArNjQsMTkgQEAgdm9pZCBSZW5kZXJUYXJnZXRNdGw6
OmR1cGxpY2F0ZUZyb20oY29uc3QgUmVuZGVyVGFyZ2V0TXRsICZzcmMpCiAKIHZvaWQgUmVuZGVy
VGFyZ2V0TXRsOjpyZXNldCgpCiB7Ci0gICAgbVRleHR1cmUucmVzZXQoKTsKLSAgICBtSW1wbGlj
aXRNU1RleHR1cmUucmVzZXQoKTsKLSAgICBtTGV2ZWxJbmRleCA9IG10bDo6a1plcm9OYXRpdmVN
aXBMZXZlbDsKLSAgICBtTGF5ZXJJbmRleCA9IDA7Ci0gICAgbUZvcm1hdCAgICAgPSBudWxscHRy
OworICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZS5yZXNldCgpOworICAgIG1U
ZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRNU1RleHR1cmUucmVzZXQoKTsKKyAgICBt
VGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsICAgICAgICA9IG10bDo6a1plcm9OYXRpdmVN
aXBMZXZlbDsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNlT3JEZXB0aCA9IDA7
CisgICAgbUZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBudWxscHRyOwog
fQogCiB1aW50MzJfdCBSZW5kZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMoKSBjb25zdAog
ewotICAgIG10bDo6VGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4ID0gZ2V0SW1wbGljaXRNU1RleHR1
cmUoKTsKLSAgICBtdGw6OlRleHR1cmVSZWYgdGV4ICAgICAgICAgICA9IGdldFRleHR1cmUoKTsK
LSAgICByZXR1cm4gaW1wbGljaXRNU1RleCA/IGltcGxpY2l0TVNUZXgtPnNhbXBsZXMoKSA6ICh0
ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOworICAgIHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdl
dEluZm8tPmdldFJlbmRlclNhbXBsZXMoKTsKIH0KIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjp0b1Jl
bmRlclBhc3NBdHRhY2htZW50RGVzYyhtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAqcnBh
RGVzY091dCkgY29uc3QKIHsKLSAgICBycGFEZXNjT3V0LT50ZXh0dXJlICAgICAgICAgICA9IG1U
ZXh0dXJlLmxvY2soKTsKLSAgICBycGFEZXNjT3V0LT5pbXBsaWNpdE1TVGV4dHVyZSA9IG1JbXBs
aWNpdE1TVGV4dHVyZS5sb2NrKCk7Ci0gICAgcnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAg
PSBtTGV2ZWxJbmRleDsKLSAgICBycGFEZXNjT3V0LT5zbGljZU9yRGVwdGggICAgICA9IG1MYXll
ckluZGV4OwotICAgIHJwYURlc2NPdXQtPmJsZW5kYWJsZSAgICAgICAgID0gbUZvcm1hdCA/IG1G
b3JtYXQtPmdldENhcHMoKS5ibGVuZGFibGUgOiBmYWxzZTsKKyAgICBycGFEZXNjT3V0LT5yZW5k
ZXJUYXJnZXQgPSBtVGV4dHVyZVJlbmRlclRhcmdldEluZm87CiB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVy
TXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvU2hhZGVyTXRsLmgKaW5kZXggN2IyY2ZkNTBjYmRmZTQxZmYzNjg4MGY2MTBhNzhmNDQ0NmNh
YTdlMS4uNTJlOTFhZmI2ZjEzMjY1YjU2NjU4OTVhNzAyYWE5N2E4NzgwZDZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1No
YWRlck10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9TaGFkZXJNdGwuaApAQCAtMTEsOCArMTEsOCBAQAogCiAjaW5jbHVkZSA8bWFw
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qu
aCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgiCi0KIG5hbWVzcGFj
ZSByeAogewogCkBAIC0yNiw3ICsyNiwxOSBAQCBjbGFzcyBTaGFkZXJNdGwgOiBwdWJsaWMgU2hh
ZGVySW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIG9w
dGlvbnMpIG92ZXJyaWRlOwogCisgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdl
dFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ0cmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOworICAgIH0KICAgICBzdGQ6OnN0cmluZyBnZXREZWJ1Z0lu
Zm8oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9u
IHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6
c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gY29tcGlsZUltcGxNdGwoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3Rh
bmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGls
ZU9wdGlvbnMpOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1t
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1No
YWRlck10bC5tbQppbmRleCBmOTA5ZmI1MDkzODViYzhlY2IxODdiNTVmNTI3MGFlOWNhMmRmNmZj
Li5hZDAxZGJmNDVmYjhmNDc5MDRiZmRiMWQ0Yjg0Njg2NmZlYjk4OGE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVy
TXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9TaGFkZXJNdGwubW0KQEAgLTEwLDggKzEwLDEzIEBACiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgor
I2luY2x1ZGUgImxpYkFOR0xFL1dvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9EaXNwbGF5TXRsLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjAsMTAgKzI1LDEwMCBA
QCBTaGFkZXJNdGw6OlNoYWRlck10bChjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSA6IFNo
YWRlckltcGwoc3RhdGUpIHt9CiAKIFNoYWRlck10bDo6flNoYWRlck10bCgpIHt9CiAKK2NsYXNz
IFRyYW5zbGF0ZVRhc2sgOiBwdWJsaWMgYW5nbGU6OkNsb3N1cmUKK3sKKyAgcHVibGljOgorICAg
IFRyYW5zbGF0ZVRhc2soU2hIYW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMs
IGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UpCisgICAgICAgIDogbUhhbmRsZShoYW5kbGUpLCBt
T3B0aW9ucyhvcHRpb25zKSwgbVNvdXJjZShzb3VyY2UpLCBtUmVzdWx0KGZhbHNlKQorICAgIHt9
CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3Qg
Y2hhciAqc291cmNlID0gbVNvdXJjZS5jX3N0cigpOworICAgICAgICBtUmVzdWx0ICAgICAgICAg
ICAgPSBzaDo6Q29tcGlsZShtSGFuZGxlLCAmc291cmNlLCAxLCBtT3B0aW9ucyk7CisgICAgfQor
CisgICAgYm9vbCBnZXRSZXN1bHQoKSB7IHJldHVybiBtUmVzdWx0OyB9CisKKyAgICBTaEhhbmRs
ZSBnZXRIYW5kbGUoKSB7IHJldHVybiBtSGFuZGxlOyB9CisKKyAgcHJpdmF0ZToKKyAgICBTaEhh
bmRsZSBtSGFuZGxlOworICAgIFNoQ29tcGlsZU9wdGlvbnMgbU9wdGlvbnM7CisgICAgc3RkOjpz
dHJpbmcgbVNvdXJjZTsKKyAgICBib29sIG1SZXN1bHQ7Cit9OworCitjbGFzcyBNVExXYWl0YWJs
ZUNvbXBpbGVFdmVudEltcGwgZmluYWwgOiBwdWJsaWMgV2FpdGFibGVDb21waWxlRXZlbnQKK3sK
KyAgcHVibGljOgorICAgIE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbChTaGFkZXJNdGwgKnNo
YWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPGFu
Z2xlOjpXYWl0YWJsZUV2ZW50PiB3YWl0YWJsZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8VHJhbnNsYXRlVGFzaz4gdHJhbnNsYXRlVGFzaykK
KyAgICAgICAgOiBXYWl0YWJsZUNvbXBpbGVFdmVudCh3YWl0YWJsZUV2ZW50KSwgbVRyYW5zbGF0
ZVRhc2sodHJhbnNsYXRlVGFzayksIG1TaGFkZXIoc2hhZGVyKQorICAgIHt9CisKKyAgICBib29s
IGdldFJlc3VsdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1UcmFuc2xhdGVUYXNrLT5nZXRSZXN1bHQo
KTsgfQorCisgICAgYm9vbCBwb3N0VHJhbnNsYXRlKHN0ZDo6c3RyaW5nICppbmZvTG9nKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgICAgPSBzdGF0aWNf
Y2FzdDxzaDo6VFNoSGFuZGxlQmFzZSAqPihtVHJhbnNsYXRlVGFzay0+Z2V0SGFuZGxlKCkpOwor
ICAgICAgICBhdXRvIHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRv
ck1ldGFsRGlyZWN0KCk7CisgICAgICAgIGlmICh0cmFuc2xhdG9yTWV0YWxEaXJlY3QgIT0gbnVs
bHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29weSByZWZsZWN0aW9uIGZyb20gdHJh
bnNsYXRpb24uCisgICAgICAgICAgICBtU2hhZGVyLT50cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9u
ID0KKyAgICAgICAgICAgICAgICAqKHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+Z2V0VHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+
Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpLT5yZXNldCgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c2hhcmVkX3B0
cjxUcmFuc2xhdGVUYXNrPiBtVHJhbnNsYXRlVGFzazsKKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7
Cit9OworCitzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6
Y29tcGlsZUltcGxNdGwoCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgZ2w6
OlNoQ29tcGlsZXJJbnN0YW5jZSAqY29tcGlsZXJJbnN0YW5jZSwKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmc291cmNlLAorICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCit7Cisj
aWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKyAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9WQUxJREFURV9BU1Q7CisjZW5kaWYKKworICAgIGF1dG8gd29ya2VyVGhyZWFkUG9vbCA9IGNv
bnRleHQtPmdldFdvcmtlclRocmVhZFBvb2woKTsKKyAgICBhdXRvIHRyYW5zbGF0ZVRhc2sgPQor
ICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFuY2Ut
PmdldEhhbmRsZSgpLCBjb21waWxlT3B0aW9ucywgc291cmNlKTsKKworICAgIHJldHVybiBzdGQ6
Om1ha2Vfc2hhcmVkPE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbD4oCisgICAgICAgIHRoaXMs
IGFuZ2xlOjpXb3JrZXJUaHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJlYWRQb29s
LCB0cmFuc2xhdGVUYXNrKSwKKyAgICAgICAgdHJhbnNsYXRlVGFzayk7Cit9CisKIHN0ZDo6c2hh
cmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gU2hhZGVyTXRsOjpjb21waWxlKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5jZSAqY29tcGlsZXJJbnN0
YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykKIHsKKyAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIGlmIChnZXRTdGF0ZSgpLmdldFNo
YWRlclR5cGUoKSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisgICAgICAgICFjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERy
YXcuZW5hYmxlZCkKKyAgICB7CisgICAgICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAorICAg
ICAgICBzaDo6VFNoSGFuZGxlQmFzZSAqYmFzZSA9IHN0YXRpY19jYXN0PHNoOjpUU2hIYW5kbGVC
YXNlICo+KGNvbXBpbGVySW5zdGFuY2UtPmdldEhhbmRsZSgpKTsKKyAgICAgICAgYXV0byB0cmFu
c2xhdG9yTWV0YWxEaXJlY3QgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpOwor
ICAgICAgICBpZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ID09IG51bGxwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gdHJhbnNsYXRvck1ldGFsID0gc3RhdGljX2Nhc3Q8c2g6OlRyYW5z
bGF0b3JNZXRhbCAqPihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOworICAgICAgICAgICAgdHJhbnNs
YXRvck1ldGFsLT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2xhdG9yTWV0YWxEaXJlY3Qt
PmVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KICAgICBT
aENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zID0gU0hfSU5JVElBTElaRV9VTklOSVRJQUxJ
WkVEX0xPQ0FMUzsKIAogICAgIGJvb2wgaXNXZWJHTCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS53ZWJnbENvbXBhdGliaWxpdHk7CkBAIC0zMyw4ICsxMjgsMTEgQEAgc3RkOjpzaGFyZWRfcHRy
PFdhaXRhYmxlQ29tcGlsZUV2ZW50PiBTaGFkZXJNdGw6OmNvbXBpbGUoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnQKICAgICB9CiAKICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9QT0lOVF9T
SVpFOworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkKKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9GUkFH
X0RFUFRIOworI2VuZGlmCiAKLSAgICByZXR1cm4gY29tcGlsZUltcGwoY29udGV4dCwgY29tcGls
ZXJJbnN0YW5jZSwgbVN0YXRlLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlvbnMp
OworICAgIHJldHVybiBjb21waWxlSW1wbE10bChjb250ZXh0LCBjb21waWxlckluc3RhbmNlLCBn
ZXRTdGF0ZSgpLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlvbnMpOwogfQogCiBz
dGQ6OnN0cmluZyBTaGFkZXJNdGw6OmdldERlYnVnSW5mbygpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFj
ZU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1N1cmZhY2VNdGwuaAppbmRleCA5ZTg0Zjg4Zjc1NGQxMGUzYjY2YzIwMmNlMjM0ODk2YjJk
MTkxZDkwLi4wYWRjMzYwNjA4NmE5ZDg4ZGNjZTNiNGNmMDFlZDZkNjM5NTAwNjhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
U3VyZmFjZU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgKQEAgLTI0LDcgKzI0LDI3IEBAIG5hbWVzcGFjZSBy
eAogCiBjbGFzcyBEaXNwbGF5TXRsOwogCi1jbGFzcyBTdXJmYWNlTXRsIDogcHVibGljIFN1cmZh
Y2VJbXBsCitjbGFzcyBTdXJmYWNlTXRsUHJvdG9jb2wgOiBwdWJsaWMgU3VyZmFjZUltcGwKK3sK
KyAgcHVibGljOgorICAgIFN1cmZhY2VNdGxQcm90b2NvbChjb25zdCBlZ2w6OlN1cmZhY2VTdGF0
ZSAmc3RhdGUpIDogU3VyZmFjZUltcGwoc3RhdGUpIHt9CisgICAgdmlydHVhbCBpbnQgZ2V0U2Ft
cGxlcygpIGNvbnN0ICAgICAgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigp
IGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVu
ZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJ
bWFnZUluZGV4ICZpbWFnZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGUgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc1Jv
YnVzdFJlc291cmNlSW5pdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGFuZ2xlOjpSZXN1bHQg
ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
ID0gMDsKKyAgICB2aXJ0dWFsIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0
YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIGJvb2wgKm5ld0RyYXdhYmxlT3V0KSA9
IDA7CisgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9y
UmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworICAgIHZpcnR1YWwg
Y29uc3QgbXRsOjpUZXh0dXJlUmVmICYgZ2V0Q29sb3JUZXh0dXJlKCkgPSAwOworfTsKKworY2xh
c3MgU3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsUHJvdG9jb2wKIHsKICAgcHVibGljOgog
ICAgIFN1cmZhY2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKQEAgLTY3LDExICs4NywxMSBAQCBj
bGFzcyBTdXJmYWNlTXRsIDogcHVibGljIFN1cmZhY2VJbXBsCiAgICAgYW5nbGU6OlJlc3VsdCBp
bml0aWFsaXplQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5k
ZXgpIG92ZXJyaWRlOwogCi0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1
cmUoKSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CisgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVm
ICZnZXRDb2xvclRleHR1cmUoKSBvdmVycmlkZSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CiAg
ICAgY29uc3QgbXRsOjpGb3JtYXQgJmdldENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUNv
bG9yRm9ybWF0OyB9Ci0gICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtU2FtcGxl
czsgfQorICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVNhbXBs
ZXM7IH0KIAotICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3QgeyByZXR1cm4g
bVJvYnVzdFJlc291cmNlSW5pdDsgfQorICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQogCiAgICAgYW5n
bGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gYmluZGluZywKQEAgLTE0NCwxMyArMTY0LDE0IEBAIGNsYXNzIFdpbmRvd1N1cmZhY2VNdGwg
OiBwdWJsaWMgU3VyZmFjZU10bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBv
dmVycmlkZTsKIAorICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWlu
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1
bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
ICpuZXdEcmF3YWJsZU91dCAvKiogbnVsbGFibGUgKi8pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQgLyoqIG51bGxh
YmxlICovKSBvdmVycmlkZTsKIAogICAgIC8vIEVuc3VyZSB0aGUgdGhlIHRleHR1cmUgcmV0dXJu
ZWQgZnJvbSBnZXRDb2xvclRleHR1cmUoKSBpcyByZWFkeSBmb3IgZ2xSZWFkUGl4ZWxzKCkuIFRo
aXMKICAgICAvLyBpbXBsaWNpdGx5IGNhbGxzIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVk
KCkuCi0gICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhl
bHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwotCisgICAgYW5nbGU6OlJlc3VsdCBlbnN1
cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpIG92ZXJyaWRlOworICAgIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtUmV0YWluQnVmZmVyOyB9CiAgIHByaXZhdGU6CiAgICAgYW5nbGU6OlJlc3VsdCBz
d2FwSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBv
YnRhaW5OZXh0RHJhd2FibGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtMTY4LDYg
KzE4OSw4IEBAIGNsYXNzIFdpbmRvd1N1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZU10bAogICAg
IC8vIGV2ZW50LiBXZSBkb24ndCB1c2UgbU1ldGFsTGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5
IHNpbmNlIGl0IG1pZ2h0IGJlIGNoYW5nZWQgaW50ZXJuYWxseSBieQogICAgIC8vIG1ldGFsIHJ1
bnRpbWUuCiAgICAgQ0dTaXplIG1DdXJyZW50S25vd25EcmF3YWJsZVNpemU7CisKKyAgICBib29s
IG1SZXRhaW5CdWZmZXIgPSBmYWxzZTsKIH07CiAKIC8vIE9mZnNjcmVlbiBzdXJmYWNlLCBiYXNl
IGNsYXNzIG9mIFBCdWZmZXIsIElPU3VyZmFjZS4KQEAgLTIxMiwzNyArMjM1LDUgQEAgY2xhc3Mg
UEJ1ZmZlclN1cmZhY2VNdGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3VyZmFjZU10bAogICAgIHZvaWQg
c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7CiB9OwogCi0vLyBPZmZzY3Jl
ZW4gY3JlYXRlZCBmcm9tIElPU3VyZmFjZQotY2xhc3MgSU9TdXJmYWNlU3VyZmFjZU10bCA6IHB1
YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCi17Ci0gIHB1YmxpYzoKLSAgICBJT1N1cmZhY2VTdXJm
YWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBFR0xD
bGllbnRCdWZmZXIgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpB
dHRyaWJ1dGVNYXAgJmF0dHJpYnMpOwotICAgIH5JT1N1cmZhY2VTdXJmYWNlTXRsKCkgb3ZlcnJp
ZGU7Ci0KLSAgICBlZ2w6OkVycm9yIGJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKLSAg
ICBlZ2w6OkVycm9yIHJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
RUdMaW50IGJ1ZmZlcikgb3ZlcnJpZGU7Ci0KLSAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1l
bnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAm
aW1hZ2VJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7
Ci0KLSAgICBzdGF0aWMgYm9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1
ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOwotCi0gIHByaXZhdGU6Ci0g
ICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KTsKLQotICAgIElPU3VyZmFjZVJlZiBtSU9TdXJmYWNlOwotICAgIE5TVUlu
dGVnZXIgbUlPU3VyZmFjZVBsYW5lOwotICAgIGludCBtSU9TdXJmYWNlRm9ybWF0SWR4OwotfTsK
LQogfSAgLy8gbmFtZXNwYWNlIHJ4Ci0KICNlbmRpZiAvKiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRB
TF9TVVJGQUNFTVRMX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCmluZGV4
IDMwM2ZiMTY3NDk2ZTc4MDk1YTBkMWI0YmM5MjJjMWY2Y2Q4YmRjYWEuLjFiNGNkMTA4ZThmZjA0
OTZhN2VhNjYzNjZkNGNmNDkzNWM0YWUxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNl
TXRsLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVk
KEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCiAjICAgIGRlZmluZSBBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQgMAogI2Vsc2UKLSMgICAgZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1F
X0NBUFRVUkVfRU5BQkxFRCAxCisjICAgIGRlZmluZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
X0VOQUJMRUQgQU5HTEVfV0lUSF9NT0RFUk5fTUVUQUxfQVBJCiAjZW5kaWYKIAogbmFtZXNwYWNl
IHJ4CkBAIC0zMyw1NSArMzMsMTkgQEAgbmFtZXNwYWNlCiB7CiAKICNkZWZpbmUgQU5HTEVfVE9f
RUdMX1RSWShFWFBSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgaWYgKEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZSkpIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJh
ZFN1cmZhY2UoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxl
ICgwKQorZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpZiAoQU5HTEVfVU5MSUtFTFkoKEVYUFIpICE9IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKSkgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZh
Y2UoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKIAogY29uc3Rl
eHByIGFuZ2xlOjpGb3JtYXRJRCBrRGVmYXVsdEZyYW1lQnVmZmVyRGVwdGhGb3JtYXRJZCAgID0g
YW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7CiBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtE
ZWZhdWx0RnJhbWVCdWZmZXJTdGVuY2lsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OlM4X1VJ
TlQ7CiBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0aFN0
ZW5jaWxGb3JtYXRJZCA9CiAgICAgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDsK
IAotc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8KLXsKLSAgICBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQ7Ci0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc2l6ZV90IGNvbXBvbmVudEJ5dGVzOwotCi0gICAg
YW5nbGU6OkZvcm1hdElEIG5hdGl2ZUFuZ2xlRm9ybWF0SWQ7Ci19OwotCi0vLyBjbGFuZy1mb3Jt
YXQgb2ZmCi0vLyBOT1RFKGhxbGUpOiBTdXBwb3J0IFIxNl9VSU5UIG9uY2UgR0xFUzMgaXMgY29t
cGxldGUuCi1jb25zdGV4cHIgc3RkOjphcnJheTxJT1N1cmZhY2VGb3JtYXRJbmZvLCA4PiBrSU9T
dXJmYWNlRm9ybWF0cyA9IHt7Ci0gICAge0dMX1JFRCwgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICAgICAgIDEsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19LAotICAgIHtHTF9SRUQs
ICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAyLCBhbmdsZTo6Rm9ybWF0SUQ6
OlIxNl9VTk9STX0sCi0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgIDIsIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STX0sCi0gICAge0dMX1JHLCAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2
RzE2X1VOT1JNfSwKLSAgICB7R0xfUkdCLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCi0gICAge0dMX0JHUkFf
RVhULCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6
QjhHOFI4QThfVU5PUk19LAotICAgIHtHTF9SR0JBLCAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAg
ICAgICAgICAgICA4LCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkExNl9GTE9BVH0sCi0gICAg
e0dMX1JHQjEwX0EyLCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsIDQsIGFuZ2xlOjpG
b3JtYXRJRDo6QjEwRzEwUjEwQTJfVU5PUk19LAotfX07Ci0vLyBjbGFuZy1mb3JtYXQgb24KLQot
aW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihrSU9T
dXJmYWNlRm9ybWF0cy5zaXplKCkpOyArK2kpCi0gICAgewotICAgICAgICBjb25zdCBhdXRvICZm
b3JtYXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNbaV07Ci0gICAgICAgIGlmIChmb3JtYXRJbmZv
LmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVUZXh0dXJl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLApAQCAtMTI4LDYgKzkyLDE5IEBAIGJvb2wg
SXNGcmFtZUNhcHR1cmVFbmFibGVkKCkKICNlbmRpZgogfQogCitBTkdMRV9NVExfVU5VU0VECitz
dGQ6OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJB
TUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJuICIiOworI2Vsc2UKKyAgICBhdXRvIHZhciAg
ICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
X0ZJTEUiKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6ICIi
OworCisgICAgcmV0dXJuIGZpbGVQYXRoOworI2VuZGlmCit9CisKIEFOR0xFX01UTF9VTlVTRUQK
IHNpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKIHsKQEAgLTIwMiw2ICsxNzksMjEgQEAg
dm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLCBpZDxNVExD
b21tYW5kUXVldWU+IG1ldGFsQ21kUXUKICAgICB7CiAgICAgICAgIE1UTENhcHR1cmVEZXNjcmlw
dG9yICpjYXB0dXJlRGVzY3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGlu
aXRdOwogICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBt
ZXRhbERldmljZTsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAg
ICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworICAgICAgICBpZiAoZmlsZVBhdGggIT0gIiIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9
CisgICAgICAgICAgICAgICAgZmlsZVBhdGggKyBzdGQ6OnRvX3N0cmluZyhnRnJhbWVDYXB0dXJl
ZCAtIDEpICsgIi5ncHV0cmFjZSI7CisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0
aW5hdGlvbiA9IE1UTENhcHR1cmVEZXN0aW5hdGlvbkdQVVRyYWNlRG9jdW1lbnQ7CisgICAgICAg
ICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorICAgICAgICAgICAgICAgIFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm51bWJlcmVk
UGF0aC5jX3N0cigpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6ZmFs
c2VdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRl
YnVnZ2VkIGluc2lkZSBYY29kZQorICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGlu
YXRpb24gPSBNVExDYXB0dXJlRGVzdGluYXRpb25EZXZlbG9wZXJUb29sczsKKyAgICAgICAgfQog
CiAgICAgICAgIE5TRXJyb3IgKmVycm9yOwogICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBz
dGFydENhcHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3Jd
KQpAQCAtMjExLDE0ICsyMDMsMTUgQEAgdm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZp
Y2U+IG1ldGFsRGV2aWNlLCBpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsQ21kUXUKICAgICB9CiAg
ICAgZWxzZQogIyAgICBlbmRpZiAgLy8gX19NQUNfMTBfMTUKKyAgICAgICAgaWYgKEFOR0xFX0FQ
UExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzKSkKICAgICB7Ci0gICAgICAgIGlmIChG
cmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBbY2FwdHVy
ZU1hbmFnZXIgc3RhcnRDYXB0dXJlV2l0aERldmljZTptZXRhbERldmljZV07Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQorICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2Ny
aXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKyAgICAgICAgY2Fw
dHVyZURlc2NyaXB0b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisKKyAg
ICAgICAgTlNFcnJvciAqZXJyb3I7CisgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0
Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRoQ29t
bWFuZFF1ZXVlOm1ldGFsQ21kUXVldWVdOworICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8g
c3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CiAgICAgICAgIH0KICAgICB9CiAjZW5k
aWYgIC8vIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRApAQCAtMjQ1LDExICsyMzgs
MTAgQEAgdm9pZCBTdG9wRnJhbWVDYXB0dXJlKCkKIH0KIH0KIAotLy8gU3VyZmFjZU10bCBpbXBs
ZW1lbnRhdGlvbgogU3VyZmFjZU10bDo6U3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQot
ICAgIDogU3VyZmFjZUltcGwoc3RhdGUpCisgICAgOiBTdXJmYWNlTXRsUHJvdG9jb2woc3RhdGUp
CiB7CiAgICAgbVJvYnVzdFJlc291cmNlSW5pdCA9CiAgICAgICAgIGF0dHJpYnMuZ2V0KEVHTF9S
T0JVU1RfUkVTT1VSQ0VfSU5JVElBTElaQVRJT05fQU5HTEUsIEVHTF9GQUxTRSkgPT0gRUdMX1RS
VUU7CkBAIC02OTMsNiArNjg1LDEwIEBAIGFuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFjZU10bDo6
Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29uCiAgICAgcmV0
dXJuIFN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4dCwgYmluZGlu
ZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpOwogfQogCithbmdsZTo6UmVzdWx0IFdpbmRv
d1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5l
ZChjb250ZXh0LCBudWxscHRyKTsKK30KIGFuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFjZU10bDo6
ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0KQogewpAQCAtOTQzLDE1NyArOTM5LDUgQEAgdm9p
ZCBQQnVmZmVyU3VyZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKICAgICBt
U2l6ZS5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKLS8vIElPU3VyZmFjZVN1cmZhY2VNdGwgaW1wbGVt
ZW50YXRpb24uCi1JT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3Bs
YXlNdGwgKmRpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJp
YnMpCi0gICAgOiBPZmZzY3JlZW5TdXJmYWNlTXRsKGRpc3BsYXksIHN0YXRlLCBhdHRyaWJzKSwg
bUlPU3VyZmFjZSgoX19icmlkZ2UgSU9TdXJmYWNlUmVmKShidWZmZXIpKQotewotICAgIENGUmV0
YWluKG1JT1N1cmZhY2UpOwotCi0gICAgbUlPU3VyZmFjZVBsYW5lID0gc3RhdGljX2Nhc3Q8aW50
PihhdHRyaWJzLmdldChFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKSk7Ci0KLSAgICBFR0xBdHRy
aWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JN
QVRfQU5HTEUpOwotICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVH
TF9URVhUVVJFX1RZUEVfQU5HTEUpOwotICAgIG1JT1N1cmZhY2VGb3JtYXRJZHggPQotICAgICAg
ICBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoc3RhdGljX2Nhc3Q8R0xlbnVtPihpbnRlcm5hbEZv
cm1hdCksIHN0YXRpY19jYXN0PEdMZW51bT4odHlwZSkpOwotICAgIEFTU0VSVChtSU9TdXJmYWNl
Rm9ybWF0SWR4ID49IDApOwotCi0gICAgbUNvbG9yRm9ybWF0ID0KLSAgICAgICAgZGlzcGxheS0+
Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUlPU3VyZmFjZUZvcm1hdElkeF0ubmF0
aXZlQW5nbGVGb3JtYXRJZCk7Ci19Ci1JT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3Vy
ZmFjZU10bCgpCi17Ci0gICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0cikKLSAgICB7Ci0gICAg
ICAgIENGUmVsZWFzZShtSU9TdXJmYWNlKTsKLSAgICAgICAgbUlPU3VyZmFjZSA9IG51bGxwdHI7
Ci0gICAgfQotfQotCi1lZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFn
ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwotICAgIFN0YXJ0RnJh
bWVDYXB0dXJlKGNvbnRleHRNdGwpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBvZmZzY3JlZW4gdGV4
dHVyZSBpZiBuZWVkZWQ6Ci0gICAgQU5HTEVfVE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVD
cmVhdGVkKGNvbnRleHQpKTsKLQotICAgIHJldHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpiaW5k
VGV4SW1hZ2UoY29udGV4dCwgdGV4dHVyZSwgYnVmZmVyKTsKLX0KLQotZWdsOjpFcnJvciBJT1N1
cmZhY2VTdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIEVHTGludCBidWZmZXIpCi17Ci0gICAgZWdsOjpFcnJvciByZSA9IE9mZnNjcmVlblN1cmZh
Y2VNdGw6OnJlbGVhc2VUZXhJbWFnZShjb250ZXh0LCBidWZmZXIpOwotICAgIFN0b3BGcmFtZUNh
cHR1cmUoKTsKLSAgICByZXR1cm4gcmU7Ci19Ci0KLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3Vy
ZmFjZU10bDo6Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldCgKLSAgICBjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKLSAgICBHTGVudW0gYmluZGluZywKLSAgICBjb25zdCBnbDo6SW1hZ2VJbmRl
eCAmaW1hZ2VJbmRleCwKLSAgICBHTHNpemVpIHNhbXBsZXMsCi0gICAgRnJhbWVidWZmZXJBdHRh
Y2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSBvZmZzY3Jl
ZW4gdGV4dHVyZSBpZiBuZWVkZWQ6Ci0gICAgQU5HTEVfVFJZKGVuc3VyZUNvbG9yVGV4dHVyZUNy
ZWF0ZWQoY29udGV4dCkpOwotCi0gICAgcmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmdldEF0
dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBydE91dCk7Ci19Ci0KLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5z
dXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAg
ICBpZiAobUNvbG9yVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKLSAgICB9Ci0gICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0
SW1wbChjb250ZXh0KTsKLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQotICAgIHsKLSAgICAgICAg
YXV0byB0ZXhEZXNjID0KLSAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJl
MkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0Om1Db2xvckZvcm1hdC5tZXRhbEZvcm1hdAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGg6bVNpemUud2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Om1TaXplLmhlaWdodAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXBw
ZWQ6Tk9dOwotCi0gICAgICAgIHRleERlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNhZ2VTaGFkZXJS
ZWFkIHwgTVRMVGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OwotCi0gICAgICAgIGlkPE1UTFRleHR1
cmU+IHRleHR1cmUgPQotICAgICAgICAgICAgW2NvbnRleHRNdGwtPmdldE1ldGFsRGV2aWNlKCkg
bmV3VGV4dHVyZVdpdGhEZXNjcmlwdG9yOnRleERlc2MKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3VyZmFjZTptSU9TdXJmYWNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGxhbmU6bUlPU3VyZmFjZVBsYW5lXTsKLQotICAgICAgICBtQ29sb3JUZXh0dXJlID0gbXRs
OjpUZXh0dXJlOjpNYWtlRnJvbU1ldGFsKFt0ZXh0dXJlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0p
OwotICAgIH0KLQotICAgIG1Db2xvclJlbmRlclRhcmdldC5zZXQobUNvbG9yVGV4dHVyZSwgbXRs
OjprWmVyb05hdGl2ZU1pcExldmVsLCAwLCBtQ29sb3JGb3JtYXQpOwotCi0gICAgaWYgKGtJT1N1
cmZhY2VGb3JtYXRzW21JT1N1cmZhY2VGb3JtYXRJZHhdLmludGVybmFsRm9ybWF0ID09IEdMX1JH
QikKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZm9ybWF0IGhhcyBlbXVsYXRlZCBhbHBoYSBjaGFu
bmVsLiBJbml0aWFsaXplIHRleHR1cmUncyBhbHBoYSBjaGFubmVsIHRvIDEuMC4KLSAgICAgICAg
Y29uc3QgbXRsOjpGb3JtYXQgJnJnYkNsZWFyRm9ybWF0ID0KLSAgICAgICAgICAgIGNvbnRleHRN
dGwtPmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKLSAgICAg
ICAgQU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50c0dQVSgKLSAgICAgICAg
ICAgIGNvbnRleHQsIG1Db2xvclRleHR1cmUsIHJnYkNsZWFyRm9ybWF0LAotICAgICAgICAgICAg
bXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4
OjpNYWtlMkQoMCkpLAotICAgICAgICAgICAgTVRMQ29sb3JXcml0ZU1hc2tBbHBoYSkpOwotCi0g
ICAgICAgIC8vIERpc2FibGUgc3Vic2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4K
LSAgICAgICAgbUNvbG9yVGV4dHVyZS0+c2V0Q29sb3JXcml0YWJsZU1hc2soTVRMQ29sb3JXcml0
ZU1hc2tBbGwgJiAofk1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBJT1N1cmZh
Y2VTdXJmYWNlTXRsOjpWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6
QXR0cmlidXRlTWFwICZhdHRyaWJzKQotewotICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UgPSAo
X19icmlkZ2UgSU9TdXJmYWNlUmVmKShidWZmZXIpOwotCi0gICAgLy8gVGhlIHBsYW5lIG11c3Qg
ZXhpc3QgZm9yIHRoaXMgSU9TdXJmYWNlLiBJT1N1cmZhY2VHZXRQbGFuZUNvdW50IGNhbiByZXR1
cm4gMCBmb3Igbm9uLXBsYW5hcgotICAgIC8vIGlvU3VyZmFjZXMgYnV0IHdlIHdpbGwgdHJlYXQg
bm9uLXBsYW5hciBsaWtlIGl0IGlzIGEgc2luZ2xlIHBsYW5lLgotICAgIHNpemVfdCBzdXJmYWNl
UGxhbmVDb3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChp
b1N1cmZhY2UpKTsKLSAgICBFR0xBdHRyaWIgcGxhbmUgICAgICAgICAgPSBhdHRyaWJzLmdldChF
R0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKTsKLSAgICBpZiAocGxhbmUgPCAwIHx8IHN0YXRpY19j
YXN0PHNpemVfdD4ocGxhbmUpID49IHN1cmZhY2VQbGFuZUNvdW50KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoZSB3aWR0aCBoZWlnaHQgc3BlY2lmaWVk
IG11c3QgYmUgYXQgbGVhc3QgKDEsIDEpIGFuZCBhdCBtb3N0IHRoZSBwbGFuZSBzaXplCi0gICAg
RUdMQXR0cmliIHdpZHRoICA9IGF0dHJpYnMuZ2V0KEVHTF9XSURUSCk7Ci0gICAgRUdMQXR0cmli
IGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOwotICAgIGlmICh3aWR0aCA8PSAwIHx8
IHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKGlv
U3VyZmFjZSwgcGxhbmUpIHx8Ci0gICAgICAgIGhlaWdodCA8PSAwIHx8IHN0YXRpY19jYXN0PHNp
emVfdD4oaGVpZ2h0KSA+IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoaW9TdXJmYWNlLCBwbGFu
ZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRmluZCB0
aGlzIElPU3VyZmFjZSBmb3JtYXQKLSAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRy
aWJzLmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOwotICAgIEVHTEF0dHJp
YiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOwot
Ci0gICAgaW50IGZvcm1hdEluZGV4ID0KLSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+
KHR5cGUpKTsKLQotICAgIGlmIChmb3JtYXRJbmRleCA8IDApCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZm9ybWF0IG1hdGNoZXMg
dGhpcyBJT1N1cmZhY2UgcGxhbmUKLSAgICBpZiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50
T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSAhPQotICAgICAgICBrSU9TdXJmYWNlRm9ybWF0c1tm
b3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010
bC5oCmluZGV4IDYyZjk2ZWUyODVkYjJmM2FkOTYzNTRhZDAzMzc5OWIzMGM2ODAxNzcuLmY0YmNh
ZTkwZTMxYjk5MjBjNDhhMjk0MGYwYmU2NWFlZTgxNjNhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5
bmNNdGwuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDcg
KzMzLDcgQEAgbmFtZXNwYWNlIG10bAogCiAvLyBDb21tb24gY2xhc3MgdG8gYmUgdXNlZCBieSBi
b3RoIFN5bmNJbXBsIGFuZCBFR0xTeW5jSW1wbC4KIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9u
bHkgZGVjbGFyZWQgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKLSNpZiBBTkdMRV9NVExfRVZF
TlRfQVZBSUxBQkxFCisjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFD
XzEwXzE0KQogY2xhc3MgU3luYwogewogICBwdWJsaWM6CkBAIC01OSw3ICs1OSw3IEBAIGNsYXNz
IFN5bmMKICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+IG1DdjsK
ICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjptdXRleD4gbUxvY2s7CiB9OwotI2Vsc2UgICAvLyAj
aWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorI2Vsc2UgICAvLyAjaWYgZGVmaW5lZChfX0lQ
SE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQogY2xhc3MgU3luYwogewogICBwdWJs
aWM6CkBAIC05MCw3ICs5MCw3IEBAIGNsYXNzIFN5bmMKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OlN0b3A7CiAgICAgfQogfTsKLSNlbmRpZiAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9B
VkFJTEFCTEUKKyNlbmRpZiAgLy8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5l
ZChfX01BQ18xMF8xNCkKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIAogY2xhc3MgRmVuY2VOVk10bCA6
IHB1YmxpYyBGZW5jZU5WSW1wbApAQCAtOTgsOSArOTgsNyBAQCBjbGFzcyBGZW5jZU5WTXRsIDog
cHVibGljIEZlbmNlTlZJbXBsCiAgIHB1YmxpYzoKICAgICBGZW5jZU5WTXRsKCk7CiAgICAgfkZl
bmNlTlZNdGwoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgb25EZXN0cm95KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKLQogICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9uKSBvdmVycmlkZTsKICAgICBhbmds
ZTo6UmVzdWx0IHRlc3QoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMYm9vbGVhbiAqb3V0
RmluaXNoZWQpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluaXNoKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xT
eW5jTXRsIGZpbmFsIDogcHVibGljIEVHTFN5bmNJbXBsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCBmbGFncykgb3ZlcnJpZGU7CiAgICAgZWdsOjpFcnJvciBnZXRTdGF0dXMoY29u
c3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQgKm91dFN0YXR1cykgb3ZlcnJpZGU7CiAK
KyAgICBlZ2w6OkVycm9yIGR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNw
bGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgcHJpdmF0ZToKICAgICBt
dGw6OlN5bmMgbVN5bmM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQppbmRleCBkZmY4
MDAzMTIwYThhNmNlNDYyYjUwNmVmNjU3NTViNzI0ZjFmMjYyLi5mOGYzZWU2OTc5OGJiMWMyOGYz
ZTJkYTE5NTY5NjUyOWI3ZTgwYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAgbmFt
ZXNwYWNlIHJ4CiBuYW1lc3BhY2UgbXRsCiB7CiAvLyBTaGFyZWRFdmVudCBpcyBvbmx5IGF2YWls
YWJsZSBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KwotI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJ
TEFCTEUKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQp
CiBTeW5jOjpTeW5jKCkge30KIFN5bmM6On5TeW5jKCkge30KIApAQCAtODcsNyArODcsNyBAQCBh
bmdsZTo6UmVzdWx0IFN5bmM6OmNsaWVudFdhaXQoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAg
ICAvLyBvbkRlc3Ryb3koKSwgYnV0IHRoZSBjYWxsYmFjayBtaWdodCBzdGlsbCBub3QgYmUgZmly
ZWQgeWV0LgogICAgIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4gY3ZS
ZWYgPSBtQ3Y7CiAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IGxvY2tSZWYgICAgICAg
ICAgICA9IG1Mb2NrOwotCisjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQogICAgIEF1dG9P
YmpDT2JqPE1UTFNoYXJlZEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPQogICAgICAgICBj
b250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldE9yQ3JlYXRlU2hhcmVkRXZlbnRMaXN0ZW5lcigp
OwogICAgIFttTWV0YWxTaGFyZWRFdmVudC5nZXQoKSBub3RpZnlMaXN0ZW5lcjpldmVudExpc3Rl
bmVyCkBAIC0xMDYsNiArMTA2LDcgQEAgYW5nbGU6OlJlc3VsdCBTeW5jOjpjbGllbnRXYWl0KENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCiAKICAgICBBU1NFUlQobU1ldGFsU2hhcmVkRXZlbnQuZ2V0
KCkuc2lnbmFsZWRWYWx1ZSA+PSBtU2V0Q291bnRlcik7CiAgICAgKm91dFJlc3VsdCA9IEdMX0NP
TkRJVElPTl9TQVRJU0ZJRUQ7CisjZW5kaWYKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKIH0KQEAgLTExOCw3ICsxMTksNyBAQCBhbmdsZTo6UmVzdWx0IFN5bmM6OmdldFN0
YXR1cyhib29sICpzaWduYWxlZCkKICAgICAqc2lnbmFsZWQgPSBtTWV0YWxTaGFyZWRFdmVudC5n
ZXQoKS5zaWduYWxlZFZhbHVlID49IG1TZXRDb3VudGVyOwogICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKIH0KLSNlbmRpZiAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFC
TEUKKyNlbmRpZiAgLy8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIAogLy8gRmVuY2VOVk10bCBpbXBsZW1lbnRh
dGlvbgpAQCAtMTI4LDcgKzEyOSw4IEBAIEZlbmNlTlZNdGw6On5GZW5jZU5WTXRsKCkge30KIAog
dm9pZCBGZW5jZU5WTXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7
Ci0gICAgbVN5bmMub25EZXN0cm95KCk7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
bjsKIH0KIAogYW5nbGU6OlJlc3VsdCBGZW5jZU5WTXRsOjpzZXQoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsIEdMZW51bSBjb25kaXRpb24pCkBAIC0zMDcsNCArMzA5LDEwIEBAIGVnbDo6RXJy
b3IgRUdMU3luY010bDo6Z2V0U3RhdHVzKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdM
aW50ICpvdXRTdGF0dXMpCiAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwogfQogCitlZ2w6OkVy
cm9yIEVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNw
bGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3QKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiBlZ2w6OkVnbEJhZERpc3BsYXkoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0
dXJlTXRsLmgKaW5kZXggNWMyMTQxYmQwYmFjNzcwOTI1ZDdlOWY2MTE0OWFmNjVlYzc5MWJkYy4u
NWY0YjJkNDBmNzAzZTQ3ZWQ5MWZiOWI5ZDc4MGMzNTYyOWM0YjhlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVN
dGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVGV4dHVyZU10bC5oCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAiY29tbW9uL1Bh
Y2tlZEVudW1zLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvVGV4dHVyZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaCIKKyNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgotCiBuYW1lc3BhY2UgcngK
IHsKIApAQCAtMzIsNiArMzIsOCBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJ
bXBsCiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlTXRsKGNvbnN0IGdsOjpUZXh0dXJlU3RhdGUg
JnN0YXRlKTsKKyAgICAvLyBUZXh0dXJlICB2aWV3CisgICAgVGV4dHVyZU10bChjb25zdCBUZXh0
dXJlTXRsICZtdGwsIEdMZW51bSBmb3JtYXQpOwogICAgIH5UZXh0dXJlTXRsKCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
OwogCkBAIC0xOTMsNiArMTk1LDcgQEAgY2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJl
SW1wbAogICAgIEltYWdlRGVmaW5pdGlvbk10bCAmZ2V0SW1hZ2VEZWZpbml0aW9uKGNvbnN0IGds
OjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KTsKICAgICBSZW5kZXJUYXJnZXRNdGwgJmdldFJlbmRl
clRhcmdldChjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CiAgICAgYm9vbCBpc0lu
ZGV4V2l0aGluTWluTWF4TGV2ZWxzKGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBj
b25zdDsKKyAgICBtdGw6OlRleHR1cmVSZWYgJmdldEltcGxpY2l0TVNUZXh0dXJlKGNvbnN0IGds
OjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KTsKIAogICAgIC8vIElmIGxldmVscyA9IDAsIHRoaXMg
ZnVuY3Rpb24gd2lsbCBjcmVhdGUgZnVsbCBtaXBtYXBzIHRleHR1cmUuCiAgICAgYW5nbGU6OlJl
c3VsdCBzZXRTdG9yYWdlSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTMxMiw4
ICszMTUsOSBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiAgICAgYW5n
bGU6OlJlc3VsdCBnZW5lcmF0ZU1pcG1hcENQVShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7
CiAKICAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqbUJv
dW5kU3VyZmFjZSA9IG5pbDsKICAgICAvLyBUaGUgcmVhbCB0ZXh0dXJlIHVzZWQgYnkgTWV0YWwg
ZHJhdyBjYWxscy4KLSAgICBtdGw6OlRleHR1cmVSZWYgbU5hdGl2ZVRleHR1cmU7CisgICAgbXRs
OjpUZXh0dXJlUmVmIG1OYXRpdmVUZXh0dXJlICAgICAgICAgPSBuaWw7CiAgICAgaWQ8TVRMU2Ft
cGxlclN0YXRlPiBtTWV0YWxTYW1wbGVyU3RhdGUgPSBuaWw7CiAKICAgICAvLyBOdW1iZXIgb2Yg
c2xpY2VzCkBAIC0zMjMsMTggKzMyNywxNCBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRl
eHR1cmVJbXBsCiAgICAgLy8gT25jZSB0aGUgaW1hZ2VzIGFycmF5IGlzIGNvbXBsZXRlLCB0aGV5
IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gcmVhbCB0ZXh0dXJlIG9iamVjdC4KICAgICAvLyBOT1RF
OgogICAgIC8vICAtIFRoZSBzZWNvbmQgZGltZW5zaW9uIGlzIGluZGV4ZWQgYnkgY29uZmlndXJl
ZCBiYXNlIGxldmVsICsgYWN0dWFsIG5hdGl2ZSBsZXZlbAotICAgIC8vICAtIEZvciBDdWJlIG1h
cCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbVRleEltYWdlRGVmcyB0
YWJsZSwgb25lIGZvciBlYWNoCi0gICAgLy8gIGZhY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgQ3Vi
ZSBtYXAncyBpbWFnZSBpcyBkZWZpbmVkIHBlciBmYWNlICYgcGVyIGxldmVsLgorICAgIC8vICAt
IEZvciBDdWJlIG1hcCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbWFw
IHRhYmxlLCBvbmUgZm9yIGVhY2ggZmFjZS4gVGhpcyBpcworICAgIC8vICBiZWNhdXNlIHRoZSBD
dWJlIG1hcCdzIGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2ZWwuCiAgICAgLy8g
IC0gRm9yIG90aGVyIHRleHR1cmUgdHlwZXMsIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgZW50cnkg
aW4gdGhlIG1hcCB0YWJsZS4gQWxsIG90aGVyIHRleHR1cmVzCiAgICAgLy8gIGV4Y2VwdCBDdWJl
IG1hcCBoYXMgdGV4dHVyZSBpbWFnZSBkZWZpbmVkIHBlciBsZXZlbCAoYWxsIHNsaWNlcyBpbmNs
dWRlZCkuCisgICAgLy8gIC0gVGhlc2UgdGhyZWUgdmFyaWFibGVzJyBzZWNvbmQgZGltZW5zaW9u
IGFyZSBpbmRleGVkIGJ5IGltYWdlIGluZGV4IChiYXNlIGxldmVsIGluY2x1ZGVkKS4KICAgICBz
dGQ6Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PEltYWdlRGVmaW5pdGlvbk10bD4+IG1UZXhJ
bWFnZURlZnM7Ci0KLSAgICAvLyBSZW5kZXIgVGFyZ2V0IHBlciBzbGljZS9kZXB0aC9jdWJlIGZh
Y2UuCi0gICAgLy8gLSBGb3IgMkQgdGV4dHVyZTogVGhlcmUgd2lsbCBiZSBvbmUga2V5IGVudHJ5
IGluIHRoZSBtYXAuCi0gICAgLy8gLSBGb3IgQ3ViZSBtYXA6IFRoZXJlIHdpbGwgYmUgYXQgbW9z
dCA2IGtleSBlbnRyaWVzLgotICAgIC8vIC0gRm9yIGFycmF5LzNEIHRleHR1cmU6IFRoZXJlIHdp
bGwgYmUgYXQgbW9zdCBzbGljZXMvZGVwdGhzIG51bWJlciBvZiBrZXkgZW50cmllcy4KLSAgICAv
LyAtIFRoZSBzZWNvbmQgZGltZW5zaW9uIGlzIGluZGV4ZWQgYnkgY29uZmlndXJlZCBiYXNlIGxl
dmVsICsgYWN0dWFsIG5hdGl2ZSBsZXZlbAogICAgIHN0ZDo6bWFwPGludCwgZ2w6OlRleExldmVs
QXJyYXk8UmVuZGVyVGFyZ2V0TXRsPj4gbVBlckxheWVyUmVuZGVyVGFyZ2V0czsKKyAgICBzdGQ6
Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PG10bDo6VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1T
VGV4dHVyZXM7CiAKICAgICAvLyBNaXBtYXAgdmlld3MgYXJlIGluZGV4ZWQgYnkgbmF0aXZlIGxl
dmVsIChpZ25vcmVkIGJhc2UgbGV2ZWwpOgogICAgIG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBt
TmF0aXZlTGV2ZWxWaWV3czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KaW5kZXgg
NjIzYzEwNGM5ZThmNzBiOTM4MjRmYzQ5ZjQ1ZjliMjdmNjhkMjE2MC4uM2IxYzhhZjcxZWIzNThl
N2ZhZjhhMGNkNGM0YTBmNGE4ZjYyMGU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVN
dGwubW0KQEAgLTIwLDggKzIwLDggQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxh
eU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRs
LmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10
bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NhbXBsZXJNdGwuaCIKLSNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKQEAgLTUzNCw2ICs1MzQsMTAgQEAgdm9pZCBUZXh0
dXJlTXRsOjpyZWxlYXNlVGV4dHVyZShib29sIHJlbGVhc2VJbWFnZXMsIGJvb2wgcmVsZWFzZVRl
eHR1cmVPYmplY3RzT24KIAogYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjplbnN1cmVUZXh0dXJl
Q3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKKyAgICBpZiAobUJvdW5kU3Vy
ZmFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAg
ICB9CiAgICAgaWYgKG1OYXRpdmVUZXh0dXJlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtMTIwNywyNSArMTIxMSwxNSBAQCBhbmdsZTo6UmVzdWx0
IFRleHR1cmVNdGw6OnNldEJhc2VMZXZlbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1
aW50IGJhc2VMZQogCiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6OmJpbmRUZXhJbWFnZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQogewotICAgIHJl
bGVhc2VUZXh0dXJlKHRydWUpOwotCi0gICAgYXV0byBwQnVmZmVyICAgICA9IEdldEltcGxBczxP
ZmZzY3JlZW5TdXJmYWNlTXRsPihzdXJmYWNlKTsKLSAgICBtTmF0aXZlVGV4dHVyZSAgID0gcEJ1
ZmZlci0+Z2V0Q29sb3JUZXh0dXJlKCk7Ci0gICAgbUZvcm1hdCAgICAgICAgICA9IHBCdWZmZXIt
PmdldENvbG9yRm9ybWF0KCk7Ci0gICAgZ2w6OkV4dGVudHMgc2l6ZSA9IG1OYXRpdmVUZXh0dXJl
LT5zaXplQXQwKCk7Ci0gICAgbUlzUG93MiAgICAgICAgICA9IGdsOjppc1BvdzIoc2l6ZS53aWR0
aCkgJiYgZ2w6OmlzUG93MihzaXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsK
LSAgICBBTkdMRV9UUlkoZW5zdXJlU2FtcGxlclN0YXRlQ3JlYXRlZChjb250ZXh0KSk7Ci0KLSAg
ICAvLyBUZWxsIGNvbnRleHQgdG8gcmViaW5kIHRleHR1cmVzCi0gICAgQ29udGV4dE10bCAqY29u
dGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKLSAgICBjb250ZXh0TXRsLT5pbnZhbGlk
YXRlQ3VycmVudFRleHR1cmVzKCk7Ci0KKyAgICBJT1N1cmZhY2VTdXJmYWNlTXRsICpzdXJmYWNl
TXRsID0gKElPU3VyZmFjZVN1cmZhY2VNdGwgKiltdGw6OkdldEltcGwoc3VyZmFjZSk7CisgICAg
bUJvdW5kU3VyZmFjZSAgICAgICAgICAgICAgICAgICA9IHN1cmZhY2VNdGw7CiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6
OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICByZWxl
YXNlVGV4dHVyZSh0cnVlKTsKKyAgICBtQm91bmRTdXJmYWNlID0gbmlsOworCiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC0xMjM1LDYgKzEyMjksMTIgQEAgYW5n
bGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJU
YXJnZXQgKipydE91dCkKIHsKKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKyAgICB7CisgICAgICAg
IEFOR0xFX1RSWSgKKyAgICAgICAgICAgIG1Cb3VuZFN1cmZhY2UtPmdldEF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQoY29udGV4dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpKTsK
KyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0KICAgICBBTkdM
RV9UUlkoZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29udGV4dCkpOwogCiAgICAgQ29udGV4dE10bCAq
Y29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVk
YmFja010bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKaW5kZXggYWE0NWJmOTRlMDI0OWIxMTZhOGIx
NGZlZGRmY2VhM2Q2ZjI1ZTdjYi4uMjBhMmMyMGY5ZGI4YmVmYWQ4MzFlYWUwMGI5YTQ2MTExODcw
Y2UwMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRs
LmgKQEAgLTEwLDEyICsxMCwyMCBAQAogI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9U
UkFOU0ZPUk1GRUVEQkFDS01UTF9IXwogI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9U
UkFOU0ZPUk1GRUVEQkFDS01UTF9IXwogCisjaW5jbHVkZSA8TWV0YWwvTWV0YWwuaD4KICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9UcmFuc2Zvcm1GZWVkYmFja0ltcGwuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCiAKLW5hbWVzcGFjZSByeAordHlwZWRl
ZiB1aW50NjRfdCBNdGxEZXZpY2VTaXplOworCituYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFByb2dy
YW1TdGF0ZTsKK30gIC8vIG5hbWVzcGFjZSBnbAogCi1jbGFzcyBDb250ZXh0TXRsOworbmFtZXNw
YWNlIHJ4Cit7CiAKIGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsIDogcHVibGljIFRyYW5zZm9y
bUZlZWRiYWNrSW1wbAogewpAQCAtMzIsMTcgKzQwLDIzIEBAIGNsYXNzIFRyYW5zZm9ybUZlZWRi
YWNrTXRsIDogcHVibGljIFRyYW5zZm9ybUZlZWRiYWNrSW1wbAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZi
aW5kaW5nKSBvdmVycmlkZTsKIAotICAgIC8vIFBhcmFtczoKLSAgICAvLyAtIGRyYXdDYWxsRmly
c3RWZXJ0ZXggaXMgZmlyc3QgdmVydGV4IHVzZWQgYnkgZ2xEcmF3QXJyYXlzKi4gVGhpcyBpcyBp
bXBvcnRhbnQgYmVjYXVzZQotICAgIC8vIGdsX1ZlcnRleEluZGV4IGlzIHN0YXJ0aW5nIGZyb20g
dGhpcy4KLSAgICAvLyAtIHNraXBwZWRWZXJ0aWNlcyBpcyBudW1iZXIgb2Ygc2tpcHBlZCB2ZXJ0
aWNlcyAodXNlZnVsIGZvciBtdWx0aXBsZSBtZXRhbCBkcmF3cyBwZXIgR0wgZHJhdwotICAgIC8v
IGNhbGwpLgotICAgIGFuZ2xlOjpSZXN1bHQgZ2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpj
b250ZXh0TXRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3
Q2FsbEZpcnN0VmVydGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBza2lwcGVkVmVydGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgKm9mZnNldHNPdXQpOworICAgIHZvaWQgZ2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0
TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2Fs
bEZpcnN0VmVydGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRz
T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0c1NpemUpIGNvbnN0
OworCisgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10
bCAqPiAmZ2V0QnVmZmVySGFuZGxlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbUJ1
ZmZlckhhbmRsZXM7CisgICAgfQogCiAgIHByaXZhdGU6CisgICAgZ2w6OlRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiBtQnVmZmVySGFuZGxlczsKKyAgICBnbDo6VHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlck9mZnNldHM7
CisgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10bERldmljZVNpemU+IG1C
dWZmZXJTaXplczsKKworICAgIC8vIEFsaWduZWQgb2Zmc2V0IGZvciBlbXVsYXRpb24uIENvdWxk
IGJlIHNtYWxsZXIgdGhhbiBvZmZzZXQuCisgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
c0FycmF5PE10bERldmljZVNpemU+IG1BbGlnbmVkQnVmZmVyT2Zmc2V0czsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRi
YWNrTXRsLm1tCmluZGV4IGQ5NDBjM2Q1NmExNGJkYTM2NDEwY2RhNmJhZjk2OGMxZGQ3NTBiNjUu
LmRlN2E5MDkzNTdiNjkyNGY5ZDBlYjViYzAyZDIyN2UyZjYzNDIwNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zv
cm1GZWVkYmFja010bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KQEAgLTgsMTggKzgsMjcg
QEAKIC8vCiAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVk
YmFja010bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5o
IgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1vbi5oIgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvQ29udGV4dC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL1F1ZXJ5LmgiCi0jaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgotI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpUcmFuc2Zvcm1G
ZWVkYmFja010bChjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tTdGF0ZSAmc3RhdGUpCi0gICAg
OiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwoc3RhdGUpCisgICAgOiBUcmFuc2Zvcm1GZWVkYmFja0lt
cGwoc3RhdGUpLAorICAgICAgbUJ1ZmZlckhhbmRsZXN7fSwKKyAgICAgIG1CdWZmZXJPZmZzZXRz
e30sCisgICAgICBtQnVmZmVyU2l6ZXN7fSwKKyAgICAgIG1BbGlnbmVkQnVmZmVyT2Zmc2V0c3t9
CiB7fQogCiBUcmFuc2Zvcm1GZWVkYmFja010bDo6flRyYW5zZm9ybUZlZWRiYWNrTXRsKCkge30K
QEAgLTI3LDQwICszNiw3OSBAQCBUcmFuc2Zvcm1GZWVkYmFja010bDo6flRyYW5zZm9ybUZlZWRi
YWNrTXRsKCkge30KIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSkKIHsKLSAgICBtdGw6
OkdldEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhp
cyk7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsK
KyAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIG1zbCBjb21waWxlcgorICAgIGlm
ICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zv
cm1GZWVkYmFjay5lbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OlN0b3A7CisgICAgfQogCi0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdl
dFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoZXhlY3V0YWJsZSk7
CisgICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50ID0gZXhlY3V0YWJsZS0+Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudCgpOworCisgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBi
dWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgIHsKKyAgICAg
ICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nID0g
bVN0YXRlLmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworICAgICAgICBBU1NFUlQoYmlu
ZGluZy5nZXQoKSk7CisKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldElt
cGwoYmluZGluZy5nZXQoKSk7CisKKyAgICAgICAgYXNzZXJ0KGJ1ZmZlck10bCk7CisgICAgICAg
IG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRpbmcuZ2V0T2Zmc2V0KCk7CisgICAg
ICAgIG1CdWZmZXJTaXplc1tidWZmZXJJbmRleF0gICA9IGdsOjpHZXRCb3VuZEJ1ZmZlckF2YWls
YWJsZVNpemUoYmluZGluZyk7CisgICAgICAgIG1CdWZmZXJIYW5kbGVzW2J1ZmZlckluZGV4XSA9
IGJ1ZmZlck10bDsKKworICAgICAgICBBU1NFUlQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKTsKKyAgICAgICAg
Y29uc3QgTXRsRGV2aWNlU2l6ZSBvZmZzZXRBbGlnbm1lbnQgPSBtdGw6OmtVbmlmb3JtQnVmZmVy
U2V0dGluZ09mZnNldE1pbkFsaWdubWVudDsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUn
cyBubyBwb3NzaWJsZSB1bmRlci9vdmVyZmxvdyB3aXRoIGJpbmRpbmcgc2l6ZS4KKyAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoTXRsRGV2aWNlU2l6ZSkgPj0gc2l6ZW9mKGJpbmRpbmcuZ2V0
U2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiTXRsRGV2aWNlU2l6ZSB0b28gc21hbGwi
KTsKKworICAgICAgICAvLyBTZXQgdGhlIG9mZnNldCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0
aGUgcmVxdWVzdGVkIG9mZnNldCB3aGlsZSByZW1haW5pbmcgYWxpZ25lZC4KKyAgICAgICAgbUFs
aWduZWRCdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9CisgICAgICAgICAgICAobUJ1ZmZlck9m
ZnNldHNbYnVmZmVySW5kZXhdIC8gb2Zmc2V0QWxpZ25tZW50KSAqIG9mZnNldEFsaWdubWVudDsK
KyAgICB9CisKKyAgICByZXR1cm4gY29udGV4dE10bC0+b25CZWdpblRyYW5zZm9ybUZlZWRiYWNr
KHhmYkJ1ZmZlckNvdW50LCBtQnVmZmVySGFuZGxlcyk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVHJh
bnNmb3JtRmVlZGJhY2tNdGw6OmVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8v
IE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisgICAgaWYgKCFjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSdzIGFuIGFjdGl2ZSB0cmFuc2Zvcm0gZmVlZGJhY2sg
cXVlcnksIGFjY3VtdWxhdGUgdGhlIHByaW1pdGl2ZXMgZHJhd24uCiAgICAgY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKICAgICBnbDo6UXVlcnkgKnRyYW5z
Zm9ybUZlZWRiYWNrUXVlcnkgPQogICAgICAgICBnbFN0YXRlLmdldEFjdGl2ZVF1ZXJ5KGdsOjpR
dWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4pOworCiAgICAgaWYg
KHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkpCiAgICAgewotICAgICAgICBtdGw6OkdldEltcGwodHJh
bnNmb3JtRmVlZGJhY2tRdWVyeSktPm9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29udGV4dCk7Cisg
ICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChtU3RhdGUuZ2V0UHJpbWl0aXZlc0RyYXduKCkpOwogICAgIH0KLQotICAgIG10
bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQs
IHRoaXMpOwotCisgICAgY29udGV4dE10bC0+b25FbmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBUcmFu
c2Zvcm1GZWVkYmFja010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0g
ICAgLy8gV2hlbiBYRkIgaXMgcGF1c2VkLCBPcGVuR0wgYWxsb3dzIFhGQiBidWZmZXJzIHRvIGJl
IGJvdW5kIGZvciBvdGhlciBwdXJwb3Nlcy4gV2UgbmVlZCB0byBjYWxsCi0gICAgLy8gb25UcmFu
c2Zvcm1GZWVkYmFja0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgotICAgIG10bDo6R2V0SW1w
bChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOwot
Ci0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgcmV0dXJuIGNvbnRleHRNdGwt
Pm9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpyZXN1bWUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAg
bXRsOjpHZXRJbXBsKGNvbnRleHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKGNvbnRleHQs
IHRoaXMpOwotCi0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbChjb250ZXh0
KTsKKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBjb250ZXh0
TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKGV4ZWN1
dGFibGUpOworICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFibGUtPmdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKyAgICByZXR1cm4gY29udGV4dE10bC0+b25CZWdp
blRyYW5zZm9ybUZlZWRiYWNrKHhmYkJ1ZmZlckNvdW50LCBtQnVmZmVySGFuZGxlcyk7CiB9CiAK
IGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVkQnVmZmVyKApA
QCAtNjgsMTcgKzExNiwyMCBAQCBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpi
aW5kSW5kZXhlZEJ1ZmZlcigKICAgICBzaXplX3QgaW5kZXgsCiAgICAgY29uc3QgZ2w6Ok9mZnNl
dEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nKQogewotICAgIC8vIERvIG5vdGhp
bmcgZm9yIG5vdworICAgIFVOSU1QTEVNRU5URUQoKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6
Z2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0
VmVydGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBza2lwcGVkVmVydGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKm9mZnNldHNPdXQpCit2b2lkIFRy
YW5zZm9ybUZlZWRiYWNrTXRsOjpnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRy
YXdDYWxsRmlyc3RWZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgKm9mZnNldHNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3QKIHsKLSAgICBpbnQ2NF90
IHZlcnRpY2VzRHJhd24gPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihtU3RhdGUuZ2V0VmVydGljZXNE
cmF3bigpKSArIHNraXBwZWRWZXJ0aWNlczsKKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3Bs
YXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR0xzaXplaXB0ciB2ZXJ0aWNlc0RyYXduID0gbVN0YXRlLmdl
dFZlcnRpY2VzRHJhd24oKTsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxHTHNpemVpPiAmYnVmZmVy
U3RyaWRlcyA9CiAgICAgICAgIG1TdGF0ZS5nZXRCb3VuZFByb2dyYW0oKS0+Z2V0VHJhbnNmb3Jt
RmVlZGJhY2tTdHJpZGVzKCk7CiAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVj
dXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOwpA
QCAtODcsMjcgKzEzOCwyNSBAQCBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpn
ZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAKICAgICBBU1NFUlQoeGZi
QnVmZmVyQ291bnQgPiAwKTsKIAorICAgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0
aGUgb2Zmc2V0cyBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgVGhlIG1heGltdW0gcG9zc2libGUK
KyAgICAvLyBudW1iZXIgb2Ygb3V0cHV0cyBpcyBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJTLgorICAgIEFTU0VSVChvZmZzZXRzU2l6ZSA+PSB4ZmJCdWZm
ZXJDb3VudCk7CisKICAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4
IDwgeGZiQnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCiAgICAgewotICAgICAgICBjb25zdCBn
bDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJ1ZmZlckJpbmRpbmcgPQotICAg
ICAgICAgICAgbVN0YXRlLmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOwotCi0gICAgICAg
IEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwotCi0gICAgICAg
IC8vIE9mZnNldCB0aGUgZ2xfVmVydGV4SW5kZXggYnkgZHJhd0NhbGxGaXJzdFZlcnRleAorICAg
ICAgICBpbnQ2NF90IG9mZnNldEZyb21EZXNjcmlwdG9yID0KKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDY0X3Q+KG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAtIG1BbGlnbmVkQnVmZmVy
T2Zmc2V0c1tidWZmZXJJbmRleF0pOwogICAgICAgICBpbnQ2NF90IGRyYXdDYWxsVmVydGV4T2Zm
c2V0ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4odmVydGljZXNEcmF3bikgLSBkcmF3Q2FsbEZpcnN0
VmVydGV4OwogCiAgICAgICAgIGludDY0X3Qgd3JpdGVPZmZzZXQgPQotICAgICAgICAgICAgKGJ1
ZmZlckJpbmRpbmcuZ2V0T2Zmc2V0KCkgKyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0
cmlkZXNbYnVmZmVySW5kZXhdKSAvCisgICAgICAgICAgICAob2Zmc2V0RnJvbURlc2NyaXB0b3Ig
KyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNbYnVmZmVySW5kZXhdKSAvCiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihzaXplb2YodWludDMyX3QpKTsKIAogICAg
ICAgICBvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHdyaXRl
T2Zmc2V0KTsKIAotICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCi0gICAgICAgIEFOR0xF
X0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIG9mZnNldHNPdXRbYnVmZmVySW5kZXhdID09IHdy
aXRlT2Zmc2V0KTsKKyAgICAgICAgLy8gQXNzZXJ0IG9uIG92ZXJmbG93LiAgRm9yIG5vdywgc3Vw
cG9ydCB0cmFuc2Zvcm0gZmVlZGJhY2sgdXAgdG8gMkdCLgorICAgICAgICBBU1NFUlQob2Zmc2V0
c091dFtidWZmZXJJbmRleF0gPT0gd3JpdGVPZmZzZXQpOwogICAgIH0KLQotICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
VmVydGV4QXJyYXlNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCmluZGV4IGMyZmI4NDZkNDFkOTQxMmEwMGY4
N2EzNzA4M2M1NWFkYmFjNDFkZWUuLmZlNmI1ZjdhOWU5MDZmMTk4NzkzZWFhY2Q0NzQ3Mjc4MWUy
NGNiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCkBAIC00Myw4
ICs0Myw5IEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2Vz
KTsKIAogICAgIC8vIHZlcnRleERlc2NDaGFuZ2VkIGlzIGJvdGggaW5wdXQgYW5kIG91dHB1dCwg
dGhlIGlucHV0IHZhbHVlIGlmIGlzIHRydWUsIHdpbGwgZm9yY2UgbmV3Ci0gICAgLy8gbXRsOjpW
ZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBPdGhlcndpc2UsIGl0
IGlzIG9ubHkgcmV0dXJuZWQgd2hlbiB0aGUKLSAgICAvLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkK
KyAgICAvLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQu
IFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhY3RpdmUgc2hhZGVyCisgICAgLy8gcHJvZ3Jh
bSBpcyBjaGFuZ2VkLgorICAgIC8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVu
IHRoZSB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkuCiAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFuZ2VkLApAQCAtNTIsMTEgKzUzLDI0IEBA
IGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAogCiAgICAgYW5n
bGU6OlJlc3VsdCBnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5k
ZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1v
ZGUgcHJpbWl0aXZlTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBpbmRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqc291cmNlUG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJDb3Vu
dE91dCk7CisKKyAgICAvLyBVc2UgdG8gZW11bGF0ZSBpbnN0YW5jZWQgZHJhdyBmb3IgaW5zdGFu
Y2UgPGluc3RhbmNlSWQ+LgorICAgIC8vIFRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgZm9yIGVt
dWxhdGVkIGluc3RhbmNlIGRyYXcgaXM6CisgICAgLy8gLSBzZXR1cERyYXcoKQorICAgIC8vIC0g
ZHJhdy4KKyAgICAvLyAtIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKDEpCisgICAgLy8gLSBkcmF3
LgorICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAobikKKyAgICAvLyAtIGRyYXcuCisg
ICAgLy8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcCgwKQorICAgIHZvaWQgZW11bGF0ZUluc3Rh
bmNlRHJhd1N0ZXAobXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwgdWludDMy
X3QgaW5zdGFuY2VJZCk7CiAKICAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwg
KmNvbnRleHQpOwpAQCAtNzIsMTUgKzg2LDE5IEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVi
bGljIFZlcnRleEFycmF5SW1wbAogCiAgICAgYW5nbGU6OlJlc3VsdCBjb252ZXJ0SW5kZXhCdWZm
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJP
ZmZzZXRPdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aWR4QnVmZmVyT2Zmc2V0T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqaW5kZXhCdWZmZXJDb3VudE91dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBzdHJlYW1J
bmRleEJ1ZmZlckZyb21DbGllbnQoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRz
VHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQ
b2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10
bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zm
c2V0T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCAqaWR4QnVmZmVyQ291bnRPdXQpOwogCiAgICAgYW5nbGU6OlJlc3VsdCBjb252ZXJ0SW5k
ZXhCdWZmZXJHUFUoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUs
CkBAIC0xMTcsNyArMTM1LDIwIEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRl
eEFycmF5SW1wbAogICAgIGdsOjpBdHRyaWJBcnJheTxCdWZmZXJIb2xkZXJNdGwgKj4gbUN1cnJl
bnRBcnJheUJ1ZmZlcnM7CiAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBsZVdlYWtCdWZmZXJIb2xk
ZXJNdGw+IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CiAgICAgZ2w6OkF0dHJpYkFycmF5
PHNpemVfdD4gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHM7CisKKyAgICAvLyBTaXplIHRvIGJl
IHVwbG9hZGVkIGFzIGlubGluZSBjb25zdGFudCBkYXRhLiBVc2VkIGZvciBjbGllbnQgdmVydGV4
IGF0dHJpYnV0ZSdzIGRhdGEgdGhhdAorICAgIC8vIGlzIHNtYWxsIGVub3VnaCB0aGF0IHdlIGNh
biBzZW5kIGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRhIGluc3RlYWQgb2Ygc3RyZWFt
aW5nCisgICAgLy8gdGhyb3VnaCBhIGJ1ZmZlci4KKyAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzOworICAgIC8vIEFycmF5IG9mIGhvc3QgYnVm
ZmVycyBzdG9yaW5nIGNvbnZlcnRlZCBkYXRhIGZvciBjbGllbnQgYXR0cmlidXRlcyB0aGF0IGFy
ZSBzbWFsbCBlbm91Z2guCisgICAgZ2w6OkF0dHJpYkFycmF5PGFuZ2xlOjpNZW1vcnlCdWZmZXI+
IG1Db252ZXJ0ZWRDbGllbnRTbWFsbEFycmF5czsKKyAgICBnbDo6QXR0cmliQXJyYXk8Y29uc3Qg
dWludDhfdCAqPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzOworICAgIC8vIE1heCBz
aXplIG9mIGlubGluZSBjb25zdGFudCBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNsaWVudCB2
ZXJ0ZXggYXR0cmlidXRlLgorICAgIHNpemVfdCBtSW5saW5lRGF0YU1heFNpemU7CisKKyAgICAv
LyBTdHJpZGUgcGVyIHZlcnRleCBhdHRyaWJ1dGUKICAgICBnbDo6QXR0cmliQXJyYXk8R0x1aW50
PiBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlczsKKyAgICAvLyBGb3JtYXQgcGVyIHZlcnRleCBh
dHRyaWJ1dGUKICAgICBnbDo6QXR0cmliQXJyYXk8Y29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgKj4g
bUN1cnJlbnRBcnJheUJ1ZmZlckZvcm1hdHM7CiAKICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1h
dCAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKQEAgLTEyNyw2ICsxNTgsOCBAQCBjbGFzcyBW
ZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKICAgICBtdGw6OkJ1ZmZlclBv
b2wgbUR5bmFtaWNWZXJ0ZXhEYXRhOwogICAgIG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY0luZGV4
RGF0YTsKIAorICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBtRW11bGF0ZWRJbnN0YW5jZUF0dHJp
YnM7CisKICAgICBib29sIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsKIH07CiB9ICAvLyBuYW1l
c3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQppbmRleCBj
ZDk2MWMxODE5ZDhhYjc3MzFjYmJkYTJmMDU1ZWU5NGFmYjJhN2I3Li4wMjE5NWQ4MjY5ODJhNTkx
ZTQ4NzljNGQ3NDkyNjZhZDMzNjdmN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tCkBAIC04LDYgKzgsOSBAQAogLy8KIAogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgiCisKKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRp
b25hbHMuaD4KKwogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5o
IgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCkBAIC03NiwxNSArNzks
MTUgQEAgYW5nbGU6OlJlc3VsdCBTdHJlYW1JbmRleERhdGEoQ29udGV4dE10bCAqY29udGV4dE10
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNvdXJjZVBv
aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSBpbmRleFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhD
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByaW1pdGl2ZVJlc3RhcnRF
bmFibGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1
ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnVmZmVyT2Zm
c2V0T3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpidWZmZXJPZmZz
ZXRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4Q291bnRP
dXQpCiB7CiAgICAgZHluYW1pY0J1ZmZlci0+cmVsZWFzZUluRmxpZ2h0QnVmZmVycyhjb250ZXh0
TXRsKTsKLQogICAgIGNvbnN0IHNpemVfdCBhbW91bnQgPSBHZXRJbmRleENvbnZlcnRlZEJ1ZmZl
clNpemUoaW5kZXhUeXBlLCBpbmRleENvdW50KTsKICAgICBHTHVieXRlICpkc3QgICAgICAgID0g
bnVsbHB0cjsKLQogICAgIEFOR0xFX1RSWSgKICAgICAgICAgZHluYW1pY0J1ZmZlci0+YWxsb2Nh
dGUoY29udGV4dE10bCwgYW1vdW50LCAmZHN0LCBidWZmZXJPdXQsIGJ1ZmZlck9mZnNldE91dCwg
bnVsbHB0cikpOwogCkBAIC0xMjEsNiArMTI0LDcgQEAgYW5nbGU6OlJlc3VsdCBTdHJlYW1JbmRl
eERhdGEoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICB7CiAgICAgICAgIG1lbWNweShkc3Qs
IHNvdXJjZVBvaW50ZXIsIGFtb3VudCk7CiAgICAgfQorICAgICppbmRleENvdW50T3V0ID0gaW5k
ZXhDb3VudDsKICAgICBBTkdMRV9UUlkoZHluYW1pY0J1ZmZlci0+Y29tbWl0KGNvbnRleHRNdGwp
KTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTIwOCw2ICsyMTIs
MzAgQEAgdm9pZCBWZXJ0ZXhBcnJheU10bDo6cmVzZXQoQ29udGV4dE10bCAqY29udGV4dCkKICAg
ICAgICAgZm9ybWF0ID0gJm1EZWZhdWx0RmxvYXRWZXJ0ZXhGb3JtYXQ7CiAgICAgfQogCisgICAg
Zm9yIChzaXplX3QgJmlubGluZURhdGFTaXplIDogbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXpl
cykKKyAgICB7CisgICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKyAgICB9CisKKyAgICBmb3Ig
KGFuZ2xlOjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5IDogbUNvbnZlcnRlZENs
aWVudFNtYWxsQXJyYXlzKQorICAgIHsKKyAgICAgICAgY29udmVydGVkQ2xpZW50QXJyYXkuY2xl
YXIoKTsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IHVpbnQ4X3QgKiZjbGllbnRQb2ludGVyIDog
bUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVycykKKyAgICB7CisgICAgICAgIGNsaWVudFBv
aW50ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5nZXREaXNwbGF5KCkt
PmdldEZlYXR1cmVzKCkuYWxsb3dJbmxpbmVDb25zdFZlcnRleERhdGEuZW5hYmxlZCkKKyAgICB7
CisgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9IG10bDo6a0lubGluZUNvbnN0RGF0YU1heFNp
emU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9
IDA7CisgICAgfQorCiAgICAgbVZlcnRleEFycmF5RGlydHkgPSB0cnVlOwogfQogCkBAIC0zMTUs
MjIgKzM0MywyOCBAQCBBTkdMRV9JTkxJTkUgdm9pZCBWZXJ0ZXhBcnJheU10bDo6Z2V0VmVydGV4
QXR0cmliRm9ybWF0QW5kQXJyYXlTaXplKGNvbnN0IHNoOjpTaAogfQogCiAvLyB2ZXJ0ZXhEZXNj
Q2hhbmdlZCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1dCB2YWx1ZSBpZiBpcyB0
cnVlLCB3aWxsIGZvcmNlIG5ldwotLy8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZp
YSB2ZXJ0ZXhEZXNjT3V0LiBPdGhlcndpc2UsIGl0IGlzIG9ubHkgcmV0dXJuZWQgd2hlbiB0aGUK
LS8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorLy8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVy
bmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZl
IHNoYWRlcgorLy8gcHJvZ3JhbSBpcyBjaGFuZ2VkLgorLy8gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5
IHJldHVybmVkIHdoZW4gdGhlIHZlcnRleCBhcnJheSBpcyBkaXJ0eS4KIGFuZ2xlOjpSZXN1bHQg
VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXRsOjpWZXJ0ZXhEZXNjICp2ZXJ0ZXhEZXNjT3V0KQogeworICAgIC8v
IE5PVEUoaHFsZSk6IGNvbnNpZGVyIG9ubHkgdXBkYXRpbmcgZGlydHkgYXR0cmlidXRlcwogICAg
IGJvb2wgZGlydHkgPSBtVmVydGV4QXJyYXlEaXJ0eSB8fCAqdmVydGV4RGVzY0NoYW5nZWQ7CiAK
ICAgICBpZiAoZGlydHkpCiAgICAgeworICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0g
bXRsOjpHZXRJbXBsKGdsQ29udGV4dCk7CisKICAgICAgICAgbVZlcnRleEFycmF5RGlydHkgPSBm
YWxzZTsKKyAgICAgICAgbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzLmNsZWFyKCk7CiAKLSAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlID0gZ2xDb250ZXh0LT5nZXRT
dGF0ZSgpLmdldFByb2dyYW0oKS0+Z2V0U3RhdGUoKTsKKyAgICAgICAgY29uc3QgZ2w6OlByb2dy
YW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dy
YW1FeGVjdXRhYmxlKCk7CiAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJvZ3Jh
bUFjdGl2ZUF0dHJpYnNNYXNrID0KLSAgICAgICAgICAgIGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5n
ZXRQcm9ncmFtKCktPmdldEV4ZWN1dGFibGUoKS5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbnNNYXNr
KCk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbnNNYXNr
KCk7CisgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29u
dGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CiAKICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEF0dHJpYnV0ZT4gJmF0dHJpYnMgPSBtU3RhdGUuZ2V0
VmVydGV4QXR0cmlidXRlcygpOwogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4
QmluZGluZz4gJmJpbmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOwpAQCAtMzYw
LDggKzM5NCw3IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJp
bmRpbmcgJmJpbmRpbmcgPSBiaW5kaW5nc1thdHRyaWIuYmluZGluZ0luZGV4XTsKIAogICAgICAg
ICAgICAgYm9vbCBhdHRyaWJFbmFibGVkID0gYXR0cmliLmVuYWJsZWQ7Ci0gICAgICAgICAgICBp
ZiAoYXR0cmliRW5hYmxlZCAmJgotICAgICAgICAgICAgICAgICghbUN1cnJlbnRBcnJheUJ1ZmZl
cnNbdl0gfHwgIW1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVmZmVyKCkpKQor
ICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYgIW1DdXJyZW50QXJyYXlCdWZmZXJzW3Zd
ICYmICFtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW3ZdKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIC8vIERpc2FibGUgaXQgdG8gYXZvaWQgY3Jhc2guCiAgICAgICAgICAg
ICAgICAgYXR0cmliRW5hYmxlZCA9IGZhbHNlOwpAQCAtMzY5LDMzICs0MDIsMzAgQEAgYW5nbGU6
OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENv
bnRleHQsCiAKICAgICAgICAgICAgIGlmICghYXR0cmliRW5hYmxlZCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAg
ICBkZXNjLmF0dHJpYnV0ZXNbdl0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleDsKKyAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdl0ub2Zmc2V0ICAg
ICAgPSB2ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7CiAgICAgICAgICAgICAgICAgLy8g
TmVlZCB0byBmaW5kIHRoZSBhdHRyaWJ1dGUgaGF2aW5nIHRoZSBleGFjdCBiaW5kaW5nIGxvY2F0
aW9uID0gdiBpbiB0aGUgcHJvZ3JhbQogICAgICAgICAgICAgICAgIC8vIGlucHV0cyBsaXN0IHRv
IHJldHJpZXZlIGl0cyBjb3Jlc3BvbmRpbmcgZGF0YSB0eXBlOgogICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gJnByb2dyYW1JbnB1dHMgPQogICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtU3RhdGUuZ2V0UHJvZ3JhbUlucHV0cygpOwogICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT46OmNvbnN0X2l0ZXJhdG9y
IGF0dHJpYkluZm9JdGUgPSBzdGQ6OmZpbmRfaWYoCiAgICAgICAgICAgICAgICAgICAgIGJlZ2lu
KHByb2dyYW1JbnB1dHMpLCBlbmQocHJvZ3JhbUlucHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVy
VmFyaWFibGUgJnN2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHN2LmxvY2F0aW9uKSA9PSB2OworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikgPD0gdiAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHYgPCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9j
YXRpb24pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWYXJp
YWJsZUF0dHJpYnV0ZUNvdW50KHN2LnR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAot
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJJbmZvSXRlID09IGVuZChwcm9ncmFtSW5wdXRzKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1vc3QgbGlrZWx5IHRo
aXMgaXMgYXJyYXkgZWxlbWVudCB3aXRoIGluZGV4ID4gMC4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gQWxyZWFkeSBoYW5kbGVkIHdoZW4gZW5jb3VudGVyIGZpcnN0IGVsZW1lbnQuCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGFycmF5U2l6ZTsKLSAgICAgICAgICAgICAgICBNVExWZXJ0ZXhGb3JtYXQg
Zm9ybWF0OwotCi0gICAgICAgICAgICAgICAgZ2V0VmVydGV4QXR0cmliRm9ybWF0QW5kQXJyYXlT
aXplKCphdHRyaWJJbmZvSXRlLCAmZm9ybWF0LCAmYXJyYXlTaXplKTsKLQotICAgICAgICAgICAg
ICAgIGZvciAodWludDMyX3QgdmFJZHggPSB2OyB2YUlkeCA8IHYgKyBhcnJheVNpemU7ICsrdmFJ
ZHgpCisgICAgICAgICAgICAgICAgQVNTRVJUKGF0dHJpYkluZm9JdGUgIT0gZW5kKHByb2dyYW1J
bnB1dHMpKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGdsOjpWYXJpYWJsZUNvbXBvbmVudFR5
cGUoYXR0cmliSW5mb0l0ZS0+dHlwZSkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdmFJZHhdLmJ1ZmZlckluZGV4ID0gbXRsOjprRGVmYXVs
dEF0dHJpYnNCaW5kaW5nSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRl
c1t2YUlkeF0ub2Zmc2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1bHRBdHRyaWJ1dGVTaXpl
OwotICAgICAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdmFJZHhdLmZvcm1hdCAgICAg
ID0gZm9ybWF0OworICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEludFZlcnRl
eEZvcm1hdC5tZXRhbEZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdFVJbnRWZXJ0ZXhGb3Jt
YXQubWV0YWxGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmli
dXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0Owog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTQx
NywxNyArNDQ3LDM1IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBkZXNjLmxh
eW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25QZXJW
ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBS
YXRlICAgICA9IDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZCkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBGdW5j
dGlvbiA9IE1UTFZlcnRleFN0ZXBGdW5jdGlvblBlckluc3RhbmNlOwogICAgICAgICAgICAgICAg
ICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwUmF0ZSAgICAgPSBiaW5kaW5nLmdldERp
dmlzb3IoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRy
aWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzLnB1c2hf
YmFjayh2KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3Rl
cEZ1bmN0aW9uID0gTVRMVmVydGV4U3RlcEZ1bmN0aW9uQ29uc3RhbnQ7CisgICAgICAgICAgICAg
ICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IDA7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3Ry
aWRlID0gbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbdl07CiAKLSAgICAgICAgICAgICAgICBj
bWRFbmNvZGVyLT5zZXRWZXJ0ZXhCdWZmZXIobUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1
cnJlbnRCdWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgIGlmIChtQ3VycmVu
dEFycmF5QnVmZmVyc1t2XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1t2XS0+Z2V0
Q3VycmVudEJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBObyBidWZmZXIgc3BlY2lmaWVkLCB1c2UgdGhlIGNsaWVudCBtZW1vcnkgZGlyZWN0bHkg
YXMgaW5saW5lIGNvbnN0YW50IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1DdXJy
ZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbdl0gPD0gbUlubGluZURhdGFNYXhTaXplKTsKKyAgICAg
ICAgICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1cnJlbnRBcnJheUlu
bGluZURhdGFQb2ludGVyc1t2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1t2XSwgYnVmZmVySWR4KTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSAg
Ly8gZm9yICh2KQogICAgIH0KIAogICAgICp2ZXJ0ZXhEZXNjQ2hhbmdlZCA9IGRpcnR5OwpAQCAt
NDM1LDYgKzQ4Myw0MiBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CiB9CiAKK3ZvaWQgVmVydGV4QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdT
dGVwKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZUlkKQorewor
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEF0dHJpYnV0ZT4gJmF0dHJpYnMgPSBt
U3RhdGUuZ2V0VmVydGV4QXR0cmlidXRlcygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpW
ZXJ0ZXhCaW5kaW5nPiAmYmluZGluZ3MgID0gbVN0YXRlLmdldFZlcnRleEJpbmRpbmdzKCk7CisK
KyAgICBmb3IgKHVpbnQzMl90IGluc3RhbmNlQXR0cmliSWR4IDogbUVtdWxhdGVkSW5zdGFuY2VB
dHRyaWJzKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYnVmZmVySWR4ICAgICAgICAgICAgICAg
PSBtdGw6OmtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGluc3RhbmNlQXR0cmliSWR4OworICAgICAg
ICBjb25zdCBhdXRvICZhdHRyaWIgICAgICAgICAgICAgICA9IGF0dHJpYnNbaW5zdGFuY2VBdHRy
aWJJZHhdOworICAgICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAmYmluZGluZyA9IGJpbmRp
bmdzW2F0dHJpYi5iaW5kaW5nSW5kZXhdOworICAgICAgICB1aW50MzJfdCBvZmZzZXQgPQorICAg
ICAgICAgICAgaW5zdGFuY2VJZCAvIGJpbmRpbmcuZ2V0RGl2aXNvcigpICogbUN1cnJlbnRBcnJh
eUJ1ZmZlclN0cmlkZXNbaW5zdGFuY2VBdHRyaWJJZHhdOworICAgICAgICBpZiAobUN1cnJlbnRB
cnJheUJ1ZmZlcnNbaW5zdGFuY2VBdHRyaWJJZHhdKQorICAgICAgICB7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRz
W2luc3RhbmNlQXR0cmliSWR4XSk7CisKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRl
eEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0tPmdldEN1cnJl
bnRCdWZmZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQsIGJ1ZmZlcklkeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBObyBidWZmZXIgc3BlY2lmaWVkLCB1c2UgdGhlIGNsaWVudCBtZW1vcnkgZGly
ZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEKKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVu
dEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1h
eFNpemUpOworICAgICAgICAgICAgaWYgKG9mZnNldCA+IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRh
U2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNp
emVzW2luc3RhbmNlQXR0cmliSWR4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbWRF
bmNvZGVyLT5zZXRWZXJ0ZXhCeXRlcyhtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW2lu
c3RhbmNlQXR0cmliSWR4XSArIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhd
IC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
SWR4KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10
bDo6dXBkYXRlQ2xpZW50QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3RW
ZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgdmVydGV4T3JJbmRleENvdW50LApAQCAtNDYzLDEwICs1NDcsNyBAQCBhbmdsZTo6
UmVzdWx0IFZlcnRleEFycmF5TXRsOjp1cGRhdGVDbGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAmYmluZGluZyAg
PSBiaW5kaW5nc1thdHRyaWIuYmluZGluZ0luZGV4XTsKICAgICAgICAgQVNTRVJUKGF0dHJpYi5l
bmFibGVkICYmIGJpbmRpbmcuZ2V0QnVmZmVyKCkuZ2V0KCkgPT0gbnVsbHB0cik7CiAKLSAgICAg
ICAgR0x1aW50IHN0cmlkZTsKLSAgICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRl
eEZvcm1hdCA9Ci0gICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRN
dGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmc3RyaWRlKTsKLQorICAgICAgICAvLyBTb3VyY2UgY2xp
ZW50IG1lbW9yeSBwb2ludGVyCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOwogICAgICAgICBBU1NFUlQoc3Jj
KTsKIApAQCAtNDg0LDIyICs1NjUsNzYgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6
dXBkYXRlQ2xpZW50QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgIHN0YXJ0RWxlbWVudCA9IDA7CiAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSBVbnNpZ25l
ZENlaWxEaXZpZGUoaW5zdGFuY2VDb3VudCwgYmluZGluZy5nZXREaXZpc29yKCkpOwogICAgICAg
ICB9Ci0gICAgICAgIC8vIEFsbG9jYXRlIHNwYWNlIGZvciBzdGFydEVsZW1lbnQgKyBlbGVtZW50
Q291bnQgc28gaW5kZXhpbmcgd2lsbCB3b3JrLiAgSWYgd2UgZG9uJ3QKLSAgICAgICAgLy8gc3Rh
cnQgYXQgemVybyBhbGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCi0gICAgICAgIC8vIE9ubHkg
ZWxlbWVudENvdW50IHZlcnRpY2VzIHdpbGwgYmUgdXNlZCBieSB0aGUgdXBjb21pbmcgZHJhdyBz
byB0aGF0IGlzIGFsbCB3ZSBjb3B5LgotICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0g
KHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBzdHJpZGU7Ci0gICAgICAgIHNyYyArPSBz
dGFydEVsZW1lbnQgKiBiaW5kaW5nLmdldFN0cmlkZSgpOwotICAgICAgICBzaXplX3QgZGVzdE9m
ZnNldCA9IHN0YXJ0RWxlbWVudCAqIHN0cmlkZTsKLQotICAgICAgICBtRHluYW1pY1ZlcnRleERh
dGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5hY3R1YWxBbmdsZUZv
cm1hdCgpLnBpeGVsQnl0ZXMpOwotICAgICAgICBBTkdMRV9UUlkoU3RyZWFtVmVydGV4RGF0YSgK
LSAgICAgICAgICAgIGNvbnRleHRNdGwsICZtRHluYW1pY1ZlcnRleERhdGEsIHNyYywgYnl0ZXNU
b0FsbG9jYXRlLCBkZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsCi0gICAgICAgICAgICBiaW5kaW5n
LmdldFN0cmlkZSgpLCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAotICAgICAgICAg
ICAgJm1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLCAmbUN1cnJlbnRB
cnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdKSk7CisgICAgICAgIHNpemVfdCBieXRlc0lu
dGVuZGVkVG9Vc2UgPSAoc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50KSAqIGJpbmRpbmcuZ2V0
U3RyaWRlKCk7CiAKLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAg
ICAgID0gJm1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdOwotICAgICAg
ICBtQ3VycmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gPSAmdmVydGV4Rm9ybWF0
OwotICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gPSBzdHJp
ZGU7CisgICAgICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZmb3JtYXQgPSBjb250ZXh0TXRs
LT5nZXRWZXJ0ZXhGb3JtYXQoYXR0cmliLmZvcm1hdC0+aWQsIGZhbHNlKTsKKyAgICAgICAgYm9v
bCBuZWVkU3RyZWFtaW5nICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAhPSBm
b3JtYXQuaW50ZW5kZWRGb3JtYXRJZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
YmluZGluZy5nZXRTdHJpZGUoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdu
bWVudCkgIT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRT
dHJpZGUoKSA8IGZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBpeGVsQnl0ZXMpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1JbmxpbmVEYXRh
TWF4U2l6ZTsKKworICAgICAgICBpZiAoIW5lZWRTdHJlYW1pbmcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIERhdGEgd2lsbCBiZSB1cGxvYWRlZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3Rh
bnQgZGF0YQorICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAg
ICAgICAgICAgPSBudWxscHRyOworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQ
b2ludGVyc1thdHRyaWJJbmRleF0gPSBzcmM7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5s
aW5lRGF0YVNpemVzW2F0dHJpYkluZGV4XSAgICA9IGJ5dGVzSW50ZW5kZWRUb1VzZTsKKyAgICAg
ICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSAgICAgID0gMDsK
KyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSAgICAg
ID0gJmZvcm1hdDsKKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2F0dHJp
YkluZGV4XSAgICAgID0gYmluZGluZy5nZXRTdHJpZGUoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdWludCBjb252ZXJ0ZWRTdHJpZGU7CisgICAg
ICAgICAgICAvLyBOZWVkIHRvIHN0cmVhbSB0aGUgY2xpZW50IHZlcnRleCBkYXRhIHRvIGEgYnVm
ZmVyLgorICAgICAgICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJnN0cmVhbUZvcm1hdCA9
CisgICAgICAgICAgICAgICAgR2V0VmVydGV4Q29udmVyc2lvbkZvcm1hdChjb250ZXh0TXRsLCBh
dHRyaWIuZm9ybWF0LT5pZCwgJmNvbnZlcnRlZFN0cmlkZSk7CisKKyAgICAgICAgICAgIC8vIEFs
bG9jYXRlIHNwYWNlIGZvciBzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQgc28gaW5kZXhpbmcg
d2lsbCB3b3JrLiAgSWYgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHN0YXJ0IGF0IHplcm8gYWxs
IHRoZSBpbmRpY2VzIHdpbGwgYmUgb2ZmLgorICAgICAgICAgICAgLy8gT25seSBlbGVtZW50Q291
bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNvIHRoYXQgaXMg
YWxsIHdlIGNvcHkuCisgICAgICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0gKHN0YXJ0
RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBjb252ZXJ0ZWRTdHJpZGU7CisgICAgICAgICAgICBz
cmMgKz0gc3RhcnRFbGVtZW50ICogYmluZGluZy5nZXRTdHJpZGUoKTsKKyAgICAgICAgICAgIHNp
emVfdCBkZXN0T2Zmc2V0ID0gc3RhcnRFbGVtZW50ICogY29udmVydGVkU3RyaWRlOworCisgICAg
ICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gPSAmc3RyZWFt
Rm9ybWF0OworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5k
ZXhdID0gY29udmVydGVkU3RyaWRlOworCisgICAgICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRl
IDw9IG1JbmxpbmVEYXRhTWF4U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgZGF0YSBpcyBzbWFsbCBlbm91Z2gsIHVzZSBob3N0IG1lbW9yeSBpbnN0ZWFkIG9m
IGNyZWF0aW5nIEdQVSBidWZmZXIuIFRvCisgICAgICAgICAgICAgICAgLy8gYXZvaWQgc3luY2hy
b25pemluZyBhY2Nlc3MgdG8gR1BVIGJ1ZmZlciB0aGF0IGlzIHN0aWxsIGluIHVzZS4KKyAgICAg
ICAgICAgICAgICBhbmdsZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJheSA9Cisg
ICAgICAgICAgICAgICAgICAgIG1Db252ZXJ0ZWRDbGllbnRTbWFsbEFycmF5c1thdHRyaWJJbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzVG9BbGxvY2F0ZSA+IGNvbnZlcnRlZENsaWVu
dEFycmF5LnNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFO
R0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIGNvbnZlcnRlZENsaWVudEFycmF5LnJlc2l6
ZShieXRlc1RvQWxsb2NhdGUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RyZWFtRm9ybWF0LnZlcnRleExvYWRGdW5jdGlvbik7CisgICAgICAgICAgICAg
ICAgc3RyZWFtRm9ybWF0LnZlcnRleExvYWRGdW5jdGlvbihzcmMsIGJpbmRpbmcuZ2V0U3RyaWRl
KCksIGVsZW1lbnRDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRlc3RPZmZzZXQpOworCisg
ICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhdICAgICAgICAg
ICAgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9p
bnRlcnNbYXR0cmliSW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpOworICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbYXR0cmliSW5kZXhdICAgID0g
Ynl0ZXNUb0FsbG9jYXRlOworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJPZmZz
ZXRzW2F0dHJpYkluZGV4XSAgICAgID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdHJlYW0gdGhlIGNsaWVudCBk
YXRhIHRvIGEgR1BVIGJ1ZmZlci4gU3luY2hyb25pemF0aW9uIG1pZ2h0IGhhcHBlbiBpZiBidWZm
ZXIgaXMKKyAgICAgICAgICAgICAgICAvLyBpbiB1c2UuCisgICAgICAgICAgICAgICAgbUR5bmFt
aWNWZXJ0ZXhEYXRhLnVwZGF0ZUFsaWdubWVudChjb250ZXh0TXRsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCkucGl4ZWxCeXRlcyk7CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKFN0cmVh
bVZlcnRleERhdGEoY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1Rv
QWxsb2NhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dE9mZnNldCwgZWxlbWVudENvdW50LCBiaW5kaW5nLmdldFN0cmlkZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Db252
ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1thdHRy
aWJJbmRleF0pKTsKKworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJzW2F0dHJp
YkluZGV4XSA9ICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSAgLy8gaWYgKG5lZWRTdHJlYW1pbmcpCiAgICAgfQogCiAg
ICAgbVZlcnRleEFycmF5RGlydHkgPSB0cnVlOwpAQCAtNTI2LDcgKzY2MSw3IEBAIGFuZ2xlOjpS
ZXN1bHQgVmVydGV4QXJyYXlNdGw6OnN5bmNEaXJ0eUF0dHJpYihjb25zdCBnbDo6Q29udGV4dCAq
Z2xDb250ZXh0LAogICAgICAgICAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9CiAgICAgICAgICAg
ICAgICAgZm9ybWF0LmFjdHVhbEZvcm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8
CiAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0T2Zmc2V0KCkgJSBmb3JtYXQuYWN0dWFsQW5n
bGVGb3JtYXQoKS5waXhlbEJ5dGVzKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgKGJpbmRpbmcu
Z2V0T2Zmc2V0KCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9
IDAgfHwKKyAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAgfHwK
ICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSA8IGZvcm1hdC5hY3R1YWxBbmds
ZUZvcm1hdCgpLnBpeGVsQnl0ZXMpIHx8CiAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3Ry
aWRlKCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDA7CiAK
QEAgLTU2MywxOSArNjk4LDIxIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnN5bmNE
aXJ0eUF0dHJpYihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogCiBhbmdsZTo6UmVzdWx0
IFZlcnRleEFycmF5TXRsOjpnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3
RWxlbWVudHNUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZm
ZXJPdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSAqaW5kZXhUeXBlT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICppbmRleEJ1ZmZlckNvdW50T3V0KQogewogICAgIGNvbnN0IGdsOjpCdWZm
ZXIgKmdsRWxlbWVudEFycmF5QnVmZmVyID0gZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKTsKIAogICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgPSByZWludGVycHJldF9jYXN0PHNp
emVfdD4oaW5kaWNlcyk7CiAgICAgaWYgKCFnbEVsZW1lbnRBcnJheUJ1ZmZlcikKICAgICB7Ci0g
ICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29udGV4dCwgdHlw
ZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQpKTsKKyAgICAgICAgQU5H
TEVfVFJZKHN0cmVhbUluZGV4QnVmZmVyRnJvbUNsaWVudChjb250ZXh0LCB0eXBlLCBtb2RlLCBj
b3VudCwgaW5kaWNlcywgaWR4QnVmZmVyT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91
dCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNTgzLDggKzcyMCw4IEBAIGFuZ2xlOjpS
ZXN1bHQgVmVydGV4QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnZlcnRlZE9mZnNldCAl
IG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50KSAhPSAwOwogICAgICAgICBpZiAobmVl
ZENvbnZlcnNpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShjb252ZXJ0SW5k
ZXhCdWZmZXIoY29udGV4dCwgdHlwZSwgY29udmVydGVkT2Zmc2V0LCBpZHhCdWZmZXJPdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91
dCkpOworICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZlcnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0
eXBlLCBtb2RlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1ZmZlck91dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0LCBpbmRleEJ1ZmZl
ckNvdW50T3V0KSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC01OTIs
NiArNzI5LDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICBCdWZmZXJNdGwgKmJ1ZmZl
ck10bCA9IG10bDo6R2V0SW1wbChnbEVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICAq
aWR4QnVmZmVyT3V0ICAgICAgICA9IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOwogICAg
ICAgICAgICAgKmlkeEJ1ZmZlck9mZnNldE91dCAgPSBjb252ZXJ0ZWRPZmZzZXQ7CisgICAgICAg
ICAgICAqaW5kZXhCdWZmZXJDb3VudE91dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgfQogCkBA
IC02MDcsOSArNzQ1LDExIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmdldEluZGV4
QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiBhbmdsZTo6UmVzdWx0IFZlcnRl
eEFycmF5TXRsOjpjb252ZXJ0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVy
UmVmICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRP
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICppbmRleEJ1ZmZlckNvdW50T3V0KQogewogICAgIHNpemVfdCBvZmZzZXRNb2R1bG8gPSBv
ZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudDsKICAgICBBU1NFUlQob2Zm
c2V0TW9kdWxvICE9IDAgfHwgaW5kZXhUeXBlID09IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNp
Z25lZEJ5dGUpOwpAQCAtNjM4LDE1ICs3NzgsMTUgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJh
eU10bDo6Y29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAg
ICAgfQogCiAgICAgc2l6ZV90IGluZGV4Q291bnQgPSBHZXRJbmRleENvdW50KGlkeEJ1ZmZlciwg
b2Zmc2V0TW9kdWxvLCBpbmRleFR5cGUpOwotCi0gICAgaWYgKCFjb250ZXh0TXRsLT5nZXREaXNw
bGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYKLSAgICAg
ICAgY29udGV4dE10bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkKKyAgICBpZiAoKCFjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVh
cC5lbmFibGVkICYmCisgICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2Rl
cigpKSkKICAgICB7CiAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB1c2UgR1BVIHRvIGNvbnZlcnQg
d2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KICAgICAgICAgQU5HTEVf
VFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmY29udmVyc2lvbi0+ZGF0YSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhCdWZmZXItPmdldENsaWVudFNoYWRvd0Nv
cHlEYXRhKGNvbnRleHRNdGwpICsgb2Zmc2V0TW9kdWxvLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgZ2xTdGF0ZS5pc1ByaW1pdGl2ZVJl
c3RhcnRFbmFibGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZl
cnNpb24tPmNvbnZlcnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwg
bW9kZSwgZ2xTdGF0ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciwgJmNvbnZl
cnNpb24tPmNvbnZlcnRlZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEJ1ZmZlckNvdW50T3V0KSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC02OTUs
MTggKzgzNSwyMCBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252ZXJ0SW5kZXhC
dWZmZXJHUFUoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dAogCiBhbmdsZTo6UmVzdWx0IFZl
cnRleEFycmF5TXRsOjpzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc291cmNl
UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyT2Zmc2V0T3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4
QnVmZmVyQ291bnRPdXQpCiB7CiAgICAgQVNTRVJUKGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5
QnVmZmVyKCkgPT0gbnVsbHB0cik7CiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6
R2V0SW1wbChjb250ZXh0KTsKIAogICAgIGF1dG8gc3JjRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QgKj4oc291cmNlUG9pbnRlcik7Ci0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0
YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5k
ZXhDb3VudCwKKyAgICBBTkdMRV9UUlkoU3RyZWFtSW5kZXhEYXRhKGNvbnRleHRNdGwsICZtRHlu
YW1pY0luZGV4RGF0YSwgc3JjRGF0YSwgaW5kZXhUeXBlLCBpbmRleENvdW50LCBtb2RlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0U3RhdGUoKS5pc1ByaW1pdGl2
ZVJlc3RhcnRFbmFibGVkKCksIGlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWR4QnVmZmVyT2Zmc2V0T3V0LCBpZHhCdWZmZXJDb3VudE91dCkpOwogCiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQpAQCAtNzQ0LDcgKzg4Niw2IEBAIGFuZ2xlOjpS
ZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKICAgICAvLyBIYXMgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlciBoYXMg
Y2hhbmdlZCBzaW5jZSBsYXN0IGNvbnZlcnNpb24/CiAgICAgaWYgKCFjb252ZXJzaW9uLT5kaXJ0
eSkKICAgICB7Ci0gICAgICAgIC8vIEJ1ZmZlcidzIGRhdGEgaGFzbid0IGJlZW4gY2hhbmdlZC4g
UmUtdXNlIGxhc3QgY29udmVydGVkIHJlc3VsdHMKICAgICAgICAgbUNvbnZlcnRlZEFycmF5QnVm
ZmVySG9sZGVyc1thdHRyaWJJbmRleF0uc2V0KGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlcik7
CiAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSA9IGNvbnZl
cnNpb24tPmNvbnZlcnRlZE9mZnNldDsKIApAQCAtNzYxLDcgKzkwMiw3IEBAIGFuZ2xlOjpSZXN1
bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKICAgICBib29sIGNhbkV4cGFuZENvbXBvbmVudHNPbkdQVSA9IGNvbnZlcnRl
ZEZvcm1hdC5hY3R1YWxTYW1lR0xUeXBlOwogCiAgICAgaWYgKGNvbnRleHRNdGwtPmdldFJlbmRl
ckNvbW1hbmRFbmNvZGVyKCkgJiYKLSAgICAgICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+
Z2V0RmVhdHVyZXMoKS5oYXNDaGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgorICAgICAgICAhY29u
dGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmJyZWFrUmVuZGVyUGFzc0lzQ2hl
YXAuZW5hYmxlZCAmJgogICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmhhc0V4cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQogICAgIHsKICAgICAgICAgLy8g
Q2Fubm90IHVzZSBHUFUgdG8gY29udmVydCB3aGVuIHdlIGFyZSBpbiBhIG1pZGRsZSBvZiBhIHJl
bmRlciBwYXNzLgpAQCAtNzkyLDYgKzkzMyw5IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlN
dGw6OmNvbnZlcnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAg
ICBjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIgPSBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xk
ZXJzW2F0dHJpYkluZGV4XS5nZXRDdXJyZW50QnVmZmVyKCk7CiAgICAgY29udmVyc2lvbi0+Y29u
dmVydGVkT2Zmc2V0ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdOwog
CisgICAgQVNTRVJUKGNvbnZlcnNpb24tPmRpcnR5KTsKKyAgICBjb252ZXJzaW9uLT5kaXJ0eSA9
IGZhbHNlOworCiAjaWZuZGVmIE5ERUJVRwogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAg
ewpAQCAtODAxLDkgKzk0NSw2IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZl
cnRWZXJ0ZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICB9CiAjZW5k
aWYKIAotICAgIEFTU0VSVChjb252ZXJzaW9uLT5kaXJ0eSk7Ci0gICAgY29udmVyc2lvbi0+ZGly
dHkgPSBmYWxzZTsKLQogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1kIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1k
CmluZGV4IGZhMDczYWU2MjNmOWMxMmU3NjE5MjBjNWNjODBhZGRjZWM2MzVlZDIuLjEzYWZkYzM0
ZGExZGFiN2YwMzdkMDhhNTg5MDg1ZThhNWJhODUyM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9k
aXN0YW5jZS5tZAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQKQEAgLTYsNiArNiwzMSBAQCBs
ZXZlbCBzaWRlLiBXcml0aW5nIHRvIGBnbF9DbGlwRGlzdGFuY2VbaV1gIGluIHNoYWRlciB3aWxs
IGJlIGlnbm9yZWQgaWYgaXQgaXMgZAogZG9lc24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0
byBkaXNhYmxlL2VuYWJsZSB0aGUgd3JpdGluZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9k
aXN0YW5jZWAKIHZhcmlhYmxlIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBpdC4KIAotVG8gZW11bGF0
ZSB0aGlzIGVuYWJsaW5nL2Rpc2FibGluZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEg
c2ltaWxhciBpbXBsZW1lbnRhdGlvbiBhcyB3aGF0Ci1bVnVsa2FuIGJhY2stZW5kIGRvZXNdKC4u
Ly4uL3Z1bGthbi9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCkuIFBsZWFzZSByZWZlciB0byB0
aGF0IGRvY3VtZW50IGZvcgotbW9yZSBkZXRhaWxzLgorVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxp
bmcvZGlzYWJsaW5nIEFQSSBpbiBNZXRhbCBiYWNrLWVuZDoKKworLSBUaGUgc2hhZGVyIGNvbXBp
bGVyIHdpbGwgdHJhbnNsYXRlIGVhY2ggYGdsX0NsaXBEaXN0YW5jZVtpXWAgYXNzaWdubWVudCB0
byBhbiBhc3NpZ25tZW50IHRvCisgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUuCist
IEEgc3BlY2lhbCBkcml2ZXIgdW5pZm9ybSB2YXJpYWJsZSBgY2xpcERpc3RhbmNlc0VuYWJsZWRg
IHdpbGwgY29udGFpbiBvbmUgYml0IGZsYWcgZm9yIGVhY2gKKyAgZW5hYmxlZCBgZ2xfQ2xpcERp
c3RhbmNlW2ldYC4gVGhpcyB2YXJpYWJsZSBzdXBwb3J0cyB1cCB0byAzMiBgZ2xfQ2xpcERpc3Rh
bmNlYCBpbmRpY2VzLgorLSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBlbmFibGVk
IGBnbF9DbGlwRGlzdGFuY2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3RpdmUKKyAg
dmFsdWUgZnJvbSBgQU5HTEVDbGlwRGlzdGFuY2VbaV1gLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhv
c2UgZGlzYWJsZWQgZWxlbWVudHMgd2lsbCBiZSBhc3NpZ25lZAorICB6ZXJvIHZhbHVlLiBUaGlz
IHN0ZXAgaXMgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgY29kZToKKyAgICBgYGAKKyAgICBm
b3IgKGludCBpbmRleCA6IGFycmF5bGVuZ3RoKGdsX0NsaXBEaXN0YW5jZSkpCisgICAgeworICAg
ICAgICBpZiAoQU5HTEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAmICgweDEgPDwgaW5k
ZXgpKQorICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9IEFOR0xFQ2xpcERpc3Rh
bmNlW2luZGV4XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2lu
ZGV4XSA9IDA7CisgICAgfQorICAgIGBgYAorLSBTb21lIG1pbm9yIG9wdGltaXphdGlvbnM6Cisg
ICAgLSBPbmx5IHRob3NlIGluZGljZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2lu
YWwgY29kZSB3aWxsIGJlIHVzZWQgaW4gaWYgZWxzZSBibG9jaworICAgICAgYWJvdmUuCisgICAg
LSBUaG9zZSBlbGVtZW50cyB3aG9zZSBpbmRleCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2lu
YWwgY29kZSB3aWxsIGJlIHplcm9pc2VkIGluc3RlYWQuCisgICAgLSBJZiB0aGUgb3JpZ2luYWwg
Y29kZSBvbmx5IHVzZXMgdXAgdG8gYW4gaW5kZXggPCBgZ2xfTWF4Q2xpcERpc3RhbmNlc2AsIHRo
ZW4KKyAgICAgIHRoZSBsb29wIHdpbGwgaGF2ZSBhdCBtb3N0IGBpbmRleCsxYCBpdGVyYXRpb25z
LiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgaW5kZXggbm90IGJlaW5nCisgICAgICBpbnRlZ3Jh
bCBjb25zdGFudCB2YWx1ZSBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlbiBkZWNsYXJlZCBzaXpl
IG9mIGBnbF9DbGlwRGlzdGFuY2VgCisgICAgICB3aWxsIGJlIHRoZSBsb29wIHNpemUuCisgICAg
LSBGaW5hbGx5LCBpZiB0aGUgb3JpZ2luYWwgY29kZSBkb2Vzbid0IHVzZSBgZ2xfQ2xpcERpc3Rh
bmNlYCwgdGhlbiBhbGwgdGhlIHN0ZXBzIGFib3ZlIHdpbGwgYmUKKyAgICAgIG9taXR0ZWQuClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2dlbl9tdGxfZm9ybWF0X3RhYmxlLnB5
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2dl
bl9tdGxfZm9ybWF0X3RhYmxlLnB5CmluZGV4IDNjZTE0MmU1NmM2ZjYyYTA5MDQ4YzU5Y2JmYWU5
ZDRjZjk5NzczYTMuLjg4OGI3OWY5NzQ1OThlMDhmZDY2OTc0OWY3OWZlMzQ4NWUwMTJmNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKQEAg
LTM3LDYgKzM3LDcgQEAgdGVtcGxhdGVfYXV0b2dlbl9pbmwgPSAiIiIvLyBHRU5FUkFURUQgRklM
RSAtIERPIE5PVCBFRElULgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL0Zvcm1hdC5oIgog
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKICNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBh
bmdsZTsKIApAQCAtNDgsNyArNDksNiBAQCBuYW1lc3BhY2UgbXRsCiB2b2lkIEZvcm1hdDo6aW5p
dChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3Jt
YXRJZF8pCiB7ewogICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElk
XzsKLQogICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERl
dmljZSgpOwogCiAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KQEAgLTEwOSw2ICsxMDksMjMgQEAg
aW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTIgPSAiIiIKICAgICAgICAgICAgICAgICB0aGlz
LT5pbml0RnVuY3Rpb24gPSB7aW5pdF9mdW5jdGlvbl9mYWxsYmFja307CiAgICAgICAgICAgICB9
fQogIiIiCisjRDE2IGlzIGZ1bGx5IHN1cHBvcnRlZCBvbiAgQXBwbGUzKy4gSG93ZXZlciwgb24K
KyNwcmV2aW91cyAgdmVyc2lvbnMgb2YgQXBwbGUgaGFyZHdhcmUsIHNvbWUgb3BlcmF0aW9ucyBj
YW4gY2F1c2UKKyN1bmRlZmluZWQgYmVoYXZpb3IuCitpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBs
YXRlMyA9ICIiIgorICAgICAgICAgICAgaWYgKG10bDo6U3VwcG9ydHNJT1NHUFVGYW1pbHkobWV0
YWxEZXZpY2UsIDMpKQorICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRh
bEZvcm1hdCA9IHttdGxfZm9ybWF0fTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3Jt
YXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXR9OworICAgICAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKyAgICAgICAgICAg
IH19CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgIHRo
aXMtPm1ldGFsRm9ybWF0ID0ge210bF9mb3JtYXRfZmFsbGJhY2t9OworICAgICAgICAgICAgICAg
IHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjp7YWN0dWFsX2FuZ2xlX2Zv
cm1hdF9mYWxsYmFja307CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2lu
aXRfZnVuY3Rpb25fZmFsbGJhY2t9OworICAgICAgICAgICAgfX0KKyIiIgogCiBjYXNlX2ltYWdl
X2Zvcm1hdF90ZW1wbGF0ZTEgPSAiIiIgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjp7YW5n
bGVfZm9ybWF0fToKICAgICAgICAgICAgIHtpbWFnZV9mb3JtYXRfYXNzaWdufQpAQCAtMjEzLDYg
KzIzMCw4IEBAIGRlZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEo
c3JjX2Zvcm1hdCwgZHN0X2Zvcm1hdCk6CiAKIAogIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lv
biBzd2l0Y2ggY2FzZSAoZ2VuZXJpYyBjYXNlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRj
aF9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19t
dGxfbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduX2dlbl9mdW5jKToK
ICAgICBpZiBpc2luc3RhbmNlKGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgZGljdCk6CkBAIC0y
NTUsNiArMjc0LDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0
LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KIAogCiAjIEdlbmVyYXRlIGZv
cm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKworCiBkZWYgZ2VuX2lt
YWdlX21hcF9zd2l0Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9y
bWF0X2luZm8sIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlX3RvX210bF9tYXApOgogCkBAIC0yNzAsNiArMjkxLDggQEAgZGVmIGdlbl9pbWFn
ZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1h
dF9pbmZvLCBhbmcKIAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNl
IChNYWMgY2FzZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVf
Zm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAsIG1hY19mYWxsYmFja3Mp
OgogICAgIGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KQEAgLTMwMSwxMSAr
MzI0LDQzIEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQs
IGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuX2Zvcm1hdF9hc3NpZ25fY29kZSkKIAogCitkZWYgZ2VuX2ltYWdl
X21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2lu
Zm8sIGFuZ2xlX3RvX2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
X3RvX210bF9tYXAsIGlvc19mYWxsYmFja3MpOgorICAgIGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2ds
W2FuZ2xlX2Zvcm1hdF0KKworICAgIGRlZiBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKGFjdHVhbF9h
bmdsZV9mb3JtYXQsIGFuZ2xlX3RvX210bF9tYXApOgorICAgICAgICBpZiBhY3R1YWxfYW5nbGVf
Zm9ybWF0IGluIGlvc19mYWxsYmFja3M6CisgICAgICAgICAgICAjIFRoaXMgZm9ybWF0IChEZXB0
aDE2VW5pZm9ybSkgcmVxdWlyZXMgZmFsbGJhY2sgd2hlbiBpT1MgaGFyZHdhcmUgZG9lcyBub3Qg
ZnVsbHkgc3VwcG9ydCBkZXB0aDE2LgorICAgICAgICAgICAgIyBGYWxsYmFjayBmb3JtYXQ6Cisg
ICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1th
Y3R1YWxfYW5nbGVfZm9ybWF0XQorICAgICAgICAgICAgIyByZXR1cm4gaWYgZWxzZSBibG9jazoK
KyAgICAgICAgICAgIHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMy5mb3JtYXQo
CisgICAgICAgICAgICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0
LAorICAgICAgICAgICAgICAgIG10bF9mb3JtYXQ9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5n
bGVfZm9ybWF0XSwKKyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91
dGlscy5nZXRfaW50ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorICAgICAgICAgICAgICAgICAg
ICBnbF9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQpLAorICAgICAgICAgICAgICAgIGFjdHVh
bF9hbmdsZV9mb3JtYXRfZmFsbGJhY2s9YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICBtdGxfZm9ybWF0X2ZhbGxiYWNrPWFuZ2xlX3RvX210bF9tYXBbYWN0dWFs
X2FuZ2xlX2Zvcm1hdF9mYWxsYmFja10sCisgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9m
YWxsYmFjaz1hbmdsZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXpl
cigKKyAgICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2Zh
bGxiYWNrKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJs
b2NrOgorICAgICAgICAgICAgcmV0dXJuIGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUxLmZv
cm1hdCgKKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0PWFjdHVhbF9hbmdsZV9m
b3JtYXQsCisgICAgICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVh
bF9hbmdsZV9mb3JtYXRdLAorICAgICAgICAgICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9y
bWF0X3V0aWxzLmdldF9pbnRlcm5hbF9mb3JtYXRfaW5pdGlhbGl6ZXIoCisgICAgICAgICAgICAg
ICAgICAgIGdsX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCkpCisKKyAgICByZXR1cm4gZ2Vu
X2ltYWdlX21hcF9zd2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRf
aW5mbywgYW5nbGVfdG9fbXRsX21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRj
aF9zdHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBhbmdsZV9vdmVycmlkZSA9
IGltYWdlX3RhYmxlWyJvdmVycmlkZSJdCiAgICAgbWFjX292ZXJyaWRlID0gaW1hZ2VfdGFibGVb
Im92ZXJyaWRlX21hYyJdCiAgICAgaW9zX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRl
X2lvcyJdCi0gICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3Nf
bWFjIl0KKyAgICBtYWNfZmFsbGJhY2tzID0gaW1hZ2VfdGFibGVbImZhbGxiYWNrc19tYWMiXQor
ICAgIGlvc19mYWxsYmFja3MgPSBpbWFnZV90YWJsZVsiZmFsbGJhY2tzX2lvcyJdCiAgICAgYW5n
bGVfdG9fbXRsID0gaW1hZ2VfdGFibGVbIm1hcCJdCiAgICAgbWFjX3NwZWNpZmljX21hcCA9IGlt
YWdlX3RhYmxlWyJtYXBfbWFjIl0KICAgICBpb3Nfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVb
Im1hcF9pb3MiXQpAQCAtMzIyLDggKzM3Nyw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9z
dHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBkZWYgZ2VuX2ltYWdlX21hcF9z
d2l0Y2hfY29tbW9uX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KToKICAg
ICAgICAgbWFjX2Nhc2UgPSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3Jt
YXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQsIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGwsIG1hY19mYWxs
YmFja3MpCi0gICAgICAgIG5vbl9tYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBs
ZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFu
Z2xlX3RvX210bCkKKyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
aW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19nbCwgYW5n
bGVfdG9fbXRsLCBpb3NfZmFsbGJhY2tzKQogICAgICAgICBpZiBtYWNfY2FzZSA9PSBub25fbWFj
X2Nhc2U6CiAgICAgICAgICAgICByZXR1cm4gbWFjX2Nhc2UKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJf
cG9vbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5oCmluZGV4IDIwNzlmZDcyN2E1MTJiMjg3MjVkMzgzOTA3YTQ5
M2RjZDJkY2QzN2MuLjIwNGViYjk0OTg3MzExMmMwMTAyNDJiMmIxNmIwODYwY2Q0MGMwMGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKQEAgLTgxLDcgKzgxLDcg
QEAgY2xhc3MgQnVmZmVyUG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3
QnVmZmVyQWxsb2NhdGVkT3V0ID0gbnVsbHB0cik7CiAKICAgICAvLyBBZnRlciBhIHNlcXVlbmNl
IG9mIENQVSB3cml0ZXMsIGNhbGwgY29tbWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxl
IHRvIHRoZSBkZXZpY2UuCi0gICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29u
dGV4dE10bCk7CisgICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10
bCwgYm9vbCBmbHVzaEVudGlyZUJ1ZmZlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgcmVsZWFz
ZXMgYWxsIHRoZSBidWZmZXJzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzaW5jZSB0aGlzIHdh
cyBsYXN0IGNhbGxlZC4KICAgICB2b2lkIHJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoQ29udGV4dE10
bCAqY29udGV4dE10bCk7CkBAIC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAogICAg
IGFuZ2xlOjpSZXN1bHQgYWxsb2NhdGVOZXdCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCk7
CiAgICAgdm9pZCBkZXN0cm95QnVmZmVyTGlzdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBzdGQ6
OmRlcXVlPEJ1ZmZlclJlZj4gKmJ1ZmZlcnMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQ
ZW5kaW5nQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwotCiAgICAgc2l6ZV90IG1Jbml0
aWFsU2l6ZTsKICAgICBCdWZmZXJSZWYgbUJ1ZmZlcjsKICAgICB1aW50MzJfdCBtTmV4dEFsbG9j
YXRpb25PZmZzZXQ7CkBAIC0xMjcsNyArMTI2LDcgQEAgY2xhc3MgQnVmZmVyUG9vbAogCiAgICAg
c2l6ZV90IG1CdWZmZXJzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtTWF4QnVmZmVyczsKLSAgICBC
dWZmZXJQb29sTWVtUG9saWN5IG1NZW1Qb2xpY3k7CisgICAgQnVmZmVyUG9vbE1lbVBvbGljeSBt
TWVtUG9saWN5ID0gQnVmZmVyUG9vbE1lbVBvbGljeTo6QXV0bzsKICAgICBib29sIG1BbHdheXNB
bGxvY2F0ZU5ld0J1ZmZlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZl
cl9wb29sLm1tCmluZGV4IDA0MjM4ZWYxZThmYWIyMTY3NjU5YjY2OGMxY2NmYjk0ZmY1YTJkMmUu
LmE1OGI1YTVhM2U5Nzc4MGY3ODc1OTIwN2EwZmExMjU1MTlhOWQ1YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVm
ZmVyX3Bvb2wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5tbQpAQCAtMjUwLDExICsyNTAsMTggQEAgYW5n
bGU6OlJlc3VsdCBCdWZmZXJQb29sOjphbGxvY2F0ZShDb250ZXh0TXRsICpjb250ZXh0TXRsLAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBC
dWZmZXJQb29sOjpjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK2FuZ2xlOjpSZXN1bHQg
QnVmZmVyUG9vbDo6Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGJvb2wgZmx1c2hFbnRp
cmVCdWZmZXIpCiB7CiAgICAgaWYgKG1CdWZmZXIgJiYgbU5leHRBbGxvY2F0aW9uT2Zmc2V0ID4g
bUxhc3RGbHVzaE9mZnNldCkKICAgICB7Ci0gICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRN
dGwsIG1MYXN0Rmx1c2hPZmZzZXQsIG1OZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hP
ZmZzZXQpOworICAgICAgICBpZiAoZmx1c2hFbnRpcmVCdWZmZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIDAsIG1MYXN0Rmx1c2hPZmZzZXQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUJ1ZmZlci0+
Zmx1c2goY29udGV4dE10bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0
IC0gbUxhc3RGbHVzaE9mZnNldCk7CisgICAgICAgIH0KICAgICAgICAgbUxhc3RGbHVzaE9mZnNl
dCA9IG1OZXh0QWxsb2NhdGlvbk9mZnNldDsKICAgICB9CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZl
ci5oCmluZGV4IDU1ZmY2NDlkYjZkNTc3NWRjZTdhYzljYTUzMGExMjViZDY1ZDI4MWYuLjNhYTgy
NmFmNjdmY2QyMDFiOWYzYjJjYzhmMWE4ZTc3YTAxMWIyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9i
dWZmZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFzcyBD
b21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1
ZmZlcj4+LCBhbmdsZTo6TgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tbWFuZCBidWZmZXIg
Y2FuIGJlIGVuY29kZWQgaW50by4gUmV0dXJuIGZhbHNlIGlmIGl0IGhhcyBiZWVuIGNvbW1pdHRl
ZAogICAgIC8vIGFuZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCi0gICAgYm9vbCByZWFkeSgpIGNv
bnN0OworICAgIGJvb2wgdmFsaWQoKSBjb25zdDsKICAgICB2b2lkIGNvbW1pdCgpOwogICAgIC8v
IHdhaXQgZm9yIGNvbW1pdHRlZCBjb21tYW5kIGJ1ZmZlciB0byBmaW5pc2guCiAgICAgdm9pZCBm
aW5pc2goKTsKQEAgLTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDog
cHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogCiAg
ICAgdm9pZCBxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50
LCB1aW50NjRfdCB2YWx1ZSk7CiAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpT
aGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKworICAgIHZvaWQgaW5zZXJ0
RGVidWdTaWduKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOwogICAgIHZvaWQgcHVzaERlYnVn
R3JvdXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7CiAgICAgdm9pZCBwb3BEZWJ1Z0dyb3Vw
KCk7CiAKQEAgLTEyOCw3ICsxMzAsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVi
bGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogICAgIHZv
aWQgc2V0KGlkPE1UTENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKTsKICAgICB2b2lkIGNsZWFu
dXAoKTsKIAotICAgIGJvb2wgcmVhZHlJbXBsKCkgY29uc3Q7CisgICAgYm9vbCB2YWxpZEltcGwo
KSBjb25zdDsKICAgICB2b2lkIGNvbW1pdEltcGwoKTsKICAgICB2b2lkIGZvcmNlRW5kaW5nQ3Vy
cmVudEVuY29kZXIoKTsKIApAQCAtMTQ5LDYgKzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIg
ZmluYWwgOiBwdWJsaWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xl
OjpOCiAKICAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CiAKKyAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4gbVBlbmRpbmdEZWJ1Z1NpZ25zOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFp
cjxtdGw6OlNoYXJlZEV2ZW50UmVmLCB1aW50NjRfdD4+IG1QZW5kaW5nU2lnbmFsRXZlbnRzOwog
CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1EZWJ1Z0dyb3VwczsKQEAgLTE3Niw2ICsx
NzksOCBAQCBjbGFzcyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1U
TENvbW1hbmRFbmNvZGVyPj4sIGFuZ2xlOjpOb25DbwogICAgIENvbW1hbmRFbmNvZGVyICZtYXJr
UmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CiAgICAg
Q29tbWFuZEVuY29kZXIgJm1hcmtSZXNvdXJjZUJlaW5nV3JpdHRlbkJ5R1BVKGNvbnN0IFRleHR1
cmVSZWYgJnRleHR1cmUpOwogCisgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxh
YmVsKTsKKwogICAgIHZpcnR1YWwgdm9pZCBwdXNoRGVidWdHcm91cChOU1N0cmluZyAqbGFiZWwp
OwogICAgIHZpcnR1YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTE4OSw2ICsxOTQsOCBA
QCBjbGFzcyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1h
bmRFbmNvZGVyPj4sIGFuZ2xlOjpOb25DbwogCiAgICAgdm9pZCBzZXQoaWQ8TVRMQ29tbWFuZEVu
Y29kZXI+IG1ldGFsQ21kRW5jb2Rlcik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdT
aWduSW1wbChOU1N0cmluZyAqbWFya2VyKTsKKwogICBwcml2YXRlOgogICAgIGNvbnN0IFR5cGUg
bVR5cGU7CiAgICAgQ29tbWFuZEJ1ZmZlciAmbUNtZEJ1ZmZlcjsKQEAgLTIwMSw3ICsyMDgsNyBA
QCBjbGFzcyBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgICAgaW5saW5lIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gJnB1c2goY29uc3QgVCAm
dmFsKQogICAgIHsKLSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90ICo+KCZ2YWwpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCAqPigmdmFsKTsKICAgICAgICAgbUJ1ZmZlci5pbnNlcnQobUJ1
ZmZlci5lbmQoKSwgcHRyLCBwdHIgKyBzaXplb2YoVCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQpAQCAtMjE3LDcgKzIyNCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJl
YW0KICAgICB7CiAgICAgICAgIEFTU0VSVChtUmVhZFB0ciA8PSBtQnVmZmVyLnNpemUoKSAtIHNp
emVvZihUKSk7CiAgICAgICAgIFQgcmU7Ci0gICAgICAgIHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCAqPigmcmUpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCAqPigmcmUpOwogICAgICAgICBzdGQ6OmNvcHkobUJ1ZmZlci5kYXRhKCkg
KyBtUmVhZFB0ciwgbUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciArIHNpemVvZihUKSwgcHRyKTsK
ICAgICAgICAgcmV0dXJuIHJlOwogICAgIH0KQEAgLTIyNSw3ICsyMzIsNyBAQCBjbGFzcyBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5s
aW5lIFQgZmV0Y2goKQogICAgIHsKLSAgICAgICAgVCByZSA9IHBlZWs8VD4oKTsKKyAgICAgICAg
YXV0byByZSA9IHBlZWs8VD4oKTsKICAgICAgICAgbVJlYWRQdHIgKz0gc2l6ZW9mKFQpOwogICAg
ICAgICByZXR1cm4gcmU7CiAgICAgfQpAQCAtMjMzLDcgKzI0MCw3IEBAIGNsYXNzIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0KICAgICBpbmxpbmUgY29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90
IGJ5dGVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIuc2l6ZSgp
IC0gYnl0ZXMpOwotICAgICAgICBzaXplX3QgY3VyID0gbVJlYWRQdHI7CisgICAgICAgIGF1dG8g
Y3VyID0gbVJlYWRQdHI7CiAgICAgICAgIG1SZWFkUHRyICs9IGJ5dGVzOwogICAgICAgICByZXR1
cm4gbUJ1ZmZlci5kYXRhKCkgKyBjdXI7CiAgICAgfQpAQCAtNDc5LDEyICs0ODYsMTYgQEAgY2xh
c3MgUmVuZGVyQ29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29kZXIKICAg
ICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4+KENvbW1hbmRFbmNvZGVyOjpnZXQoKSk7CiAgICAgfQorICAgIHZvaWQgaW5zZXJ0RGVidWdT
aWduSW1wbChOU1N0cmluZyAqbGFiZWwpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0QXR0YWNo
bWVudFdyaXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KGNvbnN0IFJlbmRlclBhc3NBdHRhY2ht
ZW50RGVzYyAmYXR0YWNobWVudCk7CisgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0
IFRleHR1cmVSZWYgJnRleHR1cmUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlv
bihNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNSZW5kZXJQYXNzQXR0YWNo
bWVudCk7CiAKICAgICB2b2lkIGVuY29kZU1ldGFsRW5jb2RlcigpOworICAgIHZvaWQgc2ltdWxh
dGVEaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNv
bnNpZGVyRGlzY2FyZFNpbXVsYXRpb24pOwogCiAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJmNv
bW1vblNldEJ1ZmZlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCkBAIC01
NjAsMTEgKzU3MSwyMCBAQCBjbGFzcyBCbGl0Q29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMg
Q29tbWFuZEVuY29kZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHNsaWNlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBsZXZlbENvdW50KTsKIAorICAgIEJsaXRDb21tYW5kRW5jb2RlciAmY29weVRleHR1cmUo
Y29uc3QgVGV4dHVyZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjU2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBzcmNMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHR1cmVSZWYgJmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGRzdFNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgZHN0TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBzbGljZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CisKICAgICBCbGl0Q29tbWFuZEVuY29kZXIgJmZpbGxC
dWZmZXIoY29uc3QgQnVmZmVyUmVmICZidWZmZXIsIE5TUmFuZ2UgcmFuZ2UsIHVpbnQ4X3QgdmFs
dWUpOwogCiAgICAgQmxpdENvbW1hbmRFbmNvZGVyICZnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJl
KGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpOwotICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3lu
Y2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlclB0cik7Ci0gICAgQmxpdENvbW1hbmRFbmNv
ZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIpOworICAgIEJsaXRD
b21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZl
cik7CisgICAgQmxpdENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRl
eHR1cmVSZWYgJnRleHR1cmUpOwogCiAgIHByaXZhdGU6CiAgICAgaWQ8TVRMQmxpdENvbW1hbmRF
bmNvZGVyPiBnZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZm
ZXIubW0KaW5kZXggNDQzM2IwMjIxN2MzMGFhZTIwODk2NzA4YTc0YWYyNTQ3MzVkMjM2OC4uYjRh
MzM0NzQyZTYyN2NhMDQ5MTIxMDNlMmZhZGZjYzczMTI0N2YzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLm1tCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAKICNp
bmNsdWRlIDxjYXNzZXJ0PgorI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVNDQVJEX0ZSQU1FQlVG
RkVSCisjICAgIGluY2x1ZGUgPHJhbmRvbT4KKyNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9x
dWVyeV9wb29sLmgiCkBAIC02NSw2ICs2OCw3IEBAIG5hbWVzcGFjZQogICAgIFBST0MoU2V0Vmlz
aWJpbGl0eVJlc3VsdE1vZGUpICAgICAgICBcCiAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBQUk9DKE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2UpICAgICAg
XAorICAgIFBST0MoSW5zZXJ0RGVidWdzaWduKSAgICAgICAgICAgICAgICBcCiAgICAgUFJPQyhQ
dXNoRGVidWdHcm91cCkgICAgICAgICAgICAgICAgIFwKICAgICBQUk9DKFBvcERlYnVnR3JvdXAp
CiAKQEAgLTg1LDQyICs4OSw0MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgogdm9pZCBTZXRS
ZW5kZXJQaXBlbGluZVN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJl
YW0gKnN0cmVhbSkKIHsKLSAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBzdGF0ZSA9IHN0
cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CisgICAgYXV0byBzdGF0
ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CiAgICAgW2Vu
Y29kZXIgc2V0UmVuZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CiAgICAgW3N0YXRlIEFOR0xFX01U
TF9SRUxFQVNFXTsKIH0KIAogdm9pZCBTZXRUcmlhbmdsZUZpbGxNb2RlQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgTVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExU
cmlhbmdsZUZpbGxNb2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJp
YW5nbGVGaWxsTW9kZT4oKTsKICAgICBbZW5jb2RlciBzZXRUcmlhbmdsZUZpbGxNb2RlOm1vZGVd
OwogfQogCiB2b2lkIFNldEZyb250RmFjaW5nV2luZGluZ0NtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExXaW5kaW5nIHdpbmRpbmcgPSBz
dHJlYW0tPmZldGNoPE1UTFdpbmRpbmc+KCk7CisgICAgYXV0byB3aW5kaW5nID0gc3RyZWFtLT5m
ZXRjaDxNVExXaW5kaW5nPigpOwogICAgIFtlbmNvZGVyIHNldEZyb250RmFjaW5nV2luZGluZzp3
aW5kaW5nXTsKIH0KIAogdm9pZCBTZXRDdWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAg
IE1UTEN1bGxNb2RlIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgIGF1
dG8gbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMQ3VsbE1vZGU+KCk7CiAgICAgW2VuY29kZXIgc2V0
Q3VsbE1vZGU6bW9kZV07CiB9CiAKIHZvaWQgU2V0RGVwdGhTdGVuY2lsU3RhdGVDbWQoaWQ8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0g
KnN0cmVhbSkKIHsKLSAgICBpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gc3RhdGUgPSBzdHJlYW0t
PmZldGNoPGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPj4oKTsKKyAgICBhdXRvIHN0YXRlID0gc3Ry
ZWFtLT5mZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0
RGVwdGhTdGVuY2lsU3RhdGU6c3RhdGVdOwogICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07
CiB9CiAKIHZvaWQgU2V0RGVwdGhCaWFzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgZmxvYXQg
ZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgc2xvcGVTY2Fs
ZSA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgY2xhbXAgICAgICA9IHN0cmVh
bS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgYXV0byBkZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxm
bG9hdD4oKTsKKyAgICBhdXRvIHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOwor
ICAgIGF1dG8gY2xhbXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CiAgICAgW2VuY29k
ZXIgc2V0RGVwdGhCaWFzOmRlcHRoQmlhcyBzbG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xh
bXBdOwogfQogCkBAIC0xMzQsMTMgKzEzOCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQog
CiB2b2lkIFNldFZpZXdwb3J0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMVmlld3BvcnQg
dmlld3BvcnQgPSBzdHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOworICAgIGF1dG8gdmlld3Bv
cnQgPSBzdHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOwogICAgIFtlbmNvZGVyIHNldFZpZXdw
b3J0OnZpZXdwb3J0XTsKIH0KIAogdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFt
KQogewotICAgIE1UTFNjaXNzb3JSZWN0IHJlY3QgPSBzdHJlYW0tPmZldGNoPE1UTFNjaXNzb3JS
ZWN0PigpOworICAgIGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7
CiAgICAgW2VuY29kZXIgc2V0U2Npc3NvclJlY3Q6cmVjdF07CiB9CiAKQEAgLTE1NSw5ICsxNTks
OSBAQCB2b2lkIFNldEJsZW5kQ29sb3JDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTEJ1ZmZlcj4gYnVmZmVyID0gc3RyZWFtLT5mZXRj
aDxpZDxNVExCdWZmZXI+PigpOwotICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5m
ZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1
ZmZlcj4+KCk7CisgICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgIGF1dG8gaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2Rl
ciBzZXRWZXJ0ZXhCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CiAg
ICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0xNjUsMjYgKzE2OSwyNiBAQCB2
b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZAogdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgdWludDMy
X3Qgb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbmRl
eCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFt
LT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVydGV4QnVmZmVyT2Zmc2V0Om9mZnNldCBhdElu
ZGV4OmluZGV4XTsKIH0KIAogdm9pZCBTZXRWZXJ0ZXhCeXRlc0NtZChpZDxNVExSZW5kZXJDb21t
YW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQog
ewotICAgIHNpemVfdCBzaXplICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7Ci0g
ICAgY29uc3QgdWludDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOwotICAgIHVpbnQz
Ml90IGluZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHNp
emUgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7CisgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CiAgICAgW2VuY29kZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDpp
bmRleF07CiB9CiAKIHZvaWQgU2V0VmVydGV4U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFNhbXBsZXJTdGF0
ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7Ci0gICAgZmxv
YXQgbG9kTWluQ2xhbXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxv
YXQgbG9kTWF4Q2xhbXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgdWlu
dDMyX3QgaW5kZXggICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAg
YXV0byBzdGF0ZSAgICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7
CisgICAgZmxvYXQgbG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGZs
b2F0IGxvZE1heENsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBhdXRvIGluZGV4
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVy
dGV4U2FtcGxlclN0YXRlOnN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1w
OmxvZE1pbkNsYW1wCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1heENsYW1wOmxvZE1heENs
YW1wCkBAIC0xOTUsMTcgKzE5OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIAogdm9pZCBTZXRWZXJ0ZXhUZXh0
dXJlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0
cmVhbS0+ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFt
LT5mZXRjaDxpZDxNVExUZXh0dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZl
dGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleFRleHR1cmU6dGV4dHVyZSBh
dEluZGV4OmluZGV4XTsKICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZv
aWQgU2V0RnJhZ21lbnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBpZDxNVExCdWZm
ZXI+IGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICB1aW50MzJf
dCBvZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3Qg
aW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gYnVmZmVy
ID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNl
dDpvZmZzZXQgYXRJbmRleDppbmRleF07CiAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07
CiB9CkBAIC0yMTMsMjYgKzIxNywyNiBAQCB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogdm9pZCBT
ZXRGcmFnbWVudEJ1ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbSAqc3RyZWFtKQogewotICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAg
YXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNl
dEZyYWdtZW50QnVmZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKIH0KIAogdm9pZCBT
ZXRGcmFnbWVudEJ5dGVzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgc2l6ZV90IHNpemUgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICBjb25zdCB1aW50OF90ICpieXRl
cyA9IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gc2l6ZSAgPSBzdHJlYW0tPmZldGNoPHNp
emVfdD4oKTsKKyAgICBhdXRvIGJ5dGVzID0gc3RyZWFtLT5mZXRjaChzaXplKTsKKyAgICBhdXRv
IGluZGV4ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFn
bWVudEJ5dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6aW5kZXhdOwogfQogCiB2b2lkIFNl
dEZyYWdtZW50U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5k
U3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVh
bS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRlPj4oKTsKLSAgICBmbG9hdCBsb2RNaW5DbGFtcCAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICBmbG9hdCBsb2RNYXhDbGFtcCAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHN0YXRlICAgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRlPj4oKTsKKyAgICBmbG9hdCBsb2RN
aW5DbGFtcCA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgZmxvYXQgbG9kTWF4Q2xhbXAg
PSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFt
LT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0
ZTpzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1w
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKQEAgLTI0
MiwyNiArMjQ2LDI2IEBAIHZvaWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAKIHZvaWQgU2V0RnJhZ21lbnRUZXh0dXJlQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRj
aDxpZDxNVExUZXh0dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldEZyYWdtZW50VGV4dHVyZTp0ZXh0dXJlIGF0SW5k
ZXg6aW5kZXhdOwogICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKIH0KIAogdm9pZCBE
cmF3Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVU
eXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IHZl
cnRleFN0YXJ0ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWlu
dDMyX3QgdmVydGV4Q291bnQgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+
KCk7CisgICAgYXV0byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICBhdXRvIHZlcnRleENvdW50ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAg
IFtlbmNvZGVyIGRyYXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUgdmVydGV4U3RhcnQ6dmVydGV4
U3RhcnQgdmVydGV4Q291bnQ6dmVydGV4Q291bnRdOwogfQogCiB2b2lkIERyYXdJbnN0YW5jZWRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUg
PSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4
U3RhcnQgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJf
dCB2ZXJ0ZXhDb3VudCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAg
IHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisgICAgYXV0byBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVU
eXBlPigpOworICAgIGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisgICAgYXV0byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICBhdXRvIGluc3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAg
IFtlbmNvZGVyIGRyYXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKICAgICAgICAgICAgICAgICB2
ZXJ0ZXhTdGFydDp2ZXJ0ZXhTdGFydAogICAgICAgICAgICAgICAgIHZlcnRleENvdW50OnZlcnRl
eENvdW50CkBAIC0yNzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAogCiB2
b2lkIERyYXdJbmRleGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlw
ZSBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAg
IHVpbnQzMl90IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7Ci0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxN
VExJbmRleFR5cGU+KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAg
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291
bnQgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNl
dCAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFBy
aW1pdGl2ZXM6cHJpbWl0aXZlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3Vu
dDppbmRleENvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlw
ZQpAQCAtMjg1LDEyICsyODksMTIgQEAgdm9pZCBEcmF3SW5kZXhlZENtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmUKIAogdm9pZCBE
cmF3SW5kZXhlZEluc3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2
ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsK
LSAgICB1aW50MzJfdCBpbmRleENvdW50ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQz
Ml90PigpOwotICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8TVRMSW5kZXhUeXBlPigpOwotICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9
IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0
ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0
YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8g
cHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBh
dXRvIGluZGV4Q291bnQgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8g
aW5kZXhUeXBlICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8g
aW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRv
IGJ1ZmZlck9mZnNldCAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAgICBhdXRvIGluc3Rh
bmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJ
bmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleENvdW50OmluZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6
aW5kZXhUeXBlCkBAIC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2Vk
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbwog
dm9pZCBEcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXhDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZl
VHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwot
ICAgIHVpbnQzMl90IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMy
X3Q+KCk7Ci0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRj
aDxNVExJbmRleFR5cGU+KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0g
c3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQg
ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOwotICAgIHVpbnQzMl90IGluc3Rh
bmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMy
X3QgYmFzZVZlcnRleCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7
CisgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICBhdXRvIGluZGV4VHlwZSAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4VHlwZT4oKTsKKyAg
ICBhdXRvIGluZGV4QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7Cisg
ICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0
byBpbnN0YW5jZXMgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGJh
c2VWZXJ0ZXggICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleENvdW50OmluZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5
cGU6aW5kZXhUeXBlCkBAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFu
Y2VkQmFzZVZlcnRleENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIHZv
aWQgU2V0VmlzaWJpbGl0eVJlc3VsdE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNv
bW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZSBtb2Rl
ID0gc3RyZWFtLT5mZXRjaDxNVExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKLSAgICBzaXplX3Qg
b2Zmc2V0ICAgICAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0
byBtb2RlICAgPSBzdHJlYW0tPmZldGNoPE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlPigpOworICAg
IGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0
VmlzaWJpbGl0eVJlc3VsdE1vZGU6bW9kZSBvZmZzZXQ6b2Zmc2V0XTsKIH0KIAogdm9pZCBVc2VS
ZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFJlc291cmNlPiByZXNvdXJj
ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVzb3VyY2U+PigpOwotICAgIE1UTFJlc291cmNlVXNh
Z2UgdXNhZ2UgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsKLSAgICBtdGw6
OlJlbmRlclN0YWdlcyBzdGFnZXMgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigp
OworICAgIGF1dG8gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsK
KyAgICBhdXRvIHVzYWdlICAgID0gc3RyZWFtLT5mZXRjaDxNVExSZXNvdXJjZVVzYWdlPigpOwor
ICAgIGF1dG8gc3RhZ2VzICAgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOwog
ICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShzdGFnZXMpOwogI2lmIGRlZmluZWQoX19JUEhPTkVf
MTNfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNSkKICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMuMCkpCkBAIC0zNTEsOSArMzU1LDkgQEAgdm9pZCBVc2VS
ZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0cmUKIHZvaWQgTWVtb3J5QmFycmllcldpdGhSZXNvdXJjZUNtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRM
UmVzb3VyY2U+IHJlc291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7Ci0g
ICAgbXRsOjpSZW5kZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKLSAgICBtdGw6OlJlbmRlclN0YWdlcyBiZWZvcmUgPSBzdHJlYW0tPmZldGNoPG10
bDo6UmVuZGVyU3RhZ2VzPigpOworICAgIGF1dG8gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFJlc291cmNlPj4oKTsKKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6
OlJlbmRlclN0YWdlcz4oKTsKKyAgICBhdXRvIGJlZm9yZSAgID0gc3RyZWFtLT5mZXRjaDxtdGw6
OlJlbmRlclN0YWdlcz4oKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYWZ0ZXIpOwogICAg
IEFOR0xFX1VOVVNFRF9WQVJJQUJMRShiZWZvcmUpOwogI2lmIGRlZmluZWQoX19NQUNfMTBfMTQp
ICYmIChUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkKQEAgLTM2OCw5ICsz
NzIsMTYgQEAgdm9pZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07
CiB9CiAKK3ZvaWQgSW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCit7CisgICAgYXV0
byBsYWJlbCA9IHN0cmVhbS0+ZmV0Y2g8TlNTdHJpbmcgKj4oKTsKKyAgICBbZW5jb2RlciBpbnNl
cnREZWJ1Z1NpZ25wb3N0OmxhYmVsXTsKKyAgICBbbGFiZWwgQU5HTEVfTVRMX1JFTEVBU0VdOwor
fQorCiB2b2lkIFB1c2hEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTlNTdHJp
bmcgKmxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgIGF1dG8gbGFiZWwg
PSBzdHJlYW0tPmZldGNoPE5TU3RyaW5nICo+KCk7CiAgICAgW2VuY29kZXIgcHVzaERlYnVnR3Jv
dXA6bGFiZWxdOwogICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0zODgsNyAr
Mzk5LDcgQEAgY29uc3RleHByIENvbW1hbmRFbmNvZGVyRnVuYyBnQ29tbWFuZEVuY29kZXJzW10g
PSB7QU5HTEVfTVRMX0NNRF9YKEFOR0xFX01UTF9DTUQKIAogTlNTdHJpbmcgKmNwcExhYmVsVG9P
YmpDKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKKyAgICBhdXRv
IGxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsK
ICAgICBpZiAoIWxhYmVsKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRo
ZSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgYXNjaWkgc3RyaW5nLgpAQCAtMzk2LDcgKzQwNyw2IEBA
IE5TU3RyaW5nICpjcHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQogICAg
IH0KICAgICByZXR1cm4gbGFiZWw7CiB9Ci0KIH0KIAogLy8gQ29tbWFuZFF1ZXVlIGltcGxlbWVu
dGF0aW9uCkBAIC01NjUsMTEgKzU3NSwxMSBAQCBDb21tYW5kQnVmZmVyOjp+Q29tbWFuZEJ1ZmZl
cigpCiAgICAgY2xlYW51cCgpOwogfQogCi1ib29sIENvbW1hbmRCdWZmZXI6OnJlYWR5KCkgY29u
c3QKK2Jvb2wgQ29tbWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAogewogICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CiAKLSAgICByZXR1cm4gcmVhZHlJbXBsKCk7Cisg
ICAgcmV0dXJuIHZhbGlkSW1wbCgpOwogfQogCiB2b2lkIENvbW1hbmRCdWZmZXI6OmNvbW1pdCgp
CkBAIC01OTgsNyArNjA4LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpzZXRXcml0ZURlcGVuZGVu
Y3koY29uc3QgUmVzb3VyY2VSZWYgJnJlc291cmNlKQogCiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAotICAgIGlmICghcmVhZHlJbXBsKCkpCisgICAgaWYgKCF2
YWxpZEltcGwoKSkKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MjAsNyArNjMw
LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpzZXRSZWFkRGVwZW5kZW5jeShSZXNvdXJjZSAqcmVz
b3VyY2UpCiAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOwogCi0g
ICAgaWYgKCFyZWFkeUltcGwoKSkKKyAgICBpZiAoIXZhbGlkSW1wbCgpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgQ29tbWFuZEJ1ZmZl
cjo6cmVzdGFydCgpCiAgICAgQVNTRVJUKG1ldGFsQ21kQnVmZmVyKTsKIH0KIAotdm9pZCBDb21t
YW5kQnVmZmVyOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2
ZW50LCB1aW50NjRfdCB2YWx1ZSkKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW5zZXJ0RGVidWdTaWdu
KGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxnKG1Mb2NrKTsKLQotICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Ci0KLSAgICBpZiAo
bUFjdGl2ZUNvbW1hbmRFbmNvZGVyICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgp
ID09IENvbW1hbmRFbmNvZGVyOjpSRU5ERVIpCisgICAgbXRsOjpDb21tYW5kRW5jb2RlciAqY3Vy
cmVudEVuY29kZXIgPSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisgICAgaWYgKGN1cnJlbnRFbmNv
ZGVyKQogICAgIHsKLSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVudCB3aGVuIHRoZXJlIGlz
IGFuIGFjdGl2ZSByZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcgdW50aWwgdGhlCi0gICAg
ICAgIC8vIHBhc3MgZW5kLgotICAgICAgICBtUGVuZGluZ1NpZ25hbEV2ZW50cy5wdXNoX2JhY2so
e2V2ZW50LCB2YWx1ZX0pOworICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2VyKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOworICAgICAgICB9
CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFs
dWUpOworICAgICAgICBtUGVuZGluZ0RlYnVnU2lnbnMucHVzaF9iYWNrKG1hcmtlcik7CiAgICAg
fQogfQogCi12b2lkIENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRFdmVudChjb25zdCBtdGw6OlNo
YXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit2b2lkIENvbW1hbmRCdWZmZXI6
OnB1c2hEZWJ1Z0dyb3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKLSAgICBBU1NFUlQocmVhZHlJbXBsKCkp
OwotCi0gICAgd2FpdEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCiB9CiAKLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3Jv
dXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVi
dWdHcm91cCgpCiB7Ci0gICAgbURlYnVnR3JvdXBzLnB1c2hfYmFjayhtYXJrZXIpOworICAgIC8v
IE5PVEUoaHFsZSk6IHRvIGltcGxlbWVudCB0aGlzCit9CiAKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6
cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0
X3QgdmFsdWUpCit7CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsK
IAotICAgIGlmIChyZWFkeUltcGwoKSkKKyAgICBBU1NFUlQodmFsaWRJbXBsKCkpOworCisgICAg
aWYgKG1BY3RpdmVDb21tYW5kRW5jb2RlciAmJiBtQWN0aXZlQ29tbWFuZEVuY29kZXItPmdldFR5
cGUoKSA9PSBDb21tYW5kRW5jb2Rlcjo6UkVOREVSKQogICAgIHsKLSAgICAgICAgcHVzaERlYnVn
R3JvdXBJbXBsKG1hcmtlcik7CisgICAgICAgIC8vIFdlIGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0
aGVyZSBpcyBhbiBhY3RpdmUgcmVuZGVyIHBhc3MsIGRlZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRo
ZQorICAgICAgICAvLyBwYXNzIGVuZC4KKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMucHVz
aF9iYWNrKHtldmVudCwgdmFsdWV9KTsKICAgICB9Ci19Ci0KLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6
cG9wRGVidWdHcm91cCgpCi17Ci0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHkoKSkKKyAgICBl
bHNlCiAgICAgewotICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsKKyAgICAgICAgc2V0
RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CiAgICAgfQorfQogCit2b2lkIENvbW1hbmRCdWZmZXI6
OnNlcnZlcldhaXRFdmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0
X3QgdmFsdWUpCit7CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsK
KyAgICBBU1NFUlQodmFsaWRJbXBsKCkpOwogCi0gICAgaWYgKHJlYWR5SW1wbCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7
CiB9CiAKIC8qKiBwcml2YXRlIHVzZSBvbmx5ICovCkBAIC03MDksNiArNzE5LDE1IEBAIHZvaWQg
Q29tbWFuZEJ1ZmZlcjo6c2V0KGlkPE1UTENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKQogdm9p
ZCBDb21tYW5kQnVmZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAq
ZW5jb2RlcikKIHsKICAgICBtQWN0aXZlQ29tbWFuZEVuY29kZXIgPSBlbmNvZGVyOworICAgIGZv
ciAoYXV0byAmbWFya2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorICAgIHsKKyAgICAgICAgQU5H
TEVfTVRMX09CSkNfU0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsYWJlbCA9IGNw
cExhYmVsVG9PYmpDKG1hcmtlcik7CisgICAgICAgICAgICBlbmNvZGVyLT5pbnNlcnREZWJ1Z1Np
Z24obGFiZWwpOworICAgICAgICB9CisgICAgfQorICAgIG1QZW5kaW5nRGVidWdTaWducy5jbGVh
cigpOwogfQogCiB2b2lkIENvbW1hbmRCdWZmZXI6OmludmFsaWRhdGVBY3RpdmVDb21tYW5kRW5j
b2RlcihDb21tYW5kRW5jb2RlciAqZW5jb2RlcikKQEAgLTcyOSw3ICs3NDgsNyBAQCB2b2lkIENv
bW1hbmRCdWZmZXI6OmNsZWFudXAoKQogICAgIFBhcmVudENsYXNzOjpzZXQobmlsKTsKIH0KIAot
Ym9vbCBDb21tYW5kQnVmZmVyOjpyZWFkeUltcGwoKSBjb25zdAorYm9vbCBDb21tYW5kQnVmZmVy
Ojp2YWxpZEltcGwoKSBjb25zdAogewogICAgIGlmICghUGFyZW50Q2xhc3M6OnZhbGlkKCkpCiAg
ICAgewpAQCAtNzQxLDcgKzc2MCw3IEBAIGJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkg
Y29uc3QKIAogdm9pZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKIHsKLSAgICBpZiAoIXJl
YWR5SW1wbCgpKQorICAgIGlmICghdmFsaWRJbXBsKCkpCiAgICAgewogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtODg5LDYgKzkwOCwxNyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BEZWJ1
Z0dyb3VwKCkKICAgICBbZ2V0KCkgcG9wRGVidWdHcm91cF07CiB9CiAKK3ZvaWQgQ29tbWFuZEVu
Y29kZXI6Omluc2VydERlYnVnU2lnbihOU1N0cmluZyAqbGFiZWwpCit7CisgICAgaW5zZXJ0RGVi
dWdTaWduSW1wbChsYWJlbCk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVn
U2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKQoreworICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRp
b24KKyAgICBbZ2V0KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07Cit9CisKIC8vIFJlbmRl
ckNvbW1hbmRFbmNvZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCiBSZW5kZXJDb21tYW5k
RW5jb2RlclNoYWRlclN0YXRlczo6UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXMoKQog
ewpAQCAtOTUxLDYgKzk4MSw5IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJl
c2V0KCkKICAgICB7CiAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOwogICAgIH0KKworICAg
IHZpc2liaWxpdHlSZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZURp
c2FibGVkOworICAgIHZpc2liaWxpdHlSZXN1bHRCdWZmZXJPZmZzZXQgPSAwOwogfQogCiAvLyBS
ZW5kZXJDb21tYW5kRW5jb2RlciBpbXBsZW10YXRpb24KQEAgLTEwMTQsMTEgKzEwNDcsMTIgQEAg
dm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oCiAgICAg
ewogICAgICAgICBpZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1U
TFN0b3JlQWN0aW9uU3RvcmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEUoaHFsZSk6
IEN1cnJlbnRseSBpZiB0aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1wbGljaXQgTVMgdGV4dHVyZSBp
cwotICAgICAgICAgICAgLy8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxs
eSBjb252ZXJ0IHRvIHN0b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKLSAgICAgICAgICAgIC8v
IG1pZ2h0IGludHJvZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gQ29uc2lkZXIgYW4gaW1wcm92
ZW1lbnQgc3VjaCBhcyBvbmx5IHN0b3JlIHRoZQotICAgICAgICAgICAgLy8gTVMgdGV4dHVyZSwg
YW5kIHJlc29sdmUgb25seSBhdCB0aGUgZW5kIG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5k
ZXIgcGFzcyB0aGUgaXMKLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFz
cykgb3IgYmVmb3JlIGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisgICAgICAg
ICAgICAvLyBOT1RFKGhxbGUpOiBDdXJyZW50bHkgaWYgdGhlIHN0b3JlIGFjdGlvbiB3aXRoIGlt
cGxpY2l0IE1TIHRleHR1cmUgaXMgTVRMU3RvcmVBY3Rpb24sCisgICAgICAgICAgICAvLyBpdCBp
cyBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gc3RvcmUgYW5kIHJlc29sdmUgYWN0aW9uLiBJdCBt
aWdodCBpbnRyb2R1Y2UKKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorICAg
ICAgICAgICAgLy8gQ29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBhcyBvbmx5IHN0b3JlIHRo
ZSBNUyB0ZXh0dXJlLCBhbmQgcmVzb2x2ZSBvbmx5IGF0CisgICAgICAgICAgICAvLyB0aGUgZW5k
IG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUgd2FzIGludGVycnVwdGVk
IGJ5IGNvbXB1dGUgcGFzcykKKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1
ZmZlciBvcGVyYXRpb24gc3RhcnRzLgogICAgICAgICAgICAgb2JqQ1JlbmRlclBhc3NBdHRhY2ht
ZW50LnN0b3JlQWN0aW9uID0gTVRMU3RvcmVBY3Rpb25TdG9yZUFuZE11bHRpc2FtcGxlUmVzb2x2
ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQu
c3RvcmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKQEAgLTEwMzYsNiArMTA3MCwx
MSBAQCB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbigK
IH0KIAogdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQoreworICAgIGVu
ZEVuY29kaW5nSW1wbCh0cnVlKTsKK30KKwordm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmdJbXBsKGJvb2wgY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKIHsKICAgICBpZiAo
IXZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQogICAgICAgICBmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbihvYmpDUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CiAgICAg
fQogCi0gICAgLy8gVXBkYXRlIGRlcHRoIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0
KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAvLyBVcGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3
ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQogICAgIG9iakNSZW5kZXJQYXNzRGVzYy5k
ZXB0aEF0dGFjaG1lbnQuc3RvcmVBY3Rpb24gPSBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2ht
ZW50LnN0b3JlQWN0aW9uOwogICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQ
YXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQpOwogCi0gICAgLy8gVXBkYXRlIHN0ZW5jaWwgc3RvcmUg
YWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorICAgIC8vIFVw
ZGF0ZSBzdG9yZSBhY3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygp
CiAgICAgb2JqQ1JlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0K
ICAgICAgICAgbVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uOwog
ICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0
YWNobWVudCk7CkBAIC0xMDc1LDI2ICsxMTE0LDc4IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29k
ZXI6OmVuZEVuY29kaW5nKCkKIAogICAgIENvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZygpOwog
CisjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKyAgICBpZiAoY29u
c2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKKyAgICB7CisgICAgICAgIHNpbXVsYXRlRGlzY2FyZEZy
YW1lYnVmZmVyKCk7CisgICAgfQorI2VuZGlmCisKICAgICAvLyByZXNldCBzdGF0ZQogICAgIG1S
ZW5kZXJQYXNzRGVzYyA9IFJlbmRlclBhc3NEZXNjKCk7CiAgICAgbVN0YXRlQ2FjaGUucmVzZXQo
KTsKIH0KIAotaW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRBdHRhY2htZW50
V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJlY3QoCi0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFj
aG1lbnREZXNjICZhdHRhY2htZW50KQoraW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6
OmluaXRXcml0ZURlcGVuZGVuY3koY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBU
ZXh0dXJlUmVmIHRleHR1cmUgPSBhdHRhY2htZW50LnRleHR1cmU7CiAgICAgaWYgKHRleHR1cmUp
CiAgICAgewogICAgICAgICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7
CisgICAgfQorfQogCi0gICAgICAgIGNvbnN0IE1pcG1hcE5hdGl2ZUxldmVsICZtaXBMZXZlbCA9
IGF0dGFjaG1lbnQubGV2ZWw7Cit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpzaW11bGF0ZURp
c2NhcmRGcmFtZWJ1ZmZlcigpCit7CisgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBk
aXNjYXJkIG9wZXJhdGlvbiBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKyNpZiBBTkdMRV9N
VExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgorICAgIHN0ZDo6cmFuZG9tX2RldmljZSBy
ZDsgICAvLyBXaWxsIGJlIHVzZWQgdG8gb2J0YWluIGEgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1i
ZXIgZW5naW5lCisgICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNl
bm5lX3R3aXN0ZXJfZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKyAgICBzdGQ6OnVuaWZvcm1fcmVh
bF9kaXN0cmlidXRpb248ZmxvYXQ+IGRpcygwLjAsIDEuMGYpOworICAgIGJvb2wgaGFzRGlzY2Fy
ZCA9IGZhbHNlOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2Mu
bnVtQ29sb3JBdHRhY2htZW50czsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1SZW5kZXJQYXNz
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uRG9u
dENhcmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSB0cnVlOworICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNj
LmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKyAg
ICAgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3Ig
PQorICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3JNYWtlKGRpcyhnZW4pLCBkaXMoZ2VuKSwg
ZGlzKGdlbiksIGRpcyhnZW4pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rp
b24gPSBNVExMb2FkQWN0aW9uTG9hZDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBtUmVu
ZGVyUGFzc01heFNjaXNzb3JSZWN0LndpZHRoID0KLSAgICAgICAgICAgIHN0ZDo6bWluPE5TVUlu
dGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3Qud2lkdGgsIHRleHR1cmUtPndpZHRoKG1p
cExldmVsKSk7Ci0gICAgICAgIG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0ID0KLSAg
ICAgICAgICAgIHN0ZDo6bWluPE5TVUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3Qu
aGVpZ2h0LCB0ZXh0dXJlLT5oZWlnaHQobWlwTGV2ZWwpKTsKKyAgICBpZiAobVJlbmRlclBhc3NE
ZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJl
KQorICAgIHsKKyAgICAgICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gdHJ1ZTsKKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2Fk
QWN0aW9uID0gTVRMTG9hZEFjdGlvbkNsZWFyOworICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVw
dGhBdHRhY2htZW50LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0g
TVRMTG9hZEFjdGlvbkxvYWQ7CisgICAgfQorCisgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5zdGVu
Y2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAg
IHsKKyAgICAgICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IHRydWU7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2Fk
QWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5z
dGVuY2lsQXR0YWNobWVudC5jbGVhclN0ZW5jaWwgPSByYW5kKCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0
aW9uID0gTVRMTG9hZEFjdGlvbkxvYWQ7CiAgICAgfQorCisgICAgaWYgKGhhc0Rpc2NhcmQpCisg
ICAgeworICAgICAgICBhdXRvIHRtcERlc2MgPSBtUmVuZGVyUGFzc0Rlc2M7CisgICAgICAgIHJl
c3RhcnQodG1wRGVzYyk7CisgICAgICAgIGVuZEVuY29kaW5nSW1wbChmYWxzZSk7CisgICAgfQor
I2VuZGlmICAvLyBBTkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgogfQogCiB2
b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQpAQCAtMTEwMiw3
ICsxMTkzLDcgQEAgdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5jb2RlTWV0YWxFbmNvZGVy
KCkKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgQU5HTEVfTVRMX0xP
RygiQ3JlYXRpbmcgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIgd2l0aCBkZXNjOiAlQCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgbUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQy5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgW21DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRp
b25dKTsKIAogICAgICAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbWV0YWxDbWRFbmNv
ZGVyID0KICAgICAgICAgICAgIFtjbWRCdWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2Rl
cldpdGhEZXNjcmlwdG9yOm1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakNdOwpAQCAtMTExMCw3ICsx
MjAxLDExIEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcigp
CiAgICAgICAgIHNldChtZXRhbENtZEVuY29kZXIpOwogCiAgICAgICAgIC8vIFZlcmlmeSB0aGF0
IGl0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQotICAgICAgICBBU1NFUlQobWV0YWxDbWRFbmNv
ZGVyKTsKKyAgICAgICAgQVNTRVJUKGdldCgpKTsKKworICAgICAgICAvLyBXb3JrLWFyb3VuZCBk
cml2ZXIgYnVnIG9uIGlPUyBkZXZpY2VzOiBzdGVuY2lsIG11c3QgYmUgZXhwbGljaXRseSBzZXQg
dG8gemVybworICAgICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5cyB0aGUgZGVmYXVsdCB2YWx1
ZSBpcyBhbHJlYWR5IHplcm8uCisgICAgICAgIFttZXRhbENtZEVuY29kZXIgc2V0U3RlbmNpbFJl
ZmVyZW5jZVZhbHVlOjBdOwogCiAgICAgICAgIGlmIChtTGFiZWwpCiAgICAgICAgIHsKQEAgLTEx
MTksNyArMTIxNCw3IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5j
b2RlcigpCiAKICAgICAgICAgd2hpbGUgKG1Db21tYW5kcy5nb29kKCkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIENtZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNoPENt
ZFR5cGU+KCk7CisgICAgICAgICAgICBhdXRvIGNtZFR5cGUgICAgICAgICAgICAgICA9IG1Db21t
YW5kcy5mZXRjaDxDbWRUeXBlPigpOwogICAgICAgICAgICAgQ29tbWFuZEVuY29kZXJGdW5jIGVu
Y29kZXIgPSBnQ29tbWFuZEVuY29kZXJzW3N0YXRpY19jYXN0PGludD4oY21kVHlwZSldOwogICAg
ICAgICAgICAgZW5jb2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOwogICAgICAgICB9
CkBAIC0xMTQyLDQxICsxMjM3LDM0IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21t
YW5kRW5jb2Rlcjo6cmVzdGFydChjb25zdCBSZW5kZXJQYXNzRGVzYyAmZGVzYykKICAgICAgICAg
ZW5kRW5jb2RpbmcoKTsKICAgICB9CiAKLSAgICBpZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisg
ICAgaWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQogICAgIHsKICAgICAgICAgcmVzZXQoKTsKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIG1MYWJlbC5yZXNldCgpOworICAgIG1S
ZW5kZXJQYXNzRGVzYyA9IGRlc2M7CisgICAgbVJlY29yZGluZyAgICAgID0gdHJ1ZTsKKyAgICBt
SGFzRHJhd0NhbGxzICAgPSBmYWxzZTsKIAotICAgIG1SZW5kZXJQYXNzRGVzYyAgICAgICAgICAg
PSBkZXNjOwotICAgIG1SZWNvcmRpbmcgICAgICAgICAgICAgICAgPSB0cnVlOwotICAgIG1IYXNE
cmF3Q2FsbHMgICAgICAgICAgICAgPSBmYWxzZTsKLSAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JS
ZWN0ID0gey54ICAgICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnkg
ICAgICA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2lkdGggID0gc3Rk
OjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuaGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6
bWF4KCl9OwotCi0gICAgLy8gU2V0IHdyaXRpbmcgZGVwZW5kZW5jeSAmIGNvbnN0cmFpbiB0aGUg
c2Npc3NvciByZWN0CisgICAgLy8gbWFzayB3cml0aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9w
cmlhdGUgc3RvcmUgb3B0aW9ucwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVy
UGFzc0Rlc2MubnVtQ29sb3JBdHRhY2htZW50czsgKytpKQogICAgIHsKLSAgICAgICAgaW5pdEF0
dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29s
b3JBdHRhY2htZW50c1tpXSk7CisgICAgICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBh
c3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSgpKTsKICAgICB9CiAKLSAgICBpbml0
QXR0YWNobWVudFdyaXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KG1SZW5kZXJQYXNzRGVzYy5k
ZXB0aEF0dGFjaG1lbnQpOworICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpOwogCi0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURl
cGVuZGVuY3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQp
OworICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnRleHR1cmUoKSk7CiAKICAgICAvLyBDb252ZXJ0IHRvIE9iamVjdGl2ZS1DIGRlc2NyaXB0
b3IKICAgICBtUmVuZGVyUGFzc0Rlc2MuY29udmVydFRvTWV0YWxEZXNjKG1DYWNoZWRSZW5kZXJQ
YXNzRGVzY09iakMpOwogCi0gICAgLy8gVGhlIGFjdHVhbCBPYmplY3RpdmUtQyBlbmNvZGVyIHdp
bGwgYmUgY3JlYXRlZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBkbyBzbyBpbgotICAgIC8v
IG9yZGVyIHRvIGJlIGFibGUgdG8gc29ydCB0aGUgY29tbWFuZHMgb3IgZG8gdGhlIHByZXByb2Nl
c3NpbmcgYmVmb3JlIHRoZSBhY3R1YWwKLSAgICAvLyBlbmNvZGluZy4KKyAgICAvLyBUaGUgYWN0
dWFsIE9iamVjdGl2ZS1DIGVuY29kZXIgd2lsbCBiZSBjcmVhdGVkIGxhdGVyIGluIGVuZEVuY29k
aW5nKCksIHdlIGRvIHNvIGluIG9yZGVyCisgICAgLy8gdG8gYmUgYWJsZSB0byBzb3J0IHRoZSBj
b21tYW5kcyBvciBkbyB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUgdGhlIGFjdHVhbCBlbmNvZGlu
Zy4KIAotICAgIC8vIFNpbmNlIHdlIGRlZmVyIHRoZSBuYXRpdmUgZW5jb2RlciBjcmVhdGlvbiwg
d2UgbmVlZCB0byBleHBsaWNpdGx5IHRlbGwgY29tbWFuZCBidWZmZXIKLSAgICAvLyB0aGF0IHRo
aXMgb2JqZWN0IGlzIHRoZSBhY3RpdmUgZW5jb2RlcjoKKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0
aGUgbmF0aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNv
bW1hbmQgYnVmZmVyIHRoYXQKKyAgICAvLyB0aGlzIG9iamVjdCBpcyB0aGUgYWN0aXZlIGVuY29k
ZXI6CiAgICAgY21kQnVmZmVyKCkuc2V0QWN0aXZlQ29tbWFuZEVuY29kZXIodGhpcyk7CiAKICAg
ICByZXR1cm4gKnRoaXM7CkBAIC0xMzAyLDE2ICsxMzkwLDYgQEAgUmVuZGVyQ29tbWFuZEVuY29k
ZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpzZXRTY2lzc29yUmVjdChjb25zdCBNVExTY2lzc29y
UmVjdAogICAgIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLQotICAgIGlmIChBTkdM
RV9VTkxJS0VMWShyZWN0LnggKyByZWN0LndpZHRoID4gbVJlbmRlclBhc3NNYXhTY2lzc29yUmVj
dC53aWR0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0LmhlaWdodCA+
IG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIFdBUk4o
KSA8PCAiT3V0IG9mIGJvdW5kIHNjaXNzb3IgcmVjdCBkZXRlY3RlZCAiIDw8IHJlY3QueCA8PCAi
ICIgPDwgcmVjdC55IDw8ICIgIgotICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0aCA8PCAiICIg
PDwgcmVjdC5oZWlnaHQ7Ci0gICAgICAgIC8vIE91dCBvZiBib3VuZCByZWN0IHdpbGwgY3Jhc2gg
dGhlIG1ldGFsIHJ1bnRpbWUsIGlnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQogICAgIG1TdGF0ZUNhY2hlLnNjaXNzb3JSZWN0ID0gcmVjdDsKIAogICAgIG1Db21tYW5k
cy5wdXNoKENtZFR5cGU6OlNldFNjaXNzb3JSZWN0KS5wdXNoKHJlY3QpOwpAQCAtMTM4Myw3ICsx
NDYxLDcgQEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpjb21t
b25TZXRCdWZmZXIoZ2w6OlNoYWRlclR5cGUgc2hhZGUKICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3
aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZzZXQgb25seS4KKyAgICAg
ICAgLy8gSWYgYnVmZmVyIGFscmVhZHkgYm91bmQgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldCwg
dGhlbiB1cGRhdGUgdGhlIG9mZmVyIG9ubHkuCiAgICAgICAgIHNoYWRlclN0YXRlcy5idWZmZXJP
ZmZzZXRzW2luZGV4XSA9IG9mZnNldDsKIAogICAgICAgICBtQ29tbWFuZHMucHVzaChzdGF0aWNf
Y2FzdDxDbWRUeXBlPihtU2V0QnVmZmVyT2Zmc2V0Q21kc1tzaGFkZXJUeXBlXSkpCkBAIC0xNDkw
LDEyICsxNTY4LDYgQEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVy
OjpkcmF3KE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2
ZXJ0ZXhDb3VudCkKIHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRl
clBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwgaWYgdGhlcmUg
aXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotCiAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CiAgICAgbUNv
bW1hbmRzLnB1c2goQ21kVHlwZTo6RHJhdykucHVzaChwcmltaXRpdmVUeXBlKS5wdXNoKHZlcnRl
eFN0YXJ0KS5wdXNoKHZlcnRleENvdW50KTsKIApAQCAtMTUwNywxMiArMTU3OSw2IEBAIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luc3RhbmNlZChNVExQ
cmltaXRpdmVUeXBlIHByaW1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5z
dGFuY2VzKQogewotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlw
ZWxpbmUpKQotICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBu
byByZW5kZXIgcGlwZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCi0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KICAgICBtSGFzRHJhd0NhbGxzID0gdHJ1ZTsKICAgICBtQ29tbWFu
ZHMucHVzaChDbWRUeXBlOjpEcmF3SW5zdGFuY2VkKQogICAgICAgICAucHVzaChwcmltaXRpdmVU
eXBlKQpAQCAtMTUyOSwxMyArMTU5NSw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6ZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEJ1ZmZlclJlZiAmaW5kZXhCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCiB7Ci0gICAgaWYg
KEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAgewotICAg
ICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBz
dGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5kZXhCdWZm
ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTU2MCwxMyArMTYy
MCw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0lu
ZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKIHsKLSAgICBpZiAoQU5HTEVfVU5MSUtF
TFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8vIElnbm9y
ZSBkcmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlv
ciB0byB0aGlzLgotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKEFOR0xF
X1VOTElLRUxZKCFpbmRleEJ1ZmZlcikpCisgICAgaWYgKCFpbmRleEJ1ZmZlcikKICAgICB7CiAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xNTk0LDEzICsxNjQ4LDcgQEAgUmVuZGVy
Q29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNl
ZEJhc2VWZXJ0ZXgoCiAgICAgdWludDMyX3QgaW5zdGFuY2VzLAogICAgIHVpbnQzMl90IGJhc2VW
ZXJ0ZXgpCiB7Ci0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBl
bGluZSkpCi0gICAgewotICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5v
IHJlbmRlciBwaXBlbGluZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQor
ICAgIGlmICghaW5kZXhCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQpAQCAtMTY3Myw2ICsxNzIxLDEyIEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21t
YW5kRW5jb2Rlcjo6bWVtb3J5QmFycmllcldpdGhSZXNvdXJjZShjb25zdCBCdWZmCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z25JbXBsKE5TU3RyaW5nICpsYWJlbCkKK3sKKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVu
dGlsIGVuZEVuY29kaW5nKCkKKyAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpJbnNlcnREZWJ1
Z3NpZ24pLnB1c2goW2xhYmVsIEFOR0xFX01UTF9SRVRBSU5dKTsKK30KKwogdm9pZCBSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6cHVzaERlYnVnR3JvdXAoTlNTdHJpbmcgKmxhYmVsKQogewogICAgIC8v
IERlZmVyIHRoZSBpbnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQpAQCAtMTc5OSw3ICsxODUz
LDcgQEAgQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnJlc3RhcnQoKQog
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjbWRC
dWZmZXIoKS5yZWFkeSgpKQorICAgICAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CkBA
IC0xOTYyLDYgKzIwMTYsNjYgQEAgQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29k
ZXI6OmZpbGxCdWZmZXIoY29uc3QgQnVmZmVyUmVmICZidWZmZXIsCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCitCbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1
cmUoY29uc3QgVGV4dHVyZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjU3Rh
cnRMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUZXh0dXJlUmVmICZkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RT
dGFydExldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNsaWNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKK3sKKyAgICBpZiAo
IXNyYyB8fCAhZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IGNtZEJ1ZmZlcigpLnNldFJlYWREZXBlbmRlbmN5KHNyYyk7CisgICAgY21kQnVmZmVyKCkuc2V0
V3JpdGVEZXBlbmRlbmN5KGRzdCk7CisKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRl
ZmluZWQoX19NQUNfMTBfMTUpCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTUsIDEzLjAsIDEzLjApKQorICAgIHsKKyAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpz
cmMtPmdldCgpCisgICAgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c3JjU3RhcnRTbGljZQor
ICAgICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2ZWwKKyAgICAgICAgICAg
ICAgICAgICAgIHRvVGV4dHVyZTpkc3QtPmdldCgpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
U2xpY2U6ZHN0U3RhcnRTbGljZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdFN0
YXJ0TGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2xpY2VDb3VudDpzbGljZUNvdW50CisgICAg
ICAgICAgICAgICAgICAgIGxldmVsQ291bnQ6bGV2ZWxDb3VudF07CisgICAgfQorICAgIGVsc2UK
KyNlbmRpZgorICAgIHsKKyAgICAgICAgTVRMT3JpZ2luIG9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uo
MCwgMCwgMCk7CisgICAgICAgIGZvciAodWludDMyX3Qgc2xpY2UgPSAwOyBzbGljZSA8IHNsaWNl
Q291bnQ7ICsrc2xpY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNl
ID0gc3JjU3RhcnRTbGljZSArIHNsaWNlOworICAgICAgICAgICAgdWludDMyX3QgZHN0U2xpY2Ug
PSBkc3RTdGFydFNsaWNlICsgc2xpY2U7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVs
ID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyArK2xldmVsKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgc3JjTGV2ZWwgPSBtdGw6Ok1pcG1hcE5h
dGl2ZUxldmVsKHNyY1N0YXJ0TGV2ZWwgKyBsZXZlbCk7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgZHN0TGV2ZWwgPSBkc3RTdGFydExldmVsICsgbGV2ZWw7CisgICAgICAgICAgICAgICAgTVRM
U2l6ZSBzcmNTaXplID0KKyAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2Uoc3JjLT53aWR0
aChzcmNMZXZlbCksIHNyYy0+aGVpZ2h0KHNyY0xldmVsKSwgc3JjLT5kZXB0aChzcmNMZXZlbCkp
OworCisgICAgICAgICAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzcmNTbGljZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOm9yaWdpbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVNpemU6c3JjU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b1RleHR1cmU6ZHN0LT5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xp
Y2U6ZHN0U2xpY2UKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdExl
dmVsCisgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCiBC
bGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9y
VGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkK
QEAgLTE5NzQsNyArMjA4OCw3IEBAIEJsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNv
ZGVyOjpnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1cmVSCiAKICAgICByZXR1
cm4gKnRoaXM7CiB9Ci1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3lu
Y2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlcikKK0JsaXRDb21tYW5kRW5jb2RlciAmQmxp
dENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IEJ1ZmZlclJlZiAmYnVm
ZmVyKQogewogICAgIGlmICghYnVmZmVyKQogICAgIHsKQEAgLTE5ODksNyArMjEwMyw3IEBAIEJs
aXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNl
KEJ1ZmZlciAqYnVmZmVyKQogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQotQmxpdENvbW1h
bmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoVGV4dHVy
ZSAqdGV4dHVyZSkKK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5j
aHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCiB7CiAgICAgaWYgKCF0
ZXh0dXJlKQogICAgIHsKQEAgLTIwMjgsNyArMjE0Miw3IEBAIENvbXB1dGVDb21tYW5kRW5jb2Rl
ciAmQ29tcHV0ZUNvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKyAg
ICAgICAgaWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXNldCgpOwogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Y29tbW9uLmgKaW5kZXggOTdjY2I5M2Y5NmMyNmM0ZmZiOTY2OTkzZWZiYTQxYmEzZjE2ZjRmOC4u
M2ZjNWUzOWQxNzhjMDE0MGFhZTI3ODQ1MzcxMzlhOGQ0MWMwNmZiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21t
b24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2NvbW1vbi5oCkBAIC0yNyw5ICsyNywxOCBAQAogI2luY2x1ZGUgImxpYkFOR0xF
L2FuZ2xldHlwZXMuaCIKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKKyMgICAgaWYgIWRlZmluZWQo
X19JUEhPTkVfMTFfMCkKKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV8xMV8wIDExMDAwMAorIyAg
ICBlbmRpZgogIyAgICBpZiAhZGVmaW5lZChBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCkKICMgICAg
ICAgIGRlZmluZSBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCBfX0lQSE9ORV8xMV8wCiAjICAgIGVu
ZGlmCisjICAgIGlmICFkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisj
ICAgICAgICBkZWZpbmUgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8x
MV8wCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxM
T1dFRCkKKyMgICAgICAgIGRlZmluZSBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgX19JUEhP
TkVfMTFfMAorIyAgICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QpCkBAIC02Niw2ICs3NSw3IEBAIG5hbWVzcGFjZSBlZ2wKIHsKIGNsYXNzIERpc3Bs
YXk7CiBjbGFzcyBJbWFnZTsKK2NsYXNzIFN1cmZhY2U7CiB9ICAvLyBuYW1lc3BhY2UgZWdsCiAK
ICNkZWZpbmUgQU5HTEVfR0xfT0JKRUNUU19YKFBST0MpIFwKQEAgLTEwMiw2ICsxMTIsNyBAQCBj
bGFzcyBUZXh0dXJlTXRsOwogY2xhc3MgUHJvZ3JhbU10bDsKIGNsYXNzIFNhbXBsZXJNdGw7CiBj
bGFzcyBUcmFuc2Zvcm1GZWVkYmFja010bDsKK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKIAog
QU5HTEVfR0xfT0JKRUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCiAKQEAgLTEy
OCw3ICsxMzksOCBAQCBjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQg
KiBzaXplb2YoZmxvYXQpOwogLy8gTWV0YWwgbGltaXRzCiBjb25zdGV4cHIgdWludDMyX3Qga01h
eFNoYWRlckJ1ZmZlcnMgICAgID0gMzE7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclNh
bXBsZXJzICAgID0gMTY7Ci1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXpl
ID0gNCAqIDEwMjQ7Citjb25zdGV4cHIgc2l6ZV90IGtJbmxpbmVDb25zdERhdGFNYXhTaXplID0g
NCAqIDEwMjQ7Citjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lu
bGluZUNvbnN0RGF0YU1heFNpemU7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAg
ICAgICAgID0gMTsKIAogY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJp
ZGVBbGlnbm1lbnQgPSA0OwpAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OwogY29uc3RleHByIHVpbnQzMl90
IGtBcmd1bWVudEJ1ZmZlck9mZnNldEFsaWdubWVudCAgICA9IGtVbmlmb3JtQnVmZmVyU2V0dGlu
Z09mZnNldE1pbkFsaWdubWVudDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVyZVRvQnVmZmVy
QmxpdHRpbmdBbGlnbm1lbnQgPSAyNTY7CiAKLS8vIEZyb250IGVuZCBiaW5kaW5nIGxpbWl0cwor
Ly8gRm9udCBlbmQgYmluZGluZyBsaW1pdHMKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1w
bGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOwogY29uc3RleHByIHVpbnQzMl90
IGtNYXhHTFVCT0JpbmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKIApAQCAtMTU1LDIx
ICsxNjcsMjMgQEAgY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRl
eCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtNYXhWZXIKIGNvbnN0ZXhwciB1aW50MzJfdCBr
RHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPSBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXgg
KyAxOwogLy8gQmluZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKIGNvbnN0ZXhwciB1
aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmlu
ZGluZ0luZGV4ICsgMzsKLS8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZl
ciBvciBzdGFydGluZyBkaXNjcmV0ZSBzbG90Ci1jb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3Vt
ZW50QnVmZmVyQmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7
CisvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKK2Nv
bnN0ZXhwciB1aW50MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5kZXggPSBrRGVmYXVs
dFVuaWZvcm1zQmluZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIHNoYWRvdyBz
YW1wbGVycycgY29tcGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVy
Q29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4
ICsgNDsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlcgorY29uc3Rl
eHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtTaGFkb3dTYW1w
bGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKIAotY29uc3RleHByIHVpbnQzMl90IGtT
dGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2lsIGlzIHN1cHBvcnRl
ZAorY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDgg
Yml0IHN0ZW5jaWwgaXMgc3VwcG9ydGVkCiAKIC8vIFRoaXMgc3BlY2lhbCBjb25zdGFudCBpcyB1
c2VkIHRvIGluZGljYXRlIHRoYXQgYSBwYXJ0aWN1bGFyIHZlcnRleCBkZXNjcmlwdG9yJ3MgYnVm
ZmVyIGxheW91dAogLy8gaW5kZXggaXMgdW51c2VkLgogY29uc3RleHByIE1UTFZlcnRleFN0ZXBG
dW5jdGlvbiBrVmVydGV4U3RlcEZ1bmN0aW9uSW52YWxpZCA9CiAgICAgc3RhdGljX2Nhc3Q8TVRM
VmVydGV4U3RlcEZ1bmN0aW9uPigweGZmKTsKIAotY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBo
YVZhbHVlID0gMTsKLQotY29uc3RleHByIHNpemVfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXpl
ID0gc2l6ZW9mKHVpbnQ2NF90KTsKK2NvbnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVl
ID0gMS4wZjsKIAotY29uc3RleHByIGdsOjpWZXJzaW9uIGtNYXhTdXBwb3J0ZWRHTFZlcnNpb24g
PSBnbDo6VmVyc2lvbigzLCAwKTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlS
ZXN1bHRTaXplID0gc2l6ZW9mKHVpbnQ2NF90KTsKIAogLy8gV29yay1hcm91bmQgdGhlIGVudW0g
aXMgbm90IGF2YWlsYWJsZSBvbiBtYWNPUwogI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09T
X01BQ0NBVEFMWVNUCkBAIC0xNzksMTMgKzE5MywxMSBAQCBjb25zdGV4cHIgTVRMQmxpdE9wdGlv
biBrQmxpdE9wdGlvblJvd0xpbmVhclBWUlRDICAgICAgICAgID0gTVRMQmxpdE9wdGlvblJvd0xp
bgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNf
MTBfMTUpCi0jICAgIGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMQogdXNpbmcg
VGV4dHVyZVN3aXp6bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6
emxlQ2hhbm5lbHM7CiB1c2luZyBSZW5kZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gTVRMUmVuZGVyU3RhZ2VzOwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVuZGVy
U3RhZ2VWZXJ0ZXggICA9IE1UTFJlbmRlclN0YWdlVmVydGV4OwogY29uc3RleHByIE1UTFJlbmRl
clN0YWdlcyBrUmVuZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CiAj
ZWxzZQotIyAgICBkZWZpbmUgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFIDAKIHVzaW5nIFRl
eHR1cmVTd2l6emxlQ2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7
CiB1c2luZyBSZW5kZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gaW50OwogY29uc3RleHByIFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICAg
ICAgICAgICAgICAgICA9IDE7CkBAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVI
ZWxwZXI8ZWdsOjpEaXNwbGF5PgogewogICAgIHVzaW5nIEltcGxUeXBlID0gRGlzcGxheU10bDsK
IH07Ci0KK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNlPgor
eworICAgIHVzaW5nIEltcGxUeXBlID0gU3VyZmFjZU10bFByb3RvY29sOworfTsKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgogdXNpbmcgR2V0SW1wbFR5cGUgPSB0eXBlbmFtZSBJbXBsVHlwZUhlbHBl
cjxUPjo6SW1wbFR5cGU7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotR2V0SW1wbFR5cGU8VD4g
KkdldEltcGwoY29uc3QgVCAqX05vbm51bGwgZ2xPYmplY3QpCitHZXRJbXBsVHlwZTxUPiAqR2V0
SW1wbChjb25zdCBUICpnbE9iamVjdCkKIHsKICAgICByZXR1cm4gR2V0SW1wbEFzPEdldEltcGxU
eXBlPFQ+PihnbE9iamVjdCk7CiB9CkBAIC0zNDYsMjEgKzM2MiwxNiBAQCB1c2luZyBBdXRvT2Jq
Q09iaiA9IEF1dG9PYmpDUHRyPFQgKj47CiAKIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9ubHkg
ZGVjbGFyZWQgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKICNpZiBkZWZpbmVkKF9fSVBIT05F
XzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZF
TlRfQVZBSUxBQkxFIDEKIHVzaW5nIFNoYXJlZEV2ZW50UmVmID0gQXV0b09iakNQdHI8aWQ8TVRM
U2hhcmVkRXZlbnQ+PjsKICNlbHNlCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxB
QkxFIDAKIHVzaW5nIFNoYXJlZEV2ZW50UmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBBdXRvT2JqQ09iajxOU09iamVjdD47CiAjZW5kaWYKIAogLy8gVGhlIG5hdGl2
ZSBpbWFnZSBpbmRleCB1c2VkIGJ5IE1ldGFsIGJhY2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVz
ZXMgbmF0aXZlIG1pcG1hcCBsZXZlbCBpbnN0ZWFkCiAvLyBvZiAidmlydHVhbCIgbGV2ZWwgbW9k
aWZpZWQgYnkgT3BlbkdMJ3MgYmFzZSBsZXZlbC4KIHVzaW5nIE1pcG1hcE5hdGl2ZUxldmVsID0g
Z2w6OkxldmVsSW5kZXhXcmFwcGVyPHVpbnQzMl90PjsKLQogY29uc3RleHByIE1pcG1hcE5hdGl2
ZUxldmVsIGtaZXJvTmF0aXZlTWlwTGV2ZWwoMCk7Ci0KIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJ
dGVyYXRvcjsKLQogY2xhc3MgSW1hZ2VOYXRpdmVJbmRleCBmaW5hbAogewogICBwdWJsaWM6CkBA
IC0zNzAsNTUgKzM4MSw0MiBAQCBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4IGZpbmFsCiAgICAgICAg
IG1OYXRpdmVJbmRleCA9IGdsOjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUo
KSwgc3JjLmdldExldmVsSW5kZXgoKSAtIGJhc2VMZXZlbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0TGF5ZXJJbmRleCgpLCBzcmMu
Z2V0TGF5ZXJDb3VudCgpKTsKICAgICB9Ci0KICAgICBzdGF0aWMgSW1hZ2VOYXRpdmVJbmRleCBG
cm9tQmFzZVplcm9HTEluZGV4KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZzcmMpCiAgICAgewogICAg
ICAgICByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOwogICAgIH0KLQogICAgIE1pcG1h
cE5hdGl2ZUxldmVsIGdldE5hdGl2ZUxldmVsKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBNaXBtYXBOYXRpdmVMZXZlbChtTmF0aXZlSW5kZXguZ2V0TGV2ZWxJbmRleCgpKTsKICAgICB9
Ci0KICAgICBnbDo6VGV4dHVyZVR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJ
bmRleC5nZXRUeXBlKCk7IH0KICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1
cm4gbU5hdGl2ZUluZGV4LmdldExheWVySW5kZXgoKTsgfQogICAgIEdMaW50IGdldExheWVyQ291
bnQoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXguZ2V0TGF5ZXJDb3VudCgpOyB9CiAgICAg
R0xpbnQgY3ViZU1hcEZhY2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5jdWJl
TWFwRmFjZUluZGV4KCk7IH0KLQogICAgIGJvb2wgaXNMYXllcmVkKCkgY29uc3QgeyByZXR1cm4g
bU5hdGl2ZUluZGV4LmlzTGF5ZXJlZCgpOyB9CiAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1OYXRpdmVJbmRleC5oYXNMYXllcigpOyB9CiAgICAgYm9vbCBoYXMzRExheWVyKCkg
Y29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQogICAgIGJvb2wgdXNl
c1RleDNEKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnVzZXNUZXgzRCgpOyB9Ci0KICAg
ICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7IH0KLQog
ICAgIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvciBnZXRMYXllckl0ZXJhdG9yKEdMaW50IGxheWVy
Q291bnQpIGNvbnN0OwotCiAgIHByaXZhdGU6CiAgICAgZ2w6OkltYWdlSW5kZXggbU5hdGl2ZUlu
ZGV4OwogfTsKLQogY2xhc3MgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGZpbmFsCiB7CiAgIHB1
YmxpYzoKICAgICBJbWFnZU5hdGl2ZUluZGV4IG5leHQoKSB7IHJldHVybiBJbWFnZU5hdGl2ZUlu
ZGV4KG1OYXRpdmVJbmRleEl0ZS5uZXh0KCksIDApOyB9CiAgICAgSW1hZ2VOYXRpdmVJbmRleCBj
dXJyZW50KCkgY29uc3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChtTmF0aXZlSW5kZXhJdGUu
Y3VycmVudCgpLCAwKTsgfQogICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleEl0ZS5oYXNOZXh0KCk7IH0KLQogICBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3Mg
aXMgb25seSBjb25zdHJ1Y3RhYmxlIGZyb20gSW1hZ2VOYXRpdmVJbmRleAogICAgIGZyaWVuZCBj
bGFzcyBJbWFnZU5hdGl2ZUluZGV4OwotCiAgICAgZXhwbGljaXQgSW1hZ2VOYXRpdmVJbmRleEl0
ZXJhdG9yKGNvbnN0IGdsOjpJbWFnZUluZGV4SXRlcmF0b3IgJmJhc2VaZXJvU3JjKQogICAgICAg
ICA6IG1OYXRpdmVJbmRleEl0ZShiYXNlWmVyb1NyYykKICAgICB7fQotCiAgICAgZ2w6OkltYWdl
SW5kZXhJdGVyYXRvciBtTmF0aXZlSW5kZXhJdGU7CiB9OwotCiB1c2luZyBDbGVhckNvbG9yVmFs
dWVCeXRlcyA9IHN0ZDo6YXJyYXk8dWludDhfdCwgNCAqIHNpemVvZihmbG9hdCk+OwotCiBjbGFz
cyBDbGVhckNvbG9yVmFsdWUKIHsKICAgcHVibGljOgpAQCAtNDM3LDIyICs0MzUsMTUgQEAgY2xh
c3MgQ2xlYXJDb2xvclZhbHVlCiAgICAgY29uc3RleHByIENsZWFyQ29sb3JWYWx1ZShjb25zdCBD
bGVhckNvbG9yVmFsdWUgJnNyYykKICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVC
eXRlcyhzcmMubVZhbHVlQnl0ZXMpCiAgICAge30KLQogICAgIE1UTENsZWFyQ29sb3IgdG9NVExD
bGVhckNvbG9yKCkgY29uc3Q7Ci0KICAgICBQaXhlbFR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1UeXBlOyB9Ci0KICAgICBjb25zdCBDbGVhckNvbG9yVmFsdWVCeXRlcyAmZ2V0VmFsdWVC
eXRlcygpIGNvbnN0IHsgcmV0dXJuIG1WYWx1ZUJ5dGVzOyB9Ci0KICAgICBDbGVhckNvbG9yVmFs
dWUgJm9wZXJhdG9yPShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7Ci0KICAgICB2b2lkIHNl
dEFzRmxvYXQoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiAgICAgdm9pZCBz
ZXRBc0ludChpbnQzMl90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOwogICAg
IHZvaWQgc2V0QXNVSW50KHVpbnQzMl90IHIsIHVpbnQzMl90IGcsIHVpbnQzMl90IGIsIHVpbnQz
Ml90IGEpOwotCiAgIHByaXZhdGU6CiAgICAgUGl4ZWxUeXBlIG1UeXBlOwotCiAgICAgdW5pb24K
ICAgICB7CiAgICAgICAgIHN0cnVjdApAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFyQ29s
b3JWYWx1ZQogICAgICAgICB7CiAgICAgICAgICAgICB1aW50MzJfdCBtUmVkVSwgbUdyZWVuVSwg
bUJsdWVVLCBtQWxwaGFVOwogICAgICAgICB9OwotCiAgICAgICAgIENsZWFyQ29sb3JWYWx1ZUJ5
dGVzIG1WYWx1ZUJ5dGVzOwogICAgIH07CiB9OwpAQCAtNDgzLDcgKzQ3Myw3IEBAIGNsYXNzIEVy
cm9ySGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpID0g
MDsKIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJy
b3IsCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpID0gMDsKQEAgLTQ5Myw3ICs0ODMsNyBAQCBjbGFz
cyBDb250ZXh0IDogcHVibGljIEVycm9ySGFuZGxlcgogewogICBwdWJsaWM6CiAgICAgQ29udGV4
dChEaXNwbGF5TXRsICpkaXNwbGF5TXRsKTsKLSAgICBfTnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBn
ZXRNZXRhbERldmljZSgpIGNvbnN0OworICAgIGlkPE1UTERldmljZT4gZ2V0TWV0YWxEZXZpY2Uo
KSBjb25zdDsKICAgICBtdGw6OkNvbW1hbmRRdWV1ZSAmY21kUXVldWUoKTsKIAogICAgIERpc3Bs
YXlNdGwgKmdldERpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtRGlzcGxheTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9jb25zdGFudHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIwYjJjZGY3NDRlNjQ2NDEx
ZjlkOGJmYjc5YWQyZDIxNzcwMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKQEAg
LTAsMCArMSw3MyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIG10bF9jb21tb24uaDoKKy8vICAgICAgRGVjbGFy
ZXMgbnVtZXJpY2FsIGNvbnN0YW50cyB1c2VkIGluIE1ldGFsLgorLy8gICAgICBlcnJvciBoYW5k
bGVyIGJhc2UgY2xhc3MuCisvLworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX01U
TF9DT05TVEFOVFNfSAorI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExfQ09OU1RB
TlRTX0gKKyNpbmNsdWRlICJsaWJBTkdMRS9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9WZXJzaW9uLmgiCisjaW5jbHVkZSAibGliQU5HTEUvYW5nbGV0eXBlcy5oIgorCituYW1lc3Bh
Y2UgcngKK3sKK25hbWVzcGFjZSBtdGwKK3sKKworLy8gTk9URShocWxlKTogc3VwcG9ydCB2YXJp
YWJsZSBtYXggbnVtYmVyIG9mIHZlcnRleCBhdHRyaWJ1dGVzCitjb25zdGV4cHIgdWludDMyX3Qg
a01heFZlcnRleEF0dHJpYnMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworLy8gTk9URShocWxl
KTogc3VwcG9ydCB2YXJpYWJsZSBtYXggbnVtYmVyIG9mIHJlbmRlciB0YXJnZXRzCitjb25zdGV4
cHIgdWludDMyX3Qga01heFJlbmRlclRhcmdldHMgPSA0OworCitjb25zdGV4cHIgdWludDMyX3Qg
a01heFNoYWRlclVCT3MgPSAxMjsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4VUJPU2l6ZSAgICA9
IDE2Mzg0OworCitjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBz
aXplb2YoZmxvYXQpOworCisvLyBNZXRhbCBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4
U2hhZGVyQnVmZmVycyAgICAgPSAzMTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2Ft
cGxlcnMgICAgPSAxNjsKK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUg
PSA0ICogMTAyNDsKK2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBr
SW5saW5lQ29uc3REYXRhTWF4U2l6ZTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4Vmlld3BvcnRz
ICAgICAgICAgPSAxOworCitjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0
cmlkZUFsaWdubWVudCA9IDQ7CisvLyBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIG9mZnNldCBw
YXNzZWQgdG8gc2V0VmVydGV4fEZyYWdtZW50QnVmZmVyCisjaWYgVEFSR0VUX09TX09TWCB8fCBU
QVJHRVRfT1NfTUFDQ0FUQUxZU1QKK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNl
dHRpbmdPZmZzZXRNaW5BbGlnbm1lbnQgPSAyNTY7CisjZWxzZQorY29uc3RleHByIHVpbnQzMl90
IGtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisjZW5kaWYKK2Nv
bnN0ZXhwciB1aW50MzJfdCBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0Owor
Y29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1
NjsKKworLy8gRm9udCBlbmQgYmluZGluZyBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4
R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworY29uc3RleHByIHVp
bnQzMl90IGtNYXhHTFVCT0JpbmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKKworLy8g
QmluZGluZyBpbmRleCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKK2NvbnN0ZXhwciB1
aW50MzJfdCBrVmJvQmluZGluZ0luZGV4U3RhcnQgPSAwOworCisvLyBCaW5kaW5nIGluZGV4IGZv
ciBkZWZhdWx0IGF0dHJpYnV0ZSBidWZmZXI6Citjb25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRB
dHRyaWJzQmluZGluZ0luZGV4ID0ga1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsga01heFZlcnRleEF0
dHJpYnM7CisvLyBCaW5kaW5nIGluZGV4IGZvciBkcml2ZXIgdW5pZm9ybXM6Citjb25zdGV4cHIg
dWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmlu
ZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRlZmF1bHQgdW5pZm9ybXM6Citj
b25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0
QXR0cmlic0JpbmRpbmdJbmRleCArIDM7CisvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0g
RmVlZGJhY2sgQnVmZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50MzJfdCBrVHJhbnNmb3JtRmVlZGJh
Y2tCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ICsgMTsKKy8vIEJp
bmRpbmcgaW5kZXggZm9yIHNoYWRvdyBzYW1wbGVycycgY29tcGFyZSBtb2RlcworY29uc3RleHBy
IHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5z
Zm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydz
IGFyZ3VtZW50IGJ1ZmZlcgorY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJp
bmRpbmdJbmRleCA9IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsK
KworY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDgg
Yml0cyBzdGVuY2lsIGlzIHN1cHBvcnRlZAorCit9ICAvLyBuYW1lc3BhY2UgbXRsCit9ICAvLyBu
YW1lc3BhY2UgcngKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9t
YXAuanNvbgppbmRleCA0YTEyYTkwNzU5YmE5NjUzMzI5ODc2MDE3Nzg2ZTZiZWRjNGRiYjNlLi4y
ZGE3NDIxYzUxM2QzNzAyNDQxMDQ1YTAzMzlmNjFiMTIyYjJlN2MwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF9tYXAuanNvbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAg
ICAgICAgICAiRDMyX0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0IiwKICAgICAg
ICAgICAgICJTOF9VSU5UIjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAogICAgICAgICAgICAg
IkQzMl9GTE9BVF9TOFgyNF9VSU5UIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5j
aWw4IiwKLSAgICAgICAgICAgICJCMTBHMTBSMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdEJH
UjEwQTJVbm9ybSIsCiAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZv
cm1hdFJHQjEwQTJVaW50IiwKICAgICAgICAgICAgICJSMTBHMTBCMTBBMl9VTk9STSI6ICJNVExQ
aXhlbEZvcm1hdFJHQjEwQTJVbm9ybSIsCiAgICAgICAgICAgICAiUjExRzExQjEwX0ZMT0FUIjog
Ik1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0IiwKLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFS
RURFWFAiOiAiTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKyAgICAgICAgICAgICJSOUc5QjlF
NV9TSEFSRURFWFAiOiAiTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIsCisgICAgICAgICAgICAi
RDE2X1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtIgogICAgICAgICB9LAogICAg
ICAgICAibWFwX2lvcyI6IHsKICAgICAgICAgICAgICJSNUc2QjVfVU5PUk0iOiAiTVRMUGl4ZWxG
b3JtYXRCNUc2UjVVbm9ybSIsCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICAgICAgICAiUFZSVEMx
X1JHQl80QlBQX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQ
UF9zUkdCIiwKICAgICAgICAgICAgICJQVlJUQzFfUkdCQV8yQlBQX1VOT1JNX1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiIsCiAgICAgICAgICAgICAiUFZS
VEMxX1JHQkFfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdC
QV80QlBQX3NSR0IiLAorICAgICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIk1U
TFBpeGVsRm9ybWF0RVRDMl9SR0I4IiwKICAgICAgICAgICAgICJFVEMyX1I4RzhCOF9VTk9STV9C
TE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOCIsCiAgICAgICAgICAgICAiRVRDMl9SOEc4
QjhfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKICAgICAgICAg
ICAgICJFVEMyX1I4RzhCOEExX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4
QTEiLApAQCAtMTAwLDM5ICsxMDEsMzggQEAKICAgICAgICAgICAgICJFVEMyX1I4RzhCOEE4X1NS
R0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCiAgICAgICAgICAgICAi
RUFDX1IxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSIsCiAgICAg
ICAgICAgICAiRUFDX1IxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFTbm9y
bSIsCi0gICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEVBQ19SRzExVW5vcm0iLAorICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0iLAogICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05P
Uk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtIiwKLSAgICAgICAgICAgICJB
U1RDXzR4NF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIsCi0gICAg
ICAgICAgICAiQVNUQ180eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X3NS
R0IiLAotICAgICAgICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ181eDRfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdCX0JMT0NLIjogIk1UTFBp
eGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ181eDVfVU5PUk1fQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfNXg1
X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKLSAgICAgICAgICAg
ICJBU1RDXzZ4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCi0g
ICAgICAgICAgICAiQVNUQ182eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1
X3NSR0IiLAotICAgICAgICAgICAgIkFTVENfNng2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ182eDZfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzZ4Nl9TUkdCX0JMT0NLIjogIk1U
TFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENf
OHg1X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKLSAgICAgICAg
ICAgICJBU1RDXzh4Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X0xEUiIs
Ci0gICAgICAgICAgICAiQVNUQ184eDZfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENf
OHg2X3NSR0IiLAotICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVs
Rm9ybWF0QVNUQ184eDhfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1VO
T1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X0xEUiIsCi0gICAgICAgICAgICAi
QVNUQ18xMHg1X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiIsCi0g
ICAgICAgICAgICAiQVNUQ18xMHg2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MHg2X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg2X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzEweDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NL
IjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4
X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCi0gICAgICAgICAg
ICAiQVNUQ18xMHgxMF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfTERS
IiwKLSAgICAgICAgICAgICJBU1RDXzEweDEwX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzEweDEwX3NSR0IiLAotICAgICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMngxMF9T
UkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9zUkdCIiwKLSAgICAgICAgICAg
ICJBU1RDXzEyeDEyX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIi
LAotICAgICAgICAgICAgIkFTVENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTJ4MTJfc1JHQiIKKyAgICAgICAgICAgICJBU1RDXzR4NF9TUkdCX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfNHg0X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfNXg0X1NSR0JfQkxP
Q0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ181
eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKyAgICAgICAg
ICAgICJBU1RDXzZ4NV9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0Ii
LAorICAgICAgICAgICAgIkFTVENfNng2X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNU
Q182eDZfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzh4Nl9TUkdCX0JMT0NL
IiA6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfOHg4
X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIsCisgICAgICAgICAg
ICAiQVNUQ18xMHg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0Ii
LAorICAgICAgICAgICAgIkFTVENfMTB4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTB4Nl9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzEweDhfU1JHQl9CTE9DSyIgOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdC
X0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisgICAgICAgICAgICAi
QVNUQ18xMngxMF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIs
CisgICAgICAgICAgICAiQVNUQ18xMngxMl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTJ4MTJfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ180eDRfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzV4NF9VTk9STV9C
TE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorICAgICAgICAgICAgIkFTVENf
NXg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCisgICAgICAg
ICAgICAiQVNUQ182eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERS
IiwKKyAgICAgICAgICAgICJBU1RDXzZ4Nl9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzZ4Nl9MRFIiLAorICAgICAgICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfOHg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1fQkxP
Q0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzh4
OF9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorICAgICAgICAg
ICAgIkFTVENfMTB4NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERS
IiwKKyAgICAgICAgICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ18xMHg2X0xEUiIsCisgICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIiA6ICJN
VExQaXhlbEZvcm1hdEFTVENfMTB4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5P
Uk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIiLAorICAgICAgICAgICAg
IkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIi
LAorICAgICAgICAgICAgIkFTVENfMTJ4MTJfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ18xMngxMl9MRFIiCiAgICAgICAgIH0sCiAgICAgICAgICJtYXBfbWFjIjogewotICAgICAg
ICAgICAgIkQxNl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybSIsCiAgICAgICAg
ICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDI0VW5vcm1fU3Rl
bmNpbDgiLAogICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QkMxX1JHQkEiLAogICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX1NSR0JfQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRCQzFfUkdCQV9zUkdCIiwKQEAgLTE3NSw5ICsxNzUsNyBAQAogICAgICAg
ICAgICAgIkQzMl9VTk9STSI6ICJEMzJfRkxPQVQiCiAgICAgICAgIH0sCiAgICAgICAgICJvdmVy
cmlkZV9pb3MiOiB7Ci0gICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FU
X1M4WDI0X1VJTlQiLAotICAgICAgICAgICAgIkQxNl9VTk9STSI6ICJEMzJfRkxPQVQiLAotICAg
ICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIkVUQzJfUjhHOEI4X1VOT1JNX0JM
T0NLIgorICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9V
SU5UIgogICAgICAgICB9LAogICAgICAgICAib3ZlcnJpZGVfbWFjIjogewogICAgICAgICAgICAg
IlI1RzZCNV9VTk9STSI6ICJSOEc4QjhBOF9VTk9STSIsCkBAIC0yMDMsNyArMjAxLDggQEAKICAg
ICAgICAgICAgICJFQUNfUjExRzExX1VOT1JNX0JMT0NLIjogIlIxNkcxNl9VTk9STSIsCiAgICAg
ICAgICAgICAiRUFDX1IxMUcxMV9TTk9STV9CTE9DSyI6ICJSMTZHMTZfU05PUk0iCiAgICAgICAg
IH0sCi0gICAgICAgICJkMjRzOF9mYWxsYmFja3NfbWFjIjogeworICAgICAgICAiZmFsbGJhY2tz
X21hYyI6IHsKKyAgICAgICAgICAgICJCOEc4UjhBOF9VTk9STSI6ICJSOEc4QjhBOF9VTk9STSIs
CiAgICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQi
CiAgICAgICAgIH0sCiAgICAgICAgICJjYXBzIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVf
YXV0b2dlbi5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0KaW5kZXggYzIxYzU5M2YyMjg4NWY1
ODk2ODlhNTA5Nzk3OTgxYzZiYmI4NDNjNC4uNmUyNjk0ZTdmN2FjYjU5ODk0MDBiMjYzNTA1NDEx
NzBhYWYzOWY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF90YWJsZV9hdXRvZ2VuLm1tCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvRm9ybWF0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlz
cGxheU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
dXRpbHMuaCIKLQorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5o
IgogdXNpbmcgbmFtZXNwYWNlIGFuZ2xlOwogCiBuYW1lc3BhY2UgcngKQEAgLTI3LDggKzI3LDcg
QEAgbmFtZXNwYWNlIG10bAogCiB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpk
aXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiB7Ci0gICAgdGhpcy0+
aW50ZW5kZWRGb3JtYXRJZCA9IGludGVuZGVkRm9ybWF0SWRfOwotCisgICAgdGhpcy0+aW50ZW5k
ZWRGb3JtYXRJZCAgICA9IGludGVuZGVkRm9ybWF0SWRfOwogICAgIGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwogCiAgICAgLy8gQWN0dWFsIGNv
bnZlcnNpb24KQEAgLTQzLDE1ICs0MiwyNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNw
bGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAg
ICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNOgorI2lmIFRBUkdF
VF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgICAgIGNhc2UgYW5nbGU6OkZv
cm1hdElEOjpCOEc4UjhBOF9VTk9STToKIAotICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybTsKLSAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpCMTBHMTBSMTBBMl9VTk9STTsKLSAgICAgICAg
ICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChtZXRh
bERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0
QkdSQThVbm9ybTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xl
OjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk07CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1
bmN0aW9uICAgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4
ZWxGb3JtYXRSR0JBOFVub3JtOworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElk
ID0gYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICB0aGlz
LT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAorI2Vsc2UgIC8v
IFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAgICAgICAgIGNhc2UgYW5n
bGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STToKIAogICAgICAgICAgICAgdGhpcy0+bWV0YWxG
b3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm07CkBAIC02MSw2ICs3MSw3IEBAIHZv
aWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJ
RCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKIAorI2VuZGlmICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdF
VF9PU19NQUNDQVRBTFlTVAogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThf
VU5PUk1fU1JHQjoKIAogICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhl
bEZvcm1hdEJHUkE4VW5vcm1fc1JHQjsKQEAgLTcwLDYgKzgxLDM2IEBAIHZvaWQgRm9ybWF0Ojpp
bml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZv
cm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAg
ICBicmVhazsKIAorI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisg
ICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk06CisKKyAgICAgICAgICAgIHRo
aXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAgICAg
ICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOwor
ICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworCisgICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisKKyNlbHNlICAv
LyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICBjYXNlIGFu
Z2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgorCisgICAgICAgICAgICBpZiAoU3VwcG9ydHNJT1NH
UFVGYW1pbHkobWV0YWxEZXZpY2UsIDMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAg
ICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9V
Tk9STTsKKyAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsK
KyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6
RDMyX0ZMT0FUOworICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworCisjZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6
CiAKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0
aDMyRmxvYXQ7CkBAIC04MTUsMTUgKzg1Niw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERp
c3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAg
ICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAgICB0
aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOwotICAgICAg
ICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsK
LSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAgICAg
ICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAg
IGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAgICAg
aWYgKG1ldGFsRGV2aWNlLmRlcHRoMjRTdGVuY2lsOFBpeGVsRm9ybWF0U3VwcG9ydGVkICYmCkBA
IC0xMjgxLDcgKzEzMTMsNyBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpk
aXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAKICAgICAgICAgY2Fz
ZSBhbmdsZTo6Rm9ybWF0SUQ6OkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6CiAKLSAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtOworICAg
ICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9y
bTsKICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpF
QUNfUjExRzExX1VOT1JNX0JMT0NLOwogICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAg
PSBudWxscHRyOwogCkBAIC0xMzA2LDYgKzEzMzgsMTUgQEAgdm9pZCBGb3JtYXQ6OmluaXQoY29u
c3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRf
KQogICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFr
OwogCisgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9D
SzoKKworICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVU
QzJfUkdCODsKKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1h
dElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5j
dGlvbiAgID0gbnVsbHB0cjsKKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMy
X1I4RzhCOEExX1NSR0JfQkxPQ0s6CiAKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjhBMV9zUkdCOwpAQCAtMTQ1OSwxNSArMTUwMCw2IEBA
IHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3Jt
YXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6
RDE2X1VOT1JNOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVs
Rm9ybWF0RGVwdGgzMkZsb2F0OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBh
bmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVDsKLSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlv
biAgID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5P
Uk1fUzhfVUlOVDoKIAogICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhl
bEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsODsKQEAgLTE0NzcsMTUgKzE1MDksNiBAQCB2b2lk
IEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQg
aW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFf
UjhHOEI4X1VOT1JNX0JMT0NLOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9
IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0
SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLOwotICAgICAgICAg
ICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOwotCi0gICAgICAgICAgICB0aGlzLT5z
d2l6emxlZCA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0KICNlbmRpZiAgLy8gVEFSR0VU
X09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9mb3JtYXRfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgKaW5kZXggYmJiMjdkNGZlZWQ0
YzA2N2FmYWY3MjY3MWU3NmJmNGE0N2E1NTMwOS4uZjM5NjgxZDNhOGM2NzkzYzg0ZjViNTI0MTg2
YmM4ZGIwODcxZGExYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGls
cy5oCkBAIC00OCwxMyArNDgsMTggQEAgc3RydWN0IEZvcm1hdENhcHMKIHsKICAgICBib29sIGlz
UmVuZGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yUmVuZGVyYWJsZSB8fCBkZXB0aFJlbmRl
cmFibGU7IH0KIAotICAgIGJvb2wgZmlsdGVyYWJsZSAgICAgID0gZmFsc2U7Ci0gICAgYm9vbCB3
cml0YWJsZSAgICAgICAgPSBmYWxzZTsKLSAgICBib29sIGNvbG9yUmVuZGVyYWJsZSA9IGZhbHNl
OwotICAgIGJvb2wgZGVwdGhSZW5kZXJhYmxlID0gZmFsc2U7Ci0gICAgYm9vbCBibGVuZGFibGUg
ICAgICAgPSBmYWxzZTsKLSAgICBib29sIG11bHRpc2FtcGxlICAgICA9IGZhbHNlOyAgLy8gY2Fu
IGJlIHVzZWQgYXMgTVNBQSB0YXJnZXQKLSAgICBib29sIHJlc29sdmUgICAgICAgICA9IGZhbHNl
OyAgLy8gQ2FuIGJlIHVzZWQgYXMgcmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGZpbHRlcmFibGUg
ICAgICAgICAgID0gZmFsc2U7CisgICAgYm9vbCB3cml0YWJsZSAgICAgICAgICAgICA9IGZhbHNl
OworICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlICAgICAgPSBmYWxzZTsKKyAgICBib29sIGRlcHRo
UmVuZGVyYWJsZSAgICAgID0gZmFsc2U7CisgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9
IGZhbHNlOworICAgIGJvb2wgbXVsdGlzYW1wbGUgICAgICAgICAgPSBmYWxzZTsgIC8vIGNhbiBi
ZSB1c2VkIGFzIE1TQUEgdGFyZ2V0CisgICAgYm9vbCByZXNvbHZlICAgICAgICAgICAgICA9IGZh
bHNlOyAgLy8gQ2FuIGJlIHVzZWQgYXMgcmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGNvbXByZXNz
ZWQgICAgICAgICAgID0gZmFsc2U7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzICAgICA9IDA7
CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzTVNBQSA9IDA7CisgICAgTlNVSW50ZWdlciBjaGFu
bmVscyAgICAgICA9IDA7CisgICAgdWludDhfdCBhbGlnbm1lbnQgICAgICAgICA9IDA7CiB9Owog
CiAvLyBQaXhlbCBmb3JtYXQKQEAgLTE0Myw2ICsxNDgsNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBm
aW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICBwcml2YXRlOgogICAgIHZvaWQgaW5pdE5hdGl2
ZUZvcm1hdENhcHNBdXRvZ2VuKGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXkpOwogICAgIHZvaWQg
aW5pdE5hdGl2ZUZvcm1hdENhcHMoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisKICAgICB2
b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3
cml0YWJsZSwKQEAgLTE1MCw2ICsxNTYsMTcgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwgOiBh
bmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAogICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJsZSk7CisKKyAgICB2b2lkIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmls
dGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbXVsdGlzYW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgIE5TVUludGVnZXIgYnl0ZXNQZXJDaGFubmVsLAorICAgICAgICAgICAgICAgICAg
ICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxzKTsKKwogICAgIHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdCBmb3JtYXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJh
YmxlLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLApAQCAtMTU5LDggKzE3
NiwyNCBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUpOwogCisgICAgdm9pZCBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGZp
bHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYmxlbmRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG11bHRpc2FtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
TlNVSW50ZWdlciBieXRlc1BlckNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUlu
dGVnZXIgY2hhbm5lbHMpOworCiAgICAgdm9pZCBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9vbCBmaWx0ZXJhYmxlKTsKIAorICAgIHZvaWQgYWRqdXN0
Rm9ybWF0Q2Fwc0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9TNCk7CisKICAgICBzdGQ6OmFycmF5PEZv
cm1hdCwgYW5nbGU6OmtOdW1BTkdMRUZvcm1hdHM+IG1QaXhlbEZvcm1hdFRhYmxlOwogICAgIHN0
ZDo6dW5vcmRlcmVkX21hcDxNVExQaXhlbEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVs
Rm9ybWF0Q2Fwc1RhYmxlOwogICAgIC8vIE9uZSBmb3IgdGlnaHRseSBwYWNrZWQgYnVmZmVycywg
b25lIGZvciBnZW5lcmFsIGNhc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF91dGlscy5tbQppbmRleCBmYjFkNWNhOGJjMmZlYmE0NDllYTM1YjQ4YTQyYjkzNTMyOGFmNjIx
Li40MTZhZDVjN2ZmMTQxNjhlMDk3OGJiYzdiN2UxYzg4NjlmNmU3YTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zv
cm1hdF91dGlscy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQpAQCAtNzcsOCArNzcsOCBAQCB2b2lk
IEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxlLAog
ICAgICAgICAgICAgdGV4dHVyZUNhcHMucmVuZGVyYnVmZmVyID0KICAgICAgICAgICAgICAgICBt
dGxGb3JtYXQuZ2V0Q2FwcygpLmNvbG9yUmVuZGVyYWJsZSB8fCBtdGxGb3JtYXQuZ2V0Q2Fwcygp
LmRlcHRoUmVuZGVyYWJsZTsKICAgICAgICAgICAgIHRleHR1cmVDYXBzLnRleHR1cmFibGUgICAg
ICAgID0gdHJ1ZTsKLSAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0g
bXRsRm9ybWF0LmdldENhcHMoKS5ibGVuZGFibGU7CiAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy50
ZXh0dXJlQXR0YWNobWVudCA9IHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlcjsKKyAgICAgICAgICAg
IHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVu
ZGFibGU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm9ybWF0Q2Fwcy5tdWx0aXNhbXBsZSkK
QEAgLTE0OCwxMiArMTQ4LDYgQEAgYm9vbCBGb3JtYXQ6Om5lZWRDb252ZXJzaW9uKGFuZ2xlOjpG
b3JtYXRJRCBzcmNGb3JtYXRJZCkgY29uc3QKICAgICAgICAgLy8gV2ViR0wgYWxsb3dzIHVuc3dp
enpsZWQgbWFwcGluZyB3aGVuIHN3aXp6bGluZyBpcyBub3QgYXZhaWxhYmxlLiBObyBuZWVkIHRv
IGNvbnZlcnQuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHNyY0Zvcm1h
dElkID09IGFuZ2xlOjpGb3JtYXRJRDo6RVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0sgJiYKLSAgICAg
ICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOF9VTk9STV9C
TE9DSykKLSAgICB7Ci0gICAgICAgIC8vIEVUQzEgUkdCICYgRVRDMiBSR0IgYXJlIHRlY2huaWNh
bGx5IHRoZSBzYW1lLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBz
cmNGb3JtYXRJZCAhPSBhY3R1YWxGb3JtYXRJZDsKIH0KIApAQCAtMTkyLDggKzE4Niw3IEBAIGFu
Z2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6OmluaXRpYWxpemUoY29uc3QgRGlzcGxheU10bCAqZGlz
cGxheSkKICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0uaW5pdChkaXNwbGF5LCBmb3JtYXRJ
ZCk7CiAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9y
bWF0Q2Fwc1RhYmxlW21QaXhlbEZvcm1hdFRhYmxlW2ldLm1ldGFsRm9ybWF0XTsKIAotICAgICAg
ICBpZiAoIW1QaXhlbEZvcm1hdFRhYmxlW2ldLmNhcHMtPmRlcHRoUmVuZGVyYWJsZSAmJgotICAg
ICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0uYWN0dWFsRm9ybWF0SWQgIT0gbVBpeGVsRm9y
bWF0VGFibGVbaV0uaW50ZW5kZWRGb3JtYXRJZCkKKyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRh
YmxlW2ldLmFjdHVhbEZvcm1hdElkICE9IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9y
bWF0SWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLnRleHR1
cmVMb2FkRnVuY3Rpb25zID0gYW5nbGU6OkdldExvYWRGdW5jdGlvbnNNYXAoCiAgICAgICAgICAg
ICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0uaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJu
YWxGb3JtYXQsCkBAIC0yMDQsNiArMTk3LDE5IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6
OmluaXRpYWxpemUoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKICAgICAgICAgbVZlcnRleEZv
cm1hdFRhYmxlc1sxXVtpXS5pbml0KGZvcm1hdElkLCB0cnVlKTsKICAgICB9CiAKKyAgICAvLyBO
T1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBBTUQncyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21l
dGltZXMgcmV0dXJucyB6ZXJvIGR1cmluZyBzYW1wbGluZzoKKyAgICBpZiAoZGlzcGxheS0+Z2V0
UmVuZGVyZXJEZXNjcmlwdGlvbigpLmZpbmQoIkFNRCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQor
ICAgIHsKKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisgICAg
ICAgIEZvcm1hdCAmZm9ybWF0ID0KKyAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW3N0YXRp
Y19jYXN0PHVpbnQzMl90PihhbmdsZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UKV07Cisg
ICAgICAgIGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMy
X0ZMT0FUX1M4WDI0X1VJTlQ7CisgICAgICAgIGZvcm1hdC5tZXRhbEZvcm1hdCAgICAgICAgICA9
IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4OworICAgICAgICBmb3JtYXQuaW5p
dEZ1bmN0aW9uICAgICAgICAgPSBudWxscHRyOworICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRG
dW5jdGlvbnMgPSBudWxscHRyOworICAgICAgICBmb3JtYXQuY2FwcyA9ICZtTmF0aXZlUGl4ZWxG
b3JtYXRDYXBzVGFibGVbTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXRfU3RlbmNpbDhdOworICAg
IH0KKwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtMjM5LDEw
ICsyNDUsMjMgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBmb3JtYXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJl
bmRlcmFibGUpCiB7CiAgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3Jp
dGFibGUsIGJsZW5kYWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwK
LSAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsK
K30KK3ZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0
SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUlu
dGVnZXIgcGl4ZWxCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50
ZWdlciBjaGFubmVscykKK3sKKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxl
LCB3cml0YWJsZSwgYmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJh
YmxlLAorICAgICAgICAgICAgICAgICAgZmFsc2UsIHBpeGVsQnl0ZXMsIGNoYW5uZWxzKTsKIH0K
IAotdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKK3Zv
aWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCkBAIC0yNTAsNiArMjY5LDIwIEBAIHZvaWQg
Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgaWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJhYmxlKQoreworICAgIHNldEZvcm1hdENhcHMoZm9y
bWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxlLCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNv
bHZlLCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUs
IDAsIDApOworfQordm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZXNvbHZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNvbG9yUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBkZXB0aFJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUlu
dGVnZXIgcGl4ZWxCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50
ZWdlciBjaGFubmVscykKIHsKICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmZp
bHRlcmFibGUgICAgICA9IGZpbHRlcmFibGU7CiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1Rh
YmxlW2lkXS53cml0YWJsZSAgICAgICAgPSB3cml0YWJsZTsKQEAgLTI1OCw2ICsyOTEsMTEgQEAg
dm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKICAgICBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmJsZW5kYWJsZSAgICAgICA9IGJsZW5kYWJs
ZTsKICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLm11bHRpc2FtcGxlICAgICA9
IG11bHRpc2FtcGxlOwogICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVzb2x2
ZSAgICAgICAgID0gcmVzb2x2ZTsKKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRd
LnBpeGVsQnl0ZXMgICAgICA9IHBpeGVsQnl0ZXM7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNBQSAgPSBwaXhlbEJ5dGVzOworICAgIG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgICAgICAgID0gY2hhbm5lbHM7CisgICAgaWYg
KGNoYW5uZWxzICE9IDApCisgICAgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0u
YWxpZ25tZW50ID0gTUFYKHBpeGVsQnl0ZXMgLyBjaGFubmVscywgMVUpOwogfQogCiB2b2lkIEZv
cm1hdFRhYmxlOjpzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJ
ZCwgYm9vbCBmaWx0ZXJhYmxlKQpAQCAtMjY1LDkgKzMwMywyNzQgQEAgdm9pZCBGb3JtYXRUYWJs
ZTo6c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wg
ZmlsdGVyYWIKICAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIH0KIAordm9pZCBGb3JtYXRUYWJs
ZTo6YWRqdXN0Rm9ybWF0Q2Fwc0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9y
dHNpT1MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN1cHBvcnRzaU9TNCkKK3sKKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUKQorCisgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IG1OYXRpdmVQ
aXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlczsKKyAgICBOU1VJbnRlZ2VyIHBpeGVs
Qnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5
dGVzTVNBQTsKKyAgICBOU1VJbnRlZ2VyIGFsaWdubWVudCAgICAgICAgICAgID0gbU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQ7CisKKy8vIE92ZXJyaWRlIHRoZSBjdXJy
ZW50IHBpeGVsQnl0ZXNSZW5kZXIKKyMgICAgZGVmaW5lIFNQRUNJRklDKF9waXhlbEZvcm1hdCwg
X3BpeGVsQnl0ZXNSZW5kZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGNhc2UgX3BpeGVsRm9ybWF0OiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0
ZXNSZW5kZXJNU0FBID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhbGlnbm1lbnQgPSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5dGVzUmVuZGVy
IC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7IFwKKyAgICAg
ICAgICAgIGJyZWFrCisvLyBPdmVycmlkZSB0aGUgY3VycmVudCBwaXhlbCBieXRlcyByZW5kZXIs
IGFuZCBNU0FBCisjICAgIGRlZmluZSBTUEVDSUZJQ19NU0FBKF9waXhlbEZvcm1hdCwgX3BpeGVs
Qnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVzUmVuZGVyTVNBQSkgICAgICAgICAgICAgICAgXAorICAg
ICAgICBjYXNlIF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVs
Qnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNB
QSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNBQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgYWxpZ25tZW50ID0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBfcGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQ
aXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgOiA0OyBcCisgICAgICAgICAgICBicmVh
aworLy8gT3ZlcnJpZGUgdGhlIGN1cnJlbnQgcGl4ZWxCeXRlc1JlbmRlciwgYW5kIGFsaWdubWVu
dAorIyAgICBkZWZpbmUgU1BFQ0lGSUNfQUxJR04oX3BpeGVsRm9ybWF0LCBfcGl4ZWxCeXRlc1Jl
bmRlciwgX2FsaWdubWVudCkgXAorICAgICAgICBjYXNlIF9waXhlbEZvcm1hdDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxC
eXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxp
Z25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWsKKwor
ICAgIGlmICghbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorICAg
IHsKKyAgICAgICAgLy8gT24gQXBwbGVHUFVGYW1pbHk0KywgdGhlcmUgaXMgbm8gNGJ5dGUgbWlu
aW11bSByZXF1aXJlbWVudCBmb3IgcmVuZGVyIHRhcmdldHMKKyAgICAgICAgdWludDMyX3QgbWlu
U2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQgPyAxVSA6IDRVOworICAgICAgICBwaXhlbEJ5dGVzUmVu
ZGVyICAgICA9IE1BWChtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMs
IG1pblNpemUpOworICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IHBpeGVsQnl0ZXNSZW5k
ZXI7CisgICAgICAgIGFsaWdubWVudCA9CisgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBNQVgo
cGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5l
bHMsIDFVKSA6IDQ7CisgICAgfQorCisgICAgLy8gVGhpcyBsaXN0IG9mIHRhYmxlcyBzdGFydHMg
ZnJvbSBhIGdlbmVyYWwgbXVsdGktcGxhdGZvcm0gdGFibGUsCisgICAgLy8gdG8gc3BlY2lmaWMg
cGxhdGZvcm1zIChpLmUuIGlvczIsIGlvczQpIGluaGVyaXRpbmcgZnJvbSB0aGUgcHJldmlvdXMg
dGFibGVzCisKKyAgICAvLyBTdGFydCBvZmYgd2l0aCB0aGUgZ2VuZXJhbCBjYXNlCisgICAgc3dp
dGNoICgoTlNVSW50ZWdlcilpZCkKKyAgICB7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9y
bWF0QjVHNlI1VW5vcm0sIDRVKTsKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJH
UjVVbm9ybSwgNFUpOworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0s
IDRVKTsKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgNFUpOwor
CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworICAgICAg
ICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICBTUEVD
SUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAg
ICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSwgOFUpOwor
ICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUsIDhVKTsK
KyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUp
OworCisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCA4VSk7Cisg
ICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisKKyAgICAg
ICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsIDhVKTsKKworICAgICAgICBT
UEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQjlFNUZsb2F0LCA4VSk7CisKKyAgICAgICAgU1BFQ0lG
SUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2lsOCwgMVUpOworICAgIH0KKworICAgIC8vIE92ZXJyaWRl
IGJhc2VkIGlvczIKKyAgICBpZiAoc3VwcG9ydHNpT1MyKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICgoTlNVSW50ZWdlcilpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4
ZWxGb3JtYXRCNUc2UjVVbm9ybSwgOFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxG
b3JtYXRBMUJHUjVVbm9ybSwgOFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRBQkdSNFVub3JtLCA4VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJH
UjVBMVVub3JtLCA4VSk7CisgICAgICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0
UkdCQThVbm9ybSwgNFUsIDhVKTsKKyAgICAgICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxG
b3JtYXRCR1JBOFVub3JtLCA0VSwgOFUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3Zl
cnJpZGUgYmFzZWQgb24gaW9zNAorICAgIGlmIChzdXBwb3J0c2lPUzQpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKChOU1VJbnRlZ2VyKWlkKQorICAgICAgICB7CisgICAgICAgICAgICBTUEVDSUZJ
Q19BTElHTihNVExQaXhlbEZvcm1hdEI1RzZSNVVub3JtLCA2VSwgMlUpOworICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVub3JtLCA0VSk7CisgICAgICAgICAgICBTUEVD
SUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICAgICAgU1BFQ0lG
SUMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVub3JtX3NSR0IsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSk7CisKKyAgICAgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUpOworCisgICAgICAgICAgICBTUEVD
SUZJQ19BTElHTihNVExQaXhlbEZvcm1hdFJHQjEwQTJVbm9ybSwgNFUsIDRVKTsKKyAgICAgICAg
ICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA0VSwgNFUpOwor
ICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworCisg
ICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgNFUs
IDRVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRSR0I5RTVG
bG9hdCwgNFUsIDRVKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRD
YXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMgICAgID0gcGl4ZWxCeXRlc1JlbmRlcjsKKyAgICBtTmF0
aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBID0gcGl4ZWxCeXRlc1Jl
bmRlck1TQUE7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQg
ICAgICA9IGFsaWdubWVudDsKKworIyAgICB1bmRlZiBTUEVDSUZJQworIyAgICB1bmRlZiBTUEVD
SUZJQ19BTElHTgorIyAgICB1bmRlZiBTUEVDSUZJQ19NU0FBCisjZW5kaWYKKyAgICAvLyBtYWNP
UyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZvcm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhl
c2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQgdG8gY2hlY2sKKyAgICAvLyB2YWxpZCBNUlQgc2l6ZXMg
b24gaU9TLgorfQorCiB2b2lkIEZvcm1hdFRhYmxlOjppbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25z
dCBEaXNwbGF5TXRsICpkaXNwbGF5KQogewotICAgIGluaXROYXRpdmVGb3JtYXRDYXBzQXV0b2dl
bihkaXNwbGF5KTsKKyAgICBjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzTXRsID0g
ZGlzcGxheS0+Z2V0RmVhdHVyZXMoKTsKKyAgICAvLyBTa2lwIGF1dG8gcmVzb2x2ZSBpZiBlaXRo
ZXIgaGFzRGVwdGgvU3RlbmNpbEF1dG9SZXNvbHZlIG9yIGFsbG93TXVsdGlzYW1wbGVTdG9yZUFu
ZFJlc29sdmUKKyAgICAvLyBmZWF0dXJlIGFyZSBkaXNhYmxlZC4KKyAgICBib29sIHN1cHBvcnRE
ZXB0aEF1dG9SZXNvbHZlID0gZmVhdHVyZXNNdGwuaGFzRGVwdGhBdXRvUmVzb2x2ZS5lbmFibGVk
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93
TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnRTdGVu
Y2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJlc010bC5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5hYmxl
ZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFs
bG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnRE
ZXB0aFN0ZW5jaWxBdXRvUmVzb2x2ZSA9IHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlICYmIHN1cHBv
cnRTdGVuY2lsQXV0b1Jlc29sdmU7CisKKyAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVy
LmFwcGxlLmNvbS9tZXRhbC9NZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmCisgICAgLy8gY2xh
bmctZm9ybWF0IG9mZgorCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAg
ICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRp
c2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVu
ZGVyYWJsZSB8IGJ5dGVzUGVyQ2hhbm5lbCB8IGNoYW5uZWwKKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QThVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAg
IGZhbHNlLCAgICAgICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UjhVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLCAgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTbm9y
bSwgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0
cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwg
IDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVub3JtLCAgICAg
ICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAg
ICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICAy
VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAg
dHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAg
ZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgMlUs
IDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4VW5vcm0sICAgICAgIHRy
dWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAg
dHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4U25vcm0sICAgICAgIHRydWUsICAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwgIDJVLCAyVSk7CisgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIHRy
dWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICA0VSwgMlUpOworICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2U25vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2VW5vcm0sICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1ZSwgIDhVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFJHQkExNlNub3JtLCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0JBMTZGbG9hdCwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAg
ICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsICA4VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3Jt
YXRJZCAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29s
dmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm0sICAgICAgICAgIHRydWUsICAg
ICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThV
bm9ybV9zUkdCLCAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1p
bHkoMiksICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAg
NFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgICAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0IsICAgICB0cnVlLCAgICAgICAgICBkaXNwbGF5LT5zdXBw
b3J0c0lPU0dQVUZhbWlseSgyKSwgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOwor
CisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxl
ICAgICAgICAgICAgICAgICAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2Ft
cGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVy
YWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNkZsb2F0LCAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAg
ICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LCAgICAyVSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQs
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgICAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMy
RmxvYXQsICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwxKSwgICAgICAgIHRydWUsICAgIDRVLCAxVSk7CisKKyNpZiBUQVJHRVRfT1Nf
SU9TICYmICFUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1h
dElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVu
ZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAgcmVzb2x2ZSAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICB0cnVlLCAgMlUsIDNVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJH
UjRVbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAg
ICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBm
YWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVl
LCAgMlUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0s
ICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyNlbmRpZgorCisgICAgLy8gICAg
ICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3
cml0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSB8ICBt
dWx0aXNhbXBsZSB8ICByZXNvbHZlICAgfCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3Bs
YXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAg
dHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFJHQjEwQTJVbm9ybSwgICAgIHRydWUsICAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMywgMSksICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UkdCMTBBMlVpbnQsICAgICAgZmFsc2UsICAgICAgICBkaXNwbGF5LT5zdXBw
b3J0c0VpdGhlckdQVUZhbWlseSgzLCAxKSwgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAg
ICAgICBmYWxzZSwgICAgIHRydWUsICA0VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IHRydWUsICAgICAgdHJ1ZSwgIDRVLCAzVSk7CisKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1h
dElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRp
c2FtcGxlICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAg
ICB8IGNvbG9yUmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgx
KSwgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0c0lP
U0dQVUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAzVSk7
CisKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgfCBmaWx0ZXJh
YmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgIHwgIG11bHRpc2FtcGxlICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgcmVzb2x2ZSAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAgICAgICAg
ICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSOFNpbnQsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAg
ICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
LCAgICAgICAgIHRydWUsIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dFIxNlVpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1
ZSwgMlUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2U2ludCwgICAg
ICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOwor
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzhVaW50LCAgICAgICBmYWxzZSwgICAg
ICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFJHOFNpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UjMyVWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2Us
ICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwg
ICAgICAgICB0cnVlLCA0VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
MzJTaW50LCAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAg
ICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAg
IHRydWUsIDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVaW50
LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDJV
KTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNpbnQsICAgICAgZmFsc2Us
ICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMlUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVpbnQsICAgICBmYWxzZSwgICAgICAgICAgIHRy
dWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFJHQkE4U2ludCwgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZh
bHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAg
ICAgICAgdHJ1ZSwgNFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukcz
MlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAg
IGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzMyU2ludCwg
ICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDhV
LCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlVpbnQsICAgIGZh
bHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgOFUsIDRVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2U2ludCwgICAgZmFsc2UsICAgICAgICAg
ICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0JBMzJVaW50LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAg
ICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwg
IGZhbHNlLCAgICAgICAgIHRydWUsIDE2VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSR0JBMzJTaW50LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxz
ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNl
LCAgICAgICAgIHRydWUsIDE2VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJ
ZCAgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgfCAg
d3JpdGFibGUgIHwgIGJsZW5kYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxl
ICAgICAgICAgICAgICAgICAgICAgfCAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICB8
IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJG
bG9hdCwgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9y
dHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5
KDEsMSksICAgICAgICAgdHJ1ZSwgIDhVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHQkEzMkZsb2F0LCAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MSwxKSwgICB0cnVlLCAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwx
KSwgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAgICAgdHJ1ZSwgIDE2VSwgNFUpOworCisgICAg
Ly8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmls
dGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8
ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGNvbG9yUmVuZGVyYWJsZSB8IGRlcHRoUmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgfAor
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAg
ICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAg
IGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgc3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICB0cnVlLCAgNFUsIDFVKTsKKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0U3RlbmNpbDgsICAgICAgICAgICAgICAgICAgIGZhbHNl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAg
ICAgIHRydWUsICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsICAgICAgICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLDEpLCAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICBzdXBwb3J0RGVwdGhTdGVuY2lsQXV0b1Jlc29sdmUsICAgICAgICAgICAgIGZhbHNlLCAg
ICAgICAgICAgIHRydWUsICA4VSwgMlUpOworLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtLCAgICAgICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwg
ICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisjaWYgVEFSR0VUX09TX09T
WCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0RGVwdGgyNFVub3JtX1N0ZW5jaWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BV
RmFtaWx5KDEsMSksICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1
cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAg
ICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKworICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkEsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdC
QSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJf
UkdCQV9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEJDM19SR0JBLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEJDM19SR0JBX3NSR0IsIHRydWUpOworI2Vsc2UKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQLCB0cnVlKTsKKyAgICBzZXRDb21w
cmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQX3NSR0IsIHRydWUp
OworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRC
UFAsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZS
VENfUkdCXzRCUFBfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJCUFAsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV8yQlBQX3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVl
KTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFf
NEJQUF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEVBQ19SMTFVbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRFQUNfUjExU25vcm0sIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JHMTFVbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiwgdHJ1
ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgs
IHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9S
R0I4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0RVRDMl9SR0I4QTEsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0RVRDMl9SR0I4QTFfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNXg0X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ181eDVfc1JHQiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdC
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
Nng2X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ184eDVfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IsIHRydWUp
OworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NS
R0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNU
Q18xMHgxMF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ180eDRfTERSLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNXg0X0xEUiwgdHJ1ZSk7Cisg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9MRFIsIHRy
dWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182eDVf
TERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFT
VENfNng2X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRBU1RDXzh4NV9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ184eDZfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDEwX0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEyeDEwX0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xEUiwgdHJ1ZSk7CisjZW5kaWYKKyAgICAvLyBjbGFuZy1m
b3JtYXQgb24KIH0KIAogfSAgLy8gbmFtZXNwYWNlIG10bApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYzEwOTk3MzhkOWM1
NjgyMjExNjdlMmUxNWM2NDU3MDExMjIzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLmgKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vICBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMu
aAorLy8gIEFOR0xFCisvLworLy8gIENyZWF0ZWQgYnkgS3lsZSBQaWRkaW5ndG9uIG9uIDExLzEw
LzIwLgorLy8KKworI2lmbmRlZiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaAorI2RlZmluZSBtdGxf
Z2xzbGFuZ19tdGxfdXRpbHNfaAorI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9Qcm9ncmFtSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9jb21tb24uaCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2Ug
bXRsCit7CitzdHJ1Y3QgU2FtcGxlckJpbmRpbmcKK3sKKyAgICB1aW50MzJfdCB0ZXh0dXJlQmlu
ZGluZyA9IDA7CisgICAgdWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOworfTsKKworc3RydWN0
IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCit7CisgICAgdm9pZCByZXNldCgpOworICAgIC8vIFRyYW5z
bGF0ZWQgTWV0YWwgc291cmNlIGNvZGUKKyAgICBzdGQ6OnN0cmluZyBtZXRhbFNoYWRlclNvdXJj
ZTsKKyAgICAvLyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUu
IFVzZWQgYnkgUHJvZ3JhbU10bC4KKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0
YWxMaWJyYXJ5OworICAgIHN0ZDo6YXJyYXk8U2FtcGxlckJpbmRpbmcsIGtNYXhHTFNhbXBsZXJC
aW5kaW5ncz4gYWN0dWFsU2FtcGxlckJpbmRpbmdzOworICAgIHN0ZDo6YXJyYXk8dWludDMyX3Qs
IGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1YWxVQk9CaW5kaW5nczsKKyAgICBzdGQ6OmFycmF5PHVp
bnQzMl90LCBrTWF4U2hhZGVyWEZCcz4gYWN0dWFsWEZCQmluZGluZ3M7CisgICAgYm9vbCBoYXNV
Qk9Bcmd1bWVudEJ1ZmZlcjsKK307Cit2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6
UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAg
KnZhcmlhYmxlSW5mb01hcE91dCk7CisKK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxl
SW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xD
b2RlT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3Vu
dCk7CisKKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2Vk
IGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFy
ZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKworfSAgLy8gbmFtZXNwYWNlIG10bAor
fSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzVmNWJlZjQzMTAwZjExM2U0OTNkZDlkYjZlMGUyZmQ1NDYxNWEyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KQEAgLTAsMCArMSwyNDEgQEAKKy8v
CisvLyAgbWdsX2dsc2xhbmdfbXRsX3V0aWxzLm0KKy8vICBBTkdMRSAoc3RhdGljKQorLy8KKy8v
ICBDcmVhdGVkIGJ5IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKy8vCisKKyNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9TaGFkZXJNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Z2xzbGFuZ19tdGxfdXRpbHMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7
CisKK3ZvaWQgVHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KCkKK3sKKyAgICBtZXRhbFNoYWRl
clNvdXJjZS5jbGVhcigpOworICAgIG1ldGFsTGlicmFyeSAgICAgICAgID0gbmlsOworICAgIGhh
c1VCT0FyZ3VtZW50QnVmZmVyID0gZmFsc2U7CisgICAgZm9yIChtdGw6OlNhbXBsZXJCaW5kaW5n
ICZiaW5kaW5nIDogYWN0dWFsU2FtcGxlckJpbmRpbmdzKQorICAgIHsKKyAgICAgICAgYmluZGlu
Zy50ZXh0dXJlQmluZGluZyA9IG10bDo6a01heFNoYWRlclNhbXBsZXJzOworICAgIH0KKworICAg
IGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBhY3R1YWxVQk9CaW5kaW5ncykKKyAgICB7CisgICAg
ICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzOworICAgIH0KKworICAgIGZvciAo
dWludDMyX3QgJmJpbmRpbmcgOiBhY3R1YWxYRkJCaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJp
bmRpbmcgPSBtdGw6OmtNYXhTaGFkZXJCdWZmZXJzOworICAgIH0KK30KKworLy8gT3JpZ2luYWwg
bWFwcGluZyBvZiBmcm9udCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxl
ciBzbG90cyAoaW4gZm9ybSBvZgorLy8gc2xvdDpjb3VudCBwYWlyKQordXNpbmcgT3JpZ2luYWxT
YW1wbGVyQmluZGluZ01hcCA9CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBz
dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4+OworCitib29sIE1hcHBl
ZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeChjb25zdCBzdGQ6OnN0cmluZyAmb3Jp
Z2luYWxOYW1lKQoreworICAgIHJldHVybiBvcmlnaW5hbE5hbWUuZmluZCgnLicpID09IHN0ZDo6
c3RyaW5nOjpucG9zOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgTVNMR2V0TWFwcGVkU2FtcGxl
ck5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJm9yaWdpbmFsTmFtZSkKK3sKKyAgICBzdGQ6OnN0cmlu
ZyBzYW1wbGVyTmFtZSA9IG9yaWdpbmFsTmFtZTsKKworICAgIC8vIFNhbXBsZXJzIGluIHN0cnVj
dHMgYXJlIGV4dHJhY3RlZC4KKyAgICBzdGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwg
c2FtcGxlck5hbWUuZW5kKCksICcuJywgJ18nKTsKKworICAgIC8vIFJlbW92ZSBhcnJheSBlbGVt
ZW50cworICAgIGF1dG8gb3V0ID0gc2FtcGxlck5hbWUuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8g
aW4gPSBzYW1wbGVyTmFtZS5iZWdpbigpOyBpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKTsgaW4rKykK
KyAgICB7CisgICAgICAgIGlmICgqaW4gPT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgICB3
aGlsZSAoKmluICE9ICddJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbisrOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAq
b3V0KysgPSAqaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzYW1wbGVyTmFtZS5lcmFzZShv
dXQsIHNhbXBsZXJOYW1lLmVuZCgpKTsKKworICAgIGlmIChNYXBwZWRTYW1wbGVyTmFtZU5lZWRz
VXNlckRlZmluZWRQcmVmaXgob3JpZ2luYWxOYW1lKSkKKyAgICB7CisgICAgICAgIHNhbXBsZXJO
YW1lID0gc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXggKyBzYW1wbGVyTmFtZTsKKyAgICB9CisK
KyAgICByZXR1cm4gc2FtcGxlck5hbWU7Cit9CisKK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNv
bnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNl
c091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxl
SW5mb01hcCAqdmFyaWFibGVJbmZvTWFwT3V0KQoreworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRl
clR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAg
Z2w6OlNoYWRlciAqZ2xTaGFkZXIgICAgICAgICAgICA9IHByb2dyYW1TdGF0ZS5nZXRBdHRhY2hl
ZFNoYWRlcihzaGFkZXJUeXBlKTsKKyAgICAgICAgKCpzaGFkZXJTb3VyY2VzT3V0KVtzaGFkZXJU
eXBlXSA9IGdsU2hhZGVyID8gZ2xTaGFkZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSA6ICIiOwor
ICAgIH0KK30KKwordm9pZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJh
bnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxCaW5k
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PHN0ZDo6c3RyaW5nPiAmc3RydWN0U2FtcGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8U2FtcGxlckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRp
bmdzPiAqYmluZGluZ3MpCit7CisgICAgZm9yIChhdXRvICZzYW1wbGVyIDogcmVmbGVjdGlvbi0+
Z2V0U2FtcGxlckJpbmRpbmdzKCkpCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSAgICAgICAgICA9IHNhbXBsZXIuZmlyc3Q7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGFj
dHVhbFNhbXBsZXJTbG90ID0gKHVpbnQzMl90KXJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5n
KG5hbWUpOworICAgICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50
MzJfdClyZWZsZWN0aW9uLT5nZXRUZXh0dXJlQmluZGluZyhuYW1lKTsKKworICAgICAgICAvLyBB
c3NpZ24gc2VxdWVudGlhbCBpbmRleCBmb3Igc3Vic2VxdWVudCBhcnJheSBlbGVtZW50cworICAg
ICAgICBjb25zdCBib29sIHN0cnVjdFNhbXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUp
ICE9IHN0cnVjdFNhbXBsZXJzLmVuZCgpOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBtYXBw
ZWROYW1lID0KKyAgICAgICAgICAgIHN0cnVjdFNhbXBsZXIgPyBuYW1lIDogTVNMR2V0TWFwcGVk
U2FtcGxlck5hbWUoc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXggKyBuYW1lKTsKKyAgICAgICAg
YXV0byBvcmlnaW5hbCA9IG9yaWdpbmFsQmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKyAgICAg
ICAgaWYgKG9yaWdpbmFsICE9IG9yaWdpbmFsQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+
PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0KKyAgICAgICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdz
LmF0KG1hcHBlZE5hbWUpOworICAgICAgICAgICAgdWludDMyX3QgY3VycmVudFRleHR1cmVTbG90
ID0gYWN0dWFsVGV4dHVyZVNsb3Q7CisgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50U2FtcGxl
clNsb3QgPSBhY3R1YWxTYW1wbGVyU2xvdDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpw
YWlyPHVpbnQzMl90LCB1aW50MzJfdD4gJm9yaWdpbmFsQmluZGluZ1JhbmdlIDogcmVzT3JpZ25h
bEJpbmRpbmdzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhbXBsZXJCaW5kaW5n
ICZhY3R1YWxCaW5kaW5nID0gYmluZGluZ3MtPmF0KG9yaWdpbmFsQmluZGluZ1JhbmdlLmZpcnN0
KTsKKyAgICAgICAgICAgICAgICBhY3R1YWxCaW5kaW5nLnRleHR1cmVCaW5kaW5nICA9IGN1cnJl
bnRUZXh0dXJlU2xvdDsKKyAgICAgICAgICAgICAgICBhY3R1YWxCaW5kaW5nLnNhbXBsZXJCaW5k
aW5nICA9IGN1cnJlbnRTYW1wbGVyU2xvdDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0
dXJlU2xvdCArPSBvcmlnaW5hbEJpbmRpbmdSYW5nZS5zZWNvbmQ7CisgICAgICAgICAgICAgICAg
Y3VycmVudFNhbXBsZXJTbG90ICs9IG9yaWdpbmFsQmluZGluZ1JhbmdlLnNlY29uZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9tU2hhZGVyKGdsOjpTaGFkZXIgKnNoYWRlcikKK3sKKyAg
ICBTaGFkZXJNdGwgKnNoYWRlckluc3RhbmNlID0gc3RhdGljX2Nhc3Q8U2hhZGVyTXRsICo+KHNo
YWRlci0+Z2V0SW1wbGVtZW50YXRpb24oKSk7CisgICAgcmV0dXJuIHNoYWRlckluc3RhbmNlLT5n
ZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7Cit9CisKK3NoOjpUcmFuc2xhdG9yTWV0YWxS
ZWZsZWN0aW9uICpnZXRSZWZsZWN0aW9uRnJvbUNvbXBpbGVyKGdsOjpDb21waWxlciAqY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyVHlwZSB0eXBlKQoreworICAgIGF1dG8gY29tcGlsZXJJbnN0YW5jZSAg
ICAgID0gY29tcGlsZXItPmdldEluc3RhbmNlKHR5cGUpOworICAgIHNoOjpUU2hIYW5kbGVCYXNl
ICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0
YW5jZS5nZXRIYW5kbGUoKSk7CisgICAgYXV0byB0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPSBiYXNl
LT5nZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpOworICAgIGNvbXBpbGVyLT5wdXRJbnN0YW5j
ZShzdGQ6Om1vdmUoY29tcGlsZXJJbnN0YW5jZSkpOworICAgIHJldHVybiB0cmFuc2xhdG9yTWV0
YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKK30KKworYW5nbGU6OlJl
c3VsdCBHbHNsYW5nR2V0TVNMKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmlu
Zz4gJnNoYWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hh
ZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4g
Km1zbFNoYWRlckluZm9PdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
ck1hcDxzdGQ6OnN0cmluZz4gKm1zbENvZGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50KQoreworICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVu
aWZvcm0gYnVmZmVyIGJpbmRpbmdzIGdlbmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVl
ZCB0byBkbyBhIHJlbWFwLgorICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWlu
dDMyX3Q+IHVib09yaWdpbmFsQmluZGluZ3M7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6Oklu
dGVyZmFjZUJsb2NrPiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1CbG9ja3MoKTsK
KyAgICBmb3IgKHVpbnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXpl
KCk7ICsrYnVmZmVySWR4KQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2Nr
ICZibG9jayA9IGJsb2Nrc1tidWZmZXJJZHhdOworICAgICAgICBpZiAoIXVib09yaWdpbmFsQmlu
ZGluZ3MuY291bnQoYmxvY2subWFwcGVkTmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVi
b09yaWdpbmFsQmluZGluZ3NbYmxvY2subWFwcGVkTmFtZV0gPSBidWZmZXJJZHg7CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gUmV0cmlldmUgb3JpZ2luYWwgc2FtcGxlciBiaW5kaW5ncyBwcm9k
dWNlZCBieSBmcm9udCBlbmQuCisgICAgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5h
bFNhbXBsZXJCaW5kaW5nczsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6U2FtcGxlckJpbmRp
bmc+ICZzYW1wbGVyQmluZGluZ3MgPSBwcm9ncmFtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0+ICZ1bmlmb3JtcyAgICAg
ICAgID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1zKCk7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9z
ZXQ8c3RkOjpzdHJpbmc+IHN0cnVjdFNhbXBsZXJzID0ge307CisKKyAgICBmb3IgKHVpbnQzMl90
IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5zaXplKCk7
ICsrdGV4dHVyZUluZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlNhbXBsZXJCaW5kaW5n
ICZzYW1wbGVyQmluZGluZyA9IHNhbXBsZXJCaW5kaW5nc1t0ZXh0dXJlSW5kZXhdOworICAgICAg
ICB1aW50MzJfdCB1bmlmb3JtSW5kZXggPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUluZGV4RnJv
bVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBnbDo6TGlua2VkVW5p
Zm9ybSAmc2FtcGxlclVuaWZvcm0gPSB1bmlmb3Jtc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBi
b29sIGlzU2FtcGxlckluU3RydWN0ICAgICAgICA9IHNhbXBsZXJVbmlmb3JtLm5hbWUuZmluZCgn
LicpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBzdGQ6OnN0cmluZyBtYXBwZWRTYW1w
bGVyTmFtZSA9IGlzU2FtcGxlckluU3RydWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoc2FtcGxlclVuaWZvcm0u
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNU0xH
ZXRNYXBwZWRTYW1wbGVyTmFtZShzYW1wbGVyVW5pZm9ybS5tYXBwZWROYW1lKTsKKyAgICAgICAg
Ly8gVGhlc2UgbmVlZCB0byBiZSBwcmVmaXhlZCBsYXRlciBzZXBlcmF0ZWx5CisgICAgICAgIGlm
IChpc1NhbXBsZXJJblN0cnVjdCkKKyAgICAgICAgICAgIHN0cnVjdFNhbXBsZXJzLmluc2VydCht
YXBwZWRTYW1wbGVyTmFtZSk7CisgICAgICAgIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzW21hcHBl
ZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2soCisgICAgICAgICAgICB7dGV4dHVyZUluZGV4LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgp
KX0pOworICAgIH0KKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHR5cGUgOiB7Z2w6OlNoYWRlclR5
cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50fSkKKyAgICB7CisgICAgICAgICgq
bXNsQ29kZU91dClbdHlwZV0gICAgICAgICAgICAgICAgICAgICAgICAgPSBzaGFkZXJTb3VyY2Vz
W3R5cGVdOworICAgICAgICAoKm1zbFNoYWRlckluZm9PdXQpW3R5cGVdLm1ldGFsU2hhZGVyU291
cmNlID0gc2hhZGVyU291cmNlc1t0eXBlXTsKKyAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyICAg
ICAgICAgICAgICAgICAgICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIodHlw
ZSk7CisgICAgICAgIHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0g
Z2V0UmVmbGVjdGlvbkZyb21TaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgLy8gUmV0cmlldmUgYXV0
b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50cworICAgICAgICBpZiAob3JpZ2luYWxTYW1w
bGVyQmluZGluZ3Muc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgR2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MocmVmbGVjdGlvbiwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0
cnVjdFNhbXBsZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1z
bFNoYWRlckluZm9PdXQtPmF0KHR5cGUpLmFjdHVhbFNhbXBsZXJCaW5kaW5ncyk7CisgICAgICAg
IH0KKyAgICAgICAgcmVmbGVjdGlvbi0+cmVzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCit1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVN
b2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYykKK3sKKyAgICAvLyBTZWUgU3BpcnZUb01zbENv
bXBpbGVyOjplbWl0X2hlYWRlcigpCisgICAgaWYgKG1vZGUgPT0gR0xfTk9ORSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2gg
KGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorICAgICAgICAgICAg
ICAgIHJldHVybiAyOworICAgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgICAg
ICAgIHJldHVybiAzOworICAgICAgICAgICAgY2FzZSBHTF9HRVFVQUw6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDQ7CisgICAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgICAgICAg
IHJldHVybiA1OworICAgICAgICAgICAgY2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgICAgICAg
cmV0dXJuIDY7CisgICAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgICAgICAgIHJl
dHVybiA3OworICAgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gODsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KK30KK30g
IC8vIG5hbWVzcGFjZSBtdGwKK30gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5n
X3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaAppbmRleCAxM2M5N2VlMjQ0N2ZhNDY5MjZlZmU3OGQz
MDAzMjQ0N2EyM2NiMjQ4Li5jMDI0NDZhOTgyMDg1NWYzY2ZmNDdjYTM5NjY3NDQwMzI4ODMzYjcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaApAQCAtMTQs
MzMgKzE0LDExIEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCi0KKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKIG5hbWVz
cGFjZSByeAogewogbmFtZXNwYWNlIG10bAogewotCi1zdHJ1Y3QgU2FtcGxlckJpbmRpbmcKLXsK
LSAgICB1aW50MzJfdCB0ZXh0dXJlQmluZGluZyA9IDA7Ci0gICAgdWludDMyX3Qgc2FtcGxlckJp
bmRpbmcgPSAwOwotfTsKLQotc3RydWN0IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCi17Ci0gICAgdm9p
ZCByZXNldCgpOwotCi0gICAgLy8gVHJhbnNsYXRlZCBNZXRhbCBzb3VyY2UgY29kZQotICAgIHN0
ZDo6c3RyaW5nIG1ldGFsU2hhZGVyU291cmNlOwotICAgIC8vIE1ldGFsIGxpYnJhcnkgY29tcGls
ZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92ZS4gVXNlZCBieSBQcm9ncmFtTXRsLgotICAgIEF1dG9P
YmpDUHRyPGlkPE1UTExpYnJhcnk+PiBtZXRhbExpYnJhcnk7Ci0KLSAgICBzdGQ6OmFycmF5PFNh
bXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1wbGVyQmluZGluZ3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5n
czsKLSAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFsVUJP
QmluZGluZ3M7Ci0gICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVh
bFhGQkJpbmRpbmdzOwotICAgIGJvb2wgaGFzVUJPQXJndW1lbnRCdWZmZXI7Ci19OwotCiAvLyAt
IHNoYWRlclNvdXJjZXNPdXQgaXMgcmVzdWx0IEdMU0wgY29kZSBwZXIgc2hhZGVyIHN0YWdlIHdo
ZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJuZWQgb2ZmLgogLy8gLSB4ZmJPbmx5U2hhZGVyU291cmNl
T3V0IHdpbGwgY29udGFpbiB2ZXJ0ZXggc2hhZGVyJ3MgR0xTTCBjb2RlIHdoZW4gWEZCIGVtdWxh
dGlvbiBpcyB0dXJuZWQgb24uCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6
OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLApAQCAtNTcsNiArMzUsMTMgQEAgYW5nbGU6OlJl
c3VsdCBHbHNsYW5nR2V0U2hhZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90
Pj4gKnNoYWRlckNvZGVPdXQpOwogCithbmdsZTo6UmVzdWx0IE1TTEdldFNoYWRlclNwaXJ2Q29k
ZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6
OnN0cmluZz4gJnNoYWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5m
b01hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8
c3RkOjp2ZWN0b3I8dWludDMyX3Q+PiAqc2hhZGVyQ29kZU91dCk7CisKIC8vIFRyYW5zbGF0ZSBm
cm9tIFNQSVItViBjb2RlIHRvIE1ldGFsIHNoYWRlciBzb3VyY2UgY29kZS4KIC8vIC0gc3BpcnZT
aGFkZXJDb2RlIGlzIFNQSVJWIGNvZGUgcGVyIHNoYWRlciBzdGFnZSB3aGVuIFhGQiBlbXVsYXRp
b24gaXMgdHVybmVkIG9mZi4KIC8vIC0geGZiT25seVNwaXJ2Q29kZSBpcyAgdmVydGV4IHNoYWRl
cidzIFNQSVJWIGNvZGUgd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KQEAgLTcwLDYg
KzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hh
ZGVySW5mbz4gKm1zbFNoYWRlckluZm9PdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRyYW5zbGF0ZWRTaGFkZXJJbmZvICptc2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFi
bGUgKi8pOwogCit2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRl
ICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3Jh
bUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5m
b01hcE91dCk7CisKK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxp
bmtlZFNoYWRlclN0YWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFk
ZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJ
bmZvTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNs
YXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVp
dmFsZW50IHNoYWRvdyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNs
IHNoYWRlci4KK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUs
IEdMZW51bSBmdW5jKTsKKwogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQppbmRleCBj
YWEwZTU2MTk3NDc0MWUxOGU5YTg4ZGY0NTMxYWQ1M2VjZDhlYzFiLi40Y2Y3MTdhYTZlMmQ2MTI2
YjkzODRkMjc5Y2VkNDVlNGE2YTkxZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX3V0aWxzLm1tCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8c3BpcnZfbXNs
LmhwcD4KIAogI2luY2x1ZGUgImNvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCiAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgogCkBAIC0yMiwxMiArMjMsMTMgQEAgbmFt
ZXNwYWNlIG10bAogewogbmFtZXNwYWNlCiB7Ci0KIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFu
Z1RleHR1cmVEZXNjU2V0ICAgICAgICAgICAgICA9IDA7CiBjb25zdGV4cHIgdWludDMyX3Qga0ds
c2xhbmdEZWZhdWx0VW5pZm9ybUFuZFhmYkRlc2NTZXQgPSAxOwogY29uc3RleHByIHVpbnQzMl90
IGtHbHNsYW5nRHJpdmVyVW5pZm9ybXNEZXNjU2V0ICAgICAgID0gMjsKIGNvbnN0ZXhwciB1aW50
MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291cmNlRGVzY1NldCAgICAgICA9IDM7CiAKK2NvbnN0ZXhw
ciBjaGFyIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzVmFyTmFtZVtdID0gIkFOR0xFU2hhZG93
Q29tcGFyZU1vZGVzIjsKKwogLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJvbSBz
YW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgogLy8gc2xv
dDpjb3VudCBwYWlyKQogdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9CkBAIC01Niw5
ICs1OCwxMyBAQCB2b2lkIFJlc2V0R2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvKEdsc2xhbmdQ
cm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZgogICAgIHN0YXRpY19hc3NlcnQoa0Ry
aXZlclVuaWZvcm1zQmluZGluZ0luZGV4ICE9IDAsICJrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5k
ZXggbXVzdCBub3QgYmUgMCIpOwogfQogCisKIEdsc2xhbmdTb3VyY2VPcHRpb25zIENyZWF0ZVNv
dXJjZU9wdGlvbnMoKQogewogICAgIEdsc2xhbmdTb3VyY2VPcHRpb25zIG9wdGlvbnM7CisgICAg
b3B0aW9ucy5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2sgPSB0cnVlOworICAgIC8vIFdlIGNhbiBl
YXJseSBvdXQgaW4gdGhlIE1TTCBvbmNlIHRyYW5zZm9ybSBmZWVkYmFjayBpcyB3cml0dGVuCisg
ICAgb3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuID0gdHJ1ZTsKICAgICByZXR1
cm4gb3B0aW9uczsKIH0KIApAQCAtNzksOCArODUsOCBAQCBzcHY6OkV4ZWN1dGlvbk1vZGVsIFNo
YWRlclR5cGVUb1NwdkV4ZWN1dGlvbk1vZGVsKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB2
b2lkIEJpbmRCdWZmZXJzKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTbWFsbFZlY3RvcjxzcGlydl9jcm9zczo6
UmVzb3VyY2U+ICZyZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2lu
YWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpz
dHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKICAgICAgICAgICAgICAgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heEdMVUJPQmlu
ZGluZ3M+ICp1Ym9CaW5kaW5nc1JlbWFwT3V0LAogICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQzMl90LCBrTWF4U2hhZGVyWEZCcz4gKnhmYkJpbmRpbmdSZW1hcE91dCwKICAgICAgICAg
ICAgICAgICAgYm9vbCAqdWJvQXJndW1lbnRCdWZmZXJVc2VkKQpAQCAtMjUzLDMwICsyNTksNTAg
QEAgdm9pZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzcGlydl9jcm9zczo6Q29t
cGlsZXJNU0wgJmNvbXBpbGVyTXNsLAogICAgIH0KIH0KIAotc3RkOjpzdHJpbmcgUG9zdFByb2Nl
c3NUcmFuc2xhdGVkTXNsKGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkU291cmNlKQorc3Rk
OjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1wbGVyLCBj
b25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKIHsKKyAgICBzdGQ6OnN0cmluZyBz
b3VyY2U7CisgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKyAgICB7CisgICAgICAgIC8vIEFkZCBB
TkdMRVNoYWRvd0NvbXBhcmVNb2RlcyB2YXJpYWJsZSB0byBtYWluKCksIFdlIG5lZWQgdG8gYWRk
IGhlcmUgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAgICAgLy8gb25seSB3YXkgd2l0aG91dCBtb2Rp
Znlpbmcgc3BpcnYtY3Jvc3MuCisgICAgICAgIHN0ZDo6cmVnZXggbWFpbkRlY2xhcmVSZWdleCgK
KyAgICAgICAgICAgIFIiKCgodmVydGV4fGZyYWdtZW50fGtlcm5lbClccytbX2EtekEtWjAtOTw+
XStccyttYWluW15cKF0qXCgpKSIpOworICAgICAgICBzdGQ6OnN0cmluZyBtYWluRGVjbGFyZVJl
cGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiJDFjb25zdGFudCB1bmlmb3JtPHVpbnQ+ICoiKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTaGFkb3dTYW1wbGVy
Q29tcGFyZU1vZGVzVmFyTmFtZSArICJbW2J1ZmZlcigiICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyKGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmlu
ZGluZ0luZGV4KSArICIpXV0sICI7CisgICAgICAgIHNvdXJjZSA9IHN0ZDo6cmVnZXhfcmVwbGFj
ZSh0cmFuc2xhdGVkU291cmNlLCBtYWluRGVjbGFyZVJlZ2V4LCBtYWluRGVjbGFyZVJlcGxhY2VT
dHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzb3VyY2UgPSB0cmFuc2xhdGVk
U291cmNlOworICAgIH0KKwogICAgIC8vIEFkZCBmdW5jdGlvbl9jb25zdGFudCBhdHRyaWJ1dGUg
dG8gZ2xfU2FtcGxlTWFzay4KICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIHZhcnlpbmcgaXMgb25s
eSB1c2VkIHdoZW4gQU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIGlzIHRydWUsCiAgICAgLy8gdGhl
IHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNzaWduIGZ1bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0
byBpdC4gVGh1cyBpdCB3b24ndCBiZSBkZWFkLWNvZGUKICAgICAvLyByZW1vdmVkIHdoZW4gQU5H
TEVDb3ZlcmFnZU1hc2tFbmFibGVkPWZhbHNlLgogICAgIHN0ZDo6c3RyaW5nIHNhbXBsZU1hc2tS
ZXBsYWNlU3RyID0gc3RkOjpzdHJpbmcoIltbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50
KCIpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtD
b3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lICsgIildXSI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tF
bmFibGVkQ29uc3ROYW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIildXSI7CiAKICAgICAvLyBUaGlzIHJlcGxhY2VzICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxl
X21hc2tdXSIKICAgICAvLyAgICAgICAgICB3aXRoICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21h
c2ssIGZ1bmN0aW9uX2NvbnN0YW50KEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCldXSIKICAgICBz
dGQ6OnJlZ2V4IHNhbXBsZU1hc2tEZWNsYXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNr
XHMqXF1ccypcXSkiKTsKLSAgICByZXR1cm4gc3RkOjpyZWdleF9yZXBsYWNlKHRyYW5zbGF0ZWRT
b3VyY2UsIHNhbXBsZU1hc2tEZWNsYXJlUmVnZXgsIHNhbXBsZU1hc2tSZXBsYWNlU3RyKTsKKyAg
ICByZXR1cm4gc3RkOjpyZWdleF9yZXBsYWNlKHNvdXJjZSwgc2FtcGxlTWFza0RlY2xhcmVSZWdl
eCwgc2FtcGxlTWFza1JlcGxhY2VTdHIpOwogfQogCiAvLyBDdXN0b21pemVkIHNwaXJ2LWNyb3Nz
IGNvbXBpbGVyCiBjbGFzcyBTcGlydlRvTXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6
OkNvbXBpbGVyTVNMCiB7CiAgIHB1YmxpYzoKLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2
ZWN0b3I8dWludDMyX3Q+ICYmc3ByaXYpIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2
KSB7fQorICAgIFNwaXJ2VG9Nc2xDb21waWxlcihDb250ZXh0ICpjb250ZXh0LCBzdGQ6OnZlY3Rv
cjx1aW50MzJfdD4gJiZzcHJpdikKKyAgICAgICAgOiBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wo
c3ByaXYpLCBtQ29udGV4dChjb250ZXh0KQorICAgIHt9CiAKICAgICB2b2lkIGNvbXBpbGVFeChn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdz
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwg
dWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0
IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGlu
Z3MsCisgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVp
bnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKICAgICAgICAgICAgICAgICAgICBjb25zdCBP
cmlnaW5hbFNhbXBsZXJCaW5kaW5nTWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKICAgICAg
ICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsU2hhZGVySW5mb091dCkKICAg
ICB7CkBAIC0zMjgsOCArMzU0LDcgQEAgY2xhc3MgU3BpcnZUb01zbENvbXBpbGVyIDogcHVibGlj
IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTAogICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUg
c2xvdCBiaW5kaW5ncyBmb3IgdGV4dHVyZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5p
Zm9ybXMKICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdXNpbmcgYXJndW1lbnQgYnVmZmVyLgog
ICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjphZGRfZGlzY3JldGVfZGVzY3Jp
cHRvcl9zZXQoa0dsc2xhbmdUZXh0dXJlRGVzY1NldCk7Ci0gICAgICAgICAgICBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldCgKLSAgICAgICAgICAg
ICAgICBrR2xzbGFuZ0RlZmF1bHRVbmlmb3JtQW5kWGZiRGVzY1NldCk7CisgICAgICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xz
bGFuZ0RlZmF1bHRVbmlmb3JtQW5kWGZiRGVzY1NldCk7CiAgICAgICAgICAgICBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZl
clVuaWZvcm1zRGVzY1NldCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQwLDMxICsz
NjUsNzQyIEBAIGNsYXNzIFNwaXJ2VG9Nc2xDb21waWxlciA6IHB1YmxpYyBzcGlydl9jcm9zczo6
Q29tcGlsZXJNU0wKIAogICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xf
b3B0aW9ucyhjb21wT3B0KTsKIAorICAgICAgICBhZGRCdWlsdEluUmVzb3VyY2VzKCk7CisgICAg
ICAgIGFuYWx5emVTaGFkZXJWYXJpYWJsZXMoKTsKKwogICAgICAgICAvLyBBY3R1YWwgY29tcGls
YXRpb24KICAgICAgICAgbXNsU2hhZGVySW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQotICAg
ICAgICAgICAgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1T
TDo6Y29tcGlsZSgpKTsKKyAgICAgICAgICAgIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChtSGFz
RGVwdGhTYW1wbGVyLCBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CiAKICAg
ICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50cwogICAg
ICAgICBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncygqdGhpcywgb3JpZ2luYWxTYW1wbGVyQmlu
ZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZv
T3V0LT5hY3R1YWxTYW1wbGVyQmluZGluZ3MpOwogICAgIH0KKworICBwcml2YXRlOgorICAgIC8v
IE92ZXJyaWRlIENvbXBpbGVyTVNMCisgICAgdm9pZCBlbWl0X2hlYWRlcigpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmVtaXRfaGVhZGVyKCk7Cisg
ICAgICAgIGlmICghbUhhc0RlcHRoU2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNlIGlz
c3VlczoKKyAgICAgICAgLy8gLSBzcHJpdl9jcm9zcyBhbHdheXMgdHJhbnNsYXRlcyBzaGFkb3cg
dGV4dHVyZSdzIHNhbXBsaW5nIHRvIHNhbXBsZV9jb21wYXJlKCkgYW5kIGRvZXNuJ3QKKyAgICAg
ICAgLy8gdGFrZSBpbnRvIGFjY291bnQgR0xfVEVYVFVSRV9DT01QQVJFX01PREU9R0xfTk9ORS4K
KyAgICAgICAgLy8gLSBvbiBtYWNPUywgZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBhcmFtZXRl
ciBpcyBub3Qgc3VwcG9ydGVkIGluIHNhbXBsZV9jb21wYXJlKCkuCisgICAgICAgIC8vIC0gb24g
ZGV2aWNlcyBwcmlvciB0byBpT1MgR1BVIGZhbWlseSAzLCBjaGFuZ2luZyBzYW1wbGVyJ3MgY29t
cGFyZSBtb2RlIG91dHNpZGUgc2hhZGVyIGlzCisgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuCisg
ICAgICAgIGlmICghbUNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd1J1
bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3RhdGVtZW50KCIjZGVmaW5lIEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9N
T0RFIik7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZW1lbnQoImVudW0gY2xhc3MgQU5HTEVD
b21wYXJlTW9kZSA6IHVpbnQiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIE5vbmUgPSAwLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzLCIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVu
dCgiICAgIEdyZWF0ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXJFcXVhbCwi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgTmV2ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIEFsd2F5cywiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgRXF1YWwsIik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIE5vdEVxdWFsLCIpOworICAgICAgICBzdGF0ZW1lbnQoIn07Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRWNvbXBhcmUoVCBkZXB0aCwgVCBkcmVmLCBVbmlmb3JtT3JVSW50IGNvbXBh
cmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICBBTkdMRUNvbXBhcmVNb2RlIG1vZGUgPSBzdGF0aWNfY2FzdDxBTkdMRUNvbXBhcmVNb2RlPihj
b21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgc3dpdGNoIChtb2RlKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNh
c2UgQU5HTEVDb21wYXJlTW9kZTo6TGVzczoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
ICAgICByZXR1cm4gZHJlZiA8IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
Y2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpMZXNzRXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICAgICAgcmV0dXJuIGRyZWYgPD0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6OkdyZWF0ZXI6Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICAgICAgcmV0dXJuIGRyZWYgPiBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6R3JlYXRlckVxdWFsOiIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmID49IGRlcHRoOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gMDsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6QWx3YXlzOiIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiAxOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpFcXVhbDoiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgICAgICByZXR1cm4gZHJlZiA9PSBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJuIGRyZWYgIT0gZGVwdGg7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgICAgICBkZWZhdWx0OiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgICAgIHJldHVybiAxOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgIH0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVt
ZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7
CisgICAgICAgIC8vIDJEIFBDRiBzYW1wbGluZworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlUENGKGRlcHRoMmQ8VD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAg
ICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgZmxvYXQyIGRpbXMgPSBmbG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwgdGV4dHVy
ZS5nZXRfaGVpZ2h0KCkpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29v
cmQgPSBjb29yZCAqIGRpbXM7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhl
bFNpemUgPSAxLjAgLyBkaW1zOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgd2Vp
Z2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0
bCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0
KSwgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4
dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAg
ICAgICAgICAgICAgICJvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21w
YXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJsID0gQU5HTEVjb21w
YXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgZmxvYXQyKDAuMCwgdGV4ZWxTaXplLnkpLCAi
CisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBiciA9IEFO
R0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIHRleGVsU2l6ZSwgb3B0aW9ucywg
IgorICAgICAgICAgICAgICAgICAgIm9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBh
cmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0
ciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBt
aXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBt
aXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAg
Ly8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9m
ZnNldCksICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJl
TW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVU
QUxfTUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiIik7CisKKyAgICAgICAgLy8gQ3ViZSBQQ0Ygc2FtcGxpbmcKKyAgICAgICAgc3RhdGVtZW50
KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JV
SW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0
aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAg
ICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVudCIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBv
cHRpb25zKSwgY29tcGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBh
cmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgi
Iik7CisKKyAgICAgICAgLy8gMkQgYXJyYXkgUENGIHNhbXBsaW5nCisgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9y
VUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgImlubGluZSBUIEFOR0xF
dGV4dHVyZVBDRihkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNv
b3JkLCB1aW50ICIKKyAgICAgICAgICAgICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgT3B0
IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICJzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiI2lmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICBmbG9hdDIgZGltcyA9IGZsb2F0Mih0ZXh0dXJlLmdldF93aWR0aCgpLCB0ZXh0dXJlLmdl
dF9oZWlnaHQoKSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9
IGNvb3JkICogZGltczsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHRleGVsU2l6
ZSA9IDEuMCAvIGRpbXM7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB3ZWlnaHQg
PSBmcmFjdChpbWdDb29yZCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0g
QU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zm
c2V0KSwgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUo
dGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAg
ICAgICAgICAgICAgICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwg
c2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBibCA9
IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIGZsb2F0MigwLjAsIHRleGVs
U2l6ZS55KSwgIgorICAgICAgICAgICAgICAgICAgImFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCBj
b21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIGZsb2F0IGJyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4
ZWxTaXplLCBhcnJheSwgIgorICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNv
bXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIHJldHVybiBtaXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1w
bGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCAiCisgICAgICAgICAgICAgICAg
ICAiY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiNlbmRpZiAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0
YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIHRl
eHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIp
OworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgy
ZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAg
ICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09T
X18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUp
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsIG9mZnNldCwgIgorICAgICAgICAg
ICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxz
ZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFy
ZShzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0
YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1l
bnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFO
R0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlv
bnMsICIKKyAgICAgICAgICAgICAgICAgICJpbnQyKDApLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7
CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJ
bnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShk
ZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAg
ICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiNpZiBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFS
RV9NT0RFKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENG
KHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgb2Zmc2V0LCAiCisg
ICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQpOyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIiKTsKKworICAgICAgICAvLyBDdWJlIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgp
IHdyYXBwZXIKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisg
ICAgICAgICAgICAiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21w
YXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSki
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAg
ICAgICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05P
X1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMp
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0i
KTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1l
bnQoCisgICAgICAgICAgICAiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8
VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAg
ICJjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdM
RV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFy
ZV92YWx1ZSwgbGV2ZWwoMCksICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9k
ZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUp
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0i
KTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJl
J3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVyCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJy
YXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsICIKKyAgICAgICAgICAgICAg
ICAgICJ1aW50IGFycmF5LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBv
ZmZzZXQsIFVuaWZvcm1PclVJbnQgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAg
ICAgICAgICAgIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9N
VExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNv
bXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRv
d0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBz
dGF0ZW1lbnQoCisgICAgICAgICAgICAiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJl
KHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBz
dGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVp
bnQgYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50
IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29v
cmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywg
aW50MigwKSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsK
KyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBz
YW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXks
IGZsb2F0IGNvbXBhcmVfdmFsdWUsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAg
ICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJf
UlVOVElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBB
TkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBs
ZXZlbCgwKSwgIgorICAgICAgICAgICAgICAgICAgIm9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUp
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92
YWx1ZSwgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQg
dGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCIv
LyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJ
bnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8
VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGludDIgb2Zmc2V0LCAiCisgICAg
ICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dD
b21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
eyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBh
cmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9mZnNldCwgIgorICAgICAgICAg
ICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBz
dGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIp
OworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRl
eHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAg
ICAiY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAg
ICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4i
KTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKyAgICAgICAg
ICAgICAgICAgICJpbnQyIG9mZnNldCwgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUlu
dCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4
dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIK
KyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRl
bWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsIE9wdCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQg
Y29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRl
eHR1cmUodGV4dHVyZSwgcywgY29vcmQsIG9wdGlvbnMsIGludDIoMCksIGNvbXBhcmVfdmFsdWUs
ICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0
YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIEN1YmUg
dGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCJ0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFy
ZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9k
ZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBh
cmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIp
OworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9w
dCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNv
b3JkLCBPcHQgIgorICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIGZsb2F0IGNvbXBhcmVfdmFs
dWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVu
dCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
IHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3Zh
bHVlLCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVs
c2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICAgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBz
YW1wbGluZyBmdW5jdGlvbgorICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBU
IEFOR0xFdGV4dHVyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCB1aW50ICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIK
KyAgICAgICAgICAgICAgICAgICJmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJl
Q29tcGFyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAg
ICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgYXJyYXksIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwg
dWludCAiCisgICAgICAgICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVu
aWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMs
IGNvb3JkLCBhcnJheSwgaW50MigwKSwgY29tcGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAg
ICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBz
dGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUs
IHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAgICAgICAgICAgICJhcnJh
eSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQg
Y29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21w
YXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQs
IGFycmF5LCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zm
c2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywg
Y29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
CisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwg
dHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBB
TkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBj
b29yZCwgdWludCAiCisgICAgICAgICAgICAgICAgICAiYXJyYXksIE9wdCBvcHRpb25zLCBmbG9h
dCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xF
dGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIG9wdGlvbnMsIGludDIoMCksICIKKyAg
ICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworICAgIH0KKwor
ICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9uX25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQg
aW1nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6
OlNQSVJUeXBlICZpbWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc0ZldGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNBcnJheU9mZnNldHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc09mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzRHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IG1pbkxvZCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghaGFzRHJlZikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVuY3Rp
b25fbmFtZShpbWcsIGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhh
c0FycmF5T2Zmc2V0cywgaGFzT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNHcmFkLCBoYXNEcmVmLCBsb2QsIG1p
bkxvZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgY3VzdG9tIEFOR0xFdGV4dHVyZSBm
dW5jdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIGJ1aWx0LWluIHNhbXBsZV9jb21wYXJlKCkKKyAgICAg
ICAgcmV0dXJuICJBTkdMRXRleHR1cmUiOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1
bmN0aW9uX2FyZ3Moc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgY29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBjb29yZENvbXBvbmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBkcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgZ3JhZFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBncmFk
WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgY29tcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IG1pbmxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBGb3J3
YXJkKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICBzdGQ6
OnN0cmluZyBhcmdzV2l0aG91dERyZWYgPSBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1
bmN0aW9uX2FyZ3MoCisgICAgICAgICAgICBpbWcsIGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVy
LCBpc1Byb2osIGNvb3JkLCBjb29yZENvbXBvbmVudHMsIDAsIGdyYWRYLCBncmFkWSwgbG9kLAor
ICAgICAgICAgICAgY29mZnNldCwgb2Zmc2V0LCBiaWFzLCBjb21wLCBzYW1wbGUsIG1pbmxvZCwg
JmZvcndhcmQpOworCisgICAgICAgIGlmICghZHJlZikKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHBGb3J3YXJkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwRm9yd2FyZCA9
IGZvcndhcmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJnc1dpdGhvdXRE
cmVmOworICAgICAgICB9CisgICAgICAgIC8vIENvbnZlcnQgdG8gYXJndW1lbnRzIHRvIEFOR0xF
dGV4dHVyZS4KKyAgICAgICAgc3RkOjpzdHJpbmcgYXJncyA9IHRvX2V4cHJlc3Npb24oaW1nKTsK
KyAgICAgICAgYXJncyArPSAiLCAiOworICAgICAgICBhcmdzICs9IGFyZ3NXaXRob3V0RHJlZjsK
KyAgICAgICAgYXJncyArPSAiLCAiOworCisgICAgICAgIGZvcndhcmQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBmb3J3YXJkICYmIHNob3VsZF9mb3J3YXJkKGRyZWYpOworICAgICAg
ICBjb25zdCBzcGlydl9jcm9zczo6U1BJUlR5cGUgJmRyZWZUeXBlID0gZXhwcmVzc2lvbl90eXBl
KGRyZWYpOworICAgICAgICBzdGQ6OnN0cmluZyBkcmVmRXhwcjsKKyAgICAgICAgdWludDMyX3Qg
YWx0Q29vcmRDb21wb25lbnQgPSAwOworICAgICAgICBzd2l0Y2ggKGltZ1R5cGUuaW1hZ2UuZGlt
KQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIHNwdjo6RGltMkQ6CisgICAgICAgICAgICAg
ICAgYWx0Q29vcmRDb21wb25lbnQgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBzcHY6OkRpbTNEOgorICAgICAgICAgICAgY2FzZSBzcHY6OkRpbUN1YmU6Cisg
ICAgICAgICAgICAgICAgYWx0Q29vcmRDb21wb25lbnQgPSAzOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc1Byb2op
CisgICAgICAgICAgICBkcmVmRXhwciA9IHNwaXJ2X2Nyb3NzOjpqb2luKHRvX2VuY2xvc2VkX2V4
cHJlc3Npb24oZHJlZiksICIgLyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b19leHRyYWN0X2NvbXBvbmVudF9leHByZXNzaW9uKGNvb3JkLCBhbHRDb29yZENv
bXBvbmVudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmVmRXhwciA9IHRvX2V4cHJl
c3Npb24oZHJlZik7CisKKyAgICAgICAgaWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Ny
b3NzOjpTUElSVHlwZTo6SGFsZikKKyAgICAgICAgICAgIGRyZWZFeHByID0gY29udmVydF90b19m
MzIoZHJlZkV4cHIsIDEpOworCisgICAgICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisgICAgICAgIGFy
Z3MgKz0gIiwgIjsKKyAgICAgICAgYXJncyArPSB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lv
bihpbWcpOworCisgICAgICAgIGlmIChwRm9yd2FyZCkKKyAgICAgICAgeworICAgICAgICAgICAg
KnBGb3J3YXJkID0gZm9yd2FyZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhcmdzOwor
ICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlwZSBlbWl0dGVyIHRvIGlu
c2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdp
dGggdGhlIHNoYWRvdyBzYW1wbGVyLiBOT1RFKGhxbGUpOiBUaGlzIGlzIGp1c3QgOTAlIGNvcHkg
b2Ygc3BpcnZfbXNsJ3MgY29kZS4KKyAgICAvLyBUaGUgYmV0dGVyIHdheSBpcyBtb2RpZnlpbmcg
YW5kIGNyZWF0aW5nIGEgUFIgb24gc3BpcnYtY3Jvc3MgcmVwbyBkaXJlY3RseS4gQnV0IHRoaXMg
c2hvdWxkCisgICAgLy8gYmUgYSB3b3JrIGFyb3VuZCBzb2x1dGlvbiBmb3Igbm93LgorICAgIHZv
aWQgZW1pdF9mdW5jdGlvbl9wcm90b3R5cGUoc3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbiAmZnVu
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpC
aXRzZXQgJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFR1cm4gb2ZmIGNsYW5nLWZvcm1h
dCB0byBlYXNpZXIgY29tcGFyZSB3aXRoIG9yaWdpbmFsIGNvZGUKKyAgICAgICAgLy8gY2xhbmct
Zm9ybWF0IG9mZgorICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3BpcnZfY3Jvc3M7CisgICAgICAg
IHVzaW5nIG5hbWVzcGFjZSBzcHY7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyAg
ICAgICAgaWYgKGZ1bmMuc2VsZiAhPSBpci5kZWZhdWx0X2VudHJ5X3BvaW50KQorICAgICAgICAg
ICAgYWRkX2Z1bmN0aW9uX292ZXJsb2FkKGZ1bmMpOworCisgICAgICAgIGxvY2FsX3ZhcmlhYmxl
X25hbWVzID0gcmVzb3VyY2VfbmFtZXM7CisgICAgICAgIHN0cmluZyBkZWNsOworCisgICAgICAg
IHByb2Nlc3NpbmdfZW50cnlfcG9pbnQgPSBmdW5jLnNlbGYgPT0gaXIuZGVmYXVsdF9lbnRyeV9w
b2ludDsKKworICAgICAgICAvLyBNZXRhbCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGlj
IGZvcmNlLWlubGluZSBvdGhlcndpc2UgdGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlu
a2VkIHRvZ2V0aGVyIGluIGEgc2luZ2xlIE1ldGFsbGliLgorICAgICAgICBpZiAoIXByb2Nlc3Np
bmdfZW50cnlfcG9pbnQpCisgICAgICAgICAgICBzdGF0ZW1lbnQoInN0YXRpYyBpbmxpbmUgX19h
dHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIik7CisKKyAgICAgICAgYXV0byAmdHlwZSA9IGdl
dDxTUElSVHlwZT4oZnVuYy5yZXR1cm5fdHlwZSk7CisKKyAgICAgICAgaWYgKCF0eXBlLmFycmF5
LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMuZm9yY2VfbmF0aXZlX2FycmF5cykKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gV2UgY2Fubm90IHJldHVybiBuYXRpdmUgYXJyYXlzIGluIE1TTCwgc28g
InJldHVybiIgdGhyb3VnaCBhbiBvdXQgdmFyaWFibGUuCisgICAgICAgICAgICBkZWNsICs9ICJ2
b2lkIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
Y2wgKz0gZnVuY190eXBlX2RlY2wodHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9
ICIgIjsKKyAgICAgICAgZGVjbCArPSB0b19uYW1lKGZ1bmMuc2VsZik7CisgICAgICAgIGRlY2wg
Kz0gIigiOworCisgICAgICAgIGlmICghdHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25z
LmZvcmNlX25hdGl2ZV9hcnJheXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZha2UgYXJy
YXlzIHJldHVybnMgYnkgd3JpdGluZyB0byBhbiBvdXQgYXJyYXkgaW5zdGVhZC4KKyAgICAgICAg
ICAgIGRlY2wgKz0gInRocmVhZCAiOworICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2dsc2wo
dHlwZSk7CisgICAgICAgICAgICBkZWNsICs9ICIgKCZTUElSVl9Dcm9zc19yZXR1cm5fdmFsdWUp
IjsKKyAgICAgICAgICAgIGRlY2wgKz0gdHlwZV90b19hcnJheV9nbHNsKHR5cGUpOworICAgICAg
ICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIGRlY2wg
Kz0gIiwgIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcm9jZXNzaW5nX2VudHJ5X3BvaW50
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobXNsX29wdGlvbnMuYXJndW1lbnRfYnVmZmVy
cykKKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfYXJndW1lbnRfYnVm
ZmVyKCFmdW5jLmFyZ3VtZW50cy5lbXB0eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfY2xhc3NpYyghZnVuYy5hcmd1bWVudHMu
ZW1wdHkoKSk7CisKKyAgICAgICAgICAgIC8vIElmIGVudHJ5IHBvaW50IGZ1bmN0aW9uIGhhcyB2
YXJpYWJsZXMgdGhhdCByZXF1aXJlIGVhcmx5IGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgLy8g
ZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFuIGVtcHR5IGluaXRpYWxpemVyLCBjcmVhdGluZyBvbmUg
aWYgbmVlZGVkLgorICAgICAgICAgICAgLy8gVGhpcyBpcyBkb25lIGF0IHRoaXMgbGF0ZSBzdGFn
ZSBiZWNhdXNlIHRoZSBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uCisgICAgICAgICAgICAvLyBp
cyBjbGVhcmVkIGFmdGVyIGVhY2ggY29tcGlsYXRpb24gcGFzcy4KKyAgICAgICAgICAgIGZvciAo
YXV0byB2YXJfaWQgOiB2YXJzX25lZWRpbmdfZWFybHlfZGVjbGFyYXRpb24pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXV0byAmZWRfdmFyID0gZ2V0PFNQSVJWYXJpYWJsZT4odmFy
X2lkKTsKKyAgICAgICAgICAgICAgICBJRCAmaW5pdGlhbGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6
ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICAg
ICAgaW5pdGlhbGl6ZXIgPSBpci5pbmNyZWFzZV9ib3VuZF9ieSgxKTsKKworICAgICAgICAgICAg
ICAgIC8vIERvIG5vdCBvdmVycmlkZSBwcm9wZXIgaW5pdGlhbGl6ZXJzLgorICAgICAgICAgICAg
ICAgIGlmIChpci5pZHNbaW5pdGlhbGl6ZXJdLmdldF90eXBlKCkgPT0gVHlwZU5vbmUgfHwgaXIu
aWRzW2luaXRpYWxpemVyXS5nZXRfdHlwZSgpID09IFR5cGVFeHByZXNzaW9uKQorICAgICAgICAg
ICAgICAgICAgICBzZXQ8U1BJUkV4cHJlc3Npb24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9Iiwg
ZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoYXV0byAmYXJnIDogZnVuYy5hcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVpbnQzMl90IG5hbWVfaWQgPSBhcmcuaWQ7CisKKyAgICAgICAgICAgIGF1dG8gKnZhciA9
IG1heWJlX2dldDxTUElSVmFyaWFibGU+KGFyZy5pZCk7CisgICAgICAgICAgICBpZiAodmFyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gbW9kaWZ5IHRo
ZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSwgbWFrZSBzdXJlIHdlIG1vZGlmeSB0aGUgb3JpZ2luYWwg
dmFyaWFibGUuCisgICAgICAgICAgICAgICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cg
dmFyaWFibGUuCisgICAgICAgICAgICAgICAgaWYgKGFyZy5hbGlhc19nbG9iYWxfdmFyaWFibGUg
JiYgdmFyLT5iYXNldmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIG5hbWVfaWQgPSB2YXIt
PmJhc2V2YXJpYWJsZTsKKworICAgICAgICAgICAgICAgIHZhci0+cGFyYW1ldGVyID0gJmFyZzsg
Ly8gSG9sZCBhIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBzbyB3ZSBjYW4gaW52YWxpZGF0ZSB0
aGUgcmVhZG9ubHkgZmllbGQgaWYgbmVlZGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBhZGRfbG9jYWxfdmFyaWFibGVfbmFtZShuYW1lX2lkKTsKKworICAgICAgICAgICAgZGVjbCAr
PSBhcmd1bWVudF9kZWNsKGFyZyk7CisKKyAgICAgICAgICAgIGJvb2wgaXNfZHluYW1pY19pbWdf
c2FtcGxlciA9IGhhc19leHRlbmRlZF9kZWNvcmF0aW9uKGFyZy5pZCwgU1BJUlZDcm9zc0RlY29y
YXRpb25EeW5hbWljSW1hZ2VTYW1wbGVyKTsKKworICAgICAgICAgICAgYXV0byAmYXJnX3R5cGUg
PSBnZXQ8U1BJUlR5cGU+KGFyZy50eXBlKTsKKyAgICAgICAgICAgIGlmIChhcmdfdHlwZS5iYXNl
dHlwZSA9PSBTUElSVHlwZTo6U2FtcGxlZEltYWdlICYmICFpc19keW5hbWljX2ltZ19zYW1wbGVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRp
YyBwbGFuZSBhcmdzIGZvciBtdWx0aXBsYW5hciB0ZXh0dXJlCisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgcGxhbmVzID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHByX3Nh
bXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9zYW1wbGVyKG5hbWVfaWQpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoY29uc3RleHByX3NhbXBsZXItPnljYmNyX2NvbnZlcnNpb25fZW5hYmxlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGxhbmVzID0gY29uc3RleHByX3NhbXBsZXItPnBsYW5lczsK
KyAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspCisg
ICAgICAgICAgICAgICAgICAgIGRlY2wgKz0gam9pbigiLCAiLCBhcmd1bWVudF9kZWNsKGFyZyks
IHBsYW5lX25hbWVfc3VmZml4LCBpKTsKKworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJl
IGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBmb3IgU2FtcGxlZEltYWdlIHRleHR1cmUKKyAgICAgICAg
ICAgICAgICBpZiAoYXJnX3R5cGUuaW1hZ2UuZGltICE9IERpbUJ1ZmZlcikKKyAgICAgICAgICAg
ICAgICAgICAgZGVjbCArPSBqb2luKCIsIHRocmVhZCBjb25zdCAiLCBzYW1wbGVyX3R5cGUoYXJn
X3R5cGUpLCAiICIsIHRvX3NhbXBsZXJfZXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gTWFudWZhY3R1cmUgYXV0b21hdGljIHN3aXp6bGUgYXJnLgor
ICAgICAgICAgICAgaWYgKG1zbF9vcHRpb25zLnN3aXp6bGVfdGV4dHVyZV9zYW1wbGVzICYmIGhh
c19zYW1wbGVkX2ltYWdlcyAmJiBpc19zYW1wbGVkX2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmCisg
ICAgICAgICAgICAgICAgIWlzX2R5bmFtaWNfaW1nX3NhbXBsZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHko
KTsKKyAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19p
c19hcnJheSA/ICIqICIgOiAiJiAiLCB0b19zd2l6emxlX2V4cHJlc3Npb24oYXJnLmlkKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChidWZmZXJzX3JlcXVpcmluZ19hcnJheV9s
ZW5ndGguY291bnQobmFtZV9pZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAg
ICBkZWNsICs9IGpvaW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAi
JiAiLCB0b19idWZmZXJfc2l6ZV9leHByZXNzaW9uKG5hbWVfaWQpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlzX3NhbXBsZWRfaW1hZ2VfdHlwZShhcmdfdHlwZSkgJiYgYXJn
X3R5cGUuaW1hZ2UuZGVwdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBh
cmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIHRoZSBhcmd1bWVudCBzZXF1ZW5j
ZToKKyAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3RhbnQgdW5pZm9ybTx1aW50
PiIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCZhcmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKyAg
ICAgICAgICAgICAgICBkZWNsICs9ICIsICI7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9
ICIpIjsKKyAgICAgICAgc3RhdGVtZW50KGRlY2wpOworCisgICAgICAgIC8vIGNsYW5nLWZvcm1h
dCBvbgorICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzIHBh
c3NpbmcgZ2VuZXJhdG9yIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29t
ZQorICAgIC8vIHRvZ2V0aGVyIHdpdGggdGhlIHNoYWRvdyBzYW1wbGVyCisgICAgc3RkOjpzdHJp
bmcgdG9fZnVuY19jYWxsX2FyZyhjb25zdCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJh
bWV0ZXIgJmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlk
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Ny
b3NzOjpDb21waWxlck1TTDo6dG9fZnVuY19jYWxsX2FyZyhhcmcsIGlkKTsKKworICAgICAgICBj
b25zdCBzcGlydl9jcm9zczo6U1BJUlR5cGUgJnR5cGUgPSBleHByZXNzaW9uX3R5cGUoaWQpOwor
CisgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5pbWFnZS5k
ZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisgICAgICAgICAgICAvLyBOZWVkIHRv
IGNoZWNrIHRoZSBiYXNlIHZhcmlhYmxlIGluIGNhc2Ugd2UgbmVlZCB0byBhcHBseSBhIHF1YWxp
ZmllZCBhbGlhcy4KKyAgICAgICAgICAgIHVpbnQzMl90IHZhcl9pZCA9IDA7CisgICAgICAgICAg
ICBhdXRvICp2YXIgICAgICAgPSBtYXliZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZT4o
aWQpOworICAgICAgICAgICAgaWYgKHZhcikKKyAgICAgICAgICAgICAgICB2YXJfaWQgPSB2YXIt
PmJhc2V2YXJpYWJsZTsKKworICAgICAgICAgICAgYXJnX3N0ciArPSAiLCAiICsgdG9TaGFkb3dD
b21wYXJlTW9kZUV4cHJlc3Npb24odmFyX2lkID8gdmFyX2lkIDogaWQpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBhcmdfc3RyOworICAgIH0KKworICAgIC8vIEFkZGl0aW9uYWwgZnVuY3Rp
b25zCisgICAgdm9pZCBhZGRCdWlsdEluUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIHVpbnQz
Ml90IHZhcklkID0gYnVpbGRfY29uc3RhbnRfdWludF9hcnJheV9wb2ludGVyKCk7CisgICAgICAg
IHNldF9uYW1lKHZhcklkLCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUpOworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2V0X2Rl
Y29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkRlc2NyaXB0b3JTZXQsIGtTaGFkb3dTYW1w
bGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFy
SWQsIHNwdjo6RGVjb3JhdGlvbkJpbmRpbmcsIDApOworICAgICAgICBzZXRfZXh0ZW5kZWRfZGVj
b3JhdGlvbih2YXJJZCwgc3BpcnZfY3Jvc3M6OlNQSVJWQ3Jvc3NEZWNvcmF0aW9uUmVzb3VyY2VJ
bmRleFByaW1hcnksIDApOworICAgICAgICBtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCA9
IHZhcklkOworICAgIH0KKworICAgIHZvaWQgYW5hbHl6ZVNoYWRlclZhcmlhYmxlcygpCisgICAg
eworICAgICAgICBpci5mb3JfZWFjaF90eXBlZF9pZDxzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxl
PihbdGhpc10odWludDMyX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIp
IHsKKyAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGdldF92
YXJpYWJsZV9kYXRhX3R5cGUodmFyKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHZhcklkICAgICAg
ICAgICAgICAgICAgICA9IHZhci5zZWxmOworCisgICAgICAgICAgICBpZiAodmFyLnN0b3JhZ2Ug
PT0gc3B2OjpTdG9yYWdlQ2xhc3NVbmlmb3JtQ29uc3RhbnQgJiYgIWlzX2hpZGRlbl92YXJpYWJs
ZSh2YXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2lt
YWdlX3R5cGUodHlwZSkgJiYgdHlwZS5pbWFnZS5kZXB0aCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1IYXNEZXB0aFNhbXBsZXIgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gJmVudHJ5X2Z1bmMgPSB0aGlzLT5nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJG
dW5jdGlvbj4oaXIuZGVmYXVsdF9lbnRyeV9wb2ludCk7CisgICAgICAgICAgICAgICAgICAgIGVu
dHJ5X2Z1bmMuZml4dXBfaG9va3NfaW4ucHVzaF9iYWNrKFt0aGlzLCAmdHlwZSwgJnZhciwgdmFy
SWRdKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBl
LmFycmF5LmVtcHR5KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCgiY29u
c3RhbnQgdW5pZm9ybTx1aW50PiIsIGlzQXJyYXlUeXBlID8gIiogIiA6ICImICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24o
dmFySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJyYXlUeXBlID8g
IiA9ICYiIDogIiA9ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fbmFt
ZShtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCksICJbIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcGlydl9jcm9zczo6Y29udmVydF90b19zdHJpbmcoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tZXRhbF9yZXNvdXJjZV9pbmRleCh2
YXIsIHNwaXJ2X2Nyb3NzOjpTUElSVHlwZTo6SW1hZ2UpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiXTsiKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGQ6OnN0
cmluZyB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0ZXhwciBjaGFyIGtDb21wYXJlTW9kZVN1ZmZpeFtdID0gIl9Db21wTW9kZSI7
CisgICAgICAgIGF1dG8gKmNvbWJpbmVkICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0
PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmluZWRJbWFnZVNhbXBsZXI+KGlkKTsKKworICAgICAgICBz
dGQ6OnN0cmluZyBleHByID0gdG9fZXhwcmVzc2lvbihjb21iaW5lZCA/IGNvbWJpbmVkLT5pbWFn
ZSA6IHNwaXJ2X2Nyb3NzOjpWYXJpYWJsZUlEKGlkKSk7CisgICAgICAgIGF1dG8gaW5kZXggICAg
ICAgPSBleHByLmZpbmRfZmlyc3Rfb2YoJ1snKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICByZXR1cm4gZXhwciArIGtDb21wYXJlTW9kZVN1
ZmZpeDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGltYWdlRXhw
ciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4KTsKKyAgICAgICAgICAgIGF1dG8gYXJyYXlFeHByID0g
ZXhwci5zdWJzdHIoaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGltYWdlRXhwciArIGtDb21w
YXJlTW9kZVN1ZmZpeCArIGFycmF5RXhwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRl
eHQgKm1Db250ZXh0OworICAgIHVpbnQzMl90IG1BTkdMRVNoYWRvd0NvbXBhcmVNb2Rlc1Zhcklk
ID0gMDsKKyAgICBib29sIG1IYXNEZXB0aFNhbXBsZXIgICAgICAgICAgICAgICAgICA9IGZhbHNl
OwogfTsKIAotYW5nbGU6OlJlc3VsdCBDb252ZXJ0U3BpcnZUb01zbCgKLSAgICBDb250ZXh0ICpj
b250ZXh0LAotICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCi0gICAgY29uc3Qgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3Ms
Ci0gICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9y
aWdpbmFsQmluZGluZ3MsCi0gICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3Jp
Z2luYWxTYW1wbGVyQmluZGluZ3MsCi0gICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNv
ZGUsCi0gICAgVHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRTaGFkZXJJbmZvT3V0KQor
YW5nbGU6OlJlc3VsdCBDb252ZXJ0U3BpcnZUb01zbChDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4
ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5nTWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJp
dkNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJ
bmZvICp0cmFuc2xhdGVkU2hhZGVySW5mb091dCkKIHsKICAgICBpZiAoIXNwcml2Q29kZSB8fCBz
cHJpdkNvZGUtPmVtcHR5KCkpCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CiAgICAgfQogCi0gICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0
ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CisgICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNs
KGNvbnRleHQsIHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CiAKICAgICAvLyBOT1RFKGhxbGUpOiBz
cGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlvbnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3
ZSBkbyBoZXJlCiAgICAgLy8gaW4gY2FzZSBvZiBlcnJvcj8KQEAgLTQzMSwxMiArMTE2NywxMyBA
QCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJv
Z3JhbVN0YXRlLAogICAgICAgICAgICAgb3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUlu
dGVyZmFjZUluZm8sIHhmYk9ubHlTaGFkZXJTb3VyY2VPdXQsCiAgICAgICAgICAgICAmeGZiT25s
eVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CiAKLSAgICAgICAgR2xzbGFu
Z0Fzc2lnbkxvY2F0aW9ucyhvcHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBn
bDo6U2hhZGVyVHlwZTo6VmVydGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4
ZmJPbmx5SW50ZXJmYWNlSW5mbywgJnhmYk9ubHlWYXJpYWJsZU1hcHMpOworICAgICAgICBHbHNs
YW5nQXNzaWduTG9jYXRpb25zKG9wdGlvbnMsIHByb2dyYW1TdGF0ZS5nZXRFeGVjdXRhYmxlKCks
IGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwcyk7CiAgICAgICAgICp4
ZmJPbmx5VlNWYXJpYWJsZUluZm9NYXBPdXQgPSBzdGQ6Om1vdmUoeGZiT25seVZhcmlhYmxlTWFw
c1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CiAgICAgfQogfQogCisKIGFuZ2xlOjpSZXN1bHQg
R2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAm
bGlua2VkU2hhZGVyU3RhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCkBAIC00NzgsNyArMTIxNSw3IEBAIGFuZ2xlOjpS
ZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNsYXRlZFNoYWRlckluZm8gKm1zbFhmYk9ubHlTaGFkZXJJbmZvT3V0
IC8qKiBudWxsYWJsZSAqLykKIHsKICAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1
ZmZlciBiaW5kaW5ncyBnZW5lcmF0ZWQgYnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8g
YSByZW1hcC4KLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1
Ym9PcmlnaW5hbEJpbmRpbmdzOworICAgIGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50
MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5nczsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50
ZXJmYWNlQmxvY2s+ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOwog
ICAgIGZvciAodWludDMyX3QgYnVmZmVySWR4ID0gMDsgYnVmZmVySWR4IDwgYmxvY2tzLnNpemUo
KTsgKytidWZmZXJJZHgpCiAgICAgewpAQCAtNDg5LDcgKzEyMjYsNyBAQCBhbmdsZTo6UmVzdWx0
IFNwaXJ2Q29kZVRvTXNsKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gUmV0cmlldmUgb3JpZ2luYWwgWEZCIGJ1ZmZlcnMgYmluZGluZ3MgcHJvZHVjZWQgYnkgZnJv
bnQgZW5kLgotICAgIHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9y
aWdpbmFsQmluZGluZ3M7CisgICAgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiB4
ZmJPcmlnaW5hbEJpbmRpbmdzOwogICAgIGZvciAodWludDMyX3QgYnVmZmVySWR4ID0gMDsgYnVm
ZmVySWR4IDwga01heFNoYWRlclhGQnM7ICsrYnVmZmVySWR4KQogICAgIHsKICAgICAgICAgc3Rk
OjpzdHJpbmcgYnVmZmVyTmFtZSA9IHJ4OjpHZXRYZmJCdWZmZXJOYW1lKGJ1ZmZlcklkeCk7CkBA
IC01MzMsNiArMTI3MCw1IEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAq
Y29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfSAg
Ly8gbmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lv
bl9xdWVyeV9wb29sLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKaW5kZXggODdkYzIxNzY0NjM3
YTFiMWZmZTM5YmU3MWMzZTI4NDRlODkxMjdjYS4uZjg1NzAzNDk5ZDYxYmNlZmIxOGUwNTkxMTI1
Y2NkY2Q2NzYyYTkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2Nj
bHVzaW9uX3F1ZXJ5X3Bvb2wuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9w
b29sLm1tCmluZGV4IDM2OGRiZjQ2Njk2YWQyZjU0ODEyMzMyOTQwYWZiYjQyMjNlN2JmYWQuLjdj
Yzg5OTAwNGVjN2VhODNmZWY2ODVkZWFlZThjODBlMjk2NDY4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVz
aW9uX3F1ZXJ5X3Bvb2wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUyLDE2ICs1MiwxNSBAQCBhbmdsZTo6
UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9vbDo6YWxsb2NhdGVRdWVyeU9mZnNldChDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAogICAgIHsKICAgICAgICAgLy8gRmlyc3QgYWxsb2NhdGlvbgogICAgICAg
ICBBTkdMRV9UUlkoQnVmZmVyOjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExS
ZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQYXNz
UmVzdWx0c1Bvb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2Nj
bHVzaW9uUXVlcnlSZXN1bHRTaXplLCBudWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkp
OwogICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5nZXQoKS5sYWJlbCA9IEAiT2NjbHVz
aW9uUXVlcnlQb29sIjsKICAgICB9CiAgICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2Ns
dXNpb25RdWVyeVJlc3VsdFNpemUgPiBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCiAg
ICAgewogICAgICAgICAvLyBEb3VibGUgdGhlIGNhcGFjaXR5CiAgICAgICAgIEFOR0xFX1RSWShC
dWZmZXI6Ok1ha2VCdWZmZXJXaXRoUmVzT3B0KGNvbnRleHRNdGwsIE1UTFJlc291cmNlU3RvcmFn
ZU1vZGVQcml2YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkgKiAyLCBudWxscHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1
bHRzUG9vbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJQ
YXNzUmVzdWx0c1Bvb2wtPnNpemUoKSAqIDIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKICAgICAgICAgbVJl
bmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7
CiAgICAgfQogCkBAIC04OCw2ICs4NywxMiBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5
UG9vbDo6YWxsb2NhdGVRdWVyeU9mZnNldChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIGlm
IChjdXJyZW50T2Zmc2V0ID09IDApCiAgICAgewogICAgICAgICBtUmVzZXRGaXJzdFF1ZXJ5ID0g
Y2xlYXJPbGRWYWx1ZTsKKyAgICAgICAgaWYgKCFjbGVhck9sZFZhbHVlICYmICFjb250ZXh0TXRs
LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb2xkIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5
IG5lZWRzIHRvIGJlIHJldGFpbmVkIGFuZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlcgor
ICAgICAgICAgICAgLy8gcmVhZC13cml0ZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9mZnNldCB0
byBzdG9yZSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBxdWVyeS4KKyAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRleHRNdGwsIHF1ZXJ5LCBmYWxzZSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMTIsMTAg
KzExNywzNCBAQCB2b2lkIE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1
bHRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBSZW5kZXJVdGlscyAmdXRpbHMgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxz
KCk7CisgICAgUmVuZGVyVXRpbHMgJnV0aWxzICAgICAgICAgICAgICA9IGNvbnRleHRNdGwtPmdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsKKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNv
ZGVyID0gbnVsbHB0cjsKKyAgICAvLyBDb21iaW5lIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBv
ZmZzZXRzIGFsbG9jYXRlZCBmb3IgZmlyc3QgcXVlcnkKKyAgICBpZiAobUFsbG9jYXRlZFF1ZXJp
ZXNbMF0pCisgICAgeworICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZiA9IG1BbGxvY2F0
ZWRRdWVyaWVzWzBdLT5nZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVyKCk7CisgICAgICAgIGNvbnN0
IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRzTXRsICZhbGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAg
ICAgIG1BbGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygp
OworICAgICAgICBpZiAoIW1SZXNldEZpcnN0UXVlcnkgJiYKKyAgICAgICAgICAgICFjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5h
YmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgd2UgY2Fubm90IHJlYWQgYW5kIHdy
aXRlIHRvIHRoZSBzYW1lIGJ1ZmZlciBpbiBzaGFkZXIuIFdlIG5lZWQgdG8gY29weSB0aGUgb2xk
CisgICAgICAgICAgICAvLyB2YWx1ZSBvZiBmaXJzdCBxdWVyeSB0byBmaXJzdCBvZmZzZXQgYWxs
b2NhdGVkIGZvciBpdC4KKyAgICAgICAgICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisgICAgICAgICAgICBibGl0RW5jb2Rlci0+Y29weUJ1ZmZl
cihkc3RCdWYsIDAsIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wsIGFsbG9jYXRlZE9mZnNldHMuZnJv
bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtPY2NsdXNpb25RdWVy
eVJlc3VsdFNpemUpOworICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQo
Y29udGV4dE10bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdXRpbHMuY29t
YmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10bCwgIW1SZXNldEZpcnN0UXVlcnksIGFsbG9j
YXRlZE9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB9CisgICAgfQogCiAgICAg
Ly8gQ29tYmluZSB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9y
IGVhY2ggb2YgdGhlIHJlbWFpbmluZyBxdWVyaWVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtQWxsb2NhdGVkUXVlcmllcy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQogICAgIHsKICAgICAgICAgUXVlcnlN
dGwgKnF1ZXJ5ID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV07CiAgICAgICAgIGlmICghcXVlcnkpCkBA
IC0xMjYsMTIgKzE1NSwxMiBAQCB2b2lkIE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2li
aWxpdHlSZXN1bHRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCiAgICAgICAgIGNvbnN0IEJ1ZmZl
clJlZiAmZHN0QnVmID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1bHRC
dWZmZXIoKTsKICAgICAgICAgY29uc3QgVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9j
YXRlZE9mZnNldHMgPQogICAgICAgICAgICAgbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldEFsbG9j
YXRlZFZpc2liaWxpdHlPZmZzZXRzKCk7Ci0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5
UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBrZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFtUmVzZXRG
aXJzdFF1ZXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0
ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB1dGls
cy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCBmYWxzZSwgYWxsb2NhdGVkT2Zm
c2V0cywgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHN0QnVmKTsKICAgICB9CiAKICAgICAvLyBSZXF1ZXN0IHN5bmNocm9uaXph
dGlvbiBhbmQgY2xlYW51cAotICAgIEJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBj
b250ZXh0TXRsLT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKyAgICBibGl0RW5jb2RlciA9IGNv
bnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5jb2RlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBRdWVy
eU10bCAqcXVlcnkgPSBtQWxsb2NhdGVkUXVlcmllc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0
aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3JlbmRlcl91dGlscy5oCmluZGV4IDZiOTY3ZGU4ZmQ0OTBhNDgxMzU4ODMyYTc2ZjIw
NjU0ZGIwZTkxMTkuLmQwYTQ4MzcxOGZlMDU0NGRiNTdkZmU5ZWVlZWIzYzdiNDhlNGJhMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaApAQCAtNiw2ICs2LDgg
QEAKIC8vIG10bF9yZW5kZXJfdXRpbHMuaDoKIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVy
ZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdoaWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlv
bnMgYW5kIHNoYWRlcnMKIC8vICAgIGZvciBjb252ZXJ0aW5nLCBibGl0dGluZywgY29weWluZyBh
cyB3ZWxsIGFzIGdlbmVyYXRpbmcgZGF0YSwgYW5kIG1hbnkgbW9yZS4KKy8vIE5PVEUoaHFsZSk6
IENvbnNpZGVyIHNwbGl0dGluZyB0aGlzIGNsYXNzIGludG8gbXVsdGlwbGUgY2xhc3NlcyBlYWNo
IGRvaW5nIGRpZmZlcmVudCB1dGlsaXRpZXMuCisvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9v
IGJpZy4KIC8vCiAKICNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9V
VElMU19IXwpAQCAtODksNiArOTEsOCBAQCBzdHJ1Y3QgQ29sb3JCbGl0UGFyYW1zIDogcHVibGlj
IEJsaXRQYXJhbXMKIHN0cnVjdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQ
YXJhbXMKIHsKICAgICBUZXh0dXJlUmVmIHNyY1N0ZW5jaWw7CisgICAgdWludDMyX3Qgc3JjU3Rl
bmNpbExldmVsID0gMDsKKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOwogfTsKIAog
Ly8gU3RlbmNpbCBibGl0IHZpYSBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2Ug
ZGVwdGggdGV4dHVyZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KQEAgLTMwOSwyMSArMzEzLDE3IEBA
IGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAg
cHVibGljOgogICAgIHZvaWQgb25EZXN0cm95KCk7CiAKLSAgICAvLyBDb252ZXJ0IGluZGV4IGJ1
ZmZlci4KICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEluZGV4Q29udmVyc2lvblBhcmFtcyAmcGFyYW1zKTsKLSAgICAvLyBHZW5lcmF0ZSB0cmlh
bmdsZSBmYW4gaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXMoKS4KICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRyaUZhbk9yTGluZUxvb3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7CiAgICAgLy8gR2VuZXJh
dGUgdHJpYW5nbGUgZmFuIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3RWxlbWVudHMoKS4KICAgICBh
bmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29udGV4
dE10bCAqY29udGV4dE10bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5l
cmF0ZWQpOwogCi0gICAgLy8gR2VuZXJhdGUgbGluZSBsb29wIGluZGV4IGJ1ZmZlciBmb3IgZ2xE
cmF3QXJyYXlzKCkuCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJv
bUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJh
eVBhcmFtcyAmcGFyYW1zKTsKLSAgICAvLyBHZW5lcmF0ZSBsaW5lIGxvb3AncyBsYXN0IHNlZ21l
bnQgaW5kZXggYnVmZmVyIGZvciBnbERyYXdBcnJheXMoKS4KLSAgICAvLyBUaGlzIGlzIHVzZWQg
d2hlbiBwcmltaXRpdmUgcmVzdGFydCBpcyBub3QgZW5hYmxlZC4KICAgICBhbmdsZTo6UmVzdWx0
IGdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpcnN0
VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGxhc3RWZXJ0ZXgsCkBAIC0zNDAsNiArMzQwLDE4IEBAIGNsYXNzIEluZGV4R2VuZXJh
dG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBhbmdsZTo6UmVzdWx0IGdl
bmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudEZyb21FbGVtZW50c0FycmF5KENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CiAK
KyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihD
b250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRl
UHJpbWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisK
KyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAm
cGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKICAgcHJpdmF0ZToKICAgICAv
LyBJbmRleCBnZW5lcmF0b3IgY29tcHV0ZSBwaXBlbGluZXM6CiAgICAgLy8gIC0gRmlyc3QgZGlt
ZW5zaW9uOiBpbmRleCB0eXBlLgpAQCAtMzQ4LDcgKzM2MCw2IEBAIGNsYXNzIEluZGV4R2VuZXJh
dG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgc3RkOjphcnJheTxz
dGQ6OmFycmF5PEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAog
ICAgICAgICAgICAgICAgICAgIGFuZ2xlOjpFbnVtU2l6ZTxnbDo6RHJhd0VsZW1lbnRzVHlwZT4o
KT47CiAKLSAgICAvLyBHZXQgY29tcHV0ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdl
ZW4gYnVmZmVycy4KICAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+
IGdldEluZGV4Q29udmVyc2lvblBpcGVsaW5lKAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLAogICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBzcmNUeXBlLApAQCAtMzc1LDcgKzM4
Niw4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKICAgICAgICAgLy8gTXVzdCBiZSBtdWx0aXBsZXMgb2Yga0luZGV4QnVmZmVyT2Zmc2V0QWxp
Z25tZW50CiAgICAgICAgIHVpbnQzMl90IGRzdE9mZnNldCk7CiAgICAgYW5nbGU6OlJlc3VsdCBn
ZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJh
dGVkKTsKIAogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVt
ZW50c0FycmF5R1BVKAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLApAQCAtMzkzLDYg
KzQwNSwxMSBAQCBjbGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNv
cHlhYmxlCiAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgIGNvbnN0IElu
ZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKIAorICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVmVy
dGljZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2Vz
R2VuZXJhdGVkKTsKKwogICAgIEluZGV4Q29udmVyc2lvblBpcGVsaW5lQXJyYXkgbUluZGV4Q29u
dmVyc2lvblBpcGVsaW5lQ2FjaGVzOwogCiAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJh
eSBtVHJpRmFuRnJvbUVsZW1BcnJheUdlbmVyYXRvclBpcGVsaW5lQ2FjaGVzOwpAQCAtNDI5LDcg
KzQ0Niw3IEBAIGNsYXNzIE1pcG1hcFV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAg
IHB1YmxpYzoKICAgICB2b2lkIG9uRGVzdHJveSgpOwogCi0gICAgLy8gQ29tcHV0ZSBiYXNlZCBt
aXBtYXAgZ2VuZXJhdGlvbi4gT25seSBwb3NzaWJsZSBmb3IgM0QgdGV4dHVyZSBmb3Igbm93Lgor
ICAgIC8vIENvbXB1dGUgYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24uCiAgICAgYW5nbGU6OlJlc3Vs
dCBnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKQEAgLTQzNyw5
ICs0NTQsMTUgQEAgY2xhc3MgTWlwbWFwVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUK
IAogICBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRp
YWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRNaXBHZW5l
cmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZv
aWQgZW5zdXJlMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10
bCAqY29udGV4dE10bCk7CisgICAgdm9pZCBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJ
bml0aWFsaXplZChDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKIAogICAgIC8vIE1pcG1hcHMgZ2Vu
ZXJhdGluZyBjb21wdXRlIHBpcGVsaW5lOgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQ
aXBlbGluZVN0YXRlPj4gbTNETWlwR2VuZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8
aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKyAg
ICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG0yREFycmF5TWlwR2Vu
ZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3Rh
dGU+PiBtQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lOwogfTsKIAogLy8gVXRpbCBjbGFzcyBmb3Ig
aGFuZGxpbmcgcGl4ZWxzIGNvcHkgYmV0d2VlbiBidWZmZXJzIGFuZCB0ZXh0dXJlcwpAQCAtNTQz
LDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBh
bmdsZTo6Tm9uQ29weWFibGUKICAgICBSZW5kZXJQaXBlbGluZUNhY2hlIG1Db21wb25lbnRzRXhw
YW5kUmVuZGVyUGlwZWxpbmVDYWNoZTsKIH07CiAKKy8vIFV0aWwgY2xhc3MgZm9yIGhhbmRsaW5n
IHRyYW5zZm9ybSBmZWVkYmFjaworICAgIGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMKK3sK
KyAgcHVibGljOgorICAgIHZvaWQgb25EZXN0cm95KCk7CisgICAgQXV0b09iakNQdHI8aWQ8TVRM
UmVuZGVyUGlwZWxpbmVTdGF0ZT4+IGdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUo
CisgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgIFJlbmRlckNvbW1hbmRF
bmNvZGVyICpjbWRFbmNvZGVyLAorICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlw
ZWxpbmVEZXNjKTsKKworICBwcml2YXRlOgorICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+
PiBjcmVhdGVNc2xYZmJMaWJyYXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcgJnRyYW5zbGF0ZWRNc2wpOworfTsKKwogLy8gUmVuZGVyVXRpbHM6IGNvbnRhaW5lciBjbGFz
cyBvZiB2YXJpb3VzIHV0aWwgY2xhc3NlcyBhYm92ZQogY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJs
aWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiB7CkBAIC01ODcsNyArNjI1LDggQEAgY2xh
c3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAq
Y29udGV4dE10bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwogICAg
IGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250
ZXh0TXRsICpjb250ZXh0TXRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dl
bmVyYXRlZCk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9t
QXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5
UGFyYW1zICZwYXJhbXMpOwpAQCAtNjM5LDYgKzY3OCwxOSBAQCBjbGFzcyBSZW5kZXJVdGlscyA6
IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVy
RW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZzcmNBbmdsZUZvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXRDb252ZXJ0
UGFyYW1zICZwYXJhbXMpOworICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVHJhbnNmb3JtRmVlZGJh
Y2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVu
ZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpOworCisgICAgYW5nbGU6OlJlc3VsdCBnZW5l
cmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0
ZWQpOworICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZm
ZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFy
YW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRl
UHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dl
bmVyYXRlZCk7CiAKICAgcHJpdmF0ZToKICAgICAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKQEAg
LTY0Niw3ICs2OTgsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmds
ZTo6Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9y
KE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3Ig
KmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtNjYyLDYgKzcxNCw3IEBAIGNsYXNzIFJl
bmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIE1pcG1h
cFV0aWxzIG1NaXBtYXBVdGlsczsKICAgICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5n
bGU6OkVudW1TaXplPFBpeGVsVHlwZT4oKT4gbUNvcHlQaXhlbHNVdGlsczsKICAgICBWZXJ0ZXhG
b3JtYXRDb252ZXJzaW9uVXRpbHMgbVZlcnRleEZvcm1hdFV0aWxzOworICAgIFRyYW5zZm9ybUZl
ZWRiYWNrVXRpbHMgbVRyYW5zZm9ybUZlZWRiYWNrVXRpbHM7CiB9OwogCiB9ICAvLyBuYW1lc3Bh
Y2UgbXRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCmluZGV4
IGQyMjQ4MDE0MjczYzM3ZDRkNGIyYmVlNzBjZmRhYjExOTVjMThiYTYuLjMyYjMzY2FiOGZiZTkx
MWJiMjZhODAyM2Y5ZmViMzFjNTdjOTE2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVuZGVyX3V0aWxzLm1tCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rp
c3BsYXlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRs
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCkBAIC01NCwxMCArNTUsMTIgQEAgc3Ry
dWN0IEJsaXRQYXJhbXNVbmlmb3JtCiAgICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOwogICAg
IGludCBzcmNMZXZlbCAgICAgICAgID0gMDsKICAgICBpbnQgc3JjTGF5ZXIgICAgICAgICA9IDA7
CisgICAgaW50IHNyY0xldmVsMiAgICAgICAgPSAwOworICAgIGludCBzcmNMYXllcjIgICAgICAg
ID0gMDsKICAgICB1aW50OF90IGRzdEZsaXBYICAgICA9IDA7CiAgICAgdWludDhfdCBkc3RGbGlw
WSAgICAgPSAwOwogICAgIHVpbnQ4X3QgZHN0THVtaW5hbmNlID0gMDsgIC8vIGRlc3QgdGV4dHVy
ZSBpcyBsdW1pbmFjZQotICAgIHVpbnQ4X3QgcGFkZGluZ1sxM107CisgICAgdWludDhfdCBwYWRk
aW5nWzldOwogfTsKIAogc3RydWN0IEJsaXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCkBA
IC05MCw3ICs5Myw3IEBAIHN0cnVjdCBJbmRleENvbnZlcnNpb25Vbmlmb3JtCiAgICAgdWludDhf
dCBwYWRkaW5nWzddOwogfTsKIAotLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRl
cnMvdmlzaWJpbGl0eS5tZXRhbAorLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRl
cnMvbWlzYy5tZXRhbAogc3RydWN0IENvbWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQogewog
ICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0OwpAQCAtOTksMTIgKzEwMiwxMSBAQCBzdHJ1Y3QgQ29t
YmluZVZpc2liaWxpdHlSZXN1bHRVbmlmb3JtCiB9OwogCiAvLyBTZWUgbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCi1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBV
bmlmb3JtCitzdHJ1Y3QgR2VuZXJhdGUzRE1pcG1hcFVuaWZvcm0KIHsKICAgICB1aW50MzJfdCBz
cmNMZXZlbDsKICAgICB1aW50MzJfdCBudW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICB1aW50OF90
IHNSR0I7Ci0gICAgdWludDhfdCBwYWRkaW5nWzddOworICAgIHVpbnQzMl90IHBhZGRpbmdbMl07
CiB9OwogCiAvLyBTZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZl
ci5tZXRhbApAQCAtMTU2LDE5ICsxNTgsMzYgQEAgc3RydWN0IENvcHlWZXJ0ZXhVbmlmb3Jtcwog
Ly8gZXhpdGluZyBibG9jay4KIHN0cnVjdCBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkKIHsK
LSAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10bCwg
YW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0KQotICAgICAgICA6IG1Db250ZXh0TXRsKGNvbnRleHRN
dGwpLCBtUmVzdWx0T3V0KHJlc3VsdE91dCkKKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVl
cnkoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuZ2xlOjpSZXN1bHQgKnJlc3VsdE91dCkKKyAgICAgICAgOiBtQ29udGV4dE10
bChjb250ZXh0TXRsKSwgbUVuY29kZXIoZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQog
ICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVP
Y2NsdXNpb25RdWVyeSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVyLT5wdXNoRGVi
dWdHcm91cChAIkRpc2FibGVkIE9jY2x1c2lvblF1ZXJ5Iik7CisgICAgICAgIH0KKyNlbmRpZgog
ICAgICAgICAvLyB0ZW1wb3JhcmlseSBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeQogICAgICAgICBj
b250ZXh0TXRsLT5kaXNhYmxlQWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKICAg
ICB9CiAgICAgflNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSgpCiAgICAgewogICAgICAgICAq
bVJlc3VsdE91dCA9IG1Db250ZXh0TXRsLT5yZXN0YXJ0QWN0aXZlT2NjbHVzaW9uUXVlcnlJblJl
bmRlclBhc3MoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChtQ29udGV4dE10bC0+aGFz
QWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUVuY29kZXIt
PnBvcERlYnVnR3JvdXAoKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgQU5HTEVfVU5VU0VE
X1ZBUklBQkxFKG1FbmNvZGVyKTsKKyNlbmRpZgogICAgIH0KIAogICBwcml2YXRlOgogICAgIENv
bnRleHRNdGwgKm1Db250ZXh0TXRsOworICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICptRW5jb2Rl
cjsKIAogICAgIGFuZ2xlOjpSZXN1bHQgKm1SZXN1bHRPdXQ7CiB9OwpAQCAtMjE5LDY2ICsyMzgs
NDMgQEAgYW5nbGU6OlJlc3VsdCBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10
bCAqY29udGV4dE10bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAq
aW5kaWNlc0dlbmVyYXRlZCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAyKTsKLQotICAgIHVpbnQz
Ml90IGdlbkluZGljZXNDb3VudDsKLSAgICBBTkdMRV9UUlkobXRsOjpHZXRUcmlhbmdsZUZhbklu
ZGljZXNDb3VudChjb250ZXh0TXRsLCBjb3VudCwgJmdlbkluZGljZXNDb3VudCkpOwotCi0gICAg
Y29uc3RleHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCAgICA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOwotICAgIGNvbnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KKyAgICBjb25z
dGV4cHIgVCBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4KCk7CisgICAgR0xzaXplaSBkc3RUcmlhbmdsZSAgICAgICAgICAgICAgICAgICA9IDA7
CiAgICAgdWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0
QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOwotICAgIFQgdHJpRmlyc3RJZHgg
ICAgPSAwOyAgLy8gVmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMXN0IHZlcnRleAotICAgIFQg
c3JjUHJldklkeCAgICAgPSAwOyAgLy8gVmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMm5kIHZl
cnRleAorICAgIFQgdHJpRmlyc3RJZHgsIHNyY1ByZXZJZHg7CiAgICAgbWVtY3B5KCZ0cmlGaXJz
dElkeCwgaW5kaWNlcywgc2l6ZW9mKHRyaUZpcnN0SWR4KSk7CisgICAgbWVtY3B5KCZzcmNQcmV2
SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKIAogICAgIGlmIChwcmltaXRp
dmVSZXN0YXJ0RW5hYmxlZCkKICAgICB7Ci0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBMb2Nh
dGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xlJ3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZlci4K
ICAgICAgICAgR0xzaXplaSB0cmlGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlICh0cmlG
aXJzdElkeCA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtZW1jcHkoJmRzdFB0clt0cmlGaXJzdElkeExvYysrXSwgJmtEc3RQcmltaXRpdmVSZXN0
YXJ0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtEc3RQcmltaXRpdmVSZXN0YXJ0
SW5kZXgpKTsKKyAgICAgICAgICAgICsrdHJpRmlyc3RJZHhMb2M7CiAgICAgICAgICAgICBtZW1j
cHkoJnRyaUZpcnN0SWR4LCBpbmRpY2VzICsgdHJpRmlyc3RJZHhMb2MsIHNpemVvZih0cmlGaXJz
dElkeCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHRyaUZpcnN0SWR4TG9jICsgMiA+PSBj
b3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCBpbmRpY2VzLgotICAg
ICAgICAgICAgZm9yIChHTHNpemVpIGkgPSB0cmlGaXJzdElkeExvYzsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbaV0sICZrRHN0
UHJpbWl0aXZlUmVzdGFydEluZGV4LCBzaXplb2Yoa0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHRyaUZpcnN0SWR4
TG9jICsgMSA8IGNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoJnNyY1ByZXZJ
ZHgsIGluZGljZXMgKyB0cmlGaXJzdElkeExvYyArIDEsIHNpemVvZihzcmNQcmV2SWR4KSk7Ci0g
ICAgICAgIH0KLQogICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IHRyaUZpcnN0SWR4TG9jICsgMjsg
aSA8IGNvdW50OyArK2kpCiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQzMl90IHRyaUluZGlj
ZXNbM107Ci0KICAgICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJ
ZHgsIGluZGljZXMgKyBpLCBzaXplb2Yoc3JjSWR4KSk7CisgICAgICAgICAgICBib29sIGNvbXBs
ZXRlVHJpYW5nbGUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1By
aW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBzcmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRl
eCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xl
LgotICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJ
bmRleDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdICA9IGtEc3RQcmltaXRpdmVSZXN0
YXJ0SW5kZXg7Ci0gICAgICAgICAgICAgICAgdHJpSW5kaWNlc1syXSAgPSBrRHN0UHJpbWl0aXZl
UmVzdGFydEluZGV4OwotICAgICAgICAgICAgICAgIHRyaUZpcnN0SWR4ICAgID0gc3JjSWR4Owot
ICAgICAgICAgICAgICAgIHRyaUZpcnN0SWR4TG9jID0gaTsKKyAgICAgICAgICAgICAgICAvLyBJ
bmNvbXBsZXRlIHRyaWFuZ2xlLiBNb3ZlIHRvIG5leHQgdHJpYW5nbGUgYW5kIHNldCB0cmlGaXJz
dEluZGV4CisgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHggICAgICA9IHNyY0lkeDsKKyAgICAg
ICAgICAgICAgICB0cmlGaXJzdElkeExvYyAgID0gaTsKKyAgICAgICAgICAgICAgICBjb21wbGV0
ZVRyaWFuZ2xlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChp
IDwgdHJpRmlyc3RJZHhMb2MgKyAyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IEluY29tcGxldGUgdHJpYW5nbGUKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdID0ga0Rz
dFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdID0g
a0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJd
ID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBs
ZXRlIHRyaWFuZ2xlLCBtb3ZlIHRvIG5leHQgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZVRyaWFuZ2xlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CkBAIC0yODYsMTUgKzI4MiwxNiBAQCBhbmdsZTo6UmVzdWx0IEdlblRyaUZh
bkZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAg
ICAgIHRyaUluZGljZXNbMV0gPSBzcmNQcmV2SWR4OwogICAgICAgICAgICAgICAgIHRyaUluZGlj
ZXNbMl0gPSBzcmNJZHg7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tcGxldGVU
cmlhbmdsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsg
MyAqIGRzdFRyaWFuZ2xlLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAg
ICAgICAgICAgICsrZHN0VHJpYW5nbGU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNQ
cmV2SWR4ID0gc3JjSWR4OwotCi0gICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0g
MiksIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRpY2VzKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwg
c2l6ZW9mKHNyY1ByZXZJZHgpKTsKLQogICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDI7IGkgPCBj
b3VudDsgKytpKQogICAgICAgICB7CiAgICAgICAgICAgICBUIHNyY0lkeDsKQEAgLTMwNiwxMSAr
MzAzLDY1IEBAIGFuZ2xlOjpSZXN1bHQgR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4Owog
ICAgICAgICAgICAgc3JjUHJldklkeCAgICA9IHNyY0lkeDsKIAotICAgICAgICAgICAgbWVtY3B5
KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOwor
ICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJpSW5kaWNlcywg
c2l6ZW9mKHRyaUluZGljZXMpKTsKKyAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgZHN0QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNvbnRleHRNdGws
IGRzdE9mZnNldCwgZ2VuSW5kaWNlc0NvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYg
KGluZGljZXNHZW5lcmF0ZWQpCisgICAgICAgICppbmRpY2VzR2VuZXJhdGVkID0gZHN0VHJpYW5n
bGUgKiAzOworICAgIGRzdEJ1ZmZlci0+dW5tYXAoY29udGV4dE10bCk7CisKKyAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYW5n
bGU6OlJlc3VsdCBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGlj
ZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIGNvbnN0
ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
OjptYXgoKTsKKyAgICB1aW50MzJfdCAqZHN0UHRyICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworICAgIEdM
c2l6ZWkgcmVhZFZhbHVlTG9jID0gMDsKKyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7Cisg
ICAgdWludDMyX3QgZHN0SWR4ICAgICAgPSAwOworICAgIG1lbWNweSgmcmVhZFZhbHVlLCBpbmRp
Y2VzLCBzaXplb2YocmVhZFZhbHVlKSk7CisgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJp
bWl0aXZlUmVzdGFydEluZGV4KQorICAgIHsKKworICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKyAg
ICAgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihy
ZWFkVmFsdWUpKTsKKyAgICB9CisgICAgd2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQ
cmltaXRpdmUgPD0gY291bnQpCisgICAgeworCisgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2ll
c1szXTsKKyAgICAgICAgYm9vbCBmb3VuZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGZvciAo
aW50IGsgPSAwOyBrIDwgaW5kaWNlc1BlclByaW1pdGl2ZTsgKytrKQorICAgICAgICB7CisgICAg
ICAgICAgICBtZW1jcHkoJnJlYWRWYWx1ZSwgaW5kaWNlcyArIHJlYWRWYWx1ZUxvYywgc2l6ZW9m
KHJlYWRWYWx1ZSkpOworICAgICAgICAgICAgKytyZWFkVmFsdWVMb2M7CisgICAgICAgICAgICBp
ZiAocmVhZFZhbHVlID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm91bmRQcmltaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBwcmltSW5kaWNpZXNba10gPSAodWludDMyX3QpcmVhZFZhbHVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFByaW1pdGl2ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUluZGljaWVz
LCAoaW5kaWNlc1BlclByaW1pdGl2ZSkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
IGRzdElkeCArPSBpbmRpY2VzUGVyUHJpbWl0aXZlOworICAgICAgICB9CisgICAgfQorICAgIGlm
IChpbmRpY2VzR2VuZXJhdGVkKQorICAgICAgICAqaW5kaWNlc0dlbmVyYXRlZCA9IGRzdElkeDsK
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTMyOCwxNCArMzc5
LDExIEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4
dE10bCAqY29udGV4dE10bCwKICAgICBjb25zdCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFy
dEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCiAgICAgdWlu
dDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5t
YXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOwotICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZh
bHVlIG9mIG9mIGN1cnJlbnQgbGluZSBsb29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hh
bmdlIHdoZW4KLSAgICAvLyBlbmNvdW50ZXIgYSBwcmltaXRpdmUgcmVzdGFydCBpbmRleC4KICAg
ICBUIGxpbmVMb29wRmlyc3RJZHg7CiAgICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRp
Y2VzLCBzaXplb2YobGluZUxvb3BGaXJzdElkeCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVJlc3Rh
cnRFbmFibGVkKQogICAgIHsKLSAgICAgICAgLy8gbGluZUxvb3BGaXJzdElkeExvYzogbG9jYXRp
b24gb2YgY3VycmVudCBsaW5lIGxvb3AncyBmaXJzdCB2ZXJ0ZXggaW4gdGhlIHNvdXJjZSBidWZm
ZXIuCiAgICAgICAgIEdMc2l6ZWkgbGluZUxvb3BGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdo
aWxlIChsaW5lTG9vcEZpcnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCiAgICAg
ICAgIHsKQEAgLTM0NCwxNSArMzkyLDEyIEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9t
Q2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAgIG1lbWNw
eSgmbGluZUxvb3BGaXJzdElkeCwgaW5kaWNlcyArIGxpbmVMb29wRmlyc3RJZHhMb2MsIHNpemVv
ZihsaW5lTG9vcEZpcnN0SWR4KSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBkc3RJZHggOiB2
YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0dGVuIHRvIGRlc3QgYnVmZmVyCiAgICAgICAgIHVpbnQz
Ml90IGRzdElkeCA9IGxpbmVMb29wRmlyc3RJZHg7CiAgICAgICAgIG1lbWNweSgmZHN0UHRyW2xp
bmVMb29wRmlyc3RJZHhMb2NdLCAmZHN0SWR4LCBzaXplb2YoZHN0SWR4KSk7Ci0gICAgICAgIC8v
IGRzdFdyaXR0ZW46IG51bWJlciBvZiBpbmRpY2VzIHdyaXR0ZW4gdG8gZGVzdCBidWZmZXIKICAg
ICAgICAgdWludDMyX3QgZHN0V3JpdHRlbiA9IGxpbmVMb29wRmlyc3RJZHhMb2MgKyAxOwogCiAg
ICAgICAgIGZvciAoR0xzaXplaSBpID0gbGluZUxvb3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3Vu
dDsgKytpKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzcmNJZHggOiB2YWx1ZSBvZiBpbmRl
eCBmcm9tIHNvdXJjZSBidWZmZXIKICAgICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAg
bWVtY3B5KCZzcmNJZHgsIGluZGljZXMgKyBpLCBzaXplb2Yoc3JjSWR4KSk7CiAgICAgICAgICAg
ICBpZiAoc3JjSWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCkBAIC00MDAsNyArNDQ1
LDcgQEAgYW5nbGU6OlJlc3VsdCBHZW5MaW5lTG9vcEZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0
TXRsICpjb250ZXh0TXRsLAogCiAgICAgICAgICppbmRpY2VzR2VuZXJhdGVkID0gY291bnQgKyAx
OwogICAgIH0KLSAgICBkc3RCdWZmZXItPnVubWFwQW5kRmx1c2hTdWJzZXQoY29udGV4dE10bCwg
ZHN0T2Zmc2V0LCAoKmluZGljZXNHZW5lcmF0ZWQpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ZHN0QnVmZmVyLT51bm1hcChjb250ZXh0TXRsKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKIH0KQEAgLTQ3Miw3ICs1MTcsNyBAQCB2b2lkIEVuc3VyZUNvbXB1dGVQaXBl
bGluZUluaXRpYWxpemVkKERpc3BsYXlNdGwgKmRpc3BsYXksCiAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKICAgICB7CiAgICAgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5
LT5nZXRNZXRhbERldmljZSgpOwotICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0g
ZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIg
ICAgICAgICAgICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CiAgICAgICAgIE5T
RXJyb3IgKmVyciAgICAgICAgICAgICAgPSBuaWw7CiAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBz
aGFkZXIgICAgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rpb25OYW1lXTsK
IApAQCAtNTEyLDcgKzU1Nyw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxp
bmVJbml0aWFsaXplZCgKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAg
aWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRpc3BsYXktPmdldE1ldGFsRGV2aWNlKCk7Ci0g
ICAgICAgIGlkPE1UTExpYnJhcnk+IHNoYWRlckxpYiAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hh
ZGVyc0xpYigpOworICAgICAgICBhdXRvIHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+
Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKICAgICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAg
ICA9IG5pbDsKIAogICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyID0gW3NoYWRlckxpYiBu
ZXdGdW5jdGlvbldpdGhOYW1lOmZ1bmN0aW9uTmFtZQpAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQg
RW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKIEFOR0xFX0lOTElO
RQogdm9pZCBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNTdHJpbmcgKnZlcnRleEZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFk
ZXJMaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAqcGlwZWxpbmVDYWNoZU91dCkKIHsKICAgICBSZW5kZXJQ
aXBlbGluZUNhY2hlICZwaXBlbGluZUNhY2hlID0gKnBpcGVsaW5lQ2FjaGVPdXQ7CkBAIC01NDks
OSArNTk1LDcgQEAgdm9pZCBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRp
YWxpemVkKENvbnRleHQgKmNvbnRleHQsCiAKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAg
IHsKLSAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxh
eSgpOwotICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5LT5nZXREZWZh
dWx0U2hhZGVyc0xpYigpOwotICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgPSBbc2hh
ZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAgICAgICAg
aWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2
ZXJ0ZXhGdW5jdGlvbk5hbWVdOwogCiAgICAgICAgIEFTU0VSVChbc2hhZGVyIEFOR0xFX01UTF9B
VVRPUkVMRUFTRV0pOwogCkBAIC01NzAsNyArNjE0LDkgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXpl
ZFZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCiAgICAgaWYgKCFmdW5j
Q29uc3RhbnRzKQogICAgIHsKICAgICAgICAgLy8gTm9uIHNwZWNpYWxpemVkIGNvbnN0YW50cyBw
cm92aWRlZCwgdXNlIGRlZmF1bHQgY3JlYXRpb24gZnVuY3Rpb24uCi0gICAgICAgIEVuc3VyZVZl
cnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dCwgdmVydGV4RnVu
Y3Rpb25OYW1lLAorICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ID0gY29udGV4dC0+Z2V0RGlz
cGxheSgpOworICAgICAgICBhdXRvIHNoYWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVs
dFNoYWRlcnNMaWIoKTsKKyAgICAgICAgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2Fj
aGVJbml0aWFsaXplZChjb250ZXh0LCB2ZXJ0ZXhGdW5jdGlvbk5hbWUsIHNoYWRlckxpYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBl
bGluZUNhY2hlT3V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU4NCw5ICs2MzAsOSBA
QCB2b2lkIEVuc3VyZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0
aWFsaXplZCgKIAogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewotICAgICAgICBEaXNw
bGF5TXRsICpkaXNwbGF5ICAgICAgPSBjb250ZXh0LT5nZXREaXNwbGF5KCk7Ci0gICAgICAgIGlk
PE1UTExpYnJhcnk+IHNoYWRlckxpYiA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7
Ci0gICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICA9IG5pbDsKKyAgICAgICAgRGlzcGxh
eU10bCAqZGlzcGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKyAgICAgICAgYXV0byBzaGFk
ZXJMaWIgICAgICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgIE5T
RXJyb3IgKmVyciAgICAgICAgPSBuaWw7CiAKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRl
ciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudFZh
bHVlczpmdW5jQ29uc3RhbnRzCkBAIC02MDksMTIgKzY1NSwyOCBAQCBSZW5kZXJQaXBlbGluZURl
c2MgR2V0Q29tcHV0aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJD
b21tYW5kRQogICAgIGNvbnN0IFJlbmRlclBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNtZEVu
Y29kZXItPnJlbmRlclBhc3NEZXNjKCk7CiAKICAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJl
bmRlclBpcGVsaW5lT3V0cHV0RGVzYygmcGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOwot
ICAgIHBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgICAgID0gUmVuZGVyUGlwZWxpbmVS
YXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICBwaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5
cGUgICA9IFJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CiAgICAgcGlwZWxp
bmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1Bv
aW50OwogCiAgICAgcmV0dXJuIHBpcGVsaW5lRGVzYzsKIH0KIAorLy8gR2V0IHBpcGVsaW5lIGRl
c2NyaXB0b3IgZm9yIHJlbmRlciBwaXBlbGluZSB0aGF0IGNvbnRhaW5zIHZlcnRleCBzaGFkZXIg
YWN0aW5nIGFzIHRyYW5zZm9ybQorLy8gZmVlZGJhY2suCitBTkdMRV9JTkxJTkUKK1JlbmRlclBp
cGVsaW5lRGVzYyBHZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJD
b21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlw
ZWxpbmVEZXNjKQoreworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgICA9
IFJlbmRlclBpcGVsaW5lRGVzYyhwaXBlbGluZURlc2MpOworICAgIGNvbnN0IFJlbmRlclBhc3NE
ZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNtZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7CisKKyAg
ICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygmcGlwZWxp
bmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworICAgIHhmYlBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0
aW9uVHlwZSAgID0gUmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICB4
ZmJQaXBlbGluZURlc2MuaW5wdXRQcmltaXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9n
eUNsYXNzUG9pbnQ7CisKKyAgICByZXR1cm4geGZiUGlwZWxpbmVEZXNjOworfQorCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KIHZvaWQgQ2xlYXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlw
ZWxpbmVDYWNoZUFycmF5KQogewpAQCAtNzEyLDggKzc3NCwxNCBAQCB2b2lkIFNldHVwQmxpdFdp
dGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAg
dW5pZm9ybVBhcmFtcy5zcmNMYXllciA9IHBhcmFtcy5zcmNMYXllcjsKICAgICBpZiAoaXNDb2xv
ckJsaXQpCiAgICAgewotICAgICAgICBjb25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1z
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOwotICAgICAg
ICB1bmlmb3JtUGFyYW1zLmRzdEx1bWluYW5jZSAgICAgICAgID0gY29sb3JQYXJhbXMtPmRzdEx1
bWluYW5jZSA/IDEgOiAwOworICAgICAgICBjb25zdCBhdXRvIGNvbG9yUGFyYW1zICAgICA9IHN0
YXRpY19jYXN0PGNvbnN0IENvbG9yQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5p
Zm9ybVBhcmFtcy5kc3RMdW1pbmFuY2UgPSBjb2xvclBhcmFtcy0+ZHN0THVtaW5hbmNlID8gMSA6
IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMg
ICAgID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1z
KTsKKyAgICAgICAgdW5pZm9ybVBhcmFtcy5zcmNMZXZlbDIgPSBkc1BhcmFtcy0+c3JjU3RlbmNp
bExldmVsOworICAgICAgICB1bmlmb3JtUGFyYW1zLnNyY0xheWVyMiA9IGRzUGFyYW1zLT5zcmNT
dGVuY2lsTGF5ZXI7CiAgICAgfQogCiAgICAgLy8gQ29tcHV0ZSBzb3VyY2UgdGV4Q29vcmRzCkBA
IC03MjcsOCArNzk1LDggQEAgdm9pZCBTZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRl
ckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAgIHsKICAgICAgICAgY29uc3QgRGVwdGhT
dGVuY2lsQmxpdFBhcmFtcyAqZHNQYXJhbXMgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKLSAgICAgICAgc3JjV2lkdGgg
ID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwtPndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7Ci0gICAg
ICAgIHNyY0hlaWdodCA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT5oZWlnaHQoZHNQYXJhbXMtPnNy
Y0xldmVsKTsKKyAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwtPndpZHRo
KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOworICAg
ICAgICBzcmNIZWlnaHQgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFw
TmF0aXZlTGV2ZWwoZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOwogICAgIH0KICAgICBlbHNl
CiAgICAgewpAQCAtNzM5LDggKzgwNyw4IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdVbmlmb3Jt
RGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKICAgICBHZXRCbGl0VGV4Q29v
cmRzKHNyY1dpZHRoLCBzcmNIZWlnaHQsIHBhcmFtcy5zcmNSZWN0LCBwYXJhbXMuc3JjWUZsaXBw
ZWQsIHBhcmFtcy51bnBhY2tGbGlwWCwKICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBh
Y2tGbGlwWSwgJnUwLCAmdjAsICZ1MSwgJnYxKTsKIAotICAgIGZsb2F0IGR1ID0gdTEgLSB1MDsK
LSAgICBmbG9hdCBkdiA9IHYxIC0gdjA7CisgICAgYXV0byBkdSA9IHUxIC0gdTA7CisgICAgYXV0
byBkdiA9IHYxIC0gdjA7CiAKICAgICAvLyBsb3dlciBsZWZ0CiAgICAgdW5pZm9ybVBhcmFtcy5z
cmNUZXhDb29yZHNbMF1bMF0gPSB1MDsKQEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElO
RSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAog
Ly8gU3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMgaW1wbGVtZW50YXRpb24KIFN0ZW5jaWxCbGl0
VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcygpIHt9CiAKLVN0ZW5j
aWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBE
ZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZzcmNJbikKK1N0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1z
OjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1z
ICZzcmNQYXJhbXMpCiB7Ci0gICAgZHN0VGV4dHVyZVNpemUgPSBzcmNJbi5kc3RUZXh0dXJlU2l6
ZTsKLSAgICBkc3RSZWN0ICAgICAgICA9IHNyY0luLmRzdFJlY3Q7Ci0gICAgZHN0U2Npc3NvclJl
Y3QgPSBzcmNJbi5kc3RTY2lzc29yUmVjdDsKLSAgICBkc3RGbGlwWSAgICAgICA9IHNyY0luLmRz
dEZsaXBZOwotICAgIGRzdEZsaXBYICAgICAgID0gc3JjSW4uZHN0RmxpcFg7Ci0gICAgc3JjUmVj
dCAgICAgICAgPSBzcmNJbi5zcmNSZWN0OwotICAgIHNyY1lGbGlwcGVkICAgID0gc3JjSW4uc3Jj
WUZsaXBwZWQ7Ci0gICAgdW5wYWNrRmxpcFggICAgPSBzcmNJbi51bnBhY2tGbGlwWDsKLSAgICB1
bnBhY2tGbGlwWSAgICA9IHNyY0luLnVucGFja0ZsaXBZOworICAgIGRzdFRleHR1cmVTaXplID0g
c3JjUGFyYW1zLmRzdFRleHR1cmVTaXplOworICAgIGRzdFJlY3QgICAgICAgID0gc3JjUGFyYW1z
LmRzdFJlY3Q7CisgICAgZHN0U2Npc3NvclJlY3QgPSBzcmNQYXJhbXMuZHN0U2Npc3NvclJlY3Q7
CisgICAgZHN0RmxpcFkgICAgICAgPSBzcmNQYXJhbXMuZHN0RmxpcFk7CisgICAgZHN0RmxpcFgg
ICAgICAgPSBzcmNQYXJhbXMuZHN0RmxpcFg7CisgICAgc3JjUmVjdCAgICAgICAgPSBzcmNQYXJh
bXMuc3JjUmVjdDsKKyAgICBzcmNZRmxpcHBlZCAgICA9IHNyY1BhcmFtcy5zcmNZRmxpcHBlZDsK
KyAgICB1bnBhY2tGbGlwWCAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWDsKKyAgICB1bnBhY2tG
bGlwWSAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWTsKIAotICAgIHNyY1N0ZW5jaWwgPSBzcmNJ
bi5zcmNTdGVuY2lsOworICAgIHNyY1N0ZW5jaWwgICAgICA9IHNyY1BhcmFtcy5zcmNTdGVuY2ls
OworICAgIHNyY1N0ZW5jaWxMZXZlbCA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGV2ZWw7CisgICAg
c3JjU3RlbmNpbExheWVyID0gc3JjUGFyYW1zLnNyY1N0ZW5jaWxMYXllcjsKIH0KIAogLy8gUmVu
ZGVyVXRpbHMgaW1wbGVtZW50YXRpb24KQEAgLTkwMyw2ICs5NzMsNyBAQCB2b2lkIFJlbmRlclV0
aWxzOjpvbkRlc3Ryb3koKQogICAgIH0KIH0KIAorCiAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIK
IHZvaWQgUmVuZGVyVXRpbHM6OmhhbmRsZUVycm9yKEdMZW51bSBnbEVycm9yQ29kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCkBAIC0xMDE2LDkgKzEw
ODcsMTAgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJG
cm9tQXJyYXlzKAogfQogYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5C
dWZmZXJGcm9tRWxlbWVudHNBcnJheSgKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKQog
ewotICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50
c0FycmF5KGNvbnRleHRNdGwsIHBhcmFtcyk7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoY29udGV4dE10bCwgcGFyYW1zLCBpbmRp
Y2VzR2VuZXJhdGVkKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVM
aW5lTG9vcEJ1ZmZlckZyb21BcnJheXMoCkBAIC0xMDUwLDYgKzExMjIsMjYgQEAgYW5nbGU6OlJl
c3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRz
QXJyYXkoCiB7CiAgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlTGluZUxvb3BMYXN0U2Vn
bWVudEZyb21FbGVtZW50c0FycmF5KGNvbnRleHRNdGwsIHBhcmFtcyk7CiB9CithbmdsZTo6UmVz
dWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMg
JnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgcmV0dXJu
IG1JbmRleFV0aWxzLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihjb250ZXh0
TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJV
dGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5n
ZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGlu
ZGljZXNHZW5lcmF0ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90
ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVBy
aW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kaWNlc0dlbmVyYXRlZCk7Cit9CiAKIHZvaWQgUmVuZGVyVXRpbHM6OmNvbWJpbmVWaXNpYmls
aXR5UmVzdWx0KAogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCkBAIC0xMTIxLDYgKzEyMTMs
MjEgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6ZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9u
ZW50c1ZTKGNvbnN0IGdsOjpDb250ZXh0ICpjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMpOwogfQogCithbmdsZTo6
UmVzdWx0IFJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKK3sKKyAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUg
dGhlIFBTTworICAgIGF1dG8gcHNvID0gbVRyYW5zZm9ybUZlZWRiYWNrVXRpbHMuZ2V0VHJhbnNm
b3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZShjb250ZXh0TXRsLCByZW5kZXJFbmNvZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwaXBlbGluZURlc2MpOworICAgIGlmIChwc28pCisgICAgeworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQorICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpTdG9wOworfQorCiAvLyBDbGVhclV0aWxzIGltcGxlbWVudGF0aW9uCiBDbGVh
clV0aWxzOjpDbGVhclV0aWxzKGNvbnN0IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRlck5hbWUp
CiAgICAgOiBtRnJhZ21lbnRTaGFkZXJOYW1lKGZyYWdtZW50U2hhZGVyTmFtZSkKQEAgLTEyODcs
MTEgKzEzOTQsMTEgQEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgb3ZlcnJpZGVkUGFyYW1z
LmNsZWFyQ29sb3IucmVzZXQoKTsKICAgICB9Ci0gICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0
aEF0dGFjaG1lbnQudGV4dHVyZSkKKyAgICBpZiAoIXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJEZXB0
aC5yZXNldCgpOwogICAgIH0KLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50
ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJTdGVuY2lsLnJl
c2V0KCk7CiAgICAgfQpAQCAtMTMwNyw3ICsxNDE0LDcgQEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0
aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xl
OjpSZXN1bHQgcmVzdWx0OwogICAgIHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1
c2lvbiBxdWVyeSwgb3RoZXJ3aXNlIGNsZWFyaW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24g
Y291bnRpbmcKLSAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2Ns
dXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9j
Y2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVy
LCAmcmVzdWx0KTsKICAgICAgICAgLy8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUK
ICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMp
OwogICAgIH0KQEAgLTE0ODEsNyArMTU4OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29sb3JCbGl0VXRp
bHM6OmJsaXRDb2xvcldpdGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFu
Z2xlOjpSZXN1bHQgcmVzdWx0OwogICAgIHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9j
Y2x1c2lvbiBxdWVyeSwgb3RoZXJ3aXNlIGJsaXR0aW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNp
b24gY291bnRpbmcKLSAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVP
Y2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJs
ZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNv
ZGVyLCAmcmVzdWx0KTsKICAgICAgICAgLy8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5n
bGUKICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAs
IDMpOwogICAgIH0KQEAgLTE3MDMsNyArMTgxMCw3IEBAIGFuZ2xlOjpSZXN1bHQgRGVwdGhTdGVu
Y2lsQmxpdFV0aWxzOjpibGl0RGVwdGhTdGVuY2lsV2l0aERyYXcoY29uc3QgZ2w6OkNvbnRleHQK
ICAgICBhbmdsZTo6UmVzdWx0IHJlc3VsdDsKICAgICB7CiAgICAgICAgIC8vIE5lZWQgdG8gZGlz
YWJsZSBvY2NsdXNpb24gcXVlcnksIG90aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUg
b2NjbHVzaW9uIGNvdW50aW5nCi0gICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBk
aXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgJnJlc3VsdCk7CisgICAgICAgIFNjb3Bl
ZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwg
Y21kRW5jb2RlciwgJnJlc3VsdCk7CiAgICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVk
IHRyaWFuZ2xlCiAgICAgICAgIGNtZEVuY29kZXItPmRyYXcoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCAwLCAzKTsKICAgICB9CkBAIC0yMDAyLDcgKzIxMDksOCBAQCBhbmdsZTo6UmVzdWx0IElu
ZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cygKIAogYW5n
bGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5KAogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFy
YW1zICZwYXJhbXMsCisgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCiB7CiAgICAgY29u
c3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCku
Z2V0VmVydGV4QXJyYXkoKTsKICAgICBjb25zdCBnbDo6QnVmZmVyICplbGVtZW50QnVmZmVyICAg
ID0gdmVydGV4QXJyYXktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwpAQCAtMjAxMywxMyArMjEy
MSwxNCBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFu
QnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAgICAgIEFOR0xFX0NIRUNLKGNvbnRleHRNdGws
IHNyY09mZnNldCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCiAgICAg
ICAgICAgICAgICAgICAgICJJbmRleCBvZmZzZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgIGlmIChwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQgfHwKLSAg
ICAgICAgICAgICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0No
ZWFwUmVuZGVyUGFzcy5lbmFibGVkICYmCisgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERp
c3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5icmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYK
ICAgICAgICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkKICAg
ICAgICAgewogICAgICAgICAgICAgSW5kZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMg
PSBwYXJhbXM7CiAgICAgICAgICAgICBjcHVQYXRoUGFyYW1zLmluZGljZXMgPQogICAgICAgICAg
ICAgICAgIGVsZW1lbnRCdWZmZXJNdGwtPmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnRleHRN
dGwpICsgc3JjT2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVy
RnJvbUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisgICAgICAg
ICAgICByZXR1cm4gZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250
ZXh0TXRsLCBjcHVQYXRoUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0yMDMwLDcgKzIxMzksNyBAQCBhbmdsZTo6UmVz
dWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRz
QXJyYXkoCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisgICAg
ICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRl
eHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgfQogfQogCkBAIC0yMDc0LDIy
ICsyMTgzLDIzIEBAIGFuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVU
cmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUdQVSgKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdl
bmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAog
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFy
YW1zICZwYXJhbXMpCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisg
ICAgdWludDMyX3QgKmdlbkluZGljZXMpCiB7CiAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkK
ICAgICB7CiAgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToK
ICAgICAgICAgICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCiAgICAgICAg
ICAgICAgICAgY29udGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVS
ZXN0YXJ0RW5hYmxlZCwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5k
aWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwog
ICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgogICAgICAg
ICAgICAgcmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygKICAgICAgICAgICAgICAg
ICBjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRF
bmFibGVkLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHBh
cmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDE2X3QgKj4ocGFyYW1zLmluZGljZXMp
LCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CiAgICAgICAgICAgICBy
ZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKAogICAgICAgICAgICAgICAgIGNvbnRl
eHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQs
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmlu
ZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFt
cy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICB9CkBAIC0yMzAxLDYgKzI0MTEs
NTYgQEAgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29w
TGFzdFNlZ21lbnRGcm9tRWxlbWVudHNBcnJheUMKICAgICByZXR1cm4gZ2VuZXJhdGVMaW5lTG9v
cExhc3RTZWdtZW50KGNvbnRleHRNdGwsIGZpcnN0LCBsYXN0LCBwYXJhbXMuZHN0QnVmZmVyLCBw
YXJhbXMuZHN0T2Zmc2V0KTsKIH0KIAorYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxz
OjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoCisgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCwKKyAgICB1bnNpZ25lZCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKyAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0
ZWQpCit7CisgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2Ug
Z2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKKyAgICAgICAgICAgIHJldHVybiBH
ZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBu
dW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ocGFyYW1zLmluZGljZXMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRz
dEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGNh
c2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkU2hvcnQ6CisgICAgICAgICAgICByZXR1
cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3Vu
dCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5k
aWNlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhD
b3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMu
aW5kaWNlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgSW5k
ZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9u
UGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJl
dHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10bCwgMywgcGFyYW1z
LCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KKworYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcigKKyAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAor
ICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVQcmlt
aXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIDIsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRl
ZCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmlt
aXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisg
ICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZm
ZXIoY29udGV4dE10bCwgMSwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KKwogLy8gVmlz
aWJpbGl0eVJlc3VsdFV0aWxzIGltcGxlbWVudGF0aW9uCiB2b2lkIFZpc2liaWxpdHlSZXN1bHRV
dGlsczo6b25EZXN0cm95KCkKIHsKQEAgLTIzNzUsNyArMjUzNSwxMCBAQCB2b2lkIFZpc2liaWxp
dHlSZXN1bHRVdGlsczo6Y29tYmluZVZpc2liaWxpdHlSZXN1bHQoCiAvLyBNaXBtYXBVdGlscyBp
bXBsZW1lbnRhdGlvbgogdm9pZCBNaXBtYXBVdGlsczo6b25EZXN0cm95KCkKIHsKLSAgICBtM0RN
aXBHZW5lcmF0b3JQaXBlbGluZSA9IG5pbDsKKyAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAg
ICAgID0gbmlsOworICAgIG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lICAgICAgPSBuaWw7CisgICAg
bTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGluZSA9IG5pbDsKKyAgICBtQ3ViZU1pcEdlbmVyYXRv
clBpcGVsaW5lICAgID0gbmlsOwogfQogCiB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUzRE1pcEdl
bmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKQEAgLTIz
ODQsNjYgKzI1NDcsNzggQEAgdm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlM0RNaXBHZW5lcmF0b3JQ
aXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOwogfQogCit2
b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQo
Q29udGV4dE10bCAqY29udGV4dE10bCkKK3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0
aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCksIEAiZ2VuZXJhdGUyRE1pcG1hcHMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBl
bGluZSk7Cit9CisKK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQ
aXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5zdXJl
Q29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBAImdl
bmVyYXRlMkRBcnJheU1pcG1hcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKK30KKwordm9pZCBNaXBtYXBVdGls
czo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAq
Y29udGV4dE10bCkKK3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCksIEAiZ2VuZXJhdGVDdWJlTWlwbWFwcyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOwor
fQorCiBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRleHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVGV4TGV2ZWxBcnJheSAqbWlwbWFwT3V0
cHV0Vmlld3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5h
dGl2ZVRleExldmVsQXJyYXkgKiBtaXBtYXBPdXRwdXRWaWV3cykKIHsKLSAgICAvLyBPbmx5IHN1
cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93LgotICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJl
VHlwZSgpID09IE1UTFRleHR1cmVUeXBlM0QpOworICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAq
Y21kRW5jb2RlciA9IGNvbnRleHRNdGwtPmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOworICAg
IEFTU0VSVChjbWRFbmNvZGVyKTsKIAogICAgIE1UTFNpemUgdGhyZWFkR3JvdXBTaXplOwotICAg
IHVpbnQzMl90IHNsaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7Ci0KLSAgICBl
bnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7Ci0gICAg
Y29tcHV0ZVBpcGVsaW5lID0gbTNETWlwR2VuZXJhdG9yUGlwZWxpbmU7Ci0gICAgdGhyZWFkR3Jv
dXBTaXplID0KLSAgICAgICAgTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXpl
UGVyRGltLCBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCi0gICAgICAgICAgICAg
ICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSk7Ci0KLSAgICAvLyBUaGUg
Y29tcHV0ZSBzaGFkZXIgc3VwcG9ydHMgdXAgdG8gNCBtaXBtYXBzIGdlbmVyYXRlZCBwZXIgcGFz
cy4KLSAgICAvLyBTZWUgc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCi0gICAgdWludDMyX3QgbWF4
TWlwc1BlckJhdGNoID0gNDsKLQotICAgIGlmICh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJl
YWRHcm91cFNpemUuaGVpZ2h0ICogdGhyZWFkR3JvdXBTaXplLmRlcHRoID4KLSAgICAgICAgICAg
IGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCB8fAotICAgICAg
ICBBTkdMRV9VTkxJS0VMWSgKLSAgICAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCkt
PmdldEZlYXR1cmVzKCkuYWxsb3dHZW5NdWx0aXBsZU1pcHNQZXJQYXNzLmVuYWJsZWQpKQorICAg
IHVpbnQzMl90IHNsaWNlcyA9IDE7CisgICAgc3dpdGNoIChzcmNUZXh0dXJlLT50ZXh0dXJlVHlw
ZSgpKQogICAgIHsKLSAgICAgICAgLy8gTXVsdGlwbGUgbWlwbWFwcyBnZW5lcmF0aW9uIGlzIG5v
dCBzdXBwb3J0ZWQgZHVlIHRvIGhhcmR3YXJlJ3MgdGhyZWFkIGdyb3VwIHNpemUgbGltaXRzLgot
ICAgICAgICAvLyBGYWxsYmFjayB0byBnZW5lcmF0ZSBvbmUgbWlwIHBlciBwYXNzIGFuZCByZWR1
Y2UgdGhyZWFkIGdyb3VwIHNpemUuCi0gICAgICAgIGlmIChBTkdMRV9VTkxJS0VMWSh0aHJlYWRH
cm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUuaGVpZ2h0ID4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91
cCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBn
cm91cCBzaXplLCB3ZSBjYW5ub3QgcHJvY2VlZC4KLSAgICAgICAgICAgIC8vIEhBQ0s6IHVzZSBi
bGl0IGNvbW1hbmQgZW5jb2RlciB0byBnZW5lcmF0ZSBtaXBtYXBzIGlmIGl0IGlzIG5vdCBwb3Nz
aWJsZQotICAgICAgICAgICAgLy8gdG8gdXNlIGNvbXB1dGUgc2hhZGVyIGR1ZSB0byBoYXJkd2Fy
ZSBsaW1pdHMuCi0gICAgICAgICAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0g
Y29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7Ci0gICAgICAgICAgICBibGl0RW5j
b2Rlci0+Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShzcmNUZXh0dXJlKTsKLSAgICAgICAgICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
cmVhZEdyb3VwU2l6ZS5kZXB0aCA9IDE7Ci0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9
IDE7CisgICAgICAgIGNhc2UgTVRMVGV4dHVyZVR5cGUyRDoKKyAgICAgICAgICAgIGVuc3VyZTJE
TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAg
IGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yRE1pcEdlbmVyYXRvclBpcGVs
aW5lKTsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0
ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTJEQXJyYXk6CisgICAg
ICAgICAgICBlbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250
ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRl
KG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAg
ICAgID0gc3JjVGV4dHVyZS0+YXJyYXlMZW5ndGgoKTsKKyAgICAgICAgICAgIHRocmVhZEdyb3Vw
U2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVh
ZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
VExUZXh0dXJlVHlwZUN1YmU6CisgICAgICAgICAgICBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlw
ZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNl
dENvbXB1dGVQaXBlbGluZVN0YXRlKG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAg
ICAgICAgc2xpY2VzICAgICAgICAgID0gNjsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9
IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3Vw
U2l6ZVBlckRpbSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0
dXJlVHlwZTNEOgorICAgICAgICAgICAgZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwpOworICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBp
cGVsaW5lU3RhdGUobTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgdGhyZWFk
R3JvdXBTaXplID0KKyAgICAgICAgICAgICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJE
aW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwogICAgIH0KIAotICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlciA9IGNvbnRleHRNdGwtPmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOwotICAgIEFTU0VS
VChjbWRFbmNvZGVyKTsKLSAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShj
b21wdXRlUGlwZWxpbmUpOwotCi0gICAgR2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7Cisg
ICAgR2VuZXJhdGUzRE1pcG1hcFVuaWZvcm0gb3B0aW9uczsKKyAgICB1aW50MzJfdCBtYXhNaXBz
UGVyQmF0Y2ggPSA0OwogCi0gICAgdWludDMyX3QgcmVtYWluTWlwcyAgICAgICAgICAgICA9IHNy
Y1RleHR1cmUtPm1pcG1hcExldmVscygpIC0gMTsKLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBiYXRj
aFNyY0xldmVsID0ga1plcm9OYXRpdmVNaXBMZXZlbDsKLSAgICBvcHRpb25zLnNyY0xldmVsICAg
ICAgICAgICAgICAgID0gYmF0Y2hTcmNMZXZlbC5nZXQoKTsKLSAgICBvcHRpb25zLnNSR0IgICAg
ICAgICAgICAgICAgICAgID0gc1JHQk1pcG1hcDsKKyAgICB1aW50MzJfdCByZW1haW5NaXBzID0g
c3JjVGV4dHVyZS0+bWlwbWFwTGV2ZWxzKCkgLSAxOworICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAg
PSAwOwogCiAgICAgY21kRW5jb2Rlci0+c2V0VGV4dHVyZShzcmNUZXh0dXJlLCAwKTsKICAgICBj
bWRFbmNvZGVyLT5tYXJrUmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKICAg
ICB3aGlsZSAocmVtYWluTWlwcykKICAgICB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZp
cnN0TWlwVmlldyA9IG1pcG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7Cisg
ICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1dFZpZXdz
LT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyAxKSk7CiAgICAg
ICAgIGdsOjpFeHRlbnRzIHNpemUgICAgICAgICAgICAgICA9IGZpcnN0TWlwVmlldy0+c2l6ZUF0
MCgpOwogICAgICAgICBib29sIGlzUG93MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6
OmlzUG93MihzaXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKIApAQCAtMjQ2
MSwyMCArMjYzNiwxOCBAQCBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1h
cENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
MTsgaSA8PSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOyArK2kpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNtZEVuY29kZXItPnNldFRleHR1cmUobWlwbWFwT3V0cHV0Vmlld3MtPmF0KGJh
dGNoU3JjTGV2ZWwgKyBpKSwgaSk7CisgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJl
KG1pcG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3Jj
TGV2ZWwgKyBpKSksIGkpOwogICAgICAgICB9CiAKICAgICAgICAgdWludDMyX3QgdGhyZWFkc1Bl
clogPSBzdGQ6Om1heChzbGljZXMsIGZpcnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CiAKLSAgICAg
ICAgRGlzcGF0Y2hDb21wdXRlKAotICAgICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2RlciwK
LSAgICAgICAgICAgIC8qKiBhbGxvd05vblVuaWZvcm0gKi8gZmFsc2UsCi0gICAgICAgICAgICBN
VExTaXplTWFrZShmaXJzdE1pcFZpZXctPndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0
QXQwKCksIHRocmVhZHNQZXJaKSwKLSAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSk7CisgICAg
ICAgIERpc3BhdGNoQ29tcHV0ZShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgLyoqIGFsbG93Tm9uVW5pZm9ybSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE1UTFNpemVNYWtlKGZpcnN0TWlwVmlldy0+d2lkdGhBdDAoKSwgZmlyc3RNaXBW
aWV3LT5oZWlnaHRBdDAoKSwgdGhyZWFkc1BlclopLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkR3JvdXBTaXplKTsKIAogICAgICAgICByZW1haW5NaXBzIC09IG9wdGlvbnMubnVtTWlw
bWFwc1RvR2VuZXJhdGU7Ci0gICAgICAgIGJhdGNoU3JjTGV2ZWwgICAgPSBiYXRjaFNyY0xldmVs
ICsgb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICAgICAgb3B0aW9ucy5zcmNMZXZl
bCA9IGJhdGNoU3JjTGV2ZWwuZ2V0KCk7CisgICAgICAgIG9wdGlvbnMuc3JjTGV2ZWwgKz0gb3B0
aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CkBAIC0yNTA0LDggKzI2NzcsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExD
b21wdXRlUGlwZWxpbmVTdGF0ZT4+IENvcHlQaXhlbHNVdGlsczo6Z2V0UGl4ZWxzQ29weVBpcGVs
aW5lKAogICAgIGludCBzaGFkZXJUZXh0dXJlVHlwZSA9IEdldFNoYWRlclRleHR1cmVUeXBlKHRl
eHR1cmUpOwogICAgIGludCBpbmRleDIgPSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5cGVDb3VudCAq
IChidWZmZXJXcml0ZSA/IDEgOiAwKSArIHNoYWRlclRleHR1cmVUeXBlOwogCi0gICAgQXV0b09i
akNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiAmY2FjaGUgPQotICAgICAgICBtUGl4
ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CisgICAgYXV0byAm
Y2FjaGUgPSBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07
CiAKICAgICBpZiAoIWNhY2hlKQogICAgIHsKQEAgLTI3ODMsNyArMjk1NSwxMCBAQCBBdXRvT2Jq
Q1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4KIFZlcnRleEZvcm1hdENvbnZlcnNpb25V
dGlsczo6Z2V0Q29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlcikKIHsKKyAgICBE
aXNwbGF5TXRsICpkaXNwbGF5ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworICAgIGF1dG8g
c2hhZGVyTGliICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwogICAgIEVu
c3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwg
QCJleHBhbmRWZXJ0ZXhGb3JtYXRDb21wb25lbnRzVlMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTGliLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Db21wb25lbnRzRXhwYW5kUmVu
ZGVyUGlwZWxpbmVDYWNoZSk7CiAKICAgICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNj
ID0gR2V0Q29tcHV0aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNv
ZGVyKTsKQEAgLTI3OTcsOCArMjk3Miw3IEBAIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6
Z2V0RmxvYXRDb252ZXJzdGlvbkNvbXB1dGVQaXBlbGluZShDb250ZXh0TXRsICpjb250CiB7CiAg
ICAgaW50IGZvcm1hdElEVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY0FuZ2xlRm9ybWF0Lmlk
KTsKIAotICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hl
ID0KLSAgICAgICAgbUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFs
dWVdOworICAgIGF1dG8gJmNhY2hlID0gbUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVz
W2Zvcm1hdElEVmFsdWVdOwogCiAgICAgaWYgKCFjYWNoZSkKICAgICB7CkBAIC0yODQ5LDUgKzMw
MjMsNTMgQEAgVmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9u
UmVuZGVyUGlwZWxpbmUoQ29udGV4dE10bCAqY29udGUKICAgICByZXR1cm4gY2FjaGUuZ2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0TXRsLCBwaXBlbGluZURlc2MpOwogfQogCitBdXRvT2Jq
Q1B0cjxpZDxNVExMaWJyYXJ5Pj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6Y3JlYXRlTXNsWGZi
TGlicmFyeSgKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ0cmFuc2xhdGVkTXNsKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgewor
ICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXko
KTsKKyAgICAgICAgaWQ8TVRMRGV2aWNlPiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERl
dmljZSgpOworCisgICAgICAgIC8vIENvbnZlcnQgdG8gYWN0dWFsIGJpbmFyeSBzaGFkZXIKKyAg
ICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxOU0Vycm9yICo+IGVyciA9IG5pbDsKKyAgICAgICAgbXRs
OjpBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbXRsU2hhZGVyTGliID0KKyAgICAgICAgICAg
IG10bDo6Q3JlYXRlU2hhZGVyTGlicmFyeShtdGxEZXZpY2UsIHRyYW5zbGF0ZWRNc2wsICZlcnIp
OworICAgICAgICBpZiAoZXJyICYmICFtdGxTaGFkZXJMaWIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIE5TTG9nKEAiJUAiLCBlcnIuZ2V0KCkpOworICAgICAgICAgICAgYXNzZXJ0KDApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBtdGxTaGFkZXJMaWI7CisgICAgfQorfQorCitBdXRvT2Jq
Q1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSgKKyAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAgIG10bDo6
UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCit7CisgICAgY29uc3QgUHJvZ3JhbU10
bCAqcHJvZ3JhbU10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFBy
b2dyYW0oKSk7CisgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmY2FjaGUgICA9ICpwcm9ncmFtTXRs
LT5tTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworCisgICAgaWYgKCFjYWNoZS5nZXRWZXJ0
ZXhTaGFkZXIoKSkKKyAgICB7CisgICAgICAgIC8vIFBpcGVsaW5lIGNhY2hlIG5vdCBpbnRpYWxp
emVkLCBkbyBpdCBub3c6CisgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gc2hhZGVyTGliID0gY3JlYXRlTXNsWGZiTGlicmFyeShjb250ZXh0
TXRsLCBwcm9ncmFtTXRsLT5nZXRYZmJNc2xTb3VyY2UoKSk7CisgICAgICAgICAgICAvLyBOb24g
c3BlY2lhbGl6ZWQgY29uc3RhbnRzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5j
dGlvbi4KKyAgICAgICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5p
dGlhbGl6ZWQoY29udGV4dE10bCwgU0hBREVSX0VOVFJZX05BTUUsIHNoYWRlckxpYiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNh
Y2hlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBl
bGluZURlc2MgPQorICAgICAgICBHZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVz
YyhjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpOworCisgICAgcmV0dXJuIGNhY2hlLmdldFJlbmRl
clBpcGVsaW5lU3RhdGUoY29udGV4dE10bCwgeGZiUGlwZWxpbmVEZXNjKTsKK30KKwogfSAgLy8g
bmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZXNvdXJjZXMuaAppbmRleCBmMjIwNjUwOTMzODZhMGI0OWVjOWE5MGQzMDQxOGQyZjFlMjVi
YzRjLi4yZTMzMzRkZmUyNTJiYmYxMDlkMzFiZWVkNjg2YjU5M2Q2OTJjYjc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3Jlc291cmNlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgUmVz
b3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5j
KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KICAgICB2
b2lkIHJlc2V0Q1BVUmVhZE1lbU5lZWRTeW5jKCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1OZWVk
U3luYyA9IGZhbHNlOyB9CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3Ig
QnVmZmVyTXRsIHRvIGtub3cgd2hldGhlciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29w
eQogICAgIGJvb2wgaXNDUFVSZWFkTWVtRGlydHkoKSBjb25zdCB7IHJldHVybiBtVXNhZ2VSZWYt
PmNwdVJlYWRNZW1EaXJ0eTsgfQogICAgIHZvaWQgcmVzZXRDUFVSZWFkTWVtRGlydHkoKSB7IG1V
c2FnZVJlZi0+Y3B1UmVhZE1lbURpcnR5ID0gZmFsc2U7IH0KIApAQCAtODEsNyArODAsNyBAQCBj
bGFzcyBSZXNvdXJjZSA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICB1aW50NjRfdCBjbWRC
dWZmZXJRdWV1ZVNlcmlhbCA9IDA7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIG1lYW5zIHRoZSBy
ZXNvdXJjZSB3YXMgaXNzdWVkIHRvIGJlIG1vZGlmaWVkIGJ5IEdQVSwgaWYgQ1BVIHdhbnRzIHRv
IHJlYWQKLSAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBj
YWxsIG11c3QgYmUgaW52b2tlZC4KKyAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5
bmNob3JuaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KICAgICAgICAgYm9vbCBjcHVSZWFk
TWVtTmVlZFN5bmMgPSBmYWxzZTsKIAogICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNlZnVsIGZv
ciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNoYWRvdyBj
b3B5CkBAIC0xMTAsNiArMTA5LDEzIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVz
b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93
Rm9ybWF0VmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1
cmVSZWYgKnJlZk91dCk7CiAKKyAgICAvLyBPbiBtYWNPUywgbWVtb3J5IHdpbGwgc3RpbGwgYmUg
YWxsb2NhdGVkIGZvciB0aGlzIHRleHR1cmUuCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFr
ZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKwogICAgIHN0YXRpYyBhbmdsZTo6UmVz
dWx0IE1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKQEAgLTE0Nywx
MCArMTUzLDIxIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91
dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250
ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgcmVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYg
KnJlZk91dCk7CisKICAgICBzdGF0aWMgVGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRl
eHR1cmU+IG1ldGFsVGV4dHVyZSk7CiAKICAgICAvLyBBbGxvdyBDUFUgdG8gcmVhZCAmIHdyaXRl
IGRhdGEgZGlyZWN0bHkgdG8gdGhpcyB0ZXh0dXJlPwogICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxl
KCkgY29uc3Q7CisgICAgLy8gQWxsb3cgc2hhZGVycyB0byByZWFkL3NhbXBsZSB0aGlzIHRleHR1
cmU/CisgICAgLy8gVGV4dHVyZSBjcmVhdGVkIHdpdGggcmVuZGVyVGFyZ2V0T25seSBmbGFnIHdv
bid0IGJlIHJlYWRhYmxlCisgICAgYm9vbCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CiAKICAg
ICBib29sIHN1cHBvcnRGb3JtYXRWaWV3KCkgY29uc3Q7CiAKQEAgLTIxOCwxNiArMjM1LDI5IEBA
IGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgTVRMQ29sb3JXcml0
ZU1hc2sgZ2V0Q29sb3JXcml0YWJsZU1hc2soKSBjb25zdCB7IHJldHVybiAqbUNvbG9yV3JpdGFi
bGVNYXNrOyB9CiAgICAgdm9pZCBzZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFz
ayBtYXNrKSB7ICptQ29sb3JXcml0YWJsZU1hc2sgPSBtYXNrOyB9CiAKLSAgICAvLyBHZXQgbGlu
ZWFyIGNvbG9yIHNwYWNlIHZpZXcuIE9ubHkgdXNhYmxlIGZvciBzUkdCIHRleHR1cmVzLgotICAg
IFRleHR1cmVSZWYgZ2V0TGluZWFyQ29sb3JWaWV3KCk7CisgICAgLy8gR2V0IHJlYWRpbmcgY29w
eS4gVXNlZCBmb3IgcmVhZGluZyBub24tcmVhZGFibGUgdGV4dHVyZSBvciByZWFkaW5nIHN0ZW5j
aWwgdmFsdWUgZnJvbQorICAgIC8vIHBhY2tlZCBkZXB0aCAmIHN0ZW5jaWwgdGV4dHVyZS4KKyAg
ICAvLyBOT1RFOiB0aGlzIG9ubHkgY29waWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1
cmUuCisgICAgLy8gVGhlIHRleGVscyB3aWxsIGJlIGNvcGllZCB0byByZWdpb24oMCwgMCwgMCwg
YXJlYVRvQ29weS5zaXplKSBvZiB0aGUgcmV0dXJuZWQgdGV4dHVyZS4KKyAgICAvLyBUaGUgcmV0
dXJuZWQgcG9pbnRlciB3aWxsIGJlIHJldGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0dXJlIG9i
amVjdC4KKyAgICAvLyBDYWxsaW5nIGdldFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHBy
ZXZpb3VzbHkgcmV0dXJuZWQgdGV4dHVyZS4KKyAgICBUZXh0dXJlUmVmIGdldFJlYWRhYmxlQ29w
eShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10
bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHNsaWNlVG9Db3B5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IE1UTFJlZ2lvbiAmYXJlYVRvQ29weSk7CisKKyAgICB2b2lkIHJl
bGVhc2VSZWFkYWJsZUNvcHkoKTsKIAogICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKICAgICBUZXh0
dXJlUmVmIGdldFN0ZW5jaWxWaWV3KCk7CisgICAgLy9HZXQgbGluZWFyIGNvbG9yCisgICAgVGV4
dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZpZXcoKTsKIAogICAgIC8vIENoYW5nZSB0aGUgd3JhcHBl
ZCBtZXRhbCBvYmplY3QuIFNwZWNpYWwgY2FzZSBmb3Igc3dhcGNoYWluIGltYWdlCiAgICAgdm9p
ZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKIAotICAgIC8vIHN5bmMgY29udGVu
dCBiZXR3ZWVuIENQVSBhbmQgR1BVCisgICAgLy8gRXhwbGljaXRseSBzeW5jIGNvbnRlbnQgYmV0
d2VlbiBDUFUgYW5kIEdQVQogICAgIHZvaWQgc3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4
dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29kZXIpOwogCiAgIHByaXZhdGU6CkBAIC0y
NDEsMTIgKzI3MSw0MSBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91
dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1h
dCAmbXRsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRl
eHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWVtb3J5TGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFr
ZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwor
CiAgICAgVGV4dHVyZShpZDxNVExUZXh0dXJlPiBtZXRhbFRleHR1cmUpOwogICAgIFRleHR1cmUo
Q29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpk
ZXNjLAogICAgICAgICAgICAgdWludDMyX3QgbWlwcywKICAgICAgICAgICAgIGJvb2wgcmVuZGVy
VGFyZ2V0T25seSwKICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKyAgICBUZXh0
dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRv
ciAqZGVzYywKKyAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICBib29sIHJl
bmRlclRhcmdldE9ubHksCisgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAg
ICAgICAgIGJvb2wgbWVtb3J5TGVzcyk7CisKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRl
eHQsCisgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAg
IElPU3VyZmFjZVJlZiBpb3N1cmZhY2UsCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAor
ICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5KTsKIAogICAgIC8vIENyZWF0ZSBhIHRl
eHR1cmUgdmlldwogICAgIFRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0
IGZvcm1hdCk7CkBAIC0yNjQsOSArMzIzLDE0IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJs
aWMgUmVzb3VyY2UsCiAgICAgVGV4dHVyZVJlZiBtTGluZWFyQ29sb3JWaWV3OwogCiAgICAgVGV4
dHVyZVJlZiBtU3RlbmNpbFZpZXc7CisgICAgLy9SZWFkYWJsZSBjb3B5IG9mIHRleHR1cmUKKyAg
ICBUZXh0dXJlUmVmIG1SZWFkQ29weTsKKwogfTsKIAotY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVi
bGljIFJlc291cmNlLCBwdWJsaWMgV3JhcHBlZE9iamVjdDxpZDxNVExCdWZmZXI+PgorY2xhc3Mg
QnVmZmVyIGZpbmFsIDogcHVibGljIFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVmZmVyPj4sCisgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhpczxCdWZmZXI+CiB7CiAgIHB1YmxpYzoK
ICAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCmluZGV4IDliZWU0NzVmODY2
ZDY0YmIyNWM4NWIzNmVmMTc4ZWU3Y2ZhZWRiMTguLmFiN2EyZGM3MjAwOWQ2MjNmM2Q3MGJmZTVi
NjBjMTFlMWI0YWZkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1t
CkBAIC0zNCwyMCArMzQsMjIgQEAgaW5saW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRl
Z2VyIGJhc2VTaXplLCBjb25zdCBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCkKIC8vIEFzeW5jaHJv
bm91c2x5IHN5bmNocm9uaXplIHRoZSBjb250ZW50IG9mIGEgcmVzb3VyY2UgYmV0d2VlbiBHUFUg
bWVtb3J5IGFuZCBpdHMgQ1BVIGNhY2hlLgogLy8gTk9URTogVGhpcyBvcGVyYXRpb24gZG9lc24n
dCBmaW5pc2ggaW1tZWRpYXRlbHkgdXBvbiBmdW5jdGlvbidzIHJldHVybi4KIHRlbXBsYXRlIDxj
bGFzcyBUPgotdm9pZCBJbnZva2VDUFVNZW1TeW5jKENvbnRleHRNdGwgKmNvbnRleHQsIG10bDo6
QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2RlciwgVCAqcmVzb3VyY2UpCit2b2lkIFN5bmND
b250ZW50KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgIG10bDo6QmxpdENv
bW1hbmRFbmNvZGVyICpibGl0RW5jb2RlciwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
aGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKIHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9P
U19NQUNDQVRBTFlTVAogICAgIGlmIChibGl0RW5jb2RlcikKICAgICB7CiAgICAgICAgIGJsaXRF
bmNvZGVyLT5zeW5jaHJvbml6ZVJlc291cmNlKHJlc291cmNlKTsKKwogICAgICAgICByZXNvdXJj
ZS0+cmVzZXRDUFVSZWFkTWVtTmVlZFN5bmMoKTsKICAgICB9CiAjZW5kaWYKIH0KLS8vIEVuc3Vy
ZSB0aGF0IGEgcmVzb3VyY2UncyBDUFUgY2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIg
R1BVIGZpbmlzaGVzIGl0cyBtb2RpZmljYXRpb25zIG9uCi0vLyB0aGUgcmVzb3VyY2UuCisKIHRl
bXBsYXRlIDxjbGFzcyBUPgotdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10
bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCit2b2lkIEVuc3VyZUNvbnRlbnRTeW5jZWQoQ29udGV4
dE10bCAqY29udGV4dCwgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKIHsKICNp
ZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAogICAgIC8vIE1ha2Ugc3Vy
ZSBHUFUgJiBDUFUgY29udGVudHMgYXJlIHN5bmNocm9uaXplZC4KQEAgLTU2LDcgKzU4LDcgQEAg
dm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVz
b3VyY2UpCiAgICAgaWYgKHJlc291cmNlLT5nZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdl
TW9kZU1hbmFnZWQgJiYgcmVzb3VyY2UtPmlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkpCiAgICAgewog
ICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0LT5n
ZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKLSAgICAgICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0
LCBibGl0RW5jb2RlciwgcmVzb3VyY2UpOworICAgICAgICBTeW5jQ29udGVudChjb250ZXh0LCBi
bGl0RW5jb2RlciwgcmVzb3VyY2UpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTIyLDYgKzEyNCwy
NCBAQCBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2UyRFRleHR1cmUoQ29udGV4dE10bCAqY29u
dGV4dCwKICAgICB9ICAvLyBBTkdMRV9NVExfT0JKQ19TQ09QRQogfQogCisvKiogc3RhdGljICov
CithbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7Cisg
ICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICB7CisgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjID0KKyAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkRE
ZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0OmZvcm1hdC5tZXRhbEZvcm1hdAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6
d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0OmhlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXBwZWQ6Tk9dOworCisgICAgICAgIHJl
dHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIDEsIHRydWUsIGZhbHNlLCB0
cnVlLCByZWZPdXQpOworICAgIH0gIC8vIEFOR0xFX01UTF9PQkpDX1NDT1BFCit9CiAvKiogc3Rh
dGljICovCiBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRs
ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Rm9ybWF0ICZmb3JtYXQsCkBAIC0yMjMsNiArMjQzLDIzIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVy
ZTo6TWFrZTNEVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICByZXR1cm4gTWFr
ZVRleHR1cmUoY29udGV4dCwgZm9ybWF0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBh
bGxvd0Zvcm1hdFZpZXcsIHJlZk91dCk7CiAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUK
IH0KK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10
bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiByZWYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAg
TVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10g
QU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKyAgICBkZXNjLnRleHR1cmVUeXBlICAgICAgICAgICA9
IE1UTFRleHR1cmVUeXBlMkQ7CisgICAgZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAgPSBmb3Jt
YXQubWV0YWxGb3JtYXQ7CisgICAgZGVzYy53aWR0aCAgICAgICAgICAgICAgICAgPSB3aWR0aDsK
KyAgICBkZXNjLmhlaWdodCAgICAgICAgICAgICAgICA9IGhlaWdodDsKKyAgICBkZXNjLm1pcG1h
cExldmVsQ291bnQgICAgICA9IDE7CisgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgICAgICAgPSAx
OworICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIHJlZiwgcGxh
bmUsIE5PLCByZWZPdXQpOworfQogCiAvKiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRleHR1
cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCkBAIC0yMzMsNyArMjcwLDQyIEBA
IGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkK
IHsKLSAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJl
bmRlclRhcmdldE9ubHksIGFsbG93Rm9ybWF0VmlldykpOworICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBtdGxGb3JtYXQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93
Rm9ybWF0VmlldywgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgIHJlZk91dCk7Cit9CisK
K2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBt
aXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdl
dE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3Jt
YXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxl
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91
dCkKK3sKKyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMs
IHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworCisgICAg
aWYgKCFyZWZPdXQgfHwgIXJlZk91dC0+Z2V0KCkpCisgICAgeworICAgICAgICBBTkdMRV9NVExf
Q0hFQ0soY29udGV4dCwgZmFsc2UsIEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICBpZiAo
IW10bEZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkpCisgICAgeworICAgICAgICByZWZP
dXQtPmdldCgpLT5zZXRDb2xvcldyaXRhYmxlTWFzayhHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNr
KG10bEZvcm1hdCkpOworICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKK30KKworYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4dHVy
ZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElP
U3VyZmFjZVJlZiBzdXJmYWNlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU1VJbnRlZ2VyIHNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRleHR1cmVSZWYgKnJlZk91dCkKK3sKKyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNv
bnRleHQsIGRlc2MsIHN1cmZhY2VSZWYsIHNsaWNlLCByZW5kZXJUYXJnZXRPbmx5KSk7CiAKICAg
ICBpZiAoISgqcmVmT3V0KSB8fCAhKCpyZWZPdXQpLT5nZXQoKSkKICAgICB7CkBAIC0yNjQsNiAr
MzM2LDE1IEBAIFRleHR1cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgbWlwcywKICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJn
ZXRPbmx5LAogICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldykKKyAgICA6IFRl
eHR1cmUoY29udGV4dCwgZGVzYywgbWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRW
aWV3LCBmYWxzZSkKK3t9CisKK1RleHR1cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0
T25seSwKKyAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAg
ICAgICAgIGJvb2wgbWVtb3J5TGVzcykKICAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1h
a2Vfc2hhcmVkPE1UTENvbG9yV3JpdGVNYXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCiB7CiAg
ICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKQEAgLTI4Myw4ICszNjQsMTYgQEAgVGV4dHVyZTo6VGV4
dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAgZGVzYy51c2FnZSB8PSBNVExU
ZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udGV4
dC0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUg
fHwKLSAgICAgICAgICAgIGRlc2MudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRp
c2FtcGxlKQorICAgICAgICBpZiAobWVtb3J5TGVzcykKKyAgICAgICAgeworI2lmIChUQVJHRVRf
T1NfSU9TIHx8IFRBUkdFVF9PU19UVikgJiYgIVRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAg
ICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWVtb3J5
bGVzczsKKyNlbHNlCisgICAgICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291
cmNlU3RvcmFnZU1vZGVQcml2YXRlOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJl
bmRlcmFibGUgfHwKKyAgICAgICAgICAgICAgICAgZGVzYy50ZXh0dXJlVHlwZSA9PSBNVExUZXh0
dXJlVHlwZTJETXVsdGlzYW1wbGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIE1ldGFsIGRv
ZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2VzcyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRh
CiAgICAgICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1v
ZGVQcml2YXRlOwpAQCAtMzEwLDYgKzM5OSw0NiBAQCBUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCiAgICAgfQogfQogCitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAg
ICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIHBsYW5lLAorICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHkp
CisgICAgOiBtQ29sb3JXcml0YWJsZU1hc2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRl
TWFzaz4oTVRMQ29sb3JXcml0ZU1hc2tBbGwpKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
CisgICAgeworICAgICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4dC0+Z2V0
TWV0YWxEZXZpY2UoKTsKKworICAgICAgICAvLyBFdmVyeSB0ZXh0dXJlIHdpbGwgc3VwcG9ydCBi
ZWluZyByZW5kZXJlZCBmb3Igbm93CisgICAgICAgIGRlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNh
Z2VQaXhlbEZvcm1hdFZpZXc7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1h
dENhcHMoZGVzYy5waXhlbEZvcm1hdCkuaXNSZW5kZXJhYmxlKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlc2MudXNhZ2UgfD0gTVRMVGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OworICAgICAg
ICB9CisKKyNpZiAoVEFSR0VUX09TX0lPUyB8fCBUQVJHRVRfT1NfVFYgfHwgVEFSR0VUX09TX1dB
VENIKSAmJiAhVEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgICAgIGRlc2MucmVzb3VyY2VPcHRp
b25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVNoYXJlZDsKKyNlbHNlCisgICAgICAgIGRlc2Mu
cmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZU1hbmFnZWQ7CisjZW5kaWYK
KworICAgICAgICBpZiAoIXJlbmRlclRhcmdldE9ubHkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlc2MudXNhZ2UgPSBkZXNjLnVzYWdlIHwgTVRMVGV4dHVyZVVzYWdlU2hhZGVyUmVhZDsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4ZWxGb3Jt
YXQpLndyaXRhYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlc2MudXNhZ2Ug
PSBkZXNjLnVzYWdlIHwgTVRMVGV4dHVyZVVzYWdlU2hhZGVyV3JpdGU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWQ8TVRMVGV4dHVyZT4gaW9zdXJmVGV4dHVyZSA9IFttZXRh
bERldmljZSBuZXdUZXh0dXJlV2l0aERlc2NyaXB0b3I6ZGVzYworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3VyZmFj
ZTppb3N1cmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmU6cGxhbmVdOworICAgICAgICBzZXQoW2lv
c3VyZlRleHR1cmUgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXSk7CisgICAgfQorfQorCiBUZXh0dXJl
OjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBNVExQaXhlbEZvcm1hdCBmb3JtYXQpCiAgICAg
OiBSZXNvdXJjZShvcmlnaW5hbCksCiAgICAgICBtQ29sb3JXcml0YWJsZU1hc2sob3JpZ2luYWwt
Pm1Db2xvcldyaXRhYmxlTWFzaykgIC8vIFNoYXJlIGNvbG9yIHdyaXRlIG1hc2sgcHJvcGVydHkK
QEAgLTM0MSw3ICs0NzAsNyBAQCBUZXh0dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBj
b25zdCBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICZzd2l6emxlKQogICAgIDogUmVzb3VyY2Uob3Jp
Z2luYWwpLAogICAgICAgbUNvbG9yV3JpdGFibGVNYXNrKG9yaWdpbmFsLT5tQ29sb3JXcml0YWJs
ZU1hc2spICAvLyBTaGFyZSBjb2xvciB3cml0ZSBtYXNrIHByb3BlcnR5CiB7Ci0jaWYgQU5HTEVf
TVRMX1NXSVpaTEVfQVZBSUxBQkxFCisjaWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZp
bmVkKF9fTUFDXzEwXzE1KQogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewogICAgICAg
ICBhdXRvIHZpZXcgPSBbb3JpZ2luYWwtPmdldCgpCkBAIC0zNjAsMTIgKzQ4OSwxMiBAQCBUZXh0
dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5u
ZWxzICZzd2l6emxlKQogCiB2b2lkIFRleHR1cmU6OnN5bmNDb250ZW50KENvbnRleHRNdGwgKmNv
bnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2RlcikKIHsKLSAgICBJbnZv
a2VDUFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKyAgICBTeW5jQ29udGVu
dChjb250ZXh0LCBibGl0RW5jb2Rlciwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlOjpzeW5jQ29udGVudElmTmVlZGVkKENvbnRleHRNdGwgKmNvbnRleHQpCiB7Ci0gICAg
RW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQsIHRoaXMpOworICAgIEVuc3VyZUNvbnRl
bnRTeW5jZWQoY29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIH0KIAogYm9vbCBUZXh0dXJl
Ojppc0NQVUFjY2Vzc2libGUoKSBjb25zdApAQCAtMzc5LDYgKzUwOCwxMSBAQCBib29sIFRleHR1
cmU6OmlzQ1BVQWNjZXNzaWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIGdldCgpLnN0b3JhZ2VNb2Rl
ID09IE1UTFN0b3JhZ2VNb2RlU2hhcmVkOwogfQogCitib29sIFRleHR1cmU6OmlzU2hhZGVyUmVh
ZGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2Fn
ZVNoYWRlclJlYWQ7Cit9CisKIGJvb2wgVGV4dHVyZTo6c3VwcG9ydEZvcm1hdFZpZXcoKSBjb25z
dAogewogICAgIHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0
VmlldzsKQEAgLTUxNCwxMiArNjQ4LDE0IEBAIFRleHR1cmVSZWYgVGV4dHVyZTo6Y3JlYXRlVmll
d1dpdGhEaWZmZXJlbnRGb3JtYXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQogICAgIEFTU0VSVChz
dXBwb3J0Rm9ybWF0VmlldygpKTsKICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVyZSh0
aGlzLCBmb3JtYXQpKTsKIH0KKwogVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aENv
bXBhdGlibGVGb3JtYXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQogewotICAgIC8vIE5vIG5lZWQg
Zm9yIEFTU0VSVChzdXBwb3J0Rm9ybWF0VmlldygpKTsKICAgICByZXR1cm4gVGV4dHVyZVJlZihu
ZXcgVGV4dHVyZSh0aGlzLCBmb3JtYXQpKTsKIH0KIAorCisKIFRleHR1cmVSZWYgVGV4dHVyZTo6
Y3JlYXRlU3dpenpsZVZpZXcoY29uc3QgVGV4dHVyZVN3aXp6bGVDaGFubmVscyAmc3dpenpsZSkK
IHsKICNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKQEAgLTY1Miw2ICs3ODgsNDggQEAg
VGV4dHVyZVJlZiBUZXh0dXJlOjpnZXRMaW5lYXJDb2xvclZpZXcoKQogICAgIHJldHVybiBtTGlu
ZWFyQ29sb3JWaWV3OwogfQogCitUZXh0dXJlUmVmIFRleHR1cmU6OmdldFJlYWRhYmxlQ29weShD
b250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBsZXZlbFRvQ29weSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHNsaWNlVG9Db3B5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5
KQoreworICAgIGdsOjpFeHRlbnRzIGZpcnN0TGV2ZWxTaXplID0gc2l6ZShrWmVyb05hdGl2ZU1p
cExldmVsKTsKKyAgICBpZiAoIW1SZWFkQ29weSB8fCBtUmVhZENvcHktPmdldCgpLndpZHRoIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdExldmVsU2l6ZS53aWR0aCkgfHwKKyAgICAgICAgbVJl
YWRDb3B5LT5nZXQoKS5oZWlnaHQgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpcnN0TGV2ZWxTaXpl
LmhlaWdodCkpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRoYXQgYmlnIGVu
b3VnaCB0byBzdG9yZSB0aGUgZmlyc3QgbGV2ZWwgZGF0YSBhbmQgYW55IHNtYWxsZXIgbGV2ZWwK
KyAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBkZXNjICAgICAgICAgICAgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRM
X0FVVE9SRUxFQVNFXTsKKyAgICAgICAgICAgIGRlc2MudGV4dHVyZVR5cGUgICAgID0gZ2V0KCku
dGV4dHVyZVR5cGU7CisgICAgICAgICAgICBkZXNjLnBpeGVsRm9ybWF0ICAgICA9IGdldCgpLnBp
eGVsRm9ybWF0OworICAgICAgICAgICAgZGVzYy53aWR0aCAgICAgICAgICAgPSBmaXJzdExldmVs
U2l6ZS53aWR0aDsKKyAgICAgICAgICAgIGRlc2MuaGVpZ2h0ICAgICAgICAgID0gZmlyc3RMZXZl
bFNpemUuaGVpZ2h0OworICAgICAgICAgICAgZGVzYy5kZXB0aCAgICAgICAgICAgPSAxOworICAg
ICAgICAgICAgZGVzYy5hcnJheUxlbmd0aCAgICAgPSAxOworICAgICAgICAgICAgZGVzYy5yZXNv
dXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZTsKKyAgICAgICAgICAg
IGRlc2Muc2FtcGxlQ291bnQgICAgID0gZ2V0KCkuc2FtcGxlQ291bnQ7CisgICAgICAgICAgICBk
ZXNjLnVzYWdlICAgICAgICAgICA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0
dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisKKyAgICAgICAgICAgIGlkPE1UTFRleHR1cmU+IG10
bFRleHR1cmUgPSBbY29udGV4dC0+Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2Ny
aXB0b3I6ZGVzY107CisgICAgICAgICAgICBtUmVhZENvcHkucmVzZXQobmV3IFRleHR1cmUobXRs
VGV4dHVyZSkpOworICAgICAgICB9ICAvLyBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgIH0KKwor
ICAgIEFTU0VSVChlbmNvZGVyKTsKKworICAgIGVuY29kZXItPmNvcHlUZXh0dXJlKHNoYXJlZF9m
cm9tX3RoaXMoKSwgc2xpY2VUb0NvcHksIGxldmVsVG9Db3B5LCBtUmVhZENvcHksIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMSk7CisKKyAgICByZXR1cm4gbVJlYWRDb3B5Owor
fQorCit2b2lkIFRleHR1cmU6OnJlbGVhc2VSZWFkYWJsZUNvcHkoKQoreworICAgIG1SZWFkQ29w
eSA9IG51bGxwdHI7Cit9CisKIFRleHR1cmVSZWYgVGV4dHVyZTo6Z2V0U3RlbmNpbFZpZXcoKQog
ewogICAgIGlmIChtU3RlbmNpbFZpZXcpCkBAIC03OTksNyArOTc3LDcgQEAgYW5nbGU6OlJlc3Vs
dCBCdWZmZXI6OnJlc2V0V2l0aFJlc09wdChDb250ZXh0TXRsICpjb250ZXh0LAogCiB2b2lkIEJ1
ZmZlcjo6c3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgKmJsaXRFbmNvZGVyKQogewotICAgIEludm9rZUNQVU1lbVN5bmMoY29udGV4dCwgYmxp
dEVuY29kZXIsIHRoaXMpOworICAgIFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBz
aGFyZWRfZnJvbV90aGlzKCkpOwogfQogCiBjb25zdCB1aW50OF90ICpCdWZmZXI6Om1hcFJlYWRP
bmx5KENvbnRleHRNdGwgKmNvbnRleHQpCkBAIC04MjAsNyArOTk4LDcgQEAgdWludDhfdCAqQnVm
ZmVyOjptYXBXaXRoT3B0KENvbnRleHRNdGwgKmNvbnRleHQsIGJvb2wgcmVhZG9ubHksIGJvb2wg
bm9TeW5jKQogICAgIHsKICAgICAgICAgQ29tbWFuZFF1ZXVlICZjbWRRdWV1ZSA9IGNvbnRleHQt
PmNtZFF1ZXVlKCk7CiAKLSAgICAgICAgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQs
IHRoaXMpOworICAgICAgICBFbnN1cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9t
X3RoaXMoKSk7CiAKICAgICAgICAgaWYgKHRoaXMtPmlzQmVpbmdVc2VkQnlHUFUoY29udGV4dCkp
CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAppbmRl
eCA3NjhjMzY5N2U4NWUwNmI1NjhiZDVhNTc5MDNkMzMwOWQ0OGJhZGMxLi5lNmJmNzFkODI5YTM1
Y2VmZDg4MWQxYzQzMGUxZGM1MTcyODI4N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9zdGF0ZV9jYWNoZS5oCkBAIC0yMiw2ICsyMiwxMSBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBNVExDbGVhckNvbG9yICZsaHMsIGNvbnN0IE1UTENsZWFyQ29sb3Ig
JnJocyk7CiAKK25hbWVzcGFjZSBhbmdsZQoreworc3RydWN0IEZlYXR1cmVzTXRsOworfQorCiBu
YW1lc3BhY2UgcngKIHsKIGNsYXNzIENvbnRleHRNdGw7CkBAIC0yMjMsNyArMjI4LDggQEAgc3Ry
dWN0IFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYwogfTsKIAogLy8gU29tZSBTREsgbGV2ZWxzIGRv
bid0IGRlY2xhcmUgTVRMUHJpbWl0aXZlVG9wb2xvZ3lDbGFzcy4gTmVlZHMgdG8gZG8gY29tcGls
ZSB0aW1lIGNoZWNrIGhlcmU6Ci0jaWYgIShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUND
QVRBTFlTVCkgJiYgQU5HTEVfSU9TX0RFUExPWV9UQVJHRVQgPCBfX0lQSE9ORV8xMl8wCisjaWYg
IShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkgJiYgXAorICAgICghZGVm
aW5lZChfX0lQSE9ORV8xMl8wKSB8fCBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBIT05F
XzEyXzApCiAjICAgIGRlZmluZSBBTkdMRV9NVExfUFJJTUlUSVZFX1RPUE9MT0dZX0NMQVNTX0FW
QUlMQUJMRSAwCiB1c2luZyBQcmltaXRpdmVUb3BvbG9neUNsYXNzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gdWludDMyX3Q7CiBjb25zdGV4cHIgUHJpbWl0aXZlVG9wb2xv
Z3lDbGFzcyBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1RyaWFuZ2xlID0gMDsKQEAgLTI2Nyw5ICsy
NzMsNyBAQCBzdHJ1Y3QgYWxpZ25hcyg0KSBSZW5kZXJQaXBlbGluZURlc2MKICAgICBSZW5kZXJQ
aXBlbGluZURlc2MgJm9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnNyYyk7CiAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjICZyaHMpIGNvbnN0
OwotCiAgICAgc2l6ZV90IGhhc2goKSBjb25zdDsKLQogICAgIGJvb2wgcmFzdGVyaXphdGlvbkVu
YWJsZWQoKSBjb25zdDsKIAogICAgIFZlcnRleERlc2MgdmVydGV4RGVzY3JpcHRvcjsKQEAgLTI4
OCw2ICsyOTIsMjcgQEAgc3RydWN0IGFsaWduYXMoNCkgUmVuZGVyUGlwZWxpbmVEZXNjCiAgICAg
Ym9vbCBlbXVsYXRlQ292ZXJhZ2VNYXNrIDogMTsKIH07CiAKK3N0cnVjdCBSZW5kZXJQYXNzQXR0
YWNobWVudFRleHR1cmVUYXJnZXREZXNjCit7CisgICAgVGV4dHVyZVJlZiBnZXRUZXh0dXJlUmVm
KCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZS5sb2NrKCk7IH0KKyAgICBUZXh0dXJlUmVmIGdldElt
cGxpY2l0TVNUZXh0dXJlUmVmKCkgY29uc3QgeyByZXR1cm4gaW1wbGljaXRNU1RleHR1cmUubG9j
aygpOyB9CisgICAgYm9vbCBoYXNJbXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuICFp
bXBsaWNpdE1TVGV4dHVyZS5leHBpcmVkKCk7IH0KKyAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1w
bGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFRleHR1cmVSZWYgdGV4ICAgPSBnZXRUZXh0dXJl
UmVmKCk7CisgICAgICAgIFRleHR1cmVSZWYgbXNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZVJl
ZigpOworICAgICAgICByZXR1cm4gbXNUZXggPyBtc1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRl
eC0+c2FtcGxlcygpIDogMSk7CisgICAgfQorCisgICAgVGV4dHVyZVdlYWtSZWYgdGV4dHVyZTsK
KyAgICAvLyBJbXBsaWNpdCBtdWx0aXNhbXBsZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSByZW5kZXJl
ZCBpbnRvIGFuZCBkaXNjYXJkZWQgYXQgdGhlIGVuZCBvZgorICAgIC8vIGEgcmVuZGVyIHBhc3Mu
IEl0cyByZXN1bHQgd2lsbCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgor
ICAgIFRleHR1cmVXZWFrUmVmIGltcGxpY2l0TVNUZXh0dXJlOworICAgIE1pcG1hcE5hdGl2ZUxl
dmVsIGxldmVsID0ga1plcm9OYXRpdmVNaXBMZXZlbDsKKyAgICB1aW50MzJfdCBzbGljZU9yRGVw
dGggICA9IDA7CisgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgPSB0cnVlOworfTsKKwogc3Ry
dWN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYwogewogICAgIFJlbmRlclBhc3NBdHRhY2htZW50
RGVzYygpOwpAQCAtMjk3LDE4ICszMjIsMzQgQEAgc3RydWN0IFJlbmRlclBhc3NBdHRhY2htZW50
RGVzYwogICAgIGJvb2wgZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zKGNvbnN0IFJlbmRlclBh
c3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKIAotICAgIEFOR0xFX0lO
TElORSBib29sIGhhc0ltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gaW1wbGljaXRN
U1RleHR1cmUuZ2V0KCk7IH0KLQotICAgIFRleHR1cmVSZWYgdGV4dHVyZTsKLSAgICAvLyBJbXBs
aWNpdCBtdWx0aXNhbXBsZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBpbnRvIGFuZCBk
aXNjYXJkZWQgYXQgdGhlIGVuZCBvZgotICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQg
d2lsbCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgotICAgIFRleHR1cmVS
ZWYgaW1wbGljaXRNU1RleHR1cmU7Ci0gICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWw7Ci0gICAg
dWludDMyX3Qgc2xpY2VPckRlcHRoOwotCi0gICAgLy8gVGhpcyBhdHRhY2htZW50IGlzIGJsZW5k
YWJsZSBvciBub3QuCi0gICAgYm9vbCBibGVuZGFibGU7CisgICAgQU5HTEVfSU5MSU5FIFRleHR1
cmVSZWYgdGV4dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0
ID8gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0dXJlUmVmKCkgOiBudWxscHRyOworICAgIH0KKyAgICBB
TkdMRV9JTkxJTkUgVGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5nZXRJbXBsaWNpdE1T
VGV4dHVyZVJlZigpIDogbnVsbHB0cjsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIGJvb2wgaGFz
SW1wbGljaXRNU1RleHR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlclRh
cmdldCA/IHJlbmRlclRhcmdldC0+aGFzSW1wbGljaXRNU1RleHR1cmUoKSA6IGZhbHNlOworICAg
IH0KKyAgICBBTkdMRV9JTkxJTkUgdWludDMyX3QgcmVuZGVyU2FtcGxlcygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJT
YW1wbGVzKCkgOiAxOworICAgIH0KKyAgICBBTkdMRV9JTkxJTkUgTWlwbWFwTmF0aXZlTGV2ZWwg
bGV2ZWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRl
clRhcmdldC0+bGV2ZWwgOiBrWmVyb05hdGl2ZU1pcExldmVsOworICAgIH0KKyAgICBBTkdMRV9J
TkxJTkUgdWludDMyX3Qgc2xpY2VPckRlcHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA6IDA7CisgICAgfQor
ICAgIEFOR0xFX0lOTElORSBib29sIGJsZW5kYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlclRh
cmdldCA/IHJlbmRlclRhcmdldC0+YmxlbmRhYmxlIDogZmFsc2U7IH0KIAorICAgIC8vIFRoaXMg
aXMgc2hhcmVkIHBvaW50ZXIgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQg
YWZ0ZXIgYm91bmQgdG8gYSBmcmFtZSBidWZmZXIuCisgICAgc3RkOjpzaGFyZWRfcHRyPFJlbmRl
clBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2M+IHJlbmRlclRhcmdldDsKICAgICBNVExM
b2FkQWN0aW9uIGxvYWRBY3Rpb247CiAgICAgTVRMU3RvcmVBY3Rpb24gc3RvcmVBY3Rpb247CiAg
ICAgTVRMU3RvcmVBY3Rpb25PcHRpb25zIHN0b3JlQWN0aW9uT3B0aW9uczsKQEAgLTM1NCw2ICsz
OTUsMTEgQEAgc3RydWN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgOiBwdWJsaWMg
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjCiAgICAgdWludDMyX3QgY2xlYXJTdGVuY2lsID0gMDsK
IH07CiAKKy8vCisvLyBUaGlzIGlzIEMrKyBlcXVpdmFsZW50IG9mIE9iamVjdGl2ZS1DIE1UTFJl
bmRlclBhc3NEZXNjcmlwdG9yLgorLy8gV2UgY291bGQgdXNlIE1UTFJlbmRlclBhc3NEZXNjcmlw
dG9yIGRpcmVjdGx5LCBob3dldmVyLCB1c2luZyBDKysgc3RydWN0IGhhcyBiZW5lZml0cyBvZiBm
YXN0CisvLyBjb3B5LCBzdGFjayBhbGxvY2F0aW9uLCBpbmxpbmVkIGNvbXBhcmluZyBmdW5jdGlv
biwgZXRjLgorLy8KIHN0cnVjdCBSZW5kZXJQYXNzRGVzYwogewogICAgIFJlbmRlclBhc3NDb2xv
ckF0dGFjaG1lbnREZXNjIGNvbG9yQXR0YWNobWVudHNba01heFJlbmRlclRhcmdldHNdOwpAQCAt
NDE3LDcgKzQ2Myw2IEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVy
RmFjdG9yeQogewogICBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyUGlwZWxpbmVDYWNoZVNw
ZWNpYWxpemVTaGFkZXJGYWN0b3J5KCkgPSBkZWZhdWx0OwotCiAgICAgLy8gR2V0IHNwZWNpYWxp
emVkIHNoYWRlciBmb3IgdGhlIHJlbmRlciBwaXBlbGluZSBjYWNoZS4KICAgICB2aXJ0dWFsIGFu
Z2xlOjpSZXN1bHQgZ2V0U3BlY2lhbGl6ZWRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUg
c2hhZGVyVHlwZSwKQEAgLTQyOSw3ICs0NzQsNyBAQCBjbGFzcyBSZW5kZXJQaXBlbGluZUNhY2hl
U3BlY2lhbGl6ZVNoYWRlckZhY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURlc2MpID0gMDsK
IH07CiAKLS8vIFJlbmRlciBwaXBlbGluZSBzdGF0ZSBjYWNoZSBwZXIgc2hhZGVyIHByb2dyYW0u
CisvLyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2FjaGUgcGVyIHNoYWRlciBwcm9ncmFtCiBjbGFz
cyBSZW5kZXJQaXBlbGluZUNhY2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiB7CiAgIHB1
YmxpYzoKQEAgLTQ1OSw2ICs1MDQsNyBAQCBjbGFzcyBSZW5kZXJQaXBlbGluZUNhY2hlIGZpbmFs
IDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBt
VmVydGV4U2hhZGVyOwogICAgIC8vIE5vbi1zcGVjaWFsaXplZCBmcmFnbWVudCBzaGFkZXIKICAg
ICBBdXRvT2JqQ1B0cjxpZDxNVExGdW5jdGlvbj4+IG1GcmFnbWVudFNoYWRlcjsKKyAgICAvLyBP
biBzaGFkZXIgd2l0aCBlbXVsYXRlZCByYXN0ZXJpemF0aW9uIGRpc2NhcmQsIG9uZSB3aXRob3V0
CiAKICAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyUGlwZWxpbmVTdGF0ZXMoKTsKQEAgLTQ3Nywx
NCArNTIzLDEzIEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9u
Q29weWFibGUKICAgICAvLyBPbmUgdGFibGUgd2l0aCBkZWZhdWx0IGF0dHJpYiBhbmQgb25lIHRh
YmxlIHdpdGhvdXQuCiAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFJlbmRlclBpcGVsaW5lRGVzYywg
QXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+PgogICAgICAgICBtUmVuZGVy
UGlwZWxpbmVTdGF0ZXNbMl07Ci0KICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNo
YWRlckZhY3RvcnkgKm1TcGVjaWFsaXplZFNoYWRlckZhY3Rvcnk7CiB9OwogCiBjbGFzcyBTdGF0
ZUNhY2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiB7CiAgIHB1YmxpYzoKLSAgICBTdGF0
ZUNhY2hlKCk7CisgICAgU3RhdGVDYWNoZShjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1
cmVzKTsKICAgICB+U3RhdGVDYWNoZSgpOwogCiAgICAgLy8gTnVsbCBkZXB0aCBzdGVuY2lsIHN0
YXRlIGhhcyBkZXB0aC9zdGVjaWwgcmVhZCAmIHdyaXRlIGRpc2FibGVkLgpAQCAtNTAyLDYgKzU0
Nyw4IEBAIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB2
b2lkIGNsZWFyKCk7CiAKICAgcHJpdmF0ZToKKyAgICBjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwg
Jm1GZWF0dXJlczsKKwogICAgIEF1dG9PYmpDUHRyPGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPj4g
bU51bGxEZXB0aFN0ZW5jaWxTdGF0ZSA9IG5pbDsKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8RGVw
dGhTdGVuY2lsRGVzYywgQXV0b09iakNQdHI8aWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+Pj4gbURl
cHRoU3RlbmNpbFN0YXRlczsKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8U2FtcGxlckRlc2MsIEF1
dG9PYmpDUHRyPGlkPE1UTFNhbXBsZXJTdGF0ZT4+PiBtU2FtcGxlclN0YXRlczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfc3RhdGVfY2FjaGUubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tCmluZGV4IDFjZjIzN2FkNjQwNDJmYjU5
NzY2MzNjOThjN2I1MTEyNDBmOTM3NDguLjY5ODRkYmQ2MGMzOTVkY2Q2YWY5NmI4MTUxMTJhMjBh
YjRiZTliYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0KKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQpA
QCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2Vz
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vRmVhdHVyZXNNdGwuaCIKIAogI2RlZmluZSBBTkdMRV9PQkpDX0NQX1BS
T1BFUlRZKERTVCwgU1JDLCBQUk9QRVJUWSkgXAogICAgIChEU1QpLlBST1BFUlRZID0gc3RhdGlj
X2Nhc3Q8X190eXBlb2ZfXygoRFNUKS5QUk9QRVJUWSk+KFRvT2JqQygoU1JDKS5QUk9QRVJUWSkp
CkBAIC0xODIsMTAgKzE4MywxMCBAQCBpZDxNVExUZXh0dXJlPiBUb09iakMoY29uc3QgVGV4dHVy
ZVJlZiAmdGV4dHVyZSkKICAgICByZXR1cm4gdGV4dHVyZVJlZiA/IHRleHR1cmVSZWYtPmdldCgp
IDogbmlsOwogfQogCi12b2lkIEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoY29u
c3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZzcmMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjcmlwdG9yICpkc3Qp
Cit2b2lkIEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoTVRMUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjcmlwdG9yICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZzcmMpCiB7Ci0gICAgY29u
c3QgVGV4dHVyZVJlZiAmaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmU7
CisgICAgYXV0byBpbXBsaWNpdE1zVGV4dHVyZSA9IHNyYy5pbXBsaWNpdE1TVGV4dHVyZSgpOwog
CiAgICAgaWYgKGltcGxpY2l0TXNUZXh0dXJlKQogICAgIHsKQEAgLTE5MywzMSArMTk0LDMxIEBA
IHZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNz
QXR0YWNobWVudERlc2MgJnNyYywKICAgICAgICAgZHN0LmxldmVsICAgICAgICAgID0gMDsKICAg
ICAgICAgZHN0LnNsaWNlICAgICAgICAgID0gMDsKICAgICAgICAgZHN0LmRlcHRoUGxhbmUgICAg
ID0gMDsKLSAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsK
LSAgICAgICAgZHN0LnJlc29sdmVMZXZlbCAgID0gc3JjLmxldmVsLmdldCgpOworICAgICAgICBk
c3QucmVzb2x2ZVRleHR1cmUgPSBUb09iakMoc3JjLnRleHR1cmUoKSk7CisgICAgICAgIGRzdC5y
ZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOwogICAgICAgICBpZiAoZHN0LnJlc29s
dmVUZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBlM0QpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9yRGVwdGg7CisgICAg
ICAgICAgICBkc3QucmVzb2x2ZURlcHRoUGxhbmUgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAg
ICAgICAgICBkc3QucmVzb2x2ZVNsaWNlICAgICAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UKICAgICAgICAgewotICAgICAgICAgICAgZHN0LnJlc29sdmVTbGljZSAgICAgID0gc3JjLnNs
aWNlT3JEZXB0aDsKKyAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IHNyYy5zbGlj
ZU9yRGVwdGgoKTsKICAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IDA7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZHN0LnRleHR1cmUgPSBUb09i
akMoc3JjLnRleHR1cmUpOwotICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbC5nZXQoKTsK
KyAgICAgICAgZHN0LnRleHR1cmUgPSBUb09iakMoc3JjLnRleHR1cmUoKSk7CisgICAgICAgIGRz
dC5sZXZlbCAgID0gc3JjLmxldmVsKCkuZ2V0KCk7CiAgICAgICAgIGlmIChkc3QudGV4dHVyZS50
ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTNEKQogICAgICAgICB7Ci0gICAgICAgICAgICBk
c3QuZGVwdGhQbGFuZSA9IHNyYy5zbGljZU9yRGVwdGg7CisgICAgICAgICAgICBkc3QuZGVwdGhQ
bGFuZSA9IHNyYy5zbGljZU9yRGVwdGgoKTsKICAgICAgICAgICAgIGRzdC5zbGljZSAgICAgID0g
MDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGRzdC5z
bGljZSAgICAgID0gc3JjLnNsaWNlT3JEZXB0aDsKKyAgICAgICAgICAgIGRzdC5zbGljZSAgICAg
ID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSAgICA9IG5pbDsKQEAgLTIzMSwy
NiArMjMyLDI2IEBAIHZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25z
dCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNyYywKICAgICBBTkdMRV9PQkpDX0NQX1BST1BF
UlRZKGRzdCwgc3JjLCBzdG9yZUFjdGlvbk9wdGlvbnMpOwogfQogCi12b2lkIFRvT2JqQyhjb25z
dCBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmZGVzYywKLSAgICAgICAgICAgIE1UTFJl
bmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYykKK3ZvaWQgVG9PYmpD
KE1UTFJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKyAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZkZXNjKQogewotICAg
IEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworICAg
IEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMob2JqQ0Rlc2MsIGRlc2MpOwogCiAg
ICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJDb2xvcik7CiB9
CiAKLXZvaWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNj
LAotICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0RlcHRoQXR0YWNobWVudERlc2NyaXB0b3IgKm9i
akNEZXNjKQordm9pZCBUb09iakMoTVRMUmVuZGVyUGFzc0RlcHRoQXR0YWNobWVudERlc2NyaXB0
b3IgKm9iakNEZXNjLAorICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNobWVu
dERlc2MgJmRlc2MpCiB7Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhk
ZXNjLCBvYmpDRGVzYyk7CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhv
YmpDRGVzYywgZGVzYyk7CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBk
ZXNjLCBjbGVhckRlcHRoKTsKIH0KIAotdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5j
aWxBdHRhY2htZW50RGVzYyAmZGVzYywKLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NTdGVuY2ls
QXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQordm9pZCBUb09iakMoTVRMUmVuZGVyUGFz
c1N0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MsCisgICAgICAgICAgICBjb25z
dCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjKQogewotICAgIEJhc2VSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworICAgIEJhc2VSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMob2JqQ0Rlc2MsIGRlc2MpOwogCiAgICAgQU5HTEVf
T0JKQ19DUF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJTdGVuY2lsKTsKIH0KQEAgLTY5
NiwxMSArNjk3LDcgQEAgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MoKQogCiB2b2lkIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6cmVzZXQoKQogewot
ICAgIHRleHR1cmUucmVzZXQoKTsKLSAgICBpbXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOwotICAg
IGxldmVsICAgICAgICAgICAgICA9IG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbDsKLSAgICBzbGlj
ZU9yRGVwdGggICAgICAgPSAwOwotICAgIGJsZW5kYWJsZSAgICAgICAgICA9IGZhbHNlOworICAg
IHJlbmRlclRhcmdldCAgICAgICA9IG51bGxwdHI7CiAgICAgbG9hZEFjdGlvbiAgICAgICAgID0g
TVRMTG9hZEFjdGlvbkxvYWQ7CiAgICAgc3RvcmVBY3Rpb24gICAgICAgID0gTVRMU3RvcmVBY3Rp
b25TdG9yZTsKICAgICBzdG9yZUFjdGlvbk9wdGlvbnMgPSBNVExTdG9yZUFjdGlvbk9wdGlvbk5v
bmU7CkBAIC03MDksOCArNzA2LDkgQEAgdm9pZCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJl
c2V0KCkKIGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjplcXVhbElnbm9yZUxvYWRTdG9y
ZU9wdGlvbnMoCiAgICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29u
c3QKIHsKLSAgICByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlICYmIGltcGxpY2l0TVNU
ZXh0dXJlID09IG90aGVyLmltcGxpY2l0TVNUZXh0dXJlICYmCi0gICAgICAgICAgIGxldmVsID09
IG90aGVyLmxldmVsICYmIHNsaWNlT3JEZXB0aCA9PSBvdGhlci5zbGljZU9yRGVwdGg7CisgICAg
cmV0dXJuIHJlbmRlclRhcmdldCA9PSBvdGhlci5yZW5kZXJUYXJnZXQgfHwKKyAgICAgICAgICAg
KHRleHR1cmUoKSA9PSBvdGhlci50ZXh0dXJlKCkgJiYgbGV2ZWwoKSA9PSBvdGhlci5sZXZlbCgp
ICYmCisgICAgICAgICAgICBzbGljZU9yRGVwdGgoKSA9PSBvdGhlci5zbGljZU9yRGVwdGgoKSk7
CiB9CiAKIGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpvcGVyYXRvcj09KGNvbnN0IFJl
bmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNvbnN0CkBAIC03MjMsNiArNzIxLDMwIEBA
IGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpvcGVyYXRvcj09KGNvbnN0IFJlbmRlclBh
c3NBdHRhY2htZW50RGVzYyAmb3RoZXIpCiAgICAgcmV0dXJuIGxvYWRBY3Rpb24gPT0gb3RoZXIu
bG9hZEFjdGlvbiAmJiBzdG9yZUFjdGlvbiA9PSBvdGhlci5zdG9yZUFjdGlvbiAmJgogICAgICAg
ICAgICBzdG9yZUFjdGlvbk9wdGlvbnMgPT0gb3RoZXIuc3RvcmVBY3Rpb25PcHRpb25zOwogfQor
Ly8gQ29udmVydCB0byBNZXRhbCBvYmplY3QKK3ZvaWQgUmVuZGVyUGFzc0Rlc2M6OmNvbnZlcnRU
b01ldGFsRGVzYyhNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqb2JqQ0Rlc2MpIGNvbnN0Cit7Cisg
ICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1Db2xvckF0dGFjaG1lbnRzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRvT2JqQyhvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLCBjb2xvckF0dGFjaG1lbnRzW2ld
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1l
bnRzOyBpIDwga01heFJlbmRlclRhcmdldHM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gSW5hY3RpdmUgcmVuZGVyIHRhcmdldAorICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRh
Y2htZW50c1tpXS50ZXh0dXJlICAgICA9IG5pbDsKKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9y
QXR0YWNobWVudHNbaV0ubGV2ZWwgICAgICAgPSAwOworICAgICAgICAgICAgb2JqQ0Rlc2MuY29s
b3JBdHRhY2htZW50c1tpXS5zbGljZSAgICAgICA9IDA7CisgICAgICAgICAgICBvYmpDRGVzYy5j
b2xvckF0dGFjaG1lbnRzW2ldLmRlcHRoUGxhbmUgID0gMDsKKyAgICAgICAgICAgIG9iakNEZXNj
LmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFjdGlvbiAgPSBNVExMb2FkQWN0aW9uRG9udENhcmU7
CisgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0g
TVRMU3RvcmVBY3Rpb25Eb250Q2FyZTsKKyAgICAgICAgfQorCisgICAgICAgIFRvT2JqQyhvYmpD
RGVzYy5kZXB0aEF0dGFjaG1lbnQsIGRlcHRoQXR0YWNobWVudCk7CisgICAgICAgIFRvT2JqQyhv
YmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCwgc3RlbmNpbEF0dGFjaG1lbnQpOworICAgIH0KK30K
IAogdm9pZCBSZW5kZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2Mo
UmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAogewpAQCAtNzQyLDE5ICs3
NjQsMTkgQEAgdm9pZCBSZW5kZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1
dERlc2MoTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JXcmkKIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBv
cHVsYXRlUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjKGNvbnN0IEJsZW5kRGVzYyAmYmxlbmRTdGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykgY29uc3QKIHsKLSAgICBSZW5kZXJQ
aXBlbGluZU91dHB1dERlc2MgJm91dHB1dERlc2NyaXB0b3IgPSAqb3V0RGVzYzsKLSAgICBvdXRw
dXREZXNjcmlwdG9yLm51bUNvbG9yQXR0YWNobWVudHMgICAgICAgPSB0aGlzLT5udW1Db2xvckF0
dGFjaG1lbnRzOwotICAgIG91dHB1dERlc2NyaXB0b3Iuc2FtcGxlQ291bnQgICAgICAgICAgICAg
ICA9IHRoaXMtPnNhbXBsZUNvdW50OworICAgIGF1dG8gJm91dHB1dERlc2NyaXB0b3IgICAgICAg
ICAgICAgICA9ICpvdXREZXNjOworICAgIG91dHB1dERlc2NyaXB0b3IubnVtQ29sb3JBdHRhY2ht
ZW50cyA9IHRoaXMtPm51bUNvbG9yQXR0YWNobWVudHM7CisgICAgb3V0cHV0RGVzY3JpcHRvci5z
YW1wbGVDb3VudCAgICAgICAgID0gdGhpcy0+c2FtcGxlQ291bnQ7CiAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IHRoaXMtPm51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKICAgICB7CiAgICAg
ICAgIGF1dG8gJnJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQgPSB0aGlzLT5jb2xvckF0dGFjaG1l
bnRzW2ldOwotICAgICAgICBhdXRvIHRleHR1cmUgICAgICAgICAgICAgICAgICAgID0gcmVuZGVy
UGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJlOworICAgICAgICBhdXRvIHRleHR1cmUgICAgICAg
ICAgICAgICAgICAgID0gcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CiAKICAg
ICAgICAgaWYgKHRleHR1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENvcHkgcGFyYW1l
dGVycyBmcm9tIGJsZW5kIHN0YXRlCiAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9y
QXR0YWNobWVudHNbaV0udXBkYXRlKGJsZW5kU3RhdGUpOwotICAgICAgICAgICAgaWYgKCFyZW5k
ZXJQYXNzQ29sb3JBdHRhY2htZW50LmJsZW5kYWJsZSkKKyAgICAgICAgICAgIGlmICghcmVuZGVy
UGFzc0NvbG9yQXR0YWNobWVudC5ibGVuZGFibGUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAvLyBEaXNhYmxlIGJsZW5kaW5nIGlmIHRoZSBhdHRhY2htZW50J3MgcmVuZGVyIHRh
cmdldCBkb2Vzbid0IHN1cHBvcnQgYmxlbmRpbmcuCiAgICAgICAgICAgICAgICAgb3V0cHV0RGVz
Y3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldLmJsZW5kaW5nRW5hYmxlZCA9IGZhbHNlOwpAQCAt
NzgxLDExICs4MDMsMTEgQEAgdm9pZCBSZW5kZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBl
bGluZU91dHB1dERlc2MoY29uc3QgQmxlbmREZXNjICZibGVuZFN0YXQKICAgICAgICAgb3V0cHV0
RGVzY3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldLnJlc2V0KCk7CiAgICAgfQogCi0gICAgYXV0
byBkZXB0aFRleHR1cmUgPSB0aGlzLT5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICBhdXRv
IGRlcHRoVGV4dHVyZSA9IHRoaXMtPmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCk7CiAgICAgb3V0
cHV0RGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCA9CiAgICAgICAgIGRlcHRo
VGV4dHVyZSA/IGRlcHRoVGV4dHVyZS0+cGl4ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0SW52
YWxpZDsKIAotICAgIGF1dG8gc3RlbmNpbFRleHR1cmUgPSB0aGlzLT5zdGVuY2lsQXR0YWNobWVu
dC50ZXh0dXJlOworICAgIGF1dG8gc3RlbmNpbFRleHR1cmUgPSB0aGlzLT5zdGVuY2lsQXR0YWNo
bWVudC50ZXh0dXJlKCk7CiAgICAgb3V0cHV0RGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBp
eGVsRm9ybWF0ID0KICAgICAgICAgc3RlbmNpbFRleHR1cmUgPyBzdGVuY2lsVGV4dHVyZS0+cGl4
ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0SW52YWxpZDsKIH0KQEAgLTgzMSw0MiArODUzLDIx
IEBAIGJvb2wgUmVuZGVyUGFzc0Rlc2M6Om9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUGFzc0Rlc2Mg
Jm90aGVyKSBjb25zdAogICAgIHJldHVybiBkZXB0aEF0dGFjaG1lbnQgPT0gb3RoZXIuZGVwdGhB
dHRhY2htZW50ICYmIHN0ZW5jaWxBdHRhY2htZW50ID09IG90aGVyLnN0ZW5jaWxBdHRhY2htZW50
OwogfQogCi0vLyBDb252ZXJ0IHRvIE1ldGFsIG9iamVjdAotdm9pZCBSZW5kZXJQYXNzRGVzYzo6
Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVzYykgY29u
c3QKLXsKLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQotICAgIHsKLSAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKLSAgICAgICAgewotICAg
ICAgICAgICAgVG9PYmpDKGNvbG9yQXR0YWNobWVudHNbaV0sIG9iakNEZXNjLmNvbG9yQXR0YWNo
bWVudHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IG51bUNvbG9y
QXR0YWNobWVudHM7IGkgPCBrTWF4UmVuZGVyVGFyZ2V0czsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0Ci0gICAgICAgICAgICBvYmpDRGVzYy5j
b2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUgICAgID0gbmlsOwotICAgICAgICAgICAgb2JqQ0Rl
c2MuY29sb3JBdHRhY2htZW50c1tpXS5sZXZlbCAgICAgICA9IDA7Ci0gICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKLSAgICAgICAgICAgIG9i
akNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uZGVwdGhQbGFuZSAgPSAwOwotICAgICAgICAgICAg
b2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRBY3Rpb25E
b250Q2FyZTsKLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc3RvcmVB
Y3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOwotICAgICAgICB9Ci0KLSAgICAgICAgVG9P
YmpDKGRlcHRoQXR0YWNobWVudCwgb2JqQ0Rlc2MuZGVwdGhBdHRhY2htZW50KTsKLSAgICAgICAg
VG9PYmpDKHN0ZW5jaWxBdHRhY2htZW50LCBvYmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCk7Ci0g
ICAgfQotfQotCiAvLyBSZW5kZXJQaXBlbGluZUNhY2hlIGltcGxlbWVudGF0aW9uCi1SZW5kZXJQ
aXBlbGluZUNhY2hlOjpSZW5kZXJQaXBlbGluZUNhY2hlKCkgOiBSZW5kZXJQaXBlbGluZUNhY2hl
KG51bGxwdHIpIHt9CitSZW5kZXJQaXBlbGluZUNhY2hlOjpSZW5kZXJQaXBlbGluZUNhY2hlKCkg
OiBSZW5kZXJQaXBlbGluZUNhY2hlKG51bGxwdHIpIHsKK30KIAogUmVuZGVyUGlwZWxpbmVDYWNo
ZTo6UmVuZGVyUGlwZWxpbmVDYWNoZSgKICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZVNoYWRlckZhY3RvcnkgKnNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKICAgICA6IG1TcGVjaWFs
aXplZFNoYWRlckZhY3Rvcnkoc3BlY2lhbGl6ZWRTaGFkZXJGYWN0b3J5KQote30KK3sKKworfQog
CiBSZW5kZXJQaXBlbGluZUNhY2hlOjp+UmVuZGVyUGlwZWxpbmVDYWNoZSgpIHt9CiAKLXZvaWQg
UmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIGlk
PE1UTEZ1bmN0aW9uPiBzaGFkZXIpCit2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldFZlcnRl
eFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKIHsKICAgICBtVmVydGV4U2hhZGVy
LnJldGFpbkFzc2lnbihzaGFkZXIpOwogCkBAIC04NzksNyArODgwLDggQEAgdm9pZCBSZW5kZXJQ
aXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgaWQ8TVRMRnVu
Y3Rpb24+IHNoYWQKICAgICByZWNyZWF0ZVBpcGVsaW5lU3RhdGVzKGNvbnRleHQpOwogfQogCi12
b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRl
eHQsIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCit2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNl
dEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCiB7CiAgICAgbUZy
YWdtZW50U2hhZGVyLnJldGFpbkFzc2lnbihzaGFkZXIpOwogCkBAIC05MjksMTAgKzkzMSw2IEBA
IEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5kZXJQaXBlbGluZUNh
Y2hlOjppbnNlcnRSZW5kZXJQaXBlbGluCiB7CiAgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVy
UGlwZWxpbmVTdGF0ZT4+IG5ld1N0YXRlID0KICAgICAgICAgY3JlYXRlUmVuZGVyUGlwZWxpbmVT
dGF0ZShjb250ZXh0LCBkZXNjLCBpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0KTsKLSAgICBpZiAo
IW5ld1N0YXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9CiAKICAgICBpbnQg
dGFibGVJZHggPSBpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0ID8gMSA6IDA7CiAgICAgYXV0byBy
ZSAgICAgID0gbVJlbmRlclBpcGVsaW5lU3RhdGVzW3RhYmxlSWR4XS5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZGVzYywgbmV3U3RhdGUpKTsKQEAgLTk0NCw2ICs5NDIsNyBAQCBBdXRvT2JqQ1B0cjxp
ZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6aW5zZXJ0UmVu
ZGVyUGlwZWxpbgogICAgIHJldHVybiByZS5maXJzdC0+c2Vjb25kOwogfQogCisKIEF1dG9PYmpD
UHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5kZXJQaXBlbGluZUNhY2hlOjpjcmVh
dGVSZW5kZXJQaXBlbGluZVN0YXRlKAogICAgIENvbnRleHQgKmNvbnRleHQsCiAgICAgY29uc3Qg
UmVuZGVyUGlwZWxpbmVEZXNjICZvcmlnaW5hbERlc2MsCkBAIC05NTksNyArOTU4LDYgQEAgQXV0
b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVsaW5lQ2FjaGU6
OmNyZWF0ZVJlbmRlclBpcGVsaW4KICAgICAgICAgICAgIGRlc2MuZW11bGF0ZUNvdmVyYWdlTWFz
ayAgICA9IGZhbHNlOwogICAgICAgICAgICAgZGVzYy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0g
ZmFsc2U7CiAgICAgICAgIH0KLQogICAgICAgICAvLyBDaG9vc2Ugc2hhZGVyIHZhcmlhbnQKICAg
ICAgICAgaWQ8TVRMRnVuY3Rpb24+IHZlcnRTaGFkZXIgPSBuaWw7CiAgICAgICAgIGlkPE1UTEZ1
bmN0aW9uPiBmcmFnU2hhZGVyID0gbmlsOwpAQCAtMTAwNCw3ICsxMDAyLDI1IEBAIEF1dG9PYmpD
UHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5kZXJQaXBlbGluZUNhY2hlOjpjcmVh
dGVSZW5kZXJQaXBlbGluCiAKICAgICAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNj
OgogICAgICAgICBBdXRvT2JqQ09iajxNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3I+IG9iakNE
ZXNjID0gVG9PYmpDKHZlcnRTaGFkZXIsIGZyYWdTaGFkZXIsIGRlc2MpOwotCisgICAgICAgIC8v
IFZhbGlkYXRlIFJlbmRlciBQaXBlbGluZSBTdGF0ZToKKyAgICAgICAgaWYgKERldmljZUhhc01h
eGltdW1SZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgTlNVSW50ZWdlciBtYXhTaXplID0gR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUlu
Qnl0ZXMobWV0YWxEZXZpY2UpOworICAgICAgICAgICAgTlNVSW50ZWdlciByZW5kZXJUYXJnZXRT
aXplID0KKyAgICAgICAgICAgICAgICBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcihvYmpDRGVzYywgY29udGV4dCwgbWV0YWxEZXZpY2UpOworICAgICAg
ICAgICAgaWYgKHJlbmRlclRhcmdldFNpemUgPiBtYXhTaXplKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICplcnJvclN0cmluZyA9CisgICAgICAgICAgICAgICAgICAg
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVGhpcyBzZXQgb2YgcmVuZGVyIHRhcmdldHMg
cmVxdWlyZXMgJWx1IGJ5dGVzIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQCJwaXhlbCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0cyAlbHUg
Ynl0ZXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVuc2lnbmVkIGxvbmcpcmVuZGVyVGFyZ2V0U2l6ZSwgKHVuc2lnbmVkIGxvbmcpbWF4U2l6ZV07
CisgICAgICAgICAgICAgICAgTlNFcnJvciAqZXJyID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OkAiTVRMVmFsaWRhdGlvbkVycm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZTotMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VySW5mbzpAe05TTG9jYWxpemVkRGVzY3JpcHRpb25LZXkgOiBl
cnJvclN0cmluZ31dOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmhhbmRsZUVycm9yKGVyciwg
X19GSUxFX18sIEFOR0xFX0ZVTkNUSU9OLCBfX0xJTkVfXyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAvLyBTcGVjaWFsIGF0
dHJpYnV0ZSBzbG90IGZvciBkZWZhdWx0IGF0dHJpYnV0ZQogICAgICAgICBpZiAoaW5zZXJ0RGVm
YXVsdEF0dHJpYkxheW91dCkKICAgICAgICAgewpAQCAtMTAzMiw2ICsxMDQ4LDcgQEAgQXV0b09i
akNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNy
ZWF0ZVJlbmRlclBpcGVsaW4KICAgICB9CiB9CiAKKwogdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hl
OjpyZWNyZWF0ZVBpcGVsaW5lU3RhdGVzKENvbnRleHQgKmNvbnRleHQpCiB7CiAgICAgZm9yIChp
bnQgaGFzRGVmYXVsdEF0dHJpYiA9IDA7IGhhc0RlZmF1bHRBdHRyaWIgPD0gMTsgKytoYXNEZWZh
dWx0QXR0cmliKQpAQCAtMTA2Miw3ICsxMDc5LDcgQEAgdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hl
OjpjbGVhclBpcGVsaW5lU3RhdGVzKCkKIH0KIAogLy8gU3RhdGVDYWNoZSBpbXBsZW1lbnRhdGlv
bgotU3RhdGVDYWNoZTo6U3RhdGVDYWNoZSgpIHt9CitTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKGNv
bnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmZmVhdHVyZXMpIDogbUZlYXR1cmVzKGZlYXR1cmVzKSB7
fQogCiBTdGF0ZUNhY2hlOjp+U3RhdGVDYWNoZSgpIHt9CiAKQEAgLTExMTMsNiArMTEzMCwxMSBA
QCBBdXRvT2JqQ1B0cjxpZDxNVExTYW1wbGVyU3RhdGU+PiBTdGF0ZUNhY2hlOjpnZXRTYW1wbGVy
U3RhdGUoaWQ8TVRMRGV2aWNlPiBtZXRhbAogICAgICAgICBpZiAoaXRlID09IG1TYW1wbGVyU3Rh
dGVzLmVuZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICBBdXRvT2JqQ09iajxNVExTYW1wbGVy
RGVzY3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakMoZGVzYyk7CisgICAgICAgICAgICBpZiAoIW1G
ZWF0dXJlcy5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUuZW5hYmxlZCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSdW50aW1lIHNhbXBsZXIgY29tcGFyZSBtb2RlIGlz
IG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5ldmVyLgorICAgICAgICAgICAgICAgIG9iakNE
ZXNjLmdldCgpLmNvbXBhcmVGdW5jdGlvbiA9IE1UTENvbXBhcmVGdW5jdGlvbk5ldmVyOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4g
bmV3U3RhdGUgPQogICAgICAgICAgICAgICAgIFtbbWV0YWxEZXZpY2UgbmV3U2FtcGxlclN0YXRl
V2l0aERlc2NyaXB0b3I6b2JqQ0Rlc2NdIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfdXRpbHMuaAppbmRleCBhODRhYzczZWEwMzNmYTZiZTRmZjI0MTQ2ZDUw
ZWNkY2RiY2M4ZDcwLi40OTAwZWNiYmU4ZWI3ZTU3ZmJlNjgzMTZiMzFlNmU1YzFmMDE3NmFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX3V0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oCkBAIC05OCw2ICs5OCwxMCBAQCBBdXRvT2Jq
Q1B0cjxpZDxNVExMaWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeUZyb21CaW5hcnkoaWQ8TVRM
RGV2aWNlPiBtZXRhbERldgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBiaW5hcnlTb3VyY2VMZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0b09iakNQdHI8
TlNFcnJvciAqPiAqZXJyb3IpOwogCitib29sIFN1cHBvcnRzSU9TR1BVRmFtaWx5KGlkPE1UTERl
dmljZT4gZGV2aWNlLCB1aW50OF90IGlPU0ZhbWlseSk7CisKK2Jvb2wgU3VwcG9ydHNNYWNHUFVG
YW1pbHkoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIHVpbnQ4X3QgbWFjRmFtaWx5KTsKKwogLy8gTmVl
ZCB0byBkZWZpbmUgaW52YWxpZCBlbnVtIHZhbHVlIHNpbmNlIE1ldGFsIGRvZXNuJ3QgZGVmaW5l
IGl0CiBjb25zdGV4cHIgTVRMVGV4dHVyZVR5cGUgTVRMVGV4dHVyZVR5cGVJbnZhbGlkID0gc3Rh
dGljX2Nhc3Q8TVRMVGV4dHVyZVR5cGU+KE5TVUludGVnZXJNYXgpOwogc3RhdGljX2Fzc2VydChz
aXplb2YoTVRMVGV4dHVyZVR5cGUpID09IHNpemVvZihOU1VJbnRlZ2VyKSwKQEAgLTEzNSwxNSAr
MTM5LDMwIEBAIE1UTFRleHR1cmVTd2l6emxlIEdldFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6
emxlKTsKIAogLy8gR2V0IGNvbG9yIHdyaXRlIG1hc2sgZm9yIGEgc3BlY2lmaWVkIGZvcm1hdC4g
U29tZSBmb3JtYXRzIHN1Y2ggYXMgUkdCNTY1IGRvZXNuJ3QgaGF2ZSBhbHBoYQogLy8gY2hhbm5l
bCBidXQgaXMgZW11bGF0ZWQgYnkgYSBSR0JBOCBmb3JtYXQsIHdlIG5lZWQgdG8gZGlzYWJsZSBh
bHBoYSB3cml0ZSBmb3IgdGhpcyBmb3JtYXQuCi0vLyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRo
ZSBmb3JtYXQgaXMgZW11bGF0ZWQsIHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1
ZS4KLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRs
OjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNGb3JtYXRFbXVsYXRlZCk7CisvLyAtIGVtdWxh
dGVkQ2hhbm5lbHNPdXQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQsIHRoaXMgcG9pbnRlciB3
aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29s
b3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZW11bGF0ZWRDaGFubmVsc091dCk7
CiBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6
Rm9ybWF0ICZtdGxGb3JtYXQpOwogYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9y
bWF0ICZtdGxGb3JtYXQpOwogCitOU1VJbnRlZ2VyIEdldE1heFJlbmRlclRhcmdldFNpemVGb3JE
ZXZpY2VJbkJ5dGVzKGlkPE1UTERldmljZT4gZGV2aWNlKTsKK05TVUludGVnZXIgR2V0TWF4TnVt
YmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlkPE1UTERldmljZT4gZGV2aWNlKTsKK2Jvb2wg
RGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOwor
CiAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNvbG9yIGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2
aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFja2VuZCdzIGZvcm1hdAogLy8gaGFzIGFscGhhIGNo
YW5uZWwuCiBNVExDbGVhckNvbG9yIEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29s
b3IgY29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yTWFzayk7CiAKKworTlNVSW50ZWdlciBD
b21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJl
bmRlclBhc3NEZXNjcmlwdG9yICpkZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCitOU1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVV
c2VkRm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKAorICAgIGNvbnN0IE1UTFJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0
LAorICAgIGlkPE1UTERldmljZT4gZGV2aWNlKTsKKwogZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94
KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsKIAogTWlwbWFwTmF0aXZlTGV2ZWwgR2V0TmF0
aXZlTWlwTGV2ZWwoR0x1aW50IGxldmVsLCBHTHVpbnQgYmFzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxz
Lm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF91dGlscy5tbQppbmRleCAwNzZlNjA5OGMzYTI2MzBkOWUxYWYwNzgwY2U2N2FlMjZhMDIx
ZDhjLi4zZjI0OWY5NmExYmY4MDlmMzg4MjIyYmRiMmI1YjFkODI5Zjk0YjM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KQEAgLTEwLDkgKzEwLDExIEBACiAKICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKIAorI2luY2x1ZGUgPEF2YWlsYWJp
bGl0eS5oPgogI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL01lbW9yeUJ1ZmZlci5oIgorI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW1fdXRpbHMuaCIKICNp
bmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvRGlzcGxheU10bC5oIgpAQCAtMjQsNiArMjYsOCBAQCBuYW1lc3BhY2UgcngKIG5hbWVz
cGFjZSBtdGwKIHsKIAorY29uc3RleHByIGNoYXIga0FOR0xFUHJpbnRNU0xFbnZbXSA9ICJBTkdM
RV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKwogbmFtZXNwYWNlCiB7CiAKQEAgLTEwMywyNCAr
MTA3LDQzIEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKIHsKICAgICBBU1NFUlQodGV4dHVy
ZSAmJiB0ZXh0dXJlLT52YWxpZCgpKTsKLSAgICAvLyBPbmx5IG9uZSBzbGljZSBjYW4gYmUgaW5p
dGlhbGl6ZWQgYXQgYSB0aW1lLgotICAgIEFTU0VSVCghaW5kZXguaXNMYXllcmVkKCkgfHwgaW5k
ZXguZ2V0VHlwZSgpID09IGdsOjpUZXh0dXJlVHlwZTo6XzNEKTsKICAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwogCisgICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmYWN0dWFsQW5nbGVGb3JtYXQgICAgICAgICAgID0gdGV4dHVyZU9iakZvcm1hdC5hY3R1
YWxBbmdsZUZvcm1hdCgpOwogICAgIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmaW50ZW5kZWRJ
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmVPYmpGb3JtYXQuaW50ZW5kZWRJbnRlcm5hbEZvcm1hdCgp
OwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gbWFueSBwbGFjZXMgdG8gaW5p
dGlhbGl6ZSB0aGUgY29udGVudCBvZiBhIHRleHR1cmUuCi0gICAgLy8gU28gaXQncyBiZXR0ZXIg
d2UgZG8gdGhlIGluaXRpYWwgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIGxldCB0aGUgY2FsbGVycyBk
byBpdCB0aGVtc2VsdmVzOgotICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52YWxpZCgpIHx8IGlu
dGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3NlZCkKKyAgICAvLyBTbyBpdCdzIGJldHRlciB3
ZSBkbyB0aGUgc2FuaXR5IGNoZWNrIGhlcmUgaW5zdGVhZCBvZiBsZXQgdGhlIGNhbGxlcnMgZG8g
aXQgdGhlbXNlbHZlczoKKyAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBhY3R1
YWxBbmdsZUZvcm1hdC5pc0Jsb2NrIHx8IGFjdHVhbEFuZ2xlRm9ybWF0LmRlcHRoQml0cyA+IDAg
fHwKKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMgPiAwKQogICAgIHsKKyAg
ICAgICAgLy8gSWYgZHN0IGZvcm1hdCBpcyBjb21wcmVzc2VkLCBpZ25vcmUuCiAgICAgICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9CiAKICAgICBnbDo6RXh0ZW50cyBz
aXplID0gdGV4dHVyZS0+c2l6ZShpbmRleCk7CiAKLSAgICAvLyBJbnRpaWFsaXplIHRoZSBjb250
ZW50IHRvIGJsYWNrCi0gICAgR0xpbnQgbGF5ZXIsIHN0YXJ0RGVwdGg7Ci0gICAgR2V0U2xpY2VB
bmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnREZXB0aCk7CisgICAgLy8gSW50aWFsaXplIHRo
ZSBjb250ZW50IHRvIGJsYWNrCisgICAgR0xpbnQgbGF5ZXIgICAgICA9IDA7CisgICAgR0xpbnQg
c3RhcnREZXB0aCA9IDA7CisgICAgaWYgKGluZGV4Lmhhc0xheWVyKCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBn
bDo6VGV4dHVyZVR5cGU6OkN1YmVNYXA6CisgICAgICAgICAgICAgICAgbGF5ZXIgPSBpbmRleC5j
dWJlTWFwRmFjZUluZGV4KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXk6CisgICAgICAgICAgICAgICAgbGF5ZXIgPSBp
bmRleC5nZXRMYXllckluZGV4KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6XzNEOgorICAgICAgICAgICAgICAgIHN0YXJ0RGVwdGgg
PSBpbmRleC5nZXRMYXllckluZGV4KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAodGV4dHVyZS0+aXNDUFVB
Y2Nlc3NpYmxlKCkgJiYgaW5kZXguZ2V0VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVs
dGlzYW1wbGUgJiYKICAgICAgICAgaW5kZXguZ2V0VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6
XzJETXVsdGlzYW1wbGVBcnJheSkKQEAgLTEzNiw2ICsxNTksMTMgQEAgYW5nbGU6OlJlc3VsdCBJ
bml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
T2JqRm9ybWF0LnZhbGlkKCkgfHwgaW50ZW5kZWRJbnRlcm5hbEZvcm1hdC5jb21wcmVzc2VkIHx8
CisgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRlcm5hbEZvcm1hdC5kZXB0aEJpdHMgPiAwIHx8
IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNpbEJpdHMgPiAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIC8vIElmIHNvdXJjZSBmb3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3Jl
LgorICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0g
YW5nbGU6OkZvcm1hdDo6R2V0KAogICAgICAgICAgICAgICAgIGludGVuZGVkSW50ZXJuYWxGb3Jt
YXQuYWxwaGFCaXRzID4gMCA/IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhbmdsZTo6
Rm9ybWF0SUQ6OlI4RzhCOF9VTk9STSk7CkBAIC0xNjIsMTAgKzE5MiwxMCBAQCBhbmdsZTo6UmVz
dWx0IEluaXRpYWxpemVUZXh0dXJlQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAKICAgICAgICAgICAgICAgICAvLyBVcGxvYWQgdG8gdGV4dHVyZQogICAgICAgICAgICAgICAg
IHRleHR1cmUtPnJlcGxhY2UyRFJlZ2lvbihjb250ZXh0TXRsLCBtdGxSb3dSZWdpb24sIGluZGV4
LmdldE5hdGl2ZUxldmVsKCksIGxheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJzaW9uUm93LmRhdGEoKSwgZHN0Um93UGl0Y2gpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvblJvdy5kYXRhKCksIGRzdFJv
d1BpdGNoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KKyAgICB9ICAvLyBpZiAo
dGV4dHVyZS0+aXNDUFVBY2Nlc3NpYmxlKCkpCiAgICAgZWxzZQogICAgIHsKICAgICAgICAgQU5H
TEVfVFJZKEluaXRpYWxpemVUZXh0dXJlQ29udGVudHNHUFUoY29udGV4dCwgdGV4dHVyZSwgdGV4
dHVyZU9iakZvcm1hdCwgaW5kZXgsCkBAIC0yMTAsNyArMjQwLDcgQEAgYW5nbGU6OlJlc3VsdCBJ
bml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgIFJlbmRlclRhcmdldE10bCB0ZW1wUnR0OwogICAgIHRlbXBSdHQuc2V0KHRleHR1cmUsIGlu
ZGV4LmdldE5hdGl2ZUxldmVsKCksIHNsaWNlT3JEZXB0aCwgdGV4dHVyZU9iakZvcm1hdCk7CiAK
LSAgICBpbnQgY2xlYXJBbHBoYSA9IDA7CisgICAgZmxvYXQgY2xlYXJBbHBoYSA9IDA7CiAgICAg
aWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVkQW5nbGVGb3JtYXQoKS5hbHBoYUJpdHMpCiAg
ICAgewogICAgICAgICAvLyBpZiBpbnRlbmRlZCBmb3JtYXQgZG9lc24ndCBoYXZlIGFscGhhLCBz
ZXQgaXQgdG8gMS4wLgpAQCAtMjQwLDExICsyNzAsMTEgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICBDbGVhckNvbG9yVmFsdWUgY2xlYXJDb2xvcjsKICAgICAgICAgaWYgKGFuZ2xlRm9ybWF0Lmlz
U2ludCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzSW50KDAsIDAs
IDAsIGNsZWFyQWxwaGEpOworICAgICAgICAgICAgY2xlYXJDb2xvci5zZXRBc0ludCgwLCAwLCAw
LCAoaW50KWNsZWFyQWxwaGEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGFuZ2xlRm9y
bWF0LmlzVWludCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzVUlu
dCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKyAgICAgICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50
KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAg
ICAgICB7CkBAIC0yODMsMTcgKzMxMywxNyBAQCBhbmdsZTo6UmVzdWx0IEluaXRpYWxpemVEZXB0
aFN0ZW5jaWxUZXh0dXJlQ29udGVudHNHUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleAogICAg
IHJwRGVzYy5zYW1wbGVDb3VudCA9IHRleHR1cmUtPnNhbXBsZXMoKTsKICAgICBpZiAoYW5nbGVG
b3JtYXQuZGVwdGhCaXRzKQogICAgIHsKLSAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC50
ZXh0dXJlICAgICAgPSB0ZXh0dXJlOwotICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50Lmxl
dmVsICAgICAgICA9IGxldmVsOwotICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnNsaWNl
T3JEZXB0aCA9IGxheWVyOworICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRh
cmdldC0+dGV4dHVyZSAgICAgID0gdGV4dHVyZTsKKyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNo
bWVudC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAgICA9IGxldmVsOworICAgICAgICBycERlc2Mu
ZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7CiAgICAg
ICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNs
ZWFyOwogICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsK
ICAgICB9CiAgICAgaWYgKGFuZ2xlRm9ybWF0LnN0ZW5jaWxCaXRzKQogICAgIHsKLSAgICAgICAg
cnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUgICAgICA9IHRleHR1cmU7Ci0gICAgICAg
IHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sZXZlbCAgICAgICAgPSBsZXZlbDsKLSAgICAgICAg
cnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAgICBy
cERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT50ZXh0dXJlICAgICAgPSB0ZXh0
dXJlOworICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5sZXZl
bCAgICAgICAgPSBsZXZlbDsKKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRl
clRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7CiAgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0
YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xlYXI7CiAgICAgfQogCkBAIC00
NTYsNiArNDg2LDMwIEBAIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJM
aWJyYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsCiAgICAgcmV0dXJuIENyZWF0ZVNoYWRl
ckxpYnJhcnkobWV0YWxEZXZpY2UsIHNvdXJjZS5jX3N0cigpLCBzb3VyY2Uuc2l6ZSgpLCBlcnJv
cik7CiB9CiAKKyNpZiAwCitzdGF0aWMgTVRMTGFuZ3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBw
b3J0ZWRNU0xWZXJzaW9uKCkKK3sKKyAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20v
ZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxsYW5ndWFnZXZlcnNpb24/bGFuZ3VhZ2U9b2JqYworICAg
IGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDExLjAsIDE0LjAsIDE0LjApKQorICAgICAg
ICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8zOworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJ
TEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMy4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdl
VmVyc2lvbjJfMjsKKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMu
MCwgMTIuMCkpCisgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24yXzE7CisgICAgaWYg
KEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTMsIDEzLjAsIDExLjApKQorICAgICAgICBy
ZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8wOworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFC
TEVfWENJKDEwLjEyLCAxMy4wLCAxMC4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVy
c2lvbjFfMjsKKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xMSwgMTMuMCwg
OS4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjFfMTsKKyMgICAgaWYgVEFS
R0VUX09TX0lPUworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSg5LjApKQorICAgICAg
ICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8wOworIyAgICBlbmRpZgorICAgIHJldHVybiBN
VExMYW5ndWFnZVZlcnNpb24xXzE7Cit9CisjZW5kaWYKKwogQXV0b09iakNQdHI8aWQ8TVRMTGli
cmFyeT4+IENyZWF0ZVNoYWRlckxpYnJhcnkoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBzb3VyY2VMZW4sCkBAIC00NjksOCArNTIzLDI1IEBAIEF1dG9PYmpDUHRyPGlkPE1U
TExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXTsKICAgICAgICAgYXV0byBvcHRp
b25zICAgICA9IFtbW01UTENvbXBpbGVPcHRpb25zIGFsbG9jXSBpbml0XSBBTkdMRV9NVExfQVVU
T1JFTEVBU0VdOworICAgICAgICAvLyBNYXJrIGFsbCBwb3NpdGlvbnMgaW4gVlMgd2l0aCBhdHRy
aWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6YWJsZQorI2lmIChkZWZpbmVkKF9fTUFDXzEx
XzApICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX01BQ18xMV8wKSB8fCAg
ICAgICAgXAorICAgIChkZWZpbmVkKF9fSVBIT05FXzE0XzApICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gX19JUEhPTkVfMTRfMCkgfHwgXAorICAgIChkZWZpbmVkKF9fVFZP
U18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19UVk9TXzE0XzApCisg
ICAgICAgIG9wdGlvbnMucHJlc2VydmVJbnZhcmlhbmNlID0gdHJ1ZTsKKyNlbHNlCisgICAgICAg
IC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFpbGFibGUgY29tcGlsaW5nIGZyb20gc291cmNl
LCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisgICAgICAgIG9wdGlvbnMuZmFzdE1hdGhFbmFi
bGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgLy8gVE9ETyhqY3VubmluZ2hhbSk6IHdvcmth
cm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJlc2VydmluZyBpbnZhcmlhbmNlIG9uIGFsbCBz
aGFkZXJzCisgICAgICAgIGlmIChbbWV0YWxEZXZpY2UubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50
ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRp
b25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGF1dG8gbGli
cmFyeSA9IFttZXRhbERldmljZSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTpuc1NvdXJjZSBvcHRpb25z
Om9wdGlvbnMgZXJyb3I6Jm5zRXJyb3JdOwotCisgICAgICAgIGlmIChhbmdsZTo6R2V0RW52aXJv
bm1lbnRWYXIoa0FOR0xFUHJpbnRNU0xFbnYpWzBdID09ICcxJykKKyAgICAgICAgeworICAgICAg
ICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2UpOworICAgICAgICB9CiAgICAgICAgIFtuc1Nv
dXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOwogCiAgICAgICAgICplcnJvck91dCA9IHN0ZDo6
bW92ZShuc0Vycm9yKTsKQEAgLTc3MiwxNSArODQzLDE1IEBAIE1UTFRleHR1cmVTd2l6emxlIEdl
dFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6emxlKQogfQogI2VuZGlmCiAKLU1UTENvbG9yV3Jp
dGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZv
cm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91dCkKK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVk
Q29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqZW11bGF0
ZWRDaGFubmVsc091dCkKIHsKICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1h
dCA9IG10bEZvcm1hdC5pbnRlbmRlZEFuZ2xlRm9ybWF0KCk7CiAgICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmYWN0dWFsRm9ybWF0ICAgPSBtdGxGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKLSAg
ICBib29sIGlzRm9ybWF0RW11bGF0ZWQgICAgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wg
ZW11bGF0ZWRDaGFubmVscyAgICAgICAgICAgICAgID0gZmFsc2U7CiAgICAgTVRMQ29sb3JXcml0
ZU1hc2sgY29sb3JXcml0YWJsZU1hc2sgPSBNVExDb2xvcldyaXRlTWFza0FsbDsKICAgICBpZiAo
aW50ZW5kZWRGb3JtYXQuYWxwaGFCaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LmFscGhhQml0cykK
ICAgICB7Ci0gICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworICAgICAgICBlbXVsYXRl
ZENoYW5uZWxzID0gdHJ1ZTsKICAgICAgICAgLy8gRGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlz
IHRleHR1cmUKICAgICAgICAgY29sb3JXcml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAm
ICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSk7CiAgICAgfQpAQCAtNzg4LDQxICs4NTksNDEgQEAg
TVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZv
cm1hdCAmbXRsRm9ybWF0LCBib29sICoKICAgICB7CiAgICAgICAgIGlmIChpbnRlbmRlZEZvcm1h
dC5yZWRCaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LnJlZEJpdHMpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgZW11bGF0ZWRDaGFu
bmVscyA9IHRydWU7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRl
eHR1cmUKICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sg
JiAofk1UTENvbG9yV3JpdGVNYXNrUmVkKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50ZW5k
ZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LmdyZWVuQml0cykKICAgICAg
ICAgewotICAgICAgICAgICAgaXNGb3JtYXRFbXVsYXRlZCA9IHRydWU7CisgICAgICAgICAgICBl
bXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIERpc2FibGUgZ3JlZW4gd3Jp
dGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9y
V3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFza0dyZWVuKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYmx1ZUJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYmx1
ZUJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRydWU7CiAgICAgICAgICAgICAvLyBEaXNh
YmxlIGJsdWUgd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgICAgICBjb2xvcldyaXRhYmxl
TWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFza0JsdWUpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgKmlzRW11bGF0ZWRPdXQgPSBpc0Zvcm1hdEVtdWxhdGVkOwor
ICAgICplbXVsYXRlZENoYW5uZWxzT3V0ID0gZW11bGF0ZWRDaGFubmVsczsKIAogICAgIHJldHVy
biBjb2xvcldyaXRhYmxlTWFzazsKIH0KIAogTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0KQogewotICAgIC8vIEln
bm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4gdmFsdWUKLSAgICBib29sIGlzRm9ybWF0RW11
bGF0ZWQ7Ci0gICAgcmV0dXJuIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAm
aXNGb3JtYXRFbXVsYXRlZCk7CisgICAgLy8gSWdub3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVh
biB2YWx1ZQorICAgIGJvb2wgZW11bGF0ZWRDaGFubmVsczsKKyAgICByZXR1cm4gR2V0RW11bGF0
ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZlbXVsYXRlZENoYW5uZWxzKTsKIH0KIAogYm9v
bCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpCiB7Ci0gICAg
Ym9vbCBpc0Zvcm1hdEVtdWxhdGVkOwotICAgICh2b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1h
c2sobXRsRm9ybWF0LCAmaXNGb3JtYXRFbXVsYXRlZCk7Ci0gICAgcmV0dXJuIGlzRm9ybWF0RW11
bGF0ZWQ7CisgICAgYm9vbCBlbXVsYXRlZENoYW5uZWxzOworICAgICh2b2lkKUdldEVtdWxhdGVk
Q29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmZW11bGF0ZWRDaGFubmVscyk7CisgICAgcmV0dXJu
IGVtdWxhdGVkQ2hhbm5lbHM7CiB9CiAKIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFy
Q29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQpA
QCAtODM3LDYgKzkwOCwyOTUgQEAgTVRMQ2xlYXJDb2xvciBFbXVsYXRlZEFscGhhQ2xlYXJDb2xv
cihNVExDbGVhckNvbG9yIGNvbG9yLCBNVExDb2xvcldyaXRlTWFzayBjb2wKICAgICByZXR1cm4g
cmU7CiB9CiAKK05TVUludGVnZXIgR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0
ZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgaWYgKFN1cHBvcnRzSU9TR1BVRmFtaWx5
KGRldmljZSwgNCkpCisgICAgeworICAgICAgICByZXR1cm4gNjQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKFN1cHBvcnRzSU9TR1BVRmFtaWx5KGRldmljZSwgMikpCisgICAgeworICAgICAgICByZXR1
cm4gMzI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAxNjsKKyAgICB9
Cit9CisKK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGlmIChTdXBwb3J0c0lPU0dQVUZhbWlseShkZXZp
Y2UsIDIpfHxTdXBwb3J0c01hY0dQVUZhbWlseShkZXZpY2UsIDEpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiA0OworICAg
IH0KK30KKworYm9vbCBEZXZpY2VIYXNNYXhpbXVtUmVuZGVyVGFyZ2V0U2l6ZShpZDxNVExEZXZp
Y2U+IGRldmljZSkKK3sKKyAgICAgICAgcmV0dXJuIFN1cHBvcnRzSU9TR1BVRmFtaWx5KGRldmlj
ZSwgMSk7Cit9CisKK2Jvb2wgU3VwcG9ydHNJT1NHUFVGYW1pbHkoaWQ8TVRMRGV2aWNlPiBkZXZp
Y2UsIHVpbnQ4X3QgaU9TRmFtaWx5KQoreworI2lmICghVEFSR0VUX09TX0lPUyAmJiAhVEFSR0VU
X09TX1RWKSB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorIyAgICBpZiAoX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAwMDApIHx8
IChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQorICAgIC8vIElmIGRldmlj
ZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlIGl0LgorICAg
IGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSgxMy4wKSkKKyAgICB7CisgICAgICAgIE1UTEdQ
VUZhbWlseSBmYW1pbHk7CisgICAgICAgIHN3aXRjaCAoaU9TRmFtaWx5KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5
QXBwbGUxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlMjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBN
VExHUFVGYW1pbHlBcHBsZTM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU0OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAg
IGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyMg
ICAgICAgIGlmIFRBUkdFVF9PU19JT1MKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAg
ICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTY7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisjICAgICAgICBlbmRpZgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNG
YW1pbHk6ZmFtaWx5XTsKKyAgICB9ICAvLyBNZXRhbCAyLjIKKyMgICAgZW5kaWYgIC8vIF9fSVBI
T05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQKKworICAgIC8vIElmIGRldmljZSBkb2Vzbid0IHN1
cHBvcnQgW01UTERldmljZSBzdXBwb3J0c0ZhbWlseTpdLCB0aGVuIHVzZQorICAgIC8vIFtNVExE
ZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0Ol0uCisgICAgTVRMRmVhdHVyZVNldCBmZWF0dXJlU2V0
OworICAgIHN3aXRjaCAoaU9TRmFtaWx5KQorICAgIHsKKyMgICAgaWYgVEFSR0VUX09TX0lPUwor
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF9p
T1NfR1BVRmFtaWx5MV92MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF9pT1NfR1BVRmFtaWx5Ml92MTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBmZWF0dXJl
U2V0ID0gTVRMRmVhdHVyZVNldF9pT1NfR1BVRmFtaWx5M192MTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNl
dF9pT1NfR1BVRmFtaWx5NF92MTsKKyAgICAgICAgICAgIGJyZWFrOworIyAgICAgICAgaWYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMjAwMDAKKyAgICAgICAgY2FzZSA1Ogor
ICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTVfdjE7
CisgICAgICAgICAgICBicmVhazsKKyMgICAgICAgIGVuZGlmICAvLyBfX0lQSE9ORV9PU19WRVJT
SU9OX01BWF9BTExPV0VECisjICAgIGVsaWYgVEFSR0VUX09TX1RWCisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRf
dHZPU19HUFVGYW1pbHkxX3YxOworICAgICAgICAgICAgYnJlYWs7CisjICAgICAgICBpZiBfX1RW
X09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTEwMDAwCisgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X3R2T1NfR1BVRmFtaWx5Ml92MTsKKyAg
ICAgICAgICAgIGJyZWFrOworIyAgICAgICBlbmRpZiAvLyBfX1RWX09TX1ZFUlNJT05fTUFYX0FM
TE9XRUQKKyMgICAgZW5kaWYgIC8vIFRBUkdFVF9PU19JT1MKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gW2RldmljZSBzdXBw
b3J0c0ZlYXR1cmVTZXQ6ZmVhdHVyZVNldF07CisjZW5kaWYgICAgICAvLyBUQVJHRVRfT1NfSU9T
IHx8IFRBUkdFVF9PU19UVgorfQorCitib29sIFN1cHBvcnRzTWFjR1BVRmFtaWx5KGlkPE1UTERl
dmljZT4gZGV2aWNlLCB1aW50OF90IG1hY0ZhbWlseSkKK3sKKyNpZiBUQVJHRVRfT1NfT1NYIHx8
IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorIyAgICBpZiBkZWZpbmVkKF9fTUFDXzEwXzE1KQorICAg
IC8vIElmIGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4g
dXNlIGl0LgorICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMoMTAuMTUsIDEzLjApKQor
ICAgIHsKKyAgICAgICAgTVRMR1BVRmFtaWx5IGZhbWlseTsKKworICAgICAgICBzd2l0Y2ggKG1h
Y0ZhbWlseSkKKyAgICAgICAgeworIyAgICAgICAgaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisg
ICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5
TWFjQ2F0YWx5c3QxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAy
OgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseU1hY0NhdGFseXN0MjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyMgICAgICAgIGVsc2UgICAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExH
UFVGYW1pbHlNYWMxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAy
OgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseU1hYzI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisjICAgICAgICBlbmRpZiAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07Cisg
ICAgfSAgLy8gTWV0YWwgMi4yCisjICAgIGVuZGlmCisKKyAgICAvLyBJZiBkZXZpY2UgZG9lc24n
dCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKKyAgICAvLyBb
TVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgorIyAgICBpZiBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKKyMgICAgZWxzZQor
ICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKKyAgICBzd2l0Y2ggKG1hY0ZhbWlseSkKKyAg
ICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJl
U2V0X21hY09TX0dQVUZhbWlseTFfdjE7CisgICAgICAgICAgICBicmVhazsKKyMgICAgICAgIGlm
IGRlZmluZWQoX19NQUNfMTBfMTQpCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGZlYXR1
cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTJfdjE7CisgICAgICAgICAgICBi
cmVhazsKKyMgICAgICAgIGVuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpm
ZWF0dXJlU2V0XTsKKyMgICAgZW5kaWYgIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVAorI2Vsc2Ug
ICAgICAgLy8gI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisKKyAg
ICByZXR1cm4gZmFsc2U7CisKKyNlbmRpZgorfQorCitzdGF0aWMgTlNVSW50ZWdlciBnZXROZXh0
TG9jYXRpb25Gb3JGb3JtYXQoY29uc3QgRm9ybWF0Q2FwcyAmY2FwcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzTVNBQSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJn
ZXRTaXplKQoreworICAgIGFzc2VydCghY2Fwcy5jb21wcmVzc2VkKTsKKyAgICB1aW50OF90IGFs
aWdubWVudCAgICAgICAgID0gY2Fwcy5hbGlnbm1lbnQ7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5
dGVzICAgICA9IGNhcHMucGl4ZWxCeXRlczsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNNU0FB
ID0gY2Fwcy5waXhlbEJ5dGVzTVNBQTsKKyAgICBwaXhlbEJ5dGVzICAgICAgICAgICAgICAgID0g
aXNNU0FBID8gcGl4ZWxCeXRlc01TQUEgOiBwaXhlbEJ5dGVzOworCisgICAgY3VycmVudFJlbmRl
clRhcmdldFNpemUgPSAoY3VycmVudFJlbmRlclRhcmdldFNpemUgKyAoYWxpZ25tZW50IC0gMSkp
ICYgfihhbGlnbm1lbnQgLSAxKTsKKyAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArPSBwaXhl
bEJ5dGVzOworICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKK30KKworTlNVSW50
ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0
IE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpkZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRleHQgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgTlNVSW50ZWdlciBjdXJyZW50
UmVuZGVyVGFyZ2V0U2l6ZSA9IDA7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBH
ZXRNYXhOdW1iZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UoZGV2aWNlKTsgaSsrKQorICAgIHsK
KyAgICAgICAgTVRMUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQgPSBkZXNjcmlwdG9yLmNvbG9yQXR0
YWNobWVudHNbaV0udGV4dHVyZS5waXhlbEZvcm1hdDsKKyAgICAgICAgYm9vbCBpc01zYWEgICAg
ICAgICAgICAgICAgPSBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5zYW1w
bGVDb3VudCA+IDE7CisgICAgICAgIGlmIChwaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdElu
dmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPSBj
b250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMocGl4ZWxGb3JtYXQpOwor
ICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdl
dE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRT
aXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1l
bnQudGV4dHVyZS5waXhlbEZvcm1hdCA9PQorICAgICAgICBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRh
Y2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpCisgICAgeworICAgICAgICBib29sIGlzTXNhYSA9
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworICAg
ICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCAh
PSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEZv
cm1hdENhcHMgJmNhcHMgPSBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENh
cHMoCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5w
aXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAg
ICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVu
dFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBp
c01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUuc2Ft
cGxlQ291bnQgPiAxOworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRl
eHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcygKKyAgICAgICAgICAgICAgICBk
ZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0KTsKKyAgICAgICAg
ICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9j
YXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVy
ZS5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgPSBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2ht
ZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2Fw
cyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcygKKyAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUucGl4ZWxG
b3JtYXQpOworICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAg
ICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5k
ZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY3VycmVudFJlbmRl
clRhcmdldFNpemU7Cit9CitOU1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKAorICAgIGNvbnN0IE1UTFJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciAqZGVzY3JpcHRvciwKKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorICAgIGlkPE1U
TERldmljZT4gZGV2aWNlKQoreworICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRhcmdldFNp
emUgPSAwOworICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgICAgICAgICAgPSBkZXNjcmlw
dG9yLnNhbXBsZUNvdW50ID4gMTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBHZXRN
YXhOdW1iZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UoZGV2aWNlKTsgaSsrKQorICAgIHsKKyAg
ICAgICAgTVRMUmVuZGVyUGlwZWxpbmVDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpjb2xvciA9
IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXTsKKyAgICAgICAgaWYgKGNvbG9yLnBpeGVs
Rm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZl
Rm9ybWF0Q2Fwcyhjb2xvci5waXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVy
VGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNh
cHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9CisgICAgfQor
ICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ID09IGRlc2NyaXB0
b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIGlmIChkZXNj
cmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxp
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3VycmVu
dFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZv
cm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFj
aG1lbnRQaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLmRlcHRoQXR0
YWNobWVudFBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXpl
ID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2Fh
LCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFs
aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPQorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhk
ZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3Vy
cmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZv
ckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gY3VycmVudFJlbmRlclRhcmdldFNpemU7Cit9CisKIGdsOjpC
b3ggTVRMUmVnaW9uVG9HTEJveChjb25zdCBNVExSZWdpb24gJm10bFJlZ2lvbikKIHsKICAgICBy
ZXR1cm4gZ2w6OkJveChzdGF0aWNfY2FzdDxpbnQ+KG10bFJlZ2lvbi5vcmlnaW4ueCksIHN0YXRp
Y19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi55KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0
YWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy9ibGl0Lm1ldGFsCmluZGV4IDQyNzJjNGYwYTg0ODAwOWE2MzJkNGFlYmM1ZmFjMWQ0
NDdmZmMyZDcuLjJhOWJiNWRlMzc0NmMyY2RhY2YzMWYyZWIxMmE0OWEzMzExMzczMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2JsaXQubWV0YWwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbApAQCAtMzM0LDcgKzMzNCw3
IEBAIGtlcm5lbCB2b2lkIGJsaXRTdGVuY2lsVG9CdWZmZXJDUyh1c2hvcnQyIGdJbmRpY2VzIFtb
dGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKIH0KIAogLy8gRnJhZ21lbnQncyBzdGVuY2lsIG91
dHB1dCBpcyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBNZXRhbCAyLjEKLUBAI2lmIF9fTUVUQUxfVkVS
U0lPTl9fID49IDIxMAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fID49IDIxMAogCiBzdHJ1Y3QgRnJh
Z21lbnRTdGVuY2lsT3V0CiB7CkBAIC0zOTcsNCArMzk3LDQgQEAgZnJhZ21lbnQgRnJhZ21lbnRE
ZXB0aFN0ZW5jaWxPdXQgYmxpdERlcHRoU3RlbmNpbEZTKAogICAgICAgICAgICAgICAgICAgICAg
IHNyY1N0ZW5jaWxUZXh0dXJlQ3ViZSwgaW5wdXQudGV4Q29vcmRzLCBvcHRpb25zLnNyY0xldmVs
LCBvcHRpb25zLnNyY0xheWVyKTsKICAgICByZXR1cm4gcmU7CiB9Ci1AQCNlbmRpZiAgLy8gX19N
RVRBTF9WRVJTSU9OX18gPj0gMjEwCisjZW5kaWYgIC8vIF9fTUVUQUxfVkVSU0lPTl9fID49IDIx
MApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaAppbmRleCA2OGM3NzQ1Mzcy
YmRmZmU5YThmOTU5ODE5YmVmOTM2MWFmZmFhY2EwLi5lNjY3M2I1ZGJkZjAxZDQ2OTliNmZmMjlk
Mjg2MTBiYWJlMTRjZjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24u
aApAQCAtMTAsOCArMTAsOCBAQAogCiAvLyBjbGFuZy1mb3JtYXQgb2ZmCiAjaWZuZGVmIFNLSVBf
U1REX0hFQURFUlMKLUBAIyAgICBpbmNsdWRlIDxzaW1kL3NpbWQuaD4KLUBAIyAgICBpbmNsdWRl
IDxtZXRhbF9zdGRsaWI+CisjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgorIyAgICBpbmNsdWRl
IDxtZXRhbF9zdGRsaWI+CiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbnN0YW50cy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L3NoYWRlcnMvY29weV9idWZmZXIubWV0YWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAppbmRleCBk
ZjdjNGM5NjI1ZjI3NzAxMGJiMDYxMDhhMGRlMzFlYzc5NWVmMjU1Li4xYjQwOGQ4ODkyNGEwM2Jj
N2QwYmRhZDZmYmI0M2E2Njk4YzkyZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRh
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbApAQCAtNCwyMiArNCwyMiBAQAogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAvLyBjb3B5X2J1ZmZlci5tZXRhbDogaW1wbGVtZW50
cyBjb21wdXRlIHNoYWRlciB0aGF0IGNvcHkgZm9ybWF0dGVkIGRhdGEgZnJvbSBidWZmZXIgdG8g
dGV4dHVyZSwKLS8vIGFuZCBmcm9tIHRleHR1cmUgdG8gYnVmZmVyLgorLy8gZnJvbSB0ZXh0dXJl
IHRvIGJ1ZmZlciBhbmQgZnJvbSBidWZmZXIgdG8gYnVmZmVyLgogLy8gTk9URShocWxlKTogVGhp
cyBmaWxlIGlzIGEgYml0IGhhcmQgdG8gcmVhZCBidXQgdGhlcmUgYXJlIGEgbG90IG9mIHJlcGVh
dGVkIHdvcmtzLCBhbmQgaXQgd291bGQKIC8vIGJlIGEgcGFpbiB0byBpbXBsZW1lbnQgd2l0aG91
dCB0aGUgdXNlIG9mIG1hY3Jvcy4KIC8vCiAKLUBAI2luY2x1ZGUgPG1ldGFsX3BhY2s+CisjaW5j
bHVkZSA8bWV0YWxfcGFjaz4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImZvcm1h
dF9hdXRvZ2VuLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSByeDo6bXRsX3NoYWRlcjsKIAotY29uc3Rh
bnQgaW50IGtDb3B5Rm9ybWF0VHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDEwKV1dOworY29uc3Rh
bnQgaW50IGtDb3B5Rm9ybWF0VHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDEpXV07CiAKIC8qIC0t
LS0tLS0tIGNvcHkgcGl4ZWwgZGF0YSBiZXR3ZWVuIGJ1ZmZlciBhbmQgdGV4dHVyZSAtLS0tLS0t
LS0qLwotY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFudCgy
MCldXTsKK2NvbnN0YW50IGludCBrQ29weVRleHR1cmVUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQo
MildXTsKIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJlVHlwZTJEICAgICAgPSBrQ29weVRleHR1
cmVUeXBlID09IGtUZXh0dXJlVHlwZTJEOwogY29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBl
MkRBcnJheSA9IGtDb3B5VGV4dHVyZVR5cGUgPT0ga1RleHR1cmVUeXBlMkRBcnJheTsKIGNvbnN0
YW50IGJvb2wga0NvcHlUZXh0dXJlVHlwZTJETVMgICAgPSBrQ29weVRleHR1cmVUeXBlID09IGtU
ZXh0dXJlVHlwZTJETXVsdGlzYW1wbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3No
YWRlcnMvZm9ybWF0X2F1dG9nZW4uaAppbmRleCBhMTdlYWQzNGI4ZDllNGE0ZjYyMzljMzhmYTY5
ZjhhODdjNDA1NmM0Li5iOTkxZTQ4ZjZhN2RmYzRkMjllOTRjOGE5YzY4MGQyNzVkMGNlMzVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgK
QEAgLTI0NSw1ICsyNDUsNSBAQCBlbnVtCiAKIH0KIAotfSAgLy8gbmFtZXNwYWNlIG10bF9zaGFk
ZXIKLX0gIC8vIG5hbWVzcGFjZSByeAorfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX2luZGljZXMu
bWV0YWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9nZW5faW5kaWNlcy5tZXRhbAppbmRleCAyZDgzNTNiYWFjZGI4MmUxMzQ4ZDEy
MDZhZjQzMmVmZTUwZjkyMzQ2Li5lZWQ2MWVhODNiZDYzOTljMTUzZDAyZjdlNjRiYzk5ZWU4ZjA0
ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNlcy5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNl
cy5tZXRhbApAQCAtNTYsMTAgKzU2LDEwIEBAIGlubGluZSB1aW50IGdldEluZGV4VW5hbGlnbmVk
VTMyKGNvbnN0YW50IHVjaGFyICppbnB1dCwgdWludCBvZmZzZXQsIHVpbnQgaWR4KQogICAgIHJl
dHVybiBpbnB1dDAgfCAoaW5wdXQxIDw8IDgpIHwgKGlucHV0MiA8PCAxNikgfCAoaW5wdXQzIDw8
IDI0KTsKIH0KIAota2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1UxNih1aW50IGlkeFtbdGhy
ZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0W1tidWZm
ZXIoMSldXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVzaG9ydCAq
b3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWlu
dCBpZHggW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZm
ZXIoMCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIg
KmlucHV0IFtbYnVmZmVyKDEpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
dmljZSB1c2hvcnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05W
RVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9ucyk7CiAKQEAgLTc1LDEyICs3NSwxMyBAQCBrZXJuZWwg
dm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3Jp
ZF1dLAogICAgIH0KIH0KIAota2VybmVsIHZvaWQgY29udmVydEluZGV4VTE2KAotICAgIHVpbnQg
aWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAgIGNvbnN0YW50IEluZGV4Q29udmVy
c2lvblBhcmFtcyAmb3B0aW9uc1tbYnVmZmVyKDApXV0sCi0gICAgY29uc3RhbnQgdWNoYXIgKmlu
cHV0W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyVW5hbGlnbmVk
KSBdXSwKLSAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0QWxpZ25lZFtbIGJ1ZmZlcigxKSwgZnVu
Y3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpIF1dLAotICAgIGRldmljZSB1c2hv
cnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCitrZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYodWlu
dCBpZHggW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigw
KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFu
dChrU291cmNlQnVmZmVyVW5hbGlnbmVkKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVkKV1d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB1c2hvcnQgKm91dHB1dCBbW2J1
ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9u
cyk7CiAKQEAgLTk2LDEyICs5NywxMyBAQCBrZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYoCiAg
ICAgb3V0cHV0W2lkeF0gPSB2YWx1ZTsKIH0KIAota2VybmVsIHZvaWQgY29udmVydEluZGV4VTMy
KAotICAgIHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAgIGNvbnN0YW50
IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9uc1tbYnVmZmVyKDApXV0sCi0gICAgY29uc3Rh
bnQgdWNoYXIgKmlucHV0W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVm
ZmVyVW5hbGlnbmVkKSBdXSwKLSAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWRbWyBidWZm
ZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVkKSBdXSwKLSAgICBk
ZXZpY2UgdWludCAqb3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRl
eFUzMih1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtb
YnVmZmVyKDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIg
KmlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9u
X2NvbnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnQgdWludCAqaW5wdXRBbGlnbmVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGln
bmVkKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB1aW50ICpvdXRwdXQg
W1tidWZmZXIoMildXSkKIHsKICAgICBBTkdMRV9JRFhfQ09OVkVSU0lPTl9HVUFSRChpZHgsIG9w
dGlvbnMpOwogCkBAIC0xNDAsOSArMTQyLDkgQEAga2VybmVsIHZvaWQgZ2VuVHJpRmFuSW5kaWNl
c0Zyb21BcnJheSh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCiAKIGlubGlu
ZSB1aW50IGdldEluZGV4VTMyKHVpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
dWludCBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRV
OFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNltbZnVuY3Rpb25fY29uc3RhbnQo
a1VzZVNvdXJjZUJ1ZmZlclUxNildXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
IHVpbnQgKmlucHV0VTMyW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1d
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0VTggW1tmdW5j
dGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2IFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNv
dXJjZUJ1ZmZlclUxNildXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQg
KmlucHV0VTMyIFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUzMildXSkKIHsK
ICAgICBpZiAoa1VzZVNvdXJjZUJ1ZmZlclU4KQogICAgIHsKQEAgLTE3MCwxMyArMTcyLDE1IEBA
IGlubGluZSB1aW50IGdldEluZGV4VTMyKHVpbnQgb2Zmc2V0LAogLy8gTk9URShocWxlKTogdHJp
YW5nbGUgZmFuIGluZGljZXMgZ2VuZXJhdGlvbiBkb2Vzbid0IHN1cHBvcnQgcHJpbWl0aXZlIHJl
c3RhcnQuCiAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4gaW5kaWNlcyBmcm9tIGFuIGluZGljZXMg
YnVmZmVyLiBpbmRleENvdW50IG9wdGlvbnMgaW5kaWNhdGVzIG51bWJlcgogLy8gb2YgaW5kaWNl
cyBzdGFydGluZyBmcm9tIHRoZSAzcmQuCi1rZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJv
bUVsZW1lbnRzKAotICAgIHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAg
IGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9uc1tbYnVmZmVyKDApXV0sCi0g
ICAgY29uc3RhbnQgdWNoYXIgKmlucHV0VThbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50
KGtVc2VTb3VyY2VCdWZmZXJVOCkgXV0sCi0gICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNltb
IGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUxNikgXV0sCi0g
ICAgY29uc3RhbnQgdWludCAqaW5wdXRVMzJbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50
KGtVc2VTb3VyY2VCdWZmZXJVMzIpIF1dLAotICAgIGRldmljZSB1aW50ICpvdXRwdXRbW2J1ZmZl
cigyKV1dKQora2VybmVsIHZvaWQgZ2VuVHJpRmFuSW5kaWNlc0Zyb21FbGVtZW50cyh1aW50IGlk
eCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBb
W2J1ZmZlcigwKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdGFudCB1Y2hhciAqaW5wdXRVOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4
KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1
c2hvcnQgKmlucHV0VTE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1aW50ICpp
bnB1dFUzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZl
cigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUzMildXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91dHB1dCBbW2J1
ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9u
cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1l
dGFsCmluZGV4IGIzYTM2NzVkOWU1ZGI5YjczNDkyN2I5MmNhN2RkNDcxMjdlNTlmNzcuLmYyMzM4
YjJmODJlMDU1NjJhNjhmNTVmN2ZiNWZkZjgwZmI1ZjlmNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9t
aXBtYXAubWV0YWwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbApAQCAtMjMsOCArMjMsNiBAQCB1
c2luZyBuYW1lc3BhY2Ugcng6Om10bF9zaGFkZXI7CiAKICNkZWZpbmUgVEVYRUxfTE9BRChpbmRl
eCkgZmxvYXQ0KHNSW2luZGV4XSwgc0dbaW5kZXhdLCBzQltpbmRleF0sIHNBW2luZGV4XSkKIAot
I2RlZmluZSBUT19MSU5FQVIodGV4ZWwpIChvcHRpb25zLnNSR0IgPyBzUkdCdG9MaW5lYXIodGV4
ZWwpIDogdGV4ZWwpCi0KICNkZWZpbmUgT1VUX09GX0JPVU5EX0NIRUNLKGVkZ2VWYWx1ZSwgdGFy
Z2V0VmFsdWUsIGNvbmRpdGlvbikgXAogICAgIChjb25kaXRpb24pID8gKGVkZ2VWYWx1ZSkgOiAo
dGFyZ2V0VmFsdWUpCiAKQEAgLTMyLDcgKzMwLDYgQEAgc3RydWN0IEdlbk1pcFBhcmFtcwogewog
ICAgIHVpbnQgc3JjTGV2ZWw7CiAgICAgdWludCBudW1NaXBMZXZlbHNUb0dlbjsKLSAgICBib29s
IHNSR0I7CiB9OwogCiAvLyBOT1RFKGhxbGUpOiBGb3IgbnVtTWlwTGV2ZWxzVG9HZW4gPiAxLCB0
aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHRleHR1cmUgaXMgcG93ZXIgb2YgdHdvLiBJZiBpdApA
QCAtNDYsOCArNDMsOCBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNETWlwbWFwcyh1aW50IGxJbmRl
eCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTNkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVy
ZSg0KV1dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFy
YW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0pCiB7Ci0gICAgdXNob3J0MyBtaXBTaXplICA9IHVz
aG9ydDMoZHN0TWlwMS5nZXRfd2lkdGgoKSwgZHN0TWlwMS5nZXRfaGVpZ2h0KCksIGRzdE1pcDEu
Z2V0X2RlcHRoKCkpOwotICAgIGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwU2l6
ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXBTaXplLnkgJiYgZ0luZGljZXMueiA8IG1pcFNpemUuejsK
KyAgICB1c2hvcnQzIG1pcFNpemUgICAgPSB1c2hvcnQzKGRzdE1pcDEuZ2V0X3dpZHRoKCksIGRz
dE1pcDEuZ2V0X2hlaWdodCgpLCBkc3RNaXAxLmdldF9kZXB0aCgpKTsKKyAgICBib29sIHZhbGlk
VGhyZWFkICAgPSBnSW5kaWNlcy54IDwgbWlwU2l6ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXBTaXpl
LnkgJiYgZ0luZGljZXMueiA8IG1pcFNpemUuejsKIAogICAgIGNvbnN0ZXhwciBzYW1wbGVyIHRl
eHR1cmVTYW1wbGVyKG1hZ19maWx0ZXI6OmxpbmVhciwgbWluX2ZpbHRlcjo6bGluZWFyLCBtaXBf
ZmlsdGVyOjpsaW5lYXIpOwogCkBAIC04MywxMCArODAsNiBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0
ZTNETWlwbWFwcyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAog
ICAgIC8vIC0tLS0gU2Vjb25kIG1pcCBsZXZlbCAtLS0tLS0tLQogCiAgICAgLy8gV3JpdGUgdG8g
c2hhcmVkIG1lbW9yeQotICAgIGlmIChvcHRpb25zLnNSR0IpCi0gICAgewotICAgICAgICB0ZXhl
bDEgPSBsaW5lYXJUb1NSR0IodGV4ZWwxKTsKLSAgICB9CiAgICAgVEVYRUxfU1RPUkUobEluZGV4
LCB0ZXhlbDEpOwogCiAgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJl
YWRncm91cCk7CkBAIC0xMTksNyArMTEyLDcgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1h
cHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKIAogICAgICAg
ICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsg
dGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKIAotICAgICAgICBkc3RNaXAyLndyaXRl
KFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAxKTsKKyAgICAgICAgZHN0TWlwMi53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDEpOwogCiAgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBt
ZW1vcnkKICAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOwpAQCAtMTY1LDcgKzE1
OCw3IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFk
X2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAKICAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRl
eGVsMiArIHRleGVsMyArIHRleGVsNCArIHRleGVsNSArIHRleGVsNiArIHRleGVsNyArIHRleGVs
OCkgLyA4LjA7CiAKLSAgICAgICAgZHN0TWlwMy53cml0ZShUT19MSU5FQVIodGV4ZWwxKSwgZ0lu
ZGljZXMgPj4gMik7CisgICAgICAgIGRzdE1pcDMud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAy
KTsKIAogICAgICAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5CiAgICAgICAgIFRFWEVMX1NU
T1JFKGxJbmRleCwgdGV4ZWwxKTsKQEAgLTIxMSw2ICsyMDQsMzQ4IEBAIGtlcm5lbCB2b2lkIGdl
bmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3Vw
XV0sCiAKICAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVs
NCArIHRleGVsNSArIHRleGVsNiArIHRleGVsNyArIHRleGVsOCkgLyA4LjA7CiAKLSAgICAgICAg
ZHN0TWlwNC53cml0ZShUT19MSU5FQVIodGV4ZWwxKSwgZ0luZGljZXMgPj4gMyk7CisgICAgICAg
IGRzdE1pcDQud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAzKTsKKyAgICB9Cit9CisKK2tlcm5l
bCB2b2lkIGdlbmVyYXRlMkRNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3Ro
cmVhZGdyb3VwXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQyIGdJbmRp
Y2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUyZDxmbG9hdD4gc3JjVGV4dHVyZSBbW3RleHR1cmUoMCldXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4g
ZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBbW3RleHR1cmUoMildXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0
ZT4gZHN0TWlwMyBbW3RleHR1cmUoMyldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0
aW9ucyBbW2J1ZmZlcigwKV1dKQoreworICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMu
c3JjTGV2ZWwgKyAxOworICAgIHVzaG9ydDIgbWlwU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3Jj
VGV4dHVyZS5nZXRfd2lkdGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChm
aXJzdE1pcExldmVsKSk7CisgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBT
aXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUueTsKKworICAgIGNvbnN0ZXhwciBzYW1wbGVy
IHRleHR1cmVTYW1wbGVyKG1hZ19maWx0ZXI6OmxpbmVhciwgbWluX2ZpbHRlcjo6bGluZWFyLCBt
aXBfZmlsdGVyOjpsaW5lYXIpOworCisgICAgLy8gTk9URShocWxlKTogVXNlIHNpbWRfZ3JvdXAg
ZnVuY3Rpb24gd2hlbmV2ZXIgYXZhaWxhYmxlLiBUaGF0IGNvdWxkIGF2b2lkIGJhcnJpZXIgdXNl
LgorCisgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZs
aWN0LgorICAgIHRocmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJl
YWRncm91cCBmbG9hdCBzR1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0Jba1RocmVhZEdyb3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91
cFhZXTsKKworICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisgICAgZmxvYXQ0
IHRleGVsMTsKKyAgICBpZiAodmFsaWRUaHJlYWQpCisgICAgeworICAgICAgICBmbG9hdDIgdGV4
Q29vcmRzID0gKGZsb2F0MihnSW5kaWNlcykgKyBmbG9hdDIoMC41LCAwLjUpKSAvIGZsb2F0Miht
aXBTaXplKTsKKyAgICAgICAgdGV4ZWwxICAgICAgICAgICA9IHNyY1RleHR1cmUuc2FtcGxlKHRl
eHR1cmVTYW1wbGVyLCB0ZXhDb29yZHMsIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKworICAg
ICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAgICAgIGRzdE1pcDEud3JpdGUodGV4ZWwxLCBn
SW5kaWNlcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBp
bnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworICAgICAgICBsSW5kZXggPSAweGZmZmZm
ZmZmOworICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDEpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxl
dmVsIC0tLS0tLS0tCisKKyAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAgVEVYRUxf
U1RPUkUobEluZGV4LCB0ZXhlbDEpOworCisgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxh
Z3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIGV2ZW4KKyAgICBp
ZiAoKGxJbmRleCAmIDB4MDkpID09IDApICAvLyAobEluZGV4ICYgYjAwMTAwMSkgPT0gMAorICAg
IHsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gZ0luZGljZXMgPT0gKG1pcFNpemUgLSB1c2hvcnQy
KDEpKTsKKworICAgICAgICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2Yg
bWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRl
eGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMSks
IGF0RWRnZS54KTsKKyAgICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9
IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsga1RocmVhZEdy
b3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQg
dGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAo
a1RocmVhZEdyb3VwWCArIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAodGV4ZWwx
ICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RNaXAyLndy
aXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CisKKyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisgICAgfQorCisg
ICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMikKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDNyZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAgICB0
aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8v
IEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAorICAgIGlmICgobEluZGV4ICYgMHgxYikgPT0g
MCkgIC8vIChsSW5kZXggJiBiMDExMDExKSA9PSAwCisgICAgeworICAgICAgICBtaXBTaXplICAg
ICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKyAgICAgICAgYm9vbDIgYXRFZGdl
ID0gKGdJbmRpY2VzID4+IDEpID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisKKyAgICAgICAg
Ly8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIg
d2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisgICAg
ICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDMgPQorICAgICAgICAgICAgT1VU
X09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdy
b3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQg
dGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAo
MiAqIGtUaHJlYWRHcm91cFggKyAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwxID0gKHRl
eGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAgZHN0TWlw
My53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOworCisgICAgICAgIC8vIFdyaXRlIHRvIHNo
YXJlZCBtZW1vcnkKKyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworICAgIH0K
KworICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDMpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisg
ICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAg
ICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKyAgICBpZiAoKGxJbmRleCAmIDB4M2Yp
ID09IDApICAvLyAobEluZGV4ICYgYjExMTExMSkgPT0gMAorICAgIHsKKyAgICAgICAgbWlwU2l6
ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisgICAgICAgIGJvb2wyIGF0
RWRnZSA9IChnSW5kaWNlcyA+PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworCisgICAg
ICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4
ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0KSwgYXRFZGdlLngpOwor
ICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKyAgICAgICAgICAg
IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCAqIGtUaHJl
YWRHcm91cFgpLCBhdEVkZ2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAgICAgZmxv
YXQ0IHRleGVsNCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4
ICsgKDQgKiBrVGhyZWFkR3JvdXBYICsgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9
ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRz
dE1pcDQud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAzKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlVHlwZVIsIHR5cGVuYW1lIFRleHR1cmVUeXBlVz4KK3N0YXRpYyBf
X2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgdm9pZCBnZW5lcmF0ZUN1YmVPcjJEQXJyYXky
bmRBbmRNb3JlTWlwbWFwcygKKyAgICB1aW50IGxJbmRleCwKKyAgICB1c2hvcnQzIGdJbmRpY2Vz
LAorICAgIFRleHR1cmVUeXBlUiBzcmNUZXh0dXJlLAorICAgIFRleHR1cmVUeXBlVyBkc3RNaXAy
LAorICAgIFRleHR1cmVUeXBlVyBkc3RNaXAzLAorICAgIFRleHR1cmVUeXBlVyBkc3RNaXA0LAor
ICAgIHVzaG9ydDIgbWlwMVNpemUsCisgICAgZmxvYXQ0IG1pcDFUZXhlbCwKKyAgICB0aHJlYWRn
cm91cCBmbG9hdCAqc1IsCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNHLAorICAgIHRocmVhZGdy
b3VwIGZsb2F0ICpzQiwKKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0EsCisgICAgY29uc3RhbnQg
R2VuTWlwUGFyYW1zICZvcHRpb25zKQoreworICAgIHVzaG9ydDIgbWlwU2l6ZSA9IG1pcDFTaXpl
OworICAgIGZsb2F0NCB0ZXhlbDEgICA9IG1pcDFUZXhlbDsKKworICAgIC8vIC0tLS0gU2Vjb25k
IG1pcCBsZXZlbCAtLS0tLS0tLQorCisgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorICAg
IFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKworICAgIHRocmVhZGdyb3VwX2JhcnJpZXIo
bWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAgLy8gSW5kZXggbXVzdCBiZSBldmVu
CisgICAgaWYgKChsSW5kZXggJiAweDA5KSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMDEwMDEpID09
IDAKKyAgICB7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IGdJbmRpY2VzLnh5ID09IChtaXBTaXpl
IC0gdXNob3J0MigxKSk7CisKKyAgICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhl
IHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAg
IGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJ
bmRleCArIDEpLCBhdEVkZ2UueCk7CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDMgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCAr
IGtUaHJlYWRHcm91cFgpLCBhdEVkZ2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAg
ICAgZmxvYXQ0IHRleGVsNCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQo
bEluZGV4ICsgKGtUaHJlYWRHcm91cFggKyAxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwx
ID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAg
ZHN0TWlwMi53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzLnh5ID4+IDEsIGdJbmRpY2VzLnopOworCisg
ICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgVEVYRUxfU1RPUkUobElu
ZGV4LCB0ZXhlbDEpOwogICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2Vu
ID09IDIpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gLS0tLSAzcmQg
bWlwIGxldmVsIC0tLS0tLS0tCisgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1l
bV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKyAg
ICBpZiAoKGxJbmRleCAmIDB4MWIpID09IDApICAvLyAobEluZGV4ICYgYjAxMTAxMSkgPT0gMAor
ICAgIHsKKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0Migx
KSk7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNlcy54eSA+PiAxKSA9PSAobWlwU2l6
ZSAtIHVzaG9ydDIoMSkpOworCisgICAgICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRo
ZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAg
ICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChs
SW5kZXggKyAyKSwgYXRFZGdlLngpOworICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9h
dDQgdGV4ZWwzID0KKyAgICAgICAgICAgIE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVM
X0xPQUQobEluZGV4ICsgMiAqIGtUaHJlYWRHcm91cFgpLCBhdEVkZ2UueSk7CisgICAgICAgIC8v
ICh4KzEsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsNCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0
ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDIgKiBrVGhyZWFkR3JvdXBYICsgMikpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0RWRnZS54IHwgYXRFZGdl
LnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhl
bDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDMud3JpdGUodGV4ZWwxLCBnSW5kaWNlcy54eSA+
PiAyLCBnSW5kaWNlcy56KTsKKworICAgICAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5Cisg
ICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKyAgICB9CisKKyAgICBpZiAob3B0
aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIC0tLS0gNHRoIG1pcCBsZXZlbCAtLS0tLS0tLQorICAgIHRocmVhZGdyb3Vw
X2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAgLy8gSW5kZXggbXVz
dCBiZSBtdWx0aXBsZSBvZiA4CisgICAgaWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJ
bmRleCAmIGIxMTExMTEpID09IDAKKyAgICB7CisgICAgICAgIG1pcFNpemUgICAgICA9IG1heCht
aXBTaXplID4+IDEsIHVzaG9ydDIoMSkpOworICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGlj
ZXMueHkgPj4gMikgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAoeCsx
LCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVx
dWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVD
Syh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCksIGF0RWRnZS54KTsKKyAgICAgICAgLy8g
KHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisgICAgICAgICAgICBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQgKiBrVGhyZWFkR3JvdXBYKSwg
YXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDQg
PSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICoga1Ro
cmVhZEdyb3VwWCArIDQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsg
dGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RNaXA0LndyaXRl
KHRleGVsMSwgZ0luZGljZXMueHkgPj4gMywgZ0luZGljZXMueik7CisgICAgfQorfQorCitrZXJu
ZWwgdm9pZCBnZW5lcmF0ZUN1YmVNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2lu
X3RocmVhZGdyb3VwXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMg
Z0luZGljZXMgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdD4gc3JjVGV4dHVyZSBbW3RleHR1cmUoMCld
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDEgW1t0ZXh0dXJlKDEpXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtb
dGV4dHVyZSgyKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3Vi
ZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMyBbW3RleHR1cmUoMyldXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+
IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dKQoreworICAgIHVp
bnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworICAgIHVzaG9ydDIgbWlw
MVNpemUgPQorICAgICAgICB1c2hvcnQyKHNyY1RleHR1cmUuZ2V0X3dpZHRoKGZpcnN0TWlwTGV2
ZWwpLCBzcmNUZXh0dXJlLmdldF9oZWlnaHQoZmlyc3RNaXBMZXZlbCkpOworICAgIGJvb2wgdmFs
aWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5kaWNlcy55IDwgbWlwMVNp
emUueTsKKworICAgIGNvbnN0ZXhwciBzYW1wbGVyIHRleHR1cmVTYW1wbGVyKG1hZ19maWx0ZXI6
OmxpbmVhciwgbWluX2ZpbHRlcjo6bGluZWFyLCBtaXBfZmlsdGVyOjpsaW5lYXIpOworCisgICAg
Ly8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9hdDQgbWlwMVRleGVsOwor
ICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0MiB0ZXhDb29yZHMgPSAo
ZmxvYXQyKGdJbmRpY2VzLnh5KSArIGZsb2F0MigwLjUsIDAuNSkpIC8gZmxvYXQyKG1pcDFTaXpl
KTsKKyAgICAgICAgbWlwMVRleGVsID0gc3JjVGV4dHVyZS5zYW1wbGUodGV4dHVyZVNhbXBsZXIs
IGN1YmVUZXhjb29yZHModGV4Q29vcmRzLCBpbnQoZ0luZGljZXMueikpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbChvcHRpb25zLnNyY0xldmVsKSk7CisKKyAg
ICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorICAgICAgICBkc3RNaXAxLndyaXRlKG1pcDFUZXhl
bCwgZ0luZGljZXMueHksIGdJbmRpY2VzLnopOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICAvLyBUaGlzIHdpbGwgaW52YWxpZGF0ZSBhbGwgc3Vic2VxdWVudCBjaGVja3MKKyAgICAg
ICAgbEluZGV4ID0gMHhmZmZmZmZmZjsKKyAgICB9CisKKyAgICBpZiAob3B0aW9ucy5udW1NaXBM
ZXZlbHNUb0dlbiA9PSAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFVzZSBzdHJ1Y3Qgb2YgYXJyYXkgc3R5bGUgdG8gYXZvaWQgYmFuayBjb25mbGljdC4KKyAgICB0
aHJlYWRncm91cCBmbG9hdCBzUltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxv
YXQgc0dba1RocmVhZEdyb3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNCW2tUaHJlYWRH
cm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3JvdXBYWV07CisKKyAg
ICBnZW5lcmF0ZUN1YmVPcjJEQXJyYXkybmRBbmRNb3JlTWlwbWFwcyhsSW5kZXgsIGdJbmRpY2Vz
LCBzcmNUZXh0dXJlLCBkc3RNaXAyLCBkc3RNaXAzLCBkc3RNaXA0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcDFTaXplLCBtaXAxVGV4ZWwsIHNSLCBzRywg
c0IsIHNBLCBvcHRpb25zKTsKK30KKwora2VybmVsIHZvaWQgZ2VuZXJhdGUyREFycmF5TWlwbWFw
cyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQzIGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0
aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZTJkX2FycmF5PGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3Jp
dGU+IGRzdE1pcDEgW1t0ZXh0dXJlKDEpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBbW3Rl
eHR1cmUoMildXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJk
X2FycmF5PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigw
KV1dKQoreworICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOwor
ICAgIHVzaG9ydDIgbWlwMVNpemUgPQorICAgICAgICB1c2hvcnQyKHNyY1RleHR1cmUuZ2V0X3dp
ZHRoKGZpcnN0TWlwTGV2ZWwpLCBzcmNUZXh0dXJlLmdldF9oZWlnaHQoZmlyc3RNaXBMZXZlbCkp
OworICAgIGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5k
aWNlcy55IDwgbWlwMVNpemUueTsKKworICAgIGNvbnN0ZXhwciBzYW1wbGVyIHRleHR1cmVTYW1w
bGVyKG1hZ19maWx0ZXI6OmxpbmVhciwgbWluX2ZpbHRlcjo6bGluZWFyLCBtaXBfZmlsdGVyOjps
aW5lYXIpOworCisgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9h
dDQgbWlwMVRleGVsOworICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0
MiB0ZXhDb29yZHMgPSAoZmxvYXQyKGdJbmRpY2VzLnh5KSArIGZsb2F0MigwLjUsIDAuNSkpIC8g
ZmxvYXQyKG1pcDFTaXplKTsKKyAgICAgICAgbWlwMVRleGVsID0KKyAgICAgICAgICAgIHNyY1Rl
eHR1cmUuc2FtcGxlKHRleHR1cmVTYW1wbGVyLCB0ZXhDb29yZHMsIGdJbmRpY2VzLnosIGxldmVs
KG9wdGlvbnMuc3JjTGV2ZWwpKTsKKworICAgICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAg
ICAgIGRzdE1pcDEud3JpdGUobWlwMVRleGVsLCBnSW5kaWNlcy54eSwgZ0luZGljZXMueik7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFs
bCBzdWJzZXF1ZW50IGNoZWNrcworICAgICAgICBsSW5kZXggPSAweGZmZmZmZmZmOworICAgIH0K
KworICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDEpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBh
dm9pZCBiYW5rIGNvbmZsaWN0LgorICAgIHRocmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91
cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9hdCBzR1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhy
ZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdyb3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0
IHNBW2tUaHJlYWRHcm91cFhZXTsKKworICAgIGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFuZE1v
cmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMsIHNyY1RleHR1cmUsIGRzdE1pcDIsIGRzdE1pcDMs
IGRzdE1pcDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlw
MVNpemUsIG1pcDFUZXhlbCwgc1IsIHNHLCBzQiwgc0EsIG9wdGlvbnMpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3No
YWRlcnMvdmlzaWJpbGl0eS5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWwKaW5kZXggOTA1YzE5
NjM1Mjc1NWUwMTQ3YWU0MjdjNDgzMDRlMGM2M2ZmZDJmMS4uYWQ1ODYwZjc1M2Y3NTc1MTMwZjZk
YjYzMDY2MDM0N2EwODUzMmZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy92aXNpYmlsaXR5Lm1ldGFsCkBAIC02LDcgKzYsNyBAQAogCiAjaW5jbHVkZSAiY29tbW9u
LmgiCiAKLWNvbnN0YW50IGJvb2wga0NvbWJpbmVXaXRoRXhpc3RpbmdSZXN1bHQgW1tmdW5jdGlv
bl9jb25zdGFudCgxMDAwKV1dOworY29uc3RhbnQgYm9vbCBrQ29tYmluZVdpdGhFeGlzdGluZ1Jl
c3VsdCBbW2Z1bmN0aW9uX2NvbnN0YW50KDEpXV07CiAKIC8vIENvbWJpbmUgdGhlIHZpc2liaWxp
dHkgcmVzdWx0IG9mIGN1cnJlbnQgcmVuZGVyIHBhc3Mgd2l0aCBwcmV2aW91cyB2YWx1ZSBmcm9t
IHByZXZpb3VzIHJlbmRlcgogLy8gcGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKaW5kZXggNzU1YmQ2
MWQ3ZjJkMzIzMzg2ZWVlYmQ3NjhkOTJlMmNiOTFlNmNhMS4uN2Q1YWM1ODRiMTRkZjJkMjM0OWJj
NGE5NWFmNjlmZDllYjEwNTFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCkBAIC00MjgsOCArNDI4
LDYgQEAgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBFR0xfRGVzdHJveUNvbnRleHQoRUdMRGlzcGxh
eSBkcHksIEVHTENvbnRleHQgY3R4KQogCiAgICAgaWYgKGNvbnRleHRXYXNDdXJyZW50KQogICAg
IHsKLSAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4odGhyZWFkLCBkaXNwbGF5LT5tYWtlQ3Vy
cmVudChjb250ZXh0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImVnbERlc3Ryb3lDb250ZXh0IiwgR2V0Q29udGV4dElmVmFsaWQoZGlz
cGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CiAgICAgICAgIFNldENvbnRleHRDdXJyZW50KHRo
cmVhZCwgbnVsbHB0cik7CiAgICAgfQogCkBAIC00NjYsOSArNDY0LDkgQEAgRUdMQm9vbGVhbiBF
R0xBUElFTlRSWSBFR0xfTWFrZUN1cnJlbnQoRUdMRGlzcGxheSBkcHksCiAgICAgLy8gT25seSBj
YWxsIG1ha2VDdXJyZW50IGlmIHRoZSBjb250ZXh0IG9yIHN1cmZhY2VzIGhhdmUgY2hhbmdlZC4K
ICAgICBpZiAocHJldmlvdXNEcmF3ICE9IGRyYXdTdXJmYWNlIHx8IHByZXZpb3VzUmVhZCAhPSBy
ZWFkU3VyZmFjZSB8fCBwcmV2aW91c0NvbnRleHQgIT0gY29udGV4dCkKICAgICB7Ci0gICAgICAg
IEFOR0xFX0VHTF9UUllfUkVUVVJOKAotICAgICAgICAgICAgdGhyZWFkLCBkaXNwbGF5LT5tYWtl
Q3VycmVudChwcmV2aW91c0NvbnRleHQsIGRyYXdTdXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4
dCksCi0gICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQiLCBHZXRDb250ZXh0SWZWYWxpZChkaXNw
bGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4o
dGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5tYWtlQ3VycmVu
dCh0aHJlYWQsIGRyYXdTdXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZhbGlkKGRp
c3BsYXksIGNvbnRleHQpLCBFR0xfRkFMU0UpOwogCiAgICAgICAgIFNldENvbnRleHRDdXJyZW50
KHRocmVhZCwgY29udGV4dCk7CiAgICAgfQpAQCAtODE4LDkgKzgxNiw5IEBAIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgRUdMX1JlbGVhc2VUaHJlYWQodm9pZCkKICAgICAgICAgaWYgKHByZXZpb3Vz
RHJhdyAhPSBFR0xfTk9fU1VSRkFDRSB8fCBwcmV2aW91c1JlYWQgIT0gRUdMX05PX1NVUkZBQ0Ug
fHwKICAgICAgICAgICAgIHByZXZpb3VzQ29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCkKICAgICAg
ICAgewotICAgICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCi0gICAgICAgICAgICAgICAg
dGhyZWFkLCBwcmV2aW91c0Rpc3BsYXktPm1ha2VDdXJyZW50KHByZXZpb3VzQ29udGV4dCwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0ciksCi0gICAgICAgICAgICAgICAgImVnbFJlbGVhc2VUaHJl
YWQiLCBudWxscHRyLCBFR0xfRkFMU0UpOworICAgICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRV
Uk4odGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEaXNw
bGF5LT5tYWtlQ3VycmVudCh0aHJlYWQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVnbFJlbGVhc2VUaHJlYWQiLCBudWxscHRy
LCBFR0xfRkFMU0UpOwogICAgICAgICB9CiAgICAgICAgIEFOR0xFX0VHTF9UUllfUkVUVVJOKHRo
cmVhZCwgcHJldmlvdXNEaXNwbGF5LT5yZWxlYXNlVGhyZWFkKCksICJlZ2xSZWxlYXNlVGhyZWFk
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGlzcGxheUlmVmFsaWQocHJldmlv
dXNEaXNwbGF5KSwgRUdMX0ZBTFNFKTsK
</data>
<flag name="commit-queue"
          id="433452"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416046</attachid>
            <date>2020-12-11 14:13:35 -0800</date>
            <delta_ts>2020-12-12 03:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201211141319.patch</filename>
            <type>text/plain</type>
            <size>2867921</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uZjJi
YzdiODQ5YmViZTYxOTUxYThmZGE1MjdkNTU3YTJjZTNiOGQ5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQxIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi87IH07CisJCUZGODFGRjAyMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovOyB9OworCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRF
MjQgLyogRnJhbWVCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUJDMjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5o
ICovOyB9OworCQlGRjgxRkYwNDI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJEMjU4MThE
NjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5oICovOyB9OworCQlGRjgxRkYwNTI1ODE4RDY5MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5tbSAqLzsgfTsKKwkJRkY4MUZGMDYyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLzsgfTsKKwkJ
RkY4MUZGMDcyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0
IC8qIENvbXBpbGVyTXRsLm1tICovOyB9OworCQlGRjgxRkYwODI1ODE4RDY5MDA4OTRFMjQgLyog
bXRsX2J1ZmZlcl9wb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZlcl9wb29sLmggKi87
IH07CisJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi87IH07CisJCUZG
ODFGRjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDNTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2J1ZmZlcl9wb29sLm1tICovOyB9OworCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRF
MjQgLyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICovOyB9
OworCQlGRjgxRkYwRDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzcyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEUyNTgxOEQ2
QTAwODk0RTI0IC8qIG10bF9zdGF0ZV9jYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzgyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9zdGF0
ZV9jYWNoZS5oICovOyB9OworCQlGRjgxRkYwRjI1ODE4RDZBMDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0gKi87IH07CisJCUZG
ODFGRjEwMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNBMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZG
MTEyNTgxOEQ2QTAwODk0RTI0IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRl
ck10bC5oICovOyB9OworCQlGRjgxRkYxMjI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0My
NTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMTMyNTgxOEQ2
QTAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRDI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0IC8qIERpc3BsYXlNdGwubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRTI1ODE4
RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMUIyNTgxOTBDQTAw
ODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbERpcmVjdC5oICovOyB9OworCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRFMjQgLyog
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0
YWxEaXJlY3QuY3BwICovOyB9OworCQlGRjgxRkYxRDI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGlj
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLzsgfTsKKwkJRkY4MUZGMUUy
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjE5MjU4MTkwQ0EwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgKi87IH07CisJCUZGODFGRjFGMjU4MTkwQ0Ew
MDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmggKi87IH07CisJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAqLzsgfTsKKwkJRkY4MUZGNUMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyMjI1ODE5MTk3MDA4OTRF
MjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNUQyNTgx
OTE5NzAwODk0RTI0IC8qIERlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLzsgfTsK
KwkJRkY4MUZGNUUyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmggKi87IH07CisJCUZGODFGRjVGMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjI1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGNjAyNTgxOTE5NzAwODk0
RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyNjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNw
cCAqLzsgfTsKKwkJRkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJs
b2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oICovOyB9Owor
CQlGRjgxRkY2MjI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjgyNTgxOTE5
NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLzsgfTsKKwkJRkY4MUZGNjMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI5MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjY0
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
OyB9OworCQlGRjgxRkY2NTI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWdTaW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQjI1ODE5MTk3MDA4
OTRFMjQgLyogRGVidWdTaW5rLmggKi87IH07CisJCUZGODFGRjY2MjU4MTkxOTcwMDg5NEUyNCAv
KiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQzI1ODE5MTk3MDA4OTRFMjQgLyog
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oICovOyB9OworCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0
YWwuY3BwICovOyB9OworCQlGRjgxRkY2ODI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91dEFy
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICovOyB9OworCQlGRjgxRkY2
OTI1ODE5MTk4MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFw
U3ltYm9scy5jcHAgKi87IH07CisJCUZGODFGRjZBMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMzAyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi87IH07CisJCUZGODFGRjZC
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlS2V5d29yZHMuaCAqLzsgfTsKKwkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLzsgfTsKKwkJRkY4MUZGNkQy
NTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzMzI1ODE5MTk3MDA4OTRFMjQgLyog
VG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi87IH07CisJCUZGODFGRjZGMjU4MTkxOTgwMDg5NEUyNCAvKiBT
a2lwcGluZ1RyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmgg
Ki87IH07CisJCUZGODFGRjcwMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuY3BwICovOyB9OworCQlGRjgxRkY3MTI1
ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5l
LmNwcCAqLzsgfTsKKwkJRkY4MUZGNzIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzODI1ODE5MTk3
MDA4OTRFMjQgLyogSWRHZW4uaCAqLzsgfTsKKwkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzkyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRl
Q29tcG91bmRFeHByZXNzaW9ucy5oICovOyB9OworCQlGRjgxRkY3NDI1ODE5MTk4MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0
VHlwZUNhc3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzUyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5
bWJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi87IH07CisJCUZGODFGRjc2
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0
IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50
ZXJmYWNlQmxvY2tzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzgyNTgxOTE5ODAwODk0RTI0IC8qIEFz
dEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwICovOyB9OworCQlG
RjgxRkY3OTI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYz
RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi87
IH07CisJCUZGODFGRjdBMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQwMjU4MTkxOTcwMDg5NEUy
NCAvKiBMYXlvdXQuaCAqLzsgfTsKKwkJRkY4MUZGN0IyNTgxOTE5ODAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwICovOyB9OworCQlGRjgxRkY3QzI1ODE5
MTk4MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFt
UHJlbHVkZS5oICovOyB9OworCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzLmggKi87IH07CisJCUZGODFGRjdFMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLzsgfTsKKwkJRkY4MUZGN0YyNTgx
OTE5ODAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NTI1ODE5MTk3MDA4
OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZG
ODAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGODEyNTgxOTE5ODAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ3MjU4MTkxOTcwMDg5
NEUyNCAvKiBBc3RIZWxwZXJzLmggKi87IH07CisJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAv
KiBIb2lzdENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0ODI1ODE5MTk3MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3Bw
ICovOyB9OworCQlGRjgxRkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ5MjU4MTkxOTcw
MDg5NEUyNCAvKiBQaXBlbGluZS5oICovOyB9OworCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQg
LyogUmV3cml0ZVBpcGVsaW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGNEEyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMu
aCAqLzsgfTsKKwkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEIyNTgxOTE5
NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovOyB9OworCQlGRjgxRkY4NjI1ODE5MTk4MDA4OTRF
MjQgLyogSG9pc3RDb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRDMjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5o
ICovOyB9OworCQlGRjgxRkY4NzI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEQyNTgxOTE5
NzAwODk0RTI0IC8qIFdyYXBNYWluLmNwcCAqLzsgfTsKKwkJRkY4MUZGODgyNTgxOTE5ODAwODk0
RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmgg
Ki87IH07CisJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEYy
NTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAgKi87IH07CisJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MDI1ODE5MTk3MDA4OTRFMjQgLyog
UHJvZ3JhbVByZWx1ZGUuY3BwICovOyB9OworCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLzsgfTsKKwkJRkY4MUZGOEMy
NTgxOTE5ODAwODk0RTI0IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRh
bC5oICovOyB9OworCQlGRjgxRkY4RDI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUzMjU4MTkx
OTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICovOyB9OworCQlGRjgxRkY4RTI1ODE5MTk4MDA4OTRF
MjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNp
dFR5cGVDYXN0cy5oICovOyB9OworCQlGRjgxRkY4RjI1ODE5MTk4MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwICovOyB9OworCQlGRjgxRkY5MDI1ODE5MTk4MDA4OTRFMjQgLyog
TW9kaWZ5U3RydWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY1NjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi87IH07CisJ
CUZGODFGRjkxMjU4MTkxOTgwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU3MjU4MTkxOTcwMDg5
NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLzsgfTsKKwkJRkY4MUZGOTIyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU4MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTkyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVD
YXNlRGVjbGFyYXRpb25zLmggKi87IH07CisJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBN
YXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8q
IE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRjk1MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgKi87
IH07CisJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBOb2RlVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTcyNTgxQTNDMTAwODk0
RTI0IC8qIE5vZGVUeXBlLmggKi87IH07CisJCUZGODFGRjlDMjU4MUEzQzIwMDg5NEUyNCAvKiBB
c05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLzsgfTsKKwkJRkY4MUZGOUQyNTgx
QTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVy
bVJlYnVpbGQuY3BwICovOyB9OworCQlGRjgxRkY5RTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLzsgfTsKKwkJRkY4
MUZGOUYyNTgxQUQwNDAwODk0RTI0IC8qIGJsaXQubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBQTI1ODE4RDY4MDA4OTRFMjQgLyogYmxp
dC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHku
bWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLzsgfTsKKwkJRkY4MUZG
QTEyNTgxQUQwNDAwODk0RTI0IC8qIGNvcHlfYnVmZmVyLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8q
IGNvcHlfYnVmZmVyLm1ldGFsICovOyB9OworCQlGRjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyog
Y2xlYXIubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkVCMTI1ODE4RDY4MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgKi87IH07CisJCUZGODFG
RkEzMjU4MUFEMDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8q
IGdlbl9taXBtYXAubWV0YWwgKi87IH07CisJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUyNCAvKiBn
ZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLzsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZFJ1
bGUgc2VjdGlvbiAqLwpAQCAtMjAzMCw2ICsyMTY1LDE0MyBAQAogCQlBM0QzMjkxMzIzQ0ZDQjc2
MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5
IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgwMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBtdGxfZ2xzbGFuZ191dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmFtTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRTgyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TXRsX2FwaS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3lu
Y010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5bmNNdGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg0MjU4MThENjgwMDg5NEUy
NCAvKiBRdWVyeU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWVyeU10
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4NTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IG10bF9mb3JtYXRfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRTg2MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJCdWZmZXJNdGwubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg4MjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9jb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRs
X2NvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4QTI1ODE4
RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTYW1wbGVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThC
MjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3luY010bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU4RDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBRdWVyeU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVy
QnVmZmVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckJ1ZmZl
ck10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MDI1ODE4RDY4MDA4
OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNmb3JtRmVlZGJhY2tNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1ZmZlck10bC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRf
dGFibGVfYXV0b2dlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOTMyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlclRhcmdldE10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdXJmYWNlTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IG10bF9nbHNsYW5nX210bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1hbmRfYnVmZmVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQg
LyogVmVydGV4QXJyYXlNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVy
dGV4QXJyYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTgyNTgx
OEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGFyZ2V0TXRsLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWZXJ0ZXhBcnJh
eU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUIyNTgxOEQ2ODAw
ODk0RTI0IC8qIG10bF9jb21tYW5kX2J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfY29tbWFuZF9idWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCdWZmZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1
cmZhY2VNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJT1N1
cmZhY2VTdXJmYWNlTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
RjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZXNvdXJjZXMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9yZXNvdXJjZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10
bF9zdGF0ZV9jYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTMy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVl
ZGJhY2tNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUcmFu
c2Zvcm1GZWVkYmFja010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZF
QTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNjI1ODE4RDY4MDA4OTRFMjQgLyogVGV4dHVyZU10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHR1cmVNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE3MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHR1cmVN
dGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW1wbGVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
QTI1ODE4RDY4MDA4OTRFMjQgLyogYmxpdC5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0
YWw7IHBhdGggPSBibGl0Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUubWV0YWw7IHBhdGggPSB2aXNpYmlsaXR5Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyogY29uc3RhbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnBhc2NhbDsgcGF0aCA9IG10
bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBRjI1ODE4RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gY29weV9idWZmZXIubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3Jt
YXRfYXV0b2dlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmb3JtYXRfYXV0
b2dlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCMTI1ODE4RDY4MDA4
OTRFMjQgLyogY2xlYXIubWV0YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0g
Y2xlYXIubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIyMjU4MThE
NjgwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRh
bDsgcGF0aCA9IGdlbl9taXBtYXAubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBnZW5faW5kaWNlcy5tZXRhbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNp
b25fcXVlcnlfcG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZyYW1lQnVmZmVyTXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJEMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlck10bC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNdGwubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUMwMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbXBpbGVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10
bF9idWZmZXJfcG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMjI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG10bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NDI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb250ZXh0TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRUM1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfYnVmZmVyX3Bvb2wubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29t
bW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1v
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzcyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX3JlbmRlcl91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9zdGF0ZV9jYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGcmFtZUJ1ZmZlck10bC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQ0MyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYWRlck10bC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dy
YW1NdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9ncmFt
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRTI1ODE4RDY4MDA4
OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpc3BsYXlNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYxODI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTkyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbFV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbFV0aWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyMjI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjUyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZFN0cnVj
dERlY2xhcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjI2
MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U3RydWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjgyNTgxOTE5NzAwODk0
RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRW52aXJvbm1lbnRWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJCMjU4MTkx
OTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdTaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJDMjU4
MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMkQyNTgxOTE5
NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFbWl0TWV0YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYyRTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZU91dEFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMkYyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwU3ltYm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjMwMjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sRW52LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0
IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXdyaXRlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzIy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYzMzI1ODE5MTk3MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRvcG9zb3J0U3RydWN0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNraXBwaW5nVHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJn
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlT3V0QXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM3MjU4MTkxOTcwMDg5
NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQaXBlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM4MjU4
MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJZEdlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzOTI1ODE5MTk3
MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhw
bGljaXRUeXBlQ2FzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYzQjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXBTeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVQaXBlbGluZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyog
UmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzdEhlbHBlcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0MTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNDIyNTgxOTE5NzAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sRW52Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVy
RGVjbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0
NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3RIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb2lzdENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQ5MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXBlbGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlUGlwZWxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRCMjU4MTkxOTcwMDg5
NEUyNCAvKiBSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVm
ZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRDMjU4MTkxOTcw
MDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIb2lzdENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV3JhcE1haW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUtleXdv
cmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElkR2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFbWl0TWV0YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyYXBNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1NTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2Rp
ZnlTdHJ1Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U3RydWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VG9wb3NvcnRTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU4
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU5MjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY1QTI1ODE5MTk3MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTUy
NTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTWV0
YWwuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbC5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQlGRjgxRkY5NzI1ODFBM0MxMDA4OTRF
MjQgLyogTm9kZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTgyNTgxQTNDMTAwODk0
RTI0IC8qIEFzTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc05vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0
IC8qIEludGVybVJlYnVpbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZXJtUmVidWlsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludGVybVJlYnVpbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjA0NSw2ICsyMzE3LDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1Q0IzMDQ5NDFE
RTQxNTcyMDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJCUZGODFGRjk2MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLywKIAkJCQk1Q0IzMDQ5MzFERTQxNTZCMDBEMkM0MDUgLyogUXVhcnR6Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTIwNTUsNiArMjMyOCw4IEBACiAJCTMxMDEyRDlGMThC
OTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJhbnNsYXRv
ck1ldGFsRGlyZWN0ICovLAorCQkJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QgKi8sCiAJCQkJNUNCRDU5NjkyMjgyNkEwMDAwMkIyMkFBIC8qIHRyZWVv
cHMgKi8sCiAJCQkJNUM1NUQ2RUEyMjgyNkM5ODAwQjVCQTJDIC8qIHRyZWV1dGlsICovLAogCQkJ
CTVDMURCQkZCMUIwNDM3NUYwMDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuY3BwICovLApAQCAt
MjE0NCw2ICsyNDE5LDcgQEAKIAkJCQkzMUEzMzFEMTFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJp
dHkuaCAqLywKIAkJCQkzMTAxMkRGMjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAg
Ki8sCiAJCQkJNUMxREJDMUExQjA0Mzc1RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwICovLAor
CQkJCUZGODFGRjE3MjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggKi8sCiAJCQkJMzE1
RUJENDcxRkNFNDQyODAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuY3BwICovLAogCQkJCTMxNUVC
RDczMUZDRTQ0MzQwMEFDN0E4OSAvKiBTdHJ1Y3R1cmVITFNMLmggKi8sCiAJCQkJNUM1NUQ2RDky
MjgyNkM3ODAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgKi8sCkBAIC0yMTYwLDYgKzI0MzYsMTAgQEAK
IAkJCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJ
CQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJ
CTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUZG
ODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwICovLAor
CQkJCUZGODFGRjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAq
LywKKwkJCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
Y3BwICovLAorCQkJCUZGODFGRjFBMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxV
dGlscy5oICovLAogCQkJCTMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVs
a2FuLmNwcCAqLywKIAkJCQkzMTVFQkQ2NjFGQ0U0NDMxMDBBQzdBODkgLyogVHJhbnNsYXRvclZ1
bGthbi5oICovLAogCQkJCTVDMURCQzFEMUIwNDM3NUYwMDIzNTU1MiAvKiBUeXBlcy5jcHAgKi8s
CkBAIC0yNTIyLDYgKzI4MDIsNyBAQAogCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLywKIAkJCQlBMzAzMDZGRTIzMDVG
NjM2MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBMzAzMDZGRjIzMDVGNjM2
MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmggKi8sCiAJCQkJNUM1NUQ2RUQyMjgyNkNCMjAwQjVC
QTJDIC8qIEZpbmRNYWluLmNwcCAqLywKQEAgLTI1MzIsOSArMjgxMywxMiBAQAogCQkJCTVDNTVE
NkVFMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlX3V0aWwuaCAqLywKIAkJCQk1QzU1RDZG
NDIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCAqLywKIAkJ
CQk1QzU1RDZGODIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgg
Ki8sCisJCQkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwICov
LAorCQkJCUZGODFGRjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8sCiAJ
CQkJNUM1NUQ2RjIyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQk1QzU1RDZGMTIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCAqLywKIAkJCQk1
QzU1RDZGNzIyODI2Q0IzMDBCNUJBMkMgLyogTm9kZVNlYXJjaC5oICovLAorCQkJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovLAogCQkJCUEzQzNGRTEyMjU1REREOTIw
MEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuY3BwICovLAogCQkJCUEzQzNG
RTExMjU1REREOTIwMEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuaCAqLywK
IAkJCQk2RUIwMUMxRjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlh
YmxlLmNwcCAqLywKQEAgLTI1OTAsNiArMjg3NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTVDQjMwMERGMURFMzlGMDMwMEQyQzQwNSAvKiBnbCAqLywKKwkJ
CQlGRjgxRkU3RjI1ODE4RDY4MDA4OTRFMjQgLyogbWV0YWwgKi8sCiAJCQkJNkUzM0U4RTcyNEQw
RDE5NjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwICovLAogCQkJCTVDQjMwNEFBMURFNDE2NDgw
MEQyQzQwNSAvKiBCdWZmZXJJbXBsLmggKi8sCiAJCQkJNUNCMzA0QUIxREU0MTY0ODAwRDJDNDA1
IC8qIENvbXBpbGVySW1wbC5oICovLApAQCAtMjc0NSw2ICszMDMwLDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzA0OEIxREU0MTQzNTAwRDJDNDA1IC8q
IENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8sCisJCQkJRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0
IC8qIE1ldGFsLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RDFERTQxNDQ0MDBEMkM0MDUgLyog
T3BlbkdMLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RjFERTQxNDU1MDBEMkM0MDUgLyogUXVh
cnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkpOwpAQCAtMzE4Nyw2ICszNDczLDE1NCBAQAogCQkJ
cGF0aCA9IGluY2x1ZGUvR0xTTEFORzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8q
IHNoYWRlcnMgKi8sCisJCQkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
ICovLAorCQkJCUZGODFGRTkxMjU4MThENjgwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gKi8sCisJ
CQkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi8sCisJCQkJRkY4
MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tICovLAorCQkJCUZGODFGRUM0
MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8sCisJCQkJRkY4MUZFQkYyNTgxOEQ2
ODAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gKi8sCisJCQkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0
RTI0IC8qIERpc3BsYXlNdGwuaCAqLywKKwkJCQlGRjgxRkVDRTI1ODE4RDY4MDA4OTRFMjQgLyog
RGlzcGxheU10bC5tbSAqLywKKwkJCQlGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxh
eU10bF9hcGkuaCAqLywKKwkJCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwuaCAqLywKKwkJCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFQTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZh
Y2VNdGwuaCAqLywKKwkJCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3Vy
ZmFjZU10bC5tbSAqLywKKwkJCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZl
cl9wb29sLmggKi8sCisJCQkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJf
cG9vbC5tbSAqLywKKwkJCQlGRjgxRkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRf
YnVmZmVyLmggKi8sCisJCQkJRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5k
X2J1ZmZlci5tbSAqLywKKwkJCQlGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1v
bi5oICovLAorCQkJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICov
LAorCQkJCUZGODFGRTg5MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggKi8sCisJ
CQkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5t
bSAqLywKKwkJCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
ICovLAorCQkJCUZGODFGRTg1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1t
ICovLAorCQkJCUZGODFGRTk1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRp
bHMuaCAqLywKKwkJCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFu
Z191dGlscy5oICovLAorCQkJCUZGODFGRUNBMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVz
aW9uX3F1ZXJ5X3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovLAorCQkJCUZGODFGRUM3MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfcmVuZGVyX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQTMyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZXNvdXJjZXMuaCAqLywKKwkJCQlGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3Jlc291cmNlcy5tbSAqLywKKwkJCQlGRjgxRkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X3N0YXRlX2NhY2hlLmggKi8sCisJCQkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLywKKwkJCQlGRjgxRkVDMjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0
aWxzLmggKi8sCisJCQkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LywKKwkJCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovLAorCQkJ
CUZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tICovLAorCQkJCUZGODFG
RTg0MjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5oICovLAorCQkJCUZGODFGRThEMjU4MThE
NjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLywKKwkJCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRF
MjQgLyogUmVuZGVyQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0
IC8qIFJlbmRlckJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQg
LyogUmVuZGVyVGFyZ2V0TXRsLmggKi8sCisJCQkJRkY4MUZFOTkyNTgxOEQ2ODAwODk0RTI0IC8q
IFJlbmRlclRhcmdldE10bC5tbSAqLywKKwkJCQlGRjgxRkU4QTI1ODE4RDY4MDA4OTRFMjQgLyog
U2FtcGxlck10bC5oICovLAorCQkJCUZGODFGRUE4MjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVy
TXRsLm1tICovLAorCQkJCUZGODFGRUNCMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJNdGwuaCAq
LywKKwkJCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovLAorCQkJ
CUZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggKi8sCisJCQkJRkY4MUZF
OTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0gKi8sCisJCQkJRkY4MUZFOEMyNTgx
OEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLywKKwkJCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRF
MjQgLyogU3luY010bC5tbSAqLywKKwkJCQlGRjgxRkVBNzI1ODE4RDY4MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oICovLAorCQkJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAvKiBUZXh0dXJlTXRs
Lm1tICovLAorCQkJCUZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFj
a010bC5oICovLAorCQkJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSAqLywKKwkJCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJy
YXlNdGwuaCAqLywKKwkJCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1ldGFsOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8qIHNoYWRlcnMgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRUFBMjU4MThE
NjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovLAorCQkJCUZGODFGRUIxMjU4MThENjgwMDg5NEUy
NCAvKiBjbGVhci5tZXRhbCAqLywKKwkJCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29t
bW9uLmggKi8sCisJCQkJRkY4MUZFQUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICov
LAorCQkJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRhbCAqLywK
KwkJCQlGRjgxRkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLywKKwkJ
CQlGRjgxRkVCMzI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX2luZGljZXMubWV0YWwgKi8sCisJCQkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8sCisJCQkJRkY4
MUZFQUUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jICovLAorCQkJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFs
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzaGFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJRkY4MUZGMjAyNTgxOTE5NzAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4
MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCAqLywKKwkJ
CQlGRjgxRkY1NDI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCAqLywK
KwkJCQlGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgKi8sCisJCQkJ
RkY4MUZGNDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLywKKwkJCQlGRjgxRkY0
RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovLAorCQkJCUZGODFGRjIzMjU4
MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oICovLAorCQkJCUZGODFGRjJCMjU4MTkxOTcwMDg5NEUy
NCAvKiBEZWJ1Z1NpbmsuaCAqLywKKwkJCQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjIyMjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovLAorCQkJCUZGODFGRjQxMjU4
MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAq
LywKKwkJCQlGRjgxRkYyQTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oICovLAorCQkJCUZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0
TWV0YWwuY3BwICovLAorCQkJCUZGODFGRjUyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCAqLywKKwkJCQlGRjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJs
ZS5oICovLAorCQkJCUZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgKi8sCisJCQkJRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmgg
Ki8sCisJCQkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLywKKwkJCQlG
RjgxRkYzODI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uaCAqLywKKwkJCQlGRjgxRkYzMjI1ODE5
MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLywKKwkJCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRF
MjQgLyogTGF5b3V0LmggKi8sCisJCQkJRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUy
NCAvKiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmggKi8sCisJCQkJRkY4MUZGMkYyNTgxOTE5
NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovLAorCQkJCUZGODFGRjNCMjU4MTkxOTcwMDg5
NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8sCisJCQkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8q
IE1vZGlmeVN0cnVjdC5jcHAgKi8sCisJCQkJRkY4MUZGNTYyNTgxOTE5NzAwODk0RTI0IC8qIE1v
ZGlmeVN0cnVjdC5oICovLAorCQkJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNw
cCAqLywKKwkJCQlGRjgxRkYyNDI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oICovLAorCQkJCUZG
ODFGRjM3MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8sCisJCQkJRkY4MUZGNDky
NTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi8sCisJCQkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLywKKwkJCQlGRjgxRkY0MjI1ODE5MTk3MDA4
OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCAqLywKKwkJCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRF
MjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLywKKwkJCQlGRjgxRkYyNzI1ODE5MTk3
MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmggKi8sCisJCQkJRkY4MUZGNEIyNTgx
OTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovLAorCQkJCUZGODFGRjU4MjU4MTkxOTcwMDg5
NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZG
NDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8s
CisJCQkJRkY4MUZGNDMyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJE
ZWNscy5oICovLAorCQkJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovLAorCQkJCUZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuaCAqLywKKwkJCQlGRjgxRkYzNjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3Mu
Y3BwICovLAorCQkJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5o
ICovLAorCQkJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNw
cCAqLywKKwkJCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBpcGVsaW5lcy5o
ICovLAorCQkJCUZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuY3BwICovLAorCQkJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLywKKwkJCQlGRjgxRkY1NTI1ODE5MTk3MDA4
OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQlGRjgxRkYz
OTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8sCisJ
CQkJRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjJDMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZGMzUyNTgxOTE5NzAw
ODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMzAyNTgxOTE5NzAw
ODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8sCisJCQkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0
IC8qIFN5bWJvbEVudi5oICovLAorCQkJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuY3BwICovLAorCQkJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuaCAqLywKKwkJCQlGRjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uY3BwICovLAorCQkJCUZGODFGRjUzMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMzYxMSw2ICs0MDQ1LDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCUEzQzQ5QzE1MjU1REY4NjUwMDVFOERGNyAvKiBBZGRBbmRUcnVl
VG9Mb29wQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5NzIyODI2QjlGMDBC
NUJBMkMgLyogQWRkRGVmYXVsdFJldHVyblN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjhFMjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjQyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDdBMTIzMDYyNUM2MDAyREE5NzIgLyogYW5kcm9p
ZF91dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc5OTIzMDYwMjUzMDAyREE5NzIgLyog
YW5nbGVfZ2wuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxOCw2ICs0MDUzLDggQEAKIAkJCQk1Q0M3
RDQ2QjE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2OEEyMjgyNkI5RjAwQjVCQTJDIC8qIEFycmF5UmV0dXJuVmFsdWVU
b091dFBhcmFtZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUMyNTgxQTNDMjAwODk0
RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODEyNTgxOTE5ODAwODk0
RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzIzMUIwNDM3NUYw
MDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREQ2
MUIwNDM4RDMwMDIzNTU1MiAvKiBBdHRyaWJ1dGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzYzMSw2ICs0MDY4LDcgQEAKIAkJCQk1QzFEQkREOTFCMDQzOEQzMDAyMzU1NTIgLyogQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDExOTFERTM5RjFBMDBEMkM0MDUgLyogQnVmZmVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERCMURFNDE2NDgwMEQyQzQwNSAvKiBCdWZm
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFQjI1ODE4RDY5MDA4OTRFMjQgLyog
QnVmZmVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzI5
MUIwNDM3NUYwMDIzNTU1MiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCRDdEMUZDRTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvckhMU0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzY0MywxMyArNDA4MSwxNyBAQAogCQkJ
CTMxNUVCRDlBMUZDRTQ0MzYwMEFDN0E4OSAvKiBDb2xsZWN0VmFyaWFibGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE4RTFEQkZFQTEwMDA2MDY2QjggLyogQ29sb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRUZCMjU4MThENjkwMDg5NEUyNCAvKiBjb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCREREMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJDMkMxQjA0Mzc1RjAwMjM1NTUyIC8qIENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDExQjFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGlsZXJHTC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REMxREU0MTY0ODAwRDJDNDA1IC8qIENvbXBpbGVySW1w
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMDQyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBp
bGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUJGMzI1NURGNjk3MDA1RThERjcgLyog
Y29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREUw
MUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg4
MjU4MTkxOTgwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFMTFCMDQzOEQzMDAyMzU1NTIgLyogQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVGQTI1ODE4RDY5MDA4OTRFMjQgLyogY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJERTMxQjA0MzhEMzAwMjM1NTUyIC8qIENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUEzMDMwNzI3MjMwNUY3QzQwMDJEQTk3MiAvKiBDb250ZXh0LmlubC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjU3LDkgKzQwOTksMTIgQEAKIAkJCQkzMTNCQ0U1RjIzNjExMzNB
MDBGQzM5RTUgLyogQ29udGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFEMURF
MzlGMUEwMEQyQzQwNSAvKiBDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERF
MURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQ0Q1OThFMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1hZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQ0Q4MTczMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDNTVENzM0MjI4Mjc0REUwMEI1QkEyQyAvKiBEZWNsYXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY1RTIyODI2QjlGMDBCNUJBMkMgLyogRGVjbGFyZUFuZEluaXRCdWlsdGlu
c0Zvckluc3RhbmNlZE11bHRpdmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODkyMjgy
NkI5RjAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM2NzIsNiArNDExNyw4IEBACiAJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNUMyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2NDI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292
ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
QkMxRkNFNDRCRjAwQUM3QTg5IC8qIERpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzFEQkRFOTFCMDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTNDNDlDMUUyNTVERjg4RTAwNUU4REY3IC8qIERpc3BsYXlBcHBsZV9hcGku
aCBpbiBIZWFkZXJzICovLApAQCAtMzY3OSw2ICs0MTI2LDggQEAKIAkJCQkzMTNCQ0U1NDIzNjEx
MzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFG
MURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEUyMURFNDE2NDgwMEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZFREEyNTgxOEQ2OTAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZGODFGRUQyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzkxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkVCMDFDMUQyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21l
bnRUZXN0c09wdGltaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NTgyNDkxQzg0
NTAwOTgyODc4IC8qIGVnbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg5LDYgKzQxMzgsNyBAQAog
CQkJCUEzQzQ5QkY5MjU1REY2RTUwMDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTY3MjI4NEY3OTYwMDE4RjJEOCAvKiBFR0xTeW5jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBM0M0OUJGQTI1NURGNkU1MDA1RThERjcgLyogRUdMU3luY0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjhDMjU4MTkxOTgwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjZBMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRl
R0xGcmFnQ29sb3JCcm9hZGNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY3MjMwNUY1
RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hhZGVyQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDNTVENkEzMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRlUHJlY2lzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3MDEsNiArNDE1MSw3IEBACiAJCQkJQTMwQjU4MkIyMzhERjgy
NjAwNzlGRERDIC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMl9hdXRvZ2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMURCNzk2QzI0OTFDOEY1MDA5ODI4NzggLyogZW50cnlfcG9pbnRzX2dsZXNfZXh0
X2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzI1MjMwNUY3QzQwMDJEQTk3MiAv
KiBlbnRyeV9wb2ludHNfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYyMjU4MTkx
OTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFQjFCMDQzOEQzMDAyMzU1NTIgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREU5MUZDRTQ1MkQwMEFDN0E4OSAvKiBFcnJvclN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzcyMiw2ICs0MTczLDcgQEAKIAkJCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEg
LyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkE0MjI4MjZC
OUYwMEI1QkEyQyAvKiBGb2xkRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEU4MURFNDE2NDgwMEQyQzQwNSAvKiBGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxREJERjIxQjA0MzhEMzAwMjM1NTUyIC8qIGZvcm1hdHV0aWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0IzMDEyNjFERTM5RjFBMDBEMkM0MDUgLyogZm9ybWF0dXRpbHNnbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkUzM0U4RUUyNEQwRDIwOTAwMjMwOUFDIC8qIGZyYW1lX2NhcHR1cmVf
dXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzczMSw2ICs0MTgzLDcgQEAKIAkJCQk1Q0IzMDEy
ODFERTM5RjFBMDBEMkM0MDUgLyogRnJhbWVidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNCMzA0RUIxREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RUExREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbF9tb2Nr
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRFMjQgLyogRnJhbWVC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkU5MjI4MjZDNzkwMEI1QkEyQyAv
KiBGdW5jdGlvbkxvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDAyNTVERjcxMTAw
NUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDUyNTVE
RjczNTAwNUU4REY3IC8qIEZ1bmN0aW9uc0VBR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzc2MCw2
ICs0MjEzLDggQEAKIAkJCQk1QzU1RDcyQzIyODI3NDc3MDBCNUJBMkMgLyogaGFzaF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERkExQjA0MzhEMzAwMjM1NTUyIC8qIGhpc3Rv
Z3JhbV9tYWNyb3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg2MjU4MTkxOTgwMDg5NEUy
NCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzIyNTgxOTE5
ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE3NzFEQkZFOTk5
MDA2MDY2QjggLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTkzMjI4NEZDNDAw
MDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRDk2MUZD
RTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0aW9uSExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NzgwLDExICs0MjM1LDE0IEBACiAJCQkJNUMxREJDMzExQjA0Mzc1RjAwMjM1NTUyIC8qIEludGVy
bU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkZFMjI4MjZDQjMwMEI1QkEyQyAvKiBJ
bnRlcm1Ob2RlX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzA4MjI4MjZDQjMwMEI1
QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjlFMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwMTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTc3MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNl
Q0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NTIzNjExMzNBMDBGQzM5RTUgLyogSU9T
dXJmYWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY0MjU4MThENjkw
MDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVF
QkQ4RTFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxREI3OTY2MjQ5MUM4ODIwMDk4Mjg3OCAvKiBraHJwbGF0Zm9ybS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJDMzIxQjA0Mzc1RjAwMjM1NTUyIC8qIGxlbmd0aF9saW1pdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjAxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVu
Y3Rpb25zX3RhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTIsNiArNDI1MCw4IEBACiAJCQkJ
MzE1RUJERjExRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjZFMjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3NTI1ODE5MTk4MDA4OTRF
MjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE5MDFEQkZFQTEw
MDA2MDY2QjggLyogbWF0cml4X3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGMjFC
MDQzNkVDMDAyMzU1NTIgLyogTWVtb3J5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTks
OSArNDI1OSwyNCBAQAogCQkJCUEzMDMwNzhDMjMwNUY4RjAwMDJEQTk3MiAvKiBNZW1vcnlPYmpl
Y3RHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5ODIyMjg0RkI5MDAwMThGMkQ4IC8qIE1l
bW9yeU9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVEMUZDRTQ1MkQwMEFD
N0E4OSAvKiBNZW1vcnlQcm9ncmFtQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkw
MjU4MTkxOTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjA4MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUVBMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Nv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREQyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9mb3JtYXRfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUU0MjU4MThENjkw
MDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRUQwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlf
cG9vbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMEQyNTgxOEQ2QTAwODk0RTI0IC8qIG10
bF9yZW5kZXJfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVGMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRTI1ODE4
RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkYwOTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjkyMjgyNkI5RjAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcwQjIzMDVGNkI1MDAyREE5NzIgLyogbm9fZGVzdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MDcyMjgyNkNCMzAwQjVCQTJDIC8qIE5vZGVT
ZWFyY2guaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBO
b2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEQzIxRkNFNDRCRjAwQUM3QTg5IC8q
IG51bGxfZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2
RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTY2MjI4NEY3
OTYwMDE4RjJEOCAvKiBPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODIxLDYgKzQyOTYs
NyBAQAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQjMwMTUxMURFMzlGNDcwMEQyQzQwNSAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNUQyMzYxMTMzQTAwRkMzOUU1IC8qIFBi
dWZmZXJTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODMyNTgxOTE5ODAw
ODk0RTI0IC8qIFBpcGVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNTFCMDQzNkVD
MDAyMzU1NTIgLyogcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRTI5MUZDRjgw
OEMwMEFDN0E4OSAvKiBQTXVySGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjcyMjgy
NzQ3NzAwQjVCQTJDIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODM0LDkgKzQz
MTAsMTEgQEAKIAkJCQk1Q0IzMDRGMzFERTQxNjQ4MDBEMkM0MDUgLyogUHJvZ3JhbUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQjMwNEYyMURFNDE2NDgwMEQyQzQwNSAvKiBQcm9ncmFtSW1w
bF9tb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRFNjFGQ0U0NTJEMDBBQzdBODkgLyog
UHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDEyNTgx
OEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVF
MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxNUVCREJCMUZDRTQ0QkYwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmVHTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzgxRkNFNDRFNDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZUlt
cGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9n
cmFtUHJlbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NzcyMjgyNkI5RjAwQjVCQTJD
IC8qIFBydW5lRW1wdHlDYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTUyMjgyNkI5
RjAwQjVCQTJDIC8qIFBydW5lTm9PcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MUI2MURC
RkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQ0
LDEwICs0MzIyLDEzIEBACiAJCQkJNUMxREJFMDQxQjA0MzhEMzAwMjM1NTUyIC8qIHF1ZXJ5Y29u
dmVyc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTMyMURFMzlGMUEwMEQyQzQwNSAv
KiBRdWVyeUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGNDFERTQxNjQ4MDBEMkM0MDUg
LyogUXVlcnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVENDI1ODE4RDY5MDA4OTRF
MjQgLyogUXVlcnlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTdEMURCRkU5OTkwMDYw
NjZCOCAvKiBxdWVyeXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3QzIyODI2QjlG
MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzQzQ5QzEzMjU1REY4NjUwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRl
ZFRvU3RydWN0dXJlZEJ1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYxMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMURCRTA2MUIwNDM4RDMwMDIzNTU1MiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2NUMyMjgyNkI5RjAwQjVCQTJDIC8qIFJlZ2VuZXJhdGVTdHJ1Y3RO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUEyMjgyNkI5RjAwQjVCQTJDIC8qIFJl
bW92ZUFycmF5TGVuZ3RoTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUQ3QkRGMTI0MzJD
Q0M0MDBFMDE1MDMgLyogUmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKQEAgLTM4NjEsMTEgKzQzNDIsMTMgQEAKIAkJCQk1Q0IzMDEzNDFERTM5RjFBMDBEMkM0MDUg
LyogUmVuZGVyYnVmZmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY2MURFNDE2NDgw
MEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRG
NTFERTQxNjQ4MDBEMkM0MDUgLyogUmVuZGVyYnVmZmVySW1wbF9tb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRjgxRkVERTI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGODFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRp
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTdDMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5k
ZXJlckNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8q
IFJlbmRlcmVyRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzgxREUzOUYxQTAwRDJD
NDA1IC8qIFJlbmRlcmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM2MURFMzlGMUEw
MEQyQzQwNSAvKiByZW5kZXJlcmdsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
MjI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMxQTI1NURGODZGMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMyMjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFj
ZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcwNzIzMDVG
NjM2MDAyREE5NzIgLyogUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zODc2LDE2ICs0MzU5LDIyIEBACiAJCQkJMzE1RUJERjkxRkNFNDUyRDAwQUM3QTg5IC8q
IFJlc291cmNlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZGNjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1
NzIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0aW9uRXhwcmVzc2lvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlQ2Fz
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjkyMzA1RjVFRTAwMkRB
OTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEzMDMwNkY4MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlRGZkeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2NEUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVEb1doaWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzU1RDY5MTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUVsc2VC
bG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjlFMjI4MjZCOUYwMEI1QkEyQyAvKiBS
ZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVyU3RvcmFnZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxNDI1NURGODY1MDA1RThERjcgLyogUmV3
cml0ZUludGVycG9sYXRlQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjZCMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODQyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjY4MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0
ZWRBc3NpZ25Ub1N3aXp6bGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkxNTIzQ0ZDQjc3
MDAzNzU2NTcgLyogUmV3cml0ZVJvd01ham9yTWF0cmljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDNTVENjRGMjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjg3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlVGV4ZWxG
ZXRjaE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzkyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2ODQyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3Jp
dGVVbmFyeU1pbnVzT3BlcmF0b3JJbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzBBMjI4
MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4OTYsMTIgKzQzODUsMTUgQEAKIAkJCQk1QzFEQkYyODFCMDQzOEQzMDAyMzU1NTIgLyogU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxM0ExREUzOUYxQTAwRDJDNDA1IC8qIFNh
bXBsZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjkxREU0MTY0ODAwRDJDNDA1IC8q
IFNhbXBsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEOTI1ODE4RDY5MDA4OTRF
MjQgLyogU2FtcGxlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OEUyMjgyNkI5RjAw
QjVCQTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTMwMzA3MjkyMzA1RjdDNDAwMkRBOTcyIC8qIFNlbWFwaG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTMwMzA3OEQyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcyQjIzMDVGODAwMDAyREE5NzIgLyogU2VtYXBob3JlSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2N0QyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFy
YXRlQXJyYXlDb25zdHJ1Y3RvclN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk2MjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjczMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY2MjU4MTkxOTcwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY3MDIyODI2QjlGMDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjRDMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkw
MzIzQ0ZDNUEzMDAzNzU2NTcgLyogc2VyaWFsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5
MTAsMTQgKzQ0MDIsMTcgQEAKIAkJCQk1Q0IzMDEzQzFERTM5RjFBMDBEMkM0MDUgLyogU2hhZGVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEZBMURFNDE2NDgwMEQyQzQwNSAvKiBTaGFk
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2NDI0OTFDODc2MDA5ODI4NzggLyog
U2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMTEyNTgxOEQ2QTAwODk0RTI0
IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjUyNDkxQzg3NjAwOTgy
ODc4IC8qIFNoYWRlclZhcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjYxMjI4MjZCOUYw
MEI1QkEyQyAvKiBTaW1wbGlmeUxvb3BDb25kaXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTVFQkRGMDFGQ0U0NTJEMDBBQzdBODkgLyogU2l6ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGNkYyNTgxOTE5ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBM0M0OUMwMzI1NURGNzE5MDA1RThERjcgLyogU29mdExpbmtpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMwMTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUIyMjgyNkI5RjAwQjVCQTJDIC8q
IFNwbGl0U2VxdWVuY2VPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJGMkMxQjA0
MzhEMzAwMjM1NTUyIC8qIFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzRTFERTM5
RjFBMDBEMkM0MDUgLyogU3RhdGVNYW5hZ2VyR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RjFEMjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0NEODE4MTFEQkZFOTk5MDA2MDY2QjggLyogU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDRGQjFERTQxNjQ4MDBEMkM0MDUgLyogU3RyZWFtUHJvZHVjZXJJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE5MjFEQkZFQTEwMDA2MDY2QjggLyogc3RyaW5nX3V0aWxzLmggaW4g
SGVhZGVycyAqLywKQEAgLTM5MjUsMTIgKzQ0MjAsMTUgQEAKIAkJCQk1QzFEQkYyRjFCMDQzOEQz
MDAyMzU1NTIgLyogU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDAxREUzOUYx
QTAwRDJDNDA1IC8qIFN1cmZhY2VHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkQxREU0
MTY0ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
NzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2RTYyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGN0UyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwRDIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEODUxRkNFNDQzNjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1
ZUlkLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRCOTFGQ0U0NEJGMDBBQzdBODkgLyogU3lu
Y0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDQjFGQ0U0NEU0MDBBQzdBODkgLyogU3lu
Y0ltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURCMjU4MThENjkwMDg5NEUyNCAvKiBT
eW5jTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEzMzFDNzFFQTVFRDVGMDBGRDIyMDMgLyog
c3lzdGVtX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk5QzIyODRGQzc1MDAxOEYy
RDggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFCMTU3MjIyMzZCODAzMzAw
Q0FBNEZEIC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzOSwx
OCArNDQzNywyMyBAQAogCQkJCTVDQjMwMTQyMURFMzlGMUEwMEQyQzQwNSAvKiBUZXh0dXJlR0wu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAwMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJl
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkUxREU0MTY0ODAwRDJDNDA1IC8qIFRl
eHR1cmVJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY2MjU4MThENjkwMDg5
NEUyNCAvKiBUZXh0dXJlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRGNDFGQ0U0NTJE
MDBBQzdBODkgLyogVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNzFCMDQzNkVD
MDAyMzU1NTIgLyogdGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkxMjU4MTkxOTgw
MDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzIw
MjMwNUY3QzQwMDJEQTk3MiAvKiB0cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMzMxRTIx
RUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFE
QkYzNDFCMDQzOEQzMDAyMzU1NTIgLyogVHJhbnNmb3JtRmVlZGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwMTQ0MURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMjFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3Jt
RmVlZGJhY2tJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMTFERTQxNjQ4MDBEMkM0
MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRURGMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2RDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFCMjU4MTkwQ0EwMDg5NEUyNCAvKiBU
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFGMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJEOUQxRkNFNDQzNjAwQUM3QTg5IC8qIFRyYW5zbGF0b3JWdWxrYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2ODYyMjgyNkI5RjAwQjVCQTJDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDEwLDExICs0NTEzLDEzIEBACiAJCQkJNUMxREJGNDAx
QjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0Iz
MDE0NjFERTM5RjFBMDBEMkM0MDUgLyogVmVydGV4QXJyYXlHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzA1MDMxREU0MTY0ODAwRDJDNDA1IC8qIFZlcnRleEFycmF5SW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5TXRsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkY0MjFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0
cmlidXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwMDIyODI2Q0IzMDBCNUJBMkMgLyog
VmlzaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMUI2MTgzMjMwQjc0N0YwMDE2MTBENyAvKiBX
aW5kb3dTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RTIzNjExMzNBMDBG
QzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREZB
MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2NzUyMjgyNkI5RjAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTUxMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2gu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTQxMzcsMTQgKzQ2NDIsMTcgQEAKIAkJCWZpbGVz
ID0gKAogCQkJCUEzQzQ5QzBFMjU1REY4NUYwMDVFOERGNyAvKiBBZGRBbmRUcnVlVG9Mb29wQ29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkE5MjI4MjZCQzgwMEI1QkEyQyAv
KiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkY3NDI1ODE5MTk4MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ3MjEyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwN0EwMjMwNjI1QzYwMDJEQTk3MiAvKiBhbmRyb2lk
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDMxQjA0MzhEMzAwMjM1NTUyIC8q
IGFuZ2xldHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjAxQjA0MzZFQzAwMjM1
NTUyIC8qIGFuZ2xldXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2
MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZBQTIyODI2QkM4MDBCNUJBMkMgLyogQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc4MjU4MTkxOTgwMDg5NEUyNCAvKiBBc3RI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQzIyMUIwNDM3NUYwMDIzNTU1MiAv
KiBBU1RNZXRhZGF0YUhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDUxQjA0MzhE
MzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMw
MTE2MURFMzlGMUEwMEQyQzQwNSAvKiBCbGl0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5NjEyMjg0Rjc5NjAwMThGMkQ4IC8qIEJsb2JDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzFEQkMyNDFCMDQzNzVGMDAyMzU1NTIgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00MTUzLDYgKzQ2NjEsNyBAQAogCQkJCTVDMURCREQ4MUIwNDM4RDMwMDIzNTU1MiAv
KiBCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMTgxREUzOUYxQTAwRDJDNDA1
IC8qIEJ1ZmZlckdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMzNFOEU4MjREMEQxRUIwMDIz
MDlBQyAvKiBCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUwMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxMzE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxREJDMjgxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkQ4NDFGQ0U0NDM2MDBBQzdBODkg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDE2
MSwxMiArNDY3MCwxNCBAQAogCQkJCTVDMURCRERBMUIwNDM4RDMwMDIzNTU1MiAvKiBDYXBzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFDMjI4MjZCQzgwMEI1QkEyQyAvKiBDbGFtcEZy
YWdEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZBRDIyODI2QkM4MDBCNUJBMkMg
LyogQ2xhbXBQb2ludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGQTIyNTgxQUQw
NDAwODk0RTI0IC8qIGNsZWFyLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkQxRkNF
NDRCRjAwQUM3QTg5IC8qIENsZWFyTXVsdGl2aWV3R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE1RUJEOEMxRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDMURCRERDMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExQTFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGls
ZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyog
Q29tcGlsZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGMjI1NURGNjk3MDA1RThE
RjcgLyogY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuY2MgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRERjFCMDQzOEQzMDAyMzU1NTIgLyogQ29uZmlnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q4MUIwMURCRkVBNUMwMDYwNjZCOCAvKiBDb25zdGFudFVuaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDE3Nyw2ICs0Njg4LDggQEAKIAkJCQkzMTNCQ0U1ODIzNjExMzNBMDBGQzM5RTUg
LyogQ29udGV4dEVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUMxREUzOUYxQTAw
RDJDNDA1IC8qIENvbnRleHRHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERDFERTQx
NjQ4MDBEMkM0MDUgLyogQ29udGV4dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MDYyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4gU291cmNlcyAq
LywKIAkJCQk1Q0NENTk4RjIyODRGQzQwMDAxOEYyRDggLyogY29weWltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQ0Q4MTcyMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MTkyLDYgKzQ3MDUsOCBAQAogCQkJCTMxMDEyRTI4MThCOTdCOUIwMDM5
MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRjYzMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3QjI1ODE5MTk4
MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTVFQkRCRTFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdM
X2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERTgxQjA0MzhEMzAwMjM1NTUy
IC8qIERpc3BsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMUMyNTVERjg4OTAwNUU4
REY3IC8qIERpc3BsYXlBcHBsZV9hcGkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTk5LDEyICs0
NzE0LDE0IEBACiAJCQkJMzEzQkNFNjEyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUUxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRFMTFERTQxNjQ4MDBEMkM0MDUgLyogRGlz
cGxheUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0
IC8qIERpc3BsYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRDQzFGQ0U0NEU0MDBB
QzdBODkgLyogZHJpdmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzlEMjMw
NjI1NjUwMDJEQTk3MiAvKiBkcml2ZXJfdXRpbHNfbWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NkVCMDFDMUUyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21lbnRUZXN0c09wdGltaXphdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGNzI1NURGNkRGMDA1RThERjcgLyogRUdM
UmV1c2FibGVTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZBMjI4NEY3OTYwMDE4
RjJEOCAvKiBFR0xTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY4MjU1REY2RTEw
MDVFOERGNyAvKiBFR0xTeW5jSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RDk3MUZDRTQ0MzYwMEFDN0E4OSAvKiBlbXVsYXRlZF9idWlsdGluX2Z1bmN0aW9uc19obHNsX2F1
dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjEyMjgyNkJDODAwQjVCQTJDIC8q
IEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAz
MDZGQzIzMDVGNUVFMDAyREE5NzIgLyogRW11bGF0ZU11bHRpRHJhd1NoYWRlckJ1aWx0aW5zLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDI0MiwxMSArNDc1OSwxNCBAQAogCQkJCTVDMURCREYzMUIw
NDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFE
QkRGNTFCMDQzOEQzMDAyMzU1NTIgLyogRnJhbWVidWZmZXJBdHRhY2htZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTI3MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjBGMjU4MThENkEwMDg5NEUyNCAvKiBGcmFtZUJ1
ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTZFQTBENjkzMjM1MTVBNUMwMEI4NjUxRiAv
KiBGcmFtZUNhcHR1cmVfbW9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZFNDIyODI2
Qzc5MDBCNUJBMkMgLyogRnVuY3Rpb25Mb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlDMDIyNTVERjcxNDAwNUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0M0OUMwNzI1NURGNzM5MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTJCMURFMzlGMUEwMEQyQzQwNSAvKiBGdW5jdGlvbnNHTC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBNDI1ODFBRDA0MDA4OTRFMjQgLyogZ2VuX2luZGlj
ZXMubWV0YWwgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBMzI1ODFBRDA0MDA4OTRFMjQgLyog
Z2VuX21pcG1hcC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZCMjI4NEY3OTYwMDE4
RjJEOCAvKiBHTEVTMVJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTYzMjI4
NEY3OTYwMDE4RjJEOCAvKiBHTEVTMVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMUJB
QUIxMURGQjZGMzMwMDI5MDZCQiAvKiBnbG9iYWxfc3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MjU0LDYgKzQ3NzQsOCBAQAogCQkJCUEzRDMyOTBCMjNDRkNCNEQwMDM3NTY1NyAvKiBnbHNs
YW5nX3RhYl9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREY4MUIwNDM4RDMw
MDIzNTU1MiAvKiBIYW5kbGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
ODYxRkNFNDQzNjAwQUM3QTg5IC8qIEhhc2hOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY4MjI1ODE5MTk4MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGOEIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q4MTc2MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk5MTIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3JtYXRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNUVCRDgzMUZDRTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0
aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyNzAsMTAgKzQ3OTIsMTMgQEAKIAkJCQk1
QzFEQkMzMDFCMDQzNzVGMDAyMzU1NTIgLyogSW50ZXJtTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QzU1RDcwOTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZV91dGlsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDNTVENzA0MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOUQyNTgxQTNDMjAwODk0
RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDIyMjgy
NkNCMzAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVD
Q0Q1OTc5MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTVDMjM2MTEzM0EwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNl
RUFHTC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUVEMjU4MThENjkwMDg5NEUyNCAvKiBJ
T1N1cmZhY2VTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEOUMxRkNFNDQz
NjAwQUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjZDMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEVGMURFNDE2NDgwMEQyQzQwNSAvKiBsb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTk1MjI4NEZDNDAwMDE4RjJEOCAvKiBs
b2FkaW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjgxLDEyICs0ODA2LDI3IEBACiAJCQkJ
MzE1RUJERTgxRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QjgxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEJBMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5j
dGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjY5MjU4MTkx
OTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDcy
MTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDcyNTIyODI3NDc3MDBCNUJBMkMgLyogbWF0cml4X3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDMURCQkYxMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NjQyMjg0Rjc5NjAwMThGMkQ4IC8qIE1lbW9yeU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDc4QjIzMDVGOEYwMDAyREE5NzIgLyogTWVtb3J5T2Jq
ZWN0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERjMxRkNFNDUyRDAwQUM3QTg5IC8q
IE1lbW9yeVByb2dyYW1DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2MDI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEMyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9jb21tb24u
bW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFMTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zv
cm1hdF90YWJsZV9hdXRvZ2VuLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRDUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkY4MUZGMDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYyMjU4MThENjkwMDg5NEUyNCAv
KiBtdGxfcmVuZGVyX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVG
MDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkY4MUZFRUMyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGlscy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkI2MjI4MjZCQzgwMEI1QkEyQyAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRCRjFGQ0U0NEJGMDBBQzdBODkgLyog
bnVsbF9mdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5NjkyMjg0Rjc5NjAw
MThGMkQ4IC8qIE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDMwNiw2ICs0ODQ2LDcg
QEAKIAkJCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDQ0Q1OTZGMjI4NEY5NTUwMDE4RjJEOCAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTNCQ0U1NjIzNjExMzNBMDBGQzM5RTUgLyog
UGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjcxMjU4MTkx
OTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRGRTFC
MDQzOEQzMDAyMzU1NTIgLyogUGxhdGZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJF
MjgxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MzE4LDkgKzQ4NTksMTEgQEAKIAkJCQk2RUQ3QkRGNjI0MzJDRDYyMDBFMDE1MDMgLyogUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkYxREUzOUYxQTAw
RDJDNDA1IC8qIFByb2dyYW1HTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFQzFGQ0U0
NTJEMDBBQzdBODkgLyogUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNUVCREU1MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkExRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1Q
aXBlbGluZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQjAxQzI0MjQ3NzI3QzIwMEU1MEIz
NSAvKiBQcm9ncmFtUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDZCNzIyODI2QkM4MDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkI4MjI4MjZCQzgwMEI1QkEyQyAvKiBQcnVuZU5vT3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQ0Q4MUI1MURCRkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJU
eXBlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMjgsOSArNDg3MSwxMSBAQAogCQkJCTVDMURC
RTAzMUIwNDM4RDMwMDIzNTU1MiAvKiBxdWVyeWNvbnZlcnNpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDQjMwMTMxMURFMzlGMUEwMEQyQzQwNSAvKiBRdWVyeUdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgwMjI4NEZCOTAwMDE4RjJEOCAvKiBRdWVyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFREMyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxN0MxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjkyMjgyNkJDODAwQjVCQTJDIC8qIFJlY29y
ZENvbnN0YW50UHJlY2lzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzBDMjU1REY4
NUYwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRlZFRvU3RydWN0dXJlZEJ1
ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0IC8q
IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCQTIy
ODI2QkM4MDBCNUJBMkMgLyogUmVnZW5lcmF0ZVN0cnVjdE5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkJCMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVBcnJheUxlbmd0aE1ldGhv
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUQ3QkRGMDI0MzJDQ0M0MDBFMDE1MDMgLyogUmVt
b3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM0MiwxMSAr
NDg4NywxMyBAQAogCQkJCTVDNTVENkMwMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVVbnJlZmVy
ZW5jZWRWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJFMDcxQjA0MzhEMzAw
MjM1NTUyIC8qIFJlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzMzFE
RTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwNEY3MURFNDE2NDgwMEQyQzQwNSAvKiByZW5kZXJlcl91dGlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk3QTIyODRGQTgzMDAxOEYyRDggLyogUmVuZGVyZXJD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNTkyMzYxMTMzQTAwRkMzOUU1IC8qIFJl
bmRlcmVyRUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNzFERTM5RjFBMDBEMkM0
MDUgLyogUmVuZGVyZXJHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNTFERTM5RjFB
MDBEMkM0MDUgLyogcmVuZGVyZXJnbF91dGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkVFODI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTNDNDlDMTkyNTVERjg2QzAwNUU4REY3IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFy
eWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUIwMUMyMTI0NzcyN0E5MDBFNTBCMzUgLyog
UmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMw
NzA1MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDM1NCwyNyArNDkwMSwzNiBAQAogCQkJCTVDMURCRjI1MUIwNDM4RDMw
MDIzNTU1MiAvKiBSZXNvdXJjZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2
RkIyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVBdG9taWNDb3VudGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDMTIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0
aW9uRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTIyNTgxOTE5ODAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEzMDMwNkZEMjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFy
cmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNkZBMjMwNUY1RUUwMDJEQTk3MiAvKiBS
ZXdyaXRlRGZkeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMjIyODI2QkM4MDBCNUJB
MkMgLyogUmV3cml0ZURvV2hpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzMyMjgy
NkJDODAwQjVCQTJDIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM0MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVy
U3RvcmFnZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjdGMjU4MTkxOTgwMDg5
NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTNDNDlDMEQyNTVERjg1RjAwNUU4REY3IC8qIFJld3JpdGVJbnRlcnBvbGF0ZUF0T2Zmc2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdy
aXRlS2V5d29yZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzAyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc2MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM1MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0ZWRBc3NpZ25Ub1N3aXp6
bGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzRDMyOTE0MjNDRkNCNzcwMDM3NTY1NyAvKiBS
ZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDNjIy
ODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVN0cnVjdFNhbXBsZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQ0QwMENDMjQ5MTk2QTUwMDQ4NkYyNyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnNP
bGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzcyMjgyNkJDODAwQjVCQTJDIC8qIFJl
d3JpdGVUZXhlbEZldGNoT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjgwMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzgyMjgyNkJDODAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1p
bnVzT3BlcmF0b3JGbG9hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDOTIyODI2QkM4
MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZGQzIyODI2Q0IzMDBCNUJBMkMgLyogUnVuQXRUaGVFbmRPZlNoYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYyNzFCMDQzOEQzMDAyMzU1NTIgLyogU2FtcGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzOTFERTM5RjFBMDBEMkM0MDUgLyogU2Ft
cGxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUY3MjU4MThENjkwMDg5NEUyNCAv
KiBTYW1wbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0EyMjgyNkJDODAwQjVC
QTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMzAzMDcyODIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBob3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEzMDMwNzhBMjMwNUY4RjAwMDJEQTk3MiAvKiBTZW1hcGhvcmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQjIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVB
cnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZD
QzIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVBcnJheUluaXRpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRjhGMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUYyNTgxOTE5NzAw
ODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0QyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRGVjbGFyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNFMjI4MjZCQzgwMEI1QkEyQyAvKiBT
ZXBhcmF0ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q1OTg0MjI4NEZCRTcwMDE4RjJEOCAvKiBzaGExLmNjIGluIFNvdXJjZXMgKi8sCkBAIC00
MzgyLDYgKzQ5MzgsNyBAQAogCQkJCTVDQjMwMTNCMURFMzlGMUEwMEQyQzQwNSAvKiBTaGFkZXJH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk4MTIyODRGQjkwMDAxOEYyRDggLyogU2hh
ZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxMjI1ODE4RDZBMDA4
OTRFMjQgLyogU2hhZGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDExQjA0Mzc1
RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0Yy
MjgyNkJDODAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUM1NUQ2RDAyMjgyNkJDODAwQjVCQTJDIC8qIFNwbGl0U2VxdWVuY2VPcGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzOTMsMTEgKzQ5NTAsMTQgQEAKIAkJCQk1QzFEQkYy
RTFCMDQzOEQzMDAyMzU1NTIgLyogU3VyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDEzRjFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEZDMURFNDE2NDgwMEQyQzQwNSAvKiBTdXJmYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkVFMzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkUzMjI4MjZDNzkwMEI1QkEyQyAvKiBTeW1ib2wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkEyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MEUyMjgyNzQxNDAwQjVCQTJDIC8qIFN5
bWJvbFRhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQUUxRkNFNDQz
NjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1ZUlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
REMwMUZDRTQ0QkYwMEFDN0E4OSAvKiBTeW5jR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4
MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
M0M0OUMyMTI1NURGOTczMDA1RThERjcgLyogc3lzdGVtX3V0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQTMzMUM2MUVBNUVENUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHNfbWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzMwMjI4Mjc0NzcwMEI1QkEyQyAvKiBzeXN0ZW1fdXRp
bHNfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDA5LDEzICs0OTY5LDE4IEBACiAJCQkJ
MzE1RUJEOTkxRkNFNDQzNjAwQUM3QTg5IC8qIFRleHR1cmVGdW5jdGlvbkhMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNCMzAxNDExREUzOUYxQTAwRDJDNDA1IC8qIFRleHR1cmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRGRjFERTQxNjQ4MDBEMkM0MDUgLyogVGV4dHVyZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRjUyNTgxOEQ2OTAwODk0RTI0IC8qIFRl
eHR1cmVNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMjFGQ0U0NTJEMDBBQzdBODkg
LyogVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQkY2MUIwNDM2RUMwMDIzNTU1
MiAvKiB0bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjZEMjU4MTkxOTgwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJGMzMxQjA0
MzhEMzAwMjM1NTUyIC8qIFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwMTQzMURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRUYzMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2QzE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MUMyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRp
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJENzgxRkNFNDQzNjAwQUM3QTg5IC8qIFRy
YW5zbGF0b3JWdWxrYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDQxQjA0Mzc1RjAw
MjM1NTUyIC8qIFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQxMjI4MjZCQzgw
MEI1QkEyQyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NDY2LDEwICs1MDMxLDEzIEBACiAJCQkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjNGMUIwNDM4RDMwMDIzNTU1MiAv
KiBWZXJ0ZXhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDE0NTFERTM5RjFBMDBE
MkM0MDUgLyogVmVydGV4QXJyYXlHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFOTI1
ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkY0MTFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRkEwMjU4MUFEMDQwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTMxQjYxODQyMzBCNzQ3RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZh
Y2VDR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUIxNTcyMzIzNkI4MkJCMDBDQUE0RkQgLyog
V2luZG93U3VyZmFjZUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFNzFGQ0U0NTJE
MDBBQzdBODkgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg3
MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZENTIyODI2QkM4MDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk1MDIyODRFQ0QxMDAxOEYyRDggLyogeHhoYXNoLmMg
aW4gU291cmNlcyAqLywKIAkJCSk7CkBAIC00NTUyLDYgKzUxMjAsMTcgQEAKIAkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAzMUNE
RkRFRjI0OTE3Rjg5MDA0ODZGMjcgLyogQU5HTEUtc3RhdGljLnhjY29uZmlnICovOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiJChERUJVR19ERUZJTkVTKSIsCisJCQkJCUxJQkdMRVNWMl9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJTElCQU5HTEVfSU1QTEVNRU5UQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9PUEVOR0wsCisJ
CQkJCUFOR0xFX0VOQUJMRV9HTFNMLAorCQkJCQlBTkdMRV9FTkFCTEVfRVNTTCwKKwkJCQkJR0xf
U0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJR0xFU19TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJ
CQlBTkdMRV9FTkFCTEVfTUVUQUwsCisJCQkJKTsKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKQEAgLTQ1NzQsNiArNTE1MywxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkw
MDQ4NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RF
RklORVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9J
TVBMRU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5B
QkxFX0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJF
Q0FUSU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJM
RV9NRVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKQEAgLTQ1ODEs
NiArNTE3MSwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4NkYyNyAvKiBBTkdMRS1z
dGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19QUkVQUk9D
RVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKKwkJCQkJTElC
R0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0dMU0wsCisJCQkJCUFO
R0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJCQlHTEVT
X1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9NRVRBTCwKKwkJCQkpOwog
CQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcK
aW5kZXggNmNiYmUxN2JlZjE5YTg1ODVjZGUxYjljNGVjYmIwNjk4NjRlNTFkNC4uYzU0ZDI3M2Ew
MjgyOGExYjZjNWQ3OTg3OTYzMjIxM2UyMGVmZThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29u
ZmlnCkBAIC00LDcgKzQsNyBAQAogUFJPRFVDVF9OQU1FID0gQU5HTEUtc2hhcmVkOwogRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CiAKLUFOR0xFX09USEVSX0xERkxBR1MgPSAtYWxsb3dhYmxlX2Ns
aWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9ydCAtZnJhbWV3
b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBGb3VuZGF0
aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKSAkKEFOR0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CitBTkdMRV9PVEhF
Ul9MREZMQUdTID0gLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZSAtYWxsb3dhYmxlX2NsaWVudCBX
ZWJDb3JlVGVzdFN1cHBvcnQgLWZyYW1ld29yayBRdWFydHpDb3JlIC1mcmFtZXdvcmsgQ29yZUdy
YXBoaWNzIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3
b3JrIE1ldGFsICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKSAkKEFO
R0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9u
ZW9zID0gLWx6OwogQU5HTEVfT1RIRVJfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKEFOR0xF
X09USEVSX0xERkxBR1NfaXBob25lb3MpOwogQU5HTEVfT1RIRVJfTERGTEFHU193YXRjaG9zID0g
JChBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9uZW9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NoYW5n
ZXMuZGlmZgppbmRleCBhODMwMTRhZWM4M2VmZjM5YTJjZmZmYWE0ZmQ3MThjZmRjNDQ0MWIwLi5h
YWQwY2ZmZmJhMWNiYWM4NWUzNjM5OWFlNzhjYzc4ZDlkMWQyYjc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY2hhbmdlcy5kaWZmCkBAIC0xMCw2ICsxMCwxOTggQEAgaW5kZXggNmQ5MDQwYS4uYzhj
OWI2YyAxMDA2NDQKICAvdG9vbHMvY2xhbmcKICAvdG9vbHMvZmxleC1iaXNvbi9saW51eC9iaXNv
bgogIC90b29scy9mbGV4LWJpc29uL2xpbnV4L2ZsZXgKK2RpZmYgLS1naXQgYS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAoraW5kZXgg
ZTEwZDExMi4uNmY2YTcyYiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmgKKysrKyBiL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK0BAIC03Myw2ICs3Myw5IEBA
IGVudW0gU2hTaGFkZXJPdXRwdXQKKyAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wgdG8g
YmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVkIHRv
IE1ldGFsCisgICAgIC8vIGxhdGVyLgorICAgICBTSF9HTFNMX01FVEFMX09VVFBVVCA9IDB4OEI0
QywKKysKKysgICAgLy8gT3V0cHV0IGZvciBNU0wKKysgICAgU0hfTVNMX01FVEFMX09VVFBVVCA9
IDB4OEI0RCwKKyB9OworIAorIC8vIENvbXBpbGUgb3B0aW9ucy4KK2RpZmYgLS1naXQgYS9pbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRs
LmgKK2luZGV4IGZlNWU4YWIuLjlhMGJlZTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3BsYXRmb3Jt
L0ZlYXR1cmVzTXRsLmgKKysrKyBiL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaAorQEAg
LTI3LDcgKzI3LDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAg
ICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBvdGhl
ciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFN1cHBvcnQgZXhwbGljaXQg
bWVtb3J5IGJhcnJpZXIKKy0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisrICAgIEZlYXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRf
bWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZXhwbGlj
aXQgbWVtb3J5IGJhcnJpZXIiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFNvbWUgcmVuZGVyZXIg
Y2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFwbHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgor
QEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIg
ZGlzcGF0Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OworIAorICAgICAvLyBmcmFnbWVudCBz
dGVuY2lsIG91dHB1dCBzdXBwb3J0CistICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsi
aGFzX3NoYWRlcl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKysgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHN0ZW5jaWwgb3V0cHV0IGZyb20gZnJh
Z21lbnQgc2hhZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJz
fTsKKyAKK0BAIC01OSw2ICs1OSwxMCBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0
QmFzZQorICAgICBGZWF0dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUg
cmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZtZW1iZXJzfTsKKyAKKysgICAg
RmVhdHVyZSBhbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YSA9IHsKKysgICAgICAgICJhbGxvd19p
bmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CisrICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHVzaW5nIGlubGluZSBjb25zdGFudCBk
YXRhIGZvciBzbWFsbCBjbGllbnQgdmVydGV4IGRhdGEiLCAmbWVtYmVyc307CisrCisgICAgIC8v
IE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBhcmUgbm90IHN1cHBy
b3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCisgICAgIC8vIHRoZXkgYXJlIHN1cHByb3Rl
ZDoKKyAgICAgRmVhdHVyZSBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CitA
QCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJ3aGVyZWFzIG90aGVycyBzdWNoIGFzIG1hY09TIGRvbid0IiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKysgICAgRmVhdHVyZSBhbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUg
PSB7CisrICAgICAgICAiYWxsb3dfcnVudGltZV9zYW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAmbWVt
YmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dTYW1wbGVyQ29tcGFyZUdyYWRpZW50ID0gewor
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxl
X2NvbXBhcmUgd2l0aCBncmFkaWVudHMiLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxs
b3dTYW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxlX2NvbXBhcmUgd2l0aCBsb2Qi
LCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFs
bG93X2J1ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgYnVmZmVyIHJlYWQgJiB3cml0ZSBpbiB0aGUgc2FtZSBzaGFkZXIiLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKysKKyAgICAgRmVhdHVyZSBhbGxv
d011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlID0geworICAgICAgICAgImFsbG93X21zYWFfc3Rv
cmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAg
ICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNh
bWUgcGFzcyIsICZtZW1iZXJzfTsKK0BAIC03NSwxNCArOTQsMjcgQEAgc3RydWN0IEZlYXR1cmVz
TXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlwc19wZXJfcGFz
cyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICJUaGUgcmVuZGVy
ZXIgc3VwcG9ydHMgZ2VuZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJl
cnN9OworIAorKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJmb3JjZV9k
MjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5j
aWw4IGZvcm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUg
YnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQnJlYWtpbmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24i
LCAmbWVtYmVyc307CisrCisgICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewor
LSAgICAgICAgImZvcmNlX2J1ZmZlcl9ncHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCistICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBi
dWZmZXIncyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBtZW1vcnkgKHN1Y2gg
YXMgIgorLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9u
IGZvciBidWZmZXJzLiIsCisrICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVh
dHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorKyAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBz
dXBwb3J0IGJvdGggYnVmZmVyJyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBt
ZW1vcnkgKHN1Y2ggYXMgIgorKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9y
eSBhbGxvY2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKy0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9y
Y2VfZDI0czhfYXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcmNlIERlcHRoMjRT
dGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwgJm1lbWJlcnN9OworKyAgICBGZWF0dXJl
IGZvcmNlTm9uQ1NCYXNlTWlwbWFwR2VuZXJhdGlvbiA9IHsKKysgICAgICAgICJmb3JjZV9ub25f
Y3NfbWlwbWFwX2dlbiIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAg
ICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBDb21wdXRlIFNoYWRlciBiYXNlZCBt
aXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgorKyAgICAgICAgImJhc2VkIG1pcG1h
cCBnZW5lcmF0aW9uIG1pZ2h0IGNhdXNlIEdQVSBoYW5nIG9uIHNvbWUgb2xkZXIgaU9TIGRldmlj
ZXMuIiwKKysgICAgICAgICZtZW1iZXJzfTsKKysKKysgICAgRmVhdHVyZSBlbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2sgPSB7CisrICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAiVHVybiB0aGlzIG9uIHRv
IGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBhIDItcGFzcyBWUyBmb3Ig
R0xFUzMuIiwgJm1lbWJlcnN9OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwIGIvc3JjL2NvbW1vbi9Qb29sQWxsb2Mu
Y3BwCitpbmRleCAyN2RkOTMwLi4zYmRjYzMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuY3BwCisrKysgYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5jcHAKK0BAIC0zMzUsNyArMzM1
LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQorIHZvaWQgQWxsb2NhdGlvbjo6Y2hl
Y2tBbGxvY0xpc3QoKSBjb25zdAorIHsKKyAgICAgZm9yIChjb25zdCBBbGxvY2F0aW9uICphbGxv
YyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1QcmV2QWxsb2MpCistICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKKysgICAgICAgIGFsbG9jLT5jaGVja0FsbG9jKCk7CisgfQorIAor
IH0gIC8vIG5hbWVzcGFjZSBhbmdsZQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vUG9vbEFsbG9j
LmggYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCitpbmRleCA2OTI5OTJjLi5jZDI2NmEwIDEwMDY0
NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuaAorKysrIGIvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaAorQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQWxsb2NhdGlvbgorICNlbmRpZgorICAgICB9
CisgCistICAgIHZvaWQgY2hlY2soKSBjb25zdAorKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25z
dAorICAgICB7CisgICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwga0d1YXJkQmxv
Y2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFy
ZCgpLCBrR3VhcmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIGIvc3JjL2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGls
cy5oCitpbmRleCA1NWViYjdhLi44M2FiNTMyIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCisrKysgYi9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxz
LmgKK0BAIC0xNSwyNCArMTUsMzIgQEAKKyAKKyAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1Qgb25s
eSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CisgCisrI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUg
MyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisgLy8gYXZhaWxh
YmxlOgorLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAgICAg
ICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBp
T1MgaU9TVmVyLCAqKQorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0
aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcworIC8v
IGF2YWlsYWJsZToKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFjVmVy
LCBtYWNDYXRhbHlzdFZlcikgXAorICAgICAgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1h
Y0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9D
STogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4g
dmVyaW9ucyBpcworKy8vIGF2YWlsYWJsZToKKysjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJ
TEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorKyAgICAgICAgQGF2YWlsYWJsZSht
YWNDYXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKKyAjZWxzZQorICMgICAg
ZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwg
aU9TVmVyKSBcCisgICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NW
ZXIpCistLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhl
IDIgcGxhdGZvcm1zIChPU1gvQ2F0YWx5c3QpIG1pbiB2ZXJpb25zIGlzCistLy8gYXZhaWxhYmxl
OgorKworICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIsIG1hY0Nh
dGFseXN0VmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgKikKKysjICAgIGRlZmluZSBBTkdM
RV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShp
T1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKyAjZW5kaWYKKyAKKyAvLyBBTkdMRV9BUFBMRV9B
VkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9pT1Mp
IG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKKy0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YSShtYWNWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIs
ICopCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpIFwK
KysgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAq
KQorKworKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JOiBjaGVjayBpZiBhIHBhcnRpY3VsYXIg
aU9TIHZlcnNpb24gaXMgYXZhaWxhYmxlCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCisgCisgI2Vu
ZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvc3JjL2NvbW1vbi9kZWJ1Zy5o
CitpbmRleCBlMDAzN2E0Li4yODE3MGE1IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9kZWJ1Zy5o
CisrKysgYi9zcmMvY29tbW9uL2RlYnVnLmgKK0BAIC0zMTQsOSArMzE0LDE1IEBAIHN0ZDo6b3N0
cmVhbSAmRm10SGV4KHN0ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCisgLy8gQSBtYWNybyBhc3Nl
cnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxv
ZworICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICMgICAgZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAg
ICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9f
RlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklMRV9fIFwKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIjoiIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uKSkKKysg
ICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
ICAgICAgICAgX19idWlsdGluX2RlYnVndHJhcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBpbnQgeCA9IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBj
YWxsIHNpdGUuICovIFwKKysgICAgICAgICAgICAodm9pZCl4OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gd2hp
bGUgKGZhbHNlKQorICNlbHNlCisgIyAgICBkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgQU5HTEVf
RUFUX1NUUkVBTV9QQVJBTUVURVJTIDw8ICEoY29uZGl0aW9uKQorICNlbmRpZiAgLy8gZGVmaW5l
ZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2dsL2NnbC9G
dW5jdGlvbnNDR0wuY3BwIGIvc3JjL2NvbW1vbi9nbC9jZ2wvRnVuY3Rpb25zQ0dMLmNwcAogaW5k
ZXggYjU3ZjQyYi4uM2U1YTM3YSAxMDA2NDQKIC0tLSBhL3NyYy9jb21tb24vZ2wvY2dsL0Z1bmN0
aW9uc0NHTC5jcHAKQEAgLTM0LDIyICsyMjYsMTU0IEBAIGluZGV4IDkxMTI2NTkuLjM5ZGY2ZmUg
MTAwNjQ0CiAgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFNldEN1cnJlbnRD
b250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCiAgU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xT
ZXRWaXJ0dWFsU2NyZWVuLAorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcGxhdGZvcm0uaCBiL3Ny
Yy9jb21tb24vcGxhdGZvcm0uaAoraW5kZXggNjI2ZGI0MS4uNDFmM2NmNCAxMDA2NDQKKy0tLSBh
L3NyYy9jb21tb24vcGxhdGZvcm0uaAorKysrIGIvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCitAQCAt
MTMyLDExICsxMzIsMTYgQEAKKyAjICAgIGlmIGRlZmluZWQoX19hcm02NF9fKSB8fCBkZWZpbmVk
KF9fYWFyY2g2NF9fKQorICMgICAgICAgIGRlZmluZSBBTkdMRV9DUFVfQVJNNjQgMQorICMgICAg
ZW5kaWYKKy0vLyBFQUdMIHNob3VsZCBiZSBlbmFibGVkIG9uIGlPUywgYnV0IG5vdCBNYWMgQ2F0
YWx5c3QgdW5sZXNzIGl0IGlzIHJ1bm5pbmcgb24gQXBwbGUgU2lsaWNvbi4KKysjICAgIC8vIEVB
R0wgc2hvdWxkIGJlIGVuYWJsZWQgb24gaU9TLCBidXQgbm90IE1hYyBDYXRhbHlzdCB1bmxlc3Mg
aXQgaXMgcnVubmluZyBvbiBBcHBsZSBTaWxpY29uLgorICMgICAgaWYgKGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8
IFwKKyAgICAgICAgIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZp
bmVkKEFOR0xFX0NQVV9BUk02NCkpCisgIyAgICAgICAgZGVmaW5lIEFOR0xFX0VOQUJMRV9FQUdM
CisgIyAgICBlbmRpZgorKyMgICAgLy8gSWRlbnRpZnkgTWV0YWwgQVBJID49IHdoYXQgc2hpcHBl
ZCBvbiBtYWNPUyBDYXRhbGluYS4KKysjICAgIGlmIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q09TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxNTAwKSB8fCBcCisr
ICAgICAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQorKyMgICAgICAgIGRlZmluZSBBTkdMRV9XSVRIX01P
REVSTl9NRVRBTF9BUEkgMQorKyMgICAgZW5kaWYKKyAjZW5kaWYKKyAKKyAvLyBEZWZpbmUgQU5H
TEVfV0lUSF9BU0FOIG1hY3JvLgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc3lzdGVtX3V0aWxz
X2lvcy5tbSBiL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmEzNmJlYTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9j
b21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQorQEAgLTAsMCArMSw1MyBAQAorKy8vCisrLy8gQ29w
eXJpZ2h0IDIwMTUgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysv
LworKworKy8vIHN5c3RlbV91dGlsc19pb3MubW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVj
aWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorKworKyNpbmNsdWRlICJzeXN0ZW1fdXRpbHMuaCIKKysK
KysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2Vy
dmljZXMuaD4KKysjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKysjaW5jbHVkZSA8bWFjaC9tYWNo
Lmg+CisrI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisrI2luY2x1ZGUgPGFycmF5PgorKyNp
bmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0ZDo6c3RyaW5n
IEdldEV4ZWN1dGFibGVQYXRoKCkKKyt7CisrCisrICAgIE5TU3RyaW5nICpleGVjdXRhYmxlU3Ry
aW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisrICAgIHN0ZDo6
c3RyaW5nIHJlc3VsdChbZXhlY3V0YWJsZVN0cmluZyBVVEY4U3RyaW5nXSk7CisrICAgIHJldHVy
biByZXN1bHQ7CisrfQorKworK3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKQor
K3sKKysgICAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZVBhdGggPSBHZXRFeGVjdXRhYmxlUGF0aCgp
OworKyAgICBzaXplX3QgbGFzdFBhdGhTZXBMb2MgICAgICA9IGV4ZWN1dGFibGVQYXRoLmZpbmRf
bGFzdF9vZigiLyIpOworKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5n
OjpucG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsK
Kyt9CisrCisrY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCisreworKyAg
ICByZXR1cm4gImR5bGliIjsKKyt9CisrCisrZG91YmxlIEdldEN1cnJlbnRUaW1lKCkKKyt7Cisr
ICAgIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOworKyAgICBtYWNoX3Rp
bWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisrCisrICAgIGRvdWJsZSBzZWNvbmRDb2VmZiA9
IHRpbWViYXNlSW5mby5udW1lciAqIDFlLTkgLyB0aW1lYmFzZUluZm8uZGVub207CisrICAgIHJl
dHVybiBzZWNvbmRDb2VmZiAqIG1hY2hfYWJzb2x1dGVfdGltZSgpOworK30KKyt9ICAvLyBuYW1l
c3BhY2UgYW5nbGUKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAgYi9zcmMv
Y29tbW9uL3V0aWxpdGllcy5jcHAKLWluZGV4IGM5NTNmZjkuLjYzYjNhNTkgMTAwNjQ0CitpbmRl
eCBjOTUzZmY5Li5kMDllMjcwIDEwMDY0NAogLS0tIGEvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3Bw
CiArKysgYi9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKLUBAIC02LDYgKzYsMTEgQEAKK0BAIC00
NzEsNiArNDcxLDUwIEBAIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKQogIAot
IC8vIHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5
IHJvdXRpbmVzLgotIAotKy8vIE9sZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3Np
dGl2ZSBvbiB0aGlzIHdhcm5pbmcgaGVyZS4KLSsjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0rI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSsj
ZW5kaWYKKyAgICAgcmV0dXJuIDA7CisgfQorKy8qKgorK0RldGVybWluZSB0aGUgbnVtYmVyIG9m
IGF0dHJpYnV0ZSBzbG90cyB1c2VkIGJ5IGEgdmFyaWFibGUgdHlwZQorKyovCisraW50IFZhcmlh
YmxlQXR0cmlidXRlQ291bnQoR0xlbnVtIHR5cGUpCisreworKyAgICBzd2l0Y2ggKHR5cGUpCisr
ICAgIHsKKysgICAgICAgIGNhc2UgR0xfTk9ORToKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg
ICAgICAgIGNhc2UgR0xfQk9PTDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisrICAgICAgICBj
YXNlIEdMX0lOVDoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzI6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisrICAgICAgICBj
YXNlIEdMX0lOVF9WRUMyOgorKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKysg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgor
KyAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzM6CisrICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKysgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDNDoKKysgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisrICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisrICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDJ4NDoKKysgICAgICAgICAgICByZXR1cm4gMjsKKysgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorKyAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisrICAgICAgICAgICAgcmV0dXJuIDM7CisrICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKysg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorKyAgICAgICAgICAgIHJldHVybiA0OworKyAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICB9CiArCi0g
I2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKLSAjaW5jbHVkZSAiR0xFUzMvZ2wzLmgiCi0g
I2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorKyAgICByZXR1cm4gMDsKKyt9CisgCisgYm9v
bCBJc1NhbXBsZXJUeXBlKEdMZW51bSB0eXBlKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9u
L3V0aWxpdGllcy5oIGIvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAoraW5kZXggMGM3ZDgxMS4uYmE2
OTNhMiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysrKyBiL3NyYy9jb21t
b24vdXRpbGl0aWVzLmgKK0BAIC0zNyw2ICszNyw3IEBAIHNpemVfdCBWYXJpYWJsZUludGVybmFs
U2l6ZShHTGVudW0gdHlwZSk7Cisgc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0
eXBlKTsKKyBpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CisgaW50IFZhcmlhYmxl
Q29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdM
ZW51bSB0eXBlKTsKKyBib29sIElzU2FtcGxlclR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNT
YW1wbGVyQ3ViZVR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5
cGUpOwogZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29y
X3RhYl9hdXRvZ2VuLmNwcCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29y
X3RhYl9hdXRvZ2VuLmNwcAogaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKIC0tLSBhL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3RhYl9hdXRvZ2VuLmNwcApAQCAt
NjIsMzAwICszODYsMzUxNjAgQEAgaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKICAvKiBC
aXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogIAogICAgIENv
cHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUsIDIwMTgtMjAxOSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWJfYXV0b2dlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X3RhYl9hdXRvZ2VuLmNwcAotaW5kZXggMTMwYjk4YS4uMzNiODNkYiAxMDA2NDQKLS0tLSBhL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwCi0rKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAotQEAgLTEsNSArMSw3
IEBACi0gLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitpbmRleCBhNDQ0NDk5Li5jYWM5ZjQ5IDEwMDY0
NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitAQCAtMjEsOCArMjEsMTEgQEAKKyAjZW5k
aWYgIC8vIEFOR0xFX0VOQUJMRV9WVUxLQU4KICAKLSsvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2
b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisgI2lmZGVmIEFOR0xFX0VOQUJM
RV9NRVRBTAorLSMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWwuaCIKKysjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0LmgiCisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKKysjaWZkZWYgQU5HTEVf
RU5BQkxFX01FVEFMX1NQSVJWCisrIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbC5oIgorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisg
CisgI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorIAorQEAgLTY0LDExICs2
NywxNyBAQCBUQ29tcGlsZXIgKkNvbnN0cnVjdENvbXBpbGVyKHNoOjpHTGVudW0gdHlwZSwgU2hT
aGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0CisgICAgIH0KKyAjZW5kaWYgIC8vIEFOR0xF
X0VOQUJMRV9WVUxLQU4KKyAKKy0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisrI2lmZGVmIEFO
R0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAoSXNPdXRwdXRNZXRhbChvdXRwdXQpKQor
ICAgICB7CisgICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRhbCh0eXBlLCBzcGVjKTsK
KyAgICAgfQorKyNlbmRpZgorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgaWYgKElz
T3V0cHV0TWV0YWxEaXJlY3Qob3V0cHV0KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBU
cmFuc2xhdG9yTWV0YWxEaXJlY3QodHlwZSwgc3BlYywgb3V0cHV0KTsKKysgICAgfQorICNlbmRp
ZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICAgIC8vIFVuc3VwcG9ydGVkIGNvbXBpbGVy
IG9yIHVua25vd24gZm9ybWF0LiBSZXR1cm4gbnVsbHB0ciBwZXIgdGhlIHNoOjpDb25zdHJ1Y3RD
b21waWxlciBBUEkuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9u
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAoraW5kZXggODM1YzkwYS4uMWMw
OWNkYSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAorQEAgLTMxLDYgKzMxLDggQEAgc3Ry
dWN0IFRTb3VyY2VMb2MKKyAgICAgaW50IGxhc3RfbGluZTsKKyB9OworIAorK2NvbnN0ZXhwciBU
U291cmNlTG9jIGtOb1NvdXJjZUxvY3stMSwgLTEsIC0xLCAtMX07CiArCi0gLyogQmlzb24gaW1w
bGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAvLworIC8vIFB1dCBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRo
aXMgc2NoZW1lLgorIC8vCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCitpbmRleCAz
NGQ4ZTEyLi45MzE2ZTJlIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKK0BA
IC03MjIsNyArNzIyLDcgQEAgYm9vbCBUQ29tcGlsZXI6OmNoZWNrQW5kU2ltcGxpZnlBU1QoVElu
dGVybUJsb2NrICpyb290LAorICAgICAgICAgfQorICAgICB9CiAgCi0gICAgQ29weXJpZ2h0IChD
KSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yl9hdXRvZ2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2Vu
LmgKLWluZGV4IDUzMDYwMzIuLjAyNTAzMDAgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKLSsrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uaAotQEAgLTEsNSArMSw3IEBACi0gLyogQSBCaXNvbiBw
YXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy0gICAgaW50IHNpbXBsaWZ5U2Nh
bGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNfQU5EX01BVF9DT05T
VFJVQ1RPUl9BUkdTKQorKyAgICB1bnNpZ25lZCBpbnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNv
bXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1Mp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKICAKLSsvKiBBcHBsZSBOb3Rl
OiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbXBpbGVyLmgKK2luZGV4IGQwYjI0YmEuLjA0M2RkZDUgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oCitAQCAtMzUsNiArMzUsOSBAQCBjbGFzcyBUUGFyc2VDb250
ZXh0OworICNpZmRlZiBBTkdMRV9FTkFCTEVfSExTTAorIGNsYXNzIFRyYW5zbGF0b3JITFNMOwor
ICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKysjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFM
CisrY2xhc3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxF
X01FVEFMCisgCisgLy8KKyAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNoYWRl
ciB0eXBlIGlzIEdMU0wuCitAQCAtNjMsNiArNjYsOSBAQCBjbGFzcyBUU2hIYW5kbGVCYXNlCisg
I2lmZGVmIEFOR0xFX0VOQUJMRV9ITFNMCisgICAgIHZpcnR1YWwgVHJhbnNsYXRvckhMU0wgKmdl
dEFzVHJhbnNsYXRvckhMU0woKSB7IHJldHVybiAwOyB9CisgI2VuZGlmICAvLyBBTkdMRV9FTkFC
TEVfSExTTAorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgdmlydHVhbCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QgKmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCkgeyByZXR1cm4gbnVs
bHB0cjsgfQorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICBwcm90ZWN0ZWQ6
CisgICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSBy
ZXF1aXJlZCBieSB0aGUgY29tcGlsZXIuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFu
dFVuaW9uLmNwcAoraW5kZXggMDMzNTE3MS4uMTA0YWZmYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorQEAgLTY3LDExICs2NywxNSBAQCBib29sIElzVmFs
aWRTaGlmdE9mZnNldChjb25zdCBUQ29uc3RhbnRVbmlvbiAmcmhzKQorIAorIH0gIC8vIGFub255
bW91cyBuYW1lc3BhY2UKKyAKKy1UQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKQorLXsK
Ky0gICAgaUNvbnN0ID0gMDsKKy0gICAgdHlwZSAgID0gRWJ0Vm9pZDsKKy19CisrVENvbnN0YW50
VW5pb246OlRDb25zdGFudFVuaW9uKCkgOiBpQ29uc3QoMCksIHR5cGUoRWJ0Vm9pZCkge30KICsK
LSAvKiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKytUQ29uc3Rh
bnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkpLCB0eXBlKEVidEludCkg
e30KKysKKytUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpIDog
dUNvbnN0KHUpLCB0eXBlKEVidFVJbnQpIHt9CisrCisrVENvbnN0YW50VW5pb246OlRDb25zdGFu
dFVuaW9uKGZsb2F0IGYpIDogZkNvbnN0KGYpLCB0eXBlKEVidEZsb2F0KSB7fQorKworK1RDb25z
dGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0eXBlKEVidEJv
b2wpIHt9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwg
MjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8u
Y3BwCi1pbmRleCBmNzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0
aWwvU3lzdGVtSW5mby5jcHAKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3Bw
Ci1AQCAtNDcsNiArNDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRv
cikKLSAgICAgICAgICAgICByZXR1cm4gIlZpdmFudGUiOwotICAgICAgICAgY2FzZSBrVmVuZG9y
SURfVk1XYXJlOgotICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKLSsgICAgICAgIGNhc2Ug
a1ZlbmRvcklEX0FwcGxlOgotKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOwotICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmlu
Zyh2ZW5kb3IpICsgIikiOworIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QK
KyB7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5o
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCitpbmRleCBhNjIzZDY1
Li5kZjUzODU3IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRV
bmlvbi5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKK0BA
IC0yMCw2ICsyMCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgorICAgcHVibGljOgorICAgICBQ
T09MX0FMTE9DQVRPUl9ORVdfREVMRVRFCisgICAgIFRDb25zdGFudFVuaW9uKCk7CisrICAgIFRD
b25zdGFudFVuaW9uKGludCBpKTsKKysgICAgVENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUp
OworKyAgICBUQ29uc3RhbnRVbmlvbihmbG9hdCBmKTsKKysgICAgVENvbnN0YW50VW5pb24oYm9v
bCBiKTsKKyAKKyAgICAgYm9vbCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0
YW50VW5pb24gJmNvbnN0YW50KTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1Ob2RlLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUu
Y3BwCitpbmRleCBiYmRmODY2Li41MTM2ZDIwIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtTm9kZS5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
dGVybU5vZGUuY3BwCitAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lzaW9uIEdldEhpZ2hlclByZWNp
c2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQpCisgVENvbnN0YW50VW5pb24g
KlZlY3Rvcml6ZShjb25zdCBUQ29uc3RhbnRVbmlvbiAmY29uc3RhbnQsIHNpemVfdCBzaXplKQor
IHsKKyAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcgVENvbnN0YW50VW5pb25b
c2l6ZV07CistICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgIGNvbnN0VW5pb25b
aV0gPSBjb25zdGFudDsKKyAKKyAgICAgcmV0dXJuIGNvbnN0VW5pb247CitAQCAtNDE1LDYgKzQx
NSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJtQmxvY2sgJm5v
ZGUpCiAgICAgIH0KLUBAIC0xNjAsNiArMTYyLDExIEBAIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklE
IHZlbmRvcklkKQotICAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX1ZpdmFudGU7CiAg
fQogIAotK2Jvb2wgSXNBcHBsZShWZW5kb3JJRCB2ZW5kb3JJZCkKKytUSW50ZXJtQmxvY2s6OlRJ
bnRlcm1CbG9jayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCiAr
ewotKyAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworKyAgICBmb3IgKFRJ
bnRlcm1Ob2RlICpzdG10IDogc3RtdHMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZFN0YXRlbWVu
dChzdG10KTsKKysgICAgfQogK30KICsKLSBib29sIFBhcnNlQU1EQnJhaG1hRHJpdmVyVmVyc2lv
bihjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZlcnNpb24pCisgc2l6
ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiAgewotICAgICBjb25zdCBz
aXplX3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rfb2YoIjAxMjM0NTY3ODkiKTsKLWRpZmYg
LS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmggYi9zcmMvZ3B1X2luZm9fdXRp
bC9TeXN0ZW1JbmZvLmgKLWluZGV4IGFkMTc2OTguLjUwOWExZTkgMTAwNjQ0Ci0tLS0gYS9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm8uaAotQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0IFN5c3RlbUluZm8KLSAgICAgYm9vbCBp
c0FNRFN3aXRjaGFibGUgPSBmYWxzZTsKLSAgICAgLy8gT25seSB0cnVlIG9uIGR1YWwtR1BVIE1h
YyBsYXB0b3BzLgotICAgICBib29sIGlzTWFjU3dpdGNoYWJsZSA9IGZhbHNlOwotLSAgICAvLyBP
bmx5IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdoZW4gcnVubmluZyBpT1MgYmluYXJpZXMu
Ci0tICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9m
b3VuZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1pb3NhcHBvbm1hYwotLSAgICBib29sIGlz
aU9TQXBwT25NYWMgPSBmYWxzZTsKLSsgICAgLy8gT25seSB0cnVlIG9uIEFwcGxlIFNpbGljb24g
TWFjcyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3QuCi0rICAgIGJvb2wgbmVlZHNFQUdMT25N
YWMgICA9IGZhbHNlOwotIAotICAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiBBbmRyb2lkCi0gICAg
IHN0ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7Ci1AQCAtOTksNiArOTgsNyBAQCBjb25z
dGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAgID0gMHg4MDg2OwotIGNvbnN0ZXhwciBW
ZW5kb3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEwREU7Ci0gY29uc3RleHByIFZlbmRvcklE
IGtWZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRv
cklEX1ZNV2FyZSAgID0gMHgxNWFkOwotK2NvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfQXBw
bGUgICAgPSAweDEwNkI7Ci0gCi0gLy8gS25vd24gbm9uLVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lz
dGVyZWQpIHZlbmRvciBJRHMKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUg
ICAgID0gMHgxMDAwMTsKLUBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZl
bmRvcklEIHZlbmRvcklkKTsKLSBib29sIElzVmVyaVNpbGljb24oVmVuZG9ySUQgdmVuZG9ySWQp
OwotIGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9ySWQpOwotIGJvb2wgSXNWaXZhbnRlKFZl
bmRvcklEIHZlbmRvcklkKTsKLStib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpOworICAg
ICByZXR1cm4gbVN0YXRlbWVudHMuc2l6ZSgpOworQEAgLTQ0Niw2ICs0NTQsMzcgQEAgYm9vbCBU
SW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKm9y
aWdpbmFsLCBUSW50ZXJtTm8KKyAgICAgcmV0dXJuIGZhbHNlOworIH0KICAKLSAvLyBVc2UgYSBo
ZXVyaXN0aWMgdG8gYXR0ZW1wdCB0byBmaW5kIHRoZSBHUFUgdXNlZCBmb3IgM0QgZ3JhcGhpY3Mu
IFNldHMgYWN0aXZlR1BVSW5kZXgsCi0gLy8gaXNPcHRpbXVzLCBhbmQgaXNBTURTd2l0Y2hhYmxl
LgotZGlmZiAtLWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0gYi9z
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCi1pbmRleCBjNzc1NmY2Li5hNDlk
YzUyIDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQot
KysrIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotQEAgLTE5LDI1ICsx
OSw3IEBAIG5hbWVzcGFjZSBhbmdsZQorK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xh
cmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQorK3sK
KysgICAgaWYgKGluaXRFeHByKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKAor
KyAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSwg
bmV3IFRJbnRlcm1TeW1ib2wodmFyKSwgaW5pdEV4cHIpKTsKKysgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7
CisrICAgIH0KKyt9CisrCisrVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24o
c3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJsZSAqPiBkZWNsYXJhdG9ycykKKysg
ICAgOiBUSW50ZXJtRGVjbGFyYXRpb24oKQorK3sKKysgICAgZm9yIChhdXRvICpkIDogZGVjbGFy
YXRvcnMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1i
b2woZCkpOworKyAgICB9CisrfQorKworK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xh
cmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMp
CisrICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKKyt7CisrICAgIGZvciAoYXV0byAqZCA6IGRl
Y2xhcmF0b3JzKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworKyAgICB9
CisrfQorKworIHNpemVfdCBUSW50ZXJtRGVjbGFyYXRpb246OmdldENoaWxkQ291bnQoKSBjb25z
dAorIHsKKyAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CitAQCAtNDYzLDkgKzUwMiwx
MCBAQCBib29sIFRJbnRlcm1EZWNsYXJhdGlvbjo6cmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZQogIAotIGJvb2wgR2V0U3lzdGVtSW5mbyhTeXN0
ZW1JbmZvICppbmZvKQorIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5v
ZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVu
dCkKICB7Ci0tIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBk
ZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKLS0gICAgc3RhdGljIGJvb2wgaXNpT1NBcHBPbk1hYyA9
IGZhbHNlOwotLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0tICAgIGRpc3BhdGNo
X29uY2UoJm9uY2UsIF57Ci0tICAgICAgaXNpT1NBcHBPbk1hYyA9IFtbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gaXNpT1NBcHBPbk1hY107Ci0tICAgIH0pOwotLQotLSAgICBpZiAoaXNpT1NB
cHBPbk1hYykKLS0gICAgewotLSAgICAgICAgR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci0tICAg
ICAgICBpZiAoaW5mbykKLS0gICAgICAgIHsKLS0gICAgICAgICAgICBpbmZvLT5pc2lPU0FwcE9u
TWFjID0gdHJ1ZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBpbmZvOwotLSAgICB9Ci0t
Ci0tICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKLS0jICAgIGVsaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdM
RV9QTEFURk9STV9NQUNDQVRBTFlTVCkKLSAgICAgcmV0dXJuIEdldFN5c3RlbUluZm9fbWFjKGlu
Zm8pOwotICMgICAgZWxzZQotICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci1k
aWZmIC0tZ2l0IGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwIGIvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi1pbmRleCAzMjNhZjJjLi5lNTJlY2IzIDEw
MDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi0rKysgYi9z
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAKLUBAIC0xOCw4ICsxOCw5IEBAIG5h
bWVzcGFjZSBhbmdsZQotIGJvb2wgR2V0U3lzdGVtSW5mb19pb3MoU3lzdGVtSW5mbyAqaW5mbykK
Ky0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGdldFNlcXVlbmNlKCktPnNpemUoKTsgKytp
aSkKKysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGZvciAoYXV0byAqJm5v
ZGUgOiBzZXEpCisgICAgIHsKKy0gICAgICAgIFJFUExBQ0VfSUZfSVMoKCpnZXRTZXF1ZW5jZSgp
KVtpaV0sIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworKyAgICAgICAgUkVQ
TEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAg
ICAgfQorICAgICByZXR1cm4gZmFsc2U7CisgfQorQEAgLTQ3MywxMiArNTEzLDEzIEBAIGJvb2wg
VEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNo
aWxkTm9kZVdpdGhNdWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJt
U2VxdWVuY2UgJnJlcGxhY2VtZW50cykKICB7CistICAgIGZvciAoYXV0byBpdCA9IGdldFNlcXVl
bmNlKCktPmJlZ2luKCk7IGl0IDwgZ2V0U2VxdWVuY2UoKS0+ZW5kKCk7ICsraXQpCisrICAgIGF1
dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworKyAgICBmb3IgKGF1dG8gaXQgPSBzZXEuYmVnaW4o
KTsgaXQgPCBzZXEuZW5kKCk7ICsraXQpCiAgICAgIHsKLS0gICAgICAgIC8vIFRPRE8oYW5nbGVi
dWcuY29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbi4KLSsgICAgICAgIC8v
IFRPRE8oYW5nbGVidWcuY29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbiBh
bmQgR1BVIGluZm8uCi0gICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7
Ci0rICAgICAgICBpbmZvLT5ncHVzLmVtcGxhY2VfYmFjaygpLnZlbmRvcklkID0ga1ZlbmRvcklE
X0FwcGxlOworICAgICAgICAgaWYgKCppdCA9PSBvcmlnaW5hbCkKKyAgICAgICAgIHsKKy0gICAg
ICAgICAgICBpdCA9IGdldFNlcXVlbmNlKCktPmVyYXNlKGl0KTsKKy0gICAgICAgICAgICBnZXRT
ZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBsYWNlbWVudHMu
ZW5kKCkpOworKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0KTsKKysgICAgICAgICAgICBz
ZXEuaW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsK
KyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgIH0KICAgICAgfQotIAotICAgICBy
ZXR1cm4gdHJ1ZTsKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21h
Y29zLm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQotaW5kZXggYjFj
ZDA1NS4uYzVlMDM5ZSAxMDA2NDQKLS0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9f
bWFjb3MubW0KLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KLUBA
IC0zMjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5mbyAqaW5m
bykKLSAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CitAQCAtNDg4LDEyICs1
MjksMTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZVdpdGhN
dWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFz
ZTo6aW5zZXJ0Q2hpbGROb2RlcyhUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBwb3NpdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRl
cm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKKyB7CistICAgIGlmIChwb3NpdGlvbiA+IGdldFNlcXVl
bmNlKCktPnNpemUoKSkKKysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGlm
IChwb3NpdGlvbiA+IHNlcS5zaXplKCkpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgfQotICAgICAKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkg
JiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpCi0rICAgIGluZm8tPm5lZWRzRUFHTE9uTWFjID0g
dHJ1ZTsKLSsjZW5kaWYKLSsKKy0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkg
KyBwb3NpdGlvbjsKKy0gICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCBpbnNlcnRpb25zLmJl
Z2luKCksIGluc2VydGlvbnMuZW5kKCkpOworKyAgICBhdXRvIGl0ID0gc2VxLmJlZ2luKCkgKyBw
b3NpdGlvbjsKKysgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRp
b25zLmVuZCgpKTsKICAgICAgcmV0dXJuIHRydWU7CiAgfQogIAotZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9DYXBzLmNwcCBiL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotaW5kZXggZjkwNjc4My4u
MWRkZGQ0ZCAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotKysrIGIvc3JjL2xp
YkFOR0xFL0NhcHMuY3BwCi1AQCAtNjMwLDcgKzYzMCwxMiBAQCBzdGF0aWMgYm9vbCBEZXRlcm1p
bmVEZXB0aFRleHR1cmVBTkdMRVN1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVD
YXBzKQotIHsKLSAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKLSAg
ICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotKyNpZiAhZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9JT1MpICYmICghZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgfHwgIWRlZmlu
ZWQoQU5HTEVfQ1BVX0FSTTY0KSkKLSsgICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5
IFJlbW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSsgICAgICAg
IC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1MuCi0rICAgICAgICAvLyBUT0RP
KGRpbm8pOiBJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBydW50aW1lIGNoZWNrIHdoZW4gcnVu
bmluZyBhbiBpT1MgYXBwIG9uIE1hYy4KLSAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UywKLSsjZW5kaWYKLSAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLAotICAgICB9Owor
QEAgLTEwNDAsOCArMTA4Miw4IEBAIFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUo
Y29uc3QgVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKICAKLUBAIC02NDIsNyArNjQ3LDEyIEBAIHN0
YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3QgVGV4dHVyZUNh
cHNNYXAgJnRleHR1cmVDYXBzKQorIFRJbnRlcm1BZ2dyZWdhdGUgKlRJbnRlcm1BZ2dyZWdhdGU6
OnNoYWxsb3dDb3B5KCkgY29uc3QKICB7Ci0gICAgIGNvbnN0ZXhwciBHTGVudW0gcmVxdWlyZWRG
b3JtYXRzW10gPSB7Ci0gICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwKLSsjaWYgIWRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpIHx8ICFkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCi0rICAgICAgICAvLyBUT0RPKGRp
bm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9ORU5U
MzJfT0VTCi0rICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgb24gaU9TLgot
KyAgICAgICAgLy8gVE9ETyhkaW5vKTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGlt
ZSBjaGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9TIGFwcCBvbiBNYWMuCi0gICAgICAgICBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVMsCi0rI2VuZGlmCi0gICAgIH07CistICAgIFRJbnRlcm1TZXF1ZW5j
ZSAqY29weVNlcSA9IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKy0gICAgY29weVNlcS0+aW5zZXJ0
KGNvcHlTZXEtPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmJlZ2luKCksIGdldFNlcXVlbmNlKCkt
PmVuZCgpKTsKKysgICAgYXV0byAmc2VxICAgICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2Uo
KTsKKysgICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxICAgPSBuZXcgVEludGVybVNlcXVlbmNl
KHNlcS5iZWdpbigpLCBzZXEuZW5kKCkpOworICAgICBUSW50ZXJtQWdncmVnYXRlICpjb3B5Tm9k
ZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKG1GdW5jdGlvbiwgbVR5cGUsIG1PcCwgY29weVNlcSk7
CisgICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKKyAgICAgcmV0dXJuIGNvcHlOb2RlOwor
ZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAoraW5kZXggMzY0Mzg0Ny4uM2I2Zjg3MiAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAorKysrIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCitAQCAtNjc0LDYgKzY3NCw3IEBA
IGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJbnRlcm1B
Z2dyZWdhdGVCYXNlCisgeworICAgcHVibGljOgorICAgICBUSW50ZXJtQmxvY2soKSA6IFRJbnRl
cm1Ob2RlKCkge30KKysgICAgVEludGVybUJsb2NrKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50
ZXJtTm9kZSAqPiBzdG10cyk7CisgICAgIH5USW50ZXJtQmxvY2soKSBvdmVycmlkZSB7fQogIAot
ICAgICByZXR1cm4gR2V0Rm9ybWF0U3VwcG9ydCh0ZXh0dXJlQ2FwcywgcmVxdWlyZWRGb3JtYXRz
LCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL1N0YXRlLmNwcCBiL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKLWluZGV4IDdiMDhkOGQuLmE4
MDQ0ODYgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvU3RhdGUuY3BwCi0rKysgYi9zcmMvbGli
QU5HTEUvU3RhdGUuY3BwCi1AQCAtNiw2ICs2LDkgQEAKKyAgICAgVEludGVybUJsb2NrICpnZXRB
c0Jsb2NrKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorQEAgLTc3Niw2ICs3NzcsOSBAQCBj
bGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50
ZXJtQWdncmVnYXRlQmFzZQorIHsKKyAgIHB1YmxpYzoKKyAgICAgVEludGVybURlY2xhcmF0aW9u
KCkgOiBUSW50ZXJtTm9kZSgpIHt9CisrICAgIFRJbnRlcm1EZWNsYXJhdGlvbihjb25zdCBUVmFy
aWFibGUgKnZhciwgVEludGVybVR5cGVkICppbml0RXhwcik7CisrICAgIFRJbnRlcm1EZWNsYXJh
dGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRlY2xhcmF0b3Jz
KTsKKysgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJt
VHlwZWQgKj4gZGVjbGFyYXRvcnMpOworICAgICB+VEludGVybURlY2xhcmF0aW9uKCkgb3ZlcnJp
ZGUge30KICAKLSAvLyBTdGF0ZS5jcHA6IEltcGxlbWVudHMgdGhlIFN0YXRlIGNsYXNzLCBlbmNh
cHN1bGF0aW5nIHJhdyBHTCBzdGF0ZS4KKyAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0Rl
Y2xhcmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmNwcAoraW5kZXggZDAzODlhZi4uZmUyZTE5YiAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbC5jcHAKK0BAIC0xOTYsNyArMTk2LDggQEAgdm9pZCBURnVuY3Rpb246OnNoYXJl
UGFyYW1ldGVycyhjb25zdCBURnVuY3Rpb24gJnBhcmFtZXRlcnNTb3VyY2UpCiAgCi0rLy8gT2xk
ZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2FybmluZyBo
ZXJlLgotKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2dsb2JhbC1jb25zdHJ1
Y3RvcnMiCi0rCi0gI2luY2x1ZGUgImxpYkFOR0xFL1N0YXRlLmgiCisgSW1tdXRhYmxlU3RyaW5n
IFRGdW5jdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CisgeworLSAgICBzdGQ6OnN0cmlu
ZyBuZXdOYW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisrICAgIEltbXV0YWJs
ZVN0cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOworKyAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5h
bWUuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5n
bGVkTmFtZVNlcGFyYXRvcjsKICAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5j
cHAKLWluZGV4IDNmOWYzN2QuLjVlNjI4ZjIgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvZm9y
bWF0dXRpbHMuY3BwCi0rKysgYi9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwCi1AQCAtMTAz
NCw3ICsxMDM0LDcgQEAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEludGVybmFs
Rm9ybWF0SW5mb01hcCgpCi0gICAgIGFuZ2xlOjpTeXN0ZW1JbmZvIGluZm87Ci0gICAgIGlmIChh
bmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCi0gICAgIHsKLS0gICAgICAgIGlmIChpbmZvLmlz
aU9TQXBwT25NYWMpCi0rICAgICAgICBpZiAoaW5mby5uZWVkc0VBR0xPbk1hYykKLSAgICAgICAg
IHsKLSAgICAgICAgICAgICAvLyBVc2luZyBPcGVuR0xFUy5mcmFtZXdvcmsuCi0gICAgICAgICAg
ICAgQWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgZmFsc2UsICA4LCAgOCwg
IDgsICA4LCAwLCBHTF9CR1JBX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgUmVxdWlyZUVTPDIsIDA+LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFUzwy
LCAwPiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkLCBOZXZl
clN1cHBvcnRlZCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxl
L0Rpc3BsYXlBcHBsZV9hcGkuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rp
c3BsYXlBcHBsZV9hcGkuY3BwCi1pbmRleCBkZTIxNmZiLi5lNjNhOGI2IDEwMDY0NAotLS0tIGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3BsYXlBcHBsZV9hcGkuY3BwCi0rKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKLUBA
IC0zNyw3ICszNyw3IEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0
IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICAgICAgIGJyZWFrOwotICAgICB9CisgICAg
IGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCitkaWZmIC0tZ2l0IGEv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9TeW1ib2wuaAoraW5kZXggYjljZjkwOC4uMGFiYjFkNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaAorQEAgLTIyMiw3ICsyMjIsNyBAQCBjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5
bWJvbAorICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9
CiAgCi0tICAgIGlmIChpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlmIChpbmZvLm5lZWRzRUFH
TE9uTWFjKQotICAgICB7Ci0gICAgICAgICByZXR1cm4gbmV3IHJ4OjpEaXNwbGF5RUFHTChzdGF0
ZSk7Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Nv
bnRleHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9Db250ZXh0Q0dMLmNw
cAotaW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvQ29udGV4dENHTC5jcHAKLUBAIC0xMyw2ICsxMyw4IEBACi0gI2luY2x1ZGUgImxpYkFO
R0xFL0Rpc3BsYXkuaCIKLSAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3Bs
YXlDR0wuaCIKKyAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorLSAg
ICBib29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKysgICAgYm9vbCBpc0RlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgIHZvaWQgc2V0SGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKSB7IG1IYXNQcm90b3R5cGVEZWNsYXJhdGlvbiA9IHRydWU7IH0KKyAgICAg
Ym9vbCBoYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1IYXNQcm90b3R5
cGVEZWNsYXJhdGlvbjsgfQogIAotKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8
fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQotKwotIG5hbWVzcGFjZSByeAor
ZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCitpbmRleCBhMWZj
ZjhjLi5lYTU2NmIxIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsLmNwcAorQEAgLTQxLDggKzQxLDE0IEBAIGNvbnN0IGNoYXIga1Jhc3Rlcml6ZXJEaXNjYXJk
RW5hYmxlZENvbnN0TmFtZVtdID0gIkFOR0xFUmFzdGVyaXplckRpc2FibGVkIjsKKyBuYW1lc3Bh
Y2UKICB7CiAgCi1AQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtS
YXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgPQorKyAgICBJbW11dGFibGVTdHJp
bmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0
cmluZyBrQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSA9CisrICAgIEltbXV0YWJsZVN0cmlu
ZygiQU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIik7CisgY29uc3RleHByIEltbXV0YWJsZVN0cmlu
ZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJpbmcoImNvdmVyYWdlTWFz
ayIpOworK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0VtdUluc3RhbmNlSURGaWVsZCAgICAg
ID0gSW1tdXRhYmxlU3RyaW5nKCJlbXVsYXRlZEluc3RhbmNlSUQiKTsKKyBjb25zdGV4cHIgSW1t
dXRhYmxlU3RyaW5nIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtEaXNj
YXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEaXNjYXJkV3JhcHBl
ciIpOworIAorIFRJbnRlcm1CaW5hcnkgKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoY29uc3QgVFZh
cmlhYmxlICpkcml2ZXJVbmlmb3JtcywgY29uc3QgY2hhciAqZmllbGROYW1lKQorIHsKK0BAIC04
Niw2ICs5MiwyMSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyUG9z
aXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgKmNvbQorICAgICByZXR1cm4gUnVuQXRU
aGVFbmRPZlNoYWRlcihjb21waWxlciwgcm9vdCwgYXNzaWdubWVudCwgc3ltYm9sVGFibGUpOwor
IH0KKyAKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW11bGF0ZUluc3RhbmNlSUQoVENvbXBpbGVy
ICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICpyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAg
Ly8gZW11SW5zdGFuY2VJRAorKyAgICBUSW50ZXJtQmluYXJ5ICplbXVJbnN0YW5jZUlEID0KKysg
ICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0YW5j
ZUlERmllbGQuZGF0YSgpKTsKKysKKysgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVyZW5jZSB0
byAiZ2xfSW5zdGFuY2VJbmRleCIKKysgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrCisrICAgIHJldHVybiBSZXBs
YWNlVmFyaWFibGVXaXRoVHlwZWQoY29tcGlsZXIsIHJvb3QsIGluc3RhbmNlSUQsIGVtdUluc3Rh
bmNlSUQpOworK30KKysKKyAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMuCisg
QU5HTEVfTk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9j
ayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKK0BAIC0xMjMsNiArMTQ0LDE4IEBAIEFOR0xFX05P
X0RJU0NBUkQgYm9vbCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgKnJvb3Qs
CisgCisgfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorIAorKy8qKiBzdGF0aWMgKi8KKytjb25z
dCBjaGFyICpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUo
KQorK3sKKysgICAgcmV0dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsK
Kyt9CisrCisrLyoqIHN0YXRpYyAqLworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbDo6R2V0
UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7CisrICAgIHJldHVybiBr
UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKKyt9CisrCisgVHJh
bnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5cGUsIHNwZWMpCisge30KKyAKK0BAIC0xNTMs
MjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRhbDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9j
ayAqcm9vdCwKKyAgICAgeworICAgICAgICAgYXV0byBuZWdGbGlwWSA9IGdldERyaXZlclVuaWZv
cm1OZWdGbGlwWVJlZihkcml2ZXJVbmlmb3Jtcyk7CisgCisrICAgICAgICBpZiAobUVtdWxhdGVk
SW5zdGFuY2VJRCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBFbXVsYXRlIGdsX0luc3Rh
bmNlSUQKKysgICAgICAgICAgICBpZiAoIUVtdWxhdGVJbnN0YW5jZUlEKHRoaXMsIHJvb3QsICZn
ZXRTeW1ib2xUYWJsZSgpLCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKwor
ICAgICAgICAgLy8gQXBwZW5kIGdsX1Bvc2l0aW9uLnkgY29ycmVjdGlvbiB0byBtYWluCisgICAg
ICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4odGhp
cywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIG5lZ0ZsaXBZKSkKKyAgICAgICAgIHsKKyAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgCistICAgICAgICAvLyBJbnNlcnQg
cmFzdGVyaXplciBkaXNjYXJkIGxvZ2ljCistICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6ZXJE
aXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbiBkaXNj
YXJkIGxvZ2ljCisrICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMo
cm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAg
fQorKyAgICB9CisrCisrICAgIC8vIEluaXRpYWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cyB0
byBhdm9pZCBzcGlydi1jcm9zcyBkZWFkLWNvZGUgcmVtb3ZpbmcgdGhlbSBpbiBsYXRlcgorKyAg
ICAvLyBzdGFnZS4gT25seSBkbyB0aGlzIGlmIFNIX0lOSVRfT1VUUFVUX1ZBUklBQkxFUyBpcyBu
b3Qgc3BlY2lmaWVkLgorKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorKyAg
ICAgICAgIShjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfT1VUUFVUX1ZBUklBQkxFUykpCisrICAg
IHsKKysgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKysgICAgICAgIGZvciAoY29uc3Qg
c2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiBtT3V0cHV0VmFyeWluZ3MpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgaWYgKCF2YXIuYWN0aXZlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgbGlzdC5wdXNoX2JhY2sodmFyKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9Cisr
CisrICAgICAgICBpZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xU
YWJsZSgpLCBsaXN0KSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICB9CisgICAgIH0KKyAgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKyAgICAgeworKyAgICAgICAgLy8gRm9yIG5vbiB2b2lkIE1TTCBmcmFn
bWVudCBmdW5jdGlvbnMgcmVwbGFjZSBkaXNjYXJkCisrICAgICAgICAvLyB3aXRoIEFOR0xFRGlz
Y2FyZFdyYXBwZXIoKQorKyAgICAgICAgaWYgKG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIXJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMo
cm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgICAgaWYgKCFpbnNlcnRTYW1wbGVNYXNr
V3JpdGluZ0xvZ2ljKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CitAQCAtMjM1LDYgKzMwNiwxMyBAQCB2b2lkIFRyYW5zbGF0b3JN
ZXRhbDo6Y3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9ybUZpZWxkcyhzdGQ6OnZl
Y3RvcjxURgorICAgICBURmllbGQgKmNvdmVyYWdlTWFza0ZpZWxkID0KKyAgICAgICAgIG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNrRmllbGQsIFRTb3VyY2VMb2Mo
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgIGZpZWxkc091dC0+cHVzaF9iYWNr
KGNvdmVyYWdlTWFza0ZpZWxkKTsKKysKKysgICAgaWYgKG1FbXVsYXRlZEluc3RhbmNlSUQpCisr
ICAgIHsKKysgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZpZWxkID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9jKCksIFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWwpOworKyAgICAgICAgZmllbGRzT3V0LT5wdXNoX2JhY2soZW11SW5zdGFu
Y2VJREZpZWxkKTsKKysgICAgfQorIH0KKyAKKyAvLyBBZGQgc2FtcGxlX21hc2sgd3JpdGluZyB0
byBtYWluLCBndWFyZGVkIGJ5IHRoZSBzcGVjaWFsaXphdGlvbiBjb25zdGFudAorQEAgLTI5Mywy
NCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2Vy
dFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCisgICAgIHJldHVybiBSdW5BdFRo
ZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOworIH0KKyAKKy1B
TkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemVyRGlz
Y2FyZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJh
bnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9j
ayAqcm9vdCkKKyB7CisgICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAgICAgPSBnZXRJbmZvU2lu
aygpLm9iajsKKyAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJs
ZSgpOworIAorICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbkRpc2FibGVkIHNwZWNpYWxpemF0
aW9uIGNvbnN0YW50LgorLSAgICBzaW5rIDw8ICJsYXlvdXQgKGNvbnN0YW50X2lkPTApIGNvbnN0
IGJvb2wgIiA8PCBtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisrICAg
IHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJp
emF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisgICAgIHNpbmsgPDwgIiA9IGZhbHNlO1xu
IjsKKyAKKy0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUg
dmFyaWFibGUgcmVmZXJlbmNlLgorKyAgICAvLyBDcmVhdGUga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZENvbnN0TmFtZSBhbmQga1Jhc3Rlcml6YXRpb25EaXNjYXJkRnVuY05hbWUgdmFyaWFi
bGUKKysgICAgLy8gcmVmZXJlbmNlcy4KKyAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBl
KEVidEJvb2wpOworICAgICBib29sVHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKy0gICAg
VFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CistICAgICAgICBuZXcgVFZhcmlhYmxlKHN5
bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVk
Q29uc3ROYW1lKSwKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFy
aWFibGUoc3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xU
eXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAKKyAgICAgLy8gSW5zZXJ0IHRoaXMg
Y29kZSB0byB0aGUgZW5kIG9mIG1haW4oKQorLSAgICAvLyBpZiAoQU5HTEVSYXN0ZXJpemVyRGlz
YWJsZWQpCisrICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6YXRpb25EaXNhYmxlZCkKKyAgICAgLy8g
eworICAgICAvLyAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgtMy4wLCAtMy4wLCAtMy4wLCAxLjAp
OworICAgICAvLyB9CitAQCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wg
VHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9j
aworICAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCByb290LCBpZkNhbGwsIHN5
bWJvbFRhYmxlKTsKKyB9CisgCisrLy8gSWYgdGhlIE1TTCBmcmFnbWVudCBzaGFkZXIgaXMgbm9u
LXZvaWQsIHdlIG5lZWQgdG8gZW5zdXJlCisrLy8gdGhhdCB0aGVyZSBpcyBhIHJldHVybiBhdCB0
aGUgZW5kLiBUaGUgTVNMIGNvbXBpbGVyCisrLy8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBu
byByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBpZiBhbGwKKysvLyBwYXRocyBsZWFkIHRvIGRpc2Nh
cmRfZnJhZ21lbnQoKS4gU28gd3JhcCBkaXNjYXJkIGluIGEgd3JhcHBlciBmdW5jdGlvbi4KKysv
LyBGaXhlcyBkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5kaXNjYXJkLmJhc2ljX2Fsd2F5
cworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWlu
RGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290KQorK3sKKysgICAgLy8gYmVmb3JlCisrICAg
IC8vIHZvaWQgbWFpbiAodm9pZCkKKysgICAgLy8geworKyAgICAvLyAgICAgb19jb2xvciA9IHZf
Y29sb3I7CisrICAgIC8vICAgICBkaXNjYXJkOworKyAgICAvLyB9CisrCisrICAgIC8vIGFmdGVy
CisrICAgIC8vIHZvaWQgQU5HTEVEaXNjYXJkV3JhcHBlcigpCisrICAgIC8vIHsKKysgICAgLy8g
ICAgZGlzY2FyZDsKKysgICAgLy8gfQorKyAgICAvLyB2b2lkIG1haW4gKHZvaWQpCisrICAgIC8v
IHsKKysgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworKyAgICAvLyAgICAgQU5HTEVEaXNj
YXJkV3JhcHBlcigpOworKyAgICAvLyB9CisrCisrICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKm1haW4gICA9IEZpbmRNYWluKHJvb3QpOworKyAgICBUSW50ZXJtQmxvY2sgKm1haW5Cb2R5
ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisrICAgIFRJbnRlcm1TZXF1ZW5jZSAqZnVu
Y3Rpb25TZXF1ZW5jZSA9IG1haW5Cb2R5LT5nZXRTZXF1ZW5jZSgpOworKyAgICBUSW50ZXJtQWdn
cmVnYXRlICpkaXNjYXJkRnVuYyAgICAgPSBudWxscHRyOworKyAgICAvLyBJdGVyYXRlIG92ZXIg
YWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1c2VzCisrICAg
IC8vIG9mIGRpc2NhcmQgd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkuCisrICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmdW5jdGlvblNlcXVlbmNlLT5zaXplKCk7ICsraW5kZXgp
CisrICAgIHsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpmdW5jdGlvbk5vZGUgPSAoKmZ1bmN0aW9u
U2VxdWVuY2UpW2luZGV4XTsKKysgICAgICAgIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5vZGUgPSBm
dW5jdGlvbk5vZGUtPmdldEFzQnJhbmNoTm9kZSgpOworKyAgICAgICAgaWYgKGJyYW5jaE5vZGUg
IT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoYnJhbmNoTm9kZS0+Z2V0
Rmxvd09wKCkgPT0gRU9wS2lsbCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlm
IChkaXNjYXJkRnVuYyA9PSBudWxscHRyKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsK
KysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBib29sIHJlcGxhY2VkID0gbWFp
bkJvZHktPnJlcGxhY2VDaGlsZE5vZGUoYnJhbmNoTm9kZSwgZGlzY2FyZEZ1bmMpOworKyAgICAg
ICAgICAgICAgICBpZiAoIXJlcGxhY2VkKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHZhbGlkYXRlQVNUKHJvb3QpOwor
K30KKysKKysvLyBDcmVhdGUgZGlzY2FyZF93cmFwcGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0
IFNQSVJWLUNyb3NzIHdpbGwgYWx3YXlzIGhhdmUgYSByZXR1cm4gYXQgdGhlIGVuZAorKy8vIG9m
IGZyYWdtZW50IHNoYWRlcnMKKytBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRy
YW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9v
dCkKKyt7CisrICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAgICAgPSBnZXRJbmZvU2luaygpLm9i
ajsKKysgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOwor
KworKyAgICBzaW5rIDw8ICJ2b2lkICIgPDwga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUgPDwgIigp
XG4iOworKyAgICBzaW5rIDw8ICJ7XG4iOworKyAgICBzaW5rIDw8ICIgICBkaXNjYXJkO1xuIjsK
KysgICAgc2luayA8PCAifVxuIjsKKysKKysgICAgVEZ1bmN0aW9uICpkaXNjYXJkV3JhcHBlckZ1
bmMgPQorKyAgICAgICAgbmV3IFRGdW5jdGlvbihzeW1ib2xUYWJsZSwga0Rpc2NhcmRXcmFwcGVy
RnVuY05hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisrICAgICAgICAgICAgICAgICAg
ICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCksIHRydWUpOworKworKyAgICBUSW50
ZXJtQWdncmVnYXRlICpjYWxsRGlzY2FyZFdyYXBwZXJGdW5jID0KKysgICAgICAgIFRJbnRlcm1B
Z2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdyYXBwZXJGdW5jLCBuZXcgVElu
dGVybVNlcXVlbmNlKCkpOworKyAgICByZXR1cm4gY2FsbERpc2NhcmRXcmFwcGVyRnVuYzsKKyt9
CisrCisgfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWwuaAoraW5kZXggMGY0ZjFjYy4uYmNjMzE4NyAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAorQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNzIFRyYW5z
bGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCisgICBwdWJsaWM6CisgICAgIFRy
YW5zbGF0b3JNZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKyAKKysg
ICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUoKTsK
KysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENv
bnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRChib29sIGUp
IHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysKKyAgIHByb3RlY3RlZDoKKyAgICAgQU5H
TEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0
aW9ucywKK0BAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMg
VHJhbnNsYXRvclZ1bGthbgorIAorICAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0U2Ft
cGxlTWFza1dyaXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAq
ZHJpdmVyVW5pZm9ybXMpOworLSAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0UmFzdGVy
aXplckRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKyAgICBBTkdMRV9OT19ESVND
QVJEIGJvb2wgaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJv
b3QpOworKworKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVwbGFjZUFsbE1haW5EaXNjYXJk
VXNlcyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRl
cm1BZ2dyZWdhdGUgKmNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3Qp
OworKworKyAgICBib29sIG1FbXVsYXRlZEluc3RhbmNlSUQgPSBmYWxzZTsKKyB9OworIAorIH0g
IC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
NGUxMDIyOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0LmNwcAorQEAgLTAsMCArMSwxNDM5IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
LmgiCisrCisrI2luY2x1ZGUgImFuZ2xlX2dsLmgiCisrI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdGluc1dvcmthcm91bmRH
TFNMLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVp
bGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TdGF0aWNUeXBlLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0
VHlwZUNhc3RzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFu
dHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1i
b2xFbnYuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZUVtYmVkZGVkVW5pZm9ybVN0cnVjdHMuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVBdG9taWNDb3VudGVy
QnVpbHRpbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXku
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlRGZkeS5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVTdHJ1Y3RT
YW1wbGVycy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9CdWls
dEluLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ZpbmRGdW5j
dGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kTWFp
bi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kU3ltYm9s
Tm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1O
b2RlX3V0aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvUmVw
bGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytuYW1lc3Bh
Y2UKKyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1h
c2siLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrY29uc3RleHByIE5hbWUga0VtdUluc3Rh
bmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQp
OworKyNpZiAwCisrY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0
ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdyYXBwZXJGdW5jTmFtZSgi
RGlzY2FyZFdyYXBwZXIiKTsKKysjZW5kaWYKKytjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0
aFJhbmdlUGFyYW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7CisrY29uc3RleHByIE5hbWUga1VuaWZv
cm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CisrY29uc3RleHByIE5hbWUga1VuaWZvcm1z
VmFyTmFtZSgiYW5nbGVVbmlmb3JtcyIpOworK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRD
b29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOwor
K2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxpcHBlZEZyYWdDb29yZCIs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysKKytjb25zdGV4cHIgY29uc3QgY2hhciBrVmll
d3BvcnRbXSAgICAgICAgICAgICA9ICJ2aWV3cG9ydCI7CisrY29uc3RleHByIGNvbnN0IGNoYXIg
a0hhbGZSZW5kZXJBcmVhW10gICAgICAgPSAiaGFsZlJlbmRlckFyZWEiOworK2NvbnN0ZXhwciBj
b25zdCBjaGFyIGtGbGlwWFlbXSAgICAgICAgICAgICAgID0gImZsaXBYWSI7CisrY29uc3RleHBy
IGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtdICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKKytjb25z
dGV4cHIgY29uc3QgY2hhciBrQ2xpcERpc3RhbmNlc0VuYWJsZWRbXSA9ICJjbGlwRGlzdGFuY2Vz
RW5hYmxlZCI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1hmYkFjdGl2ZVVucGF1c2VkW10gICAg
PSAieGZiQWN0aXZlVW5wYXVzZWQiOworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNl
c1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2VzUGVyRHJhdyI7CisrY29uc3RleHByIGNvbnN0IGNo
YXIga1hmYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAieGZiQnVmZmVyT2Zmc2V0cyI7CisrY29uc3Rl
eHByIGNvbnN0IGNoYXIga0FjYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAiYWNiQnVmZmVyT2Zmc2V0
cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0RlcHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVw
dGhSYW5nZSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1ByZVJvdGF0aW9uW10gICAgICAgICAg
PSAicHJlUm90YXRpb24iOworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtGcmFnUm90YXRpb25bXSAg
ICAgICAgID0gImZyYWdSb3RhdGlvbiI7CisrCisrY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSBr
Z2xfVmVydGV4SW5kZXhNZXRhbCgKKysgICAgQnVpbHRJbklkOjpnbF9WZXJ0ZXhJbmRleCwKKysg
ICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIpLAorKyAgICBTeW1ib2xUeXBlOjpC
dWlsdEluLAorKyAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQsCisrICAgIFN0YXRpY1R5cGU6Okdl
dDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4oKSk7CisrCisrY29uc3RleHBy
IHNpemVfdCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3JtcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7CisrY29uc3RleHByIHN0ZDo6YXJyYXk8Y29u
c3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dyYXBoaWNzRHJpdmVyVW5p
Zm9ybU5hbWVzID0geworKyAgICB7a1ZpZXdwb3J0LCBrSGFsZlJlbmRlckFyZWEsIGtGbGlwWFks
IGtOZWdGbGlwWFksIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCwga1hmYkFjdGl2ZVVucGF1c2VkLAor
KyAgICAga1hmYlZlcnRpY2VzUGVyRHJhdywga1hmYkJ1ZmZlck9mZnNldHMsIGtBY2JCdWZmZXJP
ZmZzZXRzLCBrRGVwdGhSYW5nZSwga1ByZVJvdGF0aW9uLAorKyAgICAga0ZyYWdSb3RhdGlvbn19
OworKworK2NvbnN0ZXhwciBzaXplX3Qga051bUNvbXB1dGVEcml2ZXJVbmlmb3JtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOworK2NvbnN0ZXhwciBz
dGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJVbmlmb3Jtcz4ga0NvbXB1
dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisrICAgIHtrQWNiQnVmZmVyT2Zmc2V0c319OworKwor
K2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyCisreworKyAgcHVibGljOgorKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0VHlwZXNUcmF2
ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2Vy
KHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXRwdXRNU0wob3V0cHV0TVNMKQorKyAgICB7fQorKwor
KyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlv
biAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZp
c2l0KTsKKysgICAgICAgIGlmICghbUluR2xvYmFsU2NvcGUpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisrICAgICAgICBU
SW50ZXJtVHlwZWQgKmRlY2xhcmF0b3IgICAgICAgID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNU
eXBlZCgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgICAgICA9IGRlY2xh
cmF0b3ItPmdldFR5cGUoKTsKKysKKysgICAgICAgIGlmICh0eXBlLmlzU3RydWN0U3BlY2lmaWVy
KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKysKKysgICAgICAgICAgICAvLyBFbWJlZGRlZCBzdHJ1Y3Rz
IHNob3VsZCBiZSBwYXJzZWQgYXdheSBieSBub3cuCisrICAgICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZS0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKysgICAgICAgICAgICAv
LyBvdXRwdXRNU0wtPndyaXRlU3RydWN0VHlwZShzdHJ1Y3R1cmUpOworKworKyAgICAgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKysgICAgICAgICAgICBpZiAoc3ltYm9sTm9kZSAmJiBzeW1ib2xOb2RlLT52YXJpYWJsZSgp
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBm
cm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKysgICAgICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7CisrICAgICAgICAgICAgICAgIG1NdWx0
aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCks
IG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAg
Ly8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92ZSAndW5zdWVkJyB3YXJuaW5nCisrICAgICAg
ICBtT3V0cHV0TVNMID0gbnVsbHB0cjsKKysKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgcHJpdmF0ZToKKysgICAgVE91dHB1dE1TTCAqbU91dHB1dE1TTDsKKyt9OworKwor
K2NsYXNzIERlY2xhcmVEZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZl
cnNlcihUSW5mb1NpbmtCYXNlICpzaW5rLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisrICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1TaW5rKHNpbmspLAorKyAg
ICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisrICAgICAgICAgIG1OYW1lTWFw
KG5hbWVNYXApLAorKyAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybShmYWxzZSkKKysgICAge30K
KysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1
ZW5jZSAmc2VxdWVuY2UgPSAqKG5vZGUtPmdldFNlcXVlbmNlKCkpOworKworKyAgICAgICAgLy8g
VE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorKyAgICAgICAgQVNTRVJUKHNl
cXVlbmNlLnNpemUoKSA9PSAxKTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUg
PSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSAgICAgID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKysgICAgICAgIGJvb2wgaXNVbmlmb3Jt
ICAgICAgICAgPSB0eXBlLmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0gJiYgIXR5cGUuaXNJ
bnRlcmZhY2VCbG9jaygpICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5
cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisrCisrICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGlzVW5pZm9ybSkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0
eXBlLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworKyAgICAgICAgICAgICAgICBt
SW5EZWZhdWx0VW5pZm9ybSA9IHRydWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAg
ICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBtSW5EZWZhdWx0VW5pZm9ybSA9IGlzVW5pZm9ybTsKKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
aXNVbmlmb3JtKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgKCptU2luaykgPDwg
IjtcbiI7CisrCisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdW5pZm9ybSBkZWNsYXJh
dGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKysgICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7CisrICAgICAgICAgICAgICAg
IG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Js
b2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAg
IG1JbkRlZmF1bHRVbmlmb3JtID0gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgfQorKworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKG1JbkRlZmF1bHRVbmlmb3JtKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmbmFtZSA9IHN5
bWJvbC0+dmFyaWFibGUoKS5uYW1lKCk7CisrICAgICAgICAgICAgQVNTRVJUKCFuYW1lLmJlZ2lu
c1dpdGgoImdsXyIpKTsKKysgICAgICAgICAgICAoKm1TaW5rKSA8PCBIYXNoTmFtZSgmc3ltYm9s
LT52YXJpYWJsZSgpLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkKKysgICAgICAgICAgICAgICAg
ICAgICA8PCBBcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7CisrICAgICAgICB9CisrICAg
IH0KKysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgKm1TaW5rOworKyAgICBTaEhh
c2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247CisrICAgIE5hbWVNYXAgKm1OYW1lTWFwOworKyAg
ICBib29sIG1JbkRlZmF1bHRVbmlmb3JtOworK307CisrCisrVEludGVybUJpbmFyeSAqQ3JlYXRl
RHJpdmVyVW5pZm9ybVJlZihjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zLCBjb25zdCBj
aGFyICpmaWVsZE5hbWUpCisreworKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRGaWVsZElu
ZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCksIGZpZWxk
TmFtZSk7CisrCisrICAgIFRJbnRlcm1TeW1ib2wgKmFuZ2xlVW5pZm9ybXNSZWYgPSBuZXcgVElu
dGVybVN5bWJvbCgmZHJpdmVyVW5pZm9ybXMpOworKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5pZm9y
bUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworKyAgICB1bmlmb3JtSW5kZXgtPnNldElD
b25zdChzdGF0aWNfY2FzdDxpbnQ+KGZpZWxkSW5kZXgpKTsKKysgICAgVEludGVybUNvbnN0YW50
VW5pb24gKmluZGV4UmVmID0KKysgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlm
b3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworKyAgICByZXR1cm4g
bmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsIGFuZ2xlVW5pZm9ybXNSZWYs
IGluZGV4UmVmKTsKKyt9CisrCisrI2lmIDAKKysvLyBVbmxpa2UgVnVsa2FuIGhhdmluZyBhdXRv
IHZpZXdwb3J0IGZsaXBwaW5nIGV4dGVuc2lvbiwgaW4gTWV0YWwgd2UgaGF2ZSB0byBmbGlwIGds
X1Bvc2l0aW9uLnkKKysvLyBtYW51YWxseS4KKysvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBm
bGlwcGluZyB0aGUgZ2xfUG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisrLy8gZ2xf
UG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWlu
KFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1Td2l6emxlICZuZWdGbGlwWSkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAm
c3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICAvLyBDcmVh
dGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKysgICAgY29uc3QgVFZhcmlh
YmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisrICAgIFRJ
bnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOwor
KworKyAgICAvLyBDcmVhdGUgYSBzd2l6emxlIHRvICJnbF9Qb3NpdGlvbi55IgorKyAgICBUVmVj
dG9yPGludD4gc3dpenpsZU9mZnNldFk7CisrICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygx
KTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWSA9IG5ldyBUSW50ZXJtU3dpenpsZShw
b3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFkpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJl
c3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlwWSIKKysgICAgVEludGVybUJpbmFyeSAqaW52
ZXJzZVkgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWS0+ZGVlcENvcHkoKSwg
Jm5lZ0ZsaXBZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlv
bi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisrICAgIFRJbnRlcm1UeXBl
ZCAqcG9zaXRpb25ZTEhTID0gcG9zaXRpb25ZLT5kZWVwQ29weSgpOworKyAgICBUSW50ZXJtQmlu
YXJ5ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWdu
LCBwb3NpdGlvbllMSFMsIGludmVyc2VZKTsKKysKKysgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25t
ZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKysgICAgcmV0dXJu
IFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJv
bFRhYmxlKTsKKyt9CisrI2VuZGlmCisrCisrI2lmIDAKKysvLyBJbml0aWFsaXplIHVudXNlZCB2
YXJ5aW5nIG91dHB1dHMuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRP
dXRwdXRzKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5pdFZhcmlhYmxlTGlz
dCAmdW51c2VkVmFycykKKyt7CisrICAgIGlmICh1bnVzZWRWYXJzLmVtcHR5KCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgIFRJbnRlcm1TZXF1ZW5jZSAq
aW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybVNlcXVlbmNlOworKworKyAgICBmb3IgKGNvbnN0
IHNoOjpTaGFkZXJWYXJpYWJsZSAmdmFyIDogdW51c2VkVmFycykKKysgICAgeworKyAgICAgICAg
QVNTRVJUKCF2YXIuYWN0aXZlKTsKKysgICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCB2YXIubmFtZSk7CisrICAgICAgICBBU1NFUlQoc3lt
Ym9sKTsKKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAqaW5pdENvZGUgPSBDcmVhdGVJbml0
Q29kZShzeW1ib2wsIGZhbHNlLCBmYWxzZSwgJnN5bWJvbFRhYmxlKTsKKysKKysgICAgICAgIGlu
c2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVn
aW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKysgICAgfQorKworKyAgICBpZiAoaW5zZXJ0U2VxdWVu
Y2UpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKm1haW4gPSBG
aW5kTWFpbigmcm9vdCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAg
ID0gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworKworKyAgICAgICAgLy8gSW5zZXJ0
IGluaXQgY29kZSBhdCB0aGUgc3RhcnQgb2YgbWFpbigpCisrICAgICAgICBtYWluU2VxdWVuY2Ut
Pmluc2VydChtYWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBp
bnNlcnRTZXF1ZW5jZS0+ZW5kKCkpOworKyAgICB9CisrCisrICAgIHJldHVybiB0cnVlOworK30K
KysjZW5kaWYKKysKKytjb25zdCBUVmFyaWFibGUgKkFkZENvbXB1dGVEcml2ZXJVbmlmb3Jtc1Rv
U2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKKyt7
CisrICAgIC8vIFRoaXMgZmllbGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0
ZURyaXZlclVuaWZvcm1zIGluIENvbnRleHRWay5jcHAuCisrICAgIFRGaWVsZExpc3QgKmRyaXZl
ckZpZWxkTGlzdCA9IG5ldyBURmllbGRMaXN0OworKworKyAgICBjb25zdCBzdGQ6OmFycmF5PFRU
eXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7
eworKyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQsIDQpLAorKyAgICB9fTsKKysKKysgICAgZm9y
IChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUNvbXB1dGVEcml2
ZXJVbmlmb3JtczsgKyt1bmlmb3JtSW5kZXgpCisrICAgIHsKKysgICAgICAgIFRGaWVsZCAqZHJp
dmVyVW5pZm9ybUZpZWxkID0KKysgICAgICAgICAgICBuZXcgVEZpZWxkKGtEcml2ZXJVbmlmb3Jt
VHlwZXNbdW5pZm9ybUluZGV4XSwKKysgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0
cmluZyhrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNl
TG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2ZXJVbmlmb3JtRmllbGQp
OworKyAgICB9CisrCisrICAgIHJldHVybiBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9s
VGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5pZm9ybSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFt
ZS5yYXdOYW1lKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrVW5pZm9ybXNWYXJO
YW1lLnJhd05hbWUoKSkKKysgICAgICAgIC5zZWNvbmQ7CisrfQorKworKy8vIFRoZSBBZGQqRHJp
dmVyVW5pZm9ybXNUb1NoYWRlciBvcGVyYXRpb24gYWRkcyBhbiBpbnRlcm5hbCB1bmlmb3JtIGJs
b2NrIHRvIGEgc2hhZGVyLiBUaGUgZHJpdmVyCisrLy8gYmxvY2sgaXMgdXNlZCB0byBpbXBsZW1l
bnQgVnVsa2FuLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3b3JrYXJvdW5kcy4gUmV0dXJucyB0aGUg
ZHJpdmVyIHVuaWZvcm1zCisrLy8gdmFyaWFibGUuCisrLy8KKysvLyBUaGVyZSBhcmUgR3JhcGhp
Y3MgYW5kIENvbXB1dGUgdmFyaWF0aW9ucyBhcyB0aGV5IHJlcXVpcmUgZGlmZmVyZW50IHVuaWZv
cm1zLgorK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVy
KFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PFRGaWVsZCAqPiAmYWRkaXRpb25hbEZpZWxkcykKKyt7CisrICAgIC8vIEluaXQgdGhlIGRlcHRo
IHJhbmdlIHR5cGUuCisrICAgIFRGaWVsZExpc3QgKmRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMgPSBu
ZXcgVEZpZWxkTGlzdCgpOworKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2so
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSks
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0
YWJsZVN0cmluZygibmVhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsK
KysgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoImZhciIp
LCBrTm9Tb3VyY2VMb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKysgICAgZGVwdGhSYW5nZVBh
cmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoImRpZmYiKSwga05vU291cmNlTG9jLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKSk7CisrICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdo
dCBiZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorKyAgICBkZXB0
aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0Rmxv
YXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygicmVzZXJ2ZWQiKSwga05v
U291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKmVtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9CisrICAgICAgICBEZWNsYXJlU3RydWN0dXJl
KCZyb290LCAmc3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAs
IGtFbXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICBudWxscHRyKQorKyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisrICAgICAg
ICAgICAgLmdldFN0cnVjdCgpOworKworKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0
aGUgc3RydWN0dXJlIG9mIEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4K
KysgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRGaWVsZExpc3Q7CisrCisr
ICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+
IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRUeXBlKEVidEZsb2F0LCA0
KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisrICAgICAgICBuZXcgVFR5cGUo
RWJ0RmxvYXQsIDIpLAorKyAgICAgICAgbmV3IFRUeXBlKEVidEZsb2F0LCAyKSwKKysgICAgICAg
IG5ldyBUVHlwZShFYnRVSW50KSwgIC8vIHVpbnQgY2xpcERpc3RhbmNlc0VuYWJsZWQ7ICAvLyAz
MiBiaXRzIGZvciAzMiBjbGlwIGRpc3RhbmNlcyBtYXgKKysgICAgICAgIG5ldyBUVHlwZShFYnRV
SW50KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAgICAgIC8vIE5PVEU6IFRo
ZXJlJ3MgYSB2ZWMzIGdhcCBoZXJlIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZQorKyAg
ICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisrICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCwg
NCksCisrICAgICAgICBuZXcgVFR5cGUoZW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zLCBmYWxzZSks
CisrICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorKyAgICAgICAgbmV3IFRUeXBl
KEVidEZsb2F0LCAyLCA0KSwKKysgICAgfX07CisrCisrICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGtOdW1HcmFwaGljc0RyaXZlclVuaWZvcm1zOyArK3Vu
aWZvcm1JbmRleCkKKysgICAgeworKyAgICAgICAgVEZpZWxkICpkcml2ZXJVbmlmb3JtRmllbGQg
PQorKyAgICAgICAgICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5k
ZXhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3RyaW5nKGtHcmFwaGljc0Ry
aXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNlTG9jLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisrICAgICAgICBkcml2
ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2ZXJVbmlmb3JtRmllbGQpOworKyAgICB9CisrCisr
ICAgIC8vIEJhY2stZW5kIHNwZWNpZmljIGZpZWxkcworKyAgICBkcml2ZXJGaWVsZExpc3QtPmlu
c2VydChkcml2ZXJGaWVsZExpc3QtPmVuZCgpLCBhZGRpdGlvbmFsRmllbGRzLmJlZ2luKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMuZW5kKCkpOworKwor
KyAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5HTEVVbmlmb3JtQmxvY2si
IHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCisrICAgIHJldHVybiBEZWNsYXJl
U3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5pZm9y
bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRl
KCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysgICAgICAgIC5zZWNvbmQ7
CisrfQorKworKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVwdGhS
YW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KKytBTkdMRV9O
T19ESVNDQVJEIGJvb2wgUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2ZXJVbmlmb3JtKFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIC8vIENyZWF0ZSBhIHN5bWJvbCBy
ZWZlcmVuY2UgdG8gImdsX0RlcHRoUmFuZ2UiCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqZGVwdGhS
YW5nZVZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSAqPigKKysgICAgICAgIHN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7
CisrCisrICAgIC8vIEFOR0xFVW5pZm9ybXMuZGVwdGhSYW5nZQorKyAgICBUSW50ZXJtQmluYXJ5
ICphbmdsZUVtdWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKysKKysgICAgLy8gVXNlIHRoaXMgdmFyaWFibGUg
aW5zdGVhZCBvZiBnbF9EZXB0aFJhbmdlIGV2ZXJ5d2hlcmUuCisrICAgIHJldHVybiBSZXBsYWNl
VmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVF
bXVsYXRlZERlcHRoUmFuZ2VSZWYpOworK30KKysKKytUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5T
ZXF1ZW5jZShUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICptYWluID0gRmluZE1haW4oJnJvb3QpOworKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9k
eSgpLT5nZXRTZXF1ZW5jZSgpOworK30KKysKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5k
VmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21w
aWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQorK3sKKysgICAgVFN5bWJv
bFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrICAgIFRW
YXJpYWJsZSAqeGZiUGxhY2Vob2xkZXIgPSBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1t
dXRhYmxlU3RyaW5nKCJAQCBYRkItT1VUIEBAIiksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKysKKysgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0
IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
JmNvbXBpbGVyLCAmcm9vdCwgbmV3IFRJbnRlcm1TeW1ib2woeGZiUGxhY2Vob2xkZXIpLCAmc3lt
Ym9sVGFibGUpOworK30KKysKKysvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyB0aGUgdmlld3Bv
cnQgZGVwdGggdHJhbnNsYXRpb24gbmVlZGVkIGJ5IFZ1bGthbi4gSW4gR0wgdGhlIHZpZXdwb3J0
CisrLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50IC0gc2VlIHRoZSBHTCAy
LjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhlCisrLy8gVmlld3BvcnQiLiBJ
biBWdWxrYW4gdGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBzZWN0aW9uIGlzIGN1cnJlbnRseSAiMjMu
NC4gQ29vcmRpbmF0ZQorKy8vIFRyYW5zZm9ybWF0aW9ucyIuCisrLy8gVGhlIGVxdWF0aW9ucyBy
ZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKysvLworKy8vICAgICB6X3ZrID0gMC41ICogKHdfZ2wg
KyB6X2dsKQorKy8vCisrLy8gd2hlcmUgel92ayBpcyB0aGUgZGVwdGggb3V0cHV0IG9mIGEgVnVs
a2FuIHZlcnRleCBzaGFkZXIgYW5kIHpfZ2wgaXMgdGhlIHNhbWUgZm9yIEdMLgorK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJlY3Rpb25Ub01haW4oVENv
bXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKwor
KyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9z
aXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVybVN5
bWJvbChwb3NpdGlvbik7CisrCisrICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WiA9IHsy
fTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxl
KHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisrCisrICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICpvbmVIYWxmID0gQ3JlYXRlRmxvYXROb2RlKDAuNWYpOworKworKyAgICBUVmVjdG9yPGlu
dD4gc3dpenpsZU9mZnNldFcgPSB7M307CisrICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblcg
ICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgc3dpenpsZU9m
ZnNldFcpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorKyAgICBUSW50ZXJtQmluYXJ5ICp6UGx1c1cgPSBu
ZXcgVEludGVybUJpbmFyeShFT3BBZGQsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgcG9zaXRpb25X
LT5kZWVwQ29weSgpKTsKKysgICAgVEludGVybUJpbmFyeSAqaGFsZlpQbHVzVyA9IG5ldyBUSW50
ZXJtQmluYXJ5KEVPcE11bCwgelBsdXNXLCBvbmVIYWxmLT5kZWVwQ29weSgpKTsKKysKKysgICAg
Ly8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnog
KyBnbF9Qb3NpdGlvbi53KSAqIDAuNSIKKysgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpMSFMg
PSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQg
ID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywg
aGFsZlpQbHVzVyk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRl
bWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJldHVybiBSdW5BdFRoZUVuZE9m
U2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7CisrfQor
KworKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5
LWZsaXAuICBGb3IgQW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisrLy8gcGxhdGZvcm1z
KSwgdGhlIGRldmljZSBtYXkgcm90YXRlLCBzdWNoIHRoYXQgdGhlIG9yaWVudGF0aW9uIG9mIHRo
ZSBhcHBsaWNhdGlvbiBpcyByb3RhdGVkCisrLy8gcmVsYXRpdmUgdG8gdGhlIG5hdGl2ZSBvcmll
bnRhdGlvbiBvZiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBjb3JyZWN0ZWQgaW4gcGFydCBieSBtdWx0
aXBseWluZworKy8vIGdsX1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKysvLyBUaGUgZXF1YXRpb25zIHJl
ZHVjZSB0byBhbiBleHByZXNzaW9uOgorKy8vCisrLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xf
UG9zaXRpb24ueHkgKiBwcmVSb3RhdGlvbgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRQ
cmVSb3RhdGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCisr
eworKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlICAgICA9IGNvbXBpbGVyLmdldFN5bWJv
bFRhYmxlKCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJp
dmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga1ByZVJvdGF0aW9uKTsKKysgICAgVEludGVy
bVN5bWJvbCAqZ2xQb3MgICAgICAgICAgPSBuZXcgVEludGVybVN5bWJvbChCdWlsdEluVmFyaWFi
bGU6OmdsX1Bvc2l0aW9uKCkpOworKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFhZICA9
IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmdsUG9zWFkgICAgICAgPSBuZXcgVEludGVy
bVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7CisrCisrICAgIC8vIENyZWF0ZSB0aGUg
ZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorKyAgICBUSW50ZXJt
QmluYXJ5ICp6Um90YXRlZCA9CisrICAgICAgICBuZXcgVEludGVybUJpbmFyeShFT3BNYXRyaXhU
aW1lc1ZlY3RvciwgcHJlUm90YXRpb25SZWYtPmRlZXBDb3B5KCksIGdsUG9zWFktPmRlZXBDb3B5
KCkpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnh5ID0g
KGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorKyAgICBUSW50ZXJtQmluYXJ5ICphc3Np
Z25tZW50ID0KKysgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWdu
LCBnbFBvc1hZLT5kZWVwQ29weSgpLCB6Um90YXRlZCk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUg
YXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQs
ICZzeW1ib2xUYWJsZSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSb3RhdGVBbmRG
bGlwQnVpbHRpblZhcmlhYmxlKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1TZXF1ZW5jZSAmaW5zZXJ0U2VxdWVuY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZmbGlwWFksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZidWlsdGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE5hbWUgJmZsaXBwZWRWYXJpYWJsZU5hbWUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZwaXZvdCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICAvLyBDcmVhdGUgYSBzeW1i
b2wgcmVmZXJlbmNlIHRvICdidWlsdGluJy4KKysgICAgVEludGVybVN5bWJvbCAqYnVpbHRpblJl
ZiA9IG5ldyBUSW50ZXJtU3ltYm9sKCZidWlsdGluKTsKKysKKysgICAgLy8gQ3JlYXRlIGEgc3dp
enpsZSB0byAiYnVpbHRpbi54eSIKKysgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSA9
IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJt
U3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworKworKyAgICAvLyBDcmVhdGUg
YSBzeW1ib2wgcmVmZXJlbmNlIHRvIG91ciBuZXcgdmFyaWFibGUgdGhhdCB3aWxsIGhvbGQgdGhl
IG1vZGlmaWVkIGJ1aWx0aW4uCisrICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6
R2V0Rm9yVmVjPEVidEZsb2F0PigKKysgICAgICAgIEV2cUdsb2JhbCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oYnVpbHRpbi5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkpOworKyAgICBU
VmFyaWFibGUgKnJlcGxhY2VtZW50VmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIGZs
aXBwZWRWYXJpYWJsZU5hbWUucmF3TmFtZSgpLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUo
KSk7CisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgcmVwbGFjZW1lbnRWYXIpOwor
KyAgICBUSW50ZXJtU3ltYm9sICpmbGlwcGVkQnVpbHRpblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9s
KHJlcGxhY2VtZW50VmFyKTsKKysKKysgICAgLy8gVXNlIHRoaXMgbmV3IHZhcmlhYmxlIGluc3Rl
YWQgb2YgJ2J1aWx0aW4nIGV2ZXJ5d2hlcmUuCisrICAgIGlmICghUmVwbGFjZVZhcmlhYmxlKCZj
b21waWxlciwgJnJvb3QsICZidWlsdGluLCByZXBsYWNlbWVudFZhcikpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Np
b24gIihidWlsdGluLnh5ICogZnJhZ1JvdGF0aW9uKSIKKysgICAgVEludGVybVR5cGVkICpyb3Rh
dGVkWFk7CisrICAgIGlmIChmcmFnUm90YXRpb24pCisrICAgIHsKKysgICAgICAgIHJvdGF0ZWRY
WSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBmcmFnUm90YXRpb24t
PmRlZXBDb3B5KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWls
dGluWFktPmRlZXBDb3B5KCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAg
Ly8gTm8gcm90YXRpb24gYXBwbGllZCwgdXNlIG9yaWdpbmFsIHZhcmlhYmxlLgorKyAgICAgICAg
cm90YXRlZFhZID0gYnVpbHRpblhZLT5kZWVwQ29weSgpOworKyAgICB9CisrCisrICAgIC8vIENy
ZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgLSBwaXZvdCkgKiBmbGlwWFkgKyBwaXZv
dAorKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVP
cFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWFkg
ICA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgcmVtb3ZlUGl2b3QsICZmbGlwWFkpOworKyAg
ICBUSW50ZXJtQmluYXJ5ICpwbHVzUGl2b3QgICA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFkZCwg
aW52ZXJzZVhZLCBwaXZvdC5kZWVwQ29weSgpKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBjb3Jy
ZWN0ZWQgdmFyaWFibGUgYW5kIGNvcHkgdGhlIHZhbHVlIG9mIHRoZSBvcmlnaW5hbCBidWlsdGlu
LgorKyAgICBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgp
OworKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRlZXBDb3B5KCkpOworKyAg
ICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVD
b25zdHJ1Y3RvcihidWlsdGluLmdldFR5cGUoKSwgc2VxdWVuY2UpOworKyAgICBUSW50ZXJtQmlu
YXJ5ICphc3NpZ25tZW50ICAgPSBuZXcgVEludGVybUJpbmFyeShFT3BJbml0aWFsaXplLCBmbGlw
cGVkQnVpbHRpblJlZiwgYWdncmVnYXRlKTsKKysKKysgICAgLy8gQ3JlYXRlIGFuIGFzc2lnbm1l
bnQgdG8gdGhlIHJlcGxhY2VkIHZhcmlhYmxlJ3MgLnh5LgorKyAgICBUSW50ZXJtU3dpenpsZSAq
Y29ycmVjdGVkWFkgPQorKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxlKGZsaXBwZWRCdWlsdGlu
UmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworKyAgICBUSW50ZXJtQmluYXJ5ICph
c3NpZ25Ub1kgPSBuZXcgVEludGVybUJpbmFyeShFT3BBc3NpZ24sIGNvcnJlY3RlZFhZLCBwbHVz
UGl2b3QpOworKworKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbWFpbiBmdW5jdGlvbgorKyAgICB7CisrICAgICAgICBUSW50ZXJtQmluYXJ5ICpub2Rl
c1tdID0ge2Fzc2lnbm1lbnQsIGFzc2lnblRvWX07CisrICAgICAgICBpbnNlcnRTZXF1ZW5jZS5p
bnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2RlcyksIHN0ZDo6ZW5k
KG5vZGVzKSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENvcnJl
Y3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9j
ayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9y
bXMpCisreworKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVy
VW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisrICAgIFRJbnRlcm1CaW5hcnkg
JnBpdm90ICAgICAgICA9ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBr
SGFsZlJlbmRlckFyZWEpOworKyAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPSAoY29t
cGlsZU9wdGlvbnMgJiBTSF9BRERfUFJFX1JPVEFUSU9OKQorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1z
LCBrRnJhZ1JvdGF0aW9uKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBudWxscHRyOworKyAgICByZXR1cm4gUm90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShjb21w
aWxlciwgcm9vdCwgaW5zZXJ0U2VxdWVuY2UsIGZsaXBYWSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtG
bGlwcGVkRnJhZ0Nvb3JkTmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGl2b3QsIGZyYWdSb3RhdGlvbik7CisrfQorKworK1RJbnRlcm1CaW5hcnkgKkdldERy
aXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQorK3sKKysgICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0
ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKysKKysgICAg
cmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0U3RydWN0LCBkZXB0aFJhbmdl
LCBDcmVhdGVJbmRleE5vZGUoMykpOworK30KKysKKyt2b2lkIERlY2xhcmVSaWdodEJlZm9yZU1h
aW4oVEludGVybUJsb2NrICZyb290LCBjb25zdCBUVmFyaWFibGUgJnZhcikKKyt7CisrICAgIHJv
b3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwge25ldyBUSW50ZXJtRGVj
bGFyYXRpb257JnZhcn19KTsKKyt9CisrCisrdm9pZCBBZGRGcmFnQ29sb3JEZWNsYXJhdGlvbihU
SW50ZXJtQmxvY2sgJnJvb3QsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCisreworKyAgICBy
b290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgmcm9vdCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2V7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbntCdWls
dEluVmFyaWFibGU6OmdsX0ZyYWdDb2xvcigpfX0pOworK30KKysKKyt2b2lkIEFkZEZyYWdEZXB0
aERlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSkKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZXtuZXcgVEludGVybURl
Y2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0RlcHRoKCl9fSk7CisrfQorKworK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBBZGRGcmFnRGF0YURlY2xhcmF0aW9uKFRDb21waWxlciAmY29t
cGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKyAgICBjb25zdCBpbnQgbWF4RHJh
d0J1ZmZlcnMgID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuTWF4RHJhd0J1ZmZlcnM7CisrICAg
IFRUeXBlICpnbF9GcmFnRGF0YVR5cGUgICAgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxRnJhZ0RhdGEsIDQsIDEpOworKyAgICBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUg
Kj4gZ2xGcmFnRGF0YVNsb3RzOworKyAgICBUSW50ZXJtU2VxdWVuY2UgZGVjbGFyZUdMRnJhZ2Rh
dGFTZXF1ZW5jZTsKKysKKysgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAsMSwyLDMKKysgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQorKyAgICB7CisrICAgICAg
ICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFnRGF0YV8iKSAr
IDIpOworKyAgICAgICAgYnVpbGRlciA8PCAiZ2xfRnJhZ0RhdGFfIjsKKysgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kRGVjaW1hbChpKTsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0
YSA9CisrICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIGJ1aWxkZXIsIGds
X0ZyYWdEYXRhVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRFeHRlbnNpb246OlVOREVGSU5FRCk7CisrICAgICAgICBnbEZyYWdEYXRh
U2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworKyAgICAgICAgZGVjbGFyZUdMRnJhZ2RhdGFT
ZXF1ZW5jZS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntnbEZyYWdEYXRhfSk7Cisr
ICAgIH0KKysgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKysKKysgICAgLy8gQ3JlYXRlIGFuIGludGVybmFs
IGdsX0ZyYWdEYXRhIGFycmF5IHR5cGUsIGNvbXBhdGlibGUgd2l0aCBpbmRleGluZyBzeW50YXgu
CisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworKyAgICBnbF9GcmFnRGF0YVR5cGVBcnJheS0+
bWFrZUFycmF5KG1heERyYXdCdWZmZXJzKTsKKysgICAgY29uc3QgVFZhcmlhYmxlICpnbEZyYWdE
YXRhR2xvYmFsID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygi
Z2xfRnJhZ0RhdGEiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7
CisrCisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgZ2xGcmFnRGF0YUdsb2JhbCk7
CisrICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1i
b2xOb2RlKCZyb290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworKyAgICBBU1NF
UlQob3JpZ2luYWxHTEZyYWdEYXRhKTsKKysKKysgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgp
IHdpdGggb3VyIGdsb2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKysgICAgaWYgKCFSZXBsYWNlVmFy
aWFibGUoJmNvbXBpbGVyLCAmcm9vdCwgJihvcmlnaW5hbEdMRnJhZ0RhdGEtPnZhcmlhYmxlKCkp
LCBnbEZyYWdEYXRhR2xvYmFsKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIC8vIEFzc2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQK
KysgICAgVEludGVybUJsb2NrICppbnNlcnRTZXF1ZW5jZSA9IG5ldyBUSW50ZXJtQmxvY2soKTsK
KysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQorKyAgICB7Cisr
ICAgICAgICBUSW50ZXJtVHlwZWQgKmdsRnJhZ0RhdGFTbG90ICAgICAgICAgPSBuZXcgVEludGVy
bVN5bWJvbChnbEZyYWdEYXRhU2xvdHNbaV0pOworKyAgICAgICAgVEludGVybVR5cGVkICpnbEZy
YWdEYXRhR2xvYmFsU3ltYm9sID0gbmV3IFRJbnRlcm1TeW1ib2woZ2xGcmFnRGF0YUdsb2JhbCk7
CisrICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJ
bmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwgaSk7CisrICAgICAgICBUSW50ZXJtQmluYXJ5
ICphc3NpZ25tZW50ID0KKysgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6
OkVPcEFzc2lnbiwgZ2xGcmFnRGF0YVNsb3QsICZhY2Nlc3MpOworKyAgICAgICAgaW5zZXJ0U2Vx
dWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50KTsKKysgICAgfQorKyAgICByZXR1cm4g
UnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290LCBpbnNlcnRTZXF1ZW5jZSwgJnN5
bWJvbFRhYmxlKTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5j
ZUlEKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykKKyt7CisrICAg
IFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorKyAgICAgICAgQ3JlYXRlRHJpdmVyVW5p
Zm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0VtdUluc3RhbmNlSURGaWVsZC5yYXdOYW1lKCkuZGF0
YSgpKTsKKysgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0gQnVpbHRJblZhcmlhYmxl
OjpnbF9JbnN0YW5jZUluZGV4KCk7CisrICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlw
ZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFuY2VJRCk7CisrfQorKwor
Ky8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxpcHBpbmcgZXh0ZW5zaW9u
LCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQorKy8vIG1hbnVhbGx5Lgor
Ky8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBnbF9Qb3NpdGlvbi55IHVz
aW5nIHRoaXMgZXhwcmVzc2lvbjoKKysvLyBnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAq
IG5lZ1ZpZXdwb3J0U2NhbGVZCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFZlcnRleFNo
YWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVyICZjb21waWxlciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6bGUgJm5lZ0Zs
aXBZKQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5
bWJvbFRhYmxlKCk7CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJ
blZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpOworKyAgICBUSW50ZXJtU3ltYm9sICpwb3NpdGlvblJl
ZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKysKKysgICAgVFZlY3RvcjxpbnQ+IHN3
aXp6bGVPZmZzZXRZOworKyAgICBzd2l6emxlT2Zmc2V0WS5wdXNoX2JhY2soMSk7CisrICAgIFRJ
bnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYs
IHN3aXp6bGVPZmZzZXRZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBleHByZXNzaW9uICJnbF9Q
b3NpdGlvbi55ICogbmVnRmxpcFkiCisrICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3
IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7
CisrCisrICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9zaXRpb24ueSA9IGdsX1Bv
c2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9u
WUxIUyA9IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKysgICAgVEludGVybUJpbmFyeSAqYXNzaWdu
bWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25Z
TEhTLCBpbnZlcnNlWSk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0
YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJldHVybiBSdW5BdFRoZUVu
ZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cisr
fQorKworK30gIC8vIG5hbWVzcGFjZQorKworK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNs
YXRvck1ldGFsRGlyZWN0KHNoOjpHTGVudW0gdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlclNwZWMgc3BlYywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91dHB1dCBvdXRwdXQpCisr
ICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkKKyt7fQorKworKy8vIHN0YXRpYwor
K2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxl
ZENvbnN0TmFtZSgpCisreworKyAgICByZXR1cm4gY29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1h
c2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7CisrfQorKworKy8vIHN0YXRpYworK2NvbnN0IGNo
YXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVk
Q29uc3ROYW1lKCkKKyt7CisrICAgIHJldHVybiBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOworK30KKysKKytBTkdMRV9OT19ESVND
QVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9s
VGFibGUgPSAmZ2V0U3ltYm9sVGFibGUoKTsKKysKKysgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3
IFRUeXBlKEVidEJvb2wpOworKyAgICBib29sVHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
KysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisrICAgICAgICBuZXcgVFZhcmlh
YmxlKHN5bWJvbFRhYmxlLCBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5h
YmxlZC5yYXdOYW1lKCksIGJvb2xUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5zeW1ib2xUeXBlKCkpOworKwor
KyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9z
aXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVybVN5
bWJvbChwb3NpdGlvbik7CisrCisrICAgIC8vIENyZWF0ZSB2ZWM0KC0zLCAtMywgLTMsIDEpOgor
KyAgICBhdXRvIHZlYzRUeXBlICAgICAgICAgICAgID0gbmV3IFRUeXBlKEVidEZsb2F0LCA0KTsK
KysgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsK
KysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysgICAg
dmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysgICAgdmVjNEFy
Z3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysgICAgdmVjNEFyZ3MtPnB1
c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoMS4wZikpOworKyAgICBUSW50ZXJtQWdncmVnYXRlICpj
b25zdFZhckNvbnN0cnVjdG9yID0KKysgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNv
bnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGFz
c2lnbm1lbnQgImdsX1Bvc2l0aW9uID0gdmVjNCgtMywgLTMsIC0zLCAxKSIKKysgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCA9CisrICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0
b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25SZWYtPmRlZXBDb3B5KCksIGNvbnN0VmFyQ29uc3RydWN0
b3IpOworKworKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxv
Y2s7CisrICAgIGRpc2NhcmRCbG9jay0+YXBwZW5kU3RhdGVtZW50KGFzc2lnbm1lbnQpOworKwor
KyAgICBUSW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRp
c2NhcmRFbmFibGVkVmFyKTsKKysgICAgVEludGVybUlmRWxzZSAqaWZDYWxsICAgICAgICAgPSBu
ZXcgVEludGVybUlmRWxzZShkaXNjYXJkRW5hYmxlZCwgZGlzY2FyZEJsb2NrLCBudWxscHRyKTsK
KysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwg
c3ltYm9sVGFibGUpOworK30KKysKKysvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0
aCBpZiBkZXB0aFJhbmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRl
cHRoIGZhcgorKy8vIFRoaXMgaXMgYWNoaWV2ZWQgYnkgbXVsdGlwbHkgdGhlIGRlcHRoIHZhbHVl
IHdpdGggc2NhbGUgdmFsdWUgc3RvcmVkIGluCisrLy8gZHJpdmVyIHVuaWZvcm0ncyBkZXB0aFJh
bmdlLnJlc2VydmVkCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRo
QmVmb3JlQ29ycmVjdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
JmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBC
dWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisrICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0
aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworKworKyAgICBUVmVjdG9yPGlu
dD4gc3dpenpsZU9mZnNldFogPSB7Mn07CisrICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblog
ICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworKwor
KyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpTY2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0
aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJVbmlmb3Jtcyk7CisrCisrICAgIC8vIENyZWF0
ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiLgor
KyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBv
c2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2NhbGUpOworKworKyAgICAvLyBDcmVhdGUg
dGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi56ICogZGVwdGhSYW5n
ZS5yZXNlcnZlZCIKKysgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblot
PmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRl
cm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgelNjYWxlKTsKKysK
KysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGFzc2lnbm1lbnQs
ICZnZXRTeW1ib2xUYWJsZSgpKTsKKyt9CisrCisrdm9pZCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVsZHMoCisrICAgIHN0ZDo6
dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0KQorK3sKKysgICAgLy8gQWRkIGNvdmVyYWdlIG1h
c2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBidWlsdC1pbiBHTF9TQU1Q
TEVfQ09WRVJBR0VfVkFMVUUKKysgICAgLy8gZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5LCBuZWVk
cyB0byBlbXVsYXRlIGl0IHVzaW5nIGZyYWdtZW50IHNoYWRlcidzIFtbc2FtcGxlX21hc2tdXSBv
dXRwdXQKKysgICAgLy8gdmFsdWUuCisrICAgIFRGaWVsZCAqY292ZXJhZ2VNYXNrRmllbGQgPSBu
ZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFza0ZpZWxkLnJhd05hbWUo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05vU291cmNl
TG9jLCBrQ292ZXJhZ2VNYXNrRmllbGQuc3ltYm9sVHlwZSgpKTsKKysgICAgZmllbGRzT3V0LnB1
c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisrCisrICAgIGlmIChtRW11bGF0ZWRJbnN0YW5j
ZUlEKQorKyAgICB7CisrICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVsZCA9IG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3TmFtZSgpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtOb1NvdXJj
ZUxvYywga0VtdUluc3RhbmNlSURGaWVsZC5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgZmllbGRz
T3V0LnB1c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworKyAgICB9CisrfQorKworK1RJbnRl
cm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlw
WVJlZigKKysgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykgY29uc3QKKyt7Cisr
ICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorKyAgICBUSW50ZXJtQmlu
YXJ5ICpuZWdGbGlwWFkgICAgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1z
LCBrTmVnRmxpcFhZKTsKKysgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZID0gezF9Owor
KyAgICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVn
RmxpcFhZLCBzd2l6emxlT2Zmc2V0WSk7CisrICAgIHJldHVybiBuZWdGbGlwWTsKKyt9CisrCisr
c3RhdGljIHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5d29yZHMoKQorK3sKKysg
ICAgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKysKKysgICAga2V5d29yZHMu
ZW1wbGFjZSgiYWxpZ25hcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7Cisr
ICAgIGtleXdvcmRzLmVtcGxhY2UoImFzX3R5cGUiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgi
YXV0byIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOworKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJjaGFyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNsYXNzIik7CisrICAgIGtl
eXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nhc3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiY29u
c3RhbnQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RleHByIik7CisrICAgIGtleXdv
cmRzLmVtcGxhY2UoImRlY2x0eXBlIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImRlbGV0ZSIp
OworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZXZpY2UiKTsKKysgICAga2V5d29yZHMuZW1wbGFj
ZSgiZHluYW1pY19jYXN0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImVudW0iKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZXhw
b3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImV4dGVybiIpOworKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJmcmFnbWVudCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmllbmQiKTsKKysg
ICAga2V5d29yZHMuZW1wbGFjZSgiZ290byIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJoYWxm
Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOworKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImludDMyX3QiKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQ4
X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7CisrICAgIGtleXdvcmRzLmVt
cGxhY2UoImxvbmciKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWFpbjAiKTsKKysgICAga2V5
d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibXV0YWJsZSIp
OworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJuYW1lc3BhY2UiKTsKKysgICAga2V5d29yZHMuZW1w
bGFjZSgibmV3Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0Iik7CisrICAgIGtl
eXdvcmRzLmVtcGxhY2UoIm51bGxwdHJfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJudWxs
cHRyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisrICAgIGtleXdvcmRz
LmVtcGxhY2UoIm92ZXJyaWRlIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInByaXZhdGUiKTsK
KysgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInB0cmRpZmZfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwdWJsaWMiKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicmVn
aXN0ZXIiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsKKysgICAga2V5d29yZHMu
ZW1wbGFjZSgic2lnbmVkIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInNpemVfdCIpOworKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplb2YiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic3Rh
Z2VfaW4iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fzc2VydCIpOworKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfY2FzdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJz
dGF0aWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGVtcGxhdGUiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgidGhpcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwi
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInRocmVhZGdyb3VwX2ltYWdlYmxvY2siKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhy
ZWFkZ3JvdXAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyb3ciKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgidHJ5Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKysg
ICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWlkIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInR5
cGVuYW1lIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVjaGFyIik7CisrICAgIGtleXdvcmRz
LmVtcGxhY2UoInVpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQzMl90Iik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQ2NF90Iik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5pb24iKTsKKysgICAga2V5
d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidXNob3J0
Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaW5nIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInZlcnRleCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2aXJ0dWFsIik7CisrICAgIGtl
eXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIndjaGFy
X3QiKTsKKysKKysgICAgcmV0dXJuIGtleXdvcmRzOworK30KKysKKytib29sIFRyYW5zbGF0b3JN
ZXRhbERpcmVjdDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxvY2sgJnJvb3QsIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMpCisreworKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
ID0gZ2V0U3ltYm9sVGFibGUoKTsKKysgICAgSWRHZW4gaWRHZW47CisrICAgIFByb2dyYW1QcmVs
dWRlQ29uZmlnIHBwYzsKKysKKysgICAgaWYgKCFXcmFwTWFpbigqdGhpcywgaWRHZW4sIHJvb3Qp
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgVEluZm9T
aW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2JqOworKyNpZiAwCisrICAgIGlmIChnZXRT
aGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgeworKyAgICAgICAgaWYgKCFT
aGFkZXJCdWlsdGluc1dvcmthcm91bmQodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwgY29tcGls
ZU9wdGlvbnMpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
ICAgIH0KKysgICAgfQorKyNlbmRpZgorKworKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFy
aWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisrICAgIGlmICghUmVtb3ZlSW5hY3RpdmVJbnRlcmZh
Y2VWYXJpYWJsZXModGhpcywgJnJvb3QsIGdldEF0dHJpYnV0ZXMoKSwgZ2V0SW5wdXRWYXJ5aW5n
cygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE91dHB1
dFZhcmlhYmxlcygpLCBnZXRVbmlmb3JtcygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIFdyaXRlIG91dCBkZWZhdWx0IHVuaWZv
cm1zIGludG8gYSB1bmlmb3JtIGJsb2NrIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgc2V0L2JpbmRp
bmcuCisrICAgIGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisrICAgIGlu
dCBhZ2dyZWdhdGVUeXBlc1VzZWRGb3JVbmlmb3JtcyA9IDA7CisrICAgIGludCBhdG9taWNDb3Vu
dGVyQ291bnQgICAgICAgICAgICA9IDA7CisrICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6
IGdldFVuaWZvcm1zKCkpCisrICAgIHsKKysgICAgICAgIGlmICghdW5pZm9ybS5pc0J1aWx0SW4o
KSAmJiB1bmlmb3JtLmFjdGl2ZSAmJiAhZ2w6OklzT3BhcXVlVHlwZSh1bmlmb3JtLnR5cGUpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgICsrZGVmYXVsdFVuaWZvcm1Db3VudDsKKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmICh1bmlmb3JtLmlzU3RydWN0KCkgfHwgdW5pZm9ybS5pc0FycmF5
T2ZBcnJheXMoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNl
ZEZvclVuaWZvcm1zOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZl
ICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVuaWZvcm0udHlwZSkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgKythdG9taWNDb3VudGVyQ291bnQ7CisrICAgICAgICB9CisrICAgIH0KKysK
KysgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zID4gMCkKKysgICAgeworKyAg
ICAgICAgaWYgKCFOYW1lRW1iZWRkZWRTdHJ1Y3RVbmlmb3Jtcyh0aGlzLCAmcm9vdCwgJnN5bWJv
bFRhYmxlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrCisrICAgICAgICBib29sIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdDsKKysgICAg
ICAgIGludCByZW1vdmVkVW5pZm9ybXNDb3VudDsKKysKKysgICAgICAgIGlmIChjb21waWxlT3B0
aW9ucyAmIFNIX1VTRV9PTERfUkVXUklURV9TVFJVQ1RfU0FNUExFUlMpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0KKysgICAgICAgICAgICAg
ICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzT2xkKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUsICZy
ZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0KKysgICAgICAg
ICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUs
ICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIXJl
d3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBkZWZhdWx0VW5pZm9ybUNvdW50IC09IHJl
bW92ZWRVbmlmb3Jtc0NvdW50OworKworKyNpZiAwCisrICAgICAgICAvLyBXZSBtdXN0IGRlY2xh
cmUgdGhlIHN0cnVjdCB0eXBlcyBiZWZvcmUgdXNpbmcgdGhlbS4KKysgICAgICAgIERlY2xhcmVT
dHJ1Y3RUeXBlc1RyYXZlcnNlciBzdHJ1Y3RUeXBlc1RyYXZlcnNlcihvdXRwdXRNU0wpOworKyAg
ICAgICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKysgICAgICAgIGlm
ICghc3RydWN0VHlwZXNUcmF2ZXJzZXIudXBkYXRlVHJlZSh0aGlzLCByb290KSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrI2VuZGlmCisrICAg
IH0KKysKKysgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9TRUFNRlVMX0NVQkVf
TUFQX1NBTVBMSU5HKQorKyAgICB7CisrICAgICAgICBpZiAoIVJld3JpdGVDdWJlTWFwU2FtcGxl
cnNBczJEQXJyYXkodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTaGFkZXJUeXBlKCkgPT0gR0xfRlJBR01F
TlRfU0hBREVSKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
ICAgICB9CisrICAgIH0KKysKKysjaWYgMAorKyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0g
YmxvY2sKKysgICAgaWYgKGRlZmF1bHRVbmlmb3JtQ291bnQgPiAwKQorKyAgICB7CisrICAgICAg
ICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0gZ2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5
cGU+KGdldFNoYWRlclR5cGUoKSk7CisrICAgICAgICBzaW5rIDw8ICJcbnN0cnVjdCAiIDw8IGtE
ZWZhdWx0VW5pZm9ybU5hbWVzW3NoYWRlclR5cGVdIDw8ICJcbntcbiI7CisrICAgICAgICBEZWNs
YXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIGRlZmF1bHRUcmF2ZXJzZXIoJnNpbmssIGdldEhh
c2hGdW5jdGlvbigpLCAmZ2V0TmFtZU1hcCgpKTsKKysgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZk
ZWZhdWx0VHJhdmVyc2VyKTsKKysgICAgICAgIGlmICghZGVmYXVsdFRyYXZlcnNlci51cGRhdGVU
cmVlKHRoaXMsIHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgIH0KKysKKysgICAgICAgIHNpbmsgPDwgIn07XG4iOworKyAgICB9CisrI2VuZGlm
CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMgPSAqWyZdKCkgeworKyAg
ICAgICAgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUikKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIo
cm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiBhZGRpdGlvbmFsRmllbGRzOwor
KyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVsZHMo
YWRkaXRpb25hbEZpZWxkcyk7CisrICAgICAgICAgICAgcmV0dXJuIEFkZEdyYXBoaWNzRHJpdmVy
VW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSwgYWRkaXRpb25hbEZpZWxkcyk7Cisr
ICAgICAgICB9CisrICAgIH0oKTsKKysKKysgICAgaWYgKGF0b21pY0NvdW50ZXJDb3VudCA+IDAp
CisrICAgIHsKKysgICAgICAgIC8vIEFOR0xFVW5pZm9ybXMuYWNiQnVmZmVyT2Zmc2V0cworKyAg
ICAgICAgY29uc3QgVEludGVybUJpbmFyeSAqYWNiQnVmZmVyT2Zmc2V0cyA9CisrICAgICAgICAg
ICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9mZnNl
dHMpOworKworKyAgICAgICAgaWYgKCFSZXdyaXRlQXRvbWljQ291bnRlcnModGhpcywgJnJvb3Qs
ICZzeW1ib2xUYWJsZSwgYWNiQnVmZmVyT2Zmc2V0cykpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgaWYgKGdldFNo
YWRlclZlcnNpb24oKSA+PSAzMTApCisrICAgIHsKKysgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0
IHN1cHBvcnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2Vl
bgorKyAgICAgICAgLy8gY2FzZXMgd2hlcmUgYnVpbHRpbnMgYXJlIHVzaW5nIGl0IGV2ZW4gd2l0
aCBubyBhY3RpdmUgYXRvbWljIGNvdW50ZXJzLgorKyAgICAgICAgLy8gVGhpcyBwYXNzIHNpbXBs
eSByZW1vdmVzIHRob3NlIGJ1aWx0aW5zIGluIHRoYXQgc2NlbmFyaW8uCisrICAgICAgICBpZiAo
IVJlbW92ZUF0b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
IChnZXRTaGFkZXJUeXBlKCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisrICAgIHsKKysgICAgICAg
IGlmICghUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2ZXJVbmlmb3JtKCp0aGlzLCByb290LCBk
cml2ZXJVbmlmb3JtcykpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICAgICAgfQorKworKyNpZiAwCisrICAgICAgICAvLyBBZGQgc3BlY2lhbGl6YXRpb24gY29u
c3RhbnQgZGVjbGFyYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHNwZWNpYWxpemF0
aW9uCisrICAgICAgICAvLyBjb25zdGFudCBpcyBpcnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNl
dCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4KKysgICAgICAgIGlmIChjb21waWxlT3B0aW9u
cyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25zdGFudF9pZD0iCisrICAgICAgICAgICAg
ICAgICA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odms6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRJ
ZDo6TGluZVJhc3RlckVtdWxhdGlvbikKKysgICAgICAgICAgICAgICAgIDw8ICIpIGNvbnN0IGJv
b2wgIiA8PCBrTGluZVJhc3RlckVtdWxhdGlvblNwZWNDb25zdFZhck5hbWUgPDwgIiA9IGZhbHNl
O1xuXG4iOworKyAgICAgICAgfQorKyNlbmRpZgorKyAgICB9CisrCisrICAgIHsKKysgICAgICAg
IGJvb2wgdXNlc0luc3RhbmNlSWQgPSBmYWxzZTsKKysgICAgICAgIGZvciAoY29uc3QgU2hhZGVy
VmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlm
ICh2YXIuaXNCdWlsdEluKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAo
dmFyLm5hbWUgPT0gImdsX0luc3RhbmNlSUQiKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAodXNlc0luc3RhbmNl
SWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKAorKyAg
ICAgICAgICAgICAgICBGaW5kTWFpbkluZGV4KCZyb290KSwKKysgICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9J
bnN0YW5jZUlEKCl9fSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLy8gRGVjbGFyZSBn
bF9GcmFnQ29sb3IgYW5kIGdsRnJhZ0RhdGEgYXMgd2ViZ2xfRnJhZ0NvbG9yIGFuZCB3ZWJnbF9G
cmFnRGF0YQorKyAgICAvLyBpZiBpdCdzIGNvcmUgcHJvZmlsZSBzaGFkZXJzIGFuZCB0aGV5IGFy
ZSB1c2VkLgorKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikK
KysgICAgeworKyAgICAgICAgYm9vbCB1c2VzUG9pbnRDb29yZCAgPSBmYWxzZTsKKysgICAgICAg
IGJvb2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisrICAgICAgICBib29sIHVzZXNGcm9udEZh
Y2luZyA9IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmaW5wdXRW
YXJ5aW5nIDogbUlucHV0VmFyeWluZ3MpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGlu
cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGlmIChpbnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisrICAgICAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVzZXNQb2ludENvb3JkID0gdHJ1ZTsKKysgICAg
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhcnlpbmcubmFt
ZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgdXNlc0ZyYWdDb29yZCA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYXJ5aW5nLm5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdXNlc0Zyb250RmFjaW5n
ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZhbHNlOworKyAgICAgICAgYm9vbCB1
c2VzRnJhZ0RhdGEgID0gZmFsc2U7CisrICAgICAgICBib29sIHVzZXNGcmFnRGVwdGggPSBmYWxz
ZTsKKysgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBt
T3V0cHV0VmFyaWFibGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5
aW5nLmlzQnVpbHRJbigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKG91
dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRydWU7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJn
bF9GcmFnRGF0YSIpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVz
ZXNGcmFnRGF0YSA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
ZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVwdGgiKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0RlcHRoID0gdHJ1ZTsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAodXNlc0ZyYWdD
b2xvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBBZGRGcmFnQ29sb3JEZWNsYXJhdGlvbihy
b290LCBzeW1ib2xUYWJsZSk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAodXNlc0ZyYWdE
YXRhKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICghQWRkRnJhZ0RhdGFEZWNsYXJhdGlv
bigqdGhpcywgcm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNG
cmFnRGVwdGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRp
b24ocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKworKyNpZiAwCisrICAgICAgICBp
ZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVfUkFTVEVSX0VNVUxBVElP
TikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZT
KHRoaXMsIGNvbXBpbGVPcHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJVbmlmb3JtcywgdXNlc0Zy
YWdDb29yZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyNlbmRpZgorKworKyAgICAgICAgYm9vbCB1
c2VQcmVSb3RhdGlvbiA9IGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BSRV9ST1RBVElPTjsKKysK
KysgICAgICAgIGlmICh1c2VzUG9pbnRDb29yZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
SW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2
ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisrICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5p
b24gJnBpdm90ID0gKkNyZWF0ZUZsb2F0Tm9kZSgwLjVmKTsKKysgICAgICAgICAgICBUSW50ZXJt
QmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAgICB1c2VQcmVSb3RhdGlvbiA/
IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtGcmFnUm90YXRpb24pIDog
bnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUo
KnRoaXMsIHJvb3QsICpHZXRNYWluU2VxdWVuY2Uocm9vdCksIGZsaXBYWSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xf
UG9pbnRDb29yZCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJhZ1JvdGF0aW9uKSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlh
YmxlOjpnbF9Qb2ludENvb3JkKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNG
cmFnQ29vcmQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFJbnNlcnRGcmFnQ29vcmRD
b3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShy
b290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy
VW5pZm9ybXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJv
b3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb29yZCgpKTsKKysgICAgICAgIH0KKysKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVhdGVEcml2
ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKysgICAgICAgICAgICBUSW50
ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAgICB1c2VQcmVSb3RhdGlv
biA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtGcmFnUm90YXRpb24p
IDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290LCBz
eW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdElu
VmFyaWFibGU6OmdsX0Zyb250RmFjaW5nKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgRW1p
dEVhcmx5RnJhZ21lbnRUZXN0c0dMU0woKnRoaXMsIHNpbmspOworKyAgICB9CisrICAgIGVsc2Ug
aWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorKyAgICB7CisrICAgICAg
ICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCkpOworKworKyAgICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZyb290LCBCdWlsdEluVmFy
aWFibGU6OmdsX1BvaW50U2l6ZSgpLT5uYW1lKCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IERlY2xhcmVSaWdodEJlZm9yZU1haW4ocm9vdCwgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9pbnRT
aXplKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZyb290
LCBCdWlsdEluVmFyaWFibGU6OmdsX1ZlcnRleEluZGV4KCktPm5hbWUoKSkpCisrICAgICAgICB7
CisrICAgICAgICAgICAgaWYgKCFSZXBsYWNlVmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAma2dsX1ZlcnRleEluZGV4TWV0YWwpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBEZWNsYXJl
UmlnaHRCZWZvcmVNYWluKHJvb3QsIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKTsKKysgICAgICAgIH0K
KysKKysjaWYgMAorKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhB
TV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFB
ZGRCcmVzZW5oYW1FbXVsYXRpb25WUyh0aGlzLCByb290LCAmc3ltYm9sVGFibGUsIGRyaXZlclVu
aWZvcm1zKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAvLyBBZGQgYSBtYWNybyB0
byBkZWNsYXJlIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAgICAgICAgc2luayA8PCAi
QEAgWEZCLURFQ0wgQEBcblxuIjsKKysjZW5kaWYKKysKKysgICAgICAgIC8vIEFwcGVuZCBhIG1h
Y3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHByaW9yIHRvIG1vZGlmeWlu
ZyBkZXB0aC4KKysgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJh
Y2tPdXRwdXRUb01haW4oKnRoaXMsIHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIGds
X0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8gc29tZSByZXBs
YWNlbWVudHMuCisrICAgICAgICBib29sIHVzZUNsaXBEaXN0YW5jZSA9IGZhbHNlOworKyAgICAg
ICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWluZyA6IG1PdXRwdXRWYXJ5
aW5ncykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09
ICJnbF9DbGlwRGlzdGFuY2UiKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdXNl
Q2xpcERpc3RhbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZUNsaXBEaXN0YW5jZSAmJiAhUmVw
bGFjZUNsaXBEaXN0YW5jZUFzc2lnbm1lbnRzKAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtD
bGlwRGlzdGFuY2VzRW5hYmxlZCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVD
b3JyZWN0aW9uKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUFwcGVuZFZlcnRl
eFNoYWRlckRlcHRoQ29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKChj
b21waWxlT3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT04pICE9IDAgJiYKKysgICAgICAgICAg
ICAhQXBwZW5kUHJlUm90YXRpb24oKnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysg
ICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0dFT01FVFJZX1NIQURFUikKKysgICAg
eworKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxheW91dFF1YWxpZmllcnMoCisrICAgICAg
ICAgICAgc2luaywgZ2V0R2VvbWV0cnlTaGFkZXJJbnB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2Vv
bWV0cnlTaGFkZXJJbnZvY2F0aW9ucygpLAorKyAgICAgICAgICAgIGdldEdlb21ldHJ5U2hhZGVy
T3V0cHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlck1heFZlcnRpY2VzKCkpOwor
KyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgQVNTRVJUKGdldFNoYWRlclR5cGUo
KSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisrICAgICAgICBFbWl0V29ya0dyb3VwU2l6ZUdMU0wo
KnRoaXMsIHNpbmspOworKyAgICB9CisrCisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xf
VkVSVEVYX1NIQURFUikKKysgICAgeworKyAgICAgICAgYXV0byAmbmVnRmxpcFkgPSAqZ2V0RHJp
dmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKysKKysgICAgICAgIGlmICht
RW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICghRW11bGF0
ZUluc3RhbmNlSUQoKnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrCisrICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rp
b25Ub01haW4oKnRoaXMsIHJvb3QsIG5lZ0ZsaXBZKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIWluc2VydFJhc3Rl
cml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICghdmFsaWRhdGVBU1Qo
JnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg
aWYgKCFSZXdyaXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBHZXRNc2xLZXl3b3Jkcygp
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICgh
UmVkdWNlSW50ZXJmYWNlQmxvY2tzKCp0aGlzLCByb290KSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERl
Y2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKworKyAgICAvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IHNpemUgcmVxdWlyZWQgdG8g
cGFzcyBhbGwgdGhlIHRlc3RzIGluCisrICAgIC8vIChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hh
ZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisrICAgIC8vIFRoaXMgdmFsdWUgY291bGQgaW4g
cHJpbmNpcGxlIGJlIHNtYWxsZXIuCisrICAgIGNvbnN0IHNpemVfdCBob2lzdFRocmVzaG9sZFNp
emUgPSAyNTY7CisrICAgIGlmICghSG9pc3RDb25zdGFudHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBo
b2lzdFRocmVzaG9sZFNpemUpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgSW52YXJpYW50cyBpbnZhcmlhbnRzOworKyAgICBpZiAoIVJld3JpdGVHbG9i
YWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50cykpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBTeW1ib2xFbnYgc3ltYm9sRW52KCp0
aGlzLCByb290KTsKKysKKysgICAgaWYgKCFBZGRFeHBsaWNpdFR5cGVDYXN0cygqdGhpcywgcm9v
dCwgc3ltYm9sRW52KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
CisrICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisrICAgIGlmICghUmV3cml0
ZVBpcGVsaW5lcygqdGhpcywgcm9vdCwgaWRHZW4sIGRyaXZlclVuaWZvcm1zLCBzeW1ib2xFbnYs
IGludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdHMp
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFT
ZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoKnRoaXMsIHN5bWJvbEVudiwgaWRHZW4sIHJvb3Qp
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFS
ZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVJld3JpdGVVbmFkZHJlc3NhYmxlUmVm
ZXJlbmNlcygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghUmV3cml0ZU91dEFyZ3MoKnRoaXMsIHJvb3Qs
IHN5bWJvbEVudikpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBpZiAoIVRvcG9zb3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFFbWl0
TWV0YWwoKnRoaXMsIHJvb3QsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5
bWJvbEVudiwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
CisrICAgIEFTU0VSVCh2YWxpZGF0ZUFTVCgmcm9vdCkpOworKworKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CisrCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZShUSW50ZXJtQmxv
Y2sgKnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBp
bGVPcHRpb25zIGNvbXBpbGVPcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKQorK3sKKysg
ICAgaWYgKCFyb290KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2JqOworKworKyAgICBi
b29sIHByZWNpc2lvbkVtdWxhdGlvbiA9IGZhbHNlOworKyAgICBpZiAoIWVtdWxhdGVQcmVjaXNp
b25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9uLCBTSF9HTFNMX1ZVTEtB
Tl9PVVRQVVQpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysj
aWYgMAorKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlvbnMgJiBTSF9J
R05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworKworKyAgICBUT3V0cHV0TVNMIG91
dHB1dE1TTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVu
Y3Rpb24oKSwgZ2V0TmFtZU1hcCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0U3lt
Ym9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdldE91dHB1
dFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uRW11bGF0aW9uLCBl
bmFibGVQcmVjaXNpb24sIGNvbXBpbGVPcHRpb25zKTsKKysjZW5kaWYKKysKKysgICAgaWYgKCF0
cmFuc2xhdGVJbXBsKCpyb290LCBjb21waWxlT3B0aW9ucykpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKworKyNpZiAwCisrICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQg
c2hhZGVyLgorKyAgICByb290LT50cmF2ZXJzZShvdXRwdXRNU0wpOworKyNlbmRpZgorKworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnNob3VsZEZs
YXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpCisreworKyAgICAvLyBOb3QgbmVjY2VzYXJ5
IGZvciBNU0wgdHJhbnNmb3JtYXRpb24uCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrfSAg
Ly8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmY2Iz
MDYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC5oCitAQCAtMCwwICsxLDEzMiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisrCisrI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysKKytuYW1lc3BhY2Ugc2gK
Kyt7CisrY2xhc3MgVE91dHB1dE1TTDsKKysKKyt0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxz
aXplX3QsIHN0ZDo6c3RyaW5nPiBvcmlnaW5hbE5hbWVzTWFwOworK3R5cGVkZWYgc3RkOjp1bm9y
ZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOworK3R5cGVk
ZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHRleHR1cmVCaW5kaW5n
TWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHVu
aWZvcm1CdWZmZXJCaW5kaW5nTWFwOworKworK2NsYXNzIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24KKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSB7fQor
KyAgICB+VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisrCisrICAgIHZvaWQgYWRkT3Jp
Z2luYWxOYW1lKGNvbnN0IHNpemVfdCBpZCwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCisrICAg
IHsKKysgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0KHtpZCwgbmFtZX0pOworKyAgICB9Cisr
ICAgIHZvaWQgYWRkU2FtcGxlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHNpemVf
dCBzYW1wbGVyQmluZGluZykKKysgICAgeworKyAgICAgICAgc2FtcGxlckJpbmRpbmdzLmluc2Vy
dCh7bmFtZSwgc2FtcGxlckJpbmRpbmd9KTsKKysgICAgfQorKyAgICB2b2lkIGFkZFRleHR1cmVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdGV4dHVyZUJpbmRpbmcpCisr
ICAgIHsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5pbnNlcnQoe25hbWUsIHRleHR1cmVCaW5k
aW5nfSk7CisrICAgIH0KKysgICAgdm9pZCBhZGRVbmlmb3JtQnVmZmVyQmluZGluZyhjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSwgc2l6ZV90IHVuaWZvcm1CdWZmZXJCaW5kaW5nKQorKyAgICB7Cisr
ICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCB1bmlmb3JtQnVmZmVy
QmluZGluZ30pOworKyAgICB9CisrICAgIHN0ZDo6c3RyaW5nIGdldE9yaWdpbmFsTmFtZShjb25z
dCBzaXplX3QgaWQpIHsgcmV0dXJuIG9yaWdpbmFsTmFtZXMuYXQoaWQpOyB9CisrICAgIHNhbXBs
ZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHNhbXBsZXJC
aW5kaW5nczsgfQorKyAgICB0ZXh0dXJlQmluZGluZ01hcCBnZXRUZXh0dXJlQmluZGluZ3MoKSBj
b25zdCB7IHJldHVybiB0ZXh0dXJlQmluZGluZ3M7IH0KKysgICAgdW5pZm9ybUJ1ZmZlckJpbmRp
bmdNYXAgZ2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QgeyByZXR1cm4gdW5pZm9ybUJ1
ZmZlckJpbmRpbmdzOyB9CisrICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGluZyhjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IHNhbXBsZXJC
aW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJCaW5kaW5ncy5l
bmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAg
ICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHNpemVfdCBnZXRUZXh0dXJlQmlu
ZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0
byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHRl
eHR1cmVCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHNpemVf
dCBnZXRVbmlmb3JtQnVmZmVyQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QK
KysgICAgeworKyAgICAgICAgYXV0byBpdCA9IHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5maW5kKG5h
bWUpOworKyAgICAgICAgaWYgKGl0ICE9IHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5lbmQoKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgIH0KKysg
ICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpOworKyAgICB9CisrICAgIHZvaWQgcmVzZXQoKQorKyAgICB7CisrICAgICAg
ICBvcmlnaW5hbE5hbWVzLmNsZWFyKCk7CisrICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIo
KTsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5jbGVhcigpOworKyAgICAgICAgdW5pZm9ybUJ1
ZmZlckJpbmRpbmdzLmNsZWFyKCk7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIG9yaWdp
bmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKysgICAgc2FtcGxlckJpbmRpbmdNYXAgc2FtcGxl
ckJpbmRpbmdzOworKyAgICB0ZXh0dXJlQmluZGluZ01hcCB0ZXh0dXJlQmluZGluZ3M7CisrICAg
IHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZmZXJCaW5kaW5nczsKKyt9OworKwor
K2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBUQ29tcGlsZXIKKyt7CisrICBw
dWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xlbnVtIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworKworKyNpZmRlZiBBTkdMRV9F
TkFCTEVfTUVUQUwKKysgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpnZXRBc1RyYW5zbGF0b3JN
ZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKysjZW5kaWYKKysKKysgICAg
c3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUoKTsKKysg
ICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0
TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRChib29sIGUpIHsg
bUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
biAqZ2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHsgcmV0dXJuICZ0cmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uOyB9CisrCisrICBwcm90ZWN0ZWQ6CisrICAgIGJvb2wgdHJhbnNsYXRlKFRJ
bnRlcm1CbG9jayAqcm9vdCwKKysgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBj
b21waWxlT3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGlj
cyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBi
b29sIHRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZyb290LCBTaENvbXBpbGVPcHRpb25zIGNv
bXBpbGVPcHRpb25zKTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHNob3VsZEZsYXR0
ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpIG92ZXJyaWRlOworKworKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAm
cm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKTsKKysgICAgQU5HTEVfTk9f
RElTQ0FSRCBib29sIGluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2Nr
ICZyb290KTsKKysKKysgICAgdm9pZCBjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NEcml2ZXJVbmlm
b3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0KTsKKysKKysgICAgQU5H
TEVfTk9fRElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVm
KAorKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykgY29uc3Q7CisrCisr
ICAgIGJvb2wgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworKworKyAgICBUcmFuc2xhdG9y
TWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKKyt9OworKwor
K30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlw
ZUNhc3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUzNDExODAK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKK0BAIC0wLDAgKzEsOTUgQEAKKysv
LworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNp
bmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBSZXdyaXRlciA6
IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52Owor
KworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xF
bnYgJnN5bWJvbEVudikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNl
LCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisrICAgIHt9CisrCisrICAgIFBvc3RSZXN1
bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxOb2RlKSBvdmVycmlk
ZQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYXJnQ291bnQgPSBjYWxsTm9kZS5nZXRD
aGlsZENvdW50KCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmcmV0VHlwZSAgPSBjYWxsTm9kZS5n
ZXRUeXBlKCk7CisrCisrICAgICAgICBpZiAoY2FsbE5vZGUuaXNDb25zdHJ1Y3RvcigpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJhc2ljVHlwZShyZXRUeXBlKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChhcmdDb3VudCA9PSAxKQorKyAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0g
R2V0QXJnKGNhbGxOb2RlLCAwKTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlIGFy
Z1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUu
aXNWZWN0b3IoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ29lcmNlU2ltcGxlKHJldFR5cGUsIFN1YlZlY3RvcihhcmcsIDAsIDEpKTsK
KysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT0gMSkKKysgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZhcmcgICA9IEdldEFyZyhj
YWxsTm9kZSwgMCk7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSBhcmdUeXBlID0g
YXJnLmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlLmlzVmVjdG9y
KCkpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3IoYXJnLCAwLCByZXRUeXBlLmdldE5v
bWluYWxTaXplKCkpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAm
YXJnID0gR2V0QXJnKGNhbGxOb2RlLCBpKTsKKysgICAgICAgICAgICAgICAgICAgIFNldEFyZyhj
YWxsTm9kZSwgaSwgQ29lcmNlU2ltcGxlKHJldFR5cGUuZ2V0QmFzaWNUeXBlKCksIGFyZykpOwor
KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg
KHJldFR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlm
IChhcmdDb3VudCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKysgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VHlwZS5nZXRDb2xzKCkgIT0gYXJn
VHlwZS5nZXRDb2xzKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VHlwZS5n
ZXRSb3dzKCkgIT0gYXJnVHlwZS5nZXRSb3dzKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUFyZyB0ZW1wbGF0ZUFyZ3Nb
XSA9IHtyZXRUeXBlLmdldENvbHMoKSwgcmV0VHlwZS5nZXRSb3dzKCl9OworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZCgK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwg
Km5ldyBUSW50ZXJtU2VxdWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIGNhbGxO
b2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrYm9v
bCBzaDo6QWRkRXhwbGljaXRUeXBlQ2FzdHMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJs
b2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyt7CisrICAgIFJld3JpdGVyIHJld3Jp
dGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290
KHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0
dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDM0Mjg4CistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRk
RXhwbGljaXRUeXBlQ2FzdHMuaAorQEAgLTAsMCArMSwyNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQRUNBU1RTX0hfCisrCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisr
bmFtZXNwYWNlIHNoCisreworKworKy8vIEFkZHMgZXhwbGljaXQgdHlwZSBjYXN0cyBpbnRvIHRo
ZSBBU1Qgd2hlcmUgY2FzdGluZyBpcyBkb25lIGltcGxpY2l0bHkuCisrQU5HTEVfTk9fRElTQ0FS
RCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQTElDSVRUWVBFQ0FTVFNf
SF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvQXN0SGVscGVycy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi40YmE0ZWM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAKK0BAIC0wLDAgKzEsNDc0
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPG51
bWVyaWM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9z
ZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FzdEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytEZWNsYXJhdGlvbiBzaDo6Vmlld0RlY2xhcmF0aW9uKFRJbnRl
cm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCisreworKyAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0Q2hp
bGRDb3VudCgpID09IDEpOworKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2RlID0gZGVjbE5vZGUu
Z2V0Q2hpbGROb2RlKDApOworKyAgICBBU1NFUlQoY2hpbGROb2RlKTsKKysgICAgVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZTsKKysgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGROb2RlLT5nZXRB
c1N5bWJvbE5vZGUoKSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIG51
bGxwdHJ9OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgVEludGVybUJpbmFy
eSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworKyAgICAgICAgQVNT
RVJUKGluaXROb2RlKTsKKysgICAgICAgIEFTU0VSVChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3Bl
cmF0b3I6OkVPcEluaXRpYWxpemUpOworKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUp
OworKyAgICAgICAgcmV0dXJuIHsqc3ltYm9sTm9kZSwgaW5pdE5vZGUtPmdldFJpZ2h0KCl9Owor
KyAgICB9CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJp
YWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisrewor
KyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworKyAgICBhdXRv
ICp2YXIgID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiks
IHR5cGUsIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysgICAgcmV0dXJuICp2YXI7CisrfQorKworK2Nv
bnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJm5hbWUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVu
c2lnbmVkIGludD4gKmFycmF5U2l6ZXMpCisreworKyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBl
KCZzdHJ1Y3R1cmUsIGZhbHNlKTsKKysgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7
CisrICAgIGlmIChhcnJheVNpemVzKQorKyAgICB7CisrICAgICAgICB0eXBlLT5tYWtlQXJyYXlz
KCphcnJheVNpemVzKTsKKysgICAgfQorKyAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZz
eW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksIHR5cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKysg
ICAgcmV0dXJuICp2YXI7CisrfQorKworK3N0YXRpYyB2b2lkIEFjcXVpcmVGdW5jdGlvbkV4dHJh
cyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQorK3sKKysgICAgaWYgKHNy
Yy5pc0RlZmluZWQoKSkKKysgICAgeworKyAgICAgICAgZGVzdC5zZXREZWZpbmVkKCk7CisrICAg
IH0KKysKKysgICAgaWYgKHNyYy5oYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpKQorKyAgICB7Cisr
ICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7CisrICAgIH0KKyt9Cisr
CisrVEludGVybVNlcXVlbmNlICZzaDo6Q2xvbmVTZXF1ZW5jZUFuZFByZXBlbmQoY29uc3QgVElu
dGVybVNlcXVlbmNlICZzZXEsIFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgYXV0byAqbmV3
U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworKyAgICBuZXdTZXEtPnB1c2hfYmFjaygmbm9k
ZSk7CisrCisrICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisrICAgIHsKKysg
ICAgICAgIG5ld1NlcS0+cHVzaF9iYWNrKG9sZE5vZGUpOworKyAgICB9CisrCisrICAgIHJldHVy
biAqbmV3U2VxOworK30KKysKKyt2b2lkIHNoOjpBZGRQYXJhbWV0ZXJzRnJvbShURnVuY3Rpb24g
JmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQorK3sKKysgICAgY29uc3Qgc2l6ZV90IHBhcmFt
Q291bnQgPSBzcmMuZ2V0UGFyYW1Db3VudCgpOworKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtQ291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXIg
PSBzcmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBkZXN0LmFkZFBhcmFtZXRlcih2YXIpOworKyAg
ICB9CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRh
YmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAmb2xkRnVuYykKKyt7CisrICAgIEFTU0VSVChvbGRGdW5jLnN5bWJvbFR5cGUoKSA9
PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrCisrICAgIE5hbWUgbmV3TmFtZSA9IGlkR2Vu
LmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSk7CisrCisrICAgIGF1dG8gJm5ld0Z1bmMgPSAq
bmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1lLnN5
bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5j
LmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7
CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKysgICAg
QWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7CisrCisrICAgIHJldHVybiBuZXdG
dW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1bmN0aW9uQW5kUHJlcGVu
ZFBhcmFtKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9s
ZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJm5ld1BhcmFtKQorK3sKKysgICAgQVNTRVJUKG9sZEZ1bmMuc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkIHx8CisrICAgICAgICAgICBvbGRG
dW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAg
TmFtZSBuZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFtZShOYW1lKG9sZEZ1bmMp
KSA6IE5hbWUob2xkRnVuYyk7CisrCisrICAgIGF1dG8gJm5ld0Z1bmMgPSAqbmV3IFRGdW5jdGlv
bigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1lLnN5bWJvbFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5
cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFj
cXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKysgICAgbmV3RnVuYy5hZGRQ
YXJhbWV0ZXIoJm5ld1BhcmFtKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xk
RnVuYyk7CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24g
JnNoOjpDbG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
ZEdlbiAqaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFy
aWFibGUgKj4gJm5ld1BhcmFtcykKKyt7CisrICAgIEFTU0VSVChvbGRGdW5jLnN5bWJvbFR5cGUo
KSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorKyAgICAgICAgICAgb2xkRnVuYy5zeW1i
b2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisrCisrICAgIE5hbWUgbmV3
TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBOYW1l
KG9sZEZ1bmMpOworKworKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5bWJv
bFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9s
ZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworKworKyAgICBBY3F1aXJlRnVu
Y3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisrICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworKyAgICBmb3IgKGF1dG8gKnBhcmFtIDogbmV3UGFyYW1zKQorKyAg
ICB7CisrICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIG5ld0Z1bmM7CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4g
KmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1
cm4pCisreworKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworKworKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVh
dGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKysKKysgICAgYXV0byAq
bmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgmbmV3UmV0dXJuLCB0cnVlKTsKKysgICAgYXV0byAm
bmV3RnVuYyAgICAgICA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdO
YW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3UmV0dXJuVHlwZSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVj
dHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsK
KysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7CisrCisrICAgIHJldHVy
biBuZXdGdW5jOworK30KKysKKytUSW50ZXJtVHlwZWQgJnNoOjpHZXRBcmcoY29uc3QgVEludGVy
bUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4KQorK3sKKysgICAgQVNTRVJUKGluZGV4IDwg
Y2FsbC5nZXRDaGlsZENvdW50KCkpOworKyAgICBhdXRvICphcmcgPSBjYWxsLmdldENoaWxkTm9k
ZShpbmRleCk7CisrICAgIEFTU0VSVChhcmcpOworKyAgICBhdXRvICp0YXJnID0gYXJnLT5nZXRB
c1R5cGVkKCk7CisrICAgIEFTU0VSVCh0YXJnKTsKKysgICAgcmV0dXJuICp0YXJnOworK30KKysK
Kyt2b2lkIHNoOjpTZXRBcmcoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4LCBU
SW50ZXJtVHlwZWQgJmFyZykKKyt7CisrICAgIEFTU0VSVChpbmRleCA8IGNhbGwuZ2V0Q2hpbGRD
b3VudCgpKTsKKysgICAgKCpjYWxsLmdldFNlcXVlbmNlKCkpW2luZGV4XSA9ICZhcmc7CisrfQor
KworK2ludCBzaDo6R2V0RmllbGRJbmRleChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNv
bnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0ID0gc3RydWN0dXJlLmZpZWxkcygpOworKworKyAgICBpbnQgaSA9IDA7Cisr
ICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKysgICAgeworKyAgICAgICAgaWYg
KGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiBpOworKyAgICAgICAgfQorKyAgICAgICAgKytpOworKyAgICB9CisrCisrICAgIHJldHVy
biAtMTsKKyt9CisrCisrVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0ZpZWxkKGNvbnN0IFRWYXJp
YWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1l
KQorK3sKKysgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0
SW5zdGFuY2VWYXIpLCBmaWVsZE5hbWUpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNj
ZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmll
bGROYW1lKQorK3sKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gb2JqZWN0Lmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKysgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisrCisrICAgIGNv
bnN0IGludCBpbmRleCA9IEdldEZpZWxkSW5kZXgoKnN0cnVjdHVyZSwgZmllbGROYW1lKTsKKysg
ICAgQVNTRVJUKGluZGV4ID49IDApOworKyAgICByZXR1cm4gQWNjZXNzRmllbGRCeUluZGV4KG9i
amVjdCwgaW5kZXgpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGRCeUlu
ZGV4KFRJbnRlcm1UeXBlZCAmb2JqZWN0LCBpbnQgaW5kZXgpCisreworKyNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IG9iamVjdC5nZXRU
eXBlKCk7CisrICAgIEFTU0VSVCghdHlwZS5pc0FycmF5KCkpOworKyAgICBjb25zdCBUU3RydWN0
dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICBBU1NFUlQoc3RydWN0dXJl
KTsKKysgICAgQVNTRVJUKDAgPD0gaW5kZXgpOworKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNpemUoKSk7CisrI2VuZGlmCisrCisr
ICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisrICAgICAgICBUT3BlcmF0b3I6OkVPcElu
ZGV4RGlyZWN0U3RydWN0LCAmb2JqZWN0LAorKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0
SW50KSkpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzSW5kZXgoVEludGVybVR5
cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpCisreworKyNpZiBkZWZpbmVkKEFOR0xFX0VO
QUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGluZGV4YWJsZU5vZGUuZ2V0
VHlwZSgpOworKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlwZS5pc1ZlY3RvcigpIHx8
IHR5cGUuaXNNYXRyaXgoKSk7CisrI2VuZGlmCisrCisrICAgIGF1dG8gKmFjY2Vzc05vZGUgPSBu
ZXcgVEludGVybUJpbmFyeSgKKysgICAgICAgIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3QsICZp
bmRleGFibGVOb2RlLAorKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29u
c3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0SW50KSkpOworKyAg
ICByZXR1cm4gKmFjY2Vzc05vZGU7CisrfQorKworK1RJbnRlcm1UeXBlZCAmc2g6OkFjY2Vzc0lu
ZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKKyt7CisrICAgIGlmIChp
bmRleCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIEFjY2Vzc0luZGV4KG5vZGUsICppbmRleCk7
CisrICAgIH0KKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1RJbnRlcm1UeXBlZCAmc2g6OlN1
YlZlY3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKKyt7
CisrICAgIEFTU0VSVCh2ZWN0b3JOb2RlLmdldFR5cGUoKS5pc1ZlY3RvcigpKTsKKysgICAgQVNT
RVJUKDAgPD0gYmVnaW4pOworKyAgICBBU1NFUlQoZW5kIDw9IDQpOworKyAgICBBU1NFUlQoYmVn
aW4gPD0gZW5kKTsKKysgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB2ZWN0b3JO
b2RlOworKyAgICB9CisrICAgIFRWZWN0b3I8aW50PiBvZmZzZXRzKHN0YXRpY19jYXN0PHNpemVf
dD4oZW5kIC0gYmVnaW4pKTsKKysgICAgc3RkOjppb3RhKG9mZnNldHMuYmVnaW4oKSwgb2Zmc2V0
cy5lbmQoKSwgYmVnaW4pOworKyAgICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxl
KCZ2ZWN0b3JOb2RlLCBvZmZzZXRzKTsKKysgICAgcmV0dXJuICpzd2l6emxlOworK30KKysKKyti
b29sIHNoOjpJc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKKyt7CisrICAgIGlm
ICghdHlwZS5pc1NjYWxhcigpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsKKyt9CisrCisrYm9vbCBz
aDo6SXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUpCisreworKyAgICBpZiAoIXR5
cGUuaXNWZWN0b3IoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
ICAgIHJldHVybiBIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSk7CisrfQorKworK2Jvb2wgc2g6Okhh
c1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpCisreworKyAgICBzd2l0Y2ggKHR5cGUp
CisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6CisrICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0
SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorKyAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisr
Ym9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAg
cmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlLmdldEJhc2ljVHlwZSgpKTsKKyt9CisrCisr
c3RhdGljIHZvaWQgSW5pdFR5cGUoVFR5cGUgJnR5cGUpCisreworKyAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCisrICAgIHsKKysgICAgICAgIGF1dG8gc2l6ZXMgPSB0eXBlLmdldEFycmF5U2l6ZXMo
KTsKKysgICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisrICAgICAgICB0eXBlLm1ha2VB
cnJheXMoc2l6ZXMpOworKyAgICB9CisrfQorKworK1RUeXBlICZzaDo6Q2xvbmVUeXBlKGNvbnN0
IFRUeXBlICZ0eXBlKQorK3sKKysgICAgYXV0byAmY2xvbmUgPSAqbmV3IFRUeXBlKHR5cGUpOwor
KyAgICBJbml0VHlwZShjbG9uZSk7CisrICAgIHJldHVybiBjbG9uZTsKKyt9CisrCisrVFR5cGUg
JnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgYXV0byAmaW5u
ZXIgPSAqbmV3IFRUeXBlKHR5cGUpOworKyAgICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKysg
ICAgSW5pdFR5cGUoaW5uZXIpOworKyAgICByZXR1cm4gaW5uZXI7CisrfQorKworK1RUeXBlICZz
aDo6RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpCisreworKyAgICBBU1NFUlQo
bWF0cml4VHlwZS5pc01hdHJpeCgpKTsKKysgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZSht
YXRyaXhUeXBlKSk7CisrICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKysK
KysgICAgYXV0byAmdmVjdG9yVHlwZSA9CisrICAgICAgICAqbmV3IFRUeXBlKG1hdHJpeFR5cGUu
Z2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9uKCksIG1hdHJpeFR5cGUuZ2V0
UXVhbGlmaWVyKCksCisrICAgICAgICAgICAgICAgICAgIG1hdHJpeFR5cGUuZ2V0Um93cygpLCAx
LCBtYXRyaXhUeXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOworKyAgICBJbml0VHlw
ZSh2ZWN0b3JUeXBlKTsKKysgICAgcmV0dXJuIHZlY3RvclR5cGU7CisrfQorKworK1RUeXBlICZz
aDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5cGUpCisreworKyAgICBB
U1NFUlQoYXJyYXlUeXBlLmlzQXJyYXkoKSk7CisrICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1l
ID0gbnVsbHB0cjsKKysgICAgY29uc3QgYXV0byAmYXJyYXlTaXplcyAgPSBhcnJheVR5cGUuZ2V0
QXJyYXlTaXplcygpOworKworKyAgICBhdXRvICZpbm5lclR5cGUgPQorKyAgICAgICAgKm5ldyBU
VHlwZShhcnJheVR5cGUuZ2V0QmFzaWNUeXBlKCksIGFycmF5VHlwZS5nZXRQcmVjaXNpb24oKSwg
YXJyYXlUeXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAgICAgICBhcnJheVR5cGUu
Z2V0Tm9taW5hbFNpemUoKSwgYXJyYXlUeXBlLmdldFNlY29uZGFyeVNpemUoKSwKKysgICAgICAg
ICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6ZSgpIC0gMSks
IG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUoaW5uZXJUeXBlKTsKKysgICAgcmV0dXJuIGlu
bmVyVHlwZTsKKyt9CisrCisrc3RhdGljIFRUeXBlICZTZXRUeXBlRGltc0ltcGwoY29uc3QgVFR5
cGUgJnR5cGUsIGludCBwcmltYXJ5LCBpbnQgc2Vjb25kYXJ5KQorK3sKKysgICAgQVNTRVJUKDEg
PCBwcmltYXJ5ICYmIHByaW1hcnkgPD0gNCk7CisrICAgIEFTU0VSVCgxIDw9IHNlY29uZGFyeSAm
JiBzZWNvbmRhcnkgPD0gNCk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkp
OworKyAgICBjb25zdCBjaGFyICptYW5nbGVkTmFtZSA9IG51bGxwdHI7CisrCisrICAgIGF1dG8g
Jm5ld1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lz
aW9uKCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW1hcnksIHNlY29uZGFyeSwgdHlwZS5nZXRBcnJheVNpemVzKCksIG1hbmdsZWROYW1l
KTsKKysgICAgSW5pdFR5cGUobmV3VHlwZSk7CisrICAgIHJldHVybiBuZXdUeXBlOworK30KKysK
KytUVHlwZSAmc2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkK
Kyt7CisrICAgIEFTU0VSVCh0eXBlLmlzUmFuazAoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworKyAg
ICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7CisrfQorKworK1RUeXBl
ICZzaDo6U2V0TWF0cml4Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGlt
KQorK3sKKysgICAgQVNTRVJUKG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7CisrICAgIEFTU0VSVCgx
IDwgbmV3RGltICYmIG5ld0RpbSA8PSA0KTsKKysgICAgcmV0dXJuIFNldFR5cGVEaW1zSW1wbCht
YXRyaXhUeXBlLCBtYXRyaXhUeXBlLmdldENvbHMoKSwgbmV3RGltKTsKKyt9CisrCisrYm9vbCBz
aDo6SGFzTWF0cml4RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQorK3sKKysgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKyAgICAgICAgaWYg
KHR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgc2g6
Okhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQorK3sKKysgICAgZm9y
IChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorKyAgICB7CisrICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKyAgICAgICAgaWYgKHR5
cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrVEludGVybVR5cGVk
ICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21O
b2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUuZ2V0VHlwZSgp
OworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlwZSkpOworKyAgICBBU1NF
UlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFTU0VSVCghZnJvbVR5cGUu
aXNBcnJheSgpKTsKKysKKysgICAgaWYgKHRvVHlwZSAhPSBmcm9tVHlwZS5nZXRCYXNpY1R5cGUo
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25z
dHJ1Y3RvcigKKysgICAgICAgICAgICAqbmV3IFRUeXBlKHRvVHlwZSwgZnJvbVR5cGUuZ2V0Tm9t
aW5hbFNpemUoKSwgZnJvbVR5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpKSwKKysgICAgICAgICAgICBu
ZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAgICB9CisrICAgIHJldHVybiBmcm9t
Tm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKGNvbnN0IFRUeXBl
ICZ0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpCisreworKyAgICBjb25zdCBUVHlwZSAm
ZnJvbVR5cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisrCisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUodG9UeXBlKSk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5
cGUpKTsKKysgICAgQVNTRVJUKHRvVHlwZS5nZXROb21pbmFsU2l6ZSgpID09IGZyb21UeXBlLmdl
dE5vbWluYWxTaXplKCkpOworKyAgICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9
PSBmcm9tVHlwZS5nZXRTZWNvbmRhcnlTaXplKCkpOworKyAgICBBU1NFUlQoIXRvVHlwZS5pc0Fy
cmF5KCkpOworKyAgICBBU1NFUlQoIWZyb21UeXBlLmlzQXJyYXkoKSk7CisrCisrICAgIGlmICh0
b1R5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBlKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9U
eXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAgICB9CisrICAgIHJldHVy
biBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6QXNUeXBlKFN5bWJvbEVudiAm
c3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKQor
K3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUuZ2V0VHlwZSgpOworKwor
KyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlwZSkpOworKyAgICBBU1NFUlQoSGFz
U2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXko
KSk7CisrICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysKKysgICAgaWYgKHRvVHlw
ZSA9PSBmcm9tVHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZyb21Ob2RlOworKyAgICB9
CisrICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKysgICAgcmV0dXJuIHN5bWJvbEVudi5j
YWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJhc190eXBlIiwgU3ltYm9sVHlwZTo6QnVpbHRJbiks
IHRvVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3
IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbU5vZGV9LCAxLCAmdGFyZyk7CisrfQorZGlmZiAtLWdpdCBh
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJz
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVs
cGVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDllODlmZQorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaAorQEAgLTAsMCArMSwxNTcgQEAKKysvLworKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysK
KysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FTVEhF
TFBFUlNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0FTVEhFTFBFUlNfSF8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xF
bnYuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQSBjb252ZW5pZW5jZSB2aWV3IG9m
IGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KKytzdHJ1Y3QgRGVjbGFyYXRp
b24KKyt7CisrICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKysgICAgVEludGVybVR5cGVkICpp
bml0RXhwcjsgIC8vIE5vbi1udWxsIGlmZiBkZWNsYXJhdGlvbiBpcyBpbml0aWFsaXplZC4KKyt9
OworKworKy8vIFJldHVybnMgYSBgRGVjbGFyYXRpb25gIHZpZXcgb2YgdGhlIGdpdmVuIG5vZGUu
CisrRGVjbGFyYXRpb24gVmlld0RlY2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5v
ZGUpOworKworKy8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1Y3QgdHlwZS4KKytjb25z
dCBUVmFyaWFibGUgJkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOworKworKy8vIENyZWF0ZXMgYSB2
YXJpYWJsZSBmb3IgYSBzdHJ1Y3QgaW5zdGFuY2UuCisrY29uc3QgVFZhcmlhYmxlICZDcmVhdGVJ
bnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmbmFt
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXIgPSBUUXVhbGlmaWVyOjpFdnFUZW1wb3JhcnksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFy
cmF5U2l6ZXMgPSBudWxscHRyKTsKKysKKysvLyBUaGUgaW5wdXQgc2VxdWVuY2Ugc2hvdWxkIGJl
IGRpc2NhcmRlZCBmcm9tIEFTVCBhZnRlciB0aGlzIGlzIGNhbGxlZC4KKytUSW50ZXJtU2VxdWVu
Y2UgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBU
SW50ZXJtTm9kZSAmbm9kZSk7CisrCisrLy8gQXBwZW5kcyBwYXJhbWV0ZXJzIGZyb20gYHNyY2Ag
ZnVuY3Rpb24gdG8gYGRlc3RgIGZ1bmN0aW9uLgorK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1
bmN0aW9uICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisrCisrLy8gQ2xvbmVzIGEgZnVu
Y3Rpb24uCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUsIElkR2VuICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKysKKysv
LyBDbG9uZXMgYSBmdW5jdGlvbiBhbmQgcHJlcGVuZHMgdGhlIHByb3ZpZGVkIGV4dHIgcGFyYW1l
dGVyLgorKy8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qg
YmUgZGlzY2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rp
b25BbmRQcmVwZW5kUGFyYW0oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24g
Jm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmbmV3UGFyYW0pOworKworKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFu
ZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBwYXJhbWV0ZXJzLgorKy8vIElmIGBpZEdlbmAg
aXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhl
IEFTVC4KKytjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5
bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNv
bnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW0pOworKworKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFu
ZCBjaGFuZ2VzIGl0cyByZXR1cm4gdHlwZS4KKysvLyBJZiBgaWRHZW5gIGlzIG51bGwsIHRoZSBv
cmlnaW5hbCBmdW5jdGlvbiBtdXN0IGJlIGRpc2NhcmRlZCBmcm9tIHRoZSBBU1QuCisrY29uc3Qg
VEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJuVHlwZShUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAm
bmV3UmV0dXJuKTsKKysKKysvLyBHZXRzIHRoZSBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIGNhbGwg
YXQgdGhlIGdpdmVuIGluZGV4LgorK1RJbnRlcm1UeXBlZCAmR2V0QXJnKGNvbnN0IFRJbnRlcm1B
Z2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisrCisrLy8gU2V0cyB0aGUgYXJndW1lbnQg
b2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KKyt2b2lkIFNldEFyZyhUSW50
ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1UeXBlZCAmYXJnKTsKKysK
KysvLyBSZXR1cm5zIHRoZSBmaWVsZCBpbmRleCB3aXRoaW4gdGhlIGdpdmVuIHN0cnVjdCBmb3Ig
dGhlIGdpdmVuIGZpZWxkIG5hbWUuCisrLy8gUmV0dXJucyAtMSBpZiB0aGUgc3RydWN0IGhhcyBu
byBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorK2ludCBHZXRGaWVsZEluZGV4KGNvbnN0IFRT
dHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpOwor
KworKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3aXRoIHRoZSBn
aXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSB2YXJpYWJsZSBtdXN0IGJlIGEgc3RydWN0IGluc3Rh
bmNlLgorK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkKGNvbnN0IFRWYXJpYWJsZSAmc3RydWN0
SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKTsKKysKKysvLyBB
Y2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoZSBnaXZlbiBmaWVsZCBu
YW1lLgorKy8vIFRoZSBub2RlIG11c3QgYmUgYSBzdHJ1Y3QgaW5zdGFuY2UuCisrVEludGVybUJp
bmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmZmllbGROYW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4g
bm9kZSBieSBpdHMgZmllbGQgaW5kZXguCisrLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBp
bnN0YW5jZS4KKytUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVk
ICZvYmplY3QsIGludCBpbmRleCk7CisrCisrLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRl
eCBmb3IgdGhlIGdpdmVuIG5vZGUuCisrLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBhcnJheSwgdmVj
dG9yLCBvciBtYXRyaXguCisrVEludGVybUJpbmFyeSAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVk
ICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpOworKworKy8vIEFjY2Vzc2VzIGFuIGVsZW1lbnQg
YnkgaW5kZXggZm9yIHRoZSBnaXZlbiBub2RlIGlmIGBpbmRleGAgaXMgbm9uLW51bGwuCisrLy8g
UmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBpZiBgaW5kZXhgIGlzIG51bGwuCisrLy8gVGhlIG5v
ZGUgbXVzdCBiZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24t
bnVsbC4KKytUSW50ZXJtVHlwZWQgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29u
c3QgaW50ICppbmRleCk7CisrCisrLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUg
aW5wdXQgc2xpY2UgcmFuZ2UuCisrLy8gVGhpcyByZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIGlm
IHRoZSBzbGljZSBpcyBhbiBpZGVudGl0eSBmb3IgdGhlIG5vZGUuCisrVEludGVybVR5cGVkICZT
dWJWZWN0b3IoVEludGVybVR5cGVkICZ2ZWN0b3JOb2RlLCBpbnQgYmVnaW4sIGludCBlbmQpOwor
KworKy8vIE1hdGNoZXMgc2NhbGFyIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKyti
b29sIElzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBNYXRjaGVz
IHZlY3RvciBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisrYm9vbCBJc1ZlY3RvckJh
c2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVp
bnQsIGZsb2F0LCBkb3VibGUuCisrLy8gVHlwZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGEgc2NhbGFy
LgorK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBN
YXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKytib29sIEhhc1NjYWxhckJh
c2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworKworKy8vIENsb25lcyBhIHR5cGUuCisrVFR5cGUg
JkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gQ2xvbmVzIGEgdHlwZSBhbmQg
ZHJvcHMgYWxsIGFycmF5IGRpbWVuc2lvbnMuCisrVFR5cGUgJklubmVybW9zdFR5cGUoY29uc3Qg
VFR5cGUgJnR5cGUpOworKworKy8vIENyZWF0ZXMgYSB2ZWN0b3IgdHlwZSBieSBkcm9wcGluZyB0
aGUgY29sdW1ucyBvZmYgb2YgYSBtYXRyaXggdHlwZS4KKytUVHlwZSAmRHJvcENvbHVtbnMoY29u
c3QgVFR5cGUgJm1hdHJpeFR5cGUpOworKworKy8vIENyZWF0ZXMgYSB0eXBlIGJ5IGRyb3BwaW5n
IHRoZSBvdXRlciBkaW1lbnNpb24gb2ZmIG9mIGFuIGFycmF5IHR5cGUuCisrVFR5cGUgJkRyb3BP
dXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKysKKysvLyBDcmVhdGVzIGEg
c2NhbGFyIG9yIHZlY3RvciB0eXBlIGJ5IGNoYW5naW5nIHRoZSBkaW1lbnNpb25zIG9mIGEgdmVj
dG9yIHR5cGUuCisrVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5l
d0RpbSk7CisrCisrLy8gQ3JlYXRlcyBhIG1hdHJpeCB0eXBlIGJ5IGNoYW5naW5nIHRoZSByb3cg
ZGltZW5zaW9ucyBvZiBhIG1hdHJpeCB0eXBlLgorK1RUeXBlICZTZXRNYXRyaXhSb3dEaW0oY29u
c3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworKworKy8vIFJldHVybnMgdHJ1ZSBp
ZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBhIGZpZWxkIHdpdGggbWF0cml4IHR5
cGUuCisrYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwor
KworKy8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBh
IGZpZWxkIHdpdGggYXJyYXkgdHlwZS4KKytib29sIEhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlKTsKKysKKysvLyBDb2VyY2VzIGBmcm9tTm9kZWAgdG8gYHRvVHlwZWAg
YnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlmIHRoZWlyIHR5cGVzIGRpZmZlci4K
KysvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKysvLyBBcnJh
eSB0eXBlcyBhcmUgbm90IGFsbG93ZWQuCisrVEludGVybVR5cGVkICZDb2VyY2VTaW1wbGUoVEJh
c2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOworKworKy8vIENvZXJjZXMg
YGZyb21Ob2RlYCB0byBgdG9UeXBlYCBieSBhIGNvbnN0cnVjdG9yIGNhbGwgb2YgYHRvVHlwZWAg
aWYgdGhlaXIgdHlwZXMgZGlmZmVyLgorKy8vIFZlY3RvciBhbmQgbWF0cml4IGRpbWVuc2lvbnMg
bXVzdCBjb2luY2lkZSBiZXR3ZWVuIHRvIGFuZCBmcm9tLgorKy8vIEFycmF5IHR5cGVzIGFyZSBu
b3QgYWxsb3dlZC4KKytUSW50ZXJtVHlwZWQgJkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9U
eXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKysKKytUSW50ZXJtVHlwZWQgJkFzVHlwZShT
eW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZm
cm9tTm9kZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0NvbnN0
YW50TmFtZXMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5m
ZGRkODY1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCitAQCAtMCwwICsxLDI2IEBACisrLy8K
KysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKworK25hbWVz
cGFjZSBzaAorK3sKKysKKytuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMKKyt7CisrCisrY29uc3Rl
eHByIE5hbWUga0NvdmVyYWdlTWFza0VuYWJsZWQoIkFOR0xFX0NvdmVyYWdlTWFza0VuYWJsZWQi
LCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKytjb25zdGV4cHIgTmFtZSBrUmFzdGVyaXph
dGlvbkRpc2NhcmRFbmFibGVkKCJBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsKTsKKysKKyt9ICAvLyBuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMKKysKKyt9ICAvLyBu
YW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0NPTlNUQU5UX05BTUVTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmggYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaAorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4NWU5YTYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oCitAQCAtMCww
ICsxLDE2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKysKKysjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCisrCisrI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorKworKyNkZWZpbmUg
TE9HSUNfRVJST1IoKSBBU1NFUlQoZmFsc2UpCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaAor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg3MmFkZDcKKy0tLSAvZGV2L251
bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Z1NpbmsuaAorQEAgLTAsMCArMSwxNTkgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVk
ZSA8aW9zdHJlYW0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKKyt7Cisr
ICBwdWJsaWM6CisrICAgIFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUp
IDogbmVlZGxlKG5lZWRsZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorKworKyAgICBi
b29sIG9ic2VydmUoY2hhciBjKQorKyAgICB7CisrICAgICAgICBpZiAobmVlZGxlW2N1cnJQb3Nd
ID09IGMpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytjdXJyUG9zOworKyAgICAgICAgICAg
IGlmIChjdXJyUG9zID09IG5lZWRsZS5zaXplKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXNldCgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAg
ICAgcmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KworKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0TmVlZGxlKCkgY29uc3QgeyByZXR1cm4gbmVl
ZGxlOyB9CisrCisrICAgIHZvaWQgcmVzZXQoKSB7IGN1cnJQb3MgPSAwOyB9CisrCisrICBwcml2
YXRlOgorKyAgICBzdGQ6OnN0cmluZyBuZWVkbGU7CisrICAgIHNpemVfdCBjdXJyUG9zID0gMDsK
Kyt9OworKworK2NsYXNzIERlYnVnU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorK3sKKysgIHB1
YmxpYzoKKysgICAgZnJpZW5kIGNsYXNzIEVzY2FwZWRTaW5rOworKyAgICBjbGFzcyBFc2NhcGVk
U2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorKyAgICB7CisrICAgICAgICBmcmllbmQgY2xhc3Mg
RGVidWdTaW5rOworKworKyAgICAgIHByaXZhdGU6CisrICAgICAgICBFc2NhcGVkU2luayhEZWJ1
Z1NpbmsgJm93bmVyKSA6IG1Pd25lcihvd25lciksIG1CZWdpbihvd25lci5zaXplKCkpIHt9Cisr
CisrICAgICAgcHVibGljOgorKyAgICAgICAgRXNjYXBlZFNpbmsoRXNjYXBlZFNpbmsgJiZvdGhl
cikgOiBtT3duZXIob3RoZXIubU93bmVyKSwgbUJlZ2luKG90aGVyLm1CZWdpbikge30KKysKKysg
ICAgICAgIH5Fc2NhcGVkU2luaygpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgY2hh
ciAqcCA9IG1Pd25lci5jX3N0cigpOworKyAgICAgICAgICAgIGNvbnN0IGludCBlbmQgPSBtT3du
ZXIuc2l6ZSgpOworKyAgICAgICAgICAgIG1Pd25lci5vbldyaXRlKHAgKyBtQmVnaW4sIHAgKyBl
bmQpOworKyAgICAgICAgfQorKworKyAgICAgICAgVEluZm9TaW5rQmFzZSAmZ2V0KCkgeyByZXR1
cm4gbU93bmVyLm1QYXJlbnQ7IH0KKysKKysgICAgICAgIG9wZXJhdG9yIFRJbmZvU2lua0Jhc2Ug
JigpIHsgcmV0dXJuIGdldCgpOyB9CisrCisrICAgICAgcHJpdmF0ZToKKysgICAgICAgIERlYnVn
U2luayAmbU93bmVyOworKyAgICAgICAgY29uc3QgaW50IG1CZWdpbjsKKysgICAgfTsKKysKKysg
IHB1YmxpYzoKKysgICAgRGVidWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNv
TG9nVG9TdGRvdXQpCisrICAgICAgICA6IG1QYXJlbnQocGFyZW50KSwgbUFsc29Mb2dUb1N0ZG91
dChhbHNvTG9nVG9TdGRvdXQpCisrICAgIHt9CisrCisrICAgIHZvaWQgd2F0Y2goc3RkOjpzdHJp
bmcgY29uc3QgJm5lZWRsZSkKKysgICAgeworKyAgICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBtT2JzZXJ2ZXJzLmVtcGxhY2VfYmFjayhuZWVkbGUp
OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHZvaWQgZXJhc2UoKQorKyAgICB7CisrICAg
ICAgICBtUGFyZW50LmVyYXNlKCk7CisrICAgICAgICBmb3IgKFN0cmluZ09ic2VydmVyICZvYnNl
cnZlciA6IG1PYnNlcnZlcnMpCisrICAgICAgICB7CisrICAgICAgICAgICAgb2JzZXJ2ZXIucmVz
ZXQoKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpbnQgc2l6ZSgpIHsgcmV0dXJuIG1Q
YXJlbnQuc2l6ZSgpOyB9CisrCisrICAgIGNvbnN0IFRQZXJzaXN0U3RyaW5nICZzdHIoKSBjb25z
dCB7IHJldHVybiBtUGFyZW50LnN0cigpOyB9CisrCisrICAgIGNvbnN0IGNoYXIgKmNfc3RyKCkg
Y29uc3QgeyByZXR1cm4gbVBhcmVudC5jX3N0cigpOyB9CisrCisrICAgIEVzY2FwZWRTaW5rIGVz
Y2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorKworKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKysgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQgJnZhbHVlKQor
KyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBtUGFyZW50LnNpemUoKTsKKysg
ICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisrICAgICAgICBjb25zdCBzaXplX3QgZW5kID0gbVBh
cmVudC5zaXplKCk7CisrCisrICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0cigp
OworKyAgICAgICAgb25Xcml0ZShwICsgYmVnaW4sIHAgKyBlbmQpOworKworKyAgICAgICAgcmV0
dXJuICp0aGlzOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2b2lkIG9uV3JpdGUoY29u
c3QgY2hhciAqYmVnaW4sIGNoYXIgY29uc3QgKmVuZCkKKysgICAgeworKyAgICAgICAgY29uc3Qg
Y2hhciAqcCA9IGJlZ2luOworKyAgICAgICAgd2hpbGUgKHAgIT0gZW5kKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICpwOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAg
ICAgICBmb3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIub2JzZXJ2ZSgqcCkpCisrICAg
ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0
KQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
Y291dC5mbHVzaCgpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5lZWRsZSA9IG9ic2VydmVyLmdldE5lZWRsZSgpOworKyAg
ICAgICAgICAgICAgICAgICAgKHZvaWQpbmVlZGxlOworKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVha3BvaW50IGhlcmUKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICArK3A7CisrICAgICAgICB9Cisr
CisrICAgICAgICBpZiAobUFsc29Mb2dUb1N0ZG91dCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBzdGQ6OmNvdXQuZmx1c2goKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgcHJpdmF0ZToK
KysgICAgVEluZm9TaW5rQmFzZSAmbVBhcmVudDsKKysgICAgc3RkOjp2ZWN0b3I8U3RyaW5nT2Jz
ZXJ2ZXI+IG1PYnNlcnZlcnM7CisrICAgIGJvb2wgbUFsc29Mb2dUb1N0ZG91dDsKKyt9OworKwor
K30gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBl
bmRlbnRGdW5jdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
NDJkZjQzMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcAorQEAgLTAs
MCArMSwxMzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5j
bHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBG
dW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2NsYXNzIERpc2Nv
dmVyZXIgOiBwdWJsaWMgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcgorK3sKKysg
IHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUg
Jik+ICZtVmFyczsKKysgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5jVG9EZWY7
CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gbU5vbkRlcEZ1bmN0
aW9uczsKKysKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5j
dGlvbiAqPiBtRGVwRnVuY3Rpb25zOworKworKyAgcHVibGljOgorKyAgICBEaXNjb3ZlcmVyKGNv
bnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUgJik+ICZ2YXJzLAorKyAgICAg
ICAgICAgICAgIGNvbnN0IEZ1bmN0aW9uVG9EZWZpbml0aW9uICZmdW5jVG9EZWYpCisrICAgICAg
ICA6IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUp
LCBtVmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisrICAgIHt9CisrCisrICAgIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgp
OworKyAgICAgICAgaWYgKCFtVmFycyh2YXIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uKHN5bWJvbE5vZGUpOworKyAgICAgICAgQVNTRVJUKG93bmVy
KTsKKysgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKysgICAgfQorKworKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGVOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAodmlzaXQgIT0gVmlzaXQ6
OlByZVZpc2l0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAg
ICAgfQorKworKyAgICAgICAgaWYgKCFhZ2dyZWdhdGVOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRl
Tm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgICAgICAgICBpZiAobU5vbkRlcEZ1bmN0aW9u
cy5maW5kKGZ1bmMpICE9IG1Ob25EZXBGdW5jdGlvbnMuZW5kKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAg
ICAgICAgaWYgKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgp
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBpdCA9IG1GdW5jVG9EZWYu
ZmluZChmdW5jKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ID09IG1GdW5jVG9EZWYuZW5kKCkp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2lvbiBpcyBi
YW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRoaXMgcHJvcGVydHkgdG9v
LgorKyAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgKGRpcmVj
dCBhbmQgbXV0dWFsKSByZWN1cnNpb24gaXMgcHJvaGliaXRlZC4KKysgICAgICAgICAgICAgICAg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUgPSAqaXQtPnNlY29uZDsKKysg
ICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7CisrICAgICAgICAgICAg
ICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5l
bmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKG1EZXBGdW5j
dGlvbnMuZmluZChmdW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKTsKKysgICAgICAgICAgICB9
CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9z
aW5nRnVuY3Rpb24oYWdncmVnYXRlTm9kZSk7CisrICAgICAgICAgICAgQVNTRVJUKG93bmVyKTsK
KysgICAgICAgICAgICBtRGVwRnVuY3Rpb25zLmluc2VydChvd25lcik7CisrICAgICAgICB9Cisr
CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0RnVuY3Rp
b25EZWZpbml0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5j
RGVmTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5j
ID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrCisrICAgICAgICBpZiAodmlzaXQgIT0g
VmlzaXQ6OlBvc3RWaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAobURlcEZ1bmN0
aW9ucy5maW5kKGZ1bmMpICE9IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKworKyAgICAg
ICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9u
cy5lbmQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICB9
CisrCisrICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpID09IG1EZXBGdW5jdGlv
bnMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU5vbkRlcEZ1bmN0aW9ucy5pbnNl
cnQoZnVuYyk7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQor
K307CisrCisrfSAgLy8gbmFtZXNwYWNlCisrCisrc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRG
dW5jdGlvbiAqPiBzaDo6RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMoCisrICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKysgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJs
ZSAmKT4gJnZhcnMpCisreworKyAgICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiBmdW5jVG9E
ZWYgPSBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKHJvb3QpOworKyAgICBEaXNjb3ZlcmVyIGRp
c2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKysgICAgcm9vdC50cmF2ZXJzZSgmZGlzY292ZXJl
cik7CisrICAgIHJldHVybiBzdGQ6Om1vdmUoZGlzY292ZXJlci5tRGVwRnVuY3Rpb25zKTsKKyt9
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaAorbmV3
IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVkMWJmMjcKKy0tLSAvZGV2L251bGwK
KysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNj
b3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCitAQCAtMCwwICsxLDI1IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9E
SVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRGVU5DVElPTlNfSF8KKysK
KysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKworK25h
bWVzcGFjZSBzaAorK3sKKysKKysvLyBGaW5kcyBhbmQgcmV0dXJucyBhbGwgZnVuY3Rpb25zIHRo
YXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorK0FOR0xFX05PX0RJU0NBUkQgc3Rk
Ojp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0
aW9ucygKKysgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9u
PGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0
aW9uVHJhdmVyc2VyLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIyZDM5MGUKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcAorQEAgLTAsMCArMSwzMyBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgiCisrCisrdXNpbmcgbmFt
ZXNwYWNlIHNoOworKworK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXI6OkRpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdF8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwb3N0VmlzaXRfLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKysgICAgOiBUSW50ZXJtVHJh
dmVyc2VyKHByZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQorK3t9
CisrCisrY29uc3QgVEZ1bmN0aW9uICpEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2Vy
OjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKFRJbnRlcm1Ob2RlICpub2RlKQorK3sKKysgICAg
QVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysKKysgICAgdW5zaWdu
ZWQgaGVpZ2h0ID0gMDsKKysgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdldEFu
Y2VzdG9yTm9kZShoZWlnaHQpKQorKyAgICB7CisrICAgICAgICBpZiAoVEludGVybUZ1bmN0aW9u
RGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBhbmNlc3Rvci0+Z2V0QXNGdW5jdGlvbkRlZmluaXRp
b24oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY0RlZk5vZGUtPmdldEZ1
bmN0aW9uKCk7CisrICAgICAgICB9CisrICAgICAgICArK2hlaWdodDsKKysgICAgfQorKworKyAg
ICByZXR1cm4gbnVsbHB0cjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5mOWNiMmFhCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5oCitAQCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xP
U0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hf
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZl
cnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgVEludGVybVRyYXZlcnNlciB0
aGF0IHN1cHBvcnRzIGRpc2NvdmVyeSBvZiB0aGUgZnVuY3Rpb24gYSBub2RlIGJlbG9uZ3MgdG8u
CisrY2xhc3MgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0
aW9uVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpblZpc2l0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcG9zdFZpc2l0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSBudWxscHRyKTsKKysKKysgICAg
Ly8gUmV0dXJucyB0aGUgZnVuY3Rpb24gYSBub2RlIGJlbG9uZ3MgaW5zaWRlLgorKyAgICAvLyBS
ZXR1cm5zIG51bGwgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGluc2lkZSBhIGZ1bmN0aW9u
LgorKyAgICBjb25zdCBURnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVy
bU5vZGUgKm5vZGUpOworK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xP
U0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmNwcAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFiYmRkM2YKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwu
Y3BwCitAQCAtMCwwICsxLDI0NTUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8Y2N0
eXBlPgorKyNpbmNsdWRlIDxtYXA+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9u
bWVudFZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0xheW91dC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVy
c2UuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbnN0YW50cy5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorK3VzaW5nIFNpbmsgPSBEZWJ1
Z1Npbms7CisrI2Vsc2UKKyt1c2luZyBTaW5rID0gVEluZm9TaW5rQmFzZTsKKysjZW5kaWYKKysK
KysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytzdHJ1Y3Qg
VmFyRGVjbAorK3sKKysgICAgZXhwbGljaXQgVmFyRGVjbChjb25zdCBUVmFyaWFibGUgJnZhcikg
OiBtVmFyaWFibGUoJnZhciksIG1Jc0ZpZWxkKGZhbHNlKSB7fQorKyAgICBleHBsaWNpdCBWYXJE
ZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1Jc0ZpZWxkKHRydWUp
IHt9CisrCisrICAgIEFOR0xFX0lOTElORSBjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlKCkgY29u
c3QKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzVmFyaWFibGUoKSk7CisrICAgICAgICByZXR1
cm4gKm1WYXJpYWJsZTsKKysgICAgfQorKworKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxk
ICZmaWVsZCgpIGNvbnN0CisrICAgIHsKKysgICAgICAgIEFTU0VSVChpc0ZpZWxkKCkpOworKyAg
ICAgICAgcmV0dXJuICptRmllbGQ7CisrICAgIH0KKysKKysgICAgQU5HTEVfSU5MSU5FIGJvb2wg
aXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtSXNGaWVsZDsgfQorKworKyAgICBBTkdMRV9J
TkxJTkUgYm9vbCBpc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gbUlzRmllbGQ7IH0KKysKKysgICAg
Y29uc3QgVFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50
eXBlKCkgOiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorKworKyAgICBTeW1ib2xUeXBlIHN5bWJv
bFR5cGUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gaXNGaWVsZCgpID8gZmllbGQo
KS5zeW1ib2xUeXBlKCkgOiB2YXJpYWJsZSgpLnN5bWJvbFR5cGUoKTsKKysgICAgfQorKworKyAg
cHJpdmF0ZToKKysgICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpt
VmFyaWFibGU7CisrICAgICAgICBjb25zdCBURmllbGQgKm1GaWVsZDsKKysgICAgfTsKKysgICAg
Ym9vbCBtSXNGaWVsZDsKKyt9OworKworK2NsYXNzIEdlbk1ldGFsVHJhdmVyc2VyIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6CisrICAgIH5HZW5NZXRhbFRyYXZlcnNl
cigpIG92ZXJyaWRlOworKworKyAgICBHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIg
JmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICBTaW5rICZvdXQsCisrICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKysgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICopIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJ
bnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBU
SW50ZXJtQmluYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJ
bnRlcm1VbmFyeSAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQsIFRJ
bnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0LCBU
SW50ZXJtSWZFbHNlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0U3dpdGNoKFZpc2l0LCBU
SW50ZXJtU3dpdGNoICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0Q2FzZShWaXNpdCwgVElu
dGVybUNhc2UgKikgb3ZlcnJpZGU7CisrICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShU
SW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJp
ZGU7CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikg
b3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92
ZXJyaWRlOworKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlzaXQs
IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKSBvdmVycmlkZTsKKysgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7
CisrICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVycmlkZTsKKysg
ICAgYm9vbCB2aXNpdEZvckxvb3AoVEludGVybUxvb3AgKik7CisrICAgIGJvb2wgdmlzaXRXaGls
ZUxvb3AoVEludGVybUxvb3AgKik7CisrICAgIGJvb2wgdmlzaXREb1doaWxlTG9vcChUSW50ZXJt
TG9vcCAqKTsKKysgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqKSBv
dmVycmlkZTsKKysKKysgIHByaXZhdGU6CisrICAgIHVzaW5nIEZ1bmNUb05hbWUgPSBzdGQ6Om1h
cDxJbW11dGFibGVTdHJpbmcsIE5hbWU+OworKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1
bmNUb05hbWUoKTsKKysKKysgICAgc3RydWN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmln
CisrICAgIHsKKysgICAgICAgIGJvb2wgaXNQYXJhbWV0ZXIgICAgICAgICAgICAgICAgPSBmYWxz
ZTsKKysgICAgICAgIGJvb2wgaXNNYWluUGFyYW1ldGVyICAgICAgICAgICAgPSBmYWxzZTsKKysg
ICAgICAgIGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKysgICAgICAg
IGJvb2wgaXNQYWNrZWQgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wg
ZGlzYWJsZVN0cnVjdFNwZWNpZmllciAgICAgPSBmYWxzZTsKKysgICAgICAgIGNvbnN0IEFkZHJl
c3NTcGFjZSAqaXNQb2ludGVyICAgPSBudWxscHRyOworKyAgICAgICAgY29uc3QgQWRkcmVzc1Nw
YWNlICppc1JlZmVyZW5jZSA9IG51bGxwdHI7CisrICAgIH07CisrCisrICAgIHN0cnVjdCBFbWl0
VHlwZUNvbmZpZworKyAgICB7CisrICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlv
bkNvbmZpZyAqZXZkQ29uZmlnID0gbnVsbHB0cjsKKysgICAgfTsKKysKKysgICAgdm9pZCBlbWl0
SW5kZW50YXRpb24oKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1
bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0
aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0
aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKTsKKysKKysgICAgdm9pZCBlbWl0TmFt
ZU9mKGNvbnN0IFRGaWVsZCAmb2JqZWN0KTsKKysgICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRT
eW1ib2wgJm9iamVjdCk7CisrICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmpl
Y3QpOworKworKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7CisrICAgIHZvaWQgZW1pdFR5cGUoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7CisrICAgIHZvaWQg
ZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2
ZENvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNs
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVy
KTsKKysKKysgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGljZXMKKysgICAgeworKyAgICAg
ICAgc2l6ZV90IGF0dHJpYnV0ZSA9IDA7CisrICAgICAgICBzaXplX3QgY29sb3IgICAgID0gMDsK
KysgICAgfTsKKysKKysgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlvbihjb25zdCBURmllbGQg
JmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JnBhcmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25J
bmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcyk7CisrICAgIHZvaWQgZW1pdEF0dHJpYnV0ZURlY2xh
cmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90
YXRpb25JbmRpY2VzKTsKKysgICAgdm9pZCBlbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFR5
cGUgJnR5cGUpOworKyAgICB2b2lkIGVtaXRPcmRpbmFyeVZhcmlhYmxlRGVjbGFyYXRpb24oY29u
c3QgVmFyRGVjbCAmZGVjbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpOworKyAg
ICB2b2lkIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRp
b25Db25maWcgJmV2ZENvbmZpZyk7CisrCisrICAgIHZvaWQgZW1pdE9wZW5CcmFjZSgpOworKyAg
ICB2b2lkIGVtaXRDbG9zZUJyYWNlKCk7CisrCisrICAgIHZvaWQgZ3JvdXBlZFRyYXZlcnNlKFRJ
bnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChj
b25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAmaW5kZXgpOworKyAgICBjb25z
dCBURmllbGQgJmdldERpcmVjdEZpZWxkKGNvbnN0IFRJbnRlcm1UeXBlZCAmZmllbGRzTm9kZSwg
VEludGVybVR5cGVkICZpbmRleE5vZGUpOworKworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAq
ZW1pdENvbnN0YW50VW5pb25BcnJheShjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RV
bmlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IHNpemUpOworKworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqZW1pdENv
bnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25z
dFVuaW9uKTsKKysKKysgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50
VW5pb24gKmNvbnN0IGNvbnN0VW5pb24pOworKworKyAgcHJpdmF0ZToKKysgICAgU2luayAmbU91
dDsKKysgICAgY29uc3QgVENvbXBpbGVyICZtQ29tcGlsZXI7CisrICAgIGNvbnN0IFBpcGVsaW5l
U3RydWN0cyAmbVBpcGVsaW5lU3RydWN0czsKKysgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFy
aWFudHM7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysgICAgSWRHZW4gJm1JZEdlbjsK
KysgICAgaW50IG1JbmRlbnRMZXZlbCAgICAgICAgPSAtMTsKKysgICAgaW50IG1MYXN0SW5kZW50
YXRpb25Qb3MgPSAtMTsKKysgICAgYm9vbCBtUGFyZW50SXNTd2l0Y2ggICAgPSBmYWxzZTsKKysg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1i
b2xzOworKyAgICBjb25zdCBGdW5jVG9OYW1lIG1GdW5jVG9OYW1lICAgPSBCdWlsZEZ1bmNUb05h
bWUoKTsKKysgICAgc2l6ZV90IG1NYWluVGV4dHVyZUluZGV4ICAgICAgID0gMDsKKysgICAgc2l6
ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAgID0gMDsKKysgICAgc2l6ZV90IG1NYWluVW5pZm9y
bUJ1ZmZlckluZGV4ID0gcng6Om10bDo6a0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleDsKKyt9
OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytHZW5NZXRhbFRyYXZlcnNlcjo6
fkdlbk1ldGFsVHJhdmVyc2VyKCkKKyt7CisrICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPT0gLTEp
OworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrfQorKworK0dlbk1ldGFsVHJhdmVy
c2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rICZvdXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVj
dHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFu
dHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbEVudiAmc3ltYm9sRW52KQorKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2Us
IGZhbHNlKSwKKysgICAgICBtT3V0KG91dCksCisrICAgICAgbUNvbXBpbGVyKGNvbXBpbGVyKSwK
KysgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyksCisrICAgICAgbUludmFy
aWFudHMoaW52YXJpYW50cyksCisrICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorKyAgICAg
IG1JZEdlbihpZEdlbikKKyt7fQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRJbmRl
bnRhdGlvbigpCisreworKyAgICBBU1NFUlQobUluZGVudExldmVsID49IDApOworKworKyAgICBp
ZiAobUxhc3RJbmRlbnRhdGlvblBvcyA9PSBtT3V0LnNpemUoKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorKyAgICB9CisrCisrICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisrICAgIHsKKysgICAgICAgIG1P
dXQgPDwgIiAgIjsKKysgICAgfQorKworKyAgICBtTGFzdEluZGVudGF0aW9uUG9zID0gbU91dC5z
aXplKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpHZXRPcGVyYXRvclN0cmluZyhUT3Bl
cmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisreworKyAgICBzd2l0Y2ggKG9w
KQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisrICAgICAgICAg
ICAgcmV0dXJuICIsIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAg
ICAgICAgICAgcmV0dXJuICI9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFs
aXplOgorKyAgICAgICAgICAgIHJldHVybiAiPSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQWRkQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiKz0iOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIi09IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICIq
PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorKyAgICAgICAgICAg
IHJldHVybiAiLz0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RBc3NpZ246Cisr
ICAgICAgICAgICAgcmV0dXJuICIlPSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
U2hpZnRMZWZ0QXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiPDw9IjsgIC8vIFRPRE86IENo
ZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiPj49Ijsg
IC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgICAgIHJldHVy
biAiJj0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246Cisr
ICAgICAgICAgICAgcmV0dXJuICJePSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZU9yQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAifD0iOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgICAgICByZXR1cm4gIisiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICByZXR1cm4gIi0iOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKysgICAgICAgICAgICByZXR1cm4gIi8iOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICAgICAgcmV0dXJuICIlIjsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisrICAgICAgICAgICAg
cmV0dXJuICI8PCI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRp
bmcuCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoKKysgICAgICAg
ICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBz
aGlmdGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgorKyAgICAg
ICAgICAgIHJldHVybiAiJiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhv
cjoKKysgICAgICAgICAgICByZXR1cm4gIl4iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VPcjoKKysgICAgICAgICAgICByZXR1cm4gInwiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExlc3NUaGFuOgorKyAgICAgICAgICAgIHJldHVybiAiPCI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisrICAgICAgICAgICAgcmV0dXJuICI+IjsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorKyAgICAgICAgICAg
IHJldHVybiAiPD0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisrICAgICAgICAgICAgcmV0dXJuICI+PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTGVzc1RoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPCI7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAg
ICAgICAgICAgcmV0dXJuICI8PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICAgICAgcmV0dXJuICI+PSI7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorKyAgICAg
ICAgICAgIHJldHVybiAiPiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9y
OgorKyAgICAgICAgICAgIHJldHVybiAifHwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxYb3I6CisrICAgICAgICAgICAgcmV0dXJuICIhPS8qeG9yKi8iOyAgLy8gWFhYOiBU
aGlzIG1pZ2h0IG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3Igc29tZSBvYnR1c2UK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgY2FzZS4KKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorKyAgICAgICAgICAgIHJldHVybiAiJiYi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorKyAgICAgICAgICAgIHJl
dHVybiAiLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zaXRpdmU6CisrICAgICAg
ICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgcmV0dXJuICIiOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4g
IisiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisrICAgICAgICAg
ICAgcmV0dXJuICIhIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90Q29t
cG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiEiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICAgICAgcmV0dXJuICJ+IjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgICAgIHJldHVybiAi
KysiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3REZWNyZW1lbnQ6CisrICAgICAg
ICAgICAgcmV0dXJuICItLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVt
ZW50OgorKyAgICAgICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZURlY3JlbWVudDoKKysgICAgICAgICAgICByZXR1cm4gIi0tIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgICAgICBy
ZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoK
KysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorKyAgICAgICAgICAgIHJldHVybiAi
KiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNWZWN0b3I6CisrICAg
ICAgICAgICAgcmV0dXJuICIqIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhU
aW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgICAgIHJldHVybiAiKiI7Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWxDb21wb25lbnRXaXNlOgorKyAgICAgICAg
ICAgIHJldHVybiAiPT0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29t
cG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoKGFyZ1R5cGUwLT5pc1ZlY3Rv
cigpICYmIGFyZ1R5cGUxLT5pc1ZlY3RvcigpKSB8fAorKyAgICAgICAgICAgICAgICAoYXJnVHlw
ZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkgfHwKKysgICAgICAgICAg
ICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisrCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKysg
ICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuICI9PSI7CisrCisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisrICAgICAgICAgICAgaWYgKChhcmdUeXBlMC0+
aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkgfHwKKysgICAgICAgICAgICAgICAg
KGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX25vdEVxdWFsIjsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFy
Z1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJl
dHVybiAiQU5HTEVfbm90RXF1YWxTdHJ1Y3QiOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICByZXR1cm4gIiE9IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BLaWxsOgorKyAg
ICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gImtpbGwiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKysgICAgICAgICAgICByZXR1cm4gInJldHVybiI7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQnJlYWs6CisrICAgICAgICAgICAgcmV0dXJu
ICJicmVhayI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6CisrICAgICAg
ICAgICAgcmV0dXJuICJjb250aW51ZSI7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UmFkaWFuczoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JhZGlhbnMiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9k
ZWdyZWVzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorKyAgICAgICAgICAg
IHJldHVybiAiQU5HTEVfYXRhbiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kOgor
KyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbW9kIjsgIC8vIGRpZmZlcnMgZnJvbSBtZXRhbDo6
bW9kCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFjdDoKKysgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpc3Rh
bmNlOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZGlzdGFuY2UiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2xlbmd0
aCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRG90OgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfZG90IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3JtYWxpemU6Cisr
ICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3JtYWxpemUiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZmFjZWZv
cndhcmQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisrICAgICAgICAg
ICAgcmV0dXJuICJBTkdMRV9yZWZsZWN0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BN
dWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfY29tcG9u
ZW50V2lzZU11bHRpcGx5IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1
Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9vdXRlclByb2R1Y3QiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFNpZ246CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWdu
IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisrICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6YWJzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbGw6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWxsIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBbnk6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YW55IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BTaW46CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c2luIjsKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6Y29zIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46CisrICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6dGFuIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luOgor
KyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFjb3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWNvcyI7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpz
aW5oIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3NoOgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmNvc2giOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRhbmg6Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuaCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXNpbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YXNpbmgiOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFjb3NoIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFuaDoKKysgICAgICAgICAg
ICByZXR1cm4gIm1ldGFsOjphdGFuaCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRm1h
OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZtYSI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUG93OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmV4
cCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKysgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjpleHAyIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2c6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2cyOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmxvZzIiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c3FydCI7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6Zmxvb3IiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5jOgorKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OnRydW5jIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BDZWlsOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNlaWwiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEZyYWN0OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZy
YWN0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaW46CisrICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6bWluIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWF4IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BSb3VuZDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUm91bmRFdmVuOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnJpbnQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OmNsYW1wIjsgIC8vIFRPRE8gZmFzdCB2cyBwcmVjaXNlIG5hbWVzcGFj
ZQorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1peDoKKysgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjptaXgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN0ZXA6CisrICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6c3RlcCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
U21vb3Roc3RlcDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzbW9vdGhzdGVwIjsKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2RmOgorKyAgICAgICAgICAgIHJldHVybiAibWV0
YWw6Om1vZGYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OmlzbmFuIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
c2luZjoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc2luZiI7CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTGRleHA6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bGRleHAi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyZXhwOgorKyAgICAgICAgICAgIHJldHVy
biAibWV0YWw6OmZyZXhwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlc3Fy
dDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyc3FydCI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ3Jvc3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y3Jvc3MiOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERGZHg6CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6ZGZkeCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKysgICAgICAg
ICAgICByZXR1cm4gIm1ldGFsOjpkZmR5IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BG
d2lkdGg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
dHJhbnNwb3NlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKysg
ICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZXRlcm1pbmFudCI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2ludmVy
c2UiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvVWludDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVaW50Qml0c1RvRmxvYXQ6CisrICAgICAgICB7CisrI2RlZmluZSBSRVRVUk5fQVNfVFlQRShw
b3N0KSAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3dpdGNoIChyZXN1bHRUeXBlLmdldEJh
c2ljVHlwZSgpKSAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5cGU8aW50IiBwb3N0ICI+
IjsgICBcCisrICAgICAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OiAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAor
KyAgICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICBcCisrICAg
ICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdCIgcG9zdCAiPiI7IFwKKysgICAgICAg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg
ICAgICBUT0RPKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAg
IHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOyAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB3aGlsZSAoZmFsc2UpCisrCisr
ICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUuaXNTY2FsYXIoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCIiKTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgZWxzZSBpZiAocmVzdWx0VHlwZS5pc1ZlY3RvcigpKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRUeXBlLmdldE5vbWluYWxTaXplKCkpCisr
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIpOworKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCIzIik7
CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0FTX1RZUEUoIjQiKTsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUT0RP
KCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOworKyAgICAgICAg
ICAgIH0KKysKKysjdW5kZWYgUkVUVVJOX0FTX1RZUEUKKysgICAgICAgIH0KKysKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm0yeDE2OgorKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm0yeDE2IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQYWNrU25vcm0yeDE2OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxv
YXRfdG9fc25vcm0yeDE2IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5v
cm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19mbG9hdF90b191bm9ybTR4
OCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtNHg4OgorKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworKworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKysgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dW5w
YWNrX3Nub3JtMngxNl90b19mbG9hdCI7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
VW5wYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dW5wYWNrX3Vub3Jt
NHg4X3RvX2Zsb2F0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4
ODoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfc25vcm00eDhfdG9fZmxvYXQi
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKysgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX3BhY2tfaGFsZl8yeDE2IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BVbnBhY2tIYWxmMngxNjoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFj
a19oYWxmXzJ4MTYiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkRXh0
cmFjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0Q291bnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExT
QjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFVhZGRDYXJyeToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3Vi
Qm9ycm93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRlZDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVsRXh0ZW5kZWQ6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQmFycmllcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJy
aWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJBdG9taWNDb3Vu
dGVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJTaGFyZWQ6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEF0b21pY0FkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNNaW46Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEF0b21pY0FuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQXRvbWljQ29tcFN3YXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW1pdFZlcnRl
eDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BQYWNrRG91YmxlMngzMjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3Vi
bGUyeDMyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFycmF5TGVuZ3RoOgorKyAgICAg
ICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRvcl9UT0RPIjsKKysK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcENvbnN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rp
b25JbkFTVDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5j
dGlvbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJl
Y3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrfQorKworKyNpZiAwCisrc3RhdGljIGludCBH
ZXRPcGVyYXRvclByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkK
KysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOiB7CisrICAgICAgICAg
ICAgcmV0dXJuIDE3OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFz
c2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNz
aWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOiB7CisrICAgICAgICAgICAg
cmV0dXJuIDE2OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMb2dpY2FsT3I6IHsKKysgICAgICAgICAgICByZXR1cm4gMTU7CisrICAgICAgICB9IGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6IHsKKysgICAg
ICAgICAgICByZXR1cm4gMTQ7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPcjogeworKyAgICAgICAgICAgIHJldHVybiAxMzsKKysgICAg
ICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvcjog
eworKyAgICAgICAgICAgIHJldHVybiAxMjsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworKyAgICAgICAgICAgIHJldHVybiAx
MTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9n
aWNhbFhvcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworKyAgICAgICAgICAgIHJldHVybiAxMDsKKysg
ICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW46
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BHcmVhdGVyVGhhbkVxdWFsOiB7CisrICAgICAgICAgICAgcmV0dXJuIDk7CisrICAgICAgICB9
IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdDoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisrICAgICAgICAgICAg
cmV0dXJuIDc7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6IHsKKysgICAgICAgICAg
ICByZXR1cm4gNjsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTXVsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJTW9kOiB7CisrICAgICAgICAgICAgcmV0dXJuIDU7CisrICAgICAg
ICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZ2ljYWxOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU5v
dDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVJbmNyZW1lbnQ6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OiB7CisrICAgICAgICAgICAgcmV0dXJuIDM7
CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJ
bmNyZW1lbnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDogewor
KyAgICAgICAgICAgIHJldHVybiAyOworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGRl
ZmF1bHQ6IHsKKysgICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOwor
KyAgICAgICAgfQorKyAgICB9CisrfQorKworK25hbWVzcGFjZQorK3sKKysKKytlbnVtIGNsYXNz
IEFzc29jaWF0aXZpdHkKKyt7CisrICAgIE5vbmUsCisrICAgIExlZnQsCisrICAgIFJpZ2h0LAor
K307CisrCisrfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrc3RhdGljIEFzc29jaWF0aXZp
dHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCisreworKyAgICBzd2l0Y2ggKG9wKQor
KyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cElNb2Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZUFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNl
WG9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RF
cXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMZXNzVGhhbkVxdWFsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFu
RXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTG9naWNhbEFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYTogeworKyAg
ICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpMZWZ0OworKyAgICAgICAgfSBicmVhazsK
KysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BEaXZBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9y
QXNzaWduOiB7CisrICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6OlJpZ2h0OworKyAg
ICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOZWdhdGl2ZToK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVE
ZWNyZW1lbnQ6IHsKKysgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRpdml0eTo6Tm9uZTsKKysg
ICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OiB7CisrICAgICAgICAgICAgVE9E
TygpOworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpOb25lOworKyAgICAgICAg
fQorKyAgICB9CisrfQorKyNlbmRpZgorKworK3N0YXRpYyBib29sIElzU3ltYm9saWNPcGVyYXRv
cihUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisreworKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpF
T3BDYWxsQnVpbHRJbkZ1bmN0aW9uKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgcmV0dXJuICFzdGQ6OmlzYWxudW0oR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJl
c3VsdFR5cGUsIGFyZ1R5cGUwLCBhcmdUeXBlMSlbMF0pOworK30KKysKKytzdGF0aWMgVEludGVy
bUJpbmFyeSAqQXNTcGVjaWZpY0JpbmFyeU5vZGUoVEludGVybU5vZGUgJm5vZGUsIFRPcGVyYXRv
ciBvcCkKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmlu
YXJ5Tm9kZSgpOworKyAgICBpZiAoYmluYXJ5Tm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3AgPyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKysgICAg
fQorKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CisrCisrc3RhdGljIGJvb2wgUGFyZW50aGVzaXpl
KFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgaWYgKG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5n
ZXRBc0NvbnN0YW50VW5pb24oKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc1N3aXp6bGVOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoVEludGVy
bVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisrICAgIHsKKysgICAg
ICAgIC8vIFRPRE86IFVzZSBhIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5z
dGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBsLgorKyAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5
cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBl
ICAgID0gdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKysgICAgICAgIHJldHVy
biBJc1N5bWJvbGljT3BlcmF0b3IodW5hcnlOb2RlLT5nZXRPcCgpLCByZXN1bHRUeXBlLCAmYXJn
VHlwZSk7CisrICAgIH0KKysKKysgICAgaWYgKFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBu
b2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICAvLyBUT0RPOiBVc2UgYSBw
cmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVzIGluc3RlYWQgb2YgdGhpcyBhZC1ob2Mg
aW1wbC4KKysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUtPmdldE9wKCk7
CisrICAgICAgICBzd2l0Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4SW5kaXJlY3Q6CisrICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFy
eU5vZGUtPmdldExlZnQoKSk7CisrCisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFz
c2lnbjoKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAg
ICAgICAgICAgICAgcmV0dXJuIEFzU3BlY2lmaWNCaW5hcnlOb2RlKCpiaW5hcnlOb2RlLT5nZXRS
aWdodCgpLCBUT3BlcmF0b3I6OkVPcENvbW1hKTsKKysKKysgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUg
PSBiaW5hcnlOb2RlLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZs
ZWZ0VHlwZSAgID0gYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisrICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gYmluYXJ5Tm9kZS0+Z2V0UmlnaHQoKS0+
Z2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gSXNTeW1ib2xpY09wZXJhdG9yKGJp
bmFyeU5vZGUtPmdldE9wKCksIHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSk7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpncm91cGVkVHJhdmVyc2UoVEludGVybU5v
ZGUgJm5vZGUpCisreworKyAgICBjb25zdCBib29sIGVtaXRQYXJlbnMgPSBQYXJlbnRoZXNpemUo
bm9kZSk7CisrCisrICAgIGlmIChlbWl0UGFyZW5zKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8
ICIoIjsKKysgICAgfQorKworKyAgICBub2RlLnRyYXZlcnNlKHRoaXMpOworKworKyAgICBpZiAo
ZW1pdFBhcmVucykKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiKSI7CisrICAgIH0KKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZh
cmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVy
KQorK3sKKysgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgIHsKKysgICAgICAgIGNhc2UgVFF1
YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdD
b29yZDoKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1twb3NpdGlvbl1dIjsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorKyAg
ICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisrICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorKyAgICAgICAgICAg
IGlmIChldmRDb25maWcuaXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29y
ZDoKKysgICAgICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlcikKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X2Nvb3JkXV0iOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxRnJvbnRGYWNpbmc6CisrICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5Q
YXJhbWV0ZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tm
cm9udF9mYWNpbmddXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKwor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICBj
b25zdCBib29sIGlzSW52YXJpYW50ID0KKysgICAgICAgIGRlY2wuaXNGaWVsZCgpID8gbUludmFy
aWFudHMuY29udGFpbnMoZGVjbC5maWVsZCgpKSA6IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wu
dmFyaWFibGUoKSk7CisrCisrICAgIGlmIChpc0ludmFyaWFudCkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIEVt
aXROYW1lKFNpbmsgJm91dCwgY29uc3QgTmFtZSAmbmFtZSkKKyt7CisrI2lmIGRlZmluZWQoQU5H
TEVfRU5BQkxFX0FTU0VSVFMpCisrICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91
dChvdXQuZXNjYXBlKCkpOworKyNlbHNlCisrICAgIFRJbmZvU2lua0Jhc2UgJmVzY2FwZWRPdXQg
PSBvdXQ7CisrI2VuZGlmCisrICAgIG5hbWUuZW1pdChlc2NhcGVkT3V0KTsKKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVjdCkKKyt7
CisrICAgIEVtaXROYW1lKG1PdXQsIE5hbWUob2JqZWN0KSk7CisrfQorKworK3ZvaWQgR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVFN5bWJvbCAmb2JqZWN0KQorK3sKKysgICAg
YXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworKyAgICBpZiAoaXQgPT0g
bVJlbmFtZWRTeW1ib2xzLmVuZCgpKQorKyAgICB7CisrICAgICAgICBFbWl0TmFtZShtT3V0LCBO
YW1lKG9iamVjdCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgRW1pdE5h
bWUobU91dCwgaXQtPnNlY29uZCk7CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmplY3QpCisreworKyAgICBpZiAob2Jq
ZWN0LmlzRmllbGQoKSkKKysgICAgeworKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQo
KSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0TmFtZU9mKG9iamVj
dC52YXJpYWJsZSgpKTsKKysgICAgfQorK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0QmFyZVR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAm
ZXRDb25maWcpCisreworKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IHR5cGUuZ2V0
QmFzaWNUeXBlKCk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAg
ICBjYXNlIFRCYXNpY1R5cGU6OkVidFZvaWQ6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVi
dEJvb2w6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorKyAgICAgICAgY2Fz
ZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6
CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7
CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgICAgIGVtaXROYW1lT2Yo
c3RydWN0dXJlKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2Fz
ZSBUQmFzaWNUeXBlOjpFYnRJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0gKnR5cGUuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKysgICAgICAgICAgICBlbWl0TmFtZU9mKGludGVyZmFjZUJsb2NrKTsKKysg
ICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
IHsKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29uZmlnLmV2
ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBHZXRUZXh0dXJlVHlwZU5hbWUoYmFzaWNUeXBlKSk7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3lt
Ym9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKysgICAgICAgICAgICAgICAgICAgIGVt
aXROYW1lT2YoZW52KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUT0RPKCk7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZp
ZyAmZXRDb25maWcpCisreworKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnKQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBhdXRvICZldmRDb25maWcgPSAqZXRDb25maWcuZXZkQ29uZmlnOworKyAg
ICAgICAgaWYgKGV2ZENvbmZpZy5pc1BvaW50ZXIpCisrICAgICAgICB7CisrICAgICAgICAgICAg
bU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUG9pbnRlcik7CisrICAgICAgICAgICAgbU91
dCA8PCAiICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChldmRDb25maWcuaXNSZWZl
cmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29u
ZmlnLmlzUmVmZXJlbmNlKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIgIjsKKysgICAgICAgIH0K
KysgICAgfQorKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAgIHsKKysgICAgICAgIG1P
dXQgPDwgIkFOR0xFX3RlbnNvcjwiOworKyAgICB9CisrCisrICAgIGlmICh0eXBlLmlzVmVjdG9y
KCkgfHwgdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8ICJtZXRhbDo6
IjsKKysgICAgfQorKworKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29uZmlnLmV2
ZENvbmZpZy0+aXNQYWNrZWQpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgInBhY2tlZF8iOwor
KyAgICB9CisrCisrICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwgZXRDb25maWcpOworKworKyAg
ICBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8IHR5cGUuZ2V0
Tm9taW5hbFNpemUoKTsKKysgICAgfQorKyAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisr
ICAgIHsKKysgICAgICAgIG1PdXQgPDwgdHlwZS5nZXRDb2xzKCkgPDwgIngiIDw8IHR5cGUuZ2V0
Um93cygpOworKyAgICB9CisrCisrICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgeworKyAg
ICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBtT3V0IDw8ICIsICIgPDwgc2l6ZTsKKysgICAgICAgIH0KKysgICAgICAg
IG1PdXQgPDwgIj4iOworKyAgICB9CisrCisrICAgIGlmIChldENvbmZpZy5ldmRDb25maWcpCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25m
aWc7CisrICAgICAgICBpZiAoZXZkQ29uZmlnLmlzUG9pbnRlcikKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtT3V0IDw8ICIgKiI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChldmRD
b25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiICYi
OworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVt
aXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmcGFyZW50LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkQW5ub3Rh
dGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5
cGUgICAgICA9ICpmaWVsZC50eXBlKCk7CisrICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWMgPSB0
eXBlLmdldEJhc2ljVHlwZSgpOworKworKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZp
ZyBldmRDb25maWc7CisrICAgIGV2ZENvbmZpZy5lbWl0UG9zdFF1YWxpZmllciAgICAgID0gdHJ1
ZTsKKysgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworKyAgICBl
dmRDb25maWcuaXNQYWNrZWQgICAgICAgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQYWNrZWQoZmll
bGQpOworKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgICAgICA9IG1TeW1ib2xFbnYu
aXNQb2ludGVyKGZpZWxkKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAgICAgICAgICAg
PSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKysgICAgZW1pdFZhcmlhYmxlRGVjbGFy
YXRpb24oVmFyRGVjbChmaWVsZCksIGV2ZENvbmZpZyk7CisrCisrICAgIGNvbnN0IFRRdWFsaWZp
ZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisrICAgIHN3aXRjaCAocXVhbCkKKysgICAg
eworKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46CisrICAgICAgICAgICAgaWYg
KG1QaXBlbGluZVN0cnVjdHMuZnJhZ21lbnRJbi5leHRlcm5hbCA9PSAmcGFyZW50KQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxhdF1dIjsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6
OkV2cUZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGF0YToK
KysgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5leHRlcm5hbCA9
PSAmcGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKCh0eXBlLmlz
VmVjdG9yKCkgJiYKKysgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKysgICAgICAgICAgICAg
ICAgICAgICAgYmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpKSB8fAorKyAgICAgICAgICAg
ICAgICAgICAgdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0YSkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzoKKysgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gZ2VuZXJhbCBhbmQgbmVlZHMgYSByZWltcGxl
bWVudGF0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0
IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisrICAgICAg
ICAgICAgICAgICAgICAvLyBTZWUgNC4zLjguMgorKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNzL2VzLzMuMC9HTFNMX0VT
X1NwZWNpZmljYXRpb25fMy4wMC5wZGYKKysgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRl
eCA9IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisrICAgICAgICAgICAgICAgICAgICBtT3V0
IDw8ICIgW1tjb2xvcigiIDw8IGluZGV4IDw8ICIpXV0iOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFGcmFnRGVwdGg6CisrICAgICAgICAgICAgbU91dCA8PCAiIFtbZGVwdGgoYW55
KV1dIjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAg
ICAgICAgYnJlYWs7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVf
dD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0ZUluZGV4TWFwKAorKyAgICBjb25zdCBUQ29tcGlsZXIg
JmNvbXBpbGVyLAorKyAgICBjb25zdCBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiAmc3RydWN0
dXJlKQorK3sKKysgICAgQVNTRVJUKHN0cnVjdHVyZS5pc1RvdGFsbHlGdWxsKCkpOworKworKyAg
ICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsK
KysgICAgY29uc3Qgc2l6ZV90IHNoYWRlclZhclNpemUgPSBzaGFkZXJWYXJzLnNpemUoKTsKKysg
ICAgc2l6ZV90IHNoYWRlclZhckluZGV4ICAgICAgPSAwOworKworKyAgICBjb25zdCBhdXRvICZl
eHRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5leHRlcm5hbC0+ZmllbGRzKCk7CisrICAgIGNvbnN0
IHNpemVfdCBleHRlcm5hbFNpemUgID0gZXh0ZXJuYWxGaWVsZHMuc2l6ZSgpOworKyAgICBzaXpl
X3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisrCisrICAgIGNvbnN0IGF1dG8gJmludGVybmFs
RmllbGRzID0gc3RydWN0dXJlLmludGVybmFsLT5maWVsZHMoKTsKKysgICAgY29uc3Qgc2l6ZV90
IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7CisrICAgIHNpemVfdCBpbnRl
cm5hbEluZGV4ICAgICAgID0gMDsKKysKKysgICAgLy8gSW50ZXJuYWwgZmllbGRzIGFyZSBuZXZl
ciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3BsaXQuCisrICAgIEFTU0VS
VChleHRlcm5hbFNpemUgPj0gaW50ZXJuYWxTaXplKTsKKysKKysgICAgLy8gU3RydWN0dXJlcyBk
byBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorKyAgICBBU1NFUlQoc2hhZGVyVmFy
U2l6ZSA+PSBpbnRlcm5hbFNpemUpOworKworKyAgICBzdGQ6Om1hcDxOYW1lLCBzaXplX3Q+IGV4
dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisrICAgIHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9
IDA7CisrCisrICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxTaXplKQorKyAgICB7
CisrICAgICAgICBjb25zdCBURmllbGQgJmludGVybmFsRmllbGQgPSAqaW50ZXJuYWxGaWVsZHNb
aW50ZXJuYWxJbmRleF07CisrICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFtZSAgICAgPSBO
YW1lKGludGVybmFsRmllbGQpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmludGVybmFsVHlwZSAg
ID0gKmludGVybmFsRmllbGQudHlwZSgpOworKyAgICAgICAgd2hpbGUgKGludGVybmFsTmFtZS5y
YXdOYW1lKCkgIT0gc2hhZGVyVmFyc1tzaGFkZXJWYXJJbmRleF0ubmFtZSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICAvLyBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBpbmFjdGl2ZSBmaWVsZC4K
KysKKysgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworKyAgICAgICAgICAgIEFTU0VSVChz
aGFkZXJWYXJJbmRleCA8IHNoYWRlclZhclNpemUpOworKworKyAgICAgICAgICAgICsrYXR0cmli
dXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRl
ciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKysgICAgICAgIH0KKysKKysgICAgICAgIGNvbnN0IHNp
emVfdCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29s
cygpIDogMTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBjIDwgY29sczsgKytjKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZXh0ZXJuYWxGaWVsZCA9ICpl
eHRlcm5hbEZpZWxkc1tleHRlcm5hbEluZGV4XTsKKysgICAgICAgICAgICBjb25zdCBOYW1lIGV4
dGVybmFsTmFtZSAgICAgPSBOYW1lKGV4dGVybmFsRmllbGQpOworKyAgICAgICAgICAgIEFTU0VS
VCghZXh0ZXJuYWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworKworKyAgICAgICAgICAgIGV4
dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXhbZXh0ZXJuYWxOYW1lXSA9IGF0dHJpYnV0ZUluZGV4
OworKworKyAgICAgICAgICAgICsrZXh0ZXJuYWxJbmRleDsKKysgICAgICAgICAgICArK2F0dHJp
YnV0ZUluZGV4OworKyAgICAgICAgfQorKworKyAgICAgICAgKytzaGFkZXJWYXJJbmRleDsKKysg
ICAgICAgICsraW50ZXJuYWxJbmRleDsKKysgICAgfQorKworKyAgICBBU1NFUlQoc2hhZGVyVmFy
SW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7CisrICAgIEFTU0VSVChleHRlcm5hbEluZGV4IDw9IGV4
dGVybmFsU2l6ZSk7ICAvLyBsZXNzIHRoYW4gaWYgcGFkZGluZyB3YXMgaW50cm9kdWNlZAorKyAg
ICBBU1NFUlQoaW50ZXJuYWxJbmRleCA9PSBpbnRlcm5hbFNpemUpOworKworKyAgICByZXR1cm4g
ZXh0ZXJuYWxOYW1lVG9BdHRyaWJ1dGVJbmRleDsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkQW5ub3Rh
dGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAgRW1pdFZhcmlhYmxlRGVj
bGFyYXRpb25Db25maWcgZXZkQ29uZmlnOworKyAgICBldmRDb25maWcuZGlzYWJsZVN0cnVjdFNw
ZWNpZmllciA9IHRydWU7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2woZmll
bGQpLCBldmRDb25maWcpOworKyAgICBtT3V0IDw8ICIgW1thdHRyaWJ1dGUoIiA8PCBhbm5vdGF0
aW9uSW5kaWNlcy5hdHRyaWJ1dGUrKyA8PCAiKV1dIjsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysg
ICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0U3RydWN0KTsK
KysgICAgQVNTRVJUKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSk7CisrCisrICAgIG1PdXQgPDwg
InN0cnVjdCAiOworKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIHt9KTsKKysKKysgICAgbU91
dCA8PCAiXG4iOworKyAgICBlbWl0T3BlbkJyYWNlKCk7CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICBzdGQ6Om1hcDxOYW1lLCBz
aXplX3Q+IGZpZWxkVG9BdHRyaWJ1dGVJbmRleDsKKysgICAgY29uc3QgYm9vbCBoYXNBdHRyaWJ1
dGVJbmRpY2VzICAgICAgICAgICA9IG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4uZXh0ZXJuYWwg
PT0gJnN0cnVjdHVyZTsKKysgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmlidXRlSW5k
aWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisrCisrICAgIGlmICho
YXNBdHRyaWJ1dGVJbmRpY2VzKQorKyAgICB7CisrICAgICAgICBmaWVsZFRvQXR0cmlidXRlSW5k
ZXggPQorKyAgICAgICAgICAgIEJ1aWxkRXh0ZXJuYWxBdHRyaWJ1dGVJbmRleE1hcChtQ29tcGls
ZXIsIG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4pOworKyAgICB9CisrCisrICAgIEZpZWxkQW5u
b3RhdGlvbkluZGljZXMgYW5ub3RhdGlvbkluZGljZXM7CisrCisrICAgIGZvciAoY29uc3QgVEZp
ZWxkICpmaWVsZCA6IHN0cnVjdHVyZS5maWVsZHMoKSkKKysgICAgeworKyAgICAgICAgZW1pdElu
ZGVudGF0aW9uKCk7CisrICAgICAgICBpZiAoaGFzQXR0cmlidXRlSW5kaWNlcykKKysgICAgICAg
IHsKKysgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZp
bmQoTmFtZSgqZmllbGQpKTsKKysgICAgICAgICAgICBpZiAoaXQgPT0gZmllbGRUb0F0dHJpYnV0
ZUluZGV4LmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGZp
ZWxkLT5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisrICAgICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZC0+bmFtZSgpLmJlZ2luc1dpdGgoIl8iKSk7CisrICAgICAg
ICAgICAgICAgIEFTU0VSVChhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJf
cGFkIikpOworKyAgICAgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0
cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NFUlQoZmllbGQtPnN5
bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsIHx8CisrICAgICAgICAgICAg
ICAgICAgICAgICAhZmllbGQtPm5hbWUoKS5iZWdpbnNXaXRoKCJfIikgfHwKKysgICAgICAgICAg
ICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFk
IikpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlY2xhaW1VbnVzZWRBdHRyaWJ1dGVJbmRpY2Vz
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5k
aWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgIGVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigqZmllbGQsIGFubm90YXRpb25JbmRp
Y2VzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAg
ICB7CisrICAgICAgICAgICAgZW1pdEZpZWxkRGVjbGFyYXRpb24oKmZpZWxkLCBzdHJ1Y3R1cmUs
IGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgIH0KKysgICAgICAgIG1PdXQgPDwgIjtcbiI7
CisrICAgIH0KKysKKysgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1hdGNoZXMoc3RydWN0dXJl
LCB0cnVlLCB0cnVlKSkKKysgICAgeworKyAgICAgICAgTWV0YWxMYXlvdXRPZkNvbmZpZyBsYXlv
dXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1wbGVyc0FzVGV4dHVyZUVu
diA9IHRydWU7CisrICAgICAgICBMYXlvdXQgbGF5b3V0ICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29uZmlnKTsKKysgICAgICAgIHNpemVfdCBw
YWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGF5b3V0LnNpemVPZiAlIDE2OworKyAg
ICAgICAgaWYgKHBhZCAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVtaXRJbmRlbnRh
dGlvbigpOworKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKysgICAgICAgICAgICBFbWl0
TmFtZShtT3V0LCBtSWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIikpOworKyAgICAgICAgICAgIG1P
dXQgPDwgIlsiIDw8IHBhZCA8PCAiXTtcbiI7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAg
ZW1pdENsb3NlQnJhY2UoKTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9y
ZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKysgICAgY29uc3QgVmFyRGVjbCAmZGVjbCwKKysg
ICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKKyt7Cisr
ICAgIEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKyAgICBldENvbmZpZy5ldmRDb25maWcgPSAm
ZXZkQ29uZmlnOworKworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGRlY2wudHlwZSgpOworKyAg
ICBlbWl0VHlwZSh0eXBlLCBldENvbmZpZyk7CisrCisrICAgIGlmIChkZWNsLnN5bWJvbFR5cGUo
KSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiICI7Cisr
ICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1p
dFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKKyt7CisrICAgIGNvbnN0IFN5
bWJvbFR5cGUgc3ltYm9sVHlwZSA9IGRlY2wuc3ltYm9sVHlwZSgpOworKyAgICBjb25zdCBUVHlw
ZSAmdHlwZSAgICAgICAgICAgPSBkZWNsLnR5cGUoKTsKKysgICAgY29uc3QgVEJhc2ljVHlwZSBi
YXNpY1R5cGUgID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAgc3dpdGNoIChiYXNpY1R5
cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGlmICh0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkgJiYgIWV2ZENv
bmZpZy5kaXNhYmxlU3RydWN0U3BlY2lmaWVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAgICAgICAgICAgICAgICBl
bWl0U3RydWN0RGVjbGFyYXRpb24odHlwZSk7CisrICAgICAgICAgICAgICAgIGlmIChzeW1ib2xU
eXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgIjsKKysgICAgICAgICAgICAgICAgICAgIGVtaXROYW1lT2Yo
ZGVjbCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
ZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZW1pdE9yZGluYXJ5VmFyaWFi
bGVEZWNsYXJhdGlvbihkZWNsLCBldmRDb25maWcpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSB8fCBldmRD
b25maWcuaXNQYXJhbWV0ZXIpOworKyAgICAgICAgICAgIGVtaXRPcmRpbmFyeVZhcmlhYmxlRGVj
bGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBp
ZiAoZXZkQ29uZmlnLmVtaXRQb3N0UXVhbGlmaWVyKQorKyAgICB7CisrICAgICAgICBlbWl0UG9z
dFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOworKyAgICB9
CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbE5vZGUpCisreworKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5v
ZGUtPnZhcmlhYmxlKCk7CisrICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUo
KTsKKysKKysgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkp
OworKworKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRWb2lk
KQorKyAgICB7CisrICAgICAgICBtT3V0IDw8ICIvKiI7CisrICAgICAgICBlbWl0TmFtZU9mKHZh
cik7CisrICAgICAgICBtT3V0IDw8ICIqLyI7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7Cisr
ICAgICAgICBlbWl0TmFtZU9mKHZhcik7CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBj
b25zdFVuaW9uKQorK3sKKysgICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisrICAg
IHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtT3V0IDw8IChjb25zdFVuaW9uLT5nZXRCQ29uc3QoKSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNp
Y1R5cGU6OkVidEZsb2F0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RV
bmlvbi0+Z2V0RkNvbnN0KCkgPDwgImYiOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOworKyAgICAgICAgfQorKyAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisrICAgICAg
ICB7CisrICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRVQ29uc3QoKSA8PCAidSI7
CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICB7CisrICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgfQorKyAgICB9CisrfQorKwor
K2NvbnN0IFRDb25zdGFudFVuaW9uICpHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENvbnN0YW50VW5p
b25BcnJheSgKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5pb24sCisr
ICAgIGNvbnN0IHNpemVfdCBzaXplKQorK3sKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNv
bnN0VW5pb25JdGVyYXRlZCA9IGNvbnN0VW5pb247CisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKysgICAgeworKyAgICAgICAgZW1p
dFNpbmdsZUNvbnN0YW50KGNvbnN0VW5pb25JdGVyYXRlZCk7CisrCisrICAgICAgICBpZiAoaSAh
PSBzaXplIC0gMSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisrICAg
ICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKKyt9CisrCisr
Y29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlv
bihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdFVuaW9u
QmVnaW4pCisreworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBj
b25zdFVuaW9uQmVnaW47CisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSAgICAgICAg
ICA9IHR5cGUuZ2V0U3RydWN0KCk7CisrICAgIGlmIChzdHJ1Y3R1cmUpCisrICAgIHsKKysgICAg
ICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmlne251bGxwdHJ9OworKyAg
ICAgICAgZW1pdFR5cGUodHlwZSwgY29uZmlnKTsKKysgICAgICAgIG1PdXQgPDwgInsiOworKyAg
ICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKysg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSBmaWVsZHNbaV0tPnR5
cGUoKTsKKysgICAgICAgICAgICBjb25zdFVuaW9uQ3VyciAgICAgICAgID0gZW1pdENvbnN0YW50
VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbkN1cnIpOworKyAgICAgICAgICAgIGlmIChpICE9
IGZpZWxkcy5zaXplKCkgLSAxKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91
dCA8PCAiLCAiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIG1PdXQgPDwg
In0iOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgc2l6ZV90IHNpemUgICAg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKKysgICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+
IDE7CisrICAgICAgICBpZiAod3JpdGVUeXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEVt
aXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmlne251bGxwdHJ9OworKyAgICAgICAg
ICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZpZyk7CisrICAgICAgICAgICAgbU91dCA8PCAiKCI7Cisr
ICAgICAgICB9CisrICAgICAgICBjb25zdFVuaW9uQ3VyciA9IGVtaXRDb25zdGFudFVuaW9uQXJy
YXkoY29uc3RVbmlvbkN1cnIsIHNpemUpOworKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIpIjsKKysgICAgICAgIH0KKysgICAgfQorKyAg
ICByZXR1cm4gY29uc3RVbmlvbkN1cnI7CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RWYWx1ZU5vZGUp
CisreworKyAgICBlbWl0Q29uc3RhbnRVbmlvbihjb25zdFZhbHVlTm9kZS0+Z2V0VHlwZSgpLCBj
b25zdFZhbHVlTm9kZS0+Z2V0Q29uc3RhbnRWYWx1ZSgpKTsKKyt9CisrCisrYm9vbCBHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqc3dpenpsZU5v
ZGUpCisreworKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkp
OworKyAgICBtT3V0IDw8ICIuIjsKKysKKysgICAgeworKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJM
RV9BU1NFUlRTKQorKyAgICAgICAgRGVidWdTaW5rOjpFc2NhcGVkU2luayBlc2NhcGVkT3V0KG1P
dXQuZXNjYXBlKCkpOworKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5n
ZXQoKTsKKysjZWxzZQorKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ICAgICAgICA9IG1PdXQ7
CisrI2VuZGlmCisrICAgICAgICBzd2l6emxlTm9kZS0+d3JpdGVPZmZzZXRzQXNYWVpXKCZvdXQp
OworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrY29uc3QgVEZpZWxkICZH
ZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEZpZWxkTGlzdENvbGxlY3Rp
b24gJmZpZWxkTGlzdENvbGxlY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmluZGV4KQorK3sKKysgICAg
QVNTRVJUKGluZGV4LmdldFR5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRJbnQpOworKworKyAgICBj
b25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBmaWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygp
OworKyAgICBjb25zdCBpbnQgaW5kZXhWYWwgICAgICAgICAgPSBpbmRleC5nZXRJQ29uc3QoKTsK
KysgICAgY29uc3QgVEZpZWxkICZmaWVsZCAgICAgICAgID0gKmZpZWxkTGlzdFtpbmRleFZhbF07
CisrCisrICAgIHJldHVybiBmaWVsZDsKKyt9CisrCisrY29uc3QgVEZpZWxkICZHZW5NZXRhbFRy
YXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEludGVybVR5cGVkICZmaWVsZHNOb2RlLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCAmaW5kZXhOb2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZpZWxkc1R5cGUgPSBmaWVs
ZHNOb2RlLmdldFR5cGUoKTsKKysKKysgICAgY29uc3QgVEZpZWxkTGlzdENvbGxlY3Rpb24gKmZp
ZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgpOworKyAgICBpZiAoZmll
bGRMaXN0Q29sbGVjdGlvbiA9PSBudWxscHRyKQorKyAgICB7CisrICAgICAgICBmaWVsZExpc3RD
b2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpOworKyAgICB9CisrICAg
IEFTU0VSVChmaWVsZExpc3RDb2xsZWN0aW9uKTsKKysKKysgICAgY29uc3QgVEludGVybUNvbnN0
YW50VW5pb24gKmluZGV4Tm9kZV8gPSBpbmRleE5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCk7Cisr
ICAgIEFTU0VSVChpbmRleE5vZGVfKTsKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmluZGV4
ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKysKKysgICAgcmV0dXJuIGdldERp
cmVjdEZpZWxkKCpmaWVsZExpc3RDb2xsZWN0aW9uLCBpbmRleCk7CisrfQorKworK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlO
b2RlKQorK3sKKysgICAgY29uc3QgVE9wZXJhdG9yIG9wICAgICAgPSBiaW5hcnlOb2RlLT5nZXRP
cCgpOworKyAgICBUSW50ZXJtVHlwZWQgJmxlZnROb2RlICA9ICpiaW5hcnlOb2RlLT5nZXRMZWZ0
KCk7CisrICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJpZ2h0
KCk7CisrCisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdEludGVyZmFjZUJsb2NrOgorKyAgICAgICAgeworKyAgICAgICAgICAgIGdyb3VwZWRU
cmF2ZXJzZShsZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAiLiI7CisrICAgICAgICAg
ICAgZW1pdE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisrICAg
ICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0Ogor
KyAgICAgICAgeworKyAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisrICAg
ICAgICAgICAgbU91dCA8PCAiWyI7CisrICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRo
aXMpOworKyAgICAgICAgICAgIG1PdXQgPDwgIl0iOworKyAgICAgICAgfQorKyAgICAgICAgYnJl
YWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlwZSgpOworKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gbGVmdE5vZGUuZ2V0VHlwZSgpOworKyAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gcmlnaHROb2RlLmdldFR5cGUoKTsKKysKKysg
ICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXN1bHRUeXBlLCAmbGVmdFR5
cGUsICZyaWdodFR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZ3JvdXBl
ZFRyYXZlcnNlKGxlZnROb2RlKTsKKysgICAgICAgICAgICAgICAgaWYgKG9wICE9IFRPcGVyYXRv
cjo6RU9wQ29tbWEpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIG1P
dXQgPDwgIiAiOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG1PdXQgPDwg
R2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkg
PDwgIiAiOworKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKysg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgJmxlZnRU
eXBlLCAmcmlnaHRUeXBlKSA8PCAiKCI7CisrICAgICAgICAgICAgICAgIGxlZnROb2RlLnRyYXZl
cnNlKHRoaXMpOworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisrICAgICAgICAgICAg
ICAgIHJpZ2h0Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAi
KSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBm
YWxzZTsKKyt9CisrCisrc3RhdGljIGJvb2wgSXNQb3N0Zml4KFRPcGVyYXRvciBvcCkKKyt7Cisr
ICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0
SW5jcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3REZWNyZW1lbnQ6Cisr
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIEdlbk1ldGFsVHJhdmVyc2Vy
Ojp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKKyt7CisrICAgIGNv
bnN0IFRPcGVyYXRvciBvcCAgICAgID0gdW5hcnlOb2RlLT5nZXRPcCgpOworKyAgICBjb25zdCBU
VHlwZSAmcmVzdWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworKworKyAgICBUSW50ZXJt
VHlwZWQgJmFyZyAgICA9ICp1bmFyeU5vZGUtPmdldE9wZXJhbmQoKTsKKysgICAgY29uc3QgVFR5
cGUgJmFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKworKyAgICBjb25zdCBjaGFyICpuYW1lID0g
R2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBlKTsKKysKKysgICAgaWYg
KElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmFyZ1R5cGUpKQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBib29sIHBvc3RmaXggPSBJc1Bvc3RmaXgob3ApOworKyAgICAgICAgaWYg
KCFwb3N0Zml4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKysgICAg
ICAgIH0KKysgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShhcmcpOworKyAgICAgICAgaWYgKHBvc3Rm
aXgpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBuYW1lOworKyAgICAgICAgfQor
KyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8PCBuYW1lIDw8ICIoIjsK
KysgICAgICAgIGFyZy50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIG1PdXQgPDwgIikiOworKyAg
ICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29uZGl0aW9uYWxOb2RlKQor
K3sKKysgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25hbE5vZGUtPmdldENvbmRpdGlvbigp
KTsKKysgICAgbU91dCA8PCAiID8gIjsKKysgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25h
bE5vZGUtPmdldFRydWVFeHByZXNzaW9uKCkpOworKyAgICBtT3V0IDw8ICIgOiAiOworKyAgICBn
cm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHByZXNzaW9uKCkpOwor
KworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICppZlRoZW5FbHNlTm9kZSkKKyt7CisrICAg
IFRJbnRlcm1UeXBlZCAmY29uZE5vZGUgPSAqaWZUaGVuRWxzZU5vZGUtPmdldENvbmRpdGlvbigp
OworKyAgICBUSW50ZXJtQmxvY2sgKnRoZW5Ob2RlID0gaWZUaGVuRWxzZU5vZGUtPmdldFRydWVC
bG9jaygpOworKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUtPmdl
dEZhbHNlQmxvY2soKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIG1PdXQgPDwg
ImlmICgiOworKyAgICBjb25kTm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgbU91dCA8PCAiKSI7
CisrCisrICAgIGlmICh0aGVuTm9kZSkKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiXG4iOwor
KyAgICAgICAgdGhlbk5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICB9CisrICAgIGVsc2UKKysg
ICAgeworKyAgICAgICAgbU91dCA8PCAiIHt9IjsKKysgICAgfQorKworKyAgICBpZiAoZWxzZU5v
ZGUpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIlxuIjsKKysgICAgICAgIGVtaXRJbmRlbnRh
dGlvbigpOworKyAgICAgICAgbU91dCA8PCAiZWxzZVxuIjsKKysgICAgICAgIGVsc2VOb2RlLT50
cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIC8vIEFs
d2F5cyBlbWl0ICJlbHNlIiBldmVuIHdoZW4gZW1wdHkgYmxvY2sgdG8gYXZvaWQgbmVzdGVkIGlm
LXN0bXQgaXNzdWVzLgorKyAgICAgICAgbU91dCA8PCAiIGVsc2Uge30iOworKyAgICB9CisrCisr
ICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRT
d2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5vZGUpCisreworKyAgICBlbWl0SW5k
ZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAic3dpdGNoICgiOworKyAgICBzd2l0Y2hOb2RlLT5n
ZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworKyAgICBtT3V0IDw8ICIpXG4iOworKworKyAgICBB
U1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrICAgIG1QYXJlbnRJc1N3aXRjaCA9IHRydWU7Cisr
ICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVyc2UodGhpcyk7CisrICAg
IG1QYXJlbnRJc1N3aXRjaCA9IGZhbHNlOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKwor
K2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKmNh
c2VOb2RlKQorK3sKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrCisrICAgIGlmIChjYXNlTm9k
ZS0+aGFzQ29uZGl0aW9uKCkpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZEV4
cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgICAgICBtT3V0IDw8ICJjYXNlICI7
CisrICAgICAgICBjb25kRXhwci0+dHJhdmVyc2UodGhpcyk7CisrICAgICAgICBtT3V0IDw8ICI6
IjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgImRlZmF1bHQ6
XG4iOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrdm9pZCBHZW5NZXRh
bFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykK
Kyt7CisrICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKysKKysgICAgZW1p
dEZ1bmN0aW9uUmV0dXJuKGZ1bmMpOworKworKyAgICBtT3V0IDw8ICIgIjsKKysgICAgZW1pdE5h
bWVPZihmdW5jKTsKKysgICAgaWYgKGlzTWFpbikKKysgICAgeworKyAgICAgICAgbU91dCA8PCAi
MCI7CisrICAgIH0KKysgICAgbU91dCA8PCAiKCI7CisrCisrICAgIGJvb2wgZW1pdENvbW1hICAg
ICAgICAgID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuYy5nZXRQ
YXJhbUNvdW50KCk7CisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytp
KQorKyAgICB7CisrICAgICAgICBpZiAoZW1pdENvbW1hKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIG1PdXQgPDwgIiwgIjsKKysgICAgICAgIH0KKysgICAgICAgIGVtaXRDb21tYSA9IHRydWU7
CisrCisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0oaSk7
CisrICAgICAgICBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoZnVuYywgcGFyYW0pOworKyAgICB9Cisr
CisrICAgIG1PdXQgPDwgIikiOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorK3sKKysgICAgY29uc3QgYm9v
bCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKworKyAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlw
ZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworKyAgICBpZiAoaXNNYWluKQorKyAgICB7CisrICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBlLmdldFN0cnVjdCgp
OworKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBudWxscHRyKTsKKysgICAgICAgIGlmICht
UGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0Lm1hdGNoZXMoKnN0cnVjdHVyZSkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgbU91dCA8PCAiZnJhZ21lbnQgIjsKKysgICAgICAgIH0KKysgICAg
ICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0cnVjdHVy
ZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAidmVydGV4ICI7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgVE9ETygpOworKyAg
ICAgICAgfQorKyAgICB9CisrICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmln
KCkpOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0
ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQorK3sKKysg
ICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKworKyAgICBjb25zdCBUVHlw
ZSAmdHlwZSAgICAgICAgICAgPSBwYXJhbS5nZXRUeXBlKCk7CisrICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisrCisrICAgIEVtaXRWYXJpYWJsZURl
Y2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysgICAgZXZkQ29uZmlnLmlzUGFyYW1ldGVyICAg
ICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOwor
KyAgICBldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIgPSBpc01haW47CisrICAgIGV2ZENvbmZp
Zy5pc1BvaW50ZXIgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKHBhcmFtKTsKKysgICAg
ZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAgICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJh
bSk7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2wocGFyYW0pLCBldmRDb25m
aWcpOworKworKyAgICBpZiAoaXNNYWluKQorKyAgICB7CisrICAgICAgICBUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0KKysgICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigp
OworKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
bVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNoZXMoKnN0cnVjdHVyZSkgfHwKKysgICAg
ICAgICAgICAgICAgbVBpcGVsaW5lU3RydWN0cy52ZXJ0ZXhJbi5tYXRjaGVzKCpzdHJ1Y3R1cmUp
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbc3RhZ2VfaW5d
XSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVj
dHMuYW5nbGVVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbYnVmZmVyKCIgPDwgcng6Om10bDo6a0RyaXZlclVu
aWZvcm1zQmluZGluZ0luZGV4IDw8ICIpXV0iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1
cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbYnVmZmVy
KCIgPDwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPDwgIildXSI7CisrICAgICAgICAgICAgICAg
IHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFtLm5hbWUoKS5kYXRhKCks
IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKysgICAgICAgICAgICAgICAgbU1haW5Vbmlmb3Jt
QnVmZmVySW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgpID09ICJtZXRhbDo6c2Ft
cGxlciIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tzYW1w
bGVyKCIgPDwgKG1NYWluU2FtcGxlckluZGV4KSA8PCAiKV1dIjsKKysgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKysgICAgICAgICAgICAgICAgICAgIHJl
ZmxlY3Rpb24tPmdldE9yaWdpbmFsTmFtZShwYXJhbS51bmlxdWVJZCgpLmdldCgpKTsKKysgICAg
ICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkU2FtcGxlckJpbmRpbmcob3JpZ2luYWxOYW1lLCBt
TWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgICAgIG1NYWluU2FtcGxlckluZGV4ICs9
IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1t0ZXh0dXJlKCIgPDwgKG1NYWluVGV4dHVy
ZUluZGV4KSA8PCAiKV1dIjsKKysgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnaW5h
bE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5nZXQo
KSk7CisrICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkVGV4dHVyZUJpbmRpbmcob3JpZ2luYWxO
YW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgbU1haW5UZXh0dXJlSW5kZXgg
Kz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNl
IGlmIChOYW1lKHBhcmFtKSA9PSBQaXBlbGluZXtQaXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCwg
bnVsbHB0cn0uZ2V0U3RydWN0SW5zdGFuY2VOYW1lKAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgbU91dCA8PCAiIFtbaW5zdGFuY2VfaWRdXSI7CisrICAgICAgICB9CisrICAg
IH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlw
ZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCisreworKyAgICBjb25z
dCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysg
ICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNpZ25hdHVyZShmdW5jKTsK
Kyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRlZmluaXRpb24o
VmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKQorK3sKKysgICAg
Y29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworKyAg
ICBUSW50ZXJtQmxvY2sgJmJvZHkgICAgPSAqZnVuY0RlZk5vZGUtPmdldEJvZHkoKTsKKysKKysg
ICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNpZ25hdHVyZShmdW5jKTsK
KysgICAgbU91dCA8PCAiXG4iOworKyAgICBib2R5LnRyYXZlcnNlKHRoaXMpOworKworKyAgICBy
ZXR1cm4gZmFsc2U7CisrfQorKworK0dlbk1ldGFsVHJhdmVyc2VyOjpGdW5jVG9OYW1lIEdlbk1l
dGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorK3sKKysgICAgRnVuY1RvTmFtZSBtYXA7
CisrCisrICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3QgY2hhciAqbmFtZVN0cikgeworKyAg
ICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIG5hbWUobmFtZVN0cik7CisrICAgICAgICBBU1NF
UlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKysgICAgICAgIG1hcFtuYW1lXSA9IE5h
bWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisrICAgIH07CisrCisrICAg
IHB1dEFuZ2xlKCJ0ZXhlbEZldGNoIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXhlbEZldGNoT2Zmc2V0
Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMUQi
KTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUxRExvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVy
ZTFEUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEIik7CisrICAgIHB1dEFuZ2xl
KCJ0ZXh0dXJlMkRMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oiKTsKKysgICAg
cHV0QW5nbGUoInRleHR1cmUyRFByb2pMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUzRCIp
OworKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJl
M0RQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZSIpOworKyAgICBwdXRBbmds
ZSgidGV4dHVyZUN1YmVMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVDdWJlUHJvakxvZCIp
OworKyAgICBwdXRBbmdsZSgidGV4dHVyZUdyYWQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVH
cmFkT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kIik7CisrICAgIHB1dEFuZ2xl
KCJ0ZXh0dXJlTG9kT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7Cisr
ICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvaiIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pH
cmFkIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKysgICAgcHV0
QW5nbGUoInRleHR1cmVQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakxvZE9m
ZnNldCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKysgICAgcHV0QW5n
bGUoInRleHR1cmVTaXplIik7CisrCisrICAgIHJldHVybiBtYXA7CisrfQorKworK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICph
Z2dyZWdhdGVOb2RlKQorK3sKKysgICAgY29uc3QgVEludGVybVNlcXVlbmNlICZhcmdzID0gKmFn
Z3JlZ2F0ZU5vZGUtPmdldFNlcXVlbmNlKCk7CisrCisrICAgIGF1dG8gZW1pdEFyZ0xpc3QgPSBb
Jl0oY29uc3QgY2hhciAqb3BlbiwgY29uc3QgY2hhciAqY2xvc2UpIHsKKysgICAgICAgIG1PdXQg
PDwgb3BlbjsKKysKKysgICAgICAgIGJvb2wgZW1pdENvbW1hID0gZmFsc2U7CisrICAgICAgICBm
b3IgKFRJbnRlcm1Ob2RlICphcmcgOiBhcmdzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlm
IChlbWl0Q29tbWEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIs
ICI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVtaXRDb21tYSA9IHRydWU7CisrICAg
ICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIG1P
dXQgPDwgY2xvc2U7CisrICAgIH07CisrCisrICAgIGNvbnN0IFRUeXBlICZyZXRUeXBlID0gYWdn
cmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworKworKyAgICBpZiAoYWdncmVnYXRlTm9kZS0+aXNDb25z
dHJ1Y3RvcigpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIGlzU3RhbmRhbG9uZSA9IGdl
dFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBQcmV2ZW50IGNvbnN0cnVjdG9yIGZyb20gYmVp
bmcgaW50ZXJwcmV0ZWQgYXMgYSBkZWNsYXJhdGlvbiBieSB3cmFwcGluZyBpbiBwYXJlbnMuCisr
ICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGdpdmVuIHNvbWV0aGluZyBsaWtlOgor
KyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMgd2lsbCBiZSB0cmVh
dGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisrICAgICAgICAgICAg
Ly8gU28gaW5zdGVhZCBlbWl0OgorKyAgICAgICAgICAgIC8vICAgICAgKGludChzeW1ib2wpKTsK
KysgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGNvbnN0
IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKworKyAgICAgICAgaWYgKHJldFR5cGUuaXNBcnJh
eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmln
KTsKKysgICAgICAgICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlIGlmIChyZXRUeXBlLmdldFN0cnVjdCgpKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAgICAgICBlbWl0QXJnTGlz
dCgieyIsICJ9Iik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAg
ICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworKyAgICAgICAgICAgIGVtaXRB
cmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChpc1N0YW5kYWxv
bmUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiKSI7CisrICAgICAgICB9Cisr
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAg
ICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBhZ2dyZWdhdGVOb2RlLT5nZXRPcCgpOworKyAgICAg
ICAgc3dpdGNoIChvcCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENh
bGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUtPmdldEZ1bmN0aW9uKCk7Cisr
ICAgICAgICAgICAgICAgIGVtaXROYW1lT2YoZnVuYyk7CisrICAgICAgICAgICAgICAgIGVtaXRB
cmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAg
ICAgICAgIH0KKysKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5G
dW5jdGlvbjoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmZnVuYyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgICAg
ICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5kKGZ1bmMubmFtZSgpKTsK
KysgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1GdW5jVG9OYW1lLmVuZCgpKTsKKysgICAg
ICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7CisrICAgICAgICAgICAgICAg
IGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVfdCBpbmRleCkgLT4g
Y29uc3QgVFR5cGUgKiB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBhcmdzLnNp
emUoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICZhcmctPmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9OworKworKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIWFyZ3MuZW1wdHkoKSk7CisrICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMCA9IGdldEFyZ1R5cGUoMCk7CisrICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisrICAgICAgICAgICAgICAgIEFTU0VS
VChhcmdUeXBlMCk7CisrCisrICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdl
dE9wZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworKworKyAg
ICAgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXRUeXBlLCBhcmdUeXBl
MCwgYXJnVHlwZTEpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGFyZ3Muc2l6ZSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZvcGVyYW5kTm9kZSA9ICphZ2dyZWdh
dGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChJc1Bvc3RmaXgob3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncm91cGVkVHJhdmVyc2Uob3BlcmFuZE5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmxlZnROb2RlICA9
ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGRO
b2RlKDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVm
dE5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8ICIgIiA8PCBvcE5h
bWUgPDwgIiAiOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uo
cmlnaHROb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKysgICAgICAgICAgICAgICAgICAgIGVtaXRBcmdM
aXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK30KKysK
Kyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKKyt7CisrICAgIEFTU0VS
VChtSW5kZW50TGV2ZWwgPj0gMCk7CisrCisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICBt
T3V0IDw8ICJ7XG4iOworKyAgICArK21JbmRlbnRMZXZlbDsKKyt9CisrCisrdm9pZCBHZW5NZXRh
bFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UoKQorK3sKKysgICAgQVNTRVJUKG1JbmRlbnRMZXZl
bCA+PSAxKTsKKysKKysgICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIGVtaXRJbmRlbnRhdGlvbigp
OworKyAgICBtT3V0IDw8ICJ9IjsKKyt9CisrCisrc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29s
b25UZXJtaW5hdG9yKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgaWYgKG5vZGUuZ2V0QXNC
bG9jaygpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYg
KG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc0lmRWxzZU5vZGUoKSkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmIChub2RlLmdl
dEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc0Nhc2VOb2RlKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrc3RhdGlj
IGJvb2wgTmV3bGluZVBhZChUSW50ZXJtTm9kZSAmbm9kZSkKKyt7CisrICAgIGlmIChub2RlLmdl
dEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICB9CisrICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gbm9kZS5nZXRB
c0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUtPmdl
dENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2RlICZjaGlsZE5vZGUgPSAq
ZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpz
eW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KysgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOwor
KyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBm
YWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCbG9jayhWaXNpdCwg
VEludGVybUJsb2NrICpibG9ja05vZGUpCisreworKyAgICBBU1NFUlQobUluZGVudExldmVsID49
IC0xKTsKKysgICAgY29uc3QgYm9vbCBpc0dsb2JhbFNjb3BlICA9IG1JbmRlbnRMZXZlbCA9PSAt
MTsKKysgICAgY29uc3QgYm9vbCBwYXJlbnRJc1N3aXRjaCA9IG1QYXJlbnRJc1N3aXRjaDsKKysg
ICAgbVBhcmVudElzU3dpdGNoICAgICAgICAgICA9IGZhbHNlOworKworKyAgICBpZiAoaXNHbG9i
YWxTY29wZSkKKysgICAgeworKyAgICAgICAgKyttSW5kZW50TGV2ZWw7CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0T3BlbkJyYWNlKCk7CisrICAgICAgICBpZiAocGFy
ZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgKyttSW5kZW50TGV2ZWw7Cisr
ICAgICAgICB9CisrICAgIH0KKysKKysgICAgVEludGVybU5vZGUgKnByZXZTdG10Tm9kZSA9IG51
bGxwdHI7CisrCisrICAgIGNvbnN0IHNpemVfdCBzdG10Q291bnQgPSBibG9ja05vZGUtPmdldENo
aWxkQ291bnQoKTsKKysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG10Q291bnQ7ICsraSkK
KysgICAgeworKyAgICAgICAgVEludGVybU5vZGUgJnN0bXROb2RlID0gKmJsb2NrTm9kZS0+Z2V0
Q2hpbGROb2RlKGkpOworKworKyAgICAgICAgaWYgKGlzR2xvYmFsU2NvcGUgJiYgcHJldlN0bXRO
b2RlICYmIChOZXdsaW5lUGFkKCpwcmV2U3RtdE5vZGUpIHx8IE5ld2xpbmVQYWQoc3RtdE5vZGUp
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICJcbiI7CisrICAgICAgICB9Cisr
ICAgICAgICBjb25zdCBib29sIGlzQ2FzZSA9IHN0bXROb2RlLmdldEFzQ2FzZU5vZGUoKTsKKysg
ICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisrICAgICAgICBlbWl0SW5kZW50YXRpb24o
KTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCArPSBpc0Nhc2U7CisrICAgICAgICBzdG10Tm9kZS50
cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIGlmIChSZXF1aXJlc1NlbWljb2xvblRlcm1pbmF0b3Io
c3RtdE5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgIjsiOworKyAgICAg
ICAgfQorKyAgICAgICAgbU91dCA8PCAiXG4iOworKworKyAgICAgICAgcHJldlN0bXROb2RlID0g
JnN0bXROb2RlOworKyAgICB9CisrCisrICAgIGlmIChpc0dsb2JhbFNjb3BlKQorKyAgICB7Cisr
ICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworKyAgICAgICAgLS1tSW5kZW50TGV2
ZWw7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBpZiAocGFyZW50SXNTd2l0
Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAxKTsK
KysgICAgICAgICAgICAtLW1JbmRlbnRMZXZlbDsKKysgICAgICAgIH0KKysgICAgICAgIGVtaXRD
bG9zZUJyYWNlKCk7CisrICAgICAgICBtUGFyZW50SXNTd2l0Y2ggPSBwYXJlbnRJc1N3aXRjaDsK
KysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1HbG9i
YWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKQorK3sKKysgICAgTE9HSUNfRVJST1IoKTsgIC8vIFJl
d3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUg
dGhpcy4KKysgICAgcmV0dXJuIGZhbHNlOworK30KKysKKytib29sIEdlbk1ldGFsVHJhdmVyc2Vy
Ojp2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlKQor
K3sKKysgICAgQVNTRVJUKGRlY2xOb2RlLT5nZXRDaGlsZENvdW50KCkgPT0gMSk7CisrICAgIFRJ
bnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrCisrICAgIEVt
aXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysKKysgICAgaWYgKFRJbnRl
cm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7Cisr
ICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2ZENvbmZpZyk7
CisrICAgIH0KKysgICAgZWxzZSBpZiAoVEludGVybUJpbmFyeSAqaW5pdE5vZGUgPSBub2RlLmdl
dEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9w
KCkgPT0gVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKysgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKysg
ICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9kZS0+Z2V0UmlnaHQoKS0+
Z2V0QXNUeXBlZCgpOworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUgJiYgdmFsdWVOb2RlKTsK
KysKKysgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVudEJsb2NrKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXplcnMgc2hvdWxkIGhh
dmUgdHVybmVkIG5vbi1jb25zdCBnbG9iYWwgaW5pdGlhbGl6ZXJzIGludG8KKysgICAgICAgICAg
ICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJpYWJsZXMgbWFya2VkIGFz
IEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworKyAgICAgICAgICAgIC8vIEV2cUNvbnN0IGlu
IHNvbWUgQU5HTEUgY29kZSBidXQgbm90IGFjdHVhbGx5IGhhdmUgdGhlaXIgcXVhbGlmaWVyIGFj
dHVhbGx5IGNoYW5nZWQgdG8KKysgICAgICAgICAgICAvLyBFdnFDb25zdC4gVGh1cyBqdXN0IGFz
c3VtZSBhbGwgRXZxR2xvYmFsIGFyZSBhY3R1YWxseSBFdnFDb25zdCBmb3IgYWxsIGNvZGUgcnVu
IGFmdGVyCisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuCisrICAgICAg
ICAgICAgbU91dCA8PCAiY29uc3RhbnQgIjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKysgICAgICAgIGNvbnN0
IE5hbWUgdmFyTmFtZSh2YXIpOworKworKyAgICAgICAgaWYgKEV4cHJlc3Npb25Db250YWluc05h
bWUodmFyTmFtZSwgKnZhbHVlTm9kZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbVJlbmFt
ZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisrICAgICAg
ICB9CisrCisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2
ZENvbmZpZyk7CisrICAgICAgICBtT3V0IDw8ICIgPSAiOworKyAgICAgICAgZ3JvdXBlZFRyYXZl
cnNlKCp2YWx1ZU5vZGUpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgTE9H
SUNfRVJST1IoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wg
R2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2Rl
KQorK3sKKysgICAgY29uc3QgVExvb3BUeXBlIGxvb3BUeXBlID0gbG9vcE5vZGUtPmdldFR5cGUo
KTsKKysKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUTG9v
cFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZvckxvb3AobG9vcE5v
ZGUpOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisrICAgICAgICAgICAg
cmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BOb2RlKTsKKysgICAgICAgIGNhc2UgVExvb3BUeXBl
OjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RG9XaGlsZUxvb3AobG9v
cE5vZGUpOworKyAgICB9CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9y
TG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCisreworKyAgICBBU1NFUlQobG9vcE5vZGUtPmdl
dFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRm9yKTsKKysKKysgICAgVEludGVybU5vZGUgKmlu
aXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7CisrICAgIFRJbnRlcm1UeXBlZCAqY29uZE5v
ZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5v
ZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworKyAgICBUSW50ZXJtQmxvY2sgKmJvZHlO
b2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysgICAgQVNTRVJUKGJvZHlOb2RlKTsKKysKKysg
ICAgbU91dCA8PCAiZm9yICgiOworKworKyAgICBpZiAoaW5pdE5vZGUpCisrICAgIHsKKysgICAg
ICAgIGluaXROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICB9CisrCisrICAgIG1PdXQgPDwgIjsgIjsKKysK
KysgICAgaWYgKGNvbmROb2RlKQorKyAgICB7CisrICAgICAgICBjb25kTm9kZS0+dHJhdmVyc2Uo
dGhpcyk7CisrICAgIH0KKysKKysgICAgbU91dCA8PCAiOyAiOworKworKyAgICBpZiAoZXhwck5v
ZGUpCisrICAgIHsKKysgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQor
KworKyAgICBtT3V0IDw8ICIpXG4iOworKworKyAgICBib2R5Tm9kZS0+dHJhdmVyc2UodGhpcyk7
CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6
dmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgQVNTRVJUKGxv
b3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcFdoaWxlKTsKKysKKysgICAgVElu
dGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7CisrICAgIFRJbnRlcm1U
eXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgIFRJbnRlcm1U
eXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworKyAgICBUSW50ZXJt
QmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysgICAgQVNTRVJUKGNvbmRO
b2RlICYmIGJvZHlOb2RlKTsKKysgICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOwor
KworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAid2hpbGUgKCI7CisrICAg
IGNvbmROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgbU91dCA8PCAiKVxuIjsKKysgICAgYm9k
eU5vZGUtPnRyYXZlcnNlKHRoaXMpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0RG9XaGlsZUxvb3AoVEludGVybUxvb3AgKmxvb3BO
b2RlKQorK3sKKysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpF
TG9vcERvV2hpbGUpOworKworKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUt
PmdldEluaXQoKTsKKysgICAgVEludGVybVR5cGVkICpjb25kTm9kZSA9IGxvb3BOb2RlLT5nZXRD
b25kaXRpb24oKTsKKysgICAgVEludGVybVR5cGVkICpleHByTm9kZSA9IGxvb3BOb2RlLT5nZXRF
eHByZXNzaW9uKCk7CisrICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0
Qm9keSgpOworKyAgICBBU1NFUlQoY29uZE5vZGUgJiYgYm9keU5vZGUpOworKyAgICBBU1NFUlQo
IWluaXROb2RlICYmICFleHByTm9kZSk7CisrCisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAg
ICBtT3V0IDw8ICJkb1xuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICBt
T3V0IDw8ICJcbiI7CisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJ3aGls
ZSAoIjsKKysgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICBtT3V0IDw8ICIpOyI7
CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6
dmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5vZGUpCisreworKyAgICBj
b25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisrICAgIFRJ
bnRlcm1UeXBlZCAqZXhwck5vZGUgPSBicmFuY2hOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisrCisr
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKworKyAgICBzd2l0Y2ggKGZsb3dPcCkKKysgICAgewor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6CisrICAgICAgICB7CisrICAgICAgICAg
ICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOworKyAgICAgICAgICAgIG1PdXQgPDwgIm1l
dGFsOjpkaXNjYXJkX2ZyYWdtZW50KCkiOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorKyAgICAgICAgeworKyAgICAg
ICAgICAgIG1PdXQgPDwgInJldHVybiI7CisrICAgICAgICAgICAgaWYgKGV4cHJOb2RlKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisrICAgICAgICAgICAg
ICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9
CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoK
KysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7Cisr
ICAgICAgICAgICAgbU91dCA8PCAiYnJlYWsiOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6CisrICAgICAgICB7Cisr
ICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOworKyAgICAgICAgICAgIG1P
dXQgPDwgImNvbnRpbnVlIjsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAg
ICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIHNp
emVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworKworK2Jvb2wgc2g6OkVtaXRNZXRhbChUQ29t
cGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAg
Y29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgIFN5
bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtUHJl
bHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gY29tcGlsZXIu
Z2V0SW5mb1NpbmsoKS5vYmo7CisrCisrICAgIHsKKysgICAgICAgICsrZW1pdE1ldGFsQ2FsbENv
dW50OworKyAgICAgICAgYXV0byBmaWxlbmFtZVByb3RvID0gcmVhZFN0cmluZ0VudlZhcigiR01E
X0ZJWEVEX0VNSVQiKTsKKysgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChmaWxlbmFtZVByb3RvICE9ICIvZGV2L251bGwiKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byB0cnlPcGVuID0gWyZdKGNoYXIg
Y29uc3QgKmV4dCkgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVu
YW1lUHJvdG87CisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmlu
ZyhlbWl0TWV0YWxDYWxsQ291bnQpOworKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0g
Ii4iOworKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gZXh0OworKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworKyAgICAgICAg
ICAgICAgICB9OworKyAgICAgICAgICAgICAgICBGSUxFICpmaWxlID0gdHJ5T3BlbigibWV0YWwi
KTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWxlKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBmaWxlID0gdHJ5T3BlbigiY3BwIik7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKGZpbGUpOworKworKyAgICAgICAgICAgICAgICBm
c2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisrICAgICAgICAgICAgICAgIHNpemVfdCBmaWxlU2l6
ZSA9IGZ0ZWxsKGZpbGUpOworKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX1NF
VCk7CisrCisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ1ZmY7CisrICAgICAg
ICAgICAgICAgIGJ1ZmYucmVzaXplKGZpbGVTaXplICsgMSk7CisrICAgICAgICAgICAgICAgIGZy
ZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7CisrICAgICAgICAgICAgICAgIGJ1
ZmYuYmFjaygpID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgZmNsb3NlKGZpbGUpOworKwor
KyAgICAgICAgICAgICAgICBvdXQgPDwgYnVmZi5kYXRhKCk7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIG91
dCA8PCAiXG5cbiI7CisrCisrICAgIGlmICghRW1pdFByb2dyYW1QcmVsdWRlKHJvb3QsIG91dCwg
cHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHsK
KysjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAgICAgIERlYnVnU2luayBv
dXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisrICAgICAgICBv
dXRXcmFwcGVyLndhdGNoKHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9XQVRDSF9TVFJJTkciKSk7Cisr
I2Vsc2UKKysgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisrI2VuZGlm
CisrICAgICAgICBHZW5NZXRhbFRyYXZlcnNlciBnZW4oY29tcGlsZXIsIG91dFdyYXBwZXIsIGlk
R2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVudik7CisrICAgICAgICBy
b290LnRyYXZlcnNlKCZnZW4pOworKyAgICB9CisrCisrICAgIG91dCA8PCAiXG4iOworKworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uZDQ4YWY5YQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oCitAQCAtMCww
ICsxLDMyIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworKworKyNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysv
LyBXYWxrcyB0aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBFbWl0TWV0YWwoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1ZGVDb25maWcgJnBwYyk7
CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJp
YWJsZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vu
dmlyb25tZW50VmFyaWFibGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LmQ4MjNmYzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgKK0BAIC0wLDAgKzEsNDUg
QEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKysjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8K
KysKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8c3RyaW5nPgorKworKyNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisraW5saW5lIGJvb2wg
cmVhZEJvb2xFbnZWYXIoY29uc3QgY2hhciAqdmFyKQorK3sKKysgICAgY29uc3QgY2hhciAqc3Ry
ID0gc3RkOjpnZXRlbnYodmFyKTsKKysgICAgaWYgKHN0ciA9PSBudWxscHRyKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKHN0cmNtcChzdHIsICIwIikg
PT0gMCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIEFTU0VS
VChzdHJjbXAoc3RyLCAiMSIpID09IDApOworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisraW5s
aW5lIHN0ZDo6c3RyaW5nIHJlYWRTdHJpbmdFbnZWYXIoY29uc3QgY2hhciAqdmFyKQorK3sKKysg
ICAgY29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysgICAgaWYgKHN0ciA9PSBu
dWxscHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gIiI7CisrICAgIH0KKysgICAgcmV0dXJu
IHN0cjsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9OTUVOVFZBUklBQkxFX0hf
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5jZTljMDNlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuY3BwCitAQCAt
MCwwICsxLDk2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5
b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ZpbmRGdW5j
dGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxh
Y2VWYXJpYWJsZS5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBSZXdyaXRlciA6IHByaXZh
dGUgVEludGVybVJlYnVpbGQKKyt7CisrICBwcml2YXRlOgorKyAgICBjb25zdCBzaXplX3QgbU1p
blJlcXVpcmVkU2l6ZTsKKysgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVzOwor
KworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3Qg
bWluUmVxdWlyZWRTaXplKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1
ZSwgZmFsc2UpLCBtTWluUmVxdWlyZWRTaXplKG1pblJlcXVpcmVkU2l6ZSkKKysgICAge30KKysK
KysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZk
ZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9u
KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgRGVjbGFyYXRpb24gZGVjbCAgPSBWaWV3RGVj
bGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVj
bC5zeW1ib2wuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmICh0eXBlLmdldFF1YWxpZmllcigp
ID09IFRRdWFsaWZpZXI6OkV2cUNvbnN0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaWYgKGRlY2wuaW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
c2l6ZSA9IE1ldGFsTGF5b3V0T2YodHlwZSkuc2l6ZU9mOworKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNpemUgPj0gbU1pblJlcXVpcmVkU2l6ZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgICAgICAgICBtSG9pc3RlZERlY2xOb2Rlcy5wdXNoX2JhY2soJmRlY2xO
b2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07Cisr
ICAgIH0KKysKKysgICAgYm9vbCByZXdyaXRlKFRJbnRlcm1CbG9jayAmcm9vdCwgSWRHZW4gJmlk
R2VuKQorKyAgICB7CisrICAgICAgICBpZiAoIXJlYnVpbGRSb290KHJvb3QpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlm
IChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVz
KEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KCZyb290KSwgbUhvaXN0ZWREZWNsTm9k
ZXMpOworKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqb3BhcXVlRGVjbE5vZGUgOiBtSG9p
c3RlZERlY2xOb2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFyYXRpb25Ob2RlKCk7Cisr
ICAgICAgICAgICAgQVNTRVJUKGRlY2xOb2RlKTsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJm9sZFZhciA9IFZpZXdEZWNsYXJhdGlvbigqZGVjbE5vZGUpLnN5bWJvbC52YXJpYWJsZSgp
OworKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRHZW4uY3JlYXRlTmV3
TmFtZShvbGRWYXIubmFtZSgpKTsKKysgICAgICAgICAgICBhdXRvICpuZXdWYXIgPSBuZXcgVFZh
cmlhYmxlKCZtU3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCAmb2xkVmFyLmdldFR5cGUo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05hbWUuc3lt
Ym9sVHlwZSgpKTsKKysgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmbUNvbXBpbGVy
LCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9vbCBzaDo6SG9pc3RDb25zdGFu
dHMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
QmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5SZXF1aXJlZFNpemUpCisreworKyAgICBy
ZXR1cm4gUmV3cml0ZXIoY29tcGlsZXIsIG1pblJlcXVpcmVkU2l6ZSkucmV3cml0ZShyb290LCBp
ZEdlbik7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmgKK25ldyBmaWxlIG1vZGUgMTAw
NjQ0CitpbmRleCAwMDAwMDAwLi4wMzA2YTVlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaAor
QEAgLTAsMCArMSwyNiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKysjZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hPSVNUQ09OU1RBTlRT
X0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7Cisr
CisrLy8gSG9pc3RzIGZ1bmN0aW9uLWxvY2FsIGNvbnN0YW50cyB0byB0aGUgZ2xvYmFsIHNjb3Bl
IGlmIHRoZWlyIE1ldGFsIHNpemVvZiBtZWV0cworKy8vIGBtaW5SZXF1aXJlZFNpemVgLgorK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6
ZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5UU19IXworZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5j
cHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
Y3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODRhZWQ2YgorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmNwcAorQEAgLTAsMCArMSw5NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNs
dWRlIDxjY3R5cGU+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGxpbWl0cz4KKysj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZUtleXdvcmRzLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisrCisrSWRHZW46OklkR2VuKCkge30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
U3RyaW5nLCB0eXBlbmFtZSBTdHJpbmdUb0ltbXV0YWJsZT4KKytOYW1lIElkR2VuOjpjcmVhdGVO
ZXdOYW1lKHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyAqYmFzZU5hbWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
VG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKQorK3sKKysgICAgY29uc3QgdW5zaWduZWQgaWQgPSBt
TmV4dCsrOworKyAgICBjaGFyIGlkQnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjpkaWdpdHMxMCArIDFdOworKyAgICBzcHJpbnRmKGlkQnVmZmVyLCAiJXUiLCBpZCk7CisrCisr
ICAgIG1OZXdOYW1lQnVmZmVyLmNsZWFyKCk7CisrICAgIG1OZXdOYW1lQnVmZmVyICs9ICdfJzsK
KysgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisrCisrICAgIC8vIE5vdGU6CisrICAg
IC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGluIEMrKyAoYW5kIHRodXMg
TWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorKyAgICAvLyB0YWtlIGNhcmUg
bm90IHRvIGludHJvZHVjZSBhbnkuCisrCisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIGJhc2VOYW1l
ID0gdG9JbW11dGFibGUoYmFzZU5hbWVzW2ldKTsKKysgICAgICAgIGlmICghYmFzZU5hbWUuZW1w
dHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBjaGFyICpiYXNlID0gYmFzZU5h
bWUuZGF0YSgpOworKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNXaXRoKGtBbmdsZUlu
dGVybmFsUHJlZml4KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGJhc2UgKz0g
c2l6ZW9mKGtBbmdsZUludGVybmFsUHJlZml4KSAtIDE7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGlmICgqYmFzZSA9PSAnXycpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICArK2Jhc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEFTU0VSVCgqYmFzZSAhPSAn
XycpOworKworKyAgICAgICAgICAgIGlmIChtTmV3TmFtZUJ1ZmZlci5iYWNrKCkgIT0gJ18nKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOwor
KyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBOYW1lKEltbXV0YWJsZVN0cmluZyht
TmV3TmFtZUJ1ZmZlciksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworK30KKysKKytOYW1l
IElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmYmFzZU5hbWUpCisr
eworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKKyt9CisrCisrTmFtZSBJ
ZEdlbjo6Y3JlYXRlTmV3TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkKKyt7CisrICAgIHJldHVy
biBjcmVhdGVOZXdOYW1lKGJhc2VOYW1lLnJhd05hbWUoKSk7CisrfQorKworK05hbWUgSWRHZW46
OmNyZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpCisreworKyAgICByZXR1cm4gY3Jl
YXRlTmV3TmFtZShJbW11dGFibGVTdHJpbmcoYmFzZU5hbWUpKTsKKyt9CisrCisrTmFtZSBJZEdl
bjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBi
YXNlTmFtZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgp
LCBiYXNlTmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3Qg
SW1tdXRhYmxlU3RyaW5nICZzKSB7IHJldHVybiBzOyB9KTsKKyt9CisrCisrTmFtZSBJZEdlbjo6
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKQorK3sK
KysgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNpemUoKSwgYmFzZU5hbWVzLmJl
Z2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IE5hbWUgJnMpIHsgcmV0
dXJuIHMucmF3TmFtZSgpOyB9KTsKKyt9CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhciAqPiBiYXNlTmFtZXMpCisreworKyAgICBy
ZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgY2hhciAqcykgeyByZXR1cm4gSW1t
dXRhYmxlU3RyaW5nKHMpOyB9KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLjU4MjA4OWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oCitAQCAtMCwwICsxLDQx
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTmFtZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBGb3IgY3JlYXRpbmcg
bmV3IGZyZXNoIG5hbWVzLgorKy8vIEFsbCBuYW1lcyBjcmVhdGVkIGFyZSBtYXJrZWQgYXMgU3lt
Ym9sVHlwZTo6QW5nbGVJbnRlcm5hbC4KKytjbGFzcyBJZEdlbiA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQorK3sKKysgIHB1YmxpYzoKKysgICAgSWRHZW4oKTsKKysKKysgICAgTmFtZSBjcmVhdGVOZXdO
YW1lKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5l
d05hbWUoY29uc3QgTmFtZSAmYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoY29u
c3QgY2hhciAqYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFs
aXplcl9saXN0PEltbXV0YWJsZVN0cmluZz4gYmFzZU5hbWVzKTsKKysgICAgTmFtZSBjcmVhdGVO
ZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxOYW1lPiBiYXNlTmFtZXMpOworKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4gYmFzZU5h
bWVzKTsKKysKKysgIHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5
cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoc2l6ZV90
IGNvdW50LCBjb25zdCBTdHJpbmcgKmJhc2VOYW1lcywgY29uc3QgU3RyaW5nVG9JbW11dGFibGUg
JnRvSW1tdXRhYmxlKTsKKysKKysgIHByaXZhdGU6CisrICAgIHVuc2lnbmVkIG1OZXh0ID0gMDsg
ICAgICAgICAgLy8gYHVuc2lnbmVkYCBiZWNhdXNlIG9mICIldSIgdXNlIGluIHNwcmludGYKKysg
ICAgc3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7ICAvLyByZXVzYWJsZSBidWZmZXIgdG8gYXZv
aWQgdG9ucyBvZiByZWFsbG9jYXRpb25zCisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysK
KysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0lE
R0VOX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw
MDAuLjUzNDZmNmYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCitAQCAtMCwwICsxLDQwMSBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2luY2x1ZGUgPGNjdHlwZT4K
KysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8bGltaXRzPgorKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKysKKyt1c2luZyBuYW1lc3Bh
Y2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytlbnVtIGNsYXNzIExhbmd1
YWdlCisreworKyAgICBNZXRhbCwKKysgICAgR0xTTCwKKyt9OworKworK3N0YXRpYyBzaXplX3Qg
Um91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCwgc2l6ZV90IG11bHRpcGxlKQorK3sKKysgICAg
Y29uc3Qgc2l6ZV90IHJlbSA9IHggJSBtdWx0aXBsZTsKKysgICAgcmV0dXJuIHJlbSA9PSAwID8g
eCA6IHggKyAobXVsdGlwbGUgLSByZW0pOworK30KKysKKyt2b2lkIExheW91dDo6cmVxdWlyZUFs
aWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKQorK3sKKysgICAgYWxpZ25PZiA9IHN0ZDo6
bWF4KGFsaWduT2YsIGFsaWduKTsKKysgICAgaWYgKHBhZCkKKysgICAgeworKyAgICAgICAgc2l6
ZU9mID0gUm91bmRVcFRvTXVsdGlwbGVPZihzaXplT2YsIGFsaWduKTsKKysgICAgfQorK30KKysK
Kytib29sIExheW91dDo6b3BlcmF0b3I9PShjb25zdCBMYXlvdXQgJm90aGVyKSBjb25zdAorK3sK
KysgICAgcmV0dXJuIHNpemVPZiA9PSBvdGhlci5zaXplT2YgJiYgYWxpZ25PZiA9PSBvdGhlci5h
bGlnbk9mOworK30KKysKKyt2b2lkIExheW91dDo6b3BlcmF0b3IrPShjb25zdCBMYXlvdXQgJm90
aGVyKQorK3sKKysgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGlnbk9mLCB0cnVlKTsKKysg
ICAgc2l6ZU9mICs9IG90aGVyLnNpemVPZjsKKyt9CisrCisrdm9pZCBMYXlvdXQ6Om9wZXJhdG9y
Kj0oc2l6ZV90IHNjYWxlKQorK3sKKysgICAgc2l6ZU9mICo9IHNjYWxlOworK30KKysKKytMYXlv
dXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QKKyt7CisrICAg
IGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICs9IG90aGVyOworKyAgICByZXR1cm4gc2Vs
ZjsKKyt9CisrCisrTGF5b3V0IExheW91dDo6b3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3QK
Kyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICo9IHNjYWxlOworKyAgICBy
ZXR1cm4gc2VsZjsKKyt9CisrCisrc3RhdGljIExheW91dCBTY2FsYXJMYXlvdXRPZihjb25zdCBU
VHlwZSAmdHlwZSwgTGFuZ3VhZ2UgbGFuZ3VhZ2UpCisreworKyAgICBjb25zdCBUQmFzaWNUeXBl
IGJhc2ljVHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrICAgIHN3aXRjaCAoYmFzaWNUeXBl
KQorKyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisrICAgICAgICAg
ICAgcmV0dXJuIHsxLCAxfTsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorKyAg
ICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBl
OjpFYnRGbG9hdDoKKysgICAgICAgICAgICByZXR1cm4gezQsIDR9OworKyAgICAgICAgZGVmYXVs
dDoKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhbmd1YWdlKQorKyAgICAgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgICAgICBjYXNlIExhbmd1YWdlOjpNZXRhbDoKKysgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gezgsIDh9OworKyAgICAgICAgICAgICAgICAgICAgY2FzZSBM
YW5ndWFnZTo6R0xTTDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gezQsIDR9Owor
KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIFRPRE8oKTsK
KysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CisrCisr
c3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1BhY2tlZFtdICAgPSB7MCwgMSwgMiwgMywg
NH07Cisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1VucGFja2VkW10gPSB7MCwgMSwg
MiwgNCwgNH07CisrCisrTGF5b3V0IHNoOjpNZXRhbExheW91dE9mKGNvbnN0IFRUeXBlICZ0eXBl
LCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZykKKyt7CisrICAgIEFTU0VSVCh0eXBlLmdldE5v
bWluYWxTaXplKCkgPD0gNCk7CisrICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA8
PSA0KTsKKysKKysgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlID0gdHlwZS5n
ZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3JhZ2U7CisrCisrICAgIGNvbnN0IGJvb2wgaXNQ
YWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdlID09IFRMYXlvdXRCbG9j
a1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNT
aGFyZWQpOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZpZy5tYXNrQXJyYXkp
CisrICAgIHsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSB0cnVlOworKyAgICAgICAg
Y29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmlnKTsKKysgICAg
ICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSBmYWxzZTsKKysgICAgICAgIGNvbnN0IHNpemVfdCB2
b2wgICAgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgICAgIHJldHVybiBsYXlv
dXQgKiB2b2w7CisrICAgIH0KKysKKysgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmdldE5v
bWluYWxTaXplKCkgPT0gMSk7CisrICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXpl
KCkgPT0gMSk7CisrICAgICAgICBhdXRvIGNvbmZpZzIgICAgICAgICAgICAgPSBjb25maWc7Cisr
ICAgICAgICBjb25maWcyLm1hc2tBcnJheSAgICAgICAgPSBmYWxzZTsKKysgICAgICAgIGF1dG8g
bGF5b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKysgICAgICAgIGNvbnN0
IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisrICAgICAgICBmb3Ig
KGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisrICAgICAgICB7CisrICAgICAgICAgICAg
bGF5b3V0ICs9IE1ldGFsTGF5b3V0T2YoKmZpZWxkLT50eXBlKCksIGNvbmZpZzIpOworKyAgICAg
ICAgfQorKyAgICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBzaXplX3QgcGFkID0gbGF5b3V0LnNpemVPZiAlIDE2Owor
KyAgICAgICAgICAgIGxheW91dC5zaXplT2YgKz0gcGFkOworKyAgICAgICAgfQorKyAgICAgICAg
bGF5b3V0LnNpemVPZiA9IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0LnNpemVPZiwgbGF5b3V0
LmFsaWduT2YpOworKyAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgfQorKworKyAgICBpZiAo
Y29uZmlnLnRyZWF0U2FtcGxlcnNBc1RleHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gezE2LCA4fTsgIC8vIHBvaW50ZXJ7
OCw4fSBhbmQgbWV0YWw6OnNhbXBsZXJ7OCw4fQorKyAgICB9CisrCisrICAgIGNvbnN0IExheW91
dCBzY2FsYXJMYXlvdXQgPSBTY2FsYXJMYXlvdXRPZih0eXBlLCBMYW5ndWFnZTo6TWV0YWwpOwor
KworKyAgICBpZiAodHlwZS5pc1JhbmswKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzY2Fs
YXJMYXlvdXQ7CisrICAgIH0KKysgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7
CisrICAgICAgICBpZiAoaXNQYWNrZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5vbWluYWxTaXpl
KCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0e3NjYWxhckxheW91dC5zaXpl
T2YgKiBpbm5lclNjYWxlLCBzY2FsYXJMYXlvdXQuYWxpZ25PZn07CisrICAgICAgICAgICAgcmV0
dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlw
ZS5nZXROb21pbmFsU2l6ZSgpXTsKKysgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAg
ICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisrICAg
ICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworKyAgICAgICAgQVNTRVJU
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpOworKyAgICAgICAg
Ly8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKysgICAgICAgIGNvbnN0IHNpemVfdCBpbm5lclNjYWxl
ID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldFJvd3MoKV07CisrICAgICAgICBjb25zdCBz
aXplX3Qgb3V0ZXJTY2FsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOwor
KyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6ZU9mICog
aW5uZXJTY2FsZTsKKysgICAgICAgIHJldHVybiB7biAqIG91dGVyU2NhbGUsIG59OworKyAgICB9
CisrfQorKworK1RMYXlvdXRCbG9ja1N0b3JhZ2Ugc2g6Ok92ZXJsYXkoVExheW91dEJsb2NrU3Rv
cmFnZSBvbGRTdG9yYWdlLCBjb25zdCBUVHlwZSAmdHlwZSkKKyt7CisrICAgIGNvbnN0IFRMYXlv
dXRCbG9ja1N0b3JhZ2UgbmV3U3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxv
Y2tTdG9yYWdlOworKyAgICBzd2l0Y2ggKG5ld1N0b3JhZ2UpCisrICAgIHsKKysgICAgICAgIGNh
c2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgcmV0
dXJuIG9sZFN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQgPyBr
RGVmYXVsdExheW91dEJsb2NrU3RvcmFnZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKysg
ICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CisrICAgIH0K
Kyt9CisrCisrVExheW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBh
Y2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpCisreworKyAgICBjb25zdCBUTGF5
b3V0TWF0cml4UGFja2luZyBuZXdQYWNraW5nID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5t
YXRyaXhQYWNraW5nOworKyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisrICAgIHsKKysgICAgICAg
IGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkOgorKyAgICAgICAgICAg
IHJldHVybiBvbGRQYWNraW5nID09IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmll
ZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZworKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9sZFBhY2tp
bmc7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOwor
KyAgICB9CisrfQorKworK2Jvb2wgc2g6OkNhbkJlUGFja2VkKFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSkKKyt7CisrICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisrICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAg
ICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOgorKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKysg
ICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgfQorK30KKysKKytib29sIHNoOjpDYW5CZVBhY2tlZChUTGF5b3V0UXVhbGlmaWVyIGxheW91
dFF1YWxpZmllcikKKyt7CisrICAgIHJldHVybiBDYW5CZVBhY2tlZChsYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlKTsKKyt9CisrCisrYm9vbCBzaDo6Q2FuQmVQYWNrZWQoY29uc3QgVFR5cGUg
JnR5cGUpCisreworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBDYW5CZVBhY2tlZCh0eXBlLmdldExh
eW91dFF1YWxpZmllcigpKTsKKyt9CisrCisrdm9pZCBzaDo6U2V0QmxvY2tTdG9yYWdlKFRUeXBl
ICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpCisreworKyAgICBhdXRvIHF1YWwg
ICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisrICAgIHF1YWwuYmxvY2tTdG9y
YWdlID0gc3RvcmFnZTsKKysgICAgdHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIocXVhbCk7CisrfQor
KworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKFRGaWVsZCBjb25zdCAq
Y29uc3QgKmJlZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRG
aWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0
cml4UGFja2luZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBib29sIG1hc2tBcnJheSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKKyt7CisrICAgIGNvbnN0IGJvb2wgaXNQYWNr
ZWQgPQorKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQg
fHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ7CisrCisrICAgIGF1
dG8gbGF5b3V0ID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICBmb3IgKGF1dG8gaXRlciA9IGJl
Z2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorKyAgICB7CisrICAgICAgICBsYXlvdXQgKz0gR2xz
bExheW91dE9mKCooKml0ZXIpLT50eXBlKCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNl
KTsKKysgICAgfQorKyAgICBpZiAoIWlzUGFja2VkKSAgLy8gWFhYOiBDb3JyZWN0PworKyAgICB7
CisrICAgICAgICBsYXlvdXQuc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlwbGVPZihsYXlvdXQuc2l6
ZU9mLCBsYXlvdXQuYWxpZ25PZik7CisrICAgIH0KKysgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1l
bnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisrICAgIHJldHVybiBsYXlvdXQ7CisrfQorKworK3N0
YXRpYyBMYXlvdXQgQ29tbW9uR2xzbExheW91dE9mKGNvbnN0IFRUeXBlICZ0eXBlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGJvb2wgbWFza0FycmF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHNpemVfdCBiYXNlQWxpZ25tZW50KQorK3sKKysgICAgQVNTRVJUKHN0b3JhZ2Ug
IT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworKworKyAgICBjb25zdCBi
b29sIGlzUGFja2VkID0KKysgICAgICAgIHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzUGFja2VkIHx8IHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOwor
KworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRyaXgoKSAmJiAhbWFza0Fy
cmF5KQorKyAgICB7CisrICAgICAgICBhdXRvIGxheW91dCA9IEdsc2xMYXlvdXRPZih0eXBlLCBz
dG9yYWdlLCBtYXRyaXhQYWNraW5nLCB0cnVlKTsKKysgICAgICAgIGxheW91dCAqPSB0eXBlLmdl
dEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgICAgIGxheW91dC5yZXF1aXJlQWxpZ25tZW50KGJh
c2VBbGlnbm1lbnQsIHRydWUpOworKyAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgfQorKwor
KyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKSkK
KysgICAgeworKyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSAxKTsKKysg
ICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSAxKTsKKysgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisrICAgICAgICBy
ZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGZpZWxkcy5kYXRhKCksIGZpZWxkcy5kYXRh
KCkgKyBmaWVsZHMuc2l6ZSgpLCBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIGJhc2VBbGlnbm1lbnQpOwor
KyAgICB9CisrCisrICAgIGNvbnN0IGF1dG8gc2NhbGFyTGF5b3V0ID0gU2NhbGFyTGF5b3V0T2Yo
dHlwZSwgTGFuZ3VhZ2U6OkdMU0wpOworKworKyAgICBpZiAodHlwZS5pc1JhbmswKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0KKysgICAgZWxzZSBpZiAo
dHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQYWNrZWQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1Bh
Y2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBh
bGlnblNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOwor
KyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0KKysgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxh
ckxheW91dC5zaXplT2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25T
Y2FsZX07CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgICAg
IGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9
IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKysgICAgICAgICAg
ICBhdXRvIGxheW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6
ZU9mICogaW5uZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAg
IH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0
cml4KCkpOworKworKyAgICAgICAgc2l6ZV90IGlubmVyRGltOworKyAgICAgICAgc2l6ZV90IG91
dGVyRGltOworKworKyAgICAgICAgc3dpdGNoIChtYXRyaXhQYWNraW5nKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOgor
KyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRS
b3dzKCkpOworKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVfdD4o
dHlwZS5nZXRDb2xzKCkpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBj
YXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBSb3dNYWpvcjoKKysgICAgICAgICAgICAgICAg
aW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29scygpKTsKKysgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsK
KysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4
UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7
CisrICAgICAgICAgICAgICAgIGlubmVyRGltID0gMDsKKysgICAgICAgICAgICAgICAgb3V0ZXJE
aW0gPSAwOworKyAgICAgICAgfQorKworKyAgICAgICAgb3V0ZXJEaW0gKj0gdHlwZS5nZXRBcnJh
eVNpemVQcm9kdWN0KCk7CisrCisrICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlu
bmVyU2NhbGVzVW5wYWNrZWRbaW5uZXJEaW1dOworKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAg
ICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKysgICAgICAgIExheW91
dCBsYXlvdXQgICAgICAgICAgID0ge291dGVyRGltICogbiwgbn07CisrICAgICAgICBsYXlvdXQu
cmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKysgICAgICAgIHJldHVybiBs
YXlvdXQ7CisrICAgIH0KKyt9CisrCisrTGF5b3V0IHNoOjpHbHNsTGF5b3V0T2YoY29uc3QgVFR5
cGUgJnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1h
dHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCisr
eworKyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworKyAgICBBU1NFUlQo
dHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisrCisrICAgIHN0b3JhZ2UgICAgICAgPSBP
dmVybGF5KHN0b3JhZ2UsIHR5cGUpOworKyAgICBtYXRyaXhQYWNraW5nID0gT3ZlcmxheShtYXRy
aXhQYWNraW5nLCB0eXBlKTsKKysKKysgICAgc3dpdGNoIChzdG9yYWdlKQorKyAgICB7CisrICAg
ICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICBy
ZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1h
c2tBcnJheSwgMSk7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJl
ZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2Us
IG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAgY2FzZSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xMYXlv
dXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDE2KTsKKysgICAg
ICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAgICAgICAgICAgIHJl
dHVybiBDb21tb25HbHNsTGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFz
a0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVj
aWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgICAgICByZXR1cm4g
TGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBMYXlv
dXQgc2g6Okdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdpbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBjb25z
dCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBh
Y2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG1hc2tBcnJheSkKKyt7CisrICAgIEFTU0VSVChzdG9yYWdlICE9IFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1Vuc3BlY2lmaWVkKTsKKysgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gVExh
eW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkKTsKKysKKysgICAgc3dpdGNoIChzdG9y
YWdlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tl
ZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBl
bmQsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisrICAgICAgICBjYXNl
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29t
bW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcs
IG1hc2tBcnJheSwgMTYpOworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNT
dGQxNDA6CisrICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdp
biwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDE2KTsKKysgICAgICAg
IGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAgICAgICAgICAgIHJldHVy
biBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFj
a2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgICAg
ICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQxM2VkZgorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91
dC5oCitAQCAtMCwwICsxLDg4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
KysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRfSF8KKysjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xBWU9VVF9IXworKworKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworK2NvbnN0ZXhwciBjb25zdCBh
dXRvIGtEZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1NoYXJlZDsKKytjb25zdGV4cHIgY29uc3QgYXV0byBrRGVmYXVsdExheW91dE1hdHJpeFBhY2tp
bmcgPSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wQ29sdW1uTWFqb3I7CisrCisrLy8gUmV0dXJu
cyBgb2xkU3RvcmFnZWAgaWYgYHR5cGVgIGhhcyB1bnNwZWNpZmllZCBibG9jayBzdG9yYWdlLgor
Ky8vIE90aGVyd2lzZSByZXR1cm5zIGJsb2NrIHN0b3JhZ2Ugb2YgYHR5cGVgLgorK1RMYXlvdXRC
bG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2UsIGNvbnN0
IFRUeXBlICZ0eXBlKTsKKysKKysvLyBSZXR1cm5zIGBvbGRQYWNraW5nYCBpZiBgdHlwZWAgaGFz
IHVuc3BlY2lmaWVkIG1hdHJpeCBwYWNraW5nLgorKy8vIE90aGVyd2lzZSByZXR1cm5zIG1hdHJp
eCBwYWNraW5nIG9mIGB0eXBlYC4KKytUTGF5b3V0TWF0cml4UGFja2luZyBPdmVybGF5KFRMYXlv
dXRNYXRyaXhQYWNraW5nIG9sZFBhY2tpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBS
ZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3Rv
cmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCisrYm9vbCBDYW5CZVBhY2tlZChU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIFJldHVybnMgd2hldGhlciBvciBu
b3QgaXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBh
Y2tlZCByZXByZXNlbnRhdGlvbi4KKytib29sIENhbkJlUGFja2VkKFRMYXlvdXRRdWFsaWZpZXIg
bGF5b3V0UXVhbGlmaWVyKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBl
cm1pc3NhYmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCisr
Ym9vbCBDYW5CZVBhY2tlZChjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gU2V0cyB0aGUgYmxv
Y2sgc3RvcmFnZSBmb3IgYSB0eXBlLgorK3ZvaWQgU2V0QmxvY2tTdG9yYWdlKFRUeXBlICZ0eXBl
LCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIENvbnRhaW5zIGBzaXplb2Zg
IGFuZCBgYWxpZ25vZmAgaW5mb3JtYXRpb24uCisrc3RydWN0IExheW91dAorK3sKKysgICAgc2l6
ZV90IHNpemVPZjsKKysgICAgc2l6ZV90IGFsaWduT2Y7CisrCisrICAgIHN0YXRpYyBMYXlvdXQg
SWRlbnRpdHkoKSB7IHJldHVybiB7MCwgMX07IH0KKysgICAgc3RhdGljIExheW91dCBJbnZhbGlk
KCkgeyByZXR1cm4gezAsIDB9OyB9CisrICAgIHN0YXRpYyBMYXlvdXQgQm90aChzaXplX3Qgbikg
eyByZXR1cm4ge24sIG59OyB9CisrCisrICAgIHZvaWQgcmVxdWlyZUFsaWdubWVudChzaXplX3Qg
YWxpZ24sIGJvb2wgcGFkKTsKKysKKysgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAm
b3RoZXIpIGNvbnN0OworKworKyAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgTGF5b3V0ICZvdGhl
cik7CisrICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpOworKworKyAgICBMYXlvdXQg
b3BlcmF0b3IrKGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKyAgICBMYXlvdXQgb3BlcmF0
b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7CisrfTsKKysKKytzdHJ1Y3QgTWV0YWxMYXlvdXRPZkNv
bmZpZworK3sKKysgICAgYm9vbCBkaXNhYmxlUGFja2luZyAgICAgICAgICAgICA9IGZhbHNlOwor
KyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisrICAgIGJvb2wg
dHJlYXRTYW1wbGVyc0FzVGV4dHVyZUVudiAgPSBmYWxzZTsKKysgICAgYm9vbCBhc3N1bWVTdHJ1
Y3RzQXJlVGFpbFBhZGRlZCA9IGZhbHNlOyAgLy8gUGFkIHRvIG11bHRpcGxlIG9mIDE2CisrfTsK
KysKKysvLyBSZXR1cm5zIHRoZSBsYXlvdXQgb2YgYSB0eXBlIGlmIGl0IHdlcmUgdG8gYmUgcmVw
cmVzZW50ZWQgaW4gYSBNZXRhbCBwcm9ncmFtLgorKy8vIFRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9y
ZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRyaXhQYWNraW5nIG9mIGFu
eSB0eXBlLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IE1ldGFsTGF5b3V0T2YoY29uc3QgVFR5
cGUgJnR5cGUsIE1ldGFsTGF5b3V0T2ZDb25maWcgY29uZmlnID0ge30pOworKworKy8vIFJldHVy
bnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXByZXNlbnRlZCBpbiBh
IEdMU0wgcHJvZ3JhbS4KKytBTkdMRV9OT19ESVNDQVJEIExheW91dAorK0dsc2xMYXlvdXRPZihj
b25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkLAorKyAgICAg
ICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nID0gVExheW91dE1hdHJp
eFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkLAorKyAgICAgICAgICAgICBib29sIG1hc2tBcnJheSAg
ICAgICAgICAgICAgICAgICAgID0gZmFsc2UpOworKworKy8vIFJldHVybnMgdGhlIGxheW91dCBv
ZiBhIHN0cnVjdHVyZSBpZiBpdCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgR0xTTCBwcm9n
cmFtLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IEdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQg
Y29uc3QgKmNvbnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNr
aW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAor
KworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
TEFZT1VUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlv
bnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uM2UzMGRhZQorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCitAQCAtMCwwICsxLDM0IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
Y2xhc3MgTWFwcGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6Cisr
ICAgIEZ1bmN0aW9uVG9EZWZpbml0aW9uIG1GdW5jVG9EZWY7CisrCisrICBwdWJsaWM6CisrICAg
IE1hcHBlcigpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisrCisr
ICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBU
RnVuY3Rpb24gKmZ1bmMgPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysgICAgICAgIEFT
U0VSVChmdW5jLT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworKyAgICAg
ICAgbUZ1bmNUb0RlZltmdW5jXSA9IGZ1bmNEZWZOb2RlOworKyAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICB9CisrfTsKKysKKytGdW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25z
VG9EZWZpbml0aW9ucyhUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBNYXBwZXIgbWFwcGVy
OworKyAgICByb290LnRyYXZlcnNlKCZtYXBwZXIpOworKyAgICByZXR1cm4gc3RkOjptb3ZlKG1h
cHBlci5tRnVuY1RvRGVmKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40ZTU2
ZGRlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oCitAQCAtMCwwICsxLDI1
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisrI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBGVU5DVElPTlNUT0RF
RklOSVRJT05TX0hfCisrCisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFt
ZXNwYWNlIHNoCisreworKworKy8vIEEgbWFwIGZyb20gZnVuY3Rpb25zIHRvIHRoZWlyIGNvcnJl
c3BvbmRpbmcgZGVmaW5pdGlvbnMuCisrdXNpbmcgRnVuY3Rpb25Ub0RlZmluaXRpb24gPSBzdGQ6
OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKj47CisrCisrLy8gTWFwcyBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZp
bml0aW9ucy4KKytBTkdMRV9OT19ESVNDQVJEIEZ1bmN0aW9uVG9EZWZpbml0aW9uIE1hcEZ1bmN0
aW9uc1RvRGVmaW5pdGlvbnMoVEludGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5jcHAgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5j
cHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMzVjOTMwCistLS0gL2Rl
di9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTWFwU3ltYm9scy5jcHAKK0BAIC0wLDAgKzEsNDYgQEAKKysvLworKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3lt
Ym9scy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJ
bnRlcm1SZWJ1aWxkCisreworKyAgcHJpdmF0ZToKKysgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJt
Tm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtTWFwOworKworKyAg
cHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAg
ICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1T
eW1ib2wgJik+IG1hcCkKKysgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNl
LCB0cnVlKSwgbU1hcChtYXApCisrICAgIHt9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRTeW1i
b2xQb3N0KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJvbE5vZGUpOworKyAgICB9
CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpNYXBTeW1ib2xzKFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3Qg
VEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyt7CisrICAgIFJld3JpdGVyIHJl
d3JpdGVyKGNvbXBpbGVyLCBzdGQ6Om1vdmUobWFwKSk7CisrICAgIGlmICghcmV3cml0ZXIucmVi
dWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NTY4OTBhCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCitA
QCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19I
XworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQ
VkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKysKKysjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKysK
KysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBNYXBzIFRJ
bnRlcm1TeW1ib2wgbm9kZXMgdG8gVEludGVybU5vZGUgbm9kZXMuCisrLy8gVGhlIHBhcmVudCBm
dW5jdGlvbiBvZiBhIHN5bWJvbCBpcyBwcm92aWRlZCB0byB0aGUgbWFwcGluZyB3aGVuIGFwcGxp
Y2FibGUuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisrICAgIFRDb21waWxl
ciAmY29tcGlsZXIsCisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgc3RkOjpmdW5jdGlv
bjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXAp
OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8K
K2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTW9kaWZ5U3RydWN0LmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uOTc3OGQzNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAKK0BAIC0wLDAgKzEs
MTAwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2luY2x1
ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9t
YXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0Lmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
Cisrc2l6ZV90IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAorK3sKKysg
ICAgcmV0dXJuIG9yZGVyaW5nLnNpemUoKTsKKyt9CisrCisrY29uc3QgTW9kaWZpZWRTdHJ1Y3RN
YWNoaW5lcnkgJk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0KHNpemVfdCBpbmRleCkgY29u
c3QKKyt7CisrICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisrICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKnMgICAgICAgICAgICAgID0gb3JkZXJpbmdbaW5kZXhdOworKyAgICBjb25zdCBNb2RpZmll
ZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZpbmQoKnMpOworKyAgICBBU1NFUlQobSk7CisrICAgIHJl
dHVybiAqbTsKKyt9CisrCisrY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKk1vZGlmaWVk
U3RydWN0TWFjaGluZXJpZXM6OmZpbmQoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKKyt7Cisr
ICAgIGF1dG8gaXRlciA9IG9yaWdpbmFsVG9NYWNoaW5lcnkuZmluZCgmcyk7CisrICAgIGlmIChp
dGVyID09IG9yaWdpbmFsVG9NYWNoaW5lcnkuZW5kKCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBudWxscHRyOworKyAgICB9CisrICAgIHJldHVybiAmaXRlci0+c2Vjb25kOworK30KKysKKyt2
b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChjb25zdCBUU3RydWN0dXJlICZz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmaWVk
U3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpCisreworKyAgICBBU1NFUlQoIWZpbmQocykpOwor
KyAgICBvcmlnaW5hbFRvTWFjaGluZXJ5WyZzXSA9IG1hY2hpbmVyeTsKKysgICAgb3JkZXJpbmcu
cHVzaF9iYWNrKCZzKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1l
c3BhY2UKKyt7CisrCisrVEludGVybVR5cGVkICZGbGF0dGVuKFN5bWJvbEVudiAmc3ltYm9sRW52
LCBUSW50ZXJtVHlwZWQgJm5vZGUpCisreworKyAgICBhdXRvICZ0eXBlID0gbm9kZS5nZXRUeXBl
KCk7CisrICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CisrCisrICAgIGF1dG8gJnJldFR5cGUg
PSBJbm5lcm1vc3RUeXBlKHR5cGUpOworKyAgICByZXRUeXBlLm1ha2VBcnJheSgxKTsKKysKKysg
ICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVuIiks
IHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7CisrfQorKworK3N0cnVjdCBG
bGF0dGVuQXJyYXkKKyt7fTsKKysKKytzdHJ1Y3QgUGF0aEl0ZW0KKyt7CisrICAgIGVudW0gY2xh
c3MgVHlwZQorKyAgICB7CisrICAgICAgICBGaWVsZCwgICAgICAgICAvLyBTdHJ1Y3QgZmllbGQg
aW5kZXhpbmcuCisrICAgICAgICBJbmRleCwgICAgICAgICAvLyBBcnJheSwgdmVjdG9yLCBvciBt
YXRyaXggaW5kZXhpbmcuCisrICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkg
cmFuayAtPiBwb2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorKyAgICB9OworKworKyAgICBQYXRo
SXRlbShjb25zdCBURmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6Rmll
bGQpIHt9CisrICAgIFBhdGhJdGVtKGludCBpbmRleCkgOiBpbmRleChpbmRleCksIHR5cGUoVHlw
ZTo6SW5kZXgpIHt9CisrICAgIFBhdGhJdGVtKHVuc2lnbmVkIGluZGV4KSA6IFBhdGhJdGVtKHN0
YXRpY19jYXN0PGludD4oaW5kZXgpKSB7fQorKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxh
dHRlbikgOiB0eXBlKFR5cGU6OkZsYXR0ZW5BcnJheSkge30KKysKKysgICAgdW5pb24KKysgICAg
eworKyAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZDsKKysgICAgICAgIGludCBpbmRleDsKKysg
ICAgfTsKKysgICAgVHlwZSB0eXBlOworK307CisrCisrVEludGVybVR5cGVkICZCdWlsZFBhdGhB
Y2Nlc3MoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZ2YXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRoKQorK3sKKysgICAgVEludGVybVR5cGVk
ICpjdXJyID0gbmV3IFRJbnRlcm1TeW1ib2woJnZhcik7CisrICAgIGZvciAoY29uc3QgUGF0aEl0
ZW0gJml0ZW0gOiBwYXRoKQorKyAgICB7CisrICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpGaWVsZDoKKysgICAg
ICAgICAgICAgICAgY3VyciA9ICZBY2Nlc3NGaWVsZCgqY3VyciwgaXRlbS5maWVsZC0+bmFtZSgp
KTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBQYXRoSXRlbTo6
VHlwZTo6SW5kZXg6CisrICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzSW5kZXgoKmN1cnIs
IGl0ZW0uaW5kZXgpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNl
IFBhdGhJdGVtOjpUeXBlOjpGbGF0dGVuQXJyYXk6CisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAq
Y3VycjsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKyt1c2luZyBPcmlnaW5h
bFBhcmFtID0gY29uc3QgVFZhcmlhYmxlICY7CisrdXNpbmcgTW9kaWZpZWRQYXJhbSA9IGNvbnN0
IFRWYXJpYWJsZSAmOworKworK3VzaW5nIE9yaWdpbmFsQWNjZXNzID0gVEludGVybVR5cGVkOwor
K3VzaW5nIE1vZGlmaWVkQWNjZXNzID0gVEludGVybVR5cGVkOworKworK3N0cnVjdCBBY2Nlc3MK
Kyt7CisrICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKysgICAgTW9kaWZpZWRBY2Nlc3Mg
Jm1vZGlmaWVkOworKworKyAgICBzdHJ1Y3QgRW52CisrICAgIHsKKysgICAgICAgIGNvbnN0IENv
bnZlcnRUeXBlIHR5cGU7CisrICAgIH07CisrfTsKKysKKyt1c2luZyBDb252ZXJzaW9uRnVuYyA9
IHN0ZDo6ZnVuY3Rpb248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1v
ZGlmaWVkQWNjZXNzICYpPjsKKysKKytjbGFzcyBDb252ZXJ0U3RydWN0U3RhdGUgOiBhbmdsZTo6
Tm9uQ29weWFibGUKKyt7CisrICBwcml2YXRlOgorKyAgICBzdHJ1Y3QgQ29udmVyc2lvbkluZm8K
KysgICAgeworKyAgICAgICAgQ29udmVyc2lvbkZ1bmMgc3RkRnVuYzsKKysgICAgICAgIGNvbnN0
IFRGdW5jdGlvbiAqYXN0RnVuYzsKKysgICAgICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRo
SXRlbXM7CisrICAgICAgICBJbW11dGFibGVTdHJpbmcgcGF0aE5hbWU7CisrICAgIH07CisrCisr
ICBwdWJsaWM6CisrICAgIENvbnZlcnRTdHJ1Y3RTdGF0ZShTeW1ib2xFbnYgJnN5bWJvbEVudiwK
KysgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCisrICAg
ICAgICA6IGNvbmZpZyhjb25maWcpLAorKyAgICAgICAgICBzeW1ib2xFbnYoc3ltYm9sRW52KSwK
KysgICAgICAgICAgbW9kaWZpZWRGaWVsZHMoKm5ldyBURmllbGRMaXN0KCkpLAorKyAgICAgICAg
ICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSksCisrICAgICAgICAgIGlkR2Vu
KGlkR2VuKSwKKysgICAgICAgICAgb3V0TWFjaGluZXJpZXMob3V0TWFjaGluZXJpZXMpCisrICAg
IHt9CisrCisrICAgIH5Db252ZXJ0U3RydWN0U3RhdGUoKQorKyAgICB7CisrICAgICAgICBBU1NF
UlQobmFtZVBhdGguZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobmFtZVBhdGhTaXplcy5lbXB0
eSgpKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1Ymxpc2goY29uc3QgVFN0cnVjdHVyZSAmb3Jp
Z2luYWxTdHJ1Y3QsIGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFtZSkKKysgICAgeworKyAg
ICAgICAgY29uc3QgYm9vbCBpc09yaWdpbmFsVG9Nb2RpZmllZCA9IGNvbmZpZy5jb252ZXJ0VHlw
ZSA9PSBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOworKworKyAgICAgICAgYXV0byAm
bW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBtb2RpZmllZFN0
cnVjdE5hbWUucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm1vZGlmaWVkRmllbGRzLCBtb2RpZmllZFN0cnVjdE5hbWUuc3ltYm9sVHlw
ZSgpKTsKKysKKysgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKysgICAgICAg
ICAgICAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgaWRHZW4uY3JlYXRlTmV3TmFtZShpc09y
aWdpbmFsVG9Nb2RpZmllZCA/ICJvcmlnaW5hbFRvTW9kaWZpZWQiIDogIm1vZGlmaWVkVG9Pcmln
aW5hbCIpCisrICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisrICAgICAgICAgICAgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCwgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFZvaWQpLCBmYWxz
ZSk7CisrCisrICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorKyAgICAgICAg
ICAgIENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIG9yaWdpbmFsU3RydWN0LCBO
YW1lKCJvcmlnaW5hbCIpKTsKKysgICAgICAgIE1vZGlmaWVkUGFyYW0gbW9kaWZpZWRQYXJhbSA9
CisrICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZp
ZWRTdHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworKyAgICAgICAgc3ltYm9sRW52Lm1hcmtBc1Jl
ZmVyZW5jZShvcmlnaW5hbFBhcmFtLCBBZGRyZXNzU3BhY2U6OlRocmVhZCk7CisrICAgICAgICBz
eW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG1vZGlmaWVkUGFyYW0sIGNvbmZpZy5leHRlcm5hbEFk
ZHJlc3NTcGFjZSk7CisrICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworKyAg
ICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKysgICAgICAgIH0K
KysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBmdW5jLmFkZFBhcmFtZXRl
cigmbW9kaWZpZWRQYXJhbSk7CisrICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdp
bmFsUGFyYW0pOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVybUJsb2NrICZib2R5ID0g
Km5ldyBUSW50ZXJtQmxvY2soKTsKKysKKysgICAgICAgIEFjY2Vzczo6RW52IGVudntjb25maWcu
Y29udmVydFR5cGV9OworKworKyAgICAgICAgZm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNv
bnZlcnNpb25JbmZvcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIGNvbnZlcnQgPSBb
Jl0oT3JpZ2luYWxBY2Nlc3MgJm9yaWdpbmFsLCBNb2RpZmllZEFjY2VzcyAmbW9kaWZpZWQpIHsK
KysgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0RnVuYykKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmZvLnN0ZEZ1bmMpOworKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBtb2Rp
ZmllZCA6IG9yaWdpbmFsOworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0
ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBvcmlnaW5hbCA6IG1vZGlmaWVkOworKyAgICAgICAg
ICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
RnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgICAgICppbmZvLmFzdEZ1bmMsIG5l
dyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoaW5mby5zdGRGdW5jKTsKKysgICAgICAgICAgICAgICAgICAgIEFjY2VzcyBh
Y2Nlc3MgICAgICA9IGluZm8uc3RkRnVuYyhlbnYsIG9yaWdpbmFsLCBtb2RpZmllZCk7CisrICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09yaWdpbmFsVG9Nb2RpZmll
ZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKysgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAmZGVzdCA9IGlzT3JpZ2luYWxUb01vZGlmaWVkID8gYWNjZXNzLm1v
ZGlmaWVkIDogYWNjZXNzLm9yaWdpbmFsOworKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBl
bmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZXN0
LCAmc3JjKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9OworKworKyAgICAg
ICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBhdGhBY2Nlc3Moc3ltYm9s
RW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisrICAgICAgICAgICAgTW9kaWZp
ZWRBY2Nlc3MgKm1vZGlmaWVkID0gJkFjY2Vzc0ZpZWxkKG1vZGlmaWVkUGFyYW0sIGluZm8ucGF0
aE5hbWUpOworKworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3JpZ2luYWwtPmdldFR5
cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSBtdCA9IG1vZGlmaWVkLT5nZXRUeXBlKCk7
CisrICAgICAgICAgICAgQVNTRVJUKG90LmlzQXJyYXkoKSA9PSBtdC5pc0FycmF5KCkpOworKwor
KyAgICAgICAgICAgIGlmIChvdC5pc0FycmF5KCkgJiYgb3QgIT0gbXQpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10LmdldEFy
cmF5U2l6ZXMoKSk7CisrICAgICAgICAgICAgICAgIGlmIChvdC5pc0FycmF5T2ZBcnJheXMoKSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAmRmxh
dHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisrICAgICAgICAgICAgICAgICAgICBtb2RpZmll
ZCA9ICZGbGF0dGVuKHN5bWJvbEVudiwgKm1vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5n
ZXRBcnJheVNpemVQcm9kdWN0KCkpOworKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHZvbHVtZTsgKytpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBpZiAoaSAhPSAwKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbmFsID0gb3JpZ2luYWwtPmRlZXBDb3B5KCk7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKysgICAgICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZvID0gQWNjZXNz
SW5kZXgoKm9yaWdpbmFsLCBpKTsKKysgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNz
ICZtID0gQWNjZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKysgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnQobywgbSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29udmVydCgqb3Jp
Z2luYWwsICptb2RpZmllZCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAg
ICAgYXV0byAqZnVuY1Byb3RvID0gbmV3IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSgmZnVuYyk7
CisrICAgICAgICBhdXRvICpmdW5jRGVmICAgPSBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
bihmdW5jUHJvdG8sICZib2R5KTsKKysKKysgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5
IG1hY2hpbmVyeTsKKysgICAgICAgIG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCAgICAgICAgICAg
ICAgICAgICA9ICZtb2RpZmllZFN0cnVjdDsKKysgICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0
ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNEZWY7CisrCisrICAgICAgICBvdXRNYWNoaW5l
cmllcy5pbnNlcnQob3JpZ2luYWxTdHJ1Y3QsIG1hY2hpbmVyeSk7CisrICAgIH0KKysKKysgICAg
dm9pZCBwdXNoUGF0aChQYXRoSXRlbSBjb25zdCAmaXRlbSkKKysgICAgeworKyAgICAgICAgcGF0
aEl0ZW1zLnB1c2hfYmFjayhpdGVtKTsKKysKKysgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZpZWxkOgorKyAg
ICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFtZSgpLmRhdGEoKSk7Cisr
ICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkluZGV4OgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5pbmRleCk7Cisr
ICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZsYXR0ZW5BcnJheToKKysgICAgICAgICAgICAgICAgbmFtZVBhdGhTaXplcy5wdXNoX2Jh
Y2sobmFtZVBhdGguc2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9
CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BQYXRoKCkKKysgICAgeworKyAgICAgICAgQVNTRVJU
KCFuYW1lUGF0aC5lbXB0eSgpKTsKKysgICAgICAgIEFTU0VSVCghbmFtZVBhdGhTaXplcy5lbXB0
eSgpKTsKKysgICAgICAgIG5hbWVQYXRoLnJlc2l6ZShuYW1lUGF0aFNpemVzLmJhY2soKSk7Cisr
ICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisrCisrICAgICAgICBBU1NFUlQoIXBh
dGhJdGVtcy5lbXB0eSgpKTsKKysgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworKyAgICB9
CisrCisrICAgIHZvaWQgZmluYWxpemUoKQorKyAgICB7CisrICAgICAgICBBU1NFUlQoIWZpbmFs
aXplZCk7CisrICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworKyAgICAgICAgaW50cm9kdWNlUGFj
a2luZygpOworKyAgICAgICAgQVNTRVJUKG1ldGFsTGF5b3V0VG90YWwgPT0gTGF5b3V0OjpJZGVu
dGl0eSgpKTsKKysgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKysgICAgfQorKworKyAgICB2
b2lkIGFkZE1vZGlmaWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRUeXBlICZuZXdUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKysgICAgeworKyAgICAgICAgVExheW91dFF1
YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBuZXdUeXBlLmdldExheW91dFF1YWxpZmllcigpOwor
KyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworKyAg
ICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgICAgPSBwYWNraW5nOworKyAgICAg
ICAgbmV3VHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVyKTsKKysKKysgICAg
ICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBwYXRoTmFtZShuYW1lUGF0aCk7CisrICAgICAgICBt
b2RpZmllZEZpZWxkcy5wdXNoX2JhY2sobmV3IFRGaWVsZCgmbmV3VHlwZSwgcGF0aE5hbWUsIGZp
ZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKSk7CisrICAgIH0KKysKKysgICAgdm9pZCBh
ZGRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNpb25GdW5jICZmdW5jKQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQoIW1vZGlmaWVkRmllbGRzLmVtcHR5KCkpOworKyAgICAgICAgY29udmVyc2lvbklu
Zm9zLnB1c2hfYmFjayh7ZnVuYywgbnVsbHB0ciwgcGF0aEl0ZW1zLCBtb2RpZmllZEZpZWxkcy5i
YWNrKCktPm5hbWUoKX0pOworKyAgICB9CisrCisrICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25z
dCBURnVuY3Rpb24gJmZ1bmMpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVs
ZHMuZW1wdHkoKSk7CisrICAgICAgICBjb252ZXJzaW9uSW5mb3MucHVzaF9iYWNrKHt7fSwgJmZ1
bmMsIHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKysgICAgfQor
KworKyAgICBib29sIGhhc1BhY2tpbmcoKSBjb25zdCB7IHJldHVybiBjb250YWluc1BhY2tlZDsg
fQorKworKyAgICBib29sIGhhc1BhZGRpbmcoKSBjb25zdCB7IHJldHVybiBwYWRGaWVsZENvdW50
ID4gMDsgfQorKworKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQorKyAgICB7CisrICAgICAg
ICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IG91dE1hY2hpbmVyaWVzLmZpbmQo
c3RydWN0dXJlKTsKKysgICAgICAgIGlmIChtID09IG51bGxwdHIpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZShzdHJ1Y3R1cmUu
bmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2RpZmllZFN0cnVj
dChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0TWFjaGluZXJp
ZXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBtID0gb3V0TWFjaGluZXJpZXMuZmluZChzdHJ1Y3R1
cmUpOworKyAgICAgICAgICAgIEFTU0VSVChtKTsKKysgICAgICAgIH0KKysgICAgICAgIG91dE1h
Y2hpbmVyeSA9ICptOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgIHByaXZh
dGU6CisrICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxh
eW91dCkKKysgICAgeworKyAgICAgICAgaWYgKHBhZEFtb3VudCA9PSAwKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGNvbnN0IHNpemVf
dCBiZWdpbiA9IG1vZGlmaWVkRmllbGRzLnNpemUoKTsKKysKKysgICAgICAgIC8vIEl0ZXJhdGl2
ZWx5IGFkZGluZyBpbiBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVj
dCB0eXBlcyB3aWxsIG5vdAorKyAgICAgICAgLy8gYWxsb3cgbWF0cml4IG9yIGFycmF5IG1lbWJl
cnMuCisrICAgICAgICB3aGlsZSAocGFkQW1vdW50ID4gMCkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBUVHlwZSAqcGFkVHlwZTsKKysgICAgICAgICAgICBpZiAocGFkQW1vdW50ID49IDE2KQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09IDE2OworKyAgICAg
ICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEZsb2F0LCA0KTsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocGFkQW1vdW50ID49IDgpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBwYWRBbW91bnQgLT0gODsKKysgICAgICAg
ICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgMik7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBhZEFtb3VudCA+PSA0KQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09IDQ7CisrICAgICAgICAg
ICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0RmxvYXQpOworKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQgPj0gMikKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIHBhZEFtb3VudCAtPSAyOworKyAgICAgICAgICAgICAg
ICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2wsIDIpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworKyAgICAgICAgICAgICAgICBwYWRBbW91bnQgLT0g
MTsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRC
b29sKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYgKHVwZGF0ZUxheW91dCkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gTWV0
YWxMYXlvdXRPZigqcGFkVHlwZSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGNv
bnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoInBhZCIpOworKyAgICAgICAgICAg
IG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjaygKKysgICAgICAgICAgICAgICAgbmV3IFRGaWVsZChw
YWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5cGUoKSkp
OworKyAgICAgICAgICAgICsrcGFkRmllbGRDb3VudDsKKysgICAgICAgIH0KKysKKysgICAgICAg
IHN0ZDo6cmV2ZXJzZShtb2RpZmllZEZpZWxkcy5iZWdpbigpICsgYmVnaW4sIG1vZGlmaWVkRmll
bGRzLmVuZCgpKTsKKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVjZVBhY2tpbmcoKQorKyAg
ICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAgYXV0byBzZXRVbnBhY2tl
ZFN0b3JhZ2UgPSBbXShUVHlwZSAmdHlwZSkgeworKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOwor
KyAgICAgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorKyAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDE0MDsKKysgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9j
a1N0b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBUTGF5
b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsK
KysgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6Cisr
ICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAg
ICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgor
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IFNldEJsb2NrU3RvcmFnZSh0eXBlLCBzdG9yYWdlKTsKKysgICAgICAgIH07CisrCisrICAgICAg
ICBMYXlvdXQgZ2xzbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICAgICAg
Y29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVkRmllbGRzLnNpemUoKTsKKysKKysgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIFRGaWVsZCAmY3VyciAgICAgICAgICAgPSAqbW9kaWZpZWRGaWVsZHNbaV07CisrICAg
ICAgICAgICAgVFR5cGUgJmN1cnJUeXBlICAgICAgICA9ICpjdXJyLnR5cGUoKTsKKysgICAgICAg
ICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNrZWQoY3VyclR5cGUpOworKwor
KyAgICAgICAgICAgIGF1dG8gZG9udFBhY2sgPSBbJl0oKSB7CisrICAgICAgICAgICAgICAgIGlm
IChjYW5CZVBhY2tlZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
c2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgICAgICBnbHNsTGF5b3V0VG90YWwgKz0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKysg
ICAgICAgICAgICB9OworKworKyAgICAgICAgICAgIGlmICghQ2FuQmVQYWNrZWQoY3VyclR5cGUp
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZG9udFBhY2soKTsKKysgICAgICAg
ICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGNvbnN0
IExheW91dCBwYWNrZWRHbHNsTGF5b3V0ICAgICAgICAgICA9IEdsc2xMYXlvdXRPZihjdXJyVHlw
ZSk7CisrICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBwYWNrZWRTdG9yYWdl
ID0gY3VyclR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworKyAgICAgICAg
ICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisrICAgICAgICAgICAgY29uc3QgTGF5
b3V0IHVucGFja2VkR2xzbExheW91dCA9IEdsc2xMYXlvdXRPZihjdXJyVHlwZSk7CisrICAgICAg
ICAgICAgU2V0QmxvY2tTdG9yYWdlKGN1cnJUeXBlLCBwYWNrZWRTdG9yYWdlKTsKKysKKysgICAg
ICAgICAgICBBU1NFUlQocGFja2VkR2xzbExheW91dC5zaXplT2YgPD0gdW5wYWNrZWRHbHNsTGF5
b3V0LnNpemVPZik7CisrICAgICAgICAgICAgaWYgKHBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mID09
IHVucGFja2VkR2xzbExheW91dC5zaXplT2YpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBkb250UGFjaygpOworKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAg
ICB9CisrCisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGogPSBpICsgMTsKKysgICAgICAgICAg
ICBpZiAoaiA9PSBzaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZG9udFBh
Y2soKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKworKyAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5z
aXplT2YgLSBwYWNrZWRHbHNsTGF5b3V0LnNpemVPZjsKKysgICAgICAgICAgICBjb25zdCBURmll
bGQgJm5leHQgICAgICAgICAgPSAqbW9kaWZpZWRGaWVsZHNbal07CisrICAgICAgICAgICAgY29u
c3QgTGF5b3V0IG5leHRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKCpuZXh0LnR5cGUoKSk7Cisr
CisrICAgICAgICAgICAgaWYgKHBhZCA8IG5leHRHbHNsTGF5b3V0LnNpemVPZikKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisrICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBzeW1ib2xFbnYubWFya0Fz
UGFja2VkKGN1cnIpOworKyAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBwYWNrZWRHbHNs
TGF5b3V0OworKyAgICAgICAgICAgIGNvbnRhaW5zUGFja2VkID0gdHJ1ZTsKKysgICAgICAgIH0K
KysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVjZVBhZGRpbmcoKQorKyAgICB7CisrICAgICAg
ICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAgTWV0YWxMYXlvdXRPZkNvbmZpZyBsYXlvdXRD
b25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tpbmcgICAgICAgICAgICAg
PSAhY29uZmlnLmFsbG93UGFja2luZzsKKysgICAgICAgIGxheW91dENvbmZpZy5hc3N1bWVTdHJ1
Y3RzQXJlVGFpbFBhZGRlZCA9IHRydWU7CisrCisrICAgICAgICBURmllbGRMaXN0IGZpZWxkcyA9
IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisrICAgICAgICBBU1NFUlQoIWZpZWxkcy5lbXB0
eSgpKTsgIC8vIEdMU0wgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1lbWJlci4KKysKKysgICAgICAg
IGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQoKTsKKysKKysgICAgICAg
IGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKworKyAgICAgICAgICAgIGNvbnN0
IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKysgICAgICAgICAgICBj
b25zdCBMYXlvdXQgbWV0YWxMYXlvdXQgPSBNZXRhbExheW91dE9mKHR5cGUsIGxheW91dENvbmZp
Zyk7CisrCisrICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisrICAgICAgICAg
ICAgaWYgKGdsc2xMYXlvdXQuYWxpZ25PZiA+IG1ldGFsTGF5b3V0LmFsaWduT2YgJiYgZmllbGQg
IT0gZmlyc3QpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg
cHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworKyAgICAgICAgICAgICAg
ICBtZXRhbExheW91dFRvdGFsLnJlcXVpcmVBbGlnbm1lbnQoZ2xzbExheW91dC5hbGlnbk9mLCB0
cnVlKTsKKysgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZGRlZFNpemUgPSBtZXRhbExh
eW91dFRvdGFsLnNpemVPZjsKKysgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAg
ICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKysgICAgICAgICAgICAgICAgbWV0YWxM
YXlvdXRUb3RhbCArPSBtZXRhbExheW91dDsKKysgICAgICAgICAgICAgICAgYWRkUGFkZGluZyhw
cmVQYWRBbW91bnQsIGZhbHNlKTsgIC8vIE5vdGU6IHJlcXVpcmVBbGlnbm1lbnQoKSBhbHJlYWR5
IHVwZGF0ZWQgbGF5b3V0CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlv
dXQ7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hf
YmFjayhmaWVsZCk7CisrCisrICAgICAgICAgICAgaWYgKGdsc2xMYXlvdXQuc2l6ZU9mID4gbWV0
YWxMYXlvdXQuc2l6ZU9mICYmIGZpZWxkICE9IGZpZWxkcy5iYWNrKCkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBjb25zdCBib29sIHVwZGF0ZUxheW91dCA9IHRydWU7ICAvLyBY
WFg6IENvcnJlY3Q/CisrICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRBbW91bnQgID0g
Z2xzbExheW91dC5zaXplT2YgLSBtZXRhbExheW91dC5zaXplT2Y7CisrICAgICAgICAgICAgICAg
IGFkZFBhZGRpbmcocGFkQW1vdW50LCB1cGRhdGVMYXlvdXQpOworKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0aChjb25zdCBjaGFyICpl
eHRyYSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKGV4dHJhICYmICpleHRyYSAhPSAnXDAnKTsK
KysgICAgICAgIG5hbWVQYXRoU2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisrICAg
ICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7CisrICAgICAgICBpZiAobmFtZVBhdGguZW1wdHko
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBuYW1lUGF0aCA9IHA7CisrICAgICAgICAgICAg
cmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgd2hpbGUgKCpwID09ICdfJykKKysgICAgICAg
IHsKKysgICAgICAgICAgICArK3A7CisrICAgICAgICB9CisrICAgICAgICBpZiAoKnAgPT0gJ1ww
JykKKysgICAgICAgIHsKKysgICAgICAgICAgICBwID0gIngiOworKyAgICAgICAgfQorKyAgICAg
ICAgaWYgKG5hbWVQYXRoLmJhY2soKSAhPSAnXycpCisrICAgICAgICB7CisrICAgICAgICAgICAg
bmFtZVBhdGggKz0gJ18nOworKyAgICAgICAgfQorKyAgICAgICAgbmFtZVBhdGggKz0gcDsKKysg
ICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRyYSkKKysgICAgewor
KyAgICAgICAgY2hhciBidWZmZXJbc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0
czEwICsgMV07CisrICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEpOworKyAgICAg
ICAgcHVzaE5hbWVQYXRoKGJ1ZmZlcik7CisrICAgIH0KKysKKysgIHB1YmxpYzoKKysgICAgY29u
c3QgTW9kaWZ5U3RydWN0Q29uZmlnICZjb25maWc7CisrICAgIFN5bWJvbEVudiAmc3ltYm9sRW52
OworKworKyAgcHJpdmF0ZToKKysgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisrICAg
IExheW91dCBtZXRhbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICBzaXpl
X3QgcGFkRmllbGRDb3VudCAgICA9IDA7CisrICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0g
ZmFsc2U7CisrICAgIGJvb2wgZmluYWxpemVkICAgICAgICAgID0gZmFsc2U7CisrCisrICAgIHN0
ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrCisrICAgIHN0ZDo6dmVjdG9yPHNpemVf
dD4gbmFtZVBhdGhTaXplczsKKysgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisrCisrICAgIHN0
ZDo6dmVjdG9yPENvbnZlcnNpb25JbmZvPiBjb252ZXJzaW9uSW5mb3M7CisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGU7CisrICAgIElkR2VuICZpZEdlbjsKKysgICAgTW9kaWZpZWRTdHJ1
Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXM7CisrfTsKKysKKysvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworKworK3VzaW5nIE1vZGlmeUZ1bmMgPSBib29sICgqKShDb252ZXJ0U3RydWN0U3Rh
dGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZp
ZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRN
YXRyaXhQYWNraW5nIHBhY2tpbmcpOworKworK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRT
dHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0
b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcg
cGFja2luZyk7CisrCisrYm9vbCBJZGVudGl0eU1vZGlmeShDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIHN0YXRlLmFkZE1vZGlm
aWVkRmllbGQoZmllbGQsIENsb25lVHlwZSh0eXBlKSwgc3RvcmFnZSwgcGFja2luZyk7CisrICAg
IHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICZv
LCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgcmV0dXJuIEFjY2Vzc3tvLCBtfTsKKysg
ICAgfSk7CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBJbmxpbmVTdHJ1Y3QoQ29u
dmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQg
JmZpZWxkLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKysgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNr
aW5nKQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgICAgID0gKmZpZWxkLnR5
cGUoKTsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3RhdGUuc3ltYm9s
RW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworKyAgICBpZiAoIXN1YnN0cnVjdHVyZSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICh0eXBlLmlzQXJy
YXkoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICgh
c3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBURmllbGRMaXN0ICZzdWJmaWVsZHMgPSBz
dWJzdHJ1Y3R1cmUtPmZpZWxkcygpOworKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQg
OiBzdWJmaWVsZHMpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBlICZzdWJ0eXBlICAgICAg
ICAgICAgICAgICAgPSAqc3ViZmllbGQtPnR5cGUoKTsKKysgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworKyAg
ICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgc3VicGFja2luZyA9IE92ZXJsYXkocGFj
a2luZywgc3VidHlwZSk7CisrICAgICAgICBNb2RpZnlSZWN1cnNpdmUoc3RhdGUsICpzdWJmaWVs
ZCwgc3Vic3RvcmFnZSwgc3VicGFja2luZyk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7
CisrfQorKworK2Jvb2wgUmVjdXJzZVN0cnVjdChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
KyAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25zdCBU
VHlwZSAmdHlwZSAgICAgICAgICAgICAgPSAqZmllbGQudHlwZSgpOworKyAgICBjb25zdCBUU3Ry
dWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBzdGF0ZS5zeW1ib2xFbnYucmVtYXAodHlwZS5nZXRTdHJ1
Y3QoKSk7CisrICAgIGlmICghc3Vic3RydWN0dXJlKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFzdGF0ZS5jb25maWcucmVjdXJzZVN0cnVjdChmaWVs
ZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisrICAgIGlmICghc3RhdGUucmVjdXJzZSgq
c3Vic3RydWN0dXJlLCBtYWNoaW5lcnkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysKKysgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRUeXBlKG1hY2hpbmVyeS5t
b2RpZmllZFN0cnVjdCwgZmFsc2UpOworKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAgIHsK
KysgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5U2l6ZXMoKSk7CisrICAg
IH0KKysKKysgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVydGVyID0gbWFjaGlu
ZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOworKyAgICBBU1NFUlQo
Y29udmVydGVyKTsKKysKKysgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgbmV3VHlw
ZSwgc3RvcmFnZSwgcGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oKmNvbnZlcnRl
ci0+Z2V0RnVuY3Rpb24oKSk7CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIFNw
bGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25z
dCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICghdHlwZS5pc01hdHJpeCgp
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFzdGF0
ZS5jb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zKGZpZWxkKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xz
KCk7CisrICAgIFRUeXBlICZyb3dUeXBlID0gRHJvcENvbHVtbnModHlwZSk7CisrCisrICAgIGZv
ciAoaW50IGMgPSAwOyBjIDwgY29sczsgKytjKQorKyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNo
UGF0aChjKTsKKysKKysgICAgICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHJvd1R5
cGUsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0o
QWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7Cisr
ICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvLCBtfTsKKysgICAgICAgIH0pOworKworKyAgICAg
ICAgc3RhdGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysK
Kytib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisrewor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICghdHlwZS5p
c01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAg
Y29uc3QgaW50IHJvd3MgICAgICAgPSB0eXBlLmdldFJvd3MoKTsKKysgICAgY29uc3QgaW50IHNh
dHVyYXRpb24gPSBzdGF0ZS5jb25maWcuc2F0dXJhdGVNYXRyaXhSb3dzKGZpZWxkKTsKKysgICAg
aWYgKHNhdHVyYXRpb24gPD0gcm93cykKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisrICAgIFRU
eXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24pOworKyAgICBz
dGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsK
KysKKysgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisrICAgIHsKKysgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgKytyKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICZv
LCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgICAgICAgICBhdXRvICZvXyA9IEFjY2Vz
c0luZGV4KEFjY2Vzc0luZGV4KG8sIGMpLCByKTsKKysgICAgICAgICAgICAgICAgYXV0byAmbV8g
PSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisrICAgICAgICAgICAgICAgIHJl
dHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9KTsKKysgICAgICAgIH0KKysgICAg
fQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUZXN0Qm9vbFRvVWludChDb252
ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQorK3sKKysgICAgaWYg
KGZpZWxkLnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gVEJhc2ljVHlwZTo6RWJ0Qm9vbCkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICghc3RhdGUuY29u
ZmlnLnByb21vdGVCb29sVG9VaW50KGZpZWxkKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytBY2Nlc3MgQ29udmVydEJv
b2xUb1VpbnQoQ29udmVydFR5cGUgY29udmVydFR5cGUsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2Rp
ZmllZEFjY2VzcyAmbSkKKyt7CisrICAgIGF1dG8gY29lcmNlID0gW10oVEludGVybVR5cGVkICZ0
bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisrICAgICAgICByZXR1
cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHRvLmdldFR5cGUoKSwgbmV3
IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbX0pOworKyAgICB9OworKyAgICBzd2l0Y2ggKGNvbnZlcnRU
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZp
ZWQ6CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2VyY2UobSwgbyksIG19OworKyAgICAg
ICAgY2FzZSBDb252ZXJ0VHlwZTo6TW9kaWZpZWRUb09yaWdpbmFsOgorKyAgICAgICAgICAgIHJl
dHVybiBBY2Nlc3N7bywgY29lcmNlKG8sIG0pfTsKKysgICAgfQorK30KKysKKytib29sIFNhdHVy
YXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0
TWF0cml4UGFja2luZyBwYWNraW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBib29sIGFycmF5KQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQu
dHlwZSgpOworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgIT0gYXJyYXkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoISgodHlwZS5pc1JhbmswKCkgJiYg
SGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUpKSB8fCB0eXBlLmlzVmVjdG9yKCkpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgY29uc3QgYXV0byBzYXR1cmF0b3Ig
PQorKyAgICAgICAgYXJyYXkgPyBzdGF0ZS5jb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvckFy
cmF5cyA6IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9yOworKyAgICBjb25zdCBp
bnQgZGltICAgICAgICA9IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysgICAgY29uc3QgaW50IHNh
dHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworKyAgICBpZiAoc2F0dXJhdGlvbiA8PSBkaW0p
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBUVHlwZSAm
c2F0VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisrICAgIGNv
bnN0IGJvb2wgYm9vbFRvVWludCA9IFRlc3RCb29sVG9VaW50KHN0YXRlLCBmaWVsZCk7CisrICAg
IGlmIChib29sVG9VaW50KQorKyAgICB7CisrICAgICAgICBzYXRUeXBlLnNldEJhc2ljVHlwZShU
QmFzaWNUeXBlOjpFYnRVSW50KTsKKysgICAgfQorKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxk
KGZpZWxkLCBzYXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKysKKysgICAgZm9yIChpbnQgZCA9
IDA7IGQgPCBkaW07ICsrZCkKKysgICAgeworKyAgICAgICAgc3RhdGUuYWRkQ29udmVyc2lvbihb
PV0oQWNjZXNzOjpFbnYgJmVudiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZt
KSB7CisrICAgICAgICAgICAgYXV0byAmb18gPSBkaW0gPiAxID8gQWNjZXNzSW5kZXgobywgZCkg
OiBvOworKyAgICAgICAgICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisrICAgICAg
ICAgICAgaWYgKGJvb2xUb1VpbnQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29udmVydEJvb2xUb1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJl
dHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9KTsKKysgICAg
fQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBTYXR1cmF0ZVNjYWxhck9yVmVj
dG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcg
cGFja2luZykKKyt7CisrICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9uKHN0
YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgdHJ1ZSk7CisrfQorKworK2Jvb2wgU2F0dXJh
dGVTY2FsYXJPclZlY3RvcihDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisr
eworKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJPclZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQs
IHN0b3JhZ2UsIHBhY2tpbmcsIGZhbHNlKTsKKyt9CisrCisrYm9vbCBQcm9tb3RlQm9vbFRvVWlu
dChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlv
dXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBpZiAoIVRlc3RCb29sVG9VaW50KHN0
YXRlLCBmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBhdXRvICZwcm9tb3RlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLnR5cGUoKSk7CisrICAg
IHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisrICAgIHN0
YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHByb21vdGVkVHlwZSwgc3RvcmFnZSwgcGFja2lu
Zyk7CisrCisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgcmV0dXJuIENv
bnZlcnRCb29sVG9VaW50KGVudi50eXBlLCBvLCBtKTsKKysgICAgfSk7CisrCisrICAgIHJldHVy
biB0cnVlOworK30KKysKKytib29sIE1vZGlmeUNvbW1vbihDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAgICAg
ICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBNb2Rp
ZnlGdW5jIGZ1bmNzW10gPSB7CisrICAgICAgICBJbmxpbmVTdHJ1Y3QsICAgICAgICAgICAgICAg
ICAgLy8KKysgICAgICAgIFJlY3Vyc2VTdHJ1Y3QsICAgICAgICAgICAgICAgICAvLworKyAgICAg
ICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAgICAgICAgICAgIC8vCisrICAgICAgICBTYXR1cmF0ZU1h
dHJpeFJvd3MsICAgICAgICAgICAgLy8KKysgICAgICAgIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JB
cnJheXMsICAvLworKyAgICAgICAgU2F0dXJhdGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisr
ICAgICAgICBQcm9tb3RlQm9vbFRvVWludCwgICAgICAgICAgICAgLy8KKysgICAgfTsKKysKKysg
ICAgZm9yIChNb2RpZnlGdW5jIGZ1bmMgOiBmdW5jcykKKysgICAgeworKyAgICAgICAgaWYgKGZ1
bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gSWRl
bnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKTsKKyt9CisrCisrYm9v
bCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAg
ICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRy
aXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50
eXBlKCk7CisrICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5pbmxpbmVBcnJheShmaWVs
ZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25z
dCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgY29u
c3QgYm9vbCBpc011bHRpRGltID0gdHlwZS5pc0FycmF5T2ZBcnJheXMoKTsKKysKKysgICAgYXV0
byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisrICAgIGNvbnN0IFRGaWVs
ZCBpbm5lcm1vc3RGaWVsZCgmaW5uZXJtb3N0VHlwZSwgZmllbGQubmFtZSgpLCBmaWVsZC5saW5l
KCksIGZpZWxkLnN5bWJvbFR5cGUoKSk7CisrCisrICAgIGlmIChpc011bHRpRGltKQorKyAgICB7
CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChGbGF0dGVuQXJyYXkoKSk7CisrICAgIH0KKysKKysg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQorKyAgICB7CisrICAgICAg
ICBzdGF0ZS5wdXNoUGF0aChpKTsKKysgICAgICAgIE1vZGlmeUNvbW1vbihzdGF0ZSwgaW5uZXJt
b3N0RmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOwor
KyAgICB9CisrCisrICAgIGlmIChpc011bHRpRGltKQorKyAgICB7CisrICAgICAgICBzdGF0ZS5w
b3BQYXRoKCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgTW9k
aWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHN0YXRlLnB1c2hQYXRoKGZp
ZWxkKTsKKysKKysgICAgYm9vbCBtb2RpZmllZDsKKysgICAgaWYgKElubGluZUFycmF5KHN0YXRl
LCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZykpCisrICAgIHsKKysgICAgICAgIG1vZGlmaWVkID0g
dHJ1ZTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1vZGlmaWVkID0gTW9k
aWZ5Q29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZyk7CisrICAgIH0KKysKKysg
ICAgc3RhdGUucG9wUGF0aCgpOworKworKyAgICByZXR1cm4gbW9kaWZpZWQ7CisrfQorKworK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K2Jvb2wgc2g6OlRyeUNyZWF0ZU1vZGlmaWVkU3RydWN0KFN5bWJvbEVudiAmc3ltYm9sRW52LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNvbmZp
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZv
cmlnaW5hbFN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBO
YW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCisreworKyAgICBD
b252ZXJ0U3RydWN0U3RhdGUgc3RhdGUoc3ltYm9sRW52LCBpZEdlbiwgY29uZmlnLCBvdXRNYWNo
aW5lcmllcyk7CisrICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKysKKysgICAg
Y29uc3QgVEZpZWxkTGlzdCAmb3JpZ2luYWxGaWVsZHMgPSBvcmlnaW5hbFN0cnVjdC5maWVsZHMo
KTsKKysgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKysg
ICAgeworKyAgICAgICAgY29uc3QgVFR5cGUgJm9yaWdpbmFsVHlwZSAgICAgICAgICA9ICpvcmln
aW5hbEZpZWxkLT50eXBlKCk7CisrICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0
b3JhZ2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBl
KTsKKysgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcgPSBPdmVybGF5
KGNvbmZpZy5pbml0aWFsTWF0cml4UGFja2luZywgb3JpZ2luYWxUeXBlKTsKKysgICAgICAgIGlm
ICghTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqb3JpZ2luYWxGaWVsZCwgc3RvcmFnZSwgcGFja2lu
ZykpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytpZGVudGljYWxGaWVsZENvdW50OworKyAg
ICAgICAgfQorKyAgICB9CisrCisrICAgIHN0YXRlLmZpbmFsaXplKCk7CisrCisrICAgIGlmIChp
ZGVudGljYWxGaWVsZENvdW50ID09IG9yaWdpbmFsRmllbGRzLnNpemUoKSAmJiAhc3RhdGUuaGFz
UGFja2luZygpICYmICFzdGF0ZS5oYXNQYWRkaW5nKCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBt
b2RpZmllZFN0cnVjdE5hbWUpOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0
cnVjdC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01v
ZGlmeVN0cnVjdC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGI4Y2Zj
NQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCitAQCAtMCwwICsxLDEzNSBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTU9ESUZZU1RSVUNUX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1RfSF8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4KKysj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L05hbWUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNo
CisreworKworK2VudW0gY2xhc3MgQ29udmVydFR5cGUKKyt7CisrICAgIE9yaWdpbmFsVG9Nb2Rp
ZmllZCwKKysgICAgTW9kaWZpZWRUb09yaWdpbmFsLAorK307CisrCisrLy8gQ29uZmlndXJlcyBo
b3cgc3RydWN0IG1vZGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuCisrY2xhc3MgTW9kaWZ5U3RydWN0
Q29uZmlnCisreworKyAgcHVibGljOgorKyAgICBzdHJ1Y3QgUHJlZGljYXRlCisrICAgIHsKKysg
ICAgICAgIHVzaW5nIEZ1bmMgPSBib29sICgqKShjb25zdCBURmllbGQgJik7CisrICAgICAgICBz
dGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAg
ICAgIHN0YXRpYyBib29sIFRydWUoY29uc3QgVEZpZWxkICYpIHsgcmV0dXJuIHRydWU7IH0KKysg
ICAgfTsKKysKKysgICAgc3RydWN0IFNhdHVyYXRlVmVjdG9yCisrICAgIHsKKysgICAgICAgIC8v
IFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKysgICAgICAgIC8vIElm
IG9yaWdpbmFsIGRpbSA+PSByZXR1cm4gdmFsdWUsIHRoZSBmaWVsZCByZW1haW5zIHVudG91Y2hl
ZC4KKysgICAgICAgIHVzaW5nIEZ1bmMgPSBpbnQgKCopKGNvbnN0IFRGaWVsZCAmKTsKKysgICAg
ICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJldHVybiAwOyB9
CisrICAgICAgICBzdGF0aWMgaW50IEZ1bGx5U2F0dXJhdGUoY29uc3QgVEZpZWxkICYpIHsgcmV0
dXJuIDQ7IH0KKysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgTW9kaWZ5U3RydWN0Q29uZmln
KENvbnZlcnRUeXBlIGNvbnZlcnRUeXBlLCBib29sIGFsbG93UGFja2luZywgYm9vbCBhbGxvd1Bh
ZGRpbmcpCisrICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNraW5n
KGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisrICAgIHt9CisrCisr
ICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cg
dmVjdG9ycy4KKysgICAgUHJlZGljYXRlOjpGdW5jIHNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWRp
Y2F0ZTo6RmFsc2U7CisrCisrICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0
aXBsZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorKyAgICBQcmVkaWNhdGU6OkZ1bmMgaW5saW5l
QXJyYXkgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUg
dGhlaXIgc3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisrICAgIFByZWRpY2F0ZTo6RnVuYyBp
bmxpbmVTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBTdHJ1Y3QgZmllbGRz
IGFyZSBtb2RpZmllZC4KKysgICAgUHJlZGljYXRlOjpGdW5jIHJlY3Vyc2VTdHJ1Y3QgPSBQcmVk
aWNhdGU6OkZhbHNlOworKworKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBh
cmUgcHJvbW90ZWQgdG8gdWludCBmaWVsZHMuCisrICAgIFByZWRpY2F0ZTo6RnVuYyBwcm9tb3Rl
Qm9vbFRvVWludCA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8vIENyZWF0ZXMgYSBuZXcg
c3RydWN0dXJlIHdoZXJlIHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVj
dG9ycy4KKysgICAgLy8gZS5nLiBgZmxvYXQgLT4gZmxvYXQ0YC4KKysgICAgLy8gZS5nLiBgZmxv
YXQyIC0+IGZsb2F0NGAuCisrICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFy
T3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworKworKyAgICAvLyBDcmVh
dGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBzY2FsYXIgb3IgdmVjdG9yIGFycmF5IGZpZWxkcyBh
cmUgc2F0dXJhdGVkLgorKyAgICAvLyBlLmcuIGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKysg
ICAgLy8gZS5nLiBgZmxvYXQyWzEwXSAtPiBmbG9hdDRbMTBdYAorKyAgICBTYXR1cmF0ZVZlY3Rv
cjo6RnVuYyBzYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzID0gU2F0dXJhdGVWZWN0b3I6OkRv
bnRTYXR1cmF0ZTsKKysKKysgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUgd2hlcmUgbWF0
cml4IGZpZWxkcyBhcmUgcm93LXNhdHVyYXRlZC4KKysgICAgLy8gZS5nLiBgZmxvYXQyeDIgLT4g
ZmxvYXQyeDRgLgorKyAgICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3Mg
PSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworKworKyAgICBUTGF5b3V0QmxvY2tTdG9y
YWdlIGluaXRpYWxCbG9ja1N0b3JhZ2UgICA9IGtEZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlOwor
KyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0cml4UGFja2luZyA9IGtEZWZhdWx0
TGF5b3V0TWF0cml4UGFja2luZzsKKysgICAgQ29udmVydFR5cGUgY29udmVydFR5cGU7CisrICAg
IGJvb2wgYWxsb3dQYWNraW5nOworKyAgICBib29sIGFsbG93UGFkZGluZzsKKysgICAgQWRkcmVz
c1NwYWNlIGV4dGVybmFsQWRkcmVzc1NwYWNlOworK307CisrCisrc3RydWN0IE1vZGlmaWVkU3Ry
dWN0TWFjaGluZXJ5CisreworKyAgICBjb25zdCBUU3RydWN0dXJlICptb2RpZmllZFN0cnVjdCAg
ICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKysgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IG51bGxwdHI7CisrICAgIFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworKworKyAgICBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uIComZ2V0Q29udmVydGVyKENvbnZlcnRUeXBlIGNvbnZl
cnRUeXBlKQorKyAgICB7CisrICAgICAgICBpZiAoY29udmVydFR5cGUgPT0gQ29udmVydFR5cGU6
Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVu
Y09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKysgICAgICAg
IH0KKysgICAgfQorK307CisrCisrLy8gSW5kZXhlZCBieSB0b3BvbG9naWNhbCBvcmRlci4KKytj
bGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCisreworKyAgcHVibGljOgorKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OworKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmYXQo
c2l6ZV90IGluZGV4KSBjb25zdDsKKysgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkg
KmZpbmQoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3Q7CisrICAgIHZvaWQgaW5zZXJ0KGNvbnN0
IFRTdHJ1Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkp
OworKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1
cmUgKiwgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisrICAg
IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gb3JkZXJpbmc7CisrfTsKKysKKysvLyBS
ZXR1cm5zIHRydWUgYW5kIGBvdXRNYWNoaW5lcnlgIHBvcHVsYXRlZCBpZiBtb2RpZmljYXRpb25z
IHdlcmUgcGVyZm9ybWVkLgorKy8vIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgorK2Jvb2wgVHJ5
Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNvbmZpZywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0
TWFjaGluZXJpZXMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCitk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L05hbWUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L05hbWUuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDdjNWQxOAor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L05hbWUuY3BwCitAQCAtMCwwICsxLDIyMCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1l
LmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorKworK3VzaW5nIG5hbWVz
cGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorK3N0YXRpYyBJbW11dGFibGVTdHJpbmcgR2V0TmFtZShUIGNvbnN0ICZvYmplY3Qp
CisreworKyAgICBpZiAob2JqZWN0LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIGtFbXB0eUltbXV0YWJsZVN0cmluZzsKKysgICAgfQor
KyAgICByZXR1cm4gb2JqZWN0Lm5hbWUoKTsKKyt9CisrCisrTmFtZTo6TmFtZShjb25zdCBURmll
bGQgJmZpZWxkKSA6IE5hbWUoR2V0TmFtZShmaWVsZCksIGZpZWxkLnN5bWJvbFR5cGUoKSkge30K
KysKKytOYW1lOjpOYW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCkgOiBOYW1lKEdldE5hbWUoc3lt
Ym9sKSwgc3ltYm9sLnN5bWJvbFR5cGUoKSkge30KKysKKytib29sIE5hbWU6Om9wZXJhdG9yPT0o
Y29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4gbVJhd05hbWUgPT0gb3Ro
ZXIubVJhd05hbWUgJiYgbVN5bWJvbFR5cGUgPT0gb3RoZXIubVN5bWJvbFR5cGU7CisrfQorKwor
K2Jvb2wgTmFtZTo6b3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikgY29uc3QKKyt7CisrICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyt9CisrCisrYm9vbCBOYW1lOjpvcGVyYXRvcjwo
Y29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICBpZiAobVJhd05hbWUgPCBvdGhlci5t
UmF3TmFtZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysgICAgaWYg
KG90aGVyLm1SYXdOYW1lIDwgbVJhd05hbWUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKyAgICByZXR1cm4gbVN5bWJvbFR5cGUgPCBvdGhlci5tU3ltYm9sVHlwZTsK
Kyt9CisrCisrYm9vbCBOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAgICByZXR1cm4gbVN5bWJv
bFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHk7CisrfQorKworK2Jvb2wgTmFtZTo6YmVnaW5zV2l0
aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0CisreworKyAgICBpZiAobVN5bWJvbFR5cGUgIT0g
cHJlZml4Lm1TeW1ib2xUeXBlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysgICAgcmV0dXJuIG1SYXdOYW1lLmJlZ2luc1dpdGgocHJlZml4Lm1SYXdOYW1lKTsKKyt9
CisrCisrdm9pZCBOYW1lOjplbWl0KFRJbmZvU2lua0Jhc2UgJm91dCkgY29uc3QKKyt7CisrICAg
IHN3aXRjaCAobVN5bWJvbFR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6
QnVpbHRJbjoKKysgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQ6CisrICAgICAg
ICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKysgICAgICAgICAgICBvdXQgPDwgbVJh
d05hbWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWw6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsK
KysgICAgICAgICAgICBpZiAobVJhd05hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZp
eCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1SYXdOYW1lWzBdICE9ICdfJykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8PCBrQW5nbGVJbnRlcm5hbFBy
ZWZpeCA8PCAnXycgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8PCBrQW5nbGVJbnRlcm5h
bFByZWZpeCA8PCBtUmF3TmFtZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrLy8gTk9URTogVGhpcyBtYXRj
aGVzIG1vcmUgdGhpbmdzIHRoYW4gRmluZFN5bWJvbE5vZGUuCisrY2xhc3MgRXhwcmVzc2lvbkNv
bnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorK3sKKysgICAgTmFt
ZSBtTmFtZTsKKysgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisrCisrICBwdWJsaWM6Cisr
ICAgIEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisrICAg
ICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU5hbWUobmFtZSkK
KysgICAge30KKysKKysgICAgYm9vbCBmb3VuZE5hbWUoKSBjb25zdCB7IHJldHVybiBtRm91bmRO
YW1lOyB9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3Zl
cnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKE5hbWUobm9kZS0+dmFyaWFibGUoKSkgPT0gbU5h
bWUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRydWU7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6
emxlICopIG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9CisrCisrICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRlIHsgcmV0
dXJuICFtRm91bmROYW1lOyB9CisrCisrICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKysK
KysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpub2Rl
KSBvdmVycmlkZSB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQorKworKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBvdmVycmlkZQorKyAg
ICB7CisrICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IG5vZGUtPmdldFR5cGUoKTsK
KysgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVj
dCgpOworKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUgJiYgTmFtZSgqc3RydWN0dXJlKSA9PSBt
TmFtZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVl
OworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBub2RlLT5nZXRGdW5jdGlvbigp
OworKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09IG1OYW1lKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRydWU7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuICFtRm91bmROYW1lOworKyAgICB9Cisr
CisrICAgIGJvb2wgdmlzaXRJZkVsc2UoVmlzaXQgdmlzaXQsIFRJbnRlcm1JZkVsc2UgKm5vZGUp
IG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNpdCwgVEludGVy
bVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBU
SW50ZXJtQ2FzZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOwor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHZvaWQgdmlzaXRGdW5jdGlv
blByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUgeyBMT0dJQ19F
UlJPUigpOyB9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9H
SUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29s
IHZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlkZQorKyAgICB7CisrICAg
ICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisr
ICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExP
R0lDX0VSUk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUK
KysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKworKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgb3Zl
cnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJh
bmNoICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgdm9pZCB2aXNpdFByZXByb2Nlc3NvckRp
cmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJyaWRlIHsgTE9HSUNf
RVJST1IoKTsgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworK2Jvb2wg
c2g6OkV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwgVEludGVybVR5cGVk
ICZub2RlKQorK3sKKysgICAgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZpc2l0b3IgdmlzaXRvcihu
YW1lKTsKKysgICAgbm9kZS50cmF2ZXJzZSgmdmlzaXRvcik7CisrICAgIHJldHVybiB2aXNpdG9y
LmZvdW5kTmFtZSgpOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLmQ2ZWFlYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLwor
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX05BTUVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX05BTUVfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11
dGFibGVTdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UeXBlcy5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytjb25zdGV4cHIgY2hh
ciBrQW5nbGVJbnRlcm5hbFByZWZpeFtdID0gIkFOR0xFIjsKKysKKysvLyBSZXByZXNlbnRzIHRo
ZSBuYW1lIG9mIGEgc3ltYm9sLgorK2NsYXNzIE5hbWUKKyt7CisrICBwdWJsaWM6CisrICAgIGNv
bnN0ZXhwciBOYW1lKGNvbnN0IE5hbWUgJikgPSBkZWZhdWx0OworKworKyAgICBjb25zdGV4cHIg
TmFtZSgpIDogTmFtZShrRW1wdHlJbW11dGFibGVTdHJpbmcsIFN5bWJvbFR5cGU6OkVtcHR5KSB7
fQorKworKyAgICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFt
ZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorKyAgICAgICAgOiBtUmF3TmFtZShyYXdOYW1lKSwg
bVN5bWJvbFR5cGUoc3ltYm9sVHlwZSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKHJhd05hbWUu
ZW1wdHkoKSA9PSAoc3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworKyAgICB9Cisr
CisrICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJv
bFR5cGUgc3ltYm9sVHlwZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisrICAgICAgICA6
IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBzeW1ib2xUeXBlKQorKyAgICB7fQorKwor
KyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZyYXdOYW1lLCBTeW1ib2xUeXBl
IHN5bWJvbFR5cGUpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBz
eW1ib2xUeXBlKQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRGaWVsZCAm
ZmllbGQpOworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCk7CisrCisr
ICAgIE5hbWUgJm9wZXJhdG9yPShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKysgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgTmFt
ZSAmb3RoZXIpIGNvbnN0OworKworKyAgICBjb25zdGV4cHIgY29uc3QgSW1tdXRhYmxlU3RyaW5n
ICZyYXdOYW1lKCkgY29uc3QgeyByZXR1cm4gbVJhd05hbWU7IH0KKysgICAgY29uc3RleHByIFN5
bWJvbFR5cGUgc3ltYm9sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1TeW1ib2xUeXBlOyB9CisrCisr
ICAgIGJvb2wgZW1wdHkoKSBjb25zdDsKKysgICAgYm9vbCBiZWdpbnNXaXRoKGNvbnN0IE5hbWUg
JnByZWZpeCkgY29uc3Q7CisrCisrICAgIHZvaWQgZW1pdChUSW5mb1NpbmtCYXNlICZvdXQpIGNv
bnN0OworKworKyAgcHJpdmF0ZToKKysgICAgSW1tdXRhYmxlU3RyaW5nIG1SYXdOYW1lOworKyAg
ICBTeW1ib2xUeXBlIG1TeW1ib2xUeXBlOworK307CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwgVEludGVybVR5cGVkICZu
b2RlKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmNw
cAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU0YzM3OGEKKy0tLSAvZGV2
L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9QaXBlbGluZS5jcHAKK0BAIC0wLDAgKzEsNDc2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5l
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0J1aWx0
SW4uaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKysKKysjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAodmFyaWFudCA9PSBW
YXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorKworK2Jvb2wgUGlwZWxpbmU6
OnVzZXMoY29uc3QgVFZhcmlhYmxlICZ2YXIpIGNvbnN0CisreworKyAgICBpZiAodmFyLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKysgICAgeworKyAg
ICAgICAgcmV0dXJuICZ2YXIgPT0gZ2xvYmFsSW5zdGFuY2VWYXI7CisrICAgIH0KKysKKysgICAg
Y29uc3QgVFR5cGUgJm5vZGVUeXBlICAgICAgPSB2YXIuZ2V0VHlwZSgpOworKyAgICBjb25zdCBU
UXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworKworKyAgICBz
d2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisrICAg
ICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUF0dHJpYnV0ZToKKysgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJbjoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4
T3V0OgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhPdXQ6CisrICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAgICAgICAgICAgICAgIGNh
c2UgVFF1YWxpZmllcjo6RXZxRmxhdE91dDoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlm
aWVyOjpFdnFQb2ludFNpemU6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
U21vb3RoT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUNlbnRyb2lk
T3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3RpdmVP
dXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ091dDoKKysg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysK
KysgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAgICAgICBzd2l0Y2ggKHF1
YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxRnJhZ21lbnRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFG
bGF0SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoSW46Cisr
ICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRJbjoKKysgICAgICAg
ICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlSW46CisrICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ0luOgorKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBU
eXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRP
dXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9yOgorKyAg
ICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEYXRhOgorKyAgICAgICAgICAg
ICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEZXB0aDoKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlw
ZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtOgor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQor
KworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICAgICAg
c3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cUdsb2JhbDoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlv
blZlcnRleEdsb2JhbHM6CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQor
KworKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAg
ICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29vcmQ6CisrICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlm
aWVyOjpFdnFGcm9udEZhY2luZzoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3Jt
czoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8gZ2xvYmFsSW5zdGFuY2VWYXIgc2hv
dWxkIGJlIG5vbi1udWxsIGFuZCB0aHVzIG5ldmVyIHJlYWNoIGhlcmUuCisrICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAg
ICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkpOworKworKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiBOYW1lKHZhcikg
PT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworKyAgICB9CisrfQor
KworK05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKKyt7CisrICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAgIHN3aXRjaCAodHlwZSkKKysgICAg
eworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICBuYW1lID0gVkFS
SUFOVF9OQU1FKHZhcmlhbnQsICJWZXJ0ZXhJbiIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAiVmVydGV4T3V0Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFN
RSh2YXJpYW50LCAiRnJhZ21lbnRJbiIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAg
Y2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJGcmFnbWVudE91dCIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAg
Y2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFN
RSh2YXJpYW50LCAiVXNlclVuaWZvcm1zIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAiQW5nbGVVbmlmb3JtcyIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9
IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiTm9uQ29uc3RHbG9iYWxzIik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAg
ICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkludm9jYXRpb25WZXJ0ZXhH
bG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okludm9j
YXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2
YXJpYW50LCAiSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscyIpOworKyAgICAgICAgICAgIGJyZWFr
OworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJ
QU5UX05BTUUodmFyaWFudCwgIlRleHR1cmVFbnZzIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
ICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklB
TlRfTkFNRSh2YXJpYW50LCAiSW5zdGFuY2VJZCIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICB9CisrICAgIHJldHVybiBOYW1lKG5hbWUpOworK30KKysKKytOYW1lIFBpcGVsaW5lOjpnZXRT
dHJ1Y3RJbnN0YW5jZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25zdAorK3sKKysgICAgY29uc3Qg
Y2hhciAqbmFtZTsKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5
cGU6OlZlcnRleEluOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
InZlcnRleEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OlZl
cnRleE91dDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ2ZXJ0
ZXhPdXQiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21l
bnRJbjoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJmcmFnbWVu
dEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
T3V0OgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImZyYWdtZW50
T3V0Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlm
b3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ1c2VyVW5p
Zm9ybXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJhbmds
ZVVuaWZvcm1zIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Ok5v
bkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJub25Db25zdEdsb2JhbHMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9IFZB
UklBTlRfTkFNRSh2YXJpYW50LCAiaW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKysgICAgICAg
ICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
czoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJpbnZvY2F0aW9u
RnJhZ21lbnRHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5
cGU6OlRleHR1cmU6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAi
dGV4dHVyZUVudnMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6
SW5zdGFuY2VJZDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJp
bnN0YW5jZUlkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgcmV0dXJuIE5h
bWUobmFtZSk7CisrfQorKworK3N0YXRpYyBib29sIEFsbG93UGFja2luZyhQaXBlbGluZTo6VHlw
ZSB0eXBlKQorK3sKKysgICAgdXNpbmcgVHlwZSA9IFBpcGVsaW5lOjpUeXBlOworKworKyAgICBz
d2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJ
bjoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgY2FzZSBUeXBlOjpG
cmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgIGNh
c2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRH
bG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKysg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKysgICAgICAgIGNh
c2UgVHlwZTo6VGV4dHVyZToKKysgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKysgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrc3RhdGljIGJvb2wgQWxsb3dQ
YWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCisreworKyAgICB1c2luZyBUeXBlID0gUGlwZWxp
bmU6OlR5cGU7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBU
eXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46
CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBUeXBlOjpB
bmdsZVVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6Cisr
ICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2Fz
ZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAgY2FzZSBUeXBl
OjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKytl
bnVtIENvbXBhcmUKKyt7CisrICAgIExULAorKyAgICBMVEUsCisrICAgIEVRLAorKyAgICBHVEUs
CisrICAgIEdULAorK307CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RhdGljIGJvb2wg
Q29tcGFyZUJ5KENvbXBhcmUgb3AsIGNvbnN0IFQgJngsIGNvbnN0IFQgJnkpCisreworKyAgICBz
d2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIExUOgorKyAgICAgICAgICAgIHJldHVy
biB4IDwgeTsKKysgICAgICAgIGNhc2UgTFRFOgorKyAgICAgICAgICAgIHJldHVybiB4IDw9IHk7
CisrICAgICAgICBjYXNlIEVROgorKyAgICAgICAgICAgIHJldHVybiB4ID09IHk7CisrICAgICAg
ICBjYXNlIEdURToKKysgICAgICAgICAgICByZXR1cm4geCA+PSB5OworKyAgICAgICAgY2FzZSBH
VDoKKysgICAgICAgICAgICByZXR1cm4geCA+IHk7CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUg
PFRCYXNpY1R5cGUgQlQsIENvbXBhcmUgQ21wLCBpbnQgTWF0Y2hEaW0sIGludCBOZXdEaW0+Cisr
c3RhdGljIGludCBTYXR1cmF0ZVZlY3Rvck9mKGNvbnN0IFRGaWVsZCAmZmllbGQpCisreworKyAg
ICBzdGF0aWNfYXNzZXJ0KE5ld0RpbSA+PSBNYXRjaERpbSwgIiIpOworKworKyAgICBjb25zdCBU
VHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIEFTU0VSVCh0eXBlLmlzU2NhbGFyKCkg
fHwgdHlwZS5pc1ZlY3RvcigpKTsKKysKKysgICAgY29uc3QgYm9vbCBjb25kID0gdHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKysgICAgICAgICAgICAgICAg
ICAgICAgQ29tcGFyZUJ5KENtcCwgdHlwZS5nZXROb21pbmFsU2l6ZSgpLCBNYXRjaERpbSk7Cisr
CisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gTmV3RGltOworKyAgICB9
CisrICAgIHJldHVybiAwOworK30KKysKKytNb2RpZnlTdHJ1Y3RDb25maWcgUGlwZWxpbmU6OmV4
dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCkgY29uc3QKKyt7CisrICAgIHVzaW5nIFByZWQgICA9
IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworKyAgICB1c2luZyBTYXRWZWMgPSBNb2Rp
ZnlTdHJ1Y3RDb25maWc6OlNhdHVyYXRlVmVjdG9yOworKworKyAgICBNb2RpZnlTdHJ1Y3RDb25m
aWcgY29uZmlnKAorKyAgICAgICAgaXNQaXBlbGluZU91dCgpID8gQ29udmVydFR5cGU6Ok9yaWdp
bmFsVG9Nb2RpZmllZCA6IENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3JpZ2luYWwsCisrICAgICAg
ICBBbGxvd1BhY2tpbmcodHlwZSksIEFsbG93UGFkZGluZyh0eXBlKSk7CisrCisrICAgIGNvbmZp
Zy5leHRlcm5hbEFkZHJlc3NTcGFjZSA9IGV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisrCisrICAg
IHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKysg
ICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAg
ICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZDo6VHJ1ZTsKKysgICAgICAg
ICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGNv
bmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGNvbmZp
Zy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgICAgIGNvbmZpZy5p
bmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGNvbmZpZy5zcGxp
dE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVT
dHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBjb25maWcuaW5saW5lQXJy
YXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisrICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0
cml4Q29sdW1ucyAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVT
dHJ1Y3QgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJh
dGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmllbGQpIHsKKysgICAgICAgICAg
ICAgICAgaWYgKGludCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRJbnQsIExU
LCA0LCA0PihmaWVsZCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmIChpbnQg
cyA9IFNhdHVyYXRlVmVjdG9yT2Y8VEJhc2ljVHlwZTo6RWJ0VUludCwgTFQsIDQsIDQ+KGZpZWxk
KSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaWYgKGludCBzID0gU2F0dXJhdGVW
ZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZpZWxkKSkKKysgICAgICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgfTsKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAg
ICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJlZDo6VHJ1
ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVNYXRyaXhSb3dzICAgICAgICAgICA9IFNh
dFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJP
clZlY3RvckFycmF5cyA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysgICAgICAgICAgICBjb25m
aWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAg
ICAgICAgY29uZmlnLmluaXRpYWxCbG9ja1N0b3JhZ2UgPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpF
YnNTdGQ0MzA7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAg
ICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgICAgICBicmVhazsK
KysKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAg
ICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5
cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbmZpZzsKKyt9CisrCisrYm9vbCBQ
aXBlbGluZTo6YWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBj
b25zdAorK3sKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6
OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2Fz
ZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6
CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0
ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBU
eXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25W
ZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9i
YWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrfQorKworK2Jv
b2wgUGlwZWxpbmU6OmlzUGlwZWxpbmVPdXQoKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0eXBl
KQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBU
eXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAg
ICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6Ok5vbkNv
bnN0YW50R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2Jh
bHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAg
ICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6
CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0
ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworKyAgICB9CisrfQorKworK0FkZHJlc3NTcGFjZSBQaXBlbGluZTo6ZXh0ZXJu
YWxBZGRyZXNzU3BhY2UoKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVu
dEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgor
KyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFn
bWVudE91dDoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgICAgIHJl
dHVybiBBZGRyZXNzU3BhY2U6OlRocmVhZDsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VXNlclVu
aWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorKyAgICAgICAgICAg
IHJldHVybiBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworKyAgICB9CisrfQorKworK2Jvb2wgUGlw
ZWxpbmVTdHJ1Y3RzOjptYXRjaGVzKGNvbnN0IFRTdHJ1Y3R1cmUgJnMsIGJvb2wgaW50ZXJuYWws
IGJvb2wgZXh0ZXJuYWwpIGNvbnN0CisreworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBwc1tdID0geworKyAgICAgICAgZnJhZ21lbnRJbiwKKysgICAgICAgIGZyYWdtZW50T3V0LAor
KyAgICAgICAgdmVydGV4SW4sCisrICAgICAgICB2ZXJ0ZXhPdXQsCisrICAgICAgICB1c2VyVW5p
Zm9ybXMsCisrICAgICAgICBhbmdsZVVuaWZvcm1zLAorKyAgICAgICAgbm9uQ29uc3RhbnRHbG9i
YWxzLAorKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisrICAgICAgICBpbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgdGV4dHVyZSwKKysgICAgICAgIGluc3RhbmNl
SWQsCisrICAgIH07CisrICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHBzKQorKyAgICB7CisrICAg
ICAgICBpZiAoaW50ZXJuYWwgJiYgcC5pbnRlcm5hbCA9PSAmcykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChleHRlcm5hbCAm
JiBwLmV4dGVybmFsID09ICZzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5l
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxp
bmUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjliZjQ3NmEKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9QaXBlbGluZS5oCitAQCAtMCwwICsxLDEyMyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUElQRUxJTkVf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BJ
UEVMSU5FX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlm
eVN0cnVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBE
YXRhIHRoYXQgaXMgc2NvcGVkIGFzIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgZm9yIGEgZ2l2
ZW4gcGlwZWxpbmUuCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IFBpcGVsaW5lU2Nv
cGVkCisreworKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVybmFs
bHkgdG8gdGhlIHByb2dyYW0uCisrICAgIC8vIE1heSBjb2luY2lkZSB3aXRoIGBpbnRlcm5hbGAs
IGJ1dCBtYXkgYWxzbyBkaXZlcmdlIGZyb20gYGludGVybmFsYC4KKysgICAgY29uc3QgVCAqZXh0
ZXJuYWwgPSBudWxscHRyOworKworKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0
YWxrIGludGVybmFsbHkgd2l0aGluIHRoZSBwcm9ncmFtLgorKyAgICAvLyBNYXkgY29pbmNpZGUg
d2l0aCBgZXh0ZXJuYWxgLCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9tIGBleHRlcm5hbGAuCisr
ICAgIGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKysKKysgICAgLy8gUmV0dXJucyB0cnVl
IGlmZiB0aGUgaW5wdXQgY29pbmNpZGVzIHdpdGggZWl0aGVyIGBleHRlcm5hbGAgb3IgYGludGVy
bmFsYCBkYXRhLgorKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJl
dHVybiBleHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKysKKysg
ICAgLy8gQm90aCBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIHJlcHJlc2VudGF0aW9ucyBhcmUg
bm9uLW51bGwuCisrICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVy
bmFsICYmIGludGVybmFsOyB9CisrCisrICAgIC8vIEJvdGggYGV4dGVybmFsYCBhbmQgYGludGVy
bmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG51bGwuCisrICAgIGJvb2wgaXNUb3RhbGx5RW1wdHko
KSBjb25zdCB7IHJldHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisrCisrICAgIC8vIEJv
dGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIHRoZSBzYW1l
LgorKyAgICBib29sIGlzVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVy
bmFsOyB9CisrfTsKKysKKysvLyBSZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVs
aW5lLgorK2NsYXNzIFBpcGVsaW5lCisreworKyAgcHVibGljOgorKyAgICBlbnVtIGNsYXNzIFR5
cGUKKysgICAgeworKyAgICAgICAgVmVydGV4SW4sCisrICAgICAgICBWZXJ0ZXhPdXQsCisrICAg
ICAgICBGcmFnbWVudEluLAorKyAgICAgICAgRnJhZ21lbnRPdXQsCisrICAgICAgICBVc2VyVW5p
Zm9ybXMsCisrICAgICAgICBBbmdsZVVuaWZvcm1zLAorKyAgICAgICAgTm9uQ29uc3RhbnRHbG9i
YWxzLAorKyAgICAgICAgSW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisrICAgICAgICBJbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgVGV4dHVyZSwKKysgICAgICAgIEluc3RhbmNl
SWQsCisrICAgIH07CisrCisrICAgIGVudW0gY2xhc3MgVmFyaWFudAorKyAgICB7CisrICAgICAg
ICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisrICAgICAgICAvLyBGb3IgZXh0
ZXJuYWwgcGlwZWxpbmUgdXNlcyBpZiBwaXBlbGluZSBkb2VzIG5vdCByZXF1aXJlIHNwbGl0dGlu
ZyBvciBzYXR1cmF0aW9uLgorKyAgICAgICAgT3JpZ2luYWwsCisrCisrICAgICAgICAvLyBPbmx5
IGZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHRoZSBwaXBlbGluZSB3YXMgc3BsaXQgb3Ig
c2F0dXJhdGVkLgorKyAgICAgICAgTW9kaWZpZWQsCisrICAgIH07CisrCisrICBwdWJsaWM6Cisr
ICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKysgICAgVHlwZSB0eXBlOworKworKyAg
ICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUgc3RydWN0
IGFscmVhZHkgZXhpc3RzLgorKyAgICAvLyBJZiBub24tbnVsbCBzdHJ1Y3Qgc3BsaXR0aW5nIHNo
b3VsZCBub3QgYmUgbmVlZGVkLgorKyAgICBjb25zdCBUVmFyaWFibGUgKmdsb2JhbEluc3RhbmNl
VmFyOworKworKyAgcHVibGljOgorKyAgICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB2YXJpYWJs
ZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS4KKysgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJs
ZSAmdmFyKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgbmFtZSBmb3IgdGhlIHN0cnVj
dCB0eXBlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlzIHBpcGVsaW5lLgorKyAgICBOYW1l
IGdldFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisrCisrICAgIC8vIFJl
dHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgaW5zdGFuY2UgdGhhdCBzdG9yZXMgdmFyaWFi
bGVzIG9mIHRoaXMgcGlwZWxpbmUuCisrICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZh
cmlhbnQgdmFyaWFudCkgY29uc3Q7CisrCisrICAgIE1vZGlmeVN0cnVjdENvbmZpZyBleHRlcm5h
bFN0cnVjdE1vZGlmeUNvbmZpZygpIGNvbnN0OworKworKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHBpcGVsaW5lIGFsd2F5cyByZXF1aXJlcyBhIG5vbi1wYXJhbWV0ZXIgbG9jYWwgaW5zdGFu
Y2UgZGVjbGFyYXRpb24gb2YKKysgICAgLy8gdGhlIHBpcGVsaW5lIHN0cnVjdHVyZXMuCisrICAg
IGJvb2wgYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25z
dDsKKysKKysgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgcGlwZWxpbmUgaXMgYW4gb3V0cHV0
IHBpcGVsaW5lLiBUaGUgZXh0ZXJuYWwgcGlwZWxpbmUgc3RydWN0dXJlIHNob3VsZAorKyAgICAv
LyBiZSByZXR1cm5lZCBmcm9tIGBtYWluYC4KKysgICAgYm9vbCBpc1BpcGVsaW5lT3V0KCkgY29u
c3Q7CisrCisrICAgIEFkZHJlc3NTcGFjZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0Owor
K307CisrCisrLy8gQSBjb2xsZWN0aW9uIG9mIHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4K
KytzdHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RzIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisreworKyAgICBQ
aXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudEluOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiBmcmFnbWVudE91dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVy
ZT4gdmVydGV4SW47CisrICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsK
KysgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gdXNlclVuaWZvcm1zOworKyAgICBQaXBl
bGluZVNjb3BlZDxUU3RydWN0dXJlPiBhbmdsZVVuaWZvcm1zOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7CisrICAgIFBpcGVsaW5lU2NvcGVkPFRT
dHJ1Y3R1cmU+IGludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOworKyAgICBQaXBlbGluZVNjb3BlZDxU
U3RydWN0dXJlPiBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBp
bnN0YW5jZUlkOworKworKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0cnVjdHVyZSAmcywgYm9v
bCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7CisrfTsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1BJUEVMSU5FX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKK25ldyBm
aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YmY1YTAyCistLS0gL2Rldi9udWxsCisr
KysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3Jh
bVByZWx1ZGUuY3BwCitAQCAtMCwwICsxLDM3NTcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5j
bHVkZSA8Y2N0eXBlPgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5r
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29u
c3RhbnROYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrdXNpbmcgbmFt
ZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisr
eworKworK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7
CisrICAgIHVzaW5nIExpbmVUYWcgICAgICAgPSB1bnNpZ25lZDsKKysgICAgdXNpbmcgRnVuY0Vt
aXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlvbiAmKTsK
KysgICAgdXNpbmcgRnVuY1RvRW1pdHRlciA9IHN0ZDo6bWFwPE5hbWUsIEZ1bmNFbWl0dGVyPjsK
KysKKysgIHB1YmxpYzoKKysgICAgUHJvZ3JhbVByZWx1ZGUoVEluZm9TaW5rQmFzZSAmb3V0LCBj
b25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXQob3V0KQorKyAgICB7CisrICAgICAgICBBTFdB
WVNfSU5MSU5FKCk7CisrCisrICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGVxdWFsVmVjdG9yKCk7CisrICAgICAgICAgICAgZXF1YWxNYXRyaXgo
KTsKKysgICAgICAgIH0KKysKKysjaWYgMQorKyAgICAgICAgbU91dCA8PCAiI2RlZmluZSBBTkdM
RV90ZW5zb3IgbWV0YWw6OmFycmF5XG4iOworKyNlbHNlCisrICAgICAgICB0ZW5zb3IoKTsKKysj
ZW5kaWYKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgYm9vbCBlbWl0R3VhcmQoTGluZVRh
ZyBsaW5lVGFnKQorKyAgICB7CisrICAgICAgICBpZiAobUVtaXR0ZWQuZmluZChsaW5lVGFnKSAh
PSBtRW1pdHRlZC5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgICAgICB9CisrICAgICAgICBtRW1pdHRlZC5pbnNlcnQobGluZVRhZyk7CisrICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBzdGF0aWMgRnVuY1RvRW1pdHRlciBCdWls
ZEZ1bmNUb0VtaXR0ZXIoKTsKKysKKysgICAgdm9pZCB2aXNpdE9wZXJhdG9yKFRPcGVyYXRvciBv
cCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKysgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCwKKysgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpOworKyAgICB2b2lkIHZp
c2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUgJnR5cGUpOworKyAgICB2
b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgVFZhcmlhYmxlICZ2YXIpOworKyAgICB2b2lkIHZpc2l0
U3RydWN0dXJlKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpOworKworKyAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBvdmVycmlkZTsKKysgICAg
Ym9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92
ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5vZGUpIG92ZXJy
aWRlOworKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCBBTFdBWVNfSU5MSU5FKCk7CisrCisrICAg
IHZvaWQgaW5jbHVkZV9tZXRhbF9hdG9taWMoKTsKKysgICAgdm9pZCBpbmNsdWRlX21ldGFsX2Nv
bW1vbigpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisrICAgIHZvaWQg
aW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0aCgp
OworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisrICAgIHZvaWQgaW5jbHVkZV9t
ZXRhbF9wYWNrKCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9yZWxhdGlvbmFsKCk7CisrCisr
ICAgIHZvaWQgZW5hYmxlX2lmKCk7CisrICAgIHZvaWQgc2NhbGFyX29mKCk7CisrICAgIHZvaWQg
aXNfc2NhbGFyKCk7CisrICAgIHZvaWQgaXNfdmVjdG9yKCk7CisrICAgIHZvaWQgaXNfbWF0cml4
KCk7CisrICAgIHZvaWQgYWRkcmVzc29mKCk7CisrICAgIHZvaWQgZGlzdGFuY2UoKTsKKysgICAg
dm9pZCBsZW5ndGgoKTsKKysgICAgdm9pZCBkb3QoKTsKKysgICAgdm9pZCBub3JtYWxpemUoKTsK
KysgICAgdm9pZCBmYWNlZm9yd2FyZCgpOworKyAgICB2b2lkIHJlZmxlY3QoKTsKKysgICAgdm9p
ZCByZWZyYWN0KCk7CisrICAgIHZvaWQgZGVncmVlcygpOworKyAgICB2b2lkIHJhZGlhbnMoKTsK
KysgICAgdm9pZCBtb2QoKTsKKysgICAgdm9pZCBwb3N0SW5jcmVtZW50TWF0cml4KCk7CisrICAg
IHZvaWQgcHJlSW5jcmVtZW50TWF0cml4KCk7CisrICAgIHZvaWQgcG9zdERlY3JlbWVudE1hdHJp
eCgpOworKyAgICB2b2lkIHByZURlY3JlbWVudE1hdHJpeCgpOworKyAgICB2b2lkIG5lZ2F0ZU1h
dHJpeCgpOworKyAgICB2b2lkIG1hdG11bEFzc2lnbigpOworKyAgICB2b2lkIGF0YW4oKTsKKysg
ICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9pZCBzdWJNYXRyaXhTY2Fs
YXJBc3NpZ24oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBzdWJN
YXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBk
aXZNYXRyaXhTY2FsYXJGYXN0KCk7CisrICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7
CisrICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduRmFzdCgpOworKyAgICB2b2lkIHRlbnNv
cigpOworKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUoKTsKKysgICAgdm9pZCBjb21wb25l
bnRXaXNlRGl2aWRlQXNzaWduKCk7CisrICAgIHZvaWQgY29tcG9uZW50V2lzZU11bHRpcGx5KCk7
CisrICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisrICAgIHZvaWQgaW52ZXJzZTIoKTsKKysgICAg
dm9pZCBpbnZlcnNlMygpOworKyAgICB2b2lkIGludmVyc2U0KCk7CisrICAgIHZvaWQgZXF1YWxW
ZWN0b3IoKTsKKysgICAgdm9pZCBlcXVhbE1hdHJpeCgpOworKyAgICB2b2lkIG5vdEVxdWFsVmVj
dG9yKCk7CisrICAgIHZvaWQgbm90RXF1YWxTdHJ1Y3QoKTsKKysgICAgdm9pZCBlcXVhbEFycmF5
KCk7CisrICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworKyAgICB2b2lkIHNpZ24oKTsKKysgICAg
dm9pZCBwYWNrX2hhbGZfMngxNigpOworKyAgICB2b2lkIHVucGFja19oYWxmXzJ4MTYoKTsKKysg
ICAgdm9pZCB2ZWN0b3JFbGVtUmVmKCk7CisrICAgIHZvaWQgc3dpenpsZVJlZigpOworKyAgICB2
b2lkIG91dCgpOworKyAgICB2b2lkIGlub3V0KCk7CisrICAgIHZvaWQgZmxhdHRlbkFycmF5KCk7
CisrICAgIHZvaWQgY2FzdFZlY3RvcigpOworKyAgICB2b2lkIGNhc3RNYXRyaXgoKTsKKysgICAg
dm9pZCBmdW5jdGlvbkNvbnN0YW50cygpOworKyAgICB2b2lkIGdyYWRpZW50KCk7CisrICAgIHZv
aWQgdGV4dHVyZUVudigpOworKyAgICB2b2lkIHRleGVsRmV0Y2goKTsKKysgICAgdm9pZCB0ZXhl
bEZldGNoT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZSgpOworKyAgICB2b2lkIHRleHR1cmVf
Z2VuZXJpY19mbG9hdDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0
KCk7CisrICAgIHZvaWQgdGV4dHVyZV9nZW5lcmljX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1
cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxv
YXQzKCk7CisrICAgIHZvaWQgdGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCgpOworKyAgICB2
b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVw
dGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zs
b2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworKyAg
ICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4dHVy
ZV90ZXh0dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlX3RleHR1
cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxv
YXQ0X2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZTFETG9kKCk7CisrICAgIHZvaWQgdGV4dHVy
ZTFEUHJvaigpOworKyAgICB2b2lkIHRleHR1cmUxRFByb2pMb2QoKTsKKysgICAgdm9pZCB0ZXh0
dXJlMkQoKTsKKysgICAgdm9pZCB0ZXh0dXJlMkRMb2QoKTsKKysgICAgdm9pZCB0ZXh0dXJlMkRQ
cm9qKCk7CisrICAgIHZvaWQgdGV4dHVyZTJEUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmUz
RExvZCgpOworKyAgICB2b2lkIHRleHR1cmUzRFByb2ooKTsKKysgICAgdm9pZCB0ZXh0dXJlM0RQ
cm9qTG9kKCk7CisrICAgIHZvaWQgdGV4dHVyZUN1YmUoKTsKKysgICAgdm9pZCB0ZXh0dXJlQ3Vi
ZUxvZCgpOworKyAgICB2b2lkIHRleHR1cmVDdWJlUHJvaigpOworKyAgICB2b2lkIHRleHR1cmVD
dWJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVHcmFkKCk7CisrICAgIHZvaWQgdGV4dHVy
ZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworKyAgICB2b2lkIHRleHR1cmVH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3Jh
ZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisrICAgIHZvaWQgdGV4dHVyZUdyYWRf
ZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFkX2Rl
cHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFk
X2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1cmVHcmFk
X3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4dHVyZUdy
YWRPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0Tl9m
bG9hdE5fZmxvYXROX2ludE4oKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmlj
X2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJl
R3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9p
ZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50
MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQz
X2Zsb2F0M19pbnQzKCk7CisrICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVyZWN1YmVf
ZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICB2b2lkIHRleHR1cmVMb2QoKTsKKysg
ICAgdm9pZCB0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisrICAgIHZvaWQgdGV4dHVyZUxv
ZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMo
KTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0MygpOworKyAgICB2
b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisrICAgIHZvaWQgdGV4dHVy
ZUxvZE9mZnNldCgpOworKyAgICB2b2lkIHRleHR1cmVPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0
dXJlUHJvaigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZCgpOworKyAgICB2b2lkIHRleHR1
cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisrICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lk
IHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9hdDMoKTsKKysgICAg
dm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRP
ZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisrICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXRfdGV4dHVyZTNkX2Zs
b2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4
dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZF9k
ZXB0aDJkX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9h
dDQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZE9mZnNldCgpOworKyAgICB2b2lkIHRleHR1
cmVQcm9qT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZVNpemUoKTsKKysKKysgIHByaXZhdGU6
CisrICAgIFRJbmZvU2lua0Jhc2UgJm1PdXQ7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxMaW5l
VGFnPiBtRW1pdHRlZDsKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTeW1ib2wgKj4g
bUhhbmRsZWQ7CisrICAgIGNvbnN0IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWls
ZEZ1bmNUb0VtaXR0ZXIoKTsKKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysK
KysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNkZWZpbmUgUFJPR1JBTV9QUkVMVURFX0lO
Q0xVREUoaGVhZGVyKSAgICAgICAgICAgICBcCisrICAgIHZvaWQgUHJvZ3JhbVByZWx1ZGU6Omlu
Y2x1ZGVfIyNoZWFkZXIoKSAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVtaXRHdWFyZChfX0xJTkVf
XykpICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBtT3V0IDw8ICgiI2luY2x1ZGUg
PCIgI2hlYWRlciAiPlxuXG4iKTsgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKysjZGVmaW5lIFBST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKG5hbWUsIGNvZGUsIC4uLikgICAgICAgICAgICAgICAgXAorKyAgICB2b2lkIFBy
b2dyYW1QcmVsdWRlOjpuYW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgIEFTU0VSVChjb2RlWzBdID09ICdcbicpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVtaXRHdWFyZChfX0xJTkVfXykpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBf
X1ZBX0FSR1NfXzsgLyogZGVwZW5kZW5jaWVzICovICAgICAgICAgICAgICAgICAgICAgXAorKyAg
ICAgICAgICAgIG1PdXQgPDwgKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIgKj4oY29kZSAiXG4iKSAr
IDEpOyBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfYXRvbWljKQorK1BST0dSQU1fUFJFTFVE
RV9JTkNMVURFKG1ldGFsX2NvbW1vbikKKytQUk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9n
ZW9tZXRyaWMpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfZ3JhcGhpY3MpCisrUFJP
R1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKKytQUk9HUkFNX1BSRUxVREVfSU5DTFVE
RShtZXRhbF9tYXRyaXgpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfcGFjaykKKytQ
Uk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoQUxXQVlTX0lOTElORSwg
UiIoCisrI2RlZmluZSBBTkdMRV9BTFdBWVNfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19p
bmxpbmUpKQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVuYWJsZV9pZiwgUiIo
CisrdGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX2Vu
YWJsZV9pZiB7fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZW5hYmxl
X2lmPHRydWUsIFQ+CisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9OworK3RlbXBsYXRlIDxi
b29sIEI+CisrdXNpbmcgQU5HTEVfZW5hYmxlX2lmX3QgPSB0eXBlbmFtZSBBTkdMRV9lbmFibGVf
aWY8Qj46OnR5cGU7CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoc2NhbGFyX29m
LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mCisr
eworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3Vz
aW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUgQU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBl
OworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3NjYWxhciwgUiIoCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2lzX3NjYWxhciB7fTsKKysjZGVmaW5l
IEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBB
TkdMRV9pc19zY2FsYXI8c2NhbGFyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfQorK0FOR0xF
X0RFRklORV9TQ0FMQVIoYm9vbCk7CisrQU5HTEVfREVGSU5FX1NDQUxBUihjaGFyKTsKKytBTkdM
RV9ERUZJTkVfU0NBTEFSKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKGludCk7CisrQU5H
TEVfREVGSU5FX1NDQUxBUihsb25nKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVjaGFyKTsKKytB
TkdMRV9ERUZJTkVfU0NBTEFSKHVzaG9ydCk7CisrQU5HTEVfREVGSU5FX1NDQUxBUih1aW50KTsK
KytBTkdMRV9ERUZJTkVfU0NBTEFSKHVsb25nKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKGhhbGYp
OworK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKykiKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGlzX3ZlY3RvciwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCisreworKyAgICBlbnVt
IHsgdmFsdWUgPSBmYWxzZSB9OworK307CisrI2RlZmluZSBBTkdMRV9ERUZJTkVfVkVDVE9SKHNj
YWxhcikgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yPG1ldGFsOjpz
Y2FsYXIgIyMgMj4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKysgICAgdGVtcGxhdGUg
PD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc192ZWN0
b3I8bWV0YWw6OnNjYWxhciAjIyA0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMj4g
eyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdM
RV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFy
ICMjIDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RFRklORV9WRUNUT1IoYm9v
bCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKHNo
b3J0KTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGludCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUihs
b25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKHVjaGFyKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9S
KHVzaG9ydCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKKytBTkdMRV9ERUZJTkVfVkVD
VE9SKHVsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGhhbGYpOworK0FOR0xFX0RFRklORV9W
RUNUT1IoZmxvYXQpOworKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhcl9vZigp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX21hdHJpeCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfaXNf
bWF0cml4CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9OworK307CisrI2RlZmluZSBB
TkdMRV9ERUZJTkVfTUFUUklYKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5H
TEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUg
fTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpz
Y2FsYXIgIyMgMngzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
bWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgM3gzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IGVudW0geyB2YWx1
ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4
PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgz
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHg0PiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxh
dGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDJ4Mz4geyB1c2lu
ZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2Fs
YXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAor
KyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMg
M3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0
IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDN4Mz4geyB1c2luZyB0eXBlID0gc2Nh
bGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6
OnNjYWxhciAjIyAzeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IHVzaW5n
IHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxh
cl9vZjxtZXRhbDo6c2NhbGFyICMjIDR4Mz4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisr
ICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyA0
eDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RFRklORV9NQVRSSVgoaGFsZik7
CisrQU5HTEVfREVGSU5FX01BVFJJWChmbG9hdCk7CisrKSIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgc2NhbGFyX29mKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkcmVzc29m
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIFQgKiBBTkdMRV9hZGRyZXNzb2YodGhyZWFkIFQg
JnJlZikKKyt7CisrICAgIHJldHVybiAmcmVmOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShkaXN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVf
ZGlzdGFuY2VfaW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVf
c2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgsIFQgeSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1l
dGFsOjpkaXN0YW5jZSh4LCB5KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cisrc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVf
aXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgg
LSB5KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKKyt7
CisrICAgIHJldHVybiBBTkdMRV9kaXN0YW5jZV9pbXBsPFQ+OjpleGVjKHgsIHkpOworK307Cisr
KSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBp
c19zY2FsYXIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc192ZWN0b3IoKSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRShsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX2xlbmd0aF9p
bXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2Zf
dDxUPiBleGVjKFQgeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpsZW5ndGgoeCk7
CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdMRV9sZW5n
dGhfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46OnZhbHVlPj4K
Kyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IEFO
R0xFX2xlbmd0aChUIHgpCisreworKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46OmV4
ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0
aCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Zl
Y3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGRvdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5H
TEVfZG90X2ltcGwKKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3Nj
YWxhcl9vZl90PFQ+IGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBtZXRh
bDo6ZG90KHgsIHkpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1
Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+
Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4
LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB4ICogeTsKKysgICAgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2Zf
dDxUPiBBTkdMRV9kb3QoVCB4LCBUIHkpCisreworKyAgICByZXR1cm4gQU5HTEVfZG90X2ltcGw8
VD46OmV4ZWMoeCwgeSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNs
dWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9p
ZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21h
dHJpeCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vcm1hbGl6ZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5h
YmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGwKKyt7CisrICAgIHN0YXRp
YyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBtZXRhbDo6bm9ybWFsaXplKHgpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCB4KQorKyAgICB7CisrICAgICAgICByZXR1cm4gQU5HTEVfc2lnbih4KTsK
KysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBUIEFOR0xFX25vcm1hbGl6ZShUIHgpCisreworKyAgICByZXR1cm4gQU5HTEVfbm9ybWFsaXpl
X2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlX21ldGFsX2NvbW1vbigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVf
bWV0YWxfZ2VvbWV0cmljKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCks
CisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfdmVjdG9yKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4
KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgc2lnbigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGZhY2Vmb3J3YXJkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorK3N0cnVjdCBBTkdM
RV9mYWNlZm9yd2FyZF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBU
IGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpm
YWNlZm9yd2FyZChuLCBpLCBucmVmKTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Cisrc3RydWN0IEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8
QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlT
X0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgeworKyAgICAgICAgcmV0dXJu
IEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDogLW47CisrICAgIH0KKyt9OworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9mYWNlZm9yd2Fy
ZChUIG4sIFQgaSwgVCBucmVmKQorK3sKKysgICAgcmV0dXJuIEFOR0xFX2ZhY2Vmb3J3YXJkX2lt
cGw8VD46OmV4ZWMobiwgaSwgbnJlZik7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX21hdHJpeCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdCgpKQorKworK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHJlZmxlY3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3Ry
dWN0IEFOR0xFX3JlZmxlY3RfaW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgVCBleGVjKFQgaSwgVCBuKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbWV0YWw6OnJlZmxl
Y3QoaSwgbik7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBB
TkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+
Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBp
LCBUIG4pCisrICAgIHsKKysgICAgICAgIHJldHVybiBpIC0gVCgyKSAqIEFOR0xFX2RvdChuLCBp
KSAqIG47CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgVCBBTkdMRV9yZWZsZWN0KFQgaSwgVCBuKQorK3sKKysgICAgcmV0dXJuIEFOR0xF
X3JlZmxlY3RfaW1wbDxUPjo6ZXhlYyhpLCBuKTsKKyt9OworKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCks
CisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmcmFjdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K
KytzdHJ1Y3QgQU5HTEVfcmVmcmFjdF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlT
X0lOTElORSBUIGV4ZWMoVCBpLCBUIG4sIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV0YSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZyYWN0KGksIG4sIGV0YSk7CisrICAgIH0KKyt9
OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdMRV9yZWZyYWN0X2ltcGw8VCwg
QU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBz
dGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4sIFQgZXRhKQorKyAgICB7
CisrICAgICAgICBhdXRvIGRvdE5JID0gbiAqIGk7CisrICAgICAgICBhdXRvIGsgPSBUKDEpIC0g
ZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKysgICAgICAgIGlmIChrIDwgVCgw
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gVCgwKTsKKysgICAgICAgIH0KKysg
ICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZXRhICogaSAtIChl
dGEgKiBkb3ROSSArIG1ldGFsOjpzcXJ0KGspKSAqIG47CisrICAgICAgICB9CisrICAgIH0KKyt9
OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9y
ZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCisreworKyAgICByZXR1
cm4gQU5HTEVfcmVmcmFjdF9pbXBsPFQ+OjpleGVjKGksIG4sIGV0YSk7CisrfTsKKyspIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxh
cigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNp
Z24sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3NpZ25faW1wbAorK3sKKysg
ICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKysgICAgeworKyAgICAg
ICAgcmV0dXJuIG1ldGFsOjpzaWduKHgpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8PgorK3N0
cnVjdCBBTkdMRV9zaWduX2ltcGw8aW50PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgaW50IGV4ZWMoaW50IHgpCisrICAgIHsKKysgICAgICAgIHJldHVybiAoMCA8IHgpIC0g
KHggPCAwKTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBOPgorK3N0cnVjdCBBTkdMRV9z
aWduX2ltcGw8bWV0YWw6OnZlYzxpbnQsIE4+PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZ
U19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisr
ICAgIHsKKysgICAgICAgIG1ldGFsOjp2ZWM8aW50LCBOPiBzOworKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOOyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAgc1tpXSA9IEFOR0xF
X3NpZ25faW1wbDxpbnQ+OjpleGVjKHhbaV0pOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu
IHM7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgVCBBTkdMRV9zaWduKFQgeCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9zaWduX2ltcGw8
VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl
X21ldGFsX2NvbW1vbigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGF0YW4sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCisreworKyAgICByZXR1cm4gbWV0
YWw6OmF0YW4oeU92ZXJYKTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5LCBUIHgpCisreworKyAgICByZXR1cm4gbWV0YWw6
OmF0YW4yKHksIHgpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl
X21ldGFsX21hdGgoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBSIigK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfZGVn
cmVlcyhUIHgpCisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oNTcuMjk1Nzc5NTEzMDgy
MzIpICogeDsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmFkaWFucywg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xF
X3JhZGlhbnMoVCB4KQorK3sKKysgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUx
OTk0MzI5NWUtMikgKiB4OworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSht
b2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CisrQU5HTEVfQUxXQVlTX0lOTElORSBYIEFOR0xFX21vZChYIHgsIFkgeSkK
Kyt7CisrICAgIHJldHVybiB4IC0geSAqIG1ldGFsOjpmbG9vcih4IC8geSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0aCgpKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHBhY2tfaGFsZl8yeDE2LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorK0FOR0xFX0FMV0FZU19JTkxJTkUgdWludCBBTkdMRV9wYWNrX2hhbGZfMngxNihm
bG9hdDIgdikKKyt7CisrICAgIHJldHVybiBhc190eXBlPHVpbnQ+KGhhbGYyKHYpKTsKKyt9Cisr
KSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh1bnBhY2tfaGFsZl8yeDE2LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19JTkxJTkUgZmxvYXQyIEFO
R0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorK3sKKysgICAgcmV0dXJuIGZsb2F0Mihhc190
eXBlPGhhbGYyPih4KSk7CisrfQorKykiLCApCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
bWF0bXVsQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVf
QUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmb3BlcmF0b3IqPSh0
aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmYSwgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiBi
KQorK3sKKysgICAgYSA9IGEgKiBiOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVy
YXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQpCisrewor
KyAgICBhdXRvIGIgPSBhOworKyAgICBhICs9IFQoMSk7CisrICAgIHJldHVybiBiOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQg
Um93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZh
KQorK3sKKysgICAgYSArPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUocG9zdERlY3JlbWVudE1hdHJpeCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci0t
KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQpCisreworKyAgICBh
dXRvIGIgPSBhOworKyAgICBhIC09IFQoMSk7CisrICAgIHJldHVybiBiOworK30KKyspIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShwcmVEZWNyZW1lbnRNYXRyaXgsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQorK3sK
KysgICAgYSAtPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUobmVnYXRlTWF0cml4LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLShtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+IG0pCisreworKyAgICBmb3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBD
b2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAgdGhyZWFkIGF1dG8gJm1Db2wgPSBtW2NvbF07
CisrICAgICAgICBtQ29sID0gLW1Db2w7CisrICAgIH0KKysgICAgcmV0dXJuIG07CisrfQorKyki
LCApCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNzaWduLCBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9y
Kz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAg
ICBtW2NvbF0gKz0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9CisrKSIpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9y
KyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKKyt7CisrICAgIG0gKz0geDsK
KysgICAgcmV0dXJuIG07CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1h
dHJpeFNjYWxhckFzc2lnbigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHN1Yk1hdHJp
eFNjYWxhckFzc2lnbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhy
ZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLT0odGhyZWFkIG1ldGFs
OjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNv
bCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBtW2NvbF0gLT0geDsK
KysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItKG1ldGFsOjptYXRy
aXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQorK3sKKysgICAgbSAtPSB4OworKyAgICByZXR1cm4g
bTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNz
aWduKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWdu
RmFzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFs
OjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8
VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIHggPSBUKDEpIC8geDsKKysgICAgZm9y
IChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisrICAgIHsKKysgICAgICAgIG1b
Y29sXSAqPSB4OworKyAgICB9CisrICAgIHJldHVybiBtOworK30KKyspIiwgKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNjYWxhckFzc2lnbiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQg
eCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAg
ICB7CisrICAgICAgICBtW2NvbF0gLz0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9Cisr
KSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRyaXhTY2FsYXJGYXN0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA8PSAy
MjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6
Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCisreworKyAgICBtIC89IHg7CisrICAgIHJl
dHVybiBtOworK30KKysjZW5kaWYKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBkaXZN
YXRyaXhTY2FsYXJBc3NpZ25GYXN0KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2
TWF0cml4U2NhbGFyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNpZiBfX01FVEFM
X1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBv
cGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCisreworKyAgICBt
IC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCisreworKyAgICBmb3IgKHNpemVfdCBjb2wg
PSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAgYVtjb2xdIC89IGJbY29s
XTsKKysgICAgfQorKyAgICByZXR1cm4gYTsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9w
ZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJmEsIG1ldGFsOjpt
YXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGEgPSBhIC8gYjsKKysgICAgcmV0dXJu
IGE7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFdpc2VEaXZp
ZGUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHks
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IEFOR0xFX2NvbXBvbmVu
dFdpc2VNdWx0aXBseShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGEsIG1ldGFsOjptYXRy
aXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8
IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworKyAgICB9
CisrICAgIHJldHVybiBhOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShv
dXRlclByb2R1Y3QsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTSwgaW50IE4+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIE4sIE0+IEFOR0xFX291dGVyUHJv
ZHVjdChtZXRhbDo6dmVjPFQsIE0+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKKyt7CisrICAgIG1l
dGFsOjptYXRyaXg8VCwgTiwgTT4gbzsKKysgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBOOyAr
K24pCisrICAgIHsKKysgICAgICAgIG9bbl0gPSB1ICogdltuXTsKKysgICAgfQorKyAgICByZXR1
cm4gbzsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoaW52ZXJzZTIsIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gbSkKKyt7
CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gYWRqOworKyAgICBhZGpbMF1bMF0gPSAgbVsx
XVsxXTsKKysgICAgYWRqWzBdWzFdID0gLW1bMF1bMV07CisrICAgIGFkalsxXVswXSA9IC1tWzFd
WzBdOworKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKysgICAgVCBkZXQgPSAoYWRqWzBdWzBd
ICogbVswXVswXSkgKyAoYWRqWzBdWzFdICogbVsxXVswXSk7CisrICAgIHJldHVybiBhZGogKiAo
VCgxKSAvIGRldCk7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVy
c2UzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjptYXRyaXg8VCwgMywgMz4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0cml4PFQsIDMsIDM+
IG0pCisreworKyAgICBUIGEgPSBtWzFdWzFdICogbVsyXVsyXSAtIG1bMl1bMV0gKiBtWzFdWzJd
OworKyAgICBUIGIgPSBtWzFdWzBdICogbVsyXVsyXTsKKysgICAgVCBjID0gbVsxXVsyXSAqIG1b
Ml1bMF07CisrICAgIFQgZCA9IG1bMV1bMF0gKiBtWzJdWzFdOworKyAgICBUIGRldCA9IG1bMF1b
MF0gKiAoYSkgLQorKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKysgICAgICAgICAg
ICBtWzBdWzJdICogKGQgLSBtWzFdWzFdICogbVsyXVswXSk7CisrICAgIGRldCA9IFQoMSkgLyBk
ZXQ7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKysgICAgbWludlswXVswXSA9
IChhKSAqIGRldDsKKysgICAgbWludlswXVsxXSA9IChtWzBdWzJdICogbVsyXVsxXSAtIG1bMF1b
MV0gKiBtWzJdWzJdKSAqIGRldDsKKysgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsy
XSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsxXVswXSA9IChjIC0gYikg
KiBkZXQ7CisrICAgIG1pbnZbMV1bMV0gPSAobVswXVswXSAqIG1bMl1bMl0gLSBtWzBdWzJdICog
bVsyXVswXSkgKiBkZXQ7CisrICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBt
WzBdWzBdICogbVsxXVsyXSkgKiBkZXQ7CisrICAgIG1pbnZbMl1bMF0gPSAoZCAtIG1bMl1bMF0g
KiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsxXSA9IChtWzJdWzBdICogbVswXVsxXSAt
IG1bMF1bMF0gKiBtWzJdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICog
bVsxXVsxXSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKysgICAgcmV0dXJuIG1pbnY7Cisr
fQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVyc2U0LCBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwg
NCwgND4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0cml4PFQsIDQsIDQ+IG0pCisreworKyAgICBU
IEEyMzIzID0gbVsyXVsyXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKysgICAgVCBB
MTMyMyA9IG1bMl1bMV0gKiBtWzNdWzNdIC0gbVsyXVszXSAqIG1bM11bMV07CisrICAgIFQgQTEy
MjMgPSBtWzJdWzFdICogbVszXVsyXSAtIG1bMl1bMl0gKiBtWzNdWzFdOworKyAgICBUIEEwMzIz
ID0gbVsyXVswXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVswXTsKKysgICAgVCBBMDIyMyA9
IG1bMl1bMF0gKiBtWzNdWzJdIC0gbVsyXVsyXSAqIG1bM11bMF07CisrICAgIFQgQTAxMjMgPSBt
WzJdWzBdICogbVszXVsxXSAtIG1bMl1bMV0gKiBtWzNdWzBdOworKyAgICBUIEEyMzEzID0gbVsx
XVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVsyXTsKKysgICAgVCBBMTMxMyA9IG1bMV1b
MV0gKiBtWzNdWzNdIC0gbVsxXVszXSAqIG1bM11bMV07CisrICAgIFQgQTEyMTMgPSBtWzFdWzFd
ICogbVszXVsyXSAtIG1bMV1bMl0gKiBtWzNdWzFdOworKyAgICBUIEEyMzEyID0gbVsxXVsyXSAq
IG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsKKysgICAgVCBBMTMxMiA9IG1bMV1bMV0gKiBt
WzJdWzNdIC0gbVsxXVszXSAqIG1bMl1bMV07CisrICAgIFQgQTEyMTIgPSBtWzFdWzFdICogbVsy
XVsyXSAtIG1bMV1bMl0gKiBtWzJdWzFdOworKyAgICBUIEEwMzEzID0gbVsxXVswXSAqIG1bM11b
M10gLSBtWzFdWzNdICogbVszXVswXTsKKysgICAgVCBBMDIxMyA9IG1bMV1bMF0gKiBtWzNdWzJd
IC0gbVsxXVsyXSAqIG1bM11bMF07CisrICAgIFQgQTAzMTIgPSBtWzFdWzBdICogbVsyXVszXSAt
IG1bMV1bM10gKiBtWzJdWzBdOworKyAgICBUIEEwMjEyID0gbVsxXVswXSAqIG1bMl1bMl0gLSBt
WzFdWzJdICogbVsyXVswXTsKKysgICAgVCBBMDExMyA9IG1bMV1bMF0gKiBtWzNdWzFdIC0gbVsx
XVsxXSAqIG1bM11bMF07CisrICAgIFQgQTAxMTIgPSBtWzFdWzBdICogbVsyXVsxXSAtIG1bMV1b
MV0gKiBtWzJdWzBdOworKyAgICBUIGEgPSBtWzFdWzFdICogQTIzMjMgLSBtWzFdWzJdICogQTEz
MjMgKyBtWzFdWzNdICogQTEyMjM7CisrICAgIFQgYiA9IG1bMV1bMF0gKiBBMjMyMyAtIG1bMV1b
Ml0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDIyMzsKKysgICAgVCBjID0gbVsxXVswXSAqIEExMzIz
IC0gbVsxXVsxXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMTIzOworKyAgICBUIGQgPSBtWzFdWzBd
ICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAxMjM7CisrICAgIFQgZGV0
ID0gbVswXVswXSAqICggYSApCisrICAgICAgICAgIC0gbVswXVsxXSAqICggYiApCisrICAgICAg
ICAgICsgbVswXVsyXSAqICggYyApCisrICAgICAgICAgIC0gbVswXVszXSAqICggZCApOworKyAg
ICBkZXQgPSBUKDEpIC8gZGV0OworKyAgICBtZXRhbDo6bWF0cml4PFQsIDQsIDQ+IGltOworKyAg
ICBpbVswXVswXSA9IGRldCAqICAgKCBhICk7CisrICAgIGltWzBdWzFdID0gZGV0ICogLSAoIG1b
MF1bMV0gKiBBMjMyMyAtIG1bMF1bMl0gKiBBMTMyMyArIG1bMF1bM10gKiBBMTIyMyApOworKyAg
ICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBdWzJdICogQTEzMTMg
KyBtWzBdWzNdICogQTEyMTMgKTsKKysgICAgaW1bMF1bM10gPSBkZXQgKiAtICggbVswXVsxXSAq
IEEyMzEyIC0gbVswXVsyXSAqIEExMzEyICsgbVswXVszXSAqIEExMjEyICk7CisrICAgIGltWzFd
WzBdID0gZGV0ICogLSAoIGIgKTsKKysgICAgaW1bMV1bMV0gPSBkZXQgKiAgICggbVswXVswXSAq
IEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7CisrICAgIGltWzFd
WzJdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMjMxMyAtIG1bMF1bMl0gKiBBMDMxMyArIG1bMF1b
M10gKiBBMDIxMyApOworKyAgICBpbVsxXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTIzMTIg
LSBtWzBdWzJdICogQTAzMTIgKyBtWzBdWzNdICogQTAyMTIgKTsKKysgICAgaW1bMl1bMF0gPSBk
ZXQgKiAgICggYyApOworKyAgICBpbVsyXVsxXSA9IGRldCAqIC0gKCBtWzBdWzBdICogQTEzMjMg
LSBtWzBdWzFdICogQTAzMjMgKyBtWzBdWzNdICogQTAxMjMgKTsKKysgICAgaW1bMl1bMl0gPSBk
ZXQgKiAgICggbVswXVswXSAqIEExMzEzIC0gbVswXVsxXSAqIEEwMzEzICsgbVswXVszXSAqIEEw
MTEzICk7CisrICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1bMF1b
MV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworKyAgICBpbVszXVswXSA9IGRldCAqIC0g
KCBkICk7CisrICAgIGltWzNdWzFdID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTIyMyAtIG1bMF1b
MV0gKiBBMDIyMyArIG1bMF1bMl0gKiBBMDEyMyApOworKyAgICBpbVszXVsyXSA9IGRldCAqIC0g
KCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsK
KysgICAgaW1bM11bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEExMjEyIC0gbVswXVsxXSAqIEEw
MjEyICsgbVswXVsyXSAqIEEwMTEyICk7CisrICAgIHJldHVybiBpbTsKKyt9CisrKSIpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJy
YXk8VCwgTj4gdikKKyt7CisrICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBOOyBpKyspCisrICAg
ICAgICBpZiAodVtpXSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisrICAgIHJldHVybiB0cnVlOwor
K30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShub3RFcXVhbEFycmF5LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3Qg
Tj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OmFycmF5
PFQsIE4+IHUsIG1ldGFsOjphcnJheTxULCBOPiB2KQorK3sKKysgICAgcmV0dXJuICFBTkdMRV9l
cXVhbCh1LHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbEFycmF5
KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxWZWN0b3IsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xF
X0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRhbDo6dmVjPFQsIE4+IHUsIG1ldGFs
Ojp2ZWM8VCwgTj4gdikKKyt7CisrICAgIHJldHVybiBtZXRhbDo6YWxsKHUgPT0gdik7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0aCgpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVxdWFsTWF0cml4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywgaW50IFI+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjptYXRyaXg8VCwgQywgUj4gYSwg
bWV0YWw6Om1hdHJpeDxULCBDLCBSPiBiKQorK3sKKysgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBD
OyArK2MpCisrICAgIHsKKysgICAgICAgIGlmICghQU5HTEVfZXF1YWwoYVtjXSwgYltjXSkpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiB0cnVlOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBl
cXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVjdG9y
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBp
bnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZl
YzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCisreworKyAgICByZXR1cm4gIUFOR0xFX2Vx
dWFsKHUsIHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3Rv
cigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsU3RydWN0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYm9vbCBBTkdMRV9ub3RFcXVhbFN0cnVjdCh0aHJlYWQgY29uc3QgVCAmYSwg
dGhyZWFkIGNvbnN0IFQgJmIpCisreworKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVxdWFsTWF0cml4KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodmVjdG9yRWxlbVJlZiwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgor
K3N0cnVjdCBBTkdMRV9WZWN0b3JFbGVtUmVmCisreworKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxU
LCBOPiAmbVZlYzsKKysgICAgVCBtUmVmOworKyAgICBjb25zdCBpbnQgbUluZGV4OworKyAgICB+
QU5HTEVfVmVjdG9yRWxlbVJlZigpIHsgbVZlY1ttSW5kZXhdID0gbVJlZjsgfQorKyAgICBBTkdM
RV9WZWN0b3JFbGVtUmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkK
KysgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tpbmRleF0pLCBtSW5kZXgoaW5kZXgpCisr
ICAgIHt9CisrICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVybiBtUmVmOyB9CisrfTsK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdM
RV9WZWN0b3JFbGVtUmVmPFQsIE4+IEFOR0xFX2VsZW1fcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQs
IE4+ICZ2ZWMsIGludCBpbmRleCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9WZWN0b3JFbGVtUmVm
PFQsIE4+KHZlYywgaW5kZXgpOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RShzd2l6emxlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCBpbnQgVk4sIGludCBTTj4KKytzdHJ1Y3QgQU5HTEVfU3dpenpsZVJlZgorK3sK
KysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8VCwgVk4+ICZtVmVjOworKyAgICBtZXRhbDo6dmVjPFQs
IFNOPiBtUmVmOworKyAgICBpbnQgbUluZGljZXNbU05dOworKyAgICB+QU5HTEVfU3dpenpsZVJl
ZigpCisrICAgIHsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1JbmRpY2VzW2ldOworKyAgICAgICAg
ICAgIG1WZWNbal0gPSBtUmVmW2ldOworKyAgICAgICAgfQorKyAgICB9CisrICAgIEFOR0xFX1N3
aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGludCAq
aW5kaWNlcykKKysgICAgICAgIDogbVZlYyh2ZWMpCisrICAgIHsKKysgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgU047ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBpbnQg
aiA9IGluZGljZXNbaV07CisrICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworKyAgICAgICAg
ICAgIG1SZWZbaV0gPSBtVmVjW2pdOworKyAgICAgICAgfQorKyAgICB9CisrICAgIG9wZXJhdG9y
IHRocmVhZCBtZXRhbDo6dmVjPFQsIFNOPiAmKCkgeyByZXR1cm4gbVJlZjsgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfVmVj
dG9yRWxlbVJlZjxULCBOPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBO
PiAmdmVjLCBpbnQgaTApCisreworKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBO
Pih2ZWMsIGluZGV4KTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3Jl
Zih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKKyt7CisrICAg
IGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEgfTsKKysgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVS
ZWY8VCwgTiwgMj4odmVjLCBpcyk7CisrfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dp
enpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGlu
dCBpMikKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEsIGkyIH07CisrICAgIHJl
dHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+KHZlYywgaXMpOworK30KKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9Td2l6emxlUmVm
PFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMs
IGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykKKyt7CisrICAgIGNvbnN0IGludCBpc1td
ID0geyBpMCwgaTEsIGkyLCBpMyB9OworKyAgICByZXR1cm4gQU5HTEVfU3dpenpsZVJlZjxULCBO
LCA0Pih2ZWMsIGlzKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9y
RWxlbVJlZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG91dCwgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX091dAorK3sKKysgICAgVCBtVGVtcDsKKysg
ICAgdGhyZWFkIFQgJm1EZXN0OworKyAgICB+QU5HTEVfT3V0KCkgeyBtRGVzdCA9IG1UZW1wOyB9
CisrICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKysgICAgICAgIDogbURlc3QoZGVzdCkK
KysgICAge30KKysgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJuIG1UZW1wOyB9Cisr
fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX091
dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCisreworKyAgICByZXR1cm4gQU5HTEVfT3V0
PFQ+KGRlc3QpOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91dCwg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX0luT3V0CisreworKyAg
ICBUIG1UZW1wOworKyAgICB0aHJlYWQgVCAmbURlc3Q7CisrICAgIH5BTkdMRV9Jbk91dCgpIHsg
bURlc3QgPSBtVGVtcDsgfQorKyAgICBBTkdMRV9Jbk91dCh0aHJlYWQgVCAmZGVzdCkKKysgICAg
ICAgIDogbVRlbXAoZGVzdCksIG1EZXN0KGRlc3QpCisrICAgIHt9CisrICAgIG9wZXJhdG9yIHRo
cmVhZCBUICYoKSB7IHJldHVybiBtVGVtcDsgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9Jbk91dDxUPiBBTkdMRV9pbm91dCh0aHJlYWQg
VCAmZGVzdCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKKyt9CisrKSIp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZmxhdHRlbkFycmF5LCBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBsCisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgVCAqZXhlYyh0aHJlYWQgVCAmeCkKKysgICAg
eworKyAgICAgICAgcmV0dXJuICZ4OworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90IE4+Cisrc3RydWN0IEFOR0xFX2ZsYXR0ZW5faW1wbDxtZXRhbDo6YXJyYXk8VCwg
Tj4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIGV4ZWModGhyZWFk
IG1ldGFsOjphcnJheTxULCBOPiAmYXJyKSAtPiBUCisrICAgIHsKKysgICAgICAgIHJldHVybiBB
TkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsKKysgICAgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV9mbGF0dGVuKHRocmVhZCBtZXRhbDo6YXJyYXk8VCwgTj4gJmFycikgLT4gVAorK3sKKysgICAg
cmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0pOworK30KKyspIikKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjYXN0VmVjdG9yLCBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IE4xLCBpbnQgTjI+Cisrc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3Ige307Cisr
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQs
IE4sIE4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQs
IE4+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gY29uc3QgJnYpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiB2OworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1
Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAyLCAzPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZ
U19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+IGNv
bnN0ICZ2KQorKyAgICB7CisrICAgICAgICByZXR1cm4gdi54eTsKKysgICAgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KKyt7
CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8VCwgMj4gZXhlYyh0
aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKysgICAgeworKyAgICAgICAgcmV0dXJu
IHYueHk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdM
RV9jYXN0VmVjdG9yPFQsIDMsIDQ+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6dmVjPFQsIDM+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgND4gY29uc3QgJnYp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOwor
KyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIE4xPiBBTkdMRV9jYXN0KHRocmVhZCBtZXRh
bDo6dmVjPFQsIE4yPiBjb25zdCAmdikKKyt7CisrICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9y
PFQsIE4xLCBOMj46OmV4ZWModik7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGNhc3RNYXRyaXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgRW5h
YmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfY2FzdE1hdHJpeAorK3sKKysgICAgc3RhdGljIEFO
R0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1l
dGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisrICAgIHsKKysgICAgICAgIG1ldGFs
OjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysgICAgICAgIGNvbnN0IGludCBNaW5DID0gQzEgPD0g
QzIgPyBDMSA6IEMyOworKyAgICAgICAgY29uc3QgaW50IE1pblIgPSBSMSA8PSBSMiA/IFIxIDog
UjI7CisrICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IE1pbkM7ICsrYykKKysgICAgICAgIHsK
KysgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1pblI7ICsrcikKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBSMjsgciA8IFIxOyArK3IpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBtMVtjXVtyXSA9IGMgPT0gciA/IFQoMSkgOiBUKDApOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZvciAoaW50IGMgPSBDMjsgYyA8
IEMxOyArK2MpCisrICAgICAgICB7CisrICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBS
MTsgKytyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbTFbY11bcl0gPSBjID09
IHIgPyBUKDEpIDogVCgwKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gbTE7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQzEsIGlu
dCBSMSwgaW50IEMyLCBpbnQgUjI+Cisrc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIx
LCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+PgorK3sK
KysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+
IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisrICAgIHsK
KysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysgICAgICAgIGZvciAoc2l6
ZV90IGMgPSAwOyBjIDwgQzE7ICsrYykKKysgICAgICAgIHsKKysgICAgICAgICAgICBtMVtjXSA9
IEFOR0xFX2Nhc3Q8UjE+KG0yW2NdKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBtMTsK
KysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwg
dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIx
PiBBTkdMRV9jYXN0KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0pCisr
eworKyAgICByZXR1cm4gQU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMo
bSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmVjdG9yKCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGVuc29yLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90Li4uIERT
PgorK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzOworK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBz
aXplX3QgRD4KKytzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0czxULCBEPgorK3sKKysgICAgZW51
bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKysgICAgdXNpbmcgaW5uZXJfdHlwZSA9IFQ7
CisrICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworK307CisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHNpemVfdCBELCBzaXplX3QuLi4gRFM+Cisrc3RydWN0IEFOR0xFX3RlbnNv
cl90cmFpdHM8VCwgRCwgRFMuLi4+CisreworKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGlt
ID0gRCB9OworKyAgICB1c2luZyBpbm5lcl90eXBlID0gdHlwZW5hbWUgQU5HTEVfdGVuc29yX3Ry
YWl0czxULCBEUy4uLj46Om91dGVyX3R5cGU7CisrICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5l
cl90eXBlW0RdOworK307CisrdGVtcGxhdGUgPHNpemVfdCBELCB0eXBlbmFtZSB2YWx1ZV90eXBl
XywgdHlwZW5hbWUgaW5uZXJfdHlwZV8+Cisrc3RydWN0IEFOR0xFX3RlbnNvcl9pbXBsCisrewor
KyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAgICB1c2luZyB2YWx1ZV90
eXBlID0gdmFsdWVfdHlwZV87CisrICAgIHVzaW5nIGlubmVyX3R5cGUgPSBpbm5lcl90eXBlXzsK
KysgICAgdXNpbmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07CisrICAgIG91dGVyX3R5cGUg
X2RhdGE7CisrICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBvdXRlcl9kaW07IH0KKysgICAgQU5HTEVfQUxXQVlTX0lOTElORSBpbm5lcl90eXBlICZv
cGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBfZGF0YVtpXTsgfQorKyAgICBBTkdMRV9BTFdB
WVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIF9kYXRhW2ldOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90Li4u
IERTPgorK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorKyAgICBBTkdM
RV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6b3V0ZXJfZGltLAorKyAgICBULAorKyAgICB0eXBl
bmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CisrKSIpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisrdGVtcGxhdGUgPGludCBOPgorK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFp
dHM7CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRfdHJhaXRzPDI+IHsgdXNp
bmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDJkOyB9OworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFO
R0xFX2dyYWRpZW50X3RyYWl0czwzPiB7IHVzaW5nIHR5cGUgPSBtZXRhbDo6Z3JhZGllbnQzZDsg
fTsKKysKKyt0ZW1wbGF0ZSA8aW50IE4+CisrdXNpbmcgQU5HTEVfZ3JhZGllbnQgPSB0eXBlbmFt
ZSBBTkdMRV9ncmFkaWVudF90cmFpdHM8Tj46OnR5cGU7CisrKSIpCisrCisrUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUodGV4dHVyZUVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfVGV4dHVyZUVudgorK3sKKysgICAg
dGhyZWFkIFQgKnRleHR1cmU7CisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciAqc2FtcGxlcjsK
Kyt9OworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZ1bmN0aW9uQ29uc3RhbnRz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfU0FNUExFX0NP
TVBBUkVfR1JBRElFTlRfSU5ERVggMAorKyNkZWZpbmUgQU5HTEVfU0FNUExFX0NPTVBBUkVfTE9E
X0lOREVYICAgICAgMQorKyNkZWZpbmUgQU5HTEVfUkFTVEVSSVpBVElPTl9ESVNDQVJEX0lOREVY
ICAgMgorKworK2NvbnN0YW50IGJvb2wgQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50IFtb
ZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfU0FNUExFX0NPTVBBUkVfR1JBRElFTlRfSU5ERVgpXV07
CisrY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kICAgICAgW1tmdW5jdGlv
bl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0RfSU5ERVgpXV07CisrY29uc3RhbnQg
Ym9vbCBBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCAgICAgW1tmdW5jdGlvbl9jb25zdGFudChB
TkdMRV9SQVNURVJJWkFUSU9OX0RJU0NBUkRfSU5ERVgpXV07CisrKSIpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4ZWxGZXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigK
KysjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xFX3RleGVsRmV0Y2hfaW1w
bCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhlbEZldGNoX2ltcGwoCisr
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29u
c3QgJmNvb3JkLAorKyAgICB1aW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUucmVh
ZCh1aW50Mihjb29yZCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgKKysg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25z
dCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5yZWFk
KHVpbnQzKGNvb3JkKSwgbGV2ZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjppbnQzIGNvbnN0ICZjb29yZCwKKysgICAgdWludCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkpLCB1aW50KGNvb3JkLnopLCBsZXZlbCk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVf
dGV4ZWxGZXRjaE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisrCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwsCisr
ICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9mZnNldCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwsCisrICAg
IHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUucmVhZCh1aW50Myhjb29yZCArIG9mZnNldCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hP
ZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1
cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2
ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZC54eSArIG9mZnNldCksIHVpbnQoY29vcmQueiks
IGxldmVsKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJl
LAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQyX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
X2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0
ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
dGV4dHVyZV9nZW5lcmljX2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9h
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4
dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisr
ICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVw
dGgyZF9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgK
KysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisr
ICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVf
ZGVwdGgyZGFycmF5X2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmRfYXJyYXk8VD4gJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
X2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwg
Y29vcmQudyk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkK
KysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKysgICAg
dGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKysgICAgZmxvYXQgY29tcGFyZSkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29v
cmQudykpLCBjb21wYXJlKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zs
b2F0NCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0
aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0
YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisr
ICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHl6LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
X3RleHR1cmUyZGFycmF5X2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cisr
fQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29v
cmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmJpYXMo
YmlhcykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKysgICAgdGhyZWFk
IG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3Qg
JmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+
ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisr
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcykK
Kyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZTFETG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZp
bmUgQU5HTEVfdGV4dHVyZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgq
ZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUx
RExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNv
b3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlMURQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZTFEUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKCpl
bnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFE
UHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQueSwgbWV0YWw6OmJpYXMoYmlhcykpOwor
K30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQor
K3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQudywg
bWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvakxv
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmUx
RFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2Rf
aW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQudywgbWV0YWw6
OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlMkQoZW52LCAuLi4p
IEFOR0xFX3RleHR1cmUyRF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRfaW1wbCgKKysg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAor
KyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRfaW1wbCgK
KysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUyRF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUyRExvZCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmUyRExvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZTJETG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKwor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7
CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvaihlbnYsIC4uLikgQU5HTEVf
dGV4dHVyZTJEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1Nf
XykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQor
K3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnos
IG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgKKysg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAor
KyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkRQcm9qTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
KyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZTJE
UHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisr
ICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZTNETG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZp
bmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgq
ZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUz
RExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmUzRFByb2osCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisr
I2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9q
X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlM0RQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFz
KGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoCisrICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysg
ICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZUN1YmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmlu
ZSBBTkdMRV90ZXh0dXJlQ3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJl
X2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0
ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7
CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisrewor
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJp
YXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQor
KworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlTG9kLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1YmVMb2QoZW52LCAuLi4p
IEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZUxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRh
bDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJvaiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVDdWJl
UHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZVByb2pfaW1wbCgK
KysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUodGV4dHVyZUN1YmVQcm9qTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlQ3ViZVByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9j
b29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVHcmFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4
dHVyZUdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9n
ZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1l
dGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxm
bG9hdCwgTj4gY29uc3QgJmRQZHkpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5KQor
K3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1l
dGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxv
YXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBs
KAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6
Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdy
YWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0
ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5
KQorK3sKKysgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2Ft
cGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7
CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpncmFkaWVudDJkKGRQ
ZHgsIGRQZHkpKSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9k
ZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIGNvb3Jk
LncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7CisrICAgIH0KKysgICAgZWxzZQor
KyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRp
ZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAgIH0KKyt9CisrKSIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1
YmU8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmRQZHkpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQor
KyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29t
cGFyZShzYW1wbGVyLCBjb29yZC54eXosIGNvb3JkLncsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBk
eCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXosIG1ldGFsOjpn
cmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAgIH0KKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6
OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlR3JhZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1Nf
XykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxv
YXROX2Zsb2F0Tl9pbnROLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFk
IG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjp2
ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9hdCwg
Tj4gY29uc3QgJmRQZHksCisrICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9m
ZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgQU5H
TEVfZ3JhZGllbnQ8Tj4oZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdyYWRpZW50KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmlj
X2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAor
KyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
eikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJf
ZmxvYXQyX2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zm
c2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxl
Q29tcGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgY29vcmQueiwgbWV0YWw6
OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNv
b3JkLnopOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZz
ZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0
aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0
aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkK
Kyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBs
ZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIGNvb3JkLncsIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKysgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGll
bnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOworKyAgICB9CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDNf
aW50MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1w
bCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisrICAgIHRocmVhZCBtZXRh
bDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF90ZXh0dXJl
Y3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVj
dWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9mZnNldCkKKyt7Cisr
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmdyYWRpZW50
Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUxvZF9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9n
ZW5lcmljX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVs
KGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2Qo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2RlcHRoMmRfZmxvYXQz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisrICAgIHRo
cmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29v
cmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBh
cmVMb2QpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNh
bXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpID4gY29vcmQueik7CisrICAgIH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlTG9kKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJl
MmRhcnJheV9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2Rf
aW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQo
Y29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlTG9kX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5
PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2
ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1
aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2RPZmZzZXQoZW52LCAuLi4pIEFOR0xFX3Rl
eHR1cmVMb2RPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdT
X18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCwK
KysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKKyt9
CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCwKKysg
ICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0
ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwsCisr
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2Ft
cGxlQ29tcGFyZUxvZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRl
eHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjps
ZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpID4gY29vcmQueik7CisrICAgIH0KKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJy
YXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBs
ZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
eikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZE9mZnNl
dF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJl
YWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZU9mZnNldChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBf
X1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29u
c3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKysgICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQy
IGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworK30K
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
Kyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludCht
ZXRhbDo6cm91bmQoY29vcmQueikpLCBvZmZzZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNl
dF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29y
ZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKysgICAgZmxvYXQgYmlhcykKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIGZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCisrewor
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNldCk7CisrfQor
KworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJl
LAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAor
KyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRf
aW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJl
YWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBmbG9hdDMgY29u
c3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBvZmZzZXQpOworK30KKysKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUs
CisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFk
IGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisr
ICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZVByb2osCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBB
TkdMRV90ZXh0dXJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2lt
cGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisr
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6
YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6
OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAg
IGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2Rl
ZmluZSBBTkdMRV90ZXh0dXJlUHJvakdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qR3Jh
ZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7
CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQor
KworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0
NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlUHJvakdyYWRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBk
eCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkpCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmdyYWRp
ZW50MmQoZFBkeCwgZFBkeSkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlUHJvakdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJv
akdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgy
ZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54
eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkgPiBjb29yZC56L2Nvb3Jk
LncpOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
Q29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9m
bG9hdDRfZmxvYXQzX2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJl
LAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5KQorK3sK
KysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBt
ZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVQcm9qR3JhZE9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysj
ZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZVByb2pHcmFkT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJH
U19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZ2VuZXJpY19mbG9h
dDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisr
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwg
ZFBkeSksIG9mZnNldCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVQcm9qR3JhZE9mZnNldCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQ
cm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
Kyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisrCisrUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQ0X2Zs
b2F0Ml9mbG9hdDJfaW50MiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysg
ICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3Jk
LnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworKyAg
ICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQuei9jb29yZC53KTsKKysgICAgfQorK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zs
b2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5LAor
KyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVy
ZVByb2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90
ZXh0dXJlUHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjps
ZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
UHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX2dl
bmVyaWNfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
UHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkp
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQor
KworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3Qg
JmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVD
b21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3Jk
LncsIG1ldGFsOjpsZXZlbChsZXZlbCkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3JkLnovY29vcmQudyk7Cisr
ICAgIH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFu
dHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQorKworK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwoCisrICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXQoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQorK3sK
KysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1l
dGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9m
ZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAm
b2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7CisrfQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJv
akxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUs
CisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCwKKysgICAgdGhy
ZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5z
YW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncs
IG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAg
eworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkgPiBjb29yZC56
L2Nvb3JkLncpOworKyAgICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zm
c2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9j
b29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
UHJvak9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xF
X3RleHR1cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZVByb2pPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAorKyAg
ICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJl
LAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9m
ZnNldCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7
CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1
cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVh
ZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Ymlh
cyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVTaXplLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVNpemUoZW52
LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBfX1ZBX0FSR1NfXykK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisrICAgIGludCBsZXZlbCkKKyt7CisrICAgIHJldHVybiBpbnQyKHRleHR1cmUuZ2V0X3dpZHRo
KHVpbnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KHVpbnQobGV2ZWwpKSk7CisrfQorKwor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVy
ZSwKKysgICAgaW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lk
dGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJl
LmdldF9kZXB0aCh1aW50KGxldmVsKSkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKysgICAg
dGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICBpbnQgbGV2ZWwp
CisreworKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1aW50KGxldmVsKSksIHRl
eHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2FycmF5X3NpemUoKSk7
CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9h
cnJheTxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIGludDMo
dGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KysKKysvLyBSZXR1cm5lZCBOYW1lIGlzIHZhbGlkIGZvciBhcyBsb25nIGFzIGBidWZmZXJgIGlz
IHN0aWxsIGFsaXZlLgorKy8vIFJldHVybnMgZmFsc2UgaWYgbm8gdGVtcGxhdGUgYXJncyBleGlz
dC4KKysvLyBSZXR1cm5zIGZhbHNlIGlmIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoLgorKy8v
CisrLy8gRXhhbXBsZToKKysvLyAgImZvbzwxLDI+IiAtLT4gImZvbzw+IgorK3N0YXRpYyBzdGQ6
OnBhaXI8TmFtZSwgYm9vbD4gTWFza1RlbXBsYXRlQXJncyhjb25zdCBOYW1lICZuYW1lLCBzaXpl
X3QgYnVmZmVyU2l6ZSwgY2hhciAqYnVmZmVyKQorK3sKKysgICAgY29uc3QgY2hhciAqYmVnaW4g
PSBuYW1lLnJhd05hbWUoKS5kYXRhKCk7CisrICAgIGNvbnN0IGNoYXIgKmVuZCAgID0gc3RyY2hy
KGJlZ2luLCAnPCcpOworKyAgICBpZiAoIWVuZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHt7
fSwgZmFsc2V9OworKyAgICB9CisrICAgIHNpemVfdCBuID0gZW5kIC0gYmVnaW47CisrICAgIGlm
IChuICsgMyA+IGJ1ZmZlclNpemUpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7e30sIGZhbHNl
fTsKKysgICAgfQorKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKKysgICAgewor
KyAgICAgICAgYnVmZmVyW2ldID0gYmVnaW5baV07CisrICAgIH0KKysgICAgYnVmZmVyW24gKyAw
XSA9ICc8JzsKKysgICAgYnVmZmVyW24gKyAxXSA9ICc+JzsKKysgICAgYnVmZmVyW24gKyAyXSA9
ICdcMCc7CisrICAgIHJldHVybiB7TmFtZShidWZmZXIsIG5hbWUuc3ltYm9sVHlwZSgpKSwgdHJ1
ZX07CisrfQorKworK1Byb2dyYW1QcmVsdWRlOjpGdW5jVG9FbWl0dGVyIFByb2dyYW1QcmVsdWRl
OjpCdWlsZEZ1bmNUb0VtaXR0ZXIoKQorK3sKKysjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkg
XAorKyAgICBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmKSAtPiB2b2lk
IHsgcmV0dXJuIHBwLm1ldGhvZCgpOyB9CisrICAgIEZ1bmNUb0VtaXR0ZXIgbWFwOworKworKyAg
ICBhdXRvIHB1dCA9IFsmXShOYW1lIG5hbWUsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKysgICAg
ICAgIEZ1bmNFbWl0dGVyICZkZXN0ID0gbWFwW25hbWVdOworKyAgICAgICAgQVNTRVJUKCFkZXN0
KTsKKysgICAgICAgIGRlc3QgPSBlbWl0dGVyOworKyAgICB9OworKworKyAgICBhdXRvIHB1dEFu
Z2xlID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKysg
ICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysg
ICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysgICAgYXV0byBwdXRCdWls
dEluID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKysg
ICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKKysgICAgICAg
IHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysgICAgcHV0QW5nbGUoImFkZHJlc3Nv
ZiIsIEVNSVRfTUVUSE9EKGFkZHJlc3NvZikpOworKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1J
VF9NRVRIT0QoY2FzdE1hdHJpeCkpOworKyAgICBwdXRBbmdsZSgiZWxlbV9yZWYiLCBFTUlUX01F
VEhPRCh2ZWN0b3JFbGVtUmVmKSk7CisrICAgIHB1dEFuZ2xlKCJmbGF0dGVuIiwgRU1JVF9NRVRI
T0QoZmxhdHRlbkFycmF5KSk7CisrICAgIHB1dEFuZ2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlu
b3V0KSk7CisrICAgIHB1dEFuZ2xlKCJvdXQiLCBFTUlUX01FVEhPRChvdXQpKTsKKysgICAgcHV0
QW5nbGUoInN3aXp6bGVfcmVmIiwgRU1JVF9NRVRIT0Qoc3dpenpsZVJlZikpOworKworKyAgICBw
dXRCdWlsdEluKCJ0ZXhlbEZldGNoIiwgRU1JVF9NRVRIT0QodGV4ZWxGZXRjaCkpOworKyAgICBw
dXRCdWlsdEluKCJ0ZXhlbEZldGNoT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4ZWxGZXRjaE9mZnNl
dCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBj
b25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0
ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFy
YW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29u
c3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOwor
KyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBl
KCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbUNvdW50KCkgPj0gMzsKKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRo
KCJtZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCgp
OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJl
X2RlcHRoMmRfZmxvYXQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAg
aWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8IikpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlh
cykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRl
eHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDQoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OmRlcHRoMmRfYXJyYXk8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYg
KGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGgyZGFycmF5X2Zs
b2F0NF9mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVy
biBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1
cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQo
KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVy
ZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKysgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJy
YXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGJpYXMp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5l
cmljX2Zsb2F0Ml9mbG9hdCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9hdCgpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MygpOwor
KyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigi
dGV4dHVyZTFETG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFETG9kKSk7CisrICAgIHB1dEJ1aWx0
SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7CisrICAgIHB1
dEJ1aWx0SW4oInRleHR1cmUxRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qTG9k
KSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRCIsIEVNSVRfTUVUSE9EKHRleHR1cmUyRCkp
OworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRM
b2QpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTJEUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1
cmUyRFByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTNETG9kIiwgRU1JVF9NRVRIT0Qo
dGV4dHVyZTNETG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2pMb2Qi
LCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1
cmVDdWJlIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmUpKTsKKysgICAgcHV0QnVpbHRJbigidGV4
dHVyZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworKyAgICBwdXRCdWls
dEluKCJ0ZXh0dXJlQ3ViZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZVByb2opKTsKKysg
ICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVQcm9qTG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1
YmVQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlMkRQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmVHcmFkIiwg
W10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAg
IGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4
dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSku
cmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJh
c2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAg
ICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUg
JmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlwZSgpOworKyAgICAgICAg
Y29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworKyAg
ICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZs
b2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zs
b2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJl
TmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0Migp
OworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5i
ZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYm
IGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1l
dGFsOjp0ZXh0dXJlY3ViZTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAz
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFk
X3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IGRQZHhOKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7CisrICAgICAgICB9Cisr
ICAgICAgICBUT0RPKCk7CisrICAgIH0pOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7Cisr
ICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorKyAgICAgICAgICAg
IEdldFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpLnJhd05hbWUoKTsKKysgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9
IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUg
Y29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworKyAgICAgICAgY29uc3QgaW50IGNv
b3JkTiAgICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKysgICAgICAgIGNvbnN0
IFRUeXBlICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKysg
ICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUo
KTsKKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwi
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxv
YXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysg
ICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwi
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJh
eV9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
fQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8
IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVf
ZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZWN1YmU8
IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMykKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF90ZXh0dXJlY3Vi
ZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
fQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7
CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRG
bG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIoKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSBkUGR4TikKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zs
b2F0Tl9pbnROKCk7CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7CisrICAgIH0pOworKyAg
ICBwdXRCdWlsdEluKCJ0ZXh0dXJlTG9kIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBU
RnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJl
TmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCkt
PmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5
cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAg
ICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7Cisr
ICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6
ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJk
PCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0
YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3RleHR1cmUyZGFy
cmF5X2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zs
b2F0NCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisrICAg
ICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAm
JiBjb29yZE4gPT0gMykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVy
ZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAg
ICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRl
eHR1cmVMb2RPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZU9mZnNldCIsIEVNSVRf
TUVUSE9EKHRleHR1cmVPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2oiLCBF
TUlUX01FVEhPRCh0ZXh0dXJlUHJvaikpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakdy
YWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworKyAg
ICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKysgICAgICAgICAgICBH
ZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKS5yYXdOYW1lKCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBm
dW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNv
b3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBjb29y
ZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisrICAgICAgICBjb25zdCBU
VHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisrICAg
ICAgICBjb25zdCBpbnQgZFBkeE4gICAgICAgICAgICAgPSBkUGR4LmdldE5vbWluYWxTaXplKCk7
CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8Iikp
CisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRf
ZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYm
IGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zs
b2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9nZW5l
cmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9
PSAyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
Z2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgVE9E
TygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pHcmFkT2Zmc2V0Iiwg
W10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAg
IGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4
dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSku
cmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJh
c2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAg
ICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUg
JmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlwZSgpOworKyAgICAgICAg
Y29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworKyAg
ICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZs
b2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQ0
X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZs
b2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9h
dDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOwor
KyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysg
ICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2QiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNv
bnN0IFRGdW5jdGlvbiAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRl
eHR1cmVOYW1lID0KKysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJh
bSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisrICAgICAgICBjb25z
dCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7Cisr
ICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUo
KTsKKysgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWlu
YWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRl
cHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9hdDQoKTsKKysg
ICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
Y29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90ZXh0
dXJlM2RfZmxvYXQ0KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYg
KGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxv
YXQzKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gcHAudGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysgICAgICAgIH0KKysgICAg
ICAgIFRPRE8oKTsKKysgICAgfSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qTG9kT2Zm
c2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pMb2RPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJ
bigidGV4dHVyZVByb2pPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvak9mZnNldCkpOwor
KyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7
CisrCisrICAgIHJldHVybiBtYXA7CisrCisrI3VuZGVmIEVNSVRfTUVUSE9ECisrfQorKworK3Zv
aWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0T3BlcmF0b3IoVE9wZXJhdG9yIG9wLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUxKQor
K3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFJhZGlhbnM6CisrICAgICAgICAgICAgcmFkaWFucygpOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAgICAgICAgICAgZGVncmVl
cygpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0
YW46CisrICAgICAgICAgICAgYXRhbigpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1vZDoKKysgICAgICAgICAgICBtb2QoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZyYWN0OgorKyAgICAgICAg
ICAgIHJlZnJhY3QoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BEaXN0YW5jZToKKysgICAgICAgICAgICBkaXN0YW5jZSgpOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoKKysgICAgICAgICAg
ICBsZW5ndGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BEb3Q6CisrICAgICAgICAgICAgZG90KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorKyAgICAgICAgICAgIG5vcm1hbGl6
ZSgpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZh
Y2Vmb3J3YXJkOgorKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmbGVjdDoKKysgICAgICAgICAgICBy
ZWZsZWN0KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU2luOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvczoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BUYW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFNpbmg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BUYW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFz
aW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0YW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFiczoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbWE6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUG93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BFeHAyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZzoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFNxcnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2Vp
bDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmFjdDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BMZGV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmV4cDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlc3FydDoKKysgICAgICAgICAgICBpbmNsdWRl
X21ldGFsX21hdGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzVmVjdG9yKCkg
JiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBlcXVhbFZlY3RvcigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvLyBFdmVuIGlm
IEFyZzAgaXMgYSB2ZWN0b3Igb3IgbWF0cml4LCBpdCBjb3VsZCBhbHNvIGJlIGFuIGFycmF5Lgor
KyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBlcXVhbEFycmF5KCk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcE5vdEVxdWFsOgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNWZWN0b3IoKSAm
JiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IG5vdEVxdWFsVmVjdG9yKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg
KGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLgorKyAgICAgICAgICAgIGlmIChhcmdU
eXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBub3RFcXVhbEFycmF5KCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorKyAg
ICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisrICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lnbjoKKysgICAgICAgICAgICBzaWdu
KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q2xhbXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1heDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaXg6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTbW9vdGhzdGVwOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCk7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWxsOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJc25hbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKysgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcERGZHk6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRndpZHRoOgorKyAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRGV0ZXJtaW5hbnQ6CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRyaXgo
KTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BB
ZGQ6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5p
c1NjYWxhcigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYWRkTWF0cml4U2Nh
bGFyKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0
cml4KCkgJiYgYXJnVHlwZTEtPmlzU2NhbGFyKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
YnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorKyAgICAgICAgICAg
IGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGlmIChhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworKyAgICAgICAgICAgICAgICB9
CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorKyAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXIoKTsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICAgICAgaWYg
KGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRl
clByb2R1Y3Q6CisrICAgICAgICAgICAgb3V0ZXJQcm9kdWN0KCk7CisrICAgICAgICAgICAgYnJl
YWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKysgICAgICAgICAg
ICBzd2l0Y2ggKGFyZ1R5cGUwLT5nZXRDb2xzKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpbnZlcnNlMigpOworKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAg
ICAgICAgICAgICAgIGludmVyc2UzKCk7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTQoKTsK
KysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGlt
ZXNNYXRyaXhBc3NpZ246CisrICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVtZW50Ogor
KyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworKyAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5j
cmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIHBvc3RJbmNyZW1lbnRNYXRyaXgoKTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlRGVjcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZURlY3JlbWVudE1hdHJpeCgpOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNN
YXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRN
YXRyaXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6Cisr
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VPckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRTaGlmdExlZnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZU9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcExlc3NUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRo
YW5FcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVudFdp
c2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBvbmVudFdp
c2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbENvbXBvbmVu
dFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRX
aXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxBbmQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zaXRpdmU6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlTm90OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0
cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFy
QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzVmVjdG9yOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BDb250aW51ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbENvbXBv
bmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWxDb21wb25lbnRX
aXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9h
dEJpdHNUb0ludDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxvYXQ6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcE51bGw6CisrICAgICAgICAgICAgLy8gZG8gbm90aGluZworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6CisrICAgICAgICAgICAg
aW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUGFja1Nub3JtMngxNjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNr
VW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtNHg4OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtMngxNjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrU25v
cm00eDg6CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisrICAgICAgICAgICAg
YnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYyeDE2OgorKyAg
ICAgICAgICAgIHBhY2tfaGFsZl8yeDE2KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisrICAgICAgICAgICAgdW5wYWNr
X2hhbGZfMngxNigpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRmaWVsZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVy
c2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5k
TVNCOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJyeToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFVtdWxFeHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVsRXh0ZW5kZWQ6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFy
cmllckltYWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJTaGFy
ZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4
OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9t
aWNYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQ
cmltaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFycmF5TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICBicmVhazsK
KysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb25zdHJ1Y3Q6CisrICAgICAgICAgICAg
QVNTRVJUKCFmdW5jKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BD
YWxsQnVpbHRJbkZ1bmN0aW9uOgorKyAgICAgICAgICAgIEFTU0VSVChmdW5jKTsKKysgICAgICAg
ICAgICBpZiAobUhhbmRsZWQuaW5zZXJ0KGZ1bmMpLnNlY29uZCkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7CisrICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8gZW5kID0gbUZ1bmNUb0VtaXR0ZXIuZW5kKCk7CisrICAgICAgICAgICAgICAg
IGF1dG8gaXRlciAgICAgID0gbUZ1bmNUb0VtaXR0ZXIuZmluZChuYW1lKTsKKysgICAgICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICBjaGFyIGJ1ZmZlclszMl07CisrICAgICAgICAgICAgICAgICAgICBhdXRvIG1hc2sg
PSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIpOworKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hc2suc2Vjb25kKQorKyAgICAgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5kKG1hc2su
Zmlyc3QpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byAmZW1pdHRlciA9IGl0ZXItPnNlY29uZDsKKysgICAg
ICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgfQorK30KKysKKyt2
b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFZhcmlhYmxlKGNvbnN0IE5hbWUgJm5hbWUsIGNvbnN0
IFRUeXBlICZ0eXBlKQorK3sKKysgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdl
dFN0cnVjdCgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBOYW1lIHR5cGVOYW1lKCpzKTsKKysg
ICAgICAgIGlmICh0eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIHRleHR1cmVFbnYoKTsKKysgICAgICAgIH0KKysgICAgfQor
KyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGlmIChuYW1lID09IGNvbnN0YW50X25hbWVzOjpr
UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGZ1
bmN0aW9uQ29uc3RhbnRzKCk7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisrdm9pZCBQcm9n
cmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUgJnZhcikKKyt7CisrICAg
IGlmIChtSGFuZGxlZC5pbnNlcnQoJnZhcikuc2Vjb25kKQorKyAgICB7CisrICAgICAgICB2aXNp
dFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRTdHJ1Y3R1cmUoY29uc3QgVFN0cnVjdHVyZSAmcykKKyt7
CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKysgICAgeworKyAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogcy5maWVsZHMoKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKyAgICAgICAgICAg
IHZpc2l0VmFyaWFibGUoTmFtZSgqZmllbGQpLCB0eXBlKTsKKysgICAgICAgIH0KKysgICAgfQor
K30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBub2Rl
LT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKysgICAgY29uc3QgVFR5cGUgJnJpZ2h0VHlwZSA9IG5v
ZGUtPmdldFJpZ2h0KCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRP
cCgpLCBudWxscHRyLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CisrCisrYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybVVuYXJ5ICpub2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBub2RlLT5n
ZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBudWxscHRyLCAmYXJnVHlwZSk7CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIFBy
b2dyYW1QcmVsdWRlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxk
Q291bnQoKTsKKysKKysgICAgYXV0byBnZXRBcmdUeXBlID0gW25vZGUsIGFyZ0NvdW50XShzaXpl
X3QgaW5kZXgpIC0+IGNvbnN0IFRUeXBlICYgeworKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJn
Q291bnQpOworKyAgICAgICAgVEludGVybVR5cGVkICphcmcgPSBub2RlLT5nZXRDaGlsZE5vZGUo
aW5kZXgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBBU1NFUlQoYXJnKTsKKysgICAgICAgIHJl
dHVybiBhcmctPmdldFR5cGUoKTsKKysgICAgfTsKKysKKysgICAgY29uc3QgVEZ1bmN0aW9uICpm
dW5jID0gbm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgc3dpdGNoIChub2RlLT5nZXRDaGls
ZENvdW50KCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgIHsKKysgICAgICAg
ICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMsIG51bGxwdHIpOworKyAgICAg
ICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIDE6CisrICAgICAgICB7Cisr
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKysgICAg
ICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMsICZhcmdUeXBlMCk7Cisr
ICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAg
IHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOwor
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisrICAg
ICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5jLCAmYXJnVHlwZTAsICZh
cmdUeXBlMSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1
bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUwID0gZ2V0
QXJnVHlwZSgwKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEgPSBnZXRBcmdU
eXBlKDEpOworKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0T3AoKSwgZnVuYywg
JmFyZ1R5cGUwLCAmYXJnVHlwZTEpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAg
IH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZp
c2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkKKyt7CisrICAg
IERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKysgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSBkZWNsLnN5bWJvbC5nZXRUeXBlKCk7CisrICAgIGlmICh0eXBlLmlzU3Ry
dWN0U3BlY2lmaWVyKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0
eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHMpOworKyAgICAgICAgdmlzaXRTdHJ1
Y3R1cmUoKnMpOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIFByb2dy
YW1QcmVsdWRlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKQorK3sKKysgICAgdmlz
aXRWYXJpYWJsZShub2RlLT52YXJpYWJsZSgpKTsKKyt9CisrCisrYm9vbCBzaDo6RW1pdFByb2dy
YW1QcmVsdWRlKFRJbnRlcm1CbG9jayAmcm9vdCwgVEluZm9TaW5rQmFzZSAmb3V0LCBjb25zdCBQ
cm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3Jh
bVByZWx1ZGUob3V0LCBwcGMpOworKyAgICByb290LnRyYXZlcnNlKCZwcm9ncmFtUHJlbHVkZSk7
CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTAwNDEzZgorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dy
YW1QcmVsdWRlLmgKK0BAIC0wLDAgKzEsMzUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BST0dSQU1QUkVMVURF
X0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9Q
Uk9HUkFNUFJFTFVERV9IXworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytjbGFz
cyBUSW5mb1NpbmtCYXNlOworK2NsYXNzIFRJbnRlcm1CbG9jazsKKysKKytzdHJ1Y3QgUHJvZ3Jh
bVByZWx1ZGVDb25maWcKKyt7CisrICAgIGJvb2wgaGFzU3RydWN0RXEgPSBmYWxzZTsKKyt9Owor
KworKy8vIFRoaXMgZW1pdHMgZml4ZWQgaGVscGVyIE1ldGFsIGNvZGUgZGlyZWN0bHkgd2l0aG91
dCBhZGRpbmcgY29kZSB0byB0aGUgQVNULiBUaGlzIHdhbGtzIHRoZSBBU1QgdG8KKysvLyBmaWd1
cmUgb3V0IHRoZSByZXF1aXJlZCB3aGF0IHByZWx1ZGUgTVNMIGNvZGUgaXMgbmVlZGVkIGZvciB2
YXJpb3VzIHRoaW5ncyBpbiB0aGUgQVNULiBZb3UgY2FuCisrLy8gdGhpbmsgb2YgdGhpcyBhcyBl
ZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRpb25zIG9mIGEgaGVscGVyIGxpYnJhcnkg
aW50byB0aGUgZW1pdHRlZAorKy8vIE1ldGFsIHByb2dyYW0uCisrQU5HTEVfTk9fRElTQ0FSRCBi
b29sIEVtaXRQcm9ncmFtUHJlbHVkZShUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlICZvdXQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtUHJlbHVkZUNv
bmZpZyAmcHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BST0dSQU1QUkVMVURFX0hfCitk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcAorbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhODE2OTYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZh
Y2VCbG9ja3MuY3BwCitAQCAtMCwwICsxLDEzMCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVk
dWNlSW50ZXJmYWNlQmxvY2tzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFz
cyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8Y29uc3QgVEludGVyZmFjZUJsb2NrICosIHN0ZDo6bWFwPEltbXV0YWJsZVN0cmluZywg
Y29uc3QgVFZhcmlhYmxlICo+PgorKyAgICAgICAgbUxpZnRlZE1hcDsKKysgICAgc3RkOjp1bm9y
ZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gbUluc3RhbmNl
TWFwOworKworKyAgcHVibGljOgorKyAgICBSZWR1Y2VyKFRDb21waWxlciAmY29tcGlsZXIpIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7fQorKworKyAgICBQcmVSZXN1
bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0Q2hpbGRDb3VudCgpID09
IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworKworKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdl
dEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAmdmFyICAgICAgICA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisrICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnR5cGUgICAgICAgICAgID0gdmFyLmdldFR5cGUoKTsKKysgICAgICAgICAgICBj
b25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworKyAgICAgICAg
ICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJsb2NrID0gdHlwZS5nZXRJ
bnRlcmZhY2VCbG9jaygpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKHN5
bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisrICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgIGF1dG8gJm5hbWVUb1ZhciA9IG1MaWZ0ZWRNYXBbaW50ZXJmYWNlQmxv
Y2tdOworKyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVw
bGFjZW1lbnRzOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChURmllbGQgKmZpZWxkIDogaW50
ZXJmYWNlQmxvY2stPmZpZWxkcygpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBl
KCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0ZWRUeXBlLmdldFF1YWxp
ZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0gfHwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBUUXVhbGlmaWVyOjpFdnFH
bG9iYWwpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVy
KFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
KmxpZnRlZFZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwg
JmxpZnRlZFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWVsZC0+c3ltYm9sVHlwZSgpKTsKKysKKysgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lVG9WYXJbZmllbGQtPm5hbWUoKV0gPSBsaWZ0ZWRWYXI7CisrCisrICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjaygKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1EZWNsYXJhdGlvbntuZXcgVEludGVybVN5bWJvbChs
aWZ0ZWRWYXIpfSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBUUXVh
bGlmaWVyOjpFdnFVbmlmb3JtKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJnN0cnVj
dHVyZSA9CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUU3RydWN0dXJlKCZtU3ltYm9s
VGFibGUsIGludGVyZmFjZUJsb2NrLT5uYW1lKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZpbnRlcmZhY2VCbG9jay0+ZmllbGRzKCksIGludGVyZmFjZUJsb2Nr
LT5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmc3RydWN0VmFyID0g
Q3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgc3RydWN0dXJlKTsKKysgICAg
ICAgICAgICAgICAgICAgIGF1dG8gJmluc3RhbmNlVmFyID0KKysgICAgICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgc3RydWN0dXJlLCBOYW1l
KHZhciksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
UXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNpemVzKCkpOworKworKyAgICAg
ICAgICAgICAgICAgICAgbUluc3RhbmNlTWFwWyZ2YXJdID0gJmluc3RhbmNlVmFyOworKworKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50c1tdID0geworKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1i
b2woJnN0cnVjdFZhcil9LAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVj
bGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19OworKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFByZVJlc3VsdDo6TXVsdGkoc3RkOjpiZWdpbihyZXBsYWNlbWVudHMp
LCBzdGQ6OmVuZChyZXBsYWNlbWVudHMpKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0U3ltYm9sUHJlKFRJ
bnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gaXQgPSBtSW5zdGFuY2VNYXAuZmluZCgmdmFyKTsKKysgICAgICAgICAg
ICBpZiAoaXQgIT0gbUluc3RhbmNlTWFwLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChpdC0+c2Vjb25kKTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICpp
YiA9IHZhci5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKysgICAgICAgICAgICBpZiAo
aXQgIT0gbUxpZnRlZE1hcC5lbmQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGF1dG8gKmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisrICAgICAgICAgICAg
ICAgIEFTU0VSVChsaWZ0ZWRWYXIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50
ZXJtU3ltYm9sKGxpZnRlZFZhcik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAg
ICAgcmV0dXJuIHN5bWJvbE5vZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBu
YW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlJlZHVj
ZUludGVyZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3Qp
CisreworKyAgICBSZWR1Y2VyIHJlZHVjZXIoY29tcGlsZXIpOworKyAgICBpZiAoIXJlZHVjZXIu
cmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRpb25zKCZjb21waWxlciwgJnJvb3QpKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRy
dWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM2OTVjYmEKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJ
bnRlcmZhY2VCbG9ja3MuaAorQEAgLTAsMCArMSwzNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5U
RVJGQUNFQkxPQ0tTX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JN
RVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKysKKysjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5o
IgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHJld3JpdGVzIGludGVyZmFjZSBi
bG9jayBkZWNsYXJhdGlvbnMgb25seS4KKysvLworKy8vIEFjY2VzcyBvZiBpbnRlcmZhY2UgYmxv
Y2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVy
ZmFjZUJsb2NrKS4gLy8KKysvLyBYWFg6IF4gU3RpbGwgdHJ1ZT8KKysvLworKy8vIEV4YW1wbGU6
CisrLy8gIHVuaWZvcm0gRm9vIHsgaW50IHg7IH07CisrLy8gQmVjb21lczoKKysvLyAgdW5pZm9y
bSBpbnQgeDsKKysvLworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0gRm9vIHsgaW50IHg7IH0g
Zm9vOworKy8vIEJlY29tZXM6CisrLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfTsgdW5pZm9ybSBG
b28geDsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZWR1Y2VJbnRlcmZhY2VCbG9ja3Mo
VENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1l
c3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaAorbmV3
IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRiNWQ4NmMKKy0tLSAvZGV2L251bGwK
KysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZl
cmVuY2UuaAorQEAgLTAsMCArMSw1MCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCisrI2Rl
ZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRUZFUkVOQ0Vf
SF8KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gU2ltaWxhciB0byBzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9ycy4KKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBSZWYKKyt7CisrICBwdWJsaWM6CisrICAgIFJlZihjb25z
dCBSZWYgJikgPSBkZWZhdWx0OworKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVsdDsKKysg
ICAgUmVmKFQgJnJlZikgOiBtUHRyKCZyZWYpIHt9CisrCisrICAgIFJlZiAmb3BlcmF0b3I9KGNv
bnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisrICAgIFJlZiAmb3BlcmF0b3I9KFJlZiAmJikgPSBkZWZh
dWx0OworKworKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKysgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFJlZiAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptUHRyICE9ICpvdGhlci5tUHRyOyB9CisrICAg
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8
PSAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikg
Y29uc3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKysgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPCAqb3RoZXIubVB0cjsg
fQorKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAq
bVB0ciA+ICpvdGhlci5tUHRyOyB9CisrCisrICAgIFQgJmdldCgpIHsgcmV0dXJuICptUHRyOyB9
CisrICAgIFQgY29uc3QgJmdldCgpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisrCisrICAgIG9w
ZXJhdG9yIFQgJigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJhdG9yIFQgY29uc3QgJigp
IGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisrCisrICAgIG9wZXJhdG9yIFQgKigpIHsgcmV0dXJu
ICptUHRyOyB9CisrICAgIG9wZXJhdG9yIFQgY29uc3QgKigpIGNvbnN0IHsgcmV0dXJuICptUHRy
OyB9CisrCisrICBwcml2YXRlOgorKyAgICBUICptUHRyOworK307CisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrdXNpbmcgQ1JlZiA9IFJlZjxUIGNvbnN0PjsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1JFRkVSRU5DRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNs
YXJhdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzc3ODE3
NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcAorQEAgLTAsMCArMSw5MSBA
QAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIK
KysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
KytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKKyt7CisrICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4g
bURlY2xhcmVkVmFyU3RhY2s7CisrCisrICBwdWJsaWM6CisrICAgIFJld3JpdGVyKFRDb21waWxl
ciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpIHt9Cisr
CisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1EZWNsYXJlZFZhclN0YWNrLmVt
cHR5KCkpOyB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQgdmlzaXRTd2l0Y2hQcmUo
VEludGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbURlY2xhcmVk
VmFyU3RhY2suZW1wbGFjZV9iYWNrKCk7CisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQor
KworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKSBv
dmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoIW1EZWNsYXJlZFZhclN0YWNrLmVtcHR5
KCkpOworKyAgICAgICAgY29uc3QgYXV0byB2YXJzID0gc3RkOjptb3ZlKG1EZWNsYXJlZFZhclN0
YWNrLmJhY2soKSk7CisrICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3BfYmFjaygpOworKyAg
ICAgICAgaWYgKCF2YXJzLmVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byAm
YmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAgIGZvciAoY29uc3QgVFZh
cmlhYmxlICp2YXIgOiB2YXJzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYmxv
Y2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGJsb2NrLmFwcGVuZFN0YXRlbWVudCgmbm9kZSk7CisrICAg
ICAgICAgICAgcmV0dXJuIGJsb2NrOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7
CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURl
Y2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAoIW1EZWNsYXJl
ZFZhclN0YWNrLmVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgVEludGVybU5vZGUg
KnBhcmVudCA9IGdldFBhcmVudE5vZGUoKTsKKysgICAgICAgICAgICBpZiAocGFyZW50LT5nZXRB
c0Jsb2NrKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAq
Z3JhbmRwYXJlbnQgPSBnZXRQYXJlbnROb2RlKDEpOworKyAgICAgICAgICAgICAgICBpZiAoZ3Jh
bmRwYXJlbnQgJiYgZ3JhbmRwYXJlbnQtPmdldEFzU3dpdGNoTm9kZSgpKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xh
cmF0aW9uKG5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgbURlY2xhcmVkVmFyU3RhY2suYmFj
aygpLnB1c2hfYmFjaygmZGVjbC5zeW1ib2wudmFyaWFibGUoKSk7CisrICAgICAgICAgICAgICAg
ICAgICBpZiAoZGVjbC5pbml0RXhwcikKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9w
QXNzaWduLCAmZGVjbC5zeW1ib2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWNsLmluaXRFeHByKTsKKysgICAgICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBub2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29sIHNoOjpSZXdyaXRlQ2Fz
ZURlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisr
eworKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30K
K2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCituZXcgZmlsZSBt
b2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTVhODgyMQorLS0tIC9kZXYvbnVsbAorKysrIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNl
RGVjbGFyYXRpb25zLmgKK0BAIC0wLDAgKzEsNTAgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZu
ZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNF
REVDTEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JN
RVRBTERJUkVDVF9SRVdSSVRFQ0FTRURFQ0xBUkFUSU9OU19IXworKworKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVy
LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEVYQU1QTEUKKysvLyAgICBzd2l0Y2gg
KGV4cHIpCisrLy8gICAgeworKy8vICAgICAgY2FzZSAwOgorKy8vICAgICAgICBpbnQgeCA9IDA7
CisrLy8gICAgICAgIGJyZWFrOworKy8vICAgICAgY2FzZSAxOgorKy8vICAgICAgICBpbnQgeSA9
IDA7CisrLy8gICAgICAgIHsKKysvLyAgICAgICAgICBpbnQgeiA9IDA7CisrLy8gICAgICAgIH0K
KysvLyAgICAgICAgYnJlYWs7CisrLy8gICAgfQorKy8vIEJlY29tZXMKKysvLyAgICB7CisrLy8g
ICAgICBpbnQgeDsKKysvLyAgICAgIGludCB5OworKy8vICAgICAgc3dpdGNoIChleHByKQorKy8v
ICAgICAgeworKy8vICAgICAgICBjYXNlIDA6CisrLy8gICAgICAgICAgeCA9IDA7CisrLy8gICAg
ICAgICAgYnJlYWs7CisrLy8gICAgICAgIGNhc2UgMToKKysvLyAgICAgICAgICB5ID0gMDsKKysv
LyAgICAgICAgICB7CisrLy8gICAgICAgICAgICBpbnQgeiA9IDA7CisrLy8gICAgICAgICAgfQor
Ky8vICAgICAgICAgIGJyZWFrOworKy8vICAgICAgfQorKy8vICAgIH0KKytBTkdMRV9OT19ESVND
QVJEIGJvb2wgUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVElu
dGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8v
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVD
TEFSQVRJT05TX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRhZDVh
MzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCitAQCAtMCwwICsx
LDExNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWls
ZC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xh
c3MgRmluZERlY2xhcmVkR2xvYmFscyA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgIHB1
YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAqPiBtRGVjbGFy
ZWRHbG9iYWxzOworKworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzKFRDb21waWxlciAmY29tcGls
ZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7fQorKworKyAgICBQ
cmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2Rl
KSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtTm9kZSAqZGVjbGFyYXRvck5vZGUg
PSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2xOb2RlICAgPSBudWxscHRyOworKworKyAgICAgICAgaWYgKFRJbnRlcm1CaW5hcnkgKmluaXRO
b2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBzeW1ib2xOb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOworKyAgICAg
ICAgfQorKworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUpOworKyAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworKworKyAgICAgICAgbURlY2xh
cmVkR2xvYmFscy5pbnNlcnQoJnZhcik7CisrCisrICAgICAgICByZXR1cm4ge2RlY2xOb2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0
aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlk
ZQorKyAgICB7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07Cisr
ICAgIH0KKyt9OworKworK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisr
eworKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+ICZtRGVj
bGFyZWRHbG9iYWxzOworKyAgICBJbnZhcmlhbnRzICZtT3V0SW52YXJpYW50czsKKysKKysgIHB1
YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAqPiAmZGVjbGFyZWRHbG9i
YWxzLAorKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorKyAgICAgICAg
OiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLAorKyAgICAgICAgICBtRGVj
bGFyZWRHbG9iYWxzKGRlY2xhcmVkR2xvYmFscyksCisrICAgICAgICAgIG1PdXRJbnZhcmlhbnRz
KG91dEludmFyaWFudHMpCisrICAgIHt9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uUHJlKAorKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uICZncURlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJt
U3ltYm9sICZzeW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisrICAgICAgICBj
b25zdCBUVmFyaWFibGUgJnZhciAgICAgID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworKworKyAg
ICAgICAgaWYgKGdxRGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBtT3V0SW52YXJpYW50cy5pbnNlcnQodmFyKTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmIChtRGVjbGFyZWRHbG9iYWxzLmZpbmQoJnZhcikgPT0gbURlY2xhcmVkR2xvYmFscy5lbmQo
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRGVjbGFyYXRp
b257JnN5bWJvbE5vZGV9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisr
ICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xh
cmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RnVuY3Rp
b25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKysg
ICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6OlJl
d3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJm91dEludmFyaWFudHMp
CisreworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzIGZkZyhjb21waWxlcik7CisrICAgIGlmICgh
ZmRnLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOwor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIFJld3JpdGVyIHJld3JpdGVy
KGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7CisrICAgIGlm
ICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uOTEzMWJjYQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZp
ZXJEZWNscy5oCitAQCAtMCwwICsxLDQ4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFR0xPQkFMUVVB
TElGSUVSREVDTFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworKworKyNpbmNsdWRlIDx1
bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVy
LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFuZCBU
RmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KKytjbGFzcyBJbnZhcmlhbnRz
CisreworKyAgcHVibGljOgorKyAgICB2b2lkIGluc2VydChjb25zdCBUVmFyaWFibGUgJnZhcikg
eyBtSW52YXJpYW50cy5pbnNlcnQoJnZhcik7IH0KKysKKysgICAgdm9pZCBpbnNlcnQoY29uc3Qg
VEZpZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorKworKyAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAorKyAgICB7CisrICAgICAg
ICByZXR1cm4gbUludmFyaWFudHMuZmluZCgmdmFyKSAhPSBtSW52YXJpYW50cy5lbmQoKTsKKysg
ICAgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNvbnN0Cisr
ICAgIHsKKysgICAgICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFy
aWFudHMuZW5kKCk7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIHN0ZDo6dW5vcmRlcmVk
X3NldDxjb25zdCB2b2lkICo+IG1JbnZhcmlhbnRzOworK307CisrCisrLy8gVGhpcyByZXdyaXRl
cyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25zIGFzIFRJbnRlcm1EZWNsYXJhdGlv
bnMuCisrLy8gYG91dEludmFyaWFudHNgIGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBpbmZvcm1hdGlv
biB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IGJ5IHN1Y2ggYQorKy8vIHRyYW5zZm9ybS4K
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlS2V5d29yZHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi5lMDE0ZjQwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcAorQEAgLTAs
MCArMSw0MzQgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8Y2N0eXBlPgorKyNpbmNs
dWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxsaW1pdHM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9t
YXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtl
eXdvcmRzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisr
dXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFQgKiwgY29uc3QgVCAq
PjsKKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgIHBy
aXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gJm1LZXl3b3JkczsK
KysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgUmVtYXBwaW5nPFRGaWVsZD4gbW9kaWZpZWRGaWVs
ZHM7CisrICAgIFJlbWFwcGluZzxURmllbGRMaXN0PiBtRmllbGRMaXN0czsKKysgICAgUmVtYXBw
aW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKysgICAgUmVtYXBwaW5nPFRJbnRlcmZhY2VCbG9j
az4gbUludGVyZmFjZUJsb2NrczsKKysgICAgUmVtYXBwaW5nPFRTdHJ1Y3R1cmU+IG1TdHJ1Y3R1
cmVzOworKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworKyAgICBzdGQ6OnN0
cmluZyBtTmV3TmFtZUJ1ZmZlcjsKKysKKysgIHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorKyAgICBJbW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVOZXdOYW1lKFQgY29uc3Qg
Jm9iamVjdCkKKysgICAgeworKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcob2JqZWN0LCBmYWxz
ZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1l
KE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIE5h
bWUob2JqZWN0KS5yYXdOYW1lKCk7CisrICAgIH0KKysKKysgICAgY29uc3QgVEZpZWxkICpjcmVh
dGVSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysgICAgICAgIGF1dG8gKnJl
bmFtZWQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoY29uc3RfY2FzdDxUVHlwZSAqPigmZ2V0
UmVuYW1lZE9yT3JpZ2luYWwoKmZpZWxkLnR5cGUoKSkpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgbWF5YmVDcmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisr
ICAgIGNvbnN0IFRGaWVsZExpc3QgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRMaXN0KQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRGaWVsZExpc3Qo
KTsKKysgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZW5hbWVkLT5wdXNoX2JhY2soY29uc3RfY2FzdDxURmllbGQg
Kj4oJmdldFJlbmFtZWRPck9yaWdpbmFsKCpmaWVsZCkpKTsKKysgICAgICAgIH0KKysgICAgICAg
IHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRl
UmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uKQorKyAgICB7CisrICAgICAgICBhdXRv
ICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1h
eWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoZnVuY3Rpb24u
Z2V0UmV0dXJuVHlwZSgpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLmlz
S25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsKKysKKysgICAgICAgIGNvbnN0IHNpemVfdCBw
YXJhbUNvdW50ID0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOworKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZwYXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKysgICAgICAg
ICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFtZWRPck9yaWdpbmFsKHBhcmFtKSk7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoZnVuY3Rpb24uaXNEZWZpbmVkKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0RGVmaW5lZCgpOworKyAgICAgICAgfQor
KworKyAgICAgICAgaWYgKGZ1bmN0aW9uLmhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBlRGVjbGFyYXRpb24o
KTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisr
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICBUTGF5b3V0UXVhbGlmaWVy
IGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0ZSgpOworKyAgICAgICAg
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0
b3JhZ2UoKTsKKysgICAgICAgIGxheW91dFF1YWxpZmllci5iaW5kaW5nICAgICAgICAgID0gaW50
ZXJmYWNlQmxvY2suYmxvY2tCaW5kaW5nKCk7CisrCisrICAgICAgICBhdXRvICpyZW5hbWVkID0K
KysgICAgICAgICAgICBuZXcgVEludGVyZmFjZUJsb2NrKCZtU3ltYm9sVGFibGUsIG1heWJlQ3Jl
YXRlTmV3TmFtZShpbnRlcmZhY2VCbG9jayksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2suZmllbGRzKCkpLCBsYXlv
dXRRdWFsaWZpZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisrCisrICAgICAg
ICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICBjb25zdCBUU3RydWN0dXJlICpjcmVh
dGVSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKysgICAgeworKyAgICAgICAg
YXV0byAqcmVuYW1lZCA9CisrICAgICAgICAgICAgbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJs
ZSwgbWF5YmVDcmVhdGVOZXdOYW1lKHN0cnVjdHVyZSksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOworKworKyAgICAgICAgcmVuYW1lZC0+c2V0QXRHbG9iYWxTY29w
ZShzdHJ1Y3R1cmUuYXRHbG9iYWxTY29wZSgpKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRUeXBlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRUeXBl
ICZ0eXBlKQorKyAgICB7CisrICAgICAgICBUVHlwZSAqcmVuYW1lZDsKKysKKysgICAgICAgIGlm
IChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJlbmFtZWQgPSBuZXcgVFR5cGUoJmdldFJlbmFtZWRPck9yaWdp
bmFsKCpzdHJ1Y3R1cmUpLCB0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkpOworKyAgICAgICAgfQor
KyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9
IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZW5h
bWVkID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JPcmlnaW5hbCgqaW50ZXJmYWNlQmxvY2spLCB0
eXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIENhbid0IHJlbmFtZSBidWls
dC1pbiB0eXBlcy4KKysgICAgICAgICAgICByZW5hbWVkID0gbnVsbHB0cjsKKysgICAgICAgIH0K
KysKKysgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZW5hbWVkLT5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlTaXplcygpKTsKKysgICAgICAgIH0K
KysgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNpc2UoKSk7CisrICAgICAg
ICByZW5hbWVkLT5zZXRJbnZhcmlhbnQodHlwZS5pc0ludmFyaWFudCgpKTsKKysgICAgICAgIHJl
bmFtZWQtPnNldE1lbW9yeVF1YWxpZmllcih0eXBlLmdldE1lbW9yeVF1YWxpZmllcigpKTsKKysg
ICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExheW91dFF1YWxpZmll
cigpKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0
IFRWYXJpYWJsZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlKQorKyAg
ICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxl
LCBtYXliZUNyZWF0ZU5ld05hbWUodmFyaWFibGUpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHZhcmlhYmxlLmdldFR5cGUoKSks
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmds
ZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisrCisrICAgICAgICByZXR1cm4gcmVu
YW1lZDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgY29uc3Qg
VCAqdHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFw
cGluZykKKysgICAgeworKyAgICAgICAgaWYgKCFuZWVkc1JlbmFtaW5nKG9iamVjdCwgdHJ1ZSkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICB9Cisr
CisrICAgICAgICBpZiAocmVtYXBwaW5nKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8g
aXQgPSByZW1hcHBpbmctPmZpbmQoJm9iamVjdCk7CisrICAgICAgICAgICAgaWYgKGl0ICE9IHJl
bWFwcGluZy0+ZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBjb25z
dCBUICpyZW5hbWVkT2JqZWN0ID0gY3JlYXRlUmVuYW1lZChvYmplY3QpOworKworKyAgICAgICAg
aWYgKHJlbWFwcGluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAoKnJlbWFwcGluZylbJm9i
amVjdF0gPSByZW5hbWVkT2JqZWN0OworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIHJl
bmFtZWRPYmplY3Q7CisrICAgIH0KKysKKysgICAgY29uc3QgVEZpZWxkICp0cnlHZXRSZW5hbWVk
KGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnlHZXRSZW5h
bWVkSW1wbChmaWVsZCwgJm1vZGlmaWVkRmllbGRzKTsKKysgICAgfQorKworKyAgICBjb25zdCBU
RmllbGRMaXN0ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkTGlzdCwgJm1GaWVs
ZExpc3RzKTsKKysgICAgfQorKworKyAgICBjb25zdCBURnVuY3Rpb24gKnRyeUdldFJlbmFtZWQo
Y29uc3QgVEZ1bmN0aW9uICZmdW5jKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwoZnVuYywgJm1GdW5jdGlvbnMpOworKyAgICB9CisrCisrICAgIGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAqdHJ5R2V0UmVuYW1lZChjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFj
ZUJsb2NrKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoaW50ZXJm
YWNlQmxvY2ssICZtSW50ZXJmYWNlQmxvY2tzKTsKKysgICAgfQorKworKyAgICBjb25zdCBUU3Ry
dWN0dXJlICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1TdHJ1Y3R1
cmVzKTsKKysgICAgfQorKworKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBU
VHlwZSAmdHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHR5
cGUsIHN0YXRpY19jYXN0PFJlbWFwcGluZzxUVHlwZT4gKj4obnVsbHB0cikpOworKyAgICB9Cisr
CisrICAgIGNvbnN0IFRWYXJpYWJsZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUVmFyaWFibGUgJnZh
cmlhYmxlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwodmFyaWFi
bGUsICZtVmFyaWFibGVzKTsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KysgICAgY29uc3QgVCAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoY29uc3QgVCAmb2JqZWN0KQorKyAg
ICB7CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkID0gdHJ5R2V0UmVuYW1lZChvYmplY3QpOwor
KyAgICAgICAgaWYgKHJlbmFtZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuICpy
ZW5hbWVkOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKysgICAgfQorKwor
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nSW1wbChj
b25zdCBUICZvYmplY3QpIGNvbnN0CisrICAgIHsKKysgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUg
c3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xUeXBlKCk7CisrICAgICAgICBzd2l0Y2ggKHN5bWJv
bFR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdElu
OgorKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbDoKKysgICAgICAg
ICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisrCisrICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZDoKKysgICAg
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBjb25zdCBJbW11dGFi
bGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7CisrICAgICAgICBpZiAobUtl
eXdvcmRzLmZpbmQobmFtZSkgIT0gbUtleXdvcmRzLmVuZCgpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKG5hbWUuYmVn
aW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVsZCAmZmllbGQsIGJvb2wg
cmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWluZ0lt
cGwoZmllbGQpIHx8IChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZygqZmllbGQudHlwZSgpLCB0
cnVlKSk7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkTGlzdCwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIEFT
U0VSVChyZWN1cnNpdmUpOworKyAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogZmll
bGRMaXN0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVs
ZCwgdHJ1ZSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGdW5jdGlvbiAmZnVuY3Rpb24s
IGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICBpZiAobmVlZHNSZW5hbWlu
Z0ltcGwoZnVuY3Rpb24pKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgY29uc3Qgc2l6
ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7CisrICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdldFBhcmFtKGkpOworKyAg
ICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBhcmFtLCB0cnVlKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIG5lZWRz
UmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgYm9vbCByZWN1
cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbChp
bnRlcmZhY2VCbG9jaykgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRzUmVu
YW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKysgICAgfQorKworKyAgICBi
b29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHJlY3Vy
c2l2ZSkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5lZWRzUmVuYW1pbmdJbXBsKHN0
cnVjdHVyZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmco
c3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1Jl
bmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKysgICAgewor
KyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVuYW1pbmcoKnN0cnVj
dHVyZSwgcmVjdXJzaXZlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJsb2NrKCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVuYW1pbmcoKmludGVyZmFj
ZUJsb2NrLCByZWN1cnNpdmUpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAg
ICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSwgYm9vbCByZWN1
cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2
YXJpYWJsZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmco
dmFyaWFibGUuZ2V0VHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysgIHB1YmxpYzoKKysgICAg
UmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBjb25zdCBzdGQ6OnNl
dDxJbW11dGFibGVTdHJpbmc+ICZrZXl3b3JkcykKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2Vu
KQorKyAgICB7fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wg
JnN5bWJvbE5vZGUpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3lt
Ym9sTm9kZS52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVl
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnJWYXIgPSBnZXRS
ZW5hbWVkT3JPcmlnaW5hbCh2YXIpOworKyAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1T
eW1ib2woJnJWYXIpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN5bWJvbE5vZGU7Cisr
ICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKFRJbnRlcm1G
dW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgeworKyAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAg
IGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKysg
ICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsK
KysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBmdW5jUHJvdG9Ob2RlOworKyAgICB9CisrCisr
ICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVu
Y3Rpb25Qcm90b3R5cGUoKTsKKysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyAgICAgICAg
ICAgICAgICAgICA9ICpmdW5jUHJvdG9Ob2RlLmdldEZ1bmN0aW9uKCk7CisrICAgICAgICBpZiAo
bmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJnJGdW5jID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwoZnVuYyk7CisrICAgICAg
ICAgICAgYXV0byAqckZ1bmNQcm90b05vZGUgICA9IG5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUoJnJGdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkpOworKyAgICAgICAg
fQorKyAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1
bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmFnZ3JlZ2F0ZU5vZGUpIG92
ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChhZ2dyZWdhdGVOb2RlLmlzQ29uc3RydWN0b3Io
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3JlZ2F0
ZU5vZGUuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHR5cGUsIHRy
dWUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBl
ID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisrICAgICAgICAgICAgICAgIHJldHVybiBU
SW50ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihyVHlwZSwgYWdncmVnYXRlTm9kZS5n
ZXRTZXF1ZW5jZSgpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNl
CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3Jl
Z2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhm
dW5jLCB0cnVlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5j
dGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKysgICAgICAgICAgICAg
ICAgc3dpdGNoIChhZ2dyZWdhdGVOb2RlLmdldE9wKCkpCisrICAgICAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoK
KysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
RnVuY3Rpb25DYWxsKHJGdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5j
ZSgpKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50
ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlUmF3RnVuY3Rpb25DYWxsKHJGdW5jLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6
OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJGdW5jLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCkpOworKyAgICAgICAgICAgICAgICB9
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5v
ZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlJld3JpdGVLZXl3b3JkcyhUQ29tcGls
ZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJv
b3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiAma2V5d29yZHMp
CisreworKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRHZW4sIGtleXdvcmRzKTsK
KysgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQg
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtl
eXdvcmRzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUtleXdvcmRzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5i
MTYyYmM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK0BAIC0wLDAgKzEsMjcgQEAKKysv
LworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisrCisrI2luY2x1ZGUg
PHNldD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKysvLyBUaGlzIHdhbGtzIHRoZSB0cmVlIGFuZCByZW5hbWVzIGFsbCBuYW1lcyB0aGF0IGNv
bmZsaWN0IHdpdGggdGhlIGlucHV0IGBrZXl3b3Jkc2AuCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IFJld3JpdGVLZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiAma2V5
d29yZHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVPdXRBcmdzLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlT3V0QXJncy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi45MWMwMzdkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwCitAQCAtMCwwICsx
LDIwNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFt
ZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KytjbGFzcyBTbWFsbE11bHRpU2V0CisreworKyAgcHVibGljOgorKyAgICBzdHJ1Y3QgRW50cnkK
KysgICAgeworKyAgICAgICAgVCBlbGVtOworKyAgICAgICAgc2l6ZV90IGNvdW50OworKyAgICB9
OworKworKyAgICBjb25zdCBFbnRyeSAqZmluZChjb25zdCBUICZ4KSBjb25zdAorKyAgICB7Cisr
ICAgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgaWYgKHggPT0gZW50cnkuZWxlbSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIHJldHVybiAmZW50cnk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgc2l6ZV90IG11bHRpcGxpY2l0eShjb25z
dCBUICZ4KSBjb25zdAorKyAgICB7CisrICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5k
KHgpOworKyAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvdW50IDogMDsKKysgICAgfQor
KworKyAgICBjb25zdCBFbnRyeSAmaW5zZXJ0KGNvbnN0IFQgJngpCisrICAgIHsKKysgICAgICAg
IEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgpOworKyAgICAgICAgaWYgKGVudHJ5KQorKyAg
ICAgICAgeworKyAgICAgICAgICAgICsrZW50cnktPmNvdW50OworKyAgICAgICAgICAgIHJldHVy
biAqZW50cnk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAg
ICAgICAgbUVudHJpZXMucHVzaF9iYWNrKHt4LCAxfSk7CisrICAgICAgICAgICAgcmV0dXJuIG1F
bnRyaWVzLmJhY2soKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIGNsZWFyKCkg
eyBtRW50cmllcy5jbGVhcigpOyB9CisrCisrICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy
biBtRW50cmllcy5lbXB0eSgpOyB9CisrCisrICAgIHNpemVfdCB1bmlxdWVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbUVudHJpZXMuc2l6ZSgpOyB9CisrCisrICBwcml2YXRlOgorKyAgICBBTkdMRV9J
TkxJTkUgRW50cnkgKmZpbmRNdXRhYmxlKGNvbnN0IFQgJngpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
RW50cnkgKj4oZmluZCh4KSk7IH0KKysKKysgIHByaXZhdGU6CisrICAgIHN0ZDo6dmVjdG9yPEVu
dHJ5PiBtRW50cmllczsKKyt9OworKworK2NvbnN0IFRWYXJpYWJsZSAqR2V0VmFyaWFibGUoVElu
dGVybU5vZGUgJm5vZGUpCisreworKyAgICBUSW50ZXJtVHlwZWQgKnR5Tm9kZSA9IG5vZGUuZ2V0
QXNUeXBlZCgpOworKyAgICBBU1NFUlQodHlOb2RlKTsKKysgICAgaWYgKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAmc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOwor
K30KKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgICAg
U21hbGxNdWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxl
IGJ1ZmZlcgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrCisrICBwdWJsaWM6CisrICAg
IH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1WYXJCdWZmZXIuZW1wdHkoKSk7IH0KKysK
KysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYp
CisrICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1i
b2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVn
YXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgICAgIGNvbnN0
IFRGdW5jdGlvbiAqZnVuYyA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAg
IGlmICghZnVuYykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9k
ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dy
ZWdhdGVOb2RlLmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAg
PSBhcmdzLnNpemUoKTsKKysKKysgICAgICAgIGF1dG8gZ2V0UGFyYW1RdWFsaWZpZXIgPSBbJl0o
c2l6ZV90IGkpIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtICAgICA9ICpm
dW5jLT5nZXRQYXJhbShpKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlICAg
ICA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHBhcmFt
UXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHBh
cmFtUXVhbCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUluT3V0Ogor
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sRW52LmlzUmVmZXJlbmNlKHBhcmFtKSkK
KysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtU3ltYm9s
RW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworKyAgICAg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKysgICAgICAgIH07CisrCisrICAg
ICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBU
UXVhbGlmaWVyIHBhcmFtUXVhbCA9IGdldFBhcmFtUXVhbGlmaWVyKGkpOworKworKyAgICAgICAg
ICAgIHN3aXRjaCAocGFyYW1RdWFsKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
Y2FzZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAqdmFyID0gR2V0VmFyaWFibGUoKmFyZ3NbaV0pOworKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorKyAgICAgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0QWxpYXMgPSB0cnVl
OworKyAgICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKysgICAg
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBi
cmVhazsKKysKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIGNvbnN0IGJv
b2wgaGFzSW5kZXRlcm1pbmF0ZVZhciA9IG1WYXJCdWZmZXIuZmluZChudWxscHRyKTsKKysKKysg
ICAgICAgIGlmICghbWlnaHRBbGlhcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBtaWdodEFs
aWFzID0gaGFzSW5kZXRlcm1pbmF0ZVZhciAmJiBtVmFyQnVmZmVyLnVuaXF1ZVNpemUoKSA+IDE7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobWlnaHRBbGlhcykKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdl
dEFzVHlwZWQoKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7CisrICAgICAgICAgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyICAgICAgID0gR2V0VmFyaWFibGUoKmFyZyk7CisrICAg
ICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZp
ZXIoaSk7CisrCisrICAgICAgICAgICAgICAgIGlmIChoYXNJbmRldGVybWluYXRlVmFyIHx8IG1W
YXJCdWZmZXIubXVsdGlwbGljaXR5KHZhcikgPiAxKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAgICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9ICZtU3ltYm9sRW52LmNhbGxGdW5j
dGlvbk92ZXJsb2FkKE5hbWUoIm91dCIpLCBhcmctPmdldFR5cGUoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpuZXcgVEludGVybVNlcXVlbmNle2FyZ30pOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gJm1TeW1ib2xF
bnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lKCJpbm91dCIpLCBhcmctPmdldFR5cGUoKSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7YXJn
fSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgbVZhckJ1ZmZlci5jbGVhcigpOworKworKyAg
ICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255
bW91cyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpSZXdyaXRlT3V0QXJncyhUQ29tcGlsZXIgJmNv
bXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorK3sKKysg
ICAgUmV3cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisrICAgIGlmICghcmV3
cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmggYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3Mu
aAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4MmI3NDcKKy0tLSAvZGV2
L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZXdyaXRlT3V0QXJncy5oCitAQCAtMCwwICsxLDMzIEBACisrLy8KKysvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisr
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRF
T1VUQVJHU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVXUklURU9VVEFSR1NfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysKKytuYW1lc3BhY2Ugc2gK
Kyt7CisrCisrLy8gZS5nLjoKKysvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50
IHkpKi8KKysvLyAgICBmb28oeiwgdyk7CisrLy8gYmVjb21lcworKy8vICAgIGZvbyhPdXQoeiks
IEluT3V0KHcpKTsKKysvLyB1bmxlc3MgYHpgIGFuZCBgd2AgYXJlIGRldGVjdGVkIHRvIG5ldmVy
IGFsaWFzLgorKy8vIFRoZSB0cmFuc2xhdGVkIGV4YW1wbGUgZWZmZWN0aXZlbHkgYmVoYXZlcyB0
aGUgc2FtZSBhczoKKysvLyAgICBpbnQgXzE7CisrLy8gICAgaW50IF8yID0gdzsKKysvLyAgICBm
b28oXzEsIF8yKTsKKysvLyAgICB6ID0gXzE7CisrLy8gICAgdyA9IF8yOworK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXdyaXRlT3V0QXJncyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxv
Y2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gK
KysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFV1JJVEVPVVRBUkdTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3BwIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3BwCitu
ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzYzN2UyMworLS0tIC9kZXYvbnVs
bAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuY3BwCitAQCAtMCwwICsxLDkzOCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRl
IDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L01hcFN5bWJvbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lTm9PcHMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZE1haW4uaCIKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorKworK3VzaW5nIG5h
bWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQor
K3sKKysKKyt1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZh
cmlhYmxlICo+OworK3VzaW5nIFZhcmlhYmxlTGlzdCA9IHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJp
YWJsZSAqPjsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3N0cnVjdCBQaXBlbGlu
ZVN0cnVjdEluZm8KKyt7CisrICAgIFZhcmlhYmxlU2V0IHBpcGVsaW5lVmFyaWFibGVzOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdDsKKysgICAgY29uc3Qg
VEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKysgICAgY29uc3Qg
VEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0cjsKKysKKysgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QKKysgICAgeworKyAgICAgICAgaWYgKHBpcGVsaW5lU3RydWN0Lmlz
VG90YWxseUVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5l
VmFyaWFibGVzLmVtcHR5KCkpOworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
fQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGlu
ZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworKyAgICAgICAgICAgIEFTU0VSVCghcGlwZWxpbmVW
YXJpYWJsZXMuZW1wdHkoKSk7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAg
fQorKyAgICB9CisrfTsKKysKKytjbGFzcyBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IDogcHJpdmF0
ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IFBpcGVsaW5lICZt
UGlwZWxpbmU7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysgICAgSW52YXJpYW50cyAm
bUludmFyaWFudHM7CisrICAgIFZhcmlhYmxlTGlzdCBtUGlwZWxpbmVWYXJpYWJsZUxpc3Q7Cisr
ICAgIElkR2VuICZtSWRHZW47CisrICAgIFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKysKKysg
IHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wgRXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwK
KysgICAgICAgICAgICAgICAgICAgICBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICBJZEdl
biAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5l
LAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAg
ICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisrICAgIHsKKysgICAgICAgIEdl
bmVyYXRlUGlwZWxpbmVTdHJ1Y3Qgc2VsZihjb21waWxlciwgaWRHZW4sIHBpcGVsaW5lLCBzeW1i
b2xFbnYsIGludmFyaWFudHMpOworKyAgICAgICAgaWYgKCFzZWxmLmV4ZWMocm9vdCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAg
b3V0ID0gc2VsZi5tSW5mbzsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICBw
cml2YXRlOgorKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21waWxlciAmY29tcGlsZXIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1QaXBlbGluZShwaXBlbGluZSks
CisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAgICAgICAgbUludmFyaWFu
dHMoaW52YXJpYW50cyksCisrICAgICAgICAgIG1JZEdlbihpZEdlbikKKysgICAge30KKysKKysg
ICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKysgICAgeworKyAgICAgICAgaWYgKCFy
ZWJ1aWxkUm9vdChyb290KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZW1w
dHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisrCisrICAgICAgICBjb25zdCBUU3Ry
dWN0dXJlICZwaXBlbGluZVN0cnVjdCA9IFsmXSgpIC0+IGNvbnN0IFRTdHJ1Y3R1cmUgJiB7Cisr
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFy
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5h
bFBpcGVsaW5lU3RydWN0KHJvb3QsIHNlcSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfSgp
OworKworKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyBtb2RpZmllZE1hY2hpbmVy
aWVzOworKyAgICAgICAgY29uc3QgYm9vbCBtb2RpZmllZCA9IFRyeUNyZWF0ZU1vZGlmaWVkU3Ry
dWN0KAorKyAgICAgICAgICAgIG1TeW1ib2xFbnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFs
U3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgIG1QaXBl
bGluZS5nZXRTdHJ1Y3RUeXBlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpLCBtb2Rp
ZmllZE1hY2hpbmVyaWVzKTsKKysKKysgICAgICAgIGlmIChtb2RpZmllZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lLnR5cGUgIT0gUGlwZWxpbmU6OlR5cGU6OlRl
eHR1cmUpOworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFy
KTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBjb25zdHJ1Y3Rpb24uCisrCisrICAgICAg
ICAgICAgYXV0byBnZXRGdW5jdGlvbiA9IFtdKHNoOjpUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICpmdW5jRGVjbCkgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY0RlY2wgPyBmdW5jRGVj
bC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisrICAgICAgICAgICAgfTsKKysKKysgICAgICAg
ICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGluZXJpZXMuc2l6ZSgpOworKyAg
ICAgICAgICAgIEFTU0VSVChzaXplID4gMCk7CisrICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25z
dCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmbWFjaGluZXJ5ID0gbW9kaWZpZWRNYWNoaW5lcmll
cy5hdChpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVj
dCk7CisrCisrICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnsKKysgICAgICAgICAgICAgICAgICAgICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUobVN5
bWJvbFRhYmxlLCAqbWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0KX0pOworKworKyAgICAgICAgICAg
ICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlm
aWVkKTsKKysgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbWFjaGluZXJ5LmZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWwpOworKyAgICAgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5l
cnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAg
ICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1hY2hpbmVyeS5mdW5jTW9kaWZpZWRUb09yaWdp
bmFsKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBz
aXplIC0gMSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbUluZm8u
ZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IGdldEZ1bmN0aW9uKG1hY2hpbmVyeS5mdW5jT3JpZ2lu
YWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIG1JbmZvLmZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7
CisrCisrICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9
ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3Ry
dWN0LmV4dGVybmFsID0KKysgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hp
bmVyeS5tb2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsK
KysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0
cnVjdDsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5leHRlcm5hbCA9ICZwaXBl
bGluZVN0cnVjdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2Rl
cyhGaW5kTWFpbkluZGV4KCZyb290KSwgc2VxKTsKKysKKysgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9u
ICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCAg
ICAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKworKyAgICAgICAgaWYgKG1QaXBlbGlu
ZS51c2VzKHZhcikpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1JbmZvLnBpcGVs
aW5lVmFyaWFibGVzLmZpbmQoJnZhcikgPT0gbUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZW5kKCkp
OworKyAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmluc2VydCgmdmFyKTsKKysg
ICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNrKCZ2YXIpOworKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIGRl
Y2xOb2RlOworKyAgICB9CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmNyZWF0ZUludGVybmFs
UGlwZWxpbmVTdHJ1Y3QoVEludGVybUJsb2NrICZyb290LCBUSW50ZXJtU2VxdWVuY2UgJm91dERl
Y2xTZXEpCisrICAgIHsKKysgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcgVEZpZWxkTGlzdCgp
OworKworKyAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlOgorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlh
YmxlTGlzdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFtSW52YXJpYW50cy5jb250YWlucygqdmFyKSk7CisrICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUQmFzaWNUeXBlIHNhbXBsZXJUeXBlID0gdmFyVHlwZS5nZXRCYXNpY1R5
cGUoKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVF
bnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAqdGV4dHVyZUVudlR5cGUgICAgICAgICA9IG5ldyBUVHlwZSgmdGV4dHVy
ZUVudiwgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhclR5cGUuaXNBcnJheSgp
KQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnZUeXBlLT5tYWtlQXJyYXlzKHZhclR5cGUuZ2V0QXJyYXlTaXplcygpKTsKKysgICAgICAg
ICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoX2JhY2so
CisrICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0dXJlRW52VHlwZSwgdmFy
LT5uYW1lKCksIGtOb1NvdXJjZUxvYywgdmFyLT5zeW1ib2xUeXBlKCkpKTsKKysgICAgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKysgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmdHlwZSAgPSBDbG9uZVR5cGUodmFyLT5n
ZXRUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxk
KCZ0eXBlLCB2YXItPm5hbWUoKSwga05vU291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7Cisr
ICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKGZpZWxkKTsKKysKKysgICAgICAg
ICAgICAgICAgICAgIGlmIChtSW52YXJpYW50cy5jb250YWlucygqdmFyKSkKKysgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSW52YXJpYW50cy5pbnNlcnQo
KmZpZWxkKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAg
IE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBp
cGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisrICAgICAgICBhdXRvICZzID0gKm5ldyBUU3Ry
dWN0dXJlKCZtU3ltYm9sVGFibGUsIHBpcGVsaW5lU3RydWN0TmFtZS5yYXdOYW1lKCksICZmaWVs
ZHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lU3RydWN0TmFt
ZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgb3V0RGVjbFNlcS5wdXNoX2JhY2sobmV3IFRJ
bnRlcm1EZWNsYXJhdGlvbnsmQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwg
cyl9KTsKKysKKysgICAgICAgIHJldHVybiBzOworKyAgICB9CisrfTsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gQ3JlYXRlUGlwZWxp
bmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZw
aXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0KQorK3sKKysg
ICAgQVNTRVJUKHBpcGVsaW5lU3RydWN0LmlzVG90YWxseUZ1bGwoKSk7CisrCisrICAgIFBpcGVs
aW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisrCisrICAgIGF1dG8g
cG9wdWxhdGVFeHRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKysgICAgICAgIEFTU0VSVCgh
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworKyAgICAgICAgcGlwZWxpbmVNYWluTG9j
YWxWYXIuZXh0ZXJuYWwgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgKKysgICAgICAgICAgICBz
eW1ib2xUYWJsZSwgKnBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorKyAgICAgICAgICAgIHBpcGVs
aW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQaXBlbGluZTo6
VmFyaWFudDo6T3JpZ2luYWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSk7CisrICAgIH07CisrCisr
ICAgIGF1dG8gcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyID0gWyZdKCkgewor
KyAgICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisrICAgICAg
ICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9CisrICAgICAgICAgICAgJkNyZWF0ZUlu
c3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5pbnRlcm5hbCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0
YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisrICAgIH07CisrCisrICAg
IGlmIChwaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorKyAgICB7
CisrICAgICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKysgICAg
fQorKyAgICBlbHNlIGlmIChwaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNs
YXJhdGlvbkluTWFpbigpKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxv
Y2FsVmFyKCk7CisrCisrICAgICAgICBpZiAocGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwgPSBw
aXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UK
KysgICAgICAgIHsKKysgICAgICAgICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9j
YWxWYXIoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIGlmICghcGlwZWxpbmVTdHJ1
Y3QuaXNVbmlmb3JtKCkpCisrICAgIHsKKysgICAgICAgIHBvcHVsYXRlRGlzdGluY3RJbnRlcm5h
bE1haW5Mb2NhbFZhcigpOworKyAgICB9CisrCisrICAgIHJldHVybiBwaXBlbGluZU1haW5Mb2Nh
bFZhcjsKKyt9CisrCisrY2xhc3MgUGlwZWxpbmVGdW5jdGlvbkVudgorK3sKKysgIHByaXZhdGU6
CisrICAgIFRDb21waWxlciAmbUNvbXBpbGVyOworKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7
CisrICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworKyAgICBJZEdlbiAmbUlkR2VuOwor
KyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlvbnM7CisrICAgIGNvbnN0
IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKysgICAgUGlwZWxp
bmVTY29wZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFyOworKworKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIGNvbnN0IFRGdW5jdGlvbiAqPiBtRnVu
Y01hcDsKKysKKysgIHB1YmxpYzoKKysgICAgUGlwZWxpbmVGdW5jdGlvbkVudihUQ29tcGlsZXIg
JmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlwZWxp
bmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0
cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxp
bmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxWYXIpCisrICAgICAgICA6IG1D
b21waWxlcihjb21waWxlciksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysg
ICAgICAgICAgbVN5bWJvbFRhYmxlKHN5bWJvbEVudi5zeW1ib2xUYWJsZSgpKSwKKysgICAgICAg
ICAgbUlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKysgICAg
ICAgICAgbVBpcGVsaW5lRnVuY3Rpb25zKHBpcGVsaW5lRnVuY3Rpb25zKSwKKysgICAgICAgICAg
bVBpcGVsaW5lU3RydWN0KHBpcGVsaW5lU3RydWN0KSwKKysgICAgICAgICAgbVBpcGVsaW5lTWFp
bkxvY2FsVmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorKyAgICB7fQorKworKyAgICBib29sIGlz
T3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIG1QaXBlbGluZUZ1bmN0aW9ucy5maW5kKCZmdW5jKSAhPSBt
UGlwZWxpbmVGdW5jdGlvbnMuZW5kKCk7CisrICAgIH0KKysKKysgICAgYm9vbCBpc1VwZGF0ZWRQ
aXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKysgICAgeworKyAg
ICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAgICAgICAgaWYgKGl0ID09
IG1GdW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgIH0KKysgICAgICAgIHJldHVybiAmZnVuYyA9PSBpdC0+c2Vjb25kOworKyAgICB9
CisrCisrICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5j
dGlvbiAmZnVuYykKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzT3JpZ2luYWxQaXBlbGluZUZ1
bmN0aW9uKGZ1bmMpIHx8IGlzVXBkYXRlZFBpcGVsaW5lRnVuY3Rpb24oZnVuYykpOworKworKyAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uICpuZXdGdW5jOworKworKyAgICAgICAgYXV0byBpdCA9IG1G
dW5jTWFwLmZpbmQoJmZ1bmMpOworKyAgICAgICAgaWYgKGl0ID09IG1GdW5jTWFwLmVuZCgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4o
KTsKKysKKysgICAgICAgICAgICBpZiAoaXNNYWluICYmIG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NFUlQoZnVuYy5nZXRSZXR1
cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCk7CisrICAgICAg
ICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZENoYW5nZVJldHVyblR5cGUobVN5
bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwp
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChpc01haW4gJiYgKG1QaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFscyB8fAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxp
bmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+IHZhcmlhYmxlczsK
KysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3Ry
dWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayhuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IGZpZWxkLT5uYW1lKCksIGZpZWxkLT50eXBlKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSkpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlv
bkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1bmMsIHZhcmlhYmxlcyk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTWFpbiAmJiBtUGlwZWxp
bmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7Cisr
ICAgICAgICAgICAgICAgIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKnJlZmxlY3Rpb24gPQor
KyAgICAgICAgICAgICAgICAgICAgKChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0ICopJm1Db21w
aWxlciktPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKysgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0
cnVjdHVyZSAqdGV4dHVyZUVudiA9IGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpOworKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCku
c2l6ZSgpID09IDIpOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKnN1
YmZpZWxkIDogdGV4dHVyZUVudi0+ZmllbGRzKCkpCisrICAgICAgICAgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5l
d05hbWUoe2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKysgICAgICAgICAgICAg
ICAgICAgICAgICBUVHlwZSAmdHlwZSAgICAgPSAqbmV3IFRUeXBlKCpzdWJmaWVsZC0+dHlwZSgp
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5cGUuaXNBcnJheSgpKTsKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0
QXJyYXlTaXplcygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBhdXRvICp2YXIgPQorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5h
bWUucmF3TmFtZSgpLCAmdHlwZSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZWZsZWN0aW9uLT5hZGRPcmlnaW5hbE5hbWUodmFyLT51bmlxdWVJZCgpLmdldCgpLCBm
aWVsZC0+bmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9uZUZ1bmN0aW9uQW5kQXBw
ZW5kUGFyYW1zKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgdmFyaWFibGVzKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBl
ID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgTmFtZSBuYW1lID0gbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6TW9kaWZpZWQpOworKyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBu
ZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRV
SW50KSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAgICBuZXdGdW5jICAgPSAm
Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1bmMs
ICp2YXIpOworKyAgICAgICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFy
LCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSk7CisrICAgICAgICAgICAgICAgIG1Q
aXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCA9IHZhcjsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworKyAg
ICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAqdmFyOworKyAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOworKwor
KyAgICAgICAgICAgICAgICBpZiAoaXNNYWluICYmICFtUGlwZWxpbmVNYWluTG9jYWxWYXIuaXNV
bmlmb3JtKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHZhciA9
ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorKyAgICAgICAgICAgICAgICAgICAgICAgIG1TeW1i
b2xUYWJsZSwgKm1QaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpN
b2RpZmllZCkpOworKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gbVBpcGVsaW5l
LmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB2YXIg
PSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgKKysgICAgICAgICAgICAgICAgICAgICAgICBtU3lt
Ym9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6
T3JpZ2luYWwpKTsKKysgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9IG1QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCkKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFkOworKyAg
ICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJlbmNl
ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgaWYgKGlzTWFpbikKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKysgICAgICAg
ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpU
eXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpU
eXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrQXNSZWZl
cmVuY2UgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0K
KysKKysgICAgICAgICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKysgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgbVN5bWJvbEVudi5tYXJrQXNSZWZlcmVuY2UoKnZh
ciwgYWRkcmVzc1NwYWNlKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAg
ICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0obVN5bWJvbFRhYmxlLCBu
dWxscHRyLCBmdW5jLCAqdmFyKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgbUZ1
bmNNYXBbJmZ1bmNdICAgPSBuZXdGdW5jOworKyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNd
ID0gbmV3RnVuYzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBuZXdGdW5jID0gaXQtPnNlY29uZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJl
dHVybiAqbmV3RnVuYzsKKysgICAgfQorKworKyAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
KmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZSgKKysgICAgICAgIFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAgIGlmICgh
aXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24oZnVuYykgJiYgIWlzVXBkYXRlZFBpcGVsaW5lRnVu
Y3Rpb24oZnVuYykpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisr
ICAgICAgICB9CisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1bmMgPSBnZXRVcGRhdGVk
RnVuY3Rpb24oZnVuYyk7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSgmbmV3RnVuYyk7CisrICAgIH0KKyt9OworKworK2NsYXNzIFVwZGF0ZVBpcGVsaW5lRnVu
Y3Rpb25zIDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNv
bnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRTdHJ1
Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAm
bVBpcGVsaW5lTWFpbkxvY2FsVmFyOworKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrICAg
IFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKysgICAgY29uc3QgVEZ1bmN0aW9uICptRnVuY09y
aWdpbmFsVG9Nb2RpZmllZDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICptRnVuY01vZGlmaWVkVG9P
cmlnaW5hbDsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wgVGhyZWFkUGlwZWxpbmUo
VENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
aXBlbGluZSAmcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBpcGVsaW5lRnVuY3Rpb25z
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0
dXJlPiBwaXBlbGluZVN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxWYXIsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRU
b09yaWdpbmFsKQorKyAgICB7CisrICAgICAgICBVcGRhdGVQaXBlbGluZUZ1bmN0aW9ucyBzZWxm
KGNvbXBpbGVyLCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBpcGVsaW5lU3RydWN0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZU1haW5Mb2NhbFZh
ciwgaWRHZW4sIHN5bWJvbEVudiwgZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisrICAg
ICAgICBpZiAoIXNlbGYucmVidWlsZFJvb3Qocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAg
IH0KKysKKysgIHByaXZhdGU6CisrICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxl
ciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5l
ICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9y
ZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5l
U3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUVmFy
aWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYg
JnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisrICAgICAgICA6IFRJbnRl
cm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisrICAgICAgICAgIG1QaXBlbGluZShw
aXBlbGluZSksCisrICAgICAgICAgIG1QaXBlbGluZVN0cnVjdChwaXBlbGluZVN0cnVjdCksCisr
ICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGluZU1haW5Mb2NhbFZhciksCisr
ICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAgICAgICAgbUVudihjb21waWxl
ciwKKysgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgaWRHZW4sCisr
ICAgICAgICAgICAgICAgcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgcGlwZWxpbmVGdW5jdGlv
bnMsCisrICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1Y3QsCisrICAgICAgICAgICAgICAgbVBp
cGVsaW5lTWFpbkxvY2FsVmFyKSwKKysgICAgICAgICAgbUZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQo
ZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisrICAgICAgICAgIG1GdW5jTW9kaWZpZWRUb09yaWdp
bmFsKGZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChtUGlw
ZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKysgICAgfQorKworKyAgICBjb25zdCBUVmFy
aWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rpb24gJnBpcGVs
aW5lRnVuYykKKysgICAgeworKyAgICAgICAgaWYgKHBpcGVsaW5lRnVuYy5pc01haW4oKSAmJiAo
bVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkg
fHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxpbmVNYWlu
TG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVCht
UGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAgICAgICAgICAgIHJldHVybiAqbVBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQor
KyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZUZ1bmMuZ2V0UGFyYW1Db3Vu
dCgpID4gMCk7CisrICAgICAgICAgICAgcmV0dXJuICpwaXBlbGluZUZ1bmMuZ2V0UGFyYW0oMCk7
CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5h
bFBpcGVsaW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKysgICAgeworKyAg
ICAgICAgQVNTRVJUKG1haW5GdW5jLmlzTWFpbigpKTsKKysgICAgICAgIGlmIChtUGlwZWxpbmVN
YWluTG9jYWxWYXIuZXh0ZXJuYWwpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuICpt
UGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWw7CisrICAgICAgICB9CisrICAgICAgICBlbHNl
CisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQo
KSA+IDApOworKyAgICAgICAgICAgIHJldHVybiAqbWFpbkZ1bmMuZ2V0UGFyYW0oMCk7CisrICAg
ICAgICB9CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVElu
dGVybUFnZ3JlZ2F0ZSAmY2FsbE5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChj
YWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJu
IGNhbGxOb2RlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkQ2FsbGVkRnVuYyA9ICpjYWxsTm9kZS5nZXRGdW5j
dGlvbigpOworKyAgICAgICAgICAgIGlmICghbUVudi5pc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlv
bihvbGRDYWxsZWRGdW5jKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVy
biBjYWxsTm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYyk7
CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvbGRPd25lckZ1bmMgPSBnZXRQYXJl
bnRGdW5jdGlvbigpOworKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25lckZ1bmMpOworKyAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmbmV3T3duZXJGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVu
Y3Rpb24oKm9sZE93bmVyRnVuYyk7CisrCisrICAgICAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdn
cmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAgICAgIG5ld0NhbGxlZEZ1
bmMsICZDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCgKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpjYWxsTm9kZS5nZXRTZXF1ZW5jZSgpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRlcm5hbFBpcGVsaW5lVmFy
aWFibGUobmV3T3duZXJGdW5jKSkpKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBQb3N0
UmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1GdW5jdGlvblByb3RvdHlw
ZSAmZnVuY1Byb3RvTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAgICAgICBtRW52LmNyZWF0
ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsKKysgICAgICAgIGlmIChu
ZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuIGZ1bmNQcm90b05vZGU7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gKm5ld0Z1bmNQ
cm90b05vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIGlmIChmdW5jRGVmTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4o
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRNYWluKGZ1bmNEZWZOb2Rl
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXROb25NYWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAgIH0KKysgICAgfQorKwor
KyAgICBUSW50ZXJtTm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
JmZ1bmNEZWZOb2RlKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
JmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKysg
ICAgICAgIEFTU0VSVCghZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7Cisr
CisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQor
KyAgICAgICAgICAgIG1FbnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90
b05vZGUpOworKyAgICAgICAgaWYgKG5ld0Z1bmNQcm90b05vZGUgPT0gbnVsbHB0cikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY0RlZk5vZGU7CisrICAgICAgICB9CisrCisr
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKysgICAgICAgIEFTU0VSVCghZnVuYy5pc01haW4oKSk7CisrCisrICAgICAgICBU
SW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7CisrCisrICAgICAgICBy
ZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKG5ld0Z1bmNQcm90b05vZGUsIGJv
ZHkpOworKyAgICB9CisrCisrICAgIFRJbnRlcm1Ob2RlICZ2aXNpdE1haW4oVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1GdW5j
dGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSA9ICpmdW5jRGVmTm9kZS5nZXRGdW5jdGlvblBy
b3RvdHlwZSgpOworKyAgICAgICAgQVNTRVJUKGZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKS0+
aXNNYWluKCkpOworKworKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5j
UHJvdG9Ob2RlID0KKysgICAgICAgICAgICBtRW52LmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3Rv
dHlwZShmdW5jUHJvdG9Ob2RlKTsKKysgICAgICAgIGlmIChuZXdGdW5jUHJvdG9Ob2RlID09IG51
bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworKyAg
ICAgICAgfQorKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKm5ld0Z1bmNQcm90
b05vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4oKSk7Cisr
CisrICAgICAgICBhdXRvIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwgPSBbJl0oVEludGVybUJsb2Nr
ICZib2R5KSB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCk7CisrICAgICAgICAgICAgaWYgKCFtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRUb09yaWdp
bmFsKTsKKysgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBUSW50ZXJtU3ltYm9sKCZnZXRF
eHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworKyAgICAgICAgICAgICAgICBhdXRvICpv
ID0gbmV3IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKysg
ICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jTW9kaWZpZWRUb09y
aWdpbmFsLCBuZXcgVEludGVybVNlcXVlbmNle20sIG99KSk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfTsKKysKKysgICAgICAgIGF1dG8gY2FsbE9yaWdpbmFsVG9Nb2RpZmllZCA9IFsmXShU
SW50ZXJtQmxvY2sgJmJvZHkpIHsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxv
Y2FsVmFyLmludGVybmFsKTsKKysgICAgICAgICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVP
dXQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdp
bmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAgICAgIGF1dG8gKm8gPSBuZXcgVEludGVybVN5
bWJvbChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAgICAgICAgICAgICAgICBh
dXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlwZWxpbmVWYXJpYWJsZShm
dW5jKSk7CisrICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKysgICAgICAgICAgICAgICAgICAgICptRnVuY09y
aWdpbmFsVG9Nb2RpZmllZCwgbmV3IFRJbnRlcm1TZXF1ZW5jZXtvLCBtfSkpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH07CisrCisrICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5j
RGVmTm9kZS5nZXRCb2R5KCk7CisrCisrICAgICAgICBpZiAobVBpcGVsaW5lLmFsd2F5c1JlcXVp
cmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworKwor
KyAgICAgICAgICAgIGF1dG8gKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsfSk7CisrCisrICAgICAgICAgICAgaWYgKG1QaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFscyB8fAor
KyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2Nh
dGlvbkZyYWdtZW50R2xvYmFscykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8v
IFBvcHVsYXRlIHN0cnVjdCBpbnN0YW5jZSB3aXRoIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIHBpcGVs
aW5lIHZhcmlhYmxlcy4KKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdmFyICAgICAgICA9IG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwgZmllbGQtPnR5cGUoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSk7
CisrICAgICAgICAgICAgICAgICAgICBhdXRvICpzeW1ib2wgICAgID0gbmV3IFRJbnRlcm1TeW1i
b2wodmFyKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmFjY2Vzc05vZGUgPSBBY2Nlc3NG
aWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsLCB2YXItPm5hbWUoKSk7CisrICAg
ICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9w
ZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wpOworKyAgICAgICAgICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGFzc2lnbk5vZGUpOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZS50
eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVsaW5lU3RydWN0LmV4dGVy
bmFsLT5maWVsZHMoKTsKKysKKysgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1D
b3VudCgpID49IDIgKiBmaWVsZHMuc2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgc2l6ZV90IHBh
cmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVsZHMuc2l6ZSgpOworKwor
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisrICAg
ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdGV4
dHVyZVBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsKKysgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmc2FtcGxlclBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0ocGFy
YW1JbmRleCsrKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gZ28gPSBbJl0oVEludGVy
bVR5cGVkICZlbnYsIGNvbnN0IGludCAqaW5kZXgpIHsKKysgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgJnRleHR1cmVGaWVsZCA9IEFjY2Vzc0ZpZWxkKAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1t
dXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAmc2FtcGxlckZpZWxkID0gQWNjZXNzRmllbGQoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5kZXgpLCBJbW11dGFibGVT
dHJpbmcoInNhbXBsZXIiKSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBta0Fz
c2lnbiA9IFsmXShUSW50ZXJtVHlwZWQgJmZpZWxkLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKSB7
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVEludGVybUJpbmFyeShU
T3BlcmF0b3I6OkVPcEFzc2lnbiwgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTmFtZSgiYWRkcmVzc29mIiksIGZpZWxkLmdldFR5cGUoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1T
ZXF1ZW5jZXsmQWNjZXNzSW5kZXgoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBp
bmRleCl9KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysKKysgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxk
LCB0ZXh0dXJlUGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBl
bmRTdGF0ZW1lbnQobWtBc3NpZ24oc2FtcGxlckZpZWxkLCBzYW1wbGVyUGFyYW0pKTsKKysgICAg
ICAgICAgICAgICAgICAgIH07CisrCisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQg
JmVudiA9IEFjY2Vzc0ZpZWxkKCptUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwsIGZpZWxk
LT5uYW1lKCkpOworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmVudlR5cGUgPSBl
bnYuZ2V0VHlwZSgpOworKworKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudlR5cGUuaXNBcnJh
eSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghZW52VHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7CisrICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYXV0byBuID0gc3RhdGljX2Nhc3Q8aW50PihlbnZUeXBlLmdldEFycmF5U2l6ZVBy
b2R1Y3QoKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
OyArK2kpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbyhlbnYsICZpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ28oZW52LCBudWxscHRyKTsKKysg
ICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6
SW5zdGFuY2VJZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG5ld0JvZHktPmFw
cGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAgICAgICAgICAgICAgIFRP
cGVyYXRvcjo6RU9wQXNzaWduLAorKyAgICAgICAgICAgICAgICAgICAgJkFjY2Vzc0ZpZWxkQnlJ
bmRleCgqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5j
KSksIDApLAorKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZShtU3ltYm9sRW52LCAqbmV3IFRU
eXBlKFRCYXNpY1R5cGU6OkVidEludCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICpu
ZXcgVEludGVybVN5bWJvbCgmZ2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKGZ1bmMpKSkpKTsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoIW1QaXBlbGluZU1haW5Mb2Nh
bFZhci5pc1VuaWZvcm0oKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5M
b2NhbFZhci5leHRlcm5hbH0pOworKyAgICAgICAgICAgICAgICBjYWxsTW9kaWZpZWRUb09yaWdp
bmFsKCpuZXdCb2R5KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgbmV3Qm9keS0+
YXBwZW5kU3RhdGVtZW50KGJvZHkpOworKworKyAgICAgICAgICAgIGlmICghbVBpcGVsaW5lTWFp
bkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
Y2FsbE9yaWdpbmFsVG9Nb2RpZmllZCgqbmV3Qm9keSk7CisrICAgICAgICAgICAgfQorKworKyAg
ICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJh
bmNoKAorKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BSZXR1cm4sIG5ldyBUSW50
ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCkpKTsKKysgICAgICAgICAg
ICB9CisrCisrICAgICAgICAgICAgYm9keSA9IG5ld0JvZHk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKTsK
KysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKysK
KysgICAgICAgICAgICBhdXRvICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAg
ICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21Q
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworKyAgICAgICAgICAgIGNhbGxNb2RpZmll
ZFRvT3JpZ2luYWwoKm5ld0JvZHkpOworKyAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRl
bWVudChib2R5KTsKKysgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5
KTsKKysgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IHJldHVybiAqbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24obmV3RnVuY1Byb3RvTm9kZSwg
Ym9keSk7CisrICAgIH0KKyt9OworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9v
bCBVcGRhdGVQaXBlbGluZVN5bWJvbHMoUGlwZWxpbmU6OlR5cGUgcGlwZWxpbmVUeXBlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFZhcmlhYmxlU2V0ICZwaXBlbGluZVZhcmlhYmxlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2Fs
VmFyKQorK3sKKysgICAgYXV0byBtYXAgPSBbJl0oY29uc3QgVEZ1bmN0aW9uICpvd25lciwgVElu
dGVybVN5bWJvbCAmc3ltYm9sKSAtPiBUSW50ZXJtTm9kZSAmIHsKKysgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7CisrICAgICAgICBpZiAocGlwZWxpbmVW
YXJpYWJsZXMuZmluZCgmdmFyKSA9PSBwaXBlbGluZVZhcmlhYmxlcy5lbmQoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworKyAgICAgICAgfQorKyAgICAgICAgQVNT
RVJUKG93bmVyKTsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqc3RydWN0SW5zdGFuY2VWYXI7
CisrICAgICAgICBpZiAob3duZXItPmlzTWFpbigpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisrICAgICAgICAgICAgc3Ry
dWN0SW5zdGFuY2VWYXIgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbDsKKysgICAgICAg
IH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQob3duZXIt
PmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHN0cnVjdEluc3RhbmNlVmFyID0g
b3duZXItPmdldFBhcmFtKDApOworKyAgICAgICAgfQorKyAgICAgICAgQVNTRVJUKHN0cnVjdElu
c3RhbmNlVmFyKTsKKysgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3RydWN0SW5zdGFuY2VW
YXIsIHZhci5uYW1lKCkpOworKyAgICB9OworKyAgICByZXR1cm4gTWFwU3ltYm9scyhjb21waWxl
ciwgcm9vdCwgbWFwKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29s
IFJld3JpdGVQaXBlbGluZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorKyAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAg
ICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdCkKKyt7CisrICAgIEFTU0VSVChvdXRT
dHJ1Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisrCisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICBQaXBlbGluZVN0cnVjdElu
Zm8gcHNpOworKyAgICBpZiAoIUdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMocHNpLCBjb21w
aWxlciwgcm9vdCwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKHBzaS5pc0Vt
cHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgIGNv
bnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhy
b290LCBbJl0oY29uc3QgVFZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAgIHJldHVybiBwc2kucGlw
ZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSAhPSBwc2kucGlwZWxpbmVWYXJpYWJsZXMuZW5kKCk7
CisrICAgIH0pOworKworKyAgICBhdXRvIHBpcGVsaW5lTWFpbkxvY2FsVmFyID0KKysgICAgICAg
IENyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKHN5bWJvbFRhYmxlLCBwaXBlbGluZSwgcHNpLnBp
cGVsaW5lU3RydWN0KTsKKysKKysgICAgaWYgKCFVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6VGhy
ZWFkUGlwZWxpbmUoCisrICAgICAgICAgICAgY29tcGlsZXIsIHJvb3QsIHBpcGVsaW5lLCBwaXBl
bGluZUZ1bmN0aW9ucywgcHNpLnBpcGVsaW5lU3RydWN0LCBwaXBlbGluZU1haW5Mb2NhbFZhciwK
KysgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBwc2kuZnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFwaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikK
KysgICAgeworKyAgICAgICAgaWYgKCFVcGRhdGVQaXBlbGluZVN5bWJvbHMocGlwZWxpbmUudHlw
ZSwgY29tcGlsZXIsIHJvb3QsIHN5bWJvbEVudiwgcHNpLnBpcGVsaW5lVmFyaWFibGVzLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAg
fQorKworKyAgICBpZiAoIVBydW5lTm9PcHMoJmNvbXBpbGVyLCAmcm9vdCwgJmNvbXBpbGVyLmdl
dFN5bWJvbFRhYmxlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgb3V0U3RydWN0ID0gcHNpLnBpcGVsaW5lU3RydWN0OworKyAgICByZXR1cm4gdHJ1
ZTsKKyt9CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6OlJld3Jp
dGVQaXBlbGluZXMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmYW5n
bGVVbmlmb3Jtc0dsb2JhbEluc3RhbmNlVmFyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlh
bnRzICZpbnZhcmlhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdHJ1
Y3RzICZvdXRTdHJ1Y3RzKQorK3sKKysgICAgc3RydWN0IEluZm8KKysgICAgeworKyAgICAgICAg
UGlwZWxpbmU6OlR5cGUgcGlwZWxpbmVUeXBlOworKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0
cnVjdHVyZT4gJm91dFN0cnVjdDsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xvYmFsSW5z
dGFuY2VWYXI7CisrICAgIH07CisrCisrICAgIEluZm8gaW5mb3NbXSA9IHsKKysgICAgICAgIHtQ
aXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCwgb3V0U3RydWN0cy5pbnN0YW5jZUlkLCBudWxscHRy
fSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJl
LCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxz
LCBvdXRTdHJ1Y3RzLm5vbkNvbnN0YW50R2xvYmFscywgbnVsbHB0cn0sCisrICAgICAgICB7UGlw
ZWxpbmU6OlR5cGU6OkFuZ2xlVW5pZm9ybXMsIG91dFN0cnVjdHMuYW5nbGVVbmlmb3JtcywgJmFu
Z2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhcn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6
OlVzZXJVbmlmb3Jtcywgb3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorKyAgICAg
ICAge1BpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbiwgb3V0U3RydWN0cy52ZXJ0ZXhJbiwgbnVsbHB0
cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZlcnRleE91dCwgb3V0U3RydWN0cy52ZXJ0
ZXhPdXQsIG51bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBv
dXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudE91dCwgb3V0U3RydWN0cy5mcmFnbWVudE91dCwgbnVsbHB0cn0sCisrICAgICAg
ICB7UGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBvdXRTdHJ1Y3RzLmlu
dm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlw
ZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21l
bnRHbG9iYWxzLCBudWxscHRyfSwKKysgICAgfTsKKysKKysgICAgZm9yIChJbmZvICZpbmZvIDog
aW5mb3MpCisrICAgIHsKKysgICAgICAgIFBpcGVsaW5lIHBpcGVsaW5le2luZm8ucGlwZWxpbmVU
eXBlLCBpbmZvLmdsb2JhbEluc3RhbmNlVmFyfTsKKysgICAgICAgIGlmICghUmV3cml0ZVBpcGVs
aW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxpbmUsIHN5bWJvbEVudiwgaW52YXJpYW50
cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ub3V0U3RydWN0KSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysK
KysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5oCitu
ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzkxYmE4MgorLS0tIC9kZXYvbnVs
bAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaAorQEAgLTAsMCArMSw0NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJ
UEVMSU5FU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVs
aW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysKKytuYW1lc3Bh
Y2Ugc2gKKyt7CisrCisrLy8gVGhpcyByZXdyaXRlcyBhbGwgcGlwZWxpbmVzLgorKy8vCisrLy8g
Rm9yIGVhY2ggcGlwZWxpbmU6CisrLy8gICAgLSBEaXNjb3ZlciBhbGwgdmFyaWFibGVzIHRoYXQg
YXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisrLy8gICAgLSBNb3ZlIHRoZSB2YXJpYWJsZXMgaW50
byBhbiBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaW5zdGFuY2UgYW5kIHVwZGF0ZSBvbGQgdmFy
aWFibGVzIHRvIGJlCisrLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3RlYWQuCisrLy8gICAgLSBE
ZXBlbmRlbmN5IGluamVjdCB0aGUgaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IHRvIGFsbCBmdW5j
dGlvbnMgdGhhdCBhY2Nlc3MgdmFyaWFibGVzIGZyb20KKysvLyAgICAgIHRoZSBzdHJ1Y3QuCisr
Ly8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3JlYXRlZCBpZiBuZWVk
ZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisrLy8gICAgICBleHRlcm5h
bCBhbmQgaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0cyBhcmUgdGhlIHNhbWUuCisrLy8gICAgLSBB
ZGQgYG1haW5gIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUgZm9yIHRoZSBleHRlcm5hbCBwaXBl
bGluZSBzdHJ1Y3QgYXMgbmVlZGVkLgorKy8vICAgIC0gSW5zaWRlIGBtYWluYCwgbWFwIHRoZSBl
eHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRpZmZlciBhbmQg
aXMgcHJvdmlkZWQKKysvLyAgICAgIGFzIGEgcGFyYW1ldGVyIHRvIGBtYWluYC4KKysvLyAgICAt
IEluc2lkZSBgbWFpbmAsIG1hcCB0aGUgaW50ZXJuYWwgc3RydWN0IHRvIHRoZSBleHRlcm5hbCBz
dHJ1Y3QgaWYgdGhleSBkaWZmZXIgYW5kIGlzIHJldHVybmVkCisrLy8gICAgICBmcm9tIGBtYWlu
YC4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNv
bXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdl
biAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVjdHMg
Jm91dFN0cnVjdHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19I
XworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJl
bmNlcy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNzdjMWE1Cist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcAorQEAgLTAsMCArMSwz
NzYgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhl
bHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
QXNOb2RlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrbmFtZXNwYWNlCisrewor
KworK2Jvb2wgSXNPdXRQYXJhbShjb25zdCBUVHlwZSAmcGFyYW1UeXBlKQorK3sKKysgICAgY29u
c3QgVFF1YWxpZmllciBxdWFsID0gcGFyYW1UeXBlLmdldFF1YWxpZmllcigpOworKyAgICBzd2l0
Y2ggKHF1YWwpCisrICAgIHsKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxSW5PdXQ6Cisr
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKysgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVybUJpbmFyeSAmYmluYXJ5KQor
K3sKKysgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5LmdldE9wKCk7CisrICAgIHN3aXRjaCAob3Ap
CisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorKyAgICAgICAgICAgIGJyZWFr
OworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlID0gYmluYXJ5LmdldExlZnQoKS0+Z2V0
VHlwZSgpOworKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkgfHwgbGVmdFR5cGUuaXNBcnJh
eSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgQVNT
RVJUKElzU2NhbGFyQmFzaWNUeXBlKGJpbmFyeS5nZXRUeXBlKCkpKTsKKysKKysgICAgcmV0dXJu
IHRydWU7CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVybU5vZGUgJm5vZGUpCisr
eworKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIElzVmVjdG9yQWNjZXNzKCpiaW4pOworKyAgICB9CisrICAgIHJldHVy
biBmYWxzZTsKKyt9CisrCisrLy8gRGlmZmVycyBmcm9tIElzQXNzaWdubWVudCBpbiB0aGF0IGl0
IGRvZXMgbm90IGluY2x1ZGUgKCsrKSBvciAoLS0pLgorK2Jvb2wgSXNBc3NpZ25FcXVhbHNTaWdu
KFRPcGVyYXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxh
ckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2ln
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWdu
OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKyt9CisrCisrLy8gT25seSBpbmNsdWRlcyAoJD0pIHN0eWxlIGFzc2lnbnMsIHdo
ZXJlICgkKSBpcyBhIGJpbmFyeSBvcC4KKytib29sIElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9y
IG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cERpdkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JB
c3NpZ246CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIFJldHVybnNS
ZWZlcmVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3Rv
clRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VB
bmRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUlu
Y3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisrCisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dEludGVyZmFjZUJsb2NrOgorKworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisr
VEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSAm
bm9kZSkKKyt7CisrICAgIFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgc3dpdGNo
IChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoKKysg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wU3ViOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9w
TXVsOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZl
Y3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisrICAgICAgICAgICAgYnJlYWs7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisrICAgICAg
ICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeDsK
KysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3Np
Z246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKysgICAgICAgICAgICBi
cmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAgICAgICAg
ICAgIG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgICAgICBv
cCA9IFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246CisrICAgICAgICAg
ICAgb3AgPSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisrICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKysgICAgICAg
ICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKysgICAgICAgICAgICBicmVhazsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorKyAgICAgICAg
ICAgIG9wID0gVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKysgICAgICAgICAg
ICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICB9CisrCisr
ICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVh
ZHkgYmVlbiBjYWxsZWQuCisrICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBhbGxvd3MgdGhpcyBjb2Rl
IHRvIG5vdCBuZWVkIHRvIGludHJvZHVjZSB0ZW1wb3Jhcmllcy4KKysgICAgLy8KKysgICAgLy8g
ZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6CisrICAgIC8vICAgICAgdmVjW2hhc1NpZGVF
ZmZlY3QoKV0gKj0gNAorKyAgICAvLyBiZWNvbWluZworKyAgICAvLyAgICAgIHZlY1toYXNTaWRl
RWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0CisrCisrICAgIFRJbnRlcm1UeXBl
ZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKysgICAgVEludGVybVR5cGVkICpyaWdodCA9IG5v
ZGUuZ2V0UmlnaHQoKTsKKysgICAgcmV0dXJuICpuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6
OkVPcEFzc2lnbiwgbGVmdC0+ZGVlcENvcHkoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgVEludGVybUJpbmFyeShvcCwgbGVmdCwgcmlnaHQpKTsKKyt9CisrCisrY2xhc3Mg
UmV3cml0ZXIxIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgcHVibGljOgorKyAgICBS
ZXdyaXRlcjEoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwg
ZmFsc2UsIHRydWUpIHt9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRCaW5hcnlQb3N0KFRJbnRl
cm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRP
cGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChJc0NvbXBvdW5k
QXNzaWduKG9wKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmxlZnQg
PSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisrICAgICAgICAgICAgaWYgKGxlZnQuZ2V0QXNTd2l6
emxlTm9kZSgpIHx8IElzVmVjdG9yQWNjZXNzKGxlZnQpKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5hcnlOb2Rl
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gYmluYXJ5Tm9k
ZTsKKysgICAgfQorK307CisrCisrY2xhc3MgUmV3cml0ZXIyIDogcHVibGljIFRJbnRlcm1SZWJ1
aWxkCisreworKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7
CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysKKysgIHByaXZhdGU6CisrICAgIGJvb2wg
cmVxdWlyZXNBZGRyZXNzaW5nKCkgY29uc3QKKysgICAgeworKyAgICAgICAgaWYgKG1SZXF1aXJl
c0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBtUmVxdWlyZXNBZGRyZXNzaW5n
U3RhY2suYmFjaygpOworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAgIH5SZXdyaXRlcjIoKSBv
dmVycmlkZSB7IEFTU0VSVChtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2suZW1wdHkoKSk7IH0KKysK
KysgICAgUmV3cml0ZXIyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52
KQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksIG1TeW1i
b2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXRBZ2dyZWdh
dGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmYWdncmVnYXRlTm9kZSkgb3ZlcnJpZGUKKysgICAgewor
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS5nZXRGdW5jdGlv
bigpOworKyAgICAgICAgaWYgKCFmdW5jKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biBhZ2dyZWdhdGVOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKTsKKysgICAgICAgIHNpemVfdCBh
cmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworKworKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmdDb3VudDsgKytpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisrICAgICAgICAgICAgY29uc3Qg
VFR5cGUgJnBhcmFtVHlwZSA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAgICAgICAgICBUSW50ZXJt
Tm9kZSAqYXJnICAgICAgID0gYXJnc1tpXTsKKysgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKysK
KysgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVzaF9iYWNrKElzT3V0UGFy
YW0ocGFyYW1UeXBlKSk7CisrICAgICAgICAgICAgYXJnc1tpXSA9IHJlYnVpbGQoKmFyZykuc2lu
Z2xlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGFyZ3NbaV0pOworKyAgICAgICAgICAgIEFTU0VS
VCghbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOworKyAgICAgICAgICAgIG1SZXF1
aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworKyAgICAgICAgfQorKworKyAgICAgICAg
cmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisr
ICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dpenpsZU5v
ZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghcmVxdWlyZXNBZGRyZXNzaW5nKCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHN3aXp6bGVOb2RlOworKyAgICAgICAg
fQorKworKyAgICAgICAgVEludGVybVR5cGVkICZ2ZWNOb2RlICAgICAgICAgPSAqc3dpenpsZU5v
ZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgY29uc3QgVFF1YWxpZmllckxpc3QgJm9mZnNldHMg
PSBzd2l6emxlTm9kZS5nZXRTd2l6emxlT2Zmc2V0cygpOworKyAgICAgICAgQVNTRVJUKCFvZmZz
ZXRzLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG9mZnNldHMuc2l6ZSgpIDw9IDQpOworKwor
KyAgICAgICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisrICAgICAgICBh
cmdzLnJlc2VydmUob2Zmc2V0cy5zaXplKCkgKyAxKTsKKysgICAgICAgIGFyZ3MucHVzaF9iYWNr
KCZ2ZWNOb2RlKTsKKysgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgYXJncy5wdXNoX2JhY2sobmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KG5ldyBUQ29uc3RhbnRVbmlvbihvZmZzZXQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkp
KTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlv
bk92ZXJsb2FkKE5hbWUoInN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJn
cyk7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5h
cnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRPcGVyYXRv
ciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysKKysgICAgICAgIGNvbnN0IGJvb2wgaXNBY2Nl
c3MgPSBJc1ZlY3RvckFjY2VzcyhiaW5hcnlOb2RlKTsKKysKKysgICAgICAgIGNvbnN0IGJvb2wg
ZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVuY2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3Np
bmcoKTsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZUxlZnQgID0gZGlzYWJsZVRvcDsKKysg
ICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVJpZ2h0ID0gZGlzYWJsZVRvcCB8fCBpc0FjY2VzcyB8
fCBJc0Fzc2lnbkVxdWFsc1NpZ24ob3ApOworKworKyAgICAgICAgYXV0byB0cmF2ZXJzZSA9IFsm
XShUSW50ZXJtVHlwZWQgJm5vZGUsIGNvbnN0IGJvb2wgZGlzYWJsZSkgLT4gVEludGVybVR5cGVk
ICYgeworKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFjayhmYWxzZSk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUgPSBhc05vZGU8VEludGVybVR5
cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKysgICAgICAgICAgICBBU1NFUlQobmV3Tm9k
ZSk7CisrICAgICAgICAgICAgaWYgKGRpc2FibGUpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucG9wX2JhY2soKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworKyAgICAgICAgfTsKKysKKysgICAg
ICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUuZ2V0TGVmdCgpOworKyAg
ICAgICAgVEludGVybVR5cGVkICZyaWdodE5vZGUgPSAqYmluYXJ5Tm9kZS5nZXRSaWdodCgpOwor
KworKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNlKGxlZnROb2RlLCBk
aXNhYmxlTGVmdCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgJm5ld1JpZ2h0ID0gdHJhdmVyc2Uo
cmlnaHROb2RlLCBkaXNhYmxlUmlnaHQpOworKworKyAgICAgICAgaWYgKCFpc0FjY2VzcyB8fCBk
aXNhYmxlVG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICgmbGVmdE5vZGUgPT0gJm5l
d0xlZnQgJiYgJnJpZ2h0Tm9kZSA9PSAmbmV3UmlnaHQpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4geyZiaW5hcnlOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShvcCwg
Jm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgICAgICB9Cisr
CisrICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgi
ZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7Jm5ld0xlZnQs
ICZuZXdSaWdodH0pLAorKyAgICAgICAgICAgICAgICBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAg
ICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrYm9vbCBzaDo6UmV3
cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYpCisreworKyAgICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoIVJld3Jp
dGVyMihjb21waWxlciwgc3ltYm9sRW52KS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43N2RhOTg0CistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKK0BAIC0wLDAgKzEsMzEgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworKyNkZWZpbmUgQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVSRUZF
UkVOQ0VTX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJv
Z3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEdp
dmVuOgorKy8vICAgdm9pZCBmb28ob3V0IHgpOworKy8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUg
Zm9sbG93aW5nIHRvIGJlIGxlZ2FsIGluIEdMU0wgYnV0IG5vdCBpbiBNZXRhbDoKKysvLyAgIGZv
byhleHByZXNzaW9uKTsKKysvLyBUaGlzIGNhbiBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJl
c3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3IgdmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorKy8v
IFRoaXMgcmV3cml0ZSBmdW5jdGlvbmFsaXR5IGludHJvZHVjZXMgdGVtcG9yYXJpZXMgdGhhdCBz
ZXJ2ZSBhcyBwcm94aWVzIHRvIGJlIHBhc3NlZCB0byB0aGUKKysvLyBvdXQvaW5vdXQgcGFyYW1l
dGVycyBhcyBuZWVkZWQuIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25zIGdldCBwb3B1bGF0
ZWQgd2l0aCB0aGVpcgorKy8vIHByb3hpZXMgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwuCisrQU5H
TEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcyhUQ29tcGls
ZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYpOworKwor
K30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCitk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcAor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVhN2IzNzMKKy0tLSAvZGV2L251
bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
ZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwCitAQCAtMCwwICsxLDY1NSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vu
dmlyb25tZW50VmFyaWFibGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxk
LmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisrCisrbmFtZXNwYWNlCisreworKworK2Jvb2wgSXNJbmRleChUT3BlcmF0b3Igb3ApCisrewor
KyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZh
Y2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKyt9CisrCisrYm9vbCBJc0luZGV4KFRJbnRlcm1UeXBlZCAmZXhwcikKKyt7
CisrICAgIGlmIChhdXRvICpiaW5hcnkgPSBleHByLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworKyAgICB9CisrICAg
IHJldHVybiBleHByLmdldEFzU3dpenpsZU5vZGUoKTsKKyt9CisrCisrYm9vbCBWaWV3QmluYXJ5
Q2hhaW4oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQgJm5vZGUsIHN0ZDo6dmVjdG9yPFRJbnRl
cm1UeXBlZCAqPiAmb3V0KQorK3sKKysgICAgVEludGVybUJpbmFyeSAqYmluYXJ5ID0gbm9kZS5n
ZXRBc0JpbmFyeU5vZGUoKTsKKysgICAgaWYgKCFiaW5hcnkgfHwgYmluYXJ5LT5nZXRPcCgpICE9
IG9wKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgVElu
dGVybVR5cGVkICpsZWZ0ICA9IGJpbmFyeS0+Z2V0TGVmdCgpOworKyAgICBUSW50ZXJtVHlwZWQg
KnJpZ2h0ID0gYmluYXJ5LT5nZXRSaWdodCgpOworKworKyAgICBpZiAoIVZpZXdCaW5hcnlDaGFp
bihvcCwgKmxlZnQsIG91dCkpCisrICAgIHsKKysgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7
CisrICAgIH0KKysKKysgICAgaWYgKCFWaWV3QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkK
KysgICAgeworKyAgICAgICAgb3V0LnB1c2hfYmFjayhyaWdodCk7CisrICAgIH0KKysKKysgICAg
cmV0dXJuIHRydWU7CisrfQorKworK3N0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBWaWV3Qmlu
YXJ5Q2hhaW4oVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHN0ZDo6dmVjdG9yPFRJbnRl
cm1UeXBlZCAqPiBjaGFpbjsKKysgICAgVmlld0JpbmFyeUNoYWluKG5vZGUuZ2V0T3AoKSwgbm9k
ZSwgY2hhaW4pOworKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49IDIpOworKyAgICByZXR1cm4g
Y2hhaW47CisrfQorKworK2NsYXNzIFByZVBhc3MgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKKyt7
CisrICBwdWJsaWM6CisrICAgIFByZVBhc3MoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSkge30KKysKKysgIHByaXZhdGU6CisrICAgIC8v
IENoYW5nZSBjaGFpbnMgb2YKKysgICAgLy8gICAgICB4IE9QIHkgT1AgegorKyAgICAvLyB0bwor
KyAgICAvLyAgICAgIHggT1AgKHkgT1AgeikKKysgICAgLy8gcmVnYXJkbGVzcyBvZiBvcmlnaW5h
bCBwYXJlbnRoZXNpemF0aW9uLgorKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2NpYXRlUmlnaHQo
VEludGVybUJpbmFyeSAmbm9kZSkKKysgICAgeworKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9w
ICAgICAgICAgICAgICAgID0gbm9kZS5nZXRPcCgpOworKyAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworKworKyAgICAgICAg
VEludGVybVR5cGVkICpyZXN1bHQgPSBjaGFpbi5iYWNrKCk7CisrICAgICAgICBjaGFpbi5wb3Bf
YmFjaygpOworKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisrCisrICAgICAgICBjb25zdCBhdXRv
IGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisrICAgICAgICBjb25zdCBhdXRvIGVuZCAgID0gY2hh
aW4ucmVuZCgpOworKworKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnBhcnQg
PSAqaXRlcjsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAgICAgICAgICAgVEludGVy
bU5vZGUgKnRlbXAgPSByZWJ1aWxkKCpwYXJ0KS5zaW5nbGUoKTsKKysgICAgICAgICAgICBBU1NF
UlQodGVtcCk7CisrICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKysgICAg
ICAgICAgICBBU1NFUlQocGFydCk7CisrICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFRJbnRlcm1C
aW5hcnkob3AsIHBhcnQsIHJlc3VsdCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gKnJl
c3VsdDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0
IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0
b3I6OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHtyZWFzc29jaWF0ZVJpZ2h0KG5vZGUpLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAg
IH0KKyt9OworKworK2NsYXNzIFNlcGFyYXRvciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sK
KysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8VEludGVy
bU5vZGUgKj4+IG1TdG10c1N0YWNrOworKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVub3JkZXJlZF9t
YXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNsYXJhdGlvbiAqPj4gbUJpbmRpbmdNYXBT
dGFjazsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1UeXBlZCAqLCBUSW50ZXJtVHlw
ZWQgKj4gbUV4cHJNYXA7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxUSW50ZXJtRGVjbGFyYXRp
b24gKj4gbU1hc2tlZERlY2xzOworKworKyAgcHVibGljOgorKyAgICBTZXBhcmF0b3IoVENvbXBp
bGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYsIElkR2VuICZpZEdlbikKKysgICAg
ICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtSWRHZW4oaWRHZW4p
CisrICAgIHt9CisrCisrICAgIH5TZXBhcmF0b3IoKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQobVN0bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobUV4cHJNYXAu
ZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5lbXB0eSgpKTsKKysg
ICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gJmdl
dEN1cnJTdG10cygpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHko
KSk7CisrICAgICAgICByZXR1cm4gbVN0bXRzU3RhY2suYmFjaygpOworKyAgICB9CisrCisrICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUVmFyaWFibGUgKiwgVEludGVybURlY2xhcmF0aW9u
ICo+ICZnZXRDdXJyQmluZGluZ01hcCgpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbUJpbmRp
bmdNYXBTdGFjay5lbXB0eSgpKTsKKysgICAgICAgIHJldHVybiBtQmluZGluZ01hcFN0YWNrLmJh
Y2soKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdG10KFRJbnRlcm1Ob2RlICZub2RlKSB7
IGdldEN1cnJTdG10cygpLnB1c2hfYmFjaygmbm9kZSk7IH0KKysKKysgICAgYm9vbCBpc1Rlcm1p
bmFsRXhwcihUSW50ZXJtTm9kZSAmbm9kZSkKKysgICAgeworKyAgICAgICAgTm9kZVR5cGUgbm9k
ZVR5cGUgPSBnZXROb2RlVHlwZShub2RlKTsKKysgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3ltYm9sOgorKyAgICAgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50VW5pb246CisrICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBUSW50ZXJtVHlwZWQgKnB1bGxNYXBw
ZWRFeHByKFRJbnRlcm1UeXBlZCAqbm9kZSwgYm9vbCBhbGxvd0JhY2t0cmFjaykKKysgICAgewor
KyAgICAgICAgVEludGVybVR5cGVkICpleHByOworKworKyAgICAgICAgeworKyAgICAgICAgICAg
IGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9kZSk7CisrICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gbUV4cHJNYXAuZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgQVNTRVJUKG5vZGUpOworKyAg
ICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHIp
OworKyAgICAgICAgICAgIG1FeHByTWFwLmVyYXNlKGl0ZXIpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKGFsbG93QmFja3RyYWNrKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8g
JmJpbmRpbmdNYXAgPSBnZXRDdXJyQmluZGluZ01hcCgpOworKyAgICAgICAgICAgIHdoaWxlIChU
SW50ZXJtU3ltYm9sICpzeW1ib2wgPSBleHByLT5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLT52
YXJpYWJsZSgpOworKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAgICAgICAgICA9IGJpbmRp
bmdNYXAuZmluZCgmdmFyKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gYmluZGluZ01h
cC5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGV4cHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKHZhci5z
eW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisrICAgICAgICAgICAg
ICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IGl0ZXItPnNlY29uZDsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKGRlY2wpOworKyAgICAgICAgICAgICAgICBleHByID0gVmlld0RlY2xhcmF0
aW9uKCpkZWNsKS5pbml0RXhwcjsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGV4cHIpOworKyAg
ICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworKyAgICAgICAgICAgICAgICBt
TWFza2VkRGVjbHMuaW5zZXJ0KGRlY2wpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysK
KysgICAgICAgIHJldHVybiBleHByOworKyAgICB9CisrCisrICAgIGJvb2wgaXNTdGFuZGFsb25l
RXhwcihUSW50ZXJtVHlwZWQgJmV4cHIpCisrICAgIHsKKysgICAgICAgIGlmIChnZXRQYXJlbnRO
b2RlKCktPmdldEFzQmxvY2soKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVChleHByLmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSAhPSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgfQorKworKyAgICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVElu
dGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7CisrICAgICAgICBpZiAoaXNTdGFuZGFsb25lRXhw
cihuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChuZXdFeHByKTsK
KysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAgICBpZiAoSXNJbmRleChu
ZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAm
bmV3RXhwcjsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAgICBhdXRv
ICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdNYXAoKTsKKysgICAgICAgIGNvbnN0IE5hbWUg
bmFtZSAgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAgICBhdXRvICp2YXIgPQor
KyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCks
ICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgYXV0byAq
ZGVjbCA9IG5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCAmbmV3RXhwcik7CisrICAgICAgICBw
dXNoU3RtdCgqZGVjbCk7CisrICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSBuZXcgVEludGVy
bVN5bWJvbCh2YXIpOworKyAgICAgICAgYmluZGluZ01hcFt2YXJdICAgID0gZGVjbDsKKysgICAg
fQorKworKyAgICB2b2lkIHB1c2hTdGFja3MoKQorKyAgICB7CisrICAgICAgICBtU3RtdHNTdGFj
ay5lbXBsYWNlX2JhY2soKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3RhY2suZW1wbGFjZV9iYWNr
KCk7CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BTdGFja3MoKQorKyAgICB7CisrICAgICAgICBB
U1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQoIW1TdG10
c1N0YWNrLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG1TdG10c1N0YWNrLmJhY2soKS5lbXB0
eSgpKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsKKysgICAgICAgIG1T
dG10c1N0YWNrLnBvcF9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9pZCBwdXNoU3RtdHNJbnRv
QmxvY2soVEludGVybUJsb2NrICZibG9jaywgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gJnN0
bXRzKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9jay5nZXRT
ZXF1ZW5jZSgpOworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBzdG10
LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgYXV0byBpdGVyID0gbU1hc2tlZERlY2xzLmZpbmQoZGVjbCk7CisrICAgICAgICAgICAgICAg
IGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICAgICAgbU1hc2tlZERlY2xzLmVyYXNlKGl0ZXIpOworKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKysgICAgICAgIH0KKysgICAgfQorKwor
KyAgICBUSW50ZXJtQmxvY2sgJmJ1aWxkQmxvY2tXaXRoVGFpbEFzc2lnbihjb25zdCBUVmFyaWFi
bGUgJnZhciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7CisrICAgICAgICBzdGQ6OnZl
Y3RvcjxUSW50ZXJtTm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7Cisr
ICAgICAgICBwb3BTdGFja3MoKTsKKysKKysgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50
ZXJtQmxvY2soKTsKKysgICAgICAgIGF1dG8gJnNlcSAgID0gKmJsb2NrLmdldFNlcXVlbmNlKCk7
CisrICAgICAgICBzZXEucmVzZXJ2ZSgxICsgc3RtdHMuc2l6ZSgpKTsKKysgICAgICAgIHB1c2hT
dG10c0ludG9CbG9jayhibG9jaywgc3RtdHMpOworKyAgICAgICAgc2VxLnB1c2hfYmFjayhuZXcg
VEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbmV3IFRJbnRlcm1TeW1ib2woJnZh
ciksICZuZXdFeHByKSk7CisrCisrICAgICAgICByZXR1cm4gYmxvY2s7CisrICAgIH0KKysKKysg
IHByaXZhdGU6CisrICAgIFByZVJlc3VsdCB2aXNpdEJsb2NrUHJlKFRJbnRlcm1CbG9jayAmbm9k
ZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0YWNrcygpOworKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50
ZXJtQmxvY2sgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHN0ZDo6dmVjdG9yPFRJ
bnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJTdG10cygpKTsKKysgICAgICAg
IHBvcFN0YWNrcygpOworKworKyAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXEgPSAqbm9kZS5n
ZXRTZXF1ZW5jZSgpOworKyAgICAgICAgc2VxLmNsZWFyKCk7CisrICAgICAgICBzZXEucmVzZXJ2
ZShzdG10cy5zaXplKCkpOworKyAgICAgICAgcHVzaFN0bXRzSW50b0Jsb2NrKG5vZGUsIHN0bXRz
KTsKKysKKysgICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQgPSBnZXRQYXJlbnROb2RlKCk7Cisr
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUo
VEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBEZWNs
YXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgaWYgKCFkZWNs
LmluaXRFeHByIHx8IGlzVGVybWluYWxFeHByKCpkZWNsLmluaXRFeHByKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgICAgICByZXR1cm4ge25vZGUs
IFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gbm9kZTsK
KysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRlcm1E
ZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgRGVjbGFyYXRpb24g
ZGVjbCA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKysgICAgICAgIEFTU0VSVChkZWNsLnN5bWJv
bC52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpFbXB0eSk7CisrICAgICAg
ICBBU1NFUlQoIWRlY2wuc3ltYm9sLnZhcmlhYmxlKCkuZ2V0VHlwZSgpLmlzU3RydWN0U3BlY2lm
aWVyKCkpOworKworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdJbml0RXhwciA9IHB1bGxNYXBw
ZWRFeHByKGRlY2wuaW5pdEV4cHIsIHRydWUpOworKyAgICAgICAgaWYgKGRlY2wuaW5pdEV4cHIg
PT0gbmV3SW5pdEV4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHVzaFN0bXQobm9kZSk7
CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0
byAmbmV3Tm9kZSA9ICpuZXcgVEludGVybURlY2xhcmF0aW9uKCk7CisrICAgICAgICAgICAgbmV3
Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAorKyAgICAgICAgICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsICZkZWNsLnN5bWJvbCwgbmV3SW5pdEV4cHIpKTsK
KysgICAgICAgICAgICBwdXNoU3RtdChuZXdOb2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIHJl
dHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRVbmFyeVBvc3QoVElu
dGVybVVuYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtVHlwZWQg
KmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3
RXhwciA9IHB1bGxNYXBwZWRFeHByKGV4cHIsIGZhbHNlKTsKKysgICAgICAgIGlmIChleHByID09
IG5ld0V4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgbm9k
ZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAg
cHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtVW5hcnkobm9kZS5nZXRPcCgpLCBuZXdFeHBy
LCBub2RlLmdldEZ1bmN0aW9uKCkpKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBub2Rl
OworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5
ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBu
b2RlLmdldE9wKCk7CisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5k
IHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKysgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworKworKyAgICAgICAgICAgIFBv
c3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworKyAgICAgICAgICAgIEFTU0VS
VChsZWZ0UmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgICAgICBwdXNoU3RhY2tzKCk7Cisr
ICAgICAgICAgICAgUG9zdFJlc3VsdCByaWdodFJlc3VsdCA9IHJlYnVpbGQoKnJpZ2h0KTsKKysg
ICAgICAgICAgICBBU1NFUlQocmlnaHRSZXN1bHQuc2luZ2xlKCkpOworKworKyAgICAgICAgICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRCaW5hcnlQb3N0
KFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRP
cGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6
OkVPcEluaXRpYWxpemUgJiYgZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5
IHZpc2l0RGVjbGFyYXRpb25Qb3N0CisrICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgICAg
ICB9CisrCisrICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7Cisr
ICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworKworKyAgICAg
ICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZCB8fCBvcCA9PSBUT3BlcmF0b3I6
OkVPcExvZ2ljYWxPcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUg
PSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAgICAgICAgYXV0byAqdmFyID0gbmV3
IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwgbmV3IFRUeXBlKFRCYXNp
Y1R5cGU6OkVidEJvb2wpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3Umln
aHQgICA9IHB1bGxNYXBwZWRFeHByKHJpZ2h0LCB0cnVlKTsKKysgICAgICAgICAgICBUSW50ZXJt
QmxvY2sgKnJpZ2h0QmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdS
aWdodCk7CisrICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBl
ZEV4cHIobGVmdCwgdHJ1ZSk7CisrCisrICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kID0g
bmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsT3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25kID0g
bmV3IFRJbnRlcm1VbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3QsIGNvbmQsIG51bGxwdHIp
OworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1E
ZWNsYXJhdGlvbih2YXIsIG5ld0xlZnQpKTsKKysgICAgICAgICAgICBwdXNoU3RtdCgqbmV3IFRJ
bnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikpOworKyAgICAgICAgICAgIGlm
ICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChvcCk7CisrICAgICAgICBU
SW50ZXJtVHlwZWQgKm5ld0xlZnQgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgZmFsc2UpOworKyAg
ICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCA9IHB1bGxNYXBwZWRFeHByKHJpZ2h0LCBpc0Fz
c2lnbik7CisrCisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDb21tYSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQpOworKyAgICAg
ICAgICAgIHJldHVybiBub2RlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAg
eworKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKm5ld05vZGU7CisrICAgICAgICAgICAgaWYg
KGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5ld05vZGUgPSAmbm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5l
dyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdOb2RlKTsKKysgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBQcmVSZXN1bHQgdmlzaXRU
ZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBQb3N0UmVzdWx0IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsK
KysgICAgICAgIEFTU0VSVChjb25kUmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgIHB1c2hT
dGFja3MoKTsKKysgICAgICAgIFBvc3RSZXN1bHQgdGhlblJlc3VsdCA9IHJlYnVpbGQoKm5vZGUu
Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisrICAgICAgICBBU1NFUlQodGhlblJlc3VsdC5zaW5nbGUo
KSk7CisrCisrICAgICAgICBwdXNoU3RhY2tzKCk7CisrICAgICAgICBQb3N0UmVzdWx0IGVsc2VS
ZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpKTsKKysgICAgICAgIEFT
U0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgIHJldHVybiB7bm9kZSwgVmlz
aXRCaXRzOjpQb3N0fTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0VGVybmFyeVBv
c3QoVEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRl
cm1UeXBlZCAqY29uZCAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAgICAgICAgVEludGVybVR5
cGVkICp0aGVuICA9IG5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKTsKKysgICAgICAgIFRJbnRlcm1U
eXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpOworKworKyAgICAgICAgY29u
c3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoIiIpOworKyAgICAgICAgYXV0byAq
dmFyID0KKysgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3
TmFtZSgpLCAmbm9kZS5nZXRUeXBlKCksIG5hbWUuc3ltYm9sVHlwZSgpKTsKKysKKysgICAgICAg
IFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIoZWxzZV8sIGZhbHNlKTsK
KysgICAgICAgIFRJbnRlcm1CbG9jayAqZWxzZUJsb2NrID0gJmJ1aWxkQmxvY2tXaXRoVGFpbEFz
c2lnbigqdmFyLCAqbmV3RWxzZSk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld1RoZW4gICA9
IHB1bGxNYXBwZWRFeHByKHRoZW4sIHRydWUpOworKyAgICAgICAgVEludGVybUJsb2NrICp0aGVu
QmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdUaGVuKTsKKysgICAg
ICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCAgID0gcHVsbE1hcHBlZEV4cHIoY29uZCwgdHJ1ZSk7
CisrCisrICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnt2YXJ9KTsKKysg
ICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybUlmRWxzZShuZXdDb25kLCB0aGVuQmxvY2ssIGVs
c2VCbG9jaykpOworKyAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAg
ICBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6bGUgJm5vZGUpIG92ZXJy
aWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0T3Bl
cmFuZCgpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIo
ZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhwcikKKysgICAgICAgIHsK
KysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIH0KKysgICAg
ICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3
IFRJbnRlcm1Td2l6emxlKG5ld0V4cHIsIG5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKSkpOworKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3Vs
dCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkgb3ZlcnJpZGUKKysg
ICAgeworKyAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2Uo
KTsKKysgICAgICAgIGZvciAoVEludGVybU5vZGUgKiZhcmcgOiBhcmdzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworKyAg
ICAgICAgICAgIEFTU0VSVCh0YXJnKTsKKysgICAgICAgICAgICBhcmcgPSBwdWxsTWFwcGVkRXhw
cih0YXJnLCBmYWxzZSk7CisrICAgICAgICB9CisrICAgICAgICBwdXNoQmluZGluZyhub2RlLCBu
b2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQg
dmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3Rp
dmUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAg
ICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0
aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJm5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIGlmICghZ2V0UGFyZW50RnVuY3Rpb24oKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVy
biBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNh
c2UgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChUSW50ZXJtVHlwZWQgKmNv
bmQgPSBub2RlLmdldENvbmRpdGlvbigpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VS
VChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworKyAgICAgICAgfQorKyAgICAgICAgcHVzaFN0bXQo
bm9kZSk7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAg
IH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9k
ZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICppbml0ICAgID0gbm9k
ZS5nZXRJbml0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxsTWFwcGVk
RXhwcihpbml0LCBmYWxzZSk7CisrICAgICAgICBpZiAoaW5pdCA9PSBuZXdJbml0KQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybVN3aXRj
aChuZXdJbml0LCBub2RlLmdldFN0YXRlbWVudExpc3QoKSkpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0
aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkgb3ZlcnJp
ZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAgICAgICByZXR1cm4gbm9k
ZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0SWZFbHNlUG9zdChUSW50ZXJtSWZF
bHNlICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQg
ICAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25k
ID0gcHVsbE1hcHBlZEV4cHIoY29uZCwgZmFsc2UpOworKyAgICAgICAgaWYgKGNvbmQgPT0gbmV3
Q29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAg
IH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdCgqbmV3
IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbm9kZS5nZXRUcnVlQmxvY2soKSwgbm9kZS5nZXRGYWxz
ZUJsb2NrKCkpKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUpIG92
ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0
RXhwcmVzc2lvbigpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBl
ZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhwcikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIH0KKysgICAgICAg
IGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1CcmFu
Y2gobm9kZS5nZXRGbG93T3AoKSwgbmV3RXhwcikpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJt
TG9vcCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKCFyZWJ1aWxkSW5QbGFj
ZSgqbm9kZS5nZXRCb2R5KCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIExPR0lDX0VSUk9S
KCk7CisrICAgICAgICB9CisrICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0
IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpIG92ZXJy
aWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gbm9kZS5nZXRUeXBlKCk7
CisrICAgICAgICBpZiAoIXR5cGUuaXNTY2FsYXIoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBu
b2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNs
YXJhdGlvblBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8gVGhlc2Ugc2hvdWxkIGJl
IHNjcnViYmVkIGZyb20gQVNUIGJlZm9yZSByZXdyaXRlciBpcyBjYWxsZWQuCisrICAgICAgICBw
dXNoU3RtdChub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrfTsKKysKKyt9
ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kytib29sIHNoOjpTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxl
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1i
b2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZy
b290KQorK3sKKysgICAgaWYgKHJlYWRCb29sRW52VmFyKCJHTVRfRElTQUJMRV9TRVBBUkFURV9D
T01QT1VORF9FWFBSRVNTSU9OUyIpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgICBpZiAoIVNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoJmNvbXBpbGVyLCAmcm9v
dCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFQcmVQYXNzKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAg
IGlmICghU2VwYXJhdG9yKGNvbXBpbGVyLCBzeW1ib2xFbnYsIGlkR2VuKS5yZWJ1aWxkUm9vdChy
b290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHJl
dHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4
cHJlc3Npb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41ZTQwYTU1
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgKK0BAIC0wLDAgKzEsNDcg
QEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9OU19IXworKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VO
REVYUFJFU1NJT05TX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisr
CisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYW5zZm9ybXMgY29kZSB0byAodXN1YWxseSkg
aGF2ZSBtb3N0IG9uZSBub24tdGVybWluYWwgZXhwcmVzc2lvbiBwZXIgc3RhdGVtZW50LgorKy8v
IFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRvIHJhdyBpZi9pZi1u
b3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisrLy8KKysvLyBlLmcuCisrLy8g
ICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKysvLyBiZWNvbWVzCisrLy8gICAgYXV0byBf
MSA9IGJhcigpOworKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworKy8vICAgIGF1dG8gXzMg
PSA2ICsgXzI7CisrLy8gICAgaW50IHggPSBfMzsKKysvLworKy8vIFdBUk5JTkc6CisrLy8gICAg
LSBUaGlzIGRvZXMgbm90IHJld3JpdGUgb2JqZWN0IGluZGV4aW5nIG9wZXJhdG9ycyBhcyBhIHdo
b2xlIChlLmcuIGZvby54LCBmb29beF0pLCBidXQgd2lsbAorKy8vICAgICAgcmV3cml0ZSB0aGUg
YXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKysvLyAgICAgIGUu
Zy4KKysvLyAgICAgICAgZm9vKGdldFZlYygpW2kgKyAyXSArIDEpOworKy8vICAgICAgYmVjb21l
cworKy8vICAgICAgICBhdXRvIF8xID0gZ2V0VmVjKCk7CisrLy8gICAgICAgIGF1dG8gXzIgPSBp
ICsgMjsKKysvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9y
IHJlbWFpbnMgaW4gKCspIGV4cHIgaGVyZS4KKysvLyAgICAgICAgZm9vKF8zKTsKKysvLworK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVy
ICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9OU19IXworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
ZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFy
YXRpb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRiYThjNmQK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcAorQEAgLTAs
MCArMSw3NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFy
YXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorKworK3VzaW5nIG5h
bWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQor
K3sKKysKKytjbGFzcyBTZXBhcmF0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorK3sKKysg
IHB1YmxpYzoKKysgICAgU2VwYXJhdG9yKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVElu
dGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1ib2xUYWJsZSkge30KKysKKysg
ICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xO
b2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUtPmdldENoaWxk
Q291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5n
ZXRDaGlsZE5vZGUoMCk7CisrCisrICAgICAgICBpZiAoVEludGVybVN5bWJvbCAqc3ltYm9sTm9k
ZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKysgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSB2YXIuZ2V0VHlwZSgpOworKyAg
ICAgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IHZhci5zeW1ib2xUeXBlKCk7
CisrICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSAmJiBzeW1ib2xUeXBl
ICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKysgICAgICAg
ICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3IFRWYXJpYWJsZShtU3lt
Ym9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKHN0cnVjdHVyZSwgdHJ1ZSksIFN5bWJv
bFR5cGU6OkVtcHR5KTsKKysKKysgICAgICAgICAgICAgICAgYXV0byAqaW5zdGFuY2VUeXBlID0g
bmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworKyAgICAgICAgICAgICAgICBpbnN0YW5jZVR5
cGUtPnNldFF1YWxpZmllcih0eXBlLmdldFF1YWxpZmllcigpKTsKKysgICAgICAgICAgICAgICAg
YXV0byAqaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgdmFyLm5hbWUo
KSwgaW5zdGFuY2VUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsKKysKKysgICAgICAgICAg
ICAgICAgVEludGVybVNlcXVlbmNlIHJlcGxhY2VtZW50czsKKysgICAgICAgICAgICAgICAgcmVw
bGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RWYXIpKTsKKysgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChpbnN0
YW5jZVZhcikpOworKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVzaF9iYWNr
KAorKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShkZWNs
Tm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9Owor
KworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworKworK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBp
bGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorK3sKKysgICAgU2VwYXJhdG9yIHNl
cGFyYXRvcihjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKTsKKysgICAgcm9vdC50cmF2ZXJzZSgm
c2VwYXJhdG9yKTsKKysgICAgaWYgKCFzZXBhcmF0b3IudXBkYXRlVHJlZSgmY29tcGlsZXIsICZy
b290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlm
ICghU2VwYXJhdGVEZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZm
IC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Nl
cGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRp
b25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNzEyZTgwCistLS0g
L2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oCitAQCAtMCwwICsxLDI0
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCisr
I2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFU
RUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gRXhhbXBsZToKKysvLyAgc3RydWN0IEZvbyB7IGlu
dCB4OyB9IGZvbzsKKysvLyBCZWNvbWVzOgorKy8vICBzdHJ1Y3QgRm9vIHtpbnQgeDsgfTsgRm9v
IGZvbzsKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xh
cmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworKworK30g
IC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwor
ZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Ta2lwcGluZ1RyYXZlcnNlci5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5mZjQ5ZGFkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaAorQEAg
LTAsMCArMSw0NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0tJUFBJTkdUUkFWRVJTRVJfSF8KKysjZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NLSVBQSU5HVFJBVkVS
U0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgVEludGVybVRyYXZl
cnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcgY2hpbGRlbiBieSBkZWZhdWx0LgorK2NsYXNzIFNr
aXBwaW5nVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6
CisrICAgIFNraXBwaW5nVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXRfLAorKyAgICAgICAgICAgICAg
ICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAgICBib29sIHBvc3RW
aXNpdF8sCisrICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUg
PSBudWxscHRyKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHByZVZpc2l0XywgaW5WaXNp
dF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0
U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAg
Ym9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0K
KysgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSB7IHJldHVybiBm
YWxzZTsgfQorKyAgICBib29sIHZpc2l0VGVybmFyeShWaXNpdCwgVEludGVybVRlcm5hcnkgKikg
eyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlm
RWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0U3dpdGNoKFZpc2l0LCBU
SW50ZXJtU3dpdGNoICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRDYXNlKFZp
c2l0LCBUSW50ZXJtQ2FzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0RnVu
Y3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICopIHsgcmV0
dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBU
SW50ZXJtQmxvY2sgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdERlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIHsgcmV0dXJuIGZhbHNlOyB9Cisr
ICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKikgeyByZXR1cm4gZmFs
c2U7IH0KKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBU
SW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NLSVBQSU5H
VFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLjQ3NTNkYWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwCitAQCAtMCww
ICsxLDY4MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2lu
Y2x1ZGUgPGxpbWl0cz4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFi
bGVTdHJpbmdCdWlsZGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytjb25zdGV4
cHIgQWRkcmVzc1NwYWNlIGtBZGRyZXNzU3BhY2VzW10gPSB7CisrICAgIEFkZHJlc3NTcGFjZTo6
Q29uc3RhbnQsCisrICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorKyAgICBBZGRyZXNzU3BhY2U6
OlRocmVhZCwKKyt9OworKworK2NoYXIgY29uc3QgKnNoOjp0b1N0cmluZyhBZGRyZXNzU3BhY2Ug
c3BhY2UpCisreworKyAgICBzd2l0Y2ggKHNwYWNlKQorKyAgICB7CisrICAgICAgICBjYXNlIEFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisrICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7Cisr
ICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorKyAgICAgICAgICAgIHJldHVybiAi
ZGV2aWNlIjsKKysgICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisrICAgICAgICAg
ICAgcmV0dXJuICJ0aHJlYWQiOworKyAgICB9CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisrCisrdXNpbmcgTmFtZVRvU3RydWN0ID0gc3RkOjptYXA8TmFtZSwgY29uc3QgVFN0cnVj
dHVyZSAqPjsKKysKKytjbGFzcyBTdHJ1Y3RGaW5kZXIgOiBUSW50ZXJtUmVidWlsZAorK3sKKysg
ICAgTmFtZVRvU3RydWN0IG5hbWVUb1N0cnVjdDsKKysKKysgICAgU3RydWN0RmluZGVyKFRDb21w
aWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7
fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRp
b24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgICAg
ID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAg
PSB2YXIuZ2V0VHlwZSgpOworKworKyAgICAgICAgaWYgKHZhci5zeW1ib2xUeXBlKCkgPT0gU3lt
Ym9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpOworKyAg
ICAgICAgICAgIEFTU0VSVChzKTsKKysgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUoKnMpOwor
KyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZ6ID0gbmFtZVRvU3RydWN0W25hbWVdOwor
KyAgICAgICAgICAgIEFTU0VSVCgheik7CisrICAgICAgICAgICAgeiA9IHM7CisrICAgICAgICB9
CisrCisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQcmVSZXN1bHQgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRo
ZXJ9OworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAgIHN0YXRpYyBOYW1lVG9TdHJ1Y3QgRmlu
ZFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorKyAgICB7
CisrICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKysgICAgICAgIGlmICgh
ZmluZGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gc3RkOjptb3ZlKGZpbmRlci5u
YW1lVG9TdHJ1Y3QpOworKyAgICB9CisrfTsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhib29sIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OkJv
b2wpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKGludCB2
YWx1ZSkgOiBtS2luZChLaW5kOjpJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVB
cmc6OlRlbXBsYXRlQXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFs
dWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKGNvbnN0IFRUeXBlICZ2
YWx1ZSkgOiBtS2luZChLaW5kOjpUeXBlKSwgbVZhbHVlKHZhbHVlKSB7fQorKworK2Jvb2wgVGVt
cGxhdGVBcmc6Om9wZXJhdG9yPT0oY29uc3QgVGVtcGxhdGVBcmcgJm90aGVyKSBjb25zdAorK3sK
KysgICAgaWYgKG1LaW5kICE9IG90aGVyLm1LaW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChtS2luZCkKKysgICAgeworKyAgICAgICAg
Y2FzZSBLaW5kOjpCb29sOgorKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUuYiA9PSBvdGhlci5t
VmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAgICAgICAgIHJldHVybiBt
VmFsdWUuaSA9PSBvdGhlci5tVmFsdWUuaTsKKysgICAgICAgIGNhc2UgS2luZDo6VUludDoKKysg
ICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIubVZhbHVlLnU7CisrICAgICAgICBj
YXNlIEtpbmQ6OlR5cGU6CisrICAgICAgICAgICAgcmV0dXJuICptVmFsdWUudCA9PSAqb3RoZXIu
bVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0b3I8KGNv
bnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKKyt7CisrICAgIGlmIChtS2luZCA8IG90aGVy
Lm1LaW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBp
ZiAobUtpbmQgPiBvdGhlci5tS2luZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICB9CisrCisrICAgIHN3aXRjaCAobUtpbmQpCisrICAgIHsKKysgICAgICAgIGNhc2UgS2lu
ZDo6Qm9vbDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFsdWUuYjsK
KysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUuaSA8
IG90aGVyLm1WYWx1ZS5pOworKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorKyAgICAgICAgICAg
IHJldHVybiBtVmFsdWUudSA8IG90aGVyLm1WYWx1ZS51OworKyAgICAgICAgY2FzZSBLaW5kOjpU
eXBlOgorKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7Cisr
ICAgIH0KKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29sIFN5bWJvbEVu
djo6VGVtcGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNv
bnN0CisreworKyAgICByZXR1cm4gYmFzZU5hbWUgPT0gb3RoZXIuYmFzZU5hbWUgJiYgdGVtcGxh
dGVBcmdzID09IG90aGVyLnRlbXBsYXRlQXJnczsKKyt9CisrCisrYm9vbCBTeW1ib2xFbnY6OlRl
bXBsYXRlTmFtZTo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cisr
eworKyAgICBpZiAoYmFzZU5hbWUgPCBvdGhlci5iYXNlTmFtZSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIHRydWU7CisrICAgIH0KKysgICAgaWYgKG90aGVyLmJhc2VOYW1lIDwgYmFzZU5hbWUp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdGVt
cGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVBcmdzOworK30KKysKKytib29sIFN5bWJvbEVudjo6
VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAgICByZXR1cm4gYmFzZU5hbWUuZW1w
dHkoKSAmJiB0ZW1wbGF0ZUFyZ3MuZW1wdHkoKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6OlRl
bXBsYXRlTmFtZTo6Y2xlYXIoKQorK3sKKysgICAgYmFzZU5hbWUgPSBOYW1lKCk7CisrICAgIHRl
bXBsYXRlQXJncy5jbGVhcigpOworK30KKysKKytOYW1lIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25zdAorK3sKKysgICAgQVNTRVJUKGJ1
ZmZlci5lbXB0eSgpKTsKKysKKysgICAgaWYgKHRlbXBsYXRlQXJncy5lbXB0eSgpKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gYmFzZU5hbWU7CisrICAgIH0KKysKKysgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbiA9IHN0ZDo6bWF4KHsKKysgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisrICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46OmRpZ2l0czEwLCAgICAgICAvLworKyAgICAgICAgNSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbWF4X2xlbmd0aCgidHJ1ZSIsICJmYWxzZSIpCisrICAgIH0p
OworKworKyAgICBidWZmZXIucmVzZXJ2ZShiYXNlTmFtZS5yYXdOYW1lKCkubGVuZ3RoKCkgKyAo
biArIDIpICogdGVtcGxhdGVBcmdzLnNpemUoKSArIDEpOworKyAgICBidWZmZXIgKz0gYmFzZU5h
bWUucmF3TmFtZSgpLmRhdGEoKTsKKysKKysgICAgaWYgKCF0ZW1wbGF0ZUFyZ3MuZW1wdHkoKSkK
KysgICAgeworKyAgICAgICAgYnVmZmVyICs9ICI8IjsKKysKKysgICAgICAgIGJvb2wgZmlyc3Qg
PSB0cnVlOworKyAgICAgICAgY2hhciBhcmdCdWZmZXJbbiArIDFdOworKyAgICAgICAgZm9yIChj
b25zdCBUZW1wbGF0ZUFyZyAmYXJnIDogdGVtcGxhdGVBcmdzKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGlmIChmaXJzdCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZpcnN0
ID0gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiLCAiOworKyAgICAgICAgICAgIH0KKysK
KysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6VmFsdWUgdmFsdWUgPSBhcmcudmFsdWUo
KTsKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6S2luZCBraW5kICAgPSBhcmcua2lu
ZCgpOworKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkJvb2w6CisrICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUuYikKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgICAgICAgICBidWZmZXIgKz0gInRydWUiOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFsc2UiOworKyAgICAgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIGNhc2Ug
VGVtcGxhdGVBcmc6OktpbmQ6OkludDoKKysgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJn
QnVmZmVyLCAiJWkiLCB2YWx1ZS5pKTsKKysgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBh
cmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAg
ICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKysgICAgICAgICAgICAgICAgICAgIHNw
cmludGYoYXJnQnVmZmVyLCAiJXUiLCB2YWx1ZS51KTsKKysgICAgICAgICAgICAgICAgICAgIGJ1
ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VHlwZToKKysgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqdmFsdWUudDsK
KysgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzID0gdHlwZS5nZXRT
dHJ1Y3QoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gcy0+bmFtZSgpLmRhdGEoKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkKKysg
ICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5
cGUuaXNBcnJheSgpKTsgIC8vIFRPRE8KKysgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIg
Kz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
eXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXROb21pbmFs
U2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZl
cjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIlaSIsIHR5cGUu
Z2V0Q29scygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1
ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICJ4IjsKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIlaSIsIHR5cGUuZ2V0
Um93cygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZl
cjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgfQorKworKyAgICAgICAgYnVmZmVyICs9ICI+IjsKKysgICAgfQorKworKyAg
ICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZShidWZmZXIpOworKyAgICBidWZmZXIuY2xlYXIo
KTsKKysKKysgICAgcmV0dXJuIE5hbWUobmFtZSwgYmFzZU5hbWUuc3ltYm9sVHlwZSgpKTsKKyt9
CisrCisrdm9pZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6YXNzaWduKGNvbnN0IE5hbWUgJm5h
bWUsIHNpemVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpCisreworKyAgICBi
YXNlTmFtZSA9IG5hbWU7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigpOworKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisrICAgIHsKKysgICAgICAgIHRlbXBsYXRl
QXJncy5wdXNoX2JhY2soYXJnc1tpXSk7CisrICAgIH0KKyt9CisrCisrLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKysKKytTeW1ib2xFbnY6OlN5bWJvbEVudihUQ29tcGlsZXIgJmNvbXBpbGVyLCBU
SW50ZXJtQmxvY2sgJnJvb3QpCisrICAgIDogbVN5bWJvbFRhYmxlKGNvbXBpbGVyLmdldFN5bWJv
bFRhYmxlKCkpLAorKyAgICAgIG1OYW1lVG9TdHJ1Y3QoU3RydWN0RmluZGVyOjpGaW5kU3RydWN0
cyhjb21waWxlciwgcm9vdCkpCisre30KKysKKytjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6
OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0CisreworKyAgICBjb25zdCBOYW1lIG5h
bWUocyk7CisrICAgIGF1dG8gaXRlciA9IG1OYW1lVG9TdHJ1Y3QuZmluZChuYW1lKTsKKysgICAg
aWYgKGl0ZXIgPT0gbU5hbWVUb1N0cnVjdC5lbmQoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IHM7CisrICAgIH0KKysgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVyLT5zZWNvbmQ7Cisr
ICAgIHJldHVybiB6OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICpTeW1ib2xFbnY6OnJlbWFw
KGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0CisreworKyAgICBpZiAocykKKysgICAgeworKyAg
ICAgICAgcmV0dXJuICZyZW1hcCgqcyk7CisrICAgIH0KKysgICAgcmV0dXJuIG51bGxwdHI7Cisr
fQorKworK2NvbnN0IFRGdW5jdGlvbiAmU3ltYm9sRW52OjpnZXRGdW5jdGlvbk92ZXJsb2FkSW1w
bCgpCisreworKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysKKysg
ICAgU2lnVG9GdW5jICZzaWdUb0Z1bmMgPSBtT3ZlcmxvYWRzW21SZXVzYWJsZVRlbXBsYXRlTmFt
ZUJ1ZmZlcl07CisrICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJs
ZVNpZ0J1ZmZlcl07CisrCisrICAgIGlmICghZnVuYykKKysgICAgeworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnJldHVyblR5cGUgPSBtUmV1c2FibGVTaWdCdWZmZXIuYmFjaygpOworKyAgICAgICAg
bVJldXNhYmxlU2lnQnVmZmVyLnBvcF9iYWNrKCk7CisrCisrICAgICAgICBjb25zdCBOYW1lIG5h
bWUgPSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZnVsbE5hbWUobVJldXNhYmxlU3RyaW5n
QnVmZmVyKTsKKysKKysgICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUs
IG5hbWUucmF3TmFtZSgpLCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsK
KysgICAgICAgIGZvciAoY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA6IG1SZXVzYWJsZVNpZ0J1ZmZl
cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisrICAgICAg
ICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwga0VtcHR5SW1tdXRhYmxlU3Ry
aW5nLCAmcGFyYW1UeXBlLCBTeW1ib2xUeXBlOjpFbXB0eSkpOworKyAgICAgICAgfQorKyAgICB9
CisrCisrICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5jbGVhcigpOworKyAgICBtUmV1c2FibGVUZW1w
bGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuICpmdW5jOworK30KKysKKytj
b25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZChjb25zdCBOYW1l
ICZuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICoqcGFyYW1UeXBlcywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
dGVtcGxhdGVBcmdDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdzKQorK3sKKysgICAgQVNT
RVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNTRVJUKG1SZXVzYWJsZVRl
bXBsYXRlTmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwYXJhbUNvdW50OyArK2kpCisrICAgIHsKKysgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5w
dXNoX2JhY2soKnBhcmFtVHlwZXNbaV0pOworKyAgICB9CisrICAgIG1SZXVzYWJsZVNpZ0J1ZmZl
ci5wdXNoX2JhY2socmV0dXJuVHlwZSk7CisrICAgIG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZl
ci5hc3NpZ24obmFtZSwgdGVtcGxhdGVBcmdDb3VudCwgdGVtcGxhdGVBcmdzKTsKKysgICAgcmV0
dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7CisrfQorKworK1RJbnRlcm1BZ2dyZWdhdGUg
JlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW1w
bGF0ZUFyZyAqdGVtcGxhdGVBcmdzKQorK3sKKysgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZl
ci5lbXB0eSgpKTsKKysgICAgQVNTRVJUKG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5lbXB0
eSgpKTsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKysgICAgeworKyAg
ICAgICAgVEludGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBB
U1NFUlQodGFyZyk7CisrICAgICAgICBtUmV1c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKHRhcmct
PmdldFR5cGUoKSk7CisrICAgIH0KKysgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhy
ZXR1cm5UeXBlKTsKKysgICAgbVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmFzc2lnbihuYW1l
LCB0ZW1wbGF0ZUFyZ0NvdW50LCB0ZW1wbGF0ZUFyZ3MpOworKyAgICBjb25zdCBURnVuY3Rpb24g
JmZ1bmMgPSBnZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworKyAgICByZXR1cm4gKlRJbnRlcm1B
Z2dyZWdhdGU6OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7CisrfQorKworK2Nv
bnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUs
IFRGaWVsZExpc3QgJmZpZWxkcykKKyt7CisrICAgIEFTU0VSVChuYW1lLnN5bWJvbFR5cGUoKSA9
PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgVFN0cnVjdHVyZSAqJnMgPSBt
QW5nbGVTdHJ1Y3RzW25hbWUucmF3TmFtZSgpXTsKKysgICAgQVNTRVJUKCFzKTsKKysgICAgcyA9
IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBu
YW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIHJldHVybiAqczsKKyt9CisrCisrY29uc3QgVFN0cnVj
dHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUgc2FtcGxlclR5cGUpCisr
eworKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7CisrICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgKiZlbnYgPSBtVGV4dHVyZUVudnNbc2FtcGxlclR5cGVdOworKyAgICBpZiAoZW52ID09
IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIGF1dG8gKnRleHR1cmVUeXBlID0gbmV3IFRUeXBl
KHNhbXBsZXJUeXBlKTsKKysgICAgICAgIGF1dG8gKnRleHR1cmUgICAgID0gbmV3IFRGaWVsZCh0
ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtOb1NvdXJjZUxvYywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVk
KTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIoKnRleHR1cmUsIEFkZHJlc3NTcGFjZTo6VGhyZWFk
KTsKKysKKysgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQo
bmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCksIGZhbHNlKSwgSW1tdXRhYmxlU3RyaW5nKCJz
YW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICBrTm9Tb3VyY2VMb2MsIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIoKnNhbXBsZXIsIEFkZHJl
c3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIHN0ZDo6c3RyaW5nIGVudk5hbWU7CisrICAg
ICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisrICAgICAgICBlbnZOYW1lICs9IEdldFRl
eHR1cmVUeXBlTmFtZShzYW1wbGVyVHlwZSkucmF3TmFtZSgpLmRhdGEoKTsKKysgICAgICAgIGVu
dk5hbWUgKz0gIj4iOworKworKyAgICAgICAgZW52ID0gJm5ld1N0cnVjdHVyZShOYW1lKGVudk5h
bWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqbmV3IFRGaWVsZExpc3R7dGV4dHVyZSwgc2FtcGxlcn0pOworKyAgICB9CisrICAgIHJl
dHVybiAqZW52OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFNhbXBs
ZXJTdHJ1Y3QoKQorK3sKKysgICAgaWYgKCFtU2FtcGxlcikKKysgICAgeworKyAgICAgICAgbVNh
bXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIm1l
dGFsOjpzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
RmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgfQorKyAgICByZXR1
cm4gKm1TYW1wbGVyOworK30KKysKKyt2b2lkIFN5bWJvbEVudjo6bWFya1NwYWNlKFZhckZpZWxk
IHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJl
c3NTcGFjZT4gJm1hcCkKKyt7CisrICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJs
ZSB0byBoYXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1
dCB0aGlzCisrICAgIC8vIGlzIG5vdCByZXF1aXJlZCBmb3Igbm93IGFuZCB3b3VsZCByZXF1aXJl
IGNvZGUgY2hhbmdlcyB0byBnZXQgcmlnaHQuCisrICAgIEFTU0VSVCghaXNQb2ludGVyKHgpKTsK
KysgICAgQVNTRVJUKCFpc1JlZmVyZW5jZSh4KSk7CisrCisrICAgIG1hcFt4XSA9IHNwYWNlOwor
K30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNTcGFjZShWYXJGaWVsZCB4
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5v
cmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAorK3sKKysgICAg
Y29uc3QgYXV0byBpdGVyID0gbWFwLmZpbmQoeCk7CisrICAgIGlmIChpdGVyID09IG1hcC5lbmQo
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgIH0KKysgICAgY29uc3Qg
QWRkcmVzc1NwYWNlIHNwYWNlID0gaXRlci0+c2Vjb25kOworKyAgICBjb25zdCBhdXRvIGluZGV4
ICAgICAgICAgPSBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEFkZHJlc3NTcGFj
ZT4+KHNwYWNlKTsKKysgICAgcmV0dXJuICZrQWRkcmVzc1NwYWNlc1tpbmRleF07CisrfQorKwor
K3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBz
cGFjZSkKKyt7CisrICAgIHJldHVybiBtYXJrU3BhY2UoeCwgc3BhY2UsIG1Qb2ludGVycyk7Cisr
fQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVz
c1NwYWNlIHNwYWNlKQorK3sKKysgICAgcmV0dXJuIG1hcmtTcGFjZSh4LCBzcGFjZSwgbVJlZmVy
ZW5jZXMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNQb2ludGVy
KFZhckZpZWxkIHgpIGNvbnN0CisreworKyAgICByZXR1cm4gaXNTcGFjZSh4LCBtUG9pbnRlcnMp
OworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNSZWZlcmVuY2UoVmFy
RmllbGQgeCkgY29uc3QKKyt7CisrICAgIHJldHVybiBpc1NwYWNlKHgsIG1SZWZlcmVuY2VzKTsK
Kyt9CisrCisrdm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxk
KQorK3sKKysgICAgbVBhY2tlZEZpZWxkcy5pbnNlcnQoJmZpZWxkKTsKKyt9CisrCisrYm9vbCBT
eW1ib2xFbnY6OmlzUGFja2VkKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNvbnN0CisreworKyAgICBy
ZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQoKTsK
Kyt9CisrCisrc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBl
IGJhc2ljVHlwZSkKKyt7CisrICAgIEFTU0VSVChJc1NhbXBsZXIoYmFzaWNUeXBlKSk7CisrCisr
ICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIy
RDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZ
MllFWFQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNU0FycmF5OgorKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyVmlkZW9XRUJHTDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKysgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIxRDoK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEQXJyYXk6CisrICAgICAgICBjYXNlIEVidFNhbXBs
ZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZUFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURTaGFkb3c6CisrICAgICAg
ICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuIFRCYXNp
Y1R5cGU6OkVidEZsb2F0OworKworKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6Cisr
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVNBcnJheToKKysgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxREFycmF5OgorKyAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJC
dWZmZXI6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgICAg
IHJldHVybiBUQmFzaWNUeXBlOjpFYnRJbnQ7CisrCisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MkQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAgICBjYXNlIEVidFVTYW1w
bGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJETVM6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNU0FycmF5Ogor
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFE
QXJyYXk6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0OgorKyAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlQXJyYXk6Cisr
ICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFVJbnQ7CisrCisrICAgICAgICBkZWZh
dWx0OgorKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgcmV0dXJuIFRC
YXNpY1R5cGU6OkVidFZvaWQ7CisrICAgIH0KKyt9CisrCisrTmFtZSBzaDo6R2V0VGV4dHVyZVR5
cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUpCisreworKyAgICBBU1NFUlQoSXNTYW1wbGVy
KHNhbXBsZXJUeXBlKSk7CisrCisrICAgIGNvbnN0IFRCYXNpY1R5cGUgdGV4dHVyZVR5cGUgPSBH
ZXRUZXh0dXJlQmFzaWNUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgY29uc3QgY2hhciAqbmFtZTsK
KysKKysjZGVmaW5lIEhBTkRMRV9URVhUVVJFX05BTUUoYmFzZU5hbWUpICAgICAgICAgICAgICAg
IFwKKysgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OiAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPGZsb2F0PiI7
IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPGludD4iOyAg
IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6ICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPHVpbnQ+Ijsg
IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7ICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgfSB3aGlsZSAoZmFsc2UpCisrCisrICAgIHN3aXRjaCAoc2FtcGxlclR5cGUpCisr
ICAgIHsKKysgICAgICAgIC8vIDFkCisrICAgICAgICBjYXNlIEVidFNhbXBsZXIxRDogIC8vIERl
c2t0b3AgR0xTTCBzYW1wbGVyIHR5cGU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6Cisr
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMUQ6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVf
TkFNRSgidGV4dHVyZTFkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyAx
ZCBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToKKysgICAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEQXJyYXk6Cisr
ICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2FycmF5Iik7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMKKysgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJCdWZmZXI6
CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmVfYnVmZmVyIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAvLyAyZCB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisrICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRSZWN0OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoKKysgICAgICAgICAgICBI
QU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmQiKTsKKysgICAgICAgICAgICBicmVhazsKKysK
KysgICAgICAgIC8vIDNkIHRleHR1cmVzCisrICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKysg
ICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoK
KysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMKKysgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKysgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUo
InRleHR1cmVjdWJlIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyAyZCBh
cnJheSB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKysgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTJkX2FycmF5Iik7
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgor
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRNUzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXMiKTsK
KysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJh
eToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRNU0FycmF5OgorKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRl
eHR1cmUyZF9tc19hcnJheSIpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgLy8g
Y3ViZSBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmVBcnJheToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
QXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmVfYXJy
YXkiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8vIFNoYWRvdworKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMURTaGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFy
cmF5U2hhZG93OgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJUT0RPIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisrICAgICAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorKyAg
ICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoImRlcHRoY3ViZSIpOworKyAgICAgICAgICAg
IGJyZWFrOworKworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKysgICAg
ICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkX2FycmF5Iik7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6Cisr
ICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBFeHRlbnRpb25zCisrICAgICAgICBjYXNl
IEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICAgICAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2lt
YWdlX2V4dGVybmFsIGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZ
MllFWFQ6ICAvLyBPbmx5IHZhbGlkIGlmIEdMX0VYVF9ZVVZfdGFyZ2V0IGV4aXN0czoKKysgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisrICAgICAgICAgICAgVE9ETygpOworKyAg
ICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKysgICAgICAgICAgICBicmVh
azsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysg
ICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKysgICAgICAgICAgICBicmVhazsKKysgICAgfQor
KworKyN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCisrCisrICAgIHJldHVybiBOYW1lKG5hbWUs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oCituZXcgZmls
ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGM5NjQ1ZQorLS0tIC9kZXYvbnVsbAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVu
di5oCitAQCAtMCwwICsxLDIxOCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCisrI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8K
KysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworK2VudW0gY2xhc3Mg
QWRkcmVzc1NwYWNlCisreworKyAgICBDb25zdGFudCwKKysgICAgRGV2aWNlLAorKyAgICBUaHJl
YWQsCisrfTsKKysKKytjaGFyIGNvbnN0ICp0b1N0cmluZyhBZGRyZXNzU3BhY2Ugc3BhY2UpOwor
KworK2NsYXNzIFZhckZpZWxkCisreworKyAgcHVibGljOgorKyAgICBWYXJGaWVsZChjb25zdCBU
VmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhcikge30KKysgICAgVmFyRmllbGQoY29uc3Qg
VEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSB7fQorKworKyAgICBBTkdMRV9JTkxJTkUg
Y29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1WYXJpYWJsZTsgfQor
KworKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IG1GaWVsZDsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZh
ckZpZWxkICZvdGhlcikgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1WYXJpYWJsZSA9
PSBvdGhlci5tVmFyaWFibGUgJiYgbUZpZWxkID09IG90aGVyLm1GaWVsZDsKKysgICAgfQorKwor
KyAgcHJpdmF0ZToKKysgICAgY29uc3QgVFZhcmlhYmxlICptVmFyaWFibGUgPSBudWxscHRyOwor
KyAgICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7CisrfTsKKysKKyt9ICAv
LyBuYW1lc3BhY2Ugc2gKKysKKytuYW1lc3BhY2Ugc3RkCisreworKworK3RlbXBsYXRlIDw+Cisr
c3RydWN0IGhhc2g8c2g6OlZhckZpZWxkPgorK3sKKysgICAgc2l6ZV90IG9wZXJhdG9yKCkoY29u
c3Qgc2g6OlZhckZpZWxkICZ4KSBjb25zdAorKyAgICB7CisrICAgICAgICBjb25zdCBzaDo6VFZh
cmlhYmxlICp2YXIgPSB4LnZhcmlhYmxlKCk7CisrICAgICAgICBpZiAodmFyKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qgc2g6OlRWYXJpYWJsZSAqPigp
KHZhcik7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHgu
ZmllbGQoKTsKKysgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qgc2g6OlRGaWVsZCAqPigp
KGZpZWxkKTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVz
cGFjZSBzaAorK3sKKysKKytjbGFzcyBUZW1wbGF0ZUFyZworK3sKKysgIHB1YmxpYzoKKysgICAg
ZW51bSBjbGFzcyBLaW5kCisrICAgIHsKKysgICAgICAgIEJvb2wsCisrICAgICAgICBJbnQsCisr
ICAgICAgICBVSW50LAorKyAgICAgICAgVHlwZSwKKysgICAgfTsKKysKKysgICAgdW5pb24gVmFs
dWUKKysgICAgeworKyAgICAgICAgVmFsdWUoYm9vbCB2YWx1ZSkgOiBiKHZhbHVlKSB7fQorKyAg
ICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisrICAgICAgICBWYWx1ZSh1bnNp
Z25lZCB2YWx1ZSkgOiB1KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUoY29uc3QgVFR5cGUgJnZh
bHVlKSA6IHQoJnZhbHVlKSB7fQorKworKyAgICAgICAgYm9vbCBiOworKyAgICAgICAgaW50IGk7
CisrICAgICAgICB1bnNpZ25lZCB1OworKyAgICAgICAgY29uc3QgVFR5cGUgKnQ7CisrICAgIH07
CisrCisrICAgIFRlbXBsYXRlQXJnKGJvb2wgdmFsdWUpOworKyAgICBUZW1wbGF0ZUFyZyhpbnQg
dmFsdWUpOworKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisrICAgIFRlbXBsYXRl
QXJnKGNvbnN0IFRUeXBlICZ2YWx1ZSk7CisrCisrICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
ZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZW1w
bGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKworKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtS2luZDsgfQorKyAgICBWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1WYWx1ZTsgfQor
KworKyAgcHVibGljOgorKyAgICBLaW5kIG1LaW5kOworKyAgICBWYWx1ZSBtVmFsdWU7CisrfTsK
KysKKysvLyBBbiBlbnZpcm9ubWVudCBmb3IgY3JlYXRpbmcgYW5kIHVuaXF1ZWx5IHNoYXJpbmcg
VFN5bWJvbCBvYmplY3RzLgorK2NsYXNzIFN5bWJvbEVudgorK3sKKysgICAgY2xhc3MgVGVtcGxh
dGVOYW1lCisrICAgIHsKKysgICAgICAgIE5hbWUgYmFzZU5hbWU7CisrICAgICAgICBzdGQ6OnZl
Y3RvcjxUZW1wbGF0ZUFyZz4gdGVtcGxhdGVBcmdzOworKworKyAgICAgIHB1YmxpYzoKKysgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdDsKKysg
ICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Owor
KworKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworKyAgICAgICAgdm9pZCBjbGVhcigpOwor
KworKyAgICAgICAgTmFtZSBmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25zdDsKKysK
KysgICAgICAgIHZvaWQgYXNzaWduKGNvbnN0IE5hbWUgJm5hbWUsIHNpemVfdCBhcmdDb3VudCwg
Y29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpOworKyAgICB9OworKworKyAgICB1c2luZyBUeXBlUmVm
ICAgICAgICA9IENSZWY8VFR5cGU+OworKyAgICB1c2luZyBTaWcgICAgICAgICAgICA9IHN0ZDo6
dmVjdG9yPFR5cGVSZWY+OyAgLy8gUGFyYW0wLCBQYXJhbTEsIC4uLiBQYXJhbU4sIFJldHVybgor
KyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywgVEZ1bmN0aW9uICo+Owor
KyAgICB1c2luZyBPdmVybG9hZHMgICAgICA9IHN0ZDo6bWFwPFRlbXBsYXRlTmFtZSwgU2lnVG9G
dW5jPjsKKysgICAgdXNpbmcgQW5nbGVTdHJ1Y3RzICAgPSBzdGQ6Om1hcDxJbW11dGFibGVTdHJp
bmcsIFRTdHJ1Y3R1cmUgKj47CisrICAgIHVzaW5nIFRleHR1cmVTdHJ1Y3RzID0gc3RkOjptYXA8
VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKysKKysgIHB1YmxpYzoKKysgICAgU3ltYm9sRW52
KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7CisrCisrICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUoKSB7IHJldHVybiBtU3ltYm9sVGFibGU7IH0KKysKKysgICAg
Ly8gVGhlcmUgZXhpc3QgQW5nbGUgcmV3cml0ZXMgdGhhdCBjYW4gbGVhZCB0byBpbmNvaGVyZW50
IHN0cnVjdHMKKysgICAgLy8KKysgICAgLy8gRXhhbXBsZQorKyAgICAvLyAgICBzdHJ1Y3QgQSB7
IC4uLiB9CisrICAgIC8vICAgIHN0cnVjdCBCIHsgQScgYTsgfSAvLyBBJyBoYXMgc2FtZSBuYW1l
IGFzIEEgYnV0IGlzIG5vdCBpZGVudGljYWwuCisrICAgIC8vIGJlY29tZXMKKysgICAgLy8gICAg
c3RydWN0IEEgeyAuLi4gfQorKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEgYTsgfQorKyAgICAvLwor
KyAgICAvLyBUaGlzIG5vdGFibHkgaGFwcGVucyB3aGVuIEEgY29udGFpbnMgYSBzYW1wbGVyIGlu
IHRoZSBvcmlnaW5hbCBHTFNMIGNvZGUgYnV0IGlzIHJld3JpdHRlbiB0bworKyAgICAvLyBub3Qg
aGF2ZSBhIHNhbXBsZXIsIHlldCB0aGUgQScgc3RydWN0IGZpZWxkIHN0aWxsIGNvbnRhaW5zIHRo
ZSBzYW1wbGVyIGZpZWxkLgorKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3Ry
dWN0dXJlICZzKSBjb25zdDsKKysKKysgICAgLy8gTGlrZSBgVFN0cnVjdHVyZSAmcmVtYXAoY29u
c3QgVFN0cnVjdHVyZSAmcylgIGJ1dCBhZGRpdGlvbmFsbHkgbWFwcyBudWxsIHRvIG51bGwuCisr
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0Owor
KworKyAgICBjb25zdCBURnVuY3Rpb24gJmdldEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAm
bmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHBhcmFtQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRl
QXJnICp0ZW1wbGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgVEludGVybUFnZ3JlZ2F0ZSAm
Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJldHVyblR5cGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAm
YXJncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHRlbXBsYXRlQXJnQ291bnQgICAgICAgICA9IDAsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MgPSBudWxs
cHRyKTsKKysKKysgICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUg
Jm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcyk7CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdl
dFRleHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSk7CisrICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKysKKysgICAgdm9pZCBtYXJrQXNQb2ludGVyKFZhckZp
ZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSk7CisrICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQ
b2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2b2lkIG1hcmtBc1JlZmVyZW5jZShW
YXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOworKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ug
KmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2b2lkIG1hcmtBc1BhY2tl
ZChjb25zdCBURmllbGQgJmZpZWxkKTsKKysgICAgYm9vbCBpc1BhY2tlZChjb25zdCBURmllbGQg
JmZpZWxkKSBjb25zdDsKKysKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0
RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKysKKysgICAgdm9pZCBtYXJrU3BhY2UoVmFyRmllbGQg
eCwgQWRkcmVzc1NwYWNlIHNwYWNlLCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJl
c3NTcGFjZT4gJm1hcCk7CisrICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNTcGFjZShWYXJGaWVs
ZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVy
ZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApIGNvbnN0OworKworKyAgcHJpdmF0
ZToKKysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrCisrICAgIHN0ZDo6bWFwPE5h
bWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKysgICAgT3ZlcmxvYWRzIG1P
dmVybG9hZHM7CisrICAgIFNpZyBtUmV1c2FibGVTaWdCdWZmZXI7CisrICAgIFRlbXBsYXRlTmFt
ZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisrICAgIHN0ZDo6c3RyaW5nIG1SZXVzYWJs
ZVN0cmluZ0J1ZmZlcjsKKysKKysgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVjdHM7CisrICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxUQmFzaWNUeXBlLCBjb25zdCBUU3RydWN0dXJlICo+IG1UZXh0
dXJlRW52czsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqbVNhbXBsZXIgPSBudWxscHRyOworKwor
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gbVBvaW50ZXJz
OworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gbVJlZmVy
ZW5jZXM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tlZEZp
ZWxkczsKKyt9OworKworK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxl
clR5cGUpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0
U3RydWN0cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvVG9wb3NvcnRTdHJ1Y3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw
MDAuLjk4NDMzMzIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwCitAQCAtMCwwICsxLDM4
MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKyNpbmNsdWRlIDx2
ZWN0b3I+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5n
QnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysKKyt1
c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1l
c3BhY2UKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNpbmcgRWRnZXMgPSBzdGQ6
OnVub3JkZXJlZF9zZXQ8VD47CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNpbmcgR3Jh
cGggPSBzdGQ6OnVub3JkZXJlZF9tYXA8VCwgRWRnZXM8VD4+OworKworK3ZvaWQgQnVpbGRHcmFw
aEltcGwoU3ltYm9sRW52ICZzeW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcs
IGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCisreworKyAgICBpZiAoZy5maW5kKHMpICE9IGcuZW5kKCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICBFZGdlczxjb25zdCBU
U3RydWN0dXJlICo+ICZlcyA9IGdbc107CisrCisrICAgIGNvbnN0IFRGaWVsZExpc3QgJmZzID0g
cy0+ZmllbGRzKCk7CisrICAgIGZvciAoY29uc3QgVEZpZWxkICpmIDogZnMpCisrICAgIHsKKysg
ICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3ltYm9sRW52LnJlbWFwKGYtPnR5cGUo
KS0+Z2V0U3RydWN0KCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVzLmluc2VydCh6KTsK
KysgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcsIHopOworKyAgICAgICAg
ICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmV6ID0gZ1t6XTsKKysgICAgICAgICAgICBl
cy5pbnNlcnQoZXouYmVnaW4oKSwgZXouZW5kKCkpOworKyAgICAgICAgfQorKyAgICB9CisrfQor
KworK0dyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gQnVpbGRHcmFwaChTeW1ib2xFbnYgJnN5bWJv
bEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiAmc3RydWN0cykKKyt7CisrICAgIEdyYXBoPGNvbnN0
IFRTdHJ1Y3R1cmUgKj4gZzsKKysgICAgZm9yIChjb25zdCBUU3RydWN0dXJlICpzIDogc3RydWN0
cykKKysgICAgeworKyAgICAgICAgQnVpbGRHcmFwaEltcGwoc3ltYm9sRW52LCBnLCBzKTsKKysg
ICAgfQorKyAgICByZXR1cm4gZzsKKyt9CisrCisrLy8gQWxnb3J0aG06IGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2VhcmNoCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RkOjp2ZWN0b3I8VD4gVG9wb3NvcnQoY29uc3QgR3Jh
cGg8VD4gJmcpCisreworKyAgICAvLyBub2RlcyB3aXRoIHRlbXBvcmFyeSBtYXJrCisrICAgIHN0
ZDo6dW5vcmRlcmVkX3NldDxUPiB0ZW1wczsKKysKKysgICAgLy8gbm9kZXMgd2l0aG91dCBwZXJt
YW5lbnQgbWFyaworKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8VD4gaW52UGVybXM7CisrICAgIGZv
ciAoY29uc3QgYXV0byAmZW50cnkgOiBnKQorKyAgICB7CisrICAgICAgICBpbnZQZXJtcy5pbnNl
cnQoZW50cnkuZmlyc3QpOworKyAgICB9CisrCisrICAgIC8vIEwg4oaQIEVtcHR5IGxpc3QgdGhh
dCB3aWxsIGNvbnRhaW4gdGhlIHNvcnRlZCBlbGVtZW50cworKyAgICBzdGQ6OnZlY3RvcjxUPiBM
OworKworKyAgICAvLyBmdW5jdGlvbiB2aXNpdChub2RlIG4pCisrICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZChUKT4gdmlzaXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKysgICAgICAgIC8vIGlmIG4gaGFz
IGEgcGVybWFuZW50IG1hcmsgdGhlbgorKyAgICAgICAgaWYgKGludlBlcm1zLmZpbmQobikgPT0g
aW52UGVybXMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gcmV0dXJuCisrICAg
ICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8gaWYgbiBoYXMgYSB0ZW1w
b3JhcnkgbWFyayB0aGVuCisrICAgICAgICBpZiAodGVtcHMuZmluZChuKSAhPSB0ZW1wcy5lbmQo
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBzdG9wICAgKG5vdCBhIERBRykKKysgICAg
ICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgfQorKworKyAgICAgICAgLy8gbWFyayBu
IHdpdGggYSB0ZW1wb3JhcnkgbWFyaworKyAgICAgICAgdGVtcHMuaW5zZXJ0KG4pOworKworKyAg
ICAgICAgLy8gZm9yIGVhY2ggbm9kZSBtIHdpdGggYW4gZWRnZSBmcm9tIG4gdG8gbSBkbworKyAg
ICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisrICAgICAgICBBU1NFUlQoZW5JdGVyICE9
IGcuZW5kKCkpOworKyAgICAgICAgY29uc3QgRWRnZXM8VD4gJmVuID0gZW5JdGVyLT5zZWNvbmQ7
CisrICAgICAgICBmb3IgKFQgbSA6IGVuKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIHZp
c2l0KG0pCisrICAgICAgICAgICAgdmlzaXQobSk7CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisrICAgICAgICB0ZW1wcy5lcmFzZShuKTsK
KysgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgcGVybWFuZW50IG1hcmsKKysgICAgICAgIGludlBl
cm1zLmVyYXNlKG4pOworKyAgICAgICAgLy8gYWRkIG4gdG8gaGVhZCBvZiBMCisrICAgICAgICBM
LnB1c2hfYmFjayhuKTsKKysgICAgfTsKKysKKysgICAgLy8gd2hpbGUgZXhpc3RzIG5vZGVzIHdp
dGhvdXQgYSBwZXJtYW5lbnQgbWFyayBkbworKyAgICB3aGlsZSAoIWludlBlcm1zLmVtcHR5KCkp
CisrICAgIHsKKysgICAgICAgIC8vIHNlbGVjdCBhbiB1bm1hcmtlZCBub2RlIG4KKysgICAgICAg
IFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworKyAgICAgICAgLy8gdmlzaXQobikKKysgICAgICAg
IHZpc2l0KG4pOworKyAgICB9CisrCisrICAgIHJldHVybiBMOworK30KKysKKytUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpDcmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0aW9uKFRTeW1ib2xUYWJs
ZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKKyt7CisrICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrICAgIGF1dG8gJmZ1bmNFcXVhbGl0eSA9CisrICAg
ICAgICAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwi
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKysgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisrICAgIGF1dG8gJmFTdHJ1Y3Qg
PSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3RydWN0VHlwZSwgTmFtZSgi
YSIpKTsKKysgICAgYXV0byAmYlN0cnVjdCA9IENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9s
VGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJiIikpOworKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFy
YW1ldGVyKCZhU3RydWN0KTsKKysgICAgZnVuY0VxdWFsaXR5LmFkZFBhcmFtZXRlcigmYlN0cnVj
dCk7CisrCisrICAgIGF1dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7Cisr
ICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBhbmROb2RlczsKKysgICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmYUZpZWxkcyA9IGFTdHJ1Y3RU
eXBlLmZpZWxkcygpOworKyAgICBjb25zdCBzaXplX3Qgc2l6ZSAgICAgICAgID0gYUZpZWxkcy5z
aXplKCk7CisrCisrICAgIGF1dG8gdGVzdEVxdWFsaXR5ID0gWyZdKFRJbnRlcm1UeXBlZCAmYSwg
VEludGVybVR5cGVkICZiKSAtPiBUSW50ZXJtVHlwZWQgKiB7CisrICAgICAgICBBU1NFUlQoYS5n
ZXRUeXBlKCkgPT0gYi5nZXRUeXBlKCkpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBh
LmdldFR5cGUoKTsKKysgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkgfHwgdHlwZS5pc01hdHJp
eCgpIHx8IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byAq
ZnVuYyA9CisrICAgICAgICAgICAgICAgIG5ldyBURnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2wpLCB0
cnVlKTsKKysgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rp
b25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZhLCAmYn0pOworKyAgICAgICAgfQor
KyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEVxdWFsLCAmYSwgJmIpOworKyAgICAgICAgfQorKyAgICB9
OworKworKyAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBzaXplOyArK2lkeCkKKysgICAg
eworKyAgICAgICAgY29uc3QgVEZpZWxkICZhRmllbGQgICAgPSAqYUZpZWxkc1tpZHhdOworKyAg
ICAgICAgY29uc3QgVFR5cGUgJmFGaWVsZFR5cGUgPSAqYUZpZWxkLnR5cGUoKTsKKysgICAgICAg
IGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsKKysKKysgICAgICAgIGlm
IChhRmllbGRUeXBlLmlzQXJyYXkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQo
IWFGaWVsZFR5cGUuaXNBcnJheU9mQXJyYXlzKCkpOyAgLy8gVE9ETworKyAgICAgICAgICAgIGlu
dCBkaW0gPSBhRmllbGRUeXBlLmdldE91dGVybW9zdEFycmF5U2l6ZSgpOworKyAgICAgICAgICAg
IGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBhdXRvICZhQWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYVN0cnVjdCwg
YUZpZWxkTmFtZSksIGQpOworKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0gQWNjZXNz
SW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworKyAgICAgICAgICAg
ICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOworKyAg
ICAgICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0
byAmYUFjY2VzcyA9IEFjY2Vzc0ZpZWxkKGFTdHJ1Y3QsIGFGaWVsZE5hbWUpOworKyAgICAgICAg
ICAgIGF1dG8gJmJBY2Nlc3MgPSBBY2Nlc3NGaWVsZChiU3RydWN0LCBhRmllbGROYW1lKTsKKysg
ICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3Mp
OworKyAgICAgICAgICAgIGFuZE5vZGVzLnB1c2hfYmFjayhlcU5vZGUpOworKyAgICAgICAgfQor
KyAgICB9CisrCisrICAgIEFTU0VSVChhbmROb2Rlcy5zaXplKCkgPiAwKTsgIC8vIEVtcHR5IHN0
cnVjdHMgYXJlIG5vdCBhbGxvd2VkIGluIEdMU0wKKysgICAgVEludGVybVR5cGVkICpvdXROb2Rl
ID0gYW5kTm9kZXMuYmFjaygpOworKyAgICBhbmROb2Rlcy5wb3BfYmFjaygpOworKyAgICBmb3Ig
KFRJbnRlcm1UeXBlZCAqYW5kTm9kZSA6IGFuZE5vZGVzKQorKyAgICB7CisrICAgICAgICBvdXRO
b2RlID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kLCBhbmROb2Rl
LCBvdXROb2RlKTsKKysgICAgfQorKyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5l
dyBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisrICAgIGF1
dG8gKmZ1bmNQcm90b0VxdWFsaXR5ID0gbmV3IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSgmZnVu
Y0VxdWFsaXR5KTsKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKGZ1
bmNQcm90b0VxdWFsaXR5LCAmYm9keUVxdWFsaXR5KTsKKyt9CisrCisrc3RydWN0IERlY2xhcmVk
U3RydWN0dXJlCisreworKyAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlOworKyAgICBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICplcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbjsKKysg
ICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlOworK307CisrCisrYm9vbCBHZXRBc0RlY2xh
cmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtTm9kZSAmbm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVjbGFyZWRTdHJ1Y3R1cmUgJm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnVzZWRTdHJ1Y3RzKQor
K3sKKysgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGUgPSBub2RlLmdldEFzRGVj
bGFyYXRpb25Ob2RlKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hp
bGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUt
PmdldENoaWxkTm9kZSgwKTsKKysKKysgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xO
b2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisrICAgICAgICAg
ICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlm
IChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYucmVtYXAodHlwZS5nZXRT
dHJ1Y3QoKSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAodHlwZS5pc1N0
cnVjdFNwZWNpZmllcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBvdXQuZGVjbE5vZGUgID0gZGVjbE5vZGU7CisrICAgICAgICAgICAgICAgICAgICBvdXQuc3Ry
dWN0dXJlID0gc3RydWN0dXJlOworKyAgICAgICAgICAgICAgICAgICAgb3V0LmVxdWFsaXR5RnVu
Y3Rpb25EZWZpbml0aW9uID0KKysgICAgICAgICAgICAgICAgICAgICAgICB1c2VkU3RydWN0cy5m
aW5kKHN0cnVjdHVyZSkgPT0gdXNlZFN0cnVjdHMuZW5kKCkKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBudWxscHRyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ3JlYXRl
U3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7CisrICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Ns
YXNzIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCisrewor
KyAgcHVibGljOgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrICAgIHN0ZDo6dW5vcmRl
cmVkX3NldDxjb25zdCBUU3RydWN0dXJlICo+IG1Vc2VkU3RydWN0czsKKysKKysgICAgRmluZFN0
cnVjdEVxdWFsaXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAgICAgICAgOiBUSW50ZXJt
VHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAg
ICB7fQorKworKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5h
cnkpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFy
eS0+Z2V0T3AoKTsKKysKKysgICAgICAgIHN3aXRjaCAob3ApCisrICAgICAgICB7CisrICAgICAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsOgorKyAgICAgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZsZWZ0VHlwZSAgPSBiaW5hcnktPmdldExlZnQoKS0+Z2V0VHlwZSgpOworKyAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0gYmluYXJ5LT5nZXRSaWdodCgpLT5n
ZXRUeXBlKCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9
PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworKyAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0
cnVjdHVyZSAqc3RydWN0dXJlID0gbVN5bWJvbEVudi5yZW1hcChsZWZ0VHlwZS5nZXRTdHJ1Y3Qo
KSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgq
c3RydWN0dXJlKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBi
cmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisr
ICBwcml2YXRlOgorKyAgICB2b2lkIHVzZVN0cnVjdChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1
cmUpCisrICAgIHsKKysgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5zZXJ0KCZzdHJ1Y3R1cmUp
LnNlY29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmll
bGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3ViU3RydWN0ID0gbVN5bWJvbEVudi5yZW1hcChmaWVs
ZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKysgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9vbCBzaDo6VG9w
b3NvcnRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1QcmVsdWRl
Q29uZmlnICZwcGMpCisreworKyAgICBGaW5kU3RydWN0RXF1YWxpdHlVc2UgZmluZGVyKHN5bWJv
bEVudik7CisrICAgIHJvb3QudHJhdmVyc2UoJmZpbmRlcik7CisrICAgIHBwYy5oYXNTdHJ1Y3RF
cSA9ICFmaW5kZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisrCisrICAgIERlY2xhcmVkU3RydWN0
dXJlIGRlY2xhcmVkU3RydWN0OworKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4g
ZGVjbGFyZWRTdHJ1Y3RzOworKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBub25TdHJ1
Y3RTdG10Tm9kZXM7CisrCisrICAgIHsKKysgICAgICAgIGNvbnN0IHNpemVfdCBzdG10Q291bnQg
PSByb290LmdldENoaWxkQ291bnQoKTsKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RtdENvdW50OyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAgVEludGVybU5vZGUgJnN0
bXROb2RlID0gKnJvb3QuZ2V0Q2hpbGROb2RlKGkpOworKyAgICAgICAgICAgIGlmIChHZXRBc0Rl
Y2xhcmVkU3RydWN0dXJlKHN5bWJvbEVudiwgc3RtdE5vZGUsIGRlY2xhcmVkU3RydWN0LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRh
YmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkZWNsYXJlZFN0cnVjdCk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2soJnN0bXROb2RlKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgeworKyAgICAgICAgc3RkOjp2ZWN0b3I8
Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworKyAgICAgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFRTdHJ1Y3R1cmUgKiwgRGVjbGFyZWRTdHJ1Y3R1cmU+IHJhd1RvRGVjbGFyZWQ7Cisr
CisrICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZkIDogZGVjbGFyZWRTdHJ1
Y3RzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHMucHVzaF9iYWNrKGQuc3RydWN0
dXJlKTsKKysgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5maW5kKGQuc3RydWN0dXJl
KSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKysgICAgICAgICAgICByYXdUb0RlY2xhcmVkW2Qu
c3RydWN0dXJlXSA9IGQ7CisrICAgICAgICB9CisrCisrICAgICAgICAvLyBOb3RlOiBHcmFwaCBt
YXkgY29udGFpbiBtb3JlIHRoYW4gb25seSBleHBsaWNpdGx5IGRlY2xhcmVkIHN0cnVjdHVyZXMu
CisrICAgICAgICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGcgICAgICAgICAgICAgICAgICAg
PSBCdWlsZEdyYXBoKHN5bWJvbEVudiwgc3RydWN0cyk7CisrICAgICAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChnKTsKKysgICAgICAg
IEFTU0VSVChkZWNsYXJlZFN0cnVjdHMuc2l6ZSgpIDw9IHNvcnRlZFN0cnVjdHMuc2l6ZSgpKTsK
KysKKysgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworKyAgICAgICAgZm9yIChjb25z
dCBUU3RydWN0dXJlICpzIDogc29ydGVkU3RydWN0cykKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworKyAgICAgICAgICAgIGlmIChpdCAh
PSByYXdUb0RlY2xhcmVkLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
YXV0byAmZCA9IGl0LT5zZWNvbmQ7CisrICAgICAgICAgICAgICAgIEFTU0VSVChkLmRlY2xOb2Rl
KTsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgeworKyAgICAgICAgVEludGVy
bVNlcXVlbmNlIG5ld1N0bXROb2RlczsKKysKKysgICAgICAgIGZvciAoRGVjbGFyZWRTdHJ1Y3R1
cmUgJmRlY2xhcmVkU3RydWN0IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisrICAgICAgICAgICAgbmV3
U3RtdE5vZGVzLnB1c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisrICAgICAgICAg
ICAgaWYgKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1c2hfYmFjayhkZWNsYXJl
ZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbik7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfQorKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3RtdE5vZGUgOiBub25TdHJ1
Y3RTdG10Tm9kZXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKHN0bXROb2RlKTsK
KysgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKHN0bXROb2RlKTsKKysgICAgICAg
IH0KKysKKysgICAgICAgICpyb290LmdldFNlcXVlbmNlKCkgPSBuZXdTdG10Tm9kZXM7CisrICAg
IH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZyb290KTsKKyt9CitkaWZm
IC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Rv
cG9zb3J0U3RydWN0cy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw
MDAwMC4uYTM5MDhlMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCitAQCAtMCwwICsxLDI3
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworKworKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKysvLyBEb2VzIGEgdG9wb3NvcnQgb24gc3RydWN0cyBiYXNlZCBvbiB0eXBlIGRl
cGVuZGVuY2llcy4KKysvLyBTdHJ1Y3QgdHlwZSBkZWNsYXJhdGlvbnMgYXJlIG1vdmVkIHRvIHRo
ZSB0b3Agb2YgdGhlIHJvb3QgYmxvY2suCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIFRvcG9zb3J0
U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKysKKyt9ICAv
LyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uY3BwCitu
ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDE0YmM2MworLS0tIC9kZXYvbnVs
bAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dy
YXBNYWluLmNwcAorQEAgLTAsMCArMSw5NCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysK
Kyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytu
YW1lc3BhY2UKKyt7CisrCisrY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2Vy
CisreworKyAgcHJpdmF0ZToKKysgICAgSWRHZW4gJm1JZEdlbjsKKysKKysgIHB1YmxpYzoKKysg
ICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdlbiAmaWRHZW4pCisrICAg
ICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlLCAmc3ltYm9sVGFibGUp
LCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwg
VEludGVybUJsb2NrICpibG9ja05vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChi
bG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5vZGUg
OiAqYmxvY2tOb2RlLT5nZXRTZXF1ZW5jZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlm
IChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSA9IG5vZGUtPmdldEFzRnVu
Y3Rpb25EZWZpbml0aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAg
ICAgICAgICAgIGlmIChmdW5jLmlzTWFpbigpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgcHJp
dmF0ZToKKysgICAgdm9pZCB2aXNpdE1haW4oVEludGVybUJsb2NrICZyb290LCBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1
bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworKyAgICAgICAgQVNT
RVJUKGZ1bmMuaXNNYWluKCkpOworKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidFZvaWQpOworKyAgICAgICAgQVNTRVJU
KGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09IDApOworKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICZleHRlcm5hbE1haW5GdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworKyAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5hbE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5
bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFsTWFpbkZ1bmMpOworKworKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uUHJvdG90eXBlICpleHRlcm5hbE1haW5Qcm90byA9IGZ1bmNEZWZOb2RlLT5nZXRG
dW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpp
bnRlcm5hbE1haW5Qcm90byA9CisrICAgICAgICAgICAgbmV3IFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSgmaW50ZXJuYWxNYWluRnVuYyk7CisrCisrICAgICAgICBUSW50ZXJtQmxvY2sgKmV4dGVy
bmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAgICBleHRlcm5hbE1haW5C
b2R5LT5hcHBlbmRTdGF0ZW1lbnQoCisrICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlRnVuY3Rpb25DYWxsKGludGVybmFsTWFpbkZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2UoKSkp
OworKworKyAgICAgICAgVEludGVybUJsb2NrICppbnRlcm5hbE1haW5Cb2R5ID0gZnVuY0RlZk5v
ZGUtPmdldEJvZHkoKTsKKysKKysgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmV4
dGVybmFsTWFpbkRlZiA9CisrICAgICAgICAgICAgbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24oZXh0ZXJuYWxNYWluUHJvdG8sIGV4dGVybmFsTWFpbkJvZHkpOworKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbiAqaW50ZXJuYWxNYWluRGVmID0KKysgICAgICAgICAgICBuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90bywgaW50ZXJuYWxNYWlu
Qm9keSk7CisrCisrICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVzaF9iYWNrKE5vZGVSZXBs
YWNlV2l0aE11bHRpcGxlRW50cnkoCisrICAgICAgICAgICAgJnJvb3QsIGZ1bmNEZWZOb2RlLCBU
SW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1haW5EZWZ9KSk7CisrICAg
IH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6OldyYXBNYWluKFRDb21w
aWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZyb290KQorK3sKKysg
ICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7
CisrICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworKyAgICByb290LnRy
YXZlcnNlKCZ3cmFwcGVyKTsKKysgICAgaWYgKCF3cmFwcGVyLnVwZGF0ZVRyZWUoJmNvbXBpbGVy
LCAmcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBy
ZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu
ZGV4IDAwMDAwMDAuLjViMGVkZmYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oCitAQCAtMCwwICsxLDI4
IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysKKytuYW1l
c3BhY2Ugc2gKKyt7CisrCisrLy8gQ2hhbmdlcworKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IG1h
aW4tYm9keSB9CisrLy8gVG8KKysvLyAgICB2b2lkIEZSRVNIX05BTUUoYXJncykgeyBtYWluLWJv
ZHkgfQorKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKysvLwor
Ky8vIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZnVsIGlmIHRoZSBvcmlnaW5hbCBgbWFpbmAg
aGFzIG11bHRpcGxlIHJldHVybiBwYXRocyBiZWNhdXNlIHRoaXMKKysvLyByZWR1Y2VzIGRvd24g
dG8gYSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNs
ZWFudXAgY29kZSBpbiBgbWFpbmAuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIFdyYXBNYWluKFRD
b21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZyb290KTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1dSQVBNQUlOX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uZTBhOGJmMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCitAQCAtMCwwICsxLDMwNSBAQAor
Ky8vCisrLy8gQ29weXJpZ2h0IDIwMDIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKysvLworKworKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorKyMgICAgcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZSA6IDQ3MTgpCisrI2VuZGlmCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVkZSA8YWxnb3JpdGhtPgorKyNp
bmNsdWRlIDxjbGltaXRzPgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1l
cy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlw
ZXMuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY29uc3QgY2hhciAqZ2V0QmFzaWNNZXRh
bFN0cmluZyhjb25zdCBUVHlwZSAqdCkKKyt7CisrICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBl
KCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKysgICAgICAgICAgICByZXR1cm4g
InZvaWQiOworKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKysgICAgICAgICAgICByZXR1cm4gImZs
b2F0IjsKKysgICAgICAgIGNhc2UgRWJ0SW50OgorKyAgICAgICAgICAgIHJldHVybiAiaW50IjsK
KysgICAgICAgIGNhc2UgRWJ0VUludDoKKysgICAgICAgICAgICByZXR1cm4gInVpbnQiOworKyAg
ICAgICAgY2FzZSBFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiAiYm9vbCI7CisrICAgICAg
ICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorKyAgICAgICAgICAgIHJldHVybiAieXV2Q3Nj
U3RhbmRhcmRFWFQiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisrICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisrICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsT0VTOgorKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckV4dGVybmFsT0VT
IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllFWFQ6CisrICAgICAgICAg
ICAgcmV0dXJuICJfX3NhbXBsZXJFeHRlcm5hbDJEWTJZRVhUIjsKKysgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEUmVjdDoKKysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOworKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKysgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyREFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6CisrICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkRNUyI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TQXJyYXk6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNU0FycmF5IjsKKysgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVBcnJheToKKysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlQXJy
YXkiOworKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorKyAgICAgICAgICAgIHJldHVybiAi
aXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisrICAgICAgICAgICAg
cmV0dXJuICJpc2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorKyAg
ICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsKKysgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIy
RE1TIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAgICAg
cmV0dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3Vi
ZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlQXJyYXkiOworKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7
CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorKyAgICAgICAgICAgIHJl
dHVybiAidXNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5Ogor
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKysgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorKyAg
ICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlQXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkRTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOwor
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKysgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDdWJlU2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFk
b3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheVNoYWRvdyI7CisrICAgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJz
YW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0U3RydWN0OgorKyAgICAg
ICAgICAgIHJldHVybiAic3RydWN0dXJlIjsKKysgICAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxv
Y2s6CisrICAgICAgICAgICAgcmV0dXJuICJpbnRlcmZhY2UgYmxvY2siOworKyAgICAgICAgY2Fz
ZSBFYnRJbWFnZTJEOgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkIjsKKysgICAgICAg
IGNhc2UgRWJ0SUltYWdlMkQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQ8aW50PiI7
CisrICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVy
ZTJkPHVpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0SW1hZ2UzRDoKKysgICAgICAgICAgICByZXR1
cm4gInRleHR1cmUzZCI7CisrICAgICAgICBjYXNlIEVidElJbWFnZTNEOgorKyAgICAgICAgICAg
IHJldHVybiAidGV4dHVyZTNkPGludD4iOworKyAgICAgICAgY2FzZSBFYnRVSW1hZ2UzRDoKKysg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDx1aW50PiI7CisrICAgICAgICBjYXNlIEVidElt
YWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUyZD4i
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyREFycmF5OgorKyAgICAgICAgICAgIGlmICh0LT5pc1Vu
c2l6ZWRBcnJheSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICJh
cnJheV9yZWY8dGV4dHVyZTJkPGludD4+IjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
ZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVN
RU5URUQiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIGNhc2UgRWJ0VUltYWdlMkRBcnJheToK
KysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUyZDx1aW50Pj4iOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgY2FzZSBFYnRJbWFnZUN1YmU6CisrICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7
CisrICAgICAgICBjYXNlIEVidElJbWFnZUN1YmU6CisrICAgICAgICAgICAgcmV0dXJuICJ0ZXh0
dXJlY3ViZTxpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0VUltYWdlQ3ViZToKKysgICAgICAgICAg
ICByZXR1cm4gInRleHR1cmVjdWJlPHVpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0SW1hZ2VDdWJl
QXJyYXk6CisrICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZT4iOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgY2FzZSBFYnRJSW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAgICAgaWYgKHQtPmlzVW5z
aXplZEFycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gImFy
cmF5X3JlZjx0ZXh0dXJlY3ViZTxpbnQ+PiI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExF
TUVOVEVEIjsKKysgICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVidFVJbWFnZUN1YmVBcnJh
eToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmVjdWJlPHVpbnQ+PiI7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICBjYXNlIEVidEF0b21pY0NvdW50ZXI6CisrICAgICAgICAgICAgcmV0dXJuICJhdG9t
aWNfdWludCI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJWaWRlb1dFQkdMOgorKyAgICAgICAg
ICAgIHJldHVybiAiJHNhbXBsZXJWaWRlb1dFQkdMIjsKKysgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlw
ZSI7CisrICAgIH0KKyt9CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVT
dHJpbmcoY29uc3QgVFR5cGUgKnQpCisreworKyAgICBpZiAodC0+aXNNYXRyaXgoKSkKKysgICAg
eworKyAgICAgICAgc3dpdGNoICh0LT5nZXRDb2xzKCkpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdldFJvd3MoKSkKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKysgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZs
b2F0Mng0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNhc2UgMzoKKysgICAg
ICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisrICAgICAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gImZsb2F0M3gyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MyI7CisrICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4NCI7CisrICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgICAgIHN3aXRj
aCAodC0+Z2V0Um93cygpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDR4MiI7Cisr
ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDR4MyI7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICB9CisrICAgIH0KKysgICAgaWYg
KHQtPmlzVmVjdG9yKCkpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBl
KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKysgICAgICAgICAg
ICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisrICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEludDoKKysgICAgICAgICAgICAgICAgc3dp
dGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQy
IjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gImludDMiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiaW50NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisrICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9t
aW5hbFNpemUoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbDIiOworKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9v
bDMiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDQiOworKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgY2Fz
ZSBFYnRVSW50OgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQyIjsKKysgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQzIjsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQ0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworKyAgICAgICAgfQorKyAgICB9CisrICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRTdHJ1Y3QpOworKyAgICBBU1NFUlQodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50ZXJm
YWNlQmxvY2spOworKyAgICByZXR1cm4gZ2V0QmFzaWNNZXRhbFN0cmluZyh0KTsKKyt9CisrCisr
SW1tdXRhYmxlU3RyaW5nIEdldE1ldGFsVHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLCBOYW1lTWFwICpuYW1lTWFwKQorK3sKKysgICAgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorKyAgICAgICAgcmV0dXJuIEhhc2hO
YW1lKHR5cGUuZ2V0U3RydWN0KCksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCk7CisrICAgIGVsc2UK
KysgICAgICAgIHJldHVybiBJbW11dGFibGVTdHJpbmcoZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVT
dHJpbmcoJnR5cGUpKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgKK25ldyBmaWxlIG1vZGUgMTAw
NjQ0CitpbmRleCAwMDAwMDAwLi5jZTNjZTNjCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCitAQCAtMCwwICsxLDMxIEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisr
I2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbW1vbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFVuaXF1ZUlkLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY29u
c3QgY2hhciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAqdCk7CisrCisrY29uc3Qg
Y2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworKwor
K0ltbXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXAp
OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gVFJBTlNMQVRPUl9NRVRB
TF9VVElMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JWdWxrYW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5j
cHAKK2luZGV4IDIwMWNiYzkuLmM1ZWM2N2QgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKK0BAIC0xNjMsNiArMTYzLDggQEAgY2xhc3MgRGVjbGFy
ZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCisgY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZFBvaW50Q29vcmROYW1lICAgID0gSW1tdXRh
YmxlU3RyaW5nKCJmbGlwcGVkUG9pbnRDb29yZCIpOworIGNvbnN0ZXhwciBJbW11dGFibGVTdHJp
bmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZEZy
YWdDb29yZCIpOworIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0VtdWxhdGVkRGVwdGhSYW5n
ZVBhcmFtcyA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEZXB0aFJhbmdlUGFyYW1zIik7CisrY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNCbG9ja05hbWUgICAgICAgID0gSW1tdXRh
YmxlU3RyaW5nKCJBTkdMRVVuaWZvcm1CbG9jayIpOworK2NvbnN0ZXhwciBJbW11dGFibGVTdHJp
bmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlm
b3JtcyIpOworIAorIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPGNvbnN0IGNoYXIgKj4ga0RlZmF1
bHRVbmlmb3JtTmFtZXMgPSB7CisgICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCB2azo6a0Rl
ZmF1bHRVbmlmb3Jtc05hbWVWU30sCitAQCAtNDUwLDkgKzQ1Miw5IEBAIGNvbnN0IFRWYXJpYWJs
ZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAqcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkcy5lbmQoKSk7Cisg
CisgICAgIC8vIERlZmluZSBhIGRyaXZlciB1bmlmb3JtIGJsb2NrICJBTkdMRVVuaWZvcm1CbG9j
ayIgd2l0aCBpbnN0YW5jZSBuYW1lICJBTkdMRVVuaWZvcm1zIi4KKy0gICAgcmV0dXJuIERlY2xh
cmVJbnRlcmZhY2VCbG9jaygKKy0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2ZXJGaWVs
ZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAorLSAgICAg
ICAgSW1tdXRhYmxlU3RyaW5nKHZrOjprRHJpdmVyVW5pZm9ybXNCbG9ja05hbWUpLCBJbW11dGFi
bGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc1Zhck5hbWUpKTsKKysgICAgcmV0dXJuIERlY2xh
cmVJbnRlcmZhY2VCbG9jayhyb290LCBzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFV
bmlmb3JtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZp
ZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga1VuaWZvcm1zVmFyTmFtZSk7CisgfQorIAorIGNvbnN0IFRWYXJpYWJs
ZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJsb2NrICpyb290LCBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1R5cGVzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCitpbmRleCBh
M2UwMzk5Li44ZjZmYzQ2IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlw
ZXMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAorQEAgLTIzMiw2ICsy
MzIsNyBAQCBjbGFzcyBUVHlwZQorIAorICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgICBib29sIGlz
VmVjdG9yQXJyYXkoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5
U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsgfQorKyAgICBib29sIGlzUmFuazAoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgICBib29s
IGlzU2NhbGFyKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFtU3RydWN0dXJlICYmICFpc0FycmF5KCk7Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwCitpbmRleCA3NmE4YmMyLi5iYTRk
NmYzIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3Bw
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAKK0BAIC03Niwx
MiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVybU5vZGUgKnJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyAqZGlhZ25vc3RpY3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlQVNUT3B0aW9ucyAmb3B0aW9ucykK
KyAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVlLCBudWxscHRyKSwgbU9w
dGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKy17CistICAgIGlmICht
T3B0aW9ucy52YWxpZGF0ZVNpbmdsZVBhcmVudCkKKy0gICAgeworLSAgICAgICAgbVBhcmVudFty
b290XSA9IG51bGxwdHI7CistICAgIH0KKy19Cisre30KKyAKKyB2b2lkIFZhbGlkYXRlQVNUOjp2
aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQorIHsKK0BAIC05MSwxMSAr
ODYsMTIgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
Tm9kZSAqbm9kZSkKKyAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
KytpKQorICAgICAgICAgeworICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9k
ZS0+Z2V0Q2hpbGROb2RlKGkpOworLSAgICAgICAgICAgIGlmIChtUGFyZW50LmZpbmQoY2hpbGQp
ICE9IG1QYXJlbnQuZW5kKCkpCisrICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBt
UGFyZW50W2NoaWxkXTsKKysgICAgICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3Vn
aCB0aGUgc2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgorICAgICAgICAgICAg
ICAgICAvLyB0aGUgYW5jZXN0b3JzLgorLSAgICAgICAgICAgICAgICBpZiAobVBhcmVudFtjaGls
ZF0gIT0gbm9kZSkKKysgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQorICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5v
ZGUtPmdldExpbmUoKSwgIkZvdW5kIGNoaWxkIHdpdGggdHdvIHBhcmVudHMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIp
OworQEAgLTEwMywxNyArOTksMTcgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgIH0KKyAKKy0gICAgICAgICAgICBtUGFyZW50W2NoaWxkXSA9IG5vZGU7CisrICAgICAgICAg
ICAgcGFyZW50ID0gbm9kZTsKKyAgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKy12b2lkIFZhbGlk
YXRlQVNUOjpleHBlY3ROb25OdWxsQ2hpbGRyZW4oVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpu
b2RlLCBzaXplX3QgbGVhc3RfY291bnQpCisrdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVs
bENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291
bnQpCisgeworICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgbU9wdGlvbnMudmFsaWRhdGVO
dWxsTm9kZXMpCisgICAgIHsKKyAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0
Q2hpbGRDb3VudCgpOworLSAgICAgICAgaWYgKGNoaWxkQ291bnQgPCBsZWFzdF9jb3VudCkKKysg
ICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwgIlRvbyBmZXcgY2hpbGRy
ZW4iLCAiPHZhbGlkYXRlTnVsbE5vZGVzPiIpOworICAgICAgICAgICAgIG1OdWxsTm9kZXNGYWls
ZWQgPSB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiX2F1dG9nZW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0
b2dlbi5jcHAKK2luZGV4IDEzMGI5OGEuLjMzYjgzZGIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK0BAIC0xLDUgKzEsNyBAQAorIC8q
IEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4gICovCisgCisrLyogQXBw
bGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0
cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLwor
KworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisg
CisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDE5
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX3RhYl9hdXRvZ2VuLmgKK2luZGV4IDUzMDYwMzIuLjAyNTAzMDAgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKKysrKyBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uaAorQEAgLTEsNSArMSw3
IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKyAK
KysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3Rz
IHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vu
c2UuICovCisrCisgLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBD
CisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0y
MDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKK2lu
ZGV4IGRmYTIzYWEuLmJiYzhkY2QgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNwcAorQEAgLTUz
LDcgKzUzLDggQEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2xhcmF0aW9uLAorICAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUpOworICAgICAgICAg
VEludGVybVR5cGVkICpleHByZXNzaW9uID0gaW5pdC0+Z2V0UmlnaHQoKTsKKyAKKy0gICAgICAg
IGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCAhZXhwcmVzc2lv
bi0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgaWYgKGV4cHJlc3Npb24tPmdldFF1YWxp
ZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFudFZhbHVlKCkgfHwK
KysgICAgICAgICAgICBzeW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgLy8gRm9yIHZhcmlhYmxlcyB3aGljaCBhcmUgbm90IGNv
bnN0YW50LCBkZWZlciB0aGVpciByZWFsIGluaXRpYWxpemF0aW9uIHVudGlsCisgICAgICAgICAg
ICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6ZSB1bmlmb3Jtcy4KK2RpZmYgLS1naXQgYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMuY3BwIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcAoraW5kZXggMjg5ZGUy
MS4uMmVlODIzOSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1BydW5lRW1wdHlDYXNlcy5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKK0BAIC0xNyw3ICsxNyw3IEBAIG5hbWVzcGFjZSBzaAor
IG5hbWVzcGFjZQorIHsKKyAKKy1ib29sIEFyZUVtcHR5QmxvY2tzKFRJbnRlcm1TZXF1ZW5jZSAq
c3RhdGVtZW50cyk7CisrYm9vbCBBcmVFbXB0eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2Ug
KnN0YXRlbWVudHMpOworIAorIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRlcm1Ob2RlICpub2RlKQor
IHsKK0BAIC0zNyw3ICszNyw3IEBAIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRlcm1Ob2RlICpub2Rl
KQorIAorIC8vIFJldHVybiB0cnVlIGlmIGFsbCBzdGF0ZW1lbnRzIGluICJzdGF0ZW1lbnRzIiBj
b25zaXN0IG9ubHkgb2YgZW1wdHkgYmxvY2tzIGFuZCBuby1vcCBzdGF0ZW1lbnRzLgorIC8vIFJl
dHVybnMgdHJ1ZSBhbHNvIGlmIHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRzLgorLWJvb2wgQXJlRW1w
dHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorK2Jvb2wgQXJlRW1wdHlCbG9j
a3MoY29uc3QgVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorIHsKKyAgICAgZm9yIChzaXpl
X3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCisgICAgIHsKK2RpZmYgLS1n
aXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhy
b3VnaC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaC5jcHAKK2luZGV4IDQ1MDBhZWEuLmRkOGRkNTQgMTAwNjQ0CistLS0gYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAK
KysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1JlbW92ZVN3aXRjaEZhbGxU
aHJvdWdoLmNwcAorQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91
Z2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorICAgICBib29sIHZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpIG92ZXJyaWRlOworICAgICBib29sIHZpc2l0QnJh
bmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsKKyAKKy0gICAgdm9pZCBv
dXRwdXRTZXF1ZW5jZShUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLCBzaXplX3Qgc3RhcnRJbmRl
eCk7CisrICAgIHZvaWQgb3V0cHV0U2VxdWVuY2UoY29uc3QgVEludGVybVNlcXVlbmNlICpzZXF1
ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpOworICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgp
OworIAorICAgICBUSW50ZXJtQmxvY2sgKm1TdGF0ZW1lbnRMaXN0OworQEAgLTE1MywxMSArMTUz
LDEzIEBAIGJvb2wgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNo
KFZpc2l0LCBUSW50ZXJtU3dpdGNoICpub2RlKQorICAgICByZXR1cm4gZmFsc2U7CisgfQorIAor
LXZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91dHB1dFNlcXVlbmNlKFRJ
bnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KQorK3ZvaWQgUmVtb3Zl
U3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAqc2VxdWVuY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXgpCisgeworKyAgICBhdXRvICZvdXRT
ZXEgPSAqbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVlbmNlKCk7CisgICAgIGZvciAoc2l6ZV90
IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2UtPnNpemUoKTsgKytpKQorICAgICB7CistICAg
ICAgICBtU3RhdGVtZW50TGlzdE91dC0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHNlcXVlbmNl
LT5hdChpKSk7CisrICAgICAgICBvdXRTZXEucHVzaF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7Cisg
ICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9v
cHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAoraW5kZXggNzQxNDU0MC4uMGMyYWE4
ZiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5
TG9vcENvbmRpdGlvbnMuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAorQEAgLTIxLDEwICsyMSwxNyBAQCBuYW1lc3Bh
Y2Ugc2gKKyBuYW1lc3BhY2UKKyB7CisgCisrc3RydWN0IExvb3BJbmZvCisreworKyAgICBjb25z
dCBUVmFyaWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gbnVsbHB0cjsKKysgICAgVEludGVybVR5
cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisrICAgIFRJbnRlcm1UeXBlZCAq
ZXhwcmVzc2lvbiAgICAgICAgICAgPSBudWxscHRyOworK307CisrCisgY2xhc3MgU2ltcGxpZnlM
b29wQ29uZGl0aW9uc1RyYXZlcnNlciA6IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIK
KyB7CisgICBwdWJsaWM6CistICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIodW5z
aWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAgU2ltcGxpZnlMb29wQ29u
ZGl0aW9uc1RyYXZlcnNlcihjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKmNvbmRpdGlv
bnNUb1NpbXBsaWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSAqc3ltYm9sVGFibGUpOworIAorICAgICB2b2lkIHRyYXZlcnNlTG9vcChUSW50ZXJt
TG9vcCAqbm9kZSkgb3ZlcnJpZGU7CitAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxv
b3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgor
ICAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpu
b2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworKyAgICBib29s
IHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsK
KyAKKyAgICAgYm9vbCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExv
b3BUb0NoYW5nZTsgfQorIAorQEAgLTQyLDE2ICs1MCwxOSBAQCBjbGFzcyBTaW1wbGlmeUxvb3BD
b25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgorICAg
ICAvLyBmb3VuZC4KKyAgICAgYm9vbCBtRm91bmRMb29wVG9DaGFuZ2U7CisgICAgIGJvb2wgbUlu
c2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNzaW9uOworLSAgICBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXIgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5OworKyAgICBjb25zdCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIgKm1Db25kaXRpb25zVG9TaW1wbGlmeTsKKysKKysgIHByaXZhdGU6CisrICAg
IExvb3BJbmZvIG1Mb29wOworIH07CisgCisgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
cjo6U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcigKKy0gICAgdW5zaWduZWQgaW50IGNv
bmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAgY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRj
aGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKKyAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJs
ZSkKKyAgICAgOiBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlLCBz
eW1ib2xUYWJsZSksCisgICAgICAgbUZvdW5kTG9vcFRvQ2hhbmdlKGZhbHNlKSwKKyAgICAgICBt
SW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4cHJlc3Npb24oZmFsc2UpLAorLSAgICAgIG1Db25k
aXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlmeU1hc2spCisrICAgICAgbUNvbmRp
dGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQorIHt9CisgCisgLy8gSWYgd2Un
cmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9uLCBvciBleHByZXNzaW9u
LCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdAorQEAgLTY4LDcgKzc5LDggQEAgYm9vbCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkgKm5vZGUKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAg
IHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgor
IAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2go
bm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICBy
ZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9CisgCitAQCAtODAsNyArOTIsOSBAQCBib29s
IFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5ICpubworICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQorICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlzIGxvb3Au
CisgCistICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOworKyAgICBB
U1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKysgICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0K
KysgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9k
ZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKKyAgICAgcmV0dXJuICFtRm91bmRMb29wVG9D
aGFuZ2U7CisgfQorIAorQEAgLTkyLDcgKzEwNiw4IEBAIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0
aW9uc1RyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
CisgICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCisgICAgICAgICByZXR1cm4gZmFsc2U7ICAv
LyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KKyAKKy0gICAgbUZvdW5kTG9v
cFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNoKG5vZGUsIGdldFBhcmVudE5v
ZGUoKSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUsIGdldFBhcmVu
dE5vZGUoKSk7CisgICAgIHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOworIH0KKyAKK0BAIC0x
MDQsNyArMTE5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNp
dFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICoKKyAgICAgaWYgKG1Gb3VuZExv
b3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0
byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0
aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2lt
cGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkt
Pm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9CisgCitA
QCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGEKKyAgICAgaWYgKG1G
b3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVj
aWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBt
Q29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9u
c1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2lt
cGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9
CisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKKyt7CisrICAgIGlmIChub2RlLT5nZXRG
bG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0aW9uIHx8IG1Mb29wLmV4cHJl
c3Npb24pKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtQmxvY2sgKnBhcmVudCA9IGdldFBhcmVu
dE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgQVNTRVJUKHBhcmVudCk7CisrICAgICAg
ICBUSW50ZXJtU2VxdWVuY2Ugc2VxOworKyAgICAgICAgaWYgKG1Mb29wLmV4cHJlc3Npb24pCisr
ICAgICAgICB7CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtTG9vcC5leHByZXNzaW9uLT5k
ZWVwQ29weSgpKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24pCisr
ICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKTsK
KysgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+
ZGVlcENvcHkoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgc2VxLnB1c2hfYmFjayhub2RlKTsK
KysgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5wdXNoX2JhY2soTm9kZVJlcGxhY2VXaXRoTXVs
dGlwbGVFbnRyeShwYXJlbnQsIG5vZGUsIHN0ZDo6bW92ZShzZXEpKSk7CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIHRydWU7CisrfQorKworIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZl
cnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorIHsKKyAgICAgLy8gTWFyayB0
aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRl
cm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKK0BAIC0xMjgsNyArMTY5LDcgQEAgdm9pZCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpCisgICAgIFNjb3BlZE5vZGVJblRyYXZlcnNhbFBhdGggYWRkVG9QYXRoKHRoaXMsIG5v
ZGUpOworIAorICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4cHJlc3Npb24gPSB0cnVl
OworLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKKysg
ICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9T
aW1wbGlmeTsKKyAKKyAgICAgaWYgKCFtRm91bmRMb29wVG9DaGFuZ2UgJiYgbm9kZS0+Z2V0SW5p
dCgpKQorICAgICB7CitAQCAtMTQ3LDIyICsxODgsNTQgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCisgCisgICAg
IG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IGZhbHNlOworIAorKyAgICBj
b25zdCBMb29wSW5mbyBwcmV2TG9vcCA9IG1Mb29wOworKworICAgICBpZiAobUZvdW5kTG9vcFRv
Q2hhbmdlKQorICAgICB7CisgICAgICAgICBjb25zdCBUVHlwZSAqYm9vbFR5cGUgICA9IFN0YXRp
Y1R5cGU6OkdldDxFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsK
Ky0gICAgICAgIFRWYXJpYWJsZSAqY29uZGl0aW9uVmFyaWFibGUgPSBDcmVhdGVUZW1wVmFyaWFi
bGUobVN5bWJvbFRhYmxlLCBib29sVHlwZSk7CisrICAgICAgICBtTG9vcC5jb25kaXRpb25WYXJp
YWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJvb2xUeXBlKTsKKysgICAg
ICAgIG1Mb29wLmNvbmRpdGlvbiAgICAgICAgID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAg
ICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAK
KyAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGxvb3AgY29uZGl0aW9uIHdpdGggYSBib29sZWFuIHZh
cmlhYmxlIHRoYXQncyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0aW9uLgorICAgICAgICAgVExvb3BU
eXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgaWYgKGxvb3BUeXBlID09
IEVMb29wV2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHBy
ZXNzaW9uKTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJv
bE5vZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGlu
dWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisrICAgICAgICAgICAgICAg
IG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAg
IC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorKyAgICAgICAgICAgICAgICAvLyBpbnRvCisr
ICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7CisrICAgICAgICAgICAgICAgIC8v
ICAgd2hpbGUgKHMwKSB7IGJvZHk7IH0KKysgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0
aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KKysgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25k
aXRpb24pOworKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRl
bXBJbml0RGVjbGFyYXRpb24pOworKworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRp
b24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysKKysg
ICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlh
YmxlIHVwZGF0ZS4KKysgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgICAvLyAgIHdoaWxlIChl
eHByKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAg
ICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgICAvLyAgIHdoaWxlIChzMCkg
eyB7IGJvZHk7IH0gczAgPSBleHByOyB9CisrICAgICAgICAgICAgICAgIC8vCisrICAgICAgICAg
ICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKysg
ICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorLSAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOworKyAgICAgICAgICAgICAgICAgICAgQ3Jl
YXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29w
LmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50Qmxv
Y2sodGVtcEluaXREZWNsYXJhdGlvbik7CisgCisgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9j
ayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKK0BAIC0xNzEsMjggKzI0NCw2MCBAQCB2
b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJt
TG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAg
ICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5n
ZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRl
VGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRp
b24tPmRlZXBDb3B5KCkpKTsKKyAKKyAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIHF1ZXVl
UmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiBu
dWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJlcGxhY2Vt
ZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKKyAgICAgICAg
ICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1z
LgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkpOworLSAgICAgICAgICAg
IG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJs
ZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJv
bE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAgICAgICAgICB9CisgICAgICAg
ICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcERvV2hpbGUpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKysKKysgICAgICAg
ICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlv
biB2YXJpYWJsZSB1cGRhdGUuCisrICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51
bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRp
dGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAgZG8geworKyAgICAgICAg
ICAgICAgICAvLyAgICAgYm9keTsKKysgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHBy
KTsKKysgICAgICAgICAgICAgICAgLy8gaW50bworKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wg
czAgPSBleHByOworKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKysgICAgICAgICAgICAgICAg
Ly8gICAgIGJvZHk7CisrICAgICAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoczApOworKyAgICAg
ICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorKyAg
ICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29u
ZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisrICAgICAgICAgICAgICAgIGluc2Vy
dFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisrCisrICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5j
b25kaXRpb25WYXJpYWJsZSkpOworKworKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVl
IHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAgICAgICAgICAgICAgICBt
TG9vcC5jb25kaXRpb24gPSBudWxscHRyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAg
ICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKyAg
ICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAgICAgICAgICAgICAgLy8g
aW50bworLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IHRydWU7CisrICAgICAgICAgICAgICAg
IC8vICAgYm9vbCBzMDsKKyAgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAg
ICAgIC8vICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsK
KyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7CisrICAgICAgICAgICAgICAgIC8v
IExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKysgICAgICAgICAg
ICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICBUSW50ZXJt
RGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorLSAgICAgICAgICAgICAgICBDcmVh
dGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgQ3JlYXRlQm9vbE5v
ZGUodHJ1ZSkpOworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcERlY2xhcmF0aW9uTm9k
ZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgIGluc2VydFN0YXRl
bWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisgCisgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKK0BAIC0yMDEs
MTUgKzMwNiw2OCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFj
aygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZh
cmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24pKTsKKyAKKyAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIHF1
ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQgbWF5IGhhdmUgYmVl
biBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJlcGxh
Y2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKKyAgICAg
ICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2Js
ZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkpOworLSAgICAgICAg
ICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJp
YWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5
bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAgICAgICAgICB9CisgICAg
ICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikKKysgICAgICAg
IHsKKysgICAgICAgICAgICBpZiAoIW1Mb29wLmNvbmRpdGlvbikKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IENyZWF0ZUJvb2xOb2RlKHRydWUpOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBUSW50ZXJtTG9vcCAqd2hpbGVMb29wOwor
KyAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAgPSBuZXcgVElu
dGVybUJsb2NrKCk7CisrICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVTZXF1
ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysKKysgICAgICAgICAgICAvLyBJbnNl
cnQgImluaXQ7IgorKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9iYWNrKG5vZGUt
PmdldEluaXQoKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChtTG9vcC5j
b25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29wLgorKyAgICAg
ICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0
OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vIGludG8KKysgICAg
ICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAgICBpbml0OworKyAgICAg
ICAgICAgICAgICAvLyAgICAgd2hpbGUgKGV4cHIpIHsKKysgICAgICAgICAgICAgICAgLy8gICAg
ICAgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOworKyAgICAgICAg
ICAgICAgICAvLyAgICAgfQorKyAgICAgICAgICAgICAgICAvLyAgIH0KKysgICAgICAgICAgICAg
ICAgLy8KKysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFu
c2Zvcm1lZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKysK
KysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29w
CisrICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50
ZXJtQmxvY2soKTsKKysgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2Vx
dWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisr
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisrICAgICAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoZXhwcikgeyB3aGlsZUxvb3BCb2R5IH0i
CisrICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9CisrICAgICAgICAgICAgICAgICAgICBuZXcg
VEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0aW9uLCBudWxscHRy
LCB3aGlsZUxvb3BCb2R5KTsKKysKKysgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBz
dGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAgICAgICAgICAgICAgbUxv
b3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxz
ZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lkZSB0
aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorQEAgLTIyMSwzMSArMzc5
LDU2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29w
KFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7
CisgICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYm9keTsgfQorICAgICAgICAgICAgICAgICAv
LyAgICAgICBleHByQjsKKy0gICAgICAgICAgICAvLyAgICAgICBzMCA9IGV4cHI7CisgICAgICAg
ICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgIC8vICAgfQorLSAgICAgICAgICAg
IFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAgPSBuZXcgVEludGVybUJsb2NrKCk7
CistICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVTZXF1ZW5jZSA9IGxvb3BT
Y29wZS0+Z2V0U2VxdWVuY2UoKTsKKysgICAgICAgICAgICAgICAgLy8KKysgICAgICAgICAgICAg
ICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorKyAgICAg
ICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKyAKKy0gICAgICAgICAgICAvLyBJbnNl
cnQgImluaXQ7IgorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisrICAgICAgICAg
ICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAgICAgICAgICAgICBsb29w
U2NvcGVTZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVt
cEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRp
dGlvbikpOworKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdo
aWxlIGxvb3AKKysgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0g
bmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgp
KQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNl
LT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAg
ICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gSW5zZXJ0ICJib29sIHMwID0gZXhw
cjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsiIG90aGVyd2lzZQorLSAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBudWxscHRyOworLSAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKysgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg
Y29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKTsK
KysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hf
YmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29wQm9keSB9IgorKyAgICAg
ICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVsbHB0ciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkpOworKwor
KyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFy
aWFibGUgdXBkYXRlLgorKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRy
OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworLSAg
ICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IENyZWF0ZUJvb2xOb2RlKHRydWUp
OworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9i
YWNrKAorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25k
aXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKKysgICAgICAgICAgICAgICAg
Ly8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29wLgorKyAgICAgICAgICAg
ICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHBy
OyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vIGludG8KKysgICAgICAgICAg
ICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAgICBpbml0OworKyAgICAgICAgICAg
ICAgICAvLyAgICAgYm9vbCBzMCA9IGV4cHI7CisrICAgICAgICAgICAgICAgIC8vICAgICB3aGls
ZSAoczApIHsKKysgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisrICAgICAgICAg
ICAgICAgIC8vICAgICAgIGV4cHJCOworKyAgICAgICAgICAgICAgICAvLyAgICAgICBzMCA9IGV4
cHI7CisrICAgICAgICAgICAgICAgIC8vICAgICB9CisrICAgICAgICAgICAgICAgIC8vICAgfQor
KyAgICAgICAgICAgICAgICAvLworKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNlIHN0YXRl
bWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisrICAgICAgICAgICAgICAgIC8vICAgZXhwckI7
IHMwID0gZXhwcjsgY29udGludWU7CisgCisrICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9v
bCBzMCA9IGV4cHI7IgorKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9i
YWNrKAorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUo
bUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAgICAgICAg
ICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwor
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorQEAgLTI1OCwyMyArNDQxLDIx
IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJ
bnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0
U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUg
d2hpbGUgbG9vcAorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKy0gICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3NpZ25tZW50Tm9k
ZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpKTsK
KysgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25k
aXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uLT5kZWVwQ29weSgpKSk7CisrICAgICAgICAg
ICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29wQm9keSB9IgorKyAgICAgICAg
ICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBT
eW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVsbHB0ciwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkpOworICAgICAg
ICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxlKHMwKSB7IHdoaWxlTG9v
cEJvZHkgfSIKKy0gICAgICAgICAgICBUSW50ZXJtTG9vcCAqd2hpbGVMb29wID0KKy0gICAgICAg
ICAgICAgICAgbmV3IFRJbnRlcm1Mb29wKEVMb29wV2hpbGUsIG51bGxwdHIsIENyZWF0ZVRlbXBT
eW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOworICAgICAgICAgICAgIGxvb3BTY29wZS0+
Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHdoaWxlTG9vcCk7CisgICAgICAgICAgICAgcXVldWVS
ZXBsYWNlbWVudChsb29wU2NvcGUsIE9yaWdpbmFsTm9kZTo6SVNfRFJPUFBFRCk7CisgCisgICAg
ICAgICAgICAgLy8gQWZ0ZXIgdGhpcyB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIGJlIHRyYXZlcnNl
ZCBhbmQgbG9vcHMgaW5zaWRlIGl0IG1heSBiZQorLSAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVk
LiBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4g
dGhlIEFTVCBhZnRlciB0aGUKKy0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlvbiB0aGF0J3Mg
cXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRvZXNuJ3QgbmVl
ZCB0bworLSAgICAgICAgICAgIC8vIGtub3cgdGhlIGV4YWN0IHBvc3QtdHJhbnNmb3JtIHBhdGgg
dG8gaXQuCisrICAgICAgICAgICAgLy8gdHJhbnNmb3JtZWQuIFRoaXMgaXMgZmluZSwgc2luY2Ug
dGhlIG9sZCBib2R5IG5vZGUgd2lsbCBzdGlsbCBiZSBpbiB0aGUgQVNUIGFmdGVyCisrICAgICAg
ICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5kIHRyYW5z
Zm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorKyAgICAgICAgICAgIC8vIG5lZWQgdG8g
a25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0aCB0byBpdC4KKyAgICAgICAgIH0KKyAg
ICAgfQorIAorQEAgLTI4MywxNiArNDY0LDI2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9u
c1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAvLyBXZSB0
cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9y
bWVkLgorICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgbm9kZS0+Z2V0Qm9keSgp
LT50cmF2ZXJzZSh0aGlzKTsKKysKKysgICAgbUxvb3AgPSBwcmV2TG9vcDsKKyB9CisgCisgfSAg
Ly8gbmFtZXNwYWNlCisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAq
Y29tcGlsZXIsIFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQor
K3sKKysgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIobnVsbHB0
ciwgc3ltYm9sVGFibGUpOworKyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKysgICAg
cmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVlKGNvbXBpbGVyLCByb290KTsKKyt9CisrCisgYm9v
bCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorIHsKKy0g
ICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1Rv
U2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7CisrICAgIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hl
ciBjb25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlmeU1hc2spOworKyAgICBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIHRyYXZlcnNlcigmY29uZGl0aW9uc1RvU2lt
cGxpZnksIHN5bWJvbFRhYmxlKTsKKyAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7Cisg
ICAgIHJldHVybiB0cmF2ZXJzZXIudXBkYXRlVHJlZShjb21waWxlciwgcm9vdCk7CisgfQorZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENv
bmRpdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9v
cENvbmRpdGlvbnMuaAoraW5kZXggNGNkZWRlNi4uNjhiOThmOCAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9u
cy5oCitAQCAtMTksNiArMTksMTAgQEAgY2xhc3MgVENvbXBpbGVyOworIGNsYXNzIFRJbnRlcm1O
b2RlOworIGNsYXNzIFRTeW1ib2xUYWJsZTsKKyAKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgU2lt
cGxpZnlMb29wQ29uZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUpOworKworIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zKFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5
LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUu
aCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFjNmRlMTgKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaAorQEAgLTAsMCArMSwy
MTIgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJF
RVVUSUxfSU5URVJNQVNOT0RFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVV
VElMX0lOVEVSTUFTTk9ERV9IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCIKKysKKysjaW5jbHVk
ZSA8dXRpbGl0eT4KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrbmFtZXNwYWNlIHByaXYKKyt7
CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFzTm9kZQorK3t9OworKworK3Rl
bXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtTm9kZT4KKyt7CisrICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJu
IG5vZGU7IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtVHlw
ZWQ+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50
ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRB
c1R5cGVkKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVj
dCBBc05vZGU8VEludGVybVN5bWJvbD4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybVN5bWJvbCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9
OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlvbj4K
Kyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUNvbnN0YW50VW5pb24gKmV4ZWMo
VEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+
Z2V0QXNDb25zdGFudFVuaW9uKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0
ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUZ1bmN0aW9uUHJvdG90eXBlPgorK3sKKysgICAg
c3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmV4ZWMoVEludGVy
bU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNG
dW5jdGlvblByb3RvdHlwZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBs
YXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlPgorK3sK
KysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICpl
eGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5v
ZGUtPmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsK
KysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN3aXp6bGU+CisreworKyAg
ICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzU3dpenpsZU5v
ZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFz
Tm9kZTxUSW50ZXJtQmluYXJ5PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJt
QmluYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
bm9kZSA/IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307Cisr
CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1VbmFyeT4KKyt7CisrICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVW5hcnlOb2RlKCkgOiBu
dWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VElu
dGVybVRlcm5hcnk+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/
IG5vZGUtPmdldEFzVGVybmFyeU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3Rl
bXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtSWZFbHNlPgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzSWZFbHNlTm9kZSgpIDogbnVs
bHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1Td2l0Y2g+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l0Y2ggKmV4
ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2RlID8gbm9k
ZS0+Z2V0QXNTd2l0Y2hOb2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0
ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUNhc2U+CisreworKyAgICBzdGF0aWMgQU5HTEVf
SU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAg
ICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ2FzZU5vZGUoKSA6IG51bGxwdHI7CisrICAg
IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkgOiBudWxscHRyOworKyAg
ICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUFnZ3JlZ2F0
ZT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhU
SW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4K
KytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1CbG9jaz4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybUJsb2NrICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmxvY2soKSA6IG51bGxwdHI7CisrICAgIH0KKyt9
OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb24+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1HbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
Tm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1EZWNsYXJhdGlvbj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUg
VEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAg
ICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkgOiBudWxscHRy
OworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUxv
b3A+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFz
TG9vcE5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3Ry
dWN0IEFzTm9kZTxUSW50ZXJtQnJhbmNoPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQnJhbmNoTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQor
K307CisrCisrfSAgLy8gbmFtZXNwYWNlIHByaXYKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KytBTkdMRV9JTkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQorK3sKKysgICAgcmV0
dXJuIHByaXY6OkFzTm9kZTxUPjo6ZXhlYyhub2RlKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNl
IHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTUFT
Tk9ERV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK2luZGV4IGQwOGMzODYuLmFjYzc4
OTIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK0BAIC02NSw3ICs2NSw3IEBAIGJv
b2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFtaWNJbmRleGluZ09mU3dpenpsZWRW
ZWN0b3IoVEludGVybUJpbmFyeSAqCisgICAgIHJldHVybiBJc0R5bmFtaWNJbmRleGluZ09mVmVj
dG9yT3JNYXRyaXgobm9kZSkgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N3aXp6bGVOb2RlKCk7
CisgfQorIAorLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKQorK2Jvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtFeHBy
ZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDApCisgICAgIHsKK0BAIC04Nyw3ICs4Nyw3IEBAIGJv
b2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJbnRlcm1CaW5hcnkg
Km5vZGUsIFRJbnRlcm1Ob2RlICpwCisgICAgIHJldHVybiBmYWxzZTsKKyB9CisgCistYm9vbCBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKKytib29s
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5ICpub2RlKSBjb25z
dAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtBcnJheUxlbmd0aE1ldGhvZCkgIT0gMCkKKyAgICAg
eworQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNo
KFRJbnRlcm1VbmFyeSAqbm9kZSkKKyAgICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVy
bU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNo
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsK
KyAgICAgLy8gTC12YWx1ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgdG8gY2hlY2sg
Zm9yIGR5bmFtaWMgaW5kZXhpbmcgaW4gTC12YWx1ZS4KKyAgICAgLy8gVHJhdmVyc2VycyB0aGF0
IGRvbid0IHRyYWNrIGwtdmFsdWVzIGNhbiBzdGlsbCB1c2UgdGhpcyBjbGFzcyBhbmQgbWF0Y2gg
YmluYXJ5IG5vZGVzIHdpdGgKK0BAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJl
bnROb2QKKyAKKyBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJp
bmFyeSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bU5vZGUgKnBhcmVudE5vZGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpIGNvbnN0CisgeworICAgICBpZiAo
bWF0Y2hJbnRlcm5hbChub2RlLCBwYXJlbnROb2RlKSkKKyAgICAgeworQEAgLTEyNiw3ICsxMjYs
NyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAq
bm9kZSwKKyAgICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJu
TWF0Y2hlcjo6bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVu
dE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsKKyAgICAgaWYg
KChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDApCisgICAgIHsKK0BAIC0x
NjEsNyArMTYxLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnQKKyAgICAgcmV0dXJuIGZhbHNl
OworIH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVRl
cm5hcnkgKm5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRl
cm1UZXJuYXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtVbmZvbGRlZFNo
b3J0Q2lyY3VpdEV4cHJlc3Npb24pICE9IDApCisgICAgIHsKK0BAIC0xNzAsNyArMTcwLDcgQEAg
Ym9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2Rl
KQorICAgICByZXR1cm4gZmFsc2U7CisgfQorIAorLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRj
aGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgY29uc3QKKyB7Cisg
ICAgIGlmICgobU1hc2sgJiBrTXVsdGlEZWNsYXJhdGlvbikgIT0gMCkKKyAgICAgeworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXIuaAoraW5kZXggZTljNGJjZi4uNmYzZDg3MyAxMDA2NDQKKy0tLSBhL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIu
aAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0
ZXJuTWF0Y2hlci5oCitAQCAtMjgsNTIgKzI4LDUyIEBAIGNsYXNzIEludGVybU5vZGVQYXR0ZXJu
TWF0Y2hlcgorICAgICBzdGF0aWMgYm9vbCBJc0R5bmFtaWNJbmRleGluZ09mVmVjdG9yT3JNYXRy
aXgoVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAgIHN0YXRpYyBib29sIElzRHluYW1pY0luZGV4
aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKKyAKKy0gICAgZW51bSBQ
YXR0ZXJuVHlwZQorKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CisgICAgIHsK
KyAgICAgICAgIC8vIE1hdGNoZXMgZXhwcmVzc2lvbnMgdGhhdCBhcmUgdW5mb2xkZWQgdG8gaWYg
c3RhdGVtZW50cyBieSBVbmZvbGRTaG9ydENpcmN1aXRUb0lmCistICAgICAgICBrVW5mb2xkZWRT
aG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorKyAgICAgICAga1VuZm9sZGVkU2hvcnRD
aXJjdWl0RXhwcmVzc2lvbiA9IDF1IDw8IDB1LAorIAorICAgICAgICAgLy8gTWF0Y2hlcyBleHBy
ZXNzaW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBz
dGF0ZW1lbnRzIHdoZXJlIGEKKyAgICAgICAgIC8vIGNvbnN0cnVjdG9yIG9yIGZ1bmN0aW9uIGNh
bGwgcmVzdWx0IGlzIGFzc2lnbmVkLgorLSAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJh
eSA9IDB4MDAwMSA8PCAxLAorKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1
IDw8IDF1LAorIAorICAgICAgICAgLy8gTWF0Y2hlcyBkeW5hbWljIGluZGV4aW5nIG9mIHZlY3Rv
cnMgb3IgbWF0cmljZXMgaW4gbC12YWx1ZXMuCistICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZW
ZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisrICAgICAgICBrRHluYW1pY0lu
ZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMXUgPDwgMnUsCisgCisgICAgICAgICAv
LyBNYXRjaGVzIGRlY2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFi
bGVzLgorLSAgICAgICAga011bHRpRGVjbGFyYXRpb24gPSAweDAwMDEgPDwgMywKKysgICAgICAg
IGtNdWx0aURlY2xhcmF0aW9uID0gMXUgPDwgM3UsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGRl
Y2xhcmF0aW9ucyBvZiBhcnJheXMuCistICAgICAgICBrQXJyYXlEZWNsYXJhdGlvbiA9IDB4MDAw
MSA8PCA0LAorKyAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKKyAKKyAgICAg
ICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIHN0cnVjdHMgd2hlcmUgdGhlIHN0cnVjdCB0
eXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lLgorLSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFy
YXRpb24gPSAweDAwMDEgPDwgNSwKKysgICAgICAgIGtOYW1lbGVzc1N0cnVjdERlY2xhcmF0aW9u
ID0gMXUgPDwgNXUsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhv
ZC4KKy0gICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDB4MDAwMSA8PCA2LAorKyAgICAgICAg
a0FycmF5TGVuZ3RoTWV0aG9kID0gMXUgPDwgNnUsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGEg
dmVjdG9yIG9yIG1hdHJpeCBjb25zdHJ1Y3RvciB3aG9zZSBhcmd1bWVudHMgYXJlIHNjYWxhcml6
ZWQgYnkgdGhlCisgICAgICAgICAvLyBTSF9TQ0FMQVJJWkVfVkVDX09SX01BVF9DT05TVFJVQ1RP
Ul9BUkdVTUVOVFMgd29ya2Fyb3VuZC4KKy0gICAgICAgIGtTY2FsYXJpemVkVmVjT3JNYXRDb25z
dHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisrICAgICAgICBrU2NhbGFyaXplZFZlY09yTWF0Q29uc3Ry
dWN0b3IgPSAxdSA8PCA3dSwKKyAgICAgfTsKKyAgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVy
KGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKKyAKKy0gICAgYm9vbCBtYXRjaChUSW50ZXJtVW5h
cnkgKm5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkgY29uc3Q7Cisg
CistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVu
dE5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2Rl
ICpwYXJlbnROb2RlKSBjb25zdDsKKyAKKyAgICAgLy8gVXNlIHRoaXMgdmVyc2lvbiBmb3IgY2hl
Y2tpbmcgYmluYXJ5IG5vZGUgbWF0Y2hlcyBpbiBjYXNlIHlvdSdyZSB1c2luZyBmbGFnCisgICAg
IC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFsdWUuCistICAgIGJvb2wg
bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUsIGJvb2wg
aXNMVmFsdWVSZXF1aXJlZEhlcmUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlLCBib29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBj
b25zdDsKKyAKKy0gICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJt
Tm9kZSAqcGFyZW50Tm9kZSk7CistICAgIGJvb2wgbWF0Y2goVEludGVybVRlcm5hcnkgKm5vZGUp
OworLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7CisrICAgIGJvb2wg
bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpIGNv
bnN0OworKyAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdDsKKysgICAg
Ym9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OworIAorICAgcHJpdmF0
ZToKKyAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOworIAorLSAgICBib29sIG1hdGNoSW50
ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpOworKyAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpIGNvbnN0OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5jcHAg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcAor
aW5kZXggNmFiMTNiYS4uZDNlMWZjYSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcAorQEAgLTIyNCw2ICsyMjQsNTAg
QEAgVFZhcmlhYmxlICpEZWNsYXJlVGVtcFZhcmlhYmxlKFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFi
bGUsCisgICAgIHJldHVybiB2YXJpYWJsZTsKKyB9CisgCisrc3RkOjpwYWlyPGNvbnN0IFRWYXJp
YWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gRGVjbGFyZVN0cnVjdHVyZSgKKysgICAgVEludGVy
bUJsb2NrICpyb290LAorKyAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAorKyAgICBURmll
bGRMaXN0ICpmaWVsZExpc3QsCisrICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAorKyAgICBjb25z
dCBUTWVtb3J5UXVhbGlmaWVyICZtZW1vcnlRdWFsaWZpZXIsCisrICAgIHVpbnQzMl90IGFycmF5
U2l6ZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RUeXBlTmFtZSwKKysgICAg
Y29uc3QgSW1tdXRhYmxlU3RyaW5nICpzdHJ1Y3RJbnN0YW5jZU5hbWUpCisreworKyAgICBUU3Ry
dWN0dXJlICpzdHJ1Y3R1cmUgPQorKyAgICAgICAgbmV3IFRTdHJ1Y3R1cmUoc3ltYm9sVGFibGUs
IHN0cnVjdFR5cGVOYW1lLCBmaWVsZExpc3QsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwor
KworKyAgICBhdXRvIG1ha2VTdHJ1Y3R1cmVUeXBlID0gWyZdKGJvb2wgaXNTdHJ1Y3RTcGVjaWZp
ZXIpIHsKKysgICAgICAgIFRUeXBlICpzdHJ1Y3R1cmVUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVy
ZSwgaXNTdHJ1Y3RTcGVjaWZpZXIpOworKyAgICAgICAgc3RydWN0dXJlVHlwZS0+c2V0UXVhbGlm
aWVyKHF1YWxpZmllcik7CisrICAgICAgICBzdHJ1Y3R1cmVUeXBlLT5zZXRNZW1vcnlRdWFsaWZp
ZXIobWVtb3J5UXVhbGlmaWVyKTsKKysgICAgICAgIGlmIChhcnJheVNpemUgPiAwKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHN0cnVjdHVyZVR5cGUtPm1ha2VBcnJheShhcnJheVNpemUpOwor
KyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7CisrICAgIH07CisrCisr
ICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKysKKysgICAgVFZhcmlhYmxlICp0
eXBlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwga0VtcHR5SW1tdXRhYmxlU3RyaW5n
LCBtYWtlU3RydWN0dXJlVHlwZSh0cnVlKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisrICAgIGluc2VydFNlcXVlbmNlLnB1c2hf
YmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue3R5cGVWYXJ9KTsKKysKKysgICAgVFZhcmlhYmxl
ICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisrICAgIGlmIChzdHJ1Y3RJbnN0YW5jZU5hbWUpCisr
ICAgIHsKKysgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwg
KnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwor
KyAgICAgICAgaW5zZXJ0U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
aW5zdGFuY2VWYXJ9KTsKKysgICAgfQorKworKyAgICBzaXplX3QgZmlyc3RGdW5jdGlvbkluZGV4
ID0gRmluZEZpcnN0RnVuY3Rpb25EZWZpbml0aW9uSW5kZXgocm9vdCk7CisrICAgIHJvb3QtPmlu
c2VydENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisrCisr
ICAgIHJldHVybiB7dHlwZVZhciwgaW5zdGFuY2VWYXJ9OworK30KKysKKyBjb25zdCBUVmFyaWFi
bGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURmllbGRMaXN0ICpmaWVs
ZExpc3QsCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybU5vZGVfdXRpbC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVfdXRpbC5oCitpbmRleCAzOWI4NmRkLi5mNWQxYzkzIDEwMDY0NAorLS0tIGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgKK0BAIC00NSw2
ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVUZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpz
eW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
ICppbml0aWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNs
YXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKKytzdGQ6OnBhaXI8Y29uc3QgVFZhcmlhYmxlICos
IGNvbnN0IFRWYXJpYWJsZSAqPiBEZWNsYXJlU3RydWN0dXJlKAorKyAgICBUSW50ZXJtQmxvY2sg
KnJvb3QsCisrICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisrICAgIFRGaWVsZExpc3Qg
KmZpZWxkTGlzdCwKKysgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisrICAgIGNvbnN0IFRNZW1v
cnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKysgICAgdWludDMyX3QgYXJyYXlTaXplLAor
KyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgJnN0cnVjdFR5cGVOYW1lLAorKyAgICBjb25zdCBJ
bW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CisgY29uc3QgVFZhcmlhYmxlICpE
ZWNsYXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0
LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1
aWxkLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ4ODM0NzMKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmNwcAorQEAgLTAsMCArMSwxMDI4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0FzTm9kZS5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisr
I2RlZmluZSBHVUFSRDIoY29uZCwgZmFpbFZhbCkgXAorKyAgICBkbyAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAo
IShjb25kKSkgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgIFwKKysg
ICAgICAgICAgICByZXR1cm4gZmFpbFZhbDsgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgXAorKyAgICB9IHdoaWxlIChmYWxzZSkKKysKKysjZGVmaW5lIEdVQVJEKGNvbmQpIEdV
QVJEMihjb25kLCBudWxscHRyKQorKworK25hbWVzcGFjZSBzaAorK3sKKysKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9vbCBBbGxCaXRzKFQgaGF5
c3RhY2ssIFUgbmVlZGxlKQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFjayAmIG5lZWRsZSkgPT0g
bmVlZGxlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKytBTkdM
RV9JTkxJTkUgYm9vbCBBbnlCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxlKQorK3sKKysgICAgcmV0
dXJuIChoYXlzdGFjayAmIG5lZWRsZSkgIT0gMDsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVz
dWx0ICZvdGhlcikKKysgICAgOiBtQWN0aW9uKG90aGVyLm1BY3Rpb24pLAorKyAgICAgIG1WaXNp
dChvdGhlci5tVmlzaXQpLAorKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisrICAgICAg
bU11bHRpKHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNp
dCkKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6UmVwbGFjZVNpbmdsZSksIG1WaXNpdCh2aXNpdCks
IG1TaW5nbGUoJm5vZGUpCisre30KKysKKytUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorKyAgICA6IG1BY3Rp
b24obm9kZSA/IEFjdGlvbjo6UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisrICAgICAg
bVZpc2l0KG5vZGUgPyB2aXNpdCA6IFZpc2l0Qml0czo6TmVpdGhlciksCisrICAgICAgbVNpbmds
ZShub2RlKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQo
bnVsbHB0cl90KQorKyAgICA6IG1BY3Rpb24oQWN0aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0
czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikKKyt7fQorKworK1RJbnRlcm1SZWJ1aWxkOjpC
YXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisrICAgIDogbUFjdGlvbihBY3Rpb246OkZhaWwp
LCBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwgbVNpbmdsZShudWxscHRyKQorK3t9CisrCisr
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoc3RkOjp2ZWN0b3I8VEludGVy
bU5vZGUgKj4gJiZub2RlcykKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6UmVwbGFjZU11bHRpKSwK
KysgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKysgICAgICBtU2luZ2xlKG51bGxw
dHIpLAorKyAgICAgIG1NdWx0aShzdGQ6Om1vdmUobm9kZXMpKQorK3t9CisrCisrdm9pZCBUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwoQmFzZVJlc3VsdCAmb3RoZXIp
CisreworKyAgICBtQWN0aW9uID0gb3RoZXIubUFjdGlvbjsKKysgICAgbVZpc2l0ICA9IG90aGVy
Lm1WaXNpdDsKKysgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7CisrICAgIG1NdWx0aSAgPSBz
dGQ6Om1vdmUob3RoZXIubU11bHRpKTsKKyt9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1
bHQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1O
b2RlICo+ICYmbm9kZXMpCisreworKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUobm9kZXMuYmVn
aW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworKyAgICBub2Rlcy5lcmFzZShpdCwgbm9kZXMu
ZW5kKCkpOworKyAgICByZXR1cm4gc3RkOjptb3ZlKG5vZGVzKTsKKyt9CisrCisrYm9vbCBUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNGYWlsKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBt
QWN0aW9uID09IEFjdGlvbjo6RmFpbDsKKyt9CisrCisrYm9vbCBUSW50ZXJtUmVidWlsZDo6QmFz
ZVJlc3VsdDo6aXNEcm9wKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlv
bjo6RHJvcDsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0
OjpzaW5nbGUoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIG1TaW5nbGU7CisrfQorKworK2NvbnN0
IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6
bXVsdGkoKSBjb25zdAorK3sKKysgICAgaWYgKG1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVs
dGkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbU11bHRpOworKyAgICB9CisrICAgIHJldHVy
biBudWxscHRyOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIFBy
ZVJlc3VsdCA9IFRJbnRlcm1SZWJ1aWxkOjpQcmVSZXN1bHQ7CisrCisrUHJlUmVzdWx0OjpQcmVS
ZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5v
ZGUsIHZpc2l0KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KFRJbnRlcm1Ob2RlICpub2RlLCBW
aXNpdEJpdHMgdmlzaXQpIDogQmFzZVJlc3VsdChub2RlLCB2aXNpdCkge30KKytQcmVSZXN1bHQ6
OlByZVJlc3VsdChudWxscHRyX3QpIDogQmFzZVJlc3VsdChudWxscHRyKSB7fQorK1ByZVJlc3Vs
dDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChGYWlsKCkpIHt9CisrCisrUHJlUmVzdWx0
OjpQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9Cisr
UHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3RoZXIpIDogQmFzZVJlc3VsdChvdGhl
cikge30KKysKKyt2b2lkIFByZVJlc3VsdDo6b3BlcmF0b3I9KFByZVJlc3VsdCAmJm90aGVyKQor
K3sKKysgICAgbW92ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworKworK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVidWlsZDo6UG9zdFJlc3Vs
dDsKKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZub2RlKSA6IEJhc2VS
ZXN1bHQobm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1
bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBWaXNpdEJpdHM6Ok5laXRo
ZXIpIHt9CisrUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChudWxscHRyX3QpIDogQmFzZVJlc3VsdChu
dWxscHRyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoRmFpbCkgOiBCYXNlUmVzdWx0KEZh
aWwoKSkge30KKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFBvc3RSZXN1bHQgJiZvdGhlcikg
OiBCYXNlUmVzdWx0KG90aGVyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoQmFzZVJlc3Vs
dCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CisrCisrdm9pZCBQb3N0UmVzdWx0Ojpv
cGVyYXRvcj0oUG9zdFJlc3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92ZUFzc2lnbkltcGwob3Ro
ZXIpOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK1RJbnRlcm1SZWJ1aWxk
OjpUSW50ZXJtUmVidWlsZChUQ29tcGlsZXIgJmNvbXBpbGVyLCBib29sIHByZVZpc2l0LCBib29s
IHBvc3RWaXNpdCkKKysgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorKyAgICAgIG1TeW1ib2xU
YWJsZShjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSwKKysgICAgICBtUHJlVmlzaXQocHJlVmlz
aXQpLAorKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQorK3sKKysgICAgQVNTRVJUKHByZVZp
c2l0IHx8IHBvc3RWaXNpdCk7CisrfQorKworK1RJbnRlcm1SZWJ1aWxkOjp+VEludGVybVJlYnVp
bGQoKQorK3sKKysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnZhbHVlKTsKKysgICAgQVNTRVJUKCFt
Tm9kZVN0YWNrLnRhaWwpOworK30KKysKKytjb25zdCBURnVuY3Rpb24gKlRJbnRlcm1SZWJ1aWxk
OjpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0CisreworKyAgICByZXR1cm4gbVBhcmVudEZ1bmM7
CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50Tm9kZShzaXpl
X3Qgb2Zmc2V0KSBjb25zdAorK3sKKysgICAgQVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisrICAg
IGF1dG8gcGFyZW50ID0gKm1Ob2RlU3RhY2sudGFpbDsKKysgICAgd2hpbGUgKG9mZnNldCA+IDAp
CisrICAgIHsKKysgICAgICAgIC0tb2Zmc2V0OworKyAgICAgICAgQVNTRVJUKHBhcmVudC50YWls
KTsKKysgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFpbDsKKysgICAgfQorKyAgICByZXR1cm4g
cGFyZW50LnZhbHVlOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkUm9vdChU
SW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIXJlYnVpbGRJblBsYWNlKHJvb3QpKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIG1Db21w
aWxlci52YWxpZGF0ZUFTVCgmcm9vdCk7CisrfQorKworK2Jvb2wgVEludGVybVJlYnVpbGQ6OnJl
YnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCisreworKyAgICByZXR1cm4gcmVi
dWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1
aWxkSW5QbGFjZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICByZXR1cm4gcmVidWlsZElu
UGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5Q
bGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gcmVidWlsZElu
UGxhY2VJbXBsKG5vZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKytib29s
IFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKKyt7CisrICAg
IGF1dG8gKm5ld05vZGUgPSB0cmF2ZXJzZUFueUFzPE5vZGU+KG5vZGUpOworKyAgICBpZiAoIW5l
d05vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBp
ZiAobmV3Tm9kZSAhPSAmbm9kZSkKKysgICAgeworKyAgICAgICAgKm5vZGUuZ2V0U2VxdWVuY2Uo
KSA9IHN0ZDo6bW92ZSgqbmV3Tm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisrICAgIH0KKysKKysgICAg
cmV0dXJuIHRydWU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnJlYnVpbGQo
VEludGVybU5vZGUgJm5vZGUpCisreworKyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cisr
fQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+CisrTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5v
ZGUpCisreworKyAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJzZUFueShub2RlKSk7CisrICAg
IGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZhaWwgfHwgIXJlc3VsdC5tU2luZ2xlKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgfQorKyAgICByZXR1cm4gYXNO
b2RlPE5vZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+CisrYm9vbCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9k
ZSwgTm9kZSAqJm91dCkKKyt7CisrICAgIFBvc3RSZXN1bHQgcmVzdWx0KHRyYXZlcnNlQW55KG5v
ZGUpKTsKKysgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlvbjo6RmFpbCB8fCByZXN1bHQu
bUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICB9CisrICAgIGlmICghcmVzdWx0Lm1TaW5nbGUpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICB9CisrICAgIG91dCA9IGFzTm9kZTxOb2RlPihyZXN1bHQu
bVNpbmdsZSk7CisrICAgIHJldHVybiBvdXQ7CisrfQorKworK2Jvb2wgVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGVCYXNlICZub2Rl
KQorK3sKKysgICAgYXV0byAqY29uc3QgY2hpbGRyZW4gPSBub2RlLmdldFNlcXVlbmNlKCk7Cisr
ICAgIEFTU0VSVChjaGlsZHJlbik7CisrICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJlbjsK
KysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqY2hpbGQgOiAqY2hpbGRyZW4pCisrICAgIHsKKysg
ICAgICAgIEFTU0VSVChjaGlsZCk7CisrICAgICAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJz
ZUFueSgqY2hpbGQpKTsKKysKKysgICAgICAgIHN3aXRjaCAocmVzdWx0Lm1BY3Rpb24pCisrICAg
ICAgICB7CisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisrICAgICAg
ICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2hfYmFjayhyZXN1bHQubVNpbmdsZSk7CisrICAgICAg
ICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpSZXBsYWNlTXVs
dGk6CisrICAgICAgICAgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5ld05vZGUgOiByZXN1bHQu
bU11bHRpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAobmV3
Tm9kZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdDaGlsZHJlbi5wdXNoX2JhY2sobmV3Tm9kZSk7CisrICAgICAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAg
ICAgY2FzZSBBY3Rpb246OkRyb3A6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgICAgIGNhc2UgQWN0aW9uOjpGYWlsOgorKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgKmNoaWxkcmVuID0gc3RkOjptb3ZlKG5ld0No
aWxkcmVuKTsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisrCisrc3RydWN0IFRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tHdWFyZAorK3sKKysg
ICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gb2xkTm9kZVN0YWNrOworKyAgICBDb25zTGlzdDxU
SW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrOworKyAgICBOb2RlU3RhY2tHdWFyZChDb25zTGlzdDxU
SW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorKyAgICAgICAgOiBvbGROb2RlU3RhY2sobm9kZVN0
YWNrKSwgbm9kZVN0YWNrKG5vZGVTdGFjaykKKysgICAge30KKysgICAgfk5vZGVTdGFja0d1YXJk
KCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KKyt9OworKworK1Bvc3RSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpCisrewor
KyAgICBQcmVSZXN1bHQgcHJlUmVzdWx0ID0gdHJhdmVyc2VQcmUob3JpZ2luYWxOb2RlKTsKKysg
ICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKHByZVJl
c3VsdC5tVmlzaXQgPT0gVmlzaXRCaXRzOjpOZWl0aGVyKTsKKysgICAgICAgIHJldHVybiBzdGQ6
Om1vdmUocHJlUmVzdWx0KTsKKysgICAgfQorKworKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5vZGUg
ICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKysgICAgY29uc3QgVmlzaXRCaXRzIHZpc2l0ICAg
ICAgID0gcHJlUmVzdWx0Lm1WaXNpdDsKKysgICAgY29uc3QgTm9kZVR5cGUgY3Vyck5vZGVUeXBl
ID0gZ2V0Tm9kZVR5cGUoKmN1cnJOb2RlKTsKKysKKysgICAgY3Vyck5vZGUgPSB0cmF2ZXJzZUNo
aWxkcmVuKGN1cnJOb2RlVHlwZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5vZGUsIHZpc2l0KTsKKysg
ICAgaWYgKCFjdXJyTm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAg
fQorKworKyAgICByZXR1cm4gdHJhdmVyc2VQb3N0KGN1cnJOb2RlVHlwZSwgb3JpZ2luYWxOb2Rl
LCAqY3Vyck5vZGUsIHZpc2l0KTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp0
cmF2ZXJzZVByZShUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlKQorK3sKKysgICAgaWYgKCFtUHJl
VmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7b3JpZ2luYWxOb2RlLCBWaXNpdEJpdHM6
OkJvdGh9OworKyAgICB9CisrCisrICAgIE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2sp
OworKyAgICBtTm9kZVN0YWNrID0geyZvcmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9
OworKworKyAgICBjb25zdCBOb2RlVHlwZSBvcmlnaW5hbE5vZGVUeXBlID0gZ2V0Tm9kZVR5cGUo
b3JpZ2luYWxOb2RlKTsKKysKKysgICAgc3dpdGNoIChvcmlnaW5hbE5vZGVUeXBlKQorKyAgICB7
CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAgICAgICAgIEFTU0VSVChm
YWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAgICAgIGNhc2UgTm9kZVR5
cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpDb25zdGFu
dFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25QcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpG
dW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvblByb3Rv
dHlwZVByZSgqb3JpZ2luYWxOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkpOworKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorKyAgICAgICAgICAg
IHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVByZSgqb3JpZ2luYWxOb2RlLmdldEFz
UHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1Vu
YXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKysgICAgICAgICAg
ICByZXR1cm4gdmlzaXRCaW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0JpbmFyeU5vZGUoKSk7
CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAgICAgICAgIHJldHVybiB2
aXNpdFRlcm5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6
emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKysgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OklmRWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRJZkVsc2VQcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpT
d2l0Y2g6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAg
ICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNDYXNlTm9kZSgp
KTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKysgICAgICAg
ICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRB
c0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0
ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQcmUoKm9yaWdpbmFsTm9kZS5n
ZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKAorKyAg
ICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0RlY2xh
cmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0TG9vcFByZSgqb3JpZ2luYWxOb2RlLmdldEFzTG9vcE5vZGUoKSk7Cisr
ICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0
QnJhbmNoUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworKyAgICB9CisrfQor
KworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VDaGlsZHJlbihOb2RlVHlw
ZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZp
c2l0KQorK3sKKysgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkK
KysgICAgeworKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAo
QW55Qml0cyh2aXNpdCwgVmlzaXRCaXRzOjpDaGlsZHJlblJlcXVpcmVzU2FtZSkgJiYgJm9yaWdp
bmFsTm9kZSAhPSAmY3Vyck5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmY3Vyck5vZGU7
CisrICAgIH0KKysKKysgICAgTm9kZVN0YWNrR3VhcmQgZ3VhcmQobU5vZGVTdGFjayk7CisrICAg
IG1Ob2RlU3RhY2sgPSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKysKKysgICAg
c3dpdGNoIChjdXJyTm9kZVR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVu
a25vd246CisrICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKysgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICBy
ZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
RnVuY3Rpb25Qcm90b3R5cGU6CisrICAgICAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKysgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKysgICAgICAgICAgICBy
ZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6CisrICAgICAg
ICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNVbmFyeU5v
ZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCaW5hcnk6CisrICAgICAgICAgICAgcmV0
dXJuIHRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHRy
YXZlcnNlVGVybmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVy
c2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7CisrICAgICAg
ICBjYXNlIE5vZGVUeXBlOjpJZkVsc2U6CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlSWZF
bHNlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKysgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlN3aXRjaDoKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VTd2l0Y2hDaGls
ZHJlbigqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1cnJO
b2RlLmdldEFzQ2FzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvbkRl
ZmluaXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9u
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUFn
Z3JlZ2F0ZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNh
c2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hp
bGRyZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorKyAgICAgICAgICAgICAgICAqY3Vy
ck5vZGUuZ2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VE
ZWNsYXJhdGlvbkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysg
ICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNl
TG9vcENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0xvb3BOb2RlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6QnJhbmNoOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxk
cmVuKCpjdXJyTm9kZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisrICAgIH0KKyt9CisrCisrUG9zdFJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VQb3N0KE5vZGVUeXBlIGN1cnJOb2RlVHlwZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEludGVybU5v
ZGUgJm9yaWdpbmFsTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCisreworKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAoIUFu
eUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9zdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBj
dXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAoQW55Qml0cyh2aXNpdCwgVmlzaXRCaXRzOjpQ
b3N0UmVxdWlyZXNTYW1lKSAmJiAmb3JpZ2luYWxOb2RlICE9ICZjdXJyTm9kZSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworKyAgICB9CisrCisrICAgIE5vZGVTdGFja0d1YXJk
IGd1YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwgJmd1YXJk
Lm9sZE5vZGVTdGFja307CisrCisrICAgIHN3aXRjaCAoY3Vyck5vZGVUeXBlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0KCpjdXJyTm9kZS5n
ZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpDb25zdGFudFVuaW9u
OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25Qb3N0KCpjdXJyTm9kZS5n
ZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvblBy
b3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3Qo
KmN1cnJOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorKyAgICAgICAgICAgIHJldHVybiB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGly
ZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6CisrICAgICAgICAgICAg
cmV0dXJuIHZpc2l0VW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKysgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRCaW5h
cnlQb3N0KCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpUZXJuYXJ5OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJy
Tm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenps
ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6emxlUG9zdCgqY3Vyck5vZGUuZ2V0QXNT
d2l6emxlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKysgICAgICAg
ICAgICByZXR1cm4gdmlzaXRJZkVsc2VQb3N0KCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7
CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAgICAgICAgcmV0dXJuIHZp
c2l0U3dpdGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2Fz
ZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUG9zdCgqY3Vy
ck5vZGUuZ2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9u
RGVmaW5pdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Q
b3N0KCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQ
b3N0KCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUG9zdCgqY3Vyck5vZGUuZ2V0
QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uUG9zdCgKKysgICAgICAgICAgICAgICAgKmN1cnJOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25Qb3N0KCpjdXJyTm9kZS5nZXRB
c0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBvc3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7
CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAgICAgICAgcmV0dXJuIHZp
c2l0QnJhbmNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworKyAgICB9CisrfQor
KworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCisr
eworKyAgICBpZiAodHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiAmbm9kZTsKKysgICAgfQorKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9
CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJsb2NrQ2hpbGRyZW4o
VEludGVybUJsb2NrICZub2RlKQorK3sKKysgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNo
aWxkcmVuKG5vZGUpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gJm5vZGU7CisrICAgIH0KKysg
ICAgcmV0dXJuIG51bGxwdHI7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkKKyt7
CisrICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihub2RlKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuICZub2RlOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOworK30K
KysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlU3dpenpsZUNoaWxkcmVu
KFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5v
ZGUuZ2V0T3BlcmFuZCgpOworKyAgICBBU1NFUlQob3BlcmFuZCk7CisrCisrICAgIGF1dG8gKm5l
d09wZXJhbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworKyAgICBH
VUFSRChuZXdPcGVyYW5kKTsKKysKKysgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2Rl
LmdldFN3aXp6bGVPZmZzZXRzKCkpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9
CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVu
KFRJbnRlcm1CaW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBsZWZ0ID0gbm9kZS5n
ZXRMZWZ0KCk7CisrICAgIEFTU0VSVChsZWZ0KTsKKysgICAgYXV0byAqY29uc3QgcmlnaHQgPSBu
b2RlLmdldFJpZ2h0KCk7CisrICAgIEFTU0VSVChyaWdodCk7CisrCisrICAgIGF1dG8gKmNvbnN0
IG5ld0xlZnQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmxlZnQpOworKyAgICBHVUFS
RChuZXdMZWZ0KTsKKysgICAgYXV0byAqY29uc3QgbmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJ
bnRlcm1UeXBlZD4oKnJpZ2h0KTsKKysgICAgR1VBUkQobmV3UmlnaHQpOworKworKyAgICBpZiAo
bmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJpZ2h0KQorKyAgICB7CisrICAgICAgICBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBzd2l0Y2ggKG9wKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0LT5nZXRUeXBlKCku
Z2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAobmV3TGVmdC0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBv
cCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorKyAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUJp
bmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRTaGFkZXJW
ZXJzaW9uKCkpOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9w
LCBuZXdMZWZ0LCBuZXdSaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOworK30K
KysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihU
SW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9kZS5n
ZXRPcGVyYW5kKCk7CisrICAgIEFTU0VSVChvcGVyYW5kKTsKKysKKysgICAgYXV0byAqY29uc3Qg
bmV3T3BlcmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisrICAg
IEdVQVJEKG5ld09wZXJhbmQpOworKworKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1VbmFyeShub2RlLmdldE9wKCksIG5l
d09wZXJhbmQsIG5vZGUuZ2V0RnVuY3Rpb24oKSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZu
b2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVGVybmFy
eUNoaWxkcmVuKFRJbnRlcm1UZXJuYXJ5ICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgY29u
ZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrICAgIEFTU0VSVChjb25kKTsKKysgICAgYXV0byAq
Y29uc3QgdHJ1ZV8gPSBub2RlLmdldFRydWVFeHByZXNzaW9uKCk7CisrICAgIEFTU0VSVCh0cnVl
Xyk7CisrICAgIGF1dG8gKmNvbnN0IGZhbHNlXyA9IG5vZGUuZ2V0RmFsc2VFeHByZXNzaW9uKCk7
CisrICAgIEFTU0VSVChmYWxzZV8pOworKworKyAgICBhdXRvICpjb25zdCBuZXdDb25kID0gdHJh
dmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpjb25kKTsKKysgICAgR1VBUkQobmV3Q29uZCk7Cisr
ICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnRy
dWVfKTsKKysgICAgR1VBUkQobmV3VHJ1ZSk7CisrICAgIGF1dG8gKmNvbnN0IG5ld0ZhbHNlID0g
dHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpmYWxzZV8pOworKyAgICBHVUFSRChuZXdGYWxz
ZSk7CisrCisrICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3VHJ1ZSAhPSB0cnVlXyB8fCBu
ZXdGYWxzZSAhPSBmYWxzZV8pCisrICAgIHsKKysgICAgICAgIHJldHVybiBuZXcgVEludGVybVRl
cm5hcnkobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworKyAgICB9CisrCisrICAgIHJldHVy
biAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUlm
RWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBj
b25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysgICAgQVNTRVJUKGNvbmQpOworKyAgICBhdXRv
ICpjb25zdCB0cnVlXyAgPSBub2RlLmdldFRydWVCbG9jaygpOworKyAgICBhdXRvICpjb25zdCBm
YWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3Q29u
ZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7CisrICAgIEdVQVJEKG5ld0Nv
bmQpOworKyAgICBUSW50ZXJtQmxvY2sgKm5ld1RydWUgPSBudWxscHRyOworKyAgICBpZiAodHJ1
ZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKnRydWVfLCBuZXdUcnVl
KSk7CisrICAgIH0KKysgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisrICAg
IGlmIChmYWxzZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNl
XywgbmV3RmFsc2UpKTsKKysgICAgfQorKworKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5l
d1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworKyAg
ICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZVN3aXRjaENoaWxkcmVuKFRJbnRlcm1Td2l0Y2ggJm5vZGUpCisrewor
KyAgICBhdXRvICpjb25zdCBpbml0ID0gbm9kZS5nZXRJbml0KCk7CisrICAgIEFTU0VSVChpbml0
KTsKKysgICAgYXV0byAqY29uc3Qgc3RtdHMgPSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKysg
ICAgQVNTRVJUKHN0bXRzKTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNl
QW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7CisrICAgIEdVQVJEKG5ld0luaXQpOworKyAgICBh
dXRvICpjb25zdCBuZXdTdG10cyA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqc3RtdHMp
OworKyAgICBHVUFSRChuZXdTdG10cyk7CisrCisrICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwg
bmV3U3RtdHMgIT0gc3RtdHMpCisrICAgIHsKKysgICAgICAgIHJldHVybiBuZXcgVEludGVybVN3
aXRjaChuZXdJbml0LCBuZXdTdG10cyk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOwor
K30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVu
KFRJbnRlcm1DYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0
Q29uZGl0aW9uKCk7CisrCisrICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IG51bGxwdHI7Cisr
ICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpjb25k
LCBuZXdDb25kKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0NvbmQgIT0gY29uZCkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQ2FzZShuZXdDb25kKTsKKysgICAgfQorKwor
KyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbihUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKQorK3sKKysgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRl
ZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisrICAgIG1QYXJlbnRGdW5jID0gbm9kZS5nZXRG
dW5jdGlvbigpOworKyAgICBzdHJ1Y3QgT25FeGl0CisrICAgIHsKKysgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAqJnBhcmVudEZ1bmM7CisrICAgICAgICBPbkV4aXQoY29uc3QgVEZ1bmN0aW9uICom
cGFyZW50RnVuYykgOiBwYXJlbnRGdW5jKHBhcmVudEZ1bmMpIHt9CisrICAgICAgICB+T25FeGl0
KCkgeyBwYXJlbnRGdW5jID0gbnVsbHB0cjsgfQorKyAgICB9IG9uRXhpdChtUGFyZW50RnVuYyk7
CisrCisrICAgIGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgp
OworKyAgICBBU1NFUlQocHJvdG8pOworKyAgICBhdXRvICpjb25zdCBib2R5ID0gbm9kZS5nZXRC
b2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3UHJvdG8g
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZT4oKnByb3RvKTsKKysgICAg
R1VBUkQobmV3UHJvdG8pOworKyAgICBhdXRvICpjb25zdCBuZXdCb2R5ID0gdHJhdmVyc2VBbnlB
czxUSW50ZXJtQmxvY2s+KCpib2R5KTsKKysgICAgR1VBUkQobmV3Qm9keSk7CisrCisrICAgIGlm
IChuZXdQcm90byAhPSBwcm90byB8fCBuZXdCb2R5ICE9IGJvZHkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVElu
dGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigK
KysgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKQorK3sKKysgICAg
YXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2woKTsKKysgICAgQVNTRVJUKHN5bWJv
bCk7CisrCisrICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRyYXZlcnNlQW55QXM8VEludGVy
bVN5bWJvbD4oKnN5bWJvbCk7CisrICAgIEdVQVJEKG5ld1N5bWJvbCk7CisrCisrICAgIGlmIChu
ZXdTeW1ib2wgIT0gc3ltYm9sKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1H
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihuZXdTeW1ib2wsIG5vZGUuaXNQcmVjaXNlKCksIG5v
ZGUuZ2V0TGluZSgpKTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJ
bnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxv
b3AgJm5vZGUpCisreworKyAgICBjb25zdCBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLmdldFR5
cGUoKTsKKysKKysgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgpOworKyAgICBh
dXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysgICAgYXV0byAqY29uc3Qg
ZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICBhdXRvICpjb25zdCBib2R5ID0gbm9k
ZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysjaWYgZGVmaW5lZChBTkdMRV9F
TkFCTEVfQVNTRVJUUykKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysgICAgeworKyAgICAgICAg
Y2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAg
Y2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisrICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxv
b3BEb1doaWxlOgorKyAgICAgICAgICAgIEFTU0VSVChjb25kKTsKKysgICAgICAgICAgICBBU1NF
UlQoIWluaXQgJiYgIWV4cHIpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrI2VuZGlm
CisrCisrICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9j
az4oKmJvZHkpOworKyAgICBHVUFSRChuZXdCb2R5KTsKKysgICAgVEludGVybU5vZGUgKm5ld0lu
aXQgPSBudWxscHRyOworKyAgICBpZiAoaW5pdCkKKysgICAgeworKyAgICAgICAgR1VBUkQodHJh
dmVyc2VBbnlBcygqaW5pdCwgbmV3SW5pdCkpOworKyAgICB9CisrICAgIFRJbnRlcm1UeXBlZCAq
bmV3Q29uZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICBHVUFS
RCh0cmF2ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0KKysgICAgVEludGVybVR5
cGVkICpuZXdFeHByID0gbnVsbHB0cjsKKysgICAgaWYgKGV4cHIpCisrICAgIHsKKysgICAgICAg
IEdVQVJEKHRyYXZlcnNlQW55QXMoKmV4cHIsIG5ld0V4cHIpKTsKKysgICAgfQorKworKyAgICBp
ZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld0NvbmQgIT0gY29uZCB8fCBuZXdFeHByICE9IGV4cHIg
fHwgbmV3Qm9keSAhPSBib2R5KQorKyAgICB7CisrICAgICAgICBzd2l0Y2ggKGxvb3BUeXBlKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcEZvcjoKKysgICAg
ICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorKyAgICAgICAgICAgIGNhc2Ug
VExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgICAgIEdVQVJEKG5ld0NvbmQg
JiYgbmV3Qm9keSk7CisrICAgICAgICAgICAgICAgIEdVQVJEKCFuZXdJbml0ICYmICFuZXdFeHBy
KTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4g
bmV3IFRJbnRlcm1Mb29wKGxvb3BUeXBlLCBuZXdJbml0LCBuZXdDb25kLCBuZXdFeHByLCBuZXdC
b2R5KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJbnRlcm1Ob2Rl
ICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbihUSW50ZXJtQnJhbmNoICZu
b2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOwor
KworKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworKyAgICBpZiAoZXhwcikK
KysgICAgeworKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpleHBy
LCBuZXdFeHByKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5l
d0V4cHIpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9s
UHJlKFRJbnRlcm1TeW1ib2wgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFu
dFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtu
b2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6
OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2Rl
KQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVS
ZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKFRJbnRl
cm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRV
bmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0
Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCaW5h
cnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5h
cnlQcmUoVEludGVybVRlcm5hcnkgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0
Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6
emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0SWZF
bHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0
Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l0
Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkKKyt7CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQ
cmUoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUHJlKFRJ
bnRlcm1Mb29wICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNoUHJlKFRJbnRl
cm1CcmFuY2ggJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07
CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1By
ZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRBZ2dyZWdhdGVQ
cmUoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0
aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQorK3sKKysg
ICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25QcmUoCisrICAgIFRJ
bnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKKyt7CisrICAgIHJldHVybiB7
bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5
bWJvbCAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoVEludGVybVByZXBy
b2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5v
ZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRUZXJuYXJ5
UG9zdChUSW50ZXJtVGVybmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6
emxlICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0SWZFbHNlUG9zdChUSW50ZXJtSWZFbHNlICZub2RlKQorK3sKKysg
ICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7Cisr
fQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVBvc3QoVEludGVybUNh
c2UgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdChUSW50ZXJtTG9vcCAmbm9kZSkKKyt7CisrICAgIHJl
dHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEJyYW5j
aFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJt
RGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1Bvc3QoVEludGVybUJsb2NrICZub2RlKQor
K3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6
OnZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKQorK3sKKysgICAgcmV0
dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rp
b25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQorK3sKKysg
ICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlm
aWVyRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrfSAg
Ly8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4z
MDk3ZTQwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtUmVidWlsZC5oCitAQCAtMCwwICsxLDMyOCBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hf
CisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTVJFQlVJTERfSF8K
KysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVy
c2UuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWls
ZCBub2Rlcy4KKysvLyBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIGRlcml2ZWQgd2l0aCBv
dmVycmlkZGVuIHZpc2l0WFhYIGZ1bmN0aW9ucy4KKysvLworKy8vIEVhY2ggdmlzaXRYWFggZnVu
Y3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlzaXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhl
IHZpc2l0b3IgY2FsbGVkCisrLy8gZXhhY3RseSBvbmNlLCByZWdhcmRsZXNzIG9mIChwcmVWaXNp
dCkgb3IgKHBvc3RWaXNpdCkgdmFsdWVzLgorKworKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24g
dGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZlcyBhcyBmb2xsb3dzOgorKy8vICAgICog
SWYgKHByZVZpc2l0KToKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlzaXRlZCBiZWZvcmUgY2hp
bGRyZW4gYXJlIHRyYXZlcnNlZC4KKysvLyAgICAgIC0gVGhlIHJldHVybmVkIHZhbHVlIGlzIHVz
ZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5IGJl
IHRoZSBzYW1lCisrLy8gICAgICAgIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorKy8vICAgICAgLSBJ
ZiBtdWx0aXBsZSBub2RlcyBhcmUgcmV0dXJuZWQsIGNoaWxkcmVuIGFuZCBwb3N0IHZpc2l0cyBv
ZiB0aGUgcmV0dXJuZWQgbm9kZXMgYXJlIG5vdAorKy8vICAgICAgICBwcmVmb3JtZWQsIGV2ZW4g
aWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKysvLyAgICAqIElmIChjaGlsZFZpc2l0
KQorKy8vICAgICAgLSBJZiBhbnkgbmV3IGNoaWxkcmVuIGFyZSByZXR1cm5lZCwgdGhlIG5vZGUg
aXMgYXV0b21hdGljYWxseSByZWJ1aWx0IHdpdGggdGhlIG5ldyBjaGlsZHJlbgorKy8vICAgICAg
ICBiZWZvcmUgcG9zdCB2aXNpdC4KKysvLyAgICAgIC0gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9m
IHRoZSBub2RlLCBudWxsIGNoaWxkcmVuIG1heSBiZSBkaXNjYXJkZWQuCisrLy8gICAgICAtIEls
bC10eXBlZCBjaGlsZHJlbiBjYXVzZSByZWJ1aWxkIGVycm9ycy4gSWxsLXR5cGVkIG1lYW5zIHRo
ZSBub2RlIHRvIGF1dG9tYXRpY2FsbHkgcmVidWlsZAorKy8vICAgICAgICBjYW5ub3QgYWNjZXB0
IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRzIGNvbnN0cnVjdG9yLgor
Ky8vICAgICAgLSBPbmx5IGluc3RhbmNlcyBvZiBUSW50ZXJtQWdncmVnYXRlQmFzZSBjYW4gYWNj
ZXB0IE11bHRpIHJlc3VsdHMgZm9yIGFueSBvZiBpdHMgY2hpbGRyZW4uCisrLy8gICAgICAgIElm
IHN1cHBsaWVkLCB0aGUgbm9kZXMgYXJlIHNwbGljZWQgY2hpbGRyZW4gYXQgdGhlIHNwb3Qgb2Yg
dGhlIG9yaWdpbmFsIGNoaWxkLgorKy8vICAgICogSWYgKHBvc3RWaXNpdCkKKysvLyAgICAgIC0g
VGhlIG5vZGUgaXMgdmlzaXRlZCBhZnRlciBhbnkgY2hpbGRyZW4gYXJlIHRyYXZlcnNlZC4KKysv
LyAgICAgIC0gT25seSBhZnRlciBzdWNoIGEgcmVidWlsZCAob3IgbGFjayB0aGVyZW9mKSwgdGhl
IHBvc3QtdmlzaXQgaXMgcGVyZm9ybWVkLgorKy8vCisrLy8gTm9kZXMgaW4gdmlzaXQgZnVuY3Rp
b25zIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIGluIHBsYWNlLCBpbmNsdWRpbmcgVEludGVy
bUFnZ3JlZ2F0ZUJhc2UKKysvLyBjaGlsZCBzZXF1ZW5jZXMuCisrLy8KKysvLyBUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIHRoZSB2aXNpdFhYWCBmdW5jdGlvbnMgc3VwcG9ydCBm
dWxsIHByZSBhbmQgcG9zdCB0cmF2ZXJzYWwKKysvLyB3aXRob3V0IG1vZGlmeWluZyB0aGUgdmlz
aXRlZCBub2Rlcy4KKysvLworK2NsYXNzIFRJbnRlcm1SZWJ1aWxkIDogYW5nbGU6Ok5vbkNvcHlh
YmxlCisreworKworKyAgICBlbnVtIGNsYXNzIEFjdGlvbgorKyAgICB7CisrICAgICAgICBSZXBs
YWNlU2luZ2xlLAorKyAgICAgICAgUmVwbGFjZU11bHRpLAorKyAgICAgICAgRHJvcCwKKysgICAg
ICAgIEZhaWwsCisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIHN0cnVjdCBGYWlsCisrICAg
IHt9OworKworKyAgICBlbnVtIFZpc2l0Qml0cyA6IHNpemVfdAorKyAgICB7CisrICAgICAgICAv
LyBObyBiaXRzIGFyZSBzZXQuCisrICAgICAgICBFbXB0eSA9IDB1LAorKworKyAgICAgICAgLy8g
QWxsb3cgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgorKyAgICAgICAgQ2hpbGRy
ZW4gPSAxdSA8PCAwdSwKKysKKysgICAgICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJu
ZWQgbm9kZS4KKysgICAgICAgIFBvc3QgPSAxdSA8PCAxdSwKKysKKysgICAgICAgIC8vIElmIChD
aGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlmIHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1l
IGFzIHRoZSBvcmlnaW5hbCBub2RlLgorKyAgICAgICAgQ2hpbGRyZW5SZXF1aXJlc1NhbWUgPSAx
dSA8PCAydSwKKysKKysgICAgICAgIC8vIElmIChQb3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhl
IHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIG5vZGUuCisrICAgICAg
ICBQb3N0UmVxdWlyZXNTYW1lID0gMXUgPDwgM3UsCisrCisrICAgICAgICBSZXF1aXJlU2FtZSAg
PSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1aXJlc1NhbWUsCisrICAgICAgICBOZWl0
aGVyICAgICAgPSBFbXB0eSwKKysgICAgICAgIEJvdGggICAgICAgICA9IENoaWxkcmVuIHwgUG9z
dCwKKysgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBSZXF1aXJlU2FtZSwKKysgICAgfTsK
KysKKysgIHByaXZhdGU6CisrICAgIHN0cnVjdCBOb2RlU3RhY2tHdWFyZDsKKysKKysgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIHN0cnVjdCBDb25zTGlzdAorKyAgICB7CisrICAgICAg
ICBUIHZhbHVlOworKyAgICAgICAgQ29uc0xpc3Q8VD4gKnRhaWw7CisrICAgIH07CisrCisrICAg
IGNsYXNzIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgQmFzZVJlc3VsdChjb25zdCBCYXNl
UmVzdWx0ICYpID0gZGVsZXRlOworKyAgICAgICAgQmFzZVJlc3VsdCAmb3BlcmF0b3I9KGNvbnN0
IEJhc2VSZXN1bHQgJikgPSBkZWxldGU7CisrCisrICAgICAgcHVibGljOgorKyAgICAgICAgQmFz
ZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpID0gZGVmYXVsdDsKKysgICAgICAgIEJhc2VSZXN1
bHQoQmFzZVJlc3VsdCAmb3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1vdmUgY29uc3RydWN0b3Ig
aW1wbHMKKysgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2
aXNpdCk7CisrICAgICAgICBCYXNlUmVzdWx0KFRJbnRlcm1Ob2RlICpub2RlLCBWaXNpdEJpdHMg
dmlzaXQpOworKyAgICAgICAgQmFzZVJlc3VsdChudWxscHRyX3QpOworKyAgICAgICAgQmFzZVJl
c3VsdChGYWlsKTsKKysgICAgICAgIEJhc2VSZXN1bHQoc3RkOjp2ZWN0b3I8VEludGVybU5vZGUg
Kj4gJiZub2Rlcyk7CisrCisrICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQg
Jm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworKworKyAgICAgICAg
c3RhdGljIEJhc2VSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2Rl
cyk7CisrCisrICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KKysgICAgICAgIHN0YXRp
YyBCYXNlUmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBub2RlczsKKysg
ICAgICAgICAgICBmb3IgKEl0ZXIgbm9kZXNDdXJyID0gbm9kZXNCZWdpbjsgbm9kZXNDdXJyICE9
IG5vZGVzRW5kOyArK25vZGVzQ3VycikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IG5vZGVzLnB1c2hfYmFjaygqbm9kZXNDdXJyKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7CisrICAgICAgICB9CisrCisrICAgICAgICBib29s
IGlzRmFpbCgpIGNvbnN0OworKyAgICAgICAgYm9vbCBpc0Ryb3AoKSBjb25zdDsKKysgICAgICAg
IFRJbnRlcm1Ob2RlICpzaW5nbGUoKSBjb25zdDsKKysgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PFRJbnRlcm1Ob2RlICo+ICptdWx0aSgpIGNvbnN0OworKworKyAgICAgIHB1YmxpYzoKKysgICAg
ICAgIEFjdGlvbiBtQWN0aW9uOworKyAgICAgICAgVmlzaXRCaXRzIG1WaXNpdDsKKysgICAgICAg
IFRJbnRlcm1Ob2RlICptU2luZ2xlOworKyAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUg
Kj4gbU11bHRpOworKyAgICB9OworKworKyAgcHVibGljOgorKyAgICBjbGFzcyBQcmVSZXN1bHQg
OiBwcml2YXRlIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgZnJpZW5kIGNsYXNzIFRJbnRl
cm1SZWJ1aWxkOworKworKyAgICAgIHB1YmxpYzoKKysgICAgICAgIFByZVJlc3VsdChQcmVSZXN1
bHQgJiZvdGhlcik7CisrICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKysgICAgICAgIFByZVJlc3Vs
dChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hl
blNhbWUpOworKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAvLyBVc2VkIHRvIGRyb3Ag
YSBub2RlLgorKyAgICAgICAgUHJlUmVzdWx0KEZhaWwpOyAgICAgICAvLyBVc2VkIHRvIHNpZ25h
bCBmYWlsdXJlLgorKworKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJlUmVzdWx0ICYmb3RoZXIp
OworKworKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiAmJm5vZGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVz
dWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShJ
dGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKG5vZGVzQmVnaW4sIG5vZGVzRW5kKTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRHJvcDsKKysgICAgICAgIHVzaW5n
IEJhc2VSZXN1bHQ6OmlzRmFpbDsKKysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRpOwor
KyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6c2luZ2xlOworKworKyAgICAgIHByaXZhdGU6Cisr
ICAgICAgICBQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysgICAgfTsKKysKKysgICAg
Y2xhc3MgUG9zdFJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorKyAgICB7CisrICAgICAgICBm
cmllbmQgY2xhc3MgVEludGVybVJlYnVpbGQ7CisrCisrICAgICAgcHVibGljOgorKyAgICAgICAg
UG9zdFJlc3VsdChQb3N0UmVzdWx0ICYmb3RoZXIpOworKyAgICAgICAgUG9zdFJlc3VsdChUSW50
ZXJtTm9kZSAmbm9kZSk7CisrICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICpub2RlKTsK
KysgICAgICAgIFBvc3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUK
KysgICAgICAgIFBvc3RSZXN1bHQoRmFpbCk7ICAgICAgIC8vIFVzZWQgdG8gc2lnbmFsIGZhaWx1
cmUuCisrCisrICAgICAgICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworKwor
KyAgICAgICAgc3RhdGljIFBvc3RSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVybU5vZGUg
Kj4gJiZub2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6
TXVsdGkoc3RkOjptb3ZlKG5vZGVzKSk7CisrICAgICAgICB9CisrCisrICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgSXRlcj4KKysgICAgICAgIHN0YXRpYyBQb3N0UmVzdWx0IE11bHRpKEl0ZXIg
bm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOworKyAgICAgICAgfQor
KworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworKyAgICAgICAgdXNpbmcgQmFz
ZVJlc3VsdDo6aXNGYWlsOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6bXVsdGk7CisrICAg
ICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisrCisrICAgICAgcHJpdmF0ZToKKysgICAg
ICAgIFBvc3RSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysgICAgfTsKKysKKysgIHB1Ymxp
YzoKKysgICAgVEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNp
dCwgYm9vbCBwb3N0VmlzaXQpOworKworKyAgICB2aXJ0dWFsIH5USW50ZXJtUmVidWlsZCgpOwor
KworKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0aGUgcHJvdmlkZWQgcm9v
dC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhlCisrICAgIC8vIHJvb3Qs
IHRoZSByb290IG5vZGUncyBjaGlsZHJlbiBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5vZGUgaW5z
dGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlCisrICAgIC8vIG9jY3VycmVkLgorKyAgICBB
TkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KTsKKysK
KysgIHByb3RlY3RlZDoKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1ib2xQcmUoVElu
dGVybVN5bWJvbCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0Q29uc3RhbnRV
bmlvblByZShUSW50ZXJtQ29uc3RhbnRVbmlvbiAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZu
b2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQ
cmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJl
UmVzdWx0IHZpc2l0VW5hcnlQcmUoVEludGVybVVuYXJ5ICZub2RlKTsKKysgICAgdmlydHVhbCBQ
cmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSk7CisrICAgIHZpcnR1
YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0U3dpenpsZVByZShUSW50ZXJtU3dpenpsZSAmbm9kZSk7
CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5v
ZGUpOworKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNo
ICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDYXNlUHJlKFRJbnRlcm1DYXNl
ICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRMb29wUHJlKFRJbnRlcm1Mb29w
ICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJy
YW5jaCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUo
VEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRC
bG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNp
dEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVS
ZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb25QcmUoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKysK
KysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChUSW50ZXJtU3ltYm9sICZu
b2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVElu
dGVybUNvbnN0YW50VW5pb24gJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRG
dW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKysg
ICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50
ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0
IHZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9zdFJl
c3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7CisrICAgIHZpcnR1YWwg
UG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKTsKKysgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6bGUgJm5vZGUp
OworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2Ug
Jm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1T
d2l0Y2ggJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRDYXNlUG9zdChUSW50
ZXJtQ2FzZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJ
bnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0QnJhbmNoUG9z
dChUSW50ZXJtQnJhbmNoICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0RGVj
bGFyYXRpb25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9z
dFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICB2aXJ0dWFs
IFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOwor
KyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0KFRJbnRl
cm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlz
aXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uICZub2RlKTsKKysKKysgICAgLy8gQ2FuIGJlIHVzZWQgdG8gcmVidWlsZCBhIHNw
ZWNpZmljIG5vZGUgZHVyaW5nIGEgdHJhdmVyc2FsLiBVc2VmdWwgZm9yIGZpbmUgY29udHJvbCBv
ZgorKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxkcmVuLgorKyAgICBBTkdMRV9OT19E
SVNDQVJEIFBvc3RSZXN1bHQgcmVidWlsZChUSW50ZXJtTm9kZSAmbm9kZSk7CisrCisrICAgIC8v
IFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdvdWxk
IGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAgICAvLyBiZWNvbWUgdGhh
dCBvZiB0aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3Vy
cmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUFn
Z3JlZ2F0ZSAmbm9kZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGlu
IHBsYWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBj
aGlsZHJlbgorKyAgICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0
dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJv
b2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKysKKysgICAgLy8gUmVidWls
ZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0
dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisrICAgIC8vIGJlY29tZSB0aGF0IG9mIHRo
ZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUgb2NjdXJyZWQuCisr
ICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRp
b24gJm5vZGUpOworKworKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVsb3cgYSBmdW5jdGlv
biBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9uIHRoYXQgZW5jbG9z
ZXMKKysgICAgLy8gdGhlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGUuIChUaGlzIHJldHVybnMgbnVs
bCBpZiBhdCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuKQorKyAgICBjb25zdCBURnVuY3Rp
b24gKmdldFBhcmVudEZ1bmN0aW9uKCkgY29uc3Q7CisrCisrICAgIFRJbnRlcm1Ob2RlICpnZXRQ
YXJlbnROb2RlKHNpemVfdCBvZmZzZXQgPSAwKSBjb25zdDsKKysKKysgIHByaXZhdGU6CisrICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVi
dWlsZEluUGxhY2VJbXBsKE5vZGUgJm5vZGUpOworKworKyAgICBQb3N0UmVzdWx0IHRyYXZlcnNl
QW55KFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+
CisrICAgIE5vZGUgKnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpOworKworKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKysgICAgYm9vbCB0cmF2ZXJzZUFueUFzKFRJbnRlcm1O
b2RlICZub2RlLCBOb2RlIComb3V0KTsKKysKKysgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJ
bnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VDaGls
ZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysgICAgUG9zdFJlc3VsdCB0
cmF2ZXJzZVBvc3QoTm9kZVR5cGUgbm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysKKysgICAgYm9vbCB0cmF2ZXJzZUFnZ3JlZ2F0ZUJh
c2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9kZSk7CisrCisrICAgIFRJbnRlcm1O
b2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKysgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSAmbm9kZSk7Cisr
ICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbihUSW50ZXJtVGVybmFyeSAm
bm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJt
U3dpenpsZSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVu
KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VTd2l0Y2hD
aGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNl
Q2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZl
cnNlTG9vcENoaWxkcmVuKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5jaCAmbm9kZSk7CisrICAgIFRJbnRlcm1O
b2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4oVEludGVybURlY2xhcmF0aW9uICZub2Rl
KTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmxvY2tDaGlsZHJlbihUSW50ZXJtQmxvY2sg
Jm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJlbihUSW50
ZXJtQWdncmVnYXRlICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlRnVuY3Rpb25E
ZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisrICAg
IFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uQ2hpbGRyZW4o
CisrICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpOworKwor
KyAgcHJvdGVjdGVkOgorKyAgICBUQ29tcGlsZXIgJm1Db21waWxlcjsKKysgICAgVFN5bWJvbFRh
YmxlICZtU3ltYm9sVGFibGU7CisrICAgIGNvbnN0IFRGdW5jdGlvbiAqbVBhcmVudEZ1bmMgPSBu
dWxscHRyOworKyAgICBHZXROb2RlVHlwZSBnZXROb2RlVHlwZTsKKysKKysgIHByaXZhdGU6Cisr
ICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG1Ob2RlU3RhY2t7bnVsbHB0ciwgbnVsbHB0cn07
CisrICAgIGJvb2wgbVByZVZpc2l0OworKyAgICBib29sIG1Qb3N0VmlzaXQ7CisrfTsKKysKKyt9
ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJF
RVVUSUxfSU5URVJNUkVCVUlMRF9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL05vZGVUeXBlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hNTll
NWFmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvTm9kZVR5cGUuaAorQEAgLTAsMCArMSwxNTUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZu
ZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8KKysjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysKKytuYW1lc3Bh
Y2Ugc2gKKyt7CisrCisrZW51bSBjbGFzcyBOb2RlVHlwZQorK3sKKysgICAgVW5rbm93biwKKysg
ICAgU3ltYm9sLAorKyAgICBDb25zdGFudFVuaW9uLAorKyAgICBGdW5jdGlvblByb3RvdHlwZSwK
KysgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorKyAgICBVbmFyeSwKKysgICAgQmluYXJ5LAor
KyAgICBUZXJuYXJ5LAorKyAgICBTd2l6emxlLAorKyAgICBJZkVsc2UsCisrICAgIFN3aXRjaCwK
KysgICAgQ2FzZSwKKysgICAgRnVuY3Rpb25EZWZpbml0aW9uLAorKyAgICBBZ2dyZWdhdGUsCisr
ICAgIEJsb2NrLAorKyAgICBHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiwKKysgICAgRGVjbGFy
YXRpb24sCisrICAgIExvb3AsCisrICAgIEJyYW5jaCwKKyt9OworKworKy8vIFRoaXMgaXMgYSBm
dW5jdGlvbiBsaWtlIG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gdGhhdCBzdGFjayBhbGxv
Y2F0ZXMgdGhpcyBiZWNhdXNlCisrLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVj
dCB0byBjb25zdHJ1Y3QuCisrY2xhc3MgR2V0Tm9kZVR5cGUgOiBwcml2YXRlIFRJbnRlcm1UcmF2
ZXJzZXIKKyt7CisrICAgIE5vZGVUeXBlIG5vZGVUeXBlOworKworKyAgcHVibGljOgorKyAgICBH
ZXROb2RlVHlwZSgpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9Cisr
CisrICAgIE5vZGVUeXBlIG9wZXJhdG9yKCkoVEludGVybU5vZGUgJm5vZGUpCisrICAgIHsKKysg
ICAgICAgIG5vZGUudmlzaXQoVmlzaXQ6OlByZVZpc2l0LCB0aGlzKTsKKysgICAgICAgIHJldHVy
biBub2RlVHlwZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCB2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9s
OyB9CisrCisrICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9u
ICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjsgfQorKwor
KyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBl
ICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0
aW9uUHJvdG90eXBlOworKyAgICB9CisrCisrICAgIHZvaWQgdmlzaXRQcmVwcm9jZXNzb3JEaXJl
Y3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpQcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92
ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXp6bGU7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlw
ZSA9IE5vZGVUeXBlOjpCaW5hcnk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGUKKysg
ICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VW5hcnk7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQsIFRJbnRl
cm1UZXJuYXJ5ICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5
cGU6OlRlcm5hcnk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9v
bCB2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpJZkVsc2U7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRj
aCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpTd2l0
Y2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdENh
c2UoVmlzaXQsIFRJbnRlcm1DYXNlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVU
eXBlID0gTm9kZVR5cGU6OkNhc2U7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwgVEludGVybUZ1bmN0aW9u
RGVmaW5pdGlvbiAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVU
eXBlOjpGdW5jdGlvbkRlZmluaXRpb247CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKSBv
dmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpBZ2dyZWdhdGU7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEJsb2Nr
KFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbm9kZVR5
cGUgPSBOb2RlVHlwZTo6QmxvY2s7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAg
bm9kZVR5cGUgPSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb247CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbm9k
ZVR5cGUgPSBOb2RlVHlwZTo6RGVjbGFyYXRpb247CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysKKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJy
aWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6Okxvb3A7CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwg
VEludGVybUJyYW5jaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5v
ZGVUeXBlOjpCcmFuY2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9OworKwor
K30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkVFVVRJTF9OT0RFVFlQRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3V0aWwuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAKK2luZGV4IDM0NjQ3
MGUuLjU4MmRkYzcgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNw
cAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAKK0BAIC04MDQsNiArODA0
LDEwIEBAIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1dCBvdXRwdXQpCisgeworICAg
ICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VUUFVUOworIH0KKytib29sIElzT3V0
cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorK3sKKysgICAgcmV0dXJuIG91
dHB1dCA9PSBTSF9NU0xfTUVUQUxfT1VUUFVUOworK30KKyAKKyBib29sIElzSW5TaGFkZXJTdG9y
YWdlQmxvY2soVEludGVybVR5cGVkICpub2RlKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgKK2lu
ZGV4IDUzZWU3NTUuLmY5YWU5YmIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci91dGlsLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaAorQEAgLTc3LDYg
Kzc3LDcgQEAgYm9vbCBJc091dHB1dEdMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyBib29s
IElzT3V0cHV0SExTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOworIGJvb2wgSXNPdXRwdXRWdWxr
YW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyBib29sIElzT3V0cHV0TWV0YWwoU2hTaGFkZXJP
dXRwdXQgb3V0cHV0KTsKKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KTsKKyAKKyBib29sIElzSW5TaGFkZXJTdG9yYWdlQmxvY2soVEludGVybVR5cGVkICpu
b2RlKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmNwcCBi
L3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitpbmRleCBmNzQ4OTQ5Li41NGMzZGI1
IDEwMDY0NAorLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mby5jcHAKKysrKyBiL3Ny
Yy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitAQCAtNDcsNiArNDcsOCBAQCBzdGQ6OnN0
cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikKKyAgICAgICAgICAgICByZXR1cm4gIlZp
dmFudGUiOworICAgICAgICAgY2FzZSBrVmVuZG9ySURfVk1XYXJlOgorICAgICAgICAgICAgIHJl
dHVybiAiVk1XYXJlIjsKKysgICAgICAgIGNhc2Uga1ZlbmRvcklEX0FwcGxlOgorKyAgICAgICAg
ICAgIHJldHVybiAiQXBwbGUiOworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICByZXR1
cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2ZW5kb3IpICsgIikiOworICAgICB9CitA
QCAtMTYwLDYgKzE2MiwxMSBAQCBib29sIElzVml2YW50ZShWZW5kb3JJRCB2ZW5kb3JJZCkKKyAg
ICAgcmV0dXJuIHZlbmRvcklkID09IGtWZW5kb3JJRF9WaXZhbnRlOworIH0KKyAKKytib29sIElz
QXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpCisreworKyAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1Zl
bmRvcklEX0FwcGxlOworK30KKysKKyBib29sIFBhcnNlQU1EQnJhaG1hRHJpdmVyVmVyc2lvbihj
b25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZlcnNpb24pCisgeworICAg
ICBjb25zdCBzaXplX3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rfb2YoIjAxMjM0NTY3ODki
KTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmggYi9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKK2luZGV4IGFkMTc2OTguLjUwOWExZTkgMTAwNjQ0Cist
LS0gYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKKysrKyBiL3NyYy9ncHVfaW5mb191
dGlsL1N5c3RlbUluZm8uaAorQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0IFN5c3RlbUluZm8KKyAg
ICAgYm9vbCBpc0FNRFN3aXRjaGFibGUgPSBmYWxzZTsKKyAgICAgLy8gT25seSB0cnVlIG9uIGR1
YWwtR1BVIE1hYyBsYXB0b3BzLgorICAgICBib29sIGlzTWFjU3dpdGNoYWJsZSA9IGZhbHNlOwor
LSAgICAvLyBPbmx5IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdoZW4gcnVubmluZyBpT1Mg
YmluYXJpZXMuCistICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1l
bnRhdGlvbi9mb3VuZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1pb3NhcHBvbm1hYworLSAg
ICBib29sIGlzaU9TQXBwT25NYWMgPSBmYWxzZTsKKysgICAgLy8gT25seSB0cnVlIG9uIEFwcGxl
IFNpbGljb24gTWFjcyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3QuCisrICAgIGJvb2wgbmVl
ZHNFQUdMT25NYWMgICA9IGZhbHNlOworIAorICAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiBBbmRy
b2lkCisgICAgIHN0ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7CitAQCAtOTksNiArOTgs
NyBAQCBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAgID0gMHg4MDg2OworIGNv
bnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEwREU7CisgY29uc3RleHBy
IFZlbmRvcklEIGtWZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKKyBjb25zdGV4cHIgVmVuZG9y
SUQga1ZlbmRvcklEX1ZNV2FyZSAgID0gMHgxNWFkOworK2NvbnN0ZXhwciBWZW5kb3JJRCBrVmVu
ZG9ySURfQXBwbGUgICAgPSAweDEwNkI7CisgCisgLy8gS25vd24gbm9uLVBDSSAoaS5lLiBLaHJv
bm9zLXJlZ2lzdGVyZWQpIHZlbmRvciBJRHMKKyBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklE
X1ZpdmFudGUgICAgID0gMHgxMDAwMTsKK0BAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBJc1N3aWZ0
c2hhZGVyKFZlbmRvcklEIHZlbmRvcklkKTsKKyBib29sIElzVmVyaVNpbGljb24oVmVuZG9ySUQg
dmVuZG9ySWQpOworIGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9ySWQpOworIGJvb2wgSXNW
aXZhbnRlKFZlbmRvcklEIHZlbmRvcklkKTsKKytib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9y
SWQpOworIAorIC8vIFVzZSBhIGhldXJpc3RpYyB0byBhdHRlbXB0IHRvIGZpbmQgdGhlIEdQVSB1
c2VkIGZvciAzRCBncmFwaGljcy4gU2V0cyBhY3RpdmVHUFVJbmRleCwKKyAvLyBpc09wdGltdXMs
IGFuZCBpc0FNRFN3aXRjaGFibGUuCitkaWZmIC0tZ2l0IGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lz
dGVtSW5mb19hcHBsZS5tbSBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0K
K2luZGV4IGM3NzU2ZjYuLjE1MDBmZmYgMTAwNjQ0CistLS0gYS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2FwcGxlLm1tCisrKysgYi9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2Fw
cGxlLm1tCitAQCAtMSw1ICsxLDUgQEAKKyAvLworLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gQ29weXJpZ2h0IDIw
MjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisg
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAtLWdpdCBhL3NyYy9ncHVf
aW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm9faW9zLmNwcAoraW5kZXggMzIzYWYyYy4uZTUyZWNiMyAxMDA2NDQKKy0tLSBhL3NyYy9ncHVf
aW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcAorKysrIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lz
dGVtSW5mb19pb3MuY3BwCitAQCAtMTgsOCArMTgsOSBAQCBuYW1lc3BhY2UgYW5nbGUKKyBib29s
IEdldFN5c3RlbUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCisgeworICAgICB7CistICAgICAg
ICAvLyBUT0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNp
b24uCisrICAgICAgICAvLyBUT0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwg
c3lzdGVtIHZlcnNpb24gYW5kIEdQVSBpbmZvLgorICAgICAgICAgaW5mby0+bWFjaGluZU1vZGVs
VmVyc2lvbiA9ICIwLjAiOworKyAgICAgICAgaW5mby0+Z3B1cy5lbXBsYWNlX2JhY2soKS52ZW5k
b3JJZCA9IGtWZW5kb3JJRF9BcHBsZTsKKyAgICAgfQorIAorICAgICByZXR1cm4gdHJ1ZTsKK2Rp
ZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tIGIvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQoraW5kZXggYjFjZDA1NS4uYzVlMDM5ZSAx
MDA2NDQKKy0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KKysrKyBi
L3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KK0BAIC0zMjIsNiArMzIyLDEw
IEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5mbyAqaW5mbykKKyAgICAgICAgIGlu
Zm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CisgICAgIH0KKyAgICAgCisrI2lmIGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KQor
KyAgICBpbmZvLT5uZWVkc0VBR0xPbk1hYyA9IHRydWU7CisrI2VuZGlmCisrCisgICAgIHJldHVy
biB0cnVlOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAgYi9zcmMv
bGliQU5HTEUvQ2Fwcy5jcHAKK2luZGV4IGY5MDY3ODMuLjc5MzEwMDkgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvQ2Fwcy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorQEAgLTE3
MCw4ICsxNzAsOCBAQCBzdGF0aWMgYm9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0
dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMsCisgeworICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlcXVpcmVkRm9ybWF0c1NpemU7IGkrKykKKyAgICAgeworLSAgICAgICAgY29uc3QgVGV4dHVy
ZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOworIAorKyAg
ICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZv
cm1hdHNbaV0pOworICAgICAgICAgaWYgKHJlcXVpcmVzVGV4dHVyaW5nICYmICFjYXAudGV4dHVy
YWJsZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CitAQCAtNDYyLDcg
KzQ2Miw2IEBAIHN0YXRpYyBib29sIERldGVybWluZUFTVENMRFJUZXh0dXJlU3VwcG9ydChjb25z
dCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMpCisgICAgICAgICBHTF9DT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSLCAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMHgxMF9LSFIsCisgICAgICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEy
eDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIsCisgICAg
IH07CistCisgICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0KHRleHR1cmVDYXBzLCByZXF1aXJl
ZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworIH0KKyAKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAgYi9zcmMvbGliQU5HTEUvRGlzcGxheS5j
cHAKK2luZGV4IGRkZTQzMzcuLjY1NzgxNGYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvRGlz
cGxheS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAorQEAgLTE4MSw3ICsxODEs
MTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50KCkKKyAgICAgICAg
IHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9OVUxMX0FOR0xFOworICAgICB9CisgI2Vu
ZGlmCisrI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX01FVEFMKQorKyAgICBpZiAoYW5nbGVEZWZh
dWx0RW52ID09ICJtZXRhbCIpCisrICAgIHsKKysgICAgICAgIHJldHVybiBFR0xfUExBVEZPUk1f
QU5HTEVfVFlQRV9NRVRBTF9BTkdMRTsKKysgICAgfQorIAorKyNlbmRpZgorICNpZiBkZWZpbmVk
KEFOR0xFX0VOQUJMRV9EM0QxMSkKKyAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0QzRDExX0FOR0xFOworICNlbGlmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDkpCitAQCAtMTMy
NSw2ICsxMzMxLDQ3IEBAIEVycm9yIERpc3BsYXk6Om1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpw
cmV2aW91c0NvbnRleHQsCisgICAgIHJldHVybiBOb0Vycm9yKCk7CisgfQorIAorK0Vycm9yIERp
c3BsYXk6Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1cmZhY2UsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWdsOjpTdXJmYWNlICpyZWFkU3VyZmFjZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIGlmICghbUluaXRpYWxp
emVkKQorKyAgICB7CisrICAgICAgICByZXR1cm4gTm9FcnJvcigpOworKyAgICB9CisrCisrICAg
IGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQgPSB0aHJlYWQtPmdldENvbnRleHQoKTsKKysg
ICAgaWYgKHByZXZpb3VzQ29udGV4dCkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHByZXZp
b3VzQ29udGV4dC0+dW5NYWtlQ3VycmVudCh0aGlzKSk7CisrICAgIH0KKysKKysgICAgQU5HTEVf
VFJZKG1JbXBsZW1lbnRhdGlvbi0+bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRT
dXJmYWNlLCBjb250ZXh0KSk7CisrCisrICAgIGlmIChjb250ZXh0ICE9IG51bGxwdHIpCisrICAg
IHsKKysgICAgICAgIEFOR0xFX1RSWShjb250ZXh0LT5tYWtlQ3VycmVudCh0aGlzLCBkcmF3U3Vy
ZmFjZSwgcmVhZFN1cmZhY2UpKTsKKysgICAgfQorKworKyAgICAvLyBUaWNrIGFsbCB0aGUgc2Ny
YXRjaCBidWZmZXJzIHRvIG1ha2Ugc3VyZSB0aGV5IGdldCBjbGVhbmVkIHVwIGV2ZW50dWFsbHkg
aWYgdGhleSBzdG9wIGJlaW5nCisrICAgIC8vIHVzZWQuCisrICAgIHsKKysgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1TY3JhdGNoQnVmZmVyTXV0ZXgpOworKworKyAg
ICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZlciAmc2NhdGNoQnVmZmVyIDogbVNjcmF0Y2hC
dWZmZXJzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNjYXRjaEJ1ZmZlci50aWNrKCk7Cisr
ICAgICAgICB9CisrICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZ6ZXJvRmlsbGVk
QnVmZmVyIDogbVplcm9GaWxsZWRCdWZmZXJzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHpl
cm9GaWxsZWRCdWZmZXIudGljaygpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVy
biBOb0Vycm9yKCk7CisrfQorKworIEVycm9yIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkK
KyB7CisgICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVn
aW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgrKykKK2RpZmYgLS1naXQgYS9zcmMv
bGliQU5HTEUvRGlzcGxheS5oIGIvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaAoraW5kZXggNGFjNjMz
Ni4uMTZmYWYyYiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKKysrKyBiL3Ny
Yy9saWJBTkdMRS9EaXNwbGF5LmgKK0BAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkg
ZmluYWwgOiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkNvbnRleHQgKipvdXRDb250ZXh0KTsKKyAKKysgICAgRXJyb3IgbWFrZUN1cnJlbnQoY29uc3Qg
VGhyZWFkICp0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2UgKmRyYXdTdXJm
YWNlLAorKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworKworICAgICBFcnJvciBj
cmVhdGVTeW5jKGNvbnN0IGdsOjpDb250ZXh0ICpjdXJyZW50Q29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICBFR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXR0
cmlidXRlTWFwICZhdHRyaWJzLAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgg
Yi9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCitpbmRleCBmZTNlYzI4Li5iYTkyNjdhIDEwMDY0NAor
LS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorKysrIGIvc3JjL2xpYkFOR0xFL1Byb2dyYW0u
aAorQEAgLTI3Niw2ICsyNzYsMTEgQEAgY2xhc3MgUHJvZ3JhbVN0YXRlIGZpbmFsIDogYW5nbGU6
Ok5vbkNvcHlhYmxlCisgICAgIHsKKyAgICAgICAgIHJldHVybiBtRXhlY3V0YWJsZS0+Z2V0TGlu
a2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOworICAgICB9CisrICAgIHZvaWQgc2V0TGlu
a2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygKKysgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gbUV4ZWN1dGFibGUtPnNldExpbmtl
ZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoX21MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzKTsKKysgICAgfQorICAgICBjb25zdCBzdGQ6OnZlY3RvcjxHTHNpemVpPiAmZ2V0VHJhbnNm
b3JtRmVlZGJhY2tTdHJpZGVzKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJuIG1FeGVj
dXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKK2RpZmYgLS1naXQgYS9zcmMv
bGliQU5HTEUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCitpbmRleCA5NTA4MzJiLi40OGYzYmQyIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xF
L1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrKyBiL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oCitAQCAtMjI5LDYgKzIyOSwxMSBAQCBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZSBmaW5hbCA6
IHB1YmxpYyBhbmdsZTo6U3ViamVjdAorICAgICB7CisgICAgICAgICByZXR1cm4gbUxpbmtlZFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7CisgICAgIH0KKysgICAgdm9pZCBzZXRMaW5rZWRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzKAorKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nPiBfbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCisr
ICAgIHsKKysgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5r
ZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworKyAgICB9CisgICAgIEdMaW50IGdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGU7IH0KKyAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAorICAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL1NoYWRlci5jcHAgYi9zcmMvbGliQU5HTEUvU2hhZGVyLmNwcAoraW5kZXggNmY5YTc4YS4u
OTYwMDZkOSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9TaGFkZXIuY3BwCisrKysgYi9zcmMv
bGliQU5HTEUvU2hhZGVyLmNwcAorQEAgLTY1NSw3ICs2NTUsOSBAQCBzdGQ6OnN0cmluZyBTaGFk
ZXI6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01hcHBlZE5hbWUoY29uc3Qgc3RkOjpzdHJp
bmcgJnRmVgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgR0x1aW50IGZpZWxkSW5k
ZXggPSAwOworICAgICAgICAgICAgICAgICBjb25zdCBhdXRvICpmaWVsZCA9IHZhcnlpbmcuZmlu
ZEZpZWxkKHRmVmFyeWluZ05hbWUsICZmaWVsZEluZGV4KTsKKy0gICAgICAgICAgICAgICAgQVNT
RVJUKGZpZWxkICE9IG51bGxwdHIgJiYgIWZpZWxkLT5pc1N0cnVjdCgpICYmICFmaWVsZC0+aXNB
cnJheSgpKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWVsZCkKKysgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICBBU1NFUlQoIWZpZWxkLT5pc1N0cnVjdCgp
ICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcnlpbmcu
bWFwcGVkTmFtZSArICIuIiArIGZpZWxkLT5tYXBwZWROYW1lOworICAgICAgICAgICAgIH0KKyAg
ICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvU3RhdGUuY3BwIGIvc3JjL2xpYkFO
R0xFL1N0YXRlLmNwcAoraW5kZXggN2IwOGQ4ZC4uYTgwNDQ4NiAxMDA2NDQKKy0tLSBhL3NyYy9s
aWJBTkdMRS9TdGF0ZS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKK0BAIC02LDYg
KzYsOSBAQAorIAorIC8vIFN0YXRlLmNwcDogSW1wbGVtZW50cyB0aGUgU3RhdGUgY2xhc3MsIGVu
Y2Fwc3VsYXRpbmcgcmF3IEdMIHN0YXRlLgorIAorKy8vIE9sZGVyIGNsYW5nIHZlcnNpb25zIGhh
dmUgYSBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHdhcm5pbmcgaGVyZS4KKysjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3RydWN0b3JzIgorKworICNpbmNsdWRl
ICJsaWJBTkdMRS9TdGF0ZS5oIgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwIGIvc3JjL2xpYkFOR0xFL2Zvcm1hdHV0aWxz
LmNwcAoraW5kZXggM2Y5ZjM3ZC4uNWU2MjhmMiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9m
b3JtYXR1dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAKK0BAIC0x
MDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIEJ1aWxkSW50ZXJu
YWxGb3JtYXRJbmZvTWFwKCkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICAgaWYg
KGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICAgeworLSAgICAgICAgaWYgKGluZm8u
aXNpT1NBcHBPbk1hYykKKysgICAgICAgIGlmIChpbmZvLm5lZWRzRUFHTE9uTWFjKQorICAgICAg
ICAgeworICAgICAgICAgICAgIC8vIFVzaW5nIE9wZW5HTEVTLmZyYW1ld29yay4KKyAgICAgICAg
ICAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICBmYWxzZSwgIDgsICA4
LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBSZXF1aXJlRVM8MiwgMD4sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgUmVxdWlyZUVT
PDIsIDA+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV2ZXJTdXBwb3J0ZWQsIE5l
dmVyU3VwcG9ydGVkKTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVy
X3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCitpbmRl
eCBkNGM2YWVkLi4yMjM2NGIzIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2Ry
aXZlcl91dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMu
Y3BwCitAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24g
JmEsIGNvbnN0IE9TVmVyc2lvbiAmYikKKyAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJz
aW9uLCBiLm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOworIH0KKyAKKy0jaWYgIWRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisrI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q09TKQorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQorIHsKKyAgICAgLy8gUmV0dXJuIGEg
ZGVmYXVsdCB2ZXJzaW9uCitAQCAtMjEzLDYgKzIxMywxNCBAQCBPU1ZlcnNpb24gR2V0TWFjT1NW
ZXJzaW9uKCkKKyB9CisgI2VuZGlmCisgCisrI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lP
UykKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpCisreworKyAgICAvLyBSZXR1cm4gYSBkZWZh
dWx0IHZlcnNpb24KKysgICAgcmV0dXJuIE9TVmVyc2lvbigwLCAwLCAwKTsKKyt9CisrI2VuZGlm
CisrCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTElOVVgpCisgYm9vbCBQYXJzZUxpbnV4
T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCAqbWFqb3IsIGludCAqbWlub3IsIGlu
dCAqcGF0Y2gpCisgeworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJf
dXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaAoraW5kZXggMjYx
OWJjMy4uNzg3NzJhZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJf
dXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oCitAQCAt
MTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKKyAjZW5kaWYKKyB9CisgCisr
aW5saW5lIGJvb2wgSXNNYWMoKQorK3sKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBM
RSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKysgICAgcmV0dXJuIHRydWU7Cisr
I2Vsc2UKKysgICAgcmV0dXJuIGZhbHNlOworKyNlbmRpZgorK30KKysKKyBpbmxpbmUgYm9vbCBJ
c0Z1Y2hzaWEoKQorIHsKKyAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQorQEAg
LTIwNCw2ICsyMTMsOCBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBjb25z
dCBPU1ZlcnNpb24gJmIpOworIAorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKKyAKKytP
U1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpOworKworIE9TVmVyc2lvbiBHZXRMaW51eE9TVmVyc2lv
bigpOworIAorIGlubGluZSBib29sIElzQW5kcm9pZCgpCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19pb3MubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
ZHJpdmVyX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LmU3YTg0NWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfaW9zLm1tCitAQCAtMCwwICsxLDI4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAx
OSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrLy8g
ZHJpdmVyX3V0aWxzX2lvcy5tbSA6IHByb3ZpZGVzIGlvcy1zcGVjaWZpYyBpbmZvcm1hdGlvbiBh
Ym91dCBjdXJyZW50IGRyaXZlci4KKysKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJp
dmVyX3V0aWxzLmgiCisrCisrI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisrCisr
bmFtZXNwYWNlIHJ4CisreworKworK09TVmVyc2lvbiBHZXRpT1NWZXJzaW9uKCkKKyt7CisrICAg
IE9TVmVyc2lvbiByZXN1bHQ7CisrCisrICAgIE5TT3BlcmF0aW5nU3lzdGVtVmVyc2lvbiB2ZXJz
aW9uID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBvcGVyYXRpbmdTeXN0ZW1WZXJzaW9u
XTsKKysgICAgcmVzdWx0Lm1ham9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxp
bnQ+KHZlcnNpb24ubWFqb3JWZXJzaW9uKTsKKysgICAgcmVzdWx0Lm1pbm9yVmVyc2lvbiAgICAg
ICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWlub3JWZXJzaW9uKTsKKysgICAg
cmVzdWx0LnBhdGNoVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNp
b24ucGF0Y2hWZXJzaW9uKTsKKysKKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrfQorZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfbWFjLm1tIGIvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW0KK2luZGV4IDNhZjQ2ZmMuLmE4
MWVkZTIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21h
Yy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW0KK0BA
IC0xMyw2ICsxMyw3IEBACisgbmFtZXNwYWNlIHJ4CisgeworIAorKyNpZiBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ09TKQorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQorIHsKKyAgICAg
T1NWZXJzaW9uIHJlc3VsdDsKK0BAIC0yNCw1ICsyNSw1IEBAIE9TVmVyc2lvbiBHZXRNYWNPU1Zl
cnNpb24oKQorIAorICAgICByZXR1cm4gcmVzdWx0OworIH0KKy0KKysjZW5kaWYKKyB9CitkaWZm
IC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmggYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaAorbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmM2E2ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oCitAQCAtMCwwICsxLDEx
MiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0LWxpbmtp
bmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorKworKyNpZm5kZWYgU09GVF9MSU5LSU5HX0FQ
UExFX0hfCisrI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKysKKysjaW5jbHVkZSAiY29t
bW9uL3BsYXRmb3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisr
CisrIyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKysjICAgIGltcG9ydCA8ZGlzcGF0
Y2gvZGlzcGF0Y2guaD4KKysjICAgIGltcG9ydCA8ZGxmY24uaD4KKysjICAgIGltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisrCisrIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvbiwg
bWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgIChleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICA/
IHN0YXRpY19jYXN0PHZvaWQ+KDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0
ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18g
PDwgIjoiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICA8PCBfX0xJTkVfXyA8PCAiKTogIiA8
PCAjZXhwcmVzc2lvbiA8PCAiXG5cdCEgTWVzc2FnZTogIiA8PCBtZXNzYWdlKSkKKysKKysjICAg
IGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVy
biAiQyIgeworKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19FTkQgfQorKyMgICAgZWxzZQorKyMg
ICAgICAgIGRlZmluZSBFWFRFUk5fQ19CRUdJTgorKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19F
TkQKKysjICAgIGVuZGlmCisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19IRUFE
RVIoZnJhbWV3b3JrKSBleHRlcm4gdm9pZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCk7CisrCisrIyAg
ICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoZnJhbWV3b3JrKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgdm9pZCAqZnJh
bWV3b3JrIyNMaWJyYXJ5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlICAgPSAw
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg
ICAgICAgICAgIHN0YXRpYyB2b2lkICpmcmFtZXdvcmtMaWJyYXJ5ID0gTlVMTDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdvcmtMaWJyYXJ5
ID0gZGxvcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBSVExEX05PVyk7IFwKKysg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xpYnJhcnksICJVbmFibGUgdG8g
bG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBcCisrICAgICAgICAgICAgfSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBmcmFtZXdvcmtM
aWJyYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJTktfRlVOQ1RJ
T05fSEVBREVSKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgIEVYVEVSTl9DX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEVYVEVSTl9DX0VO
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBlIGluaXQj
I2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBlKCpzb2Z0TGluayMjZnJhbWV3
b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAgICAgIFwK
KysgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHJlc3Vs
dFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKysgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gc29m
dExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJ
TktfRlVOQ1RJT05fU09VUkNFKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBw
YXJhbWV0ZXJEZWNsYXJhdGlvbnMsICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgcmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1ld29yayMj
ZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBpbml0IyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg
ICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xh
cmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hf
b25jZV90IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgICAgc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lID0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgICAgICAgICAgICAocmVzdWx0VHlwZSgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpZGxzeW0o
ZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisrICAgICAgICAgICAgfSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBzb2Z0TGlu
ayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJTktf
Q0xBU1NfSEVBREVSKGNsYXNzTmFtZSkgICAgXAorKyAgICAgICAgQGNsYXNzIGNsYXNzTmFtZTsg
ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBleHRlcm4gQ2xhc3MgKCpnZXQjI2Ns
YXNzTmFtZSMjQ2xhc3MpKCk7IFwKKysgICAgICAgIGNsYXNzTmFtZSAqYWxsb2MjI2NsYXNzTmFt
ZSMjSW5zdGFuY2UoKTsgXAorKyAgICAgICAgaW5saW5lIGNsYXNzTmFtZSAqYWxsb2MjI2NsYXNz
TmFtZSMjSW5zdGFuY2UoKSB7IHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNzKCkgYWxsb2Nd
OyB9CisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0NMQVNTKGZyYW1ld29yaywgY2xhc3NOYW1l
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEBjbGFz
cyBjbGFzc05hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFt
ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICBDbGFzcyAoKmdldCMjY2xhc3NOYW1lIyNDbGFzcykoKSA9IGluaXQjI2NsYXNzTmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0YXRpYyBDbGFzcyBj
bGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBz
dGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzIyNjbGFzc05h
bWU7IH0gICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg
ICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdvcmsjI0xp
YnJhcnkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKysgICAgICAgICAgICAgIGNsYXNzIyNjbGFzc05hbWUgPSBvYmpjX2dldENsYXNzKCNj
bGFzc05hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZv
ciAiICNjbGFzc05hbWUpOyBcCisrICAgICAgICAgICAgICBnZXQjI2NsYXNzTmFtZSMjQ2xhc3Mg
PSBjbGFzc05hbWUjI0Z1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg
ICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBjbGFz
cyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9Q
cmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9QcmFnbWEoImNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBzdGF0aWMgY2xhc3NOYW1lICBc
CisrICAgICAgICAgICAgICAgICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNz
KCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9QcmFnbWEoImNsYW5nIGRpYWdu
b3N0aWMgcG9wIikKKysKKysjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUp
CisrCisrI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KK2RpZmYgLS1naXQgYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKK2luZGV4IGRlMjE2
ZmIuLjU1ZGNkOTAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUv
RGlzcGxheUFwcGxlX2FwaS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9hcHBs
ZS9EaXNwbGF5QXBwbGVfYXBpLmNwcAorQEAgLTEwLDYgKzEwLDcgQEAKKyAjaWZuZGVmIExJQkFO
R0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAjZGVmaW5lIExJQkFO
R0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAKKysjaW5jbHVkZSAi
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L0Rpc3BsYXlJbXBsLmgiCisgCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8
IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitAQCAtMzMsMTEgKzM0LDEwIEBA
IERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVnbDo6RGlzcGxheVN0
YXRlICZzdGF0ZSkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICAgaWYgKCFhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgIHsKKy0gICAgICAgIGltcGwgPSBudWxscHRy
OworLSAgICAgICAgYnJlYWs7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgfQorIAor
LSAgICBpZiAoaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoaW5mby5uZWVkc0VBR0xPbk1h
YykKKyAgICAgeworICAgICAgICAgcmV0dXJuIG5ldyByeDo6RGlzcGxheUVBR0woc3RhdGUpOwor
ICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuY3Bw
CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTk1YzBmNgorLS0tIC9kZXYv
bnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuY3Bw
CitAQCAtMCwwICsxLDc3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorKy8vCisrCisrLy8gQ0dMRnVuY3Rpb25zLmNwcDogRXhwb3NpbmcgdGhl
IHNvZnQtbGlua2VkIENHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgi
CisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3Bl
bkdMKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50ICpucGl4KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJzLCBwaXgsIG5w
aXgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dMQ3JlYXRlQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IENHTEVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2Jq
IHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwaXgsIHNoYXJlLCBjdHgpKQorK1NPRlRfTElOS19GVU5DVElP
Tl9TT1VSQ0UoCisrICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdCwKKysg
ICAgQ0dMRXJyb3IsCisrICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0s
IENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHBp
eCwgcGl4X251bSwgYXR0cmliLCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShP
cGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwg
KGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTERlc3Ryb3lQaXhl
bEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgpLCAocGl4KSkKKytTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRXJyb3JTdHJpbmcsIGNvbnN0IGNoYXIg
KiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNF
KE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0eCksIChj
dHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29u
dGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMU2V0
VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3JlZW4p
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZUX0xJTktf
RlVOQ1RJT05fU09VUkNFKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9TdXJmYWNl
MkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAgICBHTGVu
dW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdMc2l6ZWkg
d2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQsCisrICAg
ICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAgICBHTHVp
bnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktfRlVOQ1RJ
T05fU09VUkNFKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0
T2JqIGN0eCksIChjdHgpKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoCisrICAgIE9w
ZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisrICAgIChD
R0xSZW5kZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVyUHJvcGVy
dHkgcHJvcCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1
ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUmVuZGVyZXJJ
bmZvT2JqIHJlbmQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmQpKQorK1NPRlRf
TElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMUXVlcnlSZW5kZXJlckluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJv
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xS
ZW5kZXJlckluZm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZGlzcGxheV9tYXNrLCByZW5kLCBucmVuZCkpCisrCisrI2VuZGlmICAvLyBkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NB
VEFMWVNUKQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVu
Y3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5oCitu
ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTZiODcxZQorLS0tIC9kZXYvbnVs
bAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaAorQEAg
LTAsMCArMSw4NCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKysvLworKworKy8vIENHTEZ1bmN0aW9ucy5oOiBFeHBvc2luZyB0aGUgc29mdC1s
aW5rZWQgQ0dMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8KKysjZGVm
aW5lIENHTF9GVU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisr
CisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrIyAgICBpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Cisr
CisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5o
IgorKworK1NPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTCkKKysKKytTT0ZUX0xJTktf
RlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTENo
b29zZVBpeGVsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUg
KmF0dHJpYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUGl4ZWxGb3JtYXRPYmog
KnBpeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKKytTT0ZUX0xJTktfRlVO
Q1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTENyZWF0
ZUNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIENHTENvbnRleHRPYmog
c2hhcmUsIENHTENvbnRleHRPYmogKmN0eCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAo
cGl4LCBzaGFyZSwgY3R4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKAorKyAgICBPcGVu
R0wsCisrICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisrICAgIENHTEVycm9yLAorKyAgICAo
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4LCBHTGludCBwaXhfbnVtLCBDR0xQaXhlbEZvcm1hdEF0dHJp
YnV0ZSBhdHRyaWIsIEdMaW50ICp2YWx1ZSksCisrICAgIChwaXgsIHBpeF9udW0sIGF0dHJpYiwg
dmFsdWUpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisrICAgIE9wZW5HTCwKKysgICAg
Q0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xSZW5kZXJlcklu
Zm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVyUHJvcGVydHkgcHJvcCwgR0xp
bnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCisrU09GVF9M
SU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xFcnJvciwg
KENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihP
cGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1hdE9i
aiBwaXgpLCAocGl4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChD
R0xSZW5kZXJlckluZm9PYmogcmVuZCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAocmVu
ZCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTEVycm9yU3RyaW5nLCBj
b25zdCBjaGFyICosIChDR0xFcnJvciBlcnJvciksIChlcnJvcikpCisrU09GVF9MSU5LX0ZVTkNU
SU9OX0hFQURFUihPcGVuR0wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVyeVJl
bmRlcmVySW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRlcmVySW5m
b09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChk
aXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9w
ZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgp
KQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4
dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRfTElOS19GVU5D
VElPTl9IRUFERVIoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMU2V0Vmly
dHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3JlZW4pLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZUX0xJTktfRlVO
Q1RJT05fSEVBREVSKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9TdXJmYWNlMkQs
CisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAgICBHTGVudW0g
dGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdMc2l6ZWkgd2lk
dGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQsCisrICAgICBH
TGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAgICBHTHVpbnQg
cGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05f
SEVBREVSKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2Jq
IGN0eCksIChjdHgpKQorKworKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKysjZW5kaWYgIC8v
IENHTF9GVU5DVElPTlNfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL0NvbnRleHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9Db250ZXh0
Q0dMLmNwcAoraW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKK0BAIC0xMyw2ICsxMyw4IEBACisgI2luY2x1ZGUg
ImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2ds
L0Rpc3BsYXlDR0wuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKyBuYW1lc3BhY2UgcngKKyB7
CisgCitAQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4CisrCisrI2Vu
ZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tIGIvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCitpbmRleCBiNWE2MzFhLi45MGU4
MDU4IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dM
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KK0BA
IC0yOSw2ICsyOSw4IEBACisgIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
V2luZG93U3VyZmFjZUNHTC5oIgorICMgICAgaW5jbHVkZSAicGxhdGZvcm0vUGxhdGZvcm1NZXRo
b2RzLmgiCisgCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVu
Y3Rpb25zLmgiCisrCisgbmFtZXNwYWNlCisgeworIAorQEAgLTE2Myw5ICsxNjUsMTAgQEAgc3Rh
dGljIHZvaWQgU2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9iaiwKKyAg
ICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OworIAorICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZv
OworLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0ZW1JbmZvIHRvIHJldHVybiBmYWxzZSBh
bmQgdGhlcmVieQorLSAgICAvLyBjb250YWluIGluY29tcGxldGUgaW5mb3JtYXRpb24uCistICAg
ICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKysgICAgaWYgKCFhbmdsZTo6R2V0
U3lzdGVtSW5mbygmaW5mbykpCisrICAgIHsKKysgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdElu
aXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKysg
ICAgfQorIAorICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgZWZmZWN0IG9mIHRoZQor
ICAgICAvLyBkaXNhYmxlR1BVU3dpdGNoaW5nU3VwcG9ydCB3b3JrYXJvdW5kIGluIEZlYXR1cmVz
R0wuCitAQCAtNDQwLDcgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIFNldEdQVUJ5UmVnaXN0cnlJRChD
R0xDb250ZXh0T2JqIGNvbnRleHRPYmosCisgCisgYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0
aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0gICAgTlNP
YmplY3QgKmxheWVyID0gKF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBOU09iamVj
dCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CisgICAgIHJl
dHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5tbSBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCitpbmRleCBhNzk1MDM3
Li5jNTVhZTdmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlz
cGxheUVBR0wubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlF
QUdMLm1tCitAQCAtMjcsNiArMjcsOCBAQAorICMgICAgaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmUuaD4KKyAjICAgIGltcG9ydCA8ZGxmY24uaD4KKyAKKysjICAgIGltcG9ydCAibGliQU5H
TEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNlCisgewor
IAorQEAgLTY0LDkgKzY2LDEwIEBACisgICAgIG1FR0xEaXNwbGF5ID0gZGlzcGxheTsKKyAKKyAg
ICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgLy8gSXQncyBsZWdhbCBmb3IgR2V0U3lz
dGVtSW5mbyB0byByZXR1cm4gZmFsc2UgYW5kIHRoZXJlYnkKKy0gICAgLy8gY29udGFpbiBpbmNv
bXBsZXRlIGluZm9ybWF0aW9uLgorLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5m
byk7CisrICAgIGlmICghYW5nbGU6OkdldFN5c3RlbUluZm8oJmluZm8pKQorKyAgICB7CisrICAg
ICAgICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8gcXVlcnkg
QU5HTEUncyBTeXN0ZW1JbmZvLiI7CisrICAgIH0KKyAKKyAgICAgbUNvbnRleHQgPSBbYWxsb2NF
QUdMQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElPcGVuR0xF
UzNdOworICAgICBpZiAobUNvbnRleHQgPT0gbnVsbHB0cikKK0BAIC0xMTMsNiArMTE2LDcgQEAK
KyAgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCisgICAgIHsKKyAgICAgICAgIFtnZXRFQUdM
Q29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKysgICAgICAgIFttQ29udGV4
dCByZWxlYXNlXTsKKyAgICAgICAgIG1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgIG1UaHJl
YWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CisgICAgIH0KK0BAIC0yNzUsNyArMjc5LDcg
QEAKKyAKKyBib29sIERpc3BsYXlFQUdMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0gICAgTlNPYmplY3QgKmxheWVyID0gKF9fYnJp
ZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWludGVycHJl
dF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CisgICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZD
bGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAKK0BAIC0zMTEsOSArMzE1LDggQEAKKyAgICAg
b3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0ICAgID0gdHJ1ZTsKKyAgICAgb3V0RXh0
ZW5zaW9ucy0+ZGV2aWNlUXVlcnkgICAgICAgICAgID0gdHJ1ZTsKKyAKKy0gICAgLy8gQ29udGV4
dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGFucyBzZW1hcGhvcmVzIGNhbiBiZSBzaGFy
ZWQgZ2xvYmFsbHkKKysgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVz
IGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxheVRleHR1
cmVTaGFyZUdyb3VwID0gdHJ1ZTsKKy0gICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxheVNlbWFwaG9y
ZVNoYXJlR3JvdXAgPSB0cnVlOworIAorICAgICBvdXRFeHRlbnNpb25zLT5wb3dlclByZWZlcmVu
Y2UgPSBmYWxzZTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVu
Y3Rpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MjEyNTEzCist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVu
Y3Rpb25zLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIEFwcGxl
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysvLyBFQUdMRnVuY3Rpb25zLmg6IEV4cG9z
aW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIEVBR0xfRlVO
Q1RJT05TX0hfCisrI2RlZmluZSBFQUdMX0ZVTkNUSU9OU19IXworKworKyNpbmNsdWRlICJjb21t
b24vcGxhdGZvcm0uaCIKKysKKysjaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAh
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKKysgICAgKGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkK
KysKKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorKyMgICAgaW1wb3J0IDxPcGVuR0xF
Uy9FQUdMRHJhd2FibGUuaD4KKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3VyZmFjZS5o
PgorKworKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBw
bGUuaCIKKysKKytTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0xFUykKKysKKytTT0ZU
X0xJTktfQ0xBU1NfSEVBREVSKEVBR0xDb250ZXh0KQorKworKyNlbmRpZiAgLy8gKGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlT
VCkpIHx8CisrICAgICAgICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkg
JiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorKworKyNlbmRpZiAgLy8gQ0dMX0ZVTkNUSU9O
U19IXworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5j
dGlvbnMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLm1t
CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGIxZWI3MAorLS0tIC9kZXYv
bnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5t
bQorQEAgLTAsMCArMSwyNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIEVBR0xGdW5jdGlvbnMuY3BwOiBFeHBvc2luZyB0
aGUgc29mdC1saW5rZWQgRUFHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImNvbW1vbi9wbGF0
Zm9ybS5oIgorKworKyNpZiAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwgXAorKyAgICAoZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorKworKyMg
ICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisrIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xE
cmF3YWJsZS5oPgorKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisrCisr
IyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgor
KworK1NPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorKworK1NPRlRfTElOS19D
TEFTUyhPcGVuR0xFUywgRUFHTENvbnRleHQpCisrCisrI2VuZGlmICAvLyAoZGVmaW5lZChBTkdM
RV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkg
fHwKKysgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBk
ZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Rp
ZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKK2luZGV4IGVj
ZTIzNWEuLmFlMDIwN2IgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9GdW5jdGlvbnNFQUdMLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1
bmN0aW9uc0VBR0wuaAorQEAgLTE3LDcgKzE3LDcgQEAKKyAjICAgIGltcG9ydCA8T3BlbkdMRVMv
RUFHTERyYXdhYmxlLmg+CisgIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4K
KyAKKy0jICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5n
LmgiCisrIyAgICBpbmNsdWRlICJjb21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKyAKKyBTT0ZU
X0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0xFUykKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL2VhZ2wvRnVuY3Rpb25zRUFHTC5tbQoraW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wu
bW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0K
K0BAIC0xNCw3ICsxNCw3IEBACisgIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5o
PgorICMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisgCistIyAgICBpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9hcHBsZS9Tb2Z0TGlua2luZy5oIgorKyMgICAgaW5j
bHVkZSAiY29tbW9uL2FwcGxlL1NvZnRMaW5raW5nLmgiCisgCisgU09GVF9MSU5LX0ZSQU1FV09S
S19TT1VSQ0UoT3BlbkdMRVMpCisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVBR0wubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbQoraW5kZXggZjE2YzNlNy4uNDVlNmQwZiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZh
Y2VFQUdMLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VT
dXJmYWNlRUFHTC5tbQorQEAgLTIwNiw3ICsyMDYsOSBAQCBpbnQgRmluZElPU3VyZmFjZUZvcm1h
dEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCisgICAgICAgICAvLyBU
T0RPKGticik6IHBvc3NpYmx5IG1vcmUgc3RhdGUgdG8gYmUgc2V0IGhlcmUsIGluY2x1ZGluZyBz
ZXR0aW5nIGFueQorICAgICAgICAgLy8gcGl4ZWwgdW5wYWNrIGJ1ZmZlciB0byAwIHdoZW4gdXNp
bmcgRVMgMy4wIGNvbnRleHRzLgorICAgICAgICAgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgZGVmYXVs
dFVucGFja1N0YXRlOworLSAgICAgICAgc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFVucGFja1N0YXRl
KGRlZmF1bHRVbnBhY2tTdGF0ZSk7CisrICAgICAgICBpZiAoSXNFcnJvcihzdGF0ZU1hbmFnZXIt
PnNldFBpeGVsVW5wYWNrU3RhdGUoY29udGV4dCwgZGVmYXVsdFVucGFja1N0YXRlKSkpIHsKKysg
ICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBp
eGVsIHVucGFjayBzdGF0ZS4iOworKyAgICAgICAgfQorICAgICAgICAgdGV4dHVyZURhdGEgPSBJ
T1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhtSU9TdXJmYWNlKTsKKyAgICAgfQorIAorQEAgLTIzOCw3
ICsyNDAsOSBAQCBpbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xlbnVtIHR5cGUpCisgICAgICAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgc3RhdGU7Cisg
ICAgICAgICBzdGF0ZS5yb3dMZW5ndGggPSBtUm93U3RyaWRlSW5QaXhlbHM7CisgICAgICAgICBz
dGF0ZS5hbGlnbm1lbnQgPSAxOworLSAgICAgICAgc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tT
dGF0ZShzdGF0ZSk7CisrICAgICAgICBpZiAoSXNFcnJvcihzdGF0ZU1hbmFnZXItPnNldFBpeGVs
UGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKKysgICAgICAgICAgICByZXR1cm4gZWdsOjpF
Z2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBpeGVsIHVucGFjayBzdGF0ZS4iOworKyAg
ICAgICAgfQorICAgICAgICAgLy8gVE9ETyhrYnIpOiBwb3NzaWJseSBtb3JlIHN0YXRlIHRvIGJl
IHNldCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyBhbnkKKyAgICAgICAgIC8vIHBpeGVsIHBhY2sg
YnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCisgICAgICAgICBjb25zdCBh
dXRvICZmb3JtYXQgPSBrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdOworZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcCBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAoraW5kZXggOTk3NzJjNC4u
MTFmNDdlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmds
X3V0aWxzLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRp
bHMuY3BwCitAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBHZW5lcmF0ZUNhcHMoY29uc3QgRnVu
Y3Rpb25zR0wgKmZ1bmN0aW9ucywKKyAKKyAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKyAgICAgYW5nbGU6OlN5
c3RlbUluZm8gaW5mbzsKKy0gICAgaWYgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSAmJiAh
aW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoYW5nbGU6OkdldFN5c3RlbUluZm8oJmluZm8p
ICYmICFpbmZvLm5lZWRzRUFHTE9uTWFjKQorICAgICB7CisgICAgICAgICBWZW5kb3JJRCB2ZW5k
b3IgPSBHZXRWZW5kb3JJRChmdW5jdGlvbnMpOworICAgICAgICAgaWYgKChJc0FNRCh2ZW5kb3Ip
IHx8IElzSW50ZWwodmVuZG9yKSkgJiYgKm1heFN1cHBvcnRlZEVTVmVyc2lvbiA+PSBnbDo6VmVy
c2lvbigzLCAwKSkKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193
cmFwcGVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJf
dXRpbHMuY3BwCitpbmRleCBkNzBhZTU4Li42MTVkZDQ0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCitAQCAtMjgxLDkgKzI4MSwxMSBA
QCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKGNvbnN0IHN0
ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnhmYk91dCkKKyB7CisgICAgIGNv
bnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5maW5kKGtYZmJE
ZWNsTWFya2VyKTsKKysgICAgQVNTRVJUKHhmYkRlY2xNYXJrZXJTdGFydCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcyk7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyRW5kID0geGZiRGVjbE1h
cmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworIAorICAgICBjb25zdCBz
aXplX3QgeGZiT3V0TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5maW5kKGtYZmJPdXRNYXJr
ZXIsIHhmYkRlY2xNYXJrZXJTdGFydCk7CisrICAgIEFTU0VSVCh4ZmJPdXRNYXJrZXJTdGFydCAh
PSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJPdXRNYXJrZXJFbmQg
PSB4ZmJPdXRNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtYZmJPdXRNYXJrZXIpOworIAorICAg
ICAvLyBUaGUgc2hhZGVyIGlzIHRoZSBmb2xsb3dpbmcgZm9ybToKK0BAIC0zNjIsNyArMzY0LDgg
QEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBH
bHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsc2xhbmdQ
cm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAqdmVydGV4U2hh
ZGVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hh
ZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJJbnRlcmZhY2VW
YXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCisgeworICAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nPiAmdmFyeWluZ3Mg
PQorICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MoKTsKK0BAIC00MTMsNiArNDE2LDEwIEBAIHZvaWQgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFj
a0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvCisgICAg
ICAgICAgICAgb3V0cHV0T2Zmc2V0ICs9IGluZm8uY29sdW1uQ291bnQgKiBpbmZvLnJvd0NvdW50
ICogdmFyeWluZy5zaXplKCk7CisgICAgICAgICB9CisgICAgIH0KKysgICAgaWYgKGVhcmx5UmV0
dXJuKQorKyAgICB7CisrICAgICAgICB4ZmJPdXQgKz0gInJldHVybjsiOworKyAgICB9CisgICAg
IHhmYk91dCArPSAifVxuIjsKKyAKKyAgICAgKnZlcnRleFNoYWRlciA9IFN1YnN0aXR1dGVUcmFu
c2Zvcm1GZWVkYmFja01hcmtlcnMoKnZlcnRleFNoYWRlciwgeGZiRGVjbCwgeGZiT3V0KTsKK0BA
IC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xzbGFuZ0dldE1hcHBlZFNhbXBsZXJO
YW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCisgICAgIHJldHVybiBzYW1wbGVy
TmFtZTsKKyB9CisgCistc3RkOjpzdHJpbmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1aW50MzJf
dCBidWZmZXJJbmRleCkKKy17CistICAgIHJldHVybiAieGZiQnVmZmVyIiArIFN0cihidWZmZXJJ
bmRleCk7CistfQorLQorIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9u
T3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1T
dGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmZh
Y2VJbmZvLAorQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZl
ZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYWRlcklu
dGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFwT3V0KQorIHsKKyAgICAgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMob3B0aW9ucywgcHJvZ3JhbVN0
YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQpOworKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXIs
IHZhcmlhYmxlSW5mb01hcE91dCwgZmFsc2UpOworIH0KKyAKKyB2b2lkIEdsc2xhbmdBc3NpZ25M
b2NhdGlvbnMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCitAQCAtMzQyOCw2
ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhjb25zdCBHbHNsYW5nU291
cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlSW5mb01hcE91dCk7CisgfQorIAorK3N0ZDo6c3RyaW5nIEdldFhmYkJ1ZmZlck5hbWUoY29u
c3QgdWludDMyX3QgYnVmZmVySW5kZXgpCisreworKyAgICByZXR1cm4gInhmYkJ1ZmZlciIgKyBT
dHIoYnVmZmVySW5kZXgpOworK30KKysKKysKKyt2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMo
R2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAmcHJvZ3JhbUV4ZWN1dGFibGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5m
byAqcHJvZ3JhbUludGVyZmFjZUluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
YWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFwT3V0KQorK3sK
KysgICAgLy8gQXNzaWduIG91dHB1dHMgdG8gdGhlIGZyYWdtZW50IHNoYWRlciwgaWYgYW55Lgor
KyAgICBpZiAoKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSAmJgorKyAg
ICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50KSkKKysgICAgeworKyAgICAgICAgQXNzaWduT3V0cHV0TG9jYXRpb25zKHBy
b2dyYW1FeGVjdXRhYmxlLCBnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6
RnJhZ21lbnRdKTsKKysgICAgfQorKworKyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0aGUg
dmVydGV4IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRl
clR5cGU6OlZlcnRleCkgJiYKKysgICAgICAgIHByb2dyYW1FeGVjdXRhYmxlLmhhc0xpbmtlZFNo
YWRlclN0YWdlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgpKQorKyAgICB7CisrICAgICAgICBBc3Np
Z25BdHRyaWJ1dGVMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFibGUsIGdsOjpTaGFkZXJUeXBlOjpW
ZXJ0ZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZv
TWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisrICAgIH0KKysKKysgICAgaWYgKCFw
cm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFnZShnbDo6U2hhZGVyVHlwZTo6Q29t
cHV0ZSkpCisrICAgIHsKKysgICAgICAgIC8vIEFzc2lnbiB2YXJ5aW5nIGxvY2F0aW9ucy4KKysg
ICAgICAgIEFzc2lnblZhcnlpbmdMb2NhdGlvbnMob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUs
IHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKworKyAgICAgICAgaWYgKCFwcm9ncmFt
RXhlY3V0YWJsZS5nZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKCkuZW1wdHkoKSAm
JgorKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFuc2Zvcm1GZWVkYmFja0V4dGVuc2lv
biAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBBc3NpZ25UcmFuc2Zvcm1GZWVkYmFja0V4dGVuc2lvblF1YWxpZmllcnMo
CisrICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxlLCBwcm9ncmFtSW50ZXJmYWNlSW5m
by0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKysgICAgICAgICAgICAgICAgZ2w6OlNo
YWRlclR5cGU6OlZlcnRleCwgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6
VmVydGV4XSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgQXNzaWduVW5pZm9ybUJpbmRp
bmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJm
YWNlSW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7
CisrICAgIEFzc2lnblRleHR1cmVCaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFtRXhlY3V0YWJsZSwg
c2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKyAgICBBc3NpZ25Ob25UZXh0dXJlQmluZGluZ3Mo
b3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJ
bmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsK
Kyt9CisrCisgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VP
cHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCitAQCAtMzQ2Miw3
ICszNTE1LDggQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IEdsc2xhbmdTb3Vy
Y2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoCisgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLCBwcm9ncmFtU3RhdGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLCB2ZXJ0ZXhT
b3VyY2UsCistICAgICAgICAgICAgICAgICAgICAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2dsOjpT
aGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKysgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5m
b01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisrICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4pOworICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAoraW5kZXggMmJkMmM2MS4uNjAyNDhjZCAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAorKysr
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oCitAQCAtNTEs
NiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMKKyAgICAgYm9vbCBzdXBwb3J0
c1RyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgIGJvb2wgZW11bGF0ZVRy
YW5zZm9ybUZlZWRiYWNrICAgICAgICAgICA9IGZhbHNlOworICAgICBib29sIGVtdWxhdGVCcmVz
ZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKysgICAgYm9vbCB0cmFuc2Zvcm1GZWVk
YmFja0Vhcmx5UmV0dXJuICAgICAgID0gZmFsc2U7CisgfTsKKyAKKyB1c2luZyBTcGlydkJsb2Ig
PSBzdGQ6OnZlY3Rvcjx1aW50MzJfdD47CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbiBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2Fk
X2Z1bmN0aW9uc19kYXRhLmpzb24KK2luZGV4IDhjM2ZkMDUuLjdiY2RlZDAgMTAwNjQ0CistLS0g
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCisrKysgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCitAQCAtNjcyLDYg
KzY3Miw5IEBACisgICAgICJEMzJfRkxPQVRfUzhYMjRfVUlOVCI6IHsKKyAgICAgICAiR0xfVU5T
SUdORURfSU5UXzI0XzgiOiAiTG9hZEQyNFM4VG9EMzJGUzhYMjQiLAorICAgICAgICJHTF9VTlNJ
R05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKysgICAgfSwKKysgICAgIkQzMl9GTE9BVCI6
IHsKKysgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWREMjRTOFRvRDMyRiIKKyAgICAgfQor
ICAgfSwKKyAgICJHTF9SMzJJIjogeworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAoraW5kZXggMjBlNzA2Zi4uMmVmMDFj
YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJs
ZV9hdXRvZ2VuLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25z
X3RhYmxlX2F1dG9nZW4uY3BwCitAQCAtNDQ2LDggKzQ0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9u
SW5mbyBDT01QUkVTU0VEX1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9V
Tk9STV9CCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9D
SygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9D
SyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTQ3MSw4
ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQorICAgICB9CisgfQorIAorLUxvYWRJ
bWFnZUZ1bmN0aW9uSW5mbworLUNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0xP
U1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VOT1JNX0JMT0NLKEdMZW51bSB0eXBl
KQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVu
dW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTEzMTIsOCArMTMx
MCw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0VUQzJfdG9fUjhH
OEI4QThfVU5PUk1fU1JHQihHTGVudW0gdHlwZSkKKyAgICAgfQorIH0KKyAKKy1Mb2FkSW1hZ2VG
dW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19C
QzFfUkdCX1VOT1JNX1NSR0JfQkxPQ0soCistICAgIEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1
bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JD
MV9SR0JfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgeworQEAgLTEzMjUsOCArMTMyMiw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1f
CisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSygKKy0g
ICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSyhHTGVu
dW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTEzNTAsOSArMTM0
Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VH
SF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCisgICAgIH0KKyB9CisgCistTG9hZEltYWdl
RnVuY3Rpb25JbmZvCistQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0xPU1NZ
X0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VOT1JNX1NSR0JfQkxPQ0soCistICAgIEdM
ZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNI
VEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQkFfVU5PUk1f
U1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgewor
QEAgLTE1MTAsNiArMTUwNCwxOCBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gREVQVEhfQ09NUE9O
RU5UMjRfdG9fRDI0X1VOT1JNX1g4X1VJTlQoR0xlbnVtIHR5cGUpCisgICAgIH0KKyB9CisgCisr
TG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9BVChHTGVu
dW0gdHlwZSkKKyt7CisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CisrICAgICAgICAgICAgcmV0dXJuIExvYWRJbWFnZUZ1bmN0aW9uSW5m
byhMb2FkRDI0UzhUb0QzMkYsIHRydWUpOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1hZ2VGdW5jdGlvbklu
Zm8oVW5yZWFjaGFibGVMb2FkRnVuY3Rpb24sIHRydWUpOworKyAgICB9CisrfQorKworIExvYWRJ
bWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlO
VChHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKK0BAIC0zNjI0LDYgKzM2MzAs
OCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9TOF9VSU5UOworICAgICAgICAgICAgICAg
ICBjYXNlIEZvcm1hdElEOjpEMjRfVU5PUk1fWDhfVUlOVDoKKyAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5PUk1fWDhfVUlOVDsKKysgICAgICAg
ICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUOgorKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9BVDsKKyAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6CisgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZMT0FUX1M4WDI0X1VJTlQ7CisgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0JVSUxELmduIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCitp
bmRleCA4NjhjNDc2Li4wZDUwZDgxIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0JVSUxELmduCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQlVJTEQu
Z24KK0BAIC02LDcgKzYsNyBAQAorIAorIGltcG9ydCgiLi4vLi4vLi4vLi4vZ25pL2FuZ2xlLmdu
aSIpCisgCistYXNzZXJ0KGlzX21hYykKKythc3NlcnQoaXNfbWFjIHx8IGlzX2lvcykKKyBhc3Nl
cnQoYW5nbGVfZW5hYmxlX21ldGFsKQorIAorIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCitA
QCAtMjEsNiArMjEsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWworICAgIkRpc3BsYXlN
dGxfYXBpLmgiLAorICAgIkZyYW1lQnVmZmVyTXRsLmgiLAorICAgIkZyYW1lQnVmZmVyTXRsLm1t
IiwKKysgICJJT1N1cmZhY2VTdXJmYWNlTXRsLmgiLAorKyAgIklPU3VyZmFjZVN1cmZhY2VNdGwu
bW0iLAorICAgIlByb2dyYW1NdGwuaCIsCisgICAiUHJvZ3JhbU10bC5tbSIsCisgICAiUXVlcnlN
dGwuaCIsCitAQCAtNTIsNiArNTQsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWworICAg
Im10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSIsCisgICAibXRsX2Zvcm1hdF91dGlscy5oIiwK
KyAgICJtdGxfZm9ybWF0X3V0aWxzLm1tIiwKKysgICJtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIs
CisrICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKKyAgICJtdGxfZ2xzbGFuZ191dGlscy5o
IiwKKyAgICJtdGxfZ2xzbGFuZ191dGlscy5tbSIsCisgICAibXRsX29jY2x1c2lvbl9xdWVyeV9w
b29sLmgiLAorQEAgLTY1LDEyICs2OSwxMSBAQCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWwor
ICAgIm10bF91dGlscy5oIiwKKyAgICJtdGxfdXRpbHMubW0iLAorICAgInNoYWRlcnMvY29uc3Rh
bnRzLmgiLAorLSAgInNoYWRlcnMvZm9ybWF0X2F1dG9nZW4uaCIsCistICAic2hhZGVycy9tdGxf
ZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisrICAic2hhZGVycy9tdGxfZGVmYXVs
dF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIKKyBdCisgCisgY29uZmlnKCJhbmdsZV9tZXRhbF9i
YWNrZW5kX2NvbmZpZyIpIHsKKy0gIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwiIF0K
KysgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWIiBdCisgICBsZGZsYWdzID0gWworICAgICAiLXdlYWtfZnJhbWV3b3JrIiwKKyAgICAg
Ik1ldGFsIiwKK0BAIC05NiwxMiArOTksMTYgQEAgYW5nbGVfc291cmNlX3NldCgiYW5nbGVfbWV0
YWxfYmFja2VuZCIpIHsKKyAgICAgIiR7YW5nbGVfcm9vdH06bGliQU5HTEVfaGVhZGVycyIsCisg
ICBdCisgCistICBkZXBzID0gWyAiJHthbmdsZV9zcGlydl9jcm9zc19kaXJ9L2duOnNwaXJ2X2Ny
b3NzX3NvdXJjZXMiIF0KKysgIGRlcHMgPSBbCisrICAgICIkYW5nbGVfc3BpcnZfdG9vbHNfZGly
OnNwdnRvb2xzX3ZhbCIsCisrICAgICIke2FuZ2xlX3NwaXJ2X2Nyb3NzX2Rpcn0vZ246c3BpcnZf
Y3Jvc3Nfc291cmNlcyIsCisrICBdCisgCisgICBvYmpjX2ZsYWdzID0gWworICAgICAiLVduby1u
dWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAorICAgICAiLVduby11bmd1YXJkZWQtYXZhaWxhYmls
aXR5IiwKKyAgICAgIi1mbm8tb2JqYy1hcmMiLAorKyAgICAiLVduby1leHRyYS1zZW1pLXN0bXQi
LAorICAgXQorICAgY2ZsYWdzX29iamMgKz0gb2JqY19mbGFncworICAgY2ZsYWdzX29iamNjICs9
IG9iamNfZmxhZ3MKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVm
ZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKK2luZGV4
IDc2MjU0OWUuLjlmOWVjNmMgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJN
dGwuaAorQEAgLTE1MiwxMCArMTUyLDE1IEBAIGNsYXNzIEJ1ZmZlck10bCA6IHB1YmxpYyBCdWZm
ZXJJbXBsLCBwdWJsaWMgQnVmZmVySG9sZGVyTXRsCisgCisgICAgIENvbnZlcnNpb25CdWZmZXJN
dGwgKmdldFVuaWZvcm1Db252ZXJzaW9uQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsIHNpemVf
dCBvZmZzZXQpOworIAorKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0aGUgYnVmZmVyIGlzIG1vZGlm
ZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGljaXRseQorKyAgICAvLyBjYWxs
ZWQuCisrICAgIHZvaWQgbWFya0NvbnZlcnNpb25CdWZmZXJzRGlydHkoKTsKKysKKyAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1TdGF0ZS5nZXRT
aXplKCkpOyB9CisgCisgICBwcml2YXRlOgorICAgICBhbmdsZTo6UmVzdWx0IHNldERhdGFJbXBs
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJVc2Fn
ZSB1c2FnZSk7CitAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDogcHVibGlj
IEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwKKyAgICAgYW5nbGU6OlJlc3VsdCBj
b21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICAgYW5nbGU6
OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBzaXpl
X3Qgc2l6ZSk7CisgCistICAgIHZvaWQgbWFya0NvbnZlcnNpb25CdWZmZXJzRGlydHkoKTsKKy0K
KyAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7CisrCisgICAgIGJvb2wgY2xpZW50
U2hhZG93Q29weURhdGFOZWVkU3luYyhDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKKyAgICAgdm9p
ZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsK
KyAgICAgdWludDhfdCAqc3luY0FuZE9idGFpblNoYWRvd0NvcHkoQ29udGV4dE10bCAqY29udGV4
dE10bCk7CisgCisrICAgIC8vIENvbnZlbmllbnQgbWV0aG9kCisrICAgIGNvbnN0IHVpbnQ4X3Qg
KmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93Q29weURhdGEobXRsOjpHZXRJbXBs
KGNvbnRleHQpKTsKKysgICAgfQorICAgICAvLyBDbGllbnQgc2lkZSBzaGFkb3cgYnVmZmVyCisg
ICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7CisgCisgICAgIC8vIEdQVSBzaWRl
IGJ1ZmZlcnMgcG9vbAorICAgICBtdGw6OkJ1ZmZlclBvb2wgbUJ1ZmZlclBvb2w7CisgCistICAg
IC8vIEEgY2FjaGUgb2YgY29udmVydGVkIGJ1ZmZlciBkYXRhLgorKyAgICAvLyBBIGNhY2hlIG9m
IGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KKyAgICAgc3RkOjp2ZWN0b3I8VmVydGV4Q29udmVyc2lv
bkJ1ZmZlck10bD4gbVZlcnRleENvbnZlcnNpb25CdWZmZXJzOworIAorICAgICBzdGQ6OnZlY3Rv
cjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENvbnZlcnNpb25CdWZmZXJzOworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwubW0gYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1tCitpbmRleCA2NGM3ZGU4Li44MDk2
OTk2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5t
bQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbQorQEAgLTIz
LDYgKzIzLDEwIEBACisgLy8gU3RhcnQgd2l0aCBhIGZhaXJseSBzbWFsbCBidWZmZXIgc2l6ZS4g
V2UgY2FuIGluY3JlYXNlIHRoaXMgZHluYW1pY2FsbHkgYXMgd2UgY29udmVydCBtb3JlIGRhdGEu
CisgY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVudEFycmF5QnVmZmVySW5pdGlhbFNp
emUgPSAxMDI0ICogODsKKyAKKysvLyBUaGUgbWF4IHNpemUgdGhhdCB3ZSB3aWxsIHVzZSBidWZm
ZXIgcG9vbCBmb3IgZHluYW1pYyB1cGRhdGUuCisrLy8gSWYgdGhlIGJ1ZmZlciBzaXplIGV4Y2Vl
ZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUgYnVmZmVyIGluc3RlYWQgb2YgdXNp
bmcgdGhlIHBvb2wuCisrY29uc3RleHByIHNpemVfdCBrRHluYW1pY0J1ZmZlclBvb2xNYXhCdWZT
aXplID0gMTI4ICogMTAyNDsKKysKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgorIGFu
Z2xlOjpSZXN1bHQgR2V0Rmlyc3RMYXN0SW5kaWNlcyhjb25zdCBJbmRleFR5cGUgKmluZGljZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwKK0BAIC0x
MDUsNyArMTA5LDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW50ZW5kZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZm
ZXJVc2FnZSB1c2FnZSkKKyB7CistICAgIHJldHVybiBzZXREYXRhSW1wbChjb250ZXh0LCBkYXRh
LCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKysgICAgcmV0dXJuIHNldERhdGFJbXBsKGNvbnRleHQs
IHRhcmdldCwgZGF0YSwgaW50ZW5kZWRTaXplLCB1c2FnZSk7CisgfQorIAorIGFuZ2xlOjpSZXN1
bHQgQnVmZmVyTXRsOjpzZXRTdWJEYXRhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAg
LTE2NCw3ICsxNjgsOCBAQAorIHsKKyAgICAgaWYgKGFjY2VzcyAmIEdMX01BUF9JTlZBTElEQVRF
X0JVRkZFUl9CSVQpCisgICAgIHsKKy0gICAgICAgIEFOR0xFX1RSWShzZXREYXRhSW1wbChjb250
ZXh0LCBudWxscHRyLCBzaXplKCksIG1TdGF0ZS5nZXRVc2FnZSgpKSk7CisrICAgICAgICBBTkdM
RV9UUlkoc2V0RGF0YUltcGwoY29udGV4dCwgZ2w6OkJ1ZmZlckJpbmRpbmc6OkludmFsaWRFbnVt
LCBudWxscHRyLCBzaXplKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRl
LmdldFVzYWdlKCkpKTsKKyAgICAgfQorIAorICAgICBpZiAobWFwUHRyKQorQEAgLTM5NSw2ICs0
MDAsNyBAQAorIH0KKyAKKyBhbmdsZTo6UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUltcGwoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKQorQEAgLTQxMyw2ICs0MTks
MTMgQEAKKyAKKyAgICAgc2l6ZV90IGFkanVzdGVkU2l6ZSA9IHN0ZDo6bWF4PHNpemVfdD4oMSwg
aW50ZW5kZWRTaXplKTsKKyAKKysgICAgLy8gRW5zdXJlcyBubyB2YWxpZGF0aW9uIGxheWVyIGlz
c3VlcyBpbiBzdGQxNDAgd2l0aCBkYXRhIHR5cGVzIGxpa2UgdmVjMyBiZWluZyAxMiBieXRlcyB2
cyAxNgorKyAgICAvLyBpbiBNU0wuCisrICAgIGlmICh0YXJnZXQgPT0gZ2w6OkJ1ZmZlckJpbmRp
bmc6OlVuaWZvcm0pCisrICAgIHsKKysgICAgICAgIGFkanVzdGVkU2l6ZSA9IHJvdW5kVXBQb3cy
KGFkanVzdGVkU2l6ZSwgKHNpemVfdCkxNik7CisrICAgIH0KKysKKyAgICAgc2l6ZV90IG1heEJ1
ZmZlcnM7CisgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgIHsKK0BAIC00MjcsNyArNDQwLDcgQEAK
KyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgLy8gZHluYW1pYyBidWZmZXIsIGFsbG93
IHVwIHRvIDEwIHVwZGF0ZSBwZXIgZnJhbWUvZW5jb2Rpbmcgd2l0aG91dAorICAgICAgICAgICAg
IC8vIHdhaXRpbmcgZm9yIEdQVS4KKy0gICAgICAgICAgICBpZiAoYWRqdXN0ZWRTaXplIDw9IG10
bDo6a1NoYXJlZE1lbUJ1ZmZlck1heEJ1ZlNpemVIaW50KQorKyAgICAgICAgICAgIGlmIChhZGp1
c3RlZFNpemUgPD0ga0R5bmFtaWNCdWZmZXJQb29sTWF4QnVmU2l6ZSkKKyAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgIG1heEJ1ZmZlcnMgPSAxMDsKKyAgICAgICAgICAgICAgICAgbUJ1
ZmZlclBvb2wuc2V0QWx3YXlzVXNlU2hhcmVkTWVtKCk7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0NvbXBpbGVyTXRsLm1tCitpbmRleCBhNTg2NjcwLi4zZTI5YjRkIDEwMDY0NAorLS0t
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW0KK0BAIC0xMCw2ICsxMCw3IEBA
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLmgiCisgCisg
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCisgCisgbmFtZXNw
YWNlIHJ4CisgeworQEAgLTIwLDcgKzIxLDE2IEBACisgCisgU2hTaGFkZXJPdXRwdXQgQ29tcGls
ZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlKCkgY29uc3QKKyB7CisrICAgIGlmIChzaDo6
cmVhZEJvb2xFbnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9TUElSViIpKQorKyAgICB7CisrICAg
ICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBHTCBvdXRwdXQgZmlyc3QsIHdlIGNhbid0IGFjdHVh
bGx5CisrICAgICAgICAvLyBnZXQgTVNMIGNvZGUgdW50aWwgbGluayB0aW1lLiBUcmFuc2xhdGlv
biB0aW1lIGlzIHRvbyBlYXJseQorICAgICAgICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVU
OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIFNIX01TTF9NRVRB
TF9PVVRQVVQ7CisrICAgIH0KKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKK2luZGV4IDE2ODdjOGMuLjJmMzkzNzEgMTAw
NjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oCitAQCAtMjksOCArMjks
OCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bDsKKyBjbGFzcyBWZXJ0ZXhBcnJheU10bDsKKyBjbGFz
cyBQcm9ncmFtTXRsOworIGNsYXNzIFJlbmRlclRhcmdldE10bDsKKy1jbGFzcyBXaW5kb3dTdXJm
YWNlTXRsOworLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsOworK2NsYXNzIFN1cmZhY2VNdGxQ
cm90b2NvbDsKKytjbGFzcyBCdWZmZXJNdGw7CisgCisgY2xhc3MgQ29udGV4dE10bCA6IHB1Ymxp
YyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorIHsKK0BAIC04NSw3ICs4NSw3IEBA
IGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkgb3ZlcnJpZGU7CisgICAgIGFu
Z2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleEJhc2VJbnN0YW5jZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUs
CitAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJ
bXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50ICpiYXNlVmVy
dGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqYmFzZUluc3RhbmNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworKyAgICBhbmdsZTo6UmVzdWx0IGRyYXdF
bGVtZW50c1NpbXBsZVR5cGVzUHJpbWl0aXZlUmVzdGFydChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBpbnN0YW5jZXMpOworIAorICAgICAvLyBEZXZpY2UgbG9zcworICAgICBnbDo6R3JhcGhpY3NS
ZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRlOworQEAgLTE5Niw2ICsyMDIsOCBA
QCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CisgICAgIGNvbnN0IGdsOjpFeHRlbnNpb25zICZnZXROYXRpdmVFeHRlbnNpb25zKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgIGNvbnN0IGdsOjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRh
dGlvbnMoKSBjb25zdCBvdmVycmlkZTsKKyAKKysgICAgY29uc3QgUHJvZ3JhbU10bCAqZ2V0UHJv
Z3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1Qcm9ncmFtOyB9CisrCisgICAgIC8vIFNoYWRlciBjcmVh
dGlvbgorICAgICBDb21waWxlckltcGwgKmNyZWF0ZUNvbXBpbGVyKCkgb3ZlcnJpZGU7CisgICAg
IFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBv
dmVycmlkZTsKK0BAIC0yNDksMTIgKzI1NywyNCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGlj
IENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0xiaXRmaWVsZCBiYXJyaWVy
cykgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllckJ5UmVnaW9uKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxkIGJhcnJpZXJzKSBvdmVycmlkZTsK
KyAKKysgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygp
OworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKysgICAgYW5n
bGU6OlJlc3VsdCBvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soCisrICAgICAgICBzaXplX3QgYnVm
ZmVyQ291bnQsCisrICAgICAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJy
YXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKysKKysgICAgdm9pZCBvbkVuZFRyYW5zZm9ybUZl
ZWRiYWNrKCk7CisrICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7
CisrCisrICAgIHZvaWQgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCgKKysgICAg
ICAgIHNpemVfdCBidWZmZXJDb3VudCwKKysgICAgICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMpOworICAgICAvLyBvdmVycmlk
ZSBtdGw6OkVycm9ySGFuZGxlcgorICAgICB2b2lkIGhhbmRsZUVycm9yKEdMZW51bSBlcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAorICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBsaW5lKSBvdmVycmlkZTsKKy0gICAgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpf
TnVsbGFibGUgZXJyb3IsCisrICAgIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqZXJyb3IsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbGluZSkgb3ZlcnJpZGU7CitAQCAtMjcyLDEyICsyOTIsMTIgQEAgY2xhc3MgQ29udGV4
dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorICAgICB2b2lk
IG9uRHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyTXRs
ICpmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKKy0gICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKTsK
KysgICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpOworIAorICAgICAvLyBJbnZva2UgYnkg
UXVlcnlNdGwKKy0gICAgYW5nbGU6OlJlc3VsdCBvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSk7CistICAgIHZvaWQgb25PY2Ns
dXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5
KTsKKy0gICAgdm9pZCBvbk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKysgICAgYW5nbGU6OlJlc3VsdCBvbk9jY2x1c2lv
blF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSk7
CisrICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworKyAgICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSk7CisgCisgICAg
IC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9jY2x1c2lvbiBx
dWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCisgICAgIGJvb2wgaGFzQWN0aXZlT2Nj
bHVzaW9uUXVlcnkoKSBjb25zdCB7IHJldHVybiBtT2NjbHVzaW9uUXVlcnk7IH0KK0BAIC0zNjcs
NyArMzg3LDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGlj
IG10bDo6Q29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3Rh
bmNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNU
eXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQYXNz
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0Ry
YXcpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBmaXJzdCwKK0BAIC00MTcsNiArNDM3LDE4IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMg
Q29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQpOworIAorKyAgICB2b2lkIGV4ZWNE
cmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworKworKyAgICB2b2lkIGV4ZWNEcmF3SW5kZXhlZElu
c3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZpbmRleEJ1ZmZlciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKTsK
KysKKyAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0
ZSk7CisgCisgICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVm
ZmVyTXRsLAorQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENv
bnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgIGFuZ2xlOjpSZXN1bHQgZmlsbERy
aXZlclhGQlVuaWZvcm1zKEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRpY2VzUGVySW5zdGFuY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBw
ZWRJbnN0YW5jZXMpOworKyAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5R3JhcGhpY3NUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
OworICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhTdGVuY2lsU3RhdGUoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVw
dGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBo
YW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworQEAgLTQ3
MCw2ICs1MDMsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJs
aWMgbXRsOjpDb250ZXh0CisgICAgICAgICBESVJUWV9CSVRfUkVOREVSX1BJUEVMSU5FLAorICAg
ICAgICAgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HLAorICAgICAgICAgRElSVFlf
QklUX1JBU1RFUklaRVJfRElTQ0FSRCwKKysgICAgICAgIERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSUywKKyAgICAgICAgIERJUlRZX0JJVF9NQVgsCisgICAgIH07CisgCitAQCAt
NDg4LDcgKzUyMiw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1
YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgIHVpbnQzMl90IHhmYkFjdGl2ZVVucGF1c2VkOwor
ICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3OworICAgICAgICAgLy8gTk9URTog
RXhwbGljaXQgcGFkZGluZy4gRmlsbCBpbiB3aXRoIHVzZWZ1bCBkYXRhIHdoZW4gbmVlZGVkIGlu
IHRoZSBmdXR1cmUuCistICAgICAgICBpbnQzMl90IHBhZGRpbmdbM107CisrICAgICAgICBpbnQz
Ml90IHBhZGRpbmdfMFszXTsKKyAKKyAgICAgICAgIGludDMyX3QgeGZiQnVmZmVyT2Zmc2V0c1s0
XTsKKyAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CitAQCAtNTA4LDEyICs1
NDIsMTUgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAorIAorICAgICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOworIAorLSAgICAg
ICAgZmxvYXQgcGFkZGluZzJbM107CisrICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5zdGFuY2VJ
RDsKKysKKysgICAgICAgIC8vIE5PVEU6IEV4cGxpY2l0IHBhZGRpbmcuIEZpbGwgaW4gd2l0aCB1
c2VmdWwgZGF0YSB3aGVuIG5lZWRlZCBpbiB0aGUgZnV0dXJlLgorKyAgICAgICAgaW50MzJfdCBw
YWRkaW5nXzFbMl07CisgICAgIH07CisgCisgICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCisg
ICAgIHsKKy0gICAgICAgIHVpbnQ4X3QgdmFsdWVzW3NpemVvZihmbG9hdCkgKiA0XTsKKysgICAg
ICAgIGZsb2F0IHZhbHVlc1s0XTsKKyAgICAgfTsKKyAKKyAgICAgbXRsOjpPY2NsdXNpb25RdWVy
eVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKK0BAIC01MjIsNiArNTU5LDEzIEBAIGNsYXNzIENv
bnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAg
bXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciBtUmVuZGVyRW5jb2RlcjsKKyAgICAgbXRsOjpCbGl0
Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOworICAgICBtdGw6OkNvbXB1dGVDb21tYW5kRW5j
b2RlciBtQ29tcHV0ZUVuY29kZXI7CisrICAgIC8vIFRPRE8oamN1bm5pbmdoYW0pOgorKyAgICAv
LyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJzdFZlcnRleCB0byBiZSBwYXNzZWQg
dG8KKysgICAgLy8gVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMuICBXZSBz
aG91bGQgc3dpdGNoCisrICAgIC8vIHRvIHVzaW5nIGdsX0Jhc2VWZXJ0ZXggLT4gYmFzZV92ZXJ0
ZXggaW4gTVNMCisrICAgIEdMaW50IG1YZmJCYXNlVmVydGV4OworKyAgICAvLyBDYWNoZSB0aGUg
Y3VycmVudCBkcmF3IGNhbGwncyB2ZXJ0ZXggY291bnQgYXMgd2VsbCB0byBzdXBwb3J0IGluc3Rh
bmNlZCBkcmF3IGNhbGxzCisrICAgIEdMdWludCBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5jZTsK
KyAKKyAgICAgLy8gQ2FjaGVkIGJhY2stZW5kIG9iamVjdHMKKyAgICAgRnJhbWVidWZmZXJNdGwg
Km1EcmF3RnJhbWVidWZmZXIgPSBudWxscHRyOworQEAgLTU1NCw2ICs1OTgsOCBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAg
IG10bDo6QnVmZmVyUG9vbCBtVHJpRmFuSW5kZXhCdWZmZXI7CisgICAgIC8vIG9uZSBidWZmZXIg
Y2FuIGJlIHJldXNlZCBmb3IgYW55IHN0YXJ0aW5nIHZlcnRleCBpbiBEcmF3QXJyYXlzKCkKKyAg
ICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyOworKyAgICAvLworKyAg
ICBtdGw6OkJ1ZmZlclBvb2wgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXI7CisgCisgICAgIC8vIER1
bW15IHRleHR1cmUgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3JtIGZlZWRiYWNrIG9ubHkgcGFzcy4K
KyAgICAgbXRsOjpUZXh0dXJlUmVmIG1EdW1teVhGQlJlbmRlclRleHR1cmU7CitAQCAtNTYyLDYg
KzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBt
dGw6OkNvbnRleHQKKyAKKyAgICAgRGVmYXVsdEF0dHJpYnV0ZSBtRGVmYXVsdEF0dHJpYnV0ZXNb
bXRsOjprTWF4VmVydGV4QXR0cmlic107CisgCisrICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBi
dWZmZXJzLgorKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgQnVmZmVyTXRsICo+IG1DdXJy
ZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzOworKworICAgICBJbmNvbXBsZXRlVGV4dHVyZVNl
dCBtSW5jb21wbGV0ZVRleHR1cmVzOworICAgICBib29sIG1JbmNvbXBsZXRlVGV4dHVyZXNJbml0
aWFsaXplZCA9IGZhbHNlOworIH07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0NvbnRleHRNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5tbQoraW5kZXggMjdlNjk3OC4uMzI4NTBjOSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5tbQorQEAgLTQ0LDI1ICs0NCw2IEBACisgY29uc3RleHByIHVp
bnQzMl90IGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJGcmFtZSA9IDEwOworICNlbmRpZgor
IAorLSNkZWZpbmUgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdfUFJPQykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBpZiAoIW1TdGF0
ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorLSAgICAgICAgLyogTm9ybWFsIGRyYXcgY2FsbCAqLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgRFJB
V19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgLyogRmlyc3QgcGFzczogd3Jp
dGUgdG8gWEZCIGJ1ZmZlcnMgaW4gdmVydGV4IHNoYWRlciwgZnJhZ21lbnQgc2hhZGVyIGluYWN0
aXZlICovICAgXAorLSAgICAgICAgRFJBV19QUk9DKHRydWUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAg
ICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorLSAgICAgICAgICAgIC8qIFNlY29uZCBwYXNzOiBmdWxsIHJhc3Rlcml6
YXRpb246IHZlcnRleCBzaGFkZXIgKyBmcmFnbWVudCBzaGFkZXIgYXJlIGFjdGl2ZS4gXAorLSAg
ICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRvIHN0YWdlIG91dHB1dCBidXQgd29u
J3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAorLSAgICAgICAgICAgIGludmFsaWRh
dGVSZW5kZXJQaXBlbGluZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIERSQVdfUFJPQyhmYWxzZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
LSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9CistCisgYW5nbGU6
OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHZlcnRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG10bDo6QnVmZmVyUG9vbCAqcG9vbCwKK0BAIC04NCw3ICs2NSw3IEBACisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCistYW5nbGU6OlJlc3Vs
dCBBbGxvY2F0ZUxpbmVMb29wQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKKyth
bmdsZTo6UmVzdWx0IEFsbG9jYXRlQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbmRpY2VzVG9S
ZXNlcnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZl
clBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
QnVmZmVyUmVmICpidWZmZXJPdXQsCitAQCAtMTA1LDEyICs4Niw3IEBAIGJvb2wgTmVlZFRvSW52
ZXJ0RGVwdGhSYW5nZShmbG9hdCBuZWFyLCBmbG9hdCBmYXIpCisgICAgIHJldHVybiBuZWFyID4g
ZmFyOworIH0KKyAKKy1ib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0
ZSAmZ2xTdGF0ZSkKKy17CistICAgIHJldHVybiBnbFN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tB
Y3RpdmVVbnBhdXNlZCgpICYmIGdsU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsK
Ky19CistCistc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRvU3RyaW5nKEdMc2l6ZWkgbGVuZ3Ro
LCBjb25zdCBjaGFyICptYXJrZXIpCisrc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRvQ3BwKEdM
c2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisgeworICAgICBzdGQ6OnN0cmluZyBj
cHBTdHJpbmc7CisgICAgIGlmIChsZW5ndGggPT0gMCkKK0BAIC0xNzMsNyArMTQ5LDcgQEAgYm9v
bCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAg
ICAgICAgICAgICAgICAgICB7aW5kZXhUeXBlT3JOb25lLCB2ZXJ0ZXhPckluZGV4Q291bnQsIGlu
ZGljZXMsIG1MaW5lTG9vcEluZGV4QnVmZmVyLCAwfSkpOworICAgICAgICAgfQorIAorLSAgICAg
ICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRsKSk7CisrICAg
ICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwsIGZhbHNl
KSk7CisgCisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0K
K0BAIC0xOTEsNyArMTY3LDggQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgbUNtZEJ1ZmZlcigmZGlzcGxheS0+Y21kUXVldWUo
KSksCisgICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZmZXIsIG1PY2NsdXNpb25RdWVyeVBv
b2wpLAorICAgICAgIG1CbGl0RW5jb2RlcigmbUNtZEJ1ZmZlciksCistICAgICAgbUNvbXB1dGVF
bmNvZGVyKCZtQ21kQnVmZmVyKQorKyAgICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlciks
CisrICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UoMCkKKyB7fQorIAorIENvbnRleHRN
dGw6On5Db250ZXh0TXRsKCkge30KK0BAIC0yMDgsNiArMTg1LDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIG1MaW5lTG9vcExh
c3RTZWdtZW50SW5kZXhCdWZmZXIuaW5pdGlhbGl6ZSh0aGlzLCAyICogc2l6ZW9mKHVpbnQzMl90
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsK
KysgICAgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuaW5pdGlhbGl6ZSh0aGlzLCAwLCBtdGw6OmtJ
bmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJzUGVyRnJhbWUpOworIAorICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTIyNywyMyArMjA2LDIwIEBA
IGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQor
IAorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZW5zdXJlSW5jb21wbGV0ZVRleHR1cmVzQ3Jl
YXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CistICAgIGlmIChBTkdMRV9MSUtF
TFkobUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkKKysgICAgaWYgKEFOR0xFX1VOTElL
RUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQorICAgICB7CistICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistICAgIH0KKy0gICAgY29uc3RleHByIGds
OjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNbXSA9IHtnbDo6VGV4dHVyZVR5cGU6
Ol8yRCwgZ2w6OlRleHR1cmVUeXBlOjpfM0QsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpfMkRBcnJheSwK
KysgICAgICAgIGNvbnN0ZXhwciBnbDo6VGV4dHVyZVR5cGUgc3VwcG9ydGVkVGV4dHVyZVR5cGVz
W10gPSB7CisrICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpfMkQsIGdsOjpUZXh0dXJlVHlw
ZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAorICAgICAgICAgICAgIGdsOjpUZXh0
dXJlVHlwZTo6Q3ViZU1hcH07CistICAgIGZvciAoZ2w6OlRleHR1cmVUeXBlIHRleFR5cGUgOiBz
dXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisrICAgICAgICBmb3IgKGF1dG8gdGV4VHlwZSA6IHN1cHBv
cnRlZFRleHR1cmVUeXBlcykKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKy0gICAgICAgIEFOR0xFX1RSWShtSW5jb21wbGV0ZVRleHR1cmVzLmdldEluY29t
cGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0ZXh0dXJlKSk7CistCist
ICAgICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsICAgICAgICAgICAgICAgICAgICAgID0gbXRs
OjpHZXRJbXBsKHRleHR1cmUpOworLSAgICAgICAgdGV4dHVyZU10bC0+Z2V0TmF0aXZlVGV4dHVy
ZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1cmUiOworKyAgICAgICAgICAgIEFO
R0xFX1VOVVNFRF9WQVJJQUJMRSh0ZXh0dXJlKTsKKysgICAgICAgICAgICBBTkdMRV9UUlkoCisr
ICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMuZ2V0SW5jb21wbGV0ZVRleHR1cmUo
Y29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUpKTsKKyAgICAgICAgIH0KKyAgICAg
ICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9IHRydWU7CistCisrICAgIH0KKyAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKK0BAIC0yODIsNyArMjU4
LDE3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0
YXRlKQorICAgICAgICAgICAgIHRoaXMsIHswLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY291bnQp
LCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsIDB9KSk7CisgICAgIH0KKyAKKy0gICAgQVNTRVJU
KCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKysgICAg
aWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgewor
KyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6
VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZSkpOworKyAgICAgICAgLy8gRHJhdyB3aXRoIHRoZSB6ZXJvIHN0YXJ0aW5nIGluZGV4IGJ1ZmZl
ciwgc2hpZnQgdGhlIHZlcnRleCBpbmRleCB1c2luZyBiYXNlVmVydGV4CisrICAgICAgICAvLyBp
bnN0YW5jZWQgZHJhdzoKKysgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFu
Y2VkQmFzZVZlcnRleChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
VExJbmRleFR5cGVVSW50MzIsIG1UcmlGYW5BcnJheXNJbmRleEJ1ZmZlciwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpbnN0YW5jZXMs
IGZpcnN0KTsKKysgICAgfQorIAorICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGds
OjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksCitAQCAtMzExLDE2ICsyOTcsMjMg
QEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUp
CisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpcnN0KSwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAorICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1UcmlGYW5JbmRleEJ1ZmZlci5j
b21taXQodGhpcykpOworKyAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0
aGlzLCBmYWxzZSkpOworIAorLSAgICBBU1NFUlQoIWdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZVVucGF1c2VkKCkpOworKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3
KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBp
bnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNU
eXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDApLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7CisgCisrICAgICAgICBleGVjRHJhd0lu
ZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQs
IE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQorICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IHZvaWQgKj4oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTsKKyAKKy0gICAg
bVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5J
bmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQpOworKyAgICBleGVjRHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworIAorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTM2OCwyMiArMzYxLDI3IEBAIGJv
b2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAg
ICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CisgICAgIHVpbnQzMl90IGdlbkluZGljZXND
b3VudCA9IGNvdW50ICsgMTsKKyAKKy0gICAgQU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZm
ZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwK
Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVm
ZmVyLCAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZl
ckZyb21Qb29sKHRoaXMsIGdlbkluZGljZXNDb3VudCwgJm1MaW5lTG9vcEluZGV4QnVmZmVyLCAm
Z2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2Vu
SWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxz
KCkuZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMoCisgICAgICAgICB0aGlzLCB7c3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGZpcnN0KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwg
Z2VuSWR4QnVmZmVyLAorICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKKyAK
Ky0gICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7CisrICAg
IEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcywgZmFsc2UpKTsKKyAK
Ky0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNl
ZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJp
bWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIG51
bGxwdHIsIHRydWUpKTsKKyAKKysgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQ
cmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQz
MiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklk
eEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQorICAgICBBTkdMRV9UUlkoc2V0dXBE
cmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lTG9vcCwgZmlyc3QsIGNvdW50LCBp
bnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6
OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOworIAorLSAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2Vz
Q291bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4
VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCistICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisrICAgIGV4ZWNEcmF3
SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworIAorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTQxMywyMSArNDExLDMzIEBAIGJv
b2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIAor
ICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9k
ZSk7CisgCistI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFu
Y2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIFwKKy0gICAgICAgICAgICAg
ICAgICAgICAgICBudWxscHRyLCB4ZmJQYXNzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorLSAgICBpZiAoaW5zdGFuY2VzID09IDApICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCist
ICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygp
ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291bnQpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCistICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
Ky0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNv
dW50LCBpbnN0YW5jZUNvdW50KTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmICht
U3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisrICAgIHsKKysgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0
YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBl
OjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworKworKyAgICAgICAgaWYgKGluc3RhbmNl
cyA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBmcm9tIG5vcm1hbCBkcmF3QXJyYXlzKCkKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisr
ICAgICAgICB7CisrICAgICAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0KKyAgICAgfQorKyAgICBBTkdMRV9U
Ulkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6
RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
bnVsbHB0ciwgZmFsc2UpKTsKKyAKKy0gICAgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdfR0VORVJJ
Q19BUlJBWSkKKysgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorKyAgICB7CisrICAgICAgICAvLyBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpCisrICAgICAgICBt
UmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBleGVjRHJhd0luc3RhbmNlZChtdGxUeXBlLCBmaXJzdCwg
Y291bnQsIGluc3RhbmNlQ291bnQpOworKyAgICB9CisgCisgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyB9CitAQCAtNDgwLDE2ICs0OTAsMjUgQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXJPZmZzZXQs
ICZnZW5JbmRpY2VzQ291bnQpKTsKKyAKKyAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCkt
PmdldFV0aWxzKCkuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheSgKKy0gICAg
ICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4
QnVmZmVyT2Zmc2V0LCBwcmltaXRpdmVSZXN0YXJ0fSkpOworKyAgICAgICAgICAgIHRoaXMsIHt0
eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHBy
aW1pdGl2ZVJlc3RhcnR9LAorKyAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAKKy0g
ICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKysgICAg
ICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7Cisr
CisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwg
Z2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywgdHJ1ZSkpOworKwor
KyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJp
YW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNl
dCwgaW5zdGFuY2VzKTsKKysgICAgICAgIH0KKyAKKyAgICAgICAgIEFOR0xFX1RSWShzZXR1cERy
YXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBjb3VudCwgaW5z
dGFuY2VzLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLCBmYWxz
ZSkpOworIAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1
ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKysgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhU
eXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZl
ciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworIAorICAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAvLyBpZiAoY291bnQgPiAzKQorQEAgLTUz
MiwyNyArNTUxLDg3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlKQorICAgICAgICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zmc2V0OworICAg
ICAgICAgdWludDMyX3QgcmVzZXJ2ZWRJbmRpY2VzID0gY291bnQgKiAyOworICAgICAgICAgdWlu
dDMyX3QgZ2VuSW5kaWNlc0NvdW50OworLSAgICAgICAgQU5HTEVfVFJZKEFsbG9jYXRlTGluZUxv
b3BCdWZmZXJGcm9tUG9vbCh0aGlzLCByZXNlcnZlZEluZGljZXMsICZtTGluZUxvb3BJbmRleEJ1
ZmZlciwKKysgICAgICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIHJl
c2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZlciwgJmdlbklkeEJ1ZmZlck9mZnNl
dCkpOworIAorICAgICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5l
cmF0ZUxpbmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCisgICAgICAgICAgICAgdGhpcywg
e3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwg
cHJpbWl0aXZlUmVzdGFydH0sCisgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworIAor
LSAgICAgICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7Cisr
ICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNl
KSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBh
dXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29u
dGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0
eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywgdHJ1ZSkpOwor
KworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
TGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQsIGluc3RhbmNlcyk7CisrICAgICAgICB9CisgCisgICAgICAgICBBTkdMRV9UUlkoc2V0
dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lTG9vcCwgMCwgY291bnQsIGlu
c3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywgZmFs
c2UpKTsKKyAKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKE1U
TFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwKKy0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4
QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOworKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5z
dGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwgTVRMSW5k
ZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1
ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworIAorICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAvLyBpZiAoY291bnQgPj0gMikKKyAg
ICAgcmV0dXJuIGRyYXdFbGVtZW50c0luc3RhbmNlZChjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9k
ZTo6TGluZXMsIGNvdW50LCB0eXBlLCBpbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RhbmNlcyk7CisgfQorK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJh
d0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpCisr
eworKworKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7CisrICAgIHVpbnQzMl90IGdl
bklkeEJ1ZmZlck9mZnNldDsKKysgICAgdWludDMyX3QgcmVzZXJ2ZWRJbmRpY2VzID0gY291bnQ7
CisrICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisrICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1
ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1QcmltaXRpdmVSZXN0YXJ0QnVm
ZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIHN3aXRjaCAobW9kZSkKKysgICAgeworKyAg
ICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6UG9pbnRzOgorKyAgICAgICAgICAgIEFOR0xF
X1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9p
bnRzQnVmZmVyKAorKyAgICAgICAgICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMs
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCB0cnVlfSwKKysgICAgICAgICAgICAg
ICAgJmdlbkluZGljZXNDb3VudCkpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2Fz
ZSBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXM6CisrICAgICAgICAgICAgQU5HTEVfVFJZKGdldERp
c3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcigK
KysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAgICAgICAgICAgICAgICZnZW5JbmRp
Y2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgZ2w6OlByaW1p
dGl2ZU1vZGU6OlRyaWFuZ2xlczoKKysgICAgICAgICAgICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgp
LT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcigKKysg
ICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIs
IGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAgICAgICAgICAgICAgICZnZW5JbmRpY2Vz
Q291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
U3RvcDsKKysgICAgfQorKyAgICBBTkdMRV9UUlkobVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuY29t
bWl0KHRoaXMpKTsKKysgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxUeXBlID0gbXRsOjpHZXRQcmlt
aXRpdmVUeXBlKG1vZGUpOworKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRl
eHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwgdHJ1ZSkpOworKwor
KyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10bFR5cGUsICh1aW50MzJfdClnZW5J
bmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsK
KysgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvdW50
LCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CisrCisrICAgIGV4ZWNEcmF3SW5k
ZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRl
eFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysKKysgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOworK30KKyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdF
bGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCitAQCAt
NTYzLDcgKzY0Miw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlKQorIHsKKyAgICAgLy8gUmVhbCBpbnN0YW5jZXMgY291bnQuIFplcm8gbWVh
bnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCisgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3Vu
dCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CistCisgICAgIGlmIChtQ3VsbEFsbFBvbHln
b25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQorICAgICB7CisgICAgICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtNTc3LDE4ICs2NTUsMzkgQEAgYm9vbCBJc1Ry
YW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIHsKKyAg
ICAgICAgIHJldHVybiBkcmF3TGluZUxvb3BFbGVtZW50cyhjb250ZXh0LCBjb3VudCwgdHlwZSwg
aW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKy0KKyAgICAgbXRsOjpCdWZmZXJSZWYg
aWR4QnVmZmVyOworICAgICBzaXplX3QgY29udmVydGVkT2Zmc2V0ICAgICAgICAgICAgID0gMDsK
KyAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVkVHlwZSA9IHR5cGU7CisrICAgIHNp
emVfdCBjb252ZXJ0ZWRDb3VudCAgICAgICAgICAgICAgPSAoc2l6ZV90KWNvdW50OworIAorLSAg
ICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBj
b3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmNvbnZlcnRlZE9mZnNldCwgJmNvbnZlcnRlZFR5cGUpKTsKKysgICAg
QU5HTEVfVFJZKG1WZXJ0ZXhBcnJheS0+Z2V0SW5kZXhCdWZmZXIoY29udGV4dCwgdHlwZSwgbW9k
ZSwgY291bnQsIGluZGljZXMsICZpZHhCdWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQsICZjb252ZXJ0ZWRUeXBlLCAmY29u
dmVydGVkQ291bnQpKTsKKyAKKyAgICAgQVNTRVJUKGlkeEJ1ZmZlcik7CisgICAgIEFTU0VSVCgo
Y29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQpID09IDAp
OworKyAgICB1aW50MzJfdCBjb252ZXJ0ZWRDb3VudGkzMiA9ICh1aW50MzJfdCljb252ZXJ0ZWRD
b3VudDsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCAw
LCBjb252ZXJ0ZWRDb3VudGkzMiwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCB0cnVlKSk7Cisr
ICAgICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUo
bW9kZSk7CisgCistICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291
bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2UpKTsKKysgICAgICAgIE1UTEluZGV4
VHlwZSBtdGxJZHhUeXBlID0gbXRsOjpHZXRJbmRleFR5cGUoY29udmVydGVkVHlwZSk7CisrCisr
ICAgICAgICBpZiAoaW5zdGFuY2VzID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8g
Tm9ybWFsIGRyYXcKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxU
eXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZE9mZnNldCk7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gSW5zdGFuY2Vk
IGRyYXcKKysgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgY29u
dmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkT2Zmc2V0LCBpbnN0YW5jZUNvdW50KTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1v
ZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNl
KSk7CisgCisgICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0aXZl
VHlwZShtb2RlKTsKKyAKK0BAIC01OTcsMTIgKzY5NiwxMyBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgaWYgKGluc3RhbmNlcyA9
PSAwKQorICAgICB7CisgICAgICAgICAvLyBOb3JtYWwgZHJhdworLSAgICAgICAgbVJlbmRlckVu
Y29kZXIuZHJhd0luZGV4ZWQobXRsVHlwZSwgY291bnQsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwg
Y29udmVydGVkT2Zmc2V0KTsKKysgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKG10
bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOworICAgICB9Cisg
ICAgIGVsc2UKKyAgICAgeworICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKy0gICAgICAgIG1S
ZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKG10bFR5cGUsIGNvdW50LCBtdGxJZHhU
eXBlLCBpZHhCdWZmZXIsIGNvbnZlcnRlZE9mZnNldCwKKysgICAgICAgIGV4ZWNEcmF3SW5kZXhl
ZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVm
ZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zdGFuY2VDb3VudCk7CisgICAgIH0KKyAKK0BAIC02MjUsNyArNzI1LDYgQEAgYm9vbCBJc1Ry
YW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGlj
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKKyAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyB9CitAQCAt
NjQ5LDEwICs3NDgsOSBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkKKyB7CistICAgIC8vIE5P
VEUoaHFsZSk6IEVTIDMuMgorICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpTdG9wOworIH0KK0BAIC02NjksNyArNzY3LDYgQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIFVOSU1QTEVNRU5U
RUQoKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgfQorLQorIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0x1aW50IHN0YXJ0LAorQEAgLTY5MCw3ICs3ODcsNiBAQCBib29sIElzVHJhbnNm
b3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRp
Y2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKKyAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyB9
CitAQCAtNzEzLDYgKzgwOSw2NCBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0
IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7Cisg
fQorIAorK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlw
ZSBwcmltaXRpdmVUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgdmVydGV4U3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGluc3RhbmNlcykKKyt7CisrICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZCkKKysgICAgeworKyAgICAg
ICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZChwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFy
dCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7Cisr
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KHByaW1pdGl2ZVR5cGUsIHZlcnRleFN0YXJ0LCB2
ZXJ0ZXhDb3VudCk7CisrICAgICAgICBmb3IgKHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5z
dGFuY2VzOyArK2luc3QpCisrICAgICAgICB7CisrICAgICAgICAgICAgbURyaXZlclVuaWZvcm1z
LmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisrCisrICAgICAgICAgICAgbVJlbmRlckVuY29k
ZXIuc2V0VmVydGV4RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmlu
ZGluZ0luZGV4KTsKKysKKysgICAgICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7CisrCisrICAgICAgICAgICAgbVJlbmRl
ckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQpOwor
KyAgICAgICAgfQorKyAgICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQgdG8gemVybworKyAgICAg
ICAgbVZlcnRleEFycmF5LT5lbXVsYXRlSW5zdGFuY2VEcmF3U3RlcCgmbVJlbmRlckVuY29kZXIs
IDApOworKyAgICB9CisrfQorKworK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbmRleGVkSW5z
dGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbmRleENvdW50LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpC
dWZmZXJSZWYgJmluZGV4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKQorK3sKKysgICAgaWYgKGdldERp
c3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVk
KQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChw
cmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbVJlbmRlckVuY29k
ZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhUeXBlLCBpbmRl
eEJ1ZmZlciwgYnVmZmVyT2Zmc2V0KTsKKysgICAgICAgIGZvciAodWludDMyX3QgaW5zdCA9IDE7
IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtRHJp
dmVyVW5pZm9ybXMuZW11bGF0ZWRJbnN0YW5jZUlEID0gaW5zdDsKKysKKysgICAgICAgICAgICBt
UmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVy
VW5pZm9ybXNCaW5kaW5nSW5kZXgpOworKworKyAgICAgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11
bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCBpbnN0KTsKKysKKysgICAgICAg
ICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50
LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisrICAgICAgICB9CisrICAgICAgICAvLyBSZXNldCBp
bnN0YW5jZSBJRCB0byB6ZXJvCisrICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisrICAgIH0KKyt9CisrCisgYW5nbGU6OlJl
c3VsdCBDb250ZXh0TXRsOjptdWx0aURyYXdBcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1p
dGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHTGludCAqZmlyc3RzLAorQEAgLTgwMiwxNSArOTU2LDE1IEBAIGJvb2wgSXNUcmFu
c2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIC8vIEVYVF9kZWJ1
Z19tYXJrZXIKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKEdM
c2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisgeworKyAgICBtQ21kQnVmZmVyLmlu
c2VydERlYnVnU2lnbihDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsKKyAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKyBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFy
a2VyKQorIHsKKy0gICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9T
dHJpbmcobGVuZ3RoLCBtYXJrZXIpKTsKKysgICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChD
b252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0KKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnBvcEdy
b3VwTWFya2VyKCkKKyB7CisgICAgIG1DbWRCdWZmZXIucG9wRGVidWdHcm91cCgpOworQEAgLTEx
NTUsMTAgKzEzMDksMTIgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgeworICAgICByZXR1cm4gbmV3IFF1ZXJ5TXRsKHR5cGUpOworIH0K
KysKKyBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRlRmVuY2VOVigpCisgeworICAgICBy
ZXR1cm4gbmV3IEZlbmNlTlZNdGwoKTsKKyB9CisrCisgU3luY0ltcGwgKkNvbnRleHRNdGw6OmNy
ZWF0ZVN5bmMoKQorIHsKKyAgICAgcmV0dXJuIG5ldyBTeW5jTXRsKCk7CitAQCAtMTIwNSw2ICsx
MzYxLDY5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZn
bFN0YXRlKQorICAgICByZXR1cm4gbnVsbHB0cjsKKyB9CisgCisrdm9pZCBDb250ZXh0TXRsOjpp
bnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCisreworKyAgICBpZiAo
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFi
bGVkKQorKyAgICB7CisrICAgICAgICBtRGlydHlCaXRzLnNldChESVJUWV9CSVRfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlMpOworKyAgICB9CisrfQorKworK3ZvaWQgQ29udGV4dE10bDo6b25U
cmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgp
LT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7
CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKysgICAgfQorK30KKysKKyth
bmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKysgICAg
c2l6ZV90IGJ1ZmZlckNvdW50LAorKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQorK3sKKysgICAgb25UcmFuc2Zvcm1GZWVk
YmFja1N0YXRlQ2hhbmdlZCgpOworKworKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7
IGJ1ZmZlckluZGV4IDwgYnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisrICAgIHsKKysgICAg
ICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycy5jb3VudChidWZmZXJzW2J1
ZmZlckluZGV4XSkgIT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBlbmRFbmNvZGluZyht
UmVuZGVyRW5jb2Rlcik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0K
KysKKysgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldChidWZmZXJDb3VudCwg
YnVmZmVycyk7CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9Cisr
Cisrdm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KAor
KyAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMpCisreworKyAgICBmb3IgKHNpemVf
dCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVmZmVyQ291bnQ7ICsrYnVmZmVySW5k
ZXgpCisrICAgIHsKKysgICAgICAgIG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLmlu
c2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisrICAgIH0KKyt9CisrCisrdm9pZCBDb250ZXh0
TXRsOjpvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKKyt7CisrICAgIGlmIChnZXREaXNwbGF5KCkt
PmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisrICAgIHsK
KysgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKysgICAgfQorK30K
KysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
CisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zv
cm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBvblRyYW5zZm9ybUZlZWRiYWNr
U3RhdGVDaGFuZ2VkKCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRpc3BhdGNoQ29tcHV0ZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWSwKK0BAIC0xMzMxLDYgKzE1NTAs
MTEgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldFBpeGVsRm9ybWF0KGFuZ2xlRm9ybWF0
SWQpOworIH0KKyAKKytjb25zdCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2
ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAorK3sKKysgICAgcmV0
dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhtdGxGb3JtYXQpOworK30KKysK
KyAvLyBTZWUgbXRsOjpGb3JtYXRUYWJsZTo6Z2V0VmVydGV4Rm9ybWF0KCkKKyBjb25zdCBtdGw6
OlZlcnRleEZvcm1hdCAmQ29udGV4dE10bDo6Z2V0VmVydGV4Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJ
RCBhbmdsZUZvcm1hdElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBjb25zdAorQEAgLTEzMzgsMTEgKzE1
NjIsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xT
dGF0ZSkKKyAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVydGV4Rm9ybWF0KGFuZ2xlRm9y
bWF0SWQsIHRpZ2h0bHlQYWNrZWQpOworIH0KKyAKKy1jb25zdCBtdGw6OkZvcm1hdENhcHMgJkNv
bnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0KSBj
b25zdAorLXsKKy0gICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyht
dGxGb3JtYXQpOworLX0KKy0KKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmdldEluY29tcGxl
dGVUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
KnRleHR1cmVPdXQpCitAQCAtMTM2Miw2ICsxNTgxLDIyIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIAorICAgICAvLyBSZXNvbHZlIHZp
c2liaWxpdHkgcmVzdWx0cworICAgICBtT2NjbHVzaW9uUXVlcnlQb29sLnJlc29sdmVWaXNpYmls
aXR5UmVzdWx0cyh0aGlzKTsKKysKKysgICAgbUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnMuY2xlYXIoKTsKKysKKysgICAgLy8gUmVzZXQgc2VyaWFscyBmb3IgWEZCIGlmIGFjdGl2ZS4K
KysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysg
ICAgeworKyAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0g
bVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisrICAgICAgICBBU1NFUlQoZXhlY3V0YWJs
ZSk7CisrICAgICAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrCisrICAgICAgICBUcmFuc2Zvcm1GZWVkYmFj
a010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorKyAgICAgICAgICAgIG10bDo6R2V0SW1wbCht
U3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworKworKyAgICAgICAgcG9wdWxh
dGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdl
dEJ1ZmZlckhhbmRsZXMoKSk7CisrICAgIH0KKyB9CisgCisgdm9pZCBDb250ZXh0TXRsOjplbmRF
bmNvZGluZyhib29sIGZvcmNlU2F2ZVJlbmRlclBhc3NDb250ZW50KQorQEAgLTEzOTAsNyArMTYy
NSw3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0
YXRlKQorIAorIHZvaWQgQ29udGV4dE10bDo6Zmx1c2hDb21tYW5kQnVmZXIoKQorIHsKKy0gICAg
aWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisrICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgpKQor
ICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0KK0BAIC0xNDU0LDYgKzE2ODksMjcgQEAg
Ym9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisg
ICAgIC8vIE5lZWQgdG8gcmUtYXBwbHkgZXZlcnl0aGluZyBvbiBuZXh0IGRyYXcgY2FsbC4KKyAg
ICAgbURpcnR5Qml0cy5zZXQoKTsKKyAKKysgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9
IGdldERpc3BsYXkoKS0+Z2V0TWV0YWxEZXZpY2UoKTsKKysgICAgaWYgKG10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2UpKQorKyAgICB7CisrICAgICAgICBN
VExSZW5kZXJQYXNzRGVzY3JpcHRvciAqb2JqQ0Rlc2MgPSBbTVRMUmVuZGVyUGFzc0Rlc2NyaXB0
b3IgcmVuZGVyUGFzc0Rlc2NyaXB0b3JdOworKyAgICAgICAgZGVzYy5jb252ZXJ0VG9NZXRhbERl
c2Mob2JqQ0Rlc2MpOworKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXplID0gbXRsOjpHZXRNYXhS
ZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisrICAgICAgICBO
U1VJbnRlZ2VyIHJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAgICAgIENvbXB1dGVUb3RhbFNp
emVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Iob2JqQ0Rlc2MsIHRoaXMsIG1ldGFsRGV2
aWNlKTsKKysgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6ZSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBOU1N0cmluZyAqZXJyb3JTdHJpbmcgPQorKyAgICAgICAgICAgICAg
ICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRlciB0YXJnZXRz
IHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBkZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5
dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNp
Z25lZCBsb25nKXJlbmRlclRhcmdldFNpemUsICh1bnNpZ25lZCBsb25nKW1heFNpemVdOworKyAg
ICAgICAgICAgIE5TRXJyb3IgKmVyciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZh
bGlkYXRpb25FcnJvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGU6LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlckluZm86QHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5IDogZXJyb3JTdHJpbmd9XTsK
KysgICAgICAgICAgICB0aGlzLT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5D
VElPTiwgX19MSU5FX18pOworKyAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICB9Cisr
ICAgIH0KKyAgICAgcmV0dXJuICZtUmVuZGVyRW5jb2Rlci5yZXN0YXJ0KGRlc2MpOworIH0KKyAK
K0BAIC0xNDY3LDkgKzE3MjMsMTAgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25z
dCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgICAgIG10bDo6UmVuZGVyUGFzc0Rlc2MgcnBEZXNj
OworIAorLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0
dXJlVGFyZ2V0OworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5sZXZlbCAgICAgICAg
PSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1sw
XS5zbGljZU9yRGVwdGggPSBpbmRleC5oYXNMYXllcigpID8gaW5kZXguZ2V0TGF5ZXJJbmRleCgp
IDogMDsKKysgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0
dXJlID0gdGV4dHVyZVRhcmdldDsKKysgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVu
ZGVyVGFyZ2V0LT5sZXZlbCAgID0gaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKTsKKysgICAgcnBEZXNj
LmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPQorKyAgICAg
ICAgaW5kZXguaGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgIHJw
RGVzYy5udW1Db2xvckF0dGFjaG1lbnRzID0gMTsKKyAgICAgcnBEZXNjLnNhbXBsZUNvdW50ICAg
ICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgCitAQCAtMTUzNiwxMiArMTc5Mywx
MiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0
ZSkKKyAKKyB2b2lkIENvbnRleHRNdGw6OmVuc3VyZUNvbW1hbmRCdWZmZXJSZWFkeSgpCisgewor
LSAgICBpZiAoIW1DbWRCdWZmZXIucmVhZHkoKSkKKysgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlk
KCkpCisgICAgIHsKKyAgICAgICAgIG1DbWRCdWZmZXIucmVzdGFydCgpOworICAgICB9CisgCist
ICAgIEFTU0VSVChtQ21kQnVmZmVyLnJlYWR5KCkpOworKyAgICBBU1NFUlQobUNtZEJ1ZmZlci52
YWxpZCgpKTsKKyB9CisgCisgdm9pZCBDb250ZXh0TXRsOjp1cGRhdGVWaWV3cG9ydChGcmFtZWJ1
ZmZlck10bCAqZnJhbWVidWZmZXJNdGwsCitAQCAtMTY3Nyw3ICsxOTM0LDcgQEAgYm9vbCBJc1Ry
YW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyB9
CisgCistdm9pZCBDb250ZXh0TXRsOjpvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorK3ZvaWQgQ29udGV4
dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3Vy
ZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKQorIHsKKyAgICAgY29uc3QgZ2w6OlN0YXRlICZn
bFN0YXRlICAgID0gZ2V0U3RhdGUoKTsKKyAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVy
ID0gbXRsOjpHZXRJbXBsKGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworQEAgLTE2ODYs
MTAgKzE5NDMsMTMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3Rh
dGUgJmdsU3RhdGUpCisgICAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgICAgdXBkYXRlVmll
d3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXROZWFy
UGxhbmUoKSwKKysgICAgICAgICAgICAgICAgICAgZ2xTdGF0ZS5nZXRGYXJQbGFuZSgpKTsKKysg
ICAgdXBkYXRlU2Npc3NvcihnbFN0YXRlKTsKKyAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2Vk
U3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25PY2Ns
dXNpb25RdWVyeUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVl
cnkpCisgeworICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOworICAgICBt
T2NjbHVzaW9uUXVlcnkgPSBxdWVyeTsKK0BAIC0xNzA2LDcgKzE5NjYsNyBAQCBib29sIElzVHJh
bnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy12b2lkIENvbnRleHRNdGw6Om9uT2Nj
bHVzaW9uUXVlcnlFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSkKKyt2b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorIHsKKyAgICAgQVNTRVJUKG1PY2NsdXNp
b25RdWVyeSA9PSBxdWVyeSk7CisgCitAQCAtMTcxOCw3ICsxOTc4LDcgQEAgYm9vbCBJc1RyYW5z
Zm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgICAgIG1PY2Ns
dXNpb25RdWVyeSA9IG51bGxwdHI7CisgfQorLXZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25R
dWVyeURlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkK
Kyt2b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyB7CisgICAgIGlmIChxdWVyeS0+Z2V0
QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CitAQCAtMTcyNiw3
ICsxOTg2LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgIH0KKyAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSA9PSBxdWVyeSkKKyAg
ICAgeworLSAgICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisrICAg
ICAgICBvbk9jY2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgcXVlcnkpOworICAgICB9CisgICAg
IG1PY2NsdXNpb25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsK
KyB9CitAQCAtMTc3MCwyMCArMjAzMCw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorIAorLXZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgVHJhbnNmb3JtRmVlZGJhY2tNdGwgKnhmYikK
Ky17CistICAgIC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJlbnQgcmVuZGVyIHBh
c3MgdG8gZW5hYmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCistICAgIC8vIGJ1ZmZlcnMg
Y291bGQgYmUgdXNlZCBhcyB2ZXJ0ZXggaW5wdXQuIENvbnNpZGVyIGEgYmV0dGVyIGFwcHJvYWNo
LgorLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpvblRy
YW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5z
Zm9ybUZlZWRiYWNrTXRsICp4ZmIpCisteworLSAgICAvLyBOT1RFKGhxbGUpOiBXZSBoYXZlIHRv
IGVuZCBjdXJyZW50IHJlbmRlciBwYXNzIHRvIGVuYWJsZSBzeW5jaHJvbml6YXRpb24gYmVmb3Jl
IFhGQgorLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25z
aWRlciBhIGJldHRlciBhcHByb2FjaC4KKy0gICAgZW5kRW5jb2RpbmcodHJ1ZSk7CistfQorLQor
IHZvaWQgQ29udGV4dE10bDo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50
UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCisgeworICAgICBlbnN1cmVDb21tYW5kQnVmZmVy
UmVhZHkoKTsKK0BAIC0xODQyLDEwICsyMDg4LDE5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFj
a09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGZiUGFzcykKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykK
KyB7CisgICAgIEFTU0VSVChtUHJvZ3JhbSk7CisgCisrICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0g
ZmVlZGJhY2sgb2Zmc2V0cyBvbiBldmVyeSBkcmF3IGNhbGwuCisrICAgIGlmIChtU3RhdGUuaXNU
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VS
VChmaXJzdFZlcnRleCAhPSAtMSk7CisrICAgICAgICBtWGZiQmFzZVZlcnRleCAgICAgICAgICAg
ICA9IGZpcnN0VmVydGV4OworKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2
ZXJ0ZXhPckluZGV4Q291bnQ7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsK
KysgICAgfQorKworICAgICAvLyBpbnN0YW5jZXM9MCBtZWFucyBubyBpbnN0YW5jZWQgZHJhdy4K
KyAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsK
KyAKK0BAIC0xODYyLDIwICsyMTE3LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGlydHlB
Y3RpdmVUZXh0dXJlcyhjb250ZXh0KSk7CisgICAgIH0KKyAKKy0gICAgaWYgKG1EaXJ0eUJpdHMu
dGVzdChESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEKSkKKy0gICAgeworLSAgICAgICAgaWYg
KGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCistICAgICAg
ICB7CistICAgICAgICAgICAgLy8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJl
bmRlciBwYXNzIHNpbmNlIHdlIGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgorLSAgICAgICAgICAg
IC8vIHRhcmdldCBpZiBvbmx5IFhGQiBpcyBuZWVkZWQuCistICAgICAgICAgICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgewor
LSAgICAgICAgICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOworLSAgICAgICAgfQorLSAg
ICB9CistCisgICAgIGlmICghbVJlbmRlckVuY29kZXIudmFsaWQoKSkKKyAgICAgeworICAgICAg
ICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworQEAgLTE4ODQsNyArMjEyNSwxMSBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAg
aWYgKG1EaXJ0eUJpdHMudGVzdChESVJUWV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCisgICAgIHsK
Ky0gICAgICAgIEFOR0xFX1RSWShoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29udGV4dCkpOworKyAg
ICAgICAgLy8gU3RhcnQgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIKKysgICAgICAgIEFOR0xF
X01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQo
Y29udGV4dCkpOworKworKyAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworKyAgICAgICAg
aW52YWxpZGF0ZVN0YXRlKGNvbnRleHQpOworICAgICB9CisgCisgICAgIGlmIChtT2NjbHVzaW9u
UXVlcnkgJiYgbU9jY2x1c2lvblF1ZXJ5UG9vbC5nZXROdW1SZW5kZXJQYXNzQWxsb2NhdGVkUXVl
cmllcygpID09IDApCitAQCAtMTg5NCwxNyArMjEzOSwxMSBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgIEFOR0xFX1RSWShz
dGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQYXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsK
KyAgICAgfQorIAorLSAgICBib29sIGlzUGlwZWxpbmVEZXNjQ2hhbmdlZDsKKy0gICAgQU5HTEVf
VFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgeGZiUGFzcywgJmlzUGlw
ZWxpbmVEZXNjQ2hhbmdlZCkpOworKyAgICBib29sIGNoYW5nZWRQaXBlbGluZTsKKysgICAgQU5H
TEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmNoYW5nZWRQaXBlbGluZSkpOworIAorICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGly
dHkgPSBmYWxzZTsKKy0KKy0gICAgaWYgKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRl
KCkpKQorLSAgICB7CistICAgICAgICAvLyBGaWx0ZXIgb3V0IHVubmVlZGVkIGRpcnR5IGJpdHMK
Ky0gICAgICAgIGZpbHRlck91dFhGQk9ubHlEaXJ0eUJpdHMoY29udGV4dCk7CistICAgIH0KKy0K
KyAgICAgZm9yIChzaXplX3QgYml0IDogbURpcnR5Qml0cykKKyAgICAgeworICAgICAgICAgc3dp
dGNoIChiaXQpCitAQCAtMTk1Myw4ICsyMTkyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFj
a09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIGNhc2UgRElSVFlf
QklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HOgorICAgICAgICAgICAgICAgICB1bmlmb3JtQnVm
ZmVyc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
Y2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6CisrICAgICAgICAgICAg
ICAgIEFOR0xFX1RSWShoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
RW11bGF0aW9uKGNvbnRleHQpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgorLSAgICAgICAgICAgICAgICAv
LyBBbHJlYWR5IGhhbmRsZWQuCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CitAQCAtMTk2Miw3MSAr
MjIwMywyMCBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAm
Z2xTdGF0ZSkKKyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICBpZiAoeGZiUGFzcyAmJiAhbURp
cnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQorLSAgICB7CistICAgICAg
ICAvLyBJZiBoYW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKCkgd2FzIG5vdCBjYWxsZWQgYW5kIHRo
aXMgaXMgWEZCIHBhc3MsIHdlIHN0aWxsIG5lZWQgdG8KKy0gICAgICAgIC8vIHVwZGF0ZSBYRkIg
cmVsYXRlZCB1bmlmb3JtcworLSAgICAgICAgQU5HTEVfVFJZKAorLSAgICAgICAgICAgIGZpbGxE
cml2ZXJYRkJVbmlmb3JtcyhmaXJzdFZlcnRleCwgdmVydGV4T3JJbmRleENvdW50LCAvKiogc2tp
cHBlZEluc3RhbmNlcyAqLyAwKSk7CistICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhE
YXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOwor
LSAgICB9CistCisgICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1Q
cm9ncmFtLT5zZXR1cERyYXcoY29udGV4dCwgJm1SZW5kZXJFbmNvZGVyLCBtUmVuZGVyUGlwZWxp
bmVEZXNjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVz
Y0NoYW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7CistCistICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKy19CistCistdm9pZCBDb250ZXh0TXRs
OjpmaWx0ZXJPdXRYRkJPbmx5RGlydHlCaXRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQor
LXsKKy0gICAgQVNTRVJUKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKTsKKy0K
Ky0gICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2ht
ZW50c1swXS50ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOworLQorLSAgICAvLyBJ
biB0cmFuc2Zvcm0gZmVlZGJhY2sgb25seSBwYXNzLCBvbmx5IHZlcnRleCBzaGFkZXIncyByZWxh
dGVkIHN0YXRlcyBhcmUgbmVlZGVkLgorLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJp
dHMgPQorLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9TVEVOQ0lM
X0RFU0MpIHwKKy0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfREVQVEhfQklB
UykgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX1NURU5DSUxfUkVGKSB8CistICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8
c2l6ZV90PihESVJUWV9CSVRfVklFV1BPUlQpIHwKKy0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90
PihESVJUWV9CSVRfU0NJU1NPUikgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0NVTExf
TU9ERSkgfAorLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9XSU5ESU5HKTsK
Ky0KKy0gICAgbURpcnR5Qml0cyAmPSB+a1VubmVlZGVkQml0czsKKy19CistCistYW5nbGU6OlJl
c3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpCisteworLSAgICBpZiAoIUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkp
CisrICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCisgICAgIHsKKy0gICAgICAgIC8vIFN0
YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNvZGVyCistICAgICAgICBBTkdMRV9NVExfVFJZKHRo
aXMsIG1EcmF3RnJhbWVidWZmZXItPmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnRleHQpKTsK
Ky0gICAgfQorLSAgICBlbHNlCistICAgIHsKKy0gICAgICAgIC8vIFhGQiBpcyBhY3RpdmUgYW5k
IHJhc3Rlcml6YXRpb24gaXMgZGlzYWJsZWQuIFVzZSBkdW1teSByZW5kZXIgdGFyZ2V0LgorLSAg
ICAgICAgLy8gV2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRoZSByZW5kZXIgcGFzcyB3aGVuIFhG
QiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcKKy0gICAgICAgIC8vIGEgc21hbGwg
ZHVtbXkgcmVuZGVyIHRhcmdldCB3b3VsZCBtYWtlIHRoZSByZW5kZXIgcGFzcyBlbmRpbmcgdmVy
eSBjaGVhcC4KKy0gICAgICAgIGlmICghbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkKKy0gICAgICAg
IHsKKy0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKHRo
aXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXRQaXhlbEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOEE4X1VOT1JNKSwKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIHRydWUs
IGZhbHNlLCAmbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOworLSAgICAgICAgfQorLSAgICAgICAg
bXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5jb2RlciA9IGdldFRleHR1cmVSZW5kZXJDb21t
YW5kRW5jb2RlcigKKy0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlLAorLSAgICAg
ICAgICAgIG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1h
Z2VJbmRleDo6TWFrZTJEKDApKSk7CistICAgICAgICBlbmNvZGVyLT5zZXRDb2xvckxvYWRBY3Rp
b24oTVRMTG9hZEFjdGlvbkRvbnRDYXJlLCBNVExDbGVhckNvbG9yKCksIDApOworLSAgICAgICAg
ZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRDYXJlKTsKKy0K
Ky0jaWZuZGVmIE5ERUJVRworLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFuc2Zvcm1G
ZWVkYmFja09ubHlQYXNzIik7CistI2VuZGlmCisrICAgICAgICBtdGw6OlJlbmRlclV0aWxzICZ1
dGlscyA9IGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsKKysgICAgICAgIGFuZ2xlOjpSZXN1bHQg
cmVzdWx0ID0KKysgICAgICAgICAgICB1dGlscy5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhj
b250ZXh0LCAmbVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MpOworKyAgICAgICAg
QU5HTEVfVU5VU0VEX1ZBUklBQkxFKHJlc3VsdCk7CisrICAgICAgICBhc3NlcnQocmVzdWx0ID09
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKysgICAgICAgIGNoYW5nZWRQaXBlbGluZSA9IHRy
dWU7CisgICAgIH0KKyAKKy0gICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworLSAgICBpbnZhbGlk
YXRlU3RhdGUoY29udGV4dCk7CisrICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNv
bnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVs
aW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ2hhbmdlZCwg
dW5pZm9ybUJ1ZmZlcnNEaXJ0eSwgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KSk7CisgCisgICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtMjAzNCwxMCArMjIyNCwxMCBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUgICAgICAgICAgICAgICAgPSBtU3RhdGU7CistICAgIGNvbnN0IGdsOjpQcm9ncmFtICpwcm9n
cmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFi
bGUoKTsKKyAKKyAgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJnRleHR1cmVzICAg
ICA9IGdsU3RhdGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworLSAgICBjb25zdCBnbDo6QWN0
aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJsZSgp
LmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1h
c2sgJmFjdGl2ZVRleHR1cmVzID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxlcnNNYXNrKCk7
CisgCisgICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCisgICAg
IHsKK0BAIC0yMDY3LDYgKzIyNTcsNyBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNv
bnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgfQorIAorICAgICBBU1NFUlQobVJlbmRlckVu
Y29kZXIudmFsaWQoKSk7CisrICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRGVm
YXVsdEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKKyAgICAg
bVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0dHJpYnV0ZXMsIG10bDo6a0Rl
ZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKKyAKKyAgICAgbURpcnR5RGVmYXVsdEF0dHJpYnNN
YXNrLnJlc2V0KCk7CitAQCAtMjEyMCw5ICsyMzExLDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyAgICAgbURyaXZlclVu
aWZvcm1zLmNvdmVyYWdlTWFzayA9IGNvdmVyYWdlTWFzazsKKyAKKy0gICAgQU5HTEVfVFJZKAor
LSAgICAgICAgZmlsbERyaXZlclhGQlVuaWZvcm1zKGRyYXdDYWxsRmlyc3RWZXJ0ZXgsIHZlcnRp
Y2VzUGVySW5zdGFuY2UsIC8qKiBza2lwcGVkSW5zdGFuY2VzICovIDApKTsKKy0KKyAgICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFn
bWVudERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRl
eCk7CisgICAgIG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBt
dGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CitAQCAtMjEzMCwyNSArMjMxOCwzMyBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0
VmVydGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHZlcnRpY2VzUGVySW5zdGFuY2UsCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZEluc3RhbmNlcykKKythbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNFbXVsYXRpb24oCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsK
Ky0gICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRl
KCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFt
RXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOwor
KyAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisgCistICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3Rp
dmVVbnBhdXNlZCA9IGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2Vk
KCk7CistICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2sgfHwgIW1Ecml2ZXJVbmlmb3Jtcy54ZmJB
Y3RpdmVVbnBhdXNlZCkKKysgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFj
a091dHB1dCgpIHx8ICFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQorICAgICB7
CisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0g
ICAgbURyaXZlclVuaWZvcm1zLnhmYlZlcnRpY2VzUGVyRHJhdyA9IHZlcnRpY2VzUGVySW5zdGFu
Y2U7CisrICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10
bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworKyAgICBz
aXplX3QgYnVmZmVyQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBleGVjdXRhYmxlLT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIGNvbnN0IGdsOjpUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlckhhbmRsZXMgPQorKyAg
ICAgICAgdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKKyAKKy0gICAg
VHJhbnNmb3JtRmVlZGJhY2tNdGwgKnRyYW5zZm9ybUZlZWRiYWNrTXRsID0gbXRsOjpHZXRJbXBs
KHRyYW5zZm9ybUZlZWRiYWNrKTsKKysgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBi
dWZmZXJJbmRleCA8IGJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorKyAgICB7CisrICAgICAg
ICBCdWZmZXJNdGwgKmJ1ZmZlckhhbmRsZSA9IGJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdOwor
KyAgICAgICAgQVNTRVJUKGJ1ZmZlckhhbmRsZSk7CisrICAgICAgICBBU1NFUlQobVJlbmRlckVu
Y29kZXIudmFsaWQoKSk7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRCdWZmZXJGb3JXcml0
ZSgKKysgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJIYW5kbGUtPmdl
dEN1cnJlbnRCdWZmZXIoKSwgMCwKKysgICAgICAgICAgICBtdGw6OmtUcmFuc2Zvcm1GZWVkYmFj
a0JpbmRpbmdJbmRleCArICh1aW50MzJfdClidWZmZXJJbmRleCk7CisrICAgIH0KKyAKKy0gICAg
cmV0dXJuIHRyYW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZmZXJPZmZzZXRzKHRoaXMsIGRyYXdD
YWxsRmlyc3RWZXJ0ZXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJ0aWNlc1Blckluc3RhbmNlICogc2tpcHBlZEluc3RhbmNlcywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJVbmlm
b3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworIH0KKyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhT
dGVuY2lsU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitAQCAtMjE1OSwxMyArMjM1
NSwxMyBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xT
dGF0ZSkKKyAgICAgbXRsOjpEZXB0aFN0ZW5jaWxEZXNjIGRzRGVzYyAgICAgICAgICAgICAgPSBt
RGVwdGhTdGVuY2lsRGVzYzsKKyAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmcmVuZGVy
UGFzc0Rlc2MgPSBtUmVuZGVyRW5jb2Rlci5yZW5kZXJQYXNzRGVzYygpOworIAorLSAgICBpZiAo
IXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRl
clBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIGRz
RGVzYy5kZXB0aFdyaXRlRW5hYmxlZCAgICA9IGZhbHNlOworICAgICAgICAgZHNEZXNjLmRlcHRo
Q29tcGFyZUZ1bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uQWx3YXlzOworICAgICB9CisgCist
ICAgIGlmICghcmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSkKKysgICAg
aWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsK
KyAgICAgICAgIGRzRGVzYy5mcm9udEZhY2VTdGVuY2lsLnJlc2V0KCk7CisgICAgICAgICBkc0Rl
c2MuYmFja0ZhY2VTdGVuY2lsLnJlc2V0KCk7CitAQCAtMjE5Niw4ICsyMzkyLDggQEAgYm9vbCBJ
c1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmlzUGlw
ZWxpbmVEZXNjQ2hhbmdlZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB4YmZQYXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQorIHsKKyAgICAg
QVNTRVJUKG1SZW5kZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtdGw6OlByaW1pdGl2ZVRvcG9s
b2d5Q2xhc3MgdG9wb2xvZ3lDbGFzcyA9IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhw
cmltaXRpdmVNb2RlKTsKK0BAIC0yMjE2LDI0ICsyNDEyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1G
ZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgcmVuZGVyUGFz
c0Rlc2MucG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MobUJsZW5kRGVzYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUmVu
ZGVyUGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworIAorLSAgICAgICAgaWYgKHhmYlBh
c3MpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUg
ZnJhZ21lbnQgc2hhZGVyLgorLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVy
aXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7
CistICAgICAgICB9CistICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2Fy
ZEVuYWJsZWQoKSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyBJZiBYRkIgaXMgbm90IGFj
dGl2ZSBhbmQgcmFzdGVyaXplciBkaXNjYXJkIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZW11bGF0
ZSB0aGUKKy0gICAgICAgICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVy
dGV4IHNoYWRlciBtaWdodCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAorLSAgICAg
ICAgICAgIC8vIE1ldGFsIGRvZXNuJ3QgYWxsb3cgcmFzdGVyaXphdGlvbiB0byBiZSBkaXNhYmxl
ZC4KKy0gICAgICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0K
Ky0gICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxh
dGVkRGlzY2FyZDsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0gbXRsOjpSZW5k
ZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVuYWJsZWQ7CistICAgICAgICB9CisgICAgICAgICBt
UmVuZGVyUGlwZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNz
OworKyAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9CisrICAg
ICAgICAgICAgKG1TdGF0ZS5pc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpID8gbXRsOjpSZW5k
ZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVS
YXN0ZXJpemF0aW9uOjpFbmFibGVkKTsKKyAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuYWxw
aGFUb0NvdmVyYWdlRW5hYmxlZCA9IG1TdGF0ZS5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJs
ZWQoKTsKKyAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuZW11bGF0ZUNvdmVyYWdlTWFzayAg
ICA9IG1TdGF0ZS5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworIAorQEAgLTIyNDEsNyArMjQy
Myw3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0
YXRlKQorICAgICAgICAgICAgIG1EcmF3RnJhbWVidWZmZXItPmdldFN0YXRlKCkuZ2V0RW5hYmxl
ZERyYXdCdWZmZXJzKCkpOworICAgICB9CisgCistICAgICppc1BpcGVsaW5lRGVzY0NoYW5nZWQg
PSBycHBDaGFuZ2U7CisrICAgICpwaXBlbGluZURlc2NDaGFuZ2VkID0gcnBwQ2hhbmdlOworIAor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCitpbmRleCBiMDBkZTFiLi4yNDE3MTIyIDEwMDY0NAor
LS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorKysrIGIvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorQEAgLTUyLDYgKzUyLDEwIEBA
IGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgZWdsOjpFcnJv
ciB3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICAg
ZWdsOjpFcnJvciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQg
ZW5naW5lKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihj
b25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykg
Y29uc3Qgb3ZlcnJpZGU7CisgCisgICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dTdXJmYWNl
KGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csCitAQCAtOTYsMTEgKzEw
MCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgYm9v
bCBpc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdCBv
dmVycmlkZTsKKyAKKy0gICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qg
b3ZlcnJpZGU7CistCisgICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92ZXJy
aWRlOworIAorICAgICBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7
CitAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUlt
cGwKKyAgICAgdm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0OworICAgICB2b2lkIGlu
aXRpYWxpemVUZXh0dXJlQ2FwcygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJl
cygpOworKyAgICB2b2lkIGluaXRpYWxpemVMaW1pdGF0aW9ucygpOworKworICAgICBhbmdsZTo6
UmVzdWx0IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CisgCisgICAgIG10bDo6QXV0b09iakNQ
dHI8aWQ8TVRMRGV2aWNlPj4gbU1ldGFsRGV2aWNlID0gbmlsOworZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KK2luZGV4IDI0N2Q3NmEuLjFkMTFjZDYgMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbQorKysrIGIvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KK0BAIC04LDEyICs4LDE0IEBA
CisgCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAK
KysjaW5jbHVkZSAiY29tbW9uL3N5c3RlbV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191
dGlsL1N5c3RlbUluZm8uaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9EaXNwbGF5LmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisg
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorQEAgLTIyLDkgKzI0LDYyIEBACisgCisgI2luY2x1
ZGUgIkVHTC9lZ2xleHQuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykg
fHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKytjb25zdGV4cHIgY2hhciBr
QU5HTEVQcmVmZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJSRURfREVWSUNFIjsKKysj
ZW5kaWYKKytjb25zdGV4cHIgY2hhciBrQU5HTEVUcmFuc2Zvcm1GZWVkYmFja0VudltdID0gIkFO
R0xFX01FVEFMX1hGQl9FTkFCTEUiOworKworIG5hbWVzcGFjZSByeAorIHsKKyAKKytzdGF0aWMg
RUdMaW50IEdldERlcHRoU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgorKyAgICAgICAgICAgIHJldHVybiAxNjsKKysgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMjQ6CisrICAgICAgICAgICAgcmV0dXJuIDI0OworKyAgICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVM6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAg
ICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiAyNDsK
KysgICAgICAgIGNhc2UgR0xfREVQVEgzMkZfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJu
IDMyOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShp
bnRlcm5hbGZvcm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisr
c3RhdGljIEVHTGludCBHZXRTdGVuY2lsU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7Cisr
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQyNDoKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAg
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDA7
CisrICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJu
IDg7CisrICAgICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorKyAgICAgICAgICAgIHJl
dHVybiA4OworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJM
RShpbnRlcm5hbGZvcm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9Cisr
CisgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgeworICAgICAvLyBXZSBvbmx5IHN1
cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0aGV5IGFyZSByZXF1aXJl
bWVudHMgZm9yIE1ldGFsIDIuMC4KK0BAIC01Nyw3ICsxMTIsNyBAQCBib29sIElzTWV0YWxEaXNw
bGF5QXZhaWxhYmxlKCkKKyB9OworIAorIERpc3BsYXlNdGw6OkRpc3BsYXlNdGwoY29uc3QgZWds
OjpEaXNwbGF5U3RhdGUgJnN0YXRlKQorLSAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVV0aWxz
KHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorKyAgICA6IERpc3BsYXlJbXBsKHN0
YXRlKSwgbVN0YXRlQ2FjaGUobUZlYXR1cmVzKSwgbVV0aWxzKHRoaXMpCisge30KKyAKKyBEaXNw
bGF5TXRsOjp+RGlzcGxheU10bCgpIHt9CitAQCAtNzgsMTAgKzEzMywyNyBAQCBib29sIElzTWV0
YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyB7CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAg
IHsKKy0gICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNl
KCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIGFuZ2xlUHJlZmVycmVkRGV2aWNlID0gYW5nbGU6OkdldEVudmlyb25t
ZW50VmFyKGtBTkdMRVByZWZlcnJlZERldmljZUVudik7CisrICAgICAgICBpZiAoYW5nbGVQcmVm
ZXJyZWREZXZpY2UgIT0gIiIpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNBcnJheTxpZDxN
VExEZXZpY2U+PiAqZGV2aWNlcyA9IFtNVExDb3B5QWxsRGV2aWNlcygpIEFOR0xFX01UTF9BVVRP
UkVMRUFTRV07CisrICAgICAgICAgICAgZm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZp
Y2VzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKFtkZXZpY2UubmFtZS5s
b3dlcmNhc2VTdHJpbmcKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIo
KV0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxvd2VyY2Fz
ZVN0cmluZ10pCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIE5TTG9n
KEAiVXNpbmcgTWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZpY2UgbmFtZV0pOworKyAgICAgICAgICAg
ICAgICAgICAgbU1ldGFsRGV2aWNlID0gW2RldmljZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOwor
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrI2VuZGlmCisgICAgICAgICBpZiAoIW1NZXRhbERldmljZSkK
KyAgICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysg
ICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgp
IEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICB9CisgCisgICAgICAgICBtTWV0YWxE
ZXZpY2VWZW5kb3JJZCA9IG10bDo6R2V0RGV2aWNlVmVuZG9ySWQobU1ldGFsRGV2aWNlKTsKK0BA
IC04OSwxMiArMTYxLDEzIEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICAg
ICAgbUNtZFF1ZXVlLnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV0pOworIAorICAgICAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZh
bHNlOworLQorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAgIGlmICghbUds
c2xhbmdJbml0aWFsaXplZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBHbHNsYW5nSW5pdGlh
bGl6ZSgpOworICAgICAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAg
ICAgfQorKyNlbmRpZgorIAorICAgICAgICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxl
ZCkKKyAgICAgICAgIHsKK0BAIC0xMjAsMTIgKzE5MywxMyBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworIAorICAgICBtTWV0
YWxEZXZpY2VWZW5kb3JJZCA9IDA7CistCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgor
ICAgICBpZiAobUdsc2xhbmdJbml0aWFsaXplZCkKKyAgICAgeworICAgICAgICAgR2xzbGFuZ1Jl
bGVhc2UoKTsKKyAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgfQor
KyNlbmRpZgorIH0KKyAKKyBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VMb3N0KCkKK0BAIC0x
NzEsNiArMjQ1LDE1IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICByZXR1
cm4gZWdsOjpOb0Vycm9yKCk7CisgfQorIAorK2VnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRh
dGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZm
ZXIgY2xpZW50QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisreworKyAgICAv
LyBUT0RPOiBGaWxsIG91dCBwcm9wZXJseQorKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cisr
fQorKworIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdE5hdGl2ZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwgRUdMaW50IGVuZ2luZSkKKyB7CisgICAgIFVOSU1QTEVNRU5URUQoKTsKK0BA
IC0xODcsNyArMjcwLDggQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgU3VyZmFj
ZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICByZXR1cm4g
bmV3IFBCdWZmZXJTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBhdHRyaWJzKTsKKysgICAgVU5JTVBM
RU1FTlRFRCgpOworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwgKj4oMCk7Cisg
fQorIAorIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1
ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMTk1LDE1ICsyNzksNyBA
QCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICBzd2l0Y2gg
KGJ1ZnR5cGUpCistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKyAg
ICAgcmV0dXJuIG5ldyBJT1N1cmZhY2VTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBjbGllbnRCdWZm
ZXIsIGF0dHJpYnMpOworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDoKKy0g
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworLSAgICB9CistICAgIHJldHVybiBudWxscHRyOwor
IH0KKyAKKyBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGl4bWFwU3VyZmFjZShjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMjQwLDE3ICszMTYsMTIgQEAgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKy1T
aGFyZUdyb3VwSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCgpCisteworLSAgICBy
ZXR1cm4gbmV3IFNoYXJlR3JvdXBNdGwoKTsKKy19CistCisgZ2w6OlZlcnNpb24gRGlzcGxheU10
bDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9uKCkgY29uc3QKKyB7CisgICAgIC8vIE5PVEUoaHFs
ZSk6IFN1cHBvcnRzIEdMRVMgMy4wIG9uIGlPUyBHUFUgZmFtaWx5IDQrIGZvciBub3cuCisgICAg
IGlmIChzdXBwb3J0c0VpdGhlckdQVUZhbWlseSg0LCAxKSkKKyAgICAgeworLSAgICAgICAgcmV0
dXJuIG10bDo6a01heFN1cHBvcnRlZEdMVmVyc2lvbjsKKysgICAgICAgIHJldHVybiBnbDo6VmVy
c2lvbigzLCAwKTsKKyAgICAgfQorICAgICByZXR1cm4gZ2w6OlZlcnNpb24oMiwgMCk7CisgfQor
QEAgLTI2NSw2ICszMzYsMTEgQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAg
IHJldHVybiBuZXcgRUdMU3luY010bChhdHRyaWJzKTsKKyB9CisgCisrU2hhcmVHcm91cEltcGwg
KkRpc3BsYXlNdGw6OmNyZWF0ZVNoYXJlR3JvdXAoKQorK3sKKysgICAgcmV0dXJuIG5ldyBTaGFy
ZUdyb3VwSW1wbCgpOworK30KKysKKyBlZ2w6OkVycm9yIERpc3BsYXlNdGw6Om1ha2VDdXJyZW50
KGVnbDo6RGlzcGxheSAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLAorQEAgLTMyNiw3ICs0MDIsNyBA
QCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgY29uZmlnLnRyYW5zcGFyZW50
VHlwZSA9IEVHTF9OT05FOworIAorICAgICAvLyBQYnVmZmVyCistICAgIGNvbmZpZy5iaW5kVG9U
ZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisrICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJl
VGFyZ2V0ID0gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgICBjb25maWcubWF4UEJ1
ZmZlcldpZHRoICAgICA9IDQwOTY7CisgICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0g
NDA5NjsKKyAgICAgY29uZmlnLm1heFBCdWZmZXJQaXhlbHMgICAgPSA0MDk2ICogNDA5NjsKK0BA
IC0zNjEsMTMgKzQzNyw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAg
ICBjb25maWcuY29sb3JDb21wb25lbnRUeXBlID0gRUdMX0NPTE9SX0NPTVBPTkVOVF9UWVBFX0ZJ
WEVEX0VYVDsKKyAKKy0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10gPSB7MCwg
NH07CistCistICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQorLSAgICB7
CistICAgICAgICBjb25maWcuc2FtcGxlcyAgICAgICA9IHNhbXBsZXM7CistICAgICAgICBjb25m
aWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7CistCisgICAgIC8vIEJ1
ZmZlciBzaXplcworICAgICBjb25maWcucmVkU2l6ZSAgICA9IDg7CisgICAgIGNvbmZpZy5ncmVl
blNpemUgID0gODsKK0BAIC0zNzUsMjggKzQ0NCwxMiBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZh
aWxhYmxlKCkKKyAgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgICBjb25maWcuYnVmZmVy
U2l6ZSA9IGNvbmZpZy5yZWRTaXplICsgY29uZmlnLmdyZWVuU2l6ZSArIGNvbmZpZy5ibHVlU2l6
ZSArIGNvbmZpZy5hbHBoYVNpemU7CisgCistICAgICAgICAvLyBXaXRoIERTCistICAgICAgICBj
b25maWcuZGVwdGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7
CistCistICAgICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBE
CistICAgICAgICBjb25maWcuZGVwdGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVu
Y2lsU2l6ZSA9IDA7CistICAgICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAg
Ly8gV2l0aCBTCistICAgICAgICBjb25maWcuZGVwdGhTaXplICAgPSAwOworLSAgICAgICAgY29u
ZmlnLnN0ZW5jaWxTaXplID0gODsKKysgICAgLy8gVGVzdHMgbGlrZSBkRVFQLUdMRVMyLmZ1bmN0
aW9uYWwuZGVwdGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJWkUgaXMgcHJvcGVybHkgc2V0
IGV2ZW4gaWYKKysgICAgLy8gcmVuZGVyQ29uZmlnIGF0dHJpYnV0ZXMgYXJlIHNldCB0byBnbHU6
OlJlbmRlckNvbmZpZzo6RE9OVF9DQVJFCisrICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IEdldERl
cHRoU2l6ZShjb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0KTsKKysgICAgY29uZmlnLnN0ZW5jaWxT
aXplID0gR2V0U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgIGNv
bmZpZ3MuYWRkKGNvbmZpZyk7CisgCistICAgICAgICAvLyBObyBEUworLSAgICAgICAgY29uZmln
LmRlcHRoU2l6ZSAgID0gMDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7CistICAg
ICAgICBjb25maWdzLmFkZChjb25maWcpOworLSAgICB9CistCisgICAgIHJldHVybiBjb25maWdz
OworIH0KKyAKK0BAIC00MDksMjYgKzQ2Miw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFi
bGUoKQorICAgICB9CisgfQorIAorLWVnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGll
bnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCistICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xp
ZW50QnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisteworLSAgICBzd2l0Y2gg
KGJ1ZnR5cGUpCistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKy0g
ICAgICAgICAgICBpZiAoIUlPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhj
bGllbnRCdWZmZXIsIGF0dHJpYnMpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg
cmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAg
ICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworLSAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZEF0dHJpYnV0ZSgpOworLSAgICB9Cist
ICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKKy19CistCisgc3RkOjpzdHJpbmcgRGlzcGxheU10
bDo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CisgeworICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQorQEAgLTUxMiwxMCArNTQ1LDE2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFi
bGUoKQorICAgICBtTmF0aXZlQ2Fwcy5tYXhSZW5kZXJidWZmZXJTaXplICAgPSBtTmF0aXZlQ2Fw
cy5tYXgyRFRleHR1cmVTaXplOworICAgICBtTmF0aXZlQ2Fwcy5taW5BbGlhc2VkUG9pbnRTaXpl
ICAgPSAxOworICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMgc29tZSBwcm9ibGVtcyBkcmF3
aW5nIGJpZyBwb2ludCBzaXplIGV2ZW4gdGhvdWdoCistICAgIC8vIE1ldGFsLUZlYXR1cmUtU2V0
LVRhYmxlcy5wZGYgc2F5cyB0aGF0IG1heCBzdXBwb3J0ZWQgcG9pbnQgc2l6ZSBpcyA1MTEuIFdl
IGxpbWl0IGl0IHRvIDY0IGZvcgorLSAgICAvLyBub3cuCistICAgIC8vIGh0dHA6Ly9hbmdsZWJ1
Zy5jb20vNDgxNgorKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhh
dCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKysg
ICAgLy8gb24gSW50ZWwgYW5kIDY0IG9uIEFNRCBmb3Igbm93LgorKyAgICBpZiAoW21NZXRhbERl
dmljZS5nZXQoKS5uYW1lIHJhbmdlT2ZTdHJpbmc6QCJJbnRlbCJdLmxvY2F0aW9uICE9IE5TTm90
Rm91bmQpCisrICAgIHsKKysgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNpemUg
PSAyNTU7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisgICAgICAgICBtTmF0aXZlQ2Fwcy5t
YXhBbGlhc2VkUG9pbnRTaXplID0gNjQ7CisrICAgIH0KKyAKKyAgICAgbU5hdGl2ZUNhcHMubWlu
QWxpYXNlZExpbmVXaWR0aCA9IDEuMGY7CisgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5l
V2lkdGggPSAxLjBmOworQEAgLTYxNSw2ICs2NTQsOSBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZh
aWxhYmxlKCkKKyAgICAgbU5hdGl2ZUNhcHMubWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNv
bXBvbmVudHMgPQorICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFt
X2JpbmFyeQorKyAgICBtTmF0aXZlQ2Fwcy5wcm9ncmFtQmluYXJ5Rm9ybWF0cy5wdXNoX2JhY2so
R0xfUFJPR1JBTV9CSU5BUllfQU5HTEUpOworKworICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3Rh
bmNlCisgICAgIG1OYXRpdmVDYXBzLm1heENsaXBEaXN0YW5jZXMgPSA4OworIAorQEAgLTY0Nyw2
ICs2ODksMTUgQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIG1OYXRpdmVF
eHRlbnNpb25zLnRleHR1cmVCb3JkZXJDbGFtcE9FUyAgPSBmYWxzZTsgIC8vIG5vdCBpbXBsZW1l
bnRlZCB5ZXQKKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9
IHRydWU7CisgICAgIG1OYXRpdmVFeHRlbnNpb25zLmRpc2NhcmRGcmFtZWJ1ZmZlciAgICAgPSB0
cnVlOworKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQgYnV0IGV4cG9zZQorKyAgICBtTmF0aXZlRXh0
ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKysKKysgICAgLy8gRVhUX211bHRpc2Ft
cGxlZF9yZW5kZXJfdG9fdGV4dHVyZQorKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgbUZlYXR1cmVzLmhhc0RlcHRo
QXV0b1Jlc29sdmUuZW5hYmxlZCAmJiBtRmVhdHVyZXMuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVu
YWJsZWQpCisrICAgIHsKKysgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJl
bmRlclRvVGV4dHVyZSA9IHRydWU7CisrICAgIH0KKyAKKyAgICAgLy8gRW5hYmxlIEVYVF9ibGVu
ZF9taW5tYXgKKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuYmxlbmRNaW5NYXggPSB0cnVlOworQEAg
LTY2Miw4ICs3MTMsOCBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgbU5h
dGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKKyAgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuc2VtYXBob3JlRmQgPSBmYWxzZTsKKyAKKy0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFu
Y2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5h
YmxlZDsKKy0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzRVhUICAgPSBtTmF0
aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNBTkdMRTsKKysgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuaW5zdGFuY2VkQXJyYXlzQU5HTEUgPSB0cnVlOworKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5p
bnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CisgCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnJv
YnVzdEJ1ZmZlckFjY2Vzc0JlaGF2aW9yID0gZmFsc2U7CisgCitAQCAtNjg2LDYgKzczNyw5IEBA
IGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBtTmF0aXZlRXh0ZW5zaW9u
cy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9n
cmFtX2JpbmFyeQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5T0VTID0g
dHJ1ZTsKKysKKyAgICAgLy8gR0xfQVBQTEVfY2xpcF9kaXN0YW5jZQorICAgICBtTmF0aXZlRXh0
ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CisgCitAQCAtNzEzLDExICs3NjcsMTcg
QEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgCisgICAgIC8vIFJlLXZlcmlmeSB0
ZXh0dXJlIGV4dGVuc2lvbnMuCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnNldFRleHR1cmVFeHRl
bnNpb25TdXBwb3J0KG1OYXRpdmVUZXh0dXJlQ2Fwcyk7CistCisrICAgIC8vIE1vZGlmeSBleHRl
bnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0CisgICAgIC8vIERpc2FibGUgYWxsIGRlcHRoIGJ1
ZmZlciBhbmQgc3RlbmNpbCBidWZmZXIgcmVhZGJhY2sgZXh0ZW5zaW9ucyB1bnRpbCB3ZSBuZWVk
IHRoZW0KKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMucmVhZERlcHRoTlYgICAgICAgICA9IGZhbHNl
OworICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0gZmFsc2U7Cisg
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmRlcHRoQnVmZmVyRmxvYXQyTlYgPSBmYWxzZTsKKysgICAg
bU5hdGl2ZUV4dGVuc2lvbnMudGV4dHVyZUNvbXByZXNzaW9uQVNUQ0xEUktIUiAmPSBzdXBwb3J0
c0lPU0dQVUZhbWlseSgyKTsKKyt9CisrCisrdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplTGlt
aXRhdGlvbnMoKQorK3sKKysgICAgbU5hdGl2ZUxpbWl0YXRpb25zLm5vVmVydGV4QXR0cmlidXRl
QWxpYXNpbmcgPSB0cnVlOworIH0KKyAKKyB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0
dXJlcygpCitAQCAtNzc5LDYgKzgzOSw5IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUo
KQorICAgICBBTkdMRV9GRUFUVVJFX0NPTkRJVElPTigoJm1GZWF0dXJlcyksIGFsbG93U2VwYXJh
dGVkRGVwdGhTdGVuY2lsQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlz
T1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CisgCisrICAgIG1GZWF0dXJlcy5l
bXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCA9CisrICAgICAgICBhbmdsZTo6R2V0RW52
aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKysKKyAg
ICAgYW5nbGU6OlBsYXRmb3JtTWV0aG9kcyAqcGxhdGZvcm0gPSBBTkdMRVBsYXRmb3JtQ3VycmVu
dCgpOworICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0
dXJlcyk7CisgCitAQCAtNzg3LDYgKzg1MCwyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxh
YmxlKCkKKyAKKyBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJy
YXJ5KCkKKyB7CisrICAgICNpZmRlZiBBTkdMRV9NRVRBTF9YQ09ERV9CVUlMRFNfU0hBREVSUwor
KyAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVy
QXN5bmNJbmZvTXRsKTsKKysgICAgICAgIAorKyAgICAKKysgICAgICAgIE5TU3RyaW5nICpwYXRo
ID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1
bmRsZVBhdGg7CisrICAgICAgICBOU0Vycm9yICogZXJyb3IgPSBudWxscHRyOworKyAgICAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVycyA9IFtnZXRNZXRhbERldmlj
ZSgpIG5ld0RlZmF1bHRMaWJyYXJ5V2l0aEJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6
cGF0aF0gZXJyb3I6JmVycm9yXTsKKysKKysgICAgICAgIGlmIChlcnJvciAmJiAhbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVycykKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBBTkdMRV9NVExfT0JKQ19TQ09QRQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
RVJSKCkgPDwgIkludGVybmFsIGVycm9yOiBuZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGUgZmFp
bGVkLiAiIDw8IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uLlVURjhTdHJpbmc7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNo
YWRlcnNDb21waWxlRXJyb3IgPSBzdGQ6Om1vdmUoZXJyb3IpOworKyAgICAgICAgICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpTdG9wOworKyAgICAgICAgICAgICAgICAgCisrICAgICAgICB9Cisr
ICAgICAgICBtRGVmYXVsdFNoYWRlcnNBc3luY0luZm8tPmNvbXBpbGVkID0gdHJ1ZTsKKysgICAg
ICAgIAorKyAgICAjZWxzZQorICAgICBtRGVmYXVsdFNoYWRlcnNBc3luY0luZm8ucmVzZXQobmV3
IERlZmF1bHRTaGFkZXJBc3luY0luZm9NdGwpOworIAorICAgICAvLyBDcmVhdGUgcmVmZXJlbmNl
cyB0byBhc3luYyBpbmZvIHN0cnVjdCBzaW5jZSBpdCBtaWdodCBiZSByZWxlYXNlZCBpbiB0ZXJt
aW5hdGUoKSwgYnV0IHRoZQorQEAgLTgxNSw3ICs4OTksNyBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyAKKyAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0Vd
OworICAgICB9CistCisrICAgICNlbmRpZgorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorIAorQEAgLTg0NywxNDQgKzkzMSwxMiBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyAKKyBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzSU9TR1BVRmFtaWx5KHVp
bnQ4X3QgaU9TRmFtaWx5KSBjb25zdAorIHsKKy0jaWYgKCFUQVJHRVRfT1NfSU9TICYmICFUQVJH
RVRfT1NfVFYpIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorLSAgICByZXR1cm4gZmFsc2U7Cist
I2Vsc2UKKy0jICAgIGlmIChfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEzMDAw
MCkgfHwgKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAwMDApCistICAgIC8vIElm
IGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlIGl0
LgorLSAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koMTMuMCkpCistICAgIHsKKy0gICAg
ICAgIE1UTEdQVUZhbWlseSBmYW1pbHk7CistICAgICAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKKy0g
ICAgICAgIHsKKy0gICAgICAgICAgICBjYXNlIDE6CistICAgICAgICAgICAgICAgIGZhbWlseSA9
IE1UTEdQVUZhbWlseUFwcGxlMTsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAg
ICAgY2FzZSAyOgorLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTI7
CistICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgIGNhc2UgMzoKKy0gICAgICAg
ICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGUzOworLSAgICAgICAgICAgICAgICBi
cmVhazsKKy0gICAgICAgICAgICBjYXNlIDQ6CistICAgICAgICAgICAgICAgIGZhbWlseSA9IE1U
TEdQVUZhbWlseUFwcGxlNDsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAg
Y2FzZSA1OgorLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTU7Cist
ICAgICAgICAgICAgICAgIGJyZWFrOworLSMgICAgICAgIGlmIFRBUkdFVF9PU19JT1MKKy0gICAg
ICAgICAgICBjYXNlIDY6CistICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFw
cGxlNjsKKy0gICAgICAgICAgICAgICAgYnJlYWs7CistIyAgICAgICAgZW5kaWYKKy0gICAgICAg
ICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICB9
CistICAgICAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9ydHNGYW1pbHk6ZmFtaWx5
XTsKKy0gICAgfSAgLy8gTWV0YWwgMi4yCistIyAgICBlbmRpZiAgLy8gX19JUEhPTkVfT1NfVkVS
U0lPTl9NQVhfQUxMT1dFRAorLQorLSAgICAvLyBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtN
VExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKKy0gICAgLy8gW01UTERldmljZSBz
dXBwb3J0c0ZlYXR1cmVTZXQ6XS4KKy0gICAgTVRMRmVhdHVyZVNldCBmZWF0dXJlU2V0OworLSAg
ICBzd2l0Y2ggKGlPU0ZhbWlseSkKKy0gICAgeworLSMgICAgaWYgVEFSR0VUX09TX0lPUworLSAg
ICAgICAgY2FzZSAxOgorLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lP
U19HUFVGYW1pbHkxX3YxOworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOgor
LSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkyX3Yx
OworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAzOgorLSAgICAgICAgICAgIGZl
YXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkzX3YxOworLSAgICAgICAgICAg
IGJyZWFrOworLSAgICAgICAgY2FzZSA0OgorLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExG
ZWF0dXJlU2V0X2lPU19HUFVGYW1pbHk0X3YxOworLSAgICAgICAgICAgIGJyZWFrOworLSMgICAg
ICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTIwMDAwCistICAgICAg
ICBjYXNlIDU6CistICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQ
VUZhbWlseTVfdjE7CistICAgICAgICAgICAgYnJlYWs7CistIyAgICAgICAgZW5kaWYgIC8vIF9f
SVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQKKy0jICAgIGVsaWYgVEFSR0VUX09TX1RWCist
ICAgICAgICBjYXNlIDE6CistICAgICAgICBjYXNlIDI6CistICAgICAgICAgICAgZmVhdHVyZVNl
dCA9IE1UTEZlYXR1cmVTZXRfdHZPU19HUFVGYW1pbHkxX3YxOworLSAgICAgICAgICAgIGJyZWFr
OworLSAgICAgICAgY2FzZSAzOgorLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJl
U2V0X3R2T1NfR1BVRmFtaWx5Ml92MTsKKy0gICAgICAgICAgICBicmVhazsKKy0jICAgIGVuZGlm
ICAvLyBUQVJHRVRfT1NfSU9TCistICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9y
dHNGZWF0dXJlU2V0OmZlYXR1cmVTZXRdOworLSNlbmRpZiAgICAgIC8vIFRBUkdFVF9PU19JT1Mg
fHwgVEFSR0VUX09TX1RWCisrICAgIHJldHVybiBtdGw6OlN1cHBvcnRzSU9TR1BVRmFtaWx5KGdl
dE1ldGFsRGV2aWNlKCksIGlPU0ZhbWlseSk7CisgfQorIAorIGJvb2wgRGlzcGxheU10bDo6c3Vw
cG9ydHNNYWNHUFVGYW1pbHkodWludDhfdCBtYWNGYW1pbHkpIGNvbnN0CisgeworLSNpZiBUQVJH
RVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorLSMgICAgaWYgZGVmaW5lZChfX01B
Q18xMF8xNSkKKy0gICAgLy8gSWYgZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNG
YW1pbHk6XSwgdGhlbiB1c2UgaXQuCistICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMo
MTAuMTUsIDEzLjApKQorLSAgICB7CistICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OworLQor
LSAgICAgICAgc3dpdGNoIChtYWNGYW1pbHkpCistICAgICAgICB7CistIyAgICAgICAgaWYgVEFS
R0VUX09TX01BQ0NBVEFMWVNUCistICAgICAgICAgICAgY2FzZSAxOgorLSAgICAgICAgICAgICAg
ICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWNDYXRhbHlzdDE7CistICAgICAgICAgICAgICAgIGJy
ZWFrOworLSAgICAgICAgICAgIGNhc2UgMjoKKy0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRM
R1BVRmFtaWx5TWFjQ2F0YWx5c3QyOworLSAgICAgICAgICAgICAgICBicmVhazsKKy0jICAgICAg
ICBlbHNlICAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCistICAgICAgICAgICAgY2FzZSAxOgor
LSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWMxOworLSAgICAgICAgICAg
ICAgICBicmVhazsKKy0gICAgICAgICAgICBjYXNlIDI6CistICAgICAgICAgICAgICAgIGZhbWls
eSA9IE1UTEdQVUZhbWlseU1hYzI7CistICAgICAgICAgICAgICAgIGJyZWFrOworLSMgICAgICAg
IGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKy0gICAgICAgICAgICBkZWZhdWx0Ogor
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgICAgICB9CistCistICAgICAgICBy
ZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9ydHNGYW1pbHk6ZmFtaWx5XTsKKy0gICAgfSAg
Ly8gTWV0YWwgMi4yCistIyAgICBlbmRpZgorLQorLSAgICAvLyBJZiBkZXZpY2UgZG9lc24ndCBz
dXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKKy0gICAgLy8gW01U
TERldmljZSBzdXBwb3J0c0ZlYXR1cmVTZXQ6XS4KKy0jICAgIGlmIFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorLSAgICBVTlJFQUNIQUJMRSgpOworLSAgICByZXR1cm4gZmFsc2U7CistIyAgICBlbHNl
CistICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKKy0gICAgc3dpdGNoIChtYWNGYW1pbHkp
CistICAgIHsKKy0gICAgICAgIGNhc2UgMToKKy0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRM
RmVhdHVyZVNldF9tYWNPU19HUFVGYW1pbHkxX3YxOworLSAgICAgICAgICAgIGJyZWFrOworLSMg
ICAgICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTQpCistICAgICAgICBjYXNlIDI6CistICAgICAg
ICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfbWFjT1NfR1BVRmFtaWx5Ml92MTsKKy0g
ICAgICAgICAgICBicmVhazsKKy0jICAgICAgICBlbmRpZgorLSAgICAgICAgZGVmYXVsdDoKKy0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CistICAgIH0KKy0gICAgcmV0dXJuIFtnZXRNZXRhbERl
dmljZSgpIHN1cHBvcnRzRmVhdHVyZVNldDpmZWF0dXJlU2V0XTsKKy0jICAgIGVuZGlmICAvLyBU
QVJHRVRfT1NfTUFDQ0FUQUxZU1QKKy0jZWxzZSAgICAgICAvLyAjaWYgVEFSR0VUX09TX09TWCB8
fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKy0KKy0gICAgcmV0dXJuIGZhbHNlOworLQorLSNlbmRp
ZgorKyAgICByZXR1cm4gbXRsOjpTdXBwb3J0c01hY0dQVUZhbWlseShnZXRNZXRhbERldmljZSgp
LCBtYWNGYW1pbHkpOworIH0KKyAKKyBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzRWl0aGVyR1BV
RmFtaWx5KHVpbnQ4X3QgaU9TRmFtaWx5LCB1aW50OF90IG1hY0ZhbWlseSkgY29uc3QKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCitpbmRleCBiNDU4YmQ5
Li41ZTVjY2U5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1l
QnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5oCitAQCAtMjMsMTIgKzIzLDE0IEBAIG5hbWVzcGFjZSBtdGwKKyBjbGFzcyBSZW5kZXJD
b21tYW5kRW5jb2RlcjsKKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgY2xhc3MgQ29udGV4dE10bDsK
Ky1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworK2NsYXNzIFN1cmZhY2VNdGw7CisgCisgY2xhc3Mg
RnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgeworICAgcHVibGljOgor
LSAgICBGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsIGJv
b2wgZmxpcFksIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpOworKyAgICBleHBsaWNpdCBG
cmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1ZmZlcik7CisgICAgIH5GcmFtZWJ1ZmZl
ck10bCgpIG92ZXJyaWRlOworICAgICB2b2lkIGRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpIG92ZXJyaWRlOworIAorQEAgLTk3LDcgKzk5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXJN
dGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgCisgICAgIGdsOjpSZWN0YW5nbGUgZ2V0Q29t
cGxldGVSZW5kZXJBcmVhKCkgY29uc3Q7CisgICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Q7Cist
ICAgIFdpbmRvd1N1cmZhY2VNdGwgKmdldEF0dGFjaGVkQmFja2J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1CYWNrYnVmZmVyOyB9CisrICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqZ2V0QXR0YWNoZWRC
YWNrYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKyAKKyAgICAgYm9vbCBy
ZW5kZXJQYXNzSGFzU3RhcnRlZChDb250ZXh0TXRsICpjb250ZXh0TXRsKSBjb25zdDsKKyAgICAg
bXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOworQEAgLTE2Miw2ICsxNjQsMTAgQEAgY2xhc3MgRnJhbWVi
dWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgICAgIG10bDo6UmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdGw6OlJlbmRlclBhc3NEZXNjICZkZXNjKTsKKyAKKysgICAgdm9pZCBvdmVy
cmlkZUNsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yIGNsZWFyQ29sb3IsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgKmNvbG9yT3V0KTsKKysKKyAgICAgYW5n
bGU6OlJlc3VsdCB1cGRhdGVDb2xvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgc2l6ZV90IGNvbG9ySW5kZXhHTCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlRGVw
dGhSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6
UmVzdWx0IHVwZGF0ZVN0ZW5jaWxSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOworQEAgLTE2OSwxMSArMTc1LDM3IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDogcHVibGlj
IEZyYW1lYnVmZmVySW1wbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJBdHRhY2htZW50ICphdHRhY2htZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXRNdGwgKipj
YWNoZWRSZW5kZXJUYXJnZXQpOworIAorKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGVpdGhlciByZXR1
cm5zIHRoZSByZW5kZXIgdGFyZ2V0J3MgdGV4dHVyZSBpdHNlbGYgaWYgdGhlIHRleHR1cmUgaXMg
cmVhZGFibGUKKysgICAgLy8gb3IgY3JlYXRlIGEgY29weSBvZiB0aGF0IHRleHR1cmUgdGhhdCBp
cyByZWFkYWJsZSBpZiBub3QuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQKKysgICAg
Ly8gZm9yIHBhY2tlZCBkZXB0aCBzdGVuY2lsIHdoZXJlIHJlYWRpbmcgc3RlbmNpbCByZXF1aXJl
cyBhIHN0ZW5jaWwgdmlldy4gSG93ZXZlciBpZiBhIHRleHR1cmUKKysgICAgLy8gaGFzIGJvdGgg
cmVuZGVyIHRhcmdldCwgcGl4ZWwgZm9ybWF0IHZpZXcgJiBzaGFkZXIgcmVhZGFibGUgdXNhZ2Ug
ZmxhZ3MsIHRoZXJlIHdpbGwgYmUKKysgICAgLy8gc29tZSBnbGl0Y2hlcyBoYXBwZW4gaW4gTWV0
YWwgZnJhbWV3b3JrLgorKyAgICAvLyBTbyB0aGUgc29sdXRpb24gaXMgY3JlYXRpbmcgYSBkZXB0
aCBzdGVuY2lsIHRleHR1cmUgd2l0aG91dCBwaXhlbCBmb3JtYXQgdmlldyBmbGFnIGJ1dCBoYXMK
KysgICAgLy8gcmVuZGVyIHRhcmdldCBmbGFnLCB0aGVuIGR1cmluZyBibGl0dGluZyBwcm9jZXNz
LCB0aGlzIHRleHR1cmUgaXMgY29waWVkIHRvIGFub3RoZXIKKysgICAgLy8gaW50ZXJtaWRpYXRl
IHRleHR1cmUgaGF2aW5nIHBpeGVsIGZvcm1hdCB2aWV3IGZsYWcsIGJ1dCBub3QgcmVuZGVyIHRh
cmdldCBmbGFnLgorKyAgICBhbmdsZTo6UmVzdWx0IGdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRh
cmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICZydHQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVwdGhWaWV3LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1
cmVSZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWFkYWJsZVZpZXdMZXZlbCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJl
YWRhYmxlVmlld0xheWVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6UmVjdGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKTsKKysKKyAgICAgYW5n
bGU6OlJlc3VsdCByZWFkUGl4ZWxzVG9QQk8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFy
ZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhY2tQaXhlbHNQ
YXJhbXMgJnBhY2tQaXhlbHNQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAKKysgICAg
YW5nbGU6OlJlc3VsdCByZWFkUGl4ZWxzVG9CdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJmFyZWEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHJldmVyc2VSb3dPcmRlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9m
ZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
QnVmZmVyUm93UGl0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG10bDo6QnVmZmVyUmVmICpkc3RCdWZmZXIpIGNvbnN0OworKworICAgICAvLyBOT1RFOiB3
ZSBjYW5ub3QgdXNlIFJlbmRlclRhcmdldENhY2hlIGhlcmUgYmVjYXVzZSBpdCBkb2Vzbid0IHN1
cHBvcnQgc2VwYXJhdGUKKyAgICAgLy8gZGVwdGggJiBzdGVuY2lsIGF0dGFjaG1lbnRzIGFzIG9m
IG5vdy4gU2VwYXJhdGUgZGVwdGggJiBzdGVuY2lsIGNvdWxkIGJlIHVzZWZ1bCB0bworICAgICAv
LyBzYXZlIHNwYWNlcyBvbiBpT1MgZGV2aWNlcy4gU2VlIGRvYy9QYWNrZWREZXB0aFN0ZW5jaWxT
dXBwb3J0Lm1kLgorQEAgLTE4OSw4ICsyMjEsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBw
dWJsaWMgRnJhbWVidWZmZXJJbXBsCisgICAgIC8vIGFzIGJ5IGEgY29tcHV0ZSBwYXNzLgorICAg
ICBib29sIG1SZW5kZXJQYXNzQ2xlYW5TdGFydCA9IGZhbHNlOworIAorLSAgICBXaW5kb3dTdXJm
YWNlTXRsICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisrICAgIFN1cmZhY2VNdGxQcm90b2NvbCAq
bUJhY2tidWZmZXIgPSBudWxscHRyOworICAgICBjb25zdCBib29sIG1GbGlwWSAgICAgICAgICAg
ICAgID0gZmFsc2U7CisrCisrICAgIG10bDo6QnVmZmVyUmVmIG1SZWFkUGl4ZWxCdWZmZXI7Cisg
fTsKKyB9ICAvLyBuYW1lc3BhY2UgcngKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRnJhbWVCdWZmZXJNdGwubW0KK2luZGV4IDg0ZTQyMjcuLmQ3MWRlNzIgMTAwNjQ0CistLS0g
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KKysrKyBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQorQEAgLTMzLDEyICsz
MywzMCBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICpjb2xvck91dCA9CisgICAgICAgICBtdGw6OkVtdWxhdGVkQWxwaGFD
bGVhckNvbG9yKGNsZWFyQ29sb3IudG9NVExDbGVhckNvbG9yKCksIHRleHR1cmUtPmdldENvbG9y
V3JpdGFibGVNYXNrKCkpOworIH0KKysKKytjb25zdCBnbDo6SW50ZXJuYWxGb3JtYXQgJkdldFJl
YWRBdHRhY2htZW50SW5mbyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXRNdGwgKnJl
bmRlclRhcmdldCkKKyt7CisrICAgIEdMZW51bSBpbXBsRm9ybWF0OworKworKyAgICBpZiAocmVu
ZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCkpCisrICAgIHsKKysgICAgICAg
IGltcGxGb3JtYXQgPSByZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpLT5hY3R1YWxBbmdsZUZvcm1h
dCgpLmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3JtYXQ7CisrICAgIH0KKysgICAgZWxzZQor
KyAgICB7CisrICAgICAgICBpbXBsRm9ybWF0ID0gR0xfTk9ORTsKKysgICAgfQorKworKyAgICBy
ZXR1cm4gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXRJbmZvKGltcGxGb3JtYXQpOworK30KKysK
KyB9CisgCisgLy8gRnJhbWVidWZmZXJNdGwgaW1wbGVtZW50YXRpb24KKyBGcmFtZWJ1ZmZlck10
bDo6RnJhbWVidWZmZXJNdGwoY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpCisg
ICAgIDogRnJhbWVidWZmZXJJbXBsKHN0YXRlKSwgbUJhY2tidWZmZXIoYmFja2J1ZmZlciksIG1G
bGlwWShmbGlwWSkKKyB7CisgICAgIHJlc2V0KCk7CitAQCAtNTUsNiArNzMsOCBAQCB2b2lkIE92
ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgICAg
IG1EZXB0aFJlbmRlclRhcmdldCA9IG1TdGVuY2lsUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKKyAK
KyAgICAgbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZvcm1hdCA9IG51bGxwdHI7Cisr
CisrICAgIG1SZWFkUGl4ZWxCdWZmZXIgPSBudWxscHRyOworIH0KKyAKKyB2b2lkIEZyYW1lYnVm
ZmVyTXRsOjpkZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorQEAgLTEyMiw3ICsx
NDIsNiBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHTGZsb2F0ICp2YWx1ZXMpCisgeworICAgICBtdGw6OkNsZWFyUmVjdFBhcmFtcyBjbGVh
ck9wdHM7CistCisgICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVhckNvbG9yQnVmZmVyczsKKyAg
ICAgaWYgKGJ1ZmZlciA9PSBHTF9ERVBUSCkKKyAgICAgeworQEAgLTEzMyw3ICsxNTIsNiBAQCB2
b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUs
CisgICAgICAgICBjbGVhckNvbG9yQnVmZmVycy5zZXQoZHJhd2J1ZmZlcik7CisgICAgICAgICBj
bGVhck9wdHMuY2xlYXJDb2xvciA9IG10bDo6Q2xlYXJDb2xvclZhbHVlKHZhbHVlc1swXSwgdmFs
dWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7CisgICAgIH0KKy0KKyAgICAgcmV0dXJuIGNs
ZWFySW1wbChjb250ZXh0LCBjbGVhckNvbG9yQnVmZmVycywgJmNsZWFyT3B0cyk7CisgfQorIGFu
Z2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorQEAgLTE0Niw3ICsxNjQsNiBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJD
b2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgCisgICAgIG10bDo6Q2xlYXJS
ZWN0UGFyYW1zIGNsZWFyT3B0czsKKyAgICAgY2xlYXJPcHRzLmNsZWFyQ29sb3IgPSAgbXRsOjpD
bGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNd
KTsKKy0KKyAgICAgcmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBjbGVhckNvbG9yQnVmZmVycywg
JmNsZWFyT3B0cyk7CisgfQorIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVm
ZmVyaXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCitAQCAtMTU5LDcgKzE3Niw3IEBAIHZv
aWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwK
KyAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JCdWZmZXJzOworICAgICBpZiAoYnVm
ZmVyID09IEdMX1NURU5DSUwpCisgICAgIHsKKy0gICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5j
aWwgPSB2YWx1ZXNbMF0gJiBtdGw6OmtTdGVuY2lsTWFza0FsbDsKKysgICAgICAgIGNsZWFyT3B0
cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAodmFsdWVzWzBdLCAwLCBzdGF0aWNfY2FzdDxHTGlu
dD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKK0BA
IC0xNzcsNyArMTk0LDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3QgbXRsOjpU
ZXh0dXJlUmVmICZ0ZXh0dXJlLAorIHsKKyAgICAgbXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJP
cHRzOworICAgICBjbGVhck9wdHMuY2xlYXJEZXB0aCAgID0gZGVwdGg7CistICAgIGNsZWFyT3B0
cy5jbGVhclN0ZW5jaWwgPSBzdGVuY2lsICYgbXRsOjprU3RlbmNpbE1hc2tBbGw7CisrICAgIGNs
ZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAoc3RlbmNpbCwgMCwgc3RhdGljX2Nhc3Q8
R0xpbnQ+KG10bDo6a1N0ZW5jaWxNYXNrQWxsKSk7CisgCisgICAgIHJldHVybiBjbGVhckltcGwo
Y29udGV4dCwgZ2w6OkRyYXdCdWZmZXJNYXNrKCksICZjbGVhck9wdHMpOworIH0KK0BAIC0xODUs
MTIgKzIwMiw3IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVy
ZVJlZiAmdGV4dHVyZSwKKyBjb25zdCBnbDo6SW50ZXJuYWxGb3JtYXQgJkZyYW1lYnVmZmVyTXRs
OjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCgKKyAgICAgY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpIGNvbnN0CisgeworLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgPSBt
dGw6OkdldEltcGwoY29udGV4dCk7CistICAgIEdMZW51bSBzaXplZEZvcm1hdCAgICAgICA9IG1T
dGF0ZS5nZXRSZWFkQXR0YWNobWVudCgpLT5nZXRGb3JtYXQoKS5pbmZvLT5zaXplZEludGVybmFs
Rm9ybWF0OworLSAgICBhbmdsZTo6Rm9ybWF0SUQgZm9ybWF0SUQgPSBhbmdsZTo6Rm9ybWF0OjpJ
bnRlcm5hbEZvcm1hdFRvSUQoc2l6ZWRGb3JtYXQpOworLSAgICBjb25zdCBtdGw6OkZvcm1hdCAm
bXRsRm9ybWF0ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChmb3Jt
YXRJRCk7CistICAgIEdMZW51bSBpbXBsRm9ybWF0ICAgICAgICAgICAgPSBtdGxGb3JtYXQuYWN0
dWFsQW5nbGVGb3JtYXQoKS5mYm9JbXBsZW1lbnRhdGlvbkludGVybmFsRm9ybWF0OworLSAgICBy
ZXR1cm4gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXRJbmZvKGltcGxGb3JtYXQpOworKyAgICBy
ZXR1cm4gR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNvbnRleHQsIGdldENvbG9yUmVhZFJlbmRlclRh
cmdldChjb250ZXh0KSk7CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJl
YWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCitAQCAtNTkwLDYgKzYwMiw5IEBA
IFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0
UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisgICAgICAgICB7CisgICAgICAgICAgICAgY29udGV4
dE10bC0+b25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29udGV4dCwgdGhpcywgcmVuZGVy
UGFzc0NoYW5nZWQpOworICAgICAgICAgfQorKworKyAgICAgICAgLy8gUmVjcmVhdGUgcGl4ZWwg
cmVhZGluZyBidWZmZXIgaWYgbmVlZGVkIGluIGZ1dHVyZS4KKysgICAgICAgIG1SZWFkUGl4ZWxC
dWZmZXIgPSBudWxscHRyOworICAgICB9CisgCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKK0BAIC03NDgsNyArNzYzLDcgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxp
cHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAK
KyB2b2lkIEZyYW1lYnVmZmVyTXRsOjpvbkZyYW1lRW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KQorIHsKKy0gICAgaWYgKCFtQmFja2J1ZmZlcikKKysgICAgaWYgKCFtQmFja2J1ZmZlciB8
fCBtQmFja2J1ZmZlci0+cHJlc2VydmVCdWZmZXIoKSkKKyAgICAgeworICAgICAgICAgcmV0dXJu
OworICAgICB9CitAQCAtODEyLDYgKzgyNyw5MiBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhm
bGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorK2FuZ2xlOjpSZXN1
bHQgRnJhbWVidWZmZXJNdGw6OmdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldCgKKysgICAg
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAm
cnR0LAorKyAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKysgICAgbXRsOjpUZXh0
dXJlUmVmICpyZWFkYWJsZURlcHRoVmlld091dCwKKysgICAgbXRsOjpUZXh0dXJlUmVmICpyZWFk
YWJsZVN0ZW5jaWxWaWV3T3V0LAorKyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGV2ZWwsCisr
ICAgIHVpbnQzMl90ICpyZWFkYWJsZVZpZXdMYXllciwKKysgICAgZ2w6OlJlY3RhbmdsZSAqcmVh
ZGFibGVWaWV3QXJlYSkKKyt7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgICAgID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworKyAgICBtdGw6OlRleHR1cmVSZWYgc3JjVGV4dHVyZSA9IHJ0
dC5nZXRUZXh0dXJlKCk7CisrICAgIHVpbnQzMl90IGxldmVsICAgICAgICAgICAgID0gcnR0Lmdl
dExldmVsSW5kZXgoKS5nZXQoKTsKKysgICAgdWludDMyX3Qgc2xpY2UgICAgICAgICAgICAgPSBy
dHQuZ2V0TGF5ZXJJbmRleCgpOworKworKyAgICAvLyBOT1RFKGhxbGUpOiBzbGljZSBpcyBub3Qg
dXNlZCBhdG0uCisrICAgIEFTU0VSVChzbGljZSA9PSAwKTsKKysKKysgICAgYm9vbCByZWFkU3Rl
bmNpbCA9IHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQ7CisrCisrICAgIGlmICghc3JjVGV4dHVyZSkK
KysgICAgeworKyAgICAgICAgaWYgKHJlYWRhYmxlRGVwdGhWaWV3T3V0KQorKyAgICAgICAgewor
KyAgICAgICAgICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IG51bGxwdHI7CisrICAgICAgICB9
CisrICAgICAgICBpZiAocmVhZGFibGVTdGVuY2lsVmlld091dCkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IG51bGxwdHI7CisrICAgICAgICB9Cisr
ICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSA9IHJlYWRBcmVhOworKyAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICB9CisrCisrICAgIGJvb2wgc2tpcENvcHkgPSBz
cmNUZXh0dXJlLT5pc1NoYWRlclJlYWRhYmxlKCk7CisrICAgIGlmIChydHQuZ2V0Rm9ybWF0KCkt
Pmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSAmJiByZWFkU3RlbmNpbCkKKysgICAgeworKyAgICAg
ICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgcGFja2VkIGRlcHRoIHN0ZW5jaWwsIGFuZCB3ZSBuZWVk
IHN0ZW5jaWwgdmlldywKKysgICAgICAgIC8vIHRoZW4gaXQgbXVzdCBzdXBwb3J0IGNyZWF0aW5n
IGRpZmZlcmVudCBmb3JtYXQgdmlldy4KKysgICAgICAgIHNraXBDb3B5ID0gc2tpcENvcHkgJiYg
c3JjVGV4dHVyZS0+c3VwcG9ydEZvcm1hdFZpZXcoKTsKKysgICAgfQorKworKyAgICBpZiAoc2tp
cENvcHkpCisrICAgIHsKKysgICAgICAgIC8vIFRleHR1cmUgc3VwcG9ydHMgc3RlbmNpbCB2aWV3
LCBqdXN0IHVzZSBpdCBkaXJlY3RseQorKyAgICAgICAgaWYgKHJlYWRhYmxlRGVwdGhWaWV3T3V0
KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IHNyY1Rl
eHR1cmU7CisrICAgICAgICB9CisrICAgICAgICBpZiAocmVhZGFibGVTdGVuY2lsVmlld091dCkK
KysgICAgICAgIHsKKysgICAgICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IHNyY1Rl
eHR1cmU7CisrICAgICAgICB9CisrICAgICAgICAqcmVhZGFibGVWaWV3TGV2ZWwgPSBsZXZlbDsK
KysgICAgICAgICpyZWFkYWJsZVZpZXdMYXllciA9IHNsaWNlOworKyAgICAgICAgKnJlYWRhYmxl
Vmlld0FyZWEgID0gcmVhZEFyZWE7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSAhPSBNVExUZXh0dXJlVHlwZTNEKTsK
KysKKysgICAgICAgIC8vIFRleHR1cmUgZG9lc24ndCBzdXBwb3J0IHN0ZW5jaWwgdmlldyBvciBu
b3Qgc2hhZGVyIHJlYWRhYmxlLCBjb3B5IHRvIGFuIGludGVybWluYXRlCisrICAgICAgICAvLyB0
ZXh0dXJlIHRoYXQgc3VwcG9ydHMgc3RlbmNpbCB2aWV3IGFuZCBzaGFkZXIgcmVhZC4KKysgICAg
ICAgIG10bDo6VGV4dHVyZVJlZiBmb3JtYXRhYmxlVmlldyA9IHNyY1RleHR1cmUtPmdldFJlYWRh
YmxlQ29weSgKKysgICAgICAgICAgICBjb250ZXh0TXRsLCBjb250ZXh0TXRsLT5nZXRCbGl0Q29t
bWFuZEVuY29kZXIoKSwgbGV2ZWwsIHNsaWNlLAorKyAgICAgICAgICAgIE1UTFJlZ2lvbk1ha2Uy
RChyZWFkQXJlYS54LCByZWFkQXJlYS55LCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVpZ2h0
KSk7CisrCisrICAgICAgICBBTkdMRV9DSEVDS19HTF9BTExPQyhjb250ZXh0TXRsLCBmb3JtYXRh
YmxlVmlldyk7CisrCisrICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gZm9ybWF0YWJsZVZpZXc7
CisrICAgICAgICB9CisrICAgICAgICBpZiAocmVhZGFibGVTdGVuY2lsVmlld091dCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IGZvcm1hdGFibGVW
aWV3LT5nZXRTdGVuY2lsVmlldygpOworKyAgICAgICAgfQorKworKyAgICAgICAgKnJlYWRhYmxl
Vmlld0xldmVsID0gMDsKKysgICAgICAgICpyZWFkYWJsZVZpZXdMYXllciA9IDA7CisrICAgICAg
ICAqcmVhZGFibGVWaWV3QXJlYSAgPSBnbDo6UmVjdGFuZ2xlKDAsIDAsIHJlYWRBcmVhLndpZHRo
LCByZWFkQXJlYS5oZWlnaHQpOworKyAgICB9CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKKyt9CisrCisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cHJlcGFy
ZVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyAqcERl
c2NPdXQpCisgeworQEAgLTgzMiw5ICs5MzMsOSBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhm
bGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgor
ICAgICAgICAgaWYgKGNvbG9yUmVuZGVyVGFyZ2V0KQorICAgICAgICAgeworICAgICAgICAgICAg
IGNvbG9yUmVuZGVyVGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygmY29sb3JBdHRh
Y2htZW50KTsKKysgICAgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5z
YW1wbGVDb3VudCwgY29sb3JSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CisgCisg
ICAgICAgICAgICAgZGVzYy5udW1Db2xvckF0dGFjaG1lbnRzID0gc3RkOjptYXgoZGVzYy5udW1D
b2xvckF0dGFjaG1lbnRzLCBjb2xvckluZGV4R0wgKyAxKTsKKy0gICAgICAgICAgICBkZXNjLnNh
bXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgY29sb3JSZW5kZXJUYXJnZXQt
PmdldFJlbmRlclNhbXBsZXMoKSk7CisgCisgICAgICAgICAgICAgaWYgKCFtUmVuZGVyUGFzc0Zp
cnN0Q29sb3JBdHRhY2htZW50Rm9ybWF0KQorICAgICAgICAgICAgIHsKK0BAIC04NjIsMjIgKzk2
MywyOSBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQs
IG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgorICAgICAgICAgbURlcHRoUmVuZGVyVGFy
Z2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5kZXB0aEF0dGFjaG1lbnQpOwor
ICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIG1E
ZXB0aFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKKyAgICAgfQorLSAgICBlbHNl
CistICAgIHsKKy0gICAgICAgIGRlc2MuZGVwdGhBdHRhY2htZW50LnJlc2V0KCk7CistICAgIH0K
KyAKKyAgICAgaWYgKG1TdGVuY2lsUmVuZGVyVGFyZ2V0KQorICAgICB7CisgICAgICAgICBtU3Rl
bmNpbFJlbmRlclRhcmdldC0+dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MoJmRlc2Muc3RlbmNp
bEF0dGFjaG1lbnQpOworICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Mu
c2FtcGxlQ291bnQsIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwor
ICAgICB9CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisr
Ly8gT3ZlcnJpZGUgY2xlYXIgY29sb3IgYmFzZWQgb24gdGV4dHVyZSdzIHdyaXRlIG1hc2sKKyt2
b2lkIEZyYW1lYnVmZmVyTXRsOjpvdmVycmlkZUNsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJl
UmVmICZ0ZXh0dXJlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
VExDbGVhckNvbG9yIGNsZWFyQ29sb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1UTENsZWFyQ29sb3IgKmNvbG9yT3V0KQorK3sKKysgICAgaWYgKHRleHR1cmUp
CisrICAgIHsKKysgICAgICAgICpjb2xvck91dCA9IG10bDo6RW11bGF0ZWRBbHBoYUNsZWFyQ29s
b3IoY2xlYXJDb2xvciwgdGV4dHVyZS0+Z2V0Q29sb3JXcml0YWJsZU1hc2soKSk7CisrICAgIH0K
KyAgICAgZWxzZQorICAgICB7CistICAgICAgICBkZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlc2V0
KCk7CisrICAgICAgICAqY29sb3JPdXQgPSBjbGVhckNvbG9yOworICAgICB9CistCistICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBGcmFt
ZWJ1ZmZlck10bDo6Y2xlYXJXaXRoTG9hZE9wKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
QEAgLTkyMyw3ICsxMDMxLDcgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEs
IGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAgICAg
IG10bDo6UmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2MgJmNvbG9yQXR0YWNobWVudCA9Cisg
ICAgICAgICAgICAgdGVtcERlc2MuY29sb3JBdHRhY2htZW50c1tjb2xvckluZGV4R0xdOworLSAg
ICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRl
eHR1cmU7CisrICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0
dGFjaG1lbnQudGV4dHVyZSgpOworIAorICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJzLnRl
c3QoY29sb3JJbmRleEdMKSkKKyAgICAgICAgIHsKK0BAIC05NjYsNyArMTA3NCw3IEBAIFBhY2tQ
aXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gs
IHBhY2sucmV2ZXJzZVJvd09yCisgCisgICAgICAgICBtdGw6OlJlbmRlclBhc3NDb2xvckF0dGFj
aG1lbnREZXNjICZjb2xvckF0dGFjaG1lbnQgPQorICAgICAgICAgICAgIG1SZW5kZXJQYXNzRGVz
Yy5jb2xvckF0dGFjaG1lbnRzW2NvbG9ySW5kZXhHTF07CistICAgICAgICBjb25zdCBtdGw6OlRl
eHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKysgICAgICAgIGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7
CisgCisgICAgICAgICBpZiAoY2xlYXJDb2xvckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQor
ICAgICAgICAgeworQEAgLTExOTMsOCArMTMwMSw5IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1z
KGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09y
CisgICAgIGdsOjpSZWN0YW5nbGUgZmxpcHBlZEFyZWEgPSBnbEFyZWE7CisgICAgIGlmIChtRmxp
cFkpCisgICAgIHsKKy0gICAgICAgIGZsaXBwZWRBcmVhLnkgPSByZWFkUlQtPmdldFRleHR1cmUo
KS0+aGVpZ2h0KHJlYWRSVC0+Z2V0TGV2ZWxJbmRleCgpKSAtIGZsaXBwZWRBcmVhLnkgLQorLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZsaXBwZWRBcmVhLmhlaWdodDsKKysgICAgICAgIGZsaXBw
ZWRBcmVhLnkgPQorKyAgICAgICAgICAgIHJlYWRSVC0+Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVh
ZFJULT5nZXRMZXZlbEluZGV4KCkpIC0KKysgICAgICAgICAgICBmbGlwcGVkQXJlYS55IC0gZmxp
cHBlZEFyZWEuaGVpZ2h0OworICAgICB9CisgCisgICAgIHJldHVybiBmbGlwcGVkQXJlYTsKK0BA
IC0xMjExLDcgKzEzMjAsNiBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhmbGlwcGVkQXJlYSwg
YW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgorICAgICB7CisgICAg
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKy0KKyAgICAgaWYg
KHBhY2tQaXhlbHNQYXJhbXMucGFja0J1ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuIHJl
YWRQaXhlbHNUb1BCTyhjb250ZXh0LCBhcmVhLCBwYWNrUGl4ZWxzUGFyYW1zLCByZW5kZXJUYXJn
ZXQpOworQEAgLTEyNzksMTkgKzEzODcsMzYgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxp
cHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAK
KyAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRleHRNdGwsIHBhY2tQaXhlbHNQYXJhbXMub2Zmc2V0
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKy0gICAgY29uc3QgdWludDMyX3QgZHN0QnVm
ZmVyT2Zmc2V0ICAgICAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocGFja1BpeGVsc1BhcmFtcy5v
ZmZzZXQpOworLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCAgICA9IHBhY2tQ
aXhlbHNQYXJhbXMub3V0cHV0UGl0Y2g7CistICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFu
Z2xlRm9ybWF0ID0gKnBhY2tQaXhlbHNQYXJhbXMuZGVzdEZvcm1hdDsKKy0gICAgY29uc3QgYm9v
bCByZXZlcnNlUm93T3JkZXIgICAgICAgICAgPSBwYWNrUGl4ZWxzUGFyYW1zLnJldmVyc2VSb3dP
cmRlcjsKKysgICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhY2tQ
aXhlbHNQYXJhbXMub2Zmc2V0KTsKKyAKKyAgICAgQnVmZmVyTXRsICpwYWNrQnVmZmVyTXRsID0g
bXRsOjpHZXRJbXBsKHBhY2tQaXhlbHNQYXJhbXMucGFja0J1ZmZlcik7CisgICAgIG10bDo6QnVm
ZmVyUmVmIGRzdEJ1ZmZlciA9IHBhY2tCdWZmZXJNdGwtPmdldEN1cnJlbnRCdWZmZXIoKTsKKyAK
KysgICAgcmV0dXJuIHJlYWRQaXhlbHNUb0J1ZmZlcihjb250ZXh0LCBhcmVhLCByZW5kZXJUYXJn
ZXQsIHBhY2tQaXhlbHNQYXJhbXMucmV2ZXJzZVJvd09yZGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYWNrUGl4ZWxzUGFyYW1zLmRlc3RGb3JtYXQsIG9mZnNldCwgcGFja1Bp
eGVsc1BhcmFtcy5vdXRwdXRQaXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZHN0QnVmZmVyKTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBp
eGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZh
cmVhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93T3JkZXIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xl
OjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZl
clJvd1BpdGNoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAqcERzdEJ1ZmZlcikgY29uc3QKKyt7CisrICAgIEFT
U0VSVChyZW5kZXJUYXJnZXQpOworKworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworKworICAgICBjb25zdCBtdGw6OkZvcm1hdCAmcmVhZEZvcm1h
dCAgICAgICAgPSAqcmVuZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKTsKKyAgICAgY29uc3QgYW5nbGU6
OkZvcm1hdCAmcmVhZEFuZ2xlRm9ybWF0ID0gcmVhZEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgp
OworIAorICAgICBtdGw6OlRleHR1cmVSZWYgdGV4dHVyZSA9IHJlbmRlclRhcmdldC0+Z2V0VGV4
dHVyZSgpOworIAorKyAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZHN0QnVmZmVyID0gKnBEc3RC
dWZmZXI7CisrCisgICAgIGlmIChkc3RBbmdsZUZvcm1hdC5pZCAhPSByZWFkQW5nbGVGb3JtYXQu
aWQgfHwgdGV4dHVyZS0+c2FtcGxlcygpID4gMSB8fAorICAgICAgICAgKGRzdEJ1ZmZlck9mZnNl
dCAlIGRzdEFuZ2xlRm9ybWF0LnBpeGVsQnl0ZXMpIHx8CisgICAgICAgICAoZHN0QnVmZmVyT2Zm
c2V0ICUgbXRsOjprVGV4dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGlnbm1lbnQpKQorQEAgLTEzNTks
OCArMTQ4NCw4IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZv
cm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisgCisgICAgICAgICAgICAgdWlu
dDMyX3QgYnVmZmVyUm93T2Zmc2V0ID0gZHN0QnVmZmVyT2Zmc2V0OworICAgICAgICAgICAgIC8v
IENvcHkgcGl4ZWxzIHJvdyBieSByb3cKKy0gICAgICAgICAgICBmb3IgKGludCByID0gc3RhcnRS
b3csIGNvcGllZFJvd3MgPSAwOyBjb3BpZWRSb3dzIDwgYXJlYS5oZWlnaHQ7CistICAgICAgICAg
ICAgICAgICArK2NvcGllZFJvd3MsIC0tciwgYnVmZmVyUm93T2Zmc2V0ICs9IGRzdEJ1ZmZlclJv
d1BpdGNoKQorKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydFJvdywgaSA9IDA7IGkgPCBh
cmVhLmhlaWdodDsKKysgICAgICAgICAgICAgICAgICsraSwgLS1yLCBidWZmZXJSb3dPZmZzZXQg
Kz0gZHN0QnVmZmVyUm93UGl0Y2gpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBz
cmNSb3dSZWdpb24ueSA9IHI7CisgCitAQCAtMTM3NSw1ICsxNTAwLDQgQEAgUGFja1BpeGVsc1Bh
cmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5y
ZXZlcnNlUm93T3IKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
Ky0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFj
ZVN1cmZhY2VNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJm
YWNlTXRsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45NTQ4ZTVkCist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNl
U3VyZmFjZU10bC5oCitAQCAtMCwwICsxLDEyNiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5k
ZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfSU9TVVJGQUNFU1VSRkFDRU1UTF9IXworKyNkZWZp
bmUgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfSU9TVVJGQUNFU1VSRkFDRU1UTF9IXworKworKyNp
bmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlUmVmLmg+CisrI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL1N1cmZhY2VJbXBsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0Rpc3BsYXlNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFj
ZU10bC5oIgorKworK25hbWVzcGFjZSBtZXRhbAorK3sKKytjbGFzcyBBdHRyaWJ1dGVNYXA7Cisr
fSAgLy8gbmFtZXNwYWNlIG1ldGFsCisrCisrbmFtZXNwYWNlIHJ4CisreworKworK2NsYXNzIERp
c3BsYXlNVEw7CisrCisrY2xhc3MgSU9TdXJmYWNlU3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNl
TXRsUHJvdG9jb2wKKyt7CisrICBwdWJsaWM6CisrICAgIElPU3VyZmFjZVN1cmZhY2VNdGwoRGlz
cGxheU10bCAqZGlzcGxheSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVm
ZmVyIGJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0
ZU1hcCAmYXR0cmlicyk7CisrICAgIH5JT1N1cmZhY2VTdXJmYWNlTXRsKCkgb3ZlcnJpZGU7Cisr
CisrICAgIHZvaWQgZGVzdHJveShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIG92ZXJyaWRl
OworKworKyAgICBlZ2w6OkVycm9yIGluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNw
bGF5KSBvdmVycmlkZTsKKysgICAgRnJhbWVidWZmZXJJbXBsICpjcmVhdGVEZWZhdWx0RnJhbWVi
dWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0
ZSkgb3ZlcnJpZGU7CisrCisrICAgIGVnbDo6RXJyb3IgbWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBlZ2w6OkVycm9yIHVuTWFrZUN1cnJlbnQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBlZ2w6OkVycm9yIHN3
YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBlZ2w6OkVycm9y
IHBvc3RTdWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFR0xpbnQgeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVHTGludCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdpZHRoLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7Cisr
CisrICAgIGVnbDo6RXJyb3IgcXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1
dGUsIHZvaWQgKip2YWx1ZSkgb3ZlcnJpZGU7CisrICAgIGVnbDo6RXJyb3IgYmluZFRleEltYWdl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGJ1ZmZlcikgb3ZlcnJpZGU7CisrICAgIGVnbDo6RXJyb3IgcmVsZWFzZVRleEltYWdlKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKysgICAg
ZWdsOjpFcnJvciBnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2NEtIUiAqdXN0LCBFR0x1aW50NjRLSFIg
Km1zYywgRUdMdWludDY0S0hSICpzYmMpIG92ZXJyaWRlOworKyAgICBlZ2w6OkVycm9yIGdldE1z
Y1JhdGUoRUdMaW50ICpudW1lcmF0b3IsIEVHTGludCAqZGVub21pbmF0b3IpIG92ZXJyaWRlOwor
KyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpIG92ZXJyaWRlOworKyAg
ICB2b2lkIHNldEZpeGVkV2lkdGgoRUdMaW50IHdpZHRoKSBvdmVycmlkZTsKKysgICAgdm9pZCBz
ZXRGaXhlZEhlaWdodChFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKKysKKysgICAgLy8gV2lkdGgg
Y2FuIGNoYW5nZSB3aGVuIHRoZSBjbGllbnQgd2luZG93IHJlc2l6ZXMuCisrICAgIEVHTGludCBn
ZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworKyAgICAvLyBIZWlnaHQgY2FuIGNoYW5nZSB3aGVu
IHRoZSBjbGllbnQgd2luZG93IHJlc2l6ZXMuCisrICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25z
dCBvdmVycmlkZTsKKysKKysgICAgRUdMaW50IGlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNv
bnN0IG92ZXJyaWRlOworKyAgICBFR0xpbnQgZ2V0U3dhcEJlaGF2aW9yKCkgY29uc3Qgb3ZlcnJp
ZGU7CisrCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2V0QXR0YWNobWVudFJlbmRlclRhcmdldChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7CisrCisrICAgIGFuZ2xl
OjpSZXN1bHQgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3
YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0KSBv
dmVycmlkZTsKKysgICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAx
OyB9CisrICAgIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorKyAgICBtdGw6OlRleHR1cmVSZWYgZ2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCk7CisrICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRl
eHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJy
aWRlCisrICAgIHsKKysgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKysg
ICAgfQorKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9yVGV4dHVyZSgpIG92ZXJy
aWRlIHsgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOyB9CisrCisrICBwcml2YXRlOgorKyAgICBh
bmdsZTo6UmVzdWx0IGVuc3VyZVRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KTsKKysgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVCYWNraW5nVGV4dHVyZShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCk7CisrICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVGV4dHVyZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCB3aWR0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVu
ZGVyVGFyZ2V0T25seSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4
dHVyZVJlZiAqdGV4dHVyZU91dCk7CisrCisrICAgIGFuZ2xlOjpSZXN1bHQgaW5pdGlhbGl6ZUFs
cGhhQ2hhbm5lbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1aW50IHRleHR1cmUpOwor
KworKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisrICAgIElPU3Vy
ZmFjZUxvY2tPcHRpb25zIGdldElPU3VyZmFjZUxvY2tPcHRpb25zKCkgY29uc3Q7CisrI2VuZGlm
CisrCisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNVEw7CisrICAgIElPU3VyZmFjZVJlZiBtSU9T
dXJmYWNlOworKyAgICBtdGw6OlRleHR1cmVSZWYgbUlPU3VyZmFjZVRleHR1cmU7CisrICAgIG10
bDo6VGV4dHVyZVJlZiBtSU9TdXJmYWNlVGV4dHVyZVZpZXc7CisrICAgIG10bDo6Rm9ybWF0IG1G
b3JtYXQ7CisrICAgIG10bDo6Rm9ybWF0IG1JbnRlcm5hbEZvcm1hdDsKKysgICAgUmVuZGVyVGFy
Z2V0TXRsIG1SZW5kZXJUYXJnZXQ7CisrICAgIGJvb2wgbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVk
OworKyAgICBpbnQgbVdpZHRoOworKyAgICBpbnQgbUhlaWdodDsKKysgICAgaW50IG1QbGFuZTsK
KysgICAgaW50IG1Gb3JtYXRJbmRleDsKKysgICAgaW50IG1Sb3dTdHJpZGVJblBpeGVsczsKKysK
KysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQorKyAgICBHTHVpbnQg
bUJvdW5kVGV4dHVyZUlEOworKyAgICBib29sIG1VcGxvYWRGcm9tSU9TdXJmYWNlOworKyAgICBi
b29sIG1SZWFkYmFja1RvSU9TdXJmYWNlOworKyNlbmRpZgorK307CisrCisrfSAgLy8gbmFtZXNw
YWNlIHJ4CisrCisrI2VuZGlmICAvLyBMSUJBTkdMRV9SRU5ERVJFUl9HTF9FQUdMX0lPU1VSRkFD
RVNVUkZBQ0VFQUdMX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0lPU3VyZmFjZVN1cmZhY2VNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9T
dXJmYWNlU3VyZmFjZU10bC5tbQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LmNjY2M3NmEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tCitAQCAtMCwwICsxLDQ2NyBAQAorKy8vCisrLy8gQ29w
eXJpZ2h0IDIwMTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysv
LworKy8vIElPU3VyZmFjZVN1cmZhY2VNdGwubW06CisrLy8gICAgSW1wbGVtZW50cyB0aGUgY2xh
c3MgbWV0aG9kcyBmb3IgSU9TdXJmYWNlU3VyZmFjZU10bC4KKysvLworKworKyNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgiCisrCisrI2luY2x1
ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorKworKyNpbmNsdWRlICJsaWJBTkdMRS9EaXNwbGF5
LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKysjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9EaXNwbGF5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdXRpbHMuaCIKKysKKysvLyBDb21waWxlciBjYW4gdHVybiBvbiBwcm9ncmFtbWF0
aWNhbCBmcmFtZSBjYXB0dXJlIGluIHJlbGVhc2UgYnVpbGQgYnkgZGVmaW5pbmcKKysvLyBBTkdM
RV9NRVRBTF9GUkFNRV9DQVBUVVJFIGZsYWcuCisrI2lmIGRlZmluZWQoTkRFQlVHKSAmJiAhZGVm
aW5lZChBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFKQorKyMgICAgZGVmaW5lIEFOR0xFX01FVEFM
X0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAwCisrI2Vsc2UKKysjICAgIGRlZmluZSBBTkdMRV9NRVRB
TF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQgQU5HTEVfV0lUSF9NT0RFUk5fTUVUQUxfQVBJCisrI2Vu
ZGlmCisrbmFtZXNwYWNlIHJ4CisreworKworK25hbWVzcGFjZQorK3sKKysKKytzdHJ1Y3QgSU9T
dXJmYWNlRm9ybWF0SW5mbworK3sKKysgICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworKyAgICBH
TGVudW0gdHlwZTsKKysgICAgYW5nbGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworKyAgICBhbmds
ZTo6Rm9ybWF0SUQgaW50ZXJuYWxQaXhlbEZvcm1hdDsKKyt9OworKworK3N0YXRpYyBjb25zdCBJ
T1N1cmZhY2VGb3JtYXRJbmZvIGtJT1N1cmZhY2VGb3JtYXRzW10gPSB7CisrICAgIHtHTF9SRUQs
IEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk0sIGFuZ2xlOjpGb3Jt
YXRJRDo6UjhfVU5PUk19LAorKyAgICB7R0xfUjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmds
ZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5ULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwK
KysgICAge0dMX1JHLCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5P
Uk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STX0sCisrICAgIHtHTF9SR0IsIEdMX1VOU0lH
TkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJ
RDo6QjhHOFI4QThfVU5PUk19LAorKyAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUs
IGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6
OkI4RzhSOEE4X1VOT1JNfSwKKysgICAge0dMX1JHQjEwX0EyLCBHTF9VTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVYsIGFuZ2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk0sCisrICAgICBh
bmdsZTo6Rm9ybWF0SUQ6OlIxMEcxMEIxMEEyX1VOT1JNfSwKKysgICAge0dMX1JHQkEsIEdMX0hB
TEZfRkxPQVQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FULAorKyAgICAgYW5n
bGU6OkZvcm1hdElEOjpSMTZHMTZCMTZBMTZfRkxPQVR9LAorK307CisrCisraW50IEZpbmRJT1N1
cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQorK3sK
KysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KEFycmF5U2l6
ZShrSU9TdXJmYWNlRm9ybWF0cykpOyArK2kpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8g
JmZvcm1hdEluZm8gPSBrSU9TdXJmYWNlRm9ybWF0c1tpXTsKKysgICAgICAgIGlmIChmb3JtYXRJ
bmZvLmludGVybmFsRm9ybWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9
PSB0eXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGkpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLy8gVE9E
TyhqY3VubmluZ2hhbSkgOiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJlZHVjZSBj
b3B5K3Bhc3RlZCBjb2RlCisrCisrQU5HTEVfTVRMX1VOVVNFRAorK2Jvb2wgSXNGcmFtZUNhcHR1
cmVFbmFibGVkKCkKKyt7CisrI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQK
KysgICAgcmV0dXJuIGZhbHNlOworKyNlbHNlCisrICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBmcmFt
ZSBjYXB0dXJlIHByb2dyYW1tYXRpY2FsbHkgaWYgdGhlIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkUKKysgICAgLy8gZW52aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBz
bG93IGRvd24gdGhlIHJlbmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworKyAgICAvLyBmaW5l
bHkgY29udHJvbCB3aGV0aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBmb3IgcGFy
dGljdWxhciBhcHBsaWNhdGlvbiBvciBub3QuCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAg
ICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSIpOworKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBlbmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBm
YWxzZTsKKysKKysgICAgcmV0dXJuIGVuYWJsZWQ7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01U
TF9VTlVTRUQKKytzdGQ6OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKKyt7CisrI2lmICFB
TkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuICIiOworKyNlbHNl
CisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfRklMRSIpOworKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0
aCA9IHZhciA/IHZhciA6ICIiOworKworKyAgICByZXR1cm4gZmlsZVBhdGg7CisrI2VuZGlmCisr
fQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzaXplX3QgTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgp
CisreworKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVy
biAwOworKyNlbHNlCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpn
ZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfTUFYIik7CisrICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbWF4RnJhbWVzID0gdmFyID8gc3RkOjphdG9pKHZhcikgOiAxMDA7CisrCisrICAg
IHJldHVybiBtYXhGcmFtZXM7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytz
aXplX3QgTWluQWxsb3dlZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5HTEVfTUVUQUxfRlJB
TUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisrICAgIGF1dG8gdmFy
ICAgICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQ
VFVSRV9NSU4iKTsKKysgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFtZSA9IHZhciA/IHN0
ZDo6YXRvaSh2YXIpIDogMDsKKysKKysgICAgcmV0dXJuIG1pbkZyYW1lOworKyNlbmRpZgorK30K
KysKKytBTkdMRV9NVExfVU5VU0VECisrYm9vbCBGcmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpCisr
eworKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiBm
YWxzZTsKKysjZWxzZQorKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6
Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisrICAgIHN0YXRpYyBj
b25zdCBib29sIHNjb3BlRGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZpY2UiKSA9PSAw
KSA6IGZhbHNlOworKworKyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisrI2VuZGlmCisrfQorKwor
K0FOR0xFX01UTF9VTlVTRUQKKytzdGQ6OmF0b21pYzxzaXplX3Q+IGdGcmFtZUNhcHR1cmVkKDAp
OworKworK0FOR0xFX01UTF9VTlVTRUQKKyt2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERl
dmljZT4gbWV0YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdWV1ZSkKKyt7
CisrI2lmIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorKyAgICBpZiAoIUlzRnJh
bWVDYXB0dXJlRW5hYmxlZCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysK
KysgICAgaWYgKGdGcmFtZUNhcHR1cmVkID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIE1UTENhcHR1cmVNYW5hZ2Vy
ICpjYXB0dXJlTWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdl
cl07CisrICAgIGlmIChjYXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAg
ICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIGdGcmFtZUNhcHR1cmVkKys7CisrCisrICAgIGlm
IChnRnJhbWVDYXB0dXJlZCA8IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuOworKyAgICB9CisrCisrIyAgICBpZmRlZiBfX01BQ18xMF8xNQorKyAgICBp
ZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQorKyAgICB7Cisr
ICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENh
cHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9y
LmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOwor
KyAgICAgICAgaWYgKGZpbGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRo
ICsgc3RkOjp0b19zdHJpbmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAg
ICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3Rp
bmF0aW9uR1BVVHJhY2VEb2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5v
dXRwdXRVUkwgPQorKyAgICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4
ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29k
ZQorKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVy
ZURlc3RpbmF0aW9uRGV2ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisrCisrICAgICAgICBOU0Vy
cm9yICplcnJvcjsKKysgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdp
dGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisrICAgICAgICB7
CisrICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAi
LCBlcnJvcik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZQorKyMgICAgZW5kaWYgIC8v
IF9fTUFDXzEwXzE1CisrICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4x
NSwgMTMuMCwgMTMpKQorKyAgICB7CisrICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2Fw
dHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKysg
ICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2
aWNlOworKworKyAgICAgICAgTlNFcnJvciAqZXJyb3I7CisrICAgICAgICBpZiAoIVtjYXB0dXJl
TWFuYWdlciBzdGFydENhcHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJv
cjomZXJyb3JdKQorKyAgICAgICAgeworKyAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0
YXJ0IGNhcHR1cmUsIGVycm9yICVAIiwgZXJyb3IpOworKyAgICAgICAgfQorKyAgICB9CisrI2Vu
ZGlmICAvLyBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyt9CisrCisrdm9pZCBT
dGFydEZyYW1lQ2FwdHVyZShDb250ZXh0TXRsICpjb250ZXh0KQorK3sKKysgICAgU3RhcnRGcmFt
ZUNhcHR1cmUoY29udGV4dC0+Z2V0TWV0YWxEZXZpY2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5n
ZXQoKSk7CisrfQorKworK3ZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiBBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKysgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJs
ZWQoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIE1UTENhcHR1cmVN
YW5hZ2VyICpjYXB0dXJlTWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJl
TWFuYWdlcl07CisrICAgIGlmIChjYXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgewor
KyAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0b3BDYXB0dXJlXTsKKysgICAgfQorKyNlbmRpZgor
K30KKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrSU9TdXJmYWNlU3VyZmFjZU10
bDo6SU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0
YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50
QnVmZmVyIGJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorKyAgICA6IFN1cmZhY2VNdGxQcm90
b2NvbChzdGF0ZSkKKyt7CisrICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1cmZhY2Ug
c28gaXQgZG9lc24ndCBnZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMuCisrICAg
IG1JT1N1cmZhY2UgPSByZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJlZj4oYnVmZmVyKTsKKysg
ICAgQ0ZSZXRhaW4obUlPU3VyZmFjZSk7CisrCisrICAgIC8vIEV4dHJhY3QgYXR0cmlicyB1c2Vm
dWwgZm9yIHRoZSBjYWxsIHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisrICAgIG1XaWR0aCAg
PSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworKyAgICBtSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisrICAgIG1QbGFu
ZSAgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5H
TEUpKTsKKysgICAgLy8gSG9wZWZ1bGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHJvdyBpcyBh
bHdheXMgYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxzLiBXZSB1c2UKKysgICAgLy8gZ2xSZWFk
UGl4ZWxzIHRvIGZpbGwgdGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4g
b25seSBzdXBwb3J0IHN0cmlkZXMgdGhhdCBhcmUKKysgICAgLy8gYW4gaW50ZWdlciBudW1iZXIg
b2YgcGl4ZWxzLgorKyAgICBBU1NFUlQoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1J
T1N1cmZhY2UsIG1QbGFuZSkgJQorKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVy
RWxlbWVudE9mUGxhbmUobUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorKyAgICAgICAgICAgMCk7Cisr
ICAgIG1Sb3dTdHJpZGVJblBpeGVscyA9IHN0YXRpY19jYXN0PGludD4oSU9TdXJmYWNlR2V0Qnl0
ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFuZSkgLworKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxh
bmUobUlPU3VyZmFjZSwgbVBsYW5lKSk7CisrCisrICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1h
dCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7CisrICAg
IEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVf
QU5HTEUpOworKyAgICBtRm9ybWF0SW5kZXggPQorKyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1h
dEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxH
TGVudW0+KHR5cGUpKTsKKysgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKysgICAgbUZv
cm1hdCAgICAgICAgID0gZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNb
bUZvcm1hdEluZGV4XS5waXhlbEZvcm1hdCk7CisrICAgIG1JbnRlcm5hbEZvcm1hdCA9IGRpc3Bs
YXktPmdldFBpeGVsRm9ybWF0KGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF0uaW50ZXJu
YWxQaXhlbEZvcm1hdCk7CisrfQorKworK0lPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VT
dXJmYWNlTXRsKCkKKyt7CisrICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKKysgICAgaWYgKG1JT1N1
cmZhY2UgIT0gbnVsbHB0cikKKysgICAgeworKyAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2Up
OworKyAgICAgICAgbUlPU3VyZmFjZSA9IG51bGxwdHI7CisrICAgIH0KKyt9CisrCisrdm9pZCBJ
T1N1cmZhY2VTdXJmYWNlTXRsOjpkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkg
e30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmluaXRpYWxpemUoY29uc3Qg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQorK3sKKysgICAgRGlzcGxheU10bCAqZGlzcGxheU10bCAg
ICA9IG10bDo6R2V0SW1wbChkaXNwbGF5KTsKKysgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSA9IGRpc3BsYXlNdGwtPmdldE1ldGFsRGV2aWNlKCk7CisrCisrICAgIFN0YXJ0RnJhbWVDYXB0
dXJlKG1ldGFsRGV2aWNlLCBkaXNwbGF5TXRsLT5jbWRRdWV1ZSgpLmdldCgpKTsKKysgICAgcmV0
dXJuIGVnbDo6Tm9FcnJvcigpOworK30KKysKKytGcmFtZWJ1ZmZlckltcGwgKklPU3VyZmFjZVN1
cmZhY2VNdGw6OmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpCisreworKyAg
ICBhdXRvIGZibyA9IG5ldyBGcmFtZWJ1ZmZlck10bChzdGF0ZSwgLyogZmxpcFkgKi8gdHJ1ZSwg
LyogYmFja2J1ZmZlciAqLyB0aGlzKTsKKysgICAgcmV0dXJuIGZibzsKKyt9CisrCisrZWdsOjpF
cnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCkKKyt7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwo
Y29udGV4dCk7CisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworKyAgICByZXR1
cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10
bDo6dW5NYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIFN0
b3BGcmFtZUNhcHR1cmUoKTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworK30KKysKKytl
Z2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCisreworKyAgICBTdG9wRnJhbWVDYXB0dXJlKCk7CisrICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIFN0YXJ0RnJhbWVDYXB0dXJl
KGNvbnRleHRNdGwpOworKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworK2VnbDo6
RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMaW50IHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xpbnQgd2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTGludCBoZWlnaHQpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAg
IHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFj
ZVN1cmZhY2VNdGw6OnF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2
b2lkICoqdmFsdWUpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6
OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVy
KQorK3sKKysKKysgICAgYW5nbGU6OlJlc3VsdCByZXMgPSBjcmVhdGVCYWNraW5nVGV4dHVyZShj
b250ZXh0KTsKKysgICAgaWYgKHJlcyA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKysgICAg
ICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKKysgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGVn
bDo6RWdsQmFkQWNjZXNzKCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10
bDo6cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVm
ZmVyKQorK3sKKysgICAgLy8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50YXRpb24KKysgICAgQ29u
dGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgaWYgKGNv
bnRleHRNdGwtPmZsdXNoKGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorKyAg
ICB7CisrICAgICAgICBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSBmYWxzZTsKKysgICAgICAg
IHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKKysgICAgfQorKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRB
Y2Nlc3MoKTsKKyt9CisrCisrZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTeW5j
VmFsdWVzKEVHTHVpbnQ2NEtIUiAqdXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFR0x1aW50NjRLSFIgKm1zYywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCisreworKyAgICBV
TklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysK
KytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1l
cmF0b3IsIEVHTGludCAqZGVub21pbmF0b3IpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7Cisr
ICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysKKyt2b2lkIElPU3VyZmFjZVN1
cmZhY2VNdGw6OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCisreworKyAgICBVTklN
UExFTUVOVEVEKCk7CisrfQorKworK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRX
aWR0aChFR0xpbnQgd2lkdGgpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrfQorKworK3Zv
aWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKKyt7
CisrICAgIFVOSU1QTEVNRU5URUQoKTsKKyt9CisrCisrLy8gd2lkdGggYW5kIGhlaWdodCBjYW4g
Y2hhbmdlIHdpdGggY2xpZW50IHdpbmRvdyByZXNpemluZworK0VHTGludCBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRXaWR0aCgpIGNvbnN0CisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdM
aW50PihtV2lkdGgpOworK30KKysKKytFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVp
Z2h0KCkgY29uc3QKKyt7CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDxFR0xpbnQ+KG1IZWlnaHQp
OworK30KKysKKytFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBFR0xfRkFMU0U7CisrfQorKworK0VHTGlu
dCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IoKSBjb25zdAorK3sKKysgICAg
cmV0dXJuIEVHTF9CVUZGRVJfREVTVFJPWUVEOworK30KKysKKythbmdsZTo6UmVzdWx0IElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisrICAgIGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAorKyAgICBHTGVudW0gYmluZGluZywKKysgICAgY29uc3QgZ2w6
OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCisrICAgIEdMc2l6ZWkgc2FtcGxlcywKKysgICAgRnJh
bWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCisreworKyAgICBBTkdMRV9U
UlkoZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29udGV4dCkpOworKyAgICAqcnRPdXQgPSAmbVJlbmRl
clRhcmdldDsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyth
bmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9i
dGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkK
Kyt7CisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrYW5nbGU6OlJl
c3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpj
cmVhdGVCYWNraW5nVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAg
IG10bDo6VGV4dHVyZVJlZiBtVGVtcG9yYXJ5U3VyZmFjZVJlZjsKKysgICAgQU5HTEVfVFJZKGNy
ZWF0ZVRleHR1cmUoY29udGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1U
ZW1wb3JhcnlTdXJmYWNlUmVmKSk7CisrICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5k
IHRoZSBiYXNlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4KKysgICAgbUlPU3VyZmFjZVRleHR1cmUg
PQorKyAgICAgICAgbVRlbXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50
Rm9ybWF0KE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSk7CisrICAgIG1SZW5kZXJUYXJnZXQuc2V0
KG1JT1N1cmZhY2VUZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5h
bEZvcm1hdCk7CisrICAgIG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IHRydWU7CisrICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1
cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCkKKyt7CisrICAgIGlmICghbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisrICAgIH0K
KysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyttdGw6OlRleHR1
cmVSZWYgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCkKKyt7CisrICAgIGlmIChlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb250
ZXh0KSA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IG1JT1N1cmZhY2VUZXh0dXJlOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysK
KythbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
ZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KQorK3sKKysgICAg
Q29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgQU5H
TEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoY29udGV4dE10bCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBtSU9TdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsKKysgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9Qcm9ncmFtTXRsLmgKK2luZGV4IDM4OWVjZTcuLmViOWJiMDEgMTAwNjQ0CistLS0g
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCitAQCAtMjAsMTIgKzIwLDEzIEBACisg
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCistI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgor
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgorIAorIG5h
bWVzcGFjZSByeAorIHsKKysjZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisgY2xh
c3MgQ29udGV4dE10bDsKKyAKKyBzdHJ1Y3QgUHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10
bAorQEAgLTEzNCw2ICsxMzUsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9ncmFt
SW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKKyAgICAgYm9v
bCBoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZy
ZW5kZXJQaXBlbGluZURlc2MpIG92ZXJyaWRlOworIAorKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0
ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZv
ICp0cmFuc2xhdGVkTXNsSW5mbyk7CisgICAgIC8vIENhbGxzIHRoaXMgYmVmb3JlIGRyYXdpbmcs
IGNoYW5nZWRQaXBlbGluZURlc2MgaXMgcGFzc2VkIHdoZW4gdmVydGV4IGF0dHJpYnV0ZXMgZGVz
YyBhbmQvb3IKKyAgICAgLy8gc2hhZGVyIHByb2dyYW0gY2hhbmdlZC4KKyAgICAgYW5nbGU6OlJl
c3VsdCBzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKK0BAIC0xNDEsNyAr
MTQ2LDEyIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBt
dGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVRleHR1cmVzU2V0dGluZywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CisrCisr
ICAgIHN0ZDo6c3RyaW5nIGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1YZmJNc2xT
b3VyY2U7IH0KKysKKysgICAgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlICptTWV0YWxYZmJSZW5k
ZXJQaXBlbGluZUNhY2hlOworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPGludCBjb2xz
LCBpbnQgcm93cz4KK0BAIC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJs
aWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXpl
CisgICAgIHZvaWQgc2V0VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IFQgKnYsIEdMZW51bSBlbnRyeVBvaW50VHlwZSk7CisgCisgICAgIGFuZ2xlOjpSZXN1
bHQgaW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQp
OworKyAgICBhbmdsZTo6UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzaXplX3Q+ICZyZXF1
aXJlZEJ1ZmZlclNpemUpOworKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8o
Z2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKTsKKysgICAgYW5nbGU6OlJlc3VsdCBsb2Fk
RGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5
SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0VW5pZm9y
bXMoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2Rlcik7CisgICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKK0BAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDog
cHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lh
bGl6ZQorICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxv
Y2tzLAorICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSk7CisgCistICAgIGFuZ2xl
OjpSZXN1bHQgdXBkYXRlWGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21k
RW5jb2RlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6
UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpOworLQorICAgICB2b2lkIHJlc2V0KENv
bnRleHRNdGwgKmNvbnRleHQpOworIAorKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhn
bDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRUcmFuc2xhdGVk
U2hhZGVycyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisrCisrICAgIHZvaWQgc2F2
ZVNoYWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworKyAg
ICB2b2lkIGxvYWRTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJl
YW0pOworKworKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysKKysgICAgYW5nbGU6OlJl
c3VsdCBsaW5rSW1wbFNwaXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNl
cyAmcmVzb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9M
b2cgJmluZm9Mb2cpOworKyNlbmRpZgorKworKyAgICBhbmdsZTo6UmVzdWx0IGxpbmtJbXBsRGly
ZWN0KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7
CisrCisgICAgIHZvaWQgbGlua1Jlc291cmNlcyhjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzKTsKKyAgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbChjb25zdCBnbDo6
Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOworIAorLSAgICBhbmdsZTo6UmVzdWx0IGNy
ZWF0ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJ
bmZvICp0cmFuc2xhdGVkTXNsSW5mbyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgbGlua1RyYW5zbGF0
ZWRTaGFkZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5m
b0xvZyk7CisgCisgICAgIC8vIFN0YXRlIGZvciB0aGUgZGVmYXVsdCB1bmlmb3JtIGJsb2Nrcy4K
KyAgICAgc3RydWN0IERlZmF1bHRVbmlmb3JtQmxvY2sgZmluYWwgOiBwcml2YXRlIGFuZ2xlOjpO
b25Db3B5YWJsZQorQEAgLTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGlj
IFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQor
ICAgICAvLyBDYWNoZWQgcmVmZXJlbmNlcyBvZiBjdXJyZW50IHNoYWRlciB2YXJpYW50cy4KKyAg
ICAgZ2w6OlNoYWRlck1hcDxQcm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqPiBtQ3VycmVudFNo
YWRlclZhcmlhbnRzOworIAorKyAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAg
bVZhcmlhYmxlSW5mb01hcDsKKyAgICAgLy8gU2NyYXRjaCBkYXRhOgorICAgICAvLyBMZWdhbGl6
ZWQgYnVmZmVycyBhbmQgdGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0gYnVmZmVy
J3Mgb2Zmc2V0PTEgaXMgbm90IGEgdmFsaWQKKyAgICAgLy8gb2Zmc2V0LCBpdCB3aWxsIGJlIGNv
bnZlcnRlZCB0byBsZWdhbCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMg
YXJyYXkuCitAQCAtMjM4LDcgKzI2NiwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFBy
b2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAg
ICAvLyBpbnRvIGFuIGFyZ3VtZW50IGJ1ZmZlci4KKyAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+
IG1Bcmd1bWVudEJ1ZmZlclJlbmRlclN0YWdlVXNhZ2VzOworIAorKyAgICB1aW50MzJfdCBtU2hh
ZG93Q29tcGFyZU1vZGVzW210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKysKKyAgICAg
bXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGU7CisrICAg
IHN0ZDo6c3RyaW5nIG1YZmJNc2xTb3VyY2U7CisgfTsKKyAKKyB9ICAvLyBuYW1lc3BhY2UgcngK
K2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitpbmRleCA1MGUyZjYz
Li42ZGE4NjY0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1t
CitAQCAtMTQsMjUgKzE0LDMxIEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgCisgI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRl
eHQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIgorICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1RleHR1cmVNdGwuaCIKKy0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9yZW5kZXJl
cl91dGlscy5oIgorIAorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysjICAgIGluY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2VuZGlm
CisrCisgbmFtZXNwYWNlIHJ4CisgeworIAorIG5hbWVzcGFjZQorIHsKKy0KKy0jZGVmaW5lIFNI
QURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgor
IGNvbnN0ZXhwciBjaGFyIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4W10gPSAiX3RtcCI7Cist
CisrI2VuZGlmCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgY2xhc3MgU2NvcGVkQXV0b0NsZWFy
VmVjdG9yCisgeworQEAgLTc4LDYgKzg0LDcgQEAgdm9pZCBJbml0RGVmYXVsdFVuaWZvcm1CbG9j
ayhjb25zdCBzdGQ6OnZlY3RvcjxzaDo6VW5pZm9ybT4gJnVuaWZvcm1zLAorIAorICAgICBzaXpl
X3QgYmxvY2tTaXplID0gYmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsKKyAKKysgICAg
Ly8gVE9ETyhqbWFkaWxsKTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9y
IHRoZSBwaXBlbGluZSBldmVuIGlmIHplcm8gc2l6ZWQuCisgICAgIGlmIChibG9ja1NpemUgPT0g
MCkKKyAgICAgeworICAgICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CitAQCAtMjI4LDExICsyMzUs
MTYgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4
dCwKKyAKKyBQcm9ncmFtTXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjp+RGVmYXVsdFVuaWZvcm1C
bG9jaygpID0gZGVmYXVsdDsKKyAKKy1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQ
cm9ncmFtU3RhdGUgJnN0YXRlKQorLSAgICA6IFByb2dyYW1JbXBsKHN0YXRlKSwgbU1ldGFsUmVu
ZGVyUGlwZWxpbmVDYWNoZSh0aGlzKQorLXt9CisrUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25z
dCBnbDo6UHJvZ3JhbVN0YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisrICAgIG1N
ZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGUodGhpcykKKyt7CisrICAgIG1NZXRhbFhmYlJlbmRlclBp
cGVsaW5lQ2FjaGUgPSBuZXcgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7CisrfQorIAorLVBy
b2dyYW1NdGw6On5Qcm9ncmFtTXRsKCkge30KKytQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCgpCisr
eworKyAgICBkZWxldGUgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyt9CisgCisgdm9p
ZCBQcm9ncmFtTXRsOjpkZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKK0BA
IC0yNjIsMjUgKzI3NCw0NiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICB7CisgICAgICAgICB2YXIucmVzZXQoY29udGV4dCk7Cisg
ICAgIH0KKy0KKyAgICAgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5jbGVhcigpOworKyAgICBt
TWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5jbGVhcigpOworK30KKysKKyt2b2lkIFByb2dy
YW1NdGw6OnNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJl
YW0pCisreworKyAgICAvLyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9yIGFsbCBzaGFkZXIg
dHlwZXMKKysgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFs
bFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVTdHJpbmcobU1z
bFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UpOworKyAg
ICB9CisrICAgIHN0cmVhbS0+d3JpdGVTdHJpbmcobVhmYk1zbFNvdXJjZSk7CisrfQorKworK3Zv
aWQgUHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVh
bSAqc3RyZWFtKQorK3sKKysgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNo
YWRlciB0eXBlcworKyAgICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBn
bDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgeworKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0
ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmco
KTsKKysgICAgfQorKyAgICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7Cisg
fQorIAorIHN0ZDo6dW5pcXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQorIHsKKy0gICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCist
ICAgIFVOSU1QTEVNRU5URUQoKTsKKy0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2
ZW50RG9uZT4oYW5nbGU6OlJlc3VsdDo6U3RvcCk7CisrCisrICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtFdmVudERvbmU+KGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb250ZXh0LCBzdHJl
YW0sIGluZm9Mb2cpKTsKKyB9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpzYXZlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisgeworLSAg
ICAvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKKy0gICAgVU5JTVBMRU1FTlRF
RCgpOworKyAgICBzYXZlVHJhbnNsYXRlZFNoYWRlcnMoc3RyZWFtKTsKKysgICAgc2F2ZVNoYWRl
ckludGVybmFsSW5mbyhzdHJlYW0pOworKyAgICBzYXZlRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZv
KHN0cmVhbSk7CisgfQorIAorKworIHZvaWQgUHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFi
bGVIaW50KGJvb2wgcmV0cmlldmFibGUpCisgeworICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAt
Mjk0LDcgKzMyNyw3IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgc3RkOjp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGlu
ayhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNv
dXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
SW5mb0xvZyAmaW5mb0xvZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAvKiBtZXJnZWRWYXJ5aW5n
cyAqLykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJm1lcmdlZFZhcnlpbmdzKQorIHsKKyAgICAgLy8g
TGluayByZXNvdXJjZXMgYmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNlIHRvIG1ha2Ugc3Vy
ZSB0aGV5IGFyZSByZWFkeSBmb3IgdGhlIHNldC9iaW5kaW5nCisgICAgIC8vIGFzc2lnbm1lbnQg
ZG9uZSBpbiB0aGF0IGZ1bmN0aW9uLgorQEAgLTMwNCw3ICszMzcsOCBAQCB2b2lkIEluaXRBcmd1
bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxMaW5rRXZlbnREb25lPihsaW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMs
IGluZm9Mb2cpKTsKKyB9CisgCistYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5rSW1wbChj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJ
UlYKKythbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsU3BpcnYoY29uc3QgZ2w6OkNv
bnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyB7CitAQCAtMzU1
LDYgKzM4OSw3NSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0
ICpjb250ZXh0LAorIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQor
KyNlbmRpZgorKworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxEaXJlY3QoY29u
c3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyt7
CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
KysKKysgICAgcmVzZXQoY29udGV4dE10bCk7CisrICAgIEFOR0xFX1RSWShpbml0RGVmYXVsdFVu
aWZvcm1CbG9ja3MoZ2xDb250ZXh0KSk7CisrICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxl
SW5mb01hcCB2YXJpYWJsZUluZm9NYXA7CisrCisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJp
bmc+IHNoYWRlclNvdXJjZXM7CisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHRyYW5z
bGF0ZWRNc2xTaGFkZXJzOworKyAgICBtdGw6Ok1TTEdldFNoYWRlclNvdXJjZShtU3RhdGUsIHJl
c291cmNlcywgJnNoYWRlclNvdXJjZXMsICZ2YXJpYWJsZUluZm9NYXApOworKworKyAgICBBTkdM
RV9UUlkobXRsOjpHbHNsYW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250ZXh0TXRsLT5n
ZXRDYXBzKCksIHNoYWRlclNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGVJbmZvTWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0ZWRNc2xTaGFkZXJzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJDb3VudCgpKSk7CisrCisrCisrICAgIGZvciAoZ2w6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAg
ICAgIC8vIENyZWF0ZSBhY3R1YWwgTWV0YWwgc2hhZGVyCisrICAgICAgICBBTkdMRV9UUlkoCisr
ICAgICAgICAgICAgY3JlYXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRlclR5cGUsIGlu
Zm9Mb2csICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOworKyAgICB9Cisr
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3Vs
dCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRS
ZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpJbmZvTG9nICZpbmZvTG9nKQorK3sKKysgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdh
eSBvZiB0b2dnbGluZyB0aGlzLgorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAg
aWYgKHNoOjpyZWFkQm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisrICAg
IHsKKysgICAgICAgcmV0dXJuIGxpbmtJbXBsU3BpcnYoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGlu
Zm9Mb2cpOworKyAgICB9CisrICAgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgICByZXR1
cm4gbGlua0ltcGxEaXJlY3QoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9
CisrfQorKworKworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFk
ZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2cpCisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGdsQ29udGV4dCk7CisrICAgIC8vIE5PVEUoaHFsZSk6IE5vIHRyYW5zZm9ybSBmZWVk
YmFja3MgZm9yIG5vdywgc2luY2Ugd2Ugb25seSBzdXBwb3J0IEVTIDIuMCBhdG0KKysKKysgICAg
cmVzZXQoY29udGV4dE10bCk7CisrCisrICAgIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhzdHJlYW0p
OworKyAgICBsb2FkU2hhZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7CisrICAgIEFOR0xFX1RSWShs
b2FkRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKGdsQ29udGV4dCwgc3RyZWFtKSk7CisrCisrICAg
IEFOR0xFX1RSWShjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgZ2w6OlNoYWRlclR5cGU6
OlZlcnRleCwgaW5mb0xvZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU1zbFNo
YWRlclRyYW5zbGF0ZUluZm9bZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pKTsKKysgICAgQU5HTEVf
VFJZKGNyZWF0ZU1zbFNoYWRlckxpYihjb250ZXh0TXRsLCBnbDo6U2hhZGVyVHlwZTo6RnJhZ21l
bnQsIGluZm9Mb2csCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Nc2xTaGFkZXJU
cmFuc2xhdGVJbmZvW2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudF0pKTsKKysKKysgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKyAKKyB2b2lkIFByb2dyYW1NdGw6OmxpbmtS
ZXNvdXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKKyB7
CitAQCAtMzY2LDggKzQ2OSw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6
OkNvbnRleHQgKmNvbnRleHQsCisgCisgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVm
YXVsdFVuaWZvcm1CbG9ja3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCkKKyB7CistICAg
IENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKy0KKyAg
ICAgLy8gUHJvY2VzcyB2ZXJ0ZXggYW5kIGZyYWdtZW50IHVuaWZvcm1zIGludG8gc3RkMTQwIHBh
Y2tpbmcuCisgICAgIGdsOjpTaGFkZXJNYXA8c2g6OkJsb2NrTGF5b3V0TWFwPiBsYXlvdXRNYXA7
CisgICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7CitAQCAtNDI2
LDYgKzUyNywxNSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0
ICpjb250ZXh0LAorICAgICAgICAgfQorICAgICB9CisgCisrICAgIHJldHVybiByZXNpemVEZWZh
dWx0VW5pZm9ybUJsb2Nrc01lbW9yeShnbENvbnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7Cisr
fQorKworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6cmVzaXplRGVmYXVsdFVuaWZvcm1CbG9j
a3NNZW1vcnkoCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgIGNvbnN0
IGdsOjpTaGFkZXJNYXA8c2l6ZV90PiAmcmVxdWlyZWRCdWZmZXJTaXplKQorK3sKKysgICAgQ29u
dGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworKworICAgICBm
b3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygp
KQorICAgICB7CisgICAgICAgICBpZiAocmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4g
MCkKK0BAIC00NTMsNiArNTYzLDkgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10
bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiAqc2hhZGVyT3V0KQorIHsKKyAgICAgc3RhdGlj
X2Fzc2VydChZRVMgPT0gMSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisrICAgICNp
ZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVz
ZVNwaXJ2ID0gc2g6OnJlYWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsK
KysgICAgI2VuZGlmCisgCisgICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0
ZWRNc2xJbmZvID0gJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOworICAgICBQ
cm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqc2hhZGVyVmFyaWFudDsKK0BAIC00OTAsOSArNjAz
LDIyIEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgQk9PTCBlbXVsYXRlRGlzY2FyZCA9IHJlbmRlclBpcGVsaW5lRGVz
Yy5yYXN0ZXJpemF0aW9uVHlwZSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOworIAor
LSAgICAgICAgICAgIE5TU3RyaW5nICpkaXNjYXJkRW5hYmxlZFN0ciA9CistICAgICAgICAgICAg
ICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmRpc2Nh
cmRFbmFibGVkU3RyOworKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgICAgICAg
ICBpZiAodXNlU3BpcnYpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkaXNjYXJk
RW5hYmxlZFN0ciA9IFtOU1N0cmluZworKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nV2l0aEZv
cm1hdDpAIiVzJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6
VHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVj
Q29uc3RTdWZmaXhdOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrI2VuZGlm
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9Cisr
ICAgICAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRy
YW5zbGF0b3JNZXRhbERpcmVjdDo6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0
TmFtZSgpXTsKKysgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9
IFtbTVRMRnVuY3Rpb25Db25zdGFudFZhbHVlcyBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAg
W2Z1bmNDb25zdGFudHMgc2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKK0BAIC01MTUs
OSArNjQxLDIyIEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQg
KmNvbnRleHQsCisgCisgICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICAgewor
LSAgICAgICAgICAgIE5TU3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0KKy0gICAgICAg
ICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a0Nv
dmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVy
YWdlTWFza0VuYWJsZWRTdHI7CisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorKyAgICAg
ICAgICAgIGlmICh1c2VTcGlydikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNv
dmVyYWdlTWFza0VuYWJsZWRTdHIgPSBbTlNTdHJpbmcKKysgICAgICAgICAgICAgICAgICAgIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFt
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1Nw
ZWNDb25zdFN1ZmZpeF07CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysjZW5k
aWYKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRT
dHIgPQorKyAgICAgICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
OnNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKCldOworKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0g
W1tNVExGdW5jdGlvbkNvbnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICBb
ZnVuY0NvbnN0YW50cyBzZXRDb25zdGFudFZhbHVlOiZlbXVsYXRlQ292ZXJhZ2VNYXNrCitAQCAt
NTU1LDYgKzY5NCw3IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9
CisrCisgYm9vbCBQcm9ncmFtTXRsOjpoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykKKyB7CitAQCAt
NTkyLDYgKzczMiw5MyBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICB9CisgfQorIAorK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZURlZmF1
bHRVbmlmb3JtQmxvY2tzSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisrewor
KyAgICAvLyBTZXJpYWxpemVzIHRoZSB1bmlmb3JtTGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlm
b3JtQmxvY2tzCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxT
aGFkZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgdW5pZm9ybUNvdW50
ID0gbURlZmF1bHRVbmlmb3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQuc2l6ZSgp
OworKyAgICAgICAgc3RyZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3VudCk7CisrICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1
bmlmb3JtQ291bnQ7ICsrdW5pZm9ybUluZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNo
OjpCbG9ja01lbWJlckluZm8gJmJsb2NrSW5mbyA9CisrICAgICAgICAgICAgICAgIG1EZWZhdWx0
VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3VuaWZvcm1JbmRleF07Cisr
ICAgICAgICAgICAgZ2w6OldyaXRlQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgYmxvY2tJbmZvKTsK
KysgICAgICAgIH0KKysgICAgfQorKworKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZv
cm0gYmxvY2sgbWVtb3J5IHNpemVzCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBzdHJlYW0tPndyaXRl
SW50KG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkp
OworKyAgICB9CisrfQorKworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1bHRV
bmlmb3JtQmxvY2tzSW5mbyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5
SW5wdXRTdHJlYW0gKnN0cmVhbSkKKyt7CisrICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1
aXJlZEJ1ZmZlclNpemU7CisrICAgIHJlcXVpcmVkQnVmZmVyU2l6ZS5maWxsKDApOworKworKyAg
ICAvLyBEZXNlcmlhbGl6ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZv
cm1CbG9ja3MKKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNo
YWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQg
PSBzdHJlYW0tPnJlYWRJbnQ8c2l6ZV90PigpOworKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
dW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUNvdW50OyArK3VuaWZvcm1J
bmRleCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2Nr
SW5mbzsKKysgICAgICAgICAgICBnbDo6TG9hZEJsb2NrTWVtYmVySW5mbyhzdHJlYW0sICZibG9j
a0luZm8pOworKyAgICAgICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51
bmlmb3JtTGF5b3V0LnB1c2hfYmFjayhibG9ja0luZm8pOworKyAgICAgICAgfQorKyAgICB9Cisr
CisrICAgIC8vIERlc2VyaWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXpl
cworKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlw
ZXMoKSkKKysgICAgeworKyAgICAgICAgcmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID0g
c3RyZWFtLT5yZWFkSW50PHNpemVfdD4oKTsKKysgICAgfQorKworKyAgICByZXR1cm4gcmVzaXpl
RGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUp
OworK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJp
bmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKQorK3sKKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBz
aGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIHN0cmVh
bS0+d3JpdGVJbnQ8aW50PihtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5oYXNV
Qk9Bcmd1bWVudEJ1ZmZlcik7CisrICAgICAgICBmb3IgKGNvbnN0IG10bDo6U2FtcGxlckJpbmRp
bmcgJmJpbmRpbmcgOgorKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFk
ZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAgICAgICAgICAg
c3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJlQmluZGluZyk7CisrICAg
ICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy5zYW1wbGVyQmluZGlu
Zyk7CisrICAgICAgICB9CisrCisrICAgICAgICBmb3IgKHVpbnQzMl90IHVib0JpbmRpbmcgOiBt
TXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5ncykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90Pih1Ym9CaW5k
aW5nKTsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OmxvYWRT
aGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCisreworKyAg
ICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkK
KysgICAgeworKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFz
VUJPQXJndW1lbnRCdWZmZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisrICAgICAg
ICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgorKyAgICAgICAgICAgICBtTXNs
U2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0cmVhbS0+
cmVhZEludDx1aW50MzJfdD4oKTsKKysgICAgICAgICAgICBiaW5kaW5nLnNhbXBsZXJCaW5kaW5n
ID0gc3RyZWFtLT5yZWFkSW50PHVpbnQzMl90PigpOworKyAgICAgICAgfQorKworKyAgICAgICAg
Zm9yICh1aW50MzJfdCAmdWJvQmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRl
clR5cGVdLmFjdHVhbFVCT0JpbmRpbmdzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVib0Jp
bmRpbmcgPSBzdHJlYW0tPnJlYWRJbnQ8dWludDMyX3Q+KCk7CisrICAgICAgICB9CisrICAgIH0K
Kyt9CisrCisgR0xib29sZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZj
YXBzLCBnbDo6SW5mb0xvZyAqaW5mb0xvZykKKyB7CisgICAgIC8vIE5vLW9wLiBUaGUgc3BlYyBp
cyB2ZXJ5IHZhZ3VlIGFib3V0IHRoZSBiZWhhdmlvciBvZiB2YWxpZGF0aW9uLgorQEAgLTg3Nywx
NCArMTEwNCwyNSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10
bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwaXBlbGluZURlc2NDaGFuZ2VkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5
KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZl
cnNEaXJ0eSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5z
Zm9ybUZlZWRiYWNrRHJhdykKKyB7CisgICAgIENvbnRleHRNdGwgKmNvbnRleHQgPSBtdGw6Okdl
dEltcGwoZ2xDb250ZXh0KTsKKyAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCisgICAgIHsK
KyAgICAgICAgIC8vIFJlbmRlciBwaXBlbGluZSBzdGF0ZSBuZWVkcyB0byBiZSBjaGFuZ2VkCist
ICAgICAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KKy0gICAg
ICAgICAgICBtTWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUo
Y29udGV4dCwgcGlwZWxpbmVEZXNjKTsKKysgICAgICAgIGlkPE1UTFJlbmRlclBpcGVsaW5lU3Rh
dGU+IHBpcGVsaW5lU3RhdGUgPSBuaWw7CisrICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tE
cmF3KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjIHhm
YlBpcGVsaW5lRGVzYyA9IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjKHBpcGVsaW5lRGVzYyk7Cisr
ICAgICAgICAgICAgeGZiUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpS
ZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICAgICAgICAgIHBpcGVs
aW5lU3RhdGUgPQorKyAgICAgICAgICAgICAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hl
LT5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIHhmYlBpcGVsaW5lRGVzYyk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVT
dGF0ZSA9IG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShj
b250ZXh0LCBwaXBlbGluZURlc2MpOworKyAgICAgICAgfQorICAgICAgICAgaWYgKCFwaXBlbGlu
ZVN0YXRlKQorICAgICAgICAgeworICAgICAgICAgICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2Vk
IGluc2lkZSBnZXRSZW5kZXJQaXBlbGluZVN0YXRlKCkKK0BAIC05MTMsMTEgKzExNTEsNiBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgQU5HTEVfVFJZKHVwZGF0ZVVuaWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIs
IHBpcGVsaW5lRGVzYykpOworICAgICB9CisgCistICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2Vk
KQorLSAgICB7CistICAgICAgICBBTkdMRV9UUlkodXBkYXRlWGZiQnVmZmVycyhjb250ZXh0LCBj
bWRFbmNvZGVyLCBwaXBlbGluZURlc2MpKTsKKy0gICAgfQorLQorICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorQEAgLTk1MCw4ICsxMTgzLDEwIEBAIHZvaWQgSW5p
dEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgeworICAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoZ2xD
b250ZXh0KTsKKyAgICAgY29uc3QgYXV0byAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgICAgID0g
Z2xDb250ZXh0LT5nZXRTdGF0ZSgpOworKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUg
KmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUo
KTsKKyAKKyAgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJmNvbXBsZXRlVGV4dHVy
ZXMgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKKysgICAgY29uc3QgZ2w6OkFj
dGl2ZVRleHR1cmVUeXBlQXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3Rp
dmVTYW1wbGVyVHlwZXMoKTsKKyAKKyAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
IDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKKyAgICAgeworQEAgLTk2NCw2ICsxMTk5LDgg
QEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgIGNvbnN0IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRlckluZm8gPQor
ICAgICAgICAgICAgICptQ3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xh
dGVkU3JjSW5mbzsKKyAKKysgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFsc2U7Cisr
CisgICAgICAgICBmb3IgKHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8
IG1TdGF0ZS5nZXRTYW1wbGVyQmluZGluZ3MoKS5zaXplKCk7CisgICAgICAgICAgICAgICsrdGV4
dHVyZUluZGV4KQorICAgICAgICAgeworQEAgLTk3NSw3ICsxMjEyLDYgQEAgdm9pZCBJbml0QXJn
dW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgIGdsOjpUZXh0dXJl
VHlwZSB0ZXh0dXJlVHlwZSA9IHNhbXBsZXJCaW5kaW5nLnRleHR1cmVUeXBlOworIAorICAgICAg
ICAgICAgIGZvciAodWludDMyX3QgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgc2Ft
cGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAg
KythcnJheUVsZW1lbnQpCitAQCAtOTgzLDYgKzEyMTksNyBAQCB2b2lkIEluaXRBcmd1bWVudEJ1
ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBHTHVp
bnQgdGV4dHVyZVVuaXQgICAgICAgICAgPSBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0
c1thcnJheUVsZW1lbnRdOworICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSAg
ICAgICAgPSBjb21wbGV0ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAg
Z2w6OlNhbXBsZXIgKnNhbXBsZXIgICAgICAgID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRT
YW1wbGVyKHRleHR1cmVVbml0KTsKKysgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRl
eHR1cmVUeXBlID0gdGV4dHVyZVR5cGVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAg
dWludDMyX3QgdGV4dHVyZVNsb3QgICAgICAgID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyAr
IGFycmF5RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlclNsb3QgICAg
ICAgID0gbXNsQmluZGluZy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxlbWVudDsKKyAgICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlKQorQEAgLTk5NCwyNCArMTIzMSwyMSBAQCB2b2lkIEluaXRB
cmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworICAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9y
bWF0OjpTaGFkb3cpCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8v
IGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNTEwNworLSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwg
ZG9lc24ndCBzdXBwb3J0IGEgY29tcGFyZSBtb2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNh
bXBsZXIgY291bGQKKy0gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIHNhbWUgdmFsdWUg
YXMgaWYgc2FtcGxpbmcgZnJvbSBhIG5vcm1hbCBzYW1wbGVyLgorLSAgICAgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydGluZyB0aGlzIGNvdWxkIHJlcXVpcmUgaGFja2luZyBzcGlydi1jcm9zcyB0
byBjaGFuZ2Ugc2FtcGxlX2NvbXBhcmUoKQorLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2Ft
cGxlKCkuCistICAgICAgICAgICAgICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoc2FtcGxlclN0
YXRlLT5nZXRDb21wYXJlTW9kZSgpICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpKQorLSAg
ICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIEVSUigpIDw8ICJH
TF9URVhUVVJFX0NPTVBBUkVfTU9ERSAhPSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFIGlzIG5v
dCAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCI7CistICAg
ICAgICAgICAgICAgICAgICAgICAgQU5HTEVfTVRMX1RSWShjb250ZXh0TXRsLAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9k
ZSgpID09IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpOworLSAgICAgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgICAgICAgICAgaGFzRGVwdGhTYW1wbGVyICAgICAgICAgICAgICAgICAg
PSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgbVNoYWRvd0NvbXBhcmVNb2Rlc1t0ZXh0dXJl
U2xvdF0gPSBtdGw6Ok1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNhbXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSwgc2FtcGxlclN0YXRl
LT5nZXRDb21wYXJlRnVuYygpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAg
ICAgICBBTkdMRV9UUlkodGV4dHVyZU10bC0+YmluZFRvU2hhZGVyKGdsQ29udGV4dCwgY21kRW5j
b2Rlciwgc2hhZGVyVHlwZSwgc2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlU2xvdCwgc2FtcGxlclNsb3QpKTsKKyAgICAg
ICAgICAgICB9ICAvLyBmb3IgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgIH0gICAgICAvLyBmb3Ig
c2FtcGxlciBiaW5kaW5ncworKworKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXREYXRhKHNoYWRlclR5cGUsIG1TaGFk
b3dDb21wYXJlTW9kZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtT
aGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAgIH0KKyAgICAg
fSAgLy8gZm9yIHNoYWRlciB0eXBlcworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CitAQCAtMTA0MCwxMSArMTI3NCw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5j
b2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgCisgICAgIGZvciAoZ2w6OlNoYWRlclR5cGUg
c2hhZGVyVHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgIHsKKy0gICAgICAg
IGlmICghbUN1cnJlbnRTaGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKKy0gICAgICAgIHsKKy0g
ICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGlmIChtQ3VycmVu
dFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJn
dW1lbnRCdWZmZXIpCisgICAgICAgICB7CisgICAgICAgICAgICAgQU5HTEVfVFJZKAorQEAgLTEx
NDksOCArMTM3OCw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCisgeworICAgICBj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOworLSAgICBjb25z
dCBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KKy0gICAgICAgICptQ3Vy
cmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAgICAg
Zm9yICh1aW50MzJfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUo
KTsgKytidWZmZXJJbmRleCkKKyAgICAgeworICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJs
b2NrICZibG9jayA9IGJsb2Nrc1tidWZmZXJJbmRleF07CitAQCAtMTE2Miw3ICsxMzg5LDggQEAg
dm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHVpbnQzMl90IGFj
dHVhbEJ1ZmZlcklkeCA9IHNoYWRlckluZm8uYWN0dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhd
OworKyAgICAgICAgdWludDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKysgICAgICAgICAgICBtTXNs
U2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJ
bmRleF07CisgCisgICAgICAgICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRl
ckJ1ZmZlcnMpCisgICAgICAgICB7CitAQCAtMTE5OSwxMiArMTQyNywxMiBAQCB2b2lkIEluaXRB
cmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICBbYnVmZmVy
RW5jb2Rlci5tZXRhbEFyZ0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRC
dWZmZXItPmdldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldDphcmd1bWVudEJ1ZmZlck9mZnNldF07CisgCistICAgIHN0YXRpY19h
c3NlcnQoTVRMUmVuZGVyU3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkpLAorLSAgICAgICAgICAgICAgICAgICJFeHBlY3Rl
ZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBv
dGhlciIpOworLSAgICBzdGF0aWNfYXNzZXJ0KAorLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFn
bWVudCA9PSAoMHgxIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJh
Z21lbnQpKSwKKy0gICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFs
IGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBhdXRvIG10bFJlbmRlclN0
YWdlID0gc3RhdGljX2Nhc3Q8TVRMUmVuZGVyU3RhZ2VzPigweDEgPDwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHNoYWRlclR5cGUpKTsKKysgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVu
ZGVyU3RhZ2VzPiBrU2hhZGVyU3RhZ2VNYXAgPSB7CisrICAgICAgICB7Z2w6OlNoYWRlclR5cGU6
OlZlcnRleCwgbXRsOjprUmVuZGVyU3RhZ2VWZXJ0ZXh9LAorKyAgICAgICAge2dsOjpTaGFkZXJU
eXBlOjpGcmFnbWVudCwgbXRsOjprUmVuZGVyU3RhZ2VGcmFnbWVudH0sCisrICAgIH07CisrCisr
ICAgIGF1dG8gbXRsUmVuZGVyU3RhZ2UgPSBrU2hhZGVyU3RhZ2VNYXBbc2hhZGVyVHlwZV07Cisg
CisgICAgIGZvciAodWludDMyX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nr
cy5zaXplKCk7ICsrYnVmZmVySW5kZXgpCisgICAgIHsKK0BAIC0xMjM5LDQ5ICsxNDY3LDQgQEAg
dm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0
IFByb2dyYW1NdGw6OnVwZGF0ZVhmYkJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5k
RW5jb2RlciAqY21kRW5jb2RlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKKy17
CistICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgPSBjb250ZXh0
LT5nZXRTdGF0ZSgpOworLSAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRi
YWNrID0gZ2xTdGF0ZS5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0KKy0gICAgaWYg
KHBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uRW5hYmxlZCgpIHx8ICFnbFN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpIHx8CistICAgICAgICBBTkdMRV9VTkxJS0VMWSgh
dHJhbnNmb3JtRmVlZGJhY2spKQorLSAgICB7CistICAgICAgICAvLyBYRkIgb3V0cHV0IGNhbiBv
bmx5IGJlIHVzZWQgd2l0aCByYXN0ZXJpemF0aW9uIGRpc2FibGVkLgorLSAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworLSAgICB9CistCistICAgIHNpemVfdCB4ZmJCdWZm
ZXJDb3VudCA9IGdsU3RhdGUuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudCgpOworLQorLSAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQgPiAwKTsK
Ky0gICAgQVNTRVJUKG1TdGF0ZS5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSAhPSBH
TF9JTlRFUkxFQVZFRF9BVFRSSUJTIHx8CistICAgICAgICAgICB4ZmJCdWZmZXJDb3VudCA9PSAx
KTsKKy0KKy0gICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhm
YkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorLSAgICB7CistICAgICAgICB1aW50MzJfdCBh
Y3R1YWxCdWZmZXJJZHggPSBtTXNsWGZiT25seVZlcnRleFNoYWRlckluZm8uYWN0dWFsWEZCQmlu
ZGluZ3NbYnVmZmVySW5kZXhdOworLQorLSAgICAgICAgaWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBt
dGw6OmtNYXhTaGFkZXJCdWZmZXJzKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNvbnRpbnVl
OworLSAgICAgICAgfQorLQorLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVy
PGdsOjpCdWZmZXI+ICZidWZmZXJCaW5kaW5nID0KKy0gICAgICAgICAgICB0cmFuc2Zvcm1GZWVk
YmFjay0+Z2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7CistICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXIgPSBidWZmZXJCaW5kaW5nLmdldCgpOworLSAgICAgICAgQVNTRVJUKChidWZmZXJC
aW5kaW5nLmdldE9mZnNldCgpICUgNCkgPT0gMCk7CistICAgICAgICBBU1NFUlQoYnVmZmVyICE9
IG51bGxwdHIpOworLQorLSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldElt
cGwoYnVmZmVyKTsKKy0KKy0gICAgICAgIC8vIFVzZSBvZmZzZXQ9MCwgYWN0dWFsIG9mZnNldCB3
aWxsIGJlIHNldCBpbiBEcml2ZXIgVW5pZm9ybSBpbnNpZGUgQ29udGV4dE10bC4KKy0gICAgICAg
IGNtZEVuY29kZXItPnNldEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1
ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpLCAwLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0dWFsQnVmZmVySWR4KTsKKy0gICAgfQorLQorLSAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistfQorLQorIH0gIC8vIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIGIvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKK2luZGV4IDIxODU0ZjYuLjI3OGYxZGYg
MTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaAorKysr
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKK0BAIC0xLDUgKzEsNSBA
QAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworQEAgLTk4LDggKzk4LDcgQEAgY2xhc3Mg
UXVlcnlNdGwgOiBwdWJsaWMgUXVlcnlJbXBsCisgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZn
ZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbVZpc2liaWxpdHlSZXN1
bHRCdWZmZXI7IH0KKyAgICAgLy8gUmVzZXQgdGhlIG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3Rv
cmVkIGluIGJ1ZmZlciB0byB6ZXJvCisgICAgIHZvaWQgcmVzZXRWaXNpYmlsaXR5UmVzdWx0KENv
bnRleHRNdGwgKmNvbnRleHRNdGwpOworLQorLSAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tF
bmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVl
ZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pOworIAorICAgcHJpdmF0ZToKKyAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitAQCAtMTA4LDggKzEwNywxMyBAQCBjbGFzcyBRdWVy
eU10bCA6IHB1YmxpYyBRdWVyeUltcGwKKyAgICAgLy8gTGlzdCBvZiBvZmZzZXRzIGluIHRoZSBy
ZW5kZXIgcGFzcydzIG9jY2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRo
aXMgcXVlcnkKKyAgICAgVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgbVZpc2liaWxpdHlCdWZm
ZXJPZmZzZXRzOworICAgICBtdGw6OkJ1ZmZlclJlZiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsK
KysgICAgLy8gVXNlZCB3aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4gd2hl
biB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMgZW11bGF0ZWQuCisrICAgIHNpemVfdCBtVHJhbnNmb3Jt
RmVlZGJhY2tQcmltaXRpdmVzRHJhd247CisgCistICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJh
Y2tQcmltaXRpdmVzRHJhd24gPSAwOworKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogY3VycmVu
dGx5IG9ubHkgdXNlZCBmb3IgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduCisrICAg
IC8vIGJ1dCBjYW4gYmUgdXNlZCBmb3IgcmVzdCBvZiByZXN1bHRzCisrICAgIHVpbnQ2NF90IG1D
YWNoZWRSZXN1bHQ7CisrICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZhbGlkOworIH07CisgCisgfSAg
Ly8gbmFtZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1F1ZXJ5TXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCitp
bmRleCBmNWU5YmYzLi5hYjBlN2JmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVl
cnlNdGwubW0KK0BAIC0xLDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQg
KGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLwor
QEAgLTEzLDcgKzEzLDEyIEBACisgCisgbmFtZXNwYWNlIHJ4CisgeworLVF1ZXJ5TXRsOjpRdWVy
eU10bChnbDo6UXVlcnlUeXBlIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpIHt9CisrUXVlcnlNdGw6
OlF1ZXJ5TXRsKGdsOjpRdWVyeVR5cGUgdHlwZSkKKysgICAgOiBRdWVyeUltcGwodHlwZSksCisr
ICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduKDApLAorKyAgICAgIG1DYWNo
ZWRSZXN1bHQoMCksCisrICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkKGZhbHNlKQorK3t9CisgCisg
UXVlcnlNdGw6On5RdWVyeU10bCgpIHt9CisgCitAQCAtMjIsMTMgKzI3LDE0IEBACisgICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgIGlmICgh
Z2V0QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CistICAgICAg
ICBjb250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb250ZXh0LCB0aGlzKTsKKysg
ICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29udGV4dCwgdGhp
cyk7CisgICAgIH0KKyAgICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXIgPSBudWxscHRyOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkKKyB7CisrICAgIG1DYWNoZWRSZXN1bHRWYWxpZCAgICAgPSBmYWxzZTsKKyAgICAgQ29u
dGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAgc3dpdGNo
IChnZXRUeXBlKCkpCisgICAgIHsKK0BAIC00Nyw3ICs1Myw3IEBACisgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwt
Pm9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb250ZXh0LCB0aGlzKSk7CisrICAgICAgICAgICAgQU5H
TEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlzKSk7
CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5z
Zm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW46CisgICAgICAgICAgICAgbVRyYW5zZm9ybUZl
ZWRiYWNrUHJpbWl0aXZlc0RyYXduID0gMDsKK0BAIC02NiwxMiArNzIsMjIgQEAKKyAgICAgewor
ICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgorICAgICAgICAgY2FzZSBn
bDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzQ29uc2VydmF0aXZlOgorLSAgICAgICAgICAgIGNvbnRl
eHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisrICAgICAgICAgICAg
Y29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOworICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNXcml0dGVuOgorKyAgICAgICAgeworKyAgICAgICAgICAgIG1DYWNoZWRS
ZXN1bHQgPSBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CisrCisgICAgICAgICAg
ICAgLy8gVGhlcmUgY291bGQgYmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBh
ZGQgdGhlIHByaW1pdGl2ZXMgZHJhd24gc28gZmFyCisgICAgICAgICAgICAgLy8gZnJvbSB0aGUg
Y3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0LgorLSAgICAgICAgICAgIG9uVHJhbnNm
b3JtRmVlZGJhY2tFbmQoY29udGV4dCk7CisrICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRi
YWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldFN0
YXRlKCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybUZlZWRiYWNrKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUNhY2hl
ZFJlc3VsdCArPSB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZCA9IHRydWU7CisrICAg
ICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOworQEAgLTExMCw3ICsxMjYsNyBAQAorICAgICAgICAgfQorICAgICAg
ICAgYnJlYWs7CisgICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNr
UHJpbWl0aXZlc1dyaXR0ZW46CistICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+
KG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bik7CisrICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PFQ+KG1DYWNoZWRSZXN1bHQpOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTM3
LDcgKzE1Myw3IEBACisgICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJlc3Vs
dEJ1ZmZlci0+aXNCZWluZ1VzZWRCeUdQVShjb250ZXh0TXRsKTsKKyAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRp
dmVzV3JpdHRlbjoKKy0gICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKysgICAgICAgICAg
ICAqYXZhaWxhYmxlID0gbUNhY2hlZFJlc3VsdFZhbGlkOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTc1
LDEzICsxOTEsOSBAQAorICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQo
Y29udGV4dE10bCwgYmxpdEVuY29kZXIpOworIH0KKyAKKy12b2lkIFF1ZXJ5TXRsOjpvblRyYW5z
Zm9ybUZlZWRiYWNrRW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3ZvaWQgUXVlcnlN
dGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCisg
eworLSAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4
dC0+Z2V0U3RhdGUoKS5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0gICAgaWYgKHRy
YW5zZm9ybUZlZWRiYWNrKQorLSAgICB7CistICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmlt
aXRpdmVzRHJhd24gKz0gdHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOwor
LSAgICB9CisrICAgIG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biArPSBwcmltaXRp
dmVzRHJhd247CisgfQorIAorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUmVuZGVyQnVmZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyQnVmZmVyTXRsLmgKK2luZGV4IDZmZDdiMWIuLjA1MzAyMGMgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorQEAgLTU3LDYgKzU3LDcgQEAg
Y2xhc3MgUmVuZGVyYnVmZmVyTXRsIDogcHVibGljIFJlbmRlcmJ1ZmZlckltcGwKKyAKKyAgICAg
bXRsOjpGb3JtYXQgbUZvcm1hdDsKKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1UZXh0dXJlOworKyAg
ICBtdGw6OlRleHR1cmVSZWYgbUltcGxpY2l0TVNUZXh0dXJlOworICAgICBSZW5kZXJUYXJnZXRN
dGwgbVJlbmRlclRhcmdldDsKKyB9OworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLm1tCitpbmRleCA2M2Q2ZjRiLi4yZjliNWY2IDEwMDY0NAorLS0t
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorKysrIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorQEAgLTI4LDYg
KzI4LDcgQEAKKyB2b2lkIFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQorIHsKKyAg
ICAgbVRleHR1cmUgICAgICAgICAgID0gbnVsbHB0cjsKKysgICAgbUltcGxpY2l0TVNUZXh0dXJl
ID0gbnVsbHB0cjsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0
b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTQyLDggKzQzLDkgQEAK
KyAgICAgeworICAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0
byByZWNyZWF0ZSB0aGUgc3RvcmFnZS4KKyAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBt
U3RhdGUuZ2V0Rm9ybWF0KCkuaW5mby0+aW50ZXJuYWxGb3JtYXQgfHwKKy0gICAgICAgICAgICB3
aWR0aCAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbVN0YXRlLmdldEhlaWdodCgp
IHx8CistICAgICAgICAgICAgc2FtcGxlcyAhPSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHdpZHRoKSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8
fAorKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkgIT0gbVN0YXRlLmdl
dEhlaWdodCgpIHx8CisrICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykg
IT0gbVN0YXRlLmdldFNhbXBsZXMoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZWxlYXNl
VGV4dHVyZSgpOworICAgICAgICAgfQorQEAgLTcyLDMwICs3NCw2MiBAQAorIAorICAgICBpZiAo
KG1UZXh0dXJlID09IG51bGxwdHIgfHwgIW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0g
MCAmJiBoZWlnaHQgIT0gMCkpCisgICAgIHsKKy0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09
IDEpCisrICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRo
QW5kU3RlbmNpbEJpdHMoKSAmJiBtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKSkKKyAgICAgICAg
IHsKKy0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNv
bnRleHRNdGwsIG1Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFu
ZFN0ZW5jaWxCaXRzKCksICZtVGV4dHVyZSkpOworKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6
OlRleHR1cmU6Ok1ha2UyRFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1hdCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHdpZHRoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCAxLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0
T25seSAqLyBmYWxzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CisrCisr
ICAgICAgICAgICAgLy8gVXNlIGltcGxpY2l0IHJlc29sdmUgZm9yIGRlcHRoIHN0ZW5jaWwgdGV4
dHVyZSB3aGVuZXZlciBwb3NzaWJsZS4gVGhpcyBpcyBiZWNhdXNlCisrICAgICAgICAgICAgLy8g
Zm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSwgaWYgc3RlbmNpbCBuZWVkcyB0byBiZSBibGl0dGVk
LCBhIGZvcm1hdHRlZCBjbG9uZSBoYXMKKysgICAgICAgICAgICAvLyB0byBiZSBjcmVhdGVkLiBB
bmQgaXQgaXMgZXhwZW5zaXZlIHRvIGNsb25lIGEgbXVsdGlzYW1wbGUgdGV4dHVyZS4KKysgICAg
ICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGZvcm1hdCBtdXN0IHN1cHBvcnRzIGltcGxpY2l0IHJlc29sdmUKKysg
ICAgICAgICAgICAgICAgQVNTRVJUKG1Gb3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpOworKworKyAg
ICAgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoCisr
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4od2lkdGgpLAorKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGhlaWdodCksIGFjdHVhbFNhbXBsZXMsCisrICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJU
YXJnZXRPbmx5ICovIHRydWUsCisrICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZp
ZXcgKi8gZmFsc2UsICZtSW1wbGljaXRNU1RleHR1cmUpKTsKKysgICAgICAgICAgICB9CisgICAg
ICAgICB9CisgICAgICAgICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgQU5HTEVfVFJZ
KG10bDo6VGV4dHVyZTo6TWFrZTJETVNUZXh0dXJlKAorLSAgICAgICAgICAgICAgICBjb250ZXh0
TXRsLCBtRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1wbGVzLAorKyAgICAgICAgICAg
IEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZShjb250ZXh0TXRsLCBtRm9y
bWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0
KSwgYWN0dWFsU2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKy0gICAgICAgICAg
ICAgICAgLyogYWxsb3dGb3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0
cygpLCAmbVRleHR1cmUpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogYWxsb3dGb3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsK
KyAgICAgICAgIH0KKyAKKy0gICAgICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1UZXh0dXJlLCBtdGw6
OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1Gb3JtYXQpOworKyAgICAgICAgbVJlbmRlclRhcmdl
dC5zZXRXaXRoSW1wbGljaXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwg
bXRsOjprWmVyb05hdGl2ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAKKyAgICAgICAgIC8vIEZv
ciBlbXVsYXRlZCBjaGFubmVscyB0aGF0IEdMIHRleHR1cmUgaW50ZW5kcyB0byBub3QgaGF2ZSwK
KyAgICAgICAgIC8vIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgorICAgICAg
ICAgYm9vbCBlbXVsYXRlZENoYW5uZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQp
OworICAgICAgICAgaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgICAgICB7CistICAgICAgICAg
ICAgYXV0byBpbmRleCA9IG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRl
eChnbDo6SW1hZ2VJbmRleDo6TWFrZTJEKDApKTsKKysgICAgICAgICAgICBnbDo6SW1hZ2VJbmRl
eCBpbmRleDsKKyAKKy0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVy
ZUNvbnRlbnRzKGNvbnRleHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOworKyAgICAgICAg
ICAgIGlmIChhY3R1YWxTYW1wbGVzID4gMSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGluZGV4ID0gZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGluZGV4ID0gZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRCgwKTsKKysgICAgICAgICAgICB9Cisr
CisrICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhj
b250ZXh0LCBtVGV4dHVyZSwgbUZvcm1hdCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAw
KSkpOworKyAgICAgICAgICAgIGlmIChtSW1wbGljaXRNU1RleHR1cmUpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRl
bnRzKGNvbnRleHQsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbUZvcm1hdCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkltYWdlTmF0
aXZlSW5kZXgoZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCksIDApKSk7CisgICAg
ICAgICAgICAgfQorKyAgICAgICAgfSAgLy8gaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgIH0K
KyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTEzMyw3ICsxNjcs
NiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJn
ZXQgKipydE91dCkKKyB7CistICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KKyAgICAg
QVNTRVJUKG1UZXh0dXJlICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKKyAgICAgKnJ0T3V0ID0gJm1S
ZW5kZXJUYXJnZXQ7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmggYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKK2luZGV4IGJhZjRl
NGQuLjBjNTc1MTcgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyVGFyZ2V0TXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJU
YXJnZXRNdGwuaAorQEAgLTQ2LDIwICs0NiwxOCBAQCBjbGFzcyBSZW5kZXJUYXJnZXRNdGwgZmlu
YWwgOiBwdWJsaWMgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0CisgICAgIHZvaWQg
ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYyk7CisgICAgIHZvaWQgcmVz
ZXQoKTsKKyAKKy0gICAgbXRsOjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVy
biBtVGV4dHVyZS5sb2NrKCk7IH0KKy0gICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNU
ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorLSAg
ICBjb25zdCBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbUxldmVsSW5kZXg7IH0KKy0gICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1MYXllckluZGV4OyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRUZXh0dXJlUmVm
KCk7IH0KKysgICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRJbXBsaWNpdE1TVGV4dHVyZVJl
ZigpOyB9CisrICAgIGNvbnN0IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgJmdldExldmVsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsOyB9CisrICAg
IHVpbnQzMl90IGdldExheWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPnNsaWNlT3JEZXB0aDsgfQorICAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVz
KCkgY29uc3Q7CisgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRGb3JtYXQoKSBjb25zdCB7IHJl
dHVybiBtRm9ybWF0OyB9CisgCisgICAgIHZvaWQgdG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2Mo
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0OworIAorICAg
cHJpdmF0ZToKKy0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBtVGV4dHVyZTsKKy0gICAgbXRsOjpU
ZXh0dXJlV2Vha1JlZiBtSW1wbGljaXRNU1RleHR1cmU7CistICAgIG10bDo6TWlwbWFwTmF0aXZl
TGV2ZWwgbUxldmVsSW5kZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHVpbnQz
Ml90IG1MYXllckluZGV4ICAgICAgICAgICAgICAgPSAwOworKy8vIFRoaXMgaXMgc2hhcmVkIHBv
aW50ZXIgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQg
dG8gYSBmcmFtZSBidWZmZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6OlJlbmRlclBhc3NB
dHRhY2htZW50VGV4dHVyZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKKyAg
ICAgY29uc3QgbXRsOjpGb3JtYXQgKm1Gb3JtYXQgPSBudWxscHRyOworIH07CisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRl
clRhcmdldE10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRN
dGwubW0KK2luZGV4IGU4OWU3NjEuLmUxMjZkYmIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLm1tCitAQCAtMTEsNyArMTEsMTAgQEAKKyAKKyBu
YW1lc3BhY2UgcngKKyB7CistUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoKSB7fQor
K1JlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKCkgOgorKyAgbVRleHR1cmVSZW5kZXJU
YXJnZXRJbmZvKHN0ZDo6bWFrZV9zaGFyZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1
cmVUYXJnZXREZXNjPigpKSwKKysgIG1Gb3JtYXQobnVsbHB0cikKKyt7fQorIAorIFJlbmRlclRh
cmdldE10bDo6flJlbmRlclRhcmdldE10bCgpCisgeworQEAgLTE5LDEwICsyMiw3IEBACisgfQor
IAorIFJlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJlbmRlclRhcmdldE10bCAmJm90
aGVyKQorLSAgICA6IG1UZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tVGV4dHVyZSkpLAorLSAgICAg
IG1JbXBsaWNpdE1TVGV4dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0dXJlKSks
CistICAgICAgbUxldmVsSW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAorLSAgICAgIG1MYXllcklu
ZGV4KG90aGVyLm1MYXllckluZGV4KQorKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbyhz
dGQ6Om1vdmUob3RoZXIubVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKKyB7fQorIAorIHZvaWQg
UmVuZGVyVGFyZ2V0TXRsOjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorQEAg
LTM5LDIxICszOSwyMSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0KQorIHsKKy0gICAgbVRl
eHR1cmUgICAgICAgICAgID0gdGV4dHVyZTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlID0gaW1w
bGljaXRNU1RleHR1cmU7CistICAgIG1MZXZlbEluZGV4ICAgICAgICA9IGxldmVsOworLSAgICBt
TGF5ZXJJbmRleCAgICAgICAgPSBsYXllcjsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT50ZXh0dXJlICAgICAgICAgICA9IHRleHR1cmU7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0
SW5mby0+aW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1
cmVSZW5kZXJUYXJnZXRJbmZvLT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKysgICAgbVRleHR1cmVS
ZW5kZXJUYXJnZXRJbmZvLT5zbGljZU9yRGVwdGggICAgICAgID0gbGF5ZXI7CisgICAgIG1Gb3Jt
YXQgICAgICAgICAgICA9ICZmb3JtYXQ7CisgfQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpz
ZXRUZXh0dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKKyB7CistICAgIG1UZXh0
dXJlID0gdGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlID0g
dGV4dHVyZTsKKyB9CisgCisgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0
dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCisgeworLSAgICBt
SW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5k
ZXJUYXJnZXRJbmZvLT5pbXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworIH0K
KyAKKyB2b2lkIFJlbmRlclRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJn
ZXRNdGwgJnNyYykKK0BAIC02NCwyNSArNjQsMTkgQEAKKyAKKyB2b2lkIFJlbmRlclRhcmdldE10
bDo6cmVzZXQoKQorIHsKKy0gICAgbVRleHR1cmUucmVzZXQoKTsKKy0gICAgbUltcGxpY2l0TVNU
ZXh0dXJlLnJlc2V0KCk7CistICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExl
dmVsOworLSAgICBtTGF5ZXJJbmRleCA9IDA7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5m
by0+dGV4dHVyZS5yZXNldCgpOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxp
Y2l0TVNUZXh0dXJlLnJlc2V0KCk7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+bGV2
ZWwgICAgICAgID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOworKyAgICBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm8tPnNsaWNlT3JEZXB0aCA9IDA7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyB9CisgCisgdWludDMyX3QgUmVuZGVyVGFy
Z2V0TXRsOjpnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKKyB7CistICAgIG10bDo6VGV4dHVyZVJl
ZiBpbXBsaWNpdE1TVGV4ID0gZ2V0SW1wbGljaXRNU1RleHR1cmUoKTsKKy0gICAgbXRsOjpUZXh0
dXJlUmVmIHRleCAgICAgICAgICAgPSBnZXRUZXh0dXJlKCk7CistICAgIHJldHVybiBpbXBsaWNp
dE1TVGV4ID8gaW1wbGljaXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+c2FtcGxlcygp
IDogMSk7CisrICAgIHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldFJlbmRlclNh
bXBsZXMoKTsKKyB9Cisgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjKG10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBjb25zdAor
IHsKKy0gICAgcnBhRGVzY091dC0+dGV4dHVyZSAgICAgICAgICAgPSBtVGV4dHVyZS5sb2NrKCk7
CistICAgIHJwYURlc2NPdXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0dXJl
LmxvY2soKTsKKy0gICAgcnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAgPSBtTGV2ZWxJbmRl
eDsKKy0gICAgcnBhRGVzY091dC0+c2xpY2VPckRlcHRoICAgICAgPSBtTGF5ZXJJbmRleDsKKy0g
ICAgcnBhRGVzY091dC0+YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0
Q2FwcygpLmJsZW5kYWJsZSA6IGZhbHNlOworKyAgICBycGFEZXNjT3V0LT5yZW5kZXJUYXJnZXQg
PSBtVGV4dHVyZVJlbmRlclRhcmdldEluZm87CisgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU2hhZGVyTXRsLmgKK2luZGV4IDdiMmNmZDUuLjUyZTkxYWYgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaAorQEAgLTExLDggKzExLDggQEAKKyAKKyAjaW5j
bHVkZSA8bWFwPgorIAorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgi
CistCisgbmFtZXNwYWNlIHJ4CisgeworIAorQEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRl
ck10bCA6IHB1YmxpYyBTaGFkZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3Rh
bmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hDb21waWxlT3B0aW9ucyBvcHRpb25zKSBvdmVycmlkZTsKKyAKKysgICAgc2g6OlRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb24gKmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gJnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247CisrICAgIH0KKyAg
ICAgc3RkOjpzdHJpbmcgZ2V0RGVidWdJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7CisrCisrICAgIHNo
OjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7
fTsKKysKKysgIHByaXZhdGU6CisrICAgIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVF
dmVudD4gY29tcGlsZUltcGxNdGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNo
Q29tcGlsZXJJbnN0YW5jZSAqY29tcGlsZXJJbnN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
c291cmNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpOworIH07CisgCisgfSAg
Ly8gbmFtZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1NoYWRlck10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0K
K2luZGV4IGY5MDlmYjUuLmFkMDFkYmYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvU2hhZGVyTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
U2hhZGVyTXRsLm1tCitAQCAtMTAsOCArMTAsMTMgQEAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgor
KyNpbmNsdWRlICJsaWJBTkdMRS9Xb3JrZXJUaHJlYWQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9EaXNwbGF5TXRsLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDEwICsy
NSwxMDAgQEAKKyAKKyBTaGFkZXJNdGw6On5TaGFkZXJNdGwoKSB7fQorIAorK2NsYXNzIFRyYW5z
bGF0ZVRhc2sgOiBwdWJsaWMgYW5nbGU6OkNsb3N1cmUKKyt7CisrICBwdWJsaWM6CisrICAgIFRy
YW5zbGF0ZVRhc2soU2hIYW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMsIGNv
bnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UpCisrICAgICAgICA6IG1IYW5kbGUoaGFuZGxlKSwgbU9w
dGlvbnMob3B0aW9ucyksIG1Tb3VyY2Uoc291cmNlKSwgbVJlc3VsdChmYWxzZSkKKysgICAge30K
KysKKysgICAgdm9pZCBvcGVyYXRvcigpKCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29u
c3QgY2hhciAqc291cmNlID0gbVNvdXJjZS5jX3N0cigpOworKyAgICAgICAgbVJlc3VsdCAgICAg
ICAgICAgID0gc2g6OkNvbXBpbGUobUhhbmRsZSwgJnNvdXJjZSwgMSwgbU9wdGlvbnMpOworKyAg
ICB9CisrCisrICAgIGJvb2wgZ2V0UmVzdWx0KCkgeyByZXR1cm4gbVJlc3VsdDsgfQorKworKyAg
ICBTaEhhbmRsZSBnZXRIYW5kbGUoKSB7IHJldHVybiBtSGFuZGxlOyB9CisrCisrICBwcml2YXRl
OgorKyAgICBTaEhhbmRsZSBtSGFuZGxlOworKyAgICBTaENvbXBpbGVPcHRpb25zIG1PcHRpb25z
OworKyAgICBzdGQ6OnN0cmluZyBtU291cmNlOworKyAgICBib29sIG1SZXN1bHQ7CisrfTsKKysK
KytjbGFzcyBNVExXYWl0YWJsZUNvbXBpbGVFdmVudEltcGwgZmluYWwgOiBwdWJsaWMgV2FpdGFi
bGVDb21waWxlRXZlbnQKKyt7CisrICBwdWJsaWM6CisrICAgIE1UTFdhaXRhYmxlQ29tcGlsZUV2
ZW50SW1wbChTaGFkZXJNdGwgKnNoYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmdsZTo6V2FpdGFibGVFdmVudD4gd2FpdGFibGVFdmVudCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xh
dGVUYXNrPiB0cmFuc2xhdGVUYXNrKQorKyAgICAgICAgOiBXYWl0YWJsZUNvbXBpbGVFdmVudCh3
YWl0YWJsZUV2ZW50KSwgbVRyYW5zbGF0ZVRhc2sodHJhbnNsYXRlVGFzayksIG1TaGFkZXIoc2hh
ZGVyKQorKyAgICB7fQorKworKyAgICBib29sIGdldFJlc3VsdCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1UcmFuc2xhdGVUYXNrLT5nZXRSZXN1bHQoKTsgfQorKworKyAgICBib29sIHBvc3RUcmFuc2xh
dGUoc3RkOjpzdHJpbmcgKmluZm9Mb2cpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHNoOjpU
U2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4o
bVRyYW5zbGF0ZVRhc2stPmdldEhhbmRsZSgpKTsKKysgICAgICAgIGF1dG8gdHJhbnNsYXRvck1l
dGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKTsKKysgICAgICAg
IGlmICh0cmFuc2xhdG9yTWV0YWxEaXJlY3QgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAg
ICAgICAgICAvLyBDb3B5IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4KKysgICAgICAgICAg
ICBtU2hhZGVyLT50cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0KKysgICAgICAgICAgICAgICAg
Kih0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSk7
CisrICAgICAgICAgICAgdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxS
ZWZsZWN0aW9uKCktPnJlc2V0KCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gdHJ1ZTsK
KysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0ZVRh
c2s+IG1UcmFuc2xhdGVUYXNrOworKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7CisrfTsKKysKKytz
dGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZUlt
cGxNdGwoCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICBnbDo6U2hDb21w
aWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAm
c291cmNlLAorKyAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQorK3sKKysjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hf
VkFMSURBVEVfQVNUOworKyNlbmRpZgorKworKyAgICBhdXRvIHdvcmtlclRocmVhZFBvb2wgPSBj
b250ZXh0LT5nZXRXb3JrZXJUaHJlYWRQb29sKCk7CisrICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9
CisrICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFu
Y2UtPmdldEhhbmRsZSgpLCBjb21waWxlT3B0aW9ucywgc291cmNlKTsKKysKKysgICAgcmV0dXJu
IHN0ZDo6bWFrZV9zaGFyZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKysgICAgICAg
IHRoaXMsIGFuZ2xlOjpXb3JrZXJUaHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJl
YWRQb29sLCB0cmFuc2xhdGVUYXNrKSwKKysgICAgICAgIHRyYW5zbGF0ZVRhc2spOworK30KKysK
KyBzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGls
ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpj
b21waWxlckluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykKKyB7CisrICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIGlmIChn
ZXRTdGF0ZSgpLmdldFNoYWRlclR5cGUoKSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisr
ICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VW
ZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIC8vIEVtdWxhdGUg
Z2xfSW5zdGFuY2VJRAorKyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgPSBzdGF0aWNf
Y2FzdDxzaDo6VFNoSGFuZGxlQmFzZSAqPihjb21waWxlckluc3RhbmNlLT5nZXRIYW5kbGUoKSk7
CisrICAgICAgICBhdXRvIHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNs
YXRvck1ldGFsRGlyZWN0KCk7CisrICAgICAgICBpZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ID09
IG51bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0YWwg
PSBzdGF0aWNfY2FzdDxzaDo6VHJhbnNsYXRvck1ldGFsICo+KGJhc2UtPmdldEFzQ29tcGlsZXIo
KSk7CisrICAgICAgICAgICAgdHJhbnNsYXRvck1ldGFsLT5lbmFibGVFbXVsYXRlZEluc3RhbmNl
SUQodHJ1ZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAg
ICAgICAgdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1
ZSk7CisrICAgICAgICB9CisrICAgIH0KKyAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0
aW9ucyA9IFNIX0lOSVRJQUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisgCisgICAgIGJvb2wg
aXNXZWJHTCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS53ZWJnbENvbXBhdGliaWxpdHk7CitA
QCAtMzMsOCArMTI4LDExIEBACisgICAgIH0KKyAKKyAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hf
Q0xBTVBfUE9JTlRfU0laRTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorKyAgICBjb21waWxlT3B0aW9ucyB8
PSBTSF9DTEFNUF9GUkFHX0RFUFRIOworKyNlbmRpZgorIAorLSAgICByZXR1cm4gY29tcGlsZUlt
cGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5jZSwgbVN0YXRlLmdldFNvdXJjZSgpLCBjb21waWxl
T3B0aW9ucyB8IG9wdGlvbnMpOworKyAgICByZXR1cm4gY29tcGlsZUltcGxNdGwoY29udGV4dCwg
Y29tcGlsZXJJbnN0YW5jZSwgZ2V0U3RhdGUoKS5nZXRTb3VyY2UoKSwgY29tcGlsZU9wdGlvbnMg
fCBvcHRpb25zKTsKKyB9CisgCisgc3RkOjpzdHJpbmcgU2hhZGVyTXRsOjpnZXREZWJ1Z0luZm8o
KSBjb25zdAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNl
TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oCitpbmRleCA5
ZTg0Zjg4Li4wYWRjMzYwIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1N1cmZhY2VNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VN
dGwuaAorQEAgLTI0LDcgKzI0LDI3IEBAIG5hbWVzcGFjZSByeAorIAorIGNsYXNzIERpc3BsYXlN
dGw7CisgCistY2xhc3MgU3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK2NsYXNzIFN1
cmZhY2VNdGxQcm90b2NvbCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK3sKKysgIHB1YmxpYzoKKysg
ICAgU3VyZmFjZU10bFByb3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkgOiBT
dXJmYWNlSW1wbChzdGF0ZSkge30KKysgICAgdmlydHVhbCBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0
ICAgICAgPSAwOworKyAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCA9IDA7
CisrCisrICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5k
ZXggJmltYWdlSW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFy
Z2V0ICoqcnRPdXQpIG92ZXJyaWRlID0gMDsKKysKKysgICAgdmlydHVhbCBib29sIGhhc1JvYnVz
dFJlc291cmNlSW5pdCgpIGNvbnN0ID0gMDsKKysgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVu
c3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9
IDA7CisrICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRh
aW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0g
MDsKKysgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9y
UmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworKyAgICB2aXJ0dWFs
IGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmIGdldENvbG9yVGV4dHVyZSgpID0gMDsKKyt9OworKwor
K2NsYXNzIFN1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZU10bFByb3RvY29sCisgeworICAgcHVi
bGljOgorICAgICBTdXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCitAQCAtNjcsMTEgKzg3
LDExIEBAIGNsYXNzIFN1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKKyAgICAgYW5nbGU6
OlJlc3VsdCBpbml0aWFsaXplQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4
ICZpbWFnZUluZGV4KSBvdmVycmlkZTsKKyAKKy0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZn
ZXRDb2xvclRleHR1cmUoKSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CisrICAgIGNvbnN0IG10
bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUNvbG9y
VGV4dHVyZTsgfQorICAgICBjb25zdCBtdGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25z
dCB7IHJldHVybiBtQ29sb3JGb3JtYXQ7IH0KKy0gICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7
IHJldHVybiBtU2FtcGxlczsgfQorKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1TYW1wbGVzOyB9CisgCistICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0
KCkgY29uc3QgeyByZXR1cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQorKyAgICBib29sIGhhc1Jv
YnVzdFJlc291cmNlSW5pdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1Sb2J1c3RSZXNvdXJj
ZUluaXQ7IH0KKyAKKyAgICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCitAQCAtMTQ0LDEzICsxNjQsMTQgQEAg
Y2xhc3MgV2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQg
ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
IG92ZXJyaWRlOworICAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFp
bmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0IC8qKiBudWxsYWJs
ZSAqLyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqbmV3RHJhd2FibGVPdXQgLyoqIG51bGxhYmxlICovKSBvdmVycmlkZTsKKyAKKyAgICAg
Ly8gRW5zdXJlIHRoZSB0aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdldENvbG9yVGV4dHVyZSgp
IGlzIHJlYWR5IGZvciBnbFJlYWRQaXhlbHMoKS4gVGhpcworICAgICAvLyBpbXBsaWNpdGx5IGNh
bGxzIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKCkuCistICAgIGFuZ2xlOjpSZXN1bHQg
ZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKKy0KKysgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZv
clJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBi
b29sIHByZXNlcnZlQnVmZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJldGFpbkJ1ZmZl
cjsgfQorICAgcHJpdmF0ZToKKyAgICAgYW5nbGU6OlJlc3VsdCBzd2FwSW1wbChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgb2J0YWluTmV4dERyYXdhYmxl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKK0BAIC0xNjgsNiArMTg5LDggQEAgY2xhc3Mg
V2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgIC8vIGV2ZW50LiBXZSBk
b24ndCB1c2UgbU1ldGFsTGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5IHNpbmNlIGl0IG1pZ2h0
IGJlIGNoYW5nZWQgaW50ZXJuYWxseSBieQorICAgICAvLyBtZXRhbCBydW50aW1lLgorICAgICBD
R1NpemUgbUN1cnJlbnRLbm93bkRyYXdhYmxlU2l6ZTsKKysKKysgICAgYm9vbCBtUmV0YWluQnVm
ZmVyID0gZmFsc2U7CisgfTsKKyAKKyAvLyBPZmZzY3JlZW4gc3VyZmFjZSwgYmFzZSBjbGFzcyBv
ZiBQQnVmZmVyLCBJT1N1cmZhY2UuCitAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVy
U3VyZmFjZU10bCA6IHB1YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCisgICAgIHZvaWQgc2V0Rml4
ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkgb3ZlcnJpZGU7CisgfTsKKyAKKy0vLyBPZmZzY3JlZW4g
Y3JlYXRlZCBmcm9tIElPU3VyZmFjZQorLWNsYXNzIElPU3VyZmFjZVN1cmZhY2VNdGwgOiBwdWJs
aWMgT2Zmc2NyZWVuU3VyZmFjZU10bAorLXsKKy0gIHB1YmxpYzoKKy0gICAgSU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBF
R0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVn
bDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKKy0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBv
dmVycmlkZTsKKy0KKy0gICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVy
cmlkZTsKKy0gICAgZWdsOjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOworLQorLSAgICBhbmdsZTo6UmVzdWx0
IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGlu
ZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpJbWFnZUluZGV4ICZpbWFnZUluZGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoq
cnRPdXQpIG92ZXJyaWRlOworLQorLSAgICBzdGF0aWMgYm9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMo
RUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
OworLQorLSAgcHJpdmF0ZToKKy0gICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVD
cmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKy0gICAgSU9TdXJmYWNlUmVm
IG1JT1N1cmZhY2U7CistICAgIE5TVUludGVnZXIgbUlPU3VyZmFjZVBsYW5lOworLSAgICBpbnQg
bUlPU3VyZmFjZUZvcm1hdElkeDsKKy19OworLQorIH0gIC8vIG5hbWVzcGFjZSByeAorLQorICNl
bmRpZiAvKiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9TVVJGQUNFTVRMX0hfICovCitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0gYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQoraW5kZXggMzAzZmIxNi4uMWI0Y2Qx
MCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1t
CisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQorQEAgLTIz
LDcgKzIzLDcgQEAKKyAjaWYgZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFM
X0ZSQU1FX0NBUFRVUkUpCisgIyAgICBkZWZpbmUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9F
TkFCTEVEIDAKKyAjZWxzZQorLSMgICAgZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVf
RU5BQkxFRCAxCisrIyAgICBkZWZpbmUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVE
IEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSQorICNlbmRpZgorIAorIG5hbWVzcGFjZSByeAor
QEAgLTMzLDU1ICszMywxOSBAQAorIHsKKyAKKyAjZGVmaW5lIEFOR0xFX1RPX0VHTF9UUlkoRVhQ
UikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIGRvICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KytkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyt7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgaWYgKEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZSkpIFwKKyAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZh
Y2UoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgfSB3aGlsZSAoMCkKKyt9
IHdoaWxlICgwKQorIAorIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1
ZmZlckRlcHRoRm9ybWF0SWQgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworIGNvbnN0
ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9
IGFuZ2xlOjpGb3JtYXRJRDo6UzhfVUlOVDsKKyBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtE
ZWZhdWx0RnJhbWVCdWZmZXJEZXB0aFN0ZW5jaWxGb3JtYXRJZCA9CisgICAgIGFuZ2xlOjpGb3Jt
YXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ7CisgCistc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8K
Ky17CistICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdDsKKy0gICAgR0xlbnVtIHR5cGU7CistICAg
IHNpemVfdCBjb21wb25lbnRCeXRlczsKKy0KKy0gICAgYW5nbGU6OkZvcm1hdElEIG5hdGl2ZUFu
Z2xlRm9ybWF0SWQ7CistfTsKKy0KKy0vLyBjbGFuZy1mb3JtYXQgb2ZmCistLy8gTk9URShocWxl
KTogU3VwcG9ydCBSMTZfVUlOVCBvbmNlIEdMRVMzIGlzIGNvbXBsZXRlLgorLWNvbnN0ZXhwciBz
dGQ6OmFycmF5PElPU3VyZmFjZUZvcm1hdEluZm8sIDg+IGtJT1N1cmZhY2VGb3JtYXRzID0ge3sK
Ky0gICAge0dMX1JFRCwgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDEsIGFu
Z2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19LAorLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVE
X1NIT1JULCAgICAgICAgICAgICAgMiwgYW5nbGU6OkZvcm1hdElEOjpSMTZfVU5PUk19LAorLSAg
ICB7R0xfUkcsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgMiwgYW5nbGU6
OkZvcm1hdElEOjpSOEc4X1VOT1JNfSwKKy0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9T
SE9SVCwgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VOT1JNfSwKKy0g
ICAge0dMX1JHQiwgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xl
OjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk19LAorLSAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9S
TX0sCistICAgIHtHTF9SR0JBLCAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICA4
LCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkExNl9GTE9BVH0sCistICAgIHtHTF9SR0IxMF9B
MiwgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkIx
MEcxMFIxMEEyX1VOT1JNfSwKKy19fTsKKy0vLyBjbGFuZy1mb3JtYXQgb24KKy0KKy1pbnQgRmlu
ZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUp
CisteworLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4oa0lPU3VyZmFj
ZUZvcm1hdHMuc2l6ZSgpKTsgKytpKQorLSAgICB7CistICAgICAgICBjb25zdCBhdXRvICZmb3Jt
YXRJbmZvID0ga0lPU3VyZmFjZUZvcm1hdHNbaV07CistICAgICAgICBpZiAoZm9ybWF0SW5mby5p
bnRlcm5hbEZvcm1hdCA9PSBpbnRlcm5hbEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0gdHlw
ZSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gaTsKKy0gICAgICAgIH0KKy0gICAg
fQorLSAgICByZXR1cm4gLTE7CistfQorLQorIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVU
ZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCitAQCAtMTI4LDYgKzkyLDE5
IEBAIGJvb2wgSXNGcmFtZUNhcHR1cmVFbmFibGVkKCkKKyAjZW5kaWYKKyB9CisgCisrQU5HTEVf
TVRMX1VOVVNFRAorK3N0ZDo6c3RyaW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQorK3sKKysjaWYg
IUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorKyAgICByZXR1cm4gIiI7CisrI2Vs
c2UKKysgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9GSUxFIik7CisrICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQ
YXRoID0gdmFyID8gdmFyIDogIiI7CisrCisrICAgIHJldHVybiBmaWxlUGF0aDsKKysjZW5kaWYK
Kyt9CisrCisgQU5HTEVfTVRMX1VOVVNFRAorIHNpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJl
KCkKKyB7CitAQCAtMjAyLDYgKzE3OSwyMSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1U
TERldmljZT4gbWV0YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQorICAg
ICB7CisgICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBb
W01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKyAgICAgICAgIGNhcHR1cmVEZXNj
cmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmls
ZSgpOworKyAgICAgICAgaWYgKGZpbGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZp
bGVQYXRoICsgc3RkOjp0b19zdHJpbmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2Ui
OworKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVy
ZURlc3RpbmF0aW9uR1BVVHJhY2VEb2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3Jp
cHRvci5vdXRwdXRVUkwgPQorKyAgICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBh
dXNlIGV4ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lk
ZSBYY29kZQorKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRM
Q2FwdHVyZURlc3RpbmF0aW9uRGV2ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisgCisgICAgICAg
ICBOU0Vycm9yICplcnJvcjsKKyAgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2Fw
dHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCitAQCAt
MjExLDE0ICsyMDMsMTUgQEAgdm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1l
dGFsRGV2aWNlLCBpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsQ21kUXUKKyAgICAgfQorICAgICBl
bHNlCisgIyAgICBlbmRpZiAgLy8gX19NQUNfMTBfMTUKKysgICAgICAgIGlmIChBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMykpCisgICAgIHsKKy0gICAgICAgIGlmIChG
cmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIFtjYXB0
dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKKy0gICAgICAg
IH0KKy0gICAgICAgIGVsc2UKKysgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJl
RGVzY3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworKyAgICAg
ICAgY2FwdHVyZURlc2NyaXB0b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7
CisrCisrICAgICAgICBOU0Vycm9yICplcnJvcjsKKysgICAgICAgIGlmICghW2NhcHR1cmVNYW5h
Z2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZl
cnJvcl0pCisgICAgICAgICB7CistICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2Fw
dHVyZVdpdGhDb21tYW5kUXVldWU6bWV0YWxDbWRRdWV1ZV07CisrICAgICAgICAgICAgTlNMb2co
QCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisgICAgICAgICB9
CisgICAgIH0KKyAjZW5kaWYgIC8vIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAor
QEAgLTI0NSwxMSArMjM4LDEwIEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgfQorIH0KKyAK
Ky0vLyBTdXJmYWNlTXRsIGltcGxlbWVudGF0aW9uCisgU3VyZmFjZU10bDo6U3VyZmFjZU10bChE
aXNwbGF5TXRsICpkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpT
dXJmYWNlU3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpB
dHRyaWJ1dGVNYXAgJmF0dHJpYnMpCistICAgIDogU3VyZmFjZUltcGwoc3RhdGUpCisrICAgIDog
U3VyZmFjZU10bFByb3RvY29sKHN0YXRlKQorIHsKKyAgICAgbVJvYnVzdFJlc291cmNlSW5pdCA9
CisgICAgICAgICBhdHRyaWJzLmdldChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9O
X0FOR0xFLCBFR0xfRkFMU0UpID09IEVHTF9UUlVFOworQEAgLTY5Myw2ICs2ODUsMTAgQEAgdm9p
ZCBTdG9wRnJhbWVDYXB0dXJlKCkKKyAgICAgcmV0dXJuIFN1cmZhY2VNdGw6OmdldEF0dGFjaG1l
bnRSZW5kZXJUYXJnZXQoY29udGV4dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRP
dXQpOworIH0KKyAKKythbmdsZTo6UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJl
bnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3sKKysgICAg
cmV0dXJuIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnRleHQsIG51bGxwdHIpOwor
K30KKyBhbmdsZTo6UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJs
ZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJh
d2FibGVPdXQpCisgeworQEAgLTk0MywxNTcgKzkzOSw1IEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVy
ZSgpCisgICAgIG1TaXplLmhlaWdodCA9IGhlaWdodDsKKyB9CisgCistLy8gSU9TdXJmYWNlU3Vy
ZmFjZU10bCBpbXBsZW1lbnRhdGlvbi4KKy1JT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VT
dXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVy
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpB
dHRyaWJ1dGVNYXAgJmF0dHJpYnMpCistICAgIDogT2Zmc2NyZWVuU3VyZmFjZU10bChkaXNwbGF5
LCBzdGF0ZSwgYXR0cmlicyksIG1JT1N1cmZhY2UoKF9fYnJpZGdlIElPU3VyZmFjZVJlZikoYnVm
ZmVyKSkKKy17CistICAgIENGUmV0YWluKG1JT1N1cmZhY2UpOworLQorLSAgICBtSU9TdXJmYWNl
UGxhbmUgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVf
QU5HTEUpKTsKKy0KKy0gICAgRUdMQXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQo
RUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFKTsKKy0gICAgRUdMQXR0cmliIHR5cGUg
ICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7CistICAgIG1J
T1N1cmZhY2VGb3JtYXRJZHggPQorLSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0
YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5
cGUpKTsKKy0gICAgQVNTRVJUKG1JT1N1cmZhY2VGb3JtYXRJZHggPj0gMCk7CistCistICAgIG1D
b2xvckZvcm1hdCA9CistICAgICAgICBkaXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNl
Rm9ybWF0c1ttSU9TdXJmYWNlRm9ybWF0SWR4XS5uYXRpdmVBbmdsZUZvcm1hdElkKTsKKy19Cist
SU9TdXJmYWNlU3VyZmFjZU10bDo6fklPU3VyZmFjZVN1cmZhY2VNdGwoKQorLXsKKy0gICAgaWYg
KG1JT1N1cmZhY2UgIT0gbnVsbHB0cikKKy0gICAgeworLSAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1
cmZhY2UpOworLSAgICAgICAgbUlPU3VyZmFjZSA9IG51bGxwdHI7CistICAgIH0KKy19CistCist
ZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikKKy17CistICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CistICAgIFN0YXJ0RnJhbWVDYXB0dXJl
KGNvbnRleHRNdGwpOworLQorLSAgICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlm
IG5lZWRlZDoKKy0gICAgQU5HTEVfVE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVk
KGNvbnRleHQpKTsKKy0KKy0gICAgcmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJ
bWFnZShjb250ZXh0LCB0ZXh0dXJlLCBidWZmZXIpOworLX0KKy0KKy1lZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgRUdMaW50IGJ1ZmZlcikKKy17CistICAgIGVnbDo6RXJyb3IgcmUgPSBPZmZzY3JlZW5TdXJm
YWNlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29udGV4dCwgYnVmZmVyKTsKKy0gICAgU3RvcEZyYW1l
Q2FwdHVyZSgpOworLSAgICByZXR1cm4gcmU7CistfQorLQorLWFuZ2xlOjpSZXN1bHQgSU9TdXJm
YWNlU3VyZmFjZU10bDo6Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldCgKKy0gICAgY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCistICAgIEdMZW51bSBiaW5kaW5nLAorLSAgICBjb25zdCBnbDo6
SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCwKKy0gICAgR0xzaXplaSBzYW1wbGVzLAorLSAgICBGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkKKy17CistICAgIC8vIEluaXRp
YWxpemUgb2Zmc2NyZWVuIHRleHR1cmUgaWYgbmVlZGVkOgorLSAgICBBTkdMRV9UUlkoZW5zdXJl
Q29sb3JUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7CistCistICAgIHJldHVybiBPZmZzY3JlZW5T
dXJmYWNlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGlt
YWdlSW5kZXgsIHNhbXBsZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ0T3V0KTsKKy19CistCistYW5nbGU6OlJlc3VsdCBJT1N1
cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KQorLXsKKy0gICAgaWYgKG1Db2xvclRleHR1cmUpCistICAgIHsKKy0gICAg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKy0gICAgfQorLSAgICBDb250ZXh0
TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworLSAgICBBTkdMRV9NVExf
T0JKQ19TQ09QRQorLSAgICB7CistICAgICAgICBhdXRvIHRleERlc2MgPQorLSAgICAgICAgICAg
IFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0
Om1Db2xvckZvcm1hdC5tZXRhbEZvcm1hdAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOm1TaXplLndpZHRoCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQ6bVNpemUuaGVpZ2h0CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXBwZWQ6Tk9dOworLQorLSAgICAgICAgdGV4
RGVzYy51c2FnZSA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0dXJlVXNhZ2VS
ZW5kZXJUYXJnZXQ7CistCistICAgICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlID0KKy0gICAg
ICAgICAgICBbY29udGV4dE10bC0+Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2Ny
aXB0b3I6dGV4RGVzYworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc3VyZmFjZTptSU9TdXJmYWNlCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOm1JT1N1cmZh
Y2VQbGFuZV07CistCistICAgICAgICBtQ29sb3JUZXh0dXJlID0gbXRsOjpUZXh0dXJlOjpNYWtl
RnJvbU1ldGFsKFt0ZXh0dXJlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOworLSAgICB9CistCist
ICAgIG1Db2xvclJlbmRlclRhcmdldC5zZXQobUNvbG9yVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtQ29sb3JGb3JtYXQpOworLQorLSAgICBpZiAoa0lPU3VyZmFjZUZvcm1h
dHNbbUlPU3VyZmFjZUZvcm1hdElkeF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQorLSAgICB7
CistICAgICAgICAvLyBUaGlzIGZvcm1hdCBoYXMgZW11bGF0ZWQgYWxwaGEgY2hhbm5lbC4gSW5p
dGlhbGl6ZSB0ZXh0dXJlJ3MgYWxwaGEgY2hhbm5lbCB0byAxLjAuCistICAgICAgICBjb25zdCBt
dGw6OkZvcm1hdCAmcmdiQ2xlYXJGb3JtYXQgPQorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPmdl
dFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKKy0gICAgICAgIEFO
R0xFX1RSWShtdGw6OkluaXRpYWxpemVUZXh0dXJlQ29udGVudHNHUFUoCistICAgICAgICAgICAg
Y29udGV4dCwgbUNvbG9yVGV4dHVyZSwgcmdiQ2xlYXJGb3JtYXQsCistICAgICAgICAgICAgbXRs
OjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpN
YWtlMkQoMCkpLAorLSAgICAgICAgICAgIE1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKKy0KKy0g
ICAgICAgIC8vIERpc2FibGUgc3Vic2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4K
Ky0gICAgICAgIG1Db2xvclRleHR1cmUtPnNldENvbG9yV3JpdGFibGVNYXNrKE1UTENvbG9yV3Jp
dGVNYXNrQWxsICYgKH5NVExDb2xvcldyaXRlTWFza0FscGhhKSk7CistICAgIH0KKy0KKy0gICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworLX0KKy0KKy0vLyBzdGF0aWMKKy1ib29s
IElPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIg
YnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorLXsKKy0gICAgSU9TdXJmYWNlUmVmIGlv
U3VyZmFjZSA9IChfX2JyaWRnZSBJT1N1cmZhY2VSZWYpKGJ1ZmZlcik7CistCistICAgIC8vIFRo
ZSBwbGFuZSBtdXN0IGV4aXN0IGZvciB0aGlzIElPU3VyZmFjZS4gSU9TdXJmYWNlR2V0UGxhbmVD
b3VudCBjYW4gcmV0dXJuIDAgZm9yIG5vbi1wbGFuYXIKKy0gICAgLy8gaW9TdXJmYWNlcyBidXQg
d2Ugd2lsbCB0cmVhdCBub24tcGxhbmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCistICAg
IHNpemVfdCBzdXJmYWNlUGxhbmVDb3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNl
R2V0UGxhbmVDb3VudChpb1N1cmZhY2UpKTsKKy0gICAgRUdMQXR0cmliIHBsYW5lICAgICAgICAg
ID0gYXR0cmlicy5nZXQoRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSk7CistICAgIGlmIChwbGFu
ZSA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQp
CistICAgIHsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICAvLyBUaGUg
d2lkdGggaGVpZ2h0IHNwZWNpZmllZCBtdXN0IGJlIGF0IGxlYXN0ICgxLCAxKSBhbmQgYXQgbW9z
dCB0aGUgcGxhbmUgc2l6ZQorLSAgICBFR0xBdHRyaWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdM
X1dJRFRIKTsKKy0gICAgRUdMQXR0cmliIGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQp
OworLSAgICBpZiAod2lkdGggPD0gMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IElP
U3VyZmFjZUdldFdpZHRoT2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSB8fAorLSAgICAgICAgaGVp
Z2h0IDw9IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihoZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVp
Z2h0T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZh
bHNlOworLSAgICB9CistCistICAgIC8vIEZpbmQgdGhpcyBJT1N1cmZhY2UgZm9ybWF0CistICAg
IEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVS
TkFMX0ZPUk1BVF9BTkdMRSk7CistICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJp
YnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworLQorLSAgICBpbnQgZm9ybWF0SW5kZXgg
PQorLSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4o
aW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0KKy0gICAgaWYg
KGZvcm1hdEluZGV4IDwgMCkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9
CistCistICAgIC8vIENoZWNrIHRoYXQgdGhlIGZvcm1hdCBtYXRjaGVzIHRoaXMgSU9TdXJmYWNl
IHBsYW5lCistICAgIGlmIChJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5lKGlvU3Vy
ZmFjZSwgcGxhbmUpICE9CistICAgICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0u
Y29tcG9uZW50Qnl0ZXMpCistICAgIHsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQor
LQorLSAgICByZXR1cm4gdHJ1ZTsKKy19CisgCisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
U3luY010bC5oCitpbmRleCA2MmY5NmVlLi5mNGJjYWU5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1N5bmNNdGwuaAorQEAgLTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENv
cHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorIC8vCitAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgbXRsCisgCisgLy8gQ29tbW9uIGNs
YXNzIHRvIGJlIHVzZWQgYnkgYm90aCBTeW5jSW1wbCBhbmQgRUdMU3luY0ltcGwuCisgLy8gTk9U
RTogU2hhcmVkRXZlbnQgaXMgb25seSBkZWNsYXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0
KworLSNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisrI2lmIGRlZmluZWQoX19JUEhPTkVf
MTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKKyBjbGFzcyBTeW5jCisgeworICAgcHVibGlj
OgorQEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgU3luYworICAgICBzdGQ6OnNoYXJlZF9wdHI8c3Rk
Ojpjb25kaXRpb25fdmFyaWFibGU+IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0
ZXg+IG1Mb2NrOworIH07CistI2Vsc2UgICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorKyNlbHNlICAgLy8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKKyBjbGFzcyBTeW5jCisgeworICAgcHVibGljOgorQEAgLTkwLDcgKzkwLDcgQEAg
Y2xhc3MgU3luYworICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgIH0K
KyB9OworLSNlbmRpZiAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKysjZW5kaWYg
IC8vICNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisg
fSAgLy8gbmFtZXNwYWNlIG10bAorIAorIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VO
VkltcGwKK0BAIC05OCw5ICs5OCw3IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VO
VkltcGwKKyAgIHB1YmxpYzoKKyAgICAgRmVuY2VOVk10bCgpOworICAgICB+RmVuY2VOVk10bCgp
IG92ZXJyaWRlOworLQorICAgICB2b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkgb3ZlcnJpZGU7CistCisgICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9uKSBvdmVycmlkZTsKKyAgICAgYW5nbGU6OlJl
c3VsdCB0ZXN0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJvb2xlYW4gKm91dEZpbmlz
aGVkKSBvdmVycmlkZTsKKyAgICAgYW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpIG92ZXJyaWRlOworQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xTeW5j
TXRsIGZpbmFsIDogcHVibGljIEVHTFN5bmNJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xpbnQgZmxhZ3MpIG92ZXJyaWRlOworICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25z
dCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKKyAK
KysgICAgZWdsOjpFcnJvciBkdXBOYXRpdmVGZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlz
cGxheSwgRUdMaW50ICpyZXN1bHQpIGNvbnN0IG92ZXJyaWRlOworKworICAgcHJpdmF0ZToKKyAg
ICAgbXRsOjpTeW5jIG1TeW5jOworIH07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1N5bmNNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010
bC5tbQoraW5kZXggZGZmODAwMy4uZjhmM2VlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvU3luY010bC5tbQorQEAgLTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHly
aWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
IC8vCitAQCAtMjIsNyArMjIsNyBAQAorIG5hbWVzcGFjZSBtdGwKKyB7CisgLy8gU2hhcmVkRXZl
bnQgaXMgb25seSBhdmFpbGFibGUgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKy0jaWYgQU5H
TEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRl
ZmluZWQoX19NQUNfMTBfMTQpCisgU3luYzo6U3luYygpIHt9CisgU3luYzo6flN5bmMoKSB7fQor
IAorQEAgLTg3LDcgKzg3LDcgQEAKKyAgICAgLy8gb25EZXN0cm95KCksIGJ1dCB0aGUgY2FsbGJh
Y2sgbWlnaHQgc3RpbGwgbm90IGJlIGZpcmVkIHlldC4KKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0
ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlPiBjdlJlZiA9IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRy
PHN0ZDo6bXV0ZXg+IGxvY2tSZWYgICAgICAgICAgICA9IG1Mb2NrOworLQorKyNpZiBBTkdMRV9N
VExfRVZFTlRfQVZBSUxBQkxFCisgICAgIEF1dG9PYmpDT2JqPE1UTFNoYXJlZEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIgPQorICAgICAgICAgY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRPckNyZWF0ZVNoYXJlZEV2ZW50TGlzdGVuZXIoKTsKKyAgICAgW21NZXRhbFNoYXJlZEV2ZW50
LmdldCgpIG5vdGlmeUxpc3RlbmVyOmV2ZW50TGlzdGVuZXIKK0BAIC0xMDYsNiArMTA2LDcgQEAK
KyAKKyAgICAgQVNTRVJUKG1NZXRhbFNoYXJlZEV2ZW50LmdldCgpLnNpZ25hbGVkVmFsdWUgPj0g
bVNldENvdW50ZXIpOworICAgICAqb3V0UmVzdWx0ID0gR0xfQ09ORElUSU9OX1NBVElTRklFRDsK
KysjZW5kaWYKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KK0BA
IC0xMTgsNyArMTE5LDcgQEAKKyAgICAgKnNpZ25hbGVkID0gbU1ldGFsU2hhcmVkRXZlbnQuZ2V0
KCkuc2lnbmFsZWRWYWx1ZSA+PSBtU2V0Q291bnRlcjsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworIH0KKy0jZW5kaWYgIC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxB
QkxFCisrI2VuZGlmICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9f
TUFDXzEwXzE0KQorIH0gIC8vIG5hbWVzcGFjZSBtdGwKKyAKKyAvLyBGZW5jZU5WTXRsIGltcGxl
bWVudGF0aW9uCitAQCAtMTI4LDcgKzEyOSw4IEBACisgCisgdm9pZCBGZW5jZU5WTXRsOjpvbkRl
c3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICBtU3luYy5vbkRlc3Ry
b3koKTsKKysgICAgVU5JTVBMRU1FTlRFRCgpOworKyAgICByZXR1cm47CisgfQorIAorIGFuZ2xl
OjpSZXN1bHQgRmVuY2VOVk10bDo6c2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVu
dW0gY29uZGl0aW9uKQorQEAgLTMwNyw0ICszMDksMTAgQEAKKyAgICAgcmV0dXJuIGVnbDo6Tm9F
cnJvcigpOworIH0KKyAKKytlZ2w6OkVycm9yIEVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQo
Y29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3QKKyt7Cisr
ICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZERpc3BsYXkoKTsKKyt9
CisrCisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJl
TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCitpbmRleCA1
YzIxNDFiLi41ZjRiMmQ0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1RleHR1cmVNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVN
dGwuaAorQEAgLTE1LDkgKzE1LDkgQEAKKyAjaW5jbHVkZSAiY29tbW9uL1BhY2tlZEVudW1zLmgi
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL1RleHR1cmVJbXBsLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oIgorKyNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCistCisgbmFtZXNwYWNlIHJ4Cisgewor
IAorQEAgLTMyLDYgKzMyLDggQEAgY2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1w
bAorIHsKKyAgIHB1YmxpYzoKKyAgICAgVGV4dHVyZU10bChjb25zdCBnbDo6VGV4dHVyZVN0YXRl
ICZzdGF0ZSk7CisrICAgIC8vIFRleHR1cmUgIHZpZXcKKysgICAgVGV4dHVyZU10bChjb25zdCBU
ZXh0dXJlTXRsICZtdGwsIEdMZW51bSBmb3JtYXQpOworICAgICB+VGV4dHVyZU10bCgpIG92ZXJy
aWRlOworICAgICB2b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3Zl
cnJpZGU7CisgCitAQCAtMTkzLDYgKzE5NSw3IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMg
VGV4dHVyZUltcGwKKyAgICAgSW1hZ2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24o
Y29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgpOworICAgICBSZW5kZXJUYXJnZXRNdGwg
JmdldFJlbmRlclRhcmdldChjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CisgICAg
IGJvb2wgaXNJbmRleFdpdGhpbk1pbk1heExldmVscyhjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1h
Z2VJbmRleCkgY29uc3Q7CisrICAgIG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1
cmUoY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgpOworIAorICAgICAvLyBJZiBsZXZl
bHMgPSAwLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGZ1bGwgbWlwbWFwcyB0ZXh0dXJlLgor
ICAgICBhbmdsZTo6UmVzdWx0IHNldFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorQEAgLTMxMiw4ICszMTUsOSBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1
cmVJbXBsCisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVNaXBtYXBDUFUoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworIAorICAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworKyAgICBTdXJm
YWNlTXRsUHJvdG9jb2wgKm1Cb3VuZFN1cmZhY2UgPSBuaWw7CisgICAgIC8vIFRoZSByZWFsIHRl
eHR1cmUgdXNlZCBieSBNZXRhbCBkcmF3IGNhbGxzLgorLSAgICBtdGw6OlRleHR1cmVSZWYgbU5h
dGl2ZVRleHR1cmU7CisrICAgIG10bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZSAgICAgICAg
ID0gbmlsOworICAgICBpZDxNVExTYW1wbGVyU3RhdGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5p
bDsKKyAKKyAgICAgLy8gTnVtYmVyIG9mIHNsaWNlcworQEAgLTMyMywxOCArMzI3LDE0IEBAIGNs
YXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKKyAgICAgLy8gT25jZSB0aGUgaW1h
Z2VzIGFycmF5IGlzIGNvbXBsZXRlLCB0aGV5IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gcmVhbCB0
ZXh0dXJlIG9iamVjdC4KKyAgICAgLy8gTk9URToKKyAgICAgLy8gIC0gVGhlIHNlY29uZCBkaW1l
bnNpb24gaXMgaW5kZXhlZCBieSBjb25maWd1cmVkIGJhc2UgbGV2ZWwgKyBhY3R1YWwgbmF0aXZl
IGxldmVsCistICAgIC8vICAtIEZvciBDdWJlIG1hcCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYg
ZW50cmllcyBpbiB0aGUgbVRleEltYWdlRGVmcyB0YWJsZSwgb25lIGZvciBlYWNoCistICAgIC8v
ICBmYWNlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIEN1YmUgbWFwJ3MgaW1hZ2UgaXMgZGVmaW5lZCBw
ZXIgZmFjZSAmIHBlciBsZXZlbC4KKysgICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVyZSB3aWxs
IGJlIGF0IG1vc3QgNiBlbnRyaWVzIGluIHRoZSBtYXAgdGFibGUsIG9uZSBmb3IgZWFjaCBmYWNl
LiBUaGlzIGlzCisrICAgIC8vICBiZWNhdXNlIHRoZSBDdWJlIG1hcCdzIGltYWdlIGlzIGRlZmlu
ZWQgcGVyIGZhY2UgJiBwZXIgbGV2ZWwuCisgICAgIC8vICAtIEZvciBvdGhlciB0ZXh0dXJlIHR5
cGVzLCB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGVudHJ5IGluIHRoZSBtYXAgdGFibGUuIEFsbCBv
dGhlciB0ZXh0dXJlcworICAgICAvLyAgZXhjZXB0IEN1YmUgbWFwIGhhcyB0ZXh0dXJlIGltYWdl
IGRlZmluZWQgcGVyIGxldmVsIChhbGwgc2xpY2VzIGluY2x1ZGVkKS4KKysgICAgLy8gIC0gVGhl
c2UgdGhyZWUgdmFyaWFibGVzJyBzZWNvbmQgZGltZW5zaW9uIGFyZSBpbmRleGVkIGJ5IGltYWdl
IGluZGV4IChiYXNlIGxldmVsIGluY2x1ZGVkKS4KKyAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4
TGV2ZWxBcnJheTxJbWFnZURlZmluaXRpb25NdGw+PiBtVGV4SW1hZ2VEZWZzOworLQorLSAgICAv
LyBSZW5kZXIgVGFyZ2V0IHBlciBzbGljZS9kZXB0aC9jdWJlIGZhY2UuCistICAgIC8vIC0gRm9y
IDJEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgb25lIGtleSBlbnRyeSBpbiB0aGUgbWFwLgorLSAg
ICAvLyAtIEZvciBDdWJlIG1hcDogVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5IGVudHJpZXMu
CistICAgIC8vIC0gRm9yIGFycmF5LzNEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgYXQgbW9zdCBz
bGljZXMvZGVwdGhzIG51bWJlciBvZiBrZXkgZW50cmllcy4KKy0gICAgLy8gLSBUaGUgc2Vjb25k
IGRpbWVuc2lvbiBpcyBpbmRleGVkIGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBu
YXRpdmUgbGV2ZWwKKyAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxSZW5kZXJU
YXJnZXRNdGw+PiBtUGVyTGF5ZXJSZW5kZXJUYXJnZXRzOworKyAgICBzdGQ6Om1hcDxpbnQsIGds
OjpUZXhMZXZlbEFycmF5PG10bDo6VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1TVGV4dHVyZXM7Cisg
CisgICAgIC8vIE1pcG1hcCB2aWV3cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGlnbm9y
ZWQgYmFzZSBsZXZlbCk6CisgICAgIG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBtTmF0aXZlTGV2
ZWxWaWV3czsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVy
ZU10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitpbmRl
eCA2MjNjMTA0Li4zYjFjOGFmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1RleHR1cmVNdGwubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0
dXJlTXRsLm1tCitAQCAtMjAsOCArMjAsOCBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9Db250ZXh0TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0Rpc3BsYXlNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVC
dWZmZXJNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNl
U3VyZmFjZU10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TYW1wbGVy
TXRsLmgiCistI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisgI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIgorQEAgLTUzNCw2ICs1MzQs
MTAgQEAgR0xlbnVtIE92ZXJyaWRlU3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorIAorIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworKyAgICBpZiAobUJvdW5kU3VyZmFjZSkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICB9
CisgICAgIGlmIChtTmF0aXZlVGV4dHVyZSkKKyAgICAgeworICAgICAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTEyMDcsMjUgKzEyMTEsMTUgQEAgR0xlbnVtIE92ZXJy
aWRlU3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpS
ZXN1bHQgVGV4dHVyZU10bDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsK
Ky0KKy0gICAgYXV0byBwQnVmZmVyICAgICA9IEdldEltcGxBczxPZmZzY3JlZW5TdXJmYWNlTXRs
PihzdXJmYWNlKTsKKy0gICAgbU5hdGl2ZVRleHR1cmUgICA9IHBCdWZmZXItPmdldENvbG9yVGV4
dHVyZSgpOworLSAgICBtRm9ybWF0ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29sb3JGb3JtYXQo
KTsKKy0gICAgZ2w6OkV4dGVudHMgc2l6ZSA9IG1OYXRpdmVUZXh0dXJlLT5zaXplQXQwKCk7Cist
ICAgIG1Jc1BvdzIgICAgICAgICAgPSBnbDo6aXNQb3cyKHNpemUud2lkdGgpICYmIGdsOjppc1Bv
dzIoc2l6ZS5oZWlnaHQpICYmIGdsOjppc1BvdzIoc2l6ZS5kZXB0aCk7CistICAgIEFOR0xFX1RS
WShlbnN1cmVTYW1wbGVyU3RhdGVDcmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAgLy8gVGVsbCBj
b250ZXh0IHRvIHJlYmluZCB0ZXh0dXJlcworLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0g
bXRsOjpHZXRJbXBsKGNvbnRleHQpOworLSAgICBjb250ZXh0TXRsLT5pbnZhbGlkYXRlQ3VycmVu
dFRleHR1cmVzKCk7CistCisrICAgIElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAo
SU9TdXJmYWNlU3VyZmFjZU10bCAqKW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKysgICAgbUJvdW5k
U3VyZmFjZSAgICAgICAgICAgICAgICAgICA9IHN1cmZhY2VNdGw7CisgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpy
ZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICByZWxl
YXNlVGV4dHVyZSh0cnVlKTsKKysgICAgbUJvdW5kU3VyZmFjZSA9IG5pbDsKKysKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKK0BAIC0xMjM1LDYgKzEyMjksMTIg
QEAgR0xlbnVtIE92ZXJyaWRlU3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQor
IHsKKysgICAgaWYgKG1Cb3VuZFN1cmZhY2UpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWSgK
KysgICAgICAgICAgICBtQm91bmRTdXJmYWNlLT5nZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNv
bnRleHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsIHJ0T3V0KSk7CisrICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKyAgICAgQU5HTEVfVFJZKGVu
c3VyZVRleHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKKyAKKyAgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oCitpbmRleCBhYTQ1YmY5Li4yMGEyYzIw
IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRi
YWNrTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVk
YmFja010bC5oCitAQCAtMTAsMTIgKzEwLDIwIEBACisgI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJF
Ul9NRVRBTF9UUkFOU0ZPUk1GRUVEQkFDS01UTF9IXworICNkZWZpbmUgTElCQU5HTEVfUkVOREVS
RVJfTUVUQUxfVFJBTlNGT1JNRkVFREJBQ0tNVExfSF8KKyAKKysjaW5jbHVkZSA8TWV0YWwvTWV0
YWwuaD4KKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvVHJhbnNmb3JtRmVlZGJhY2tJbXBs
LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorKyNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgCistbmFt
ZXNwYWNlIHJ4CisrdHlwZWRlZiB1aW50NjRfdCBNdGxEZXZpY2VTaXplOworKworK25hbWVzcGFj
ZSBnbAorIHsKKytjbGFzcyBQcm9ncmFtU3RhdGU7CisrfSAgLy8gbmFtZXNwYWNlIGdsCisgCist
Y2xhc3MgQ29udGV4dE10bDsKKytuYW1lc3BhY2UgcngKKyt7CisgCisgY2xhc3MgVHJhbnNmb3Jt
RmVlZGJhY2tNdGwgOiBwdWJsaWMgVHJhbnNmb3JtRmVlZGJhY2tJbXBsCisgeworQEAgLTMyLDE3
ICs0MCwyMyBAQCBjbGFzcyBUcmFuc2Zvcm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1G
ZWVkYmFja0ltcGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6Ok9m
ZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nKSBvdmVycmlkZTsKKyAKKy0g
ICAgLy8gUGFyYW1zOgorLSAgICAvLyAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXggaXMgZmlyc3QgdmVy
dGV4IHVzZWQgYnkgZ2xEcmF3QXJyYXlzKi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZQorLSAg
ICAvLyBnbF9WZXJ0ZXhJbmRleCBpcyBzdGFydGluZyBmcm9tIHRoaXMuCistICAgIC8vIC0gc2tp
cHBlZFZlcnRpY2VzIGlzIG51bWJlciBvZiBza2lwcGVkIHZlcnRpY2VzICh1c2VmdWwgZm9yIG11
bHRpcGxlIG1ldGFsIGRyYXdzIHBlciBHTCBkcmF3CistICAgIC8vIGNhbGwpLgorLSAgICBhbmds
ZTo6UmVzdWx0IGdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAg
dm9pZCBnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZFZlcnRpY2VzLAorLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCk7CisrICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzT3V0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldHNTaXplKSBjb25zdDsKKysKKysgICAgY29uc3Qg
Z2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmZ2V0QnVmZmVy
SGFuZGxlcygpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBtQnVmZmVySGFuZGxlczsK
KysgICAgfQorIAorICAgcHJpdmF0ZToKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
c0FycmF5PEJ1ZmZlck10bCAqPiBtQnVmZmVySGFuZGxlczsKKysgICAgZ2w6OlRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc0FycmF5PE10bERldmljZVNpemU+IG1CdWZmZXJPZmZzZXRzOworKyAgICBn
bDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNp
emVzOworKworKyAgICAvLyBBbGlnbmVkIG9mZnNldCBmb3IgZW11bGF0aW9uLiBDb3VsZCBiZSBz
bWFsbGVyIHRoYW4gb2Zmc2V0LgorKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJy
YXk8TXRsRGV2aWNlU2l6ZT4gbUFsaWduZWRCdWZmZXJPZmZzZXRzOworIH07CisgCisgfSAgLy8g
bmFtZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Ry
YW5zZm9ybUZlZWRiYWNrTXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5z
Zm9ybUZlZWRiYWNrTXRsLm1tCitpbmRleCBkOTQwYzNkLi5kZTdhOTA5IDEwMDY0NAorLS0tIGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KK0BA
IC04LDE4ICs4LDI3IEBACisgLy8KKyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQnVmZmVyTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Nv
bnRleHRNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10
bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisrI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCIKKyAKKy0jaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVkZSAi
bGliQU5HTEUvUXVlcnkuaCIKKy0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29u
dGV4dE10bC5oIgorLSNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5o
IgorKworKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyAKKyBuYW1lc3BhY2UgcngKKyB7Cisg
CisgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNrTXRsKGNvbnN0IGdsOjpU
cmFuc2Zvcm1GZWVkYmFja1N0YXRlICZzdGF0ZSkKKy0gICAgOiBUcmFuc2Zvcm1GZWVkYmFja0lt
cGwoc3RhdGUpCisrICAgIDogVHJhbnNmb3JtRmVlZGJhY2tJbXBsKHN0YXRlKSwKKysgICAgICBt
QnVmZmVySGFuZGxlc3t9LAorKyAgICAgIG1CdWZmZXJPZmZzZXRze30sCisrICAgICAgbUJ1ZmZl
clNpemVze30sCisrICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRze30KKyB7fQorIAorIFRyYW5z
Zm9ybUZlZWRiYWNrTXRsOjp+VHJhbnNmb3JtRmVlZGJhY2tNdGwoKSB7fQorQEAgLTI3LDQwICsz
Niw3OSBAQAorIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIHByaW1pdGl2ZU1vZGUpCisgeworLSAgICBtdGw6
OkdldEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhp
cyk7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7
CisrICAgIC8vIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisrICAg
IGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFu
c2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKysgICAgfQorIAorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRl
eHRNdGwtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJUKGV4
ZWN1dGFibGUpOworKyAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrCisrICAgIGZvciAoc2l6ZV90IGJ1ZmZl
ckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkK
KysgICAgeworKyAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZm
ZXI+ICZiaW5kaW5nID0gbVN0YXRlLmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworKyAg
ICAgICAgQVNTRVJUKGJpbmRpbmcuZ2V0KCkpOworKworKyAgICAgICAgQnVmZmVyTXRsICpidWZm
ZXJNdGwgPSBtdGw6OkdldEltcGwoYmluZGluZy5nZXQoKSk7CisrCisrICAgICAgICBhc3NlcnQo
YnVmZmVyTXRsKTsKKysgICAgICAgIG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRp
bmcuZ2V0T2Zmc2V0KCk7CisrICAgICAgICBtQnVmZmVyU2l6ZXNbYnVmZmVySW5kZXhdICAgPSBn
bDo6R2V0Qm91bmRCdWZmZXJBdmFpbGFibGVTaXplKGJpbmRpbmcpOworKyAgICAgICAgbUJ1ZmZl
ckhhbmRsZXNbYnVmZmVySW5kZXhdID0gYnVmZmVyTXRsOworKworKyAgICAgICAgQVNTRVJUKGNv
bnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVl
ZGJhY2suZW5hYmxlZCk7CisrICAgICAgICBjb25zdCBNdGxEZXZpY2VTaXplIG9mZnNldEFsaWdu
bWVudCA9IG10bDo6a1VuaWZvcm1CdWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50OworKwor
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcG9zc2libGUgdW5kZXIvb3ZlcmZsb3cg
d2l0aCBiaW5kaW5nIHNpemUuCisrICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNdGxEZXZp
Y2VTaXplKSA+PSBzaXplb2YoYmluZGluZy5nZXRTaXplKCkpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAiTXRsRGV2aWNlU2l6ZSB0b28gc21hbGwiKTsKKysKKysgICAgICAgIC8vIFNldCB0aGUg
b2Zmc2V0IGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IHdoaWxl
IHJlbWFpbmluZyBhbGlnbmVkLgorKyAgICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRzW2J1ZmZl
ckluZGV4XSA9CisrICAgICAgICAgICAgKG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAvIG9m
ZnNldEFsaWdubWVudCkgKiBvZmZzZXRBbGlnbm1lbnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJu
IGNvbnRleHRNdGwtPm9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZmZXJDb3VudCwgbUJ1
ZmZlckhhbmRsZXMpOworIH0KKyAKKyBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRs
OjplbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworKyAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICAvLyBOb3QgY3VycmVudGx5
IHN1cHBvcnRlZCB3aXRoIG1zbCBjb21waWxlcgorKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERp
c3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisrICAgIH0KKysK
KysgICAgLy8gSWYgdGhlcmUncyBhbiBhY3RpdmUgdHJhbnNmb3JtIGZlZWRiYWNrIHF1ZXJ5LCBh
Y2N1bXVsYXRlIHRoZSBwcmltaXRpdmVzIGRyYXduLgorICAgICBjb25zdCBnbDo6U3RhdGUgJmds
U3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOworICAgICBnbDo6UXVlcnkgKnRyYW5zZm9ybUZl
ZWRiYWNrUXVlcnkgPQorICAgICAgICAgZ2xTdGF0ZS5nZXRBY3RpdmVRdWVyeShnbDo6UXVlcnlU
eXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0dGVuKTsKKysKKyAgICAgaWYgKHRy
YW5zZm9ybUZlZWRiYWNrUXVlcnkpCisgICAgIHsKKy0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFu
c2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKysg
ICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChtU3RhdGUuZ2V0UHJpbWl0aXZlc0RyYXduKCkpOworICAgICB9CistCistICAg
IG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRl
eHQsIHRoaXMpOworLQorKyAgICBjb250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7
CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJl
c3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpCisgeworLSAgICAvLyBXaGVuIFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1
ZmZlcnMgdG8gYmUgYm91bmQgZm9yIG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKKy0g
ICAgLy8gb25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgorLSAg
ICBtdGw6OkdldEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tJbmFjdGl2ZShjb250
ZXh0LCB0aGlzKTsKKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICBy
ZXR1cm4gY29udGV4dE10bC0+b25QYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisgfQorIAorIGFu
Z2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKKyB7CistICAgIG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZShjb250ZXh0LCB0aGlzKTsKKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAg
ICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1
dGFibGUoKTsKKysgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworKyAgICBzaXplX3QgeGZiQnVmZmVy
Q291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7Cisr
ICAgIHJldHVybiBjb250ZXh0TXRsLT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVmZmVy
Q291bnQsIG1CdWZmZXJIYW5kbGVzKTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1G
ZWVkYmFja010bDo6YmluZEluZGV4ZWRCdWZmZXIoCitAQCAtNjgsMTcgKzExNiwyMCBAQAorICAg
ICBzaXplX3QgaW5kZXgsCisgICAgIGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6
QnVmZmVyPiAmYmluZGluZykKKyB7CistICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdworKyAgICBV
TklNUExFTUVOVEVEKCk7CisgCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCistYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6
OmdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgs
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBza2lwcGVkVmVydGljZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzT3V0KQorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRz
U2l6ZSkgY29uc3QKKyB7CistICAgIGludDY0X3QgdmVydGljZXNEcmF3biA9IHN0YXRpY19jYXN0
PGludDY0X3Q+KG1TdGF0ZS5nZXRWZXJ0aWNlc0RyYXduKCkpICsgc2tpcHBlZFZlcnRpY2VzOwor
KyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRl
VHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgR0xz
aXplaXB0ciB2ZXJ0aWNlc0RyYXduID0gbVN0YXRlLmdldFZlcnRpY2VzRHJhd24oKTsKKyAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8R0xzaXplaT4gJmJ1ZmZlclN0cmlkZXMgPQorICAgICAgICAgbVN0
YXRlLmdldEJvdW5kUHJvZ3JhbSgpLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKKyAg
ICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+
Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworQEAgLTg3LDI3ICsxMzgsMjUgQEAK
KyAKKyAgICAgQVNTRVJUKHhmYkJ1ZmZlckNvdW50ID4gMCk7CisgCisrICAgIC8vIFRoZSBjYWxs
ZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0cyBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAg
VGhlIG1heGltdW0gcG9zc2libGUKKysgICAgLy8gbnVtYmVyIG9mIG91dHB1dHMgaXMgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUy4KKysgICAgQVNTRVJU
KG9mZnNldHNTaXplID49IHhmYkJ1ZmZlckNvdW50KTsKKysKKyAgICAgZm9yIChzaXplX3QgYnVm
ZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4
KQorICAgICB7CistICAgICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1
ZmZlcj4gJmJ1ZmZlckJpbmRpbmcgPQorLSAgICAgICAgICAgIG1TdGF0ZS5nZXRJbmRleGVkQnVm
ZmVyKGJ1ZmZlckluZGV4KTsKKy0KKy0gICAgICAgIEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRP
ZmZzZXQoKSAlIDQpID09IDApOworLQorLSAgICAgICAgLy8gT2Zmc2V0IHRoZSBnbF9WZXJ0ZXhJ
bmRleCBieSBkcmF3Q2FsbEZpcnN0VmVydGV4CisrICAgICAgICBpbnQ2NF90IG9mZnNldEZyb21E
ZXNjcmlwdG9yID0KKysgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihtQnVmZmVyT2Zm
c2V0c1tidWZmZXJJbmRleF0gLSBtQWxpZ25lZEJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdKTsK
KyAgICAgICAgIGludDY0X3QgZHJhd0NhbGxWZXJ0ZXhPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ2
NF90Pih2ZXJ0aWNlc0RyYXduKSAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXg7CisgCisgICAgICAgICBp
bnQ2NF90IHdyaXRlT2Zmc2V0ID0KKy0gICAgICAgICAgICAoYnVmZmVyQmluZGluZy5nZXRPZmZz
ZXQoKSArIGRyYXdDYWxsVmVydGV4T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0p
IC8KKysgICAgICAgICAgICAob2Zmc2V0RnJvbURlc2NyaXB0b3IgKyBkcmF3Q2FsbFZlcnRleE9m
ZnNldCAqIGJ1ZmZlclN0cmlkZXNbYnVmZmVySW5kZXhdKSAvCisgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oc2l6ZW9mKHVpbnQzMl90KSk7CisgCisgICAgICAgICBvZmZzZXRzT3V0
W2J1ZmZlckluZGV4XSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHdyaXRlT2Zmc2V0KTsKKyAKKy0g
ICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKy0gICAgICAgIEFOR0xFX0NIRUNLX0dMX0FM
TE9DKGNvbnRleHRNdGwsIG9mZnNldHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRlT2Zmc2V0KTsK
KysgICAgICAgIC8vIEFzc2VydCBvbiBvdmVyZmxvdy4gIEZvciBub3csIHN1cHBvcnQgdHJhbnNm
b3JtIGZlZWRiYWNrIHVwIHRvIDJHQi4KKysgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1ZmZl
ckluZGV4XSA9PSB3cml0ZU9mZnNldCk7CisgICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwuaCBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCitpbmRleCBjMmZiODQ2Li5mZTZi
NWY3IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5
TXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5o
CitAQCAtNDMsOCArNDMsOSBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhB
cnJheUltcGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv
aWQgKmluZGljZXMpOworIAorICAgICAvLyB2ZXJ0ZXhEZXNjQ2hhbmdlZCBpcyBib3RoIGlucHV0
IGFuZCBvdXRwdXQsIHRoZSBpbnB1dCB2YWx1ZSBpZiBpcyB0cnVlLCB3aWxsIGZvcmNlIG5ldwor
LSAgICAvLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQu
IE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZQorLSAgICAvLyB2ZXJ0ZXgg
YXJyYXkgaXMgZGlydHkKKysgICAgLy8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZp
YSB2ZXJ0ZXhEZXNjT3V0LiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZlIHNoYWRl
cgorKyAgICAvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisrICAgIC8vIE90aGVyd2lzZSwgaXQgaXMg
b25seSByZXR1cm5lZCB3aGVuIHRoZSB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkuCisgICAgIGFuZ2xl
OjpSZXN1bHQgc2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFuZ2Vk
LAorQEAgLTUyLDExICs1MywyNCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0
ZXhBcnJheUltcGwKKyAKKyAgICAgYW5nbGU6OlJlc3VsdCBnZXRJbmRleEJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91
dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSAqaW5kZXhUeXBlT3V0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJDb3VudE91dCk7CisrCisrICAgIC8vIFVzZSB0
byBlbXVsYXRlIGluc3RhbmNlZCBkcmF3IGZvciBpbnN0YW5jZSA8aW5zdGFuY2VJZD4uCisrICAg
IC8vIFRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgZm9yIGVtdWxhdGVkIGluc3RhbmNlIGRyYXcg
aXM6CisrICAgIC8vIC0gc2V0dXBEcmF3KCkKKysgICAgLy8gLSBkcmF3LgorKyAgICAvLyAtIGVt
dWxhdGVJbnN0YW5jZURyYXdTdGVwKDEpCisrICAgIC8vIC0gZHJhdy4KKysgICAgLy8gLSBlbXVs
YXRlSW5zdGFuY2VEcmF3U3RlcChuKQorKyAgICAvLyAtIGRyYXcuCisrICAgIC8vIC0gZW11bGF0
ZUluc3RhbmNlRHJhd1N0ZXAoMCkKKysgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcCht
dGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0YW5jZUlk
KTsKKyAKKyAgIHByaXZhdGU6CisgICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4dCk7
CitAQCAtNzIsMTUgKzg2LDE5IEBAIGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRl
eEFycmF5SW1wbAorIAorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zm
c2V0T3V0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp
ZHhCdWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqaW5kZXhCdWZmZXJDb3VudE91dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgc3RyZWFt
SW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVu
dHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNv
dXJjZVBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhC
dWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaWR4QnVmZmVyQ291bnRPdXQpOworIAorICAgICBhbmdsZTo6UmVzdWx0
IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSBpbmRleFR5cGUsCitAQCAtMTE3LDcgKzEzNSwyMCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6
IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRl
ck10bCAqPiBtQ3VycmVudEFycmF5QnVmZmVyczsKKyAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBs
ZVdlYWtCdWZmZXJIb2xkZXJNdGw+IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CisgICAg
IGdsOjpBdHRyaWJBcnJheTxzaXplX3Q+IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzOworKwor
KyAgICAvLyBTaXplIHRvIGJlIHVwbG9hZGVkIGFzIGlubGluZSBjb25zdGFudCBkYXRhLiBVc2Vk
IGZvciBjbGllbnQgdmVydGV4IGF0dHJpYnV0ZSdzIGRhdGEgdGhhdAorKyAgICAvLyBpcyBzbWFs
bCBlbm91Z2ggdGhhdCB3ZSBjYW4gc2VuZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0
YSBpbnN0ZWFkIG9mIHN0cmVhbWluZworKyAgICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorKyAgICBn
bDo6QXR0cmliQXJyYXk8c2l6ZV90PiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzOworKyAg
ICAvLyBBcnJheSBvZiBob3N0IGJ1ZmZlcnMgc3RvcmluZyBjb252ZXJ0ZWQgZGF0YSBmb3IgY2xp
ZW50IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc21hbGwgZW5vdWdoLgorKyAgICBnbDo6QXR0cmliQXJy
YXk8YW5nbGU6Ok1lbW9yeUJ1ZmZlcj4gbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzOworKyAg
ICBnbDo6QXR0cmliQXJyYXk8Y29uc3QgdWludDhfdCAqPiBtQ3VycmVudEFycmF5SW5saW5lRGF0
YVBvaW50ZXJzOworKyAgICAvLyBNYXggc2l6ZSBvZiBpbmxpbmUgY29uc3RhbnQgZGF0YSB0aGF0
IGNhbiBiZSB1c2VkIGZvciBjbGllbnQgdmVydGV4IGF0dHJpYnV0ZS4KKysgICAgc2l6ZV90IG1J
bmxpbmVEYXRhTWF4U2l6ZTsKKysKKysgICAgLy8gU3RyaWRlIHBlciB2ZXJ0ZXggYXR0cmlidXRl
CisgICAgIGdsOjpBdHRyaWJBcnJheTxHTHVpbnQ+IG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVz
OworKyAgICAvLyBGb3JtYXQgcGVyIHZlcnRleCBhdHRyaWJ1dGUKKyAgICAgZ2w6OkF0dHJpYkFy
cmF5PGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICo+IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRz
OworIAorICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmbURlZmF1bHRGbG9hdFZlcnRleEZv
cm1hdDsKK0BAIC0xMjcsNiArMTU4LDggQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMg
VmVydGV4QXJyYXlJbXBsCisgICAgIG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY1ZlcnRleERhdGE7
CisgICAgIG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY0luZGV4RGF0YTsKKyAKKysgICAgc3RkOjp2
ZWN0b3I8dWludDMyX3Q+IG1FbXVsYXRlZEluc3RhbmNlQXR0cmliczsKKysKKyAgICAgYm9vbCBt
VmVydGV4QXJyYXlEaXJ0eSA9IHRydWU7CisgfTsKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KK2luZGV4IGNkOTYx
YzEuLjAyMTk1ZDggMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVy
dGV4QXJyYXlNdGwubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhB
cnJheU10bC5tbQorQEAgLTgsNiArOCw5IEBACisgLy8KKyAKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwuaCIKKysKKysjaW5jbHVkZSA8VGFyZ2V0Q29u
ZGl0aW9uYWxzLmg+CisrCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZl
ck10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgi
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKK0BAIC03
NiwxNSArNzksMTUgQEAgc2l6ZV90IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShnbDo6RHJh
d0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsIHNpemVfdCBpbmRleEMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCkKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4Q291bnRPdXQpCisgeworICAg
ICBkeW5hbWljQnVmZmVyLT5yZWxlYXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOworLQor
ICAgICBjb25zdCBzaXplX3QgYW1vdW50ID0gR2V0SW5kZXhDb252ZXJ0ZWRCdWZmZXJTaXplKGlu
ZGV4VHlwZSwgaW5kZXhDb3VudCk7CisgICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRy
OworLQorICAgICBBTkdMRV9UUlkoCisgICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShj
b250ZXh0TXRsLCBhbW91bnQsICZkc3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxs
cHRyKSk7CisgCitAQCAtMTIxLDYgKzEyNCw3IEBAIHNpemVfdCBHZXRJbmRleENvbnZlcnRlZEJ1
ZmZlclNpemUoZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLCBzaXplX3QgaW5kZXhDCisg
ICAgIHsKKyAgICAgICAgIG1lbWNweShkc3QsIHNvdXJjZVBvaW50ZXIsIGFtb3VudCk7CisgICAg
IH0KKysgICAgKmluZGV4Q291bnRPdXQgPSBpbmRleENvdW50OworICAgICBBTkdMRV9UUlkoZHlu
YW1pY0J1ZmZlci0+Y29tbWl0KGNvbnRleHRNdGwpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOworQEAgLTIwOCw2ICsyMTIsMzAgQEAgaW5saW5lIHZvaWQgU2V0RGVm
YXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91
dCkKKyAgICAgICAgIGZvcm1hdCA9ICZtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0OworICAgICB9
CisgCisrICAgIGZvciAoc2l6ZV90ICZpbmxpbmVEYXRhU2l6ZSA6IG1DdXJyZW50QXJyYXlJbmxp
bmVEYXRhU2l6ZXMpCisrICAgIHsKKysgICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKysgICAg
fQorKworKyAgICBmb3IgKGFuZ2xlOjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5
IDogbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzKQorKyAgICB7CisrICAgICAgICBjb252ZXJ0
ZWRDbGllbnRBcnJheS5jbGVhcigpOworKyAgICB9CisrCisrICAgIGZvciAoY29uc3QgdWludDhf
dCAqJmNsaWVudFBvaW50ZXIgOiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorKyAg
ICB7CisrICAgICAgICBjbGllbnRQb2ludGVyID0gbnVsbHB0cjsKKysgICAgfQorKworKyAgICBp
ZiAoY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFsbG93SW5saW5lQ29uc3RW
ZXJ0ZXhEYXRhLmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9
IG10bDo6a0lubGluZUNvbnN0RGF0YU1heFNpemU7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7
CisrICAgICAgICBtSW5saW5lRGF0YU1heFNpemUgPSAwOworKyAgICB9CisrCisgICAgIG1WZXJ0
ZXhBcnJheURpcnR5ID0gdHJ1ZTsKKyB9CisgCitAQCAtMzE1LDIyICszNDMsMjggQEAgaW5saW5l
IHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91
dERlc2MgKmxheW91dCkKKyB9CisgCisgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1
dCBhbmQgb3V0cHV0LCB0aGUgaW5wdXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcK
Ky0vLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90
aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZQorLS8vIHZlcnRleCBhcnJheSBp
cyBkaXJ0eQorKy8vIG10bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVz
Y091dC4gVGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKysvLyBwcm9n
cmFtIGlzIGNoYW5nZWQuCisrLy8gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4g
dGhlIHZlcnRleCBhcnJheSBpcyBkaXJ0eS4KKyBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRs
OjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21k
RW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAq
dmVydGV4RGVzY0NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6VmVydGV4RGVzYyAqdmVydGV4RGVzY091dCkKKyB7CisrICAgIC8vIE5PVEUoaHFs
ZSk6IGNvbnNpZGVyIG9ubHkgdXBkYXRpbmcgZGlydHkgYXR0cmlidXRlcworICAgICBib29sIGRp
cnR5ID0gbVZlcnRleEFycmF5RGlydHkgfHwgKnZlcnRleERlc2NDaGFuZ2VkOworIAorICAgICBp
ZiAoZGlydHkpCisgICAgIHsKKysgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6
OkdldEltcGwoZ2xDb250ZXh0KTsKKysKKyAgICAgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gZmFs
c2U7CisrICAgICAgICBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKKyAKKy0gICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0
U3RhdGUoKS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CisrICAgICAgICBjb25zdCBnbDo6UHJv
Z3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJv
Z3JhbUV4ZWN1dGFibGUoKTsKKyAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJv
Z3JhbUFjdGl2ZUF0dHJpYnNNYXNrID0KKy0gICAgICAgICAgICBnbENvbnRleHQtPmdldFN0YXRl
KCkuZ2V0UHJvZ3JhbSgpLT5nZXRFeGVjdXRhYmxlKCkuZ2V0QWN0aXZlQXR0cmliTG9jYXRpb25z
TWFzaygpOworKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
c01hc2soKTsKKysgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9
IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CisgCisgICAg
ICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1T
dGF0ZS5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxn
bDo6VmVydGV4QmluZGluZz4gJmJpbmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygp
OworQEAgLTM2MCw4ICszOTQsNyBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVy
TGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAg
IGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRp
bmdJbmRleF07CisgCisgICAgICAgICAgICAgYm9vbCBhdHRyaWJFbmFibGVkID0gYXR0cmliLmVu
YWJsZWQ7CistICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYKKy0gICAgICAgICAgICAg
ICAgKCFtQ3VycmVudEFycmF5QnVmZmVyc1t2XSB8fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0t
PmdldEN1cnJlbnRCdWZmZXIoKSkpCisrICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYg
IW1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdICYmICFtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50
ZXJzW3ZdKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBpdCB0
byBhdm9pZCBjcmFzaC4KKyAgICAgICAgICAgICAgICAgYXR0cmliRW5hYmxlZCA9IGZhbHNlOwor
QEAgLTM2OSwzMyArNDAyLDMwIEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJM
YXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgICAgICAgICAg
ICAgaWYgKCFhdHRyaWJFbmFibGVkKQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAg
Ly8gVXNlIGRlZmF1bHQgYXR0cmlidXRlCisrICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRl
c1t2XS5idWZmZXJJbmRleCA9IG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4OworKyAg
ICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdl0ub2Zmc2V0ICAgICAgPSB2ICogbXRsOjpr
RGVmYXVsdEF0dHJpYnV0ZVNpemU7CisgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmluZCB0
aGUgYXR0cmlidXRlIGhhdmluZyB0aGUgZXhhY3QgYmluZGluZyBsb2NhdGlvbiA9IHYgaW4gdGhl
IHByb2dyYW0KKyAgICAgICAgICAgICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmlldmUgaXRz
IGNvcmVzcG9uZGluZyBkYXRhIHR5cGU6CisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gJnByb2dyYW1JbnB1dHMgPQorICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbVN0YXRlLmdldFByb2dyYW1JbnB1dHMoKTsKKyAgICAgICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmliSW5m
b0l0ZSA9IHN0ZDo6ZmluZF9pZigKKyAgICAgICAgICAgICAgICAgICAgIGJlZ2luKHByb2dyYW1J
bnB1dHMpLCBlbmQocHJvZ3JhbUlucHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUg
JnN2KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihzdi5sb2NhdGlvbikgPT0gdjsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9jYXRpb24p
ICsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmFyaWFibGVB
dHRyaWJ1dGVDb3VudChzdi50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgIH0pOworIAorLSAg
ICAgICAgICAgICAgICBpZiAoYXR0cmliSW5mb0l0ZSA9PSBlbmQocHJvZ3JhbUlucHV0cykpCisr
ICAgICAgICAgICAgICAgIEFTU0VSVChhdHRyaWJJbmZvSXRlICE9IGVuZChwcm9ncmFtSW5wdXRz
KSk7CisrICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShh
dHRyaWJJbmZvSXRlLT50eXBlKSkKKyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg
ICAgICAgLy8gTW9zdCBsaWtlbHkgdGhpcyBpcyBhcnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAw
LgorLSAgICAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIHdoZW4gZW5jb3VudGVy
IGZpcnN0IGVsZW1lbnQuCistICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAg
ICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheVNpemU7CistICAg
ICAgICAgICAgICAgIE1UTFZlcnRleEZvcm1hdCBmb3JtYXQ7CistCistICAgICAgICAgICAgICAg
IGdldFZlcnRleEF0dHJpYkZvcm1hdEFuZEFycmF5U2l6ZSgqYXR0cmliSW5mb0l0ZSwgJmZvcm1h
dCwgJmFycmF5U2l6ZSk7CistCistICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgdmFJZHgg
PSB2OyB2YUlkeCA8IHYgKyBhcnJheVNpemU7ICsrdmFJZHgpCistICAgICAgICAgICAgICAgIHsK
Ky0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXgg
PSBtdGw6OmtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleDsKKy0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0ub2Zmc2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1
bHRBdHRyaWJ1dGVTaXplOworLSAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3Zh
SWR4XS5mb3JtYXQgICAgICA9IGZvcm1hdDsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
SU5UOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQg
PSBtRGVmYXVsdEludFZlcnRleEZvcm1hdC5tZXRhbEZvcm1hdDsKKysgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBt
RGVmYXVsdFVJbnRWZXJ0ZXhGb3JtYXQubWV0YWxGb3JtYXQ7CisrICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEZsb2F0VmVy
dGV4Rm9ybWF0Lm1ldGFsRm9ybWF0OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
fQorICAgICAgICAgICAgIGVsc2UKK0BAIC00MTcsMTcgKzQ0NywzNSBAQCBpbmxpbmUgdm9pZCBT
ZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAq
bGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3Rl
cEZ1bmN0aW9uID0gTVRMVmVydGV4U3RlcEZ1bmN0aW9uUGVyVmVydGV4OworICAgICAgICAgICAg
ICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMTsKKyAgICAg
ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVy
dGV4SW5zdGFuY2VkRHJhdy5lbmFibGVkKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0
ZXhTdGVwRnVuY3Rpb25QZXJJbnN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5
b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigpOworICAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKysg
ICAgICAgICAgICAgICAgICAgIG1FbXVsYXRlZEluc3RhbmNlQXR0cmlicy5wdXNoX2JhY2sodik7
CisrICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rp
b24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25Db25zdGFudDsKKysgICAgICAgICAgICAgICAgICAg
IGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IDA7CisrICAgICAgICAgICAg
ICAgIH0KKysKKyAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RyaWRl
ID0gbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbdl07CisgCisrICAgICAgICAgICAgICAgIGlm
IChtQ3VycmVudEFycmF5QnVmZmVyc1t2XSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZm
ZXJzW3ZdLT5nZXRDdXJyZW50QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICAgICAgLy8gTm8gYnVmZmVyIHNwZWNpZmllZCwgdXNlIHRoZSBjbGllbnQg
bWVtb3J5IGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRhCisrICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0
YU1heFNpemUpOworKyAgICAgICAgICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0
ZXMobUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVyc1t2XSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6
ZXNbdl0sIGJ1ZmZlcklkeCk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9Cisr
ICAgICAgICB9ICAvLyBmb3IgKHYpCisgICAgIH0KKyAKKyAgICAgKnZlcnRleERlc2NDaGFuZ2Vk
ID0gZGlydHk7CitAQCAtNDM1LDYgKzQ4Myw0MiBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVy
dGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorK3ZvaWQgVmVydGV4QXJy
YXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIg
KmNtZEVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgaW5zdGFuY2VJZCkKKyt7CisrCisrICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpWZXJ0ZXhBdHRyaWJ1dGU+ICZhdHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMo
KTsKKysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEJpbmRpbmc+ICZiaW5kaW5ncyAg
PSBtU3RhdGUuZ2V0VmVydGV4QmluZGluZ3MoKTsKKysKKysgICAgZm9yICh1aW50MzJfdCBpbnN0
YW5jZUF0dHJpYklkeCA6IG1FbXVsYXRlZEluc3RhbmNlQXR0cmlicykKKysgICAgeworKyAgICAg
ICAgdWludDMyX3QgYnVmZmVySWR4ICAgICAgICAgICAgICAgPSBtdGw6OmtWYm9CaW5kaW5nSW5k
ZXhTdGFydCArIGluc3RhbmNlQXR0cmliSWR4OworKyAgICAgICAgY29uc3QgYXV0byAmYXR0cmli
ICAgICAgICAgICAgICAgPSBhdHRyaWJzW2luc3RhbmNlQXR0cmliSWR4XTsKKysgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJ
bmRleF07CisrICAgICAgICB1aW50MzJfdCBvZmZzZXQgPQorKyAgICAgICAgICAgIGluc3RhbmNl
SWQgLyBiaW5kaW5nLmdldERpdmlzb3IoKSAqIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2lu
c3RhbmNlQXR0cmliSWR4XTsKKysgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0
YW5jZUF0dHJpYklkeF0pCisrICAgICAgICB7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1tpbnN0YW5jZUF0dHJp
YklkeF0pOworKworKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3Vy
cmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0tPmdldEN1cnJlbnRCdWZmZXIoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBidWZmZXJJ
ZHgpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAg
IC8vIE5vIGJ1ZmZlciBzcGVjaWZpZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBh
cyBpbmxpbmUgY29uc3RhbnQgZGF0YQorKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5
SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1heFNpemUp
OworKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVz
W2luc3RhbmNlQXR0cmliSWR4XSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG9m
ZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVz
W2luc3RhbmNlQXR0cmliSWR4XSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNtZEVu
Y29kZXItPnNldFZlcnRleEJ5dGVzKG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5z
dGFuY2VBdHRyaWJJZHhdICsgb2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhd
IC0gb2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
cklkeCk7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGZpcnN0VmVydGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB2ZXJ0ZXhPckluZGV4Q291bnQsCitAQCAtNDYzLDEwICs1NDcsNyBA
QCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVm
ZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJpbmRpbmcg
JmJpbmRpbmcgID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgICBBU1NF
UlQoYXR0cmliLmVuYWJsZWQgJiYgYmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRy
KTsKKyAKKy0gICAgICAgIEdMdWludCBzdHJpZGU7CistICAgICAgICBjb25zdCBtdGw6OlZlcnRl
eEZvcm1hdCAmdmVydGV4Rm9ybWF0ID0KKy0gICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9u
Rm9ybWF0KGNvbnRleHRNdGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmc3RyaWRlKTsKKy0KKysgICAg
ICAgIC8vIFNvdXJjZSBjbGllbnQgbWVtb3J5IHBvaW50ZXIKKyAgICAgICAgIGNvbnN0IHVpbnQ4
X3QgKnNyYyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOwor
ICAgICAgICAgQVNTRVJUKHNyYyk7CisgCitAQCAtNDg0LDIyICs1NjUsNzYgQEAgaW5saW5lIHZv
aWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERl
c2MgKmxheW91dCkKKyAgICAgICAgICAgICBzdGFydEVsZW1lbnQgPSAwOworICAgICAgICAgICAg
IGVsZW1lbnRDb3VudCA9IFVuc2lnbmVkQ2VpbERpdmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5n
LmdldERpdmlzb3IoKSk7CisgICAgICAgICB9CisrICAgICAgICBzaXplX3QgYnl0ZXNJbnRlbmRl
ZFRvVXNlID0gKHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBiaW5kaW5nLmdldFN0cmlk
ZSgpOworKworKyAgICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRl
eHRNdGwtPmdldFZlcnRleEZvcm1hdChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworKyAgICAg
ICAgYm9vbCBuZWVkU3RyZWFtaW5nICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJ
ZCAhPSBmb3JtYXQuaW50ZW5kZWRGb3JtYXRJZCB8fAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGJpbmRpbmcuZ2V0U3RyaWRlKCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJp
ZGVBbGlnbm1lbnQpICE9IDAgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5k
aW5nLmdldFN0cmlkZSgpIDwgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykg
fHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1J
bmxpbmVEYXRhTWF4U2l6ZTsKKysKKysgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKysgICAg
ICAgIHsKKysgICAgICAgICAgICAvLyBEYXRhIHdpbGwgYmUgdXBsb2FkZWQgZGlyZWN0bHkgYXMg
aW5saW5lIGNvbnN0YW50IGRhdGEKKysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1th
dHRyaWJJbmRleF0gICAgICAgICAgICA9IG51bGxwdHI7CisrICAgICAgICAgICAgbUN1cnJlbnRB
cnJheUlubGluZURhdGFQb2ludGVyc1thdHRyaWJJbmRleF0gPSBzcmM7CisrICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc0ludGVu
ZGVkVG9Vc2U7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmli
SW5kZXhdICAgICAgPSAwOworKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRz
W2F0dHJpYkluZGV4XSAgICAgID0gJmZvcm1hdDsKKysgICAgICAgICAgICBtQ3VycmVudEFycmF5
QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gICAgICA9IGJpbmRpbmcuZ2V0U3RyaWRlKCk7Cisr
ICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgR0x1aW50
IGNvbnZlcnRlZFN0cmlkZTsKKysgICAgICAgICAgICAvLyBOZWVkIHRvIHN0cmVhbSB0aGUgY2xp
ZW50IHZlcnRleCBkYXRhIHRvIGEgYnVmZmVyLgorKyAgICAgICAgICAgIGNvbnN0IG10bDo6VmVy
dGV4Rm9ybWF0ICZzdHJlYW1Gb3JtYXQgPQorKyAgICAgICAgICAgICAgICBHZXRWZXJ0ZXhDb252
ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmY29udmVydGVkU3Ry
aWRlKTsKKysKKyAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RhcnRFbGVtZW50
ICsgZWxlbWVudENvdW50IHNvIGluZGV4aW5nIHdpbGwgd29yay4gIElmIHdlIGRvbid0CisgICAg
ICAgICAgICAgLy8gc3RhcnQgYXQgemVybyBhbGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCisg
ICAgICAgICAgICAgLy8gT25seSBlbGVtZW50Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5
IHRoZSB1cGNvbWluZyBkcmF3IHNvIHRoYXQgaXMgYWxsIHdlIGNvcHkuCistICAgICAgICBzaXpl
X3QgYnl0ZXNUb0FsbG9jYXRlID0gKHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBzdHJp
ZGU7CisrICAgICAgICAgICAgc2l6ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQg
KyBlbGVtZW50Q291bnQpICogY29udmVydGVkU3RyaWRlOworICAgICAgICAgICAgIHNyYyArPSBz
dGFydEVsZW1lbnQgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworLSAgICAgICAgc2l6ZV90IGRlc3RP
ZmZzZXQgPSBzdGFydEVsZW1lbnQgKiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6ZV90IGRlc3RP
ZmZzZXQgPSBzdGFydEVsZW1lbnQgKiBjb252ZXJ0ZWRTdHJpZGU7CisgCistICAgICAgICBtRHlu
YW1pY1ZlcnRleERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5h
Y3R1YWxBbmdsZUZvcm1hdCgpLnBpeGVsQnl0ZXMpOworLSAgICAgICAgQU5HTEVfVFJZKFN0cmVh
bVZlcnRleERhdGEoCistICAgICAgICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0
YSwgc3JjLCBieXRlc1RvQWxsb2NhdGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKKy0gICAg
ICAgICAgICBiaW5kaW5nLmdldFN0cmlkZSgpLCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0
aW9uLAorLSAgICAgICAgICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYklu
ZGV4XSwgJm1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSkpOworKyAgICAg
ICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1G
b3JtYXQ7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5k
ZXhdID0gY29udmVydGVkU3RyaWRlOworKworKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2Nh
dGUgPD0gbUlubGluZURhdGFNYXhTaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGRhdGEgaXMgc21hbGwgZW5vdWdoLCB1c2UgaG9zdCBtZW1vcnkgaW5zdGVh
ZCBvZiBjcmVhdGluZyBHUFUgYnVmZmVyLiBUbworKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBz
eW5jaHJvbml6aW5nIGFjY2VzcyB0byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgor
KyAgICAgICAgICAgICAgICBhbmdsZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJh
eSA9CisrICAgICAgICAgICAgICAgICAgICBtQ29udmVydGVkQ2xpZW50U21hbGxBcnJheXNbYXR0
cmliSW5kZXhdOworKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVy
dGVkQ2xpZW50QXJyYXkuc2l6ZSgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICBBTkdMRV9DSEVDS19HTF9BTExPQyhjb250ZXh0TXRsLCBjb252ZXJ0ZWRDbGllbnRB
cnJheS5yZXNpemUoYnl0ZXNUb0FsbG9jYXRlKSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24pOwor
KyAgICAgICAgICAgICAgICBzdHJlYW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmlu
ZGluZy5nZXRTdHJpZGUoKSwgZWxlbWVudENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRl
c3RPZmZzZXQpOworKworKyAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRy
aWJJbmRleF0gICAgICAgICAgICA9IG51bGxwdHI7CisrICAgICAgICAgICAgICAgIG1DdXJyZW50
QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbYXR0cmliSW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJy
YXkuZGF0YSgpOworKyAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVz
W2F0dHJpYkluZGV4XSAgICA9IGJ5dGVzVG9BbGxvY2F0ZTsKKysgICAgICAgICAgICAgICAgbUN1
cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAvLyBTdHJlYW0gdGhlIGNsaWVudCBkYXRhIHRvIGEgR1BVIGJ1ZmZlci4gU3luY2hyb25pemF0
aW9uIG1pZ2h0IGhhcHBlbiBpZiBidWZmZXIgaXMKKysgICAgICAgICAgICAgICAgLy8gaW4gdXNl
LgorKyAgICAgICAgICAgICAgICBtRHluYW1pY1ZlcnRleERhdGEudXBkYXRlQWxpZ25tZW50KGNv
bnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZWFtRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcyk7CisrICAg
ICAgICAgICAgICAgIEFOR0xFX1RSWShTdHJlYW1WZXJ0ZXhEYXRhKGNvbnRleHRNdGwsICZtRHlu
YW1pY1ZlcnRleERhdGEsIHNyYywgYnl0ZXNUb0FsbG9jYXRlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsIGJpbmRp
bmcuZ2V0U3RyaWRlKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0
dHJpYkluZGV4XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSkpOworIAorICAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gPSAmbUNvbnZlcnRlZEFy
cmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF07CistICAgICAgICBtQ3VycmVudEFycmF5QnVm
ZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gPSAmdmVydGV4Rm9ybWF0OworLSAgICAgICAgbUN1cnJl
bnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gc3RyaWRlOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0gIC8vIGlmIChuZWVkU3RyZWFtaW5nKQorICAgICB9CisgCisgICAgIG1W
ZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsKK0BAIC01MjYsNyArNjYxLDcgQEAgaW5saW5lIHZvaWQg
U2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2Mg
KmxheW91dCkKKyAgICAgICAgICAgICBib29sIG5lZWRDb252ZXJzaW9uID0KKyAgICAgICAgICAg
ICAgICAgZm9ybWF0LmFjdHVhbEZvcm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8
CisgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldE9mZnNldCgpICUgZm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgIT0gMCB8fAorLSAgICAgICAgICAgICAgICAoYmluZGlu
Zy5nZXRPZmZzZXQoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkg
IT0gMCB8fAorKyAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAg
fHwKKyAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFs
QW5nbGVGb3JtYXQoKS5waXhlbEJ5dGVzKSB8fAorICAgICAgICAgICAgICAgICAoYmluZGluZy5n
ZXRTdHJpZGUoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0g
MDsKKyAKK0BAIC01NjMsMTkgKzY5OCwyMSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4
QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorIAorIGFu
Z2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1
ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRl
eFR5cGVPdXQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisg
eworICAgICBjb25zdCBnbDo6QnVmZmVyICpnbEVsZW1lbnRBcnJheUJ1ZmZlciA9IGdldFN0YXRl
KCkuZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgCisgICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PHNpemVfdD4oaW5kaWNlcyk7CisgICAgIGlmICghZ2xFbGVt
ZW50QXJyYXlCdWZmZXIpCisgICAgIHsKKy0gICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1
ZmZlckZyb21DbGllbnQoY29udGV4dCwgdHlwZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91
dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVm
ZmVyT2Zmc2V0T3V0KSk7CisrICAgICAgICBBTkdMRV9UUlkoc3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCBpZHhCdWZmZXJPdXQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZl
ck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICB9CisgICAgIGVsc2UKKyAg
ICAgeworQEAgLTU4Myw4ICs3MjAsOCBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVm
ZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb252ZXJ0ZWRPZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZl
ck9mZnNldEFsaWdubWVudCkgIT0gMDsKKyAgICAgICAgIGlmIChuZWVkQ29udmVyc2lvbikKKyAg
ICAgICAgIHsKKy0gICAgICAgICAgICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRl
eHQsIHR5cGUsIGNvbnZlcnRlZE9mZnNldCwgaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAgICAg
ICAgICAgQU5HTEVfVFJZKGNvbnZlcnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2RlLCBj
b252ZXJ0ZWRPZmZzZXQsIGlkeEJ1ZmZlck91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkp
OworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgeworQEAgLTU5Miw2ICs3Mjks
NyBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4
QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVy
TXRsID0gbXRsOjpHZXRJbXBsKGdsRWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAq
aWR4QnVmZmVyT3V0ICAgICAgICA9IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOworICAg
ICAgICAgICAgICppZHhCdWZmZXJPZmZzZXRPdXQgID0gY29udmVydGVkT2Zmc2V0OworKyAgICAg
ICAgICAgICppbmRleEJ1ZmZlckNvdW50T3V0ID0gY291bnQ7CisgICAgICAgICB9CisgICAgIH0K
KyAKK0BAIC02MDcsOSArNzQ1LDExIEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZm
ZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgYW5nbGU6
OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250
ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBz
aXplX3Qgb2Zmc2V0TW9kdWxvID0gb2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGln
bm1lbnQ7CisgICAgIEFTU0VSVChvZmZzZXRNb2R1bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6
OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZSk7CitAQCAtNjM4LDE1ICs3NzgsMTUgQEAg
aW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZl
ckxheW91dERlc2MgKmxheW91dCkKKyAgICAgfQorIAorICAgICBzaXplX3QgaW5kZXhDb3VudCA9
IEdldEluZGV4Q291bnQoaWR4QnVmZmVyLCBvZmZzZXRNb2R1bG8sIGluZGV4VHlwZSk7CistCist
ICAgIGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFw
UmVuZGVyUGFzcy5lbmFibGVkICYmCistICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21t
YW5kRW5jb2RlcigpKQorKyAgICBpZiAoKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5lbmFibGVkICYmCisrICAgICAgICAgY29u
dGV4dE10bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkpCisgICAgIHsKKyAgICAgICAgIC8v
IFdlIHNob3VsZG4ndCB1c2UgR1BVIHRvIGNvbnZlcnQgd2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUg
b2YgYSByZW5kZXIgcGFzcy4KKyAgICAgICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29u
dGV4dE10bCwgJmNvbnZlcnNpb24tPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkeEJ1ZmZlci0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBv
ZmZzZXRNb2R1bG8sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlw
ZSwgaW5kZXhDb3VudCwgZ2xTdGF0ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZm
ZXIsICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRPZmZzZXQpKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhUeXBlLCBpbmRleENvdW50LCBtb2RlLCBnbFN0YXRlLmlzUHJp
bWl0aXZlUmVzdGFydEVuYWJsZWQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9m
ZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJDb3Vu
dE91dCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTY5NSwxOCArODM1LDIwIEBA
IGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZm
ZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6
c3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpbmRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNl
dE91dCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVy
Q291bnRPdXQpCisgeworICAgICBBU1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKSA9PSBudWxscHRyKTsKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0
SW1wbChjb250ZXh0KTsKKyAKKyAgICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCAqPihzb3VyY2VQb2ludGVyKTsKKy0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0
YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5k
ZXhDb3VudCwKKysgICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5
bmFtaWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0
aXZlUmVzdGFydEVuYWJsZWQoKSwgaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCkpOworKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaWR4QnVmZmVyQ291bnRPdXQpKTsKKyAKKyAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KK0BAIC03NDQsNyArODg2LDYgQEAg
aW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZl
ckxheW91dERlc2MgKmxheW91dCkKKyAgICAgLy8gSGFzIHRoZSBjb250ZW50IG9mIHRoZSBidWZm
ZXIgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBjb252ZXJzaW9uPworICAgICBpZiAoIWNvbnZlcnNp
b24tPmRpcnR5KQorICAgICB7CistICAgICAgICAvLyBCdWZmZXIncyBkYXRhIGhhc24ndCBiZWVu
IGNoYW5nZWQuIFJlLXVzZSBsYXN0IGNvbnZlcnRlZCByZXN1bHRzCisgICAgICAgICBtQ29udmVy
dGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVy
dGVkQnVmZmVyKTsKKyAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYklu
ZGV4XSA9IGNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldDsKKyAKK0BAIC03NjEsNyArOTAyLDcg
QEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1
ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgYm9vbCBjYW5FeHBhbmRDb21wb25lbnRzT25H
UFUgPSBjb252ZXJ0ZWRGb3JtYXQuYWN0dWFsU2FtZUdMVHlwZTsKKyAKKyAgICAgaWYgKGNvbnRl
eHRNdGwtPmdldFJlbmRlckNvbW1hbmRFbmNvZGVyKCkgJiYKKy0gICAgICAgICFjb250ZXh0TXRs
LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQg
JiYKKysgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJl
YWtSZW5kZXJQYXNzSXNDaGVhcC5lbmFibGVkICYmCisgICAgICAgICAhY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0V4cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQor
ICAgICB7CisgICAgICAgICAvLyBDYW5ub3QgdXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJl
IGluIGEgbWlkZGxlIG9mIGEgcmVuZGVyIHBhc3MuCitAQCAtNzkyLDYgKzkzMyw5IEBAIGlubGlu
ZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlv
dXREZXNjICpsYXlvdXQpCisgICAgIGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252
ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsK
KyAgICAgY29udmVyc2lvbi0+Y29udmVydGVkT2Zmc2V0ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9m
ZnNldHNbYXR0cmliSW5kZXhdOworIAorKyAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOwor
KyAgICBjb252ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworKworICNpZm5kZWYgTkRFQlVHCisgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKK0BAIC04MDEsOSArOTQ1LDYgQEAgaW5saW5l
IHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91
dERlc2MgKmxheW91dCkKKyAgICAgfQorICNlbmRpZgorIAorLSAgICBBU1NFUlQoY29udmVyc2lv
bi0+ZGlydHkpOworLSAgICBjb252ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworLQorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAoraW5kZXggZmEw
NzNhZS4uMTNhZmRjMyAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1kCitAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNp
ZGUuIFdyaXRpbmcgdG8gYGdsX0NsaXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdu
b3JlZCBpZiBpdCBpcyBkCisgZG9lc24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0byBkaXNh
YmxlL2VuYWJsZSB0aGUgd3JpdGluZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9kaXN0YW5j
ZWAKKyB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgaXQuCisgCistVG8gZW11bGF0ZSB0
aGlzIGVuYWJsaW5nL2Rpc2FibGluZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEgc2lt
aWxhciBpbXBsZW1lbnRhdGlvbiBhcyB3aGF0CistW1Z1bGthbiBiYWNrLWVuZCBkb2VzXSguLi8u
Li92dWxrYW4vZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQpLiBQbGVhc2UgcmVmZXIgdG8gdGhh
dCBkb2N1bWVudCBmb3IKKy1tb3JlIGRldGFpbHMuCisrVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxp
bmcvZGlzYWJsaW5nIEFQSSBpbiBNZXRhbCBiYWNrLWVuZDoKKysKKystIFRoZSBzaGFkZXIgY29t
cGlsZXIgd2lsbCB0cmFuc2xhdGUgZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50
IHRvIGFuIGFzc2lnbm1lbnQgdG8KKysgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUu
CisrLSBBIHNwZWNpYWwgZHJpdmVyIHVuaWZvcm0gdmFyaWFibGUgYGNsaXBEaXN0YW5jZXNFbmFi
bGVkYCB3aWxsIGNvbnRhaW4gb25lIGJpdCBmbGFnIGZvciBlYWNoCisrICBlbmFibGVkIGBnbF9D
bGlwRGlzdGFuY2VbaV1gLiBUaGlzIHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlw
RGlzdGFuY2VgIGluZGljZXMuCisrLSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBl
bmFibGVkIGBnbF9DbGlwRGlzdGFuY2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3Rp
dmUKKysgIHZhbHVlIGZyb20gYEFOR0xFQ2xpcERpc3RhbmNlW2ldYC4gT24gdGhlIG90aGVyIGhh
bmQsIHRob3NlIGRpc2FibGVkIGVsZW1lbnRzIHdpbGwgYmUgYXNzaWduZWQKKysgIHplcm8gdmFs
dWUuIFRoaXMgc3RlcCBpcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorKyAgICBg
YGAKKysgICAgZm9yIChpbnQgaW5kZXggOiBhcnJheWxlbmd0aChnbF9DbGlwRGlzdGFuY2UpKQor
KyAgICB7CisrICAgICAgICBpZiAoQU5HTEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAm
ICgweDEgPDwgaW5kZXgpKQorKyAgICAgICAgICAgIGdsX0NsaXBEaXN0YW5jZVtpbmRleF0gPSBB
TkdMRUNsaXBEaXN0YW5jZVtpbmRleF07CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ2xf
Q2xpcERpc3RhbmNlW2luZGV4XSA9IDA7CisrICAgIH0KKysgICAgYGBgCisrLSBTb21lIG1pbm9y
IG9wdGltaXphdGlvbnM6CisrICAgIC0gT25seSB0aG9zZSBpbmRpY2VzIHRoYXQgYXJlIHJlZmVy
ZW5jZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUgd2lsbCBiZSB1c2VkIGluIGlmIGVsc2UgYmxvY2sK
KysgICAgICBhYm92ZS4KKysgICAgLSBUaG9zZSBlbGVtZW50cyB3aG9zZSBpbmRleCBub3QgcmVm
ZXJlbmNlZCBpbiB0aGUgb3JpZ2luYWwgY29kZSB3aWxsIGJlIHplcm9pc2VkIGluc3RlYWQuCisr
ICAgIC0gSWYgdGhlIG9yaWdpbmFsIGNvZGUgb25seSB1c2VzIHVwIHRvIGFuIGluZGV4IDwgYGds
X01heENsaXBEaXN0YW5jZXNgLCB0aGVuCisrICAgICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1v
c3QgYGluZGV4KzFgIGl0ZXJhdGlvbnMuIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBu
b3QgYmVpbmcKKysgICAgICBpbnRlZ3JhbCBjb25zdGFudCB2YWx1ZSBrbm93biBhdCBjb21waWxl
IHRpbWUgdGhlbiBkZWNsYXJlZCBzaXplIG9mIGBnbF9DbGlwRGlzdGFuY2VgCisrICAgICAgd2ls
bCBiZSB0aGUgbG9vcCBzaXplLgorKyAgICAtIEZpbmFsbHksIGlmIHRoZSBvcmlnaW5hbCBjb2Rl
IGRvZXNuJ3QgdXNlIGBnbF9DbGlwRGlzdGFuY2VgLCB0aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUg
d2lsbCBiZQorKyAgICAgIG9taXR0ZWQuCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Rp
ZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFi
bGUucHkgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUu
cHkKK2luZGV4IDNjZTE0MmUuLjg4OGI3OWYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weQorQEAgLTM3LDYgKzM3LDcgQEAg
dGVtcGxhdGVfYXV0b2dlbl9pbmwgPSAiIiIvLyBHRU5FUkFURUQgRklMRSAtIERPIE5PVCBFRElU
LgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9Gb3JtYXQuaCIKKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF91dGlscy5oIgorIAorIHVzaW5nIG5hbWVzcGFjZSBhbmdsZTsKKyAK
K0BAIC00OCw3ICs0OSw2IEBAIG5hbWVzcGFjZSBtdGwKKyB2b2lkIEZvcm1hdDo6aW5pdChjb25z
dCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8p
Cisge3sKKyAgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCA9IGludGVuZGVkRm9ybWF0SWRfOwor
LQorICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZp
Y2UoKTsKKyAKKyAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KK0BAIC0xMDksNiArMTA5LDIzIEBA
IGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUyID0gIiIiCisgICAgICAgICAgICAgICAgIHRo
aXMtPmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9uX2ZhbGxiYWNrfTsKKyAgICAgICAgICAg
ICB9fQorICIiIgorKyNEMTYgaXMgZnVsbHkgc3VwcG9ydGVkIG9uICBBcHBsZTMrLiBIb3dldmVy
LCBvbgorKyNwcmV2aW91cyAgdmVyc2lvbnMgb2YgQXBwbGUgaGFyZHdhcmUsIHNvbWUgb3BlcmF0
aW9ucyBjYW4gY2F1c2UKKysjdW5kZWZpbmVkIGJlaGF2aW9yLgorK2ltYWdlX2Zvcm1hdF9hc3Np
Z25fdGVtcGxhdGUzID0gIiIiCisrICAgICAgICAgICAgaWYgKG10bDo6U3VwcG9ydHNJT1NHUFVG
YW1pbHkobWV0YWxEZXZpY2UsIDMpKQorKyAgICAgICAgICAgIHt7CisrICAgICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ID0ge210bF9mb3JtYXR9OworKyAgICAgICAgICAgICAgICB0aGlz
LT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXR9
OworKyAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gPSB7aW5pdF9mdW5jdGlvbn07
CisrICAgICAgICAgICAgfX0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAge3sKKysg
ICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgPSB7bXRsX2Zvcm1hdF9mYWxsYmFja307
CisrICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElE
Ojp7YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFja307CisrICAgICAgICAgICAgICAgIHRoaXMt
PmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9uX2ZhbGxiYWNrfTsKKysgICAgICAgICAgICB9
fQorKyIiIgorIAorIGNhc2VfaW1hZ2VfZm9ybWF0X3RlbXBsYXRlMSA9ICIiIiAgICAgICAgY2Fz
ZSBhbmdsZTo6Rm9ybWF0SUQ6OnthbmdsZV9mb3JtYXR9OgorICAgICAgICAgICAgIHtpbWFnZV9m
b3JtYXRfYXNzaWdufQorQEAgLTIxMyw2ICsyMzAsOCBAQCBkZWYgZ2V0X3ZlcnRleF9jb3B5X2Z1
bmN0aW9uX2FuZF9kZWZhdWx0X2FscGhhKHNyY19mb3JtYXQsIGRzdF9mb3JtYXQpOgorIAorIAor
ICMgR2VuZXJhdGUgZm9ybWF0IGNvbnZlcnNpb24gc3dpdGNoIGNhc2UgKGdlbmVyaWMgY2FzZSkK
KysKKysKKyBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVh
bF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfdG9fbXRsX21hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhc3NpZ25fZ2VuX2Z1bmMpOgorICAgICBpZiBpc2luc3RhbmNlKGFjdHVh
bF9hbmdsZV9mb3JtYXRfaW5mbywgZGljdCk6CitAQCAtMjU1LDYgKzI3NCw4IEBAIGRlZiBnZW5f
aW1hZ2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9p
bmZvLCBhbmdsZV90b19tCisgCisgCisgIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0
Y2ggY2FzZSAoc2ltcGxlIGNhc2UpCisrCisrCisgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX3Np
bXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90
b19nbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fbXRs
X21hcCk6CisgCitAQCAtMjcwLDYgKzI5MSw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9z
aW1wbGVfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nCisg
CisgCisgIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2FzZSAoTWFjIGNhc2Up
CisrCisrCisgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX21hY19jYXNlKGFuZ2xlX2Zvcm1hdCwg
YWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fbXRsX21hcCwgbWFjX2ZhbGxiYWNrcyk6CisgICAg
IGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KK0BAIC0zMDEsMTEgKzMyNCw0
MyBAQCBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1
YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlXworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKQorIAorIAorK2RlZiBnZW5faW1hZ2Vf
bWFwX3N3aXRjaF9pb3NfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5m
bywgYW5nbGVfdG9fZ2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
X3RvX210bF9tYXAsIGlvc19mYWxsYmFja3MpOgorKyAgICBnbF9mb3JtYXQgPSBhbmdsZV90b19n
bFthbmdsZV9mb3JtYXRdCisrCisrICAgIGRlZiBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKGFjdHVh
bF9hbmdsZV9mb3JtYXQsIGFuZ2xlX3RvX210bF9tYXApOgorKyAgICAgICAgaWYgYWN0dWFsX2Fu
Z2xlX2Zvcm1hdCBpbiBpb3NfZmFsbGJhY2tzOgorKyAgICAgICAgICAgICMgVGhpcyBmb3JtYXQg
KERlcHRoMTZVbmlmb3JtKSByZXF1aXJlcyBmYWxsYmFjayB3aGVuIGlPUyBoYXJkd2FyZSBkb2Vz
IG5vdCBmdWxseSBzdXBwb3J0IGRlcHRoMTYuCisrICAgICAgICAgICAgIyBGYWxsYmFjayBmb3Jt
YXQ6CisrICAgICAgICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjayA9IGlvc19mYWxs
YmFja3NbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0KKysgICAgICAgICAgICAjIHJldHVybiBpZiBlbHNl
IGJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRl
My5mb3JtYXQoCisrICAgICAgICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3JtYXQ9YWN0dWFsX2Fu
Z2xlX2Zvcm1hdCwKKysgICAgICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFw
W2FjdHVhbF9hbmdsZV9mb3JtYXRdLAorKyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFu
Z2xlX2Zvcm1hdF91dGlscy5nZXRfaW50ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorKyAgICAg
ICAgICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KSwKKysgICAgICAg
ICAgICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaz1hY3R1YWxfYW5nbGVfZm9ybWF0
X2ZhbGxiYWNrLAorKyAgICAgICAgICAgICAgICBtdGxfZm9ybWF0X2ZhbGxiYWNrPWFuZ2xlX3Rv
X210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFja10sCisrICAgICAgICAgICAgICAg
IGluaXRfZnVuY3Rpb25fZmFsbGJhY2s9YW5nbGVfZm9ybWF0X3V0aWxzLmdldF9pbnRlcm5hbF9m
b3JtYXRfaW5pdGlhbGl6ZXIoCisrICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQsIGFjdHVh
bF9hbmdsZV9mb3JtYXRfZmFsbGJhY2spKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICAj
IHJldHVybiBvcmRpbmFyeSBibG9jazoKKysgICAgICAgICAgICByZXR1cm4gaW1hZ2VfZm9ybWF0
X2Fzc2lnbl90ZW1wbGF0ZTEuZm9ybWF0KAorKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVf
Zm9ybWF0PWFjdHVhbF9hbmdsZV9mb3JtYXQsCisrICAgICAgICAgICAgICAgIG10bF9mb3JtYXQ9
YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0XSwKKysgICAgICAgICAgICAgICAg
aW5pdF9mdW5jdGlvbj1hbmdsZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0
aWFsaXplcigKKysgICAgICAgICAgICAgICAgICAgIGdsX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zv
cm1hdCkpCisrCisrICAgIHJldHVybiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xlX2Zv
cm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxfbWFwLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKQor
KworKworIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xl
X3RvX2dsKToKKyAgICAgYW5nbGVfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGUiXQor
ICAgICBtYWNfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGVfbWFjIl0KKyAgICAgaW9z
X292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX2lvcyJdCistICAgIG1hY19mYWxsYmFj
a3MgPSBpbWFnZV90YWJsZVsiZDI0czhfZmFsbGJhY2tzX21hYyJdCisrICAgIG1hY19mYWxsYmFj
a3MgPSBpbWFnZV90YWJsZVsiZmFsbGJhY2tzX21hYyJdCisrICAgIGlvc19mYWxsYmFja3MgPSBp
bWFnZV90YWJsZVsiZmFsbGJhY2tzX2lvcyJdCisgICAgIGFuZ2xlX3RvX210bCA9IGltYWdlX3Rh
YmxlWyJtYXAiXQorICAgICBtYWNfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVbIm1hcF9tYWMi
XQorICAgICBpb3Nfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVbIm1hcF9pb3MiXQorQEAgLTMy
Miw4ICszNzcsOCBAQCBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfc3RyaW5nKGltYWdlX3RhYmxl
LCBhbmdsZV90b19nbCk6CisgICAgIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9jb21tb25fY2Fz
ZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQpOgorICAgICAgICAgbWFjX2Nhc2Ug
PSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmds
ZV9mb3JtYXQsIGFuZ2xlX3RvX2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYWNfYW5nbGVfdG9fbXRsLCBtYWNfZmFsbGJhY2tzKQorLSAgICAg
ICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdlX21hcF9zd2l0Y2hfc2ltcGxlX2Nhc2UoYW5nbGVf
Zm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFuZ2xlX3RvX210bCkK
KysgICAgICAgIG5vbl9tYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFu
Z2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX2dsLCBhbmdsZV90b19tdGws
IGlvc19mYWxsYmFja3MpCisgICAgICAgICBpZiBtYWNfY2FzZSA9PSBub25fbWFjX2Nhc2U6Cisg
ICAgICAgICAgICAgcmV0dXJuIG1hY19jYXNlCisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9idWZmZXJfcG9vbC5oCitpbmRleCAyMDc5ZmQ3Li4yMDRlYmI5IDEwMDY0NAor
LS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKK0BAIC04MSw3
ICs4MSw3IEBAIGNsYXNzIEJ1ZmZlclBvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICpuZXdCdWZmZXJBbGxvY2F0ZWRPdXQgPSBudWxscHRyKTsKKyAKKyAgICAgLy8gQWZ0ZXIg
YSBzZXF1ZW5jZSBvZiBDUFUgd3JpdGVzLCBjYWxsIGNvbW1pdCB0byBlbnN1cmUgdGhlIGRhdGEg
aXMgdmlzaWJsZSB0byB0aGUgZGV2aWNlLgorLSAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdChDb250
ZXh0TXRsICpjb250ZXh0TXRsKTsKKysgICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10
bCAqY29udGV4dE10bCwgYm9vbCBmbHVzaEVudGlyZUJ1ZmZlciA9IGZhbHNlKTsKKyAKKyAgICAg
Ly8gVGhpcyByZWxlYXNlcyBhbGwgdGhlIGJ1ZmZlcnMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVk
IHNpbmNlIHRoaXMgd2FzIGxhc3QgY2FsbGVkLgorICAgICB2b2lkIHJlbGVhc2VJbkZsaWdodEJ1
ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dE10bCk7CitAQCAtMTE0LDcgKzExNCw2IEBAIGNsYXNz
IEJ1ZmZlclBvb2wKKyAgICAgYW5nbGU6OlJlc3VsdCBhbGxvY2F0ZU5ld0J1ZmZlcihDb250ZXh0
TXRsICpjb250ZXh0TXRsKTsKKyAgICAgdm9pZCBkZXN0cm95QnVmZmVyTGlzdChDb250ZXh0TXRs
ICpjb250ZXh0TXRsLCBzdGQ6OmRlcXVlPEJ1ZmZlclJlZj4gKmJ1ZmZlcnMpOworICAgICBhbmds
ZTo6UmVzdWx0IGZpbmFsaXplUGVuZGluZ0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsKTsK
Ky0KKyAgICAgc2l6ZV90IG1Jbml0aWFsU2l6ZTsKKyAgICAgQnVmZmVyUmVmIG1CdWZmZXI7Cisg
ICAgIHVpbnQzMl90IG1OZXh0QWxsb2NhdGlvbk9mZnNldDsKK0BAIC0xMjcsNyArMTI2LDcgQEAg
Y2xhc3MgQnVmZmVyUG9vbAorIAorICAgICBzaXplX3QgbUJ1ZmZlcnNBbGxvY2F0ZWQ7CisgICAg
IHNpemVfdCBtTWF4QnVmZmVyczsKKy0gICAgQnVmZmVyUG9vbE1lbVBvbGljeSBtTWVtUG9saWN5
OworKyAgICBCdWZmZXJQb29sTWVtUG9saWN5IG1NZW1Qb2xpY3kgPSBCdWZmZXJQb29sTWVtUG9s
aWN5OjpBdXRvOworICAgICBib29sIG1BbHdheXNBbGxvY2F0ZU5ld0J1ZmZlcjsKKyB9OworIAor
ZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wu
bW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCitpbmRl
eCAwNDIzOGVmLi5hNThiNWE1IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9idWZmZXJfcG9vbC5tbQorQEAgLTI1MCwxMSArMjUwLDE4IEBACisgICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCistYW5nbGU6OlJlc3VsdCBCdWZmZXJQb29s
Ojpjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCkKKythbmdsZTo6UmVzdWx0IEJ1ZmZlclBv
b2w6OmNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBib29sIGZsdXNoRW50aXJlQnVmZmVy
KQorIHsKKyAgICAgaWYgKG1CdWZmZXIgJiYgbU5leHRBbGxvY2F0aW9uT2Zmc2V0ID4gbUxhc3RG
bHVzaE9mZnNldCkKKysgICAgeworKyAgICAgICAgaWYgKGZsdXNoRW50aXJlQnVmZmVyKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIDAsIG1MYXN0
Rmx1c2hPZmZzZXQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorICAgICAgICAgeworICAg
ICAgICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIG1MYXN0Rmx1c2hPZmZzZXQsIG1O
ZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hPZmZzZXQpOworKyAgICAgICAgfQorICAg
ICAgICAgbUxhc3RGbHVzaE9mZnNldCA9IG1OZXh0QWxsb2NhdGlvbk9mZnNldDsKKyAgICAgfQor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitkaWZmIC0tZ2l0IGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oCitpbmRleCA1NWZmNjQ5Li4zYWE4
MjZhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLmgKK0BAIC0xMDIsNyArMTAyLDcgQEAgY2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6
IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KKyAK
KyAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tbWFuZCBidWZmZXIgY2FuIGJlIGVuY29kZWQgaW50
by4gUmV0dXJuIGZhbHNlIGlmIGl0IGhhcyBiZWVuIGNvbW1pdHRlZAorICAgICAvLyBhbmQgaGFz
bid0IGJlZW4gcmVzdGFydGVkLgorLSAgICBib29sIHJlYWR5KCkgY29uc3Q7CisrICAgIGJvb2wg
dmFsaWQoKSBjb25zdDsKKyAgICAgdm9pZCBjb21taXQoKTsKKyAgICAgLy8gd2FpdCBmb3IgY29t
bWl0dGVkIGNvbW1hbmQgYnVmZmVyIHRvIGZpbmlzaC4KKyAgICAgdm9pZCBmaW5pc2goKTsKK0BA
IC0xMTUsNiArMTE1LDggQEAgY2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBXcmFw
cGVkT2JqZWN0PGlkPE1UTENvbW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KKyAKKyAgICAgdm9pZCBx
dWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRf
dCB2YWx1ZSk7CisgICAgIHZvaWQgc2VydmVyV2FpdEV2ZW50KGNvbnN0IG10bDo6U2hhcmVkRXZl
bnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSk7CisrCisrICAgIHZvaWQgaW5zZXJ0RGVidWdT
aWduKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOworICAgICB2b2lkIHB1c2hEZWJ1Z0dyb3Vw
KGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOworICAgICB2b2lkIHBvcERlYnVnR3JvdXAoKTsK
KyAKK0BAIC0xMjgsNyArMTMwLDcgQEAgY2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6IHB1Ymxp
YyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KKyAgICAgdm9p
ZCBzZXQoaWQ8TVRMQ29tbWFuZEJ1ZmZlcj4gbWV0YWxCdWZmZXIpOworICAgICB2b2lkIGNsZWFu
dXAoKTsKKyAKKy0gICAgYm9vbCByZWFkeUltcGwoKSBjb25zdDsKKysgICAgYm9vbCB2YWxpZElt
cGwoKSBjb25zdDsKKyAgICAgdm9pZCBjb21taXRJbXBsKCk7CisgICAgIHZvaWQgZm9yY2VFbmRp
bmdDdXJyZW50RW5jb2RlcigpOworIAorQEAgLTE0OSw2ICsxNTEsNyBAQCBjbGFzcyBDb21tYW5k
QnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+
LCBhbmdsZTo6TgorIAorICAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CisgCisrICAgIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtUGVuZGluZ0RlYnVnU2lnbnM7CisgICAgIHN0ZDo6dmVj
dG9yPHN0ZDo6cGFpcjxtdGw6OlNoYXJlZEV2ZW50UmVmLCB1aW50NjRfdD4+IG1QZW5kaW5nU2ln
bmFsRXZlbnRzOworIAorICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbURlYnVnR3JvdXBz
OworQEAgLTE3Niw2ICsxNzksOCBAQCBjbGFzcyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFw
cGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNvZGVyPj4sIGFuZ2xlOjpOb25DbworICAgICBDb21t
YW5kRW5jb2RlciAmbWFya1Jlc291cmNlQmVpbmdXcml0dGVuQnlHUFUoY29uc3QgQnVmZmVyUmVm
ICZidWZmZXIpOworICAgICBDb21tYW5kRW5jb2RlciAmbWFya1Jlc291cmNlQmVpbmdXcml0dGVu
QnlHUFUoY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSk7CisgCisrICAgIHZvaWQgaW5zZXJ0RGVi
dWdTaWduKE5TU3RyaW5nICpsYWJlbCk7CisrCisgICAgIHZpcnR1YWwgdm9pZCBwdXNoRGVidWdH
cm91cChOU1N0cmluZyAqbGFiZWwpOworICAgICB2aXJ0dWFsIHZvaWQgcG9wRGVidWdHcm91cCgp
OworIAorQEAgLTE4OSw2ICsxOTQsOCBAQCBjbGFzcyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBX
cmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNvZGVyPj4sIGFuZ2xlOjpOb25DbworIAorICAg
ICB2b2lkIHNldChpZDxNVExDb21tYW5kRW5jb2Rlcj4gbWV0YWxDbWRFbmNvZGVyKTsKKyAKKysg
ICAgdmlydHVhbCB2b2lkIGluc2VydERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKm1hcmtlcik7Cisr
CisgICBwcml2YXRlOgorICAgICBjb25zdCBUeXBlIG1UeXBlOworICAgICBDb21tYW5kQnVmZmVy
ICZtQ21kQnVmZmVyOworQEAgLTIwMSw3ICsyMDgsNyBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21t
YW5kU3RyZWFtCisgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICBpbmxpbmUgSW50ZXJt
ZWRpYXRlQ29tbWFuZFN0cmVhbSAmcHVzaChjb25zdCBUICZ2YWwpCisgICAgIHsKKy0gICAgICAg
IGNvbnN0IHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPigm
dmFsKTsKKysgICAgICAgIGF1dG8gcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
ICo+KCZ2YWwpOworICAgICAgICAgbUJ1ZmZlci5pbnNlcnQobUJ1ZmZlci5lbmQoKSwgcHRyLCBw
dHIgKyBzaXplb2YoVCkpOworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAtMjE3
LDcgKzIyNCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgeworICAg
ICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIuc2l6ZSgpIC0gc2l6ZW9mKFQpKTsKKyAg
ICAgICAgIFQgcmU7CistICAgICAgICB1aW50OF90ICpwdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QgKj4oJnJlKTsKKysgICAgICAgIGF1dG8gcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90ICo+KCZyZSk7CisgICAgICAgICBzdGQ6OmNvcHkobUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0
ciwgbUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciArIHNpemVvZihUKSwgcHRyKTsKKyAgICAgICAg
IHJldHVybiByZTsKKyAgICAgfQorQEAgLTIyNSw3ICsyMzIsNyBAQCBjbGFzcyBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtCisgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICBpbmxpbmUg
VCBmZXRjaCgpCisgICAgIHsKKy0gICAgICAgIFQgcmUgPSBwZWVrPFQ+KCk7CisrICAgICAgICBh
dXRvIHJlID0gcGVlazxUPigpOworICAgICAgICAgbVJlYWRQdHIgKz0gc2l6ZW9mKFQpOworICAg
ICAgICAgcmV0dXJuIHJlOworICAgICB9CitAQCAtMjMzLDcgKzI0MCw3IEBAIGNsYXNzIEludGVy
bWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgaW5saW5lIGNvbnN0IHVpbnQ4X3QgKmZldGNoKHNp
emVfdCBieXRlcykKKyAgICAgeworICAgICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIu
c2l6ZSgpIC0gYnl0ZXMpOworLSAgICAgICAgc2l6ZV90IGN1ciA9IG1SZWFkUHRyOworKyAgICAg
ICAgYXV0byBjdXIgPSBtUmVhZFB0cjsKKyAgICAgICAgIG1SZWFkUHRyICs9IGJ5dGVzOworICAg
ICAgICAgcmV0dXJuIG1CdWZmZXIuZGF0YSgpICsgY3VyOworICAgICB9CitAQCAtNDc5LDEyICs0
ODYsMTYgQEAgY2xhc3MgUmVuZGVyQ29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFu
ZEVuY29kZXIKKyAgICAgeworICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPj4oQ29tbWFuZEVuY29kZXI6OmdldCgpKTsKKyAgICAgfQorKyAgICB2
b2lkIGluc2VydERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKSBvdmVycmlkZTsKKyAKKyAg
ICAgdm9pZCBpbml0QXR0YWNobWVudFdyaXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KGNvbnN0
IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0YWNobWVudCk7CisrICAgIHZvaWQgaW5pdFdy
aXRlRGVwZW5kZW5jeShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKKyAKKyAgICAgdm9pZCBm
aW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3Ig
Km9iakNSZW5kZXJQYXNzQXR0YWNobWVudCk7CisgCisgICAgIHZvaWQgZW5jb2RlTWV0YWxFbmNv
ZGVyKCk7CisrICAgIHZvaWQgc2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIoKTsKKysgICAgdm9p
ZCBlbmRFbmNvZGluZ0ltcGwoYm9vbCBjb25zaWRlckRpc2NhcmRTaW11bGF0aW9uKTsKKyAKKyAg
ICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJmNvbW1vblNldEJ1ZmZlcihnbDo6U2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
PE1UTEJ1ZmZlcj4gbXRsQnVmZmVyLAorQEAgLTU2MCwxMSArNTcxLDIwIEBAIGNsYXNzIEJsaXRD
b21tYW5kRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsaWNlQ291bnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CisgCisrICAg
IEJsaXRDb21tYW5kRW5jb2RlciAmY29weVRleHR1cmUoY29uc3QgVGV4dHVyZVJlZiAmc3JjLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNlLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0xldmVsLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmRz
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RTbGlj
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RMZXZl
bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzbGljZUNv
dW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxldmVs
Q291bnQpOworKworICAgICBCbGl0Q29tbWFuZEVuY29kZXIgJmZpbGxCdWZmZXIoY29uc3QgQnVm
ZmVyUmVmICZidWZmZXIsIE5TUmFuZ2UgcmFuZ2UsIHVpbnQ4X3QgdmFsdWUpOworIAorICAgICBC
bGl0Q29tbWFuZEVuY29kZXIgJmdlbmVyYXRlTWlwbWFwc0ZvclRleHR1cmUoY29uc3QgVGV4dHVy
ZVJlZiAmdGV4dHVyZSk7CistICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlclB0cik7CistICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hy
b25pemVSZXNvdXJjZShUZXh0dXJlICp0ZXh0dXJlUHRyKTsKKysgICAgQmxpdENvbW1hbmRFbmNv
ZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IEJ1ZmZlclJlZiAmYnVmZmVyKTsKKysgICAg
QmxpdENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYg
JnRleHR1cmUpOworIAorICAgcHJpdmF0ZToKKyAgICAgaWQ8TVRMQmxpdENvbW1hbmRFbmNvZGVy
PiBnZXQoKQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29t
bWFuZF9idWZmZXIubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLm1tCitpbmRleCA0NDMzYjAyLi5iNGEzMzQ3IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQorKysrIGIvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQorQEAgLTExLDYgKzExLDkg
QEAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
LmgiCisgCisgI2luY2x1ZGUgPGNhc3NlcnQ+CisrI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVND
QVJEX0ZSQU1FQlVGRkVSCisrIyAgICBpbmNsdWRlIDxyYW5kb20+CisrI2VuZGlmCisgCisgI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCIKK0BAIC02NSw2ICs2OCw3IEBACisgICAgIFBS
T0MoU2V0VmlzaWJpbGl0eVJlc3VsdE1vZGUpICAgICAgICBcCisgICAgIFBST0MoVXNlUmVzb3Vy
Y2UpICAgICAgICAgICAgICAgICAgICBcCisgICAgIFBST0MoTWVtb3J5QmFycmllcldpdGhSZXNv
dXJjZSkgICAgICBcCisrICAgIFBST0MoSW5zZXJ0RGVidWdzaWduKSAgICAgICAgICAgICAgICBc
CisgICAgIFBST0MoUHVzaERlYnVnR3JvdXApICAgICAgICAgICAgICAgICBcCisgICAgIFBST0Mo
UG9wRGVidWdHcm91cCkKKyAKK0BAIC04NSw0MiArODksNDIgQEAgdm9pZCBJbnZhbGlkQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3Ry
ZWFtICoKKyB2b2lkIFNldFJlbmRlclBpcGVsaW5lU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVy
bWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1UTFJlbmRlclBpcGVs
aW5lU3RhdGU+IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRl
Pj4oKTsKKysgICAgYXV0byBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxp
bmVTdGF0ZT4+KCk7CisgICAgIFtlbmNvZGVyIHNldFJlbmRlclBpcGVsaW5lU3RhdGU6c3RhdGVd
OworICAgICBbc3RhdGUgQU5HTEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyB2b2lkIFNldFRyaWFu
Z2xlRmlsbE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVy
bWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFRyaWFuZ2xlRmlsbE1v
ZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJpYW5nbGVGaWxsTW9kZT4oKTsKKysgICAgYXV0
byBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmdsZUZpbGxNb2RlPigpOworICAgICBbZW5j
b2RlciBzZXRUcmlhbmdsZUZpbGxNb2RlOm1vZGVdOworIH0KKyAKKyB2b2lkIFNldEZyb250RmFj
aW5nV2luZGluZ0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCisgeworLSAgICBNVExXaW5kaW5nIHdpbmRpbmcgPSBzdHJlYW0tPmZldGNoPE1UTFdpbmRp
bmc+KCk7CisrICAgIGF1dG8gd2luZGluZyA9IHN0cmVhbS0+ZmV0Y2g8TVRMV2luZGluZz4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RnJvbnRGYWNpbmdXaW5kaW5nOndpbmRpbmddOworIH0KKyAKKyB2
b2lkIFNldEN1bGxNb2RlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBNVExDdWxsTW9kZSBt
b2RlID0gc3RyZWFtLT5mZXRjaDxNVExDdWxsTW9kZT4oKTsKKysgICAgYXV0byBtb2RlID0gc3Ry
ZWFtLT5mZXRjaDxNVExDdWxsTW9kZT4oKTsKKyAgICAgW2VuY29kZXIgc2V0Q3VsbE1vZGU6bW9k
ZV07CisgfQorIAorIHZvaWQgU2V0RGVwdGhTdGVuY2lsU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+PigpOworKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CisgICAgIFtlbmNvZGVyIHNldERlcHRo
U3RlbmNpbFN0YXRlOnN0YXRlXTsKKyAgICAgW3N0YXRlIEFOR0xFX01UTF9SRUxFQVNFXTsKKyB9
CisgCisgdm9pZCBTZXREZXB0aEJpYXNDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGZsb2F0
IGRlcHRoQmlhcyAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworLSAgICBmbG9hdCBzbG9wZVNj
YWxlID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKy0gICAgZmxvYXQgY2xhbXAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisrICAgIGF1dG8gZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0
Y2g8ZmxvYXQ+KCk7CisrICAgIGF1dG8gc2xvcGVTY2FsZSA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+
KCk7CisrICAgIGF1dG8gY2xhbXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAg
IFtlbmNvZGVyIHNldERlcHRoQmlhczpkZXB0aEJpYXMgc2xvcGVTY2FsZTpzbG9wZVNjYWxlIGNs
YW1wOmNsYW1wXTsKKyB9CisgCitAQCAtMTM0LDEzICsxMzgsMTMgQEAgdm9pZCBTZXRTdGVuY2ls
UmVmVmFsc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWEKKyAKKyB2b2lkIFNldFZpZXdwb3J0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAg
ICBNVExWaWV3cG9ydCB2aWV3cG9ydCA9IHN0cmVhbS0+ZmV0Y2g8TVRMVmlld3BvcnQ+KCk7Cisr
ICAgIGF1dG8gdmlld3BvcnQgPSBzdHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOworICAgICBb
ZW5jb2RlciBzZXRWaWV3cG9ydDp2aWV3cG9ydF07CisgfQorIAorIHZvaWQgU2V0U2Npc3NvclJl
Y3RDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNv
bW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFNjaXNzb3JSZWN0IHJlY3QgPSBzdHJl
YW0tPmZldGNoPE1UTFNjaXNzb3JSZWN0PigpOworKyAgICBhdXRvIHJlY3QgPSBzdHJlYW0tPmZl
dGNoPE1UTFNjaXNzb3JSZWN0PigpOworICAgICBbZW5jb2RlciBzZXRTY2lzc29yUmVjdDpyZWN0
XTsKKyB9CisgCitAQCAtMTU1LDkgKzE1OSw5IEBAIHZvaWQgU2V0QmxlbmRDb2xvckNtZChpZDxN
VExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0Cisg
Cisgdm9pZCBTZXRWZXJ0ZXhCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1U
TEJ1ZmZlcj4gYnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworLSAgICB1
aW50MzJfdCBvZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVp
bnQzMl90IGluZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0
byBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gb2Zm
c2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworICAgICBbZW5jb2RlciBzZXRWZXJ0ZXhCdWZmZXI6YnVm
ZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CisgICAgIFtidWZmZXIgQU5HTEVfTVRM
X1JFTEVBU0VdOworIH0KK0BAIC0xNjUsMjYgKzE2OSwyNiBAQCB2b2lkIFNldFZlcnRleEJ1ZmZl
ckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZAorIHZvaWQgU2V0VmVydGV4QnVmZmVyT2Zmc2V0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHVpbnQzMl90IG9mZnNldCA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGluZGV4ICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgICBbZW5jb2RlciBzZXRWZXJ0ZXhCdWZmZXJPZmZzZXQ6b2Zmc2V0IGF0SW5kZXg6aW5kZXhd
OworIH0KKyAKKyB2b2lkIFNldFZlcnRleEJ5dGVzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAg
ICBzaXplX3Qgc2l6ZSAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworLSAgICBj
b25zdCB1aW50OF90ICpieXRlcyA9IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7CistICAgIHVpbnQzMl90
IGluZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBzaXpl
ICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworKyAgICBhdXRvIGJ5dGVzID0gc3RyZWFtLT5m
ZXRjaChzaXplKTsKKysgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CisgICAgIFtlbmNvZGVyIHNldFZlcnRleEJ5dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6
aW5kZXhdOworIH0KKyAKKyB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5k
ZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExTYW1w
bGVyU3RhdGU+IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOwor
KyAgICBhdXRvIHN0YXRlICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRl
Pj4oKTsKKyAgICAgZmxvYXQgbG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOwor
ICAgICBmbG9hdCBsb2RNYXhDbGFtcCA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CistICAgIHVp
bnQzMl90IGluZGV4ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAg
ICBhdXRvIGluZGV4ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtl
bmNvZGVyIHNldFZlcnRleFNhbXBsZXJTdGF0ZTpzdGF0ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgbG9kTWluQ2xhbXA6bG9kTWluQ2xhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1h
eENsYW1wOmxvZE1heENsYW1wCitAQCAtMTk1LDE3ICsxOTksMTcgQEAgdm9pZCBTZXRWZXJ0ZXhT
YW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgCisg
dm9pZCBTZXRWZXJ0ZXhUZXh0dXJlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExU
ZXh0dXJlPiB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0dXJlPj4oKTsKKy0gICAg
dWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAg
IGF1dG8gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7CisrICAgIGF1
dG8gaW5kZXggICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIHNl
dFZlcnRleFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmluZGV4XTsKKyAgICAgW3RleHR1cmUgQU5H
TEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCisgeworLSAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgdWludDMyX3Qgb2Zmc2V0ICAgICAgPSBzdHJlYW0tPmZl
dGNoPHVpbnQzMl90PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gYnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExC
dWZmZXI+PigpOworKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CisrICAgIGF1dG8gaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2Vu
Y29kZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRl
eF07CisgICAgIFtidWZmZXIgQU5HTEVfTVRMX1JFTEVBU0VdOworIH0KK0BAIC0yMTMsMjYgKzIx
NywyNiBAQCB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQorIHZvaWQgU2V0RnJhZ21lbnRCdWZmZXJP
ZmZzZXRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0p
CisgeworLSAgICB1aW50MzJfdCBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
LSAgICB1aW50MzJfdCBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBh
dXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXgg
ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRC
dWZmZXJPZmZzZXQ6b2Zmc2V0IGF0SW5kZXg6aW5kZXhdOworIH0KKyAKKyB2b2lkIFNldEZyYWdt
ZW50Qnl0ZXNDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHNpemVfdCBzaXplICAgICAgICAg
ID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzID0g
c3RyZWFtLT5mZXRjaChzaXplKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0t
PmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIHNpemUgID0gc3RyZWFtLT5mZXRjaDxzaXpl
X3Q+KCk7CisrICAgIGF1dG8gYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworKyAgICBhdXRv
IGluZGV4ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RnJh
Z21lbnRCeXRlczpieXRlcyBsZW5ndGg6c2l6ZSBhdEluZGV4OmluZGV4XTsKKyB9CisgCisgdm9p
ZCBTZXRGcmFnbWVudFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNv
bW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUg
PSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisrICAgIGF1dG8gc3RhdGUg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOworICAgICBmbG9h
dCBsb2RNaW5DbGFtcCA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgIGZsb2F0IGxvZE1h
eENsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAg
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXggICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RnJhZ21l
bnRTYW1wbGVyU3RhdGU6c3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9kTWluQ2xh
bXA6bG9kTWluQ2xhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9k
TWF4Q2xhbXAKK0BAIC0yNDIsMjYgKzI0NiwyNiBAQCB2b2lkIFNldEZyYWdtZW50U2FtcGxlclN0
YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorIAorIHZvaWQgU2V0
RnJhZ21lbnRUZXh0dXJlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExUZXh0dXJl
PiB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0dXJlPj4oKTsKKy0gICAgdWludDMy
X3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8g
dGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7CisrICAgIGF1dG8gaW5k
ZXggICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIHNldEZyYWdt
ZW50VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5kZXhdOworICAgICBbdGV4dHVyZSBBTkdMRV9N
VExfUkVMRUFTRV07CisgfQorIAorIHZvaWQgRHJhd0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmlt
aXRpdmVUeXBlPigpOworLSAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCAgICAgICAgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworLSAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCAgICAgICAg
ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUg
PSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gdmVydGV4U3Rh
cnQgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gdmVydGV4Q291bnQg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdQcmltaXRp
dmVzOnByaW1pdGl2ZVR5cGUgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQgdmVydGV4Q291bnQ6dmVy
dGV4Q291bnRdOworIH0KKyAKKyB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8
TVRMUHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgdmVydGV4U3RhcnQgICAgICAgICAg
ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgdWludDMyX3QgdmVydGV4Q291bnQg
ICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgdWludDMyX3QgaW5z
dGFuY2VzICAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0
byBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworKyAg
ICBhdXRvIHZlcnRleFN0YXJ0ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBh
dXRvIHZlcnRleENvdW50ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRv
IGluc3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgICBbZW5jb2Rl
ciBkcmF3UHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAgICAgICAgICAgIHZlcnRleFN0
YXJ0OnZlcnRleFN0YXJ0CisgICAgICAgICAgICAgICAgIHZlcnRleENvdW50OnZlcnRleENvdW50
CitAQCAtMjcwLDExICsyNzQsMTEgQEAgdm9pZCBEcmF3SW5zdGFuY2VkQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyB2b2lk
IERyYXdJbmRleGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBNVExQcmltaXRpdmVUeXBl
IHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CistICAg
IHVpbnQzMl90IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CistICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
TVRMSW5kZXhUeXBlPigpOworLSAgICBpZDxNVExCdWZmZXI+IGluZGV4QnVmZmVyICAgICAgPSBz
dHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CistICAgIHNpemVfdCBidWZmZXJPZmZzZXQg
ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworKyAgICBhdXRvIHByaW1pdGl2
ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gaW5k
ZXhDb3VudCAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXhU
eXBlICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworKyAgICBhdXRvIGluZGV4
QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gYnVm
ZmVyT2Zmc2V0ICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgICBbZW5jb2RlciBkcmF3
SW5kZXhlZFByaW1pdGl2ZXM6cHJpbWl0aXZlVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4Q291bnQ6aW5kZXhDb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5
cGU6aW5kZXhUeXBlCitAQCAtMjg1LDEyICsyODksMTIgQEAgdm9pZCBEcmF3SW5kZXhlZENtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmUKKyAKKyB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgewor
LSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFBy
aW1pdGl2ZVR5cGU+KCk7CistICAgIHVpbnQzMl90IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworLSAgICBpZDxNVExCdWZmZXI+
IGluZGV4QnVmZmVyICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CistICAg
IHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90Pigp
OworLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFBy
aW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gaW5kZXhDb3VudCAgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXhUeXBlICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRM
SW5kZXhUeXBlPigpOworKyAgICBhdXRvIGluZGV4QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gYnVmZmVyT2Zmc2V0ICA9IHN0cmVhbS0+ZmV0Y2g8
c2l6ZV90PigpOworKyAgICBhdXRvIGluc3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQz
Ml90PigpOworICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJpbWl0aXZlVHlw
ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q291bnQ6aW5kZXhDb3VudAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBlCitAQCAtMzAzLDEzICszMDcs
MTMgQEAgdm9pZCBEcmF3SW5kZXhlZEluc3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ28KKyB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2Vk
QmFzZVZlcnRleENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3Ry
ZWFtICpzdHJlYW0pCisgeworLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBz
dHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CistICAgIHVpbnQzMl90IGluZGV4Q291
bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIE1UTEluZGV4
VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOwor
LSAgICBpZDxNVExCdWZmZXI+IGluZGV4QnVmZmVyICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1U
TEJ1ZmZlcj4+KCk7CistICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9IHN0cmVh
bS0+ZmV0Y2g8c2l6ZV90PigpOworLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworLSAgICB1aW50MzJfdCBiYXNlVmVydGV4ICAg
ICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2
ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gaW5k
ZXhDb3VudCAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXhU
eXBlICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworKyAgICBhdXRvIGluZGV4
QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gYnVm
ZmVyT2Zmc2V0ICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworKyAgICBhdXRvIGluc3RhbmNl
cyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIGJhc2VWZXJ0ZXgg
ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgICBbZW5jb2RlciBkcmF3SW5kZXhl
ZFByaW1pdGl2ZXM6cHJpbWl0aXZlVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Q291bnQ6aW5kZXhDb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5k
ZXhUeXBlCitAQCAtMzI0LDE2ICszMjgsMTYgQEAgdm9pZCBEcmF3SW5kZXhlZEluc3RhbmNlZEJh
c2VWZXJ0ZXhDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgdm9pZCBT
ZXRWaXNpYmlsaXR5UmVzdWx0TW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1h
bmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlIG1vZGUg
PSBzdHJlYW0tPmZldGNoPE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlPigpOworLSAgICBzaXplX3Qg
b2Zmc2V0ICAgICAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAgIGF1
dG8gbW9kZSAgID0gc3RyZWFtLT5mZXRjaDxNVExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKKysg
ICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAgICAgW2VuY29kZXIg
c2V0VmlzaWJpbGl0eVJlc3VsdE1vZGU6bW9kZSBvZmZzZXQ6b2Zmc2V0XTsKKyB9CisgCisgdm9p
ZCBVc2VSZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50
ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMUmVzb3VyY2U+
IHJlc291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CistICAgIE1UTFJl
c291cmNlVXNhZ2UgdXNhZ2UgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsK
Ky0gICAgbXRsOjpSZW5kZXJTdGFnZXMgc3RhZ2VzID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRl
clN0YWdlcz4oKTsKKysgICAgYXV0byByZXNvdXJjZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVz
b3VyY2U+PigpOworKyAgICBhdXRvIHVzYWdlICAgID0gc3RyZWFtLT5mZXRjaDxNVExSZXNvdXJj
ZVVzYWdlPigpOworKyAgICBhdXRvIHN0YWdlcyAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRl
clN0YWdlcz4oKTsKKyAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKHN0YWdlcyk7CisgI2lmIGRl
ZmluZWQoX19JUEhPTkVfMTNfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNSkKKyAgICAgaWYgKEFO
R0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzLjApKQorQEAgLTM1MSw5ICsz
NTUsOSBAQCB2b2lkIFVzZVJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZQorIHZvaWQgTWVtb3J5QmFycmllcldpdGhS
ZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3Ry
ZWFtKQorIHsKKy0gICAgaWQ8TVRMUmVzb3VyY2U+IHJlc291cmNlID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExSZXNvdXJjZT4+KCk7CistICAgIG10bDo6UmVuZGVyU3RhZ2VzIGFmdGVyICA9IHN0cmVh
bS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7CistICAgIG10bDo6UmVuZGVyU3RhZ2VzIGJl
Zm9yZSA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7CisrICAgIGF1dG8gcmVz
b3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKysgICAgYXV0byBhZnRl
ciAgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7CisrICAgIGF1dG8gYmVm
b3JlICAgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgICBBTkdMRV9V
TlVTRURfVkFSSUFCTEUoYWZ0ZXIpOworICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYmVmb3Jl
KTsKKyAjaWYgZGVmaW5lZChfX01BQ18xMF8xNCkgJiYgKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUKQorQEAgLTM2OCw5ICszNzIsMTYgQEAgdm9pZCBNZW1vcnlCYXJyaWVy
V2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAg
ICBbcmVzb3VyY2UgQU5HTEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyt2b2lkIEluc2VydERlYnVn
c2lnbkNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorK3sKKysgICAgYXV0byBsYWJlbCA9IHN0cmVhbS0+ZmV0
Y2g8TlNTdHJpbmcgKj4oKTsKKysgICAgW2VuY29kZXIgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJl
bF07CisrICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07CisrfQorKworIHZvaWQgUHVzaERl
YnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE5TU3RyaW5nICpsYWJlbCA9IHN0
cmVhbS0+ZmV0Y2g8TlNTdHJpbmcgKj4oKTsKKysgICAgYXV0byBsYWJlbCA9IHN0cmVhbS0+ZmV0
Y2g8TlNTdHJpbmcgKj4oKTsKKyAgICAgW2VuY29kZXIgcHVzaERlYnVnR3JvdXA6bGFiZWxdOwor
ICAgICBbbGFiZWwgQU5HTEVfTVRMX1JFTEVBU0VdOworIH0KK0BAIC0zODgsNyArMzk5LDcgQEAg
dm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyBOU1N0cmluZyAqY3BwTGFiZWxUb09iakMoY29u
c3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIE5TU3RyaW5nICpsYWJlbCA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzptYXJrZXIuY19zdHIoKV07CisrICAgIGF1dG8gbGFi
ZWwgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bWFya2VyLmNfc3RyKCldOworICAg
ICBpZiAoIWxhYmVsKQorICAgICB7CisgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhl
IHN0cmluZyBpcyBub3QgYSB2YWxpZCBhc2NpaSBzdHJpbmcuCitAQCAtMzk2LDcgKzQwNyw2IEBA
IHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIH0KKyAgICAgcmV0dXJuIGxhYmVsOworIH0K
Ky0KKyB9CisgCisgLy8gQ29tbWFuZFF1ZXVlIGltcGxlbWVudGF0aW9uCitAQCAtNTY1LDExICs1
NzUsMTEgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgY2xlYW51cCgpOworIH0KKyAK
Ky1ib29sIENvbW1hbmRCdWZmZXI6OnJlYWR5KCkgY29uc3QKKytib29sIENvbW1hbmRCdWZmZXI6
OnZhbGlkKCkgY29uc3QKKyB7CisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyht
TG9jayk7CisgCistICAgIHJldHVybiByZWFkeUltcGwoKTsKKysgICAgcmV0dXJuIHZhbGlkSW1w
bCgpOworIH0KKyAKKyB2b2lkIENvbW1hbmRCdWZmZXI6OmNvbW1pdCgpCitAQCAtNTk4LDcgKzYw
OCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsZyhtTG9jayk7CisgCistICAgIGlmICghcmVhZHlJbXBsKCkpCisrICAgIGlm
ICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAgICAgICAgIHJldHVybjsKKyAgICAgfQorQEAgLTYy
MCw3ICs2MzAsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVu
Y29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIAorICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworIAorLSAgICBpZiAoIXJlYWR5SW1wbCgpKQor
KyAgICBpZiAoIXZhbGlkSW1wbCgpKQorICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0K
K0BAIC02NDcsNTcgKzY1Nyw1NyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICBBU1NF
UlQobWV0YWxDbWRCdWZmZXIpOworIH0KKyAKKy12b2lkIENvbW1hbmRCdWZmZXI6OnF1ZXVlRXZl
bnRTaWduYWwoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVl
KQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW5zZXJ0RGVidWdTaWduKGNvbnN0IHN0ZDo6c3RyaW5n
ICZtYXJrZXIpCisgeworLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2sp
OworLQorLSAgICBBU1NFUlQocmVhZHlJbXBsKCkpOworLQorLSAgICBpZiAobUFjdGl2ZUNvbW1h
bmRFbmNvZGVyICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgpID09IENvbW1hbmRF
bmNvZGVyOjpSRU5ERVIpCisrICAgIG10bDo6Q29tbWFuZEVuY29kZXIgKmN1cnJlbnRFbmNvZGVy
ID0gbUFjdGl2ZUNvbW1hbmRFbmNvZGVyOworKyAgICBpZiAoY3VycmVudEVuY29kZXIpCisgICAg
IHsKKy0gICAgICAgIC8vIFdlIGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBhY3Rp
dmUgcmVuZGVyIHBhc3MsIGRlZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRoZQorLSAgICAgICAgLy8g
cGFzcyBlbmQuCistICAgICAgICBtUGVuZGluZ1NpZ25hbEV2ZW50cy5wdXNoX2JhY2soe2V2ZW50
LCB2YWx1ZX0pOworKyAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2VyKTsKKysgICAgICAg
ICAgICBjdXJyZW50RW5jb2Rlci0+aW5zZXJ0RGVidWdTaWduKGxhYmVsKTsKKysgICAgICAgIH0K
KyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0gICAgICAgIHNldEV2ZW50SW1wbChldmVudCwg
dmFsdWUpOworKyAgICAgICAgbVBlbmRpbmdEZWJ1Z1NpZ25zLnB1c2hfYmFjayhtYXJrZXIpOwor
ICAgICB9CisgfQorIAorLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6c2VydmVyV2FpdEV2ZW50KGNvbnN0
IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKKyt2b2lkIENvbW1h
bmRCdWZmZXI6OnB1c2hEZWJ1Z0dyb3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCisgewor
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworLSAgICBBU1NFUlQo
cmVhZHlJbXBsKCkpOworLQorLSAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CisrICAg
IC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVudCB0aGlzCisgfQorIAorLXZvaWQgQ29tbWFuZEJ1
ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKKyt2b2lkIENv
bW1hbmRCdWZmZXI6OnBvcERlYnVnR3JvdXAoKQorIHsKKy0gICAgbURlYnVnR3JvdXBzLnB1c2hf
YmFjayhtYXJrZXIpOworKyAgICAvLyBOT1RFKGhxbGUpOiB0byBpbXBsZW1lbnQgdGhpcworK30K
KyAKKyt2b2lkIENvbW1hbmRCdWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwoY29uc3QgbXRsOjpTaGFy
ZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKQorK3sKKyAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgaWYgKHJlYWR5SW1wbCgpKQorKyAg
ICBBU1NFUlQodmFsaWRJbXBsKCkpOworKworKyAgICBpZiAobUFjdGl2ZUNvbW1hbmRFbmNvZGVy
ICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgpID09IENvbW1hbmRFbmNvZGVyOjpS
RU5ERVIpCisgICAgIHsKKy0gICAgICAgIHB1c2hEZWJ1Z0dyb3VwSW1wbChtYXJrZXIpOworKyAg
ICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVudCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSByZW5k
ZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcgdW50aWwgdGhlCisrICAgICAgICAvLyBwYXNzIGVu
ZC4KKysgICAgICAgIG1QZW5kaW5nU2lnbmFsRXZlbnRzLnB1c2hfYmFjayh7ZXZlbnQsIHZhbHVl
fSk7CisgICAgIH0KKy19CistCistdm9pZCBDb21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKCkK
Ky17CistICAgIGlmICghbURlYnVnR3JvdXBzLmVtcHR5KCkpCisrICAgIGVsc2UKKyAgICAgewor
LSAgICAgICAgbURlYnVnR3JvdXBzLnBvcF9iYWNrKCk7CisrICAgICAgICBzZXRFdmVudEltcGwo
ZXZlbnQsIHZhbHVlKTsKKyAgICAgfQorK30KKyAKKyt2b2lkIENvbW1hbmRCdWZmZXI6OnNlcnZl
cldhaXRFdmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFs
dWUpCisreworICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworKyAg
ICBBU1NFUlQodmFsaWRJbXBsKCkpOworIAorLSAgICBpZiAocmVhZHlJbXBsKCkpCistICAgIHsK
Ky0gICAgICAgIHJldHVybjsKKy0gICAgfQorKyAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1
ZSk7CisgfQorIAorIC8qKiBwcml2YXRlIHVzZSBvbmx5ICovCitAQCAtNzA5LDYgKzcxOSwxNSBA
QCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6c2V0QWN0aXZl
Q29tbWFuZEVuY29kZXIoQ29tbWFuZEVuY29kZXIgKmVuY29kZXIpCisgeworICAgICBtQWN0aXZl
Q29tbWFuZEVuY29kZXIgPSBlbmNvZGVyOworKyAgICBmb3IgKGF1dG8gJm1hcmtlciA6IG1QZW5k
aW5nRGVidWdTaWducykKKysgICAgeworKyAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2Vy
KTsKKysgICAgICAgICAgICBlbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOworKyAgICAg
ICAgfQorKyAgICB9CisrICAgIG1QZW5kaW5nRGVidWdTaWducy5jbGVhcigpOworIH0KKyAKKyB2
b2lkIENvbW1hbmRCdWZmZXI6OmludmFsaWRhdGVBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5k
RW5jb2RlciAqZW5jb2RlcikKK0BAIC03MjksNyArNzQ4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAgICAgUGFyZW50Q2xhc3M6OnNldChuaWwpOworIH0KKyAKKy1ib29sIENvbW1hbmRC
dWZmZXI6OnJlYWR5SW1wbCgpIGNvbnN0CisrYm9vbCBDb21tYW5kQnVmZmVyOjp2YWxpZEltcGwo
KSBjb25zdAorIHsKKyAgICAgaWYgKCFQYXJlbnRDbGFzczo6dmFsaWQoKSkKKyAgICAgeworQEAg
LTc0MSw3ICs3NjAsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIAorIHZvaWQgQ29tbWFu
ZEJ1ZmZlcjo6Y29tbWl0SW1wbCgpCisgeworLSAgICBpZiAoIXJlYWR5SW1wbCgpKQorKyAgICBp
ZiAoIXZhbGlkSW1wbCgpKQorICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0KK0BAIC04
ODksNiArOTA4LDE3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIFtnZXQoKSBwb3BE
ZWJ1Z0dyb3VwXTsKKyB9CisgCisrdm9pZCBDb21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdTaWdu
KE5TU3RyaW5nICpsYWJlbCkKKyt7CisrICAgIGluc2VydERlYnVnU2lnbkltcGwobGFiZWwpOwor
K30KKysKKyt2b2lkIENvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ25JbXBsKE5TU3RyaW5n
ICpsYWJlbCkKKyt7CisrICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKysgICAgW2dldCgp
IGluc2VydERlYnVnU2lnbnBvc3Q6bGFiZWxdOworK30KKysKKyAvLyBSZW5kZXJDb21tYW5kRW5j
b2RlclNoYWRlclN0YXRlcyBpbXBsZW1lbnRhdGlvbgorIFJlbmRlckNvbW1hbmRFbmNvZGVyU2hh
ZGVyU3RhdGVzOjpSZW5kZXJDb21tYW5kRW5jb2RlclNoYWRlclN0YXRlcygpCisgeworQEAgLTk1
MSw2ICs5ODEsOSBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVu
Y29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICB7CisgICAgICAgICBz
aGFkZXJTdGF0ZXMucmVzZXQoKTsKKyAgICAgfQorKworKyAgICB2aXNpYmlsaXR5UmVzdWx0TW9k
ZSAgICAgICAgID0gTVRMVmlzaWJpbGl0eVJlc3VsdE1vZGVEaXNhYmxlZDsKKysgICAgdmlzaWJp
bGl0eVJlc3VsdEJ1ZmZlck9mZnNldCA9IDA7CisgfQorIAorIC8vIFJlbmRlckNvbW1hbmRFbmNv
ZGVyIGltcGxlbXRhdGlvbgorQEAgLTEwMTQsMTEgKzEwNDcsMTIgQEAgdm9pZCBQb3BEZWJ1Z0dy
b3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3QKKyAgICAgeworICAgICAgICAgaWYgKG9iakNSZW5kZXJQYXNzQXR0YWNobWVudC5z
dG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvblN0b3JlKQorICAgICAgICAgeworLSAgICAgICAg
ICAgIC8vIE5PVEUoaHFsZSk6IEN1cnJlbnRseSBpZiB0aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1w
bGljaXQgTVMgdGV4dHVyZSBpcworLSAgICAgICAgICAgIC8vIE1UTFN0b3JlQWN0aW9uU3RvcmUs
IGl0IGlzIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byBzdG9yZSBhbmQgcmVzb2x2ZSBhY3Rpb24u
IEl0CistICAgICAgICAgICAgLy8gbWlnaHQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFk
LiBDb25zaWRlciBhbiBpbXByb3ZlbWVudCBzdWNoIGFzIG9ubHkgc3RvcmUgdGhlCistICAgICAg
ICAgICAgLy8gTVMgdGV4dHVyZSwgYW5kIHJlc29sdmUgb25seSBhdCB0aGUgZW5kIG9mIHJlYWwg
cmVuZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUgaXMKKy0gICAgICAgICAgICAvLyBpbnRl
cnJ1cHRlZCBieSBjb21wdXRlIHBhc3MpIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBvcGVy
YXRpb24gc3RhcnRzLgorKyAgICAgICAgICAgIC8vIE5PVEUoaHFsZSk6IEN1cnJlbnRseSBpZiB0
aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1wbGljaXQgTVMgdGV4dHVyZSBpcyBNVExTdG9yZUFjdGlv
biwKKysgICAgICAgICAgICAvLyBpdCBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gc3RvcmUg
YW5kIHJlc29sdmUgYWN0aW9uLiBJdCBtaWdodCBpbnRyb2R1Y2UKKysgICAgICAgICAgICAvLyB1
bm5lY2Vzc2FyeSBvdmVyaGVhZC4KKysgICAgICAgICAgICAvLyBDb25zaWRlciBhbiBpbXByb3Zl
bWVudCBzdWNoIGFzIG9ubHkgc3RvcmUgdGhlIE1TIHRleHR1cmUsIGFuZCByZXNvbHZlIG9ubHkg
YXQKKysgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5k
ZXIgcGFzcyB0aGUgd2FzIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykKKysgICAgICAgICAg
ICAvLyBvciBiZWZvcmUgZ2xCbGl0RnJhbWVidWZmZXIgb3BlcmF0aW9uIHN0YXJ0cy4KKyAgICAg
ICAgICAgICBvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3RvcmVBY3Rpb24gPSBNVExTdG9yZUFj
dGlvblN0b3JlQW5kTXVsdGlzYW1wbGVSZXNvbHZlOworICAgICAgICAgfQorICAgICAgICAgZWxz
ZSBpZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0
aW9uRG9udENhcmUpCitAQCAtMTAzNiw2ICsxMDcwLDExIEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgfQorIAorIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVuY29kaW5nKCkKKyt7
CisrICAgIGVuZEVuY29kaW5nSW1wbCh0cnVlKTsKKyt9CisrCisrdm9pZCBSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZW5kRW5jb2RpbmdJbXBsKGJvb2wgY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikK
KyB7CisgICAgIGlmICghdmFsaWQoKSkKKyAgICAgICAgIHJldHVybjsKK0BAIC0xMDUwLDExICsx
MDg5LDExIEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgICAgICBmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbihvYmpDUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CisgICAg
IH0KKyAKKy0gICAgLy8gVXBkYXRlIGRlcHRoIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0
YXJ0KCkgYW5kIGVuZEVuY29kaW5nKCkKKysgICAgLy8gVXBkYXRlIHN0b3JlIGFjdGlvbiBzZXQg
YmV0d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAgb2JqQ1JlbmRlclBhc3NE
ZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9IG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0
dGFjaG1lbnQuc3RvcmVBY3Rpb247CisgICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNS
ZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQpOworIAorLSAgICAvLyBVcGRhdGUgc3RlbmNp
bCBzdG9yZSBhY3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygpCisr
ICAgIC8vIFVwZGF0ZSBzdG9yZSBhY3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRF
bmNvZGluZygpCisgICAgIG9iakNSZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5zdG9y
ZUFjdGlvbiA9CisgICAgICAgICBtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQuc3Rv
cmVBY3Rpb247CisgICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudCk7CitAQCAtMTA3NSwyNiArMTExNCw3OCBAQCB2b2lkIFBvcERl
YnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdAorIAorICAgICBDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKTsKKyAK
KysjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKysgICAgaWYgKGNv
bnNpZGVyRGlzY2FyZFNpbXVsYXRpb24pCisrICAgIHsKKysgICAgICAgIHNpbXVsYXRlRGlzY2Fy
ZEZyYW1lYnVmZmVyKCk7CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgLy8gcmVzZXQgc3RhdGUK
KyAgICAgbVJlbmRlclBhc3NEZXNjID0gUmVuZGVyUGFzc0Rlc2MoKTsKKyAgICAgbVN0YXRlQ2Fj
aGUucmVzZXQoKTsKKyB9CisgCistaW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6Omlu
aXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJlY3QoCistICAgIGNvbnN0IFJl
bmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0YWNobWVudCkKKytpbmxpbmUgdm9pZCBSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6aW5pdFdyaXRlRGVwZW5kZW5jeShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0
dXJlKQorIHsKKy0gICAgVGV4dHVyZVJlZiB0ZXh0dXJlID0gYXR0YWNobWVudC50ZXh0dXJlOwor
ICAgICBpZiAodGV4dHVyZSkKKyAgICAgeworICAgICAgICAgY21kQnVmZmVyKCkuc2V0V3JpdGVE
ZXBlbmRlbmN5KHRleHR1cmUpOworKyAgICB9CisrfQorKworK3ZvaWQgUmVuZGVyQ29tbWFuZEVu
Y29kZXI6OnNpbXVsYXRlRGlzY2FyZEZyYW1lYnVmZmVyKCkKKyt7CisrICAgIC8vIFNpbXVsYXRl
IHRydWUgZnJhbWVidWZmZXIgZGlzY2FyZCBvcGVyYXRpb24gYnkgY2xlYXJpbmcgdGhlIGZyYW1l
YnVmZmVyCisrI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVNDQVJEX0ZSQU1FQlVGRkVSCisrICAg
IHN0ZDo6cmFuZG9tX2RldmljZSByZDsgICAvLyBXaWxsIGJlIHVzZWQgdG8gb2J0YWluIGEgc2Vl
ZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZW5naW5lCisrICAgIHN0ZDo6bXQxOTkzNyBnZW4ocmQo
KSk7ICAvLyBTdGFuZGFyZCBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSBzZWVkZWQgd2l0aCByZCgp
CisrICAgIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxmbG9hdD4gZGlzKDAuMCwgMS4w
Zik7CisrICAgIGJvb2wgaGFzRGlzY2FyZCA9IGZhbHNlOworKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKysgICAg
eworKyAgICAgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3Jl
QWN0aW9uID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRydWU7
CisrICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFj
dGlvbiA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKysgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2Mu
Y29sb3JBdHRhY2htZW50c1tpXS5jbGVhckNvbG9yID0KKysgICAgICAgICAgICAgICAgTVRMQ2xl
YXJDb2xvck1ha2UoZGlzKGdlbiksIGRpcyhnZW4pLCBkaXMoZ2VuKSwgZGlzKGdlbikpOworKyAg
ICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1SZW5kZXJQ
YXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gPSBNVExMb2FkQWN0aW9uTG9h
ZDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLmRlcHRo
QXR0YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorKyAgICB7
CisrICAgICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0
cnVlOworKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9u
ID0gTVRMTG9hZEFjdGlvbkNsZWFyOworKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0
YWNobWVudC5jbGVhckRlcHRoID0gZGlzKGdlbik7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7
CisrICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LmxvYWRBY3Rpb24gPSBN
VExMb2FkQWN0aW9uTG9hZDsKKysgICAgfQorIAorLSAgICAgICAgY29uc3QgTWlwbWFwTmF0aXZl
TGV2ZWwgJm1pcExldmVsID0gYXR0YWNobWVudC5sZXZlbDsKKysgICAgaWYgKG1SZW5kZXJQYXNz
RGVzYy5zdGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRD
YXJlKQorKyAgICB7CisrICAgICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gdHJ1ZTsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0
YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisrICAgICAgICBtUmVu
ZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQuY2xlYXJTdGVuY2lsID0gcmFuZCgpOworKyAg
ICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxB
dHRhY2htZW50LmxvYWRBY3Rpb24gPSBNVExMb2FkQWN0aW9uTG9hZDsKKysgICAgfQorIAorLSAg
ICAgICAgbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCA9CistICAgICAgICAgICAgc3Rk
OjptaW48TlNVSW50ZWdlcj4obVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCwgdGV4dHVy
ZS0+d2lkdGgobWlwTGV2ZWwpKTsKKy0gICAgICAgIG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3Qu
aGVpZ2h0ID0KKy0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRlZ2VyPihtUmVuZGVyUGFzc01h
eFNjaXNzb3JSZWN0LmhlaWdodCwgdGV4dHVyZS0+aGVpZ2h0KG1pcExldmVsKSk7CisrICAgIGlm
IChoYXNEaXNjYXJkKQorKyAgICB7CisrICAgICAgICBhdXRvIHRtcERlc2MgPSBtUmVuZGVyUGFz
c0Rlc2M7CisrICAgICAgICByZXN0YXJ0KHRtcERlc2MpOworKyAgICAgICAgZW5kRW5jb2RpbmdJ
bXBsKGZhbHNlKTsKKyAgICAgfQorKyNlbmRpZiAgLy8gQU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NB
UkRfRlJBTUVCVUZGRVIKKyB9CisgCisgdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5jb2Rl
TWV0YWxFbmNvZGVyKCkKK0BAIC0xMTAyLDcgKzExOTMsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdAorICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICB7CisgICAgICAgICBBTkdMRV9N
VExfTE9HKCJDcmVhdGluZyBuZXcgcmVuZGVyIGNvbW1hbmQgZW5jb2RlciB3aXRoIGRlc2M6ICVA
IiwKKy0gICAgICAgICAgICAgICAgICAgICAgbUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQy5nZXQo
KSk7CisrICAgICAgICAgICAgICAgICAgICAgIFttQ2FjaGVkUmVuZGVyUGFzc0Rlc2NPYmpDIGRl
c2NyaXB0aW9uXSk7CisgCisgICAgICAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbWV0
YWxDbWRFbmNvZGVyID0KKyAgICAgICAgICAgICBbY21kQnVmZmVyKCkuZ2V0KCkgcmVuZGVyQ29t
bWFuZEVuY29kZXJXaXRoRGVzY3JpcHRvcjptQ2FjaGVkUmVuZGVyUGFzc0Rlc2NPYmpDXTsKK0BA
IC0xMTEwLDcgKzEyMDEsMTEgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgICAgIHNl
dChtZXRhbENtZEVuY29kZXIpOworIAorICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgaXQgd2FzIGNy
ZWF0ZWQgc3VjY2Vzc2Z1bGx5CistICAgICAgICBBU1NFUlQobWV0YWxDbWRFbmNvZGVyKTsKKysg
ICAgICAgIEFTU0VSVChnZXQoKSk7CisrCisrICAgICAgICAvLyBXb3JrLWFyb3VuZCBkcml2ZXIg
YnVnIG9uIGlPUyBkZXZpY2VzOiBzdGVuY2lsIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gemVy
bworKyAgICAgICAgLy8gZXZlbiBpZiB0aGUgZG9jIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXMg
YWxyZWFkeSB6ZXJvLgorKyAgICAgICAgW21ldGFsQ21kRW5jb2RlciBzZXRTdGVuY2lsUmVmZXJl
bmNlVmFsdWU6MF07CisgCisgICAgICAgICBpZiAobUxhYmVsKQorICAgICAgICAgeworQEAgLTEx
MTksNyArMTIxNCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgICAgICB3aGls
ZSAobUNvbW1hbmRzLmdvb2QoKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBDbWRUeXBlIGNt
ZFR5cGUgICAgICAgICAgICA9IG1Db21tYW5kcy5mZXRjaDxDbWRUeXBlPigpOworKyAgICAgICAg
ICAgIGF1dG8gY21kVHlwZSAgICAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNoPENtZFR5cGU+
KCk7CisgICAgICAgICAgICAgQ29tbWFuZEVuY29kZXJGdW5jIGVuY29kZXIgPSBnQ29tbWFuZEVu
Y29kZXJzW3N0YXRpY19jYXN0PGludD4oY21kVHlwZSldOworICAgICAgICAgICAgIGVuY29kZXIo
bWV0YWxDbWRFbmNvZGVyLCAmbUNvbW1hbmRzKTsKKyAgICAgICAgIH0KK0BAIC0xMTQyLDQxICsx
MjM3LDM0IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgICAgICBlbmRFbmNvZGluZygp
OworICAgICB9CisgCistICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKysgICAgaWYgKCFj
bWRCdWZmZXIoKS52YWxpZCgpKQorICAgICB7CisgICAgICAgICByZXNldCgpOworICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICB9CisgCistICAgIG1MYWJlbC5yZXNldCgpOworLQorICAgICBt
UmVuZGVyUGFzc0Rlc2MgPSBkZXNjOworICAgICBtUmVjb3JkaW5nICAgICAgPSB0cnVlOworICAg
ICBtSGFzRHJhd0NhbGxzICAgPSBmYWxzZTsKKy0gICAgbVJlbmRlclBhc3NNYXhTY2lzc29yUmVj
dCA9IHsueCAgICAgID0gMCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAueSAg
ICAgID0gMCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2lkdGggID0gc3Rk
OjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCksCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmhlaWdodCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TlNVSW50ZWdlcj46
Om1heCgpfTsKKyAKKy0gICAgLy8gU2V0IHdyaXRpbmcgZGVwZW5kZW5jeSAmIGNvbnN0cmFpbiB0
aGUgc2Npc3NvciByZWN0CisrICAgIC8vIG1hc2sgd3JpdGluZyBkZXBlbmRlbmN5ICYgc2V0IGFw
cHJvcHJpYXRlIHN0b3JlIG9wdGlvbnMKKyAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1S
ZW5kZXJQYXNzRGVzYy5udW1Db2xvckF0dGFjaG1lbnRzOyArK2kpCisgICAgIHsKKy0gICAgICAg
IGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJlY3QobVJlbmRlclBhc3NE
ZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworKyAgICAgICAgaW5pdFdyaXRlRGVwZW5kZW5jeSht
UmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlKCkpOworICAgICB9Cisg
CistICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJlY3QobVJlbmRl
clBhc3NEZXNjLmRlcHRoQXR0YWNobWVudCk7CisrICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJl
bmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpOworIAorLSAgICBpbml0QXR0
YWNobWVudFdyaXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KG1SZW5kZXJQYXNzRGVzYy5zdGVu
Y2lsQXR0YWNobWVudCk7CisrICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNj
LnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKSk7CisgCisgICAgIC8vIENvbnZlcnQgdG8gT2Jq
ZWN0aXZlLUMgZGVzY3JpcHRvcgorICAgICBtUmVuZGVyUGFzc0Rlc2MuY29udmVydFRvTWV0YWxE
ZXNjKG1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMpOworIAorLSAgICAvLyBUaGUgYWN0dWFsIE9i
amVjdGl2ZS1DIGVuY29kZXIgd2lsbCBiZSBjcmVhdGVkIGxhdGVyIGluIGVuZEVuY29kaW5nKCks
IHdlIGRvIHNvIGluCistICAgIC8vIG9yZGVyIHRvIGJlIGFibGUgdG8gc29ydCB0aGUgY29tbWFu
ZHMgb3IgZG8gdGhlIHByZXByb2Nlc3NpbmcgYmVmb3JlIHRoZSBhY3R1YWwKKy0gICAgLy8gZW5j
b2RpbmcuCisrICAgIC8vIFRoZSBhY3R1YWwgT2JqZWN0aXZlLUMgZW5jb2RlciB3aWxsIGJlIGNy
ZWF0ZWQgbGF0ZXIgaW4gZW5kRW5jb2RpbmcoKSwgd2UgZG8gc28gaW4gb3JkZXIKKysgICAgLy8g
dG8gYmUgYWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBkbyB0aGUgcHJlcHJvY2Vzc2luZyBi
ZWZvcmUgdGhlIGFjdHVhbCBlbmNvZGluZy4KKyAKKy0gICAgLy8gU2luY2Ugd2UgZGVmZXIgdGhl
IG5hdGl2ZSBlbmNvZGVyIGNyZWF0aW9uLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgdGVsbCBjb21t
YW5kIGJ1ZmZlcgorLSAgICAvLyB0aGF0IHRoaXMgb2JqZWN0IGlzIHRoZSBhY3RpdmUgZW5jb2Rl
cjoKKysgICAgLy8gU2luY2Ugd2UgZGVmZXIgdGhlIG5hdGl2ZSBlbmNvZGVyIGNyZWF0aW9uLCB3
ZSBuZWVkIHRvIGV4cGxpY2l0bHkgdGVsbCBjb21tYW5kIGJ1ZmZlciB0aGF0CisrICAgIC8vIHRo
aXMgb2JqZWN0IGlzIHRoZSBhY3RpdmUgZW5jb2RlcjoKKyAgICAgY21kQnVmZmVyKCkuc2V0QWN0
aXZlQ29tbWFuZEVuY29kZXIodGhpcyk7CisgCisgICAgIHJldHVybiAqdGhpczsKK0BAIC0xMzAy
LDE2ICsxMzkwLDYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgeworICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICB9CistCistICAgIGlmIChBTkdMRV9VTkxJS0VMWShyZWN0Lngg
KyByZWN0LndpZHRoID4gbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCB8fAorLSAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC55ICsgcmVjdC5oZWlnaHQgPiBtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LmhlaWdodCkpCistICAgIHsKKy0gICAgICAgIFdBUk4oKSA8PCAiT3V0IG9mIGJv
dW5kIHNjaXNzb3IgcmVjdCBkZXRlY3RlZCAiIDw8IHJlY3QueCA8PCAiICIgPDwgcmVjdC55IDw8
ICIgIgorLSAgICAgICAgICAgICAgIDw8IHJlY3Qud2lkdGggPDwgIiAiIDw8IHJlY3QuaGVpZ2h0
OworLSAgICAgICAgLy8gT3V0IG9mIGJvdW5kIHJlY3Qgd2lsbCBjcmFzaCB0aGUgbWV0YWwgcnVu
dGltZSwgaWdub3JlIGl0LgorLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCisgICAg
IG1TdGF0ZUNhY2hlLnNjaXNzb3JSZWN0ID0gcmVjdDsKKyAKKyAgICAgbUNvbW1hbmRzLnB1c2go
Q21kVHlwZTo6U2V0U2Npc3NvclJlY3QpLnB1c2gocmVjdCk7CitAQCAtMTM4Myw3ICsxNDYxLDcg
QEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICB9CisgCistICAgICAgICAvLyBJZiBidWZmZXIgYWxyZWFkeSBib3VuZCBidXQgd2l0
aCBkaWZmZXJlbnQgb2Zmc2V0LCB0aGVuIHVwZGF0ZSB0aGUgb2Zmc2V0IG9ubHkuCisrICAgICAg
ICAvLyBJZiBidWZmZXIgYWxyZWFkeSBib3VuZCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0LCB0
aGVuIHVwZGF0ZSB0aGUgb2ZmZXIgb25seS4KKyAgICAgICAgIHNoYWRlclN0YXRlcy5idWZmZXJP
ZmZzZXRzW2luZGV4XSA9IG9mZnNldDsKKyAKKyAgICAgICAgIG1Db21tYW5kcy5wdXNoKHN0YXRp
Y19jYXN0PENtZFR5cGU+KG1TZXRCdWZmZXJPZmZzZXRDbWRzW3NoYWRlclR5cGVdKSkKK0BAIC0x
NDkwLDEyICsxNTY4LDYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHZlcnRleENvdW50KQorIHsKKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNo
ZS5yZW5kZXJQaXBlbGluZSkpCistICAgIHsKKy0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwg
aWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgor
LSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCisgICAgIG1IYXNEcmF3Q2FsbHMgPSB0
cnVlOworICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpEcmF3KS5wdXNoKHByaW1pdGl2ZVR5
cGUpLnB1c2godmVydGV4U3RhcnQpLnB1c2godmVydGV4Q291bnQpOworIAorQEAgLTE1MDcsMTIg
KzE1NzksNiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29k
ZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgaW5zdGFuY2VzKQorIHsKKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFt
U3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCistICAgIHsKKy0gICAgICAgIC8vIElnbm9yZSBk
cmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0
byB0aGlzLgorLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCisgICAgIG1IYXNEcmF3
Q2FsbHMgPSB0cnVlOworICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpEcmF3SW5zdGFuY2Vk
KQorICAgICAgICAgLnB1c2gocHJpbWl0aXZlVHlwZSkKK0BAIC0xNTI5LDEzICsxNTk1LDcgQEAg
dm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmaW5kZXhCdWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgYnVmZmVyT2Zmc2V0KQorIHsKKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVD
YWNoZS5yZW5kZXJQaXBlbGluZSkpCistICAgIHsKKy0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNh
bGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlz
LgorLSAgICAgICAgcmV0dXJuICp0aGlzOworLSAgICB9CistCistICAgIGlmIChBTkdMRV9VTkxJ
S0VMWSghaW5kZXhCdWZmZXIpKQorKyAgICBpZiAoIWluZGV4QnVmZmVyKQorICAgICB7CisgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KK0BAIC0xNTYwLDEzICsxNjIwLDcgQEAgdm9pZCBQ
b3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBpbnN0YW5jZXMpCisgeworLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0
ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAgICAgICAgLy8gSWdub3JlIGRyYXcg
Y2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRo
aXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgaWYgKEFOR0xFX1VO
TElLRUxZKCFpbmRleEJ1ZmZlcikpCisrICAgIGlmICghaW5kZXhCdWZmZXIpCisgICAgIHsKKyAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgfQorQEAgLTE1OTQsMTMgKzE2NDgsNyBAQCB2b2lk
IFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICB1aW50MzJfdCBpbnN0YW5jZXMsCisgICAgIHVpbnQz
Ml90IGJhc2VWZXJ0ZXgpCisgeworLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hl
LnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBp
ZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCist
ICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0KKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZ
KCFpbmRleEJ1ZmZlcikpCisrICAgIGlmICghaW5kZXhCdWZmZXIpCisgICAgIHsKKyAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgfQorQEAgLTE2NzMsNiArMTcyMSwxMiBAQCB2b2lkIFBvcERl
YnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdAorICAgICByZXR1cm4gKnRoaXM7CisgfQorIAorK3ZvaWQgUmVuZGVyQ29t
bWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKQorK3sKKysg
ICAgLy8gRGVmZXIgdGhlIGluc2VydGlvbiB1bnRpbCBlbmRFbmNvZGluZygpCisrICAgIG1Db21t
YW5kcy5wdXNoKENtZFR5cGU6Okluc2VydERlYnVnc2lnbikucHVzaChbbGFiZWwgQU5HTEVfTVRM
X1JFVEFJTl0pOworK30KKysKKyB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpwdXNoRGVidWdH
cm91cChOU1N0cmluZyAqbGFiZWwpCisgeworICAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVu
dGlsIGVuZEVuY29kaW5nKCkKK0BAIC0xNzk5LDcgKzE4NTMsNyBAQCB2b2lkIFBvcERlYnVnR3Jv
dXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNv
bW1hbmRTdAorICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgIH0KKyAKKy0gICAg
ICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKysgICAgICAgIGlmICghY21kQnVmZmVyKCku
dmFsaWQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKK0BAIC0xOTYyLDYgKzIwMTYsNjYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAgICAgcmV0dXJuICp0aGlzOworIH0KKyAKKytCbGl0Q29tbWFuZEVuY29kZXIgJkJs
aXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUoY29uc3QgVGV4dHVyZVJlZiAmc3JjLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBzcmNTdGFydFNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBzcmNTdGFydExldmVsLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZkc3Qs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGRzdFN0YXJ0U2xpY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdFN0YXJ0TGV2ZWwsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsaWNlQ291
bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGxldmVsQ291bnQpCisreworKyAgICBpZiAoIXNyYyB8fCAhZHN0KQorKyAgICB7
CisrICAgICAgICByZXR1cm4gKnRoaXM7CisrICAgIH0KKysKKysgICAgY21kQnVmZmVyKCkuc2V0
UmVhZERlcGVuZGVuY3koc3JjKTsKKysgICAgY21kQnVmZmVyKCkuc2V0V3JpdGVEZXBlbmRlbmN5
KGRzdCk7CisrCisrI2lmIGRlZmluZWQoX19JUEhPTkVfMTNfMCkgfHwgZGVmaW5lZChfX01BQ18x
MF8xNSkKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEz
LjApKQorKyAgICB7CisrICAgICAgICBbZ2V0KCkgY29weUZyb21UZXh0dXJlOnNyYy0+Z2V0KCkK
KysgICAgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c3JjU3RhcnRTbGljZQorKyAgICAgICAg
ICAgICAgICAgICBzb3VyY2VMZXZlbDpzcmNTdGFydExldmVsCisrICAgICAgICAgICAgICAgICAg
ICAgdG9UZXh0dXJlOmRzdC0+Z2V0KCkKKysgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6
ZHN0U3RhcnRTbGljZQorKyAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkc3RTdGFydExl
dmVsCisrICAgICAgICAgICAgICAgICAgICBzbGljZUNvdW50OnNsaWNlQ291bnQKKysgICAgICAg
ICAgICAgICAgICAgIGxldmVsQ291bnQ6bGV2ZWxDb3VudF07CisrICAgIH0KKysgICAgZWxzZQor
KyNlbmRpZgorKyAgICB7CisrICAgICAgICBNVExPcmlnaW4gb3JpZ2luID0gTVRMT3JpZ2luTWFr
ZSgwLCAwLCAwKTsKKysgICAgICAgIGZvciAodWludDMyX3Qgc2xpY2UgPSAwOyBzbGljZSA8IHNs
aWNlQ291bnQ7ICsrc2xpY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgdWludDMyX3Qgc3Jj
U2xpY2UgPSBzcmNTdGFydFNsaWNlICsgc2xpY2U7CisrICAgICAgICAgICAgdWludDMyX3QgZHN0
U2xpY2UgPSBkc3RTdGFydFNsaWNlICsgc2xpY2U7CisrICAgICAgICAgICAgZm9yICh1aW50MzJf
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgKytsZXZlbCkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgc3JjTGV2ZWwgPSBtdGw6
Ok1pcG1hcE5hdGl2ZUxldmVsKHNyY1N0YXJ0TGV2ZWwgKyBsZXZlbCk7CisrICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGRzdExldmVsID0gZHN0U3RhcnRMZXZlbCArIGxldmVsOworKyAgICAgICAg
ICAgICAgICBNVExTaXplIHNyY1NpemUgPQorKyAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1h
a2Uoc3JjLT53aWR0aChzcmNMZXZlbCksIHNyYy0+aGVpZ2h0KHNyY0xldmVsKSwgc3JjLT5kZXB0
aChzcmNMZXZlbCkpOworKworKyAgICAgICAgICAgICAgICBbZ2V0KCkgY29weUZyb21UZXh0dXJl
OnNyYy0+Z2V0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzcmNT
bGljZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNyY0xldmVsLmdl
dCgpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46b3JpZ2luCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c3JjU2l6ZQorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmRzdC0+Z2V0KCkKKysgICAgICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25TbGljZTpkc3RTbGljZQorKyAgICAgICAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbkxldmVsOmRzdExldmVsCisrICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25PcmlnaW46b3JpZ2luXTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysK
KysgICAgcmV0dXJuICp0aGlzOworK30KKysKKyBCbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21t
YW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0
ZXh0dXJlKQorIHsKKyAgICAgaWYgKCF0ZXh0dXJlKQorQEAgLTE5NzQsNyArMjA4OCw3IEBAIHZv
aWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rlciwg
SW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgIHJldHVybiAqdGhpczsKKyB9CistQmxpdENv
bW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoQnVm
ZmVyICpidWZmZXIpCisrQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnN5
bmNocm9uaXplUmVzb3VyY2UoY29uc3QgQnVmZmVyUmVmICZidWZmZXIpCisgeworICAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgeworQEAgLTE5ODksNyArMjEwMyw3IEBAIHZvaWQgUG9wRGVidWdHcm91
cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0CisgI2VuZGlmCisgICAgIHJldHVybiAqdGhpczsKKyB9CistQmxpdENvbW1hbmRFbmNv
ZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoVGV4dHVyZSAqdGV4
dHVyZSkKKytCbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25p
emVSZXNvdXJjZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQorIHsKKyAgICAgaWYgKCF0ZXh0
dXJlKQorICAgICB7CitAQCAtMjAyOCw3ICsyMTQyLDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3QKKyAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICB9CisgCistICAgICAgICBp
ZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisrICAgICAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlk
KCkpCisgICAgICAgICB7CisgICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9j
b21tb24uaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKK2luZGV4
IDk3Y2NiOTMuLjNmYzVlMzkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1vbi5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oCitAQCAtMjcsOSArMjcsMTggQEAKKyAjaW5jbHVkZSAibGliQU5HTEUvYW5nbGV0eXBl
cy5oIgorIAorICNpZiBUQVJHRVRfT1NfSVBIT05FCisrIyAgICBpZiAhZGVmaW5lZChfX0lQSE9O
RV8xMV8wKQorKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV8xMV8wIDExMDAwMAorKyMgICAgZW5k
aWYKKyAjICAgIGlmICFkZWZpbmVkKEFOR0xFX0lPU19ERVBMT1lfVEFSR0VUKQorICMgICAgICAg
IGRlZmluZSBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCBfX0lQSE9ORV8xMV8wCisgIyAgICBlbmRp
ZgorKyMgICAgaWYgIWRlZmluZWQoX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCkKKysj
ICAgICAgICBkZWZpbmUgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8x
MV8wCisrIyAgICBlbmRpZgorKyMgICAgaWYgIWRlZmluZWQoX19UVl9PU19WRVJTSU9OX01BWF9B
TExPV0VEKQorKyMgICAgICAgIGRlZmluZSBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgX19J
UEhPTkVfMTFfMAorKyMgICAgZW5kaWYKKyAjZW5kaWYKKyAKKyAjaWYgIWRlZmluZWQoVEFSR0VU
X09TX01BQ0NBVEFMWVNUKQorQEAgLTY2LDYgKzc1LDcgQEAgbmFtZXNwYWNlIGVnbAorIHsKKyBj
bGFzcyBEaXNwbGF5OworIGNsYXNzIEltYWdlOworK2NsYXNzIFN1cmZhY2U7CisgfSAgLy8gbmFt
ZXNwYWNlIGVnbAorIAorICNkZWZpbmUgQU5HTEVfR0xfT0JKRUNUU19YKFBST0MpIFwKK0BAIC0x
MDIsNiArMTEyLDcgQEAgY2xhc3MgVGV4dHVyZU10bDsKKyBjbGFzcyBQcm9ncmFtTXRsOworIGNs
YXNzIFNhbXBsZXJNdGw7CisgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGw7CisrY2xhc3MgU3Vy
ZmFjZU10bFByb3RvY29sOworIAorIEFOR0xFX0dMX09CSkVDVFNfWChBTkdMRV9QUkVfREVDTEFS
RV9NVExfT0JKRUNUKQorIAorQEAgLTEyOCw3ICsxMzksOCBAQCBjb25zdGV4cHIgc2l6ZV90IGtE
ZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxvYXQpOworIC8vIE1ldGFsIGxpbWl0
cworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyQnVmZmVycyAgICAgPSAzMTsKKyBjb25z
dGV4cHIgdWludDMyX3Qga01heFNoYWRlclNhbXBsZXJzICAgID0gMTY7CistY29uc3RleHByIHNp
emVfdCBrRGVmYXVsdFVuaWZvcm1zTWF4U2l6ZSA9IDQgKiAxMDI0OworK2NvbnN0ZXhwciBzaXpl
X3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsKKytjb25zdGV4cHIgc2l6ZV90
IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0RGF0YU1heFNpemU7CisgY29u
c3RleHByIHVpbnQzMl90IGtNYXhWaWV3cG9ydHMgICAgICAgICA9IDE7CisgCisgY29uc3RleHBy
IHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQgPSA0OworQEAgLTE0
Miw3ICsxNTQsNyBAQCBjb25zdGV4cHIgdWludDMyX3Qga0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25t
ZW50ICAgICAgID0gNDsKKyBjb25zdGV4cHIgdWludDMyX3Qga0FyZ3VtZW50QnVmZmVyT2Zmc2V0
QWxpZ25tZW50ICAgID0ga1VuaWZvcm1CdWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50Owor
IGNvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGlnbm1lbnQgPSAy
NTY7CisgCistLy8gRnJvbnQgZW5kIGJpbmRpbmcgbGltaXRzCisrLy8gRm9udCBlbmQgYmluZGlu
ZyBsaW1pdHMKKyBjb25zdGV4cHIgdWludDMyX3Qga01heEdMU2FtcGxlckJpbmRpbmdzID0gMiAq
IGtNYXhTaGFkZXJTYW1wbGVyczsKKyBjb25zdGV4cHIgdWludDMyX3Qga01heEdMVUJPQmluZGlu
Z3MgICAgID0gMiAqIGtNYXhTaGFkZXJVQk9zOworIAorQEAgLTE1NSwyMSArMTY3LDIzIEBAIGNv
bnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggPSBrVmJvQmluZGlu
Z0luZGV4U3RhcnQgKyBrTWF4VmVyCisgY29uc3RleHByIHVpbnQzMl90IGtEcml2ZXJVbmlmb3Jt
c0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCArIDE7CisgLy8gQmlu
ZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKKyBjb25zdGV4cHIgdWludDMyX3Qga0Rl
ZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCAr
IDM7CistLy8gQmluZGluZyBpbmRleCBmb3IgVUJPJ3MgYXJndW1lbnQgYnVmZmVyIG9yIHN0YXJ0
aW5nIGRpc2NyZXRlIHNsb3QKKy1jb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVy
QmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisrLy8gQmlu
ZGluZyBpbmRleCBmb3IgVHJhbnNmb3JtIEZlZWRiYWNrIEJ1ZmZlcnMgKDQpCisrY29uc3RleHBy
IHVpbnQzMl90IGtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0VW5pZm9y
bXNCaW5kaW5nSW5kZXggKyAxOworKy8vIEJpbmRpbmcgaW5kZXggZm9yIHNoYWRvdyBzYW1wbGVy
cycgY29tcGFyZSBtb2RlcworK2NvbnN0ZXhwciB1aW50MzJfdCBrU2hhZG93U2FtcGxlckNvbXBh
cmVNb2Rlc0JpbmRpbmdJbmRleCA9IGtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJbmRleCArIDQ7
CisrLy8gQmluZGluZyBpbmRleCBmb3IgVUJPJ3MgYXJndW1lbnQgYnVmZmVyCisrY29uc3RleHBy
IHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtTaGFkb3dTYW1wbGVy
Q29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKKyAKKy1jb25zdGV4cHIgdWludDMyX3Qga1N0
ZW5jaWxNYXNrQWxsID0gMHhmZjsgIC8vIE9ubHkgOCBiaXRzIHN0ZW5jaWwgaXMgc3VwcG9ydGVk
CisrY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDgg
Yml0IHN0ZW5jaWwgaXMgc3VwcG9ydGVkCisgCisgLy8gVGhpcyBzcGVjaWFsIGNvbnN0YW50IGlz
IHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBhcnRpY3VsYXIgdmVydGV4IGRlc2NyaXB0b3IncyBi
dWZmZXIgbGF5b3V0CisgLy8gaW5kZXggaXMgdW51c2VkLgorIGNvbnN0ZXhwciBNVExWZXJ0ZXhT
dGVwRnVuY3Rpb24ga1ZlcnRleFN0ZXBGdW5jdGlvbkludmFsaWQgPQorICAgICBzdGF0aWNfY2Fz
dDxNVExWZXJ0ZXhTdGVwRnVuY3Rpb24+KDB4ZmYpOworIAorLWNvbnN0ZXhwciBpbnQga0VtdWxh
dGVkQWxwaGFWYWx1ZSA9IDE7CistCistY29uc3RleHByIHNpemVfdCBrT2NjbHVzaW9uUXVlcnlS
ZXN1bHRTaXplID0gc2l6ZW9mKHVpbnQ2NF90KTsKKytjb25zdGV4cHIgZmxvYXQga0VtdWxhdGVk
QWxwaGFWYWx1ZSA9IDEuMGY7CisgCistY29uc3RleHByIGdsOjpWZXJzaW9uIGtNYXhTdXBwb3J0
ZWRHTFZlcnNpb24gPSBnbDo6VmVyc2lvbigzLCAwKTsKKytjb25zdGV4cHIgdWludDMyX3Qga09j
Y2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSA9IHNpemVvZih1aW50NjRfdCk7CisgCisgLy8gV29yay1h
cm91bmQgdGhlIGVudW0gaXMgbm90IGF2YWlsYWJsZSBvbiBtYWNPUworICNpZiBUQVJHRVRfT1Nf
T1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorQEAgLTE3OSwxMyArMTkzLDExIEBAIGNvbnN0
ZXhwciBNVExCbGl0T3B0aW9uIGtCbGl0T3B0aW9uUm93TGluZWFyUFZSVEMgICAgICAgICAgPSBN
VExCbGl0T3B0aW9uUm93TGluCisgI2VuZGlmCisgCisgI2lmIGRlZmluZWQoX19JUEhPTkVfMTNf
MCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNSkKKy0jICAgIGRlZmluZSBBTkdMRV9NVExfU1dJWlpM
RV9BVkFJTEFCTEUgMQorIHVzaW5nIFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgICAgICAgICAgICAg
ICAgICAgPSBNVExUZXh0dXJlU3dpenpsZUNoYW5uZWxzOworIHVzaW5nIFJlbmRlclN0YWdlcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBNVExSZW5kZXJTdGFnZXM7CisgY29uc3RleHBy
IE1UTFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICA9IE1UTFJlbmRlclN0YWdlVmVy
dGV4OworIGNvbnN0ZXhwciBNVExSZW5kZXJTdGFnZXMga1JlbmRlclN0YWdlRnJhZ21lbnQgPSBN
VExSZW5kZXJTdGFnZUZyYWdtZW50OworICNlbHNlCistIyAgICBkZWZpbmUgQU5HTEVfTVRMX1NX
SVpaTEVfQVZBSUxBQkxFIDAKKyB1c2luZyBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gaW50OworIHVzaW5nIFJlbmRlclN0YWdlcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CisgY29uc3RleHByIFJlbmRl
clN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICAgICAgICAgICAgICAgICA9IDE7CitAQCAtMjE5
LDEyICsyMzEsMTYgQEAgc3RydWN0IEltcGxUeXBlSGVscGVyPGVnbDo6RGlzcGxheT4KKyB7Cisg
ICAgIHVzaW5nIEltcGxUeXBlID0gRGlzcGxheU10bDsKKyB9OworLQorK3RlbXBsYXRlIDw+Cisr
c3RydWN0IEltcGxUeXBlSGVscGVyPGVnbDo6U3VyZmFjZT4KKyt7CisrICAgIHVzaW5nIEltcGxU
eXBlID0gU3VyZmFjZU10bFByb3RvY29sOworK307CisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
dXNpbmcgR2V0SW1wbFR5cGUgPSB0eXBlbmFtZSBJbXBsVHlwZUhlbHBlcjxUPjo6SW1wbFR5cGU7
CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29u
c3QgVCAqX05vbm51bGwgZ2xPYmplY3QpCisrR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29uc3Qg
VCAqZ2xPYmplY3QpCisgeworICAgICByZXR1cm4gR2V0SW1wbEFzPEdldEltcGxUeXBlPFQ+Pihn
bE9iamVjdCk7CisgfQorQEAgLTM0NiwyMSArMzYyLDE2IEBAIHVzaW5nIEF1dG9PYmpDT2JqID0g
QXV0b09iakNQdHI8VCAqPjsKKyAKKyAvLyBOT1RFOiBTaGFyZWRFdmVudCBpcyBvbmx5IGRlY2xh
cmVkIG9uIGlPUyAxMi4wKyBvciBtYWMgMTAuMTQrCisgI2lmIGRlZmluZWQoX19JUEhPTkVfMTJf
MCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKKy0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRf
QVZBSUxBQkxFIDEKKyB1c2luZyBTaGFyZWRFdmVudFJlZiA9IEF1dG9PYmpDUHRyPGlkPE1UTFNo
YXJlZEV2ZW50Pj47CisgI2Vsc2UKKy0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxB
QkxFIDAKKyB1c2luZyBTaGFyZWRFdmVudFJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gQXV0b09iakNPYmo8TlNPYmplY3Q+OworICNlbmRpZgorIAorIC8vIFRoZSBu
YXRpdmUgaW1hZ2UgaW5kZXggdXNlZCBieSBNZXRhbCBiYWNrLWVuZCwgIHRoZSBpbWFnZSBpbmRl
eCB1c2VzIG5hdGl2ZSBtaXBtYXAgbGV2ZWwgaW5zdGVhZAorIC8vIG9mICJ2aXJ0dWFsIiBsZXZl
bCBtb2RpZmllZCBieSBPcGVuR0wncyBiYXNlIGxldmVsLgorIHVzaW5nIE1pcG1hcE5hdGl2ZUxl
dmVsID0gZ2w6OkxldmVsSW5kZXhXcmFwcGVyPHVpbnQzMl90PjsKKy0KKyBjb25zdGV4cHIgTWlw
bWFwTmF0aXZlTGV2ZWwga1plcm9OYXRpdmVNaXBMZXZlbCgwKTsKKy0KKyBjbGFzcyBJbWFnZU5h
dGl2ZUluZGV4SXRlcmF0b3I7CistCisgY2xhc3MgSW1hZ2VOYXRpdmVJbmRleCBmaW5hbAorIHsK
KyAgIHB1YmxpYzoKK0BAIC0zNzAsNTUgKzM4MSw0MiBAQCBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4
IGZpbmFsCisgICAgICAgICBtTmF0aXZlSW5kZXggPSBnbDo6SW1hZ2VJbmRleDo6TWFrZUZyb21U
eXBlKHNyYy5nZXRUeXBlKCksIHNyYy5nZXRMZXZlbEluZGV4KCkgLSBiYXNlTGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5nZXRM
YXllckluZGV4KCksIHNyYy5nZXRMYXllckNvdW50KCkpOworICAgICB9CistCisgICAgIHN0YXRp
YyBJbWFnZU5hdGl2ZUluZGV4IEZyb21CYXNlWmVyb0dMSW5kZXgoY29uc3QgZ2w6OkltYWdlSW5k
ZXggJnNyYykKKyAgICAgeworICAgICAgICAgcmV0dXJuIEltYWdlTmF0aXZlSW5kZXgoc3JjLCAw
KTsKKyAgICAgfQorLQorICAgICBNaXBtYXBOYXRpdmVMZXZlbCBnZXROYXRpdmVMZXZlbCgpIGNv
bnN0CisgICAgIHsKKyAgICAgICAgIHJldHVybiBNaXBtYXBOYXRpdmVMZXZlbChtTmF0aXZlSW5k
ZXguZ2V0TGV2ZWxJbmRleCgpKTsKKyAgICAgfQorLQorICAgICBnbDo6VGV4dHVyZVR5cGUgZ2V0
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRUeXBlKCk7IH0KKyAgICAgR0xp
bnQgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRMYXllcklu
ZGV4KCk7IH0KKyAgICAgR0xpbnQgZ2V0TGF5ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleC5nZXRMYXllckNvdW50KCk7IH0KKyAgICAgR0xpbnQgY3ViZU1hcEZhY2VJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7IH0KKy0KKyAg
ICAgYm9vbCBpc0xheWVyZWQoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXguaXNMYXllcmVk
KCk7IH0KKyAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5o
YXNMYXllcigpOyB9CisgICAgIGJvb2wgaGFzM0RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleC5oYXMzRExheWVyKCk7IH0KKyAgICAgYm9vbCB1c2VzVGV4M0QoKSBjb25zdCB7IHJl
dHVybiBtTmF0aXZlSW5kZXgudXNlc1RleDNEKCk7IH0KKy0KKyAgICAgYm9vbCB2YWxpZCgpIGNv
bnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC52YWxpZCgpOyB9CistCisgICAgIEltYWdlTmF0aXZl
SW5kZXhJdGVyYXRvciBnZXRMYXllckl0ZXJhdG9yKEdMaW50IGxheWVyQ291bnQpIGNvbnN0Owor
LQorICAgcHJpdmF0ZToKKyAgICAgZ2w6OkltYWdlSW5kZXggbU5hdGl2ZUluZGV4OworIH07Cist
CisgY2xhc3MgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGZpbmFsCisgeworICAgcHVibGljOgor
ICAgICBJbWFnZU5hdGl2ZUluZGV4IG5leHQoKSB7IHJldHVybiBJbWFnZU5hdGl2ZUluZGV4KG1O
YXRpdmVJbmRleEl0ZS5uZXh0KCksIDApOyB9CisgICAgIEltYWdlTmF0aXZlSW5kZXggY3VycmVu
dCgpIGNvbnN0IHsgcmV0dXJuIEltYWdlTmF0aXZlSW5kZXgobU5hdGl2ZUluZGV4SXRlLmN1cnJl
bnQoKSwgMCk7IH0KKyAgICAgYm9vbCBoYXNOZXh0KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUlu
ZGV4SXRlLmhhc05leHQoKTsgfQorLQorICAgcHJpdmF0ZToKKyAgICAgLy8gVGhpcyBjbGFzcyBp
cyBvbmx5IGNvbnN0cnVjdGFibGUgZnJvbSBJbWFnZU5hdGl2ZUluZGV4CisgICAgIGZyaWVuZCBj
bGFzcyBJbWFnZU5hdGl2ZUluZGV4OworLQorICAgICBleHBsaWNpdCBJbWFnZU5hdGl2ZUluZGV4
SXRlcmF0b3IoY29uc3QgZ2w6OkltYWdlSW5kZXhJdGVyYXRvciAmYmFzZVplcm9TcmMpCisgICAg
ICAgICA6IG1OYXRpdmVJbmRleEl0ZShiYXNlWmVyb1NyYykKKyAgICAge30KKy0KKyAgICAgZ2w6
OkltYWdlSW5kZXhJdGVyYXRvciBtTmF0aXZlSW5kZXhJdGU7CisgfTsKKy0KKyB1c2luZyBDbGVh
ckNvbG9yVmFsdWVCeXRlcyA9IHN0ZDo6YXJyYXk8dWludDhfdCwgNCAqIHNpemVvZihmbG9hdCk+
OworLQorIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQorIHsKKyAgIHB1YmxpYzoKK0BAIC00MzcsMjIg
KzQzNSwxNSBAQCBjbGFzcyBDbGVhckNvbG9yVmFsdWUKKyAgICAgY29uc3RleHByIENsZWFyQ29s
b3JWYWx1ZShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYykKKyAgICAgICAgIDogbVR5cGUoc3Jj
Lm1UeXBlKSwgbVZhbHVlQnl0ZXMoc3JjLm1WYWx1ZUJ5dGVzKQorICAgICB7fQorLQorICAgICBN
VExDbGVhckNvbG9yIHRvTVRMQ2xlYXJDb2xvcigpIGNvbnN0OworLQorICAgICBQaXhlbFR5cGUg
Z2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9CistCisgICAgIGNvbnN0IENsZWFyQ29s
b3JWYWx1ZUJ5dGVzICZnZXRWYWx1ZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlQnl0ZXM7
IH0KKy0KKyAgICAgQ2xlYXJDb2xvclZhbHVlICZvcGVyYXRvcj0oY29uc3QgQ2xlYXJDb2xvclZh
bHVlICZzcmMpOworLQorICAgICB2b2lkIHNldEFzRmxvYXQoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSk7CisgICAgIHZvaWQgc2V0QXNJbnQoaW50MzJfdCByLCBpbnQzMl90IGcs
IGludDMyX3QgYiwgaW50MzJfdCBhKTsKKyAgICAgdm9pZCBzZXRBc1VJbnQodWludDMyX3Qgciwg
dWludDMyX3QgZywgdWludDMyX3QgYiwgdWludDMyX3QgYSk7CistCisgICBwcml2YXRlOgorICAg
ICBQaXhlbFR5cGUgbVR5cGU7CistCisgICAgIHVuaW9uCisgICAgIHsKKyAgICAgICAgIHN0cnVj
dAorQEAgLTQ2Nyw3ICs0NTgsNiBAQCBjbGFzcyBDbGVhckNvbG9yVmFsdWUKKyAgICAgICAgIHsK
KyAgICAgICAgICAgICB1aW50MzJfdCBtUmVkVSwgbUdyZWVuVSwgbUJsdWVVLCBtQWxwaGFVOwor
ICAgICAgICAgfTsKKy0KKyAgICAgICAgIENsZWFyQ29sb3JWYWx1ZUJ5dGVzIG1WYWx1ZUJ5dGVz
OworICAgICB9OworIH07CitAQCAtNDgzLDcgKzQ3Myw3IEBAIGNsYXNzIEVycm9ySGFuZGxlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkgPSAwOworIAorLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqX051bGxhYmxlIGVycm9yLAorKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqZXJyb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbGluZSkgPSAwOworQEAgLTQ5Myw3ICs0ODMsNyBAQCBjbGFzcyBD
b250ZXh0IDogcHVibGljIEVycm9ySGFuZGxlcgorIHsKKyAgIHB1YmxpYzoKKyAgICAgQ29udGV4
dChEaXNwbGF5TXRsICpkaXNwbGF5TXRsKTsKKy0gICAgX051bGxhYmxlIGlkPE1UTERldmljZT4g
Z2V0TWV0YWxEZXZpY2UoKSBjb25zdDsKKysgICAgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmlj
ZSgpIGNvbnN0OworICAgICBtdGw6OkNvbW1hbmRRdWV1ZSAmY21kUXVldWUoKTsKKyAKKyAgICAg
RGlzcGxheU10bCAqZ2V0RGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1EaXNwbGF5OyB9CitkaWZm
IC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaCBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMjBiMmNkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbnN0YW50cy5oCitAQCAtMCwwICsxLDczIEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrLy8gbXRsX2NvbW1vbi5oOgorKy8vICAgICAgRGVjbGFyZXMgbnVt
ZXJpY2FsIGNvbnN0YW50cyB1c2VkIGluIE1ldGFsLgorKy8vICAgICAgZXJyb3IgaGFuZGxlciBi
YXNlIGNsYXNzLgorKy8vCisrCisrI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExf
Q09OU1RBTlRTX0gKKysjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFO
VFNfSAorKyNpbmNsdWRlICJsaWJBTkdMRS9Db25zdGFudHMuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvVmVyc2lvbi5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9hbmdsZXR5cGVzLmgiCisrCisrbmFt
ZXNwYWNlIHJ4CisreworK25hbWVzcGFjZSBtdGwKKyt7CisrCisrLy8gTk9URShocWxlKTogc3Vw
cG9ydCB2YXJpYWJsZSBtYXggbnVtYmVyIG9mIHZlcnRleCBhdHRyaWJ1dGVzCisrY29uc3RleHBy
IHVpbnQzMl90IGtNYXhWZXJ0ZXhBdHRyaWJzID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsKKysv
LyBOT1RFKGhxbGUpOiBzdXBwb3J0IHZhcmlhYmxlIG1heCBudW1iZXIgb2YgcmVuZGVyIHRhcmdl
dHMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFJlbmRlclRhcmdldHMgPSA0OworKworK2NvbnN0
ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyVUJPcyA9IDEyOworK2NvbnN0ZXhwciB1aW50MzJfdCBr
TWF4VUJPU2l6ZSAgICA9IDE2Mzg0OworKworK2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRBdHRy
aWJ1dGVTaXplID0gNCAqIHNpemVvZihmbG9hdCk7CisrCisrLy8gTWV0YWwgbGltaXRzCisrY29u
c3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJCdWZmZXJzICAgICA9IDMxOworK2NvbnN0ZXhwciB1
aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMgICAgPSAxNjsKKytjb25zdGV4cHIgc2l6ZV90IGtJ
bmxpbmVDb25zdERhdGFNYXhTaXplID0gNCAqIDEwMjQ7CisrY29uc3RleHByIHNpemVfdCBrRGVm
YXVsdFVuaWZvcm1zTWF4U2l6ZSA9IGtJbmxpbmVDb25zdERhdGFNYXhTaXplOworK2NvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4Vmlld3BvcnRzICAgICAgICAgPSAxOworKworK2NvbnN0ZXhwciB1aW50
MzJfdCBrVmVydGV4QXR0cmliQnVmZmVyU3RyaWRlQWxpZ25tZW50ID0gNDsKKysvLyBBbGlnbm1l
bnQgcmVxdWlyZW1lbnQgZm9yIG9mZnNldCBwYXNzZWQgdG8gc2V0VmVydGV4fEZyYWdtZW50QnVm
ZmVyCisrI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrY29uc3Rl
eHByIHVpbnQzMl90IGtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDI1
NjsKKysjZWxzZQorK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZz
ZXRNaW5BbGlnbm1lbnQgPSA0OworKyNlbmRpZgorK2NvbnN0ZXhwciB1aW50MzJfdCBrSW5kZXhC
dWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworK2NvbnN0ZXhwciB1aW50MzJfdCBrVGV4
dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGlnbm1lbnQgPSAyNTY7CisrCisrLy8gRm9udCBlbmQgYmlu
ZGluZyBsaW1pdHMKKytjb25zdGV4cHIgdWludDMyX3Qga01heEdMU2FtcGxlckJpbmRpbmdzID0g
MiAqIGtNYXhTaGFkZXJTYW1wbGVyczsKKytjb25zdGV4cHIgdWludDMyX3Qga01heEdMVUJPQmlu
ZGluZ3MgICAgID0gMiAqIGtNYXhTaGFkZXJVQk9zOworKworKy8vIEJpbmRpbmcgaW5kZXggc3Rh
cnQgZm9yIHZlcnRleCBkYXRhIGJ1ZmZlcnM6CisrY29uc3RleHByIHVpbnQzMl90IGtWYm9CaW5k
aW5nSW5kZXhTdGFydCA9IDA7CisrCisrLy8gQmluZGluZyBpbmRleCBmb3IgZGVmYXVsdCBhdHRy
aWJ1dGUgYnVmZmVyOgorK2NvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdEF0dHJpYnNCaW5kaW5n
SW5kZXggPSBrVmJvQmluZGluZ0luZGV4U3RhcnQgKyBrTWF4VmVydGV4QXR0cmliczsKKysvLyBC
aW5kaW5nIGluZGV4IGZvciBkcml2ZXIgdW5pZm9ybXM6CisrY29uc3RleHByIHVpbnQzMl90IGtE
cml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCAr
IDE7CisrLy8gQmluZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKKytjb25zdGV4cHIg
dWludDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCArIDM7CisrLy8gQmluZGluZyBpbmRleCBmb3IgVHJhbnNmb3JtIEZlZWRiYWNr
IEJ1ZmZlcnMgKDQpCisrY29uc3RleHByIHVpbnQzMl90IGtUcmFuc2Zvcm1GZWVkYmFja0JpbmRp
bmdJbmRleCA9IGtEZWZhdWx0VW5pZm9ybXNCaW5kaW5nSW5kZXggKyAxOworKy8vIEJpbmRpbmcg
aW5kZXggZm9yIHNoYWRvdyBzYW1wbGVycycgY29tcGFyZSBtb2RlcworK2NvbnN0ZXhwciB1aW50
MzJfdCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCA9IGtUcmFuc2Zvcm1G
ZWVkYmFja0JpbmRpbmdJbmRleCArIDQ7CisrLy8gQmluZGluZyBpbmRleCBmb3IgVUJPJ3MgYXJn
dW1lbnQgYnVmZmVyCisrY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRp
bmdJbmRleCA9IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKKysK
Kytjb25zdGV4cHIgdWludDMyX3Qga1N0ZW5jaWxNYXNrQWxsID0gMHhmZjsgIC8vIE9ubHkgOCBi
aXRzIHN0ZW5jaWwgaXMgc3VwcG9ydGVkCisrCisrfSAgLy8gbmFtZXNwYWNlIG10bAorK30gIC8v
IG5hbWVzcGFjZSByeAorKyNlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X21hcC5qc29uIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9mb3JtYXRfbWFwLmpzb24KK2luZGV4IDRhMTJhOTAuLjJkYTc0MjEgMTAwNjQ0CistLS0g
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgorKysrIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24KK0BAIC03NCwx
MSArNzQsMTEgQEAKKyAgICAgICAgICAgICAiRDMyX0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0RGVw
dGgzMkZsb2F0IiwKKyAgICAgICAgICAgICAiUzhfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFN0ZW5j
aWw4IiwKKyAgICAgICAgICAgICAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiOiAiTVRMUGl4ZWxGb3Jt
YXREZXB0aDMyRmxvYXRfU3RlbmNpbDgiLAorLSAgICAgICAgICAgICJCMTBHMTBSMTBBMl9VTk9S
TSI6ICJNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybSIsCisgICAgICAgICAgICAgIlIxMEcxMEIx
MEEyX1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCIsCisgICAgICAgICAgICAgIlIx
MEcxMEIxMEEyX1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtIiwKKyAgICAgICAg
ICAgICAiUjExRzExQjEwX0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0IiwKKy0g
ICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVERVhQIjogIk1UTFBpeGVsRm9ybWF0UkdCOUU1Rmxv
YXQiCisrICAgICAgICAgICAgIlI5RzlCOUU1X1NIQVJFREVYUCI6ICJNVExQaXhlbEZvcm1hdFJH
QjlFNUZsb2F0IiwKKysgICAgICAgICAgICAiRDE2X1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0RGVw
dGgxNlVub3JtIgorICAgICAgICAgfSwKKyAgICAgICAgICJtYXBfaW9zIjogeworICAgICAgICAg
ICAgICJSNUc2QjVfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSIsCitAQCAtOTIs
NiArOTIsNyBAQAorICAgICAgICAgICAgICJQVlJUQzFfUkdCXzRCUFBfVU5PUk1fU1JHQl9CTE9D
SyI6ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl80QlBQX3NSR0IiLAorICAgICAgICAgICAgICJQ
VlJUQzFfUkdCQV8yQlBQX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19S
R0JBXzJCUFBfc1JHQiIsCisgICAgICAgICAgICAgIlBWUlRDMV9SR0JBXzRCUFBfVU5PUk1fU1JH
Ql9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUF9zUkdCIiwKKysgICAgICAg
ICAgICAiRVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgi
LAorICAgICAgICAgICAgICJFVEMyX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEVUQzJfUkdCOCIsCisgICAgICAgICAgICAgIkVUQzJfUjhHOEI4X1NSR0JfQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRFVEMyX1JHQjhfc1JHQiIsCisgICAgICAgICAgICAgIkVUQzJfUjhHOEI4QTFf
VU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjhBMSIsCitAQCAtMTAwLDM5ICsx
MDEsMzggQEAKKyAgICAgICAgICAgICAiRVRDMl9SOEc4QjhBOF9TUkdCX0JMT0NLIjogIk1UTFBp
eGVsRm9ybWF0RUFDX1JHQkE4X3NSR0IiLAorICAgICAgICAgICAgICJFQUNfUjExX1VOT1JNX0JM
T0NLIjogIk1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtIiwKKyAgICAgICAgICAgICAiRUFDX1Ix
MV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFTbm9ybSIsCistICAgICAgICAg
ICAgIkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3Jt
IiwKKysgICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEVBQ19SMTFVbm9ybSIsCisgICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtIiwKKy0gICAgICAgICAgICAiQVNUQ180eDRfVU5P
Uk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9MRFIiLAorLSAgICAgICAgICAgICJB
U1RDXzR4NF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ180eDRfc1JHQiIsCistICAg
ICAgICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRf
TERSIiwKKy0gICAgICAgICAgICAiQVNUQ181eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfNXg0X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzV4NV9VTk9STV9CTE9DSyI6ICJN
VExQaXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNXg1X1NSR0Jf
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNU
Q182eDVfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9MRFIiLAorLSAgICAg
ICAgICAgICJBU1RDXzZ4NV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfc1JH
QiIsCistICAgICAgICAgICAgIkFTVENfNng2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfTERSIiwKKy0gICAgICAgICAgICAiQVNUQ182eDZfU1JHQl9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfNng2X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzh4NV9VTk9STV9C
TE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg1X0xEUiIsCistICAgICAgICAgICAgIkFTVENf
OHg1X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKKy0gICAgICAg
ICAgICAiQVNUQ184eDZfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9MRFIi
LAorLSAgICAgICAgICAgICJBU1RDXzh4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q184eDZfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIjogIk1UTFBp
eGVsRm9ybWF0QVNUQ184eDhfTERSIiwKKy0gICAgICAgICAgICAiQVNUQ184eDhfU1JHQl9CTE9D
SyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg4X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzEw
eDVfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSIiwKKy0gICAgICAg
ICAgICAiQVNUQ18xMHg1X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JH
QiIsCistICAgICAgICAgICAgIkFTVENfMTB4Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4Nl9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEweDZfU1JHQl9CTE9DSyI6ICJN
VExQaXhlbEZvcm1hdEFTVENfMTB4Nl9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg4X1VO
T1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiIsCistICAgICAgICAgICAg
IkFTVENfMTB4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NSR0IiLAor
LSAgICAgICAgICAgICJBU1RDXzEweDEwX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q18xMHgxMF9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEweDEwX1NSR0JfQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzEyeDEwX1VO
T1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIiLAorLSAgICAgICAgICAg
ICJBU1RDXzEyeDEwX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0Ii
LAorLSAgICAgICAgICAgICJBU1RDXzEyeDEyX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ18xMngxMl9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEyeDEyX1NSR0JfQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX3NSR0IiCisrICAgICAgICAgICAgIkFTVENfNHg0X1NS
R0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ180eDRfc1JHQiIsCisrICAgICAgICAgICAg
IkFTVENfNXg0X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCisr
ICAgICAgICAgICAgIkFTVENfNXg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181
eDVfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENfNng1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ182eDVfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENfNng2X1NSR0JfQkxPQ0si
IDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENfOHg1
X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDVfc1JHQiIsCisrICAgICAgICAg
ICAgIkFTVENfOHg2X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDZfc1JHQiIs
CisrICAgICAgICAgICAgIkFTVENfOHg4X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNU
Q184eDhfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENfMTB4NV9TUkdCX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTB4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18xMHg2X1NSR0Jf
QkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IiLAorKyAgICAgICAgICAgICJB
U1RDXzEweDhfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCisr
ICAgICAgICAgICAgIkFTVENfMTB4MTBfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
XzEweDEwX3NSR0IiLAorKyAgICAgICAgICAgICJBU1RDXzEyeDEwX1NSR0JfQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ18xMngxMF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18xMngxMl9T
UkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JHQiIsCisrICAgICAgICAg
ICAgIkFTVENfNHg0X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIs
CisrICAgICAgICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfNXg0X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfNXg1X1VOT1JNX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfNng1X1VOT1JNX0JM
T0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCisrICAgICAgICAgICAgIkFTVENf
Nng2X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiIsCisrICAgICAg
ICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg1X0xE
UiIsCisrICAgICAgICAgICAgIkFTVENfOHg2X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1h
dEFTVENfOHg2X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIiA6ICJN
VExQaXhlbEZvcm1hdEFTVENfOHg4X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfMTB4NV9VTk9S
TV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSIiwKKysgICAgICAgICAgICAi
QVNUQ18xMHg2X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIiLAor
KyAgICAgICAgICAgICJBU1RDXzEweDhfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNU
Q18xMHg4X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEyeDEwX1VO
T1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfTERSIiwKKysgICAgICAgICAg
ICAiQVNUQ18xMngxMl9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiIKKyAgICAgICAgIH0sCisgICAgICAgICAibWFwX21hYyI6IHsKKy0gICAgICAgICAgICAiRDE2
X1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtIiwKKyAgICAgICAgICAgICAiRDI0
X1VOT1JNX1M4X1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDI0VW5vcm1fU3RlbmNpbDgiLAor
ICAgICAgICAgICAgICJCQzFfUkdCQV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEJDMV9S
R0JBIiwKKyAgICAgICAgICAgICAiQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSyI6ICJNVExQaXhl
bEZvcm1hdEJDMV9SR0JBX3NSR0IiLAorQEAgLTE3NSw5ICsxNzUsNyBAQAorICAgICAgICAgICAg
ICJEMzJfVU5PUk0iOiAiRDMyX0ZMT0FUIgorICAgICAgICAgfSwKKyAgICAgICAgICJvdmVycmlk
ZV9pb3MiOiB7CistICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9T
OFgyNF9VSU5UIiwKKy0gICAgICAgICAgICAiRDE2X1VOT1JNIjogIkQzMl9GTE9BVCIsCistICAg
ICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIkVUQzJfUjhHOEI4X1VOT1JNX0JM
T0NLIgorKyAgICAgICAgICAgICJEMjRfVU5PUk1fUzhfVUlOVCI6ICJEMzJfRkxPQVRfUzhYMjRf
VUlOVCIKKyAgICAgICAgIH0sCisgICAgICAgICAib3ZlcnJpZGVfbWFjIjogeworICAgICAgICAg
ICAgICJSNUc2QjVfVU5PUk0iOiAiUjhHOEI4QThfVU5PUk0iLAorQEAgLTIwMyw3ICsyMDEsOCBA
QAorICAgICAgICAgICAgICJFQUNfUjExRzExX1VOT1JNX0JMT0NLIjogIlIxNkcxNl9VTk9STSIs
CisgICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1fQkxPQ0siOiAiUjE2RzE2X1NOT1JNIgor
ICAgICAgICAgfSwKKy0gICAgICAgICJkMjRzOF9mYWxsYmFja3NfbWFjIjogeworKyAgICAgICAg
ImZhbGxiYWNrc19tYWMiOiB7CisrICAgICAgICAgICAgIkI4RzhSOEE4X1VOT1JNIjogIlI4RzhC
OEE4X1VOT1JNIiwKKyAgICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FU
X1M4WDI0X1VJTlQiCisgICAgICAgICB9LAorICAgICAgICAgImNhcHMiOiB7CitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5t
bSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4u
bW0KK2luZGV4IGMyMWM1OTMuLjZlMjY5NGUgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tCisrKysgYi9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tCitAQCAtMTcsNyAr
MTcsNyBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9Gb3JtYXQuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCistCisrI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIgorIHVzaW5nIG5hbWVzcGFjZSBhbmds
ZTsKKyAKKyBuYW1lc3BhY2UgcngKK0BAIC0yOCw3ICsyOCw2IEBACisgdm9pZCBGb3JtYXQ6Omlu
aXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9y
bWF0SWRfKQorIHsKKyAgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCAgICA9IGludGVuZGVkRm9y
bWF0SWRfOworLQorICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0
TWV0YWxEZXZpY2UoKTsKKyAKKyAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KK0BAIC00MywxNSAr
NDIsMjYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAg
ICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEy
X1VOT1JNOgorKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorKyAg
ICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOgorIAorLSAgICAgICAg
ICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07Cist
ICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcx
MFIxMEEyX1VOT1JNOworKyAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0aDI0U3RlbmNp
bDhQaXhlbEZvcm1hdFN1cHBvcnRlZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworKyAgICAg
ICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4
QThfVU5PUk07CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0
cjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdFJHQkE4
VW5vcm07CisrICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZv
cm1hdElEOjpSOEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0
aW9uICAgPSBudWxscHRyOworKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICB0aGlzLT5z
d2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbHNlICAvLyBUQVJH
RVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgY2FzZSBhbmdsZTo6
Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOgorIAorICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9y
bWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworQEAgLTYxLDYgKzcxLDcgQEAKKyAg
ICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOwor
IAorKyNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAg
ICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STV9TUkdCOgorIAorICAg
ICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3Jt
X3NSR0I7CitAQCAtNzAsNiArODEsMzYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9
IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRB
UkdFVF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9V
Tk9STToKKysKKysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9y
bWF0RGVwdGgxNlVub3JtOworKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5n
bGU6OkZvcm1hdElEOjpEMTZfVU5PUk07CisrICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9u
ICAgPSBudWxscHRyOworKworKyAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrCisrI2Vsc2UgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUCisrICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JN
OgorKworKyAgICAgICAgICAgIGlmIChTdXBwb3J0c0lPU0dQVUZhbWlseShtZXRhbERldmljZSwg
MykpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOworKyAgICAgICAgICAgICAgICB0aGlzLT5h
Y3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOworKyAgICAgICAgICAg
ICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQ7CisrICAgICAgICAgICAg
ICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7Cisr
ICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAgICAg
ICAgICB9CisrCisrICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKysgICAgICAg
ICAgICBicmVhazsKKysKKysjZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01B
Q0NBVEFMWVNUCisgICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOgorIAor
ICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMy
RmxvYXQ7CitAQCAtODE1LDE1ICs4NTYsNiBAQAorICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICBjYXNlIGFuZ2xlOjpG
b3JtYXRJRDo6RDE2X1VOT1JNOgorLQorLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CistICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKy0gICAgICAgICAgICB0aGlz
LT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CistCistICAgICAgICAgICAgdGhpcy0+c3dpenps
ZWQgPSBmYWxzZTsKKy0gICAgICAgICAgICBicmVhazsKKy0KKyAgICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoKKyAKKyAgICAgICAgICAgICBpZiAobWV0YWxE
ZXZpY2UuZGVwdGgyNFN0ZW5jaWw4UGl4ZWxGb3JtYXRTdXBwb3J0ZWQgJiYKK0BAIC0xMjgxLDcg
KzEzMTMsNyBAQAorIAorICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVBQ19SMTFHMTFf
VU5PUk1fQkxPQ0s6CisgCistICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQ
aXhlbEZvcm1hdEVBQ19SRzExVW5vcm07CisrICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybTsKKyAgICAgICAgICAgICB0aGlzLT5hY3R1
YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RUFDX1IxMUcxMV9VTk9STV9CTE9DSzsKKyAg
ICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgCitAQCAtMTMwNiw2
ICsxMzM4LDE1IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICBicmVhazsKKyAKKysgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4
RzhCOF9VTk9STV9CTE9DSzoKKysKKysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9
IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4OworKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1h
dElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzsKKysgICAgICAg
ICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisrCisrICAgICAgICAgICAgdGhp
cy0+c3dpenpsZWQgPSBmYWxzZTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAgICAgICAgIGNh
c2UgYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0s6CisgCisgICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVUQzJfUkdCOEExX3NS
R0I7CitAQCAtMTQ1OSwxNSArMTUwMCw2IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgYW5nbGU6OkZv
cm1hdElEOjpEMTZfVU5PUk06CistCistICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAg
PSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKy0gICAgICAgICAgICB0aGlzLT5hY3R1YWxG
b3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworLSAgICAgICAgICAgIHRoaXMt
PmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICAgICAgICAgY2FzZSBhbmdsZTo6
Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOgorIAorICAgICAgICAgICAgIHRoaXMtPm1ldGFs
Rm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXRfU3RlbmNpbDg7CitAQCAtMTQ3
NywxNSArMTUwOSw2IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMx
X1I4RzhCOF9VTk9STV9CTE9DSzoKKy0KKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4OworLSAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZv
cm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOF9VTk9STV9CTE9DSzsKKy0gICAg
ICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CistCistICAgICAgICAgICAg
dGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKy0gICAgICAgICAgICBicmVhazsKKy0KKyAjZW5kaWYg
IC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRJ
bnZhbGlkOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9y
bWF0X3V0aWxzLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGls
cy5oCitpbmRleCBiYmIyN2Q0Li5mMzk2ODFkIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaAorQEAgLTU1LDYgKzU1LDExIEBAIHN0cnVjdCBG
b3JtYXRDYXBzCisgICAgIGJvb2wgYmxlbmRhYmxlICAgICAgICAgICAgPSBmYWxzZTsKKyAgICAg
Ym9vbCBtdWx0aXNhbXBsZSAgICAgICAgICA9IGZhbHNlOyAgLy8gY2FuIGJlIHVzZWQgYXMgTVNB
QSB0YXJnZXQKKyAgICAgYm9vbCByZXNvbHZlICAgICAgICAgICAgICA9IGZhbHNlOyAgLy8gQ2Fu
IGJlIHVzZWQgYXMgcmVzb2x2ZSB0YXJnZXQKKysgICAgYm9vbCBjb21wcmVzc2VkICAgICAgICAg
ICA9IGZhbHNlOworKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXMgICAgID0gMDsKKysgICAgTlNV
SW50ZWdlciBwaXhlbEJ5dGVzTVNBQSA9IDA7CisrICAgIE5TVUludGVnZXIgY2hhbm5lbHMgICAg
ICAgPSAwOworKyAgICB1aW50OF90IGFsaWdubWVudCAgICAgICAgID0gMDsKKyB9OworIAorIC8v
IFBpeGVsIGZvcm1hdAorQEAgLTE0Myw2ICsxNDgsNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5h
bCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgcHJpdmF0ZToKKyAgICAgdm9pZCBpbml0TmF0aXZl
Rm9ybWF0Q2Fwc0F1dG9nZW4oY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisgICAgIHZvaWQg
aW5pdE5hdGl2ZUZvcm1hdENhcHMoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisrCisgICAg
IHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgd3JpdGFibGUsCitAQCAtMTUwLDYgKzE1NiwxNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5h
bCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0
aXNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlKTsKKysKKysgICAgdm9pZCBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmaWx0ZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxlbmRhYmxlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVzb2x2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBieXRlc1BlckNoYW5uZWwsCisr
ICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxzKTsKKysKKyAgICAgdm9p
ZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3
cml0YWJsZSwKK0BAIC0xNTksOCArMTc2LDI0IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZpbmFsIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVu
ZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJhYmxlKTsK
KyAKKysgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCB3cml0YWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxlbmRh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY29sb3JSZW5kZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJl
bmRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGJ5dGVzUGVyQ2hh
bm5lbCwKKysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworKwor
ICAgICB2b2lkIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElk
LCBib29sIGZpbHRlcmFibGUpOworIAorKyAgICB2b2lkIGFkanVzdEZvcm1hdENhcHNGb3JEZXZp
Y2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNVExQaXhlbEZvcm1hdCBpZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzdXBwb3J0c2lPUzQpOworKworICAgICBzdGQ6OmFycmF5PEZvcm1hdCwgYW5nbGU6
OmtOdW1BTkdMRUZvcm1hdHM+IG1QaXhlbEZvcm1hdFRhYmxlOworICAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8TVRMUGl4ZWxGb3JtYXQsIEZvcm1hdENhcHM+IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNU
YWJsZTsKKyAgICAgLy8gT25lIGZvciB0aWdodGx5IHBhY2tlZCBidWZmZXJzLCBvbmUgZm9yIGdl
bmVyYWwgY2FzZXMuCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdXRpbHMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF91dGlscy5tbQoraW5kZXggZmIxZDVjYS4uNDE2YWQ1YyAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLm1tCisrKysgYi9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQorQEAgLTc3LDggKzc3LDggQEAg
dm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJs
ZSwKKyAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5yZW5kZXJidWZmZXIgPQorICAgICAgICAgICAg
ICAgICBtdGxGb3JtYXQuZ2V0Q2FwcygpLmNvbG9yUmVuZGVyYWJsZSB8fCBtdGxGb3JtYXQuZ2V0
Q2FwcygpLmRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy50ZXh0dXJh
YmxlICAgICAgICA9IHRydWU7CistICAgICAgICAgICAgdGV4dHVyZUNhcHMuYmxlbmRhYmxlICAg
ICAgICAgPSBtdGxGb3JtYXQuZ2V0Q2FwcygpLmJsZW5kYWJsZTsKKyAgICAgICAgICAgICB0ZXh0
dXJlQ2Fwcy50ZXh0dXJlQXR0YWNobWVudCA9IHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlcjsKKysg
ICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5ibGVuZGFibGUgICAgICAgICA9IG10bEZvcm1hdC5nZXRD
YXBzKCkuYmxlbmRhYmxlOworICAgICAgICAgfQorIAorICAgICAgICAgaWYgKGZvcm1hdENhcHMu
bXVsdGlzYW1wbGUpCitAQCAtMTQ4LDEyICsxNDgsNiBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNh
cHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxlLAorICAgICAgICAgLy8gV2ViR0wg
YWxsb3dzIHVuc3dpenpsZWQgbWFwcGluZyB3aGVuIHN3aXp6bGluZyBpcyBub3QgYXZhaWxhYmxl
LiBObyBuZWVkIHRvIGNvbnZlcnQuCisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKy0g
ICAgaWYgKHNyY0Zvcm1hdElkID09IGFuZ2xlOjpGb3JtYXRJRDo6RVRDMV9SOEc4QjhfVU5PUk1f
QkxPQ0sgJiYKKy0gICAgICAgIGFjdHVhbEZvcm1hdElkID09IGFuZ2xlOjpGb3JtYXRJRDo6RVRD
Ml9SOEc4QjhfVU5PUk1fQkxPQ0spCistICAgIHsKKy0gICAgICAgIC8vIEVUQzEgUkdCICYgRVRD
MiBSR0IgYXJlIHRlY2huaWNhbGx5IHRoZSBzYW1lLgorLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
LSAgICB9CisgICAgIHJldHVybiBzcmNGb3JtYXRJZCAhPSBhY3R1YWxGb3JtYXRJZDsKKyB9Cisg
CitAQCAtMTkyLDggKzE4Niw3IEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBG
b3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisgICAgICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5p
bml0KGRpc3BsYXksIGZvcm1hdElkKTsKKyAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLmNh
cHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW21QaXhlbEZvcm1hdFRhYmxlW2ldLm1l
dGFsRm9ybWF0XTsKKyAKKy0gICAgICAgIGlmICghbVBpeGVsRm9ybWF0VGFibGVbaV0uY2Fwcy0+
ZGVwdGhSZW5kZXJhYmxlICYmCistICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0uYWN0
dWFsRm9ybWF0SWQgIT0gbVBpeGVsRm9ybWF0VGFibGVbaV0uaW50ZW5kZWRGb3JtYXRJZCkKKysg
ICAgICAgIGlmIChtUGl4ZWxGb3JtYXRUYWJsZVtpXS5hY3R1YWxGb3JtYXRJZCAhPSBtUGl4ZWxG
b3JtYXRUYWJsZVtpXS5pbnRlbmRlZEZvcm1hdElkKQorICAgICAgICAgeworICAgICAgICAgICAg
IG1QaXhlbEZvcm1hdFRhYmxlW2ldLnRleHR1cmVMb2FkRnVuY3Rpb25zID0gYW5nbGU6OkdldExv
YWRGdW5jdGlvbnNNYXAoCisgICAgICAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLmlu
dGVuZGVkQW5nbGVGb3JtYXQoKS5nbEludGVybmFsRm9ybWF0LAorQEAgLTIwNCw2ICsxOTcsMTkg
QEAgdm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRU
YWJsZSwKKyAgICAgICAgIG1WZXJ0ZXhGb3JtYXRUYWJsZXNbMV1baV0uaW5pdChmb3JtYXRJZCwg
dHJ1ZSk7CisgICAgIH0KKyAKKysgICAgLy8gTk9URShocWxlKTogV29yay1hcm91bmQgQU1EJ3Mg
aXNzdWUgdGhhdCBEMjRTOCBmb3JtYXQgc29tZXRpbWVzIHJldHVybnMgemVybyBkdXJpbmcgc2Ft
cGxpbmc6CisrICAgIGlmIChkaXNwbGF5LT5nZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkuZmluZCgi
QU1EIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisrICAgIHsKKysgICAgICAgIC8vIEZhbGxiYWNr
IHRvIEQzMl9GTE9BVF9TOFgyNF9VSU5ULgorKyAgICAgICAgRm9ybWF0ICZmb3JtYXQgPQorKyAg
ICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW3N0YXRpY19jYXN0PHVpbnQzMl90PihhbmdsZTo6
Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UKV07CisrICAgICAgICBmb3JtYXQuYWN0dWFsRm9y
bWF0SWQgICAgICAgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVF9TOFgyNF9VSU5UOworKyAg
ICAgICAgZm9ybWF0Lm1ldGFsRm9ybWF0ICAgICAgICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMy
RmxvYXRfU3RlbmNpbDg7CisrICAgICAgICBmb3JtYXQuaW5pdEZ1bmN0aW9uICAgICAgICAgPSBu
dWxscHRyOworKyAgICAgICAgZm9ybWF0LnRleHR1cmVMb2FkRnVuY3Rpb25zID0gbnVsbHB0cjsK
KysgICAgICAgIGZvcm1hdC5jYXBzID0gJm1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtNVExQ
aXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOF07CisrICAgIH0KKysKKyAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKK0BAIC0yMzksMTAgKzI0NSwyMyBAQCB2
b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUp
CisgeworICAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCB3cml0YWJsZSwg
YmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJhYmxlLAorLSAgICAg
ICAgICAgICAgICAgIGZhbHNlKTsKKysgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7CisrfQor
K3ZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjb2xvclJlbmRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIHBpeGVsQnl0ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIGNoYW5uZWxzKQorK3sKKysgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmls
dGVyYWJsZSwgd3JpdGFibGUsIGJsZW5kYWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9y
UmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICBmYWxzZSwgcGl4ZWxCeXRlcywgY2hhbm5l
bHMpOworIH0KKyAKKy12b2lkIEZvcm1hdFRhYmxlOjpzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0IGlkLAorK3ZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQg
Zm9ybWF0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCitAQCAtMjUwLDYg
KzI2OSwyMCBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUg
JmZvcm1hdFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNv
bHZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRoUmVuZGVyYWJs
ZSkKKyt7CisrICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxl
LCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCisrICAg
ICAgICAgICAgICAgICAgZGVwdGhSZW5kZXJhYmxlLCAwLCAwKTsKKyt9Cisrdm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGJsZW5kYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bXVsdGlzYW1wbGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc29s
dmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJhYmxl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscykK
KyB7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uZmlsdGVyYWJsZSAgICAg
ID0gZmlsdGVyYWJsZTsKKyAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS53cml0
YWJsZSAgICAgICAgPSB3cml0YWJsZTsKK0BAIC0yNTgsNiArMjkxLDExIEBAIHZvaWQgR2VuZXJh
dGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisgICAgIG1O
YXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYmxlbmRhYmxlICAgICAgID0gYmxlbmRhYmxl
OworICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLm11bHRpc2FtcGxlICAgICA9
IG11bHRpc2FtcGxlOworICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnJlc29s
dmUgICAgICAgICA9IHJlc29sdmU7CisrICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtp
ZF0ucGl4ZWxCeXRlcyAgICAgID0gcGl4ZWxCeXRlczsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0
Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNBQSAgPSBwaXhlbEJ5dGVzOworKyAgICBtTmF0aXZl
UGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5uZWxzICAgICAgICA9IGNoYW5uZWxzOworKyAg
ICBpZiAoY2hhbm5lbHMgIT0gMCkKKysgICAgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJs
ZVtpZF0uYWxpZ25tZW50ID0gTUFYKHBpeGVsQnl0ZXMgLyBjaGFubmVscywgMVUpOworIH0KKyAK
KyB2b2lkIEZvcm1hdFRhYmxlOjpzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBmb3JtYXRJZCwgYm9vbCBmaWx0ZXJhYmxlKQorQEAgLTI2NSw5ICszMDMsMjc0IEBAIHZvaWQg
R2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisg
ICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworIH0KKyAKKyt2b2lkIEZvcm1hdFRhYmxlOjphZGp1
c3RGb3JtYXRDYXBzRm9yRGV2aWNlKGlkPE1UTERldmljZT4gZGV2aWNlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9T
MiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3Vw
cG9ydHNpT1M0KQorK3sKKysjaWYgIShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVCkKKysKKysgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IG1OYXRpdmVQ
aXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlczsKKysgICAgTlNVSW50ZWdlciBwaXhl
bEJ5dGVzUmVuZGVyTVNBQSA9IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxC
eXRlc01TQUE7CisrICAgIE5TVUludGVnZXIgYWxpZ25tZW50ICAgICAgICAgICAgPSBtTmF0aXZl
UGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmFsaWdubWVudDsKKysKKysvLyBPdmVycmlkZSB0aGUg
Y3VycmVudCBwaXhlbEJ5dGVzUmVuZGVyCisrIyAgICBkZWZpbmUgU1BFQ0lGSUMoX3BpeGVsRm9y
bWF0LCBfcGl4ZWxCeXRlc1JlbmRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgIGNhc2UgX3BpeGVsRm9ybWF0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
KyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg
cGl4ZWxCeXRlc1JlbmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBhbGlnbm1lbnQgPSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBfcGl4ZWxC
eXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgOiA0
OyBcCisrICAgICAgICAgICAgYnJlYWsKKysvLyBPdmVycmlkZSB0aGUgY3VycmVudCBwaXhlbCBi
eXRlcyByZW5kZXIsIGFuZCBNU0FBCisrIyAgICBkZWZpbmUgU1BFQ0lGSUNfTVNBQShfcGl4ZWxG
b3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyLCBfcGl4ZWxCeXRlc1JlbmRlck1TQUEpICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgIGNhc2UgX3BpeGVsRm9ybWF0OiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg
ICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcGl4
ZWxCeXRlc1JlbmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlck1TQUE7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBhbGlnbm1lbnQgPSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBfcGl4ZWxCeXRl
c1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgOiA0OyBc
CisrICAgICAgICAgICAgYnJlYWsKKysvLyBPdmVycmlkZSB0aGUgY3VycmVudCBwaXhlbEJ5dGVz
UmVuZGVyLCBhbmQgYWxpZ25tZW50CisrIyAgICBkZWZpbmUgU1BFQ0lGSUNfQUxJR04oX3BpeGVs
Rm9ybWF0LCBfcGl4ZWxCeXRlc1JlbmRlciwgX2FsaWdubWVudCkgXAorKyAgICAgICAgY2FzZSBf
cGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IF9waXhlbEJ5dGVzUmVuZGVy
OyAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlck1TQUEg
PSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFs
aWdubWVudCAgICAgICAgICAgID0gX2FsaWdubWVudDsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICBicmVhaworKworKyAgICBpZiAoIW1OYXRpdmVQaXhlbEZvcm1hdENh
cHNUYWJsZVtpZF0uY29tcHJlc3NlZCkKKysgICAgeworKyAgICAgICAgLy8gT24gQXBwbGVHUFVG
YW1pbHk0KywgdGhlcmUgaXMgbm8gNGJ5dGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgcmVuZGVy
IHRhcmdldHMKKysgICAgICAgIHVpbnQzMl90IG1pblNpemUgICAgID0gc3VwcG9ydHNpT1M0ID8g
MVUgOiA0VTsKKysgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gTUFYKG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlcywgbWluU2l6ZSk7CisrICAgICAgICBwaXhl
bEJ5dGVzUmVuZGVyTVNBQSA9IHBpeGVsQnl0ZXNSZW5kZXI7CisrICAgICAgICBhbGlnbm1lbnQg
PQorKyAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IE1BWChwaXhlbEJ5dGVzUmVuZGVyIC8gbU5h
dGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscywgMVUpIDogNDsKKysgICAgfQor
KworKyAgICAvLyBUaGlzIGxpc3Qgb2YgdGFibGVzIHN0YXJ0cyBmcm9tIGEgZ2VuZXJhbCBtdWx0
aS1wbGF0Zm9ybSB0YWJsZSwKKysgICAgLy8gdG8gc3BlY2lmaWMgcGxhdGZvcm1zIChpLmUuIGlv
czIsIGlvczQpIGluaGVyaXRpbmcgZnJvbSB0aGUgcHJldmlvdXMgdGFibGVzCisrCisrICAgIC8v
IFN0YXJ0IG9mZiB3aXRoIHRoZSBnZW5lcmFsIGNhc2UKKysgICAgc3dpdGNoICgoTlNVSW50ZWdl
cilpZCkKKysgICAgeworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9y
bSwgNFUpOworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgNFUp
OworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBQkdSNFVub3JtLCA0VSk7CisrICAg
ICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCA0VSk7CisrCisrICAgICAg
ICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm0sIDRVKTsKKysgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgNFUpOworKworKyAgICAgICAgU1BFQ0lGSUNf
TVNBQShNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKysgICAgICAgIFNQ
RUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0IsIDRVLCA4VSk7CisrICAg
ICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUsIDhVKTsKKysg
ICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgNFUsIDhVKTsK
KysKKysgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCA4VSk7Cisr
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybSwgOFUpOworKworKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsIDhVKTsKKysKKysgICAg
ICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsIDhVKTsKKysKKysgICAgICAg
IFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0U3RlbmNpbDgsIDFVKTsKKysgICAgfQorKworKyAgICAv
LyBPdmVycmlkZSBiYXNlZCBpb3MyCisrICAgIGlmIChzdXBwb3J0c2lPUzIpCisrICAgIHsKKysg
ICAgICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sIDhVKTsKKysgICAgICAgICAgICBTUEVD
SUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDhVKTsKKysgICAgICAgICAgICBTUEVDSUZJ
QyhNVExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCA4VSk7CisrICAgICAgICAgICAgU1BFQ0lGSUNf
TVNBQShNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm0sIDRVLCA4VSk7CisrICAgICAgICAgICAgU1BF
Q0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sIDRVLCA4VSk7CisrICAgICAgICB9
CisrICAgIH0KKysKKysgICAgLy8gT3ZlcnJpZGUgYmFzZWQgb24gaW9zNAorKyAgICBpZiAoc3Vw
cG9ydHNpT1M0KQorKyAgICB7CisrICAgICAgICBzd2l0Y2ggKChOU1VJbnRlZ2VyKWlkKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0QjVHNlI1
VW5vcm0sIDZVLCAyVSk7CisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0JB
OFVub3JtLCA0VSk7CisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVu
b3JtLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVu
b3JtX3NSR0IsIDRVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm1fc1JHQiwgNFUpOworKworKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0
UkdCQThTbm9ybSwgNFUpOworKworKyAgICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVs
Rm9ybWF0UkdCMTBBMlVub3JtLCA0VSwgNFUpOworKyAgICAgICAgICAgIFNQRUNJRklDX0FMSUdO
KE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA0VSwgNFUpOworKyAgICAgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVpbnQsIDhVKTsKKysKKysgICAgICAgICAgICBTUEVD
SUZJQ19BTElHTihNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgNFUsIDRVKTsKKysKKysgICAg
ICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1hdFJHQjlFNUZsb2F0LCA0VSwgNFUp
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtp
ZF0ucGl4ZWxCeXRlcyAgICAgPSBwaXhlbEJ5dGVzUmVuZGVyOworKyAgICBtTmF0aXZlUGl4ZWxG
b3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBID0gcGl4ZWxCeXRlc1JlbmRlck1TQUE7
CisrICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50ICAgICAgPSBh
bGlnbm1lbnQ7CisrCisrIyAgICB1bmRlZiBTUEVDSUZJQworKyMgICAgdW5kZWYgU1BFQ0lGSUNf
QUxJR04KKysjICAgIHVuZGVmIFNQRUNJRklDX01TQUEKKysjZW5kaWYKKysgICAgLy8gbWFjT1Mg
ZG9lcyBub3QgbmVlZCB0byBwZXJmb3JtIGFueSBhZGRpdG9pbmFsIGFkanVzdG1lbnQuIFRoZXNl
IHZhbHVlcyBhcmUgb25seSB1c2VkIHRvIGNoZWNrCisrICAgIC8vIHZhbGlkIE1SVCBzaXplcyBv
biBpT1MuCisrfQorKworIHZvaWQgRm9ybWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKGNv
bnN0IERpc3BsYXlNdGwgKmRpc3BsYXkpCisgeworLSAgICBpbml0TmF0aXZlRm9ybWF0Q2Fwc0F1
dG9nZW4oZGlzcGxheSk7CisrICAgIGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmZmVhdHVyZXNN
dGwgPSBkaXNwbGF5LT5nZXRGZWF0dXJlcygpOworKyAgICAvLyBTa2lwIGF1dG8gcmVzb2x2ZSBp
ZiBlaXRoZXIgaGFzRGVwdGgvU3RlbmNpbEF1dG9SZXNvbHZlIG9yIGFsbG93TXVsdGlzYW1wbGVT
dG9yZUFuZFJlc29sdmUKKysgICAgLy8gZmVhdHVyZSBhcmUgZGlzYWJsZWQuCisrICAgIGJvb2wg
c3VwcG9ydERlcHRoQXV0b1Jlc29sdmUgPSBmZWF0dXJlc010bC5oYXNEZXB0aEF1dG9SZXNvbHZl
LmVuYWJsZWQgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVz
TXRsLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZDsKKysgICAgYm9vbCBz
dXBwb3J0U3RlbmNpbEF1dG9SZXNvbHZlID0gZmVhdHVyZXNNdGwuaGFzU3RlbmNpbEF1dG9SZXNv
bHZlLmVuYWJsZWQgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVh
dHVyZXNNdGwuYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZS5lbmFibGVkOworKyAgICBi
b29sIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVzb2x2ZSA9IHN1cHBvcnREZXB0aEF1dG9SZXNv
bHZlICYmIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmU7CisrCisrICAgIC8vIFNvdXJjZTogaHR0
cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21ldGFsL01ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5w
ZGYKKysgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorKworKyAgICAvLyAgICAgICAgICAgIHwgIGZv
cm1hdElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBi
bGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwgYnl0ZXNQZXJDaGFubmVsIHwgY2hhbm5lbAorKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QThVbm9ybSwgICAgICAgIHRydWUsICAgICAg
ICAgICAgZmFsc2UsICAgICAgIGZhbHNlLCAgICAgICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMVUsIDFVKTsKKysgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFI4VW5vcm0sICAgICAgICB0cnVlLCAgICAgICAgICAgIHRy
dWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSOFNub3JtLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAg
ICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVG
YW1pbHkoMiwgMSksICB0cnVlLCAgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFIxNlVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVl
LCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgx
LCAxKSwgICAgICAgIHRydWUsICAyVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UjE2U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUs
ICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEs
IDEpLCAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRSRzhVbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRydWUsICAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4
U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAg
ICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1
ZSwgIDJVLCAyVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2VW5vcm0s
ICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVl
LCAgNFUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZTbm9ybSwg
ICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUs
ICA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2VW5vcm0s
ICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1ZSwg
IDhVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZTbm9ybSwg
ICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAg
ICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAg
OFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNkZsb2F0LCAg
ICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIDhVLCA0VSk7
CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgICAg
fCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJs
ZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQThVbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCAgICAgdHJ1ZSwgICAg
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMiksICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsICAgNFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4
U25vcm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgyLCAxKSwgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCAgICAgICAgICB0cnVlLCAgICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAg
IDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NS
R0IsICAgICB0cnVlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworKworKyAgICAvLyAgICAgICAgICAg
IHwgIGZvcm1hdElkICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAg
IHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAgcmVzb2x2ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKysgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNkZsb2F0LCAgICAgICB0cnVlLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAyVSwgMVUpOworKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNkZsb2F0LCAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgIDRVLCAy
VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMzJGbG9hdCwgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIHRydWUsICAgICAgICB0cnVlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAg
ICAgICAgdHJ1ZSwgICAgNFUsIDFVKTsKKysKKysjaWYgVEFSR0VUX09TX0lPUyAmJiAhVEFSR0VU
X09TX01BQ0NBVEFMWVNUCisrICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAg
ICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0
aXNhbXBsZSB8ICByZXNvbHZlICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxz
ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAg
MlUsIDNVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sICAg
ICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIGZhbHNlLCAgICAg
ICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRydWUsICAyVSwgNFUp
OworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sICAgICAgdHJ1
ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAg
dHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKysjZW5kaWYKKysKKysgICAgLy8gICAgICAgICAg
ICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJs
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNh
bXBsZSB8ICByZXNvbHZlICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCAgICAgdHJ1ZSwgICAgICAgICBkaXNwbGF5LT5z
dXBwb3J0c0VpdGhlckdQVUZhbWlseSgzLCAxKSwgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgICB0cnVlLCAgICAgIHRydWUsICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCAgICAgdHJ1ZSwgICAgICAgICBkaXNwbGF5LT5zdXBw
b3J0c0VpdGhlckdQVUZhbWlseSgzLCAxKSwgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgIHRydWUsICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UkdCMTBBMlVpbnQsICAgICAgZmFsc2UsICAgICAgICBkaXNwbGF5LT5zdXBwb3J0
c0VpdGhlckdQVUZhbWlseSgzLCAxKSwgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAg
ICBmYWxzZSwgICAgIHRydWUsICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkcxMUIxMEZsb2F0LCAgICAgdHJ1ZSwgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgzLCAxKSwgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0
cnVlLCAgICAgIHRydWUsICA0VSwgM1UpOworKworKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1h
dElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRp
c2FtcGxlICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAg
ICB8IGNvbG9yUmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgfAorKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsICAgICAgIHRydWUsICAgICAgICAgIGRpc3BsYXkt
PnN1cHBvcnRzSU9TR1BVRmFtaWx5KDMpLCAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHko
MSksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJ
T1NHUFVGYW1pbHkoMSksIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCA0VSwgM1Up
OworKworKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgfCBmaWx0
ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgIHwgIG11bHRpc2FtcGxlICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgcmVzb2x2ZSAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKysg
ICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFI4VWludCwgICAgICAgIGZhbHNlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFI4U2ludCwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsICAgICAgICAgdHJ1ZSwgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFIxNlVpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNl
LCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAg
ICAgdHJ1ZSwgMlUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlNp
bnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUs
IDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHOFVpbnQsICAgICAgIGZh
bHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDJVKTsKKysgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHOFNpbnQsICAgICAgIGZhbHNlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFIzMlVpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEp
LCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFIzMlNpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZh
bHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZmFs
c2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHMTZVaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAg
ICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAg
dHJ1ZSwgNFUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZTaW50
LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDJV
KTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4VWludCwgICAgIGZhbHNl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKysgICAgc2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4U2ludCwgICAgIGZhbHNlLCAgICAgICAgICAg
dHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdFJHMzJVaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAg
ZmFsc2UsICAgICAgICAgdHJ1ZSwgOFUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHMzJTaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNl
LCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZmFsc2Us
ICAgICAgICAgdHJ1ZSwgOFUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dFJHQkExNlVpbnQsICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1
ZSwgOFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNpbnQs
ICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgOFUsIDRVKTsK
KysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMlVpbnQsICAgIGZhbHNlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMTZVLCA0VSk7CisrICAg
IHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJTaW50LCAgICBmYWxzZSwgICAgICAg
ICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDE2VSwgNFUpOworKworKyAgICAv
LyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAg
ICAgICAgICAgICAgICAgICAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlICAgICAgICAgICAg
ICAgICAgICAgfCAgbXVsdGlzYW1wbGUgICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKysgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJGbG9hdCwgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAgICAgdHJ1ZSwgIDhVLCAyVSk7Cisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJGbG9hdCwgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgdHJ1ZSwgICAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFt
aWx5KDEsMSksICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgICAgICAg
IHRydWUsICAxNlUsIDRVKTsKKysKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAg
fCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGRlcHRoUmVuZGVy
YWJsZSAgICAgICAgICAgICAgICAgICAgfAorKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0RGVwdGgzMkZsb2F0LCAgICAgICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BV
RmFtaWx5KDEsMSksICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1
cHBvcnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAg
ICAgdHJ1ZSwgIDRVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRTdGVu
Y2lsOCwgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgZmFsc2UsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICB0cnVlLCAgMVUs
IDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVu
Y2lsOCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgIGZhbHNl
LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0RGVwdGhTdGVuY2lsQXV0
b1Jlc29sdmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICA4VSwgMlUpOwor
Ky8vVG9EbzogQGF2YWlsYWJsZSBvbiAxMy4wCisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXREZXB0aDE2VW5vcm0sICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgc3VwcG9y
dERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICB0
cnVlLCAgMlUsIDFVKTsKKysjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZ
U1QKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERlcHRoMjRVbm9ybV9TdGVuY2ls
OCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgIGZhbHNlLCAg
ICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0RGVwdGhTdGVuY2lsQXV0b1Jl
c29sdmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0
aGVyR1BVRmFtaWx5KDEsMSksIDRVLCAyVSk7CisrCisrICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkEsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDMV9SR0JBX3NSR0IsIHRydWUpOworKyAgICBzZXRDb21w
cmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDMl9SR0JBLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQV9zUkdCLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdCQSwgdHJ1
ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMzX1JHQkFf
c1JHQiwgdHJ1ZSk7CisrI2Vsc2UKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRQVlJUQ19SR0JfMkJQUCwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzJCUFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFAsIHRydWUpOwor
KyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl80QlBQ
X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dFBWUlRDX1JHQkFfMkJQUCwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UFZSVENfUkdCQV8yQlBQX3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUCwgdHJ1ZSk7CisrICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQX3NS
R0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVB
Q19SMTFVbm9ybSwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0RUFDX1IxMVNub3JtLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtLCB0cnVlKTsKKysgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQTgsIHRydWUpOworKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOF9zUkdCLCB0cnVl
KTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgs
IHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJf
UkdCOF9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRFVEMyX1JHQjhBMSwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ180eDRfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiwgdHJ1ZSk7Cisr
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ181eDVfc1JHQiwg
dHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182
eDVfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ182eDZfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ184eDVfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDZfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiwgdHJ1ZSk7CisrICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IsIHRy
dWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4
Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEweDhfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IsIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JHQiwgdHJ1ZSk7
CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ180eDRfTERS
LCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzV4NF9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfNXg1X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ182eDVfTERSLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg1X0xEUiwgdHJ1ZSk7CisrICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERSLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIs
IHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
MTB4NV9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfMTB4Nl9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdEFTVENfMTB4OF9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfTERSLCB0cnVlKTsKKysgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX0xEUiwgdHJ1ZSk7Cisr
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIs
IHRydWUpOworKyNlbmRpZgorKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KKyB9CisgCisgfSAgLy8g
bmFtZXNwYWNlIG10bAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Z2xzbGFuZ19tdGxfdXRpbHMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LmRiYzEwOTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaAorQEAgLTAsMCArMSw1NyBAQAorKy8vCisrLy8gIG10
bF9nbHNsYW5nX210bF91dGlscy5oCisrLy8gIEFOR0xFCisrLy8KKysvLyAgQ3JlYXRlZCBieSBL
eWxlIFBpZGRpbmd0b24gb24gMTEvMTAvMjAuCisrLy8KKysKKysjaWZuZGVmIG10bF9nbHNsYW5n
X210bF91dGlsc19oCisrI2RlZmluZSBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaAorKyNpbmNsdWRl
ICJsaWJBTkdMRS9Db250ZXh0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL1Byb2dy
YW1JbXBsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91
dGlscy5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgi
CisrCisrbmFtZXNwYWNlIHJ4CisreworK25hbWVzcGFjZSBtdGwKKyt7Cisrc3RydWN0IFNhbXBs
ZXJCaW5kaW5nCisreworKyAgICB1aW50MzJfdCB0ZXh0dXJlQmluZGluZyA9IDA7CisrICAgIHVp
bnQzMl90IHNhbXBsZXJCaW5kaW5nID0gMDsKKyt9OworKworK3N0cnVjdCBUcmFuc2xhdGVkU2hh
ZGVySW5mbworK3sKKysgICAgdm9pZCByZXNldCgpOworKyAgICAvLyBUcmFuc2xhdGVkIE1ldGFs
IHNvdXJjZSBjb2RlCisrICAgIHN0ZDo6c3RyaW5nIG1ldGFsU2hhZGVyU291cmNlOworKyAgICAv
LyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkg
UHJvZ3JhbU10bC4KKysgICAgQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG1ldGFsTGlicmFy
eTsKKysgICAgc3RkOjphcnJheTxTYW1wbGVyQmluZGluZywga01heEdMU2FtcGxlckJpbmRpbmdz
PiBhY3R1YWxTYW1wbGVyQmluZGluZ3M7CisrICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhH
TFVCT0JpbmRpbmdzPiBhY3R1YWxVQk9CaW5kaW5nczsKKysgICAgc3RkOjphcnJheTx1aW50MzJf
dCwga01heFNoYWRlclhGQnM+IGFjdHVhbFhGQkJpbmRpbmdzOworKyAgICBib29sIGhhc1VCT0Fy
Z3VtZW50QnVmZmVyOworK307Cisrdm9pZCBNU0xHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlBy
b2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFw
ICp2YXJpYWJsZUluZm9NYXBPdXQpOworKworK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2Vz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VW
YXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9P
dXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJp
bmc+ICptc2xDb2RlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgeGZi
QnVmZmVyQ291bnQpOworKworKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21wYXJlIG1vZGUg
dGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KKyt1aW50IE1zbEdldFNoYWRl
clNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYyk7CisrCisrfSAgLy8g
bmFtZXNwYWNlIG10bAorK30gIC8vIG5hbWVzcGFjZSByeAorKworKyNlbmRpZiAvKiBtdGxfZ2xz
bGFuZ19tdGxfdXRpbHNfaCAqLworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uMzVmNWJlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbQorQEAgLTAsMCArMSwyNDEgQEAKKysv
LworKy8vICBtZ2xfZ2xzbGFuZ19tdGxfdXRpbHMubQorKy8vICBBTkdMRSAoc3RhdGljKQorKy8v
CisrLy8gIENyZWF0ZWQgYnkgS3lsZSBQaWRkaW5ndG9uIG9uIDExLzEwLzIwLgorKy8vCisrCisr
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisrCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKKysKKytuYW1lc3BhY2UgcngKKyt7Cisr
bmFtZXNwYWNlIG10bAorK3sKKysKKyt2b2lkIFRyYW5zbGF0ZWRTaGFkZXJJbmZvOjpyZXNldCgp
CisreworKyAgICBtZXRhbFNoYWRlclNvdXJjZS5jbGVhcigpOworKyAgICBtZXRhbExpYnJhcnkg
ICAgICAgICA9IG5pbDsKKysgICAgaGFzVUJPQXJndW1lbnRCdWZmZXIgPSBmYWxzZTsKKysgICAg
Zm9yIChtdGw6OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDogYWN0dWFsU2FtcGxlckJpbmRpbmdz
KQorKyAgICB7CisrICAgICAgICBiaW5kaW5nLnRleHR1cmVCaW5kaW5nID0gbXRsOjprTWF4U2hh
ZGVyU2FtcGxlcnM7CisrICAgIH0KKysKKysgICAgZm9yICh1aW50MzJfdCAmYmluZGluZyA6IGFj
dHVhbFVCT0JpbmRpbmdzKQorKyAgICB7CisrICAgICAgICBiaW5kaW5nID0gbXRsOjprTWF4U2hh
ZGVyQnVmZmVyczsKKysgICAgfQorKworKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDogYWN0
dWFsWEZCQmluZGluZ3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhTaGFk
ZXJCdWZmZXJzOworKyAgICB9CisrfQorKworKy8vIE9yaWdpbmFsIG1hcHBpbmcgb2YgZnJvbnQg
ZW5kIGZyb20gc2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNhbXBsZXIgc2xvdHMgKGluIGZvcm0g
b2YKKysvLyBzbG90OmNvdW50IHBhaXIpCisrdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01h
cCA9CisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3Rk
OjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4+PjsKKysKKytib29sIE1hcHBlZFNhbXBsZXJOYW1l
TmVlZHNVc2VyRGVmaW5lZFByZWZpeChjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQor
K3sKKysgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS5maW5kKCcuJykgPT0gc3RkOjpzdHJpbmc6Om5w
b3M7CisrfQorKworK3N0YXRpYyBzdGQ6OnN0cmluZyBNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZShj
b25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQorK3sKKysgICAgc3RkOjpzdHJpbmcgc2Ft
cGxlck5hbWUgPSBvcmlnaW5hbE5hbWU7CisrCisrICAgIC8vIFNhbXBsZXJzIGluIHN0cnVjdHMg
YXJlIGV4dHJhY3RlZC4KKysgICAgc3RkOjpyZXBsYWNlKHNhbXBsZXJOYW1lLmJlZ2luKCksIHNh
bXBsZXJOYW1lLmVuZCgpLCAnLicsICdfJyk7CisrCisrICAgIC8vIFJlbW92ZSBhcnJheSBlbGVt
ZW50cworKyAgICBhdXRvIG91dCA9IHNhbXBsZXJOYW1lLmJlZ2luKCk7CisrICAgIGZvciAoYXV0
byBpbiA9IHNhbXBsZXJOYW1lLmJlZ2luKCk7IGluICE9IHNhbXBsZXJOYW1lLmVuZCgpOyBpbisr
KQorKyAgICB7CisrICAgICAgICBpZiAoKmluID09ICdbJykKKysgICAgICAgIHsKKysgICAgICAg
ICAgICB3aGlsZSAoKmluICE9ICddJykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGluKys7CisrICAgICAgICAgICAgICAgIEFTU0VSVChpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKSk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgewor
KyAgICAgICAgICAgICpvdXQrKyA9ICppbjsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBz
YW1wbGVyTmFtZS5lcmFzZShvdXQsIHNhbXBsZXJOYW1lLmVuZCgpKTsKKysKKysgICAgaWYgKE1h
cHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeChvcmlnaW5hbE5hbWUpKQorKyAg
ICB7CisrICAgICAgICBzYW1wbGVyTmFtZSA9IHNoOjprVXNlckRlZmluZWROYW1lUHJlZml4ICsg
c2FtcGxlck5hbWU7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHNhbXBsZXJOYW1lOworK30KKysK
Kyt2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFt
U3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRS
ZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVy
TWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91
dCkKKyt7CisrICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpB
bGxTaGFkZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBnbDo6U2hhZGVyICpnbFNoYWRlciAg
ICAgICAgICAgID0gcHJvZ3JhbVN0YXRlLmdldEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpOwor
KyAgICAgICAgKCpzaGFkZXJTb3VyY2VzT3V0KVtzaGFkZXJUeXBlXSA9IGdsU2hhZGVyID8gZ2xT
aGFkZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSA6ICIiOworKyAgICB9CisrfQorKworK3ZvaWQg
R2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MoY29uc3Qgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb24gKnJlZmxlY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5nTWFwICZvcmlnaW5hbEJpbmRpbmdzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiAm
c3RydWN0U2FtcGxlcnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmFy
cmF5PFNhbXBsZXJCaW5kaW5nLCBtdGw6OmtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gKmJpbmRpbmdz
KQorK3sKKysgICAgZm9yIChhdXRvICZzYW1wbGVyIDogcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJp
bmRpbmdzKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lICAgICAg
ICAgID0gc2FtcGxlci5maXJzdDsKKysgICAgICAgIGNvbnN0IHVpbnQzMl90IGFjdHVhbFNhbXBs
ZXJTbG90ID0gKHVpbnQzMl90KXJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5nKG5hbWUpOwor
KyAgICAgICAgY29uc3QgdWludDMyX3QgYWN0dWFsVGV4dHVyZVNsb3QgPSAodWludDMyX3QpcmVm
bGVjdGlvbi0+Z2V0VGV4dHVyZUJpbmRpbmcobmFtZSk7CisrCisrICAgICAgICAvLyBBc3NpZ24g
c2VxdWVudGlhbCBpbmRleCBmb3Igc3Vic2VxdWVudCBhcnJheSBlbGVtZW50cworKyAgICAgICAg
Y29uc3QgYm9vbCBzdHJ1Y3RTYW1wbGVyID0gc3RydWN0U2FtcGxlcnMuZmluZChuYW1lKSAhPSBz
dHJ1Y3RTYW1wbGVycy5lbmQoKTsKKysgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1hcHBlZE5h
bWUgPQorKyAgICAgICAgICAgIHN0cnVjdFNhbXBsZXIgPyBuYW1lIDogTVNMR2V0TWFwcGVkU2Ft
cGxlck5hbWUoc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXggKyBuYW1lKTsKKysgICAgICAgIGF1
dG8gb3JpZ2luYWwgPSBvcmlnaW5hbEJpbmRpbmdzLmZpbmQobWFwcGVkTmFtZSk7CisrICAgICAg
ICBpZiAob3JpZ2luYWwgIT0gb3JpZ2luYWxCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90
Pj4gJnJlc09yaWduYWxCaW5kaW5ncyA9CisrICAgICAgICAgICAgICAgIG9yaWdpbmFsQmluZGlu
Z3MuYXQobWFwcGVkTmFtZSk7CisrICAgICAgICAgICAgdWludDMyX3QgY3VycmVudFRleHR1cmVT
bG90ID0gYWN0dWFsVGV4dHVyZVNsb3Q7CisrICAgICAgICAgICAgdWludDMyX3QgY3VycmVudFNh
bXBsZXJTbG90ID0gYWN0dWFsU2FtcGxlclNsb3Q7CisrICAgICAgICAgICAgZm9yIChjb25zdCBz
dGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90PiAmb3JpZ2luYWxCaW5kaW5nUmFuZ2UgOiByZXNP
cmlnbmFsQmluZGluZ3MpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBTYW1wbGVy
QmluZGluZyAmYWN0dWFsQmluZGluZyA9IGJpbmRpbmdzLT5hdChvcmlnaW5hbEJpbmRpbmdSYW5n
ZS5maXJzdCk7CisrICAgICAgICAgICAgICAgIGFjdHVhbEJpbmRpbmcudGV4dHVyZUJpbmRpbmcg
ID0gY3VycmVudFRleHR1cmVTbG90OworKyAgICAgICAgICAgICAgICBhY3R1YWxCaW5kaW5nLnNh
bXBsZXJCaW5kaW5nICA9IGN1cnJlbnRTYW1wbGVyU2xvdDsKKysKKysgICAgICAgICAgICAgICAg
Y3VycmVudFRleHR1cmVTbG90ICs9IG9yaWdpbmFsQmluZGluZ1JhbmdlLnNlY29uZDsKKysgICAg
ICAgICAgICAgICAgY3VycmVudFNhbXBsZXJTbG90ICs9IG9yaWdpbmFsQmluZGluZ1JhbmdlLnNl
Y29uZDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisrc2g6OlRy
YW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9tU2hhZGVyKGdsOjpTaGFk
ZXIgKnNoYWRlcikKKyt7CisrICAgIFNoYWRlck10bCAqc2hhZGVySW5zdGFuY2UgPSBzdGF0aWNf
Y2FzdDxTaGFkZXJNdGwgKj4oc2hhZGVyLT5nZXRJbXBsZW1lbnRhdGlvbigpKTsKKysgICAgcmV0
dXJuIHNoYWRlckluc3RhbmNlLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisrfQor
KworK3NoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpnZXRSZWZsZWN0aW9uRnJvbUNvbXBp
bGVyKGdsOjpDb21waWxlciAqY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgdHlwZSkKKyt7Cisr
ICAgIGF1dG8gY29tcGlsZXJJbnN0YW5jZSAgICAgID0gY29tcGlsZXItPmdldEluc3RhbmNlKHR5
cGUpOworKyAgICBzaDo6VFNoSGFuZGxlQmFzZSAqYmFzZSAgICA9IHN0YXRpY19jYXN0PHNoOjpU
U2hIYW5kbGVCYXNlICo+KGNvbXBpbGVySW5zdGFuY2UuZ2V0SGFuZGxlKCkpOworKyAgICBhdXRv
IHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0
KCk7CisrICAgIGNvbXBpbGVyLT5wdXRJbnN0YW5jZShzdGQ6Om1vdmUoY29tcGlsZXJJbnN0YW5j
ZSkpOworKyAgICByZXR1cm4gdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uKCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJp
YWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9PdXQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+
ICptc2xDb2RlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgeGZiQnVm
ZmVyQ291bnQpCisreworKyAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBi
aW5kaW5ncyBnZW5lcmF0ZWQgYnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1h
cC4KKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3Jp
Z2luYWxCaW5kaW5nczsKKysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
PiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1CbG9ja3MoKTsKKysgICAgZm9yICh1
aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZmZXJJZHggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZl
cklkeCkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9
IGJsb2Nrc1tidWZmZXJJZHhdOworKyAgICAgICAgaWYgKCF1Ym9PcmlnaW5hbEJpbmRpbmdzLmNv
dW50KGJsb2NrLm1hcHBlZE5hbWUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVib09yaWdp
bmFsQmluZGluZ3NbYmxvY2subWFwcGVkTmFtZV0gPSBidWZmZXJJZHg7CisrICAgICAgICB9Cisr
ICAgIH0KKysgICAgLy8gUmV0cmlldmUgb3JpZ2luYWwgc2FtcGxlciBiaW5kaW5ncyBwcm9kdWNl
ZCBieSBmcm9udCBlbmQuCisrICAgIE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgb3JpZ2luYWxT
YW1wbGVyQmluZGluZ3M7CisrICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpTYW1wbGVyQmluZGlu
Zz4gJnNhbXBsZXJCaW5kaW5ncyA9IHByb2dyYW1TdGF0ZS5nZXRTYW1wbGVyQmluZGluZ3MoKTsK
KysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0+ICZ1bmlmb3JtcyAgICAg
ICAgID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1zKCk7CisrCisrICAgIHN0ZDo6dW5vcmRlcmVk
X3NldDxzdGQ6OnN0cmluZz4gc3RydWN0U2FtcGxlcnMgPSB7fTsKKysKKysgICAgZm9yICh1aW50
MzJfdCB0ZXh0dXJlSW5kZXggPSAwOyB0ZXh0dXJlSW5kZXggPCBzYW1wbGVyQmluZGluZ3Muc2l6
ZSgpOyArK3RleHR1cmVJbmRleCkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2w6OlNhbXBsZXJC
aW5kaW5nICZzYW1wbGVyQmluZGluZyA9IHNhbXBsZXJCaW5kaW5nc1t0ZXh0dXJlSW5kZXhdOwor
KyAgICAgICAgdWludDMyX3QgdW5pZm9ybUluZGV4ID0gcHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1J
bmRleEZyb21TYW1wbGVySW5kZXgodGV4dHVyZUluZGV4KTsKKysgICAgICAgIGNvbnN0IGdsOjpM
aW5rZWRVbmlmb3JtICZzYW1wbGVyVW5pZm9ybSA9IHVuaWZvcm1zW3VuaWZvcm1JbmRleF07Cisr
ICAgICAgICBib29sIGlzU2FtcGxlckluU3RydWN0ICAgICAgICA9IHNhbXBsZXJVbmlmb3JtLm5h
bWUuZmluZCgnLicpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworKyAgICAgICAgc3RkOjpzdHJpbmcg
bWFwcGVkU2FtcGxlck5hbWUgPSBpc1NhbXBsZXJJblN0cnVjdAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZShzYW1w
bGVyVW5pZm9ybS5uYW1lKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZShzYW1wbGVyVW5pZm9ybS5tYXBwZWROYW1l
KTsKKysgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgcHJlZml4ZWQgbGF0ZXIgc2VwZXJhdGVs
eQorKyAgICAgICAgaWYgKGlzU2FtcGxlckluU3RydWN0KQorKyAgICAgICAgICAgIHN0cnVjdFNh
bXBsZXJzLmluc2VydChtYXBwZWRTYW1wbGVyTmFtZSk7CisrICAgICAgICBvcmlnaW5hbFNhbXBs
ZXJCaW5kaW5nc1ttYXBwZWRTYW1wbGVyTmFtZV0ucHVzaF9iYWNrKAorKyAgICAgICAgICAgIHt0
ZXh0dXJlSW5kZXgsIHN0YXRpY19jYXN0PHVpbnQzMl90PihzYW1wbGVyQmluZGluZy5ib3VuZFRl
eHR1cmVVbml0cy5zaXplKCkpfSk7CisrICAgIH0KKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSB0
eXBlIDoge2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudH0p
CisrICAgIHsKKysgICAgICAgICgqbXNsQ29kZU91dClbdHlwZV0gICAgICAgICAgICAgICAgICAg
ICAgICAgPSBzaGFkZXJTb3VyY2VzW3R5cGVdOworKyAgICAgICAgKCptc2xTaGFkZXJJbmZvT3V0
KVt0eXBlXS5tZXRhbFNoYWRlclNvdXJjZSA9IHNoYWRlclNvdXJjZXNbdHlwZV07CisrICAgICAg
ICBnbDo6U2hhZGVyICpzaGFkZXIgICAgICAgICAgICAgICAgICAgICAgICA9IHByb2dyYW1TdGF0
ZS5nZXRBdHRhY2hlZFNoYWRlcih0eXBlKTsKKysgICAgICAgIHNoOjpUcmFuc2xhdG9yTWV0YWxS
ZWZsZWN0aW9uICpyZWZsZWN0aW9uID0gZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIoc2hhZGVyKTsK
KysgICAgICAgIC8vIFJldHJpZXZlIGF1dG9tYXRpYyB0ZXh0dXJlIHNsb3QgYXNzaWdubWVudHMK
KysgICAgICAgIGlmIChvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncy5zaXplKCkgPiAwKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIEdldEFzc2lnbmVkU2FtcGxlckJpbmRpbmdzKHJlZmxlY3Rpb24s
IG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLCBzdHJ1Y3RTYW1wbGVycywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNsU2hhZGVySW5mb091dC0+YXQodHlwZSkuYWN0
dWFsU2FtcGxlckJpbmRpbmdzKTsKKysgICAgICAgIH0KKysgICAgICAgIHJlZmxlY3Rpb24tPnJl
c2V0KCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30K
KysKKyt1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVu
dW0gZnVuYykKKyt7CisrICAgIC8vIFNlZSBTcGlydlRvTXNsQ29tcGlsZXI6OmVtaXRfaGVhZGVy
KCkKKysgICAgaWYgKG1vZGUgPT0gR0xfTk9ORSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIDA7
CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBzd2l0Y2ggKGZ1bmMpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgY2FzZSBHTF9MRVNTOgorKyAgICAgICAgICAgICAgICByZXR1
cm4gMTsKKysgICAgICAgICAgICBjYXNlIEdMX0xFUVVBTDoKKysgICAgICAgICAgICAgICAgcmV0
dXJuIDI7CisrICAgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMzsKKysgICAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKysgICAgICAgICAgICAgICAg
cmV0dXJuIDQ7CisrICAgICAgICAgICAgY2FzZSBHTF9ORVZFUjoKKysgICAgICAgICAgICAgICAg
cmV0dXJuIDU7CisrICAgICAgICAgICAgY2FzZSBHTF9BTFdBWVM6CisrICAgICAgICAgICAgICAg
IHJldHVybiA2OworKyAgICAgICAgICAgIGNhc2UgR0xfRVFVQUw6CisrICAgICAgICAgICAgICAg
IHJldHVybiA3OworKyAgICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6CisrICAgICAgICAgICAg
ICAgIHJldHVybiA4OworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAg
ICB9CisrfQorK30gIC8vIG5hbWVzcGFjZSBtdGwKKyt9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5oCitpbmRleCAx
M2M5N2VlLi5jMDI0NDZhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX3V0aWxzLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5oCitAQCAtMTQsMzMgKzE0LDExIEBACisgI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL1Byb2dyYW1JbXBsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbW9uLmgiCistCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5oIgorIG5hbWVzcGFjZSByeAorIHsKKyBuYW1lc3BhY2Ug
bXRsCisgeworLQorLXN0cnVjdCBTYW1wbGVyQmluZGluZworLXsKKy0gICAgdWludDMyX3QgdGV4
dHVyZUJpbmRpbmcgPSAwOworLSAgICB1aW50MzJfdCBzYW1wbGVyQmluZGluZyA9IDA7CistfTsK
Ky0KKy1zdHJ1Y3QgVHJhbnNsYXRlZFNoYWRlckluZm8KKy17CistICAgIHZvaWQgcmVzZXQoKTsK
Ky0KKy0gICAgLy8gVHJhbnNsYXRlZCBNZXRhbCBzb3VyY2UgY29kZQorLSAgICBzdGQ6OnN0cmlu
ZyBtZXRhbFNoYWRlclNvdXJjZTsKKy0gICAgLy8gTWV0YWwgbGlicmFyeSBjb21waWxlZCBmcm9t
IHNvdXJjZSBjb2RlIGFib3ZlLiBVc2VkIGJ5IFByb2dyYW1NdGwuCistICAgIEF1dG9PYmpDUHRy
PGlkPE1UTExpYnJhcnk+PiBtZXRhbExpYnJhcnk7CistCistICAgIHN0ZDo6YXJyYXk8U2FtcGxl
ckJpbmRpbmcsIGtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gYWN0dWFsU2FtcGxlckJpbmRpbmdzOwor
LSAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFsVUJPQmlu
ZGluZ3M7CistICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhTaGFkZXJYRkJzPiBhY3R1YWxY
RkJCaW5kaW5nczsKKy0gICAgYm9vbCBoYXNVQk9Bcmd1bWVudEJ1ZmZlcjsKKy19OworLQorIC8v
IC0gc2hhZGVyU291cmNlc091dCBpcyByZXN1bHQgR0xTTCBjb2RlIHBlciBzaGFkZXIgc3RhZ2Ug
d2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvZmYuCisgLy8gLSB4ZmJPbmx5U2hhZGVyU291
cmNlT3V0IHdpbGwgY29udGFpbiB2ZXJ0ZXggc2hhZGVyJ3MgR0xTTCBjb2RlIHdoZW4gWEZCIGVt
dWxhdGlvbiBpcyB0dXJuZWQgb24uCisgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0
IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKK0BAIC01Nyw2ICszNSwxMyBAQCBhbmds
ZTo6UmVzdWx0IEdsc2xhbmdHZXRTaGFkZXJTcGlydkNvZGUoRXJyb3JIYW5kbGVyICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJN
YXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnZlY3Rvcjx1
aW50MzJfdD4+ICpzaGFkZXJDb2RlT3V0KTsKKyAKKythbmdsZTo6UmVzdWx0IE1TTEdldFNoYWRl
clNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVyU3RhZ2Vz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZn
bENhcHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNo
YWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFw
ICZ2YXJpYWJsZUluZm9NYXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlNoYWRlck1hcDxzdGQ6OnZlY3Rvcjx1aW50MzJfdD4+ICpzaGFkZXJDb2RlT3V0KTsKKysK
KyAvLyBUcmFuc2xhdGUgZnJvbSBTUElSLVYgY29kZSB0byBNZXRhbCBzaGFkZXIgc291cmNlIGNv
ZGUuCisgLy8gLSBzcGlydlNoYWRlckNvZGUgaXMgU1BJUlYgY29kZSBwZXIgc2hhZGVyIHN0YWdl
IHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJuZWQgb2ZmLgorIC8vIC0geGZiT25seVNwaXJ2Q29k
ZSBpcyAgdmVydGV4IHNoYWRlcidzIFNQSVJWIGNvZGUgd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1
cm5lZCBvbi4KK0BAIC03MCw2ICs1NSwyMyBAQCBhbmdsZTo6UmVzdWx0IFNwaXJ2Q29kZVRvTXNs
KENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hh
ZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5mb091dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICptc2xYZmJPbmx5U2hh
ZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8pOworIAorK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNl
KGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICpzaGFkZXJT
b3VyY2VzT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZh
cmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFwT3V0KTsKKysKKythbmdsZTo6UmVzdWx0IEds
c2xhbmdHZXRNU0woQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVyU3RhZ2VzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAmc2hhZGVy
U291cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50
ZXJmYWNlVmFyaWFibGVJbmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFk
ZXJJbmZvT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0
ZDo6c3RyaW5nPiAqbXNsQ29kZU91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHhmYkJ1ZmZlckNvdW50KTsKKysKKysvLyBHZXQgZXF1aXZhbGVudCBzaGFkb3cgY29tcGFy
ZSBtb2RlIHRoYXQgaXMgdXNlZCBpbiB0cmFuc2xhdGVkIG1zbCBzaGFkZXIuCisrdWludCBNc2xH
ZXRTaGFkZXJTaGFkb3dDb21wYXJlTW9kZShHTGVudW0gbW9kZSwgR0xlbnVtIGZ1bmMpOworKwor
IH0gIC8vIG5hbWVzcGFjZSBtdGwKKyB9ICAvLyBuYW1lc3BhY2UgcngKKyAKK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0gYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KK2luZGV4IGNhYTBl
NTYuLjhiMDZlNjYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2dsc2xhbmdfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Z2xzbGFuZ191dGlscy5tbQorQEAgLTEzLDYgKzEzLDcgQEAKKyAjaW5jbHVkZSA8c3BpcnZfbXNs
LmhwcD4KKyAKKyAjaW5jbHVkZSAiY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmgiCisrI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisgCitAQCAtMjIsMTIgKzIzLDEz
IEBACisgeworIG5hbWVzcGFjZQorIHsKKy0KKyBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdU
ZXh0dXJlRGVzY1NldCAgICAgICAgICAgICAgPSAwOworIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xz
bGFuZ0RlZmF1bHRVbmlmb3JtQW5kWGZiRGVzY1NldCA9IDE7CisgY29uc3RleHByIHVpbnQzMl90
IGtHbHNsYW5nRHJpdmVyVW5pZm9ybXNEZXNjU2V0ICAgICAgID0gMjsKKyBjb25zdGV4cHIgdWlu
dDMyX3Qga0dsc2xhbmdTaGFkZXJSZXNvdXJjZURlc2NTZXQgICAgICAgPSAzOworIAorK2NvbnN0
ZXhwciBjaGFyIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzVmFyTmFtZVtdID0gIkFOR0xFU2hh
ZG93Q29tcGFyZU1vZGVzIjsKKysKKyAvLyBPcmlnaW5hbCBtYXBwaW5nIG9mIGZyb250IGVuZCBm
cm9tIHNhbXBsZXIgbmFtZSB0byBtdWx0aXBsZSBzYW1wbGVyIHNsb3RzIChpbiBmb3JtIG9mCisg
Ly8gc2xvdDpjb3VudCBwYWlyKQorIHVzaW5nIE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgPQor
QEAgLTU2LDkgKzU4LDEzIEBAIHZvaWQgUmVzZXRHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8o
R2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmCisgICAgIHN0YXRpY19h
c3NlcnQoa0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ICE9IDAsICJrRHJpdmVyVW5pZm9ybXNC
aW5kaW5nSW5kZXggbXVzdCBub3QgYmUgMCIpOworIH0KKyAKKysKKyBHbHNsYW5nU291cmNlT3B0
aW9ucyBDcmVhdGVTb3VyY2VPcHRpb25zKCkKKyB7CisgICAgIEdsc2xhbmdTb3VyY2VPcHRpb25z
IG9wdGlvbnM7CisrICAgIG9wdGlvbnMuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrID0gdHJ1ZTsK
KysgICAgLy8gV2UgY2FuIGVhcmx5IG91dCBpbiB0aGUgTVNMIG9uY2UgdHJhbnNmb3JtIGZlZWRi
YWNrIGlzIHdyaXR0ZW4KKysgICAgb3B0aW9ucy50cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJu
ID0gdHJ1ZTsKKyAgICAgcmV0dXJuIG9wdGlvbnM7CisgfQorIAorQEAgLTc5LDggKzg1LDggQEAg
R2xzbGFuZ1NvdXJjZU9wdGlvbnMgQ3JlYXRlU291cmNlT3B0aW9ucygpCisgdm9pZCBCaW5kQnVm
ZmVycyhzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wgKmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNtYWxsVmVjdG9yPHNwaXJ2X2Nyb3NzOjpSZXNvdXJjZT4g
JnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUs
CistICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKy0gICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRp
bmdzLAorKyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcs
IHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKysgICAgICAgICAgICAgICAgIGNvbnN0
IGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGluZ3Ms
CisgICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4R0xVQk9CaW5kaW5n
cz4gKnVib0JpbmRpbmdzUmVtYXBPdXQsCisgICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQzMl90LCBrTWF4U2hhZGVyWEZCcz4gKnhmYkJpbmRpbmdSZW1hcE91dCwKKyAgICAgICAgICAg
ICAgICAgIGJvb2wgKnVib0FyZ3VtZW50QnVmZmVyVXNlZCkKK0BAIC0yNTMsMzAgKzI1OSw1MCBA
QCB2b2lkIEdldEFzc2lnbmVkU2FtcGxlckJpbmRpbmdzKGNvbnN0IHNwaXJ2X2Nyb3NzOjpDb21w
aWxlck1TTCAmY29tcGlsZXJNc2wsCisgICAgIH0KKyB9CisgCistc3RkOjpzdHJpbmcgUG9zdFBy
b2Nlc3NUcmFuc2xhdGVkTXNsKGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkU291cmNlKQor
K3N0ZDo6c3RyaW5nIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChib29sIGhhc0RlcHRoU2FtcGxl
ciwgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRTb3VyY2UpCisgeworKyAgICBzdGQ6OnN0
cmluZyBzb3VyY2U7CisrICAgIGlmIChoYXNEZXB0aFNhbXBsZXIpCisrICAgIHsKKysgICAgICAg
IC8vIEFkZCBBTkdMRVNoYWRvd0NvbXBhcmVNb2RlcyB2YXJpYWJsZSB0byBtYWluKCksIFdlIG5l
ZWQgdG8gYWRkIGhlcmUgYmVjYXVzZSBpdCBpcyB0aGUKKysgICAgICAgIC8vIG9ubHkgd2F5IHdp
dGhvdXQgbW9kaWZ5aW5nIHNwaXJ2LWNyb3NzLgorKyAgICAgICAgc3RkOjpyZWdleCBtYWluRGVj
bGFyZVJlZ2V4KAorKyAgICAgICAgICAgIFIiKCgodmVydGV4fGZyYWdtZW50fGtlcm5lbClccytb
X2EtekEtWjAtOTw+XStccyttYWluW15cKF0qXCgpKSIpOworKyAgICAgICAgc3RkOjpzdHJpbmcg
bWFpbkRlY2xhcmVSZXBsYWNlU3RyID0gc3RkOjpzdHJpbmcoIiQxY29uc3RhbnQgdW5pZm9ybTx1
aW50PiAqIikgKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNWYXJOYW1lICsgIltbYnVmZmVyKCIgKworKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyKGtTaGFkb3dTYW1wbGVy
Q29tcGFyZU1vZGVzQmluZGluZ0luZGV4KSArICIpXV0sICI7CisrICAgICAgICBzb3VyY2UgPSBz
dGQ6OnJlZ2V4X3JlcGxhY2UodHJhbnNsYXRlZFNvdXJjZSwgbWFpbkRlY2xhcmVSZWdleCwgbWFp
bkRlY2xhcmVSZXBsYWNlU3RyKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IHNvdXJjZSA9IHRyYW5zbGF0ZWRTb3VyY2U7CisrICAgIH0KKysKKyAgICAgLy8gQWRkIGZ1bmN0
aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBnbF9TYW1wbGVNYXNrLgorICAgICAvLyBFdmVuIHRo
b3VnaCB0aGlzIHZhcnlpbmcgaXMgb25seSB1c2VkIHdoZW4gQU5HTEVDb3ZlcmFnZU1hc2tFbmFi
bGVkIGlzIHRydWUsCisgICAgIC8vIHRoZSBzcGlydi1jcm9zcyBkb2Vzbid0IGFzc2lnbiBmdW5j
dGlvbl9jb25zdGFudCBhdHRyaWJ1dGUgdG8gaXQuIFRodXMgaXQgd29uJ3QgYmUgZGVhZC1jb2Rl
CisgICAgIC8vIHJlbW92ZWQgd2hlbiBBTkdMRUNvdmVyYWdlTWFza0VuYWJsZWQ9ZmFsc2UuCisg
ICAgIHN0ZDo6c3RyaW5nIHNhbXBsZU1hc2tSZXBsYWNlU3RyID0gc3RkOjpzdHJpbmcoIltbc2Ft
cGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KCIpICsKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaDo6bXRsOjprQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSAr
ICIpXV0iOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoOjpUcmFu
c2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUoKSArCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildXSI7CisgCisgICAgIC8vIFRoaXMg
cmVwbGFjZXMgImdsX1NhbXBsZU1hc2sgW1tzYW1wbGVfbWFza11dIgorICAgICAvLyAgICAgICAg
ICB3aXRoICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KEFO
R0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCldXSIKKyAgICAgc3RkOjpyZWdleCBzYW1wbGVNYXNrRGVj
bGFyZVJlZ2V4KFIiKFxbXHMqXFtccypzYW1wbGVfbWFza1xzKlxdXHMqXF0pIik7CistICAgIHJl
dHVybiBzdGQ6OnJlZ2V4X3JlcGxhY2UodHJhbnNsYXRlZFNvdXJjZSwgc2FtcGxlTWFza0RlY2xh
cmVSZWdleCwgc2FtcGxlTWFza1JlcGxhY2VTdHIpOworKyAgICByZXR1cm4gc3RkOjpyZWdleF9y
ZXBsYWNlKHNvdXJjZSwgc2FtcGxlTWFza0RlY2xhcmVSZWdleCwgc2FtcGxlTWFza1JlcGxhY2VT
dHIpOworIH0KKyAKKyAvLyBDdXN0b21pemVkIHNwaXJ2LWNyb3NzIGNvbXBpbGVyCisgY2xhc3Mg
U3BpcnZUb01zbENvbXBpbGVyIDogcHVibGljIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTAorIHsK
KyAgIHB1YmxpYzoKKy0gICAgU3BpcnZUb01zbENvbXBpbGVyKHN0ZDo6dmVjdG9yPHVpbnQzMl90
PiAmJnNwcml2KSA6IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTChzcHJpdikge30KKysgICAgU3Bp
cnZUb01zbENvbXBpbGVyKENvbnRleHQgKmNvbnRleHQsIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiAm
JnNwcml2KQorKyAgICAgICAgOiBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0woc3ByaXYpLCBtQ29u
dGV4dChjb250ZXh0KQorKyAgICB7fQorIAorICAgICB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVy
VHlwZSBzaGFkZXJUeXBlLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKy0gICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJf
dD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xl
OjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJf
dD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9yaWdp
bmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLAorICAgICAgICAg
ICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsU2hhZGVySW5mb091dCkKKyAgICAg
eworQEAgLTMyOCw4ICszNTQsNyBAQCB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlwZSBzaGFk
ZXJUeXBlLAorICAgICAgICAgICAgIC8vIEZvcmNlIGRpc2NyZXRlIHNsb3QgYmluZGluZ3MgZm9y
IHRleHR1cmVzLCBkZWZhdWx0IHVuaWZvcm1zICYgZHJpdmVyIHVuaWZvcm1zCisgICAgICAgICAg
ICAgLy8gaW5zdGVhZCBvZiB1c2luZyBhcmd1bWVudCBidWZmZXIuCisgICAgICAgICAgICAgc3Bp
cnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xh
bmdUZXh0dXJlRGVzY1NldCk7CistICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNM
OjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoCistICAgICAgICAgICAgICAgIGtHbHNsYW5n
RGVmYXVsdFVuaWZvcm1BbmRYZmJEZXNjU2V0KTsKKysgICAgICAgICAgICBzcGlydl9jcm9zczo6
Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RlZmF1bHRV
bmlmb3JtQW5kWGZiRGVzY1NldCk7CisgICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVy
TVNMOjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xhbmdEcml2ZXJVbmlmb3Jtc0Rl
c2NTZXQpOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorQEAgLTM0MCwyMSArMzY1LDczMiBA
QCB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorIAorICAgICAgICAg
c3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjpzZXRfbXNsX29wdGlvbnMoY29tcE9wdCk7CisgCisr
ICAgICAgICBhZGRCdWlsdEluUmVzb3VyY2VzKCk7CisrICAgICAgICBhbmFseXplU2hhZGVyVmFy
aWFibGVzKCk7CisrCisgICAgICAgICAvLyBBY3R1YWwgY29tcGlsYXRpb24KKyAgICAgICAgIG1z
bFNoYWRlckluZm9PdXQtPm1ldGFsU2hhZGVyU291cmNlID0KKy0gICAgICAgICAgICBQb3N0UHJv
Y2Vzc1RyYW5zbGF0ZWRNc2woc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjpjb21waWxlKCkpOwor
KyAgICAgICAgICAgIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChtSGFzRGVwdGhTYW1wbGVyLCBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CisgCisgICAgICAgICAvLyBSZXRy
aWV2ZSBhdXRvbWF0aWMgdGV4dHVyZSBzbG90IGFzc2lnbm1lbnRzCisgICAgICAgICBHZXRBc3Np
Z25lZFNhbXBsZXJCaW5kaW5ncygqdGhpcywgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNsU2hhZGVySW5mb091dC0+YWN0dWFs
U2FtcGxlckJpbmRpbmdzKTsKKyAgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgLy8gT3ZlcnJp
ZGUgQ29tcGlsZXJNU0wKKysgICAgdm9pZCBlbWl0X2hlYWRlcigpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6ZW1pdF9oZWFkZXIoKTsKKysgICAg
ICAgIGlmICghbUhhc0RlcHRoU2FtcGxlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm47CisrICAgICAgICB9CisrICAgICAgICAvLyBXb3JrIGFyb3VuZCBjb2RlIGZvciB0aGVzZSBp
c3N1ZXM6CisrICAgICAgICAvLyAtIHNwcml2X2Nyb3NzIGFsd2F5cyB0cmFuc2xhdGVzIHNoYWRv
dyB0ZXh0dXJlJ3Mgc2FtcGxpbmcgdG8gc2FtcGxlX2NvbXBhcmUoKSBhbmQgZG9lc24ndAorKyAg
ICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQgR0xfVEVYVFVSRV9DT01QQVJFX01PREU9R0xfTk9O
RS4KKysgICAgICAgIC8vIC0gb24gbWFjT1MsIGV4cGxpY2l0IGxldmVsIG9mIGRldGFpbCBwYXJh
bWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBpbiBzYW1wbGVfY29tcGFyZSgpLgorKyAgICAgICAgLy8g
LSBvbiBkZXZpY2VzIHByaW9yIHRvIGlPUyBHUFUgZmFtaWx5IDMsIGNoYW5naW5nIHNhbXBsZXIn
cyBjb21wYXJlIG1vZGUgb3V0c2lkZSBzaGFkZXIgaXMKKysgICAgICAgIC8vIG5vdCBzdXBwb3J0
ZWQuCisrICAgICAgICBpZiAoIW1Db250ZXh0LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCku
YWxsb3dSdW50aW1lU2FtcGxlckNvbXBhcmVNb2RlLmVuYWJsZWQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgc3RhdGVtZW50KCIjZGVmaW5lIEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVf
Q09NUEFSRV9NT0RFIik7CisrICAgICAgICB9CisrCisrICAgICAgICBzdGF0ZW1lbnQoImVudW0g
Y2xhc3MgQU5HTEVDb21wYXJlTW9kZSA6IHVpbnQiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIp
OworKyAgICAgICAgc3RhdGVtZW50KCIgICAgTm9uZSA9IDAsIik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICBMZXNzLCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgTGVzc0VxdWFsLCIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgR3JlYXRlciwiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIEdyZWF0ZXJFcXVhbCwiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIE5ldmVyLCIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgQWx3YXlzLCIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgRXF1YWwsIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb3RFcXVhbCwiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgifTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAg
ICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50
PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRWNvbXBhcmUoVCBkZXB0aCwg
VCBkcmVmLCBVbmlmb3JtT3JVSW50IGNvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50
KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgIEFOR0xFQ29tcGFyZU1vZGUgbW9kZSA9IHN0
YXRpY19jYXN0PEFOR0xFQ29tcGFyZU1vZGU+KGNvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgc3dpdGNoIChtb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICB7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpMZXNz
OiIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gZHJlZiA8IGRlcHRo
OyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6
TGVzc0VxdWFsOiIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gZHJl
ZiA8PSBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29t
cGFyZU1vZGU6OkdyZWF0ZXI6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJl
dHVybiBkcmVmID4gZGVwdGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBB
TkdMRUNvbXBhcmVNb2RlOjpHcmVhdGVyRXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAg
ICAgICAgICAgIHJldHVybiBkcmVmID49IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6TmV2ZXI6Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgICAgIHJldHVybiAwOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
IGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6QWx3YXlzOiIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgICAgICAgICByZXR1cm4gMTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNl
IEFOR0xFQ29tcGFyZU1vZGU6OkVxdWFsOiIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAg
ICAgICByZXR1cm4gZHJlZiA9PSBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAg
ICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6Ok5vdEVxdWFsOiIpOworKyAgICAgICAgc3RhdGVtZW50
KCIgICAgICAgICAgICByZXR1cm4gZHJlZiAhPSBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgICAgICBkZWZhdWx0OiIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICBy
ZXR1cm4gMTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgfSIpOworKyAgICAgICAgc3RhdGVt
ZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50
KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7Cisr
ICAgICAgICAvLyAyRCBQQ0Ygc2FtcGxpbmcKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlUENGKGRlcHRoMmQ8VD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAg
ICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50
IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgIGZsb2F0MiBkaW1zID0gZmxvYXQyKHRleHR1cmUuZ2V0X3dpZHRoKCksIHRl
eHR1cmUuZ2V0X2hlaWdodCgpKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBp
bWdDb29yZCA9IGNvb3JkICogZGltczsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0
MiB0ZXhlbFNpemUgPSAxLjAgLyBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQyIHdlaWdodCA9IGZyYWN0KGltZ0Nvb3JkKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IGZsb2F0IHRsID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25z
LCBvZmZzZXQpLCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0Nv
bXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRyID0gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgZmxvYXQyKHRleGVsU2l6ZS54LCAwLjAp
LCAiCisrICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUs
IHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJs
ID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgZmxvYXQyKDAuMCwgdGV4
ZWxTaXplLnkpLCAiCisrICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNvbXBh
cmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IGZsb2F0IGJyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4ZWxT
aXplLCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAgIm9mZnNldCksIGNvbXBhcmVfdmFs
dWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0
IHRvcCA9IG1peCh0bCwgdHIsIHdlaWdodC54KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IGZsb2F0IGJvdHRvbSA9IG1peChibCwgYnIsIHdlaWdodC54KTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIHJldHVybiBtaXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiI2Vsc2UgIC8vIGlmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShz
LCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KSwgIgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJl
X3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRp
ZiAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisrICAgICAgICBzdGF0ZW1lbnQo
In0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICAvLyBDdWJlIFBDRiBz
YW1wbGluZworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUs
IE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAvLyBOT1RFKGhxbGUp
OiB0byBpbXBsZW1lbnQiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNv
bXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlvbnMpLCBjb21wYXJlX3ZhbHVlLCAi
CisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0
YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIDJE
IGFycmF5IFBDRiBzYW1wbGluZworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KAorKyAgICAgICAgICAgICJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGgy
ZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAg
ICAgICAgICAgImFycmF5LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBv
ZmZzZXQsIFVuaWZvcm1PclVJbnQgIgorKyAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSki
KTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVm
aW5lZChfX01FVEFMX01BQ09TX18pIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIg
ZGltcyA9IGZsb2F0Mih0ZXh0dXJlLmdldF93aWR0aCgpLCB0ZXh0dXJlLmdldF9oZWlnaHQoKSk7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29vcmQgPSBjb29yZCAqIGRp
bXM7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgdGV4ZWxTaXplID0gMS4wIC8g
ZGltczsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB3ZWlnaHQgPSBmcmFjdChp
bWdDb29yZCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0bCA9IEFOR0xFY29t
cGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgYXJyYXksIG9wdGlvbnMsIG9mZnNldCksICIK
KysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIp
OworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVy
ZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKysgICAgICAg
ICAgICAgICAgICAiYXJyYXksIG9wdGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRv
d0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJsID0gQU5H
TEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgZmxvYXQyKDAuMCwgdGV4ZWxTaXpl
LnkpLCAiCisrICAgICAgICAgICAgICAgICAgImFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCBjb21w
YXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAg
ICBmbG9hdCBiciA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIHRleGVs
U2l6ZSwgYXJyYXksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29t
cGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgZmxvYXQgYm90dG9tID0gbWl4KGJsLCBiciwgd2VpZ2h0LngpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIG1peCh0b3AsIGJvdHRvbSwgd2VpZ2h0LnkpOyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18p
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUu
c2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgIgorKyAgICAgICAgICAg
ICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBz
dGF0ZW1lbnQoIiNlbmRpZiAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAg
ICAvLyAyRCB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVyCisrICAgICAgICBzdGF0
ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZv
cm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNv
bXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQg
IgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBv
ZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0
ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgKKysgICAgICAgICAgICAiI2lmIGRlZmlu
ZWQoX19NRVRBTF9NQUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJ
TUVfQ09NUEFSRV9NT0RFKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xF
dGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgb2Zm
c2V0LCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCBv
ZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKysgICAgICAgIHN0YXRl
bWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9y
VUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFy
ZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisr
ICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JV
SW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBz
LCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAgICJp
bnQyKDApLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsK
KysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVt
ZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2Ft
cGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFy
ZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2lmIGRlZmlu
ZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3Jk
LCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgb2Zmc2V0LCAiCisrICAgICAgICAgICAgICAgICAg
InNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNv
b3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5k
aWYiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsK
KysKKysgICAgICAgIC8vIEN1YmUgdGV4dHVyZSdzIHNhbXBsZV9jb21wYXJlKCkgd3JhcHBlcgor
KyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0
eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAg
ICAgICJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoY3ViZTxUPiB0ZXh0dXJlLCBz
YW1wbGVyIHMsIGZsb2F0MyBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICJjb21wYXJlX3Zh
bHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAgICAg
ICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NB
TVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBy
ZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBv
cHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25z
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7CisrICAgICAgICBzdGF0ZW1lbnQo
In0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KAorKyAgICAgICAgICAgICJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRl
cHRoY3ViZTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MyBjb29yZCwgZmxvYXQgIgorKyAg
ICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2Rl
KSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNpZiBk
ZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBj
b29yZCwgY29tcGFyZV92YWx1ZSwgbGV2ZWwoMCksICIKKysgICAgICAgICAgICAgICAgICAic2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQs
IGNvbXBhcmVfdmFsdWUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAg
IC8vIDJEIGFycmF5IHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKysgICAgICAg
IHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUg
VW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0
dXJlQ29tcGFyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNv
b3JkLCAiCisrICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFs
dWUsIE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCAiCisrICAgICAgICAg
ICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgIiNpZiBkZWZpbmVkKF9fTUVUQUxf
TUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVf
TU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0Yo
dGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisrICAg
ICAgICAgICAgICAgICAgIm9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGFycmF5LCBjb21wYXJl
X3ZhbHVlLCBvcHRpb25zLCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYi
KTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysK
KysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwg
dHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQg
QU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQyIGNvb3JkLCAiCisrICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNv
bXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2Rl
KSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBy
ZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBh
cmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgaW50MigwKSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQg
QU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQyIGNvb3JkLCAiCisrICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNv
bXBhcmVfdmFsdWUsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKysgICAgICAgICAgICAg
ICAgICAic2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElN
RV9DT01QQVJFX01PREUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0
ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgbGV2ZWwo
MCksICIKKysgICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFs
dWUsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgLy8g
MkQgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKysgICAgICAgIHN0YXRlbWVu
dCgiLy8gV3JhcHBlciBmdW5jdGlvbnMgZm9yIHNoYWRvdyB0ZXh0dXJlIGZ1bmN0aW9ucyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9y
bU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRl
cHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGludDIgb2Zmc2V0LCAi
CisrICAgICAgICAgICAgICAgICAgImZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0
ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb2Zmc2V0LCAi
CisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdM
RXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxv
YXQgIgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBz
dGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3JkLCBpbnQy
KDApLCBjb21wYXJlX3ZhbHVlLCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5s
aW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsIE9wdCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAgImludDIgb2Zmc2V0LCBm
bG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hh
ZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwg
cywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAi
b2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICB7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHMsIGNvb3JkLCBvcHRpb25zLCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIp
OworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
T3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxp
bmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBj
b29yZCwgT3B0IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92
YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRl
bWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0
ZXh0dXJlLCBzLCBjb29yZCwgb3B0aW9ucywgaW50MigwKSwgY29tcGFyZV92YWx1ZSwgIgorKyAg
ICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICAvLyBDdWJlIHRl
eHR1cmUncyBnZW5lcmljIHNhbXBsaW5nIGZ1bmN0aW9uCisrICAgICAgICBzdGF0ZW1lbnQoInRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBh
cmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBz
dGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJl
TW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBzLCBjb29yZCwg
Y29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAg
ICBlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkKTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0
YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoY3ViZTxUPiB0ZXh0dXJlLCBzYW1w
bGVyIHMsIGZsb2F0MiBjb29yZCwgT3B0ICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywg
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAg
InNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywg
Y29vcmQsIG9wdGlvbnMpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAg
ICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAg
Ly8gMkQgYXJyYXkgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKysgICAgICAg
IHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkX2Fy
cmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKysgICAgICAg
ICAgICAgICAgICAiYXJyYXksIGludDIgb2Zmc2V0LCAiCisrICAgICAgICAgICAgICAgICAgImZs
b2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBz
LCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAib2Zm
c2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHMsIGNvb3JkLCBhcnJheSwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysK
KysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZv
cm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShk
ZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIK
KysgICAgICAgICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29v
cmQsIGFycmF5LCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisrICAgICAgICAgICAgICAgICAg
InNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAg
IHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVy
ZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorKyAgICAgICAgICAgICAgICAgICJh
cnJheSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCAiCisrICAgICAgICAgICAgICAgICAgImZs
b2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBz
LCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAib3B0
aW9ucywgb2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisrICAgICAgICBzdGF0
ZW1lbnQoIiAgICB7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0
YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorKyAgICAgICAgICAgICAgICAgICJhcnJh
eSwgT3B0IG9wdGlvbnMsIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93
Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBv
cHRpb25zLCBpbnQyKDApLCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNo
YWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIiKTsKKysgICAgfQorKworKyAgICBzdGQ6OnN0cmluZyB0b19mdW5jdGlvbl9u
YW1lKHNwaXJ2X2Nyb3NzOjpWYXJpYWJsZUlEIGltZywKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJUlR5cGUgJmltZ1R5cGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNHYXRoZXIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc1Byb2osCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNBcnJheU9mZnNldHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNPZmZzZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBoYXNHcmFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzRHJl
ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsb2QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWluTG9kKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBpZiAoIWhhc0RyZWYpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVuY3Rpb25fbmFtZShpbWcsIGlt
Z1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcm9qLCBoYXNBcnJheU9mZnNldHMs
IGhhc09mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc0dyYWQsIGhhc0RyZWYsIGxvZCwgbWluTG9kKTsKKysgICAg
ICAgIH0KKysKKysgICAgICAgIC8vIFVzZSBjdXN0b20gQU5HTEV0ZXh0dXJlIGZ1bmN0aW9uIGlu
c3RlYWQgb2YgdXNpbmcgYnVpbHQtaW4gc2FtcGxlX2NvbXBhcmUoKQorKyAgICAgICAgcmV0dXJu
ICJBTkdMRXRleHR1cmUiOworKyAgICB9CisrCisrICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9u
X2FyZ3Moc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRmV0Y2gsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBjb29yZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBjb29yZENvbXBvbmVudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgZHJlZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBncmFkWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBn
cmFkWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsb2QsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29mZnNldCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmlhcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb21wLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNhbXBsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBtaW5sb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqcEZvcndhcmQpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGJvb2wgZm9yd2FyZDsK
KysgICAgICAgIHN0ZDo6c3RyaW5nIGFyZ3NXaXRob3V0RHJlZiA9IHNwaXJ2X2Nyb3NzOjpDb21w
aWxlck1TTDo6dG9fZnVuY3Rpb25fYXJncygKKysgICAgICAgICAgICBpbWcsIGltZ1R5cGUsIGlz
RmV0Y2gsIGlzR2F0aGVyLCBpc1Byb2osIGNvb3JkLCBjb29yZENvbXBvbmVudHMsIDAsIGdyYWRY
LCBncmFkWSwgbG9kLAorKyAgICAgICAgICAgIGNvZmZzZXQsIG9mZnNldCwgYmlhcywgY29tcCwg
c2FtcGxlLCBtaW5sb2QsICZmb3J3YXJkKTsKKysKKysgICAgICAgIGlmICghZHJlZikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBpZiAocEZvcndhcmQpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAqcEZvcndhcmQgPSBmb3J3YXJkOworKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICByZXR1cm4gYXJnc1dpdGhvdXREcmVmOworKyAgICAgICAgfQorKyAgICAgICAgLy8gQ29u
dmVydCB0byBhcmd1bWVudHMgdG8gQU5HTEV0ZXh0dXJlLgorKyAgICAgICAgc3RkOjpzdHJpbmcg
YXJncyA9IHRvX2V4cHJlc3Npb24oaW1nKTsKKysgICAgICAgIGFyZ3MgKz0gIiwgIjsKKysgICAg
ICAgIGFyZ3MgKz0gYXJnc1dpdGhvdXREcmVmOworKyAgICAgICAgYXJncyArPSAiLCAiOworKwor
KyAgICAgICAgZm9yd2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGZvcndhcmQg
JiYgc2hvdWxkX2ZvcndhcmQoZHJlZik7CisrICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJ
UlR5cGUgJmRyZWZUeXBlID0gZXhwcmVzc2lvbl90eXBlKGRyZWYpOworKyAgICAgICAgc3RkOjpz
dHJpbmcgZHJlZkV4cHI7CisrICAgICAgICB1aW50MzJfdCBhbHRDb29yZENvbXBvbmVudCA9IDA7
CisrICAgICAgICBzd2l0Y2ggKGltZ1R5cGUuaW1hZ2UuZGltKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNhc2Ugc3B2OjpEaW0yRDoKKysgICAgICAgICAgICAgICAgYWx0Q29vcmRDb21wb25l
bnQgPSAyOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIHNwdjo6
RGltM0Q6CisrICAgICAgICAgICAgY2FzZSBzcHY6OkRpbUN1YmU6CisrICAgICAgICAgICAgICAg
IGFsdENvb3JkQ29tcG9uZW50ID0gMzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAg
ICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBpZiAoaXNQcm9qKQorKyAgICAg
ICAgICAgIGRyZWZFeHByID0gc3BpcnZfY3Jvc3M6OmpvaW4odG9fZW5jbG9zZWRfZXhwcmVzc2lv
bihkcmVmKSwgIiAvICIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b19leHRyYWN0X2NvbXBvbmVudF9leHByZXNzaW9uKGNvb3JkLCBhbHRDb29yZENvbXBvbmVu
dCkpOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRyZWZFeHByID0gdG9fZXhwcmVzc2lv
bihkcmVmKTsKKysKKysgICAgICAgIGlmIChkcmVmVHlwZS5iYXNldHlwZSA9PSBzcGlydl9jcm9z
czo6U1BJUlR5cGU6OkhhbGYpCisrICAgICAgICAgICAgZHJlZkV4cHIgPSBjb252ZXJ0X3RvX2Yz
MihkcmVmRXhwciwgMSk7CisrCisrICAgICAgICBhcmdzICs9IGRyZWZFeHByOworKyAgICAgICAg
YXJncyArPSAiLCAiOworKyAgICAgICAgYXJncyArPSB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVz
c2lvbihpbWcpOworKworKyAgICAgICAgaWYgKHBGb3J3YXJkKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1
cm4gYXJnczsKKysgICAgfQorKworKyAgICAvLyBPdmVycmlkZSBmdW5jdGlvbiBwcm90b3R5cGUg
ZW1pdHRlciB0byBpbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIGNvbWUKKysgICAg
Ly8gdG9nZXRoZXIgd2l0aCB0aGUgc2hhZG93IHNhbXBsZXIuIE5PVEUoaHFsZSk6IFRoaXMgaXMg
anVzdCA5MCUgY29weSBvZiBzcGlydl9tc2wncyBjb2RlLgorKyAgICAvLyBUaGUgYmV0dGVyIHdh
eSBpcyBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIGEgUFIgb24gc3BpcnYtY3Jvc3MgcmVwbyBkaXJl
Y3RseS4gQnV0IHRoaXMgc2hvdWxkCisrICAgIC8vIGJlIGEgd29yayBhcm91bmQgc29sdXRpb24g
Zm9yIG5vdy4KKysgICAgdm9pZCBlbWl0X2Z1bmN0aW9uX3Byb3RvdHlwZShzcGlydl9jcm9zczo6
U1BJUkZ1bmN0aW9uICZmdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNwaXJ2X2Nyb3NzOjpCaXRzZXQgJikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgLy8g
VHVybiBvZmYgY2xhbmctZm9ybWF0IHRvIGVhc2llciBjb21wYXJlIHdpdGggb3JpZ2luYWwgY29k
ZQorKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorKyAgICAgICAgdXNpbmcgbmFtZXNwYWNl
IHNwaXJ2X2Nyb3NzOworKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIHNwdjsKKysgICAgICAgIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CisrCisrICAgICAgICBpZiAoZnVuYy5zZWxmICE9IGlyLmRlZmF1
bHRfZW50cnlfcG9pbnQpCisrICAgICAgICAgICAgYWRkX2Z1bmN0aW9uX292ZXJsb2FkKGZ1bmMp
OworKworKyAgICAgICAgbG9jYWxfdmFyaWFibGVfbmFtZXMgPSByZXNvdXJjZV9uYW1lczsKKysg
ICAgICAgIHN0cmluZyBkZWNsOworKworKyAgICAgICAgcHJvY2Vzc2luZ19lbnRyeV9wb2ludCA9
IGZ1bmMuc2VsZiA9PSBpci5kZWZhdWx0X2VudHJ5X3BvaW50OworKworKyAgICAgICAgLy8gTWV0
YWwgaGVscGVyIGZ1bmN0aW9ucyBtdXN0IGJlIHN0YXRpYyBmb3JjZS1pbmxpbmUgb3RoZXJ3aXNl
IHRoZXkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aGVuIGxpbmtlZCB0b2dldGhlciBpbiBhIHNpbmds
ZSBNZXRhbGxpYi4KKysgICAgICAgIGlmICghcHJvY2Vzc2luZ19lbnRyeV9wb2ludCkKKysgICAg
ICAgICAgICBzdGF0ZW1lbnQoInN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu
bGluZSkpIik7CisrCisrICAgICAgICBhdXRvICZ0eXBlID0gZ2V0PFNQSVJUeXBlPihmdW5jLnJl
dHVybl90eXBlKTsKKysKKysgICAgICAgIGlmICghdHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9v
cHRpb25zLmZvcmNlX25hdGl2ZV9hcnJheXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8g
V2UgY2Fubm90IHJldHVybiBuYXRpdmUgYXJyYXlzIGluIE1TTCwgc28gInJldHVybiIgdGhyb3Vn
aCBhbiBvdXQgdmFyaWFibGUuCisrICAgICAgICAgICAgZGVjbCArPSAidm9pZCI7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZGVjbCArPSBmdW5j
X3R5cGVfZGVjbCh0eXBlKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGRlY2wgKz0gIiAiOwor
KyAgICAgICAgZGVjbCArPSB0b19uYW1lKGZ1bmMuc2VsZik7CisrICAgICAgICBkZWNsICs9ICIo
IjsKKysKKysgICAgICAgIGlmICghdHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25zLmZv
cmNlX25hdGl2ZV9hcnJheXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gRmFrZSBhcnJh
eXMgcmV0dXJucyBieSB3cml0aW5nIHRvIGFuIG91dCBhcnJheSBpbnN0ZWFkLgorKyAgICAgICAg
ICAgIGRlY2wgKz0gInRocmVhZCAiOworKyAgICAgICAgICAgIGRlY2wgKz0gdHlwZV90b19nbHNs
KHR5cGUpOworKyAgICAgICAgICAgIGRlY2wgKz0gIiAoJlNQSVJWX0Nyb3NzX3JldHVybl92YWx1
ZSkiOworKyAgICAgICAgICAgIGRlY2wgKz0gdHlwZV90b19hcnJheV9nbHNsKHR5cGUpOworKyAg
ICAgICAgICAgIGlmICghZnVuYy5hcmd1bWVudHMuZW1wdHkoKSkKKysgICAgICAgICAgICAgICAg
ZGVjbCArPSAiLCAiOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHByb2Nlc3NpbmdfZW50
cnlfcG9pbnQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG1zbF9vcHRpb25zLmFyZ3Vt
ZW50X2J1ZmZlcnMpCisrICAgICAgICAgICAgICAgIGRlY2wgKz0gZW50cnlfcG9pbnRfYXJnc19h
cmd1bWVudF9idWZmZXIoIWZ1bmMuYXJndW1lbnRzLmVtcHR5KCkpOworKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICAgICAgZGVjbCArPSBlbnRyeV9wb2ludF9hcmdzX2NsYXNzaWMoIWZ1
bmMuYXJndW1lbnRzLmVtcHR5KCkpOworKworKyAgICAgICAgICAgIC8vIElmIGVudHJ5IHBvaW50
IGZ1bmN0aW9uIGhhcyB2YXJpYWJsZXMgdGhhdCByZXF1aXJlIGVhcmx5IGRlY2xhcmF0aW9uLAor
KyAgICAgICAgICAgIC8vIGVuc3VyZSB0aGV5IGVhY2ggaGF2ZSBhbiBlbXB0eSBpbml0aWFsaXpl
ciwgY3JlYXRpbmcgb25lIGlmIG5lZWRlZC4KKysgICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUg
YXQgdGhpcyBsYXRlIHN0YWdlIGJlY2F1c2UgdGhlIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb24K
KysgICAgICAgICAgICAvLyBpcyBjbGVhcmVkIGFmdGVyIGVhY2ggY29tcGlsYXRpb24gcGFzcy4K
KysgICAgICAgICAgICBmb3IgKGF1dG8gdmFyX2lkIDogdmFyc19uZWVkaW5nX2Vhcmx5X2RlY2xh
cmF0aW9uKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byAmZWRfdmFyID0g
Z2V0PFNQSVJWYXJpYWJsZT4odmFyX2lkKTsKKysgICAgICAgICAgICAgICAgSUQgJmluaXRpYWxp
emVyID0gZWRfdmFyLmluaXRpYWxpemVyOworKyAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxp
emVyKQorKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBpci5pbmNyZWFzZV9ib3Vu
ZF9ieSgxKTsKKysKKysgICAgICAgICAgICAgICAgLy8gRG8gbm90IG92ZXJyaWRlIHByb3BlciBp
bml0aWFsaXplcnMuCisrICAgICAgICAgICAgICAgIGlmIChpci5pZHNbaW5pdGlhbGl6ZXJdLmdl
dF90eXBlKCkgPT0gVHlwZU5vbmUgfHwgaXIuaWRzW2luaXRpYWxpemVyXS5nZXRfdHlwZSgpID09
IFR5cGVFeHByZXNzaW9uKQorKyAgICAgICAgICAgICAgICAgICAgc2V0PFNQSVJFeHByZXNzaW9u
PihlZF92YXIuaW5pdGlhbGl6ZXIsICJ7fSIsIGVkX3Zhci5iYXNldHlwZSwgdHJ1ZSk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgZm9yIChhdXRvICZhcmcgOiBmdW5j
LmFyZ3VtZW50cykKKysgICAgICAgIHsKKysgICAgICAgICAgICB1aW50MzJfdCBuYW1lX2lkID0g
YXJnLmlkOworKworKyAgICAgICAgICAgIGF1dG8gKnZhciA9IG1heWJlX2dldDxTUElSVmFyaWFi
bGU+KGFyZy5pZCk7CisrICAgICAgICAgICAgaWYgKHZhcikKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIHRoZSB2YXJp
YWJsZSwgbWFrZSBzdXJlIHdlIG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCisrICAgICAg
ICAgICAgICAgIC8vIE91ciBhbGlhcyBpcyBqdXN0IGEgc2hhZG93IHZhcmlhYmxlLgorKyAgICAg
ICAgICAgICAgICBpZiAoYXJnLmFsaWFzX2dsb2JhbF92YXJpYWJsZSAmJiB2YXItPmJhc2V2YXJp
YWJsZSkKKysgICAgICAgICAgICAgICAgICAgIG5hbWVfaWQgPSB2YXItPmJhc2V2YXJpYWJsZTsK
KysKKysgICAgICAgICAgICAgICAgdmFyLT5wYXJhbWV0ZXIgPSAmYXJnOyAvLyBIb2xkIGEgcG9p
bnRlciB0byB0aGUgcGFyYW1ldGVyIHNvIHdlIGNhbiBpbnZhbGlkYXRlIHRoZSByZWFkb25seSBm
aWVsZCBpZiBuZWVkZWQuCisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGFkZF9sb2Nh
bF92YXJpYWJsZV9uYW1lKG5hbWVfaWQpOworKworKyAgICAgICAgICAgIGRlY2wgKz0gYXJndW1l
bnRfZGVjbChhcmcpOworKworKyAgICAgICAgICAgIGJvb2wgaXNfZHluYW1pY19pbWdfc2FtcGxl
ciA9IGhhc19leHRlbmRlZF9kZWNvcmF0aW9uKGFyZy5pZCwgU1BJUlZDcm9zc0RlY29yYXRpb25E
eW5hbWljSW1hZ2VTYW1wbGVyKTsKKysKKysgICAgICAgICAgICBhdXRvICZhcmdfdHlwZSA9IGdl
dDxTUElSVHlwZT4oYXJnLnR5cGUpOworKyAgICAgICAgICAgIGlmIChhcmdfdHlwZS5iYXNldHlw
ZSA9PSBTUElSVHlwZTo6U2FtcGxlZEltYWdlICYmICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gTWFudWZhY3R1cmUgYXV0b21hdGlj
IHBsYW5lIGFyZ3MgZm9yIG11bHRpcGxhbmFyIHRleHR1cmUKKysgICAgICAgICAgICAgICAgdWlu
dDMyX3QgcGxhbmVzID0gMTsKKysgICAgICAgICAgICAgICAgaWYgKGF1dG8gKmNvbnN0ZXhwcl9z
YW1wbGVyID0gZmluZF9jb25zdGV4cHJfc2FtcGxlcihuYW1lX2lkKSkKKysgICAgICAgICAgICAg
ICAgICAgIGlmIChjb25zdGV4cHJfc2FtcGxlci0+eWNiY3JfY29udmVyc2lvbl9lbmFibGUpCisr
ICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVzID0gY29uc3RleHByX3NhbXBsZXItPnBsYW5l
czsKKysgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8IHBsYW5lczsgaSsr
KQorKyAgICAgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsICIsIGFyZ3VtZW50X2RlY2wo
YXJnKSwgcGxhbmVfbmFtZV9zdWZmaXgsIGkpOworKworKyAgICAgICAgICAgICAgICAvLyBNYW51
ZmFjdHVyZSBhdXRvbWF0aWMgc2FtcGxlciBhcmcgZm9yIFNhbXBsZWRJbWFnZSB0ZXh0dXJlCisr
ICAgICAgICAgICAgICAgIGlmIChhcmdfdHlwZS5pbWFnZS5kaW0gIT0gRGltQnVmZmVyKQorKyAg
ICAgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIHRocmVhZCBjb25zdCAiLCBzYW1wbGVy
X3R5cGUoYXJnX3R5cGUpLCAiICIsIHRvX3NhbXBsZXJfZXhwcmVzc2lvbihhcmcuaWQpKTsKKysg
ICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLy8gTWFudWZhY3R1cmUgYXV0b21hdGljIHN3
aXp6bGUgYXJnLgorKyAgICAgICAgICAgIGlmIChtc2xfb3B0aW9ucy5zd2l6emxlX3RleHR1cmVf
c2FtcGxlcyAmJiBoYXNfc2FtcGxlZF9pbWFnZXMgJiYgaXNfc2FtcGxlZF9pbWFnZV90eXBlKGFy
Z190eXBlKSAmJgorKyAgICAgICAgICAgICAgICAhaXNfZHluYW1pY19pbWdfc2FtcGxlcikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lzX2FycmF5ID0gIWFyZ190
eXBlLmFycmF5LmVtcHR5KCk7CisrICAgICAgICAgICAgICAgIGRlY2wgKz0gam9pbigiLCBjb25z
dGFudCB1aW50IiwgYXJnX2lzX2FycmF5ID8gIiogIiA6ICImICIsIHRvX3N3aXp6bGVfZXhwcmVz
c2lvbihhcmcuaWQpKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYgKGJ1ZmZl
cnNfcmVxdWlyaW5nX2FycmF5X2xlbmd0aC5jb3VudChuYW1lX2lkKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lzX2FycmF5ID0gIWFyZ190eXBlLmFycmF5LmVt
cHR5KCk7CisrICAgICAgICAgICAgICAgIGRlY2wgKz0gam9pbigiLCBjb25zdGFudCB1aW50Iiwg
YXJnX2lzX2FycmF5ID8gIiogIiA6ICImICIsIHRvX2J1ZmZlcl9zaXplX2V4cHJlc3Npb24obmFt
ZV9pZCkpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiAoaXNfc2FtcGxlZF9p
bWFnZV90eXBlKGFyZ190eXBlKSAmJiBhcmdfdHlwZS5pbWFnZS5kZXB0aCkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lzX2FycmF5ID0gIWFyZ190eXBlLmFycmF5
LmVtcHR5KCk7CisrICAgICAgICAgICAgICAgIC8vIEluc2VydCBzaGFkb3cgY29tcGFyZSBtb2Rl
IGZsYWcgdG8gdGhlIGFyZ3VtZW50IHNlcXVlbmNlOgorKyAgICAgICAgICAgICAgICBkZWNsICs9
IGpvaW4oIiwgY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAi
JiAiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4
cHJlc3Npb24oYXJnLmlkKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmICgm
YXJnICE9ICZmdW5jLmFyZ3VtZW50cy5iYWNrKCkpCisrICAgICAgICAgICAgICAgIGRlY2wgKz0g
IiwgIjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGRlY2wgKz0gIikiOworKyAgICAgICAgc3Rh
dGVtZW50KGRlY2wpOworKworKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9uCisrICAgIH0KKysK
KysgICAgLy8gT3ZlcnJpZGUgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHMgcGFzc2luZyBnZW5lcmF0
b3IgdG8gaW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1vZGUgZmxhZyB0byBjb21lCisrICAgIC8vIHRv
Z2V0aGVyIHdpdGggdGhlIHNoYWRvdyBzYW1wbGVyCisrICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmNf
Y2FsbF9hcmcoY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbjo6UGFyYW1ldGVyICZhcmcs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaWQpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIHN0ZDo6c3RyaW5nIGFyZ19zdHIgPSBzcGlydl9jcm9zczo6Q29t
cGlsZXJNU0w6OnRvX2Z1bmNfY2FsbF9hcmcoYXJnLCBpZCk7CisrCisrICAgICAgICBjb25zdCBz
cGlydl9jcm9zczo6U1BJUlR5cGUgJnR5cGUgPSBleHByZXNzaW9uX3R5cGUoaWQpOworKworKyAg
ICAgICAgaWYgKGlzX3NhbXBsZWRfaW1hZ2VfdHlwZSh0eXBlKSAmJiB0eXBlLmltYWdlLmRlcHRo
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIEluc2VydCBzaGFkb3cgY29tcGFyZSBtb2Rl
IGZsYWcgdG8gdGhlIGFyZ3VtZW50IHNlcXVlbmNlOgorKyAgICAgICAgICAgIC8vIE5lZWQgdG8g
Y2hlY2sgdGhlIGJhc2UgdmFyaWFibGUgaW4gY2FzZSB3ZSBuZWVkIHRvIGFwcGx5IGEgcXVhbGlm
aWVkIGFsaWFzLgorKyAgICAgICAgICAgIHVpbnQzMl90IHZhcl9pZCA9IDA7CisrICAgICAgICAg
ICAgYXV0byAqdmFyICAgICAgID0gbWF5YmVfZ2V0PHNwaXJ2X2Nyb3NzOjpTUElSVmFyaWFibGU+
KGlkKTsKKysgICAgICAgICAgICBpZiAodmFyKQorKyAgICAgICAgICAgICAgICB2YXJfaWQgPSB2
YXItPmJhc2V2YXJpYWJsZTsKKysKKysgICAgICAgICAgICBhcmdfc3RyICs9ICIsICIgKyB0b1No
YWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbih2YXJfaWQgPyB2YXJfaWQgOiBpZCk7CisrICAgICAg
ICB9CisrICAgICAgICByZXR1cm4gYXJnX3N0cjsKKysgICAgfQorKworKyAgICAvLyBBZGRpdGlv
bmFsIGZ1bmN0aW9ucworKyAgICB2b2lkIGFkZEJ1aWx0SW5SZXNvdXJjZXMoKQorKyAgICB7Cisr
ICAgICAgICB1aW50MzJfdCB2YXJJZCA9IGJ1aWxkX2NvbnN0YW50X3VpbnRfYXJyYXlfcG9pbnRl
cigpOworKyAgICAgICAgc2V0X25hbWUodmFySWQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVz
VmFyTmFtZSk7CisrICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBtYXRjaCBhbnl0aGluZy4K
KysgICAgICAgIHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29yYXRpb25EZXNjcmlwdG9y
U2V0LCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCk7CisrICAgICAgICBz
ZXRfZGVjb3JhdGlvbih2YXJJZCwgc3B2OjpEZWNvcmF0aW9uQmluZGluZywgMCk7CisrICAgICAg
ICBzZXRfZXh0ZW5kZWRfZGVjb3JhdGlvbih2YXJJZCwgc3BpcnZfY3Jvc3M6OlNQSVJWQ3Jvc3NE
ZWNvcmF0aW9uUmVzb3VyY2VJbmRleFByaW1hcnksIDApOworKyAgICAgICAgbUFOR0xFU2hhZG93
Q29tcGFyZU1vZGVzVmFySWQgPSB2YXJJZDsKKysgICAgfQorKworKyAgICB2b2lkIGFuYWx5emVT
aGFkZXJWYXJpYWJsZXMoKQorKyAgICB7CisrICAgICAgICBpci5mb3JfZWFjaF90eXBlZF9pZDxz
cGlydl9jcm9zczo6U1BJUlZhcmlhYmxlPihbdGhpc10odWludDMyX3QsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpcnZf
Y3Jvc3M6OlNQSVJWYXJpYWJsZSAmdmFyKSB7CisrICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jv
c3M6OlNQSVJUeXBlICZ0eXBlID0gZ2V0X3ZhcmlhYmxlX2RhdGFfdHlwZSh2YXIpOworKyAgICAg
ICAgICAgIHVpbnQzMl90IHZhcklkICAgICAgICAgICAgICAgICAgICA9IHZhci5zZWxmOworKwor
KyAgICAgICAgICAgIGlmICh2YXIuc3RvcmFnZSA9PSBzcHY6OlN0b3JhZ2VDbGFzc1VuaWZvcm1D
b25zdGFudCAmJiAhaXNfaGlkZGVuX3ZhcmlhYmxlKHZhcikpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICBpZiAoaXNfc2FtcGxlZF9pbWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1h
Z2UuZGVwdGgpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIG1IYXNE
ZXB0aFNhbXBsZXIgPSB0cnVlOworKworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmZW50cnlf
ZnVuYyA9IHRoaXMtPmdldDxzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uPihpci5kZWZhdWx0X2Vu
dHJ5X3BvaW50KTsKKysgICAgICAgICAgICAgICAgICAgIGVudHJ5X2Z1bmMuZml4dXBfaG9va3Nf
aW4ucHVzaF9iYWNrKFt0aGlzLCAmdHlwZSwgJnZhciwgdmFySWRdKCkgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNBcnJheVR5cGUgPSAhdHlwZS5hcnJheS5lbXB0eSgpOworKwor
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCgiY29uc3RhbnQgdW5pZm9ybTx1aW50
PiIsIGlzQXJyYXlUeXBlID8gIiogIiA6ICImICIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvU2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcklkKSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheVR5cGUgPyAiID0gJiIgOiAiID0gIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fbmFtZShtQU5HTEVTaGFkb3dD
b21wYXJlTW9kZXNWYXJJZCksICJbIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3BpcnZfY3Jvc3M6OmNvbnZlcnRfdG9fc3RyaW5nKAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0X21ldGFsX3Jlc291cmNlX2luZGV4KHZhciwgc3BpcnZfY3Jv
c3M6OlNQSVJUeXBlOjpJbWFnZSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiXTsiKTsKKysgICAgICAgICAgICAgICAgICAgIH0pOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgfSk7CisrICAgIH0KKysKKysgICAgc3RkOjpzdHJpbmcg
dG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odWludDMyX3QgaWQpCisrICAgIHsKKysgICAg
ICAgIGNvbnN0ZXhwciBjaGFyIGtDb21wYXJlTW9kZVN1ZmZpeFtdID0gIl9Db21wTW9kZSI7Cisr
ICAgICAgICBhdXRvICpjb21iaW5lZCAgICAgICAgICAgICAgICAgICAgICA9IG1heWJlX2dldDxz
cGlydl9jcm9zczo6U1BJUkNvbWJpbmVkSW1hZ2VTYW1wbGVyPihpZCk7CisrCisrICAgICAgICBz
dGQ6OnN0cmluZyBleHByID0gdG9fZXhwcmVzc2lvbihjb21iaW5lZCA/IGNvbWJpbmVkLT5pbWFn
ZSA6IHNwaXJ2X2Nyb3NzOjpWYXJpYWJsZUlEKGlkKSk7CisrICAgICAgICBhdXRvIGluZGV4ICAg
ICAgID0gZXhwci5maW5kX2ZpcnN0X29mKCdbJyk7CisrCisrICAgICAgICBpZiAoaW5kZXggPT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisrICAgICAgICAgICAgcmV0dXJuIGV4cHIgKyBrQ29tcGFyZU1v
ZGVTdWZmaXg7CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byBp
bWFnZUV4cHIgPSBleHByLnN1YnN0cigwLCBpbmRleCk7CisrICAgICAgICAgICAgYXV0byBhcnJh
eUV4cHIgPSBleHByLnN1YnN0cihpbmRleCk7CisrICAgICAgICAgICAgcmV0dXJuIGltYWdlRXhw
ciArIGtDb21wYXJlTW9kZVN1ZmZpeCArIGFycmF5RXhwcjsKKysgICAgICAgIH0KKysgICAgfQor
KworKyAgICBDb250ZXh0ICptQ29udGV4dDsKKysgICAgdWludDMyX3QgbUFOR0xFU2hhZG93Q29t
cGFyZU1vZGVzVmFySWQgPSAwOworKyAgICBib29sIG1IYXNEZXB0aFNhbXBsZXIgICAgICAgICAg
ICAgICAgICA9IGZhbHNlOworIH07CisgCistYW5nbGU6OlJlc3VsdCBDb252ZXJ0U3BpcnZUb01z
bCgKKy0gICAgQ29udGV4dCAqY29udGV4dCwKKythbmdsZTo6UmVzdWx0IENvbnZlcnRTcGlydlRv
TXNsKENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorLSAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKKy0gICAgY29uc3Qg
c3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGlu
Z3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1h
cDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVp
bnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsU2FtcGxlckJp
bmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWlu
dDMyX3Q+ICpzcHJpdkNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFu
c2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZFNoYWRlckluZm9PdXQpCitAQCAtMzY0LDcgKzEx
MDAsNyBAQCB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9CisgCistICAgIFNwaXJ2
VG9Nc2xDb21waWxlciBjb21waWxlck1zbChzdGQ6Om1vdmUoKnNwcml2Q29kZSkpOworKyAgICBT
cGlydlRvTXNsQ29tcGlsZXIgY29tcGlsZXJNc2woY29udGV4dCwgc3RkOjptb3ZlKCpzcHJpdkNv
ZGUpKTsKKyAKKyAgICAgLy8gTk9URShocWxlKTogc3BpcnYtY3Jvc3MgdXNlcyBleGNlcHRpb25z
IHRvIHJlcG9ydCBlcnJvciwgd2hhdCBzaG91bGQgd2UgZG8gaGVyZQorICAgICAvLyBpbiBjYXNl
IG9mIGVycm9yPworQEAgLTM4MCwyNyArMTExNiw2IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsCisgCisgfSAgLy8gbmFtZXNwYWNlCisgCistdm9pZCBUcmFuc2xh
dGVkU2hhZGVySW5mbzo6cmVzZXQoKQorLXsKKy0gICAgbWV0YWxTaGFkZXJTb3VyY2UuY2xlYXIo
KTsKKy0gICAgbWV0YWxMaWJyYXJ5ICAgICAgICAgPSBuaWw7CistICAgIGhhc1VCT0FyZ3VtZW50
QnVmZmVyID0gZmFsc2U7CistICAgIGZvciAobXRsOjpTYW1wbGVyQmluZGluZyAmYmluZGluZyA6
IGFjdHVhbFNhbXBsZXJCaW5kaW5ncykKKy0gICAgeworLSAgICAgICAgYmluZGluZy50ZXh0dXJl
QmluZGluZyA9IG10bDo6a01heFNoYWRlclNhbXBsZXJzOworLSAgICB9CistCistICAgIGZvciAo
dWludDMyX3QgJmJpbmRpbmcgOiBhY3R1YWxVQk9CaW5kaW5ncykKKy0gICAgeworLSAgICAgICAg
YmluZGluZyA9IG10bDo6a01heFNoYWRlckJ1ZmZlcnM7CistICAgIH0KKy0KKy0gICAgZm9yICh1
aW50MzJfdCAmYmluZGluZyA6IGFjdHVhbFhGQkJpbmRpbmdzKQorLSAgICB7CistICAgICAgICBi
aW5kaW5nID0gbXRsOjprTWF4U2hhZGVyQnVmZmVyczsKKy0gICAgfQorLX0KKy0KKyB2b2lkIEds
c2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJl
c291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hh
ZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwKK0BAIC00MzEsMTIgKzExNDYs
MTMgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUg
JnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICBvcHRpb25zLCBwcm9ncmFtU3RhdGUsICZ4ZmJP
bmx5SW50ZXJmYWNlSW5mbywgeGZiT25seVNoYWRlclNvdXJjZU91dCwKKyAgICAgICAgICAgICAm
eGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisgCistICAgICAg
ICBHbHNsYW5nQXNzaWduTG9jYXRpb25zKG9wdGlvbnMsIHByb2dyYW1TdGF0ZS5nZXRFeGVjdXRh
YmxlKCksIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywgJnhmYk9ubHlWYXJpYWJsZU1hcHMpOworKyAg
ICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhvcHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhl
Y3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCAmeGZiT25seUludGVyZmFjZUluZm8s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4ZmJPbmx5VmFyaWFibGVNYXBzKTsK
KyAgICAgICAgICp4ZmJPbmx5VlNWYXJpYWJsZUluZm9NYXBPdXQgPSBzdGQ6Om1vdmUoeGZiT25s
eVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisgICAgIH0KKyB9CisgCisr
CisgYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0U2hhZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVyU3RhZ2VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorQEAgLTQ3OCw3
ICsxMTk0LDcgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5z
bGF0ZWRTaGFkZXJJbmZvICptc2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8p
CisgeworICAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBiaW5kaW5ncyBn
ZW5lcmF0ZWQgYnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1hcC4KKy0gICAg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5k
aW5nczsKKysgICAgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9Pcmln
aW5hbEJpbmRpbmdzOworICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOworICAgICBmb3IgKHVp
bnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVy
SWR4KQorICAgICB7CitAQCAtNDg5LDcgKzEyMDUsNyBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJT
b3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgfQor
ICAgICB9CisgICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIFhGQiBidWZmZXJzIGJpbmRpbmdzIHBy
b2R1Y2VkIGJ5IGZyb250IGVuZC4KKy0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1
aW50MzJfdD4geGZiT3JpZ2luYWxCaW5kaW5nczsKKysgICAgYW5nbGU6Okhhc2hNYXA8dWludDMy
X3QsIHVpbnQzMl90PiB4ZmJPcmlnaW5hbEJpbmRpbmdzOworICAgICBmb3IgKHVpbnQzMl90IGJ1
ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGtNYXhTaGFkZXJYRkJzOyArK2J1ZmZlcklkeCkKKyAg
ICAgeworICAgICAgICAgc3RkOjpzdHJpbmcgYnVmZmVyTmFtZSA9IHJ4OjpHZXRYZmJCdWZmZXJO
YW1lKGJ1ZmZlcklkeCk7CitAQCAtNTMzLDYgKzEyNDksNSBAQCB2b2lkIEdsc2xhbmdHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorIAorICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorLQorIH0gIC8vIG5hbWVzcGFjZSBt
dGwKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmggYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKK2luZGV4IDg3ZGMyMTcuLmY4NTcw
MzQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lv
bl9xdWVyeV9wb29sLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2Nj
bHVzaW9uX3F1ZXJ5X3Bvb2wuaAorQEAgLTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8v
IENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorIC8vCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9v
Y2NsdXNpb25fcXVlcnlfcG9vbC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
b2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0KK2luZGV4IDM2OGRiZjQuLjdjYzg5OTAgMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29s
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLm1tCitAQCAtMSw1ICsxLDUgQEAKKyAvLworLS8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gQ29weXJpZ2h0
IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgLy8K
K0BAIC01Miw4ICs1Miw3IEBACisgICAgIHsKKyAgICAgICAgIC8vIEZpcnN0IGFsbG9jYXRpb24K
KyAgICAgICAgIEFOR0xFX1RSWShCdWZmZXI6Ok1ha2VCdWZmZXJXaXRoUmVzT3B0KGNvbnRleHRN
dGwsIE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlLAorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVs
bHB0ciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUsIG51bGxwdHIsICZtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sKSk7CisgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5nZXQoKS5sYWJl
bCA9IEAiT2NjbHVzaW9uUXVlcnlQb29sIjsKKyAgICAgfQorICAgICBlbHNlIGlmIChjdXJyZW50
T2Zmc2V0ICsga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSA+IG1SZW5kZXJQYXNzUmVzdWx0c1Bv
b2wtPnNpemUoKSkKK0BAIC04OCw2ICs4NywxMiBAQAorICAgICBpZiAoY3VycmVudE9mZnNldCA9
PSAwKQorICAgICB7CisgICAgICAgICBtUmVzZXRGaXJzdFF1ZXJ5ID0gY2xlYXJPbGRWYWx1ZTsK
KysgICAgICAgIGlmICghY2xlYXJPbGRWYWx1ZSAmJiAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgp
LT5nZXRGZWF0dXJlcygpLmFsbG93QnVmZmVyUmVhZFdyaXRlLmVuYWJsZWQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgLy8gSWYgb2xkIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IG5lZWRzIHRvIGJl
IHJldGFpbmVkIGFuZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlcgorKyAgICAgICAgICAg
IC8vIHJlYWQtd3JpdGUsIHdlIG5lZWQgYW4gYWRkaXRpb25hbCBvZmZzZXQgdG8gc3RvcmUgdGhl
IG9sZCB2YWx1ZSBvZiB0aGUgcXVlcnkuCisrICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlUXVl
cnlPZmZzZXQoY29udGV4dE10bCwgcXVlcnksIGZhbHNlKTsKKysgICAgICAgIH0KKyAgICAgfQor
IAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtMTEzLDkgKzExOCwz
MyBAQAorICAgICB9CisgCisgICAgIFJlbmRlclV0aWxzICZ1dGlscyAgICAgICAgICAgICAgPSBj
b250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisrICAgIEJsaXRDb21tYW5kRW5j
b2RlciAqYmxpdEVuY29kZXIgPSBudWxscHRyOworKyAgICAvLyBDb21iaW5lIHRoZSB2YWx1ZXMg
c3RvcmVkIGluIHRoZSBvZmZzZXRzIGFsbG9jYXRlZCBmb3IgZmlyc3QgcXVlcnkKKysgICAgaWYg
KG1BbGxvY2F0ZWRRdWVyaWVzWzBdKQorKyAgICB7CisrICAgICAgICBjb25zdCBCdWZmZXJSZWYg
JmRzdEJ1ZiA9IG1BbGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVy
KCk7CisrICAgICAgICBjb25zdCBWaXNpYmlsaXR5QnVmZmVyT2Zmc2V0c010bCAmYWxsb2NhdGVk
T2Zmc2V0cyA9CisrICAgICAgICAgICAgbUFsbG9jYXRlZFF1ZXJpZXNbMF0tPmdldEFsbG9jYXRl
ZFZpc2liaWxpdHlPZmZzZXRzKCk7CisrICAgICAgICBpZiAoIW1SZXNldEZpcnN0UXVlcnkgJiYK
KysgICAgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFs
bG93QnVmZmVyUmVhZFdyaXRlLmVuYWJsZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8g
SWYgd2UgY2Fubm90IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzYW1lIGJ1ZmZlciBpbiBzaGFkZXIu
IFdlIG5lZWQgdG8gY29weSB0aGUgb2xkCisrICAgICAgICAgICAgLy8gdmFsdWUgb2YgZmlyc3Qg
cXVlcnkgdG8gZmlyc3Qgb2Zmc2V0IGFsbG9jYXRlZCBmb3IgaXQuCisrICAgICAgICAgICAgYmxp
dEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKysgICAgICAg
ICAgICBibGl0RW5jb2Rlci0+Y29weUJ1ZmZlcihkc3RCdWYsIDAsIG1SZW5kZXJQYXNzUmVzdWx0
c1Bvb2wsIGFsbG9jYXRlZE9mZnNldHMuZnJvbnQoKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplKTsKKysgICAgICAgICAgICB1
dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCBmYWxzZSwgYWxsb2NhdGVk
T2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVu
ZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQor
KyAgICAgICAgeworKyAgICAgICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNv
bnRleHRNdGwsICFtUmVzZXRGaXJzdFF1ZXJ5LCBhbGxvY2F0ZWRPZmZzZXRzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2ws
IGRzdEJ1Zik7CisrICAgICAgICB9CisrICAgIH0KKyAKKyAgICAgLy8gQ29tYmluZSB0aGUgdmFs
dWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggb2YgdGhlIHJlbWFp
bmluZyBxdWVyaWVzCistICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJp
ZXMuc2l6ZSgpOyArK2kpCisrICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbUFsbG9jYXRlZFF1
ZXJpZXMuc2l6ZSgpOyArK2kpCisgICAgIHsKKyAgICAgICAgIFF1ZXJ5TXRsICpxdWVyeSA9IG1B
bGxvY2F0ZWRRdWVyaWVzW2ldOworICAgICAgICAgaWYgKCFxdWVyeSkKK0BAIC0xMjYsMTIgKzE1
NSwxMiBAQAorICAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWYgPSBtQWxsb2NhdGVkUXVl
cmllc1tpXS0+Z2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpOworICAgICAgICAgY29uc3QgVmlz
aWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQorICAgICAgICAgICAg
IG1BbGxvY2F0ZWRRdWVyaWVzW2ldLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOwor
LSAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10bCwgLyoqIGtl
ZXBPbGRWYWx1ZSAqLyBpID09IDAgJiYgIW1SZXNldEZpcnN0UXVlcnksCistICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLCBkc3RCdWYpOworKyAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1
bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsIG1SZW5kZXJQYXNzUmVzdWx0
c1Bvb2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RCdWYpOwor
ICAgICB9CisgCisgICAgIC8vIFJlcXVlc3Qgc3luY2hyb25pemF0aW9uIGFuZCBjbGVhbnVwCist
ICAgIEJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0
Q29tbWFuZEVuY29kZXIoKTsKKysgICAgYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0
Q29tbWFuZEVuY29kZXIoKTsKKyAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQWxsb2NhdGVk
UXVlcmllcy5zaXplKCk7ICsraSkKKyAgICAgeworICAgICAgICAgUXVlcnlNdGwgKnF1ZXJ5ID0g
bUFsbG9jYXRlZFF1ZXJpZXNbaV07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9yZW5kZXJfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVuZGVyX3V0aWxzLmgKK2luZGV4IDZiOTY3ZGUuLmQwYTQ4MzcgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCitAQCAtNiw2ICs2LDgg
QEAKKyAvLyBtdGxfcmVuZGVyX3V0aWxzLmg6CisgLy8gICAgRGVmaW5lcyB0aGUgY2xhc3MgaW50
ZXJmYWNlIGZvciBSZW5kZXJVdGlscywgd2hpY2ggY29udGFpbnMgbWFueSB1dGlsaXR5IGZ1bmN0
aW9ucyBhbmQgc2hhZGVycworIC8vICAgIGZvciBjb252ZXJ0aW5nLCBibGl0dGluZywgY29weWlu
ZyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgZGF0YSwgYW5kIG1hbnkgbW9yZS4KKysvLyBOT1RFKGhx
bGUpOiBDb25zaWRlciBzcGxpdHRpbmcgdGhpcyBjbGFzcyBpbnRvIG11bHRpcGxlIGNsYXNzZXMg
ZWFjaCBkb2luZyBkaWZmZXJlbnQgdXRpbGl0aWVzLgorKy8vIFRoaXMgY2xhc3MgaGFzIGJlY29t
ZSB0b28gYmlnLgorIC8vCisgCisgI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExf
UkVOREVSX1VUSUxTX0hfCitAQCAtODksNiArOTEsOCBAQCBzdHJ1Y3QgQ29sb3JCbGl0UGFyYW1z
IDogcHVibGljIEJsaXRQYXJhbXMKKyBzdHJ1Y3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyA6IHB1
YmxpYyBCbGl0UGFyYW1zCisgeworICAgICBUZXh0dXJlUmVmIHNyY1N0ZW5jaWw7CisrICAgIHVp
bnQzMl90IHNyY1N0ZW5jaWxMZXZlbCA9IDA7CisrICAgIHVpbnQzMl90IHNyY1N0ZW5jaWxMYXll
ciA9IDA7CisgfTsKKyAKKyAvLyBTdGVuY2lsIGJsaXQgdmlhIGFuIGludGVybWVkaWF0ZSBidWZm
ZXIuIE5PVEU6IHNvdXJjZSBkZXB0aCB0ZXh0dXJlIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorQEAg
LTMwOSwyMSArMzEzLDE3IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmds
ZTo6Tm9uQ29weWFibGUKKyAgIHB1YmxpYzoKKyAgICAgdm9pZCBvbkRlc3Ryb3koKTsKKyAKKy0g
ICAgLy8gQ29udmVydCBpbmRleCBidWZmZXIuCisgICAgIGFuZ2xlOjpSZXN1bHQgY29udmVydElu
ZGV4QnVmZmVyR1BVKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4Q29udmVyc2lvblBhcmFtcyAmcGFyYW1z
KTsKKy0gICAgLy8gR2VuZXJhdGUgdHJpYW5nbGUgZmFuIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3
QXJyYXlzKCkuCisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tQXJy
YXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxvb3BGcm9tQXJyYXlQYXJh
bXMgJnBhcmFtcyk7CisgICAgIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRleCBidWZmZXIg
Zm9yIGdsRHJhd0VsZW1lbnRzKCkuCisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5C
dWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1z
ICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgCistICAgIC8vIEdlbmVy
YXRlIGxpbmUgbG9vcCBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorICAgICBhbmds
ZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJheVBhcmFtcyAmcGFyYW1zKTsKKy0g
ICAgLy8gR2VuZXJhdGUgbGluZSBsb29wJ3MgbGFzdCBzZWdtZW50IGluZGV4IGJ1ZmZlciBmb3Ig
Z2xEcmF3QXJyYXlzKCkuCistICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHByaW1pdGl2ZSByZXN0
YXJ0IGlzIG5vdCBlbmFibGVkLgorICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BM
YXN0U2VnbWVudChDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmaXJzdFZlcnRleCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGFzdFZlcnRl
eCwKK0BAIC0zNDAsNiArMzQwLDE4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwg
OiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29w
TGFzdFNlZ21lbnRGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAKKysgICAgYW5nbGU6
OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAq
Y29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aW5kaWNlc0dlbmVyYXRlZCk7CisrCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRp
dmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdl
bmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworKworKyAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihD
b250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysKKyAgIHByaXZhdGU6CisgICAg
IC8vIEluZGV4IGdlbmVyYXRvciBjb21wdXRlIHBpcGVsaW5lczoKKyAgICAgLy8gIC0gRmlyc3Qg
ZGltZW5zaW9uOiBpbmRleCB0eXBlLgorQEAgLTM0OCw3ICszNjAsNiBAQCBjbGFzcyBJbmRleEdl
bmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICBzdGQ6OmFy
cmF5PHN0ZDo6YXJyYXk8QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+Piwg
Mj4sCisgICAgICAgICAgICAgICAgICAgIGFuZ2xlOjpFbnVtU2l6ZTxnbDo6RHJhd0VsZW1lbnRz
VHlwZT4oKT47CisgCistICAgIC8vIEdldCBjb21wdXRlIHBpcGVsaW5lIHRvIGNvbnZlcnQgaW5k
ZXggYmV0d2VlbiBidWZmZXJzLgorICAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxp
bmVTdGF0ZT4+IGdldEluZGV4Q29udmVyc2lvblBpcGVsaW5lKAorICAgICAgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCwKKyAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHNyY1R5cGUsCitA
QCAtMzc1LDcgKzM4Niw4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmds
ZTo6Tm9uQ29weWFibGUKKyAgICAgICAgIC8vIE11c3QgYmUgbXVsdGlwbGVzIG9mIGtJbmRleEJ1
ZmZlck9mZnNldEFsaWdubWVudAorICAgICAgICAgdWludDMyX3QgZHN0T2Zmc2V0KTsKKyAgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90ICppbmRpY2VzR2VuZXJhdGVkKTsKKyAKKyAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxp
bmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlHUFUoCisgICAgICAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorQEAgLTM5Myw2ICs0MDUsMTEgQEAgY2xhc3MgSW5kZXhHZW5lcmF0b3JVdGls
cyBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICAgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCwKKyAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAK
KysgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoQ29udGV4
dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJh
dGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworKworICAgICBJbmRleENv
bnZlcnNpb25QaXBlbGluZUFycmF5IG1JbmRleENvbnZlcnNpb25QaXBlbGluZUNhY2hlczsKKyAK
KyAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtVHJpRmFuRnJvbUVsZW1BcnJheUdl
bmVyYXRvclBpcGVsaW5lQ2FjaGVzOworQEAgLTQyOSw3ICs0NDYsNyBAQCBjbGFzcyBNaXBtYXBV
dGlscyBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgcHVibGljOgorICAgICB2b2lkIG9u
RGVzdHJveSgpOworIAorLSAgICAvLyBDb21wdXRlIGJhc2VkIG1pcG1hcCBnZW5lcmF0aW9uLiBP
bmx5IHBvc3NpYmxlIGZvciAzRCB0ZXh0dXJlIGZvciBub3cuCisrICAgIC8vIENvbXB1dGUgYmFz
ZWQgbWlwbWFwIGdlbmVyYXRpb24uCisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVNaXBtYXBD
UyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVGV4dHVyZVJlZiAmc3JjVGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKK0BAIC00MzcsOSArNDU0LDE1IEBAIGNs
YXNzIE1pcG1hcFV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgCisgICBwcml2YXRl
OgorICAgICB2b2lkIGVuc3VyZTNETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250
ZXh0TXRsICpjb250ZXh0TXRsKTsKKysgICAgdm9pZCBlbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisrICAgIHZvaWQgZW5zdXJl
MkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4
dE10bCk7CisrICAgIHZvaWQgZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6
ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgCisgICAgIC8vIE1pcG1hcHMgZ2VuZXJhdGlu
ZyBjb21wdXRlIHBpcGVsaW5lOgorICAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxp
bmVTdGF0ZT4+IG0zRE1pcEdlbmVyYXRvclBpcGVsaW5lOworKyAgICBBdXRvT2JqQ1B0cjxpZDxN
VExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lOworKyAgICBB
dXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG0yREFycmF5TWlwR2VuZXJh
dG9yUGlwZWxpbmU7CisrICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRl
Pj4gbUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZTsKKyB9OworIAorIC8vIFV0aWwgY2xhc3MgZm9y
IGhhbmRsaW5nIHBpeGVscyBjb3B5IGJldHdlZW4gYnVmZmVycyBhbmQgdGV4dHVyZXMKK0BAIC01
NDMsNiArNTY2LDIxIEBAIGNsYXNzIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlscyBmaW5hbCA6
IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBSZW5kZXJQaXBlbGluZUNhY2hlIG1Db21wb25lbnRz
RXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyB9OworIAorKy8vIFV0aWwgY2xhc3MgZm9yIGhh
bmRsaW5nIHRyYW5zZm9ybSBmZWVkYmFjaworKyAgICBjbGFzcyBUcmFuc2Zvcm1GZWVkYmFja1V0
aWxzCisreworKyAgcHVibGljOgorKyAgICB2b2lkIG9uRGVzdHJveSgpOworKyAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gZ2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5k
ZXJQaXBlbGluZSgKKysgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICBS
ZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKysgICAgICAgIG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpOworKworKyAgcHJpdmF0ZToKKysgICAgQXV0b09iakNQ
dHI8aWQ8TVRMTGlicmFyeT4+IGNyZWF0ZU1zbFhmYkxpYnJhcnkoQ29udGV4dE10bCAqY29udGV4
dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRNc2wpOworK307CisrCisgLy8gUmVuZGVy
VXRpbHM6IGNvbnRhaW5lciBjbGFzcyBvZiB2YXJpb3VzIHV0aWwgY2xhc3NlcyBhYm92ZQorIGNs
YXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorIHsK
K0BAIC01ODcsNyArNjI1LDggQEAgY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwg
YW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5CdWZm
ZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxvb3BGcm9t
QXJyYXlQYXJhbXMgJnBhcmFtcyk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5C
dWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1z
ICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgCisgICAgIGFuZ2xlOjpS
ZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAqY29udGV4
dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworQEAgLTYz
OSw2ICs2NzgsMTkgQEAgY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6
Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0
ICZzcmNBbmdsZUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0Q29udmVydFBhcmFtcyAmcGFyYW1zKTsKKysg
ICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAm
cGlwZWxpbmVEZXNjKTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJl
c3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisrICAgIGFu
Z2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10
bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
KmluZGljZXNHZW5lcmF0ZWQpOworKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZl
UmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVk
KTsKKyAKKyAgIHByaXZhdGU6CisgICAgIC8vIG92ZXJyaWRlIEVycm9ySGFuZGxlcgorQEAgLTY0
Niw3ICs2OTgsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6
Tm9uQ29weWFibGUKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAorICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKKy0gICAgdm9pZCBoYW5kbGVFcnJv
cihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJv
ciAqZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbGluZSkgb3ZlcnJpZGU7CitAQCAtNjYyLDYgKzcxNCw3IEBAIGNs
YXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAg
ICBNaXBtYXBVdGlscyBtTWlwbWFwVXRpbHM7CisgICAgIHN0ZDo6YXJyYXk8Q29weVBpeGVsc1V0
aWxzLCBhbmdsZTo6RW51bVNpemU8UGl4ZWxUeXBlPigpPiBtQ29weVBpeGVsc1V0aWxzOworICAg
ICBWZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgbVZlcnRleEZvcm1hdFV0aWxzOworKyAgICBU
cmFuc2Zvcm1GZWVkYmFja1V0aWxzIG1UcmFuc2Zvcm1GZWVkYmFja1V0aWxzOworIH07CisgCisg
fSAgLy8gbmFtZXNwYWNlIG10bAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZW5kZXJfdXRpbHMubW0KK2luZGV4IGQyMjQ4MDEuLjMyYjMzY2EgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbQorKysrIGIvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMubW0KK0BAIC0xNSw2ICsx
NSw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgor
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisgI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKysjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbW9uLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF91dGlscy5oIgorQEAgLTU0LDEwICs1NSwxMiBAQAorICAgICBmbG9hdCBzcmNUZXhDb29yZHNb
M11bMl07CisgICAgIGludCBzcmNMZXZlbCAgICAgICAgID0gMDsKKyAgICAgaW50IHNyY0xheWVy
ICAgICAgICAgPSAwOworKyAgICBpbnQgc3JjTGV2ZWwyICAgICAgICA9IDA7CisrICAgIGludCBz
cmNMYXllcjIgICAgICAgID0gMDsKKyAgICAgdWludDhfdCBkc3RGbGlwWCAgICAgPSAwOworICAg
ICB1aW50OF90IGRzdEZsaXBZICAgICA9IDA7CisgICAgIHVpbnQ4X3QgZHN0THVtaW5hbmNlID0g
MDsgIC8vIGRlc3QgdGV4dHVyZSBpcyBsdW1pbmFjZQorLSAgICB1aW50OF90IHBhZGRpbmdbMTNd
OworKyAgICB1aW50OF90IHBhZGRpbmdbOV07CisgfTsKKyAKKyBzdHJ1Y3QgQmxpdFN0ZW5jaWxU
b0J1ZmZlclBhcmFtc1VuaWZvcm0KK0BAIC05MCw3ICs5Myw3IEBACisgICAgIHVpbnQ4X3QgcGFk
ZGluZ1s3XTsKKyB9OworIAorLS8vIFNlZSBsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJz
L3Zpc2liaWxpdHkubWV0YWwKKysvLyBTZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9taXNjLm1ldGFsCisgc3RydWN0IENvbWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQorIHsK
KyAgICAgdWludDMyX3Qgc3RhcnRPZmZzZXQ7CitAQCAtOTksMTIgKzEwMiwxMSBAQAorIH07Cisg
CisgLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRh
bAorLXN0cnVjdCBHZW5lcmF0ZU1pcG1hcFVuaWZvcm0KKytzdHJ1Y3QgR2VuZXJhdGUzRE1pcG1h
cFVuaWZvcm0KKyB7CisgICAgIHVpbnQzMl90IHNyY0xldmVsOworICAgICB1aW50MzJfdCBudW1N
aXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgdWludDhfdCBzUkdCOworLSAgICB1aW50OF90IHBhZGRp
bmdbN107CisrICAgIHVpbnQzMl90IHBhZGRpbmdbMl07CisgfTsKKyAKKyAvLyBTZWUgbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAorQEAgLTE1NiwxOSAr
MTU4LDM2IEBACisgLy8gZXhpdGluZyBibG9jay4KKyBzdHJ1Y3QgU2NvcGVkRGlzYWJsZU9jY2x1
c2lvblF1ZXJ5CisgeworLSAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10
bCAqY29udGV4dE10bCwgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0KQorLSAgICAgICAgOiBtQ29u
dGV4dE10bChjb250ZXh0TXRsKSwgbVJlc3VsdE91dChyZXN1bHRPdXQpCisrICAgIFNjb3BlZERp
c2FibGVPY2NsdXNpb25RdWVyeShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZTo6UmVzdWx0ICpyZXN1bHRPdXQpCisr
ICAgICAgICA6IG1Db250ZXh0TXRsKGNvbnRleHRNdGwpLCBtRW5jb2RlcihlbmNvZGVyKSwgbVJl
c3VsdE91dChyZXN1bHRPdXQpCisrICAgIHsKKysjaWZuZGVmIE5ERUJVRworKyAgICAgICAgaWYg
KGNvbnRleHRNdGwtPmhhc0FjdGl2ZU9jY2x1c2lvblF1ZXJ5KCkpCisgICAgICAgICB7CisrICAg
ICAgICAgICAgZW5jb2Rlci0+cHVzaERlYnVnR3JvdXAoQCJEaXNhYmxlZCBPY2NsdXNpb25RdWVy
eSIpOworKyAgICAgICAgfQorKyNlbmRpZgorICAgICAgICAgLy8gdGVtcG9yYXJpbHkgZGlzYWJs
ZSBvY2NsdXNpb24gcXVlcnkKKyAgICAgICAgIGNvbnRleHRNdGwtPmRpc2FibGVBY3RpdmVPY2Ns
dXNpb25RdWVyeUluUmVuZGVyUGFzcygpOworICAgICB9CisgICAgIH5TY29wZWREaXNhYmxlT2Nj
bHVzaW9uUXVlcnkoKQorICAgICB7CisgICAgICAgICAqbVJlc3VsdE91dCA9IG1Db250ZXh0TXRs
LT5yZXN0YXJ0QWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKKysjaWZuZGVmIE5E
RUJVRworKyAgICAgICAgaWYgKG1Db250ZXh0TXRsLT5oYXNBY3RpdmVPY2NsdXNpb25RdWVyeSgp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1FbmNvZGVyLT5wb3BEZWJ1Z0dyb3VwKCk7Cisr
ICAgICAgICB9CisrI2Vsc2UKKysgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShtRW5jb2Rl
cik7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIHByaXZhdGU6CisgICAgIENvbnRleHRNdGwgKm1D
b250ZXh0TXRsOworKyAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqbUVuY29kZXI7CisgCisgICAg
IGFuZ2xlOjpSZXN1bHQgKm1SZXN1bHRPdXQ7CisgfTsKK0BAIC0yMTksNjYgKzIzOCw0MyBAQCB2
b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUICppbmRp
Y2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1
ZmZlclJlZiAmZHN0QnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdE9mZnNldCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCisgeworICAg
ICBBU1NFUlQoY291bnQgPiAyKTsKKy0KKy0gICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50Owor
LSAgICBBTkdMRV9UUlkobXRsOjpHZXRUcmlhbmdsZUZhbkluZGljZXNDb3VudChjb250ZXh0TXRs
LCBjb3VudCwgJmdlbkluZGljZXNDb3VudCkpOworLQorICAgICBjb25zdGV4cHIgVCBrU3JjUHJp
bWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CistICAg
IGNvbnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CistCisrICAgIEdMc2l6ZWkgZHN0VHJpYW5nbGUgICAg
ICAgICAgICAgICAgICAgPSAwOworICAgICB1aW50MzJfdCAqZHN0UHRyID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCAqPihkc3RCdWZmZXItPm1hcChjb250ZXh0TXRsKSArIGRzdE9mZnNldCk7
CistICAgIFQgdHJpRmlyc3RJZHggICAgPSAwOyAgLy8gVmVydGV4IGluZGV4IG9mIHRyaWFubGdl
J3MgMXN0IHZlcnRleAorLSAgICBUIHNyY1ByZXZJZHggICAgID0gMDsgIC8vIFZlcnRleCBpbmRl
eCBvZiB0cmlhbmxnZSdzIDJuZCB2ZXJ0ZXgKKysgICAgVCB0cmlGaXJzdElkeCwgc3JjUHJldklk
eDsKKyAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcywgc2l6ZW9mKHRyaUZpcnN0SWR4
KSk7CisrICAgIG1lbWNweSgmc3JjUHJldklkeCwgaW5kaWNlcyArIDEsIHNpemVvZihzcmNQcmV2
SWR4KSk7CisgCisgICAgIGlmIChwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCkKKyAgICAgeworLSAg
ICAgICAgLy8gdHJpRmlyc3RJZHhMb2M6IExvY2F0aW9uIG9mIGN1cnJlbnQgdHJpYW5nbGUncyBm
aXN0IHZlcnRleCBpbiBzb3VyY2UgYnVmZmVyLgorICAgICAgICAgR0xzaXplaSB0cmlGaXJzdElk
eExvYyA9IDA7CisgICAgICAgICB3aGlsZSAodHJpRmlyc3RJZHggPT0ga1NyY1ByaW1pdGl2ZVJl
c3RhcnRJbmRleCkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBtZW1jcHkoJmRzdFB0clt0cmlG
aXJzdElkeExvYysrXSwgJmtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgsCistICAgICAgICAgICAg
ICAgICAgIHNpemVvZihrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4KSk7CisrICAgICAgICAgICAg
Kyt0cmlGaXJzdElkeExvYzsKKyAgICAgICAgICAgICBtZW1jcHkoJnRyaUZpcnN0SWR4LCBpbmRp
Y2VzICsgdHJpRmlyc3RJZHhMb2MsIHNpemVvZih0cmlGaXJzdElkeCkpOworICAgICAgICAgfQor
IAorLSAgICAgICAgaWYgKHRyaUZpcnN0SWR4TG9jICsgMiA+PSBjb3VudCkKKy0gICAgICAgIHsK
Ky0gICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGluZGljZXMuCistICAgICAgICAgICAgZm9yIChH
THNpemVpIGkgPSB0cmlGaXJzdElkeExvYzsgaSA8IGNvdW50OyArK2kpCistICAgICAgICAgICAg
eworLSAgICAgICAgICAgICAgICBtZW1jcHkoJmRzdFB0cltpXSwgJmtEc3RQcmltaXRpdmVSZXN0
YXJ0SW5kZXgsIHNpemVvZihrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4KSk7CistICAgICAgICAg
ICAgfQorLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAodHJpRmlyc3RJZHhMb2MgKyAxIDwg
Y291bnQpCistICAgICAgICB7CistICAgICAgICAgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRp
Y2VzICsgdHJpRmlyc3RJZHhMb2MgKyAxLCBzaXplb2Yoc3JjUHJldklkeCkpOworLSAgICAgICAg
fQorLQorICAgICAgICAgZm9yIChHTHNpemVpIGkgPSB0cmlGaXJzdElkeExvYyArIDI7IGkgPCBj
b3VudDsgKytpKQorICAgICAgICAgeworICAgICAgICAgICAgIHVpbnQzMl90IHRyaUluZGljZXNb
M107CistCisgICAgICAgICAgICAgVCBzcmNJZHg7CisgICAgICAgICAgICAgbWVtY3B5KCZzcmNJ
ZHgsIGluZGljZXMgKyBpLCBzaXplb2Yoc3JjSWR4KSk7CisrICAgICAgICAgICAgYm9vbCBjb21w
bGV0ZVRyaWFuZ2xlID0gdHJ1ZTsKKyAgICAgICAgICAgICBpZiAoc3JjUHJldklkeCA9PSBrU3Jj
UHJpbWl0aXZlUmVzdGFydEluZGV4IHx8IHNyY0lkeCA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydElu
ZGV4KQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlh
bmdsZS4KKy0gICAgICAgICAgICAgICAgdHJpSW5kaWNlc1swXSAgPSBrRHN0UHJpbWl0aXZlUmVz
dGFydEluZGV4OworLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdICA9IGtEc3RQcmltaXRp
dmVSZXN0YXJ0SW5kZXg7CistICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gID0ga0RzdFBy
aW1pdGl2ZVJlc3RhcnRJbmRleDsKKysgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlh
bmdsZS4gTW92ZSB0byBuZXh0IHRyaWFuZ2xlIGFuZCBzZXQgdHJpRmlyc3RJbmRleAorICAgICAg
ICAgICAgICAgICB0cmlGaXJzdElkeCAgICAgID0gc3JjSWR4OworICAgICAgICAgICAgICAgICB0
cmlGaXJzdElkeExvYyAgID0gaTsKKysgICAgICAgICAgICAgICAgY29tcGxldGVUcmlhbmdsZSA9
IGZhbHNlOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlIGlmIChpIDwgdHJpRmly
c3RJZHhMb2MgKyAyKQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gSW5jb21w
bGV0ZSB0cmlhbmdsZQorLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdID0ga0RzdFByaW1p
dGl2ZVJlc3RhcnRJbmRleDsKKy0gICAgICAgICAgICAgICAgdHJpSW5kaWNlc1sxXSA9IGtEc3RQ
cmltaXRpdmVSZXN0YXJ0SW5kZXg7CistICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBr
RHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRl
IHRyaWFuZ2xlLCBtb3ZlIHRvIG5leHQgdHJpYW5nbGUKKysgICAgICAgICAgICAgICAgY29tcGxl
dGVUcmlhbmdsZSA9IGZhbHNlOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgeworQEAgLTI4NiwxNSArMjgyLDE2IEBAIHZvaWQgR2V0QmxpdFRleENvb3Jk
cyh1aW50MzJfdCBzcmNXaWR0aCwKKyAgICAgICAgICAgICAgICAgdHJpSW5kaWNlc1sxXSA9IHNy
Y1ByZXZJZHg7CisgICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJZHg7CisgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIGlmIChjb21wbGV0ZVRyaWFuZ2xlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwg
dHJpSW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKysgICAgICAgICAgICAgICAgKytkc3RU
cmlhbmdsZTsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgc3JjUHJldklkeCA9IHNyY0lk
eDsKKy0KKy0gICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGlj
ZXMsIHNpemVvZih0cmlJbmRpY2VzKSk7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgZWxzZQor
ICAgICB7CistICAgICAgICBtZW1jcHkoJnNyY1ByZXZJZHgsIGluZGljZXMgKyAxLCBzaXplb2Yo
c3JjUHJldklkeCkpOworLQorICAgICAgICAgZm9yIChHTHNpemVpIGkgPSAyOyBpIDwgY291bnQ7
ICsraSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBUIHNyY0lkeDsKK0BAIC0zMDYsMTQgKzMw
Myw2OCBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAgICAg
ICAgICAgdHJpSW5kaWNlc1syXSA9IHNyY0lkeDsKKyAgICAgICAgICAgICBzcmNQcmV2SWR4ICAg
ID0gc3JjSWR4OworIAorLSAgICAgICAgICAgIG1lbWNweShkc3RQdHIgKyAzICogKGkgLSAyKSwg
dHJpSW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKysgICAgICAgICAgICBtZW1jcHkoZHN0
UHRyICsgMyAqIGRzdFRyaWFuZ2xlLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOwor
KyAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CisgICAgICAgICB9CisgICAgIH0KKy0gICAgZHN0
QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNvbnRleHRNdGwsIGRzdE9mZnNldCwgZ2VuSW5k
aWNlc0NvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisrICAgIGlmIChpbmRpY2VzR2VuZXJhdGVk
KQorKyAgICAgICAgKmluZGljZXNHZW5lcmF0ZWQgPSBkc3RUcmlhbmdsZSAqIDM7CisrICAgIGRz
dEJ1ZmZlci0+dW5tYXAoY29udGV4dE10bCk7CisgCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKKyB9CisgCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrYW5nbGU6OlJlc3Vs
dCBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5kaWNlc1BlclBy
aW1pdGl2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VCAqaW5kaWNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGRzdE9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgY29uc3Rl
eHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpOworKyAgICB1aW50MzJfdCAqZHN0UHRyICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworKyAgICBH
THNpemVpIHJlYWRWYWx1ZUxvYyA9IDA7CisrICAgIFQgcmVhZFZhbHVlICAgICAgICAgID0gMDsK
KysgICAgdWludDMyX3QgZHN0SWR4ICAgICAgPSAwOworKyAgICBtZW1jcHkoJnJlYWRWYWx1ZSwg
aW5kaWNlcywgc2l6ZW9mKHJlYWRWYWx1ZSkpOworKyAgICB3aGlsZSAocmVhZFZhbHVlID09IGtT
cmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisrICAgIHsKKysKKysgICAgICAgICsrcmVhZFZhbHVl
TG9jOworKyAgICAgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2Ms
IHNpemVvZihyZWFkVmFsdWUpKTsKKysgICAgfQorKyAgICB3aGlsZSAocmVhZFZhbHVlTG9jICsg
aW5kaWNlc1BlclByaW1pdGl2ZSA8PSBjb3VudCkKKysgICAgeworKworKyAgICAgICAgdWludDMy
X3QgcHJpbUluZGljaWVzWzNdOworKyAgICAgICAgYm9vbCBmb3VuZFByaW1pdGl2ZSA9IHRydWU7
CisrICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGluZGljZXNQZXJQcmltaXRpdmU7ICsraykK
KysgICAgICAgIHsKKysgICAgICAgICAgICBtZW1jcHkoJnJlYWRWYWx1ZSwgaW5kaWNlcyArIHJl
YWRWYWx1ZUxvYywgc2l6ZW9mKHJlYWRWYWx1ZSkpOworKyAgICAgICAgICAgICsrcmVhZFZhbHVl
TG9jOworKyAgICAgICAgICAgIGlmIChyZWFkVmFsdWUgPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJ
bmRleCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZvdW5kUHJpbWl0aXZlID0g
ZmFsc2U7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBwcmltSW5kaWNpZXNb
a10gPSAodWludDMyX3QpcmVhZFZhbHVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysg
ICAgICAgIGlmIChmb3VuZFByaW1pdGl2ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtZW1j
cHkoJmRzdFB0cltkc3RJZHhdLCBwcmltSW5kaWNpZXMsIChpbmRpY2VzUGVyUHJpbWl0aXZlKSAq
IHNpemVvZih1aW50MzJfdCkpOworKyAgICAgICAgICAgIGRzdElkeCArPSBpbmRpY2VzUGVyUHJp
bWl0aXZlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChpbmRpY2VzR2VuZXJhdGVkKQor
KyAgICAgICAgKmluZGljZXNHZW5lcmF0ZWQgPSBkc3RJZHg7CisrICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgYW5nbGU6
OlJlc3VsdCBHZW5MaW5lTG9vcEZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0
TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBjb3VudCwKK0BAIC0zMjgsMTQgKzM3OSwxMSBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWlu
dDMyX3Qgc3JjV2lkdGgsCisgICAgIGNvbnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgCisgICAgIHVp
bnQzMl90ICpkc3RQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+
bWFwKGNvbnRleHRNdGwpICsgZHN0T2Zmc2V0KTsKKy0gICAgLy8gbGluZUxvb3BGaXJzdElkeDog
dmFsdWUgb2Ygb2YgY3VycmVudCBsaW5lIGxvb3AncyBmaXJzdCB2ZXJ0ZXggaW5kZXguIENhbiBj
aGFuZ2Ugd2hlbgorLSAgICAvLyBlbmNvdW50ZXIgYSBwcmltaXRpdmUgcmVzdGFydCBpbmRleC4K
KyAgICAgVCBsaW5lTG9vcEZpcnN0SWR4OworICAgICBtZW1jcHkoJmxpbmVMb29wRmlyc3RJZHgs
IGluZGljZXMsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CisgCisgICAgIGlmIChwcmltaXRp
dmVSZXN0YXJ0RW5hYmxlZCkKKyAgICAgeworLSAgICAgICAgLy8gbGluZUxvb3BGaXJzdElkeExv
YzogbG9jYXRpb24gb2YgY3VycmVudCBsaW5lIGxvb3AncyBmaXJzdCB2ZXJ0ZXggaW4gdGhlIHNv
dXJjZSBidWZmZXIuCisgICAgICAgICBHTHNpemVpIGxpbmVMb29wRmlyc3RJZHhMb2MgPSAwOwor
ICAgICAgICAgd2hpbGUgKGxpbmVMb29wRmlyc3RJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJ
bmRleCkKKyAgICAgICAgIHsKK0BAIC0zNDQsMTUgKzM5MiwxMiBAQCB2b2lkIEdldEJsaXRUZXhD
b29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAgICAgICAgICAgbWVtY3B5KCZsaW5lTG9vcEZp
cnN0SWR4LCBpbmRpY2VzICsgbGluZUxvb3BGaXJzdElkeExvYywgc2l6ZW9mKGxpbmVMb29wRmly
c3RJZHgpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIC8vIGRzdElkeCA6IHZhbHVlIG9mIGlu
ZGV4IHRvIGJlIHdyaXR0ZW4gdG8gZGVzdCBidWZmZXIKKyAgICAgICAgIHVpbnQzMl90IGRzdElk
eCA9IGxpbmVMb29wRmlyc3RJZHg7CisgICAgICAgICBtZW1jcHkoJmRzdFB0cltsaW5lTG9vcEZp
cnN0SWR4TG9jXSwgJmRzdElkeCwgc2l6ZW9mKGRzdElkeCkpOworLSAgICAgICAgLy8gZHN0V3Jp
dHRlbjogbnVtYmVyIG9mIGluZGljZXMgd3JpdHRlbiB0byBkZXN0IGJ1ZmZlcgorICAgICAgICAg
dWludDMyX3QgZHN0V3JpdHRlbiA9IGxpbmVMb29wRmlyc3RJZHhMb2MgKyAxOworIAorICAgICAg
ICAgZm9yIChHTHNpemVpIGkgPSBsaW5lTG9vcEZpcnN0SWR4TG9jICsgMTsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgICB7CistICAgICAgICAgICAgLy8gc3JjSWR4IDogdmFsdWUgb2YgaW5kZXgg
ZnJvbSBzb3VyY2UgYnVmZmVyCisgICAgICAgICAgICAgVCBzcmNJZHg7CisgICAgICAgICAgICAg
bWVtY3B5KCZzcmNJZHgsIGluZGljZXMgKyBpLCBzaXplb2Yoc3JjSWR4KSk7CisgICAgICAgICAg
ICAgaWYgKHNyY0lkeCA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQorQEAgLTQwMCw3ICs0
NDUsNyBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgCisgICAg
ICAgICAqaW5kaWNlc0dlbmVyYXRlZCA9IGNvdW50ICsgMTsKKyAgICAgfQorLSAgICBkc3RCdWZm
ZXItPnVubWFwQW5kRmx1c2hTdWJzZXQoY29udGV4dE10bCwgZHN0T2Zmc2V0LCAoKmluZGljZXNH
ZW5lcmF0ZWQpICogc2l6ZW9mKHVpbnQzMl90KSk7CisrICAgIGRzdEJ1ZmZlci0+dW5tYXAoY29u
dGV4dE10bCk7CisgCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitA
QCAtNDcyLDcgKzUxNyw3IEBAIHZvaWQgRW5zdXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQo
RGlzcGxheU10bCAqZGlzcGxheSwKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgewor
ICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRpc3BsYXktPmdldE1ldGFsRGV2
aWNlKCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0gZGlzcGxheS0+Z2V0
RGVmYXVsdFNoYWRlcnNMaWIoKTsKKysgICAgICAgIGF1dG8gc2hhZGVyTGliICAgICAgICAgICAg
PSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAgICAgICAgTlNFcnJvciAqZXJy
ICAgICAgICAgICAgICA9IG5pbDsKKyAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgICAg
PSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rpb25OYW1lXTsKKyAKK0BAIC01
MTIsNyArNTU3LDcgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZENvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKAorICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICB7CisgICAgICAgICBpZDxN
VExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2UoKTsKKy0gICAg
ICAgIGlkPE1UTExpYnJhcnk+IHNoYWRlckxpYiAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVy
c0xpYigpOworKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICAgICAgICA9IGRpc3BsYXktPmdl
dERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgICBOU0Vycm9yICplcnIgICAgICAgICAgICAg
ID0gbmlsOworIAorICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFkZXJMaWIg
bmV3RnVuY3Rpb25XaXRoTmFtZTpmdW5jdGlvbk5hbWUKK0BAIC01MzgsNiArNTgzLDcgQEAgdm9p
ZCBFbnN1cmVTcGVjaWFsaXplZENvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKAorIEFOR0xFX0lO
TElORQorIHZvaWQgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXpl
ZChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU1N0cmluZyAqdmVydGV4RnVuY3Rpb25OYW1lLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExMaWJyYXJ5
PiBzaGFkZXJMaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclBpcGVsaW5lQ2FjaGUgKnBpcGVsaW5lQ2FjaGVPdXQpCisgeworICAg
ICBSZW5kZXJQaXBlbGluZUNhY2hlICZwaXBlbGluZUNhY2hlID0gKnBpcGVsaW5lQ2FjaGVPdXQ7
CitAQCAtNTQ5LDggKzU5NSw2IEBAIHZvaWQgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5l
Q2FjaGVJbml0aWFsaXplZChDb250ZXh0ICpjb250ZXh0LAorIAorICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQorICAgICB7CistICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ICAgICAgPSBjb250
ZXh0LT5nZXREaXNwbGF5KCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBk
aXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+
IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5h
bWVdOworIAorICAgICAgICAgQVNTRVJUKFtzaGFkZXIgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXSk7
CitAQCAtNTcwLDcgKzYxNCw5IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRWZXJ0ZXhTaGFkZXJP
bmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKAorICAgICBpZiAoIWZ1bmNDb25zdGFudHMpCisg
ICAgIHsKKyAgICAgICAgIC8vIE5vbiBzcGVjaWFsaXplZCBjb25zdGFudHMgcHJvdmlkZWQsIHVz
ZSBkZWZhdWx0IGNyZWF0aW9uIGZ1bmN0aW9uLgorLSAgICAgICAgRW5zdXJlVmVydGV4U2hhZGVy
T25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2ZXJ0ZXhGdW5jdGlvbk5hbWUs
CisrICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOwor
KyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJz
TGliKCk7CisrICAgICAgICBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRp
YWxpemVkKGNvbnRleHQsIHZlcnRleEZ1bmN0aW9uTmFtZSwgc2hhZGVyTGliLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUNh
Y2hlT3V0KTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgfQorQEAgLTU4NSw3ICs2MzEsNyBAQCB2
b2lkIEVuc3VyZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFs
aXplZCgKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgeworICAgICAgICAgRGlzcGxh
eU10bCAqZGlzcGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKy0gICAgICAgIGlkPE1UTExp
YnJhcnk+IHNoYWRlckxpYiA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisrICAg
ICAgICBhdXRvIHNoYWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIo
KTsKKyAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgPSBuaWw7CisgCisgICAgICAgICBpZDxN
VExGdW5jdGlvbj4gc2hhZGVyID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldpdGhOYW1lOnZlcnRl
eEZ1bmN0aW9uTmFtZQorQEAgLTYxNSw2ICs2NjEsMjIgQEAgUmVuZGVyUGlwZWxpbmVEZXNjIEdl
dENvbXB1dGluZ1ZlcnRleFNoYWRlck9ubHlSZW5kZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFu
ZEUKKyAgICAgcmV0dXJuIHBpcGVsaW5lRGVzYzsKKyB9CisgCisrLy8gR2V0IHBpcGVsaW5lIGRl
c2NyaXB0b3IgZm9yIHJlbmRlciBwaXBlbGluZSB0aGF0IGNvbnRhaW5zIHZlcnRleCBzaGFkZXIg
YWN0aW5nIGFzIHRyYW5zZm9ybQorKy8vIGZlZWRiYWNrLgorK0FOR0xFX0lOTElORQorK1JlbmRl
clBpcGVsaW5lRGVzYyBHZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhSZW5k
ZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2Mg
JnBpcGVsaW5lRGVzYykKKyt7CisrICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURl
c2MgICA9IFJlbmRlclBpcGVsaW5lRGVzYyhwaXBlbGluZURlc2MpOworKyAgICBjb25zdCBSZW5k
ZXJQYXNzRGVzYyAmcmVuZGVyUGFzc0Rlc2MgPSBjbWRFbmNvZGVyLT5yZW5kZXJQYXNzRGVzYygp
OworKworKyAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVz
YygmcGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworKyAgICB4ZmJQaXBlbGluZURlc2Mu
cmFzdGVyaXphdGlvblR5cGUgICA9IFJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJs
ZWQ7CisrICAgIHhmYlBpcGVsaW5lRGVzYy5pbnB1dFByaW1pdGl2ZVRvcG9sb2d5ID0ga1ByaW1p
dGl2ZVRvcG9sb2d5Q2xhc3NQb2ludDsKKysKKysgICAgcmV0dXJuIHhmYlBpcGVsaW5lRGVzYzsK
Kyt9CisrCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisgdm9pZCBDbGVhclJlbmRlclBpcGVsaW5l
Q2FjaGVBcnJheShUICpwaXBlbGluZUNhY2hlQXJyYXkpCisgeworQEAgLTcxMiw5ICs3NzQsMTUg
QEAgdm9pZCBTZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRlckNvbW1hbmRFbmNvZGVy
ICpjbWRFbmNvZGVyLAorICAgICB1bmlmb3JtUGFyYW1zLnNyY0xheWVyID0gcGFyYW1zLnNyY0xh
eWVyOworICAgICBpZiAoaXNDb2xvckJsaXQpCisgICAgIHsKKy0gICAgICAgIGNvbnN0IENvbG9y
QmxpdFBhcmFtcyAqY29sb3JQYXJhbXMgPSBzdGF0aWNfY2FzdDxjb25zdCBDb2xvckJsaXRQYXJh
bXMgKj4oJnBhcmFtcyk7CisrICAgICAgICBjb25zdCBhdXRvIGNvbG9yUGFyYW1zICAgICA9IHN0
YXRpY19jYXN0PGNvbnN0IENvbG9yQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgIHVu
aWZvcm1QYXJhbXMuZHN0THVtaW5hbmNlID0gY29sb3JQYXJhbXMtPmRzdEx1bWluYW5jZSA/IDEg
OiAwOworICAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgY29uc3QgYXV0byBkc1Bh
cmFtcyAgICAgPSBzdGF0aWNfY2FzdDxjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICo+KCZw
YXJhbXMpOworKyAgICAgICAgdW5pZm9ybVBhcmFtcy5zcmNMZXZlbDIgPSBkc1BhcmFtcy0+c3Jj
U3RlbmNpbExldmVsOworKyAgICAgICAgdW5pZm9ybVBhcmFtcy5zcmNMYXllcjIgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbExheWVyOworKyAgICB9CisgCisgICAgIC8vIENvbXB1dGUgc291cmNlIHRl
eENvb3JkcworICAgICB1aW50MzJfdCBzcmNXaWR0aCA9IDAsIHNyY0hlaWdodCA9IDA7CitAQCAt
NzI3LDggKzc5NSw4IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdVbmlmb3JtRGF0YShSZW5kZXJD
b21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgeworICAgICAgICAgY29uc3QgRGVwdGhT
dGVuY2lsQmxpdFBhcmFtcyAqZHNQYXJhbXMgPQorICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNv
bnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKj4oJnBhcmFtcyk7CistICAgICAgICBzcmNXaWR0
aCAgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+d2lkdGgoZHNQYXJhbXMtPnNyY0xldmVsKTsKKy0g
ICAgICAgIHNyY0hlaWdodCA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT5oZWlnaHQoZHNQYXJhbXMt
PnNyY0xldmVsKTsKKysgICAgICAgIHNyY1dpZHRoICA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT53
aWR0aChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKGRzUGFyYW1zLT5zcmNTdGVuY2lsTGV2ZWwpKTsK
KysgICAgICAgIHNyY0hlaWdodCA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT5oZWlnaHQobXRsOjpN
aXBtYXBOYXRpdmVMZXZlbChkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsKSk7CisgICAgIH0KKyAg
ICAgZWxzZQorICAgICB7CitAQCAtNzM5LDggKzgwNyw4IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERy
YXdVbmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgR2V0
QmxpdFRleENvb3JkcyhzcmNXaWR0aCwgc3JjSGVpZ2h0LCBwYXJhbXMuc3JjUmVjdCwgcGFyYW1z
LnNyY1lGbGlwcGVkLCBwYXJhbXMudW5wYWNrRmxpcFgsCisgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnVucGFja0ZsaXBZLCAmdTAsICZ2MCwgJnUxLCAmdjEpOworIAorLSAgICBmbG9hdCBk
dSA9IHUxIC0gdTA7CistICAgIGZsb2F0IGR2ID0gdjEgLSB2MDsKKysgICAgYXV0byBkdSA9IHUx
IC0gdTA7CisrICAgIGF1dG8gZHYgPSB2MSAtIHYwOworIAorICAgICAvLyBsb3dlciBsZWZ0Cisg
ICAgIHVuaWZvcm1QYXJhbXMuc3JjVGV4Q29vcmRzWzBdWzBdID0gdTA7CitAQCAtODQ0LDE5ICs5
MTIsMjEgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFu
ZEVuY29kZXIgKmVuY29kZXIsCisgLy8gU3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMgaW1wbGVt
ZW50YXRpb24KKyBTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZm
ZXJQYXJhbXMoKSB7fQorIAorLVN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxp
dFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZzcmNJbikKKytT
dGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMoY29u
c3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjUGFyYW1zKQorIHsKKy0gICAgZHN0VGV4dHVy
ZVNpemUgPSBzcmNJbi5kc3RUZXh0dXJlU2l6ZTsKKy0gICAgZHN0UmVjdCAgICAgICAgPSBzcmNJ
bi5kc3RSZWN0OworLSAgICBkc3RTY2lzc29yUmVjdCA9IHNyY0luLmRzdFNjaXNzb3JSZWN0Owor
LSAgICBkc3RGbGlwWSAgICAgICA9IHNyY0luLmRzdEZsaXBZOworLSAgICBkc3RGbGlwWCAgICAg
ICA9IHNyY0luLmRzdEZsaXBYOworLSAgICBzcmNSZWN0ICAgICAgICA9IHNyY0luLnNyY1JlY3Q7
CistICAgIHNyY1lGbGlwcGVkICAgID0gc3JjSW4uc3JjWUZsaXBwZWQ7CistICAgIHVucGFja0Zs
aXBYICAgID0gc3JjSW4udW5wYWNrRmxpcFg7CistICAgIHVucGFja0ZsaXBZICAgID0gc3JjSW4u
dW5wYWNrRmxpcFk7CisrICAgIGRzdFRleHR1cmVTaXplID0gc3JjUGFyYW1zLmRzdFRleHR1cmVT
aXplOworKyAgICBkc3RSZWN0ICAgICAgICA9IHNyY1BhcmFtcy5kc3RSZWN0OworKyAgICBkc3RT
Y2lzc29yUmVjdCA9IHNyY1BhcmFtcy5kc3RTY2lzc29yUmVjdDsKKysgICAgZHN0RmxpcFkgICAg
ICAgPSBzcmNQYXJhbXMuZHN0RmxpcFk7CisrICAgIGRzdEZsaXBYICAgICAgID0gc3JjUGFyYW1z
LmRzdEZsaXBYOworKyAgICBzcmNSZWN0ICAgICAgICA9IHNyY1BhcmFtcy5zcmNSZWN0OworKyAg
ICBzcmNZRmxpcHBlZCAgICA9IHNyY1BhcmFtcy5zcmNZRmxpcHBlZDsKKysgICAgdW5wYWNrRmxp
cFggICAgPSBzcmNQYXJhbXMudW5wYWNrRmxpcFg7CisrICAgIHVucGFja0ZsaXBZICAgID0gc3Jj
UGFyYW1zLnVucGFja0ZsaXBZOworIAorLSAgICBzcmNTdGVuY2lsID0gc3JjSW4uc3JjU3RlbmNp
bDsKKysgICAgc3JjU3RlbmNpbCAgICAgID0gc3JjUGFyYW1zLnNyY1N0ZW5jaWw7CisrICAgIHNy
Y1N0ZW5jaWxMZXZlbCA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGV2ZWw7CisrICAgIHNyY1N0ZW5j
aWxMYXllciA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGF5ZXI7CisgfQorIAorIC8vIFJlbmRlclV0
aWxzIGltcGxlbWVudGF0aW9uCitAQCAtOTAzLDYgKzk3Myw3IEBAIEFOR0xFX0lOTElORSB2b2lk
IFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICB9
CisgfQorIAorKworIC8vIG92ZXJyaWRlIEVycm9ySGFuZGxlcgorIHZvaWQgUmVuZGVyVXRpbHM6
OmhhbmRsZUVycm9yKEdMZW51bSBnbEVycm9yQ29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpmaWxlLAorQEAgLTEwMTYsOSArMTA4NywxMCBAQCBBTkdMRV9J
TkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2Rl
ciwKKyB9CisgYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJG
cm9tRWxlbWVudHNBcnJheSgKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgY29u
c3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpCisrICAgIGNvbnN0IEluZGV4R2VuZXJh
dGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCkKKyB7
CistICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50
c0FycmF5KGNvbnRleHRNdGwsIHBhcmFtcyk7CisrICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5l
cmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KGNvbnRleHRNdGwsIHBhcmFtcywgaW5k
aWNlc0dlbmVyYXRlZCk7CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVy
YXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKAorQEAgLTEwNTAsNiArMTEyMiwyNiBAQCBBTkdM
RV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5j
b2RlciwKKyB7CisgICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZUxpbmVMb29wTGFzdFNl
Z21lbnRGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMpOworIH0KKythbmdsZTo6
UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIo
Q29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFy
YW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkKKyt7CisrICAg
IHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIo
Y29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKKyt9CisrYW5nbGU6OlJlc3Vs
dCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4
dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1cm4g
bUluZGV4VXRpbHMuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoY29udGV4dE10
bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKKyt9CisrYW5nbGU6OlJlc3VsdCBSZW5kZXJV
dGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorKyAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKysgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIG1J
bmRleFV0aWxzLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihjb250ZXh0
TXRsLCBwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVyYXRlZCk7CisrfQorIAorIHZvaWQgUmVu
ZGVyVXRpbHM6OmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KAorICAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorQEAgLTExMjEsNiArMTIxMywyMSBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBl
bGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKTsK
KyB9CisgCisrYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJh
Y2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKnJl
bmRlckVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKKyt7Cisr
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAg
IC8vIENyZWF0ZSBhbmQgY2FjaGUgdGhlIFBTTworKyAgICBhdXRvIHBzbyA9IG1UcmFuc2Zvcm1G
ZWVkYmFja1V0aWxzLmdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoY29udGV4dE10
bCwgcmVuZGVyRW5jb2RlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lRGVzYyk7CisrICAg
IGlmIChwc28pCisrICAgIHsKKysgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKKysgICAgfQorKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKyt9CisrCisgLy8g
Q2xlYXJVdGlscyBpbXBsZW1lbnRhdGlvbgorIENsZWFyVXRpbHM6OkNsZWFyVXRpbHMoY29uc3Qg
c3RkOjpzdHJpbmcgJmZyYWdtZW50U2hhZGVyTmFtZSkKKyAgICAgOiBtRnJhZ21lbnRTaGFkZXJO
YW1lKGZyYWdtZW50U2hhZGVyTmFtZSkKK0BAIC0xMjg3LDExICsxMzk0LDExIEBAIEFOR0xFX0lO
TElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVy
LAorICAgICB7CisgICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJDb2xvci5yZXNldCgpOwor
ICAgICB9CistICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUp
CisrICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUoKSkKKyAg
ICAgeworICAgICAgICAgb3ZlcnJpZGVkUGFyYW1zLmNsZWFyRGVwdGgucmVzZXQoKTsKKyAgICAg
fQorLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUpCisr
ICAgIGlmICghcmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpKQorICAg
ICB7CisgICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJTdGVuY2lsLnJlc2V0KCk7CisgICAg
IH0KK0BAIC0xMzA3LDcgKzE0MTQsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0
YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgYW5nbGU6OlJlc3VsdCBy
ZXN1bHQ7CisgICAgIHsKKyAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24gcXVl
cnksIG90aGVyd2lzZSBjbGVhcmluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50aW5n
CistICAgICAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkgZGlzYWJsZU9jY2x1c2lvblF1
ZXJ5KGNvbnRleHRNdGwsICZyZXN1bHQpOworKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lv
blF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVz
dWx0KTsKKyAgICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCisgICAg
ICAgICBjbWRFbmNvZGVyLT5kcmF3KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgMCwgMyk7Cisg
ICAgIH0KK0BAIC0xNDgxLDcgKzE1ODgsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGlu
ZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgYW5nbGU6OlJlc3Vs
dCByZXN1bHQ7CisgICAgIHsKKyAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24g
cXVlcnksIG90aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50
aW5nCistICAgICAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkgZGlzYWJsZU9jY2x1c2lv
blF1ZXJ5KGNvbnRleHRNdGwsICZyZXN1bHQpOworKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1
c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAm
cmVzdWx0KTsKKyAgICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCisg
ICAgICAgICBjbWRFbmNvZGVyLT5kcmF3KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgMCwgMyk7
CisgICAgIH0KK0BAIC0xNzAzLDcgKzE4MTAsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBl
bGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgYW5nbGU6OlJl
c3VsdCByZXN1bHQ7CisgICAgIHsKKyAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNp
b24gcXVlcnksIG90aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNv
dW50aW5nCistICAgICAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkgZGlzYWJsZU9jY2x1
c2lvblF1ZXJ5KGNvbnRleHRNdGwsICZyZXN1bHQpOworKyAgICAgICAgU2NvcGVkRGlzYWJsZU9j
Y2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVy
LCAmcmVzdWx0KTsKKyAgICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xl
CisgICAgICAgICBjbWRFbmNvZGVyLT5kcmF3KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgMCwg
Myk7CisgICAgIH0KK0BAIC0yMDAyLDcgKzIxMDksOCBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQ
aXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAKKyBhbmdsZTo6
UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1l
bnRzQXJyYXkoCisgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgIGNvbnN0IEluZGV4
R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcywKKysgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCisgeworICAgICBj
b25zdCBnbDo6VmVydGV4QXJyYXkgKnZlcnRleEFycmF5ID0gY29udGV4dE10bC0+Z2V0U3RhdGUo
KS5nZXRWZXJ0ZXhBcnJheSgpOworICAgICBjb25zdCBnbDo6QnVmZmVyICplbGVtZW50QnVmZmVy
ICAgID0gdmVydGV4QXJyYXktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworQEAgLTIwMTMsMTMg
KzIxMjEsMTQgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29t
bWFuZEVuY29kZXIgKmVuY29kZXIsCisgICAgICAgICBBTkdMRV9DSEVDSyhjb250ZXh0TXRsLCBz
cmNPZmZzZXQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAgICAg
ICAgICAgICAgICAgICAgIkluZGV4IG9mZnNldCBpcyB0b28gbGFyZ2UiLCBHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgIGlmIChwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQgfHwKKy0g
ICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXND
aGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICghY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmJyZWFrUmVuZGVyUGFzc0lzQ2hlYXAuZW5hYmxlZCAm
JgorICAgICAgICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkK
KyAgICAgICAgIHsKKyAgICAgICAgICAgICBJbmRleEdlbmVyYXRpb25QYXJhbXMgY3B1UGF0aFBh
cmFtcyA9IHBhcmFtczsKKyAgICAgICAgICAgICBjcHVQYXRoUGFyYW1zLmluZGljZXMgPQorICAg
ICAgICAgICAgICAgICBlbGVtZW50QnVmZmVyTXRsLT5nZXRDbGllbnRTaGFkb3dDb3B5RGF0YShj
b250ZXh0TXRsKSArIHNyY09mZnNldDsKKy0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBjcHVQYXRoUGFyYW1zKTsK
KysgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJh
eUNQVShjb250ZXh0TXRsLCBjcHVQYXRoUGFyYW1zLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNHZW5lcmF0ZWQpOwor
ICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgeworQEAgLTIwMzAsNyArMjEzOSw3
IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNv
ZGVyICplbmNvZGVyLAorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAgICAgcmV0dXJu
IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgcGFy
YW1zKTsKKysgICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7CisgICAgIH0KKyB9
CisgCitAQCAtMjA3NCwyMiArMjE4MywyMyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGlu
ZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAKKyBhbmdsZTo6UmVzdWx0
IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJy
YXlDUFUoCisgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMg
JnBhcmFtcywKKysgICAgdWludDMyX3QgKmdlbkluZGljZXMpCisgeworICAgICBzd2l0Y2ggKHBh
cmFtcy5zcmNUeXBlKQorICAgICB7CisgICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBl
OjpVbnNpZ25lZEJ5dGU6CisgICAgICAgICAgICAgcmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRF
bGVtZW50cygKKyAgICAgICAgICAgICAgICAgY29udGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQs
IHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwKKy0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIs
IHBhcmFtcy5kc3RPZmZzZXQpOworKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9m
ZnNldCwgZ2VuSW5kaWNlcyk7CisgICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpV
bnNpZ25lZFNob3J0OgorICAgICAgICAgICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxl
bWVudHMoCisgICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBw
YXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCistICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQxNl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwg
cGFyYW1zLmRzdE9mZnNldCk7CisrICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQxNl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9m
ZnNldCwgZ2VuSW5kaWNlcyk7CisgICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpV
bnNpZ25lZEludDoKKyAgICAgICAgICAgICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1l
bnRzKAorICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFy
YW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAorLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBh
cmFtcy5kc3RPZmZzZXQpOworKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50
MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZz
ZXQsIGdlbkluZGljZXMpOworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICB9CitAQCAtMjMwMSw2ICsyNDExLDU2IEBAIEFOR0xFX0lOTElORSB2b2lk
IFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICBy
ZXR1cm4gZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50KGNvbnRleHRNdGwsIGZpcnN0LCBsYXN0
LCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKyB9CisgCisrYW5nbGU6OlJl
c3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIo
CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgIHVuc2lnbmVkIG51bVZlcnRpY2Vz
UGVyUHJpbWl0aXZlLAorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywK
KysgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgc3dpdGNoIChwYXJhbXMu
c3JjVHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5z
aWduZWRCeXRlOgorKyAgICAgICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90ICo+KHBhcmFtcy5pbmRpY2VzKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zm
c2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKysgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5
cGU6OlVuc2lnbmVkU2hvcnQ6CisrICAgICAgICAgICAgcmV0dXJuIEdlblByaW1pdGl2ZVJlc3Rh
cnRCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIG51bVZlcnRpY2VzUGVyUHJp
bWl0aXZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHBhcmFtcy5pbmRpY2VzKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJh
bXMuZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKysgICAgICAgIGNhc2UgZ2w6OkRyYXdF
bGVtZW50c1R5cGU6OlVuc2lnbmVkSW50OgorKyAgICAgICAgICAgIHJldHVybiBHZW5QcmltaXRp
dmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBudW1WZXJ0aWNl
c1BlclByaW1pdGl2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZl
ciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7CisrICAgICAgICBkZWZhdWx0
OgorKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OlN0b3A7CisrICAgIH0KKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVy
YXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoCisrICAg
IENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFt
cyAmcGFyYW1zLAorKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1
cm4gZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIDMsIHBhcmFtcywg
aW5kaWNlc0dlbmVyYXRlZCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JV
dGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoCisrICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCisrICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
LAorKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1cm4gZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIDIsIHBhcmFtcywgaW5kaWNlc0dl
bmVyYXRlZCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2Vu
ZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
c2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCAxLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQp
OworK30KKysKKyAvLyBWaXNpYmlsaXR5UmVzdWx0VXRpbHMgaW1wbGVtZW50YXRpb24KKyB2b2lk
IFZpc2liaWxpdHlSZXN1bHRVdGlsczo6b25EZXN0cm95KCkKKyB7CitAQCAtMjM3Niw2ICsyNTM2
LDkgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgdm9pZCBNaXBtYXBVdGlsczo6b25EZXN0cm95KCkKKyB7CisgICAg
IG0zRE1pcEdlbmVyYXRvclBpcGVsaW5lICAgICAgPSBuaWw7CisrICAgIG0yRE1pcEdlbmVyYXRv
clBpcGVsaW5lICAgICAgPSBuaWw7CisrICAgIG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmUg
PSBuaWw7CisrICAgIG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUgICAgPSBuaWw7CisgfQorIAor
IHZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTNETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXpl
ZChDb250ZXh0TXRsICpjb250ZXh0TXRsKQorQEAgLTIzODQsNjYgKzI1NDcsNzggQEAgQU5HTEVf
SU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29k
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtM0RNaXBHZW5lcmF0
b3JQaXBlbGluZSk7CisgfQorIAorK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJETWlwR2VuZXJh
dG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpjb250ZXh0TXRsKQorK3sKKysgICAg
RW5zdXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgp
LCBAImdlbmVyYXRlMkRNaXBtYXBzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm0yRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyt9CisrCisrdm9pZCBNaXBtYXBVdGls
czo6ZW5zdXJlMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10
bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVk
KGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZTJEQXJyYXlNaXBtYXBzIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0yREFycmF5TWlwR2VuZXJhdG9y
UGlwZWxpbmUpOworK30KKysKKyt2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmVDdWJlTWlwR2VuZXJh
dG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpjb250ZXh0TXRsKQorK3sKKysgICAg
RW5zdXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgp
LCBAImdlbmVyYXRlQ3ViZU1pcG1hcHMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrfQorKworIGFuZ2xlOjpSZXN1
bHQgTWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlwbWFwQ1MoQ29udGV4dE10bCAqY29udGV4dE10bCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1
cmVSZWYgJnNyY1RleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHNSR0JNaXBtYXAsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOYXRpdmVUZXhMZXZlbEFycmF5ICptaXBtYXBPdXRwdXRWaWV3cykKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRleExldmVs
QXJyYXkgKiBtaXBtYXBPdXRwdXRWaWV3cykKKyB7CistICAgIC8vIE9ubHkgc3VwcG9ydCAzRCB0
ZXh0dXJlIGZvciBub3cuCistICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpID09
IE1UTFRleHR1cmVUeXBlM0QpOworKyAgICBDb21wdXRlQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIgPSBjb250ZXh0TXRsLT5nZXRDb21wdXRlQ29tbWFuZEVuY29kZXIoKTsKKysgICAgQVNTRVJU
KGNtZEVuY29kZXIpOworIAorICAgICBNVExTaXplIHRocmVhZEdyb3VwU2l6ZTsKKyAgICAgdWlu
dDMyX3Qgc2xpY2VzID0gMTsKKy0gICAgaWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IGNvbXB1
dGVQaXBlbGluZSA9IG5pbDsKKy0KKysgICAgc3dpdGNoIChzcmNUZXh0dXJlLT50ZXh0dXJlVHlw
ZSgpKQorKyAgICB7CisrICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlMkQ6CisrICAgICAgICAg
ICAgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKGNvbnRleHRNdGwpOwor
KyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yRE1pcEdl
bmVyYXRvclBpcGVsaW5lKTsKKysgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUgPSBNVExTaXpl
TWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVy
RGltLCAxKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgTVRMVGV4dHVyZVR5
cGUyREFycmF5OgorKyAgICAgICAgICAgIGVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKGNvbnRleHRNdGwpOworKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENv
bXB1dGVQaXBlbGluZVN0YXRlKG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmUpOworKyAgICAg
ICAgICAgIHNsaWNlcyAgICAgICAgICA9IHNyY1RleHR1cmUtPmFycmF5TGVuZ3RoKCk7CisrICAg
ICAgICAgICAgdGhyZWFkR3JvdXBTaXplID0gTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFk
R3JvdXBTaXplUGVyRGltLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlQ3ViZToKKysgICAgICAgICAgICBl
bnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKysg
ICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtQ3ViZU1pcEdl
bmVyYXRvclBpcGVsaW5lKTsKKysgICAgICAgICAgICBzbGljZXMgICAgICAgICAgPSA2OworKyAg
ICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVh
ZEdyb3VwU2l6ZVBlckRpbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sIDEpOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTNEOgorICAgICAgICAgICAgIGVu
c3VyZTNETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKy0gICAg
Y29tcHV0ZVBpcGVsaW5lID0gbTNETWlwR2VuZXJhdG9yUGlwZWxpbmU7CisrICAgICAgICAgICAg
Y21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUobTNETWlwR2VuZXJhdG9yUGlwZWxp
bmUpOworICAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9CisgICAgICAgICAgICAgICAgIE1U
TFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwga0dlbmVyYXRlTWlw
VGhyZWFkR3JvdXBTaXplUGVyRGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrR2Vu
ZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0pOworLQorLSAgICAvLyBUaGUgY29tcHV0ZSBz
aGFkZXIgc3VwcG9ydHMgdXAgdG8gNCBtaXBtYXBzIGdlbmVyYXRlZCBwZXIgcGFzcy4KKy0gICAg
Ly8gU2VlIHNoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorLSAgICB1aW50MzJfdCBtYXhNaXBzUGVy
QmF0Y2ggPSA0OworLQorLSAgICBpZiAodGhyZWFkR3JvdXBTaXplLndpZHRoICogdGhyZWFkR3Jv
dXBTaXplLmhlaWdodCAqIHRocmVhZEdyb3VwU2l6ZS5kZXB0aCA+CistICAgICAgICAgICAgY29t
cHV0ZVBpcGVsaW5lLm1heFRvdGFsVGhyZWFkc1BlclRocmVhZGdyb3VwIHx8CistICAgICAgICBB
TkdMRV9VTkxJS0VMWSgKKy0gICAgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmFsbG93R2VuTXVsdGlwbGVNaXBzUGVyUGFzcy5lbmFibGVkKSkKKy0gICAg
eworLSAgICAgICAgLy8gTXVsdGlwbGUgbWlwbWFwcyBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0
ZWQgZHVlIHRvIGhhcmR3YXJlJ3MgdGhyZWFkIGdyb3VwIHNpemUgbGltaXRzLgorLSAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gZ2VuZXJhdGUgb25lIG1pcCBwZXIgcGFzcyBhbmQgcmVkdWNlIHRocmVh
ZCBncm91cCBzaXplLgorLSAgICAgICAgaWYgKEFOR0xFX1VOTElLRUxZKHRocmVhZEdyb3VwU2l6
ZS53aWR0aCAqIHRocmVhZEdyb3VwU2l6ZS5oZWlnaHQgPgorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCkpCist
ICAgICAgICB7CistICAgICAgICAgICAgLy8gRXZlbiB3aXRoIHJlZHVjZWQgdGhyZWFkIGdyb3Vw
IHNpemUsIHdlIGNhbm5vdCBwcm9jZWVkLgorLSAgICAgICAgICAgIC8vIEhBQ0s6IHVzZSBibGl0
IGNvbW1hbmQgZW5jb2RlciB0byBnZW5lcmF0ZSBtaXBtYXBzIGlmIGl0IGlzIG5vdCBwb3NzaWJs
ZQorLSAgICAgICAgICAgIC8vIHRvIHVzZSBjb21wdXRlIHNoYWRlciBkdWUgdG8gaGFyZHdhcmUg
bGltaXRzLgorLSAgICAgICAgICAgIEJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBj
b250ZXh0TXRsLT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKy0gICAgICAgICAgICBibGl0RW5j
b2Rlci0+Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShzcmNUZXh0dXJlKTsKKy0gICAgICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistICAgICAgICB9CistCistICAgICAg
ICB0aHJlYWRHcm91cFNpemUuZGVwdGggPSAxOworLSAgICAgICAgbWF4TWlwc1BlckJhdGNoICAg
ICAgID0gMTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgfQorIAorLSAgICBDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmNtZEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRDb21wdXRlQ29tbWFuZEVuY29kZXIoKTsK
Ky0gICAgQVNTRVJUKGNtZEVuY29kZXIpOworLSAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlw
ZWxpbmVTdGF0ZShjb21wdXRlUGlwZWxpbmUpOworLQorLSAgICBHZW5lcmF0ZU1pcG1hcFVuaWZv
cm0gb3B0aW9uczsKKysgICAgR2VuZXJhdGUzRE1pcG1hcFVuaWZvcm0gb3B0aW9uczsKKysgICAg
dWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKKyAKKyAgICAgdWludDMyX3QgcmVtYWluTWlw
cyA9IHNyY1RleHR1cmUtPm1pcG1hcExldmVscygpIC0gMTsKKy0gICAgTWlwbWFwTmF0aXZlTGV2
ZWwgYmF0Y2hTcmNMZXZlbCA9IGtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIG9wdGlvbnMuc3Jj
TGV2ZWwgICAgICAgICAgICAgICAgPSBiYXRjaFNyY0xldmVsLmdldCgpOworLSAgICBvcHRpb25z
LnNSR0IgICAgICAgICAgICAgICAgICAgID0gc1JHQk1pcG1hcDsKKysgICAgb3B0aW9ucy5zcmNM
ZXZlbCAgICA9IDA7CisgCisgICAgIGNtZEVuY29kZXItPnNldFRleHR1cmUoc3JjVGV4dHVyZSwg
MCk7CisgICAgIGNtZEVuY29kZXItPm1hcmtSZXNvdXJjZUJlaW5nV3JpdHRlbkJ5R1BVKHNyY1Rl
eHR1cmUpOworICAgICB3aGlsZSAocmVtYWluTWlwcykKKyAgICAgeworLSAgICAgICAgY29uc3Qg
VGV4dHVyZVJlZiAmZmlyc3RNaXBWaWV3ID0gbWlwbWFwT3V0cHV0Vmlld3MtPmF0KGJhdGNoU3Jj
TGV2ZWwgKyAxKTsKKysgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9IG1p
cG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2
ZWwgKyAxKSk7CisgICAgICAgICBnbDo6RXh0ZW50cyBzaXplICAgICAgICAgICAgICAgPSBmaXJz
dE1pcFZpZXctPnNpemVBdDAoKTsKKyAgICAgICAgIGJvb2wgaXNQb3cyID0gZ2w6OmlzUG93Mihz
aXplLndpZHRoKSAmJiBnbDo6aXNQb3cyKHNpemUuaGVpZ2h0KSAmJiBnbDo6aXNQb3cyKHNpemUu
ZGVwdGgpOworIAorQEAgLTI0NjEsMjAgKzI2MzYsMTggQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0
UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgCisgICAgICAg
ICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDw9IG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJhdGU7
ICsraSkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1p
cG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgaSksIGkpOworKyAgICAgICAgICAg
IGNtZEVuY29kZXItPnNldFRleHR1cmUobWlwbWFwT3V0cHV0Vmlld3MtPmF0KG10bDo6TWlwbWFw
TmF0aXZlTGV2ZWwob3B0aW9ucy5zcmNMZXZlbCArIGkpKSwgaSk7CisgICAgICAgICB9CisgCisg
ICAgICAgICB1aW50MzJfdCB0aHJlYWRzUGVyWiA9IHN0ZDo6bWF4KHNsaWNlcywgZmlyc3RNaXBW
aWV3LT5kZXB0aEF0MCgpKTsKKyAKKy0gICAgICAgIERpc3BhdGNoQ29tcHV0ZSgKKy0gICAgICAg
ICAgICBjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorKyAgICAgICAgRGlzcGF0Y2hDb21wdXRlKGNv
bnRleHRNdGwsIGNtZEVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGFsbG93
Tm9uVW5pZm9ybSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVExTaXplTWFr
ZShmaXJzdE1pcFZpZXctPndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0QXQwKCksIHRo
cmVhZHNQZXJaKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUpOwor
IAorICAgICAgICAgcmVtYWluTWlwcyAtPSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOwor
LSAgICAgICAgYmF0Y2hTcmNMZXZlbCAgICA9IGJhdGNoU3JjTGV2ZWwgKyBvcHRpb25zLm51bU1p
cG1hcHNUb0dlbmVyYXRlOworLSAgICAgICAgb3B0aW9ucy5zcmNMZXZlbCA9IGJhdGNoU3JjTGV2
ZWwuZ2V0KCk7CisrICAgICAgICBvcHRpb25zLnNyY0xldmVsICs9IG9wdGlvbnMubnVtTWlwbWFw
c1RvR2VuZXJhdGU7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworQEAgLTI1MDQsOCArMjY3Nyw3IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5l
U3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICBpbnQgc2hhZGVyVGV4
dHVyZVR5cGUgPSBHZXRTaGFkZXJUZXh0dXJlVHlwZSh0ZXh0dXJlKTsKKyAgICAgaW50IGluZGV4
MiA9IG10bF9zaGFkZXI6OmtUZXh0dXJlVHlwZUNvdW50ICogKGJ1ZmZlcldyaXRlID8gMSA6IDAp
ICsgc2hhZGVyVGV4dHVyZVR5cGU7CisgCistICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQ
aXBlbGluZVN0YXRlPj4gJmNhY2hlID0KKy0gICAgICAgIG1QaXhlbHNDb3B5UGlwZWxpbmVDYWNo
ZXNbZm9ybWF0SURWYWx1ZV1baW5kZXgyXTsKKysgICAgYXV0byAmY2FjaGUgPSBtUGl4ZWxzQ29w
eVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CisgCisgICAgIGlmICghY2Fj
aGUpCisgICAgIHsKK0BAIC0yNzgzLDcgKzI5NTUsMTAgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0
UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgVmVydGV4Rm9y
bWF0Q29udmVyc2lvblV0aWxzOjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlcikKKyB7CisrICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgPSBjb250ZXh0TXRsLT5nZXREaXNw
bGF5KCk7CisrICAgIGF1dG8gc2hhZGVyTGliICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hh
ZGVyc0xpYigpOworICAgICBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRp
YWxpemVkKGNvbnRleHRNdGwsIEAiZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9uZW50c1ZTIiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJM
aWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZSk7CisgCisgICAgIFJlbmRlclBp
cGVsaW5lRGVzYyBwaXBlbGluZURlc2MgPSBHZXRDb21wdXRpbmdWZXJ0ZXhTaGFkZXJPbmx5UmVu
ZGVyUGlwZWxpbmVEZXNjKGNtZEVuY29kZXIpOworQEAgLTI3OTcsOCArMjk3Miw3IEBAIEFOR0xF
X0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNv
ZGVyLAorIHsKKyAgICAgaW50IGZvcm1hdElEVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNyY0Fu
Z2xlRm9ybWF0LmlkKTsKKyAKKy0gICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5l
U3RhdGU+PiAmY2FjaGUgPQorLSAgICAgICAgbUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2Fj
aGVzW2Zvcm1hdElEVmFsdWVdOworKyAgICBhdXRvICZjYWNoZSA9IG1Db252ZXJ0VG9GbG9hdENv
bXBQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKKyAKKyAgICAgaWYgKCFjYWNoZSkKKyAg
ICAgeworQEAgLTI4NDksNSArMzAyMyw1MyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGlu
ZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgcmV0dXJuIGNhY2hl
LmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dE10bCwgcGlwZWxpbmVEZXNjKTsKKyB9Cisg
CisrQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IFRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNy
ZWF0ZU1zbFhmYkxpYnJhcnkoCisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkTXNsKQorK3sKKysgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKysgICAgeworKyAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSAgICAgPSBjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCk7CisrICAgICAgICBpZDxNVExEZXZpY2U+IG10bERldmljZSA9IGRp
c3BsYXktPmdldE1ldGFsRGV2aWNlKCk7CisrCisrICAgICAgICAvLyBDb252ZXJ0IHRvIGFjdHVh
bCBiaW5hcnkgc2hhZGVyCisrICAgICAgICBtdGw6OkF1dG9PYmpDUHRyPE5TRXJyb3IgKj4gZXJy
ID0gbmlsOworKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbXRsU2hh
ZGVyTGliID0KKysgICAgICAgICAgICBtdGw6OkNyZWF0ZVNoYWRlckxpYnJhcnkobXRsRGV2aWNl
LCB0cmFuc2xhdGVkTXNsLCAmZXJyKTsKKysgICAgICAgIGlmIChlcnIgJiYgIW10bFNoYWRlckxp
YikKKysgICAgICAgIHsKKysgICAgICAgICAgICBOU0xvZyhAIiVAIiwgZXJyLmdldCgpKTsKKysg
ICAgICAgICAgICBhc3NlcnQoMCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gbXRsU2hh
ZGVyTGliOworKyAgICB9CisrfQorKworK0F1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5l
U3RhdGU+PiBUcmFuc2Zvcm1GZWVkYmFja1V0aWxzOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1JlbmRl
clBpcGVsaW5lKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBSZW5kZXJDb21t
YW5kRW5jb2RlciAqY21kRW5jb2RlciwKKysgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBp
cGVsaW5lRGVzYykKKyt7CisrICAgIGNvbnN0IFByb2dyYW1NdGwgKnByb2dyYW1NdGwgPSBtdGw6
OkdldEltcGwoY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkpOworKyAgICBSZW5k
ZXJQaXBlbGluZUNhY2hlICZjYWNoZSAgID0gKnByb2dyYW1NdGwtPm1NZXRhbFhmYlJlbmRlclBp
cGVsaW5lQ2FjaGU7CisrCisrICAgIGlmICghY2FjaGUuZ2V0VmVydGV4U2hhZGVyKCkpCisrICAg
IHsKKysgICAgICAgIC8vIFBpcGVsaW5lIGNhY2hlIG5vdCBpbnRpYWxpemVkLCBkbyBpdCBub3c6
CisrICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGF1dG8gc2hhZGVyTGliID0gY3JlYXRlTXNsWGZiTGlicmFyeShjb250ZXh0TXRsLCBwcm9ncmFt
TXRsLT5nZXRYZmJNc2xTb3VyY2UoKSk7CisrICAgICAgICAgICAgLy8gTm9uIHNwZWNpYWxpemVk
IGNvbnN0YW50cyBwcm92aWRlZCwgdXNlIGRlZmF1bHQgY3JlYXRpb24gZnVuY3Rpb24uCisrICAg
ICAgICAgICAgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChj
b250ZXh0TXRsLCBTSEFERVJfRU5UUllfTkFNRSwgc2hhZGVyTGliLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlKTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICBSZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVE
ZXNjID0KKysgICAgICAgIEdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmVEZXNjKGNt
ZEVuY29kZXIsIHBpcGVsaW5lRGVzYyk7CisrCisrICAgIHJldHVybiBjYWNoZS5nZXRSZW5kZXJQ
aXBlbGluZVN0YXRlKGNvbnRleHRNdGwsIHhmYlBpcGVsaW5lRGVzYyk7CisrfQorKworIH0gIC8v
IG5hbWVzcGFjZSBtdGwKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9yZXNvdXJjZXMuaAoraW5kZXggZjIyMDY1MC4uMmUzMzM0ZCAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgKKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgKK0BAIC02Myw3ICs2
Myw2IEBAIGNsYXNzIFJlc291cmNlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIGJvb2wgaXND
UFVSZWFkTWVtTmVlZFN5bmMoKSBjb25zdCB7IHJldHVybiBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1O
ZWVkU3luYzsgfQorICAgICB2b2lkIHJlc2V0Q1BVUmVhZE1lbU5lZWRTeW5jKCkgeyBtVXNhZ2VS
ZWYtPmNwdVJlYWRNZW1OZWVkU3luYyA9IGZhbHNlOyB9CisgCistICAgIC8vIFRoZXNlIGZ1bmN0
aW9ucyBhcmUgdXNlZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1
cGRhdGUgdGhlIHNoYWRvdyBjb3B5CisgICAgIGJvb2wgaXNDUFVSZWFkTWVtRGlydHkoKSBjb25z
dCB7IHJldHVybiBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1EaXJ0eTsgfQorICAgICB2b2lkIHJlc2V0
Q1BVUmVhZE1lbURpcnR5KCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1EaXJ0eSA9IGZhbHNlOyB9
CisgCitAQCAtODEsNyArODAsNyBAQCBjbGFzcyBSZXNvdXJjZSA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQorICAgICAgICAgdWludDY0X3QgY21kQnVmZmVyUXVldWVTZXJpYWwgPSAwOworIAorICAgICAg
ICAgLy8gVGhpcyBmbGFnIG1lYW5zIHRoZSByZXNvdXJjZSB3YXMgaXNzdWVkIHRvIGJlIG1vZGlm
aWVkIGJ5IEdQVSwgaWYgQ1BVIHdhbnRzIHRvIHJlYWQKKy0gICAgICAgIC8vIGl0cyBjb250ZW50
LCBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gY2FsbCBtdXN0IGJlIGludm9rZWQuCisrICAgICAg
ICAvLyBpdHMgY29udGVudCwgZXhwbGljaXQgc3luY2hvcm5pemF0aW9uIGNhbGwgbXVzdCBiZSBp
bnZva2VkLgorICAgICAgICAgYm9vbCBjcHVSZWFkTWVtTmVlZFN5bmMgPSBmYWxzZTsKKyAKKyAg
ICAgICAgIC8vIFRoaXMgZmxhZyBpcyB1c2VmdWwgZm9yIEJ1ZmZlck10bCB0byBrbm93IHdoZXRo
ZXIgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgc2hhZG93IGNvcHkKK0BAIC0xMTAsNiArMTA5LDEzIEBA
IGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKyAKKysg
ICAgLy8gT24gbWFjT1MsIG1lbW9yeSB3aWxsIHN0aWxsIGJlIGFsbG9jYXRlZCBmb3IgdGhpcyB0
ZXh0dXJlLgorKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlTWVtb3J5TGVzczJEVGV4dHVy
ZShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdo
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZVJlZiAqcmVmT3V0KTsKKysKKyAgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZUN1YmVU
ZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCitAQCAtMTQ3LDEwICsxNTMsMjEg
QEAgY2xhc3MgVGV4dHVyZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworIAor
KyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRs
ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9TdXJmYWNlUmVmIHJlZiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGxhbmUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYg
KnJlZk91dCk7CisrCisgICAgIHN0YXRpYyBUZXh0dXJlUmVmIE1ha2VGcm9tTWV0YWwoaWQ8TVRM
VGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAKKyAgICAgLy8gQWxsb3cgQ1BVIHRvIHJlYWQgJiB3
cml0ZSBkYXRhIGRpcmVjdGx5IHRvIHRoaXMgdGV4dHVyZT8KKyAgICAgYm9vbCBpc0NQVUFjY2Vz
c2libGUoKSBjb25zdDsKKysgICAgLy8gQWxsb3cgc2hhZGVycyB0byByZWFkL3NhbXBsZSB0aGlz
IHRleHR1cmU/CisrICAgIC8vIFRleHR1cmUgY3JlYXRlZCB3aXRoIHJlbmRlclRhcmdldE9ubHkg
ZmxhZyB3b24ndCBiZSByZWFkYWJsZQorKyAgICBib29sIGlzU2hhZGVyUmVhZGFibGUoKSBjb25z
dDsKKyAKKyAgICAgYm9vbCBzdXBwb3J0Rm9ybWF0VmlldygpIGNvbnN0OworIAorQEAgLTIxOCwx
NiArMjM1LDI5IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisgICAg
IE1UTENvbG9yV3JpdGVNYXNrIGdldENvbG9yV3JpdGFibGVNYXNrKCkgY29uc3QgeyByZXR1cm4g
Km1Db2xvcldyaXRhYmxlTWFzazsgfQorICAgICB2b2lkIHNldENvbG9yV3JpdGFibGVNYXNrKE1U
TENvbG9yV3JpdGVNYXNrIG1hc2spIHsgKm1Db2xvcldyaXRhYmxlTWFzayA9IG1hc2s7IH0KKyAK
Ky0gICAgLy8gR2V0IGxpbmVhciBjb2xvciBzcGFjZSB2aWV3LiBPbmx5IHVzYWJsZSBmb3Igc1JH
QiB0ZXh0dXJlcy4KKy0gICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZpZXcoKTsKKysgICAg
Ly8gR2V0IHJlYWRpbmcgY29weS4gVXNlZCBmb3IgcmVhZGluZyBub24tcmVhZGFibGUgdGV4dHVy
ZSBvciByZWFkaW5nIHN0ZW5jaWwgdmFsdWUgZnJvbQorKyAgICAvLyBwYWNrZWQgZGVwdGggJiBz
dGVuY2lsIHRleHR1cmUuCisrICAgIC8vIE5PVEU6IHRoaXMgb25seSBjb3BpZXMgMSBkZXB0aCBz
bGljZSBvZiB0aGUgM0QgdGV4dHVyZS4KKysgICAgLy8gVGhlIHRleGVscyB3aWxsIGJlIGNvcGll
ZCB0byByZWdpb24oMCwgMCwgMCwgYXJlYVRvQ29weS5zaXplKSBvZiB0aGUgcmV0dXJuZWQgdGV4
dHVyZS4KKysgICAgLy8gVGhlIHJldHVybmVkIHBvaW50ZXIgd2lsbCBiZSByZXRhaW5lZCBieSB0
aGUgb3JpZ2luYWwgdGV4dHVyZSBvYmplY3QuCisrICAgIC8vIENhbGxpbmcgZ2V0UmVhZGFibGVD
b3B5KCkgd2lsbCBvdmVyd3JpdGUgcHJldmlvdXNseSByZXR1cm5lZCB0ZXh0dXJlLgorKyAgICBU
ZXh0dXJlUmVmIGdldFJlYWRhYmxlQ29weShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqZW5jb2RlciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgbGV2ZWxUb0Nv
cHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHNsaWNl
VG9Db3B5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNVExSZWdpb24g
JmFyZWFUb0NvcHkpOworKworKyAgICB2b2lkIHJlbGVhc2VSZWFkYWJsZUNvcHkoKTsKKyAKKyAg
ICAgLy8gR2V0IHN0ZW5jaWwgdmlldworICAgICBUZXh0dXJlUmVmIGdldFN0ZW5jaWxWaWV3KCk7
CisrICAgIC8vR2V0IGxpbmVhciBjb2xvcgorKyAgICBUZXh0dXJlUmVmIGdldExpbmVhckNvbG9y
VmlldygpOworIAorICAgICAvLyBDaGFuZ2UgdGhlIHdyYXBwZWQgbWV0YWwgb2JqZWN0LiBTcGVj
aWFsIGNhc2UgZm9yIHN3YXBjaGFpbiBpbWFnZQorICAgICB2b2lkIHNldChpZDxNVExUZXh0dXJl
PiBtZXRhbFRleHR1cmUpOworIAorLSAgICAvLyBzeW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5k
IEdQVQorKyAgICAvLyBFeHBsaWNpdGx5IHN5bmMgY29udGVudCBiZXR3ZWVuIENQVSBhbmQgR1BV
CisgICAgIHZvaWQgc3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29t
bWFuZEVuY29kZXIgKmVuY29kZXIpOworIAorICAgcHJpdmF0ZToKK0BAIC0yNDEsMTIgKzI3MSw0
MSBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKyAKKysg
ICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxG
b3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVE
ZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG1lbW9yeUxlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisrICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1h
a2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9TdXJmYWNlUmVmIHN1cmZhY2VSZWYsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgc2xpY2UsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25s
eSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAqcmVm
T3V0KTsKKysKKyAgICAgVGV4dHVyZShpZDxNVExUZXh0dXJlPiBtZXRhbFRleHR1cmUpOworICAg
ICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgTVRMVGV4dHVyZURl
c2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKyAgICAgICAgICAg
ICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZp
ZXcpOworKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgTVRM
VGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKysg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgYm9vbCBhbGxv
d0Zvcm1hdFZpZXcsCisrICAgICAgICAgICAgYm9vbCBtZW1vcnlMZXNzKTsKKysKKysgICAgVGV4
dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjLAorKyAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2UsCisrICAgICAg
ICAgICAgTlNVSW50ZWdlciBwbGFuZSwKKysgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9u
bHkpOworIAorICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHZpZXcKKyAgICAgVGV4dHVyZShUZXh0
dXJlICpvcmlnaW5hbCwgTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KTsKK0BAIC0yNjQsOSArMzIzLDE0
IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisgICAgIFRleHR1cmVS
ZWYgbUxpbmVhckNvbG9yVmlldzsKKyAKKyAgICAgVGV4dHVyZVJlZiBtU3RlbmNpbFZpZXc7Cisr
ICAgIC8vUmVhZGFibGUgY29weSBvZiB0ZXh0dXJlCisrICAgIFRleHR1cmVSZWYgbVJlYWRDb3B5
OworKworIH07CisgCistY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJlc291cmNlLCBwdWJs
aWMgV3JhcHBlZE9iamVjdDxpZDxNVExCdWZmZXI+PgorK2NsYXNzIEJ1ZmZlciBmaW5hbCA6IHB1
YmxpYyBSZXNvdXJjZSwKKysgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV3JhcHBlZE9iamVj
dDxpZDxNVExCdWZmZXI+PiwKKysgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjplbmFi
bGVfc2hhcmVkX2Zyb21fdGhpczxCdWZmZXI+CisgeworICAgcHVibGljOgorICAgICBzdGF0aWMg
YW5nbGU6OlJlc3VsdCBNYWtlQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsCitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMubW0gYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbQoraW5kZXggOWJlZTQ3NS4uYWI3
YTJkYyAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3Vy
Y2VzLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5t
bQorQEAgLTM0LDIwICszNCwyMiBAQCBpbmxpbmUgTlNVSW50ZWdlciBHZXRNaXBTaXplKE5TVUlu
dGVnZXIgYmFzZVNpemUsIGNvbnN0IE1pcG1hcE5hdGl2ZUxldmVsIGxldmVsKQorIC8vIEFzeW5j
aHJvbm91c2x5IHN5bmNocm9uaXplIHRoZSBjb250ZW50IG9mIGEgcmVzb3VyY2UgYmV0d2VlbiBH
UFUgbWVtb3J5IGFuZCBpdHMgQ1BVIGNhY2hlLgorIC8vIE5PVEU6IFRoaXMgb3BlcmF0aW9uIGRv
ZXNuJ3QgZmluaXNoIGltbWVkaWF0ZWx5IHVwb24gZnVuY3Rpb24ncyByZXR1cm4uCisgdGVtcGxh
dGUgPGNsYXNzIFQ+Cistdm9pZCBJbnZva2VDUFVNZW1TeW5jKENvbnRleHRNdGwgKmNvbnRleHQs
IG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2RlciwgVCAqcmVzb3VyY2UpCisrdm9p
ZCBTeW5jQ29udGVudChDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgbXRs
OjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyLAorKyAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKKyB7CisgI2lmIFRBUkdFVF9PU19PU1gg
fHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisgICAgIGlmIChibGl0RW5jb2RlcikKKyAgICAgewor
ICAgICAgICAgYmxpdEVuY29kZXItPnN5bmNocm9uaXplUmVzb3VyY2UocmVzb3VyY2UpOworKwor
ICAgICAgICAgcmVzb3VyY2UtPnJlc2V0Q1BVUmVhZE1lbU5lZWRTeW5jKCk7CisgICAgIH0KKyAj
ZW5kaWYKKyB9CistLy8gRW5zdXJlIHRoYXQgYSByZXNvdXJjZSdzIENQVSBjYWNoZSB3aWxsIGJl
IHN5bmNocm9uaXplZCBhZnRlciBHUFUgZmluaXNoZXMgaXRzIG1vZGlmaWNhdGlvbnMgb24KKy0v
LyB0aGUgcmVzb3VyY2UuCisrCisgdGVtcGxhdGUgPGNsYXNzIFQ+Cistdm9pZCBFbnN1cmVDUFVN
ZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCisrdm9pZCBF
bnN1cmVDb250ZW50U3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIGNvbnN0IHN0ZDo6c2hhcmVk
X3B0cjxUPiAmcmVzb3VyY2UpCisgeworICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19N
QUNDQVRBTFlTVAorICAgICAvLyBNYWtlIHN1cmUgR1BVICYgQ1BVIGNvbnRlbnRzIGFyZSBzeW5j
aHJvbml6ZWQuCitAQCAtNTYsNyArNTgsNyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNl
ZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgaWYgKHJlc291cmNlLT5n
ZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdlTW9kZU1hbmFnZWQgJiYgcmVzb3VyY2UtPmlz
Q1BVUmVhZE1lbU5lZWRTeW5jKCkpCisgICAgIHsKKyAgICAgICAgIG10bDo6QmxpdENvbW1hbmRF
bmNvZGVyICpibGl0RW5jb2RlciA9IGNvbnRleHQtPmdldEJsaXRDb21tYW5kRW5jb2RlcigpOwor
LSAgICAgICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgcmVzb3VyY2Up
OworKyAgICAgICAgU3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsK
KyAgICAgfQorICNlbmRpZgorIH0KK0BAIC0xMjIsNiArMTI0LDI0IEBAIHZvaWQgRW5zdXJlQ1BV
TWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB9
ICAvLyBBTkdMRV9NVExfT0JKQ19TQ09QRQorIH0KKyAKKysvKiogc3RhdGljICovCisrYW5nbGU6
OlJlc3VsdCBUZXh0dXJlOjpNYWtlTWVtb3J5TGVzczJEVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKKyt7CisrICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgIHsKKysgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjID0KKysgICAgICAgICAgICBbTVRMVGV4dHVyZURlc2NyaXB0b3IgdGV4dHVyZTJE
RGVzY3JpcHRvcldpdGhQaXhlbEZvcm1hdDpmb3JtYXQubWV0YWxGb3JtYXQKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDp3aWR0aAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0OmhlaWdodAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwbWFwcGVkOk5PXTsKKysKKysgICAg
ICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIDEsIHRydWUsIGZh
bHNlLCB0cnVlLCByZWZPdXQpOworKyAgICB9ICAvLyBBTkdMRV9NVExfT0JKQ19TQ09QRQorK30K
KyAvKiogc3RhdGljICovCisgYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlQ3ViZVRleHR1cmUo
Q29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKK0BAIC0yMjMsNiArMjQzLDIzIEBAIHZvaWQgRW5z
dXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQor
ICAgICAgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIGZvcm1hdCwgZGVzYywgbWlwcywg
cmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCByZWZPdXQpOworICAgICB9ICAvLyBB
TkdMRV9NVExfT0JKQ19TQ09QRQorIH0KKythbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VJT1N1
cmZhY2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9TdXJmYWNlUmVm
IHJlZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4dHVyZVJlZiAqcmVmT3V0KQorK3sKKysgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2Mg
PSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKysg
ICAgZGVzYy50ZXh0dXJlVHlwZSAgICAgICAgICAgPSBNVExUZXh0dXJlVHlwZTJEOworKyAgICBk
ZXNjLnBpeGVsRm9ybWF0ICAgICAgICAgICA9IGZvcm1hdC5tZXRhbEZvcm1hdDsKKysgICAgZGVz
Yy53aWR0aCAgICAgICAgICAgICAgICAgPSB3aWR0aDsKKysgICAgZGVzYy5oZWlnaHQgICAgICAg
ICAgICAgICAgPSBoZWlnaHQ7CisrICAgIGRlc2MubWlwbWFwTGV2ZWxDb3VudCAgICAgID0gMTsK
KysgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgICAgICAgPSAxOworKyAgICByZXR1cm4gTWFrZVRl
eHR1cmUoY29udGV4dCwgZm9ybWF0LCBkZXNjLCByZWYsIHBsYW5lLCBOTywgcmVmT3V0KTsKKyt9
CisgCisgLyoqIHN0YXRpYyAqLworIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZVRleHR1cmUo
Q29udGV4dE10bCAqY29udGV4dCwKK0BAIC0yMzMsNyArMjcwLDQyIEBAIHZvaWQgRW5zdXJlQ1BV
TWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCisgewor
LSAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRl
clRhcmdldE9ubHksIGFsbG93Rm9ybWF0VmlldykpOworKyAgICByZXR1cm4gTWFrZVRleHR1cmUo
Y29udGV4dCwgbXRsRm9ybWF0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zv
cm1hdFZpZXcsIGZhbHNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgcmVmT3V0KTsKKyt9Cisr
CisrYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxG
b3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVz
Y3JpcHRvciAqZGVzYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IG1pcHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRl
clRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
bG93Rm9ybWF0VmlldywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bWVtb3J5TGVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVS
ZWYgKnJlZk91dCkKKyt7CisrICAgIHJlZk91dC0+cmVzZXQobmV3IFRleHR1cmUoY29udGV4dCwg
ZGVzYywgbWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBtZW1vcnlMZXNz
KSk7CisrCisrICAgIGlmICghcmVmT3V0IHx8ICFyZWZPdXQtPmdldCgpKQorKyAgICB7CisrICAg
ICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dCwgZmFsc2UsIEdMX09VVF9PRl9NRU1PUlkpOwor
KyAgICB9CisrICAgIGlmICghbXRsRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSkKKysg
ICAgeworKyAgICAgICAgcmVmT3V0LT5nZXQoKS0+c2V0Q29sb3JXcml0YWJsZU1hc2soR2V0RW11
bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQpKTsKKysgICAgfQorKworKyAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgc2xpY2UsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCisrewor
KyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIHN1cmZhY2VSZWYs
IHNsaWNlLCByZW5kZXJUYXJnZXRPbmx5KSk7CisgCisgICAgIGlmICghKCpyZWZPdXQpIHx8ICEo
KnJlZk91dCktPmdldCgpKQorICAgICB7CitAQCAtMjY0LDYgKzMzNiwxNSBAQCB2b2lkIEVuc3Vy
ZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgICAgICBib29sIHJl
bmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldykK
KysgICAgOiBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFs
bG93Rm9ybWF0VmlldywgZmFsc2UpCisre30KKysKKytUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVz
YywKKysgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisrICAgICAgICAgICAgICAgICBi
b29sIHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0
VmlldywKKysgICAgICAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcykKKyAgICAgOiBtQ29sb3JX
cml0YWJsZU1hc2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRlTWFzaz4oTVRMQ29sb3JX
cml0ZU1hc2tBbGwpKQorIHsKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKK0BAIC0yODMsNyAr
MzY0LDE1IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRl
eHQsIFQgKnJlc291cmNlKQorICAgICAgICAgICAgIGRlc2MudXNhZ2UgfD0gTVRMVGV4dHVyZVVz
YWdlUmVuZGVyVGFyZ2V0OworICAgICAgICAgfQorIAorLSAgICAgICAgaWYgKGNvbnRleHQtPmdl
dE5hdGl2ZUZvcm1hdENhcHMoZGVzYy5waXhlbEZvcm1hdCkuZGVwdGhSZW5kZXJhYmxlIHx8Cisr
ICAgICAgICBpZiAobWVtb3J5TGVzcykKKysgICAgICAgIHsKKysjaWYgKFRBUkdFVF9PU19JT1Mg
fHwgVEFSR0VUX09TX1RWKSAmJiAhVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrICAgICAgICAgICAg
ZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWVtb3J5bGVzczsK
KysjZWxzZQorKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VT
dG9yYWdlTW9kZVByaXZhdGU7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlm
IChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4ZWxGb3JtYXQpLmRlcHRoUmVu
ZGVyYWJsZSB8fAorICAgICAgICAgICAgICAgICAgZGVzYy50ZXh0dXJlVHlwZSA9PSBNVExUZXh0
dXJlVHlwZTJETXVsdGlzYW1wbGUpCisgICAgICAgICB7CisgICAgICAgICAgICAgLy8gTWV0YWwg
ZG9lc24ndCBzdXBwb3J0IGhvc3QgYWNjZXNzIHRvIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSdzIGRh
dGEKK0BAIC0zMTAsNiArMzk5LDQ2IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENv
bnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB9CisgfQorIAorK1RleHR1cmU6
OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgIE1UTFRleHR1
cmVEZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgSU9TdXJmYWNlUmVmIGlvc3Vy
ZmFjZSwKKysgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGxhbmUsCisrICAgICAgICAgICAg
ICAgICBib29sIHJlbmRlclRhcmdldE9ubHkpCisrICAgIDogbUNvbG9yV3JpdGFibGVNYXNrKHN0
ZDo6bWFrZV9zaGFyZWQ8TVRMQ29sb3JXcml0ZU1hc2s+KE1UTENvbG9yV3JpdGVNYXNrQWxsKSkK
Kyt7CisrICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgIHsKKysgICAgICAgIGlkPE1UTERl
dmljZT4gbWV0YWxEZXZpY2UgPSBjb250ZXh0LT5nZXRNZXRhbERldmljZSgpOworKworKyAgICAg
ICAgLy8gRXZlcnkgdGV4dHVyZSB3aWxsIHN1cHBvcnQgYmVpbmcgcmVuZGVyZWQgZm9yIG5vdwor
KyAgICAgICAgZGVzYy51c2FnZSA9IE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0VmlldzsKKysK
KysgICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4ZWxGb3Jt
YXQpLmlzUmVuZGVyYWJsZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGRlc2MudXNhZ2Ug
fD0gTVRMVGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OworKyAgICAgICAgfQorKworKyNpZiAoVEFS
R0VUX09TX0lPUyB8fCBUQVJHRVRfT1NfVFYgfHwgVEFSR0VUX09TX1dBVENIKSAmJiAhVEFSR0VU
X09TX01BQ0NBVEFMWVNUCisrICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291
cmNlU3RvcmFnZU1vZGVTaGFyZWQ7CisrI2Vsc2UKKysgICAgICAgIGRlc2MucmVzb3VyY2VPcHRp
b25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZU1hbmFnZWQ7CisrI2VuZGlmCisrCisrICAgICAg
ICBpZiAoIXJlbmRlclRhcmdldE9ubHkpCisrICAgICAgICB7CisrICAgICAgICAgICAgZGVzYy51
c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFkOworKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4ZWxGb3JtYXQpLndy
aXRhYmxlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZGVzYy51c2FnZSA9IGRl
c2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICB9CisrICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZUZXh0dXJlID0gW21ldGFs
RGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3VyZmFj
ZTppb3N1cmZhY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOnBsYW5lXTsKKysgICAgICAgIHNldChb
aW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKysgICAgfQorK30KKysKKyBU
ZXh0dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBNVExQaXhlbEZvcm1hdCBmb3JtYXQp
CisgICAgIDogUmVzb3VyY2Uob3JpZ2luYWwpLAorICAgICAgIG1Db2xvcldyaXRhYmxlTWFzayhv
cmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Igd3JpdGUgbWFzayBw
cm9wZXJ0eQorQEAgLTM0MSw3ICs0NzAsNyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNl
ZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgOiBSZXNvdXJjZShvcmln
aW5hbCksCisgICAgICAgbUNvbG9yV3JpdGFibGVNYXNrKG9yaWdpbmFsLT5tQ29sb3JXcml0YWJs
ZU1hc2spICAvLyBTaGFyZSBjb2xvciB3cml0ZSBtYXNrIHByb3BlcnR5CisgeworLSNpZiBBTkdM
RV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKysjaWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBk
ZWZpbmVkKF9fTUFDXzEwXzE1KQorICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICB7Cisg
ICAgICAgICBhdXRvIHZpZXcgPSBbb3JpZ2luYWwtPmdldCgpCitAQCAtMzYwLDEyICs0ODksMTIg
QEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAq
cmVzb3VyY2UpCisgCisgdm9pZCBUZXh0dXJlOjpzeW5jQ29udGVudChDb250ZXh0TXRsICpjb250
ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCisgeworLSAgICBJbnZv
a2VDUFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKysgICAgU3luY0NvbnRl
bnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CisgfQorIAorIHZv
aWQgVGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZChDb250ZXh0TXRsICpjb250ZXh0KQorIHsK
Ky0gICAgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQsIHRoaXMpOworKyAgICBFbnN1
cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CisgfQorIAorIGJv
b2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKK0BAIC0zNzksNiArNTA4LDExIEBA
IHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJl
c291cmNlKQorICAgICByZXR1cm4gZ2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3RvcmFnZU1vZGVT
aGFyZWQ7CisgfQorIAorK2Jvb2wgVGV4dHVyZTo6aXNTaGFkZXJSZWFkYWJsZSgpIGNvbnN0Cisr
eworKyAgICByZXR1cm4gZ2V0KCkudXNhZ2UgJiBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFkOwor
K30KKysKKyBib29sIFRleHR1cmU6OnN1cHBvcnRGb3JtYXRWaWV3KCkgY29uc3QKKyB7CisgICAg
IHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0VmlldzsKK0BA
IC01MTQsMTIgKzY0OCwxNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0
TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3
KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVyZSh0aGlzLCBmb3JtYXQpKTsK
KyB9CisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aENvbXBhdGlibGVGb3Jt
YXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQorIHsKKy0gICAgLy8gTm8gbmVlZCBmb3IgQVNTRVJU
KHN1cHBvcnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVy
ZSh0aGlzLCBmb3JtYXQpKTsKKyB9CisgCisrCisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVh
dGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICZzd2l6emxlKQorIHsK
KyAjaWYgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFCitAQCAtNjUyLDYgKzc4OCw0OCBAQCB2
b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNv
dXJjZSkKKyAgICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CisgfQorIAorK1RleHR1cmVSZWYg
VGV4dHVyZTo6Z2V0UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29k
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qg
bGV2ZWxUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDMyX3Qgc2xpY2VUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KQorK3sKKysgICAgZ2w6OkV4dGVudHMgZmly
c3RMZXZlbFNpemUgPSBzaXplKGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworKyAgICBpZiAoIW1SZWFk
Q29weSB8fCBtUmVhZENvcHktPmdldCgpLndpZHRoIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJz
dExldmVsU2l6ZS53aWR0aCkgfHwKKysgICAgICAgIG1SZWFkQ29weS0+Z2V0KCkuaGVpZ2h0IDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdExldmVsU2l6ZS5oZWlnaHQpKQorKyAgICB7CisrICAg
ICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRoYXQgYmlnIGVub3VnaCB0byBzdG9yZSB0aGUgZmly
c3QgbGV2ZWwgZGF0YSBhbmQgYW55IHNtYWxsZXIgbGV2ZWwKKysgICAgICAgIEFOR0xFX01UTF9P
QkpDX1NDT1BFCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byBkZXNjICAgICAgICAgICAg
PSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKysg
ICAgICAgICAgICBkZXNjLnRleHR1cmVUeXBlICAgICA9IGdldCgpLnRleHR1cmVUeXBlOworKyAg
ICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQgICAgID0gZ2V0KCkucGl4ZWxGb3JtYXQ7CisrICAg
ICAgICAgICAgZGVzYy53aWR0aCAgICAgICAgICAgPSBmaXJzdExldmVsU2l6ZS53aWR0aDsKKysg
ICAgICAgICAgICBkZXNjLmhlaWdodCAgICAgICAgICA9IGZpcnN0TGV2ZWxTaXplLmhlaWdodDsK
KysgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAgICAgICA9IDE7CisrICAgICAgICAgICAgZGVz
Yy5hcnJheUxlbmd0aCAgICAgPSAxOworKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25z
ID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVByaXZhdGU7CisrICAgICAgICAgICAgZGVzYy5zYW1w
bGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsKKysgICAgICAgICAgICBkZXNjLnVzYWdl
ICAgICAgICAgICA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0dXJlVXNhZ2VQ
aXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gbXRsVGV4dHVy
ZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpk
ZXNjXTsKKysgICAgICAgICAgICBtUmVhZENvcHkucmVzZXQobmV3IFRleHR1cmUobXRsVGV4dHVy
ZSkpOworKyAgICAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKysgICAgfQorKworKyAg
ICBBU1NFUlQoZW5jb2Rlcik7CisrCisrICAgIGVuY29kZXItPmNvcHlUZXh0dXJlKHNoYXJlZF9m
cm9tX3RoaXMoKSwgc2xpY2VUb0NvcHksIGxldmVsVG9Db3B5LCBtUmVhZENvcHksIDAsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDEpOworKworKyAgICByZXR1cm4gbVJlYWRDb3B5
OworK30KKysKKyt2b2lkIFRleHR1cmU6OnJlbGVhc2VSZWFkYWJsZUNvcHkoKQorK3sKKysgICAg
bVJlYWRDb3B5ID0gbnVsbHB0cjsKKyt9CisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpnZXRTdGVu
Y2lsVmlldygpCisgeworICAgICBpZiAobVN0ZW5jaWxWaWV3KQorQEAgLTc5OSw3ICs5NzcsNyBA
QCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpy
ZXNvdXJjZSkKKyAKKyB2b2lkIEJ1ZmZlcjo6c3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4
dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyKQorIHsKKy0gICAgSW52b2tl
Q1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisrICAgIFN5bmNDb250ZW50
KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkpOworIH0KKyAKKyBjb25z
dCB1aW50OF90ICpCdWZmZXI6Om1hcFJlYWRPbmx5KENvbnRleHRNdGwgKmNvbnRleHQpCitAQCAt
ODIwLDcgKzk5OCw3IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwg
KmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB7CisgICAgICAgICBDb21tYW5kUXVldWUgJmNt
ZFF1ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKKyAKKy0gICAgICAgIEVuc3VyZUNQVU1lbVdp
bGxCZVN5bmNlZChjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIEVuc3VyZUNvbnRlbnRTeW5jZWQo
Y29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAKKyAgICAgICAgIGlmICh0aGlzLT5pc0Jl
aW5nVXNlZEJ5R1BVKGNvbnRleHQpKQorICAgICAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAoraW5kZXggNzY4YzM2OS4uZTZiZjcxZCAxMDA2
NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAor
KysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oCitAQCAt
MjIsNiArMjIsMTEgQEAKKyAKKyBzdGF0aWMgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
VExDbGVhckNvbG9yICZsaHMsIGNvbnN0IE1UTENsZWFyQ29sb3IgJnJocyk7CisgCisrbmFtZXNw
YWNlIGFuZ2xlCisreworK3N0cnVjdCBGZWF0dXJlc010bDsKKyt9CisrCisgbmFtZXNwYWNlIHJ4
CisgeworIGNsYXNzIENvbnRleHRNdGw7CitAQCAtMjIzLDcgKzIyOCw4IEBAIHN0cnVjdCBSZW5k
ZXJQaXBlbGluZU91dHB1dERlc2MKKyB9OworIAorIC8vIFNvbWUgU0RLIGxldmVscyBkb24ndCBk
ZWNsYXJlIE1UTFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MuIE5lZWRzIHRvIGRvIGNvbXBpbGUgdGlt
ZSBjaGVjayBoZXJlOgorLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFM
WVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBIT05FXzEyXzAKKysjaWYgIShU
QVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkgJiYgXAorKyAgICAoIWRlZmlu
ZWQoX19JUEhPTkVfMTJfMCkgfHwgQU5HTEVfSU9TX0RFUExPWV9UQVJHRVQgPCBfX0lQSE9ORV8x
Ml8wKQorICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9QT0xPR1lfQ0xBU1NfQVZB
SUxBQkxFIDAKKyB1c2luZyBQcmltaXRpdmVUb3BvbG9neUNsYXNzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gdWludDMyX3Q7CisgY29uc3RleHByIFByaW1pdGl2ZVRvcG9s
b2d5Q2xhc3Mga1ByaW1pdGl2ZVRvcG9sb2d5Q2xhc3NUcmlhbmdsZSA9IDA7CitAQCAtMjY3LDkg
KzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVzYworICAgICBSZW5k
ZXJQaXBlbGluZURlc2MgJm9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnNyYyk7
CisgCisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJocykg
Y29uc3Q7CistCisgICAgIHNpemVfdCBoYXNoKCkgY29uc3Q7CistCisgICAgIGJvb2wgcmFzdGVy
aXphdGlvbkVuYWJsZWQoKSBjb25zdDsKKyAKKyAgICAgVmVydGV4RGVzYyB2ZXJ0ZXhEZXNjcmlw
dG9yOworQEAgLTI4OCw2ICsyOTIsMjcgQEAgc3RydWN0IGFsaWduYXMoNCkgUmVuZGVyUGlwZWxp
bmVEZXNjCisgICAgIGJvb2wgZW11bGF0ZUNvdmVyYWdlTWFzayA6IDE7CisgfTsKKyAKKytzdHJ1
Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYworK3sKKysgICAgVGV4dHVy
ZVJlZiBnZXRUZXh0dXJlUmVmKCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZS5sb2NrKCk7IH0KKysg
ICAgVGV4dHVyZVJlZiBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpIGNvbnN0IHsgcmV0dXJuIGlt
cGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorKyAgICBib29sIGhhc0ltcGxpY2l0TVNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQoKTsgfQorKyAgICB1
aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKKysgICAgeworKyAgICAgICAgVGV4dHVy
ZVJlZiB0ZXggICA9IGdldFRleHR1cmVSZWYoKTsKKysgICAgICAgIFRleHR1cmVSZWYgbXNUZXgg
PSBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOworKyAgICAgICAgcmV0dXJuIG1zVGV4ID8gbXNU
ZXgtPnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOworKyAgICB9CisrCisr
ICAgIFRleHR1cmVXZWFrUmVmIHRleHR1cmU7CisrICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxl
IHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUg
ZW5kIG9mCisrICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQgd2lsbCBiZSByZXNvbHZl
ZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorKyAgICBUZXh0dXJlV2Vha1JlZiBpbXBsaWNp
dE1TVGV4dHVyZTsKKysgICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBrWmVyb05hdGl2ZU1p
cExldmVsOworKyAgICB1aW50MzJfdCBzbGljZU9yRGVwdGggICA9IDA7CisrICAgIGJvb2wgYmxl
bmRhYmxlICAgICAgICAgID0gdHJ1ZTsKKyt9OworKworIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MKKyB7CisgICAgIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYygpOworQEAgLTI5Nywx
OCArMzIyLDM0IEBAIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKKyAgICAgYm9vbCBl
cXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
ICZvdGhlcikgY29uc3Q7CisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQYXNzQXR0
YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKKyAKKy0gICAgQU5HTEVfSU5MSU5FIGJvb2wgaGFz
SW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBpbXBsaWNpdE1TVGV4dHVyZS5nZXQo
KTsgfQorLQorLSAgICBUZXh0dXJlUmVmIHRleHR1cmU7CistICAgIC8vIEltcGxpY2l0IG11bHRp
c2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBh
dCB0aGUgZW5kIG9mCistICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQgd2lsbCBiZSBy
ZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorLSAgICBUZXh0dXJlUmVmIGltcGxp
Y2l0TVNUZXh0dXJlOworLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbDsKKy0gICAgdWludDMy
X3Qgc2xpY2VPckRlcHRoOworLQorLSAgICAvLyBUaGlzIGF0dGFjaG1lbnQgaXMgYmxlbmRhYmxl
IG9yIG5vdC4KKy0gICAgYm9vbCBibGVuZGFibGU7CisrICAgIEFOR0xFX0lOTElORSBUZXh0dXJl
UmVmIHRleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0
ID8gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0dXJlUmVmKCkgOiBudWxscHRyOworKyAgICB9CisrICAg
IEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QKKysgICAg
eworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+Z2V0SW1wbGlj
aXRNU1RleHR1cmVSZWYoKSA6IG51bGxwdHI7CisrICAgIH0KKysgICAgQU5HTEVfSU5MSU5FIGJv
b2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4dHVyZSgpIDogZmFs
c2U7CisrICAgIH0KKysgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHJlbmRlclNhbXBsZXMoKSBj
b25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0
LT5nZXRSZW5kZXJTYW1wbGVzKCkgOiAxOworKyAgICB9CisrICAgIEFOR0xFX0lOTElORSBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiByZW5k
ZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmxldmVsIDoga1plcm9OYXRpdmVNaXBMZXZlbDsKKysg
ICAgfQorKyAgICBBTkdMRV9JTkxJTkUgdWludDMyX3Qgc2xpY2VPckRlcHRoKCkgY29uc3QKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+c2xpY2VP
ckRlcHRoIDogMDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBibGVuZGFibGUoKSBj
b25zdCB7IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmJsZW5kYWJsZSA6IGZh
bHNlOyB9CisgCisrICAgIC8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8gYXZvaWQgY3Jhc2hp
bmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFtZSBidWZmZXIuCisr
ICAgIHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNj
PiByZW5kZXJUYXJnZXQ7CisgICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlvbjsKKyAgICAgTVRM
U3RvcmVBY3Rpb24gc3RvcmVBY3Rpb247CisgICAgIE1UTFN0b3JlQWN0aW9uT3B0aW9ucyBzdG9y
ZUFjdGlvbk9wdGlvbnM7CitAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1N0
ZW5jaWxBdHRhY2htZW50RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKKyAg
ICAgdWludDMyX3QgY2xlYXJTdGVuY2lsID0gMDsKKyB9OworIAorKy8vCisrLy8gVGhpcyBpcyBD
KysgZXF1aXZhbGVudCBvZiBPYmplY3RpdmUtQyBNVExSZW5kZXJQYXNzRGVzY3JpcHRvci4KKysv
LyBXZSBjb3VsZCB1c2UgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0bHksIGhvd2V2ZXIs
IHVzaW5nIEMrKyBzdHJ1Y3QgaGFzIGJlbmVmaXRzIG9mIGZhc3QKKysvLyBjb3B5LCBzdGFjayBh
bGxvY2F0aW9uLCBpbmxpbmVkIGNvbXBhcmluZyBmdW5jdGlvbiwgZXRjLgorKy8vCisgc3RydWN0
IFJlbmRlclBhc3NEZXNjCisgeworICAgICBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyBj
b2xvckF0dGFjaG1lbnRzW2tNYXhSZW5kZXJUYXJnZXRzXTsKK0BAIC00MTcsNyArNDYzLDYgQEAg
Y2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CisgeworICAg
cHVibGljOgorICAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNoYWRl
ckZhY3RvcnkoKSA9IGRlZmF1bHQ7CistCisgICAgIC8vIEdldCBzcGVjaWFsaXplZCBzaGFkZXIg
Zm9yIHRoZSByZW5kZXIgcGlwZWxpbmUgY2FjaGUuCisgICAgIHZpcnR1YWwgYW5nbGU6OlJlc3Vs
dCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKK0BAIC00MjksNyArNDc0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxp
emVTaGFkZXJGYWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykgPSAwOworIH07Cisg
CistLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBzaGFkZXIgcHJvZ3JhbS4KKysv
LyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2FjaGUgcGVyIHNoYWRlciBwcm9ncmFtCisgY2xhc3Mg
UmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorIHsKKyAgIHB1
YmxpYzoKK0BAIC00NTksNiArNTA0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5h
bCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBBdXRvT2JqQ1B0cjxpZDxNVExGdW5jdGlvbj4+
IG1WZXJ0ZXhTaGFkZXI7CisgICAgIC8vIE5vbi1zcGVjaWFsaXplZCBmcmFnbWVudCBzaGFkZXIK
KyAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBtRnJhZ21lbnRTaGFkZXI7CisrICAg
IC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlzY2FyZCwgb25lIHdp
dGhvdXQKKyAKKyAgIHByaXZhdGU6CisgICAgIHZvaWQgY2xlYXJQaXBlbGluZVN0YXRlcygpOwor
QEAgLTQ3NywxNCArNTIzLDEzIEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBh
bmdsZTo6Tm9uQ29weWFibGUKKyAgICAgLy8gT25lIHRhYmxlIHdpdGggZGVmYXVsdCBhdHRyaWIg
YW5kIG9uZSB0YWJsZSB3aXRob3V0LgorICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8UmVuZGVyUGlw
ZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4+CisgICAg
ICAgICBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbMl07CistCisgICAgIFJlbmRlclBpcGVsaW5lQ2Fj
aGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeTsKKyB9
OworIAorIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyB7Cisg
ICBwdWJsaWM6CistICAgIFN0YXRlQ2FjaGUoKTsKKysgICAgU3RhdGVDYWNoZShjb25zdCBhbmds
ZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzKTsKKyAgICAgflN0YXRlQ2FjaGUoKTsKKyAKKyAgICAg
Ly8gTnVsbCBkZXB0aCBzdGVuY2lsIHN0YXRlIGhhcyBkZXB0aC9zdGVjaWwgcmVhZCAmIHdyaXRl
IGRpc2FibGVkLgorQEAgLTUwMiw2ICs1NDcsOCBAQCBjbGFzcyBTdGF0ZUNhY2hlIGZpbmFsIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHZvaWQgY2xlYXIoKTsKKyAKKyAgIHByaXZhdGU6Cisr
ICAgIGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworKworICAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+IG1OdWxsRGVwdGhTdGVuY2lsU3RhdGUgPSBu
aWw7CisgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNjLCBBdXRvT2JqQ1B0
cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3RhdGVzOworICAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8U2FtcGxlckRlc2MsIEF1dG9PYmpDUHRyPGlkPE1UTFNhbXBsZXJT
dGF0ZT4+PiBtU2FtcGxlclN0YXRlczsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9zdGF0ZV9jYWNoZS5tbQoraW5kZXggMWNmMjM3YS4uNjk4NGRiZCAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0KKysrKyBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0KK0BAIC0xNyw2ICsx
Nyw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgorICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKKysjaW5jbHVkZSAi
cGxhdGZvcm0vRmVhdHVyZXNNdGwuaCIKKyAKKyAjZGVmaW5lIEFOR0xFX09CSkNfQ1BfUFJPUEVS
VFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCisgICAgIChEU1QpLlBST1BFUlRZID0gc3RhdGljX2Nh
c3Q8X190eXBlb2ZfXygoRFNUKS5QUk9QRVJUWSk+KFRvT2JqQygoU1JDKS5QUk9QRVJUWSkpCitA
QCAtMTgyLDEwICsxODMsMTAgQEAgaW5saW5lIFQgVG9PYmpDKGNvbnN0IFQgcCkKKyAgICAgcmV0
dXJuIHRleHR1cmVSZWYgPyB0ZXh0dXJlUmVmLT5nZXQoKSA6IG5pbDsKKyB9CisgCistdm9pZCBC
YXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2ht
ZW50RGVzYyAmc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
VExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCkKKyt2b2lkIEJhc2VSZW5kZXJQ
YXNzQXR0YWNobWVudERlc2NUb09iakMoTVRMUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjcmlwdG9y
ICpkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
bmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjKQorIHsKKy0gICAgY29uc3QgVGV4dHVyZVJlZiAm
aW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmU7CisrICAgIGF1dG8gaW1w
bGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmUoKTsKKyAKKyAgICAgaWYgKGlt
cGxpY2l0TXNUZXh0dXJlKQorICAgICB7CitAQCAtMTkzLDMxICsxOTQsMzEgQEAgdm9pZCBCYXNl
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50
RGVzYyAmc3JjLAorICAgICAgICAgZHN0LmxldmVsICAgICAgICAgID0gMDsKKyAgICAgICAgIGRz
dC5zbGljZSAgICAgICAgICA9IDA7CisgICAgICAgICBkc3QuZGVwdGhQbGFuZSAgICAgPSAwOwor
LSAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKKy0gICAg
ICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbC5nZXQoKTsKKysgICAgICAgIGRzdC5y
ZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsKKysgICAgICAgIGRzdC5yZXNv
bHZlTGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOworICAgICAgICAgaWYgKGRzdC5yZXNvbHZl
VGV4dHVyZS50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTNEKQorICAgICAgICAgeworLSAg
ICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9yRGVwdGg7CisrICAg
ICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgpOworICAg
ICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CisgICAgICAgICB9CisgICAgICAg
ICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LnJlc29sdmVTbGljZSAgICAgID0g
c3JjLnNsaWNlT3JEZXB0aDsKKysgICAgICAgICAgICBkc3QucmVzb2x2ZVNsaWNlICAgICAgPSBz
cmMuc2xpY2VPckRlcHRoKCk7CisgICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0g
MDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0gICAgICAgIGRzdC50
ZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKKy0gICAgICAgIGRzdC5sZXZlbCAgID0gc3Jj
LmxldmVsLmdldCgpOworKyAgICAgICAgZHN0LnRleHR1cmUgPSBUb09iakMoc3JjLnRleHR1cmUo
KSk7CisrICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOworICAgICAgICAg
aWYgKGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBlM0QpCisgICAgICAg
ICB7CistICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VPckRlcHRoOworKyAg
ICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgpOworICAgICAgICAg
ICAgIGRzdC5zbGljZSAgICAgID0gMDsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAg
ICAgIHsKKy0gICAgICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGljZU9yRGVwdGg7Cisr
ICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CisgICAgICAg
ICAgICAgZHN0LmRlcHRoUGxhbmUgPSAwOworICAgICAgICAgfQorICAgICAgICAgZHN0LnJlc29s
dmVUZXh0dXJlICAgID0gbmlsOworQEAgLTIzMSwyNiArMjMyLDI2IEBAIHZvaWQgQmFzZVJlbmRl
clBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2Mg
JnNyYywKKyAgICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShkc3QsIHNyYywgc3RvcmVBY3Rpb25P
cHRpb25zKTsKKyB9CisgCistdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc0NvbG9yQXR0YWNo
bWVudERlc2MgJmRlc2MsCistICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVu
dERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpDKE1UTFJlbmRlclBhc3NDb2xvckF0
dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKysgICAgICAgICAgICBjb25zdCBSZW5kZXJQ
YXNzQ29sb3JBdHRhY2htZW50RGVzYyAmZGVzYykKKyB7CistICAgIEJhc2VSZW5kZXJQYXNzQXR0
YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworKyAgICBCYXNlUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKKyAKKyAgICAgQU5HTEVfT0JKQ19D
UF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJDb2xvcik7CisgfQorIAorLXZvaWQgVG9P
YmpDKGNvbnN0IFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNjLAorLSAgICAgICAg
ICAgIE1UTFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYykKKyt2
b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rl
c2MsCisrICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNobWVudERlc2MgJmRl
c2MpCisgeworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9i
akNEZXNjKTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVz
YywgZGVzYyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2Ms
IGNsZWFyRGVwdGgpOworIH0KKyAKKy12b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNp
bEF0dGFjaG1lbnREZXNjICZkZXNjLAorLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NTdGVuY2ls
QXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpDKE1UTFJlbmRlclBh
c3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjLAorKyAgICAgICAgICAgIGNv
bnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCisgeworLSAgICBCYXNl
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNjKTsKKysgICAgQmFz
ZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVzYyk7CisgCisgICAg
IEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFyU3RlbmNpbCk7Cisg
fQorQEAgLTY5NiwxMSArNjk3LDcgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5j
aWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAKKyB2b2lkIFJlbmRlclBhc3NBdHRhY2htZW50RGVz
Yzo6cmVzZXQoKQorIHsKKy0gICAgdGV4dHVyZS5yZXNldCgpOworLSAgICBpbXBsaWNpdE1TVGV4
dHVyZS5yZXNldCgpOworLSAgICBsZXZlbCAgICAgICAgICAgICAgPSBtdGw6OmtaZXJvTmF0aXZl
TWlwTGV2ZWw7CistICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7CistICAgIGJsZW5kYWJsZSAg
ICAgICAgICA9IGZhbHNlOworKyAgICByZW5kZXJUYXJnZXQgICAgICAgPSBudWxscHRyOworICAg
ICBsb2FkQWN0aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKKyAgICAgc3RvcmVBY3Rp
b24gICAgICAgID0gTVRMU3RvcmVBY3Rpb25TdG9yZTsKKyAgICAgc3RvcmVBY3Rpb25PcHRpb25z
ID0gTVRMU3RvcmVBY3Rpb25PcHRpb25Ob25lOworQEAgLTcwOSw4ICs3MDYsOSBAQCB2b2lkIFRv
T2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorIGJvb2wg
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjplcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMoCisg
ICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNvbnN0CisgeworLSAg
ICByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlICYmIGltcGxpY2l0TVNUZXh0dXJlID09
IG90aGVyLmltcGxpY2l0TVNUZXh0dXJlICYmCistICAgICAgICAgICBsZXZlbCA9PSBvdGhlci5s
ZXZlbCAmJiBzbGljZU9yRGVwdGggPT0gb3RoZXIuc2xpY2VPckRlcHRoOworKyAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8fAorKyAgICAgICAgICAgKHRleHR1
cmUoKSA9PSBvdGhlci50ZXh0dXJlKCkgJiYgbGV2ZWwoKSA9PSBvdGhlci5sZXZlbCgpICYmCisr
ICAgICAgICAgICAgc2xpY2VPckRlcHRoKCkgPT0gb3RoZXIuc2xpY2VPckRlcHRoKCkpOworIH0K
KyAKKyBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6b3BlcmF0b3I9PShjb25zdCBSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdAorQEAgLTcyMyw2ICs3MjEsMzAgQEAg
dm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywK
KyAgICAgcmV0dXJuIGxvYWRBY3Rpb24gPT0gb3RoZXIubG9hZEFjdGlvbiAmJiBzdG9yZUFjdGlv
biA9PSBvdGhlci5zdG9yZUFjdGlvbiAmJgorICAgICAgICAgICAgc3RvcmVBY3Rpb25PcHRpb25z
ID09IG90aGVyLnN0b3JlQWN0aW9uT3B0aW9uczsKKyB9CisrLy8gQ29udmVydCB0byBNZXRhbCBv
YmplY3QKKyt2b2lkIFJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERlc2MoTVRMUmVuZGVy
UGFzc0Rlc2NyaXB0b3IgKm9iakNEZXNjKSBjb25zdAorK3sKKysgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKysgICAgeworKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNvbG9y
QXR0YWNobWVudHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBUb09iakMob2JqQ0Rl
c2MuY29sb3JBdHRhY2htZW50c1tpXSwgY29sb3JBdHRhY2htZW50c1tpXSk7CisrICAgICAgICB9
CisrICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1lbnRzOyBpIDwga01h
eFJlbmRlclRhcmdldHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBJbmFjdGl2
ZSByZW5kZXIgdGFyZ2V0CisrICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tp
XS50ZXh0dXJlICAgICA9IG5pbDsKKysgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1l
bnRzW2ldLmxldmVsICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFj
aG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0
dGFjaG1lbnRzW2ldLmRlcHRoUGxhbmUgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVzYy5jb2xv
ckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0gTVRMTG9hZEFjdGlvbkRvbnRDYXJlOworKyAg
ICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc3RvcmVBY3Rpb24gPSBNVExT
dG9yZUFjdGlvbkRvbnRDYXJlOworKyAgICAgICAgfQorKworKyAgICAgICAgVG9PYmpDKG9iakNE
ZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKysgICAgICAgIFRvT2JqQyhv
YmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCwgc3RlbmNpbEF0dGFjaG1lbnQpOworKyAgICB9Cisr
fQorIAorIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVuZGVyUGlwZWxpbmVPdXRwdXRE
ZXNjKFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykgY29uc3QKKyB7CitAQCAtNzQy
LDE5ICs3NjQsMTkgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2ht
ZW50RGVzYyAmZGVzYywKKyB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRlclBpcGVs
aW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVP
dXRwdXREZXNjICpvdXREZXNjKSBjb25zdAorIHsKKy0gICAgUmVuZGVyUGlwZWxpbmVPdXRwdXRE
ZXNjICZvdXRwdXREZXNjcmlwdG9yID0gKm91dERlc2M7CisrICAgIGF1dG8gJm91dHB1dERlc2Ny
aXB0b3IgICAgICAgICAgICAgICA9ICpvdXREZXNjOworICAgICBvdXRwdXREZXNjcmlwdG9yLm51
bUNvbG9yQXR0YWNobWVudHMgPSB0aGlzLT5udW1Db2xvckF0dGFjaG1lbnRzOworICAgICBvdXRw
dXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1wbGVDb3VudDsKKyAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPm51bUNvbG9yQXR0YWNobWVudHM7ICsr
aSkKKyAgICAgeworICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudCA9IHRo
aXMtPmNvbG9yQXR0YWNobWVudHNbaV07CistICAgICAgICBhdXRvIHRleHR1cmUgICAgICAgICAg
ICAgICAgICAgID0gcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJlOworKyAgICAgICAg
YXV0byB0ZXh0dXJlICAgICAgICAgICAgICAgICAgICA9IHJlbmRlclBhc3NDb2xvckF0dGFjaG1l
bnQudGV4dHVyZSgpOworIAorICAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICB7CisgICAg
ICAgICAgICAgLy8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUKKyAgICAgICAgICAg
ICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udXBkYXRlKGJsZW5kU3RhdGUp
OworLSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC5ibGVuZGFibGUp
CisrICAgICAgICAgICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LmJsZW5kYWJsZSgp
KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBibGVuZGluZyBp
ZiB0aGUgYXR0YWNobWVudCdzIHJlbmRlciB0YXJnZXQgZG9lc24ndCBzdXBwb3J0IGJsZW5kaW5n
LgorICAgICAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0u
YmxlbmRpbmdFbmFibGVkID0gZmFsc2U7CitAQCAtNzgxLDExICs4MDMsMTEgQEAgdm9pZCBUb09i
akMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgICAg
IG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5yZXNldCgpOworICAgICB9Cisg
CistICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2htZW50LnRleHR1cmU7
CisrICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2htZW50LnRleHR1cmUo
KTsKKyAgICAgb3V0cHV0RGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCA9Cisg
ICAgICAgICBkZXB0aFRleHR1cmUgPyBkZXB0aFRleHR1cmUtPnBpeGVsRm9ybWF0KCkgOiBNVExQ
aXhlbEZvcm1hdEludmFsaWQ7CisgCistICAgIGF1dG8gc3RlbmNpbFRleHR1cmUgPSB0aGlzLT5z
dGVuY2lsQXR0YWNobWVudC50ZXh0dXJlOworKyAgICBhdXRvIHN0ZW5jaWxUZXh0dXJlID0gdGhp
cy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpOworICAgICBvdXRwdXREZXNjcmlwdG9yLnN0
ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQorICAgICAgICAgc3RlbmNpbFRleHR1cmUgPyBz
dGVuY2lsVGV4dHVyZS0+cGl4ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0SW52YWxpZDsKKyB9
CitAQCAtODMxLDQyICs4NTMsMjEgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5j
aWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGRlcHRoQXR0YWNobWVudCA9PSBv
dGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0gb3RoZXIuc3RlbmNp
bEF0dGFjaG1lbnQ7CisgfQorIAorLS8vIENvbnZlcnQgdG8gTWV0YWwgb2JqZWN0Cistdm9pZCBS
ZW5kZXJQYXNzRGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBhc3NEZXNjcmlwdG9y
ICpvYmpDRGVzYykgY29uc3QKKy17CistICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCistICAgIHsK
Ky0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Db2xvckF0dGFjaG1lbnRzOyAr
K2kpCistICAgICAgICB7CistICAgICAgICAgICAgVG9PYmpDKGNvbG9yQXR0YWNobWVudHNbaV0s
IG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworLSAgICAgICAgfQorLSAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhSZW5kZXJUYXJnZXRz
OyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gSW5hY3RpdmUgcmVuZGVyIHRhcmdl
dAorLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAgICAg
PSBuaWw7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sZXZlbCAg
ICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5zbGlj
ZSAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5k
ZXB0aFBsYW5lICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tp
XS5sb2FkQWN0aW9uICA9IE1UTExvYWRBY3Rpb25Eb250Q2FyZTsKKy0gICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0gTVRMU3RvcmVBY3Rpb25Eb250
Q2FyZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIFRvT2JqQyhkZXB0aEF0dGFjaG1lbnQsIG9i
akNEZXNjLmRlcHRoQXR0YWNobWVudCk7CistICAgICAgICBUb09iakMoc3RlbmNpbEF0dGFjaG1l
bnQsIG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKy0gICAgfQorLX0KKy0KKyAvLyBSZW5k
ZXJQaXBlbGluZUNhY2hlIGltcGxlbWVudGF0aW9uCistUmVuZGVyUGlwZWxpbmVDYWNoZTo6UmVu
ZGVyUGlwZWxpbmVDYWNoZSgpIDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxscHRyKSB7fQorK1Jl
bmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJlbmRlclBpcGVsaW5l
Q2FjaGUobnVsbHB0cikgeworK30KKyAKKyBSZW5kZXJQaXBlbGluZUNhY2hlOjpSZW5kZXJQaXBl
bGluZUNhY2hlKAorICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNoYWRlckZhY3Rv
cnkgKnNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKyAgICAgOiBtU3BlY2lhbGl6ZWRTaGFkZXJG
YWN0b3J5KHNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKy17fQorK3sKKysKKyt9CisgCisgUmVu
ZGVyUGlwZWxpbmVDYWNoZTo6flJlbmRlclBpcGVsaW5lQ2FjaGUoKSB7fQorIAorLXZvaWQgUmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIGlkPE1U
TEZ1bmN0aW9uPiBzaGFkZXIpCisrdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhT
aGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorIHsKKyAgICAgbVZlcnRleFNoYWRl
ci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsKKyAKK0BAIC04NzksNyArODgwLDggQEAgdm9pZCBUb09i
akMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgcmVj
cmVhdGVQaXBlbGluZVN0YXRlcyhjb250ZXh0KTsKKyB9CisgCistdm9pZCBSZW5kZXJQaXBlbGlu
ZUNhY2hlOjpzZXRGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBpZDxNVExGdW5jdGlv
bj4gc2hhZGVyKQorK3ZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIo
Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisgeworICAgICBtRnJhZ21lbnRTaGFkZXIu
cmV0YWluQXNzaWduKHNoYWRlcik7CisgCitAQCAtOTI5LDEwICs5MzEsNiBAQCB2b2lkIFRvT2Jq
Qyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorIHsKKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IG5ld1N0YXRlID0KKyAgICAg
ICAgIGNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgZGVzYywgaW5zZXJ0RGVmYXVs
dEF0dHJpYkxheW91dCk7CistICAgIGlmICghbmV3U3RhdGUpCistICAgIHsKKy0gICAgICAgIHJl
dHVybiBuaWw7CistICAgIH0KKyAKKyAgICAgaW50IHRhYmxlSWR4ID0gaW5zZXJ0RGVmYXVsdEF0
dHJpYkxheW91dCA/IDEgOiAwOworICAgICBhdXRvIHJlICAgICAgPSBtUmVuZGVyUGlwZWxpbmVT
dGF0ZXNbdGFibGVJZHhdLmluc2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBuZXdTdGF0ZSkpOwor
QEAgLTk0NCw2ICs5NDIsNyBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0
dGFjaG1lbnREZXNjICZkZXNjLAorICAgICByZXR1cm4gcmUuZmlyc3QtPnNlY29uZDsKKyB9Cisg
CisrCisgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVs
aW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCisgICAgIENvbnRleHQgKmNvbnRl
eHQsCisgICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmb3JpZ2luYWxEZXNjLAorQEAgLTk1
OSw3ICs5NTgsNiBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1l
bnREZXNjICZkZXNjLAorICAgICAgICAgICAgIGRlc2MuZW11bGF0ZUNvdmVyYWdlTWFzayAgICA9
IGZhbHNlOworICAgICAgICAgICAgIGRlc2MuYWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA9IGZhbHNl
OworICAgICAgICAgfQorLQorICAgICAgICAgLy8gQ2hvb3NlIHNoYWRlciB2YXJpYW50CisgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKKyAgICAgICAgIGlkPE1UTEZ1
bmN0aW9uPiBmcmFnU2hhZGVyID0gbmlsOworQEAgLTEwMDQsNyArMTAwMiwyNSBAQCB2b2lkIFRv
T2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorIAorICAg
ICAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjOgorICAgICAgICAgQXV0b09iakNP
Ymo8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBvYmpDRGVzYyA9IFRvT2JqQyh2ZXJ0U2hh
ZGVyLCBmcmFnU2hhZGVyLCBkZXNjKTsKKy0KKysgICAgICAgIC8vIFZhbGlkYXRlIFJlbmRlciBQ
aXBlbGluZSBTdGF0ZToKKysgICAgICAgIGlmIChEZXZpY2VIYXNNYXhpbXVtUmVuZGVyVGFyZ2V0
U2l6ZShtZXRhbERldmljZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNVSW50ZWdlciBt
YXhTaXplID0gR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMobWV0YWxEZXZp
Y2UpOworKyAgICAgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAg
ICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERldmljZSk7CisrICAgICAgICAgICAgaWYgKHJl
bmRlclRhcmdldFNpemUgPiBtYXhTaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKysgICAgICAgICAgICAgICAgICAgIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiVGhpcyBzZXQgb2YgcmVuZGVyIHRhcmdldHMgcmVxdWlyZXMg
JWx1IGJ5dGVzIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBkZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgbG9uZylyZW5kZXJUYXJnZXRTaXplLCAodW5zaWduZWQgbG9uZyltYXhTaXplXTsKKysgICAg
ICAgICAgICAgICAgTlNFcnJvciAqZXJyID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiTVRM
VmFsaWRhdGlvbkVycm9yIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGU6LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9y
U3RyaW5nfV07CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmhhbmRsZUVycm9yKGVyciwgX19G
SUxFX18sIEFOR0xFX0ZVTkNUSU9OLCBfX0xJTkVfXyk7CisrICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgICAgLy8gU3BlY2lhbCBh
dHRyaWJ1dGUgc2xvdCBmb3IgZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgIGlmIChpbnNlcnRE
ZWZhdWx0QXR0cmliTGF5b3V0KQorICAgICAgICAgeworQEAgLTEwMzIsNiArMTA0OCw3IEBAIHZv
aWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MsCisg
ICAgIH0KKyB9CisgCisrCisgdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpyZWNyZWF0ZVBpcGVs
aW5lU3RhdGVzKENvbnRleHQgKmNvbnRleHQpCisgeworICAgICBmb3IgKGludCBoYXNEZWZhdWx0
QXR0cmliID0gMDsgaGFzRGVmYXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCitA
QCAtMTA2Miw3ICsxMDc5LDcgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxB
dHRhY2htZW50RGVzYyAmZGVzYywKKyB9CisgCisgLy8gU3RhdGVDYWNoZSBpbXBsZW1lbnRhdGlv
bgorLVN0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoKSB7fQorK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUo
Y29uc3QgYW5nbGU6OkZlYXR1cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMp
IHt9CisgCisgU3RhdGVDYWNoZTo6flN0YXRlQ2FjaGUoKSB7fQorIAorQEAgLTExMTMsNiArMTEz
MCwxMSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNj
ICZkZXNjLAorICAgICAgICAgaWYgKGl0ZSA9PSBtU2FtcGxlclN0YXRlcy5lbmQoKSkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICBBdXRvT2JqQ09iajxNVExTYW1wbGVyRGVzY3JpcHRvcj4gb2Jq
Q0Rlc2MgPSBUb09iakMoZGVzYyk7CisrICAgICAgICAgICAgaWYgKCFtRmVhdHVyZXMuYWxsb3dS
dW50aW1lU2FtcGxlckNvbXBhcmVNb2RlLmVuYWJsZWQpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAvLyBSdW50aW1lIHNhbXBsZXIgY29tcGFyZSBtb2RlIGlzIG5vdCBzdXBwb3J0
ZWQsIGZhbGxiYWNrIHRvIG5ldmVyLgorKyAgICAgICAgICAgICAgICBvYmpDRGVzYy5nZXQoKS5j
b21wYXJlRnVuY3Rpb24gPSBNVExDb21wYXJlRnVuY3Rpb25OZXZlcjsKKysgICAgICAgICAgICB9
CisgICAgICAgICAgICAgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4gbmV3U3RhdGUg
PQorICAgICAgICAgICAgICAgICBbW21ldGFsRGV2aWNlIG5ld1NhbXBsZXJTdGF0ZVdpdGhEZXNj
cmlwdG9yOm9iakNEZXNjXSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworIAorZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaAoraW5kZXggYTg0YWM3My4uNDkwMGVjYiAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaAorKysrIGIvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oCitAQCAtOTgsNiArOTgsMTAgQEAg
QXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IENyZWF0ZVNoYWRlckxpYnJhcnlGcm9tQmluYXJ5
KGlkPE1UTERldmljZT4gbWV0YWxEZXYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJpbmFyeVNvdXJjZUxlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0
b09iakNQdHI8TlNFcnJvciAqPiAqZXJyb3IpOworIAorK2Jvb2wgU3VwcG9ydHNJT1NHUFVGYW1p
bHkoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIHVpbnQ4X3QgaU9TRmFtaWx5KTsKKysKKytib29sIFN1
cHBvcnRzTWFjR1BVRmFtaWx5KGlkPE1UTERldmljZT4gZGV2aWNlLCB1aW50OF90IG1hY0ZhbWls
eSk7CisrCisgLy8gTmVlZCB0byBkZWZpbmUgaW52YWxpZCBlbnVtIHZhbHVlIHNpbmNlIE1ldGFs
IGRvZXNuJ3QgZGVmaW5lIGl0CisgY29uc3RleHByIE1UTFRleHR1cmVUeXBlIE1UTFRleHR1cmVU
eXBlSW52YWxpZCA9IHN0YXRpY19jYXN0PE1UTFRleHR1cmVUeXBlPihOU1VJbnRlZ2VyTWF4KTsK
KyBzdGF0aWNfYXNzZXJ0KHNpemVvZihNVExUZXh0dXJlVHlwZSkgPT0gc2l6ZW9mKE5TVUludGVn
ZXIpLAorQEAgLTEzNSwxNSArMTM5LDMwIEBAIE1UTFRleHR1cmVTd2l6emxlIEdldFRleHR1cmVT
d2l6emxlKEdMZW51bSBzd2l6emxlKTsKKyAKKyAvLyBHZXQgY29sb3Igd3JpdGUgbWFzayBmb3Ig
YSBzcGVjaWZpZWQgZm9ybWF0LiBTb21lIGZvcm1hdHMgc3VjaCBhcyBSR0I1NjUgZG9lc24ndCBo
YXZlIGFscGhhCisgLy8gY2hhbm5lbCBidXQgaXMgZW11bGF0ZWQgYnkgYSBSR0JBOCBmb3JtYXQs
IHdlIG5lZWQgdG8gZGlzYWJsZSBhbHBoYSB3cml0ZSBmb3IgdGhpcyBmb3JtYXQuCistLy8gLSBp
c0Zvcm1hdEVtdWxhdGVkOiBpZiB0aGUgZm9ybWF0IGlzIGVtdWxhdGVkLCB0aGlzIHBvaW50ZXIg
d2lsbCBzdG9yZSBhIHRydWUgdmFsdWUuCistTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LCBib29sICppc0Zvcm1h
dEVtdWxhdGVkKTsKKysvLyAtIGVtdWxhdGVkQ2hhbm5lbHNPdXQ6IGlmIHRoZSBmb3JtYXQgaXMg
ZW11bGF0ZWQsIHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KKytNVExDb2xv
cldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZt
dGxGb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICplbXVsYXRlZENoYW5uZWxzT3V0KTsKKyBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRl
ZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpOworIGJvb2wgSXNG
b3JtYXRFbXVsYXRlZChjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0KTsKKyAKKytOU1VJbnRl
Z2VyIEdldE1heFJlbmRlclRhcmdldFNpemVGb3JEZXZpY2VJbkJ5dGVzKGlkPE1UTERldmljZT4g
ZGV2aWNlKTsKKytOU1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmlj
ZShpZDxNVExEZXZpY2U+IGRldmljZSk7CisrYm9vbCBEZXZpY2VIYXNNYXhpbXVtUmVuZGVyVGFy
Z2V0U2l6ZShpZDxNVExEZXZpY2U+IGRldmljZSk7CisrCisgLy8gVXNlZnVsIHRvIHNldCBjbGVh
ciBjb2xvciBmb3IgdGV4dHVyZSBvcmlnaW5hbGx5IGhhdmluZyBubyBhbHBoYSBpbiBHTCwgYnV0
IGJhY2tlbmQncyBmb3JtYXQKKyAvLyBoYXMgYWxwaGEgY2hhbm5lbC4KKyBNVExDbGVhckNvbG9y
IEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29sb3IgY29sb3IsIE1UTENvbG9yV3Jp
dGVNYXNrIGNvbG9yTWFzayk7CisgCisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNl
ZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlwdG9y
ICpkZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExEZXZpY2U+
IGRldmljZSk7CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcigKKysgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yICpkZXNjcmlwdG9yLAorKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICBpZDxN
VExEZXZpY2U+IGRldmljZSk7CisrCisgZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1U
TFJlZ2lvbiAmbXRsUmVnaW9uKTsKKyAKKyBNaXBtYXBOYXRpdmVMZXZlbCBHZXROYXRpdmVNaXBM
ZXZlbChHTHVpbnQgbGV2ZWwsIEdMdWludCBiYXNlKTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF91dGlscy5tbQoraW5kZXggMDc2ZTYwOS4uMjZlYTRkZSAxMDA2NDQKKy0tLSBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KK0BAIC0xMCw5ICsxMCwxMSBAQAorIAorICNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKKyAKKysjaW5jbHVk
ZSA8QXZhaWxhYmlsaXR5Lmg+CisgI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorIAor
ICNpbmNsdWRlICJjb21tb24vTWVtb3J5QnVmZmVyLmgiCisrI2luY2x1ZGUgImNvbW1vbi9zeXN0
ZW1fdXRpbHMuaCIKKyAjaW5jbHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKyAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorQEAgLTI0LDYgKzI2LDggQEAK
KyBuYW1lc3BhY2UgbXRsCisgeworIAorK2NvbnN0ZXhwciBjaGFyIGtBTkdMRVByaW50TVNMRW52
W10gPSAiQU5HTEVfTUVUQUxfUFJJTlRfTVNMX0VOQUJMRSI7CisrCisgbmFtZXNwYWNlCisgewor
IAorQEAgLTEwMywyNCArMTA3LDQzIEBAIEdMaW50IEdldFNsaWNlT3JEZXB0aChjb25zdCBJbWFn
ZU5hdGl2ZUluZGV4ICZpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW1hZ2VOYXRpdmVJbmRleCAmaW5kZXgpCisgeworICAgICBBU1NFUlQodGV4
dHVyZSAmJiB0ZXh0dXJlLT52YWxpZCgpKTsKKy0gICAgLy8gT25seSBvbmUgc2xpY2UgY2FuIGJl
IGluaXRpYWxpemVkIGF0IGEgdGltZS4KKy0gICAgQVNTRVJUKCFpbmRleC5pc0xheWVyZWQoKSB8
fCBpbmRleC5nZXRUeXBlKCkgPT0gZ2w6OlRleHR1cmVUeXBlOjpfM0QpOworICAgICBDb250ZXh0
TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworIAorKyAgICBjb25zdCBh
bmdsZTo6Rm9ybWF0ICZhY3R1YWxBbmdsZUZvcm1hdCAgICAgICAgICAgPSB0ZXh0dXJlT2JqRm9y
bWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCk7CisgICAgIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAm
aW50ZW5kZWRJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmVPYmpGb3JtYXQuaW50ZW5kZWRJbnRlcm5h
bEZvcm1hdCgpOworIAorICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBtYW55IHBs
YWNlcyB0byBpbml0aWFsaXplIHRoZSBjb250ZW50IG9mIGEgdGV4dHVyZS4KKy0gICAgLy8gU28g
aXQncyBiZXR0ZXIgd2UgZG8gdGhlIGluaXRpYWwgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIGxldCB0
aGUgY2FsbGVycyBkbyBpdCB0aGVtc2VsdmVzOgorLSAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQu
dmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9ybWF0LmNvbXByZXNzZWQpCisrICAgIC8vIFNv
IGl0J3MgYmV0dGVyIHdlIGRvIHRoZSBzYW5pdHkgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIGxldCB0
aGUgY2FsbGVycyBkbyBpdCB0aGVtc2VsdmVzOgorKyAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQu
dmFsaWQoKSB8fCBhY3R1YWxBbmdsZUZvcm1hdC5pc0Jsb2NrIHx8IGFjdHVhbEFuZ2xlRm9ybWF0
LmRlcHRoQml0cyA+IDAgfHwKKysgICAgICAgIGFjdHVhbEFuZ2xlRm9ybWF0LnN0ZW5jaWxCaXRz
ID4gMCkKKyAgICAgeworKyAgICAgICAgLy8gSWYgZHN0IGZvcm1hdCBpcyBjb21wcmVzc2VkLCBp
Z25vcmUuCisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0K
KyAKKyAgICAgZ2w6OkV4dGVudHMgc2l6ZSA9IHRleHR1cmUtPnNpemUoaW5kZXgpOworIAorLSAg
ICAvLyBJbnRpaWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCistICAgIEdMaW50IGxheWVyLCBz
dGFydERlcHRoOworLSAgICBHZXRTbGljZUFuZERlcHRoKGluZGV4LCAmbGF5ZXIsICZzdGFydERl
cHRoKTsKKysgICAgLy8gSW50aWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCisrICAgIEdMaW50
IGxheWVyICAgICAgPSAwOworKyAgICBHTGludCBzdGFydERlcHRoID0gMDsKKysgICAgaWYgKGlu
ZGV4Lmhhc0xheWVyKCkpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoaW5kZXguZ2V0VHlwZSgp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpDdWJlTWFw
OgorKyAgICAgICAgICAgICAgICBsYXllciA9IGluZGV4LmN1YmVNYXBGYWNlSW5kZXgoKTsKKysg
ICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVyZVR5cGU6
Ol8yREFycmF5OgorKyAgICAgICAgICAgICAgICBsYXllciA9IGluZGV4LmdldExheWVySW5kZXgo
KTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVy
ZVR5cGU6Ol8zRDoKKysgICAgICAgICAgICAgICAgc3RhcnREZXB0aCA9IGluZGV4LmdldExheWVy
SW5kZXgoKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoK
KysgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICB9CisrICAgIH0KKyAKKyAgICAgaWYgKHRleHR1cmUtPmlzQ1BVQWNjZXNzaWJs
ZSgpICYmIGluZGV4LmdldFR5cGUoKSAhPSBnbDo6VGV4dHVyZVR5cGU6Ol8yRE11bHRpc2FtcGxl
ICYmCisgICAgICAgICBpbmRleC5nZXRUeXBlKCkgIT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRNdWx0
aXNhbXBsZUFycmF5KQorQEAgLTEzNiw2ICsxNTksMTMgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRo
KGNvbnN0IEltYWdlTmF0aXZlSW5kZXggJmluZGV4KQorICAgICAgICAgfQorICAgICAgICAgZWxz
ZQorICAgICAgICAgeworKyAgICAgICAgICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52YWxpZCgp
IHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3NlZCB8fAorKyAgICAgICAgICAgICAg
ICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmRlcHRoQml0cyA+IDAgfHwgaW50ZW5kZWRJbnRlcm5h
bEZvcm1hdC5zdGVuY2lsQml0cyA+IDApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAvLyBJZiBzb3VyY2UgZm9ybWF0IGlzIGNvbXByZXNzZWQsIGlnbm9yZS4KKysgICAgICAgICAg
ICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysK
KyAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZzcmNGb3JtYXQgPSBhbmdsZTo6Rm9y
bWF0OjpHZXQoCisgICAgICAgICAgICAgICAgIGludGVuZGVkSW50ZXJuYWxGb3JtYXQuYWxwaGFC
aXRzID4gMCA/IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYW5nbGU6OkZvcm1hdElE
OjpSOEc4QjhfVU5PUk0pOworQEAgLTE2NSw3ICsxOTUsNyBAQCBHTGludCBHZXRTbGljZU9yRGVw
dGgoY29uc3QgSW1hZ2VOYXRpdmVJbmRleCAmaW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udmVyc2lvblJvdy5kYXRhKCksIGRzdFJvd1BpdGNoKTsKKyAg
ICAgICAgICAgICB9CisgICAgICAgICB9CistICAgIH0KKysgICAgfSAgLy8gaWYgKHRleHR1cmUt
PmlzQ1BVQWNjZXNzaWJsZSgpKQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgIEFOR0xFX1RS
WShJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnRleHQsIHRleHR1cmUsIHRleHR1cmVP
YmpGb3JtYXQsIGluZGV4LAorQEAgLTIxMCw3ICsyNDAsNyBAQCBHTGludCBHZXRTbGljZU9yRGVw
dGgoY29uc3QgSW1hZ2VOYXRpdmVJbmRleCAmaW5kZXgpCisgICAgIFJlbmRlclRhcmdldE10bCB0
ZW1wUnR0OworICAgICB0ZW1wUnR0LnNldCh0ZXh0dXJlLCBpbmRleC5nZXROYXRpdmVMZXZlbCgp
LCBzbGljZU9yRGVwdGgsIHRleHR1cmVPYmpGb3JtYXQpOworIAorLSAgICBpbnQgY2xlYXJBbHBo
YSA9IDA7CisrICAgIGZsb2F0IGNsZWFyQWxwaGEgPSAwOworICAgICBpZiAoIXRleHR1cmVPYmpG
b3JtYXQuaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmFscGhhQml0cykKKyAgICAgeworICAgICAgICAg
Ly8gaWYgaW50ZW5kZWQgZm9ybWF0IGRvZXNuJ3QgaGF2ZSBhbHBoYSwgc2V0IGl0IHRvIDEuMC4K
K0BAIC0yNDAsMTEgKzI3MCwxMSBAQCBHTGludCBHZXRTbGljZU9yRGVwdGgoY29uc3QgSW1hZ2VO
YXRpdmVJbmRleCAmaW5kZXgpCisgICAgICAgICBDbGVhckNvbG9yVmFsdWUgY2xlYXJDb2xvcjsK
KyAgICAgICAgIGlmIChhbmdsZUZvcm1hdC5pc1NpbnQoKSkKKyAgICAgICAgIHsKKy0gICAgICAg
ICAgICBjbGVhckNvbG9yLnNldEFzSW50KDAsIDAsIDAsIGNsZWFyQWxwaGEpOworKyAgICAgICAg
ICAgIGNsZWFyQ29sb3Iuc2V0QXNJbnQoMCwgMCwgMCwgKGludCljbGVhckFscGhhKTsKKyAgICAg
ICAgIH0KKyAgICAgICAgIGVsc2UgaWYgKGFuZ2xlRm9ybWF0LmlzVWludCgpKQorICAgICAgICAg
eworLSAgICAgICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50KDAsIDAsIDAsIGNsZWFyQWxwaGEp
OworKyAgICAgICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50KDAsIDAsIDAsIChpbnQpY2xlYXJB
bHBoYSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCisgICAgICAgICB7CitAQCAtMjgzLDE3
ICszMTMsMTcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5kZXgg
JmluZGV4KQorICAgICBycERlc2Muc2FtcGxlQ291bnQgPSB0ZXh0dXJlLT5zYW1wbGVzKCk7Cisg
ICAgIGlmIChhbmdsZUZvcm1hdC5kZXB0aEJpdHMpCisgICAgIHsKKy0gICAgICAgIHJwRGVzYy5k
ZXB0aEF0dGFjaG1lbnQudGV4dHVyZSAgICAgID0gdGV4dHVyZTsKKy0gICAgICAgIHJwRGVzYy5k
ZXB0aEF0dGFjaG1lbnQubGV2ZWwgICAgICAgID0gbGV2ZWw7CistICAgICAgICBycERlc2MuZGVw
dGhBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworKyAgICAgICAgcnBEZXNjLmRlcHRo
QXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnRleHR1cmUgICAgICA9IHRleHR1cmU7CisrICAgICAg
ICBycERlc2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+bGV2ZWwgICAgICAgID0gbGV2
ZWw7CisrICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+c2xpY2VP
ckRlcHRoID0gbGF5ZXI7CisgICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxvYWRBY3Rp
b24gICA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKyAgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1l
bnQuY2xlYXJEZXB0aCAgID0gMS4wOworICAgICB9CisgICAgIGlmIChhbmdsZUZvcm1hdC5zdGVu
Y2lsQml0cykKKyAgICAgeworLSAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1
cmUgICAgICA9IHRleHR1cmU7CistICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQubGV2
ZWwgICAgICAgID0gbGV2ZWw7CistICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQuc2xp
Y2VPckRlcHRoID0gbGF5ZXI7CisrICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVu
ZGVyVGFyZ2V0LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworKyAgICAgICAgcnBEZXNjLnN0ZW5j
aWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+bGV2ZWwgICAgICAgID0gbGV2ZWw7CisrICAgICAg
ICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPSBs
YXllcjsKKyAgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBN
VExMb2FkQWN0aW9uQ2xlYXI7CisgICAgIH0KKyAKK0BAIC00NTYsNiArNDg2LDMwIEBAIHVpbnQz
Ml90IEdldERldmljZVZlbmRvcklkKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UpCisgICAgIHJl
dHVybiBDcmVhdGVTaGFkZXJMaWJyYXJ5KG1ldGFsRGV2aWNlLCBzb3VyY2UuY19zdHIoKSwgc291
cmNlLnNpemUoKSwgZXJyb3IpOwogIH0KICAKLSB9ICAvLyBuYW1lc3BhY2UgcngKKysjaWYgMAor
K3N0YXRpYyBNVExMYW5ndWFnZVZlcnNpb24gR2V0SGlnaGVzdFN1cHBvcnRlZE1TTFZlcnNpb24o
KQorK3sKKysgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24v
bWV0YWwvbXRsbGFuZ3VhZ2V2ZXJzaW9uP2xhbmd1YWdlPW9iamMKKysgICAgaWYgKEFOR0xFX0FQ
UExFX0FWQUlMQUJMRV9YQ0koMTEuMCwgMTQuMCwgMTQuMCkpCisrICAgICAgICByZXR1cm4gTVRM
TGFuZ3VhZ2VWZXJzaW9uMl8zOworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgx
MC4xNSwgMTMuMCwgMTMuMCkpCisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8y
OworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTIuMCkp
CisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8xOworKyAgICBpZiAoQU5HTEVf
QVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xMywgMTMuMCwgMTEuMCkpCisrICAgICAgICByZXR1cm4g
TVRMTGFuZ3VhZ2VWZXJzaW9uMl8wOworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hD
SSgxMC4xMiwgMTMuMCwgMTAuMCkpCisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9u
MV8yOworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xMSwgMTMuMCwgOS4w
KSkKKysgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzE7CisrIyAgICBpZiBUQVJH
RVRfT1NfSU9TCisrICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSg5LjApKQorKyAgICAg
ICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjFfMDsKKysjICAgIGVuZGlmCisrICAgIHJldHVy
biBNVExMYW5ndWFnZVZlcnNpb24xXzE7CisrfQorKyNlbmRpZgogKwotKyNlbmRpZiAgLy8gZGVm
aW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUND
QVRBTFlTVCkKLVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wuaCBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wuaAotaW5kZXggZWNlMjM1YS4uYWUwMjA3YiAx
MDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wu
aAotKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVuY3Rpb25zRUFHTC5oCi1A
QCAtMTcsNyArMTcsNyBAQAotICMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4K
LSAjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3VyZmFjZS5oPgorIEF1dG9PYmpDUHRyPGlk
PE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzb3VyY2VMZW4sCitAQCAtNDY5LDggKzUyMywyNSBAQCB1aW50MzJf
dCBHZXREZXZpY2VWZW5kb3JJZChpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJlZVdoZW5Eb25lOk5PXTsKKyAgICAgICAgIGF1dG8gb3B0aW9ucyAgICAg
PSBbW1tNVExDb21waWxlT3B0aW9ucyBhbGxvY10gaW5pdF0gQU5HTEVfTVRMX0FVVE9SRUxFQVNF
XTsKKysgICAgICAgIC8vIE1hcmsgYWxsIHBvc2l0aW9ucyBpbiBWUyB3aXRoIGF0dHJpYnV0ZSBp
bnZhcmlhbnQgYXMgbm9uLW9wdGltaXphYmxlCisrI2lmIChkZWZpbmVkKF9fTUFDXzExXzApICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX01BQ18xMV8wKSB8fCAgICAgICAg
XAorKyAgICAoZGVmaW5lZChfX0lQSE9ORV8xNF8wKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEID49IF9fSVBIT05FXzE0XzApIHx8IFwKKysgICAgKGRlZmluZWQoX19UVk9TXzE0
XzApICYmIF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX1RWT1NfMTRfMCkKKysgICAg
ICAgIG9wdGlvbnMucHJlc2VydmVJbnZhcmlhbmNlID0gdHJ1ZTsKKysjZWxzZQorKyAgICAgICAg
Ly8gTm8gcHJlc2VydmVJbnZhcmlhbmNlIGF2YWlsYWJsZSBjb21waWxpbmcgZnJvbSBzb3VyY2Us
IHNvIGp1c3QgZGlzYWJsZSBmYXN0bWF0aC4KKysgICAgICAgIG9wdGlvbnMuZmFzdE1hdGhFbmFi
bGVkID0gZmFsc2U7CisrI2VuZGlmCisrICAgICAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogd29y
a2Fyb3VuZCBmb3IgaW50ZWwgZHJpdmVyIG5vdCBwcmVzZXJ2aW5nIGludmFyaWFuY2Ugb24gYWxs
IHNoYWRlcnMKKysgICAgICAgIGlmIChbbWV0YWxEZXZpY2UubmFtZSByYW5nZU9mU3RyaW5nOkAi
SW50ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IG9wdGlvbnMuZmFzdE1hdGhFbmFibGVkID0gZmFsc2U7CisrICAgICAgICB9CisgICAgICAgICBh
dXRvIGxpYnJhcnkgPSBbbWV0YWxEZXZpY2UgbmV3TGlicmFyeVdpdGhTb3VyY2U6bnNTb3VyY2Ug
b3B0aW9uczpvcHRpb25zIGVycm9yOiZuc0Vycm9yXTsKKy0KKysgICAgICAgIGlmIChhbmdsZTo6
R2V0RW52aXJvbm1lbnRWYXIoa0FOR0xFUHJpbnRNU0xFbnYpWzBdID09ICcxJykKKysgICAgICAg
IHsKKysgICAgICAgICAgICBOU0xvZyhAIiVAXG4iLCBuc1NvdXJjZSk7CisrICAgICAgICB9Cisg
ICAgICAgICBbbnNTb3VyY2UgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKICAKLS0jICAgIGluY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAgICBpbmNs
dWRlICJjb21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKyAgICAgICAgICplcnJvck91dCA9IHN0
ZDo6bW92ZShuc0Vycm9yKTsKK0BAIC03NzIsMTUgKzg0MywxNSBAQCBNVExUZXh0dXJlU3dpenps
ZSBHZXRUZXh0dXJlU3dpenpsZShHTGVudW0gc3dpenpsZSkKKyB9CisgI2VuZGlmCiAgCi0gU09G
VF9MSU5LX0ZSQU1FV09SS19IRUFERVIoT3BlbkdMRVMpCistTVRMQ29sb3JXcml0ZU1hc2sgR2V0
RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LCBib29s
ICppc0VtdWxhdGVkT3V0KQorK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0
ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqZW11bGF0ZWRDaGFubmVs
c091dCkKKyB7CisgICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmludGVuZGVkRm9ybWF0ID0gbXRs
Rm9ybWF0LmludGVuZGVkQW5nbGVGb3JtYXQoKTsKKyAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAm
YWN0dWFsRm9ybWF0ICAgPSBtdGxGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKKy0gICAgYm9v
bCBpc0Zvcm1hdEVtdWxhdGVkICAgICAgICAgICAgICAgPSBmYWxzZTsKKysgICAgYm9vbCBlbXVs
YXRlZENoYW5uZWxzICAgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICAgTVRMQ29sb3JXcml0ZU1h
c2sgY29sb3JXcml0YWJsZU1hc2sgPSBNVExDb2xvcldyaXRlTWFza0FsbDsKKyAgICAgaWYgKGlu
dGVuZGVkRm9ybWF0LmFscGhhQml0cyA9PSAwICYmIGFjdHVhbEZvcm1hdC5hbHBoYUJpdHMpCisg
ICAgIHsKKy0gICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworKyAgICAgICAgZW11bGF0
ZWRDaGFubmVscyA9IHRydWU7CisgICAgICAgICAvLyBEaXNhYmxlIGFscGhhIHdyaXRlIHRvIHRo
aXMgdGV4dHVyZQorICAgICAgICAgY29sb3JXcml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFz
ayAmICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSk7CisgICAgIH0KK0BAIC03ODgsNDEgKzg1OSw0
MSBAQCBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKgorICAgICB7CisgICAgICAgICBpZiAoaW50ZW5k
ZWRGb3JtYXQucmVkQml0cyA9PSAwICYmIGFjdHVhbEZvcm1hdC5yZWRCaXRzKQorICAgICAgICAg
eworLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworKyAgICAgICAgICAgIGVt
dWxhdGVkQ2hhbm5lbHMgPSB0cnVlOworICAgICAgICAgICAgIC8vIERpc2FibGUgcmVkIHdyaXRl
IHRvIHRoaXMgdGV4dHVyZQorICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JX
cml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrUmVkKTsKKyAgICAgICAgIH0KKyAgICAg
ICAgIGlmIChpbnRlbmRlZEZvcm1hdC5ncmVlbkJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuZ3Jl
ZW5CaXRzKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVl
OworKyAgICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVlOworICAgICAgICAgICAgIC8v
IERpc2FibGUgZ3JlZW4gd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCisgICAgICAgICAgICAgY29sb3JX
cml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+TVRMQ29sb3JXcml0ZU1hc2tHcmVl
bik7CisgICAgICAgICB9CisgICAgICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYmx1ZUJpdHMgPT0g
MCAmJiBhY3R1YWxGb3JtYXQuYmx1ZUJpdHMpCisgICAgICAgICB7CistICAgICAgICAgICAgaXNG
b3JtYXRFbXVsYXRlZCA9IHRydWU7CisrICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRy
dWU7CisgICAgICAgICAgICAgLy8gRGlzYWJsZSBibHVlIHdyaXRlIHRvIHRoaXMgdGV4dHVyZQor
ICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1U
TENvbG9yV3JpdGVNYXNrQmx1ZSk7CisgICAgICAgICB9CisgICAgIH0KICAKLWRpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVuY3Rpb25zRUFHTC5tbQotaW5kZXggNzc3OTc5Mi4u
MDc2ZDA3MiAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0
aW9uc0VBR0wubW0KLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9u
c0VBR0wubW0KLUBAIC0xNCw3ICsxNCw3IEBACi0gIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xE
cmF3YWJsZS5oPgotICMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CistICAg
ICppc0VtdWxhdGVkT3V0ID0gaXNGb3JtYXRFbXVsYXRlZDsKKysgICAgKmVtdWxhdGVkQ2hhbm5l
bHNPdXQgPSBlbXVsYXRlZENoYW5uZWxzOwogIAotLSMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvZ2wvYXBwbGUvU29mdExpbmtpbmcuaCIKLSsjICAgIGluY2x1ZGUgImNvbW1vbi9hcHBs
ZS9Tb2Z0TGlua2luZy5oIgorICAgICByZXR1cm4gY29sb3JXcml0YWJsZU1hc2s7CisgfQogIAot
IFNPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorIE1UTENvbG9yV3JpdGVNYXNr
IEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCkK
KyB7CistICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4gdmFsdWUKKy0gICAg
Ym9vbCBpc0Zvcm1hdEVtdWxhdGVkOworLSAgICByZXR1cm4gR2V0RW11bGF0ZWRDb2xvcldyaXRl
TWFzayhtdGxGb3JtYXQsICZpc0Zvcm1hdEVtdWxhdGVkKTsKKysgICAgLy8gSWdub3JlIGVtdWxh
dGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorKyAgICBib29sIGVtdWxhdGVkQ2hhbm5lbHM7Cisr
ICAgIHJldHVybiBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwgJmVtdWxhdGVk
Q2hhbm5lbHMpOworIH0KICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9l
YWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCi1pbmRleCBmMTZjM2U3Li40NWU2ZDBmIDEwMDY0
NAotLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFjZUVB
R0wubW0KLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZh
Y2VFQUdMLm1tCi1AQCAtMjA2LDcgKzIwNiw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFj
ZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAg
IC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVyZSwgaW5jbHVk
aW5nIHNldHRpbmcgYW55Ci0gICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAgd2hl
biB1c2luZyBFUyAzLjAgY29udGV4dHMuCi0gICAgICAgICBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSBk
ZWZhdWx0VW5wYWNrU3RhdGU7Ci0tICAgICAgICBzdGF0ZU1hbmFnZXItPnNldFBpeGVsVW5wYWNr
U3RhdGUoZGVmYXVsdFVucGFja1N0YXRlKTsKLSsgICAgICAgIGlmIChJc0Vycm9yKHN0YXRlTWFu
YWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShjb250ZXh0LCBkZWZhdWx0VW5wYWNrU3RhdGUpKSkg
ewotKyAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0byBz
ZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7CisgYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQpCisgeworLSAgICBib29sIGlzRm9ybWF0RW11bGF0ZWQ7Cist
ICAgICh2b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmaXNGb3JtYXRF
bXVsYXRlZCk7CistICAgIHJldHVybiBpc0Zvcm1hdEVtdWxhdGVkOworKyAgICBib29sIGVtdWxh
dGVkQ2hhbm5lbHM7CisrICAgICh2b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9y
bWF0LCAmZW11bGF0ZWRDaGFubmVscyk7CisrICAgIHJldHVybiBlbXVsYXRlZENoYW5uZWxzOwor
IH0KKyAKKyBNVExDbGVhckNvbG9yIEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29s
b3IgY29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yTWFzaykKK0BAIC04MzcsNiArOTA4LDI5
MCBAQCBNVExDbGVhckNvbG9yIEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29sb3Ig
Y29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNvbAorICAgICByZXR1cm4gcmU7CisgfQorIAorK05T
VUludGVnZXIgR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2
aWNlPiBkZXZpY2UpCisreworKyAgICBpZiAoU3VwcG9ydHNJT1NHUFVGYW1pbHkoZGV2aWNlLCA0
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIDY0OworKyAgICB9CisrICAgIGVsc2UgaWYgKFN1
cHBvcnRzSU9TR1BVRmFtaWx5KGRldmljZSwgMikpCisrICAgIHsKKysgICAgICAgIHJldHVybiAz
MjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiAxNjsKKysgICAg
fQorK30KKysKKytOU1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmlj
ZShpZDxNVExEZXZpY2U+IGRldmljZSkKKyt7CisrICAgIGlmIChTdXBwb3J0c0lPU0dQVUZhbWls
eShkZXZpY2UsIDIpfHxTdXBwb3J0c01hY0dQVUZhbWlseShkZXZpY2UsIDEpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gODsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJl
dHVybiA0OworKyAgICB9CisrfQorKworK2Jvb2wgRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdl
dFNpemUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCisreworKyAgICAgICAgcmV0dXJuIFN1cHBvcnRz
SU9TR1BVRmFtaWx5KGRldmljZSwgMSk7CisrfQorKworK2Jvb2wgU3VwcG9ydHNJT1NHUFVGYW1p
bHkoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIHVpbnQ4X3QgaU9TRmFtaWx5KQorK3sKKysjaWYgKCFU
QVJHRVRfT1NfSU9TICYmICFUQVJHRVRfT1NfVFYpIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
KyAgICByZXR1cm4gZmFsc2U7CisrI2Vsc2UKKysjICAgIGlmIChfX0lQSE9ORV9PU19WRVJTSU9O
X01BWF9BTExPV0VEID49IDEzMDAwMCkgfHwgKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+
PSAxMzAwMDApCisrICAgIC8vIElmIGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRz
RmFtaWx5Ol0sIHRoZW4gdXNlIGl0LgorKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0ko
MTMuMCkpCisrICAgIHsKKysgICAgICAgIE1UTEdQVUZhbWlseSBmYW1pbHk7CisrICAgICAgICBz
d2l0Y2ggKGlPU0ZhbWlseSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIDE6CisrICAg
ICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlMTsKKysgICAgICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBmYW1pbHkg
PSBNVExHUFVGYW1pbHlBcHBsZTI7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAg
ICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGUz
OworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAg
ICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNDsKKysgICAgICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBN
VExHUFVGYW1pbHlBcHBsZTU7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyMgICAgICAgIGlm
IFRBUkdFVF9PU19JT1MKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIGZh
bWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNjsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrIyAg
ICAgICAgZW5kaWYKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiArICAgICAgICB9Ci0gICAgICAgICB0ZXh0dXJlRGF0YSA9IElPU3VyZmFjZUdl
dEJhc2VBZGRyZXNzKG1JT1N1cmZhY2UpOworKyAgICAgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9y
dHNGYW1pbHk6ZmFtaWx5XTsKKysgICAgfSAgLy8gTWV0YWwgMi4yCisrIyAgICBlbmRpZiAgLy8g
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAorKworKyAgICAvLyBJZiBkZXZpY2UgZG9l
c24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKKysgICAg
Ly8gW01UTERldmljZSBzdXBwb3J0c0ZlYXR1cmVTZXQ6XS4KKysgICAgTVRMRmVhdHVyZVNldCBm
ZWF0dXJlU2V0OworKyAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKKysgICAgeworKyMgICAgaWYgVEFS
R0VUX09TX0lPUworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBN
VExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkxX3YxOworKyAgICAgICAgICAgIGJyZWFrOworKyAg
ICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lP
U19HUFVGYW1pbHkyX3YxOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSAzOgor
KyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkzX3Yx
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIGZl
YXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHk0X3YxOworKyAgICAgICAgICAg
IGJyZWFrOworKyMgICAgICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0g
MTIwMDAwCisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZl
YXR1cmVTZXRfaU9TX0dQVUZhbWlseTVfdjE7CisrICAgICAgICAgICAgYnJlYWs7CisrIyAgICAg
ICAgZW5kaWYgIC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQKKysjICAgIGVsaWYg
VEFSR0VUX09TX1RWCisrICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDI6CisrICAgICAg
ICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfdHZPU19HUFVGYW1pbHkxX3YxOworKyAg
ICAgICAgICAgIGJyZWFrOworKyMgICAgZW5kaWYgIC8vIFRBUkdFVF9PU19JT1MKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHJl
dHVybiBbZGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpmZWF0dXJlU2V0XTsKKysjZW5kaWYgICAg
ICAvLyBUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVgorK30KKysKKytib29sIFN1cHBvcnRz
TWFjR1BVRmFtaWx5KGlkPE1UTERldmljZT4gZGV2aWNlLCB1aW50OF90IG1hY0ZhbWlseSkKKyt7
CisrI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrIyAgICBpZiBk
ZWZpbmVkKF9fTUFDXzEwXzE1KQorKyAgICAvLyBJZiBkZXZpY2Ugc3VwcG9ydHMgW01UTERldmlj
ZSBzdXBwb3J0c0ZhbWlseTpdLCB0aGVuIHVzZSBpdC4KKysgICAgaWYgKEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQygxMC4xNSwgMTMuMCkpCisrICAgIHsKKysgICAgICAgIE1UTEdQVUZhbWlseSBm
YW1pbHk7CisrCisrICAgICAgICBzd2l0Y2ggKG1hY0ZhbWlseSkKKysgICAgICAgIHsKKysjICAg
ICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKysgICAgICAgICAgICBjYXNlIDE6CisrICAg
ICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseU1hY0NhdGFseXN0MTsKKysgICAgICAg
ICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBm
YW1pbHkgPSBNVExHUFVGYW1pbHlNYWNDYXRhbHlzdDI7CisrICAgICAgICAgICAgICAgIGJyZWFr
OworKyMgICAgICAgIGVsc2UgICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKysgICAgICAgICAg
ICBjYXNlIDE6CisrICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseU1hYzE7Cisr
ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAg
ICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrIyAgICAgICAgZW5kaWYgIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysK
KysgICAgICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07CisrICAgIH0g
IC8vIE1ldGFsIDIuMgorKyMgICAgZW5kaWYKKysKKysgICAgLy8gSWYgZGV2aWNlIGRvZXNuJ3Qg
c3VwcG9ydCBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlCisrICAgIC8vIFtN
VExEZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0Ol0uCisrIyAgICBpZiBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKysgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgcmV0dXJuIGZhbHNlOworKyMgICAgZWxz
ZQorKyAgICBNVExGZWF0dXJlU2V0IGZlYXR1cmVTZXQ7CisrICAgIHN3aXRjaCAobWFjRmFtaWx5
KQorKyAgICB7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1U
TEZlYXR1cmVTZXRfbWFjT1NfR1BVRmFtaWx5MV92MTsKKysgICAgICAgICAgICBicmVhazsKKysj
ICAgICAgICBpZiBkZWZpbmVkKF9fTUFDXzEwXzE0KQorKyAgICAgICAgY2FzZSAyOgorKyAgICAg
ICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTJfdjE7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrIyAgICAgICAgZW5kaWYKKysgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBbZGV2aWNlIHN1
cHBvcnRzRmVhdHVyZVNldDpmZWF0dXJlU2V0XTsKKysjICAgIGVuZGlmICAvLyBUQVJHRVRfT1Nf
TUFDQ0FUQUxZU1QKKysjZWxzZSAgICAgICAvLyAjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKysKKysgICAgcmV0dXJuIGZhbHNlOworKworKyNlbmRpZgorK30KKysK
KytzdGF0aWMgTlNVSW50ZWdlciBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY29uc3QgRm9ybWF0
Q2FwcyAmY2FwcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc01TQUEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgY3VycmVudFJlbmRlclRhcmdldFNpemUpCisreworKyAgICBhc3NlcnQoIWNh
cHMuY29tcHJlc3NlZCk7CisrICAgIHVpbnQ4X3QgYWxpZ25tZW50ICAgICAgICAgPSBjYXBzLmFs
aWdubWVudDsKKysgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzICAgICA9IGNhcHMucGl4ZWxCeXRl
czsKKysgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzTVNBQSA9IGNhcHMucGl4ZWxCeXRlc01TQUE7
CisrICAgIHBpeGVsQnl0ZXMgICAgICAgICAgICAgICAgPSBpc01TQUEgPyBwaXhlbEJ5dGVzTVNB
QSA6IHBpeGVsQnl0ZXM7CisrCisrICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0gKGN1cnJl
bnRSZW5kZXJUYXJnZXRTaXplICsgKGFsaWdubWVudCAtIDEpKSAmIH4oYWxpZ25tZW50IC0gMSk7
CisrICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplICs9IHBpeGVsQnl0ZXM7CisrICAgIHJldHVy
biBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKKyt9CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90
YWxTaXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NE
ZXNjcmlwdG9yICpkZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxN
VExEZXZpY2U+IGRldmljZSkKKyt7CisrICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRhcmdl
dFNpemUgPSAwOworKworKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UoZGV2aWNlKTsgaSsrKQorKyAgICB7CisrICAgICAg
ICBNVExQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50
c1tpXS50ZXh0dXJlLnBpeGVsRm9ybWF0OworKyAgICAgICAgYm9vbCBpc01zYWEgICAgICAgICAg
ICAgICAgPSBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5zYW1wbGVDb3Vu
dCA+IDE7CisrICAgICAgICBpZiAocGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPSBjb250
ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMocGl4ZWxGb3JtYXQpOworKyAg
ICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0
TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNp
emUpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0ID09CisrICAgICAgICBkZXNjcmlwdG9yLnN0ZW5jaWxB
dHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpCisrICAgIHsKKysgICAgICAgIGJvb2wgaXNN
c2FhID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7
CisrICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZv
cm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAg
Y29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZl
Rm9ybWF0Q2FwcygKKysgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQu
dGV4dHVyZS5waXhlbEZvcm1hdCk7CisrICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNp
emUgPQorKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNN
c2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4
dHVyZS5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3IuZGVwdGhBdHRh
Y2htZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgICAgIGNvbnN0IEZvcm1h
dENhcHMgJmNhcHMgPSBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMo
CisrICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4
ZWxGb3JtYXQpOworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAg
ICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVu
dFJlbmRlclRhcmdldFNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdElu
dmFsaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9
IGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7Cisr
ICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXko
KS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcygKKysgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdGVu
Y2lsQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50
UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZv
cm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0K
KysgICAgfQorKyAgICByZXR1cm4gY3VycmVudFJlbmRlclRhcmdldFNpemU7CisrfQorK05TVUlu
dGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Io
CisrICAgIGNvbnN0IE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKysg
ICAgY29uc3QgQ29udGV4dCAqY29udGV4dCwKKysgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCisr
eworKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKysgICAgYm9v
bCBpc01zYWEgICAgICAgICAgICAgICAgICAgICAgICA9IGRlc2NyaXB0b3Iuc2FtcGxlQ291bnQg
PiAxOworKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBHZXRNYXhOdW1iZXJPZlJlbmRl
clRhcmdldHNGb3JEZXZpY2UoZGV2aWNlKTsgaSsrKQorKyAgICB7CisrICAgICAgICBNVExSZW5k
ZXJQaXBlbGluZUNvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKmNvbG9yID0gZGVzY3JpcHRvci5j
b2xvckF0dGFjaG1lbnRzW2ldOworKyAgICAgICAgaWYgKGNvbG9yLnBpeGVsRm9ybWF0ICE9IE1U
TFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3Jt
YXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBz
KGNvbG9yLnBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6
ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01z
YWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBp
ZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCA9PSBkZXNjcmlwdG9yLnN0
ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQpCisrICAgIHsKKysgICAgICAgIGlmIChkZXNjcmlw
dG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0KKysgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworKyAgICAgICAgICAgIGN1cnJl
bnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9y
Rm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworKyAgICAgICAg
fQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVw
dGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPQorKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzY3JpcHRv
ci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisrICAgICAgICAgICAgY3VycmVudFJlbmRl
clRhcmdldFNpemUgPQorKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQo
Y2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisrICAgICAgICB9CisrICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBp
eGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3JtYXRD
YXBzICZjYXBzID0KKysgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXRO
YXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7
CisrICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAgICAgICAg
ICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFy
Z2V0U2l6ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJU
YXJnZXRTaXplOworK30KKysKKyBnbDo6Qm94IE1UTFJlZ2lvblRvR0xCb3goY29uc3QgTVRMUmVn
aW9uICZtdGxSZWdpb24pCisgeworICAgICByZXR1cm4gZ2w6OkJveChzdGF0aWNfY2FzdDxpbnQ+
KG10bFJlZ2lvbi5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi55
KSwKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0
Lm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbAor
aW5kZXggNDI3MmM0Zi4uMmE5YmI1ZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2JsaXQubWV0YWwKK0BAIC0zMzQsNyArMzM0LDcgQEAga2VybmVsIHZvaWQg
YmxpdFN0ZW5jaWxUb0J1ZmZlckNTKHVzaG9ydDIgZ0luZGljZXMgW1t0aHJlYWRfcG9zaXRpb25f
aW5fZ3JpZF1dLAorIH0KKyAKKyAvLyBGcmFnbWVudCdzIHN0ZW5jaWwgb3V0cHV0IGlzIG9ubHkg
YXZhaWxhYmxlIHNpbmNlIE1ldGFsIDIuMQorLUBAI2lmIF9fTUVUQUxfVkVSU0lPTl9fID49IDIx
MAorKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKyAKKyBzdHJ1Y3QgRnJhZ21lbnRTdGVu
Y2lsT3V0CisgeworQEAgLTM5Nyw0ICszOTcsNCBAQCBmcmFnbWVudCBGcmFnbWVudERlcHRoU3Rl
bmNpbE91dCBibGl0RGVwdGhTdGVuY2lsRlMoCisgICAgICAgICAgICAgICAgICAgICAgIHNyY1N0
ZW5jaWxUZXh0dXJlQ3ViZSwgaW5wdXQudGV4Q29vcmRzLCBvcHRpb25zLnNyY0xldmVsLCBvcHRp
b25zLnNyY0xheWVyKTsKKyAgICAgcmV0dXJuIHJlOworIH0KKy1AQCNlbmRpZiAgLy8gX19NRVRB
TF9WRVJTSU9OX18gPj0gMjEwCisrI2VuZGlmICAvLyBfX01FVEFMX1ZFUlNJT05fXyA+PSAyMTAK
K2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24u
aCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCitpbmRleCA2
OGM3NzQ1Li5lNjY3M2I1IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L3NoYWRlcnMvY29tbW9uLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFk
ZXJzL2NvbW1vbi5oCitAQCAtMTAsOCArMTAsOCBAQAorIAorIC8vIGNsYW5nLWZvcm1hdCBvZmYK
KyAjaWZuZGVmIFNLSVBfU1REX0hFQURFUlMKKy1AQCMgICAgaW5jbHVkZSA8c2ltZC9zaW1kLmg+
CistQEAjICAgIGluY2x1ZGUgPG1ldGFsX3N0ZGxpYj4KKysjICAgIGluY2x1ZGUgPHNpbWQvc2lt
ZC5oPgorKyMgICAgaW5jbHVkZSA8bWV0YWxfc3RkbGliPgorICNlbmRpZgorIAorICNpbmNsdWRl
ICJjb25zdGFudHMuaCIKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCitpbmRleCBkZjdjNGM5Li4xYjQwOGQ4IDEwMDY0NAor
LS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0
YWwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVy
Lm1ldGFsCitAQCAtNCwyMiArNCwyMiBAQAorIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisgLy8KKyAvLyBjb3B5X2J1ZmZlci5tZXRhbDogaW1wbGVtZW50cyBjb21wdXRlIHNoYWRlciB0
aGF0IGNvcHkgZm9ybWF0dGVkIGRhdGEgZnJvbSBidWZmZXIgdG8gdGV4dHVyZSwKKy0vLyBhbmQg
ZnJvbSB0ZXh0dXJlIHRvIGJ1ZmZlci4KKysvLyBmcm9tIHRleHR1cmUgdG8gYnVmZmVyIGFuZCBm
cm9tIGJ1ZmZlciB0byBidWZmZXIuCisgLy8gTk9URShocWxlKTogVGhpcyBmaWxlIGlzIGEgYml0
IGhhcmQgdG8gcmVhZCBidXQgdGhlcmUgYXJlIGEgbG90IG9mIHJlcGVhdGVkIHdvcmtzLCBhbmQg
aXQgd291bGQKKyAvLyBiZSBhIHBhaW4gdG8gaW1wbGVtZW50IHdpdGhvdXQgdGhlIHVzZSBvZiBt
YWNyb3MuCisgLy8KKyAKKy1AQCNpbmNsdWRlIDxtZXRhbF9wYWNrPgorKyNpbmNsdWRlIDxtZXRh
bF9wYWNrPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAiZm9ybWF0X2F1dG9n
ZW4uaCIKKyAKKyB1c2luZyBuYW1lc3BhY2Ugcng6Om10bF9zaGFkZXI7CisgCistY29uc3RhbnQg
aW50IGtDb3B5Rm9ybWF0VHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDEwKV1dOworK2NvbnN0YW50
IGludCBrQ29weUZvcm1hdFR5cGUgW1tmdW5jdGlvbl9jb25zdGFudCgxKV1dOworIAorIC8qIC0t
LS0tLS0tIGNvcHkgcGl4ZWwgZGF0YSBiZXR3ZWVuIGJ1ZmZlciBhbmQgdGV4dHVyZSAtLS0tLS0t
LS0qLworLWNvbnN0YW50IGludCBrQ29weVRleHR1cmVUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQo
MjApXV07CisrY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFu
dCgyKV1dOworIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJlVHlwZTJEICAgICAgPSBrQ29weVRl
eHR1cmVUeXBlID09IGtUZXh0dXJlVHlwZTJEOworIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJl
VHlwZTJEQXJyYXkgPSBrQ29weVRleHR1cmVUeXBlID09IGtUZXh0dXJlVHlwZTJEQXJyYXk7Cisg
Y29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkRNUyAgICA9IGtDb3B5VGV4dHVyZVR5cGUg
PT0ga1RleHR1cmVUeXBlMkRNdWx0aXNhbXBsZTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4uaAoraW5kZXggYTE3ZWFkMy4uYjk5
MWU0OCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zv
cm1hdF9hdXRvZ2VuLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJz
L2Zvcm1hdF9hdXRvZ2VuLmgKK0BAIC0yNDUsNSArMjQ1LDUgQEAgZW51bQorIAorIH0KKyAKKy19
ICAvLyBuYW1lc3BhY2UgbXRsX3NoYWRlcgorLX0gIC8vIG5hbWVzcGFjZSByeAorK30KKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX2luZGlj
ZXMubWV0YWwgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNl
cy5tZXRhbAoraW5kZXggMmQ4MzUzYi4uZWVkNjFlYSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNlcy5tZXRhbAorQEAgLTU2LDEw
ICs1NiwxMCBAQCBpbmxpbmUgdWludCBnZXRJbmRleFVuYWxpZ25lZFUzMihjb25zdGFudCB1Y2hh
ciAqaW5wdXQsIHVpbnQgb2Zmc2V0LCB1aW50IGlkeCkKKyAgICAgcmV0dXJuIGlucHV0MCB8IChp
bnB1dDEgPDwgOCkgfCAoaW5wdXQyIDw8IDE2KSB8IChpbnB1dDMgPDwgMjQpOworIH0KKyAKKy1r
ZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25f
aW5fZ3JpZF1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgSW5k
ZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKKy0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFtbYnVmZmVyKDEpXV0sCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRwdXRbW2J1
ZmZlcigyKV1dKQorK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBpZHggW1t0
aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXQg
W1tidWZmZXIoMSldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB1
c2hvcnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsKKyAgICAgQU5HTEVfSURYX0NPTlZFUlNJ
T05fR1VBUkQoaWR4LCBvcHRpb25zKTsKKyAKK0BAIC03NSwxMiArNzUsMTMgQEAga2VybmVsIHZv
aWQgY29udmVydEluZGV4VThUb1UxNih1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRd
XSwKICAgICAgfQorIH0KICAKLUBAIC0yMzgsNyArMjQwLDkgQEAgZWdsOjpFcnJvciBJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6cmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBFR0wKLSAgICAgICAgIGdsOjpQaXhlbFBhY2tTdGF0ZSBzdGF0ZTsKLSAgICAgICAgIHN0YXRl
LnJvd0xlbmd0aCA9IG1Sb3dTdHJpZGVJblBpeGVsczsKLSAgICAgICAgIHN0YXRlLmFsaWdubWVu
dCA9IDE7Ci0tICAgICAgICBzdGF0ZU1hbmFnZXItPnNldFBpeGVsUGFja1N0YXRlKHN0YXRlKTsK
LSsgICAgICAgIGlmIChJc0Vycm9yKHN0YXRlTWFuYWdlci0+c2V0UGl4ZWxQYWNrU3RhdGUoY29u
dGV4dCwgc3RhdGUpKSkgewotKyAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN0YXRlKCkg
PDwgIkZhaWxlZCB0byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0rICAgICAgICB9Ci0gICAg
ICAgICAvLyBUT0RPKGticik6IHBvc3NpYmx5IG1vcmUgc3RhdGUgdG8gYmUgc2V0IGhlcmUsIGlu
Y2x1ZGluZyBzZXR0aW5nIGFueQotICAgICAgICAgLy8gcGl4ZWwgcGFjayBidWZmZXIgdG8gMCB3
aGVuIHVzaW5nIEVTIDMuMCBjb250ZXh0cy4KLSAgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdCA9
IGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF07Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCi1pbmRleCA5OTc3MmM0Li4xMWY0N2U2IDEwMDY0
NAotLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCi0r
KysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHAKLUBAIC0x
MzU4LDcgKzEzNTgsNyBAQCB2b2lkIEdlbmVyYXRlQ2Fwcyhjb25zdCBGdW5jdGlvbnNHTCAqZnVu
Y3Rpb25zLAorLWtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNigKKy0gICAgdWludCBpZHhbW3Ro
cmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCistICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBh
cmFtcyAmb3B0aW9uc1tbYnVmZmVyKDApXV0sCistICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFtb
IGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCkgXV0s
CistICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkW1sgYnVmZmVyKDEpLCBmdW5jdGlv
bl9jb25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCkgXV0sCistICAgIGRldmljZSB1c2hvcnQg
Km91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgY29udmVydEluZGV4VTE2KHVpbnQg
aWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDAp
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dEFsaWduZWQKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVk
KV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRwdXQg
W1tidWZmZXIoMildXSkKKyB7CisgICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwg
b3B0aW9ucyk7CiAgCi0gI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCi0gICAgIGFuZ2xlOjpTeXN0ZW1JbmZvIGlu
Zm87Ci0tICAgIGlmIChhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykgJiYgIWluZm8uaXNpT1NB
cHBPbk1hYykKLSsgICAgaWYgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSAmJiAhaW5mby5u
ZWVkc0VBR0xPbk1hYykKK0BAIC05NiwxMiArOTcsMTMgQEAga2VybmVsIHZvaWQgY29udmVydElu
ZGV4VTE2KAorICAgICBvdXRwdXRbaWR4XSA9IHZhbHVlOworIH0KKyAKKy1rZXJuZWwgdm9pZCBj
b252ZXJ0SW5kZXhVMzIoCistICAgIHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1d
LAorLSAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigw
KV1dLAorLSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2Nv
bnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpIF1dLAorLSAgICBjb25zdGFudCB1aW50ICpp
bnB1dEFsaWduZWRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJB
bGlnbmVkKSBdXSwKKy0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2Vy
bmVsIHZvaWQgY29udmVydEluZGV4VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dy
aWRdXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJz
aW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCld
XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWludCAqaW5wdXRBbGln
bmVkCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9j
b25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGV2aWNlIHVpbnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsKKyAgICAgQU5HTEVf
SURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKKyAKK0BAIC0xNDAsOSArMTQyLDkg
QEAga2VybmVsIHZvaWQgZ2VuVHJpRmFuSW5kaWNlc0Zyb21BcnJheSh1aW50IGlkeCBbW3RocmVh
ZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgCisgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBpZHgsCistICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0VThbW2Z1bmN0aW9uX2NvbnN0YW50KGtV
c2VTb3VyY2VCdWZmZXJVOCldXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1
c2hvcnQgKmlucHV0VTE2W1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1d
LAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyW1tmdW5j
dGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dKQorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4IFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNv
dXJjZUJ1ZmZlclU4KV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVzaG9y
dCAqaW5wdXRVMTYgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyIFtbZnVuY3Rp
b25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUzMildXSkKKyB7CisgICAgIGlmIChrVXNlU291
cmNlQnVmZmVyVTgpCiAgICAgIHsKLSAgICAgICAgIFZlbmRvcklEIHZlbmRvciA9IEdldFZlbmRv
cklEKGZ1bmN0aW9ucyk7Ci0gICAgICAgICBpZiAoKElzQU1EKHZlbmRvcikgfHwgSXNJbnRlbCh2
ZW5kb3IpKSAmJiAqbWF4U3VwcG9ydGVkRVNWZXJzaW9uID49IGdsOjpWZXJzaW9uKDMsIDApKQor
QEAgLTE3MCwxMyArMTcyLDE1IEBAIGlubGluZSB1aW50IGdldEluZGV4VTMyKHVpbnQgb2Zmc2V0
LAorIC8vIE5PVEUoaHFsZSk6IHRyaWFuZ2xlIGZhbiBpbmRpY2VzIGdlbmVyYXRpb24gZG9lc24n
dCBzdXBwb3J0IHByaW1pdGl2ZSByZXN0YXJ0LgorIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBp
bmRpY2VzIGZyb20gYW4gaW5kaWNlcyBidWZmZXIuIGluZGV4Q291bnQgb3B0aW9ucyBpbmRpY2F0
ZXMgbnVtYmVyCisgLy8gb2YgaW5kaWNlcyBzdGFydGluZyBmcm9tIHRoZSAzcmQuCista2VybmVs
IHZvaWQgZ2VuVHJpRmFuSW5kaWNlc0Zyb21FbGVtZW50cygKKy0gICAgdWludCBpZHhbW3RocmVh
ZF9wb3NpdGlvbl9pbl9ncmlkXV0sCistICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFt
cyAmb3B0aW9uc1tbYnVmZmVyKDApXV0sCistICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4W1sg
YnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpIF1dLAorLSAg
ICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFu
dChrVXNlU291cmNlQnVmZmVyVTE2KSBdXSwKKy0gICAgY29uc3RhbnQgdWludCAqaW5wdXRVMzJb
WyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpIF1dLAor
LSAgICBkZXZpY2UgdWludCAqb3V0cHV0W1tidWZmZXIoMildXSkKKytrZXJuZWwgdm9pZCBnZW5U
cmlGYW5JbmRpY2VzRnJvbUVsZW1lbnRzKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dy
aWRdXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0VTgK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBm
dW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2CisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUxNildXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29u
c3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclUzMildXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRldmljZSB1aW50ICpvdXRwdXQgW1tidWZmZXIoMildXSkKKyB7Cisg
ICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9ucyk7CisgCitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRh
bCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwK
K2luZGV4IGIzYTM2NzUuLmYyMzM4YjIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCitAQCAtMjMsOCArMjMsNiBAQCB1
c2luZyBuYW1lc3BhY2Ugcng6Om10bF9zaGFkZXI7CisgCisgI2RlZmluZSBURVhFTF9MT0FEKGlu
ZGV4KSBmbG9hdDQoc1JbaW5kZXhdLCBzR1tpbmRleF0sIHNCW2luZGV4XSwgc0FbaW5kZXhdKQor
IAorLSNkZWZpbmUgVE9fTElORUFSKHRleGVsKSAob3B0aW9ucy5zUkdCID8gc1JHQnRvTGluZWFy
KHRleGVsKSA6IHRleGVsKQorLQorICNkZWZpbmUgT1VUX09GX0JPVU5EX0NIRUNLKGVkZ2VWYWx1
ZSwgdGFyZ2V0VmFsdWUsIGNvbmRpdGlvbikgXAorICAgICAoY29uZGl0aW9uKSA/IChlZGdlVmFs
dWUpIDogKHRhcmdldFZhbHVlKQorIAorQEAgLTMyLDcgKzMwLDYgQEAgc3RydWN0IEdlbk1pcFBh
cmFtcworIHsKKyAgICAgdWludCBzcmNMZXZlbDsKKyAgICAgdWludCBudW1NaXBMZXZlbHNUb0dl
bjsKKy0gICAgYm9vbCBzUkdCOworIH07CisgCisgLy8gTk9URShocWxlKTogRm9yIG51bU1pcExl
dmVsc1RvR2VuID4gMSwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSB0ZXh0dXJlIGlzIHBvd2Vy
IG9mIHR3by4gSWYgaXQKK0BAIC04MywxMCArODAsNiBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNE
TWlwbWFwcyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAorICAg
ICAvLyAtLS0tIFNlY29uZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAKKyAgICAgLy8gV3JpdGUgdG8g
c2hhcmVkIG1lbW9yeQorLSAgICBpZiAob3B0aW9ucy5zUkdCKQorLSAgICB7CistICAgICAgICB0
ZXhlbDEgPSBsaW5lYXJUb1NSR0IodGV4ZWwxKTsKKy0gICAgfQorICAgICBURVhFTF9TVE9SRShs
SW5kZXgsIHRleGVsMSk7CisgCisgICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fdGhyZWFkZ3JvdXApOworQEAgLTExOSw3ICsxMTIsNyBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0
ZTNETWlwbWFwcyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAor
IAorICAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCAr
IHRleGVsNSArIHRleGVsNiArIHRleGVsNyArIHRleGVsOCkgLyA4LjA7CisgCistICAgICAgICBk
c3RNaXAyLndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAxKTsKKysgICAgICAg
IGRzdE1pcDIud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAxKTsKKyAKKyAgICAgICAgIC8vIFdy
aXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwx
KTsKK0BAIC0xNjUsNyArMTU4LDcgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWlu
dCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKyAKKyAgICAgICAgIHRl
eGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUgKyB0ZXhl
bDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOworIAorLSAgICAgICAgZHN0TWlwMy53cml0ZShU
T19MSU5FQVIodGV4ZWwxKSwgZ0luZGljZXMgPj4gMik7CisrICAgICAgICBkc3RNaXAzLndyaXRl
KHRleGVsMSwgZ0luZGljZXMgPj4gMik7CisgCisgICAgICAgICAvLyBXcml0ZSB0byBzaGFyZWQg
bWVtb3J5CisgICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CitAQCAtMjExLDYg
KzIwNCwzNDggQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0
aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKyAKKyAgICAgICAgIHRleGVsMSA9ICh0ZXhl
bDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUgKyB0ZXhlbDYgKyB0ZXhlbDcg
KyB0ZXhlbDgpIC8gOC4wOworIAorLSAgICAgICAgZHN0TWlwNC53cml0ZShUT19MSU5FQVIodGV4
ZWwxKSwgZ0luZGljZXMgPj4gMyk7CisrICAgICAgICBkc3RNaXA0LndyaXRlKHRleGVsMSwgZ0lu
ZGljZXMgPj4gMyk7CisrICAgIH0KKyt9CisrCisra2VybmVsIHZvaWQgZ2VuZXJhdGUyRE1pcG1h
cHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQyIGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9u
X2luX2dyaWRdXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQ8Zmxv
YXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAxIFtbdGV4dHVyZSgx
KV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNj
ZXNzOjp3cml0ZT4gZHN0TWlwMiBbW3RleHR1cmUoMildXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0
dXJlKDMpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0
LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVyZSg0KV1dLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigw
KV1dKQorK3sKKysgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7
CisrICAgIHVzaG9ydDIgbWlwU2l6ZSA9CisrICAgICAgICB1c2hvcnQyKHNyY1RleHR1cmUuZ2V0
X3dpZHRoKGZpcnN0TWlwTGV2ZWwpLCBzcmNUZXh0dXJlLmdldF9oZWlnaHQoZmlyc3RNaXBMZXZl
bCkpOworKyAgICBib29sIHZhbGlkVGhyZWFkID0gZ0luZGljZXMueCA8IG1pcFNpemUueCAmJiBn
SW5kaWNlcy55IDwgbWlwU2l6ZS55OworKworKyAgICBjb25zdGV4cHIgc2FtcGxlciB0ZXh0dXJl
U2FtcGxlcihtYWdfZmlsdGVyOjpsaW5lYXIsIG1pbl9maWx0ZXI6OmxpbmVhciwgbWlwX2ZpbHRl
cjo6bGluZWFyKTsKKysKKysgICAgLy8gTk9URShocWxlKTogVXNlIHNpbWRfZ3JvdXAgZnVuY3Rp
b24gd2hlbmV2ZXIgYXZhaWxhYmxlLiBUaGF0IGNvdWxkIGF2b2lkIGJhcnJpZXIgdXNlLgorKwor
KyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3Qu
CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFk
Z3JvdXAgZmxvYXQgc0dba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBz
QltrVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91
cFhZXTsKKysKKysgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKysgICAgZmxv
YXQ0IHRleGVsMTsKKysgICAgaWYgKHZhbGlkVGhyZWFkKQorKyAgICB7CisrICAgICAgICBmbG9h
dDIgdGV4Q29vcmRzID0gKGZsb2F0MihnSW5kaWNlcykgKyBmbG9hdDIoMC41LCAwLjUpKSAvIGZs
b2F0MihtaXBTaXplKTsKKysgICAgICAgIHRleGVsMSAgICAgICAgICAgPSBzcmNUZXh0dXJlLnNh
bXBsZSh0ZXh0dXJlU2FtcGxlciwgdGV4Q29vcmRzLCBsZXZlbChvcHRpb25zLnNyY0xldmVsKSk7
CisrCisrICAgICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisrICAgICAgICBkc3RNaXAxLndyaXRl
KHRleGVsMSwgZ0luZGljZXMpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAg
Ly8gVGhpcyB3aWxsIGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisrICAgICAgICBs
SW5kZXggPSAweGZmZmZmZmZmOworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExl
dmVsc1RvR2VuID09IDEpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAg
ICAvLyAtLS0tIFNlY29uZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKysKKysgICAgLy8gV3JpdGUgdG8g
c2hhcmVkIG1lbW9yeQorKyAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisrCisrICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAg
ICAvLyBJbmRleCBtdXN0IGJlIGV2ZW4KKysgICAgaWYgKChsSW5kZXggJiAweDA5KSA9PSAwKSAg
Ly8gKGxJbmRleCAmIGIwMDEwMDEpID09IDAKKysgICAgeworKyAgICAgICAgYm9vbDIgYXRFZGdl
ID0gZ0luZGljZXMgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4
KzEsIHkpCisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxs
IGVxdWFsIHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRf
Q0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDEpLCBhdEVkZ2UueCk7CisrICAgICAg
ICAvLyAoeCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9IE9VVF9PRl9CT1VORF9DSEVD
Syh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsK
KysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArIChrVGhyZWFkR3JvdXBYICsg
MSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdEVkZ2Uu
eCB8IGF0RWRnZS55KTsKKysKKysgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0
ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworKworKyAgICAgICAgZHN0TWlwMi53cml0ZSh0ZXhlbDEs
IGdJbmRpY2VzID4+IDEpOworKworKyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQor
KyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKyAgICB9CisrCisrICAgIGlm
IChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDIpCisrICAgIHsKKysgICAgICAgIHJldHVy
bjsKKysgICAgfQorKworKyAgICAvLyAtLS0tIDNyZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKysgICAg
dGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisrCisrICAg
IC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAorKyAgICBpZiAoKGxJbmRleCAmIDB4MWIp
ID09IDApICAvLyAobEluZGV4ICYgYjAxMTAxMSkgPT0gMAorKyAgICB7CisrICAgICAgICBtaXBT
aXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKysgICAgICAgIGJvb2wy
IGF0RWRnZSA9IChnSW5kaWNlcyA+PiAxKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworKwor
KyAgICAgICAgLy8gKHgrMSwgeSkKKysgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMg
MSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9
IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMiksIGF0RWRn
ZS54KTsKKysgICAgICAgIC8vICh4LCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKysg
ICAgICAgICAgICBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCAr
IDIgKiBrVGhyZWFkR3JvdXBYKSwgYXRFZGdlLnkpOworKyAgICAgICAgLy8gKHgrMSwgeSsxKQor
KyAgICAgICAgZmxvYXQ0IHRleGVsNCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVM
X0xPQUQobEluZGV4ICsgKDIgKiBrVGhyZWFkR3JvdXBYICsgMikpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKysKKysg
ICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4w
OworKworKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOworKwor
KyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorKyAgICAgICAgVEVYRUxfU1RPUkUo
bEluZGV4LCB0ZXhlbDEpOworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVs
c1RvR2VuID09IDMpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAv
LyAtLS0tIDR0aCBtaXAgbGV2ZWwgLS0tLS0tLS0KKysgICAgdGhyZWFkZ3JvdXBfYmFycmllciht
ZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisrCisrICAgIC8vIEluZGV4IG11c3QgYmUgbXVs
dGlwbGUgb2YgOAorKyAgICBpZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAobEluZGV4ICYg
YjExMTExMSkgPT0gMAorKyAgICB7CisrICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6
ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKysgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNlcyA+
PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworKworKyAgICAgICAgLy8gKHgrMSwgeSkK
KysgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwg
dG8gdGV4ZWwxOgorKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0
ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCksIGF0RWRnZS54KTsKKysgICAgICAgIC8vICh4
LCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKysgICAgICAgICAgICBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQgKiBrVGhyZWFkR3JvdXBYKSwg
YXRFZGdlLnkpOworKyAgICAgICAgLy8gKHgrMSwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVs
NCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBr
VGhyZWFkR3JvdXBYICsgNCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKysKKysgICAgICAgIHRleGVsMSA9ICh0ZXhl
bDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworKworKyAgICAgICAgZHN0TWlw
NC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworKyAgICB9CisrfQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlVHlwZVIsIHR5cGVuYW1lIFRleHR1cmVUeXBlVz4KKytzdGF0aWMg
X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIHZvaWQgZ2VuZXJhdGVDdWJlT3IyREFycmF5
Mm5kQW5kTW9yZU1pcG1hcHMoCisrICAgIHVpbnQgbEluZGV4LAorKyAgICB1c2hvcnQzIGdJbmRp
Y2VzLAorKyAgICBUZXh0dXJlVHlwZVIgc3JjVGV4dHVyZSwKKysgICAgVGV4dHVyZVR5cGVXIGRz
dE1pcDIsCisrICAgIFRleHR1cmVUeXBlVyBkc3RNaXAzLAorKyAgICBUZXh0dXJlVHlwZVcgZHN0
TWlwNCwKKysgICAgdXNob3J0MiBtaXAxU2l6ZSwKKysgICAgZmxvYXQ0IG1pcDFUZXhlbCwKKysg
ICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNSLAorKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0csCisr
ICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQiwKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNBLAor
KyAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMpCisreworKyAgICB1c2hvcnQyIG1p
cFNpemUgPSBtaXAxU2l6ZTsKKysgICAgZmxvYXQ0IHRleGVsMSAgID0gbWlwMVRleGVsOworKwor
KyAgICAvLyAtLS0tIFNlY29uZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKysKKysgICAgLy8gV3JpdGUg
dG8gc2hhcmVkIG1lbW9yeQorKyAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisrCisr
ICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKwor
KyAgICAvLyBJbmRleCBtdXN0IGJlIGV2ZW4KKysgICAgaWYgKChsSW5kZXggJiAweDA5KSA9PSAw
KSAgLy8gKGxJbmRleCAmIGIwMDEwMDEpID09IDAKKysgICAgeworKyAgICAgICAgYm9vbDIgYXRF
ZGdlID0gZ0luZGljZXMueHkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAg
IC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVs
MiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDEpLCBhdEVkZ2UueCk7Cisr
ICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9IE9VVF9PRl9CT1VO
RF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsga1RocmVhZEdyb3VwWCksIGF0RWRn
ZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBP
VVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArIChrVGhyZWFkR3Jv
dXBYICsgMSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dEVkZ2UueCB8IGF0RWRnZS55KTsKKysKKysgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhl
bDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworKworKyAgICAgICAgZHN0TWlwMi53cml0ZSh0
ZXhlbDEsIGdJbmRpY2VzLnh5ID4+IDEsIGdJbmRpY2VzLnopOworKworKyAgICAgICAgLy8gV3Jp
dGUgdG8gc2hhcmVkIG1lbW9yeQorKyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEp
OworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDIpCisr
ICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyAtLS0tIDNyZCBtaXAg
bGV2ZWwgLS0tLS0tLS0KKysgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90
aHJlYWRncm91cCk7CisrCisrICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAorKyAg
ICBpZiAoKGxJbmRleCAmIDB4MWIpID09IDApICAvLyAobEluZGV4ICYgYjAxMTAxMSkgPT0gMAor
KyAgICB7CisrICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQy
KDEpKTsKKysgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNlcy54eSA+PiAxKSA9PSAobWlw
U2l6ZSAtIHVzaG9ydDIoMSkpOworKworKyAgICAgICAgLy8gKHgrMSwgeSkKKysgICAgICAgIC8v
IElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgor
KyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVM
X0xPQUQobEluZGV4ICsgMiksIGF0RWRnZS54KTsKKysgICAgICAgIC8vICh4LCB5KzEpCisrICAg
ICAgICBmbG9hdDQgdGV4ZWwzID0KKysgICAgICAgICAgICBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4
ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIgKiBrVGhyZWFkR3JvdXBYKSwgYXRFZGdlLnkpOwor
KyAgICAgICAgLy8gKHgrMSwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsNCA9IE9VVF9PRl9C
T1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDIgKiBrVGhyZWFkR3JvdXBY
ICsgMikpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdEVk
Z2UueCB8IGF0RWRnZS55KTsKKysKKysgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIg
KyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworKworKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhl
bDEsIGdJbmRpY2VzLnh5ID4+IDIsIGdJbmRpY2VzLnopOworKworKyAgICAgICAgLy8gV3JpdGUg
dG8gc2hhcmVkIG1lbW9yeQorKyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOwor
ICAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDMpCisrICAg
IHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyAtLS0tIDR0aCBtaXAgbGV2
ZWwgLS0tLS0tLS0KKysgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJl
YWRncm91cCk7CisrCisrICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgOAorKyAgICBp
ZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAobEluZGV4ICYgYjExMTExMSkgPT0gMAorKyAg
ICB7CisrICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEp
KTsKKysgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNlcy54eSA+PiAyKSA9PSAobWlwU2l6
ZSAtIHVzaG9ydDIoMSkpOworKworKyAgICAgICAgLy8gKHgrMSwgeSkKKysgICAgICAgIC8vIElm
IHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorKyAg
ICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xP
QUQobEluZGV4ICsgNCksIGF0RWRnZS54KTsKKysgICAgICAgIC8vICh4LCB5KzEpCisrICAgICAg
ICBmbG9hdDQgdGV4ZWwzID0KKysgICAgICAgICAgICBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwx
LCBURVhFTF9MT0FEKGxJbmRleCArIDQgKiBrVGhyZWFkR3JvdXBYKSwgYXRFZGdlLnkpOworKyAg
ICAgICAgLy8gKHgrMSwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsNCA9IE9VVF9PRl9CT1VO
RF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBrVGhyZWFkR3JvdXBYICsg
NCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdEVkZ2Uu
eCB8IGF0RWRnZS55KTsKKysKKysgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0
ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworKworKyAgICAgICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEs
IGdJbmRpY2VzLnh5ID4+IDMsIGdJbmRpY2VzLnopOworKyAgICB9CisrfQorKworK2tlcm5lbCB2
b2lkIGdlbmVyYXRlQ3ViZU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhy
ZWFkZ3JvdXBdXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMgZ0lu
ZGljZXMgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNj
ZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtb
dGV4dHVyZSgyKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1
YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0
ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dKQorK3sKKysg
ICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisrICAgIHVzaG9y
dDIgbWlwMVNpemUgPQorKyAgICAgICAgdXNob3J0MihzcmNUZXh0dXJlLmdldF93aWR0aChmaXJz
dE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0TWlwTGV2ZWwpKTsKKysgICAg
Ym9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2VzLnkg
PCBtaXAxU2l6ZS55OworKworKyAgICBjb25zdGV4cHIgc2FtcGxlciB0ZXh0dXJlU2FtcGxlciht
YWdfZmlsdGVyOjpsaW5lYXIsIG1pbl9maWx0ZXI6OmxpbmVhciwgbWlwX2ZpbHRlcjo6bGluZWFy
KTsKKysKKysgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKysgICAgZmxvYXQ0
IG1pcDFUZXhlbDsKKysgICAgaWYgKHZhbGlkVGhyZWFkKQorKyAgICB7CisrICAgICAgICBmbG9h
dDIgdGV4Q29vcmRzID0gKGZsb2F0MihnSW5kaWNlcy54eSkgKyBmbG9hdDIoMC41LCAwLjUpKSAv
IGZsb2F0MihtaXAxU2l6ZSk7CisrICAgICAgICBtaXAxVGV4ZWwgPSBzcmNUZXh0dXJlLnNhbXBs
ZSh0ZXh0dXJlU2FtcGxlciwgY3ViZVRleGNvb3Jkcyh0ZXhDb29yZHMsIGludChnSW5kaWNlcy56
KSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbChvcHRpb25z
LnNyY0xldmVsKSk7CisrCisrICAgICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisrICAgICAgICBk
c3RNaXAxLndyaXRlKG1pcDFUZXhlbCwgZ0luZGljZXMueHksIGdJbmRpY2VzLnopOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUgYWxs
IHN1YnNlcXVlbnQgY2hlY2tzCisrICAgICAgICBsSW5kZXggPSAweGZmZmZmZmZmOworKyAgICB9
CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDEpCisrICAgIHsKKysg
ICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0
eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3QuCisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNSW2tU
aHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0dba1RocmVhZEdyb3VwWFld
OworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKysKKysgICAgZ2VuZXJhdGVDdWJlT3Iy
REFycmF5Mm5kQW5kTW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNlcywgc3JjVGV4dHVyZSwgZHN0
TWlwMiwgZHN0TWlwMywgZHN0TWlwNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNHLCBzQiwgc0EsIG9wdGlvbnMp
OworK30KKysKKytrZXJuZWwgdm9pZCBnZW5lcmF0ZTJEQXJyYXlNaXBtYXBzKHVpbnQgbEluZGV4
IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2hvcnQzIGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRd
XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxm
bG9hdD4gc3JjVGV4dHVyZSBbW3RleHR1cmUoMCldXSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlw
MSBbW3RleHR1cmUoMSldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBbW3RleHR1cmUoMild
XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxm
bG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMyBbW3RleHR1cmUoMyldXSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3
cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50IEdlbk1pcFBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dKQor
K3sKKysgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisrICAg
IHVzaG9ydDIgbWlwMVNpemUgPQorKyAgICAgICAgdXNob3J0MihzcmNUZXh0dXJlLmdldF93aWR0
aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0TWlwTGV2ZWwpKTsK
KysgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRp
Y2VzLnkgPCBtaXAxU2l6ZS55OworKworKyAgICBjb25zdGV4cHIgc2FtcGxlciB0ZXh0dXJlU2Ft
cGxlcihtYWdfZmlsdGVyOjpsaW5lYXIsIG1pbl9maWx0ZXI6OmxpbmVhciwgbWlwX2ZpbHRlcjo6
bGluZWFyKTsKKysKKysgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKysgICAg
ZmxvYXQ0IG1pcDFUZXhlbDsKKysgICAgaWYgKHZhbGlkVGhyZWFkKQorKyAgICB7CisrICAgICAg
ICBmbG9hdDIgdGV4Q29vcmRzID0gKGZsb2F0MihnSW5kaWNlcy54eSkgKyBmbG9hdDIoMC41LCAw
LjUpKSAvIGZsb2F0MihtaXAxU2l6ZSk7CisrICAgICAgICBtaXAxVGV4ZWwgPQorKyAgICAgICAg
ICAgIHNyY1RleHR1cmUuc2FtcGxlKHRleHR1cmVTYW1wbGVyLCB0ZXhDb29yZHMsIGdJbmRpY2Vz
LnosIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKysKKysgICAgICAgIC8vIFdyaXRlIHRvIHRl
eHR1cmUKKysgICAgICAgIGRzdE1pcDEud3JpdGUobWlwMVRleGVsLCBnSW5kaWNlcy54eSwgZ0lu
ZGljZXMueik7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICAvLyBUaGlzIHdp
bGwgaW52YWxpZGF0ZSBhbGwgc3Vic2VxdWVudCBjaGVja3MKKysgICAgICAgIGxJbmRleCA9IDB4
ZmZmZmZmZmY7CisrICAgIH0KKysKKysgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4g
PT0gMSkKKysgICAgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIC8vIFVzZSBz
dHJ1Y3Qgb2YgYXJyYXkgc3R5bGUgdG8gYXZvaWQgYmFuayBjb25mbGljdC4KKysgICAgdGhyZWFk
Z3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBz
R1trVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNCW2tUaHJlYWRHcm91
cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fba1RocmVhZEdyb3VwWFldOworKworKyAg
ICBnZW5lcmF0ZUN1YmVPcjJEQXJyYXkybmRBbmRNb3JlTWlwbWFwcyhsSW5kZXgsIGdJbmRpY2Vz
LCBzcmNUZXh0dXJlLCBkc3RNaXAyLCBkc3RNaXAzLCBkc3RNaXA0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXAxU2l6ZSwgbWlwMVRleGVsLCBzUiwgc0cs
IHNCLCBzQSwgb3B0aW9ucyk7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWwgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCitpbmRleCA5MDVjMTk2Li5hZDU4NjBmIDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0
eS5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJp
bGl0eS5tZXRhbAorQEAgLTYsNyArNiw3IEBACisgCisgI2luY2x1ZGUgImNvbW1vbi5oIgorIAor
LWNvbnN0YW50IGJvb2wga0NvbWJpbmVXaXRoRXhpc3RpbmdSZXN1bHQgW1tmdW5jdGlvbl9jb25z
dGFudCgxMDAwKV1dOworK2NvbnN0YW50IGJvb2wga0NvbWJpbmVXaXRoRXhpc3RpbmdSZXN1bHQg
W1tmdW5jdGlvbl9jb25zdGFudCgxKV1dOworIAorIC8vIENvbWJpbmUgdGhlIHZpc2liaWxpdHkg
cmVzdWx0IG9mIGN1cnJlbnQgcmVuZGVyIHBhc3Mgd2l0aCBwcmV2aW91cyB2YWx1ZSBmcm9tIHBy
ZXZpb3VzIHJlbmRlcgorIC8vIHBhc3MKK2RpZmYgLS1naXQgYS9zcmMvbGliR0xFU3YyL2VudHJ5
X3BvaW50c19lZ2wuY3BwIGIvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAoraW5k
ZXggNzU1YmQ2MS4uN2Q1YWM1OCAxMDA2NDQKKy0tLSBhL3NyYy9saWJHTEVTdjIvZW50cnlfcG9p
bnRzX2VnbC5jcHAKKysrKyBiL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKK0BA
IC00MjgsOCArNDI4LDYgQEAgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBFR0xfRGVzdHJveUNvbnRl
eHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4KQorIAorICAgICBpZiAoY29udGV4dFdh
c0N1cnJlbnQpCisgICAgIHsKKy0gICAgICAgIEFOR0xFX0VHTF9UUllfUkVUVVJOKHRocmVhZCwg
ZGlzcGxheS0+bWFrZUN1cnJlbnQoY29udGV4dCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciks
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsRGVzdHJveUNvbnRleHQiLCBHZXRD
b250ZXh0SWZWYWxpZChkaXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgIFNl
dENvbnRleHRDdXJyZW50KHRocmVhZCwgbnVsbHB0cik7CisgICAgIH0KKyAKK0BAIC00NjYsOCAr
NDY0LDggQEAgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBFR0xfTWFrZUN1cnJlbnQoRUdMRGlzcGxh
eSBkcHksCisgICAgIC8vIE9ubHkgY2FsbCBtYWtlQ3VycmVudCBpZiB0aGUgY29udGV4dCBvciBz
dXJmYWNlcyBoYXZlIGNoYW5nZWQuCisgICAgIGlmIChwcmV2aW91c0RyYXcgIT0gZHJhd1N1cmZh
Y2UgfHwgcHJldmlvdXNSZWFkICE9IHJlYWRTdXJmYWNlIHx8IHByZXZpb3VzQ29udGV4dCAhPSBj
b250ZXh0KQorICAgICB7CistICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTigKKy0gICAgICAg
ICAgICB0aHJlYWQsIGRpc3BsYXktPm1ha2VDdXJyZW50KHByZXZpb3VzQ29udGV4dCwgZHJhd1N1
cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKysgICAgICAgIEFOR0xFX0VHTF9UUllfUkVU
VVJOKHRocmVhZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPm1ha2VD
dXJyZW50KHRocmVhZCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZh
bGlkKGRpc3BsYXksIGNvbnRleHQpLCBFR0xfRkFMU0UpOworIAorICAgICAgICAgU2V0Q29udGV4
dEN1cnJlbnQodGhyZWFkLCBjb250ZXh0KTsKK0BAIC04MTgsOCArODE2LDggQEAgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBFR0xfUmVsZWFzZVRocmVhZCh2b2lkKQorICAgICAgICAgaWYgKHByZXZp
b3VzRHJhdyAhPSBFR0xfTk9fU1VSRkFDRSB8fCBwcmV2aW91c1JlYWQgIT0gRUdMX05PX1NVUkZB
Q0UgfHwKKyAgICAgICAgICAgICBwcmV2aW91c0NvbnRleHQgIT0gRUdMX05PX0NPTlRFWFQpCisg
ICAgICAgICB7CistICAgICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCistICAgICAgICAg
ICAgICAgIHRocmVhZCwgcHJldmlvdXNEaXNwbGF5LT5tYWtlQ3VycmVudChwcmV2aW91c0NvbnRl
eHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAorKyAgICAgICAgICAgIEFOR0xFX0VHTF9U
UllfUkVUVVJOKHRocmVhZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
aW91c0Rpc3BsYXktPm1ha2VDdXJyZW50KHRocmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVnbFJlbGVhc2VUaHJlYWQi
LCBudWxscHRyLCBFR0xfRkFMU0UpOworICAgICAgICAgfQorICAgICAgICAgQU5HTEVfRUdMX1RS
WV9SRVRVUk4odGhyZWFkLCBwcmV2aW91c0Rpc3BsYXktPnJlbGVhc2VUaHJlYWQoKSwgImVnbFJl
bGVhc2VUaHJlYWQiLAorZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9l
Z2xfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2Vn
bF9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIHNy
Yy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9lZ2xfdGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5h
bWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2VnbF9UZXN0RXhwZWN0YXRpb25zCitk
aWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMyX3Rlc3RfZXhwZWN0
YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMl9UZXN0RXhwZWN0
YXRpb25zCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFw
X3N1cHBvcnQvZGVxcF9nbGVzMl90ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMv
dGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczJfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdp
dCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfdGVzdF9leHBlY3RhdGlvbnMu
dHh0IGIvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25z
CitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBv
cnQvZGVxcF9nbGVzMzFfdGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3JjL3Rlc3Rz
L2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEv
c3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfdGVzdF9leHBlY3RhdGlv
bnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfVGVzdEV4
cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMv
ZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczMxX3JvdGF0ZV90ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3Jl
bmFtZSB0byBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczMxX3JvdGF0ZV9UZXN0RXhw
ZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMz
X3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M19UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIHNy
Yy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3Jl
bmFtZSB0byBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfVGVzdEV4cGVjdGF0aW9u
cworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM19yb3RhdGVf
dGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMz
X3JvdGF0ZV9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBm
cm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM19yb3RhdGVfdGVzdF9leHBlY3Rh
dGlvbnMudHh0CityZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzX3Jv
dGF0ZV9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2RlcXBfc3VwcG9y
dC9kZXFwX2tocl9nbGVzMl90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9z
dXBwb3J0L2RlcXBfa2hyX2dsZXMyX1Rlc3RFeHBlY3RhdGlvbnMKK3NpbWlsYXJpdHkgaW5kZXgg
MTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMl90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2Rl
cXBfa2hyX2dsZXMyX1Rlc3RFeHBlY3RhdGlvbnMKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzMV90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9zcmMvdGVz
dHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFy
aXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9r
aHJfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0cy9kZXFw
X3N1cHBvcnQvZGVxcF9raHJfZ2xlczMxX1Rlc3RFeHBlY3RhdGlvbnMKK2RpZmYgLS1naXQgYS9z
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9raHJfZ2xlczNfVGVzdEV4cGVjdGF0aW9u
cworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBw
b3J0L2RlcXBfa2hyX2dsZXMzX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90
ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9raHJfZ2xlczNfVGVzdEV4cGVjdGF0aW9ucwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgK
aW5kZXggZTEwZDExMmM4NTVlMDNmNjVjYjI0M2ZmMTZjM2Q5YjJlYzA5ZjY4MS4uNmY2YTcyYjlh
YjZkZDcyMjg3ZDgyZDZjZmIyMDgxMTIyN2Y2YTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC03Myw2ICs3Myw5
IEBAIGVudW0gU2hTaGFkZXJPdXRwdXQKICAgICAvLyBPdXRwdXQgc3BlY2lhbGl6ZWQgR0xTTCB0
byBiZSBmZWQgdG8gZ2xzbGFuZyBmb3IgVnVsa2FuIFNQSVIgdG8gYmUgY3Jvc3MgY29tcGlsZWQg
dG8gTWV0YWwKICAgICAvLyBsYXRlci4KICAgICBTSF9HTFNMX01FVEFMX09VVFBVVCA9IDB4OEI0
QywKKworICAgIC8vIE91dHB1dCBmb3IgTVNMCisgICAgU0hfTVNMX01FVEFMX09VVFBVVCA9IDB4
OEI0RCwKIH07CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaAppbmRleCBmZTVlOGFi
ZGYwNjA0MWQ2YzEzYjgwM2ZiYmZhMzg4ZDI4Y2NmNWEzLi45YTBiZWUwMzdhODlmMzFjOGQ4NTcx
YTVjMDEzMmNmN2YwOWZiMWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5oCkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVj
dCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3Vw
cG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBvdGhlciB0aGFuIG5lYXJlc3QiLCAmbWVt
YmVyc307CiAKICAgICAvLyBTdXBwb3J0IGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyCi0gICAgRmVh
dHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhhc19leHBsaWNpdF9tZW1fYmFycmllcl9t
dGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgRmVhdHVyZSBoYXNFeHBs
aWNpdE1lbUJhcnJpZXIgPSB7Imhhc19leHBsaWNpdF9tZW1fYmFycmllciIsIEZlYXR1cmVDYXRl
Z29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVyIiwgJm1lbWJl
cnN9OwogCiAgICAgLy8gU29tZSByZW5kZXJlciBjYW4gYnJlYWsgcmVuZGVyIHBhc3MgY2hlYXBs
eSwgaS5lLiBkZXNrdG9wIGNsYXNzIEdQVXMuCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBGZWF0
dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMg
bm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIgZGlzcGF0Y2gncyBncm91cCBzaXplIiwgJm1lbWJl
cnN9OwogCiAgICAgLy8gZnJhZ21lbnQgc3RlbmNpbCBvdXRwdXQgc3VwcG9ydAotICAgIEZlYXR1
cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsiaGFzX3NoYWRlcl9zdGVuY2lsX291dHB1dCIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICBGZWF0dXJlIGhhc1N0ZW5jaWxPdXRwdXQg
PSB7Imhhc19zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBz
dGVuY2lsIG91dHB1dCBmcm9tIGZyYWdtZW50IHNoYWRlciIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtZW1iZXJzfTsKIApAQCAtNTksNiArNTksMTAgQEAgc3RydWN0IEZlYXR1
cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKICAgICBGZWF0dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210
bF9ldmVudHMiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBNVEwoU2hhcmVkKUV2ZW50IiwgJm1l
bWJlcnN9OwogCisgICAgRmVhdHVyZSBhbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YSA9IHsKKyAg
ICAgICAgImFsbG93X2lubGluZV9jb25zdF92ZXJ0ZXhfZGF0YSIsIEZlYXR1cmVDYXRlZ29yeTo6
TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyB1c2luZyBpbmxp
bmUgY29uc3RhbnQgZGF0YSBmb3Igc21hbGwgY2xpZW50IHZlcnRleCBkYXRhIiwgJm1lbWJlcnN9
OworCiAgICAgLy8gT24gbWFjb3MsIHNlcGFyYXRlIGRlcHRoICYgc3RlbmNpbCBidWZmZXJzIGFy
ZSBub3Qgc3VwcHJvdGVkLiBIb3dldmVyLCBvbiBpT1MgZGV2aWNlcywKICAgICAvLyB0aGV5IGFy
ZSBzdXBwcm90ZWQ6CiAgICAgRmVhdHVyZSBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZl
cnMgPSB7CkBAIC02Nyw2ICs3MSwyMSBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0
QmFzZQogICAgICAgICAid2hlcmVhcyBvdGhlcnMgc3VjaCBhcyBtYWNPUyBkb24ndCIsCiAgICAg
ICAgICZtZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxsb3dSdW50aW1lU2FtcGxlckNvbXBhcmVN
b2RlID0geworICAgICAgICAiYWxsb3dfcnVudGltZV9zYW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZl
YXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5kZXJlciBzdXBw
b3J0cyBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBtb2RlIG91dHNpZGUgc2hhZGVycyIsICZt
ZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dTYW1wbGVyQ29tcGFyZUdyYWRpZW50ID0gewor
ICAgICAgICAiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2dyYWRpZW50IiwgRmVhdHVyZUNhdGVnb3J5
OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHNhbXBsZV9j
b21wYXJlIHdpdGggZ3JhZGllbnRzIiwgJm1lbWJlcnN9OworCisgICAgRmVhdHVyZSBhbGxvd1Nh
bXBsZXJDb21wYXJlTG9kID0geyJhbGxvd19zYW1wbGVyX2NvbXBhcmVfbG9kIiwgRmVhdHVyZUNh
dGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHNhbXBsZV9jb21wYXJlIHdpdGggbG9kIiwgJm1l
bWJlcnN9OworCisgICAgRmVhdHVyZSBhbGxvd0J1ZmZlclJlYWRXcml0ZSA9IHsiYWxsb3dfYnVm
ZmVyX3JlYWRfd3JpdGUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIGJ1ZmZl
ciByZWFkICYgd3JpdGUgaW4gdGhlIHNhbWUgc2hhZGVyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKwogICAgIEZlYXR1cmUgYWxsb3dNdWx0aXNhbXBs
ZVN0b3JlQW5kUmVzb2x2ZSA9IHsKICAgICAgICAgImFsbG93X21zYWFfc3RvcmVfYW5kX3Jlc29s
dmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICJUaGUgcmVuZGVy
ZXIgc3VwcG9ydHMgTVNBQSBzdG9yZSBhbmQgcmVzb2x2ZSBpbiB0aGUgc2FtZSBwYXNzIiwgJm1l
bWJlcnN9OwpAQCAtNzUsMTQgKzk0LDI3IEBAIHN0cnVjdCBGZWF0dXJlc010bCA6IEZlYXR1cmVT
ZXRCYXNlCiAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlwc19wZXJfcGFzcyIsIEZlYXR1cmVDYXRl
Z29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBnZW5l
cmF0aW5nIG11bHRpcGxlIG1pcG1hcHMgcGVyIHBhc3MiLCAmbWVtYmVyc307CiAKKyAgICBGZWF0
dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJmb3JjZV9kMjRzOF9hc191bnN1cHBvcnRl
ZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJGb3JjZSBEZXB0aDI0U3RlbmNpbDggZm9ybWF0IGFzIHVuc3Vw
cG9ydGVkLiIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYnJlYWtSZW5kZXJQYXNzSXNDaGVh
cCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFs
RmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCcmVha2lu
ZyByZW5kZXIgcGFzcyBpcyBhIGNoZWFwIG9wZXJhdGlvbiIsICZtZW1iZXJzfTsKKwogICAgIEZl
YXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewotICAgICAgICAiZm9yY2VfYnVmZmVyX2dw
dV9zdG9yYWdlX210bCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKLSAgICAgICAg
Ik9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGJvdGggYnVmZmVyJ3MgbWVtb3J5IGFsbG9jYXRpb24g
b24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5IChzdWNoIGFzICIKLSAgICAgICAgIm1hY09TKSwgZm9y
Y2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBidWZmZXJzLiIsCisgICAgICAgICJm
b3JjZV9idWZmZXJfZ3B1X3N0b3JhZ2UiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CisgICAgICAgICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBib3RoIGJ1ZmZlcicgbWVtb3J5IGFs
bG9jYXRpb24gb24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5IChzdWNoIGFzICIKKyAgICAgICAgIm1h
Y09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5
dGltZSBvciBub3QuIiwKICAgICAgICAgJm1lbWJlcnN9OwogCi0gICAgRmVhdHVyZSBmb3JjZUQy
NFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhfYXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZvcm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAm
bWVtYmVyc307CisgICAgRmVhdHVyZSBmb3JjZU5vbkNTQmFzZU1pcG1hcEdlbmVyYXRpb24gPSB7
CisgICAgICAgICJmb3JjZV9ub25fY3NfbWlwbWFwX2dlbiIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0
YWxGZWF0dXJlcywKKyAgICAgICAgIlR1cm4gdGhpcyBmZWF0dXJlIG9uIHRvIGRpc2FsbG93IENv
bXB1dGUgU2hhZGVyIGJhc2VkIG1pcG1hcCBnZW5lcmF0aW9uLiBDb21wdXRlIFNoYWRlciAiCisg
ICAgICAgICJiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbiBtaWdodCBjYXVzZSBHUFUgaGFuZyBvbiBz
b21lIG9sZGVyIGlPUyBkZXZpY2VzLiIsCisgICAgICAgICZtZW1iZXJzfTsKKworICAgIEZlYXR1
cmUgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrID0geworICAgICAgICAiZW11bGF0ZV90cmFuc2Zv
cm1fZmVlZGJhY2siLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJU
dXJuIHRoaXMgb24gdG8gYWxsb3cgdHJhbnNmb3JtIGZlZWRiYWNrIGluIE1ldGFsIHVzaW5nIGEg
Mi1wYXNzIFZTIGZvciBHTEVTMy4iLCAmbWVtYmVyc307CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ug
YW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9v
bEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9j
LmNwcAppbmRleCAyN2RkOTMwNWE4YjYzNGUzMzk5Mzc4MzA3OTM1ZjhhMmI5ZDc2MmJmLi4zYmRj
YzMwMGExZDZlNjc3NWMxZDI4YzIxODcyOTcwZmFlZjY5NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwCkBAIC0zMzUsNyArMzM1LDcg
QEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQogdm9pZCBBbGxvY2F0aW9uOjpjaGVja0Fs
bG9jTGlzdCgpIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBBbGxvY2F0aW9uICphbGxvYyA9IHRo
aXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1QcmV2QWxsb2MpCi0gICAgICAgIGFsbG9j
LT5jaGVjaygpOworICAgICAgICBhbGxvYy0+Y2hlY2tBbGxvYygpOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UgYW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vUG9vbEFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xB
bGxvYy5oCmluZGV4IDY5Mjk5MmM0MzQzZDhjYTAyM2JiMGU3NDNlNWI0ODlmNjNiYzFjNzguLmNk
MjY2YTAzYmM1NjIxYjg3MjI5YzVhZTdkN2RhMGI2MjlmOWI2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuaApAQCAtNjUsNyArNjUsNyBAQCBj
bGFzcyBBbGxvY2F0aW9uCiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIGNoZWNrKCkgY29uc3QK
KyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tHdWFyZEJs
b2NrKHByZUd1YXJkKCksIGtHdWFyZEJsb2NrQmVnaW5WYWwsICJiZWZvcmUiKTsKICAgICAgICAg
Y2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBrR3VhcmRCbG9ja0VuZFZhbCwgImFmdGVyIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3Bs
YXRmb3JtX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxl
X3BsYXRmb3JtX3V0aWxzLmgKaW5kZXggNTVlYmI3YThhZTU3OWIyY2ZhOGQzYzVjZjFiZTc5OGRl
NWI4MjAyZS4uODNhYjUzMjZjNTUwZGZkNmRkZGEzYmQyYjg5NGE1M2U2YmMzMzJlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91
dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYXBwbGVfcGxh
dGZvcm1fdXRpbHMuaApAQCAtMTUsMjQgKzE1LDMyIEBACiAKIC8vIFRBUkdFVF9PU19NQUNDQVRB
TFlTVCBvbmx5IGF2YWlsYWJsZSBpbiBNYWNTREsgMTAuMTUKIAorI2lmIFRBUkdFVF9PU19NQUND
QVRBTFlTVAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSTogY2hlY2sgaWYgZWl0aGVyIG9m
IHRoZSAzIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0L2lPUykgbWluIHZlcmlvbnMgaXMKIC8vIGF2
YWlsYWJsZToKLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICMgICAgZGVmaW5lIEFOR0xFX0FQ
UExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwgaU9TVmVyKSBcCiAgICAg
ICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWNDYXRhbHlzdCBtYWNDYXRhbHlzdFZlciwg
aU9TIGlPU1ZlciwgKikKIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0
aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcwogLy8g
YXZhaWxhYmxlOgogIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDKG1hY1Zlciwg
bWFjQ2F0YWx5c3RWZXIpIFwKICAgICAgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1hY0Nh
dGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0NJOiBj
aGVjayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1zIChDYXRhbHlzdC9pT1MpIG1pbiB2ZXJp
b25zIGlzCisvLyBhdmFpbGFibGU6CisjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
Q0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAgICAgICBAYXZhaWxhYmxlKG1hY0NhdGFs
eXN0IG1hY0NhdGFseXN0VmVyLCBpT1MgaU9TVmVyLCAqKQogI2Vsc2UKICMgICAgZGVmaW5lIEFO
R0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwgaU9TVmVyKSBc
CiAgICAgICAgIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1ZlcikKLS8vIEFO
R0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3Jt
cyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcwotLy8gYXZhaWxhYmxlOgorCiAjICAgIGRl
ZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFjVmVyLCBtYWNDYXRhbHlzdFZlcikgQGF2
YWlsYWJsZShtYWNPUyBtYWNWZXIsICopCisjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFC
TEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShpT1MgaU9TVmVyLCB0dk9T
IGlPU1ZlciwgKikKICNlbmRpZgogCiAvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEk6IGNoZWNr
IGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9pT1MpIG1pbiB2ZXJpb25zIGlzIGF2
YWlsYWJsZToKLSNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVy
KSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgaU9TIGlPU1ZlciwgKikKKyNkZWZpbmUgQU5HTEVf
QVBQTEVfQVZBSUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVyKSBcCisgICAgQGF2YWlsYWJsZShtYWNP
UyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAqKQorCisvLyBBTkdMRV9BUFBMRV9B
VkFJTEFCTEVfSTogY2hlY2sgaWYgYSBwYXJ0aWN1bGFyIGlPUyB2ZXJzaW9uIGlzIGF2YWlsYWJs
ZQorI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSShpT1NWZXIpIEBhdmFpbGFibGUoaU9T
IGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCmluZGV4IGUwMDM3YTRlMmNiODZiODU3MzM3Yjc1YWYzZWRm
N2U3ZTQ3M2U2MzIuLjI4MTcwYTVkNzdlNjY2NWI5NmViODNmZjZkYmNjMmJiZTM0YjA3YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKQEAgLTMxMywxMCAr
MzEzLDE2IEBAIHN0ZDo6b3N0cmVhbSAmRm10SGV4KHN0ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUp
CiAKIC8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1
cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQot
IyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGV4cHJlc3Np
b24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwg
Ilx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxF
X18gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI6IiA8PCBfX0xJTkVfXyA8
PCAiKTogIiA8PCAjZXhwcmVzc2lvbikpCisjICAgIGRlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IF9fYnVpbHRpbl9kZWJ1Z3RyYXAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGludCB4ID0g
MDsgLyogVGhpcyBmb3JjZXMgc2FuZSBicmVha3BvaW50IGxvY2F0aW9uIGF0IGNhbGwgc2l0ZS4g
Ki8gXAorICAgICAgICAgICAgKHZvaWQpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKGZhbHNlKQog
I2Vsc2UKICMgICAgZGVmaW5lIEFTU0VSVChjb25kaXRpb24pIEFOR0xFX0VBVF9TVFJFQU1fUEFS
QU1FVEVSUyA8PCAhKGNvbmRpdGlvbikKICNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9FTkFCTEVf
QVNTRVJUUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
cGxhdGZvcm0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vcGxhdGZvcm0u
aAppbmRleCA2MjZkYjQxZDkyYzE2MWUzMmYxYmNmZWFiNzU5NmY0ZWYzMGNkYWIwLi40MWYzY2Y0
ZmY3ODM5ZmQ2OGYzNDkyNmMzNTkzMjFhNjdhOTkxZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3JtLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCkBAIC0xMzIsMTEgKzEzMiwxNiBAQAogIyAg
ICBpZiBkZWZpbmVkKF9fYXJtNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKICMgICAgICAg
IGRlZmluZSBBTkdMRV9DUFVfQVJNNjQgMQogIyAgICBlbmRpZgotLy8gRUFHTCBzaG91bGQgYmUg
ZW5hYmxlZCBvbiBpT1MsIGJ1dCBub3QgTWFjIENhdGFseXN0IHVubGVzcyBpdCBpcyBydW5uaW5n
IG9uIEFwcGxlIFNpbGljb24uCisjICAgIC8vIEVBR0wgc2hvdWxkIGJlIGVuYWJsZWQgb24gaU9T
LCBidXQgbm90IE1hYyBDYXRhbHlzdCB1bmxlc3MgaXQgaXMgcnVubmluZyBvbiBBcHBsZSBTaWxp
Y29uLgogIyAgICBpZiAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwgXAogICAgICAgICAoZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQogIyAgICAg
ICAgZGVmaW5lIEFOR0xFX0VOQUJMRV9FQUdMCiAjICAgIGVuZGlmCisjICAgIC8vIElkZW50aWZ5
IE1ldGFsIEFQSSA+PSB3aGF0IHNoaXBwZWQgb24gbWFjT1MgQ2F0YWxpbmEuCisjICAgIGlmIChk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPj0gMTAxNTAwKSB8fCBcCisgICAgICAgIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAwMDApCisjICAgICAg
ICBkZWZpbmUgQU5HTEVfV0lUSF9NT0RFUk5fTUVUQUxfQVBJIDEKKyMgICAgZW5kaWYKICNlbmRp
ZgogCiAvLyBEZWZpbmUgQU5HTEVfV0lUSF9BU0FOIG1hY3JvLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEzNmJlYTQyNTEzYzJkZDI4NWNkODgyYWRiOGMwZWI2MTQ0MjQzZWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3N5c3RlbV91dGlsc19p
b3MubW0KQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDE1IFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gc3lzdGVtX3V0aWxzX2lvcy5t
bTogSW1wbGVtZW50YXRpb24gb2YgaU9TLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgT1NYCisKKyNp
bmNsdWRlICJzeXN0ZW1fdXRpbHMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVk
ZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+
CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNp
bmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK25hbWVzcGFjZSBhbmdsZQorewor
c3RkOjpzdHJpbmcgR2V0RXhlY3V0YWJsZVBhdGgoKQoreworCisgICAgTlNTdHJpbmcgKmV4ZWN1
dGFibGVTdHJpbmcgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGV4ZWN1dGFibGVQYXRoXTsKKyAg
ICBzdGQ6OnN0cmluZyByZXN1bHQoW2V4ZWN1dGFibGVTdHJpbmcgVVRGOFN0cmluZ10pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVEaXJlY3Rvcnko
KQoreworICAgIHN0ZDo6c3RyaW5nIGV4ZWN1dGFibGVQYXRoID0gR2V0RXhlY3V0YWJsZVBhdGgo
KTsKKyAgICBzaXplX3QgbGFzdFBhdGhTZXBMb2MgICAgICA9IGV4ZWN1dGFibGVQYXRoLmZpbmRf
bGFzdF9vZigiLyIpOworICAgIHJldHVybiAobGFzdFBhdGhTZXBMb2MgIT0gc3RkOjpzdHJpbmc6
Om5wb3MpID8gZXhlY3V0YWJsZVBhdGguc3Vic3RyKDAsIGxhc3RQYXRoU2VwTG9jKSA6ICIiOwor
fQorCitjb25zdCBjaGFyICpHZXRTaGFyZWRMaWJyYXJ5RXh0ZW5zaW9uKCkKK3sKKyAgICByZXR1
cm4gImR5bGliIjsKK30KKworZG91YmxlIEdldEN1cnJlbnRUaW1lKCkKK3sKKyAgICBtYWNoX3Rp
bWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8o
JnRpbWViYXNlSW5mbyk7CisKKyAgICBkb3VibGUgc2Vjb25kQ29lZmYgPSB0aW1lYmFzZUluZm8u
bnVtZXIgKiAxZS05IC8gdGltZWJhc2VJbmZvLmRlbm9tOworICAgIHJldHVybiBzZWNvbmRDb2Vm
ZiAqIG1hY2hfYWJzb2x1dGVfdGltZSgpOworfQorfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKaW5kZXgg
NjNiM2E1OWNkZjkxYjkwYTBkMDgyM2U3ZGMyZGFlMjdiNjg4NGNiMy4uZDA5ZTI3MDA4Mjk4OTdm
ZmRiMjRhZDVjYTViOGI5ZDM4NTllNWUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcApAQCAtNiwxMSArNiw2IEBACiAKIC8vIHV0aWxp
dGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVz
LgogCi0vLyBPbGRlciBjbGFuZyB2ZXJzaW9ucyBoYXZlIGEgZmFsc2UgcG9zaXRpdmUgb24gdGhp
cyB3YXJuaW5nIGhlcmUuCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3RydWN0b3JzIgotI2VuZGlmCi0KICNpbmNs
dWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR0xFUzMvZ2wzLmgiCiAjaW5jbHVk
ZSAiY29tbW9uL21hdGh1dGlsLmgiCkBAIC00NzYsNiArNDcxLDUwIEBAIGludCBWYXJpYWJsZUNv
bHVtbkNvdW50KEdMZW51bSB0eXBlKQogCiAgICAgcmV0dXJuIDA7CiB9CisvKioKK0RldGVybWlu
ZSB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZSBzbG90cyB1c2VkIGJ5IGEgdmFyaWFibGUgdHlwZQor
Ki8KK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAg
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVD
MzoKKyAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKKyAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDJ4NDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDN4NDoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDQ6CisgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDR4MzoKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KIAogYm9vbCBJ
c1NhbXBsZXJUeXBlKEdMZW51bSB0eXBlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdXRpbGl0aWVzLmgKaW5kZXggMGM3ZDgxMWE0NmVkZThjNjY3MDU3MGQzMmMy
NzM0NmJjYjExOGMxYS4uYmE2OTNhMjdhYTEzZTVhMmZjMzY0NmYzNTRhOTI1M2UyOTRiNjM5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCkBA
IC0zNyw2ICszNyw3IEBAIHNpemVfdCBWYXJpYWJsZUludGVybmFsU2l6ZShHTGVudW0gdHlwZSk7
CiBzaXplX3QgVmFyaWFibGVFeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwogaW50IFZhcmlhYmxl
Um93Q291bnQoR0xlbnVtIHR5cGUpOwogaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5
cGUpOworaW50IFZhcmlhYmxlQXR0cmlidXRlQ291bnQoR0xlbnVtIHR5cGUpOwogYm9vbCBJc1Nh
bXBsZXJUeXBlKEdMZW51bSB0eXBlKTsKIGJvb2wgSXNTYW1wbGVyQ3ViZVR5cGUoR0xlbnVtIHR5
cGUpOwogYm9vbCBJc0ltYWdlVHlwZShHTGVudW0gdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3Bw
CmluZGV4IGE0NDQ0OTk2NWMwNWFlZDljMjU0MmE0MDgxY2IwNTcxZjBhYmY1MGEuLmNhYzlmNDk5
NGI3MTlmODIxZjkwMDVkN2ZlMWQ5NjI4MDJjNmVmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3Bw
CkBAIC0yMSw4ICsyMSwxMSBAQAogI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfVlVMS0FOCiAKICNp
ZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKLSMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWwuaCIKKyMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRB
TF9TUElSVgogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCiAKQEAgLTY0
LDExICs2NywxNyBAQCBUQ29tcGlsZXIgKkNvbnN0cnVjdENvbXBpbGVyKHNoOjpHTGVudW0gdHlw
ZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0CiAgICAgfQogI2VuZGlmICAvLyBB
TkdMRV9FTkFCTEVfVlVMS0FOCiAKLSNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKyNpZmRlZiBB
TkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKICAgICBpZiAoSXNPdXRwdXRNZXRhbChvdXRwdXQpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yTWV0YWwodHlwZSwgc3BlYyk7CiAg
ICAgfQorI2VuZGlmCisjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgaWYgKElzT3V0cHV0
TWV0YWxEaXJlY3Qob3V0cHV0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRv
ck1ldGFsRGlyZWN0KHR5cGUsIHNwZWMsIG91dHB1dCk7CisgICAgfQogI2VuZGlmICAvLyBBTkdM
RV9FTkFCTEVfTUVUQUwKIAogICAgIC8vIFVuc3VwcG9ydGVkIGNvbXBpbGVyIG9yIHVua25vd24g
Zm9ybWF0LiBSZXR1cm4gbnVsbHB0ciBwZXIgdGhlIHNoOjpDb25zdHJ1Y3RDb21waWxlciBBUEku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbW1vbi5oCmluZGV4IDgzNWM5MGEzNTcyYzEzNTgyYWY1MjRhZjk2OWRhYWUxMGM5
ZTE4MGYuLjFjMDljZGFhODIxMmMzZTE3NzgwMzkwOGY0N2ZhNDAyZmM2OTM3MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1v
bi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbW1vbi5oCkBAIC0zMSw2ICszMSw4IEBAIHN0cnVjdCBUU291cmNlTG9jCiAgICAgaW50IGxh
c3RfbGluZTsKIH07CiAKK2NvbnN0ZXhwciBUU291cmNlTG9jIGtOb1NvdXJjZUxvY3stMSwgLTEs
IC0xLCAtMX07CisKIC8vCiAvLyBQdXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSBpbiBiYXNl
IGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVtZS4KIC8vCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5jcHAKaW5kZXggMzRkOGUxMjFiNmI3YzRhOWYwMTA0YmJjN2RkZWU0ODA2ZTQ0ZjI4Mi4u
OTMxNmUyZTUxYTdlNjcyMDgyZDUwMzEwODMyOGYwYzUxYmY0YTYyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmNwcApAQCAtNzIyLDkgKzcyMiw5IEBAIGJvb2wgVENvbXBpbGVyOjpjaGVja0FuZFNp
bXBsaWZ5QVNUKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgfQogICAgIH0KIAotICAgIGlu
dCBzaW1wbGlmeVNjYWxhcml6ZWQgPSAoY29tcGlsZU9wdGlvbnMgJiBTSF9TQ0FMQVJJWkVfVkVD
X0FORF9NQVRfQ09OU1RSVUNUT1JfQVJHUykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjprU2NhbGFyaXplZFZlY09yTWF0Q29uc3Ry
dWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICB1bnNpZ25l
ZCBpbnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpF
X1ZFQ19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRW
ZWNPck1hdENvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IDA7CiAKICAgICAvLyBTcGxpdCBtdWx0aSBkZWNsYXJhdGlvbnMgYW5kIHJlbW92ZSBj
YWxscyB0byBhcnJheSBsZW5ndGgoKS4KICAgICAvLyBOb3RlIHRoYXQgU2ltcGxpZnlMb29wQ29u
ZGl0aW9ucyBuZWVkcyB0byBiZSBydW4gYmVmb3JlIGFueSBvdGhlciBBU1QgdHJhbnNmb3JtYXRp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQ29tcGlsZXIuaAppbmRleCBkMGIyNGJhYTNlNzc2NTkzN2EyNDE3Y2QzOWRk
YWU1MjA4OTg2OWQwLi4wNDNkZGQ1YWRjY2U4MWQwMzk1MGM0YjQzMWZjMDY2MDU5NmExNjliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21waWxlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvbXBpbGVyLmgKQEAgLTM1LDYgKzM1LDkgQEAgY2xhc3MgVFBhcnNlQ29udGV4
dDsKICNpZmRlZiBBTkdMRV9FTkFCTEVfSExTTAogY2xhc3MgVHJhbnNsYXRvckhMU0w7CiAjZW5k
aWYgIC8vIEFOR0xFX0VOQUJMRV9ITFNMCisjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCitjbGFz
cyBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q7CisjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAog
CiAvLwogLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzaGFkZXIgdHlwZSBpcyBH
TFNMLgpAQCAtNjMsNiArNjYsOSBAQCBjbGFzcyBUU2hIYW5kbGVCYXNlCiAjaWZkZWYgQU5HTEVf
RU5BQkxFX0hMU0wKICAgICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNMICpnZXRBc1RyYW5zbGF0b3JI
TFNMKCkgeyByZXR1cm4gMDsgfQogI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVm
IEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIHZpcnR1YWwgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpn
ZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZiAg
Ly8gQU5HTEVfRU5BQkxFX01FVEFMCiAKICAgcHJvdGVjdGVkOgogICAgIC8vIE1lbW9yeSBhbGxv
Y2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1aXJlZCBieSB0aGUgY29tcGls
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db25zdGFudFVuaW9uLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCmluZGV4IDAzMzUxNzE1MDFmNjZh
N2NlYTA2YTc1ZjcxZGRmMmEwNTE0N2IyNDYuLjEwNGFmZmJhZWI3M2UxNmE4OGQ2MGRkZDIyNDE0
MzhjNzMxMzliMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCkBAIC02Nywx
MSArNjcsMTUgQEAgYm9vbCBJc1ZhbGlkU2hpZnRPZmZzZXQoY29uc3QgVENvbnN0YW50VW5pb24g
JnJocykKIAogfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1UQ29uc3RhbnRVbmlvbjo6VENv
bnN0YW50VW5pb24oKQotewotICAgIGlDb25zdCA9IDA7Ci0gICAgdHlwZSAgID0gRWJ0Vm9pZDsK
LX0KK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbigpIDogaUNvbnN0KDApLCB0eXBlKEVi
dFZvaWQpIHt9CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihpbnQgaSkgOiBpQ29u
c3QoaSksIHR5cGUoRWJ0SW50KSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24o
dW5zaWduZWQgaW50IHUpIDogdUNvbnN0KHUpLCB0eXBlKEVidFVJbnQpIHt9CisKK1RDb25zdGFu
dFVuaW9uOjpUQ29uc3RhbnRVbmlvbihmbG9hdCBmKSA6IGZDb25zdChmKSwgdHlwZShFYnRGbG9h
dCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9uKGJvb2wgYikgOiBiQ29uc3Qo
YiksIHR5cGUoRWJ0Qm9vbCkge30KIAogaW50IFRDb25zdGFudFVuaW9uOjpnZXRJQ29uc3QoKSBj
b25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCmluZGV4IGE2MjNkNjVmYjFkNTQ1
N2EyOWQ3ODJlM2QxM2IwODE4NDhiMmIwYWQuLmRmNTM4NTdkZDNiZjRiNDhmYmFiNjVlYjRmZWIx
ZTA0NTg2MTM3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKQEAgLTIwLDYgKzIw
LDEwIEBAIGNsYXNzIFRDb25zdGFudFVuaW9uCiAgIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFCiAgICAgVENvbnN0YW50VW5pb24oKTsKKyAgICBUQ29uc3RhbnRVbmlvbihp
bnQgaSk7CisgICAgVENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpOworICAgIFRDb25zdGFu
dFVuaW9uKGZsb2F0IGYpOworICAgIFRDb25zdGFudFVuaW9uKGJvb2wgYik7CiAKICAgICBib29s
IGNhc3QoVEJhc2ljVHlwZSBuZXdUeXBlLCBjb25zdCBUQ29uc3RhbnRVbmlvbiAmY29uc3RhbnQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9JbnRlcm1Ob2RlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuY3BwCmluZGV4IGJiZGY4NjYzYjA3MDEwZWU2MDQx
ZWUwOTM4OWM5OTFjNmYxNTQwNDUuLjUxMzZkMjA2OGY3NTQxN2RhMWExOWZjM2MxOTYwYTUyNzM4
YTdjM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybU5vZGUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuY3BwCkBAIC00MSw3ICs0MSw3IEBAIFRQ
cmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiBy
aWdodCkKIFRDb25zdGFudFVuaW9uICpWZWN0b3JpemUoY29uc3QgVENvbnN0YW50VW5pb24gJmNv
bnN0YW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbiA9
IG5ldyBUQ29uc3RhbnRVbmlvbltzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHNpemU7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAg
ICAgICAgY29uc3RVbmlvbltpXSA9IGNvbnN0YW50OwogCiAgICAgcmV0dXJuIGNvbnN0VW5pb247
CkBAIC00MTUsNiArNDE1LDE0IEBAIFRJbnRlcm1CbG9jazo6VEludGVybUJsb2NrKGNvbnN0IFRJ
bnRlcm1CbG9jayAmbm9kZSkKICAgICB9CiB9CiAKK1RJbnRlcm1CbG9jazo6VEludGVybUJsb2Nr
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtTm9kZSAqPiBzdG10cykKK3sKKyAgICBmb3Ig
KFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMpCisgICAgeworICAgICAgICBhcHBlbmRTdGF0ZW1l
bnQoc3RtdCk7CisgICAgfQorfQorCiBzaXplX3QgVEludGVybUJsb2NrOjpnZXRDaGlsZENvdW50
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN0YXRlbWVudHMuc2l6ZSgpOwpAQCAtNDQ2LDYgKzQ1
NCwzNyBAQCBib29sIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZTo6cmVwbGFjZUNoaWxkTm9kZShU
SW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1ObwogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
VEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24oY29uc3QgVFZhcmlhYmxlICp2
YXIsIFRJbnRlcm1UeXBlZCAqaW5pdEV4cHIpCit7CisgICAgaWYgKGluaXRFeHByKQorICAgIHsK
KyAgICAgICAgYXBwZW5kRGVjbGFyYXRvcigKKyAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSwgbmV3IFRJbnRlcm1TeW1ib2wodmFyKSwgaW5pdEV4
cHIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXBwZW5kRGVjbGFyYXRvcihu
ZXcgVEludGVybVN5bWJvbCh2YXIpKTsKKyAgICB9Cit9CisKK1RJbnRlcm1EZWNsYXJhdGlvbjo6
VEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBUVmFyaWFibGUg
Kj4gZGVjbGFyYXRvcnMpCisgICAgOiBUSW50ZXJtRGVjbGFyYXRpb24oKQoreworICAgIGZvciAo
YXV0byAqZCA6IGRlY2xhcmF0b3JzKQorICAgIHsKKyAgICAgICAgYXBwZW5kRGVjbGFyYXRvcihu
ZXcgVEludGVybVN5bWJvbChkKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246OlRJ
bnRlcm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybVR5cGVkICo+IGRl
Y2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8g
KmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IoZCk7Cisg
ICAgfQorfQorCiBzaXplX3QgVEludGVybURlY2xhcmF0aW9uOjpnZXRDaGlsZENvdW50KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbURlY2xhcmF0b3JzLnNpemUoKTsKQEAgLTQ2Myw5ICs1MDIsMTAg
QEAgYm9vbCBUSW50ZXJtRGVjbGFyYXRpb246OnJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUg
Km9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmUKIAogYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6
cmVwbGFjZUNoaWxkTm9kZUludGVybmFsKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5v
ZGUgKnJlcGxhY2VtZW50KQogewotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBnZXRTZXF1
ZW5jZSgpLT5zaXplKCk7ICsraWkpCisgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7Cisg
ICAgZm9yIChhdXRvICombm9kZSA6IHNlcSkKICAgICB7Ci0gICAgICAgIFJFUExBQ0VfSUZfSVMo
KCpnZXRTZXF1ZW5jZSgpKVtpaV0sIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQp
OworICAgICAgICBSRVBMQUNFX0lGX0lTKG5vZGUsIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVw
bGFjZW1lbnQpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00NzMsMTIgKzUxMywx
MyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwo
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZQogYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6
cmVwbGFjZUNoaWxkTm9kZVdpdGhNdWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSAmcmVwbGFjZW1lbnRzKQogewotICAgIGZvciAoYXV0byBpdCA9IGdl
dFNlcXVlbmNlKCktPmJlZ2luKCk7IGl0IDwgZ2V0U2VxdWVuY2UoKS0+ZW5kKCk7ICsraXQpCisg
ICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisgICAgZm9yIChhdXRvIGl0ID0gc2VxLmJl
Z2luKCk7IGl0IDwgc2VxLmVuZCgpOyArK2l0KQogICAgIHsKICAgICAgICAgaWYgKCppdCA9PSBv
cmlnaW5hbCkKICAgICAgICAgewotICAgICAgICAgICAgaXQgPSBnZXRTZXF1ZW5jZSgpLT5lcmFz
ZShpdCk7Ci0gICAgICAgICAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIHJlcGxhY2VtZW50
cy5iZWdpbigpLCByZXBsYWNlbWVudHMuZW5kKCkpOworICAgICAgICAgICAgaXQgPSBzZXEuZXJh
c2UoaXQpOworICAgICAgICAgICAgc2VxLmluc2VydChpdCwgcmVwbGFjZW1lbnRzLmJlZ2luKCks
IHJlcGxhY2VtZW50cy5lbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTQ4OCwxMiArNTI5LDEzIEBAIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogYm9v
bCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2RlcyhUSW50ZXJtU2VxdWVuY2U6
OnNpemVfdHlwZSBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlICZpbnNlcnRpb25zKQogewotICAgIGlmIChw
b3NpdGlvbiA+IGdldFNlcXVlbmNlKCktPnNpemUoKSkKKyAgICBhdXRvICZzZXEgPSAqZ2V0U2Vx
dWVuY2UoKTsKKyAgICBpZiAocG9zaXRpb24gPiBzZXEuc2l6ZSgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBhdXRvIGl0ID0gZ2V0U2VxdWVuY2UoKS0+YmVnaW4o
KSArIHBvc2l0aW9uOwotICAgIGdldFNlcXVlbmNlKCktPmluc2VydChpdCwgaW5zZXJ0aW9ucy5i
ZWdpbigpLCBpbnNlcnRpb25zLmVuZCgpKTsKKyAgICBhdXRvIGl0ID0gc2VxLmJlZ2luKCkgKyBw
b3NpdGlvbjsKKyAgICBzZXEuaW5zZXJ0KGl0LCBpbnNlcnRpb25zLmJlZ2luKCksIGluc2VydGlv
bnMuZW5kKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDQwLDggKzEwODIsOCBAQCBU
SW50ZXJtQWdncmVnYXRlOjpUSW50ZXJtQWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUg
Jm5vZGUpCiAKIFRJbnRlcm1BZ2dyZWdhdGUgKlRJbnRlcm1BZ2dyZWdhdGU6OnNoYWxsb3dDb3B5
KCkgY29uc3QKIHsKLSAgICBUSW50ZXJtU2VxdWVuY2UgKmNvcHlTZXEgPSBuZXcgVEludGVybVNl
cXVlbmNlKCk7Ci0gICAgY29weVNlcS0+aW5zZXJ0KGNvcHlTZXEtPmJlZ2luKCksIGdldFNlcXVl
bmNlKCktPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmVuZCgpKTsKKyAgICBhdXRvICZzZXEgICAg
ICAgICAgICAgICAgICA9ICpnZXRTZXF1ZW5jZSgpOworICAgIFRJbnRlcm1TZXF1ZW5jZSAqY29w
eVNlcSAgID0gbmV3IFRJbnRlcm1TZXF1ZW5jZShzZXEuYmVnaW4oKSwgc2VxLmVuZCgpKTsKICAg
ICBUSW50ZXJtQWdncmVnYXRlICpjb3B5Tm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKG1GdW5j
dGlvbiwgbVR5cGUsIG1PcCwgY29weVNlcSk7CiAgICAgY29weU5vZGUtPnNldExpbmUobUxpbmUp
OwogICAgIHJldHVybiBjb3B5Tm9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAppbmRleCAzNjQz
ODQ3ZjY4YWFlYTY1MGJkZWJmMjZmM2RkN2QyODcyYjQwMWEwLi4zYjZmODcyYzIzZmY2NWQ2YTI0
YWFlZWEzNDI2ZWVmZTVjZTFhOGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCkBAIC02NzQs
NiArNjc0LDcgQEAgY2xhc3MgVEludGVybUJsb2NrIDogcHVibGljIFRJbnRlcm1Ob2RlLCBwdWJs
aWMgVEludGVybUFnZ3JlZ2F0ZUJhc2UKIHsKICAgcHVibGljOgogICAgIFRJbnRlcm1CbG9jaygp
IDogVEludGVybU5vZGUoKSB7fQorICAgIFRJbnRlcm1CbG9jayhzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VEludGVybU5vZGUgKj4gc3RtdHMpOwogICAgIH5USW50ZXJtQmxvY2soKSBvdmVycmlkZSB7
fQogCiAgICAgVEludGVybUJsb2NrICpnZXRBc0Jsb2NrKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhp
czsgfQpAQCAtNzc2LDYgKzc3Nyw5IEBAIGNsYXNzIFRJbnRlcm1EZWNsYXJhdGlvbiA6IHB1Ymxp
YyBUSW50ZXJtTm9kZSwgcHVibGljIFRJbnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoK
ICAgICBUSW50ZXJtRGVjbGFyYXRpb24oKSA6IFRJbnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJt
RGVjbGFyYXRpb24oY29uc3QgVFZhcmlhYmxlICp2YXIsIFRJbnRlcm1UeXBlZCAqaW5pdEV4cHIp
OworICAgIFRJbnRlcm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZh
cmlhYmxlICo+IGRlY2xhcmF0b3JzKTsKKyAgICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0
aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBkZWNsYXJhdG9ycyk7CiAgICAgflRJbnRlcm1E
ZWNsYXJhdGlvbigpIG92ZXJyaWRlIHt9CiAKICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmdldEFz
RGVjbGFyYXRpb25Ob2RlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5jcHAKaW5kZXggZDAzODlhZjQzZjVmMWExNGYyNGNlNWYzYWY5ZGE5NmZiOGI3YjhhYy4uZmUy
ZTE5YjkxNDA3MzgyY2E2YTY4MDhiYzNmNmZlYjk5NWZlZTVhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wu
Y3BwCkBAIC0xOTYsNyArMTk2LDggQEAgdm9pZCBURnVuY3Rpb246OnNoYXJlUGFyYW1ldGVycyhj
b25zdCBURnVuY3Rpb24gJnBhcmFtZXRlcnNTb3VyY2UpCiAKIEltbXV0YWJsZVN0cmluZyBURnVu
Y3Rpb246OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogewotICAgIHN0ZDo6c3RyaW5nIG5ld05h
bWUobmFtZSgpLmRhdGEoKSwgbmFtZSgpLmxlbmd0aCgpKTsKKyAgICBJbW11dGFibGVTdHJpbmcg
bmFtZSA9IHRoaXMtPm5hbWUoKTsKKyAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5hbWUuZGF0YSgp
LCBuYW1lLmxlbmd0aCgpKTsKICAgICBuZXdOYW1lICs9IGtGdW5jdGlvbk1hbmdsZWROYW1lU2Vw
YXJhdG9yOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDB1OyBpIDwgbVBhcmFtQ291bnQ7ICsraSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU3ltYm9sLmgKaW5kZXggYjljZjkwODk0ZTZlOGUzYWIyYzYyNmIzNTk0MTZjMzZhOTZm
YzQyZi4uMGFiYjFkNDExMDEzMzI5OGRlYTJiYmQzYjIwZTAwMTQyZmVlODUyMyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sLmgKQEAgLTIyMiw3ICsyMjIsNyBAQCBjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5
bWJvbAogICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7IHJldHVybiBtT3A7IH0K
IAogICAgIHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7IH0KLSAgICBib29sIGlz
RGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKyAgICBib29sIGlzRGVmaW5lZCgpIGNvbnN0
IHsgcmV0dXJuIGRlZmluZWQ7IH0KICAgICB2b2lkIHNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCkgeyBtSGFzUHJvdG90eXBlRGVjbGFyYXRpb24gPSB0cnVlOyB9CiAgICAgYm9vbCBoYXNQcm90
b3R5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1IYXNQcm90b3R5cGVEZWNsYXJhdGlv
bjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2Vu
LmNwcAppbmRleCA3ZTg0NThlYzk5OWExMDJmYmJlN2FhYTg3MTJjM2ExMDYzYWViZDFjLi5lOWQx
YjczMmU0NTlkYTNiMThiMzgzMzU3NjQ0OWM0OTgxNmY1ZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZV9FU1NM
X2F1dG9nZW4uY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHAKQEAgLTM1NjgsNyArMzU2OCw3
IEBAIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAxMEYxMEYxMEZbM10gPSB7JkJ1aWx0SW5W
YXJpYWJsZTo6a3B0MTBGLCAmQnVpbHRJblZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZCdWlsdEluVmFyaWFibGU6OmtwdDEwRn07CiBjb25zdGV4cHIgY29u
c3QgVFZhcmlhYmxlICpwMjBCMDBCMDBCWzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwg
JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0
IFRWYXJpYWJsZSAqcDIwQjAwRFsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZC
dWlsdEluVmFyaWFibGU6OmtwdDAwRH07Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBC
MDBEWzJdICAgICAgID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJs
ZTo6a3B0MDBEfTsKIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAyMEIwMEhbMl0gICAgPSB7
JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQwMEh9OwogY29u
c3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIwQjEwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxl
OjprcHQyMEIsICZCdWlsdEluVmFyaWFibGU6OmtwdDEwQn07CiBjb25zdGV4cHIgY29uc3QgVFZh
cmlhYmxlICpwMjBCMjBCMDBCWzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0
SW5WYXJpYWJsZTo6a3B0MjBCLApAQCAtMzYwOSw3ICszNjA5LDcgQEAgY29uc3RleHByIGNvbnN0
IFRWYXJpYWJsZSAqcDIwRjIwRjIwRlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEYsICZC
dWlsdEluVmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1
aWx0SW5WYXJpYWJsZTo6a3B0MjBGfTsKIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIw
MEIwMEJbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjpr
cHQwMEIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWls
dEluVmFyaWFibGU6OmtwdDAwQn07Ci1jb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBE
WzJdICAgID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0
MDBEfTsKK2NvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIwMERbMl0gICAgICAgPSB7JkJ1
aWx0SW5WYXJpYWJsZTo6a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQwMER9OwogY29uc3Rl
eHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjEwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjpr
cHQzMEIsICZCdWlsdEluVmFyaWFibGU6OmtwdDEwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlh
YmxlICpwMzBCMjBCWzJdICAgID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5W
YXJpYWJsZTo6a3B0MjBCfTsKIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIzMEIwMEJb
M10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAppbmRleCBhMWZjZjhjOWYxNTVl
MWNkZGM3ODk2ZDhiOTQxNzM2YTM5NmE4NGU2Li5lYTU2NmIxNTM2YjBjZjI1NWFhMTkyMmU1MThh
OTYzZTBlYjI2YzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKQEAg
LTQxLDggKzQxLDE0IEBAIGNvbnN0IGNoYXIga1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZENvbnN0
TmFtZVtdID0gIkFOR0xFUmFzdGVyaXplckRpc2FibGVkIjsKIG5hbWVzcGFjZQogewogCitjb25z
dGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5h
bWUgPQorICAgIEltbXV0YWJsZVN0cmluZygiQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQiKTsK
K2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0NvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUg
PQorICAgIEltbXV0YWJsZVN0cmluZygiQU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIik7CiBjb25z
dGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tGaWVsZCAgICAgICA9IEltbXV0YWJs
ZVN0cmluZygiY292ZXJhZ2VNYXNrIik7Citjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtFbXVJ
bnN0YW5jZUlERmllbGQgICAgICA9IEltbXV0YWJsZVN0cmluZygiZW11bGF0ZWRJbnN0YW5jZUlE
Iik7CiBjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSA9
IEltbXV0YWJsZVN0cmluZygiQU5HTEVXcml0ZVNhbXBsZU1hc2siKTsKK2NvbnN0ZXhwciBJbW11
dGFibGVTdHJpbmcga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUgID0gSW1tdXRhYmxlU3RyaW5nKCJB
TkdMRURpc2NhcmRXcmFwcGVyIik7CiAKIFRJbnRlcm1CaW5hcnkgKkNyZWF0ZURyaXZlclVuaWZv
cm1SZWYoY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcywgY29uc3QgY2hhciAqZmllbGRO
YW1lKQogewpAQCAtODYsNiArOTIsMjEgQEAgQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFZl
cnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVyICpjb20KICAgICBy
ZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcihjb21waWxlciwgcm9vdCwgYXNzaWdubWVudCwgc3lt
Ym9sVGFibGUpOwogfQogCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW11bGF0ZUluc3RhbmNlSUQo
VENvbXBpbGVyICpjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKmRyaXZlclVuaWZvcm1zKQorewor
ICAgIC8vIGVtdUluc3RhbmNlSUQKKyAgICBUSW50ZXJtQmluYXJ5ICplbXVJbnN0YW5jZUlEID0K
KyAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0VtdUluc3Rh
bmNlSURGaWVsZC5kYXRhKCkpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVyZW5jZSB0
byAiZ2xfSW5zdGFuY2VJbmRleCIKKyAgICBjb25zdCBUVmFyaWFibGUgKmluc3RhbmNlSUQgPSBC
dWlsdEluVmFyaWFibGU6OmdsX0luc3RhbmNlSW5kZXgoKTsKKworICAgIHJldHVybiBSZXBsYWNl
VmFyaWFibGVXaXRoVHlwZWQoY29tcGlsZXIsIHJvb3QsIGluc3RhbmNlSUQsIGVtdUluc3RhbmNl
SUQpOworfQorCiAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMuCiBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgSW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUsCkBAIC0xMjMsNiArMTQ0LDE4IEBAIEFOR0xFX05PX0RJU0NBUkQg
Ym9vbCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgKnJvb3QsCiAKIH0gIC8v
IGFub255bW91cyBuYW1lc3BhY2UKIAorLyoqIHN0YXRpYyAqLworY29uc3QgY2hhciAqVHJhbnNs
YXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICByZXR1
cm4ga0NvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUuZGF0YSgpOworfQorCisvKiogc3RhdGlj
ICovCitjb25zdCBjaGFyICpUcmFuc2xhdG9yTWV0YWw6OkdldFJhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0dXJuIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUuZGF0YSgpOworfQorCiBUcmFuc2xhdG9yTWV0YWw6OlRyYW5zbGF0b3JN
ZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKSA6IFRyYW5zbGF0b3JWdWxr
YW4odHlwZSwgc3BlYykKIHt9CiAKQEAgLTE1MywyMCArMTg2LDU4IEBAIGJvb2wgVHJhbnNsYXRv
ck1ldGFsOjp0cmFuc2xhdGUoVEludGVybUJsb2NrICpyb290LAogICAgIHsKICAgICAgICAgYXV0
byBuZWdGbGlwWSA9IGdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZihkcml2ZXJVbmlmb3Jtcyk7
CiAKKyAgICAgICAgaWYgKG1FbXVsYXRlZEluc3RhbmNlSUQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAorICAgICAgICAgICAgaWYgKCFFbXVsYXRlSW5z
dGFuY2VJRCh0aGlzLCByb290LCAmZ2V0U3ltYm9sVGFibGUoKSwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCiAgICAgICAgIC8vIEFwcGVuZCBnbF9Qb3NpdGlvbi55IGNvcnJlY3Rp
b24gdG8gbWFpbgogICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJl
Y3Rpb25Ub01haW4odGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIG5lZ0ZsaXBZKSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
Ly8gSW5zZXJ0IHJhc3Rlcml6ZXIgZGlzY2FyZCBsb2dpYwotICAgICAgICBpZiAoIWluc2VydFJh
c3Rlcml6ZXJEaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIC8vIEluc2VydCByYXN0ZXJpemF0
aW9uIGRpc2NhcmQgbG9naWMKKyAgICAgICAgaWYgKCFpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZExvZ2ljKHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMg
dG8gYXZvaWQgc3BpcnYtY3Jvc3MgZGVhZC1jb2RlIHJlbW92aW5nIHRoZW0gaW4gbGF0ZXIKKyAg
ICAvLyBzdGFnZS4gT25seSBkbyB0aGlzIGlmIFNIX0lOSVRfT1VUUFVUX1ZBUklBQkxFUyBpcyBu
b3Qgc3BlY2lmaWVkLgorICAgIGlmICgoZ2V0U2hhZGVyVHlwZSgpID09IEdMX1ZFUlRFWF9TSEFE
RVIgfHwgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0dFT01FVFJZX1NIQURFUl9FWFQpICYmCisgICAg
ICAgICEoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMpKQorICAgIHsK
KyAgICAgICAgSW5pdFZhcmlhYmxlTGlzdCBsaXN0OworICAgICAgICBmb3IgKGNvbnN0IHNoOjpT
aGFkZXJWYXJpYWJsZSAmdmFyIDogbU91dHB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIXZhci5hY3RpdmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGlz
dC5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghSW5pdGlhbGl6ZVVudXNlZE91dHB1dHMocm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGxpc3Qp
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CiAgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAg
ICB7CisgICAgICAgIC8vIEZvciBub24gdm9pZCBNU0wgZnJhZ21lbnQgZnVuY3Rpb25zIHJlcGxh
Y2UgZGlzY2FyZAorICAgICAgICAvLyB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKQorICAgICAg
ICBpZiAobU91dHB1dFZhcmlhYmxlcy5zaXplKCkgPiAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIXJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMocm9vdCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgICAgIGlmICghaW5zZXJ0U2FtcGxlTWFza1dyaXRpbmdMb2dpYyhyb290LCBkcml2ZXJVbmlm
b3JtcykpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzNSw2ICsz
MDYsMTMgQEAgdm9pZCBUcmFuc2xhdG9yTWV0YWw6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0Ry
aXZlclVuaWZvcm1GaWVsZHMoc3RkOjp2ZWN0b3I8VEYKICAgICBURmllbGQgKmNvdmVyYWdlTWFz
a0ZpZWxkID0KICAgICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0VUludCksIGtDb3ZlcmFn
ZU1hc2tGaWVsZCwgVFNvdXJjZUxvYygpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKICAg
ICBmaWVsZHNPdXQtPnB1c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisKKyAgICBpZiAobUVt
dWxhdGVkSW5zdGFuY2VJRCkKKyAgICB7CisgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZp
ZWxkID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTb3VyY2VM
b2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGZpZWxkc091dC0+cHVz
aF9iYWNrKGVtdUluc3RhbmNlSURGaWVsZCk7CisgICAgfQogfQogCiAvLyBBZGQgc2FtcGxlX21h
c2sgd3JpdGluZyB0byBtYWluLCBndWFyZGVkIGJ5IHRoZSBzcGVjaWFsaXphdGlvbiBjb25zdGFu
dApAQCAtMjkzLDI0ICszNzEsMjQgQEAgQU5HTEVfTk9fRElTQ0FSRCBib29sIFRyYW5zbGF0b3JN
ZXRhbDo6aW5zZXJ0U2FtcGxlTWFza1dyaXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sKICAgICByZXR1
cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCByb290LCBpZkNhbGwsIHN5bWJvbFRhYmxlKTsK
IH0KIAotQU5HTEVfTk9fRElTQ0FSRCBib29sIFRyYW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVy
aXplckRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpCitBTkdMRV9OT19ESVNDQVJEIGJv
b2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRl
cm1CbG9jayAqcm9vdCkKIHsKICAgICBUSW5mb1NpbmtCYXNlICZzaW5rICAgICAgID0gZ2V0SW5m
b1NpbmsoKS5vYmo7CiAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xU
YWJsZSgpOwogCiAgICAgLy8gSW5zZXJ0IHJhc3Rlcml6YXRpb25EaXNhYmxlZCBzcGVjaWFsaXph
dGlvbiBjb25zdGFudC4KLSAgICBzaW5rIDw8ICJsYXlvdXQgKGNvbnN0YW50X2lkPTApIGNvbnN0
IGJvb2wgIiA8PCBtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisgICAg
c2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25zdCBib29sICIgPDwga1Jhc3Rlcml6
YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZTsKICAgICBzaW5rIDw8ICIgPSBmYWxzZTtcbiI7
CiAKLSAgICAvLyBDcmVhdGUga1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZENvbnN0TmFtZSB2YXJp
YWJsZSByZWZlcmVuY2UuCisgICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUgYW5kIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEZ1bmNOYW1lIHZhcmlhYmxlCisg
ICAgLy8gcmVmZXJlbmNlcy4KICAgICBUVHlwZSAqYm9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9v
bCk7CiAgICAgYm9vbFR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgVFZhcmlhYmxl
ICpkaXNjYXJkRW5hYmxlZFZhciA9Ci0gICAgICAgIG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUs
IEltbXV0YWJsZVN0cmluZyhtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUp
LAotICAgICAgICAgICAgICAgICAgICAgIGJvb2xUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKyAgICBUVmFyaWFibGUgKmRpc2NhcmRFbmFibGVkVmFyID0gbmV3IFRWYXJpYWJsZShz
eW1ib2xUYWJsZSwga1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3lt
Ym9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAKICAgICAvLyBJbnNlcnQgdGhpcyBjb2RlIHRvIHRo
ZSBlbmQgb2YgbWFpbigpCi0gICAgLy8gaWYgKEFOR0xFUmFzdGVyaXplckRpc2FibGVkKQorICAg
IC8vIGlmIChBTkdMRVJhc3Rlcml6YXRpb25EaXNhYmxlZCkKICAgICAvLyB7CiAgICAgLy8gICAg
ICBnbF9Qb3NpdGlvbiA9IHZlYzQoLTMuMCwgLTMuMCwgLTMuMCwgMS4wKTsKICAgICAvLyB9CkBA
IC0zNDEsNCArNDE5LDc5IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
Omluc2VydFJhc3Rlcml6ZXJEaXNjYXJkTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0dXJuIFJ1
bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7CiB9CiAK
Ky8vIElmIHRoZSBNU0wgZnJhZ21lbnQgc2hhZGVyIGlzIG5vbi12b2lkLCB3ZSBuZWVkIHRvIGVu
c3VyZQorLy8gdGhhdCB0aGVyZSBpcyBhIHJldHVybiBhdCB0aGUgZW5kLiBUaGUgTVNMIGNvbXBp
bGVyCisvLyB3aWxsIGVycm9yIG91dCBpZiB0aGVyZSdzIG5vIHJldHVybiBhdCB0aGUgZW5kLCBl
dmVuIGlmIGFsbAorLy8gcGF0aHMgbGVhZCB0byBkaXNjYXJkX2ZyYWdtZW50KCkuIFNvIHdyYXAg
ZGlzY2FyZCBpbiBhIHdyYXBwZXIgZnVuY3Rpb24uCisvLyBGaXhlcyBkRVFQLUdMRVMzLmZ1bmN0
aW9uYWwuc2hhZGVycy5kaXNjYXJkLmJhc2ljX2Fsd2F5cworQU5HTEVfTk9fRElTQ0FSRCBib29s
IFRyYW5zbGF0b3JNZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyhUSW50ZXJtQmxvY2sg
KnJvb3QpCit7CisgICAgLy8gYmVmb3JlCisgICAgLy8gdm9pZCBtYWluICh2b2lkKQorICAgIC8v
IHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAgLy8gICAgIGRpc2NhcmQ7Cisg
ICAgLy8gfQorCisgICAgLy8gYWZ0ZXIKKyAgICAvLyB2b2lkIEFOR0xFRGlzY2FyZFdyYXBwZXIo
KQorICAgIC8vIHsKKyAgICAvLyAgICBkaXNjYXJkOworICAgIC8vIH0KKyAgICAvLyB2b2lkIG1h
aW4gKHZvaWQpCisgICAgLy8geworICAgIC8vICAgICBvX2NvbG9yID0gdl9jb2xvcjsKKyAgICAv
LyAgICAgQU5HTEVEaXNjYXJkV3JhcHBlcigpOworICAgIC8vIH0KKworICAgIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKm1haW4gICA9IEZpbmRNYWluKHJvb3QpOworICAgIFRJbnRlcm1CbG9j
ayAqbWFpbkJvZHkgICAgICAgICAgICA9IG1haW4tPmdldEJvZHkoKTsKKyAgICBUSW50ZXJtU2Vx
dWVuY2UgKmZ1bmN0aW9uU2VxdWVuY2UgPSBtYWluQm9keS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBU
SW50ZXJtQWdncmVnYXRlICpkaXNjYXJkRnVuYyAgICAgPSBudWxscHRyOworICAgIC8vIEl0ZXJh
dGUgb3ZlciBhbGwgYnJhbmNoZXMgaW4gbWFpbiBmdW5jdGlvbiwgYW5kIHJlcGxhY2UgYWxsIHVz
ZXMKKyAgICAvLyBvZiBkaXNjYXJkIHdpdGggQU5HTEVEaXNjYXJkV3JhcHBlcigpLgorICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmdW5jdGlvblNlcXVlbmNlLT5zaXplKCk7ICsr
aW5kZXgpCisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSAqZnVuY3Rpb25Ob2RlID0gKCpmdW5j
dGlvblNlcXVlbmNlKVtpbmRleF07CisgICAgICAgIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5vZGUg
PSBmdW5jdGlvbk5vZGUtPmdldEFzQnJhbmNoTm9kZSgpOworICAgICAgICBpZiAoYnJhbmNoTm9k
ZSAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnJhbmNoTm9kZS0+Z2V0
Rmxvd09wKCkgPT0gRU9wS2lsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZGlzY2FyZEZ1bmMgPT0gbnVsbHB0cikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGRpc2NhcmRGdW5jID0gY3JlYXRlRGlzY2FyZFdyYXBwZXJGdW5jKHJvb3QpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29sIHJlcGxhY2VkID0gbWFpbkJvZHkt
PnJlcGxhY2VDaGlsZE5vZGUoYnJhbmNoTm9kZSwgZGlzY2FyZEZ1bmMpOworICAgICAgICAgICAg
ICAgIGlmICghcmVwbGFjZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZUFTVChyb290KTsKK30KKworLy8gQ3JlYXRl
IGRpc2NhcmRfd3JhcHBlciBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBTUElSVi1Dcm9zcyB3aWxs
IGFsd2F5cyBoYXZlIGEgcmV0dXJuIGF0IHRoZSBlbmQKKy8vIG9mIGZyYWdtZW50IHNoYWRlcnMK
K0FOR0xFX05PX0RJU0NBUkQgVEludGVybUFnZ3JlZ2F0ZSAqVHJhbnNsYXRvck1ldGFsOjpjcmVh
dGVEaXNjYXJkV3JhcHBlckZ1bmMoVEludGVybUJsb2NrICpyb290KQoreworICAgIFRJbmZvU2lu
a0Jhc2UgJnNpbmsgICAgICAgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBzaW5rIDw8ICJ2b2lkICIg
PDwga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUgPDwgIigpXG4iOworICAgIHNpbmsgPDwgIntcbiI7
CisgICAgc2luayA8PCAiICAgZGlzY2FyZDtcbiI7CisgICAgc2luayA8PCAifVxuIjsKKworICAg
IFRGdW5jdGlvbiAqZGlzY2FyZFdyYXBwZXJGdW5jID0KKyAgICAgICAgbmV3IFRGdW5jdGlvbihz
eW1ib2xUYWJsZSwga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgU3RhdGljVHlwZTo6R2V0QmFzaWM8RWJ0Vm9p
ZD4oKSwgdHJ1ZSk7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlICpjYWxsRGlzY2FyZFdyYXBwZXJG
dW5jID0KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpkaXNj
YXJkV3JhcHBlckZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2UoKSk7CisgICAgcmV0dXJuIGNhbGxE
aXNjYXJkV3JhcHBlckZ1bmM7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWwuaAppbmRleCAwZjRmMWNjZTI5YTM1NTdhZWQwMTg4YzhmNjE3ODc2
NGViMDAyYjRkLi5iY2MzMTg3MWE3MWQxNDhjNTY1ZDgyNzY1NzFhMTM2MzBhMzg0YzI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaApAQCAtMjUsNiArMjUsMTEgQEAgY2xhc3Mg
VHJhbnNsYXRvck1ldGFsIDogcHVibGljIFRyYW5zbGF0b3JWdWxrYW4KICAgcHVibGljOgogICAg
IFRyYW5zbGF0b3JNZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKIAor
ICAgIHN0YXRpYyBjb25zdCBjaGFyICpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENv
bnN0TmFtZSgpOworCisgICAgdm9pZCBlbmFibGVFbXVsYXRlZEluc3RhbmNlSUQoYm9vbCBlKSB7
IG1FbXVsYXRlZEluc3RhbmNlSUQgPSBlOyB9CisKICAgcHJvdGVjdGVkOgogICAgIEFOR0xFX05P
X0RJU0NBUkQgYm9vbCB0cmFuc2xhdGUoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywK
QEAgLTM3LDcgKzQyLDEzIEBAIGNsYXNzIFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xh
dG9yVnVsa2FuCiAKICAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0U2FtcGxlTWFza1dy
aXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlm
b3Jtcyk7Ci0gICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJhc3Rlcml6ZXJEaXNjYXJk
TG9naWMoVEludGVybUJsb2NrICpyb290KTsKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5z
ZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAg
QU5HTEVfTk9fRElTQ0FSRCBib29sIHJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJs
b2NrICpyb290KTsKKworICAgIEFOR0xFX05PX0RJU0NBUkQgVEludGVybUFnZ3JlZ2F0ZSAqY3Jl
YXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCk7CisKKyAgICBib29sIG1F
bXVsYXRlZEluc3RhbmNlSUQgPSBmYWxzZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBzaApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGUxMDIyODJlZTNhYWFkZjZmMGI0MjU2ZjY3ZjUzOThiYWUwZTUxOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5jcHAKQEAgLTAsMCArMSwxNDM5IEBACisvLworLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKworI2lu
Y2x1ZGUgImFuZ2xlX2dsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRpbnNXb3JrYXJvdW5kR0xTTC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0VnVsa2FuR0xTTC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU3RhdGljVHlwZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVy
cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VC
bG9ja3MuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJl
c3NhYmxlUmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91
bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0luaXRpYWxpemVWYXJpYWJsZXMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL05hbWVFbWJlZGRlZFVu
aWZvcm1TdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9S
ZW1vdmVBdG9taWNDb3VudGVyQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfb3BzL1JlbW92ZUluYWN0aXZlSW50ZXJmYWNlVmFyaWFibGVzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQXRvbWljQ291bnRlcnMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2Ft
cGxlcnNBczJEQXJyYXkuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1Jld3JpdGVEZmR5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9S
ZXdyaXRlU3RydWN0U2FtcGxlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9CdWlsdEluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvRmluZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvRmluZE1haW4uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9G
aW5kU3ltYm9sTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVfdXRpbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL1JlcGxhY2VDbGlwRGlzdGFuY2VWYXJpYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL1J1bkF0VGhlRW5kT2ZTaGFkZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3V0aWwuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFj
ZQoreworCitjb25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlE
RmllbGQoImVtdWxhdGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyNp
ZiAwCitjb25zdGV4cHIgTmFtZSBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUoIldyaXRlU2FtcGxl
TWFzayIpOworY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUoIkRpc2NhcmRX
cmFwcGVyIik7CisjZW5kaWYKK2NvbnN0ZXhwciBOYW1lIGtFbXVsYXRlZERlcHRoUmFuZ2VQYXJh
bXMoIkRlcHRoUmFuZ2VQYXJhbXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc0Jsb2NrTmFt
ZSgiQW5nbGVVbmlmb3JtcyIpOworY29uc3RleHByIE5hbWUga1VuaWZvcm1zVmFyTmFtZSgiYW5n
bGVVbmlmb3JtcyIpOworY29uc3RleHByIE5hbWUga0ZsaXBwZWRQb2ludENvb3JkTmFtZSgiZmxp
cHBlZFBvaW50Q29vcmQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFt
ZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRGcmFnQ29vcmQiLCBTeW1ib2xUeXBlOjpV
c2VyRGVmaW5lZCk7CisKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtWaWV3cG9ydFtdICAgICAgICAg
ICAgID0gInZpZXdwb3J0IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtIYWxmUmVuZGVyQXJlYVtd
ICAgICAgID0gImhhbGZSZW5kZXJBcmVhIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtGbGlwWFlb
XSAgICAgICAgICAgICAgID0gImZsaXBYWSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrTmVnRmxp
cFhZW10gICAgICAgICAgICA9ICJuZWdGbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga0Ns
aXBEaXN0YW5jZXNFbmFibGVkW10gPSAiY2xpcERpc3RhbmNlc0VuYWJsZWQiOworY29uc3RleHBy
IGNvbnN0IGNoYXIga1hmYkFjdGl2ZVVucGF1c2VkW10gICAgPSAieGZiQWN0aXZlVW5wYXVzZWQi
OworY29uc3RleHByIGNvbnN0IGNoYXIga1hmYlZlcnRpY2VzUGVyRHJhd1tdICAgPSAieGZiVmVy
dGljZXNQZXJEcmF3IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtYZmJCdWZmZXJPZmZzZXRzW10g
ICAgID0gInhmYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNoYXIga0FjYkJ1ZmZl
ck9mZnNldHNbXSAgICAgPSAiYWNiQnVmZmVyT2Zmc2V0cyI7Citjb25zdGV4cHIgY29uc3QgY2hh
ciBrRGVwdGhSYW5nZVtdICAgICAgICAgICA9ICJkZXB0aFJhbmdlIjsKK2NvbnN0ZXhwciBjb25z
dCBjaGFyIGtQcmVSb3RhdGlvbltdICAgICAgICAgID0gInByZVJvdGF0aW9uIjsKK2NvbnN0ZXhw
ciBjb25zdCBjaGFyIGtGcmFnUm90YXRpb25bXSAgICAgICAgID0gImZyYWdSb3RhdGlvbiI7CisK
K2NvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUga2dsX1ZlcnRleEluZGV4TWV0YWwoCisgICAgQnVp
bHRJbklkOjpnbF9WZXJ0ZXhJbmRleCwKKyAgICBJbW11dGFibGVTdHJpbmcoImdsX1ZlcnRleElu
ZGV4IiksCisgICAgU3ltYm9sVHlwZTo6QnVpbHRJbiwKKyAgICBURXh0ZW5zaW9uOjpVTkRFRklO
RUQsCisgICAgU3RhdGljVHlwZTo6R2V0PEVidFVJbnQsIEVicEhpZ2gsIEV2cVZlcnRleElELCAx
LCAxPigpKTsKKworY29uc3RleHByIHNpemVfdCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3JtcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7Citjb25z
dGV4cHIgc3RkOjphcnJheTxjb25zdCBjaGFyICosIGtOdW1HcmFwaGljc0RyaXZlclVuaWZvcm1z
PiBrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tWaWV3cG9ydCwga0hhbGZS
ZW5kZXJBcmVhLCBrRmxpcFhZLCBrTmVnRmxpcFhZLCBrQ2xpcERpc3RhbmNlc0VuYWJsZWQsIGtY
ZmJBY3RpdmVVbnBhdXNlZCwKKyAgICAga1hmYlZlcnRpY2VzUGVyRHJhdywga1hmYkJ1ZmZlck9m
ZnNldHMsIGtBY2JCdWZmZXJPZmZzZXRzLCBrRGVwdGhSYW5nZSwga1ByZVJvdGF0aW9uLAorICAg
ICBrRnJhZ1JvdGF0aW9ufX07CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUNvbXB1dGVEcml2ZXJV
bmlmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
OworY29uc3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtQ29tcHV0ZURyaXZlclVu
aWZvcm1zPiBrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1lcyA9IHsKKyAgICB7a0FjYkJ1ZmZlck9m
ZnNldHN9fTsKKworY2xhc3MgRGVjbGFyZVN0cnVjdFR5cGVzVHJhdmVyc2VyIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IERlY2xhcmVTdHJ1Y3RU
eXBlc1RyYXZlcnNlcihUT3V0cHV0TVNMICpvdXRwdXRNU0wpCisgICAgICAgIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0cHV0TVNMKG91dHB1dE1TTCkKKyAgICB7
fQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJl
VmlzaXQpOworICAgICAgICBpZiAoIW1Jbkdsb2JhbFNjb3BlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUSW50ZXJtU2Vx
dWVuY2UgJnNlcXVlbmNlID0gKihub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpkZWNsYXJhdG9yICAgICAgICA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQo
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgICAgICA9IGRlY2xhcmF0b3It
PmdldFR5cGUoKTsKKworICAgICAgICBpZiAodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdl
dFN0cnVjdCgpOworCisgICAgICAgICAgICAvLyBFbWJlZGRlZCBzdHJ1Y3RzIHNob3VsZCBiZSBw
YXJzZWQgYXdheSBieSBub3cuCisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5zeW1ib2xU
eXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOworICAgICAgICAgICAgLy8gb3V0cHV0TVNMLT53
cml0ZVN0cnVjdFR5cGUoc3RydWN0dXJlKTsKKworICAgICAgICAgICAgVEludGVybVN5bWJvbCAq
c3ltYm9sTm9kZSA9IGRlY2xhcmF0b3ItPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAg
aWYgKHN5bWJvbE5vZGUgJiYgc3ltYm9sTm9kZS0+dmFyaWFibGUoKS5zeW1ib2xUeXBlKCkgPT0g
U3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUmVt
b3ZlIHRoZSBzdHJ1Y3Qgc3BlY2lmaWVyIGRlY2xhcmF0aW9uIGZyb20gdGhlIHRyZWUgc28gaXQg
aXNuJ3QgcGFyc2VkIGFnYWluLgorICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBlbXB0
eVJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNl
X2JhY2soZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCksIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eVJlcGxhY2VtZW50KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBSRU1PVkUsIHVzZWQgdG8g
cmVtb3ZlICd1bnN1ZWQnIHdhcm5pbmcKKyAgICAgICAgbU91dHB1dE1TTCA9IG51bGxwdHI7CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBwcml2YXRlOgorICAgIFRPdXRwdXRN
U0wgKm1PdXRwdXRNU0w7Cit9OworCitjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVy
c2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIERlY2xhcmVE
ZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIoVEluZm9TaW5rQmFzZSAqc2luaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCkKKyAg
ICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1T
aW5rKHNpbmspLAorICAgICAgICAgIG1IYXNoRnVuY3Rpb24oaGFzaEZ1bmN0aW9uKSwKKyAgICAg
ICAgICBtTmFtZU1hcChuYW1lTWFwKSwKKyAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybShmYWxz
ZSkKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gKihub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKworICAgICAg
ICAvLyBUT0RPKGptYWRpbGwpOiBDb21wb3VuZCBkZWNsYXJhdGlvbnMuCisgICAgICAgIEFTU0VS
VChzZXF1ZW5jZS5zaXplKCkgPT0gMSk7CisKKyAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJs
ZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JnR5cGUgICAgICA9IHZhcmlhYmxlLT5nZXRUeXBlKCk7CisgICAgICAgIGJvb2wgaXNVbmlmb3Jt
ICAgICAgICAgPSB0eXBlLmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0gJiYgIXR5cGUuaXNJ
bnRlcmZhY2VCbG9jaygpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIUlzT3BhcXVlVHlw
ZSh0eXBlLmdldEJhc2ljVHlwZSgpKTsKKworICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKCptU2luaykgPDwgIiAgICAiIDw8IEdldFR5cGVOYW1lKHR5cGUsIG1I
YXNoRnVuY3Rpb24sIG1OYW1lTWFwKSA8PCAiICI7CisgICAgICAgICAgICAgICAgbUluRGVmYXVs
dFVuaWZvcm0gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbkRlZmF1bHRV
bmlmb3JtID0gaXNVbmlmb3JtOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzVW5pZm9ybSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAoKm1TaW5rKSA8PCAiO1xuIjsKKworICAgICAgICAg
ICAgICAgIC8vIFJlbW92ZSB0aGUgdW5pZm9ybSBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNv
IGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
ZW1wdHlSZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1w
bGFjZV9iYWNrKGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlmb3JtID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAobUluRGVmYXVsdFVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEltbXV0
YWJsZVN0cmluZyAmbmFtZSA9IHN5bWJvbC0+dmFyaWFibGUoKS5uYW1lKCk7CisgICAgICAgICAg
ICBBU1NFUlQoIW5hbWUuYmVnaW5zV2l0aCgiZ2xfIikpOworICAgICAgICAgICAgKCptU2luaykg
PDwgSGFzaE5hbWUoJnN5bWJvbC0+dmFyaWFibGUoKSwgbUhhc2hGdW5jdGlvbiwgbU5hbWVNYXAp
CisgICAgICAgICAgICAgICAgICAgICA8PCBBcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlICptU2lu
azsKKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247CisgICAgTmFtZU1hcCAqbU5h
bWVNYXA7CisgICAgYm9vbCBtSW5EZWZhdWx0VW5pZm9ybTsKK307CisKK1RJbnRlcm1CaW5hcnkg
KkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jtcywg
Y29uc3QgY2hhciAqZmllbGROYW1lKQoreworICAgIHNpemVfdCBmaWVsZEluZGV4ID0gRmluZEZp
ZWxkSW5kZXgoZHJpdmVyVW5pZm9ybXMuZ2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKSwg
ZmllbGROYW1lKTsKKworICAgIFRJbnRlcm1TeW1ib2wgKmFuZ2xlVW5pZm9ybXNSZWYgPSBuZXcg
VEludGVybVN5bWJvbCgmZHJpdmVyVW5pZm9ybXMpOworICAgIFRDb25zdGFudFVuaW9uICp1bmlm
b3JtSW5kZXggICAgPSBuZXcgVENvbnN0YW50VW5pb247CisgICAgdW5pZm9ybUluZGV4LT5zZXRJ
Q29uc3Qoc3RhdGljX2Nhc3Q8aW50PihmaWVsZEluZGV4KSk7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24gKmluZGV4UmVmID0KKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaWZv
cm1JbmRleCwgKlN0YXRpY1R5cGU6OkdldEJhc2ljPEVidEludD4oKSk7CisgICAgcmV0dXJuIG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0U3RydWN0LCBhbmdsZVVuaWZvcm1zUmVmLCBp
bmRleFJlZik7Cit9CisKKyNpZiAwCisvLyBVbmxpa2UgVnVsa2FuIGhhdmluZyBhdXRvIHZpZXdw
b3J0IGZsaXBwaW5nIGV4dGVuc2lvbiwgaW4gTWV0YWwgd2UgaGF2ZSB0byBmbGlwIGdsX1Bvc2l0
aW9uLnkKKy8vIG1hbnVhbGx5LgorLy8gVGhpcyBvcGVyYXRpb24gcGVyZm9ybXMgZmxpcHBpbmcg
dGhlIGdsX1Bvc2l0aW9uLnkgdXNpbmcgdGhpcyBleHByZXNzaW9uOgorLy8gZ2xfUG9zaXRpb24u
eSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIEFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Td2l6emxlICZuZWdGbGlwWSkKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0g
Y29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZl
cmVuY2UgdG8gImdsX1Bvc2l0aW9uIgorICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0
aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIGEg
c3dpenpsZSB0byAiZ2xfUG9zaXRpb24ueSIKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNl
dFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJbnRlcm1Td2l6emxl
ICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYsIHN3aXp6bGVPZmZz
ZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24ueSAqIG5l
Z0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJbnRlcm1CaW5hcnko
RU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisKKyAgICAvLyBDcmVh
dGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55ICogbmVnVmll
d3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0aW9uWS0+
ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJt
QmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZKTsKKwor
ICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9m
IHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAm
cm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKyNlbmRpZgorCisjaWYgMAorLy8g
SW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgorQU5HTEVfTk9fRElTQ0FSRCBib29s
IEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEluaXRWYXJpYWJsZUxpc3QgJnVudXNlZFZhcnMpCit7CisgICAgaWYgKHVudXNlZFZhcnMuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFRJbnRlcm1T
ZXF1ZW5jZSAqaW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybVNlcXVlbmNlOworCisgICAgZm9y
IChjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUgJnZhciA6IHVudXNlZFZhcnMpCisgICAgeworICAg
ICAgICBBU1NFUlQoIXZhci5hY3RpdmUpOworICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sICpz
eW1ib2wgPSBGaW5kU3ltYm9sTm9kZSgmcm9vdCwgdmFyLm5hbWUpOworICAgICAgICBBU1NFUlQo
c3ltYm9sKTsKKworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKmluaXRDb2RlID0gQ3JlYXRlSW5p
dENvZGUoc3ltYm9sLCBmYWxzZSwgZmFsc2UsICZzeW1ib2xUYWJsZSk7CisKKyAgICAgICAgaW5z
ZXJ0U2VxdWVuY2UtPmluc2VydChpbnNlcnRTZXF1ZW5jZS0+ZW5kKCksIGluaXRDb2RlLT5iZWdp
bigpLCBpbml0Q29kZS0+ZW5kKCkpOworICAgIH0KKworICAgIGlmIChpbnNlcnRTZXF1ZW5jZSkK
KyAgICB7CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKm1haW4gPSBGaW5kTWFp
bigmcm9vdCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAqbWFpblNlcXVlbmNlICAgPSBtYWlu
LT5nZXRCb2R5KCktPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgLy8gSW5zZXJ0IGluaXQgY29k
ZSBhdCB0aGUgc3RhcnQgb2YgbWFpbigpCisgICAgICAgIG1haW5TZXF1ZW5jZS0+aW5zZXJ0KG1h
aW5TZXF1ZW5jZS0+YmVnaW4oKSwgaW5zZXJ0U2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVl
bmNlLT5lbmQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworY29u
c3QgVFZhcmlhYmxlICpBZGRDb21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxv
Y2sgJnJvb3QsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCit7CisgICAgLy8gVGhpcyBmaWVs
ZCBsaXN0IG1pcnJvcnMgdGhlIHN0cnVjdHVyZSBvZiBDb21wdXRlRHJpdmVyVW5pZm9ybXMgaW4g
Q29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0ICpkcml2ZXJGaWVsZExpc3QgPSBuZXcgVEZp
ZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5cGUgKiwga051bUNvbXB1dGVEcml2
ZXJVbmlmb3Jtcz4ga0RyaXZlclVuaWZvcm1UeXBlcyA9IHt7CisgICAgICAgIG5ldyBUVHlwZShF
YnRVSW50LCA0KSwKKyAgICB9fTsKKworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IGtOdW1Db21wdXRlRHJpdmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4
KQorICAgIHsKKyAgICAgICAgVEZpZWxkICpkcml2ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAg
ICAgbmV3IFRGaWVsZChrRHJpdmVyVW5pZm9ybVR5cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAg
ICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZyhrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1l
c1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNlTG9jLAorICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAgICAgICAgZHJpdmVyRmllbGRMaXN0LT5wdXNo
X2JhY2soZHJpdmVyVW5pZm9ybUZpZWxkKTsKKyAgICB9CisKKyAgICByZXR1cm4gRGVjbGFyZVN0
cnVjdHVyZSgmcm9vdCwgJnN5bWJvbFRhYmxlLCBkcml2ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCks
IDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmtVbmlmb3Jtc1Zhck5hbWUucmF3TmFtZSgpKQorICAgICAgICAuc2Vjb25kOworfQor
CisvLyBUaGUgQWRkKkRyaXZlclVuaWZvcm1zVG9TaGFkZXIgb3BlcmF0aW9uIGFkZHMgYW4gaW50
ZXJuYWwgdW5pZm9ybSBibG9jayB0byBhIHNoYWRlci4gVGhlIGRyaXZlcgorLy8gYmxvY2sgaXMg
dXNlZCB0byBpbXBsZW1lbnQgVnVsa2FuLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3b3JrYXJvdW5k
cy4gUmV0dXJucyB0aGUgZHJpdmVyIHVuaWZvcm1zCisvLyB2YXJpYWJsZS4KKy8vCisvLyBUaGVy
ZSBhcmUgR3JhcGhpY3MgYW5kIENvbXB1dGUgdmFyaWF0aW9ucyBhcyB0aGV5IHJlcXVpcmUgZGlm
ZmVyZW50IHVuaWZvcm1zLgorY29uc3QgVFZhcmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZv
cm1zVG9TaGFkZXIoVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPFRGaWVsZCAqPiAmYWRkaXRpb25hbEZpZWxkcykKK3sKKyAgICAvLyBJbml0IHRo
ZSBkZXB0aCByYW5nZSB0eXBlLgorICAgIFRGaWVsZExpc3QgKmRlcHRoUmFuZ2VQYXJhbXNGaWVs
ZHMgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMtPnB1c2hf
YmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAx
LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bW11dGFibGVTdHJpbmcoIm5lYXIiKSwga05vU291cmNlTG9jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
KTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcg
VFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3RyaW5nKCJmYXIi
KSwga05vU291cmNlTG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKyAgICBkZXB0aFJhbmdlUGFy
YW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhp
Z2gsIEV2cUdsb2JhbCwgMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW1tdXRhYmxlU3RyaW5nKCJkaWZmIiksIGtOb1NvdXJjZUxvYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsKSk7CisgICAgLy8gVGhpcyBhZGRpdGlvbmFsIGZpZWxkIG1pZ2h0IGJl
IHVzZWQgYnkgc3ViY2xhc3Mgc3VjaCBhcyBUcmFuc2xhdG9yTWV0YWwuCisgICAgZGVwdGhSYW5n
ZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygicmVzZXJ2ZWQiKSwga05vU291cmNl
TG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKmVtdWxh
dGVkRGVwdGhSYW5nZVBhcmFtcyA9CisgICAgICAgIERlY2xhcmVTdHJ1Y3R1cmUoJnJvb3QsICZz
eW1ib2xUYWJsZSwgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcywgRXZxR2xvYmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBrRW11bGF0ZWRE
ZXB0aFJhbmdlUGFyYW1zLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBudWxs
cHRyKQorICAgICAgICAgICAgLmZpcnN0LT5nZXRUeXBlKCkKKyAgICAgICAgICAgIC5nZXRTdHJ1
Y3QoKTsKKworICAgIC8vIFRoaXMgZmllbGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2Yg
R3JhcGhpY3NEcml2ZXJVbmlmb3JtcyBpbiBDb250ZXh0VmsuY3BwLgorICAgIFRGaWVsZExpc3Qg
KmRyaXZlckZpZWxkTGlzdCA9IG5ldyBURmllbGRMaXN0OworCisgICAgY29uc3Qgc3RkOjphcnJh
eTxUVHlwZSAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0RyaXZlclVuaWZvcm1UeXBl
cyA9IHt7CisgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgNCksCisgICAgICAgIG5ldyBUVHlw
ZShFYnRGbG9hdCwgMiksCisgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisgICAgICAg
IG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwgIC8v
IHVpbnQgY2xpcERpc3RhbmNlc0VuYWJsZWQ7ICAvLyAzMiBiaXRzIGZvciAzMiBjbGlwIGRpc3Rh
bmNlcyBtYXgKKyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQpLAorICAgICAgICBuZXcgVFR5cGUo
RWJ0VUludCksCisgICAgICAgIC8vIE5PVEU6IFRoZXJlJ3MgYSB2ZWMzIGdhcCBoZXJlIHRoYXQg
Y2FuIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZQorICAgICAgICBuZXcgVFR5cGUoRWJ0SW50LCA0KSwK
KyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQsIDQpLAorICAgICAgICBuZXcgVFR5cGUoZW11bGF0
ZWREZXB0aFJhbmdlUGFyYW1zLCBmYWxzZSksCisgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwg
MiwgNCksCisgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiwgNCksCisgICAgfX07CisKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBrTnVtR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtczsgKyt1bmlmb3JtSW5kZXgpCisgICAgeworICAgICAgICBURmllbGQg
KmRyaXZlclVuaWZvcm1GaWVsZCA9CisgICAgICAgICAgICBuZXcgVEZpZWxkKGtEcml2ZXJVbmlm
b3JtVHlwZXNbdW5pZm9ybUluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxl
U3RyaW5nKGtHcmFwaGljc0RyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291
cmNlTG9jLAorICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KTsKKyAgICAgICAgZHJpdmVyRmllbGRMaXN0LT5wdXNoX2JhY2soZHJpdmVyVW5pZm9ybUZpZWxk
KTsKKyAgICB9CisKKyAgICAvLyBCYWNrLWVuZCBzcGVjaWZpYyBmaWVsZHMKKyAgICBkcml2ZXJG
aWVsZExpc3QtPmluc2VydChkcml2ZXJGaWVsZExpc3QtPmVuZCgpLCBhZGRpdGlvbmFsRmllbGRz
LmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkcy5l
bmQoKSk7CisKKyAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5HTEVVbmlm
b3JtQmxvY2siIHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCisgICAgcmV0dXJu
IERlY2xhcmVTdHJ1Y3R1cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBF
dnFVbmlmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6
OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNl
Y29uZDsKK30KKworLy8gRGVjbGFyZXMgYSBuZXcgdmFyaWFibGUgdG8gcmVwbGFjZSBnbF9EZXB0
aFJhbmdlLCBpdHMgdmFsdWVzIGFyZSBmZWQgZnJvbSBhIGRyaXZlciB1bmlmb3JtLgorQU5HTEVf
Tk9fRElTQ0FSRCBib29sIFJlcGxhY2VHTERlcHRoUmFuZ2VXaXRoRHJpdmVyVW5pZm9ybShUQ29t
cGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJl
bmNlIHRvICJnbF9EZXB0aFJhbmdlIgorICAgIGNvbnN0IFRWYXJpYWJsZSAqZGVwdGhSYW5nZVZh
ciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSAqPigKKyAgICAgICAgc3ltYm9sVGFibGUu
ZmluZEJ1aWx0SW4oSW1tdXRhYmxlU3RyaW5nKCJnbF9EZXB0aFJhbmdlIiksIDApKTsKKworICAg
IC8vIEFOR0xFVW5pZm9ybXMuZGVwdGhSYW5nZQorICAgIFRJbnRlcm1CaW5hcnkgKmFuZ2xlRW11
bGF0ZWREZXB0aFJhbmdlUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jt
cywga0RlcHRoUmFuZ2UpOworCisgICAgLy8gVXNlIHRoaXMgdmFyaWFibGUgaW5zdGVhZCBvZiBn
bF9EZXB0aFJhbmdlIGV2ZXJ5d2hlcmUuCisgICAgcmV0dXJuIFJlcGxhY2VWYXJpYWJsZVdpdGhU
eXBlZCgmY29tcGlsZXIsICZyb290LCBkZXB0aFJhbmdlVmFyLCBhbmdsZUVtdWxhdGVkRGVwdGhS
YW5nZVJlZik7Cit9CisKK1RJbnRlcm1TZXF1ZW5jZSAqR2V0TWFpblNlcXVlbmNlKFRJbnRlcm1C
bG9jayAmcm9vdCkKK3sKKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmlu
ZE1haW4oJnJvb3QpOworICAgIHJldHVybiBtYWluLT5nZXRCb2R5KCktPmdldFNlcXVlbmNlKCk7
Cit9CisKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJUcmFuc2Zvcm1G
ZWVkYmFja091dHB1dFRvTWFpbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29t
cGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKyAgICBUVmFyaWFibGUgKnhmYlBsYWNlaG9sZGVyID0g
bmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiQEAgWEZCLU9VVCBA
QCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
VHlwZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIC8vIEFwcGVuZCB0aGUg
YXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgbmV3IFRJbnRlcm1T
eW1ib2woeGZiUGxhY2Vob2xkZXIpLCAmc3ltYm9sVGFibGUpOworfQorCisvLyBUaGlzIG9wZXJh
dGlvbiBwZXJmb3JtcyB0aGUgdmlld3BvcnQgZGVwdGggdHJhbnNsYXRpb24gbmVlZGVkIGJ5IFZ1
bGthbi4gSW4gR0wgdGhlIHZpZXdwb3J0CisvLyB0cmFuc2Zvcm1hdGlvbiBpcyBzbGlnaHRseSBk
aWZmZXJlbnQgLSBzZWUgdGhlIEdMIDIuMCBzcGVjIHNlY3Rpb24gIjIuMTIuMSBDb250cm9sbGlu
ZyB0aGUKKy8vIFZpZXdwb3J0Ii4gSW4gVnVsa2FuIHRoZSBjb3JyZXNwb25kaW5nIHNwZWMgc2Vj
dGlvbiBpcyBjdXJyZW50bHkgIjIzLjQuIENvb3JkaW5hdGUKKy8vIFRyYW5zZm9ybWF0aW9ucyIu
CisvLyBUaGUgZXF1YXRpb25zIHJlZHVjZSB0byBhbiBleHByZXNzaW9uOgorLy8KKy8vICAgICB6
X3ZrID0gMC41ICogKHdfZ2wgKyB6X2dsKQorLy8KKy8vIHdoZXJlIHpfdmsgaXMgdGhlIGRlcHRo
IG91dHB1dCBvZiBhIFZ1bGthbiB2ZXJ0ZXggc2hhZGVyIGFuZCB6X2dsIGlzIHRoZSBzYW1lIGZv
ciBHTC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJl
Y3Rpb25Ub01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290
KQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xU
YWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFi
bGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcg
VEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNl
dFogPSB7Mn07CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1T
d2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqb25lSGFsZiA9IENyZWF0ZUZsb2F0Tm9kZSgwLjVmKTsKKworICAgIFRWZWN0b3I8
aW50PiBzd2l6emxlT2Zmc2V0VyA9IHszfTsKKyAgICBUSW50ZXJtU3dpenpsZSAqcG9zaXRpb25X
ICAgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYtPmRlZXBDb3B5KCksIHN3aXp6bGVP
ZmZzZXRXKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnog
KyBnbF9Qb3NpdGlvbi53KSAqIDAuNSIuCisgICAgVEludGVybUJpbmFyeSAqelBsdXNXID0gbmV3
IFRJbnRlcm1CaW5hcnkoRU9wQWRkLCBwb3NpdGlvblotPmRlZXBDb3B5KCksIHBvc2l0aW9uVy0+
ZGVlcENvcHkoKSk7CisgICAgVEludGVybUJpbmFyeSAqaGFsZlpQbHVzVyA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcE11bCwgelBsdXNXLCBvbmVIYWxmLT5kZWVwQ29weSgpKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xf
UG9zaXRpb24udykgKiAwLjUiCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpMSFMgPSBwb3Np
dGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcg
VEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25aTEhTLCBoYWxmWlBs
dXNXKTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0
aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNv
bXBpbGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBv
cGVyYXRpb24gcGVyZm9ybXMgQW5kcm9pZCBwcmUtcm90YXRpb24gYW5kIHktZmxpcC4gIEZvciBB
bmRyb2lkIChhbmQgcG90ZW50aWFsbHkgb3RoZXIKKy8vIHBsYXRmb3JtcyksIHRoZSBkZXZpY2Ug
bWF5IHJvdGF0ZSwgc3VjaCB0aGF0IHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24g
aXMgcm90YXRlZAorLy8gcmVsYXRpdmUgdG8gdGhlIG5hdGl2ZSBvcmllbnRhdGlvbiBvZiB0aGUg
ZGV2aWNlLiAgVGhpcyBpcyBjb3JyZWN0ZWQgaW4gcGFydCBieSBtdWx0aXBseWluZworLy8gZ2xf
UG9zaXRpb24gYnkgYSBtYXQyLgorLy8gVGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVz
c2lvbjoKKy8vCisvLyAgICAgZ2xfUG9zaXRpb24ueHkgPSBnbF9Qb3NpdGlvbi54eSAqIHByZVJv
dGF0aW9uCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kUHJlUm90YXRpb24oVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5
bWJvbFRhYmxlICAgICA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisgICAgVEludGVybUJp
bmFyeSAqcHJlUm90YXRpb25SZWYgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZv
cm1zLCBrUHJlUm90YXRpb24pOworICAgIFRJbnRlcm1TeW1ib2wgKmdsUG9zICAgICAgICAgID0g
bmV3IFRJbnRlcm1TeW1ib2woQnVpbHRJblZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpKTsKKyAgICBU
VmVjdG9yPGludD4gc3dpenpsZU9mZnNldFhZICA9IHswLCAxfTsKKyAgICBUSW50ZXJtU3dpenps
ZSAqZ2xQb3NYWSAgICAgICA9IG5ldyBUSW50ZXJtU3dpenpsZShnbFBvcywgc3dpenpsZU9mZnNl
dFhZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnh5ICog
cHJlUm90YXRpb24pIgorICAgIFRJbnRlcm1CaW5hcnkgKnpSb3RhdGVkID0KKyAgICAgICAgbmV3
IFRJbnRlcm1CaW5hcnkoRU9wTWF0cml4VGltZXNWZWN0b3IsIHByZVJvdGF0aW9uUmVmLT5kZWVw
Q29weSgpLCBnbFBvc1hZLT5kZWVwQ29weSgpKTsKKworICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdu
bWVudCAiZ2xfUG9zaXRpb24ueHkgPSAoZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlvbikiCisg
ICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBnbFBvc1hZLT5kZWVwQ29weSgpLCB6Um90YXRlZCk7CisK
KyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwg
JnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSb3RhdGVBbmRGbGlwQnVpbHRpblZhcmlhYmxlKFRDb21waWxlciAmY29tcGlsZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
QmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZmbGlwWFks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJmJ1aWx0aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZmbGlwcGVkVmFyaWFibGVOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
ICZwaXZvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqZnJhZ1JvdGF0aW9uKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEg
c3ltYm9sIHJlZmVyZW5jZSB0byAnYnVpbHRpbicuCisgICAgVEludGVybVN5bWJvbCAqYnVpbHRp
blJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKCZidWlsdGluKTsKKworICAgIC8vIENyZWF0ZSBhIHN3
aXp6bGUgdG8gImJ1aWx0aW4ueHkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSA9
IHswLCAxfTsKKyAgICBUSW50ZXJtU3dpenpsZSAqYnVpbHRpblhZICAgID0gbmV3IFRJbnRlcm1T
d2l6emxlKGJ1aWx0aW5SZWYsIHN3aXp6bGVPZmZzZXRYWSk7CisKKyAgICAvLyBDcmVhdGUgYSBz
eW1ib2wgcmVmZXJlbmNlIHRvIG91ciBuZXcgdmFyaWFibGUgdGhhdCB3aWxsIGhvbGQgdGhlIG1v
ZGlmaWVkIGJ1aWx0aW4uCisgICAgY29uc3QgVFR5cGUgKnR5cGUgPSBTdGF0aWNUeXBlOjpHZXRG
b3JWZWM8RWJ0RmxvYXQ+KAorICAgICAgICBFdnFHbG9iYWwsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KGJ1aWx0aW4uZ2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpKTsKKyAgICBUVmFyaWFi
bGUgKnJlcGxhY2VtZW50VmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIGZsaXBwZWRW
YXJpYWJsZU5hbWUucmF3TmFtZSgpLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsaXBwZWRWYXJpYWJsZU5hbWUuc3ltYm9sVHlwZSgpKTsKKyAg
ICBEZWNsYXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIHJlcGxhY2VtZW50VmFyKTsKKyAgICBUSW50
ZXJtU3ltYm9sICpmbGlwcGVkQnVpbHRpblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHJlcGxhY2Vt
ZW50VmFyKTsKKworICAgIC8vIFVzZSB0aGlzIG5ldyB2YXJpYWJsZSBpbnN0ZWFkIG9mICdidWls
dGluJyBldmVyeXdoZXJlLgorICAgIGlmICghUmVwbGFjZVZhcmlhYmxlKCZjb21waWxlciwgJnJv
b3QsICZidWlsdGluLCByZXBsYWNlbWVudFZhcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSBleHByZXNzaW9uICIoYnVpbHRpbi54eSAq
IGZyYWdSb3RhdGlvbikiCisgICAgVEludGVybVR5cGVkICpyb3RhdGVkWFk7CisgICAgaWYgKGZy
YWdSb3RhdGlvbikKKyAgICB7CisgICAgICAgIHJvdGF0ZWRYWSA9IG5ldyBUSW50ZXJtQmluYXJ5
KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBmcmFnUm90YXRpb24tPmRlZXBDb3B5KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5YWS0+ZGVlcENvcHkoKSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE5vIHJvdGF0aW9uIGFwcGxpZWQsIHVz
ZSBvcmlnaW5hbCB2YXJpYWJsZS4KKyAgICAgICAgcm90YXRlZFhZID0gYnVpbHRpblhZLT5kZWVw
Q29weSgpOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4u
eHkgLSBwaXZvdCkgKiBmbGlwWFkgKyBwaXZvdAorICAgIFRJbnRlcm1CaW5hcnkgKnJlbW92ZVBp
dm90ID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wU3ViLCByb3RhdGVkWFksICZwaXZvdCk7CisgICAg
VEludGVybUJpbmFyeSAqaW52ZXJzZVhZICAgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHJl
bW92ZVBpdm90LCAmZmxpcFhZKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpwbHVzUGl2b3QgICA9IG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEFkZCwgaW52ZXJzZVhZLCBwaXZvdC5kZWVwQ29weSgpKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgY29ycmVjdGVkIHZhcmlhYmxlIGFuZCBjb3B5IHRoZSB2YWx1ZSBv
ZiB0aGUgb3JpZ2luYWwgYnVpbHRpbi4KKyAgICBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlID0g
bmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIHNlcXVlbmNlLT5wdXNoX2JhY2soYnVpbHRpblJl
Zi0+ZGVlcENvcHkoKSk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IoYnVpbHRpbi5nZXRUeXBlKCksIHNlcXVlbmNl
KTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICAgPSBuZXcgVEludGVybUJpbmFyeShF
T3BJbml0aWFsaXplLCBmbGlwcGVkQnVpbHRpblJlZiwgYWdncmVnYXRlKTsKKworICAgIC8vIENy
ZWF0ZSBhbiBhc3NpZ25tZW50IHRvIHRoZSByZXBsYWNlZCB2YXJpYWJsZSdzIC54eS4KKyAgICBU
SW50ZXJtU3dpenpsZSAqY29ycmVjdGVkWFkgPQorICAgICAgICBuZXcgVEludGVybVN3aXp6bGUo
ZmxpcHBlZEJ1aWx0aW5SZWYtPmRlZXBDb3B5KCksIHN3aXp6bGVPZmZzZXRYWSk7CisgICAgVElu
dGVybUJpbmFyeSAqYXNzaWduVG9ZID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wQXNzaWduLCBjb3Jy
ZWN0ZWRYWSwgcGx1c1Bpdm90KTsKKworICAgIC8vIEFkZCB0aGlzIGFzc2lnbWVudCBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBtYWluIGZ1bmN0aW9uCisgICAgeworICAgICAgICBUSW50ZXJtQmlu
YXJ5ICpub2Rlc1tdID0ge2Fzc2lnbm1lbnQsIGFzc2lnblRvWX07CisgICAgICAgIGluc2VydFNl
cXVlbmNlLmluc2VydChpbnNlcnRTZXF1ZW5jZS5iZWdpbigpLCBzdGQ6OmJlZ2luKG5vZGVzKSwg
c3RkOjplbmQobm9kZXMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcGlsZXIudmFsaWRhdGVB
U1QoJnJvb3QpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgSW5zZXJ0RnJhZ0Nvb3JkQ29y
cmVjdGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9j
ayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0U2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1z
KQoreworICAgIFRJbnRlcm1CaW5hcnkgJmZsaXBYWSAgICAgICA9ICpDcmVhdGVEcml2ZXJVbmlm
b3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICBUSW50ZXJtQmluYXJ5ICZwaXZv
dCAgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0hhbGZS
ZW5kZXJBcmVhKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPSAoY29tcGlsZU9w
dGlvbnMgJiBTSF9BRERfUFJFX1JPVEFUSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtGcmFn
Um90YXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gUm90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShjb21waWxlciwgcm9v
dCwgaW5zZXJ0U2VxdWVuY2UsIGZsaXBYWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSwga0ZsaXBwZWRGcmFn
Q29vcmROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdm90
LCBmcmFnUm90YXRpb24pOworfQorCitUSW50ZXJtQmluYXJ5ICpHZXREcml2ZXJVbmlmb3JtRGVw
dGhSYW5nZVJlc2VydmVkRmllbGRSZWYoY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykK
K3sKKyAgICBUSW50ZXJtQmluYXJ5ICpkZXB0aFJhbmdlID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJl
Zihkcml2ZXJVbmlmb3Jtcywga0RlcHRoUmFuZ2UpOworCisgICAgcmV0dXJuIG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEluZGV4RGlyZWN0U3RydWN0LCBkZXB0aFJhbmdlLCBDcmVhdGVJbmRleE5vZGUo
MykpOworfQorCit2b2lkIERlY2xhcmVSaWdodEJlZm9yZU1haW4oVEludGVybUJsb2NrICZyb290
LCBjb25zdCBUVmFyaWFibGUgJnZhcikKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmlu
ZE1haW5JbmRleCgmcm9vdCksIHtuZXcgVEludGVybURlY2xhcmF0aW9ueyZ2YXJ9fSk7Cit9CisK
K3ZvaWQgQWRkRnJhZ0NvbG9yRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290LCBUU3ltYm9s
VGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFp
bkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
e25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29sb3IoKX19
KTsKK30KKwordm9pZCBBZGRGcmFnRGVwdGhEZWNsYXJhdGlvbihUSW50ZXJtQmxvY2sgJnJvb3Qs
IFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVz
KEZpbmRNYWluSW5kZXgoJnJvb3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
U2VxdWVuY2V7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbntCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdE
ZXB0aCgpfX0pOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQWRkRnJhZ0RhdGFEZWNsYXJh
dGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgVFN5
bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisgICAg
Y29uc3QgaW50IG1heERyYXdCdWZmZXJzICA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpLk1heERy
YXdCdWZmZXJzOworICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGUgICAgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEpOworICAgIHN0ZDo6dmVjdG9yPGNv
bnN0IFRWYXJpYWJsZSAqPiBnbEZyYWdEYXRhU2xvdHM7CisgICAgVEludGVybVNlcXVlbmNlIGRl
Y2xhcmVHTEZyYWdkYXRhU2VxdWVuY2U7CisKKyAgICAvLyBDcmVhdGUgZ2xfRnJhZ0RhdGFfMCwx
LDIsMworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7
CisgICAgICAgIEltbXV0YWJsZVN0cmluZ0J1aWxkZXIgYnVpbGRlcihzdHJsZW4oImdsX0ZyYWdE
YXRhXyIpICsgMik7CisgICAgICAgIGJ1aWxkZXIgPDwgImdsX0ZyYWdEYXRhXyI7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kRGVjaW1hbChpKTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbEZy
YWdEYXRhID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBidWlsZGVy
LCBnbF9GcmFnRGF0YVR5cGUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRFeHRlbnNpb246OlVOREVGSU5FRCk7CisgICAgICAgIGdsRnJhZ0Rh
dGFTbG90cy5wdXNoX2JhY2soZ2xGcmFnRGF0YSk7CisgICAgICAgIGRlY2xhcmVHTEZyYWdkYXRh
U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257Z2xGcmFnRGF0YX0pOwor
ICAgIH0KKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgmcm9vdCksIGRl
Y2xhcmVHTEZyYWdkYXRhU2VxdWVuY2UpOworCisgICAgLy8gQ3JlYXRlIGFuIGludGVybmFsIGds
X0ZyYWdEYXRhIGFycmF5IHR5cGUsIGNvbXBhdGlibGUgd2l0aCBpbmRleGluZyBzeW50YXguCisg
ICAgVFR5cGUgKmdsX0ZyYWdEYXRhVHlwZUFycmF5ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgNCwgMSk7CisgICAgZ2xfRnJhZ0RhdGFUeXBlQXJyYXktPm1ha2VB
cnJheShtYXhEcmF3QnVmZmVycyk7CisgICAgY29uc3QgVFZhcmlhYmxlICpnbEZyYWdEYXRhR2xv
YmFsID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZ2xfRnJh
Z0RhdGEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKKworICAg
IERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgZ2xGcmFnRGF0YUdsb2JhbCk7CisgICAgY29u
c3QgVEludGVybVN5bWJvbCAqb3JpZ2luYWxHTEZyYWdEYXRhID0gRmluZFN5bWJvbE5vZGUoJnJv
b3QsIEltbXV0YWJsZVN0cmluZygiZ2xfRnJhZ0RhdGEiKSk7CisgICAgQVNTRVJUKG9yaWdpbmFs
R0xGcmFnRGF0YSk7CisKKyAgICAvLyBSZXBsYWNlIGdsX0ZyYWdEYXRhKCkgd2l0aCBvdXIgZ2xv
YmFsbHkgZGVmaW5lZCBmcmFnZGF0YQorICAgIGlmICghUmVwbGFjZVZhcmlhYmxlKCZjb21waWxl
ciwgJnJvb3QsICYob3JpZ2luYWxHTEZyYWdEYXRhLT52YXJpYWJsZSgpKSwgZ2xGcmFnRGF0YUds
b2JhbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQXNz
aWduIGVhY2ggYXJyYXkgYXR0cmlidXRlIHRvIGFuIG91dHB1dAorICAgIFRJbnRlcm1CbG9jayAq
aW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpn
bEZyYWdEYXRhU2xvdCAgICAgICAgID0gbmV3IFRJbnRlcm1TeW1ib2woZ2xGcmFnRGF0YVNsb3Rz
W2ldKTsKKyAgICAgICAgVEludGVybVR5cGVkICpnbEZyYWdEYXRhR2xvYmFsU3ltYm9sID0gbmV3
IFRJbnRlcm1TeW1ib2woZ2xGcmFnRGF0YUdsb2JhbCk7CisgICAgICAgIGF1dG8gJmFjY2VzcyAg
ICAgICAgICAgICAgICAgICAgICAgICA9IEFjY2Vzc0luZGV4KCpnbEZyYWdEYXRhR2xvYmFsU3lt
Ym9sLCBpKTsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCA9CisgICAgICAgICAg
ICBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xGcmFnRGF0YVNsb3Qs
ICZhY2Nlc3MpOworICAgICAgICBpbnNlcnRTZXF1ZW5jZS0+YXBwZW5kU3RhdGVtZW50KGFzc2ln
bm1lbnQpOworICAgIH0KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIs
ICZyb290LCBpbnNlcnRTZXF1ZW5jZSwgJnN5bWJvbFRhYmxlKTsKK30KKworQU5HTEVfTk9fRElT
Q0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlEKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJp
dmVyVW5pZm9ybXMpCit7CisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9CisgICAg
ICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0YW5jZUlE
RmllbGQucmF3TmFtZSgpLmRhdGEoKSk7CisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlE
ID0gQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisgICAgcmV0dXJuIFJlcGxh
Y2VWYXJpYWJsZVdpdGhUeXBlZCgmY29tcGlsZXIsICZyb290LCBpbnN0YW5jZUlELCBlbXVJbnN0
YW5jZUlEKTsKK30KKworLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3cG9ydCBmbGlw
cGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3NpdGlvbi55Cisv
LyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBnbF9Q
b3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9uLnkgPSBnbF9Q
b3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBl
bmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3dpenps
ZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVy
LmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1
aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3NpdGlv
blJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIFRWZWN0b3I8aW50PiBz
d2l6emxlT2Zmc2V0WTsKKyAgICBzd2l6emxlT2Zmc2V0WS5wdXNoX2JhY2soMSk7CisgICAgVElu
dGVybVN3aXp6bGUgKnBvc2l0aW9uWSA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwg
c3dpenpsZU9mZnNldFkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBleHByZXNzaW9uICJnbF9Qb3Np
dGlvbi55ICogbmVnRmxpcFkiCisgICAgVEludGVybUJpbmFyeSAqaW52ZXJzZVkgPSBuZXcgVElu
dGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWS0+ZGVlcENvcHkoKSwgJm5lZ0ZsaXBZKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9u
LnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25ZTEhTID0g
cG9zaXRpb25ZLT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0g
bmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWUxIUywgaW52
ZXJzZVkpOworCisgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0
IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigm
Y29tcGlsZXIsICZyb290LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCit9ICAvLyBu
YW1lc3BhY2UKKworVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Qo
c2g6OkdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2hTaGFkZXJTcGVjIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaFNoYWRlck91dHB1dCBvdXRwdXQpCisgICAgOiBUQ29tcGlsZXIodHlw
ZSwgc3BlYywgb3V0cHV0KQore30KKworLy8gc3RhdGljCitjb25zdCBjaGFyICpUcmFuc2xhdG9y
TWV0YWxEaXJlY3Q6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJl
dHVybiBjb25zdGFudF9uYW1lczo6a0NvdmVyYWdlTWFza0VuYWJsZWQucmF3TmFtZSgpLmRhdGEo
KTsKK30KKworLy8gc3RhdGljCitjb25zdCBjaGFyICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6Okdl
dFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0dXJuIGNv
bnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKS5kYXRh
KCk7Cit9CisKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICZyb290KQoreworICAg
IFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFRU
eXBlICpib29sVHlwZSA9IG5ldyBUVHlwZShFYnRCb29sKTsKKyAgICBib29sVHlwZS0+c2V0UXVh
bGlmaWVyKEV2cUNvbnN0KTsKKyAgICBUVmFyaWFibGUgKmRpc2NhcmRFbmFibGVkVmFyID0KKyAg
ICAgICAgbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJp
emF0aW9uRGlzY2FyZEVuYWJsZWQucmF3TmFtZSgpLCBib29sVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5zeW1i
b2xUeXBlKCkpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFy
aWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBu
ZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICAvLyBDcmVhdGUgdmVjNCgtMywgLTMs
IC0zLCAxKToKKyAgICBhdXRvIHZlYzRUeXBlICAgICAgICAgICAgID0gbmV3IFRUeXBlKEVidEZs
b2F0LCA0KTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKnZlYzRBcmdzID0gbmV3IFRJbnRlcm1TZXF1
ZW5jZSgpOworICAgIHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7
CisgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2
ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikpOworICAgIHZlYzRBcmdz
LT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKDEuMGYpKTsKKyAgICBUSW50ZXJtQWdncmVnYXRl
ICpjb25zdFZhckNvbnN0cnVjdG9yID0KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
Q29uc3RydWN0b3IoKnZlYzRUeXBlLCB2ZWM0QXJncyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFz
c2lnbm1lbnQgImdsX1Bvc2l0aW9uID0gdmVjNCgtMywgLTMsIC0zLCAxKSIKKyAgICBUSW50ZXJt
QmluYXJ5ICphc3NpZ25tZW50ID0KKyAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9y
OjpFT3BBc3NpZ24sIHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBjb25zdFZhckNvbnN0cnVjdG9y
KTsKKworICAgIFRJbnRlcm1CbG9jayAqZGlzY2FyZEJsb2NrID0gbmV3IFRJbnRlcm1CbG9jazsK
KyAgICBkaXNjYXJkQmxvY2stPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50KTsKKworICAgIFRJ
bnRlcm1TeW1ib2wgKmRpc2NhcmRFbmFibGVkID0gbmV3IFRJbnRlcm1TeW1ib2woZGlzY2FyZEVu
YWJsZWRWYXIpOworICAgIFRJbnRlcm1JZkVsc2UgKmlmQ2FsbCAgICAgICAgID0gbmV3IFRJbnRl
cm1JZkVsc2UoZGlzY2FyZEVuYWJsZWQsIGRpc2NhcmRCbG9jaywgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCAmcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJs
ZSk7Cit9CisKKy8vIE1ldGFsIG5lZWRzIHRvIGludmVyc2UgdGhlIGRlcHRoIGlmIGRlcHRoUmFu
Z2UgaXMgaXMgcmV2ZXJzZSBvcmRlciwgaS5lLiBkZXB0aCBuZWFyID4gZGVwdGggZmFyCisvLyBU
aGlzIGlzIGFjaGlldmVkIGJ5IG11bHRpcGx5IHRoZSBkZXB0aCB2YWx1ZSB3aXRoIHNjYWxlIHZh
bHVlIHN0b3JlZCBpbgorLy8gZHJpdmVyIHVuaWZvcm0ncyBkZXB0aFJhbmdlLnJlc2VydmVkCiti
b29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykK
K3sKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xf
UG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3NpdGlvblJlZiA9IG5ldyBUSW50ZXJt
U3ltYm9sKHBvc2l0aW9uKTsKKworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WiA9IHsy
fTsKKyAgICBUSW50ZXJtU3dpenpsZSAqcG9zaXRpb25aICAgPSBuZXcgVEludGVybVN3aXp6bGUo
cG9zaXRpb25SZWYsIHN3aXp6bGVPZmZzZXRaKTsKKworICAgIFRJbnRlcm1CaW5hcnkgKnZpZXdw
b3J0WlNjYWxlID0gR2V0RHJpdmVyVW5pZm9ybURlcHRoUmFuZ2VSZXNlcnZlZEZpZWxkUmVmKGRy
aXZlclVuaWZvcm1zKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRp
b24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpTY2FsZSA9
IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCB2aWV3cG9y
dFpTY2FsZSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnog
PSBnbF9Qb3NpdGlvbi56ICogZGVwdGhSYW5nZS5yZXNlcnZlZCIKKyAgICBUSW50ZXJtVHlwZWQg
KnBvc2l0aW9uWkxIUyA9IHBvc2l0aW9uWi0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5
ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBw
b3NpdGlvblpMSFMsIHpTY2FsZSk7CisKKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0
aGlzLCAmcm9vdCwgYXNzaWdubWVudCwgJmdldFN5bWJvbFRhYmxlKCkpOworfQorCit2b2lkIFRy
YW5zbGF0b3JNZXRhbERpcmVjdDo6Y3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9y
bUZpZWxkcygKKyAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gJmZpZWxkc091dCkKK3sKKyAgICAv
LyBBZGQgY292ZXJhZ2UgbWFzayB0byBkcml2ZXIgdW5pZm9ybS4gTWV0YWwgZG9lc24ndCBoYXZl
IGJ1aWx0LWluIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRQorICAgIC8vIGVxdWl2YWxlbnQgZnVu
Y3Rpb25hbGl0eSwgbmVlZHMgdG8gZW11bGF0ZSBpdCB1c2luZyBmcmFnbWVudCBzaGFkZXIncyBb
W3NhbXBsZV9tYXNrXV0gb3V0cHV0CisgICAgLy8gdmFsdWUuCisgICAgVEZpZWxkICpjb3ZlcmFn
ZU1hc2tGaWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNr
RmllbGQucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtOb1NvdXJjZUxvYywga0NvdmVyYWdlTWFza0ZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAg
ZmllbGRzT3V0LnB1c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisKKyAgICBpZiAobUVtdWxh
dGVkSW5zdGFuY2VJRCkKKyAgICB7CisgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZpZWxk
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZC5yYXdO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Tm9Tb3VyY2VMb2MsIGtFbXVJbnN0YW5jZUlERmllbGQuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAg
ZmllbGRzT3V0LnB1c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KK30KKworVElu
dGVybVN3aXp6bGUgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6Z2V0RHJpdmVyVW5pZm9ybU5lZ0Zs
aXBZUmVmKAorICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpIGNvbnN0Cit7Cisg
ICAgLy8gQ3JlYXRlIGEgc3dpenpsZSB0byAibmVnRmxpcFhZLnkiCisgICAgVEludGVybUJpbmFy
eSAqbmVnRmxpcFhZICAgID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a05lZ0ZsaXBYWSk7CisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZID0gezF9OworICAg
IFRJbnRlcm1Td2l6emxlICpuZWdGbGlwWSAgICA9IG5ldyBUSW50ZXJtU3dpenpsZShuZWdGbGlw
WFksIHN3aXp6bGVPZmZzZXRZKTsKKyAgICByZXR1cm4gbmVnRmxpcFk7Cit9CisKK3N0YXRpYyBz
dGQ6OnNldDxJbW11dGFibGVTdHJpbmc+IEdldE1zbEtleXdvcmRzKCkKK3sKKyAgICBzdGQ6OnNl
dDxJbW11dGFibGVTdHJpbmc+IGtleXdvcmRzOworCisgICAga2V5d29yZHMuZW1wbGFjZSgiYWxp
Z25hcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImFsaWdub2YiKTsKKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJhc190eXBlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiYXV0byIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoImNhdGNoIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiY2hhciIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoImNsYXNzIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiY29u
c3RfY2FzdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0YW50Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgiY29uc3RleHByIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGVjbHR5cGUi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZWxldGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJkZXZpY2UiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkeW5hbWljX2Nhc3QiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJlbnVtIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJleHBvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJleHRlcm4iKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmFnbWVudCIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoImZyaWVuZCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImdvdG8iKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJoYWxmIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW5saW5l
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50MTZfdCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoImludDMyX3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQ2NF90Iik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgiaW50OF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7
CisgICAga2V5d29yZHMuZW1wbGFjZSgibG9uZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1h
aW4wIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJtdXRhYmxlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibmFtZXNwYWNlIik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgibmV3Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibm9leGNlcHQi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJudWxscHRyX3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJudWxscHRyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgib3BlcmF0b3IiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJvdmVycmlkZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInByaXZh
dGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcm90ZWN0ZWQiKTsKKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJwdHJkaWZmX3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwdWJsaWMiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJyYXlfZGF0YSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInJl
Z2lzdGVyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJzaWduZWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplX3QiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJzaXplb2YiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGFnZV9p
biIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YXRpY19hc3NlcnQiKTsKKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJzdGF0aWNfY2FzdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YXRpYyIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoInRlbXBsYXRlIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgidGhpcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRocmVhZF9sb2NhbCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInRocmVhZCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdy
b3VwX2ltYWdlYmxvY2siKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRncm91cCIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoInRocm93Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidHJ5
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWRlZiIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInR5cGVpZCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVuYW1lIik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgidWNoYXIiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MTZfdCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgidWludDY0X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50OF90Iik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgidW5pb24iKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1bnNpZ25lZCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaG9ydCIpOworICAgIGtleXdvcmRzLmVtcGxhY2Uo
InVzaW5nIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidmVydGV4Iik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgidmlydHVhbCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgid2NoYXJfdCIpOworCisgICAgcmV0dXJuIGtleXdvcmRzOwor
fQorCitib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxv
Y2sgJnJvb3QsIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFN5bWJv
bFRhYmxlICZzeW1ib2xUYWJsZSA9IGdldFN5bWJvbFRhYmxlKCk7CisgICAgSWRHZW4gaWRHZW47
CisgICAgUHJvZ3JhbVByZWx1ZGVDb25maWcgcHBjOworCisgICAgaWYgKCFXcmFwTWFpbigqdGhp
cywgaWRHZW4sIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKyNpZiAwCisgICAg
aWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAg
aWYgKCFTaGFkZXJCdWlsdGluc1dvcmthcm91bmQodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwg
Y29tcGlsZU9wdGlvbnMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8vIFN0cmlwIGFueSBpbmFjdGl2ZSB2YXJp
YWJsZXMgZnJvbSB0aGUgcHJvZ3JhbS4KKyAgICBpZiAoIVJlbW92ZUluYWN0aXZlSW50ZXJmYWNl
VmFyaWFibGVzKHRoaXMsICZyb290LCBnZXRBdHRyaWJ1dGVzKCksIGdldElucHV0VmFyeWluZ3Mo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE91dHB1dFZh
cmlhYmxlcygpLCBnZXRVbmlmb3JtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0SW50ZXJmYWNlQmxvY2tzKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIG91dCBkZWZhdWx0IHVuaWZvcm1zIGludG8g
YSB1bmlmb3JtIGJsb2NrIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgc2V0L2JpbmRpbmcuCisgICAg
aW50IGRlZmF1bHRVbmlmb3JtQ291bnQgICAgICAgICAgID0gMDsKKyAgICBpbnQgYWdncmVnYXRl
VHlwZXNVc2VkRm9yVW5pZm9ybXMgPSAwOworICAgIGludCBhdG9taWNDb3VudGVyQ291bnQgICAg
ICAgICAgICA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvICZ1bmlmb3JtIDogZ2V0VW5pZm9ybXMo
KSkKKyAgICB7CisgICAgICAgIGlmICghdW5pZm9ybS5pc0J1aWx0SW4oKSAmJiB1bmlmb3JtLmFj
dGl2ZSAmJiAhZ2w6OklzT3BhcXVlVHlwZSh1bmlmb3JtLnR5cGUpKQorICAgICAgICB7CisgICAg
ICAgICAgICArK2RlZmF1bHRVbmlmb3JtQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dW5pZm9ybS5pc1N0cnVjdCgpIHx8IHVuaWZvcm0uaXNBcnJheU9mQXJyYXlzKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgICsrYWdncmVnYXRlVHlwZXNVc2VkRm9yVW5pZm9ybXM7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodW5pZm9ybS5hY3RpdmUgJiYgZ2w6OklzQXRvbWljQ291bnRlclR5
cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgKythdG9taWNDb3VudGVy
Q291bnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWdncmVnYXRlVHlwZXNVc2VkRm9y
VW5pZm9ybXMgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKCFOYW1lRW1iZWRkZWRTdHJ1Y3RVbmlm
b3Jtcyh0aGlzLCAmcm9vdCwgJnN5bWJvbFRhYmxlKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZXdyaXRlU3RydWN0U2Ft
cGxlcnNSZXN1bHQ7CisgICAgICAgIGludCByZW1vdmVkVW5pZm9ybXNDb3VudDsKKworICAgICAg
ICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9VU0VfT0xEX1JFV1JJVEVfU1RSVUNUX1NBTVBMRVJT
KQorICAgICAgICB7CisgICAgICAgICAgICByZXdyaXRlU3RydWN0U2FtcGxlcnNSZXN1bHQgPQor
ICAgICAgICAgICAgICAgIFJld3JpdGVTdHJ1Y3RTYW1wbGVyc09sZCh0aGlzLCAmcm9vdCwgJnN5
bWJvbFRhYmxlLCAmcmVtb3ZlZFVuaWZvcm1zQ291bnQpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnModGhpcywgJnJvb3QsICZzeW1i
b2xUYWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdFVuaWZvcm1Db3VudCAtPSBy
ZW1vdmVkVW5pZm9ybXNDb3VudDsKKworI2lmIDAKKyAgICAgICAgLy8gV2UgbXVzdCBkZWNsYXJl
IHRoZSBzdHJ1Y3QgdHlwZXMgYmVmb3JlIHVzaW5nIHRoZW0uCisgICAgICAgIERlY2xhcmVTdHJ1
Y3RUeXBlc1RyYXZlcnNlciBzdHJ1Y3RUeXBlc1RyYXZlcnNlcihvdXRwdXRNU0wpOworICAgICAg
ICByb290LT50cmF2ZXJzZSgmc3RydWN0VHlwZXNUcmF2ZXJzZXIpOworICAgICAgICBpZiAoIXN0
cnVjdFR5cGVzVHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAg
aWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9TRUFNRlVMX0NVQkVfTUFQX1NBTVBMSU5H
KQorICAgIHsKKyAgICAgICAgaWYgKCFSZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFycmF5KHRo
aXMsICZyb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRTaGFkZXJUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisj
aWYgMAorICAgIC8vIFdyaXRlIGRlZmF1bHQgdW5pZm9ybSBibG9jaworICAgIGlmIChkZWZhdWx0
VW5pZm9ybUNvdW50ID4gMCkKKyAgICB7CisgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5
cGUgPSBnbDo6RnJvbUdMZW51bTxnbDo6U2hhZGVyVHlwZT4oZ2V0U2hhZGVyVHlwZSgpKTsKKyAg
ICAgICAgc2luayA8PCAiXG5zdHJ1Y3QgIiA8PCBrRGVmYXVsdFVuaWZvcm1OYW1lc1tzaGFkZXJU
eXBlXSA8PCAiXG57XG4iOworICAgICAgICBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2Vy
IGRlZmF1bHRUcmF2ZXJzZXIoJnNpbmssIGdldEhhc2hGdW5jdGlvbigpLCAmZ2V0TmFtZU1hcCgp
KTsKKyAgICAgICAgcm9vdC0+dHJhdmVyc2UoJmRlZmF1bHRUcmF2ZXJzZXIpOworICAgICAgICBp
ZiAoIWRlZmF1bHRUcmF2ZXJzZXIudXBkYXRlVHJlZSh0aGlzLCByb290KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc2luayA8PCAi
fTtcbiI7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZv
cm1zID0gKlsmXSgpIHsKKyAgICAgICAgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRF
X1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEFkZENvbXB1dGVEcml2ZXJV
bmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiBhZGRpdGlv
bmFsRmllbGRzOworICAgICAgICAgICAgY3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5p
Zm9ybUZpZWxkcyhhZGRpdGlvbmFsRmllbGRzKTsKKyAgICAgICAgICAgIHJldHVybiBBZGRHcmFw
aGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIocm9vdCwgc3ltYm9sVGFibGUsIGFkZGl0aW9uYWxG
aWVsZHMpOworICAgICAgICB9CisgICAgfSgpOworCisgICAgaWYgKGF0b21pY0NvdW50ZXJDb3Vu
dCA+IDApCisgICAgeworICAgICAgICAvLyBBTkdMRVVuaWZvcm1zLmFjYkJ1ZmZlck9mZnNldHMK
KyAgICAgICAgY29uc3QgVEludGVybUJpbmFyeSAqYWNiQnVmZmVyT2Zmc2V0cyA9CisgICAgICAg
ICAgICBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrQWNiQnVmZmVyT2Zm
c2V0cyk7CisKKyAgICAgICAgaWYgKCFSZXdyaXRlQXRvbWljQ291bnRlcnModGhpcywgJnJvb3Qs
ICZzeW1ib2xUYWJsZSwgYWNiQnVmZmVyT2Zmc2V0cykpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJW
ZXJzaW9uKCkgPj0gMzEwKQorICAgIHsKKyAgICAgICAgLy8gVnVsa2FuIGRvZXNuJ3Qgc3VwcG9y
dCBBdG9taWMgU3RvcmFnZSBhcyBhIFN0b3JhZ2UgQ2xhc3MsIGJ1dCB3ZSd2ZSBzZWVuCisgICAg
ICAgIC8vIGNhc2VzIHdoZXJlIGJ1aWx0aW5zIGFyZSB1c2luZyBpdCBldmVuIHdpdGggbm8gYWN0
aXZlIGF0b21pYyBjb3VudGVycy4KKyAgICAgICAgLy8gVGhpcyBwYXNzIHNpbXBseSByZW1vdmVz
IHRob3NlIGJ1aWx0aW5zIGluIHRoYXQgc2NlbmFyaW8uCisgICAgICAgIGlmICghUmVtb3ZlQXRv
bWljQ291bnRlckJ1aWx0aW5zKHRoaXMsICZyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGdldFNoYWRlclR5cGUo
KSAhPSBHTF9DT01QVVRFX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmICghUmVwbGFjZUdMRGVw
dGhSYW5nZVdpdGhEcml2ZXJVbmlmb3JtKCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisjaWYgMAor
ICAgICAgICAvLyBBZGQgc3BlY2lhbGl6YXRpb24gY29uc3RhbnQgZGVjbGFyYXRpb25zLiAgVGhl
IGRlZmF1bHQgdmFsdWUgb2YgdGhlIHNwZWNpYWxpemF0aW9uCisgICAgICAgIC8vIGNvbnN0YW50
IGlzIGlycmVsZXZhbnQsIGFzIGl0IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgdGhlIHBpcGVs
aW5lLgorICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVf
UkFTVEVSX0VNVUxBVElPTikKKyAgICAgICAgeworICAgICAgICAgICAgc2luayA8PCAibGF5b3V0
KGNvbnN0YW50X2lkPSIKKyAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHZrOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50SWQ6OkxpbmVSYXN0ZXJFbXVsYXRpb24pCisgICAg
ICAgICAgICAgICAgIDw8ICIpIGNvbnN0IGJvb2wgIiA8PCBrTGluZVJhc3RlckVtdWxhdGlvblNw
ZWNDb25zdFZhck5hbWUgPDwgIiA9IGZhbHNlO1xuXG4iOworICAgICAgICB9CisjZW5kaWYKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGJvb2wgdXNlc0luc3RhbmNlSWQgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmdmFyIDogbUF0dHJpYnV0ZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh2YXIuaXNCdWlsdEluKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhci5uYW1lID09ICJnbF9JbnN0YW5jZUlEIikKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVzZXNJbnN0YW5jZUlkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNl
c0luc3RhbmNlSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2Rl
cygKKyAgICAgICAgICAgICAgICBGaW5kTWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2V7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbntCdWlsdEluVmFyaWFibGU6
OmdsX0luc3RhbmNlSUQoKX19KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERlY2xhcmUg
Z2xfRnJhZ0NvbG9yIGFuZCBnbEZyYWdEYXRhIGFzIHdlYmdsX0ZyYWdDb2xvciBhbmQgd2ViZ2xf
RnJhZ0RhdGEKKyAgICAvLyBpZiBpdCdzIGNvcmUgcHJvZmlsZSBzaGFkZXJzIGFuZCB0aGV5IGFy
ZSB1c2VkLgorICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgYm9vbCB1c2VzUG9pbnRDb29yZCAgPSBmYWxzZTsKKyAgICAgICAgYm9v
bCB1c2VzRnJhZ0Nvb3JkICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB1c2VzRnJvbnRGYWNpbmcg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmaW5wdXRWYXJ5aW5n
IDogbUlucHV0VmFyeWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbnB1dFZhcnlp
bmcuaXNCdWlsdEluKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0
VmFyeWluZy5uYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHVzZXNQb2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYXJ5aW5nLm5hbWUgPT0gImdsX0ZyYWdD
b29yZCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0Nv
b3JkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aW5wdXRWYXJ5aW5nLm5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB1c2VzRnJh
Z0NvbG9yID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0ZyYWdEYXRhICA9IGZhbHNlOworICAg
ICAgICBib29sIHVzZXNGcmFnRGVwdGggPSBmYWxzZTsKKyAgICAgICAgZm9yIChjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWluZyA6IG1PdXRwdXRWYXJpYWJsZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLmlzQnVpbHRJbigpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5hbWUgPT0gImdsX0ZyYWdDb2xv
ciIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0NvbG9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0
cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzRnJhZ0RhdGEgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRWYXJ5aW5nLm5hbWUgPT0gImdsX0ZyYWdE
ZXB0aCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0Rl
cHRoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAodXNlc0ZyYWdDb2xvciAmJiB1c2VzRnJhZ0RhdGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2Vz
RnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBBZGRGcmFnQ29sb3JEZWNsYXJhdGlv
bihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdE
YXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIUFkZEZyYWdEYXRhRGVjbGFyYXRpb24o
KnRoaXMsIHJvb3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VzRnJhZ0RlcHRo
KQorICAgICAgICB7CisgICAgICAgICAgICBBZGRGcmFnRGVwdGhEZWNsYXJhdGlvbihyb290LCBz
eW1ib2xUYWJsZSk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBpbGVPcHRp
b25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uRlModGhpcywgY29tcGlsZU9w
dGlvbnMsIHNpbmssIHJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZHJpdmVyVW5pZm9ybXMsIHVzZXNGcmFnQ29vcmQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgYm9vbCB1c2VQcmVSb3RhdGlvbiA9IGNvbXBpbGVP
cHRpb25zICYgU0hfQUREX1BSRV9ST1RBVElPTjsKKworICAgICAgICBpZiAodXNlc1BvaW50Q29v
cmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgJmZsaXBYWSAgICAgICA9
ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrTmVnRmxpcFhZKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICZwaXZvdCA9ICpDcmVhdGVGbG9hdE5vZGUo
MC41Zik7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorICAgICAg
ICAgICAgICAgIHVzZVByZVJvdGF0aW9uID8gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJV
bmlmb3Jtcywga0ZyYWdSb3RhdGlvbikgOiBudWxscHRyOworICAgICAgICAgICAgaWYgKCFSb3Rh
dGVBbmRGbGlwQnVpbHRpblZhcmlhYmxlKCp0aGlzLCByb290LCAqR2V0TWFpblNlcXVlbmNlKHJv
b3QpLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9pbnRDb29yZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUsIHBpdm90
LCBmcmFnUm90YXRpb24pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERlY2xhcmVSaWdodEJlZm9yZU1haW4o
cm9vdCwgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9pbnRDb29yZCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1c2VzRnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIUlu
c2VydEZyYWdDb29yZENvcnJlY3Rpb24oKnRoaXMsIGNvbXBpbGVPcHRpb25zLCByb290LCAqR2V0
TWFpblNlcXVlbmNlKHJvb3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZv
cmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb29yZCgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKmZsaXBYWSA9IENyZWF0
ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtGbGlwWFkpOworICAgICAgICAgICAg
VEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAgICAgICAgICAgICB1c2VQcmVSb3Rh
dGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtGcmFnUm90YXRp
b24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUmV3cml0ZURmZHkodGhpcywgJnJvb3Qs
IHN5bWJvbFRhYmxlLCBnZXRTaGFkZXJWZXJzaW9uKCksIGZsaXBYWSwgZnJhZ1JvdGF0aW9uKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0Zyb250RmFjaW5nKQorICAgICAgICB7
CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFi
bGU6OmdsX0Zyb250RmFjaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgRW1pdEVhcmx5RnJh
Z21lbnRUZXN0c0dMU0woKnRoaXMsIHNpbmspOworICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFk
ZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIERlY2xhcmVSaWdo
dEJlZm9yZU1haW4ocm9vdCwgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisKKyAg
ICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZyb290LCBCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50
U2l6ZSgpLT5uYW1lKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZv
cmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50U2l6ZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpn
bF9WZXJ0ZXhJbmRleCgpLT5uYW1lKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVJl
cGxhY2VWYXJpYWJsZSh0aGlzLCAmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9WZXJ0ZXhJbmRl
eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtnbF9WZXJ0ZXhJbmRleE1l
dGFsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsIGtnbF9W
ZXJ0ZXhJbmRleE1ldGFsKTsKKyAgICAgICAgfQorCisjaWYgMAorICAgICAgICBpZiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVfUkFTVEVSX0VNVUxBVElPTikKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFBZGRCcmVzZW5oYW1FbXVsYXRpb25WUyh0aGlzLCByb290
LCAmc3ltYm9sVGFibGUsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBBZGQgYSBtYWNybyB0byBkZWNsYXJlIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgor
ICAgICAgICBzaW5rIDw8ICJAQCBYRkItREVDTCBAQFxuXG4iOworI2VuZGlmCisKKyAgICAgICAg
Ly8gQXBwZW5kIGEgbWFjcm8gZm9yIHRyYW5zZm9ybSBmZWVkYmFjayBzdWJzdGl0dXRpb24gcHJp
b3IgdG8gbW9kaWZ5aW5nIGRlcHRoLgorICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclRy
YW5zZm9ybUZlZWRiYWNrT3V0cHV0VG9NYWluKCp0aGlzLCByb290KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VhcmNoIGZv
ciB0aGUgZ2xfQ2xpcERpc3RhbmNlIHVzYWdlLCBpZiBpdHMgdXNlZCwgd2UgbmVlZCB0byBkbyBz
b21lIHJlcGxhY2VtZW50cy4KKyAgICAgICAgYm9vbCB1c2VDbGlwRGlzdGFuY2UgPSBmYWxzZTsK
KyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWluZyA6IG1PdXRw
dXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dFZhcnlpbmcubmFt
ZSA9PSAiZ2xfQ2xpcERpc3RhbmNlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1
c2VDbGlwRGlzdGFuY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZUNsaXBEaXN0YW5jZSAmJiAhUmVwbGFj
ZUNsaXBEaXN0YW5jZUFzc2lnbm1lbnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLCAmcm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrQ2xpcERp
c3RhbmNlc0VuYWJsZWQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0cmFuc2Zvcm1EZXB0aEJlZm9yZUNvcnJlY3Rpb24o
cm9vdCwgZHJpdmVyVW5pZm9ybXMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlckRlcHRoQ29y
cmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoY29tcGlsZU9wdGlvbnMgJiBTSF9B
RERfUFJFX1JPVEFUSU9OKSAhPSAwICYmCisgICAgICAgICAgICAhQXBwZW5kUHJlUm90YXRpb24o
KnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUo
KSA9PSBHTF9HRU9NRVRSWV9TSEFERVIpCisgICAgeworICAgICAgICBXcml0ZUdlb21ldHJ5U2hh
ZGVyTGF5b3V0UXVhbGlmaWVycygKKyAgICAgICAgICAgIHNpbmssIGdldEdlb21ldHJ5U2hhZGVy
SW5wdXRQcmltaXRpdmVUeXBlKCksIGdldEdlb21ldHJ5U2hhZGVySW52b2NhdGlvbnMoKSwKKyAg
ICAgICAgICAgIGdldEdlb21ldHJ5U2hhZGVyT3V0cHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9t
ZXRyeVNoYWRlck1heFZlcnRpY2VzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBBU1NFUlQoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0NPTVBVVEVfU0hBREVSKTsKKyAgICAgICAg
RW1pdFdvcmtHcm91cFNpemVHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisKKyAgICBpZiAoZ2V0
U2hhZGVyVHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBhdXRvICZu
ZWdGbGlwWSA9ICpnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMpOwor
CisgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIUVtdWxhdGVJbnN0YW5jZUlEKCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllD
b3JyZWN0aW9uVG9NYWluKCp0aGlzLCByb290LCBuZWdGbGlwWSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaW5zZXJ0UmFz
dGVyaXphdGlvbkRpc2NhcmRMb2dpYyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZUFTVCgmcm9v
dCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdy
aXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBHZXRNc2xLZXl3b3JkcygpKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVJlZHVjZUludGVyZmFj
ZUJsb2NrcygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zKCp0aGlzLCBy
b290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGlzIHRoZSBsYXJnZXN0IHNpemUgcmVxdWlyZWQgdG8gcGFzcyBhbGwgdGhlIHRlc3RzIGluCisg
ICAgLy8gKGRFUVAtR0xFUzMuZnVuY3Rpb25hbC5zaGFkZXJzLmxhcmdlX2NvbnN0YW50X2FycmF5
cykKKyAgICAvLyBUaGlzIHZhbHVlIGNvdWxkIGluIHByaW5jaXBsZSBiZSBzbWFsbGVyLgorICAg
IGNvbnN0IHNpemVfdCBob2lzdFRocmVzaG9sZFNpemUgPSAyNTY7CisgICAgaWYgKCFIb2lzdENv
bnN0YW50cygqdGhpcywgcm9vdCwgaWRHZW4sIGhvaXN0VGhyZXNob2xkU2l6ZSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW52YXJpYW50cyBpbnZhcmlhbnRz
OworICAgIGlmICghUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKCp0aGlzLCByb290LCBpbnZh
cmlhbnRzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTeW1i
b2xFbnYgc3ltYm9sRW52KCp0aGlzLCByb290KTsKKworICAgIGlmICghQWRkRXhwbGljaXRUeXBl
Q2FzdHMoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgUGlwZWxpbmVTdHJ1Y3RzIHBpcGVsaW5lU3RydWN0czsKKyAgICBp
ZiAoIVJld3JpdGVQaXBlbGluZXMoKnRoaXMsIHJvb3QsIGlkR2VuLCBkcml2ZXJVbmlmb3Jtcywg
c3ltYm9sRW52LCBpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGlu
ZVN0cnVjdHMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zKCp0aGlzLCBzeW1ib2xFbnYsIGlkR2VuLCBy
b290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVJl
d3JpdGVDYXNlRGVjbGFyYXRpb25zKCp0aGlzLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNl
cygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIVJld3JpdGVPdXRBcmdzKCp0aGlzLCByb290LCBzeW1ib2xFbnYp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghVG9wb3Nv
cnRTdHJ1Y3RzKCp0aGlzLCBzeW1ib2xFbnYsIHJvb3QsIHBwYykpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFFbWl0TWV0YWwoKnRoaXMsIHJvb3QsIGlk
R2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVudiwgcHBjKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQodmFsaWRhdGVBU1Qo
JnJvb3QpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRyYW5zbGF0b3JNZXRhbERp
cmVjdDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGljcyAq
cGVyZkRpYWdub3N0aWNzKQoreworICAgIGlmICghcm9vdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBUSW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1Npbmso
KS5vYmo7CisKKyAgICBib29sIHByZWNpc2lvbkVtdWxhdGlvbiA9IGZhbHNlOworICAgIGlmICgh
ZW11bGF0ZVByZWNpc2lvbklmTmVlZGVkKHJvb3QsIHNpbmssICZwcmVjaXNpb25FbXVsYXRpb24s
IFNIX0dMU0xfVlVMS0FOX09VVFBVVCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisjaWYgMAorICAgIGJvb2wgZW5hYmxlUHJlY2lzaW9uID0gKChjb21waWxlT3B0aW9u
cyAmIFNIX0lHTk9SRV9QUkVDSVNJT05fUVVBTElGSUVSUykgPT0gMCk7CisKKyAgICBUT3V0cHV0
TVNMIG91dHB1dE1TTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJUeXBlKCksIGdldFNoYWRlclZlcnNpb24oKSwgZ2V0
T3V0cHV0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbkVtdWxhdGlv
biwgZW5hYmxlUHJlY2lzaW9uLCBjb21waWxlT3B0aW9ucyk7CisjZW5kaWYKKworICAgIGlmICgh
dHJhbnNsYXRlSW1wbCgqcm9vdCwgY29tcGlsZU9wdGlvbnMpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworI2lmIDAKKyAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRl
ci4KKyAgICByb290LT50cmF2ZXJzZShvdXRwdXRNU0wpOworI2VuZGlmCisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KK2Jvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpzaG91bGRGbGF0dGVuUHJhZ21h
U3RkZ2xJbnZhcmlhbnRBbGwoKQoreworICAgIC8vIE5vdCBuZWNjZXNhcnkgZm9yIE1TTCB0cmFu
c2Zvcm1hdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
ZmNiMzA2NzE5NzdiZjU4MWI2YWMyNTczMjFjN2QxNmY2NmZjNTZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgKQEAgLTAsMCArMSwxMzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBU
T3V0cHV0TVNMOworCit0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxzaXplX3QsIHN0ZDo6c3Ry
aW5nPiBvcmlnaW5hbE5hbWVzTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIHNpemVfdD4gc2FtcGxlckJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB0ZXh0dXJlQmluZGluZ01hcDsKK3R5cGVkZWYgc3Rk
Ojp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHVuaWZvcm1CdWZmZXJCaW5kaW5n
TWFwOworCitjbGFzcyBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uCit7CisgIHB1YmxpYzoKKyAg
ICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkge30KKyAgICB+VHJhbnNsYXRvck1ldGFsUmVm
bGVjdGlvbigpIHt9CisKKyAgICB2b2lkIGFkZE9yaWdpbmFsTmFtZShjb25zdCBzaXplX3QgaWQs
IGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5p
bnNlcnQoe2lkLCBuYW1lfSk7CisgICAgfQorICAgIHZvaWQgYWRkU2FtcGxlckJpbmRpbmcoY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHNpemVfdCBzYW1wbGVyQmluZGluZykKKyAgICB7CisgICAg
ICAgIHNhbXBsZXJCaW5kaW5ncy5pbnNlcnQoe25hbWUsIHNhbXBsZXJCaW5kaW5nfSk7CisgICAg
fQorICAgIHZvaWQgYWRkVGV4dHVyZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHNp
emVfdCB0ZXh0dXJlQmluZGluZykKKyAgICB7CisgICAgICAgIHRleHR1cmVCaW5kaW5ncy5pbnNl
cnQoe25hbWUsIHRleHR1cmVCaW5kaW5nfSk7CisgICAgfQorICAgIHZvaWQgYWRkVW5pZm9ybUJ1
ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHNpemVfdCB1bmlmb3JtQnVmZmVy
QmluZGluZykKKyAgICB7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5pbnNlcnQoe25h
bWUsIHVuaWZvcm1CdWZmZXJCaW5kaW5nfSk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIGdldE9y
aWdpbmFsTmFtZShjb25zdCBzaXplX3QgaWQpIHsgcmV0dXJuIG9yaWdpbmFsTmFtZXMuYXQoaWQp
OyB9CisgICAgc2FtcGxlckJpbmRpbmdNYXAgZ2V0U2FtcGxlckJpbmRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gc2FtcGxlckJpbmRpbmdzOyB9CisgICAgdGV4dHVyZUJpbmRpbmdNYXAgZ2V0VGV4dHVy
ZUJpbmRpbmdzKCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZUJpbmRpbmdzOyB9CisgICAgdW5pZm9y
bUJ1ZmZlckJpbmRpbmdNYXAgZ2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QgeyByZXR1
cm4gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzOyB9CisgICAgc2l6ZV90IGdldFNhbXBsZXJCaW5kaW5n
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IHNhbXBsZXJCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gc2FtcGxlckJp
bmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VGV4dHVyZUJp
bmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGl0ID0gdGV4dHVyZUJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdCAhPSB0ZXh0
dXJlQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CisgICAgfQorICAgIHNpemVfdCBnZXRVbmlm
b3JtQnVmZmVyQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGF1dG8gaXQgPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAg
ICAgaWYgKGl0ICE9IHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5lbmQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKDAp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAg
ICB9CisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBvcmlnaW5hbE5hbWVzLmNsZWFy
KCk7CisgICAgICAgIHNhbXBsZXJCaW5kaW5ncy5jbGVhcigpOworICAgICAgICB0ZXh0dXJlQmlu
ZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmNsZWFyKCk7Cisg
ICAgfQorCisgIHByaXZhdGU6CisgICAgb3JpZ2luYWxOYW1lc01hcCBvcmlnaW5hbE5hbWVzOwor
ICAgIHNhbXBsZXJCaW5kaW5nTWFwIHNhbXBsZXJCaW5kaW5nczsKKyAgICB0ZXh0dXJlQmluZGlu
Z01hcCB0ZXh0dXJlQmluZGluZ3M7CisgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmdNYXAgdW5pZm9y
bUJ1ZmZlckJpbmRpbmdzOworfTsKKworY2xhc3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0IDogcHVi
bGljIFRDb21waWxlcgoreworICBwdWJsaWM6CisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0KHNo
OjpHTGVudW0gdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7
CisKKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKyAgICBUcmFuc2xhdG9yTWV0YWxEaXJlY3Qg
KmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQor
I2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENv
bnN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWRDb25zdE5hbWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlE
KGJvb2wgZSkgeyBtRW11bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorICAgIFRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24gKmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSB7IHJldHVybiAmdHJh
bnNsYXRvck1ldGFsUmVmbGVjdGlvbjsgfQorCisgIHByb3RlY3RlZDoKKyAgICBib29sIHRyYW5z
bGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0
aW9ucyBjb21waWxlT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZURpYWdu
b3N0aWNzICpwZXJmRGlhZ25vc3RpY3MpIG92ZXJyaWRlOworCisgICAgQU5HTEVfTk9fRElTQ0FS
RCBib29sIHRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZyb290LCBTaENvbXBpbGVPcHRpb25z
IGNvbXBpbGVPcHRpb25zKTsKKworICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBzaG91bGRGbGF0
dGVuUHJhZ21hU3RkZ2xJbnZhcmlhbnRBbGwoKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJ
U0NBUkQgYm9vbCB0cmFuc2Zvcm1EZXB0aEJlZm9yZUNvcnJlY3Rpb24oVEludGVybUJsb2NrICZy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jtcyk7CisgICAgQU5HTEVfTk9fRElT
Q0FSRCBib29sIGluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICZy
b290KTsKKworICAgIHZvaWQgY3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9ybUZp
ZWxkcyhzdGQ6OnZlY3RvcjxURmllbGQgKj4gJmZpZWxkc091dCk7CisKKyAgICBBTkdMRV9OT19E
SVNDQVJEIFRJbnRlcm1Td2l6emxlICpnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoCisgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpIGNvbnN0OworCisgICAgYm9vbCBt
RW11bGF0ZWRJbnN0YW5jZUlEID0gZmFsc2U7CisKKyAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKK307CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzQx
MTgwYTkwMDQ0MjFlYmI1MzJmZjE4YzMzNGQ4NmE2ZTZjZGM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcApAQCAtMCwwICsxLDk1IEBACisv
LworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3Bh
Y2Ugc2g7CisKK25hbWVzcGFjZQoreworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJt
UmVidWlsZAoreworICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAg
UmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAg
ICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihz
eW1ib2xFbnYpCisgICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJ
bnRlcm1BZ2dyZWdhdGUgJmNhbGxOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3Qg
c2l6ZV90IGFyZ0NvdW50ID0gY2FsbE5vZGUuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICBjb25z
dCBUVHlwZSAmcmV0VHlwZSAgPSBjYWxsTm9kZS5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKGNh
bGxOb2RlLmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKElzU2Nh
bGFyQmFzaWNUeXBlKHJldFR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChhcmdDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkICZhcmcgICA9IEdldEFyZyhjYWxsTm9kZSwgMCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJnVHlwZS5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29lcmNlU2ltcGxlKHJldFR5cGUsIFN1YlZl
Y3RvcihhcmcsIDAsIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJldFR5cGUuaXNWZWN0b3Io
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT0gMSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmYXJnICAg
PSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSBh
cmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUu
aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3IoYXJnLCAwLCByZXRUeXBl
LmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyAr
K2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQg
JmFyZyA9IEdldEFyZyhjYWxsTm9kZSwgaSk7CisgICAgICAgICAgICAgICAgICAgIFNldEFyZyhj
YWxsTm9kZSwgaSwgQ29lcmNlU2ltcGxlKHJldFR5cGUuZ2V0QmFzaWNUeXBlKCksIGFyZykpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJl
dFR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
Q291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJldFR5cGUuZ2V0Q29scygpICE9IGFyZ1R5cGUuZ2V0Q29s
cygpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VHlwZS5nZXRSb3dzKCkgIT0g
YXJnVHlwZS5nZXRSb3dzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGVtcGxhdGVBcmcgdGVtcGxhdGVBcmdzW10gPSB7cmV0VHlwZS5n
ZXRDb2xzKCksIHJldFR5cGUuZ2V0Um93cygpfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZSgiY2FzdCIpLCByZXRUeXBlLCAqbmV3IFRJbnRlcm1TZXF1
ZW5jZXsmYXJnfSwgMiwgdGVtcGxhdGVBcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjYWxsTm9kZTsKKyAgICB9Cit9OworCit9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OkFkZEV4cGxpY2l0VHlwZUNhc3RzKFRD
b21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xF
bnYpCit7CisgICAgUmV3cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAg
aWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVD
YXN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwMzQyODg5YTZmMmU2ZWNjNzE1YTUyNzU3MzgxMmMyMWVjOTJl
N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMu
aApAQCAtMCwwICsxLDI0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQRUNBU1RTX0hfCisjZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQ
RUNBU1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3Jh
bVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEFkZHMgZXhwbGlj
aXQgdHlwZSBjYXN0cyBpbnRvIHRoZSBBU1Qgd2hlcmUgY2FzdGluZyBpcyBkb25lIGltcGxpY2l0
bHkuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQWRkRXhwbGljaXRUeXBlQ2FzdHMoVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBM
SUNJVFRZUEVDQVNUU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiYTRlYzc3ZGViZGNm
YjcxZjUwNTMxNjNkNmFkYmIxZGE4YTRiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQXN0SGVscGVycy5jcHAKQEAgLTAsMCArMSw0NzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
IDxjc3RyaW5nPgorI2luY2x1ZGUgPG51bWVyaWM+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4K
KyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0RlY2xhcmF0aW9uIHNoOjpWaWV3RGVj
bGFyYXRpb24oVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVj
bE5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgIFRJbnRlcm1Ob2RlICpjaGlsZE5vZGUg
PSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUoMCk7CisgICAgQVNTRVJUKGNoaWxkTm9kZSk7CisgICAg
VEludGVybVN5bWJvbCAqc3ltYm9sTm9kZTsKKyAgICBpZiAoKHN5bWJvbE5vZGUgPSBjaGlsZE5v
ZGUtPmdldEFzU3ltYm9sTm9kZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiB7KnN5bWJvbE5v
ZGUsIG51bGxwdHJ9OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUSW50ZXJtQmlu
YXJ5ICppbml0Tm9kZSA9IGNoaWxkTm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIEFT
U0VSVChpbml0Tm9kZSk7CisgICAgICAgIEFTU0VSVChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3Bl
cmF0b3I6OkVPcEluaXRpYWxpemUpOworICAgICAgICBzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdl
dExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIEFTU0VSVChzeW1ib2xOb2RlKTsK
KyAgICAgICAgcmV0dXJuIHsqc3ltYm9sTm9kZSwgaW5pdE5vZGUtPmdldFJpZ2h0KCl9OworICAg
IH0KK30KKworY29uc3QgVFZhcmlhYmxlICZzaDo6Q3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQoreworICAgIGF1dG8g
KnR5cGUgPSBuZXcgVFR5cGUoJnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgYXV0byAqdmFyICA9IG5l
dyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIiIpLCB0eXBlLCBTeW1i
b2xUeXBlOjpFbXB0eSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK2NvbnN0IFRWYXJpYWJsZSAm
c2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAmc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOYW1lICZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVFNwYW48Y29uc3QgdW5zaWduZWQgaW50PiAqYXJyYXlT
aXplcykKK3sKKyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIGZhbHNlKTsK
KyAgICB0eXBlLT5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsKKyAgICBpZiAoYXJyYXlTaXplcykK
KyAgICB7CisgICAgICAgIHR5cGUtPm1ha2VBcnJheXMoKmFycmF5U2l6ZXMpOworICAgIH0KKyAg
ICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCks
IHR5cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICByZXR1cm4gKnZhcjsKK30KKworc3RhdGlj
IHZvaWQgQWNxdWlyZUZ1bmN0aW9uRXh0cmFzKFRGdW5jdGlvbiAmZGVzdCwgY29uc3QgVEZ1bmN0
aW9uICZzcmMpCit7CisgICAgaWYgKHNyYy5pc0RlZmluZWQoKSkKKyAgICB7CisgICAgICAgIGRl
c3Quc2V0RGVmaW5lZCgpOworICAgIH0KKworICAgIGlmIChzcmMuaGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKSkKKyAgICB7CisgICAgICAgIGRlc3Quc2V0SGFzUHJvdG90eXBlRGVjbGFyYXRpb24o
KTsKKyAgICB9Cit9CisKK1RJbnRlcm1TZXF1ZW5jZSAmc2g6OkNsb25lU2VxdWVuY2VBbmRQcmVw
ZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAg
ICBhdXRvICpuZXdTZXEgPSBuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgbmV3U2VxLT5wdXNo
X2JhY2soJm5vZGUpOworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqb2xkTm9kZSA6IHNlcSkKKyAg
ICB7CisgICAgICAgIG5ld1NlcS0+cHVzaF9iYWNrKG9sZE5vZGUpOworICAgIH0KKworICAgIHJl
dHVybiAqbmV3U2VxOworfQorCit2b2lkIHNoOjpBZGRQYXJhbWV0ZXJzRnJvbShURnVuY3Rpb24g
JmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQoreworICAgIGNvbnN0IHNpemVfdCBwYXJhbUNv
dW50ID0gc3JjLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyID0gc3Jj
LmdldFBhcmFtKGkpOworICAgICAgICBkZXN0LmFkZFBhcmFtZXRlcih2YXIpOworICAgIH0KK30K
KworY29uc3QgVEZ1bmN0aW9uICZzaDo6Q2xvbmVGdW5jdGlvbihUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xk
RnVuYykKK3sKKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworCisgICAgTmFtZSBuZXdOYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZShO
YW1lKG9sZEZ1bmMpKTsKKworICAgIGF1dG8gJm5ld0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3lt
Ym9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1lLnN5bWJvbFR5cGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZEZ1bmMuZ2V0UmV0dXJuVHlwZSgpLCBv
bGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsKKworICAgIEFjcXVpcmVGdW5j
dGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKyAgICBBZGRQYXJhbWV0ZXJzRnJvbShuZXdG
dW5jLCBvbGRGdW5jKTsKKworICAgIHJldHVybiBuZXdGdW5jOworfQorCitjb25zdCBURnVuY3Rp
b24gJnNoOjpDbG9uZUZ1bmN0aW9uQW5kUHJlcGVuZFBhcmFtKFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJm5ld1BhcmFtKQor
eworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVm
aW5lZCB8fAorICAgICAgICAgICBvbGRGdW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0
ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAmbmV3
RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5l
d05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
b2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZl
Y3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOwor
ICAgIG5ld0Z1bmMuYWRkUGFyYW1ldGVyKCZuZXdQYXJhbSk7CisgICAgQWRkUGFyYW1ldGVyc0Zy
b20obmV3RnVuYywgb2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3Qg
VEZ1bmN0aW9uICZzaDo6Q2xvbmVGdW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29u
c3QgVFZhcmlhYmxlICo+ICZuZXdQYXJhbXMpCit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9s
VHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkIHx8CisgICAgICAgICAgIG9sZEZ1bmMu
c3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworCisgICAgTmFtZSBu
ZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFtZShOYW1lKG9sZEZ1bmMpKSA6IE5h
bWUob2xkRnVuYyk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5bWJv
bFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xk
RnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVuY3Rp
b25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVu
Yywgb2xkRnVuYyk7CisgICAgZm9yIChhdXRvICpwYXJhbSA6IG5ld1BhcmFtcykKKyAgICB7Cisg
ICAgICAgIG5ld0Z1bmMuYWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZzaDo6Q2xvbmVGdW5jdGlvbkFuZENoYW5n
ZVJldHVyblR5cGUoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJm5ld1JldHVybikKK3sKKyAgICBBU1NF
UlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworCisg
ICAgTmFtZSBuZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFtZShOYW1lKG9sZEZ1
bmMpKSA6IE5hbWUob2xkRnVuYyk7CisKKyAgICBhdXRvICpuZXdSZXR1cm5UeXBlID0gbmV3IFRU
eXBlKCZuZXdSZXR1cm4sIHRydWUpOworICAgIGF1dG8gJm5ld0Z1bmMgICAgICAgPSAqbmV3IFRG
dW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1lLnN5bWJvbFR5
cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmV0dXJuVHlwZSwg
b2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVu
Y3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3
RnVuYywgb2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworVEludGVybVR5cGVk
ICZzaDo6R2V0QXJnKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCkK
K3sKKyAgICBBU1NFUlQoaW5kZXggPCBjYWxsLmdldENoaWxkQ291bnQoKSk7CisgICAgYXV0byAq
YXJnID0gY2FsbC5nZXRDaGlsZE5vZGUoaW5kZXgpOworICAgIEFTU0VSVChhcmcpOworICAgIGF1
dG8gKnRhcmcgPSBhcmctPmdldEFzVHlwZWQoKTsKKyAgICBBU1NFUlQodGFyZyk7CisgICAgcmV0
dXJuICp0YXJnOworfQorCit2b2lkIHNoOjpTZXRBcmcoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwg
c2l6ZV90IGluZGV4LCBUSW50ZXJtVHlwZWQgJmFyZykKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBj
YWxsLmdldENoaWxkQ291bnQoKSk7CisgICAgKCpjYWxsLmdldFNlcXVlbmNlKCkpW2luZGV4XSA9
ICZhcmc7Cit9CisKK2ludCBzaDo6R2V0RmllbGRJbmRleChjb25zdCBUU3RydWN0dXJlICZzdHJ1
Y3R1cmUsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQoreworICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZpZWxkTGlzdCA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgeworICAgICAgICBp
ZiAoZmllbGQtPm5hbWUoKSA9PSBmaWVsZE5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9CisgICAgICAgICsraTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7
Cit9CisKK1RJbnRlcm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUgJnN0
cnVjdEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAg
ICByZXR1cm4gQWNjZXNzRmllbGQoKm5ldyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RJbnN0YW5jZVZh
ciksIGZpZWxkTmFtZSk7Cit9CisKK1RJbnRlcm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZChUSW50
ZXJtVHlwZWQgJm9iamVjdCwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7Cisg
ICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gb2JqZWN0LmdldFR5cGUoKS5nZXRTdHJ1
Y3QoKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKTsKKworICAgIGNvbnN0IGludCBpbmRleCA9IEdl
dEZpZWxkSW5kZXgoKnN0cnVjdHVyZSwgZmllbGROYW1lKTsKKyAgICBBU1NFUlQoaW5kZXggPj0g
MCk7CisgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkQnlJbmRleChvYmplY3QsIGluZGV4KTsKK30KKwor
VEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQgJm9iamVj
dCwgaW50IGluZGV4KQoreworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBvYmplY3QuZ2V0VHlwZSgpOworICAgIEFTU0VSVCghdHlwZS5p
c0FycmF5KCkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3Ry
dWN0KCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgQVNTRVJUKDAgPD0gaW5kZXgpOwor
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IHN0cnVjdHVyZS0+ZmllbGRz
KCkuc2l6ZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuICpuZXcgVEludGVybUJpbmFyeSgKKyAg
ICAgICAgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdCwgJm9iamVjdCwKKyAgICAgICAg
bmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcg
VFR5cGUoVEJhc2ljVHlwZTo6RWJ0SW50KSkpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNj
ZXNzSW5kZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpCit7CisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGlu
ZGV4YWJsZU5vZGUuZ2V0VHlwZSgpOworICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSB8fCB0eXBl
LmlzVmVjdG9yKCkgfHwgdHlwZS5pc01hdHJpeCgpKTsKKyNlbmRpZgorCisgICAgYXV0byAqYWNj
ZXNzTm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KAorICAgICAgICBUT3BlcmF0b3I6OkVPcEluZGV4
RGlyZWN0LCAmaW5kZXhhYmxlTm9kZSwKKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0SW50
KSkpOworICAgIHJldHVybiAqYWNjZXNzTm9kZTsKK30KKworVEludGVybVR5cGVkICZzaDo6QWNj
ZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmluZGV4KQoreworICAgIGlm
IChpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBBY2Nlc3NJbmRleChub2RlLCAqaW5kZXgp
OworICAgIH0KKyAgICByZXR1cm4gbm9kZTsKK30KKworVEludGVybVR5cGVkICZzaDo6U3ViVmVj
dG9yKFRJbnRlcm1UeXBlZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKQoreworICAg
IEFTU0VSVCh2ZWN0b3JOb2RlLmdldFR5cGUoKS5pc1ZlY3RvcigpKTsKKyAgICBBU1NFUlQoMCA8
PSBiZWdpbik7CisgICAgQVNTRVJUKGVuZCA8PSA0KTsKKyAgICBBU1NFUlQoYmVnaW4gPD0gZW5k
KTsKKyAgICBpZiAoYmVnaW4gPT0gMCAmJiBlbmQgPT0gdmVjdG9yTm9kZS5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB2ZWN0b3JOb2RlOworICAgIH0K
KyAgICBUVmVjdG9yPGludD4gb2Zmc2V0cyhzdGF0aWNfY2FzdDxzaXplX3Q+KGVuZCAtIGJlZ2lu
KSk7CisgICAgc3RkOjppb3RhKG9mZnNldHMuYmVnaW4oKSwgb2Zmc2V0cy5lbmQoKSwgYmVnaW4p
OworICAgIGF1dG8gKnN3aXp6bGUgPSBuZXcgVEludGVybVN3aXp6bGUoJnZlY3Rvck5vZGUsIG9m
ZnNldHMpOworICAgIHJldHVybiAqc3dpenpsZTsKK30KKworYm9vbCBzaDo6SXNTY2FsYXJCYXNp
Y1R5cGUoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBIYXNTY2FsYXJC
YXNpY1R5cGUodHlwZSk7Cit9CisKK2Jvb2wgc2g6OklzVmVjdG9yQmFzaWNUeXBlKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUp
OworfQorCitib29sIHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUoVEJhc2ljVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RG91YmxlOgorICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidEludDoKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAg
IHJldHVybiBIYXNTY2FsYXJCYXNpY1R5cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIEluaXRUeXBlKFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIGF1dG8gc2l6ZXMgPSB0eXBlLmdldEFycmF5U2l6ZXMoKTsKKyAg
ICAgICAgdHlwZS50b0FycmF5QmFzZVR5cGUoKTsKKyAgICAgICAgdHlwZS5tYWtlQXJyYXlzKHNp
emVzKTsKKyAgICB9Cit9CisKK1RUeXBlICZzaDo6Q2xvbmVUeXBlKGNvbnN0IFRUeXBlICZ0eXBl
KQoreworICAgIGF1dG8gJmNsb25lID0gKm5ldyBUVHlwZSh0eXBlKTsKKyAgICBJbml0VHlwZShj
bG9uZSk7CisgICAgcmV0dXJuIGNsb25lOworfQorCitUVHlwZSAmc2g6OklubmVybW9zdFR5cGUo
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgYXV0byAmaW5uZXIgPSAqbmV3IFRUeXBlKHR5cGUp
OworICAgIGlubmVyLnRvQXJyYXlCYXNlVHlwZSgpOworICAgIEluaXRUeXBlKGlubmVyKTsKKyAg
ICByZXR1cm4gaW5uZXI7Cit9CisKK1RUeXBlICZzaDo6RHJvcENvbHVtbnMoY29uc3QgVFR5cGUg
Jm1hdHJpeFR5cGUpCit7CisgICAgQVNTRVJUKG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7CisgICAg
QVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShtYXRyaXhUeXBlKSk7CisgICAgY29uc3QgY2hhciAq
bWFuZ2xlZE5hbWUgPSBudWxscHRyOworCisgICAgYXV0byAmdmVjdG9yVHlwZSA9CisgICAgICAg
ICpuZXcgVFR5cGUobWF0cml4VHlwZS5nZXRCYXNpY1R5cGUoKSwgbWF0cml4VHlwZS5nZXRQcmVj
aXNpb24oKSwgbWF0cml4VHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAgICAgICAgICAgICBt
YXRyaXhUeXBlLmdldFJvd3MoKSwgMSwgbWF0cml4VHlwZS5nZXRBcnJheVNpemVzKCksIG1hbmds
ZWROYW1lKTsKKyAgICBJbml0VHlwZSh2ZWN0b3JUeXBlKTsKKyAgICByZXR1cm4gdmVjdG9yVHlw
ZTsKK30KKworVFR5cGUgJnNoOjpEcm9wT3V0ZXJEaW1lbnNpb24oY29uc3QgVFR5cGUgJmFycmF5
VHlwZSkKK3sKKyAgICBBU1NFUlQoYXJyYXlUeXBlLmlzQXJyYXkoKSk7CisgICAgY29uc3QgY2hh
ciAqbWFuZ2xlZE5hbWUgPSBudWxscHRyOworICAgIGNvbnN0IGF1dG8gJmFycmF5U2l6ZXMgID0g
YXJyYXlUeXBlLmdldEFycmF5U2l6ZXMoKTsKKworICAgIGF1dG8gJmlubmVyVHlwZSA9CisgICAg
ICAgICpuZXcgVFR5cGUoYXJyYXlUeXBlLmdldEJhc2ljVHlwZSgpLCBhcnJheVR5cGUuZ2V0UHJl
Y2lzaW9uKCksIGFycmF5VHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAgICAgICAgICAgICBh
cnJheVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgYXJyYXlUeXBlLmdldFNlY29uZGFyeVNpemUoKSwK
KyAgICAgICAgICAgICAgICAgICBhcnJheVNpemVzLnN1YnNwYW4oMCwgYXJyYXlTaXplcy5zaXpl
KCkgLSAxKSwgbWFuZ2xlZE5hbWUpOworICAgIEluaXRUeXBlKGlubmVyVHlwZSk7CisgICAgcmV0
dXJuIGlubmVyVHlwZTsKK30KKworc3RhdGljIFRUeXBlICZTZXRUeXBlRGltc0ltcGwoY29uc3Qg
VFR5cGUgJnR5cGUsIGludCBwcmltYXJ5LCBpbnQgc2Vjb25kYXJ5KQoreworICAgIEFTU0VSVCgx
IDwgcHJpbWFyeSAmJiBwcmltYXJ5IDw9IDQpOworICAgIEFTU0VSVCgxIDw9IHNlY29uZGFyeSAm
JiBzZWNvbmRhcnkgPD0gNCk7CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSk7
CisgICAgY29uc3QgY2hhciAqbWFuZ2xlZE5hbWUgPSBudWxscHRyOworCisgICAgYXV0byAmbmV3
VHlwZSA9ICpuZXcgVFR5cGUodHlwZS5nZXRCYXNpY1R5cGUoKSwgdHlwZS5nZXRQcmVjaXNpb24o
KSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmltYXJ5LCBzZWNvbmRhcnksIHR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5nbGVkTmFtZSk7Cisg
ICAgSW5pdFR5cGUobmV3VHlwZSk7CisgICAgcmV0dXJuIG5ld1R5cGU7Cit9CisKK1RUeXBlICZz
aDo6U2V0VmVjdG9yRGltKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgbmV3RGltKQoreworICAgIEFT
U0VSVCh0eXBlLmlzUmFuazAoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworICAgIHJldHVybiBTZXRU
eXBlRGltc0ltcGwodHlwZSwgbmV3RGltLCAxKTsKK30KKworVFR5cGUgJnNoOjpTZXRNYXRyaXhS
b3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pCit7CisgICAgQVNTRVJU
KG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7CisgICAgQVNTRVJUKDEgPCBuZXdEaW0gJiYgbmV3RGlt
IDw9IDQpOworICAgIHJldHVybiBTZXRUeXBlRGltc0ltcGwobWF0cml4VHlwZSwgbWF0cml4VHlw
ZS5nZXRDb2xzKCksIG5ld0RpbSk7Cit9CisKK2Jvb2wgc2g6Okhhc01hdHJpeEZpZWxkKGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQg
OiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9
ICpmaWVsZC0+dHlwZSgpOworICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgc2g6Okhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlKQoreworICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHN0cnVjdHVyZS5maWVs
ZHMoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7
CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUSW50
ZXJtVHlwZWQgJnNoOjpDb2VyY2VTaW1wbGUoVEJhc2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBl
ZCAmZnJvbU5vZGUpCit7CisgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUuZ2V0
VHlwZSgpOworCisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZSh0b1R5cGUpKTsKKyAgICBB
U1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisgICAgQVNTRVJUKCFmcm9tVHlw
ZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZSAhPSBmcm9tVHlwZS5nZXRCYXNpY1R5cGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3Ry
dWN0b3IoCisgICAgICAgICAgICAqbmV3IFRUeXBlKHRvVHlwZSwgZnJvbVR5cGUuZ2V0Tm9taW5h
bFNpemUoKSwgZnJvbVR5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpKSwKKyAgICAgICAgICAgIG5ldyBU
SW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSk7CisgICAgfQorICAgIHJldHVybiBmcm9tTm9kZTsK
K30KKworVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUs
IFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpCit7CisgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0g
ZnJvbU5vZGUuZ2V0VHlwZSgpOworCisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZSh0b1R5
cGUpKTsKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisgICAgQVNT
RVJUKHRvVHlwZS5nZXROb21pbmFsU2l6ZSgpID09IGZyb21UeXBlLmdldE5vbWluYWxTaXplKCkp
OworICAgIEFTU0VSVCh0b1R5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpID09IGZyb21UeXBlLmdldFNl
Y29uZGFyeVNpemUoKSk7CisgICAgQVNTRVJUKCF0b1R5cGUuaXNBcnJheSgpKTsKKyAgICBBU1NF
UlQoIWZyb21UeXBlLmlzQXJyYXkoKSk7CisKKyAgICBpZiAodG9UeXBlLmdldEJhc2ljVHlwZSgp
ICE9IGZyb21UeXBlLmdldEJhc2ljVHlwZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpUSW50
ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3Rvcih0b1R5cGUsIG5ldyBUSW50ZXJtU2VxdWVu
Y2V7JmZyb21Ob2RlfSk7CisgICAgfQorICAgIHJldHVybiBmcm9tTm9kZTsKK30KKworVEludGVy
bVR5cGVkICZzaDo6QXNUeXBlKFN5bWJvbEVudiAmc3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9U
eXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlw
ZSA9IGZyb21Ob2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUo
dG9UeXBlKSk7CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAg
IEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNTRVJUKCFmcm9tVHlwZS5pc0FycmF5
KCkpOworCisgICAgaWYgKHRvVHlwZSA9PSBmcm9tVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmcm9tTm9kZTsKKyAgICB9CisgICAgVGVtcGxhdGVBcmcgdGFyZyh0b1R5cGUpOworICAgIHJl
dHVybiBzeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgiYXNfdHlwZSIsIFN5bWJv
bFR5cGU6OkJ1aWx0SW4pLCB0b1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbU5vZGV9LCAxLCAmdGFyZyk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOWU4OWZlYjA3MzI5MGFlNjFhMTZmZTA1MjA2NDA2YzA3
NTE4YzUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaApAQCAt
MCwwICsxLDE1NyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKworI2luY2x1ZGUgPGNz
dHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0
PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
SWRHZW4uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBIGNvbnZlbmll
bmNlIHZpZXcgb2YgYSBUSW50ZXJtRGVjbGFyYXRpb24gbm9kZSdzIGNoaWxkcmVuLgorc3RydWN0
IERlY2xhcmF0aW9uCit7CisgICAgVEludGVybVN5bWJvbCAmc3ltYm9sOworICAgIFRJbnRlcm1U
eXBlZCAqaW5pdEV4cHI7ICAvLyBOb24tbnVsbCBpZmYgZGVjbGFyYXRpb24gaXMgaW5pdGlhbGl6
ZWQuCit9OworCisvLyBSZXR1cm5zIGEgYERlY2xhcmF0aW9uYCB2aWV3IG9mIHRoZSBnaXZlbiBu
b2RlLgorRGVjbGFyYXRpb24gVmlld0RlY2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVj
bE5vZGUpOworCisvLyBDcmVhdGVzIGEgdmFyaWFibGUgZm9yIGEgc3RydWN0IHR5cGUuCitjb25z
dCBUVmFyaWFibGUgJkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOworCisvLyBDcmVhdGVzIGEgdmFy
aWFibGUgZm9yIGEgc3RydWN0IGluc3RhbmNlLgorY29uc3QgVFZhcmlhYmxlICZDcmVhdGVJbnN0
YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBUUXVhbGlmaWVyOjpFdnFUZW1wb3JhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFNwYW48Y29uc3QgdW5zaWduZWQgaW50PiAqYXJyYXlTaXpl
cyA9IG51bGxwdHIpOworCisvLyBUaGUgaW5wdXQgc2VxdWVuY2Ugc2hvdWxkIGJlIGRpc2NhcmRl
ZCBmcm9tIEFTVCBhZnRlciB0aGlzIGlzIGNhbGxlZC4KK1RJbnRlcm1TZXF1ZW5jZSAmQ2xvbmVT
ZXF1ZW5jZUFuZFByZXBlbmQoY29uc3QgVEludGVybVNlcXVlbmNlICZzZXEsIFRJbnRlcm1Ob2Rl
ICZub2RlKTsKKworLy8gQXBwZW5kcyBwYXJhbWV0ZXJzIGZyb20gYHNyY2AgZnVuY3Rpb24gdG8g
YGRlc3RgIGZ1bmN0aW9uLgordm9pZCBBZGRQYXJhbWV0ZXJzRnJvbShURnVuY3Rpb24gJmRlc3Qs
IGNvbnN0IFRGdW5jdGlvbiAmc3JjKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rpb24uCitjb25zdCBU
RnVuY3Rpb24gJkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwgSWRHZW4g
JmlkR2VuLCBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMpOworCisvLyBDbG9uZXMgYSBmdW5jdGlv
biBhbmQgcHJlcGVuZHMgdGhlIHByb3ZpZGVkIGV4dHIgcGFyYW1ldGVyLgorLy8gSWYgYGlkR2Vu
YCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0
aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kUHJlcGVuZFBhcmFtKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJm5ld1Bh
cmFtKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5kIGFwcGVuZHMgdGhlIHByb3ZpZGVkIGV4
dHJhIHBhcmFtZXRlcnMuCisvLyBJZiBgaWRHZW5gIGlzIG51bGwsIHRoZSBvcmlnaW5hbCBmdW5j
dGlvbiBtdXN0IGJlIGRpc2NhcmRlZCBmcm9tIHRoZSBBU1QuCitjb25zdCBURnVuY3Rpb24gJkNs
b25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1
bmN0aW9uICZvbGRGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW0pOwor
CisvLyBDbG9uZXMgYSBmdW5jdGlvbiBhbmQgY2hhbmdlcyBpdHMgcmV0dXJuIHR5cGUuCisvLyBJ
ZiBgaWRHZW5gIGlzIG51bGwsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBtdXN0IGJlIGRpc2NhcmRl
ZCBmcm9tIHRoZSBBU1QuCitjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VS
ZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZv
bGRGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pOworCisvLyBHZXRzIHRoZSBhcmd1bWVudCBv
ZiBhIGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGdpdmVuIGluZGV4LgorVEludGVybVR5cGVkICZHZXRB
cmcoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4KTsKKworLy8gU2V0
cyB0aGUgYXJndW1lbnQgb2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK3Zv
aWQgU2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCwgVEludGVybVR5
cGVkICZhcmcpOworCisvLyBSZXR1cm5zIHRoZSBmaWVsZCBpbmRleCB3aXRoaW4gdGhlIGdpdmVu
IHN0cnVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuCisvLyBSZXR1cm5zIC0xIGlmIHRoZSBz
dHJ1Y3QgaGFzIG5vIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCitpbnQgR2V0RmllbGRJbmRl
eChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmll
bGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVuIHZhcmlhYmxlIHdp
dGggdGhlIGdpdmVuIGZpZWxkIG5hbWUuCisvLyBUaGUgdmFyaWFibGUgbXVzdCBiZSBhIHN0cnVj
dCBpbnN0YW5jZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkKGNvbnN0IFRWYXJpYWJsZSAm
c3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKTsKKwor
Ly8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gZmll
bGQgbmFtZS4KKy8vIFRoZSBub2RlIG11c3QgYmUgYSBzdHJ1Y3QgaW5zdGFuY2UuCitUSW50ZXJt
QmluYXJ5ICZBY2Nlc3NGaWVsZChUSW50ZXJtVHlwZWQgJm9iamVjdCwgY29uc3QgSW1tdXRhYmxl
U3RyaW5nICZmaWVsZE5hbWUpOworCisvLyBBY2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4g
bm9kZSBieSBpdHMgZmllbGQgaW5kZXguCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGlu
c3RhbmNlLgorVEludGVybUJpbmFyeSAmQWNjZXNzRmllbGRCeUluZGV4KFRJbnRlcm1UeXBlZCAm
b2JqZWN0LCBpbnQgaW5kZXgpOworCisvLyBBY2Nlc3NlcyBhbiBlbGVtZW50IGJ5IGluZGV4IGZv
ciB0aGUgZ2l2ZW4gbm9kZS4KKy8vIFRoZSBub2RlIG11c3QgYmUgYW4gYXJyYXksIHZlY3Rvciwg
b3IgbWF0cml4LgorVEludGVybUJpbmFyeSAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZpbmRl
eGFibGVOb2RlLCBpbnQgaW5kZXgpOworCisvLyBBY2Nlc3NlcyBhbiBlbGVtZW50IGJ5IGluZGV4
IGZvciB0aGUgZ2l2ZW4gbm9kZSBpZiBgaW5kZXhgIGlzIG5vbi1udWxsLgorLy8gUmV0dXJucyB0
aGUgb3JpZ2luYWwgbm9kZSBpZiBgaW5kZXhgIGlzIG51bGwuCisvLyBUaGUgbm9kZSBtdXN0IGJl
IGFuIGFycmF5LCB2ZWN0b3IsIG9yIG1hdHJpeCBpZiBgaW5kZXhgIGlzIG5vbi1udWxsLgorVElu
dGVybVR5cGVkICZBY2Nlc3NJbmRleChUSW50ZXJtVHlwZWQgJm5vZGUsIGNvbnN0IGludCAqaW5k
ZXgpOworCisvLyBSZXR1cm5zIGEgc3VidmVjdG9yIGJhc2VkIG9uIHRoZSBpbnB1dCBzbGljZSBy
YW5nZS4KKy8vIFRoaXMgcmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBpZiB0aGUgc2xpY2UgaXMg
YW4gaWRlbnRpdHkgZm9yIHRoZSBub2RlLgorVEludGVybVR5cGVkICZTdWJWZWN0b3IoVEludGVy
bVR5cGVkICZ2ZWN0b3JOb2RlLCBpbnQgYmVnaW4sIGludCBlbmQpOworCisvLyBNYXRjaGVzIHNj
YWxhciBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCitib29sIElzU2NhbGFyQmFzaWNU
eXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyB2ZWN0b3IgYm9vbCwgaW50LCB1
aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAm
dHlwZSk7CisKKy8vIE1hdGNoZXMgYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorLy8g
VHlwZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGEgc2NhbGFyLgorYm9vbCBIYXNTY2FsYXJCYXNpY1R5
cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxv
YXQsIGRvdWJsZS4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSk7CisK
Ky8vIENsb25lcyBhIHR5cGUuCitUVHlwZSAmQ2xvbmVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsK
KworLy8gQ2xvbmVzIGEgdHlwZSBhbmQgZHJvcHMgYWxsIGFycmF5IGRpbWVuc2lvbnMuCitUVHlw
ZSAmSW5uZXJtb3N0VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIENyZWF0ZXMgYSB2ZWN0
b3IgdHlwZSBieSBkcm9wcGluZyB0aGUgY29sdW1ucyBvZmYgb2YgYSBtYXRyaXggdHlwZS4KK1RU
eXBlICZEcm9wQ29sdW1ucyhjb25zdCBUVHlwZSAmbWF0cml4VHlwZSk7CisKKy8vIENyZWF0ZXMg
YSB0eXBlIGJ5IGRyb3BwaW5nIHRoZSBvdXRlciBkaW1lbnNpb24gb2ZmIG9mIGFuIGFycmF5IHR5
cGUuCitUVHlwZSAmRHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5cGUpOwor
CisvLyBDcmVhdGVzIGEgc2NhbGFyIG9yIHZlY3RvciB0eXBlIGJ5IGNoYW5naW5nIHRoZSBkaW1l
bnNpb25zIG9mIGEgdmVjdG9yIHR5cGUuCitUVHlwZSAmU2V0VmVjdG9yRGltKGNvbnN0IFRUeXBl
ICZ0eXBlLCBpbnQgbmV3RGltKTsKKworLy8gQ3JlYXRlcyBhIG1hdHJpeCB0eXBlIGJ5IGNoYW5n
aW5nIHRoZSByb3cgZGltZW5zaW9ucyBvZiBhIG1hdHJpeCB0eXBlLgorVFR5cGUgJlNldE1hdHJp
eFJvd0RpbShjb25zdCBUVHlwZSAmbWF0cml4VHlwZSwgaW50IG5ld0RpbSk7CisKKy8vIFJldHVy
bnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBhIGZpZWxkIHdpdGgg
bWF0cml4IHR5cGUuCitib29sIEhhc01hdHJpeEZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVj
dHVyZSk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250
YWlucyBhIGZpZWxkIHdpdGggYXJyYXkgdHlwZS4KK2Jvb2wgSGFzQXJyYXlGaWVsZChjb25zdCBU
U3RydWN0dXJlICZzdHJ1Y3R1cmUpOworCisvLyBDb2VyY2VzIGBmcm9tTm9kZWAgdG8gYHRvVHlw
ZWAgYnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlmIHRoZWlyIHR5cGVzIGRpZmZl
ci4KKy8vIFZlY3RvciBhbmQgbWF0cml4IGRpbWVuc2lvbnMgYXJlIHJldGFpbmVkLgorLy8gQXJy
YXkgdHlwZXMgYXJlIG5vdCBhbGxvd2VkLgorVEludGVybVR5cGVkICZDb2VyY2VTaW1wbGUoVEJh
c2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOworCisvLyBDb2VyY2VzIGBm
cm9tTm9kZWAgdG8gYHRvVHlwZWAgYnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlm
IHRoZWlyIHR5cGVzIGRpZmZlci4KKy8vIFZlY3RvciBhbmQgbWF0cml4IGRpbWVuc2lvbnMgbXVz
dCBjb2luY2lkZSBiZXR3ZWVuIHRvIGFuZCBmcm9tLgorLy8gQXJyYXkgdHlwZXMgYXJlIG5vdCBh
bGxvd2VkLgorVEludGVybVR5cGVkICZDb2VyY2VTaW1wbGUoY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSk7CisKK1RJbnRlcm1UeXBlZCAmQXNUeXBlKFN5bWJvbEVu
diAmc3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2Rl
KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0NvbnN0YW50TmFtZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Db25zdGFudE5hbWVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmRkZDg2NWM3Y2M2ZDU5ZDZmZWI2NTUwNDFjN2I0OTNlZWE3ZDcyZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Db25zdGFudE5hbWVzLmgKQEAgLTAsMCArMSwyNiBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorCituYW1lc3BhY2Ug
c2gKK3sKKworbmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCit7CisKK2NvbnN0ZXhwciBOYW1lIGtD
b3ZlcmFnZU1hc2tFbmFibGVkKCJBTkdMRV9Db3ZlcmFnZU1hc2tFbmFibGVkIiwgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCk7Citjb25zdGV4cHIgTmFtZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkKCJBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworCit9
ICAvLyBuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RB
TlRfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg1ZTlhNjZkNThiOTE4NzYzZjY1YzBlNDQ2OGJjMjJh
NjBkZTYzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oCkBAIC0wLDAg
KzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
CisjZGVmaW5lIFRPRE8oKSBBU1NFUlQoZmFsc2UpCisKKyNkZWZpbmUgTE9HSUNfRVJST1IoKSBB
U1NFUlQoZmFsc2UpCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9S
TUVUQUxESVJFQ1RfREVCVUdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Z1Npbmsu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzJhZGQ3NzE0MjIwYjQx
OThhNTczNjMzMTU5ZWM1Njg3ZTAzMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0RlYnVnU2luay5oCkBAIC0wLDAgKzEsMTU5IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8aW9z
dHJlYW0+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisKK25h
bWVzcGFjZSBzaAoreworCitjbGFzcyBTdHJpbmdPYnNlcnZlcgoreworICBwdWJsaWM6CisgICAg
U3RyaW5nT2JzZXJ2ZXIoY29uc3Qgc3RkOjpzdHJpbmcgJm5lZWRsZSkgOiBuZWVkbGUobmVlZGxl
KSB7IEFTU0VSVCghbmVlZGxlLmVtcHR5KCkpOyB9CisKKyAgICBib29sIG9ic2VydmUoY2hhciBj
KQorICAgIHsKKyAgICAgICAgaWYgKG5lZWRsZVtjdXJyUG9zXSA9PSBjKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK2N1cnJQb3M7CisgICAgICAgICAgICBpZiAoY3VyclBvcyA9PSBuZWVkbGUu
c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0TmVlZGxl
KCkgY29uc3QgeyByZXR1cm4gbmVlZGxlOyB9CisKKyAgICB2b2lkIHJlc2V0KCkgeyBjdXJyUG9z
ID0gMDsgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzdHJpbmcgbmVlZGxlOworICAgIHNpemVf
dCBjdXJyUG9zID0gMDsKK307CisKK2NsYXNzIERlYnVnU2luayA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQoreworICBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEVzY2FwZWRTaW5rOworICAgIGNsYXNz
IEVzY2FwZWRTaW5rIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgeworICAgICAgICBmcmllbmQg
Y2xhc3MgRGVidWdTaW5rOworCisgICAgICBwcml2YXRlOgorICAgICAgICBFc2NhcGVkU2luayhE
ZWJ1Z1NpbmsgJm93bmVyKSA6IG1Pd25lcihvd25lciksIG1CZWdpbihvd25lci5zaXplKCkpIHt9
CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgRXNjYXBlZFNpbmsoRXNjYXBlZFNpbmsgJiZvdGhl
cikgOiBtT3duZXIob3RoZXIubU93bmVyKSwgbUJlZ2luKG90aGVyLm1CZWdpbikge30KKworICAg
ICAgICB+RXNjYXBlZFNpbmsoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpw
ID0gbU93bmVyLmNfc3RyKCk7CisgICAgICAgICAgICBjb25zdCBpbnQgZW5kID0gbU93bmVyLnNp
emUoKTsKKyAgICAgICAgICAgIG1Pd25lci5vbldyaXRlKHAgKyBtQmVnaW4sIHAgKyBlbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmZ2V0KCkgeyByZXR1cm4gbU93bmVy
Lm1QYXJlbnQ7IH0KKworICAgICAgICBvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYoKSB7IHJldHVy
biBnZXQoKTsgfQorCisgICAgICBwcml2YXRlOgorICAgICAgICBEZWJ1Z1NpbmsgJm1Pd25lcjsK
KyAgICAgICAgY29uc3QgaW50IG1CZWdpbjsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBEZWJ1
Z1NpbmsoVEluZm9TaW5rQmFzZSAmcGFyZW50LCBib29sIGFsc29Mb2dUb1N0ZG91dCkKKyAgICAg
ICAgOiBtUGFyZW50KHBhcmVudCksIG1BbHNvTG9nVG9TdGRvdXQoYWxzb0xvZ1RvU3Rkb3V0KQor
ICAgIHt9CisKKyAgICB2b2lkIHdhdGNoKHN0ZDo6c3RyaW5nIGNvbnN0ICZuZWVkbGUpCisgICAg
eworICAgICAgICBpZiAoIW5lZWRsZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBt
T2JzZXJ2ZXJzLmVtcGxhY2VfYmFjayhuZWVkbGUpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBlcmFzZSgpCisgICAgeworICAgICAgICBtUGFyZW50LmVyYXNlKCk7CisgICAgICAgIGZv
ciAoU3RyaW5nT2JzZXJ2ZXIgJm9ic2VydmVyIDogbU9ic2VydmVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgb2JzZXJ2ZXIucmVzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludCBz
aXplKCkgeyByZXR1cm4gbVBhcmVudC5zaXplKCk7IH0KKworICAgIGNvbnN0IFRQZXJzaXN0U3Ry
aW5nICZzdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LnN0cigpOyB9CisKKyAgICBjb25zdCBj
aGFyICpjX3N0cigpIGNvbnN0IHsgcmV0dXJuIG1QYXJlbnQuY19zdHIoKTsgfQorCisgICAgRXNj
YXBlZFNpbmsgZXNjYXBlKCkgeyByZXR1cm4gRXNjYXBlZFNpbmsoKnRoaXMpOyB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBEZWJ1Z1NpbmsgJm9wZXJhdG9yPDwoY29uc3QgVCAm
dmFsdWUpCisgICAgeworICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBtUGFyZW50LnNpemUo
KTsKKyAgICAgICAgbVBhcmVudCA8PCB2YWx1ZTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGVuZCA9
IG1QYXJlbnQuc2l6ZSgpOworCisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBtUGFyZW50LmNfc3Ry
KCk7CisgICAgICAgIG9uV3JpdGUocCArIGJlZ2luLCBwICsgZW5kKTsKKworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgdm9pZCBvbldyaXRlKGNvbnN0IGNo
YXIgKmJlZ2luLCBjaGFyIGNvbnN0ICplbmQpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpw
ID0gYmVnaW47CisgICAgICAgIHdoaWxlIChwICE9IGVuZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1BbHNvTG9nVG9TdGRvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3RkOjpjb3V0IDw8ICpwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFN0cmlu
Z09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKG9ic2VydmVyLm9ic2VydmUoKnApKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1BbHNvTG9nVG9TdGRvdXQpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dC5mbHVzaCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZu
ZWVkbGUgPSBvYnNlcnZlci5nZXROZWVkbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQp
bmVlZGxlOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodHJ1ZSk7ICAvLyBwbGFjZSB5b3Vy
IGJyZWFrcG9pbnQgaGVyZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgKytwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1BbHNvTG9nVG9TdGRvdXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6Y291dC5mbHVzaCgpOworICAgICAgICB9Cisg
ICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAmbVBhcmVudDsKKyAgICBzdGQ6
OnZlY3RvcjxTdHJpbmdPYnNlcnZlcj4gbU9ic2VydmVyczsKKyAgICBib29sIG1BbHNvTG9nVG9T
dGRvdXQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZGY0MzBlMWFiNDFlMWIxN2UyNGQ3
ZDYyMWJmNTVjMTJlYjlkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292
ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVu
b3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5nRnVu
Y3Rpb25UcmF2ZXJzZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Ns
YXNzIERpc2NvdmVyZXIgOiBwdWJsaWMgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
cgoreworICBwcml2YXRlOgorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFy
aWFibGUgJik+ICZtVmFyczsKKyAgICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmbUZ1bmNU
b0RlZjsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IG1Ob25EZXBG
dW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVu
Y3Rpb24gKj4gbURlcEZ1bmN0aW9uczsKKworICBwdWJsaWM6CisgICAgRGlzY292ZXJlcihjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycywKKyAgICAgICAg
ICAgICAgIGNvbnN0IEZ1bmN0aW9uVG9EZWZpbml0aW9uICZmdW5jVG9EZWYpCisgICAgICAgIDog
RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcih0cnVlLCBmYWxzZSwgdHJ1ZSksIG1W
YXJzKHZhcnMpLCBtRnVuY1RvRGVmKGZ1bmNUb0RlZikKKyAgICB7fQorCisgICAgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAg
ICBpZiAoIW1WYXJzKHZhcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gKm93bmVyID0gZGlzY292ZXJFbmNsb3NpbmdG
dW5jdGlvbihzeW1ib2xOb2RlKTsKKyAgICAgICAgQVNTRVJUKG93bmVyKTsKKyAgICAgICAgbURl
cEZ1bmN0aW9ucy5pbnNlcnQob3duZXIpOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAodmlzaXQgIT0gVmlzaXQ6OlByZVZpc2l0KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYWdn
cmVnYXRlTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gKmZ1bmMgPSBhZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlvbigpOworCisgICAg
ICAgICAgICBpZiAobU5vbkRlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1Ob25EZXBGdW5jdGlv
bnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykg
PT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGl0ID0gbUZ1bmNUb0RlZi5maW5kKGZ1bmMpOworICAgICAgICAgICAgICAgIGlmIChpdCA9
PSBtRnVuY1RvRGVmLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
UmVjdXJzaW9uIGlzIGJhbm5lZCBpbiBHTFNMLCBzbyBJIGJlbGlldmUgQW5nbGVJUiBoYXMgdGhp
cyBwcm9wZXJ0eSB0b28uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBh
c3N1bWVzIChkaXJlY3QgYW5kIG11dHVhbCkgcmVjdXJzaW9uIGlzIHByb2hpYml0ZWQuCisgICAg
ICAgICAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUgPSAqaXQt
PnNlY29uZDsKKyAgICAgICAgICAgICAgICBmdW5jRGVmTm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBpZiAobU5vbkRlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1Ob25EZXBG
dW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKG1E
ZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5j
bG9zaW5nRnVuY3Rpb24oYWdncmVnYXRlTm9kZSk7CisgICAgICAgICAgICBBU1NFUlQob3duZXIp
OworICAgICAgICAgICAgbURlcEZ1bmN0aW9ucy5pbnNlcnQob3duZXIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVm
aW5pdGlvbihWaXNpdCB2aXNpdCwgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlZk5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBmdW5j
RGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAgICAgICBpZiAodmlzaXQgIT0gVmlzaXQ6OlBv
c3RWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1EZXBGdW5jdGlvbnMuZmluZChm
dW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Ob25E
ZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlcEZ1
bmN0aW9ucy5maW5kKGZ1bmMpID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1Ob25EZXBGdW5jdGlvbnMuaW5zZXJ0KGZ1bmMpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK3N0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gc2g6OkRpc2NvdmVyRGVwZW5kZW50RnVu
Y3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9u
PGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycykKK3sKKyAgICBjb25zdCBGdW5jdGlvblRv
RGVmaW5pdGlvbiBmdW5jVG9EZWYgPSBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKHJvb3QpOwor
ICAgIERpc2NvdmVyZXIgZGlzY292ZXJlcih2YXJzLCBmdW5jVG9EZWYpOworICAgIHJvb3QudHJh
dmVyc2UoJmRpc2NvdmVyZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUoZGlzY292ZXJlci5tRGVw
RnVuY3Rpb25zKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVu
dEZ1bmN0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWQxYmYyN2M5MGNhYjA2YzNjMThhZTE0MGFkYzgzNzVlMmRkYzE1ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5o
CkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRGVU5DVElPTlNfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJE
RVBFTkRFTlRGVU5DVElPTlNfSF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEZpbmRzIGFuZCByZXR1cm5zIGFs
bCBmdW5jdGlvbnMgdGhhdCBjb250YWluIHRoZSBwcm92aWRlZCB2YXJpYWJsZXMuCitBTkdMRV9O
T19ESVNDQVJEIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMoCisgICAgVEludGVybUJsb2NrICZyb290LAorICAgIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUgJik+ICZ2YXJzKTsKKworfSAgLy8gbmFt
ZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRGVU5DVElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MmQzOTBlNzk1ZGIxYjdmMzNjYmQ4NDVhZjc2MTI1N2U3ZTBlMGYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwCkBA
IC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2Vy
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcihib29sIHByZVZpc2l0
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwb3N0
VmlzaXRfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorICAgIDog
VEludGVybVRyYXZlcnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xU
YWJsZSkKK3t9CisKK2NvbnN0IFRGdW5jdGlvbiAqRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlcjo6ZGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvbihUSW50ZXJtTm9kZSAqbm9kZSkKK3sK
KyAgICBBU1NFUlQoIW5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworCisgICAgdW5z
aWduZWQgaGVpZ2h0ID0gMDsKKyAgICB3aGlsZSAoVEludGVybU5vZGUgKmFuY2VzdG9yID0gZ2V0
QW5jZXN0b3JOb2RlKGhlaWdodCkpCisgICAgeworICAgICAgICBpZiAoVEludGVybUZ1bmN0aW9u
RGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBhbmNlc3Rvci0+Z2V0QXNGdW5jdGlvbkRlZmluaXRp
b24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlLT5nZXRGdW5j
dGlvbigpOworICAgICAgICB9CisgICAgICAgICsraGVpZ2h0OworICAgIH0KKworICAgIHJldHVy
biBudWxscHRyOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb25UcmF2ZXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0
aW9uVHJhdmVyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjljYjJhYTAwMTRhMDA0OTM4NmUyYTdmNmQ3OTMy
ZDliMjczYzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xv
c2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgKQEAgLTAsMCArMSwzMSBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVO
Q0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSRU5DTE9TSU5HRlVOQ1RJT05UUkFWRVJTRVJf
SF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZl
cnNlLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBIFRJbnRlcm1UcmF2ZXJzZXIgdGhhdCBz
dXBwb3J0cyBkaXNjb3Zlcnkgb2YgdGhlIGZ1bmN0aW9uIGEgbm9kZSBiZWxvbmdzIHRvLgorY2xh
c3MgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVy
c2VyKGJvb2wgcHJlVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGluVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHBvc3RWaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSBudWxscHRyKTsKKworICAgIC8vIFJldHVybnMgdGhl
IGZ1bmN0aW9uIGEgbm9kZSBiZWxvbmdzIGluc2lkZS4KKyAgICAvLyBSZXR1cm5zIG51bGwgaWYg
dGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGluc2lkZSBhIGZ1bmN0aW9uLgorICAgIGNvbnN0IFRG
dW5jdGlvbiAqZGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvbihUSW50ZXJtTm9kZSAqbm9kZSk7Cit9
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VS
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9FbWl0TWV0YWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiYmRkM2ZjZDM3YTdhYzNkMGU2MTM2MDBiNWU5
Y2E4MDhlMzA1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmNw
cApAQCAtMCwwICsxLDI0NTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5j
bHVkZSA8bWFwPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJp
bmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0
SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGVidWdTaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05h
bWUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Qcm9ncmFtUHJlbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNT
RVJUUykKK3VzaW5nIFNpbmsgPSBEZWJ1Z1Npbms7CisjZWxzZQordXNpbmcgU2luayA9IFRJbmZv
U2lua0Jhc2U7CisjZW5kaWYKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNl
Cit7CisKK3N0cnVjdCBWYXJEZWNsCit7CisgICAgZXhwbGljaXQgVmFyRGVjbChjb25zdCBUVmFy
aWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhciksIG1Jc0ZpZWxkKGZhbHNlKSB7fQorICAgIGV4
cGxpY2l0IFZhckRlY2woY29uc3QgVEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSwgbUlz
RmllbGQodHJ1ZSkge30KKworICAgIEFOR0xFX0lOTElORSBjb25zdCBUVmFyaWFibGUgJnZhcmlh
YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhcmlhYmxlKCkpOworICAgICAg
ICByZXR1cm4gKm1WYXJpYWJsZTsKKyAgICB9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZp
ZWxkICZmaWVsZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNGaWVsZCgpKTsKKyAg
ICAgICAgcmV0dXJuICptRmllbGQ7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgaXNW
YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtSXNGaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5F
IGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1Jc0ZpZWxkOyB9CisKKyAgICBjb25zdCBU
VHlwZSAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzRmllbGQoKSA/ICpmaWVsZCgpLnR5cGUoKSA6
IHZhcmlhYmxlKCkuZ2V0VHlwZSgpOyB9CisKKyAgICBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRmllbGQoKSA/IGZpZWxkKCkuc3ltYm9sVHlw
ZSgpIDogdmFyaWFibGUoKS5zeW1ib2xUeXBlKCk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAg
dW5pb24KKyAgICB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlOworICAgICAg
ICBjb25zdCBURmllbGQgKm1GaWVsZDsKKyAgICB9OworICAgIGJvb2wgbUlzRmllbGQ7Cit9Owor
CitjbGFzcyBHZW5NZXRhbFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICB+R2VuTWV0YWxUcmF2ZXJzZXIoKSBvdmVycmlkZTsKKworICAgIEdlbk1l
dGFsVHJhdmVyc2VyKGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgU2luayAmb3V0LAorICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJnBpcGVsaW5lU3RydWN0
cywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworICAgIHZvaWQg
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZTsKKyAgICBib29sIHZp
c2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZp
c2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0
VGVybmFyeShWaXNpdCwgVEludGVybVRlcm5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRD
YXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0RnVuY3Rp
b25Qcm90b3R5cGUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICopIG92ZXJyaWRlOworICAgIGJv
b2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1C
bG9jayAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKSBvdmVycmlkZTsK
KyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAqKSBv
dmVycmlkZTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgb3ZlcnJp
ZGU7CisgICAgYm9vbCB2aXNpdEZvckxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNp
dFdoaWxlTG9vcChUSW50ZXJtTG9vcCAqKTsKKyAgICBib29sIHZpc2l0RG9XaGlsZUxvb3AoVElu
dGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAq
KSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHVzaW5nIEZ1bmNUb05hbWUgPSBzdGQ6Om1h
cDxJbW11dGFibGVTdHJpbmcsIE5hbWU+OworICAgIHN0YXRpYyBGdW5jVG9OYW1lIEJ1aWxkRnVu
Y1RvTmFtZSgpOworCisgICAgc3RydWN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnCisg
ICAgeworICAgICAgICBib29sIGlzUGFyYW1ldGVyICAgICAgICAgICAgICAgID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgaXNNYWluUGFyYW1ldGVyICAgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAg
Ym9vbCBlbWl0UG9zdFF1YWxpZmllciAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGlz
UGFja2VkICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgZGlzYWJsZVN0
cnVjdFNwZWNpZmllciAgICAgPSBmYWxzZTsKKyAgICAgICAgY29uc3QgQWRkcmVzc1NwYWNlICpp
c1BvaW50ZXIgICA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNSZWZl
cmVuY2UgPSBudWxscHRyOworICAgIH07CisKKyAgICBzdHJ1Y3QgRW1pdFR5cGVDb25maWcKKyAg
ICB7CisgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICpldmRDb25m
aWcgPSBudWxscHRyOworICAgIH07CisKKyAgICB2b2lkIGVtaXRJbmRlbnRhdGlvbigpOworICAg
IHZvaWQgZW1pdEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAg
dm9pZCBlbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKyAgICB2b2lk
IGVtaXRGdW5jdGlvblBhcmFtZXRlcihjb25zdCBURnVuY3Rpb24gJmZ1bmMsIGNvbnN0IFRWYXJp
YWJsZSAmcGFyYW0pOworCisgICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRGaWVsZCAmb2JqZWN0
KTsKKyAgICB2b2lkIGVtaXROYW1lT2YoY29uc3QgVFN5bWJvbCAmb2JqZWN0KTsKKyAgICB2b2lk
IGVtaXROYW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KTsKKworICAgIHZvaWQgZW1pdEJhcmVU
eXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmln
KTsKKyAgICB2b2lkIGVtaXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNv
bmZpZyAmZXRDb25maWcpOworICAgIHZvaWQgZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZh
cmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUUXVhbGlmaWVyIHF1YWxpZmllcik7CisKKyAgICBzdHJ1Y3QgRmllbGRBbm5vdGF0aW9u
SW5kaWNlcworICAgIHsKKyAgICAgICAgc2l6ZV90IGF0dHJpYnV0ZSA9IDA7CisgICAgICAgIHNp
emVfdCBjb2xvciAgICAgPSAwOworICAgIH07CisKKyAgICB2b2lkIGVtaXRGaWVsZERlY2xhcmF0
aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgdm9pZCBlbWl0
QXR0cmlidXRlRGVjbGFyYXRpb24oY29uc3QgVEZpZWxkICZmaWVsZCwgRmllbGRBbm5vdGF0aW9u
SW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1pdFN0cnVjdERlY2xhcmF0
aW9uKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICB2b2lkIGVtaXRPcmRpbmFyeVZhcmlhYmxlRGVj
bGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENv
bmZpZyk7CisgICAgdm9pZCBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZk
ZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxl
RGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZyk7CisKKyAgICB2b2lkIGVtaXRPcGVuQnJhY2Uo
KTsKKyAgICB2b2lkIGVtaXRDbG9zZUJyYWNlKCk7CisKKyAgICB2b2lkIGdyb3VwZWRUcmF2ZXJz
ZShUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICBjb25zdCBURmllbGQgJmdldERpcmVjdEZpZWxk
KGNvbnN0IFRGaWVsZExpc3RDb2xsZWN0aW9uICZmaWVsZHNOb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmluZGV4KTsKKyAgICBjb25z
dCBURmllbGQgJmdldERpcmVjdEZpZWxkKGNvbnN0IFRJbnRlcm1UeXBlZCAmZmllbGRzTm9kZSwg
VEludGVybVR5cGVkICZpbmRleE5vZGUpOworCisgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmVt
aXRDb25zdGFudFVuaW9uQXJyYXkoY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5p
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2l6ZV90IHNpemUpOworCisgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmVtaXRDb25zdGFu
dFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlv
bik7CisKKyAgICB2b2lkIGVtaXRTaW5nbGVDb25zdGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAq
Y29uc3QgY29uc3RVbmlvbik7CisKKyAgcHJpdmF0ZToKKyAgICBTaW5rICZtT3V0OworICAgIGNv
bnN0IFRDb21waWxlciAmbUNvbXBpbGVyOworICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmbVBp
cGVsaW5lU3RydWN0czsKKyAgICBjb25zdCBJbnZhcmlhbnRzICZtSW52YXJpYW50czsKKyAgICBT
eW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBpbnQgbUluZGVu
dExldmVsICAgICAgICA9IC0xOworICAgIGludCBtTGFzdEluZGVudGF0aW9uUG9zID0gLTE7Cisg
ICAgYm9vbCBtUGFyZW50SXNTd2l0Y2ggICAgPSBmYWxzZTsKKyAgICBzdGQ6OnVub3JkZXJlZF9t
YXA8Y29uc3QgVFN5bWJvbCAqLCBOYW1lPiBtUmVuYW1lZFN5bWJvbHM7CisgICAgY29uc3QgRnVu
Y1RvTmFtZSBtRnVuY1RvTmFtZSAgID0gQnVpbGRGdW5jVG9OYW1lKCk7CisgICAgc2l6ZV90IG1N
YWluVGV4dHVyZUluZGV4ICAgICAgID0gMDsKKyAgICBzaXplX3QgbU1haW5TYW1wbGVySW5kZXgg
ICAgICAgPSAwOworICAgIHNpemVfdCBtTWFpblVuaWZvcm1CdWZmZXJJbmRleCA9IHJ4OjptdGw6
OmtEZWZhdWx0VW5pZm9ybXNCaW5kaW5nSW5kZXg7Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK0dlbk1ldGFsVHJhdmVyc2VyOjp+R2VuTWV0YWxUcmF2ZXJzZXIoKQoreworICAg
IEFTU0VSVChtSW5kZW50TGV2ZWwgPT0gLTEpOworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNo
KTsKK30KKworR2VuTWV0YWxUcmF2ZXJzZXI6Okdlbk1ldGFsVHJhdmVyc2VyKGNvbnN0IFRDb21w
aWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lu
ayAmb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0
cnVjdHMgJnBpcGVsaW5lU3RydWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLAorICAgICAgbU91dChvdXQpLAorICAgICAgbUNvbXBp
bGVyKGNvbXBpbGVyKSwKKyAgICAgIG1QaXBlbGluZVN0cnVjdHMocGlwZWxpbmVTdHJ1Y3RzKSwK
KyAgICAgIG1JbnZhcmlhbnRzKGludmFyaWFudHMpLAorICAgICAgbVN5bWJvbEVudihzeW1ib2xF
bnYpLAorICAgICAgbUlkR2VuKGlkR2VuKQore30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdEluZGVudGF0aW9uKCkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IDApOworCisg
ICAgaWYgKG1MYXN0SW5kZW50YXRpb25Qb3MgPT0gbU91dC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm47ICAvLyBMaW5lIGlzIGFscmVhZHkgaW5kZW50ZWQuCisgICAgfQorCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtSW5kZW50TGV2ZWw7ICsraSkKKyAgICB7CisgICAgICAgIG1PdXQg
PDwgIiAgIjsKKyAgICB9CisKKyAgICBtTGFzdEluZGVudGF0aW9uUG9zID0gbU91dC5zaXplKCk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpHZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3Vs
dFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICphcmdUeXBlMSA9IG51bGxwdHIpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgIHJldHVybiAiLCI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gIj0i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIHJl
dHVybiAiPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAg
ICAgICByZXR1cm4gIis9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoK
KyAgICAgICAgICAgIHJldHVybiAiLT0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVs
QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gIi89IjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcElNb2RBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gIiU9IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKyAgICAgICAgICAgIHJl
dHVybiAiPDw9IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGlu
Zy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246CisgICAg
ICAgICAgICByZXR1cm4gIj4+PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0
aWMgc2hpZnRpbmcuCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuICImPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlWG9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJePSI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gInw9IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKyAgICAgICAgICAgIHJldHVybiAiKyI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6CisgICAgICAgICAgICByZXR1cm4gIi0i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAgICAgICAgcmV0dXJuICIq
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKyAgICAgICAgICAgIHJldHVybiAi
LyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgorICAgICAgICAgICAgcmV0dXJu
ICIlIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdDoKKyAgICAgICAg
ICAgIHJldHVybiAiPDwiOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1ldGljIHNo
aWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAg
ICAgICAgIHJldHVybiAiPj4iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1ldGlj
IHNoaWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAg
ICAgICAgIHJldHVybiAiJiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9y
OgorICAgICAgICAgICAgcmV0dXJuICJeIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VPcjoKKyAgICAgICAgICAgIHJldHVybiAifCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiAiPCI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIHJldHVybiAiPiI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgcmV0dXJuICI8
PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAg
ICAgICAgcmV0dXJuICI+PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNv
bXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4g
Ijw9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25l
bnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BHcmVhdGVyVGhhbkNvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIj4iOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICAgICAgcmV0dXJu
ICJ8fCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorICAgICAgICAg
ICAgcmV0dXJuICIhPS8qeG9yKi8iOyAgLy8gWFhYOiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgaGFu
ZGxlZCBkaWZmZXJlbnRseSBmb3Igc29tZSBvYnR1c2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHVzZSBjYXNlLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNh
bEFuZDoKKyAgICAgICAgICAgIHJldHVybiAiJiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTmVnYXRpdmU6CisgICAgICAgICAgICByZXR1cm4gIi0iOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUG9zaXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuICIrIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1cm4gIiEiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9naWNhbE5vdENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIiEiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgICAgIHJldHVy
biAifiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorICAgICAg
ICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVt
ZW50OgorICAgICAgICAgICAgcmV0dXJuICItLSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BQcmVJbmNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIisrIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAg
ICAgICByZXR1cm4gIio9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVz
TWF0cml4QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAi
Kj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgICAgICByZXR1cm4gIio9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZl
Y3RvclRpbWVzU2NhbGFyOgorICAgICAgICAgICAgcmV0dXJuICIqIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgcmV0dXJuICIqIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICAg
ICAgcmV0dXJuICIqIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2Nh
bGFyOgorICAgICAgICAgICAgcmV0dXJuICIqIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAgICAgcmV0dXJuICIqIjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgICAgIHJldHVybiAi
PT0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWxDb21wb25lbnRXaXNlOgor
ICAgICAgICAgICAgcmV0dXJuICIhPSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVx
dWFsOgorICAgICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+
aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYm
IGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlz
QXJyYXkoKSAmJiBhcmdUeXBlMS0+aXNBcnJheSgpKSkKKworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAiQU5HTEVfZXF1YWwiOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gIj09IjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6
CisgICAgICAgICAgICBpZiAoKGFyZ1R5cGUwLT5pc1ZlY3RvcigpICYmIGFyZ1R5cGUxLT5pc1Zl
Y3RvcigpKSB8fAorICAgICAgICAgICAgICAgIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5
cGUxLT5pc0FycmF5KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAi
QU5HTEVfbm90RXF1YWwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYXJn
VHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX25vdEVxdWFsU3RydWN0IjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BLaWxsOgorICAgICAgICAgICAgVE9ETygpOworICAgICAgICAgICAgcmV0dXJuICJr
aWxsIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgICAgIHJl
dHVybiAicmV0dXJuIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAg
ICAgICAgcmV0dXJuICJicmVhayI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51
ZToKKyAgICAgICAgICAgIHJldHVybiAiY29udGludWUiOworCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9yYWRpYW5zIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisgICAgICAgICAgICByZXR1cm4gIkFO
R0xFX2RlZ3JlZXMiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRhbjoKKyAgICAgICAg
ICAgIHJldHVybiAiQU5HTEVfYXRhbiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6
CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX21vZCI7ICAvLyBkaWZmZXJzIGZyb20gbWV0YWw6
Om1vZAorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFjdDoKKyAgICAgICAgICAgIHJl
dHVybiAiQU5HTEVfcmVmcmFjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXN0YW5j
ZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZGlzdGFuY2UiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9sZW5ndGgiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRG90OgorICAgICAgICAgICAgcmV0dXJuICJBTkdM
RV9kb3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorICAgICAgICAg
ICAgcmV0dXJuICJBTkdMRV9ub3JtYWxpemUiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RmFjZWZvcndhcmQ6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2ZhY2Vmb3J3YXJkIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICByZXR1cm4gIkFO
R0xFX3JlZmxlY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsTWF0cml4Q29tcG9u
ZW50V2lzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfY29tcG9uZW50V2lzZU11bHRpcGx5
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE91dGVyUHJvZHVjdDoKKyAgICAgICAgICAg
IHJldHVybiAiQU5HTEVfb3V0ZXJQcm9kdWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFNpZ246CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3NpZ24iOworCisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphYnMiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWxsOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YWxsIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToKKyAgICAgICAgICAgIHJldHVy
biAibWV0YWw6OmFueSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW46CisgICAgICAg
ICAgICByZXR1cm4gIm1ldGFsOjpzaW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29z
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y29zIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFRhbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBc2luOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YXNpbiI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zOgorICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6YWNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW5oOgorICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6c2luaCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3No
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y29zaCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BUYW5oOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuaCI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFz
aW5oIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6YWNvc2giOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRhbmg6Cisg
ICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphdGFuaCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BGbWE6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpmbWEiOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wUG93OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cG93IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6ZXhwMiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2c6CisgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2ciOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TG9nMjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmxvZzIiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnNxcnQiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjpmbG9vciI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcnVuYzoKKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnRydW5jIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENlaWw6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpjZWlsIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZyYWN0OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZnJhY3QiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWlu
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1heDoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6Om1heCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnJvdW5kIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJv
dW5kRXZlbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJpbnQiOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ2xhbXA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpjbGFtcCI7
ICAvLyBUT0RPIGZhc3QgdnMgcHJlY2lzZSBuYW1lc3BhY2UKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcE1peDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1peCI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTdGVwOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c3RlcCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTbW9vdGhzdGVwOgorICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6c21vb3Roc3RlcCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Rm
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bW9kZiI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJc25hbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzbmFuIjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzaW5mOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
aXNpbmYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpsZGV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmV4cDoK
KyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyZXhwIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEludmVyc2VzcXJ0OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cnNxcnQiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ3Jvc3M6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjpjcm9zcyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6ZGZkeCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR5
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZGZkeSI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGd2lkdGg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpmd2lkdGgiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJhbnNwb3NlOgorICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6dHJhbnNwb3NlIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERldGVybWluYW50
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZGV0ZXJtaW5hbnQiOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9pbnZl
cnNlIjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9JbnQ6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNUb1VpbnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVp
bnRCaXRzVG9GbG9hdDoKKyAgICAgICAgeworI2RlZmluZSBSRVRVUk5fQVNfVFlQRShwb3N0KSAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHN3aXRjaCAocmVzdWx0VHlwZS5nZXRCYXNpY1R5cGUo
KSkgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPGludCIgcG9zdCAiPiI7ICAgXAorICAg
ICAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OiAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImFzX3R5cGU8dWludCIgcG9zdCAiPiI7ICBcCisgICAgICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHJl
dHVybiAiYXNfdHlwZTxmbG9hdCIgcG9zdCAiPiI7IFwKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVE9ETygpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9y
X1RPRE8iOyAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgd2hpbGUgKGZhbHNlKQorCisgICAgICAgICAgICBpZiAocmVzdWx0
VHlwZS5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFVFVSTl9B
U19UWVBFKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFR5
cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
c3VsdFR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBF
KCIyIik7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9BU19UWVBFKCIzIik7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCI0Iik7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRvcl9UT0RP
IjsKKyAgICAgICAgICAgIH0KKworI3VuZGVmIFJFVFVSTl9BU19UWVBFCisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm0yeDE2IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNr
X2Zsb2F0X3RvX3Nub3JtMngxNiI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tV
bm9ybTR4ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm00
eDgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtNHg4OgorICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6cGFja19mbG9hdF90b19zbm9ybTR4OCI7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0
YWw6OnVucGFja191bm9ybTJ4MTZfdG9fZmxvYXQiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wVW5wYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dW5wYWNrX3Nu
b3JtMngxNl90b19mbG9hdCI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vu
b3JtNHg4OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dW5wYWNrX3Vub3JtNHg4X3RvX2Zs
b2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtNHg4OgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6dW5wYWNrX3Nub3JtNHg4X3RvX2Zsb2F0IjsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYyeDE2OgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9wYWNrX2hhbGZfMngxNiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tI
YWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfdW5wYWNrX2hhbGZfMngxNiI7CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkRXh0cmFjdDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkSW5zZXJ0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQml0ZmllbGRSZXZlcnNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTFNCOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRmluZE1TQjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJyeToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVzdWJCb3Jyb3c6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbXVsRXh0ZW5kZWQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVs
RXh0ZW5kZWQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCYXJyaWVyOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTWVtb3J5QmFycmllckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9y
eUJhcnJpZXJJbWFnZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJT
aGFyZWQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcm91cE1lbW9yeUJhcnJpZXI6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBdG9taWNNaW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNNYXg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNBbmQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBdG9taWNPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY1hv
cjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0V4Y2hhbmdlOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BFbWl0VmVydGV4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW5kUHJpbWl0aXZl
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFBhY2tEb3VibGUyeDMyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
VW5wYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFycmF5TGVuZ3Ro
OgorICAgICAgICAgICAgVE9ETygpOworICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9E
TyI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE51bGw6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVu
Y3Rpb25JbkFTVDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1
bmN0aW9uOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJ
bnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKKyNpZiAwCitzdGF0aWMgaW50IEdldE9wZXJhdG9y
UHJlY2VkZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYTogeworICAgICAgICAgICAgcmV0dXJuIDE3Owor
ICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICB9IGJyZWFrOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3I6IHsKKyAgICAgICAgICAgIHJl
dHVybiAxNTsKKyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TG9naWNhbEFuZDogeworICAgICAgICAgICAgcmV0dXJuIDE0OworICAgICAgICB9IGJyZWFrOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3I6IHsKKyAgICAgICAgICAgIHJl
dHVybiAxMzsKKyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZVhvcjogeworICAgICAgICAgICAgcmV0dXJuIDEyOworICAgICAgICB9IGJyZWFrOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTE7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOiB7CisgICAgICAgICAgICByZXR1cm4gMTA7Cisg
ICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3Jl
YXRlclRoYW5FcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDk7CisgICAgICAgIH0gYnJlYWs7
CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6IHsKKyAgICAgICAgICAgIHJldHVybiA3Owor
ICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6IHsKKyAgICAgICAgICAgIHJldHVybiA2OworICAg
ICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9k
OiB7CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAgfSBicmVhazsKKworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3NpdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlTm90OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50
OiB7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfSBicmVhazsKKworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFBvc3REZWNyZW1lbnQ6IHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9IGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KK30KKworbmFtZXNwYWNlCit7CisKK2Vu
dW0gY2xhc3MgQXNzb2NpYXRpdml0eQoreworICAgIE5vbmUsCisgICAgTGVmdCwKKyAgICBSaWdo
dCwKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitzdGF0aWMgQXNzb2NpYXRpdml0
eSBHZXRBc3NvY2lhdGl2aXR5KFRPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKQorICAg
IHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFN1YjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcERpdjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZUFuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BFcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BH
cmVhdGVyVGhhbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuRXF1YWw6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9n
aWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYTogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0
aXZpdHk6OkxlZnQ7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRM
ZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOiB7CisgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRp
dml0eTo6UmlnaHQ7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zaXRpdmU6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1l
bnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlRGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRpdml0eTo6Tm9u
ZTsKKyAgICAgICAgfSBicmVhazsKKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBU
T0RPKCk7CisgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRpdml0eTo6Tm9uZTsKKyAgICAgICAg
fQorICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbCBJc1N5bWJvbGljT3BlcmF0b3IoVE9w
ZXJhdG9yIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZy
ZXN1bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICph
cmdUeXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJn
VHlwZTEgPSBudWxscHRyKQoreworICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENhbGxCdWls
dEluRnVuY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiAhc3RkOjppc2FsbnVtKEdldE9wZXJhdG9yU3RyaW5nKG9wLCByZXN1bHRUeXBlLCBhcmdU
eXBlMCwgYXJnVHlwZTEpWzBdKTsKK30KKworc3RhdGljIFRJbnRlcm1CaW5hcnkgKkFzU3BlY2lm
aWNCaW5hcnlOb2RlKFRJbnRlcm1Ob2RlICZub2RlLCBUT3BlcmF0b3Igb3ApCit7CisgICAgVElu
dGVybUJpbmFyeSAqYmluYXJ5Tm9kZSA9IG5vZGUuZ2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYg
KGJpbmFyeU5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYmluYXJ5Tm9kZS0+Z2V0T3AoKSA9
PSBvcCA/IGJpbmFyeU5vZGUgOiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworc3RhdGljIGJvb2wgUGFyZW50aGVzaXplKFRJbnRlcm1Ob2RlICZub2RlKQoreworICAg
IGlmIChub2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAobm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNBZ2dyZWdhdGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNT
d2l6emxlTm9kZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSA9IG5vZGUuZ2V0QXNVbmFyeU5vZGUoKSkKKyAg
ICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkg
cnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBsLgorICAgICAgICBjb25zdCBUVHlwZSAm
cmVzdWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUVHlwZSAm
YXJnVHlwZSAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCk7CisgICAgICAg
IHJldHVybiBJc1N5bWJvbGljT3BlcmF0b3IodW5hcnlOb2RlLT5nZXRPcCgpLCByZXN1bHRUeXBl
LCAmYXJnVHlwZSk7CisgICAgfQorCisgICAgaWYgKFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUg
PSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorICAgIHsKKyAgICAgICAgLy8gVE9ETzogVXNlIGEg
cHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRpdml0eSBydWxlcyBpbnN0ZWFkIG9mIHRoaXMgYWQtaG9j
IGltcGwuCisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUtPmdldE9wKCk7
CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEluZGV4RGlyZWN0OgorICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5k
aXJlY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIFBhcmVudGhlc2l6ZSgqYmluYXJ5Tm9kZS0+
Z2V0TGVmdCgpKTsKKworICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKyAg
ICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgICAg
IHJldHVybiBBc1NwZWNpZmljQmluYXJ5Tm9kZSgqYmluYXJ5Tm9kZS0+Z2V0UmlnaHQoKSwgVE9w
ZXJhdG9yOjpFT3BDb21tYSk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlOb2RlLT5n
ZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICAgPSBiaW5h
cnlOb2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlw
ZSAmcmlnaHRUeXBlICA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCktPmdldFR5cGUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSXNTeW1ib2xpY09wZXJhdG9yKGJpbmFyeU5vZGUtPmdldE9wKCks
IHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6Z3JvdXBlZFRyYXZlcnNlKFRJbnRlcm1Ob2RlICZub2RlKQoreworICAgIGNvbnN0IGJv
b2wgZW1pdFBhcmVucyA9IFBhcmVudGhlc2l6ZShub2RlKTsKKworICAgIGlmIChlbWl0UGFyZW5z
KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiKCI7CisgICAgfQorCisgICAgbm9kZS50cmF2ZXJz
ZSh0aGlzKTsKKworICAgIGlmIChlbWl0UGFyZW5zKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAi
KSI7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0UG9zdFF1YWxpZmll
cihjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAmZXZkQ29uZmlnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFyRGVjbCAmZGVjbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZp
ZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUUXVhbGlmaWVyOjpFdnFQb3NpdGlvbjoKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFGcmFnQ29vcmQ6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1twb3NpdGlvbl1dIjsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgor
ICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfc2l6ZV1dIjsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmVydGV4SUQ6CisgICAgICAgICAgICBp
ZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIgW1t2ZXJ0ZXhfaWRdXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50Q29vcmQ6CisgICAg
ICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtT3V0IDw8ICIgW1twb2ludF9jb29yZF1dIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJvbnRG
YWNpbmc6CisgICAgICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tmcm9udF9mYWNpbmddXSI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc3QgYm9vbCBpc0ludmFyaWFudCA9Cisg
ICAgICAgIGRlY2wuaXNGaWVsZCgpID8gbUludmFyaWFudHMuY29udGFpbnMoZGVjbC5maWVsZCgp
KSA6IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wudmFyaWFibGUoKSk7CisKKyAgICBpZiAoaXNJ
bnZhcmlhbnQpCisgICAgeworICAgICAgICBtT3V0IDw8ICIgW1tpbnZhcmlhbnRdXSI7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCBFbWl0TmFtZShTaW5rICZvdXQsIGNvbnN0IE5hbWUgJm5hbWUp
Cit7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKyAgICBEZWJ1Z1Npbms6OkVz
Y2FwZWRTaW5rIGVzY2FwZWRPdXQob3V0LmVzY2FwZSgpKTsKKyNlbHNlCisgICAgVEluZm9TaW5r
QmFzZSAmZXNjYXBlZE91dCA9IG91dDsKKyNlbmRpZgorICAgIG5hbWUuZW1pdChlc2NhcGVkT3V0
KTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBURmllbGQg
Jm9iamVjdCkKK3sKKyAgICBFbWl0TmFtZShtT3V0LCBOYW1lKG9iamVjdCkpOworfQorCit2b2lk
IEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCkKK3sK
KyAgICBhdXRvIGl0ID0gbVJlbmFtZWRTeW1ib2xzLmZpbmQoJm9iamVjdCk7CisgICAgaWYgKGl0
ID09IG1SZW5hbWVkU3ltYm9scy5lbmQoKSkKKyAgICB7CisgICAgICAgIEVtaXROYW1lKG1PdXQs
IE5hbWUob2JqZWN0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVtaXROYW1l
KG1PdXQsIGl0LT5zZWNvbmQpOworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmplY3QpCit7CisgICAgaWYgKG9iamVjdC5pc0Zp
ZWxkKCkpCisgICAgeworICAgICAgICBlbWl0TmFtZU9mKG9iamVjdC5maWVsZCgpKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QudmFyaWFibGUoKSk7
CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QmFyZVR5cGVOYW1lKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCit7CisgICAg
Y29uc3QgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworCisgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFZv
aWQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgY2FzZSBUQmFz
aWNUeXBlOjpFYnRGbG9hdDoKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91
dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRTdHJ1Y3Q6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAg
ICAgICAgICAgZW1pdE5hbWVPZihzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAq
dHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgZW1pdE5hbWVPZihpbnRlcmZh
Y2VCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChldENvbmZpZy5ldmRDb25maWcgJiYgZXRDb25m
aWcuZXZkQ29uZmlnLT5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBHZXRUZXh0dXJlVHlwZU5hbWUoYmFzaWNUeXBl
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmVudiA9IG1TeW1i
b2xFbnYuZ2V0VGV4dHVyZUVudihiYXNpY1R5cGUpOworICAgICAgICAgICAgICAgICAgICBlbWl0
TmFtZU9mKGVudik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1p
dFR5cGUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZykK
K3sKKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0
byAmZXZkQ29uZmlnID0gKmV0Q29uZmlnLmV2ZENvbmZpZzsKKyAgICAgICAgaWYgKGV2ZENvbmZp
Zy5pc1BvaW50ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgdG9TdHJpbmcoKmV2
ZENvbmZpZy5pc1BvaW50ZXIpOworICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJlbmNlKQorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpldmRDb25maWcuaXNSZWZlcmVuY2UpOworICAgICAg
ICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCisgICAgeworICAgICAgICBtT3V0IDw8ICJBTkdMRV90ZW5zb3I8IjsKKyAgICB9CisK
KyAgICBpZiAodHlwZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAg
ICAgIG1PdXQgPDwgIm1ldGFsOjoiOworICAgIH0KKworICAgIGlmIChldENvbmZpZy5ldmRDb25m
aWcgJiYgZXRDb25maWcuZXZkQ29uZmlnLT5pc1BhY2tlZCkKKyAgICB7CisgICAgICAgIG1PdXQg
PDwgInBhY2tlZF8iOworICAgIH0KKworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwgZXRDb25m
aWcpOworCisgICAgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIG1PdXQgPDwg
dHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4
KCkpCisgICAgeworICAgICAgICBtT3V0IDw8IHR5cGUuZ2V0Q29scygpIDw8ICJ4IiA8PCB0eXBl
LmdldFJvd3MoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgeworICAg
ICAgICBmb3IgKGF1dG8gc2l6ZSA6IHR5cGUuZ2V0QXJyYXlTaXplcygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtT3V0IDw8ICIsICIgPDwgc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBtT3V0
IDw8ICI+IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnKQorICAgIHsKKyAg
ICAgICAgY29uc3QgYXV0byAmZXZkQ29uZmlnID0gKmV0Q29uZmlnLmV2ZENvbmZpZzsKKyAgICAg
ICAgaWYgKGV2ZENvbmZpZy5pc1BvaW50ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQg
PDwgIiAqIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmRDb25maWcuaXNSZWZlcmVu
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAmIjsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEZpZWxkRGVjbGFyYXRpb24oY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25J
bmRpY2VzKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgPSAqZmllbGQudHlwZSgpOwor
ICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWMgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworCisgICAg
RW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZkQ29uZmlnOworICAgIGV2ZENvbmZpZy5l
bWl0UG9zdFF1YWxpZmllciAgICAgID0gdHJ1ZTsKKyAgICBldmRDb25maWcuZGlzYWJsZVN0cnVj
dFNwZWNpZmllciA9IHRydWU7CisgICAgZXZkQ29uZmlnLmlzUGFja2VkICAgICAgICAgICAgICAg
PSBtU3ltYm9sRW52LmlzUGFja2VkKGZpZWxkKTsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAg
ICAgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKGZpZWxkKTsKKyAgICBldmRDb25maWcu
aXNSZWZlcmVuY2UgICAgICAgICAgICA9IG1TeW1ib2xFbnYuaXNSZWZlcmVuY2UoZmllbGQpOwor
ICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOwor
CisgICAgY29uc3QgVFF1YWxpZmllciBxdWFsID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICBz
d2l0Y2ggKHF1YWwpCisgICAgeworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZsYXRJbjoK
KyAgICAgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50SW4uZXh0ZXJuYWwgPT0g
JnBhcmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tmbGF0
XV0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFGcmFnbWVudE91dDoKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFG
cmFnRGF0YToKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0LmV4
dGVybmFsID09ICZwYXJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh0
eXBlLmlzVmVjdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChiYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRJbnQgfHwgYmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0VUludCB8fAorICAgICAgICAg
ICAgICAgICAgICAgIGJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gZ2VuZXJhbCBhbmQgbmVlZHMgYSByZWltcGxl
bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLyBJbiBHTFNMIDMuMCwgV2UgY2FuJ3Qg
YWx3YXlzIGFzc3VtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgc2FmZSBpbmRleC4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gU2VlIDQuMy44LjIKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNzL2VzLzMuMC9HTFNMX0VTX1Nw
ZWNpZmljYXRpb25fMy4wMC5wZGYKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0g
YW5ub3RhdGlvbkluZGljZXMuY29sb3IrKzsKKyAgICAgICAgICAgICAgICAgICAgbU91dCA8PCAi
IFtbY29sb3IoIiA8PCBpbmRleCA8PCAiKV1dIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cUZyYWdEZXB0aDoKKyAgICAgICAgICAgIG1PdXQgPDwgIiBbW2RlcHRoKGFueSldXSI7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgc3RkOjptYXA8TmFtZSwgc2l6ZV90PiBCdWlsZEV4dGVybmFsQXR0
cmlidXRlSW5kZXhNYXAoCisgICAgY29uc3QgVENvbXBpbGVyICZjb21waWxlciwKKyAgICBjb25z
dCBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiAmc3RydWN0dXJlKQoreworICAgIEFTU0VSVChz
dHJ1Y3R1cmUuaXNUb3RhbGx5RnVsbCgpKTsKKworICAgIGNvbnN0IGF1dG8gJnNoYWRlclZhcnMg
ICAgID0gY29tcGlsZXIuZ2V0QXR0cmlidXRlcygpOworICAgIGNvbnN0IHNpemVfdCBzaGFkZXJW
YXJTaXplID0gc2hhZGVyVmFycy5zaXplKCk7CisgICAgc2l6ZV90IHNoYWRlclZhckluZGV4ICAg
ICAgPSAwOworCisgICAgY29uc3QgYXV0byAmZXh0ZXJuYWxGaWVsZHMgPSBzdHJ1Y3R1cmUuZXh0
ZXJuYWwtPmZpZWxkcygpOworICAgIGNvbnN0IHNpemVfdCBleHRlcm5hbFNpemUgID0gZXh0ZXJu
YWxGaWVsZHMuc2l6ZSgpOworICAgIHNpemVfdCBleHRlcm5hbEluZGV4ICAgICAgID0gMDsKKwor
ICAgIGNvbnN0IGF1dG8gJmludGVybmFsRmllbGRzID0gc3RydWN0dXJlLmludGVybmFsLT5maWVs
ZHMoKTsKKyAgICBjb25zdCBzaXplX3QgaW50ZXJuYWxTaXplICA9IGludGVybmFsRmllbGRzLnNp
emUoKTsKKyAgICBzaXplX3QgaW50ZXJuYWxJbmRleCAgICAgICA9IDA7CisKKyAgICAvLyBJbnRl
cm5hbCBmaWVsZHMgYXJlIG5ldmVyIHNwbGl0LiBFeHRlcm5hbCBmaWVsZHMgYXJlIHNvbWV0aW1l
cyBzcGxpdC4KKyAgICBBU1NFUlQoZXh0ZXJuYWxTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAg
ICAvLyBTdHJ1Y3R1cmVzIGRvIG5vdCBjb250YWluIGFueSBpbmFjdGl2ZSBmaWVsZHMuCisgICAg
QVNTRVJUKHNoYWRlclZhclNpemUgPj0gaW50ZXJuYWxTaXplKTsKKworICAgIHN0ZDo6bWFwPE5h
bWUsIHNpemVfdD4gZXh0ZXJuYWxOYW1lVG9BdHRyaWJ1dGVJbmRleDsKKyAgICBzaXplX3QgYXR0
cmlidXRlSW5kZXggPSAwOworCisgICAgd2hpbGUgKGludGVybmFsSW5kZXggPCBpbnRlcm5hbFNp
emUpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmludGVybmFsRmllbGQgPSAqaW50ZXJu
YWxGaWVsZHNbaW50ZXJuYWxJbmRleF07CisgICAgICAgIGNvbnN0IE5hbWUgaW50ZXJuYWxOYW1l
ICAgICA9IE5hbWUoaW50ZXJuYWxGaWVsZCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZpbnRlcm5h
bFR5cGUgICA9ICppbnRlcm5hbEZpZWxkLnR5cGUoKTsKKyAgICAgICAgd2hpbGUgKGludGVybmFs
TmFtZS5yYXdOYW1lKCkgIT0gc2hhZGVyVmFyc1tzaGFkZXJWYXJJbmRleF0ubmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhpcyBjYXNlIHJlcHJlc2VudHMgYW4gaW5hY3RpdmUgZmll
bGQuCisKKyAgICAgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICAgICBBU1NFUlQo
c2hhZGVyVmFySW5kZXggPCBzaGFkZXJWYXJTaXplKTsKKworICAgICAgICAgICAgKythdHRyaWJ1
dGVJbmRleDsgIC8vIFRPRE86IE1pZ2h0IG5lZWQgdG8gaW5jcmVtZW50IG1vcmUgaWYgc2hhZGVy
IHZhciB0eXBlIGlzIGEgbWF0cml4LgorICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90
IGNvbHMgPSBpbnRlcm5hbFR5cGUuaXNNYXRyaXgoKSA/IGludGVybmFsVHlwZS5nZXRDb2xzKCkg
OiAxOworCisgICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBjIDwgY29sczsgKytjKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBURmllbGQgJmV4dGVybmFsRmllbGQgPSAqZXh0ZXJuYWxG
aWVsZHNbZXh0ZXJuYWxJbmRleF07CisgICAgICAgICAgICBjb25zdCBOYW1lIGV4dGVybmFsTmFt
ZSAgICAgPSBOYW1lKGV4dGVybmFsRmllbGQpOworICAgICAgICAgICAgQVNTRVJUKCFleHRlcm5h
bEZpZWxkLnR5cGUoKS0+aXNNYXRyaXgoKSk7CisKKyAgICAgICAgICAgIGV4dGVybmFsTmFtZVRv
QXR0cmlidXRlSW5kZXhbZXh0ZXJuYWxOYW1lXSA9IGF0dHJpYnV0ZUluZGV4OworCisgICAgICAg
ICAgICArK2V4dGVybmFsSW5kZXg7CisgICAgICAgICAgICArK2F0dHJpYnV0ZUluZGV4OworICAg
ICAgICB9CisKKyAgICAgICAgKytzaGFkZXJWYXJJbmRleDsKKyAgICAgICAgKytpbnRlcm5hbElu
ZGV4OworICAgIH0KKworICAgIEFTU0VSVChzaGFkZXJWYXJJbmRleCA8PSBzaGFkZXJWYXJTaXpl
KTsKKyAgICBBU1NFUlQoZXh0ZXJuYWxJbmRleCA8PSBleHRlcm5hbFNpemUpOyAgLy8gbGVzcyB0
aGFuIGlmIHBhZGRpbmcgd2FzIGludHJvZHVjZWQKKyAgICBBU1NFUlQoaW50ZXJuYWxJbmRleCA9
PSBpbnRlcm5hbFNpemUpOworCisgICAgcmV0dXJuIGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5k
ZXg7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlv
bihjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2Vz
KQoreworICAgIEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBl
dmRDb25maWcuZGlzYWJsZVN0cnVjdFNwZWNpZmllciA9IHRydWU7CisgICAgZW1pdFZhcmlhYmxl
RGVjbGFyYXRpb24oVmFyRGVjbChmaWVsZCksIGV2ZENvbmZpZyk7CisgICAgbU91dCA8PCAiIFtb
YXR0cmlidXRlKCIgPDwgYW5ub3RhdGlvbkluZGljZXMuYXR0cmlidXRlKysgPDwgIildXSI7Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTdHJ1Y3REZWNsYXJhdGlvbihjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNU
eXBlOjpFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkpOwor
CisgICAgbU91dCA8PCAic3RydWN0ICI7CisgICAgZW1pdEJhcmVUeXBlTmFtZSh0eXBlLCB7fSk7
CisKKyAgICBtT3V0IDw8ICJcbiI7CisgICAgZW1pdE9wZW5CcmFjZSgpOworCisgICAgY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlID0gKnR5cGUuZ2V0U3RydWN0KCk7CisgICAgc3RkOjptYXA8
TmFtZSwgc2l6ZV90PiBmaWVsZFRvQXR0cmlidXRlSW5kZXg7CisgICAgY29uc3QgYm9vbCBoYXNB
dHRyaWJ1dGVJbmRpY2VzICAgICAgICAgICA9IG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4uZXh0
ZXJuYWwgPT0gJnN0cnVjdHVyZTsKKyAgICBjb25zdCBib29sIHJlY2xhaW1VbnVzZWRBdHRyaWJ1
dGVJbmRpY2VzID0gbUNvbXBpbGVyLmdldFNoYWRlclZlcnNpb24oKSA8IDMwMDsKKworICAgIGlm
IChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgIHsKKyAgICAgICAgZmllbGRUb0F0dHJpYnV0ZUlu
ZGV4ID0KKyAgICAgICAgICAgIEJ1aWxkRXh0ZXJuYWxBdHRyaWJ1dGVJbmRleE1hcChtQ29tcGls
ZXIsIG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4pOworICAgIH0KKworICAgIEZpZWxkQW5ub3Rh
dGlvbkluZGljZXMgYW5ub3RhdGlvbkluZGljZXM7CisKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAq
ZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisgICAgeworICAgICAgICBlbWl0SW5kZW50YXRp
b24oKTsKKyAgICAgICAgaWYgKGhhc0F0dHJpYnV0ZUluZGljZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IGF1dG8gaXQgPSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZmluZChOYW1lKCpm
aWVsZCkpOworICAgICAgICAgICAgaWYgKGl0ID09IGZpZWxkVG9BdHRyaWJ1dGVJbmRleC5lbmQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmllbGQtPnN5bWJvbFR5
cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZmllbGQtPm5hbWUoKS5iZWdpbnNXaXRoKCJfIikpOworICAgICAgICAgICAgICAgIEFTU0VS
VChhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAg
ICAgICAgICAgIGVtaXRGaWVsZERlY2xhcmF0aW9uKCpmaWVsZCwgc3RydWN0dXJlLCBhbm5vdGF0
aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkgIT0gU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCB8fAorICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQtPm5h
bWUoKS5iZWdpbnNXaXRoKCJfIikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWFuZ2xlOjpF
bmRzV2l0aChmaWVsZC0+bmFtZSgpLmRhdGEoKSwgIl9wYWQiKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFyZWNsYWltVW51c2VkQXR0cmlidXRlSW5kaWNlcykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVtaXRBdHRyaWJ1dGVEZWNs
YXJhdGlvbigqZmllbGQsIGFubm90YXRpb25JbmRpY2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRGaWVsZERlY2xh
cmF0aW9uKCpmaWVsZCwgc3RydWN0dXJlLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgIH0K
KyAgICAgICAgbU91dCA8PCAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoIW1QaXBlbGluZVN0cnVj
dHMubWF0Y2hlcyhzdHJ1Y3R1cmUsIHRydWUsIHRydWUpKQorICAgIHsKKyAgICAgICAgTWV0YWxM
YXlvdXRPZkNvbmZpZyBsYXlvdXRDb25maWc7CisgICAgICAgIGxheW91dENvbmZpZy50cmVhdFNh
bXBsZXJzQXNUZXh0dXJlRW52ID0gdHJ1ZTsKKyAgICAgICAgTGF5b3V0IGxheW91dCAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSBNZXRhbExheW91dE9mKHR5cGUsIGxheW91dENvbmZpZyk7Cisg
ICAgICAgIHNpemVfdCBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGF5b3V0LnNp
emVPZiAlIDE2OworICAgICAgICBpZiAocGFkICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRJbmRlbnRhdGlvbigpOworICAgICAgICAgICAgbU91dCA8PCAiY2hhciAiOworICAgICAg
ICAgICAgRW1pdE5hbWUobU91dCwgbUlkR2VuLmNyZWF0ZU5ld05hbWUoInBhZCIpKTsKKyAgICAg
ICAgICAgIG1PdXQgPDwgIlsiIDw8IHBhZCA8PCAiXTtcbiI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBlbWl0Q2xvc2VCcmFjZSgpOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKAorICAgIGNvbnN0IFZhckRlY2wgJmRlY2wsCisg
ICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKK3sKKyAg
ICBFbWl0VHlwZUNvbmZpZyBldENvbmZpZzsKKyAgICBldENvbmZpZy5ldmRDb25maWcgPSAmZXZk
Q29uZmlnOworCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBkZWNsLnR5cGUoKTsKKyAgICBlbWl0
VHlwZSh0eXBlLCBldENvbmZpZyk7CisKKyAgICBpZiAoZGVjbC5zeW1ib2xUeXBlKCkgIT0gU3lt
Ym9sVHlwZTo6RW1wdHkpCisgICAgeworICAgICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgZW1p
dE5hbWVPZihkZWNsKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJh
dGlvbkNvbmZpZyAmZXZkQ29uZmlnKQoreworICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSA9IGRlY2wuc3ltYm9sVHlwZSgpOworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9
IGRlY2wudHlwZSgpOworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlICA9IHR5cGUuZ2V0
QmFzaWNUeXBlKCk7CisKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7CisgICAgICAgIGNh
c2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlw
ZS5pc1N0cnVjdFNwZWNpZmllcigpICYmICFldmRDb25maWcuZGlzYWJsZVN0cnVjdFNwZWNpZmll
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZENvbmZpZy5pc1Bh
cmFtZXRlcik7CisgICAgICAgICAgICAgICAgZW1pdFN0cnVjdERlY2xhcmF0aW9uKHR5cGUpOwor
ICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXROYW1lT2YoZGVjbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGVtaXRPcmRpbmFyeVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpF
bXB0eSB8fCBldmRDb25maWcuaXNQYXJhbWV0ZXIpOworICAgICAgICAgICAgZW1pdE9yZGluYXJ5
VmFyaWFibGVEZWNsYXJhdGlvbihkZWNsLCBldmRDb25maWcpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGV2ZENvbmZpZy5lbWl0UG9zdFF1YWxpZmllcikKKyAgICB7CisgICAgICAgIGVt
aXRQb3N0UXVhbGlmaWVyKGV2ZENvbmZpZywgZGVjbCwgdHlwZS5nZXRRdWFsaWZpZXIoKSk7Cisg
ICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpzeW1ib2xOb2RlKQoreworICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7
CisKKyAgICBBU1NFUlQodmFyLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpFbXB0eSk7CisK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRWb2lkKQorICAg
IHsKKyAgICAgICAgbU91dCA8PCAiLyoiOworICAgICAgICBlbWl0TmFtZU9mKHZhcik7CisgICAg
ICAgIG1PdXQgPDwgIiovIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZW1pdE5h
bWVPZih2YXIpOworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFNpbmds
ZUNvbnN0YW50KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9uKQoreworICAg
IHN3aXRjaCAoY29uc3RVbmlvbi0+Z2V0VHlwZSgpKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFz
aWNUeXBlOjpFYnRCb29sOgorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IChjb25zdFVu
aW9uLT5nZXRCQ29uc3QoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkgPDwgImYiOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50
OgorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6
RWJ0VUludDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRV
Q29uc3QoKSA8PCAidSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAgICAgICB9CisgICAgfQor
fQorCitjb25zdCBUQ29uc3RhbnRVbmlvbiAqR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRDb25zdGFu
dFVuaW9uQXJyYXkoCisgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5pb24s
CisgICAgY29uc3Qgc2l6ZV90IHNpemUpCit7CisgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNv
bnN0VW5pb25JdGVyYXRlZCA9IGNvbnN0VW5pb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpKyssIGNvbnN0VW5pb25JdGVyYXRlZCsrKQorICAgIHsKKyAgICAgICAgZW1pdFNp
bmdsZUNvbnN0YW50KGNvbnN0VW5pb25JdGVyYXRlZCk7CisKKyAgICAgICAgaWYgKGkgIT0gc2l6
ZSAtIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gY29uc3RVbmlvbkl0ZXJhdGVkOworfQorCitjb25zdCBUQ29uc3Rh
bnRVbmlvbiAqR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBl
ICZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkJlZ2luKQoreworICAg
IGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdFVuaW9uQ3VyciA9IGNvbnN0VW5pb25CZWdpbjsK
KyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgICAgICAgICAgPSB0eXBlLmdldFN0cnVj
dCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBFbWl0VHlwZUNvbmZpZyBj
b25maWcgPSBFbWl0VHlwZUNvbmZpZ3tudWxscHRyfTsKKyAgICAgICAgZW1pdFR5cGUodHlwZSwg
Y29uZmlnKTsKKyAgICAgICAgbU91dCA8PCAieyI7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBU
VHlwZSAqZmllbGRUeXBlID0gZmllbGRzW2ldLT50eXBlKCk7CisgICAgICAgICAgICBjb25zdFVu
aW9uQ3VyciAgICAgICAgID0gZW1pdENvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlv
bkN1cnIpOworICAgICAgICAgICAgaWYgKGkgIT0gZmllbGRzLnNpemUoKSAtIDEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIG1PdXQgPDwgIn0iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBzaXplX3Qgc2l6ZSAgICA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29s
IHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7
CisgICAgICAgICAgICBFbWl0VHlwZUNvbmZpZyBjb25maWcgPSBFbWl0VHlwZUNvbmZpZ3tudWxs
cHRyfTsKKyAgICAgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZpZyk7CisgICAgICAgICAgICBt
T3V0IDw8ICIoIjsKKyAgICAgICAgfQorICAgICAgICBjb25zdFVuaW9uQ3VyciA9IGVtaXRDb25z
dGFudFVuaW9uQXJyYXkoY29uc3RVbmlvbkN1cnIsIHNpemUpOworICAgICAgICBpZiAod3JpdGVU
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIpIjsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gY29uc3RVbmlvbkN1cnI7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RWYWx1ZU5v
ZGUpCit7CisgICAgZW1pdENvbnN0YW50VW5pb24oY29uc3RWYWx1ZU5vZGUtPmdldFR5cGUoKSwg
Y29uc3RWYWx1ZU5vZGUtPmdldENvbnN0YW50VmFsdWUoKSk7Cit9CisKK2Jvb2wgR2VuTWV0YWxU
cmF2ZXJzZXI6OnZpc2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKnN3aXp6bGVOb2Rl
KQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqc3dpenpsZU5vZGUtPmdldE9wZXJhbmQoKSk7Cisg
ICAgbU91dCA8PCAiLiI7CisKKyAgICB7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJU
UykKKyAgICAgICAgRGVidWdTaW5rOjpFc2NhcGVkU2luayBlc2NhcGVkT3V0KG1PdXQuZXNjYXBl
KCkpOworICAgICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBlc2NhcGVkT3V0LmdldCgpOworI2Vs
c2UKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ICAgICAgICA9IG1PdXQ7CisjZW5kaWYKKyAg
ICAgICAgc3dpenpsZU5vZGUtPndyaXRlT2Zmc2V0c0FzWFlaVygmb3V0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IFRGaWVsZCAmR2VuTWV0YWxUcmF2ZXJzZXI6Omdl
dERpcmVjdEZpZWxkKGNvbnN0IFRGaWVsZExpc3RDb2xsZWN0aW9uICZmaWVsZExpc3RDb2xsZWN0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVENvbnN0YW50VW5pb24gJmluZGV4KQoreworICAgIEFTU0VSVChpbmRleC5nZXRUeXBlKCkg
PT0gVEJhc2ljVHlwZTo6RWJ0SW50KTsKKworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlz
dCA9IGZpZWxkTGlzdENvbGxlY3Rpb24uZmllbGRzKCk7CisgICAgY29uc3QgaW50IGluZGV4VmFs
ICAgICAgICAgID0gaW5kZXguZ2V0SUNvbnN0KCk7CisgICAgY29uc3QgVEZpZWxkICZmaWVsZCAg
ICAgICAgID0gKmZpZWxkTGlzdFtpbmRleFZhbF07CisKKyAgICByZXR1cm4gZmllbGQ7Cit9CisK
K2NvbnN0IFRGaWVsZCAmR2VuTWV0YWxUcmF2ZXJzZXI6OmdldERpcmVjdEZpZWxkKGNvbnN0IFRJ
bnRlcm1UeXBlZCAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKQoreworICAgIGNvbnN0IFRU
eXBlICZmaWVsZHNUeXBlID0gZmllbGRzTm9kZS5nZXRUeXBlKCk7CisKKyAgICBjb25zdCBURmll
bGRMaXN0Q29sbGVjdGlvbiAqZmllbGRMaXN0Q29sbGVjdGlvbiA9IGZpZWxkc1R5cGUuZ2V0U3Ry
dWN0KCk7CisgICAgaWYgKGZpZWxkTGlzdENvbGxlY3Rpb24gPT0gbnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIGZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldEludGVyZmFjZUJsb2Nr
KCk7CisgICAgfQorICAgIEFTU0VSVChmaWVsZExpc3RDb2xsZWN0aW9uKTsKKworICAgIGNvbnN0
IFRJbnRlcm1Db25zdGFudFVuaW9uICppbmRleE5vZGVfID0gaW5kZXhOb2RlLmdldEFzQ29uc3Rh
bnRVbmlvbigpOworICAgIEFTU0VSVChpbmRleE5vZGVfKTsKKyAgICBjb25zdCBUQ29uc3RhbnRV
bmlvbiAmaW5kZXggPSAqaW5kZXhOb2RlXy0+Z2V0Q29uc3RhbnRWYWx1ZSgpOworCisgICAgcmV0
dXJuIGdldERpcmVjdEZpZWxkKCpmaWVsZExpc3RDb2xsZWN0aW9uLCBpbmRleCk7Cit9CisKK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpi
aW5hcnlOb2RlKQoreworICAgIGNvbnN0IFRPcGVyYXRvciBvcCAgICAgID0gYmluYXJ5Tm9kZS0+
Z2V0T3AoKTsKKyAgICBUSW50ZXJtVHlwZWQgJmxlZnROb2RlICA9ICpiaW5hcnlOb2RlLT5nZXRM
ZWZ0KCk7CisgICAgVEludGVybVR5cGVkICZyaWdodE5vZGUgPSAqYmluYXJ5Tm9kZS0+Z2V0Umln
aHQoKTsKKworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdEludGVyZmFjZUJsb2NrOgorICAgICAgICB7CisgICAgICAgICAgICBncm91cGVkVHJhdmVy
c2UobGVmdE5vZGUpOworICAgICAgICAgICAgbU91dCA8PCAiLiI7CisgICAgICAgICAgICBlbWl0
TmFtZU9mKGdldERpcmVjdEZpZWxkKGxlZnROb2RlLCByaWdodE5vZGUpKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorICAgICAgICB7Cisg
ICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAgICAgICAgbU91dCA8
PCAiWyI7CisgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICBtT3V0IDw8ICJdIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSA9IGJp
bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAg
ID0gbGVmdE5vZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJpZ2h0VHlw
ZSAgPSByaWdodE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09w
ZXJhdG9yKG9wLCByZXN1bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAg
ICAgICAgICAgaWYgKG9wICE9IFRPcGVyYXRvcjo6RU9wQ29tbWEpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwg
JmxlZnRUeXBlLCAmcmlnaHRUeXBlKSA8PCAiICI7CisgICAgICAgICAgICAgICAgZ3JvdXBlZFRy
YXZlcnNlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwg
cmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSA8PCAiKCI7CisgICAgICAgICAgICAg
ICAgbGVmdE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiLCAi
OworICAgICAgICAgICAgICAgIHJpZ2h0Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgSXNQb3N0Zml4KFRPcGVyYXRvciBvcCkK
K3sKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBv
c3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqdW5hcnlOb2RlKQoreworICAgIGNvbnN0IFRPcGVy
YXRvciBvcCAgICAgID0gdW5hcnlOb2RlLT5nZXRPcCgpOworICAgIGNvbnN0IFRUeXBlICZyZXN1
bHRUeXBlID0gdW5hcnlOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgJmFyZyAg
ICA9ICp1bmFyeU5vZGUtPmdldE9wZXJhbmQoKTsKKyAgICBjb25zdCBUVHlwZSAmYXJnVHlwZSA9
IGFyZy5nZXRUeXBlKCk7CisKKyAgICBjb25zdCBjaGFyICpuYW1lID0gR2V0T3BlcmF0b3JTdHJp
bmcob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBlKTsKKworICAgIGlmIChJc1N5bWJvbGljT3BlcmF0
b3Iob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBlKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wg
cG9zdGZpeCA9IElzUG9zdGZpeChvcCk7CisgICAgICAgIGlmICghcG9zdGZpeCkKKyAgICAgICAg
eworICAgICAgICAgICAgbU91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGdyb3VwZWRU
cmF2ZXJzZShhcmcpOworICAgICAgICBpZiAocG9zdGZpeCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbU91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1PdXQgPDwgbmFtZSA8PCAiKCI7CisgICAgICAgIGFyZy50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgbU91dCA8PCAiKSI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpj
b25kaXRpb25hbE5vZGUpCit7CisgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25hbE5vZGUt
PmdldENvbmRpdGlvbigpKTsKKyAgICBtT3V0IDw8ICIgPyAiOworICAgIGdyb3VwZWRUcmF2ZXJz
ZSgqY29uZGl0aW9uYWxOb2RlLT5nZXRUcnVlRXhwcmVzc2lvbigpKTsKKyAgICBtT3V0IDw8ICIg
OiAiOworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2RlLT5nZXRGYWxzZUV4cHJl
c3Npb24oKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICppZlRoZW5FbHNlTm9kZSkKK3sK
KyAgICBUSW50ZXJtVHlwZWQgJmNvbmROb2RlID0gKmlmVGhlbkVsc2VOb2RlLT5nZXRDb25kaXRp
b24oKTsKKyAgICBUSW50ZXJtQmxvY2sgKnRoZW5Ob2RlID0gaWZUaGVuRWxzZU5vZGUtPmdldFRy
dWVCbG9jaygpOworICAgIFRJbnRlcm1CbG9jayAqZWxzZU5vZGUgPSBpZlRoZW5FbHNlTm9kZS0+
Z2V0RmFsc2VCbG9jaygpOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAi
aWYgKCI7CisgICAgY29uZE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8PCAiKSI7CisK
KyAgICBpZiAodGhlbk5vZGUpCisgICAgeworICAgICAgICBtT3V0IDw8ICJcbiI7CisgICAgICAg
IHRoZW5Ob2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbU91dCA8PCAiIHt9IjsKKyAgICB9CisKKyAgICBpZiAoZWxzZU5vZGUpCisgICAgeworICAg
ICAgICBtT3V0IDw8ICJcbiI7CisgICAgICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgICAgICBt
T3V0IDw8ICJlbHNlXG4iOworICAgICAgICBlbHNlTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEFsd2F5cyBlbWl0ICJlbHNlIiBldmVuIHdo
ZW4gZW1wdHkgYmxvY2sgdG8gYXZvaWQgbmVzdGVkIGlmLXN0bXQgaXNzdWVzLgorICAgICAgICBt
T3V0IDw8ICIgZWxzZSB7fSI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqc3dp
dGNoTm9kZSkKK3sKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0IDw8ICJzd2l0Y2gg
KCI7CisgICAgc3dpdGNoTm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtT3V0
IDw8ICIpXG4iOworCisgICAgQVNTRVJUKCFtUGFyZW50SXNTd2l0Y2gpOworICAgIG1QYXJlbnRJ
c1N3aXRjaCA9IHRydWU7CisgICAgc3dpdGNoTm9kZS0+Z2V0U3RhdGVtZW50TGlzdCgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICBtUGFyZW50SXNTd2l0Y2ggPSBmYWxzZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKFZpc2l0LCBUSW50
ZXJtQ2FzZSAqY2FzZU5vZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisKKyAgICBpZiAo
Y2FzZU5vZGUtPmhhc0NvbmRpdGlvbigpKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpj
b25kRXhwciA9IGNhc2VOb2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICAgICAgbU91dCA8PCAiY2Fz
ZSAiOworICAgICAgICBjb25kRXhwci0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1PdXQgPDwg
IjoiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtT3V0IDw8ICJkZWZhdWx0Olxu
IjsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJz
ZXI6OmVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpCit7CisgICAg
Y29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworCisgICAgZW1pdEZ1bmN0aW9uUmV0
dXJuKGZ1bmMpOworCisgICAgbU91dCA8PCAiICI7CisgICAgZW1pdE5hbWVPZihmdW5jKTsKKyAg
ICBpZiAoaXNNYWluKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiMCI7CisgICAgfQorICAgIG1P
dXQgPDwgIigiOworCisgICAgYm9vbCBlbWl0Q29tbWEgICAgICAgICAgPSBmYWxzZTsKKyAgICBj
b25zdCBzaXplX3QgcGFyYW1Db3VudCA9IGZ1bmMuZ2V0UGFyYW1Db3VudCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKGVt
aXRDb21tYSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiLCAiOworICAgICAgICB9
CisgICAgICAgIGVtaXRDb21tYSA9IHRydWU7CisKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZw
YXJhbSA9ICpmdW5jLmdldFBhcmFtKGkpOworICAgICAgICBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIo
ZnVuYywgcGFyYW0pOworICAgIH0KKworICAgIG1PdXQgPDwgIikiOworfQorCit2b2lkIEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQor
eworICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRU
eXBlICZyZXR1cm5UeXBlID0gZnVuYy5nZXRSZXR1cm5UeXBlKCk7CisgICAgaWYgKGlzTWFpbikK
KyAgICB7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHJldHVyblR5cGUu
Z2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gbnVsbHB0cik7CisgICAg
ICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0Lm1hdGNoZXMoKnN0cnVjdHVyZSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgImZyYWdtZW50ICI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAobVBpcGVsaW5lU3RydWN0cy52ZXJ0ZXhPdXQubWF0Y2hlcygqc3Ry
dWN0dXJlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAidmVydGV4ICI7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZW1pdFR5cGUocmV0dXJuVHlwZSwgRW1pdFR5cGVDb25maWcoKSk7
Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGdW5jdGlvblBhcmFtZXRlcihjb25z
dCBURnVuY3Rpb24gJmZ1bmMsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0pCit7CisgICAgY29uc3Qg
Ym9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworCisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAg
ICAgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZp
ZyBldmRDb25maWc7CisgICAgZXZkQ29uZmlnLmlzUGFyYW1ldGVyICAgICAgID0gdHJ1ZTsKKyAg
ICBldmRDb25maWcuaXNNYWluUGFyYW1ldGVyICAgPSBpc01haW47CisgICAgZXZkQ29uZmlnLmVt
aXRQb3N0UXVhbGlmaWVyID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5pc1BvaW50ZXIgICAgICAg
ICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKHBhcmFtKTsKKyAgICBldmRDb25maWcuaXNSZWZlcmVu
Y2UgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKHBhcmFtKTsKKyAgICBlbWl0VmFyaWFi
bGVEZWNsYXJhdGlvbihWYXJEZWNsKHBhcmFtKSwgZXZkQ29uZmlnKTsKKworICAgIGlmIChpc01h
aW4pCisgICAgeworICAgICAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9u
ID0KKyAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29tcGlsZXIp
LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50SW4u
bWF0Y2hlcygqc3RydWN0dXJlKSB8fAorICAgICAgICAgICAgICAgIG1QaXBlbGluZVN0cnVjdHMu
dmVydGV4SW4ubWF0Y2hlcygqc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIgW1tzdGFnZV9pbl1dIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMuYW5nbGVVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW2J1ZmZlcigi
IDw8IHJ4OjptdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCA8PCAiKV1dIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudXNlclVuaWZv
cm1zLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiIFtbYnVmZmVyKCIgPDwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPDwgIildXSI7
CisgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkVW5pZm9ybUJ1ZmZlckJpbmRpbmcocGFy
YW0ubmFtZSgpLmRhdGEoKSwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXgpOworICAgICAgICAgICAg
ICAgIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RydWN0dXJlLT5uYW1lKCkg
PT0gIm1ldGFsOjpzYW1wbGVyIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0
IDw8ICIgW1tzYW1wbGVyKCIgPDwgKG1NYWluU2FtcGxlckluZGV4KSA8PCAiKV1dIjsKKyAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnaW5hbE5hbWUgPQorICAgICAgICAgICAg
ICAgICAgICByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkU2FtcGxlckJpbmRpbmcob3JpZ2lu
YWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisgICAgICAgICAgICAgICAgbU1haW5TYW1wbGVy
SW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgW1t0ZXh0dXJlKCIgPDwgKG1NYWluVGV4
dHVyZUluZGV4KSA8PCAiKV1dIjsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG9yaWdp
bmFsTmFtZSA9IHJlZmxlY3Rpb24tPmdldE9yaWdpbmFsTmFtZShwYXJhbS51bmlxdWVJZCgpLmdl
dCgpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFRleHR1cmVCaW5kaW5nKG9yaWdpbmFs
TmFtZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgbU1haW5UZXh0dXJlSW5kZXgg
Kz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoTmFtZShwYXJhbSkgPT0gUGlwZWxpbmV7UGlwZWxpbmU6OlR5cGU6Okluc3RhbmNlSWQsIG51
bGxwdHJ9LmdldFN0cnVjdEluc3RhbmNlTmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiBbW2luc3RhbmNlX2lkXV0iOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKFRJbnRlcm1G
dW5jdGlvblByb3RvdHlwZSAqZnVuY1Byb3RvTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24g
JmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAgIGVtaXRJbmRlbnRh
dGlvbigpOworICAgIGVtaXRGdW5jdGlvblNpZ25hdHVyZShmdW5jKTsKK30KKworYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKQoreworICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVu
YyA9ICpmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICBUSW50ZXJtQmxvY2sgJmJvZHkg
ICAgPSAqZnVuY0RlZk5vZGUtPmdldEJvZHkoKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOwor
ICAgIGVtaXRGdW5jdGlvblNpZ25hdHVyZShmdW5jKTsKKyAgICBtT3V0IDw8ICJcbiI7CisgICAg
Ym9keS50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworR2VuTWV0YWxU
cmF2ZXJzZXI6OkZ1bmNUb05hbWUgR2VuTWV0YWxUcmF2ZXJzZXI6OkJ1aWxkRnVuY1RvTmFtZSgp
Cit7CisgICAgRnVuY1RvTmFtZSBtYXA7CisKKyAgICBhdXRvIHB1dEFuZ2xlID0gWyZdKGNvbnN0
IGNoYXIgKm5hbWVTdHIpIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIG5hbWUobmFt
ZVN0cik7CisgICAgICAgIEFTU0VSVChtYXAuZmluZChuYW1lKSA9PSBtYXAuZW5kKCkpOworICAg
ICAgICBtYXBbbmFtZV0gPSBOYW1lKG5hbWVTdHIsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworICAgIH07CisKKyAgICBwdXRBbmdsZSgidGV4ZWxGZXRjaCIpOworICAgIHB1dEFuZ2xlKCJ0
ZXhlbEZldGNoT2Zmc2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmUiKTsKKyAgICBwdXRBbmds
ZSgidGV4dHVyZTFEIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUxRExvZCIpOworICAgIHB1dEFu
Z2xlKCJ0ZXh0dXJlMURQcm9qTG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRCIpOworICAg
IHB1dEFuZ2xlKCJ0ZXh0dXJlMkRMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvaiIp
OworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkRQcm9qTG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1
cmUzRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlM0RMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4
dHVyZTNEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZSIpOworICAgIHB1dEFu
Z2xlKCJ0ZXh0dXJlQ3ViZUxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZVByb2pMb2Qi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUdyYWQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUdy
YWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUxvZCIpOworICAgIHB1dEFuZ2xlKCJ0
ZXh0dXJlTG9kT2Zmc2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVPZmZzZXQiKTsKKyAgICBw
dXRBbmdsZSgidGV4dHVyZVByb2oiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pHcmFkIik7
CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0
ZXh0dXJlUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakxvZE9mZnNldCIpOwor
ICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvak9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJl
U2l6ZSIpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6
dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZU5vZGUpCit7
CisgICAgY29uc3QgVEludGVybVNlcXVlbmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUtPmdldFNl
cXVlbmNlKCk7CisKKyAgICBhdXRvIGVtaXRBcmdMaXN0ID0gWyZdKGNvbnN0IGNoYXIgKm9wZW4s
IGNvbnN0IGNoYXIgKmNsb3NlKSB7CisgICAgICAgIG1PdXQgPDwgb3BlbjsKKworICAgICAgICBi
b29sIGVtaXRDb21tYSA9IGZhbHNlOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICphcmcgOiBh
cmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZW1pdENvbW1hKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVtaXRDb21tYSA9IHRydWU7CisgICAgICAgICAgICBhcmctPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgbU91dCA8PCBjbG9zZTsKKyAgICB9OworCisgICAgY29uc3Qg
VFR5cGUgJnJldFR5cGUgPSBhZ2dyZWdhdGVOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBpZiAoYWdn
cmVnYXRlTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgYm9vbCBp
c1N0YW5kYWxvbmUgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgaWYg
KGlzU3RhbmRhbG9uZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUHJldmVudCBjb25zdHJ1
Y3RvciBmcm9tIGJlaW5nIGludGVycHJldGVkIGFzIGEgZGVjbGFyYXRpb24gYnkgd3JhcHBpbmcg
aW4gcGFyZW5zLgorICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGdpdmVuIHNvbWV0
aGluZyBsaWtlOgorICAgICAgICAgICAgLy8gICAgICBpbnQoc3ltYm9sKTsgLy8gPC0gVGhpcyB3
aWxsIGJlIHRyZWF0ZWQgbGlrZSBgaW50IHN5bWJvbDtgLi4uIGRvbid0IHdhbnQgdGhhdC4KKyAg
ICAgICAgICAgIC8vIFNvIGluc3RlYWQgZW1pdDoKKyAgICAgICAgICAgIC8vICAgICAgKGludChz
eW1ib2wpKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIigiOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgRW1pdFR5cGVDb25maWcgZXRDb25maWc7CisKKyAgICAgICAgaWYgKHJldFR5cGUuaXNB
cnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0VHlwZShyZXRUeXBlLCBldENvbmZp
Zyk7CisgICAgICAgICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAocmV0VHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsi
LCAifSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworICAgICAgICAgICAgZW1pdEFyZ0xpc3QoIigi
LCAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBv
cCA9IGFnZ3JlZ2F0ZU5vZGUtPmdldE9wKCk7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAg
ICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdn
cmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBlbWl0TmFtZU9mKGZ1
bmMpOworICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlv
bigpOworICAgICAgICAgICAgICAgIGF1dG8gaXQgICAgICAgICAgICAgICA9IG1GdW5jVG9OYW1l
LmZpbmQoZnVuYy5uYW1lKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtRnVuY1Rv
TmFtZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7
CisgICAgICAgICAgICAgICAgZW1pdEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGdldEFyZ1R5cGUgPSBbJl0oc2l6ZV90
IGluZGV4KSAtPiBjb25zdCBUVHlwZSAqIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4
IDwgYXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCAqYXJnID0gYXJnc1tpbmRleF0tPmdldEFzVHlwZWQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICZhcmctPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFhcmdzLmVtcHR5KCkpOworICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMCA9IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKmFyZ1R5cGUxID0gZ2V0QXJnVHlwZSgxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
YXJnVHlwZTApOworCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3BOYW1lID0gR2V0T3Bl
cmF0b3JTdHJpbmcob3AsIHJldFR5cGUsIGFyZ1R5cGUwLCBhcmdUeXBlMSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJn
VHlwZTEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChh
cmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICZvcGVyYW5kTm9kZSA9ICphZ2dyZWdhdGVOb2RlLT5nZXRD
aGlsZE5vZGUoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUG9zdGZpeChv
cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JvdXBlZFRyYXZlcnNlKG9wZXJhbmROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uob3Bl
cmFuZE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUgJmxlZnROb2RlICA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUo
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJnJpZ2h0Tm9kZSA9
ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIgIiA8PCBvcE5hbWUgPDwgIiAiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShyaWdodE5vZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgb3BOYW1lOworICAgICAgICAgICAgICAgICAg
ICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRPcGVuQnJhY2UoKQoreworICAgIEFTU0VS
VChtSW5kZW50TGV2ZWwgPj0gMCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ7XG4iOworICAgICsrbUluZGVudExldmVsOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjplbWl0Q2xvc2VCcmFjZSgpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAxKTsK
KworICAgIC0tbUluZGVudExldmVsOworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQg
PDwgIn0iOworfQorCitzdGF0aWMgYm9vbCBSZXF1aXJlc1NlbWljb2xvblRlcm1pbmF0b3IoVElu
dGVybU5vZGUgJm5vZGUpCit7CisgICAgaWYgKG5vZGUuZ2V0QXNCbG9jaygpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRBc0xvb3BOb2RlKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFz
U3dpdGNoTm9kZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBp
ZiAobm9kZS5nZXRBc0lmRWxzZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDYXNlTm9kZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgTmV3bGluZVBhZChUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBp
ZiAobm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gbm9k
ZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2Rl
LT5nZXRDaGlsZENvdW50KCkgPT0gMSk7CisgICAgICAgIFRJbnRlcm1Ob2RlICZjaGlsZE5vZGUg
PSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbE5vZGUgPSBjaGlsZE5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KyAgICAgICAgICAgIHJldHVybiB2YXIuZ2V0VHlwZSgpLmlzU3RydWN0U3BlY2lmaWVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1C
bG9jayAqYmxvY2tOb2RlKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gLTEpOworICAg
IGNvbnN0IGJvb2wgaXNHbG9iYWxTY29wZSAgPSBtSW5kZW50TGV2ZWwgPT0gLTE7CisgICAgY29u
c3QgYm9vbCBwYXJlbnRJc1N3aXRjaCA9IG1QYXJlbnRJc1N3aXRjaDsKKyAgICBtUGFyZW50SXNT
d2l0Y2ggICAgICAgICAgID0gZmFsc2U7CisKKyAgICBpZiAoaXNHbG9iYWxTY29wZSkKKyAgICB7
CisgICAgICAgICsrbUluZGVudExldmVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBlbWl0T3BlbkJyYWNlKCk7CisgICAgICAgIGlmIChwYXJlbnRJc1N3aXRjaCkKKyAgICAgICAg
eworICAgICAgICAgICAgKyttSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBU
SW50ZXJtTm9kZSAqcHJldlN0bXROb2RlID0gbnVsbHB0cjsKKworICAgIGNvbnN0IHNpemVfdCBz
dG10Q291bnQgPSBibG9ja05vZGUtPmdldENoaWxkQ291bnQoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgJnN0
bXROb2RlID0gKmJsb2NrTm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworCisgICAgICAgIGlmIChpc0ds
b2JhbFNjb3BlICYmIHByZXZTdG10Tm9kZSAmJiAoTmV3bGluZVBhZCgqcHJldlN0bXROb2RlKSB8
fCBOZXdsaW5lUGFkKHN0bXROb2RlKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
IlxuIjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBib29sIGlzQ2FzZSA9IHN0bXROb2RlLmdl
dEFzQ2FzZU5vZGUoKTsKKyAgICAgICAgbUluZGVudExldmVsIC09IGlzQ2FzZTsKKyAgICAgICAg
ZW1pdEluZGVudGF0aW9uKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCArPSBpc0Nhc2U7CisgICAg
ICAgIHN0bXROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICBpZiAoUmVxdWlyZXNTZW1pY29s
b25UZXJtaW5hdG9yKHN0bXROb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAi
OyI7CisgICAgICAgIH0KKyAgICAgICAgbU91dCA8PCAiXG4iOworCisgICAgICAgIHByZXZTdG10
Tm9kZSA9ICZzdG10Tm9kZTsKKyAgICB9CisKKyAgICBpZiAoaXNHbG9iYWxTY29wZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPT0gMCk7CisgICAgICAgIC0tbUluZGVudExl
dmVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7CisgICAg
ICAgICAgICAtLW1JbmRlbnRMZXZlbDsKKyAgICAgICAgfQorICAgICAgICBlbWl0Q2xvc2VCcmFj
ZSgpOworICAgICAgICBtUGFyZW50SXNTd2l0Y2ggPSBwYXJlbnRJc1N3aXRjaDsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0R2xv
YmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNs
YXJhdGlvbiAqKQoreworICAgIExPR0lDX0VSUk9SKCk7ICAvLyBSZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlKQoreworICAgIEFTU0VSVChkZWNsTm9k
ZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgIFRJbnRlcm1Ob2RlICZub2RlID0gKmRlY2xO
b2RlLT5nZXRDaGlsZE5vZGUoMCk7CisKKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZp
ZyBldmRDb25maWc7CisKKyAgICBpZiAoVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUu
Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9
IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisgICAgICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9u
KFZhckRlY2wodmFyKSwgZXZkQ29uZmlnKTsKKyAgICB9CisgICAgZWxzZSBpZiAoVEludGVybUJp
bmFyeSAqaW5pdE5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGluaXROb2RlLT5nZXRPcCgpID09IFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSk7Cisg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgVEludGVybVR5cGVkICp2YWx1ZU5vZGUgICA9IGlu
aXROb2RlLT5nZXRSaWdodCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIEFTU0VSVChzeW1ib2xO
b2RlICYmIHZhbHVlTm9kZSk7CisKKyAgICAgICAgaWYgKGdldFJvb3ROb2RlKCkgPT0gZ2V0UGFy
ZW50QmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMgc2hvdWxkIGhhdmUgdHVybmVkIG5vbi1jb25zdCBnbG9iYWwgaW5pdGlhbGl6ZXJzIGlu
dG8KKyAgICAgICAgICAgIC8vIGRlZmVycmVkIGluaXRpYWxpemVycy4gTm90ZSB0aGF0IHZhcmlh
YmxlcyBtYXJrZWQgYXMgRXZxR2xvYmFsIGNhbiBiZSB0cmVhdGVkIGFzCisgICAgICAgICAgICAv
LyBFdnFDb25zdCBpbiBzb21lIEFOR0xFIGNvZGUgYnV0IG5vdCBhY3R1YWxseSBoYXZlIHRoZWly
IHF1YWxpZmllciBhY3R1YWxseSBjaGFuZ2VkIHRvCisgICAgICAgICAgICAvLyBFdnFDb25zdC4g
VGh1cyBqdXN0IGFzc3VtZSBhbGwgRXZxR2xvYmFsIGFyZSBhY3R1YWxseSBFdnFDb25zdCBmb3Ig
YWxsIGNvZGUgcnVuIGFmdGVyCisgICAgICAgICAgICAvLyBEZWZlckdsb2JhbEluaXRpYWxpemVy
cy4KKyAgICAgICAgICAgIG1PdXQgPDwgImNvbnN0YW50ICI7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisgICAgICAg
IGNvbnN0IE5hbWUgdmFyTmFtZSh2YXIpOworCisgICAgICAgIGlmIChFeHByZXNzaW9uQ29udGFp
bnNOYW1lKHZhck5hbWUsICp2YWx1ZU5vZGUpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVu
YW1lZFN5bWJvbHNbJnZhcl0gPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSh2YXJOYW1lKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2wodmFyKSwgZXZk
Q29uZmlnKTsKKyAgICAgICAgbU91dCA8PCAiID0gIjsKKyAgICAgICAgZ3JvdXBlZFRyYXZlcnNl
KCp2YWx1ZU5vZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBMT0dJQ19FUlJP
UigpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZl
cnNlcjo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCit7CisgICAgY29u
c3QgVExvb3BUeXBlIGxvb3BUeXBlID0gbG9vcE5vZGUtPmdldFR5cGUoKTsKKworICAgIHN3aXRj
aCAobG9vcFR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BGb3I6Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRGb3JMb29wKGxvb3BOb2RlKTsKKyAgICAgICAgY2FzZSBU
TG9vcFR5cGU6OkVMb29wV2hpbGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRXaGlsZUxvb3Ao
bG9vcE5vZGUpOworICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BEb1doaWxlOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0RG9XaGlsZUxvb3AobG9vcE5vZGUpOworICAgIH0KK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICpsb29wTm9kZSkK
K3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdldFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRm9y
KTsKKworICAgIFRJbnRlcm1Ob2RlICppbml0Tm9kZSAgPSBsb29wTm9kZS0+Z2V0SW5pdCgpOwor
ICAgIFRJbnRlcm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7Cisg
ICAgVEludGVybVR5cGVkICpleHByTm9kZSA9IGxvb3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7Cisg
ICAgVEludGVybUJsb2NrICpib2R5Tm9kZSA9IGxvb3BOb2RlLT5nZXRCb2R5KCk7CisgICAgQVNT
RVJUKGJvZHlOb2RlKTsKKworICAgIG1PdXQgPDwgImZvciAoIjsKKworICAgIGlmIChpbml0Tm9k
ZSkKKyAgICB7CisgICAgICAgIGluaXROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgfQorCisgICAgbU91dCA8PCAi
OyAiOworCisgICAgaWYgKGNvbmROb2RlKQorICAgIHsKKyAgICAgICAgY29uZE5vZGUtPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KKworICAgIG1PdXQgPDwgIjsgIjsKKworICAgIGlmIChleHByTm9k
ZSkKKyAgICB7CisgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAg
ICBtT3V0IDw8ICIpXG4iOworCisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9v
cChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCit7CisgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBl
KCkgPT0gVExvb3BUeXBlOjpFTG9vcFdoaWxlKTsKKworICAgIFRJbnRlcm1Ob2RlICppbml0Tm9k
ZSAgPSBsb29wTm9kZS0+Z2V0SW5pdCgpOworICAgIFRJbnRlcm1UeXBlZCAqY29uZE5vZGUgPSBs
b29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgVEludGVybVR5cGVkICpleHByTm9kZSA9IGxv
b3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgVEludGVybUJsb2NrICpib2R5Tm9kZSA9IGxv
b3BOb2RlLT5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGNvbmROb2RlICYmIGJvZHlOb2RlKTsKKyAg
ICBBU1NFUlQoIWluaXROb2RlICYmICFleHByTm9kZSk7CisKKyAgICBlbWl0SW5kZW50YXRpb24o
KTsKKyAgICBtT3V0IDw8ICJ3aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7
CisgICAgbU91dCA8PCAiKVxuIjsKKyAgICBib2R5Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0RG9XaGls
ZUxvb3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0
VHlwZSgpID09IFRMb29wVHlwZTo6RUxvb3BEb1doaWxlKTsKKworICAgIFRJbnRlcm1Ob2RlICpp
bml0Tm9kZSAgPSBsb29wTm9kZS0+Z2V0SW5pdCgpOworICAgIFRJbnRlcm1UeXBlZCAqY29uZE5v
ZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgVEludGVybVR5cGVkICpleHByTm9k
ZSA9IGxvb3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgVEludGVybUJsb2NrICpib2R5Tm9k
ZSA9IGxvb3BOb2RlLT5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGNvbmROb2RlICYmIGJvZHlOb2Rl
KTsKKyAgICBBU1NFUlQoIWluaXROb2RlICYmICFleHByTm9kZSk7CisKKyAgICBlbWl0SW5kZW50
YXRpb24oKTsKKyAgICBtT3V0IDw8ICJkb1xuIjsKKyAgICBib2R5Tm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQg
PDwgIndoaWxlICgiOworICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBtT3V0IDw8
ICIpOyI7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2RlKQoreworICAgIGNv
bnN0IFRPcGVyYXRvciBmbG93T3AgPSBicmFuY2hOb2RlLT5nZXRGbG93T3AoKTsKKyAgICBUSW50
ZXJtVHlwZWQgKmV4cHJOb2RlID0gYnJhbmNoTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworCisgICAg
ZW1pdEluZGVudGF0aW9uKCk7CisKKyAgICBzd2l0Y2ggKGZsb3dPcCkKKyAgICB7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BLaWxsOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
ZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJtZXRhbDo6ZGlzY2Fy
ZF9mcmFnbWVudCgpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJy
ZXR1cm4iOworICAgICAgICAgICAgaWYgKGV4cHJOb2RlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICAgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQnJlYWs6CisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChleHByTm9kZSA9PSBudWxscHRyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImJyZWFrIjsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29udGludWU6CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChleHByTm9kZSA9PSBudWxs
cHRyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNvbnRpbnVlIjsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBMT0dJ
Q19FUlJPUigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgc2l6ZV90IGVtaXRNZXRhbENhbGxDb3VudCA9IDA7CisKK2Jvb2wgc2g6OkVtaXRNZXRh
bChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICBT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBQcm9ncmFtUHJl
bHVkZUNvbmZpZyAmcHBjKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IGNvbXBpbGVyLmdl
dEluZm9TaW5rKCkub2JqOworCisgICAgeworICAgICAgICArK2VtaXRNZXRhbENhbGxDb3VudDsK
KyAgICAgICAgYXV0byBmaWxlbmFtZVByb3RvID0gcmVhZFN0cmluZ0VudlZhcigiR01EX0ZJWEVE
X0VNSVQiKTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZVByb3RvLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChmaWxlbmFtZVByb3RvICE9ICIvZGV2L251bGwiKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGF1dG8gdHJ5T3BlbiA9IFsmXShjaGFyIGNvbnN0ICpleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lUHJvdG87Cisg
ICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICs9IHN0ZDo6dG9fc3RyaW5nKGVtaXRNZXRhbENh
bGxDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICs9ICIuIjsKKyAgICAgICAg
ICAgICAgICAgICAgZmlsZW5hbWUgKz0gZXh0OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Zm9wZW4oZmlsZW5hbWUuY19zdHIoKSwgInJiIik7CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICBGSUxFICpmaWxlID0gdHJ5T3BlbigibWV0YWwiKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZpbGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaWxl
ID0gdHJ5T3BlbigiY3BwIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFT
U0VSVChmaWxlKTsKKworICAgICAgICAgICAgICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsK
KyAgICAgICAgICAgICAgICBzaXplX3QgZmlsZVNpemUgPSBmdGVsbChmaWxlKTsKKyAgICAgICAg
ICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCk7CisKKyAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxjaGFyPiBidWZmOworICAgICAgICAgICAgICAgIGJ1ZmYucmVzaXplKGZpbGVTaXpl
ICsgMSk7CisgICAgICAgICAgICAgICAgZnJlYWQoYnVmZi5kYXRhKCksIGZpbGVTaXplLCAxLCBm
aWxlKTsKKyAgICAgICAgICAgICAgICBidWZmLmJhY2soKSA9ICdcMCc7CisKKyAgICAgICAgICAg
ICAgICBmY2xvc2UoZmlsZSk7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgYnVmZi5kYXRhKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgb3V0IDw8ICJcblxuIjsKKworICAgIGlmICghRW1pdFByb2dyYW1QcmVsdWRl
KHJvb3QsIG91dCwgcHBjKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICB7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKyAgICAgICAgRGVidWdT
aW5rIG91dFdyYXBwZXIob3V0LCByZWFkQm9vbEVudlZhcigiR01EX1NURE9VVCIpKTsKKyAgICAg
ICAgb3V0V3JhcHBlci53YXRjaChyZWFkU3RyaW5nRW52VmFyKCJHTURfV0FUQ0hfU1RSSU5HIikp
OworI2Vsc2UKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0V3JhcHBlciA9IG91dDsKKyNlbmRp
ZgorICAgICAgICBHZW5NZXRhbFRyYXZlcnNlciBnZW4oY29tcGlsZXIsIG91dFdyYXBwZXIsIGlk
R2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVudik7CisgICAgICAgIHJv
b3QudHJhdmVyc2UoJmdlbik7CisgICAgfQorCisgICAgb3V0IDw8ICJcbiI7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9FbWl0TWV0YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDhhZjlhMWM4N2Q1NzNjYWI1MjcyNzVi
NGQyMzJjY2YyNGE0MWYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRh
bC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU1JVE1FVEFMX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvSWRHZW4uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFdhbGtzIHRo
ZSBBU1QgYW5kIGVtaXRzIE1ldGFsIGNvZGUuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW1pdE1l
dGFsKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGlu
ZVN0cnVjdHMgJnBpcGVsaW5lU3RydWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9FTUlUTUVUQUxfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZh
cmlhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ4MjNmYzcyODIwY2ZmZGRmMzI0MGRjMjQ2NTlhNWVkY2ZkYjlkMjcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9OTUVOVFZBUklBQkxFX0hfCisKKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorCituYW1lc3BhY2Ugc2gKK3sKKworaW5saW5lIGJvb2wgcmVhZEJvb2xFbnZWYXIoY29uc3Qg
Y2hhciAqdmFyKQoreworICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0ZDo6Z2V0ZW52KHZhcik7Cisg
ICAgaWYgKHN0ciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoc3RyY21wKHN0ciwgIjAiKSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBBU1NFUlQoc3RyY21wKHN0ciwgIjEiKSA9PSAwKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHN0ZDo6c3RyaW5nIHJlYWRTdHJpbmdFbnZWYXIoY29u
c3QgY2hhciAqdmFyKQoreworICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0ZDo6Z2V0ZW52KHZhcik7
CisgICAgaWYgKHN0ciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KKyAgICByZXR1cm4gc3RyOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9OTUVOVFZB
UklBQkxFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTljMDNlYjVkMzVl
ODlmZWIxNmQ2NzRkOTYxNzBjMjcyNjk2YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0hvaXN0Q29uc3RhbnRzLmNwcApAQCAtMCwwICsxLDk2IEBACisvLworLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25z
dGFudHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvRmluZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBSZXdyaXRlciA6
IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzaXplX3Qg
bU1pblJlcXVpcmVkU2l6ZTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgbUhvaXN0ZWREZWNsTm9kZXM7
CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIsIHNpemVfdCBt
aW5SZXF1aXJlZFNpemUpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUs
IGZhbHNlKSwgbU1pblJlcXVpcmVkU2l6ZShtaW5SZXF1aXJlZFNpemUpCisgICAge30KKworICAg
IFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZ2V0UGFyZW50RnVuY3Rpb24oKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRGVjbGFyYXRpb24gZGVjbCAgPSBWaWV3RGVjbGFyYXRpb24o
ZGVjbE5vZGUpOworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBkZWNsLnN5bWJvbC5n
ZXRUeXBlKCk7CisgICAgICAgICAgICBpZiAodHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBUUXVhbGlm
aWVyOjpFdnFDb25zdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVjbC5p
bml0RXhwciAmJiBkZWNsLmluaXRFeHByLT5oYXNDb25zdGFudFZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IE1ldGFsTGF5
b3V0T2YodHlwZSkuc2l6ZU9mOworICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSBtTWlu
UmVxdWlyZWRTaXplKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtSG9pc3RlZERlY2xOb2Rlcy5wdXNoX2JhY2soJmRlY2xOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB7
ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgYm9vbCByZXdyaXRl
KFRJbnRlcm1CbG9jayAmcm9vdCwgSWRHZW4gJmlkR2VuKQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Ib2lzdGVkRGVjbE5vZGVzLmVtcHR5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcm9v
dC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KCZyb290
KSwgbUhvaXN0ZWREZWNsTm9kZXMpOworCisgICAgICAgIGZvciAoVEludGVybU5vZGUgKm9wYXF1
ZURlY2xOb2RlIDogbUhvaXN0ZWREZWNsTm9kZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGUgPSBvcGFxdWVEZWNsTm9kZS0+Z2V0QXNEZWNsYXJh
dGlvbk5vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChkZWNsTm9kZSk7CisgICAgICAgICAgICBj
b25zdCBUVmFyaWFibGUgJm9sZFZhciA9IFZpZXdEZWNsYXJhdGlvbigqZGVjbE5vZGUpLnN5bWJv
bC52YXJpYWJsZSgpOworICAgICAgICAgICAgY29uc3QgTmFtZSBuZXdOYW1lICAgICAgPSBpZEdl
bi5jcmVhdGVOZXdOYW1lKG9sZFZhci5uYW1lKCkpOworICAgICAgICAgICAgYXV0byAqbmV3VmFy
ID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgJm9sZFZh
ci5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d05hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgIGlmICghUmVwbGFjZVZhcmlhYmxlKCZt
Q29tcGlsZXIsICZyb290LCAmb2xkVmFyLCBuZXdWYXIpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6SG9pc3RDb25zdGFudHMoVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBtaW5SZXF1aXJlZFNpemUpCit7CisgICAgcmV0dXJuIFJld3Jp
dGVyKGNvbXBpbGVyLCBtaW5SZXF1aXJlZFNpemUpLnJld3JpdGUocm9vdCwgaWRHZW4pOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
SG9pc3RDb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzA2YTVlNDczYzhiZWM1Y2NmYTQ4ZGQ0ZjFl
YmZjM2E0OTQ1MDUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3Rh
bnRzLmgKQEAgLTAsMCArMSwyNiBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5UU19IXworI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5UU19I
XworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEhvaXN0
cyBmdW5jdGlvbi1sb2NhbCBjb25zdGFudHMgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiB0aGVpciBN
ZXRhbCBzaXplb2YgbWVldHMKKy8vIGBtaW5SZXF1aXJlZFNpemVgLgorQU5HTEVfTk9fRElTQ0FS
RCBib29sIEhvaXN0Q29uc3RhbnRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKTsKKworfSAgLy8gbmFt
ZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdl
bi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0YWVkNmI5YjhlNjM5
NjRmMTUxM2I4MzZmYjk4ODkwMjMyMDIwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvSWRHZW4uY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxjY3R5
cGU+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworSWRHZW46
OklkR2VuKCkge30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZywgdHlwZW5hbWUgU3RyaW5n
VG9JbW11dGFibGU+CitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHNpemVfdCBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICpiYXNlTmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZ1RvSW1tdXRhYmxlICZ0b0ltbXV0YWJsZSkK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBpZCA9IG1OZXh0Kys7CisgICAgY2hhciBpZEJ1ZmZlcltz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6ZGlnaXRzMTAgKyAxXTsKKyAgICBzcHJpbnRm
KGlkQnVmZmVyLCAiJXUiLCBpZCk7CisKKyAgICBtTmV3TmFtZUJ1ZmZlci5jbGVhcigpOworICAg
IG1OZXdOYW1lQnVmZmVyICs9ICdfJzsKKyAgICBtTmV3TmFtZUJ1ZmZlciArPSBpZEJ1ZmZlcjsK
KworICAgIC8vIE5vdGU6CisgICAgLy8gRG91YmxlIHVuZGVyc2NvcmVzIGFyZSBvbmx5IGFsbG93
ZWQgaW4gQysrIChhbmQgdGh1cyBNZXRhbCkgdmVuZG9yIGlkZW50aWZpZXJzLCBzbyBoZXJlIHdl
CisgICAgLy8gdGFrZSBjYXJlIG5vdCB0byBpbnRyb2R1Y2UgYW55LgorCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxl
U3RyaW5nIGJhc2VOYW1lID0gdG9JbW11dGFibGUoYmFzZU5hbWVzW2ldKTsKKyAgICAgICAgaWYg
KCFiYXNlTmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpi
YXNlID0gYmFzZU5hbWUuZGF0YSgpOworICAgICAgICAgICAgaWYgKGJhc2VOYW1lLmJlZ2luc1dp
dGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJhc2UgKz0gc2l6ZW9mKGtBbmdsZUludGVybmFsUHJlZml4KSAtIDE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoKmJhc2UgPT0gJ18nKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICsrYmFzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCgqYmFzZSAh
PSAnXycpOworCisgICAgICAgICAgICBpZiAobU5ld05hbWVCdWZmZXIuYmFjaygpICE9ICdfJykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSAnXyc7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1OZXdOYW1lQnVmZmVyICs9IGJhc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTmFtZShJbW11dGFibGVTdHJpbmcobU5ld05hbWVC
dWZmZXIpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKK30KKworTmFtZSBJZEdlbjo6Y3Jl
YXRlTmV3TmFtZShjb25zdCBJbW11dGFibGVTdHJpbmcgJmJhc2VOYW1lKQoreworICAgIHJldHVy
biBjcmVhdGVOZXdOYW1lKHtiYXNlTmFtZX0pOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdO
YW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKGJh
c2VOYW1lLnJhd05hbWUoKSk7Cit9CisKK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoY29uc3Qg
Y2hhciAqYmFzZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoSW1tdXRhYmxlU3Ry
aW5nKGJhc2VOYW1lKSk7Cit9CisKK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoc3RkOjppbml0
aWFsaXplcl9saXN0PEltbXV0YWJsZVN0cmluZz4gYmFzZU5hbWVzKQoreworICAgIHJldHVybiBj
cmVhdGVOZXdOYW1lKGJhc2VOYW1lcy5zaXplKCksIGJhc2VOYW1lcy5iZWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmcykgeyByZXR1cm4g
czsgfSk7Cit9CisKK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9s
aXN0PE5hbWU+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFt
ZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBb
XShjb25zdCBOYW1lICZzKSB7IHJldHVybiBzLnJhd05hbWUoKTsgfSk7Cit9CisKK05hbWUgSWRH
ZW46OmNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4gYmFz
ZU5hbWVzKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKGJhc2VOYW1lcy5zaXplKCksIGJh
c2VOYW1lcy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IGNoYXIg
KnMpIHsgcmV0dXJuIEltbXV0YWJsZVN0cmluZyhzKTsgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MjA4
OWY0MzJlMTg5ZDBmNzkxZTBlN2EyMTNjY2VjZDQ0MmI3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvSWRHZW4uaApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0lER0VOX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0lER0VOX0hfCisK
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNlIHNoCit7CisK
Ky8vIEZvciBjcmVhdGluZyBuZXcgZnJlc2ggbmFtZXMuCisvLyBBbGwgbmFtZXMgY3JlYXRlZCBh
cmUgbWFya2VkIGFzIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwuCitjbGFzcyBJZEdlbiA6IGFu
Z2xlOjpOb25Db3B5YWJsZQoreworICBwdWJsaWM6CisgICAgSWRHZW4oKTsKKworICAgIE5hbWUg
Y3JlYXRlTmV3TmFtZShjb25zdCBJbW11dGFibGVTdHJpbmcgJmJhc2VOYW1lKTsKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoY29uc3QgTmFtZSAmYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3
TmFtZShjb25zdCBjaGFyICpiYXNlTmFtZSk7CisgICAgTmFtZSBjcmVhdGVOZXdOYW1lKHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcyk7CisgICAgTmFtZSBj
cmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxOYW1lPiBiYXNlTmFtZXMpOworICAg
IE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhciAqPiBi
YXNlTmFtZXMpOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZywg
dHlwZW5hbWUgU3RyaW5nVG9JbW11dGFibGU+CisgICAgTmFtZSBjcmVhdGVOZXdOYW1lKHNpemVf
dCBjb3VudCwgY29uc3QgU3RyaW5nICpiYXNlTmFtZXMsIGNvbnN0IFN0cmluZ1RvSW1tdXRhYmxl
ICZ0b0ltbXV0YWJsZSk7CisKKyAgcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtTmV4dCA9IDA7ICAg
ICAgICAgIC8vIGB1bnNpZ25lZGAgYmVjYXVzZSBvZiAiJXUiIHVzZSBpbiBzcHJpbnRmCisgICAg
c3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7ICAvLyByZXVzYWJsZSBidWZmZXIgdG8gYXZvaWQg
dG9ucyBvZiByZWFsbG9jYXRpb25zCit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlm
ICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MzQ2ZjZmODE0MjgyYzEyYWY2NzkxNGQyYTMwNDIzNDE2MGZhMmVi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAKQEAgLTAsMCArMSw0
MDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2N0eXBl
PgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitlbnVtIGNsYXNzIExhbmd1YWdlCit7CisgICAg
TWV0YWwsCisgICAgR0xTTCwKK307CisKK3N0YXRpYyBzaXplX3QgUm91bmRVcFRvTXVsdGlwbGVP
ZihzaXplX3QgeCwgc2l6ZV90IG11bHRpcGxlKQoreworICAgIGNvbnN0IHNpemVfdCByZW0gPSB4
ICUgbXVsdGlwbGU7CisgICAgcmV0dXJuIHJlbSA9PSAwID8geCA6IHggKyAobXVsdGlwbGUgLSBy
ZW0pOworfQorCit2b2lkIExheW91dDo6cmVxdWlyZUFsaWdubWVudChzaXplX3QgYWxpZ24sIGJv
b2wgcGFkKQoreworICAgIGFsaWduT2YgPSBzdGQ6Om1heChhbGlnbk9mLCBhbGlnbik7CisgICAg
aWYgKHBhZCkKKyAgICB7CisgICAgICAgIHNpemVPZiA9IFJvdW5kVXBUb011bHRpcGxlT2Yoc2l6
ZU9mLCBhbGlnbik7CisgICAgfQorfQorCitib29sIExheW91dDo6b3BlcmF0b3I9PShjb25zdCBM
YXlvdXQgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzaXplT2YgPT0gb3RoZXIuc2l6ZU9m
ICYmIGFsaWduT2YgPT0gb3RoZXIuYWxpZ25PZjsKK30KKwordm9pZCBMYXlvdXQ6Om9wZXJhdG9y
Kz0oY29uc3QgTGF5b3V0ICZvdGhlcikKK3sKKyAgICByZXF1aXJlQWxpZ25tZW50KG90aGVyLmFs
aWduT2YsIHRydWUpOworICAgIHNpemVPZiArPSBvdGhlci5zaXplT2Y7Cit9CisKK3ZvaWQgTGF5
b3V0OjpvcGVyYXRvcio9KHNpemVfdCBzY2FsZSkKK3sKKyAgICBzaXplT2YgKj0gc2NhbGU7Cit9
CisKK0xheW91dCBMYXlvdXQ6Om9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVyKSBjb25zdAor
eworICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKz0gb3RoZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKK0xheW91dCBMYXlvdXQ6Om9wZXJhdG9yKihzaXplX3Qgc2NhbGUpIGNvbnN0
Cit7CisgICAgYXV0byBzZWxmID0gKnRoaXM7CisgICAgc2VsZiAqPSBzY2FsZTsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworc3RhdGljIExheW91dCBTY2FsYXJMYXlvdXRPZihjb25zdCBUVHlwZSAm
dHlwZSwgTGFuZ3VhZ2UgbGFuZ3VhZ2UpCit7CisgICAgY29uc3QgVEJhc2ljVHlwZSBiYXNpY1R5
cGUgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorICAgIHsK
KyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHsx
LCAxfTsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0VUludDoKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDoKKyAg
ICAgICAgICAgIHJldHVybiB7NCwgNH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChsYW5ndWFnZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgTGFuZ3VhZ2U6Ok1ldGFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHs4
LCA4fTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBMYW5ndWFnZTo6R0xTTDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7NCwgNH07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgVE9ETygpOworICAgICAgICAgICAgcmV0dXJuIExheW91dDo6
SW52YWxpZCgpOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1Bh
Y2tlZFtdICAgPSB7MCwgMSwgMiwgMywgNH07CitzdGF0aWMgY29uc3Qgc2l6ZV90IGlubmVyU2Nh
bGVzVW5wYWNrZWRbXSA9IHswLCAxLCAyLCA0LCA0fTsKKworTGF5b3V0IHNoOjpNZXRhbExheW91
dE9mKGNvbnN0IFRUeXBlICZ0eXBlLCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZykKK3sKKyAg
ICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBlLmdl
dFNlY29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworCisgICAg
Y29uc3QgYm9vbCBpc1BhY2tlZCA9ICFjb25maWcuZGlzYWJsZVBhY2tpbmcgJiYgKHN0b3JhZ2Ug
PT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPT0gVExheW91dEJsb2Nr
U3RvcmFnZTo6RWJzU2hhcmVkKTsKKworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAmJiAhY29uZmln
Lm1hc2tBcnJheSkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSB0cnVlOwor
ICAgICAgICBjb25zdCBMYXlvdXQgbGF5b3V0ID0gTWV0YWxMYXlvdXRPZih0eXBlLCBjb25maWcp
OworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHNp
emVfdCB2b2wgICAgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgcmV0dXJu
IGxheW91dCAqIHZvbDsKKyAgICB9CisKKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0
dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlLmdldE5v
bWluYWxTaXplKCkgPT0gMSk7CisgICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUo
KSA9PSAxKTsKKyAgICAgICAgYXV0byBjb25maWcyICAgICAgICAgICAgID0gY29uZmlnOworICAg
ICAgICBjb25maWcyLm1hc2tBcnJheSAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYXV0byBsYXlv
dXQgICAgICAgICAgICAgID0gTGF5b3V0OjpJZGVudGl0eSgpOworICAgICAgICBjb25zdCBURmll
bGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKGNvbnN0
IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxheW91dCAr
PSBNZXRhbExheW91dE9mKCpmaWVsZC0+dHlwZSgpLCBjb25maWcyKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzaXplX3QgcGFkID0gbGF5b3V0LnNpemVPZiAlIDE2OworICAgICAgICAgICAg
bGF5b3V0LnNpemVPZiArPSBwYWQ7CisgICAgICAgIH0KKyAgICAgICAgbGF5b3V0LnNpemVPZiA9
IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0LnNpemVPZiwgbGF5b3V0LmFsaWduT2YpOworICAg
ICAgICByZXR1cm4gbGF5b3V0OworICAgIH0KKworICAgIGlmIChjb25maWcudHJlYXRTYW1wbGVy
c0FzVGV4dHVyZUVudiAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgewor
ICAgICAgICByZXR1cm4gezE2LCA4fTsgIC8vIHBvaW50ZXJ7OCw4fSBhbmQgbWV0YWw6OnNhbXBs
ZXJ7OCw4fQorICAgIH0KKworICAgIGNvbnN0IExheW91dCBzY2FsYXJMYXlvdXQgPSBTY2FsYXJM
YXlvdXRPZih0eXBlLCBMYW5ndWFnZTo6TWV0YWwpOworCisgICAgaWYgKHR5cGUuaXNSYW5rMCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNjYWxhckxheW91dDsKKyAgICB9CisgICAgZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgaWYgKGlzUGFja2VkKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzUGFj
a2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCA9IExh
eW91dHtzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSwgc2NhbGFyTGF5b3V0LmFsaWdu
T2Z9OworICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlID0gaW5uZXJT
Y2FsZXNVbnBhY2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBs
YXlvdXQgICAgICAgICAgICAgPSBMYXlvdXQ6OkJvdGgoc2NhbGFyTGF5b3V0LnNpemVPZiAqIGlu
bmVyU2NhbGUpOworICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5pc01hdHJpeCgpKTsKKyAgICAg
ICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpOwor
ICAgICAgICAvLyB0eXBlQ3hSIDw9PiB0eXBlUltDXQorICAgICAgICBjb25zdCBzaXplX3QgaW5u
ZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXRSb3dzKCldOworICAgICAgICBj
b25zdCBzaXplX3Qgb3V0ZXJTY2FsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xz
KCkpOworICAgICAgICBjb25zdCBzaXplX3QgbiAgICAgICAgICA9IHNjYWxhckxheW91dC5zaXpl
T2YgKiBpbm5lclNjYWxlOworICAgICAgICByZXR1cm4ge24gKiBvdXRlclNjYWxlLCBufTsKKyAg
ICB9Cit9CisKK1RMYXlvdXRCbG9ja1N0b3JhZ2Ugc2g6Ok92ZXJsYXkoVExheW91dEJsb2NrU3Rv
cmFnZSBvbGRTdG9yYWdlLCBjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIG5ld1N0b3JhZ2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2Nr
U3RvcmFnZTsKKyAgICBzd2l0Y2ggKG5ld1N0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgcmV0dXJuIG9s
ZFN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQgPyBrRGVmYXVs
dExheW91dEJsb2NrU3RvcmFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRTdG9yYWdlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CisgICAgfQorfQorCitUTGF5
b3V0TWF0cml4UGFja2luZyBzaDo6T3ZlcmxheShUTGF5b3V0TWF0cml4UGFja2luZyBvbGRQYWNr
aW5nLCBjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2lu
ZyBuZXdQYWNraW5nID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nOwor
ICAgIHN3aXRjaCAobmV3UGFja2luZykKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dE1hdHJp
eFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkOgorICAgICAgICAgICAgcmV0dXJuIG9sZFBhY2tpbmcg
PT0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkID8ga0RlZmF1bHRMYXlvdXRN
YXRyaXhQYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRQYWNraW5nOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIG5ld1BhY2tpbmc7CisgICAgfQorfQorCitib29sIHNoOjpD
YW5CZVBhY2tlZChUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpCit7CisgICAgc3dpdGNoIChz
dG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNr
ZWQ6CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
U3RkMTQwOgorICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDQzMDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcikKK3sKKyAgICByZXR1cm4gQ2FuQmVQYWNrZWQobGF5
b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSk7Cit9CisKK2Jvb2wgc2g6OkNhbkJlUGFja2VkKGNv
bnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gQ2FuQmVQYWNrZWQodHlwZS5n
ZXRMYXlvdXRRdWFsaWZpZXIoKSk7Cit9CisKK3ZvaWQgc2g6OlNldEJsb2NrU3RvcmFnZShUVHlw
ZSAmdHlwZSwgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIGF1dG8gcXVhbCAg
ICAgICAgID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICBxdWFsLmJsb2NrU3RvcmFn
ZSA9IHN0b3JhZ2U7CisgICAgdHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIocXVhbCk7Cit9CisKK3N0
YXRpYyBMYXlvdXQgQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKFRGaWVsZCBjb25zdCAqY29uc3Qg
KmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkIGNv
bnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2lu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFz
a0FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6
ZV90IGJhc2VBbGlnbm1lbnQpCit7CisgICAgY29uc3QgYm9vbCBpc1BhY2tlZCA9CisgICAgICAg
IHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkIHx8IHN0b3JhZ2UgPT0g
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOworCisgICAgYXV0byBsYXlvdXQgPSBMYXlv
dXQ6OklkZW50aXR5KCk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICB7CisgICAgICAgIGxheW91dCArPSBHbHNsTGF5b3V0T2YoKigqaXRlcikt
PnR5cGUoKSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgZmFsc2UpOworICAgIH0KKyAgICBpZiAo
IWlzUGFja2VkKSAgLy8gWFhYOiBDb3JyZWN0PworICAgIHsKKyAgICAgICAgbGF5b3V0LnNpemVP
ZiA9IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0LnNpemVPZiwgbGF5b3V0LmFsaWduT2YpOwor
ICAgIH0KKyAgICBsYXlvdXQucmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsK
KyAgICByZXR1cm4gbGF5b3V0OworfQorCitzdGF0aWMgTGF5b3V0IENvbW1vbkdsc2xMYXlvdXRP
Zihjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJheSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBiYXNlQWxpZ25tZW50KQor
eworICAgIEFTU0VSVChzdG9yYWdlICE9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lm
aWVkKTsKKworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAgICBzdG9yYWdlID09IFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAmJiAhdHlwZS5pc01h
dHJpeCgpICYmICFtYXNrQXJyYXkpCisgICAgeworICAgICAgICBhdXRvIGxheW91dCA9IEdsc2xM
YXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCB0cnVlKTsKKyAgICAgICAgbGF5
b3V0ICo9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICBsYXlvdXQucmVxdWly
ZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIGxheW91dDsK
KyAgICB9CisKKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRT
dHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPT0g
MSk7CisgICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSAxKTsKKyAgICAg
ICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihmaWVsZHMuZGF0YSgpLCBmaWVsZHMu
ZGF0YSgpICsgZmllbGRzLnNpemUoKSwgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIGJhc2VBbGlnbm1lbnQp
OworICAgIH0KKworICAgIGNvbnN0IGF1dG8gc2NhbGFyTGF5b3V0ID0gU2NhbGFyTGF5b3V0T2Yo
dHlwZSwgTGFuZ3VhZ2U6OkdMU0wpOworCisgICAgaWYgKHR5cGUuaXNSYW5rMCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNjYWxhckxheW91dDsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgaWYgKGlzUGFja2VkKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZVNjYWxlICA9IGlubmVyU2NhbGVzUGFja2VkW3R5cGUu
Z2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBjb25zdCBzaXplX3QgYWxpZ25TY2FsZSA9
IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAg
IGF1dG8gbGF5b3V0ID0KKyAgICAgICAgICAgICAgICBMYXlvdXR7c2NhbGFyTGF5b3V0LnNpemVP
ZiAqIHNpemVTY2FsZSwgc2NhbGFyTGF5b3V0LmFsaWduT2YgKiBhbGlnblNjYWxlfTsKKyAgICAg
ICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNr
ZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ICAgICAg
ICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBpbm5lclNjYWxlKTsK
KyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisKKyAgICAgICAgc2l6ZV90
IGlubmVyRGltOworICAgICAgICBzaXplX3Qgb3V0ZXJEaW07CisKKyAgICAgICAgc3dpdGNoICht
YXRyaXhQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQ
YWNraW5nOjpFbXBDb2x1bW5NYWpvcjoKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRp
Y19jYXN0PHNpemVfdD4odHlwZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIG91dGVyRGlt
ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih0eXBlLmdldENvbHMoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBSb3dNYWpv
cjoKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5n
ZXRDb2xzKCkpOworICAgICAgICAgICAgICAgIG91dGVyRGltID0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pih0eXBlLmdldFJvd3MoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAg
ICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgICAgIGlubmVyRGltID0gMDsKKyAgICAgICAg
ICAgICAgICBvdXRlckRpbSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBvdXRlckRpbSAqPSB0
eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKworICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJT
Y2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbaW5uZXJEaW1dOworICAgICAgICBjb25zdCBzaXpl
X3QgbiAgICAgICAgICA9IGlubmVyU2NhbGUgKiBzY2FsYXJMYXlvdXQuc2l6ZU9mOworICAgICAg
ICBMYXlvdXQgbGF5b3V0ICAgICAgICAgICA9IHtvdXRlckRpbSAqIG4sIG59OworICAgICAgICBs
YXlvdXQucmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKyAgICAgICAgcmV0
dXJuIGxheW91dDsKKyAgICB9Cit9CisKK0xheW91dCBzaDo6R2xzbExheW91dE9mKGNvbnN0IFRU
eXBlICZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0
cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWFza0FycmF5KQorewor
ICAgIEFTU0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPD0gNCk7CisgICAgQVNTRVJUKHR5cGUu
Z2V0U2Vjb25kYXJ5U2l6ZSgpIDw9IDQpOworCisgICAgc3RvcmFnZSAgICAgICA9IE92ZXJsYXko
c3RvcmFnZSwgdHlwZSk7CisgICAgbWF0cml4UGFja2luZyA9IE92ZXJsYXkobWF0cml4UGFja2lu
ZywgdHlwZSk7CisKKyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25H
bHNsTGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsK
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAgICAgICAg
ICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcs
IG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0
ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2YodHlwZSwgc3RvcmFn
ZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxNik7CisgICAgICAgIGNhc2UgVExheW91dEJs
b2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xMYXlv
dXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAg
ICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAg
TE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAg
ICB9Cit9CisKK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IHNoOjpHbHNsU3RydWN0TGF5b3V0T2Yo
VEZpZWxkIGNvbnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
TGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sKKyAgICBBU1NFUlQo
c3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZCk7CisgICAgQVNT
RVJUKG1hdHJpeFBhY2tpbmcgIT0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVk
KTsKKworICAgIHN3aXRjaCAoc3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJs
b2NrU3RvcmFnZTo6RWJzUGFja2VkOgorICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1
Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXks
IDEpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAg
ICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFn
ZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxNik7CisgICAgICAgIGNhc2UgVExheW91dEJs
b2NrU3RvcmFnZTo6RWJzU3RkMTQwOgorICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1
Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXks
IDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAg
ICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisgICAgICAgIGNhc2UgVExheW91dEJs
b2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOwor
ICAgICAgICAgICAgcmV0dXJuIExheW91dDo6SW52YWxpZCgpOworICAgIH0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNDEzZWRmNDlmZWYyN2MwMGFkNjE2NmFlYWNmZTUyNmFhOTRmMWQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oCkBAIC0wLDAgKzEsODggQEAKKy8vCisvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTEFZ
T1VUX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0xBWU9VVF9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisKK25hbWVzcGFjZSBzaAoreworCitjb25zdGV4
cHIgY29uc3QgYXV0byBrRGVmYXVsdExheW91dEJsb2NrU3RvcmFnZSAgPSBUTGF5b3V0QmxvY2tT
dG9yYWdlOjpFYnNTaGFyZWQ7Citjb25zdGV4cHIgY29uc3QgYXV0byBrRGVmYXVsdExheW91dE1h
dHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wQ29sdW1uTWFqb3I7CisKKy8v
IFJldHVybnMgYG9sZFN0b3JhZ2VgIGlmIGB0eXBlYCBoYXMgdW5zcGVjaWZpZWQgYmxvY2sgc3Rv
cmFnZS4KKy8vIE90aGVyd2lzZSByZXR1cm5zIGJsb2NrIHN0b3JhZ2Ugb2YgYHR5cGVgLgorVExh
eW91dEJsb2NrU3RvcmFnZSBPdmVybGF5KFRMYXlvdXRCbG9ja1N0b3JhZ2Ugb2xkU3RvcmFnZSwg
Y29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBSZXR1cm5zIGBvbGRQYWNraW5nYCBpZiBgdHlwZWAg
aGFzIHVuc3BlY2lmaWVkIG1hdHJpeCBwYWNraW5nLgorLy8gT3RoZXJ3aXNlIHJldHVybnMgbWF0
cml4IHBhY2tpbmcgb2YgYHR5cGVgLgorVExheW91dE1hdHJpeFBhY2tpbmcgT3ZlcmxheShUTGF5
b3V0TWF0cml4UGFja2luZyBvbGRQYWNraW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIFJl
dHVybnMgd2hldGhlciBvciBub3QgaXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBibG9jayBzdG9y
YWdlIHRvIHVzZSBhIHBhY2tlZCByZXByZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExh
eW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKTsKKworLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBwZXJtaXNzYWJsZSBmb3IgdGhlIGxheW91dCBxdWFsaWZpZXIgdG8gdXNlIGEgcGFja2Vk
IHJlcHJlc2VudGF0aW9uLgorYm9vbCBDYW5CZVBhY2tlZChUTGF5b3V0UXVhbGlmaWVyIGxheW91
dFF1YWxpZmllcik7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3QgaXQgaXMgcGVybWlzc2Fi
bGUgZm9yIHRoZSB0eXBlIHRvIHVzZSBhIHBhY2tlZCByZXByZXNlbnRhdGlvbi4KK2Jvb2wgQ2Fu
QmVQYWNrZWQoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBTZXRzIHRoZSBibG9jayBzdG9yYWdl
IGZvciBhIHR5cGUuCit2b2lkIFNldEJsb2NrU3RvcmFnZShUVHlwZSAmdHlwZSwgVExheW91dEJs
b2NrU3RvcmFnZSBzdG9yYWdlKTsKKworLy8gQ29udGFpbnMgYHNpemVvZmAgYW5kIGBhbGlnbm9m
YCBpbmZvcm1hdGlvbi4KK3N0cnVjdCBMYXlvdXQKK3sKKyAgICBzaXplX3Qgc2l6ZU9mOworICAg
IHNpemVfdCBhbGlnbk9mOworCisgICAgc3RhdGljIExheW91dCBJZGVudGl0eSgpIHsgcmV0dXJu
IHswLCAxfTsgfQorICAgIHN0YXRpYyBMYXlvdXQgSW52YWxpZCgpIHsgcmV0dXJuIHswLCAwfTsg
fQorICAgIHN0YXRpYyBMYXlvdXQgQm90aChzaXplX3QgbikgeyByZXR1cm4ge24sIG59OyB9CisK
KyAgICB2b2lkIHJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBib29sIHBhZCk7CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3Q7CisKKyAgICB2b2lk
IG9wZXJhdG9yKz0oY29uc3QgTGF5b3V0ICZvdGhlcik7CisgICAgdm9pZCBvcGVyYXRvcio9KHNp
emVfdCBzY2FsZSk7CisKKyAgICBMYXlvdXQgb3BlcmF0b3IrKGNvbnN0IExheW91dCAmb3RoZXIp
IGNvbnN0OworICAgIExheW91dCBvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25zdDsKK307CisK
K3N0cnVjdCBNZXRhbExheW91dE9mQ29uZmlnCit7CisgICAgYm9vbCBkaXNhYmxlUGFja2luZyAg
ICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgbWFza0FycmF5ICAgICAgICAgICAgICAgICAg
PSBmYWxzZTsKKyAgICBib29sIHRyZWF0U2FtcGxlcnNBc1RleHR1cmVFbnYgID0gZmFsc2U7Cisg
ICAgYm9vbCBhc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IGZhbHNlOyAgLy8gUGFkIHRvIG11
bHRpcGxlIG9mIDE2Cit9OworCisvLyBSZXR1cm5zIHRoZSBsYXlvdXQgb2YgYSB0eXBlIGlmIGl0
IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBNZXRhbCBwcm9ncmFtLgorLy8gVGhpcyBkZWxp
YmVyYXRlbHkgaWdub3JlcyB0aGUgVExheW91dEJsb2NrU3RvcmFnZSBhbmQgVExheW91dE1hdHJp
eFBhY2tpbmcgb2YgYW55IHR5cGUuCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBNZXRhbExheW91
dE9mKGNvbnN0IFRUeXBlICZ0eXBlLCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZyA9IHt9KTsK
KworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBpdCB3ZXJlIHRvIGJlIHJlcHJl
c2VudGVkIGluIGEgR0xTTCBwcm9ncmFtLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQKK0dsc2xM
YXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UgICAgICAgID0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQs
CisgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZyA9IFRMYXlv
dXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCwKKyAgICAgICAgICAgICBib29sIG1hc2tB
cnJheSAgICAgICAgICAgICAgICAgICAgID0gZmFsc2UpOworCisvLyBSZXR1cm5zIHRoZSBsYXlv
dXQgb2YgYSBzdHJ1Y3R1cmUgaWYgaXQgd2VyZSB0byBiZSByZXByZXNlbnRlZCBpbiBhIEdMU0wg
cHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IEdsc2xTdHJ1Y3RMYXlvdXRPZihURmll
bGQgY29uc3QgKmNvbnN0ICpiZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNr
aW5nIG1hdHJpeFBhY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBtYXNrQXJyYXkgPSBmYWxzZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xBWU9V
VF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNlMzBkYWU2ZTJkN2I2ZTY5ODJmZjAwMjkzNzRlM2ZhZjQyM2M1YWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHAKQEAgLTAs
MCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisK
K2NsYXNzIE1hcHBlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAg
ICBGdW5jdGlvblRvRGVmaW5pdGlvbiBtRnVuY1RvRGVmOworCisgIHB1YmxpYzoKKyAgICBNYXBw
ZXIoKSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSB7fQorCisgICAgYm9v
bCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24g
KmZ1bmMgPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMt
PmdldEJ1aWx0SW5PcCgpID09IFRPcGVyYXRvcjo6RU9wTnVsbCk7CisgICAgICAgIG1GdW5jVG9E
ZWZbZnVuY10gPSBmdW5jRGVmTm9kZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307
CisKK0Z1bmN0aW9uVG9EZWZpbml0aW9uIHNoOjpNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJ
bnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBNYXBwZXIgbWFwcGVyOworICAgIHJvb3QudHJhdmVy
c2UoJm1hcHBlcik7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShtYXBwZXIubUZ1bmNUb0RlZik7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTU2
ZGRlZTRkOTA1MGE3MDIzNzVlYzU5OGJlZjgyYjQ1ZWYzODViCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDI1IEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQRlVOQ1RJT05TVE9ERUZJTklUSU9OU19I
XworCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisKK25hbWVzcGFjZSBzaAoreworCisv
LyBBIG1hcCBmcm9tIGZ1bmN0aW9ucyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25z
LgordXNpbmcgRnVuY3Rpb25Ub0RlZmluaXRpb24gPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3Qg
VEZ1bmN0aW9uICosIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKj47CisKKy8vIE1hcHMgZnVu
Y3Rpb25zIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMuCitBTkdMRV9OT19ESVND
QVJEIEZ1bmN0aW9uVG9EZWZpbml0aW9uIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMoVEludGVy
bUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQRlVOQ1RJT05TVE9ERUZJTklU
SU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L01hcFN5bWJvbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzNWM5MzA0Njk1ZDFlZGZlMGZiZWQ1
MjFkNmZiMTA0Y2ZkYzY2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3lt
Ym9scy5jcHAKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7
CisKK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6
CisgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50
ZXJtU3ltYm9sICYpPiBtTWFwOworCisgIHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIg
JmNvbXBpbGVyLAorICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25z
dCBURnVuY3Rpb24gKiwgVEludGVybVN5bWJvbCAmKT4gbWFwKQorICAgICAgICA6IFRJbnRlcm1S
ZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1NYXAobWFwKQorICAgIHt9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChUSW50ZXJtU3ltYm9sICZzeW1ib2xOb2RlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1NYXAoZ2V0UGFyZW50RnVuY3Rpb24oKSwgc3lt
Ym9sTm9kZSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6Ok1hcFN5
bWJvbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2Rl
ICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKK3sKKyAgICBSZXdy
aXRlciByZXdyaXRlcihjb21waWxlciwgc3RkOjptb3ZlKG1hcCkpOworICAgIGlmICghcmV3cml0
ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJv
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjU2ODkwYTE1Y2Ex
ZWNhNTkwMWIxMmFhOGMzOTE2YzE1NmZjYmM5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9NYXBTeW1ib2xzLmgKQEAgLTAsMCArMSwyNyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01F
TUJFUkFDQ0VTU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXworCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gTWFwcyBU
SW50ZXJtU3ltYm9sIG5vZGVzIHRvIFRJbnRlcm1Ob2RlIG5vZGVzLgorLy8gVGhlIHBhcmVudCBm
dW5jdGlvbiBvZiBhIHN5bWJvbCBpcyBwcm92aWRlZCB0byB0aGUgbWFwcGluZyB3aGVuIGFwcGxp
Y2FibGUuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgTWFwU3ltYm9scygKKyAgICBUQ29tcGlsZXIg
JmNvbXBpbGVyLAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBzdGQ6OmZ1bmN0aW9uPFRJ
bnRlcm1Ob2RlICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCk7CisK
K30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX01BUFZBUklBQkxFU1RPTUVNQkVSQUNDRVNTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlT
dHJ1Y3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NzhkMzRjYzMxYzUwOWIwOTYzOWUwNmViMzg2NTBmODBm
MTJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcApA
QCAtMCwwICsxLDEwMDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9t
YXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitzaXplX3Qg
TW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllczo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9y
ZGVyaW5nLnNpemUoKTsKK30KKworY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJk1vZGlm
aWVkU3RydWN0TWFjaGluZXJpZXM6OmF0KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5kZXggPCBzaXplKCkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgICAgICAgICAgICAg
ID0gb3JkZXJpbmdbaW5kZXhdOworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpt
ID0gZmluZCgqcyk7CisgICAgQVNTRVJUKG0pOworICAgIHJldHVybiAqbTsKK30KKworY29uc3Qg
TW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQo
Y29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sKKyAgICBhdXRvIGl0ZXIgPSBvcmlnaW5hbFRv
TWFjaGluZXJ5LmZpbmQoJnMpOworICAgIGlmIChpdGVyID09IG9yaWdpbmFsVG9NYWNoaW5lcnku
ZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJu
ICZpdGVyLT5zZWNvbmQ7Cit9CisKK3ZvaWQgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5z
ZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUgJnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmbWFjaGluZXJ5KQoreworICAg
IEFTU0VSVCghZmluZChzKSk7CisgICAgb3JpZ2luYWxUb01hY2hpbmVyeVsmc10gPSBtYWNoaW5l
cnk7CisgICAgb3JkZXJpbmcucHVzaF9iYWNrKCZzKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworbmFtZXNwYWNlCit7CisKK1RJbnRlcm1UeXBlZCAmRmxhdHRlbihTeW1ib2xFbnYg
JnN5bWJvbEVudiwgVEludGVybVR5cGVkICZub2RlKQoreworICAgIGF1dG8gJnR5cGUgPSBub2Rl
LmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkpOworCisgICAgYXV0byAmcmV0
VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgcmV0VHlwZS5tYWtlQXJyYXkoMSk7CisK
KyAgICByZXR1cm4gc3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImZsYXR0ZW4i
KSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7Jm5vZGV9KTsKK30KKworc3RydWN0IEZs
YXR0ZW5BcnJheQore307CisKK3N0cnVjdCBQYXRoSXRlbQoreworICAgIGVudW0gY2xhc3MgVHlw
ZQorICAgIHsKKyAgICAgICAgRmllbGQsICAgICAgICAgLy8gU3RydWN0IGZpZWxkIGluZGV4aW5n
LgorICAgICAgICBJbmRleCwgICAgICAgICAvLyBBcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaW5k
ZXhpbmcuCisgICAgICAgIEZsYXR0ZW5BcnJheSwgIC8vIEFycmF5IG9mIGFueSByYW5rIC0+IHBv
aW50ZXIgb2YgaW5uZXJtb3N0IHR5cGUuCisgICAgfTsKKworICAgIFBhdGhJdGVtKGNvbnN0IFRG
aWVsZCAmZmllbGQpIDogZmllbGQoJmZpZWxkKSwgdHlwZShUeXBlOjpGaWVsZCkge30KKyAgICBQ
YXRoSXRlbShpbnQgaW5kZXgpIDogaW5kZXgoaW5kZXgpLCB0eXBlKFR5cGU6OkluZGV4KSB7fQor
ICAgIFBhdGhJdGVtKHVuc2lnbmVkIGluZGV4KSA6IFBhdGhJdGVtKHN0YXRpY19jYXN0PGludD4o
aW5kZXgpKSB7fQorICAgIFBhdGhJdGVtKEZsYXR0ZW5BcnJheSBmbGF0dGVuKSA6IHR5cGUoVHlw
ZTo6RmxhdHRlbkFycmF5KSB7fQorCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIGNvbnN0IFRG
aWVsZCAqZmllbGQ7CisgICAgICAgIGludCBpbmRleDsKKyAgICB9OworICAgIFR5cGUgdHlwZTsK
K307CisKK1RJbnRlcm1UeXBlZCAmQnVpbGRQYXRoQWNjZXNzKFN5bWJvbEVudiAmc3ltYm9sRW52
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxQYXRoSXRlbT4g
JnBhdGgpCit7CisgICAgVEludGVybVR5cGVkICpjdXJyID0gbmV3IFRJbnRlcm1TeW1ib2woJnZh
cik7CisgICAgZm9yIChjb25zdCBQYXRoSXRlbSAmaXRlbSA6IHBhdGgpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGl0ZW0udHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBQYXRoSXRl
bTo6VHlwZTo6RmllbGQ6CisgICAgICAgICAgICAgICAgY3VyciA9ICZBY2Nlc3NGaWVsZCgqY3Vy
ciwgaXRlbS5maWVsZC0+bmFtZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIGN1cnIgPSAm
QWNjZXNzSW5kZXgoKmN1cnIsIGl0ZW0uaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBQYXRoSXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGN1cnIgPSAmRmxhdHRlbihzeW1ib2xFbnYsICpjdXJyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiAqY3VycjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgT3Jp
Z2luYWxQYXJhbSA9IGNvbnN0IFRWYXJpYWJsZSAmOwordXNpbmcgTW9kaWZpZWRQYXJhbSA9IGNv
bnN0IFRWYXJpYWJsZSAmOworCit1c2luZyBPcmlnaW5hbEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsK
K3VzaW5nIE1vZGlmaWVkQWNjZXNzID0gVEludGVybVR5cGVkOworCitzdHJ1Y3QgQWNjZXNzCit7
CisgICAgT3JpZ2luYWxBY2Nlc3MgJm9yaWdpbmFsOworICAgIE1vZGlmaWVkQWNjZXNzICZtb2Rp
ZmllZDsKKworICAgIHN0cnVjdCBFbnYKKyAgICB7CisgICAgICAgIGNvbnN0IENvbnZlcnRUeXBl
IHR5cGU7CisgICAgfTsKK307CisKK3VzaW5nIENvbnZlcnNpb25GdW5jID0gc3RkOjpmdW5jdGlv
bjxBY2Nlc3MoQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJiwgTW9kaWZpZWRBY2Nlc3Mg
Jik+OworCitjbGFzcyBDb252ZXJ0U3RydWN0U3RhdGUgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sK
KyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQ29udmVyc2lvbkluZm8KKyAgICB7CisgICAgICAgIENv
bnZlcnNpb25GdW5jIHN0ZEZ1bmM7CisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqYXN0RnVuYzsK
KyAgICAgICAgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+IHBhdGhJdGVtczsKKyAgICAgICAgSW1tdXRh
YmxlU3RyaW5nIHBhdGhOYW1lOworICAgIH07CisKKyAgcHVibGljOgorICAgIENvbnZlcnRTdHJ1
Y3RTdGF0ZShTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25m
aWcgJmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5l
cmllcyAmb3V0TWFjaGluZXJpZXMpCisgICAgICAgIDogY29uZmlnKGNvbmZpZyksCisgICAgICAg
ICAgc3ltYm9sRW52KHN5bWJvbEVudiksCisgICAgICAgICAgbW9kaWZpZWRGaWVsZHMoKm5ldyBU
RmllbGRMaXN0KCkpLAorICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bWJvbEVudi5zeW1ib2xUYWJs
ZSgpKSwKKyAgICAgICAgICBpZEdlbihpZEdlbiksCisgICAgICAgICAgb3V0TWFjaGluZXJpZXMo
b3V0TWFjaGluZXJpZXMpCisgICAge30KKworICAgIH5Db252ZXJ0U3RydWN0U3RhdGUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG5hbWVQYXRoLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHB1Ymxpc2goY29uc3QgVFN0
cnVjdHVyZSAmb3JpZ2luYWxTdHJ1Y3QsIGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFtZSkK
KyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wgaXNPcmlnaW5hbFRvTW9kaWZpZWQgPSBjb25maWcu
Y29udmVydFR5cGUgPT0gQ29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZDsKKworICAgICAg
ICBhdXRvICZtb2RpZmllZFN0cnVjdCA9ICpuZXcgVFN0cnVjdHVyZSgmc3ltYm9sVGFibGUsIG1v
ZGlmaWVkU3RydWN0TmFtZS5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtb2RpZmllZEZpZWxkcywgbW9kaWZpZWRTdHJ1Y3ROYW1lLnN5
bWJvbFR5cGUoKSk7CisKKyAgICAgICAgYXV0byAmZnVuYyA9ICpuZXcgVEZ1bmN0aW9uKAorICAg
ICAgICAgICAgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgaWRHZW4uY3JlYXRlTmV3TmFtZShp
c09yaWdpbmFsVG9Nb2RpZmllZCA/ICJvcmlnaW5hbFRvTW9kaWZpZWQiIDogIm1vZGlmaWVkVG9P
cmlnaW5hbCIpCisgICAgICAgICAgICAgICAgLnJhd05hbWUoKSwKKyAgICAgICAgICAgIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRWb2lkKSwgZmFs
c2UpOworCisgICAgICAgIE9yaWdpbmFsUGFyYW0gb3JpZ2luYWxQYXJhbSA9CisgICAgICAgICAg
ICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBvcmlnaW5hbFN0cnVjdCwgTmFt
ZSgib3JpZ2luYWwiKSk7CisgICAgICAgIE1vZGlmaWVkUGFyYW0gbW9kaWZpZWRQYXJhbSA9Cisg
ICAgICAgICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBtb2RpZmllZFN0
cnVjdCwgTmFtZSgibW9kaWZpZWQiKSk7CisgICAgICAgIHN5bWJvbEVudi5tYXJrQXNSZWZlcmVu
Y2Uob3JpZ2luYWxQYXJhbSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICBzeW1ib2xF
bnYubWFya0FzUmVmZXJlbmNlKG1vZGlmaWVkUGFyYW0sIGNvbmZpZy5leHRlcm5hbEFkZHJlc3NT
cGFjZSk7CisgICAgICAgIGlmIChpc09yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworICAgICAgICAgICAg
ZnVuYy5hZGRQYXJhbWV0ZXIoJm1vZGlmaWVkUGFyYW0pOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm1vZGlmaWVkUGFy
YW0pOworICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworICAg
ICAgICB9CisKKyAgICAgICAgVEludGVybUJsb2NrICZib2R5ID0gKm5ldyBUSW50ZXJtQmxvY2so
KTsKKworICAgICAgICBBY2Nlc3M6OkVudiBlbnZ7Y29uZmlnLmNvbnZlcnRUeXBlfTsKKworICAg
ICAgICBmb3IgKENvbnZlcnNpb25JbmZvICZpbmZvIDogY29udmVyc2lvbkluZm9zKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGNvbnZlcnQgPSBbJl0oT3JpZ2luYWxBY2Nlc3MgJm9yaWdp
bmFsLCBNb2RpZmllZEFjY2VzcyAmbW9kaWZpZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by5hc3RGdW5jKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpbmZvLnN0ZEZ1bmMpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAg
PSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG1vZGlmaWVkIDogb3JpZ2luYWw7CisgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZGVzdCA9IGlzT3JpZ2luYWxUb01vZGlmaWVkID8gb3Jp
Z2luYWwgOiBtb2RpZmllZDsKKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1l
bnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgKmluZm8uYXN0RnVuYywgbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZGVzdCwgJnNyY30p
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8uc3RkRnVuYyk7CisgICAgICAg
ICAgICAgICAgICAgIEFjY2VzcyBhY2Nlc3MgICAgICA9IGluZm8uc3RkRnVuYyhlbnYsIG9yaWdp
bmFsLCBtb2RpZmllZCk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmc3JjICA9
IGlzT3JpZ2luYWxUb01vZGlmaWVkID8gYWNjZXNzLm9yaWdpbmFsIDogYWNjZXNzLm1vZGlmaWVk
OworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9N
b2RpZmllZCA/IGFjY2Vzcy5tb2RpZmllZCA6IGFjY2Vzcy5vcmlnaW5hbDsKKyAgICAgICAgICAg
ICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9y
OjpFT3BBc3NpZ24sICZkZXN0LCAmc3JjKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgT3JpZ2luYWxBY2Nlc3MgKm9yaWdpbmFsID0gJkJ1aWxkUGF0
aEFjY2VzcyhzeW1ib2xFbnYsIG9yaWdpbmFsUGFyYW0sIGluZm8ucGF0aEl0ZW1zKTsKKyAgICAg
ICAgICAgIE1vZGlmaWVkQWNjZXNzICptb2RpZmllZCA9ICZBY2Nlc3NGaWVsZChtb2RpZmllZFBh
cmFtLCBpbmZvLnBhdGhOYW1lKTsKKworICAgICAgICAgICAgY29uc3QgVFR5cGUgb3QgPSBvcmln
aW5hbC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgY29uc3QgVFR5cGUgbXQgPSBtb2RpZmllZC0+
Z2V0VHlwZSgpOworICAgICAgICAgICAgQVNTRVJUKG90LmlzQXJyYXkoKSA9PSBtdC5pc0FycmF5
KCkpOworCisgICAgICAgICAgICBpZiAob3QuaXNBcnJheSgpICYmIG90ICE9IG10KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChvdC5nZXRBcnJheVNpemVzKCkgPT0gbXQu
Z2V0QXJyYXlTaXplcygpKTsKKyAgICAgICAgICAgICAgICBpZiAob3QuaXNBcnJheU9mQXJyYXlz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCA9ICZG
bGF0dGVuKHN5bWJvbEVudiwgKm9yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZWQgPSAmRmxhdHRlbihzeW1ib2xFbnYsICptb2RpZmllZCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCB2b2x1bWUgPSBzdGF0aWNfY2FzdDxpbnQ+KG90Lmdl
dEFycmF5U2l6ZVByb2R1Y3QoKSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2b2x1bWU7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9yaWdpbmFsID0gb3JpZ2luYWwtPmRlZXBDb3B5KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtb2RpZmllZCA9IG1vZGlmaWVkLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZvID0gQWNjZXNzSW5kZXgoKm9y
aWdpbmFsLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxBY2Nlc3MgJm0gPSBBY2Nl
c3NJbmRleCgqbW9kaWZpZWQsIGkpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0KG8sIG0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0KCpvcmlnaW5hbCwgKm1vZGlmaWVk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gKmZ1bmNQcm90byA9
IG5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUoJmZ1bmMpOworICAgICAgICBhdXRvICpmdW5j
RGVmICAgPSBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG8sICZib2R5KTsK
KworICAgICAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisgICAgICAgIG1h
Y2hpbmVyeS5tb2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgICA9ICZtb2RpZmllZFN0cnVj
dDsKKyAgICAgICAgbWFjaGluZXJ5LmdldENvbnZlcnRlcihjb25maWcuY29udmVydFR5cGUpID0g
ZnVuY0RlZjsKKworICAgICAgICBvdXRNYWNoaW5lcmllcy5pbnNlcnQob3JpZ2luYWxTdHJ1Y3Qs
IG1hY2hpbmVyeSk7CisgICAgfQorCisgICAgdm9pZCBwdXNoUGF0aChQYXRoSXRlbSBjb25zdCAm
aXRlbSkKKyAgICB7CisgICAgICAgIHBhdGhJdGVtcy5wdXNoX2JhY2soaXRlbSk7CisKKyAgICAg
ICAgc3dpdGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0
ZW06OlR5cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0aChpdGVtLmZpZWxk
LT5uYW1lKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Y2FzZSBQYXRoSXRlbTo6VHlwZTo6SW5kZXg6CisgICAgICAgICAgICAgICAgcHVzaE5hbWVQYXRo
KGl0ZW0uaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFBhdGhJdGVtOjpUeXBlOjpGbGF0dGVuQXJyYXk6CisgICAgICAgICAgICAgICAgbmFtZVBhdGhT
aXplcy5wdXNoX2JhY2sobmFtZVBhdGguc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcG9wUGF0aCgpCisgICAgeworICAgICAgICBB
U1NFUlQoIW5hbWVQYXRoLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQoIW5hbWVQYXRoU2l6ZXMu
ZW1wdHkoKSk7CisgICAgICAgIG5hbWVQYXRoLnJlc2l6ZShuYW1lUGF0aFNpemVzLmJhY2soKSk7
CisgICAgICAgIG5hbWVQYXRoU2l6ZXMucG9wX2JhY2soKTsKKworICAgICAgICBBU1NFUlQoIXBh
dGhJdGVtcy5lbXB0eSgpKTsKKyAgICAgICAgcGF0aEl0ZW1zLnBvcF9iYWNrKCk7CisgICAgfQor
CisgICAgdm9pZCBmaW5hbGl6ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIWZpbmFsaXplZCk7
CisgICAgICAgIGZpbmFsaXplZCA9IHRydWU7CisgICAgICAgIGludHJvZHVjZVBhY2tpbmcoKTsK
KyAgICAgICAgQVNTRVJUKG1ldGFsTGF5b3V0VG90YWwgPT0gTGF5b3V0OjpJZGVudGl0eSgpKTsK
KyAgICAgICAgaW50cm9kdWNlUGFkZGluZygpOworICAgIH0KKworICAgIHZvaWQgYWRkTW9kaWZp
ZWRGaWVsZChjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBU
VHlwZSAmbmV3VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3Rv
cmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFs
aWZpZXIgPSBuZXdUeXBlLmdldExheW91dFF1YWxpZmllcigpOworICAgICAgICBsYXlvdXRRdWFs
aWZpZXIuYmxvY2tTdG9yYWdlICAgICA9IHN0b3JhZ2U7CisgICAgICAgIGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nICAgID0gcGFja2luZzsKKyAgICAgICAgbmV3VHlwZS5zZXRMYXlvdXRR
dWFsaWZpZXIobGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJp
bmcgcGF0aE5hbWUobmFtZVBhdGgpOworICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2so
bmV3IFRGaWVsZCgmbmV3VHlwZSwgcGF0aE5hbWUsIGZpZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9s
VHlwZSgpKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNp
b25GdW5jICZmdW5jKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0
eSgpKTsKKyAgICAgICAgY29udmVyc2lvbkluZm9zLnB1c2hfYmFjayh7ZnVuYywgbnVsbHB0ciwg
cGF0aEl0ZW1zLCBtb2RpZmllZEZpZWxkcy5iYWNrKCktPm5hbWUoKX0pOworICAgIH0KKworICAg
IHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBURnVuY3Rpb24gJmZ1bmMpCisgICAgeworICAgICAg
ICBBU1NFUlQoIW1vZGlmaWVkRmllbGRzLmVtcHR5KCkpOworICAgICAgICBjb252ZXJzaW9uSW5m
b3MucHVzaF9iYWNrKHt7fSwgJmZ1bmMsIHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygp
LT5uYW1lKCl9KTsKKyAgICB9CisKKyAgICBib29sIGhhc1BhY2tpbmcoKSBjb25zdCB7IHJldHVy
biBjb250YWluc1BhY2tlZDsgfQorCisgICAgYm9vbCBoYXNQYWRkaW5nKCkgY29uc3QgeyByZXR1
cm4gcGFkRmllbGRDb3VudCA+IDA7IH0KKworICAgIGJvb2wgcmVjdXJzZShjb25zdCBUU3RydWN0
dXJlICZzdHJ1Y3R1cmUsIE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZvdXRNYWNoaW5lcnkpCisg
ICAgeworICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IG91dE1hY2hp
bmVyaWVzLmZpbmQoc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKG0gPT0gbnVsbHB0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZShz
dHJ1Y3R1cmUubmFtZSgpLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAoIVRyeUNyZWF0ZU1vZGlm
aWVkU3RydWN0KHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgc3RydWN0dXJlLCBuYW1lLCBvdXRN
YWNoaW5lcmllcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbSA9IG91dE1hY2hpbmVyaWVzLmZpbmQoc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVChtKTsKKyAgICAgICAgfQorICAgICAgICBvdXRN
YWNoaW5lcnkgPSAqbTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIHByaXZhdGU6
CisgICAgdm9pZCBhZGRQYWRkaW5nKHNpemVfdCBwYWRBbW91bnQsIGJvb2wgdXBkYXRlTGF5b3V0
KQorICAgIHsKKyAgICAgICAgaWYgKHBhZEFtb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBt
b2RpZmllZEZpZWxkcy5zaXplKCk7CisKKyAgICAgICAgLy8gSXRlcmF0aXZlbHkgYWRkaW5nIGlu
IHNjYWxhciBvciB2ZWN0b3IgcGFkZGluZyBiZWNhdXNlIHNvbWUgc3RydWN0IHR5cGVzIHdpbGwg
bm90CisgICAgICAgIC8vIGFsbG93IG1hdHJpeCBvciBhcnJheSBtZW1iZXJzLgorICAgICAgICB3
aGlsZSAocGFkQW1vdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVFR5cGUgKnBhZFR5
cGU7CisgICAgICAgICAgICBpZiAocGFkQW1vdW50ID49IDE2KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHBhZEFtb3VudCAtPSAxNjsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0g
bmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEZsb2F0LCA0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKHBhZEFtb3VudCA+PSA4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHBhZEFtb3VudCAtPSA4OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5
cGUoVEJhc2ljVHlwZTo6RWJ0RmxvYXQsIDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAocGFkQW1vdW50ID49IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cGFkQW1vdW50IC09IDQ7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFz
aWNUeXBlOjpFYnRGbG9hdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChw
YWRBbW91bnQgPj0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYWRBbW91bnQg
LT0gMjsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVi
dEJvb2wsIDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEFTU0VSVChwYWRBbW91bnQgPT0gMSk7CisgICAgICAgICAgICAg
ICAgcGFkQW1vdW50IC09IDE7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVw
ZGF0ZUxheW91dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRv
dGFsICs9IE1ldGFsTGF5b3V0T2YoKnBhZFR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb25zdCBOYW1lIG5hbWUgPSBpZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKTsKKyAgICAg
ICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICBuZXcgVEZp
ZWxkKHBhZFR5cGUsIG5hbWUucmF3TmFtZSgpLCBrTm9Tb3VyY2VMb2MsIG5hbWUuc3ltYm9sVHlw
ZSgpKSk7CisgICAgICAgICAgICArK3BhZEZpZWxkQ291bnQ7CisgICAgICAgIH0KKworICAgICAg
ICBzdGQ6OnJldmVyc2UobW9kaWZpZWRGaWVsZHMuYmVnaW4oKSArIGJlZ2luLCBtb2RpZmllZEZp
ZWxkcy5lbmQoKSk7CisgICAgfQorCisgICAgdm9pZCBpbnRyb2R1Y2VQYWNraW5nKCkKKyAgICB7
CisgICAgICAgIGlmICghY29uZmlnLmFsbG93UGFja2luZykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBzZXRVbnBhY2tlZFN0b3JhZ2Ug
PSBbXShUVHlwZSAmdHlwZSkgeworICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3JhZ2U7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFj
a2VkOgorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzU3RkNDMwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgICAgICBjYXNl
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgICAgICBjYXNlIFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNldEJsb2NrU3RvcmFnZSh0eXBlLCBz
dG9yYWdlKTsKKyAgICAgICAgfTsKKworICAgICAgICBMYXlvdXQgZ2xzbExheW91dFRvdGFsID0g
TGF5b3V0OjpJZGVudGl0eSgpOworICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSAgICAgID0gbW9k
aWZpZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgJmN1cnIgICAgICAgICAgID0g
Km1vZGlmaWVkRmllbGRzW2ldOworICAgICAgICAgICAgVFR5cGUgJmN1cnJUeXBlICAgICAgICA9
ICpjdXJyLnR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgY2FuQmVQYWNrZWQgPSBDYW5C
ZVBhY2tlZChjdXJyVHlwZSk7CisKKyAgICAgICAgICAgIGF1dG8gZG9udFBhY2sgPSBbJl0oKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNhbkJlUGFja2VkKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZ2xzbExheW91dFRvdGFsICs9IEdsc2xMYXlvdXRP
ZihjdXJyVHlwZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoIUNhbkJlUGFj
a2VkKGN1cnJUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb250UGFjaygp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb25zdCBMYXlvdXQgcGFja2VkR2xzbExheW91dCAgICAgICAgICAgPSBHbHNsTGF5b3V0T2Yo
Y3VyclR5cGUpOworICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBwYWNrZWRT
dG9yYWdlID0gY3VyclR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAg
ICAgICAgICAgc2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0
IExheW91dCB1bnBhY2tlZEdsc2xMYXlvdXQgPSBHbHNsTGF5b3V0T2YoY3VyclR5cGUpOworICAg
ICAgICAgICAgU2V0QmxvY2tTdG9yYWdlKGN1cnJUeXBlLCBwYWNrZWRTdG9yYWdlKTsKKworICAg
ICAgICAgICAgQVNTRVJUKHBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mIDw9IHVucGFja2VkR2xzbExh
eW91dC5zaXplT2YpOworICAgICAgICAgICAgaWYgKHBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mID09
IHVucGFja2VkR2xzbExheW91dC5zaXplT2YpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZG9udFBhY2soKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGogPSBpICsgMTsKKyAgICAgICAgICAgIGlmIChq
ID09IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2soKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IHBhZCAgICAgICAgICAgID0gdW5wYWNrZWRHbHNsTGF5b3V0LnNpemVPZiAtIHBhY2tl
ZEdsc2xMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZuZXh0ICAgICAg
ICAgID0gKm1vZGlmaWVkRmllbGRzW2pdOworICAgICAgICAgICAgY29uc3QgTGF5b3V0IG5leHRH
bHNsTGF5b3V0ID0gR2xzbExheW91dE9mKCpuZXh0LnR5cGUoKSk7CisKKyAgICAgICAgICAgIGlm
IChwYWQgPCBuZXh0R2xzbExheW91dC5zaXplT2YpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZG9udFBhY2soKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3ltYm9sRW52Lm1hcmtBc1BhY2tlZChjdXJyKTsKKyAgICAgICAg
ICAgIGdsc2xMYXlvdXRUb3RhbCArPSBwYWNrZWRHbHNsTGF5b3V0OworICAgICAgICAgICAgY29u
dGFpbnNQYWNrZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBpbnRyb2R1
Y2VQYWRkaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghY29uZmlnLmFsbG93UGFkZGluZykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgTWV0YWxM
YXlvdXRPZkNvbmZpZyBsYXlvdXRDb25maWc7CisgICAgICAgIGxheW91dENvbmZpZy5kaXNhYmxl
UGFja2luZyAgICAgICAgICAgICA9ICFjb25maWcuYWxsb3dQYWNraW5nOworICAgICAgICBsYXlv
dXRDb25maWcuYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSB0cnVlOworCisgICAgICAgIFRG
aWVsZExpc3QgZmllbGRzID0gc3RkOjptb3ZlKG1vZGlmaWVkRmllbGRzKTsKKyAgICAgICAgQVNT
RVJUKCFmaWVsZHMuZW1wdHkoKSk7ICAvLyBHTFNMIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBtZW1i
ZXIuCisKKyAgICAgICAgY29uc3QgVEZpZWxkICpjb25zdCBmaXJzdCA9IGZpZWxkcy5mcm9udCgp
OworCisgICAgICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkcykKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQtPnR5cGUoKTsKKworICAgICAgICAg
ICAgY29uc3QgTGF5b3V0IGdsc2xMYXlvdXQgID0gR2xzbExheW91dE9mKHR5cGUpOworICAgICAg
ICAgICAgY29uc3QgTGF5b3V0IG1ldGFsTGF5b3V0ID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlv
dXRDb25maWcpOworCisgICAgICAgICAgICBzaXplX3QgcHJlUGFkQW1vdW50ID0gMDsKKyAgICAg
ICAgICAgIGlmIChnbHNsTGF5b3V0LmFsaWduT2YgPiBtZXRhbExheW91dC5hbGlnbk9mICYmIGZp
ZWxkICE9IGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwcmVQYWRkZWRTaXplID0gbWV0YWxMYXlvdXRUb3RhbC5zaXplT2Y7CisgICAgICAgICAgICAg
ICAgbWV0YWxMYXlvdXRUb3RhbC5yZXF1aXJlQWxpZ25tZW50KGdsc2xMYXlvdXQuYWxpZ25PZiwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZGRlZFNpemUgPSBtZXRhbExh
eW91dFRvdGFsLnNpemVPZjsKKyAgICAgICAgICAgICAgICBwcmVQYWRBbW91bnQgICAgICAgICAg
ICA9IHBhZGRlZFNpemUgLSBwcmVQYWRkZWRTaXplOworICAgICAgICAgICAgICAgIG1ldGFsTGF5
b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7CisgICAgICAgICAgICAgICAgYWRkUGFkZGluZyhwcmVQ
YWRBbW91bnQsIGZhbHNlKTsgIC8vIE5vdGU6IHJlcXVpcmVBbGlnbm1lbnQoKSBhbHJlYWR5IHVw
ZGF0ZWQgbGF5b3V0CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCArPSBtZXRhbExheW91dDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNrKGZpZWxk
KTsKKworICAgICAgICAgICAgaWYgKGdsc2xMYXlvdXQuc2l6ZU9mID4gbWV0YWxMYXlvdXQuc2l6
ZU9mICYmIGZpZWxkICE9IGZpZWxkcy5iYWNrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgYm9vbCB1cGRhdGVMYXlvdXQgPSB0cnVlOyAgLy8gWFhYOiBDb3JyZWN0Pwor
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRBbW91bnQgID0gZ2xzbExheW91dC5zaXpl
T2YgLSBtZXRhbExheW91dC5zaXplT2Y7CisgICAgICAgICAgICAgICAgYWRkUGFkZGluZyhwYWRB
bW91bnQsIHVwZGF0ZUxheW91dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIHB1c2hOYW1lUGF0aChjb25zdCBjaGFyICpleHRyYSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChleHRyYSAmJiAqZXh0cmEgIT0gJ1wwJyk7CisgICAgICAgIG5hbWVQYXRoU2l6ZXMu
cHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBleHRy
YTsKKyAgICAgICAgaWYgKG5hbWVQYXRoLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG5hbWVQYXRoID0gcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3
aGlsZSAoKnAgPT0gJ18nKQorICAgICAgICB7CisgICAgICAgICAgICArK3A7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCpwID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHAgPSAieCI7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVQYXRoLmJhY2soKSAhPSAnXycpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG5hbWVQYXRoICs9ICdfJzsKKyAgICAgICAgfQorICAgICAgICBuYW1l
UGF0aCArPSBwOworICAgIH0KKworICAgIHZvaWQgcHVzaE5hbWVQYXRoKHVuc2lnbmVkIGV4dHJh
KQorICAgIHsKKyAgICAgICAgY2hhciBidWZmZXJbc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46OmRpZ2l0czEwICsgMV07CisgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJXUiLCBleHRyYSk7
CisgICAgICAgIHB1c2hOYW1lUGF0aChidWZmZXIpOworICAgIH0KKworICBwdWJsaWM6CisgICAg
Y29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZjb25maWc7CisgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnY7CisKKyAgcHJpdmF0ZToKKyAgICBURmllbGRMaXN0ICZtb2RpZmllZEZpZWxkczsKKyAgICBM
YXlvdXQgbWV0YWxMYXlvdXRUb3RhbCA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICBzaXplX3Qg
cGFkRmllbGRDb3VudCAgICA9IDA7CisgICAgYm9vbCBjb250YWluc1BhY2tlZCAgICAgPSBmYWxz
ZTsKKyAgICBib29sIGZpbmFsaXplZCAgICAgICAgICA9IGZhbHNlOworCisgICAgc3RkOjp2ZWN0
b3I8UGF0aEl0ZW0+IHBhdGhJdGVtczsKKworICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gbmFtZVBh
dGhTaXplczsKKyAgICBzdGQ6OnN0cmluZyBuYW1lUGF0aDsKKworICAgIHN0ZDo6dmVjdG9yPENv
bnZlcnNpb25JbmZvPiBjb252ZXJzaW9uSW5mb3M7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZTsKKyAgICBJZEdlbiAmaWRHZW47CisgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAm
b3V0TWFjaGluZXJpZXM7Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBN
b2RpZnlGdW5jID0gYm9vbCAoKikoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nKTsK
KworYm9vbCBNb2RpZnlSZWN1cnNpdmUoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nKTsKKworYm9vbCBJZGVudGl0eU1v
ZGlmeShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tT
dG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQ
YWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgp
OworICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIENsb25lVHlwZSh0eXBlKSwgc3Rv
cmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYg
JiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgIHJldHVy
biBBY2Nlc3N7bywgbX07CisgICAgfSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
bGluZVN0cnVjdChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9j
a1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQ
YWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgICAgID0g
KmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBzdGF0
ZS5zeW1ib2xFbnYucmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSk7CisgICAgaWYgKCFzdWJzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFz
dGF0ZS5jb25maWcuaW5saW5lU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZzdWJmaWVsZHMgPSBzdWJzdHJ1
Y3R1cmUtPmZpZWxkcygpOworICAgIGZvciAoY29uc3QgVEZpZWxkICpzdWJmaWVsZCA6IHN1YmZp
ZWxkcykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZzdWJ0eXBlICAgICAgICAgICAgICAg
ICAgPSAqc3ViZmllbGQtPnR5cGUoKTsKKyAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBzdWJzdG9yYWdlICA9IE92ZXJsYXkoc3RvcmFnZSwgc3VidHlwZSk7CisgICAgICAgIGNvbnN0
IFRMYXlvdXRNYXRyaXhQYWNraW5nIHN1YnBhY2tpbmcgPSBPdmVybGF5KHBhY2tpbmcsIHN1YnR5
cGUpOworICAgICAgICBNb2RpZnlSZWN1cnNpdmUoc3RhdGUsICpzdWJmaWVsZCwgc3Vic3RvcmFn
ZSwgc3VicGFja2luZyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVj
dXJzZVN0cnVjdChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJs
b2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRy
aXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgICAg
ID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBz
dGF0ZS5zeW1ib2xFbnYucmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSk7CisgICAgaWYgKCFzdWJzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3Rh
dGUuY29uZmlnLnJlY3Vyc2VTdHJ1Y3QoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5IG1hY2hpbmVyeTsKKyAg
ICBpZiAoIXN0YXRlLnJlY3Vyc2UoKnN1YnN0cnVjdHVyZSwgbWFjaGluZXJ5KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmbmV3VHlwZSA9ICpuZXcg
VFR5cGUobWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0LCBmYWxzZSk7CisgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQorICAgIHsKKyAgICAgICAgbmV3VHlwZS5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlT
aXplcygpKTsKKyAgICB9CisKKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpjb252ZXJ0
ZXIgPSBtYWNoaW5lcnkuZ2V0Q29udmVydGVyKHN0YXRlLmNvbmZpZy5jb252ZXJ0VHlwZSk7Cisg
ICAgQVNTRVJUKGNvbnZlcnRlcik7CisKKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxk
LCBuZXdUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKyAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKCpj
b252ZXJ0ZXItPmdldEZ1bmN0aW9uKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3BsaXRNYXRyaXhDb2x1bW5zKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBjb25zdCBU
VHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgaWYgKCF0eXBlLmlzTWF0cml4KCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmln
LnNwbGl0TWF0cml4Q29sdW1ucyhmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY29uc3QgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsKKyAgICBUVHlw
ZSAmcm93VHlwZSA9IERyb3BDb2x1bW5zKHR5cGUpOworCisgICAgZm9yIChpbnQgYyA9IDA7IGMg
PCBjb2xzOyArK2MpCisgICAgeworICAgICAgICBzdGF0ZS5wdXNoUGF0aChjKTsKKworICAgICAg
ICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCByb3dUeXBlLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyAgICAgICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2lu
YWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICByZXR1cm4gQWNj
ZXNze28sIG19OworICAgICAgICB9KTsKKworICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2F0dXJhdGVNYXRyaXhSb3dzKENvbnZl
cnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmll
bGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3Rv
cmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJp
eFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBl
KCk7CisgICAgaWYgKCF0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGNvbnN0IGludCByb3dzICAgICAgID0gdHlwZS5nZXRSb3dzKCk7Cisg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzdGF0ZS5jb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
KGZpZWxkKTsKKyAgICBpZiAoc2F0dXJhdGlvbiA8PSByb3dzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7
CisgICAgVFR5cGUgJnNhdFR5cGUgPSBTZXRNYXRyaXhSb3dEaW0odHlwZSwgc2F0dXJhdGlvbik7
CisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgc2F0VHlwZSwgc3RvcmFnZSwgcGFj
a2luZyk7CisKKyAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICB7CisgICAg
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgKytyKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVudiAmLCBPcmlnaW5hbEFjY2VzcyAm
bywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAgICAgICAgICBhdXRvICZvXyA9IEFjY2Vz
c0luZGV4KEFjY2Vzc0luZGV4KG8sIGMpLCByKTsKKyAgICAgICAgICAgICAgICBhdXRvICZtXyA9
IEFjY2Vzc0luZGV4KEFjY2Vzc0luZGV4KG0sIGMpLCByKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQWNjZXNze29fLCBtX307CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRlc3RCb29sVG9VaW50KENvbnZlcnRTdHJ1Y3RT
dGF0ZSAmc3RhdGUsIGNvbnN0IFRGaWVsZCAmZmllbGQpCit7CisgICAgaWYgKGZpZWxkLnR5cGUo
KS0+Z2V0QmFzaWNUeXBlKCkgIT0gVEJhc2ljVHlwZTo6RWJ0Qm9vbCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFzdGF0ZS5jb25maWcucHJvbW90ZUJvb2xU
b1VpbnQoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworQWNjZXNzIENvbnZlcnRCb29sVG9VaW50KENvbnZlcnRUeXBlIGNv
bnZlcnRUeXBlLCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pCit7CisgICAg
YXV0byBjb2VyY2UgPSBbXShUSW50ZXJtVHlwZWQgJnRvLCBUSW50ZXJtVHlwZWQgJmZyb20pIC0+
IFRJbnRlcm1UeXBlZCAmIHsKKyAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVh
dGVDb25zdHJ1Y3Rvcih0by5nZXRUeXBlKCksIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb219KTsK
KyAgICB9OworICAgIHN3aXRjaCAoY29udmVydFR5cGUpCisgICAgeworICAgICAgICBjYXNlIENv
bnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNz
e2NvZXJjZShtLCBvKSwgbX07CisgICAgICAgIGNhc2UgQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9P
cmlnaW5hbDoKKyAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7bywgY29lcmNlKG8sIG0pfTsKKyAg
ICB9Cit9CisKK2Jvb2wgU2F0dXJhdGVTY2FsYXJPclZlY3RvckNvbW1vbihDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
aWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcnJheSkKK3sKKyAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpICE9IGFycmF5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoISgodHlwZS5pc1Jh
bmswKCkgJiYgSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUpKSB8fCB0eXBlLmlzVmVjdG9yKCkpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBhdXRvIHNhdHVy
YXRvciA9CisgICAgICAgIGFycmF5ID8gc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0
b3JBcnJheXMgOiBzdGF0ZS5jb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvcjsKKyAgICBjb25z
dCBpbnQgZGltICAgICAgICA9IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICBjb25zdCBpbnQg
c2F0dXJhdGlvbiA9IHNhdHVyYXRvcihmaWVsZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gZGlt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRUeXBlICZzYXRU
eXBlICAgICAgICA9IFNldFZlY3RvckRpbSh0eXBlLCBzYXR1cmF0aW9uKTsKKyAgICBjb25zdCBi
b29sIGJvb2xUb1VpbnQgPSBUZXN0Qm9vbFRvVWludChzdGF0ZSwgZmllbGQpOworICAgIGlmIChi
b29sVG9VaW50KQorICAgIHsKKyAgICAgICAgc2F0VHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlw
ZTo6RWJ0VUludCk7CisgICAgfQorICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNh
dFR5cGUsIHN0b3JhZ2UsIHBhY2tpbmcpOworCisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBkaW07
ICsrZCkKKyAgICB7CisgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52
ICZlbnYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAg
ICAgYXV0byAmb18gPSBkaW0gPiAxID8gQWNjZXNzSW5kZXgobywgZCkgOiBvOworICAgICAgICAg
ICAgYXV0byAmbV8gPSBBY2Nlc3NJbmRleChtLCBkKTsKKyAgICAgICAgICAgIGlmIChib29sVG9V
aW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBDb252ZXJ0Qm9vbFRv
VWludChlbnYudHlwZSwgb18sIG1fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQWNjZXNze29fLCBtX307Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JBcnJheXMoQ29udmVydFN0cnVjdFN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZp
ZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9j
a1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNj
YWxhck9yVmVjdG9yQ29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgdHJ1ZSk7
Cit9CisKK2Jvb2wgU2F0dXJhdGVTY2FsYXJPclZlY3RvcihDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCit7CisgICAgcmV0dXJuIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24o
c3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nLCBmYWxzZSk7Cit9CisKK2Jvb2wgUHJvbW90
ZUJvb2xUb1VpbnQoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nKQoreworICAgIGlmICghVGVzdEJvb2xUb1Vp
bnQoc3RhdGUsIGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBhdXRvICZwcm9tb3RlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLnR5cGUoKSk7CisgICAg
cHJvbW90ZWRUeXBlLnNldEJhc2ljVHlwZShUQmFzaWNUeXBlOjpFYnRVSW50KTsKKyAgICBzdGF0
ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBwcm9tb3RlZFR5cGUsIHN0b3JhZ2UsIHBhY2tpbmcp
OworCisgICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJmVudiwgT3JpZ2lu
YWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgIHJldHVybiBDb252ZXJ0
Qm9vbFRvVWludChlbnYudHlwZSwgbywgbSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNb2RpZnlDb21tb24oQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25z
dCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nKQoreworICAgIE1vZGlmeUZ1bmMgZnVuY3NbXSA9
IHsKKyAgICAgICAgSW5saW5lU3RydWN0LCAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgIFJl
Y3Vyc2VTdHJ1Y3QsICAgICAgICAgICAgICAgICAvLworICAgICAgICBTcGxpdE1hdHJpeENvbHVt
bnMsICAgICAgICAgICAgLy8KKyAgICAgICAgU2F0dXJhdGVNYXRyaXhSb3dzLCAgICAgICAgICAg
IC8vCisgICAgICAgIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JBcnJheXMsICAvLworICAgICAgICBT
YXR1cmF0ZVNjYWxhck9yVmVjdG9yLCAgICAgICAgLy8KKyAgICAgICAgUHJvbW90ZUJvb2xUb1Vp
bnQsICAgICAgICAgICAgIC8vCisgICAgfTsKKworICAgIGZvciAoTW9kaWZ5RnVuYyBmdW5jIDog
ZnVuY3MpCisgICAgeworICAgICAgICBpZiAoZnVuYyhzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBh
Y2tpbmcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBJZGVudGl0eU1vZGlmeShzdGF0ZSwgZmllbGQsIHN0b3JhZ2Us
IHBhY2tpbmcpOworfQorCitib29sIElubGluZUFycmF5KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3Rh
dGUsCisgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAg
Y29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFzdGF0ZS5jb25maWcuaW5saW5l
QXJyYXkoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGNvbnN0IHVuc2lnbmVkIHZvbHVtZSA9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAg
IGNvbnN0IGJvb2wgaXNNdWx0aURpbSA9IHR5cGUuaXNBcnJheU9mQXJyYXlzKCk7CisKKyAgICBh
dXRvICZpbm5lcm1vc3RUeXBlID0gSW5uZXJtb3N0VHlwZSh0eXBlKTsKKyAgICBjb25zdCBURmll
bGQgaW5uZXJtb3N0RmllbGQoJmlubmVybW9zdFR5cGUsIGZpZWxkLm5hbWUoKSwgZmllbGQubGlu
ZSgpLCBmaWVsZC5zeW1ib2xUeXBlKCkpOworCisgICAgaWYgKGlzTXVsdGlEaW0pCisgICAgewor
ICAgICAgICBzdGF0ZS5wdXNoUGF0aChGbGF0dGVuQXJyYXkoKSk7CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQorICAgIHsKKyAgICAgICAgc3RhdGUu
cHVzaFBhdGgoaSk7CisgICAgICAgIE1vZGlmeUNvbW1vbihzdGF0ZSwgaW5uZXJtb3N0RmllbGQs
IHN0b3JhZ2UsIHBhY2tpbmcpOworICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisgICAgfQorCisg
ICAgaWYgKGlzTXVsdGlEaW0pCisgICAgeworICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRT
dHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZp
ZWxkLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFj
a2luZykKK3sKKyAgICBzdGF0ZS5wdXNoUGF0aChmaWVsZCk7CisKKyAgICBib29sIG1vZGlmaWVk
OworICAgIGlmIChJbmxpbmVBcnJheShzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQor
ICAgIHsKKyAgICAgICAgbW9kaWZpZWQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtb2RpZmllZCA9IE1vZGlmeUNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBh
Y2tpbmcpOworICAgIH0KKworICAgIHN0YXRlLnBvcFBhdGgoKTsKKworICAgIHJldHVybiBtb2Rp
ZmllZDsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCitib29sIHNoOjpUcnlDcmVhdGVNb2RpZmllZFN0cnVjdChTeW1ib2xFbnYgJnN5
bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmeVN0cnVjdENvbmZp
ZyAmY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAmb3JpZ2luYWxTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzICZvdXRNYWNoaW5lcmllcykKK3sKKyAg
ICBDb252ZXJ0U3RydWN0U3RhdGUgc3RhdGUoc3ltYm9sRW52LCBpZEdlbiwgY29uZmlnLCBvdXRN
YWNoaW5lcmllcyk7CisgICAgc2l6ZV90IGlkZW50aWNhbEZpZWxkQ291bnQgPSAwOworCisgICAg
Y29uc3QgVEZpZWxkTGlzdCAmb3JpZ2luYWxGaWVsZHMgPSBvcmlnaW5hbFN0cnVjdC5maWVsZHMo
KTsKKyAgICBmb3IgKFRGaWVsZCAqb3JpZ2luYWxGaWVsZCA6IG9yaWdpbmFsRmllbGRzKQorICAg
IHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm9yaWdpbmFsVHlwZSAgICAgICAgICA9ICpvcmlnaW5h
bEZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFn
ZSAgPSBPdmVybGF5KGNvbmZpZy5pbml0aWFsQmxvY2tTdG9yYWdlLCBvcmlnaW5hbFR5cGUpOwor
ICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nID0gT3ZlcmxheShjb25m
aWcuaW5pdGlhbE1hdHJpeFBhY2tpbmcsIG9yaWdpbmFsVHlwZSk7CisgICAgICAgIGlmICghTW9k
aWZ5UmVjdXJzaXZlKHN0YXRlLCAqb3JpZ2luYWxGaWVsZCwgc3RvcmFnZSwgcGFja2luZykpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICsraWRlbnRpY2FsRmllbGRDb3VudDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRlLmZpbmFsaXplKCk7CisKKyAgICBpZiAoaWRlbnRpY2FsRmllbGRD
b3VudCA9PSBvcmlnaW5hbEZpZWxkcy5zaXplKCkgJiYgIXN0YXRlLmhhc1BhY2tpbmcoKSAmJiAh
c3RhdGUuaGFzUGFkZGluZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN0YXRlLnB1Ymxpc2gob3JpZ2luYWxTdHJ1Y3QsIG1vZGlmaWVkU3RydWN0TmFtZSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlT
dHJ1Y3QuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjhjZmM1
NTA0NjgyNDM4ZDJhYjdiMTIzMGE5NDljNjk4ZmRhZTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCkBAIC0wLDAgKzEsMTM1IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01PRElGWVNU
UlVDVF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9NT0RJRllTVFJVQ1RfSF8KKworI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRl
cmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVBy
ZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2VudW0gY2xhc3MgQ29udmVy
dFR5cGUKK3sKKyAgICBPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgTW9kaWZpZWRUb09yaWdpbmFs
LAorfTsKKworLy8gQ29uZmlndXJlcyBob3cgc3RydWN0IG1vZGlmaWNhdGlvbiBpcyBwZXJmb3Jt
ZWQuCitjbGFzcyBNb2RpZnlTdHJ1Y3RDb25maWcKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBQ
cmVkaWNhdGUKKyAgICB7CisgICAgICAgIHVzaW5nIEZ1bmMgPSBib29sICgqKShjb25zdCBURmll
bGQgJik7CisgICAgICAgIHN0YXRpYyBib29sIEZhbHNlKGNvbnN0IFRGaWVsZCAmKSB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBUcnVlKGNvbnN0IFRGaWVsZCAmKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgfTsKKworICAgIHN0cnVjdCBTYXR1cmF0ZVZlY3RvcgorICAgIHsK
KyAgICAgICAgLy8gVmFsaWQgcmV0dXJuIHZhbHVlcyBhcmUgWzAsIDEsIDIsIDMsIDRdLgorICAg
ICAgICAvLyBJZiBvcmlnaW5hbCBkaW0gPj0gcmV0dXJuIHZhbHVlLCB0aGUgZmllbGQgcmVtYWlu
cyB1bnRvdWNoZWQuCisgICAgICAgIHVzaW5nIEZ1bmMgPSBpbnQgKCopKGNvbnN0IFRGaWVsZCAm
KTsKKyAgICAgICAgc3RhdGljIGludCBEb250U2F0dXJhdGUoY29uc3QgVEZpZWxkICYpIHsgcmV0
dXJuIDA7IH0KKyAgICAgICAgc3RhdGljIGludCBGdWxseVNhdHVyYXRlKGNvbnN0IFRGaWVsZCAm
KSB7IHJldHVybiA0OyB9CisgICAgfTsKKworICBwdWJsaWM6CisgICAgTW9kaWZ5U3RydWN0Q29u
ZmlnKENvbnZlcnRUeXBlIGNvbnZlcnRUeXBlLCBib29sIGFsbG93UGFja2luZywgYm9vbCBhbGxv
d1BhZGRpbmcpCisgICAgICAgIDogY29udmVydFR5cGUoY29udmVydFR5cGUpLCBhbGxvd1BhY2tp
bmcoYWxsb3dQYWNraW5nKSwgYWxsb3dQYWRkaW5nKGFsbG93UGFkZGluZykKKyAgICB7fQorCisg
ICAgLy8gTWF0cml4IGZpZWxkIGlzIHNwbGl0IGludG8gbXVsdGlwbGUgZmllbGRzIG9mIHJvdyB2
ZWN0b3JzLgorICAgIFByZWRpY2F0ZTo6RnVuYyBzcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkaWNh
dGU6OkZhbHNlOworCisgICAgLy8gQXJyYXkgZmllbGRzIGFyZSBzcGxpdCBpbnRvIG11bHRpcGxl
IGZpZWxkcyBvZiBlbGVtZW50IHR5cGUuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZUFycmF5
ID0gUHJlZGljYXRlOjpGYWxzZTsKKworICAgIC8vIFN0cnVjdCBmaWVsZHMgaGF2ZSB0aGVpciBz
dWJmaWVsZHMgaW5saW5lZCBkaXJlY3RseS4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgaW5saW5lU3Ry
dWN0ID0gUHJlZGljYXRlOjpGYWxzZTsKKworICAgIC8vIFN0cnVjdCBmaWVsZHMgYXJlIG1vZGlm
aWVkLgorICAgIFByZWRpY2F0ZTo6RnVuYyByZWN1cnNlU3RydWN0ID0gUHJlZGljYXRlOjpGYWxz
ZTsKKworICAgIC8vIFZlY3RvciBhbmQgc2NhbGFyIGJvb2wgZmllbGRzIGFyZSBwcm9tb3RlZCB0
byB1aW50IGZpZWxkcy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgcHJvbW90ZUJvb2xUb1VpbnQgPSBQ
cmVkaWNhdGU6OkZhbHNlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUgd2hlcmUg
c2NhbGFyIG9yIHZlY3RvciBmaWVsZHMgYXJlIHNhdHVyYXRlZCB2ZWN0b3JzLgorICAgIC8vIGUu
Zy4gYGZsb2F0IC0+IGZsb2F0NGAuCisgICAgLy8gZS5nLiBgZmxvYXQyIC0+IGZsb2F0NGAuCisg
ICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFNhdHVyYXRl
VmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3
aGVyZSBzY2FsYXIgb3IgdmVjdG9yIGFycmF5IGZpZWxkcyBhcmUgc2F0dXJhdGVkLgorICAgIC8v
IGUuZy4gYGZsb2F0WzEwXSAtPiBmbG9hdDRbMTBdYAorICAgIC8vIGUuZy4gYGZsb2F0MlsxMF0g
LT4gZmxvYXQ0WzEwXWAKKyAgICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1cmF0ZVNjYWxhck9y
VmVjdG9yQXJyYXlzID0gU2F0dXJhdGVWZWN0b3I6OkRvbnRTYXR1cmF0ZTsKKworICAgIC8vIENy
ZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIG1hdHJpeCBmaWVsZHMgYXJlIHJvdy1zYXR1cmF0
ZWQuCisgICAgLy8gZS5nLiBgZmxvYXQyeDIgLT4gZmxvYXQyeDRgLgorICAgIFNhdHVyYXRlVmVj
dG9yOjpGdW5jIHNhdHVyYXRlTWF0cml4Um93cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJh
dGU7CisKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGluaXRpYWxCbG9ja1N0b3JhZ2UgICA9IGtE
ZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlOworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIGluaXRp
YWxNYXRyaXhQYWNraW5nID0ga0RlZmF1bHRMYXlvdXRNYXRyaXhQYWNraW5nOworICAgIENvbnZl
cnRUeXBlIGNvbnZlcnRUeXBlOworICAgIGJvb2wgYWxsb3dQYWNraW5nOworICAgIGJvb2wgYWxs
b3dQYWRkaW5nOworICAgIEFkZHJlc3NTcGFjZSBleHRlcm5hbEFkZHJlc3NTcGFjZTsKK307CisK
K3N0cnVjdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeQoreworICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
Km1vZGlmaWVkU3RydWN0ICAgICAgICAgICAgICAgICAgPSBudWxscHRyOworICAgIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQgPSBudWxscHRyOworICAg
IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxs
cHRyOworCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqJmdldENvbnZlcnRlcihDb252
ZXJ0VHlwZSBjb252ZXJ0VHlwZSkKKyAgICB7CisgICAgICAgIGlmIChjb252ZXJ0VHlwZSA9PSBD
b252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jTW9kaWZpZWRUb09yaWdpbmFsOworICAg
ICAgICB9CisgICAgfQorfTsKKworLy8gSW5kZXhlZCBieSB0b3BvbG9naWNhbCBvcmRlci4KK2Ns
YXNzIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMKK3sKKyAgcHVibGljOgorICAgIHNpemVfdCBz
aXplKCkgY29uc3Q7CisgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJmF0KHNpemVf
dCBpbmRleCkgY29uc3Q7CisgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKmZpbmQo
Y29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3Q7CisgICAgdm9pZCBpbnNlcnQoY29uc3QgVFN0cnVj
dHVyZSAmcywgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSk7CisKKyAg
cHJpdmF0ZToKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyeT4gb3JpZ2luYWxUb01hY2hpbmVyeTsKKyAgICBzdGQ6OnZlY3Rv
cjxjb25zdCBUU3RydWN0dXJlICo+IG9yZGVyaW5nOworfTsKKworLy8gUmV0dXJucyB0cnVlIGFu
ZCBgb3V0TWFjaGluZXJ5YCBwb3B1bGF0ZWQgaWYgbW9kaWZpY2F0aW9ucyB3ZXJlIHBlcmZvcm1l
ZC4KKy8vIFJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgorYm9vbCBUcnlDcmVhdGVNb2RpZmllZFN0
cnVjdChTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlT
dHJ1Y3RDb25maWcgJmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cnVjdHVyZSAmb3JpZ2luYWxTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2M1ZDE4NWU2ZmFk
Mzc1NjllZmNiZDg1NWYyYWU0MDFlNjQzYzhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L05hbWUuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBJbW11dGFi
bGVTdHJpbmcgR2V0TmFtZShUIGNvbnN0ICZvYmplY3QpCit7CisgICAgaWYgKG9iamVjdC5zeW1i
b2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgeworICAgICAgICByZXR1cm4ga0Vt
cHR5SW1tdXRhYmxlU3RyaW5nOworICAgIH0KKyAgICByZXR1cm4gb2JqZWN0Lm5hbWUoKTsKK30K
KworTmFtZTo6TmFtZShjb25zdCBURmllbGQgJmZpZWxkKSA6IE5hbWUoR2V0TmFtZShmaWVsZCks
IGZpZWxkLnN5bWJvbFR5cGUoKSkge30KKworTmFtZTo6TmFtZShjb25zdCBUU3ltYm9sICZzeW1i
b2wpIDogTmFtZShHZXROYW1lKHN5bWJvbCksIHN5bWJvbC5zeW1ib2xUeXBlKCkpIHt9CisKK2Jv
b2wgTmFtZTo6b3BlcmF0b3I9PShjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gbVJhd05hbWUgPT0gb3RoZXIubVJhd05hbWUgJiYgbVN5bWJvbFR5cGUgPT0gb3RoZXIubVN5
bWJvbFR5cGU7Cit9CisKK2Jvb2wgTmFtZTo6b3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK2Jvb2wgTmFtZTo6
b3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChtUmF3TmFtZSA8
IG90aGVyLm1SYXdOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmIChvdGhlci5tUmF3TmFtZSA8IG1SYXdOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gbVN5bWJvbFR5cGUgPCBvdGhlci5tU3ltYm9sVHlwZTsK
K30KKworYm9vbCBOYW1lOjplbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TeW1ib2xUeXBl
ID09IFN5bWJvbFR5cGU6OkVtcHR5OworfQorCitib29sIE5hbWU6OmJlZ2luc1dpdGgoY29uc3Qg
TmFtZSAmcHJlZml4KSBjb25zdAoreworICAgIGlmIChtU3ltYm9sVHlwZSAhPSBwcmVmaXgubVN5
bWJvbFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biBtUmF3TmFtZS5iZWdpbnNXaXRoKHByZWZpeC5tUmF3TmFtZSk7Cit9CisKK3ZvaWQgTmFtZTo6
ZW1pdChUSW5mb1NpbmtCYXNlICZvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtU3ltYm9sVHlw
ZSkKKyAgICB7CisgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKyAgICAgICAgY2Fz
ZSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZDoKKyAgICAgICAgICAgIEFTU0VSVCghbVJhd05hbWUu
ZW1wdHkoKSk7CisgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CisgICAgICAgICAg
ICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOworICAgICAgICAgICAgaWYgKG1SYXdOYW1lLmJl
Z2luc1dpdGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1SYXdOYW1lWzBdICE9ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwga0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgJ18nIDw8IG1SYXdOYW1lOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCBrQW5nbGVJbnRlcm5hbFByZWZpeCA8PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6RW1wdHk6CisgICAg
ICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworLy8gTk9URTogVGhpcyBt
YXRjaGVzIG1vcmUgdGhpbmdzIHRoYW4gRmluZFN5bWJvbE5vZGUuCitjbGFzcyBFeHByZXNzaW9u
Q29udGFpbnNOYW1lVmlzaXRvciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgICAgTmFt
ZSBtTmFtZTsKKyAgICBib29sIG1Gb3VuZE5hbWUgPSBmYWxzZTsKKworICBwdWJsaWM6CisgICAg
RXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZpc2l0b3IoY29uc3QgTmFtZSAmbmFtZSkKKyAgICAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1OYW1lKG5hbWUpCisgICAg
e30KKworICAgIGJvb2wgZm91bmROYW1lKCkgY29uc3QgeyByZXR1cm4gbUZvdW5kTmFtZTsgfQor
CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKE5hbWUobm9kZS0+dmFyaWFibGUoKSkgPT0gbU5hbWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlIHsg
cmV0dXJuICFtRm91bmROYW1lOyB9CisKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5ICpub2RlKSBvdmVycmlkZSB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQor
CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92
ZXJyaWRlICB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdFRlcm5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZSB7IHJldHVybiAhbUZv
dW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5pc0Nv
bnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ICAgICAgICA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
KnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJl
ICYmIE5hbWUoKnN0cnVjdHVyZSkgPT0gbU5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbUZvdW5kTmFtZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBu
b2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICAgICAgaWYgKGZ1bmMgJiYgTmFtZSgqZnVuYykg
PT0gbU5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICFtRm91bmROYW1l
OworICAgIH0KKworICAgIGJvb2wgdmlzaXRJZkVsc2UoVmlzaXQgdmlzaXQsIFRJbnRlcm1JZkVs
c2UgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNpdCwgVElu
dGVybVN3aXRjaCAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHZpc2l0Q2FzZShWaXNpdCwgVElu
dGVybUNhc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Qcm90b3R5
cGUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICopIG92ZXJyaWRlIHsgTE9HSUNfRVJST1IoKTsg
fQorCisgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwgVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCbG9jayhWaXNp
dCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1Io
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZp
c2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1Io
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2go
VmlzaXQsIFRJbnRlcm1CcmFuY2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VS
Uk9SKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0UHJl
cHJvY2Vzc29yRGlyZWN0aXZlKFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgKikgb3ZlcnJp
ZGUgeyBMT0dJQ19FUlJPUigpOyB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K2Jvb2wgc2g6OkV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwgVEludGVy
bVR5cGVkICZub2RlKQoreworICAgIEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yIHZpc2l0
b3IobmFtZSk7CisgICAgbm9kZS50cmF2ZXJzZSgmdmlzaXRvcik7CisgICAgcmV0dXJuIHZpc2l0
b3IuZm91bmROYW1lKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L05hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmVhZWE4YjQ3YmFmOTQyMWVkNTQwNzMwMTFm
OWNiNWI1MDg1MDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaApAQCAt
MCwwICsxLDY4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfTkFNRV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbW11dGFibGVTdHJpbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1R5cGVzLmgiCisKK25hbWVzcGFjZSBzaAoreworCitjb25zdGV4cHIgY2hh
ciBrQW5nbGVJbnRlcm5hbFByZWZpeFtdID0gIkFOR0xFIjsKKworLy8gUmVwcmVzZW50cyB0aGUg
bmFtZSBvZiBhIHN5bWJvbC4KK2NsYXNzIE5hbWUKK3sKKyAgcHVibGljOgorICAgIGNvbnN0ZXhw
ciBOYW1lKGNvbnN0IE5hbWUgJikgPSBkZWZhdWx0OworCisgICAgY29uc3RleHByIE5hbWUoKSA6
IE5hbWUoa0VtcHR5SW1tdXRhYmxlU3RyaW5nLCBTeW1ib2xUeXBlOjpFbXB0eSkge30KKworICAg
IGV4cGxpY2l0IGNvbnN0ZXhwciBOYW1lKEltbXV0YWJsZVN0cmluZyByYXdOYW1lLCBTeW1ib2xU
eXBlIHN5bWJvbFR5cGUpCisgICAgICAgIDogbVJhd05hbWUocmF3TmFtZSksIG1TeW1ib2xUeXBl
KHN5bWJvbFR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQocmF3TmFtZS5lbXB0eSgpID09IChz
eW1ib2xUeXBlID09IFN5bWJvbFR5cGU6OkVtcHR5KSk7CisgICAgfQorCisgICAgZXhwbGljaXQg
Y29uc3RleHByIE5hbWUoY29uc3QgY2hhciAqcmF3TmFtZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBl
ID0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCkKKyAgICAgICAgOiBOYW1lKEltbXV0YWJsZVN0
cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQorCisgICAgZXhwbGljaXQgTmFtZShj
b25zdCBzdGQ6OnN0cmluZyAmcmF3TmFtZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorICAgICAg
ICA6IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBzeW1ib2xUeXBlKQorICAgIHt9CisK
KyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRGaWVsZCAmZmllbGQpOworICAgIGV4cGxpY2l0IE5h
bWUoY29uc3QgVFN5bWJvbCAmc3ltYm9sKTsKKworICAgIE5hbWUgJm9wZXJhdG9yPShjb25zdCBO
YW1lICYpID0gZGVmYXVsdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgY29uc3Rl
eHByIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmcmF3TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1SYXdO
YW1lOyB9CisgICAgY29uc3RleHByIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1TeW1ib2xUeXBlOyB9CisKKyAgICBib29sIGVtcHR5KCkgY29uc3Q7CisgICAgYm9vbCBi
ZWdpbnNXaXRoKGNvbnN0IE5hbWUgJnByZWZpeCkgY29uc3Q7CisKKyAgICB2b2lkIGVtaXQoVElu
Zm9TaW5rQmFzZSAmb3V0KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIEltbXV0YWJsZVN0cmlu
ZyBtUmF3TmFtZTsKKyAgICBTeW1ib2xUeXBlIG1TeW1ib2xUeXBlOworfTsKKworQU5HTEVfTk9f
RElTQ0FSRCBib29sIEV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwgVElu
dGVybVR5cGVkICZub2RlKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTkFNRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTRjMzc4YTFjOTUwNTlmZDJiNjk2OGVhNjA0NDc4YmI5ZjQ4Yzg3ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAKQEAgLTAsMCArMSw0NzYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9QaXBlbGluZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvQnVpbHRJbi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgVkFSSUFOVF9OQU1FKHZhcmlhbnQsIGJhc2UpICh2
YXJpYW50ID09IFZhcmlhbnQ6Ok1vZGlmaWVkID8gYmFzZSAiTW9kIiA6IGJhc2UpCisKK2Jvb2wg
UGlwZWxpbmU6OnVzZXMoY29uc3QgVFZhcmlhYmxlICZ2YXIpIGNvbnN0Cit7CisgICAgaWYgKHZh
ci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdsb2JhbEluc3RhbmNlVmFyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICZ2YXIgPT0gZ2xvYmFsSW5zdGFuY2VWYXI7CisgICAgfQorCisgICAgY29u
c3QgVFR5cGUgJm5vZGVUeXBlICAgICAgPSB2YXIuZ2V0VHlwZSgpOworICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyID0gbm9kZVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAg
c3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFWZXJ0ZXhJbjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICAgICAg
c3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFWZXJ0ZXhPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZsYXRP
dXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludFNpemU6CisgICAg
ICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFTbW9vdGhPdXQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3RpdmVPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFWYXJ5aW5nT3V0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgor
ICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnbWVudEluOgorICAgICAgICAgICAgICAgIGNh
c2UgVFF1YWxpZmllcjo6RXZxRmxhdEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxU21vb3RoSW46CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFDZW50
cm9pZEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxTm9QZXJzcGVjdGl2
ZUluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ0luOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJh
Z21lbnRPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29sb3I6
CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGF0YToKKyAgICAgICAg
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEZXB0aDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6
VXNlclVuaWZvcm1zOgorICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtOgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxp
ZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cUdsb2JhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAg
ICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29vcmQ6
CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAgICAg
ICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJvbnRGYWNpbmc6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5
cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8gZ2xvYmFs
SW5zdGFuY2VWYXIgc2hvdWxkIGJlIG5vbi1udWxsIGFuZCB0aHVzIG5ldmVyIHJlYWNoIGhlcmUu
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJl
OgorICAgICAgICAgICAgcmV0dXJuIElzU2FtcGxlcihub2RlVHlwZS5nZXRCYXNpY1R5cGUoKSk7
CisKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIE5h
bWUodmFyKSA9PSBOYW1lKCpCdWlsdEluVmFyaWFibGU6OmdsX0luc3RhbmNlSUQoKSk7CisgICAg
fQorfQorCitOYW1lIFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZShWYXJpYW50IHZhcmlhbnQp
IGNvbnN0Cit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAg
eworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklB
TlRfTkFNRSh2YXJpYW50LCAiVmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUo
dmFyaWFudCwgIlZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VHlwZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFu
dCwgIkZyYWdtZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
OkZyYWdtZW50T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAi
RnJhZ21lbnRPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVz
ZXJVbmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIlVz
ZXJVbmlmb3JtcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5n
bGVVbmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkFu
Z2xlVW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5v
bkNvbnN0YW50R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFu
dCwgIk5vbkNvbnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFO
VF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAg
ICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1
cmU6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJUZXh0dXJlRW52
cyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoK
KyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkluc3RhbmNlSWQiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKwor
TmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29u
c3QKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7Cisg
ICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJ2ZXJ0ZXhJbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJp
YW50LCAidmVydGV4T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpGcmFnbWVudEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAi
ZnJhZ21lbnRJbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RnJh
Z21lbnRPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJmcmFn
bWVudE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVu
aWZvcm1zOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAidXNlclVu
aWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpBbmdsZVVu
aWZvcm1zOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiYW5nbGVV
bmlmb3JtcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29u
c3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAi
bm9uQ29uc3RHbG9iYWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05B
TUUodmFyaWFudCwgImludm9jYXRpb25WZXJ0ZXhHbG9iYWxzIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAg
ICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiaW52b2NhdGlvbkZyYWdtZW50R2xv
YmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToK
KyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInRleHR1cmVFbnZzIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAg
ICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiaW5zdGFuY2VJZCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBOYW1lKG5hbWUpOworfQorCitzdGF0
aWMgYm9vbCBBbGxvd1BhY2tpbmcoUGlwZWxpbmU6OlR5cGUgdHlwZSkKK3sKKyAgICB1c2luZyBU
eXBlID0gUGlwZWxpbmU6OlR5cGU7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0
OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6RnJh
Z21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlv
blZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xv
YmFsczoKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorICAgICAgICBjYXNlIFR5cGU6Oklu
c3RhbmNlSWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMg
Ym9vbCBBbGxvd1BhZGRpbmcoUGlwZWxpbmU6OlR5cGUgdHlwZSkKK3sKKyAgICB1c2luZyBUeXBl
ID0gUGlwZWxpbmU6OlR5cGU7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBj
YXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJ
bjoKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKyAgICAgICAgY2FzZSBUeXBlOjpB
bmdsZVVuaWZvcm1zOgorICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBU
eXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorICAgICAgICBjYXNlIFR5cGU6Okluc3Rh
bmNlSWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorZW51bSBDb21wYXJl
Cit7CisgICAgTFQsCisgICAgTFRFLAorICAgIEVRLAorICAgIEdURSwKKyAgICBHVCwKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGJvb2wgQ29tcGFyZUJ5KENvbXBhcmUgb3As
IGNvbnN0IFQgJngsIGNvbnN0IFQgJnkpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICAgIGNhc2UgTFQ6CisgICAgICAgICAgICByZXR1cm4geCA8IHk7CisgICAgICAgIGNhc2UgTFRF
OgorICAgICAgICAgICAgcmV0dXJuIHggPD0geTsKKyAgICAgICAgY2FzZSBFUToKKyAgICAgICAg
ICAgIHJldHVybiB4ID09IHk7CisgICAgICAgIGNhc2UgR1RFOgorICAgICAgICAgICAgcmV0dXJu
IHggPj0geTsKKyAgICAgICAgY2FzZSBHVDoKKyAgICAgICAgICAgIHJldHVybiB4ID4geTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlIDxUQmFzaWNUeXBlIEJULCBDb21wYXJlIENtcCwgaW50IE1hdGNo
RGltLCBpbnQgTmV3RGltPgorc3RhdGljIGludCBTYXR1cmF0ZVZlY3Rvck9mKGNvbnN0IFRGaWVs
ZCAmZmllbGQpCit7CisgICAgc3RhdGljX2Fzc2VydChOZXdEaW0gPj0gTWF0Y2hEaW0sICIiKTsK
KworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBBU1NFUlQodHlw
ZS5pc1NjYWxhcigpIHx8IHR5cGUuaXNWZWN0b3IoKSk7CisKKyAgICBjb25zdCBib29sIGNvbmQg
PSB0eXBlLmdldEJhc2ljVHlwZSgpID09IEJUICYmICF0eXBlLmlzQXJyYXkoKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgIENvbXBhcmVCeShDbXAsIHR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgTWF0
Y2hEaW0pOworCisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAgICByZXR1cm4gTmV3RGltOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTW9kaWZ5U3RydWN0Q29uZmlnIFBpcGVsaW5lOjpl
eHRlcm5hbFN0cnVjdE1vZGlmeUNvbmZpZygpIGNvbnN0Cit7CisgICAgdXNpbmcgUHJlZCAgID0g
TW9kaWZ5U3RydWN0Q29uZmlnOjpQcmVkaWNhdGU7CisgICAgdXNpbmcgU2F0VmVjID0gTW9kaWZ5
U3RydWN0Q29uZmlnOjpTYXR1cmF0ZVZlY3RvcjsKKworICAgIE1vZGlmeVN0cnVjdENvbmZpZyBj
b25maWcoCisgICAgICAgIGlzUGlwZWxpbmVPdXQoKSA/IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRv
TW9kaWZpZWQgOiBDb252ZXJ0VHlwZTo6TW9kaWZpZWRUb09yaWdpbmFsLAorICAgICAgICBBbGxv
d1BhY2tpbmcodHlwZSksIEFsbG93UGFkZGluZyh0eXBlKSk7CisKKyAgICBjb25maWcuZXh0ZXJu
YWxBZGRyZXNzU3BhY2UgPSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpOworCisgICAgc3dpdGNoICh0
eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIGNv
bmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmln
LnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5s
aW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICAgICAgY29uZmlnLmlubGluZUFycmF5
ICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1
bW5zID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAg
PSBQcmVkOjpUcnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUeXBlOjpG
cmFnbWVudEluOgorICAgICAgICAgICAgY29uZmlnLmlubGluZUFycmF5ICAgICAgICA9IFByZWQ6
OlRydWU7CisgICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZDo6VHJ1
ZTsKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKyAg
ICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAg
ICAgICAgICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgICAgID0gUHJlZDo6VHJ1ZTsKKyAg
ICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAg
ICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9yID0gW10oY29uc3QgVEZpZWxk
ICZmaWVsZCkgeworICAgICAgICAgICAgICAgIGlmIChpbnQgcyA9IFNhdHVyYXRlVmVjdG9yT2Y8
VEJhc2ljVHlwZTo6RWJ0SW50LCBMVCwgNCwgND4oZmllbGQpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChpbnQgcyA9IFNhdHVyYXRlVmVjdG9yT2Y8VEJhc2ljVHlwZTo6RWJ0VUlu
dCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50
IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidEZsb2F0LCBMVCwgNCwgND4oZmll
bGQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1z
OgorICAgICAgICAgICAgY29uZmlnLnByb21vdGVCb29sVG9VaW50ICAgICAgICAgICAgPSBQcmVk
OjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlTWF0cml4Um93cyAgICAgICAgICAg
PSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVTY2Fs
YXJPclZlY3RvckFycmF5cyA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKyAgICAgICAgICAgIGNv
bmZpZy5yZWN1cnNlU3RydWN0ICAgICAgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKyAgICAgICAg
ICAgIGNvbmZpZy5pbml0aWFsQmxvY2tTdG9yYWdlID0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
U3RkNDMwOyAgLy8gWFhYOiBDb3JyZWN0PworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNvbmZpZzsKK30KKworYm9vbCBQaXBlbGluZTo6YWx3YXlzUmVx
dWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdAoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgY2FzZSBUeXBlOjpG
cmFnbWVudE91dDoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAg
ICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlw
ZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJl
OgorICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmlzUGlwZWxpbmVPdXQoKSBjb25zdAorewor
ICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5p
Zm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKyAgICAgICAgY2FzZSBU
eXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZl
cnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
czoKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorICAgICAgICBjYXNlIFR5cGU6Okluc3Rh
bmNlSWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FzZSBUeXBlOjpW
ZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK0FkZHJlc3NTcGFjZSBQaXBlbGluZTo6ZXh0ZXJuYWxB
ZGRyZXNzU3BhY2UoKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAg
IGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6
SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZy
YWdtZW50R2xvYmFsczoKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorICAgICAgICBjYXNl
IFR5cGU6Okluc3RhbmNlSWQ6CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAg
ICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFj
ZTo6VGhyZWFkOworCisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorICAgICAgICBj
YXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gQWRkcmVzc1NwYWNl
OjpDb25zdGFudDsKKyAgICB9Cit9CisKK2Jvb2wgUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzKGNv
bnN0IFRTdHJ1Y3R1cmUgJnMsIGJvb2wgaW50ZXJuYWwsIGJvb2wgZXh0ZXJuYWwpIGNvbnN0Cit7
CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcHNbXSA9IHsKKyAgICAgICAgZnJhZ21l
bnRJbiwKKyAgICAgICAgZnJhZ21lbnRPdXQsCisgICAgICAgIHZlcnRleEluLAorICAgICAgICB2
ZXJ0ZXhPdXQsCisgICAgICAgIHVzZXJVbmlmb3JtcywKKyAgICAgICAgYW5nbGVVbmlmb3JtcywK
KyAgICAgICAgbm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBpbnZvY2F0aW9uVmVydGV4R2xv
YmFscywKKyAgICAgICAgaW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgdGV4dHVy
ZSwKKyAgICAgICAgaW5zdGFuY2VJZCwKKyAgICB9OworICAgIGZvciAoY29uc3QgYXV0byAmcCA6
IHBzKQorICAgIHsKKyAgICAgICAgaWYgKGludGVybmFsICYmIHAuaW50ZXJuYWwgPT0gJnMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChleHRlcm5hbCAmJiBwLmV4dGVybmFsID09ICZzKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjliZjQ3NmFkZmQ2NDYwYjBkOWVmYzZhYjFkMGYzNzlkM2YxM2IxNzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaApAQCAtMCwwICsxLDEyMyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9QSVBFTElORV9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9QSVBFTElORV9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9TeW1ib2wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBEYXRhIHRoYXQgaXMgc2NvcGVkIGFzIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgZm9y
IGEgZ2l2ZW4gcGlwZWxpbmUuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBQaXBlbGlu
ZVNjb3BlZAoreworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRhbGsgZXh0ZXJu
YWxseSB0byB0aGUgcHJvZ3JhbS4KKyAgICAvLyBNYXkgY29pbmNpZGUgd2l0aCBgaW50ZXJuYWxg
LCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9tIGBpbnRlcm5hbGAuCisgICAgY29uc3QgVCAqZXh0
ZXJuYWwgPSBudWxscHRyOworCisgICAgLy8gRGF0YSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gdGFs
ayBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgcHJvZ3JhbS4KKyAgICAvLyBNYXkgY29pbmNpZGUgd2l0
aCBgZXh0ZXJuYWxgLCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9tIGBleHRlcm5hbGAuCisgICAg
Y29uc3QgVCAqaW50ZXJuYWwgPSBudWxscHRyOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0
aGUgaW5wdXQgY29pbmNpZGVzIHdpdGggZWl0aGVyIGBleHRlcm5hbGAgb3IgYGludGVybmFsYCBk
YXRhLgorICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBUICZvYmplY3QpIGNvbnN0IHsgcmV0dXJuIGV4
dGVybmFsID09ICZvYmplY3QgfHwgaW50ZXJuYWwgPT0gJm9iamVjdDsgfQorCisgICAgLy8gQm90
aCBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIHJlcHJlc2VudGF0aW9ucyBhcmUgbm9uLW51bGwu
CisgICAgYm9vbCBpc1RvdGFsbHlGdWxsKCkgY29uc3QgeyByZXR1cm4gZXh0ZXJuYWwgJiYgaW50
ZXJuYWw7IH0KKworICAgIC8vIEJvdGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNl
bnRhdGlvbnMgYXJlIG51bGwuCisgICAgYm9vbCBpc1RvdGFsbHlFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFleHRlcm5hbCAmJiAhaW50ZXJuYWw7IH0KKworICAgIC8vIEJvdGggYGV4dGVybmFsYCBh
bmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIHRoZSBzYW1lLgorICAgIGJvb2wgaXNV
bmlmb3JtKCkgY29uc3QgeyByZXR1cm4gZXh0ZXJuYWwgPT0gaW50ZXJuYWw7IH0KK307CisKKy8v
IFJlcHJlc2VudHMgYSBoaWdoLWxldmVsIHByb2dyYW0gcGlwZWxpbmUuCitjbGFzcyBQaXBlbGlu
ZQoreworICBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlCisgICAgeworICAgICAgICBWZXJ0
ZXhJbiwKKyAgICAgICAgVmVydGV4T3V0LAorICAgICAgICBGcmFnbWVudEluLAorICAgICAgICBG
cmFnbWVudE91dCwKKyAgICAgICAgVXNlclVuaWZvcm1zLAorICAgICAgICBBbmdsZVVuaWZvcm1z
LAorICAgICAgICBOb25Db25zdGFudEdsb2JhbHMsCisgICAgICAgIEludm9jYXRpb25WZXJ0ZXhH
bG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorICAgICAgICBUZXh0
dXJlLAorICAgICAgICBJbnN0YW5jZUlkLAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIFZhcmlh
bnQKKyAgICB7CisgICAgICAgIC8vIEZvciBhbGwgaW50ZXJuYWwgcGlwZWxpbmUgdXNlcy4KKyAg
ICAgICAgLy8gRm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgcGlwZWxpbmUgZG9lcyBub3Qg
cmVxdWlyZSBzcGxpdHRpbmcgb3Igc2F0dXJhdGlvbi4KKyAgICAgICAgT3JpZ2luYWwsCisKKyAg
ICAgICAgLy8gT25seSBmb3IgZXh0ZXJuYWwgcGlwZWxpbmUgdXNlcyBpZiB0aGUgcGlwZWxpbmUg
d2FzIHNwbGl0IG9yIHNhdHVyYXRlZC4KKyAgICAgICAgTW9kaWZpZWQsCisgICAgfTsKKworICBw
dWJsaWM6CisgICAgLy8gVGhlIHR5cGUgb2YgdGhlIHBpcGVsaW5lLgorICAgIFR5cGUgdHlwZTsK
KworICAgIC8vIE5vbi1udWxsIGlmIGEgZ2xvYmFsIGluc3RhbmNlIG9mIHRoZSBwaXBlbGluZSBz
dHJ1Y3QgYWxyZWFkeSBleGlzdHMuCisgICAgLy8gSWYgbm9uLW51bGwgc3RydWN0IHNwbGl0dGlu
ZyBzaG91bGQgbm90IGJlIG5lZWRlZC4KKyAgICBjb25zdCBUVmFyaWFibGUgKmdsb2JhbEluc3Rh
bmNlVmFyOworCisgIHB1YmxpYzoKKyAgICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB2YXJpYWJs
ZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS4KKyAgICBib29sIHVzZXMoY29uc3QgVFZhcmlhYmxl
ICZ2YXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgbmFtZSBmb3IgdGhlIHN0cnVjdCB0
eXBlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlzIHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0
U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25zdDsKKworICAgIC8vIFJldHVybnMg
dGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgaW5zdGFuY2UgdGhhdCBzdG9yZXMgdmFyaWFibGVzIG9m
IHRoaXMgcGlwZWxpbmUuCisgICAgTmFtZSBnZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoVmFyaWFudCB2
YXJpYW50KSBjb25zdDsKKworICAgIE1vZGlmeVN0cnVjdENvbmZpZyBleHRlcm5hbFN0cnVjdE1v
ZGlmeUNvbmZpZygpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwaXBlbGlu
ZSBhbHdheXMgcmVxdWlyZXMgYSBub24tcGFyYW1ldGVyIGxvY2FsIGluc3RhbmNlIGRlY2xhcmF0
aW9uIG9mCisgICAgLy8gdGhlIHBpcGVsaW5lIHN0cnVjdHVyZXMuCisgICAgYm9vbCBhbHdheXNS
ZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpIGNvbnN0OworCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmZiB0aGUgcGlwZWxpbmUgaXMgYW4gb3V0cHV0IHBpcGVsaW5lLiBUaGUg
ZXh0ZXJuYWwgcGlwZWxpbmUgc3RydWN0dXJlIHNob3VsZAorICAgIC8vIGJlIHJldHVybmVkIGZy
b20gYG1haW5gLgorICAgIGJvb2wgaXNQaXBlbGluZU91dCgpIGNvbnN0OworCisgICAgQWRkcmVz
c1NwYWNlIGV4dGVybmFsQWRkcmVzc1NwYWNlKCkgY29uc3Q7Cit9OworCisvLyBBIGNvbGxlY3Rp
b24gb2YgdmFyaW91cyBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorc3RydWN0IFBpcGVsaW5lU3RydWN0
cyA6IGFuZ2xlOjpOb25Db3B5YWJsZQoreworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+
IGZyYWdtZW50SW47CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gZnJhZ21lbnRPdXQ7
CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gdmVydGV4SW47CisgICAgUGlwZWxpbmVT
Y29wZWQ8VFN0cnVjdHVyZT4gdmVydGV4T3V0OworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1
cmU+IHVzZXJVbmlmb3JtczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBhbmdsZVVu
aWZvcm1zOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG5vbkNvbnN0YW50R2xvYmFs
czsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBpbnZvY2F0aW9uVmVydGV4R2xvYmFs
czsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBpbnZvY2F0aW9uRnJhZ21lbnRHbG9i
YWxzOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHRleHR1cmU7CisgICAgUGlwZWxp
bmVTY29wZWQ8VFN0cnVjdHVyZT4gaW5zdGFuY2VJZDsKKworICAgIGJvb2wgbWF0Y2hlcyhjb25z
dCBUU3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdDsKK307
CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUHJvZ3JhbVByZWx1ZGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YmY1YTAyZmUwZGIwYmVkM2QyYWEzYzk1NWNjOTk5Mjc1M2I3YzgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcApAQCAtMCwwICsx
LDM3NTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxjY3R5cGU+CisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9TeW1ib2wuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2Uu
aCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitu
YW1lc3BhY2UKK3sKKworY2xhc3MgUHJvZ3JhbVByZWx1ZGUgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgoreworICAgIHVzaW5nIExpbmVUYWcgICAgICAgPSB1bnNpZ25lZDsKKyAgICB1c2luZyBG
dW5jRW1pdHRlciAgID0gdm9pZCAoKikoUHJvZ3JhbVByZWx1ZGUgJiwgY29uc3QgVEZ1bmN0aW9u
ICYpOworICAgIHVzaW5nIEZ1bmNUb0VtaXR0ZXIgPSBzdGQ6Om1hcDxOYW1lLCBGdW5jRW1pdHRl
cj47CisKKyAgcHVibGljOgorICAgIFByb2dyYW1QcmVsdWRlKFRJbmZvU2lua0Jhc2UgJm91dCwg
Y29uc3QgUHJvZ3JhbVByZWx1ZGVDb25maWcgJnBwYykKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVy
c2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXQob3V0KQorICAgIHsKKyAgICAgICAgQUxXQVlT
X0lOTElORSgpOworCisgICAgICAgIGlmIChwcGMuaGFzU3RydWN0RXEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVxdWFsVmVjdG9yKCk7CisgICAgICAgICAgICBlcXVhbE1hdHJpeCgpOworICAg
ICAgICB9CisKKyNpZiAxCisgICAgICAgIG1PdXQgPDwgIiNkZWZpbmUgQU5HTEVfdGVuc29yIG1l
dGFsOjphcnJheVxuIjsKKyNlbHNlCisgICAgICAgIHRlbnNvcigpOworI2VuZGlmCisgICAgfQor
CisgIHByaXZhdGU6CisgICAgYm9vbCBlbWl0R3VhcmQoTGluZVRhZyBsaW5lVGFnKQorICAgIHsK
KyAgICAgICAgaWYgKG1FbWl0dGVkLmZpbmQobGluZVRhZykgIT0gbUVtaXR0ZWQuZW5kKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBt
RW1pdHRlZC5pbnNlcnQobGluZVRhZyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBGdW5jVG9FbWl0dGVyIEJ1aWxkRnVuY1RvRW1pdHRlcigpOworCisgICAgdm9p
ZCB2aXNpdE9wZXJhdG9yKFRPcGVyYXRvciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTAsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9
IG51bGxwdHIpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBOYW1lICZuYW1lLCBjb25z
dCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCB2aXNpdFZhcmlhYmxlKGNvbnN0IFRWYXJpYWJsZSAm
dmFyKTsKKyAgICB2b2lkIHZpc2l0U3RydWN0dXJlKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpOworCisg
ICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGU7
CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92ZXJyaWRl
OworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUp
IG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xh
cmF0aW9uICpub2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wgKm5vZGUpIG92ZXJyaWRlOworCisgIHByaXZhdGU6CisgICAgdm9pZCBBTFdBWVNfSU5MSU5F
KCk7CisKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfYXRvbWljKCk7CisgICAgdm9pZCBpbmNsdWRl
X21ldGFsX2NvbW1vbigpOworICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAg
ICB2b2lkIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxf
bWF0aCgpOworICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9tYXRyaXgoKTsKKyAgICB2b2lkIGluY2x1
ZGVfbWV0YWxfcGFjaygpOworICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9yZWxhdGlvbmFsKCk7CisK
KyAgICB2b2lkIGVuYWJsZV9pZigpOworICAgIHZvaWQgc2NhbGFyX29mKCk7CisgICAgdm9pZCBp
c19zY2FsYXIoKTsKKyAgICB2b2lkIGlzX3ZlY3RvcigpOworICAgIHZvaWQgaXNfbWF0cml4KCk7
CisgICAgdm9pZCBhZGRyZXNzb2YoKTsKKyAgICB2b2lkIGRpc3RhbmNlKCk7CisgICAgdm9pZCBs
ZW5ndGgoKTsKKyAgICB2b2lkIGRvdCgpOworICAgIHZvaWQgbm9ybWFsaXplKCk7CisgICAgdm9p
ZCBmYWNlZm9yd2FyZCgpOworICAgIHZvaWQgcmVmbGVjdCgpOworICAgIHZvaWQgcmVmcmFjdCgp
OworICAgIHZvaWQgZGVncmVlcygpOworICAgIHZvaWQgcmFkaWFucygpOworICAgIHZvaWQgbW9k
KCk7CisgICAgdm9pZCBwb3N0SW5jcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBwcmVJbmNyZW1l
bnRNYXRyaXgoKTsKKyAgICB2b2lkIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIHBy
ZURlY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgbmVnYXRlTWF0cml4KCk7CisgICAgdm9pZCBt
YXRtdWxBc3NpZ24oKTsKKyAgICB2b2lkIGF0YW4oKTsKKyAgICB2b2lkIGFkZE1hdHJpeFNjYWxh
ckFzc2lnbigpOworICAgIHZvaWQgc3ViTWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBh
ZGRNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhcigpOworICAgIHZvaWQg
ZGl2TWF0cml4U2NhbGFyKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJGYXN0KCk7CisgICAg
dm9pZCBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKyAgICB2b2lkIGRpdk1hdHJpeFNjYWxhckFz
c2lnbkZhc3QoKTsKKyAgICB2b2lkIHRlbnNvcigpOworICAgIHZvaWQgY29tcG9uZW50V2lzZURp
dmlkZSgpOworICAgIHZvaWQgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgIHZvaWQg
Y29tcG9uZW50V2lzZU11bHRpcGx5KCk7CisgICAgdm9pZCBvdXRlclByb2R1Y3QoKTsKKyAgICB2
b2lkIGludmVyc2UyKCk7CisgICAgdm9pZCBpbnZlcnNlMygpOworICAgIHZvaWQgaW52ZXJzZTQo
KTsKKyAgICB2b2lkIGVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBlcXVhbE1hdHJpeCgpOworICAg
IHZvaWQgbm90RXF1YWxWZWN0b3IoKTsKKyAgICB2b2lkIG5vdEVxdWFsU3RydWN0KCk7CisgICAg
dm9pZCBlcXVhbEFycmF5KCk7CisgICAgdm9pZCBub3RFcXVhbEFycmF5KCk7CisgICAgdm9pZCBz
aWduKCk7CisgICAgdm9pZCBwYWNrX2hhbGZfMngxNigpOworICAgIHZvaWQgdW5wYWNrX2hhbGZf
MngxNigpOworICAgIHZvaWQgdmVjdG9yRWxlbVJlZigpOworICAgIHZvaWQgc3dpenpsZVJlZigp
OworICAgIHZvaWQgb3V0KCk7CisgICAgdm9pZCBpbm91dCgpOworICAgIHZvaWQgZmxhdHRlbkFy
cmF5KCk7CisgICAgdm9pZCBjYXN0VmVjdG9yKCk7CisgICAgdm9pZCBjYXN0TWF0cml4KCk7Cisg
ICAgdm9pZCBmdW5jdGlvbkNvbnN0YW50cygpOworICAgIHZvaWQgZ3JhZGllbnQoKTsKKyAgICB2
b2lkIHRleHR1cmVFbnYoKTsKKyAgICB2b2lkIHRleGVsRmV0Y2goKTsKKyAgICB2b2lkIHRleGVs
RmV0Y2hPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmUoKTsKKyAgICB2b2lkIHRleHR1cmVfZ2Vu
ZXJpY19mbG9hdDIoKTsKKyAgICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDJfZmxvYXQoKTsK
KyAgICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDMoKTsKKyAgICB2b2lkIHRleHR1cmVfZ2Vu
ZXJpY19mbG9hdDNfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZF9mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZF9mbG9hdDNfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1
cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aDJkYXJyYXlf
ZmxvYXQ0X2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDQoKTsKKyAg
ICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVy
ZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJy
YXlfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0
NCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDRfZmxvYXQoKTsKKyAg
ICB2b2lkIHRleHR1cmUxRExvZCgpOworICAgIHZvaWQgdGV4dHVyZTFEUHJvaigpOworICAgIHZv
aWQgdGV4dHVyZTFEUHJvakxvZCgpOworICAgIHZvaWQgdGV4dHVyZTJEKCk7CisgICAgdm9pZCB0
ZXh0dXJlMkRMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRFByb2ooKTsKKyAgICB2b2lkIHRleHR1
cmUyRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUzRExvZCgpOworICAgIHZvaWQgdGV4dHVy
ZTNEUHJvaigpOworICAgIHZvaWQgdGV4dHVyZTNEUHJvakxvZCgpOworICAgIHZvaWQgdGV4dHVy
ZUN1YmUoKTsKKyAgICB2b2lkIHRleHR1cmVDdWJlTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3Vi
ZVByb2ooKTsKKyAgICB2b2lkIHRleHR1cmVDdWJlUHJvakxvZCgpOworICAgIHZvaWQgdGV4dHVy
ZUdyYWQoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXROX2Zsb2F0Tl9mbG9h
dE4oKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIo
KTsKKyAgICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkX2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKyAg
ICB2b2lkIHRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOwor
ICAgIHZvaWQgdGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0MygpOwor
ICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0
X2dlbmVyaWNfZmxvYXROX2Zsb2F0Tl9mbG9hdE5faW50TigpOworICAgIHZvaWQgdGV4dHVyZUdy
YWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAg
ICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50
MigpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9h
dDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9m
bG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF90
ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAgdm9pZCB0ZXh0dXJl
TG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisgICAgdm9pZCB0
ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlTG9kX2RlcHRoMmRf
ZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0MygpOwor
ICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRl
eHR1cmVMb2RPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVPZmZzZXQoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWQoKTsKKyAgICB2b2lkIHRleHR1
cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkX2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9hdDMoKTsKKyAgICB2b2lk
IHRleHR1cmVQcm9qR3JhZE9mZnNldCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQgdGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZv
aWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50
MigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxv
YXQzX2Zsb2F0M19pbnQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxvZCgpOworICAgIHZvaWQg
dGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDMoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qTG9k
X2dlbmVyaWNfZmxvYXQ0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxvZF9kZXB0aDJkX2Zsb2F0
NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfdGV4dHVyZTNkX2Zsb2F0NCgpOworICAgIHZv
aWQgdGV4dHVyZVByb2pMb2RPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qT2Zmc2V0KCk7
CisgICAgdm9pZCB0ZXh0dXJlU2l6ZSgpOworCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFz
ZSAmbU91dDsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8TGluZVRhZz4gbUVtaXR0ZWQ7CisgICAg
c3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTeW1ib2wgKj4gbUhhbmRsZWQ7CisgICAgY29uc3Qg
RnVuY1RvRW1pdHRlciBtRnVuY1RvRW1pdHRlciA9IEJ1aWxkRnVuY1RvRW1pdHRlcigpOworfTsK
KworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CisjZGVmaW5lIFBST0dSQU1fUFJFTFVERV9JTkNMVURFKGhlYWRlcikgICAgICAgICAgICAgXAor
ICAgIHZvaWQgUHJvZ3JhbVByZWx1ZGU6OmluY2x1ZGVfIyNoZWFkZXIoKSAgICAgICAgIFwKKyAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChlbWl0R3VhcmQoX19MSU5FX18pKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIG1PdXQgPDwgKCIjaW5jbHVkZSA8IiAjaGVhZGVyICI+XG5cbiIpOyBcCisgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2Rl
ZmluZSBQUk9HUkFNX1BSRUxVREVfREVDTEFSRShuYW1lLCBjb2RlLCAuLi4pICAgICAgICAgICAg
ICAgIFwKKyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjpuYW1lKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBBU1NFUlQoY29kZVswXSA9PSAnXG4n
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVtaXRHdWFy
ZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgX19WQV9BUkdTX187IC8qIGRlcGVuZGVuY2llcyAqLyAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIG1PdXQgPDwgKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIgKj4o
Y29kZSAiXG4iKSArIDEpOyBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfYXRvbWljKQorUFJPR1JBTV9Q
UkVMVURFX0lOQ0xVREUobWV0YWxfY29tbW9uKQorUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0
YWxfZ2VvbWV0cmljKQorUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfZ3JhcGhpY3MpCitQ
Uk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9tYXRoKQorUFJPR1JBTV9QUkVMVURFX0lOQ0xV
REUobWV0YWxfbWF0cml4KQorUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfcGFjaykKK1BS
T0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3JlbGF0aW9uYWwpCisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKEFMV0FZU19JTkxJTkUsIFIiKAor
I2RlZmluZSBBTkdMRV9BTFdBWVNfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUp
KQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVuYWJsZV9pZiwgUiIoCit0ZW1wbGF0
ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9lbmFibGVfaWYge307
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9lbmFibGVfaWY8dHJ1ZSwgVD4K
K3sKKyAgICB1c2luZyB0eXBlID0gVDsKK307Cit0ZW1wbGF0ZSA8Ym9vbCBCPgordXNpbmcgQU5H
TEVfZW5hYmxlX2lmX3QgPSB0eXBlbmFtZSBBTkdMRV9lbmFibGVfaWY8Qj46OnR5cGU7CispIikK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoc2NhbGFyX29mLCBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RydWN0IEFOR0xFX3NjYWxhcl9vZgoreworICAgIHVzaW5nIHR5cGUgPSBUOwor
fTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQU5HTEVfc2NhbGFyX29mX3QgPSB0eXBl
bmFtZSBBTkdMRV9zY2FsYXJfb2Y8VD46OnR5cGU7CispIikKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoaXNfc2NhbGFyLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xF
X2lzX3NjYWxhciB7fTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX1NDQUxBUihzY2FsYXIpIFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfc2NhbGFyPHNjYWxhcj4geyBlbnVtIHsgdmFs
dWUgPSB0cnVlIH07IH0KK0FOR0xFX0RFRklORV9TQ0FMQVIoYm9vbCk7CitBTkdMRV9ERUZJTkVf
U0NBTEFSKGNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUihzaG9ydCk7CitBTkdMRV9ERUZJTkVf
U0NBTEFSKGludCk7CitBTkdMRV9ERUZJTkVfU0NBTEFSKGxvbmcpOworQU5HTEVfREVGSU5FX1ND
QUxBUih1Y2hhcik7CitBTkdMRV9ERUZJTkVfU0NBTEFSKHVzaG9ydCk7CitBTkdMRV9ERUZJTkVf
U0NBTEFSKHVpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUih1bG9uZyk7CitBTkdMRV9ERUZJTkVf
U0NBTEFSKGhhbGYpOworQU5HTEVfREVGSU5FX1NDQUxBUihmbG9hdCk7CispIikKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoaXNfdmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc192ZWN0b3IKK3sKKyAgICBl
bnVtIHsgdmFsdWUgPSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX1ZFQ1RPUihz
Y2FsYXIpIFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yPG1ldGFsOjpz
Y2FsYXIgIyMgMj4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yPG1ldGFsOjpzY2FsYXIgIyMgMz4geyBlbnVtIHsgdmFs
dWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9y
PG1ldGFsOjpzY2FsYXIgIyMgND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMj4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3Nj
YWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAor
ICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyA0
PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9WRUNUT1IoYm9vbCk7CitB
TkdMRV9ERUZJTkVfVkVDVE9SKGNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihzaG9ydCk7CitB
TkdMRV9ERUZJTkVfVkVDVE9SKGludCk7CitBTkdMRV9ERUZJTkVfVkVDVE9SKGxvbmcpOworQU5H
TEVfREVGSU5FX1ZFQ1RPUih1Y2hhcik7CitBTkdMRV9ERUZJTkVfVkVDVE9SKHVzaG9ydCk7CitB
TkdMRV9ERUZJTkVfVkVDVE9SKHVpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1bG9uZyk7CitB
TkdMRV9ERUZJTkVfVkVDVE9SKGhhbGYpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihmbG9hdCk7Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhcl9vZigpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShpc19tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2lzX21hdHJpeAoreworICAgIGVudW0geyB2
YWx1ZSA9IGZhbHNlIH07Cit9OworI2RlZmluZSBBTkdMRV9ERUZJTkVfTUFUUklYKHNjYWxhcikg
XAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAj
IyAyeDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDJ4Mz4geyBlbnVtIHsgdmFsdWUg
PSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1l
dGFsOjpzY2FsYXIgIyMgMng0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRl
bXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDI+IHsg
ZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xF
X2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDN4Mz4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07
IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2Fs
YXIgIyMgM3g0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+
IHN0cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyA0eDI+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJp
eDxtZXRhbDo6c2NhbGFyICMjIDR4Mz4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHg0
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBB
TkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDI+IHsgdXNpbmcgdHlwZSA9IHNjYWxh
cjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNj
YWxhciAjIyAyeDM+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+
IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDQ+IHsgdXNpbmcgdHlw
ZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8
bWV0YWw6OnNjYWxhciAjIyAzeDI+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRl
bXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsg
dXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsg
XAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAj
IyA0eDI+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyA0eDM+IHsgdXNpbmcgdHlwZSA9IHNj
YWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6
OnNjYWxhciAjIyA0eDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorQU5HTEVfREVGSU5FX01B
VFJJWChoYWxmKTsKK0FOR0xFX0RFRklORV9NQVRSSVgoZmxvYXQpOworKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRk
cmVzc29mLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIFQgKiBBTkdMRV9hZGRyZXNzb2YodGhyZWFk
IFQgJnJlZikKK3sKKyAgICByZXR1cm4gJnJlZjsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZGlzdGFu
Y2VfaW1wbAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9v
Zl90PFQ+IGV4ZWMoVCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRpc3Rh
bmNlKHgsIHkpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9kaXN0YW5jZV9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6
dmFsdWU+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgsIFQg
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHggLSB5KTsKKyAgICB9Cit9Owor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9v
Zl90PFQ+IEFOR0xFX2Rpc3RhbmNlKFQgeCwgVCB5KQoreworICAgIHJldHVybiBBTkdMRV9kaXN0
YW5jZV9pbXBsPFQ+OjpleGVjKHgsIHkpOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Citz
dHJ1Y3QgQU5HTEVfbGVuZ3RoX2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
ZXRhbDo6bGVuZ3RoKHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9sZW5ndGhfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8
VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjphYnMoeCk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxU
PiBBTkdMRV9sZW5ndGgoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9sZW5ndGhfaW1wbDxUPjo6
ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxf
Z2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc192ZWN0b3Io
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShkb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2RvdF9pbXBs
Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4g
ZXhlYyhUIHgsIFQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6ZG90KHgsIHkpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1wbDxU
LCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46OnZhbHVlPj4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisgICAgeworICAgICAg
ICByZXR1cm4geCAqIHk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVf
QUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kb3QoVCB4LCBUIHkpCit7
CisgICAgcmV0dXJuIEFOR0xFX2RvdF9pbXBsPFQ+OjpleGVjKHgsIHkpOworfTsKKykiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNf
c2NhbGFyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShu
b3JtYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX25vcm1hbGl6ZV9pbXBs
Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtZXRhbDo6bm9ybWFsaXplKHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1wbDxULCBBTkdMRV9lbmFibGVf
aWZfdDxBTkdMRV9pc19zY2FsYXI8VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxX
QVlTX0lOTElORSBUIGV4ZWMoVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX3NpZ24o
eCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBUIEFOR0xFX25vcm1hbGl6ZShUIHgpCit7CisgICAgcmV0dXJuIEFOR0xFX25vcm1hbGl6ZV9p
bXBsPFQ+OjpleGVjKHgpOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9jb21tb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxf
Z2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
aXNfdmVjdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZmFj
ZWZvcndhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2ZhY2Vmb3J3YXJkX2lt
cGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQg
bnJlZikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6ZmFjZWZvcndhcmQobiwgaSwgbnJl
Zik7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2ZhY2Vm
b3J3YXJkX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1
ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBU
IG5yZWYpCisgICAgeworICAgICAgICByZXR1cm4gQU5HTEVfZG90KG5yZWYsIGkpIDwgVCgwKSA/
IG4gOiAtbjsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIFQgQU5HTEVfZmFjZWZvcndhcmQoVCBuLCBUIGksIFQgbnJlZikKK3sKKyAgICByZXR1
cm4gQU5HTEVfZmFjZWZvcndhcmRfaW1wbDxUPjo6ZXhlYyhuLCBpLCBucmVmKTsKK307CispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRvdCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShyZWZsZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0g
dm9pZD4KK3N0cnVjdCBBTkdMRV9yZWZsZWN0X2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxX
QVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4pCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6
OnJlZmxlY3QoaSwgbik7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0
IEFOR0xFX3JlZmxlY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8
VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBp
LCBUIG4pCisgICAgeworICAgICAgICByZXR1cm4gaSAtIFQoMikgKiBBTkdMRV9kb3QobiwgaSkg
KiBuOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9yZWZsZWN0KFQgaSwgVCBuKQoreworICAgIHJldHVybiBBTkdMRV9yZWZsZWN0
X2ltcGw8VD46OmV4ZWMoaSwgbik7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxl
X2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0
cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICBkb3QoKSkKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUocmVmcmFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfcmVmcmFj
dF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBu
LCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6
OnJlZnJhY3QoaSwgbiwgZXRhKTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQU5HTEVfcmVmcmFjdF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3Nj
YWxhcjxUPjo6dmFsdWU+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhl
YyhUIGksIFQgbiwgVCBldGEpCisgICAgeworICAgICAgICBhdXRvIGRvdE5JID0gbiAqIGk7Cisg
ICAgICAgIGF1dG8gayA9IFQoMSkgLSBldGEgKiBldGEgKiAoVCgxKSAtIGRvdE5JICogZG90Tkkp
OworICAgICAgICBpZiAoayA8IFQoMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBU
KDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGV0YSAqIGkgLSAoZXRhICogZG90TkkgKyBtZXRhbDo6c3FydChrKSkgKiBuOworICAgICAg
ICB9CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBUIEFOR0xFX3JlZnJhY3QoVCBpLCBUIG4sIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV0YSkKK3sK
KyAgICByZXR1cm4gQU5HTEVfcmVmcmFjdF9pbXBsPFQ+OjpleGVjKGksIG4sIGV0YSk7Cit9Owor
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Nj
YWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoc2ln
biwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfc2lnbl9pbXBsCit7CisgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtZXRhbDo6c2lnbih4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBBTkdMRV9z
aWduX2ltcGw8aW50PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIGludCBleGVj
KGludCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuICgwIDwgeCkgLSAoeCA8IDApOworICAgIH0K
K307Cit0ZW1wbGF0ZSA8aW50IE4+CitzdHJ1Y3QgQU5HTEVfc2lnbl9pbXBsPG1ldGFsOjp2ZWM8
aW50LCBOPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPGlu
dCwgTj4gZXhlYyhtZXRhbDo6dmVjPGludCwgTj4geCkKKyAgICB7CisgICAgICAgIG1ldGFsOjp2
ZWM8aW50LCBOPiBzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc1tpXSA9IEFOR0xFX3NpZ25faW1wbDxpbnQ+OjpleGVjKHhbaV0p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9zaWduKFQgeCkKK3sKKyAgICBy
ZXR1cm4gQU5HTEVfc2lnbl9pbXBsPFQ+OjpleGVjKHgpOworfTsKKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9jb21tb24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoYXRhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfYXRhbihUIHlPdmVyWCkKK3sKKyAg
ICByZXR1cm4gbWV0YWw6OmF0YW4oeU92ZXJYKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5LCBUIHgpCit7CisgICAgcmV0dXJu
IG1ldGFsOjphdGFuMih5LCB4KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5j
bHVkZV9tZXRhbF9tYXRoKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRlZ3JlZXMsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfZGVn
cmVlcyhUIHgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDU3LjI5NTc3OTUxMzA4MjMy
KSAqIHg7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmFkaWFucywgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9yYWRpYW5z
KFQgeCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMS43NDUzMjkyNTE5OTQzMjk1ZS0y
KSAqIHg7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobW9kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgWCBBTkdMRV9tb2QoWCB4LCBZIHkpCit7CisgICAgcmV0dXJuIHgg
LSB5ICogbWV0YWw6OmZsb29yKHggLyB5KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5jbHVkZV9tZXRhbF9tYXRoKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBhY2tf
aGFsZl8yeDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCitBTkdMRV9BTFdBWVNfSU5M
SU5FIHVpbnQgQU5HTEVfcGFja19oYWxmXzJ4MTYoZmxvYXQyIHYpCit7CisgICAgcmV0dXJuIGFz
X3R5cGU8dWludD4oaGFsZjIodikpOworfQorKSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodW5wYWNrX2hhbGZfMngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVf
QUxXQVlTX0lOTElORSBmbG9hdDIgQU5HTEVfdW5wYWNrX2hhbGZfMngxNih1aW50IHgpCit7Cisg
ICAgcmV0dXJuIGZsb2F0Mihhc190eXBlPGhhbGYyPih4KSk7Cit9CispIiwgKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShtYXRtdWxBc3NpZ24sIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBO
PiAmb3BlcmF0b3IqPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBOLCBOPiBiKQoreworICAgIGEgPSBhICogYjsKKyAgICByZXR1cm4gYTsKK30KKyki
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwb3N0SW5jcmVtZW50TWF0cml4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGlu
dCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IG9wZXJhdG9yKysodGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJmEsIGludCkK
K3sKKyAgICBhdXRvIGIgPSBhOworICAgIGEgKz0gVCgxKTsKKyAgICByZXR1cm4gYjsKK30KKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHByZUluY3JlbWVudE1hdHJpeCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4g
Jm9wZXJhdG9yKysodGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJmEpCit7Cisg
ICAgYSArPSBUKDEpOworICAgIHJldHVybiBhOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
cG9zdERlY3JlbWVudE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0
cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQpCit7CisgICAgYXV0byBiID0gYTsKKyAgICBhIC09
IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1
Yk1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVEZWNy
ZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0
cml4PFQsIENvbHMsIFJvd3M+ICZhKQoreworICAgIGEgLT0gVCgxKTsKKyAgICByZXR1cm4gYTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNzaWduKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5lZ2F0ZU1hdHJpeCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRv
ci0obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtKQoreworICAgIGZvciAoc2l6ZV90IGNv
bCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAgICAgICAgdGhyZWFkIGF1dG8gJm1D
b2wgPSBtW2NvbF07CisgICAgICAgIG1Db2wgPSAtbUNvbDsKKyAgICB9CisgICAgcmV0dXJuIG07
Cit9CispIiwgKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShhZGRNYXRyaXhTY2FsYXJBc3Np
Z24sIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJh
dG9yKz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAg
IG1bY29sXSArPSB4OworICAgIH0KKyAgICByZXR1cm4gbTsKK30KKykiKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShhZGRNYXRyaXhTY2FsYXIsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3IrKG1ldGFsOjpt
YXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAgIG0gKz0geDsKKyAgICByZXR1cm4g
bTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWdu
KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHN1Yk1hdHJpeFNjYWxhckFzc2lnbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xz
LCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwg
Q29scywgUm93cz4gJm9wZXJhdG9yLT0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gJm0sIFQgeCkKK3sKKyAgICBmb3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2Nv
bCkKKyAgICB7CisgICAgICAgIG1bY29sXSAtPSB4OworICAgIH0KKyAgICByZXR1cm4gbTsKK30K
KykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHN1Yk1hdHJpeFNjYWxhciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBp
bnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBvcGVyYXRvci0obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCit7CisgICAg
bSAtPSB4OworICAgIHJldHVybiBtOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dWJNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0
cml4U2NhbGFyQXNzaWduRmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
dGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1l
dGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKK3sKKyAgICB4ID0gVCgxKSAvIHg7
CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAg
ICAgICBtW2NvbF0gKj0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIiwgKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRyaXhTY2FsYXJBc3NpZ24sCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvci89KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgp
Cit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgewor
ICAgICAgICBtW2NvbF0gLz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIiwgKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRyaXhTY2FsYXJGYXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBtZXRh
bDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5kaWYK
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduRmFzdCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRyaXhTY2FsYXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA8PSAyMjAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3IvKG1ldGFsOjptYXRyaXg8VCwgQ29s
cywgUm93cz4gbSwgVCB4KQoreworICAgIG0gLz0geDsKKyAgICByZXR1cm4gbTsKK30KKyNlbmRp
ZgorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY29tcG9uZW50V2lzZURpdmlkZSwgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+IGEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKK3sKKyAgICBm
b3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIGFb
Y29sXSAvPSBiW2NvbF07CisgICAgfQorICAgIHJldHVybiBhOworfQorKSIpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24sCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvci89KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBtZXRh
bDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAgYSA9IGEgLyBiOworICAgIHJldHVy
biBhOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRXaXNlRGl2aWRl
KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VNdWx0aXBseSwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlT
X0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IEFOR0xFX2NvbXBvbmVudFdpc2VN
dWx0aXBseShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGEsIG1ldGFsOjptYXRyaXg8VCwg
Q29scywgUm93cz4gYikKK3sKKyAgICBmb3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyAr
K2NvbCkKKyAgICB7CisgICAgICAgIGFbY29sXSAqPSBiW2NvbF07CisgICAgfQorICAgIHJldHVy
biBhOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG91dGVyUHJvZHVjdCwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE0sIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6bWF0cml4PFQsIE4sIE0+IEFOR0xFX291dGVyUHJvZHVjdChtZXRhbDo6dmVjPFQs
IE0+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIE4sIE0+
IG87CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBOOyArK24pCisgICAgeworICAgICAgICBv
W25dID0gdSAqIHZbbl07CisgICAgfQorICAgIHJldHVybiBvOworfQorKSIpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKGludmVyc2UyLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IEFOR0xFX2ludmVyc2UobWV0
YWw6Om1hdHJpeDxULCAyLCAyPiBtKQoreworICAgIG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gYWRq
OworICAgIGFkalswXVswXSA9ICBtWzFdWzFdOworICAgIGFkalswXVsxXSA9IC1tWzBdWzFdOwor
ICAgIGFkalsxXVswXSA9IC1tWzFdWzBdOworICAgIGFkalsxXVsxXSA9ICBtWzBdWzBdOworICAg
IFQgZGV0ID0gKGFkalswXVswXSAqIG1bMF1bMF0pICsgKGFkalswXVsxXSAqIG1bMV1bMF0pOwor
ICAgIHJldHVybiBhZGogKiAoVCgxKSAvIGRldCk7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoaW52ZXJzZTMsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0
cml4PFQsIDMsIDM+IG0pCit7CisgICAgVCBhID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzJdWzFd
ICogbVsxXVsyXTsKKyAgICBUIGIgPSBtWzFdWzBdICogbVsyXVsyXTsKKyAgICBUIGMgPSBtWzFd
WzJdICogbVsyXVswXTsKKyAgICBUIGQgPSBtWzFdWzBdICogbVsyXVsxXTsKKyAgICBUIGRldCA9
IG1bMF1bMF0gKiAoYSkgLQorICAgICAgICAgICAgbVswXVsxXSAqIChiIC0gYykgKworICAgICAg
ICAgICAgbVswXVsyXSAqIChkIC0gbVsxXVsxXSAqIG1bMl1bMF0pOworICAgIGRldCA9IFQoMSkg
LyBkZXQ7CisgICAgbWV0YWw6Om1hdHJpeDxULCAzLCAzPiBtaW52OworICAgIG1pbnZbMF1bMF0g
PSAoYSkgKiBkZXQ7CisgICAgbWludlswXVsxXSA9IChtWzBdWzJdICogbVsyXVsxXSAtIG1bMF1b
MV0gKiBtWzJdWzJdKSAqIGRldDsKKyAgICBtaW52WzBdWzJdID0gKG1bMF1bMV0gKiBtWzFdWzJd
IC0gbVswXVsyXSAqIG1bMV1bMV0pICogZGV0OworICAgIG1pbnZbMV1bMF0gPSAoYyAtIGIpICog
ZGV0OworICAgIG1pbnZbMV1bMV0gPSAobVswXVswXSAqIG1bMl1bMl0gLSBtWzBdWzJdICogbVsy
XVswXSkgKiBkZXQ7CisgICAgbWludlsxXVsyXSA9IChtWzFdWzBdICogbVswXVsyXSAtIG1bMF1b
MF0gKiBtWzFdWzJdKSAqIGRldDsKKyAgICBtaW52WzJdWzBdID0gKGQgLSBtWzJdWzBdICogbVsx
XVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsxXSA9IChtWzJdWzBdICogbVswXVsxXSAtIG1bMF1b
MF0gKiBtWzJdWzFdKSAqIGRldDsKKyAgICBtaW52WzJdWzJdID0gKG1bMF1bMF0gKiBtWzFdWzFd
IC0gbVsxXVswXSAqIG1bMF1bMV0pICogZGV0OworICAgIHJldHVybiBtaW52OworfQorKSIpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVyc2U0LCBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIDQsIDQ+IEFOR0xFX2lu
dmVyc2UobWV0YWw6Om1hdHJpeDxULCA0LCA0PiBtKQoreworICAgIFQgQTIzMjMgPSBtWzJdWzJd
ICogbVszXVszXSAtIG1bMl1bM10gKiBtWzNdWzJdOworICAgIFQgQTEzMjMgPSBtWzJdWzFdICog
bVszXVszXSAtIG1bMl1bM10gKiBtWzNdWzFdOworICAgIFQgQTEyMjMgPSBtWzJdWzFdICogbVsz
XVsyXSAtIG1bMl1bMl0gKiBtWzNdWzFdOworICAgIFQgQTAzMjMgPSBtWzJdWzBdICogbVszXVsz
XSAtIG1bMl1bM10gKiBtWzNdWzBdOworICAgIFQgQTAyMjMgPSBtWzJdWzBdICogbVszXVsyXSAt
IG1bMl1bMl0gKiBtWzNdWzBdOworICAgIFQgQTAxMjMgPSBtWzJdWzBdICogbVszXVsxXSAtIG1b
Ml1bMV0gKiBtWzNdWzBdOworICAgIFQgQTIzMTMgPSBtWzFdWzJdICogbVszXVszXSAtIG1bMV1b
M10gKiBtWzNdWzJdOworICAgIFQgQTEzMTMgPSBtWzFdWzFdICogbVszXVszXSAtIG1bMV1bM10g
KiBtWzNdWzFdOworICAgIFQgQTEyMTMgPSBtWzFdWzFdICogbVszXVsyXSAtIG1bMV1bMl0gKiBt
WzNdWzFdOworICAgIFQgQTIzMTIgPSBtWzFdWzJdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJd
WzJdOworICAgIFQgQTEzMTIgPSBtWzFdWzFdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJdWzFd
OworICAgIFQgQTEyMTIgPSBtWzFdWzFdICogbVsyXVsyXSAtIG1bMV1bMl0gKiBtWzJdWzFdOwor
ICAgIFQgQTAzMTMgPSBtWzFdWzBdICogbVszXVszXSAtIG1bMV1bM10gKiBtWzNdWzBdOworICAg
IFQgQTAyMTMgPSBtWzFdWzBdICogbVszXVsyXSAtIG1bMV1bMl0gKiBtWzNdWzBdOworICAgIFQg
QTAzMTIgPSBtWzFdWzBdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJdWzBdOworICAgIFQgQTAy
MTIgPSBtWzFdWzBdICogbVsyXVsyXSAtIG1bMV1bMl0gKiBtWzJdWzBdOworICAgIFQgQTAxMTMg
PSBtWzFdWzBdICogbVszXVsxXSAtIG1bMV1bMV0gKiBtWzNdWzBdOworICAgIFQgQTAxMTIgPSBt
WzFdWzBdICogbVsyXVsxXSAtIG1bMV1bMV0gKiBtWzJdWzBdOworICAgIFQgYSA9IG1bMV1bMV0g
KiBBMjMyMyAtIG1bMV1bMl0gKiBBMTMyMyArIG1bMV1bM10gKiBBMTIyMzsKKyAgICBUIGIgPSBt
WzFdWzBdICogQTIzMjMgLSBtWzFdWzJdICogQTAzMjMgKyBtWzFdWzNdICogQTAyMjM7CisgICAg
VCBjID0gbVsxXVswXSAqIEExMzIzIC0gbVsxXVsxXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMTIz
OworICAgIFQgZCA9IG1bMV1bMF0gKiBBMTIyMyAtIG1bMV1bMV0gKiBBMDIyMyArIG1bMV1bMl0g
KiBBMDEyMzsKKyAgICBUIGRldCA9IG1bMF1bMF0gKiAoIGEgKQorICAgICAgICAgIC0gbVswXVsx
XSAqICggYiApCisgICAgICAgICAgKyBtWzBdWzJdICogKCBjICkKKyAgICAgICAgICAtIG1bMF1b
M10gKiAoIGQgKTsKKyAgICBkZXQgPSBUKDEpIC8gZGV0OworICAgIG1ldGFsOjptYXRyaXg8VCwg
NCwgND4gaW07CisgICAgaW1bMF1bMF0gPSBkZXQgKiAgICggYSApOworICAgIGltWzBdWzFdID0g
ZGV0ICogLSAoIG1bMF1bMV0gKiBBMjMyMyAtIG1bMF1bMl0gKiBBMTMyMyArIG1bMF1bM10gKiBB
MTIyMyApOworICAgIGltWzBdWzJdID0gZGV0ICogICAoIG1bMF1bMV0gKiBBMjMxMyAtIG1bMF1b
Ml0gKiBBMTMxMyArIG1bMF1bM10gKiBBMTIxMyApOworICAgIGltWzBdWzNdID0gZGV0ICogLSAo
IG1bMF1bMV0gKiBBMjMxMiAtIG1bMF1bMl0gKiBBMTMxMiArIG1bMF1bM10gKiBBMTIxMiApOwor
ICAgIGltWzFdWzBdID0gZGV0ICogLSAoIGIgKTsKKyAgICBpbVsxXVsxXSA9IGRldCAqICAgKCBt
WzBdWzBdICogQTIzMjMgLSBtWzBdWzJdICogQTAzMjMgKyBtWzBdWzNdICogQTAyMjMgKTsKKyAg
ICBpbVsxXVsyXSA9IGRldCAqIC0gKCBtWzBdWzBdICogQTIzMTMgLSBtWzBdWzJdICogQTAzMTMg
KyBtWzBdWzNdICogQTAyMTMgKTsKKyAgICBpbVsxXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICog
QTIzMTIgLSBtWzBdWzJdICogQTAzMTIgKyBtWzBdWzNdICogQTAyMTIgKTsKKyAgICBpbVsyXVsw
XSA9IGRldCAqICAgKCBjICk7CisgICAgaW1bMl1bMV0gPSBkZXQgKiAtICggbVswXVswXSAqIEEx
MzIzIC0gbVswXVsxXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMTIzICk7CisgICAgaW1bMl1bMl0g
PSBkZXQgKiAgICggbVswXVswXSAqIEExMzEzIC0gbVswXVsxXSAqIEEwMzEzICsgbVswXVszXSAq
IEEwMTEzICk7CisgICAgaW1bMl1bM10gPSBkZXQgKiAtICggbVswXVswXSAqIEExMzEyIC0gbVsw
XVsxXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMTEyICk7CisgICAgaW1bM11bMF0gPSBkZXQgKiAt
ICggZCApOworICAgIGltWzNdWzFdID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTIyMyAtIG1bMF1b
MV0gKiBBMDIyMyArIG1bMF1bMl0gKiBBMDEyMyApOworICAgIGltWzNdWzJdID0gZGV0ICogLSAo
IG1bMF1bMF0gKiBBMTIxMyAtIG1bMF1bMV0gKiBBMDIxMyArIG1bMF1bMl0gKiBBMDExMyApOwor
ICAgIGltWzNdWzNdID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTIxMiAtIG1bMF1bMV0gKiBBMDIx
MiArIG1bMF1bMl0gKiBBMDExMiApOworICAgIHJldHVybiBpbTsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShlcXVhbEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJv
b2wgQU5HTEVfZXF1YWwobWV0YWw6OmFycmF5PFQsIE4+IHUsIG1ldGFsOjphcnJheTxULCBOPiB2
KQoreworICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBOOyBpKyspCisgICAgICAgIGlmICh1W2ld
ICE9IHZbaV0pIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKykiKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShub3RFcXVhbEFycmF5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OmFycmF5PFQsIE4+IHUsIG1ldGFsOjphcnJh
eTxULCBOPiB2KQoreworICAgIHJldHVybiAhQU5HTEVfZXF1YWwodSx2KTsKK30KKykiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZXF1YWxBcnJheSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRShlcXVhbFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFs
KG1ldGFsOjp2ZWM8VCwgTj4gdSwgbWV0YWw6OnZlYzxULCBOPiB2KQoreworICAgIHJldHVybiBt
ZXRhbDo6YWxsKHUgPT0gdik7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1
ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlcXVhbE1hdHJpeCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBD
LCBpbnQgUj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRhbDo6bWF0
cml4PFQsIEMsIFI+IGEsIG1ldGFsOjptYXRyaXg8VCwgQywgUj4gYikKK3sKKyAgICBmb3IgKGlu
dCBjID0gMDsgYyA8IEM7ICsrYykKKyAgICB7CisgICAgICAgIGlmICghQU5HTEVfZXF1YWwoYVtj
XSwgYltjXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXF1YWxWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxWZWN0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBp
bnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9ub3RFcXVhbChtZXRhbDo6dmVj
PFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFs
KHUsIHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShub3RFcXVhbFN0cnVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGJvb2wgQU5HTEVfbm90RXF1YWxTdHJ1Y3QodGhyZWFkIGNvbnN0IFQgJmEsIHRocmVhZCBjb25z
dCBUICZiKQoreworICAgIHJldHVybiAhQU5HTEVfZXF1YWwoYSwgYik7Cit9CispIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVxdWFsVmVjdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBlcXVhbE1hdHJpeCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh2ZWN0b3JFbGVtUmVm
LCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK3N0cnVjdCBBTkdMRV9WZWN0b3JF
bGVtUmVmCit7CisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJm1WZWM7CisgICAgVCBtUmVm
OworICAgIGNvbnN0IGludCBtSW5kZXg7CisgICAgfkFOR0xFX1ZlY3RvckVsZW1SZWYoKSB7IG1W
ZWNbbUluZGV4XSA9IG1SZWY7IH0KKyAgICBBTkdMRV9WZWN0b3JFbGVtUmVmKHRocmVhZCBtZXRh
bDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkKKyAgICAgICAgOiBtVmVjKHZlYyksIG1SZWYo
dmVjW2luZGV4XSksIG1JbmRleChpbmRleCkKKyAgICB7fQorICAgIG9wZXJhdG9yIHRocmVhZCBU
ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgor
QU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+IEFOR0xFX2VsZW1f
cmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkKK3sKKyAgICByZXR1
cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKK30KKykiKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShzd2l6emxlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IFZOLCBpbnQgU04+CitzdHJ1Y3QgQU5HTEVf
U3dpenpsZVJlZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIFZOPiAmbVZlYzsKKyAgICBt
ZXRhbDo6dmVjPFQsIFNOPiBtUmVmOworICAgIGludCBtSW5kaWNlc1tTTl07CisgICAgfkFOR0xF
X1N3aXp6bGVSZWYoKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTTjsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1JbmRpY2VzW2ldOworICAg
ICAgICAgICAgbVZlY1tqXSA9IG1SZWZbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgQU5HTEVf
U3dpenpsZVJlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCB0aHJlYWQgY29uc3QgaW50
ICppbmRpY2VzKQorICAgICAgICA6IG1WZWModmVjKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBTTjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgaiA9
IGluZGljZXNbaV07CisgICAgICAgICAgICBtSW5kaWNlc1tpXSA9IGo7CisgICAgICAgICAgICBt
UmVmW2ldID0gbVZlY1tqXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBvcGVyYXRvciB0aHJlYWQg
bWV0YWw6OnZlYzxULCBTTj4gJigpIHsgcmV0dXJuIG1SZWY7IH0KK307Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX1ZlY3RvckVsZW1SZWY8
VCwgTj4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50
IGkwKQoreworICAgIHJldHVybiBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+KHZlYywgaW5kZXgp
OworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9Td2l6emxlUmVmPFQsIE4sIDI+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6
dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxKQoreworICAgIGNvbnN0IGludCBpc1tdID0g
eyBpMCwgaTEgfTsKKyAgICByZXR1cm4gQU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPih2ZWMsIGlz
KTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
QU5HTEVfU3dpenpsZVJlZjxULCBOLCAzPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6
OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSwgaW50IGkyKQoreworICAgIGNvbnN0IGlu
dCBpc1tdID0geyBpMCwgaTEsIGkyIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwg
TiwgMz4odmVjLCBpcyk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgND4gQU5HTEVfc3dpenpsZV9yZWYo
dGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMiwgaW50
IGkzKQoreworICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEsIGkyLCBpMyB9OworICAgIHJl
dHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+KHZlYywgaXMpOworfQorKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICB2ZWN0b3JFbGVtUmVmKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKG91dCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9PdXQKK3sK
KyAgICBUIG1UZW1wOworICAgIHRocmVhZCBUICZtRGVzdDsKKyAgICB+QU5HTEVfT3V0KCkgeyBt
RGVzdCA9IG1UZW1wOyB9CisgICAgQU5HTEVfT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6
IG1EZXN0KGRlc3QpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQgVCAmKCkgeyByZXR1cm4g
bVRlbXA7IH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
QU5HTEVfT3V0PFQ+IEFOR0xFX291dCh0aHJlYWQgVCAmZGVzdCkKK3sKKyAgICByZXR1cm4gQU5H
TEVfT3V0PFQ+KGRlc3QpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlub3V0
LCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX0luT3V0Cit7CisgICAg
VCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX0luT3V0KCkgeyBtRGVz
dCA9IG1UZW1wOyB9CisgICAgQU5HTEVfSW5PdXQodGhyZWFkIFQgJmRlc3QpCisgICAgICAgIDog
bVRlbXAoZGVzdCksIG1EZXN0KGRlc3QpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQgVCAm
KCkgeyByZXR1cm4gbVRlbXA7IH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgQU5HTEVfSW5PdXQ8VD4gQU5HTEVfaW5vdXQodGhyZWFkIFQgJmRlc3QpCit7
CisgICAgcmV0dXJuIEFOR0xFX0luT3V0PFQ+KGRlc3QpOworfQorKSIpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKGZsYXR0ZW5BcnJheSwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
cnVjdCBBTkdMRV9mbGF0dGVuX2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSB0aHJlYWQgVCAqZXhlYyh0aHJlYWQgVCAmeCkKKyAgICB7CisgICAgICAgIHJldHVybiAmeDsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorc3RydWN0IEFOR0xF
X2ZsYXR0ZW5faW1wbDxtZXRhbDo6YXJyYXk8VCwgTj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBleGVjKHRocmVhZCBtZXRhbDo6YXJyYXk8VCwgTj4gJmFycikgLT4g
VAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJb
MF0pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfZmxhdHRlbih0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+
ICZhcnIpIC0+IFQKK3sKKyAgICByZXR1cm4gQU5HTEVfZmxhdHRlbl9pbXBsPFQ+OjpleGVjKGFy
clswXSk7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdFZlY3RvciwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4xLCBpbnQgTjI+CitzdHJ1Y3QgQU5HTEVfY2Fz
dFZlY3RvciB7fTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK3N0cnVjdCBBTkdMRV9j
YXN0VmVjdG9yPFQsIE4sIE4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6OnZlYzxULCBOPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+IGNvbnN0ICZ2KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgMz4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgMz4g
Y29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsKKyAgICB9Cit9OwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAyLCA0PgoreworICAg
IHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8VCwgMj4gZXhlYyh0aHJlYWQg
bWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAgICAgIHJldHVybiB2Lnh5Owor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9y
PFQsIDMsIDQ+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxU
LCAzPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDQ+IGNvbnN0ICZ2KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFzX3R5cGU8bWV0YWw6OnZlYzxULCAzPj4odik7CisgICAgfQorfTsKK3RlbXBs
YXRlIDxpbnQgTjEsIGludCBOMiwgdHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6OnZlYzxULCBOMT4gQU5HTEVfY2FzdCh0aHJlYWQgbWV0YWw6OnZlYzxULCBOMj4gY29uc3Qg
JnYpCit7CisgICAgcmV0dXJuIEFOR0xFX2Nhc3RWZWN0b3I8VCwgTjEsIE4yPjo6ZXhlYyh2KTsK
K30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjYXN0TWF0cml4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBpbnQgUjEs
IGludCBDMiwgaW50IFIyLCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Nh
c3RNYXRyaXgKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4
PFQsIEMxLCBSMT4gZXhlYyh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDMiwgUjI+IGNvbnN0ICZt
MikKKyAgICB7CisgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKyAgICAgICAg
Y29uc3QgaW50IE1pbkMgPSBDMSA8PSBDMiA/IEMxIDogQzI7CisgICAgICAgIGNvbnN0IGludCBN
aW5SID0gUjEgPD0gUjIgPyBSMSA6IFIyOworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IE1p
bkM7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBNaW5S
OyArK3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbTFbY11bcl0gPSBtMltjXVty
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBSMjsgciA8IFIxOyAr
K3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbTFbY11bcl0gPSBjID09IHIgPyBU
KDEpIDogVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBj
ID0gQzI7IGMgPCBDMTsgKytjKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByID0g
MDsgciA8IFIxOyArK3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbTFbY11bcl0g
PSBjID09IHIgPyBUKDEpIDogVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbTE7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQzEsIGlu
dCBSMSwgaW50IEMyLCBpbnQgUjI+CitzdHJ1Y3QgQU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEs
IEMyLCBSMiwgQU5HTEVfZW5hYmxlX2lmX3Q8KEMxIDw9IEMyICYmIFIxIDw9IFIyKT4+Cit7Cisg
ICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IGV4
ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisgICAgeworICAg
ICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAgIGZvciAoc2l6ZV90IGMg
PSAwOyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgbTFbY10gPSBBTkdMRV9j
YXN0PFIxPihtMltjXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG0xOworICAgIH0KK307
Cit0ZW1wbGF0ZSA8aW50IEMxLCBpbnQgUjEsIGludCBDMiwgaW50IFIyLCB0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gQU5HTEVfY2FzdCh0
aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDMiwgUjI+IGNvbnN0ICZtKQoreworICAgIHJldHVybiBB
TkdMRV9jYXN0TWF0cml4PFQsIEMxLCBSMSwgQzIsIFIyPjo6ZXhlYyhtKTsKK307CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzdFZlY3RvcigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZW5zb3IsIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdC4uLiBEUz4KK3N0cnVjdCBBTkdMRV90ZW5zb3Jf
dHJhaXRzOwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBEPgorc3RydWN0IEFOR0xFX3Rl
bnNvcl90cmFpdHM8VCwgRD4KK3sKKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9
OworICAgIHVzaW5nIGlubmVyX3R5cGUgPSBUOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5l
cl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRCwgc2l6ZV90Li4u
IERTPgorc3RydWN0IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRCwgRFMuLi4+Cit7CisgICAgZW51
bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAgICB1c2luZyBpbm5lcl90eXBlID0gdHlw
ZW5hbWUgQU5HTEVfdGVuc29yX3RyYWl0czxULCBEUy4uLj46Om91dGVyX3R5cGU7CisgICAgdXNp
bmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07Cit9OwordGVtcGxhdGUgPHNpemVfdCBELCB0
eXBlbmFtZSB2YWx1ZV90eXBlXywgdHlwZW5hbWUgaW5uZXJfdHlwZV8+CitzdHJ1Y3QgQU5HTEVf
dGVuc29yX2ltcGwKK3sKKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9OworICAg
IHVzaW5nIHZhbHVlX3R5cGUgPSB2YWx1ZV90eXBlXzsKKyAgICB1c2luZyBpbm5lcl90eXBlID0g
aW5uZXJfdHlwZV87CisgICAgdXNpbmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07CisgICAg
b3V0ZXJfdHlwZSBfZGF0YTsKKyAgICBBTkdMRV9BTFdBWVNfSU5MSU5FIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gb3V0ZXJfZGltOyB9CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBpbm5l
cl90eXBlICZvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBfZGF0YVtpXTsgfQorICAgIEFO
R0xFX0FMV0FZU19JTkxJTkUgY29uc3QgaW5uZXJfdHlwZSAmb3BlcmF0b3JbXShzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gX2RhdGFbaV07IH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6
ZV90Li4uIERTPgordXNpbmcgQU5HTEVfdGVuc29yID0gQU5HTEVfdGVuc29yX2ltcGw8CisgICAg
QU5HTEVfdGVuc29yX3RyYWl0czxULCBEUy4uLj46Om91dGVyX2RpbSwKKyAgICBULAorICAgIHR5
cGVuYW1lIEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+Ojppbm5lcl90eXBlPjsKKykiKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShncmFkaWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAordGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czsK
K3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRfdHJhaXRzPDI+IHsgdXNpbmcgdHlw
ZSA9IG1ldGFsOjpncmFkaWVudDJkOyB9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBBTkdMRV9ncmFk
aWVudF90cmFpdHM8Mz4geyB1c2luZyB0eXBlID0gbWV0YWw6OmdyYWRpZW50M2Q7IH07CisKK3Rl
bXBsYXRlIDxpbnQgTj4KK3VzaW5nIEFOR0xFX2dyYWRpZW50ID0gdHlwZW5hbWUgQU5HTEVfZ3Jh
ZGllbnRfdHJhaXRzPE4+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorc3RydWN0IEFOR0xFX1RleHR1cmVFbnYKK3sKKyAgICB0aHJlYWQgVCAqdGV4dHVyZTsK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgKnNhbXBsZXI7Cit9OworKSIpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKGZ1bmN0aW9uQ29uc3RhbnRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisjZGVmaW5lIEFOR0xFX1NBTVBMRV9DT01QQVJFX0dSQURJRU5UX0lOREVYIDAKKyNk
ZWZpbmUgQU5HTEVfU0FNUExFX0NPTVBBUkVfTE9EX0lOREVYICAgICAgMQorI2RlZmluZSBBTkdM
RV9SQVNURVJJWkFUSU9OX0RJU0NBUkRfSU5ERVggICAyCisKK2NvbnN0YW50IGJvb2wgQU5HTEVf
VXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50IFtbZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfU0FNUExF
X0NPTVBBUkVfR1JBRElFTlRfSU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1VzZVNhbXBs
ZUNvbXBhcmVMb2QgICAgICBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBMRV9DT01QQVJF
X0xPRF9JTkRFWCldXTsKK2NvbnN0YW50IGJvb2wgQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQg
ICAgIFtbZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfUkFTVEVSSVpBVElPTl9ESVNDQVJEX0lOREVY
KV1dOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleGVsRmV0Y2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaChlbnYsIC4uLikg
QU5HTEVfdGV4ZWxGZXRjaF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eGVsRmV0Y2hfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJu
IHRleHR1cmUucmVhZCh1aW50Mihjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50
MyBjb25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5y
ZWFkKHVpbnQzKGNvb3JkKSwgbGV2ZWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhlbEZldGNoX2ltcGwoCisgICAgdGhyZWFk
IG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpp
bnQzIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJl
LnJlYWQodWludDIoY29vcmQueHkpLCB1aW50KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4ZWxGZXRjaE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2Rl
ZmluZSBBTkdMRV90ZXhlbEZldGNoT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXhlbEZldGNoT2Zm
c2V0X2ltcGwoKmVudi50ZXh0dXJlLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
aW50MiBjb25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6Omlu
dDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQyKGNvb3Jk
ICsgb2Zmc2V0KSwgbGV2ZWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZj
b29yZCwKKyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zm
c2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDMoY29vcmQgKyBvZmZzZXQpLCBs
ZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1
cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJmNv
b3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZC54eSArIG9mZnNldCks
IHVpbnQoY29vcmQueiksIGxldmVsKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zs
b2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4
dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDMs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkKQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVy
ZV9nZW5lcmljX2Zsb2F0M19mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlX2RlcHRoMmRfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2lt
cGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0
aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlh
cykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFs
OjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OmRlcHRoMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwg
dWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53KTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmRfYXJyYXk8VD4gJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBjb21wYXJlKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludCht
ZXRhbDo6cm91bmQoY29vcmQudykpLCBjb21wYXJlKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2Rl
cHRoY3ViZV9mbG9hdDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgK
KyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54
eXopOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGhjdWJlPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQg
YmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCBt
ZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJlMmRhcnJheV9m
bG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwg
dWludChtZXRhbDo6cm91bmQoY29vcmQueikpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1
cmUyZGFycmF5X2Zsb2F0M19mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3Jk
LnopKSwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJk
YXJyYXlfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0
IGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSkpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJv
dW5kKGNvb3JkLncpKSwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUx
RExvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
MURMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVu
di5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFETG9kX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBmbG9hdCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUxRFByb2ooZW52LCAuLi4pIEFO
R0xFX3RleHR1cmUxRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLnksIG1ldGFs
OjpiaWFzKGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlh
cyA9IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29v
cmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUxRFByb2pM
b2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFE
UHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBsKCplbnYudGV4dHVy
ZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQs
CisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLngvY29vcmQueSwgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUx
RFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQg
Y29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQor
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmUyRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2Rl
ZmluZSBBTkdMRV90ZXh0dXJlMkQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEX2ltcGwo
CisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAm
Y29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmUyRExvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmlu
ZSBBTkdMRV90ZXh0dXJlMkRMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRExvZF9pbXBsKCpl
bnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJETG9k
X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmUyRFByb2osCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4
dHVyZTJEUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKCplbnYudGV4dHVy
ZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKAor
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJE
UHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisjZGVmaW5lIEFOR0xFX3RleHR1cmUyRFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUy
RFByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncs
IG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRExvZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RMb2QoZW52
LCAuLi4pIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNETG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpsZXZl
bChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2osCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvaihlbnYsIC4uLikgQU5H
TEVfdGV4dHVyZTNEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVF
bnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTNEUHJvakxvZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVD
dWJlLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVD
dWJlKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgKKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2lt
cGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJl
TG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVD
dWJlTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZUxvZF9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmVQcm9q
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVDdWJl
UHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZVByb2pfaW1wbCgKKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVDdWJlUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBB
TkdMRV90ZXh0dXJlQ3ViZVByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJvakxv
ZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZUN1YmVQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZl
bCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
R3JhZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZSwgaW50IE4+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHgsCisgICAgdGhyZWFk
IG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR5KQoreworICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZCwgQU5HTEVfZ3JhZGllbnQ8Tj4oZFBkeCwgZFBkeSkpOwor
fQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBncmFkaWVudCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5KQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6
cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBk
eSkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJf
ZmxvYXQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAg
IHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNv
b3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgY29vcmQueiwgbWV0YWw6OmdyYWRp
ZW50MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRh
bDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkgPiBjb29yZC56KTsKKyAgICB9Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJk
X2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29u
c3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJl
KHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIGNvb3JkLncs
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChk
UGR4LCBkUGR5KSkgPiBjb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9kZXB0aGN1
YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAm
ZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAo
QU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHl6LCBj
b29yZC53LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eXosIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpID4gY29v
cmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNv
bnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0
M19mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlY3ViZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSk7Cit9
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlR3JhZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0Tl9mbG9h
dE5fZmxvYXROX2ludE4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OnZlYzxmbG9hdCwgTj4gY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0
LCBOPiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4gY29uc3Qg
JmRQZHksCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8aW50LCBOPiBjb25zdCAmb2Zmc2V0KQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgQU5HTEVfZ3JhZGllbnQ8
Tj4oZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdyYWRpZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZE9mZnNldCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0M19mbG9hdDJfZmxvYXQyX2ludDIsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
ZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6
cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDNf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBt
ZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgY29vcmQueiwgbWV0YWw6OmdyYWRp
ZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQueik7Cisg
ICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9m
bG9hdDJfZmxvYXQyX2ludDIsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFk
T2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29u
c3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhy
ZWFkIG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBs
ZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0
ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3Vu
ZChjb29yZC56KSksIGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZz
ZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQu
dyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0
YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0
NF9mbG9hdDNfZmxvYXQzX2ludDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVH
cmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25z
dCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSwKKyAgICB0aHJl
YWQgbWV0YWw6OmludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpLCBv
ZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZE9mZnNl
dCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF90ZXh0dXJl
Y3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8
VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBk
eSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwg
ZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVH
cmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2QsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUxvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZUxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZB
X0FSR1NfXykKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZl
bCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjps
ZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9k
KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZs
b2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVMb2QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9kZXB0aDJk
X2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAg
IHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJl
TG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxl
X2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkp
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+
IGNvb3JkLnopOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25Db25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0
NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVh
ZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kT2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2RPZmZzZXQoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxl
dmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJl
YWQgaW50MyBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZE9m
ZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNv
bnN0ICZvZmZzZXQpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShz
YW1wbGVyLCBjb29yZC54eSwgY29vcmQueiwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zm
c2V0KSA+IGNvb3JkLnopOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25z
dCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNl
dCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5
PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWws
CisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSksIG1l
dGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZU9mZnNldChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBf
X1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zm
c2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgb2Zmc2V0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAor
ICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAg
ICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmJpYXMoYmlhcyksIG9m
ZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNl
dCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNldCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCwKKyAg
ICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAor
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJpYXMpCit7CisgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6YmlhcyhiaWFz
KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvaiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvaihlbnYsIC4uLikgQU5HTEVf
dGV4dHVyZVByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmJpYXMo
YmlhcykpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1l
dGFsOjpiaWFzKGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6
OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZs
b2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVQcm9qR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90
ZXh0dXJlUHJvakdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
UHJvakdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwg
bWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlUHJvakdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQ
ZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3Jk
LncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVQcm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6
OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBh
cmUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6Z3Jh
ZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29v
cmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQuei9jb29yZC53KTsK
KyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRz
KCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWQoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9mbG9hdDRfZmxvYXQz
X2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDNkKGRQZHgs
IGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFk
KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakdyYWRP
ZmZzZXQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9pbXBsKCplbnYudGV4
dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJv
akdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
dGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2lt
cGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29y
ZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJl
YWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQyIGNv
bnN0ICZvZmZzZXQpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHkvY29vcmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkgPiBj
b29yZC56L2Nvb3JkLncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25Db25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9q
R3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRP
ZmZzZXRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRh
bDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpn
cmFkaWVudDNkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZVByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxvZCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0
NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAor
ICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9hdDQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9j
b29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpID4gY29v
cmQuei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxv
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakxvZF90ZXh0dXJlM2Rf
ZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXQoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIs
IF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQg
bGV2ZWwsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVsKGxldmVs
KSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZl
bCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAg
ZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAo
QU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncs
IGNvb3JkLnovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZz
ZXQpID4gY29vcmQuei9jb29yZC53KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2lt
cGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAm
b2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXov
Y29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZVByb2pPZmZzZXQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0g
MCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
eiwgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0
X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJpYXMgPSAw
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1wbCgK
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlh
cyA9IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9j
b29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0
dXJlU2l6ZShlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgqZW52LnRleHR1cmUsIF9f
VkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorICAgIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Mih0ZXh0dXJlLmdldF93
aWR0aCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJl
LAorICAgIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2RlcHRoKHVpbnQobGV2ZWwpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIGludCBsZXZlbCkKK3sKKyAgICBy
ZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hl
aWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2FycmF5X3NpemUoKSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVT
aXplX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUs
CisgICAgaW50IGxldmVsKQoreworICAgIHJldHVybiBpbnQzKHRleHR1cmUuZ2V0X3dpZHRoKHVp
bnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KHVpbnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRf
YXJyYXlfc2l6ZSgpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
digpKQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBSZXR1cm5lZCBOYW1lIGlzIHZh
bGlkIGZvciBhcyBsb25nIGFzIGBidWZmZXJgIGlzIHN0aWxsIGFsaXZlLgorLy8gUmV0dXJucyBm
YWxzZSBpZiBubyB0ZW1wbGF0ZSBhcmdzIGV4aXN0LgorLy8gUmV0dXJucyBmYWxzZSBpZiBidWZm
ZXIgaXMgbm90IGxhcmdlIGVub3VnaC4KKy8vCisvLyBFeGFtcGxlOgorLy8gICJmb288MSwyPiIg
LS0+ICJmb288PiIKK3N0YXRpYyBzdGQ6OnBhaXI8TmFtZSwgYm9vbD4gTWFza1RlbXBsYXRlQXJn
cyhjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYnVmZmVyU2l6ZSwgY2hhciAqYnVmZmVyKQorewor
ICAgIGNvbnN0IGNoYXIgKmJlZ2luID0gbmFtZS5yYXdOYW1lKCkuZGF0YSgpOworICAgIGNvbnN0
IGNoYXIgKmVuZCAgID0gc3RyY2hyKGJlZ2luLCAnPCcpOworICAgIGlmICghZW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHt7fSwgZmFsc2V9OworICAgIH0KKyAgICBzaXplX3QgbiA9IGVuZCAt
IGJlZ2luOworICAgIGlmIChuICsgMyA+IGJ1ZmZlclNpemUpCisgICAgeworICAgICAgICByZXR1
cm4ge3t9LCBmYWxzZX07CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytp
KQorICAgIHsKKyAgICAgICAgYnVmZmVyW2ldID0gYmVnaW5baV07CisgICAgfQorICAgIGJ1ZmZl
cltuICsgMF0gPSAnPCc7CisgICAgYnVmZmVyW24gKyAxXSA9ICc+JzsKKyAgICBidWZmZXJbbiAr
IDJdID0gJ1wwJzsKKyAgICByZXR1cm4ge05hbWUoYnVmZmVyLCBuYW1lLnN5bWJvbFR5cGUoKSks
IHRydWV9OworfQorCitQcm9ncmFtUHJlbHVkZTo6RnVuY1RvRW1pdHRlciBQcm9ncmFtUHJlbHVk
ZTo6QnVpbGRGdW5jVG9FbWl0dGVyKCkKK3sKKyNkZWZpbmUgRU1JVF9NRVRIT0QobWV0aG9kKSBc
CisgICAgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJikgLT4gdm9pZCB7
IHJldHVybiBwcC5tZXRob2QoKTsgfQorICAgIEZ1bmNUb0VtaXR0ZXIgbWFwOworCisgICAgYXV0
byBwdXQgPSBbJl0oTmFtZSBuYW1lLCBGdW5jRW1pdHRlciBlbWl0dGVyKSB7CisgICAgICAgIEZ1
bmNFbWl0dGVyICZkZXN0ID0gbWFwW25hbWVdOworICAgICAgICBBU1NFUlQoIWRlc3QpOworICAg
ICAgICBkZXN0ID0gZW1pdHRlcjsKKyAgICB9OworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShj
b25zdCBjaGFyICpuYW1lU3RyLCBGdW5jRW1pdHRlciBlbWl0dGVyKSB7CisgICAgICAgIE5hbWUg
bmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAgICAgICAgcHV0KG5h
bWUsIGVtaXR0ZXIpOworICAgIH07CisKKyAgICBhdXRvIHB1dEJ1aWx0SW4gPSBbJl0oY29uc3Qg
Y2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1lIG5hbWUo
bmFtZVN0ciwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisgICAgICAgIHB1dChuYW1lLCBlbWl0dGVy
KTsKKyAgICB9OworCisgICAgcHV0QW5nbGUoImFkZHJlc3NvZiIsIEVNSVRfTUVUSE9EKGFkZHJl
c3NvZikpOworICAgIHB1dEFuZ2xlKCJjYXN0PD4iLCBFTUlUX01FVEhPRChjYXN0TWF0cml4KSk7
CisgICAgcHV0QW5nbGUoImVsZW1fcmVmIiwgRU1JVF9NRVRIT0QodmVjdG9yRWxlbVJlZikpOwor
ICAgIHB1dEFuZ2xlKCJmbGF0dGVuIiwgRU1JVF9NRVRIT0QoZmxhdHRlbkFycmF5KSk7CisgICAg
cHV0QW5nbGUoImlub3V0IiwgRU1JVF9NRVRIT0QoaW5vdXQpKTsKKyAgICBwdXRBbmdsZSgib3V0
IiwgRU1JVF9NRVRIT0Qob3V0KSk7CisgICAgcHV0QW5nbGUoInN3aXp6bGVfcmVmIiwgRU1JVF9N
RVRIT0Qoc3dpenpsZVJlZikpOworCisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaCIsIEVNSVRf
TUVUSE9EKHRleGVsRmV0Y2gpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoT2Zmc2V0Iiwg
RU1JVF9NRVRIT0QodGV4ZWxGZXRjaE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUi
LCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAg
ICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4
dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSku
cmF3TmFtZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdl
dFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNp
YyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAg
ICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBib29sIGJpYXMg
ICAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtQ291bnQoKSA+PSAzOworICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9
PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChiaWFzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGgyZF9m
bG9hdDNfZmxvYXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGJpYXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgi
bWV0YWw6OmRlcHRoMmRfYXJyYXk8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9h
dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVy
ZV9kZXB0aDJkYXJyYXlfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8Iikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBw
LnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzX2Zsb2F0KCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0
MygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDRfZmxvYXQoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJy
YXlfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChiaWFzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBwcC50ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MigpOworICAgICAgICB9
CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3Jk
TiA9PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9hdCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19m
bG9hdDMoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVp
bHRJbigidGV4dHVyZTFETG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFETG9kKSk7CisgICAgcHV0
QnVpbHRJbigidGV4dHVyZTFEUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFByb2opKTsKKyAg
ICBwdXRCdWlsdEluKCJ0ZXh0dXJlMURQcm9qTG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFEUHJv
akxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRCIsIEVNSVRfTUVUSE9EKHRleHR1cmUy
RCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUy
RExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0
dXJlMkRQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNETG9kIiwgRU1JVF9NRVRIT0Qo
dGV4dHVyZTNETG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvaiIsIEVNSVRfTUVU
SE9EKHRleHR1cmUzRFByb2opKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlM0RQcm9qTG9kIiwg
RU1JVF9NRVRIT0QodGV4dHVyZTNEUHJvakxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVD
dWJlIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmUpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
Q3ViZUxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlTG9kKSk7CisgICAgcHV0QnVpbHRJbigi
dGV4dHVyZUN1YmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmVQcm9qKSk7CisgICAgcHV0
QnVpbHRJbigidGV4dHVyZUN1YmVQcm9qTG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmVQcm9q
TG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTJEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRl
eHR1cmUyRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZCIsIFtdKFByb2dy
YW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IElt
bXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5h
bWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7
CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSkt
PmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQu
Z2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNv
b3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAg
ICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQZHhO
ICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAz
ICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBw
LnRleHR1cmVHcmFkX2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6
OmRlcHRoMmRfYXJyYXk8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2lj
ID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkX2RlcHRo
MmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0
M19mbG9hdDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMyAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBwcC50ZXh0dXJlR3JhZF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0MygpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxv
YXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRG
bG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7CisgICAgICAgIH0K
KyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVHcmFkT2Zm
c2V0IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAg
ICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdl
dFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkpLnJhd05hbWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVu
Yy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3Jk
QmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAg
ICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlwZSgpOworICAgICAgICBj
b25zdCBpbnQgZFBkeE4gICAgICAgICAgICAgPSBkUGR4LmdldE5vbWluYWxTaXplKCk7CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zs
b2F0Ml9pbnQyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9h
dDJfaW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJl
TmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
NCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50Mygp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdp
bnNXaXRoKCJtZXRhbDo6dGV4dHVyZWN1YmU8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQ
ZHhOID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVHcmFkT2Zmc2V0X3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzX2ludDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxv
YXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0g
VEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxv
YXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSBkUGR4TikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXRO
X2Zsb2F0Tl9mbG9hdE5faW50TigpOworICAgICAgICB9CisgICAgICAgIFRPRE8oKTsKKyAgICB9
KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlTG9kIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBj
b25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRl
eHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFt
KDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUoKTsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworICAg
ICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsK
KyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNp
emUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJk
PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcHAudGV4dHVyZUxvZF9kZXB0aDJkX2Zsb2F0MygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4
dHVyZTJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0NCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgICAgICB9CisgICAgICAgIGlmIChj
b29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOwor
ICAgICAgICB9CisgICAgICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0
dXJlTG9kT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZUxvZE9mZnNldCkpOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmVPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJlT2Zmc2V0KSk7CisgICAg
cHV0QnVpbHRJbigidGV4dHVyZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvaikpOworICAg
IHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29u
c3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0
dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgw
KS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRU
eXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAg
ICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7Cisg
ICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXpl
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBk
eC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgi
bWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2lj
ID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9k
ZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8Iikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zs
b2F0M19mbG9hdDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9
PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX2dl
bmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9
PSAyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX2dl
bmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7
CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgW10oUHJv
Z3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAgICAgY29uc3Qg
SW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBl
TmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUo
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgx
KS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29y
ZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0g
Y29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAg
ICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBpbnQgZFBk
eE4gICAgICAgICAgICAgPSBkUGR4LmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0
dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50
MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5i
ZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBk
UGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlUHJvakdyYWRPZmZzZXRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFz
aWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxv
YXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRPZmZzZXRf
Z2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgICAgIH0KKyAgICAgICAg
VE9ETygpOworICAgIH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qTG9kIiwgW10oUHJv
Z3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAgICAgY29uc3Qg
SW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBl
TmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUo
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgx
KS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29y
ZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0g
Y29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dp
dGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9h
dDQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX3Rl
eHR1cmUzZF9mbG9hdDQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQz
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0NCgpOworICAgICAgICB9CisgICAgICAgIFRPRE8o
KTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIEVNSVRf
TUVUSE9EKHRleHR1cmVQcm9qTG9kT2Zmc2V0KSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVBy
b2pPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvak9mZnNldCkpOworICAgIHB1dEJ1aWx0
SW4oInRleHR1cmVTaXplIiwgRU1JVF9NRVRIT0QodGV4dHVyZVNpemUpKTsKKworICAgIHJldHVy
biBtYXA7CisKKyN1bmRlZiBFTUlUX01FVEhPRAorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2
aXNpdE9wZXJhdG9yKFRPcGVyYXRvciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSkKK3sKKyAgICBzd2l0Y2ggKG9wKQorICAg
IHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJhZGlhbnM6CisgICAgICAgICAgICByYWRp
YW5zKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERl
Z3JlZXM6CisgICAgICAgICAgICBkZWdyZWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAgICAgICBhdGFuKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1vZDoKKyAgICAgICAgICAg
IG1vZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BS
ZWZyYWN0OgorICAgICAgICAgICAgcmVmcmFjdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXN0YW5jZToKKyAgICAgICAgICAgIGRpc3RhbmNlKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoK
KyAgICAgICAgICAgIGxlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BEb3Q6CisgICAgICAgICAgICBkb3QoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorICAgICAgICAgICAgbm9y
bWFsaXplKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZhY2Vmb3J3YXJkOgorICAgICAgICAgICAgZmFjZWZvcndhcmQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmbGVjdDoKKyAgICAgICAgICAgIHJl
ZmxlY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTaW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3M6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BUYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNp
bmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3NoOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wVGFuaDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzaW5oOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvc2g6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BB
dGFuaDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFiczoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEZtYToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvdzoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDI6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2c6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMb2cyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3FydDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRnJhY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFJvdW5kRXZlbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1vZGY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZGV4cDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZyZXhwOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZXNx
cnQ6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChh
cmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gRXZlbiBpZiBBcmcwIGlzIGEgdmVjdG9yIG9yIG1hdHJpeCwgaXQgY291bGQgYWxz
byBiZSBhbiBhcnJheS4KKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFy
Z1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXF1YWxB
cnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc1Zl
Y3RvcigpICYmIGFyZ1R5cGUxLT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG5vdEVxdWFsVmVjdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChhcmdUeXBlMC0+Z2V0U3RydWN0KCkgJiYgYXJnVHlwZTEtPmdldFN0cnVjdCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vdEVxdWFsU3RydWN0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLgorICAgICAgICAgICAgaWYgKGFyZ1R5
cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBub3RFcXVhbEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ3Jvc3M6CisgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpZ246CisgICAgICAgICAgICBzaWduKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2xhbXA6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BNaW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaXg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BTdGVwOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWxsOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
QW55OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSXNuYW46CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERGZHg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR5OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRndpZHRoOgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERldGVybWluYW50OgorICAgICAgICAgICAgaW5j
bHVkZV9tZXRhbF9tYXRyaXgoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkg
JiYgYXJnVHlwZTEtPmlzU2NhbGFyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YWRkTWF0cml4U2NhbGFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUw
LT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKyAgICAgICAgICAg
IGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRXaXNlRGl2aWRlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNN
YXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsTWF0cml4Q29t
cG9uZW50V2lzZToKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSAmJiBhcmdU
eXBlMS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21wb25l
bnRXaXNlTXVsdGlwbHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAgICBvdXRl
clByb2R1Y3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbnZlcnNlOgorICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlMC0+Z2V0Q29scygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAg
ICAgaW52ZXJzZTIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICBpbnZlcnNlMygpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAg
ICAgIGludmVyc2U0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgICAgICBtYXRtdWxBc3NpZ24oKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVJbmNyZW1l
bnQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcHJlSW5jcmVtZW50TWF0cml4KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3Jl
bWVudDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBwb3N0SW5jcmVtZW50TWF0cml4KCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVj
cmVtZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHByZURlY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RE
ZWNyZW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcG9zdERlY3JlbWVudE1hdHJpeCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BOZWdhdGl2ZToKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZWdhdGVNYXRyaXgo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdFNoaWZ0TGVmdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNo
aWZ0UmlnaHQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdHdpc2VPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuQ29tcG9uZW50
V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRX
aXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbENvbXBvbmVu
dFdpc2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkNvbXBvbmVudFdp
c2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9n
aWNhbEFuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzU2NhbGFyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRy
aXg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCcmVhazoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnRpbnVlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eEluZGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9JbnQ6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFVpbnRCaXRzVG9GbG9hdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1Rv
VWludDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE51bGw6CisgICAgICAgICAgICAvLyBk
byBub3RoaW5nCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wS2lsbDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm0yeDE2Ogor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtMngxNjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBh
Y2tTbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtMngxNjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtNHg4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wVW5wYWNrU25vcm00eDg6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3BhY2soKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrSGFsZjJ4
MTY6CisgICAgICAgICAgICBwYWNrX2hhbGZfMngxNigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHVu
cGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkUmV2ZXJz
ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZpbmRNU0I6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW11bEV4
dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11bEV4dGVuZGVkOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
QXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJC
dWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVySW1hZ2U6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyU2hhcmVkOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWlu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWlj
T3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW1pdFZlcnRleDoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2ZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNr
RG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja0RvdWJsZTJ4MzI6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIFRP
RE8oKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BD
b25zdHJ1Y3Q6CisgICAgICAgICAgICBBU1NFUlQoIWZ1bmMpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxGdW5jdGlvbkluQVNUOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgorICAgICAgICAgICAgQVNTRVJU
KGZ1bmMpOworICAgICAgICAgICAgaWYgKG1IYW5kbGVkLmluc2VydChmdW5jKS5zZWNvbmQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lKCpmdW5jKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvIGVuZCA9IG1GdW5jVG9FbWl0dGVyLmVuZCgpOworICAg
ICAgICAgICAgICAgIGF1dG8gaXRlciAgICAgID0gbUZ1bmNUb0VtaXR0ZXIuZmluZChuYW1lKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclszMl07CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gbWFzayA9IE1hc2tUZW1wbGF0ZUFyZ3MobmFtZSwgc2l6ZW9mKGJ1ZmZlciksIGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrLnNlY29uZCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IG1GdW5jVG9FbWl0dGVyLmZpbmQo
bWFzay5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byAmZW1pdHRlciA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdHRlcigqdGhpcywgKmZ1bmMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBQcm9n
cmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShjb25zdCBOYW1lICZuYW1lLCBjb25zdCBUVHlwZSAm
dHlwZSkKK3sKKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5cGUuZ2V0U3RydWN0KCkp
CisgICAgeworICAgICAgICBjb25zdCBOYW1lIHR5cGVOYW1lKCpzKTsKKyAgICAgICAgaWYgKHR5
cGVOYW1lLmJlZ2luc1dpdGgoTmFtZSgiVGV4dHVyZUVudjwiKSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRleHR1cmVFbnYoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBpZiAobmFtZSA9PSBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShj
b25zdCBUVmFyaWFibGUgJnZhcikKK3sKKyAgICBpZiAobUhhbmRsZWQuaW5zZXJ0KCZ2YXIpLnNl
Y29uZCkKKyAgICB7CisgICAgICAgIHZpc2l0VmFyaWFibGUoTmFtZSh2YXIpLCB2YXIuZ2V0VHlw
ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0U3RydWN0dXJlKGNv
bnN0IFRTdHJ1Y3R1cmUgJnMpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmcykuc2Vjb25k
KQorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogcy5maWVsZHMoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQtPnR5cGUo
KTsKKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGUoTmFtZSgqZmllbGQpLCB0eXBlKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBl
ICA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpOworICAgIGNvbnN0IFRUeXBlICZyaWdodFR5
cGUgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2Rl
LT5nZXRPcCgpLCBudWxscHRyLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtVW5hcnkgKm5vZGUpCit7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBub2RlLT5n
ZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKyAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCks
IG51bGxwdHIsICZhcmdUeXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
UHJlbHVkZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5v
ZGUpCit7CisgICAgY29uc3Qgc2l6ZV90IGFyZ0NvdW50ID0gbm9kZS0+Z2V0Q2hpbGRDb3VudCgp
OworCisgICAgYXV0byBnZXRBcmdUeXBlID0gW25vZGUsIGFyZ0NvdW50XShzaXplX3QgaW5kZXgp
IC0+IGNvbnN0IFRUeXBlICYgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBhcmdDb3VudCk7Cisg
ICAgICAgIFRJbnRlcm1UeXBlZCAqYXJnID0gbm9kZS0+Z2V0Q2hpbGROb2RlKGluZGV4KS0+Z2V0
QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgcmV0dXJuIGFyZy0+Z2V0
VHlwZSgpOworICAgIH07CisKKyAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBub2RlLT5nZXRG
dW5jdGlvbigpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRDaGlsZENvdW50KCkpCisgICAgewor
ICAgICAgICBjYXNlIDA6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9k
ZS0+Z2V0T3AoKSwgZnVuYywgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJn
VHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5n
ZXRPcCgpLCBmdW5jLCAmYXJnVHlwZTApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9
IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCks
IGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAm
YXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUxID0gZ2V0QXJnVHlwZSgxKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0
T3AoKSwgZnVuYywgJmFyZ1R5cGUwLCAmYXJnVHlwZTEpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1QcmVsdWRl
Ojp2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpCit7Cisg
ICAgRGVjbGFyYXRpb24gZGVjbCAgPSBWaWV3RGVjbGFyYXRpb24oKm5vZGUpOworICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlwZSgpOworICAgIGlmICh0eXBlLmlzU3Ry
dWN0U3BlY2lmaWVyKCkpCisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0gdHlw
ZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKHMpOworICAgICAgICB2aXNpdFN0cnVjdHVy
ZSgqcyk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW1QcmVsdWRl
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKQoreworICAgIHZpc2l0VmFyaWFibGUo
bm9kZS0+dmFyaWFibGUoKSk7Cit9CisKK2Jvb2wgc2g6OkVtaXRQcm9ncmFtUHJlbHVkZShUSW50
ZXJtQmxvY2sgJnJvb3QsIFRJbmZvU2lua0Jhc2UgJm91dCwgY29uc3QgUHJvZ3JhbVByZWx1ZGVD
b25maWcgJnBwYykKK3sKKyAgICBQcm9ncmFtUHJlbHVkZSBwcm9ncmFtUHJlbHVkZShvdXQsIHBw
Yyk7CisgICAgcm9vdC50cmF2ZXJzZSgmcHJvZ3JhbVByZWx1ZGUpOworICAgIHJldHVybiB0cnVl
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDA0MTNmNTc2OTJhMDUzNGRhNGQ3
ZGM5NjNhMDk4YmI4OGNkZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dy
YW1QcmVsdWRlLmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QUk9HUkFNUFJFTFVERV9IXworI2Rl
ZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QUk9HUkFNUFJF
TFVERV9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBzaAoreworCitjbGFzcyBUSW5mb1NpbmtCYXNlOwor
Y2xhc3MgVEludGVybUJsb2NrOworCitzdHJ1Y3QgUHJvZ3JhbVByZWx1ZGVDb25maWcKK3sKKyAg
ICBib29sIGhhc1N0cnVjdEVxID0gZmFsc2U7Cit9OworCisvLyBUaGlzIGVtaXRzIGZpeGVkIGhl
bHBlciBNZXRhbCBjb2RlIGRpcmVjdGx5IHdpdGhvdXQgYWRkaW5nIGNvZGUgdG8gdGhlIEFTVC4g
VGhpcyB3YWxrcyB0aGUgQVNUIHRvCisvLyBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCB3aGF0IHBy
ZWx1ZGUgTVNMIGNvZGUgaXMgbmVlZGVkIGZvciB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgQVNULiBZ
b3UgY2FuCisvLyB0aGluayBvZiB0aGlzIGFzIGVmZmVjdGl2ZWx5IGlubGluaW5nIHZhcmlvdXMg
cG9ydGlvbnMgb2YgYSBoZWxwZXIgbGlicmFyeSBpbnRvIHRoZSBlbWl0dGVkCisvLyBNZXRhbCBw
cm9ncmFtLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRQcm9ncmFtUHJlbHVkZShUSW50ZXJt
QmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUHJvZ3JhbVByZWx1ZGVDb25maWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBz
aAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1BST0dSQU1QUkVMVURFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJm
YWNlQmxvY2tzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFhODE2OTZmMDZhZjY5ZDRhZGEyNTc5YzAyZDA4YzQ4OTQ1ZmQ5ZTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApAQCAt
MCwwICsxLDEzMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFt
ZXNwYWNlCit7CisKK2NsYXNzIFJlZHVjZXIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEludGVyZmFjZUJsb2NrICosIHN0ZDo6bWFwPElt
bXV0YWJsZVN0cmluZywgY29uc3QgVFZhcmlhYmxlICo+PgorICAgICAgICBtTGlmdGVkTWFwOwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxl
ICo+IG1JbnN0YW5jZU1hcDsKKworICBwdWJsaWM6CisgICAgUmVkdWNlcihUQ29tcGlsZXIgJmNv
bXBpbGVyKSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSkge30KKworICAg
IFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0Q2hpbGRDb3Vu
dCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS5nZXRDaGls
ZE5vZGUoMCk7CisKKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2Rl
LmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJnZhciAgICAgICAgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnR5cGUgICAgICAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IHZhci5zeW1ib2xUeXBlKCk7CisgICAgICAgICAg
ICBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50
ZXJmYWNlQmxvY2soKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9s
VHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gJm5hbWVUb1ZhciA9IG1MaWZ0ZWRNYXBbaW50ZXJmYWNlQmxvY2tdOwor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiByZXBsYWNlbWVu
dHM7CisgICAgICAgICAgICAgICAgICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGludGVyZmFjZUJs
b2NrLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byAmbGlmdGVkVHlwZSA9IENsb25lVHlwZSgqZmllbGQtPnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBU
UXVhbGlmaWVyOjpFdnFVbmlmb3JtIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBUUXVhbGlmaWVyOjpFdnFHbG9iYWwpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlmdGVkVHlwZS5zZXRRdWFsaWZpZXIoVFF1YWxpZmllcjo6
RXZxVW5pZm9ybSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvICpsaWZ0ZWRWYXIgPSBu
ZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksICZsaWZ0ZWRUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZC0+c3ltYm9sVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVRvVmFy
W2ZpZWxkLT5uYW1lKCldID0gbGlmdGVkVmFyOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlbWVudHMucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
SW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2wobGlmdGVkVmFyKX0pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcmVSZXN1bHQ6Ok11
bHRpKHN0ZDo6bW92ZShyZXBsYWNlbWVudHMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxVW5pZm9ybSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byAmc3RydWN0dXJlID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICpuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBpbnRlcmZhY2VCbG9jay0+bmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKCksIGludGVyZmFjZUJsb2NrLT5zeW1ib2xUeXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvICZzdHJ1Y3RWYXIgPSBDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUobVN5bWJv
bFRhYmxlLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBhdXRvICZpbnN0YW5jZVZh
ciA9CisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgc3RydWN0dXJlLCBOYW1lKHZhciksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0sICZ0eXBlLmdldEFy
cmF5U2l6ZXMoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlTWFwWyZ2YXJdID0g
Jmluc3RhbmNlVmFyOworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyZXBsYWNl
bWVudHNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRp
b257bmV3IFRJbnRlcm1TeW1ib2woJnN0cnVjdFZhcil9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IFRJbnRlcm1EZWNsYXJhdGlvbntuZXcgVEludGVybVN5bWJvbCgmaW5zdGFuY2VWYXIp
fX07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcmVSZXN1bHQ6Ok11bHRpKHN0ZDo6YmVn
aW4ocmVwbGFjZW1lbnRzKSwgc3RkOjplbmQocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHtkZWNsTm9k
ZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRTeW1i
b2xQcmUoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGl0ID0gbUluc3RhbmNlTWFwLmZpbmQoJnZhcik7CisgICAgICAg
ICAgICBpZiAoaXQgIT0gbUluc3RhbmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaWIg
PSB2YXIuZ2V0VHlwZSgpLmdldEludGVyZmFjZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gaXQgPSBtTGlmdGVkTWFwLmZpbmQoaWIpOworICAgICAgICAgICAgaWYgKGl0ICE9
IG1MaWZ0ZWRNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byAq
bGlmdGVkVmFyID0gaXQtPnNlY29uZFt2YXIubmFtZSgpXTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobGlmdGVkVmFyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9s
KGxpZnRlZFZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN5
bWJvbE5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpSZWR1Y2VJbnRlcmZhY2VCbG9ja3MoVENv
bXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFJlZHVjZXIgcmVk
dWNlcihjb21waWxlcik7CisgICAgaWYgKCFyZWR1Y2VyLnJlYnVpbGRSb290KHJvb3QpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVEZWNs
YXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmVkdWNlSW50ZXJmYWNlQmxvY2tzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxv
Y2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzY5NWNiYWRmZDY0YTIxMmE1YmU1NTE4OWI5Y2U3MmM2OGQ3NGFl
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3Mu
aApAQCAtMCwwICsxLDM1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXworI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZB
Q0VCTE9DS1NfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8g
VGhpcyByZXdyaXRlcyBpbnRlcmZhY2UgYmxvY2sgZGVjbGFyYXRpb25zIG9ubHkuCisvLworLy8g
QWNjZXNzIG9mIGludGVyZmFjZSBibG9ja3MgaXMgbm90IHJld3JpdHRlbiAoZS5nLiBUT3BlcmF0
b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2spLiAvLworLy8gWFhYOiBeIFN0aWxsIHRy
dWU/CisvLworLy8gRXhhbXBsZToKKy8vICB1bmlmb3JtIEZvbyB7IGludCB4OyB9OworLy8gQmVj
b21lczoKKy8vICB1bmlmb3JtIGludCB4OworLy8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBG
b28geyBpbnQgeDsgfSBmb287CisvLyBCZWNvbWVzOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsg
fTsgdW5pZm9ybSBGb28geDsKKy8vCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmVkdWNlSW50ZXJm
YWNlQmxvY2tzKFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7CisKK30g
IC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZmVyZW5jZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRiNWQ4NmM3ODhlNWQ2YzIzMjE1MWI4MzYyNmY4NjAxOWEzY2JkZjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmgKQEAgLTAsMCArMSw1MCBAQAorLy8KKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9S
RUZFUkVOQ0VfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVGRVJFTkNFX0hfCisKK25hbWVzcGFjZSBzaAoreworCisvLyBTaW1pbGFyIHRvIHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXIsIGJ1dCBhbHNvIGxpZnRzIGNvbXBhcmlzb24gb3BlcmF0b3Jz
LgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBSZWYKK3sKKyAgcHVibGljOgorICAgIFJl
Zihjb25zdCBSZWYgJikgPSBkZWZhdWx0OworICAgIFJlZihSZWYgJiYpICAgICAgPSBkZWZhdWx0
OworICAgIFJlZihUICZyZWYpIDogbVB0cigmcmVmKSB7fQorCisgICAgUmVmICZvcGVyYXRvcj0o
Y29uc3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYgJm9wZXJhdG9yPShSZWYgJiYpID0gZGVm
YXVsdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJl
dHVybiAqbVB0ciA9PSAqb3RoZXIubVB0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBS
ZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciAhPSAqb3RoZXIubVB0cjsgfQorICAgIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8PSAq
b3RoZXIubVB0cjsgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBSZWYgJm90aGVyKSBjb25z
dCB7IHJldHVybiAqbVB0ciA+PSAqb3RoZXIubVB0cjsgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFJlZiAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptUHRyIDwgKm90aGVyLm1QdHI7IH0KKyAg
ICBib29sIG9wZXJhdG9yPihjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA+
ICpvdGhlci5tUHRyOyB9CisKKyAgICBUICZnZXQoKSB7IHJldHVybiAqbVB0cjsgfQorICAgIFQg
Y29uc3QgJmdldCgpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisKKyAgICBvcGVyYXRvciBUICYo
KSB7IHJldHVybiAqbVB0cjsgfQorICAgIG9wZXJhdG9yIFQgY29uc3QgJigpIGNvbnN0IHsgcmV0
dXJuICptUHRyOyB9CisKKyAgICBvcGVyYXRvciBUICooKSB7IHJldHVybiAqbVB0cjsgfQorICAg
IG9wZXJhdG9yIFQgY29uc3QgKigpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisKKyAgcHJpdmF0
ZToKKyAgICBUICptUHRyOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBDUmVm
ID0gUmVmPFQgY29uc3Q+OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRUZFUkVOQ0VfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3NzgxNzc2YzU2
MDc5MjFkZTMyMmZlOTY1OWQ4MzZlMGEzMmI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8vCisv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2NsYXNz
IFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgc3RkOjp2ZWN0b3I8c3Rk
Ojp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+PiBtRGVjbGFyZWRWYXJTdGFjazsKKworICBwdWJs
aWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWlsZChj
b21waWxlciwgdHJ1ZSwgdHJ1ZSkge30KKworICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNT
RVJUKG1EZWNsYXJlZFZhclN0YWNrLmVtcHR5KCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBQcmVS
ZXN1bHQgdmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1EZWNsYXJlZFZhclN0YWNrLmVtcGxhY2VfYmFjaygpOworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJt
U3dpdGNoICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtRGVjbGFyZWRW
YXJTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgY29uc3QgYXV0byB2YXJzID0gc3RkOjptb3ZlKG1E
ZWNsYXJlZFZhclN0YWNrLmJhY2soKSk7CisgICAgICAgIG1EZWNsYXJlZFZhclN0YWNrLnBvcF9i
YWNrKCk7CisgICAgICAgIGlmICghdmFycy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvICZibG9jayA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IFRWYXJpYWJsZSAqdmFyIDogdmFycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBibG9jay5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnt2YXJ9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLmFwcGVuZFN0YXRlbWVudCgmbm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xh
cmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtRGVjbGFyZWRWYXJT
dGFjay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50
ID0gZ2V0UGFyZW50Tm9kZSgpOworICAgICAgICAgICAgaWYgKHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpncmFuZHBhcmVu
dCA9IGdldFBhcmVudE5vZGUoMSk7CisgICAgICAgICAgICAgICAgaWYgKGdyYW5kcGFyZW50ICYm
IGdyYW5kcGFyZW50LT5nZXRBc1N3aXRjaE5vZGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIG1EZWNsYXJlZFZhclN0YWNrLmJhY2soKS5wdXNoX2JhY2so
JmRlY2wuc3ltYm9sLnZhcmlhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5p
bml0RXhwcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICpuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgJmRlY2wuc3lt
Ym9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNsLmluaXRFeHByKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KK307
CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworYm9vbCBzaDo6UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwg
VEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICghUmV3cml0ZXIoY29tcGlsZXIpLnJlYnVp
bGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xh
cmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTVhODgyMTU0NzVkMDhlNTFiMjE3NGVlM2UxYTNhYWNiNTQ0NTBjNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCkBAIC0wLDAg
KzEsNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElP
TlNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gRVhBTVBM
RQorLy8gICAgc3dpdGNoIChleHByKQorLy8gICAgeworLy8gICAgICBjYXNlIDA6CisvLyAgICAg
ICAgaW50IHggPSAwOworLy8gICAgICAgIGJyZWFrOworLy8gICAgICBjYXNlIDE6CisvLyAgICAg
ICAgaW50IHkgPSAwOworLy8gICAgICAgIHsKKy8vICAgICAgICAgIGludCB6ID0gMDsKKy8vICAg
ICAgICB9CisvLyAgICAgICAgYnJlYWs7CisvLyAgICB9CisvLyBCZWNvbWVzCisvLyAgICB7Cisv
LyAgICAgIGludCB4OworLy8gICAgICBpbnQgeTsKKy8vICAgICAgc3dpdGNoIChleHByKQorLy8g
ICAgICB7CisvLyAgICAgICAgY2FzZSAwOgorLy8gICAgICAgICAgeCA9IDA7CisvLyAgICAgICAg
ICBicmVhazsKKy8vICAgICAgICBjYXNlIDE6CisvLyAgICAgICAgICB5ID0gMDsKKy8vICAgICAg
ICAgIHsKKy8vICAgICAgICAgICAgaW50IHogPSAwOworLy8gICAgICAgICAgfQorLy8gICAgICAg
ICAgYnJlYWs7CisvLyAgICAgIH0KKy8vICAgIH0KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdy
aXRlQ2FzZURlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJv
b3QpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFQ0FTRURFQ0xBUkFUSU9OU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YWQ1YTM2YzgxYjVjNzI0MThhNmE5YmFkMTU1YTNjNDUzNmI2YmVhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKQEAgLTAsMCAr
MSwxMTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIHNoOworCituYW1lc3BhY2UKK3sKKworY2xhc3MgRmluZERlY2xhcmVk
R2xvYmFscyA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgc3RkOjp1
bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAqPiBtRGVjbGFyZWRHbG9iYWxzOworCisgICAg
RmluZERlY2xhcmVkR2xvYmFscyhUQ29tcGlsZXIgJmNvbXBpbGVyKSA6IFRJbnRlcm1SZWJ1aWxk
KGNvbXBpbGVyLCB0cnVlLCBmYWxzZSkge30KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0
aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBUSW50ZXJtTm9kZSAqZGVjbGFyYXRvck5vZGUgPSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUo
MCk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgICA9IG51bGxwdHI7CisKKyAg
ICAgICAgaWYgKFRJbnRlcm1CaW5hcnkgKmluaXROb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFz
QmluYXJ5Tm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xOb2RlID0gaW5pdE5v
ZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xOb2RlID0gZGVjbGFyYXRvck5vZGUtPmdl
dEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUp
OworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7
CisKKyAgICAgICAgbURlY2xhcmVkR2xvYmFscy5pbnNlcnQoJnZhcik7CisKKyAgICAgICAgcmV0
dXJuIHtkZWNsTm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9CisKKyAgICBQcmVSZXN1
bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAm
bm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpO
ZWl0aGVyfTsKKyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAoreworICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4g
Jm1EZWNsYXJlZEdsb2JhbHM7CisgICAgSW52YXJpYW50cyAmbU91dEludmFyaWFudHM7CisKKyAg
cHVibGljOgorICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAqPiAmZGVjbGFyZWRHbG9i
YWxzLAorICAgICAgICAgICAgIEludmFyaWFudHMgJm91dEludmFyaWFudHMpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSwKKyAgICAgICAgICBtRGVjbGFy
ZWRHbG9iYWxzKGRlY2xhcmVkR2xvYmFscyksCisgICAgICAgICAgbU91dEludmFyaWFudHMob3V0
SW52YXJpYW50cykKKyAgICB7fQorCisgICAgUHJlUmVzdWx0IHZpc2l0R2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb25QcmUoCisgICAgICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
biAmZ3FEZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wgJnN5
bWJvbE5vZGUgPSAqZ3FEZWNsTm9kZS5nZXRTeW1ib2woKTsKKyAgICAgICAgY29uc3QgVFZhcmlh
YmxlICZ2YXIgICAgICA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKworICAgICAgICBpZiAoZ3FE
ZWNsTm9kZS5pc0ludmFyaWFudCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0SW52YXJp
YW50cy5pbnNlcnQodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGVjbGFyZWRHbG9i
YWxzLmZpbmQoJnZhcikgPT0gbURlY2xhcmVkR2xvYmFscy5lbmQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybURlY2xhcmF0aW9ueyZzeW1ib2xOb2RlfTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQg
dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQor
CisgICAgUHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUs
IFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCitib29sIHNoOjpSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZj
b21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50
cyAmb3V0SW52YXJpYW50cykKK3sKKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzIGZkZyhjb21waWxl
cik7CisgICAgaWYgKCFmZGcucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICBMT0dJ
Q19FUlJPUigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUmV3cml0ZXIg
cmV3cml0ZXIoY29tcGlsZXIsIGZkZy5tRGVjbGFyZWRHbG9iYWxzLCBvdXRJbnZhcmlhbnRzKTsK
KyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMzFiY2FmYmE2Y2YxN2Zh
OWM5OGQ1MWVlODVjMzZkMzBlN2Y0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgKQEAgLTAsMCArMSw0OCBAQAorLy8KKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdS
SVRFR0xPQkFMUVVBTElGSUVSREVDTFNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCisKKyNp
bmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVHJhY2tzIFRWYXJpYWJsZXMgYW5k
IFRGaWVsZHMgdGhhdCBhcmUgbWFya2VkIGFzICJpbnZhcmlhbnQiLgorY2xhc3MgSW52YXJpYW50
cworeworICBwdWJsaWM6CisgICAgdm9pZCBpbnNlcnQoY29uc3QgVFZhcmlhYmxlICZ2YXIpIHsg
bUludmFyaWFudHMuaW5zZXJ0KCZ2YXIpOyB9CisKKyAgICB2b2lkIGluc2VydChjb25zdCBURmll
bGQgJmZpZWxkKSB7IG1JbnZhcmlhbnRzLmluc2VydCgmZmllbGQpOyB9CisKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1JbnZhcmlhbnRzLmZpbmQoJnZhcikgIT0gbUludmFyaWFudHMuZW5kKCk7CisgICAgfQorCisg
ICAgYm9vbCBjb250YWlucyhjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1JbnZhcmlhbnRzLmZpbmQoJmZpZWxkKSAhPSBtSW52YXJpYW50cy5lbmQoKTsK
KyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3Qgdm9pZCAq
PiBtSW52YXJpYW50czsKK307CisKKy8vIFRoaXMgcmV3cml0ZXMgVEludGVybUdsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9ucyBhcyBUSW50ZXJtRGVjbGFyYXRpb25zLgorLy8gYG91dEludmFyaWFu
dHNgIGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lz
ZSBiZSBsb3N0IGJ5IHN1Y2ggYQorLy8gdHJhbnNmb3JtLgorQU5HTEVfTk9fRElTQ0FSRCBib29s
IFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludmFyaWFudHMgJm91dEludmFyaWFudHMpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRF
R0xPQkFMUVVBTElGSUVSREVDTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
S2V5d29yZHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTAxNGY0MGY4MWNjYWQ1MDEzMzcwNjU4YmM4OTQyYjAwMmQ2YjhlMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCkBAIC0wLDAgKzEsNDM0IEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5j
bHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBSZW1hcHBpbmcgPSBzdGQ6OnVub3JkZXJlZF9tYXA8
Y29uc3QgVCAqLCBjb25zdCBUICo+OworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJt
UmVidWlsZAoreworICBwcml2YXRlOgorICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJm1LZXl3b3JkczsKKyAgICBJZEdlbiAmbUlkR2VuOworICAgIFJlbWFwcGluZzxURmllbGQ+
IG1vZGlmaWVkRmllbGRzOworICAgIFJlbWFwcGluZzxURmllbGRMaXN0PiBtRmllbGRMaXN0czsK
KyAgICBSZW1hcHBpbmc8VEZ1bmN0aW9uPiBtRnVuY3Rpb25zOworICAgIFJlbWFwcGluZzxUSW50
ZXJmYWNlQmxvY2s+IG1JbnRlcmZhY2VCbG9ja3M7CisgICAgUmVtYXBwaW5nPFRTdHJ1Y3R1cmU+
IG1TdHJ1Y3R1cmVzOworICAgIFJlbWFwcGluZzxUVmFyaWFibGU+IG1WYXJpYWJsZXM7CisgICAg
c3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7CisKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBJbW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVOZXdOYW1lKFQgY29u
c3QgJm9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKG9iamVjdCwgZmFs
c2UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbUlkR2VuLmNyZWF0ZU5ld05hbWUo
TmFtZShvYmplY3QpKS5yYXdOYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5hbWUo
b2JqZWN0KS5yYXdOYW1lKCk7CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkICpjcmVhdGVSZW5h
bWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisgICAgeworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBURmllbGQoY29uc3RfY2FzdDxUVHlwZSAqPigmZ2V0UmVuYW1lZE9y
T3JpZ2luYWwoKmZpZWxkLnR5cGUoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICBtYXliZUNy
ZWF0ZU5ld05hbWUoZmllbGQpLCBmaWVsZC5saW5lKCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJu
YWwpOworCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKworICAgIGNvbnN0IFRGaWVs
ZExpc3QgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0KQorICAgIHsK
KyAgICAgICAgYXV0byAqcmVuYW1lZCA9IG5ldyBURmllbGRMaXN0KCk7CisgICAgICAgIGZvciAo
Y29uc3QgVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVuYW1lZC0+cHVzaF9iYWNrKGNvbnN0X2Nhc3Q8VEZpZWxkICo+KCZnZXRSZW5hbWVkT3JPcmln
aW5hbCgqZmllbGQpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAg
fQorCisgICAgY29uc3QgVEZ1bmN0aW9uICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGdW5jdGlvbiAm
ZnVuY3Rpb24pCisgICAgeworICAgICAgICBhdXRvICpyZW5hbWVkID0KKyAgICAgICAgICAgIG5l
dyBURnVuY3Rpb24oJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdOYW1lKGZ1bmN0aW9uKSwg
U3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdl
dFJlbmFtZWRPck9yaWdpbmFsKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsK
KworICAgICAgICBjb25zdCBzaXplX3QgcGFyYW1Db3VudCA9IGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuY3Rpb24u
Z2V0UGFyYW0oaSk7CisgICAgICAgICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFt
ZWRPck9yaWdpbmFsKHBhcmFtKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24u
aXNEZWZpbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbmFtZWQtPnNldERlZmluZWQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmdW5jdGlvbi5oYXNQcm90b3R5cGVEZWNsYXJh
dGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXRIYXNQcm90b3R5cGVE
ZWNsYXJhdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAg
fQorCisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCisgICAgeworICAgICAgICBUTGF5b3V0UXVhbGlm
aWVyIGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0ZSgpOworICAgICAg
ICBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICAgICA9IGludGVyZmFjZUJsb2NrLmJsb2Nr
U3RvcmFnZSgpOworICAgICAgICBsYXlvdXRRdWFsaWZpZXIuYmluZGluZyAgICAgICAgICA9IGlu
dGVyZmFjZUJsb2NrLmJsb2NrQmluZGluZygpOworCisgICAgICAgIGF1dG8gKnJlbmFtZWQgPQor
ICAgICAgICAgICAgbmV3IFRJbnRlcmZhY2VCbG9jaygmbVN5bWJvbFRhYmxlLCBtYXliZUNyZWF0
ZU5ld05hbWUoaW50ZXJmYWNlQmxvY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2suZmllbGRzKCkpLCBsYXlvdXRR
dWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwsIGludGVyZmFjZUJsb2NrLmV4dGVuc2lvbigpKTsKKworICAgICAgICByZXR1
cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBUU3RydWN0dXJlICpjcmVhdGVSZW5hbWVk
KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGF1dG8gKnJlbmFt
ZWQgPQorICAgICAgICAgICAgbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVh
dGVOZXdOYW1lKHN0cnVjdHVyZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0UmVu
YW1lZE9yT3JpZ2luYWwoc3RydWN0dXJlLmZpZWxkcygpKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisKKyAgICAgICAgcmVuYW1lZC0+c2V0QXRHbG9iYWxTY29wZShzdHJ1Y3R1cmUuYXRH
bG9iYWxTY29wZSgpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBj
b25zdCBUVHlwZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVHlwZSAmdHlwZSkKKyAgICB7CisgICAg
ICAgIFRUeXBlICpyZW5hbWVkOworCisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1
Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVk
ID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JPcmlnaW5hbCgqc3RydWN0dXJlKSwgdHlwZS5pc1N0
cnVjdFNwZWNpZmllcigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25zdCBUSW50
ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJsb2NrID0gdHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JP
cmlnaW5hbCgqaW50ZXJmYWNlQmxvY2spLCB0eXBlLmdldFF1YWxpZmllcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldExheW91dFF1YWxpZmllcigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7
ICAvLyBDYW4ndCByZW5hbWUgYnVpbHQtaW4gdHlwZXMuCisgICAgICAgICAgICByZW5hbWVkID0g
bnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVuYW1lZC0+bWFrZUFycmF5cyh0eXBlLmdldEFycmF5U2l6ZXMo
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmVuYW1lZC0+c2V0UHJlY2lzZSh0eXBlLmlzUHJlY2lz
ZSgpKTsKKyAgICAgICAgcmVuYW1lZC0+c2V0SW52YXJpYW50KHR5cGUuaXNJbnZhcmlhbnQoKSk7
CisgICAgICAgIHJlbmFtZWQtPnNldE1lbW9yeVF1YWxpZmllcih0eXBlLmdldE1lbW9yeVF1YWxp
ZmllcigpKTsKKyAgICAgICAgcmVuYW1lZC0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5
b3V0UXVhbGlmaWVyKCkpOworCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKworICAg
IGNvbnN0IFRWYXJpYWJsZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxl
KQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xU
YWJsZSwgbWF5YmVDcmVhdGVOZXdOYW1lKHZhcmlhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHZhcmlhYmxlLmdldFR5cGUo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwsIHZhcmlhYmxlLmV4dGVuc2lvbigpKTsKKworICAgICAgICByZXR1cm4gcmVu
YW1lZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUICp0
cnlHZXRSZW5hbWVkSW1wbChjb25zdCBUICZvYmplY3QsIFJlbWFwcGluZzxUPiAqcmVtYXBwaW5n
KQorICAgIHsKKyAgICAgICAgaWYgKCFuZWVkc1JlbmFtaW5nKG9iamVjdCwgdHJ1ZSkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJlbWFwcGluZykKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdCA9IHJlbWFwcGlu
Zy0+ZmluZCgmb2JqZWN0KTsKKyAgICAgICAgICAgIGlmIChpdCAhPSByZW1hcHBpbmctPmVuZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCAqcmVuYW1lZE9iamVjdCA9
IGNyZWF0ZVJlbmFtZWQob2JqZWN0KTsKKworICAgICAgICBpZiAocmVtYXBwaW5nKQorICAgICAg
ICB7CisgICAgICAgICAgICAoKnJlbWFwcGluZylbJm9iamVjdF0gPSByZW5hbWVkT2JqZWN0Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWRPYmplY3Q7CisgICAgfQorCisgICAg
Y29uc3QgVEZpZWxkICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoZmllbGQsICZtb2RpZmllZEZpZWxkcyk7
CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmll
bGRMaXN0ICZmaWVsZExpc3QpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5R2V0UmVuYW1lZElt
cGwoZmllbGRMaXN0LCAmbUZpZWxkTGlzdHMpOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlv
biAqdHJ5R2V0UmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmMpCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoZnVuYywgJm1GdW5jdGlvbnMpOworICAgIH0KKworICAg
IGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqdHJ5R2V0UmVuYW1lZChjb25zdCBUSW50ZXJmYWNlQmxv
Y2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJ
bXBsKGludGVyZmFjZUJsb2NrLCAmbUludGVyZmFjZUJsb2Nrcyk7CisgICAgfQorCisgICAgY29u
c3QgVFN0cnVjdHVyZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoc3RydWN0dXJlLCAmbVN0
cnVjdHVyZXMpOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICp0cnlHZXRSZW5hbWVkKGNvbnN0
IFRUeXBlICZ0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHR5
cGUsIHN0YXRpY19jYXN0PFJlbWFwcGluZzxUVHlwZT4gKj4obnVsbHB0cikpOworICAgIH0KKwor
ICAgIGNvbnN0IFRWYXJpYWJsZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUVmFyaWFibGUgJnZhcmlh
YmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHZhcmlhYmxlLCAm
bVZhcmlhYmxlcyk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29u
c3QgVCAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoY29uc3QgVCAmb2JqZWN0KQorICAgIHsKKyAgICAg
ICAgY29uc3QgVCAqcmVuYW1lZCA9IHRyeUdldFJlbmFtZWQob2JqZWN0KTsKKyAgICAgICAgaWYg
KHJlbmFtZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVuYW1lZDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIGJvb2wgbmVlZHNSZW5hbWluZ0ltcGwoY29uc3QgVCAmb2JqZWN0KSBjb25z
dAorICAgIHsKKyAgICAgICAgY29uc3QgU3ltYm9sVHlwZSBzeW1ib2xUeXBlID0gb2JqZWN0LnN5
bWJvbFR5cGUoKTsKKyAgICAgICAgc3dpdGNoIChzeW1ib2xUeXBlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgICAgICBjYXNlIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWw6CisgICAgICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpVc2VyRGVmaW5lZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lID0gTmFtZShvYmplY3QpLnJhd05h
bWUoKTsKKyAgICAgICAgaWYgKG1LZXl3b3Jkcy5maW5kKG5hbWUpICE9IG1LZXl3b3Jkcy5lbmQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobmFtZS5iZWdpbnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVsZCAmZmll
bGQsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRzUmVu
YW1pbmdJbXBsKGZpZWxkKSB8fCAocmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmcoKmZpZWxkLnR5
cGUoKSwgdHJ1ZSkpOworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmll
bGRMaXN0ICZmaWVsZExpc3QsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKHJlY3Vyc2l2ZSk7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IGZp
ZWxkTGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoKmZpZWxk
LCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGdW5jdGlvbiAmZnVuY3Rpb24sIGJvb2wgcmVj
dXJzaXZlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmdJbXBsKGZ1bmN0
aW9uKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1Db3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBh
cmFtID0gKmZ1bmN0aW9uLmdldFBhcmFtKGkpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1p
bmcocGFyYW0sIHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBuZWVkc1JlbmFtaW5nSW1wbChpbnRlcmZhY2VCbG9jaykgfHwKKyAgICAgICAgICAgICAgIChy
ZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyhpbnRlcmZhY2VCbG9jay5maWVsZHMoKSwgdHJ1ZSkp
OworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1
Y3R1cmUsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmdJbXBsKHN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYg
bmVlZHNSZW5hbWluZyhzdHJ1Y3R1cmUuZmllbGRzKCksIHRydWUpKTsKKyAgICB9CisKKyAgICBi
b29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJvb2wgcmVjdXJzaXZlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUu
Z2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5n
KCpzdHJ1Y3R1cmUsIHJlY3Vyc2l2ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29u
c3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxv
Y2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVuYW1pbmcoKmludGVy
ZmFjZUJsb2NrLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRWYXJpYWJsZSAmdmFyaWFibGUsIGJvb2wgcmVjdXJzaXZl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRzUmVuYW1pbmdJbXBsKHZhcmlhYmxl
KSB8fAorICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKHZhcmlhYmxl
LmdldFR5cGUoKSwgdHJ1ZSkpOworICAgIH0KKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENv
bXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVT
dHJpbmc+ICZrZXl3b3JkcykKKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgZmFs
c2UsIHRydWUpLCBtS2V5d29yZHMoa2V5d29yZHMpLCBtSWRHZW4oaWRHZW4pCisgICAge30KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgp
OworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyh2YXIsIHRydWUpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBUVmFyaWFibGUgJnJWYXIgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXIp
OworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbCgmclZhcik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN5bWJvbE5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3Rv
Tm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICpmdW5jUHJvdG9O
b2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJnJGdW5jID0gZ2V0UmVu
YW1lZE9yT3JpZ2luYWwoZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZnVuY1By
b3RvTm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZmdW5jRGVmTm9kZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSA9ICpm
dW5jRGVmTm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgICAgICBjb25zdCBURnVuY3Rp
b24gJmZ1bmMgICAgICAgICAgICAgICAgICAgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
OworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJlbmFtZWRPck9yaWdpbmFsKGZ1
bmMpOworICAgICAgICAgICAgYXV0byAqckZ1bmNQcm90b05vZGUgICA9IG5ldyBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsKKyAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24ockZ1bmNQcm90b05vZGUsIGZ1bmNEZWZOb2RlLmdldEJvZHkoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworICAgIH0KKworICAgIFBv
c3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmFnZ3JlZ2F0ZU5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYWdncmVnYXRlTm9kZS5pc0NvbnN0cnVj
dG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYWdncmVn
YXRlTm9kZS5nZXRUeXBlKCk7CisgICAgICAgICAgICBpZiAobmVlZHNSZW5hbWluZyh0eXBlLCB0
cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmclR5cGUg
PSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh0eXBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IoclR5cGUsIGFnZ3JlZ2F0ZU5vZGUuZ2V0
U2VxdWVuY2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9k
ZS5nZXRGdW5jdGlvbigpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVu
YyA9IGdldFJlbmFtZWRPck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YWdncmVnYXRlTm9kZS5nZXRPcCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxGdW5jdGlvbkluQVNUOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChy
RnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKworICAgICAg
ICAgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
UmF3RnVuY3Rpb25DYWxsKHJGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVOb2RlLmdldFNl
cXVlbmNlKCkpOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQnVpbHRJbkZ1bmN0aW9u
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByRnVuYywgYWdncmVnYXRlTm9kZS5n
ZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpS
ZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4g
JmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJs
ZVN0cmluZz4gJmtleXdvcmRzKQoreworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBp
ZEdlbiwga2V5d29yZHMpOworICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVLZXl3b3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxNjJiYzc5YjQxMThmOWM3NDQ3NWMyNjhi
NjlkZTYyNWM1N2Y0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtl
eXdvcmRzLmgKQEAgLTAsMCArMSwyNyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFS0VZV09SRFNfSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdP
UkRTX0hfCisKKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorCituYW1l
c3BhY2Ugc2gKK3sKKworLy8gVGhpcyB3YWxrcyB0aGUgdHJlZSBhbmQgcmVuYW1lcyBhbGwgbmFt
ZXMgdGhhdCBjb25mbGljdCB3aXRoIHRoZSBpbnB1dCBga2V5d29yZHNgLgorQU5HTEVfTk9fRElT
Q0FSRCBib29sIFJld3JpdGVLZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5n
PiAma2V5d29yZHMpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFS0VZV09SRFNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZU91dEFyZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxYzAzN2Q1MjkwYWRmMjMyMjVlYjg4ZGQw
ZmI3Nzg5YWFlNTRkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91
dEFyZ3MuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorY2xhc3MgU21hbGxNdWx0aVNldAoreworICBwdWJsaWM6CisgICAgc3RydWN0IEVudHJ5
CisgICAgeworICAgICAgICBUIGVsZW07CisgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICB9Owor
CisgICAgY29uc3QgRW50cnkgKmZpbmQoY29uc3QgVCAmeCkgY29uc3QKKyAgICB7CisgICAgICAg
IGZvciAoYXV0byAmZW50cnkgOiBtRW50cmllcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHggPT0gZW50cnkuZWxlbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
JmVudHJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHNpemVfdCBtdWx0aXBsaWNpdHkoY29uc3QgVCAmeCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGNvbnN0IEVudHJ5ICplbnRyeSA9IGZpbmQoeCk7CisgICAgICAgIHJldHVy
biBlbnRyeSA/IGVudHJ5LT5jb3VudCA6IDA7CisgICAgfQorCisgICAgY29uc3QgRW50cnkgJmlu
c2VydChjb25zdCBUICZ4KQorICAgIHsKKyAgICAgICAgRW50cnkgKmVudHJ5ID0gZmluZE11dGFi
bGUoeCk7CisgICAgICAgIGlmIChlbnRyeSkKKyAgICAgICAgeworICAgICAgICAgICAgKytlbnRy
eS0+Y291bnQ7CisgICAgICAgICAgICByZXR1cm4gKmVudHJ5OworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUVudHJpZXMucHVzaF9iYWNrKHt4LCAxfSk7
CisgICAgICAgICAgICByZXR1cm4gbUVudHJpZXMuYmFjaygpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBjbGVhcigpIHsgbUVudHJpZXMuY2xlYXIoKTsgfQorCisgICAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLmVtcHR5KCk7IH0KKworICAgIHNpemVfdCB1bmlx
dWVTaXplKCkgY29uc3QgeyByZXR1cm4gbUVudHJpZXMuc2l6ZSgpOyB9CisKKyAgcHJpdmF0ZToK
KyAgICBBTkdMRV9JTkxJTkUgRW50cnkgKmZpbmRNdXRhYmxlKGNvbnN0IFQgJngpIHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8RW50cnkgKj4oZmluZCh4KSk7IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6
dmVjdG9yPEVudHJ5PiBtRW50cmllczsKK307CisKK2NvbnN0IFRWYXJpYWJsZSAqR2V0VmFyaWFi
bGUoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgVEludGVybVR5cGVkICp0eU5vZGUgPSBub2Rl
LmdldEFzVHlwZWQoKTsKKyAgICBBU1NFUlQodHlOb2RlKTsKKyAgICBpZiAoVEludGVybVN5bWJv
bCAqc3ltYm9sID0gdHlOb2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAmc3ltYm9sLT52YXJpYWJsZSgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgICBTbWFsbE11
bHRpU2V0PGNvbnN0IFRWYXJpYWJsZSAqPiBtVmFyQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVy
CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIo
KSBvdmVycmlkZSB7IEFTU0VSVChtVmFyQnVmZmVyLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRl
cihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICAgICAgOiBU
SW50ZXJtUmVidWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVu
dikKKyAgICB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFn
Z3JlZ2F0ZSAmYWdncmVnYXRlTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCht
VmFyQnVmZmVyLmVtcHR5KCkpOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYyA9IGFn
Z3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgaWYgKCFmdW5jKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICAgICAgfQorCisgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCk7Cisg
ICAgICAgIHNpemVfdCBhcmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworCisgICAgICAgIGF1
dG8gZ2V0UGFyYW1RdWFsaWZpZXIgPSBbJl0oc2l6ZV90IGkpIHsKKyAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmcGFyYW0gICAgID0gKmZ1bmMtPmdldFBhcmFtKGkpOworICAgICAgICAgICAg
Y29uc3QgVFR5cGUgJnBhcmFtVHlwZSAgICAgPSBwYXJhbS5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBjb25zdCBUUXVhbGlmaWVyIHBhcmFtUXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsK
KyAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1
YWxpZmllcjo6RXZxSW5PdXQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghbVN5bWJvbEVudi5p
c1JlZmVyZW5jZShwYXJhbSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKHBhcmFtLCBBZGRyZXNzU3BhY2U6
OlRocmVhZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFyYW1RdWFsOworICAgICAgICB9
OworCisgICAgICAgIGJvb2wgbWlnaHRBbGlhcyA9IGZhbHNlOworCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBnZXRQYXJhbVF1YWxpZmllcihpKTsKKworICAgICAg
ICAgICAgc3dpdGNoIChwYXJhbVF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2FzZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAqdmFyID0gR2V0VmFyaWFibGUoKmFyZ3NbaV0pOworICAgICAgICAgICAgICAg
ICAgICBpZiAobVZhckJ1ZmZlci5pbnNlcnQodmFyKS5jb3VudCA+IDEpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0QWxpYXMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgaSAgICAgICAgICA9IGFyZ0NvdW50OworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBib29sIGhhc0luZGV0ZXJtaW5h
dGVWYXIgPSBtVmFyQnVmZmVyLmZpbmQobnVsbHB0cik7CisKKyAgICAgICAgaWYgKCFtaWdodEFs
aWFzKQorICAgICAgICB7CisgICAgICAgICAgICBtaWdodEFsaWFzID0gaGFzSW5kZXRlcm1pbmF0
ZVZhciAmJiBtVmFyQnVmZmVyLnVuaXF1ZVNpemUoKSA+IDE7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobWlnaHRBbGlhcykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmdDb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCAqYXJnID0gYXJnc1tpXS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgICAg
IEFTU0VSVChhcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyICAgICAg
ID0gR2V0VmFyaWFibGUoKmFyZyk7CisgICAgICAgICAgICAgICAgY29uc3QgVFF1YWxpZmllciBw
YXJhbVF1YWwgPSBnZXRQYXJhbVF1YWxpZmllcihpKTsKKworICAgICAgICAgICAgICAgIGlmICho
YXNJbmRldGVybWluYXRlVmFyIHx8IG1WYXJCdWZmZXIubXVsdGlwbGljaXR5KHZhcikgPiAxKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwYXJhbVF1YWwp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFF1
YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSAm
bVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJvdXQiKSwgYXJnLT5nZXRUeXBl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVNlcXVlbmNle2FyZ30pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb
aV0gPSAmbVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmFtZSgiaW5vdXQiKSwgYXJnLT5nZXRUeXBlKCksICpuZXcgVEludGVy
bVNlcXVlbmNle2FyZ30pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbVZhckJ1ZmZlci5jbGVhcigpOworCisg
ICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6UmV3cml0ZU91dEFyZ3MoVENvbXBpbGVyICZjb21waWxl
ciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAgICBSZXdy
aXRlciByZXdyaXRlcihjb21waWxlciwgc3ltYm9sRW52KTsKKyAgICBpZiAoIXJld3JpdGVyLnJl
YnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJn
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTgyYjc0N2Ez
ZTdkZWZlMjRiZGI1OWU2MjFjYTc0NTBlMzFjZDQxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURU9V
VEFSR1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfUkVXUklURU9VVEFSR1NfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8g
ZS5nLjoKKy8vICAgIC8qdm9pZCBmb28ob3V0IGludCB4LCBpbm91dCBpbnQgeSkqLworLy8gICAg
Zm9vKHosIHcpOworLy8gYmVjb21lcworLy8gICAgZm9vKE91dCh6KSwgSW5PdXQodykpOworLy8g
dW5sZXNzIGB6YCBhbmQgYHdgIGFyZSBkZXRlY3RlZCB0byBuZXZlciBhbGlhcy4KKy8vIFRoZSB0
cmFuc2xhdGVkIGV4YW1wbGUgZWZmZWN0aXZlbHkgYmVoYXZlcyB0aGUgc2FtZSBhczoKKy8vICAg
IGludCBfMTsKKy8vICAgIGludCBfMiA9IHc7CisvLyAgICBmb28oXzEsIF8yKTsKKy8vICAgIHog
PSBfMTsKKy8vICAgIHcgPSBfMjsKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlT3V0QXJn
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3lt
Ym9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURU9VVEFSR1NfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlUGlwZWxpbmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjM3ZTIzMzAwYWI5OWUxMGZiODBhYzhmNWZm
MGM2ZTE4MDY2MWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBl
bGluZXMuY3BwCkBAIC0wLDAgKzEsOTM4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y3N0cmlu
Zz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVBpcGVsaW5lcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UHJ1bmVOb09wcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Zp
bmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
UmVidWlsZC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworbmFtZXNwYWNlCit7CisKK3VzaW5nIFZhcmlhYmxlU2V0ICA9IHN0ZDo6dW5vcmRl
cmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj47Cit1c2luZyBWYXJpYWJsZUxpc3QgPSBzdGQ6OnZl
Y3Rvcjxjb25zdCBUVmFyaWFibGUgKj47CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0
cnVjdCBQaXBlbGluZVN0cnVjdEluZm8KK3sKKyAgICBWYXJpYWJsZVNldCBwaXBlbGluZVZhcmlh
YmxlczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdDsKKyAg
ICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQgPSBudWxscHRyOworICAg
IGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5hbCA9IG51bGxwdHI7CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHBpcGVsaW5lU3RydWN0
LmlzVG90YWxseUVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGlu
ZVZhcmlhYmxlcy5lbXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lU3Ry
dWN0LmlzVG90YWxseUZ1bGwoKSk7CisgICAgICAgICAgICBBU1NFUlQoIXBpcGVsaW5lVmFyaWFi
bGVzLmVtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorfTsKKworY2xhc3MgR2VuZXJhdGVQaXBlbGluZVN0cnVjdCA6IHByaXZhdGUgVEludGVybVJl
YnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAg
IFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKyAgICBJbnZhcmlhbnRzICZtSW52YXJpYW50czsKKyAg
ICBWYXJpYWJsZUxpc3QgbVBpcGVsaW5lVmFyaWFibGVMaXN0OworICAgIElkR2VuICZtSWRHZW47
CisgICAgUGlwZWxpbmVTdHJ1Y3RJbmZvIG1JbmZvOworCisgIHB1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBFeGVjKFBpcGVsaW5lU3RydWN0SW5mbyAmb3V0LAorICAgICAgICAgICAgICAgICAgICAg
VENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52
YXJpYW50cykKKyAgICB7CisgICAgICAgIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qgc2VsZihjb21w
aWxlciwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpOworICAgICAgICBp
ZiAoIXNlbGYuZXhlYyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIG91dCA9IHNlbGYubUluZm87CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QoVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cykKKyAgICAgICAgOiBU
SW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksCisgICAgICAgICAgbVBpcGVsaW5l
KHBpcGVsaW5lKSwKKyAgICAgICAgICBtU3ltYm9sRW52KHN5bWJvbEVudiksCisgICAgICAgICAg
bUludmFyaWFudHMoaW52YXJpYW50cyksCisgICAgICAgICAgbUlkR2VuKGlkR2VuKQorICAgIHt9
CisKKyAgICBib29sIGV4ZWMoVEludGVybUJsb2NrICZyb290KQorICAgIHsKKyAgICAgICAgaWYg
KCFyZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmVtcHR5
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgVEludGVybVNlcXVlbmNlIHNlcTsKKworICAgICAgICBjb25zdCBUU3RydWN0dXJlICZw
aXBlbGluZVN0cnVjdCA9IFsmXSgpIC0+IGNvbnN0IFRTdHJ1Y3R1cmUgJiB7CisgICAgICAgICAg
ICBpZiAobVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyLT5nZXRUeXBlKCku
Z2V0U3RydWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qo
cm9vdCwgc2VxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSgpOworCisgICAgICAgIE1vZGlm
aWVkU3RydWN0TWFjaGluZXJpZXMgbW9kaWZpZWRNYWNoaW5lcmllczsKKyAgICAgICAgY29uc3Qg
Ym9vbCBtb2RpZmllZCA9IFRyeUNyZWF0ZU1vZGlmaWVkU3RydWN0KAorICAgICAgICAgICAgbVN5
bWJvbEVudiwgbUlkR2VuLCBtUGlwZWxpbmUuZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlDb25maWcoKSwg
cGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0VHlwZU5hbWUo
UGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSwgbW9kaWZpZWRNYWNoaW5lcmllcyk7CisKKyAg
ICAgICAgaWYgKG1vZGlmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVs
aW5lLnR5cGUgIT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpOworICAgICAgICAgICAgQVNTRVJU
KCFtUGlwZWxpbmUuZ2xvYmFsSW5zdGFuY2VWYXIpOyAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVu
IGJ5IGNvbnN0cnVjdGlvbi4KKworICAgICAgICAgICAgYXV0byBnZXRGdW5jdGlvbiA9IFtdKHNo
OjpUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVjbCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jRGVjbCA/IGZ1bmNEZWNsLT5nZXRGdW5jdGlvbigpIDogbnVsbHB0cjsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gbW9kaWZpZWRN
YWNoaW5lcmllcy5zaXplKCk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZSA+IDApOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSA9
IG1vZGlmaWVkTWFjaGluZXJpZXMuYXQoaSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hp
bmVyeS5tb2RpZmllZFN0cnVjdCk7CisKKyAgICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG5l
dyBUSW50ZXJtRGVjbGFyYXRpb257CisgICAgICAgICAgICAgICAgICAgICZDcmVhdGVTdHJ1Y3RU
eXBlVmFyaWFibGUobVN5bWJvbFRhYmxlLCAqbWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0KX0pOwor
CisgICAgICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1hY2hpbmVyeS5m
dW5jTW9kaWZpZWRUb09yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFj
ayhtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAg
ICAgICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1hY2hpbmVyeS5mdW5jTW9kaWZpZWRUb09y
aWdpbmFsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBz
aXplIC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLmZ1
bmNPcmlnaW5hbFRvTW9kaWZpZWQgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY09yaWdpbmFs
VG9Nb2RpZmllZCk7CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLmZ1bmNNb2RpZmllZFRvT3Jp
Z2luYWwgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisK
KyAgICAgICAgICAgICAgICAgICAgbUluZm8ucGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwgPSAmcGlw
ZWxpbmVTdHJ1Y3Q7CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4
dGVybmFsID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID8gbWFjaGluZXJ5Lm1v
ZGlmaWVkU3RydWN0IDogJnBpcGVsaW5lU3RydWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBpcGVsaW5lU3RydWN0OworICAgICAg
ICAgICAgbUluZm8ucGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwgPSAmcGlwZWxpbmVTdHJ1Y3Q7Cisg
ICAgICAgIH0KKworICAgICAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgm
cm9vdCksIHNlcSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIHByaXZhdGU6
CisgICAgUHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUs
IFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdERlY2xh
cmF0aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCAgICAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUp
OworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IGRlY2wuc3ltYm9sLnZhcmlhYmxlKCk7
CisKKyAgICAgICAgaWYgKG1QaXBlbGluZS51c2VzKHZhcikpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IG1JbmZvLnBp
cGVsaW5lVmFyaWFibGVzLmVuZCgpKTsKKyAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lVmFyaWFi
bGVzLmluc2VydCgmdmFyKTsKKyAgICAgICAgICAgIG1QaXBlbGluZVZhcmlhYmxlTGlzdC5wdXNo
X2JhY2soJnZhcik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBkZWNsTm9kZTsKKyAgICB9CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZj
cmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KFRJbnRlcm1CbG9jayAmcm9vdCwgVEludGVybVNl
cXVlbmNlICZvdXREZWNsU2VxKQorICAgIHsKKyAgICAgICAgYXV0byAmZmllbGRzID0gKm5ldyBU
RmllbGRMaXN0KCk7CisKKyAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZToKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRWYXJpYWJsZSAqdmFyIDogbVBpcGVsaW5l
VmFyaWFibGVMaXN0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtSW52YXJpYW50cy5jb250YWlucygqdmFyKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZ2YXJUeXBlICAgICAgICAgPSB2YXItPmdldFR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSA9IHZhclR5cGUuZ2V0QmFzaWNU
eXBlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmdGV4dHVyZUVu
diA9IG1TeW1ib2xFbnYuZ2V0VGV4dHVyZUVudihzYW1wbGVyVHlwZSk7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gKnRleHR1cmVFbnZUeXBlICAgICAgICAgPSBuZXcgVFR5cGUoJnRleHR1cmVF
bnYsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhclR5cGUuaXNBcnJheSgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52
VHlwZS0+bWFrZUFycmF5cyh2YXJUeXBlLmdldEFycmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0dXJlRW52VHlwZSwgdmFyLT5uYW1lKCks
IGtOb1NvdXJjZUxvYywgdmFyLT5zeW1ib2xUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRWYXJpYWJsZSAqdmFy
IDogbVBpcGVsaW5lVmFyaWFibGVMaXN0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAmdHlwZSAgPSBDbG9uZVR5cGUodmFyLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvICpmaWVsZCA9IG5ldyBURmllbGQoJnR5cGUsIHZhci0+bmFtZSgp
LCBrTm9Tb3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1JbnZh
cmlhbnRzLmNvbnRhaW5zKCp2YXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtSW52YXJpYW50cy5pbnNlcnQoKmZpZWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgTmFtZSBwaXBlbGluZVN0cnVjdE5hbWUgPSBtUGlw
ZWxpbmUuZ2V0U3RydWN0VHlwZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKTsKKyAg
ICAgICAgYXV0byAmcyA9ICpuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBwaXBlbGluZVN0
cnVjdE5hbWUucmF3TmFtZSgpLCAmZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBpcGVsaW5lU3RydWN0TmFtZS5zeW1ib2xUeXBlKCkpOworCisgICAgICAgIG91dERl
Y2xTZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257JkNyZWF0ZVN0cnVjdFR5cGVW
YXJpYWJsZShtU3ltYm9sVGFibGUsIHMpfSk7CisKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQor
fTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxl
PiBDcmVhdGVQaXBlbGluZU1haW5Mb2NhbFZhcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3Ry
dWN0KQoreworICAgIEFTU0VSVChwaXBlbGluZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworCisg
ICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiBwaXBlbGluZU1haW5Mb2NhbFZhcjsKKworICAg
IGF1dG8gcG9wdWxhdGVFeHRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAgICAgICAgQVNT
RVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7CisgICAgICAgIHBpcGVsaW5lTWFp
bkxvY2FsVmFyLmV4dGVybmFsID0gJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoCisgICAgICAgICAg
ICBzeW1ib2xUYWJsZSwgKnBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAgICAgICAgICAgcGlw
ZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUGlwZWxpbmU6
OlZhcmlhbnQ6Ok9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSk7CisgICAgfTsKKworICAg
IGF1dG8gcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyID0gWyZdKCkgeworICAg
ICAgICBBU1NFUlQoIXBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgcGlw
ZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwgPQorICAgICAgICAgICAgJkNyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5pbnRlcm5hbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFt
ZShQaXBlbGluZTo6VmFyaWFudDo6T3JpZ2luYWwpKTsKKyAgICB9OworCisgICAgaWYgKHBpcGVs
aW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okluc3RhbmNlSWQpCisgICAgeworICAgICAgICBw
b3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAocGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4o
KSkKKyAgICB7CisgICAgICAgIHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIoKTsKKworICAg
ICAgICBpZiAocGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsID0gcGlwZWxpbmVNYWluTG9jYWxWYXIu
ZXh0ZXJuYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmICghcGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisgICAgeworICAg
ICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcGlwZWxpbmVNYWluTG9jYWxWYXI7Cit9CisKK2NsYXNzIFBpcGVsaW5lRnVuY3Rp
b25FbnYKK3sKKyAgcHJpdmF0ZToKKyAgICBUQ29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBTeW1i
b2xFbnYgJm1TeW1ib2xFbnY7CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAg
SWRHZW4gJm1JZEdlbjsKKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJm1QaXBlbGluZUZ1bmN0aW9u
czsKKyAgICBjb25zdCBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBtUGlwZWxpbmVTdHJ1Y3Q7
CisgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFyOwor
CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRGdW5jdGlvbiAqLCBjb25zdCBURnVuY3Rp
b24gKj4gbUZ1bmNNYXA7CisKKyAgcHVibGljOgorICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYoVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3lt
Ym9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlw
ZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxU
U3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVs
aW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2FsVmFyKQorICAgICAgICA6IG1D
b21waWxlcihjb21waWxlciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAg
ICAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSksCisgICAgICAgICAg
bUlkR2VuKGlkR2VuKSwKKyAgICAgICAgICBtUGlwZWxpbmUocGlwZWxpbmUpLAorICAgICAgICAg
IG1QaXBlbGluZUZ1bmN0aW9ucyhwaXBlbGluZUZ1bmN0aW9ucyksCisgICAgICAgICAgbVBpcGVs
aW5lU3RydWN0KHBpcGVsaW5lU3RydWN0KSwKKyAgICAgICAgICBtUGlwZWxpbmVNYWluTG9jYWxW
YXIocGlwZWxpbmVNYWluTG9jYWxWYXIpCisgICAge30KKworICAgIGJvb2wgaXNPcmlnaW5hbFBp
cGVsaW5lRnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1QaXBlbGluZUZ1bmN0aW9ucy5maW5kKCZmdW5jKSAhPSBtUGlwZWxpbmVGdW5j
dGlvbnMuZW5kKCk7CisgICAgfQorCisgICAgYm9vbCBpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9u
KGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBt
RnVuY01hcC5maW5kKCZmdW5jKTsKKyAgICAgICAgaWYgKGl0ID09IG1GdW5jTWFwLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuICZmdW5jID09IGl0LT5zZWNvbmQ7CisgICAgfQorCisgICAgY29uc3QgVEZ1bmN0aW9u
ICZnZXRVcGRhdGVkRnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpIHx8IGlzVXBkYXRlZFBp
cGVsaW5lRnVuY3Rpb24oZnVuYykpOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqbmV3RnVu
YzsKKworICAgICAgICBhdXRvIGl0ID0gbUZ1bmNNYXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlm
IChpdCA9PSBtRnVuY01hcC5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9v
bCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworCisgICAgICAgICAgICBpZiAoaXNNYWluICYmIG1Q
aXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGZ1bmMuZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6
OkVidFZvaWQpOworICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZENo
YW5nZVJldHVyblR5cGUobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1QaXBlbGlu
ZVN0cnVjdC5leHRlcm5hbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChp
c01haW4gJiYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGlwZWxpbmUu
dHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+
IHZhcmlhYmxlczsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBt
UGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwtPmZpZWxkcygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayhuZXcgVFZhcmlhYmxlKCZtU3lt
Ym9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxkLT50eXBlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+c3ltYm9sVHlwZSgp
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVG
dW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1bmMsIHZhcmlh
Ymxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpc01haW4gJiYgbVBp
cGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+IHZhcmlhYmxlczsK
KyAgICAgICAgICAgICAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0K
KyAgICAgICAgICAgICAgICAgICAgKChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0ICopJm1Db21w
aWxlciktPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBtUGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwtPmZpZWxk
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAqdGV4dHVyZUVudiA9IGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQodGV4dHVyZUVudiAmJiB0ZXh0dXJlRW52LT5maWVsZHMoKS5zaXpl
KCkgPT0gMik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpzdWJmaWVs
ZCA6IHRleHR1cmVFbnYtPmZpZWxkcygpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSh7
ZmllbGQtPm5hbWUoKSwgc3ViZmllbGQtPm5hbWUoKX0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgVFR5cGUgJnR5cGUgICAgID0gKm5ldyBUVHlwZSgqc3ViZmllbGQtPnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5cGUuaXNBcnJheSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUubWFrZUFycmF5cyhmaWVsZC0+dHlwZSgpLT5nZXRBcnJheVNpemVz
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCAmdHlwZSwgbmFtZS5zeW1ib2xUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGVzLnB1c2hfYmFjayh2YXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlv
bi0+YWRkT3JpZ2luYWxOYW1lKHZhci0+dW5pcXVlSWQoKS5nZXQoKSwgZmllbGQtPm5hbWUoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9s
VGFibGUsIG51bGxwdHIsIGZ1bmMsIHZhcmlhYmxlcyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChpc01haW4gJiYgbVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6
Okluc3RhbmNlSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTmFtZSBuYW1lID0g
bVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZp
ZWQpOworICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xU
YWJsZSwgbmFtZS5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCksIG5hbWUuc3ltYm9sVHlwZSgp
KTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jICAgPSAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQ
YXJhbShtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1bmMsICp2YXIpOworICAgICAgICAgICAgICAg
IG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIG1QaXBlbGluZS5leHRlcm5hbEFkZHJl
c3NTcGFjZSgpKTsKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJu
YWwgPSB2YXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpc01haW4gJiYg
bVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2Nh
bFZhci5pc1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmZnVuYzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhcjsKKyAgICAgICAgICAgICAgICBBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlOworCisgICAgICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiAhbVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyID0gJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgICAgICAgICAgICAgICAgICBhZGRyZXNzU3Bh
Y2UgPSBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyID0gJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICBtU3ltYm9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVsaW5lOjpW
YXJpYW50OjpPcmlnaW5hbCkpOworICAgICAgICAgICAgICAgICAgICBhZGRyZXNzU3BhY2UgPSBt
UGlwZWxpbmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQWRkcmVzc1NwYWNlOjpUaHJlYWQ7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYm9vbCBtYXJrQXNSZWZlcmVu
Y2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChpc01haW4pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1QaXBlbGluZS50eXBlKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBl
OjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6
OkZyYWdtZW50SW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya0FzUmVmZXJlbmNl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAobWFya0FzUmVmZXJlbmNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbVN5bWJvbEVudi5tYXJrQXNSZWZlcmVuY2UoKnZhciwgYWRkcmVzc1NwYWNl
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25l
RnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0obVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUZ1bmNNYXBbJmZ1bmNdICAgPSBuZXdG
dW5jOworICAgICAgICAgICAgbUZ1bmNNYXBbbmV3RnVuY10gPSBuZXdGdW5jOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbmV3RnVuYyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKm5ld0Z1bmM7CisgICAgfQorCisgICAg
VEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpjcmVhdGVVcGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUo
CisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKyAgICB7
CisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICpmdW5jUHJvdG9Ob2RlLmdldEZ1bmN0
aW9uKCk7CisgICAgICAgIGlmICghaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24oZnVuYykgJiYg
IWlzVXBkYXRlZFBpcGVsaW5lRnVuY3Rpb24oZnVuYykpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmbmV3
RnVuYyA9IGdldFVwZGF0ZWRGdW5jdGlvbihmdW5jKTsKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGUoJm5ld0Z1bmMpOworICAgIH0KK307CisKK2NsYXNzIFVwZGF0
ZVBpcGVsaW5lRnVuY3Rpb25zIDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRl
OgorICAgIGNvbnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisgICAgY29uc3QgUGlwZWxpbmVTY29w
ZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0OworICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJp
YWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7
CisgICAgUGlwZWxpbmVGdW5jdGlvbkVudiBtRW52OworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1
bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgY29uc3QgVEZ1bmN0aW9uICptRnVuY01vZGlmaWVk
VG9PcmlnaW5hbDsKKworICBwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgVGhyZWFkUGlwZWxpbmUo
VENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBpcGVsaW5lRnVuY3Rpb25zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+
IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5l
U2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2FsVmFyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFs
KQorICAgIHsKKyAgICAgICAgVXBkYXRlUGlwZWxpbmVGdW5jdGlvbnMgc2VsZihjb21waWxlciwg
cGlwZWxpbmUsIHBpcGVsaW5lRnVuY3Rpb25zLCBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZU1haW5Mb2NhbFZhciwgaWRHZW4sIHN5
bWJvbEVudiwgZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jTW9kaWZpZWRUb09yaWdpbmFsKTsKKyAgICAgICAgaWYgKCFzZWxm
LnJlYnVpbGRSb290KHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIHByaXZhdGU6Cisg
ICAgVXBkYXRlUGlwZWxpbmVGdW5jdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlv
biAqPiAmcGlwZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxW
YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVl
KSwKKyAgICAgICAgICBtUGlwZWxpbmUocGlwZWxpbmUpLAorICAgICAgICAgIG1QaXBlbGluZVN0
cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBp
cGVsaW5lTWFpbkxvY2FsVmFyKSwKKyAgICAgICAgICBtU3ltYm9sRW52KHN5bWJvbEVudiksCisg
ICAgICAgICAgbUVudihjb21waWxlciwKKyAgICAgICAgICAgICAgIHN5bWJvbEVudiwKKyAgICAg
ICAgICAgICAgIGlkR2VuLAorICAgICAgICAgICAgICAgcGlwZWxpbmUsCisgICAgICAgICAgICAg
ICBwaXBlbGluZUZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgIHBpcGVsaW5lU3RydWN0LAorICAg
ICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKSwKKyAgICAgICAgICBtRnVuY09yaWdp
bmFsVG9Nb2RpZmllZChmdW5jT3JpZ2luYWxUb01vZGlmaWVkKSwKKyAgICAgICAgICBtRnVuY01v
ZGlmaWVkVG9PcmlnaW5hbChmdW5jTW9kaWZpZWRUb09yaWdpbmFsKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1QaXBlbGluZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworICAgIH0KKworICAgIGNv
bnN0IFRWYXJpYWJsZSAmZ2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKGNvbnN0IFRGdW5jdGlv
biAmcGlwZWxpbmVGdW5jKQorICAgIHsKKyAgICAgICAgaWYgKHBpcGVsaW5lRnVuYy5pc01haW4o
KSAmJiAobVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5N
YWluKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW1QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworICAgICAgICAgICAgcmV0dXJuICpt
UGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxpbmVGdW5jLmdldFBhcmFtQ291bnQo
KSA+IDApOworICAgICAgICAgICAgcmV0dXJuICpwaXBlbGluZUZ1bmMuZ2V0UGFyYW0oMCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBUVmFyaWFibGUgJmdldEV4dGVybmFsUGlwZWxp
bmVWYXJpYWJsZShjb25zdCBURnVuY3Rpb24gJm1haW5GdW5jKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1haW5GdW5jLmlzTWFpbigpKTsKKyAgICAgICAgaWYgKG1QaXBlbGluZU1haW5Mb2NhbFZh
ci5leHRlcm5hbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICptUGlwZWxpbmVNYWlu
TG9jYWxWYXIuZXh0ZXJuYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQobWFpbkZ1bmMuZ2V0UGFyYW1Db3VudCgpID4gMCk7CisgICAgICAg
ICAgICByZXR1cm4gKm1haW5GdW5jLmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgfQorCisg
ICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbE5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoY2FsbE5vZGUuaXNDb25zdHJ1Y3Rvcigp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZENh
bGxlZEZ1bmMgPSAqY2FsbE5vZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmICghbUVu
di5pc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihvbGRDYWxsZWRGdW5jKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0NhbGxlZEZ1bmMgPSBtRW52LmdldFVwZGF0ZWRG
dW5jdGlvbihvbGRDYWxsZWRGdW5jKTsKKworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpv
bGRPd25lckZ1bmMgPSBnZXRQYXJlbnRGdW5jdGlvbigpOworICAgICAgICAgICAgQVNTRVJUKG9s
ZE93bmVyRnVuYyk7CisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld093bmVyRnVuYyA9
IG1FbnYuZ2V0VXBkYXRlZEZ1bmN0aW9uKCpvbGRPd25lckZ1bmMpOworCisgICAgICAgICAgICBy
ZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAg
ICAgICBuZXdDYWxsZWRGdW5jLCAmQ2xvbmVTZXF1ZW5jZUFuZFByZXBlbmQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTm9kZS5nZXRTZXF1ZW5jZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVy
bmFsUGlwZWxpbmVWYXJpYWJsZShuZXdPd25lckZ1bmMpKSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVu
di5jcmVhdGVVcGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAg
IGlmIChuZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmdW5jUHJvdG9Ob2RlOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqbmV3RnVu
Y1Byb3RvTm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0
aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZmdW5jRGVmTm9kZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChmdW5jRGVmTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZpc2l0TWFpbihmdW5jRGVmTm9kZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmlz
aXROb25NYWluKGZ1bmNEZWZOb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1O
b2RlICZ2aXNpdE5vbk1haW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUp
CisgICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUg
PSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgQVNTRVJUKCFm
dW5jUHJvdG9Ob2RlLmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5j
cmVhdGVVcGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlm
IChuZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmdW5jRGVmTm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAm
ZnVuYyA9ICpuZXdGdW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQo
IWZ1bmMuaXNNYWluKCkpOworCisgICAgICAgIFRJbnRlcm1CbG9jayAqYm9keSA9IGZ1bmNEZWZO
b2RlLmdldEJvZHkoKTsKKworICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uKG5ld0Z1bmNQcm90b05vZGUsIGJvZHkpOworICAgIH0KKworICAgIFRJbnRlcm1Ob2Rl
ICZ2aXNpdE1haW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpCisgICAg
eworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVu
Y0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgQVNTRVJUKGZ1bmNQcm90
b05vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZSAqbmV3RnVuY1Byb3RvTm9kZSA9CisgICAgICAgICAgICBtRW52LmNyZWF0ZVVw
ZGF0ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsKKyAgICAgICAgaWYgKG5ld0Z1
bmNQcm90b05vZGUgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZ1
bmNEZWZOb2RlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
Km5ld0Z1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5jLmlz
TWFpbigpKTsKKworICAgICAgICBhdXRvIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwgPSBbJl0oVElu
dGVybUJsb2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIGlmICghbVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobUZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwpOworICAgICAgICAgICAgICAgIGF1dG8gKm0gPSBuZXcgVEludGVybVN5bWJvbCgm
Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKGZ1bmMpKTsKKyAgICAgICAgICAgICAgICBhdXRv
ICpvID0gbmV3IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsK
KyAgICAgICAgICAgICAgICBib2R5LmFwcGVuZFN0YXRlbWVudChUSW50ZXJtQWdncmVnYXRlOjpD
cmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAgICAgICAgICAgICptRnVuY01vZGlmaWVkVG9P
cmlnaW5hbCwgbmV3IFRJbnRlcm1TZXF1ZW5jZXttLCBvfSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGF1dG8gY2FsbE9yaWdpbmFsVG9Nb2RpZmllZCA9IFsmXShUSW50
ZXJtQmxvY2sgJmJvZHkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxW
YXIuaW50ZXJuYWwpOworICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jT3JpZ2luYWxUb01v
ZGlmaWVkKTsKKyAgICAgICAgICAgICAgICBhdXRvICpvID0gbmV3IFRJbnRlcm1TeW1ib2wobVBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0g
bmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7Cisg
ICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlRnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNPcmlnaW5hbFRvTW9k
aWZpZWQsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bywgbX0pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5
KCk7CisKKyAgICAgICAgaWYgKG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVE
ZWNsYXJhdGlvbkluTWFpbigpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICAgICAgICAgIGF1dG8gKm5l
d0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRT
dGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnttUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50
ZXJuYWx9KTsKKworICAgICAgICAgICAgaWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpU
eXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFscyB8fAorICAgICAgICAgICAgICAgIG1QaXBlbGlu
ZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHN0cnVjdCBpbnN0YW5jZSB3
aXRoIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIHBpcGVsaW5lIHZhcmlhYmxlcy4KKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBtUGlwZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwt
PmZpZWxkcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAq
dmFyICAgICAgICA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwg
ZmllbGQtPnR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZC0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAqc3lt
Ym9sICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gJmFjY2Vzc05vZGUgPSBBY2Nlc3NGaWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVy
bmFsLCB2YXItPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKmFzc2lnbk5vZGUg
PSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgJmFjY2Vzc05vZGUsIHN5
bWJvbCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChhc3Np
Z25Ob2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBtUGlw
ZWxpbmVTdHJ1Y3QuZXh0ZXJuYWwtPmZpZWxkcygpOworCisgICAgICAgICAgICAgICAgQVNTRVJU
KGZ1bmMuZ2V0UGFyYW1Db3VudCgpID49IDIgKiBmaWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBzaXplX3QgcGFyYW1JbmRleCA9IGZ1bmMuZ2V0UGFyYW1Db3VudCgpIC0gMiAqIGZpZWxk
cy5zaXplKCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBm
aWVsZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgJnRleHR1cmVQYXJhbSA9ICpmdW5jLmdldFBhcmFtKHBhcmFtSW5kZXgrKyk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmc2FtcGxlclBhcmFtID0gKmZ1bmMuZ2V0
UGFyYW0ocGFyYW1JbmRleCsrKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGdvID0gWyZd
KFRJbnRlcm1UeXBlZCAmZW52LCBjb25zdCBpbnQgKmluZGV4KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQgJnRleHR1cmVGaWVsZCA9IEFjY2Vzc0ZpZWxkKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5kZXgp
LCBJbW11dGFibGVTdHJpbmcoInRleHR1cmUiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgJnNhbXBsZXJGaWVsZCA9IEFjY2Vzc0ZpZWxkKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5kZXgpLCBJbW11dGFi
bGVTdHJpbmcoInNhbXBsZXIiKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWtB
c3NpZ24gPSBbJl0oVEludGVybVR5cGVkICZmaWVsZCwgY29uc3QgVFZhcmlhYmxlICZwYXJhbSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVEludGVybUJpbmFyeShU
T3BlcmF0b3I6OkVPcEFzc2lnbiwgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9h
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5hbWUoImFkZHJlc3NvZiIpLCBmaWVsZC5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1
ZW5jZXsmQWNjZXNzSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZwYXJhbSksIGluZGV4
KX0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChta0Fzc2lnbih0ZXh0dXJlRmllbGQsIHRleHR1
cmVQYXJhbSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVt
ZW50KG1rQXNzaWduKHNhbXBsZXJGaWVsZCwgc2FtcGxlclBhcmFtKSk7CisgICAgICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZlbnYgPSBBY2Nl
c3NGaWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsLCBmaWVsZC0+bmFtZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmVudlR5cGUgPSBlbnYuZ2V0VHlwZSgp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChlbnZUeXBlLmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFlbnZUeXBlLmlz
QXJyYXlPZkFycmF5cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbiA9
IHN0YXRpY19jYXN0PGludD4oZW52VHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28oZW52LCAmaSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBnbyhlbnYsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobVBpcGVs
aW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okluc3RhbmNlSWQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5
KAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcEFzc2lnbiwKKyAgICAgICAgICAg
ICAgICAgICAgJkFjY2Vzc0ZpZWxkQnlJbmRleCgqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVy
bmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSksIDApLAorICAgICAgICAgICAgICAgICAgICAmQXNU
eXBlKG1TeW1ib2xFbnYsICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0SW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlwZWxp
bmVWYXJpYWJsZShmdW5jKSkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0
aW9ue21QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbH0pOworICAgICAgICAgICAgICAgIGNh
bGxNb2RpZmllZFRvT3JpZ2luYWwoKm5ld0JvZHkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9keSk7CisKKyAgICAgICAgICAgIGlmICgh
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQoKm5ld0JvZHkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRl
cm1CcmFuY2goCisgICAgICAgICAgICAgICAgICAgIFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBuZXcg
VEludGVybVN5bWJvbChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKCFtUGlwZWxpbmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworCisgICAg
ICAgICAgICBhdXRvICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAg
bmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5l
TWFpbkxvY2FsVmFyLmludGVybmFsfSk7CisgICAgICAgICAgICBjYWxsTW9kaWZpZWRUb09yaWdp
bmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChib2R5
KTsKKyAgICAgICAgICAgIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQoKm5ld0JvZHkpOworICAgICAg
ICAgICAgYm9keSA9IG5ld0JvZHk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKm5ldyBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKG5ld0Z1bmNQcm90b05vZGUsIGJvZHkpOworICAgIH0K
K307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgVXBkYXRlUGlwZWxpbmVTeW1i
b2xzKFBpcGVsaW5lOjpUeXBlIHBpcGVsaW5lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5
bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhcmlhYmxlU2V0ICZw
aXBlbGluZVZhcmlhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2Nv
cGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXIpCit7CisgICAgYXV0byBtYXAgPSBb
Jl0oY29uc3QgVEZ1bmN0aW9uICpvd25lciwgVEludGVybVN5bWJvbCAmc3ltYm9sKSAtPiBUSW50
ZXJtTm9kZSAmIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2wudmFyaWFi
bGUoKTsKKyAgICAgICAgaWYgKHBpcGVsaW5lVmFyaWFibGVzLmZpbmQoJnZhcikgPT0gcGlwZWxp
bmVWYXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2w7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG93bmVyKTsKKyAgICAgICAgY29uc3QgVFZhcmlh
YmxlICpzdHJ1Y3RJbnN0YW5jZVZhcjsKKyAgICAgICAgaWYgKG93bmVyLT5pc01haW4oKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFs
KTsKKyAgICAgICAgICAgIHN0cnVjdEluc3RhbmNlVmFyID0gcGlwZWxpbmVNYWluTG9jYWxWYXIu
aW50ZXJuYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQob3duZXItPmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAgICAgICAgc3RydWN0
SW5zdGFuY2VWYXIgPSBvd25lci0+Z2V0UGFyYW0oMCk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKHN0cnVjdEluc3RhbmNlVmFyKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpzdHJ1
Y3RJbnN0YW5jZVZhciwgdmFyLm5hbWUoKSk7CisgICAgfTsKKyAgICByZXR1cm4gTWFwU3ltYm9s
cyhjb21waWxlciwgcm9vdCwgbWFwKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
Ym9vbCBSZXdyaXRlUGlwZWxpbmUoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAg
ICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgIFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+ICZvdXRTdHJ1Y3QpCit7CisgICAgQVNTRVJUKG91dFN0cnVj
dC5pc1RvdGFsbHlFbXB0eSgpKTsKKworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgUGlwZWxpbmVTdHJ1Y3RJbmZvIHBzaTsK
KyAgICBpZiAoIUdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMocHNpLCBjb21waWxlciwgcm9v
dCwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwc2kuaXNFbXB0eSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgYXV0byBwaXBlbGluZUZ1
bmN0aW9ucyA9IERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zKHJvb3QsIFsmXShjb25zdCBUVmFy
aWFibGUgJnZhcikgeworICAgICAgICByZXR1cm4gcHNpLnBpcGVsaW5lVmFyaWFibGVzLmZpbmQo
JnZhcikgIT0gcHNpLnBpcGVsaW5lVmFyaWFibGVzLmVuZCgpOworICAgIH0pOworCisgICAgYXV0
byBwaXBlbGluZU1haW5Mb2NhbFZhciA9CisgICAgICAgIENyZWF0ZVBpcGVsaW5lTWFpbkxvY2Fs
VmFyKHN5bWJvbFRhYmxlLCBwaXBlbGluZSwgcHNpLnBpcGVsaW5lU3RydWN0KTsKKworICAgIGlm
ICghVXBkYXRlUGlwZWxpbmVGdW5jdGlvbnM6OlRocmVhZFBpcGVsaW5lKAorICAgICAgICAgICAg
Y29tcGlsZXIsIHJvb3QsIHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcHNpLnBpcGVsaW5l
U3RydWN0LCBwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgIGlkR2VuLCBzeW1ib2xF
bnYsIHBzaS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkLCBwc2kuZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFwaXBl
bGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7CisgICAgICAgIGlmICghVXBkYXRlUGlwZWxp
bmVTeW1ib2xzKHBpcGVsaW5lLnR5cGUsIGNvbXBpbGVyLCByb290LCBzeW1ib2xFbnYsIHBzaS5w
aXBlbGluZVZhcmlhYmxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlw
ZWxpbmVNYWluTG9jYWxWYXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIVBydW5lTm9PcHMoJmNvbXBpbGVyLCAmcm9v
dCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG91dFN0cnVjdCA9IHBzaS5waXBlbGluZVN0cnVjdDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpS
ZXdyaXRlUGlwZWxpbmVzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmFu
Z2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFu
dHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0
cyAmb3V0U3RydWN0cykKK3sKKyAgICBzdHJ1Y3QgSW5mbworICAgIHsKKyAgICAgICAgUGlwZWxp
bmU6OlR5cGUgcGlwZWxpbmVUeXBlOworICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiAmb3V0U3RydWN0OworICAgICAgICBjb25zdCBUVmFyaWFibGUgKmdsb2JhbEluc3RhbmNlVmFy
OworICAgIH07CisKKyAgICBJbmZvIGluZm9zW10gPSB7CisgICAgICAgIHtQaXBlbGluZTo6VHlw
ZTo6SW5zdGFuY2VJZCwgb3V0U3RydWN0cy5pbnN0YW5jZUlkLCBudWxscHRyfSwKKyAgICAgICAg
e1BpcGVsaW5lOjpUeXBlOjpUZXh0dXJlLCBvdXRTdHJ1Y3RzLnRleHR1cmUsIG51bGxwdHJ9LAor
ICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Ok5vbkNvbnN0YW50R2xvYmFscywgb3V0U3RydWN0cy5u
b25Db25zdGFudEdsb2JhbHMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkFu
Z2xlVW5pZm9ybXMsIG91dFN0cnVjdHMuYW5nbGVVbmlmb3JtcywgJmFuZ2xlVW5pZm9ybXNHbG9i
YWxJbnN0YW5jZVZhcn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6VXNlclVuaWZvcm1zLCBv
dXRTdHJ1Y3RzLnVzZXJVbmlmb3JtcywgbnVsbHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlw
ZTo6VmVydGV4SW4sIG91dFN0cnVjdHMudmVydGV4SW4sIG51bGxwdHJ9LAorICAgICAgICB7UGlw
ZWxpbmU6OlR5cGU6OlZlcnRleE91dCwgb3V0U3RydWN0cy52ZXJ0ZXhPdXQsIG51bGxwdHJ9LAor
ICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50SW4sIG91dFN0cnVjdHMuZnJhZ21lbnRJ
biwgbnVsbHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6RnJhZ21lbnRPdXQsIG91dFN0
cnVjdHMuZnJhZ21lbnRPdXQsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Oklu
dm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBvdXRTdHJ1Y3RzLmludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRH
bG9iYWxzLCBvdXRTdHJ1Y3RzLmludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsIG51bGxwdHJ9LAor
ICAgIH07CisKKyAgICBmb3IgKEluZm8gJmluZm8gOiBpbmZvcykKKyAgICB7CisgICAgICAgIFBp
cGVsaW5lIHBpcGVsaW5le2luZm8ucGlwZWxpbmVUeXBlLCBpbmZvLmdsb2JhbEluc3RhbmNlVmFy
fTsKKyAgICAgICAgaWYgKCFSZXdyaXRlUGlwZWxpbmUoY29tcGlsZXIsIHJvb3QsIGlkR2VuLCBw
aXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLm91dFN0cnVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzkxYmE4MmI0ZTk2NzdkMmMyOTc0ZjkxNGI3ZTM0ODBiMGU4
OWI1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgK
QEAgLTAsMCArMSw0NSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8K
KworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
eW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRoaXMgcmV3cml0ZXMgYWxsIHBp
cGVsaW5lcy4KKy8vCisvLyBGb3IgZWFjaCBwaXBlbGluZToKKy8vICAgIC0gRGlzY292ZXIgYWxs
IHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBwaXBlbGluZQorLy8gICAgLSBNb3ZlIHRo
ZSB2YXJpYWJsZXMgaW50byBhbiBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaW5zdGFuY2UgYW5k
IHVwZGF0ZSBvbGQgdmFyaWFibGVzIHRvIGJlCisvLyAgICAgIG1lbWJlciBhY2Nlc3MgaW5zdGVh
ZC4KKy8vICAgIC0gRGVwZW5kZW5jeSBpbmplY3QgdGhlIGludGVybmFsIHBpcGVsaW5lIHN0cnVj
dCB0byBhbGwgZnVuY3Rpb25zIHRoYXQgYWNjZXNzIHZhcmlhYmxlcyBmcm9tCisvLyAgICAgIHRo
ZSBzdHJ1Y3QuCisvLyAgICAtIEEgbmV3IGV4dGVybmFsIHBpcGVsaW5lIHN0cnVjdCBpcyBjcmVh
dGVkIGlmIG5lZWRlZCBmb3IgaW1wZWRhbmNlIHJlYXNvbnMuIE90aGVyd2lzZSB0aGUKKy8vICAg
ICAgZXh0ZXJuYWwgYW5kIGludGVybmFsIHBpcGVsaW5lIHN0cnVjdHMgYXJlIHRoZSBzYW1lLgor
Ly8gICAgLSBBZGQgYG1haW5gIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUgZm9yIHRoZSBleHRl
cm5hbCBwaXBlbGluZSBzdHJ1Y3QgYXMgbmVlZGVkLgorLy8gICAgLSBJbnNpZGUgYG1haW5gLCBt
YXAgdGhlIGV4dGVybmFsIHN0cnVjdCB0byB0aGUgaW50ZXJuYWwgc3RydWN0IGlmIHRoZXkgZGlm
ZmVyIGFuZCBpcyBwcm92aWRlZAorLy8gICAgICBhcyBhIHBhcmFtZXRlciB0byBgbWFpbmAuCisv
LyAgICAtIEluc2lkZSBgbWFpbmAsIG1hcCB0aGUgaW50ZXJuYWwgc3RydWN0IHRvIHRoZSBleHRl
cm5hbCBzdHJ1Y3QgaWYgdGhleSBkaWZmZXIgYW5kIGlzIHJldHVybmVkCisvLyAgICAgIGZyb20g
YG1haW5gLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVQaXBlbGluZXMoVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmYW5nbGVVbmlmb3Jtc0dsb2JhbEluc3RhbmNlVmFyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdHJ1Y3RzICZv
dXRTdHJ1Y3RzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNzdjMWE1ODU1MWIzMmM5ZmY2Y2RjOWU3YmFlYjM4Y2E4NmJkZDJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAK
QEAgLTAsMCArMSwzNzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2Jv
b2wgSXNPdXRQYXJhbShjb25zdCBUVHlwZSAmcGFyYW1UeXBlKQoreworICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICBzd2l0Y2ggKHF1YWwp
CisgICAgeworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUluT3V0OgorICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElz
VmVjdG9yQWNjZXNzKFRJbnRlcm1CaW5hcnkgJmJpbmFyeSkKK3sKKyAgICBUT3BlcmF0b3Igb3Ag
PSBiaW5hcnkuZ2V0T3AoKTsKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhJbmRpcmVjdDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBl
ID0gYmluYXJ5LmdldExlZnQoKS0+Z2V0VHlwZSgpOworICAgIGlmICghbGVmdFR5cGUuaXNWZWN0
b3IoKSB8fCBsZWZ0VHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgQVNTRVJUKElzU2NhbGFyQmFzaWNUeXBlKGJpbmFyeS5nZXRUeXBlKCkp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElzVmVjdG9yQWNjZXNzKFRJbnRlcm1O
b2RlICZub2RlKQoreworICAgIGlmIChhdXRvICpiaW4gPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIElzVmVjdG9yQWNjZXNzKCpiaW4pOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERpZmZlcnMgZnJvbSBJc0Fzc2lnbm1lbnQgaW4gdGhh
dCBpdCBkb2VzIG5vdCBpbmNsdWRlICgrKykgb3IgKC0tKS4KK2Jvb2wgSXNBc3NpZ25FcXVhbHNT
aWduKFRPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRp
YWxpemU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BN
dWxBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcElNb2RBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gT25s
eSBpbmNsdWRlcyAoJD0pIHN0eWxlIGFzc2lnbnMsIHdoZXJlICgkKSBpcyBhIGJpbmFyeSBvcC4K
K2Jvb2wgSXNDb21wb3VuZEFzc2lnbihUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkK
KyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BN
dWxBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcElNb2RBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBS
ZXR1cm5zUmVmZXJlbmNlKFRPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2Fs
YXJBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcElNb2RBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJp
Z2h0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVj
cmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVtZW50OgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OgorCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5k
aXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitUSW50ZXJtVHlwZWQgJkRlY29tcG9zZUNvbXBvdW5k
QXNzaWdubWVudChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIFRPcGVyYXRvciBvcCA9IG5v
ZGUuZ2V0T3AoKTsKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BBZGQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoK
KyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BTdWI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BNdWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgb3AgPSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgICAg
IG9wID0gVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4
QXNzaWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3Np
Z246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wRGl2OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAg
b3AgPSBUT3BlcmF0b3I6OkVPcElNb2Q7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlQW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VYb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpF
T3BCaXR3aXNlT3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgfQorCisgICAgLy8gVGhpcyBhc3N1bWVzIFNlcGFy
YXRlQ29tcG91bmRFeHByZXNzaW9ucyBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KKyAgICAvLyBU
aGlzIGFzc3VtcHRpb24gYWxsb3dzIHRoaXMgY29kZSB0byBub3QgbmVlZCB0byBpbnRyb2R1Y2Ug
dGVtcG9yYXJpZXMuCisgICAgLy8KKyAgICAvLyBlLmcuIGRvbnQgaGF2ZSB0byB3b3JyeSBhYm91
dDoKKyAgICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldICo9IDQKKyAgICAvLyBiZWNvbWlu
ZworICAgIC8vICAgICAgdmVjW2hhc1NpZGVFZmZlY3QoKV0gPSB2ZWNbaGFzU2lkZUVmZmVjdCgp
XSAqIDQKKworICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICBU
SW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworICAgIHJldHVybiAqbmV3IFRJ
bnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGxlZnQtPmRlZXBDb3B5KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShvcCwgbGVmdCwgcmln
aHQpKTsKK30KKworY2xhc3MgUmV3cml0ZXIxIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7Cisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcjEoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVi
dWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0Qmlu
YXJ5UG9zdChUSW50ZXJtQmluYXJ5ICZiaW5hcnlOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY29uc3QgVE9wZXJhdG9yIG9wID0gYmluYXJ5Tm9kZS5nZXRPcCgpOworICAgICAgICBpZiAo
SXNDb21wb3VuZEFzc2lnbihvcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAmbGVmdCA9ICpiaW5hcnlOb2RlLmdldExlZnQoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0Lmdl
dEFzU3dpenpsZU5vZGUoKSB8fCBJc1ZlY3RvckFjY2VzcyhsZWZ0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRGVjb21wb3NlQ29tcG91bmRBc3NpZ25tZW50KGJpbmFy
eU5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBiaW5hcnlO
b2RlOworICAgIH0KK307CisKK2NsYXNzIFJld3JpdGVyMiA6IHB1YmxpYyBUSW50ZXJtUmVidWls
ZAoreworICAgIHN0ZDo6dmVjdG9yPGJvb2w+IG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjazsKKyAg
ICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHJpdmF0ZToKKyAgICBib29sIHJlcXVpcmVz
QWRkcmVzc2luZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobVJlcXVpcmVzQWRkcmVzc2lu
Z1N0YWNrLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmJhY2soKTsK
KyAgICB9CisKKyAgcHVibGljOgorICAgIH5SZXdyaXRlcjIoKSBvdmVycmlkZSB7IEFTU0VSVCht
UmVxdWlyZXNBZGRyZXNzaW5nU3RhY2suZW1wdHkoKSk7IH0KKworICAgIFJld3JpdGVyMihUQ29t
cGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICAgICAgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorICAg
IHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAm
YWdncmVnYXRlTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAq
ZnVuYyA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgaWYgKCFmdW5jKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICAgICAgfQor
CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLmdldFNlcXVl
bmNlKCk7CisgICAgICAgIHNpemVfdCBhcmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9ICpmdW5jLT5nZXRQYXJhbShpKTsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbVR5cGUgPSBwYXJhbS5nZXRUeXBlKCk7Cisg
ICAgICAgICAgICBUSW50ZXJtTm9kZSAqYXJnICAgICAgID0gYXJnc1tpXTsKKyAgICAgICAgICAg
IEFTU0VSVChhcmcpOworCisgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKElzT3V0UGFyYW0ocGFyYW1UeXBlKSk7CisgICAgICAgICAgICBhcmdzW2ldID0gcmVi
dWlsZCgqYXJnKS5zaW5nbGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChhcmdzW2ldKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOworICAgICAg
ICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnBvcF9iYWNrKCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4ge2FnZ3JlZ2F0ZU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZzd2l6
emxlTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghcmVxdWlyZXNBZGRyZXNzaW5n
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzd2l6emxlTm9kZTsKKyAgICAgICAg
fQorCisgICAgICAgIFRJbnRlcm1UeXBlZCAmdmVjTm9kZSAgICAgICAgID0gKnN3aXp6bGVOb2Rl
LmdldE9wZXJhbmQoKTsKKyAgICAgICAgY29uc3QgVFF1YWxpZmllckxpc3QgJm9mZnNldHMgPSBz
d2l6emxlTm9kZS5nZXRTd2l6emxlT2Zmc2V0cygpOworICAgICAgICBBU1NFUlQoIW9mZnNldHMu
ZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChvZmZzZXRzLnNpemUoKSA8PSA0KTsKKworICAgICAg
ICBhdXRvICZhcmdzID0gKm5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKyAgICAgICAgYXJncy5yZXNl
cnZlKG9mZnNldHMuc2l6ZSgpICsgMSk7CisgICAgICAgIGFyZ3MucHVzaF9iYWNrKCZ2ZWNOb2Rl
KTsKKyAgICAgICAgZm9yIChpbnQgb2Zmc2V0IDogb2Zmc2V0cykKKyAgICAgICAgeworICAgICAg
ICAgICAgYXJncy5wdXNoX2JhY2sobmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3Rh
bnRVbmlvbihvZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0SW50KSkpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgi
c3dpenpsZV9yZWYiKSwgc3dpenpsZU5vZGUuZ2V0VHlwZSgpLCBhcmdzKTsKKyAgICB9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0
T3AoKTsKKworICAgICAgICBjb25zdCBib29sIGlzQWNjZXNzID0gSXNWZWN0b3JBY2Nlc3MoYmlu
YXJ5Tm9kZSk7CisKKyAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlVG9wICAgPSAhUmV0dXJuc1Jl
ZmVyZW5jZShvcCkgfHwgIXJlcXVpcmVzQWRkcmVzc2luZygpOworICAgICAgICBjb25zdCBib29s
IGRpc2FibGVMZWZ0ICA9IGRpc2FibGVUb3A7CisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVJp
Z2h0ID0gZGlzYWJsZVRvcCB8fCBpc0FjY2VzcyB8fCBJc0Fzc2lnbkVxdWFsc1NpZ24ob3ApOwor
CisgICAgICAgIGF1dG8gdHJhdmVyc2UgPSBbJl0oVEludGVybVR5cGVkICZub2RlLCBjb25zdCBi
b29sIGRpc2FibGUpIC0+IFRJbnRlcm1UeXBlZCAmIHsKKyAgICAgICAgICAgIGlmIChkaXNhYmxl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFj
ay5wdXNoX2JhY2soZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byAqbmV3
Tm9kZSA9IGFzTm9kZTxUSW50ZXJtVHlwZWQ+KHJlYnVpbGQobm9kZSkuc2luZ2xlKCkpOworICAg
ICAgICAgICAgQVNTRVJUKG5ld05vZGUpOworICAgICAgICAgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnBvcF9i
YWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKm5ld05vZGU7CisgICAg
ICAgIH07CisKKyAgICAgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS5n
ZXRMZWZ0KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUu
Z2V0UmlnaHQoKTsKKworICAgICAgICBUSW50ZXJtVHlwZWQgJm5ld0xlZnQgID0gdHJhdmVyc2Uo
bGVmdE5vZGUsIGRpc2FibGVMZWZ0KTsKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdSaWdodCA9
IHRyYXZlcnNlKHJpZ2h0Tm9kZSwgZGlzYWJsZVJpZ2h0KTsKKworICAgICAgICBpZiAoIWlzQWNj
ZXNzIHx8IGRpc2FibGVUb3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgmbGVmdE5vZGUg
PT0gJm5ld0xlZnQgJiYgJnJpZ2h0Tm9kZSA9PSAmbmV3UmlnaHQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsmYmluYXJ5Tm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7Km5ldyBUSW50ZXJtQmluYXJ5KG9w
LCAmbmV3TGVmdCwgJm5ld1JpZ2h0KSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7bVN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJl
bGVtX3JlZiIpLCBiaW5hcnlOb2RlLmdldFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVNlcXVlbmNleyZuZXdMZWZ0LCAm
bmV3UmlnaHR9KSwKKyAgICAgICAgICAgICAgICBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0K
K307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6UmV3cml0ZVVuYWRk
cmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KQoreworICAg
IGlmICghUmV3cml0ZXIxKGNvbXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFSZXdyaXRlcjIoY29tcGlsZXIsIHN5
bWJvbEVudikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ZGE5ODQzZWIyZTYwN2VlY2M2OTBm
Y2VjMTYyYzYyN2E2MWI3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKQEAgLTAsMCArMSwzMSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRF
VU5BRERSRVNTQUJMRVJFRkVSRU5DRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1i
b2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEdpdmVuOgorLy8gICB2b2lkIGZvbyhv
dXQgeCk7CisvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGZvbGxvd2luZyB0byBiZSBsZWdhbCBp
biBHTFNMIGJ1dCBub3QgaW4gTWV0YWw6CisvLyAgIGZvbyhleHByZXNzaW9uKTsKKy8vIFRoaXMg
Y2FuIGhhcHBlbiBpbiBjYXNlcyB3aGVyZSBgZXhwcmVzc2lvbmAgaXMgYSB2ZWN0b3Igc3dpenps
ZSBvciB2ZWN0b3IgZWxlbWVudCBhY2Nlc3MuCisvLyBUaGlzIHJld3JpdGUgZnVuY3Rpb25hbGl0
eSBpbnRyb2R1Y2VzIHRlbXBvcmFyaWVzIHRoYXQgc2VydmUgYXMgcHJveGllcyB0byBiZSBwYXNz
ZWQgdG8gdGhlCisvLyBvdXQvaW5vdXQgcGFyYW1ldGVycyBhcyBuZWVkZWQuIFRoZSBjb3JyZXNw
b25kaW5nIGV4cHJlc3Npb25zIGdldCBwb3B1bGF0ZWQgd2l0aCB0aGVpcgorLy8gcHJveGllcyBh
ZnRlciB0aGUgZnVuY3Rpb24gY2FsbC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlVW5h
ZGRyZXNzYWJsZVJlZmVyZW5jZXMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xFbnYgJnN5bWJvbEVudik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8v
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJF
U1NBQkxFUkVGRVJFTkNFU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29t
cG91bmRFeHByZXNzaW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTdiMzczZDMxYjIyOTNhYjA4NDk1MmQ0OGYyMTk4MWUz
NWJlZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRF
eHByZXNzaW9ucy5jcHAKQEAgLTAsMCArMSw2NTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDx1
bm9yZGVyZWRfbWFwPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29t
cG91bmRFeHByZXNzaW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9v
cHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworYm9vbCBJc0luZGV4KFRP
cGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGly
ZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0luZGV4KFRJbnRlcm1UeXBlZCAmZXhwcikK
K3sKKyAgICBpZiAoYXV0byAqYmluYXJ5ID0gZXhwci5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBJc0luZGV4KGJpbmFyeS0+Z2V0T3AoKSk7CisgICAgfQorICAgIHJl
dHVybiBleHByLmdldEFzU3dpenpsZU5vZGUoKTsKK30KKworYm9vbCBWaWV3QmluYXJ5Q2hhaW4o
VE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQgJm5vZGUsIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBl
ZCAqPiAmb3V0KQoreworICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSA9IG5vZGUuZ2V0QXNCaW5h
cnlOb2RlKCk7CisgICAgaWYgKCFiaW5hcnkgfHwgYmluYXJ5LT5nZXRPcCgpICE9IG9wKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqbGVm
dCAgPSBiaW5hcnktPmdldExlZnQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gYmluYXJ5
LT5nZXRSaWdodCgpOworCisgICAgaWYgKCFWaWV3QmluYXJ5Q2hhaW4ob3AsICpsZWZ0LCBvdXQp
KQorICAgIHsKKyAgICAgICAgb3V0LnB1c2hfYmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAo
IVZpZXdCaW5hcnlDaGFpbihvcCwgKnJpZ2h0LCBvdXQpKQorICAgIHsKKyAgICAgICAgb3V0LnB1
c2hfYmFjayhyaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0ZDo6dmVj
dG9yPFRJbnRlcm1UeXBlZCAqPiBWaWV3QmluYXJ5Q2hhaW4oVEludGVybUJpbmFyeSAmbm9kZSkK
K3sKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gY2hhaW47CisgICAgVmlld0JpbmFy
eUNoYWluKG5vZGUuZ2V0T3AoKSwgbm9kZSwgY2hhaW4pOworICAgIEFTU0VSVChjaGFpbi5zaXpl
KCkgPj0gMik7CisgICAgcmV0dXJuIGNoYWluOworfQorCitjbGFzcyBQcmVQYXNzIDogcHVibGlj
IFRJbnRlcm1SZWJ1aWxkCit7CisgIHB1YmxpYzoKKyAgICBQcmVQYXNzKFRDb21waWxlciAmY29t
cGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpIHt9CisKKyAgcHJp
dmF0ZToKKyAgICAvLyBDaGFuZ2UgY2hhaW5zIG9mCisgICAgLy8gICAgICB4IE9QIHkgT1Agegor
ICAgIC8vIHRvCisgICAgLy8gICAgICB4IE9QICh5IE9QIHopCisgICAgLy8gcmVnYXJkbGVzcyBv
ZiBvcmlnaW5hbCBwYXJlbnRoZXNpemF0aW9uLgorICAgIFRJbnRlcm1UeXBlZCAmcmVhc3NvY2lh
dGVSaWdodChUSW50ZXJtQmluYXJ5ICZub2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJh
dG9yIG9wICAgICAgICAgICAgICAgID0gbm9kZS5nZXRPcCgpOworICAgICAgICBzdGQ6OnZlY3Rv
cjxUSW50ZXJtVHlwZWQgKj4gY2hhaW4gPSBWaWV3QmluYXJ5Q2hhaW4obm9kZSk7CisKKyAgICAg
ICAgVEludGVybVR5cGVkICpyZXN1bHQgPSBjaGFpbi5iYWNrKCk7CisgICAgICAgIGNoYWluLnBv
cF9iYWNrKCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgICAgIGNvbnN0IGF1dG8g
YmVnaW4gPSBjaGFpbi5yYmVnaW4oKTsKKyAgICAgICAgY29uc3QgYXV0byBlbmQgICA9IGNoYWlu
LnJlbmQoKTsKKworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsg
KytpdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnBhcnQgPSAqaXRl
cjsKKyAgICAgICAgICAgIEFTU0VSVChwYXJ0KTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICp0
ZW1wID0gcmVidWlsZCgqcGFydCkuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQodGVtcCk7
CisgICAgICAgICAgICBwYXJ0ID0gdGVtcC0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNT
RVJUKHBhcnQpOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFRJbnRlcm1CaW5hcnkob3AsIHBh
cnQsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQor
CisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkg
Jm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBub2Rl
LmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQgfHwg
b3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB7cmVhc3NvY2lhdGVSaWdodChub2RlKSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9OworCitjbGFzcyBTZXBhcmF0b3Ig
OiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgICBJZEdlbiAmbUlkR2VuOworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+PiBtU3RtdHNTdGFjazsKKyAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNs
YXJhdGlvbiAqPj4gbUJpbmRpbmdNYXBTdGFjazsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VElu
dGVybVR5cGVkICosIFRJbnRlcm1UeXBlZCAqPiBtRXhwck1hcDsKKyAgICBzdGQ6OnVub3JkZXJl
ZF9zZXQ8VEludGVybURlY2xhcmF0aW9uICo+IG1NYXNrZWREZWNsczsKKworICBwdWJsaWM6Cisg
ICAgU2VwYXJhdG9yKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52LCBJ
ZEdlbiAmaWRHZW4pCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRy
dWUpLCBtSWRHZW4oaWRHZW4pCisgICAge30KKworICAgIH5TZXBhcmF0b3IoKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1TdG10c1N0YWNrLmVtcHR5KCkpOworICAgICAgICBBU1NF
UlQobUV4cHJNYXAuZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtQmluZGluZ01hcFN0YWNrLmVt
cHR5KCkpOworICAgIH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2Rl
ICo+ICZnZXRDdXJyU3RtdHMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtU3RtdHNTdGFjay5l
bXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1TdG10c1N0YWNrLmJhY2soKTsKKyAgICB9CisKKyAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNsYXJhdGlv
biAqPiAmZ2V0Q3VyckJpbmRpbmdNYXAoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtQmluZGlu
Z01hcFN0YWNrLmVtcHR5KCkpOworICAgICAgICByZXR1cm4gbUJpbmRpbmdNYXBTdGFjay5iYWNr
KCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoU3RtdChUSW50ZXJtTm9kZSAmbm9kZSkgeyBnZXRD
dXJyU3RtdHMoKS5wdXNoX2JhY2soJm5vZGUpOyB9CisKKyAgICBib29sIGlzVGVybWluYWxFeHBy
KFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgTm9kZVR5cGUgbm9kZVR5cGUgPSBn
ZXROb2RlVHlwZShub2RlKTsKKyAgICAgICAgc3dpdGNoIChub2RlVHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3ltYm9sOgorICAgICAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgVEludGVybVR5cGVkICpwdWxsTWFwcGVkRXhwcihUSW50ZXJtVHlwZWQg
Km5vZGUsIGJvb2wgYWxsb3dCYWNrdHJhY2spCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQg
KmV4cHI7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdGVyID0gbUV4cHJNYXAuZmlu
ZChub2RlKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IG1FeHByTWFwLmVuZCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgZXhwciA9IGl0ZXItPnNlY29uZDsK
KyAgICAgICAgICAgIEFTU0VSVChleHByKTsKKyAgICAgICAgICAgIG1FeHByTWFwLmVyYXNlKGl0
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFsbG93QmFja3RyYWNrKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdNYXAoKTsKKyAg
ICAgICAgICAgIHdoaWxlIChUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBleHByLT5nZXRBc1N5bWJv
bE5vZGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
JnZhciA9IHN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAg
ICAgICAgICA9IGJpbmRpbmdNYXAuZmluZCgmdmFyKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRl
ciA9PSBiaW5kaW5nTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFT
U0VSVCh2YXIuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAg
ICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IGl0ZXItPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZGVjbCk7CisgICAgICAgICAgICAgICAgZXhwciA9IFZpZXdE
ZWNsYXJhdGlvbigqZGVjbCkuaW5pdEV4cHI7CisgICAgICAgICAgICAgICAgQVNTRVJUKGV4cHIp
OworICAgICAgICAgICAgICAgIGJpbmRpbmdNYXAuZXJhc2UoaXRlcik7CisgICAgICAgICAgICAg
ICAgbU1hc2tlZERlY2xzLmluc2VydChkZWNsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGJvb2wgaXNTdGFuZGFsb25lRXhw
cihUSW50ZXJtVHlwZWQgJmV4cHIpCisgICAgeworICAgICAgICBpZiAoZ2V0UGFyZW50Tm9kZSgp
LT5nZXRBc0Jsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChleHByLmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBU
QmFzaWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHZvaWQgcHVzaEJpbmRpbmcoVEludGVybVR5cGVkICZvbGRFeHByLCBUSW50ZXJtVHlwZWQgJm5l
d0V4cHIpCisgICAgeworICAgICAgICBpZiAoaXNTdGFuZGFsb25lRXhwcihuZXdFeHByKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQobmV3RXhwcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKElzSW5kZXgobmV3RXhwcikpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHByTWFwWyZvbGRFeHByXSA9ICZuZXdFeHByOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gJmJpbmRpbmdNYXAgPSBnZXRDdXJyQmlu
ZGluZ01hcCgpOworICAgICAgICBjb25zdCBOYW1lIG5hbWUgID0gbUlkR2VuLmNyZWF0ZU5ld05h
bWUoIiIpOworICAgICAgICBhdXRvICp2YXIgPQorICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgm
bVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwgJm5ld0V4cHIuZ2V0VHlwZSgpLCBuYW1lLnN5
bWJvbFR5cGUoKSk7CisgICAgICAgIGF1dG8gKmRlY2wgPSBuZXcgVEludGVybURlY2xhcmF0aW9u
KHZhciwgJm5ld0V4cHIpOworICAgICAgICBwdXNoU3RtdCgqZGVjbCk7CisgICAgICAgIG1FeHBy
TWFwWyZvbGRFeHByXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7CisgICAgICAgIGJpbmRpbmdN
YXBbdmFyXSAgICA9IGRlY2w7CisgICAgfQorCisgICAgdm9pZCBwdXNoU3RhY2tzKCkKKyAgICB7
CisgICAgICAgIG1TdG10c1N0YWNrLmVtcGxhY2VfYmFjaygpOworICAgICAgICBtQmluZGluZ01h
cFN0YWNrLmVtcGxhY2VfYmFjaygpOworICAgIH0KKworICAgIHZvaWQgcG9wU3RhY2tzKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRpbmdNYXBTdGFjay5lbXB0eSgpKTsKKyAgICAgICAg
QVNTRVJUKCFtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1TdG10c1N0YWNr
LmJhY2soKS5lbXB0eSgpKTsKKyAgICAgICAgbUJpbmRpbmdNYXBTdGFjay5wb3BfYmFjaygpOwor
ICAgICAgICBtU3RtdHNTdGFjay5wb3BfYmFjaygpOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0
bXRzSW50b0Jsb2NrKFRJbnRlcm1CbG9jayAmYmxvY2ssIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2Rl
ICo+ICZzdG10cykKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxID0gKmJsb2Nr
LmdldFNlcXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybU5vZGUgKnN0bXQgOiBzdG10cykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IHN0
bXQtPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byBpdGVyID0gbU1hc2tlZERlY2xzLmZpbmQoZGVjbCk7CisgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgIT0gbU1hc2tlZERlY2xzLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbU1hc2tlZERlY2xzLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzZXEucHVzaF9iYWNrKHN0bXQpOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVy
bUJsb2NrICZidWlsZEJsb2NrV2l0aFRhaWxBc3NpZ24oY29uc3QgVFZhcmlhYmxlICZ2YXIsIFRJ
bnRlcm1UeXBlZCAmbmV3RXhwcikKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1O
b2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJTdG10cygpKTsKKyAgICAgICAgcG9wU3Rh
Y2tzKCk7CisKKyAgICAgICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAg
ICAgICBhdXRvICZzZXEgICA9ICpibG9jay5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEucmVz
ZXJ2ZSgxICsgc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50b0Jsb2NrKGJsb2Nr
LCBzdG10cyk7CisgICAgICAgIHNlcS5wdXNoX2JhY2sobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJh
dG9yOjpFT3BBc3NpZ24sIG5ldyBUSW50ZXJtU3ltYm9sKCZ2YXIpLCAmbmV3RXhwcikpOworCisg
ICAgICAgIHJldHVybiBibG9jazsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBQcmVSZXN1bHQg
dmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBwdXNoU3RhY2tzKCk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFBvc3RS
ZXN1bHQgdmlzaXRCbG9ja1Bvc3QoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gc3RtdHMgPSBzdGQ6Om1vdmUoZ2V0
Q3VyclN0bXRzKCkpOworICAgICAgICBwb3BTdGFja3MoKTsKKworICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJnNlcSA9ICpub2RlLmdldFNlcXVlbmNlKCk7CisgICAgICAgIHNlcS5jbGVhcigpOwor
ICAgICAgICBzZXEucmVzZXJ2ZShzdG10cy5zaXplKCkpOworICAgICAgICBwdXNoU3RtdHNJbnRv
QmxvY2sobm9kZSwgc3RtdHMpOworCisgICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQgPSBnZXRQ
YXJlbnROb2RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5nZXRBc0Jsb2NrKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
RGVjbGFyYXRpb24gZGVjbCA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgaWYgKCFk
ZWNsLmluaXRFeHByIHx8IGlzVGVybWluYWxFeHByKCpkZWNsLmluaXRFeHByKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgICAgICByZXR1cm4ge25vZGUs
IFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVjbGFy
YXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0g
Vmlld0RlY2xhcmF0aW9uKG5vZGUpOworICAgICAgICBBU1NFUlQoZGVjbC5zeW1ib2wudmFyaWFi
bGUoKS5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOworICAgICAgICBBU1NFUlQo
IWRlY2wuc3ltYm9sLnZhcmlhYmxlKCkuZ2V0VHlwZSgpLmlzU3RydWN0U3BlY2lmaWVyKCkpOwor
CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3SW5pdEV4cHIgPSBwdWxsTWFwcGVkRXhwcihkZWNs
LmluaXRFeHByLCB0cnVlKTsKKyAgICAgICAgaWYgKGRlY2wuaW5pdEV4cHIgPT0gbmV3SW5pdEV4
cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byAmbmV3Tm9kZSA9ICpuZXcg
VEludGVybURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBuZXdOb2RlLmFwcGVuZERlY2xhcmF0
b3IoCisgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BJbml0
aWFsaXplLCAmZGVjbC5zeW1ib2wsIG5ld0luaXRFeHByKSk7CisgICAgICAgICAgICBwdXNoU3Rt
dChuZXdOb2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAg
ICBQb3N0UmVzdWx0IHZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0T3BlcmFuZCgp
OworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBm
YWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtVW5hcnko
bm9kZS5nZXRPcCgpLCBuZXdFeHByLCBub2RlLmdldEZ1bmN0aW9uKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQ
cmUoVEludGVybUJpbmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRP
cGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6
RU9wTG9naWNhbEFuZCB8fCBvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcikKKyAgICAgICAg
eworICAgICAgICAgICAgVEludGVybVR5cGVkICpsZWZ0ICA9IG5vZGUuZ2V0TGVmdCgpOworICAg
ICAgICAgICAgVEludGVybVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAg
ICAgICAgUG9zdFJlc3VsdCBsZWZ0UmVzdWx0ID0gcmVidWlsZCgqbGVmdCk7CisgICAgICAgICAg
ICBBU1NFUlQobGVmdFJlc3VsdC5zaW5nbGUoKSk7CisKKyAgICAgICAgICAgIHB1c2hTdGFja3Mo
KTsKKyAgICAgICAgICAgIFBvc3RSZXN1bHQgcmlnaHRSZXN1bHQgPSByZWJ1aWxkKCpyaWdodCk7
CisgICAgICAgICAgICBBU1NFUlQocmlnaHRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QmluYXJ5UG9zdChUSW50
ZXJtQmluYXJ5ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9y
IG9wID0gbm9kZS5nZXRPcCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BJbml0
aWFsaXplICYmIGdldFBhcmVudE5vZGUoKS0+Z2V0QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGlzIGhhbmRsZWQgYnkgdmlzaXREZWNs
YXJhdGlvblBvc3QKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9CisKKyAgICAg
ICAgVEludGVybVR5cGVkICpsZWZ0ICA9IG5vZGUuZ2V0TGVmdCgpOworICAgICAgICBUSW50ZXJt
VHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworCisgICAgICAgIGlmIChvcCA9PSBUT3Bl
cmF0b3I6OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgICAgIGF1dG8gKnZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xU
YWJsZSwgbmFtZS5yYXdOYW1lKCksIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zeW1ib2xUeXBlKCkpOwor
CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld1JpZ2h0ICAgPSBwdWxsTWFwcGVkRXhwcihy
aWdodCwgdHJ1ZSk7CisgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKnJpZ2h0QmxvY2sgPSAmYnVp
bGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdSaWdodCk7CisgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKm5ld0xlZnQgICAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0LCB0cnVlKTsKKworICAg
ICAgICAgICAgVEludGVybVR5cGVkICpjb25kID0gbmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKyAg
ICAgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25kID0gbmV3IFRJbnRlcm1VbmFyeShUT3BlcmF0b3I6OkVP
cExvZ2ljYWxOb3QsIGNvbmQsIG51bGxwdHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIsIG5ld0xlZnQpKTsKKyAgICAg
ICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybUlmRWxzZShjb25kLCByaWdodEJsb2NrLCBudWxs
cHRyKSk7CisgICAgICAgICAgICBpZiAoIWlzU3RhbmRhbG9uZUV4cHIobm9kZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRlcm1TeW1i
b2wodmFyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBib29sIGlzQXNzaWduICAgID0gSXNBc3NpZ25tZW50KG9w
KTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdMZWZ0ICA9IHB1bGxNYXBwZWRFeHByKGxlZnQs
IGZhbHNlKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCA9IHB1bGxNYXBwZWRFeHBy
KHJpZ2h0LCBpc0Fzc2lnbik7CisKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wQ29t
bWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdSaWdodCk7
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKm5ld05vZGU7CisgICAgICAgICAgICBp
ZiAobGVmdCA9PSBuZXdMZWZ0ICYmIHJpZ2h0ID09IG5ld1JpZ2h0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG5ld05vZGUgPSAmbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3IFRJ
bnRlcm1CaW5hcnkob3AsIG5ld0xlZnQsIG5ld1JpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBu
b2RlOworICAgICAgICB9CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShU
SW50ZXJtVGVybmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFBvc3RSZXN1bHQg
Y29uZFJlc3VsdCA9IHJlYnVpbGQoKm5vZGUuZ2V0Q29uZGl0aW9uKCkpOworICAgICAgICBBU1NF
UlQoY29uZFJlc3VsdC5zaW5nbGUoKSk7CisKKyAgICAgICAgcHVzaFN0YWNrcygpOworICAgICAg
ICBQb3N0UmVzdWx0IHRoZW5SZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldFRydWVFeHByZXNzaW9u
KCkpOworICAgICAgICBBU1NFUlQodGhlblJlc3VsdC5zaW5nbGUoKSk7CisKKyAgICAgICAgcHVz
aFN0YWNrcygpOworICAgICAgICBQb3N0UmVzdWx0IGVsc2VSZXN1bHQgPSByZWJ1aWxkKCpub2Rl
LmdldEZhbHNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKGVsc2VSZXN1bHQuc2luZ2xl
KCkpOworCisgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKyAgICB9CisK
KyAgICBQb3N0UmVzdWx0IHZpc2l0VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgID0gbm9kZS5nZXRDb25k
aXRpb24oKTsKKyAgICAgICAgVEludGVybVR5cGVkICp0aGVuICA9IG5vZGUuZ2V0VHJ1ZUV4cHJl
c3Npb24oKTsKKyAgICAgICAgVEludGVybVR5cGVkICplbHNlXyA9IG5vZGUuZ2V0RmFsc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05h
bWUoIiIpOworICAgICAgICBhdXRvICp2YXIgPQorICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgm
bVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwgJm5vZGUuZ2V0VHlwZSgpLCBuYW1lLnN5bWJv
bFR5cGUoKSk7CisKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFbHNlICAgPSBwdWxsTWFwcGVk
RXhwcihlbHNlXywgZmFsc2UpOworICAgICAgICBUSW50ZXJtQmxvY2sgKmVsc2VCbG9jayA9ICZi
dWlsZEJsb2NrV2l0aFRhaWxBc3NpZ24oKnZhciwgKm5ld0Vsc2UpOworICAgICAgICBUSW50ZXJt
VHlwZWQgKm5ld1RoZW4gICA9IHB1bGxNYXBwZWRFeHByKHRoZW4sIHRydWUpOworICAgICAgICBU
SW50ZXJtQmxvY2sgKnRoZW5CbG9jayA9ICZidWlsZEJsb2NrV2l0aFRhaWxBc3NpZ24oKnZhciwg
Km5ld1RoZW4pOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgICA9IHB1bGxNYXBwZWRF
eHByKGNvbmQsIHRydWUpOworCisgICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybURlY2xhcmF0
aW9ue3Zhcn0pOworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwg
dGhlbkJsb2NrLCBlbHNlQmxvY2spKTsKKyAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5v
ZGUpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXhwck1hcFsmbm9kZV0gPSBuZXcgVEludGVy
bVN5bWJvbCh2YXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpleHByICAgID0gbm9kZS5nZXRP
cGVyYW5kKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RXhwciA9IHB1bGxNYXBwZWRFeHBy
KGV4cHIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhwcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgbm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3IFRJbnRl
cm1Td2l6emxlKG5ld0V4cHIsIG5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKSkpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dy
ZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBm
b3IgKFRJbnRlcm1Ob2RlIComYXJnIDogYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgVElu
dGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBBU1NFUlQo
dGFyZyk7CisgICAgICAgICAgICBhcmcgPSBwdWxsTWFwcGVkRXhwcih0YXJnLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgbm9kZSk7CisgICAgICAgIHJldHVy
biBub2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3Rp
dmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWdldFBhcmVu
dEZ1bmN0aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNp
dENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
VEludGVybVR5cGVkICpjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKGlzVGVybWluYWxFeHByKCpjb25kKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0
aGVyfTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dp
dGNoICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICppbml0ICAg
ID0gbm9kZS5nZXRJbml0KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3SW5pdCA9IHB1bGxN
YXBwZWRFeHByKGluaXQsIGZhbHNlKTsKKyAgICAgICAgaWYgKGluaXQgPT0gbmV3SW5pdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1Td2l0Y2go
bmV3SW5pdCwgbm9kZS5nZXRTdGF0ZW1lbnRMaXN0KCkpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBub2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdElmRWxzZVBvc3QoVEludGVybUlmRWxzZSAmbm9kZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCAgICA9IG5vZGUuZ2V0Q29u
ZGl0aW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IHB1bGxNYXBwZWRFeHBy
KGNvbmQsIGZhbHNlKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gbmV3Q29uZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwg
bm9kZS5nZXRUcnVlQmxvY2soKSwgbm9kZS5nZXRGYWxzZUJsb2NrKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QnJhbmNo
UG9zdChUSW50ZXJtQnJhbmNoICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVy
bVR5cGVkICpleHByICAgID0gbm9kZS5nZXRFeHByZXNzaW9uKCk7CisgICAgICAgIFRJbnRlcm1U
eXBlZCAqbmV3RXhwciA9IHB1bGxNYXBwZWRFeHByKGV4cHIsIGZhbHNlKTsKKyAgICAgICAgaWYg
KGV4cHIgPT0gbmV3RXhwcikKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQobm9kZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3Rt
dCgqbmV3IFRJbnRlcm1CcmFuY2gobm9kZS5nZXRGbG93T3AoKSwgbmV3RXhwcikpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdExv
b3BQcmUoVEludGVybUxvb3AgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJl
YnVpbGRJblBsYWNlKCpub2RlLmdldEJvZHkoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExP
R0lDX0VSUk9SKCk7CisgICAgICAgIH0KKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9CisKKyAgICBQb3N0UmVz
dWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IG5vZGUuZ2V0VHlwZSgp
OworICAgICAgICBpZiAoIXR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cHVzaEJpbmRpbmcobm9kZSwgbm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UG9zdChUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8gVGhlc2Ugc2hvdWxkIGJlIHNjcnViYmVk
IGZyb20gQVNUIGJlZm9yZSByZXdyaXRlciBpcyBjYWxsZWQuCisgICAgICAgIHB1c2hTdG10KG5v
ZGUpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlNlcGFyYXRl
Q29tcG91bmRFeHByZXNzaW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgaWYgKHJlYWRC
b29sRW52VmFyKCJHTVRfRElTQUJMRV9TRVBBUkFURV9DT01QT1VORF9FWFBSRVNTSU9OUyIpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFTaW1wbGlmeUxv
b3BDb25kaXRpb25zKCZjb21waWxlciwgJnJvb3QsICZjb21waWxlci5nZXRTeW1ib2xUYWJsZSgp
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVByZVBh
c3MoY29tcGlsZXIpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdG9yKGNvbXBpbGVyLCBzeW1ib2xFbnYsIGlk
R2VuKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBh
cmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTQwYTU1OTY4MmFkZGVjOWI2YTUwMDA3MmE2MGMz
ZDA2MWRiNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91
bmRFeHByZXNzaW9ucy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VOREVY
UFJFU1NJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYW5zZm9ybXMgY29kZSB0
byAodXN1YWxseSkgaGF2ZSBtb3N0IG9uZSBub24tdGVybWluYWwgZXhwcmVzc2lvbiBwZXIgc3Rh
dGVtZW50LgorLy8gVGhpcyBhbHNvIHJld3JpdGVzICgmJiksICh8fCksIGFuZCAoPzopIGludG8g
cmF3IGlmL2lmLW5vdC9pZi1lbHNlIHN0YXRlbWVudHMsIHJlc3BlY3RpdmVseS4KKy8vCisvLyBl
LmcuCisvLyAgICBpbnQgeCA9IDYgKyBmb28oeSwgYmFyKCkpOworLy8gYmVjb21lcworLy8gICAg
YXV0byBfMSA9IGJhcigpOworLy8gICAgYXV0byBfMiA9IGZvbyh5LCBfMSk7CisvLyAgICBhdXRv
IF8zID0gNiArIF8yOworLy8gICAgaW50IHggPSBfMzsKKy8vCisvLyBXQVJOSU5HOgorLy8gICAg
LSBUaGlzIGRvZXMgbm90IHJld3JpdGUgb2JqZWN0IGluZGV4aW5nIG9wZXJhdG9ycyBhcyBhIHdo
b2xlIChlLmcuIGZvby54LCBmb29beF0pLCBidXQgd2lsbAorLy8gICAgICByZXdyaXRlIHRoZSBh
cmd1bWVudHMgdG8gdGhlIG9wZXJhdG9yICh3aGVuIGFwcGxpY2FibGUpLgorLy8gICAgICBlLmcu
CisvLyAgICAgICAgZm9vKGdldFZlYygpW2kgKyAyXSArIDEpOworLy8gICAgICBiZWNvbWVzCisv
LyAgICAgICAgYXV0byBfMSA9IGdldFZlYygpOworLy8gICAgICAgIGF1dG8gXzIgPSBpICsgMjsK
Ky8vICAgICAgICBhdXRvIF8zID0gXzFbXzJdICsgMTsgLy8gSW5kZXggb3BlcmF0b3IgcmVtYWlu
cyBpbiAoKykgZXhwciBoZXJlLgorLy8gICAgICAgIGZvbyhfMyk7CisvLworQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1i
b2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE4
YzZkMTIwYjBiNDUyMjA2OTRiZmJiNjc0ZjBkYmMzZDBjMjFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwCkBAIC0w
LDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2NsYXNzIFNlcGFy
YXRvciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTZXBhcmF0
b3IoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBm
YWxzZSwgdHJ1ZSwgJnN5bWJvbFRhYmxlKSB7fQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9u
KFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGRlY2xOb2RlLT5nZXRDaGlsZENvdW50KCkgPT0gMSk7CisgICAgICAgIFRJ
bnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisKKyAgICAgICAg
aWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9kZSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciAgICAgICAgPSBzeW1i
b2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAg
ICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9s
VHlwZSA9IHZhci5zeW1ib2xUeXBlKCk7CisgICAgICAgICAgICBpZiAodHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpICYmIHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICBhdXRvICpzdHJ1Y3RWYXIgICAgICAgICAgICAg
PSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShzdHJ1
Y3R1cmUsIHRydWUpLCBTeW1ib2xUeXBlOjpFbXB0eSk7CisKKyAgICAgICAgICAgICAgICBhdXRv
ICppbnN0YW5jZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgaW5zdGFuY2VUeXBlLT5zZXRRdWFsaWZpZXIodHlwZS5nZXRRdWFsaWZpZXIoKSk7Cisg
ICAgICAgICAgICAgICAgYXV0byAqaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xU
YWJsZSwgdmFyLm5hbWUoKSwgaW5zdGFuY2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xUeXBlLCB2YXIuZXh0ZW5zaW9uKCkpOwor
CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIHJlcGxhY2VtZW50czsKKyAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJtU3ltYm9sKHN0cnVjdFZh
cikpOworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoX2JhY2sobmV3IFRJbnRlcm1T
eW1ib2woaW5zdGFuY2VWYXIpKTsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMu
cHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICBOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVu
dHJ5KGRlY2xOb2RlLCBzeW1ib2xOb2RlLCBzdGQ6Om1vdmUocmVwbGFjZW1lbnRzKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307
CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworYm9vbCBzaDo6U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucyhUQ29tcGlsZXIg
JmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgU2VwYXJhdG9yIHNlcGFyYXRv
cihjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKTsKKyAgICByb290LnRyYXZlcnNlKCZzZXBhcmF0
b3IpOworICAgIGlmICghc2VwYXJhdG9yLnVwZGF0ZVRyZWUoJmNvbXBpbGVyLCAmcm9vdCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFTZXBhcmF0ZURl
Y2xhcmF0aW9ucygmY29tcGlsZXIsICZyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3MTJlODBkOGE1
ODFlNDRlMTk2ZTg2NjQzOGY5YmNlMWRhOTQzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oCkBAIC0wLDAgKzEsMjQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXworI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFURUNPTVBPVU5E
U1RSVUNUREVDTEFSQVRJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNo
Cit7CisKKy8vIEV4YW1wbGU6CisvLyAgc3RydWN0IEZvbyB7IGludCB4OyB9IGZvbzsKKy8vIEJl
Y29tZXM6CisvLyAgc3RydWN0IEZvbyB7aW50IHg7IH07IEZvbyBmb287CitBTkdMRV9OT19ESVND
QVJEIGJvb2wgU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNv
bXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFU
RUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U2tpcHBpbmdUcmF2ZXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ta2lwcGluZ1RyYXZlcnNlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZmNDlkYWQyMjUyZTQ2N2FkOTc5MWExNzU4NDBiNjhjZTIxNjNiNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApAQCAtMCwwICsx
LDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1NLSVBQSU5HVFJBVkVSU0VSX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NLSVBQSU5HVFJBVkVSU0VSX0hfCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQgc2tpcHMgdHJhdmVy
c2luZyBjaGlsZGVuIGJ5IGRlZmF1bHQuCitjbGFzcyBTa2lwcGluZ1RyYXZlcnNlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTa2lwcGluZ1RyYXZlcnNlcihi
b29sIHByZVZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAg
ICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cikKKyAgICAgICAgOiBUSW50ZXJt
VHJhdmVyc2VyKHByZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQor
ICAgIHt9CisKKyAgICBib29sIHZpc2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFy
eSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRl
cm1CaW5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0VGVybmFyeShWaXNp
dCwgVEludGVybVRlcm5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0SWZF
bHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2
aXNpdFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24gKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNp
dEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAqKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSB7IHJldHVy
biBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NLSVBQ
SU5HVFJBVkVSU0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3NTNkYWNmMmQ2ODhjYmU2
MDE1ODgwMDZhZTI5N2ZhYzQxMzA1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmNwcApAQCAtMCwwICsxLDY4MSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY29uc3Rl
eHByIEFkZHJlc3NTcGFjZSBrQWRkcmVzc1NwYWNlc1tdID0geworICAgIEFkZHJlc3NTcGFjZTo6
Q29uc3RhbnQsCisgICAgQWRkcmVzc1NwYWNlOjpEZXZpY2UsCisgICAgQWRkcmVzc1NwYWNlOjpU
aHJlYWQsCit9OworCitjaGFyIGNvbnN0ICpzaDo6dG9TdHJpbmcoQWRkcmVzc1NwYWNlIHNwYWNl
KQoreworICAgIHN3aXRjaCAoc3BhY2UpCisgICAgeworICAgICAgICBjYXNlIEFkZHJlc3NTcGFj
ZTo6Q29uc3RhbnQ6CisgICAgICAgICAgICByZXR1cm4gImNvbnN0YW50IjsKKyAgICAgICAgY2Fz
ZSBBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAgICAgICAgIHJldHVybiAiZGV2aWNlIjsKKyAg
ICAgICAgY2FzZSBBZGRyZXNzU3BhY2U6OlRocmVhZDoKKyAgICAgICAgICAgIHJldHVybiAidGhy
ZWFkIjsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE5hbWVU
b1N0cnVjdCA9IHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj47CisKK2NsYXNzIFN0
cnVjdEZpbmRlciA6IFRJbnRlcm1SZWJ1aWxkCit7CisgICAgTmFtZVRvU3RydWN0IG5hbWVUb1N0
cnVjdDsKKworICAgIFN0cnVjdEZpbmRlcihUQ29tcGlsZXIgJmNvbXBpbGVyKSA6IFRJbnRlcm1S
ZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSkge30KKworICAgIFByZVJlc3VsdCB2aXNpdERl
Y2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IGRlY2wuc3ltYm9sLnZhcmlhYmxlKCk7CisgICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsKKworICAgICAgICBpZiAo
dmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSAmJiB0eXBlLmlzU3RydWN0U3Bl
Y2lmaWVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0
eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgQVNTRVJUKHMpOworICAgICAgICAgICAgY29u
c3QgTmFtZSBuYW1lKCpzKTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZ6ID0gbmFt
ZVRvU3RydWN0W25hbWVdOworICAgICAgICAgICAgQVNTRVJUKCF6KTsKKyAgICAgICAgICAgIHog
PSBzOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJl
UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisgICAgfQorCisgIHB1YmxpYzoKKyAgICBzdGF0aWMgTmFtZVRvU3RydWN0
IEZpbmRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKKyAg
ICB7CisgICAgICAgIFN0cnVjdEZpbmRlciBmaW5kZXIoY29tcGlsZXIpOworICAgICAgICBpZiAo
IWZpbmRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgTE9HSUNf
RVJST1IoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjptb3ZlKGZpbmRlci5uYW1l
VG9TdHJ1Y3QpOworICAgIH0KK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1RlbXBs
YXRlQXJnOjpUZW1wbGF0ZUFyZyhib29sIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OkJvb2wpLCBtVmFs
dWUodmFsdWUpIHt9CisKK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhpbnQgdmFsdWUpIDogbUtp
bmQoS2luZDo6SW50KSwgbVZhbHVlKHZhbHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVB
cmcodW5zaWduZWQgdmFsdWUpIDogbUtpbmQoS2luZDo6VUludCksIG1WYWx1ZSh2YWx1ZSkge30K
KworVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKGNvbnN0IFRUeXBlICZ2YWx1ZSkgOiBtS2luZChL
aW5kOjpUeXBlKSwgbVZhbHVlKHZhbHVlKSB7fQorCitib29sIFRlbXBsYXRlQXJnOjpvcGVyYXRv
cj09KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobUtpbmQgIT0g
b3RoZXIubUtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3dpdGNoIChtS2luZCkKKyAgICB7CisgICAgICAgIGNhc2UgS2luZDo6Qm9vbDoKKyAgICAgICAg
ICAgIHJldHVybiBtVmFsdWUuYiA9PSBvdGhlci5tVmFsdWUuYjsKKyAgICAgICAgY2FzZSBLaW5k
OjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmkgPT0gb3RoZXIubVZhbHVlLmk7Cisg
ICAgICAgIGNhc2UgS2luZDo6VUludDoKKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUudSA9PSBv
dGhlci5tVmFsdWUudTsKKyAgICAgICAgY2FzZSBLaW5kOjpUeXBlOgorICAgICAgICAgICAgcmV0
dXJuICptVmFsdWUudCA9PSAqb3RoZXIubVZhbHVlLnQ7CisgICAgfQorfQorCitib29sIFRlbXBs
YXRlQXJnOjpvcGVyYXRvcjwoY29uc3QgVGVtcGxhdGVBcmcgJm90aGVyKSBjb25zdAoreworICAg
IGlmIChtS2luZCA8IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKG1LaW5kID4gb3RoZXIubUtpbmQpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoIChtS2luZCkKKyAgICB7CisgICAgICAgIGNh
c2UgS2luZDo6Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUuYiA8IG90aGVyLm1WYWx1
ZS5iOworICAgICAgICBjYXNlIEtpbmQ6OkludDoKKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUu
aSA8IG90aGVyLm1WYWx1ZS5pOworICAgICAgICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAg
ICByZXR1cm4gbVZhbHVlLnUgPCBvdGhlci5tVmFsdWUudTsKKyAgICAgICAgY2FzZSBLaW5kOjpU
eXBlOgorICAgICAgICAgICAgcmV0dXJuICptVmFsdWUudCA8ICpvdGhlci5tVmFsdWUudDsKKyAg
ICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgU3ltYm9sRW52OjpUZW1w
bGF0ZU5hbWU6Om9wZXJhdG9yPT0oY29uc3QgVGVtcGxhdGVOYW1lICZvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gYmFzZU5hbWUgPT0gb3RoZXIuYmFzZU5hbWUgJiYgdGVtcGxhdGVBcmdzID09
IG90aGVyLnRlbXBsYXRlQXJnczsKK30KKworYm9vbCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6
b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGJh
c2VOYW1lIDwgb3RoZXIuYmFzZU5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKG90aGVyLmJhc2VOYW1lIDwgYmFzZU5hbWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0ZW1wbGF0ZUFyZ3MgPCBvdGhlci50ZW1w
bGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYmFzZU5hbWUuZW1wdHkoKSAmJiB0ZW1wbGF0ZUFyZ3MuZW1wdHko
KTsKK30KKwordm9pZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6Y2xlYXIoKQoreworICAgIGJh
c2VOYW1lID0gTmFtZSgpOworICAgIHRlbXBsYXRlQXJncy5jbGVhcigpOworfQorCitOYW1lIFN5
bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25z
dAoreworICAgIEFTU0VSVChidWZmZXIuZW1wdHkoKSk7CisKKyAgICBpZiAodGVtcGxhdGVBcmdz
LmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gYmFzZU5hbWU7CisgICAgfQorCisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbiA9IHN0ZDo6bWF4KHsKKyAgICAgICAgc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwLCAgLy8KKyAgICAgICAgc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjpkaWdpdHMxMCwgICAgICAgLy8KKyAgICAgICAgNSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4X2xlbmd0aCgidHJ1ZSIsICJmYWxzZSIp
CisgICAgfSk7CisKKyAgICBidWZmZXIucmVzZXJ2ZShiYXNlTmFtZS5yYXdOYW1lKCkubGVuZ3Ro
KCkgKyAobiArIDIpICogdGVtcGxhdGVBcmdzLnNpemUoKSArIDEpOworICAgIGJ1ZmZlciArPSBi
YXNlTmFtZS5yYXdOYW1lKCkuZGF0YSgpOworCisgICAgaWYgKCF0ZW1wbGF0ZUFyZ3MuZW1wdHko
KSkKKyAgICB7CisgICAgICAgIGJ1ZmZlciArPSAiPCI7CisKKyAgICAgICAgYm9vbCBmaXJzdCA9
IHRydWU7CisgICAgICAgIGNoYXIgYXJnQnVmZmVyW24gKyAxXTsKKyAgICAgICAgZm9yIChjb25z
dCBUZW1wbGF0ZUFyZyAmYXJnIDogdGVtcGxhdGVBcmdzKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoZmlyc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXIgKz0gIiwgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29uc3QgVGVtcGxhdGVBcmc6OlZhbHVlIHZhbHVlID0gYXJnLnZhbHVlKCk7CisgICAgICAgICAg
ICBjb25zdCBUZW1wbGF0ZUFyZzo6S2luZCBraW5kICAgPSBhcmcua2luZCgpOworICAgICAgICAg
ICAgc3dpdGNoIChraW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVGVt
cGxhdGVBcmc6OktpbmQ6OkJvb2w6CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0g
InRydWUiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9
ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFRlbXBsYXRlQXJnOjpLaW5kOjpJbnQ6CisgICAg
ICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB2YWx1ZS5pKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFRlbXBsYXRlQXJnOjpLaW5kOjpVSW50Ogor
ICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiV1IiwgdmFsdWUudSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VHlw
ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gKnZhbHVlLnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJl
ICpzID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyICs9IHMtPm5hbWUoKS5kYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSGFzU2NhbGFyQmFzaWNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIXR5cGUuaXNBcnJheSgpKTsgIC8vIFRPRE8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlciArPSB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldE5v
bWluYWxTaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdC
dWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIlaSIsIHR5cGUu
Z2V0Q29scygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVm
ZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAieCI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIlaSIsIHR5cGUuZ2V0Um93
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgYnVmZmVyICs9ICI+IjsKKyAgICB9CisKKyAgICBjb25zdCBJbW11dGFi
bGVTdHJpbmcgbmFtZShidWZmZXIpOworICAgIGJ1ZmZlci5jbGVhcigpOworCisgICAgcmV0dXJu
IE5hbWUobmFtZSwgYmFzZU5hbWUuc3ltYm9sVHlwZSgpKTsKK30KKwordm9pZCBTeW1ib2xFbnY6
OlRlbXBsYXRlTmFtZTo6YXNzaWduKGNvbnN0IE5hbWUgJm5hbWUsIHNpemVfdCBhcmdDb3VudCwg
Y29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpCit7CisgICAgYmFzZU5hbWUgPSBuYW1lOworICAgIHRl
bXBsYXRlQXJncy5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7
ICsraSkKKyAgICB7CisgICAgICAgIHRlbXBsYXRlQXJncy5wdXNoX2JhY2soYXJnc1tpXSk7Cisg
ICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitTeW1ib2xFbnY6OlN5bWJvbEVu
dihUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisgICAgOiBtU3ltYm9s
VGFibGUoY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSksCisgICAgICBtTmFtZVRvU3RydWN0KFN0
cnVjdEZpbmRlcjo6RmluZFN0cnVjdHMoY29tcGlsZXIsIHJvb3QpKQore30KKworY29uc3QgVFN0
cnVjdHVyZSAmU3ltYm9sRW52OjpyZW1hcChjb25zdCBUU3RydWN0dXJlICZzKSBjb25zdAorewor
ICAgIGNvbnN0IE5hbWUgbmFtZShzKTsKKyAgICBhdXRvIGl0ZXIgPSBtTmFtZVRvU3RydWN0LmZp
bmQobmFtZSk7CisgICAgaWYgKGl0ZXIgPT0gbU5hbWVUb1N0cnVjdC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzOworICAgIH0KKyAgICBjb25zdCBUU3RydWN0dXJlICZ6ID0gKml0ZXIt
PnNlY29uZDsKKyAgICByZXR1cm4gejsKK30KKworY29uc3QgVFN0cnVjdHVyZSAqU3ltYm9sRW52
OjpyZW1hcChjb25zdCBUU3RydWN0dXJlICpzKSBjb25zdAoreworICAgIGlmIChzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICZyZW1hcCgqcyk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwor
fQorCitjb25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwo
KQoreworICAgIEFTU0VSVCghbVJldXNhYmxlU2lnQnVmZmVyLmVtcHR5KCkpOworCisgICAgU2ln
VG9GdW5jICZzaWdUb0Z1bmMgPSBtT3ZlcmxvYWRzW21SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZl
cl07CisgICAgVEZ1bmN0aW9uIComZnVuYyAgICAgPSBzaWdUb0Z1bmNbbVJldXNhYmxlU2lnQnVm
ZmVyXTsKKworICAgIGlmICghZnVuYykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1
cm5UeXBlID0gbVJldXNhYmxlU2lnQnVmZmVyLmJhY2soKTsKKyAgICAgICAgbVJldXNhYmxlU2ln
QnVmZmVyLnBvcF9iYWNrKCk7CisKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbVJldXNhYmxl
VGVtcGxhdGVOYW1lQnVmZmVyLmZ1bGxOYW1lKG1SZXVzYWJsZVN0cmluZ0J1ZmZlcik7CisKKyAg
ICAgICAgZnVuYyA9IG5ldyBURnVuY3Rpb24oJm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCks
IG5hbWUuc3ltYm9sVHlwZSgpLCAmcmV0dXJuVHlwZSwgZmFsc2UpOworICAgICAgICBmb3IgKGNv
bnN0IFRUeXBlICZwYXJhbVR5cGUgOiBtUmV1c2FibGVTaWdCdWZmZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZ1bmMtPmFkZFBhcmFtZXRlcigKKyAgICAgICAgICAgICAgICBuZXcgVFZhcmlh
YmxlKCZtU3ltYm9sVGFibGUsIGtFbXB0eUltbXV0YWJsZVN0cmluZywgJnBhcmFtVHlwZSwgU3lt
Ym9sVHlwZTo6RW1wdHkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1SZXVzYWJsZVNpZ0J1
ZmZlci5jbGVhcigpOworICAgIG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5jbGVhcigpOwor
CisgICAgcmV0dXJuICpmdW5jOworfQorCitjb25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0
RnVuY3Rpb25PdmVybG9hZChjb25zdCBOYW1lICZuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJldHVyblR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFyYW1D
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRUeXBlICoqcGFyYW1UeXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCB0ZW1wbGF0ZUFyZ0NvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBs
YXRlQXJncykKK3sKKyAgICBBU1NFUlQobVJldXNhYmxlU2lnQnVmZmVyLmVtcHR5KCkpOworICAg
IEFTU0VSVChtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZW1wdHkoKSk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIG1SZXVz
YWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2soKnBhcmFtVHlwZXNbaV0pOworICAgIH0KKyAgICBtUmV1
c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKHJldHVyblR5cGUpOworICAgIG1SZXVzYWJsZVRlbXBs
YXRlTmFtZUJ1ZmZlci5hc3NpZ24obmFtZSwgdGVtcGxhdGVBcmdDb3VudCwgdGVtcGxhdGVBcmdz
KTsKKyAgICByZXR1cm4gZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKK30KKworVEludGVybUFn
Z3JlZ2F0ZSAmU3ltYm9sRW52OjpjYWxsRnVuY3Rpb25PdmVybG9hZChjb25zdCBOYW1lICZuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncykKK3sKKyAgICBBU1NFUlQobVJldXNhYmxlU2lnQnVm
ZmVyLmVtcHR5KCkpOworICAgIEFTU0VSVChtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZW1w
dHkoKSk7CisKKyAgICBmb3IgKFRJbnRlcm1Ob2RlICphcmcgOiBhcmdzKQorICAgIHsKKyAgICAg
ICAgVEludGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIEFTU0VS
VCh0YXJnKTsKKyAgICAgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayh0YXJnLT5nZXRU
eXBlKCkpOworICAgIH0KKyAgICBtUmV1c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKHJldHVyblR5
cGUpOworICAgIG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5hc3NpZ24obmFtZSwgdGVtcGxh
dGVBcmdDb3VudCwgdGVtcGxhdGVBcmdzKTsKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSBn
ZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6
Q3JlYXRlUmF3RnVuY3Rpb25DYWxsKGZ1bmMsICZhcmdzKTsKK30KKworY29uc3QgVFN0cnVjdHVy
ZSAmU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUoY29uc3QgTmFtZSAmbmFtZSwgVEZpZWxkTGlzdCAm
ZmllbGRzKQoreworICAgIEFTU0VSVChuYW1lLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsKTsKKworICAgIFRTdHJ1Y3R1cmUgKiZzID0gbUFuZ2xlU3RydWN0c1tuYW1l
LnJhd05hbWUoKV07CisgICAgQVNTRVJUKCFzKTsKKyAgICBzID0gbmV3IFRTdHJ1Y3R1cmUoJm1T
eW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZmaWVsZHMsIG5hbWUuc3ltYm9sVHlwZSgpKTsK
KyAgICByZXR1cm4gKnM7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0VGV4
dHVyZUVudihUQmFzaWNUeXBlIHNhbXBsZXJUeXBlKQoreworICAgIEFTU0VSVChJc1NhbXBsZXIo
c2FtcGxlclR5cGUpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlIComZW52ID0gbVRleHR1cmVFbnZz
W3NhbXBsZXJUeXBlXTsKKyAgICBpZiAoZW52ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBh
dXRvICp0ZXh0dXJlVHlwZSA9IG5ldyBUVHlwZShzYW1wbGVyVHlwZSk7CisgICAgICAgIGF1dG8g
KnRleHR1cmUgICAgID0gbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0
ZXh0dXJlIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgICAgICBtYXJrQXNQb2ludGVyKCp0ZXh0
dXJlLCBBZGRyZXNzU3BhY2U6OlRocmVhZCk7CisKKyAgICAgICAgYXV0byAqc2FtcGxlciA9Cisg
ICAgICAgICAgICBuZXcgVEZpZWxkKG5ldyBUVHlwZSgmZ2V0U2FtcGxlclN0cnVjdCgpLCBmYWxz
ZSksIEltbXV0YWJsZVN0cmluZygic2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICBr
Tm9Tb3VyY2VMb2MsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9p
bnRlcigqc2FtcGxlciwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIHN0ZDo6c3Ry
aW5nIGVudk5hbWU7CisgICAgICAgIGVudk5hbWUgKz0gIlRleHR1cmVFbnY8IjsKKyAgICAgICAg
ZW52TmFtZSArPSBHZXRUZXh0dXJlVHlwZU5hbWUoc2FtcGxlclR5cGUpLnJhd05hbWUoKS5kYXRh
KCk7CisgICAgICAgIGVudk5hbWUgKz0gIj4iOworCisgICAgICAgIGVudiA9ICZuZXdTdHJ1Y3R1
cmUoTmFtZShlbnZOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqbmV3IFRGaWVsZExpc3R7dGV4dHVyZSwgc2FtcGxlcn0pOworICAg
IH0KKyAgICByZXR1cm4gKmVudjsKK30KKworY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52Ojpn
ZXRTYW1wbGVyU3RydWN0KCkKK3sKKyAgICBpZiAoIW1TYW1wbGVyKQorICAgIHsKKyAgICAgICAg
bVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmco
Im1ldGFsOjpzYW1wbGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
IFRGaWVsZExpc3QoKSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgIH0KKyAgICByZXR1
cm4gKm1TYW1wbGVyOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya1NwYWNlKFZhckZpZWxkIHgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NTcGFjZSBzcGFjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3Bh
Y2U+ICZtYXApCit7CisgICAgLy8gSXQgaXMgaW4gcHJpbmNpcGxlIHBlcm1pc3NpYmxlIHRvIGhh
dmUgcmVmZXJlbmNlcyB0byBwb2ludGVycyBvciBtdWx0aXBsZSBwb2ludGVycywgYnV0IHRoaXMK
KyAgICAvLyBpcyBub3QgcmVxdWlyZWQgZm9yIG5vdyBhbmQgd291bGQgcmVxdWlyZSBjb2RlIGNo
YW5nZXMgdG8gZ2V0IHJpZ2h0LgorICAgIEFTU0VSVCghaXNQb2ludGVyKHgpKTsKKyAgICBBU1NF
UlQoIWlzUmVmZXJlbmNlKHgpKTsKKworICAgIG1hcFt4XSA9IHNwYWNlOworfQorCitjb25zdCBB
ZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZp
ZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApIGNvbnN0Cit7CisgICAgY29uc3QgYXV0byBpdGVyID0g
bWFwLmZpbmQoeCk7CisgICAgaWYgKGl0ZXIgPT0gbWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGNvbnN0IEFkZHJlc3NTcGFjZSBzcGFjZSA9IGl0
ZXItPnNlY29uZDsKKyAgICBjb25zdCBhdXRvIGluZGV4ICAgICAgICAgPSBzdGF0aWNfY2FzdDxz
dGQ6OnVuZGVybHlpbmdfdHlwZV90PEFkZHJlc3NTcGFjZT4+KHNwYWNlKTsKKyAgICByZXR1cm4g
JmtBZGRyZXNzU3BhY2VzW2luZGV4XTsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BvaW50
ZXIoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKQoreworICAgIHJldHVybiBtYXJrU3Bh
Y2UoeCwgc3BhY2UsIG1Qb2ludGVycyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNSZWZl
cmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKQoreworICAgIHJldHVybiBtYXJr
U3BhY2UoeCwgc3BhY2UsIG1SZWZlcmVuY2VzKTsKK30KKworY29uc3QgQWRkcmVzc1NwYWNlICpT
eW1ib2xFbnY6OmlzUG9pbnRlcihWYXJGaWVsZCB4KSBjb25zdAoreworICAgIHJldHVybiBpc1Nw
YWNlKHgsIG1Qb2ludGVycyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAqU3ltYm9sRW52Ojpp
c1JlZmVyZW5jZShWYXJGaWVsZCB4KSBjb25zdAoreworICAgIHJldHVybiBpc1NwYWNlKHgsIG1S
ZWZlcmVuY2VzKTsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BhY2tlZChjb25zdCBURmll
bGQgJmZpZWxkKQoreworICAgIG1QYWNrZWRGaWVsZHMuaW5zZXJ0KCZmaWVsZCk7Cit9CisKK2Jv
b2wgU3ltYm9sRW52Ojppc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdAoreworICAg
IHJldHVybiBtUGFja2VkRmllbGRzLmZpbmQoJmZpZWxkKSAhPSBtUGFja2VkRmllbGRzLmVuZCgp
OworfQorCitzdGF0aWMgVEJhc2ljVHlwZSBHZXRUZXh0dXJlQmFzaWNUeXBlKFRCYXNpY1R5cGUg
YmFzaWNUeXBlKQoreworICAgIEFTU0VSVChJc1NhbXBsZXIoYmFzaWNUeXBlKSk7CisKKyAgICBz
d2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0
ZXJuYWxPRVM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllFWFQ6CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBs
ZXJWaWRlb1dFQkdMOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEQXJyYXlTaGFkb3c6CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjFEU2hhZG93OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFk
b3c6CisgICAgICAgICAgICByZXR1cm4gVEJhc2ljVHlwZTo6RWJ0RmxvYXQ7CisKKyAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
RE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxRDoKKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRFJlY3Q6CisgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJy
YXk6CisgICAgICAgICAgICByZXR1cm4gVEJhc2ljVHlwZTo6RWJ0SW50OworCisgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICBj
YXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6Cisg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRN
U0FycmF5OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0OgorICAgICAgICBj
YXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5
OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFVJbnQ7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gVEJh
c2ljVHlwZTo6RWJ0Vm9pZDsKKyAgICB9Cit9CisKK05hbWUgc2g6OkdldFRleHR1cmVUeXBlTmFt
ZShUQmFzaWNUeXBlIHNhbXBsZXJUeXBlKQoreworICAgIEFTU0VSVChJc1NhbXBsZXIoc2FtcGxl
clR5cGUpKTsKKworICAgIGNvbnN0IFRCYXNpY1R5cGUgdGV4dHVyZVR5cGUgPSBHZXRUZXh0dXJl
QmFzaWNUeXBlKHNhbXBsZXJUeXBlKTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworCisjZGVmaW5l
IEhBTkRMRV9URVhUVVJFX05BTUUoYmFzZU5hbWUpICAgICAgICAgICAgICAgIFwKKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN3
aXRjaCAodGV4dHVyZVR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPGZsb2F0PiI7IFwKKyAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2Fz
ZSBUQmFzaWNUeXBlOjpFYnRJbnQ6ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
bmFtZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPGludD4iOyAgIFwKKyAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRVSW50OiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFt
ZSA9ICJtZXRhbDo6IiBiYXNlTmFtZSAiPHVpbnQ+IjsgIFwKKyAgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgTE9HSUNf
RVJST1IoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lID0g
bnVsbHB0cjsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworICAg
IHN3aXRjaCAoc2FtcGxlclR5cGUpCisgICAgeworICAgICAgICAvLyAxZAorICAgICAgICBjYXNl
IEVidFNhbXBsZXIxRDogIC8vIERlc2t0b3AgR0xTTCBzYW1wbGVyIHR5cGU6CisgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIxRDoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICAg
ICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkIik7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAvLyAxZCBhcnJheQorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5Ogor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxl
cjFEQXJyYXk6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMWRfYXJy
YXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEJ1ZmZlciB0ZXh0dXJlcwor
ICAgICAgICBjYXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJC
dWZmZXI6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJCdWZmZXI6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlX2J1ZmZlciIpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgLy8gMmQgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRFJl
Y3Q6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRFJlY3Q6CisgICAgICAgICAgICBIQU5ETEVf
VEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IC8vIDNkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICBjYXNl
IEVidElTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgICAg
IEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUzZCIpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgLy8gQ3ViZSB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlY3ViZSIpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gMmQgYXJyYXkgdGV4dHVyZXMKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgSEFORExFX1RF
WFRVUkVfTkFNRSgidGV4dHVyZTJkX2FycmF5Iik7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNUzoK
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVM6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVS
RV9OQU1FKCJ0ZXh0dXJlMmRfbXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVNBcnJh
eToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoInRleHR1cmUyZF9tc19hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gY3ViZSBhcnJheQorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJy
YXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0
dXJlY3ViZV9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gU2hhZG93
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEU2hhZG93OgorICAgICAgICBjYXNlIEVidFNhbXBs
ZXIxREFycmF5U2hhZG93OgorICAgICAgICAgICAgVE9ETygpOworICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgiVE9ETyIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRSZWN0U2hhZG93OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoImRlcHRoMmQiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAg
ICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aGN1YmUiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICBI
QU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkX2FycmF5Iik7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisgICAgICAgICAgICBI
QU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aGN1YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIEV4dGVudGlvbnMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJu
YWxPRVM6ICAgICAgIC8vIE9ubHkgdmFsaWQgaWYgT0VTX0VHTF9pbWFnZV9leHRlcm5hbCBleGlz
dHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllFWFQ6ICAvLyBPbmx5IHZh
bGlkIGlmIEdMX0VYVF9ZVVZfdGFyZ2V0IGV4aXN0czoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVy
VmlkZW9XRUJHTDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRMRV9URVhU
VVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1F
CisKKyAgICByZXR1cm4gTmFtZShuYW1lLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9s
RW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGM5NjQ1ZTA1MTk4ODY3ZjI1ZGMwMzBjMDJlZWMwNzU2NWZiZDJl
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaApAQCAtMCwwICsx
LDIxOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRf
c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisKK25hbWVzcGFj
ZSBzaAoreworCitlbnVtIGNsYXNzIEFkZHJlc3NTcGFjZQoreworICAgIENvbnN0YW50LAorICAg
IERldmljZSwKKyAgICBUaHJlYWQsCit9OworCitjaGFyIGNvbnN0ICp0b1N0cmluZyhBZGRyZXNz
U3BhY2Ugc3BhY2UpOworCitjbGFzcyBWYXJGaWVsZAoreworICBwdWJsaWM6CisgICAgVmFyRmll
bGQoY29uc3QgVFZhcmlhYmxlICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpIHt9CisgICAgVmFyRmll
bGQoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSB7fQorCisgICAgQU5HTEVf
SU5MSU5FIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtVmFyaWFi
bGU7IH0KKworICAgIEFOR0xFX0lOTElORSBjb25zdCBURmllbGQgKmZpZWxkKCkgY29uc3QgeyBy
ZXR1cm4gbUZpZWxkOyB9CisKKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZhckZpZWxkICZvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtVmFyaWFibGUg
PT0gb3RoZXIubVZhcmlhYmxlICYmIG1GaWVsZCA9PSBvdGhlci5tRmllbGQ7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgY29uc3QgVFZhcmlhYmxlICptVmFyaWFibGUgPSBudWxscHRyOworICAg
IGNvbnN0IFRGaWVsZCAqbUZpZWxkICAgICAgID0gbnVsbHB0cjsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBzaAorCituYW1lc3BhY2Ugc3RkCit7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgaGFzaDxz
aDo6VmFyRmllbGQ+Cit7CisgICAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3Qgc2g6OlZhckZpZWxk
ICZ4KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3Qgc2g6OlRWYXJpYWJsZSAqdmFyID0geC52
YXJpYWJsZSgpOworICAgICAgICBpZiAodmFyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpoYXNoPGNvbnN0IHNoOjpUVmFyaWFibGUgKj4oKSh2YXIpOworICAgICAgICB9Cisg
ICAgICAgIGNvbnN0IHNoOjpURmllbGQgKmZpZWxkID0geC5maWVsZCgpOworICAgICAgICByZXR1
cm4gc3RkOjpoYXNoPGNvbnN0IHNoOjpURmllbGQgKj4oKShmaWVsZCk7CisgICAgfQorfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHN0ZAorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVGVtcGxhdGVB
cmcKK3sKKyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgS2luZAorICAgIHsKKyAgICAgICAgQm9v
bCwKKyAgICAgICAgSW50LAorICAgICAgICBVSW50LAorICAgICAgICBUeXBlLAorICAgIH07CisK
KyAgICB1bmlvbiBWYWx1ZQorICAgIHsKKyAgICAgICAgVmFsdWUoYm9vbCB2YWx1ZSkgOiBiKHZh
bHVlKSB7fQorICAgICAgICBWYWx1ZShpbnQgdmFsdWUpIDogaSh2YWx1ZSkge30KKyAgICAgICAg
VmFsdWUodW5zaWduZWQgdmFsdWUpIDogdSh2YWx1ZSkge30KKyAgICAgICAgVmFsdWUoY29uc3Qg
VFR5cGUgJnZhbHVlKSA6IHQoJnZhbHVlKSB7fQorCisgICAgICAgIGJvb2wgYjsKKyAgICAgICAg
aW50IGk7CisgICAgICAgIHVuc2lnbmVkIHU7CisgICAgICAgIGNvbnN0IFRUeXBlICp0OworICAg
IH07CisKKyAgICBUZW1wbGF0ZUFyZyhib29sIHZhbHVlKTsKKyAgICBUZW1wbGF0ZUFyZyhpbnQg
dmFsdWUpOworICAgIFRlbXBsYXRlQXJnKHVuc2lnbmVkIHZhbHVlKTsKKyAgICBUZW1wbGF0ZUFy
Zyhjb25zdCBUVHlwZSAmdmFsdWUpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRlbXBs
YXRlQXJnICZvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGVtcGxhdGVB
cmcgJm90aGVyKSBjb25zdDsKKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1LaW5k
OyB9CisgICAgVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKworICBwdWJs
aWM6CisgICAgS2luZCBtS2luZDsKKyAgICBWYWx1ZSBtVmFsdWU7Cit9OworCisvLyBBbiBlbnZp
cm9ubWVudCBmb3IgY3JlYXRpbmcgYW5kIHVuaXF1ZWx5IHNoYXJpbmcgVFN5bWJvbCBvYmplY3Rz
LgorY2xhc3MgU3ltYm9sRW52Cit7CisgICAgY2xhc3MgVGVtcGxhdGVOYW1lCisgICAgeworICAg
ICAgICBOYW1lIGJhc2VOYW1lOworICAgICAgICBzdGQ6OnZlY3RvcjxUZW1wbGF0ZUFyZz4gdGVt
cGxhdGVBcmdzOworCisgICAgICBwdWJsaWM6CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29u
c3QgVGVtcGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisKKyAgICAgICAgYm9vbCBlbXB0eSgpIGNv
bnN0OworICAgICAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAgICAgTmFtZSBmdWxsTmFtZShzdGQ6
OnN0cmluZyAmYnVmZmVyKSBjb25zdDsKKworICAgICAgICB2b2lkIGFzc2lnbihjb25zdCBOYW1l
ICZuYW1lLCBzaXplX3QgYXJnQ291bnQsIGNvbnN0IFRlbXBsYXRlQXJnICphcmdzKTsKKyAgICB9
OworCisgICAgdXNpbmcgVHlwZVJlZiAgICAgICAgPSBDUmVmPFRUeXBlPjsKKyAgICB1c2luZyBT
aWcgICAgICAgICAgICA9IHN0ZDo6dmVjdG9yPFR5cGVSZWY+OyAgLy8gUGFyYW0wLCBQYXJhbTEs
IC4uLiBQYXJhbU4sIFJldHVybgorICAgIHVzaW5nIFNpZ1RvRnVuYyAgICAgID0gc3RkOjptYXA8
U2lnLCBURnVuY3Rpb24gKj47CisgICAgdXNpbmcgT3ZlcmxvYWRzICAgICAgPSBzdGQ6Om1hcDxU
ZW1wbGF0ZU5hbWUsIFNpZ1RvRnVuYz47CisgICAgdXNpbmcgQW5nbGVTdHJ1Y3RzICAgPSBzdGQ6
Om1hcDxJbW11dGFibGVTdHJpbmcsIFRTdHJ1Y3R1cmUgKj47CisgICAgdXNpbmcgVGV4dHVyZVN0
cnVjdHMgPSBzdGQ6Om1hcDxUQmFzaWNUeXBlLCBUU3RydWN0dXJlICo+OworCisgIHB1YmxpYzoK
KyAgICBTeW1ib2xFbnYoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUoKSB7IHJldHVybiBtU3ltYm9sVGFibGU7
IH0KKworICAgIC8vIFRoZXJlIGV4aXN0IEFuZ2xlIHJld3JpdGVzIHRoYXQgY2FuIGxlYWQgdG8g
aW5jb2hlcmVudCBzdHJ1Y3RzCisgICAgLy8KKyAgICAvLyBFeGFtcGxlCisgICAgLy8gICAgc3Ry
dWN0IEEgeyAuLi4gfQorICAgIC8vICAgIHN0cnVjdCBCIHsgQScgYTsgfSAvLyBBJyBoYXMgc2Ft
ZSBuYW1lIGFzIEEgYnV0IGlzIG5vdCBpZGVudGljYWwuCisgICAgLy8gYmVjb21lcworICAgIC8v
ICAgIHN0cnVjdCBBIHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEgYTsgfQorICAgIC8v
CisgICAgLy8gVGhpcyBub3RhYmx5IGhhcHBlbnMgd2hlbiBBIGNvbnRhaW5zIGEgc2FtcGxlciBp
biB0aGUgb3JpZ2luYWwgR0xTTCBjb2RlIGJ1dCBpcyByZXdyaXR0ZW4gdG8KKyAgICAvLyBub3Qg
aGF2ZSBhIHNhbXBsZXIsIHlldCB0aGUgQScgc3RydWN0IGZpZWxkIHN0aWxsIGNvbnRhaW5zIHRo
ZSBzYW1wbGVyIGZpZWxkLgorICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0IFRTdHJ1
Y3R1cmUgJnMpIGNvbnN0OworCisgICAgLy8gTGlrZSBgVFN0cnVjdHVyZSAmcmVtYXAoY29uc3Qg
VFN0cnVjdHVyZSAmcylgIGJ1dCBhZGRpdGlvbmFsbHkgbWFwcyBudWxsIHRvIG51bGwuCisgICAg
Y29uc3QgVFN0cnVjdHVyZSAqcmVtYXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3Q7CisKKyAg
ICBjb25zdCBURnVuY3Rpb24gJmdldEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJl
dHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBwYXJhbUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCB0ZW1wbGF0ZUFyZ0NvdW50ICAgICAgICAgPSAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxh
dGVBcmdzID0gbnVsbHB0cik7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlICZjYWxsRnVuY3Rpb25P
dmVybG9hZChjb25zdCBOYW1lICZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3Vu
dCAgICAgICAgID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdzID0gbnVsbHB0cik7CisKKyAgICBjb25z
dCBUU3RydWN0dXJlICZuZXdTdHJ1Y3R1cmUoY29uc3QgTmFtZSAmbmFtZSwgVEZpZWxkTGlzdCAm
ZmllbGRzKTsKKworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFRleHR1cmVFbnYoVEJhc2ljVHlw
ZSBzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAmZ2V0U2FtcGxlclN0cnVjdCgp
OworCisgICAgdm9pZCBtYXJrQXNQb2ludGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFj
ZSk7CisgICAgY29uc3QgQWRkcmVzc1NwYWNlICppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3Q7
CisKKyAgICB2b2lkIG1hcmtBc1JlZmVyZW5jZShWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3Bh
Y2UpOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29u
c3Q7CisKKyAgICB2b2lkIG1hcmtBc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBi
b29sIGlzUGFja2VkKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgY29uc3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworCisgICAgdm9p
ZCBtYXJrU3BhY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlLCBzdGQ6OnVub3JkZXJl
ZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCk7CisgICAgY29uc3QgQWRkcmVzc1Nw
YWNlICppc1NwYWNlKFZhckZpZWxkIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBj
b25zdDsKKworICBwcml2YXRlOgorICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworCisg
ICAgc3RkOjptYXA8TmFtZSwgY29uc3QgVFN0cnVjdHVyZSAqPiBtTmFtZVRvU3RydWN0OworICAg
IE92ZXJsb2FkcyBtT3ZlcmxvYWRzOworICAgIFNpZyBtUmV1c2FibGVTaWdCdWZmZXI7CisgICAg
VGVtcGxhdGVOYW1lIG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlcjsKKyAgICBzdGQ6OnN0cmlu
ZyBtUmV1c2FibGVTdHJpbmdCdWZmZXI7CisKKyAgICBBbmdsZVN0cnVjdHMgbUFuZ2xlU3RydWN0
czsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VEJhc2ljVHlwZSwgY29uc3QgVFN0cnVjdHVyZSAq
PiBtVGV4dHVyZUVudnM7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqbVNhbXBsZXIgPSBudWxscHRy
OworCisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1Qb2lu
dGVyczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gbVJl
ZmVyZW5jZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGaWVsZCAqPiBtUGFja2Vk
RmllbGRzOworfTsKKworTmFtZSBHZXRUZXh0dXJlVHlwZU5hbWUoVEJhc2ljVHlwZSBzYW1wbGVy
VHlwZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1
Y3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ODQzMzMyZGQ4ZGFjMjc5MmRiMmQyNjA4Yjg2ZWVlMTI5YjVj
MWUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5jcHAK
QEAgLTAsMCArMSwzODMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lu
Y2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNsdWRl
IDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmlu
Z0J1aWxkZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBu
YW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQorewor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEVkZ2VzID0gc3RkOjp1bm9yZGVyZWRfc2V0
PFQ+OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEdyYXBoID0gc3RkOjp1bm9yZGVy
ZWRfbWFwPFQsIEVkZ2VzPFQ+PjsKKwordm9pZCBCdWlsZEdyYXBoSW1wbChTeW1ib2xFbnYgJnN5
bWJvbEVudiwgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZywgY29uc3QgVFN0cnVjdHVyZSAq
cykKK3sKKyAgICBpZiAoZy5maW5kKHMpICE9IGcuZW5kKCkpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXMgPSBnW3NdOwor
CisgICAgY29uc3QgVEZpZWxkTGlzdCAmZnMgPSBzLT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0
IFRGaWVsZCAqZiA6IGZzKQorICAgIHsKKyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnog
PSBzeW1ib2xFbnYucmVtYXAoZi0+dHlwZSgpLT5nZXRTdHJ1Y3QoKSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVzLmluc2VydCh6KTsKKyAgICAgICAgICAgIEJ1aWxkR3JhcGhJbXBsKHN5bWJv
bEVudiwgZywgeik7CisgICAgICAgICAgICBFZGdlczxjb25zdCBUU3RydWN0dXJlICo+ICZleiA9
IGdbel07CisgICAgICAgICAgICBlcy5pbnNlcnQoZXouYmVnaW4oKSwgZXouZW5kKCkpOworICAg
ICAgICB9CisgICAgfQorfQorCitHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IEJ1aWxkR3JhcGgo
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiAmc3RydWN0cykKK3sKKyAg
ICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGc7CisgICAgZm9yIChjb25zdCBUU3RydWN0dXJl
ICpzIDogc3RydWN0cykKKyAgICB7CisgICAgICAgIEJ1aWxkR3JhcGhJbXBsKHN5bWJvbEVudiwg
Zywgcyk7CisgICAgfQorICAgIHJldHVybiBnOworfQorCisvLyBBbGdvcnRobTogaHR0cHM6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvVG9wb2xvZ2ljYWxfc29ydGluZyNEZXB0aC1maXJzdF9zZWFy
Y2gKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RkOjp2ZWN0b3I8VD4gVG9wb3NvcnQoY29uc3Qg
R3JhcGg8VD4gJmcpCit7CisgICAgLy8gbm9kZXMgd2l0aCB0ZW1wb3JhcnkgbWFyaworICAgIHN0
ZDo6dW5vcmRlcmVkX3NldDxUPiB0ZW1wczsKKworICAgIC8vIG5vZGVzIHdpdGhvdXQgcGVybWFu
ZW50IG1hcmsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8VD4gaW52UGVybXM7CisgICAgZm9yIChj
b25zdCBhdXRvICZlbnRyeSA6IGcpCisgICAgeworICAgICAgICBpbnZQZXJtcy5pbnNlcnQoZW50
cnkuZmlyc3QpOworICAgIH0KKworICAgIC8vIEwg4oaQIEVtcHR5IGxpc3QgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIHNvcnRlZCBlbGVtZW50cworICAgIHN0ZDo6dmVjdG9yPFQ+IEw7CisKKyAgICAv
LyBmdW5jdGlvbiB2aXNpdChub2RlIG4pCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKFQpPiB2aXNp
dCA9IFsmXShUIG4pIC0+IHZvaWQgeworICAgICAgICAvLyBpZiBuIGhhcyBhIHBlcm1hbmVudCBt
YXJrIHRoZW4KKyAgICAgICAgaWYgKGludlBlcm1zLmZpbmQobikgPT0gaW52UGVybXMuZW5kKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJldHVybgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIC8vIGlmIG4gaGFzIGEgdGVtcG9yYXJ5IG1hcmsgdGhlbgorICAg
ICAgICBpZiAodGVtcHMuZmluZChuKSAhPSB0ZW1wcy5lbmQoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gc3RvcCAgIChub3QgYSBEQUcpCisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gbWFyayBuIHdpdGggYSB0ZW1wb3JhcnkgbWFyaworICAg
ICAgICB0ZW1wcy5pbnNlcnQobik7CisKKyAgICAgICAgLy8gZm9yIGVhY2ggbm9kZSBtIHdpdGgg
YW4gZWRnZSBmcm9tIG4gdG8gbSBkbworICAgICAgICBhdXRvIGVuSXRlciA9IGcuZmluZChuKTsK
KyAgICAgICAgQVNTRVJUKGVuSXRlciAhPSBnLmVuZCgpKTsKKyAgICAgICAgY29uc3QgRWRnZXM8
VD4gJmVuID0gZW5JdGVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoVCBtIDogZW4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHZpc2l0KG0pCisgICAgICAgICAgICB2aXNpdChtKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIHJlbW92ZSB0ZW1wb3JhcnkgbWFyayBmcm9tIG4KKyAgICAgICAg
dGVtcHMuZXJhc2Uobik7CisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgcGVybWFuZW50IG1hcmsK
KyAgICAgICAgaW52UGVybXMuZXJhc2Uobik7CisgICAgICAgIC8vIGFkZCBuIHRvIGhlYWQgb2Yg
TAorICAgICAgICBMLnB1c2hfYmFjayhuKTsKKyAgICB9OworCisgICAgLy8gd2hpbGUgZXhpc3Rz
IG5vZGVzIHdpdGhvdXQgYSBwZXJtYW5lbnQgbWFyayBkbworICAgIHdoaWxlICghaW52UGVybXMu
ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIC8vIHNlbGVjdCBhbiB1bm1hcmtlZCBub2RlIG4KKyAg
ICAgICAgVCBuID0gKmludlBlcm1zLmJlZ2luKCk7CisgICAgICAgIC8vIHZpc2l0KG4pCisgICAg
ICAgIHZpc2l0KG4pOworICAgIH0KKworICAgIHJldHVybiBMOworfQorCitUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICpDcmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAm
c3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmFTdHJ1Y3RUeXBlKQoreworICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKyAgICBhdXRvICZmdW5jRXF1YWxpdHkgPQorICAgICAgICAqbmV3
IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKFRC
YXNpY1R5cGU6OkVidEJvb2wpLCB0cnVlKTsKKyAgICBhdXRvICZhU3RydWN0ID0gQ3JlYXRlSW5z
dGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgYVN0cnVjdFR5cGUsIE5hbWUoImEiKSk7CisgICAg
YXV0byAmYlN0cnVjdCA9IENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1
Y3RUeXBlLCBOYW1lKCJiIikpOworICAgIGZ1bmNFcXVhbGl0eS5hZGRQYXJhbWV0ZXIoJmFTdHJ1
Y3QpOworICAgIGZ1bmNFcXVhbGl0eS5hZGRQYXJhbWV0ZXIoJmJTdHJ1Y3QpOworCisgICAgYXV0
byAmYm9keUVxdWFsaXR5ID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICBzdGQ6OnZlY3RvcjxU
SW50ZXJtVHlwZWQgKj4gYW5kTm9kZXM7CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJmFGaWVsZHMgPSBhU3RydWN0VHlwZS5maWVsZHMoKTsKKyAgICBj
b25zdCBzaXplX3Qgc2l6ZSAgICAgICAgID0gYUZpZWxkcy5zaXplKCk7CisKKyAgICBhdXRvIHRl
c3RFcXVhbGl0eSA9IFsmXShUSW50ZXJtVHlwZWQgJmEsIFRJbnRlcm1UeXBlZCAmYikgLT4gVElu
dGVybVR5cGVkICogeworICAgICAgICBBU1NFUlQoYS5nZXRUeXBlKCkgPT0gYi5nZXRUeXBlKCkp
OworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGEuZ2V0VHlwZSgpOworICAgICAgICBpZiAo
dHlwZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmdldFN0cnVjdCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvICpmdW5jID0KKyAgICAgICAgICAgICAgICBuZXcg
VEZ1bmN0aW9uKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJlcXVhbCIpLCBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRU
eXBlKFRCYXNpY1R5cGU6OkVidEJvb2wpLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBUSW50
ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoKmZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVu
Y2V7JmEsICZifSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BFcXVhbCwgJmEsICZi
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBz
aXplOyArK2lkeCkKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVsZCAmYUZpZWxkICAgID0gKmFG
aWVsZHNbaWR4XTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmFGaWVsZFR5cGUgPSAqYUZpZWxkLnR5
cGUoKTsKKyAgICAgICAgYXV0byAmYUZpZWxkTmFtZSAgICAgICAgPSBhRmllbGQubmFtZSgpOwor
CisgICAgICAgIGlmIChhRmllbGRUeXBlLmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCFhRmllbGRUeXBlLmlzQXJyYXlPZkFycmF5cygpKTsgIC8vIFRPRE8KKyAgICAg
ICAgICAgIGludCBkaW0gPSBhRmllbGRUeXBlLmdldE91dGVybW9zdEFycmF5U2l6ZSgpOworICAg
ICAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBkaW07ICsrZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhdXRvICZhQWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYVN0
cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAgICAgICAgICAgIGF1dG8gJmJBY2Nlc3MgPSBB
Y2Nlc3NJbmRleChBY2Nlc3NGaWVsZChiU3RydWN0LCBhRmllbGROYW1lKSwgZCk7CisgICAgICAg
ICAgICAgICAgYXV0byAqZXFOb2RlICA9IHRlc3RFcXVhbGl0eShiQWNjZXNzLCBhQWNjZXNzKTsK
KyAgICAgICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
JmFBY2Nlc3MgPSBBY2Nlc3NGaWVsZChhU3RydWN0LCBhRmllbGROYW1lKTsKKyAgICAgICAgICAg
IGF1dG8gJmJBY2Nlc3MgPSBBY2Nlc3NGaWVsZChiU3RydWN0LCBhRmllbGROYW1lKTsKKyAgICAg
ICAgICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7Cisg
ICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEFTU0VSVChhbmROb2Rlcy5zaXplKCkgPiAwKTsgIC8vIEVtcHR5IHN0cnVjdHMgYXJl
IG5vdCBhbGxvd2VkIGluIEdMU0wKKyAgICBUSW50ZXJtVHlwZWQgKm91dE5vZGUgPSBhbmROb2Rl
cy5iYWNrKCk7CisgICAgYW5kTm9kZXMucG9wX2JhY2soKTsKKyAgICBmb3IgKFRJbnRlcm1UeXBl
ZCAqYW5kTm9kZSA6IGFuZE5vZGVzKQorICAgIHsKKyAgICAgICAgb3V0Tm9kZSA9IG5ldyBUSW50
ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZCwgYW5kTm9kZSwgb3V0Tm9kZSk7Cisg
ICAgfQorICAgIGJvZHlFcXVhbGl0eS5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CcmFuY2go
VE9wZXJhdG9yOjpFT3BSZXR1cm4sIG91dE5vZGUpKTsKKyAgICBhdXRvICpmdW5jUHJvdG9FcXVh
bGl0eSA9IG5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUoJmZ1bmNFcXVhbGl0eSk7CisgICAg
cmV0dXJuIG5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKGZ1bmNQcm90b0VxdWFsaXR5LCAm
Ym9keUVxdWFsaXR5KTsKK30KKworc3RydWN0IERlY2xhcmVkU3RydWN0dXJlCit7CisgICAgVElu
dGVybURlY2xhcmF0aW9uICpkZWNsTm9kZTsKKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICplcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1
Y3R1cmU7Cit9OworCitib29sIEdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUoU3ltYm9sRW52ICZzeW1i
b2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJm5vZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyZWRTdHJ1Y3R1cmUgJm91dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3Ry
dWN0dXJlICo+ICZ1c2VkU3RydWN0cykKK3sKKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpk
ZWNsTm9kZSA9IG5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9k
ZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAgIGlmIChUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJs
ZSgpOworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOwor
ICAgICAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHN5bWJvbEVudi5y
ZW1hcCh0eXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgb3V0LmRlY2xOb2RlICA9IGRlY2xOb2RlOworICAgICAgICAgICAgICAgICAg
ICBvdXQuc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAgICAgICAgICBvdXQuZXF1
YWxpdHlGdW5jdGlvbkRlZmluaXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFN0
cnVjdHMuZmluZChzdHJ1Y3R1cmUpID09IHVzZWRTdHJ1Y3RzLmVuZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBudWxscHRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBD
cmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0aW9uKHN5bWJvbFRhYmxlLCAqc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworY2xhc3Mg
RmluZFN0cnVjdEVxdWFsaXR5VXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8
Y29uc3QgVFN0cnVjdHVyZSAqPiBtVXNlZFN0cnVjdHM7CisKKyAgICBGaW5kU3RydWN0RXF1YWxp
dHlVc2UoU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihm
YWxzZSwgZmFsc2UsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAgICB7fQorCisgICAg
Ym9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqYmluYXJ5KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gYmluYXJ5LT5nZXRPcCgpOworCisg
ICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUgID0gYmlu
YXJ5LT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
cmlnaHRUeXBlID0gYmluYXJ5LT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGxlZnRUeXBlLmdldFN0cnVjdCgpID09IHJpZ2h0VHlwZS5nZXRTdHJ1Y3QoKSk7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG1TeW1i
b2xFbnYucmVtYXAobGVmdFR5cGUuZ2V0U3RydWN0KCkpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlU3RydWN0KCpzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgdm9pZCB1c2VTdHJ1Y3QoY29uc3QgVFN0
cnVjdHVyZSAmc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKG1Vc2VkU3RydWN0cy5pbnNl
cnQoJnN0cnVjdHVyZSkuc2Vjb25kKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0
IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN1YlN0cnVjdCA9IG1TeW1ib2xFbnYu
cmVtYXAoZmllbGQtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlU3RydWN0KCpzdWJTdHJ1Y3QpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6VG9wb3Nv
cnRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1QcmVsdWRlQ29uZmln
ICZwcGMpCit7CisgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNlIGZpbmRlcihzeW1ib2xFbnYpOwor
ICAgIHJvb3QudHJhdmVyc2UoJmZpbmRlcik7CisgICAgcHBjLmhhc1N0cnVjdEVxID0gIWZpbmRl
ci5tVXNlZFN0cnVjdHMuZW1wdHkoKTsKKworICAgIERlY2xhcmVkU3RydWN0dXJlIGRlY2xhcmVk
U3RydWN0OworICAgIHN0ZDo6dmVjdG9yPERlY2xhcmVkU3RydWN0dXJlPiBkZWNsYXJlZFN0cnVj
dHM7CisgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbm9uU3RydWN0U3RtdE5vZGVzOwor
CisgICAgeworICAgICAgICBjb25zdCBzaXplX3Qgc3RtdENvdW50ID0gcm9vdC5nZXRDaGlsZENv
dW50KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RtdENvdW50OyArK2kpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZzdG10Tm9kZSA9ICpyb290LmdldENo
aWxkTm9kZShpKTsKKyAgICAgICAgICAgIGlmIChHZXRBc0RlY2xhcmVkU3RydWN0dXJlKHN5bWJv
bEVudiwgc3RtdE5vZGUsIGRlY2xhcmVkU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSwgZmluZGVyLm1Vc2VkU3Ry
dWN0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1
c2hfYmFjayhkZWNsYXJlZFN0cnVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9uU3RydWN0U3RtdE5vZGVzLnB1c2hf
YmFjaygmc3RtdE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
eworICAgICAgICBzdGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHN0cnVjdHM7CisgICAg
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUU3RydWN0dXJlICosIERlY2xhcmVkU3RydWN0
dXJlPiByYXdUb0RlY2xhcmVkOworCisgICAgICAgIGZvciAoY29uc3QgRGVjbGFyZWRTdHJ1Y3R1
cmUgJmQgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdHMu
cHVzaF9iYWNrKGQuc3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVChyYXdUb0RlY2xhcmVk
LmZpbmQoZC5zdHJ1Y3R1cmUpID09IHJhd1RvRGVjbGFyZWQuZW5kKCkpOworICAgICAgICAgICAg
cmF3VG9EZWNsYXJlZFtkLnN0cnVjdHVyZV0gPSBkOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Tm90ZTogR3JhcGggbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9ubHkgZXhwbGljaXRseSBkZWNsYXJl
ZCBzdHJ1Y3R1cmVzLgorICAgICAgICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGcgICAgICAg
ICAgICAgICAgICAgPSBCdWlsZEdyYXBoKHN5bWJvbEVudiwgc3RydWN0cyk7CisgICAgICAgIHN0
ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gc29ydGVkU3RydWN0cyA9IFRvcG9zb3J0KGcp
OworICAgICAgICBBU1NFUlQoZGVjbGFyZWRTdHJ1Y3RzLnNpemUoKSA8PSBzb3J0ZWRTdHJ1Y3Rz
LnNpemUoKSk7CisKKyAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLmNsZWFyKCk7CisgICAgICAgIGZv
ciAoY29uc3QgVFN0cnVjdHVyZSAqcyA6IHNvcnRlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gaXQgPSByYXdUb0RlY2xhcmVkLmZpbmQocyk7CisgICAgICAgICAgICBpZiAo
aXQgIT0gcmF3VG9EZWNsYXJlZC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhdXRvICZkID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZC5kZWNsTm9k
ZSk7CisgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgVEludGVybVNlcXVl
bmNlIG5ld1N0bXROb2RlczsKKworICAgICAgICBmb3IgKERlY2xhcmVkU3RydWN0dXJlICZkZWNs
YXJlZFN0cnVjdCA6IGRlY2xhcmVkU3RydWN0cykKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIG5ld1N0bXROb2Rlcy5w
dXNoX2JhY2soZGVjbGFyZWRTdHJ1Y3QuZGVjbE5vZGUpOworICAgICAgICAgICAgaWYgKGRlY2xh
cmVkU3RydWN0LmVxdWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG5ld1N0bXROb2Rlcy5wdXNoX2JhY2soZGVjbGFyZWRTdHJ1Y3QuZXF1YWxp
dHlGdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChUSW50ZXJtTm9kZSAqc3RtdE5vZGUgOiBub25TdHJ1Y3RTdG10Tm9kZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzdG10Tm9kZSk7CisgICAgICAgICAgICBuZXdTdG10
Tm9kZXMucHVzaF9iYWNrKHN0bXROb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgICpyb290Lmdl
dFNlcXVlbmNlKCkgPSBuZXdTdG10Tm9kZXM7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVy
LnZhbGlkYXRlQVNUKCZyb290KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29y
dFN0cnVjdHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MzkwOGUzNGRkNGQ5NmNkMDRkNjAyNzRkZjE4MWIwZDQ4OTMzYTUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
VE9QT1NPUlRTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVBy
ZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIERvZXMgYSB0b3Bvc29y
dCBvbiBzdHJ1Y3RzIGJhc2VkIG9uIHR5cGUgZGVwZW5kZW5jaWVzLgorLy8gU3RydWN0IHR5cGUg
ZGVjbGFyYXRpb25zIGFyZSBtb3ZlZCB0byB0aGUgdG9wIG9mIHRoZSByb290IGJsb2NrLgorQU5H
TEVfTk9fRElTQ0FSRCBib29sIFRvcG9zb3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVk
ZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfVE9QT1NPUlRTVFJVQ1RTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBN
YWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMTRiYzYzZmNhMjk4ZWJhNGNmZGE0Njc5NGNlOTY4YTExZmJk
OGNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcApAQCAtMCww
ICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBXcmFwcGVyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHJpdmF0ZToKKyAgICBJZEdlbiAmbUlkR2VuOwor
CisgIHB1YmxpYzoKKyAgICBXcmFwcGVyKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2Vu
ICZpZEdlbikKKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwg
JnN5bWJvbFRhYmxlKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICBib29sIHZpc2l0Qmxv
Y2soVmlzaXQsIFRJbnRlcm1CbG9jayAqYmxvY2tOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGJsb2NrTm9kZSAhPSBnZXRSb290Tm9kZSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5v
ZGUgOiAqYmxvY2tOb2RlLT5nZXRTZXF1ZW5jZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBub2RlLT5nZXRBc0Z1
bmN0aW9uRGVmaW5pdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IFRGdW5jdGlvbiAmZnVuYyA9ICpmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZnVuYy5pc01haW4oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHZpc2l0TWFpbigqYmxvY2tOb2RlLCBmdW5jRGVmTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZv
aWQgdmlzaXRNYWluKFRJbnRlcm1CbG9jayAmcm9vdCwgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZnVuY0RlZk5vZGUpCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAq
ZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5jLmlzTWFpbigp
KTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpID09
IFRCYXNpY1R5cGU6OkVidFZvaWQpOworICAgICAgICBBU1NFUlQoZnVuYy5nZXRQYXJhbUNvdW50
KCkgPT0gMCk7CisKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZleHRlcm5hbE1haW5GdW5jID0g
KmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmlu
dGVybmFsTWFpbkZ1bmMgPSBDbG9uZUZ1bmN0aW9uKCptU3ltYm9sVGFibGUsIG1JZEdlbiwgZXh0
ZXJuYWxNYWluRnVuYyk7CisKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpleHRl
cm5hbE1haW5Qcm90byA9IGZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAg
ICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmludGVybmFsTWFpblByb3RvID0KKyAgICAg
ICAgICAgIG5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUoJmludGVybmFsTWFpbkZ1bmMpOwor
CisgICAgICAgIFRJbnRlcm1CbG9jayAqZXh0ZXJuYWxNYWluQm9keSA9IG5ldyBUSW50ZXJtQmxv
Y2soKTsKKyAgICAgICAgZXh0ZXJuYWxNYWluQm9keS0+YXBwZW5kU3RhdGVtZW50KAorICAgICAg
ICAgICAgVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKGludGVybmFsTWFpbkZ1
bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2UoKSkpOworCisgICAgICAgIFRJbnRlcm1CbG9jayAqaW50
ZXJuYWxNYWluQm9keSA9IGZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbiAqZXh0ZXJuYWxNYWluRGVmID0KKyAgICAgICAgICAgIG5ldyBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKGV4dGVybmFsTWFpblByb3RvLCBleHRlcm5hbE1haW5C
b2R5KTsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqaW50ZXJuYWxNYWluRGVm
ID0KKyAgICAgICAgICAgIG5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKGludGVybmFsTWFp
blByb3RvLCBpbnRlcm5hbE1haW5Cb2R5KTsKKworICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMu
cHVzaF9iYWNrKE5vZGVSZXBsYWNlV2l0aE11bHRpcGxlRW50cnkoCisgICAgICAgICAgICAmcm9v
dCwgZnVuY0RlZk5vZGUsIFRJbnRlcm1TZXF1ZW5jZXtpbnRlcm5hbE1haW5EZWYsIGV4dGVybmFs
TWFpbkRlZn0pKTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UKKworYm9vbCBzaDo6V3Jh
cE1haW4oVENvbXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJv
b3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJv
bFRhYmxlKCk7CisgICAgV3JhcHBlciB3cmFwcGVyKHN5bWJvbFRhYmxlLCBpZEdlbik7CisgICAg
cm9vdC50cmF2ZXJzZSgmd3JhcHBlcik7CisgICAgaWYgKCF3cmFwcGVyLnVwZGF0ZVRyZWUoJmNv
bXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvV3JhcE1haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjBlZGZmNDJiOGUzNGRkMWE4MGEy
NzU1MjJkZjNiN2Q0NmE0NjFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBN
YWluLmgKQEAgLTAsMCArMSwyOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKworLy8gQ2hhbmdlcworLy8gICAgdm9pZCBtYWluKGFyZ3MpIHsg
bWFpbi1ib2R5IH0KKy8vIFRvCisvLyAgICB2b2lkIEZSRVNIX05BTUUoYXJncykgeyBtYWluLWJv
ZHkgfQorLy8gICAgdm9pZCBtYWluKGFyZ3MpIHsgRlJFU0hfTkFNRShhcmdzKTsgfQorLy8KKy8v
IFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZnVsIGlmIHRoZSBvcmlnaW5hbCBgbWFpbmAgaGFz
IG11bHRpcGxlIHJldHVybiBwYXRocyBiZWNhdXNlIHRoaXMKKy8vIHJlZHVjZXMgZG93biB0byBh
IHNpbmdsZSBwYXRoIGluIHRoZSBuZXcgYG1haW5gLiBOaWNlIGZvciBpbnNlcnRpbmcgY2xlYW51
cCBjb2RlIGluIGBtYWluYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBXcmFwTWFpbihUQ29tcGls
ZXIgJmNvbXBpbGVyLCBJZEdlbiAmaWRHZW4sIFRJbnRlcm1CbG9jayAmcm9vdCk7CisKK30gIC8v
IG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1dSQVBNQUlOX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBhOGJmM2FmZDEyMzBlNjVmZGRjY2U5ODE4YWE3
Y2MyY2I5OGQwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcApAQCAtMCwwICsx
LDMwNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDAyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjICAgIHByYWdtYSB3
YXJuaW5nKGRpc2FibGUgOiA0NzE4KQorI2VuZGlmCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxjbGltaXRzPgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmcuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKK2NvbnN0IGNoYXIgKmdldEJhc2ljTWV0YWxTdHJpbmcoY29uc3Qg
VFR5cGUgKnQpCit7CisgICAgc3dpdGNoICh0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiAidm9pZCI7CisgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKKyAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICByZXR1cm4gImludCI7CisgICAgICAgIGNhc2UgRWJ0VUludDoK
KyAgICAgICAgICAgIHJldHVybiAidWludCI7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAg
ICAgICAgIHJldHVybiAiYm9vbCI7CisgICAgICAgIGNhc2UgRWJ0WXV2Q3NjU3RhbmRhcmRFWFQ6
CisgICAgICAgICAgICByZXR1cm4gInl1dkNzY1N0YW5kYXJkRVhUIjsKKyAgICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOworICAgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgICAgICAgcmV0dXJu
ICJzYW1wbGVyRXh0ZXJuYWxPRVMiOworICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJE
WTJZRVhUOgorICAgICAgICAgICAgcmV0dXJuICJfX3NhbXBsZXJFeHRlcm5hbDJEWTJZRVhUIjsK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkRSZWN0IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAg
IHJldHVybiAic2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgor
ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNUyI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJETVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJETVNBcnJheSI7CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxl
ckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgICAgIHJl
dHVybiAiaXNhbXBsZXIyRCI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgICAg
ICAgIHJldHVybiAiaXNhbXBsZXIzRCI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOworICAgICAgICBjYXNlIEVidElTYW1w
bGVyMkRBcnJheToKKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsKKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRN
UyI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICByZXR1
cm4gImlzYW1wbGVyMkRNU0FycmF5IjsKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmVBcnJh
eToKKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlQXJyYXkiOworICAgICAgICBjYXNl
IEVidFVTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4gInVzYW1wbGVyMkQiOworICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAgICByZXR1cm4gInVzYW1wbGVyM0QiOwor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBs
ZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICBy
ZXR1cm4gInVzYW1wbGVyMkRBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgor
ICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJETVNBcnJheSI7Cisg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInVz
YW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAg
ICAgICAgICByZXR1cm4gInNhbXBsZXIyRFNoYWRvdyI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxl
ckN1YmVTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlU2hhZG93IjsKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiAi
c2FtcGxlcjJEQXJyYXlTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlT
aGFkb3c6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlQXJyYXlTaGFkb3ciOworICAg
ICAgICBjYXNlIEVidFN0cnVjdDoKKyAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsKKyAg
ICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIHJldHVybiAiaW50ZXJm
YWNlIGJsb2NrIjsKKyAgICAgICAgY2FzZSBFYnRJbWFnZTJEOgorICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlMmQiOworICAgICAgICBjYXNlIEVidElJbWFnZTJEOgorICAgICAgICAgICAgcmV0
dXJuICJ0ZXh0dXJlMmQ8aW50PiI7CisgICAgICAgIGNhc2UgRWJ0VUltYWdlMkQ6CisgICAgICAg
ICAgICByZXR1cm4gInRleHR1cmUyZDx1aW50PiI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UzRDoK
KyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2Uz
RDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPGludD4iOworICAgICAgICBjYXNlIEVi
dFVJbWFnZTNEOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlM2Q8dWludD4iOworICAgICAg
ICBjYXNlIEVidEltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRl
eHR1cmUyZD4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyREFycmF5OgorICAgICAgICAgICAgaWYgKHQtPmlz
VW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJh
cnJheV9yZWY8dGV4dHVyZTJkPGludD4+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRF
RCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0VUltYWdlMkRBcnJheToKKyAgICAg
ICAgICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUyZDx1aW50Pj4iOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRJbWFn
ZUN1YmU6CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlIjsKKyAgICAgICAgY2FzZSBF
YnRJSW1hZ2VDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZTxpbnQ+IjsKKyAg
ICAgICAgY2FzZSBFYnRVSW1hZ2VDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3Vi
ZTx1aW50PiI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBp
ZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZT4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExF
TUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRJSW1hZ2VDdWJlQXJyYXk6
CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZTxpbnQ+PiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJOT1RfSU1QTEVNRU5URUQiOworICAgICAgICAgICAgfQorICAgICAgICBjYXNl
IEVidFVJbWFnZUN1YmVBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJheSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1
cmVjdWJlPHVpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5URUQiOworICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIEVidEF0b21pY0NvdW50ZXI6CisgICAgICAgICAgICByZXR1
cm4gImF0b21pY191aW50IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlkZW9XRUJHTDoKKyAg
ICAgICAgICAgIHJldHVybiAiJHNhbXBsZXJWaWRlb1dFQkdMIjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gInVua25vd24g
dHlwZSI7CisgICAgfQorfQorCitjb25zdCBjaGFyICpnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0
cmluZyhjb25zdCBUVHlwZSAqdCkKK3sKKyAgICBpZiAodC0+aXNNYXRyaXgoKSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodC0+Z2V0Q29scygpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0Mng0IjsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0
LT5nZXRSb3dzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0M3gyIjsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9h
dDMiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gImZsb2F0M3g0IjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDQ6
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gImZsb2F0NHgyIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDR4MyI7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQ0IjsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKHQtPmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHQtPmdldEJhc2lj
VHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiZmxvYXQyIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQyIjsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQzIjsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJpbnQ0IjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6Cisg
ICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJib29sMiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbDMiOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImJvb2w0IjsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0
LT5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50MiI7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
dWludDMiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gInVpbnQ0IjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKHQtPmdldEJhc2ljVHlwZSgp
ICE9IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludGVy
ZmFjZUJsb2NrKTsKKyAgICByZXR1cm4gZ2V0QmFzaWNNZXRhbFN0cmluZyh0KTsKK30KKworSW1t
dXRhYmxlU3RyaW5nIEdldE1ldGFsVHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIFNoSGFzaEZ1
bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLCBOYW1lTWFwICpuYW1lTWFwKQoreworICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgcmV0dXJuIEhhc2hOYW1lKHR5
cGUuZ2V0U3RydWN0KCksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gSW1tdXRhYmxlU3RyaW5nKGdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKCZ0
eXBlKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbFV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2UzY2UzY2VmZDczNjkxNTgzYWEzMmY4ODE4
NjJmNzdkNzY0M2Q5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgKQEAgLTAsMCAr
MSwzMSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDAyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisj
ZGVmaW5lIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmcuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1N5bWJvbFVuaXF1ZUlkLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UeXBlcy5oIgorbmFtZXNwYWNlIHNoCit7CisKK2NvbnN0IGNoYXIgKmdldEJh
c2ljTWV0YWxTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitjb25zdCBjaGFyICpnZXRCdWlsdElu
TWV0YWxUeXBlTmFtZVN0cmluZyhjb25zdCBUVHlwZSAqdCk7CisKK0ltbXV0YWJsZVN0cmluZyBH
ZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOYW1lTWFwICpuYW1lTWFwKTsKKworfSAgLy8gbmFtZXNwYWNl
IHNoCisKKyNlbmRpZiAgLy8gVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
clZ1bGthbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAppbmRleCAyMDFjYmM5MWY2ZTNjMjFkZDE5MjU0NWQ2
YzVkNTBmOTM4NzRiZjcxLi5jNWVjNjdkZWU2MjU5MGZjYjgxMmQ4ZGJlMzJiNWM1ZGRhNDg3NWI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcApAQCAtMTYzLDYgKzE2
Myw4IEBAIGNsYXNzIERlY2xhcmVEZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZFBvaW50Q29v
cmROYW1lICAgID0gSW1tdXRhYmxlU3RyaW5nKCJmbGlwcGVkUG9pbnRDb29yZCIpOwogY29uc3Rl
eHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZEZyYWdDb29yZE5hbWUgICAgID0gSW1tdXRhYmxl
U3RyaW5nKCJmbGlwcGVkRnJhZ0Nvb3JkIik7CiBjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtF
bXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMgPSBJbW11dGFibGVTdHJpbmcoIkFOR0xFRGVwdGhSYW5n
ZVBhcmFtcyIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNCbG9ja05hbWUg
ICAgICAgID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRVVuaWZvcm1CbG9jayIpOworY29uc3RleHBy
IEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNWYXJOYW1lICAgICAgICAgID0gSW1tdXRhYmxlU3Ry
aW5nKCJBTkdMRVVuaWZvcm1zIik7CiAKIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPGNvbnN0IGNo
YXIgKj4ga0RlZmF1bHRVbmlmb3JtTmFtZXMgPSB7CiAgICAge2dsOjpTaGFkZXJUeXBlOjpWZXJ0
ZXgsIHZrOjprRGVmYXVsdFVuaWZvcm1zTmFtZVZTfSwKQEAgLTQ1MCw5ICs0NTIsOSBAQCBjb25z
dCBUVmFyaWFibGUgKkFkZEdyYXBoaWNzRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxv
Y2sgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkcy5l
bmQoKSk7CiAKICAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5HTEVVbmlm
b3JtQmxvY2siIHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCi0gICAgcmV0dXJu
IERlY2xhcmVJbnRlcmZhY2VCbG9jaygKLSAgICAgICAgcm9vdCwgc3ltYm9sVGFibGUsIGRyaXZl
ckZpZWxkTGlzdCwgRXZxVW5pZm9ybSwgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAsCi0g
ICAgICAgIEltbXV0YWJsZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zQmxvY2tOYW1lKSwgSW1t
dXRhYmxlU3RyaW5nKHZrOjprRHJpdmVyVW5pZm9ybXNWYXJOYW1lKSk7CisgICAgcmV0dXJuIERl
Y2xhcmVJbnRlcmZhY2VCbG9jayhyb290LCBzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBF
dnFVbmlmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxp
Zmllcjo6Q3JlYXRlKCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtVbmlmb3Jtc1Zhck5hbWUpOwogfQogCiBjb25zdCBUVmFyaWFibGUg
KkFkZENvbXB1dGVEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAqcm9vdCwgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCmluZGV4IGEzZTAzOTllM2U4MDcy
YWI2OTczZDdiYWVmZjE2MzkwZDAyZjJjNzQuLjhmNmZjNDY1ZmFlOThmN2ZjMTM5MTI2ZGY2ZDQ0
YzMwMmJhMzcwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1R5cGVzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaApAQCAtMjMyLDYgKzIzMiw3IEBAIGNsYXNzIFRU
eXBlCiAKICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAx
ICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQogICAgIGJvb2wgaXNWZWN0b3JBcnJheSgpIGNvbnN0
IHsgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlTaXplID09IDEgJiYgaXNBcnJh
eSgpOyB9CisgICAgYm9vbCBpc1JhbmswKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPT0g
MSAmJiBzZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzU2NhbGFyKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0g
MSAmJiAhbVN0cnVjdHVyZSAmJiAhaXNBcnJheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1Qu
Y3BwCmluZGV4IDc2YThiYzJmNWU0YTgzMDFjMWUxZTlmYTE2ZmZjNmQxMTY1MjZlZTEuLmJhNGQ2
ZjNlNWY1YmNhNTA3MTk1NTc3ZWRkNTIwNjcwNDBkNzY0MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxp
ZGF0ZUFTVC5jcHAKQEAgLTc2LDEyICs3Niw3IEBAIFZhbGlkYXRlQVNUOjpWYWxpZGF0ZUFTVChU
SW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3Mg
KmRpYWdub3N0aWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlQVNU
T3B0aW9ucyAmb3B0aW9ucykKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRy
dWUsIG51bGxwdHIpLCBtT3B0aW9ucyhvcHRpb25zKSwgbURpYWdub3N0aWNzKGRpYWdub3N0aWNz
KQotewotICAgIGlmIChtT3B0aW9ucy52YWxpZGF0ZVNpbmdsZVBhcmVudCkKLSAgICB7Ci0gICAg
ICAgIG1QYXJlbnRbcm9vdF0gPSBudWxscHRyOwotICAgIH0KLX0KK3t9CiAKIHZvaWQgVmFsaWRh
dGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwgVEludGVybU5vZGUgKm5vZGUpCiB7CkBAIC05
MCwxMiArODUsMTMgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTm9kZSAqbm9kZSkKICAgICAgICAgc2l6ZV90IGNoaWxkQ291bnQgPSBub2RlLT5nZXRD
aGlsZENvdW50KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsg
KytpKQogICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSAqY2hpbGQgPSBub2RlLT5n
ZXRDaGlsZE5vZGUoaSk7Ci0gICAgICAgICAgICBpZiAobVBhcmVudC5maW5kKGNoaWxkKSAhPSBt
UGFyZW50LmVuZCgpKQorICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkICAgPSBub2RlLT5n
ZXRDaGlsZE5vZGUoaSk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAqJnBhcmVudCA9IG1QYXJl
bnRbY2hpbGRdOworICAgICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyB2aXNpdGVkIHR3aWNlIGJ1dCB0aHJvdWdoIHRoZSBz
YW1lIHBhcmVudCwgdGhlIHByb2JsZW0gaXMgaW4gb25lIG9mCiAgICAgICAgICAgICAgICAgLy8g
dGhlIGFuY2VzdG9ycy4KLSAgICAgICAgICAgICAgICBpZiAobVBhcmVudFtjaGlsZF0gIT0gbm9k
ZSkKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG5vZGUpCiAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUo
KSwgIkZvdW5kIGNoaWxkIHdpdGggdHdvIHBhcmVudHMiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICI8dmFsaWRhdGVTaW5nbGVQYXJlbnQ+Iik7CkBAIC0xMDMsMTcg
Kzk5LDE3IEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwgVEludGVy
bU5vZGUgKm5vZGUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBtUGFyZW50W2NoaWxkXSA9IG5vZGU7CisgICAgICAgICAgICBwYXJlbnQgPSBub2RlOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFZhbGlkYXRlQVNUOjpleHBlY3ROb25OdWxsQ2hp
bGRyZW4oVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlLCBzaXplX3QgbGVhc3RfY291bnQp
Cit2b2lkIFZhbGlkYXRlQVNUOjpleHBlY3ROb25OdWxsQ2hpbGRyZW4oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Ob2RlICpub2RlLCBzaXplX3QgbGVhc3RDb3VudCkKIHsKICAgICBpZiAodmlzaXQgPT0g
UHJlVmlzaXQgJiYgbU9wdGlvbnMudmFsaWRhdGVOdWxsTm9kZXMpCiAgICAgewogICAgICAgICBz
aXplX3QgY2hpbGRDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgaWYgKGNo
aWxkQ291bnQgPCBsZWFzdF9jb3VudCkKKyAgICAgICAgaWYgKGNoaWxkQ291bnQgPCBsZWFzdENv
dW50KQogICAgICAgICB7CiAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdl
dExpbmUoKSwgIlRvbyBmZXcgY2hpbGRyZW4iLCAiPHZhbGlkYXRlTnVsbE5vZGVzPiIpOwogICAg
ICAgICAgICAgbU51bGxOb2Rlc0ZhaWxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2Jh
bEluaXRpYWxpemVycy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKaW5kZXggZGZh
MjNhYWYxOWJlNDg5OTVjYzA2MzY4YjUxZDAxYjBhMTI5ZmQ5Yi4uYmJjOGRjZDRlOGE4MmU0NzIw
YTc3ZDA4MWIzN2M5ZjZkN2QwZjRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXpl
cnMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNwcApAQCAtNTMsNyArNTMsOCBA
QCB2b2lkIEdldERlZmVycmVkSW5pdGlhbGl6ZXJzKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbGFy
YXRpb24sCiAgICAgICAgIEFTU0VSVChzeW1ib2xOb2RlKTsKICAgICAgICAgVEludGVybVR5cGVk
ICpleHByZXNzaW9uID0gaW5pdC0+Z2V0UmlnaHQoKTsKIAotICAgICAgICBpZiAoZXhwcmVzc2lv
bi0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QgfHwgIWV4cHJlc3Npb24tPmhhc0NvbnN0YW50
VmFsdWUoKSkKKyAgICAgICAgaWYgKGV4cHJlc3Npb24tPmdldFF1YWxpZmllcigpICE9IEV2cUNv
bnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFudFZhbHVlKCkgfHwKKyAgICAgICAgICAgIHN5
bWJvbE5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUdsb2JhbCkKICAgICAgICAgewogICAgICAg
ICAgICAgLy8gRm9yIHZhcmlhYmxlcyB3aGljaCBhcmUgbm90IGNvbnN0YW50LCBkZWZlciB0aGVp
ciByZWFsIGluaXRpYWxpemF0aW9uIHVudGlsCiAgICAgICAgICAgICAvLyBhZnRlciB3ZSBpbml0
aWFsaXplIHVuaWZvcm1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5l
RW1wdHlDYXNlcy5jcHAKaW5kZXggMjg5ZGUyMTUyZTljNTE0NTk0ZjYyMzFkNGRmOTJkNjZiMTc5
YTJiNy4uMmVlODIzOTNmY2U1MTFhMGRhNzc5NGRiOWE2MzE3MTBkYzg3NzU0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9v
cHMvUHJ1bmVFbXB0eUNhc2VzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMuY3BwCkBAIC0xNyw3
ICsxNyw3IEBAIG5hbWVzcGFjZSBzaAogbmFtZXNwYWNlCiB7CiAKLWJvb2wgQXJlRW1wdHlCbG9j
a3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKTsKK2Jvb2wgQXJlRW1wdHlCbG9ja3MoY29u
c3QgVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKTsKIAogYm9vbCBJc0VtcHR5QmxvY2soVElu
dGVybU5vZGUgKm5vZGUpCiB7CkBAIC0zNyw3ICszNyw3IEBAIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQogCiAvLyBSZXR1cm4gdHJ1ZSBpZiBhbGwgc3RhdGVtZW50cyBpbiAi
c3RhdGVtZW50cyIgY29uc2lzdCBvbmx5IG9mIGVtcHR5IGJsb2NrcyBhbmQgbm8tb3Agc3RhdGVt
ZW50cy4KIC8vIFJldHVybnMgdHJ1ZSBhbHNvIGlmIHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRzLgot
Ym9vbCBBcmVFbXB0eUJsb2NrcyhUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCitib29sIEFy
ZUVtcHR5QmxvY2tzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cykKIHsKICAgICBm
b3IgKHNpemVfdCBpID0gMHU7IGkgPCBzdGF0ZW1lbnRzLT5zaXplKCk7ICsraSkKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxs
VGhyb3VnaC5jcHAKaW5kZXggNDUwMGFlYTRlNDgyYzAyMzA5MGNjN2JkOGU2OGVkYWM1MTRhNDky
MC4uZGQ4ZGQ1NDNmNmUxYTIyNTEzMzdlZDRkYjA3ZmZiZGY3NzAxYTAyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1JlbW92ZVN3aXRjaEZhbGxUaHJvdWdo
LmNwcApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBSZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaFRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQs
IFRJbnRlcm1Mb29wICpub2RlKSBvdmVycmlkZTsKICAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0
LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgb3V0cHV0U2VxdWVu
Y2UoVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpOworICAgIHZv
aWQgb3V0cHV0U2VxdWVuY2UoY29uc3QgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSwgc2l6ZV90
IHN0YXJ0SW5kZXgpOwogICAgIHZvaWQgaGFuZGxlUHJldmlvdXNDYXNlKCk7CiAKICAgICBUSW50
ZXJtQmxvY2sgKm1TdGF0ZW1lbnRMaXN0OwpAQCAtMTUzLDExICsxNTMsMTMgQEAgYm9vbCBSZW1v
dmVTd2l0Y2hGYWxsVGhyb3VnaFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1T
d2l0Y2ggKm5vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbW92ZVN3aXRjaEZh
bGxUaHJvdWdoVHJhdmVyc2VyOjpvdXRwdXRTZXF1ZW5jZShUSW50ZXJtU2VxdWVuY2UgKnNlcXVl
bmNlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3ZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2
ZXJzZXI6Om91dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc3RhcnRJbmRleCkKIHsKKyAgICBhdXRvICZvdXRTZXEgPSAqbVN0YXRlbWVudExpc3RPdXQt
PmdldFNlcXVlbmNlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBzZXF1
ZW5jZS0+c2l6ZSgpOyArK2kpCiAgICAgewotICAgICAgICBtU3RhdGVtZW50TGlzdE91dC0+Z2V0
U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CisgICAgICAgIG91dFNlcS5w
dXNoX2JhY2soc2VxdWVuY2UtPmF0KGkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBs
aWZ5TG9vcENvbmRpdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAKaW5kZXgg
NzQxNDU0MDBlYmM2M2E3Yjk0YTNjMzU3ODI0ZmE4OWZjMmM3ZjExZS4uMGMyYWE4ZmI2Y2IxY2Fk
YTg4OWQwOTQ4OWNhN2Y1NDM3YjM4Y2U2YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0
aW9ucy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAKQEAgLTIxLDEwICsyMSwx
NyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCitzdHJ1Y3QgTG9vcEluZm8KK3sKKyAg
ICBjb25zdCBUVmFyaWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gbnVsbHB0cjsKKyAgICBUSW50
ZXJtVHlwZWQgKmNvbmRpdGlvbiAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJtVHlw
ZWQgKmV4cHJlc3Npb24gICAgICAgICAgID0gbnVsbHB0cjsKK307CisKIGNsYXNzIFNpbXBsaWZ5
TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgOiBwdWJsaWMgVExWYWx1ZVRyYWNraW5nVHJhdmVyc2Vy
CiB7CiAgIHB1YmxpYzoKLSAgICBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyKHVuc2ln
bmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisgICAgU2ltcGxpZnlMb29wQ29uZGl0
aW9uc1RyYXZlcnNlcihjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKmNvbmRpdGlvbnNU
b1NpbXBsaWZ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSk7CiAKICAgICB2b2lkIHRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkgb3ZlcnJpZGU7CkBAIC0zNCw2ICs0MSw3IEBAIGNsYXNzIFNpbXBsaWZ5TG9vcENvbmRp
dGlvbnNUcmF2ZXJzZXIgOiBwdWJsaWMgVExWYWx1ZVRyYWNraW5nVHJhdmVyc2VyCiAgICAgYm9v
bCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkgb3Zl
cnJpZGU7CiAgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5
ICpub2RlKSBvdmVycmlkZTsKICAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKICAgICBib29s
IGZvdW5kTG9vcFRvQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbUZvdW5kTG9vcFRvQ2hhbmdlOyB9
CiAKQEAgLTQyLDE2ICs1MCwxOSBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVy
c2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIC8vIGZvdW5kLgogICAg
IGJvb2wgbUZvdW5kTG9vcFRvQ2hhbmdlOwogICAgIGJvb2wgbUluc2lkZUxvb3BJbml0Q29uZGl0
aW9uT3JFeHByZXNzaW9uOwotICAgIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciBtQ29uZGl0aW9u
c1RvU2ltcGxpZnk7CisgICAgY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICptQ29uZGl0
aW9uc1RvU2ltcGxpZnk7CisKKyAgcHJpdmF0ZToKKyAgICBMb29wSW5mbyBtTG9vcDsKIH07CiAK
IFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OlNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXIoCi0gICAgdW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKyAg
ICBjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKmNvbmRpdGlvbnNUb1NpbXBsaWZ5LAog
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiAgICAgOiBUTFZhbHVlVHJhY2tpbmdUcmF2
ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlLCBzeW1ib2xUYWJsZSksCiAgICAgICBtRm91bmRMb29w
VG9DaGFuZ2UoZmFsc2UpLAogICAgICAgbUluc2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNz
aW9uKGZhbHNlKSwKLSAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1w
bGlmeU1hc2spCisgICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2ltcGxp
ZnkpCiB7fQogCiAvLyBJZiB3ZSdyZSBpbnNpZGUgYSBsb29wIGluaXRpYWxpemF0aW9uLCBjb25k
aXRpb24sIG9yIGV4cHJlc3Npb24sIHdlIGNoZWNrIGZvciBleHByZXNzaW9ucyB0aGF0CkBAIC02
OCw3ICs3OSw4IEBAIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlCiAgICAgaWYgKG1Gb3VuZExvb3BU
b0NoYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNo
YW5nZSB0aGlzIGxvb3AuCiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1Rv
U2ltcGxpZnkubWF0Y2gobm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7
CisgICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChu
b2RlKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtODAsNyArOTIs
OSBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpubwogICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhp
cyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5
Lm1hdGNoKG5vZGUsIGdldFBhcmVudE5vZGUoKSwgaXNMVmFsdWVSZXF1aXJlZEhlcmUoKSk7Cisg
ICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZvdW5kTG9vcFRvQ2hhbmdl
ID0KKyAgICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlLCBnZXRQYXJlbnRO
b2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOwogICAgIHJldHVybiAhbUZvdW5kTG9vcFRv
Q2hhbmdlOwogfQogCkBAIC05Miw3ICsxMDYsOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYQog
ICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFs
cmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hh
bmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNoKG5vZGUsIGdldFBhcmVudE5vZGUoKSk7
CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZvdW5kTG9vcFRvQ2hh
bmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkp
OwogICAgIHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCkBAIC0xMDQsNyArMTE5LDgg
QEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICoKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMg
bG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5t
YXRjaChub2RlKTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91
bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAg
IHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCkBAIC0xMTYsMTAgKzEzMiwzNSBAQCBi
b29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0RGVjbGFyYXRpb24oVmlz
aXQgdmlzaXQsIFRJbnRlcm1EZWNsYQogICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29w
LgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNo
KG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExv
b3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSk7CiAgICAgcmV0
dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKK2Jvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9u
c1RyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUp
Cit7CisgICAgaWYgKG5vZGUtPmdldEZsb3dPcCgpID09IEVPcENvbnRpbnVlICYmIChtTG9vcC5j
b25kaXRpb24gfHwgbUxvb3AuZXhwcmVzc2lvbikpCisgICAgeworICAgICAgICBUSW50ZXJtQmxv
Y2sgKnBhcmVudCA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworICAgICAgICBBU1NF
UlQocGFyZW50KTsKKyAgICAgICAgVEludGVybVNlcXVlbmNlIHNlcTsKKyAgICAgICAgaWYgKG1M
b29wLmV4cHJlc3Npb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobUxv
b3AuZXhwcmVzc2lvbi0+ZGVlcENvcHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1Mb29w
LmNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1Mb29wLmNvbmRpdGlv
blZhcmlhYmxlKTsKKyAgICAgICAgICAgIHNlcS5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAg
Q3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9vcC5j
b25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKyAgICAgICAgfQorICAgICAgICBzZXEucHVzaF9iYWNr
KG5vZGUpOworICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVzaF9iYWNrKE5vZGVSZXBsYWNl
V2l0aE11bHRpcGxlRW50cnkocGFyZW50LCBub2RlLCBzdGQ6Om1vdmUoc2VxKSkpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKICAgICAvLyBNYXJrIHRo
YXQgd2UncmUgaW5zaWRlIGEgbG9vcCBjb25kaXRpb24gb3IgZXhwcmVzc2lvbiwgYW5kIGRldGVy
bWluZSBpZiB0aGUgbG9vcCBuZWVkcyB0byBiZQpAQCAtMTI4LDcgKzE2OSw3IEBAIHZvaWQgU2lt
cGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpu
b2RlKQogICAgIFNjb3BlZE5vZGVJblRyYXZlcnNhbFBhdGggYWRkVG9QYXRoKHRoaXMsIG5vZGUp
OwogCiAgICAgbUluc2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNzaW9uID0gdHJ1ZTsKLSAg
ICBtRm91bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBtRm91
bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAhbUNvbmRpdGlvbnNUb1NpbXBsaWZ5
OwogCiAgICAgaWYgKCFtRm91bmRMb29wVG9DaGFuZ2UgJiYgbm9kZS0+Z2V0SW5pdCgpKQogICAg
IHsKQEAgLTE0Nyw4MyArMTg4LDE0MSBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKIAogICAgIG1JbnNpZGVMb29w
SW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IGZhbHNlOwogCisgICAgY29uc3QgTG9vcEluZm8g
cHJldkxvb3AgPSBtTG9vcDsKKwogICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCiAgICAgewot
ICAgICAgICBjb25zdCBUVHlwZSAqYm9vbFR5cGUgICAgICAgID0gU3RhdGljVHlwZTo6R2V0PEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxVGVtcG9yYXJ5LCAxLCAxPigpOwotICAgICAgICBUVmFy
aWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1ib2xUYWJs
ZSwgYm9vbFR5cGUpOworICAgICAgICBjb25zdCBUVHlwZSAqYm9vbFR5cGUgICA9IFN0YXRpY1R5
cGU6OkdldDxFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKKyAg
ICAgICAgbUxvb3AuY29uZGl0aW9uVmFyaWFibGUgPSBDcmVhdGVUZW1wVmFyaWFibGUobVN5bWJv
bFRhYmxlLCBib29sVHlwZSk7CisgICAgICAgIG1Mb29wLmNvbmRpdGlvbiAgICAgICAgID0gbm9k
ZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1Mb29wLmV4cHJlc3Npb24gICAgICAgID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOwogCiAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGxvb3AgY29uZGl0
aW9uIHdpdGggYSBib29sZWFuIHZhcmlhYmxlIHRoYXQncyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0
aW9uLgogICAgICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAg
ICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKQogICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBUcmFuc2Zvcm06Ci0gICAgICAgICAgICAvLyAgIHdoaWxlIChleHByKSB7IGJvZHk7IH0KLSAg
ICAgICAgICAgIC8vIGludG8KLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7Ci0gICAg
ICAgICAgICAvLyAgIHdoaWxlIChzMCkgeyB7IGJvZHk7IH0gczAgPSBleHByOyB9Ci0gICAgICAg
ICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBu
b2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0
ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBU
SW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9u
KTsKKworICAgICAgICAgICAgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+
cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250
aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAg
ICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8g
ICB3aGlsZSAoZXhwcikgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAg
ICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICB3aGls
ZSAoczApIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqdGVt
cEluaXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBJbml0RGVj
bGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRpb24pOwor
ICAgICAgICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNs
YXJhdGlvbik7CisKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVt
cFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKworICAgICAgICAgICAgICAg
IC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisg
ICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUcmFu
c2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9CisgICAg
ICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7
CisgICAgICAgICAgICAgICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsg
fQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0
ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAgICAgICAgIC8vICAgczAgPSBl
eHByOyBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJ
bml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xh
cmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAg
ICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFy
YXRpb24pOworCisgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJ
bnRlcm1CbG9jaygpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgp
LT5wdXNoX2JhY2sobm9kZS0+Z2V0Qm9keSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKAorICAgICAgICAgICAg
ICAgICAgICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUs
IG1Mb29wLmNvbmRpdGlvbi0+ZGVlcENvcHkoKSkpOworCisgICAgICAgICAgICAgICAgLy8gQ2Fu
J3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQgbWF5
IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0
aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhlcmUgLSB0aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBi
ZQorICAgICAgICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFu
eSBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkpOworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9v
cC5jb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3Qm9k
eS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKAotICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBB
c3NpZ25tZW50Tm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRl
ZXBDb3B5KCkpKTsKLQotICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQg
dG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQgbWF5IGhhdmUgYmVlbiBudWxscHRyLgotICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVy
ZSAtIHRoZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCi0gICAgICAgICAgICAvLyB0cmF2ZXJzZWQs
IGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBhbnkgcHJvYmxlbXMuCi0gICAgICAgICAgICBub2RlLT5z
ZXRCb2R5KG5ld0JvZHkpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRl
bXBTeW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKQogICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBUcmFuc2Zvcm06Ci0gICAgICAgICAgICAvLyAgIGRvIHsKLSAgICAgICAgICAgIC8vICAgICBi
b2R5OwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKLSAgICAgICAgICAgIC8vIGlu
dG8KLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IHRydWU7Ci0gICAgICAgICAgICAvLyAgIGRv
IHsKLSAgICAgICAgICAgIC8vICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICBzMCA9
IGV4cHI7Ci0gICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKLSAgICAgICAgICAgIFRJbnRl
cm1EZWNsYXJhdGlvbiAqdGVtcEluaXREZWNsYXJhdGlvbiA9Ci0gICAgICAgICAgICAgICAgQ3Jl
YXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUoY29uZGl0aW9uVmFyaWFibGUsIENyZWF0ZUJvb2xO
b2RlKHRydWUpKTsKLSAgICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVt
cEluaXREZWNsYXJhdGlvbik7Ci0KLSAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9
IG5ldyBUSW50ZXJtQmxvY2soKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCisg
ICAgICAgICAgICBBU1NFUlQoIW1Mb29wLmV4cHJlc3Npb24pOworCisgICAgICAgICAgICBpZiAo
bUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0Qm9k
eSgpKTsKKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRp
b24gdmFyaWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51
bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtTG9vcC5jb25kaXRp
b24tPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIFRyYW5zZm9ybToKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgYm9keTsKKyAgICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKGV4cHIpOworICAg
ICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHBy
OworICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgIC8vICAgICBib2R5
OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoczApOworICAgICAgICAgICAgICAgIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqdGVtcEluaXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24pOworICAgICAgICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFy
ZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUp
KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlv
biB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxl
IChleHByKTsKKyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBi
b29sIHMwOworICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgIC8vICAg
ICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgczAgPSBleHByOworICAgICAgICAg
ICAgICAgIC8vICAgfSB3aGlsZSAoczApOworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ug
c3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMw
ID0gZXhwcjsgY29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0
ZW1wSW5pdERlY2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcERlY2xh
cmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSk7CisgICAgICAgICAgICAgICAgaW5z
ZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKKworICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUt
PmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld0JvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVt
cEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRpb24p
KTsKKworICAgICAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJl
cGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KKyAgICAgICAg
ICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJl
IC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKKyAgICAgICAgICAgICAgICAvLyB0cmF2ZXJz
ZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBhbnkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRp
b24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygK
LSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUoY29uZGl0aW9uVmFyaWFi
bGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5kZWVwQ29weSgpKSk7Ci0KLSAgICAgICAgICAgIC8v
IENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0
IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0
aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhlcmUgLSB0aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBi
ZQotICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHBy
b2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKLSAgICAgICAgICAg
IG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJs
ZSkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKQog
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb3ZlIHRoZSBsb29wIGNvbmRpdGlvbiBpbnNpZGUg
dGhlIGxvb3AuCi0gICAgICAgICAgICAvLyBUcmFuc2Zvcm06Ci0gICAgICAgICAgICAvLyAgIGZv
ciAoaW5pdDsgZXhwcjsgZXhwckIpIHsgYm9keTsgfQotICAgICAgICAgICAgLy8gaW50bwotICAg
ICAgICAgICAgLy8gICB7Ci0gICAgICAgICAgICAvLyAgICAgaW5pdDsKLSAgICAgICAgICAgIC8v
ICAgICBib29sIHMwID0gZXhwcjsKLSAgICAgICAgICAgIC8vICAgICB3aGlsZSAoczApIHsKLSAg
ICAgICAgICAgIC8vICAgICAgIHsgYm9keTsgfQotICAgICAgICAgICAgLy8gICAgICAgZXhwckI7
Ci0gICAgICAgICAgICAvLyAgICAgICBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgfQot
ICAgICAgICAgICAgLy8gICB9CisgICAgICAgICAgICBpZiAoIW1Mb29wLmNvbmRpdGlvbikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBDcmVhdGVCb29s
Tm9kZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVEludGVybUxvb3AgKndo
aWxlTG9vcDsKICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAg
PSBuZXcgVEludGVybUJsb2NrKCk7CiAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKmxvb3BT
Y29wZVNlcXVlbmNlID0gbG9vcFNjb3BlLT5nZXRTZXF1ZW5jZSgpOwogCkBAIC0yMzMsNDggKzMz
MiwxMzAgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjayhub2RlLT5nZXRJbml0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAvLyBJbnNlcnQgImJvb2wgczAgPSBleHByOyIgaWYgYXBwbGljYWJsZSwgImJvb2wgczAgPSB0
cnVlOyIgb3RoZXJ3aXNlCi0gICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmRpdGlvbkluaXRp
YWxpemVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkK
KyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvbkluaXRpYWxpemVyID0gbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCk7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUg
bG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29wLgorICAgICAgICAgICAgICAgIC8vIFRyYW5z
Zm9ybToKKyAgICAgICAgICAgICAgICAvLyAgIGZvciAoaW5pdDsgZXhwcjsgZXhwckIpIHsgYm9k
eTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgaW5pdDsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUg
KGV4cHIpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAg
ICAgICAgIC8vICAgfQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTG9j
YWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAgICAgICAg
IC8vICAgZXhwckI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJv
ZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCisgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3
aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRCb2R5KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3
aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0Qm9keSgpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGlu
IHRoZSB3aGlsZSBsb29wCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24o
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxlKGV4cHIpIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9CisgICAgICAgICAgICAg
ICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxscHRyLCBtTG9vcC5jb25kaXRp
b24sIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBj
b250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAg
ICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0
YW50VW5pb24oKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0
aWFsaXplciA9IENyZWF0ZUJvb2xOb2RlKHRydWUpOworICAgICAgICAgICAgICAgIC8vIE1vdmUg
dGhlIGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7
IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7
CisgICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIGJv
b2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgICB3aGlsZSAoczApIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICBl
eHByQjsKKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAgICAgIC8vICAgfQor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1l
bnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAgICAgICAgIC8vICAgZXhwckI7IGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJib29sIHMwID0gZXhwcjsiCisg
ICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2UtPnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFy
aWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBi
b2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAq
d2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBp
biB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9u
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShzMCkgeyB3aGls
ZUxvb3BCb2R5IH0iCisgICAgICAgICAgICAgICAgd2hpbGVMb29wID0gbmV3IFRJbnRlcm1Mb29w
KEVMb29wV2hpbGUsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwg
bnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVu
dCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRp
dGlvbiA9IG51bGxwdHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb29wU2NvcGVTZXF1
ZW5jZS0+cHVzaF9iYWNrKAotICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRp
b25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBjb25kaXRpb25Jbml0aWFsaXplcikpOwotCi0gICAg
ICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKLSAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJv
ZHkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIgaW4g
dGhlIHdoaWxlIGxvb3AKLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2Uo
KS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBJbnNlcnQgInMwID0gZXhwcjsiIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRl
IHRoZSBsb29wLgorICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybToKKyAgICAgICAgICAgICAg
ICAvLyAgIGZvciAoaW5pdDsgZXhwcjsgZXhwckIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAg
IC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIHsKKyAgICAgICAgICAgICAgICAvLyAgICAg
aW5pdDsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9vbCBzMCA9IGV4cHI7CisgICAgICAgICAg
ICAgICAgLy8gICAgIHdoaWxlIChzMCkgeworICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYm9k
eTsgfQorICAgICAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOworICAgICAgICAgICAgICAgIC8v
ICAgICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAg
ICAgIC8vICAgfQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gTG9jYWwg
Y2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgICAgICAgICAgIC8v
ICAgZXhwckI7IHMwID0gZXhwcjsgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBJbnNl
cnQgImJvb2wgczAgPSBleHByOyIKKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+
cHVzaF9iYWNrKAorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9u
Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKSk7CisgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCisgICAgICAg
ICAgICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygp
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNo
X2JhY2sobm9kZS0+Z2V0Qm9keSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5n
ZXRFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgInMwID0gZXhwcjsiIGluIHRoZSB3aGlsZSBsb29wCiAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKAotICAgICAgICAgICAgICAgICAg
ICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENv
bmRpdGlvbigpLT5kZWVwQ29weSgpKSk7CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBB
c3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uLT5k
ZWVwQ29weSgpKSk7CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShzMCkgeyB3aGls
ZUxvb3BCb2R5IH0iCisgICAgICAgICAgICAgICAgd2hpbGVMb29wID0gbmV3IFRJbnRlcm1Mb29w
KEVMb29wV2hpbGUsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwg
bnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIENyZWF0ZSAid2hp
bGUoczApIHsgd2hpbGVMb29wQm9keSB9IgotICAgICAgICAgICAgVEludGVybUxvb3AgKndoaWxl
TG9vcCA9Ci0gICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1Mb29wKEVMb29wV2hpbGUsIG51bGxw
dHIsIENyZWF0ZVRlbXBTeW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgd2hpbGVMb29wQm9keSk7CiAgICAgICAgICAg
ICBsb29wU2NvcGUtPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayh3aGlsZUxvb3ApOwogICAgICAg
ICAgICAgcXVldWVSZXBsYWNlbWVudChsb29wU2NvcGUsIE9yaWdpbmFsTm9kZTo6SVNfRFJPUFBF
RCk7CiAKICAgICAgICAgICAgIC8vIEFmdGVyIHRoaXMgdGhlIG9sZCBib2R5IG5vZGUgd2lsbCBi
ZSB0cmF2ZXJzZWQgYW5kIGxvb3BzIGluc2lkZSBpdCBtYXkgYmUKLSAgICAgICAgICAgIC8vIHRy
YW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3Rp
bGwgYmUgaW4gdGhlIEFTVCBhZnRlciB0aGUKLSAgICAgICAgICAgIC8vIHRyYW5zZm9ybWF0aW9u
IHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5kIHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9l
c24ndCBuZWVkIHRvCi0gICAgICAgICAgICAvLyBrbm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9y
bSBwYXRoIHRvIGl0LgorICAgICAgICAgICAgLy8gdHJhbnNmb3JtZWQuIFRoaXMgaXMgZmluZSwg
c2luY2UgdGhlIG9sZCBib2R5IG5vZGUgd2lsbCBzdGlsbCBiZSBpbiB0aGUgQVNUIGFmdGVyCisg
ICAgICAgICAgICAvLyB0aGUgdHJhbnNmb3JtYXRpb24gdGhhdCdzIHF1ZXVlZCBoZXJlLCBhbmQg
dHJhbnNmb3JtaW5nIGxvb3BzIGluc2lkZSBpdCBkb2Vzbid0CisgICAgICAgICAgICAvLyBuZWVk
IHRvIGtub3cgdGhlIGV4YWN0IHBvc3QtdHJhbnNmb3JtIHBhdGggdG8gaXQuCiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTI4MywxNiArNDY0LDI2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9u
c1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgIC8vIFdlIHRy
YXZlcnNlIHRoZSBib2R5IG9mIHRoZSBsb29wIGV2ZW4gaWYgdGhlIGxvb3AgaXMgdHJhbnNmb3Jt
ZWQuCiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50
cmF2ZXJzZSh0aGlzKTsKKworICAgIG1Mb29wID0gcHJldkxvb3A7CiB9CiAKIH0gIC8vIG5hbWVz
cGFjZQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwg
VEludGVybU5vZGUgKnJvb3QsIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCit7CisgICAgU2lt
cGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIobnVsbHB0ciwgc3ltYm9sVGFi
bGUpOworICAgIHJvb3QtPnRyYXZlcnNlKCZ0cmF2ZXJzZXIpOworICAgIHJldHVybiB0cmF2ZXJz
ZXIudXBkYXRlVHJlZShjb21waWxlciwgcm9vdCk7Cit9CisKIGJvb2wgU2ltcGxpZnlMb29wQ29u
ZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1Ob2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKIHsKLSAgICBTaW1wbGlmeUxvb3BDb25kaXRp
b25zVHJhdmVyc2VyIHRyYXZlcnNlcihjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssIHN5bWJvbFRh
YmxlKTsKKyAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgY29uZGl0aW9uc1RvU2ltcGxpZnko
Y29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrKTsKKyAgICBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyIHRyYXZlcnNlcigmY29uZGl0aW9uc1RvU2ltcGxpZnksIHN5bWJvbFRhYmxlKTsKICAg
ICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKICAgICByZXR1cm4gdHJhdmVyc2VyLnVwZGF0
ZVRyZWUoY29tcGlsZXIsIHJvb3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0
aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5oCmluZGV4IDRjZGVkZTY4MzJkZTkzMDI0
MzQ4ZDdjNjlhYTllNjFjMDZiYjQ1MGYuLjY4Yjk4Zjg1YzQ4OWI4ZjQyODhiNTk0ODNkOWYzYzlh
ZDkwNTZiYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1w
bGlmeUxvb3BDb25kaXRpb25zLmgKQEAgLTE5LDYgKzE5LDEwIEBAIGNsYXNzIFRDb21waWxlcjsK
IGNsYXNzIFRJbnRlcm1Ob2RlOwogY2xhc3MgVFN5bWJvbFRhYmxlOwogCitBTkdMRV9OT19ESVND
QVJEIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlKTsKKwogQU5HTEVfTk9fRElTQ0FSRCBib29sIFNpbXBsaWZ5TG9v
cENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1Np
bXBsaWZ5LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0FzTm9kZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0FzTm9kZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFj
NmRlMTgyZDllZjIzYjNhYjAyYzQwOWViZDEzYTZiNmUzNDY5ZmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQXNOb2RlLmgKQEAgLTAsMCArMSwyMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1BU05PREVfSF8KKyNkZWZpbmUgQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1BU05PREVfSF8KKworI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgi
CisKKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc2gKK3sKKworbmFtZXNwYWNlIHBy
aXYKK3sKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQXNOb2RlCit7fTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybU5vZGU+Cit7CisgICAgc3RhdGljIEFOR0xF
X0lOTElORSBUSW50ZXJtTm9kZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkgeyByZXR1cm4gbm9k
ZTsgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybVR5cGVkPgorewor
ICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVR5cGVkICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiBu
dWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1T
eW1ib2w+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtU3ltYm9sICpleGVjKFRJ
bnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRB
c1N5bWJvbE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVj
dCBBc05vZGU8VEludGVybUNvbnN0YW50VW5pb24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElO
RSBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgOiBudWxscHRy
OworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZT4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1GdW5jdGlvblBy
b3RvdHlwZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
b2RlID8gbm9kZS0+Z2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSA6IG51bGxwdHI7CisgICAg
fQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybVByZXByb2Nlc3NvckRp
cmVjdGl2ZT4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1QcmVwcm9jZXNzb3JE
aXJlY3RpdmUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bm9kZSA/IG5vZGUtPmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkgOiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Td2l6emxlPgorewor
ICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN3aXp6bGUgKmV4ZWMoVEludGVybU5vZGUg
Km5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzU3dpenpsZU5v
ZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8
VEludGVybUJpbmFyeT4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1CaW5hcnkg
KmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5v
ZGUtPmdldEFzQmluYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElO
RSBUSW50ZXJtVW5hcnkgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVW5hcnlOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307
CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UZXJuYXJ5PgoreworICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVRlcm5hcnkgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVGVybmFyeU5vZGUoKSA6
IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVy
bUlmRWxzZT4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1JZkVsc2UgKmV4ZWMo
VEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdl
dEFzSWZFbHNlTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3Ry
dWN0IEFzTm9kZTxUSW50ZXJtU3dpdGNoPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybVN3aXRjaCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBub2RlID8gbm9kZS0+Z2V0QXNTd2l0Y2hOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisK
K3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1DYXNlPgoreworICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybUNhc2UgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ2FzZU5vZGUoKSA6IG51bGxwdHI7Cisg
ICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkgOiBudWxscHRyOworICAgIH0KK307
CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1BZ2dyZWdhdGU+Cit7CisgICAg
c3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQWdncmVnYXRlICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgp
IDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50
ZXJtQmxvY2s+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmxvY2sgKmV4ZWMo
VEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdl
dEFzQmxvY2soKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBB
c05vZGU8VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uPgoreworICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0ds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRGVjbGFyYXRpb24+Cit7CisgICAgc3Rh
dGljIEFOR0xFX0lOTElORSBUSW50ZXJtRGVjbGFyYXRpb24gKmV4ZWMoVEludGVybU5vZGUgKm5v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1Mb29wPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUxvb3AgKmV4
ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PmdldEFzTG9vcE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybUJyYW5jaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1CcmFuY2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZSA/IG5vZGUtPmdldEFzQnJhbmNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9Owor
Cit9ICAvLyBuYW1lc3BhY2UgcHJpdgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0lO
TElORSBUICphc05vZGUoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgcmV0dXJuIHByaXY6OkFz
Tm9kZTxUPjo6ZXhlYyhub2RlKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1BU05PREVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0
Y2hlci5jcHAKaW5kZXggZDA4YzM4NmRhMDdmZTkwZGY2YWUyMTk4MmE0OGUxMTFjM2RjN2YwZS4u
YWNjNzg5Mjk2YjJiNzFlMWI4MzNhOTMyMzg5MTc0YTg4ZTgwM2MwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hl
ci5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Oklz
RHluYW1pY0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICoKICAgICByZXR1
cm4gSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4KG5vZGUpICYmIG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTd2l6emxlTm9kZSgpOwogfQogCi1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0
Y2hlcjo6bWF0Y2hJbnRlcm5hbChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFy
ZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAogewogICAg
IGlmICgobU1hc2sgJiBrRXhwcmVzc2lvblJldHVybmluZ0FycmF5KSAhPSAwKQogICAgIHsKQEAg
LTg3LDcgKzg3LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoSW50ZXJu
YWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVW5hcnkg
Km5vZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5
ICpub2RlKSBjb25zdAogewogICAgIGlmICgobU1hc2sgJiBrQXJyYXlMZW5ndGhNZXRob2QpICE9
IDApCiAgICAgewpAQCAtOTksNyArOTksNyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hl
cjo6bWF0Y2goVEludGVybVVuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2RlKQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAog
ewogICAgIC8vIEwtdmFsdWUgdHJhY2tpbmcgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGNoZWNr
IGZvciBkeW5hbWljIGluZGV4aW5nIGluIEwtdmFsdWUuCiAgICAgLy8gVHJhdmVyc2VycyB0aGF0
IGRvbid0IHRyYWNrIGwtdmFsdWVzIGNhbiBzdGlsbCB1c2UgdGhpcyBjbGFzcyBhbmQgbWF0Y2gg
YmluYXJ5IG5vZGVzIHdpdGgKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEludGVybU5vZGVQYXR0
ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVu
dE5vZAogCiBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFy
eSAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9k
ZSAqcGFyZW50Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGlzTFZhbHVlUmVxdWlyZWRIZXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpIGNvbnN0CiB7CiAgICAgaWYgKG1hdGNoSW50
ZXJuYWwobm9kZSwgcGFyZW50Tm9kZSkpCiAgICAgewpAQCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNo
KFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKQorYm9vbCBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAogewogICAgIGlmICgobU1hc2sgJiBrRXhwcmVz
c2lvblJldHVybmluZ0FycmF5KSAhPSAwKQogICAgIHsKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29s
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwg
VEludGVybU5vZGUgKnBhcmVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnRlcm1O
b2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQorYm9vbCBJbnRl
cm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdAog
ewogICAgIGlmICgobU1hc2sgJiBrVW5mb2xkZWRTaG9ydENpcmN1aXRFeHByZXNzaW9uKSAhPSAw
KQogICAgIHsKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hl
cjo6bWF0Y2goVEludGVybVRlcm5hcnkgKm5vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybURlY2xhcmF0aW9uICpu
b2RlKQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJh
dGlvbiAqbm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga011bHRpRGVjbGFyYXRpb24p
ICE9IDApCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oCmluZGV4IGU5YzRiY2ZhNTMxZmE5NDNhZmU1NGMw
NjNlY2VhZTIwNzc4YjM5MmUuLjZmM2Q4NzM1NTY3NGUwYzg3YTdlZDQ3NzU4N2M3MjA0NDU1MmRk
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyLmgKQEAgLTI4LDUyICsyOCw1MiBAQCBjbGFzcyBJbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXIKICAgICBzdGF0aWMgYm9vbCBJc0R5bmFtaWNJbmRleGluZ09mVmVjdG9y
T3JNYXRyaXgoVEludGVybUJpbmFyeSAqbm9kZSk7CiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWlj
SW5kZXhpbmdPZlN3aXp6bGVkVmVjdG9yKFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogCi0gICAgZW51
bSBQYXR0ZXJuVHlwZQorICAgIGVudW0gUGF0dGVyblR5cGUgOiB1bnNpZ25lZCBpbnQKICAgICB7
CiAgICAgICAgIC8vIE1hdGNoZXMgZXhwcmVzc2lvbnMgdGhhdCBhcmUgdW5mb2xkZWQgdG8gaWYg
c3RhdGVtZW50cyBieSBVbmZvbGRTaG9ydENpcmN1aXRUb0lmCi0gICAgICAgIGtVbmZvbGRlZFNo
b3J0Q2lyY3VpdEV4cHJlc3Npb24gPSAweDAwMDEsCisgICAgICAgIGtVbmZvbGRlZFNob3J0Q2ly
Y3VpdEV4cHJlc3Npb24gPSAxdSA8PCAwdSwKIAogICAgICAgICAvLyBNYXRjaGVzIGV4cHJlc3Np
b25zIHRoYXQgcmV0dXJuIGFycmF5cyB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc2ltcGxlIHN0YXRl
bWVudHMgd2hlcmUgYQogICAgICAgICAvLyBjb25zdHJ1Y3RvciBvciBmdW5jdGlvbiBjYWxsIHJl
c3VsdCBpcyBhc3NpZ25lZC4KLSAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDB4
MDAwMSA8PCAxLAorICAgICAgICBrRXhwcmVzc2lvblJldHVybmluZ0FycmF5ID0gMXUgPDwgMXUs
CiAKICAgICAgICAgLy8gTWF0Y2hlcyBkeW5hbWljIGluZGV4aW5nIG9mIHZlY3RvcnMgb3IgbWF0
cmljZXMgaW4gbC12YWx1ZXMuCi0gICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0
cml4SW5MVmFsdWUgPSAweDAwMDEgPDwgMiwKKyAgICAgICAga0R5bmFtaWNJbmRleGluZ09mVmVj
dG9yT3JNYXRyaXhJbkxWYWx1ZSA9IDF1IDw8IDJ1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVj
bGFyYXRpb25zIHdpdGggbW9yZSB0aGFuIG9uZSBkZWNsYXJlZCB2YXJpYWJsZXMuCi0gICAgICAg
IGtNdWx0aURlY2xhcmF0aW9uID0gMHgwMDAxIDw8IDMsCisgICAgICAgIGtNdWx0aURlY2xhcmF0
aW9uID0gMXUgPDwgM3UsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBkZWNsYXJhdGlvbnMgb2YgYXJy
YXlzLgotICAgICAgICBrQXJyYXlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCA0LAorICAgICAgICBr
QXJyYXlEZWNsYXJhdGlvbiA9IDF1IDw8IDR1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFy
YXRpb25zIG9mIHN0cnVjdHMgd2hlcmUgdGhlIHN0cnVjdCB0eXBlIGRvZXMgbm90IGhhdmUgYSBu
YW1lLgotICAgICAgICBrTmFtZWxlc3NTdHJ1Y3REZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCA1LAor
ICAgICAgICBrTmFtZWxlc3NTdHJ1Y3REZWNsYXJhdGlvbiA9IDF1IDw8IDV1LAogCiAgICAgICAg
IC8vIE1hdGNoZXMgYXJyYXkgbGVuZ3RoKCkgbWV0aG9kLgotICAgICAgICBrQXJyYXlMZW5ndGhN
ZXRob2QgPSAweDAwMDEgPDwgNiwKKyAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9kID0gMXUgPDwg
NnUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBhIHZlY3RvciBvciBtYXRyaXggY29uc3RydWN0b3Ig
d2hvc2UgYXJndW1lbnRzIGFyZSBzY2FsYXJpemVkIGJ5IHRoZQogICAgICAgICAvLyBTSF9TQ0FM
QVJJWkVfVkVDX09SX01BVF9DT05TVFJVQ1RPUl9BUkdVTUVOVFMgd29ya2Fyb3VuZC4KLSAgICAg
ICAga1NjYWxhcml6ZWRWZWNPck1hdENvbnN0cnVjdG9yID0gMHgwMDAxIDw8IDcKKyAgICAgICAg
a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0cnVjdG9yID0gMXUgPDwgN3UsCiAgICAgfTsKICAgICBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIoY29uc3QgdW5zaWduZWQgaW50IG1hc2spOwogCi0gICAg
Ym9vbCBtYXRjaChUSW50ZXJtVW5hcnkgKm5vZGUpOworICAgIGJvb2wgbWF0Y2goVEludGVybVVu
YXJ5ICpub2RlKSBjb25zdDsKIAotICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwg
VEludGVybU5vZGUgKnBhcmVudE5vZGUpOworICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAq
bm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpIGNvbnN0OwogCiAgICAgLy8gVXNlIHRoaXMg
dmVyc2lvbiBmb3IgY2hlY2tpbmcgYmluYXJ5IG5vZGUgbWF0Y2hlcyBpbiBjYXNlIHlvdSdyZSB1
c2luZyBmbGFnCiAgICAgLy8ga0R5bmFtaWNJbmRleGluZ09mVmVjdG9yT3JNYXRyaXhJbkxWYWx1
ZS4KLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJl
bnROb2RlLCBib29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKTsKKyAgICBib29sIG1hdGNoKFRJbnRl
cm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlLCBib29sIGlzTFZhbHVlUmVx
dWlyZWRIZXJlKSBjb25zdDsKIAotICAgIGJvb2wgbWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9k
ZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpOwotICAgIGJvb2wgbWF0Y2goVEludGVybVRlcm5h
cnkgKm5vZGUpOwotICAgIGJvb2wgbWF0Y2goVEludGVybURlY2xhcmF0aW9uICpub2RlKTsKKyAg
ICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnRO
b2RlKSBjb25zdDsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdDsK
KyAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgY29uc3Q7CiAKICAgcHJp
dmF0ZToKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbU1hc2s7CiAKLSAgICBib29sIG1hdGNoSW50
ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpOworICAg
IGJvb2wgbWF0Y2hJbnRlcm5hbChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFy
ZW50Tm9kZSkgY29uc3Q7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlX3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5jcHAKaW5kZXggNmFiMTNiYTQ2
OTVlYzFjNDMwYmJhMWM2Mjk2YTU2MWE0Zjk3NDMyZS4uZDNlMWZjYTAwMTQyOTliNGM0NjkzMDI3
Y2I1OGQ2ZmQwY2U2MTY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVfdXRpbC5jcHAKQEAgLTIyNCw2ICsyMjQsNTAgQEAgVFZhcmlhYmxlICpEZWNs
YXJlVGVtcFZhcmlhYmxlKFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCiAgICAgcmV0dXJuIHZh
cmlhYmxlOwogfQogCitzdGQ6OnBhaXI8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJs
ZSAqPiBEZWNsYXJlU3RydWN0dXJlKAorICAgIFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICBUU3lt
Ym9sVGFibGUgKnN5bWJvbFRhYmxlLAorICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKKyAgICBU
UXVhbGlmaWVyIHF1YWxpZmllciwKKyAgICBjb25zdCBUTWVtb3J5UXVhbGlmaWVyICZtZW1vcnlR
dWFsaWZpZXIsCisgICAgdWludDMyX3QgYXJyYXlTaXplLAorICAgIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmc3RydWN0VHlwZU5hbWUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICpzdHJ1Y3RJ
bnN0YW5jZU5hbWUpCit7CisgICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0KKyAgICAgICAgbmV3
IFRTdHJ1Y3R1cmUoc3ltYm9sVGFibGUsIHN0cnVjdFR5cGVOYW1lLCBmaWVsZExpc3QsIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworCisgICAgYXV0byBtYWtlU3RydWN0dXJlVHlwZSA9IFsm
XShib29sIGlzU3RydWN0U3BlY2lmaWVyKSB7CisgICAgICAgIFRUeXBlICpzdHJ1Y3R1cmVUeXBl
ID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgaXNTdHJ1Y3RTcGVjaWZpZXIpOworICAgICAgICBzdHJ1
Y3R1cmVUeXBlLT5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsKKyAgICAgICAgc3RydWN0dXJlVHlw
ZS0+c2V0TWVtb3J5UXVhbGlmaWVyKG1lbW9yeVF1YWxpZmllcik7CisgICAgICAgIGlmIChhcnJh
eVNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3R1cmVUeXBlLT5tYWtlQXJy
YXkoYXJyYXlTaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RydWN0dXJlVHlwZTsK
KyAgICB9OworCisgICAgVEludGVybVNlcXVlbmNlIGluc2VydFNlcXVlbmNlOworCisgICAgVFZh
cmlhYmxlICp0eXBlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwga0VtcHR5SW1tdXRh
YmxlU3RyaW5nLCBtYWtlU3RydWN0dXJlVHlwZSh0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICBpbnNlcnRTZXF1ZW5j
ZS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnt0eXBlVmFyfSk7CisKKyAgICBUVmFy
aWFibGUgKmluc3RhbmNlVmFyID0gbnVsbHB0cjsKKyAgICBpZiAoc3RydWN0SW5zdGFuY2VOYW1l
KQorICAgIHsKKyAgICAgICAgaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxl
LCAqc3RydWN0SW5zdGFuY2VOYW1lLCBtYWtlU3RydWN0dXJlVHlwZShmYWxzZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsK
KyAgICAgICAgaW5zZXJ0U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
aW5zdGFuY2VWYXJ9KTsKKyAgICB9CisKKyAgICBzaXplX3QgZmlyc3RGdW5jdGlvbkluZGV4ID0g
RmluZEZpcnN0RnVuY3Rpb25EZWZpbml0aW9uSW5kZXgocm9vdCk7CisgICAgcm9vdC0+aW5zZXJ0
Q2hpbGROb2RlcyhmaXJzdEZ1bmN0aW9uSW5kZXgsIGluc2VydFNlcXVlbmNlKTsKKworICAgIHJl
dHVybiB7dHlwZVZhciwgaW5zdGFuY2VWYXJ9OworfQorCiBjb25zdCBUVmFyaWFibGUgKkRlY2xh
cmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCmluZGV4IDM5
Yjg2ZGQxYmYyOTZiNzAzOTU2ZjcxMjZkMDc0YmQ1OWFjZTZjNGMuLmY1ZDFjOTM1ODJhYTBmNTEx
NzA1NzI2MDU1OTM4NWI2Yjc3ZjU5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtTm9kZV91dGlsLmgKQEAgLTQ1LDYgKzQ1LDE1IEBAIFRWYXJpYWJsZSAqRGVj
bGFyZVRlbXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICoqZGVjbGFyYXRpb25PdXQpOwor
c3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gRGVjbGFyZVN0
cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5bWJvbFRhYmxlICpzeW1i
b2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAgVFF1YWxpZmllciBxdWFs
aWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5UXVhbGlmaWVyLAorICAg
IHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgJnN0cnVjdFR5
cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0SW5zdGFuY2VOYW1lKTsK
IGNvbnN0IFRWYXJpYWJsZSAqRGVjbGFyZUludGVyZmFjZUJsb2NrKFRJbnRlcm1CbG9jayAqcm9v
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAq
c3ltYm9sVGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURmll
bGRMaXN0ICpmaWVsZExpc3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50
ZXJtUmVidWlsZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg4MzQ3Mzg4NThjMGM5ZmM2NzI4OGViMTVlNjMz
MWE1M2E0NDBiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcApAQCAtMCww
ICsxLDEwMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0FzTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVJlYnVpbGQuaCIKKworI2RlZmluZSBHVUFSRDIoY29uZCwgZmFpbFZhbCkgXAorICAg
IGRvICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBpZiAoIShjb25kKSkgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWxWYWw7ICAgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIEdV
QVJEKGNvbmQpIEdVQVJEMihjb25kLCBudWxscHRyKQorCituYW1lc3BhY2Ugc2gKK3sKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitBTkdMRV9JTkxJTkUgYm9vbCBBbGxCaXRz
KFQgaGF5c3RhY2ssIFUgbmVlZGxlKQoreworICAgIHJldHVybiAoaGF5c3RhY2sgJiBuZWVkbGUp
ID09IG5lZWRsZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitBTkdM
RV9JTkxJTkUgYm9vbCBBbnlCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxlKQoreworICAgIHJldHVy
biAoaGF5c3RhY2sgJiBuZWVkbGUpICE9IDA7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEJhc2VSZXN1bHQgJm90
aGVyKQorICAgIDogbUFjdGlvbihvdGhlci5tQWN0aW9uKSwKKyAgICAgIG1WaXNpdChvdGhlci5t
VmlzaXQpLAorICAgICAgbVNpbmdsZShvdGhlci5tU2luZ2xlKSwKKyAgICAgIG1NdWx0aShzdGQ6
Om1vdmUob3RoZXIubU11bHRpKSkKK3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpC
YXNlUmVzdWx0KFRJbnRlcm1Ob2RlICZub2RlLCBWaXNpdEJpdHMgdmlzaXQpCisgICAgOiBtQWN0
aW9uKEFjdGlvbjo6UmVwbGFjZVNpbmdsZSksIG1WaXNpdCh2aXNpdCksIG1TaW5nbGUoJm5vZGUp
Cit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChUSW50ZXJtTm9k
ZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFjdGlvbihub2RlID8gQWN0aW9uOjpS
ZXBsYWNlU2luZ2xlIDogQWN0aW9uOjpEcm9wKSwKKyAgICAgIG1WaXNpdChub2RlID8gdmlzaXQg
OiBWaXNpdEJpdHM6Ok5laXRoZXIpLAorICAgICAgbVNpbmdsZShub2RlKQore30KKworVEludGVy
bVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQobnVsbHB0cl90KQorICAgIDogbUFjdGlv
bihBY3Rpb246OkRyb3ApLCBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwgbVNpbmdsZShudWxs
cHRyKQore30KKworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoRmFpbCkK
KyAgICA6IG1BY3Rpb24oQWN0aW9uOjpGYWlsKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciks
IG1TaW5nbGUobnVsbHB0cikKK3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNl
UmVzdWx0KHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAgOiBtQWN0aW9u
KEFjdGlvbjo6UmVwbGFjZU11bHRpKSwKKyAgICAgIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIp
LAorICAgICAgbVNpbmdsZShudWxscHRyKSwKKyAgICAgIG1NdWx0aShzdGQ6Om1vdmUobm9kZXMp
KQore30KKwordm9pZCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwo
QmFzZVJlc3VsdCAmb3RoZXIpCit7CisgICAgbUFjdGlvbiA9IG90aGVyLm1BY3Rpb247CisgICAg
bVZpc2l0ICA9IG90aGVyLm1WaXNpdDsKKyAgICBtU2luZ2xlID0gb3RoZXIubVNpbmdsZTsKKyAg
ICBtTXVsdGkgID0gc3RkOjptb3ZlKG90aGVyLm1NdWx0aSk7Cit9CisKK1RJbnRlcm1SZWJ1aWxk
OjpCYXNlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aShzdGQ6OnZlY3Rv
cjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQoreworICAgIGF1dG8gaXQgPSBzdGQ6OnJlbW92ZShu
b2Rlcy5iZWdpbigpLCBub2Rlcy5lbmQoKSwgbnVsbHB0cik7CisgICAgbm9kZXMuZXJhc2UoaXQs
IG5vZGVzLmVuZCgpKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKG5vZGVzKTsKK30KKworYm9vbCBU
SW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNGYWlsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUFjdGlvbiA9PSBBY3Rpb246OkZhaWw7Cit9CisKK2Jvb2wgVEludGVybVJlYnVpbGQ6OkJhc2VS
ZXN1bHQ6OmlzRHJvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rpb24gPT0gQWN0aW9uOjpE
cm9wOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmds
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaW5nbGU7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9y
PFRJbnRlcm1Ob2RlICo+ICpUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bXVsdGkoKSBjb25z
dAoreworICAgIGlmIChtQWN0aW9uID09IEFjdGlvbjo6UmVwbGFjZU11bHRpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICZtTXVsdGk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBQcmVSZXN1bHQgPSBUSW50ZXJtUmVidWls
ZDo6UHJlUmVzdWx0OworCitQcmVSZXN1bHQ6OlByZVJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSwg
VmlzaXRCaXRzIHZpc2l0KSA6IEJhc2VSZXN1bHQobm9kZSwgdmlzaXQpIHt9CitQcmVSZXN1bHQ6
OlByZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0KSA6IEJhc2VSZXN1
bHQobm9kZSwgdmlzaXQpIHt9CitQcmVSZXN1bHQ6OlByZVJlc3VsdChudWxscHRyX3QpIDogQmFz
ZVJlc3VsdChudWxscHRyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoRmFpbCkgOiBCYXNlUmVz
dWx0KEZhaWwoKSkge30KKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVy
KSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQcmVSZXN1bHQ6OlByZVJlc3VsdChQcmVSZXN1bHQg
JiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFByZVJlc3VsdDo6b3BlcmF0
b3I9KFByZVJlc3VsdCAmJm90aGVyKQoreworICAgIG1vdmVBc3NpZ25JbXBsKG90aGVyKTsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUG9zdFJlc3VsdCA9IFRJbnRlcm1S
ZWJ1aWxkOjpQb3N0UmVzdWx0OworCitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFRJbnRlcm1Ob2Rl
ICZub2RlKSA6IEJhc2VSZXN1bHQobm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyKSB7fQorUG9zdFJl
c3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZp
c2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQobnVsbHB0cl90KSA6
IEJhc2VSZXN1bHQobnVsbHB0cikge30KK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoRmFpbCkgOiBC
YXNlUmVzdWx0KEZhaWwoKSkge30KKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChQb3N0UmVzdWx0
ICYmb3RoZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQo
QmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CisKK3ZvaWQgUG9zdFJl
c3VsdDo6b3BlcmF0b3I9KFBvc3RSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1w
bChvdGhlcik7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1RJbnRlcm1SZWJ1aWxk
OjpUSW50ZXJtUmVidWlsZChUQ29tcGlsZXIgJmNvbXBpbGVyLCBib29sIHByZVZpc2l0LCBib29s
IHBvc3RWaXNpdCkKKyAgICA6IG1Db21waWxlcihjb21waWxlciksCisgICAgICBtU3ltYm9sVGFi
bGUoY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSksCisgICAgICBtUHJlVmlzaXQocHJlVmlzaXQp
LAorICAgICAgbVBvc3RWaXNpdChwb3N0VmlzaXQpCit7CisgICAgQVNTRVJUKHByZVZpc2l0IHx8
IHBvc3RWaXNpdCk7Cit9CisKK1RJbnRlcm1SZWJ1aWxkOjp+VEludGVybVJlYnVpbGQoKQorewor
ICAgIEFTU0VSVCghbU5vZGVTdGFjay52YWx1ZSk7CisgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnRh
aWwpOworfQorCitjb25zdCBURnVuY3Rpb24gKlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRGdW5j
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QYXJlbnRGdW5jOworfQorCitUSW50ZXJtTm9k
ZSAqVEludGVybVJlYnVpbGQ6OmdldFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobU5vZGVTdGFjay50YWlsKTsKKyAgICBhdXRvIHBhcmVudCA9ICptTm9kZVN0
YWNrLnRhaWw7CisgICAgd2hpbGUgKG9mZnNldCA+IDApCisgICAgeworICAgICAgICAtLW9mZnNl
dDsKKyAgICAgICAgQVNTRVJUKHBhcmVudC50YWlsKTsKKyAgICAgICAgcGFyZW50ID0gKnBhcmVu
dC50YWlsOworICAgIH0KKyAgICByZXR1cm4gcGFyZW50LnZhbHVlOworfQorCitib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkUm9vdChUSW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgaWYgKCFy
ZWJ1aWxkSW5QbGFjZShyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIG1Db21waWxlci52YWxpZGF0ZUFTVCgmcm9vdCk7Cit9CisKK2Jvb2wgVElu
dGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIHJlYnVpbGRJblBsYWNlSW1wbChub2RlKTsKK30KKworYm9vbCBUSW50ZXJtUmVi
dWlsZDo6cmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKQoreworICAgIHJldHVybiBy
ZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJlYnVpbGQ6OnJlYnVp
bGRJblBsYWNlKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkKK3sKKyAgICByZXR1cm4gcmVidWls
ZEluUGxhY2VJbXBsKG5vZGUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wg
VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbChOb2RlICZub2RlKQoreworICAgIGF1
dG8gKm5ld05vZGUgPSB0cmF2ZXJzZUFueUFzPE5vZGU+KG5vZGUpOworICAgIGlmICghbmV3Tm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobmV3Tm9k
ZSAhPSAmbm9kZSkKKyAgICB7CisgICAgICAgICpub2RlLmdldFNlcXVlbmNlKCkgPSBzdGQ6Om1v
dmUoKm5ld05vZGUtPmdldFNlcXVlbmNlKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkKFRJbnRlcm1Ob2RlICZub2Rl
KQoreworICAgIHJldHVybiB0cmF2ZXJzZUFueShub2RlKTsKK30KKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CitOb2RlICpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBQb3N0UmVzdWx0IHJl
c3VsdCh0cmF2ZXJzZUFueShub2RlKSk7CisgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlv
bjo6RmFpbCB8fCAhcmVzdWx0Lm1TaW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgcmV0dXJuIGFzTm9kZTxOb2RlPihyZXN1bHQubVNpbmdsZSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorYm9vbCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VB
bnlBcyhUSW50ZXJtTm9kZSAmbm9kZSwgTm9kZSAqJm91dCkKK3sKKyAgICBQb3N0UmVzdWx0IHJl
c3VsdCh0cmF2ZXJzZUFueShub2RlKSk7CisgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlv
bjo6RmFpbCB8fCByZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFyZXN1bHQubVNpbmdsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBvdXQgPSBhc05vZGU8Tm9k
ZT4ocmVzdWx0Lm1TaW5nbGUpOworICAgIHJldHVybiBvdXQ7Cit9CisKK2Jvb2wgVEludGVybVJl
YnVpbGQ6OnRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dyZWdhdGVCYXNl
ICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGNoaWxkcmVuID0gbm9kZS5nZXRTZXF1ZW5jZSgp
OworICAgIEFTU0VSVChjaGlsZHJlbik7CisgICAgVEludGVybVNlcXVlbmNlIG5ld0NoaWxkcmVu
OworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqY2hpbGQgOiAqY2hpbGRyZW4pCisgICAgeworICAg
ICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJzZUFu
eSgqY2hpbGQpKTsKKworICAgICAgICBzd2l0Y2ggKHJlc3VsdC5tQWN0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6UmVwbGFjZVNpbmdsZToKKyAgICAgICAgICAgICAg
ICBuZXdDaGlsZHJlbi5wdXNoX2JhY2socmVzdWx0Lm1TaW5nbGUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6UmVwbGFjZU11bHRpOgorICAgICAg
ICAgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5ld05vZGUgOiByZXN1bHQubU11bHRpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2hf
YmFjayhuZXdOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OkRyb3A6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpGYWls
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
ICpjaGlsZHJlbiA9IHN0ZDo6bW92ZShuZXdDaGlsZHJlbik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RydWN0IFRJbnRlcm1SZWJ1aWxkOjpO
b2RlU3RhY2tHdWFyZAoreworICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG9sZE5vZGVTdGFj
azsKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrOworICAgIE5vZGVTdGFj
a0d1YXJkKENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+ICZub2RlU3RhY2spCisgICAgICAgIDogb2xk
Tm9kZVN0YWNrKG5vZGVTdGFjayksIG5vZGVTdGFjayhub2RlU3RhY2spCisgICAge30KKyAgICB+
Tm9kZVN0YWNrR3VhcmQoKSB7IG5vZGVTdGFjayA9IG9sZE5vZGVTdGFjazsgfQorfTsKKworUG9z
dFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBbnkoVEludGVybU5vZGUgJm9yaWdpbmFs
Tm9kZSkKK3sKKyAgICBQcmVSZXN1bHQgcHJlUmVzdWx0ID0gdHJhdmVyc2VQcmUob3JpZ2luYWxO
b2RlKTsKKyAgICBpZiAoIXByZVJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHByZVJlc3VsdC5tVmlzaXQgPT0gVmlzaXRCaXRzOjpOZWl0aGVyKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZShwcmVSZXN1bHQpOworICAgIH0KKworICAgIFRJbnRlcm1Ob2RlICpjdXJyTm9k
ZSAgICAgICA9IHByZVJlc3VsdC5tU2luZ2xlOworICAgIGNvbnN0IFZpc2l0Qml0cyB2aXNpdCAg
ICAgICA9IHByZVJlc3VsdC5tVmlzaXQ7CisgICAgY29uc3QgTm9kZVR5cGUgY3Vyck5vZGVUeXBl
ID0gZ2V0Tm9kZVR5cGUoKmN1cnJOb2RlKTsKKworICAgIGN1cnJOb2RlID0gdHJhdmVyc2VDaGls
ZHJlbihjdXJyTm9kZVR5cGUsIG9yaWdpbmFsTm9kZSwgKmN1cnJOb2RlLCB2aXNpdCk7CisgICAg
aWYgKCFjdXJyTm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGYWlsKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRyYXZlcnNlUG9zdChjdXJyTm9kZVR5cGUsIG9yaWdpbmFsTm9kZSwgKmN1cnJO
b2RlLCB2aXNpdCk7Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VQcmUo
VEludGVybU5vZGUgJm9yaWdpbmFsTm9kZSkKK3sKKyAgICBpZiAoIW1QcmVWaXNpdCkKKyAgICB7
CisgICAgICAgIHJldHVybiB7b3JpZ2luYWxOb2RlLCBWaXNpdEJpdHM6OkJvdGh9OworICAgIH0K
KworICAgIE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sg
PSB7Jm9yaWdpbmFsTm9kZSwgJmd1YXJkLm9sZE5vZGVTdGFja307CisKKyAgICBjb25zdCBOb2Rl
VHlwZSBvcmlnaW5hbE5vZGVUeXBlID0gZ2V0Tm9kZVR5cGUob3JpZ2luYWxOb2RlKTsKKworICAg
IHN3aXRjaCAob3JpZ2luYWxOb2RlVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IEZhaWwoKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3ltYm9sOgorICAgICAgICAgICAgcmV0
dXJuIHZpc2l0U3ltYm9sUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpDb25zdGFudFVuaW9uOgorICAgICAgICAgICAgcmV0dXJuIHZp
c2l0Q29uc3RhbnRVbmlvblByZSgqb3JpZ2luYWxOb2RlLmdldEFzQ29uc3RhbnRVbmlvbigpKTsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25Qcm90b3R5cGU6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSgqb3JpZ2luYWxOb2RlLmdldEFzRnVuY3Rp
b25Qcm90b3R5cGVOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpQcmVwcm9jZXNzb3JE
aXJlY3RpdmU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQ
cmUoKm9yaWdpbmFsTm9kZS5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6VW5hcnk6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRVbmFyeVByZSgq
b3JpZ2luYWxOb2RlLmdldEFzVW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpC
aW5hcnk6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRCaW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5n
ZXRBc0JpbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAg
ICAgICAgICByZXR1cm4gdmlzaXRUZXJuYXJ5UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNUZXJuYXJ5
Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFN3aXp6bGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1N3aXp6bGVOb2RlKCkpOwor
ICAgICAgICBjYXNlIE5vZGVUeXBlOjpJZkVsc2U6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRJ
ZkVsc2VQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFN3aXRjaFByZSgqb3Jp
Z2luYWxOb2RlLmdldEFzU3dpdGNoTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q2Fz
ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdENhc2VQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Nh
c2VOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvbkRlZmluaXRpb246Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoKm9yaWdpbmFsTm9k
ZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QWdn
cmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QWdncmVnYXRlUHJlKCpvcmlnaW5hbE5v
ZGUuZ2V0QXNBZ2dyZWdhdGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0QmxvY2tQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Jsb2NrKCkp
OworICAgICAgICBjYXNlIE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKAorICAg
ICAgICAgICAgICAgICpvcmlnaW5hbE5vZGUuZ2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
bk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkRlY2xhcmF0aW9uOgorICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0RlY2xhcmF0
aW9uTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6TG9vcDoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdExvb3BQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0xvb3BOb2RlKCkpOworICAgICAg
ICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRCcmFuY2hQ
cmUoKm9yaWdpbmFsTm9kZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitUSW50ZXJt
Tm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4oTm9kZVR5cGUgY3Vyck5vZGVU
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0cyB2aXNpdCkKK3sKKyAgICBp
ZiAoIUFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6Q2hpbGRyZW4pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBpZiAoQW55Qml0cyh2aXNpdCwgVmlzaXRC
aXRzOjpDaGlsZHJlblJlcXVpcmVzU2FtZSkgJiYgJm9yaWdpbmFsTm9kZSAhPSAmY3Vyck5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAgIH0KKworICAgIE5vZGVTdGFj
a0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sgPSB7JmN1cnJOb2RlLCAm
Z3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5vZGVUeXBlKQorICAgIHsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
U3ltYm9sOgorICAgICAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAgcmV0dXJu
ICZjdXJyTm9kZTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZl
OgorICAgICAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VW5hcnk6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VVbmFyeUNoaWxkcmVuKCpjdXJyTm9k
ZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmluYXJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQmlu
YXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VGVybmFyeToKKyAgICAgICAgICAg
IHJldHVybiB0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNUZXJuYXJ5Tm9k
ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKyAgICAgICAgICAgIHJldHVy
biB0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZl
cnNlSWZFbHNlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlU3dpdGNo
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpdGNoTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6Q2FzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUNhc2VDaGlsZHJlbigqY3Vy
ck5vZGUuZ2V0QXNDYXNlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25E
ZWZpbml0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9u
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpBZ2dyZWdhdGU6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VBZ2dy
ZWdhdGVDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNBZ2dyZWdhdGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OkJsb2NrOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQmxvY2tDaGlsZHJl
bigqY3Vyck5vZGUuZ2V0QXNCbG9jaygpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorICAgICAgICAgICAgICAgICpjdXJyTm9kZS5n
ZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VEZWNsYXJhdGlv
bkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKyAgICAgICAgY2Fz
ZSBOb2RlVHlwZTo6TG9vcDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUxvb3BDaGlsZHJl
bigqY3Vyck5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QnJh
bmNoOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oKmN1cnJOb2Rl
LmdldEFzQnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlUG9zdChOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEludGVybU5vZGUgJm9yaWdpbmFsTm9kZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAmY3Vy
ck5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRz
IHZpc2l0KQoreworICAgIGlmICghbVBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBj
dXJyTm9kZTsKKyAgICB9CisKKyAgICBpZiAoIUFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9z
dCkpCisgICAgeworICAgICAgICByZXR1cm4gY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFu
eUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9zdFJlcXVpcmVzU2FtZSkgJiYgJm9yaWdpbmFsTm9k
ZSAhPSAmY3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gY3Vyck5vZGU7CisgICAgfQor
CisgICAgTm9kZVN0YWNrR3VhcmQgZ3VhcmQobU5vZGVTdGFjayk7CisgICAgbU5vZGVTdGFjayA9
IHsmY3Vyck5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgc3dpdGNoIChjdXJyTm9k
ZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorICAgICAgICAg
ICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBGYWlsKCk7CisgICAgICAgIGNh
c2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFN5bWJvbFBvc3Qo
KmN1cnJOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q29u
c3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25Qb3N0KCpj
dXJyTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1
bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25Qcm90b3R5
cGVQb3N0KCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uUHJvdG90eXBlTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorICAgICAgICAgICAgcmV0dXJu
IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCgqY3Vyck5vZGUuZ2V0QXNQcmVwcm9jZXNz
b3JEaXJlY3RpdmUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0VW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6QmluYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Qmlu
YXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNCaW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpUZXJuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VGVybmFyeVBvc3QoKmN1cnJO
b2RlLmdldEFzVGVybmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6
CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6emxlUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l6
emxlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0SWZFbHNlUG9zdCgqY3Vyck5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0
Y2hQb3N0KCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5
cGU6OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUG9zdCgqY3Vyck5vZGUuZ2V0
QXNDYXNlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9u
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdCgqY3Vyck5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFn
Z3JlZ2F0ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVBvc3QoKmN1cnJOb2Rl
LmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdEJsb2NrUG9zdCgqY3Vyck5vZGUuZ2V0QXNCbG9jaygpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246CisgICAgICAg
ICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoCisgICAgICAg
ICAgICAgICAgKmN1cnJOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkp
OworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdERlY2xhcmF0aW9uUG9zdCgqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRM
b29wUG9zdCgqY3Vyck5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUG9zdCgqY3Vyck5vZGUu
Z2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVu
KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFz
ZUNoaWxkcmVuKG5vZGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUJsb2NrQ2hpbGRyZW4oVEludGVybUJsb2NrICZub2RlKQoreworICAgIGlmICh0cmF2ZXJz
ZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9k
ZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKFRJbnRlcm1EZWNsYXJhdGlvbiAm
bm9kZSkKK3sKKyAgICBpZiAodHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisg
ICAgeworICAgICAgICByZXR1cm4gJm5vZGU7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwor
fQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlU3dpenpsZUNoaWxkcmVu
KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IG9wZXJhbmQgPSBub2Rl
LmdldE9wZXJhbmQoKTsKKyAgICBBU1NFUlQob3BlcmFuZCk7CisKKyAgICBhdXRvICpuZXdPcGVy
YW5kID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpvcGVyYW5kKTsKKyAgICBHVUFSRChu
ZXdPcGVyYW5kKTsKKworICAgIGlmIChuZXdPcGVyYW5kICE9IG9wZXJhbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFRJbnRlcm1Td2l6emxlKG5ld09wZXJhbmQsIG5vZGUuZ2V0U3dpenps
ZU9mZnNldHMoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9k
ZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oVEludGVybUJpbmFyeSAm
bm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBsZWZ0ID0gbm9kZS5nZXRMZWZ0KCk7CisgICAgQVNT
RVJUKGxlZnQpOworICAgIGF1dG8gKmNvbnN0IHJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworICAg
IEFTU0VSVChyaWdodCk7CisKKyAgICBhdXRvICpjb25zdCBuZXdMZWZ0ID0gdHJhdmVyc2VBbnlB
czxUSW50ZXJtVHlwZWQ+KCpsZWZ0KTsKKyAgICBHVUFSRChuZXdMZWZ0KTsKKyAgICBhdXRvICpj
b25zdCBuZXdSaWdodCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqcmlnaHQpOworICAg
IEdVQVJEKG5ld1JpZ2h0KTsKKworICAgIGlmIChuZXdMZWZ0ICE9IGxlZnQgfHwgbmV3UmlnaHQg
IT0gcmlnaHQpCisgICAgeworICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7Cisg
ICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAobmV3TGVmdC0+Z2V0VHlwZSgpLmdldEludGVyZmFjZUJsb2NrKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJ
bnRlcmZhY2VCbG9jazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5ld0xl
ZnQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorICAgICAgICAgICAgICAgIHJldHVybiBUSW50
ZXJtQmluYXJ5OjpDcmVhdGVDb21tYShuZXdMZWZ0LCBuZXdSaWdodCwgbUNvbXBpbGVyLmdldFNo
YWRlclZlcnNpb24oKSk7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkob3As
IG5ld0xlZnQsIG5ld1JpZ2h0KTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJ
bnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKFRJbnRlcm1V
bmFyeSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9kZS5nZXRPcGVyYW5k
KCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqY29uc3QgbmV3T3BlcmFuZCA9
IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQobmV3T3Bl
cmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtVW5hcnkobm9kZS5nZXRPcCgpLCBuZXdPcGVyYW5kLCBub2RlLmdl
dEZ1bmN0aW9uKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbihUSW50ZXJtVGVybmFy
eSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsK
KyAgICBBU1NFUlQoY29uZCk7CisgICAgYXV0byAqY29uc3QgdHJ1ZV8gPSBub2RlLmdldFRydWVF
eHByZXNzaW9uKCk7CisgICAgQVNTRVJUKHRydWVfKTsKKyAgICBhdXRvICpjb25zdCBmYWxzZV8g
PSBub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpOworICAgIEFTU0VSVChmYWxzZV8pOworCisgICAg
YXV0byAqY29uc3QgbmV3Q29uZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7
CisgICAgR1VBUkQobmV3Q29uZCk7CisgICAgYXV0byAqY29uc3QgbmV3VHJ1ZSA9IHRyYXZlcnNl
QW55QXM8VEludGVybVR5cGVkPigqdHJ1ZV8pOworICAgIEdVQVJEKG5ld1RydWUpOworICAgIGF1
dG8gKmNvbnN0IG5ld0ZhbHNlID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpmYWxzZV8p
OworICAgIEdVQVJEKG5ld0ZhbHNlKTsKKworICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3
VHJ1ZSAhPSB0cnVlXyB8fCBuZXdGYWxzZSAhPSBmYWxzZV8pCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFRJbnRlcm1UZXJuYXJ5KG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VJZkVsc2VDaGlsZHJlbihUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIGF1dG8g
KmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIEFTU0VSVChjb25kKTsKKyAg
ICBhdXRvICpjb25zdCB0cnVlXyAgPSBub2RlLmdldFRydWVCbG9jaygpOworICAgIGF1dG8gKmNv
bnN0IGZhbHNlXyA9IG5vZGUuZ2V0RmFsc2VCbG9jaygpOworCisgICAgYXV0byAqY29uc3QgbmV3
Q29uZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7CisgICAgR1VBUkQobmV3
Q29uZCk7CisgICAgVEludGVybUJsb2NrICpuZXdUcnVlID0gbnVsbHB0cjsKKyAgICBpZiAodHJ1
ZV8pCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCp0cnVlXywgbmV3VHJ1ZSkp
OworICAgIH0KKyAgICBUSW50ZXJtQmxvY2sgKm5ld0ZhbHNlID0gbnVsbHB0cjsKKyAgICBpZiAo
ZmFsc2VfKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZmFsc2VfLCBuZXdG
YWxzZSkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3VHJ1ZSAhPSB0
cnVlXyB8fCBuZXdGYWxzZSAhPSBmYWxzZV8pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRJ
bnRlcm1JZkVsc2UobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworICAgIH0KKworICAgIHJl
dHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3
aXRjaENoaWxkcmVuKFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgaW5p
dCA9IG5vZGUuZ2V0SW5pdCgpOworICAgIEFTU0VSVChpbml0KTsKKyAgICBhdXRvICpjb25zdCBz
dG10cyA9IG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpOworICAgIEFTU0VSVChzdG10cyk7CisKKyAg
ICBhdXRvICpjb25zdCBuZXdJbml0ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCppbml0
KTsKKyAgICBHVUFSRChuZXdJbml0KTsKKyAgICBhdXRvICpjb25zdCBuZXdTdG10cyA9IHRyYXZl
cnNlQW55QXM8VEludGVybUJsb2NrPigqc3RtdHMpOworICAgIEdVQVJEKG5ld1N0bXRzKTsKKwor
ICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3U3RtdHMgIT0gc3RtdHMpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFRJbnRlcm1Td2l0Y2gobmV3SW5pdCwgbmV3U3RtdHMpOworICAgIH0K
KworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0
cmF2ZXJzZUNhc2VDaGlsZHJlbihUSW50ZXJtQ2FzZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25z
dCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKworICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29u
ZCA9IG51bGxwdHI7CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJz
ZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisgICAgfQorCisgICAgaWYgKG5ld0NvbmQgIT0gY29u
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUNhc2UobmV3Q29uZCk7CisgICAg
fQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVmaW5p
dGlvbiAmbm9kZSkKK3sKKyAgICBHVUFSRCghbVBhcmVudEZ1bmMpOyAgLy8gRnVuY3Rpb24gZGVm
aW5pdGlvbnMgY2Fubm90IGJlIG5lc3RlZC4KKyAgICBtUGFyZW50RnVuYyA9IG5vZGUuZ2V0RnVu
Y3Rpb24oKTsKKyAgICBzdHJ1Y3QgT25FeGl0CisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rp
b24gKiZwYXJlbnRGdW5jOworICAgICAgICBPbkV4aXQoY29uc3QgVEZ1bmN0aW9uIComcGFyZW50
RnVuYykgOiBwYXJlbnRGdW5jKHBhcmVudEZ1bmMpIHt9CisgICAgICAgIH5PbkV4aXQoKSB7IHBh
cmVudEZ1bmMgPSBudWxscHRyOyB9CisgICAgfSBvbkV4aXQobVBhcmVudEZ1bmMpOworCisgICAg
YXV0byAqY29uc3QgcHJvdG8gPSBub2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgQVNT
RVJUKHByb3RvKTsKKyAgICBhdXRvICpjb25zdCBib2R5ID0gbm9kZS5nZXRCb2R5KCk7CisgICAg
QVNTRVJUKGJvZHkpOworCisgICAgYXV0byAqY29uc3QgbmV3UHJvdG8gPSB0cmF2ZXJzZUFueUFz
PFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZT4oKnByb3RvKTsKKyAgICBHVUFSRChuZXdQcm90byk7
CisgICAgYXV0byAqY29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigq
Ym9keSk7CisgICAgR1VBUkQobmV3Qm9keSk7CisKKyAgICBpZiAobmV3UHJvdG8gIT0gcHJvdG8g
fHwgbmV3Qm9keSAhPSBib2R5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uKG5ld1Byb3RvLCBuZXdCb2R5KTsKKyAgICB9CisKKyAgICByZXR1cm4g
Jm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJE
ZWNsYXJhdGlvbiAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBzeW1ib2wgPSBub2RlLmdldFN5
bWJvbCgpOworICAgIEFTU0VSVChzeW1ib2wpOworCisgICAgYXV0byAqY29uc3QgbmV3U3ltYm9s
ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtU3ltYm9sPigqc3ltYm9sKTsKKyAgICBHVUFSRChuZXdT
eW1ib2wpOworCisgICAgaWYgKG5ld1N5bWJvbCAhPSBzeW1ib2wpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihuZXdTeW1ib2wsIG5v
ZGUuaXNQcmVjaXNlKCksIG5vZGUuZ2V0TGluZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5v
ZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VMb29wQ2hpbGRy
ZW4oVEludGVybUxvb3AgJm5vZGUpCit7CisgICAgY29uc3QgVExvb3BUeXBlIGxvb3BUeXBlID0g
bm9kZS5nZXRUeXBlKCk7CisKKyAgICBhdXRvICpjb25zdCBpbml0ID0gbm9kZS5nZXRJbml0KCk7
CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisgICAgYXV0byAq
Y29uc3QgZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgIGF1dG8gKmNvbnN0IGJvZHkg
PSBub2RlLmdldEJvZHkoKTsKKyAgICBBU1NFUlQoYm9keSk7CisKKyNpZiBkZWZpbmVkKEFOR0xF
X0VOQUJMRV9BU1NFUlRTKQorICAgIHN3aXRjaCAobG9vcFR5cGUpCisgICAgeworICAgICAgICBj
YXNlIFRMb29wVHlwZTo6RUxvb3BGb3I6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERv
V2hpbGU6CisgICAgICAgICAgICBBU1NFUlQoY29uZCk7CisgICAgICAgICAgICBBU1NFUlQoIWlu
aXQgJiYgIWV4cHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICBh
dXRvICpjb25zdCBuZXdCb2R5ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtQmxvY2s+KCpib2R5KTsK
KyAgICBHVUFSRChuZXdCb2R5KTsKKyAgICBUSW50ZXJtTm9kZSAqbmV3SW5pdCA9IG51bGxwdHI7
CisgICAgaWYgKGluaXQpCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCppbml0
LCBuZXdJbml0KSk7CisgICAgfQorICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IG51bGxwdHI7
CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpjb25k
LCBuZXdDb25kKSk7CisgICAgfQorICAgIFRJbnRlcm1UeXBlZCAqbmV3RXhwciA9IG51bGxwdHI7
CisgICAgaWYgKGV4cHIpCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpleHBy
LCBuZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0luaXQgIT0gaW5pdCB8fCBuZXdDb25k
ICE9IGNvbmQgfHwgbmV3RXhwciAhPSBleHByIHx8IG5ld0JvZHkgIT0gYm9keSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobG9vcFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVExv
b3BUeXBlOjpFTG9vcEZvcjoKKyAgICAgICAgICAgICAgICBHVUFSRChuZXdCb2R5KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcFdoaWxl
OgorICAgICAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAgICAgICAg
ICAgICBHVUFSRChuZXdDb25kICYmIG5ld0JvZHkpOworICAgICAgICAgICAgICAgIEdVQVJEKCFu
ZXdJbml0ICYmICFuZXdFeHByKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1Mb29wKGxvb3BUeXBlLCBuZXdJbml0LCBuZXdDb25k
LCBuZXdFeHByLCBuZXdCb2R5KTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJ
bnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbihUSW50ZXJt
QnJhbmNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGV4cHIgPSBub2RlLmdldEV4cHJlc3Np
b24oKTsKKworICAgIFRJbnRlcm1UeXBlZCAqbmV3RXhwciA9IG51bGxwdHI7CisgICAgaWYgKGV4
cHIpCisgICAgeworICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmV4
cHIsIG5ld0V4cHIpKTsKKyAgICB9CisKKyAgICBpZiAobmV3RXhwciAhPSBleHByKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4
cHIpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN5bWJvbFByZShUSW50ZXJt
U3ltYm9sICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30K
KworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25QcmUoVEludGVy
bUNvbnN0YW50VW5pb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJv
dGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5
cGVQcmUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKQoreworICAgIHJldHVybiB7bm9k
ZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZVByZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZu
b2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UHJlKFRJbnRlcm1VbmFyeSAmbm9kZSkKK3sK
KyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRUZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKQoreworICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxk
Ojp2aXNpdFN3aXp6bGVQcmUoVEludGVybVN3aXp6bGUgJm5vZGUpCit7CisgICAgcmV0dXJuIHtu
b2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZp
c2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3dp
dGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJp
dHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZShU
SW50ZXJtQ2FzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07
Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUHJlKFRJbnRlcm1Mb29w
ICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJl
UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEJyYW5jaFByZShUSW50ZXJtQnJhbmNoICZub2Rl
KQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0
IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAm
bm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpCit7
CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7
CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9Owor
fQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb25QcmUoCisgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQb3N0
KFRJbnRlcm1TeW1ib2wgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50
VW5pb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJt
UmVidWlsZDo6dmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNz
b3JEaXJlY3RpdmUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCaW5h
cnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkg
Jm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6bGUgJm5vZGUpCit7CisgICAgcmV0dXJu
IG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0SWZFbHNlUG9zdChU
SW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0
IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSkKK3sK
KyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRD
YXNlUG9zdChUSW50ZXJtQ2FzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9z
dFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdChUSW50ZXJtTG9vcCAmbm9kZSkK
K3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9
CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRl
cm1EZWNsYXJhdGlvbiAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1Bvc3QoVEludGVybUJsb2NrICZub2RlKQorewor
ICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFn
Z3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsK
K30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRGdW5jdGlvbkRlZmluaXRpb25Q
b3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb25Qb3N0KAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9k
ZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtUmVidWlsZC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDk3
ZTQwZTM1NTRiNmMwOWY2NmRjY2VjZDliYTE1ZTM0NGY1MmE3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVJlYnVpbGQuaApAQCAtMCwwICsxLDMyOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTVJFQlVJTERfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgiCisKK25hbWVzcGFjZSBz
aAoreworCisvLyBXYWxrcyB0aGUgdHJlZSB0byByZWJ1aWxkIG5vZGVzLgorLy8gVGhpcyBjbGFz
cyBpcyBpbnRlbmRlZCB0byBiZSBkZXJpdmVkIHdpdGggb3ZlcnJpZGRlbiB2aXNpdFhYWCBmdW5j
dGlvbnMuCisvLworLy8gRWFjaCB2aXNpdFhYWCBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUg
YSBWaXNpdCBwYXJhbWV0ZXIgc2ltcGx5IGhhcyB0aGUgdmlzaXRvciBjYWxsZWQKKy8vIGV4YWN0
bHkgb25jZSwgcmVnYXJkbGVzcyBvZiAocHJlVmlzaXQpIG9yIChwb3N0VmlzaXQpIHZhbHVlcy4K
KworLy8gRWFjaCB2aXNpdFhYWCBmdW5jdGlvbiB0aGF0IGhhcyBhIFZpc2l0IHBhcmFtZXRlciBi
ZWhhdmVzIGFzIGZvbGxvd3M6CisvLyAgICAqIElmIChwcmVWaXNpdCk6CisvLyAgICAgIC0gVGhl
IG5vZGUgaXMgdmlzaXRlZCBiZWZvcmUgY2hpbGRyZW4gYXJlIHRyYXZlcnNlZC4KKy8vICAgICAg
LSBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgdXNlZCB0byByZXBsYWNlIHRoZSB2aXNpdGVkIG5vZGUu
IFRoZSByZXR1cm5lZCB2YWx1ZSBtYXkgYmUgdGhlIHNhbWUKKy8vICAgICAgICBhcyB0aGUgb3Jp
Z2luYWwgbm9kZS4KKy8vICAgICAgLSBJZiBtdWx0aXBsZSBub2RlcyBhcmUgcmV0dXJuZWQsIGNo
aWxkcmVuIGFuZCBwb3N0IHZpc2l0cyBvZiB0aGUgcmV0dXJuZWQgbm9kZXMgYXJlIG5vdAorLy8g
ICAgICAgIHByZWZvcm1lZCwgZXZlbiBpZiBpdCBpcyBhIHNpbmdsZXRvbiBjb2xsZWN0aW9uLgor
Ly8gICAgKiBJZiAoY2hpbGRWaXNpdCkKKy8vICAgICAgLSBJZiBhbnkgbmV3IGNoaWxkcmVuIGFy
ZSByZXR1cm5lZCwgdGhlIG5vZGUgaXMgYXV0b21hdGljYWxseSByZWJ1aWx0IHdpdGggdGhlIG5l
dyBjaGlsZHJlbgorLy8gICAgICAgIGJlZm9yZSBwb3N0IHZpc2l0LgorLy8gICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgbm9kZSwgbnVsbCBjaGlsZHJlbiBtYXkgYmUgZGlzY2Fy
ZGVkLgorLy8gICAgICAtIElsbC10eXBlZCBjaGlsZHJlbiBjYXVzZSByZWJ1aWxkIGVycm9ycy4g
SWxsLXR5cGVkIG1lYW5zIHRoZSBub2RlIHRvIGF1dG9tYXRpY2FsbHkgcmVidWlsZAorLy8gICAg
ICAgIGNhbm5vdCBhY2NlcHQgYSBjaGlsZCBvZiBhIGNlcnRhaW4gdHlwZSBhcyBpbnB1dCB0byBp
dHMgY29uc3RydWN0b3IuCisvLyAgICAgIC0gT25seSBpbnN0YW5jZXMgb2YgVEludGVybUFnZ3Jl
Z2F0ZUJhc2UgY2FuIGFjY2VwdCBNdWx0aSByZXN1bHRzIGZvciBhbnkgb2YgaXRzIGNoaWxkcmVu
LgorLy8gICAgICAgIElmIHN1cHBsaWVkLCB0aGUgbm9kZXMgYXJlIHNwbGljZWQgY2hpbGRyZW4g
YXQgdGhlIHNwb3Qgb2YgdGhlIG9yaWdpbmFsIGNoaWxkLgorLy8gICAgKiBJZiAocG9zdFZpc2l0
KQorLy8gICAgICAtIFRoZSBub2RlIGlzIHZpc2l0ZWQgYWZ0ZXIgYW55IGNoaWxkcmVuIGFyZSB0
cmF2ZXJzZWQuCisvLyAgICAgIC0gT25seSBhZnRlciBzdWNoIGEgcmVidWlsZCAob3IgbGFjayB0
aGVyZW9mKSwgdGhlIHBvc3QtdmlzaXQgaXMgcGVyZm9ybWVkLgorLy8KKy8vIE5vZGVzIGluIHZp
c2l0IGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSBtb2RpZmllZCBpbiBwbGFjZSwgaW5jbHVk
aW5nIFRJbnRlcm1BZ2dyZWdhdGVCYXNlCisvLyBjaGlsZCBzZXF1ZW5jZXMuCisvLworLy8gVGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIGFsbCB0aGUgdmlzaXRYWFggZnVuY3Rpb25zIHN1
cHBvcnQgZnVsbCBwcmUgYW5kIHBvc3QgdHJhdmVyc2FsCisvLyB3aXRob3V0IG1vZGlmeWluZyB0
aGUgdmlzaXRlZCBub2Rlcy4KKy8vCitjbGFzcyBUSW50ZXJtUmVidWlsZCA6IGFuZ2xlOjpOb25D
b3B5YWJsZQoreworCisgICAgZW51bSBjbGFzcyBBY3Rpb24KKyAgICB7CisgICAgICAgIFJlcGxh
Y2VTaW5nbGUsCisgICAgICAgIFJlcGxhY2VNdWx0aSwKKyAgICAgICAgRHJvcCwKKyAgICAgICAg
RmFpbCwKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBzdHJ1Y3QgRmFpbAorICAgIHt9OworCisg
ICAgZW51bSBWaXNpdEJpdHMgOiBzaXplX3QKKyAgICB7CisgICAgICAgIC8vIE5vIGJpdHMgYXJl
IHNldC4KKyAgICAgICAgRW1wdHkgPSAwdSwKKworICAgICAgICAvLyBBbGxvdyB2aXNpdCBvZiBy
ZXR1cm5lZCBub2RlJ3MgY2hpbGRyZW4uCisgICAgICAgIENoaWxkcmVuID0gMXUgPDwgMHUsCisK
KyAgICAgICAgLy8gQWxsb3cgcG9zdCB2aXNpdCBvZiByZXR1cm5lZCBub2RlLgorICAgICAgICBQ
b3N0ID0gMXUgPDwgMXUsCisKKyAgICAgICAgLy8gSWYgKENoaWxkcmVuKSBiaXQsIG9ubHkgdmlz
aXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIG5vZGUu
CisgICAgICAgIENoaWxkcmVuUmVxdWlyZXNTYW1lID0gMXUgPDwgMnUsCisKKyAgICAgICAgLy8g
SWYgKFBvc3QpIGJpdCwgb25seSB2aXNpdCBpZiB0aGUgcmV0dXJuZWQgbm9kZSBpcyB0aGUgc2Ft
ZSBhcyB0aGUgb3JpZ2luYWwgbm9kZS4KKyAgICAgICAgUG9zdFJlcXVpcmVzU2FtZSA9IDF1IDw8
IDN1LAorCisgICAgICAgIFJlcXVpcmVTYW1lICA9IENoaWxkcmVuUmVxdWlyZXNTYW1lIHwgUG9z
dFJlcXVpcmVzU2FtZSwKKyAgICAgICAgTmVpdGhlciAgICAgID0gRW1wdHksCisgICAgICAgIEJv
dGggICAgICAgICA9IENoaWxkcmVuIHwgUG9zdCwKKyAgICAgICAgQm90aFdoZW5TYW1lID0gQm90
aCB8IFJlcXVpcmVTYW1lLAorICAgIH07CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTm9kZVN0
YWNrR3VhcmQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgQ29uc0xp
c3QKKyAgICB7CisgICAgICAgIFQgdmFsdWU7CisgICAgICAgIENvbnNMaXN0PFQ+ICp0YWlsOwor
ICAgIH07CisKKyAgICBjbGFzcyBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBCYXNlUmVzdWx0
KGNvbnN0IEJhc2VSZXN1bHQgJikgPSBkZWxldGU7CisgICAgICAgIEJhc2VSZXN1bHQgJm9wZXJh
dG9yPShjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworCisgICAgICBwdWJsaWM6CisgICAg
ICAgIEJhc2VSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA9IGRlZmF1bHQ7CisgICAgICAgIEJh
c2VSZXN1bHQoQmFzZVJlc3VsdCAmb3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1vdmUgY29uc3Ry
dWN0b3IgaW1wbHMKKyAgICAgICAgQmFzZVJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRC
aXRzIHZpc2l0KTsKKyAgICAgICAgQmFzZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRC
aXRzIHZpc2l0KTsKKyAgICAgICAgQmFzZVJlc3VsdChudWxscHRyX3QpOworICAgICAgICBCYXNl
UmVzdWx0KEZhaWwpOworICAgICAgICBCYXNlUmVzdWx0KHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2Rl
ICo+ICYmbm9kZXMpOworCisgICAgICAgIHZvaWQgbW92ZUFzc2lnbkltcGwoQmFzZVJlc3VsdCAm
b3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1vdmUgYXNzaWduIGltcGxzCisKKyAgICAgICAgc3Rh
dGljIEJhc2VSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2Rlcyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBCYXNl
UmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbm9kZXM7CisgICAgICAgICAg
ICBmb3IgKEl0ZXIgbm9kZXNDdXJyID0gbm9kZXNCZWdpbjsgbm9kZXNDdXJyICE9IG5vZGVzRW5k
OyArK25vZGVzQ3VycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub2Rlcy5wdXNo
X2JhY2soKm5vZGVzQ3Vycik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlKG5vZGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNGYWlsKCkgY29uc3Q7
CisgICAgICAgIGJvb2wgaXNEcm9wKCkgY29uc3Q7CisgICAgICAgIFRJbnRlcm1Ob2RlICpzaW5n
bGUoKSBjb25zdDsKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gKm11
bHRpKCkgY29uc3Q7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgQWN0aW9uIG1BY3Rpb247Cisg
ICAgICAgIFZpc2l0Qml0cyBtVmlzaXQ7CisgICAgICAgIFRJbnRlcm1Ob2RlICptU2luZ2xlOwor
ICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBtTXVsdGk7CisgICAgfTsKKworICBw
dWJsaWM6CisgICAgY2xhc3MgUHJlUmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgewor
ICAgICAgICBmcmllbmQgY2xhc3MgVEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAg
ICAgICAgUHJlUmVzdWx0KFByZVJlc3VsdCAmJm90aGVyKTsKKyAgICAgICAgUHJlUmVzdWx0KFRJ
bnRlcm1Ob2RlICZub2RlLCBWaXNpdEJpdHMgdmlzaXQgPSBWaXNpdEJpdHM6OkJvdGhXaGVuU2Ft
ZSk7CisgICAgICAgIFByZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0
ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNhbWUpOworICAgICAgICBQcmVSZXN1bHQobnVsbHB0cl90
KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUuCisgICAgICAgIFByZVJlc3VsdChGYWlsKTsgICAg
ICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAgICB2b2lkIG9wZXJhdG9yPShQ
cmVSZXN1bHQgJiZvdGhlcik7CisKKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShzdGQ6
OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkoc3RkOjptb3ZlKG5vZGVzKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KKyAgICAgICAgc3RhdGljIFByZVJlc3Vs
dCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rlc0JlZ2luLCBub2Rlc0VuZCk7Cisg
ICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0Ojppc0Ryb3A7CisgICAgICAgIHVz
aW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6bXVsdGk7
CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsKKworICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgUHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcik7CisgICAgfTsKKworICAgIGNsYXNz
IFBvc3RSZXN1bHQgOiBwcml2YXRlIEJhc2VSZXN1bHQKKyAgICB7CisgICAgICAgIGZyaWVuZCBj
bGFzcyBUSW50ZXJtUmVidWlsZDsKKworICAgICAgcHVibGljOgorICAgICAgICBQb3N0UmVzdWx0
KFBvc3RSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFBvc3RSZXN1bHQoVEludGVybU5vZGUgJm5v
ZGUpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICAgICAgUG9z
dFJlc3VsdChudWxscHRyX3QpOyAgLy8gVXNlZCB0byBkcm9wIGEgbm9kZQorICAgICAgICBQb3N0
UmVzdWx0KEZhaWwpOyAgICAgICAvLyBVc2VkIHRvIHNpZ25hbCBmYWlsdXJlLgorCisgICAgICAg
IHZvaWQgb3BlcmF0b3I9KFBvc3RSZXN1bHQgJiZvdGhlcik7CisKKyAgICAgICAgc3RhdGljIFBv
c3RSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2Rl
cykpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAg
ICAgIHN0YXRpYyBQb3N0UmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0Vu
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKG5vZGVz
QmVnaW4sIG5vZGVzRW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6
OmlzRHJvcDsKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNGYWlsOworICAgICAgICB1c2lu
ZyBCYXNlUmVzdWx0OjptdWx0aTsKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6c2luZ2xlOwor
CisgICAgICBwcml2YXRlOgorICAgICAgICBQb3N0UmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcik7
CisgICAgfTsKKworICBwdWJsaWM6CisgICAgVEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21w
aWxlciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0VmlzaXQpOworCisgICAgdmlydHVhbCB+VElu
dGVybVJlYnVpbGQoKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IHRo
ZSBwcm92aWRlZCByb290LiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkIGZvciB0aGUK
KyAgICAvLyByb290LCB0aGUgcm9vdCBub2RlJ3MgY2hpbGRyZW4gYmVjb21lIHRoYXQgb2YgdGhl
IG5ldyBub2RlIGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZQorICAgIC8vIG9jY3Vy
cmVkLgorICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkUm9vdChUSW50ZXJtQmxvY2sg
JnJvb3QpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN5bWJv
bFByZShUSW50ZXJtU3ltYm9sICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENv
bnN0YW50VW5pb25QcmUoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpOworICAgIHZpcnR1YWwg
UHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9uUHJvdG90
eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFByZXByb2Nlc3NvckRpcmVj
dGl2ZVByZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKTsKKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdFVuYXJ5UHJlKFRJbnRlcm1VbmFyeSAmbm9kZSk7CisgICAgdmlydHVh
bCBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmly
dHVhbCBQcmVSZXN1bHQgdmlzaXRUZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXp6bGVQcmUoVEludGVybVN3aXp6bGUgJm5vZGUp
OworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5v
ZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2gg
Jm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0Q2FzZVByZShUSW50ZXJtQ2FzZSAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRMb29wUHJlKFRJbnRlcm1Mb29wICZu
b2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEJyYW5jaFByZShUSW50ZXJtQnJhbmNo
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRl
cm1EZWNsYXJhdGlvbiAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCbG9ja1By
ZShUSW50ZXJtQmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QWdncmVn
YXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUp
OworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Q
cmUoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmbm9kZSk7CisgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50
VW5pb24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9z
dFJlc3VsdCB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoVEludGVybVByZXByb2Nlc3Nv
ckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0VW5hcnlQb3N0
KFRJbnRlcm1VbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0QmluYXJ5
UG9zdChUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRU
ZXJuYXJ5UG9zdChUSW50ZXJtVGVybmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0
IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6bGUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9z
dFJlc3VsdCB2aXNpdElmRWxzZVBvc3QoVEludGVybUlmRWxzZSAmbm9kZSk7CisgICAgdmlydHVh
bCBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKTsKKyAgICB2
aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRDYXNlUG9zdChUSW50ZXJtQ2FzZSAmbm9kZSk7CisgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJyYW5jaFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSk7
CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRlcm1EZWNs
YXJhdGlvbiAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0QmxvY2tQb3N0KFRJ
bnRlcm1CbG9jayAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRl
UG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUp
OworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UG9zdChUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpOworCisgICAgLy8g
Q2FuIGJlIHVzZWQgdG8gcmVidWlsZCBhIHNwZWNpZmljIG5vZGUgZHVyaW5nIGEgdHJhdmVyc2Fs
LiBVc2VmdWwgZm9yIGZpbmUgY29udHJvbCBvZgorICAgIC8vIHJlYnVpbGRpbmcgYSBub2RlJ3Mg
Y2hpbGRyZW4uCisgICAgQU5HTEVfTk9fRElTQ0FSRCBQb3N0UmVzdWx0IHJlYnVpbGQoVEludGVy
bU5vZGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxh
Y2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxk
cmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5ldyBub2RlIGluc3RlYWQuIFJldHVybnMg
ZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVi
dWlsZEluUGxhY2UoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisKKyAgICAvLyBSZWJ1aWxkcyB0
aGUgcHJvdmlkZWQgbm9kZSBpbiBwbGFjZS4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5l
ZCwgdGhlIG9sZCBub2RlJ3MgY2hpbGRyZW4KKyAgICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3
IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3VycmVkLgorICAgIEFO
R0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkSW5QbGFjZShUSW50ZXJtQmxvY2sgJm5vZGUpOwor
CisgICAgLy8gUmVidWlsZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5v
ZGUgd291bGQgYmUgcmV0dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVj
b21lIHRoYXQgb2YgdGhlIG5ldyBub2RlIGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVy
ZSBvY2N1cnJlZC4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVElu
dGVybURlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8vIElmIGN1cnJlbnRseSBhdCBvciBiZWxv
dyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGJvZHksIHRoaXMgcmV0dXJucyB0aGUgZnVuY3Rpb24g
dGhhdCBlbmNsb3NlcworICAgIC8vIHRoZSBjdXJyZW50bHkgdmlzaXRlZCBub2RlLiAoVGhpcyBy
ZXR1cm5zIG51bGwgaWYgYXQgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBub2RlLikKKyAgICBjb25z
dCBURnVuY3Rpb24gKmdldFBhcmVudEZ1bmN0aW9uKCkgY29uc3Q7CisKKyAgICBUSW50ZXJtTm9k
ZSAqZ2V0UGFyZW50Tm9kZShzaXplX3Qgb2Zmc2V0ID0gMCkgY29uc3Q7CisKKyAgcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wg
cmVidWlsZEluUGxhY2VJbXBsKE5vZGUgJm5vZGUpOworCisgICAgUG9zdFJlc3VsdCB0cmF2ZXJz
ZUFueShUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4K
KyAgICBOb2RlICp0cmF2ZXJzZUFueUFzKFRJbnRlcm1Ob2RlICZub2RlKTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBOb2RlPgorICAgIGJvb2wgdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAm
bm9kZSwgTm9kZSAqJm91dCk7CisKKyAgICBQcmVSZXN1bHQgdHJhdmVyc2VQcmUoVEludGVybU5v
ZGUgJm9yaWdpbmFsTm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2hpbGRyZW4oTm9k
ZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpc2l0Qml0cyB2aXNpdCk7CisgICAgUG9zdFJlc3VsdCB0cmF2ZXJzZVBvc3Qo
Tm9kZVR5cGUgbm9kZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElu
dGVybU5vZGUgJm9yaWdpbmFsTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtTm9kZSAmY3Vyck5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRz
IHZpc2l0KTsKKworICAgIGJvb2wgdHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4oVEludGVy
bUFnZ3JlZ2F0ZUJhc2UgJm5vZGUpOworCisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlVW5hcnlD
aGlsZHJlbihUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJp
bmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2
ZXJzZVRlcm5hcnlDaGlsZHJlbihUSW50ZXJtVGVybmFyeSAmbm9kZSk7CisgICAgVEludGVybU5v
ZGUgKnRyYXZlcnNlU3dpenpsZUNoaWxkcmVuKFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICBU
SW50ZXJtTm9kZSAqdHJhdmVyc2VJZkVsc2VDaGlsZHJlbihUSW50ZXJtSWZFbHNlICZub2RlKTsK
KyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VTd2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZu
b2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2Ug
Jm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUxvb3BDaGlsZHJlbihUSW50ZXJtTG9v
cCAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVy
bUJyYW5jaCAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlRGVjbGFyYXRpb25DaGls
ZHJlbihUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJz
ZUJsb2NrQ2hpbGRyZW4oVEludGVybUJsb2NrICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJh
dmVyc2VBZ2dyZWdhdGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICBUSW50
ZXJtTm9kZSAqdHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbihUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VHbG9iYWxRdWFs
aWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb24gJm5vZGUpOworCisgIHByb3RlY3RlZDoKKyAgICBUQ29tcGlsZXIgJm1Db21w
aWxlcjsKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKyAgICBjb25zdCBURnVuY3Rp
b24gKm1QYXJlbnRGdW5jID0gbnVsbHB0cjsKKyAgICBHZXROb2RlVHlwZSBnZXROb2RlVHlwZTsK
KworICBwcml2YXRlOgorICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG1Ob2RlU3RhY2t7bnVs
bHB0ciwgbnVsbHB0cn07CisgICAgYm9vbCBtUHJlVmlzaXQ7CisgICAgYm9vbCBtUG9zdFZpc2l0
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9Ob2RlVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1OWU1YWYyZDVhYWNjYjVjYjkwZTI0MmQ1MGRmODRl
ZmUwOWNjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUuaApAQCAtMCwwICsxLDE1NSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVU
WVBFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNl
LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIE5vZGVUeXBlCit7CisgICAgVW5r
bm93biwKKyAgICBTeW1ib2wsCisgICAgQ29uc3RhbnRVbmlvbiwKKyAgICBGdW5jdGlvblByb3Rv
dHlwZSwKKyAgICBQcmVwcm9jZXNzb3JEaXJlY3RpdmUsCisgICAgVW5hcnksCisgICAgQmluYXJ5
LAorICAgIFRlcm5hcnksCisgICAgU3dpenpsZSwKKyAgICBJZkVsc2UsCisgICAgU3dpdGNoLAor
ICAgIENhc2UsCisgICAgRnVuY3Rpb25EZWZpbml0aW9uLAorICAgIEFnZ3JlZ2F0ZSwKKyAgICBC
bG9jaywKKyAgICBHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiwKKyAgICBEZWNsYXJhdGlvbiwK
KyAgICBMb29wLAorICAgIEJyYW5jaCwKK307CisKKy8vIFRoaXMgaXMgYSBmdW5jdGlvbiBsaWtl
IG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gdGhhdCBzdGFjayBhbGxvY2F0ZXMgdGhpcyBi
ZWNhdXNlCisvLyBUSW50ZXJtVHJhdmVyc2VyIGlzIGEgaGVhdnkgb2JqZWN0IHRvIGNvbnN0cnVj
dC4KK2NsYXNzIEdldE5vZGVUeXBlIDogcHJpdmF0ZSBUSW50ZXJtVHJhdmVyc2VyCit7CisgICAg
Tm9kZVR5cGUgbm9kZVR5cGU7CisKKyAgcHVibGljOgorICAgIEdldE5vZGVUeXBlKCkgOiBUSW50
ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIE5vZGVUeXBlIG9wZXJh
dG9yKCkoVEludGVybU5vZGUgJm5vZGUpCisgICAgeworICAgICAgICBub2RlLnZpc2l0KFZpc2l0
OjpQcmVWaXNpdCwgdGhpcyk7CisgICAgICAgIHJldHVybiBub2RlVHlwZTsKKyAgICB9CisKKyAg
cHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGUg
eyBub2RlVHlwZSA9IE5vZGVUeXBlOjpTeW1ib2w7IH0KKworICAgIHZvaWQgdmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2Rl
VHlwZTo6Q29uc3RhbnRVbmlvbjsgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBl
KFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9k
ZVR5cGUgPSBOb2RlVHlwZTo6RnVuY3Rpb25Qcm90b3R5cGU7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICop
IG92ZXJyaWRlCisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpQcmVwcm9jZXNz
b3JEaXJlY3RpdmU7CisgICAgfQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRl
cm1Td2l6emxlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBl
OjpTd2l6emxlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bm9kZVR5cGUgPSBOb2RlVHlwZTo6QmluYXJ5OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlVuYXJ5OworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQsIFRJbnRlcm1U
ZXJuYXJ5ICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpU
ZXJuYXJ5OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdElm
RWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9k
ZVR5cGUgPSBOb2RlVHlwZTo6SWZFbHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3dpdGNoOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1DYXNl
ICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpDYXNlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVm
aW5pdGlvbihWaXNpdCwgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUg
PSBOb2RlVHlwZTo6QWdncmVnYXRlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkJsb2NrOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG5vZGVUeXBlID0gTm9kZVR5cGU6OkRlY2xhcmF0aW9uOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJy
aWRlCisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpMb29wOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVy
bUJyYW5jaCAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6
QnJhbmNoOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQ
RV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdXRpbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci91dGlsLmNwcAppbmRleCAzNDY0NzBlNGIyMDUzZjRjOTIwMmQ2NWMxNmYzYjE0
NTE2ODE1MjhjLi41ODJkZGM3MGM5NmMwYWRhMDAxNjVjMjFjYTFlOTY2Zjc5NTg0YWE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmNwcApAQCAtODA0LDYgKzgwNCwxMCBAQCBib29sIElzT3V0cHV0TWV0YWwoU2hT
aGFkZXJPdXRwdXQgb3V0cHV0KQogewogICAgIHJldHVybiBvdXRwdXQgPT0gU0hfR0xTTF9NRVRB
TF9PVVRQVVQ7CiB9Citib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQgb3V0
cHV0KQoreworICAgIHJldHVybiBvdXRwdXQgPT0gU0hfTVNMX01FVEFMX09VVFBVVDsKK30KIAog
Ym9vbCBJc0luU2hhZGVyU3RvcmFnZUJsb2NrKFRJbnRlcm1UeXBlZCAqbm9kZSkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuaAppbmRleCA1M2VlNzU1MjAzZDkyODhiOTJkYmIyNjBiZjI0YTVjYWE0MWUzMTk1Li5mOWFl
OWJiMWQ2ZWE0MzBhNTMwNDczOGMzNDc3M2YxMjc3ZjE2MTE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCkBAIC03
Nyw2ICs3Nyw3IEBAIGJvb2wgSXNPdXRwdXRHTFNMKFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7CiBi
b29sIElzT3V0cHV0SExTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogYm9vbCBJc091dHB1dFZ1
bGthbihTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogYm9vbCBJc091dHB1dE1ldGFsKFNoU2hhZGVy
T3V0cHV0IG91dHB1dCk7Citib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KTsKIAogYm9vbCBJc0luU2hhZGVyU3RvcmFnZUJsb2NrKFRJbnRlcm1UeXBlZCAqbm9k
ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191
dGlsL1N5c3RlbUluZm9fYXBwbGUubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCmluZGV4IGE0OWRjNTI3M2ZmMDY2MTE3ZGU3
MjA3ZDlkYjdjOWU2NGJhZWQyNDIuLjE1MDBmZmY0MjJjMDAwZmQxZTdlYWVmYmMwMGQwMzcxNWQz
MDIxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191
dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMTksNyArMTksMjUgQEAgbmFtZXNwYWNlIGFuZ2xlCiAKIGJvb2wgR2V0U3lzdGVtSW5mbyhT
eXN0ZW1JbmZvICppbmZvKQogewotI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8
IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisjICAgIGlmIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KQorICAg
IHN0YXRpYyBib29sIGlzaU9TQXBwT25NYWMgPSBmYWxzZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hf
b25jZV90IG9uY2U7CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKKyAgICAgIGlzaU9TQXBw
T25NYWMgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGlzaU9TQXBwT25NYWNdOworICAg
IH0pOworCisgICAgaWYgKGlzaU9TQXBwT25NYWMpCisgICAgeworICAgICAgICBHZXRTeXN0ZW1J
bmZvX2lvcyhpbmZvKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGluZm8tPmlzaU9TQXBwT25NYWMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bmZvOworICAgIH0KKworICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKKyMgICAg
ZWxpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKQogICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKICMg
ICAgZWxzZQogICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX2lvcyhpbmZvKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAppbmRleCAxZGRkZDRkODU0ODMy
YjJkMjliMzgwYTA0OGJkNGE0Mzc5OTM3YzNmLi43OTMxMDA5YjJhZWE4ZWUxNmU4ZTBkN2U5M2Y3
MTdmNDk1OTVmNzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvQ2Fwcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0NhcHMuY3BwCkBAIC0xNzAsOCArMTcwLDggQEAgc3RhdGljIGJvb2wgR2V0Rm9ybWF0U3VwcG9y
dEJhc2UoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzLAogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVxdWlyZWRGb3JtYXRzU2l6ZTsgaSsrKQogICAgIHsKLSAgICAgICAg
Y29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNb
aV0pOwogCisgICAgICAgIGNvbnN0IFRleHR1cmVDYXBzICZjYXAgPSB0ZXh0dXJlQ2Fwcy5nZXQo
cmVxdWlyZWRGb3JtYXRzW2ldKTsKICAgICAgICAgaWYgKHJlcXVpcmVzVGV4dHVyaW5nICYmICFj
YXAudGV4dHVyYWJsZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDYyLDcgKzQ2Miw2IEBAIHN0YXRpYyBib29sIERldGVybWluZUFTVENMRFJUZXh0dXJlU3VwcG9y
dChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMpCiAgICAgICAgIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIsICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEweDEwX0tIUiwKICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMngxMF9LSFIsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSLAog
ICAgIH07Ci0KICAgICByZXR1cm4gR2V0Rm9ybWF0U3VwcG9ydCh0ZXh0dXJlQ2FwcywgcmVxdWly
ZWRGb3JtYXRzLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIH0KIApAQCAtNjMw
LDEyICs2MjksNyBAQCBzdGF0aWMgYm9vbCBEZXRlcm1pbmVEZXB0aFRleHR1cmVBTkdMRVN1cHBv
cnQoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBH
TGVudW0gcmVxdWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2
LAotI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAg
ICAvLyBUT0RPKGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRl
ZCBvbiBpT1MuCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBi
ZSBhIHJ1bnRpbWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAg
ICBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICAgICAgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMsCiAgICAgfTsKIApAQCAtNjQ3LDEyICs2NDEsNyBAQCBzdGF0aWMgYm9vbCBE
ZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0
dXJlQ2FwcykKIHsKICAgICBjb25zdGV4cHIgR0xlbnVtIHJlcXVpcmVkRm9ybWF0c1tdID0gewog
ICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwKLSNpZiAhZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9JT1MpICYmICghZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgfHwgIWRlZmlu
ZWQoQU5HTEVfQ1BVX0FSTTY0KSkKLSAgICAgICAgLy8gVE9ETyhkaW5vKTogVGVtcG9yYXJpbHkg
UmVtb3ZpbmcgdGhlIG5lZWQgZm9yIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUwotICAgICAgICAv
LyBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgb24gaU9TLgotICAgICAgICAvLyBUT0RPKGRp
bm8pOiBJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBydW50aW1lIGNoZWNrIHdoZW4gcnVubmlu
ZyBhbiBpT1MgYXBwIG9uIE1hYy4KICAgICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLAot
I2VuZGlmCiAgICAgfTsKIAogICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0KHRleHR1cmVDYXBz
LCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAppbmRleCBk
ZGU0MzM3YmE1YjdmYzdiNDgyZWMyNzUxODkwYjVkYmYzM2EzMDQwLi42NTc4MTRmZTA2NzM4OTVh
ODMxYTQzY2ZjY2VmYjY5OWUyNTZmYzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwCkBAIC0xODEsNyArMTgxLDEzIEBAIEVHTEF0dHJp
YiBHZXREaXNwbGF5VHlwZUZyb21FbnZpcm9ubWVudCgpCiAgICAgICAgIHJldHVybiBFR0xfUExB
VEZPUk1fQU5HTEVfVFlQRV9OVUxMX0FOR0xFOwogICAgIH0KICNlbmRpZgorI2lmIGRlZmluZWQo
QU5HTEVfRU5BQkxFX01FVEFMKQorICAgIGlmIChhbmdsZURlZmF1bHRFbnYgPT0gIm1ldGFsIikK
KyAgICB7CisgICAgICAgIHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdM
RTsKKyAgICB9CiAKKyNlbmRpZgogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDExKQogICAg
IHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9EM0QxMV9BTkdMRTsKICNlbGlmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX0QzRDkpCkBAIC0xMzI1LDYgKzEzMzEsNDcgQEAgRXJyb3IgRGlzcGxh
eTo6bWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKnByZXZpb3VzQ29udGV4dCwKICAgICByZXR1cm4g
Tm9FcnJvcigpOwogfQogCitFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChjb25zdCBUaHJlYWQg
KnRocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1
cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJm
YWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgaWYgKCFtSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gTm9FcnJvcigp
OworICAgIH0KKworICAgIGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQgPSB0aHJlYWQtPmdl
dENvbnRleHQoKTsKKyAgICBpZiAocHJldmlvdXNDb250ZXh0KQorICAgIHsKKyAgICAgICAgQU5H
TEVfVFJZKHByZXZpb3VzQ29udGV4dC0+dW5NYWtlQ3VycmVudCh0aGlzKSk7CisgICAgfQorCisg
ICAgQU5HTEVfVFJZKG1JbXBsZW1lbnRhdGlvbi0+bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZh
Y2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSk7CisKKyAgICBpZiAoY29udGV4dCAhPSBudWxscHRy
KQorICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKGNvbnRleHQtPm1ha2VDdXJyZW50KHRoaXMsIGRy
YXdTdXJmYWNlLCByZWFkU3VyZmFjZSkpOworICAgIH0KKworICAgIC8vIFRpY2sgYWxsIHRoZSBz
Y3JhdGNoIGJ1ZmZlcnMgdG8gbWFrZSBzdXJlIHRoZXkgZ2V0IGNsZWFuZWQgdXAgZXZlbnR1YWxs
eSBpZiB0aGV5IHN0b3AgYmVpbmcKKyAgICAvLyB1c2VkLgorICAgIHsKKyAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobVNjcmF0Y2hCdWZmZXJNdXRleCk7CisKKyAgICAg
ICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZlciAmc2NhdGNoQnVmZmVyIDogbVNjcmF0Y2hCdWZm
ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBzY2F0Y2hCdWZmZXIudGljaygpOworICAgICAg
ICB9CisgICAgICAgIGZvciAoYW5nbGU6OlNjcmF0Y2hCdWZmZXIgJnplcm9GaWxsZWRCdWZmZXIg
OiBtWmVyb0ZpbGxlZEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHplcm9GaWxsZWRC
dWZmZXIudGljaygpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5vRXJyb3IoKTsK
K30KKwogRXJyb3IgRGlzcGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQogewogICAgIGZvciAoQ29u
dGV4dFNldDo6aXRlcmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250
ZXh0U2V0LmVuZCgpOyBjdHgrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9EaXNwbGF5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvRGlzcGxheS5oCmluZGV4IDRhYzYzMzZlMGYzYWNiMDZlYTU5NWM1NDc1YWE5OGU0Yjg2
YzdlOTQuLjE2ZmFmMmJmNWNiY2QzOTI4YjUwYzVkMWNlNWQwNzA0Y2VhNWU3NjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaApAQCAtMTY2LDYg
KzE2NiwxMSBAQCBjbGFzcyBEaXNwbGF5IGZpbmFsIDogcHVibGljIExhYmVsZWRPYmplY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqKm91dENvbnRleHQpOwogCisgICAgRXJy
b3IgbWFrZUN1cnJlbnQoY29uc3QgVGhyZWFkICp0aHJlYWQsCisgICAgICAgICAgICAgICAgICAg
ICAgU3VyZmFjZSAqZHJhd1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgU3VyZmFjZSAq
cmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQp
OworCiAgICAgRXJyb3IgY3JlYXRlU3luYyhjb25zdCBnbDo6Q29udGV4dCAqY3VycmVudENvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaAppbmRleCBmZTNlYzI4NTliYWE3NjI4N2I2OWZj
N2NiZjAzZmQ3OTg5YzQxMWRmLi5iYTkyNjdhMDNjOTM5NmM1N2JkZTRkNDdkMjNjNzgxMzU4MTZj
MzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJv
Z3JhbS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFt
LmgKQEAgLTI3Niw2ICsyNzYsMTEgQEAgY2xhc3MgUHJvZ3JhbVN0YXRlIGZpbmFsIDogYW5nbGU6
Ok5vbkNvcHlhYmxlCiAgICAgewogICAgICAgICByZXR1cm4gbUV4ZWN1dGFibGUtPmdldExpbmtl
ZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFu
c2Zvcm1GZWVkYmFja1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtRXhlY3V0YWJsZS0+c2V0TGlua2VkVHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncyhfbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOwor
ICAgIH0KICAgICBjb25zdCBzdGQ6OnZlY3RvcjxHTHNpemVpPiAmZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tTdHJpZGVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtRXhlY3V0YWJsZS0+Z2V0
VHJhbnNmb3JtRmVlZGJhY2tTdHJpZGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCmluZGV4IDk1MDgzMmI0
ZTgwNTE3YWVjYjA1ZGRjNmJjYmViYjgwYWM2MmI0ZGYuLjQ4ZjNiZDIxNzU0MDg0Nzk2ZDk4ZDUy
ODJkZGE2ZTViNGZhODY5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCkBAIC0yMjksNiArMjI5LDExIEBA
IGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIGFuZ2xlOjpTdWJqZWN0CiAg
ICAgewogICAgICAgICByZXR1cm4gbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7CiAg
ICAgfQorICAgIHZvaWQgc2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygKKyAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nPiBfbUxpbmtlZFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCisgICAgeworICAgICAgICBtTGlua2VkVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyA9IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczsKKyAg
ICB9CiAgICAgR0xpbnQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsgfQogICAgIEdMdWludCBnZXRVbmlm
b3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCkgY29uc3QKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
ZHJpdmVyX3V0aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCmluZGV4IGQ0YzZhZWQ2ZWNjMDgzY2E1M2FkZTM2YTcw
NTI4MzJkZjUyMzIzZmQuLjIyMzY0YjM0MjdmOGRjZGNmNWQ5M2FjNmE5NzZmZDJlNzNmOGY3YjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9kcml2ZXJfdXRpbHMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IE9TVmVyc2lvbiAmYSwgY29uc3QgT1NWZXJzaW9uICZiKQogICAgICAg
ICAgICBzdGQ6OnRpZShiLm1ham9yVmVyc2lvbiwgYi5taW5vclZlcnNpb24sIGIucGF0Y2hWZXJz
aW9uKTsKIH0KIAotI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0FQUExFKQorI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQogT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB7
CiAgICAgLy8gUmV0dXJuIGEgZGVmYXVsdCB2ZXJzaW9uCkBAIC0yMTMsNiArMjEzLDE0IEBAIE9T
VmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQogfQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChBTkdM
RV9QTEFURk9STV9JT1MpCitPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpCit7CisgICAgLy8gUmV0
dXJuIGEgZGVmYXVsdCB2ZXJzaW9uCisgICAgcmV0dXJuIE9TVmVyc2lvbigwLCAwLCAwKTsKK30K
KyNlbmRpZgorCiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9MSU5VWCkKIGJvb2wgUGFyc2VM
aW51eE9TVmVyc2lvbihjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgKm1ham9yLCBpbnQgKm1pbm9y
LCBpbnQgKnBhdGNoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oCmluZGV4IDI2MTliYzM0ZjMz
NzkwMjYyZDg2YTEzM2Q4YTYwMzkyYzZhMWY5OTEuLjc4NzcyYWUyZmQxMzc2OGQ3ZWY0ZmQyZDIy
MWM3MGYyNzgzMTg3YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmgKQEAgLTE2Nyw2ICsxNjcs
MTUgQEAgaW5saW5lIGJvb2wgSXNBcHBsZSgpCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgSXNN
YWMoKQoreworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpICYmIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDT1MpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCiBpbmxpbmUgYm9vbCBJc0Z1Y2hzaWEoKQogewogI2lmIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fRlVDSFNJQSkKQEAgLTIwNCw2ICsyMTMsOCBAQCBib29sIG9wZXJh
dG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBjb25zdCBPU1ZlcnNpb24gJmIpOwogCiBPU1ZlcnNp
b24gR2V0TWFjT1NWZXJzaW9uKCk7CiAKK09TVmVyc2lvbiBHZXRpT1NWZXJzaW9uKCk7CisKIE9T
VmVyc2lvbiBHZXRMaW51eE9TVmVyc2lvbigpOwogCiBpbmxpbmUgYm9vbCBJc0FuZHJvaWQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlsc19pb3MubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lN2E4NDVjMDcyNWYw
OTRmNjJlN2NhMzczMmYxNTM2MTljZWM2NWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19pb3MubW0K
QEAgLTAsMCArMSwyOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDE5IFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZHJpdmVyX3V0aWxzX2lvcy5tbSA6IHBy
b3ZpZGVzIGlvcy1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGRyaXZlci4KKwor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oIgorCisjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworbmFtZXNwYWNlIHJ4Cit7CisKK09TVmVyc2lvbiBH
ZXRpT1NWZXJzaW9uKCkKK3sKKyAgICBPU1ZlcnNpb24gcmVzdWx0OworCisgICAgTlNPcGVyYXRp
bmdTeXN0ZW1WZXJzaW9uIHZlcnNpb24gPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIG9w
ZXJhdGluZ1N5c3RlbVZlcnNpb25dOworICAgIHJlc3VsdC5tYWpvclZlcnNpb24gICAgICAgICAg
ICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLm1ham9yVmVyc2lvbik7CisgICAgcmVzdWx0
Lm1pbm9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWlu
b3JWZXJzaW9uKTsKKyAgICByZXN1bHQucGF0Y2hWZXJzaW9uICAgICAgICAgICAgICA9IHN0YXRp
Y19jYXN0PGludD4odmVyc2lvbi5wYXRjaFZlcnNpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQppbmRleCAzYWY0NmZjODg3
OGI4Yjk1NTM1NTgzOTE2MzU2MzFjYTdkZDdhNjIwLi5hODFlZGUyMjU5NDJhMjM1NjRhN2QxMjEx
Mjg1OTg1MjYxNzAxNmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQpAQCAt
MTMsNiArMTMsNyBAQAogbmFtZXNwYWNlIHJ4CiB7CiAKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ09TKQogT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB7CiAgICAgT1NWZXJzaW9u
IHJlc3VsdDsKQEAgLTI0LDUgKzI1LDUgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQotCisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1Nv
ZnRMaW5raW5nX2FwcGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYzYTZkN2EwMmViN2ZiNDIzMzdkYzBlNTc0
ZGM2YzU1OGM4NDBjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oCkBAIC0wLDAgKzEs
MTEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBTb2Z0TGlua2luZ19hcHBsZS5jcHA6IE1hY3JvcyBmb3Igc29mdC1saW5raW5nIEZy
YW1ld29ya3MgYW5kIEZ1bmN0aW9ucy4KKworI2lmbmRlZiBTT0ZUX0xJTktJTkdfQVBQTEVfSF8K
KyNkZWZpbmUgU09GVF9MSU5LSU5HX0FQUExFX0hfCisKKyNpbmNsdWRlICJjb21tb24vcGxhdGZv
cm0uaCIKKworI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisKKyMgICAgaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisKKyMgICAgaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgor
IyAgICBpbXBvcnQgPGRsZmNuLmg+CisjICAgIGltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisKKyMg
ICAgZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGV4cHJlc3Npb24sIG1lc3NhZ2UpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChleHByZXNzaW9u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8dm9pZD4oMCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICA6IChGQVRBTCgpIDw8ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8
IF9fRlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklMRV9fIDw8ICI6IiBcCisgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBfX0xJTkVfXyA8PCAiKTogIiA8PCAjZXhwcmVzc2lvbiA8PCAiXG5cdCEg
TWVzc2FnZTogIiA8PCBtZXNzYWdlKSkKKworIyAgICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICAg
ICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVybiAiQyIgeworIyAgICAgICAgZGVmaW5lIEVY
VEVSTl9DX0VORCB9CisjICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19CRUdJTgor
IyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0VORAorIyAgICBlbmRpZgorCisjICAgIGRlZmluZSBT
T0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihmcmFtZXdvcmspIGV4dGVybiB2b2lkICpmcmFtZXdv
cmsjI0xpYnJhcnkoKTsKKworIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0Uo
ZnJhbWV3b3JrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB2b2lkICpmcmFtZXdvcmsjI0xpYnJhcnkoKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIHZvaWQgKmZyYW1ld29ya0xpYnJhcnkg
PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBm
cmFtZXdvcmtMaWJyYXJ5ID0gZGxvcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIi9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzLyIgI2ZyYW1ld29yayAiLmZyYW1ld29yay8iICNmcmFtZXdvcmssIFJU
TERfTk9XKTsgXAorICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmcmFtZXdvcmtMaWJyYXJ5
LCAiVW5hYmxlIHRvIGxvYWQgIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrIik7ICAgICAgXAorICAg
ICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJu
IGZyYW1ld29ya0xpYnJhcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoZnJhbWV3b3JrLCBmdW5jdGlvbk5hbWUsIHJlc3VsdFR5cGUsIHBh
cmFtZXRlckRlY2xhcmF0aW9ucywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIEVYVEVSTl9DX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgcmVzdWx0VHlwZSBmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFWFRFUk5f
Q19FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGV4dGVybiByZXN1bHRUeXBlIGlu
aXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0ZXJuIHJlc3VsdFR5cGUoKnNvZnRMaW5rIyNmcmFt
ZXdvcmsjI2Z1bmN0aW9uTmFtZSkgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyAgICAgICAgICAgICAg
XAorICAgICAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSByZXN1
bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgICBcCisgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBzb2Z0
TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoZnJhbWV3b3JrLCBmdW5jdGlvbk5hbWUsIHJlc3VsdFR5cGUsIHBhcmFt
ZXRlckRlY2xhcmF0aW9ucywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyTmFtZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rp
b25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzdWx0
VHlwZSBpbml0IyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25j
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lID0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
IChyZXN1bHRUeXBlKCopIHBhcmFtZXRlckRlY2xhcmF0aW9ucylkbHN5bShmcmFtZXdvcmsjI0xp
YnJhcnkoKSwgI2Z1bmN0aW9uTmFtZSk7IFwKKyAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBzb2Z0TGluayMjZnJhbWV3b3JrIyNm
dW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfQorCisjICAgIGRlZmluZSBTT0ZUX0xJTktfQ0xBU1NfSEVBREVSKGNsYXNz
TmFtZSkgICAgXAorICAgICAgICBAY2xhc3MgY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgZXh0ZXJuIENsYXNzICgqZ2V0IyNjbGFzc05hbWUjI0NsYXNzKSgpOyBc
CisgICAgICAgIGNsYXNzTmFtZSAqYWxsb2MjI2NsYXNzTmFtZSMjSW5zdGFuY2UoKTsgXAorICAg
ICAgICBpbmxpbmUgY2xhc3NOYW1lICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpIHsgcmV0
dXJuIFtnZXQjI2NsYXNzTmFtZSMjQ2xhc3MoKSBhbGxvY107IH0KKworIyAgICBkZWZpbmUgU09G
VF9MSU5LX0NMQVNTKGZyYW1ld29yaywgY2xhc3NOYW1lKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQGNsYXNzIGNsYXNzTmFtZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHN0YXRpYyBDbGFzcyBpbml0IyNjbGFzc05hbWUoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDbGFzcyAoKmdldCMjY2xhc3NO
YW1lIyNDbGFzcykoKSA9IGluaXQjI2NsYXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGNsYXNzIyNjbGFzc05hbWU7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlv
bigpIHsgcmV0dXJuIGNsYXNzIyNjbGFzc05hbWU7IH0gICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBDbGFzcyBpbml0IyNj
bGFzc05hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXRp
YyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICBmcmFtZXdvcmsjI0xpYnJhcnkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgY2xhc3MjI2NsYXNzTmFt
ZSA9IG9iamNfZ2V0Q2xhc3MoI2NsYXNzTmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzIyNjbGFzc05hbWUsICJvYmpj
X2dldENsYXNzIGZhaWxlZCBmb3IgIiAjY2xhc3NOYW1lKTsgXAorICAgICAgICAgICAgICBnZXQj
I2NsYXNzTmFtZSMjQ2xhc3MgPSBjbGFzc05hbWUjI0Z1bmN0aW9uOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHJhZ21h
KCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1mdW5jdGlvblwiIikgc3RhdGlj
IGNsYXNzTmFtZSAgXAorICAgICAgICAgICAgICAgICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5j
ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gW2dldCMjY2xhc3NO
YW1lIyNDbGFzcygpIGFsbG9jXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1ByYWdtYSgiY2xh
bmcgZGlhZ25vc3RpYyBwb3AiKQorCisjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1f
QVBQTEUpCisKKyNlbmRpZiAgLy8gU09GVF9MSU5LSU5HX0FQUExFX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1
bmN0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk1YzBmNmJhYTRmODhkYzFi
MTk1M2UzNzM5Y2ZkYTdkZmFjM2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApA
QCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBDR0xGdW5jdGlvbnMuY3BwOiBFeHBvc2luZyB0aGUgc29mdC1saW5r
ZWQgQ0dMIGludGVyZmFjZS4KKworI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpCisKK1NPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTCkKKworU09GVF9MSU5L
X0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTENo
b29zZVBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IENHTFBpeGVsRm9ybWF0QXR0cmlidXRlICph
dHRyaWJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogKnBp
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50ICpucGl4KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGF0dHJpYnMsIHBpeCwgbnBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05f
U09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMQ3JlYXRlQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIENHTENvbnRleHRPYmogc2hhcmUsIENH
TENvbnRleHRPYmogKmN0eCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwaXgsIHNoYXJl
LCBjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAgICBPcGVuR0wsCisgICAgQ0dM
RGVzY3JpYmVQaXhlbEZvcm1hdCwKKyAgICBDR0xFcnJvciwKKyAgICAoQ0dMUGl4ZWxGb3JtYXRP
YmogcGl4LCBHTGludCBwaXhfbnVtLCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWIsIEdM
aW50ICp2YWx1ZSksCisgICAgKHBpeCwgcGl4X251bSwgYXR0cmliLCB2YWx1ZSkpCitTT0ZUX0xJ
TktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRGVzdHJveUNvbnRleHQsIENHTEVycm9yLCAo
Q0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3Bl
bkdMLCBDR0xEZXN0cm95UGl4ZWxGb3JtYXQsIENHTEVycm9yLCAoQ0dMUGl4ZWxGb3JtYXRPYmog
cGl4KSwgKHBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRXJyb3JT
dHJpbmcsIGNvbnN0IGNoYXIgKiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKK1NPRlRfTElO
S19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xSZWxlYXNlQ29udGV4dCwgdm9pZCwgKENHTENv
bnRleHRPYmogY3R4KSwgKGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwg
Q0dMU2V0Q3VycmVudENvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4
KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xTZXRWaXJ0dWFsU2NyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBD
R0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBH
TGludCBzY3JlZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LCBzY3JlZW4pKQor
U09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAgICBPcGVuR0wsCisgICAgQ0dMVGV4SW1hZ2VJ
T1N1cmZhY2UyRCwKKyAgICBDR0xFcnJvciwKKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisgICAg
IEdMZW51bSB0YXJnZXQsCisgICAgIEdMZW51bSBpbnRlcm5hbF9mb3JtYXQsCisgICAgIEdMc2l6
ZWkgd2lkdGgsCisgICAgIEdMc2l6ZWkgaGVpZ2h0LAorICAgICBHTGVudW0gZm9ybWF0LAorICAg
ICBHTGVudW0gdHlwZSwKKyAgICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSwKKyAgICAgR0x1aW50
IHBsYW5lKSwKKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKK1NPRlRfTElOS19GVU5DVElPTl9T
T1VSQ0UoT3BlbkdMLCBDR0xVcGRhdGVDb250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmog
Y3R4KSwgKGN0eCkpCisKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoCisgICAgT3BlbkdMLAor
ICAgIENHTERlc2NyaWJlUmVuZGVyZXIsCisgICAgQ0dMRXJyb3IsCisgICAgKENHTFJlbmRlcmVy
SW5mb09iaiByZW5kLCBHTGludCByZW5kX251bSwgQ0dMUmVuZGVyZXJQcm9wZXJ0eSBwcm9wLCBH
TGludCAqdmFsdWUpLAorICAgIChyZW5kLCByZW5kX251bSwgcHJvcCwgdmFsdWUpKQorU09GVF9M
SU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TERlc3Ryb3lSZW5kZXJlckluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuZCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09V
UkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUXVlcnlSZW5kZXJlcklu
Zm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoR0x1aW50IGRpc3BsYXlfbWFzaywgQ0dMUmVuZGVyZXJJbmZvT2JqICpyZW5k
LCBHTGludCAqbnJlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheV9tYXNr
LCByZW5kLCBucmVuZCkpCisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVu
Y3Rpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0NHTEZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2Yjg3MWU0YmVjOGFiYzBlMjcyZTIz
YzRhNmU1NTRkZWQ1YzBiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5oCkBAIC0wLDAg
KzEsODQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIENHTEZ1bmN0aW9ucy5oOiBFeHBvc2luZyB0aGUgc29mdC1saW5rZWQgQ0dMIGlu
dGVyZmFjZS4KKworI2lmbmRlZiBDR0xfRlVOQ1RJT05TX0hfCisjZGVmaW5lIENHTF9GVU5DVElP
TlNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdM
RV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkK
KworIyAgICBpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoT3BlbkdMKQorCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3QgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKm5waXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4
LCBucGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR0xDcmVhdGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2Jq
IHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBpeCwgc2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05f
SEVBREVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENH
TEVycm9yLAorICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhf
bnVtLCBhdHRyaWIsIHZhbHVlKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisgICAgT3Bl
bkdMLAorICAgIENHTERlc2NyaWJlUmVuZGVyZXIsCisgICAgQ0dMRXJyb3IsCisgICAgKENHTFJl
bmRlcmVySW5mb09iaiByZW5kLCBHTGludCByZW5kX251bSwgQ0dMUmVuZGVyZXJQcm9wZXJ0eSBw
cm9wLCBHTGludCAqdmFsdWUpLAorICAgIChyZW5kLCByZW5kX251bSwgcHJvcCwgdmFsdWUpKQor
U09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xF
cnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKE9wZW5HTCwgQ0dMRGVzdHJveVBpeGVsRm9ybWF0LCBDR0xFcnJvciwgKENHTFBpeGVsRm9y
bWF0T2JqIHBpeCksIChwaXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAo
Q0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAocmVu
ZCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMRXJyb3JTdHJpbmcsIGNv
bnN0IGNoYXIgKiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKK1NPRlRfTElOS19GVU5DVElP
Tl9IRUFERVIoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVyeVJlbmRl
cmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xSZW5kZXJlckluZm9PYmog
KnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5
X21hc2ssIHJlbmQsIG5yZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBD
R0xSZWxlYXNlQ29udGV4dCwgdm9pZCwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCitTT0ZU
X0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMU2V0Q3VycmVudENvbnRleHQsIENHTEVy
cm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFE
RVIoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xTZXRWaXJ0dWFsU2NyZWVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3JlZW4pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY3R4LCBzY3JlZW4pKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUigK
KyAgICBPcGVuR0wsCisgICAgQ0dMVGV4SW1hZ2VJT1N1cmZhY2UyRCwKKyAgICBDR0xFcnJvciwK
KyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisgICAgIEdMZW51bSB0YXJnZXQsCisgICAgIEdMZW51
bSBpbnRlcm5hbF9mb3JtYXQsCisgICAgIEdMc2l6ZWkgd2lkdGgsCisgICAgIEdMc2l6ZWkgaGVp
Z2h0LAorICAgICBHTGVudW0gZm9ybWF0LAorICAgICBHTGVudW0gdHlwZSwKKyAgICAgSU9TdXJm
YWNlUmVmIGlvU3VyZmFjZSwKKyAgICAgR0x1aW50IHBsYW5lKSwKKyAgICAoY3R4LCB0YXJnZXQs
IGludGVybmFsX2Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2Us
IHBsYW5lKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xVcGRhdGVDb250
ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCisKKyNlbmRpZiAgLy8g
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkKKworI2VuZGlmICAvLyBDR0xfRlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3Bs
YXlDR0wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0Rpc3BsYXlDR0wubW0KaW5kZXggYjVhNjMxYWU0MzIxZjFhZDliNDg1NjZmYWEwOWRm
ZmZhMzk0NjM5MS4uOTBlODA1OGY1ODVmYWI3MWQ2NWUyNDE5NTIwNjI4NGY4NDQ1NWIzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2NnbC9EaXNwbGF5Q0dMLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQpAQCAtMjksNiArMjksOCBAQAogIyAg
ICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvV2luZG93U3VyZmFjZUNHTC5oIgog
IyAgICBpbmNsdWRlICJwbGF0Zm9ybS9QbGF0Zm9ybU1ldGhvZHMuaCIKIAorIyAgICBpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgiCisKIG5hbWVzcGFjZQog
ewogCkBAIC0xNjMsOSArMTY1LDEwIEBAIGVnbDo6RXJyb3IgRGlzcGxheUNHTDo6aW5pdGlhbGl6
ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCiAgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OwogCiAg
ICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0
ZW1JbmZvIHRvIHJldHVybiBmYWxzZSBhbmQgdGhlcmVieQotICAgIC8vIGNvbnRhaW4gaW5jb21w
bGV0ZSBpbmZvcm1hdGlvbi4KLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbyk7
CisgICAgaWYgKCFhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8gcXVlcnkgQU5HTEUn
cyBTeXN0ZW1JbmZvLiI7CisgICAgfQogCiAgICAgLy8gVGhpcyBjb2RlIGltcGxlbWVudHMgdGhl
IGVmZmVjdCBvZiB0aGUKICAgICAvLyBkaXNhYmxlR1BVU3dpdGNoaW5nU3VwcG9ydCB3b3JrYXJv
dW5kIGluIEZlYXR1cmVzR0wuCkBAIC00NDAsNyArNDQzLDcgQEAgZWdsOjpFcnJvciBEaXNwbGF5
Q0dMOjpyZXN0b3JlTG9zdERldmljZShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCiAKIGJv
b2wgRGlzcGxheUNHTDo6aXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdp
bmRvdykgY29uc3QKIHsKLSAgICBOU09iamVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3Qg
Kil3aW5kb3c7CisgICAgTlNPYmplY3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVj
dCAqPih3aW5kb3cpOwogICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBj
bGFzc11dOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCmluZGV4
IGE3OTUwMzdkMTQ3OWEzY2YxZGJjYzIxOWY0OTM2ZDJiNTA3N2U3MDYuLmM1NWFlN2ZiZjNhYjc2
OTE1OWRjZWFlNjFmODAxMzM3MmIxZGU0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rp
c3BsYXlFQUdMLm1tCkBAIC0yNyw2ICsyNyw4IEBACiAjICAgIGltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjICAgIGltcG9ydCA8ZGxmY24uaD4KIAorIyAgICBpbXBvcnQgImxpYkFO
R0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5oIgorCiBuYW1lc3BhY2UKIHsKIApA
QCAtNjQsOSArNjYsMTAgQEAgZWdsOjpFcnJvciBEaXNwbGF5RUFHTDo6aW5pdGlhbGl6ZShlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkpCiAgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OwogCiAgICAgYW5n
bGU6OlN5c3RlbUluZm8gaW5mbzsKLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0ZW1JbmZv
IHRvIHJldHVybiBmYWxzZSBhbmQgdGhlcmVieQotICAgIC8vIGNvbnRhaW4gaW5jb21wbGV0ZSBp
bmZvcm1hdGlvbi4KLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbyk7CisgICAg
aWYgKCFhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
ZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8gcXVlcnkgQU5HTEUncyBTeXN0
ZW1JbmZvLiI7CisgICAgfQogCiAgICAgbUNvbnRleHQgPSBbYWxsb2NFQUdMQ29udGV4dEluc3Rh
bmNlKCkgaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElPcGVuR0xFUzNdOwogICAgIGlmICht
Q29udGV4dCA9PSBudWxscHRyKQpAQCAtMTEzLDYgKzExNiw3IEBAIHZvaWQgRGlzcGxheUVBR0w6
OnRlcm1pbmF0ZSgpCiAgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCiAgICAgewogICAgICAg
ICBbZ2V0RUFHTENvbnRleHRDbGFzcygpIHNldEN1cnJlbnRDb250ZXh0Om5pbF07CisgICAgICAg
IFttQ29udGV4dCByZWxlYXNlXTsKICAgICAgICAgbUNvbnRleHQgPSBudWxscHRyOwogICAgICAg
ICBtVGhyZWFkc1dpdGhDb250ZXh0Q3VycmVudC5jbGVhcigpOwogICAgIH0KQEAgLTI3NSw3ICsy
NzksNyBAQCBlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjpyZXN0b3JlTG9zdERldmljZShjb25zdCBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkpCiAKIGJvb2wgRGlzcGxheUVBR0w6OmlzVmFsaWROYXRpdmVX
aW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiB7Ci0gICAgTlNPYmplY3Qg
KmxheWVyID0gKF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworICAgIE5TT2JqZWN0ICpsYXll
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNPYmplY3QgKj4od2luZG93KTsKICAgICByZXR1cm4gW2xh
eWVyIGlzS2luZE9mQ2xhc3M6W0NBTGF5ZXIgY2xhc3NdXTsKIH0KIApAQCAtMzExLDkgKzMxNSw4
IEBAIHZvaWQgRGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9ucyhlZ2w6OkRpc3BsYXlFeHRl
bnNpb25zICpvdXRFeHRlbnNpb25zKSBjb25zCiAgICAgb3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxl
c3NDb250ZXh0ICAgID0gdHJ1ZTsKICAgICBvdXRFeHRlbnNpb25zLT5kZXZpY2VRdWVyeSAgICAg
ICAgICAgPSB0cnVlOwogCi0gICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1
cmVzIGFucyBzZW1hcGhvcmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKLSAgICBvdXRFeHRlbnNp
b25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgICA9IHRydWU7Ci0gICAgb3V0RXh0ZW5zaW9u
cy0+ZGlzcGxheVNlbWFwaG9yZVNoYXJlR3JvdXAgPSB0cnVlOworICAgIC8vIENvbnRleHRzIGFy
ZSB2aXJ0dWFsaXplZCBzbyB0ZXh0dXJlcyBjYW4gYmUgc2hhcmVkIGdsb2JhbGx5CisgICAgb3V0
RXh0ZW5zaW9ucy0+ZGlzcGxheVRleHR1cmVTaGFyZUdyb3VwID0gdHJ1ZTsKIAogICAgIG91dEV4
dGVuc2lvbnMtPnBvd2VyUHJlZmVyZW5jZSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rp
b25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9FQUdMRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTIxMjUxMzM4ZWVlNjhmNzAzNGRjOGM2
NzVhZWVmZmZjYTQxOTY1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApAQCAtMCww
ICsxLDMwIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBFQUdMRnVuY3Rpb25zLmg6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdM
IGludGVyZmFjZS4KKworI2lmbmRlZiBFQUdMX0ZVTkNUSU9OU19IXworI2RlZmluZSBFQUdMX0ZV
TkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiAoZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKSkgfHwgXAorICAgIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBk
ZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCisKKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+
CisjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+CisjICAgIGltcG9ydCA8T3Bl
bkdMRVMvRUFHTElPU3VyZmFjZS5oPgorCisjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L2dsL1NvZnRMaW5raW5nX2FwcGxlLmgiCisKK1NPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9w
ZW5HTEVTKQorCitTT0ZUX0xJTktfQ0xBU1NfSEVBREVSKEVBR0xDb250ZXh0KQorCisjZW5kaWYg
IC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fTUFDQ0FUQUxZU1QpKSB8fAorICAgICAgICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorCisjZW5kaWYgIC8vIENH
TF9GVU5DVElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBiMWViNzBjNzVmNDg3OWQ4Y2QxOGM4ODZkZjY5ZWYzOWEyMzE4ODUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLm1tCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5j
dGlvbnMuY3BwOiBFeHBvc2luZyB0aGUgc29mdC1saW5rZWQgRUFHTCBpbnRlcmZhY2UuCisKKyNp
bmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpKSB8fCBcCisgICAg
KGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BV
X0FSTTY0KSkKKworIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJm
YWNlLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdf
YXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMRVMpCisKK1NPRlRf
TElOS19DTEFTUyhPcGVuR0xFUywgRUFHTENvbnRleHQpCisKKyNlbmRpZiAgLy8gKGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlT
VCkpIHx8CisgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAm
JiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsc2xhbmdfd3JhcHBlcl91dGlscy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcAppbmRleCBkNzBhZTU4
YTBiZjQ5ZjYyZGY5MmU4NTI2OTg3N2IzMDExMmQzZjgyLi42MTVkZDQ0ZDE0ZThkYjcwMjZjYjhk
OTE4ZjVlY2ZmOThhOGJhMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVy
X3V0aWxzLmNwcApAQCAtMjgxLDEwICsyODEsMTIgQEAgc3RkOjpzdHJpbmcgU3Vic3RpdHV0ZVRy
YW5zZm9ybUZlZWRiYWNrTWFya2Vycyhjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxTb3VyY2UK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcgJnhmYk91dCkKIHsKICAgICBjb25zdCBzaXplX3QgeGZiRGVjbE1hcmtlclN0YXJ0
ID0gb3JpZ2luYWxTb3VyY2UuZmluZChrWGZiRGVjbE1hcmtlcik7Ci0gICAgY29uc3Qgc2l6ZV90
IHhmYkRlY2xNYXJrZXJFbmQgICA9IHhmYkRlY2xNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtY
ZmJEZWNsTWFya2VyKTsKKyAgICBBU1NFUlQoeGZiRGVjbE1hcmtlclN0YXJ0ICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKTsKKyAgICBjb25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCA9IHhmYkRlY2xN
YXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtYZmJEZWNsTWFya2VyKTsKIAogICAgIGNvbnN0IHNp
emVfdCB4ZmJPdXRNYXJrZXJTdGFydCA9IG9yaWdpbmFsU291cmNlLmZpbmQoa1hmYk91dE1hcmtl
ciwgeGZiRGVjbE1hcmtlclN0YXJ0KTsKLSAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyRW5k
ICAgPSB4ZmJPdXRNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtYZmJPdXRNYXJrZXIpOworICAg
IEFTU0VSVCh4ZmJPdXRNYXJrZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgY29u
c3Qgc2l6ZV90IHhmYk91dE1hcmtlckVuZCA9IHhmYk91dE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJM
ZW4oa1hmYk91dE1hcmtlcik7CiAKICAgICAvLyBUaGUgc2hhZGVyIGlzIHRoZSBmb2xsb3dpbmcg
Zm9ybToKICAgICAvLwpAQCAtMzYyLDcgKzM2NCw4IEBAIHZvaWQgR2VuZXJhdGVUcmFuc2Zvcm1G
ZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlv
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFt
SW50ZXJmYWNlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgKnZlcnRleFNoYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2
YXJpYWJsZUluZm9NYXBPdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoYWRlckludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGVhcmx5UmV0dXJuKQogewogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpUcmFuc2Zvcm1GZWVk
YmFja1Zhcnlpbmc+ICZ2YXJ5aW5ncyA9CiAgICAgICAgIHByb2dyYW1TdGF0ZS5nZXRMaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKCk7CkBAIC00MTMsNiArNDE2LDEwIEBAIHZvaWQgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvCiAgICAgICAgICAgICBvdXRwdXRPZmZzZXQgKz0gaW5mby5jb2x1bW5D
b3VudCAqIGluZm8ucm93Q291bnQgKiB2YXJ5aW5nLnNpemUoKTsKICAgICAgICAgfQogICAgIH0K
KyAgICBpZiAoZWFybHlSZXR1cm4pCisgICAgeworICAgICAgICB4ZmJPdXQgKz0gInJldHVybjsi
OworICAgIH0KICAgICB4ZmJPdXQgKz0gIn1cbiI7CiAKICAgICAqdmVydGV4U2hhZGVyID0gU3Vi
c3RpdHV0ZVRyYW5zZm9ybUZlZWRiYWNrTWFya2VycygqdmVydGV4U2hhZGVyLCB4ZmJEZWNsLCB4
ZmJPdXQpOwpAQCAtMzM2OCwxMSArMzM3NSw2IEBAIHN0ZDo6c3RyaW5nIEdsc2xhbmdHZXRNYXBw
ZWRTYW1wbGVyTmFtZShjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQogICAgIHJldHVy
biBzYW1wbGVyTmFtZTsKIH0KIAotc3RkOjpzdHJpbmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1
aW50MzJfdCBidWZmZXJJbmRleCkKLXsKLSAgICByZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVm
ZmVySW5kZXgpOwotfQotCiB2b2lkIEdsc2xhbmdHZW5UcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlv
bk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1T
dGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFj
ZUluZm8sCkBAIC0zMzgwLDcgKzMzODIsNyBAQCB2b2lkIEdsc2xhbmdHZW5UcmFuc2Zvcm1GZWVk
YmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYWRlckludGVy
ZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFwT3V0KQogewogICAgIEdlbmVyYXRl
VHJhbnNmb3JtRmVlZGJhY2tFbXVsYXRpb25PdXRwdXRzKG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwg
cHJvZ3JhbUludGVyZmFjZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlciwgdmFyaWFi
bGVJbmZvTWFwT3V0LCBmYWxzZSk7CiB9CiAKIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhj
b25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKQEAgLTM0MjgsNiArMzQzMCw1NyBA
QCB2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMg
Jm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91
dCk7CiB9CiAKK3N0ZDo6c3RyaW5nIEdldFhmYkJ1ZmZlck5hbWUoY29uc3QgdWludDMyX3QgYnVm
ZmVySW5kZXgpCit7CisgICAgcmV0dXJuICJ4ZmJCdWZmZXIiICsgU3RyKGJ1ZmZlckluZGV4KTsK
K30KKworCit2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMoR2xzbGFuZ1NvdXJjZU9wdGlvbnMg
Jm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICZwcm9ncmFtRXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFjZUluZm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJ
bmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpCit7CisgICAgLy8gQXNzaWduIG91dHB1dHMgdG8g
dGhlIGZyYWdtZW50IHNoYWRlciwgaWYgYW55LgorICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6
U2hhZGVyVHlwZTo6RnJhZ21lbnQpICYmCisgICAgICAgIHByb2dyYW1FeGVjdXRhYmxlLmhhc0xp
bmtlZFNoYWRlclN0YWdlKGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCkpCisgICAgeworICAgICAg
ICBBc3NpZ25PdXRwdXRMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFibGUsIGdsOjpTaGFkZXJUeXBl
OjpGcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5m
b01hcE91dClbZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50XSk7CisgICAgfQorCisgICAgLy8gQXNz
aWduIGF0dHJpYnV0ZXMgdG8gdGhlIHZlcnRleCBzaGFkZXIsIGlmIGFueS4KKyAgICBpZiAoKHNo
YWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkgJiYKKyAgICAgICAgcHJvZ3JhbUV4
ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkpCisg
ICAgeworICAgICAgICBBc3NpZ25BdHRyaWJ1dGVMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFibGUs
IGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICB9
CisKKyAgICBpZiAoIXByb2dyYW1FeGVjdXRhYmxlLmhhc0xpbmtlZFNoYWRlclN0YWdlKGdsOjpT
aGFkZXJUeXBlOjpDb21wdXRlKSkKKyAgICB7CisgICAgICAgIC8vIEFzc2lnbiB2YXJ5aW5nIGxv
Y2F0aW9ucy4KKyAgICAgICAgQXNzaWduVmFyeWluZ0xvY2F0aW9ucyhvcHRpb25zLCBwcm9ncmFt
RXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKKworICAgICAgICBpZiAo
IXByb2dyYW1FeGVjdXRhYmxlLmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKS5l
bXB0eSgpICYmCisgICAgICAgICAgICBvcHRpb25zLnN1cHBvcnRzVHJhbnNmb3JtRmVlZGJhY2tF
eHRlbnNpb24gJiYgKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFzc2lnblRyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uUXVhbGlm
aWVycygKKyAgICAgICAgICAgICAgICBwcm9ncmFtRXhlY3V0YWJsZSwgcHJvZ3JhbUludGVyZmFj
ZUluZm8tPmxvY2F0aW9uc1VzZWRGb3JYZmJFeHRlbnNpb24sCisgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlclR5cGU6OlZlcnRleCwgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlw
ZTo6VmVydGV4XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBc3NpZ25Vbmlmb3JtQmluZGlu
Z3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZh
Y2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOwor
ICAgIEFzc2lnblRleHR1cmVCaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hh
ZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgQXNzaWduTm9uVGV4dHVyZUJpbmRpbmdzKG9wdGlv
bnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKK30KKwog
dm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZv
cHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3Rh
dGUgJnByb2dyYW1TdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLApAQCAtMzQ2Miw3ICszNTE1LDggQEAg
dm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZv
cHRpb25zLAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEdlbmVyYXRlVHJhbnNmb3Jt
RmVlZGJhY2tFbXVsYXRpb25PdXRwdXRzKAogICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBw
cm9ncmFtU3RhdGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLCB2ZXJ0ZXhTb3VyY2UsCi0gICAgICAg
ICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRl
eF0pOworICAgICAgICAgICAgICAgICAgICAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2dsOjpTaGFk
ZXJUeXBlOjpWZXJ0ZXhdLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zZm9ybUZl
ZWRiYWNrRWFybHlSZXR1cm4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oCmluZGV4
IDJiZDJjNjFhODcxODVmNDE2MGI0MGZlMjY0YTM4OGEyMWM1OGUyZGQuLjYwMjQ4Y2RiYWQ3NjU5
NjAxODkwOGZkMTM3MjA5MDcwNWExOTVhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193
cmFwcGVyX3V0aWxzLmgKQEAgLTUxLDYgKzUxLDcgQEAgc3RydWN0IEdsc2xhbmdTb3VyY2VPcHRp
b25zCiAgICAgYm9vbCBzdXBwb3J0c1RyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uID0gZmFsc2U7
CiAgICAgYm9vbCBlbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgID0gZmFsc2U7CiAg
ICAgYm9vbCBlbXVsYXRlQnJlc2VuaGFtTGluZXMgICAgICAgICAgICAgID0gZmFsc2U7CisgICAg
Ym9vbCB0cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuICAgICAgID0gZmFsc2U7CiB9OwogCiB1
c2luZyBTcGlydkJsb2IgPSBzdGQ6OnZlY3Rvcjx1aW50MzJfdD47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNf
ZGF0YS5qc29uIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbgppbmRleCA4YzNmZDA1NWQyZDNjYmM0ODk3ODIyY2Q0
ZjNiZDI0NTkxYTg3YWRjLi43YmNkZWQwN2Q0YzI0ZmY3ZDVjODY4YzA0NWQzMGIzZDQxYjkyYmYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KQEAgLTY3Miw2
ICs2NzIsOSBAQAogICAgICJEMzJfRkxPQVRfUzhYMjRfVUlOVCI6IHsKICAgICAgICJHTF9VTlNJ
R05FRF9JTlRfMjRfOCI6ICJMb2FkRDI0UzhUb0QzMkZTOFgyNCIsCiAgICAgICAiR0xfVU5TSUdO
RURfSU5UIjogIkxvYWREMzJUb0QzMkZYMzIiCisgICAgfSwKKyAgICAiRDMyX0ZMT0FUIjogewor
ICAgICAgIkdMX1VOU0lHTkVEX0lOVCI6ICJMb2FkRDI0UzhUb0QzMkYiCiAgICAgfQogICB9LAog
ICAiR0xfUjMySSI6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190
YWJsZV9hdXRvZ2VuLmNwcAppbmRleCAyMGU3MDZmN2M5YmM4Mzc5YTMyMDY0YzBhZjU5M2ExOTBj
ZDlkZTRkLi4yZWYwMWNhM2NmZTkwNTc4YzgzMDVkYmEwNDM5MTRhZjc2YzA0ODkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9m
dW5jdGlvbnNfdGFibGVfYXV0b2dlbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCkBA
IC00NDYsOCArNDQ2LDcgQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9M
T1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNX0IKICAgICB9CiB9CiAKLUxv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9F
VEMyX3RvX0VUQzJfUjhHOEI4QTFfVU5PUk1fQkxPQ0soCi0gICAgR0xlbnVtIHR5cGUpCitMb2Fk
SW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
Ml90b19FVEMyX1I4RzhCOEExX1VOT1JNX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRj
aCAodHlwZSkKICAgICB7CkBAIC00NzEsOCArNDcwLDcgQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZv
IENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fUjhHOEI4QThfVU5P
Uk0KICAgICB9CiB9CiAKLUxvYWRJbWFnZUZ1bmN0aW9uSW5mbwotQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQkFfVU5P
Uk1fQkxPQ0soR0xlbnVtIHR5cGUpCitMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9S
R0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JH
QkFfVU5PUk1fQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsK
QEAgLTEzMTIsOCArMTMxMCw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NS
R0I4X0VUQzJfdG9fUjhHOEI4QThfVU5PUk1fU1JHQihHTGVudW0gdHlwZSkKICAgICB9CiB9CiAK
LUxvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMy
X0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fU1JHQl9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpCiAgICAgewpAQCAtMTMyNSw4ICsxMzIyLDcgQEAgTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9V
Tk9STV8KICAgICB9CiB9CiAKLUxvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4
X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19FVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0soCi0g
ICAgR0xlbnVtIHR5cGUpCitMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9TUkdCX0JMT0NLKEdMZW51
bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xMzUwLDkgKzEzNDYsNyBA
QCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQ
SEExX0VUQzJfdG9fUjhHOEI4QThfVU5PUgogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25J
bmZvCi1DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VU
QzJfQU5HTEVfdG9fQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkK
K0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBI
QTFfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSyhH
TGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtMTUxMCw2ICsxNTA0
LDE4IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5P
Uk1fWDhfVUlOVChHTGVudW0gdHlwZSkKICAgICB9CiB9CiAKK0xvYWRJbWFnZUZ1bmN0aW9uSW5m
byBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
ICAgICByZXR1cm4gTG9hZEltYWdlRnVuY3Rpb25JbmZvKExvYWREMjRTOFRvRDMyRiwgdHJ1ZSk7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgcmV0dXJuIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyhVbnJlYWNoYWJsZUxvYWRGdW5jdGlvbiwg
dHJ1ZSk7CisgICAgfQorfQorCiBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gREVQVEhfQ09NUE9ORU5U
MjRfdG9fRDMyX0ZMT0FUX1M4WDI0X1VJTlQoR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0
eXBlKQpAQCAtMzYyNCw2ICszNjMwLDggQEAgTG9hZEZ1bmN0aW9uTWFwIEdldExvYWRGdW5jdGlv
bnNNYXAoR0xlbnVtIGludGVybmFsRm9ybWF0LCBGb3JtYXRJRCBhbmdsZUZvcm1hdCkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9TOF9V
SU5UOwogICAgICAgICAgICAgICAgIGNhc2UgRm9ybWF0SUQ6OkQyNF9VTk9STV9YOF9VSU5UOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JN
X1g4X1VJTlQ7CisgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZMT0FUOwog
ICAgICAgICAgICAgICAgIGNhc2UgRm9ybWF0SUQ6OkQzMl9GTE9BVF9TOFgyNF9VSU5UOgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZMT0FUX1M4
WDI0X1VJTlQ7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlMRC5nbiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlMRC5n
bgppbmRleCA4NjhjNDc2Yjk0NDViN2Q5ZThhNWFjMDVlNGE1ODdjZjA0ZjcxYjQ3Li4wZDUwZDgx
Y2RmZTY4ZTQ3ZTkzYjUzMGU1NTFiN2RmZTk0NjIxZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxE
LmduCkBAIC02LDcgKzYsNyBAQAogCiBpbXBvcnQoIi4uLy4uLy4uLy4uL2duaS9hbmdsZS5nbmki
KQogCi1hc3NlcnQoaXNfbWFjKQorYXNzZXJ0KGlzX21hYyB8fCBpc19pb3MpCiBhc3NlcnQoYW5n
bGVfZW5hYmxlX21ldGFsKQogCiBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWwpAQCAtMjEsNiAr
MjEsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWwogICAiRGlzcGxheU10bF9hcGkuaCIs
CiAgICJGcmFtZUJ1ZmZlck10bC5oIiwKICAgIkZyYW1lQnVmZmVyTXRsLm1tIiwKKyAgIklPU3Vy
ZmFjZVN1cmZhY2VNdGwuaCIsCisgICJJT1N1cmZhY2VTdXJmYWNlTXRsLm1tIiwKICAgIlByb2dy
YW1NdGwuaCIsCiAgICJQcm9ncmFtTXRsLm1tIiwKICAgIlF1ZXJ5TXRsLmgiLApAQCAtNTIsNiAr
NTQsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWwogICAibXRsX2Zvcm1hdF90YWJsZV9h
dXRvZ2VuLm1tIiwKICAgIm10bF9mb3JtYXRfdXRpbHMuaCIsCiAgICJtdGxfZm9ybWF0X3V0aWxz
Lm1tIiwKKyAgIm10bF9nbHNsYW5nX210bF91dGlscy5oIiwKKyAgIm10bF9nbHNsYW5nX210bF91
dGlscy5tbSIsCiAgICJtdGxfZ2xzbGFuZ191dGlscy5oIiwKICAgIm10bF9nbHNsYW5nX3V0aWxz
Lm1tIiwKICAgIm10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIiwKQEAgLTY1LDEyICs2OSwxMSBA
QCBfbWV0YWxfYmFja2VuZF9zb3VyY2VzID0gWwogICAibXRsX3V0aWxzLmgiLAogICAibXRsX3V0
aWxzLm1tIiwKICAgInNoYWRlcnMvY29uc3RhbnRzLmgiLAotICAic2hhZGVycy9mb3JtYXRfYXV0
b2dlbi5oIiwKLSAgInNoYWRlcnMvbXRsX2RlZmF1bHRfc2hhZGVyc19zcmNfYXV0b2dlbi5pbmMi
LAorICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIKIF0KIAog
Y29uZmlnKCJhbmdsZV9tZXRhbF9iYWNrZW5kX2NvbmZpZyIpIHsKLSAgZGVmaW5lcyA9IFsgIkFO
R0xFX0VOQUJMRV9NRVRBTCIgXQorICBkZWZpbmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiwg
IkFOR0xFX0VOQUJMRV9NRVRBTF9TUElSViIgXQogICBsZGZsYWdzID0gWwogICAgICItd2Vha19m
cmFtZXdvcmsiLAogICAgICJNZXRhbCIsCkBAIC05NiwxMiArOTksMTYgQEAgYW5nbGVfc291cmNl
X3NldCgiYW5nbGVfbWV0YWxfYmFja2VuZCIpIHsKICAgICAiJHthbmdsZV9yb290fTpsaWJBTkdM
RV9oZWFkZXJzIiwKICAgXQogCi0gIGRlcHMgPSBbICIke2FuZ2xlX3NwaXJ2X2Nyb3NzX2Rpcn0v
Z246c3BpcnZfY3Jvc3Nfc291cmNlcyIgXQorICBkZXBzID0gWworICAgICIkYW5nbGVfc3BpcnZf
dG9vbHNfZGlyOnNwdnRvb2xzX3ZhbCIsCisgICAgIiR7YW5nbGVfc3BpcnZfY3Jvc3NfZGlyfS9n
bjpzcGlydl9jcm9zc19zb3VyY2VzIiwKKyAgXQogCiAgIG9iamNfZmxhZ3MgPSBbCiAgICAgIi1X
bm8tbnVsbGFiaWxpdHktY29tcGxldGVuZXNzIiwKICAgICAiLVduby11bmd1YXJkZWQtYXZhaWxh
YmlsaXR5IiwKICAgICAiLWZuby1vYmpjLWFyYyIsCisgICAgIi1Xbm8tZXh0cmEtc2VtaS1zdG10
IiwKICAgXQogICBjZmxhZ3Nfb2JqYyArPSBvYmpjX2ZsYWdzCiAgIGNmbGFnc19vYmpjYyArPSBv
YmpjX2ZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKaW5kZXggNzYyNTQ5ZTRkMjcw
ZjljZjI0NGYzM2UxZmUwYjE5MDVmYTJhMTM5Mi4uOWY5ZWM2Y2JkOWM4MzE1N2UzMTQ3NGU2Njhk
MzUyMmYyZWQ0ZjI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaApAQCAtMTUyLDEw
ICsxNTIsMTUgQEAgY2xhc3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBC
dWZmZXJIb2xkZXJNdGwKIAogICAgIENvbnZlcnNpb25CdWZmZXJNdGwgKmdldFVuaWZvcm1Db252
ZXJzaW9uQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsIHNpemVfdCBvZmZzZXQpOwogCisgICAg
Ly8gTk9URShocWxlKTogSWYgdGhlIGJ1ZmZlciBpcyBtb2RpZmVkIGJ5IEdQVSwgdGhpcyBmdW5j
dGlvbiBtdXN0IGJlIGV4cGxpY2l0bHkKKyAgICAvLyBjYWxsZWQuCisgICAgdm9pZCBtYXJrQ29u
dmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOworCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KG1TdGF0ZS5nZXRTaXplKCkpOyB9CiAKICAgcHJpdmF0ZToK
ICAgICBhbmdsZTo6UmVzdWx0IHNldERhdGFJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcgdGFyZ2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKTsKQEAgLTE2NywyMCArMTcyLDI0IEBA
IGNsYXNzIEJ1ZmZlck10bCA6IHB1YmxpYyBCdWZmZXJJbXBsLCBwdWJsaWMgQnVmZmVySG9sZGVy
TXRsCiAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdFNoYWRvd0NvcHkoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIHNpemVfdCBzaXplKTsKIAotICAgIHZvaWQgbWFya0NvbnZlcnNp
b25CdWZmZXJzRGlydHkoKTsKLQogICAgIHZvaWQgY2xlYXJDb252ZXJzaW9uQnVmZmVycygpOwor
CiAgICAgYm9vbCBjbGllbnRTaGFkb3dDb3B5RGF0YU5lZWRTeW5jKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOwogICAgIHZvaWQgZW5zdXJlU2hhZG93Q29weVN5bmNlZEZyb21HUFUoQ29udGV4dE10
bCAqY29udGV4dE10bCk7CiAgICAgdWludDhfdCAqc3luY0FuZE9idGFpblNoYWRvd0NvcHkoQ29u
dGV4dE10bCAqY29udGV4dE10bCk7CiAKKyAgICAvLyBDb252ZW5pZW50IG1ldGhvZAorICAgIGNv
bnN0IHVpbnQ4X3QgKmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldENsaWVudFNoYWRvd0NvcHlEYXRhKG10
bDo6R2V0SW1wbChjb250ZXh0KSk7CisgICAgfQogICAgIC8vIENsaWVudCBzaWRlIHNoYWRvdyBi
dWZmZXIKICAgICBhbmdsZTo6TWVtb3J5QnVmZmVyIG1TaGFkb3dDb3B5OwogCiAgICAgLy8gR1BV
IHNpZGUgYnVmZmVycyBwb29sCiAgICAgbXRsOjpCdWZmZXJQb29sIG1CdWZmZXJQb29sOwogCi0g
ICAgLy8gQSBjYWNoZSBvZiBjb252ZXJ0ZWQgYnVmZmVyIGRhdGEuCisgICAgLy8gQSBjYWNoZSBv
ZiBjb252ZXJ0ZWQgdmVydGV4IGRhdGEuCiAgICAgc3RkOjp2ZWN0b3I8VmVydGV4Q29udmVyc2lv
bkJ1ZmZlck10bD4gbVZlcnRleENvbnZlcnNpb25CdWZmZXJzOwogCiAgICAgc3RkOjp2ZWN0b3I8
SW5kZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtSW5kZXhDb252ZXJzaW9uQnVmZmVyczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9CdWZmZXJNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1tCmluZGV4IDY0YzdkZThhMzI4ZDVmY2NhNjBiNGNjNWVl
ZDI0ZmM2OGI1OTYwMDUuLjgwOTY5OTZlMjg4ZjU5NTEzMjFlYjg4ZmZlZDdkYTBkMDk5MjE0YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9CdWZmZXJNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbQpAQCAtMjMsNiArMjMsMTAgQEAgbmFt
ZXNwYWNlCiAvLyBTdGFydCB3aXRoIGEgZmFpcmx5IHNtYWxsIGJ1ZmZlciBzaXplLiBXZSBjYW4g
aW5jcmVhc2UgdGhpcyBkeW5hbWljYWxseSBhcyB3ZSBjb252ZXJ0IG1vcmUgZGF0YS4KIGNvbnN0
ZXhwciBzaXplX3Qga0NvbnZlcnRlZEVsZW1lbnRBcnJheUJ1ZmZlckluaXRpYWxTaXplID0gMTAy
NCAqIDg7CiAKKy8vIFRoZSBtYXggc2l6ZSB0aGF0IHdlIHdpbGwgdXNlIGJ1ZmZlciBwb29sIGZv
ciBkeW5hbWljIHVwZGF0ZS4KKy8vIElmIHRoZSBidWZmZXIgc2l6ZSBleGNlZWRzIHRoaXMgbGlt
aXQsIHdlIHdpbGwgdXNlIG9ubHkgb25lIGJ1ZmZlciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwb29s
LgorY29uc3RleHByIHNpemVfdCBrRHluYW1pY0J1ZmZlclBvb2xNYXhCdWZTaXplID0gMTI4ICog
MTAyNDsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZT4KIGFuZ2xlOjpSZXN1bHQgR2V0
Rmlyc3RMYXN0SW5kaWNlcyhjb25zdCBJbmRleFR5cGUgKmluZGljZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LApAQCAtMTA1LDcgKzEwOSw3IEBAIGFu
Z2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSkK
IHsKLSAgICByZXR1cm4gc2V0RGF0YUltcGwoY29udGV4dCwgZGF0YSwgaW50ZW5kZWRTaXplLCB1
c2FnZSk7CisgICAgcmV0dXJuIHNldERhdGFJbXBsKGNvbnRleHQsIHRhcmdldCwgZGF0YSwgaW50
ZW5kZWRTaXplLCB1c2FnZSk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXRTdWJE
YXRhKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtMTY0LDcgKzE2OCw4IEBAIGFuZ2xl
OjpSZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
IHsKICAgICBpZiAoYWNjZXNzICYgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJVCkKICAgICB7
Ci0gICAgICAgIEFOR0xFX1RSWShzZXREYXRhSW1wbChjb250ZXh0LCBudWxscHRyLCBzaXplKCks
IG1TdGF0ZS5nZXRVc2FnZSgpKSk7CisgICAgICAgIEFOR0xFX1RSWShzZXREYXRhSW1wbChjb250
ZXh0LCBnbDo6QnVmZmVyQmluZGluZzo6SW52YWxpZEVudW0sIG51bGxwdHIsIHNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5nZXRVc2FnZSgpKSk7CiAgICAgfQog
CiAgICAgaWYgKG1hcFB0cikKQEAgLTE3Myw3ICsxNzgsNyBAQCBhbmdsZTo6UmVzdWx0IEJ1ZmZl
ck10bDo6bWFwUmFuZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGlmICht
QnVmZmVyUG9vbC5nZXRNYXhCdWZmZXJzKCkgPT0gMSkKICAgICAgICAgewogICAgICAgICAgICAg
Km1hcFB0ciA9IG1CdWZmZXItPm1hcFdpdGhPcHQoY29udGV4dE10bCwgKGFjY2VzcyAmIEdMX01B
UF9XUklURV9CSVQpID09IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3MgJiBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUKSArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQp
ICsKICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQpAQCAtMzk1LDYgKzQwMCw3IEBAIHZvaWQgQnVmZmVyTXRsOjpjbGVhckNvbnZlcnNpb25CdWZm
ZXJzKCkKIH0KIAogYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldERhdGFJbXBsKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpbnRlbmRlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKQpAQCAtNDEzLDYgKzQxOSwxMyBAQCBhbmds
ZTo6UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAKICAgICBzaXplX3QgYWRqdXN0ZWRTaXplID0gc3RkOjptYXg8c2l6ZV90PigxLCBpbnRl
bmRlZFNpemUpOwogCisgICAgLy8gRW5zdXJlcyBubyB2YWxpZGF0aW9uIGxheWVyIGlzc3VlcyBp
biBzdGQxNDAgd2l0aCBkYXRhIHR5cGVzIGxpa2UgdmVjMyBiZWluZyAxMiBieXRlcyB2cyAxNgor
ICAgIC8vIGluIE1TTC4KKyAgICBpZiAodGFyZ2V0ID09IGdsOjpCdWZmZXJCaW5kaW5nOjpVbmlm
b3JtKQorICAgIHsKKyAgICAgICAgYWRqdXN0ZWRTaXplID0gcm91bmRVcFBvdzIoYWRqdXN0ZWRT
aXplLCAoc2l6ZV90KTE2KTsKKyAgICB9CisKICAgICBzaXplX3QgbWF4QnVmZmVyczsKICAgICBz
d2l0Y2ggKHVzYWdlKQogICAgIHsKQEAgLTQyNyw3ICs0NDAsNyBAQCBhbmdsZTo6UmVzdWx0IEJ1
ZmZlck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBkeW5hbWljIGJ1ZmZlciwgYWxsb3cgdXAgdG8gMTAg
dXBkYXRlIHBlciBmcmFtZS9lbmNvZGluZyB3aXRob3V0CiAgICAgICAgICAgICAvLyB3YWl0aW5n
IGZvciBHUFUuCi0gICAgICAgICAgICBpZiAoYWRqdXN0ZWRTaXplIDw9IG10bDo6a1NoYXJlZE1l
bUJ1ZmZlck1heEJ1ZlNpemVIaW50KQorICAgICAgICAgICAgaWYgKGFkanVzdGVkU2l6ZSA8PSBr
RHluYW1pY0J1ZmZlclBvb2xNYXhCdWZTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIG1heEJ1ZmZlcnMgPSAxMDsKICAgICAgICAgICAgICAgICBtQnVmZmVyUG9vbC5zZXRBbHdh
eXNVc2VTaGFyZWRNZW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5tbQppbmRl
eCBhNTg2NjcwMWJkNWYwMjU2MjJiNjM1NDI3ODlkNjQ5YTcxNDkyYzBlLi4zZTI5YjRkZDgxMTgy
Yjg4M2U4ZWIyY2YwNzY0Y2NiZmE5MDk4ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW0KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBp
bGVyTXRsLm1tCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQ29tcGlsZXJNdGwuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50
VmFyaWFibGUuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCw3ICsyMSwxNiBAQCBDb21waWxl
ck10bDo6fkNvbXBpbGVyTXRsKCkge30KIAogU2hTaGFkZXJPdXRwdXQgQ29tcGlsZXJNdGw6Omdl
dFRyYW5zbGF0b3JPdXRwdXRUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gU0hfR0xTTF9NRVRB
TF9PVVRQVVQ7CisgICAgaWYgKHNoOjpyZWFkQm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRI
X1NQSVJWIikpCisgICAgeworICAgICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBHTCBvdXRwdXQg
Zmlyc3QsIHdlIGNhbid0IGFjdHVhbGx5CisgICAgICAgIC8vIGdldCBNU0wgY29kZSB1bnRpbCBs
aW5rIHRpbWUuIFRyYW5zbGF0aW9uIHRpbWUgaXMgdG9vIGVhcmx5CisgICAgICAgIHJldHVybiBT
SF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFNIX01TTF9NRVRBTF9PVVRQVVQ7CisgICAgfQogfQogCiB9ICAvLyBuYW1lc3BhY2UgcngK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9Db250ZXh0TXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oCmluZGV4IDE2ODdjOGM5MTQ3YmZiOTdkZjdj
NWE2NDQwMTJiNWQyMjAxM2NlZGMuLjJmMzkzNzFkOTgzM2RhMTM2OTU2MzZmODM0MDIwMzMwY2Vh
YWRjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaApAQCAtMjksOCArMjksOCBA
QCBjbGFzcyBGcmFtZWJ1ZmZlck10bDsKIGNsYXNzIFZlcnRleEFycmF5TXRsOwogY2xhc3MgUHJv
Z3JhbU10bDsKIGNsYXNzIFJlbmRlclRhcmdldE10bDsKLWNsYXNzIFdpbmRvd1N1cmZhY2VNdGw7
Ci1jbGFzcyBUcmFuc2Zvcm1GZWVkYmFja010bDsKK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsK
K2NsYXNzIEJ1ZmZlck10bDsKIAogY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1w
bCwgcHVibGljIG10bDo6Q29udGV4dAogewpAQCAtODUsNyArODUsNyBAQCBjbGFzcyBDb250ZXh0
TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3
RWxlbWVudHNUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0
YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IGJhc2VWZXJ0ZXgpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1l
bnRzSW5zdGFuY2VkQmFzZVZlcnRleEJhc2VJbnN0YW5jZShjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKQEAgLTE1Nyw2ICsxNTcsMTIgQEAg
Y2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdMaW50ICpiYXNlVmVydGljZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R0x1aW50ICpiYXNlSW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgZHJhd2NvdW50KSBvdmVy
cmlkZTsKKyAgICBhbmdsZTo6UmVzdWx0IGRyYXdFbGVtZW50c1NpbXBsZVR5cGVzUHJpbWl0aXZl
UmVzdGFydChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBt
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICAgIC8vIERldmljZSBs
b3NzCiAgICAgZ2w6OkdyYXBoaWNzUmVzZXRTdGF0dXMgZ2V0UmVzZXRTdGF0dXMoKSBvdmVycmlk
ZTsKQEAgLTE5Niw2ICsyMDIsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJ
bXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgY29uc3QgZ2w6OkV4dGVuc2lvbnMgJmdldE5h
dGl2ZUV4dGVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICBjb25zdCBnbDo6TGltaXRhdGlv
bnMgJmdldE5hdGl2ZUxpbWl0YXRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBjb25zdCBQ
cm9ncmFtTXRsICpnZXRQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbVByb2dyYW07IH0KKwogICAg
IC8vIFNoYWRlciBjcmVhdGlvbgogICAgIENvbXBpbGVySW1wbCAqY3JlYXRlQ29tcGlsZXIoKSBv
dmVycmlkZTsKICAgICBTaGFkZXJJbXBsICpjcmVhdGVTaGFkZXIoY29uc3QgZ2w6OlNoYWRlclN0
YXRlICZzdGF0ZSkgb3ZlcnJpZGU7CkBAIC0yNDksMTIgKzI1NywyNCBAQCBjbGFzcyBDb250ZXh0
TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgYW5nbGU6
OlJlc3VsdCBtZW1vcnlCYXJyaWVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZp
ZWxkIGJhcnJpZXJzKSBvdmVycmlkZTsKICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJpZXJC
eVJlZ2lvbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0xiaXRmaWVsZCBiYXJyaWVycykg
b3ZlcnJpZGU7CiAKKyAgICB2b2lkIGludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCk7CisgICAgdm9pZCBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgYW5nbGU6OlJlc3VsdCBvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soCisgICAgICAgIHNpemVf
dCBidWZmZXJDb3VudCwKKyAgICAgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
c0FycmF5PEJ1ZmZlck10bCAqPiAmYnVmZmVycyk7CisKKyAgICB2b2lkIG9uRW5kVHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygp
OworCisgICAgdm9pZCBwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KAorICAgICAg
ICBzaXplX3QgYnVmZmVyQ291bnQsCisgICAgICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMpOwogICAgIC8vIG92ZXJyaWRlIG10
bDo6RXJyb3JIYW5kbGVyCiAgICAgdm9pZCBoYW5kbGVFcnJvcihHTGVudW0gZXJyb3IsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
bGluZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUg
ZXJyb3IsCisgICAgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICplcnJvciwKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBv
dmVycmlkZTsKQEAgLTI3MiwxMiArMjkyLDEyIEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMg
Q29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICB2b2lkIG9uRHJhd0ZyYW1lQnVm
ZmVyQ2hhbmdlZFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJQYXNzQ2hh
bmdlZCk7Ci0gICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKTsKKyAgICB2b2lkIG9uQmFja2J1
ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFN1cmZhY2VNdGxQcm90b2Nv
bCAqYmFja2J1ZmZlcik7CiAKICAgICAvLyBJbnZva2UgYnkgUXVlcnlNdGwKLSAgICBhbmdsZTo6
UmVzdWx0IG9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
UXVlcnlNdGwgKnF1ZXJ5KTsKLSAgICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlFbmQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSk7Ci0gICAgdm9pZCBvbk9jY2x1c2lv
blF1ZXJ5RGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5
KTsKKyAgICBhbmdsZTo6UmVzdWx0IG9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKyAgICB2b2lkIG9uT2NjbHVzaW9uUXVl
cnlFbmRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKyAg
ICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXJ5TXRsICpxdWVyeSk7CiAKICAgICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyaWx5IHBh
dXNlIHRoZW4gcmVzdGFydCBvY2NsdXNpb24gcXVlcnkgZHVyaW5nIGNsZWFyL2JsaXQgd2l0aCBk
cmF3LgogICAgIGJvb2wgaGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSBjb25zdCB7IHJldHVybiBt
T2NjbHVzaW9uUXVlcnk7IH0KQEAgLTM2Nyw3ICszODcsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDog
cHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgeGZiUGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpOwogCiAgICAgYW5nbGU6OlJlc3VsdCBkcmF3VHJpRmFu
QXJyYXlzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBmaXJzdCwKQEAgLTQxNyw2ICs0MzcsMTggQEAgY2xhc3MgQ29u
dGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQpOwogCisg
ICAgdm9pZCBleGVjRHJhd0luc3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRleENvdW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKTsKKworICAgIHZvaWQgZXhlY0RyYXdJ
bmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbmRleENvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRleFR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2Vz
KTsKKwogICAgIHZvaWQgdXBkYXRlRXh0ZW5kZWRTdGF0ZShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpOwogCiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydChGcmFtZWJ1ZmZlck10bCAqZnJhbWVidWZm
ZXJNdGwsCkBAIC00NDIsNiArNDc0LDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250
ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIGFuZ2xlOjpSZXN1bHQgZmlsbERyaXZl
clhGQlVuaWZvcm1zKEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGljZXNQZXJJbnN0YW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBza2lwcGVkSW5z
dGFuY2VzKTsKKyAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAg
IGFuZ2xlOjpSZXN1bHQgaGFuZGxlRGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eURlcHRoQmlhcyhj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0
eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtNDcwLDYgKzUwMyw3
IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNv
bnRleHQKICAgICAgICAgRElSVFlfQklUX1JFTkRFUl9QSVBFTElORSwKICAgICAgICAgRElSVFlf
QklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HLAogICAgICAgICBESVJUWV9CSVRfUkFTVEVSSVpF
Ul9ESVNDQVJELAorICAgICAgICBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMs
CiAgICAgICAgIERJUlRZX0JJVF9NQVgsCiAgICAgfTsKIApAQCAtNDg4LDcgKzUyMiw3IEBAIGNs
YXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQK
ICAgICAgICAgdWludDMyX3QgeGZiQWN0aXZlVW5wYXVzZWQ7CiAgICAgICAgIHVpbnQzMl90IHhm
YlZlcnRpY2VzUGVyRHJhdzsKICAgICAgICAgLy8gTk9URTogRXhwbGljaXQgcGFkZGluZy4gRmls
bCBpbiB3aXRoIHVzZWZ1bCBkYXRhIHdoZW4gbmVlZGVkIGluIHRoZSBmdXR1cmUuCi0gICAgICAg
IGludDMyX3QgcGFkZGluZ1szXTsKKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzBbM107CiAKICAg
ICAgICAgaW50MzJfdCB4ZmJCdWZmZXJPZmZzZXRzWzRdOwogICAgICAgICB1aW50MzJfdCBhY2JC
dWZmZXJPZmZzZXRzWzRdOwpAQCAtNTA4LDEyICs1NDIsMTUgQEAgY2xhc3MgQ29udGV4dE10bCA6
IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogCiAgICAgICAgIHVpbnQz
Ml90IGNvdmVyYWdlTWFzazsKIAotICAgICAgICBmbG9hdCBwYWRkaW5nMlszXTsKKyAgICAgICAg
aW50MzJfdCBlbXVsYXRlZEluc3RhbmNlSUQ7CisKKyAgICAgICAgLy8gTk9URTogRXhwbGljaXQg
cGFkZGluZy4gRmlsbCBpbiB3aXRoIHVzZWZ1bCBkYXRhIHdoZW4gbmVlZGVkIGluIHRoZSBmdXR1
cmUuCisgICAgICAgIGludDMyX3QgcGFkZGluZ18xWzJdOwogICAgIH07CiAKICAgICBzdHJ1Y3Qg
RGVmYXVsdEF0dHJpYnV0ZQogICAgIHsKLSAgICAgICAgdWludDhfdCB2YWx1ZXNbc2l6ZW9mKGZs
b2F0KSAqIDRdOworICAgICAgICBmbG9hdCB2YWx1ZXNbNF07CiAgICAgfTsKIAogICAgIG10bDo6
T2NjbHVzaW9uUXVlcnlQb29sIG1PY2NsdXNpb25RdWVyeVBvb2w7CkBAIC01MjIsNiArNTU5LDEz
IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNv
bnRleHQKICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyIG1SZW5kZXJFbmNvZGVyOwogICAg
IG10bDo6QmxpdENvbW1hbmRFbmNvZGVyIG1CbGl0RW5jb2RlcjsKICAgICBtdGw6OkNvbXB1dGVD
b21tYW5kRW5jb2RlciBtQ29tcHV0ZUVuY29kZXI7CisgICAgLy8gVE9ETyhqY3VubmluZ2hhbSk6
CisgICAgLy8gQ2FjaGUgdGhlIGN1cnJlbnQgZHJhdyBjYWxsJ3MgZmlyc3RWZXJ0ZXggdG8gYmUg
cGFzc2VkIHRvCisgICAgLy8gVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMu
ICBXZSBzaG91bGQgc3dpdGNoCisgICAgLy8gdG8gdXNpbmcgZ2xfQmFzZVZlcnRleCAtPiBiYXNl
X3ZlcnRleCBpbiBNU0wKKyAgICBHTGludCBtWGZiQmFzZVZlcnRleDsKKyAgICAvLyBDYWNoZSB0
aGUgY3VycmVudCBkcmF3IGNhbGwncyB2ZXJ0ZXggY291bnQgYXMgd2VsbCB0byBzdXBwb3J0IGlu
c3RhbmNlZCBkcmF3IGNhbGxzCisgICAgR0x1aW50IG1YZmJWZXJ0ZXhDb3VudFBlckluc3RhbmNl
OwogCiAgICAgLy8gQ2FjaGVkIGJhY2stZW5kIG9iamVjdHMKICAgICBGcmFtZWJ1ZmZlck10bCAq
bURyYXdGcmFtZWJ1ZmZlciA9IG51bGxwdHI7CkBAIC01NTQsNiArNTk4LDggQEAgY2xhc3MgQ29u
dGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIG10
bDo6QnVmZmVyUG9vbCBtVHJpRmFuSW5kZXhCdWZmZXI7CiAgICAgLy8gb25lIGJ1ZmZlciBjYW4g
YmUgcmV1c2VkIGZvciBhbnkgc3RhcnRpbmcgdmVydGV4IGluIERyYXdBcnJheXMoKQogICAgIG10
bDo6QnVmZmVyUmVmIG1UcmlGYW5BcnJheXNJbmRleEJ1ZmZlcjsKKyAgICAvLworICAgIG10bDo6
QnVmZmVyUG9vbCBtUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcjsKIAogICAgIC8vIER1bW15IHRleHR1
cmUgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3JtIGZlZWRiYWNrIG9ubHkgcGFzcy4KICAgICBtdGw6
OlRleHR1cmVSZWYgbUR1bW15WEZCUmVuZGVyVGV4dHVyZTsKQEAgLTU2Miw2ICs2MDgsOSBAQCBj
bGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0
CiAKICAgICBEZWZhdWx0QXR0cmlidXRlIG1EZWZhdWx0QXR0cmlidXRlc1ttdGw6OmtNYXhWZXJ0
ZXhBdHRyaWJzXTsKIAorICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorICAgIHN0
ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBCdWZmZXJNdGwgKj4gbUN1cnJlbnRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnM7CisKICAgICBJbmNvbXBsZXRlVGV4dHVyZVNldCBtSW5jb21wbGV0ZVRleHR1
cmVzOwogICAgIGJvb2wgbUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkID0gZmFsc2U7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0NvbnRleHRNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQppbmRleCAyN2U2OTc4NzAyMWY3OGQ3
YmRiN2VkMGM4MDBlZWE1YzQxMDFhNDZmLi4zMjg1MGM5ODdiZDg5NDJiMTYzODMwOTlkOGJkYjk3
ZjhmOWY0N2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQpAQCAtNDQsMjUg
KzQ0LDYgQEAgY29uc3RleHByIHVpbnQzMl90IGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJG
cmFtZSA9IDA7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1Bl
ckZyYW1lID0gMTA7CiAjZW5kaWYKIAotI2RlZmluZSBBTkdMRV9NVExfWEZCX0RSQVcoRFJBV19Q
Uk9DKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgaWYgKCFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAvKiBOb3JtYWwgZHJhdyBjYWxsICovICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIERSQVdfUFJPQyhmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogRmly
c3QgcGFzczogd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgaW4gdmVydGV4IHNoYWRlciwgZnJhZ21lbnQg
c2hhZGVyIGluYWN0aXZlICovICAgXAotICAgICAgICBEUkFXX1BST0ModHJ1ZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGlmICghbVN0YXRlLmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogU2Vjb25kIHBhc3M6IGZ1bGwg
cmFzdGVyaXphdGlvbjogdmVydGV4IHNoYWRlciArIGZyYWdtZW50IHNoYWRlciBhcmUgYWN0aXZl
LiBcCi0gICAgICAgICAgICAgICBWZXJ0ZXggc2hhZGVyIHdyaXRlcyB0byBzdGFnZSBvdXRwdXQg
YnV0IHdvbid0IHdyaXRlIHRvIFhGQiBidWZmZXJzICovICAgICAgIFwKLSAgICAgICAgICAgIGlu
dmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0KIGFuZ2xl
OjpSZXN1bHQgQWxsb2NhdGVUcmlhbmdsZUZhbkJ1ZmZlckZyb21Qb29sKENvbnRleHRNdGwgKmNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHZlcnRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpCdWZmZXJQb29sICpwb29sLApAQCAtODQsMTEgKzY1LDExIEBAIGFu
Z2xlOjpSZXN1bHQgQWxsb2NhdGVUcmlhbmdsZUZhbkJ1ZmZlckZyb21Qb29sKENvbnRleHRNdGwg
KmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmds
ZTo6UmVzdWx0IEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbChDb250ZXh0TXRsICpjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBpbmRpY2VzVG9SZXNlcnZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXRsOjpCdWZmZXJQb29sICpwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvZmZzZXRPdXQp
CithbmdsZTo6UmVzdWx0IEFsbG9jYXRlQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNU
b1Jlc2VydmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZm
ZXJQb29sICpwb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
QnVmZmVyUmVmICpidWZmZXJPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgKm9mZnNldE91dCkKIHsKICAgICBzaXplX3Qgb2Zmc2V0OwogICAgIHBvb2wt
PnJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoY29udGV4dCk7CkBAIC0xMDUsMTIgKzg2LDcgQEAgYm9v
bCBOZWVkVG9JbnZlcnREZXB0aFJhbmdlKGZsb2F0IG5lYXIsIGZsb2F0IGZhcikKICAgICByZXR1
cm4gbmVhciA+IGZhcjsKIH0KIAotYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUpCi17Ci0gICAgcmV0dXJuIGdsU3RhdGUuaXNUcmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZVVucGF1c2VkKCkgJiYgZ2xTdGF0ZS5pc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxl
ZCgpOwotfQotCi1zdGQ6OnN0cmluZyBDb252ZXJ0TWFya2VyVG9TdHJpbmcoR0xzaXplaSBsZW5n
dGgsIGNvbnN0IGNoYXIgKm1hcmtlcikKK3N0ZDo6c3RyaW5nIENvbnZlcnRNYXJrZXJUb0NwcChH
THNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQogewogICAgIHN0ZDo6c3RyaW5nIGNw
cFN0cmluZzsKICAgICBpZiAobGVuZ3RoID09IDApCkBAIC0xNzMsNyArMTQ5LDcgQEAgY2xhc3Mg
TGluZUxvb3BMYXN0U2VnbWVudEhlbHBlcgogICAgICAgICAgICAgICAgICAgICB7aW5kZXhUeXBl
T3JOb25lLCB2ZXJ0ZXhPckluZGV4Q291bnQsIGluZGljZXMsIG1MaW5lTG9vcEluZGV4QnVmZmVy
LCAwfSkpOwogICAgICAgICB9CiAKLSAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+
Y29tbWl0KG1Db250ZXh0TXRsKSk7CisgICAgICAgIEFOR0xFX1RSWShpbmRleEJ1ZmZlclBvb2wt
PmNvbW1pdChtQ29udGV4dE10bCwgZmFsc2UpKTsKIAogICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CiAgICAgfQpAQCAtMTkxLDcgKzE2Nyw4IEBAIENvbnRleHRNdGw6OkNv
bnRleHRNdGwoY29uc3QgZ2w6OlN0YXRlICZzdGF0ZSwgZ2w6OkVycm9yU2V0ICplcnJvclNldCwg
RGlzcGxheU10CiAgICAgICBtQ21kQnVmZmVyKCZkaXNwbGF5LT5jbWRRdWV1ZSgpKSwKICAgICAg
IG1SZW5kZXJFbmNvZGVyKCZtQ21kQnVmZmVyLCBtT2NjbHVzaW9uUXVlcnlQb29sKSwKICAgICAg
IG1CbGl0RW5jb2RlcigmbUNtZEJ1ZmZlciksCi0gICAgICBtQ29tcHV0ZUVuY29kZXIoJm1DbWRC
dWZmZXIpCisgICAgICBtQ29tcHV0ZUVuY29kZXIoJm1DbWRCdWZmZXIpLAorICAgICAgbVhmYlZl
cnRleENvdW50UGVySW5zdGFuY2UoMCkKIHt9CiAKIENvbnRleHRNdGw6On5Db250ZXh0TXRsKCkg
e30KQEAgLTIwOCw2ICsxODUsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmluaXRpYWxp
emUoKQogICAgIG1MaW5lTG9vcExhc3RTZWdtZW50SW5kZXhCdWZmZXIuaW5pdGlhbGl6ZSh0aGlz
LCAyICogc2l6ZW9mKHVpbnQzMl90KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhUcmlGYW5MaW5lTG9v
cEJ1ZmZlcnNQZXJGcmFtZSk7CisgICAgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuaW5pdGlhbGl6
ZSh0aGlzLCAwLCBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJG
cmFtZSk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0yMjcs
MjMgKzIwNiwyMCBAQCB2b2lkIENvbnRleHRNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjplbnN1cmVJbmNvbXBsZXRl
VGV4dHVyZXNDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIGlmIChB
TkdMRV9MSUtFTFkobUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IGdsOjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNbXSA9IHtnbDo6VGV4dHVyZVR5
cGU6Ol8yRCwgZ2w6OlRleHR1cmVUeXBlOjpfM0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6Ol8yREFycmF5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVUeXBlOjpDdWJlTWFwfTsKLSAgICBmb3IgKGdsOjpUZXh0dXJlVHlwZSB0
ZXhUeXBlIDogc3VwcG9ydGVkVGV4dHVyZVR5cGVzKQorICAgIGlmIChBTkdMRV9VTkxJS0VMWSgh
bUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkKICAgICB7Ci0gICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlOwotICAgICAgICBBTkdMRV9UUlkobUluY29tcGxldGVUZXh0dXJlcy5nZXRJ
bmNvbXBsZXRlVGV4dHVyZShjb250ZXh0LCB0ZXhUeXBlLCBudWxscHRyLCAmdGV4dHVyZSkpOwot
Ci0gICAgICAgIFRleHR1cmVNdGwgKnRleHR1cmVNdGwgICAgICAgICAgICAgICAgICAgICAgPSBt
dGw6OkdldEltcGwodGV4dHVyZSk7Ci0gICAgICAgIHRleHR1cmVNdGwtPmdldE5hdGl2ZVRleHR1
cmUoKS0+Z2V0KCkubGFiZWwgPSBAIkluY29tcGxldGVUZXh0dXJlIjsKKyAgICAgICAgY29uc3Rl
eHByIGdsOjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNbXSA9IHsKKyAgICAgICAg
ICAgIGdsOjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVyZVR5cGU6Ol8yREFycmF5LCBnbDo6
VGV4dHVyZVR5cGU6Ol8zRCwKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcH07
CisgICAgICAgIGZvciAoYXV0byB0ZXhUeXBlIDogc3VwcG9ydGVkVGV4dHVyZVR5cGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIEFO
R0xFX1VOVVNFRF9WQVJJQUJMRSh0ZXh0dXJlKTsKKyAgICAgICAgICAgIEFOR0xFX1RSWSgKKyAg
ICAgICAgICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNv
bnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0ZXh0dXJlKSk7CisgICAgICAgIH0KKyAgICAgICAg
bUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9Ci0gICAgbUluY29t
cGxldGVUZXh0dXJlc0luaXRpYWxpemVkID0gdHJ1ZTsKLQogICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKIH0KIApAQCAtMjgyLDcgKzI1OCwxNyBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZlcnRleChjb25zdCBnbDo6Q29udGV4
dCAqY29udAogICAgICAgICAgICAgdGhpcywgezAsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3Vu
dCksIG1UcmlGYW5BcnJheXNJbmRleEJ1ZmZlciwgMH0pKTsKICAgICB9CiAKLSAgICBBU1NFUlQo
IWdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpOworICAgIGlm
IChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAg
ICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlh
bmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHZvaWQgKj4oMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpOwor
ICAgICAgICAvLyBEcmF3IHdpdGggdGhlIHplcm8gc3RhcnRpbmcgaW5kZXggYnVmZmVyLCBzaGlm
dCB0aGUgdmVydGV4IGluZGV4IHVzaW5nIGJhc2VWZXJ0ZXgKKyAgICAgICAgLy8gaW5zdGFuY2Vk
IGRyYXc6CisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZl
cnRleChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlw
ZVVJbnQzMiwgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgaW5zdGFuY2VzLCBmaXJzdCk7Cisg
ICAgfQogCiAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9k
ZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHZvaWQgKj4oMCksCkBAIC0zMTEsMTYgKzI5NywyMyBAQCBhbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNMZWdhY3koY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgIHRoaXMsIHtzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmlyc3QpLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oY291bnQpLCBnZW5JZHhCdWZmZXIsCiAgICAgICAgICAgICAgICBn
ZW5JZHhCdWZmZXJPZmZzZXR9KSk7CiAKLSAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVy
LmNvbW1pdCh0aGlzKSk7CisgICAgQU5HTEVfVFJZKG1UcmlGYW5JbmRleEJ1ZmZlci5jb21taXQo
dGhpcywgZmFsc2UpKTsKIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29u
dGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlKSk7CiAKKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5z
dGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRl
eFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVfVFJZ
KHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0
LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
CiAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVuY29kZXIu
ZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1U
TEluZGV4VHlwZVVJbnQzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhC
dWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCk7CisgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2Vk
KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVV
SW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4
QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQpAQCAtMzY4LDIyICszNjEsMjcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpkcmF3TGluZUxvb3BBcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgdWlu
dDMyX3QgZ2VuSWR4QnVmZmVyT2Zmc2V0OwogICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudCA9
IGNvdW50ICsgMTsKIAotICAgIEFOR0xFX1RSWShBbGxvY2F0ZUxpbmVMb29wQnVmZmVyRnJvbVBv
b2wodGhpcywgZ2VuSW5kaWNlc0NvdW50LCAmbUxpbmVMb29wSW5kZXhCdWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyLCAmZ2Vu
SWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wo
dGhpcywgZ2VuSW5kaWNlc0NvdW50LCAmbUxpbmVMb29wSW5kZXhCdWZmZXIsICZnZW5JZHhCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9m
ZnNldCkpOwogICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVM
aW5lTG9vcEJ1ZmZlckZyb21BcnJheXMoCiAgICAgICAgIHRoaXMsIHtzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZmlyc3QpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY291bnQpLCBnZW5JZHhCdWZmZXIs
CiAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXJPZmZzZXR9KSk7CiAKLSAgICBBTkdMRV9UUlko
bUxpbmVMb29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBBTkdMRV9UUlkobUxpbmVM
b29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CiAKLSAgICBBU1NFUlQoIWdldFN0
YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpOworICAgIGlmIChtU3Rh
dGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBB
TkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lTG9vcCwg
Zmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCB0cnVlKSk7CiAKKyAgICAg
ICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdl
bkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7
CisgICAgfQogICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1v
ZGU6OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgZmFsc2Up
KTsKIAotICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2
ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4
QnVmZmVyT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RhbmNlcyk7CisgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVM
aW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5z
dGFuY2VzKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTQx
MywyMSArNDExLDMzIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0FycmF5c0ltcGwo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5
cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CiAKLSNkZWZpbmUgRFJBV19HRU5FUklD
X0FSUkFZKHhmYlBhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQs
IG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52
YWxpZEVudW0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHhmYlBhc3MpKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoaW5z
dGFuY2VzID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZy
b20gbm9ybWFsIGRyYXdBcnJheXMoKSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291
bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZCht
dGxUeXBlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlQ291bnQpOyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgp
KQorICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCBmaXJz
dCwgY291bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJh
d0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKKworICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBmcm9tIG5vcm1hbCBkcmF3QXJyYXlzKCkKKyAgICAgICAgICAgIG1SZW5kZXJF
bmNvZGVyLmRyYXcobXRsVHlwZSwgZmlyc3QsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4ZWNEcmF3SW5zdGFuY2VkKG10bFR5cGUsIGZp
cnN0LCBjb3VudCwgaW5zdGFuY2VDb3VudCk7CisgICAgICAgIH0KICAgICB9CisgICAgQU5HTEVf
VFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywgZ2w6
OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAg
bnVsbHB0ciwgZmFsc2UpKTsKIAotICAgIEFOR0xFX01UTF9YRkJfRFJBVyhEUkFXX0dFTkVSSUNf
QVJSQVkpCisgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIGZyb20gbm9ybWFsIGRyYXdBcnJheXMoKQorICAgICAgICBtUmVuZGVy
RW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGV4ZWNEcmF3SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VDb3VudCk7CisgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQpAQCAtNDgwLDE2ICs0OTAsMjUgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3
VHJpRmFuRWxlbWVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9mZnNl
dCwgJmdlbkluZGljZXNDb3VudCkpOwogCiAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCkt
PmdldFV0aWxzKCkuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheSgKLSAgICAg
ICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhC
dWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9KSk7CisgICAgICAgICAgICB0aGlzLCB7dHlw
ZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBwcmlt
aXRpdmVSZXN0YXJ0fSwKKyAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKworICAgICAg
ICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOworCisg
ICAgICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlBy
aW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLCB0cnVlKSk7CiAKLSAgICAgICAg
QU5HTEVfVFJZKG1UcmlGYW5JbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgICAgICAgICAg
ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgZ2VuSW5k
aWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7
CisgICAgICAgIH0KIAogICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLCBmYWxzZSkpOwogCi0gICAgICAgIG1S
ZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVUcmlhbmds
ZSwgZ2VuSW5kaWNlc0NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5j
ZXMpOworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBp
bnN0YW5jZXMpOwogCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAg
ICB9ICAvLyBpZiAoY291bnQgPiAzKQpAQCAtNTMyLDI3ICs1NTEsODcgQEAgYW5nbGU6OlJlc3Vs
dCBDb250ZXh0TXRsOjpkcmF3TGluZUxvb3BFbGVtZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKICAgICAgICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zmc2V0OwogICAgICAgICB1aW50
MzJfdCByZXNlcnZlZEluZGljZXMgPSBjb3VudCAqIDI7CiAgICAgICAgIHVpbnQzMl90IGdlbklu
ZGljZXNDb3VudDsKLSAgICAgICAgQU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9t
UG9vbCh0aGlzLCByZXNlcnZlZEluZGljZXMsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVy
LCAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZl
ckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyLCAm
Z2VuSWR4QnVmZmVyT2Zmc2V0KSk7CiAKICAgICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+
Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAg
ICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4
QnVmZmVyT2Zmc2V0LCBwcmltaXRpdmVSZXN0YXJ0fSwKICAgICAgICAgICAgICZnZW5JbmRpY2Vz
Q291bnQpKTsKIAotICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZmZXIuY29tbWl0
KHRoaXMpKTsKKyAgICAgICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVyLmNvbW1pdCh0
aGlzLCBmYWxzZSkpOworCisgICAgICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0Fj
dGl2ZVVucGF1c2VkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFOR0xFX1RSWShzZXR1cERy
YXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAwLCBjb3VudCwgaW5zdGFu
Y2VzLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLCB0cnVl
KSk7CisKKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVU
eXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZl
ck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFOR0xFX1RSWShzZXR1
cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAwLCBjb3VudCwgaW5z
dGFuY2VzLCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIGZhbHNl
KSk7CiAKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJp
bWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZl
ciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0YW5jZXMpOworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQo
TVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVV
SW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdl
bklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKIAogICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CiAgICAgfSAgLy8gaWYgKGNvdW50ID49IDIpCiAgICAgcmV0dXJuIGRy
YXdFbGVtZW50c0luc3RhbmNlZChjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXMsIGNv
dW50LCB0eXBlLCBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dGFuY2VzKTsKIH0KK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2ltcGxl
VHlwZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5k
aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzKQoreworCisgICAgbXRsOjpCdWZmZXJS
ZWYgZ2VuSWR4QnVmZmVyOworICAgIHVpbnQzMl90IGdlbklkeEJ1ZmZlck9mZnNldDsKKyAgICB1
aW50MzJfdCByZXNlcnZlZEluZGljZXMgPSBjb3VudDsKKyAgICBzaXplX3QgZ2VuSW5kaWNlc0Nv
dW50OworICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVk
SW5kaWNlcywgJm1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAg
ICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAgICBjYXNlIGdsOjpQcmltaXRpdmVNb2RlOjpQ
b2ludHM6CisgICAgICAgICAgICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcigKKyAgICAgICAgICAgICAgICB0aGlz
LCB7dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0
LCB0cnVlfSwKKyAgICAgICAgICAgICAgICAmZ2VuSW5kaWNlc0NvdW50KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXM6CisgICAgICAg
ICAgICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZl
UmVzdGFydExpbmVzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwg
aW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAg
ICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZXM6CisgICAgICAgICAgICBBTkdMRV9U
UlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFu
Z2xlc0J1ZmZlcigKKyAgICAgICAgICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMs
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCB0cnVlfSwKKyAgICAgICAgICAgICAg
ICAmZ2VuSW5kaWNlc0NvdW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6U3RvcDsKKyAgICB9CisgICAgQU5HTEVfVFJZKG1QcmltaXRpdmVSZXN0YXJ0QnVm
ZmVyLmNvbW1pdCh0aGlzKSk7CisgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxUeXBlID0gbXRsOjpH
ZXRQcmltaXRpdmVUeXBlKG1vZGUpOworICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDApLCB0cnVlKSk7CisK
KyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10bFR5cGUsICh1aW50MzJfdClnZW5J
bmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwor
ICAgIH0KKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvdW50LCBp
bnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CisKKyAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQobXRsVHlwZSwgKHVpbnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBl
VUludDMyLCBnZW5JZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKK30KIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbXBs
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCkBAIC01NjMsNyArNjQyLDYg
QEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbXBsKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogewogICAgIC8vIFJlYWwgaW5zdGFuY2VzIGNvdW50LiBaZXJvIG1l
YW5zIHRoaXMgaXMgbm90IGluc3RhbmNlZCBkcmF3LgogICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3Vu
dCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7Ci0KICAgICBpZiAobUN1bGxBbGxQb2x5Z29u
cyAmJiBnbDo6SXNQb2x5Z29uTW9kZShtb2RlKSkKICAgICB7CiAgICAgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTU3NywxOCArNjU1LDM5IEBAIGFuZ2xlOjpSZXN1bHQg
Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICB7CiAgICAgICAgIHJldHVybiBkcmF3TGluZUxvb3BFbGVtZW50cyhjb250ZXh0LCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CiAgICAgfQotCiAgICAgbXRsOjpCdWZm
ZXJSZWYgaWR4QnVmZmVyOwogICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgICAgICAgICAgICAg
PSAwOwogICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGNvbnZlcnRlZFR5cGUgPSB0eXBlOworICAg
IHNpemVfdCBjb252ZXJ0ZWRDb3VudCAgICAgICAgICAgICAgPSAoc2l6ZV90KWNvdW50OwogCi0g
ICAgQU5HTEVfVFJZKG1WZXJ0ZXhBcnJheS0+Z2V0SW5kZXhCdWZmZXIoY29udGV4dCwgdHlwZSwg
Y291bnQsIGluZGljZXMsICZpZHhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmNvbnZlcnRlZE9mZnNldCwgJmNvbnZlcnRlZFR5cGUpKTsKKyAgICBB
TkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2Rl
LCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmY29udmVydGVkT2Zmc2V0LCAmY29udmVydGVkVHlwZSwgJmNvbnZl
cnRlZENvdW50KSk7CiAKICAgICBBU1NFUlQoaWR4QnVmZmVyKTsKICAgICBBU1NFUlQoKGNvbnZl
cnRlZE9mZnNldCAlIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50KSA9PSAwKTsKKyAg
ICB1aW50MzJfdCBjb252ZXJ0ZWRDb3VudGkzMiA9ICh1aW50MzJfdCljb252ZXJ0ZWRDb3VudDsK
KyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAg
IHsKKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb252ZXJ0
ZWRDb3VudGkzMiwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCB0cnVlKSk7CisgICAgICAgIE1U
TFByaW1pdGl2ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKIAot
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNl
cywgdHlwZSwgaW5kaWNlcywgZmFsc2UpKTsKKyAgICAgICAgTVRMSW5kZXhUeXBlIG10bElkeFR5
cGUgPSBtdGw6OkdldEluZGV4VHlwZShjb252ZXJ0ZWRUeXBlKTsKKworICAgICAgICBpZiAoaW5z
dGFuY2VzID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vcm1hbCBkcmF3CisgICAg
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3Vu
dGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydGVkT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluc3RhbmNlZCBkcmF3CisgICAgICAgICAgICBleGVj
RHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5
cGUsIGlkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0ZWRPZmZzZXQsIGluc3RhbmNlQ291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgQU5H
TEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb252ZXJ0ZWRDb3VudGkzMiwgaW5z
dGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBmYWxzZSkpOwogCiAgICAgTVRMUHJpbWl0aXZlVHlwZSBt
dGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOwogCkBAIC01OTcsMTMgKzY5Niwx
NCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQogICAgIHsKICAgICAg
ICAgLy8gTm9ybWFsIGRyYXcKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQobXRs
VHlwZSwgY291bnQsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0KTsKKyAg
ICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRp
MzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udmVydGVkT2Zmc2V0KTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAg
Ly8gSW5zdGFuY2VkIGRyYXcKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0
YW5jZWQobXRsVHlwZSwgY291bnQsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5j
ZUNvdW50KTsKKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10bFR5cGUsIGNvbnZl
cnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsIGNvbnZlcnRlZE9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ291bnQpOwogICAgIH0KIAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTYyNSw3ICs3MjUsNiBAQCBh
bmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0Jhc2VWZXJ0ZXgoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNlVmVydGV4KQogewotICAgIC8vIE5P
VEUoaHFsZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6U3RvcDsKIH0KQEAgLTY0OSwxMCArNzQ4LDkgQEAgYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0
ICpjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHR5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqaW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0
YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIK
ICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9
CkBAIC02NjksNyArNzY3LDYgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKGNvbnN0IGdsOjoKICAgICBVTklNUExF
TUVOVEVEKCk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9Ci0KIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQ
cmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMdWludCBzdGFydCwKQEAgLTY5MCw3ICs3ODcsNiBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCiB7Ci0gICAgLy8gTk9U
RShocWxlKTogRVMgMy4yCiAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpTdG9wOwogfQpAQCAtNzEzLDYgKzgwOSw2NCBAQCBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmRyYXdFbGVtZW50c0luZGlyZWN0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQogCit2b2lkIENvbnRleHRNdGw6OmV4
ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRleENvdW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpCit7CisgICAg
aWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJh
dy5lbmFibGVkKQorICAgIHsKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZChw
cmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcocHJpbWl0aXZl
VHlwZSwgdmVydGV4U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBp
bnN0ID0gMTsgaW5zdCA8IGluc3RhbmNlczsgKytpbnN0KQorICAgICAgICB7CisgICAgICAgICAg
ICBtRHJpdmVyVW5pZm9ybXMuZW11bGF0ZWRJbnN0YW5jZUlEID0gaW5zdDsKKworICAgICAgICAg
ICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10bDo6a0Ry
aXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKKworICAgICAgICAgICAgbVZlcnRleEFycmF5LT5l
bXVsYXRlSW5zdGFuY2VEcmF3U3RlcCgmbVJlbmRlckVuY29kZXIsIGluc3QpOworCisgICAgICAg
ICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KHByaW1pdGl2ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0
ZXhDb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQgdG8gemVy
bworICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVy
RW5jb2RlciwgMCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6OmV4ZWNEcmF3SW5kZXhl
ZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbmRleENvdW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlIGluZGV4VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6
QnVmZmVyUmVmICZpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpCit7CisgICAgaWYgKGdldERpc3Bs
YXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVkKQor
ICAgIHsKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQocHJpbWl0
aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5k
ZXhlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLCBi
dWZmZXJPZmZzZXQpOworICAgICAgICBmb3IgKHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5z
dGFuY2VzOyArK2luc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5l
bXVsYXRlZEluc3RhbmNlSUQgPSBpbnN0OworCisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5n
SW5kZXgpOworCisgICAgICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdT
dGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVy
LmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUsIGluZGV4Q291bnQsIGluZGV4VHlwZSwgaW5kZXhC
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJPZmZz
ZXQpOworICAgICAgICB9CisgICAgICAgIC8vIFJlc2V0IGluc3RhbmNlIElEIHRvIHplcm8KKyAg
ICAgICAgbVZlcnRleEFycmF5LT5lbXVsYXRlSW5zdGFuY2VEcmF3U3RlcCgmbVJlbmRlckVuY29k
ZXIsIDApOworICAgIH0KK30KKwogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjptdWx0aURyYXdB
cnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xpbnQgKmZpcnN0cywKQEAgLTgw
MiwxNSArOTU2LDE1IEBAIHN0ZDo6c3RyaW5nIENvbnRleHRNdGw6OmdldFJlbmRlcmVyRGVzY3Jp
cHRpb24oKSBjb25zdAogLy8gRVhUX2RlYnVnX21hcmtlcgogYW5nbGU6OlJlc3VsdCBDb250ZXh0
TXRsOjppbnNlcnRFdmVudE1hcmtlcihHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2Vy
KQogeworICAgIG1DbWRCdWZmZXIuaW5zZXJ0RGVidWdTaWduKENvbnZlcnRNYXJrZXJUb0NwcChs
ZW5ndGgsIG1hcmtlcikpOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0K
IAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIoR0xzaXplaSBsZW5n
dGgsIGNvbnN0IGNoYXIgKm1hcmtlcikKIHsKLSAgICBtQ21kQnVmZmVyLnB1c2hEZWJ1Z0dyb3Vw
KENvbnZlcnRNYXJrZXJUb1N0cmluZyhsZW5ndGgsIG1hcmtlcikpOworICAgIG1DbWRCdWZmZXIu
cHVzaERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQotCiBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OnBvcEdyb3VwTWFya2VyKCkKIHsKICAgICBtQ21kQnVmZmVyLnBvcERlYnVnR3JvdXAo
KTsKQEAgLTExNTUsMTAgKzEzMDksMTIgQEAgUXVlcnlJbXBsICpDb250ZXh0TXRsOjpjcmVhdGVR
dWVyeShnbDo6UXVlcnlUeXBlIHR5cGUpCiB7CiAgICAgcmV0dXJuIG5ldyBRdWVyeU10bCh0eXBl
KTsKIH0KKwogRmVuY2VOVkltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZUZlbmNlTlYoKQogewogICAg
IHJldHVybiBuZXcgRmVuY2VOVk10bCgpOwogfQorCiBTeW5jSW1wbCAqQ29udGV4dE10bDo6Y3Jl
YXRlU3luYygpCiB7CiAgICAgcmV0dXJuIG5ldyBTeW5jTXRsKCk7CkBAIC0xMjA1LDYgKzEzNjEs
NjkgQEAgT3ZlcmxheUltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZU92ZXJsYXkoY29uc3QgZ2w6Ok92
ZXJsYXlTdGF0ZSAmc3RhdGUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQgQ29udGV4
dE10bDo6aW52YWxpZGF0ZUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKQoreworICAg
IGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNr
LmVuYWJsZWQpCisgICAgeworICAgICAgICBtRGlydHlCaXRzLnNldChESVJUWV9CSVRfVFJBTlNG
T1JNX0ZFRURCQUNLX0JVRkZFUlMpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0TXRsOjpvblRy
YW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorICAgIHsKKyAg
ICAgICAgaW52YWxpZGF0ZURyaXZlclVuaWZvcm1zKCk7CisgICAgfQorfQorCithbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6Om9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKyAgICBzaXplX3QgYnVm
ZmVyQ291bnQsCisgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1
ZmZlck10bCAqPiAmYnVmZmVycykKK3sKKyAgICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFu
Z2VkKCk7CisKKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwg
YnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisgICAgeworICAgICAgICBpZiAobUN1cnJlbnRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY291bnQoYnVmZmVyc1tidWZmZXJJbmRleF0pICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVuZEVuY29kaW5nKG1SZW5kZXJFbmNvZGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcG9wdWxhdGVUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlclNldChidWZmZXJDb3VudCwgYnVmZmVycyk7CisKKyAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK3ZvaWQgQ29udGV4dE10bDo6cG9wdWxhdGVU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCgKKyAgICBzaXplX3QgYnVmZmVyQ291bnQsCisgICAg
Y29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmYnVm
ZmVycykKK3sKKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwg
YnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisgICAgeworICAgICAgICBtQ3VycmVudFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycy5pbnNlcnQoYnVmZmVyc1tidWZmZXJJbmRleF0pOworICAgIH0K
K30KKwordm9pZCBDb250ZXh0TXRsOjpvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICBp
ZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5l
bmFibGVkKQorICAgIHsKKyAgICAgICAgb25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgp
OworICAgIH0KK30KKworYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvblBhdXNlVHJhbnNmb3Jt
RmVlZGJhY2soKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0
ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBvblRyYW5zZm9ybUZl
ZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKK30KKwogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkaXNwYXRjaENvbXB1dGUo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMdWludCBudW1Hcm91cHNZLApAQCAtMTMzMSw2ICsxNTUwLDEx
IEBAIGNvbnN0IG10bDo6Rm9ybWF0ICZDb250ZXh0TXRsOjpnZXRQaXhlbEZvcm1hdChhbmdsZTo6
Rm9ybWF0SUQgYW5nbGVGb3JtYXRJZCkgY29uCiAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0
UGl4ZWxGb3JtYXQoYW5nbGVGb3JtYXRJZCk7CiB9CiAKK2NvbnN0IG10bDo6Rm9ybWF0Q2FwcyAm
Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBtdGxGb3JtYXQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyht
dGxGb3JtYXQpOworfQorCiAvLyBTZWUgbXRsOjpGb3JtYXRUYWJsZTo6Z2V0VmVydGV4Rm9ybWF0
KCkKIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZDb250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQo
YW5nbGU6OkZvcm1hdElEIGFuZ2xlRm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGlnaHRseVBhY2tlZCkgY29uc3QKQEAg
LTEzMzgsMTEgKzE1NjIsNiBAQCBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmQ29udGV4dE10bDo6
Z2V0VmVydGV4Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdAogICAgIHJldHVybiBn
ZXREaXNwbGF5KCktPmdldFZlcnRleEZvcm1hdChhbmdsZUZvcm1hdElkLCB0aWdodGx5UGFja2Vk
KTsKIH0KIAotY29uc3QgbXRsOjpGb3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRpdmVGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0IG10bEZvcm1hdCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKG10bEZvcm1hdCk7Ci19Ci0KIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqKnRleHR1cmVPdXQpCkBAIC0xMzYyLDYgKzE1ODEs
MjIgQEAgdm9pZCBDb250ZXh0TXRsOjplbmRSZW5kZXJFbmNvZGluZyhtdGw6OlJlbmRlckNvbW1h
bmRFbmNvZGVyICplbmNvZGVyKQogCiAgICAgLy8gUmVzb2x2ZSB2aXNpYmlsaXR5IHJlc3VsdHMK
ICAgICBtT2NjbHVzaW9uUXVlcnlQb29sLnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyh0aGlzKTsK
KworICAgIG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLmNsZWFyKCk7CisKKyAgICAv
LyBSZXNldCBzZXJpYWxzIGZvciBYRkIgaWYgYWN0aXZlLgorICAgIGlmIChtU3RhdGUuaXNUcmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBjb25zdCBnbDo6
UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBtU3RhdGUuZ2V0UHJvZ3JhbUV4ZWN1dGFi
bGUoKTsKKyAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworICAgICAgICBzaXplX3QgeGZiQnVm
ZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7
CisKKyAgICAgICAgVHJhbnNmb3JtRmVlZGJhY2tNdGwgKnRyYW5zZm9ybUZlZWRiYWNrTXRsID0K
KyAgICAgICAgICAgIG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRi
YWNrKCkpOworCisgICAgICAgIHBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJTZXQoeGZi
QnVmZmVyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKSk7CisgICAgfQogfQogCiB2
b2lkIENvbnRleHRNdGw6OmVuZEVuY29kaW5nKGJvb2wgZm9yY2VTYXZlUmVuZGVyUGFzc0NvbnRl
bnQpCkBAIC0xMzkwLDcgKzE2MjUsNyBAQCB2b2lkIENvbnRleHRNdGw6OmVuZEVuY29kaW5nKGJv
b2wgZm9yY2VTYXZlUmVuZGVyUGFzc0NvbnRlbnQpCiAKIHZvaWQgQ29udGV4dE10bDo6Zmx1c2hD
b21tYW5kQnVmZXIoKQogewotICAgIGlmICghbUNtZEJ1ZmZlci5yZWFkeSgpKQorICAgIGlmICgh
bUNtZEJ1ZmZlci52YWxpZCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0
NTQsNiArMTY4OSwyNyBAQCBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpDb250ZXh0TXRsOjpn
ZXRSZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIoY29uc3QgbXRsOjpSZQogICAgIC8vIE5lZWQgdG8g
cmUtYXBwbHkgZXZlcnl0aGluZyBvbiBuZXh0IGRyYXcgY2FsbC4KICAgICBtRGlydHlCaXRzLnNl
dCgpOwogCisgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGdldERpc3BsYXkoKS0+Z2V0
TWV0YWxEZXZpY2UoKTsKKyAgICBpZiAobXRsOjpEZXZpY2VIYXNNYXhpbXVtUmVuZGVyVGFyZ2V0
U2l6ZShtZXRhbERldmljZSkpCisgICAgeworICAgICAgICBNVExSZW5kZXJQYXNzRGVzY3JpcHRv
ciAqb2JqQ0Rlc2MgPSBbTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgcmVuZGVyUGFzc0Rlc2NyaXB0
b3JdOworICAgICAgICBkZXNjLmNvbnZlcnRUb01ldGFsRGVzYyhvYmpDRGVzYyk7CisgICAgICAg
IE5TVUludGVnZXIgbWF4U2l6ZSA9IG10bDo6R2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmlj
ZUluQnl0ZXMobWV0YWxEZXZpY2UpOworICAgICAgICBOU1VJbnRlZ2VyIHJlbmRlclRhcmdldFNp
emUgPQorICAgICAgICAgICAgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvcihvYmpDRGVzYywgdGhpcywgbWV0YWxEZXZpY2UpOworICAgICAgICBpZiAocmVuZGVy
VGFyZ2V0U2l6ZSA+IG1heFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpl
cnJvclN0cmluZyA9CisgICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJUaGlzIHNldCBvZiByZW5kZXIgdGFyZ2V0cyByZXF1aXJlcyAlbHUgYnl0ZXMgb2YgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4g
VGhpcyBkZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpcmVuZGVyVGFyZ2V0U2l6ZSwgKHVu
c2lnbmVkIGxvbmcpbWF4U2l6ZV07CisgICAgICAgICAgICBOU0Vycm9yICplcnIgPSBbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46QCJNVExWYWxpZGF0aW9uRXJyb3IiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6LTEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpAe05TTG9jYWxpemVkRGVzY3JpcHRp
b25LZXkgOiBlcnJvclN0cmluZ31dOworICAgICAgICAgICAgdGhpcy0+aGFuZGxlRXJyb3IoZXJy
LCBfX0ZJTEVfXywgQU5HTEVfRlVOQ1RJT04sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuICZtUmVuZGVyRW5jb2Rlci5yZXN0
YXJ0KGRlc2MpOwogfQogCkBAIC0xNDY3LDExICsxNzIzLDEyIEBAIG10bDo6UmVuZGVyQ29tbWFu
ZEVuY29kZXIgKkNvbnRleHRNdGw6OmdldFRleHR1cmVSZW5kZXJDb21tYW5kRW5jb2RlcigKIAog
ICAgIG10bDo6UmVuZGVyUGFzc0Rlc2MgcnBEZXNjOwogCi0gICAgcnBEZXNjLmNvbG9yQXR0YWNo
bWVudHNbMF0udGV4dHVyZSAgICAgID0gdGV4dHVyZVRhcmdldDsKLSAgICBycERlc2MuY29sb3JB
dHRhY2htZW50c1swXS5sZXZlbCAgICAgICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOwotICAg
IHJwRGVzYy5jb2xvckF0dGFjaG1lbnRzWzBdLnNsaWNlT3JEZXB0aCA9IGluZGV4Lmhhc0xheWVy
KCkgPyBpbmRleC5nZXRMYXllckluZGV4KCkgOiAwOwotICAgIHJwRGVzYy5udW1Db2xvckF0dGFj
aG1lbnRzICAgICAgICAgICAgICA9IDE7Ci0gICAgcnBEZXNjLnNhbXBsZUNvdW50ICAgICAgICAg
ICAgICAgICAgICAgID0gdGV4dHVyZVRhcmdldC0+c2FtcGxlcygpOworICAgIHJwRGVzYy5jb2xv
ckF0dGFjaG1lbnRzWzBdLnJlbmRlclRhcmdldC0+dGV4dHVyZSA9IHRleHR1cmVUYXJnZXQ7Cisg
ICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT5sZXZlbCAgID0gaW5k
ZXguZ2V0TmF0aXZlTGV2ZWwoKTsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5yZW5k
ZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA9CisgICAgICAgIGluZGV4Lmhhc0xheWVyKCkgPyBpbmRl
eC5nZXRMYXllckluZGV4KCkgOiAwOworICAgIHJwRGVzYy5udW1Db2xvckF0dGFjaG1lbnRzID0g
MTsKKyAgICBycERlc2Muc2FtcGxlQ291bnQgICAgICAgICA9IHRleHR1cmVUYXJnZXQtPnNhbXBs
ZXMoKTsKIAogICAgIHJldHVybiBnZXRSZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIocnBEZXNjKTsK
IH0KQEAgLTE1MzYsMTIgKzE3OTMsMTIgQEAgbXRsOjpDb21wdXRlQ29tbWFuZEVuY29kZXIgKkNv
bnRleHRNdGw6OmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpCiAKIHZvaWQgQ29udGV4dE10bDo6
ZW5zdXJlQ29tbWFuZEJ1ZmZlclJlYWR5KCkKIHsKLSAgICBpZiAoIW1DbWRCdWZmZXIucmVhZHko
KSkKKyAgICBpZiAoIW1DbWRCdWZmZXIudmFsaWQoKSkKICAgICB7CiAgICAgICAgIG1DbWRCdWZm
ZXIucmVzdGFydCgpOwogICAgIH0KIAotICAgIEFTU0VSVChtQ21kQnVmZmVyLnJlYWR5KCkpOwor
ICAgIEFTU0VSVChtQ21kQnVmZmVyLnZhbGlkKCkpOwogfQogCiB2b2lkIENvbnRleHRNdGw6OnVw
ZGF0ZVZpZXdwb3J0KEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlck10bCwKQEAgLTE2NzcsNyAr
MTkzNCw3IEBAIHZvaWQgQ29udGV4dE10bDo6b25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgfQogfQogCi12b2lkIENvbnRleHRNdGw6
Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1
cmZhY2VNdGwgKmJhY2tidWZmZXIpCit2b2lkIENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1
ZmZlcikKIHsKICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgICAgPSBnZXRTdGF0ZSgpOwog
ICAgIEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlciA9IG10bDo6R2V0SW1wbChnbFN0YXRlLmdl
dERyYXdGcmFtZWJ1ZmZlcigpKTsKQEAgLTE2ODYsMTAgKzE5NDMsMTMgQEAgdm9pZCBDb250ZXh0
TXRsOjpvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBXaW5k
b3dTdXJmYWNlTXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHVwZGF0ZVZpZXdwb3J0
KGZyYW1lYnVmZmVyLCBnbFN0YXRlLmdldFZpZXdwb3J0KCksIGdsU3RhdGUuZ2V0TmVhclBsYW5l
KCksCisgICAgICAgICAgICAgICAgICAgZ2xTdGF0ZS5nZXRGYXJQbGFuZSgpKTsKKyAgICB1cGRh
dGVTY2lzc29yKGdsU3RhdGUpOwogICAgIG9uRHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNv
bnRleHQsIGZyYW1lYnVmZmVyLCB0cnVlKTsKIH0KIAotYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
Ojpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5
TXRsICpxdWVyeSkKK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUJl
Z2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCiB7CiAgICAg
QVNTRVJUKG1PY2NsdXNpb25RdWVyeSA9PSBudWxscHRyKTsKICAgICBtT2NjbHVzaW9uUXVlcnkg
PSBxdWVyeTsKQEAgLTE3MDYsNyArMTk2Niw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6
b25PY2NsdXNpb25RdWVyeUJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyCiAK
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9Ci12b2lkIENvbnRleHRNdGw6
Om9uT2NjbHVzaW9uUXVlcnlFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRs
ICpxdWVyeSkKK3ZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCiB7CiAgICAgQVNTRVJUKG1PY2Ns
dXNpb25RdWVyeSA9PSBxdWVyeSk7CiAKQEAgLTE3MTgsNyArMTk3OCw3IEBAIHZvaWQgQ29udGV4
dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVl
cnlNdGwgKnF1ZXJ5CiAKICAgICBtT2NjbHVzaW9uUXVlcnkgPSBudWxscHRyOwogfQotdm9pZCBD
b250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
RGVzdHJveWVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCiB7
CiAgICAgaWYgKHF1ZXJ5LT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpLmVtcHR5KCkp
CiAgICAgewpAQCAtMTcyNiw3ICsxOTg2LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lv
blF1ZXJ5RGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnEKICAg
ICB9CiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSA9PSBxdWVyeSkKICAgICB7Ci0gICAgICAgIG9u
T2NjbHVzaW9uUXVlcnlFbmQoY29udGV4dCwgcXVlcnkpOworICAgICAgICBvbk9jY2x1c2lvblF1
ZXJ5RW5kZWQoY29udGV4dCwgcXVlcnkpOwogICAgIH0KICAgICBtT2NjbHVzaW9uUXVlcnlQb29s
LmRlYWxsb2NhdGVRdWVyeU9mZnNldCh0aGlzLCBxdWVyeSk7CiB9CkBAIC0xNzcwLDIwICsyMDMw
LDYgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzdGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5k
ZXJQYXNzKFF1ZXJ5TXRsICpxdWVyeSwgYm9vbAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKIH0KIAotdm9pZCBDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBUcmFuc2Zvcm1GZWVkYmFja010bCAqeGZiKQot
ewotICAgIC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJlbnQgcmVuZGVyIHBhc3Mg
dG8gZW5hYmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCi0gICAgLy8gYnVmZmVycyBjb3Vs
ZCBiZSB1c2VkIGFzIHZlcnRleCBpbnB1dC4gQ29uc2lkZXIgYSBiZXR0ZXIgYXBwcm9hY2guCi0g
ICAgZW5kRW5jb2RpbmcodHJ1ZSk7Ci19Ci0KLXZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1G
ZWVkYmFja0luYWN0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBUcmFuc2Zvcm1GZWVk
YmFja010bCAqeGZiKQotewotICAgIC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJl
bnQgcmVuZGVyIHBhc3MgdG8gZW5hYmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCi0gICAg
Ly8gYnVmZmVycyBjb3VsZCBiZSB1c2VkIGFzIHZlcnRleCBpbnB1dC4gQ29uc2lkZXIgYSBiZXR0
ZXIgYXBwcm9hY2guCi0gICAgZW5kRW5jb2RpbmcodHJ1ZSk7Ci19Ci0KIHZvaWQgQ29udGV4dE10
bDo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWlu
dDY0X3QgdmFsdWUpCiB7CiAgICAgZW5zdXJlQ29tbWFuZEJ1ZmZlclJlYWR5KCk7CkBAIC0xODQy
LDEwICsyMDg4LDE5IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGVPck5vbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQYXNzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCiB7CiAgICAgQVNTRVJU
KG1Qcm9ncmFtKTsKIAorICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2Zmc2V0cyBv
biBldmVyeSBkcmF3IGNhbGwuCisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmaXJzdFZlcnRleCAhPSAtMSk7
CisgICAgICAgIG1YZmJCYXNlVmVydGV4ICAgICAgICAgICAgID0gZmlyc3RWZXJ0ZXg7CisgICAg
ICAgIG1YZmJWZXJ0ZXhDb3VudFBlckluc3RhbmNlID0gdmVydGV4T3JJbmRleENvdW50OworICAg
ICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKyAgICB9CisKICAgICAvLyBpbnN0YW5j
ZXM9MCBtZWFucyBubyBpbnN0YW5jZWQgZHJhdy4KICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQg
PSBpbnN0YW5jZXMgPyBpbnN0YW5jZXMgOiAxOwogCkBAIC0xODYyLDIwICsyMTE3LDYgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgIEFOR0xFX1RSWShoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnRleHQp
KTsKICAgICB9CiAKLSAgICBpZiAobURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9SQVNURVJJWkVS
X0RJU0NBUkQpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZVVucGF1c2VkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIFhGQiBp
cyBhY3RpdmUgd2UgbmVlZCB0byByZXNldCByZW5kZXIgcGFzcyBzaW5jZSB3ZSBjb3VsZCB1c2Ug
YSBkdW1teSByZW5kZXIKLSAgICAgICAgICAgIC8vIHRhcmdldCBpZiBvbmx5IFhGQiBpcyBuZWVk
ZWQuCi0gICAgICAgICAgICBpbnZhbGlkYXRlU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVyUGlwZWxp
bmUoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmICghbVJlbmRlckVuY29kZXIudmFsaWQo
KSkKICAgICB7CiAgICAgICAgIC8vIHJlLWFwcGx5IGV2ZXJ5dGhpbmcKQEAgLTE4ODQsNyArMjEy
NSwxMSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKIAogICAgIGlmIChtRGlydHlCaXRzLnRlc3QoRElSVFlfQklUX0RSQVdf
RlJBTUVCVUZGRVIpKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5UmVuZGVy
UGFzcyhjb250ZXh0KSk7CisgICAgICAgIC8vIFN0YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNv
ZGVyCisgICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJl
UmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOworCisgICAgICAgIC8vIHJlLWFwcGx5IGV2ZXJ5
dGhpbmcKKyAgICAgICAgaW52YWxpZGF0ZVN0YXRlKGNvbnRleHQpOwogICAgIH0KIAogICAgIGlm
IChtT2NjbHVzaW9uUXVlcnkgJiYgbU9jY2x1c2lvblF1ZXJ5UG9vbC5nZXROdW1SZW5kZXJQYXNz
QWxsb2NhdGVkUXVlcmllcygpID09IDApCkBAIC0xODk0LDE3ICsyMTM5LDExIEBAIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgICAgICBBTkdMRV9UUlkoc3RhcnRPY2NsdXNpb25RdWVyeUluUmVuZGVyUGFzcyhtT2NjbHVz
aW9uUXVlcnksIGZhbHNlKSk7CiAgICAgfQogCi0gICAgYm9vbCBpc1BpcGVsaW5lRGVzY0NoYW5n
ZWQ7Ci0gICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwg
eGZiUGFzcywgJmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCkpOworICAgIGJvb2wgY2hhbmdlZFBpcGVs
aW5lOworICAgIEFOR0xFX1RSWShjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnRleHQsIG1vZGUs
IG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmNoYW5nZWRQaXBlbGluZSkpOwogCiAgICAgYm9vbCB1bmlmb3Jt
QnVmZmVyc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Z2V0U3RhdGUoKSkpCi0gICAgewotICAgICAgICAvLyBGaWx0ZXIgb3V0IHVubmVlZGVkIGRpcnR5
IGJpdHMKLSAgICAgICAgZmlsdGVyT3V0WEZCT25seURpcnR5Qml0cyhjb250ZXh0KTsKLSAgICB9
Ci0KICAgICBmb3IgKHNpemVfdCBiaXQgOiBtRGlydHlCaXRzKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChiaXQpCkBAIC0xOTUzLDggKzIxOTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICBjYXNl
IERJUlRZX0JJVF9VTklGT1JNX0JVRkZFUlNfQklORElORzoKICAgICAgICAgICAgICAgICB1bmlm
b3JtQnVmZmVyc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRElSVFlfQklUX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOgorICAgICAgICAg
ICAgICAgIEFOR0xFX1RSWShoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzRW11bGF0aW9uKGNvbnRleHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgRElSVFlfQklUX1JBU1RFUklaRVJfRElTQ0FSRDoKLSAgICAgICAgICAgICAgICAv
LyBBbHJlYWR5IGhhbmRsZWQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0xOTYyLDgyICsyMjAz
LDMxIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHhmYlBhc3MgJiYgIW1E
aXJ0eUJpdHMudGVzdChESVJUWV9CSVRfRFJJVkVSX1VOSUZPUk1TKSkKLSAgICB7Ci0gICAgICAg
IC8vIElmIGhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoKSB3YXMgbm90IGNhbGxlZCBhbmQgdGhp
cyBpcyBYRkIgcGFzcywgd2Ugc3RpbGwgbmVlZCB0bwotICAgICAgICAvLyB1cGRhdGUgWEZCIHJl
bGF0ZWQgdW5pZm9ybXMKLSAgICAgICAgQU5HTEVfVFJZKAotICAgICAgICAgICAgZmlsbERyaXZl
clhGQlVuaWZvcm1zKGZpcnN0VmVydGV4LCB2ZXJ0ZXhPckluZGV4Q291bnQsIC8qKiBza2lwcGVk
SW5zdGFuY2VzICovIDApKTsKLSAgICAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YSht
RHJpdmVyVW5pZm9ybXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKLSAgICB9
Ci0KICAgICBtRGlydHlCaXRzLnJlc2V0KCk7CiAKLSAgICBBTkdMRV9UUlkobVByb2dyYW0tPnNl
dHVwRHJhdyhjb250ZXh0LCAmbVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQaXBlbGluZURlc2NDaGFuZ2VkLCB0
ZXh0dXJlQ2hhbmdlZCwgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSkpOwotCi0gICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOwotfQotCi12b2lkIENvbnRleHRNdGw6OmZpbHRlck91dFhGQk9u
bHlEaXJ0eUJpdHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgQVNTRVJUKElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKTsKLQotICAgIEFTU0VSVChtUmVuZGVy
RW5jb2Rlci5yZW5kZXJQYXNzRGVzYygpLmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSA9PSBt
RHVtbXlYRkJSZW5kZXJUZXh0dXJlKTsKLQotICAgIC8vIEluIHRyYW5zZm9ybSBmZWVkYmFjayBv
bmx5IHBhc3MsIG9ubHkgdmVydGV4IHNoYWRlcidzIHJlbGF0ZWQgc3RhdGVzIGFyZSBuZWVkZWQu
Ci0gICAgY29uc3RleHByIHNpemVfdCBrVW5uZWVkZWRCaXRzID0KLSAgICAgICAgYW5nbGU6OkJp
dDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9TVEVOQ0lMX0RFU0MpIHwKLSAgICAgICAgYW5nbGU6
OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9CSUFTKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihE
SVJUWV9CSVRfU1RFTkNJTF9SRUYpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZ
X0JJVF9CTEVORF9DT0xPUikgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX1ZJRVdQT1JU
KSB8Ci0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfU0NJU1NPUikgfCBhbmds
ZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0NVTExfTU9ERSkgfAotICAgICAgICBhbmdsZTo6Qml0
PHNpemVfdD4oRElSVFlfQklUX1dJTkRJTkcpOwotCi0gICAgbURpcnR5Qml0cyAmPSB+a1VubmVl
ZGVkQml0czsKLX0KLQotYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eVJlbmRl
clBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgaWYgKCFJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShtU3RhdGUpKQorICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCiAg
ICAgewotICAgICAgICAvLyBTdGFydCBuZXcgcmVuZGVyIGNvbW1hbmQgZW5jb2RlcgotICAgICAg
ICBBTkdMRV9NVExfVFJZKHRoaXMsIG1EcmF3RnJhbWVidWZmZXItPmVuc3VyZVJlbmRlclBhc3NT
dGFydGVkKGNvbnRleHQpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gWEZC
IGlzIGFjdGl2ZSBhbmQgcmFzdGVyaXphdGlvbiBpcyBkaXNhYmxlZC4gVXNlIGR1bW15IHJlbmRl
ciB0YXJnZXQuCi0gICAgICAgIC8vIFdlIGN1cnJlbnRseSBuZWVkIHRvIGVuZCB0aGUgcmVuZGVy
IHBhc3Mgd2hlbiBYRkIgaXMgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIHNvIHVzaW5nCi0gICAgICAg
IC8vIGEgc21hbGwgZHVtbXkgcmVuZGVyIHRhcmdldCB3b3VsZCBtYWtlIHRoZSByZW5kZXIgcGFz
cyBlbmRpbmcgdmVyeSBjaGVhcC4KLSAgICAgICAgaWYgKCFtRHVtbXlYRkJSZW5kZXJUZXh0dXJl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRU
ZXh0dXJlKHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCAx
LCB0cnVlLCBmYWxzZSwgJm1EdW1teVhGQlJlbmRlclRleHR1cmUpKTsKLSAgICAgICAgfQotICAg
ICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICplbmNvZGVyID0gZ2V0VGV4dHVyZVJlbmRl
ckNvbW1hbmRFbmNvZGVyKAotICAgICAgICAgICAgbUR1bW15WEZCUmVuZGVyVGV4dHVyZSwKLSAg
ICAgICAgICAgIG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6
SW1hZ2VJbmRleDo6TWFrZTJEKDApKSk7Ci0gICAgICAgIGVuY29kZXItPnNldENvbG9yTG9hZEFj
dGlvbihNVExMb2FkQWN0aW9uRG9udENhcmUsIE1UTENsZWFyQ29sb3IoKSwgMCk7Ci0gICAgICAg
IGVuY29kZXItPnNldENvbG9yU3RvcmVBY3Rpb24oTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSk7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGVuY29kZXItPnNldExhYmVsKEAiVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5UGFzcyIpOwotI2VuZGlmCisgICAgICAgIG10bDo6UmVuZGVyVXRpbHMgJnV0aWxz
ID0gZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpOworICAgICAgICBhbmdsZTo6UmVzdWx0IHJlc3Vs
dCA9CisgICAgICAgICAgICB1dGlscy5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb250ZXh0
LCAmbVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MpOworICAgICAgICBBTkdMRV9V
TlVTRURfVkFSSUFCTEUocmVzdWx0KTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PSBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZSk7CisgICAgICAgIGNoYW5nZWRQaXBlbGluZSA9IHRydWU7CiAgICAg
fQogCi0gICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZwotICAgIGludmFsaWRhdGVTdGF0ZShjb250
ZXh0KTsKKyAgICBBTkdMRV9UUlkobVByb2dyYW0tPnNldHVwRHJhdyhjb250ZXh0LCAmbVJlbmRl
ckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MsIGNoYW5nZWRQaXBlbGluZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ2hhbmdlZCwgdW5pZm9ybUJ1ZmZlcnNE
aXJ0eSwgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KSk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFuZGxlRGlydHlB
Y3RpdmVUZXh0dXJlcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUgICA9IG1TdGF0ZTsKLSAgICBjb25zdCBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbSA9IGdsU3RhdGUuZ2V0UHJvZ3JhbSgpOworICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0
ZSAgICAgICAgICAgICAgICA9IG1TdGF0ZTsKKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFi
bGUgKmV4ZWN1dGFibGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxl
KCk7CiAKICAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZXNDYWNoZSAmdGV4dHVyZXMgICAgID0g
Z2xTdGF0ZS5nZXRBY3RpdmVUZXh0dXJlc0NhY2hlKCk7Ci0gICAgY29uc3QgZ2w6OkFjdGl2ZVRl
eHR1cmVNYXNrICZhY3RpdmVUZXh0dXJlcyA9IHByb2dyYW0tPmdldEV4ZWN1dGFibGUoKS5nZXRB
Y3RpdmVTYW1wbGVyc01hc2soKTsKKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFj
dGl2ZVRleHR1cmVzID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxlcnNNYXNrKCk7CiAKICAg
ICBmb3IgKHNpemVfdCB0ZXh0dXJlVW5pdCA6IGFjdGl2ZVRleHR1cmVzKQogICAgIHsKQEAgLTIw
NjcsNiArMjI1Nyw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFuZGxlRGlydHlEZWZh
dWx0QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKICAgICB9CiAKICAgICBBU1NF
UlQobVJlbmRlckVuY29kZXIudmFsaWQoKSk7CisgICAgbVJlbmRlckVuY29kZXIuc2V0RnJhZ21l
bnREYXRhKG1EZWZhdWx0QXR0cmlidXRlcywgbXRsOjprRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5k
ZXgpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURlZmF1bHRBdHRyaWJ1dGVz
LCBtdGw6OmtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCk7CiAKICAgICBtRGlydHlEZWZhdWx0
QXR0cmlic01hc2sucmVzZXQoKTsKQEAgLTIxMjAsOSArMjMxMSw2IEBAIGFuZ2xlOjpSZXN1bHQg
Q29udGV4dE10bDo6aGFuZGxlRGlydHlEcml2ZXJVbmlmb3Jtcyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKICAgICB9CiAgICAgbURyaXZlclVuaWZvcm1zLmNvdmVyYWdlTWFzayA9IGNvdmVy
YWdlTWFzazsKIAotICAgIEFOR0xFX1RSWSgKLSAgICAgICAgZmlsbERyaXZlclhGQlVuaWZvcm1z
KGRyYXdDYWxsRmlyc3RWZXJ0ZXgsIHZlcnRpY2VzUGVySW5zdGFuY2UsIC8qKiBza2lwcGVkSW5z
dGFuY2VzICovIDApKTsKLQogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKICAg
ICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFnbWVudERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtE
cml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4
RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsK
QEAgLTIxMzAsMjUgKzIzMTgsMzMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVE
aXJ0eURyaXZlclVuaWZvcm1zKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRp
Y2VzUGVySW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCBza2lwcGVkSW5zdGFuY2VzKQorYW5nbGU6OlJlc3VsdCBDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9u
KAorICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBnZXRTdGF0ZSgpLmdldEN1cnJlbnRUcmFuc2Zv
cm1GZWVkYmFjaygpOworICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJs
ZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgIEFTU0VSVChleGVjdXRhYmxl
KTsKIAotICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBhdXNlZCA9IGdldFN0YXRlKCku
aXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1G
ZWVkYmFjayB8fCAhbURyaXZlclVuaWZvcm1zLnhmYkFjdGl2ZVVucGF1c2VkKQorICAgIGlmICgh
ZXhlY3V0YWJsZS0+aGFzVHJhbnNmb3JtRmVlZGJhY2tPdXRwdXQoKSB8fCAhbVN0YXRlLmlzVHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKICAgICB9CiAKLSAgICBtRHJpdmVyVW5pZm9ybXMueGZiVmVydGljZXNQ
ZXJEcmF3ID0gdmVydGljZXNQZXJJbnN0YW5jZTsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAq
dHJhbnNmb3JtRmVlZGJhY2tNdGwgPSBtdGw6OkdldEltcGwobVN0YXRlLmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpKTsKKyAgICBzaXplX3QgYnVmZmVyQ291bnQgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7
CisgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAq
PiAmYnVmZmVySGFuZGxlcyA9CisgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZm
ZXJIYW5kbGVzKCk7CiAKLSAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJh
Y2tNdGwgPSBtdGw6OkdldEltcGwodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGZvciAoc2l6ZV90
IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRl
eCkKKyAgICB7CisgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVySGFuZGxlID0gYnVmZmVySGFuZGxl
c1tidWZmZXJJbmRleF07CisgICAgICAgIEFTU0VSVChidWZmZXJIYW5kbGUpOworICAgICAgICBB
U1NFUlQobVJlbmRlckVuY29kZXIudmFsaWQoKSk7CisgICAgICAgIG1SZW5kZXJFbmNvZGVyLnNl
dEJ1ZmZlckZvcldyaXRlKAorICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgYnVm
ZmVySGFuZGxlLT5nZXRDdXJyZW50QnVmZmVyKCksIDAsCisgICAgICAgICAgICBtdGw6OmtUcmFu
c2Zvcm1GZWVkYmFja0JpbmRpbmdJbmRleCArICh1aW50MzJfdClidWZmZXJJbmRleCk7CisgICAg
fQogCi0gICAgcmV0dXJuIHRyYW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZmZXJPZmZzZXRzKHRo
aXMsIGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzUGVySW5zdGFuY2UgKiBza2lwcGVkSW5zdGFuY2Vz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRHJp
dmVyVW5pZm9ybXMueGZiQnVmZmVyT2Zmc2V0cyk7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCkBAIC0yMTU5LDEzICsy
MzU1LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFuZGxlRGlydHlEZXB0aFN0ZW5j
aWxTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4CiAgICAgbXRsOjpEZXB0aFN0ZW5jaWxE
ZXNjIGRzRGVzYyAgICAgICAgICAgICAgPSBtRGVwdGhTdGVuY2lsRGVzYzsKICAgICBjb25zdCBt
dGw6OlJlbmRlclBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IG1SZW5kZXJFbmNvZGVyLnJlbmRl
clBhc3NEZXNjKCk7CiAKLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50
ZXh0dXJlKQorICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUo
KSkKICAgICB7CiAgICAgICAgIGRzRGVzYy5kZXB0aFdyaXRlRW5hYmxlZCAgICA9IGZhbHNlOwog
ICAgICAgICBkc0Rlc2MuZGVwdGhDb21wYXJlRnVuY3Rpb24gPSBNVExDb21wYXJlRnVuY3Rpb25B
bHdheXM7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVu
dC50ZXh0dXJlKQorICAgIGlmICghcmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4
dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmZyb250RmFjZVN0ZW5jaWwucmVzZXQoKTsK
ICAgICAgICAgZHNEZXNjLmJhY2tGYWNlU3RlbmNpbC5yZXNldCgpOwpAQCAtMjE5Niw4ICsyMzky
LDggQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoQmlhcyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVj
a0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2Rl
IHByaW1pdGl2ZU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB4ZmJQYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgKmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhiZlBhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcGlwZWxp
bmVEZXNjQ2hhbmdlZCkKIHsKICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFsaWQoKSk7CiAg
ICAgbXRsOjpQcmltaXRpdmVUb3BvbG9neUNsYXNzIHRvcG9sb2d5Q2xhc3MgPSBtdGw6OkdldFBy
aW1pdGl2ZVRvcG9sb2d5Q2xhc3MocHJpbWl0aXZlTW9kZSk7CkBAIC0yMjE2LDI0ICsyNDEyLDEw
IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6Y2hlY2tJZlBpcGVsaW5lQ2hhbmdlZChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgcmVuZGVyUGFzc0Rlc2MucG9wdWxhdGVS
ZW5kZXJQaXBlbGluZU91dHB1dERlc2MobUJsZW5kRGVzYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQaXBlbGluZURlc2Mu
b3V0cHV0RGVzY3JpcHRvcik7CiAKLSAgICAgICAgaWYgKHhmYlBhc3MpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEluIFhGQiBwYXNzLCB3ZSBkaXNhYmxlIGZyYWdtZW50IHNoYWRlci4KLSAg
ICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJl
bmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAobVN0YXRlLmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIElmIFhGQiBpcyBub3QgYWN0aXZlIGFuZCByYXN0ZXJpemVyIGRpc2Nh
cmQgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbXVsYXRlIHRoZQotICAgICAgICAgICAgLy8gZGlz
Y2FyZC4gQmVjYXVzZSBpbiB0aGlzIGNhc2UsIHZlcnRleCBzaGFkZXIgbWlnaHQgd3JpdGUgdG8g
c3RhZ2Ugb3V0cHV0IHZhbHVlcyBhbmQKLSAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3QgYWxs
b3cgcmFzdGVyaXphdGlvbiB0byBiZSBkaXNhYmxlZC4KLSAgICAgICAgICAgIG1SZW5kZXJQaXBl
bGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgPQotICAgICAgICAgICAgICAgIG10bDo6UmVuZGVy
UGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbXVsYXRlZERpc2NhcmQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rl
cml6YXRpb25UeXBlID0gbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVuYWJsZWQ7
Ci0gICAgICAgIH0KICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5pbnB1dFByaW1pdGl2ZVRv
cG9sb2d5ID0gdG9wb2xvZ3lDbGFzczsKKyAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0
ZXJpemF0aW9uVHlwZSA9CisgICAgICAgICAgICAobVN0YXRlLmlzUmFzdGVyaXplckRpc2NhcmRF
bmFibGVkKCkgPyBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNj
YXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBt
dGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RW5hYmxlZCk7CiAgICAgICAgIG1SZW5k
ZXJQaXBlbGluZURlc2MuYWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA9IG1TdGF0ZS5pc1NhbXBsZUFs
cGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5lbXVs
YXRlQ292ZXJhZ2VNYXNrICAgID0gbVN0YXRlLmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7CiAK
QEAgLTIyNDEsNyArMjQyMyw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6Y2hlY2tJZlBp
cGVsaW5lQ2hhbmdlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgIG1E
cmF3RnJhbWVidWZmZXItPmdldFN0YXRlKCkuZ2V0RW5hYmxlZERyYXdCdWZmZXJzKCkpOwogICAg
IH0KIAotICAgICppc1BpcGVsaW5lRGVzY0NoYW5nZWQgPSBycHBDaGFuZ2U7CisgICAgKnBpcGVs
aW5lRGVzY0NoYW5nZWQgPSBycHBDaGFuZ2U7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAppbmRleCBiMDBkZTFi
MmQ5Yzg3MzU3YWVhZTVhZmIwMWE2NzM0MjUyNDA2NmI0Li4yNDE3MTIyMGM1YTY1MGFlYTM4Yzky
NGU0YWZkMjRhZGFhZjM5NjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgKQEAg
LTUyLDYgKzUyLDEwIEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKIAog
ICAgIGVnbDo6RXJyb3Igd2FpdENsaWVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3Zl
cnJpZGU7CiAgICAgZWdsOjpFcnJvciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBFR0xpbnQgZW5naW5lKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHZhbGlkYXRlQ2xp
ZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZh
dHRyaWJzKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dT
dXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdywKQEAgLTk2LDEx
ICsxMDAsNiBAQCBjbGFzcyBEaXNwbGF5TXRsIDogcHVibGljIERpc3BsYXlJbXBsCiAKICAgICBi
b29sIGlzVmFsaWROYXRpdmVXaW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTGVudW0gYnVmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3Zl
cnJpZGU7Ci0KICAgICBlZ2w6OkNvbmZpZ1NldCBnZW5lcmF0ZUNvbmZpZ3MoKSBvdmVycmlkZTsK
IAogICAgIHN0ZDo6c3RyaW5nIGdldFJlbmRlcmVyRGVzY3JpcHRpb24oKSBjb25zdDsKQEAgLTE2
NSw2ICsxNjQsOCBAQCBjbGFzcyBEaXNwbGF5TXRsIDogcHVibGljIERpc3BsYXlJbXBsCiAgICAg
dm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0OwogICAgIHZvaWQgaW5pdGlhbGl6ZVRl
eHR1cmVDYXBzKCkgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplRmVhdHVyZXMoKTsKKyAgICB2
b2lkIGluaXRpYWxpemVMaW1pdGF0aW9ucygpOworCiAgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFs
aXplU2hhZGVyTGlicmFyeSgpOwogCiAgICAgbXRsOjpBdXRvT2JqQ1B0cjxpZDxNVExEZXZpY2U+
PiBtTWV0YWxEZXZpY2UgPSBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tCmlu
ZGV4IDI0N2Q3NmE4MDkyNTQ5ODdjZWM1NGEyNjg3MDA0OTllNTY3YmRkM2QuLjFkMTFjZDY0Y2U4
MDFjNWQzYjg3NzgyM2NlMzkxZmY0ZTI0ZTJlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNw
bGF5TXRsLm1tCkBAIC04LDEyICs4LDE0IEBACiAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9EaXNwbGF5TXRsLmgiCiAKKyNpbmNsdWRlICJjb21tb24vc3lzdGVtX3V0aWxzLmgi
CiAjaW5jbHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAibGliQU5H
TEUvQ29udGV4dC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKICNpbmNsdWRlICJs
aWJBTkdMRS9TdXJmYWNlLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193
cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZh
Y2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oIgogI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCIKQEAgLTIyLDkgKzI0LDYyIEBA
CiAKICNpbmNsdWRlICJFR0wvZWdsZXh0LmgiCiAKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorY29uc3RleHBy
IGNoYXIga0FOR0xFUHJlZmVycmVkRGV2aWNlRW52W10gPSAiQU5HTEVfUFJFRkVSUkVEX0RFVklD
RSI7CisjZW5kaWYKK2NvbnN0ZXhwciBjaGFyIGtBTkdMRVRyYW5zZm9ybUZlZWRiYWNrRW52W10g
PSAiQU5HTEVfTUVUQUxfWEZCX0VOQUJMRSI7CisKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMg
RUdMaW50IEdldERlcHRoU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KQorICAgIHsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDI0OgorICAgICAgICAgICAgcmV0dXJuIDI0OworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDMyX09FUzoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQzMkY6CisgICAgICAgICAgICByZXR1cm4gMzI7CisgICAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiAyNDsKKyAgICAgICAgY2FzZSBH
TF9ERVBUSDMyRl9TVEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vICAgIFVOUkVBQ0hBQkxFKGludGVybmFsZm9ybWF0KTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIEVHTGludCBHZXRTdGVuY2ls
U2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KQorICAgIHsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAgIHJl
dHVybiA4OworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMjQ6CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4Ogor
ICAgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEgzMkZfU1RFTkNJTDg6
CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8v
ICAgIFVOUkVBQ0hBQkxFKGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwogYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCiB7CiAgICAgLy8gV2Ug
b25seSBzdXBwb3J0IG1hY29zIDEwLjEzKyBhbmQgMTEgZm9yIG5vdy4gU2luY2UgdGhleSBhcmUg
cmVxdWlyZW1lbnRzIGZvciBNZXRhbCAyLjAuCkBAIC01Nyw3ICsxMTIsNyBAQCBzdHJ1Y3QgRGVm
YXVsdFNoYWRlckFzeW5jSW5mb010bAogfTsKIAogRGlzcGxheU10bDo6RGlzcGxheU10bChjb25z
dCBlZ2w6OkRpc3BsYXlTdGF0ZSAmc3RhdGUpCi0gICAgOiBEaXNwbGF5SW1wbChzdGF0ZSksIG1V
dGlscyh0aGlzKSwgbUdsc2xhbmdJbml0aWFsaXplZChmYWxzZSkKKyAgICA6IERpc3BsYXlJbXBs
KHN0YXRlKSwgbVN0YXRlQ2FjaGUobUZlYXR1cmVzKSwgbVV0aWxzKHRoaXMpCiB7fQogCiBEaXNw
bGF5TXRsOjp+RGlzcGxheU10bCgpIHt9CkBAIC03OCwxMCArMTMzLDI3IEBAIGFuZ2xlOjpSZXN1
bHQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUltcGwoZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQogewog
ICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewotICAgICAgICBtTWV0YWxEZXZpY2UgPSBb
TVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07Cisj
aWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNDQVRBTFlTVCkKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgYW5nbGVQcmVmZXJyZWRE
ZXZpY2UgPSBhbmdsZTo6R2V0RW52aXJvbm1lbnRWYXIoa0FOR0xFUHJlZmVycmVkRGV2aWNlRW52
KTsKKyAgICAgICAgaWYgKGFuZ2xlUHJlZmVycmVkRGV2aWNlICE9ICIiKQorICAgICAgICB7Cisg
ICAgICAgICAgICBOU0FycmF5PGlkPE1UTERldmljZT4+ICpkZXZpY2VzID0gW01UTENvcHlBbGxE
ZXZpY2VzKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKyAgICAgICAgICAgIGZvciAoaWQ8TVRM
RGV2aWNlPiBkZXZpY2UgaW4gZGV2aWNlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoW2RldmljZS5uYW1lLmxvd2VyY2FzZVN0cmluZworICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGFpbnNTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFuZ2xlUHJl
ZmVycmVkRGV2aWNlLmNfc3RyKCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmxvd2VyY2FzZVN0cmluZ10pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBOU0xvZyhAIlVzaW5nIE1ldGFsIERldmljZTogJUAiLCBbZGV2aWNlIG5hbWVd
KTsKKyAgICAgICAgICAgICAgICAgICAgbU1ldGFsRGV2aWNlID0gW2RldmljZSBBTkdMRV9NVExf
QVVUT1JFTEVBU0VdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBpZiAoIW1NZXRh
bERldmljZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0
b3A7CisgICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERl
dmljZSgpIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAgICAgICAgIH0KIAogICAgICAgICBtTWV0
YWxEZXZpY2VWZW5kb3JJZCA9IG10bDo6R2V0RGV2aWNlVmVuZG9ySWQobU1ldGFsRGV2aWNlKTsK
QEAgLTg5LDEyICsxNjEsMTMgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXpl
SW1wbChlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCiAgICAgICAgIG1DbWRRdWV1ZS5zZXQoW1ttTWV0
YWxEZXZpY2UuZ2V0KCkgbmV3Q29tbWFuZFF1ZXVlXSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsK
IAogICAgICAgICBtQ2Fwc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KKyNpZiBBTkdMRV9FTkFCTEVf
TUVUQUxfU1BJUlYKICAgICAgICAgaWYgKCFtR2xzbGFuZ0luaXRpYWxpemVkKQogICAgICAgICB7
CiAgICAgICAgICAgICBHbHNsYW5nSW5pdGlhbGl6ZSgpOwogICAgICAgICAgICAgbUdsc2xhbmdJ
bml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgIGlmICghbVN0
YXRlLmZlYXR1cmVzQWxsRGlzYWJsZWQpCiAgICAgICAgIHsKQEAgLTEyMCwxMiArMTkzLDEzIEBA
IHZvaWQgRGlzcGxheU10bDo6dGVybWluYXRlKCkKICAgICBtQ2Fwc0luaXRpYWxpemVkID0gZmFs
c2U7CiAKICAgICBtTWV0YWxEZXZpY2VWZW5kb3JJZCA9IDA7Ci0KKyNpZiBBTkdMRV9FTkFCTEVf
TUVUQUxfU1BJUlYKICAgICBpZiAobUdsc2xhbmdJbml0aWFsaXplZCkKICAgICB7CiAgICAgICAg
IEdsc2xhbmdSZWxlYXNlKCk7CiAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsK
ICAgICB9CisjZW5kaWYKIH0KIAogYm9vbCBEaXNwbGF5TXRsOjp0ZXN0RGV2aWNlTG9zdCgpCkBA
IC0xNzEsNiArMjQ1LDE1IEBAIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdENsaWVudChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CiB9CiAK
K2VnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTGVudW0gYnVmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAg
JmF0dHJpYnMpIGNvbnN0Cit7CisgICAgLy8gVE9ETzogRmlsbCBvdXQgcHJvcGVybHkKKyAgICBy
ZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdE5h
dGl2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGVuZ2luZSkKIHsKICAgICBV
TklNUExFTUVOVEVEKCk7CkBAIC0xODcsNyArMjcwLDggQEAgU3VyZmFjZUltcGwgKkRpc3BsYXlN
dGw6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAog
U3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6
U3VyZmFjZVN0YXRlICZzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsKLSAgICByZXR1
cm4gbmV3IFBCdWZmZXJTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBhdHRyaWJzKTsKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN1cmZhY2VJbXBsICo+KDApOwog
fQogCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZm
ZXIoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAtMTk1LDE1ICsyNzksNyBAQCBT
dXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoY29u
c3QgZWdsOjpTdXJmYWNlU3RhdGUgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCiB7Ci0gICAgc3dpdGNoIChidWZ0eXBlKQotICAg
IHsKLSAgICAgICAgY2FzZSBFR0xfSU9TVVJGQUNFX0FOR0xFOgotICAgICAgICAgICAgcmV0dXJu
IG5ldyBJT1N1cmZhY2VTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBjbGllbnRCdWZmZXIsIGF0dHJp
YnMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbmV3
IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGNsaWVudEJ1ZmZlciwgYXR0cmlicyk7
CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQaXhtYXBTdXJmYWNlKGNvbnN0
IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKQEAgLTI0MCwxNyArMzE2LDEyIEBAIFN0cmVhbVBy
b2R1Y2VySW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU3RyZWFtUHJvZHVjZXJEM0RUZXh0dXJlKAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1TaGFyZUdyb3VwSW1wbCAqRGlzcGxheU10bDo6Y3Jl
YXRlU2hhcmVHcm91cCgpCi17Ci0gICAgcmV0dXJuIG5ldyBTaGFyZUdyb3VwTXRsKCk7Ci19Ci0K
IGdsOjpWZXJzaW9uIERpc3BsYXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbigpIGNvbnN0
CiB7CiAgICAgLy8gTk9URShocWxlKTogU3VwcG9ydHMgR0xFUyAzLjAgb24gaU9TIEdQVSBmYW1p
bHkgNCsgZm9yIG5vdy4KICAgICBpZiAoc3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoNCwgMSkpCiAg
ICAgewotICAgICAgICByZXR1cm4gbXRsOjprTWF4U3VwcG9ydGVkR0xWZXJzaW9uOworICAgICAg
ICByZXR1cm4gZ2w6OlZlcnNpb24oMywgMCk7CiAgICAgfQogICAgIHJldHVybiBnbDo6VmVyc2lv
bigyLCAwKTsKIH0KQEAgLTI2NSw2ICszMzYsMTEgQEAgRUdMU3luY0ltcGwgKkRpc3BsYXlNdGw6
OmNyZWF0ZVN5bmMoY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCiAgICAgcmV0dXJu
IG5ldyBFR0xTeW5jTXRsKGF0dHJpYnMpOwogfQogCitTaGFyZUdyb3VwSW1wbCAqRGlzcGxheU10
bDo6Y3JlYXRlU2hhcmVHcm91cCgpCit7CisgICAgcmV0dXJuIG5ldyBTaGFyZUdyb3VwSW1wbCgp
OworfQorCiBlZ2w6OkVycm9yIERpc3BsYXlNdGw6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAq
ZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsOjpTdXJmYWNl
ICpkcmF3U3VyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsOjpT
dXJmYWNlICpyZWFkU3VyZmFjZSwKQEAgLTMyNiw3ICs0MDIsNyBAQCBlZ2w6OkNvbmZpZ1NldCBE
aXNwbGF5TXRsOjpnZW5lcmF0ZUNvbmZpZ3MoKQogICAgIGNvbmZpZy50cmFuc3BhcmVudFR5cGUg
PSBFR0xfTk9ORTsKIAogICAgIC8vIFBidWZmZXIKLSAgICBjb25maWcuYmluZFRvVGV4dHVyZVRh
cmdldCA9IEVHTF9URVhUVVJFXzJEOworICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFyZ2V0ID0g
RUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOwogICAgIGNvbmZpZy5tYXhQQnVmZmVyV2lkdGgg
ICAgID0gNDA5NjsKICAgICBjb25maWcubWF4UEJ1ZmZlckhlaWdodCAgICA9IDQwOTY7CiAgICAg
Y29uZmlnLm1heFBCdWZmZXJQaXhlbHMgICAgPSA0MDk2ICogNDA5NjsKQEAgLTM2MSw0MSArNDM3
LDE4IEBAIGVnbDo6Q29uZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAKICAg
ICBjb25maWcuY29sb3JDb21wb25lbnRUeXBlID0gRUdMX0NPTE9SX0NPTVBPTkVOVF9UWVBFX0ZJ
WEVEX0VYVDsKIAotICAgIGNvbnN0ZXhwciBpbnQgc2FtcGxlc1N1cHBvcnRlZFtdID0gezAsIDR9
OworICAgIC8vIEJ1ZmZlciBzaXplcworICAgIGNvbmZpZy5yZWRTaXplICAgID0gODsKKyAgICBj
b25maWcuZ3JlZW5TaXplICA9IDg7CisgICAgY29uZmlnLmJsdWVTaXplICAgPSA4OworICAgIGNv
bmZpZy5hbHBoYVNpemUgID0gODsKKyAgICBjb25maWcuYnVmZmVyU2l6ZSA9IGNvbmZpZy5yZWRT
aXplICsgY29uZmlnLmdyZWVuU2l6ZSArIGNvbmZpZy5ibHVlU2l6ZSArIGNvbmZpZy5hbHBoYVNp
emU7CiAKLSAgICBmb3IgKGludCBzYW1wbGVzIDogc2FtcGxlc1N1cHBvcnRlZCkKLSAgICB7Ci0g
ICAgICAgIGNvbmZpZy5zYW1wbGVzICAgICAgID0gc2FtcGxlczsKLSAgICAgICAgY29uZmlnLnNh
bXBsZUJ1ZmZlcnMgPSAoc2FtcGxlcyA9PSAwKSA/IDAgOiAxOwotCi0gICAgICAgIC8vIEJ1ZmZl
ciBzaXplcwotICAgICAgICBjb25maWcucmVkU2l6ZSAgICA9IDg7Ci0gICAgICAgIGNvbmZpZy5n
cmVlblNpemUgID0gODsKLSAgICAgICAgY29uZmlnLmJsdWVTaXplICAgPSA4OwotICAgICAgICBj
b25maWcuYWxwaGFTaXplICA9IDg7Ci0gICAgICAgIGNvbmZpZy5idWZmZXJTaXplID0gY29uZmln
LnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmlnLmJsdWVTaXplICsgY29uZmlnLmFs
cGhhU2l6ZTsKLQotICAgICAgICAvLyBXaXRoIERTCi0gICAgICAgIGNvbmZpZy5kZXB0aFNpemUg
ICA9IDI0OwotICAgICAgICBjb25maWcuc3RlbmNpbFNpemUgPSA4OwotCi0gICAgICAgIGNvbmZp
Z3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gV2l0aCBECi0gICAgICAgIGNvbmZpZy5kZXB0
aFNpemUgICA9IDI0OwotICAgICAgICBjb25maWcuc3RlbmNpbFNpemUgPSAwOwotICAgICAgICBj
b25maWdzLmFkZChjb25maWcpOwotCi0gICAgICAgIC8vIFdpdGggUwotICAgICAgICBjb25maWcu
ZGVwdGhTaXplICAgPSAwOwotICAgICAgICBjb25maWcuc3RlbmNpbFNpemUgPSA4OwotICAgICAg
ICBjb25maWdzLmFkZChjb25maWcpOwotCi0gICAgICAgIC8vIE5vIERTCi0gICAgICAgIGNvbmZp
Zy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7Ci0gICAg
ICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0gICAgfQorICAgIC8vIFRlc3RzIGxpa2UgZEVRUC1H
TEVTMi5mdW5jdGlvbmFsLmRlcHRoX3JhbmdlLiogYXNzdW1lIEVHTF9ERVBUSF9TSVpFIGlzIHBy
b3Blcmx5IHNldCBldmVuIGlmCisgICAgLy8gcmVuZGVyQ29uZmlnIGF0dHJpYnV0ZXMgYXJlIHNl
dCB0byBnbHU6OlJlbmRlckNvbmZpZzo6RE9OVF9DQVJFCisgICAgY29uZmlnLmRlcHRoU2l6ZSAg
ID0gR2V0RGVwdGhTaXplKGNvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQpOworICAgIGNvbmZpZy5z
dGVuY2lsU2l6ZSA9IEdldFN0ZW5jaWxTaXplKGNvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQpOwor
ICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7CiAKICAgICByZXR1cm4gY29uZmlnczsKIH0KQEAgLTQw
OSwyNiArNDYyLDYgQEAgYm9vbCBEaXNwbGF5TXRsOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5h
dGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAogICAgIH0KIH0KIAotZWdsOjpFcnJvciBEaXNw
bGF5TXRsOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMZW51
bSBidWZ0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKGJ1ZnR5cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZB
Q0VfQU5HTEU6Ci0gICAgICAgICAgICBpZiAoIUlPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRl
QXR0cmlidXRlcyhjbGllbnRCdWZmZXIsIGF0dHJpYnMpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZEF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7Ci0gICAg
fQotICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKLX0KLQogc3RkOjpzdHJpbmcgRGlzcGxheU10
bDo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKQEAgLTUxMiwxMCArNTQ1LDE2IEBAIHZvaWQgRGlzcGxheU10bDo6ZW5zdXJlQ2Fwc0lu
aXRpYWxpemVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhSZW5kZXJidWZmZXJTaXplICAg
PSBtTmF0aXZlQ2Fwcy5tYXgyRFRleHR1cmVTaXplOwogICAgIG1OYXRpdmVDYXBzLm1pbkFsaWFz
ZWRQb2ludFNpemUgICA9IDE7CiAgICAgLy8gTk9URShocWxlKTogTWV0YWwgaGFzIHNvbWUgcHJv
YmxlbXMgZHJhd2luZyBiaWcgcG9pbnQgc2l6ZSBldmVuIHRob3VnaAotICAgIC8vIE1ldGFsLUZl
YXR1cmUtU2V0LVRhYmxlcy5wZGYgc2F5cyB0aGF0IG1heCBzdXBwb3J0ZWQgcG9pbnQgc2l6ZSBp
cyA1MTEuIFdlIGxpbWl0IGl0IHRvIDY0IGZvcgotICAgIC8vIG5vdy4KLSAgICAvLyBodHRwOi8v
YW5nbGVidWcuY29tLzQ4MTYKLSAgICBtTmF0aXZlQ2Fwcy5tYXhBbGlhc2VkUG9pbnRTaXplID0g
NjQ7CisgICAgLy8gTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQgbWF4IHN1
cHBvcnRlZCBwb2ludCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gMjU1CisgICAgLy8gb24g
SW50ZWwgYW5kIDY0IG9uIEFNRCBmb3Igbm93LgorICAgIGlmIChbbU1ldGFsRGV2aWNlLmdldCgp
Lm5hbWUgcmFuZ2VPZlN0cmluZzpAIkludGVsIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKyAg
ICB7CisgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNpemUgPSAyNTU7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNp
emUgPSA2NDsKKyAgICB9CiAKICAgICBtTmF0aXZlQ2Fwcy5taW5BbGlhc2VkTGluZVdpZHRoID0g
MS4wZjsKICAgICBtTmF0aXZlQ2Fwcy5tYXhBbGlhc2VkTGluZVdpZHRoID0gMS4wZjsKQEAgLTYx
NSw2ICs2NTQsOSBAQCB2b2lkIERpc3BsYXlNdGw6OmVuc3VyZUNhcHNJbml0aWFsaXplZCgpIGNv
bnN0CiAgICAgbU5hdGl2ZUNhcHMubWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVu
dHMgPQogICAgICAgICBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19T
RVBBUkFURV9DT01QT05FTlRTOwogCisgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQor
ICAgIG1OYXRpdmVDYXBzLnByb2dyYW1CaW5hcnlGb3JtYXRzLnB1c2hfYmFjayhHTF9QUk9HUkFN
X0JJTkFSWV9BTkdMRSk7CisKICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3RhbmNlCiAgICAgbU5h
dGl2ZUNhcHMubWF4Q2xpcERpc3RhbmNlcyA9IDg7CiAKQEAgLTY0Nyw2ICs2ODksMTUgQEAgdm9p
ZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAgICAgbU5hdGl2ZUV4
dGVuc2lvbnMudGV4dHVyZUJvcmRlckNsYW1wT0VTICA9IGZhbHNlOyAgLy8gbm90IGltcGxlbWVu
dGVkIHlldAogICAgIG1OYXRpdmVFeHRlbnNpb25zLnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSB0
cnVlOwogICAgIG1OYXRpdmVFeHRlbnNpb25zLmRpc2NhcmRGcmFtZWJ1ZmZlciAgICAgPSB0cnVl
OworICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBidXQgZXhwb3NlCisgICAgbU5hdGl2ZUV4dGVuc2lv
bnMudGV4dHVyZVJlY3RhbmdsZSA9IHRydWU7CisKKyAgICAvLyBFWFRfbXVsdGlzYW1wbGVkX3Jl
bmRlcl90b190ZXh0dXJlCisgICAgaWYgKG1GZWF0dXJlcy5hbGxvd011bHRpc2FtcGxlU3RvcmVB
bmRSZXNvbHZlLmVuYWJsZWQgJiYKKyAgICAgICAgbUZlYXR1cmVzLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJiBtRmVhdHVyZXMuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVuYWJsZWQpCisg
ICAgeworICAgICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5tdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1
cmUgPSB0cnVlOworICAgIH0KIAogICAgIC8vIEVuYWJsZSBFWFRfYmxlbmRfbWlubWF4CiAgICAg
bU5hdGl2ZUV4dGVuc2lvbnMuYmxlbmRNaW5NYXggPSB0cnVlOwpAQCAtNjYyLDggKzcxMyw4IEBA
IHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMoKSBjb25zdAogICAgIG1OYXRp
dmVFeHRlbnNpb25zLnNlbWFwaG9yZSAgID0gZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMu
c2VtYXBob3JlRmQgPSBmYWxzZTsKIAotICAgIG1OYXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFy
cmF5c0FOR0xFID0gbUZlYXR1cmVzLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQ7
Ci0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzRVhUICAgPSBtTmF0aXZlRXh0
ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNBTkdMRTsKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0
YW5jZWRBcnJheXNBTkdMRSA9IHRydWU7CisgICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2Vk
QXJyYXlzRVhUICAgPSB0cnVlOwogCiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMucm9idXN0QnVmZmVy
QWNjZXNzQmVoYXZpb3IgPSBmYWxzZTsKIApAQCAtNjg2LDYgKzczNyw5IEBAIHZvaWQgRGlzcGxh
eU10bDo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMoKSBjb25zdAogCiAgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuZWxlbWVudEluZGV4VWludE9FUyA9IHRydWU7CiAKKyAgICAvLyBHTF9PRVNfZ2V0X3Byb2dy
YW1fYmluYXJ5CisgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZ2V0UHJvZ3JhbUJpbmFyeU9FUyA9IHRy
dWU7CisKICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3RhbmNlCiAgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuY2xpcERpc3RhbmNlQVBQTEUgPSB0cnVlOwogCkBAIC03MTMsMTEgKzc2NywxNyBAQCB2b2lk
IERpc3BsYXlNdGw6OmluaXRpYWxpemVUZXh0dXJlQ2FwcygpIGNvbnN0CiAKICAgICAvLyBSZS12
ZXJpZnkgdGV4dHVyZSBleHRlbnNpb25zLgogICAgIG1OYXRpdmVFeHRlbnNpb25zLnNldFRleHR1
cmVFeHRlbnNpb25TdXBwb3J0KG1OYXRpdmVUZXh0dXJlQ2Fwcyk7Ci0KKyAgICAvLyBNb2RpZnkg
ZXh0ZW5zaW9ucyBiYXNlZCBvZmYgb2Ygc3VwcG9ydAogICAgIC8vIERpc2FibGUgYWxsIGRlcHRo
IGJ1ZmZlciBhbmQgc3RlbmNpbCBidWZmZXIgcmVhZGJhY2sgZXh0ZW5zaW9ucyB1bnRpbCB3ZSBu
ZWVkIHRoZW0KICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkRGVwdGhOViAgICAgICAgID0gZmFs
c2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMucmVhZFN0ZW5jaWxOViAgICAgICA9IGZhbHNlOwog
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmRlcHRoQnVmZmVyRmxvYXQyTlYgPSBmYWxzZTsKKyAgICBt
TmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQ29tcHJlc3Npb25BU1RDTERSS0hSICY9IHN1cHBvcnRz
SU9TR1BVRmFtaWx5KDIpOworfQorCit2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0
aW9ucygpCit7CisgICAgbU5hdGl2ZUxpbWl0YXRpb25zLm5vVmVydGV4QXR0cmlidXRlQWxpYXNp
bmcgPSB0cnVlOwogfQogCiB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0dXJlcygpCkBA
IC03NzksNiArODM5LDkgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRmVhdHVyZXMoKQog
ICAgIEFOR0xFX0ZFQVRVUkVfQ09ORElUSU9OKCgmbUZlYXR1cmVzKSwgYWxsb3dTZXBhcmF0ZWRE
ZXB0aFN0ZW5jaWxCdWZmZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc09TWCAm
JiAhaXNDYXRhbHlzdCAmJiAhaXNTaW11bGF0b3IpOwogCisgICAgbUZlYXR1cmVzLmVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkID0KKyAgICAgICAgYW5nbGU6OkdldEVudmlyb25tZW50
VmFyKGtBTkdMRVRyYW5zZm9ybUZlZWRiYWNrRW52KVswXSA9PSAnMSc7CisKICAgICBhbmdsZTo6
UGxhdGZvcm1NZXRob2RzICpwbGF0Zm9ybSA9IEFOR0xFUGxhdGZvcm1DdXJyZW50KCk7CiAgICAg
cGxhdGZvcm0tPm92ZXJyaWRlRmVhdHVyZXNNdGwocGxhdGZvcm0sICZtRmVhdHVyZXMpOwogCkBA
IC03ODcsNiArODUwLDI3IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKCkK
IAogYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSgpCiB7
CisgICAgI2lmZGVmIEFOR0xFX01FVEFMX1hDT0RFX0JVSUxEU19TSEFERVJTCisgICAgICAgIG1E
ZWZhdWx0U2hhZGVyc0FzeW5jSW5mby5yZXNldChuZXcgRGVmYXVsdFNoYWRlckFzeW5jSW5mb010
bCk7CisgICAgICAgIAorICAgIAorICAgICAgICBOU1N0cmluZyAqcGF0aCA9IFtOU0J1bmRsZSBi
dW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXS5idW5kbGVQYXRoOworICAg
ICAgICBOU0Vycm9yICogZXJyb3IgPSBudWxscHRyOworICAgICAgICBtRGVmYXVsdFNoYWRlcnNB
c3luY0luZm8tPmRlZmF1bHRTaGFkZXJzID0gW2dldE1ldGFsRGV2aWNlKCkgbmV3RGVmYXVsdExp
YnJhcnlXaXRoQnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoUGF0aDpwYXRoXSBlcnJvcjomZXJy
b3JdOworCisgICAgICAgIGlmIChlcnJvciAmJiAhbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5k
ZWZhdWx0U2hhZGVycykKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NP
UEUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoKSA8PCAiSW50ZXJuYWwgZXJy
b3I6IG5ld0RlZmF1bHRMaWJyYXJ5V2l0aEJ1bmRsZSBmYWlsZWQuICIgPDwgZXJyb3IubG9jYWxp
emVkRGVzY3JpcHRpb24uVVRGOFN0cmluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1E
ZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnNDb21waWxlRXJyb3IgPSBzdGQ6
Om1vdmUoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7Cisg
ICAgICAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5j
SW5mby0+Y29tcGlsZWQgPSB0cnVlOworICAgICAgICAKKyAgICAjZWxzZQogICAgIG1EZWZhdWx0
U2hhZGVyc0FzeW5jSW5mby5yZXNldChuZXcgRGVmYXVsdFNoYWRlckFzeW5jSW5mb010bCk7CiAK
ICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byBhc3luYyBpbmZvIHN0cnVjdCBzaW5jZSBpdCBt
aWdodCBiZSByZWxlYXNlZCBpbiB0ZXJtaW5hdGUoKSwgYnV0IHRoZQpAQCAtODE1LDcgKzg5OSw3
IEBAIGFuZ2xlOjpSZXN1bHQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVNoYWRlckxpYnJhcnkoKQog
CiAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOwogICAgIH0KLQorICAg
ICNlbmRpZgogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtODQ3
LDE0NCArOTMxLDEyIEBAIGlkPE1UTExpYnJhcnk+IERpc3BsYXlNdGw6OmdldERlZmF1bHRTaGFk
ZXJzTGliKCkKIAogYm9vbCBEaXNwbGF5TXRsOjpzdXBwb3J0c0lPU0dQVUZhbWlseSh1aW50OF90
IGlPU0ZhbWlseSkgY29uc3QKIHsKLSNpZiAoIVRBUkdFVF9PU19JT1MgJiYgIVRBUkdFVF9PU19U
VikgfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSMg
ICAgaWYgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKSB8fCAoX19U
Vl9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEzMDAwMCkKLSAgICAvLyBJZiBkZXZpY2Ugc3Vw
cG9ydHMgW01UTERldmljZSBzdXBwb3J0c0ZhbWlseTpdLCB0aGVuIHVzZSBpdC4KLSAgICBpZiAo
QU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koMTMuMCkpCi0gICAgewotICAgICAgICBNVExHUFVGYW1p
bHkgZmFtaWx5OwotICAgICAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKLSAgICAgICAgewotICAgICAg
ICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxl
MTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BV
RmFtaWx5QXBwbGUzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0
OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBmYW1p
bHkgPSBNVExHUFVGYW1pbHlBcHBsZTU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAg
ICBpZiBUQVJHRVRfT1NfSU9TCi0gICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU2OwotICAgICAgICAgICAgICAgIGJyZWFrOwotIyAg
ICAgICAgZW5kaWYKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbZ2V0TWV0YWxEZXZpY2UoKSBzdXBw
b3J0c0ZhbWlseTpmYW1pbHldOwotICAgIH0gIC8vIE1ldGFsIDIuMgotIyAgICBlbmRpZiAgLy8g
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAotCi0gICAgLy8gSWYgZGV2aWNlIGRvZXNu
J3Qgc3VwcG9ydCBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlCi0gICAgLy8g
W01UTERldmljZSBzdXBwb3J0c0ZlYXR1cmVTZXQ6XS4KLSAgICBNVExGZWF0dXJlU2V0IGZlYXR1
cmVTZXQ7Ci0gICAgc3dpdGNoIChpT1NGYW1pbHkpCi0gICAgewotIyAgICBpZiBUQVJHRVRfT1Nf
SU9TCi0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJl
U2V0X2lPU19HUFVGYW1pbHkxX3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
MjoKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHky
X3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIGZl
YXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lPU19HUFVGYW1pbHkzX3YxOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0
dXJlU2V0X2lPU19HUFVGYW1pbHk0X3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAgICBp
ZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEyMDAwMAotICAgICAgICBjYXNl
IDU6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF9pT1NfR1BVRmFtaWx5
NV92MTsKLSAgICAgICAgICAgIGJyZWFrOwotIyAgICAgICAgZW5kaWYgIC8vIF9fSVBIT05FX09T
X1ZFUlNJT05fTUFYX0FMTE9XRUQKLSMgICAgZWxpZiBUQVJHRVRfT1NfVFYKLSAgICAgICAgY2Fz
ZSAxOgotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVy
ZVNldF90dk9TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSAzOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfdHZPU19HUFVGYW1p
bHkyX3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfSU9T
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFtnZXRNZXRhbERldmljZSgpIHN1cHBvcnRzRmVhdHVyZVNldDpmZWF0dXJlU2V0
XTsKLSNlbmRpZiAgICAgIC8vIFRBUkdFVF9PU19JT1MgfHwgVEFSR0VUX09TX1RWCisgICAgcmV0
dXJuIG10bDo6U3VwcG9ydHNJT1NHUFVGYW1pbHkoZ2V0TWV0YWxEZXZpY2UoKSwgaU9TRmFtaWx5
KTsKIH0KIAogYm9vbCBEaXNwbGF5TXRsOjpzdXBwb3J0c01hY0dQVUZhbWlseSh1aW50OF90IG1h
Y0ZhbWlseSkgY29uc3QKIHsKLSNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAotIyAgICBpZiBkZWZpbmVkKF9fTUFDXzEwXzE1KQotICAgIC8vIElmIGRldmljZSBzdXBw
b3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlIGl0LgotICAgIGlmIChB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMoMTAuMTUsIDEzLjApKQotICAgIHsKLSAgICAgICAgTVRM
R1BVRmFtaWx5IGZhbWlseTsKLQotICAgICAgICBzd2l0Y2ggKG1hY0ZhbWlseSkKLSAgICAgICAg
ewotIyAgICAgICAgaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0gICAgICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5c3QxOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAg
IGZhbWlseSA9IE1UTEdQVUZhbWlseU1hY0NhdGFseXN0MjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSMgICAgICAgIGVsc2UgICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICAgICAgICAg
IGNhc2UgMToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWMxOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAg
IGZhbWlseSA9IE1UTEdQVUZhbWlseU1hYzI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jICAg
ICAgICBlbmRpZiAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBbZ2V0TWV0YWxEZXZpY2UoKSBzdXBwb3J0c0ZhbWlseTpmYW1pbHldOwotICAgIH0gIC8v
IE1ldGFsIDIuMgotIyAgICBlbmRpZgotCi0gICAgLy8gSWYgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y
dCBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlCi0gICAgLy8gW01UTERldmlj
ZSBzdXBwb3J0c0ZlYXR1cmVTZXQ6XS4KLSMgICAgaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0g
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jICAgIGVsc2UKLSAgICBNVExG
ZWF0dXJlU2V0IGZlYXR1cmVTZXQ7Ci0gICAgc3dpdGNoIChtYWNGYW1pbHkpCi0gICAgewotICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF9tYWNP
U19HUFVGYW1pbHkxX3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAgICBpZiBkZWZpbmVk
KF9fTUFDXzEwXzE0KQotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0g
TVRMRmVhdHVyZVNldF9tYWNPU19HUFVGYW1pbHkyX3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0j
ICAgICAgICBlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9ydHNGZWF0dXJlU2V0
OmZlYXR1cmVTZXRdOwotIyAgICBlbmRpZiAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCi0jZWxz
ZSAgICAgICAvLyAjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLQot
ICAgIHJldHVybiBmYWxzZTsKLQotI2VuZGlmCisgICAgcmV0dXJuIG10bDo6U3VwcG9ydHNNYWNH
UFVGYW1pbHkoZ2V0TWV0YWxEZXZpY2UoKSwgbWFjRmFtaWx5KTsKIH0KIAogYm9vbCBEaXNwbGF5
TXRsOjpzdXBwb3J0c0VpdGhlckdQVUZhbWlseSh1aW50OF90IGlPU0ZhbWlseSwgdWludDhfdCBt
YWNGYW1pbHkpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCmlu
ZGV4IGI0NThiZDkxYmJlZmFmNmRkYjIyMjY0Yjc4MWUzZTg2YzdjM2Y3ZTYuLjVlNWNjZTljNTFj
ZjhmYjJiZmJhZGZmMTU3MzM1ZWE3M2EyNDk4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9G
cmFtZUJ1ZmZlck10bC5oCkBAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAogY2xhc3Mg
UmVuZGVyQ29tbWFuZEVuY29kZXI7CiB9ICAvLyBuYW1lc3BhY2UgbXRsCiBjbGFzcyBDb250ZXh0
TXRsOwotY2xhc3MgV2luZG93U3VyZmFjZU10bDsKK2NsYXNzIFN1cmZhY2VNdGw7CiAKIGNsYXNz
IEZyYW1lYnVmZmVyTXRsIDogcHVibGljIEZyYW1lYnVmZmVySW1wbAogewogICBwdWJsaWM6Ci0g
ICAgRnJhbWVidWZmZXJNdGwoY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlLCBib29s
IGZsaXBZLCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKTsKKyAgICBleHBsaWNpdCBGcmFt
ZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpOwogICAgIH5GcmFtZWJ1ZmZlck10bCgp
IG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkg
b3ZlcnJpZGU7CiAKQEAgLTk3LDcgKzk5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJs
aWMgRnJhbWVidWZmZXJJbXBsCiAKICAgICBnbDo6UmVjdGFuZ2xlIGdldENvbXBsZXRlUmVuZGVy
QXJlYSgpIGNvbnN0OwogICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgV2luZG93U3Vy
ZmFjZU10bCAqZ2V0QXR0YWNoZWRCYWNrYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZm
ZXI7IH0KKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKmdldEF0dGFjaGVkQmFja2J1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1CYWNrYnVmZmVyOyB9CiAKICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFy
dGVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpIGNvbnN0OwogICAgIG10bDo6UmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KTsKQEAgLTE2Miw2ICsxNjQsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMg
RnJhbWVidWZmZXJJbXBsCiAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVu
ZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5k
ZXJQYXNzRGVzYyAmZGVzYyk7CiAKKyAgICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRM
Q2xlYXJDb2xvciBjbGVhckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENs
ZWFyQ29sb3IgKmNvbG9yT3V0KTsKKwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlQ29sb3JSZW5k
ZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIHNpemVfdCBjb2xvckluZGV4R0wp
OwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlRGVwdGhSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRh
cmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC0xNjksMTEgKzE3NSwzNyBAQCBj
bGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJBdHRh
Y2htZW50ICphdHRhY2htZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRhcmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CiAKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGVpdGhlciByZXR1cm5zIHRoZSByZW5kZXIgdGFyZ2V0J3MgdGV4dHVyZSBp
dHNlbGYgaWYgdGhlIHRleHR1cmUgaXMgcmVhZGFibGUKKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5
IG9mIHRoYXQgdGV4dHVyZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBp
cyB0eXBpY2FsbHkgdXNlZAorICAgIC8vIGZvciBwYWNrZWQgZGVwdGggc3RlbmNpbCB3aGVyZSBy
ZWFkaW5nIHN0ZW5jaWwgcmVxdWlyZXMgYSBzdGVuY2lsIHZpZXcuIEhvd2V2ZXIgaWYgYSB0ZXh0
dXJlCisgICAgLy8gaGFzIGJvdGggcmVuZGVyIHRhcmdldCwgcGl4ZWwgZm9ybWF0IHZpZXcgJiBz
aGFkZXIgcmVhZGFibGUgdXNhZ2UgZmxhZ3MsIHRoZXJlIHdpbGwgYmUKKyAgICAvLyBzb21lIGds
aXRjaGVzIGhhcHBlbiBpbiBNZXRhbCBmcmFtZXdvcmsuCisgICAgLy8gU28gdGhlIHNvbHV0aW9u
IGlzIGNyZWF0aW5nIGEgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIHdpdGhvdXQgcGl4ZWwgZm9ybWF0
IHZpZXcgZmxhZyBidXQgaGFzCisgICAgLy8gcmVuZGVyIHRhcmdldCBmbGFnLCB0aGVuIGR1cmlu
ZyBibGl0dGluZyBwcm9jZXNzLCB0aGlzIHRleHR1cmUgaXMgY29waWVkIHRvIGFub3RoZXIKKyAg
ICAvLyBpbnRlcm1pZGlhdGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywg
YnV0IG5vdCByZW5kZXIgdGFyZ2V0IGZsYWcuCisgICAgYW5nbGU6OlJlc3VsdCBnZXRSZWFkYWJs
ZVZpZXdGb3JSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFy
Z2V0TXRsICZydHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpUZXh0dXJlUmVmICpyZWFkYWJsZURl
cHRoVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xl
dmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90ICpyZWFkYWJsZVZpZXdMYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKTsKKwog
ICAgIGFuZ2xlOjpSZXN1bHQgcmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGFja1Bp
eGVsc1BhcmFtcyAmcGFja1BpeGVsc1BhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCkgY29uc3Q7CiAKKyAg
ICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVj
dGFuZ2xlICZhcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RCdWZm
ZXJSb3dQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt
dGw6OkJ1ZmZlclJlZiAqZHN0QnVmZmVyKSBjb25zdDsKKwogICAgIC8vIE5PVEU6IHdlIGNhbm5v
dCB1c2UgUmVuZGVyVGFyZ2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBz
ZXBhcmF0ZQogICAgIC8vIGRlcHRoICYgc3RlbmNpbCBhdHRhY2htZW50cyBhcyBvZiBub3cuIFNl
cGFyYXRlIGRlcHRoICYgc3RlbmNpbCBjb3VsZCBiZSB1c2VmdWwgdG8KICAgICAvLyBzYXZlIHNw
YWNlcyBvbiBpT1MgZGV2aWNlcy4gU2VlIGRvYy9QYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0Lm1k
LgpAQCAtMTg5LDggKzIyMSwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFt
ZWJ1ZmZlckltcGwKICAgICAvLyBhcyBieSBhIGNvbXB1dGUgcGFzcy4KICAgICBib29sIG1SZW5k
ZXJQYXNzQ2xlYW5TdGFydCA9IGZhbHNlOwogCi0gICAgV2luZG93U3VyZmFjZU10bCAqbUJhY2ti
dWZmZXIgPSBudWxscHRyOwotICAgIGNvbnN0IGJvb2wgbUZsaXBZICAgICAgICAgICAgID0gZmFs
c2U7CisgICAgU3VyZmFjZU10bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAg
Y29uc3QgYm9vbCBtRmxpcFkgICAgICAgICAgICAgICA9IGZhbHNlOworCisgICAgbXRsOjpCdWZm
ZXJSZWYgbVJlYWRQaXhlbEJ1ZmZlcjsKIH07CiB9ICAvLyBuYW1lc3BhY2UgcngKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCmluZGV4IDg0ZTQyMjcwYTcxNTMwNzc1
YTcwODZkNzI3MjRkYmY5MTljODRhZDcuLmQ3MWRlNzJkMmRkMjUxYjI4YmE2Y2M5ZmZmYzExNTMz
YzAxZDAyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KQEAg
LTMzLDEyICszMywzMCBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRl
eHR1cmVSZWYgJnRleHR1cmUsCiAgICAgKmNvbG9yT3V0ID0KICAgICAgICAgbXRsOjpFbXVsYXRl
ZEFscGhhQ2xlYXJDb2xvcihjbGVhckNvbG9yLnRvTVRMQ2xlYXJDb2xvcigpLCB0ZXh0dXJlLT5n
ZXRDb2xvcldyaXRhYmxlTWFzaygpKTsKIH0KKworY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZH
ZXRSZWFkQXR0YWNobWVudEluZm8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXRNdGwg
KnJlbmRlclRhcmdldCkKK3sKKyAgICBHTGVudW0gaW1wbEZvcm1hdDsKKworICAgIGlmIChyZW5k
ZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKyAgICB7CisgICAgICAgIGlt
cGxGb3JtYXQgPSByZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpLT5hY3R1YWxBbmdsZUZvcm1hdCgp
LmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGltcGxGb3JtYXQgPSBHTF9OT05FOworICAgIH0KKworICAgIHJldHVybiBnbDo6
R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1hdCk7Cit9CisKIH0KIAogLy8gRnJh
bWVidWZmZXJNdGwgaW1wbGVtZW50YXRpb24KIEZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10
bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
aW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1ZmZlcikKICAgICA6IEZyYW1lYnVmZmVySW1w
bChzdGF0ZSksIG1CYWNrYnVmZmVyKGJhY2tidWZmZXIpLCBtRmxpcFkoZmxpcFkpCiB7CiAgICAg
cmVzZXQoKTsKQEAgLTU1LDYgKzczLDggQEAgdm9pZCBGcmFtZWJ1ZmZlck10bDo6cmVzZXQoKQog
ICAgIG1EZXB0aFJlbmRlclRhcmdldCA9IG1TdGVuY2lsUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsK
IAogICAgIG1SZW5kZXJQYXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQgPSBudWxscHRyOwor
CisgICAgbVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXJN
dGw6OmRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCkBAIC0xMjIsNyArMTQyLDYg
QEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJmdihjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQogewogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1z
IGNsZWFyT3B0czsKLQogICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVhckNvbG9yQnVmZmVyczsK
ICAgICBpZiAoYnVmZmVyID09IEdMX0RFUFRIKQogICAgIHsKQEAgLTEzMyw3ICsxNTIsNiBAQCBh
bmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZ2KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICBjbGVhckNvbG9yQnVmZmVycy5zZXQoZHJhd2J1ZmZlcik7
CiAgICAgICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFs
dWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsK
IH0KIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LApAQCAtMTQ1LDggKzE2Myw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJh
bWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChkcmF3YnVmZmVyKTsKIAogICAgIG10bDo6Q2xlYXJS
ZWN0UGFyYW1zIGNsZWFyT3B0czsKLSAgICBjbGVhck9wdHMuY2xlYXJDb2xvciA9IG10bDo6Q2xl
YXJDb2xvclZhbHVlKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7
Ci0KKyAgICBjbGVhck9wdHMuY2xlYXJDb2xvciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1
ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOwogICAgIHJldHVybiBjbGVh
ckltcGwoY29udGV4dCwgY2xlYXJDb2xvckJ1ZmZlcnMsICZjbGVhck9wdHMpOwogfQogYW5nbGU6
OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKQEAgLTE1OSw3ICsxNzYsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRs
OjpjbGVhckJ1ZmZlcml2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGdsOjpEcmF3
QnVmZmVyTWFzayBjbGVhckNvbG9yQnVmZmVyczsKICAgICBpZiAoYnVmZmVyID09IEdMX1NURU5D
SUwpCiAgICAgewotICAgICAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gdmFsdWVzWzBdICYg
bXRsOjprU3RlbmNpbE1hc2tBbGw7CisgICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSBn
bDo6Y2xhbXAodmFsdWVzWzBdLCAwLCBzdGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1h
c2tBbGwpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTE3Nyw3ICsxOTQsNyBAQCBhbmds
ZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZpKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogewogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFyT3B0czsKICAgICBj
bGVhck9wdHMuY2xlYXJEZXB0aCAgID0gZGVwdGg7Ci0gICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNp
bCA9IHN0ZW5jaWwgJiBtdGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICBjbGVhck9wdHMuY2xlYXJT
dGVuY2lsID0gZ2w6OmNsYW1wKHN0ZW5jaWwsIDAsIHN0YXRpY19jYXN0PEdMaW50PihtdGw6OmtT
dGVuY2lsTWFza0FsbCkpOwogCiAgICAgcmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJh
d0J1ZmZlck1hc2soKSwgJmNsZWFyT3B0cyk7CiB9CkBAIC0xODUsMTIgKzIwMiw3IEBAIGFuZ2xl
OjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiBjb25zdCBnbDo6SW50ZXJuYWxGb3JtYXQgJkZyYW1lYnVmZmVyTXRsOjpnZXRJ
bXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCgKICAgICBjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkgY29uc3QKIHsKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgPSBtdGw6OkdldElt
cGwoY29udGV4dCk7Ci0gICAgR0xlbnVtIHNpemVkRm9ybWF0ICAgICAgID0gbVN0YXRlLmdldFJl
YWRBdHRhY2htZW50KCktPmdldEZvcm1hdCgpLmluZm8tPnNpemVkSW50ZXJuYWxGb3JtYXQ7Ci0g
ICAgYW5nbGU6OkZvcm1hdElEIGZvcm1hdElEID0gYW5nbGU6OkZvcm1hdDo6SW50ZXJuYWxGb3Jt
YXRUb0lEKHNpemVkRm9ybWF0KTsKLSAgICBjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0ID0g
Y29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChmb3JtYXRJRCk7Ci0gICAg
R0xlbnVtIGltcGxGb3JtYXQgICAgICAgICAgICA9IG10bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1h
dCgpLmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3JtYXQ7Ci0gICAgcmV0dXJuIGdsOjpHZXRT
aXplZEludGVybmFsRm9ybWF0SW5mbyhpbXBsRm9ybWF0KTsKKyAgICByZXR1cm4gR2V0UmVhZEF0
dGFjaG1lbnRJbmZvKGNvbnRleHQsIGdldENvbG9yUmVhZFJlbmRlclRhcmdldChjb250ZXh0KSk7
CiB9CiAKIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHMoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCkBAIC01OTAsNiArNjAyLDkgQEAgYW5nbGU6OlJlc3VsdCBGcmFt
ZWJ1ZmZlck10bDo6c3luY1N0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICB7CiAgICAgICAgICAgICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0
ZShjb250ZXh0LCB0aGlzLCByZW5kZXJQYXNzQ2hhbmdlZCk7CiAgICAgICAgIH0KKworICAgICAg
ICAvLyBSZWNyZWF0ZSBwaXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgor
ICAgICAgICBtUmVhZFBpeGVsQnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiAKICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC03NDgsNyArNzYzLDcgQEAgdm9pZCBGcmFtZWJ1
ZmZlck10bDo6b25TdGFydGVkRHJhd2luZ1RvRnJhbWVCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpCiAKIHZvaWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCiB7Ci0gICAgaWYgKCFtQmFja2J1ZmZlcikKKyAgICBpZiAoIW1CYWNr
YnVmZmVyIHx8IG1CYWNrYnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTgxMiw2ICs4MjcsOTIgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6dXBkYXRlQ2FjaGVkUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXgKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKK2FuZ2xlOjpSZXN1
bHQgRnJhbWVidWZmZXJNdGw6OmdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldCgKKyAgICBj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICBjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnJ0
dCwKKyAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKyAgICBtdGw6OlRleHR1cmVS
ZWYgKnJlYWRhYmxlRGVwdGhWaWV3T3V0LAorICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVT
dGVuY2lsVmlld091dCwKKyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGV2ZWwsCisgICAgdWlu
dDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmll
d0FyZWEpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCAgICAgPSBtdGw6OkdldEltcGwo
Y29udGV4dCk7CisgICAgbXRsOjpUZXh0dXJlUmVmIHNyY1RleHR1cmUgPSBydHQuZ2V0VGV4dHVy
ZSgpOworICAgIHVpbnQzMl90IGxldmVsICAgICAgICAgICAgID0gcnR0LmdldExldmVsSW5kZXgo
KS5nZXQoKTsKKyAgICB1aW50MzJfdCBzbGljZSAgICAgICAgICAgICA9IHJ0dC5nZXRMYXllcklu
ZGV4KCk7CisKKyAgICAvLyBOT1RFKGhxbGUpOiBzbGljZSBpcyBub3QgdXNlZCBhdG0uCisgICAg
QVNTRVJUKHNsaWNlID09IDApOworCisgICAgYm9vbCByZWFkU3RlbmNpbCA9IHJlYWRhYmxlU3Rl
bmNpbFZpZXdPdXQ7CisKKyAgICBpZiAoIXNyY1RleHR1cmUpCisgICAgeworICAgICAgICBpZiAo
cmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZURl
cHRoVmlld091dCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3Rl
bmNpbFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSA9IHJl
YWRBcmVhOworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQor
CisgICAgYm9vbCBza2lwQ29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKyAg
ICBpZiAocnR0LmdldEZvcm1hdCgpLT5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkgJiYgcmVhZFN0
ZW5jaWwpCisgICAgeworICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGgg
c3RlbmNpbCwgYW5kIHdlIG5lZWQgc3RlbmNpbCB2aWV3LAorICAgICAgICAvLyB0aGVuIGl0IG11
c3Qgc3VwcG9ydCBjcmVhdGluZyBkaWZmZXJlbnQgZm9ybWF0IHZpZXcuCisgICAgICAgIHNraXBD
b3B5ID0gc2tpcENvcHkgJiYgc3JjVGV4dHVyZS0+c3VwcG9ydEZvcm1hdFZpZXcoKTsKKyAgICB9
CisKKyAgICBpZiAoc2tpcENvcHkpCisgICAgeworICAgICAgICAvLyBUZXh0dXJlIHN1cHBvcnRz
IHN0ZW5jaWwgdmlldywganVzdCB1c2UgaXQgZGlyZWN0bHkKKyAgICAgICAgaWYgKHJlYWRhYmxl
RGVwdGhWaWV3T3V0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdP
dXQgPSBzcmNUZXh0dXJlOworICAgICAgICB9CisgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxW
aWV3T3V0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9
IHNyY1RleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gbGV2
ZWw7CisgICAgICAgICpyZWFkYWJsZVZpZXdMYXllciA9IHNsaWNlOworICAgICAgICAqcmVhZGFi
bGVWaWV3QXJlYSAgPSByZWFkQXJlYTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHNyY1RleHR1cmUtPnRleHR1cmVUeXBlKCkgIT0gTVRMVGV4dHVyZVR5cGUzRCk7CisK
KyAgICAgICAgLy8gVGV4dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNpbCB2aWV3IG9yIG5vdCBz
aGFkZXIgcmVhZGFibGUsIGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKyAgICAgICAgLy8gdGV4dHVy
ZSB0aGF0IHN1cHBvcnRzIHN0ZW5jaWwgdmlldyBhbmQgc2hhZGVyIHJlYWQuCisgICAgICAgIG10
bDo6VGV4dHVyZVJlZiBmb3JtYXRhYmxlVmlldyA9IHNyY1RleHR1cmUtPmdldFJlYWRhYmxlQ29w
eSgKKyAgICAgICAgICAgIGNvbnRleHRNdGwsIGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5j
b2RlcigpLCBsZXZlbCwgc2xpY2UsCisgICAgICAgICAgICBNVExSZWdpb25NYWtlMkQocmVhZEFy
ZWEueCwgcmVhZEFyZWEueSwgcmVhZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCkpOworCisg
ICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIGZvcm1hdGFibGVWaWV3KTsK
KworICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IGZvcm1hdGFibGVWaWV3OworICAgICAgICB9Cisg
ICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorICAgICAgICB7CisgICAgICAgICAg
ICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IGZvcm1hdGFibGVWaWV3LT5nZXRTdGVuY2lsVmll
dygpOworICAgICAgICB9CisKKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gMDsKKyAgICAg
ICAgKnJlYWRhYmxlVmlld0xheWVyID0gMDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0FyZWEgID0g
Z2w6OlJlY3RhbmdsZSgwLCAwLCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVpZ2h0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKIGFuZ2xlOjpS
ZXN1bHQgRnJhbWVidWZmZXJNdGw6OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpSZW5kZXJQYXNzRGVzYyAqcERlc2NPdXQpCiB7CkBAIC04MzIsOSArOTMzLDkgQEAg
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJlbmRlclBhc3MoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGlmIChjb2xvclJlbmRlclRhcmdldCkKICAgICAg
ICAgewogICAgICAgICAgICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjKCZjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9
IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIGNvbG9yUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJT
YW1wbGVzKCkpOwogCiAgICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6
Om1heChkZXNjLm51bUNvbG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOwotICAgICAg
ICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIGNvbG9y
UmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogCiAgICAgICAgICAgICBpZiAoIW1S
ZW5kZXJQYXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQpCiAgICAgICAgICAgICB7CkBAIC04
NjIsMjIgKzk2MywyOSBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpwcmVwYXJlUmVu
ZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgbURlcHRoUmVuZGVy
VGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5kZXB0aEF0dGFjaG1lbnQp
OwogICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwg
bURlcHRoUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBkZXNjLmRlcHRoQXR0YWNobWVudC5yZXNldCgpOwotICAgIH0KIAog
ICAgIGlmIChtU3RlbmNpbFJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIG1TdGVuY2lsUmVu
ZGVyVGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5zdGVuY2lsQXR0YWNo
bWVudCk7CiAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNv
dW50LCBtU3RlbmNpbFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKICAgICB9CisK
KyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKKy8vIE92ZXJyaWRlIGNs
ZWFyIGNvbG9yIGJhc2VkIG9uIHRleHR1cmUncyB3cml0ZSBtYXNrCit2b2lkIEZyYW1lYnVmZmVy
TXRsOjpvdmVycmlkZUNsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xl
YXJDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExDbGVh
ckNvbG9yICpjb2xvck91dCkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAgICpj
b2xvck91dCA9IG10bDo6RW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvciwgdGV4dHVy
ZS0+Z2V0Q29sb3JXcml0YWJsZU1hc2soKSk7CisgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGRlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVzZXQoKTsKKyAgICAgICAgKmNvbG9yT3V0ID0g
Y2xlYXJDb2xvcjsKICAgICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
CiB9CiAKIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRPcChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTkyMyw3ICsxMDMxLDcgQEAgYW5nbGU6OlJlc3Vs
dCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJXaXRoTG9hZE9wUmVuZGVyUGFzc05vdFN0YXJ0ZWQoCiAK
ICAgICAgICAgbXRsOjpSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRhY2ht
ZW50ID0KICAgICAgICAgICAgIHRlbXBEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdM
XTsKLSAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2ht
ZW50LnRleHR1cmU7CisgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNv
bG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJz
LnRlc3QoY29sb3JJbmRleEdMKSkKICAgICAgICAgewpAQCAtOTY2LDcgKzEwNzQsNyBAQCBhbmds
ZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3BSZW5kZXJQYXNzU3RhcnRl
ZCgKIAogICAgICAgICBtdGw6OlJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZjb2xvckF0
dGFjaG1lbnQgPQogICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNb
Y29sb3JJbmRleEdMXTsKLSAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0g
Y29sb3JBdHRhY2htZW50LnRleHR1cmU7CisgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAm
dGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFy
Q29sb3JCdWZmZXJzLnRlc3QoY29sb3JJbmRleEdMKSkKICAgICAgICAgewpAQCAtMTE5Myw4ICsx
MzAxLDkgQEAgZ2w6OlJlY3RhbmdsZSBGcmFtZWJ1ZmZlck10bDo6Z2V0Q29ycmVjdEZsaXBwZWRS
ZWFkQXJlYShjb25zdCBnbDo6Q29udGV4dCAqY29udGUKICAgICBnbDo6UmVjdGFuZ2xlIGZsaXBw
ZWRBcmVhID0gZ2xBcmVhOwogICAgIGlmIChtRmxpcFkpCiAgICAgewotICAgICAgICBmbGlwcGVk
QXJlYS55ID0gcmVhZFJULT5nZXRUZXh0dXJlKCktPmhlaWdodChyZWFkUlQtPmdldExldmVsSW5k
ZXgoKSkgLSBmbGlwcGVkQXJlYS55IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBwZWRB
cmVhLmhlaWdodDsKKyAgICAgICAgZmxpcHBlZEFyZWEueSA9CisgICAgICAgICAgICByZWFkUlQt
PmdldFRleHR1cmUoKS0+aGVpZ2h0KHJlYWRSVC0+Z2V0TGV2ZWxJbmRleCgpKSAtCisgICAgICAg
ICAgICBmbGlwcGVkQXJlYS55IC0gZmxpcHBlZEFyZWEuaGVpZ2h0OwogICAgIH0KIAogICAgIHJl
dHVybiBmbGlwcGVkQXJlYTsKQEAgLTEyMTEsNyArMTMyMCw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJh
bWVidWZmZXJNdGw6OnJlYWRQaXhlbHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KLQog
ICAgIGlmIChwYWNrUGl4ZWxzUGFyYW1zLnBhY2tCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1
cm4gcmVhZFBpeGVsc1RvUEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMsIHJlbmRl
clRhcmdldCk7CkBAIC0xMjYxLDcgKzEzNjksNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgICAg
ICAvLyBDb252ZXJ0IHRvIGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICBQYWNrUGl4ZWxzKHBh
Y2tQaXhlbHNSb3dQYXJhbXMsIHJlYWRBbmdsZUZvcm1hdCwgYnVmZmVyUm93UGl0Y2gsIHJlYWRQ
aXhlbFJvd0J1ZmZlci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgcGl4ZWxzKTsKKyAgICAg
ICAgICAgcGl4ZWxzKTsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CkBAIC0xMjc5LDE5ICsxMzg3LDM2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6
OnJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIEFOR0xF
X01UTF9DSEVDSyhjb250ZXh0TXRsLCBwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAgICAgIEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAg
ICA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCk7Ci0gICAg
Y29uc3QgdWludDMyX3QgZHN0QnVmZmVyUm93UGl0Y2ggICAgPSBwYWNrUGl4ZWxzUGFyYW1zLm91
dHB1dFBpdGNoOwotICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0ID0gKnBh
Y2tQaXhlbHNQYXJhbXMuZGVzdEZvcm1hdDsKLSAgICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRl
ciAgICAgICAgICA9IHBhY2tQaXhlbHNQYXJhbXMucmV2ZXJzZVJvd09yZGVyOworICAgIHVpbnQz
Ml90IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNl
dCk7CiAKICAgICBCdWZmZXJNdGwgKnBhY2tCdWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1Bp
eGVsc1BhcmFtcy5wYWNrQnVmZmVyKTsKICAgICBtdGw6OkJ1ZmZlclJlZiBkc3RCdWZmZXIgPSBw
YWNrQnVmZmVyTXRsLT5nZXRDdXJyZW50QnVmZmVyKCk7CiAKKyAgICByZXR1cm4gcmVhZFBpeGVs
c1RvQnVmZmVyKGNvbnRleHQsIGFyZWEsIHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5y
ZXZlcnNlUm93T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFja1BpeGVs
c1BhcmFtcy5kZXN0Rm9ybWF0LCBvZmZzZXQsIHBhY2tQaXhlbHNQYXJhbXMub3V0cHV0UGl0Y2gs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHN0QnVmZmVyKTsKK30KKworYW5nbGU6
OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJU
YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZXZlcnNlUm93T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
QnVmZmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVm
ZmVyKSBjb25zdAoreworICAgIEFTU0VSVChyZW5kZXJUYXJnZXQpOworCisgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKwogICAgIGNvbnN0IG10bDo6
Rm9ybWF0ICZyZWFkRm9ybWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOwog
ICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJnJlYWRBbmdsZUZvcm1hdCA9IHJlYWRGb3JtYXQuYWN0
dWFsQW5nbGVGb3JtYXQoKTsKIAogICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVy
VGFyZ2V0LT5nZXRUZXh0dXJlKCk7CiAKKyAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZHN0QnVm
ZmVyID0gKnBEc3RCdWZmZXI7CisKICAgICBpZiAoZHN0QW5nbGVGb3JtYXQuaWQgIT0gcmVhZEFu
Z2xlRm9ybWF0LmlkIHx8IHRleHR1cmUtPnNhbXBsZXMoKSA+IDEgfHwKICAgICAgICAgKGRzdEJ1
ZmZlck9mZnNldCAlIGRzdEFuZ2xlRm9ybWF0LnBpeGVsQnl0ZXMpIHx8CiAgICAgICAgIChkc3RC
dWZmZXJPZmZzZXQgJSBtdGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkpCkBA
IC0xMzU5LDggKzE0ODQsOCBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4
ZWxzVG9QQk8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgICAgIHVpbnQz
Ml90IGJ1ZmZlclJvd09mZnNldCA9IGRzdEJ1ZmZlck9mZnNldDsKICAgICAgICAgICAgIC8vIENv
cHkgcGl4ZWxzIHJvdyBieSByb3cKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydFJvdywg
Y29waWVkUm93cyA9IDA7IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsKLSAgICAgICAgICAgICAg
ICAgKytjb3BpZWRSb3dzLCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRj
aCkKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydFJvdywgaSA9IDA7IGkgPCBhcmVhLmhl
aWdodDsKKyAgICAgICAgICAgICAgICAgKytpLCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RC
dWZmZXJSb3dQaXRjaCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzcmNSb3dSZWdp
b24ueSA9IHI7CiAKQEAgLTEzNzUsNSArMTUwMCw0IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZm
ZXJNdGw6OnJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFj
ZVN1cmZhY2VNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0OGU1ZGI5MDli
YThiZTQ0MGUxOWY0MjE3NzJkZGQxZjNlYTYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJm
YWNlTXRsLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCQU5HTEVf
UkVOREVSRVJfTUVUQUxfSU9TVVJGQUNFU1VSRkFDRU1UTF9IXworI2RlZmluZSBMSUJBTkdMRV9S
RU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRMX0hfCisKKyNpbmNsdWRlIDxJT1N1cmZh
Y2UvSU9TdXJmYWNlUmVmLmg+CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUlt
cGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oIgorCituYW1lc3Bh
Y2UgbWV0YWwKK3sKK2NsYXNzIEF0dHJpYnV0ZU1hcDsKK30gIC8vIG5hbWVzcGFjZSBtZXRhbAor
CituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgRGlzcGxheU1UTDsKKworY2xhc3MgSU9TdXJmYWNl
U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsUHJvdG9jb2wKK3sKKyAgcHVibGljOgorICAg
IElPU3VyZmFjZVN1cmZhY2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicyk7CisgICAgfklPU3VyZmFjZVN1cmZh
Y2VNdGwoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGVzdHJveShjb25zdCBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkpIG92ZXJyaWRlOworCisgICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGNvbnN0IGVn
bDo6RGlzcGxheSAqZGlzcGxheSkgb3ZlcnJpZGU7CisgICAgRnJhbWVidWZmZXJJbXBsICpjcmVh
dGVEZWZhdWx0RnJhbWVidWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVm
ZmVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3IgbWFrZUN1cnJlbnQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdW5N
YWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWds
OjpFcnJvciBzd2FwKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBl
Z2w6OkVycm9yIHBvc3RTdWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBvdmVycmlk
ZTsKKworICAgIGVnbDo6RXJyb3IgcXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRy
aWJ1dGUsIHZvaWQgKip2YWx1ZSkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBiaW5kVGV4SW1h
Z2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGJ1ZmZlcikgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOworICAgIGVn
bDo6RXJyb3IgZ2V0U3luY1ZhbHVlcyhFR0x1aW50NjRLSFIgKnVzdCwgRUdMdWludDY0S0hSICpt
c2MsIEVHTHVpbnQ2NEtIUiAqc2JjKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGdldE1zY1Jh
dGUoRUdMaW50ICpudW1lcmF0b3IsIEVHTGludCAqZGVub21pbmF0b3IpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRGaXhlZFdpZHRoKEVHTGludCB3aWR0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXhl
ZEhlaWdodChFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKKworICAgIC8vIFdpZHRoIGNhbiBjaGFu
Z2Ugd2hlbiB0aGUgY2xpZW50IHdpbmRvdyByZXNpemVzLgorICAgIEVHTGludCBnZXRXaWR0aCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIC8vIEhlaWdodCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVu
dCB3aW5kb3cgcmVzaXplcy4KKyAgICBFR0xpbnQgZ2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgRUdMaW50IGdldFN3YXBCZWhhdmlvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYW5n
bGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gYmluZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFy
Z2V0ICoqcnRPdXQpIG92ZXJyaWRlOworCisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50
RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7Cisg
ICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0KSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0U2Ft
cGxlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICBib29sIHByZXNlcnZlQnVm
ZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBtdGw6OlRleHR1cmVS
ZWYgZ2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9vbCBoYXNS
b2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0KKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYg
JmdldENvbG9yVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOyB9
CisKKyAgcHJpdmF0ZToKKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZVRleHR1cmVDcmVhdGVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tp
bmdUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0
IGNyZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KTsKKworICAgIGFuZ2xlOjpSZXN1bHQg
aW5pdGlhbGl6ZUFscGhhQ2hhbm5lbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1aW50
IHRleHR1cmUpOworCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQor
ICAgIElPU3VyZmFjZUxvY2tPcHRpb25zIGdldElPU3VyZmFjZUxvY2tPcHRpb25zKCkgY29uc3Q7
CisjZW5kaWYKKworICAgIENvbnRleHRNdGwgKmNvbnRleHRNVEw7CisgICAgSU9TdXJmYWNlUmVm
IG1JT1N1cmZhY2U7CisgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlOworICAg
IG10bDo6VGV4dHVyZVJlZiBtSU9TdXJmYWNlVGV4dHVyZVZpZXc7CisgICAgbXRsOjpGb3JtYXQg
bUZvcm1hdDsKKyAgICBtdGw6OkZvcm1hdCBtSW50ZXJuYWxGb3JtYXQ7CisgICAgUmVuZGVyVGFy
Z2V0TXRsIG1SZW5kZXJUYXJnZXQ7CisgICAgYm9vbCBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQ7
CisgICAgaW50IG1XaWR0aDsKKyAgICBpbnQgbUhlaWdodDsKKyAgICBpbnQgbVBsYW5lOworICAg
IGludCBtRm9ybWF0SW5kZXg7CisgICAgaW50IG1Sb3dTdHJpZGVJblBpeGVsczsKKworI2lmIGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TX1NJTVVMQVRPUikKKyAgICBHTHVpbnQgbUJvdW5kVGV4
dHVyZUlEOworICAgIGJvb2wgbVVwbG9hZEZyb21JT1N1cmZhY2U7CisgICAgYm9vbCBtUmVhZGJh
Y2tUb0lPU3VyZmFjZTsKKyNlbmRpZgorfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRp
ZiAgLy8gTElCQU5HTEVfUkVOREVSRVJfR0xfRUFHTF9JT1NVUkZBQ0VTVVJGQUNFRUFHTF9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jY2NjNzZhNzBjMzZiNjQzNDJlY2RhYzllNDAwYTQwOTI3ZjhkZmY2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
LyBJT1N1cmZhY2VTdXJmYWNlTXRsLm1tOgorLy8gICAgSW1wbGVtZW50cyB0aGUgY2xhc3MgbWV0
aG9kcyBmb3IgSU9TdXJmYWNlU3VyZmFjZU10bC4KKy8vCisKKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgiCisKKyNpbmNsdWRlIDxUYXJnZXRD
b25kaXRpb25hbHMuaD4KKworI2luY2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9TdXJmYWNlLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
Q29udGV4dE10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5o
IgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCIK
KworLy8gQ29tcGlsZXIgY2FuIHR1cm4gb24gcHJvZ3JhbW1hdGljYWwgZnJhbWUgY2FwdHVyZSBp
biByZWxlYXNlIGJ1aWxkIGJ5IGRlZmluaW5nCisvLyBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
IGZsYWcuCisjaWYgZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1F
X0NBUFRVUkUpCisjICAgIGRlZmluZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQg
MAorI2Vsc2UKKyMgICAgZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCBB
TkdMRV9XSVRIX01PREVSTl9NRVRBTF9BUEkKKyNlbmRpZgorbmFtZXNwYWNlIHJ4Cit7CisKK25h
bWVzcGFjZQoreworCitzdHJ1Y3QgSU9TdXJmYWNlRm9ybWF0SW5mbworeworICAgIEdMZW51bSBp
bnRlcm5hbEZvcm1hdDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBhbmdsZTo6Rm9ybWF0SUQgcGl4
ZWxGb3JtYXQ7CisgICAgYW5nbGU6OkZvcm1hdElEIGludGVybmFsUGl4ZWxGb3JtYXQ7Cit9Owor
CitzdGF0aWMgY29uc3QgSU9TdXJmYWNlRm9ybWF0SW5mbyBrSU9TdXJmYWNlRm9ybWF0c1tdID0g
eworICAgIHtHTF9SRUQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5P
Uk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19LAorICAgIHtHTF9SMTZVSSwgR0xfVU5TSUdO
RURfU0hPUlQsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VJTlQsIGFuZ2xlOjpGb3JtYXRJRDo6
UjE2RzE2X1VJTlR9LAorICAgIHtHTF9SRywgR0xfVU5TSUdORURfQllURSwgYW5nbGU6OkZvcm1h
dElEOjpSOEc4X1VOT1JNLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk19LAorICAgIHtHTF9S
R0IsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0sIGFu
Z2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk19LAorICAgIHtHTF9CR1JBX0VYVCwgR0xfVU5T
SUdORURfQllURSwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STSwKKyAgICAgYW5nbGU6
OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCisgICAge0dMX1JHQjEwX0EyLCBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsIGFuZ2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk0s
CisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk19LAorICAgIHtHTF9SR0JB
LCBHTF9IQUxGX0ZMT0FULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNkIxNkExNl9GTE9BVCwKKyAg
ICAgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZCMTZBMTZfRkxPQVR9LAorfTsKKworaW50IEZpbmRJ
T1N1cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihBcnJheVNp
emUoa0lPU3VyZmFjZUZvcm1hdHMpKTsgKytpKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byAm
Zm9ybWF0SW5mbyA9IGtJT1N1cmZhY2VGb3JtYXRzW2ldOworICAgICAgICBpZiAoZm9ybWF0SW5m
by5pbnRlcm5hbEZvcm1hdCA9PSBpbnRlcm5hbEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0g
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oaSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisvLyBUT0RPKGpjdW5uaW5n
aGFtKSA6IHJlZmFjdG9yIHRoaXMgYW5kIHN1cmZhY2VtdGwgdG8gcmVkdWNlIGNvcHkrcGFzdGVk
IGNvZGUKKworQU5HTEVfTVRMX1VOVVNFRAorYm9vbCBJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKQor
eworI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gZmFs
c2U7CisjZWxzZQorICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBmcmFtZSBjYXB0dXJlIHByb2dyYW1t
YXRpY2FsbHkgaWYgdGhlIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUKKyAgICAvLyBlbnZpcm9u
bWVudCBmbGFnIGlzIHNldC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHNsb3cgZG93biB0aGUgcmVuZGVy
aW5nLiBUaGlzIGFsbG93cyB1c2VyIHRvCisgICAgLy8gZmluZWx5IGNvbnRyb2wgd2hldGhlciB0
aGV5IHdhbnQgdG8gY2FwdHVyZSB0aGUgZnJhbWUgZm9yIHBhcnRpY3VsYXIgYXBwbGljYXRpb24g
b3Igbm90LgorICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5H
TEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSIpOworICAgIHN0YXRpYyBjb25zdCBib29sIGVuYWJsZWQg
PSB2YXIgPyAoc3RyY21wKHZhciwgIjEiKSA9PSAwKSA6IGZhbHNlOworCisgICAgcmV0dXJuIGVu
YWJsZWQ7CisjZW5kaWYKK30KKworQU5HTEVfTVRMX1VOVVNFRAorc3RkOjpzdHJpbmcgR2V0TWV0
YWxDYXB0dXJlRmlsZSgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxF
RAorICAgIHJldHVybiAiIjsKKyNlbHNlCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAg
PSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9GSUxFIik7CisgICAgY29u
c3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB2YXIgPyB2YXIgOiAiIjsKKworICAgIHJldHVybiBm
aWxlUGF0aDsKKyNlbmRpZgorfQorCitBTkdMRV9NVExfVU5VU0VECitzaXplX3QgTWF4QWxsb3dl
ZEZyYW1lQ2FwdHVyZSgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxF
RAorICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAg
ICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX01BWCIpOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVzID0gdmFyID8gc3RkOjphdG9pKHZhcikgOiAxMDA7
CisKKyAgICByZXR1cm4gbWF4RnJhbWVzOworI2VuZGlmCit9CisKK0FOR0xFX01UTF9VTlVTRUQK
K3NpemVfdCBNaW5BbGxvd2VkRnJhbWVDYXB0dXJlKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJB
TUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIGF1dG8gdmFyICAg
ICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVS
RV9NSU4iKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkZyYW1lID0gdmFyID8gc3RkOjph
dG9pKHZhcikgOiAwOworCisgICAgcmV0dXJuIG1pbkZyYW1lOworI2VuZGlmCit9CisKK0FOR0xF
X01UTF9VTlVTRUQKK2Jvb2wgRnJhbWVDYXB0dXJlRGV2aWNlU2NvcGUoKQoreworI2lmICFBTkdM
RV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQor
ICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfU0NPUEUiKTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZURl
dmljZSA9IHZhciA/IChzdHJjbXAodmFyLCAiZGV2aWNlIikgPT0gMCkgOiBmYWxzZTsKKworICAg
IHJldHVybiBzY29wZURldmljZTsKKyNlbmRpZgorfQorCitBTkdMRV9NVExfVU5VU0VECitzdGQ6
OmF0b21pYzxzaXplX3Q+IGdGcmFtZUNhcHR1cmVkKDApOworCitBTkdMRV9NVExfVU5VU0VECit2
b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsIGlkPE1UTENv
bW1hbmRRdWV1ZT4gbWV0YWxDbWRRdWV1ZSkKK3sKKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKyAgICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnRnJhbWVDYXB0dXJlZCA+PSBNYXhBbGxv
d2VkRnJhbWVDYXB0dXJlKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TVRMQ2FwdHVyZU1hbmFnZXIgKmNhcHR1cmVNYW5hZ2VyID0gW01UTENhcHR1cmVNYW5hZ2VyIHNo
YXJlZENhcHR1cmVNYW5hZ2VyXTsKKyAgICBpZiAoY2FwdHVyZU1hbmFnZXIuaXNDYXB0dXJpbmcp
CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ0ZyYW1lQ2FwdHVyZWQrKzsK
KworICAgIGlmIChnRnJhbWVDYXB0dXJlZCA8IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyMgICAgaWZkZWYgX19NQUNfMTBfMTUKKyAg
ICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQorICAgIHsK
KyAgICAgICAgTVRMQ2FwdHVyZURlc2NyaXB0b3IgKmNhcHR1cmVEZXNjcmlwdG9yID0gW1tNVExD
YXB0dXJlRGVzY3JpcHRvciBhbGxvY10gaW5pdF07CisgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9y
LmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyBmaWxlUGF0aCAgICAgICAgICAgICAgPSBHZXRNZXRhbENhcHR1cmVGaWxlKCk7Cisg
ICAgICAgIGlmIChmaWxlUGF0aCAhPSAiIikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcgbnVtYmVyZWRQYXRoID0KKyAgICAgICAgICAgICAgICBmaWxlUGF0aCArIHN0
ZDo6dG9fc3RyaW5nKGdGcmFtZUNhcHR1cmVkIC0gMSkgKyAiLmdwdXRyYWNlIjsKKyAgICAgICAg
ICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9u
R1BVVHJhY2VEb2N1bWVudDsKKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLm91dHB1dFVS
TCA9CisgICAgICAgICAgICAgICAgW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6bnVtYmVyZWRQYXRoLmNfc3RyKCldCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcGF1c2UgZXhlY3V0aW9uIG9ubHkg
aWYgYXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQgaW5zaWRlIFhjb2RlCisgICAgICAgICAg
ICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9IE1UTENhcHR1cmVEZXN0aW5hdGlvbkRl
dmVsb3BlclRvb2xzOworICAgICAgICB9CisKKyAgICAgICAgTlNFcnJvciAqZXJyb3I7CisgICAg
ICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1
cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TTG9n
KEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVycm9yICVAIiwgZXJyb3IpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyMgICAgZW5kaWYgIC8vIF9fTUFDXzEwXzE1CisgICAgICAgIGlm
IChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMykpCisgICAgeworICAg
ICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1
cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKyAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuY2Fw
dHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisKKyAgICAgICAgTlNFcnJvciAqZXJy
b3I7CisgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlw
dG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVycm9yICVAIiwgZXJyb3IpOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmICAvLyBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VO
QUJMRUQKK30KKwordm9pZCBTdGFydEZyYW1lQ2FwdHVyZShDb250ZXh0TXRsICpjb250ZXh0KQor
eworICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHQtPmdldE1ldGFsRGV2aWNlKCksIGNvbnRl
eHQtPmNtZFF1ZXVlKCkuZ2V0KCkpOworfQorCit2b2lkIFN0b3BGcmFtZUNhcHR1cmUoKQorewor
I2lmIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIGlmICghSXNGcmFtZUNh
cHR1cmVFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIE1UTENh
cHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRD
YXB0dXJlTWFuYWdlcl07CisgICAgaWYgKGNhcHR1cmVNYW5hZ2VyLmlzQ2FwdHVyaW5nKQorICAg
IHsKKyAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0b3BDYXB0dXJlXTsKKyAgICB9CisjZW5kaWYK
K30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJT1N1cmZhY2VTdXJmYWNlTXRsOjpJ
T1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVy
IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgICAgOiBTdXJmYWNlTXRsUHJvdG9jb2woc3Rh
dGUpCit7CisgICAgLy8gS2VlcCByZWZlcmVuY2UgdG8gdGhlIElPU3VyZmFjZSBzbyBpdCBkb2Vz
bid0IGdldCBkZWxldGVkIHdoaWxlIHRoZSBwYnVmZmVyIGV4aXN0cy4KKyAgICBtSU9TdXJmYWNl
ID0gcmVpbnRlcnByZXRfY2FzdDxJT1N1cmZhY2VSZWY+KGJ1ZmZlcik7CisgICAgQ0ZSZXRhaW4o
bUlPU3VyZmFjZSk7CisKKyAgICAvLyBFeHRyYWN0IGF0dHJpYnMgdXNlZnVsIGZvciB0aGUgY2Fs
bCB0byBFQUdMVGV4SW1hZ2VJT1N1cmZhY2UyRAorICAgIG1XaWR0aCAgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworICAgIG1IZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpKTsKKyAgICBtUGxhbmUgID0gc3RhdGljX2Nhc3Q8
aW50PihhdHRyaWJzLmdldChFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFKSk7CisgICAgLy8gSG9w
ZWZ1bGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHJvdyBpcyBhbHdheXMgYW4gaW50ZWdlciBu
dW1iZXIgb2YgcGl4ZWxzLiBXZSB1c2UKKyAgICAvLyBnbFJlYWRQaXhlbHMgdG8gZmlsbCB0aGUg
SU9TdXJmYWNlIGluIHRoZSBzaW11bGF0b3IgYW5kIGl0IGNhbiBvbmx5IHN1cHBvcnQgc3RyaWRl
cyB0aGF0IGFyZQorICAgIC8vIGFuIGludGVnZXIgbnVtYmVyIG9mIHBpeGVscy4KKyAgICBBU1NF
UlQoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFuZSkgJQor
ICAgICAgICAgICAgICAgSU9TdXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50T2ZQbGFuZShtSU9TdXJm
YWNlLCBtUGxhbmUpID09CisgICAgICAgICAgIDApOworICAgIG1Sb3dTdHJpZGVJblBpeGVscyA9
IHN0YXRpY19jYXN0PGludD4oSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZh
Y2UsIG1QbGFuZSkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU9TdXJmYWNlR2V0Qnl0ZXNQZXJFbGVtZW50T2ZQbGFuZShtSU9TdXJmYWNlLCBtUGxhbmUpKTsK
KworICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJF
X0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7CisgICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0g
YXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7CisgICAgbUZvcm1hdEluZGV4ID0K
KyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50
ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKyAgICBBU1NFUlQobUZv
cm1hdEluZGV4ID49IDApOworICAgIG1Gb3JtYXQgICAgICAgICA9IGRpc3BsYXktPmdldFBpeGVs
Rm9ybWF0KGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF0ucGl4ZWxGb3JtYXQpOworICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGRpc3BsYXktPmdldFBpeGVsRm9ybWF0KGtJT1N1cmZhY2VGb3Jt
YXRzW21Gb3JtYXRJbmRleF0uaW50ZXJuYWxQaXhlbEZvcm1hdCk7Cit9CisKK0lPU3VyZmFjZVN1
cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRsKCkKK3sKKyAgICBTdG9wRnJhbWVDYXB0dXJl
KCk7CisgICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIENGUmVs
ZWFzZShtSU9TdXJmYWNlKTsKKyAgICAgICAgbUlPU3VyZmFjZSA9IG51bGxwdHI7CisgICAgfQor
fQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OmRlc3Ryb3koY29uc3QgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5KSB7fQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmluaXRpYWxp
emUoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIERpc3BsYXlNdGwgKmRpc3Bs
YXlNdGwgICAgPSBtdGw6OkdldEltcGwoZGlzcGxheSk7CisgICAgaWQ8TVRMRGV2aWNlPiBtZXRh
bERldmljZSA9IGRpc3BsYXlNdGwtPmdldE1ldGFsRGV2aWNlKCk7CisKKyAgICBTdGFydEZyYW1l
Q2FwdHVyZShtZXRhbERldmljZSwgZGlzcGxheU10bC0+Y21kUXVldWUoKS5nZXQoKSk7CisgICAg
cmV0dXJuIGVnbDo6Tm9FcnJvcigpOworfQorCitGcmFtZWJ1ZmZlckltcGwgKklPU3VyZmFjZVN1
cmZhY2VNdGw6OmNyZWF0ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSkKK3sKKyAgICBh
dXRvIGZibyA9IG5ldyBGcmFtZWJ1ZmZlck10bChzdGF0ZSwgLyogZmxpcFkgKi8gdHJ1ZSwgLyog
YmFja2J1ZmZlciAqLyB0aGlzKTsKKyAgICByZXR1cm4gZmJvOworfQorCitlZ2w6OkVycm9yIElP
U3VyZmFjZVN1cmZhY2VNdGw6Om1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
KQoreworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7
CisgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4dE10bCk7CisgICAgcmV0dXJuIGVnbDo6Tm9F
cnJvcigpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnVuTWFrZUN1cnJl
bnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgU3RvcEZyYW1lQ2FwdHVyZSgp
OworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzd2FwKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIFN0b3BG
cmFtZUNhcHR1cmUoKTsKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGNvbnRleHQpOworICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpw
b3N0U3ViQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB3aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KQoreworICAg
IFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKwor
ZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUo
RUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZh
Y2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVH
TGludCBidWZmZXIpCit7CisKKyAgICBhbmdsZTo6UmVzdWx0IHJlcyA9IGNyZWF0ZUJhY2tpbmdU
ZXh0dXJlKGNvbnRleHQpOworICAgIGlmIChyZXMgPT0gYW5nbGU6OlJlc3VsdDo6Q29udGludWUp
CisgICAgICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VN
dGw6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1
ZmZlcikKK3sKKyAgICAvLyBUaGlzIHdpbGwgbmVlZCBpbXBsZW1lbnRhdGlvbgorICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgaWYgKGNvbnRl
eHRNdGwtPmZsdXNoKGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorICAgIHsK
KyAgICAgICAgbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkID0gZmFsc2U7CisgICAgICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKKyAgICB9CisgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7
Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyhFR0x1
aW50NjRLSFIgKnVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0x1aW50NjRLSFIgKm1zYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0x1aW50NjRLSFIgKnNiYykKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJm
YWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpkZW5v
bWluYXRvcikKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RWdsQmFk
QWNjZXNzKCk7Cit9CisKK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFs
KEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgSU9T
dXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lkdGgpCit7CisgICAgVU5J
TVBMRU1FTlRFRCgpOworfQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldEZpeGVkSGVp
Z2h0KEVHTGludCBoZWlnaHQpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworfQorCisvLyB3aWR0
aCBhbmQgaGVpZ2h0IGNhbiBjaGFuZ2Ugd2l0aCBjbGllbnQgd2luZG93IHJlc2l6aW5nCitFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFR0xpbnQ+KG1XaWR0aCk7Cit9CisKK0VHTGludCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFR0xpbnQ+
KG1IZWlnaHQpOworfQorCitFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3dhcEJlaGF2aW9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gRUdMX0JVRkZFUl9ERVNUUk9ZRUQ7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNl
U3VyZmFjZU10bDo6Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldCgKKyAgICBjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICBHTGVudW0gYmluZGluZywKKyAgICBjb25zdCBnbDo6SW1hZ2VJ
bmRleCAmaW1hZ2VJbmRleCwKKyAgICBHTHNpemVpIHNhbXBsZXMsCisgICAgRnJhbWVidWZmZXJB
dHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCit7CisgICAgQU5HTEVfVFJZKGVuc3VyZVRl
eHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKKyAgICAqcnRPdXQgPSAmbVJlbmRlclRhcmdldDsKKyAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgSU9T
dXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIGJvb2wgKm5ld0RyYXdhYmxlT3V0KQoreworICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFj
ZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCit7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCithbmds
ZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZUJhY2tpbmdUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIG10bDo6VGV4dHVyZVJlZiBtVGVtcG9yYXJ5
U3VyZmFjZVJlZjsKKyAgICBBTkdMRV9UUlkoY3JlYXRlVGV4dHVyZShjb250ZXh0LCBtRm9ybWF0
LCBtV2lkdGgsIG1IZWlnaHQsIGZhbHNlLCAmbVRlbXBvcmFyeVN1cmZhY2VSZWYpKTsKKyAgICAv
LyBDcmVhdGUgdGV4dHVyZSB2aWV3IGFyb3VuZCB0aGUgYmFzZSBmb3JtYXQgb2YgdGhlIHRleHR1
cmUuCisgICAgbUlPU3VyZmFjZVRleHR1cmUgPQorICAgICAgICBtVGVtcG9yYXJ5U3VyZmFjZVJl
Zi0+Y3JlYXRlVmlld1dpdGhEaWZmZXJlbnRGb3JtYXQoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3Jt
KTsKKyAgICBtUmVuZGVyVGFyZ2V0LnNldChtSU9TdXJmYWNlVGV4dHVyZSwgbXRsOjprWmVyb05h
dGl2ZU1pcExldmVsLCAwLCBtSW50ZXJuYWxGb3JtYXQpOworICAgIG1JT1N1cmZhY2VUZXh0dXJl
Q3JlYXRlZCA9IHRydWU7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQor
CithbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZVRleHR1cmVDcmVhdGVk
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGlmICghbUlPU3VyZmFjZVRleHR1
cmVDcmVhdGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJhY2tpbmdUZXh0dXJlKGNv
bnRleHQpOworICAgIH0KKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisK
K210bDo6VGV4dHVyZVJlZiBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRUZXh0dXJlKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGlmIChlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRh
aW5lZChjb250ZXh0KSA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtSU9TdXJmYWNlVGV4dHVyZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK2FuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Y3JlYXRlVGV4dHVyZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KQoreworICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgQU5HTEVfVFJZ
KG10bDo6VGV4dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoY29udGV4dE10bCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBtSU9TdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1QbGFuZSwgdGV4dHVyZU91dCkpOworICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5o
CmluZGV4IDM4OWVjZTc1MGU3Y2EzMjc3MDJmNzM1OTUzYTIyMWMyNDZlOWFiZmUuLmViOWJiMDE1
NWMyZjkxMzUzYjhiNWJjOTZjYzIxMzY5ZDY2NzhiZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1By
b2dyYW1NdGwuaApAQCAtMjAsMTIgKzIwLDEzIEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX3N0YXRlX2NhY2hlLmgiCiAKIG5hbWVzcGFjZSByeAogeworI2RlZmluZSBTSEFERVJfRU5U
UllfTkFNRSBAIm1haW4wIgogY2xhc3MgQ29udGV4dE10bDsKIAogc3RydWN0IFByb2dyYW1Bcmd1
bWVudEJ1ZmZlckVuY29kZXJNdGwKQEAgLTEzNCw2ICsxMzUsMTAgQEAgY2xhc3MgUHJvZ3JhbU10
bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNw
ZWNpYWxpemUKICAgICBib29sIGhhc1NwZWNpYWxpemVkU2hhZGVyKGdsOjpTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRl
clBpcGVsaW5lRGVzYyAmcmVuZGVyUGlwZWxpbmVEZXNjKSBvdmVycmlkZTsKIAorICAgIGFuZ2xl
OjpSZXN1bHQgY3JlYXRlTXNsU2hhZGVyTGliKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZv
TG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VHJhbnNsYXRl
ZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvKTsKICAgICAvLyBDYWxscyB0aGlzIGJlZm9y
ZSBkcmF3aW5nLCBjaGFuZ2VkUGlwZWxpbmVEZXNjIGlzIHBhc3NlZCB3aGVuIHZlcnRleCBhdHRy
aWJ1dGVzIGRlc2MgYW5kL29yCiAgICAgLy8gc2hhZGVyIHByb2dyYW0gY2hhbmdlZC4KICAgICBh
bmdsZTo6UmVzdWx0IHNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LApAQCAt
MTQxLDcgKzE0NiwxMiBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBw
dWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwaXBlbGluZURlc2NDaGFuZ2VkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpOworCisg
ICAgc3RkOjpzdHJpbmcgZ2V0WGZiTXNsU291cmNlKCkgY29uc3QgeyByZXR1cm4gbVhmYk1zbFNv
dXJjZTsgfQorCisgICAgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlICptTWV0YWxYZmJSZW5kZXJQ
aXBlbGluZUNhY2hlOwogCiAgIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGludCBjb2xzLCBpbnQg
cm93cz4KQEAgLTE1Niw2ICsxNjYsMTEgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9n
cmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKICAgICB2
b2lkIHNldFVuaWZvcm1JbXBsKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBU
ICp2LCBHTGVudW0gZW50cnlQb2ludFR5cGUpOwogCiAgICAgYW5nbGU6OlJlc3VsdCBpbml0RGVm
YXVsdFVuaWZvcm1CbG9ja3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCk7CisgICAgYW5n
bGU6OlJlc3VsdCByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeShjb25zdCBnbDo6Q29u
dGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzaXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNp
emUpOworICAgIHZvaWQgc2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhnbDo6QmluYXJ5T3V0
cHV0U3RyZWFtICpzdHJlYW0pOworICAgIGFuZ2xlOjpSZXN1bHQgbG9hZERlZmF1bHRVbmlmb3Jt
QmxvY2tzSW5mbyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdFVuaWZvcm1zKENvbnRleHRNdGwgKmNv
bnRleHQsIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIpOwogICAgIGFuZ2xl
OjpSZXN1bHQgdXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKQEAg
LTE3NywyMSArMTkyLDMzIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGws
IHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJmJsb2NrcywKICAgICAgICAgZ2w6OlNo
YWRlclR5cGUgc2hhZGVyVHlwZSk7CiAKLSAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZVhmYkJ1ZmZl
cnMoQ29udGV4dE10bCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVs
aW5lRGVzYyk7Ci0KICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwgKmNvbnRleHQpOwogCisgICAg
dm9pZCBzYXZlVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFt
KTsKKyAgICB2b2lkIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5SW5wdXRTdHJlYW0g
KnN0cmVhbSk7CisKKyAgICB2b2lkIHNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91
dHB1dFN0cmVhbSAqc3RyZWFtKTsKKyAgICB2b2lkIGxvYWRTaGFkZXJJbnRlcm5hbEluZm8oZ2w6
OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworCisjaWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQ
SVJWCisKKyAgICBhbmdsZTo6UmVzdWx0IGxpbmtJbXBsU3BpcnYoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlBy
b2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOworI2VuZGlmCisKKyAgICBhbmdsZTo6UmVz
dWx0IGxpbmtJbXBsRGlyZWN0KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNl
cyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9M
b2cgJmluZm9Mb2cpOworCiAgICAgdm9pZCBsaW5rUmVzb3VyY2VzKGNvbnN0IGdsOjpQcm9ncmFt
TGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMpOwogICAgIGFuZ2xlOjpSZXN1bHQgbGlua0ltcGwo
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CiAKLSAgICBhbmdsZTo6UmVz
dWx0IGNyZWF0ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFk
ZXJJbmZvICp0cmFuc2xhdGVkTXNsSW5mbyk7CisgICAgYW5nbGU6OlJlc3VsdCBsaW5rVHJhbnNs
YXRlZFNoYWRlcnMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5m
b0xvZyk7CiAKICAgICAvLyBTdGF0ZSBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9ja3MuCiAg
ICAgc3RydWN0IERlZmF1bHRVbmlmb3JtQmxvY2sgZmluYWwgOiBwcml2YXRlIGFuZ2xlOjpOb25D
b3B5YWJsZQpAQCAtMjMwLDYgKzI1Nyw3IEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJv
Z3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAg
Ly8gQ2FjaGVkIHJlZmVyZW5jZXMgb2YgY3VycmVudCBzaGFkZXIgdmFyaWFudHMuCiAgICAgZ2w6
OlNoYWRlck1hcDxQcm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqPiBtQ3VycmVudFNoYWRlclZh
cmlhbnRzOwogCisgICAgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwIG1WYXJpYWJs
ZUluZm9NYXA7CiAgICAgLy8gU2NyYXRjaCBkYXRhOgogICAgIC8vIExlZ2FsaXplZCBidWZmZXJz
IGFuZCB0aGVpciBvZmZzZXRzLiBGb3IgZXhhbXBsZSwgdW5pZm9ybSBidWZmZXIncyBvZmZzZXQ9
MSBpcyBub3QgYSB2YWxpZAogICAgIC8vIG9mZnNldCwgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8g
bGVnYWwgb2Zmc2V0IGFuZCB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIGFycmF5LgpAQCAt
MjM4LDcgKzI2NiwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBw
dWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQogICAgIC8vIGludG8gYW4g
YXJndW1lbnQgYnVmZmVyLgogICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBtQXJndW1lbnRCdWZm
ZXJSZW5kZXJTdGFnZVVzYWdlczsKIAorICAgIHVpbnQzMl90IG1TaGFkb3dDb21wYXJlTW9kZXNb
bXRsOjprTWF4U2hhZGVyU2FtcGxlcnNdID0gezB9OworCiAgICAgbXRsOjpSZW5kZXJQaXBlbGlu
ZUNhY2hlIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGU7CisgICAgc3RkOjpzdHJpbmcgbVhmYk1z
bFNvdXJjZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJv
Z3JhbU10bC5tbQppbmRleCA1MGUyZjYzODdmZDQ3ZTdmYzM5YzU3MGM2ZDcyNTY2YzNiZjVjMjNk
Li42ZGE4NjY0MWNhYTg1MzU2OGMwODVhNmEwOGJjNGNmNjVmNTAwMjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3Jh
bU10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUHJvZ3JhbU10bC5tbQpAQCAtMTQsMjUgKzE0LDMxIEBACiAjaW5jbHVkZSA8c3N0
cmVhbT4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCiAjaW5jbHVkZSAi
bGliQU5HTEUvQ29udGV4dC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL1Byb2dyYW1MaW5rZWRSZXNv
dXJjZXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaCIKLSNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL3Jl
bmRlcmVyX3V0aWxzLmgiCiAKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyMgICAgaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgcngKIHsKIAogbmFtZXNwYWNlCiB7Ci0KLSNkZWZpbmUgU0hBREVSX0VO
VFJZX05BTUUgQCJtYWluMCIKKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKIGNvbnN0ZXhw
ciBjaGFyIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4W10gPSAiX3RtcCI7Ci0KKyNlbmRpZgog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBTY29wZWRBdXRvQ2xlYXJWZWN0b3IKIHsKQEAg
LTc4LDYgKzg0LDcgQEAgdm9pZCBJbml0RGVmYXVsdFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnZl
Y3RvcjxzaDo6VW5pZm9ybT4gJnVuaWZvcm1zLAogCiAgICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGJs
b2NrRW5jb2Rlci5nZXRDdXJyZW50T2Zmc2V0KCk7CiAKKyAgICAvLyBUT0RPKGptYWRpbGwpOiBJ
IHRoaW5rIHdlIHN0aWxsIG5lZWQgYSB2YWxpZCBibG9jayBmb3IgdGhlIHBpcGVsaW5lIGV2ZW4g
aWYgemVybyBzaXplZC4KICAgICBpZiAoYmxvY2tTaXplID09IDApCiAgICAgewogICAgICAgICAq
YmxvY2tTaXplT3V0ID0gMDsKQEAgLTIyOCwxMSArMjM1LDE2IEBAIFByb2dyYW1NdGw6OkRlZmF1
bHRVbmlmb3JtQmxvY2s6OkRlZmF1bHRVbmlmb3JtQmxvY2soKSB7fQogCiBQcm9ncmFtTXRsOjpE
ZWZhdWx0VW5pZm9ybUJsb2NrOjp+RGVmYXVsdFVuaWZvcm1CbG9jaygpID0gZGVmYXVsdDsKIAot
UHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZzdGF0ZSkKLSAg
ICA6IFByb2dyYW1JbXBsKHN0YXRlKSwgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZSh0aGlzKQot
e30KK1Byb2dyYW1NdGw6OlByb2dyYW1NdGwoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmc3RhdGUp
IDogUHJvZ3JhbUltcGwoc3RhdGUpLAorICAgIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGUodGhp
cykKK3sKKyAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlID0gbmV3IG10bDo6UmVuZGVy
UGlwZWxpbmVDYWNoZSgpOworfQogCi1Qcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCgpIHt9CitQcm9n
cmFtTXRsOjp+UHJvZ3JhbU10bCgpCit7CisgICAgZGVsZXRlIG1NZXRhbFhmYlJlbmRlclBpcGVs
aW5lQ2FjaGU7Cit9CiAKIHZvaWQgUHJvZ3JhbU10bDo6ZGVzdHJveShjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKIHsKQEAgLTI2MiwyNSArMjc0LDQ2IEBAIHZvaWQgUHJvZ3JhbU10bDo6cmVz
ZXQoQ29udGV4dE10bCAqY29udGV4dCkKICAgICB7CiAgICAgICAgIHZhci5yZXNldChjb250ZXh0
KTsKICAgICB9Ci0KICAgICBtTWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlLmNsZWFyKCk7CisgICAg
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZS0+Y2xlYXIoKTsKK30KKwordm9pZCBQcm9ncmFt
TXRsOjpzYXZlVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFt
KQoreworICAgIC8vIFdyaXRlIG91dCBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNoYWRlciB0eXBl
cworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFk
ZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgc3RyZWFtLT53cml0ZVN0cmluZyhtTXNsU2hhZGVy
VHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5tZXRhbFNoYWRlclNvdXJjZSk7CisgICAgfQorICAg
IHN0cmVhbS0+d3JpdGVTdHJpbmcobVhmYk1zbFNvdXJjZSk7Cit9CisKK3ZvaWQgUHJvZ3JhbU10
bDo6bG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQor
eworICAgIC8vIFJlYWQgaW4gc2hhZGVyIHNvdXJjZXMgZm9yIGFsbCBzaGFkZXIgdHlwZXMKKyAg
ICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlw
ZXMoKSkKKyAgICB7CisgICAgICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVd
Lm1ldGFsU2hhZGVyU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CisgICAgfQorICAgIG1Y
ZmJNc2xTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmcoKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRy
PHJ4OjpMaW5rRXZlbnQ+IFByb2dyYW1NdGw6OmxvYWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQogewotICAgIC8vIE5PVEUo
aHFsZSk6IHN1cHBvcnQgYmluYXJ5IHNoYWRlcgotICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxMaW5rRXZlbnREb25lPihhbmdsZTo6UmVzdWx0OjpTdG9w
KTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVudERvbmU+KGxpbmtUcmFu
c2xhdGVkU2hhZGVycyhjb250ZXh0LCBzdHJlYW0sIGluZm9Mb2cpKTsKIH0KIAogdm9pZCBQcm9n
cmFtTXRsOjpzYXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBnbDo6QmluYXJ5T3V0cHV0
U3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hh
ZGVyCi0gICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhzdHJl
YW0pOworICAgIHNhdmVTaGFkZXJJbnRlcm5hbEluZm8oc3RyZWFtKTsKKyAgICBzYXZlRGVmYXVs
dFVuaWZvcm1CbG9ja3NJbmZvKHN0cmVhbSk7CiB9CiAKKwogdm9pZCBQcm9ncmFtTXRsOjpzZXRC
aW5hcnlSZXRyaWV2YWJsZUhpbnQoYm9vbCByZXRyaWV2YWJsZSkKIHsKICAgICBVTklNUExFTUVO
VEVEKCk7CkBAIC0yOTQsNyArMzI3LDcgQEAgdm9pZCBQcm9ncmFtTXRsOjpzZXRTZXBhcmFibGUo
Ym9vbCBzZXBhcmFibGUpCiBzdGQ6OnVuaXF1ZV9wdHI8TGlua0V2ZW50PiBQcm9ncmFtTXRsOjps
aW5rKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVz
b3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
SW5mb0xvZyAmaW5mb0xvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlByb2dyYW1NZXJnZWRWYXJ5aW5ncyAmIC8qIG1lcmdlZFZhcnlpbmdz
ICovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UHJvZ3JhbU1lcmdlZFZhcnlpbmdzICZtZXJnZWRWYXJ5aW5ncykKIHsKICAgICAvLyBMaW5r
IHJlc291cmNlcyBiZWZvcmUgY2FsbGluZyBHZXRTaGFkZXJTb3VyY2UgdG8gbWFrZSBzdXJlIHRo
ZXkgYXJlIHJlYWR5IGZvciB0aGUgc2V0L2JpbmRpbmcKICAgICAvLyBhc3NpZ25tZW50IGRvbmUg
aW4gdGhhdCBmdW5jdGlvbi4KQEAgLTMwNCw3ICszMzcsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8TGlu
a0V2ZW50PiBQcm9ncmFtTXRsOjpsaW5rKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVudERvbmU+KGxpbmtJbXBsKGNvbnRleHQs
IHJlc291cmNlcywgaW5mb0xvZykpOwogfQogCi1hbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6Omxp
bmtJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisjaWYgQU5HTEVfRU5BQkxFX01F
VEFMX1NQSVJWCithbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsU3BpcnYoY29uc3Qg
Z2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpCiB7CkBAIC0z
NTUsNiArMzg5LDc1IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGwoY29uc3Qg
Z2w6OkNvbnRleHQgKmdsQ29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKIH0KKyNlbmRpZgorCithbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsRGly
ZWN0KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0
KTsKKworICAgIHJlc2V0KGNvbnRleHRNdGwpOworICAgIEFOR0xFX1RSWShpbml0RGVmYXVsdFVu
aWZvcm1CbG9ja3MoZ2xDb250ZXh0KSk7CisgICAgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJ
bmZvTWFwIHZhcmlhYmxlSW5mb01hcDsKKworICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+
IHNoYWRlclNvdXJjZXM7CisgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gdHJhbnNsYXRl
ZE1zbFNoYWRlcnM7CisgICAgbXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UobVN0YXRlLCByZXNvdXJj
ZXMsICZzaGFkZXJTb3VyY2VzLCAmdmFyaWFibGVJbmZvTWFwKTsKKworICAgIEFOR0xFX1RSWSht
dGw6Okdsc2xhbmdHZXRNU0woZ2xDb250ZXh0LCBtU3RhdGUsIGNvbnRleHRNdGwtPmdldENhcHMo
KSwgc2hhZGVyU291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlSW5mb01hcCwgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnRyYW5zbGF0ZWRNc2xTaGFkZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVN0YXRlLmdldEV4ZWN1dGFibGUoKS5nZXRUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlckNvdW50KCkpKTsKKworCisgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
IDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBh
Y3R1YWwgTWV0YWwgc2hhZGVyCisgICAgICAgIEFOR0xFX1RSWSgKKyAgICAgICAgICAgIGNyZWF0
ZU1zbFNoYWRlckxpYihjb250ZXh0TXRsLCBzaGFkZXJUeXBlLCBpbmZvTG9nLCAmbU1zbFNoYWRl
clRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0pKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOworfQorCithbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxpbmtJbXBs
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQor
eworICAgIC8vIFRPRE86IFdlIG5lZWQgc29tZSB3YXkgb2YgdG9nZ2xpbmcgdGhpcy4KKyNpZiBB
TkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICBpZiAoc2g6OnJlYWRCb29sRW52VmFyKCJBTkdM
RV9HRU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7CisgICAgICAgcmV0dXJuIGxpbmtJbXBsU3Bp
cnYoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworICAgIH0KKyAgICBlbHNlCisjZW5k
aWYKKyAgICB7CisgICAgICAgcmV0dXJuIGxpbmtJbXBsRGlyZWN0KGdsQ29udGV4dCwgcmVzb3Vy
Y2VzLCBpbmZvTG9nKTsKKyAgICB9Cit9CisKKworYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjps
aW5rVHJhbnNsYXRlZFNoYWRlcnMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCaW5hcnlJbnB1
dFN0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworICAgIC8vIE5PVEUoaHFsZSk6IE5vIHRy
YW5zZm9ybSBmZWVkYmFja3MgZm9yIG5vdywgc2luY2Ugd2Ugb25seSBzdXBwb3J0IEVTIDIuMCBh
dG0KKworICAgIHJlc2V0KGNvbnRleHRNdGwpOworCisgICAgbG9hZFRyYW5zbGF0ZWRTaGFkZXJz
KHN0cmVhbSk7CisgICAgbG9hZFNoYWRlckludGVybmFsSW5mbyhzdHJlYW0pOworICAgIEFOR0xF
X1RSWShsb2FkRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKGdsQ29udGV4dCwgc3RyZWFtKSk7CisK
KyAgICBBTkdMRV9UUlkoY3JlYXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIGdsOjpTaGFkZXJU
eXBlOjpWZXJ0ZXgsIGluZm9Mb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU1z
bFNoYWRlclRyYW5zbGF0ZUluZm9bZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pKTsKKyAgICBBTkdM
RV9UUlkoY3JlYXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIGdsOjpTaGFkZXJUeXBlOjpGcmFn
bWVudCwgaW5mb0xvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtTXNsU2hhZGVy
VHJhbnNsYXRlSW5mb1tnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKSk7CisKKyAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CiAKIHZvaWQgUHJvZ3JhbU10bDo6bGlua1Jlc291
cmNlcyhjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzKQogewpAQCAt
MzY2LDggKzQ2OSw2IEBAIHZvaWQgUHJvZ3JhbU10bDo6bGlua1Jlc291cmNlcyhjb25zdCBnbDo6
UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzKQogCiBhbmdsZTo6UmVzdWx0IFByb2dy
YW1NdGw6OmluaXREZWZhdWx0VW5pZm9ybUJsb2Nrcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0KQogewotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250
ZXh0KTsKLQogICAgIC8vIFByb2Nlc3MgdmVydGV4IGFuZCBmcmFnbWVudCB1bmlmb3JtcyBpbnRv
IHN0ZDE0MCBwYWNraW5nLgogICAgIGdsOjpTaGFkZXJNYXA8c2g6OkJsb2NrTGF5b3V0TWFwPiBs
YXlvdXRNYXA7CiAgICAgZ2w6OlNoYWRlck1hcDxzaXplX3Q+IHJlcXVpcmVkQnVmZmVyU2l6ZTsK
QEAgLTQyNiw2ICs1MjcsMTUgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVs
dFVuaWZvcm1CbG9ja3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCkKICAgICAgICAgfQog
ICAgIH0KIAorICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeShnbENv
bnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7Cit9CisKK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10
bDo6cmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoCisgICAgY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKKyAgICBjb25zdCBnbDo6U2hhZGVyTWFwPHNpemVfdD4gJnJlcXVpcmVk
QnVmZmVyU2l6ZSkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGdsQ29udGV4dCk7CisKICAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6
QWxsR0xFUzJTaGFkZXJUeXBlcygpKQogICAgIHsKICAgICAgICAgaWYgKHJlcXVpcmVkQnVmZmVy
U2l6ZVtzaGFkZXJUeXBlXSA+IDApCkBAIC00NTMsNiArNTYzLDkgQEAgYW5nbGU6OlJlc3VsdCBQ
cm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0
aW9uPiAqc2hhZGVyT3V0KQogewogICAgIHN0YXRpY19hc3NlcnQoWUVTID09IDEsICJZRVMgc2hv
dWxkIGhhdmUgdmFsdWUgb2YgMSIpOworICAgICNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdXNlU3BpcnYgPSBzaDo6cmVhZEJvb2xFbnZWYXIo
IkFOR0xFX0dFTl9NVExfV0lUSF9TUElSViIpOworICAgICNlbmRpZgogCiAgICAgbXRsOjpUcmFu
c2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZE1zbEluZm8gPSAmbU1zbFNoYWRlclRyYW5zbGF0
ZUluZm9bc2hhZGVyVHlwZV07CiAgICAgUHJvZ3JhbVNoYWRlck9ialZhcmlhbnRNdGwgKnNoYWRl
clZhcmlhbnQ7CkBAIC00OTAsOSArNjAzLDIyIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6
Z2V0U3BlY2lhbGl6ZWRTaGFkZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
Qk9PTCBlbXVsYXRlRGlzY2FyZCA9IHJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlw
ZSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxp
bmVSYXN0ZXJpemF0aW9uOjpFbXVsYXRlZERpc2NhcmQ7CiAKLSAgICAgICAgICAgIE5TU3RyaW5n
ICpkaXNjYXJkRW5hYmxlZFN0ciA9Ci0gICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZENvbnN0
TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZD
cm9zc1NwZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICBOU1N0cmluZyAqZGlzY2FyZEVuYWJs
ZWRTdHI7CisjaWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgICAgICAgICAgICBpZiAodXNl
U3BpcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGlzY2FyZEVuYWJsZWRTdHIg
PSBbTlNTdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoOjpUcmFuc2xhdG9yTWV0
YWw6OkdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4XTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGRpc2NhcmRFbmFibGVkU3RyID0KKyAgICAgICAgICAgICAgICAgICAg
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpXTsKKyAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9IFtbTVRMRnVuY3Rpb25Db25zdGFudFZh
bHVlcyBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbZnVuY0NvbnN0YW50cyBzZXRDb25zdGFu
dFZhbHVlOiZlbXVsYXRlRGlzY2FyZApAQCAtNTE1LDkgKzY0MSwyMiBAQCBhbmdsZTo6UmVzdWx0
IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwK
IAogICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgICAgICB7Ci0gICAgICAgICAgICBO
U1N0cmluZyAqY292ZXJhZ2VNYXNrRW5hYmxlZFN0ciA9Ci0gICAgICAgICAgICAgICAgW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a0NvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVy
YWdlTWFza0VuYWJsZWRTdHI7CisjaWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgICAgICAg
ICAgICBpZiAodXNlU3BpcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY292ZXJh
Z2VNYXNrRW5hYmxlZFN0ciA9IFtOU1N0cmluZworICAgICAgICAgICAgICAgICAgICBzdHJpbmdX
aXRoRm9ybWF0OkAiJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0
U3VmZml4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQorICAgICAg
ICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRyYW5zbGF0
b3JNZXRhbERpcmVjdDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpXTsKKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9IFtbTVRMRnVuY3Rpb25Db25z
dGFudFZhbHVlcyBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbZnVuY0NvbnN0YW50cyBzZXRD
b25zdGFudFZhbHVlOiZlbXVsYXRlQ292ZXJhZ2VNYXNrCkBAIC01NTUsNiArNjk0LDcgQEAgYW5n
bGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNvbnRleHQg
KmNvbnRleHQsCiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CisKIGJv
b2wgUHJvZ3JhbU10bDo6aGFzU3BlY2lhbGl6ZWRTaGFkZXIoZ2w6OlNoYWRlclR5cGUgc2hhZGVy
VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykKIHsKQEAgLTU5Miw2ICs3MzIs
OTMgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpjcmVhdGVNc2xTaGFkZXJMaWIobXRsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgIH0KIH0KIAordm9pZCBQcm9ncmFtTXRsOjpzYXZlRGVmYXVs
dFVuaWZvcm1CbG9ja3NJbmZvKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAg
ICAvLyBTZXJpYWxpemVzIHRoZSB1bmlmb3JtTGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlmb3Jt
QmxvY2tzCisgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRl
clR5cGVzKCkpCisgICAgeworICAgICAgICBjb25zdCBzaXplX3QgdW5pZm9ybUNvdW50ID0gbURl
ZmF1bHRVbmlmb3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQuc2l6ZSgpOworICAg
ICAgICBzdHJlYW0tPndyaXRlSW50PHNpemVfdD4odW5pZm9ybUNvdW50KTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUNv
dW50OyArK3VuaWZvcm1JbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgc2g6OkJsb2NrTWVt
YmVySW5mbyAmYmxvY2tJbmZvID0KKyAgICAgICAgICAgICAgICBtRGVmYXVsdFVuaWZvcm1CbG9j
a3Nbc2hhZGVyVHlwZV0udW5pZm9ybUxheW91dFt1bmlmb3JtSW5kZXhdOworICAgICAgICAgICAg
Z2w6OldyaXRlQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgYmxvY2tJbmZvKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFNlcmlhbGl6ZXMgcmVxdWlyZWQgdW5pZm9ybSBibG9jayBtZW1vcnkg
c2l6ZXMKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVy
VHlwZXMoKSkKKyAgICB7CisgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQobURlZmF1bHRVbmlmb3Jt
QmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1EYXRhLnNpemUoKSk7CisgICAgfQorfQorCithbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oY29uc3Qg
Z2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sK
KyAgICBnbDo6U2hhZGVyTWFwPHNpemVfdD4gcmVxdWlyZWRCdWZmZXJTaXplOworICAgIHJlcXVp
cmVkQnVmZmVyU2l6ZS5maWxsKDApOworCisgICAgLy8gRGVzZXJpYWxpemVzIHRoZSB1bmlmb3Jt
TGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlmb3JtQmxvY2tzCisgICAgZm9yIChnbDo6U2hhZGVy
VHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBj
b25zdCBzaXplX3QgdW5pZm9ybUNvdW50ID0gc3RyZWFtLT5yZWFkSW50PHNpemVfdD4oKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
dW5pZm9ybUNvdW50OyArK3VuaWZvcm1JbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgc2g6
OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm87CisgICAgICAgICAgICBnbDo6TG9hZEJsb2NrTWVt
YmVySW5mbyhzdHJlYW0sICZibG9ja0luZm8pOworICAgICAgICAgICAgbURlZmF1bHRVbmlmb3Jt
QmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQucHVzaF9iYWNrKGJsb2NrSW5mbyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZXNlcmlhbGl6ZXMgcmVxdWlyZWQgdW5pZm9ybSBi
bG9jayBtZW1vcnkgc2l6ZXMKKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBn
bDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIHJlcXVpcmVkQnVmZmVyU2l6ZVtz
aGFkZXJUeXBlXSA9IHN0cmVhbS0+cmVhZEludDxzaXplX3Q+KCk7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGdsQ29udGV4dCwgcmVxdWlyZWRC
dWZmZXJTaXplKTsKK30KKwordm9pZCBQcm9ncmFtTXRsOjpzYXZlU2hhZGVySW50ZXJuYWxJbmZv
KGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICBmb3IgKGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIHN0
cmVhbS0+d3JpdGVJbnQ8aW50PihtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5o
YXNVQk9Bcmd1bWVudEJ1ZmZlcik7CisgICAgICAgIGZvciAoY29uc3QgbXRsOjpTYW1wbGVyQmlu
ZGluZyAmYmluZGluZyA6CisgICAgICAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hh
ZGVyVHlwZV0uYWN0dWFsU2FtcGxlckJpbmRpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBz
dHJlYW0tPndyaXRlSW50PHVpbnQzMl90PihiaW5kaW5nLnRleHR1cmVCaW5kaW5nKTsKKyAgICAg
ICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8dWludDMyX3Q+KGJpbmRpbmcuc2FtcGxlckJpbmRpbmcp
OworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50MzJfdCB1Ym9CaW5kaW5nIDogbU1zbFNo
YWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uYWN0dWFsVUJPQmluZGluZ3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8dWludDMyX3Q+KHVib0JpbmRpbmcpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFByb2dyYW1NdGw6OmxvYWRTaGFkZXJJbnRlcm5h
bEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAgZm9yIChnbDo6U2hh
ZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAg
ICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5oYXNVQk9Bcmd1bWVudEJ1ZmZl
ciA9IHN0cmVhbS0+cmVhZEludDxpbnQ+KCkgIT0gMDsKKyAgICAgICAgZm9yIChtdGw6OlNhbXBs
ZXJCaW5kaW5nICZiaW5kaW5nIDoKKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5m
b1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJpbmRpbmcudGV4dHVyZUJpbmRpbmcgPSBzdHJlYW0tPnJlYWRJbnQ8dWludDMyX3Q+KCk7
CisgICAgICAgICAgICBiaW5kaW5nLnNhbXBsZXJCaW5kaW5nID0gc3RyZWFtLT5yZWFkSW50PHVp
bnQzMl90PigpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50MzJfdCAmdWJvQmluZGlu
ZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVCT0JpbmRpbmdz
KQorICAgICAgICB7CisgICAgICAgICAgICB1Ym9CaW5kaW5nID0gc3RyZWFtLT5yZWFkSW50PHVp
bnQzMl90PigpOworICAgICAgICB9CisgICAgfQorfQorCiBHTGJvb2xlYW4gUHJvZ3JhbU10bDo6
dmFsaWRhdGUoY29uc3QgZ2w6OkNhcHMgJmNhcHMsIGdsOjpJbmZvTG9nICppbmZvTG9nKQogewog
ICAgIC8vIE5vLW9wLiBUaGUgc3BlYyBpcyB2ZXJ5IHZhZ3VlIGFib3V0IHRoZSBiZWhhdmlvciBv
ZiB2YWxpZGF0aW9uLgpAQCAtODc3LDE0ICsxMTA0LDI1IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAm
cGlwZWxpbmVEZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
aXBlbGluZURlc2NDaGFuZ2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBmb3JjZVRleHR1cmVzU2V0dGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KQogewogICAgIENv
bnRleHRNdGwgKmNvbnRleHQgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKICAgICBpZiAocGlw
ZWxpbmVEZXNjQ2hhbmdlZCkKICAgICB7CiAgICAgICAgIC8vIFJlbmRlciBwaXBlbGluZSBzdGF0
ZSBuZWVkcyB0byBiZSBjaGFuZ2VkCi0gICAgICAgIGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+
IHBpcGVsaW5lU3RhdGUgPQotICAgICAgICAgICAgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5n
ZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIHBpcGVsaW5lRGVzYyk7CisgICAgICAgIGlk
PE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3RhdGUgPSBuaWw7CisgICAgICAgIGlm
ICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG10bDo6UmVu
ZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNj
KHBpcGVsaW5lRGVzYyk7CisgICAgICAgICAgICB4ZmJQaXBlbGluZURlc2MucmFzdGVyaXphdGlv
blR5cGUgICAgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7Cisg
ICAgICAgICAgICBwaXBlbGluZVN0YXRlID0KKyAgICAgICAgICAgICAgICBtTWV0YWxYZmJSZW5k
ZXJQaXBlbGluZUNhY2hlLT5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIHhmYlBpcGVs
aW5lRGVzYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBwaXBlbGluZVN0YXRlID0gbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5nZXRSZW5kZXJQaXBl
bGluZVN0YXRlKGNvbnRleHQsIHBpcGVsaW5lRGVzYyk7CisgICAgICAgIH0KICAgICAgICAgaWYg
KCFwaXBlbGluZVN0YXRlKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBFcnJvciBhbHJlYWR5
IGxvZ2dlZCBpbnNpZGUgZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZSgpCkBAIC05MTMsMTEgKzExNTEs
NiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAogICAgICAgICBBTkdMRV9UUlkodXBkYXRlVW5pZm9ybUJ1ZmZlcnMoY29u
dGV4dCwgY21kRW5jb2RlciwgcGlwZWxpbmVEZXNjKSk7CiAgICAgfQogCi0gICAgaWYgKHBpcGVs
aW5lRGVzY0NoYW5nZWQpCi0gICAgewotICAgICAgICBBTkdMRV9UUlkodXBkYXRlWGZiQnVmZmVy
cyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpKTsKLSAgICB9Ci0KICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTk0OCwxMCArMTE4MSwxMiBAQCBh
bmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10
bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VVcGRhdGUpCiB7Ci0gICAgQ29udGV4dE10
bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOwotICAgIGNvbnN0IGF1dG8g
JmdsU3RhdGUgICAgPSBnbENvbnRleHQtPmdldFN0YXRlKCk7CisgICAgQ29udGV4dE10bCAqY29u
dGV4dE10bCAgICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4dCk7CisgICAg
Y29uc3QgYXV0byAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgICAgID0gZ2xDb250ZXh0LT5nZXRT
dGF0ZSgpOworICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGds
Q29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOwogCiAgICAgY29uc3Qg
Z2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJmNvbXBsZXRlVGV4dHVyZXMgPSBnbFN0YXRlLmdldEFj
dGl2ZVRleHR1cmVzQ2FjaGUoKTsKKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZVR5cGVBcnJh
eSAmdGV4dHVyZVR5cGVzICA9IGV4ZWN1dGFibGUtPmdldEFjdGl2ZVNhbXBsZXJUeXBlcygpOwog
CiAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMyU2hhZGVy
VHlwZXMoKSkKICAgICB7CkBAIC05NjQsNiArMTE5OSw4IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6dXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAg
ICAgY29uc3QgbXRsOjpUcmFuc2xhdGVkU2hhZGVySW5mbyAmc2hhZGVySW5mbyA9CiAgICAgICAg
ICAgICAqbUN1cnJlbnRTaGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXS0+dHJhbnNsYXRlZFNyY0lu
Zm87CiAKKyAgICAgICAgYm9vbCBoYXNEZXB0aFNhbXBsZXIgPSBmYWxzZTsKKwogICAgICAgICBm
b3IgKHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IG1TdGF0ZS5nZXRT
YW1wbGVyQmluZGluZ3MoKS5zaXplKCk7CiAgICAgICAgICAgICAgKyt0ZXh0dXJlSW5kZXgpCiAg
ICAgICAgIHsKQEAgLTk3NSwxNiArMTIxMiwxNiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6
OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsOjpUZXh0dXJl
VHlwZSB0ZXh0dXJlVHlwZSA9IHNhbXBsZXJCaW5kaW5nLnRleHR1cmVUeXBlOwogCiAgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IGFycmF5RWxlbWVudCA9IDA7IGFycmF5RWxlbWVudCA8IHNhbXBs
ZXJCaW5kaW5nLmJvdW5kVGV4dHVyZVVuaXRzLnNpemUoKTsKICAgICAgICAgICAgICAgICAgKyth
cnJheUVsZW1lbnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0x1aW50IHRleHR1
cmVVbml0ICAgPSBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRd
OwotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29tcGxldGVUZXh0dXJl
c1t0ZXh0dXJlVW5pdF07Ci0gICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNhbXBsZXIgPSBj
b250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFNhbXBsZXIodGV4dHVyZVVuaXQpOwotICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHRleHR1cmVTbG90ID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyAr
IGFycmF5RWxlbWVudDsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVyU2xvdCA9IG1z
bEJpbmRpbmcuc2FtcGxlckJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7CisgICAgICAgICAgICAgICAg
R0x1aW50IHRleHR1cmVVbml0ICAgICAgICAgID0gc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJl
VW5pdHNbYXJyYXlFbGVtZW50XTsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSAgICAgICAgPSBjb21wbGV0ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAg
ICBnbDo6U2FtcGxlciAqc2FtcGxlciAgICAgICAgPSBjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdl
dFNhbXBsZXIodGV4dHVyZVVuaXQpOworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZSB0
ZXh0dXJlVHlwZSA9IHRleHR1cmVUeXBlc1t0ZXh0dXJlVW5pdF07CisgICAgICAgICAgICAgICAg
dWludDMyX3QgdGV4dHVyZVNsb3QgICAgICAgID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyAr
IGFycmF5RWxlbWVudDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGVyU2xvdCAgICAg
ICAgPSBtc2xCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICsgYXJyYXlFbGVtZW50OwogICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIEFOR0xFX1RSWShjb250ZXh0TXRsLT5nZXRJbmNvbXBsZXRlVGV4dHVyZShnbENvbnRleHQs
IHRleHR1cmVUeXBlLCAmdGV4dHVyZSkpOwpAQCAtOTk0LDI1ICsxMjMxLDIyIEBAIGFuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29u
dGV4dCwKICAgICAgICAgICAgICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsID0gbXRsOjpHZXRJ
bXBsKHRleHR1cmUpOwogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVyQmluZGluZy5mb3JtYXQg
PT0gZ2w6OlNhbXBsZXJGb3JtYXQ6OlNoYWRvdykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNTEwNwotICAgICAgICAgICAgICAg
ICAgICAvLyBNZXRhbCBkb2Vzbid0IHN1cHBvcnQgYSBjb21wYXJlIG1vZGUgd2hlcmUgc2FtcGxp
bmcgYSBzaGFkb3cgc2FtcGxlciBjb3VsZAotICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4g
YSBzYW1lIHZhbHVlIGFzIGlmIHNhbXBsaW5nIGZyb20gYSBub3JtYWwgc2FtcGxlci4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydGluZyB0aGlzIGNvdWxkIHJlcXVpcmUgaGFja2luZyBz
cGlydi1jcm9zcyB0byBjaGFuZ2Ugc2FtcGxlX2NvbXBhcmUoKQotICAgICAgICAgICAgICAgICAg
ICAvLyB0byBzYW1wbGUoKS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKEFOR0xFX1VOTElLRUxZ
KHNhbXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSAhPSBHTF9DT01QQVJFX1JFRl9UT19URVhU
VVJFKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgRVJS
KCkgPDwgIkdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRV
UkUgaXMgbm90ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQi
OwotICAgICAgICAgICAgICAgICAgICAgICAgQU5HTEVfTVRMX1RSWShjb250ZXh0TXRsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUtPmdldENvbXBh
cmVNb2RlKCkgPT0gR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFzRGVwdGhTYW1wbGVyICAgICAgICAgICAgICAg
ICAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtU2hhZG93Q29tcGFyZU1vZGVzW3RleHR1
cmVTbG90XSA9IG10bDo6TXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUtPmdldENvbXBhcmVNb2RlKCksIHNhbXBsZXJTdGF0
ZS0+Z2V0Q29tcGFyZUZ1bmMoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgQU5HTEVfVFJZKHRleHR1cmVNdGwtPmJpbmRUb1NoYWRlcihnbENvbnRleHQsIGNtZEVuY29k
ZXIsIHNoYWRlclR5cGUsIHNhbXBsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlU2xvdCwgc2FtcGxlclNsb3QpKTsKICAgICAgICAg
ICAgIH0gIC8vIGZvciBhcnJheSBlbGVtZW50cwogICAgICAgICB9ICAgICAgLy8gZm9yIHNhbXBs
ZXIgYmluZGluZ3MKLSAgICB9ICAgICAgICAgIC8vIGZvciBzaGFkZXIgdHlwZXMKKworICAgICAg
ICBpZiAoaGFzRGVwdGhTYW1wbGVyKQorICAgICAgICB7CisgICAgICAgICAgICBjbWRFbmNvZGVy
LT5zZXREYXRhKHNoYWRlclR5cGUsIG1TaGFkb3dDb21wYXJlTW9kZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG10bDo6a1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNCaW5kaW5n
SW5kZXgpOworICAgICAgICB9CisgICAgfSAgLy8gZm9yIHNoYWRlciB0eXBlcwogCiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQpAQCAtMTA0MCwxMSArMTI3NCw2IEBAIGFu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRlVW5pZm9ybUJ1ZmZlcnMoQ29udGV4dE10bCAq
Y29udGV4dCwKIAogICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxH
TEVTMlNoYWRlclR5cGVzKCkpCiAgICAgewotICAgICAgICBpZiAoIW1DdXJyZW50U2hhZGVyVmFy
aWFudHNbc2hhZGVyVHlwZV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KICAgICAgICAgaWYgKG1DdXJyZW50U2hhZGVyVmFyaWFudHNbc2hhZGVyVHlwZV0t
PnRyYW5zbGF0ZWRTcmNJbmZvLT5oYXNVQk9Bcmd1bWVudEJ1ZmZlcikKICAgICAgICAgewogICAg
ICAgICAgICAgQU5HTEVfVFJZKApAQCAtMTE0OSw4ICsxMzc4LDYgQEAgYW5nbGU6OlJlc3VsdCBQ
cm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMoCiAgICAgZ2w6OlNo
YWRlclR5cGUgc2hhZGVyVHlwZSkKIHsKICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgPSBj
b250ZXh0LT5nZXRTdGF0ZSgpOwotICAgIGNvbnN0IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8g
JnNoYWRlckluZm8gPQotICAgICAgICAqbUN1cnJlbnRTaGFkZXJWYXJpYW50c1tzaGFkZXJUeXBl
XS0+dHJhbnNsYXRlZFNyY0luZm87CiAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJbmRleCA9IDA7
IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRleCkKICAgICB7CiAgICAg
ICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmYmxvY2sgPSBibG9ja3NbYnVmZmVySW5kZXhd
OwpAQCAtMTE2Miw3ICsxMzg5LDggQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpiaW5kVW5p
Zm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMoCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9IHNoYWRlckluZm8uYWN0
dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhdOworICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZm
ZXJJZHggPQorICAgICAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0u
YWN0dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhdOwogCiAgICAgICAgIGlmIChhY3R1YWxCdWZm
ZXJJZHggPj0gbXRsOjprTWF4U2hhZGVyQnVmZmVycykKICAgICAgICAgewpAQCAtMTE5OSwxMiAr
MTQyNywxMiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJz
SW5mb0FyZ3VtZW50QnVmZmVyKAogICAgIFtidWZmZXJFbmNvZGVyLm1ldGFsQXJnQnVmZmVyRW5j
b2RlciBzZXRBcmd1bWVudEJ1ZmZlcjphcmd1bWVudEJ1ZmZlci0+Z2V0KCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6YXJndW1lbnRC
dWZmZXJPZmZzZXRdOwogCi0gICAgc3RhdGljX2Fzc2VydChNVExSZW5kZXJTdGFnZVZlcnRleCA9
PSAoMHgxIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSks
Ci0gICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgZ2wgU2hhZGVyVHlwZSBlbnVtIGFuZCBNZXRh
bCBlbnVtIHRvIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KAot
ICAgICAgICBNVExSZW5kZXJTdGFnZUZyYWdtZW50ID09ICgweDEgPDwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCkpLAotICAgICAgICAiRXhwZWN0ZWQgZ2wg
U2hhZGVyVHlwZSBlbnVtIGFuZCBNZXRhbCBlbnVtIHRvIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIi
KTsKLSAgICBhdXRvIG10bFJlbmRlclN0YWdlID0gc3RhdGljX2Nhc3Q8TVRMUmVuZGVyU3RhZ2Vz
PigweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNoYWRlclR5cGUpKTsKKyAgICBjb25zdGV4
cHIgZ2w6OlNoYWRlck1hcDxNVExSZW5kZXJTdGFnZXM+IGtTaGFkZXJTdGFnZU1hcCA9IHsKKyAg
ICAgICAge2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIG10bDo6a1JlbmRlclN0YWdlVmVydGV4fSwK
KyAgICAgICAge2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCwgbXRsOjprUmVuZGVyU3RhZ2VGcmFn
bWVudH0sCisgICAgfTsKKworICAgIGF1dG8gbXRsUmVuZGVyU3RhZ2UgPSBrU2hhZGVyU3RhZ2VN
YXBbc2hhZGVyVHlwZV07CiAKICAgICBmb3IgKHVpbnQzMl90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlckluZGV4KQogICAgIHsKQEAgLTEyMzks
NDkgKzE0NjcsNCBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZm
ZXJzSW5mb0FyZ3VtZW50QnVmZmVyKAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVYZmJCdWZmZXJzKENvbnRl
eHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVz
YyAmcGlwZWxpbmVEZXNjKQotewotICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICAgICAg
ICAgICAgICAgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwotICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFj
ayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBnbFN0YXRlLmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOwotCi0gICAgaWYgKHBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uRW5hYmxlZCgpIHx8ICFn
bFN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpIHx8Ci0gICAgICAgIEFO
R0xFX1VOTElLRUxZKCF0cmFuc2Zvcm1GZWVkYmFjaykpCi0gICAgewotICAgICAgICAvLyBYRkIg
b3V0cHV0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCByYXN0ZXJpemF0aW9uIGRpc2FibGVkLgotICAg
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci0gICAgfQotCi0gICAgc2l6ZV90
IHhmYkJ1ZmZlckNvdW50ID0gZ2xTdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpLT5nZXRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7Ci0KLSAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQg
PiAwKTsKLSAgICBBU1NFUlQobVN0YXRlLmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgp
ICE9IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgfHwKLSAgICAgICAgICAgeGZiQnVmZmVyQ291bnQg
PT0gMSk7Ci0KLSAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwg
eGZiQnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCi0gICAgewotICAgICAgICB1aW50MzJfdCBh
Y3R1YWxCdWZmZXJJZHggPSBtTXNsWGZiT25seVZlcnRleFNoYWRlckluZm8uYWN0dWFsWEZCQmlu
ZGluZ3NbYnVmZmVySW5kZXhdOwotCi0gICAgICAgIGlmIChhY3R1YWxCdWZmZXJJZHggPj0gbXRs
OjprTWF4U2hhZGVyQnVmZmVycykKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1
ZmZlcj4gJmJ1ZmZlckJpbmRpbmcgPQotICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPmdl
dEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOwotICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIg
PSBidWZmZXJCaW5kaW5nLmdldCgpOwotICAgICAgICBBU1NFUlQoKGJ1ZmZlckJpbmRpbmcuZ2V0
T2Zmc2V0KCkgJSA0KSA9PSAwKTsKLSAgICAgICAgQVNTRVJUKGJ1ZmZlciAhPSBudWxscHRyKTsK
LQotICAgICAgICBCdWZmZXJNdGwgKmJ1ZmZlck10bCA9IG10bDo6R2V0SW1wbChidWZmZXIpOwot
Ci0gICAgICAgIC8vIFVzZSBvZmZzZXQ9MCwgYWN0dWFsIG9mZnNldCB3aWxsIGJlIHNldCBpbiBE
cml2ZXIgVW5pZm9ybSBpbnNpZGUgQ29udGV4dE10bC4KLSAgICAgICAgY21kRW5jb2Rlci0+c2V0
QnVmZmVyRm9yV3JpdGUoZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgYnVmZmVyTXRsLT5nZXRDdXJy
ZW50QnVmZmVyKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dHVhbEJ1ZmZlcklkeCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOwotfQotCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgK
aW5kZXggMjE4NTRmNjg4ZjliYjA4ODQxOGY4ZTY3Y2Q3YWQzZTlhYjNjYzliMS4uMjc4ZjFkZjE2
YmVmMDQxZDg2ZTE1NjVmYzQ5OGRmOTg0NjMyMWExMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5
TXRsLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05OCw4ICs5
OCw3IEBAIGNsYXNzIFF1ZXJ5TXRsIDogcHVibGljIFF1ZXJ5SW1wbAogICAgIGNvbnN0IG10bDo6
QnVmZmVyUmVmICZnZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbVZp
c2liaWxpdHlSZXN1bHRCdWZmZXI7IH0KICAgICAvLyBSZXNldCB0aGUgb2NjbHVzaW9uIHF1ZXJ5
IHJlc3VsdCBzdG9yZWQgaW4gYnVmZmVyIHRvIHplcm8KICAgICB2b2lkIHJlc2V0VmlzaWJpbGl0
eVJlc3VsdChDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKLQotICAgIHZvaWQgb25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgdm9pZCBvblRyYW5z
Zm9ybUZlZWRiYWNrRW5kKEdMc2l6ZWlwdHIgcHJpbWl0aXZlc0RyYXduKTsKIAogICBwcml2YXRl
OgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpAQCAtMTA4LDggKzEwNywxMyBAQCBjbGFzcyBR
dWVyeU10bCA6IHB1YmxpYyBRdWVyeUltcGwKICAgICAvLyBMaXN0IG9mIG9mZnNldHMgaW4gdGhl
IHJlbmRlciBwYXNzJ3Mgb2NjbHVzaW9uIHF1ZXJ5IHBvb2wgYnVmZmVyIGFsbG9jYXRlZCBmb3Ig
dGhpcyBxdWVyeQogICAgIFZpc2liaWxpdHlCdWZmZXJPZmZzZXRzTXRsIG1WaXNpYmlsaXR5QnVm
ZmVyT2Zmc2V0czsKICAgICBtdGw6OkJ1ZmZlclJlZiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsK
KyAgICAvLyBVc2VkIHdpdGggVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbiB3aGVu
IHRyYW5zZm9ybSBmZWVkYmFjayBpcyBlbXVsYXRlZC4KKyAgICBzaXplX3QgbVRyYW5zZm9ybUZl
ZWRiYWNrUHJpbWl0aXZlc0RyYXduOwogCi0gICAgc2l6ZV90IG1UcmFuc2Zvcm1GZWVkYmFja1By
aW1pdGl2ZXNEcmF3biA9IDA7CisgICAgLy8gVE9ETyhqY3VubmluZ2hhbSk6IGN1cnJlbnRseSBv
bmx5IHVzZWQgZm9yIG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bgorICAgIC8vIGJ1
dCBjYW4gYmUgdXNlZCBmb3IgcmVzdCBvZiByZXN1bHRzCisgICAgdWludDY0X3QgbUNhY2hlZFJl
c3VsdDsKKyAgICBib29sIG1DYWNoZWRSZXN1bHRWYWxpZDsKIH07CiAKIH0gIC8vIG5hbWVzcGFj
ZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCmluZGV4IGY1ZTliZjNiODI3ZDhkMzBm
MWIzNjcxNGQwNjUwMjNlMTQxNWEwOTEuLmFiMGU3YmYwODAxMTUyYzA3YWJiMDIwMDMzYjhjZjU1
NWM3NTNjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMyw3ICsxMywxMiBAQAogCiBuYW1lc3BhY2Ug
cngKIHsKLVF1ZXJ5TXRsOjpRdWVyeU10bChnbDo6UXVlcnlUeXBlIHR5cGUpIDogUXVlcnlJbXBs
KHR5cGUpIHt9CitRdWVyeU10bDo6UXVlcnlNdGwoZ2w6OlF1ZXJ5VHlwZSB0eXBlKQorICAgIDog
UXVlcnlJbXBsKHR5cGUpLAorICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXdu
KDApLAorICAgICAgbUNhY2hlZFJlc3VsdCgwKSwKKyAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZChm
YWxzZSkKK3t9CiAKIFF1ZXJ5TXRsOjp+UXVlcnlNdGwoKSB7fQogCkBAIC0yMiwxMyArMjcsMTQg
QEAgdm9pZCBRdWVyeU10bDo6b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQog
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CiAgICAg
aWYgKCFnZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpLmVtcHR5KCkpCiAgICAgewotICAg
ICAgICBjb250ZXh0TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb250ZXh0LCB0aGlzKTsK
KyAgICAgICAgY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZChjb250ZXh0LCB0
aGlzKTsKICAgICB9CiAgICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXIgPSBudWxscHRyOwogfQog
CiBhbmdsZTo6UmVzdWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCkKIHsKKyAgICBtQ2FjaGVkUmVzdWx0VmFsaWQgICAgID0gZmFsc2U7CiAgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKICAgICBzd2l0Y2ggKGdldFR5
cGUoKSkKICAgICB7CkBAIC00Nyw3ICs1Myw3IEBAIGFuZ2xlOjpSZXN1bHQgUXVlcnlNdGw6OmJl
Z2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9u
UXVlcnlCZWdpbihjb250ZXh0LCB0aGlzKSk7CisgICAgICAgICAgICBBTkdMRV9UUlkoY29udGV4
dE10bC0+b25PY2NsdXNpb25RdWVyeUJlZ2FuKGNvbnRleHQsIHRoaXMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJp
bWl0aXZlc1dyaXR0ZW46CiAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVz
RHJhd24gPSAwOwpAQCAtNjYsMTMgKzcyLDIzIEBAIGFuZ2xlOjpSZXN1bHQgUXVlcnlNdGw6OmVu
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKICAgICB7CiAgICAgICAgIGNhc2UgZ2w6OlF1
ZXJ5VHlwZTo6QW55U2FtcGxlczoKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpBbnlTYW1w
bGVzQ29uc2VydmF0aXZlOgotICAgICAgICAgICAgY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVy
eUVuZChjb250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9u
UXVlcnlFbmRlZChjb250ZXh0LCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW46Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1DYWNoZWRSZXN1bHQgPSBtVHJhbnNmb3JtRmVlZGJhY2tQ
cmltaXRpdmVzRHJhd247CisKICAgICAgICAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIHRyYW5zZm9y
bSBmZWVkYmFjayBpbiBwcm9ncmVzcywgc28gYWRkIHRoZSBwcmltaXRpdmVzIGRyYXduIHNvIGZh
cgogICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgb2Jq
ZWN0LgotICAgICAgICAgICAgb25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0U3RhdGUoKS5nZXRDdXJy
ZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
aykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQ2FjaGVkUmVzdWx0ICs9IHRyYW5z
Zm9ybUZlZWRiYWNrLT5nZXRQcmltaXRpdmVzRHJhd24oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTExMCw3ICsxMjYsNyBAQCBhbmdsZTo6UmVzdWx0IFF1ZXJ5TXRs
Ojp3YWl0QW5kR2V0UmVzdWx0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBUICpwYXJhbXMp
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6
VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKLSAgICAgICAgICAgICpwYXJhbXMg
PSBzdGF0aWNfY2FzdDxUPihtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24pOworICAg
ICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1DYWNoZWRSZXN1bHQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7CkBAIC0xMzcsNyArMTUzLDcgQEAgYW5nbGU6OlJlc3VsdCBRdWVyeU10bDo6aXNSZXN1bHRB
dmFpbGFibGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIGJvb2wgKmF2YWkKICAgICAgICAg
ICAgICphdmFpbGFibGUgPSAhbVZpc2liaWxpdHlSZXN1bHRCdWZmZXItPmlzQmVpbmdVc2VkQnlH
UFUoY29udGV4dE10bCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBnbDo6UXVl
cnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0dGVuOgotICAgICAgICAgICAg
KmF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICAqYXZhaWxhYmxlID0gbUNhY2hlZFJlc3Vs
dFZhbGlkOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7CkBAIC0xNzUsMTMgKzE5MSw5IEBAIHZvaWQgUXVlcnlNdGw6OnJl
c2V0VmlzaWJpbGl0eVJlc3VsdChDb250ZXh0TXRsICpjb250ZXh0TXRsKQogICAgIG1WaXNpYmls
aXR5UmVzdWx0QnVmZmVyLT5zeW5jQ29udGVudChjb250ZXh0TXRsLCBibGl0RW5jb2Rlcik7CiB9
CiAKLXZvaWQgUXVlcnlNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCit2b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKEdMc2l6
ZWlwdHIgcHJpbWl0aXZlc0RyYXduKQogewotICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJh
bnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRTdGF0ZSgpLmdldEN1cnJlbnRUcmFuc2Zvcm1G
ZWVkYmFjaygpOwotICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFjaykKLSAgICB7Ci0gICAgICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biArPSB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0
UHJpbWl0aXZlc0RyYXduKCk7Ci0gICAgfQorICAgIG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2
ZXNEcmF3biArPSBwcmltaXRpdmVzRHJhd247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJN
dGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJCdWZmZXJNdGwuaAppbmRleCA2ZmQ3YjFiOTk0Yjg5NjdmYmVjY2NhODUxNTk1Zjkw
Yzk1Zjg0MDgxLi4wNTMwMjBjNWUzYTVhODcwOTBhMmNiMmY1YWQ1ZGYwNzMwNzY1ZTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oCkBAIC01Nyw2ICs1Nyw3IEBA
IGNsYXNzIFJlbmRlcmJ1ZmZlck10bCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbXBsCiAKICAgICBt
dGw6OkZvcm1hdCBtRm9ybWF0OwogICAgIG10bDo6VGV4dHVyZVJlZiBtVGV4dHVyZTsKKyAgICBt
dGw6OlRleHR1cmVSZWYgbUltcGxpY2l0TVNUZXh0dXJlOwogICAgIFJlbmRlclRhcmdldE10bCBt
UmVuZGVyVGFyZ2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJN
dGwubW0KaW5kZXggNjNkNmY0YjcyODM5NTgwYzkzMzA0NWJlZTRlNWUzMjk1NjIzYjQwMC4uMmY5
YjVmNjMyZDUwYmJkNzIxMTYxZDNjM2ZlMzZiNTM2Njg3ZDI3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZl
ck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLm1tCkBAIC0yNyw3ICsyNyw4IEBAIHZvaWQgUmVuZGVy
YnVmZmVyTXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAKIHZvaWQg
UmVuZGVyYnVmZmVyTXRsOjpyZWxlYXNlVGV4dHVyZSgpCiB7Ci0gICAgbVRleHR1cmUgPSBudWxs
cHRyOworICAgIG1UZXh0dXJlICAgICAgICAgICA9IG51bGxwdHI7CisgICAgbUltcGxpY2l0TVNU
ZXh0dXJlID0gbnVsbHB0cjsKIH0KIAogYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtNDIsOCArNDMsOSBA
QCBhbmdsZTo6UmVzdWx0IFJlbmRlcmJ1ZmZlck10bDo6c2V0U3RvcmFnZUltcGwoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgewogICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBz
dGF0ZSBpZiB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoZSBzdG9yYWdlLgogICAgICAgICBpZiAoaW50
ZXJuYWxmb3JtYXQgIT0gbVN0YXRlLmdldEZvcm1hdCgpLmluZm8tPmludGVybmFsRm9ybWF0IHx8
Ci0gICAgICAgICAgICB3aWR0aCAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbVN0
YXRlLmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAgICBzYW1wbGVzICE9IG1TdGF0ZS5nZXRTYW1w
bGVzKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCkgIT0gbVN0YXRl
LmdldFdpZHRoKCkgfHwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkg
IT0gbVN0YXRlLmdldEhlaWdodCgpIHx8CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHTHNpemVp
PihzYW1wbGVzKSAhPSBtU3RhdGUuZ2V0U2FtcGxlcygpKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZWxlYXNlVGV4dHVyZSgpOwogICAgICAgICB9CkBAIC03MiwzMCArNzQsNjIgQEAgYW5nbGU6
OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogCiAgICAgaWYgKChtVGV4dHVyZSA9PSBudWxscHRyIHx8ICFtVGV4dHVyZS0+
dmFsaWQoKSkgJiYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDApKQogICAgIHsKLSAgICAgICAg
aWYgKGFjdHVhbFNhbXBsZXMgPT0gMSkKKyAgICAgICAgaWYgKGFjdHVhbFNhbXBsZXMgPT0gMSB8
fCAobUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkgJiYgbUZvcm1hdC5nZXRDYXBzKCku
cmVzb2x2ZSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6
Ok1ha2UyRFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwgZmFs
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1G
b3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpLCAmbVRleHR1cmUpKTsKKyAgICAgICAgICAg
IEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1h
dCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhlaWdodCks
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IHJlbmRlclRhcmdldE9ubHkgKi8gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0
dXJlKSk7CisKKyAgICAgICAgICAgIC8vIFVzZSBpbXBsaWNpdCByZXNvbHZlIGZvciBkZXB0aCBz
dGVuY2lsIHRleHR1cmUgd2hlbmV2ZXIgcG9zc2libGUuIFRoaXMgaXMgYmVjYXVzZQorICAgICAg
ICAgICAgLy8gZm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSwgaWYgc3RlbmNpbCBuZWVkcyB0byBi
ZSBibGl0dGVkLCBhIGZvcm1hdHRlZCBjbG9uZSBoYXMKKyAgICAgICAgICAgIC8vIHRvIGJlIGNy
ZWF0ZWQuIEFuZCBpdCBpcyBleHBlbnNpdmUgdG8gY2xvbmUgYSBtdWx0aXNhbXBsZSB0ZXh0dXJl
LgorICAgICAgICAgICAgaWYgKGFjdHVhbFNhbXBsZXMgPiAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgZm9ybWF0IG11c3Qgc3VwcG9ydHMgaW1wbGljaXQgcmVzb2x2
ZQorICAgICAgICAgICAgICAgIEFTU0VSVChtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKTsKKwor
ICAgICAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZSgK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dE10bCwgbUZvcm1hdCwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHdpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGhlaWdodCksIGFjdHVhbFNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgIC8qIHJlbmRlclRh
cmdldE9ubHkgKi8gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgLyogYWxsb3dGb3JtYXRWaWV3
ICovIGZhbHNlLCAmbUltcGxpY2l0TVNUZXh0dXJlKSk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpU
ZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoCi0gICAgICAgICAgICAgICAgY29udGV4dE10bCwgbUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsU2FtcGxlcywKLSAgICAgICAgICAgICAgICAvKiBy
ZW5kZXJUYXJnZXRPbmx5ICovIGZhbHNlLAotICAgICAgICAgICAgICAgIC8qIGFsbG93Rm9ybWF0
VmlldyAqLyBtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSwgJm1UZXh0dXJlKSk7Cisg
ICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoY29udGV4
dE10bCwgbUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90
PihoZWlnaHQpLCBhY3R1YWxTYW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbmRlclRhcmdldE9ubHkgKi8gZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxsb3dG
b3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsKICAgICAgICAgfQogCi0gICAgICAgIG1S
ZW5kZXJUYXJnZXQuc2V0KG1UZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1G
b3JtYXQpOworICAgICAgICBtUmVuZGVyVGFyZ2V0LnNldFdpdGhJbXBsaWNpdE1TVGV4dHVyZSht
VGV4dHVyZSwgbUltcGxpY2l0TVNUZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAs
IG1Gb3JtYXQpOwogCiAgICAgICAgIC8vIEZvciBlbXVsYXRlZCBjaGFubmVscyB0aGF0IEdMIHRl
eHR1cmUgaW50ZW5kcyB0byBub3QgaGF2ZSwKICAgICAgICAgLy8gd2UgbmVlZCB0byBpbml0aWFs
aXplIHRoZWlyIGNvbnRlbnQuCiAgICAgICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyA9IG10bDo6
SXNGb3JtYXRFbXVsYXRlZChtRm9ybWF0KTsKICAgICAgICAgaWYgKGVtdWxhdGVkQ2hhbm5lbHMp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaW5kZXggPSBtdGw6OkltYWdlTmF0aXZlSW5k
ZXg6OkZyb21CYXNlWmVyb0dMSW5kZXgoZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRCgwKSk7Ci0KLSAg
ICAgICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRpYWxpemVUZXh0dXJlQ29udGVudHMoY29udGV4
dCwgbVRleHR1cmUsIG1Gb3JtYXQsIGluZGV4KSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpJbWFnZUluZGV4IGluZGV4OworCisgICAgICAgICAgICBpZiAoYWN0dWFsU2FtcGxlcyA+IDEp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXggPSBnbDo6SW1hZ2VJbmRleDo6
TWFrZTJETXVsdGlzYW1wbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmRleCA9IGdsOjpJbWFnZUluZGV4OjpNYWtl
MkQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRp
YWxpemVUZXh0dXJlQ29udGVudHMoY29udGV4dCwgbVRleHR1cmUsIG1Gb3JtYXQsIG10bDo6SW1h
Z2VOYXRpdmVJbmRleChpbmRleCwgMCkpKTsKKyAgICAgICAgICAgIGlmIChtSW1wbGljaXRNU1Rl
eHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6SW5p
dGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtSW1wbGljaXRNU1RleHR1cmUsIG1Gb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtdGw6OkltYWdlTmF0aXZlSW5kZXgoZ2w6OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2Ft
cGxlKCksIDApKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gIC8vIGlmIChlbXVsYXRlZENo
YW5uZWxzKQogICAgIH0KIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAg
LTEzMyw3ICsxNjcsNiBAQCBhbmdsZTo6UmVzdWx0IFJlbmRlcmJ1ZmZlck10bDo6Z2V0QXR0YWNo
bWVudFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzYW1wbGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCiB7Ci0gICAgLy8g
Tk9URShocWxlKTogU3VwcG9ydCBNU0FBLgogICAgIEFTU0VSVChtVGV4dHVyZSAmJiBtVGV4dHVy
ZS0+dmFsaWQoKSk7CiAgICAgKnJ0T3V0ID0gJm1SZW5kZXJUYXJnZXQ7CiAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdl
dE10bC5oCmluZGV4IGJhZjRlNGQyNjY5MTgxNDBjYjAxMjMyODFhZGUwM2Y2NDE0YmVmODkuLjBj
NTc1MTc1YTExNzE5OGVkZGY1YmVjYWEyZmVkZmE0NTA3NmQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJn
ZXRNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKQEAgLTQ2LDIxICs0NiwxOSBAQCBjbGFzcyBSZW5k
ZXJUYXJnZXRNdGwgZmluYWwgOiBwdWJsaWMgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFy
Z2V0CiAgICAgdm9pZCBkdXBsaWNhdGVGcm9tKGNvbnN0IFJlbmRlclRhcmdldE10bCAmc3JjKTsK
ICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBtdGw6OlRleHR1cmVSZWYgZ2V0VGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1UZXh0dXJlLmxvY2soKTsgfQotICAgIG10bDo6VGV4dHVyZVJlZiBnZXRJ
bXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1JbXBsaWNpdE1TVGV4dHVyZS5sb2Nr
KCk7IH0KLSAgICBjb25zdCBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbUxldmVsSW5kZXg7IH0KLSAgICB1aW50MzJfdCBnZXRMYXllckluZGV4
KCkgY29uc3QgeyByZXR1cm4gbUxheWVySW5kZXg7IH0KKyAgICBtdGw6OlRleHR1cmVSZWYgZ2V0
VGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+Z2V0VGV4
dHVyZVJlZigpOyB9CisgICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRJbXBsaWNpdE1TVGV4
dHVyZVJlZigpOyB9CisgICAgY29uc3QgbXRsOjpNaXBtYXBOYXRpdmVMZXZlbCAmZ2V0TGV2ZWxJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+bGV2ZWw7IH0K
KyAgICB1aW50MzJfdCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4gbVRleHR1cmVSZW5k
ZXJUYXJnZXRJbmZvLT5zbGljZU9yRGVwdGg7IH0KICAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1w
bGVzKCkgY29uc3Q7CiAgICAgY29uc3QgbXRsOjpGb3JtYXQgKmdldEZvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIG1Gb3JtYXQ7IH0KIAogICAgIHZvaWQgdG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2Mo
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0OwogCiAgIHBy
aXZhdGU6Ci0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBtVGV4dHVyZTsKLSAgICBtdGw6OlRleHR1
cmVXZWFrUmVmIG1JbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVs
IG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOwotICAgIHVpbnQzMl90IG1M
YXllckluZGV4ICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IG10bDo6Rm9ybWF0ICptRm9y
bWF0ICAgICAgICAgPSBudWxscHRyOworLy8gVGhpcyBpcyBzaGFyZWQgcG9pbnRlciB0byBhdm9p
ZCBjcmFzaGluZyB3aGVuIHRleHR1cmUgZGVsZXRlZCBhZnRlciBib3VuZCB0byBhIGZyYW1lIGJ1
ZmZlci4KKyAgICBzdGQ6OnNoYXJlZF9wdHI8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1
cmVUYXJnZXREZXNjPiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm87CisgICAgY29uc3QgbXRsOjpG
b3JtYXQgKm1Gb3JtYXQgPSBudWxscHRyOwogfTsKIH0gIC8vIG5hbWVzcGFjZSByeAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbQppbmRleCBlODllNzYxNDgxZGQ2
NGRjNDdjNzUwN2FhYjliZWZhNWYyNGM0ZTJmLi5lMTI2ZGJiNmJlZTAxMTlhMTY2OWEwMWU3ZTA5
NmMyZDg0YTdkODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLm1tCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwu
bW0KQEAgLTExLDcgKzExLDEwIEBACiAKIG5hbWVzcGFjZSByeAogewotUmVuZGVyVGFyZ2V0TXRs
OjpSZW5kZXJUYXJnZXRNdGwoKSB7fQorUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwo
KSA6CisgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbyhzdGQ6Om1ha2Vfc2hhcmVkPG10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYz4oKSksCisgIG1Gb3JtYXQobnVsbHB0
cikKK3t9CiAKIFJlbmRlclRhcmdldE10bDo6flJlbmRlclRhcmdldE10bCgpCiB7CkBAIC0xOSwx
MCArMjIsNyBAQCBSZW5kZXJUYXJnZXRNdGw6On5SZW5kZXJUYXJnZXRNdGwoKQogfQogCiBSZW5k
ZXJUYXJnZXRNdGw6OlJlbmRlclRhcmdldE10bChSZW5kZXJUYXJnZXRNdGwgJiZvdGhlcikKLSAg
ICA6IG1UZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tVGV4dHVyZSkpLAotICAgICAgbUltcGxpY2l0
TVNUZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tSW1wbGljaXRNU1RleHR1cmUpKSwKLSAgICAgIG1M
ZXZlbEluZGV4KG90aGVyLm1MZXZlbEluZGV4KSwKLSAgICAgIG1MYXllckluZGV4KG90aGVyLm1M
YXllckluZGV4KQorICAgIDogbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKHN0ZDo6bW92ZShvdGhl
ci5tVGV4dHVyZVJlbmRlclRhcmdldEluZm8pKQoge30KIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6
OnNldChjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCkBAIC0zOSwyMSArMzksMjEgQEAg
dm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBsaWNpdE1TVGV4dHVyZShjb25zdCBtdGw6
OlRleHR1cmVSZWYgJnRleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0KQogewotICAgIG1U
ZXh0dXJlICAgICAgICAgICA9IHRleHR1cmU7Ci0gICAgbUltcGxpY2l0TVNUZXh0dXJlID0gaW1w
bGljaXRNU1RleHR1cmU7Ci0gICAgbUxldmVsSW5kZXggICAgICAgID0gbGV2ZWw7Ci0gICAgbUxh
eWVySW5kZXggICAgICAgID0gbGF5ZXI7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50
ZXh0dXJlICAgICAgICAgICA9IHRleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT5pbXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworICAgIG1UZXh0dXJlUmVu
ZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbGV2ZWw7CisgICAgbVRleHR1cmVSZW5kZXJU
YXJnZXRJbmZvLT5zbGljZU9yRGVwdGggICAgICAgID0gbGF5ZXI7CiAgICAgbUZvcm1hdCAgICAg
ICAgICAgID0gJmZvcm1hdDsKIH0KIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldFRleHR1cmUo
Y29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlKQogewotICAgIG1UZXh0dXJlID0gdGV4dHVy
ZTsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnRleHR1cmUgPSB0ZXh0dXJlOwogfQog
CiB2b2lkIFJlbmRlclRhcmdldE10bDo6c2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgbXRsOjpU
ZXh0dXJlUmVmICZpbXBsaWNpdE1TVGV4dHVyZSkKIHsKLSAgICBtSW1wbGljaXRNU1RleHR1cmUg
PSBpbXBsaWNpdE1TVGV4dHVyZTsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxp
Y2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7CiB9CiAKIHZvaWQgUmVuZGVyVGFyZ2V0
TXRsOjpkdXBsaWNhdGVGcm9tKGNvbnN0IFJlbmRlclRhcmdldE10bCAmc3JjKQpAQCAtNjQsMjUg
KzY0LDE5IEBAIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpkdXBsaWNhdGVGcm9tKGNvbnN0IFJlbmRl
clRhcmdldE10bCAmc3JjKQogCiB2b2lkIFJlbmRlclRhcmdldE10bDo6cmVzZXQoKQogewotICAg
IG1UZXh0dXJlLnJlc2V0KCk7Ci0gICAgbUltcGxpY2l0TVNUZXh0dXJlLnJlc2V0KCk7Ci0gICAg
bUxldmVsSW5kZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7Ci0gICAgbUxheWVySW5kZXgg
PSAwOwotICAgIG1Gb3JtYXQgICAgID0gbnVsbHB0cjsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdl
dEluZm8tPnRleHR1cmUucmVzZXQoKTsKKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmlt
cGxpY2l0TVNUZXh0dXJlLnJlc2V0KCk7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5s
ZXZlbCAgICAgICAgPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CisgICAgbVRleHR1cmVSZW5k
ZXJUYXJnZXRJbmZvLT5zbGljZU9yRGVwdGggPSAwOworICAgIG1Gb3JtYXQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKIH0KIAogdWludDMyX3QgUmVuZGVyVGFyZ2V0
TXRsOjpnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKIHsKLSAgICBtdGw6OlRleHR1cmVSZWYgaW1w
bGljaXRNU1RleCA9IGdldEltcGxpY2l0TVNUZXh0dXJlKCk7Ci0gICAgbXRsOjpUZXh0dXJlUmVm
IHRleCAgICAgICAgICAgPSBnZXRUZXh0dXJlKCk7Ci0gICAgcmV0dXJuIGltcGxpY2l0TVNUZXgg
PyBpbXBsaWNpdE1TVGV4LT5zYW1wbGVzKCkgOiAodGV4ID8gdGV4LT5zYW1wbGVzKCkgOiAxKTsK
KyAgICByZXR1cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRSZW5kZXJTYW1wbGVzKCk7
CiB9CiB2b2lkIFJlbmRlclRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MobXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0CiB7Ci0gICAgcnBh
RGVzY091dC0+dGV4dHVyZSAgICAgICAgICAgPSBtVGV4dHVyZS5sb2NrKCk7Ci0gICAgcnBhRGVz
Y091dC0+aW1wbGljaXRNU1RleHR1cmUgPSBtSW1wbGljaXRNU1RleHR1cmUubG9jaygpOwotICAg
IHJwYURlc2NPdXQtPmxldmVsICAgICAgICAgICAgID0gbUxldmVsSW5kZXg7Ci0gICAgcnBhRGVz
Y091dC0+c2xpY2VPckRlcHRoICAgICAgPSBtTGF5ZXJJbmRleDsKLSAgICBycGFEZXNjT3V0LT5i
bGVuZGFibGUgICAgICAgICA9IG1Gb3JtYXQgPyBtRm9ybWF0LT5nZXRDYXBzKCkuYmxlbmRhYmxl
IDogZmFsc2U7CisgICAgcnBhRGVzY091dC0+cmVuZGVyVGFyZ2V0ID0gbVRleHR1cmVSZW5kZXJU
YXJnZXRJbmZvOwogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5oCmluZGV4IDdiMmNm
ZDUwY2JkZmU0MWZmMzY4ODBmNjEwYTc4ZjQ0NDZjYWE3ZTEuLjUyZTkxYWZiNmYxMzI2NWI1NjY1
ODk1YTcwMmFhOTdhODc4MGQ2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgKQEAg
LTExLDggKzExLDggQEAKIAogI2luY2x1ZGUgPG1hcD4KIAorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvU2hhZGVySW1wbC5oIgotCiBuYW1lc3BhY2UgcngKIHsKIApAQCAtMjYsNyArMjYsMTkg
QEAgY2xhc3MgU2hhZGVyTXRsIDogcHVibGljIFNoYWRlckltcGwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5jZSAq
Y29tcGlsZXJJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBvcHRpb25zKSBvdmVycmlkZTsKIAorICAgIHNo
OjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAmdHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjsKKyAg
ICB9CiAgICAgc3RkOjpzdHJpbmcgZ2V0RGVidWdJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiB0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9u
ID0ge307CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVDb21waWxl
RXZlbnQ+IGNvbXBpbGVJbXBsTXRsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNo
Q29tcGlsZXJJbnN0YW5jZSAqY29tcGlsZXJJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZz
b3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKTsKIH07CiAKIH0gIC8vIG5h
bWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KaW5kZXggZjkwOWZiNTA5
Mzg1YmM4ZWNiMTg3YjU1ZjUyNzBhZTljYTJkZjZmYy4uYWQwMWRiZjQ1ZmI4ZjQ3OTA0YmZkYjFk
NGI4NDY4NjZmZWI5ODhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tCkBAIC0x
MCw4ICsxMCwxMyBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10
bC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIK
KyNpbmNsdWRlICJsaWJBTkdMRS9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9Xb3JrZXJU
aHJlYWQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTIwLDEwICsyNSwxMDAgQEAgU2hhZGVyTXRsOjpTaGFkZXJNdGwoY29u
c3QgZ2w6OlNoYWRlclN0YXRlICZzdGF0ZSkgOiBTaGFkZXJJbXBsKHN0YXRlKSB7fQogCiBTaGFk
ZXJNdGw6On5TaGFkZXJNdGwoKSB7fQogCitjbGFzcyBUcmFuc2xhdGVUYXNrIDogcHVibGljIGFu
Z2xlOjpDbG9zdXJlCit7CisgIHB1YmxpYzoKKyAgICBUcmFuc2xhdGVUYXNrKFNoSGFuZGxlIGhh
bmRsZSwgU2hDb21waWxlT3B0aW9ucyBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNl
KQorICAgICAgICA6IG1IYW5kbGUoaGFuZGxlKSwgbU9wdGlvbnMob3B0aW9ucyksIG1Tb3VyY2Uo
c291cmNlKSwgbVJlc3VsdChmYWxzZSkKKyAgICB7fQorCisgICAgdm9pZCBvcGVyYXRvcigpKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSA9IG1Tb3VyY2UuY19z
dHIoKTsKKyAgICAgICAgbVJlc3VsdCAgICAgICAgICAgID0gc2g6OkNvbXBpbGUobUhhbmRsZSwg
JnNvdXJjZSwgMSwgbU9wdGlvbnMpOworICAgIH0KKworICAgIGJvb2wgZ2V0UmVzdWx0KCkgeyBy
ZXR1cm4gbVJlc3VsdDsgfQorCisgICAgU2hIYW5kbGUgZ2V0SGFuZGxlKCkgeyByZXR1cm4gbUhh
bmRsZTsgfQorCisgIHByaXZhdGU6CisgICAgU2hIYW5kbGUgbUhhbmRsZTsKKyAgICBTaENvbXBp
bGVPcHRpb25zIG1PcHRpb25zOworICAgIHN0ZDo6c3RyaW5nIG1Tb3VyY2U7CisgICAgYm9vbCBt
UmVzdWx0OworfTsKKworY2xhc3MgTVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsIGZpbmFsIDog
cHVibGljIFdhaXRhYmxlQ29tcGlsZUV2ZW50Cit7CisgIHB1YmxpYzoKKyAgICBNVExXYWl0YWJs
ZUNvbXBpbGVFdmVudEltcGwoU2hhZGVyTXRsICpzaGFkZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxhbmdsZTo6V2FpdGFibGVFdmVudD4gd2FpdGFi
bGVFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRy
PFRyYW5zbGF0ZVRhc2s+IHRyYW5zbGF0ZVRhc2spCisgICAgICAgIDogV2FpdGFibGVDb21waWxl
RXZlbnQod2FpdGFibGVFdmVudCksIG1UcmFuc2xhdGVUYXNrKHRyYW5zbGF0ZVRhc2spLCBtU2hh
ZGVyKHNoYWRlcikKKyAgICB7fQorCisgICAgYm9vbCBnZXRSZXN1bHQoKSBvdmVycmlkZSB7IHJl
dHVybiBtVHJhbnNsYXRlVGFzay0+Z2V0UmVzdWx0KCk7IH0KKworICAgIGJvb2wgcG9zdFRyYW5z
bGF0ZShzdGQ6OnN0cmluZyAqaW5mb0xvZykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNoOjpU
U2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4o
bVRyYW5zbGF0ZVRhc2stPmdldEhhbmRsZSgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0
YWxEaXJlY3QgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpOworICAgICAgICBp
ZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ICE9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIENvcHkgcmVmbGVjdGlvbiBmcm9tIHRyYW5zbGF0aW9uLgorICAgICAgICAgICAgbVNo
YWRlci0+dHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiA9CisgICAgICAgICAgICAgICAgKih0cmFu
c2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSk7CisgICAg
ICAgICAgICB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24oKS0+cmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNoYXJlZF9wdHI8VHJhbnNsYXRlVGFzaz4gbVRyYW5zbGF0
ZVRhc2s7CisgICAgU2hhZGVyTXRsICptU2hhZGVyOworfTsKKworc3RkOjpzaGFyZWRfcHRyPFdh
aXRhYmxlQ29tcGlsZUV2ZW50PiBTaGFkZXJNdGw6OmNvbXBpbGVJbXBsTXRsKAorICAgIGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgIGdsOjpTaENvbXBpbGVySW5zdGFuY2UgKmNvbXBp
bGVySW5zdGFuY2UsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwKKyAgICBTaENvbXBp
bGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FT
U0VSVFMpCisgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfQVNUOworI2VuZGlmCisK
KyAgICBhdXRvIHdvcmtlclRocmVhZFBvb2wgPSBjb250ZXh0LT5nZXRXb3JrZXJUaHJlYWRQb29s
KCk7CisgICAgYXV0byB0cmFuc2xhdGVUYXNrID0KKyAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxU
cmFuc2xhdGVUYXNrPihjb21waWxlckluc3RhbmNlLT5nZXRIYW5kbGUoKSwgY29tcGlsZU9wdGlv
bnMsIHNvdXJjZSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxNVExXYWl0YWJsZUNv
bXBpbGVFdmVudEltcGw+KAorICAgICAgICB0aGlzLCBhbmdsZTo6V29ya2VyVGhyZWFkUG9vbDo6
UG9zdFdvcmtlclRhc2sod29ya2VyVGhyZWFkUG9vbCwgdHJhbnNsYXRlVGFzayksCisgICAgICAg
IHRyYW5zbGF0ZVRhc2spOworfQorCiBzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVDb21waWxlRXZl
bnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aENvbXBpbGVySW5zdGFuY2UgKmNvbXBpbGVySW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIG9w
dGlvbnMpCiB7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250
ZXh0KTsKKyAgICBpZiAoZ2V0U3RhdGUoKS5nZXRTaGFkZXJUeXBlKCkgPT0gZ2w6OlNoYWRlclR5
cGU6OlZlcnRleCAmJgorICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAg
ICAvLyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJh
c2UgPSBzdGF0aWNfY2FzdDxzaDo6VFNoSGFuZGxlQmFzZSAqPihjb21waWxlckluc3RhbmNlLT5n
ZXRIYW5kbGUoKSk7CisgICAgICAgIGF1dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+
Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKTsKKyAgICAgICAgaWYgKHRyYW5zbGF0b3JNZXRh
bERpcmVjdCA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHRyYW5zbGF0
b3JNZXRhbCA9IHN0YXRpY19jYXN0PHNoOjpUcmFuc2xhdG9yTWV0YWwgKj4oYmFzZS0+Z2V0QXND
b21waWxlcigpKTsKKyAgICAgICAgICAgIHRyYW5zbGF0b3JNZXRhbC0+ZW5hYmxlRW11bGF0ZWRJ
bnN0YW5jZUlEKHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQo
dHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0
aW9ucyA9IFNIX0lOSVRJQUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CiAKICAgICBib29sIGlz
V2ViR0wgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkud2ViZ2xDb21wYXRpYmlsaXR5OwpAQCAt
MzMsOCArMTI4LDExIEBAIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gU2hh
ZGVyTXRsOjpjb21waWxlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250CiAgICAgfQogCiAgICAgY29t
cGlsZU9wdGlvbnMgfD0gU0hfQ0xBTVBfUE9JTlRfU0laRTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisgICAg
Y29tcGlsZU9wdGlvbnMgfD0gU0hfQ0xBTVBfRlJBR19ERVBUSDsKKyNlbmRpZgogCi0gICAgcmV0
dXJuIGNvbXBpbGVJbXBsKGNvbnRleHQsIGNvbXBpbGVySW5zdGFuY2UsIG1TdGF0ZS5nZXRTb3Vy
Y2UoKSwgY29tcGlsZU9wdGlvbnMgfCBvcHRpb25zKTsKKyAgICByZXR1cm4gY29tcGlsZUltcGxN
dGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5jZSwgZ2V0U3RhdGUoKS5nZXRTb3VyY2UoKSwgY29t
cGlsZU9wdGlvbnMgfCBvcHRpb25zKTsKIH0KIAogc3RkOjpzdHJpbmcgU2hhZGVyTXRsOjpnZXRE
ZWJ1Z0luZm8oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgKaW5kZXggOWU4
NGY4OGY3NTRkMTBlM2I2NmMyMDJjZTIzNDg5NmIyZDE5MWQ5MC4uMGFkYzM2MDYwODZhOWQ4OGRj
Y2UzYjRjZjAxZWQ2ZDYzOTUwMDY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5o
CkBAIC0yNCw3ICsyNCwyNyBAQCBuYW1lc3BhY2UgcngKIAogY2xhc3MgRGlzcGxheU10bDsKIAot
Y2xhc3MgU3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorY2xhc3MgU3VyZmFjZU10bFBy
b3RvY29sIDogcHVibGljIFN1cmZhY2VJbXBsCit7CisgIHB1YmxpYzoKKyAgICBTdXJmYWNlTXRs
UHJvdG9jb2woY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlKSA6IFN1cmZhY2VJbXBsKHN0
YXRlKSB7fQorICAgIHZpcnR1YWwgaW50IGdldFNhbXBsZXMoKSBjb25zdCAgICAgID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGFuZ2xlOjpSZXN1bHQgZ2V0QXR0YWNobWVudFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gYmluZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRl
ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFp
bmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisgICAgdmlydHVhbCBhbmdsZTo6
UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkgPSAwOworICAgIHZpcnR1YWwgYW5nbGU6OlJl
c3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmIGdl
dENvbG9yVGV4dHVyZSgpID0gMDsKK307CisKK2NsYXNzIFN1cmZhY2VNdGwgOiBwdWJsaWMgU3Vy
ZmFjZU10bFByb3RvY29sCiB7CiAgIHB1YmxpYzoKICAgICBTdXJmYWNlTXRsKERpc3BsYXlNdGwg
KmRpc3BsYXksCkBAIC02NywxMSArODcsMTEgQEAgY2xhc3MgU3VyZmFjZU10bCA6IHB1YmxpYyBT
dXJmYWNlSW1wbAogICAgIGFuZ2xlOjpSZXN1bHQgaW5pdGlhbGl6ZUNvbnRlbnRzKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBvdmVycmlkZTsKIAotICAgIGNvbnN0
IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0dXJlKCkgeyByZXR1cm4gbUNvbG9yVGV4dHVy
ZTsgfQorICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbUNvbG9yVGV4dHVyZTsgfQogICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZnZXRD
b2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1Db2xvckZvcm1hdDsgfQotICAgIGludCBnZXRT
YW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBsZXM7IH0KKyAgICBpbnQgZ2V0U2FtcGxlcygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1TYW1wbGVzOyB9CiAKLSAgICBib29sIGhhc1JvYnVz
dFJlc291cmNlSW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1Sb2J1c3RSZXNvdXJjZUluaXQ7IH0KKyAg
ICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1S
b2J1c3RSZXNvdXJjZUluaXQ7IH0KIAogICAgIGFuZ2xlOjpSZXN1bHQgZ2V0QXR0YWNobWVudFJl
bmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCkBAIC0xNDQsMTMgKzE2
NCwxNCBAQCBjbGFzcyBXaW5kb3dTdXJmYWNlTXRsIDogcHVibGljIFN1cmZhY2VNdGwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkgb3ZlcnJpZGU7CiAKKyAgICBhbmdsZTo6UmVz
dWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KSBvdmVycmlkZTsKICAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9i
dGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQgLyoqIG51bGxh
YmxlICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgKm5ld0RyYXdhYmxlT3V0IC8qKiBudWxsYWJsZSAqLykgb3ZlcnJpZGU7CiAKICAgICAv
LyBFbnN1cmUgdGhlIHRoZSB0ZXh0dXJlIHJldHVybmVkIGZyb20gZ2V0Q29sb3JUZXh0dXJlKCkg
aXMgcmVhZHkgZm9yIGdsUmVhZFBpeGVscygpLiBUaGlzCiAgICAgLy8gaW1wbGljaXRseSBjYWxs
cyBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZCgpLgotICAgIGFuZ2xlOjpSZXN1bHQgZW5z
dXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KTsKLQorICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFk
UGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBib29sIHBy
ZXNlcnZlQnVmZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJldGFpbkJ1ZmZlcjsgfQog
ICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQgc3dhcEltcGwoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwogICAgIGFuZ2xlOjpSZXN1bHQgb2J0YWluTmV4dERyYXdhYmxlKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KTsKQEAgLTE2OCw2ICsxODksOCBAQCBjbGFzcyBXaW5kb3dTdXJm
YWNlTXRsIDogcHVibGljIFN1cmZhY2VNdGwKICAgICAvLyBldmVudC4gV2UgZG9uJ3QgdXNlIG1N
ZXRhbExheWVyLmRyYXdhYmxlU2l6ZSBkaXJlY3RseSBzaW5jZSBpdCBtaWdodCBiZSBjaGFuZ2Vk
IGludGVybmFsbHkgYnkKICAgICAvLyBtZXRhbCBydW50aW1lLgogICAgIENHU2l6ZSBtQ3VycmVu
dEtub3duRHJhd2FibGVTaXplOworCisgICAgYm9vbCBtUmV0YWluQnVmZmVyID0gZmFsc2U7CiB9
OwogCiAvLyBPZmZzY3JlZW4gc3VyZmFjZSwgYmFzZSBjbGFzcyBvZiBQQnVmZmVyLCBJT1N1cmZh
Y2UuCkBAIC0yMTIsMzcgKzIzNSw1IEBAIGNsYXNzIFBCdWZmZXJTdXJmYWNlTXRsIDogcHVibGlj
IE9mZnNjcmVlblN1cmZhY2VNdGwKICAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWln
aHQpIG92ZXJyaWRlOwogfTsKIAotLy8gT2Zmc2NyZWVuIGNyZWF0ZWQgZnJvbSBJT1N1cmZhY2UK
LWNsYXNzIElPU3VyZmFjZVN1cmZhY2VNdGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3VyZmFjZU10bAot
ewotICBwdWJsaWM6Ci0gICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5
LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKLSAg
ICB+SU9TdXJmYWNlU3VyZmFjZU10bCgpIG92ZXJyaWRlOwotCi0gICAgZWdsOjpFcnJvciBiaW5k
VGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMaW50IGJ1ZmZlcikgb3ZlcnJpZGU7Ci0gICAgZWdsOjpFcnJvciByZWxlYXNlVGV4SW1h
Z2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOwot
Ci0gICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gYmluZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50
UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRlOwotCi0gICAgc3RhdGljIGJvb2wgVmFsaWRh
dGVBdHRyaWJ1dGVzKEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIGNvbnN0IGVnbDo6QXR0cmlidXRl
TWFwICZhdHRyaWJzKTsKLQotICBwcml2YXRlOgotICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29s
b3JUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7Ci0KLSAgICBJT1N1
cmZhY2VSZWYgbUlPU3VyZmFjZTsKLSAgICBOU1VJbnRlZ2VyIG1JT1N1cmZhY2VQbGFuZTsKLSAg
ICBpbnQgbUlPU3VyZmFjZUZvcm1hdElkeDsKLX07Ci0KIH0gIC8vIG5hbWVzcGFjZSByeAotCiAj
ZW5kaWYgLyogTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfU1VSRkFDRU1UTF9IXyAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1N1cmZhY2VNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQppbmRleCAzMDNmYjE2NzQ5NmU3ODA5NWEwZDFiNGJj
OTIyYzFmNmNkOGJkY2FhLi4xYjRjZDEwOGU4ZmYwNDk2YTdlYTY2MzY2ZDRjZjQ5MzVjNGFlMTY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvU3VyZmFjZU10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQpAQCAtMjMsNyArMjMsNyBAQAog
I2lmIGRlZmluZWQoTkRFQlVHKSAmJiAhZGVmaW5lZChBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
KQogIyAgICBkZWZpbmUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIDAKICNlbHNl
Ci0jICAgIGRlZmluZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQgMQorIyAgICBk
ZWZpbmUgQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIEFOR0xFX1dJVEhfTU9ERVJO
X01FVEFMX0FQSQogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApAQCAtMzMsNTUgKzMzLDE5IEBAIG5h
bWVzcGFjZQogewogCiAjZGVmaW5lIEFOR0xFX1RPX0VHTF9UUlkoRVhQUikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChBTkdM
RV9VTkxJS0VMWSgoRVhQUikgIT0gYW5nbGU6OlJlc3VsdDo6Q29udGludWUpKSBcCi0gICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdXJmYWNlKCk7ICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKK2RvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKEFO
R0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkpIFwKKyAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdXJmYWNlKCk7ICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKK30gd2hpbGUgKDApCiAKIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1
bHRGcmFtZUJ1ZmZlckRlcHRoRm9ybWF0SWQgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FU
OwogY29uc3RleHByIGFuZ2xlOjpGb3JtYXRJRCBrRGVmYXVsdEZyYW1lQnVmZmVyU3RlbmNpbEZv
cm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpTOF9VSU5UOwogY29uc3RleHByIGFuZ2xlOjpGb3Jt
YXRJRCBrRGVmYXVsdEZyYW1lQnVmZmVyRGVwdGhTdGVuY2lsRm9ybWF0SWQgPQogICAgIGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ7CiAKLXN0cnVjdCBJT1N1cmZhY2VGb3JtYXRJ
bmZvCi17Ci0gICAgR0xlbnVtIGludGVybmFsRm9ybWF0OwotICAgIEdMZW51bSB0eXBlOwotICAg
IHNpemVfdCBjb21wb25lbnRCeXRlczsKLQotICAgIGFuZ2xlOjpGb3JtYXRJRCBuYXRpdmVBbmds
ZUZvcm1hdElkOwotfTsKLQotLy8gY2xhbmctZm9ybWF0IG9mZgotLy8gTk9URShocWxlKTogU3Vw
cG9ydCBSMTZfVUlOVCBvbmNlIEdMRVMzIGlzIGNvbXBsZXRlLgotY29uc3RleHByIHN0ZDo6YXJy
YXk8SU9TdXJmYWNlRm9ybWF0SW5mbywgOD4ga0lPU3VyZmFjZUZvcm1hdHMgPSB7ewotICAgIHtH
TF9SRUQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAxLCBhbmdsZTo6Rm9y
bWF0SUQ6OlI4X1VOT1JNfSwKLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgMiwgYW5nbGU6OkZvcm1hdElEOjpSMTZfVU5PUk19LAotICAgIHtHTF9SRywg
ICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAyLCBhbmdsZTo6Rm9ybWF0SUQ6
OlI4RzhfVU5PUk19LAotICAgIHtHTF9SRywgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAg
ICAgICAgICA0LCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VTk9STX0sCi0gICAge0dMX1JHQiwg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6
QjhHOFI4QThfVU5PUk19LAotICAgIHtHTF9CR1JBX0VYVCwgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKLSAgICB7R0xf
UkdCQSwgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgOCwgYW5nbGU6OkZvcm1h
dElEOjpSMTZHMTZCMTZBMTZfRkxPQVR9LAotICAgIHtHTF9SR0IxMF9BMiwgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWLCA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JN
fSwKLX19OwotLy8gY2xhbmctZm9ybWF0IG9uCi0KLWludCBGaW5kSU9TdXJmYWNlRm9ybWF0SW5k
ZXgoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4oa0lPU3VyZmFjZUZvcm1hdHMuc2l6ZSgpKTsgKytp
KQotICAgIHsKLSAgICAgICAgY29uc3QgYXV0byAmZm9ybWF0SW5mbyA9IGtJT1N1cmZhY2VGb3Jt
YXRzW2ldOwotICAgICAgICBpZiAoZm9ybWF0SW5mby5pbnRlcm5hbEZvcm1hdCA9PSBpbnRlcm5h
bEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0gdHlwZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCiBhbmds
ZTo6UmVzdWx0IENyZWF0ZU9yUmVzaXplVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0
ICZmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3
aWR0aCwKQEAgLTEyOCw2ICs5MiwxOSBAQCBib29sIElzRnJhbWVDYXB0dXJlRW5hYmxlZCgpCiAj
ZW5kaWYKIH0KIAorQU5HTEVfTVRMX1VOVVNFRAorc3RkOjpzdHJpbmcgR2V0TWV0YWxDYXB0dXJl
RmlsZSgpCit7CisjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIHJl
dHVybiAiIjsKKyNlbHNlCisgICAgYXV0byB2YXIgICAgICAgICAgICAgICAgICAgPSBzdGQ6Omdl
dGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9GSUxFIik7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcgZmlsZVBhdGggPSB2YXIgPyB2YXIgOiAiIjsKKworICAgIHJldHVybiBmaWxlUGF0aDsK
KyNlbmRpZgorfQorCiBBTkdMRV9NVExfVU5VU0VECiBzaXplX3QgTWF4QWxsb3dlZEZyYW1lQ2Fw
dHVyZSgpCiB7CkBAIC0yMDIsNiArMTc5LDIxIEBAIHZvaWQgU3RhcnRGcmFtZUNhcHR1cmUoaWQ8
TVRMRGV2aWNlPiBtZXRhbERldmljZSwgaWQ8TVRMQ29tbWFuZFF1ZXVlPiBtZXRhbENtZFF1CiAg
ICAgewogICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBb
W01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKICAgICAgICAgY2FwdHVyZURlc2Ny
aXB0b3IuY2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nIGZpbGVQYXRoICAgICAgICAgICAgICA9IEdldE1ldGFsQ2FwdHVyZUZpbGUo
KTsKKyAgICAgICAgaWYgKGZpbGVQYXRoICE9ICIiKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyBudW1iZXJlZFBhdGggPQorICAgICAgICAgICAgICAgIGZpbGVQYXRo
ICsgc3RkOjp0b19zdHJpbmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworICAg
ICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRpb24gPSBNVExDYXB0dXJlRGVzdGlu
YXRpb25HUFVUcmFjZURvY3VtZW50OworICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3Iub3V0
cHV0VVJMID0KKyAgICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OmZhbHNlXTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBwYXVzZSBleGVjdXRpb24g
b25seSBpZiBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCBpbnNpZGUgWGNvZGUKKyAgICAg
ICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0
aW9uRGV2ZWxvcGVyVG9vbHM7CisgICAgICAgIH0KIAogICAgICAgICBOU0Vycm9yICplcnJvcjsK
ICAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJlV2l0aERlc2NyaXB0b3I6
Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKQEAgLTIxMSwxNCArMjAzLDE1IEBAIHZv
aWQgU3RhcnRGcmFtZUNhcHR1cmUoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSwgaWQ8TVRMQ29t
bWFuZFF1ZXVlPiBtZXRhbENtZFF1CiAgICAgfQogICAgIGVsc2UKICMgICAgZW5kaWYgIC8vIF9f
TUFDXzEwXzE1CisgICAgICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAx
My4wLCAxMykpCiAgICAgewotICAgICAgICBpZiAoRnJhbWVDYXB0dXJlRGV2aWNlU2NvcGUoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhE
ZXZpY2U6bWV0YWxEZXZpY2VdOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgTVRM
Q2FwdHVyZURlc2NyaXB0b3IgKmNhcHR1cmVEZXNjcmlwdG9yID0gW1tNVExDYXB0dXJlRGVzY3Jp
cHRvciBhbGxvY10gaW5pdF07CisgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmpl
Y3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworCisgICAgICAgIE5TRXJyb3IgKmVycm9yOworICAg
ICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0
dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQogICAgICAgICB7Ci0gICAgICAgICAgICBbY2Fw
dHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJlV2l0aENvbW1hbmRRdWV1ZTptZXRhbENtZFF1ZXVlXTsK
KyAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVycm9yICVAIiwg
ZXJyb3IpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmICAvLyBBTkdMRV9NRVRBTF9GUkFNRV9D
QVBUVVJFX0VOQUJMRUQKQEAgLTI0NSwxMSArMjM4LDEwIEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVy
ZSgpCiB9CiB9CiAKLS8vIFN1cmZhY2VNdGwgaW1wbGVtZW50YXRpb24KIFN1cmZhY2VNdGw6OlN1
cmZhY2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKLSAgICA6IFN1cmZhY2VJbXBsKHN0YXRlKQor
ICAgIDogU3VyZmFjZU10bFByb3RvY29sKHN0YXRlKQogewogICAgIG1Sb2J1c3RSZXNvdXJjZUlu
aXQgPQogICAgICAgICBhdHRyaWJzLmdldChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFU
SU9OX0FOR0xFLCBFR0xfRkFMU0UpID09IEVHTF9UUlVFOwpAQCAtNjkzLDYgKzY4NSwxMCBAQCBh
bmdsZTo6UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbgogICAgIHJldHVybiBTdXJmYWNlTXRsOjpnZXRBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsIHJ0
T3V0KTsKIH0KIAorYW5nbGU6OlJlc3VsdCBXaW5kb3dTdXJmYWNlTXRsOjplbnN1cmVDdXJyZW50
RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1
cm4gZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29udGV4dCwgbnVsbHB0cik7Cit9CiBh
bmdsZTo6UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFp
bmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZXdEcmF3YWJsZU91
dCkKIHsKQEAgLTk0MywxNTcgKzkzOSw1IEBAIHZvaWQgUEJ1ZmZlclN1cmZhY2VNdGw6OnNldEZp
eGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpCiAgICAgbVNpemUuaGVpZ2h0ID0gaGVpZ2h0OwogfQog
Ci0vLyBJT1N1cmZhY2VTdXJmYWNlTXRsIGltcGxlbWVudGF0aW9uLgotSU9TdXJmYWNlU3VyZmFj
ZU10bDo6SU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAm
c3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTENsaWVu
dEJ1ZmZlciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQotICAgIDogT2Zmc2NyZWVuU3VyZmFj
ZU10bChkaXNwbGF5LCBzdGF0ZSwgYXR0cmlicyksIG1JT1N1cmZhY2UoKF9fYnJpZGdlIElPU3Vy
ZmFjZVJlZikoYnVmZmVyKSkKLXsKLSAgICBDRlJldGFpbihtSU9TdXJmYWNlKTsKLQotICAgIG1J
T1N1cmZhY2VQbGFuZSA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX0lPU1VSRkFD
RV9QTEFORV9BTkdMRSkpOwotCi0gICAgRUdMQXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmli
cy5nZXQoRUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFKTsKLSAgICBFR0xBdHRyaWIg
dHlwZSAgICAgICAgICAgPSBhdHRyaWJzLmdldChFR0xfVEVYVFVSRV9UWVBFX0FOR0xFKTsKLSAg
ICBtSU9TdXJmYWNlRm9ybWF0SWR4ID0KLSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+
KHR5cGUpKTsKLSAgICBBU1NFUlQobUlPU3VyZmFjZUZvcm1hdElkeCA+PSAwKTsKLQotICAgIG1D
b2xvckZvcm1hdCA9Ci0gICAgICAgIGRpc3BsYXktPmdldFBpeGVsRm9ybWF0KGtJT1N1cmZhY2VG
b3JtYXRzW21JT1N1cmZhY2VGb3JtYXRJZHhdLm5hdGl2ZUFuZ2xlRm9ybWF0SWQpOwotfQotSU9T
dXJmYWNlU3VyZmFjZU10bDo6fklPU3VyZmFjZVN1cmZhY2VNdGwoKQotewotICAgIGlmIChtSU9T
dXJmYWNlICE9IG51bGxwdHIpCi0gICAgewotICAgICAgICBDRlJlbGVhc2UobUlPU3VyZmFjZSk7
Ci0gICAgICAgIG1JT1N1cmZhY2UgPSBudWxscHRyOwotICAgIH0KLX0KLQotZWdsOjpFcnJvciBJ
T1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZSAqdGV4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVHTGludCBidWZmZXIpCi17Ci0gICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6
R2V0SW1wbChjb250ZXh0KTsKLSAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0TXRsKTsKLQot
ICAgIC8vIEluaXRpYWxpemUgb2Zmc2NyZWVuIHRleHR1cmUgaWYgbmVlZGVkOgotICAgIEFOR0xF
X1RPX0VHTF9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7Ci0KLSAgICBy
ZXR1cm4gT2Zmc2NyZWVuU3VyZmFjZU10bDo6YmluZFRleEltYWdlKGNvbnRleHQsIHRleHR1cmUs
IGJ1ZmZlcik7Ci19Ci0KLWVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cmVsZWFzZVRl
eEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQotewotICAg
IGVnbDo6RXJyb3IgcmUgPSBPZmZzY3JlZW5TdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29u
dGV4dCwgYnVmZmVyKTsKLSAgICBTdG9wRnJhbWVDYXB0dXJlKCk7Ci0gICAgcmV0dXJuIHJlOwot
fQotCi1hbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQoCi0gICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCi0gICAgR0xlbnVtIGJp
bmRpbmcsCi0gICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCi0gICAgR0xzaXpl
aSBzYW1wbGVzLAotICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0
KQotewotICAgIC8vIEluaXRpYWxpemUgb2Zmc2NyZWVuIHRleHR1cmUgaWYgbmVlZGVkOgotICAg
IEFOR0xFX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKLQotICAgIHJl
dHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRl
eHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRPdXQpOwotfQotCi1hbmdsZTo6
UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgaWYgKG1Db2xvclRleHR1cmUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci0gICAgfQotICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7Ci0gICAgQU5HTEVf
TVRMX09CSkNfU0NPUEUKLSAgICB7Ci0gICAgICAgIGF1dG8gdGV4RGVzYyA9Ci0gICAgICAgICAg
ICBbTVRMVGV4dHVyZURlc2NyaXB0b3IgdGV4dHVyZTJERGVzY3JpcHRvcldpdGhQaXhlbEZvcm1h
dDptQ29sb3JGb3JtYXQubWV0YWxGb3JtYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOm1TaXplLndpZHRoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodDptU2l6ZS5oZWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWlwbWFwcGVkOk5PXTsKLQotICAgICAgICB0ZXhEZXNj
LnVzYWdlID0gTVRMVGV4dHVyZVVzYWdlU2hhZGVyUmVhZCB8IE1UTFRleHR1cmVVc2FnZVJlbmRl
clRhcmdldDsKLQotICAgICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlID0KLSAgICAgICAgICAg
IFtjb250ZXh0TXRsLT5nZXRNZXRhbERldmljZSgpIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjp0
ZXhEZXNjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpb3N1cmZhY2U6bUlPU3VyZmFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOm1JT1N1cmZhY2VQbGFuZV07
Ci0KLSAgICAgICAgbUNvbG9yVGV4dHVyZSA9IG10bDo6VGV4dHVyZTo6TWFrZUZyb21NZXRhbChb
dGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKLSAgICB9Ci0KLSAgICBtQ29sb3JSZW5k
ZXJUYXJnZXQuc2V0KG1Db2xvclRleHR1cmUsIG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbCwgMCwg
bUNvbG9yRm9ybWF0KTsKLQotICAgIGlmIChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9y
bWF0SWR4XS5pbnRlcm5hbEZvcm1hdCA9PSBHTF9SR0IpCi0gICAgewotICAgICAgICAvLyBUaGlz
IGZvcm1hdCBoYXMgZW11bGF0ZWQgYWxwaGEgY2hhbm5lbC4gSW5pdGlhbGl6ZSB0ZXh0dXJlJ3Mg
YWxwaGEgY2hhbm5lbCB0byAxLjAuCi0gICAgICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZyZ2JDbGVh
ckZvcm1hdCA9Ci0gICAgICAgICAgICBjb250ZXh0TXRsLT5nZXRQaXhlbEZvcm1hdChhbmdsZTo6
Rm9ybWF0SUQ6OlI4RzhCOF9VTk9STSk7Ci0gICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRpYWxp
emVUZXh0dXJlQ29udGVudHNHUFUoCi0gICAgICAgICAgICBjb250ZXh0LCBtQ29sb3JUZXh0dXJl
LCByZ2JDbGVhckZvcm1hdCwKLSAgICAgICAgICAgIG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJv
bUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRleDo6TWFrZTJEKDApKSwKLSAgICAgICAgICAg
IE1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKLQotICAgICAgICAvLyBEaXNhYmxlIHN1YnNlcXVl
bnQgcmVuZGVyaW5nIHRvIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIG1Db2xvclRleHR1cmUtPnNl
dENvbG9yV3JpdGFibGVNYXNrKE1UTENvbG9yV3JpdGVNYXNrQWxsICYgKH5NVExDb2xvcldyaXRl
TWFza0FscGhhKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwotfQotCi0vLyBzdGF0aWMKLWJvb2wgSU9TdXJmYWNlU3VyZmFjZU10bDo6VmFsaWRhdGVBdHRy
aWJ1dGVzKEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKLXsK
LSAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlID0gKF9fYnJpZGdlIElPU3VyZmFjZVJlZikoYnVm
ZmVyKTsKLQotICAgIC8vIFRoZSBwbGFuZSBtdXN0IGV4aXN0IGZvciB0aGlzIElPU3VyZmFjZS4g
SU9TdXJmYWNlR2V0UGxhbmVDb3VudCBjYW4gcmV0dXJuIDAgZm9yIG5vbi1wbGFuYXIKLSAgICAv
LyBpb1N1cmZhY2VzIGJ1dCB3ZSB3aWxsIHRyZWF0IG5vbi1wbGFuYXIgbGlrZSBpdCBpcyBhIHNp
bmdsZSBwbGFuZS4KLSAgICBzaXplX3Qgc3VyZmFjZVBsYW5lQ291bnQgPSBzdGQ6Om1heChzaXpl
X3QoMSksIElPU3VyZmFjZUdldFBsYW5lQ291bnQoaW9TdXJmYWNlKSk7Ci0gICAgRUdMQXR0cmli
IHBsYW5lICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSk7
Ci0gICAgaWYgKHBsYW5lIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHBsYW5lKSA+PSBzdXJm
YWNlUGxhbmVDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBUaGUgd2lkdGggaGVpZ2h0IHNwZWNpZmllZCBtdXN0IGJlIGF0IGxlYXN0ICgxLCAxKSBh
bmQgYXQgbW9zdCB0aGUgcGxhbmUgc2l6ZQotICAgIEVHTEF0dHJpYiB3aWR0aCAgPSBhdHRyaWJz
LmdldChFR0xfV0lEVEgpOwotICAgIEVHTEF0dHJpYiBoZWlnaHQgPSBhdHRyaWJzLmdldChFR0xf
SEVJR0hUKTsKLSAgICBpZiAod2lkdGggPD0gMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRo
KSA+IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSB8fAotICAgICAg
ICBoZWlnaHQgPD0gMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGhlaWdodCkgPiBJT1N1cmZhY2VH
ZXRIZWlnaHRPZlBsYW5lKGlvU3VyZmFjZSwgcGxhbmUpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZpbmQgdGhpcyBJT1N1cmZhY2UgZm9ybWF0Ci0gICAg
RUdMQXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfSU5URVJO
QUxfRk9STUFUX0FOR0xFKTsKLSAgICBFR0xBdHRyaWIgdHlwZSAgICAgICAgICAgPSBhdHRyaWJz
LmdldChFR0xfVEVYVFVSRV9UWVBFX0FOR0xFKTsKLQotICAgIGludCBmb3JtYXRJbmRleCA9Ci0g
ICAgICAgIEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNfY2FzdDxHTGVudW0+KGludGVy
bmFsRm9ybWF0KSwgc3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7Ci0KLSAgICBpZiAoZm9ybWF0
SW5kZXggPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IENoZWNrIHRoYXQgdGhlIGZvcm1hdCBtYXRjaGVzIHRoaXMgSU9TdXJmYWNlIHBsYW5lCi0gICAg
aWYgKElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUoaW9TdXJmYWNlLCBwbGFuZSkg
IT0KLSAgICAgICAga0lPU3VyZmFjZUZvcm1hdHNbZm9ybWF0SW5kZXhdLmNvbXBvbmVudEJ5dGVz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAppbmRleCA2MmY5NmVlMjg1ZGIyZjNh
ZDk2MzU0YWQwMzM3OTliMzBjNjgwMTc3Li5mNGJjYWU5MGUzMWI5OTIwYzQ4YTI5NDBmMGJlNjVh
ZWU4MTYzYTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBtdGwKIAog
Ly8gQ29tbW9uIGNsYXNzIHRvIGJlIHVzZWQgYnkgYm90aCBTeW5jSW1wbCBhbmQgRUdMU3luY0lt
cGwuCiAvLyBOT1RFOiBTaGFyZWRFdmVudCBpcyBvbmx5IGRlY2xhcmVkIG9uIGlPUyAxMi4wKyBv
ciBtYWMgMTAuMTQrCi0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorI2lmIGRlZmluZWQo
X19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKIGNsYXNzIFN5bmMKIHsKICAg
cHVibGljOgpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBTeW5jCiAgICAgc3RkOjpzaGFyZWRfcHRy
PHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlPiBtQ3Y7CiAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6
bXV0ZXg+IG1Mb2NrOwogfTsKLSNlbHNlICAgLy8gI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFC
TEUKKyNlbHNlICAgLy8gI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKIGNsYXNzIFN5bmMKIHsKICAgcHVibGljOgpAQCAtOTAsNyArOTAsNyBAQCBjbGFz
cyBTeW5jCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogICAgIH0KIH07Ci0j
ZW5kaWYgIC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisjZW5kaWYgIC8vICNpZiBk
ZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCiB9ICAvLyBuYW1l
c3BhY2UgbXRsCiAKIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKQEAgLTk4
LDkgKzk4LDcgQEAgY2xhc3MgRmVuY2VOVk10bCA6IHB1YmxpYyBGZW5jZU5WSW1wbAogICBwdWJs
aWM6CiAgICAgRmVuY2VOVk10bCgpOwogICAgIH5GZW5jZU5WTXRsKCkgb3ZlcnJpZGU7Ci0KICAg
ICB2b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7Ci0K
ICAgICBhbmdsZTo6UmVzdWx0IHNldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0xlbnVt
IGNvbmRpdGlvbikgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCB0ZXN0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJvb2xlYW4gKm91dEZpbmlzaGVkKSBvdmVycmlkZTsKICAgICBh
bmdsZTo6UmVzdWx0IGZpbmlzaChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7
CkBAIC0xNTIsNiArMTUwLDggQEAgY2xhc3MgRUdMU3luY010bCBmaW5hbCA6IHB1YmxpYyBFR0xT
eW5jSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgZmxhZ3MpIG92ZXJyaWRl
OwogICAgIGVnbDo6RXJyb3IgZ2V0U3RhdHVzKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwg
RUdMaW50ICpvdXRTdGF0dXMpIG92ZXJyaWRlOwogCisgICAgZWdsOjpFcnJvciBkdXBOYXRpdmVG
ZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpyZXN1bHQpIGNvbnN0
IG92ZXJyaWRlOworCiAgIHByaXZhdGU6CiAgICAgbXRsOjpTeW5jIG1TeW5jOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TeW5jTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1N5bmNNdGwubW0KaW5kZXggZGZmODAwMzEyMGE4YTZjZTQ2MmI1MDZlZjY1NzU1
YjcyNGYxZjI2Mi4uZjhmM2VlNjk3OThiYjFjMjhmM2UyZGExOTU2OTY1MjliN2U4MGM5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1N5bmNNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0KQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0yMiw3ICsyMiw3IEBAIG5hbWVzcGFjZSByeAogbmFtZXNwYWNlIG10bAog
ewogLy8gU2hhcmVkRXZlbnQgaXMgb25seSBhdmFpbGFibGUgb24gaU9TIDEyLjArIG9yIG1hYyAx
MC4xNCsKLSNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisjaWYgZGVmaW5lZChfX0lQSE9O
RV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQogU3luYzo6U3luYygpIHt9CiBTeW5jOjp+
U3luYygpIHt9CiAKQEAgLTg3LDcgKzg3LDcgQEAgYW5nbGU6OlJlc3VsdCBTeW5jOjpjbGllbnRX
YWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgLy8gb25EZXN0cm95KCksIGJ1dCB0aGUg
Y2FsbGJhY2sgbWlnaHQgc3RpbGwgbm90IGJlIGZpcmVkIHlldC4KICAgICBzdGQ6OnNoYXJlZF9w
dHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+IGN2UmVmID0gbUN2OwogICAgIHN0ZDo6c2hhcmVk
X3B0cjxzdGQ6Om11dGV4PiBsb2NrUmVmICAgICAgICAgICAgPSBtTG9jazsKLQorI2lmIEFOR0xF
X01UTF9FVkVOVF9BVkFJTEFCTEUKICAgICBBdXRvT2JqQ09iajxNVExTaGFyZWRFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyID0KICAgICAgICAgY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRPckNyZWF0ZVNoYXJlZEV2ZW50TGlzdGVuZXIoKTsKICAgICBbbU1ldGFsU2hhcmVkRXZlbnQu
Z2V0KCkgbm90aWZ5TGlzdGVuZXI6ZXZlbnRMaXN0ZW5lcgpAQCAtMTA2LDYgKzEwNiw3IEBAIGFu
Z2xlOjpSZXN1bHQgU3luYzo6Y2xpZW50V2FpdChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogCiAg
ICAgQVNTRVJUKG1NZXRhbFNoYXJlZEV2ZW50LmdldCgpLnNpZ25hbGVkVmFsdWUgPj0gbVNldENv
dW50ZXIpOwogICAgICpvdXRSZXN1bHQgPSBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworI2VuZGlm
CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0xMTgsNyArMTE5
LDcgQEAgYW5nbGU6OlJlc3VsdCBTeW5jOjpnZXRTdGF0dXMoYm9vbCAqc2lnbmFsZWQpCiAgICAg
KnNpZ25hbGVkID0gbU1ldGFsU2hhcmVkRXZlbnQuZ2V0KCkuc2lnbmFsZWRWYWx1ZSA+PSBtU2V0
Q291bnRlcjsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9Ci0jZW5kaWYg
IC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisjZW5kaWYgIC8vICNpZiBkZWZpbmVk
KF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCiB9ICAvLyBuYW1lc3BhY2Ug
bXRsCiAKIC8vIEZlbmNlTlZNdGwgaW1wbGVtZW50YXRpb24KQEAgLTEyOCw3ICsxMjksOCBAQCBG
ZW5jZU5WTXRsOjp+RmVuY2VOVk10bCgpIHt9CiAKIHZvaWQgRmVuY2VOVk10bDo6b25EZXN0cm95
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIG1TeW5jLm9uRGVzdHJveSgpOwor
ICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm47CiB9CiAKIGFuZ2xlOjpSZXN1bHQgRmVu
Y2VOVk10bDo6c2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9u
KQpAQCAtMzA3LDQgKzMwOSwxMCBAQCBlZ2w6OkVycm9yIEVHTFN5bmNNdGw6OmdldFN0YXR1cyhj
b25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVHTGludCAqb3V0U3RhdHVzKQogICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKIH0KIAorZWdsOjpFcnJvciBFR0xTeW5jTXRsOjpkdXBOYXRpdmVG
ZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpyZXN1bHQpIGNvbnN0
Cit7CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZWdsOjpFZ2xCYWREaXNwbGF5KCk7
Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCmluZGV4IDVjMjE0MWJkMGJh
Yzc3MDkyNWQ3ZTlmNjExNDlhZjY1ZWM3OTFiZGMuLjVmNGIyZDQwZjcwM2U0N2VkOTFmYjliOWQ3
ODBjMzU2MjljNGI4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaApAQCAtMTUs
OSArMTUsOSBAQAogI2luY2x1ZGUgImNvbW1vbi9QYWNrZWRFbnVtcy5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL1RleHR1cmVJbXBsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9jb21tYW5kX2J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZXNvdXJjZXMuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAKQEAgLTMyLDYgKzMyLDggQEAgY2xh
c3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAogewogICBwdWJsaWM6CiAgICAgVGV4
dHVyZU10bChjb25zdCBnbDo6VGV4dHVyZVN0YXRlICZzdGF0ZSk7CisgICAgLy8gVGV4dHVyZSAg
dmlldworICAgIFRleHR1cmVNdGwoY29uc3QgVGV4dHVyZU10bCAmbXRsLCBHTGVudW0gZm9ybWF0
KTsKICAgICB+VGV4dHVyZU10bCgpIG92ZXJyaWRlOwogICAgIHZvaWQgb25EZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKIApAQCAtMTkzLDYgKzE5NSw3IEBAIGNs
YXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKICAgICBJbWFnZURlZmluaXRpb25N
dGwgJmdldEltYWdlRGVmaW5pdGlvbihjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7
CiAgICAgUmVuZGVyVGFyZ2V0TXRsICZnZXRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkltYWdlSW5k
ZXggJmltYWdlSW5kZXgpOwogICAgIGJvb2wgaXNJbmRleFdpdGhpbk1pbk1heExldmVscyhjb25z
dCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgY29uc3Q7CisgICAgbXRsOjpUZXh0dXJlUmVm
ICZnZXRJbXBsaWNpdE1TVGV4dHVyZShjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7
CiAKICAgICAvLyBJZiBsZXZlbHMgPSAwLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGZ1bGwg
bWlwbWFwcyB0ZXh0dXJlLgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0U3RvcmFnZUltcGwoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0zMTIsOCArMzE1LDkgQEAgY2xhc3MgVGV4dHVyZU10
bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVNaXBtYXBD
UFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogCiAgICAgbXRsOjpGb3JtYXQgbUZvcm1h
dDsKKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1Cb3VuZFN1cmZhY2UgPSBuaWw7CiAgICAgLy8g
VGhlIHJlYWwgdGV4dHVyZSB1c2VkIGJ5IE1ldGFsIGRyYXcgY2FsbHMuCi0gICAgbXRsOjpUZXh0
dXJlUmVmIG1OYXRpdmVUZXh0dXJlOworICAgIG10bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVy
ZSAgICAgICAgID0gbmlsOwogICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gbU1ldGFsU2FtcGxlclN0
YXRlID0gbmlsOwogCiAgICAgLy8gTnVtYmVyIG9mIHNsaWNlcwpAQCAtMzIzLDE4ICszMjcsMTQg
QEAgY2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAogICAgIC8vIE9uY2UgdGhl
IGltYWdlcyBhcnJheSBpcyBjb21wbGV0ZSwgdGhleSB3aWxsIGJlIHRyYW5zZmVycmVkIHRvIHJl
YWwgdGV4dHVyZSBvYmplY3QuCiAgICAgLy8gTk9URToKICAgICAvLyAgLSBUaGUgc2Vjb25kIGRp
bWVuc2lvbiBpcyBpbmRleGVkIGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBuYXRp
dmUgbGV2ZWwKLSAgICAvLyAgLSBGb3IgQ3ViZSBtYXAsIHRoZXJlIHdpbGwgYmUgYXQgbW9zdCA2
IGVudHJpZXMgaW4gdGhlIG1UZXhJbWFnZURlZnMgdGFibGUsIG9uZSBmb3IgZWFjaAotICAgIC8v
ICBmYWNlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIEN1YmUgbWFwJ3MgaW1hZ2UgaXMgZGVmaW5lZCBw
ZXIgZmFjZSAmIHBlciBsZXZlbC4KKyAgICAvLyAgLSBGb3IgQ3ViZSBtYXAsIHRoZXJlIHdpbGwg
YmUgYXQgbW9zdCA2IGVudHJpZXMgaW4gdGhlIG1hcCB0YWJsZSwgb25lIGZvciBlYWNoIGZhY2Uu
IFRoaXMgaXMKKyAgICAvLyAgYmVjYXVzZSB0aGUgQ3ViZSBtYXAncyBpbWFnZSBpcyBkZWZpbmVk
IHBlciBmYWNlICYgcGVyIGxldmVsLgogICAgIC8vICAtIEZvciBvdGhlciB0ZXh0dXJlIHR5cGVz
LCB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGVudHJ5IGluIHRoZSBtYXAgdGFibGUuIEFsbCBvdGhl
ciB0ZXh0dXJlcwogICAgIC8vICBleGNlcHQgQ3ViZSBtYXAgaGFzIHRleHR1cmUgaW1hZ2UgZGVm
aW5lZCBwZXIgbGV2ZWwgKGFsbCBzbGljZXMgaW5jbHVkZWQpLgorICAgIC8vICAtIFRoZXNlIHRo
cmVlIHZhcmlhYmxlcycgc2Vjb25kIGRpbWVuc2lvbiBhcmUgaW5kZXhlZCBieSBpbWFnZSBpbmRl
eCAoYmFzZSBsZXZlbCBpbmNsdWRlZCkuCiAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxB
cnJheTxJbWFnZURlZmluaXRpb25NdGw+PiBtVGV4SW1hZ2VEZWZzOwotCi0gICAgLy8gUmVuZGVy
IFRhcmdldCBwZXIgc2xpY2UvZGVwdGgvY3ViZSBmYWNlLgotICAgIC8vIC0gRm9yIDJEIHRleHR1
cmU6IFRoZXJlIHdpbGwgYmUgb25lIGtleSBlbnRyeSBpbiB0aGUgbWFwLgotICAgIC8vIC0gRm9y
IEN1YmUgbWFwOiBUaGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBrZXkgZW50cmllcy4KLSAgICAvLyAt
IEZvciBhcnJheS8zRCB0ZXh0dXJlOiBUaGVyZSB3aWxsIGJlIGF0IG1vc3Qgc2xpY2VzL2RlcHRo
cyBudW1iZXIgb2Yga2V5IGVudHJpZXMuCi0gICAgLy8gLSBUaGUgc2Vjb25kIGRpbWVuc2lvbiBp
cyBpbmRleGVkIGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBuYXRpdmUgbGV2ZWwK
ICAgICBzdGQ6Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PFJlbmRlclRhcmdldE10bD4+IG1Q
ZXJMYXllclJlbmRlclRhcmdldHM7CisgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJh
eTxtdGw6OlRleHR1cmVSZWY+PiBtSW1wbGljaXRNU1RleHR1cmVzOwogCiAgICAgLy8gTWlwbWFw
IHZpZXdzIGFyZSBpbmRleGVkIGJ5IG5hdGl2ZSBsZXZlbCAoaWdub3JlZCBiYXNlIGxldmVsKToK
ICAgICBtdGw6Ok5hdGl2ZVRleExldmVsQXJyYXkgbU5hdGl2ZUxldmVsVmlld3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
VGV4dHVyZU10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCmluZGV4IDYyM2MxMDRjOWU4ZjcwYjkzODI0ZmM0OWY0
NWY5YjI3ZjY4ZDIxNjAuLjNiMWM4YWY3MWViMzU4ZTdmYWY4YTBjZDRjNGEwZjRhOGY2MjBlNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9UZXh0dXJlTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCkBAIC0yMCw4ICsyMCw4IEBACiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9TYW1wbGVyTXRsLmgiCi0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9jb21tb24uaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0
X3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgi
CkBAIC01MzQsNiArNTM0LDEwIEBAIHZvaWQgVGV4dHVyZU10bDo6cmVsZWFzZVRleHR1cmUoYm9v
bCByZWxlYXNlSW1hZ2VzLCBib29sIHJlbGVhc2VUZXh0dXJlT2JqZWN0c09uCiAKIGFuZ2xlOjpS
ZXN1bHQgVGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpCiB7CisgICAgaWYgKG1Cb3VuZFN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQogICAgIGlmIChtTmF0aXZlVGV4dHVy
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTEy
MDcsMjUgKzEyMTEsMTUgQEAgYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpzZXRCYXNlTGV2ZWwo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMdWludCBiYXNlTGUKIAogYW5nbGU6OlJlc3Vs
dCBUZXh0dXJlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKIHsKLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKLQotICAg
IGF1dG8gcEJ1ZmZlciAgICAgPSBHZXRJbXBsQXM8T2Zmc2NyZWVuU3VyZmFjZU10bD4oc3VyZmFj
ZSk7Ci0gICAgbU5hdGl2ZVRleHR1cmUgICA9IHBCdWZmZXItPmdldENvbG9yVGV4dHVyZSgpOwot
ICAgIG1Gb3JtYXQgICAgICAgICAgPSBwQnVmZmVyLT5nZXRDb2xvckZvcm1hdCgpOwotICAgIGds
OjpFeHRlbnRzIHNpemUgPSBtTmF0aXZlVGV4dHVyZS0+c2l6ZUF0MCgpOwotICAgIG1Jc1BvdzIg
ICAgICAgICAgPSBnbDo6aXNQb3cyKHNpemUud2lkdGgpICYmIGdsOjppc1BvdzIoc2l6ZS5oZWln
aHQpICYmIGdsOjppc1BvdzIoc2l6ZS5kZXB0aCk7Ci0gICAgQU5HTEVfVFJZKGVuc3VyZVNhbXBs
ZXJTdGF0ZUNyZWF0ZWQoY29udGV4dCkpOwotCi0gICAgLy8gVGVsbCBjb250ZXh0IHRvIHJlYmlu
ZCB0ZXh0dXJlcwotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29u
dGV4dCk7Ci0gICAgY29udGV4dE10bC0+aW52YWxpZGF0ZUN1cnJlbnRUZXh0dXJlcygpOwotCisg
ICAgSU9TdXJmYWNlU3VyZmFjZU10bCAqc3VyZmFjZU10bCA9IChJT1N1cmZhY2VTdXJmYWNlTXRs
ICopbXRsOjpHZXRJbXBsKHN1cmZhY2UpOworICAgIG1Cb3VuZFN1cmZhY2UgICAgICAgICAgICAg
ICAgICAgPSBzdXJmYWNlTXRsOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KIAogYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgcmVsZWFzZVRleHR1cmUodHJ1ZSk7CisgICAgbUJv
dW5kU3VyZmFjZSA9IG5pbDsKKwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KIApAQCAtMTIzNSw2ICsxMjI5LDEyIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6Z2V0
QXR0YWNobWVudFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNh
bXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCiB7CisgICAgaWYg
KG1Cb3VuZFN1cmZhY2UpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoCisgICAgICAgICAgICBt
Qm91bmRTdXJmYWNlLT5nZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcs
IGltYWdlSW5kZXgsIHNhbXBsZXMsIHJ0T3V0KSk7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyAgICB9CiAgICAgQU5HTEVfVFJZKGVuc3VyZVRleHR1cmVDcmVhdGVk
KGNvbnRleHQpKTsKIAogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwo
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010
bC5oCmluZGV4IGFhNDViZjk0ZTAyNDliMTE2YThiMTRmZWRkZmNlYTNkNmYyNWU3Y2IuLjIwYTJj
MjBmOWRiOGJlZmFkODMxZWFlMDBiOWE0NjExMTg3MGNlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVk
YmFja010bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oCkBAIC0xMCwxMiArMTAsMjAgQEAKICNp
Zm5kZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfVFJBTlNGT1JNRkVFREJBQ0tNVExfSF8KICNk
ZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfVFJBTlNGT1JNRkVFREJBQ0tNVExfSF8KIAor
I2luY2x1ZGUgPE1ldGFsL01ldGFsLmg+CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvVHJh
bnNmb3JtRmVlZGJhY2tJbXBsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
QnVmZmVyTXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291
cmNlcy5oIgogCi1uYW1lc3BhY2UgcngKK3R5cGVkZWYgdWludDY0X3QgTXRsRGV2aWNlU2l6ZTsK
KworbmFtZXNwYWNlIGdsCiB7CitjbGFzcyBQcm9ncmFtU3RhdGU7Cit9ICAvLyBuYW1lc3BhY2Ug
Z2wKIAotY2xhc3MgQ29udGV4dE10bDsKK25hbWVzcGFjZSByeAorewogCiBjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1GZWVkYmFja0ltcGwKIHsKQEAgLTMyLDE3
ICs0MCwyMyBAQCBjbGFzcyBUcmFuc2Zvcm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1G
ZWVkYmFja0ltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBp
bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpPZmZz
ZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYmluZGluZykgb3ZlcnJpZGU7CiAKLSAgICAv
LyBQYXJhbXM6Ci0gICAgLy8gLSBkcmF3Q2FsbEZpcnN0VmVydGV4IGlzIGZpcnN0IHZlcnRleCB1
c2VkIGJ5IGdsRHJhd0FycmF5cyouIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UKLSAgICAvLyBn
bF9WZXJ0ZXhJbmRleCBpcyBzdGFydGluZyBmcm9tIHRoaXMuCi0gICAgLy8gLSBza2lwcGVkVmVy
dGljZXMgaXMgbnVtYmVyIG9mIHNraXBwZWQgdmVydGljZXMgKHVzZWZ1bCBmb3IgbXVsdGlwbGUg
bWV0YWwgZHJhd3MgcGVyIEdMIGRyYXcKLSAgICAvLyBjYWxsKS4KLSAgICBhbmdsZTo6UmVzdWx0
IGdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZFZlcnRpY2VzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzT3V0KTsKKyAg
ICB2b2lkIGdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldHNTaXplKSBjb25zdDsKKworICAgIGNvbnN0IGdsOjpUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmdldEJ1ZmZlckhhbmRsZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1CdWZmZXJIYW5kbGVzOworICAgIH0KIAogICBw
cml2YXRlOgorICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwg
Kj4gbUJ1ZmZlckhhbmRsZXM7CisgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5
PE10bERldmljZVNpemU+IG1CdWZmZXJPZmZzZXRzOworICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxNdGxEZXZpY2VTaXplPiBtQnVmZmVyU2l6ZXM7CisKKyAgICAvLyBBbGln
bmVkIG9mZnNldCBmb3IgZW11bGF0aW9uLiBDb3VsZCBiZSBzbWFsbGVyIHRoYW4gb2Zmc2V0Lgor
ICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxNdGxEZXZpY2VTaXplPiBtQWxp
Z25lZEJ1ZmZlck9mZnNldHM7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFu
c2Zvcm1GZWVkYmFja010bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5tbQppbmRleCBkOTQwYzNkNTZh
MTRiZGEzNjQxMGNkYTZiYWY5NjhjMWRkNzUwYjY1Li5kZTdhOTA5MzU3YjY5MjRmOWQwZWI1YmMw
MmQyMjdlMmY2MzQyMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9y
bUZlZWRiYWNrTXRsLm1tCkBAIC04LDE4ICs4LDI3IEBACiAvLwogCiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCIKKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIgor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCIKIAotI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9RdWVyeS5oIgotI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0NvbnRleHRNdGwuaCIKLSNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10
bC5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKIG5hbWVzcGFjZSByeAogewogCiBU
cmFuc2Zvcm1GZWVkYmFja010bDo6VHJhbnNmb3JtRmVlZGJhY2tNdGwoY29uc3QgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrU3RhdGUgJnN0YXRlKQotICAgIDogVHJhbnNmb3JtRmVlZGJhY2tJbXBsKHN0
YXRlKQorICAgIDogVHJhbnNmb3JtRmVlZGJhY2tJbXBsKHN0YXRlKSwKKyAgICAgIG1CdWZmZXJI
YW5kbGVze30sCisgICAgICBtQnVmZmVyT2Zmc2V0c3t9LAorICAgICAgbUJ1ZmZlclNpemVze30s
CisgICAgICBtQWxpZ25lZEJ1ZmZlck9mZnNldHN7fQoge30KIAogVHJhbnNmb3JtRmVlZGJhY2tN
dGw6On5UcmFuc2Zvcm1GZWVkYmFja010bCgpIHt9CkBAIC0yNyw0MCArMzYsNzkgQEAgVHJhbnNm
b3JtRmVlZGJhY2tNdGw6On5UcmFuc2Zvcm1GZWVkYmFja010bCgpIHt9CiBhbmdsZTo6UmVzdWx0
IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVN
b2RlIHByaW1pdGl2ZU1vZGUpCiB7Ci0gICAgbXRsOjpHZXRJbXBsKGNvbnRleHQpLT5vblRyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlKGNvbnRleHQsIHRoaXMpOworICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgLy8gTm90IGN1cnJlbnRseSBzdXBw
b3J0ZWQgd2l0aCBtc2wgY29tcGlsZXIKKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXko
KS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0KIAotICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFi
bGUgKmV4ZWN1dGFibGUgPSBjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRh
YmxlKCk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworICAgIHNpemVfdCB4ZmJCdWZmZXJDb3Vu
dCA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKworICAg
IGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCB4ZmJCdWZmZXJDb3Vu
dDsgKytidWZmZXJJbmRleCkKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5n
UG9pbnRlcjxnbDo6QnVmZmVyPiAmYmluZGluZyA9IG1TdGF0ZS5nZXRJbmRleGVkQnVmZmVyKGJ1
ZmZlckluZGV4KTsKKyAgICAgICAgQVNTRVJUKGJpbmRpbmcuZ2V0KCkpOworCisgICAgICAgIEJ1
ZmZlck10bCAqYnVmZmVyTXRsID0gbXRsOjpHZXRJbXBsKGJpbmRpbmcuZ2V0KCkpOworCisgICAg
ICAgIGFzc2VydChidWZmZXJNdGwpOworICAgICAgICBtQnVmZmVyT2Zmc2V0c1tidWZmZXJJbmRl
eF0gPSBiaW5kaW5nLmdldE9mZnNldCgpOworICAgICAgICBtQnVmZmVyU2l6ZXNbYnVmZmVySW5k
ZXhdICAgPSBnbDo6R2V0Qm91bmRCdWZmZXJBdmFpbGFibGVTaXplKGJpbmRpbmcpOworICAgICAg
ICBtQnVmZmVySGFuZGxlc1tidWZmZXJJbmRleF0gPSBidWZmZXJNdGw7CisKKyAgICAgICAgQVNT
RVJUKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2suZW5hYmxlZCk7CisgICAgICAgIGNvbnN0IE10bERldmljZVNpemUgb2Zmc2V0
QWxpZ25tZW50ID0gbXRsOjprVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZzZXRNaW5BbGlnbm1lbnQ7
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcG9zc2libGUgdW5kZXIvb3ZlcmZs
b3cgd2l0aCBiaW5kaW5nIHNpemUuCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE10bERl
dmljZVNpemUpID49IHNpemVvZihiaW5kaW5nLmdldFNpemUoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgIk10bERldmljZVNpemUgdG9vIHNtYWxsIik7CisKKyAgICAgICAgLy8gU2V0IHRoZSBv
ZmZzZXQgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHJlcXVlc3RlZCBvZmZzZXQgd2hpbGUg
cmVtYWluaW5nIGFsaWduZWQuCisgICAgICAgIG1BbGlnbmVkQnVmZmVyT2Zmc2V0c1tidWZmZXJJ
bmRleF0gPQorICAgICAgICAgICAgKG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAvIG9mZnNl
dEFsaWdubWVudCkgKiBvZmZzZXRBbGlnbm1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRl
eHRNdGwtPm9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZmZXJDb3VudCwgbUJ1ZmZlckhh
bmRsZXMpOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3
aXRoIG1zbCBjb21waWxlcgorICAgIGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRG
ZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUn
cyBhbiBhY3RpdmUgdHJhbnNmb3JtIGZlZWRiYWNrIHF1ZXJ5LCBhY2N1bXVsYXRlIHRoZSBwcmlt
aXRpdmVzIGRyYXduLgogICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSA9IGNvbnRleHQtPmdl
dFN0YXRlKCk7CiAgICAgZ2w6OlF1ZXJ5ICp0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5ID0KICAgICAg
ICAgZ2xTdGF0ZS5nZXRBY3RpdmVRdWVyeShnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNXcml0dGVuKTsKKwogICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KQog
ICAgIHsKLSAgICAgICAgbXRsOjpHZXRJbXBsKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkpLT5vblRy
YW5zZm9ybUZlZWRiYWNrRW5kKGNvbnRleHQpOworICAgICAgICBtdGw6OkdldEltcGwodHJhbnNm
b3JtRmVlZGJhY2tRdWVyeSktPm9uVHJhbnNmb3JtRmVlZGJhY2tFbmQobVN0YXRlLmdldFByaW1p
dGl2ZXNEcmF3bigpKTsKICAgICB9Ci0KLSAgICBtdGw6OkdldEltcGwoY29udGV4dCktPm9uVHJh
bnNmb3JtRmVlZGJhY2tJbmFjdGl2ZShjb250ZXh0LCB0aGlzKTsKLQorICAgIGNvbnRleHRNdGwt
Pm9uRW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OnBhdXNlKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIC8vIFdoZW4gWEZCIGlzIHBhdXNlZCwg
T3BlbkdMIGFsbG93cyBYRkIgYnVmZmVycyB0byBiZSBib3VuZCBmb3Igb3RoZXIgcHVycG9zZXMu
IFdlIG5lZWQgdG8gY2FsbAotICAgIC8vIG9uVHJhbnNmb3JtRmVlZGJhY2tJbmFjdGl2ZSgpIHRv
IGlzc3VlIGEgc3luYy4KLSAgICBtdGw6OkdldEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVl
ZGJhY2tJbmFjdGl2ZShjb250ZXh0LCB0aGlzKTsKLQotICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOworICAgIHJldHVybiBjb250ZXh0TXRsLT5vblBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KTsKIH0KIAogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6cmVzdW1lKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25U
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0LCB0aGlzKTsKLQotICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAg
ICAgICAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFt
RXhlY3V0YWJsZSgpOworICAgIEFTU0VSVChleGVjdXRhYmxlKTsKKyAgICBzaXplX3QgeGZiQnVm
ZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7
CisgICAgcmV0dXJuIGNvbnRleHRNdGwtPm9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZm
ZXJDb3VudCwgbUJ1ZmZlckhhbmRsZXMpOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZl
ZWRiYWNrTXRsOjpiaW5kSW5kZXhlZEJ1ZmZlcigKQEAgLTY4LDE3ICsxMTYsMjAgQEAgYW5nbGU6
OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4ZWRCdWZmZXIoCiAgICAgc2l6
ZV90IGluZGV4LAogICAgIGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVy
PiAmYmluZGluZykKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBub3cKKyAgICBVTklNUExFTUVO
VEVEKCk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xl
OjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10
bCAqY29udGV4dE10bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZFZlcnRp
Y2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0KQordm9pZCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVm
ZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzT3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zm
c2V0c1NpemUpIGNvbnN0CiB7Ci0gICAgaW50NjRfdCB2ZXJ0aWNlc0RyYXduID0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4obVN0YXRlLmdldFZlcnRpY2VzRHJhd24oKSkgKyBza2lwcGVkVmVydGljZXM7
CisgICAgaWYgKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0
ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdMc2l6
ZWlwdHIgdmVydGljZXNEcmF3biA9IG1TdGF0ZS5nZXRWZXJ0aWNlc0RyYXduKCk7CiAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8R0xzaXplaT4gJmJ1ZmZlclN0cmlkZXMgPQogICAgICAgICBtU3RhdGUu
Z2V0Qm91bmRQcm9ncmFtKCktPmdldFRyYW5zZm9ybUZlZWRiYWNrU3RyaWRlcygpOwogICAgIGNv
bnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0
YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKQEAgLTg3LDI3ICsxMzgsMjUgQEAgYW5nbGU6
OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAogCiAgICAgQVNTRVJUKHhmYkJ1ZmZlckNvdW50ID4gMCk7CiAKKyAgICAv
LyBUaGUgY2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgdGhlIG9mZnNldHMgYXJyYXkgaGFzIGVub3Vn
aCBzcGFjZS4gIFRoZSBtYXhpbXVtIHBvc3NpYmxlCisgICAgLy8gbnVtYmVyIG9mIG91dHB1dHMg
aXMgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUy4KKyAg
ICBBU1NFUlQob2Zmc2V0c1NpemUgPj0geGZiQnVmZmVyQ291bnQpOworCiAgICAgZm9yIChzaXpl
X3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZl
ckluZGV4KQogICAgIHsKLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGds
OjpCdWZmZXI+ICZidWZmZXJCaW5kaW5nID0KLSAgICAgICAgICAgIG1TdGF0ZS5nZXRJbmRleGVk
QnVmZmVyKGJ1ZmZlckluZGV4KTsKLQotICAgICAgICBBU1NFUlQoKGJ1ZmZlckJpbmRpbmcuZ2V0
T2Zmc2V0KCkgJSA0KSA9PSAwKTsKLQotICAgICAgICAvLyBPZmZzZXQgdGhlIGdsX1ZlcnRleElu
ZGV4IGJ5IGRyYXdDYWxsRmlyc3RWZXJ0ZXgKKyAgICAgICAgaW50NjRfdCBvZmZzZXRGcm9tRGVz
Y3JpcHRvciA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihtQnVmZmVyT2Zmc2V0
c1tidWZmZXJJbmRleF0gLSBtQWxpZ25lZEJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdKTsKICAg
ICAgICAgaW50NjRfdCBkcmF3Q2FsbFZlcnRleE9mZnNldCA9IHN0YXRpY19jYXN0PGludDY0X3Q+
KHZlcnRpY2VzRHJhd24pIC0gZHJhd0NhbGxGaXJzdFZlcnRleDsKIAogICAgICAgICBpbnQ2NF90
IHdyaXRlT2Zmc2V0ID0KLSAgICAgICAgICAgIChidWZmZXJCaW5kaW5nLmdldE9mZnNldCgpICsg
ZHJhd0NhbGxWZXJ0ZXhPZmZzZXQgKiBidWZmZXJTdHJpZGVzW2J1ZmZlckluZGV4XSkgLworICAg
ICAgICAgICAgKG9mZnNldEZyb21EZXNjcmlwdG9yICsgZHJhd0NhbGxWZXJ0ZXhPZmZzZXQgKiBi
dWZmZXJTdHJpZGVzW2J1ZmZlckluZGV4XSkgLwogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc2l6ZW9mKHVpbnQzMl90KSk7CiAKICAgICAgICAgb2Zmc2V0c091dFtidWZmZXJJbmRl
eF0gPSBzdGF0aWNfY2FzdDxpbnQzMl90Pih3cml0ZU9mZnNldCk7CiAKLSAgICAgICAgLy8gQ2hl
Y2sgZm9yIG92ZXJmbG93LgotICAgICAgICBBTkdMRV9DSEVDS19HTF9BTExPQyhjb250ZXh0TXRs
LCBvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNldCk7CisgICAgICAgIC8vIEFz
c2VydCBvbiBvdmVyZmxvdy4gIEZvciBub3csIHN1cHBvcnQgdHJhbnNmb3JtIGZlZWRiYWNrIHVw
IHRvIDJHQi4KKyAgICAgICAgQVNTRVJUKG9mZnNldHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRl
T2Zmc2V0KTsKICAgICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9
CiAKIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlN
dGwuaAppbmRleCBjMmZiODQ2ZDQxZDk0MTJhMDBmODdhMzcwODNjNTVhZGJhYzQxZGVlLi5mZTZi
NWY3YTllOTA2ZjE5ODc5M2VhYWNkNDc0NzI3ODFlMjRjYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlN
dGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwuaApAQCAtNDMsOCArNDMsOSBAQCBjbGFzcyBWZXJ0ZXhBcnJh
eU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcyk7CiAKICAgICAvLyB2ZXJ0ZXhEZXNjQ2hh
bmdlZCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1dCB2YWx1ZSBpZiBpcyB0cnVl
LCB3aWxsIGZvcmNlIG5ldwotICAgIC8vIG10bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2
aWEgdmVydGV4RGVzY091dC4gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhl
Ci0gICAgLy8gdmVydGV4IGFycmF5IGlzIGRpcnR5CisgICAgLy8gbXRsOjpWZXJ0ZXhEZXNjIHRv
IGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdo
ZW4gYWN0aXZlIHNoYWRlcgorICAgIC8vIHByb2dyYW0gaXMgY2hhbmdlZC4KKyAgICAvLyBPdGhl
cndpc2UsIGl0IGlzIG9ubHkgcmV0dXJuZWQgd2hlbiB0aGUgdmVydGV4IGFycmF5IGlzIGRpcnR5
LgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICp2ZXJ0ZXhE
ZXNjQ2hhbmdlZCwKQEAgLTUyLDExICs1MywyNCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1
YmxpYyBWZXJ0ZXhBcnJheUltcGwKIAogICAgIGFuZ2xlOjpSZXN1bHQgZ2V0SW5kZXhCdWZmZXIo
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIHByaW1pdGl2ZU1vZGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRP
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSAqaW5kZXhUeXBlT3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpE
cmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpOworCisgICAgLy8gVXNlIHRvIGVt
dWxhdGUgaW5zdGFuY2VkIGRyYXcgZm9yIGluc3RhbmNlIDxpbnN0YW5jZUlkPi4KKyAgICAvLyBU
aGUgdHlwaWNhbCBjYWxsIHNlcXVlbmNlIGZvciBlbXVsYXRlZCBpbnN0YW5jZSBkcmF3IGlzOgor
ICAgIC8vIC0gc2V0dXBEcmF3KCkKKyAgICAvLyAtIGRyYXcuCisgICAgLy8gLSBlbXVsYXRlSW5z
dGFuY2VEcmF3U3RlcCgxKQorICAgIC8vIC0gZHJhdy4KKyAgICAvLyAtIGVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKG4pCisgICAgLy8gLSBkcmF3LgorICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJh
d1N0ZXAoMCkKKyAgICB2b2lkIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKG10bDo6UmVuZGVyQ29t
bWFuZEVuY29kZXIgKmNtZEVuY29kZXIsIHVpbnQzMl90IGluc3RhbmNlSWQpOwogCiAgIHByaXZh
dGU6CiAgICAgdm9pZCByZXNldChDb250ZXh0TXRsICpjb250ZXh0KTsKQEAgLTcyLDE1ICs4Niwx
OSBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKIAogICAg
IGFuZ2xlOjpSZXN1bHQgY29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRP
dXQpOwogICAgIGFuZ2xlOjpSZXN1bHQgc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIHBy
aW1pdGl2ZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGluZGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqc291cmNlUG9pbnRlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aWR4QnVmZmVyT2Zmc2V0T3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlckNvdW50T3V0KTsK
IAogICAgIGFuZ2xlOjpSZXN1bHQgY29udmVydEluZGV4QnVmZmVyR1BVKGNvbnN0IGdsOjpDb250
ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLApAQCAtMTE3LDcgKzEzNSwyMCBAQCBjbGFz
cyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKICAgICBnbDo6QXR0cmli
QXJyYXk8QnVmZmVySG9sZGVyTXRsICo+IG1DdXJyZW50QXJyYXlCdWZmZXJzOwogICAgIGdsOjpB
dHRyaWJBcnJheTxTaW1wbGVXZWFrQnVmZmVySG9sZGVyTXRsPiBtQ29udmVydGVkQXJyYXlCdWZm
ZXJIb2xkZXJzOwogICAgIGdsOjpBdHRyaWJBcnJheTxzaXplX3Q+IG1DdXJyZW50QXJyYXlCdWZm
ZXJPZmZzZXRzOworCisgICAgLy8gU2l6ZSB0byBiZSB1cGxvYWRlZCBhcyBpbmxpbmUgY29uc3Rh
bnQgZGF0YS4gVXNlZCBmb3IgY2xpZW50IHZlcnRleCBhdHRyaWJ1dGUncyBkYXRhIHRoYXQKKyAg
ICAvLyBpcyBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBjYW4gc2VuZCBkaXJlY3RseSBhcyBpbmxpbmUg
Y29uc3RhbnQgZGF0YSBpbnN0ZWFkIG9mIHN0cmVhbWluZworICAgIC8vIHRocm91Z2ggYSBidWZm
ZXIuCisgICAgZ2w6OkF0dHJpYkFycmF5PHNpemVfdD4gbUN1cnJlbnRBcnJheUlubGluZURhdGFT
aXplczsKKyAgICAvLyBBcnJheSBvZiBob3N0IGJ1ZmZlcnMgc3RvcmluZyBjb252ZXJ0ZWQgZGF0
YSBmb3IgY2xpZW50IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc21hbGwgZW5vdWdoLgorICAgIGdsOjpB
dHRyaWJBcnJheTxhbmdsZTo6TWVtb3J5QnVmZmVyPiBtQ29udmVydGVkQ2xpZW50U21hbGxBcnJh
eXM7CisgICAgZ2w6OkF0dHJpYkFycmF5PGNvbnN0IHVpbnQ4X3QgKj4gbUN1cnJlbnRBcnJheUlu
bGluZURhdGFQb2ludGVyczsKKyAgICAvLyBNYXggc2l6ZSBvZiBpbmxpbmUgY29uc3RhbnQgZGF0
YSB0aGF0IGNhbiBiZSB1c2VkIGZvciBjbGllbnQgdmVydGV4IGF0dHJpYnV0ZS4KKyAgICBzaXpl
X3QgbUlubGluZURhdGFNYXhTaXplOworCisgICAgLy8gU3RyaWRlIHBlciB2ZXJ0ZXggYXR0cmli
dXRlCiAgICAgZ2w6OkF0dHJpYkFycmF5PEdMdWludD4gbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlk
ZXM7CisgICAgLy8gRm9ybWF0IHBlciB2ZXJ0ZXggYXR0cmlidXRlCiAgICAgZ2w6OkF0dHJpYkFy
cmF5PGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICo+IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRz
OwogCiAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJm1EZWZhdWx0RmxvYXRWZXJ0ZXhGb3Jt
YXQ7CkBAIC0xMjcsNiArMTU4LDggQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVy
dGV4QXJyYXlJbXBsCiAgICAgbXRsOjpCdWZmZXJQb29sIG1EeW5hbWljVmVydGV4RGF0YTsKICAg
ICBtdGw6OkJ1ZmZlclBvb2wgbUR5bmFtaWNJbmRleERhdGE7CiAKKyAgICBzdGQ6OnZlY3Rvcjx1
aW50MzJfdD4gbUVtdWxhdGVkSW5zdGFuY2VBdHRyaWJzOworCiAgICAgYm9vbCBtVmVydGV4QXJy
YXlEaXJ0eSA9IHRydWU7CiB9OwogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJy
YXlNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwubW0KaW5kZXggY2Q5NjFjMTgxOWQ4YWI3NzMxY2JiZGEyZjA1
NWVlOTRhZmIyYTdiNy4uMDIxOTVkODI2OTgyYTU5MWU0ODc5YzRkNzQ5MjY2YWQzMzY3ZjdhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1ZlcnRleEFycmF5TXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQpAQCAtOCw2ICs4LDkg
QEAKIC8vCiAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10
bC5oIgorCisjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oIgpAQCAtNzYsMTUgKzc5LDE1IEBAIGFuZ2xlOjpSZXN1bHQgU3RyZWFt
SW5kZXhEYXRhKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90ICpzb3VyY2VQb2ludGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpidWZmZXJPdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqYnVmZmVyT2Zmc2V0T3V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICppbmRleENvdW50T3V0KQogewogICAgIGR5bmFtaWNCdWZmZXIt
PnJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoY29udGV4dE10bCk7Ci0KICAgICBjb25zdCBzaXplX3Qg
YW1vdW50ID0gR2V0SW5kZXhDb252ZXJ0ZWRCdWZmZXJTaXplKGluZGV4VHlwZSwgaW5kZXhDb3Vu
dCk7CiAgICAgR0x1Ynl0ZSAqZHN0ICAgICAgICA9IG51bGxwdHI7Ci0KICAgICBBTkdMRV9UUlko
CiAgICAgICAgIGR5bmFtaWNCdWZmZXItPmFsbG9jYXRlKGNvbnRleHRNdGwsIGFtb3VudCwgJmRz
dCwgYnVmZmVyT3V0LCBidWZmZXJPZmZzZXRPdXQsIG51bGxwdHIpKTsKIApAQCAtMTIxLDYgKzEy
NCw3IEBAIGFuZ2xlOjpSZXN1bHQgU3RyZWFtSW5kZXhEYXRhKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCiAgICAgewogICAgICAgICBtZW1jcHkoZHN0LCBzb3VyY2VQb2ludGVyLCBhbW91bnQpOwog
ICAgIH0KKyAgICAqaW5kZXhDb3VudE91dCA9IGluZGV4Q291bnQ7CiAgICAgQU5HTEVfVFJZKGR5
bmFtaWNCdWZmZXItPmNvbW1pdChjb250ZXh0TXRsKSk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CkBAIC0yMDgsNiArMjEyLDMwIEBAIHZvaWQgVmVydGV4QXJyYXlNdGw6
OnJlc2V0KENvbnRleHRNdGwgKmNvbnRleHQpCiAgICAgICAgIGZvcm1hdCA9ICZtRGVmYXVsdEZs
b2F0VmVydGV4Rm9ybWF0OwogICAgIH0KIAorICAgIGZvciAoc2l6ZV90ICZpbmxpbmVEYXRhU2l6
ZSA6IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXMpCisgICAgeworICAgICAgICBpbmxpbmVE
YXRhU2l6ZSA9IDA7CisgICAgfQorCisgICAgZm9yIChhbmdsZTo6TWVtb3J5QnVmZmVyICZjb252
ZXJ0ZWRDbGllbnRBcnJheSA6IG1Db252ZXJ0ZWRDbGllbnRTbWFsbEFycmF5cykKKyAgICB7Cisg
ICAgICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmNsZWFyKCk7CisgICAgfQorCisgICAgZm9yIChj
b25zdCB1aW50OF90IComY2xpZW50UG9pbnRlciA6IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9p
bnRlcnMpCisgICAgeworICAgICAgICBjbGllbnRQb2ludGVyID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAoY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFsbG93SW5saW5l
Q29uc3RWZXJ0ZXhEYXRhLmVuYWJsZWQpCisgICAgeworICAgICAgICBtSW5saW5lRGF0YU1heFNp
emUgPSBtdGw6OmtJbmxpbmVDb25zdERhdGFNYXhTaXplOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtSW5saW5lRGF0YU1heFNpemUgPSAwOworICAgIH0KKwogICAgIG1WZXJ0ZXhB
cnJheURpcnR5ID0gdHJ1ZTsKIH0KIApAQCAtMzE1LDIyICszNDMsMjggQEAgQU5HTEVfSU5MSU5F
IHZvaWQgVmVydGV4QXJyYXlNdGw6OmdldFZlcnRleEF0dHJpYkZvcm1hdEFuZEFycmF5U2l6ZShj
b25zdCBzaDo6U2gKIH0KIAogLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQg
b3V0cHV0LCB0aGUgaW5wdXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKLS8vIG10
bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gT3RoZXJ3aXNl
LCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlCi0vLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkK
Ky8vIG10bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhp
cyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKy8vIHByb2dyYW0gaXMgY2hh
bmdlZC4KKy8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZSB2ZXJ0ZXgg
YXJyYXkgaXMgZGlydHkuCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFu
Z2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VmVydGV4
RGVzYyAqdmVydGV4RGVzY091dCkKIHsKKyAgICAvLyBOT1RFKGhxbGUpOiBjb25zaWRlciBvbmx5
IHVwZGF0aW5nIGRpcnR5IGF0dHJpYnV0ZXMKICAgICBib29sIGRpcnR5ID0gbVZlcnRleEFycmF5
RGlydHkgfHwgKnZlcnRleERlc2NDaGFuZ2VkOwogCiAgICAgaWYgKGRpcnR5KQogICAgIHsKKyAg
ICAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOwor
CiAgICAgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gZmFsc2U7CisgICAgICAgIG1FbXVsYXRlZElu
c3RhbmNlQXR0cmlicy5jbGVhcigpOwogCi0gICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUg
JnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCktPmdldFN0
YXRlKCk7CisgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9
IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOwogICAgICAgICBj
b25zdCBnbDo6QXR0cmlidXRlc01hc2sgJnByb2dyYW1BY3RpdmVBdHRyaWJzTWFzayA9Ci0gICAg
ICAgICAgICBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbSgpLT5nZXRFeGVjdXRhYmxl
KCkuZ2V0QWN0aXZlQXR0cmliTG9jYXRpb25zTWFzaygpOworICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb25zTWFzaygpOworICAgICAgICBjb25zdCBnbDo6UHJv
Z3JhbVN0YXRlICZwcm9ncmFtU3RhdGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3Jh
bSgpLT5nZXRTdGF0ZSgpOwogCiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhB
dHRyaWJ1dGU+ICZhdHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEJpbmRpbmc+ICZiaW5kaW5ncyAgPSBtU3Rh
dGUuZ2V0VmVydGV4QmluZGluZ3MoKTsKQEAgLTM2MCw4ICszOTQsNyBAQCBhbmdsZTo6UmVzdWx0
IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
ICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nID0gYmluZGluZ3Nb
YXR0cmliLmJpbmRpbmdJbmRleF07CiAKICAgICAgICAgICAgIGJvb2wgYXR0cmliRW5hYmxlZCA9
IGF0dHJpYi5lbmFibGVkOwotICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYKLSAgICAg
ICAgICAgICAgICAoIW1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdIHx8ICFtQ3VycmVudEFycmF5QnVm
ZmVyc1t2XS0+Z2V0Q3VycmVudEJ1ZmZlcigpKSkKKyAgICAgICAgICAgIGlmIChhdHRyaWJFbmFi
bGVkICYmICFtQ3VycmVudEFycmF5QnVmZmVyc1t2XSAmJiAhbUN1cnJlbnRBcnJheUlubGluZURh
dGFQb2ludGVyc1t2XSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBEaXNhYmxl
IGl0IHRvIGF2b2lkIGNyYXNoLgogICAgICAgICAgICAgICAgIGF0dHJpYkVuYWJsZWQgPSBmYWxz
ZTsKQEAgLTM2OSwzMyArNDAyLDMwIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNl
dHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogCiAgICAgICAgICAgICBpZiAo
IWF0dHJpYkVuYWJsZWQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIGRl
ZmF1bHQgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZdLmJ1ZmZl
ckluZGV4ID0gbXRsOjprRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXg7CisgICAgICAgICAgICAg
ICAgZGVzYy5hdHRyaWJ1dGVzW3ZdLm9mZnNldCAgICAgID0gdiAqIG10bDo6a0RlZmF1bHRBdHRy
aWJ1dGVTaXplOwogICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmluZCB0aGUgYXR0cmlidXRl
IGhhdmluZyB0aGUgZXhhY3QgYmluZGluZyBsb2NhdGlvbiA9IHYgaW4gdGhlIHByb2dyYW0KICAg
ICAgICAgICAgICAgICAvLyBpbnB1dHMgbGlzdCB0byByZXRyaWV2ZSBpdHMgY29yZXNwb25kaW5n
IGRhdGEgdHlwZToKICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaDo6U2hhZGVy
VmFyaWFibGU+ICZwcm9ncmFtSW5wdXRzID0KICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbVN0
YXRlLmdldFByb2dyYW1JbnB1dHMoKTsKICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+Ojpjb25zdF9pdGVyYXRvciBhdHRyaWJJbmZvSXRlID0gc3RkOjpmaW5k
X2lmKAogICAgICAgICAgICAgICAgICAgICBiZWdpbihwcm9ncmFtSW5wdXRzKSwgZW5kKHByb2dy
YW1JbnB1dHMpLCBbdl0oY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZzdikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikg
PT0gdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oc3YubG9jYXRpb24pIDw9IHYgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
IDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN2LmxvY2F0aW9uKSArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmFyaWFibGVBdHRyaWJ1dGVDb3VudChzdi50eXBl
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmli
SW5mb0l0ZSA9PSBlbmQocHJvZ3JhbUlucHV0cykpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvLyBNb3N0IGxpa2VseSB0aGlzIGlzIGFycmF5IGVsZW1lbnQgd2l0aCBp
bmRleCA+IDAuCi0gICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZCB3aGVuIGVu
Y291bnRlciBmaXJzdCBlbGVtZW50LgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheVNpemU7Ci0g
ICAgICAgICAgICAgICAgTVRMVmVydGV4Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgICAgICAgICAg
IGdldFZlcnRleEF0dHJpYkZvcm1hdEFuZEFycmF5U2l6ZSgqYXR0cmliSW5mb0l0ZSwgJmZvcm1h
dCwgJmFycmF5U2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IHZhSWR4ID0g
djsgdmFJZHggPCB2ICsgYXJyYXlTaXplOyArK3ZhSWR4KQorICAgICAgICAgICAgICAgIEFTU0VS
VChhdHRyaWJJbmZvSXRlICE9IGVuZChwcm9ncmFtSW5wdXRzKSk7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChnbDo6VmFyaWFibGVDb21wb25lbnRUeXBlKGF0dHJpYkluZm9JdGUtPnR5cGUpKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3Zh
SWR4XS5idWZmZXJJbmRleCA9IG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4OwotICAg
ICAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdmFJZHhdLm9mZnNldCAgICAgID0gdmFJ
ZHggKiBtdGw6OmtEZWZhdWx0QXR0cmlidXRlU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
Yy5hdHRyaWJ1dGVzW3ZhSWR4XS5mb3JtYXQgICAgICA9IGZvcm1hdDsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0
ZXNbdl0uZm9ybWF0ID0gbURlZmF1bHRJbnRWZXJ0ZXhGb3JtYXQubWV0YWxGb3JtYXQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdl0u
Zm9ybWF0ID0gbURlZmF1bHRVSW50VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0OworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZXNjLmF0dHJpYnV0ZXNbdl0uZm9ybWF0ID0gbURlZmF1bHRG
bG9hdFZlcnRleEZvcm1hdC5tZXRhbEZvcm1hdDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC00MTcsMTcgKzQ0NywzNSBAQCBhbmdsZTo6UmVz
dWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0
aW9uID0gTVRMVmVydGV4U3RlcEZ1bmN0aW9uUGVyVmVydGV4OwogICAgICAgICAgICAgICAgICAg
ICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwUmF0ZSAgICAgPSAxOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29u
dGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5j
ZWREcmF3LmVuYWJsZWQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBk
ZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rp
b25QZXJJbnN0YW5jZTsKICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklk
eF0uc3RlcFJhdGUgICAgID0gYmluZGluZy5nZXREaXZpc29yKCk7CiAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEVtdWxhdGUgaW5zdGFuY2UgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAg
IG1FbXVsYXRlZEluc3RhbmNlQXR0cmlicy5wdXNoX2JhY2sodik7CisgICAgICAgICAgICAgICAg
ICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBGdW5jdGlvbiA9IE1UTFZlcnRleFN0ZXBG
dW5jdGlvbkNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVy
SWR4XS5zdGVwUmF0ZSAgICAgPSAwOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
ICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0cmlkZSA9IG1DdXJyZW50QXJyYXlCdWZmZXJT
dHJpZGVzW3ZdOwogCi0gICAgICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4QnVmZmVy
KG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVmZmVyKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCwgYnVmZmVySWR4
KTsKKyAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0pCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRWZXJ0ZXhCdWZm
ZXIobUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCwgYnVm
ZmVySWR4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gYnVmZmVyIHNwZWNpZmllZCwg
dXNlIHRoZSBjbGllbnQgbWVtb3J5IGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRhCisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW3Zd
IDw9IG1JbmxpbmVEYXRhTWF4U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGNtZEVuY29kZXIt
PnNldFZlcnRleEJ5dGVzKG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbdl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJ
bmxpbmVEYXRhU2l6ZXNbdl0sIGJ1ZmZlcklkeCk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIH0gIC8vIGZvciAodikKICAgICB9CiAKICAgICAq
dmVydGV4RGVzY0NoYW5nZWQgPSBkaXJ0eTsKQEAgLTQzNSw2ICs0ODMsNDIgQEAgYW5nbGU6OlJl
c3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCit2b2lkIFZlcnRl
eEFycmF5TXRsOjplbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgaW5zdGFuY2VJZCkKK3sKKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpWZXJ0ZXhBdHRyaWJ1dGU+ICZhdHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMo
KTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QmluZGluZz4gJmJpbmRpbmdzICA9
IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOworCisgICAgZm9yICh1aW50MzJfdCBpbnN0YW5j
ZUF0dHJpYklkeCA6IG1FbXVsYXRlZEluc3RhbmNlQXR0cmlicykKKyAgICB7CisgICAgICAgIHVp
bnQzMl90IGJ1ZmZlcklkeCAgICAgICAgICAgICAgID0gbXRsOjprVmJvQmluZGluZ0luZGV4U3Rh
cnQgKyBpbnN0YW5jZUF0dHJpYklkeDsKKyAgICAgICAgY29uc3QgYXV0byAmYXR0cmliICAgICAg
ICAgICAgICAgPSBhdHRyaWJzW2luc3RhbmNlQXR0cmliSWR4XTsKKyAgICAgICAgY29uc3QgZ2w6
OlZlcnRleEJpbmRpbmcgJmJpbmRpbmcgPSBiaW5kaW5nc1thdHRyaWIuYmluZGluZ0luZGV4XTsK
KyAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0KKyAgICAgICAgICAgIGluc3RhbmNlSWQgLyBiaW5k
aW5nLmdldERpdmlzb3IoKSAqIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2luc3RhbmNlQXR0
cmliSWR4XTsKKyAgICAgICAgaWYgKG1DdXJyZW50QXJyYXlCdWZmZXJzW2luc3RhbmNlQXR0cmli
SWR4XSkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ICs9IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1tpbnN0YW5jZUF0dHJpYklkeF0pOworCisg
ICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRWZXJ0ZXhCdWZmZXIobUN1cnJlbnRBcnJheUJ1ZmZl
cnNbaW5zdGFuY2VBdHRyaWJJZHhdLT5nZXRDdXJyZW50QnVmZmVyKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm8gYnVmZmVyIHNwZWNp
ZmllZCwgdXNlIHRoZSBjbGllbnQgbWVtb3J5IGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBk
YXRhCisgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tpbnN0
YW5jZUF0dHJpYklkeF0gPD0gbUlubGluZURhdGFNYXhTaXplKTsKKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tpbnN0YW5jZUF0dHJpYklkeF0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1
cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVyc1tpbnN0YW5jZUF0dHJpYklkeF0gKyBvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5s
aW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSAtIG9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkeCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnVwZGF0ZUNsaWVudEF0dHJpYnMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0VmVydGV4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHZlcnRleE9ySW5kZXhDb3Vu
dCwKQEAgLTQ2MywxMCArNTQ3LDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBk
YXRlQ2xpZW50QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgY29u
c3QgZ2w6OlZlcnRleEJpbmRpbmcgJmJpbmRpbmcgID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJ
bmRleF07CiAgICAgICAgIEFTU0VSVChhdHRyaWIuZW5hYmxlZCAmJiBiaW5kaW5nLmdldEJ1ZmZl
cigpLmdldCgpID09IG51bGxwdHIpOwogCi0gICAgICAgIEdMdWludCBzdHJpZGU7Ci0gICAgICAg
IGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQgPQotICAgICAgICAgICAgR2V0
VmVydGV4Q29udmVyc2lvbkZvcm1hdChjb250ZXh0TXRsLCBhdHRyaWIuZm9ybWF0LT5pZCwgJnN0
cmlkZSk7Ci0KKyAgICAgICAgLy8gU291cmNlIGNsaWVudCBtZW1vcnkgcG9pbnRlcgogICAgICAg
ICBjb25zdCB1aW50OF90ICpzcmMgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KGF0dHJp
Yi5wb2ludGVyKTsKICAgICAgICAgQVNTRVJUKHNyYyk7CiAKQEAgLTQ4NCwyMiArNTY1LDc2IEBA
IGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnVwZGF0ZUNsaWVudEF0dHJpYnMoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICBzdGFydEVsZW1lbnQgPSAwOwogICAg
ICAgICAgICAgZWxlbWVudENvdW50ID0gVW5zaWduZWRDZWlsRGl2aWRlKGluc3RhbmNlQ291bnQs
IGJpbmRpbmcuZ2V0RGl2aXNvcigpKTsKICAgICAgICAgfQotICAgICAgICAvLyBBbGxvY2F0ZSBz
cGFjZSBmb3Igc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50IHNvIGluZGV4aW5nIHdpbGwgd29y
ay4gIElmIHdlIGRvbid0Ci0gICAgICAgIC8vIHN0YXJ0IGF0IHplcm8gYWxsIHRoZSBpbmRpY2Vz
IHdpbGwgYmUgb2ZmLgotICAgICAgICAvLyBPbmx5IGVsZW1lbnRDb3VudCB2ZXJ0aWNlcyB3aWxs
IGJlIHVzZWQgYnkgdGhlIHVwY29taW5nIGRyYXcgc28gdGhhdCBpcyBhbGwgd2UgY29weS4KLSAg
ICAgICAgc2l6ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291
bnQpICogc3RyaWRlOwotICAgICAgICBzcmMgKz0gc3RhcnRFbGVtZW50ICogYmluZGluZy5nZXRT
dHJpZGUoKTsKLSAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQgKiBzdHJp
ZGU7Ci0KLSAgICAgICAgbUR5bmFtaWNWZXJ0ZXhEYXRhLnVwZGF0ZUFsaWdubWVudChjb250ZXh0
TXRsLCB2ZXJ0ZXhGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5waXhlbEJ5dGVzKTsKLSAgICAg
ICAgQU5HTEVfVFJZKFN0cmVhbVZlcnRleERhdGEoCi0gICAgICAgICAgICBjb250ZXh0TXRsLCAm
bUR5bmFtaWNWZXJ0ZXhEYXRhLCBzcmMsIGJ5dGVzVG9BbGxvY2F0ZSwgZGVzdE9mZnNldCwgZWxl
bWVudENvdW50LAotICAgICAgICAgICAgYmluZGluZy5nZXRTdHJpZGUoKSwgdmVydGV4Rm9ybWF0
LnZlcnRleExvYWRGdW5jdGlvbiwKLSAgICAgICAgICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJI
b2xkZXJzW2F0dHJpYkluZGV4XSwgJm1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYklu
ZGV4XSkpOworICAgICAgICBzaXplX3QgYnl0ZXNJbnRlbmRlZFRvVXNlID0gKHN0YXJ0RWxlbWVu
dCArIGVsZW1lbnRDb3VudCkgKiBiaW5kaW5nLmdldFN0cmlkZSgpOwogCi0gICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJzW2F0dHJpYkluZGV4XSAgICAgICA9ICZtQ29udmVydGVkQXJyYXlCdWZm
ZXJIb2xkZXJzW2F0dHJpYkluZGV4XTsKLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlckZvcm1h
dHNbYXR0cmliSW5kZXhdID0gJnZlcnRleEZvcm1hdDsKLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1
ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gc3RyaWRlOworICAgICAgICBjb25zdCBtdGw6OlZl
cnRleEZvcm1hdCAmZm9ybWF0ID0gY29udGV4dE10bC0+Z2V0VmVydGV4Rm9ybWF0KGF0dHJpYi5m
b3JtYXQtPmlkLCBmYWxzZSk7CisgICAgICAgIGJvb2wgbmVlZFN0cmVhbWluZyAgICAgICAgICAg
ICAgPSBmb3JtYXQuYWN0dWFsRm9ybWF0SWQgIT0gZm9ybWF0LmludGVuZGVkRm9ybWF0SWQgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3RyaWRlKCkgJSBtdGw6
OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDAgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFsQW5n
bGVGb3JtYXQoKS5waXhlbEJ5dGVzKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
eXRlc0ludGVuZGVkVG9Vc2UgPiBtSW5saW5lRGF0YU1heFNpemU7CisKKyAgICAgICAgaWYgKCFu
ZWVkU3RyZWFtaW5nKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEYXRhIHdpbGwgYmUgdXBs
b2FkZWQgZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEKKyAgICAgICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJzW2F0dHJpYkluZGV4XSAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbYXR0cmliSW5kZXhdID0gc3Jj
OworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1thdHRyaWJJbmRleF0g
ICAgPSBieXRlc0ludGVuZGVkVG9Vc2U7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVy
T2Zmc2V0c1thdHRyaWJJbmRleF0gICAgICA9IDA7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5
QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRleF0gICAgICA9ICZmb3JtYXQ7CisgICAgICAgICAgICBt
Q3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gICAgICA9IGJpbmRpbmcuZ2V0
U3RyaWRlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBHTHVpbnQgY29udmVydGVkU3RyaWRlOworICAgICAgICAgICAgLy8gTmVlZCB0byBzdHJlYW0g
dGhlIGNsaWVudCB2ZXJ0ZXggZGF0YSB0byBhIGJ1ZmZlci4KKyAgICAgICAgICAgIGNvbnN0IG10
bDo6VmVydGV4Rm9ybWF0ICZzdHJlYW1Gb3JtYXQgPQorICAgICAgICAgICAgICAgIEdldFZlcnRl
eENvbnZlcnNpb25Gb3JtYXQoY29udGV4dE10bCwgYXR0cmliLmZvcm1hdC0+aWQsICZjb252ZXJ0
ZWRTdHJpZGUpOworCisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RhcnRFbGVt
ZW50ICsgZWxlbWVudENvdW50IHNvIGluZGV4aW5nIHdpbGwgd29yay4gIElmIHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyBzdGFydCBhdCB6ZXJvIGFsbCB0aGUgaW5kaWNlcyB3aWxsIGJlIG9mZi4K
KyAgICAgICAgICAgIC8vIE9ubHkgZWxlbWVudENvdW50IHZlcnRpY2VzIHdpbGwgYmUgdXNlZCBi
eSB0aGUgdXBjb21pbmcgZHJhdyBzbyB0aGF0IGlzIGFsbCB3ZSBjb3B5LgorICAgICAgICAgICAg
c2l6ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICog
Y29udmVydGVkU3RyaWRlOworICAgICAgICAgICAgc3JjICs9IHN0YXJ0RWxlbWVudCAqIGJpbmRp
bmcuZ2V0U3RyaWRlKCk7CisgICAgICAgICAgICBzaXplX3QgZGVzdE9mZnNldCA9IHN0YXJ0RWxl
bWVudCAqIGNvbnZlcnRlZFN0cmlkZTsKKworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZl
ckZvcm1hdHNbYXR0cmliSW5kZXhdID0gJnN0cmVhbUZvcm1hdDsKKyAgICAgICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJTdHJpZGVzW2F0dHJpYkluZGV4XSA9IGNvbnZlcnRlZFN0cmlkZTsKKwor
ICAgICAgICAgICAgaWYgKGJ5dGVzVG9BbGxvY2F0ZSA8PSBtSW5saW5lRGF0YU1heFNpemUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgc21hbGwgZW5v
dWdoLCB1c2UgaG9zdCBtZW1vcnkgaW5zdGVhZCBvZiBjcmVhdGluZyBHUFUgYnVmZmVyLiBUbwor
ICAgICAgICAgICAgICAgIC8vIGF2b2lkIHN5bmNocm9uaXppbmcgYWNjZXNzIHRvIEdQVSBidWZm
ZXIgdGhhdCBpcyBzdGlsbCBpbiB1c2UuCisgICAgICAgICAgICAgICAgYW5nbGU6Ok1lbW9yeUJ1
ZmZlciAmY29udmVydGVkQ2xpZW50QXJyYXkgPQorICAgICAgICAgICAgICAgICAgICBtQ29udmVy
dGVkQ2xpZW50U21hbGxBcnJheXNbYXR0cmliSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChi
eXRlc1RvQWxsb2NhdGUgPiBjb252ZXJ0ZWRDbGllbnRBcnJheS5zaXplKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBBTkdMRV9DSEVDS19HTF9BTExPQyhjb250ZXh0
TXRsLCBjb252ZXJ0ZWRDbGllbnRBcnJheS5yZXNpemUoYnl0ZXNUb0FsbG9jYXRlKSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cmVhbUZvcm1hdC52ZXJ0
ZXhMb2FkRnVuY3Rpb24pOworICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2Fk
RnVuY3Rpb24oc3JjLCBiaW5kaW5nLmdldFN0cmlkZSgpLCBlbGVtZW50Q291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRDbGllbnRB
cnJheS5kYXRhKCkgKyBkZXN0T2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIG1DdXJyZW50QXJy
YXlCdWZmZXJzW2F0dHJpYkluZGV4XSAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW2F0dHJpYkluZGV4XSA9IGNvbnZl
cnRlZENsaWVudEFycmF5LmRhdGEoKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5s
aW5lRGF0YVNpemVzW2F0dHJpYkluZGV4XSAgICA9IGJ5dGVzVG9BbGxvY2F0ZTsKKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1thdHRyaWJJbmRleF0gICAgICA9IDA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gU3RyZWFtIHRoZSBjbGllbnQgZGF0YSB0byBhIEdQVSBidWZmZXIuIFN5bmNo
cm9uaXphdGlvbiBtaWdodCBoYXBwZW4gaWYgYnVmZmVyIGlzCisgICAgICAgICAgICAgICAgLy8g
aW4gdXNlLgorICAgICAgICAgICAgICAgIG1EeW5hbWljVmVydGV4RGF0YS51cGRhdGVBbGlnbm1l
bnQoY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbUZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBpeGVsQnl0ZXMpOwor
ICAgICAgICAgICAgICAgIEFOR0xFX1RSWShTdHJlYW1WZXJ0ZXhEYXRhKGNvbnRleHRNdGwsICZt
RHluYW1pY1ZlcnRleERhdGEsIHNyYywgYnl0ZXNUb0FsbG9jYXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwgYmlu
ZGluZy5nZXRTdHJpZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJlYW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0
dHJpYkluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdKSk7CisKKyAgICAgICAgICAg
ICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gPSAmbUNvbnZlcnRlZEFycmF5
QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0gIC8v
IGlmIChuZWVkU3RyZWFtaW5nKQogICAgIH0KIAogICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1
ZTsKQEAgLTUyNiw3ICs2NjEsNyBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzeW5j
RGlydHlBdHRyaWIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPQogICAgICAgICAgICAgICAgIGZvcm1hdC5hY3R1YWxGb3JtYXRJ
ZCAhPSBmb3JtYXQuaW50ZW5kZWRGb3JtYXRJZCB8fAogICAgICAgICAgICAgICAgIChiaW5kaW5n
LmdldE9mZnNldCgpICUgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgIT0g
MCB8fAotICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldE9mZnNldCgpICUgbXRsOjprVmVydGV4
QXR0cmliQnVmZmVyU3RyaWRlQWxpZ25tZW50KSAhPSAwIHx8CisgICAgICAgICAgICAgICAgKGJp
bmRpbmcuZ2V0T2Zmc2V0KCkgJSA0KSAhPSAwIHx8CiAgICAgICAgICAgICAgICAgKGJpbmRpbmcu
Z2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5waXhlbEJ5dGVzKSB8fAog
ICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpICUgbXRsOjprVmVydGV4QXR0cmli
QnVmZmVyU3RyaWRlQWxpZ25tZW50KSAhPSAwOwogCkBAIC01NjMsMTkgKzY5OCwyMSBAQCBhbmds
ZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzeW5jRGlydHlBdHRyaWIoY29uc3QgZ2w6OkNvbnRl
eHQgKmdsQ29udGV4dCwKIAogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhC
dWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUg
bW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSAqaW5kZXhUeXBlT3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJD
b3VudE91dCkKIHsKICAgICBjb25zdCBnbDo6QnVmZmVyICpnbEVsZW1lbnRBcnJheUJ1ZmZlciA9
IGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CiAKICAgICBzaXplX3QgY29udmVy
dGVkT2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KGluZGljZXMpOwogICAgIGlmICgh
Z2xFbGVtZW50QXJyYXlCdWZmZXIpCiAgICAgewotICAgICAgICBBTkdMRV9UUlkoc3RyZWFtSW5k
ZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUsIGNvdW50LCBpbmRpY2VzLCBpZHhCdWZm
ZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4
QnVmZmVyT2Zmc2V0T3V0KSk7CisgICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1ZmZlckZy
b21DbGllbnQoY29udGV4dCwgdHlwZSwgbW9kZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhCdWZm
ZXJPZmZzZXRPdXQsIGluZGV4QnVmZmVyQ291bnRPdXQpKTsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKQEAgLTU4Myw4ICs3MjAsOCBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpnZXRJ
bmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb252ZXJ0ZWRPZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFs
aWdubWVudCkgIT0gMDsKICAgICAgICAgaWYgKG5lZWRDb252ZXJzaW9uKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIGNv
bnZlcnRlZE9mZnNldCwgaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQpKTsKKyAgICAgICAgICAgIEFOR0xFX1RS
WShjb252ZXJ0SW5kZXhCdWZmZXIoY29udGV4dCwgdHlwZSwgbW9kZSwgY29udmVydGVkT2Zmc2V0
LCBpZHhCdWZmZXJPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtNTkyLDYgKzcyOSw3IEBAIGFuZ2xlOjpSZXN1bHQg
VmVydGV4QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogICAgICAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwoZ2xFbGVt
ZW50QXJyYXlCdWZmZXIpOwogICAgICAgICAgICAgKmlkeEJ1ZmZlck91dCAgICAgICAgPSBidWZm
ZXJNdGwtPmdldEN1cnJlbnRCdWZmZXIoKTsKICAgICAgICAgICAgICppZHhCdWZmZXJPZmZzZXRP
dXQgID0gY29udmVydGVkT2Zmc2V0OworICAgICAgICAgICAgKmluZGV4QnVmZmVyQ291bnRPdXQg
PSBjb3VudDsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjA3LDkgKzc0NSwxMSBAQCBhbmdsZTo6
UmVzdWx0IFZlcnRleEFycmF5TXRsOjpnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKIAogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQ
cmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyT2Zmc2V0T3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJDb3VudE91dCkK
IHsKICAgICBzaXplX3Qgb2Zmc2V0TW9kdWxvID0gb2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQ7CiAgICAgQVNTRVJUKG9mZnNldE1vZHVsbyAhPSAwIHx8IGluZGV4VHlw
ZSA9PSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRCeXRlKTsKQEAgLTYzOCwxNSArNzc4
LDE1IEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRJbmRleEJ1ZmZlcihj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIH0KIAogICAgIHNpemVfdCBpbmRleENv
dW50ID0gR2V0SW5kZXhDb3VudChpZHhCdWZmZXIsIG9mZnNldE1vZHVsbywgaW5kZXhUeXBlKTsK
LQotICAgIGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0No
ZWFwUmVuZGVyUGFzcy5lbmFibGVkICYmCi0gICAgICAgIGNvbnRleHRNdGwtPmdldFJlbmRlckNv
bW1hbmRFbmNvZGVyKCkpCisgICAgaWYgKCghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRG
ZWF0dXJlcygpLmJyZWFrUmVuZGVyUGFzc0lzQ2hlYXAuZW5hYmxlZCAmJgorICAgICAgICAgY29u
dGV4dE10bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkpCiAgICAgewogICAgICAgICAvLyBX
ZSBzaG91bGRuJ3QgdXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9m
IGEgcmVuZGVyIHBhc3MuCiAgICAgICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4
dE10bCwgJmNvbnZlcnNpb24tPmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWR4QnVmZmVyLT5nZXRDbGllbnRTaGFkb3dDb3B5RGF0YShjb250ZXh0TXRsKSArIG9mZnNl
dE1vZHVsbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGUsIGlu
ZGV4Q291bnQsIGdsU3RhdGUuaXNQcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIsICZj
b252ZXJzaW9uLT5jb252ZXJ0ZWRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleFR5cGUsIGluZGV4Q291bnQsIG1vZGUsIGdsU3RhdGUuaXNQcmltaXRpdmVS
ZXN0YXJ0RW5hYmxlZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252
ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIsICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJDb3VudE91dCkpOwog
ICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNjk1LDE4ICs4MzUsMjAgQEAgYW5nbGU6OlJlc3Vs
dCBWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVmZmVyR1BVKGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQKIAogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhC
dWZmZXJGcm9tQ2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBp
bmRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYg
KmlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlk
eEJ1ZmZlck9mZnNldE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlckNvdW50T3V0KQogewogICAgIEFT
U0VSVChnZXRTdGF0ZSgpLmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpID09IG51bGxwdHIpOwogICAg
IENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CiAKICAgICBh
dXRvIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KHNvdXJjZVBvaW50ZXIp
OwotICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJm1EeW5hbWljSW5k
ZXhEYXRhLCBzcmNEYXRhLCBpbmRleFR5cGUsIGluZGV4Q291bnQsCisgICAgQU5HTEVfVFJZKFN0
cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0RhdGEsIGlu
ZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldFN0YXRlKCkuaXNQcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCgpLCBpZHhCdWZm
ZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaWR4
QnVmZmVyQ291bnRPdXQpKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KQEAgLTc0NCw3ICs4ODYsNiBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252
ZXJ0VmVydGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgLy8gSGFz
IHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBjb252ZXJz
aW9uPwogICAgIGlmICghY29udmVyc2lvbi0+ZGlydHkpCiAgICAgewotICAgICAgICAvLyBCdWZm
ZXIncyBkYXRhIGhhc24ndCBiZWVuIGNoYW5nZWQuIFJlLXVzZSBsYXN0IGNvbnZlcnRlZCByZXN1
bHRzCiAgICAgICAgIG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdLnNl
dChjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIpOwogICAgICAgICBtQ3VycmVudEFycmF5QnVm
ZmVyT2Zmc2V0c1thdHRyaWJJbmRleF0gPSBjb252ZXJzaW9uLT5jb252ZXJ0ZWRPZmZzZXQ7CiAK
QEAgLTc2MSw3ICs5MDIsNyBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252ZXJ0
VmVydGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgYm9vbCBjYW5F
eHBhbmRDb21wb25lbnRzT25HUFUgPSBjb252ZXJ0ZWRGb3JtYXQuYWN0dWFsU2FtZUdMVHlwZTsK
IAogICAgIGlmIChjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpICYmCi0gICAg
ICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5k
ZXJQYXNzLmVuYWJsZWQgJiYKKyAgICAgICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0
RmVhdHVyZXMoKS5icmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKICAgICAgICAgIWNv
bnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNFeHBsaWNpdE1lbUJhcnJp
ZXIuZW5hYmxlZCkKICAgICB7CiAgICAgICAgIC8vIENhbm5vdCB1c2UgR1BVIHRvIGNvbnZlcnQg
d2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KQEAgLTc5Miw2ICs5MzMs
OSBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252ZXJ0VmVydGV4QnVmZmVyKGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgY29udmVyc2lvbi0+Y29udmVydGVkQnVm
ZmVyID0gbUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF0uZ2V0Q3VycmVu
dEJ1ZmZlcigpOwogICAgIGNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCA9IG1DdXJyZW50QXJy
YXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XTsKIAorICAgIEFTU0VSVChjb252ZXJzaW9uLT5k
aXJ0eSk7CisgICAgY29udmVyc2lvbi0+ZGlydHkgPSBmYWxzZTsKKwogI2lmbmRlZiBOREVCVUcK
ICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKQEAgLTgwMSw5ICs5NDUsNiBAQCBhbmds
ZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpjb252ZXJ0VmVydGV4QnVmZmVyKGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlQoY29udmVyc2lv
bi0+ZGlydHkpOwotICAgIGNvbnZlcnNpb24tPmRpcnR5ID0gZmFsc2U7Ci0KICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0
YW5jZS5tZCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAppbmRleCBmYTA3M2FlNjIzZjljMTJlNzYx
OTIwYzVjYzgwYWRkY2VjNjM1ZWQyLi4xM2FmZGMzNGRhMWRhYjdmMDM3ZDA4YTU4OTA4NWU4YTVi
YTg1MjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kCkBAIC02LDYgKzYsMzEgQEAgbGV2ZWwgc2lkZS4gV3JpdGluZyB0byBgZ2xf
Q2xpcERpc3RhbmNlW2ldYCBpbiBzaGFkZXIgd2lsbCBiZSBpZ25vcmVkIGlmIGl0IGlzIGQKIGRv
ZXNuJ3QgaGF2ZSBhbnkgZXF1aXZhbGVudCBBUEkgdG8gZGlzYWJsZS9lbmFibGUgdGhlIHdyaXRp
bmcsIHRob3VnaCB3cml0aW5nIHRvIGEgYGNsaXBfZGlzdGFuY2VgCiB2YXJpYWJsZSBhdXRvbWF0
aWNhbGx5IGVuYWJsZXMgaXQuCiAKLVRvIGVtdWxhdGUgdGhpcyBlbmFibGluZy9kaXNhYmxpbmcg
QVBJLCB0aGUgTWV0YWwgYmFjay1lbmQgdXNlcyBhIHNpbWlsYXIgaW1wbGVtZW50YXRpb24gYXMg
d2hhdAotW1Z1bGthbiBiYWNrLWVuZCBkb2VzXSguLi8uLi92dWxrYW4vZG9jL0FQUExFX2NsaXBf
ZGlzdGFuY2UubWQpLiBQbGVhc2UgcmVmZXIgdG8gdGhhdCBkb2N1bWVudCBmb3IKLW1vcmUgZGV0
YWlscy4KK1RvIGltcGxlbWVudCB0aGlzIGVuYWJsaW5nL2Rpc2FibGluZyBBUEkgaW4gTWV0YWwg
YmFjay1lbmQ6CisKKy0gVGhlIHNoYWRlciBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSBlYWNoIGBn
bF9DbGlwRGlzdGFuY2VbaV1gIGFzc2lnbm1lbnQgdG8gYW4gYXNzaWdubWVudCB0bworICBgQU5H
TEVDbGlwRGlzdGFuY2VbaV1gIHZhcmlhYmxlLgorLSBBIHNwZWNpYWwgZHJpdmVyIHVuaWZvcm0g
dmFyaWFibGUgYGNsaXBEaXN0YW5jZXNFbmFibGVkYCB3aWxsIGNvbnRhaW4gb25lIGJpdCBmbGFn
IGZvciBlYWNoCisgIGVuYWJsZWQgYGdsX0NsaXBEaXN0YW5jZVtpXWAuIFRoaXMgdmFyaWFibGUg
c3VwcG9ydHMgdXAgdG8gMzIgYGdsX0NsaXBEaXN0YW5jZWAgaW5kaWNlcy4KKy0gQXQgdGhlIGVu
ZCBvZiB2ZXJ0ZXggc2hhZGVyLCB0aGUgZW5hYmxlZCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCB3aWxs
IGJlIGFzc2lnbmVkIHRoZSByZXNwZWN0aXZlCisgIHZhbHVlIGZyb20gYEFOR0xFQ2xpcERpc3Rh
bmNlW2ldYC4gT24gdGhlIG90aGVyIGhhbmQsIHRob3NlIGRpc2FibGVkIGVsZW1lbnRzIHdpbGwg
YmUgYXNzaWduZWQKKyAgemVybyB2YWx1ZS4gVGhpcyBzdGVwIGlzIGRlc2NyaWJlZCBpbiB0aGUg
Zm9sbG93aW5nIGNvZGU6CisgICAgYGBgCisgICAgZm9yIChpbnQgaW5kZXggOiBhcnJheWxlbmd0
aChnbF9DbGlwRGlzdGFuY2UpKQorICAgIHsKKyAgICAgICAgaWYgKEFOR0xFVW5pZm9ybXMuY2xp
cERpc3RhbmNlc0VuYWJsZWQgJiAoMHgxIDw8IGluZGV4KSkKKyAgICAgICAgICAgIGdsX0NsaXBE
aXN0YW5jZVtpbmRleF0gPSBBTkdMRUNsaXBEaXN0YW5jZVtpbmRleF07CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdsX0NsaXBEaXN0YW5jZVtpbmRleF0gPSAwOworICAgIH0KKyAgICBgYGAK
Ky0gU29tZSBtaW5vciBvcHRpbWl6YXRpb25zOgorICAgIC0gT25seSB0aG9zZSBpbmRpY2VzIHRo
YXQgYXJlIHJlZmVyZW5jZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUgd2lsbCBiZSB1c2VkIGluIGlm
IGVsc2UgYmxvY2sKKyAgICAgIGFib3ZlLgorICAgIC0gVGhvc2UgZWxlbWVudHMgd2hvc2UgaW5k
ZXggbm90IHJlZmVyZW5jZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUgd2lsbCBiZSB6ZXJvaXNlZCBp
bnN0ZWFkLgorICAgIC0gSWYgdGhlIG9yaWdpbmFsIGNvZGUgb25seSB1c2VzIHVwIHRvIGFuIGlu
ZGV4IDwgYGdsX01heENsaXBEaXN0YW5jZXNgLCB0aGVuCisgICAgICB0aGUgbG9vcCB3aWxsIGhh
dmUgYXQgbW9zdCBgaW5kZXgrMWAgaXRlcmF0aW9ucy4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25l
IGluZGV4IG5vdCBiZWluZworICAgICAgaW50ZWdyYWwgY29uc3RhbnQgdmFsdWUga25vd24gYXQg
Y29tcGlsZSB0aW1lIHRoZW4gZGVjbGFyZWQgc2l6ZSBvZiBgZ2xfQ2xpcERpc3RhbmNlYAorICAg
ICAgd2lsbCBiZSB0aGUgbG9vcCBzaXplLgorICAgIC0gRmluYWxseSwgaWYgdGhlIG9yaWdpbmFs
IGNvZGUgZG9lc24ndCB1c2UgYGdsX0NsaXBEaXN0YW5jZWAsIHRoZW4gYWxsIHRoZSBzdGVwcyBh
Ym92ZSB3aWxsIGJlCisgICAgICBvbWl0dGVkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weQppbmRl
eCAzY2UxNDJlNTZjNmY2MmEwOTA0OGM1OWNiZmFlOWQ0Y2Y5OTc3M2EzLi44ODhiNzlmOTc0NTk4
ZTA4ZmQ2Njk3NDlmNzlmZTM0ODVlMDEyZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUu
cHkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL2dlbl9tdGxfZm9ybWF0X3RhYmxlLnB5CkBAIC0zNyw2ICszNyw3IEBAIHRlbXBsYXRlX2F1
dG9nZW5faW5sID0gIiIiLy8gR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVC4KICNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9Gb3JtYXQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9EaXNwbGF5TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF91dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF91dGlscy5oIgogCiB1c2luZyBuYW1lc3BhY2UgYW5nbGU7CiAKQEAgLTQ4LDcgKzQ5LDYgQEAg
bmFtZXNwYWNlIG10bAogdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxh
eSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQoge3sKICAgICB0aGlzLT5pbnRl
bmRlZEZvcm1hdElkID0gaW50ZW5kZWRGb3JtYXRJZF87Ci0KICAgICBpZDxNVExEZXZpY2U+IG1l
dGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2UoKTsKIAogICAgIC8vIEFjdHVhbCBj
b252ZXJzaW9uCkBAIC0xMDksNiArMTA5LDIzIEBAIGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxh
dGUyID0gIiIiCiAgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVu
Y3Rpb25fZmFsbGJhY2t9OwogICAgICAgICAgICAgfX0KICIiIgorI0QxNiBpcyBmdWxseSBzdXBw
b3J0ZWQgb24gIEFwcGxlMysuIEhvd2V2ZXIsIG9uCisjcHJldmlvdXMgIHZlcnNpb25zIG9mIEFw
cGxlIGhhcmR3YXJlLCBzb21lIG9wZXJhdGlvbnMgY2FuIGNhdXNlCisjdW5kZWZpbmVkIGJlaGF2
aW9yLgoraW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTMgPSAiIiIKKyAgICAgICAgICAgIGlm
IChtdGw6OlN1cHBvcnRzSU9TR1BVRmFtaWx5KG1ldGFsRGV2aWNlLCAzKSkKKyAgICAgICAgICAg
IHt7CisgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgPSB7bXRsX2Zvcm1hdH07Cisg
ICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6Onth
Y3R1YWxfYW5nbGVfZm9ybWF0fTsKKyAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24g
PSB7aW5pdF9mdW5jdGlvbn07CisgICAgICAgICAgICB9fQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAge3sKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9IHttdGxfZm9y
bWF0X2ZhbGxiYWNrfTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFu
Z2xlOjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2t9OworICAgICAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9uX2ZhbGxiYWNrfTsKKyAg
ICAgICAgICAgIH19CisiIiIKIAogY2FzZV9pbWFnZV9mb3JtYXRfdGVtcGxhdGUxID0gIiIiICAg
ICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6e2FuZ2xlX2Zvcm1hdH06CiAgICAgICAgICAgICB7
aW1hZ2VfZm9ybWF0X2Fzc2lnbn0KQEAgLTIxMyw2ICsyMzAsOCBAQCBkZWYgZ2V0X3ZlcnRleF9j
b3B5X2Z1bmN0aW9uX2FuZF9kZWZhdWx0X2FscGhhKHNyY19mb3JtYXQsIGRzdF9mb3JtYXQpOgog
CiAKICMgR2VuZXJhdGUgZm9ybWF0IGNvbnZlcnNpb24gc3dpdGNoIGNhc2UgKGdlbmVyaWMgY2Fz
ZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVh
bF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfdG9fbXRsX21hcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzc2lnbl9nZW5fZnVuYyk6CiAgICAgaWYgaXNpbnN0YW5jZShhY3R1YWxf
YW5nbGVfZm9ybWF0X2luZm8sIGRpY3QpOgpAQCAtMjU1LDYgKzI3NCw4IEBAIGRlZiBnZW5faW1h
Z2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZv
LCBhbmdsZV90b19tCiAKIAogIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2Fz
ZSAoc2ltcGxlIGNhc2UpCisKKwogZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNl
KGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19tdGxfbWFwKToKIApA
QCAtMjcwLDYgKzI5MSw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zaW1wbGVfY2FzZShh
bmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nCiAKIAogIyBHZW5lcmF0
ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2FzZSAoTWFjIGNhc2UpCisKKwogZGVmIGdlbl9p
bWFnZV9tYXBfc3dpdGNoX21hY19jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1h
dF9pbmZvLCBhbmdsZV90b19nbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmdsZV90b19tdGxfbWFwLCBtYWNfZmFsbGJhY2tzKToKICAgICBnbF9mb3JtYXQgPSBhbmdsZV90
b19nbFthbmdsZV9mb3JtYXRdCkBAIC0zMDEsMTEgKzMyNCw0MyBAQCBkZWYgZ2VuX2ltYWdlX21h
cF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8s
IGFuZ2xlXwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9mb3JtYXRf
YXNzaWduX2NvZGUpCiAKIAorZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19tdGxfbWFwLCBpb3NfZmFsbGJhY2tz
KToKKyAgICBnbF9mb3JtYXQgPSBhbmdsZV90b19nbFthbmdsZV9mb3JtYXRdCisKKyAgICBkZWYg
Z2VuX2Zvcm1hdF9hc3NpZ25fY29kZShhY3R1YWxfYW5nbGVfZm9ybWF0LCBhbmdsZV90b19tdGxf
bWFwKToKKyAgICAgICAgaWYgYWN0dWFsX2FuZ2xlX2Zvcm1hdCBpbiBpb3NfZmFsbGJhY2tzOgor
ICAgICAgICAgICAgIyBUaGlzIGZvcm1hdCAoRGVwdGgxNlVuaWZvcm0pIHJlcXVpcmVzIGZhbGxi
YWNrIHdoZW4gaU9TIGhhcmR3YXJlIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgZGVwdGgxNi4KKyAg
ICAgICAgICAgICMgRmFsbGJhY2sgZm9ybWF0OgorICAgICAgICAgICAgYWN0dWFsX2FuZ2xlX2Zv
cm1hdF9mYWxsYmFjayA9IGlvc19mYWxsYmFja3NbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0KKyAgICAg
ICAgICAgICMgcmV0dXJuIGlmIGVsc2UgYmxvY2s6CisgICAgICAgICAgICByZXR1cm4gaW1hZ2Vf
Zm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTMuZm9ybWF0KAorICAgICAgICAgICAgICAgIGFjdHVhbF9h
bmdsZV9mb3JtYXQ9YWN0dWFsX2FuZ2xlX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICBtdGxfZm9y
bWF0PWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0sCisgICAgICAgICAgICAg
ICAgaW5pdF9mdW5jdGlvbj1hbmdsZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9p
bml0aWFsaXplcigKKyAgICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVf
Zm9ybWF0KSwKKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrPWFj
dHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2ssCisgICAgICAgICAgICAgICAgbXRsX2Zvcm1hdF9m
YWxsYmFjaz1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2tdLAor
ICAgICAgICAgICAgICAgIGluaXRfZnVuY3Rpb25fZmFsbGJhY2s9YW5nbGVfZm9ybWF0X3V0aWxz
LmdldF9pbnRlcm5hbF9mb3JtYXRfaW5pdGlhbGl6ZXIoCisgICAgICAgICAgICAgICAgICAgIGds
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaykpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAjIHJldHVybiBvcmRpbmFyeSBibG9jazoKKyAgICAgICAgICAgIHJldHVybiBp
bWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMS5mb3JtYXQoCisgICAgICAgICAgICAgICAgYWN0
dWFsX2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAgICAgICAgIG10
bF9mb3JtYXQ9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0XSwKKyAgICAgICAg
ICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5nZXRfaW50ZXJuYWxfZm9y
bWF0X2luaXRpYWxpemVyKAorICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQpKQorCisgICAgcmV0dXJuIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5n
bGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX210bF9tYXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2Zvcm1hdF9hc3NpZ25fY29k
ZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfc3RyaW5nKGltYWdlX3RhYmxlLCBhbmds
ZV90b19nbCk6CiAgICAgYW5nbGVfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGUiXQog
ICAgIG1hY19vdmVycmlkZSA9IGltYWdlX3RhYmxlWyJvdmVycmlkZV9tYWMiXQogICAgIGlvc19v
dmVycmlkZSA9IGltYWdlX3RhYmxlWyJvdmVycmlkZV9pb3MiXQotICAgIG1hY19mYWxsYmFja3Mg
PSBpbWFnZV90YWJsZVsiZDI0czhfZmFsbGJhY2tzX21hYyJdCisgICAgbWFjX2ZhbGxiYWNrcyA9
IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfbWFjIl0KKyAgICBpb3NfZmFsbGJhY2tzID0gaW1hZ2Vf
dGFibGVbImZhbGxiYWNrc19pb3MiXQogICAgIGFuZ2xlX3RvX210bCA9IGltYWdlX3RhYmxlWyJt
YXAiXQogICAgIG1hY19zcGVjaWZpY19tYXAgPSBpbWFnZV90YWJsZVsibWFwX21hYyJdCiAgICAg
aW9zX3NwZWNpZmljX21hcCA9IGltYWdlX3RhYmxlWyJtYXBfaW9zIl0KQEAgLTMyMiw4ICszNzcs
OCBAQCBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfc3RyaW5nKGltYWdlX3RhYmxlLCBhbmdsZV90
b19nbCk6CiAgICAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2NvbW1vbl9jYXNlKGFuZ2xlX2Zv
cm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCk6CiAgICAgICAgIG1hY19jYXNlID0gZ2VuX2ltYWdl
X21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LCBh
bmdsZV90b19nbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWNfYW5nbGVfdG9fbXRsLCBtYWNfZmFsbGJhY2tzKQotICAgICAgICBub25fbWFjX2Nh
c2UgPSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zaW1wbGVfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVh
bF9hbmdsZV9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuZ2xlX3RvX2dsLCBhbmdsZV90b19tdGwpCisgICAgICAgIG5vbl9t
YWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0
dWFsX2FuZ2xlX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFuZ2xlX3RvX210bCwgaW9zX2ZhbGxiYWNrcykK
ICAgICAgICAgaWYgbWFjX2Nhc2UgPT0gbm9uX21hY19jYXNlOgogICAgICAgICAgICAgcmV0dXJu
IG1hY19jYXNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaAppbmRl
eCAyMDc5ZmQ3MjdhNTEyYjI4NzI1ZDM4MzkwN2E0OTNkY2QyZGNkMzdjLi4yMDRlYmI5NDk4NzMx
MTJjMDEwMjQyYjJiMTZiMDg2MGNkNDBjMDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9idWZmZXJfcG9vbC5oCkBAIC04MSw3ICs4MSw3IEBAIGNsYXNzIEJ1ZmZlclBvb2wKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0J1ZmZlckFsbG9jYXRlZE91dCA9IG51bGxw
dHIpOwogCiAgICAgLy8gQWZ0ZXIgYSBzZXF1ZW5jZSBvZiBDUFUgd3JpdGVzLCBjYWxsIGNvbW1p
dCB0byBlbnN1cmUgdGhlIGRhdGEgaXMgdmlzaWJsZSB0byB0aGUgZGV2aWNlLgotICAgIGFuZ2xl
OjpSZXN1bHQgY29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIGFuZ2xlOjpSZXN1
bHQgY29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIg
PSBmYWxzZSk7CiAKICAgICAvLyBUaGlzIHJlbGVhc2VzIGFsbCB0aGUgYnVmZmVycyB0aGF0IGhh
dmUgYmVlbiBhbGxvY2F0ZWQgc2luY2UgdGhpcyB3YXMgbGFzdCBjYWxsZWQuCiAgICAgdm9pZCBy
ZWxlYXNlSW5GbGlnaHRCdWZmZXJzKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwpAQCAtMTE0LDcg
KzExNCw2IEBAIGNsYXNzIEJ1ZmZlclBvb2wKICAgICBhbmdsZTo6UmVzdWx0IGFsbG9jYXRlTmV3
QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwogICAgIHZvaWQgZGVzdHJveUJ1ZmZlckxp
c3QoQ29udGV4dE10bCAqY29udGV4dE10bCwgc3RkOjpkZXF1ZTxCdWZmZXJSZWY+ICpidWZmZXJz
KTsKICAgICBhbmdsZTo6UmVzdWx0IGZpbmFsaXplUGVuZGluZ0J1ZmZlcihDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKLQogICAgIHNpemVfdCBtSW5pdGlhbFNpemU7CiAgICAgQnVmZmVyUmVmIG1C
dWZmZXI7CiAgICAgdWludDMyX3QgbU5leHRBbGxvY2F0aW9uT2Zmc2V0OwpAQCAtMTI3LDcgKzEy
Niw3IEBAIGNsYXNzIEJ1ZmZlclBvb2wKIAogICAgIHNpemVfdCBtQnVmZmVyc0FsbG9jYXRlZDsK
ICAgICBzaXplX3QgbU1heEJ1ZmZlcnM7Ci0gICAgQnVmZmVyUG9vbE1lbVBvbGljeSBtTWVtUG9s
aWN5OworICAgIEJ1ZmZlclBvb2xNZW1Qb2xpY3kgbU1lbVBvbGljeSA9IEJ1ZmZlclBvb2xNZW1Q
b2xpY3k6OkF1dG87CiAgICAgYm9vbCBtQWx3YXlzQWxsb2NhdGVOZXdCdWZmZXI7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5tbQppbmRleCAwNDIzOGVmMWU4
ZmFiMjE2NzY1OWI2NjhjMWNjZmI5NGZmNWEyZDJlLi5hNThiNWE1YTNlOTc3ODBmNzg3NTkyMDdh
MGZhMTI1NTE5YTlkNWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bv
b2wubW0KQEAgLTI1MCwxMSArMjUwLDE4IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6YWxs
b2NhdGUoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6Y29tbWl0KENvbnRleHRN
dGwgKmNvbnRleHRNdGwpCithbmdsZTo6UmVzdWx0IEJ1ZmZlclBvb2w6OmNvbW1pdChDb250ZXh0
TXRsICpjb250ZXh0TXRsLCBib29sIGZsdXNoRW50aXJlQnVmZmVyKQogewogICAgIGlmIChtQnVm
ZmVyICYmIG1OZXh0QWxsb2NhdGlvbk9mZnNldCA+IG1MYXN0Rmx1c2hPZmZzZXQpCiAgICAgewot
ICAgICAgICBtQnVmZmVyLT5mbHVzaChjb250ZXh0TXRsLCBtTGFzdEZsdXNoT2Zmc2V0LCBtTmV4
dEFsbG9jYXRpb25PZmZzZXQgLSBtTGFzdEZsdXNoT2Zmc2V0KTsKKyAgICAgICAgaWYgKGZsdXNo
RW50aXJlQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBtQnVmZmVyLT5mbHVzaChjb250
ZXh0TXRsLCAwLCBtTGFzdEZsdXNoT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIG1MYXN0Rmx1
c2hPZmZzZXQsIG1OZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hPZmZzZXQpOworICAg
ICAgICB9CiAgICAgICAgIG1MYXN0Rmx1c2hPZmZzZXQgPSBtTmV4dEFsbG9jYXRpb25PZmZzZXQ7
CiAgICAgfQogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Y29tbWFuZF9idWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAppbmRleCA1NWZmNjQ5ZGI2ZDU3NzVk
Y2U3YWM5Y2E1MzBhMTI1YmQ2NWQyODFmLi4zYWE4MjZhZjY3ZmNkMjAxYjlmM2IyY2M4ZjFhOGU3
N2EwMTFiMjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZl
ci5oCkBAIC0xMDIsNyArMTAyLDcgQEAgY2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6IHB1Ymxp
YyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KIAogICAgIC8v
IFJldHVybiB0cnVlIGlmIGNvbW1hbmQgYnVmZmVyIGNhbiBiZSBlbmNvZGVkIGludG8uIFJldHVy
biBmYWxzZSBpZiBpdCBoYXMgYmVlbiBjb21taXR0ZWQKICAgICAvLyBhbmQgaGFzbid0IGJlZW4g
cmVzdGFydGVkLgotICAgIGJvb2wgcmVhZHkoKSBjb25zdDsKKyAgICBib29sIHZhbGlkKCkgY29u
c3Q7CiAgICAgdm9pZCBjb21taXQoKTsKICAgICAvLyB3YWl0IGZvciBjb21taXR0ZWQgY29tbWFu
ZCBidWZmZXIgdG8gZmluaXNoLgogICAgIHZvaWQgZmluaXNoKCk7CkBAIC0xMTUsNiArMTE1LDgg
QEAgY2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1U
TENvbW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KIAogICAgIHZvaWQgcXVldWVFdmVudFNpZ25hbChj
b25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpOwogICAgIHZv
aWQgc2VydmVyV2FpdEV2ZW50KGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50
NjRfdCB2YWx1ZSk7CisKKyAgICB2b2lkIGluc2VydERlYnVnU2lnbihjb25zdCBzdGQ6OnN0cmlu
ZyAmbWFya2VyKTsKICAgICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZt
YXJrZXIpOwogICAgIHZvaWQgcG9wRGVidWdHcm91cCgpOwogCkBAIC0xMjgsNyArMTMwLDcgQEAg
Y2xhc3MgQ29tbWFuZEJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENv
bW1hbmRCdWZmZXI+PiwgYW5nbGU6Ok4KICAgICB2b2lkIHNldChpZDxNVExDb21tYW5kQnVmZmVy
PiBtZXRhbEJ1ZmZlcik7CiAgICAgdm9pZCBjbGVhbnVwKCk7CiAKLSAgICBib29sIHJlYWR5SW1w
bCgpIGNvbnN0OworICAgIGJvb2wgdmFsaWRJbXBsKCkgY29uc3Q7CiAgICAgdm9pZCBjb21taXRJ
bXBsKCk7CiAgICAgdm9pZCBmb3JjZUVuZGluZ0N1cnJlbnRFbmNvZGVyKCk7CiAKQEAgLTE0OSw2
ICsxNTEsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmpl
Y3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogCiAgICAgbXV0YWJsZSBzdGQ6Om11
dGV4IG1Mb2NrOwogCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1QZW5kaW5nRGVidWdT
aWduczsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8bXRsOjpTaGFyZWRFdmVudFJlZiwgdWlu
dDY0X3Q+PiBtUGVuZGluZ1NpZ25hbEV2ZW50czsKIAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiBtRGVidWdHcm91cHM7CkBAIC0xNzYsNiArMTc5LDggQEAgY2xhc3MgQ29tbWFuZEVuY29k
ZXIgOiBwdWJsaWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kRW5jb2Rlcj4+LCBhbmdsZTo6
Tm9uQ28KICAgICBDb21tYW5kRW5jb2RlciAmbWFya1Jlc291cmNlQmVpbmdXcml0dGVuQnlHUFUo
Y29uc3QgQnVmZmVyUmVmICZidWZmZXIpOwogICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3Vy
Y2VCZWluZ1dyaXR0ZW5CeUdQVShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKIAorICAgIHZv
aWQgaW5zZXJ0RGVidWdTaWduKE5TU3RyaW5nICpsYWJlbCk7CisKICAgICB2aXJ0dWFsIHZvaWQg
cHVzaERlYnVnR3JvdXAoTlNTdHJpbmcgKmxhYmVsKTsKICAgICB2aXJ0dWFsIHZvaWQgcG9wRGVi
dWdHcm91cCgpOwogCkBAIC0xODksNiArMTk0LDggQEAgY2xhc3MgQ29tbWFuZEVuY29kZXIgOiBw
dWJsaWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kRW5jb2Rlcj4+LCBhbmdsZTo6Tm9uQ28K
IAogICAgIHZvaWQgc2V0KGlkPE1UTENvbW1hbmRFbmNvZGVyPiBtZXRhbENtZEVuY29kZXIpOwog
CisgICAgdmlydHVhbCB2b2lkIGluc2VydERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKm1hcmtlcik7
CisKICAgcHJpdmF0ZToKICAgICBjb25zdCBUeXBlIG1UeXBlOwogICAgIENvbW1hbmRCdWZmZXIg
Jm1DbWRCdWZmZXI7CkBAIC0yMDEsNyArMjA4LDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbQogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGlubGluZSBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICZwdXNoKGNvbnN0IFQgJnZhbCkKICAgICB7Ci0gICAgICAgIGNvbnN0
IHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPigmdmFsKTsK
KyAgICAgICAgYXV0byBwdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oJnZh
bCk7CiAgICAgICAgIG1CdWZmZXIuaW5zZXJ0KG1CdWZmZXIuZW5kKCksIHB0ciwgcHRyICsgc2l6
ZW9mKFQpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTIxNyw3ICsyMjQsNyBA
QCBjbGFzcyBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgewogICAgICAgICBBU1NFUlQo
bVJlYWRQdHIgPD0gbUJ1ZmZlci5zaXplKCkgLSBzaXplb2YoVCkpOwogICAgICAgICBUIHJlOwot
ICAgICAgICB1aW50OF90ICpwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnJlKTsK
KyAgICAgICAgYXV0byBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnJlKTsKICAg
ICAgICAgc3RkOjpjb3B5KG1CdWZmZXIuZGF0YSgpICsgbVJlYWRQdHIsIG1CdWZmZXIuZGF0YSgp
ICsgbVJlYWRQdHIgKyBzaXplb2YoVCksIHB0cik7CiAgICAgICAgIHJldHVybiByZTsKICAgICB9
CkBAIC0yMjUsNyArMjMyLDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbQogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGlubGluZSBUIGZldGNoKCkKICAgICB7Ci0gICAg
ICAgIFQgcmUgPSBwZWVrPFQ+KCk7CisgICAgICAgIGF1dG8gcmUgPSBwZWVrPFQ+KCk7CiAgICAg
ICAgIG1SZWFkUHRyICs9IHNpemVvZihUKTsKICAgICAgICAgcmV0dXJuIHJlOwogICAgIH0KQEAg
LTIzMyw3ICsyNDAsNyBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgaW5s
aW5lIGNvbnN0IHVpbnQ4X3QgKmZldGNoKHNpemVfdCBieXRlcykKICAgICB7CiAgICAgICAgIEFT
U0VSVChtUmVhZFB0ciA8PSBtQnVmZmVyLnNpemUoKSAtIGJ5dGVzKTsKLSAgICAgICAgc2l6ZV90
IGN1ciA9IG1SZWFkUHRyOworICAgICAgICBhdXRvIGN1ciA9IG1SZWFkUHRyOwogICAgICAgICBt
UmVhZFB0ciArPSBieXRlczsKICAgICAgICAgcmV0dXJuIG1CdWZmZXIuZGF0YSgpICsgY3VyOwog
ICAgIH0KQEAgLTQ3OSwxMiArNDg2LDE2IEBAIGNsYXNzIFJlbmRlckNvbW1hbmRFbmNvZGVyIGZp
bmFsIDogcHVibGljIENvbW1hbmRFbmNvZGVyCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+PihDb21tYW5kRW5jb2Rlcjo6Z2V0KCkp
OwogICAgIH0KKyAgICB2b2lkIGluc2VydERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRTY2lz
c29yUmVjdChjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJmF0dGFjaG1lbnQpOworICAg
IHZvaWQgaW5pdFdyaXRlRGVwZW5kZW5jeShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKIAog
ICAgIHZvaWQgZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oTVRMUmVuZGVyUGFzc0F0dGFjaG1lbnRE
ZXNjcmlwdG9yICpvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQpOwogCiAgICAgdm9pZCBlbmNvZGVN
ZXRhbEVuY29kZXIoKTsKKyAgICB2b2lkIHNpbXVsYXRlRGlzY2FyZEZyYW1lYnVmZmVyKCk7Cisg
ICAgdm9pZCBlbmRFbmNvZGluZ0ltcGwoYm9vbCBjb25zaWRlckRpc2NhcmRTaW11bGF0aW9uKTsK
IAogICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICZjb21tb25TZXRCdWZmZXIoZ2w6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkPE1UTEJ1ZmZlcj4gbXRsQnVmZmVyLApAQCAtNTYwLDExICs1NzEsMjAgQEAgY2xhc3MgQmxp
dENvbW1hbmRFbmNvZGVyIGZpbmFsIDogcHVibGljIENvbW1hbmRFbmNvZGVyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzbGljZUNvdW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CiAKKyAgICBC
bGl0Q29tbWFuZEVuY29kZXIgJmNvcHlUZXh0dXJlKGNvbnN0IFRleHR1cmVSZWYgJnNyYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjTGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZkc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RTbGljZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdExldmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xpY2VDb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxldmVsQ291bnQpOwor
CiAgICAgQmxpdENvbW1hbmRFbmNvZGVyICZmaWxsQnVmZmVyKGNvbnN0IEJ1ZmZlclJlZiAmYnVm
ZmVyLCBOU1JhbmdlIHJhbmdlLCB1aW50OF90IHZhbHVlKTsKIAogICAgIEJsaXRDb21tYW5kRW5j
b2RlciAmZ2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJl
KTsKLSAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVzb3VyY2UoQnVmZmVyICpi
dWZmZXJQdHIpOwotICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNvdXJjZShU
ZXh0dXJlICp0ZXh0dXJlUHRyKTsKKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXpl
UmVzb3VyY2UoY29uc3QgQnVmZmVyUmVmICZidWZmZXIpOworICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmc3luY2hyb25pemVSZXNvdXJjZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKIAogICBw
cml2YXRlOgogICAgIGlkPE1UTEJsaXRDb21tYW5kRW5jb2Rlcj4gZ2V0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Y29tbWFuZF9idWZmZXIubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLm1tCmluZGV4IDQ0MzNiMDIyMTdjMzBh
YWUyMDg5NjcwOGE3NGFmMjU0NzM1ZDIzNjguLmI0YTMzNDc0MmU2MjdjYTA0OTEyMTAzZTJmYWRm
Y2M3MzEyNDdmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1
ZmZlci5tbQpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tYW5kX2J1ZmZlci5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpZiBBTkdM
RV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgorIyAgICBpbmNsdWRlIDxyYW5kb20+
CisjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIgpAQCAtNjUsNiArNjgs
NyBAQCBuYW1lc3BhY2UKICAgICBQUk9DKFNldFZpc2liaWxpdHlSZXN1bHRNb2RlKSAgICAgICAg
XAogICAgIFBST0MoVXNlUmVzb3VyY2UpICAgICAgICAgICAgICAgICAgICBcCiAgICAgUFJPQyhN
ZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlKSAgICAgIFwKKyAgICBQUk9DKEluc2VydERlYnVnc2ln
bikgICAgICAgICAgICAgICAgXAogICAgIFBST0MoUHVzaERlYnVnR3JvdXApICAgICAgICAgICAg
ICAgICBcCiAgICAgUFJPQyhQb3BEZWJ1Z0dyb3VwKQogCkBAIC04NSw0MiArODksNDIgQEAgdm9p
ZCBJbnZhbGlkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1l
ZGlhdGVDb21tYW5kU3RyZWFtICoKIHZvaWQgU2V0UmVuZGVyUGlwZWxpbmVTdGF0ZUNtZChpZDxN
VExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRM
UmVuZGVyUGlwZWxpbmVTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlbmRlclBp
cGVsaW5lU3RhdGU+PigpOworICAgIGF1dG8gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJl
bmRlclBpcGVsaW5lU3RhdGU+PigpOwogICAgIFtlbmNvZGVyIHNldFJlbmRlclBpcGVsaW5lU3Rh
dGU6c3RhdGVdOwogICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQgU2V0
VHJpYW5nbGVGaWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rlciwg
SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTFRyaWFuZ2xlRmls
bE1vZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJpYW5nbGVGaWxsTW9kZT4oKTsKKyAgICBh
dXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTFRyaWFuZ2xlRmlsbE1vZGU+KCk7CiAgICAgW2Vu
Y29kZXIgc2V0VHJpYW5nbGVGaWxsTW9kZTptb2RlXTsKIH0KIAogdm9pZCBTZXRGcm9udEZhY2lu
Z1dpbmRpbmdDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0p
CiB7Ci0gICAgTVRMV2luZGluZyB3aW5kaW5nID0gc3RyZWFtLT5mZXRjaDxNVExXaW5kaW5nPigp
OworICAgIGF1dG8gd2luZGluZyA9IHN0cmVhbS0+ZmV0Y2g8TVRMV2luZGluZz4oKTsKICAgICBb
ZW5jb2RlciBzZXRGcm9udEZhY2luZ1dpbmRpbmc6d2luZGluZ107CiB9CiAKIHZvaWQgU2V0Q3Vs
bE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0
ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExDdWxsTW9kZSBtb2RlID0gc3RyZWFt
LT5mZXRjaDxNVExDdWxsTW9kZT4oKTsKKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1U
TEN1bGxNb2RlPigpOwogICAgIFtlbmNvZGVyIHNldEN1bGxNb2RlOm1vZGVdOwogfQogCiB2b2lk
IFNldERlcHRoU3RlbmNpbFN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMRGVw
dGhTdGVuY2lsU3RhdGU+IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxT
dGF0ZT4+KCk7CisgICAgYXV0byBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMRGVwdGhTdGVu
Y2lsU3RhdGU+PigpOwogICAgIFtlbmNvZGVyIHNldERlcHRoU3RlbmNpbFN0YXRlOnN0YXRlXTsK
ICAgICBbc3RhdGUgQU5HTEVfTVRMX1JFTEVBU0VdOwogfQogCiB2b2lkIFNldERlcHRoQmlhc0Nt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGZsb2F0IGRlcHRoQmlhcyAgPSBzdHJlYW0tPmZldGNo
PGZsb2F0PigpOwotICAgIGZsb2F0IHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0Pigp
OwotICAgIGZsb2F0IGNsYW1wICAgICAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGF1
dG8gZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgYXV0byBzbG9wZVNj
YWxlID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBhdXRvIGNsYW1wICAgICAgPSBzdHJl
YW0tPmZldGNoPGZsb2F0PigpOwogICAgIFtlbmNvZGVyIHNldERlcHRoQmlhczpkZXB0aEJpYXMg
c2xvcGVTY2FsZTpzbG9wZVNjYWxlIGNsYW1wOmNsYW1wXTsKIH0KIApAQCAtMTM0LDEzICsxMzgs
MTMgQEAgdm9pZCBTZXRTdGVuY2lsUmVmVmFsc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWEKIAogdm9pZCBTZXRWaWV3cG9ydENtZChpZDxN
VExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVh
bSAqc3RyZWFtKQogewotICAgIE1UTFZpZXdwb3J0IHZpZXdwb3J0ID0gc3RyZWFtLT5mZXRjaDxN
VExWaWV3cG9ydD4oKTsKKyAgICBhdXRvIHZpZXdwb3J0ID0gc3RyZWFtLT5mZXRjaDxNVExWaWV3
cG9ydD4oKTsKICAgICBbZW5jb2RlciBzZXRWaWV3cG9ydDp2aWV3cG9ydF07CiB9CiAKIHZvaWQg
U2V0U2Npc3NvclJlY3RDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExTY2lzc29yUmVjdCBy
ZWN0ID0gc3RyZWFtLT5mZXRjaDxNVExTY2lzc29yUmVjdD4oKTsKKyAgICBhdXRvIHJlY3QgPSBz
dHJlYW0tPmZldGNoPE1UTFNjaXNzb3JSZWN0PigpOwogICAgIFtlbmNvZGVyIHNldFNjaXNzb3JS
ZWN0OnJlY3RdOwogfQogCkBAIC0xNTUsOSArMTU5LDkgQEAgdm9pZCBTZXRCbGVuZENvbG9yQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3QKIAogdm9pZCBTZXRWZXJ0ZXhCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBpZDxN
VExCdWZmZXI+IGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICB1
aW50MzJfdCBvZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWlu
dDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8g
YnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVydGV4QnVmZmVyOmJ1ZmZlciBv
ZmZzZXQ6b2Zmc2V0IGF0SW5kZXg6aW5kZXhdOwogICAgIFtidWZmZXIgQU5HTEVfTVRMX1JFTEVB
U0VdOwogfQpAQCAtMTY1LDI2ICsxNjksMjYgQEAgdm9pZCBTZXRWZXJ0ZXhCdWZmZXJDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmQKIHZv
aWQgU2V0VmVydGV4QnVmZmVyT2Zmc2V0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbSAqc3RyZWFtKQogewotICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAg
YXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNl
dFZlcnRleEJ1ZmZlck9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CiB9CiAKIHZvaWQgU2V0
VmVydGV4Qnl0ZXNDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVy
bWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBzaXplX3Qgc2l6ZSAgICAgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOwotICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzID0g
c3RyZWFtLT5mZXRjaChzaXplKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBzaXplICA9IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90
PigpOworICAgIGF1dG8gYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworICAgIGF1dG8gaW5k
ZXggPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleEJ5
dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6aW5kZXhdOwogfQogCiB2b2lkIFNldFZlcnRl
eFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKIHsKLSAgICBpZDxNVExTYW1wbGVyU3RhdGU+IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExTYW1wbGVyU3RhdGU+PigpOwotICAgIGZsb2F0IGxvZE1pbkNsYW1wICAgICAgICAgPSBz
dHJlYW0tPmZldGNoPGZsb2F0PigpOwotICAgIGZsb2F0IGxvZE1heENsYW1wICAgICAgICAgPSBz
dHJlYW0tPmZldGNoPGZsb2F0PigpOwotICAgIHVpbnQzMl90IGluZGV4ICAgICAgICAgICAgPSBz
dHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gc3RhdGUgICAgICAgID0gc3RyZWFt
LT5mZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOworICAgIGZsb2F0IGxvZE1pbkNsYW1wID0g
c3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBmbG9hdCBsb2RNYXhDbGFtcCA9IHN0cmVhbS0+
ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgYXV0byBpbmRleCAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleFNhbXBsZXJTdGF0ZTpzdGF0ZQogICAg
ICAgICAgICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAogICAgICAgICAgICAg
ICAgICAgICAgICBsb2RNYXhDbGFtcDpsb2RNYXhDbGFtcApAQCAtMTk1LDE3ICsxOTksMTcgQEAg
dm9pZCBTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsCiAKIHZvaWQgU2V0VmVydGV4VGV4dHVyZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewot
ICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFRleHR1cmU+
PigpOwotICAgIHVpbnQzMl90IGluZGV4ICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOworICAgIGF1dG8gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7
CisgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5j
b2RlciBzZXRWZXJ0ZXhUZXh0dXJlOnRleHR1cmUgYXRJbmRleDppbmRleF07CiAgICAgW3RleHR1
cmUgQU5HTEVfTVRMX1JFTEVBU0VdOwogfQogCiB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3Ry
ZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBzdHJlYW0tPmZldGNo
PGlkPE1UTEJ1ZmZlcj4+KCk7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ICAgICAgPSBzdHJlYW0tPmZl
dGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IGluZGV4ICAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisg
ICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVy
IHNldEZyYWdtZW50QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6b2Zmc2V0IGF0SW5kZXg6aW5kZXhdOwog
ICAgIFtidWZmZXIgQU5HTEVfTVRMX1JFTEVBU0VdOwogfQpAQCAtMjEzLDI2ICsyMTcsMjYgQEAg
dm9pZCBTZXRGcmFnbWVudEJ1ZmZlckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwgSW50ZXJtZWRpYXRlQ29tbWEKIHZvaWQgU2V0RnJhZ21lbnRCdWZmZXJPZmZzZXRDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICB1
aW50MzJfdCBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90
IGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBvZmZzZXQgPSBz
dHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXggID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlck9mZnNldDpvZmZz
ZXQgYXRJbmRleDppbmRleF07CiB9CiAKIHZvaWQgU2V0RnJhZ21lbnRCeXRlc0NtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQogewotICAgIHNpemVfdCBzaXplICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXpl
X3Q+KCk7Ci0gICAgY29uc3QgdWludDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOwot
ICAgIHVpbnQzMl90IGluZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICBhdXRvIHNpemUgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBieXRlcyA9
IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7CisgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRCeXRlczpieXRlcyBsZW5ndGg6c2l6
ZSBhdEluZGV4OmluZGV4XTsKIH0KIAogdm9pZCBTZXRGcmFnbWVudFNhbXBsZXJTdGF0ZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlk
PE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0
ZT4+KCk7Ci0gICAgZmxvYXQgbG9kTWluQ2xhbXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8Zmxv
YXQ+KCk7Ci0gICAgZmxvYXQgbG9kTWF4Q2xhbXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8Zmxv
YXQ+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CisgICAgYXV0byBzdGF0ZSAgICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNh
bXBsZXJTdGF0ZT4+KCk7CisgICAgZmxvYXQgbG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZs
b2F0PigpOworICAgIGZsb2F0IGxvZE1heENsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsK
KyAgICBhdXRvIGluZGV4ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAg
W2VuY29kZXIgc2V0RnJhZ21lbnRTYW1wbGVyU3RhdGU6c3RhdGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAogICAgICAgICAgICAgICAgICAgICAgICAg
IGxvZE1heENsYW1wOmxvZE1heENsYW1wCkBAIC0yNDIsMjYgKzI0NiwyNiBAQCB2b2lkIFNldEZy
YWdtZW50U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LAogCiB2b2lkIFNldEZyYWdtZW50VGV4dHVyZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlk
PE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFRleHR1cmU+PigpOwot
ICAgIHVpbnQzMl90IGluZGV4ICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgIGF1dG8gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMVGV4dHVyZT4+KCk7CisgICAg
YXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBz
ZXRGcmFnbWVudFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmluZGV4XTsKICAgICBbdGV4dHVyZSBB
TkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQgRHJhd0NtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewot
ICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJp
bWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCAgICAgICAgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IHZlcnRleENvdW50ICAgICAgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBwcmltaXRpdmVUeXBlID0g
c3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworICAgIGF1dG8gdmVydGV4U3RhcnQg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB2ZXJ0ZXhDb3VudCAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3UHJpbWl0aXZlczpw
cmltaXRpdmVUeXBlIHZlcnRleFN0YXJ0OnZlcnRleFN0YXJ0IHZlcnRleENvdW50OnZlcnRleENv
dW50XTsKIH0KIAogdm9pZCBEcmF3SW5zdGFuY2VkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAg
TVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRp
dmVUeXBlPigpOwotICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0ICAgICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4Q291bnQgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIHZlcnRleFN0
YXJ0ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gdmVydGV4Q291bnQg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBpbnN0YW5jZXMgICAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3UHJpbWl0aXZlczpw
cmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQKICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhDb3VudDp2ZXJ0ZXhDb3VudApAQCAtMjcwLDExICsyNzQsMTEg
QEAgdm9pZCBEcmF3SW5zdGFuY2VkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKIAogdm9pZCBEcmF3SW5kZXhlZENtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+
ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJfdCBpbmRleENvdW50ICAgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIE1UTEluZGV4VHlwZSBpbmRl
eFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOwotICAgIGlkPE1U
TEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4o
KTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHNp
emVfdD4oKTsKKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1p
dGl2ZVR5cGU+KCk7CisgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4VHlwZSAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4
VHlwZT4oKTsKKyAgICBhdXRvIGluZGV4QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1
ZmZlcj4+KCk7CisgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CiAgICAgW2VuY29kZXIgZHJhd0luZGV4ZWRQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q291bnQ6aW5kZXhDb3VudAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKQEAgLTI4NSwxMiArMjg5LDEyIEBAIHZv
aWQgRHJhd0luZGV4ZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdHJlCiAKIHZvaWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJl
YW0gKnN0cmVhbSkKIHsKLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBzdHJl
YW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7Ci0gICAgdWludDMyX3QgaW5kZXhDb3VudCAg
ICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICBNVExJbmRleFR5cGUg
aW5kZXhUeXBlICAgICAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4VHlwZT4oKTsKLSAgICBp
ZDxNVExCdWZmZXI+IGluZGV4QnVmZmVyICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZl
cj4+KCk7Ci0gICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRj
aDxzaXplX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5zdGFuY2VzICAgICAgICAgICAgID0gc3RyZWFt
LT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZl
dGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFt
LT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4VHlwZSAgICAgPSBzdHJlYW0tPmZl
dGNoPE1UTEluZGV4VHlwZT4oKTsKKyAgICBhdXRvIGluZGV4QnVmZmVyICAgPSBzdHJlYW0tPmZl
dGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5m
ZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBpbnN0YW5jZXMgICAgID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJpbWl0aXZl
VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlwZQpAQCAtMzAzLDEzICszMDcs
MTMgQEAgdm9pZCBEcmF3SW5kZXhlZEluc3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ28KIHZvaWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRC
YXNlVmVydGV4Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVh
bSAqc3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVh
bS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJfdCBpbmRleENvdW50ICAg
ICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIE1UTEluZGV4VHlwZSBp
bmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOwotICAgIGlk
PE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVy
Pj4oKTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNo
PHNpemVfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0t
PmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IGJhc2VWZXJ0ZXggICAgICAgICAgICA9
IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBwcmltaXRpdmVUeXBlID0gc3Ry
ZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworICAgIGF1dG8gaW5kZXhDb3VudCAgICA9
IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3Ry
ZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CisgICAgYXV0byBpbmRleEJ1ZmZlciAgID0gc3Ry
ZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gYnVmZmVyT2Zmc2V0ICA9IHN0
cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBiYXNlVmVydGV4ICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJpbWl0
aXZlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlwZQpAQCAtMzI0LDE2ICsz
MjgsMTYgQEAgdm9pZCBEcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXhDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiB2b2lkIFNldFZpc2liaWxpdHlSZXN1bHRNb2Rl
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0g
ICAgTVRMVmlzaWJpbGl0eVJlc3VsdE1vZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVmlzaWJp
bGl0eVJlc3VsdE1vZGU+KCk7Ci0gICAgc2l6ZV90IG9mZnNldCAgICAgICAgICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gbW9kZSAgID0gc3RyZWFtLT5mZXRjaDxN
VExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0
Y2g8c2l6ZV90PigpOwogICAgIFtlbmNvZGVyIHNldFZpc2liaWxpdHlSZXN1bHRNb2RlOm1vZGUg
b2Zmc2V0Om9mZnNldF07CiB9CiAKIHZvaWQgVXNlUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
IHsKLSAgICBpZDxNVExSZXNvdXJjZT4gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJl
c291cmNlPj4oKTsKLSAgICBNVExSZXNvdXJjZVVzYWdlIHVzYWdlICAgPSBzdHJlYW0tPmZldGNo
PE1UTFJlc291cmNlVXNhZ2U+KCk7Ci0gICAgbXRsOjpSZW5kZXJTdGFnZXMgc3RhZ2VzID0gc3Ry
ZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKKyAgICBhdXRvIHJlc291cmNlID0gc3Ry
ZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CisgICAgYXV0byB1c2FnZSAgICA9IHN0cmVh
bS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsKKyAgICBhdXRvIHN0YWdlcyAgID0gc3RyZWFt
LT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUo
c3RhZ2VzKTsKICNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBf
MTUpCiAgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzLjAp
KQpAQCAtMzUxLDkgKzM1NSw5IEBAIHZvaWQgVXNlUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlCiB2b2lkIE1lbW9y
eUJhcnJpZXJXaXRoUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFJlc291cmNlPiByZXNvdXJjZSA9IHN0cmVh
bS0+ZmV0Y2g8aWQ8TVRMUmVzb3VyY2U+PigpOwotICAgIG10bDo6UmVuZGVyU3RhZ2VzIGFmdGVy
ICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7Ci0gICAgbXRsOjpSZW5kZXJT
dGFnZXMgYmVmb3JlID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKKyAgICBh
dXRvIHJlc291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CisgICAgYXV0
byBhZnRlciAgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7CisgICAgYXV0
byBiZWZvcmUgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJTdGFnZXM+KCk7CiAgICAgQU5H
TEVfVU5VU0VEX1ZBUklBQkxFKGFmdGVyKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYmVm
b3JlKTsKICNpZiBkZWZpbmVkKF9fTUFDXzEwXzE0KSAmJiAoVEFSR0VUX09TX09TWCB8fCBUQVJH
RVRfT1NfTUFDQ0FUQUxZU1QpCkBAIC0zNjgsOSArMzcyLDE2IEBAIHZvaWQgTWVtb3J5QmFycmll
cldpdGhSZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAg
ICBbcmVzb3VyY2UgQU5HTEVfTVRMX1JFTEVBU0VdOwogfQogCit2b2lkIEluc2VydERlYnVnc2ln
bkNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbSAqc3RyZWFtKQoreworICAgIGF1dG8gbGFiZWwgPSBzdHJlYW0tPmZldGNoPE5T
U3RyaW5nICo+KCk7CisgICAgW2VuY29kZXIgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07Cisg
ICAgW2xhYmVsIEFOR0xFX01UTF9SRUxFQVNFXTsKK30KKwogdm9pZCBQdXNoRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE5TU3RyaW5nICpsYWJlbCA9IHN0cmVhbS0+ZmV0Y2g8
TlNTdHJpbmcgKj4oKTsKKyAgICBhdXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAq
PigpOwogICAgIFtlbmNvZGVyIHB1c2hEZWJ1Z0dyb3VwOmxhYmVsXTsKICAgICBbbGFiZWwgQU5H
TEVfTVRMX1JFTEVBU0VdOwogfQpAQCAtMzg4LDcgKzM5OSw3IEBAIGNvbnN0ZXhwciBDb21tYW5k
RW5jb2RlckZ1bmMgZ0NvbW1hbmRFbmNvZGVyc1tdID0ge0FOR0xFX01UTF9DTURfWChBTkdMRV9N
VExfQ01ECiAKIE5TU3RyaW5nICpjcHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFy
a2VyKQogewotICAgIE5TU3RyaW5nICpsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzptYXJrZXIuY19zdHIoKV07CisgICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzptYXJrZXIuY19zdHIoKV07CiAgICAgaWYgKCFsYWJlbCkKICAgICB7CiAg
ICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGFz
Y2lpIHN0cmluZy4KQEAgLTM5Niw3ICs0MDcsNiBAQCBOU1N0cmluZyAqY3BwTGFiZWxUb09iakMo
Y29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKICAgICB9CiAgICAgcmV0dXJuIGxhYmVsOwogfQot
CiB9CiAKIC8vIENvbW1hbmRRdWV1ZSBpbXBsZW1lbnRhdGlvbgpAQCAtNTY1LDExICs1NzUsMTEg
QEAgQ29tbWFuZEJ1ZmZlcjo6fkNvbW1hbmRCdWZmZXIoKQogICAgIGNsZWFudXAoKTsKIH0KIAot
Ym9vbCBDb21tYW5kQnVmZmVyOjpyZWFkeSgpIGNvbnN0Citib29sIENvbW1hbmRCdWZmZXI6OnZh
bGlkKCkgY29uc3QKIHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2sp
OwogCi0gICAgcmV0dXJuIHJlYWR5SW1wbCgpOworICAgIHJldHVybiB2YWxpZEltcGwoKTsKIH0K
IAogdm9pZCBDb21tYW5kQnVmZmVyOjpjb21taXQoKQpAQCAtNTk4LDcgKzYwOCw3IEBAIHZvaWQg
Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFJlc291cmNlUmVmICZyZXNv
dXJjZSkKIAogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CiAKLSAg
ICBpZiAoIXJlYWR5SW1wbCgpKQorICAgIGlmICghdmFsaWRJbXBsKCkpCiAgICAgewogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNjIwLDcgKzYzMCw3IEBAIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6
c2V0UmVhZERlcGVuZGVuY3koUmVzb3VyY2UgKnJlc291cmNlKQogCiAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAotICAgIGlmICghcmVhZHlJbXBsKCkpCisgICAg
aWYgKCF2YWxpZEltcGwoKSkKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NDcs
NTcgKzY1Nyw1NyBAQCB2b2lkIENvbW1hbmRCdWZmZXI6OnJlc3RhcnQoKQogICAgIEFTU0VSVCht
ZXRhbENtZEJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNpZ25h
bChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit2b2lk
IENvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbihjb25zdCBzdGQ6OnN0cmluZyAmbWFya2Vy
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7Ci0KLSAgICBB
U1NFUlQocmVhZHlJbXBsKCkpOwotCi0gICAgaWYgKG1BY3RpdmVDb21tYW5kRW5jb2RlciAmJiBt
QWN0aXZlQ29tbWFuZEVuY29kZXItPmdldFR5cGUoKSA9PSBDb21tYW5kRW5jb2Rlcjo6UkVOREVS
KQorICAgIG10bDo6Q29tbWFuZEVuY29kZXIgKmN1cnJlbnRFbmNvZGVyID0gbUFjdGl2ZUNvbW1h
bmRFbmNvZGVyOworICAgIGlmIChjdXJyZW50RW5jb2RlcikKICAgICB7Ci0gICAgICAgIC8vIFdl
IGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBhY3RpdmUgcmVuZGVyIHBhc3MsIGRl
ZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRoZQotICAgICAgICAvLyBwYXNzIGVuZC4KLSAgICAgICAg
bVBlbmRpbmdTaWduYWxFdmVudHMucHVzaF9iYWNrKHtldmVudCwgdmFsdWV9KTsKKyAgICAgICAg
QU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsYWJlbCA9
IGNwcExhYmVsVG9PYmpDKG1hcmtlcik7CisgICAgICAgICAgICBjdXJyZW50RW5jb2Rlci0+aW5z
ZXJ0RGVidWdTaWduKGxhYmVsKTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBzZXRFdmVudEltcGwoZXZlbnQsIHZhbHVlKTsKKyAgICAgICAgbVBlbmRpbmdEZWJ1
Z1NpZ25zLnB1c2hfYmFjayhtYXJrZXIpOwogICAgIH0KIH0KIAotdm9pZCBDb21tYW5kQnVmZmVy
OjpzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2
NF90IHZhbHVlKQordm9pZCBDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cChjb25zdCBzdGQ6
OnN0cmluZyAmbWFya2VyKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyht
TG9jayk7Ci0gICAgQVNTRVJUKHJlYWR5SW1wbCgpKTsKLQotICAgIHdhaXRFdmVudEltcGwoZXZl
bnQsIHZhbHVlKTsKKyAgICAvLyBOT1RFKGhxbGUpOiB0byBpbXBsZW1lbnQgdGhpcwogfQogCi12
b2lkIENvbW1hbmRCdWZmZXI6OnB1c2hEZWJ1Z0dyb3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJr
ZXIpCit2b2lkIENvbW1hbmRCdWZmZXI6OnBvcERlYnVnR3JvdXAoKQogewotICAgIG1EZWJ1Z0dy
b3Vwcy5wdXNoX2JhY2sobWFya2VyKTsKKyAgICAvLyBOT1RFKGhxbGUpOiB0byBpbXBsZW1lbnQg
dGhpcworfQogCit2b2lkIENvbW1hbmRCdWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwoY29uc3QgbXRs
OjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKQorewogICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CiAKLSAgICBpZiAocmVhZHlJbXBsKCkpCisg
ICAgQVNTRVJUKHZhbGlkSW1wbCgpKTsKKworICAgIGlmIChtQWN0aXZlQ29tbWFuZEVuY29kZXIg
JiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVyLT5nZXRUeXBlKCkgPT0gQ29tbWFuZEVuY29kZXI6OlJF
TkRFUikKICAgICB7Ci0gICAgICAgIHB1c2hEZWJ1Z0dyb3VwSW1wbChtYXJrZXIpOworICAgICAg
ICAvLyBXZSBjYW5ub3Qgc2V0IGV2ZW50IHdoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIHJlbmRlciBw
YXNzLCBkZWZlciB0aGUgc2V0dGluZyB1bnRpbCB0aGUKKyAgICAgICAgLy8gcGFzcyBlbmQuCisg
ICAgICAgIG1QZW5kaW5nU2lnbmFsRXZlbnRzLnB1c2hfYmFjayh7ZXZlbnQsIHZhbHVlfSk7CiAg
ICAgfQotfQotCi12b2lkIENvbW1hbmRCdWZmZXI6OnBvcERlYnVnR3JvdXAoKQotewotICAgIGlm
ICghbURlYnVnR3JvdXBzLmVtcHR5KCkpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgbURlYnVn
R3JvdXBzLnBvcF9iYWNrKCk7CisgICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOwog
ICAgIH0KK30KIAordm9pZCBDb21tYW5kQnVmZmVyOjpzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRs
OjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKQorewogICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CisgICAgQVNTRVJUKHZhbGlkSW1wbCgpKTsK
IAotICAgIGlmIChyZWFkeUltcGwoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgd2FpdEV2ZW50SW1wbChldmVudCwgdmFsdWUpOwogfQogCiAvKiogcHJpdmF0ZSB1c2Ugb25s
eSAqLwpAQCAtNzA5LDYgKzcxOSwxNSBAQCB2b2lkIENvbW1hbmRCdWZmZXI6OnNldChpZDxNVExD
b21tYW5kQnVmZmVyPiBtZXRhbEJ1ZmZlcikKIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6c2V0QWN0aXZl
Q29tbWFuZEVuY29kZXIoQ29tbWFuZEVuY29kZXIgKmVuY29kZXIpCiB7CiAgICAgbUFjdGl2ZUNv
bW1hbmRFbmNvZGVyID0gZW5jb2RlcjsKKyAgICBmb3IgKGF1dG8gJm1hcmtlciA6IG1QZW5kaW5n
RGVidWdTaWducykKKyAgICB7CisgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8gbGFiZWwgPSBjcHBMYWJlbFRvT2JqQyhtYXJrZXIpOworICAg
ICAgICAgICAgZW5jb2Rlci0+aW5zZXJ0RGVidWdTaWduKGxhYmVsKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBtUGVuZGluZ0RlYnVnU2lnbnMuY2xlYXIoKTsKIH0KIAogdm9pZCBDb21tYW5kQnVm
ZmVyOjppbnZhbGlkYXRlQWN0aXZlQ29tbWFuZEVuY29kZXIoQ29tbWFuZEVuY29kZXIgKmVuY29k
ZXIpCkBAIC03MjksNyArNzQ4LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpjbGVhbnVwKCkKICAg
ICBQYXJlbnRDbGFzczo6c2V0KG5pbCk7CiB9CiAKLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJ
bXBsKCkgY29uc3QKK2Jvb2wgQ29tbWFuZEJ1ZmZlcjo6dmFsaWRJbXBsKCkgY29uc3QKIHsKICAg
ICBpZiAoIVBhcmVudENsYXNzOjp2YWxpZCgpKQogICAgIHsKQEAgLTc0MSw3ICs3NjAsNyBAQCBi
b29sIENvbW1hbmRCdWZmZXI6OnJlYWR5SW1wbCgpIGNvbnN0CiAKIHZvaWQgQ29tbWFuZEJ1ZmZl
cjo6Y29tbWl0SW1wbCgpCiB7Ci0gICAgaWYgKCFyZWFkeUltcGwoKSkKKyAgICBpZiAoIXZhbGlk
SW1wbCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg4OSw2ICs5MDgsMTcg
QEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6cG9wRGVidWdHcm91cCgpCiAgICAgW2dldCgpIHBvcERl
YnVnR3JvdXBdOwogfQogCit2b2lkIENvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ24oTlNT
dHJpbmcgKmxhYmVsKQoreworICAgIGluc2VydERlYnVnU2lnbkltcGwobGFiZWwpOworfQorCit2
b2lkIENvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ25JbXBsKE5TU3RyaW5nICpsYWJlbCkK
K3sKKyAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgW2dldCgpIGluc2VydERlYnVn
U2lnbnBvc3Q6bGFiZWxdOworfQorCiAvLyBSZW5kZXJDb21tYW5kRW5jb2RlclNoYWRlclN0YXRl
cyBpbXBsZW1lbnRhdGlvbgogUmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXM6OlJlbmRl
ckNvbW1hbmRFbmNvZGVyU2hhZGVyU3RhdGVzKCkKIHsKQEAgLTk1MSw2ICs5ODEsOSBAQCB2b2lk
IFJlbmRlckNvbW1hbmRFbmNvZGVyU3RhdGVzOjpyZXNldCgpCiAgICAgewogICAgICAgICBzaGFk
ZXJTdGF0ZXMucmVzZXQoKTsKICAgICB9CisKKyAgICB2aXNpYmlsaXR5UmVzdWx0TW9kZSAgICAg
ICAgID0gTVRMVmlzaWJpbGl0eVJlc3VsdE1vZGVEaXNhYmxlZDsKKyAgICB2aXNpYmlsaXR5UmVz
dWx0QnVmZmVyT2Zmc2V0ID0gMDsKIH0KIAogLy8gUmVuZGVyQ29tbWFuZEVuY29kZXIgaW1wbGVt
dGF0aW9uCkBAIC0xMDE0LDExICsxMDQ3LDEyIEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6
OmZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKAogICAgIHsKICAgICAgICAgaWYgKG9iakNSZW5kZXJQ
YXNzQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvblN0b3JlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBOT1RFKGhxbGUpOiBDdXJyZW50bHkgaWYgdGhlIHN0b3JlIGFj
dGlvbiB3aXRoIGltcGxpY2l0IE1TIHRleHR1cmUgaXMKLSAgICAgICAgICAgIC8vIE1UTFN0b3Jl
QWN0aW9uU3RvcmUsIGl0IGlzIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byBzdG9yZSBhbmQgcmVz
b2x2ZSBhY3Rpb24uIEl0Ci0gICAgICAgICAgICAvLyBtaWdodCBpbnRyb2R1Y2UgdW5uZWNlc3Nh
cnkgb3ZlcmhlYWQuIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMgb25seSBzdG9yZSB0
aGUKLSAgICAgICAgICAgIC8vIE1TIHRleHR1cmUsIGFuZCByZXNvbHZlIG9ubHkgYXQgdGhlIGVu
ZCBvZiByZWFsIHJlbmRlciBwYXNzIChub3QgcmVuZGVyIHBhc3MgdGhlIGlzCi0gICAgICAgICAg
ICAvLyBpbnRlcnJ1cHRlZCBieSBjb21wdXRlIHBhc3MpIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1
ZmZlciBvcGVyYXRpb24gc3RhcnRzLgorICAgICAgICAgICAgLy8gTk9URShocWxlKTogQ3VycmVu
dGx5IGlmIHRoZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0ZXh0dXJlIGlzIE1UTFN0
b3JlQWN0aW9uLAorICAgICAgICAgICAgLy8gaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRv
IHN0b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQgbWlnaHQgaW50cm9kdWNlCisgICAgICAgICAg
ICAvLyB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KKyAgICAgICAgICAgIC8vIENvbnNpZGVyIGFuIGlt
cHJvdmVtZW50IHN1Y2ggYXMgb25seSBzdG9yZSB0aGUgTVMgdGV4dHVyZSwgYW5kIHJlc29sdmUg
b25seSBhdAorICAgICAgICAgICAgLy8gdGhlIGVuZCBvZiByZWFsIHJlbmRlciBwYXNzIChub3Qg
cmVuZGVyIHBhc3MgdGhlIHdhcyBpbnRlcnJ1cHRlZCBieSBjb21wdXRlIHBhc3MpCisgICAgICAg
ICAgICAvLyBvciBiZWZvcmUgZ2xCbGl0RnJhbWVidWZmZXIgb3BlcmF0aW9uIHN0YXJ0cy4KICAg
ICAgICAgICAgIG9iakNSZW5kZXJQYXNzQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9IE1UTFN0b3Jl
QWN0aW9uU3RvcmVBbmRNdWx0aXNhbXBsZVJlc29sdmU7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0
aW9uRG9udENhcmUpCkBAIC0xMDM2LDYgKzEwNzAsMTEgQEAgdm9pZCBSZW5kZXJDb21tYW5kRW5j
b2Rlcjo6ZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oCiB9CiAKIHZvaWQgUmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmVuZEVuY29kaW5nKCkKK3sKKyAgICBlbmRFbmNvZGluZ0ltcGwodHJ1ZSk7Cit9CisK
K3ZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVy
RGlzY2FyZFNpbXVsYXRpb24pCiB7CiAgICAgaWYgKCF2YWxpZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMDUwLDExICsxMDg5LDExIEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nKCkKICAgICAgICAgZmluYWxpemVMb2FkU3RvcmVBY3Rpb24ob2JqQ1JlbmRlclBhc3NE
ZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOwogICAgIH0KIAotICAgIC8vIFVwZGF0ZSBkZXB0aCBz
dG9yZSBhY3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygpCisgICAg
Ly8gVXBkYXRlIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVuY29k
aW5nKCkKICAgICBvYmpDUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9u
ID0gbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKICAgICBmaW5h
bGl6ZUxvYWRTdG9yZUFjdGlvbihvYmpDUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50KTsK
IAotICAgIC8vIFVwZGF0ZSBzdGVuY2lsIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0
KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAvLyBVcGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3
ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQogICAgIG9iakNSZW5kZXJQYXNzRGVzYy5z
dGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbiA9CiAgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5z
dGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKICAgICBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlv
bihvYmpDUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQpOwpAQCAtMTA3NSwyNiArMTEx
NCw3OCBAQCB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZygpCiAKICAgICBD
b21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKTsKIAorI2lmIEFOR0xFX01UTF9TSU1VTEFURV9E
SVNDQVJEX0ZSQU1FQlVGRkVSCisgICAgaWYgKGNvbnNpZGVyRGlzY2FyZFNpbXVsYXRpb24pCisg
ICAgeworICAgICAgICBzaW11bGF0ZURpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgLy8gcmVzZXQgc3RhdGUKICAgICBtUmVuZGVyUGFzc0Rlc2MgPSBSZW5kZXJQYXNz
RGVzYygpOwogICAgIG1TdGF0ZUNhY2hlLnJlc2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIFJlbmRl
ckNvbW1hbmRFbmNvZGVyOjppbml0QXR0YWNobWVudFdyaXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JS
ZWN0KAotICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0YWNobWVudCkKK2lu
bGluZSB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0
IFRleHR1cmVSZWYgJnRleHR1cmUpCiB7Ci0gICAgVGV4dHVyZVJlZiB0ZXh0dXJlID0gYXR0YWNo
bWVudC50ZXh0dXJlOwogICAgIGlmICh0ZXh0dXJlKQogICAgIHsKICAgICAgICAgY21kQnVmZmVy
KCkuc2V0V3JpdGVEZXBlbmRlbmN5KHRleHR1cmUpOworICAgIH0KK30KIAotICAgICAgICBjb25z
dCBNaXBtYXBOYXRpdmVMZXZlbCAmbWlwTGV2ZWwgPSBhdHRhY2htZW50LmxldmVsOwordm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIoKQoreworICAg
IC8vIFNpbXVsYXRlIHRydWUgZnJhbWVidWZmZXIgZGlzY2FyZCBvcGVyYXRpb24gYnkgY2xlYXJp
bmcgdGhlIGZyYW1lYnVmZmVyCisjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVC
VUZGRVIKKyAgICBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7ICAgLy8gV2lsbCBiZSB1c2VkIHRvIG9i
dGFpbiBhIHNlZWQgZm9yIHRoZSByYW5kb20gbnVtYmVyIGVuZ2luZQorICAgIHN0ZDo6bXQxOTkz
NyBnZW4ocmQoKSk7ICAvLyBTdGFuZGFyZCBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSBzZWVkZWQg
d2l0aCByZCgpCisgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPGZsb2F0PiBkaXMo
MC4wLCAxLjBmKTsKKyAgICBib29sIGhhc0Rpc2NhcmQgPSBmYWxzZTsKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVudHM7ICsraSkK
KyAgICB7CisgICAgICAgIGlmIChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5z
dG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgICAgICB7CisgICAgICAg
ICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRB
Y3Rpb24gPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2Mu
Y29sb3JBdHRhY2htZW50c1tpXS5jbGVhckNvbG9yID0KKyAgICAgICAgICAgICAgICBNVExDbGVh
ckNvbG9yTWFrZShkaXMoZ2VuKSwgZGlzKGdlbiksIGRpcyhnZW4pLCBkaXMoZ2VuKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyUGFzc0Rl
c2MuY29sb3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlvbkxvYWQ7Cisg
ICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0
aCA9Ci0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRlZ2VyPihtUmVuZGVyUGFzc01heFNjaXNz
b3JSZWN0LndpZHRoLCB0ZXh0dXJlLT53aWR0aChtaXBMZXZlbCkpOwotICAgICAgICBtUmVuZGVy
UGFzc01heFNjaXNzb3JSZWN0LmhlaWdodCA9Ci0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRl
Z2VyPihtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0LmhlaWdodCwgdGV4dHVyZS0+aGVpZ2h0KG1p
cExldmVsKSk7CisgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQuc3RvcmVB
Y3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKKyAgICB7CisgICAgICAgIGhhc0Rpc2Nh
cmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRydWU7CisgICAgICAgIG1SZW5k
ZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25DbGVh
cjsKKyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5jbGVhckRlcHRoID0g
ZGlzKGdlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1SZW5kZXJQYXNzRGVz
Yy5kZXB0aEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworICAgIH0K
KworICAgIGlmIChtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQuc3RvcmVBY3Rpb24g
PT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKKyAgICB7CisgICAgICAgIGhhc0Rpc2NhcmQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0cnVlOworICAgICAgICBtUmVuZGVy
UGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNs
ZWFyOworICAgICAgICBtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQuY2xlYXJTdGVu
Y2lsID0gcmFuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUmVuZGVyUGFz
c0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOwog
ICAgIH0KKworICAgIGlmIChoYXNEaXNjYXJkKQorICAgIHsKKyAgICAgICAgYXV0byB0bXBEZXNj
ID0gbVJlbmRlclBhc3NEZXNjOworICAgICAgICByZXN0YXJ0KHRtcERlc2MpOworICAgICAgICBl
bmRFbmNvZGluZ0ltcGwoZmFsc2UpOworICAgIH0KKyNlbmRpZiAgLy8gQU5HTEVfTVRMX1NJTVVM
QVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKIH0KIAogdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
ZW5jb2RlTWV0YWxFbmNvZGVyKCkKQEAgLTExMDIsNyArMTE5Myw3IEBAIHZvaWQgUmVuZGVyQ29t
bWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAgICAgQU5HTEVfTVRMX09CSkNfU0NP
UEUKICAgICB7CiAgICAgICAgIEFOR0xFX01UTF9MT0coIkNyZWF0aW5nIG5ldyByZW5kZXIgY29t
bWFuZCBlbmNvZGVyIHdpdGggZGVzYzogJUAiLAotICAgICAgICAgICAgICAgICAgICAgIG1DYWNo
ZWRSZW5kZXJQYXNzRGVzY09iakMuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgIFttQ2Fj
aGVkUmVuZGVyUGFzc0Rlc2NPYmpDIGRlc2NyaXB0aW9uXSk7CiAKICAgICAgICAgaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IG1ldGFsQ21kRW5jb2RlciA9CiAgICAgICAgICAgICBbY21kQnVm
ZmVyKCkuZ2V0KCkgcmVuZGVyQ29tbWFuZEVuY29kZXJXaXRoRGVzY3JpcHRvcjptQ2FjaGVkUmVu
ZGVyUGFzc0Rlc2NPYmpDXTsKQEAgLTExMTAsNyArMTIwMSwxMSBAQCB2b2lkIFJlbmRlckNvbW1h
bmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQogICAgICAgICBzZXQobWV0YWxDbWRFbmNv
ZGVyKTsKIAogICAgICAgICAvLyBWZXJpZnkgdGhhdCBpdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVs
bHkKLSAgICAgICAgQVNTRVJUKG1ldGFsQ21kRW5jb2Rlcik7CisgICAgICAgIEFTU0VSVChnZXQo
KSk7CisKKyAgICAgICAgLy8gV29yay1hcm91bmQgZHJpdmVyIGJ1ZyBvbiBpT1MgZGV2aWNlczog
c3RlbmNpbCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIHplcm8KKyAgICAgICAgLy8gZXZlbiBp
ZiB0aGUgZG9jIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYWxyZWFkeSB6ZXJvLgorICAgICAg
ICBbbWV0YWxDbWRFbmNvZGVyIHNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZTowXTsKIAogICAgICAg
ICBpZiAobUxhYmVsKQogICAgICAgICB7CkBAIC0xMTE5LDcgKzEyMTQsNyBAQCB2b2lkIFJlbmRl
ckNvbW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQogCiAgICAgICAgIHdoaWxlICht
Q29tbWFuZHMuZ29vZCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBDbWRUeXBlIGNtZFR5cGUg
ICAgICAgICAgICA9IG1Db21tYW5kcy5mZXRjaDxDbWRUeXBlPigpOworICAgICAgICAgICAgYXV0
byBjbWRUeXBlICAgICAgICAgICAgICAgPSBtQ29tbWFuZHMuZmV0Y2g8Q21kVHlwZT4oKTsKICAg
ICAgICAgICAgIENvbW1hbmRFbmNvZGVyRnVuYyBlbmNvZGVyID0gZ0NvbW1hbmRFbmNvZGVyc1tz
dGF0aWNfY2FzdDxpbnQ+KGNtZFR5cGUpXTsKICAgICAgICAgICAgIGVuY29kZXIobWV0YWxDbWRF
bmNvZGVyLCAmbUNvbW1hbmRzKTsKICAgICAgICAgfQpAQCAtMTE0Miw0MSArMTIzNywzNCBAQCBS
ZW5kZXJDb21tYW5kRW5jb2RlciAmUmVuZGVyQ29tbWFuZEVuY29kZXI6OnJlc3RhcnQoY29uc3Qg
UmVuZGVyUGFzc0Rlc2MgJmRlc2MpCiAgICAgICAgIGVuZEVuY29kaW5nKCk7CiAgICAgfQogCi0g
ICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFkeSgpKQorICAgIGlmICghY21kQnVmZmVyKCkudmFsaWQo
KSkKICAgICB7CiAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9
CiAKLSAgICBtTGFiZWwucmVzZXQoKTsKKyAgICBtUmVuZGVyUGFzc0Rlc2MgPSBkZXNjOworICAg
IG1SZWNvcmRpbmcgICAgICA9IHRydWU7CisgICAgbUhhc0RyYXdDYWxscyAgID0gZmFsc2U7CiAK
LSAgICBtUmVuZGVyUGFzc0Rlc2MgICAgICAgICAgID0gZGVzYzsKLSAgICBtUmVjb3JkaW5nICAg
ICAgICAgICAgICAgID0gdHJ1ZTsKLSAgICBtSGFzRHJhd0NhbGxzICAgICAgICAgICAgID0gZmFs
c2U7Ci0gICAgbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdCA9IHsueCAgICAgID0gMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC55ICAgICAgPSAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLndpZHRoICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TlNVSW50ZWdl
cj46Om1heCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhlaWdodCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8TlNVSW50ZWdlcj46Om1heCgpfTsKLQotICAgIC8vIFNldCB3cml0
aW5nIGRlcGVuZGVuY3kgJiBjb25zdHJhaW4gdGhlIHNjaXNzb3IgcmVjdAorICAgIC8vIG1hc2sg
d3JpdGluZyBkZXBlbmRlbmN5ICYgc2V0IGFwcHJvcHJpYXRlIHN0b3JlIG9wdGlvbnMKICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVu
dHM7ICsraSkKICAgICB7Ci0gICAgICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5k
U2Npc3NvclJlY3QobVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworICAgICAg
ICBpbml0V3JpdGVEZXBlbmRlbmN5KG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ld
LnRleHR1cmUoKSk7CiAgICAgfQogCi0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lB
bmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50KTsKKyAgICBpbml0
V3JpdGVEZXBlbmRlbmN5KG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSgp
KTsKIAotICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJlY3QobVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKyAgICBpbml0V3JpdGVEZXBlbmRlbmN5
KG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpOwogCiAgICAgLy8g
Q29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjcmlwdG9yCiAgICAgbVJlbmRlclBhc3NEZXNjLmNv
bnZlcnRUb01ldGFsRGVzYyhtQ2FjaGVkUmVuZGVyUGFzc0Rlc2NPYmpDKTsKIAotICAgIC8vIFRo
ZSBhY3R1YWwgT2JqZWN0aXZlLUMgZW5jb2RlciB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIgaW4gZW5k
RW5jb2RpbmcoKSwgd2UgZG8gc28gaW4KLSAgICAvLyBvcmRlciB0byBiZSBhYmxlIHRvIHNvcnQg
dGhlIGNvbW1hbmRzIG9yIGRvIHRoZSBwcmVwcm9jZXNzaW5nIGJlZm9yZSB0aGUgYWN0dWFsCi0g
ICAgLy8gZW5jb2RpbmcuCisgICAgLy8gVGhlIGFjdHVhbCBPYmplY3RpdmUtQyBlbmNvZGVyIHdp
bGwgYmUgY3JlYXRlZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBkbyBzbyBpbiBvcmRlcgor
ICAgIC8vIHRvIGJlIGFibGUgdG8gc29ydCB0aGUgY29tbWFuZHMgb3IgZG8gdGhlIHByZXByb2Nl
c3NpbmcgYmVmb3JlIHRoZSBhY3R1YWwgZW5jb2RpbmcuCiAKLSAgICAvLyBTaW5jZSB3ZSBkZWZl
ciB0aGUgbmF0aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxs
IGNvbW1hbmQgYnVmZmVyCi0gICAgLy8gdGhhdCB0aGlzIG9iamVjdCBpcyB0aGUgYWN0aXZlIGVu
Y29kZXI6CisgICAgLy8gU2luY2Ugd2UgZGVmZXIgdGhlIG5hdGl2ZSBlbmNvZGVyIGNyZWF0aW9u
LCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgdGVsbCBjb21tYW5kIGJ1ZmZlciB0aGF0CisgICAgLy8g
dGhpcyBvYmplY3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgogICAgIGNtZEJ1ZmZlcigpLnNldEFj
dGl2ZUNvbW1hbmRFbmNvZGVyKHRoaXMpOwogCiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTMwMiwx
NiArMTM5MCw2IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
c2V0U2Npc3NvclJlY3QoY29uc3QgTVRMU2Npc3NvclJlY3QKICAgICB7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9Ci0KLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkocmVjdC54ICsgcmVjdC53
aWR0aCA+IG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3Qud2lkdGggfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgcmVjdC55ICsgcmVjdC5oZWlnaHQgPiBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0
LmhlaWdodCkpCi0gICAgewotICAgICAgICBXQVJOKCkgPDwgIk91dCBvZiBib3VuZCBzY2lzc29y
IHJlY3QgZGV0ZWN0ZWQgIiA8PCByZWN0LnggPDwgIiAiIDw8IHJlY3QueSA8PCAiICIKLSAgICAg
ICAgICAgICAgIDw8IHJlY3Qud2lkdGggPDwgIiAiIDw8IHJlY3QuaGVpZ2h0OwotICAgICAgICAv
LyBPdXQgb2YgYm91bmQgcmVjdCB3aWxsIGNyYXNoIHRoZSBtZXRhbCBydW50aW1lLCBpZ25vcmUg
aXQuCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KICAgICBtU3RhdGVDYWNoZS5zY2lz
c29yUmVjdCA9IHJlY3Q7CiAKICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpTZXRTY2lzc29y
UmVjdCkucHVzaChyZWN0KTsKQEAgLTEzODMsNyArMTQ2MSw3IEBAIFJlbmRlckNvbW1hbmRFbmNv
ZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6Y29tbW9uU2V0QnVmZmVyKGdsOjpTaGFkZXJUeXBl
IHNoYWRlCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBJZiBidWZmZXIgYWxyZWFkeSBib3VuZCBidXQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0LCB0aGVu
IHVwZGF0ZSB0aGUgb2Zmc2V0IG9ubHkuCisgICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJv
dW5kIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZlciBvbmx5
LgogICAgICAgICBzaGFkZXJTdGF0ZXMuYnVmZmVyT2Zmc2V0c1tpbmRleF0gPSBvZmZzZXQ7CiAK
ICAgICAgICAgbUNvbW1hbmRzLnB1c2goc3RhdGljX2Nhc3Q8Q21kVHlwZT4obVNldEJ1ZmZlck9m
ZnNldENtZHNbc2hhZGVyVHlwZV0pKQpAQCAtMTQ5MCwxMiArMTU2OCw2IEBAIFJlbmRlckNvbW1h
bmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyhNVExQcmltaXRpdmVUeXBlIHBy
aW1pdGl2ZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQpCiB7Ci0gICAgaWYgKEFO
R0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAgewotICAgICAg
ICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0
ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAg
IG1IYXNEcmF3Q2FsbHMgPSB0cnVlOwogICAgIG1Db21tYW5kcy5wdXNoKENtZFR5cGU6OkRyYXcp
LnB1c2gocHJpbWl0aXZlVHlwZSkucHVzaCh2ZXJ0ZXhTdGFydCkucHVzaCh2ZXJ0ZXhDb3VudCk7
CiAKQEAgLTE1MDcsMTIgKzE1NzksNiBAQCBSZW5kZXJDb21tYW5kRW5jb2RlciAmUmVuZGVyQ29t
bWFuZEVuY29kZXI6OmRyYXdJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHZlcnRleENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKIHsKLSAgICBpZiAoQU5HTEVf
VU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8v
IElnbm9yZSBkcmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNl
dCBwcmlvciB0byB0aGlzLgotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCiAgICAgbUhh
c0RyYXdDYWxscyA9IHRydWU7CiAgICAgbUNvbW1hbmRzLnB1c2goQ21kVHlwZTo6RHJhd0luc3Rh
bmNlZCkKICAgICAgICAgLnB1c2gocHJpbWl0aXZlVHlwZSkKQEAgLTE1MjksMTMgKzE1OTUsNyBA
QCBSZW5kZXJDb21tYW5kRW5jb2RlciAmUmVuZGVyQ29tbWFuZEVuY29kZXI6OmRyYXdJbmRleGVk
KE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgYnVmZmVyT2Zmc2V0KQogewotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2Fj
aGUucmVuZGVyUGlwZWxpbmUpKQotICAgIHsKLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBp
ZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWlu
ZGV4QnVmZmVyKSkKKyAgICBpZiAoIWluZGV4QnVmZmVyKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KQEAgLTE1NjAsMTMgKzE2MjAsNyBAQCBSZW5kZXJDb21tYW5kRW5jb2Rl
ciAmUmVuZGVyQ29tbWFuZEVuY29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2
ZVR5cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0
YW5jZXMpCiB7Ci0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBl
bGluZSkpCi0gICAgewotICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5v
IHJlbmRlciBwaXBlbGluZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQor
ICAgIGlmICghaW5kZXhCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQpAQCAtMTU5NCwxMyArMTY0OCw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21t
YW5kRW5jb2Rlcjo6ZHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4KAogICAgIHVpbnQzMl90
IGluc3RhbmNlcywKICAgICB1aW50MzJfdCBiYXNlVmVydGV4KQogewotICAgIGlmIChBTkdMRV9V
TkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQotICAgIHsKLSAgICAgICAgLy8g
SWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgc2V0
IHByaW9yIHRvIHRoaXMuCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBpZiAo
QU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKyAgICBpZiAoIWluZGV4QnVmZmVyKQogICAg
IHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTE2NzMsNiArMTcyMSwxMiBAQCBS
ZW5kZXJDb21tYW5kRW5jb2RlciAmUmVuZGVyQ29tbWFuZEVuY29kZXI6Om1lbW9yeUJhcnJpZXJX
aXRoUmVzb3VyY2UoY29uc3QgQnVmZgogICAgIHJldHVybiAqdGhpczsKIH0KIAordm9pZCBSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdTaWduSW1wbChOU1N0cmluZyAqbGFiZWwpCit7
CisgICAgLy8gRGVmZXIgdGhlIGluc2VydGlvbiB1bnRpbCBlbmRFbmNvZGluZygpCisgICAgbUNv
bW1hbmRzLnB1c2goQ21kVHlwZTo6SW5zZXJ0RGVidWdzaWduKS5wdXNoKFtsYWJlbCBBTkdMRV9N
VExfUkVUQUlOXSk7Cit9CisKIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OnB1c2hEZWJ1Z0dy
b3VwKE5TU3RyaW5nICpsYWJlbCkKIHsKICAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGls
IGVuZEVuY29kaW5nKCkKQEAgLTE3OTksNyArMTg1Myw3IEBAIEJsaXRDb21tYW5kRW5jb2RlciAm
QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKyAgICAgICAg
aWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXNldCgp
OwogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTk2Miw2ICsyMDE2LDY2IEBAIEJsaXRD
b21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpmaWxsQnVmZmVyKGNvbnN0IEJ1ZmZl
clJlZiAmYnVmZmVyLAogICAgIHJldHVybiAqdGhpczsKIH0KIAorQmxpdENvbW1hbmRFbmNvZGVy
ICZCbGl0Q29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJlKGNvbnN0IFRleHR1cmVSZWYgJnNyYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBzcmNTdGFydFNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0TGV2ZWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dHVyZVJlZiAmZHN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGRzdFN0YXJ0U2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRMZXZlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzbGljZUNvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGxldmVsQ291bnQpCit7CisgICAgaWYgKCFzcmMgfHwgIWRzdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjbWRCdWZmZXIoKS5zZXRSZWFkRGVwZW5k
ZW5jeShzcmMpOworICAgIGNtZEJ1ZmZlcigpLnNldFdyaXRlRGVwZW5kZW5jeShkc3QpOworCisj
aWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorICAgIGlm
IChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMy4wKSkKKyAgICB7Cisg
ICAgICAgIFtnZXQoKSBjb3B5RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorICAgICAgICAgICAgICAg
ICAgIHNvdXJjZVNsaWNlOnNyY1N0YXJ0U2xpY2UKKyAgICAgICAgICAgICAgICAgICBzb3VyY2VM
ZXZlbDpzcmNTdGFydExldmVsCisgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5n
ZXQoKQorICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRzdFN0YXJ0U2xpY2UKKyAgICAg
ICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkc3RTdGFydExldmVsCisgICAgICAgICAgICAgICAg
ICAgIHNsaWNlQ291bnQ6c2xpY2VDb3VudAorICAgICAgICAgICAgICAgICAgICBsZXZlbENvdW50
OmxldmVsQ291bnRdOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIE1U
TE9yaWdpbiBvcmlnaW4gPSBNVExPcmlnaW5NYWtlKDAsIDAsIDApOworICAgICAgICBmb3IgKHVp
bnQzMl90IHNsaWNlID0gMDsgc2xpY2UgPCBzbGljZUNvdW50OyArK3NsaWNlKQorICAgICAgICB7
CisgICAgICAgICAgICB1aW50MzJfdCBzcmNTbGljZSA9IHNyY1N0YXJ0U2xpY2UgKyBzbGljZTsK
KyAgICAgICAgICAgIHVpbnQzMl90IGRzdFNsaWNlID0gZHN0U3RhcnRTbGljZSArIHNsaWNlOwor
ICAgICAgICAgICAgZm9yICh1aW50MzJfdCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsg
KytsZXZlbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtdGw6Ok1pcG1hcE5hdGl2
ZUxldmVsIHNyY0xldmVsID0gbXRsOjpNaXBtYXBOYXRpdmVMZXZlbChzcmNTdGFydExldmVsICsg
bGV2ZWwpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdExldmVsID0gZHN0U3RhcnRMZXZl
bCArIGxldmVsOworICAgICAgICAgICAgICAgIE1UTFNpemUgc3JjU2l6ZSA9CisgICAgICAgICAg
ICAgICAgICAgIE1UTFNpemVNYWtlKHNyYy0+d2lkdGgoc3JjTGV2ZWwpLCBzcmMtPmhlaWdodChz
cmNMZXZlbCksIHNyYy0+ZGVwdGgoc3JjTGV2ZWwpKTsKKworICAgICAgICAgICAgICAgIFtnZXQo
KSBjb3B5RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlU2xpY2U6c3JjU2xpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxl
dmVsOnNyY0xldmVsLmdldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdp
bjpvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNyY1NpemUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmRzdC0+Z2V0KCkKKyAgICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRzdFNsaWNlCisgICAgICAgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkc3RMZXZlbAorICAgICAgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46b3JpZ2luXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAqdGhpczsKK30KKwogQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29t
bWFuZEVuY29kZXI6OmdlbmVyYXRlTWlwbWFwc0ZvclRleHR1cmUoY29uc3QgVGV4dHVyZVJlZiAm
dGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUpCkBAIC0xOTc0LDcgKzIwODgsNyBAQCBCbGl0
Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9yVGV4
dHVyZShjb25zdCBUZXh0dXJlUgogCiAgICAgcmV0dXJuICp0aGlzOwogfQotQmxpdENvbW1hbmRF
bmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoQnVmZmVyICpi
dWZmZXIpCitCbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25p
emVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcikKIHsKICAgICBpZiAoIWJ1ZmZlcikK
ICAgICB7CkBAIC0xOTg5LDcgKzIxMDMsNyBAQCBCbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21t
YW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlcikKICNlbmRpZgog
ICAgIHJldHVybiAqdGhpczsKIH0KLUJsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNv
ZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmUpCitCbGl0Q29tbWFuZEVu
Y29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNvdXJjZShjb25zdCBUZXh0
dXJlUmVmICZ0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICB7CkBAIC0yMDI4LDcg
KzIxNDIsNyBAQCBDb21wdXRlQ29tbWFuZEVuY29kZXIgJkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6
cmVzdGFydCgpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisgICAgICAgIGlmICghY21kQnVmZmVyKCkudmFs
aWQoKSkKICAgICAgICAgewogICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgIHJldHVy
biAqdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oCmluZGV4IDk3Y2NiOTNmOTZj
MjZjNGZmYjk2Njk5M2VmYmE0MWJhM2YxNmY0ZjguLjNmYzVlMzlkMTc4YzAxNDBhYWUyNzg0NTM3
MTM5YThkNDFjMDZmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaApAQCAtMjcs
OSArMjcsMTggQEAKICNpbmNsdWRlICJsaWJBTkdMRS9hbmdsZXR5cGVzLmgiCiAKICNpZiBUQVJH
RVRfT1NfSVBIT05FCisjICAgIGlmICFkZWZpbmVkKF9fSVBIT05FXzExXzApCisjICAgICAgICBk
ZWZpbmUgX19JUEhPTkVfMTFfMCAxMTAwMDAKKyMgICAgZW5kaWYKICMgICAgaWYgIWRlZmluZWQo
QU5HTEVfSU9TX0RFUExPWV9UQVJHRVQpCiAjICAgICAgICBkZWZpbmUgQU5HTEVfSU9TX0RFUExP
WV9UQVJHRVQgX19JUEhPTkVfMTFfMAogIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX0lQ
SE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEKQorIyAgICAgICAgZGVmaW5lIF9fSVBIT05FX09T
X1ZFUlNJT05fTUFYX0FMTE9XRUQgX19JUEhPTkVfMTFfMAorIyAgICBlbmRpZgorIyAgICBpZiAh
ZGVmaW5lZChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisjICAgICAgICBkZWZpbmUgX19U
Vl9PU19WRVJTSU9OX01BWF9BTExPV0VEIF9fSVBIT05FXzExXzAKKyMgICAgZW5kaWYKICNlbmRp
ZgogCiAjaWYgIWRlZmluZWQoVEFSR0VUX09TX01BQ0NBVEFMWVNUKQpAQCAtNjYsNiArNzUsNyBA
QCBuYW1lc3BhY2UgZWdsCiB7CiBjbGFzcyBEaXNwbGF5OwogY2xhc3MgSW1hZ2U7CitjbGFzcyBT
dXJmYWNlOwogfSAgLy8gbmFtZXNwYWNlIGVnbAogCiAjZGVmaW5lIEFOR0xFX0dMX09CSkVDVFNf
WChQUk9DKSBcCkBAIC0xMDIsNiArMTEyLDcgQEAgY2xhc3MgVGV4dHVyZU10bDsKIGNsYXNzIFBy
b2dyYW1NdGw7CiBjbGFzcyBTYW1wbGVyTXRsOwogY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGw7
CitjbGFzcyBTdXJmYWNlTXRsUHJvdG9jb2w7CiAKIEFOR0xFX0dMX09CSkVDVFNfWChBTkdMRV9Q
UkVfREVDTEFSRV9NVExfT0JKRUNUKQogCkBAIC0xMjgsNyArMTM5LDggQEAgY29uc3RleHByIHNp
emVfdCBrRGVmYXVsdEF0dHJpYnV0ZVNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KTsKIC8vIE1ldGFs
IGxpbWl0cwogY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJCdWZmZXJzICAgICA9IDMxOwog
Y29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJTYW1wbGVycyAgICA9IDE2OwotY29uc3RleHBy
IHNpemVfdCBrRGVmYXVsdFVuaWZvcm1zTWF4U2l6ZSA9IDQgKiAxMDI0OworY29uc3RleHByIHNp
emVfdCBrSW5saW5lQ29uc3REYXRhTWF4U2l6ZSA9IDQgKiAxMDI0OworY29uc3RleHByIHNpemVf
dCBrRGVmYXVsdFVuaWZvcm1zTWF4U2l6ZSA9IGtJbmxpbmVDb25zdERhdGFNYXhTaXplOwogY29u
c3RleHByIHVpbnQzMl90IGtNYXhWaWV3cG9ydHMgICAgICAgICA9IDE7CiAKIGNvbnN0ZXhwciB1
aW50MzJfdCBrVmVydGV4QXR0cmliQnVmZmVyU3RyaWRlQWxpZ25tZW50ID0gNDsKQEAgLTE0Miw3
ICsxNTQsNyBAQCBjb25zdGV4cHIgdWludDMyX3Qga0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50
ICAgICAgID0gNDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrQXJndW1lbnRCdWZmZXJPZmZzZXRBbGln
bm1lbnQgICAgPSBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZzZXRNaW5BbGlnbm1lbnQ7CiBjb25z
dGV4cHIgdWludDMyX3Qga1RleHR1cmVUb0J1ZmZlckJsaXR0aW5nQWxpZ25tZW50ID0gMjU2Owog
Ci0vLyBGcm9udCBlbmQgYmluZGluZyBsaW1pdHMKKy8vIEZvbnQgZW5kIGJpbmRpbmcgbGltaXRz
CiBjb25zdGV4cHIgdWludDMyX3Qga01heEdMU2FtcGxlckJpbmRpbmdzID0gMiAqIGtNYXhTaGFk
ZXJTYW1wbGVyczsKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAy
ICoga01heFNoYWRlclVCT3M7CiAKQEAgLTE1NSwyMSArMTY3LDIzIEBAIGNvbnN0ZXhwciB1aW50
MzJfdCBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggPSBrVmJvQmluZGluZ0luZGV4U3RhcnQg
KyBrTWF4VmVyCiBjb25zdGV4cHIgdWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4
ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMTsKIC8vIEJpbmRpbmcgaW5kZXggZm9y
IGRlZmF1bHQgdW5pZm9ybXM6CiBjb25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0Jp
bmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCArIDM7Ci0vLyBCaW5kaW5n
IGluZGV4IGZvciBVQk8ncyBhcmd1bWVudCBidWZmZXIgb3Igc3RhcnRpbmcgZGlzY3JldGUgc2xv
dAotY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtE
ZWZhdWx0VW5pZm9ybXNCaW5kaW5nSW5kZXggKyAxOworLy8gQmluZGluZyBpbmRleCBmb3IgVHJh
bnNmb3JtIEZlZWRiYWNrIEJ1ZmZlcnMgKDQpCitjb25zdGV4cHIgdWludDMyX3Qga1RyYW5zZm9y
bUZlZWRiYWNrQmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7
CisvLyBCaW5kaW5nIGluZGV4IGZvciBzaGFkb3cgc2FtcGxlcnMnIGNvbXBhcmUgbW9kZXMKK2Nv
bnN0ZXhwciB1aW50MzJfdCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCA9
IGtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJbmRleCArIDQ7CisvLyBCaW5kaW5nIGluZGV4IGZv
ciBVQk8ncyBhcmd1bWVudCBidWZmZXIKK2NvbnN0ZXhwciB1aW50MzJfdCBrVUJPQXJndW1lbnRC
dWZmZXJCaW5kaW5nSW5kZXggPSBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRl
eCArIDE7CiAKLWNvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tBbGwgPSAweGZmOyAgLy8g
T25seSA4IGJpdHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKK2NvbnN0ZXhwciB1aW50MzJfdCBrU3Rl
bmNpbE1hc2tBbGwgPSAweGZmOyAgLy8gT25seSA4IGJpdCBzdGVuY2lsIGlzIHN1cHBvcnRlZAog
CiAvLyBUaGlzIHNwZWNpYWwgY29uc3RhbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFy
dGljdWxhciB2ZXJ0ZXggZGVzY3JpcHRvcidzIGJ1ZmZlciBsYXlvdXQKIC8vIGluZGV4IGlzIHVu
dXNlZC4KIGNvbnN0ZXhwciBNVExWZXJ0ZXhTdGVwRnVuY3Rpb24ga1ZlcnRleFN0ZXBGdW5jdGlv
bkludmFsaWQgPQogICAgIHN0YXRpY19jYXN0PE1UTFZlcnRleFN0ZXBGdW5jdGlvbj4oMHhmZik7
CiAKLWNvbnN0ZXhwciBpbnQga0VtdWxhdGVkQWxwaGFWYWx1ZSA9IDE7Ci0KLWNvbnN0ZXhwciBz
aXplX3Qga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSA9IHNpemVvZih1aW50NjRfdCk7Citjb25z
dGV4cHIgZmxvYXQga0VtdWxhdGVkQWxwaGFWYWx1ZSA9IDEuMGY7CiAKLWNvbnN0ZXhwciBnbDo6
VmVyc2lvbiBrTWF4U3VwcG9ydGVkR0xWZXJzaW9uID0gZ2w6OlZlcnNpb24oMywgMCk7Citjb25z
dGV4cHIgdWludDMyX3Qga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSA9IHNpemVvZih1aW50NjRf
dCk7CiAKIC8vIFdvcmstYXJvdW5kIHRoZSBlbnVtIGlzIG5vdCBhdmFpbGFibGUgb24gbWFjT1MK
ICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVApAQCAtMTc5LDEzICsx
OTMsMTEgQEAgY29uc3RleHByIE1UTEJsaXRPcHRpb24ga0JsaXRPcHRpb25Sb3dMaW5lYXJQVlJU
QyAgICAgICAgICA9IE1UTEJsaXRPcHRpb25Sb3dMaW4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChf
X0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQotIyAgICBkZWZpbmUgQU5HTEVf
TVRMX1NXSVpaTEVfQVZBSUxBQkxFIDEKIHVzaW5nIFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgICAg
ICAgICAgICAgICAgICAgPSBNVExUZXh0dXJlU3dpenpsZUNoYW5uZWxzOwogdXNpbmcgUmVuZGVy
U3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE1UTFJlbmRlclN0YWdlczsKIGNv
bnN0ZXhwciBNVExSZW5kZXJTdGFnZXMga1JlbmRlclN0YWdlVmVydGV4ICAgPSBNVExSZW5kZXJT
dGFnZVZlcnRleDsKIGNvbnN0ZXhwciBNVExSZW5kZXJTdGFnZXMga1JlbmRlclN0YWdlRnJhZ21l
bnQgPSBNVExSZW5kZXJTdGFnZUZyYWdtZW50OwogI2Vsc2UKLSMgICAgZGVmaW5lIEFOR0xFX01U
TF9TV0laWkxFX0FWQUlMQUJMRSAwCiB1c2luZyBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gaW50OwogdXNpbmcgUmVuZGVyU3RhZ2VzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGludDsKIGNvbnN0ZXhwciBSZW5k
ZXJTdGFnZXMga1JlbmRlclN0YWdlVmVydGV4ICAgICAgICAgICAgICAgICAgPSAxOwpAQCAtMjE5
LDEyICsyMzEsMTYgQEAgc3RydWN0IEltcGxUeXBlSGVscGVyPGVnbDo6RGlzcGxheT4KIHsKICAg
ICB1c2luZyBJbXBsVHlwZSA9IERpc3BsYXlNdGw7CiB9OwotCit0ZW1wbGF0ZSA8Pgorc3RydWN0
IEltcGxUeXBlSGVscGVyPGVnbDo6U3VyZmFjZT4KK3sKKyAgICB1c2luZyBJbXBsVHlwZSA9IFN1
cmZhY2VNdGxQcm90b2NvbDsKK307CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHVzaW5nIEdldElt
cGxUeXBlID0gdHlwZW5hbWUgSW1wbFR5cGVIZWxwZXI8VD46OkltcGxUeXBlOwogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLUdldEltcGxUeXBlPFQ+ICpHZXRJbXBsKGNvbnN0IFQgKl9Ob25udWxs
IGdsT2JqZWN0KQorR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29uc3QgVCAqZ2xPYmplY3QpCiB7
CiAgICAgcmV0dXJuIEdldEltcGxBczxHZXRJbXBsVHlwZTxUPj4oZ2xPYmplY3QpOwogfQpAQCAt
MzQ2LDIxICszNjIsMTYgQEAgdXNpbmcgQXV0b09iakNPYmogPSBBdXRvT2JqQ1B0cjxUICo+Owog
CiAvLyBOT1RFOiBTaGFyZWRFdmVudCBpcyBvbmx5IGRlY2xhcmVkIG9uIGlPUyAxMi4wKyBvciBt
YWMgMTAuMTQrCiAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEw
XzE0KQotIyAgICBkZWZpbmUgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRSAxCiB1c2luZyBTaGFy
ZWRFdmVudFJlZiA9IEF1dG9PYmpDUHRyPGlkPE1UTFNoYXJlZEV2ZW50Pj47CiAjZWxzZQotIyAg
ICBkZWZpbmUgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRSAwCiB1c2luZyBTaGFyZWRFdmVudFJl
ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQXV0b09iakNPYmo8TlNP
YmplY3Q+OwogI2VuZGlmCiAKIC8vIFRoZSBuYXRpdmUgaW1hZ2UgaW5kZXggdXNlZCBieSBNZXRh
bCBiYWNrLWVuZCwgIHRoZSBpbWFnZSBpbmRleCB1c2VzIG5hdGl2ZSBtaXBtYXAgbGV2ZWwgaW5z
dGVhZAogLy8gb2YgInZpcnR1YWwiIGxldmVsIG1vZGlmaWVkIGJ5IE9wZW5HTCdzIGJhc2UgbGV2
ZWwuCiB1c2luZyBNaXBtYXBOYXRpdmVMZXZlbCA9IGdsOjpMZXZlbEluZGV4V3JhcHBlcjx1aW50
MzJfdD47Ci0KIGNvbnN0ZXhwciBNaXBtYXBOYXRpdmVMZXZlbCBrWmVyb05hdGl2ZU1pcExldmVs
KDApOwotCiBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4SXRlcmF0b3I7Ci0KIGNsYXNzIEltYWdlTmF0
aXZlSW5kZXggZmluYWwKIHsKICAgcHVibGljOgpAQCAtMzcwLDU1ICszODEsNDIgQEAgY2xhc3Mg
SW1hZ2VOYXRpdmVJbmRleCBmaW5hbAogICAgICAgICBtTmF0aXZlSW5kZXggPSBnbDo6SW1hZ2VJ
bmRleDo6TWFrZUZyb21UeXBlKHNyYy5nZXRUeXBlKCksIHNyYy5nZXRMZXZlbEluZGV4KCkgLSBi
YXNlTGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLmdldExheWVySW5kZXgoKSwgc3JjLmdldExheWVyQ291bnQoKSk7CiAgICAgfQot
CiAgICAgc3RhdGljIEltYWdlTmF0aXZlSW5kZXggRnJvbUJhc2VaZXJvR0xJbmRleChjb25zdCBn
bDo6SW1hZ2VJbmRleCAmc3JjKQogICAgIHsKICAgICAgICAgcmV0dXJuIEltYWdlTmF0aXZlSW5k
ZXgoc3JjLCAwKTsKICAgICB9Ci0KICAgICBNaXBtYXBOYXRpdmVMZXZlbCBnZXROYXRpdmVMZXZl
bCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gTWlwbWFwTmF0aXZlTGV2ZWwobU5hdGl2
ZUluZGV4LmdldExldmVsSW5kZXgoKSk7CiAgICAgfQotCiAgICAgZ2w6OlRleHR1cmVUeXBlIGdl
dFR5cGUoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXguZ2V0VHlwZSgpOyB9CiAgICAgR0xp
bnQgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRMYXllcklu
ZGV4KCk7IH0KICAgICBHTGludCBnZXRMYXllckNvdW50KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2
ZUluZGV4LmdldExheWVyQ291bnQoKTsgfQogICAgIEdMaW50IGN1YmVNYXBGYWNlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXguY3ViZU1hcEZhY2VJbmRleCgpOyB9Ci0KICAgICBi
b29sIGlzTGF5ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5pc0xheWVyZWQoKTsg
fQogICAgIGJvb2wgaGFzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXguaGFzTGF5
ZXIoKTsgfQogICAgIGJvb2wgaGFzM0RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRl
eC5oYXMzRExheWVyKCk7IH0KICAgICBib29sIHVzZXNUZXgzRCgpIGNvbnN0IHsgcmV0dXJuIG1O
YXRpdmVJbmRleC51c2VzVGV4M0QoKTsgfQotCiAgICAgYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1OYXRpdmVJbmRleC52YWxpZCgpOyB9Ci0KICAgICBJbWFnZU5hdGl2ZUluZGV4SXRlcmF0
b3IgZ2V0TGF5ZXJJdGVyYXRvcihHTGludCBsYXllckNvdW50KSBjb25zdDsKLQogICBwcml2YXRl
OgogICAgIGdsOjpJbWFnZUluZGV4IG1OYXRpdmVJbmRleDsKIH07Ci0KIGNsYXNzIEltYWdlTmF0
aXZlSW5kZXhJdGVyYXRvciBmaW5hbAogewogICBwdWJsaWM6CiAgICAgSW1hZ2VOYXRpdmVJbmRl
eCBuZXh0KCkgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChtTmF0aXZlSW5kZXhJdGUubmV4dCgp
LCAwKTsgfQogICAgIEltYWdlTmF0aXZlSW5kZXggY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIElt
YWdlTmF0aXZlSW5kZXgobU5hdGl2ZUluZGV4SXRlLmN1cnJlbnQoKSwgMCk7IH0KICAgICBib29s
IGhhc05leHQoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXhJdGUuaGFzTmV4dCgpOyB9Ci0K
ICAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGNsYXNzIGlzIG9ubHkgY29uc3RydWN0YWJsZSBmcm9t
IEltYWdlTmF0aXZlSW5kZXgKICAgICBmcmllbmQgY2xhc3MgSW1hZ2VOYXRpdmVJbmRleDsKLQog
ICAgIGV4cGxpY2l0IEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcihjb25zdCBnbDo6SW1hZ2VJbmRl
eEl0ZXJhdG9yICZiYXNlWmVyb1NyYykKICAgICAgICAgOiBtTmF0aXZlSW5kZXhJdGUoYmFzZVpl
cm9TcmMpCiAgICAge30KLQogICAgIGdsOjpJbWFnZUluZGV4SXRlcmF0b3IgbU5hdGl2ZUluZGV4
SXRlOwogfTsKLQogdXNpbmcgQ2xlYXJDb2xvclZhbHVlQnl0ZXMgPSBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDQgKiBzaXplb2YoZmxvYXQpPjsKLQogY2xhc3MgQ2xlYXJDb2xvclZhbHVlCiB7CiAgIHB1
YmxpYzoKQEAgLTQzNywyMiArNDM1LDE1IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQogICAgIGNv
bnN0ZXhwciBDbGVhckNvbG9yVmFsdWUoY29uc3QgQ2xlYXJDb2xvclZhbHVlICZzcmMpCiAgICAg
ICAgIDogbVR5cGUoc3JjLm1UeXBlKSwgbVZhbHVlQnl0ZXMoc3JjLm1WYWx1ZUJ5dGVzKQogICAg
IHt9Ci0KICAgICBNVExDbGVhckNvbG9yIHRvTVRMQ2xlYXJDb2xvcigpIGNvbnN0OwotCiAgICAg
UGl4ZWxUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQotCiAgICAgY29uc3Qg
Q2xlYXJDb2xvclZhbHVlQnl0ZXMgJmdldFZhbHVlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtVmFs
dWVCeXRlczsgfQotCiAgICAgQ2xlYXJDb2xvclZhbHVlICZvcGVyYXRvcj0oY29uc3QgQ2xlYXJD
b2xvclZhbHVlICZzcmMpOwotCiAgICAgdm9pZCBzZXRBc0Zsb2F0KGZsb2F0IHIsIGZsb2F0IGcs
IGZsb2F0IGIsIGZsb2F0IGEpOwogICAgIHZvaWQgc2V0QXNJbnQoaW50MzJfdCByLCBpbnQzMl90
IGcsIGludDMyX3QgYiwgaW50MzJfdCBhKTsKICAgICB2b2lkIHNldEFzVUludCh1aW50MzJfdCBy
LCB1aW50MzJfdCBnLCB1aW50MzJfdCBiLCB1aW50MzJfdCBhKTsKLQogICBwcml2YXRlOgogICAg
IFBpeGVsVHlwZSBtVHlwZTsKLQogICAgIHVuaW9uCiAgICAgewogICAgICAgICBzdHJ1Y3QKQEAg
LTQ2Nyw3ICs0NTgsNiBAQCBjbGFzcyBDbGVhckNvbG9yVmFsdWUKICAgICAgICAgewogICAgICAg
ICAgICAgdWludDMyX3QgbVJlZFUsIG1HcmVlblUsIG1CbHVlVSwgbUFscGhhVTsKICAgICAgICAg
fTsKLQogICAgICAgICBDbGVhckNvbG9yVmFsdWVCeXRlcyBtVmFsdWVCeXRlczsKICAgICB9Owog
fTsKQEAgLTQ4Myw3ICs0NzMsNyBAQCBjbGFzcyBFcnJvckhhbmRsZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXJyb3IoTlNFcnJvciAqX051bGxhYmxlIGVycm9yLAorICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFcnJvcihOU0Vycm9yICplcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
ZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5l
KSA9IDA7CkBAIC00OTMsNyArNDgzLDcgQEAgY2xhc3MgQ29udGV4dCA6IHB1YmxpYyBFcnJvckhh
bmRsZXIKIHsKICAgcHVibGljOgogICAgIENvbnRleHQoRGlzcGxheU10bCAqZGlzcGxheU10bCk7
Ci0gICAgX051bGxhYmxlIGlkPE1UTERldmljZT4gZ2V0TWV0YWxEZXZpY2UoKSBjb25zdDsKKyAg
ICBpZDxNVExEZXZpY2U+IGdldE1ldGFsRGV2aWNlKCkgY29uc3Q7CiAgICAgbXRsOjpDb21tYW5k
UXVldWUgJmNtZFF1ZXVlKCk7CiAKICAgICBEaXNwbGF5TXRsICpnZXREaXNwbGF5KCkgY29uc3Qg
eyByZXR1cm4gbURpc3BsYXk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbnN0YW50cy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEyMGIyY2RmNzQ0ZTY0NjQxMWY5ZDhiZmI3OWFkMmQyMTc3MDIyNzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbnN0YW50cy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
LyBtdGxfY29tbW9uLmg6CisvLyAgICAgIERlY2xhcmVzIG51bWVyaWNhbCBjb25zdGFudHMgdXNl
ZCBpbiBNZXRhbC4KKy8vICAgICAgZXJyb3IgaGFuZGxlciBiYXNlIGNsYXNzLgorLy8KKworI2lm
bmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExfQ09OU1RBTlRTX0gKKyNkZWZpbmUgTElC
QU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX0NPTlNUQU5UU19ICisjaW5jbHVkZSAibGliQU5HTEUv
Q29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliQU5HTEUvVmVyc2lvbi5oIgorI2luY2x1ZGUgImxp
YkFOR0xFL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7
CisKKy8vIE5PVEUoaHFsZSk6IHN1cHBvcnQgdmFyaWFibGUgbWF4IG51bWJlciBvZiB2ZXJ0ZXgg
YXR0cmlidXRlcworY29uc3RleHByIHVpbnQzMl90IGtNYXhWZXJ0ZXhBdHRyaWJzID0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsKKy8vIE5PVEUoaHFsZSk6IHN1cHBvcnQgdmFyaWFibGUgbWF4IG51
bWJlciBvZiByZW5kZXIgdGFyZ2V0cworY29uc3RleHByIHVpbnQzMl90IGtNYXhSZW5kZXJUYXJn
ZXRzID0gNDsKKworY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJVQk9zID0gMTI7Citjb25z
dGV4cHIgdWludDMyX3Qga01heFVCT1NpemUgICAgPSAxNjM4NDsKKworY29uc3RleHByIHNpemVf
dCBrRGVmYXVsdEF0dHJpYnV0ZVNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKworLy8gTWV0YWwg
bGltaXRzCitjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZlcnMgICAgID0gMzE7Citj
b25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclNhbXBsZXJzICAgID0gMTY7Citjb25zdGV4cHIg
c2l6ZV90IGtJbmxpbmVDb25zdERhdGFNYXhTaXplID0gNCAqIDEwMjQ7Citjb25zdGV4cHIgc2l6
ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0RGF0YU1heFNpemU7Citj
b25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAgICAgID0gMTsKKworY29uc3RleHBy
IHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQgPSA0OworLy8gQWxp
Z25tZW50IHJlcXVpcmVtZW50IGZvciBvZmZzZXQgcGFzc2VkIHRvIHNldFZlcnRleHxGcmFnbWVu
dEJ1ZmZlcgorI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCitjb25z
dGV4cHIgdWludDMyX3Qga1VuaWZvcm1CdWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50ID0g
MjU2OworI2Vsc2UKK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZz
ZXRNaW5BbGlnbm1lbnQgPSA0OworI2VuZGlmCitjb25zdGV4cHIgdWludDMyX3Qga0luZGV4QnVm
ZmVyT2Zmc2V0QWxpZ25tZW50ICAgICAgID0gNDsKK2NvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVy
ZVRvQnVmZmVyQmxpdHRpbmdBbGlnbm1lbnQgPSAyNTY7CisKKy8vIEZvbnQgZW5kIGJpbmRpbmcg
bGltaXRzCitjb25zdGV4cHIgdWludDMyX3Qga01heEdMU2FtcGxlckJpbmRpbmdzID0gMiAqIGtN
YXhTaGFkZXJTYW1wbGVyczsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAg
ICAgPSAyICoga01heFNoYWRlclVCT3M7CisKKy8vIEJpbmRpbmcgaW5kZXggc3RhcnQgZm9yIHZl
cnRleCBkYXRhIGJ1ZmZlcnM6Citjb25zdGV4cHIgdWludDMyX3Qga1Zib0JpbmRpbmdJbmRleFN0
YXJ0ID0gMDsKKworLy8gQmluZGluZyBpbmRleCBmb3IgZGVmYXVsdCBhdHRyaWJ1dGUgYnVmZmVy
OgorY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9C
aW5kaW5nSW5kZXhTdGFydCArIGtNYXhWZXJ0ZXhBdHRyaWJzOworLy8gQmluZGluZyBpbmRleCBm
b3IgZHJpdmVyIHVuaWZvcm1zOgorY29uc3RleHByIHVpbnQzMl90IGtEcml2ZXJVbmlmb3Jtc0Jp
bmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCArIDE7CisvLyBCaW5kaW5n
IGluZGV4IGZvciBkZWZhdWx0IHVuaWZvcm1zOgorY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0
VW5pZm9ybXNCaW5kaW5nSW5kZXggPSBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggKyAzOwor
Ly8gQmluZGluZyBpbmRleCBmb3IgVHJhbnNmb3JtIEZlZWRiYWNrIEJ1ZmZlcnMgKDQpCitjb25z
dGV4cHIgdWludDMyX3Qga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ID0ga0RlZmF1bHRV
bmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisvLyBCaW5kaW5nIGluZGV4IGZvciBzaGFkb3cgc2Ft
cGxlcnMnIGNvbXBhcmUgbW9kZXMKK2NvbnN0ZXhwciB1aW50MzJfdCBrU2hhZG93U2FtcGxlckNv
bXBhcmVNb2Rlc0JpbmRpbmdJbmRleCA9IGtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJbmRleCAr
IDQ7CisvLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBhcmd1bWVudCBidWZmZXIKK2NvbnN0ZXhw
ciB1aW50MzJfdCBrVUJPQXJndW1lbnRCdWZmZXJCaW5kaW5nSW5kZXggPSBrU2hhZG93U2FtcGxl
ckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCArIDE7CisKK2NvbnN0ZXhwciB1aW50MzJfdCBrU3Rl
bmNpbE1hc2tBbGwgPSAweGZmOyAgLy8gT25seSA4IGJpdHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQK
KworfSAgLy8gbmFtZXNwYWNlIG10bAorfSAgLy8gbmFtZXNwYWNlIHJ4CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZm9ybWF0X21hcC5qc29uIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24KaW5kZXggNGExMmE5MDc1OWJh
OTY1MzMyOTg3NjAxNzc4NmU2YmVkYzRkYmIzZS4uMmRhNzQyMWM1MTNkMzcwMjQ0MTA0NWEwMzM5
ZjYxYjEyMmIyZTdjMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24KKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFw
Lmpzb24KQEAgLTc0LDExICs3NCwxMSBAQAogICAgICAgICAgICAgIkQzMl9GTE9BVCI6ICJNVExQ
aXhlbEZvcm1hdERlcHRoMzJGbG9hdCIsCiAgICAgICAgICAgICAiUzhfVUlOVCI6ICJNVExQaXhl
bEZvcm1hdFN0ZW5jaWw4IiwKICAgICAgICAgICAgICJEMzJfRkxPQVRfUzhYMjRfVUlOVCI6ICJN
VExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOCIsCi0gICAgICAgICAgICAiQjEwRzEw
UjEwQTJfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0iLAogICAgICAgICAgICAg
IlIxMEcxMEIxMEEyX1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCIsCiAgICAgICAg
ICAgICAiUjEwRzEwQjEwQTJfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0iLAog
ICAgICAgICAgICAgIlIxMUcxMUIxMF9GTE9BVCI6ICJNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9h
dCIsCi0gICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVERVhQIjogIk1UTFBpeGVsRm9ybWF0UkdC
OUU1RmxvYXQiCisgICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVERVhQIjogIk1UTFBpeGVsRm9y
bWF0UkdCOUU1RmxvYXQiLAorICAgICAgICAgICAgIkQxNl9VTk9STSI6ICJNVExQaXhlbEZvcm1h
dERlcHRoMTZVbm9ybSIKICAgICAgICAgfSwKICAgICAgICAgIm1hcF9pb3MiOiB7CiAgICAgICAg
ICAgICAiUjVHNkI1X1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0iLApAQCAtOTIs
NiArOTIsNyBAQAogICAgICAgICAgICAgIlBWUlRDMV9SR0JfNEJQUF9VTk9STV9TUkdCX0JMT0NL
IjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBfc1JHQiIsCiAgICAgICAgICAgICAiUFZS
VEMxX1JHQkFfMkJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdC
QV8yQlBQX3NSR0IiLAogICAgICAgICAgICAgIlBWUlRDMV9SR0JBXzRCUFBfVU5PUk1fU1JHQl9C
TE9DSyI6ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUF9zUkdCIiwKKyAgICAgICAgICAg
ICJFVEMxX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOCIsCiAg
ICAgICAgICAgICAiRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFVEMy
X1JHQjgiLAogICAgICAgICAgICAgIkVUQzJfUjhHOEI4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRFVEMyX1JHQjhfc1JHQiIsCiAgICAgICAgICAgICAiRVRDMl9SOEc4QjhBMV9VTk9STV9C
TE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOEExIiwKQEAgLTEwMCwzOSArMTAxLDM4IEBA
CiAgICAgICAgICAgICAiRVRDMl9SOEc4QjhBOF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
RUFDX1JHQkE4X3NSR0IiLAogICAgICAgICAgICAgIkVBQ19SMTFfVU5PUk1fQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0iLAogICAgICAgICAgICAgIkVBQ19SMTFfU05PUk1fQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUjExU25vcm0iLAotICAgICAgICAgICAgIkVBQ19SMTFH
MTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtIiwKKyAgICAgICAg
ICAgICJFQUNfUjExRzExX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3Jt
IiwKICAgICAgICAgICAgICJFQUNfUjExRzExX1NOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
RUFDX1JHMTFTbm9ybSIsCi0gICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzR4NF9MRFIiLAotICAgICAgICAgICAgIkFTVENfNHg0X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzV4
NF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg0X0xEUiIsCi0gICAgICAgICAg
ICAiQVNUQ181eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg0X3NSR0IiLAot
ICAgICAgICAgICAgIkFTVENfNXg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181
eDVfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzV4NV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ181eDVfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ182eDVfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfNng1X1NSR0Jf
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RD
XzZ4Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiIsCi0gICAgICAg
ICAgICAiQVNUQ182eDZfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng2X3NSR0Ii
LAotICAgICAgICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q184eDVfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzh4NV9TUkdCX0JMT0NLIjogIk1UTFBpeGVs
Rm9ybWF0QVNUQ184eDVfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1fQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9MRFIiLAotICAgICAgICAgICAgIkFTVENfOHg2X1NS
R0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKLSAgICAgICAgICAgICJB
U1RDXzh4OF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg4X0xEUiIsCi0gICAg
ICAgICAgICAiQVNUQ184eDhfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg4X3NS
R0IiLAotICAgICAgICAgICAgIkFTVENfMTB4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfMTB4NV9TUkdCX0JMT0NLIjogIk1U
TFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAotICAgICAgICAgICAgIkFTVENfMTB4Nl9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIiLAotICAgICAgICAgICAgIkFT
VENfMTB4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IiLAotICAg
ICAgICAgICAgIkFTVENfMTB4OF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4
OF9MRFIiLAotICAgICAgICAgICAgIkFTVENfMTB4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ18xMHg4X3NSR0IiLAotICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHgx
MF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9zUkdCIiwKLSAgICAgICAg
ICAgICJBU1RDXzEyeDEwX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9M
RFIiLAotICAgICAgICAgICAgIkFTVENfMTJ4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTJ4MTBfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMngxMl9VTk9STV9CTE9DSyI6
ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzEyeDEy
X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX3NSR0IiCisgICAgICAgICAg
ICAiQVNUQ180eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCIiwK
KyAgICAgICAgICAgICJBU1RDXzV4NF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENf
NXg0X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfNXg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ181eDVfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ182eDVfU1JHQl9CTE9DSyIg
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzZ4Nl9T
UkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng2X3NSR0IiLAorICAgICAgICAgICAg
IkFTVENfOHg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDVfc1JHQiIsCisg
ICAgICAgICAgICAiQVNUQ184eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4
Nl9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZv
cm1hdEFTVENfOHg4X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfMTB4NV9TUkdCX0JMT0NLIiA6
ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzEweDZf
U1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDZfc1JHQiIsCisgICAgICAgICAg
ICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NSR0Ii
LAorICAgICAgICAgICAgIkFTVENfMTB4MTBfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzEweDEwX3NSR0IiLAorICAgICAgICAgICAgIkFTVENfMTJ4MTBfU1JHQl9CTE9DSyIgOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IiLAorICAgICAgICAgICAgIkFTVENfMTJ4MTJf
U1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfNHg0X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIs
CisgICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNU
Q181eDRfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzV4NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzV4NV9MRFIiLAorICAgICAgICAgICAgIkFTVENfNng1X1VOT1JNX0JMT0NL
IiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ182eDZf
VU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfTERSIiwKKyAgICAgICAgICAg
ICJBU1RDXzh4NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIiLAor
ICAgICAgICAgICAgIkFTVENfOHg2X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENf
OHg2X0xEUiIsCisgICAgICAgICAgICAiQVNUQ184eDhfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ184eDhfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzEweDVfVU5PUk1fQkxPQ0si
IDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ18xMHg2
X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIiLAorICAgICAgICAg
ICAgIkFTVENfMTB4OF9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfTERS
IiwKKyAgICAgICAgICAgICJBU1RDXzEweDEwX1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4MTBfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzEyeDEwX1VOT1JNX0JMT0NLIiA6
ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzEyeDEy
X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfTERSIgogICAgICAgICB9
LAogICAgICAgICAibWFwX21hYyI6IHsKLSAgICAgICAgICAgICJEMTZfVU5PUk0iOiAiTVRMUGl4
ZWxGb3JtYXREZXB0aDE2VW5vcm0iLAogICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjog
Ik1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5jaWw4IiwKICAgICAgICAgICAgICJCQzFf
UkdCQV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEJDMV9SR0JBIiwKICAgICAgICAgICAg
ICJCQzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JH
QiIsCkBAIC0xNzUsOSArMTc1LDcgQEAKICAgICAgICAgICAgICJEMzJfVU5PUk0iOiAiRDMyX0ZM
T0FUIgogICAgICAgICB9LAogICAgICAgICAib3ZlcnJpZGVfaW9zIjogewotICAgICAgICAgICAg
IkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIiwKLSAgICAgICAgICAg
ICJEMTZfVU5PUk0iOiAiRDMyX0ZMT0FUIiwKLSAgICAgICAgICAgICJFVEMxX1I4RzhCOF9VTk9S
TV9CTE9DSyI6ICJFVEMyX1I4RzhCOF9VTk9STV9CTE9DSyIKKyAgICAgICAgICAgICJEMjRfVU5P
Uk1fUzhfVUlOVCI6ICJEMzJfRkxPQVRfUzhYMjRfVUlOVCIKICAgICAgICAgfSwKICAgICAgICAg
Im92ZXJyaWRlX21hYyI6IHsKICAgICAgICAgICAgICJSNUc2QjVfVU5PUk0iOiAiUjhHOEI4QThf
VU5PUk0iLApAQCAtMjAzLDcgKzIwMSw4IEBACiAgICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9S
TV9CTE9DSyI6ICJSMTZHMTZfVU5PUk0iLAogICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1f
QkxPQ0siOiAiUjE2RzE2X1NOT1JNIgogICAgICAgICB9LAotICAgICAgICAiZDI0czhfZmFsbGJh
Y2tzX21hYyI6IHsKKyAgICAgICAgImZhbGxiYWNrc19tYWMiOiB7CisgICAgICAgICAgICAiQjhH
OFI4QThfVU5PUk0iOiAiUjhHOEI4QThfVU5PUk0iLAogICAgICAgICAgICAgIkQyNF9VTk9STV9T
OF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgogICAgICAgICB9LAogICAgICAgICAiY2Fw
cyI6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9h
dXRvZ2VuLm1tCmluZGV4IGMyMWM1OTNmMjI4ODVmNTg5Njg5YTUwOTc5Nzk4MWM2YmJiODQzYzQu
LjZlMjY5NGU3ZjdhY2I1OTg5NDAwYjI2MzUwNTQxMTcwYWFmMzlmOTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9y
bWF0X3RhYmxlX2F1dG9nZW4ubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQpAQCAtMTcs
NyArMTcsNyBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL0Zvcm1hdC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKIHVzaW5nIG5hbWVzcGFjZSBhbmdsZTsK
IAogbmFtZXNwYWNlIHJ4CkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBtdGwKIAogdm9pZCBG
b3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGlu
dGVuZGVkRm9ybWF0SWRfKQogewotICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRl
ZEZvcm1hdElkXzsKLQorICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgICAgPSBpbnRlbmRlZEZv
cm1hdElkXzsKICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0
YWxEZXZpY2UoKTsKIAogICAgIC8vIEFjdHVhbCBjb252ZXJzaW9uCkBAIC00MywxNSArNDIsMjYg
QEAgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZv
cm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBm
YWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElE
OjpCMTBHMTBSMTBBMl9VTk9STToKKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUND
QVRBTFlTVAorICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk06CiAK
LSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEy
VW5vcm07Ci0gICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJ
RDo6QjEwRzEwUjEwQTJfVU5PUk07Ci0gICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9
IG51bGxwdHI7CisgICAgICAgICAgICBpZiAobWV0YWxEZXZpY2UuZGVwdGgyNFN0ZW5jaWw4UGl4
ZWxGb3JtYXRTdXBwb3J0ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm07CisgICAgICAgICAgICAg
ICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JN
OworICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybTsKKyAgICAg
ICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4
QThfVU5PUk07CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRy
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAKKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9P
U19NQUNDQVRBTFlTVAogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk06CiAKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRC
R1JBOFVub3JtOwpAQCAtNjEsNiArNzEsNyBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNw
bGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAg
ICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNl
bmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICAgICAg
Y2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNX1NSR0I6CiAKICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CkBA
IC03MCw2ICs4MSwzNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNw
bGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlz
LT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBUQVJHRVRfT1Nf
T1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJ
RDo6RDE2X1VOT1JNOgorCisgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBp
eGVsRm9ybWF0RGVwdGgxNlVub3JtOworICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQg
PSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5j
dGlvbiAgID0gbnVsbHB0cjsKKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworCisjZWxzZSAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToK
KworICAgICAgICAgICAgaWYgKFN1cHBvcnRzSU9TR1BVRmFtaWx5KG1ldGFsRGV2aWNlLCAzKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZv
cm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk07CisgICAgICAgICAgICAgICAgdGhp
cy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQ7CisgICAgICAgICAgICAgICAgdGhpcy0+YWN0
dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVDsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKworI2Vu
ZGlmICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAogICAgICAgICBj
YXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOgogCiAgICAgICAgICAgICB0aGlzLT5tZXRh
bEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OwpAQCAtODE1LDE1ICs4NTYs
NiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6
Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9
IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0
SUQ6OkQxNl9VTk9STToKLQotICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQ
aXhlbEZvcm1hdERlcHRoMTZVbm9ybTsKLSAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElk
ID0gYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk07Ci0gICAgICAgICAgICB0aGlzLT5pbml0RnVu
Y3Rpb24gICA9IG51bGxwdHI7Ci0KLSAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDI0
X1VOT1JNX1M4X1VJTlQ6CiAKICAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0aDI0U3Rl
bmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCAmJgpAQCAtMTI4MSw3ICsxMzEzLDcgQEAgdm9pZCBG
b3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGlu
dGVuZGVkRm9ybWF0SWRfKQogCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFQUNfUjEx
RzExX1VOT1JNX0JMT0NLOgogCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RUFDX1JHMTFVbm9ybTsKKyAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm07CiAgICAgICAgICAgICB0aGlzLT5hY3R1
YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RUFDX1IxMUcxMV9VTk9STV9CTE9DSzsKICAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKIApAQCAtMTMwNiw2ICsx
MzM4LDE1IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFu
Z2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6
bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIGFuZ2xlOjpG
b3JtYXRJRDo6RVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0s6CisKKyAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CisgICAgICAgICAgICB0aGlz
LT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RVRDMV9SOEc4QjhfVU5PUk1fQkxP
Q0s7CisgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisKKyAgICAg
ICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKwogICAg
ICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RVRDMl9SOEc4QjhBMV9TUkdCX0JMT0NLOgogCiAg
ICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4
QTFfc1JHQjsKQEAgLTE0NTksMTUgKzE1MDAsNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBE
aXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAg
ICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKLQotICAgICAgICAgICAg
dGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKLSAgICAg
ICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7
Ci0gICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7Ci0KLSAgICAgICAg
ICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLQogICAgICAg
ICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ6CiAKICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXRfU3RlbmNp
bDg7CkBAIC0xNDc3LDE1ICsxNTA5LDYgQEAgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxh
eU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQogICAgICAg
ICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzoKLQotICAg
ICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVUQzJfUkdCODsK
LSAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMy
X1I4RzhCOF9VTk9STV9CTE9DSzsKLSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0g
bnVsbHB0cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCiAjZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0SW52YWxpZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zv
cm1hdF91dGlscy5oCmluZGV4IGJiYjI3ZDRmZWVkNGMwNjdhZmFmNzI2NzFlNzZiZjRhNDdhNTUz
MDkuLmYzOTY4MWQzYThjNjc5M2M4NGY1YjUyNDE4NmJjOGRiMDg3MWRhMWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3V0aWxzLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaApAQCAtNDgsMTMgKzQ4LDE4IEBAIHN0
cnVjdCBGb3JtYXRDYXBzCiB7CiAgICAgYm9vbCBpc1JlbmRlcmFibGUoKSBjb25zdCB7IHJldHVy
biBjb2xvclJlbmRlcmFibGUgfHwgZGVwdGhSZW5kZXJhYmxlOyB9CiAKLSAgICBib29sIGZpbHRl
cmFibGUgICAgICA9IGZhbHNlOwotICAgIGJvb2wgd3JpdGFibGUgICAgICAgID0gZmFsc2U7Ci0g
ICAgYm9vbCBjb2xvclJlbmRlcmFibGUgPSBmYWxzZTsKLSAgICBib29sIGRlcHRoUmVuZGVyYWJs
ZSA9IGZhbHNlOwotICAgIGJvb2wgYmxlbmRhYmxlICAgICAgID0gZmFsc2U7Ci0gICAgYm9vbCBt
dWx0aXNhbXBsZSAgICAgPSBmYWxzZTsgIC8vIGNhbiBiZSB1c2VkIGFzIE1TQUEgdGFyZ2V0Ci0g
ICAgYm9vbCByZXNvbHZlICAgICAgICAgPSBmYWxzZTsgIC8vIENhbiBiZSB1c2VkIGFzIHJlc29s
dmUgdGFyZ2V0CisgICAgYm9vbCBmaWx0ZXJhYmxlICAgICAgICAgICA9IGZhbHNlOworICAgIGJv
b2wgd3JpdGFibGUgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIGNvbG9yUmVuZGVyYWJs
ZSAgICAgID0gZmFsc2U7CisgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUgICAgICA9IGZhbHNlOwor
ICAgIGJvb2wgYmxlbmRhYmxlICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIG11bHRpc2Ft
cGxlICAgICAgICAgID0gZmFsc2U7ICAvLyBjYW4gYmUgdXNlZCBhcyBNU0FBIHRhcmdldAorICAg
IGJvb2wgcmVzb2x2ZSAgICAgICAgICAgICAgPSBmYWxzZTsgIC8vIENhbiBiZSB1c2VkIGFzIHJl
c29sdmUgdGFyZ2V0CisgICAgYm9vbCBjb21wcmVzc2VkICAgICAgICAgICA9IGZhbHNlOworICAg
IE5TVUludGVnZXIgcGl4ZWxCeXRlcyAgICAgPSAwOworICAgIE5TVUludGVnZXIgcGl4ZWxCeXRl
c01TQUEgPSAwOworICAgIE5TVUludGVnZXIgY2hhbm5lbHMgICAgICAgPSAwOworICAgIHVpbnQ4
X3QgYWxpZ25tZW50ICAgICAgICAgPSAwOwogfTsKIAogLy8gUGl4ZWwgZm9ybWF0CkBAIC0xNDMs
NiArMTQ4LDcgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUK
ICAgcHJpdmF0ZToKICAgICB2b2lkIGluaXROYXRpdmVGb3JtYXRDYXBzQXV0b2dlbihjb25zdCBE
aXNwbGF5TXRsICpkaXNwbGF5KTsKICAgICB2b2lkIGluaXROYXRpdmVGb3JtYXRDYXBzKGNvbnN0
IERpc3BsYXlNdGwgKmRpc3BsYXkpOworCiAgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0IGZvcm1hdElkLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUs
CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCkBAIC0xNTAsNiArMTU2LDE3
IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVzb2x2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFi
bGUpOworCisgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAor
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxlbmRh
YmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGJ5dGVz
UGVyQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscyk7
CisKICAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB3cml0YWJsZSwKQEAgLTE1OSw4ICsxNzYsMjQgQEAgY2xhc3MgRm9ybWF0VGFibGUg
ZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
b2xvclJlbmRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlKTsKIAorICAgIHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5k
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRl
cmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0ZXNQZXJDaGFubmVs
LAorICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxzKTsKKwogICAgIHZv
aWQgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wg
ZmlsdGVyYWJsZSk7CiAKKyAgICB2b2lkIGFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UoaWQ8TVRM
RGV2aWNlPiBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFBp
eGVsRm9ybWF0IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1
cHBvcnRzaU9TMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdXBw
b3J0c2lPUzQpOworCiAgICAgc3RkOjphcnJheTxGb3JtYXQsIGFuZ2xlOjprTnVtQU5HTEVGb3Jt
YXRzPiBtUGl4ZWxGb3JtYXRUYWJsZTsKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8TVRMUGl4ZWxG
b3JtYXQsIEZvcm1hdENhcHM+IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZTsKICAgICAvLyBP
bmUgZm9yIHRpZ2h0bHkgcGFja2VkIGJ1ZmZlcnMsIG9uZSBmb3IgZ2VuZXJhbCBjYXNlcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZm9ybWF0X3V0aWxzLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0KaW5kZXggZmIxZDVjYThi
YzJmZWJhNDQ5ZWEzNWI0OGE0MmI5MzUzMjhhZjYyMS4uNDE2YWQ1YzdmZjE0MTY4ZTA5NzhiYmM3
YjdlMWM4ODY5ZjZlN2EzZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0KKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
dXRpbHMubW0KQEAgLTc3LDggKzc3LDggQEAgdm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNv
bnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKICAgICAgICAgICAgIHRleHR1cmVDYXBzLnJl
bmRlcmJ1ZmZlciA9CiAgICAgICAgICAgICAgICAgbXRsRm9ybWF0LmdldENhcHMoKS5jb2xvclJl
bmRlcmFibGUgfHwgbXRsRm9ybWF0LmdldENhcHMoKS5kZXB0aFJlbmRlcmFibGU7CiAgICAgICAg
ICAgICB0ZXh0dXJlQ2Fwcy50ZXh0dXJhYmxlICAgICAgICA9IHRydWU7Ci0gICAgICAgICAgICB0
ZXh0dXJlQ2Fwcy5ibGVuZGFibGUgICAgICAgICA9IG10bEZvcm1hdC5nZXRDYXBzKCkuYmxlbmRh
YmxlOwogICAgICAgICAgICAgdGV4dHVyZUNhcHMudGV4dHVyZUF0dGFjaG1lbnQgPSB0ZXh0dXJl
Q2Fwcy5yZW5kZXJidWZmZXI7CisgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5ibGVuZGFibGUgICAg
ICAgICA9IG10bEZvcm1hdC5nZXRDYXBzKCkuYmxlbmRhYmxlOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGZvcm1hdENhcHMubXVsdGlzYW1wbGUpCkBAIC0xNDgsMTIgKzE0OCw2IEBAIGJvb2wg
Rm9ybWF0OjpuZWVkQ29udmVyc2lvbihhbmdsZTo6Rm9ybWF0SUQgc3JjRm9ybWF0SWQpIGNvbnN0
CiAgICAgICAgIC8vIFdlYkdMIGFsbG93cyB1bnN3aXp6bGVkIG1hcHBpbmcgd2hlbiBzd2l6emxp
bmcgaXMgbm90IGF2YWlsYWJsZS4gTm8gbmVlZCB0byBjb252ZXJ0LgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIGlmIChzcmNGb3JtYXRJZCA9PSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLICYmCi0gICAgICAgIGFjdHVhbEZvcm1hdElkID09IGFuZ2xl
OjpGb3JtYXRJRDo6RVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0spCi0gICAgewotICAgICAgICAvLyBF
VEMxIFJHQiAmIEVUQzIgUkdCIGFyZSB0ZWNobmljYWxseSB0aGUgc2FtZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gc3JjRm9ybWF0SWQgIT0gYWN0dWFsRm9ybWF0
SWQ7CiB9CiAKQEAgLTE5Miw4ICsxODYsNyBAQCBhbmdsZTo6UmVzdWx0IEZvcm1hdFRhYmxlOjpp
bml0aWFsaXplKGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXkpCiAgICAgICAgIG1QaXhlbEZvcm1h
dFRhYmxlW2ldLmluaXQoZGlzcGxheSwgZm9ybWF0SWQpOwogICAgICAgICBtUGl4ZWxGb3JtYXRU
YWJsZVtpXS5jYXBzID0gJm1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVttUGl4ZWxGb3JtYXRU
YWJsZVtpXS5tZXRhbEZvcm1hdF07CiAKLSAgICAgICAgaWYgKCFtUGl4ZWxGb3JtYXRUYWJsZVtp
XS5jYXBzLT5kZXB0aFJlbmRlcmFibGUgJiYKLSAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxl
W2ldLmFjdHVhbEZvcm1hdElkICE9IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0
SWQpCisgICAgICAgIGlmIChtUGl4ZWxGb3JtYXRUYWJsZVtpXS5hY3R1YWxGb3JtYXRJZCAhPSBt
UGl4ZWxGb3JtYXRUYWJsZVtpXS5pbnRlbmRlZEZvcm1hdElkKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtpXS50ZXh0dXJlTG9hZEZ1bmN0aW9ucyA9IGFuZ2xlOjpH
ZXRMb2FkRnVuY3Rpb25zTWFwKAogICAgICAgICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ld
LmludGVuZGVkQW5nbGVGb3JtYXQoKS5nbEludGVybmFsRm9ybWF0LApAQCAtMjA0LDYgKzE5Nywx
OSBAQCBhbmdsZTo6UmVzdWx0IEZvcm1hdFRhYmxlOjppbml0aWFsaXplKGNvbnN0IERpc3BsYXlN
dGwgKmRpc3BsYXkpCiAgICAgICAgIG1WZXJ0ZXhGb3JtYXRUYWJsZXNbMV1baV0uaW5pdChmb3Jt
YXRJZCwgdHJ1ZSk7CiAgICAgfQogCisgICAgLy8gTk9URShocWxlKTogV29yay1hcm91bmQgQU1E
J3MgaXNzdWUgdGhhdCBEMjRTOCBmb3JtYXQgc29tZXRpbWVzIHJldHVybnMgemVybyBkdXJpbmcg
c2FtcGxpbmc6CisgICAgaWYgKGRpc3BsYXktPmdldFJlbmRlcmVyRGVzY3JpcHRpb24oKS5maW5k
KCJBTUQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIC8vIEZhbGxiYWNr
IHRvIEQzMl9GTE9BVF9TOFgyNF9VSU5ULgorICAgICAgICBGb3JtYXQgJmZvcm1hdCA9CisgICAg
ICAgICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5nbGU6OkZv
cm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVCldOworICAgICAgICBmb3JtYXQuYWN0dWFsRm9ybWF0
SWQgICAgICAgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVF9TOFgyNF9VSU5UOworICAgICAg
ICBmb3JtYXQubWV0YWxGb3JtYXQgICAgICAgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9h
dF9TdGVuY2lsODsKKyAgICAgICAgZm9ybWF0LmluaXRGdW5jdGlvbiAgICAgICAgID0gbnVsbHB0
cjsKKyAgICAgICAgZm9ybWF0LnRleHR1cmVMb2FkRnVuY3Rpb25zID0gbnVsbHB0cjsKKyAgICAg
ICAgZm9ybWF0LmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW01UTFBpeGVsRm9y
bWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4XTsKKyAgICB9CisKICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTIzOSwxMCArMjQ1LDIzIEBAIHZvaWQgRm9ybWF0VGFi
bGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlKQogewogICAgIHNldEZvcm1h
dENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxlLCBibGVuZGFibGUsIG11bHRpc2Ft
cGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCi0gICAgICAgICAgICAgICAgICBmYWxzZSk7
CisgICAgICAgICAgICAgICAgICBmYWxzZSwgMCk7Cit9Cit2b2lkIEZvcm1hdFRhYmxlOjpzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmxlbmRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2Ft
cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpCit7CisgICAgc2V0
Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFibGUsIGJsZW5kYWJsZSwgbXVs
dGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgIGZh
bHNlLCBwaXhlbEJ5dGVzLCBjaGFubmVscyk7CiB9CiAKLXZvaWQgRm9ybWF0VGFibGU6OnNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgaWQsCit2b2lkIEZvcm1hdFRhYmxlOjpzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZpbHRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgd3JpdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxlbmRh
YmxlLApAQCAtMjUwLDYgKzI2OSwyMCBAQCB2b2lkIEZvcm1hdFRhYmxlOjpzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHJlc29sdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5k
ZXJhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRoUmVuZGVy
YWJsZSkKK3sKKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCB3cml0YWJs
ZSwgYmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJhYmxlLAorICAg
ICAgICAgICAgICAgICAgZGVwdGhSZW5kZXJhYmxlLCAwLCAwKTsKK30KK3ZvaWQgRm9ybWF0VGFi
bGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlz
YW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpCiB7CiAgICAgbU5h
dGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5maWx0ZXJhYmxlICAgICAgPSBmaWx0ZXJhYmxl
OwogICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ud3JpdGFibGUgICAgICAgID0g
d3JpdGFibGU7CkBAIC0yNTgsNiArMjkxLDExIEBAIHZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXQgaWQsCiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5ibGVuZGFibGUgICAgICAgPSBibGVuZGFibGU7CiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0
Q2Fwc1RhYmxlW2lkXS5tdWx0aXNhbXBsZSAgICAgPSBtdWx0aXNhbXBsZTsKICAgICBtTmF0aXZl
UGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnJlc29sdmUgICAgICAgICA9IHJlc29sdmU7CisgICAg
bU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzICAgICAgPSBwaXhlbEJ5
dGVzOworICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlc01TQUEg
ID0gcGl4ZWxCeXRlczsKKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5u
ZWxzICAgICAgICA9IGNoYW5uZWxzOworICAgIGlmIChjaGFubmVscyAhPSAwKQorICAgICAgICBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmFsaWdubWVudCA9IE1BWChwaXhlbEJ5dGVz
IC8gY2hhbm5lbHMsIDFVKTsKIH0KIAogdm9pZCBGb3JtYXRUYWJsZTo6c2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wgZmlsdGVyYWJsZSkKQEAgLTI2
NSw5ICszMDMsMjc0IEBAIHZvaWQgRm9ybWF0VGFibGU6OnNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLCBib29sIGZpbHRlcmFiCiAgICAgc2V0Rm9ybWF0Q2Fw
cyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSk7CiB9CiAKK3ZvaWQgRm9ybWF0VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZp
Y2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1UTFBpeGVsRm9ybWF0IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9TMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdXBwb3J0c2lPUzQpCit7CisjaWYgIShU
QVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkKKworICAgIE5TVUludGVnZXIg
cGl4ZWxCeXRlc1JlbmRlciAgICAgPSBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBp
eGVsQnl0ZXM7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IG1OYXRpdmVQ
aXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlc01TQUE7CisgICAgTlNVSW50ZWdlciBh
bGlnbm1lbnQgICAgICAgICAgICA9IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxp
Z25tZW50OworCisvLyBPdmVycmlkZSB0aGUgY3VycmVudCBwaXhlbEJ5dGVzUmVuZGVyCisjICAg
IGRlZmluZSBTUEVDSUZJQyhfcGl4ZWxGb3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIF9waXhl
bEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAg
ID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVz
UmVuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgYWxpZ25tZW50ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBz
dXBwb3J0c2lPUzQgPyBfcGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNU
YWJsZVtpZF0uY2hhbm5lbHMgOiA0OyBcCisgICAgICAgICAgICBicmVhaworLy8gT3ZlcnJpZGUg
dGhlIGN1cnJlbnQgcGl4ZWwgYnl0ZXMgcmVuZGVyLCBhbmQgTVNBQQorIyAgICBkZWZpbmUgU1BF
Q0lGSUNfTVNBQShfcGl4ZWxGb3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyLCBfcGl4ZWxCeXRlc1Jl
bmRlck1TQUEpICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IF9waXhlbEJ5
dGVzUmVuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlck1TQUE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFs
aWdubWVudCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3VwcG9ydHNpT1M0
ID8gX3BpeGVsQnl0ZXNSZW5kZXIgLyBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNo
YW5uZWxzIDogNDsgXAorICAgICAgICAgICAgYnJlYWsKKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50
IHBpeGVsQnl0ZXNSZW5kZXIsIGFuZCBhbGlnbm1lbnQKKyMgICAgZGVmaW5lIFNQRUNJRklDX0FM
SUdOKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9hbGlnbm1lbnQpIFwKKyAgICAg
ICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0
ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5k
ZXJNU0FBID0gX3BpeGVsQnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGFsaWdubWVudCAgICAgICAgICAgID0gX2FsaWdubWVudDsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiAoIW1OYXRpdmVQaXhlbEZvcm1h
dENhcHNUYWJsZVtpZF0uY29tcHJlc3NlZCkKKyAgICB7CisgICAgICAgIC8vIE9uIEFwcGxlR1BV
RmFtaWx5NCssIHRoZXJlIGlzIG5vIDRieXRlIG1pbmltdW0gcmVxdWlyZW1lbnQgZm9yIHJlbmRl
ciB0YXJnZXRzCisgICAgICAgIHVpbnQzMl90IG1pblNpemUgICAgID0gc3VwcG9ydHNpT1M0ID8g
MVUgOiA0VTsKKyAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBNQVgobU5hdGl2ZVBpeGVs
Rm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzLCBtaW5TaXplKTsKKyAgICAgICAgcGl4ZWxC
eXRlc1JlbmRlck1TQUEgPSBwaXhlbEJ5dGVzUmVuZGVyOworICAgICAgICBhbGlnbm1lbnQgPQor
ICAgICAgICAgICAgc3VwcG9ydHNpT1M0ID8gTUFYKHBpeGVsQnl0ZXNSZW5kZXIgLyBtTmF0aXZl
UGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5uZWxzLCAxVSkgOiA0OworICAgIH0KKworICAg
IC8vIFRoaXMgbGlzdCBvZiB0YWJsZXMgc3RhcnRzIGZyb20gYSBnZW5lcmFsIG11bHRpLXBsYXRm
b3JtIHRhYmxlLAorICAgIC8vIHRvIHNwZWNpZmljIHBsYXRmb3JtcyAoaS5lLiBpb3MyLCBpb3M0
KSBpbmhlcml0aW5nIGZyb20gdGhlIHByZXZpb3VzIHRhYmxlcworCisgICAgLy8gU3RhcnQgb2Zm
IHdpdGggdGhlIGdlbmVyYWwgY2FzZQorICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisgICAg
eworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVub3JtLCA0VSk7CisgICAg
ICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sIDRVKTsKKyAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRBQkdSNFVub3JtLCA0VSk7CisgICAgICAgIFNQRUNJRklDKE1U
TFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDRVKTsKKworICAgICAgICBTUEVDSUZJQyhNVExQaXhl
bEZvcm1hdFJHQkE4VW5vcm0sIDRVKTsKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRC
R1JBOFVub3JtLCA0VSk7CisKKyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJH
QkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZv
cm1hdEJHUkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQ
aXhlbEZvcm1hdFJHQkE4U25vcm0sIDRVLCA4VSk7CisgICAgICAgIFNQRUNJRklDX01TQUEoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgNFUsIDhVKTsKKworICAgICAgICBTUEVDSUZJQyhNVExQ
aXhlbEZvcm1hdFJHQjEwQTJVbm9ybSwgOFUpOworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZv
cm1hdEJHUjEwQTJVbm9ybSwgOFUpOworCisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0
UkcxMUIxMEZsb2F0LCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0I5
RTVGbG9hdCwgOFUpOworCisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0U3RlbmNpbDgs
IDFVKTsKKyAgICB9CisKKyAgICAvLyBPdmVycmlkZSBiYXNlZCBpb3MyCisgICAgaWYgKHN1cHBv
cnRzaU9TMikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sIDhVKTsK
KyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sIDhVKTsKKyAg
ICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgOFUpOworICAgICAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgOFUpOworICAgICAgICAg
ICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm0sIDRVLCA4VSk7CisgICAg
ICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgNFUsIDhVKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGJhc2VkIG9uIGlvczQKKyAgICBp
ZiAoc3VwcG9ydHNpT1M0KQorICAgIHsKKyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkK
KyAgICAgICAgeworICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRCNUc2
UjVVbm9ybSwgNlUsIDJVKTsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdC
QThVbm9ybSwgNFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVu
b3JtLCA0VSk7CisKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9y
bV9zUkdCLCA0VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4VW5v
cm1fc1JHQiwgNFUpOworCisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQkE4
U25vcm0sIDRVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRS
R0IxMEEyVW5vcm0sIDRVLCA0VSk7CisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhl
bEZvcm1hdEJHUjEwQTJVbm9ybSwgNFUsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBp
eGVsRm9ybWF0UkdCMTBBMlVpbnQsIDhVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04o
TVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsIDRVLCA0VSk7CisKKyAgICAgICAgICAgIFNQRUNJ
RklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsIDRVLCA0VSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzICAg
ICA9IHBpeGVsQnl0ZXNSZW5kZXI7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lk
XS5waXhlbEJ5dGVzTVNBQSA9IHBpeGVsQnl0ZXNSZW5kZXJNU0FBOworICAgIG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50ICAgICAgPSBhbGlnbm1lbnQ7CisKKyMgICAg
dW5kZWYgU1BFQ0lGSUMKKyMgICAgdW5kZWYgU1BFQ0lGSUNfQUxJR04KKyMgICAgdW5kZWYgU1BF
Q0lGSUNfTVNBQQorI2VuZGlmCisgICAgLy8gbWFjT1MgZG9lcyBub3QgbmVlZCB0byBwZXJmb3Jt
IGFueSBhZGRpdG9pbmFsIGFkanVzdG1lbnQuIFRoZXNlIHZhbHVlcyBhcmUgb25seSB1c2VkIHRv
IGNoZWNrCisgICAgLy8gdmFsaWQgTVJUIHNpemVzIG9uIGlPUy4KK30KKwogdm9pZCBGb3JtYXRU
YWJsZTo6aW5pdE5hdGl2ZUZvcm1hdENhcHMoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKIHsK
LSAgICBpbml0TmF0aXZlRm9ybWF0Q2Fwc0F1dG9nZW4oZGlzcGxheSk7CisgICAgY29uc3QgYW5n
bGU6OkZlYXR1cmVzTXRsICZmZWF0dXJlc010bCA9IGRpc3BsYXktPmdldEZlYXR1cmVzKCk7Cisg
ICAgLy8gU2tpcCBhdXRvIHJlc29sdmUgaWYgZWl0aGVyIGhhc0RlcHRoL1N0ZW5jaWxBdXRvUmVz
b2x2ZSBvciBhbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlCisgICAgLy8gZmVhdHVyZSBh
cmUgZGlzYWJsZWQuCisgICAgYm9vbCBzdXBwb3J0RGVwdGhBdXRvUmVzb2x2ZSA9IGZlYXR1cmVz
TXRsLmhhc0RlcHRoQXV0b1Jlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmZWF0dXJlc010bC5hbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZl
LmVuYWJsZWQ7CisgICAgYm9vbCBzdXBwb3J0U3RlbmNpbEF1dG9SZXNvbHZlID0gZmVhdHVyZXNN
dGwuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVuYWJsZWQgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmZWF0dXJlc010bC5hbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNv
bHZlLmVuYWJsZWQ7CisgICAgYm9vbCBzdXBwb3J0RGVwdGhTdGVuY2lsQXV0b1Jlc29sdmUgPSBz
dXBwb3J0RGVwdGhBdXRvUmVzb2x2ZSAmJiBzdXBwb3J0U3RlbmNpbEF1dG9SZXNvbHZlOworCisg
ICAgLy8gU291cmNlOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbWV0YWwvTWV0YWwtRmVh
dHVyZS1TZXQtVGFibGVzLnBkZgorICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKworICAgIC8vICAg
ICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAg
d3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfCBieXRlc1BlckNoYW5uZWwg
fCBjaGFubmVsCisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEE4VW5vcm0sICAgICAg
ICB0cnVlLCAgICAgICAgICAgIGZhbHNlLCAgICAgICBmYWxzZSwgICAgICAgICAgZmFsc2UsICAg
ICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIDFVLCAxVSk7
CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFI4VW5vcm0sICAgICAgICB0cnVlLCAg
ICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFI4U25vcm0sICAgICAgICB0cnVlLCAgICAgICAgICAg
IHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0
c0VpdGhlckdQVUZhbWlseSgyLCAxKSwgIHRydWUsICAxVSwgMVUpOworICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSMTZVbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UjE2U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BV
RmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdFJHOFVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAg
ICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHOFNub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgyLCAx
KSwgIHRydWUsICAyVSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2
VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
IHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAg
ICB0cnVlLCAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNu
b3JtLCAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0
cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAg
dHJ1ZSwgIDRVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlVu
b3JtLCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZTbm9y
bSwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVl
LCAgOFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2RmxvYXQs
ICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgOFUsIDRV
KTsKKworICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgICAg
fCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJs
ZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRSR0JBOFVub3JtLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisgICAgc2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm1fc1JHQiwgICAgIHRydWUsICAgICAg
ICAgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDIpLCAgICAgIHRydWUsICAgICAgICAg
ICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlLCAgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4U25v
cm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgyLCAxKSwgICAgICB0cnVlLCAgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgNFUs
IDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybV9zUkdCLCAg
ICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMiksICAgICAg
dHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsICAgNFUsIDRVKTsKKworICAgIC8vICAgICAgICAgICAgfCAgZm9y
bWF0SWQgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgfCAgd3Jp
dGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSMTZGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgMlUsIDFVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNkZsb2F0LCAgICAgIHRydWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgIDRVLCAyVSk7CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIzMkZsb2F0LCAgICBkaXNwbGF5LT5zdXBwb3J0
c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAgICB0cnVl
LCAgICA0VSwgMVUpOworCisjaWYgVEFSR0VUX09TX0lPUyAmJiAhVEFSR0VUX09TX01BQ0NBVEFM
WVNUCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmls
dGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJl
c29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEI1RzZSNVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgICB0cnVl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCAzVSk7CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sICAgICAgIHRydWUsICAgICAg
ICAgICAgZmFsc2UsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgdHJ1ZSwgIDJVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUjVB
MVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgICB0cnVlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCA0VSk7CisgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdEExQkdSNVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFs
c2UsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwg
IDJVLCA0VSk7CisjZW5kaWYKKworICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAg
ICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICBibGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAgcmVzb2x2ZSAgIHwg
Y29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdSMTBB
MlVub3JtLCAgICAgdHJ1ZSwgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWls
eSgzLCAxKSwgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRy
dWUsICA0VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5v
cm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMs
IDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwg
IDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCAg
ICAgIGZhbHNlLCAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMywgMSks
ICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICB0cnVlLCAgNFUs
IDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0LCAgICAg
dHJ1ZSwgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgzLCAxKSwgICAg
ICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRydWUsICA0VSwgM1Up
OworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmls
dGVyYWJsZSAgICB8ICB3cml0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBibGVuZGFi
bGUgICAgICAgICAgICAgICAgICAgICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAg
fCAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgICAgICAg
ICAgICAgICAgIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQs
ICAgICAgIHRydWUsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDMpLCAg
ZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQ
VUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIGRpc3BsYXktPnN1
cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCA0VSwgM1UpOworCisgICAgLy8gICAgICAgICAgICB8ICBm
b3JtYXRJZCAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxl
bmRhYmxlICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUg
ICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dFI4VWludCwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1
ZSwgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTaW50LCAgICAg
ICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOwor
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMTZVaW50LCAgICAgICBmYWxzZSwgICAg
ICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDJVLCAxVSk7CisgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlNpbnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0Ukc4VWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2Us
ICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICB0cnVlLCAyVSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzhTaW50
LCAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDJVLCAy
VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIzMlVpbnQsICAgICAgIGZhbHNl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0
c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyU2ludCwgICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2VWludCwgICAgICBmYWxzZSwgICAgICAgICAgIHRy
dWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFJHMTZTaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZh
bHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAg
ICAgICAgdHJ1ZSwgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdC
QThVaW50LCAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0
VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBOFNpbnQsICAgICBm
YWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAxVSk7CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJVaW50LCAgICAgIGZhbHNlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgOFUsIDJVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5
KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0JBMTZVaW50LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAg
ICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
LCAgICAgICAgIHRydWUsIDhVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dFJHQkExNlNpbnQsICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAg
ICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1
ZSwgOFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTMyVWludCwg
ICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCAxNlUs
IDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTMyU2ludCwgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCAxNlUsIDRVKTsK
KworICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgfCBmaWx0
ZXJhYmxlICAgICAgICAgICAgICAgICAgICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgICAg
ICAgICAgICAgICAgICAgICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAgIHwgIHJl
c29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzMyRmxvYXQsICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBk
aXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgICAgICAgIHRydWUsICA4VSwg
MlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJGbG9hdCwgICAgIGRp
c3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgdHJ1ZSwgICAgICAgIGRpc3Bs
YXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAg
ICAgICAgIHRydWUsICAxNlUsIDRVKTsKKworICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAg
ICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAgcmVzb2x2ZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfCBkZXB0aFJl
bmRlcmFibGUgICAgICAgICAgICAgICAgICAgIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0RGVwdGgzMkZsb2F0LCAgICAgICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAg
IHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAg
ICAgICAgdHJ1ZSwgIDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFN0
ZW5jaWw4LCAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBmYWxzZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICAx
VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXRfU3Rl
bmNpbDgsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICBmYWxz
ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgc3VwcG9ydERlcHRoU3RlbmNpbEF1
dG9SZXNvbHZlLCAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICB0cnVlLCAgOFUsIDJVKTsK
Ky8vVG9EbzogQGF2YWlsYWJsZSBvbiAxMy4wCisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdERlcHRoMTZVbm9ybSwgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0
RGVwdGhBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRy
dWUsICAyVSwgMVUpOworI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNU
CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERlcHRoMjRVbm9ybV9TdGVuY2lsOCwg
ICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgIGZhbHNlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0RGVwdGhTdGVuY2lsQXV0b1Jlc29s
dmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksIDRVLCAyVSk7CisKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdEJDMV9SR0JBLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEJDMV9SR0JBX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMyX1JHQkEsIHRydWUpOworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMyX1JHQkFfc1JHQiwgdHJ1ZSk7CisgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdCQSwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdCQV9zUkdCLCB0cnVl
KTsKKyNlbHNlCisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJU
Q19SR0JfMkJQUCwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRQVlJUQ19SR0JfMkJQUF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl80QlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQl80QlBQX3NSR0IsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV8yQlBQ
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRD
X1JHQkFfMkJQUF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUCwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzRCUFBfc1JHQiwgdHJ1ZSk7CisgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0sIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1IxMVNub3JtLCB0
cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SRzEx
VW5vcm0sIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
RUFDX1JHMTFTbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRFQUNfUkdCQTgsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0RUFDX1JHQkE4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdCOEExLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdCOEExX3NSR0Is
IHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ180
eDRfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRBU1RDXzV4NF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfNXg1X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182eDVfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9zUkdCLCB0cnVlKTsKKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg1X3NSR0IsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDZfc1JHQiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4
OF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dEFTVENfMTB4NV9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfMTB4Nl9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4OF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IsIHRy
dWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngx
Ml9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dEFTVENfNHg0X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRBU1RDXzV4NF9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJl
c3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERSLCB0cnVlKTsK
KyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg2X0xEUiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4
OF9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
QVNUQ18xMHg1X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRBU1RDXzEweDZfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEFTVENfMTB4OF9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIsIHRydWUpOworICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIs
IHRydWUpOworI2VuZGlmCisgICAgLy8gY2xhbmctZm9ybWF0IG9uCiB9CiAKIH0gIC8vIG5hbWVz
cGFjZSBtdGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRp
bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kYmMxMDk5NzM4ZDljNTY4MjIxMTY3ZTJlMTVjNjQ1NzAxMTIyM2E5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oCkBAIC0wLDAgKzEsNTcgQEAK
Ky8vCisvLyAgbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKKy8vICBBTkdMRQorLy8KKy8vICBDcmVh
dGVkIGJ5IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKy8vCisKKyNpZm5kZWYgbXRsX2ds
c2xhbmdfbXRsX3V0aWxzX2gKKyNkZWZpbmUgbXRsX2dsc2xhbmdfbXRsX3V0aWxzX2gKKyNpbmNs
dWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJv
Z3JhbUltcGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgi
CisKK25hbWVzcGFjZSByeAoreworbmFtZXNwYWNlIG10bAoreworc3RydWN0IFNhbXBsZXJCaW5k
aW5nCit7CisgICAgdWludDMyX3QgdGV4dHVyZUJpbmRpbmcgPSAwOworICAgIHVpbnQzMl90IHNh
bXBsZXJCaW5kaW5nID0gMDsKK307CisKK3N0cnVjdCBUcmFuc2xhdGVkU2hhZGVySW5mbworewor
ICAgIHZvaWQgcmVzZXQoKTsKKyAgICAvLyBUcmFuc2xhdGVkIE1ldGFsIHNvdXJjZSBjb2RlCisg
ICAgc3RkOjpzdHJpbmcgbWV0YWxTaGFkZXJTb3VyY2U7CisgICAgLy8gTWV0YWwgbGlicmFyeSBj
b21waWxlZCBmcm9tIHNvdXJjZSBjb2RlIGFib3ZlLiBVc2VkIGJ5IFByb2dyYW1NdGwuCisgICAg
QXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG1ldGFsTGlicmFyeTsKKyAgICBzdGQ6OmFycmF5
PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1wbGVyQmluZGluZ3M+IGFjdHVhbFNhbXBsZXJCaW5k
aW5nczsKKyAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFs
VUJPQmluZGluZ3M7CisgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFj
dHVhbFhGQkJpbmRpbmdzOworICAgIGJvb2wgaGFzVUJPQXJndW1lbnRCdWZmZXI7Cit9Owordm9p
ZCBNU0xHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJj
ZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3Rk
OjpzdHJpbmc+ICpzaGFkZXJTb3VyY2VzT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgU2hh
ZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpOworCith
bmdsZTo6UmVzdWx0IEdsc2xhbmdHZXRNU0woY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9n
cmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmds
Q2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyTWFwPHN0
ZDo6c3RyaW5nPiAmc2hhZGVyU291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFk
ZXJJbmZvPiAqbXNsU2hhZGVySW5mb091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqbXNsQ29kZU91dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQpOworCisvLyBHZXQgZXF1aXZhbGVudCBz
aGFkb3cgY29tcGFyZSBtb2RlIHRoYXQgaXMgdXNlZCBpbiB0cmFuc2xhdGVkIG1zbCBzaGFkZXIu
Cit1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0g
ZnVuYyk7CisKK30gIC8vIG5hbWVzcGFjZSBtdGwKK30gIC8vIG5hbWVzcGFjZSByeAorCisjZW5k
aWYgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxf
dXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1ZjViZWY0MzEwMGYx
MTNlNDkzZGQ5ZGI2ZTBlMmZkNTQ2MTVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tCkBAIC0wLDAgKzEsMjQxIEBACisvLworLy8gIG1nbF9nbHNsYW5nX210bF91dGls
cy5tCisvLyAgQU5HTEUgKHN0YXRpYykKKy8vCisvLyAgQ3JlYXRlZCBieSBLeWxlIFBpZGRpbmd0
b24gb24gMTEvMTAvMjAuCisvLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmgi
CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCisjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCisKK25h
bWVzcGFjZSByeAoreworbmFtZXNwYWNlIG10bAoreworCit2b2lkIFRyYW5zbGF0ZWRTaGFkZXJJ
bmZvOjpyZXNldCgpCit7CisgICAgbWV0YWxTaGFkZXJTb3VyY2UuY2xlYXIoKTsKKyAgICBtZXRh
bExpYnJhcnkgICAgICAgICA9IG5pbDsKKyAgICBoYXNVQk9Bcmd1bWVudEJ1ZmZlciA9IGZhbHNl
OworICAgIGZvciAobXRsOjpTYW1wbGVyQmluZGluZyAmYmluZGluZyA6IGFjdHVhbFNhbXBsZXJC
aW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcudGV4dHVyZUJpbmRpbmcgPSBtdGw6OmtN
YXhTaGFkZXJTYW1wbGVyczsKKyAgICB9CisKKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDog
YWN0dWFsVUJPQmluZGluZ3MpCisgICAgeworICAgICAgICBiaW5kaW5nID0gbXRsOjprTWF4U2hh
ZGVyQnVmZmVyczsKKyAgICB9CisKKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDogYWN0dWFs
WEZCQmluZGluZ3MpCisgICAgeworICAgICAgICBiaW5kaW5nID0gbXRsOjprTWF4U2hhZGVyQnVm
ZmVyczsKKyAgICB9Cit9CisKKy8vIE9yaWdpbmFsIG1hcHBpbmcgb2YgZnJvbnQgZW5kIGZyb20g
c2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNhbXBsZXIgc2xvdHMgKGluIGZvcm0gb2YKKy8vIHNs
b3Q6Y291bnQgcGFpcikKK3VzaW5nIE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgPQorICAgIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHVpbnQz
Ml90LCB1aW50MzJfdD4+PjsKKworYm9vbCBNYXBwZWRTYW1wbGVyTmFtZU5lZWRzVXNlckRlZmlu
ZWRQcmVmaXgoY29uc3Qgc3RkOjpzdHJpbmcgJm9yaWdpbmFsTmFtZSkKK3sKKyAgICByZXR1cm4g
b3JpZ2luYWxOYW1lLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6bnBvczsKK30KKworc3RhdGlj
IHN0ZDo6c3RyaW5nIE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZv
cmlnaW5hbE5hbWUpCit7CisgICAgc3RkOjpzdHJpbmcgc2FtcGxlck5hbWUgPSBvcmlnaW5hbE5h
bWU7CisKKyAgICAvLyBTYW1wbGVycyBpbiBzdHJ1Y3RzIGFyZSBleHRyYWN0ZWQuCisgICAgc3Rk
OjpyZXBsYWNlKHNhbXBsZXJOYW1lLmJlZ2luKCksIHNhbXBsZXJOYW1lLmVuZCgpLCAnLicsICdf
Jyk7CisKKyAgICAvLyBSZW1vdmUgYXJyYXkgZWxlbWVudHMKKyAgICBhdXRvIG91dCA9IHNhbXBs
ZXJOYW1lLmJlZ2luKCk7CisgICAgZm9yIChhdXRvIGluID0gc2FtcGxlck5hbWUuYmVnaW4oKTsg
aW4gIT0gc2FtcGxlck5hbWUuZW5kKCk7IGluKyspCisgICAgeworICAgICAgICBpZiAoKmluID09
ICdbJykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCppbiAhPSAnXScpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW4rKzsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW4g
IT0gc2FtcGxlck5hbWUuZW5kKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKm91dCsrID0gKmluOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc2FtcGxlck5hbWUuZXJhc2Uob3V0LCBzYW1wbGVyTmFtZS5lbmQoKSk7CisK
KyAgICBpZiAoTWFwcGVkU2FtcGxlck5hbWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KG9yaWdpbmFs
TmFtZSkpCisgICAgeworICAgICAgICBzYW1wbGVyTmFtZSA9IHNoOjprVXNlckRlZmluZWROYW1l
UHJlZml4ICsgc2FtcGxlck5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwor
fQorCit2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9n
cmFtU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtl
ZFJlc291cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
ck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91
dCkKK3sKKyAgICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxs
U2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIGdsOjpTaGFkZXIgKmdsU2hhZGVyICAgICAg
ICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7CisgICAg
ICAgICgqc2hhZGVyU291cmNlc091dClbc2hhZGVyVHlwZV0gPSBnbFNoYWRlciA/IGdsU2hhZGVy
LT5nZXRUcmFuc2xhdGVkU291cmNlKCkgOiAiIjsKKyAgICB9Cit9CisKK3ZvaWQgR2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MoY29uc3Qgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKnJl
ZmxlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9yaWdpbmFs
U2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsQmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gJnN0cnVjdFNhbXBs
ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PFNhbXBsZXJC
aW5kaW5nLCBtdGw6OmtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gKmJpbmRpbmdzKQoreworICAgIGZv
ciAoYXV0byAmc2FtcGxlciA6IHJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5ncygpKQorICAg
IHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgICAgICAgICAgPSBzYW1wbGVyLmZp
cnN0OworICAgICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxTYW1wbGVyU2xvdCA9ICh1aW50MzJf
dClyZWZsZWN0aW9uLT5nZXRTYW1wbGVyQmluZGluZyhuYW1lKTsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3QgYWN0dWFsVGV4dHVyZVNsb3QgPSAodWludDMyX3QpcmVmbGVjdGlvbi0+Z2V0VGV4dHVy
ZUJpbmRpbmcobmFtZSk7CisKKyAgICAgICAgLy8gQXNzaWduIHNlcXVlbnRpYWwgaW5kZXggZm9y
IHN1YnNlcXVlbnQgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgY29uc3QgYm9vbCBzdHJ1Y3RTYW1w
bGVyID0gc3RydWN0U2FtcGxlcnMuZmluZChuYW1lKSAhPSBzdHJ1Y3RTYW1wbGVycy5lbmQoKTsK
KyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWFwcGVkTmFtZSA9CisgICAgICAgICAgICBzdHJ1
Y3RTYW1wbGVyID8gbmFtZSA6IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNoOjprVXNlckRlZmlu
ZWROYW1lUHJlZml4ICsgbmFtZSk7CisgICAgICAgIGF1dG8gb3JpZ2luYWwgPSBvcmlnaW5hbEJp
bmRpbmdzLmZpbmQobWFwcGVkTmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbCAhPSBvcmlnaW5h
bEJpbmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4gJnJlc09yaWduYWxCaW5kaW5ncyA9Cisg
ICAgICAgICAgICAgICAgb3JpZ2luYWxCaW5kaW5ncy5hdChtYXBwZWROYW1lKTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGN1cnJlbnRUZXh0dXJlU2xvdCA9IGFjdHVhbFRleHR1cmVTbG90OworICAg
ICAgICAgICAgdWludDMyX3QgY3VycmVudFNhbXBsZXJTbG90ID0gYWN0dWFsU2FtcGxlclNsb3Q7
CisgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ICZv
cmlnaW5hbEJpbmRpbmdSYW5nZSA6IHJlc09yaWduYWxCaW5kaW5ncykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBTYW1wbGVyQmluZGluZyAmYWN0dWFsQmluZGluZyA9IGJpbmRpbmdz
LT5hdChvcmlnaW5hbEJpbmRpbmdSYW5nZS5maXJzdCk7CisgICAgICAgICAgICAgICAgYWN0dWFs
QmluZGluZy50ZXh0dXJlQmluZGluZyAgPSBjdXJyZW50VGV4dHVyZVNsb3Q7CisgICAgICAgICAg
ICAgICAgYWN0dWFsQmluZGluZy5zYW1wbGVyQmluZGluZyAgPSBjdXJyZW50U2FtcGxlclNsb3Q7
CisKKyAgICAgICAgICAgICAgICBjdXJyZW50VGV4dHVyZVNsb3QgKz0gb3JpZ2luYWxCaW5kaW5n
UmFuZ2Uuc2Vjb25kOworICAgICAgICAgICAgICAgIGN1cnJlbnRTYW1wbGVyU2xvdCArPSBvcmln
aW5hbEJpbmRpbmdSYW5nZS5zZWNvbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3NoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpnZXRSZWZsZWN0aW9uRnJvbVNo
YWRlcihnbDo6U2hhZGVyICpzaGFkZXIpCit7CisgICAgU2hhZGVyTXRsICpzaGFkZXJJbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PFNoYWRlck10bCAqPihzaGFkZXItPmdldEltcGxlbWVudGF0aW9uKCkp
OworICAgIHJldHVybiBzaGFkZXJJbnN0YW5jZS0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bigpOworfQorCitzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0UmVmbGVjdGlvbkZy
b21Db21waWxlcihnbDo6Q29tcGlsZXIgKmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgdHlwZSkK
K3sKKyAgICBhdXRvIGNvbXBpbGVySW5zdGFuY2UgICAgICA9IGNvbXBpbGVyLT5nZXRJbnN0YW5j
ZSh0eXBlKTsKKyAgICBzaDo6VFNoSGFuZGxlQmFzZSAqYmFzZSAgICA9IHN0YXRpY19jYXN0PHNo
OjpUU2hIYW5kbGVCYXNlICo+KGNvbXBpbGVySW5zdGFuY2UuZ2V0SGFuZGxlKCkpOworICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKyAgICBjb21waWxlci0+cHV0SW5zdGFuY2Uoc3RkOjptb3ZlKGNvbXBpbGVySW5zdGFu
Y2UpKTsKKyAgICByZXR1cm4gdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uKCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5m
b01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2Rl
T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCkK
K3sKKyAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBiaW5kaW5ncyBnZW5l
cmF0ZWQgYnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1hcC4KKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9PcmlnaW5hbEJpbmRpbmdz
OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJmJsb2NrcyA9IHBy
b2dyYW1TdGF0ZS5nZXRVbmlmb3JtQmxvY2tzKCk7CisgICAgZm9yICh1aW50MzJfdCBidWZmZXJJ
ZHggPSAwOyBidWZmZXJJZHggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlcklkeCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmYmxvY2sgPSBibG9ja3NbYnVmZmVySWR4
XTsKKyAgICAgICAgaWYgKCF1Ym9PcmlnaW5hbEJpbmRpbmdzLmNvdW50KGJsb2NrLm1hcHBlZE5h
bWUpKQorICAgICAgICB7CisgICAgICAgICAgICB1Ym9PcmlnaW5hbEJpbmRpbmdzW2Jsb2NrLm1h
cHBlZE5hbWVdID0gYnVmZmVySWR4OworICAgICAgICB9CisgICAgfQorICAgIC8vIFJldHJpZXZl
IG9yaWdpbmFsIHNhbXBsZXIgYmluZGluZ3MgcHJvZHVjZWQgYnkgZnJvbnQgZW5kLgorICAgIE9y
aWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3M7CisgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OlNhbXBsZXJCaW5kaW5nPiAmc2FtcGxlckJpbmRpbmdzID0gcHJv
Z3JhbVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpMaW5rZWRVbmlmb3JtPiAmdW5pZm9ybXMgICAgICAgICA9IHByb2dyYW1TdGF0ZS5nZXRVbmlm
b3JtcygpOworCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBzdHJ1Y3RTYW1w
bGVycyA9IHt9OworCisgICAgZm9yICh1aW50MzJfdCB0ZXh0dXJlSW5kZXggPSAwOyB0ZXh0dXJl
SW5kZXggPCBzYW1wbGVyQmluZGluZ3Muc2l6ZSgpOyArK3RleHR1cmVJbmRleCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGdsOjpTYW1wbGVyQmluZGluZyAmc2FtcGxlckJpbmRpbmcgPSBzYW1wbGVy
QmluZGluZ3NbdGV4dHVyZUluZGV4XTsKKyAgICAgICAgdWludDMyX3QgdW5pZm9ybUluZGV4ID0g
cHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1JbmRleEZyb21TYW1wbGVySW5kZXgodGV4dHVyZUluZGV4
KTsKKyAgICAgICAgY29uc3QgZ2w6OkxpbmtlZFVuaWZvcm0gJnNhbXBsZXJVbmlmb3JtID0gdW5p
Zm9ybXNbdW5pZm9ybUluZGV4XTsKKyAgICAgICAgYm9vbCBpc1NhbXBsZXJJblN0cnVjdCAgICAg
ICAgPSBzYW1wbGVyVW5pZm9ybS5uYW1lLmZpbmQoJy4nKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsK
KyAgICAgICAgc3RkOjpzdHJpbmcgbWFwcGVkU2FtcGxlck5hbWUgPSBpc1NhbXBsZXJJblN0cnVj
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1TTEdldE1h
cHBlZFNhbXBsZXJOYW1lKHNhbXBsZXJVbmlmb3JtLm5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoc2FtcGxl
clVuaWZvcm0ubWFwcGVkTmFtZSk7CisgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgcHJlZml4
ZWQgbGF0ZXIgc2VwZXJhdGVseQorICAgICAgICBpZiAoaXNTYW1wbGVySW5TdHJ1Y3QpCisgICAg
ICAgICAgICBzdHJ1Y3RTYW1wbGVycy5pbnNlcnQobWFwcGVkU2FtcGxlck5hbWUpOworICAgICAg
ICBvcmlnaW5hbFNhbXBsZXJCaW5kaW5nc1ttYXBwZWRTYW1wbGVyTmFtZV0ucHVzaF9iYWNrKAor
ICAgICAgICAgICAge3RleHR1cmVJbmRleCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNhbXBsZXJC
aW5kaW5nLmJvdW5kVGV4dHVyZVVuaXRzLnNpemUoKSl9KTsKKyAgICB9CisgICAgZm9yIChnbDo6
U2hhZGVyVHlwZSB0eXBlIDoge2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGdsOjpTaGFkZXJUeXBl
OjpGcmFnbWVudH0pCisgICAgeworICAgICAgICAoKm1zbENvZGVPdXQpW3R5cGVdICAgICAgICAg
ICAgICAgICAgICAgICAgID0gc2hhZGVyU291cmNlc1t0eXBlXTsKKyAgICAgICAgKCptc2xTaGFk
ZXJJbmZvT3V0KVt0eXBlXS5tZXRhbFNoYWRlclNvdXJjZSA9IHNoYWRlclNvdXJjZXNbdHlwZV07
CisgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgID0gcHJv
Z3JhbVN0YXRlLmdldEF0dGFjaGVkU2hhZGVyKHR5cGUpOworICAgICAgICBzaDo6VHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9IGdldFJlZmxlY3Rpb25Gcm9tU2hhZGVyKHNo
YWRlcik7CisgICAgICAgIC8vIFJldHJpZXZlIGF1dG9tYXRpYyB0ZXh0dXJlIHNsb3QgYXNzaWdu
bWVudHMKKyAgICAgICAgaWYgKG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLnNpemUoKSA+IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdldEFzc2lnbmVkU2FtcGxlckJpbmRpbmdzKHJlZmxlY3Rp
b24sIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLCBzdHJ1Y3RTYW1wbGVycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hdCh0eXBlKS5h
Y3R1YWxTYW1wbGVyQmluZGluZ3MpOworICAgICAgICB9CisgICAgICAgIHJlZmxlY3Rpb24tPnJl
c2V0KCk7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKwor
dWludCBNc2xHZXRTaGFkZXJTaGFkb3dDb21wYXJlTW9kZShHTGVudW0gbW9kZSwgR0xlbnVtIGZ1
bmMpCit7CisgICAgLy8gU2VlIFNwaXJ2VG9Nc2xDb21waWxlcjo6ZW1pdF9oZWFkZXIoKQorICAg
IGlmIChtb2RlID09IEdMX05PTkUpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmdW5jKQorICAgICAgICB7CisgICAgICAg
ICAgICBjYXNlIEdMX0xFU1M6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg
ICBjYXNlIEdMX0xFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAg
IGNhc2UgR0xfR1JFQVRFUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAg
IGNhc2UgR0xfR0VRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgICAg
Y2FzZSBHTF9ORVZFUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAgICAgIGNh
c2UgR0xfQUxXQVlTOgorICAgICAgICAgICAgICAgIHJldHVybiA2OworICAgICAgICAgICAgY2Fz
ZSBHTF9FUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNzsKKyAgICAgICAgICAgIGNhc2Ug
R0xfTk9URVFVQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIH0KKyAgICB9Cit9Cit9ICAvLyBuYW1lc3BhY2UgbXRsCit9ICAvLyBu
YW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgK
aW5kZXggMTNjOTdlZTI0NDdmYTQ2OTI2ZWZlNzhkMzAwMzI0NDdhMjNjYjI0OC4uYzAyNDQ2YTk4
MjA4NTVmM2NmZjQ3Y2EzOTY2NzQ0MDMyODgzM2I3MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxz
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9nbHNsYW5nX3V0aWxzLmgKQEAgLTE0LDMzICsxNCwxMSBAQAogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL1Byb2dyYW1JbXBsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2NvbW1vbi5oIgotCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCiBuYW1lc3BhY2UgcngKIHsKIG5hbWVzcGFjZSBtdGwK
IHsKLQotc3RydWN0IFNhbXBsZXJCaW5kaW5nCi17Ci0gICAgdWludDMyX3QgdGV4dHVyZUJpbmRp
bmcgPSAwOwotICAgIHVpbnQzMl90IHNhbXBsZXJCaW5kaW5nID0gMDsKLX07Ci0KLXN0cnVjdCBU
cmFuc2xhdGVkU2hhZGVySW5mbwotewotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIFRyYW5z
bGF0ZWQgTWV0YWwgc291cmNlIGNvZGUKLSAgICBzdGQ6OnN0cmluZyBtZXRhbFNoYWRlclNvdXJj
ZTsKLSAgICAvLyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUu
IFVzZWQgYnkgUHJvZ3JhbU10bC4KLSAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0
YWxMaWJyYXJ5OwotCi0gICAgc3RkOjphcnJheTxTYW1wbGVyQmluZGluZywga01heEdMU2FtcGxl
ckJpbmRpbmdzPiBhY3R1YWxTYW1wbGVyQmluZGluZ3M7Ci0gICAgc3RkOjphcnJheTx1aW50MzJf
dCwga01heEdMVUJPQmluZGluZ3M+IGFjdHVhbFVCT0JpbmRpbmdzOwotICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIGtNYXhTaGFkZXJYRkJzPiBhY3R1YWxYRkJCaW5kaW5nczsKLSAgICBib29sIGhh
c1VCT0FyZ3VtZW50QnVmZmVyOwotfTsKLQogLy8gLSBzaGFkZXJTb3VyY2VzT3V0IGlzIHJlc3Vs
dCBHTFNMIGNvZGUgcGVyIHNoYWRlciBzdGFnZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVk
IG9mZi4KIC8vIC0geGZiT25seVNoYWRlclNvdXJjZU91dCB3aWxsIGNvbnRhaW4gdmVydGV4IHNo
YWRlcidzIEdMU0wgY29kZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9uLgogdm9pZCBH
bHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0
ZSwKQEAgLTU3LDYgKzM1LDEzIEBAIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2
Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICZ2YXJp
YWJsZUluZm9NYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlck1hcDxzdGQ6OnZlY3Rvcjx1aW50MzJfdD4+ICpzaGFkZXJDb2RlT3V0KTsKIAorYW5n
bGU6OlJlc3VsdCBNU0xHZXRTaGFkZXJTcGlydkNvZGUoRXJyb3JIYW5kbGVyICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNl
dCAmbGlua2VkU2hhZGVyU3RhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJm
YWNlVmFyaWFibGVJbmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNo
YWRlckNvZGVPdXQpOworCiAvLyBUcmFuc2xhdGUgZnJvbSBTUElSLVYgY29kZSB0byBNZXRhbCBz
aGFkZXIgc291cmNlIGNvZGUuCiAvLyAtIHNwaXJ2U2hhZGVyQ29kZSBpcyBTUElSViBjb2RlIHBl
ciBzaGFkZXIgc3RhZ2Ugd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvZmYuCiAvLyAtIHhm
Yk9ubHlTcGlydkNvZGUgaXMgIHZlcnRleCBzaGFkZXIncyBTUElSViBjb2RlIHdoZW4gWEZCIGVt
dWxhdGlvbiBpcyB0dXJuZWQgb24uCkBAIC03MCw2ICs1NSwyMyBAQCBhbmdsZTo6UmVzdWx0IFNw
aXJ2Q29kZVRvTXNsKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNs
WGZiT25seVNoYWRlckluZm9PdXQgLyoqIG51bGxhYmxlICovKTsKIAordm9pZCBNU0xHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICpz
aGFkZXJTb3VyY2VzT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJm
YWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpOworCithbmdsZTo6UmVzdWx0
IEdsc2xhbmdHZXRNU0woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAmc2hhZGVy
U291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVy
SW5mb091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6
c3RyaW5nPiAqbXNsQ29kZU91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
eGZiQnVmZmVyQ291bnQpOworCisvLyBHZXQgZXF1aXZhbGVudCBzaGFkb3cgY29tcGFyZSBtb2Rl
IHRoYXQgaXMgdXNlZCBpbiB0cmFuc2xhdGVkIG1zbCBzaGFkZXIuCit1aW50IE1zbEdldFNoYWRl
clNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYyk7CisKIH0gIC8vIG5h
bWVzcGFjZSBtdGwKIH0gIC8vIG5hbWVzcGFjZSByeAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRp
bHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KaW5kZXggY2FhMGU1NjE5NzQ3NDFlMThlOWE4OGRmNDUz
MWFkNTNlY2Q4ZWMxYi4uOGIwNmU2NmQ5MDg0MTY5NThlN2JhZTliZWY0YjhlNjg2YmM0ZDQ1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9nbHNsYW5nX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQpAQCAtMTMs
NiArMTMsNyBAQAogI2luY2x1ZGUgPHNwaXJ2X21zbC5ocHA+CiAKICNpbmNsdWRlICJjb21tb24v
YXBwbGVfcGxhdGZvcm1fdXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3Jh
cHBlcl91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwuaCIKIApAQCAtMjIsMTIgKzIzLDEzIEBAIG5hbWVzcGFjZSBtdGwKIHsKIG5hbWVzcGFjZQog
ewotCiBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdUZXh0dXJlRGVzY1NldCAgICAgICAgICAg
ICAgPSAwOwogY29uc3RleHByIHVpbnQzMl90IGtHbHNsYW5nRGVmYXVsdFVuaWZvcm1BbmRYZmJE
ZXNjU2V0ID0gMTsKIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ0RyaXZlclVuaWZvcm1zRGVz
Y1NldCAgICAgICA9IDI7CiBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdTaGFkZXJSZXNvdXJj
ZURlc2NTZXQgICAgICAgPSAzOwogCitjb25zdGV4cHIgY2hhciBrU2hhZG93U2FtcGxlckNvbXBh
cmVNb2Rlc1Zhck5hbWVbXSA9ICJBTkdMRVNoYWRvd0NvbXBhcmVNb2RlcyI7CisKIC8vIE9yaWdp
bmFsIG1hcHBpbmcgb2YgZnJvbnQgZW5kIGZyb20gc2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNh
bXBsZXIgc2xvdHMgKGluIGZvcm0gb2YKIC8vIHNsb3Q6Y291bnQgcGFpcikKIHVzaW5nIE9yaWdp
bmFsU2FtcGxlckJpbmRpbmdNYXAgPQpAQCAtNTYsOSArNTgsMTMgQEAgdm9pZCBSZXNldEdsc2xh
bmdQcm9ncmFtSW50ZXJmYWNlSW5mbyhHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dy
YW1JbnRlcmYKICAgICBzdGF0aWNfYXNzZXJ0KGtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCAh
PSAwLCAia0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4IG11c3Qgbm90IGJlIDAiKTsKIH0KIAor
CiBHbHNsYW5nU291cmNlT3B0aW9ucyBDcmVhdGVTb3VyY2VPcHRpb25zKCkKIHsKICAgICBHbHNs
YW5nU291cmNlT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuZW11bGF0ZVRyYW5zZm9ybUZl
ZWRiYWNrID0gdHJ1ZTsKKyAgICAvLyBXZSBjYW4gZWFybHkgb3V0IGluIHRoZSBNU0wgb25jZSB0
cmFuc2Zvcm0gZmVlZGJhY2sgaXMgd3JpdHRlbgorICAgIG9wdGlvbnMudHJhbnNmb3JtRmVlZGJh
Y2tFYXJseVJldHVybiA9IHRydWU7CiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKQEAgLTc5LDgg
Kzg1LDggQEAgc3B2OjpFeGVjdXRpb25Nb2RlbCBTaGFkZXJUeXBlVG9TcHZFeGVjdXRpb25Nb2Rl
bChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogdm9pZCBCaW5kQnVmZmVycyhzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0wgKmNvbXBpbGVyLAogICAgICAgICAgICAgICAgICBjb25zdCBzcGlydl9j
cm9zczo6U21hbGxWZWN0b3I8c3BpcnZfY3Jvc3M6OlJlc291cmNlPiAmcmVzb3VyY2VzLAogICAg
ICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAotICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3Jp
Z2luYWxCaW5kaW5ncywKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFw
PHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCisgICAgICAgICAgICAg
ICAgIGNvbnN0IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdp
bmFsQmluZGluZ3MsCisgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNoTWFwPHVpbnQz
Ml90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCiAgICAgICAgICAgICAgICAgIHN0
ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiAqdWJvQmluZGluZ3NSZW1hcE91
dCwKICAgICAgICAgICAgICAgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+
ICp4ZmJCaW5kaW5nUmVtYXBPdXQsCiAgICAgICAgICAgICAgICAgIGJvb2wgKnVib0FyZ3VtZW50
QnVmZmVyVXNlZCkKQEAgLTI1MywzMCArMjU5LDUwIEBAIHZvaWQgR2V0QXNzaWduZWRTYW1wbGVy
QmluZGluZ3MoY29uc3Qgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMICZjb21waWxlck1zbCwKICAg
ICB9CiB9CiAKLXN0ZDo6c3RyaW5nIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChjb25zdCBzdGQ6
OnN0cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKK3N0ZDo6c3RyaW5nIFBvc3RQcm9jZXNzVHJhbnNs
YXRlZE1zbChib29sIGhhc0RlcHRoU2FtcGxlciwgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0
ZWRTb3VyY2UpCiB7CisgICAgc3RkOjpzdHJpbmcgc291cmNlOworICAgIGlmIChoYXNEZXB0aFNh
bXBsZXIpCisgICAgeworICAgICAgICAvLyBBZGQgQU5HTEVTaGFkb3dDb21wYXJlTW9kZXMgdmFy
aWFibGUgdG8gbWFpbigpLCBXZSBuZWVkIHRvIGFkZCBoZXJlIGJlY2F1c2UgaXQgaXMgdGhlCisg
ICAgICAgIC8vIG9ubHkgd2F5IHdpdGhvdXQgbW9kaWZ5aW5nIHNwaXJ2LWNyb3NzLgorICAgICAg
ICBzdGQ6OnJlZ2V4IG1haW5EZWNsYXJlUmVnZXgoCisgICAgICAgICAgICBSIigoKHZlcnRleHxm
cmFnbWVudHxrZXJuZWwpXHMrW19hLXpBLVowLTk8Pl0rXHMrbWFpblteXChdKlwoKSkiKTsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgbWFpbkRlY2xhcmVSZXBsYWNlU3RyID0gc3RkOjpzdHJpbmcoIiQx
Y29uc3RhbnQgdW5pZm9ybTx1aW50PiAqIikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUgKyAiW1ti
dWZmZXIoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cihrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRleCkgKyAiKV1dLCAiOworICAg
ICAgICBzb3VyY2UgPSBzdGQ6OnJlZ2V4X3JlcGxhY2UodHJhbnNsYXRlZFNvdXJjZSwgbWFpbkRl
Y2xhcmVSZWdleCwgbWFpbkRlY2xhcmVSZXBsYWNlU3RyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgc291cmNlID0gdHJhbnNsYXRlZFNvdXJjZTsKKyAgICB9CisKICAgICAvLyBB
ZGQgZnVuY3Rpb25fY29uc3RhbnQgYXR0cmlidXRlIHRvIGdsX1NhbXBsZU1hc2suCiAgICAgLy8g
RXZlbiB0aG91Z2ggdGhpcyB2YXJ5aW5nIGlzIG9ubHkgdXNlZCB3aGVuIEFOR0xFQ292ZXJhZ2VN
YXNrRW5hYmxlZCBpcyB0cnVlLAogICAgIC8vIHRoZSBzcGlydi1jcm9zcyBkb2Vzbid0IGFzc2ln
biBmdW5jdGlvbl9jb25zdGFudCBhdHRyaWJ1dGUgdG8gaXQuIFRodXMgaXQgd29uJ3QgYmUgZGVh
ZC1jb2RlCiAgICAgLy8gcmVtb3ZlZCB3aGVuIEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZD1mYWxz
ZS4KICAgICBzdGQ6OnN0cmluZyBzYW1wbGVNYXNrUmVwbGFjZVN0ciA9IHN0ZDo6c3RyaW5nKCJb
W3NhbXBsZV9tYXNrLCBmdW5jdGlvbl9jb25zdGFudCgiKSArCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaDo6bXRsOjprQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFt
ZSArICIpXV0iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRy
YW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpXV0iOwogCiAgICAgLy8gVGhpcyBy
ZXBsYWNlcyAiZ2xfU2FtcGxlTWFzayBbW3NhbXBsZV9tYXNrXV0iCiAgICAgLy8gICAgICAgICAg
d2l0aCAiZ2xfU2FtcGxlTWFzayBbW3NhbXBsZV9tYXNrLCBmdW5jdGlvbl9jb25zdGFudChBTkdM
RUNvdmVyYWdlTWFza0VuYWJsZWQpXV0iCiAgICAgc3RkOjpyZWdleCBzYW1wbGVNYXNrRGVjbGFy
ZVJlZ2V4KFIiKFxbXHMqXFtccypzYW1wbGVfbWFza1xzKlxdXHMqXF0pIik7Ci0gICAgcmV0dXJu
IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBzYW1wbGVNYXNrRGVjbGFyZVJl
Z2V4LCBzYW1wbGVNYXNrUmVwbGFjZVN0cik7CisgICAgcmV0dXJuIHN0ZDo6cmVnZXhfcmVwbGFj
ZShzb3VyY2UsIHNhbXBsZU1hc2tEZWNsYXJlUmVnZXgsIHNhbXBsZU1hc2tSZXBsYWNlU3RyKTsK
IH0KIAogLy8gQ3VzdG9taXplZCBzcGlydi1jcm9zcyBjb21waWxlcgogY2xhc3MgU3BpcnZUb01z
bENvbXBpbGVyIDogcHVibGljIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTAogewogICBwdWJsaWM6
Ci0gICAgU3BpcnZUb01zbENvbXBpbGVyKHN0ZDo6dmVjdG9yPHVpbnQzMl90PiAmJnNwcml2KSA6
IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTChzcHJpdikge30KKyAgICBTcGlydlRvTXNsQ29tcGls
ZXIoQ29udGV4dCAqY29udGV4dCwgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICYmc3ByaXYpCisgICAg
ICAgIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSwgbUNvbnRleHQoY29udGV4dCkK
KyAgICB7fQogCiAgICAgdm9pZCBjb21waWxlRXgoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwK
LSAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywKLSAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGlu
Z3MsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAm
b3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNo
YWRlckluZm8gKm1zbFNoYWRlckluZm9PdXQpCiAgICAgewpAQCAtMzI4LDggKzM1NCw3IEBAIGNs
YXNzIFNwaXJ2VG9Nc2xDb21waWxlciA6IHB1YmxpYyBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wK
ICAgICAgICAgICAgIC8vIEZvcmNlIGRpc2NyZXRlIHNsb3QgYmluZGluZ3MgZm9yIHRleHR1cmVz
LCBkZWZhdWx0IHVuaWZvcm1zICYgZHJpdmVyIHVuaWZvcm1zCiAgICAgICAgICAgICAvLyBpbnN0
ZWFkIG9mIHVzaW5nIGFyZ3VtZW50IGJ1ZmZlci4KICAgICAgICAgICAgIHNwaXJ2X2Nyb3NzOjpD
b21waWxlck1TTDo6YWRkX2Rpc2NyZXRlX2Rlc2NyaXB0b3Jfc2V0KGtHbHNsYW5nVGV4dHVyZURl
c2NTZXQpOwotICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjphZGRfZGlzY3Jl
dGVfZGVzY3JpcHRvcl9zZXQoCi0gICAgICAgICAgICAgICAga0dsc2xhbmdEZWZhdWx0VW5pZm9y
bUFuZFhmYkRlc2NTZXQpOworICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjph
ZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xhbmdEZWZhdWx0VW5pZm9ybUFuZFhmYkRl
c2NTZXQpOwogICAgICAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjphZGRfZGlzY3Jl
dGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xhbmdEcml2ZXJVbmlmb3Jtc0Rlc2NTZXQpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UKQEAgLTM0MCwzMSArMzY1LDc0MiBAQCBjbGFzcyBTcGlydlRvTXNs
Q29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCiAKICAgICAgICAgc3Bp
cnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjpzZXRfbXNsX29wdGlvbnMoY29tcE9wdCk7CiAKKyAgICAg
ICAgYWRkQnVpbHRJblJlc291cmNlcygpOworICAgICAgICBhbmFseXplU2hhZGVyVmFyaWFibGVz
KCk7CisKICAgICAgICAgLy8gQWN0dWFsIGNvbXBpbGF0aW9uCiAgICAgICAgIG1zbFNoYWRlcklu
Zm9PdXQtPm1ldGFsU2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFBvc3RQcm9jZXNzVHJhbnNs
YXRlZE1zbChzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CisgICAgICAgICAg
ICBQb3N0UHJvY2Vzc1RyYW5zbGF0ZWRNc2wobUhhc0RlcHRoU2FtcGxlciwgc3BpcnZfY3Jvc3M6
OkNvbXBpbGVyTVNMOjpjb21waWxlKCkpOwogCiAgICAgICAgIC8vIFJldHJpZXZlIGF1dG9tYXRp
YyB0ZXh0dXJlIHNsb3QgYXNzaWdubWVudHMKICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmlu
ZGluZ3MoKnRoaXMsIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbXNsU2hhZGVySW5mb091dC0+YWN0dWFsU2FtcGxlckJpbmRpbmdz
KTsKICAgICB9CisKKyAgcHJpdmF0ZToKKyAgICAvLyBPdmVycmlkZSBDb21waWxlck1TTAorICAg
IHZvaWQgZW1pdF9oZWFkZXIoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3BpcnZfY3Jvc3M6
OkNvbXBpbGVyTVNMOjplbWl0X2hlYWRlcigpOworICAgICAgICBpZiAoIW1IYXNEZXB0aFNhbXBs
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBXb3JrIGFyb3VuZCBjb2RlIGZvciB0aGVzZSBpc3N1ZXM6CisgICAgICAgIC8vIC0gc3ByaXZf
Y3Jvc3MgYWx3YXlzIHRyYW5zbGF0ZXMgc2hhZG93IHRleHR1cmUncyBzYW1wbGluZyB0byBzYW1w
bGVfY29tcGFyZSgpIGFuZCBkb2Vzbid0CisgICAgICAgIC8vIHRha2UgaW50byBhY2NvdW50IEdM
X1RFWFRVUkVfQ09NUEFSRV9NT0RFPUdMX05PTkUuCisgICAgICAgIC8vIC0gb24gbWFjT1MsIGV4
cGxpY2l0IGxldmVsIG9mIGRldGFpbCBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBpbiBzYW1w
bGVfY29tcGFyZSgpLgorICAgICAgICAvLyAtIG9uIGRldmljZXMgcHJpb3IgdG8gaU9TIEdQVSBm
YW1pbHkgMywgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlciBp
cworICAgICAgICAvLyBub3Qgc3VwcG9ydGVkLgorICAgICAgICBpZiAoIW1Db250ZXh0LT5nZXRE
aXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dSdW50aW1lU2FtcGxlckNvbXBhcmVNb2RlLmVu
YWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlbWVudCgiI2RlZmluZSBBTkdMRV9N
VExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSIpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGVtZW50KCJlbnVtIGNsYXNzIEFOR0xFQ29tcGFyZU1vZGUgOiB1aW50Iik7CisgICAg
ICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb25lID0gMCwiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgTGVzcywiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
TGVzc0VxdWFsLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBHcmVhdGVyLCIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBHcmVhdGVyRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IE5ldmVyLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBBbHdheXMsIik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIEVxdWFsLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb3RFcXVhbCwi
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisg
ICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1P
clVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEVjb21wYXJlKFQgZGVw
dGgsIFQgZHJlZiwgVW5pZm9ybU9yVUludCBjb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgQU5HTEVDb21wYXJlTW9kZSBtb2RlID0g
c3RhdGljX2Nhc3Q8QU5HTEVDb21wYXJlTW9kZT4oY29tcGFyZU1vZGUpOyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgIHN3aXRjaCAobW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICB7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6Okxlc3M6
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJuIGRyZWYgPCBkZXB0aDsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6TGVz
c0VxdWFsOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmIDw9
IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVN
b2RlOjpHcmVhdGVyOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBk
cmVmID4gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29t
cGFyZU1vZGU6OkdyZWF0ZXJFcXVhbDoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAg
ICByZXR1cm4gZHJlZiA+PSBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNh
c2UgQU5HTEVDb21wYXJlTW9kZTo6TmV2ZXI6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAg
ICAgICAgcmV0dXJuIDA7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xF
Q29tcGFyZU1vZGU6OkFsd2F5czoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICBy
ZXR1cm4gMTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJl
TW9kZTo6RXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJuIGRy
ZWYgPT0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29t
cGFyZU1vZGU6Ok5vdEVxdWFsOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJl
dHVybiBkcmVmICE9IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgZGVmYXVs
dDoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gMTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgiLy8gV3JhcHBlciBmdW5jdGlvbnMg
Zm9yIHNoYWRvdyB0ZXh0dXJlIGZ1bmN0aW9ucyIpOworICAgICAgICAvLyAyRCBQQ0Ygc2FtcGxp
bmcKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBU
IEFOR0xFdGV4dHVyZVBDRihkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNv
b3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlv
bnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChfX01F
VEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBkaW1zID0gZmxv
YXQyKHRleHR1cmUuZ2V0X3dpZHRoKCksIHRleHR1cmUuZ2V0X2hlaWdodCgpKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIGltZ0Nvb3JkID0gY29vcmQgKiBkaW1zOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgdGV4ZWxTaXplID0gMS4wIC8gZGltczsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHdlaWdodCA9IGZyYWN0KGltZ0Nvb3JkKTsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdGwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5z
YW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCksICIKKyAgICAgICAgICAgICAgICAgICJj
b21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIGZsb2F0IHRyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgZmxv
YXQyKHRleGVsU2l6ZS54LCAwLjApLCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zm
c2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICBmbG9hdCBibCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29y
ZCArIGZsb2F0MigwLjAsIHRleGVsU2l6ZS55KSwgIgorICAgICAgICAgICAgICAgICAgIm9wdGlv
bnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYnIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUo
cywgY29vcmQgKyB0ZXhlbFNpemUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJvZmZz
ZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgIGZsb2F0IHRvcCA9IG1peCh0bCwgdHIsIHdlaWdodC54KTsiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgZmxvYXQgYm90dG9tID0gbWl4KGJsLCBiciwgd2VpZ2h0LngpOyIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gbWl4KHRvcCwgYm90dG9tLCB3ZWlnaHQueSk7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UgIC8vIGlmIGRlZmluZWQoX19NRVRBTF9NQUNP
U19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1
cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zLCBvZmZzZXQpLCAiCisgICAgICAgICAgICAgICAg
ICAiY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiNlbmRpZiAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0
YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIEN1YmUg
UENGIHNhbXBsaW5nCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50
KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIg
cywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1
ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAg
ICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAvLyBOT1RFKGhxbGUp
OiB0byBpbXBsZW1lbnQiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFY29t
cGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucyksIGNvbXBhcmVfdmFsdWUsICIK
KyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIGFycmF5
IFBDRiBzYW1wbGluZworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVu
dCgKKyAgICAgICAgICAgICJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGgyZF9hcnJheTxU
PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAgICAi
YXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5p
Zm9ybU9yVUludCAiCisgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAg
IHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKF9fTUVUQUxf
TUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBmbG9hdDIo
dGV4dHVyZS5nZXRfd2lkdGgoKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29vcmQgPSBjb29yZCAqIGRpbXM7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAgLyBkaW1zOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0bCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCwgYXJyYXksIG9wdGlvbnMsIG9mZnNldCksICIKKyAgICAgICAgICAgICAgICAg
ICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiICAgIGZsb2F0IHRyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsg
ZmxvYXQyKHRleGVsU2l6ZS54LCAwLjApLCAiCisgICAgICAgICAgICAgICAgICAiYXJyYXksIG9w
dGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYmwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1w
bGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0ZXhlbFNpemUueSksICIKKyAgICAgICAgICAgICAg
ICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFy
ZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBiciA9IEFOR0xFY29tcGFy
ZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCArIHRleGVsU2l6ZSwgYXJyYXksICIKKyAgICAgICAg
ICAgICAgICAgICJvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJl
TW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRvcCA9IG1peCh0bCwgdHIs
IHdlaWdodC54KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYm90dG9tID0gbWl4
KGJsLCBiciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gbWl4
KHRvcCwgYm90dG9tLCB3ZWlnaHQueSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UgIC8v
IGlmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBy
ZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9u
cywgb2Zmc2V0KSwgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0Nv
bXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYgIC8vIGlmIGRlZmluZWQo
X19NRVRBTF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIiKTsKKworICAgICAgICAvLyAyRCB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3
cmFwcGVyCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxp
bmUgVCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdDIgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBP
cHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUp
Iik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAg
ICAgICAiI2lmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9O
T19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVl
LCBvcHRpb25zLCBvZmZzZXQsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9k
ZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7CisgICAg
ICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0
YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVD
b21wYXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0
ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAi
aW50MigwKSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsK
KyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVy
IHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFs
dWUsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdM
RV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFy
ZV92YWx1ZSwgbGV2ZWwoMCksIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0Nv
bXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgY29tcGFy
ZV92YWx1ZSwgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8g
Q3ViZSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVyCisgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9y
VUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgImlubGluZSBUIEFOR0xF
dGV4dHVyZUNvbXBhcmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNv
b3JkLCBmbG9hdCAiCisgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVu
aWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIp
OworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAiI2lmIGRlZmluZWQoX19NRVRBTF9N
QUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9N
T0RFKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRl
eHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisgICAgICAgICAgICAg
ICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIj
ZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7
CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgImlubGluZSBU
IEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxv
YXQzIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9D
T01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1
cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIGxldmVsKDApLCAiCisgICAg
ICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9j
b21wYXJlKHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIj
ZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7
CisKKyAgICAgICAgLy8gMkQgYXJyYXkgdGV4dHVyZSdzIHNhbXBsZV9jb21wYXJlKCkgd3JhcHBl
cgorICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQs
IHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQg
QU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywg
ZmxvYXQyIGNvb3JkLCAiCisgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQgY29t
cGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAg
ICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAgICAgICIjaWYgZGVmaW5lZChfX01F
VEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01Q
QVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQ
Q0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisg
ICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVf
dmFsdWUsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7
CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5h
bWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsICIKKyAgICAgICAgICAgICAgICAgICJ1aW50IGFycmF5LCBmbG9hdCBjb21wYXJlX3Zh
bHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwg
IgorICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIGludDIoMCksIHNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisK
KyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9y
bU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21w
YXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsICIK
KyAgICAgICAgICAgICAgICAgICJ1aW50IGFycmF5LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFy
ZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNp
ZiBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMs
IGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgbGV2ZWwoMCksICIKKyAgICAgICAgICAgICAg
ICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIj
ZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29t
cGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9mZnNldCk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiI2VuZGlmIik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIHRleHR1cmUncyBnZW5lcmljIHNhbXBsaW5n
IGZ1bmN0aW9uCisgICAgICAgIHN0YXRlbWVudCgiLy8gV3JhcHBlciBmdW5jdGlvbnMgZm9yIHNo
YWRvdyB0ZXh0dXJlIGZ1bmN0aW9ucyIpOworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxv
YXQyIGNvb3JkLCBpbnQyIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgImZsb2F0IGNvbXBh
cmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0
YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21w
YXJlX3ZhbHVlLCBvZmZzZXQsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9k
ZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9mZnNldCk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxp
bmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBj
b29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3Jk
LCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93Q29t
cGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50
KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5s
aW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsIE9wdCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAiaW50MiBvZmZzZXQsIGZs
b2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisg
ICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hhZG93
Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNv
b3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisgICAgICAgICAgICAgICAgICAib2Zmc2V0
LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29v
cmQsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAg
c3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVy
ZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgb3B0aW9u
cywgIgorICAgICAgICAgICAgICAgICAgImZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJ
bnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3JkLCBv
cHRpb25zLCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAic2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIiKTsKKworICAgICAgICAvLyBDdWJlIHRleHR1cmUncyBnZW5lcmljIHNhbXBsaW5n
IGZ1bmN0aW9uCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0
ZXh0dXJlKGRlcHRoY3ViZTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MyBjb29yZCwgZmxv
YXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hh
ZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVD
b21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAg
ICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
eyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHMs
IGNvb3JkKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1l
bnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+
Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoY3ViZTxU
PiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgT3B0ICIKKyAgICAgICAgICAgICAg
ICAgICJvcHRpb25zLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0Nv
bXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgaWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFy
ZSh0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgIgorICAgICAgICAg
ICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCwgb3B0aW9ucyk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAg
Ly8gMkQgYXJyYXkgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAg
c3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4i
KTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJh
eTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAg
ICAgICAgICAiYXJyYXksIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQg
Y29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21w
YXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQs
IGFycmF5LCBjb21wYXJlX3ZhbHVlLCAiCisgICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFk
b3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFy
cmF5LCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0
YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVu
dCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4
dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorICAgICAgICAgICAgICAgICAg
ImFycmF5LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVN
b2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
cmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGludDIoMCksIGNv
bXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7
CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5h
bWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwg
dWludCAiCisgICAgICAgICAgICAgICAgICAiYXJyYXksIE9wdCBvcHRpb25zLCBpbnQyIG9mZnNl
dCwgIgorICAgICAgICAgICAgICAgICAgImZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJ
bnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRl
eHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgor
ICAgICAgICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUpOyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVs
c2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICAgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zm
c2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQo
In0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7
CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRfYXJyYXk8
VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorICAgICAgICAgICAg
ICAgICAgImFycmF5LCBPcHQgb3B0aW9ucywgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQs
IGFycmF5LCBvcHRpb25zLCBpbnQyKDApLCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92
YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIiKTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB0b19mdW5jdGlv
bl9uYW1lKHNwaXJ2X2Nyb3NzOjpWYXJpYWJsZUlEIGltZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGZXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNHYXRoZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzUHJvaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzQXJyYXlPZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0dyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0RyZWYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsb2QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaW5Mb2QpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIWhhc0RyZWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzcGly
dl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1bmN0aW9uX25hbWUoaW1nLCBpbWdUeXBlLCBpc0Zl
dGNoLCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNQcm9qLCBoYXNBcnJheU9mZnNldHMsIGhhc09mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzR3JhZCwgaGFzRHJlZiwgbG9kLCBtaW5Mb2QpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVXNlIGN1c3RvbSBBTkdMRXRleHR1cmUgZnVuY3Rpb24gaW5zdGVhZCBvZiB1c2luZyBi
dWlsdC1pbiBzYW1wbGVfY29tcGFyZSgpCisgICAgICAgIHJldHVybiAiQU5HTEV0ZXh0dXJlIjsK
KyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB0b19mdW5jdGlvbl9hcmdzKHNwaXJ2X2Nyb3NzOjpW
YXJpYWJsZUlEIGltZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNw
aXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaXNGZXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNHYXRoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzUHJv
aiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvb3JkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29vcmRDb21wb25lbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHJlZiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdyYWRYLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ3JhZFksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBsb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBjb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
YmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYW1wbGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaW5sb2QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sICpwRm9yd2FyZCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGJvb2wgZm9yd2FyZDsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnc1dpdGhvdXREcmVmID0g
c3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjp0b19mdW5jdGlvbl9hcmdzKAorICAgICAgICAgICAg
aW1nLCBpbWdUeXBlLCBpc0ZldGNoLCBpc0dhdGhlciwgaXNQcm9qLCBjb29yZCwgY29vcmRDb21w
b25lbnRzLCAwLCBncmFkWCwgZ3JhZFksIGxvZCwKKyAgICAgICAgICAgIGNvZmZzZXQsIG9mZnNl
dCwgYmlhcywgY29tcCwgc2FtcGxlLCBtaW5sb2QsICZmb3J3YXJkKTsKKworICAgICAgICBpZiAo
IWRyZWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwRm9yd2FyZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAqcEZvcndhcmQgPSBmb3J3YXJkOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGFyZ3NXaXRob3V0RHJlZjsKKyAgICAgICAgfQorICAgICAgICAv
LyBDb252ZXJ0IHRvIGFyZ3VtZW50cyB0byBBTkdMRXRleHR1cmUuCisgICAgICAgIHN0ZDo6c3Ry
aW5nIGFyZ3MgPSB0b19leHByZXNzaW9uKGltZyk7CisgICAgICAgIGFyZ3MgKz0gIiwgIjsKKyAg
ICAgICAgYXJncyArPSBhcmdzV2l0aG91dERyZWY7CisgICAgICAgIGFyZ3MgKz0gIiwgIjsKKwor
ICAgICAgICBmb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZm9yd2FyZCAm
JiBzaG91bGRfZm9yd2FyZChkcmVmKTsKKyAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJU
eXBlICZkcmVmVHlwZSA9IGV4cHJlc3Npb25fdHlwZShkcmVmKTsKKyAgICAgICAgc3RkOjpzdHJp
bmcgZHJlZkV4cHI7CisgICAgICAgIHVpbnQzMl90IGFsdENvb3JkQ29tcG9uZW50ID0gMDsKKyAg
ICAgICAgc3dpdGNoIChpbWdUeXBlLmltYWdlLmRpbSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSBzcHY6OkRpbTJEOgorICAgICAgICAgICAgICAgIGFsdENvb3JkQ29tcG9uZW50ID0gMjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugc3B2OjpEaW0zRDoKKyAg
ICAgICAgICAgIGNhc2Ugc3B2OjpEaW1DdWJlOgorICAgICAgICAgICAgICAgIGFsdENvb3JkQ29t
cG9uZW50ID0gMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXNQcm9qKQorICAgICAgICAgICAgZHJlZkV4cHIgPSBz
cGlydl9jcm9zczo6am9pbih0b19lbmNsb3NlZF9leHByZXNzaW9uKGRyZWYpLCAiIC8gIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZXh0cmFjdF9jb21wb25l
bnRfZXhwcmVzc2lvbihjb29yZCwgYWx0Q29vcmRDb21wb25lbnQpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZHJlZkV4cHIgPSB0b19leHByZXNzaW9uKGRyZWYpOworCisgICAgICAgIGlm
IChkcmVmVHlwZS5iYXNldHlwZSA9PSBzcGlydl9jcm9zczo6U1BJUlR5cGU6OkhhbGYpCisgICAg
ICAgICAgICBkcmVmRXhwciA9IGNvbnZlcnRfdG9fZjMyKGRyZWZFeHByLCAxKTsKKworICAgICAg
ICBhcmdzICs9IGRyZWZFeHByOworICAgICAgICBhcmdzICs9ICIsICI7CisgICAgICAgIGFyZ3Mg
Kz0gdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24oaW1nKTsKKworICAgICAgICBpZiAocEZv
cndhcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisKKyAgICAvLyBPdmVycmlkZSBm
dW5jdGlvbiBwcm90b3R5cGUgZW1pdHRlciB0byBpbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBm
bGFnIHRvIGNvbWUKKyAgICAvLyB0b2dldGhlciB3aXRoIHRoZSBzaGFkb3cgc2FtcGxlci4gTk9U
RShocWxlKTogVGhpcyBpcyBqdXN0IDkwJSBjb3B5IG9mIHNwaXJ2X21zbCdzIGNvZGUuCisgICAg
Ly8gVGhlIGJldHRlciB3YXkgaXMgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBhIFBSIG9uIHNwaXJ2
LWNyb3NzIHJlcG8gZGlyZWN0bHkuIEJ1dCB0aGlzIHNob3VsZAorICAgIC8vIGJlIGEgd29yayBh
cm91bmQgc29sdXRpb24gZm9yIG5vdy4KKyAgICB2b2lkIGVtaXRfZnVuY3Rpb25fcHJvdG90eXBl
KHNwaXJ2X2Nyb3NzOjpTUElSRnVuY3Rpb24gJmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6Qml0c2V0ICYpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICAvLyBUdXJuIG9mZiBjbGFuZy1mb3JtYXQgdG8gZWFzaWVyIGNvbXBhcmUgd2l0aCBv
cmlnaW5hbCBjb2RlCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICAgICAgdXNpbmcg
bmFtZXNwYWNlIHNwaXJ2X2Nyb3NzOworICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3B2OworICAg
ICAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworCisgICAgICAgIGlmIChmdW5jLnNlbGYgIT0gaXIu
ZGVmYXVsdF9lbnRyeV9wb2ludCkKKyAgICAgICAgICAgIGFkZF9mdW5jdGlvbl9vdmVybG9hZChm
dW5jKTsKKworICAgICAgICBsb2NhbF92YXJpYWJsZV9uYW1lcyA9IHJlc291cmNlX25hbWVzOwor
ICAgICAgICBzdHJpbmcgZGVjbDsKKworICAgICAgICBwcm9jZXNzaW5nX2VudHJ5X3BvaW50ID0g
ZnVuYy5zZWxmID09IGlyLmRlZmF1bHRfZW50cnlfcG9pbnQ7CisKKyAgICAgICAgLy8gTWV0YWwg
aGVscGVyIGZ1bmN0aW9ucyBtdXN0IGJlIHN0YXRpYyBmb3JjZS1pbmxpbmUgb3RoZXJ3aXNlIHRo
ZXkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aGVuIGxpbmtlZCB0b2dldGhlciBpbiBhIHNpbmdsZSBN
ZXRhbGxpYi4KKyAgICAgICAgaWYgKCFwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorICAgICAgICAg
ICAgc3RhdGVtZW50KCJzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUp
KSIpOworCisgICAgICAgIGF1dG8gJnR5cGUgPSBnZXQ8U1BJUlR5cGU+KGZ1bmMucmV0dXJuX3R5
cGUpOworCisgICAgICAgIGlmICghdHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25zLmZv
cmNlX25hdGl2ZV9hcnJheXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBy
ZXR1cm4gbmF0aXZlIGFycmF5cyBpbiBNU0wsIHNvICJyZXR1cm4iIHRocm91Z2ggYW4gb3V0IHZh
cmlhYmxlLgorICAgICAgICAgICAgZGVjbCArPSAidm9pZCI7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZWNsICs9IGZ1bmNfdHlwZV9kZWNsKHR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgZGVjbCArPSAiICI7CisgICAgICAgIGRlY2wgKz0gdG9f
bmFtZShmdW5jLnNlbGYpOworICAgICAgICBkZWNsICs9ICIoIjsKKworICAgICAgICBpZiAoIXR5
cGUuYXJyYXkuZW1wdHkoKSAmJiBtc2xfb3B0aW9ucy5mb3JjZV9uYXRpdmVfYXJyYXlzKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBGYWtlIGFycmF5cyByZXR1cm5zIGJ5IHdyaXRpbmcgdG8g
YW4gb3V0IGFycmF5IGluc3RlYWQuCisgICAgICAgICAgICBkZWNsICs9ICJ0aHJlYWQgIjsKKyAg
ICAgICAgICAgIGRlY2wgKz0gdHlwZV90b19nbHNsKHR5cGUpOworICAgICAgICAgICAgZGVjbCAr
PSAiICgmU1BJUlZfQ3Jvc3NfcmV0dXJuX3ZhbHVlKSI7CisgICAgICAgICAgICBkZWNsICs9IHR5
cGVfdG9fYXJyYXlfZ2xzbCh0eXBlKTsKKyAgICAgICAgICAgIGlmICghZnVuYy5hcmd1bWVudHMu
ZW1wdHkoKSkKKyAgICAgICAgICAgICAgICBkZWNsICs9ICIsICI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocHJvY2Vzc2luZ19lbnRyeV9wb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1zbF9vcHRpb25zLmFyZ3VtZW50X2J1ZmZlcnMpCisgICAgICAgICAgICAgICAgZGVjbCAr
PSBlbnRyeV9wb2ludF9hcmdzX2FyZ3VtZW50X2J1ZmZlcighZnVuYy5hcmd1bWVudHMuZW1wdHko
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVjbCArPSBlbnRyeV9wb2lu
dF9hcmdzX2NsYXNzaWMoIWZ1bmMuYXJndW1lbnRzLmVtcHR5KCkpOworCisgICAgICAgICAgICAv
LyBJZiBlbnRyeSBwb2ludCBmdW5jdGlvbiBoYXMgdmFyaWFibGVzIHRoYXQgcmVxdWlyZSBlYXJs
eSBkZWNsYXJhdGlvbiwKKyAgICAgICAgICAgIC8vIGVuc3VyZSB0aGV5IGVhY2ggaGF2ZSBhbiBl
bXB0eSBpbml0aWFsaXplciwgY3JlYXRpbmcgb25lIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgZG9uZSBhdCB0aGlzIGxhdGUgc3RhZ2UgYmVjYXVzZSB0aGUgaW5pdGlhbGl6YXRp
b24gZXhwcmVzc2lvbgorICAgICAgICAgICAgLy8gaXMgY2xlYXJlZCBhZnRlciBlYWNoIGNvbXBp
bGF0aW9uIHBhc3MuCisgICAgICAgICAgICBmb3IgKGF1dG8gdmFyX2lkIDogdmFyc19uZWVkaW5n
X2Vhcmx5X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
JmVkX3ZhciA9IGdldDxTUElSVmFyaWFibGU+KHZhcl9pZCk7CisgICAgICAgICAgICAgICAgSUQg
JmluaXRpYWxpemVyID0gZWRfdmFyLmluaXRpYWxpemVyOworICAgICAgICAgICAgICAgIGlmICgh
aW5pdGlhbGl6ZXIpCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gaXIuaW5jcmVh
c2VfYm91bmRfYnkoMSk7CisKKyAgICAgICAgICAgICAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgcHJv
cGVyIGluaXRpYWxpemVycy4KKyAgICAgICAgICAgICAgICBpZiAoaXIuaWRzW2luaXRpYWxpemVy
XS5nZXRfdHlwZSgpID09IFR5cGVOb25lIHx8IGlyLmlkc1tpbml0aWFsaXplcl0uZ2V0X3R5cGUo
KSA9PSBUeXBlRXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgc2V0PFNQSVJFeHByZXNz
aW9uPihlZF92YXIuaW5pdGlhbGl6ZXIsICJ7fSIsIGVkX3Zhci5iYXNldHlwZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gJmFyZyA6IGZ1bmMu
YXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBuYW1lX2lkID0gYXJn
LmlkOworCisgICAgICAgICAgICBhdXRvICp2YXIgPSBtYXliZV9nZXQ8U1BJUlZhcmlhYmxlPihh
cmcuaWQpOworICAgICAgICAgICAgaWYgKHZhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUsIG1h
a2Ugc3VyZSB3ZSBtb2RpZnkgdGhlIG9yaWdpbmFsIHZhcmlhYmxlLgorICAgICAgICAgICAgICAg
IC8vIE91ciBhbGlhcyBpcyBqdXN0IGEgc2hhZG93IHZhcmlhYmxlLgorICAgICAgICAgICAgICAg
IGlmIChhcmcuYWxpYXNfZ2xvYmFsX3ZhcmlhYmxlICYmIHZhci0+YmFzZXZhcmlhYmxlKQorICAg
ICAgICAgICAgICAgICAgICBuYW1lX2lkID0gdmFyLT5iYXNldmFyaWFibGU7CisKKyAgICAgICAg
ICAgICAgICB2YXItPnBhcmFtZXRlciA9ICZhcmc7IC8vIEhvbGQgYSBwb2ludGVyIHRvIHRoZSBw
YXJhbWV0ZXIgc28gd2UgY2FuIGludmFsaWRhdGUgdGhlIHJlYWRvbmx5IGZpZWxkIGlmIG5lZWRl
ZC4KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWRkX2xvY2FsX3ZhcmlhYmxlX25hbWUo
bmFtZV9pZCk7CisKKyAgICAgICAgICAgIGRlY2wgKz0gYXJndW1lbnRfZGVjbChhcmcpOworCisg
ICAgICAgICAgICBib29sIGlzX2R5bmFtaWNfaW1nX3NhbXBsZXIgPSBoYXNfZXh0ZW5kZWRfZGVj
b3JhdGlvbihhcmcuaWQsIFNQSVJWQ3Jvc3NEZWNvcmF0aW9uRHluYW1pY0ltYWdlU2FtcGxlcik7
CisKKyAgICAgICAgICAgIGF1dG8gJmFyZ190eXBlID0gZ2V0PFNQSVJUeXBlPihhcmcudHlwZSk7
CisgICAgICAgICAgICBpZiAoYXJnX3R5cGUuYmFzZXR5cGUgPT0gU1BJUlR5cGU6OlNhbXBsZWRJ
bWFnZSAmJiAhaXNfZHluYW1pY19pbWdfc2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0aWMgcGxhbmUgYXJncyBmb3IgbXVsdGlwbGFu
YXIgdGV4dHVyZQorICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lcyA9IDE7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gKmNvbnN0ZXhwcl9zYW1wbGVyID0gZmluZF9jb25zdGV4cHJfc2Ft
cGxlcihuYW1lX2lkKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0ZXhwcl9zYW1wbGVy
LT55Y2Jjcl9jb252ZXJzaW9uX2VuYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5l
cyA9IGNvbnN0ZXhwcl9zYW1wbGVyLT5wbGFuZXM7CisgICAgICAgICAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMTsgaSA8IHBsYW5lczsgaSsrKQorICAgICAgICAgICAgICAgICAgICBkZWNsICs9
IGpvaW4oIiwgIiwgYXJndW1lbnRfZGVjbChhcmcpLCBwbGFuZV9uYW1lX3N1ZmZpeCwgaSk7CisK
KyAgICAgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0aWMgc2FtcGxlciBhcmcgZm9y
IFNhbXBsZWRJbWFnZSB0ZXh0dXJlCisgICAgICAgICAgICAgICAgaWYgKGFyZ190eXBlLmltYWdl
LmRpbSAhPSBEaW1CdWZmZXIpCisgICAgICAgICAgICAgICAgICAgIGRlY2wgKz0gam9pbigiLCB0
aHJlYWQgY29uc3QgIiwgc2FtcGxlcl90eXBlKGFyZ190eXBlKSwgIiAiLCB0b19zYW1wbGVyX2V4
cHJlc3Npb24oYXJnLmlkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1hbnVm
YWN0dXJlIGF1dG9tYXRpYyBzd2l6emxlIGFyZy4KKyAgICAgICAgICAgIGlmIChtc2xfb3B0aW9u
cy5zd2l6emxlX3RleHR1cmVfc2FtcGxlcyAmJiBoYXNfc2FtcGxlZF9pbWFnZXMgJiYgaXNfc2Ft
cGxlZF9pbWFnZV90eXBlKGFyZ190eXBlKSAmJgorICAgICAgICAgICAgICAgICFpc19keW5hbWlj
X2ltZ19zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lz
X2FycmF5ID0gIWFyZ190eXBlLmFycmF5LmVtcHR5KCk7CisgICAgICAgICAgICAgICAgZGVjbCAr
PSBqb2luKCIsIGNvbnN0YW50IHVpbnQiLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9f
c3dpenpsZV9leHByZXNzaW9uKGFyZy5pZCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoYnVmZmVyc19yZXF1aXJpbmdfYXJyYXlfbGVuZ3RoLmNvdW50KG5hbWVfaWQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lzX2FycmF5ID0gIWFyZ190eXBl
LmFycmF5LmVtcHR5KCk7CisgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNvbnN0YW50
IHVpbnQiLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fYnVmZmVyX3NpemVfZXhwcmVz
c2lvbihuYW1lX2lkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc19zYW1w
bGVkX2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmIGFyZ190eXBlLmltYWdlLmRlcHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXJnX2lzX2FycmF5ID0gIWFyZ190eXBlLmFy
cmF5LmVtcHR5KCk7CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgZGVjbCAr
PSBqb2luKCIsIGNvbnN0YW50IHVuaWZvcm08dWludD4iLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDog
IiYgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4
cHJlc3Npb24oYXJnLmlkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgmYXJn
ICE9ICZmdW5jLmFyZ3VtZW50cy5iYWNrKCkpCisgICAgICAgICAgICAgICAgZGVjbCArPSAiLCAi
OworICAgICAgICB9CisKKyAgICAgICAgZGVjbCArPSAiKSI7CisgICAgICAgIHN0YXRlbWVudChk
ZWNsKTsKKworICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb24KKyAgICB9CisKKyAgICAvLyBPdmVy
cmlkZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cyBwYXNzaW5nIGdlbmVyYXRvciB0byBpbnNlcnQg
c2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIGNvbWUKKyAgICAvLyB0b2dldGhlciB3aXRoIHRo
ZSBzaGFkb3cgc2FtcGxlcgorICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmNfY2FsbF9hcmcoY29uc3Qg
c3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbjo6UGFyYW1ldGVyICZhcmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpZCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IHN0ZDo6c3RyaW5nIGFyZ19zdHIgPSBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1bmNf
Y2FsbF9hcmcoYXJnLCBpZCk7CisKKyAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBl
ICZ0eXBlID0gZXhwcmVzc2lvbl90eXBlKGlkKTsKKworICAgICAgICBpZiAoaXNfc2FtcGxlZF9p
bWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1hZ2UuZGVwdGgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gdGhlIGFyZ3VtZW50IHNl
cXVlbmNlOgorICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayB0aGUgYmFzZSB2YXJpYWJsZSBp
biBjYXNlIHdlIG5lZWQgdG8gYXBwbHkgYSBxdWFsaWZpZWQgYWxpYXMuCisgICAgICAgICAgICB1
aW50MzJfdCB2YXJfaWQgPSAwOworICAgICAgICAgICAgYXV0byAqdmFyICAgICAgID0gbWF5YmVf
Z2V0PHNwaXJ2X2Nyb3NzOjpTUElSVmFyaWFibGU+KGlkKTsKKyAgICAgICAgICAgIGlmICh2YXIp
CisgICAgICAgICAgICAgICAgdmFyX2lkID0gdmFyLT5iYXNldmFyaWFibGU7CisKKyAgICAgICAg
ICAgIGFyZ19zdHIgKz0gIiwgIiArIHRvU2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcl9p
ZCA/IHZhcl9pZCA6IGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJnX3N0cjsKKyAg
ICB9CisKKyAgICAvLyBBZGRpdGlvbmFsIGZ1bmN0aW9ucworICAgIHZvaWQgYWRkQnVpbHRJblJl
c291cmNlcygpCisgICAgeworICAgICAgICB1aW50MzJfdCB2YXJJZCA9IGJ1aWxkX2NvbnN0YW50
X3VpbnRfYXJyYXlfcG9pbnRlcigpOworICAgICAgICBzZXRfbmFtZSh2YXJJZCwga1NoYWRvd1Nh
bXBsZXJDb21wYXJlTW9kZXNWYXJOYW1lKTsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIg
bWF0Y2ggYW55dGhpbmcuCisgICAgICAgIHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29y
YXRpb25EZXNjcmlwdG9yU2V0LCBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc0JpbmRpbmdJbmRl
eCk7CisgICAgICAgIHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29yYXRpb25CaW5kaW5n
LCAwKTsKKyAgICAgICAgc2V0X2V4dGVuZGVkX2RlY29yYXRpb24odmFySWQsIHNwaXJ2X2Nyb3Nz
OjpTUElSVkNyb3NzRGVjb3JhdGlvblJlc291cmNlSW5kZXhQcmltYXJ5LCAwKTsKKyAgICAgICAg
bUFOR0xFU2hhZG93Q29tcGFyZU1vZGVzVmFySWQgPSB2YXJJZDsKKyAgICB9CisKKyAgICB2b2lk
IGFuYWx5emVTaGFkZXJWYXJpYWJsZXMoKQorICAgIHsKKyAgICAgICAgaXIuZm9yX2VhY2hfdHlw
ZWRfaWQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZT4oW3RoaXNdKHVpbnQzMl90LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZSAmdmFyKSB7CisgICAgICAgICAgICBjb25zdCBzcGly
dl9jcm9zczo6U1BJUlR5cGUgJnR5cGUgPSBnZXRfdmFyaWFibGVfZGF0YV90eXBlKHZhcik7Cisg
ICAgICAgICAgICB1aW50MzJfdCB2YXJJZCAgICAgICAgICAgICAgICAgICAgPSB2YXIuc2VsZjsK
KworICAgICAgICAgICAgaWYgKHZhci5zdG9yYWdlID09IHNwdjo6U3RvcmFnZUNsYXNzVW5pZm9y
bUNvbnN0YW50ICYmICFpc19oaWRkZW5fdmFyaWFibGUodmFyKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNfc2FtcGxlZF9pbWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1h
Z2UuZGVwdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSGFzRGVw
dGhTYW1wbGVyID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvICZlbnRyeV9mdW5j
ID0gdGhpcy0+Z2V0PHNwaXJ2X2Nyb3NzOjpTUElSRnVuY3Rpb24+KGlyLmRlZmF1bHRfZW50cnlf
cG9pbnQpOworICAgICAgICAgICAgICAgICAgICBlbnRyeV9mdW5jLmZpeHVwX2hvb2tzX2luLnB1
c2hfYmFjayhbdGhpcywgJnR5cGUsICZ2YXIsIHZhcklkXSgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaXNBcnJheVR5cGUgPSAhdHlwZS5hcnJheS5lbXB0eSgpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQoImNvbnN0YW50IHVuaWZvcm08dWludD4iLCBpc0Fy
cmF5VHlwZSA/ICIqICIgOiAiJiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvU2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcklkKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc0FycmF5VHlwZSA/ICIgPSAmIiA6ICIgPSAiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvX25hbWUobUFOR0xFU2hhZG93Q29tcGFyZU1vZGVz
VmFySWQpLCAiWyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpcnZfY3Jv
c3M6OmNvbnZlcnRfdG9fc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXRfbWV0YWxfcmVzb3VyY2VfaW5kZXgodmFyLCBzcGlydl9jcm9zczo6U1BJUlR5cGU6
OkltYWdlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl07Iik7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdG9TaGFkb3dDb21wYXJlTW9kZUV4
cHJlc3Npb24odWludDMyX3QgaWQpCisgICAgeworICAgICAgICBjb25zdGV4cHIgY2hhciBrQ29t
cGFyZU1vZGVTdWZmaXhbXSA9ICJfQ29tcE1vZGUiOworICAgICAgICBhdXRvICpjb21iaW5lZCAg
ICAgICAgICAgICAgICAgICAgICA9IG1heWJlX2dldDxzcGlydl9jcm9zczo6U1BJUkNvbWJpbmVk
SW1hZ2VTYW1wbGVyPihpZCk7CisKKyAgICAgICAgc3RkOjpzdHJpbmcgZXhwciA9IHRvX2V4cHJl
c3Npb24oY29tYmluZWQgPyBjb21iaW5lZC0+aW1hZ2UgOiBzcGlydl9jcm9zczo6VmFyaWFibGVJ
RChpZCkpOworICAgICAgICBhdXRvIGluZGV4ICAgICAgID0gZXhwci5maW5kX2ZpcnN0X29mKCdb
Jyk7CisKKyAgICAgICAgaWYgKGluZGV4ID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAg
ICAgcmV0dXJuIGV4cHIgKyBrQ29tcGFyZU1vZGVTdWZmaXg7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBpbWFnZUV4cHIgPSBleHByLnN1YnN0cigwLCBpbmRleCk7
CisgICAgICAgICAgICBhdXRvIGFycmF5RXhwciA9IGV4cHIuc3Vic3RyKGluZGV4KTsKKyAgICAg
ICAgICAgIHJldHVybiBpbWFnZUV4cHIgKyBrQ29tcGFyZU1vZGVTdWZmaXggKyBhcnJheUV4cHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb250ZXh0ICptQ29udGV4dDsKKyAgICB1aW50MzJf
dCBtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCA9IDA7CisgICAgYm9vbCBtSGFzRGVwdGhT
YW1wbGVyICAgICAgICAgICAgICAgICAgPSBmYWxzZTsKIH07CiAKLWFuZ2xlOjpSZXN1bHQgQ29u
dmVydFNwaXJ2VG9Nc2woCi0gICAgQ29udGV4dCAqY29udGV4dCwKLSAgICBnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlLAotICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
dWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVk
X21hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAotICAgIGNvbnN0
IE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLAotICAg
IHN0ZDo6dmVjdG9yPHVpbnQzMl90PiAqc3ByaXZDb2RlLAotICAgIFRyYW5zbGF0ZWRTaGFkZXJJ
bmZvICp0cmFuc2xhdGVkU2hhZGVySW5mb091dCkKK2FuZ2xlOjpSZXN1bHQgQ29udmVydFNwaXJ2
VG9Nc2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2lu
YWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6
Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01h
cCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiAqc3ByaXZDb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZFNoYWRlckluZm9P
dXQpCiB7CiAgICAgaWYgKCFzcHJpdkNvZGUgfHwgc3ByaXZDb2RlLT5lbXB0eSgpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIFNw
aXJ2VG9Nc2xDb21waWxlciBjb21waWxlck1zbChzdGQ6Om1vdmUoKnNwcml2Q29kZSkpOworICAg
IFNwaXJ2VG9Nc2xDb21waWxlciBjb21waWxlck1zbChjb250ZXh0LCBzdGQ6Om1vdmUoKnNwcml2
Q29kZSkpOwogCiAgICAgLy8gTk9URShocWxlKTogc3BpcnYtY3Jvc3MgdXNlcyBleGNlcHRpb25z
IHRvIHJlcG9ydCBlcnJvciwgd2hhdCBzaG91bGQgd2UgZG8gaGVyZQogICAgIC8vIGluIGNhc2Ug
b2YgZXJyb3I/CkBAIC0zODAsMjcgKzExMTYsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnZlcnRTcGly
dlRvTXNsKAogCiB9ICAvLyBuYW1lc3BhY2UKIAotdm9pZCBUcmFuc2xhdGVkU2hhZGVySW5mbzo6
cmVzZXQoKQotewotICAgIG1ldGFsU2hhZGVyU291cmNlLmNsZWFyKCk7Ci0gICAgbWV0YWxMaWJy
YXJ5ICAgICAgICAgPSBuaWw7Ci0gICAgaGFzVUJPQXJndW1lbnRCdWZmZXIgPSBmYWxzZTsKLSAg
ICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOiBhY3R1YWxTYW1wbGVyQmluZGlu
Z3MpCi0gICAgewotICAgICAgICBiaW5kaW5nLnRleHR1cmVCaW5kaW5nID0gbXRsOjprTWF4U2hh
ZGVyU2FtcGxlcnM7Ci0gICAgfQotCi0gICAgZm9yICh1aW50MzJfdCAmYmluZGluZyA6IGFjdHVh
bFVCT0JpbmRpbmdzKQotICAgIHsKLSAgICAgICAgYmluZGluZyA9IG10bDo6a01heFNoYWRlckJ1
ZmZlcnM7Ci0gICAgfQotCi0gICAgZm9yICh1aW50MzJfdCAmYmluZGluZyA6IGFjdHVhbFhGQkJp
bmRpbmdzKQotICAgIHsKLSAgICAgICAgYmluZGluZyA9IG10bDo6a01heFNoYWRlckJ1ZmZlcnM7
Ci0gICAgfQotfQotCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dy
YW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQs
CkBAIC00MzEsMTIgKzExNDYsMTMgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0
IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKICAgICAgICAgICAgIG9wdGlvbnMsIHBy
b2dyYW1TdGF0ZSwgJnhmYk9ubHlJbnRlcmZhY2VJbmZvLCB4ZmJPbmx5U2hhZGVyU291cmNlT3V0
LAogICAgICAgICAgICAgJnhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNoYWRlclR5cGU6OlZlcnRl
eF0pOwogCi0gICAgICAgIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMob3B0aW9ucywgcHJvZ3JhbVN0
YXRlLmdldEV4ZWN1dGFibGUoKSwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmeGZiT25seUludGVyZmFjZUluZm8sICZ4ZmJPbmx5VmFyaWFi
bGVNYXBzKTsKKyAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhvcHRpb25zLCBwcm9ncmFt
U3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCAmeGZiT25seUlu
dGVyZmFjZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhmYk9ubHlWYXJp
YWJsZU1hcHMpOwogICAgICAgICAqeGZiT25seVZTVmFyaWFibGVJbmZvTWFwT3V0ID0gc3RkOjpt
b3ZlKHhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pOwogICAgIH0K
IH0KIAorCiBhbmdsZTo6UmVzdWx0IEdsc2xhbmdHZXRTaGFkZXJTcGlydkNvZGUoRXJyb3JIYW5k
bGVyICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNoYWRlclN0YWdlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLApAQCAtNDc4
LDcgKzExOTQsNyBAQCBhbmdsZTo6UmVzdWx0IFNwaXJ2Q29kZVRvTXNsKENvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICpt
c2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8pCiB7CiAgICAgLy8gUmV0cmll
dmUgb3JpZ2luYWwgdW5pZm9ybSBidWZmZXIgYmluZGluZ3MgZ2VuZXJhdGVkIGJ5IGZyb250IGVu
ZC4gV2Ugd2lsbCBuZWVkIHRvIGRvIGEgcmVtYXAuCi0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5nczsKKyAgICBhbmdsZTo6SGFz
aE1hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGluZ3M7CiAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRl
LmdldFVuaWZvcm1CbG9ja3MoKTsKICAgICBmb3IgKHVpbnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1
ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySWR4KQogICAgIHsKQEAgLTQ4OSw3ICsx
MjA1LDcgQEAgYW5nbGU6OlJlc3VsdCBTcGlydkNvZGVUb01zbChDb250ZXh0ICpjb250ZXh0LAog
ICAgICAgICB9CiAgICAgfQogICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIFhGQiBidWZmZXJzIGJp
bmRpbmdzIHByb2R1Y2VkIGJ5IGZyb250IGVuZC4KLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8dWlu
dDMyX3QsIHVpbnQzMl90PiB4ZmJPcmlnaW5hbEJpbmRpbmdzOworICAgIGFuZ2xlOjpIYXNoTWFw
PHVpbnQzMl90LCB1aW50MzJfdD4geGZiT3JpZ2luYWxCaW5kaW5nczsKICAgICBmb3IgKHVpbnQz
Ml90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGtNYXhTaGFkZXJYRkJzOyArK2J1ZmZlcklk
eCkKICAgICB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGJ1ZmZlck5hbWUgPSByeDo6R2V0WGZiQnVm
ZmVyTmFtZShidWZmZXJJZHgpOwpAQCAtNTMzLDYgKzEyNDksNSBAQCBhbmdsZTo6UmVzdWx0IFNw
aXJ2Q29kZVRvTXNsKENvbnRleHQgKmNvbnRleHQsCiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9Ci0KIH0gIC8vIG5hbWVzcGFjZSBtdGwKIH0gIC8vIG5hbWVzcGFjZSBy
eApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9v
bC5oCmluZGV4IDg3ZGMyMTc2NDYzN2ExYjFmZmUzOWJlNzFjM2UyODQ0ZTg5MTI3Y2EuLmY4NTcw
MzQ5OWQ2MWJjZWZiMThlMDU5MTEyNWNjZGNkNjc2MmE5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9u
X3F1ZXJ5X3Bvb2wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29s
Lm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQppbmRleCAzNjhkYmY0NjY5NmFkMmY1NDgxMjMz
Mjk0MGFmYmI0MjIzZTdiZmFkLi43Y2M4OTkwMDRlYzdlYTgzZmVmNjg1ZGVhZWU4YzgwZTI5NjQ2
OGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1
ZXJ5X3Bvb2wubW0KQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC01
MiwxNiArNTIsMTUgQEAgYW5nbGU6OlJlc3VsdCBPY2NsdXNpb25RdWVyeVBvb2w6OmFsbG9jYXRl
UXVlcnlPZmZzZXQoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICB7CiAgICAgICAgIC8vIEZp
cnN0IGFsbG9jYXRpb24KICAgICAgICAgQU5HTEVfVFJZKEJ1ZmZlcjo6TWFrZUJ1ZmZlcldpdGhS
ZXNPcHQoY29udGV4dE10bCwgTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVByaXZhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtPY2NsdXNpb25RdWVyeVJl
c3VsdFNpemUsIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtUmVuZGVyUGFzc1Jlc3VsdHNQb29sKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVsbHB0ciwgJm1S
ZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbC0+
Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7CiAgICAgfQogICAgIGVsc2UgaWYg
KGN1cnJlbnRPZmZzZXQgKyBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID4gbVJlbmRlclBhc3NS
ZXN1bHRzUG9vbC0+c2l6ZSgpKQogICAgIHsKICAgICAgICAgLy8gRG91YmxlIHRoZSBjYXBhY2l0
eQogICAgICAgICBBTkdMRV9UUlkoQnVmZmVyOjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0
TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbC0+c2l6ZSgp
ICogMiwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkgKiAyLCBudWxscHRy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUmVuZGVyUGFzc1Jlc3Vs
dHNQb29sKSk7CiAgICAgICAgIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wtPmdldCgpLmxhYmVsID0g
QCJPY2NsdXNpb25RdWVyeVBvb2wiOwogICAgIH0KIApAQCAtODgsNiArODcsMTIgQEAgYW5nbGU6
OlJlc3VsdCBPY2NsdXNpb25RdWVyeVBvb2w6OmFsbG9jYXRlUXVlcnlPZmZzZXQoQ29udGV4dE10
bCAqY29udGV4dE10bCwKICAgICBpZiAoY3VycmVudE9mZnNldCA9PSAwKQogICAgIHsKICAgICAg
ICAgbVJlc2V0Rmlyc3RRdWVyeSA9IGNsZWFyT2xkVmFsdWU7CisgICAgICAgIGlmICghY2xlYXJP
bGRWYWx1ZSAmJiAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFsbG93
QnVmZmVyUmVhZFdyaXRlLmVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG9s
ZCB2YWx1ZSBvZiBmaXJzdCBxdWVyeSBuZWVkcyB0byBiZSByZXRhaW5lZCBhbmQgZGV2aWNlIGRv
ZXNuJ3Qgc3VwcG9ydCBidWZmZXIKKyAgICAgICAgICAgIC8vIHJlYWQtd3JpdGUsIHdlIG5lZWQg
YW4gYWRkaXRpb25hbCBvZmZzZXQgdG8gc3RvcmUgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgcXVlcnku
CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVRdWVyeU9mZnNldChjb250ZXh0TXRsLCBxdWVy
eSwgZmFsc2UpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOwpAQCAtMTEyLDEwICsxMTcsMzQgQEAgdm9pZCBPY2NsdXNpb25RdWVyeVBvb2w6
OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyhDb250ZXh0TXRsICpjb250ZXh0TXRsKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVuZGVyVXRpbHMgJnV0aWxzID0gY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRVdGlscygpOworICAgIFJlbmRlclV0aWxzICZ1dGlscyAgICAgICAg
ICAgICAgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgQmxpdENv
bW1hbmRFbmNvZGVyICpibGl0RW5jb2RlciA9IG51bGxwdHI7CisgICAgLy8gQ29tYmluZSB0aGUg
dmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9yIGZpcnN0IHF1ZXJ5Cisg
ICAgaWYgKG1BbGxvY2F0ZWRRdWVyaWVzWzBdKQorICAgIHsKKyAgICAgICAgY29uc3QgQnVmZmVy
UmVmICZkc3RCdWYgPSBtQWxsb2NhdGVkUXVlcmllc1swXS0+Z2V0VmlzaWJpbGl0eVJlc3VsdEJ1
ZmZlcigpOworICAgICAgICBjb25zdCBWaXNpYmlsaXR5QnVmZmVyT2Zmc2V0c010bCAmYWxsb2Nh
dGVkT2Zmc2V0cyA9CisgICAgICAgICAgICBtQWxsb2NhdGVkUXVlcmllc1swXS0+Z2V0QWxsb2Nh
dGVkVmlzaWJpbGl0eU9mZnNldHMoKTsKKyAgICAgICAgaWYgKCFtUmVzZXRGaXJzdFF1ZXJ5ICYm
CisgICAgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFs
bG93QnVmZmVyUmVhZFdyaXRlLmVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElm
IHdlIGNhbm5vdCByZWFkIGFuZCB3cml0ZSB0byB0aGUgc2FtZSBidWZmZXIgaW4gc2hhZGVyLiBX
ZSBuZWVkIHRvIGNvcHkgdGhlIG9sZAorICAgICAgICAgICAgLy8gdmFsdWUgb2YgZmlyc3QgcXVl
cnkgdG8gZmlyc3Qgb2Zmc2V0IGFsbG9jYXRlZCBmb3IgaXQuCisgICAgICAgICAgICBibGl0RW5j
b2RlciA9IGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5jb2RlcigpOworICAgICAgICAgICAg
YmxpdEVuY29kZXItPmNvcHlCdWZmZXIoZHN0QnVmLCAwLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29s
LCBhbGxvY2F0ZWRPZmZzZXRzLmZyb250KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplKTsKKyAgICAgICAgICAgIHV0aWxzLmNv
bWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIGZhbHNlLCBhbGxvY2F0ZWRPZmZzZXRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NS
ZXN1bHRzUG9vbCwgZHN0QnVmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsICFt
UmVzZXRGaXJzdFF1ZXJ5LCBhbGxvY2F0ZWRPZmZzZXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVmKTsKKyAg
ICAgICAgfQorICAgIH0KIAogICAgIC8vIENvbWJpbmUgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhl
IG9mZnNldHMgYWxsb2NhdGVkIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVlcmllcwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCisg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtQWxsb2NhdGVkUXVlcmllcy5zaXplKCk7ICsraSkK
ICAgICB7CiAgICAgICAgIFF1ZXJ5TXRsICpxdWVyeSA9IG1BbGxvY2F0ZWRRdWVyaWVzW2ldOwog
ICAgICAgICBpZiAoIXF1ZXJ5KQpAQCAtMTI2LDEyICsxNTUsMTIgQEAgdm9pZCBPY2NsdXNpb25R
dWVyeVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyhDb250ZXh0TXRsICpjb250ZXh0TXRs
KQogICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZiA9IG1BbGxvY2F0ZWRRdWVyaWVzW2ld
LT5nZXRWaXNpYmlsaXR5UmVzdWx0QnVmZmVyKCk7CiAgICAgICAgIGNvbnN0IFZpc2liaWxpdHlC
dWZmZXJPZmZzZXRzTXRsICZhbGxvY2F0ZWRPZmZzZXRzID0KICAgICAgICAgICAgIG1BbGxvY2F0
ZWRRdWVyaWVzW2ldLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOwotICAgICAgICB1
dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCAvKioga2VlcE9sZFZhbHVl
ICovIGkgPT0gMCAmJiAhbVJlc2V0Rmlyc3RRdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwg
ZHN0QnVmKTsKKyAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10
bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEJ1Zik7CiAgICAgfQogCiAgICAg
Ly8gUmVxdWVzdCBzeW5jaHJvbml6YXRpb24gYW5kIGNsZWFudXAKLSAgICBCbGl0Q29tbWFuZEVu
Y29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7
CisgICAgYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytp
KQogICAgIHsKICAgICAgICAgUXVlcnlNdGwgKnF1ZXJ5ID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaAppbmRleCA2Yjk2N2Rl
OGZkNDkwYTQ4MTM1ODgzMmE3NmYyMDY1NGRiMGU5MTE5Li5kMGE0ODM3MThmZTA1NDRkYjU3ZGZl
OWVlZWViM2M3YjQ4ZTRiYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVy
X3V0aWxzLmgKQEAgLTYsNiArNiw4IEBACiAvLyBtdGxfcmVuZGVyX3V0aWxzLmg6CiAvLyAgICBE
ZWZpbmVzIHRoZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFJlbmRlclV0aWxzLCB3aGljaCBjb250YWlu
cyBtYW55IHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBzaGFkZXJzCiAvLyAgICBmb3IgY29udmVydGlu
ZywgYmxpdHRpbmcsIGNvcHlpbmcgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGRhdGEsIGFuZCBtYW55
IG1vcmUuCisvLyBOT1RFKGhxbGUpOiBDb25zaWRlciBzcGxpdHRpbmcgdGhpcyBjbGFzcyBpbnRv
IG11bHRpcGxlIGNsYXNzZXMgZWFjaCBkb2luZyBkaWZmZXJlbnQgdXRpbGl0aWVzLgorLy8gVGhp
cyBjbGFzcyBoYXMgYmVjb21lIHRvbyBiaWcuCiAvLwogCiAjaWZuZGVmIExJQkFOR0xFX1JFTkRF
UkVSX01FVEFMX01UTF9SRU5ERVJfVVRJTFNfSF8KQEAgLTg5LDYgKzkxLDggQEAgc3RydWN0IENv
bG9yQmxpdFBhcmFtcyA6IHB1YmxpYyBCbGl0UGFyYW1zCiBzdHJ1Y3QgRGVwdGhTdGVuY2lsQmxp
dFBhcmFtcyA6IHB1YmxpYyBCbGl0UGFyYW1zCiB7CiAgICAgVGV4dHVyZVJlZiBzcmNTdGVuY2ls
OworICAgIHVpbnQzMl90IHNyY1N0ZW5jaWxMZXZlbCA9IDA7CisgICAgdWludDMyX3Qgc3JjU3Rl
bmNpbExheWVyID0gMDsKIH07CiAKIC8vIFN0ZW5jaWwgYmxpdCB2aWEgYW4gaW50ZXJtZWRpYXRl
IGJ1ZmZlci4gTk9URTogc291cmNlIGRlcHRoIHRleHR1cmUgcGFyYW1ldGVyIGlzIGlnbm9yZWQu
CkBAIC0zMDksMjEgKzMxMywxNyBAQCBjbGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCiAgIHB1YmxpYzoKICAgICB2b2lkIG9uRGVzdHJveSgpOwogCi0g
ICAgLy8gQ29udmVydCBpbmRleCBidWZmZXIuCiAgICAgYW5nbGU6OlJlc3VsdCBjb252ZXJ0SW5k
ZXhCdWZmZXJHUFUoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleENvbnZlcnNpb25QYXJhbXMgJnBhcmFtcyk7
Ci0gICAgLy8gR2VuZXJhdGUgdHJpYW5nbGUgZmFuIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJy
YXlzKCkuCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21BcnJheXMo
Q29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZw
YXJhbXMpOwogICAgIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRleCBidWZmZXIgZm9yIGds
RHJhd0VsZW1lbnRzKCkuCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZy
b21FbGVtZW50c0FycmF5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJh
dGlvblBhcmFtcyAmcGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKTsKIAotICAgIC8vIEdlbmVyYXRlIGxpbmUgbG9v
cCBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgogICAgIGFuZ2xlOjpSZXN1bHQgZ2Vu
ZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRy
aUZhbk9yTGluZUxvb3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7Ci0gICAgLy8gR2VuZXJhdGUg
bGluZSBsb29wJ3MgbGFzdCBzZWdtZW50IGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzKCku
Ci0gICAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gcHJpbWl0aXZlIHJlc3RhcnQgaXMgbm90IGVuYWJs
ZWQuCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnQoQ29udGV4
dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCBmaXJzdFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXN0VmVydGV4LApAQCAtMzQwLDYgKzM0MCwx
OCBAQCBjbGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxl
CiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnRGcm9tRWxlbWVu
dHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0
aW9uUGFyYW1zICZwYXJhbXMpOwogCisgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdl
bmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworCisgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcihDb250ZXh0
TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
KmluZGljZXNHZW5lcmF0ZWQpOworCisgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQp
OworCiAgIHByaXZhdGU6CiAgICAgLy8gSW5kZXggZ2VuZXJhdG9yIGNvbXB1dGUgcGlwZWxpbmVz
OgogICAgIC8vICAtIEZpcnN0IGRpbWVuc2lvbjogaW5kZXggdHlwZS4KQEAgLTM0OCw3ICszNjAs
NiBAQCBjbGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxl
CiAgICAgICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRl
UGlwZWxpbmVTdGF0ZT4+LCAyPiwKICAgICAgICAgICAgICAgICAgICBhbmdsZTo6RW51bVNpemU8
Z2w6OkRyYXdFbGVtZW50c1R5cGU+KCk+OwogCi0gICAgLy8gR2V0IGNvbXB1dGUgcGlwZWxpbmUg
dG8gY29udmVydCBpbmRleCBiZXR3ZWVuIGJ1ZmZlcnMuCiAgICAgQXV0b09iakNQdHI8aWQ8TVRM
Q29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBnZXRJbmRleENvbnZlcnNpb25QaXBlbGluZSgKICAgICAg
ICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
c3JjVHlwZSwKQEAgLTM3NSw3ICszODYsOCBAQCBjbGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgICAgIC8vIE11c3QgYmUgbXVsdGlwbGVzIG9m
IGtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudAogICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQp
OwogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJh
eUNQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRl
TGluZUxvb3BCdWZmZXJGcm9tRWxlbWVudHNBcnJheUdQVSgKICAgICAgICAgQ29udGV4dE10bCAq
Y29udGV4dE10bCwKQEAgLTM5Myw2ICs0MDUsMTEgQEAgY2xhc3MgSW5kZXhHZW5lcmF0b3JVdGls
cyBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLAogICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CiAKKyAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bVZlcnRpY2VzUGVyUHJpbWl0aXZlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKICAgICBJbmRleENvbnZlcnNpb25Q
aXBlbGluZUFycmF5IG1JbmRleENvbnZlcnNpb25QaXBlbGluZUNhY2hlczsKIAogICAgIEluZGV4
Q29udmVyc2lvblBpcGVsaW5lQXJyYXkgbVRyaUZhbkZyb21FbGVtQXJyYXlHZW5lcmF0b3JQaXBl
bGluZUNhY2hlczsKQEAgLTQyOSw3ICs0NDYsNyBAQCBjbGFzcyBNaXBtYXBVdGlscyBmaW5hbCA6
IGFuZ2xlOjpOb25Db3B5YWJsZQogICBwdWJsaWM6CiAgICAgdm9pZCBvbkRlc3Ryb3koKTsKIAot
ICAgIC8vIENvbXB1dGUgYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24uIE9ubHkgcG9zc2libGUgZm9y
IDNEIHRleHR1cmUgZm9yIG5vdy4KKyAgICAvLyBDb21wdXRlIGJhc2VkIG1pcG1hcCBnZW5lcmF0
aW9uLgogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVNaXBtYXBDUyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJl
UmVmICZzcmNUZXh0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNSR0JNaXBtYXAsCkBAIC00MzcsOSArNDU0LDE1IEBAIGNsYXNzIE1pcG1hcFV0aWxzIGZpbmFs
IDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAKICAgcHJpdmF0ZToKICAgICB2b2lkIGVuc3VyZTNETWlw
R2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKKyAg
ICB2b2lkIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRs
ICpjb250ZXh0TXRsKTsKKyAgICB2b2lkIGVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlQ3Vi
ZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7
CiAKICAgICAvLyBNaXBtYXBzIGdlbmVyYXRpbmcgY29tcHV0ZSBwaXBlbGluZToKICAgICBBdXRv
T2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG0zRE1pcEdlbmVyYXRvclBpcGVs
aW5lOworICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gbTJETWlw
R2VuZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5l
U3RhdGU+PiBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lOworICAgIEF1dG9PYmpDUHRyPGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gbUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZTsKIH07
CiAKIC8vIFV0aWwgY2xhc3MgZm9yIGhhbmRsaW5nIHBpeGVscyBjb3B5IGJldHdlZW4gYnVmZmVy
cyBhbmQgdGV4dHVyZXMKQEAgLTU0Myw2ICs1NjYsMjEgQEAgY2xhc3MgVmVydGV4Rm9ybWF0Q29u
dmVyc2lvblV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgUmVuZGVyUGlwZWxp
bmVDYWNoZSBtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lQ2FjaGU7CiB9OwogCisvLyBV
dGlsIGNsYXNzIGZvciBoYW5kbGluZyB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICBjbGFzcyBUcmFu
c2Zvcm1GZWVkYmFja1V0aWxzCit7CisgIHB1YmxpYzoKKyAgICB2b2lkIG9uRGVzdHJveSgpOwor
ICAgIEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBnZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lKAorICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
ICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYyk7CisKKyAgcHJpdmF0ZToKKyAgICBBdXRv
T2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gY3JlYXRlTXNsWGZiTGlicmFyeShDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkTXNsKTsKK307CisKIC8vIFJlbmRl
clV0aWxzOiBjb250YWluZXIgY2xhc3Mgb2YgdmFyaW91cyB1dGlsIGNsYXNzZXMgYWJvdmUKIGNs
YXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQogewpA
QCAtNTg3LDcgKzYyNSw4IEBAIGNsYXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFu
Z2xlOjpOb25Db3B5YWJsZQogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlGYW5CdWZmZXJG
cm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJh
eVBhcmFtcyAmcGFyYW1zKTsKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVy
RnJvbUVsZW1lbnRzQXJyYXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFt
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpOwogCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5l
cmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJp
RmFuT3JMaW5lTG9vcEZyb21BcnJheVBhcmFtcyAmcGFyYW1zKTsKQEAgLTYzOSw2ICs2NzgsMTkg
QEAgY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
Q29tbWFuZEVuY29kZXIgKnJlbmRlckVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmc3JjQW5nbGVGb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmVydGV4Rm9ybWF0Q29udmVydFBhcmFtcyAmcGFyYW1zKTsKKyAgICBhbmdsZTo6UmVzdWx0
IGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFu
ZEVuY29kZXIgKnJlbmRlckVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsKKwor
ICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRl
eEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFt
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOwogCiAgIHByaXZhdGU6CiAgICAgLy8gb3Zl
cnJpZGUgRXJyb3JIYW5kbGVyCkBAIC02NDYsNyArNjk4LDcgQEAgY2xhc3MgUmVuZGVyVXRpbHMg
OiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVu
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisgICAgdm9p
ZCBoYW5kbGVFcnJvcihOU0Vycm9yICplcnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKQEAgLTY2
Miw2ICs3MTQsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICBNaXBtYXBVdGlscyBtTWlwbWFwVXRpbHM7CiAgICAgc3RkOjphcnJh
eTxDb3B5UGl4ZWxzVXRpbHMsIGFuZ2xlOjpFbnVtU2l6ZTxQaXhlbFR5cGU+KCk+IG1Db3B5UGl4
ZWxzVXRpbHM7CiAgICAgVmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzIG1WZXJ0ZXhGb3JtYXRV
dGlsczsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja1V0aWxzIG1UcmFuc2Zvcm1GZWVkYmFja1V0aWxz
OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIG10bApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMubW0g
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3JlbmRlcl91dGlscy5tbQppbmRleCBkMjI0ODAxNDI3M2MzN2Q0ZDRiMmJlZTcwY2ZkYWIxMTk1
YzE4YmE2Li4zMmIzM2NhYjhmYmU5MTFiYjI2YTgwMjNmOWZlYjMxYzU3YzkxNjdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX3JlbmRlcl91dGlscy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbQpAQCAtMTUsNiArMTUsNyBA
QAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1F1ZXJ5TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIgpA
QCAtNTQsMTAgKzU1LDEyIEBAIHN0cnVjdCBCbGl0UGFyYW1zVW5pZm9ybQogICAgIGZsb2F0IHNy
Y1RleENvb3Jkc1szXVsyXTsKICAgICBpbnQgc3JjTGV2ZWwgICAgICAgICA9IDA7CiAgICAgaW50
IHNyY0xheWVyICAgICAgICAgPSAwOworICAgIGludCBzcmNMZXZlbDIgICAgICAgID0gMDsKKyAg
ICBpbnQgc3JjTGF5ZXIyICAgICAgICA9IDA7CiAgICAgdWludDhfdCBkc3RGbGlwWCAgICAgPSAw
OwogICAgIHVpbnQ4X3QgZHN0RmxpcFkgICAgID0gMDsKICAgICB1aW50OF90IGRzdEx1bWluYW5j
ZSA9IDA7ICAvLyBkZXN0IHRleHR1cmUgaXMgbHVtaW5hY2UKLSAgICB1aW50OF90IHBhZGRpbmdb
MTNdOworICAgIHVpbnQ4X3QgcGFkZGluZ1s5XTsKIH07CiAKIHN0cnVjdCBCbGl0U3RlbmNpbFRv
QnVmZmVyUGFyYW1zVW5pZm9ybQpAQCAtOTAsNyArOTMsNyBAQCBzdHJ1Y3QgSW5kZXhDb252ZXJz
aW9uVW5pZm9ybQogICAgIHVpbnQ4X3QgcGFkZGluZ1s3XTsKIH07CiAKLS8vIFNlZSBsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWwKKy8vIFNlZSBsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL21pc2MubWV0YWwKIHN0cnVjdCBDb21iaW5lVmlzaWJp
bGl0eVJlc3VsdFVuaWZvcm0KIHsKICAgICB1aW50MzJfdCBzdGFydE9mZnNldDsKQEAgLTk5LDEy
ICsxMDIsMTEgQEAgc3RydWN0IENvbWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQogfTsKIAog
Ly8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAot
c3RydWN0IEdlbmVyYXRlTWlwbWFwVW5pZm9ybQorc3RydWN0IEdlbmVyYXRlM0RNaXBtYXBVbmlm
b3JtCiB7CiAgICAgdWludDMyX3Qgc3JjTGV2ZWw7CiAgICAgdWludDMyX3QgbnVtTWlwbWFwc1Rv
R2VuZXJhdGU7Ci0gICAgdWludDhfdCBzUkdCOwotICAgIHVpbnQ4X3QgcGFkZGluZ1s3XTsKKyAg
ICB1aW50MzJfdCBwYWRkaW5nWzJdOwogfTsKIAogLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWwKQEAgLTE1NiwxOSArMTU4LDM2IEBAIHN0cnVj
dCBDb3B5VmVydGV4VW5pZm9ybXMKIC8vIGV4aXRpbmcgYmxvY2suCiBzdHJ1Y3QgU2NvcGVkRGlz
YWJsZU9jY2x1c2lvblF1ZXJ5CiB7Ci0gICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5KENv
bnRleHRNdGwgKmNvbnRleHRNdGwsIGFuZ2xlOjpSZXN1bHQgKnJlc3VsdE91dCkKLSAgICAgICAg
OiBtQ29udGV4dE10bChjb250ZXh0TXRsKSwgbVJlc3VsdE91dChyZXN1bHRPdXQpCisgICAgU2Nv
cGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZTo6UmVzdWx0ICpyZXN1bHRPdXQp
CisgICAgICAgIDogbUNvbnRleHRNdGwoY29udGV4dE10bCksIG1FbmNvZGVyKGVuY29kZXIpLCBt
UmVzdWx0T3V0KHJlc3VsdE91dCkKICAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpZiAo
Y29udGV4dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZW5jb2Rlci0+cHVzaERlYnVnR3JvdXAoQCJEaXNhYmxlZCBPY2NsdXNpb25RdWVyeSIp
OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgLy8gdGVtcG9yYXJpbHkgZGlzYWJsZSBvY2Ns
dXNpb24gcXVlcnkKICAgICAgICAgY29udGV4dE10bC0+ZGlzYWJsZUFjdGl2ZU9jY2x1c2lvblF1
ZXJ5SW5SZW5kZXJQYXNzKCk7CiAgICAgfQogICAgIH5TY29wZWREaXNhYmxlT2NjbHVzaW9uUXVl
cnkoKQogICAgIHsKICAgICAgICAgKm1SZXN1bHRPdXQgPSBtQ29udGV4dE10bC0+cmVzdGFydEFj
dGl2ZU9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQYXNzKCk7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBpZiAobUNvbnRleHRNdGwtPmhhc0FjdGl2ZU9jY2x1c2lvblF1ZXJ5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FbmNvZGVyLT5wb3BEZWJ1Z0dyb3VwKCk7CisgICAgICAgIH0KKyNlbHNl
CisgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShtRW5jb2Rlcik7CisjZW5kaWYKICAgICB9
CiAKICAgcHJpdmF0ZToKICAgICBDb250ZXh0TXRsICptQ29udGV4dE10bDsKKyAgICBSZW5kZXJD
b21tYW5kRW5jb2RlciAqbUVuY29kZXI7CiAKICAgICBhbmdsZTo6UmVzdWx0ICptUmVzdWx0T3V0
OwogfTsKQEAgLTIxOSw2NiArMjM4LDQzIEBAIGFuZ2xlOjpSZXN1bHQgR2VuVHJpRmFuRnJvbUNs
aWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJl
ZiAmZHN0QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgZHN0T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgZHN0T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCiB7CiAgICAgQVNTRVJUKGNv
dW50ID4gMik7Ci0KLSAgICB1aW50MzJfdCBnZW5JbmRpY2VzQ291bnQ7Ci0gICAgQU5HTEVfVFJZ
KG10bDo6R2V0VHJpYW5nbGVGYW5JbmRpY2VzQ291bnQoY29udGV4dE10bCwgY291bnQsICZnZW5J
bmRpY2VzQ291bnQpKTsKLQotICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5k
ZXggICAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKLSAgICBjb25zdCB1aW50MzJf
dCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpOwotCisgICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworICAgIEdMc2l6ZWkgZHN0VHJpYW5nbGUg
ICAgICAgICAgICAgICAgICAgPSAwOwogICAgIHVpbnQzMl90ICpkc3RQdHIgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNvbnRleHRNdGwpICsgZHN0T2Zmc2V0
KTsKLSAgICBUIHRyaUZpcnN0SWR4ICAgID0gMDsgIC8vIFZlcnRleCBpbmRleCBvZiB0cmlhbmxn
ZSdzIDFzdCB2ZXJ0ZXgKLSAgICBUIHNyY1ByZXZJZHggICAgID0gMDsgIC8vIFZlcnRleCBpbmRl
eCBvZiB0cmlhbmxnZSdzIDJuZCB2ZXJ0ZXgKKyAgICBUIHRyaUZpcnN0SWR4LCBzcmNQcmV2SWR4
OwogICAgIG1lbWNweSgmdHJpRmlyc3RJZHgsIGluZGljZXMsIHNpemVvZih0cmlGaXJzdElkeCkp
OworICAgIG1lbWNweSgmc3JjUHJldklkeCwgaW5kaWNlcyArIDEsIHNpemVvZihzcmNQcmV2SWR4
KSk7CiAKICAgICBpZiAocHJpbWl0aXZlUmVzdGFydEVuYWJsZWQpCiAgICAgewotICAgICAgICAv
LyB0cmlGaXJzdElkeExvYzogTG9jYXRpb24gb2YgY3VycmVudCB0cmlhbmdsZSdzIGZpc3QgdmVy
dGV4IGluIHNvdXJjZSBidWZmZXIuCiAgICAgICAgIEdMc2l6ZWkgdHJpRmlyc3RJZHhMb2MgPSAw
OwogICAgICAgICB3aGlsZSAodHJpRmlyc3RJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRl
eCkKICAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbdHJpRmlyc3RJZHhMb2Mr
K10sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LAotICAgICAgICAgICAgICAgICAgIHNpemVv
ZihrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4KSk7CisgICAgICAgICAgICArK3RyaUZpcnN0SWR4
TG9jOwogICAgICAgICAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcyArIHRyaUZpcnN0
SWR4TG9jLCBzaXplb2YodHJpRmlyc3RJZHgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0
cmlGaXJzdElkeExvYyArIDIgPj0gY291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5v
dCBlbm91Z2ggaW5kaWNlcy4KLSAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gdHJpRmlyc3RJ
ZHhMb2M7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1l
bWNweSgmZHN0UHRyW2ldLCAma0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCwgc2l6ZW9mKGtEc3RQ
cmltaXRpdmVSZXN0YXJ0SW5kZXgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmICh0cmlGaXJzdElkeExvYyArIDEgPCBjb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgdHJpRmlyc3RJZHhMb2MgKyAxLCBz
aXplb2Yoc3JjUHJldklkeCkpOwotICAgICAgICB9Ci0KICAgICAgICAgZm9yIChHTHNpemVpIGkg
PSB0cmlGaXJzdElkeExvYyArIDI7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB7CiAgICAgICAg
ICAgICB1aW50MzJfdCB0cmlJbmRpY2VzWzNdOwotCiAgICAgICAgICAgICBUIHNyY0lkeDsKICAg
ICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsgaSwgc2l6ZW9mKHNyY0lkeCkpOwor
ICAgICAgICAgICAgYm9vbCBjb21wbGV0ZVRyaWFuZ2xlID0gdHJ1ZTsKICAgICAgICAgICAgIGlm
IChzcmNQcmV2SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXggfHwgc3JjSWR4ID09IGtT
cmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ly8gSW5jb21wbGV0ZSB0cmlhbmdsZS4KLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdICA9
IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0gICAgICAgICAgICAgICAgdHJpSW5kaWNlc1sx
XSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OwotICAgICAgICAgICAgICAgIHRyaUluZGlj
ZXNbMl0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmlG
aXJzdElkeCAgICA9IHNyY0lkeDsKLSAgICAgICAgICAgICAgICB0cmlGaXJzdElkeExvYyA9IGk7
CisgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlhbmdsZS4gTW92ZSB0byBuZXh0IHRy
aWFuZ2xlIGFuZCBzZXQgdHJpRmlyc3RJbmRleAorICAgICAgICAgICAgICAgIHRyaUZpcnN0SWR4
ICAgICAgPSBzcmNJZHg7CisgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHhMb2MgICA9IGk7Cisg
ICAgICAgICAgICAgICAgY29tcGxldGVUcmlhbmdsZSA9IGZhbHNlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSBpZiAoaSA8IHRyaUZpcnN0SWR4TG9jICsgMikKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlCi0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1swXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0gICAgICAgICAg
ICAgICAgdHJpSW5kaWNlc1sxXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0gICAgICAg
ICAgICAgICAgdHJpSW5kaWNlc1syXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CisgICAg
ICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlhbmdsZSwgbW92ZSB0byBuZXh0IHRyaWFuZ2xl
CisgICAgICAgICAgICAgICAgY29tcGxldGVUcmlhbmdsZSA9IGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMjg2LDE1ICsyODIsMTYgQEAg
YW5nbGU6OlJlc3VsdCBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKICAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdID0gc3JjUHJldklkeDsKICAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNvbXBsZXRlVHJpYW5nbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJpSW5kaWNlcywgc2l6ZW9m
KHRyaUluZGljZXMpKTsKKyAgICAgICAgICAgICAgICArK2RzdFRyaWFuZ2xlOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc3JjUHJldklkeCA9IHNyY0lkeDsKLQotICAgICAgICAgICAgbWVt
Y3B5KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykp
OwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIG1lbWNweSgmc3Jj
UHJldklkeCwgaW5kaWNlcyArIDEsIHNpemVvZihzcmNQcmV2SWR4KSk7Ci0KICAgICAgICAgZm9y
IChHTHNpemVpIGkgPSAyOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgewogICAgICAgICAgICAg
VCBzcmNJZHg7CkBAIC0zMDYsMTEgKzMwMyw2NSBAQCBhbmdsZTo6UmVzdWx0IEdlblRyaUZhbkZy
b21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgdHJp
SW5kaWNlc1syXSA9IHNyY0lkeDsKICAgICAgICAgICAgIHNyY1ByZXZJZHggICAgPSBzcmNJZHg7
CiAKLSAgICAgICAgICAgIG1lbWNweShkc3RQdHIgKyAzICogKGkgLSAyKSwgdHJpSW5kaWNlcywg
c2l6ZW9mKHRyaUluZGljZXMpKTsKKyAgICAgICAgICAgIG1lbWNweShkc3RQdHIgKyAzICogZHN0
VHJpYW5nbGUsIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRpY2VzKSk7CisgICAgICAgICAgICAr
K2RzdFRyaWFuZ2xlOwogICAgICAgICB9CiAgICAgfQotICAgIGRzdEJ1ZmZlci0+dW5tYXBBbmRG
bHVzaFN1YnNldChjb250ZXh0TXRsLCBkc3RPZmZzZXQsIGdlbkluZGljZXNDb3VudCAqIHNpemVv
Zih1aW50MzJfdCkpOworICAgIGlmIChpbmRpY2VzR2VuZXJhdGVkKQorICAgICAgICAqaW5kaWNl
c0dlbmVyYXRlZCA9IGRzdFRyaWFuZ2xlICogMzsKKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRl
eHRNdGwpOworCisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK2FuZ2xlOjpSZXN1bHQgR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBpbmRpY2VzUGVyUHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQgKmluZGljZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0T2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dl
bmVyYXRlZCkKK3sKKyAgICBjb25zdGV4cHIgVCBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4ID0g
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAgdWludDMyX3QgKmRzdFB0ciAgICAg
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNvbnRleHRNdGwp
ICsgZHN0T2Zmc2V0KTsKKyAgICBHTHNpemVpIHJlYWRWYWx1ZUxvYyA9IDA7CisgICAgVCByZWFk
VmFsdWUgICAgICAgICAgPSAwOworICAgIHVpbnQzMl90IGRzdElkeCAgICAgID0gMDsKKyAgICBt
ZW1jcHkoJnJlYWRWYWx1ZSwgaW5kaWNlcywgc2l6ZW9mKHJlYWRWYWx1ZSkpOworICAgIHdoaWxl
IChyZWFkVmFsdWUgPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKKyAgICB7CisKKyAgICAg
ICAgKytyZWFkVmFsdWVMb2M7CisgICAgICAgIG1lbWNweSgmcmVhZFZhbHVlLCBpbmRpY2VzICsg
cmVhZFZhbHVlTG9jLCBzaXplb2YocmVhZFZhbHVlKSk7CisgICAgfQorICAgIHdoaWxlIChyZWFk
VmFsdWVMb2MgKyBpbmRpY2VzUGVyUHJpbWl0aXZlIDw9IGNvdW50KQorICAgIHsKKworICAgICAg
ICB1aW50MzJfdCBwcmltSW5kaWNpZXNbM107CisgICAgICAgIGJvb2wgZm91bmRQcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGluZGljZXNQZXJQcmltaXRpdmU7
ICsraykKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMg
KyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFsdWUpKTsKKyAgICAgICAgICAgICsrcmVhZFZh
bHVlTG9jOworICAgICAgICAgICAgaWYgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFy
dEluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kUHJpbWl0aXZlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbUluZGljaWVzW2tdID0g
KHVpbnQzMl90KXJlYWRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoZm91bmRQcmltaXRpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSgmZHN0UHRy
W2RzdElkeF0sIHByaW1JbmRpY2llcywgKGluZGljZXNQZXJQcmltaXRpdmUpICogc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgICAgICBkc3RJZHggKz0gaW5kaWNlc1BlclByaW1pdGl2ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKyAgICAgICAgKmluZGlj
ZXNHZW5lcmF0ZWQgPSBkc3RJZHg7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQogCkBAIC0zMjgsMTQgKzM3OSwxMSBAQCBhbmdsZTo6UmVzdWx0IEdlbkxpbmVMb29wRnJv
bUNsaWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgY29uc3QgdWludDMy
X3Qga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKTsKIAogICAgIHVpbnQzMl90ICpkc3RQdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNvbnRleHRNdGwpICsgZHN0T2Zmc2V0KTsKLSAgICAv
LyBsaW5lTG9vcEZpcnN0SWR4OiB2YWx1ZSBvZiBvZiBjdXJyZW50IGxpbmUgbG9vcCdzIGZpcnN0
IHZlcnRleCBpbmRleC4gQ2FuIGNoYW5nZSB3aGVuCi0gICAgLy8gZW5jb3VudGVyIGEgcHJpbWl0
aXZlIHJlc3RhcnQgaW5kZXguCiAgICAgVCBsaW5lTG9vcEZpcnN0SWR4OwogICAgIG1lbWNweSgm
bGluZUxvb3BGaXJzdElkeCwgaW5kaWNlcywgc2l6ZW9mKGxpbmVMb29wRmlyc3RJZHgpKTsKIAog
ICAgIGlmIChwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCkKICAgICB7Ci0gICAgICAgIC8vIGxpbmVM
b29wRmlyc3RJZHhMb2M6IGxvY2F0aW9uIG9mIGN1cnJlbnQgbGluZSBsb29wJ3MgZmlyc3QgdmVy
dGV4IGluIHRoZSBzb3VyY2UgYnVmZmVyLgogICAgICAgICBHTHNpemVpIGxpbmVMb29wRmlyc3RJ
ZHhMb2MgPSAwOwogICAgICAgICB3aGlsZSAobGluZUxvb3BGaXJzdElkeCA9PSBrU3JjUHJpbWl0
aXZlUmVzdGFydEluZGV4KQogICAgICAgICB7CkBAIC0zNDQsMTUgKzM5MiwxMiBAQCBhbmdsZTo6
UmVzdWx0IEdlbkxpbmVMb29wRnJvbUNsaWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCiAgICAgICAgICAgICBtZW1jcHkoJmxpbmVMb29wRmlyc3RJZHgsIGluZGljZXMgKyBsaW5l
TG9vcEZpcnN0SWR4TG9jLCBzaXplb2YobGluZUxvb3BGaXJzdElkeCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gZHN0SWR4IDogdmFsdWUgb2YgaW5kZXggdG8gYmUgd3JpdHRlbiB0byBkZXN0
IGJ1ZmZlcgogICAgICAgICB1aW50MzJfdCBkc3RJZHggPSBsaW5lTG9vcEZpcnN0SWR4OwogICAg
ICAgICBtZW1jcHkoJmRzdFB0cltsaW5lTG9vcEZpcnN0SWR4TG9jXSwgJmRzdElkeCwgc2l6ZW9m
KGRzdElkeCkpOwotICAgICAgICAvLyBkc3RXcml0dGVuOiBudW1iZXIgb2YgaW5kaWNlcyB3cml0
dGVuIHRvIGRlc3QgYnVmZmVyCiAgICAgICAgIHVpbnQzMl90IGRzdFdyaXR0ZW4gPSBsaW5lTG9v
cEZpcnN0SWR4TG9jICsgMTsKIAogICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IGxpbmVMb29wRmly
c3RJZHhMb2MgKyAxOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgLy8g
c3JjSWR4IDogdmFsdWUgb2YgaW5kZXggZnJvbSBzb3VyY2UgYnVmZmVyCiAgICAgICAgICAgICBU
IHNyY0lkeDsKICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsgaSwgc2l6ZW9m
KHNyY0lkeCkpOwogICAgICAgICAgICAgaWYgKHNyY0lkeCA9PSBrU3JjUHJpbWl0aXZlUmVzdGFy
dEluZGV4KQpAQCAtNDAwLDcgKzQ0NSw3IEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9t
Q2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKIAogICAgICAgICAqaW5kaWNl
c0dlbmVyYXRlZCA9IGNvdW50ICsgMTsKICAgICB9Ci0gICAgZHN0QnVmZmVyLT51bm1hcEFuZEZs
dXNoU3Vic2V0KGNvbnRleHRNdGwsIGRzdE9mZnNldCwgKCppbmRpY2VzR2VuZXJhdGVkKSAqIHNp
emVvZih1aW50MzJfdCkpOworICAgIGRzdEJ1ZmZlci0+dW5tYXAoY29udGV4dE10bCk7CiAKICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC00NzIsNyArNTE3LDcgQEAg
dm9pZCBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChEaXNwbGF5TXRsICpkaXNwbGF5
LAogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCiAgICAgewogICAgICAgICBpZDxNVExEZXZpY2U+
IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2UoKTsKLSAgICAgICAgaWQ8TVRM
TGlicmFyeT4gc2hhZGVyTGliICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7Cisg
ICAgICAgIGF1dG8gc2hhZGVyTGliICAgICAgICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hh
ZGVyc0xpYigpOwogICAgICAgICBOU0Vycm9yICplcnIgICAgICAgICAgICAgID0gbmlsOwogICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldp
dGhOYW1lOmZ1bmN0aW9uTmFtZV07CiAKQEAgLTUxMiw3ICs1NTcsNyBAQCB2b2lkIEVuc3VyZVNw
ZWNpYWxpemVkQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQoCiAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKICAgICB7CiAgICAgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5
LT5nZXRNZXRhbERldmljZSgpOwotICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0g
ZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIg
ICAgICAgICAgICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CiAgICAgICAgIE5T
RXJyb3IgKmVyciAgICAgICAgICAgICAgPSBuaWw7CiAKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+
IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTpmdW5jdGlvbk5hbWUKQEAg
LTUzOCw2ICs1ODMsNyBAQCB2b2lkIEVuc3VyZVNwZWNpYWxpemVkQ29tcHV0ZVBpcGVsaW5lSW5p
dGlhbGl6ZWQoCiBBTkdMRV9JTkxJTkUKIHZvaWQgRW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVs
aW5lQ2FjaGVJbml0aWFsaXplZChDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICp2ZXJ0ZXhGdW5jdGlv
bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclBpcGVsaW5lQ2FjaGUgKnBpcGVsaW5lQ2Fj
aGVPdXQpCiB7CiAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmcGlwZWxpbmVDYWNoZSA9ICpwaXBl
bGluZUNhY2hlT3V0OwpAQCAtNTQ5LDkgKzU5NSw3IEBAIHZvaWQgRW5zdXJlVmVydGV4U2hhZGVy
T25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChDb250ZXh0ICpjb250ZXh0LAogCiAgICAgQU5H
TEVfTVRMX09CSkNfU0NPUEUKICAgICB7Ci0gICAgICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgICAg
ICA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKLSAgICAgICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVy
TGliID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKLSAgICAgICAgaWQ8TVRMRnVu
Y3Rpb24+IHNoYWRlciAgID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldpdGhOYW1lOnZlcnRleEZ1
bmN0aW9uTmFtZV07CisgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGli
IG5ld0Z1bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKIAogICAgICAgICBBU1NF
UlQoW3NoYWRlciBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKIApAQCAtNTcwLDcgKzYxNCw5IEBA
IHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRp
YWxpemVkKAogICAgIGlmICghZnVuY0NvbnN0YW50cykKICAgICB7CiAgICAgICAgIC8vIE5vbiBz
cGVjaWFsaXplZCBjb25zdGFudHMgcHJvdmlkZWQsIHVzZSBkZWZhdWx0IGNyZWF0aW9uIGZ1bmN0
aW9uLgotICAgICAgICBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxp
emVkKGNvbnRleHQsIHZlcnRleEZ1bmN0aW9uTmFtZSwKKyAgICAgICAgRGlzcGxheU10bCAqZGlz
cGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAg
ICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgIEVuc3VyZVZlcnRl
eFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rp
b25OYW1lLCBzaGFkZXJMaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGlwZWxpbmVDYWNoZU91dCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC01ODQsOSArNjMwLDkgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRleFNoYWRl
ck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCiAKICAgICBBTkdMRV9NVExfT0JKQ19TQ09Q
RQogICAgIHsKLSAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0
RGlzcGxheSgpOwotICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5LT5n
ZXREZWZhdWx0U2hhZGVyc0xpYigpOwotICAgICAgICBOU0Vycm9yICplcnIgICAgICAgICAgICAg
PSBuaWw7CisgICAgICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgPSBjb250ZXh0LT5nZXREaXNwbGF5
KCk7CisgICAgICAgIGF1dG8gc2hhZGVyTGliICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hh
ZGVyc0xpYigpOworICAgICAgICBOU0Vycm9yICplcnIgICAgICAgID0gbmlsOwogCiAgICAgICAg
IGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6
dmVydGV4RnVuY3Rpb25OYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnRWYWx1ZXM6ZnVuY0NvbnN0YW50cwpAQCAtNjA5LDEyICs2NTUs
MjggQEAgUmVuZGVyUGlwZWxpbmVEZXNjIEdldENvbXB1dGluZ1ZlcnRleFNoYWRlck9ubHlSZW5k
ZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFuZEUKICAgICBjb25zdCBSZW5kZXJQYXNzRGVzYyAm
cmVuZGVyUGFzc0Rlc2MgPSBjbWRFbmNvZGVyLT5yZW5kZXJQYXNzRGVzYygpOwogCiAgICAgcmVu
ZGVyUGFzc0Rlc2MucG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoJnBpcGVsaW5lRGVz
Yy5vdXRwdXREZXNjcmlwdG9yKTsKLSAgICBwaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUg
ICAgICA9IFJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CisgICAgcGlwZWxp
bmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgPSBSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246
OkRpc2FibGVkOwogICAgIHBpcGVsaW5lRGVzYy5pbnB1dFByaW1pdGl2ZVRvcG9sb2d5ID0ga1By
aW1pdGl2ZVRvcG9sb2d5Q2xhc3NQb2ludDsKIAogICAgIHJldHVybiBwaXBlbGluZURlc2M7CiB9
CiAKKy8vIEdldCBwaXBlbGluZSBkZXNjcmlwdG9yIGZvciByZW5kZXIgcGlwZWxpbmUgdGhhdCBj
b250YWlucyB2ZXJ0ZXggc2hhZGVyIGFjdGluZyBhcyB0cmFuc2Zvcm0KKy8vIGZlZWRiYWNrLgor
QU5HTEVfSU5MSU5FCitSZW5kZXJQaXBlbGluZURlc2MgR2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5k
ZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKK3sKKyAgICBSZW5kZXJQaXBlbGluZURl
c2MgeGZiUGlwZWxpbmVEZXNjICAgPSBSZW5kZXJQaXBlbGluZURlc2MocGlwZWxpbmVEZXNjKTsK
KyAgICBjb25zdCBSZW5kZXJQYXNzRGVzYyAmcmVuZGVyUGFzc0Rlc2MgPSBjbWRFbmNvZGVyLT5y
ZW5kZXJQYXNzRGVzYygpOworCisgICAgcmVuZGVyUGFzc0Rlc2MucG9wdWxhdGVSZW5kZXJQaXBl
bGluZU91dHB1dERlc2MoJnBpcGVsaW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKKyAgICB4ZmJQ
aXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgICA9IFJlbmRlclBpcGVsaW5lUmFzdGVyaXph
dGlvbjo6RGlzYWJsZWQ7CisgICAgeGZiUGlwZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xv
Z3kgPSBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1BvaW50OworCisgICAgcmV0dXJuIHhmYlBpcGVs
aW5lRGVzYzsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiB2b2lkIENsZWFyUmVuZGVyUGlw
ZWxpbmVDYWNoZUFycmF5KFQgKnBpcGVsaW5lQ2FjaGVBcnJheSkKIHsKQEAgLTcxMiw4ICs3NzQs
MTQgQEAgdm9pZCBTZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLAogICAgIHVuaWZvcm1QYXJhbXMuc3JjTGF5ZXIgPSBwYXJhbXMuc3Jj
TGF5ZXI7CiAgICAgaWYgKGlzQ29sb3JCbGl0KQogICAgIHsKLSAgICAgICAgY29uc3QgQ29sb3JC
bGl0UGFyYW1zICpjb2xvclBhcmFtcyA9IHN0YXRpY19jYXN0PGNvbnN0IENvbG9yQmxpdFBhcmFt
cyAqPigmcGFyYW1zKTsKLSAgICAgICAgdW5pZm9ybVBhcmFtcy5kc3RMdW1pbmFuY2UgICAgICAg
ICA9IGNvbG9yUGFyYW1zLT5kc3RMdW1pbmFuY2UgPyAxIDogMDsKKyAgICAgICAgY29uc3QgYXV0
byBjb2xvclBhcmFtcyAgICAgPSBzdGF0aWNfY2FzdDxjb25zdCBDb2xvckJsaXRQYXJhbXMgKj4o
JnBhcmFtcyk7CisgICAgICAgIHVuaWZvcm1QYXJhbXMuZHN0THVtaW5hbmNlID0gY29sb3JQYXJh
bXMtPmRzdEx1bWluYW5jZSA/IDEgOiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBjb25zdCBhdXRvIGRzUGFyYW1zICAgICA9IHN0YXRpY19jYXN0PGNvbnN0IERlcHRoU3RlbmNp
bEJsaXRQYXJhbXMgKj4oJnBhcmFtcyk7CisgICAgICAgIHVuaWZvcm1QYXJhbXMuc3JjTGV2ZWwy
ID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbDsKKyAgICAgICAgdW5pZm9ybVBhcmFtcy5zcmNM
YXllcjIgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbExheWVyOwogICAgIH0KIAogICAgIC8vIENvbXB1
dGUgc291cmNlIHRleENvb3JkcwpAQCAtNzI3LDggKzc5NSw4IEBAIHZvaWQgU2V0dXBCbGl0V2l0
aERyYXdVbmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKICAgICB7
CiAgICAgICAgIGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKmRzUGFyYW1zID0KICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKj4oJnBhcmFt
cyk7Ci0gICAgICAgIHNyY1dpZHRoICA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsLT53aWR0aChkc1Bh
cmFtcy0+c3JjTGV2ZWwpOwotICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFtcy0+c3JjU3RlbmNp
bC0+aGVpZ2h0KGRzUGFyYW1zLT5zcmNMZXZlbCk7CisgICAgICAgIHNyY1dpZHRoICA9IGRzUGFy
YW1zLT5zcmNTdGVuY2lsLT53aWR0aChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKGRzUGFyYW1zLT5z
cmNTdGVuY2lsTGV2ZWwpKTsKKyAgICAgICAgc3JjSGVpZ2h0ID0gZHNQYXJhbXMtPnNyY1N0ZW5j
aWwtPmhlaWdodChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKGRzUGFyYW1zLT5zcmNTdGVuY2lsTGV2
ZWwpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTczOSw4ICs4MDcsOCBAQCB2b2lkIFNl
dHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIsCiAgICAgR2V0QmxpdFRleENvb3JkcyhzcmNXaWR0aCwgc3JjSGVpZ2h0LCBwYXJhbXMuc3Jj
UmVjdCwgcGFyYW1zLnNyY1lGbGlwcGVkLCBwYXJhbXMudW5wYWNrRmxpcFgsCiAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMudW5wYWNrRmxpcFksICZ1MCwgJnYwLCAmdTEsICZ2MSk7CiAKLSAg
ICBmbG9hdCBkdSA9IHUxIC0gdTA7Ci0gICAgZmxvYXQgZHYgPSB2MSAtIHYwOworICAgIGF1dG8g
ZHUgPSB1MSAtIHUwOworICAgIGF1dG8gZHYgPSB2MSAtIHYwOwogCiAgICAgLy8gbG93ZXIgbGVm
dAogICAgIHVuaWZvcm1QYXJhbXMuc3JjVGV4Q29vcmRzWzBdWzBdID0gdTA7CkBAIC04NDQsMTkg
KzkxMiwyMSBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21t
YW5kRW5jb2RlciAqZW5jb2RlciwKIC8vIFN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zIGltcGxl
bWVudGF0aW9uCiBTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZm
ZXJQYXJhbXMoKSB7fQogCi1TdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRW
aWFCdWZmZXJQYXJhbXMoY29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjSW4pCitTdGVu
Y2lsQmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMoY29uc3Qg
RGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjUGFyYW1zKQogewotICAgIGRzdFRleHR1cmVTaXpl
ID0gc3JjSW4uZHN0VGV4dHVyZVNpemU7Ci0gICAgZHN0UmVjdCAgICAgICAgPSBzcmNJbi5kc3RS
ZWN0OwotICAgIGRzdFNjaXNzb3JSZWN0ID0gc3JjSW4uZHN0U2Npc3NvclJlY3Q7Ci0gICAgZHN0
RmxpcFkgICAgICAgPSBzcmNJbi5kc3RGbGlwWTsKLSAgICBkc3RGbGlwWCAgICAgICA9IHNyY0lu
LmRzdEZsaXBYOwotICAgIHNyY1JlY3QgICAgICAgID0gc3JjSW4uc3JjUmVjdDsKLSAgICBzcmNZ
RmxpcHBlZCAgICA9IHNyY0luLnNyY1lGbGlwcGVkOwotICAgIHVucGFja0ZsaXBYICAgID0gc3Jj
SW4udW5wYWNrRmxpcFg7Ci0gICAgdW5wYWNrRmxpcFkgICAgPSBzcmNJbi51bnBhY2tGbGlwWTsK
KyAgICBkc3RUZXh0dXJlU2l6ZSA9IHNyY1BhcmFtcy5kc3RUZXh0dXJlU2l6ZTsKKyAgICBkc3RS
ZWN0ICAgICAgICA9IHNyY1BhcmFtcy5kc3RSZWN0OworICAgIGRzdFNjaXNzb3JSZWN0ID0gc3Jj
UGFyYW1zLmRzdFNjaXNzb3JSZWN0OworICAgIGRzdEZsaXBZICAgICAgID0gc3JjUGFyYW1zLmRz
dEZsaXBZOworICAgIGRzdEZsaXBYICAgICAgID0gc3JjUGFyYW1zLmRzdEZsaXBYOworICAgIHNy
Y1JlY3QgICAgICAgID0gc3JjUGFyYW1zLnNyY1JlY3Q7CisgICAgc3JjWUZsaXBwZWQgICAgPSBz
cmNQYXJhbXMuc3JjWUZsaXBwZWQ7CisgICAgdW5wYWNrRmxpcFggICAgPSBzcmNQYXJhbXMudW5w
YWNrRmxpcFg7CisgICAgdW5wYWNrRmxpcFkgICAgPSBzcmNQYXJhbXMudW5wYWNrRmxpcFk7CiAK
LSAgICBzcmNTdGVuY2lsID0gc3JjSW4uc3JjU3RlbmNpbDsKKyAgICBzcmNTdGVuY2lsICAgICAg
PSBzcmNQYXJhbXMuc3JjU3RlbmNpbDsKKyAgICBzcmNTdGVuY2lsTGV2ZWwgPSBzcmNQYXJhbXMu
c3JjU3RlbmNpbExldmVsOworICAgIHNyY1N0ZW5jaWxMYXllciA9IHNyY1BhcmFtcy5zcmNTdGVu
Y2lsTGF5ZXI7CiB9CiAKIC8vIFJlbmRlclV0aWxzIGltcGxlbWVudGF0aW9uCkBAIC05MDMsNiAr
OTczLDcgQEAgdm9pZCBSZW5kZXJVdGlsczo6b25EZXN0cm95KCkKICAgICB9CiB9CiAKKwogLy8g
b3ZlcnJpZGUgRXJyb3JIYW5kbGVyCiB2b2lkIFJlbmRlclV0aWxzOjpoYW5kbGVFcnJvcihHTGVu
dW0gZ2xFcnJvckNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpmaWxlLApAQCAtMTAxNiw5ICsxMDg3LDEwIEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6
OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cygKIH0KIGFuZ2xlOjpSZXN1bHQgUmVuZGVy
VXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAgQ29udGV4
dE10bCAqY29udGV4dE10bCwKLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFt
cykKKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICB1aW50MzJf
dCAqaW5kaWNlc0dlbmVyYXRlZCkKIHsKLSAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJhdGVU
cmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMpOworICAgIHJl
dHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KGNv
bnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQg
UmVuZGVyVXRpbHM6OmdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKApAQCAtMTA1MCw2
ICsxMTIyLDI2IEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlTGluZUxvb3BM
YXN0U2VnbWVudEZyb21FbGVtZW50c0FycmF5KAogewogICAgIHJldHVybiBtSW5kZXhVdGlscy5n
ZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnRGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBw
YXJhbXMpOwogfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2Vu
ZXJhdGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3Rh
cnRQb2ludHNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30K
K2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVz
QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRp
b25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkKK3sKKyAg
ICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIo
Y29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KK2FuZ2xlOjpSZXN1bHQg
UmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcigKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFt
cyAmcGFyYW1zLAorICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkKK3sKKyAgICByZXR1cm4g
bUluZGV4VXRpbHMuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKGNvbnRl
eHRNdGwsIHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNHZW5lcmF0ZWQpOworfQogCiB2b2lkIFJlbmRl
clV0aWxzOjpjb21iaW5lVmlzaWJpbGl0eVJlc3VsdCgKICAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLApAQCAtMTEyMSw2ICsxMjEzLDIxIEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmV4
cGFuZFZlcnRleEZvcm1hdENvbXBvbmVudHNWUyhjb25zdCBnbDo6Q29udGV4dCAqY29uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zKTsKIH0KIAorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Y3JlYXRlVHJhbnNmb3Jt
RmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCit7
CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAg
ICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBQU08KKyAgICBhdXRvIHBzbyA9IG1UcmFuc2Zvcm1G
ZWVkYmFja1V0aWxzLmdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoY29udGV4dE10
bCwgcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVEZXNjKTsKKyAgICBp
ZiAocHNvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
ICAgIH0KKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKK30KKwogLy8gQ2xlYXJVdGls
cyBpbXBsZW1lbnRhdGlvbgogQ2xlYXJVdGlsczo6Q2xlYXJVdGlscyhjb25zdCBzdGQ6OnN0cmlu
ZyAmZnJhZ21lbnRTaGFkZXJOYW1lKQogICAgIDogbUZyYWdtZW50U2hhZGVyTmFtZShmcmFnbWVu
dFNoYWRlck5hbWUpCkBAIC0xMjg3LDExICsxMzk0LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ2xlYXJV
dGlsczo6Y2xlYXJXaXRoRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB7CiAg
ICAgICAgIG92ZXJyaWRlZFBhcmFtcy5jbGVhckNvbG9yLnJlc2V0KCk7CiAgICAgfQotICAgIGlm
ICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5k
ZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgb3Zl
cnJpZGVkUGFyYW1zLmNsZWFyRGVwdGgucmVzZXQoKTsKICAgICB9Ci0gICAgaWYgKCFyZW5kZXJQ
YXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKQorICAgIGlmICghcmVuZGVyUGFzc0Rl
c2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgb3ZlcnJpZGVk
UGFyYW1zLmNsZWFyU3RlbmNpbC5yZXNldCgpOwogICAgIH0KQEAgLTEzMDcsNyArMTQxNCw3IEBA
IGFuZ2xlOjpSZXN1bHQgQ2xlYXJVdGlsczo6Y2xlYXJXaXRoRHJhdyhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICBhbmdsZTo6UmVzdWx0IHJlc3VsdDsKICAgICB7CiAgICAgICAgIC8v
IE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24gcXVlcnksIG90aGVyd2lzZSBjbGVhcmluZyB3aWxs
IGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50aW5nCi0gICAgICAgIFNjb3BlZERpc2FibGVPY2Ns
dXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgJnJlc3VsdCk7Cisg
ICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnko
Y29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CiAgICAgICAgIC8vIERyYXcgdGhlIHNj
cmVlbiBhbGlnbmVkIHRyaWFuZ2xlCiAgICAgICAgIGNtZEVuY29kZXItPmRyYXcoTVRMUHJpbWl0
aXZlVHlwZVRyaWFuZ2xlLCAwLCAzKTsKICAgICB9CkBAIC0xNDgxLDcgKzE1ODgsNyBAQCBhbmds
ZTo6UmVzdWx0IENvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICBhbmdsZTo6UmVzdWx0IHJlc3VsdDsKICAgICB7CiAgICAgICAg
IC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24gcXVlcnksIG90aGVyd2lzZSBibGl0dGluZyB3
aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50aW5nCi0gICAgICAgIFNjb3BlZERpc2FibGVP
Y2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgJnJlc3VsdCk7
CisgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVl
cnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CiAgICAgICAgIC8vIERyYXcgdGhl
IHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCiAgICAgICAgIGNtZEVuY29kZXItPmRyYXcoTVRMUHJp
bWl0aXZlVHlwZVRyaWFuZ2xlLCAwLCAzKTsKICAgICB9CkBAIC0xNzAzLDcgKzE4MTAsNyBAQCBh
bmdsZTo6UmVzdWx0IERlcHRoU3RlbmNpbEJsaXRVdGlsczo6YmxpdERlcHRoU3RlbmNpbFdpdGhE
cmF3KGNvbnN0IGdsOjpDb250ZXh0CiAgICAgYW5nbGU6OlJlc3VsdCByZXN1bHQ7CiAgICAgewog
ICAgICAgICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxp
dHRpbmcgd2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZwotICAgICAgICBTY29wZWRE
aXNhYmxlT2NjbHVzaW9uUXVlcnkgZGlzYWJsZU9jY2x1c2lvblF1ZXJ5KGNvbnRleHRNdGwsICZy
ZXN1bHQpOworICAgICAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkgZGlzYWJsZU9jY2x1
c2lvblF1ZXJ5KGNvbnRleHRNdGwsIGNtZEVuY29kZXIsICZyZXN1bHQpOwogICAgICAgICAvLyBE
cmF3IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQogICAgICAgICBjbWRFbmNvZGVyLT5kcmF3
KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgMCwgMyk7CiAgICAgfQpAQCAtMjAwMiw3ICsyMTA5
LDggQEAgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1
ZmZlckZyb21BcnJheXMoCiAKIGFuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2Vu
ZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheSgKICAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsLAotICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorICAgIGNv
bnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHVpbnQzMl90ICppbmRpY2Vz
R2VuZXJhdGVkKQogewogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBcnJheSAqdmVydGV4QXJyYXkgPSBj
b250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFZlcnRleEFycmF5KCk7CiAgICAgY29uc3QgZ2w6OkJ1
ZmZlciAqZWxlbWVudEJ1ZmZlciAgICA9IHZlcnRleEFycmF5LT5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKTsKQEAgLTIwMTMsMTMgKzIxMjEsMTQgQEAgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRv
clV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAogICAgICAgICBB
TkdMRV9DSEVDSyhjb250ZXh0TXRsLCBzcmNPZmZzZXQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpLAogICAgICAgICAgICAgICAgICAgICAiSW5kZXggb2Zmc2V0IGlzIHRv
byBsYXJnZSIsIEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICBpZiAocGFyYW1zLnByaW1pdGl2
ZVJlc3RhcnRFbmFibGVkIHx8Ci0gICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXko
KS0+Z2V0RmVhdHVyZXMoKS5oYXNDaGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgorICAgICAgICAg
ICAgKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQ
YXNzSXNDaGVhcC5lbmFibGVkICYmCiAgICAgICAgICAgICAgY29udGV4dE10bC0+Z2V0UmVuZGVy
Q29tbWFuZEVuY29kZXIoKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEluZGV4R2VuZXJhdGlv
blBhcmFtcyBjcHVQYXRoUGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgICAgY3B1UGF0aFBhcmFt
cy5pbmRpY2VzID0KICAgICAgICAgICAgICAgICBlbGVtZW50QnVmZmVyTXRsLT5nZXRDbGllbnRT
aGFkb3dDb3B5RGF0YShjb250ZXh0TXRsKSArIHNyY09mZnNldDsKLSAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIGNw
dVBhdGhQYXJhbXMpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJv
bUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNH
ZW5lcmF0ZWQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMjAzMCw3
ICsyMTM5LDcgQEAgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAg
ICAgICByZXR1cm4gZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250
ZXh0TXRsLCBwYXJhbXMpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOwog
ICAgIH0KIH0KIApAQCAtMjA3NCwyMiArMjE4MywyMyBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlHUFUoCiAK
IGFuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJG
cm9tRWxlbWVudHNBcnJheUNQVSgKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgIGNv
bnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zKQorICAgIGNvbnN0IEluZGV4R2VuZXJh
dGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHVpbnQzMl90ICpnZW5JbmRpY2VzKQogewogICAgIHN3
aXRjaCAocGFyYW1zLnNyY1R5cGUpCiAgICAgewogICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVu
dHNUeXBlOjpVbnNpZ25lZEJ5dGU6CiAgICAgICAgICAgICByZXR1cm4gR2VuVHJpRmFuRnJvbUNs
aWVudEVsZW1lbnRzKAogICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENv
dW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCi0gICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZm
ZXIsIHBhcmFtcy5kc3RPZmZzZXQpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0
T2Zmc2V0LCBnZW5JbmRpY2VzKTsKICAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
VW5zaWduZWRTaG9ydDoKICAgICAgICAgICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxl
bWVudHMoCiAgICAgICAgICAgICAgICAgY29udGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBh
cmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBh
cmFtcy5kc3RPZmZzZXQpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQx
Nl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNl
dCwgZ2VuSW5kaWNlcyk7CiAgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2ln
bmVkSW50OgogICAgICAgICAgICAgcmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygK
ICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnBy
aW1pdGl2ZVJlc3RhcnRFbmFibGVkLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQzMl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRz
dE9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4o
cGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5J
bmRpY2VzKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQpAQCAtMjMwMSw2ICsyNDExLDU2IEBAIGFuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JV
dGlsczo6Z2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXlDCiAgICAg
cmV0dXJuIGdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudChjb250ZXh0TXRsLCBmaXJzdCwgbGFz
dCwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CiB9CiAKK2FuZ2xlOjpSZXN1
bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKAor
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgdW5zaWduZWQgbnVtVmVydGljZXNQZXJQ
cmltaXRpdmUsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAg
c2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHN3aXRjaCAocGFyYW1zLnNyY1R5cGUp
CisgICAgeworICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZEJ5dGU6
CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRs
LCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90ICo+KHBhcmFtcy5pbmRpY2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGluZGljZXNH
ZW5lcmF0ZWQpOworICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNo
b3J0OgorICAgICAgICAgICAgcmV0dXJuIEdlblByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4
dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIG51bVZlcnRpY2VzUGVyUHJpbWl0aXZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDE2X3QgKj4ocGFyYW1zLmluZGljZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5k
aWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2ln
bmVkSW50OgorICAgICAgICAgICAgcmV0dXJuIEdlblByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29u
dGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIG51bVZlcnRpY2VzUGVyUHJpbWl0aXZlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwg
aW5kaWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgfQor
fQorCithbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZl
UmVzdGFydFRyaWFuZ2xlc0J1ZmZlcigKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KGNvbnRleHRNdGwsIDMsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CisKK2FuZ2xlOjpS
ZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNC
dWZmZXIoCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICBjb25zdCBJbmRleEdlbmVy
YXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7Cisg
ICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCAyLCBw
YXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworfQorCithbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJh
dG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcigKKyAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFy
YW1zLAorICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIDEsIHBhcmFtcywgaW5kaWNlc0dl
bmVyYXRlZCk7Cit9CisKIC8vIFZpc2liaWxpdHlSZXN1bHRVdGlscyBpbXBsZW1lbnRhdGlvbgog
dm9pZCBWaXNpYmlsaXR5UmVzdWx0VXRpbHM6Om9uRGVzdHJveSgpCiB7CkBAIC0yMzc1LDcgKzI1
MzUsMTAgQEAgdm9pZCBWaXNpYmlsaXR5UmVzdWx0VXRpbHM6OmNvbWJpbmVWaXNpYmlsaXR5UmVz
dWx0KAogLy8gTWlwbWFwVXRpbHMgaW1wbGVtZW50YXRpb24KIHZvaWQgTWlwbWFwVXRpbHM6Om9u
RGVzdHJveSgpCiB7Ci0gICAgbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUgPSBuaWw7CisgICAgbTNE
TWlwR2VuZXJhdG9yUGlwZWxpbmUgICAgICA9IG5pbDsKKyAgICBtMkRNaXBHZW5lcmF0b3JQaXBl
bGluZSAgICAgID0gbmlsOworICAgIG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmUgPSBuaWw7
CisgICAgbUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZSAgICA9IG5pbDsKIH0KIAogdm9pZCBNaXBt
YXBVdGlsczo6ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRN
dGwgKmNvbnRleHRNdGwpCkBAIC0yMzg0LDY2ICsyNTQ3LDc4IEBAIHZvaWQgTWlwbWFwVXRpbHM6
OmVuc3VyZTNETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpjb250
ZXh0TXRsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm0zRE1pcEdlbmVy
YXRvclBpcGVsaW5lKTsKIH0KIAordm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBHZW5lcmF0
b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5z
dXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBA
ImdlbmVyYXRlMkRNaXBtYXBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbTJETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworfQorCit2b2lkIE1pcG1hcFV0aWxzOjplbnN1
cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpjb250
ZXh0TXRsKQoreworICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKGNvbnRleHRN
dGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZTJEQXJyYXlNaXBtYXBzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGluZSk7
Cit9CisKK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZUlu
aXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5zdXJlQ29tcHV0ZVBp
cGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBAImdlbmVyYXRlQ3Vi
ZU1pcG1hcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ3ViZU1p
cEdlbmVyYXRvclBpcGVsaW5lKTsKK30KKwogYW5nbGU6OlJlc3VsdCBNaXBtYXBVdGlsczo6Z2Vu
ZXJhdGVNaXBtYXBDUyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZzcmNUZXh0dXJlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNSR0JNaXBt
YXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRl
eExldmVsQXJyYXkgKm1pcG1hcE91dHB1dFZpZXdzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOYXRpdmVUZXhMZXZlbEFycmF5ICogbWlwbWFwT3V0cHV0Vmll
d3MpCiB7Ci0gICAgLy8gT25seSBzdXBwb3J0IDNEIHRleHR1cmUgZm9yIG5vdy4KLSAgICBBU1NF
UlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSA9PSBNVExUZXh0dXJlVHlwZTNEKTsKKyAgICBD
b21wdXRlQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRDb21wdXRl
Q29tbWFuZEVuY29kZXIoKTsKKyAgICBBU1NFUlQoY21kRW5jb2Rlcik7CiAKICAgICBNVExTaXpl
IHRocmVhZEdyb3VwU2l6ZTsKLSAgICB1aW50MzJfdCBzbGljZXMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMTsKLSAgICBpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4gY29tcHV0ZVBp
cGVsaW5lID0gbmlsOwotCi0gICAgZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxp
emVkKGNvbnRleHRNdGwpOwotICAgIGNvbXB1dGVQaXBlbGluZSA9IG0zRE1pcEdlbmVyYXRvclBp
cGVsaW5lOwotICAgIHRocmVhZEdyb3VwU2l6ZSA9Ci0gICAgICAgIE1UTFNpemVNYWtlKGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwga0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXpl
UGVyRGltLAotICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQ
ZXJEaW0pOwotCi0gICAgLy8gVGhlIGNvbXB1dGUgc2hhZGVyIHN1cHBvcnRzIHVwIHRvIDQgbWlw
bWFwcyBnZW5lcmF0ZWQgcGVyIHBhc3MuCi0gICAgLy8gU2VlIHNoYWRlcnMvZ2VuX21pcG1hcC5t
ZXRhbAotICAgIHVpbnQzMl90IG1heE1pcHNQZXJCYXRjaCA9IDQ7Ci0KLSAgICBpZiAodGhyZWFk
R3JvdXBTaXplLndpZHRoICogdGhyZWFkR3JvdXBTaXplLmhlaWdodCAqIHRocmVhZEdyb3VwU2l6
ZS5kZXB0aCA+Ci0gICAgICAgICAgICBjb21wdXRlUGlwZWxpbmUubWF4VG90YWxUaHJlYWRzUGVy
VGhyZWFkZ3JvdXAgfHwKLSAgICAgICAgQU5HTEVfVU5MSUtFTFkoCi0gICAgICAgICAgICAhY29u
dGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmFsbG93R2VuTXVsdGlwbGVNaXBz
UGVyUGFzcy5lbmFibGVkKSkKKyAgICB1aW50MzJfdCBzbGljZXMgPSAxOworICAgIHN3aXRjaCAo
c3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSkKICAgICB7Ci0gICAgICAgIC8vIE11bHRpcGxlIG1p
cG1hcHMgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBoYXJkd2FyZSdzIHRocmVh
ZCBncm91cCBzaXplIGxpbWl0cy4KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gZ2VuZXJhdGUgb25l
IG1pcCBwZXIgcGFzcyBhbmQgcmVkdWNlIHRocmVhZCBncm91cCBzaXplLgotICAgICAgICBpZiAo
QU5HTEVfVU5MSUtFTFkodGhyZWFkR3JvdXBTaXplLndpZHRoICogdGhyZWFkR3JvdXBTaXplLmhl
aWdodCA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlUGlwZWxpbmUubWF4VG90
YWxUaHJlYWRzUGVyVGhyZWFkZ3JvdXApKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFdmVu
IHdpdGggcmVkdWNlZCB0aHJlYWQgZ3JvdXAgc2l6ZSwgd2UgY2Fubm90IHByb2NlZWQuCi0gICAg
ICAgICAgICAvLyBIQUNLOiB1c2UgYmxpdCBjb21tYW5kIGVuY29kZXIgdG8gZ2VuZXJhdGUgbWlw
bWFwcyBpZiBpdCBpcyBub3QgcG9zc2libGUKLSAgICAgICAgICAgIC8vIHRvIHVzZSBjb21wdXRl
IHNoYWRlciBkdWUgdG8gaGFyZHdhcmUgbGltaXRzLgotICAgICAgICAgICAgQmxpdENvbW1hbmRF
bmNvZGVyICpibGl0RW5jb2RlciA9IGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5jb2Rlcigp
OwotICAgICAgICAgICAgYmxpdEVuY29kZXItPmdlbmVyYXRlTWlwbWFwc0ZvclRleHR1cmUoc3Jj
VGV4dHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0aHJlYWRHcm91cFNpemUuZGVwdGggPSAxOwotICAgICAgICBt
YXhNaXBzUGVyQmF0Y2ggICAgICAgPSAxOworICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlMkQ6
CisgICAgICAgICAgICBlbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoY29u
dGV4dE10bCk7CisgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0
ZShtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUg
PSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91
cFNpemVQZXJEaW0sIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVRMVGV4
dHVyZVR5cGUyREFycmF5OgorICAgICAgICAgICAgZW5zdXJlMkRBcnJheU1pcEdlbmVyYXRvclBp
cGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CisgICAgICAgICAgICBjbWRFbmNvZGVyLT5z
ZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAg
ICAgICAgICAgIHNsaWNlcyAgICAgICAgICA9IHNyY1RleHR1cmUtPmFycmF5TGVuZ3RoKCk7Cisg
ICAgICAgICAgICB0aHJlYWRHcm91cFNpemUgPSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sIDEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTVRMVGV4dHVyZVR5cGVDdWJlOgorICAgICAgICAgICAgZW5z
dXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CisgICAg
ICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtQ3ViZU1pcEdlbmVy
YXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgIHNsaWNlcyAgICAgICAgICA9IDY7CisgICAgICAg
ICAgICB0aHJlYWRHcm91cFNpemUgPSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91
cFNpemVQZXJEaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
R2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sIDEpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTVRMVGV4dHVyZVR5cGUzRDoKKyAgICAgICAgICAgIGVuc3VyZTNETWlw
R2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNt
ZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0zRE1pcEdlbmVyYXRvclBpcGVsaW5l
KTsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9CisgICAgICAgICAgICAgICAgTVRMU2l6
ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVyRGltLCBrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRl
TWlwVGhyZWFkR3JvdXBTaXplUGVyRGltKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBDb21wdXRl
Q29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRDb21wdXRlQ29tbWFu
ZEVuY29kZXIoKTsKLSAgICBBU1NFUlQoY21kRW5jb2Rlcik7Ci0gICAgY21kRW5jb2Rlci0+c2V0
Q29tcHV0ZVBpcGVsaW5lU3RhdGUoY29tcHV0ZVBpcGVsaW5lKTsKLQotICAgIEdlbmVyYXRlTWlw
bWFwVW5pZm9ybSBvcHRpb25zOworICAgIEdlbmVyYXRlM0RNaXBtYXBVbmlmb3JtIG9wdGlvbnM7
CisgICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKIAotICAgIHVpbnQzMl90IHJlbWFp
bk1pcHMgICAgICAgICAgICAgPSBzcmNUZXh0dXJlLT5taXBtYXBMZXZlbHMoKSAtIDE7Ci0gICAg
TWlwbWFwTmF0aXZlTGV2ZWwgYmF0Y2hTcmNMZXZlbCA9IGtaZXJvTmF0aXZlTWlwTGV2ZWw7Ci0g
ICAgb3B0aW9ucy5zcmNMZXZlbCAgICAgICAgICAgICAgICA9IGJhdGNoU3JjTGV2ZWwuZ2V0KCk7
Ci0gICAgb3B0aW9ucy5zUkdCICAgICAgICAgICAgICAgICAgICA9IHNSR0JNaXBtYXA7CisgICAg
dWludDMyX3QgcmVtYWluTWlwcyA9IHNyY1RleHR1cmUtPm1pcG1hcExldmVscygpIC0gMTsKKyAg
ICBvcHRpb25zLnNyY0xldmVsICAgID0gMDsKIAogICAgIGNtZEVuY29kZXItPnNldFRleHR1cmUo
c3JjVGV4dHVyZSwgMCk7CiAgICAgY21kRW5jb2Rlci0+bWFya1Jlc291cmNlQmVpbmdXcml0dGVu
QnlHUFUoc3JjVGV4dHVyZSk7CiAgICAgd2hpbGUgKHJlbWFpbk1pcHMpCiAgICAgewotICAgICAg
ICBjb25zdCBUZXh0dXJlUmVmICZmaXJzdE1pcFZpZXcgPSBtaXBtYXBPdXRwdXRWaWV3cy0+YXQo
YmF0Y2hTcmNMZXZlbCArIDEpOworICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZmaXJzdE1pcFZp
ZXcgPSBtaXBtYXBPdXRwdXRWaWV3cy0+YXQobXRsOjpNaXBtYXBOYXRpdmVMZXZlbChvcHRpb25z
LnNyY0xldmVsICsgMSkpOwogICAgICAgICBnbDo6RXh0ZW50cyBzaXplICAgICAgICAgICAgICAg
PSBmaXJzdE1pcFZpZXctPnNpemVBdDAoKTsKICAgICAgICAgYm9vbCBpc1BvdzIgPSBnbDo6aXNQ
b3cyKHNpemUud2lkdGgpICYmIGdsOjppc1BvdzIoc2l6ZS5oZWlnaHQpICYmIGdsOjppc1BvdzIo
c2l6ZS5kZXB0aCk7CiAKQEAgLTI0NjEsMjAgKzI2MzYsMTggQEAgYW5nbGU6OlJlc3VsdCBNaXBt
YXBVdGlsczo6Z2VuZXJhdGVNaXBtYXBDUyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogCiAgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDE7IGkgPD0gb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0
ZTsgKytpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1p
cG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgaSksIGkpOworICAgICAgICAgICAg
Y21kRW5jb2Rlci0+c2V0VGV4dHVyZShtaXBtYXBPdXRwdXRWaWV3cy0+YXQobXRsOjpNaXBtYXBO
YXRpdmVMZXZlbChvcHRpb25zLnNyY0xldmVsICsgaSkpLCBpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHVpbnQzMl90IHRocmVhZHNQZXJaID0gc3RkOjptYXgoc2xpY2VzLCBmaXJzdE1pcFZpZXct
PmRlcHRoQXQwKCkpOwogCi0gICAgICAgIERpc3BhdGNoQ29tcHV0ZSgKLSAgICAgICAgICAgIGNv
bnRleHRNdGwsIGNtZEVuY29kZXIsCi0gICAgICAgICAgICAvKiogYWxsb3dOb25Vbmlmb3JtICov
IGZhbHNlLAotICAgICAgICAgICAgTVRMU2l6ZU1ha2UoZmlyc3RNaXBWaWV3LT53aWR0aEF0MCgp
LCBmaXJzdE1pcFZpZXctPmhlaWdodEF0MCgpLCB0aHJlYWRzUGVyWiksCi0gICAgICAgICAgICB0
aHJlYWRHcm91cFNpemUpOworICAgICAgICBEaXNwYXRjaENvbXB1dGUoY29udGV4dE10bCwgY21k
RW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBhbGxvd05vblVuaWZvcm0gKi8g
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBNVExTaXplTWFrZShmaXJzdE1pcFZpZXct
PndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0QXQwKCksIHRocmVhZHNQZXJaKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSk7CiAKICAgICAgICAgcmVtYWlu
TWlwcyAtPSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOwotICAgICAgICBiYXRjaFNyY0xl
dmVsICAgID0gYmF0Y2hTcmNMZXZlbCArIG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJhdGU7Ci0g
ICAgICAgIG9wdGlvbnMuc3JjTGV2ZWwgPSBiYXRjaFNyY0xldmVsLmdldCgpOworICAgICAgICBv
cHRpb25zLnNyY0xldmVsICs9IG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJhdGU7CiAgICAgfQog
CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtMjUwNCw4ICsyNjc3LDcg
QEAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBDb3B5UGl4ZWxzVXRp
bHM6OmdldFBpeGVsc0NvcHlQaXBlbGluZSgKICAgICBpbnQgc2hhZGVyVGV4dHVyZVR5cGUgPSBH
ZXRTaGFkZXJUZXh0dXJlVHlwZSh0ZXh0dXJlKTsKICAgICBpbnQgaW5kZXgyID0gbXRsX3NoYWRl
cjo6a1RleHR1cmVUeXBlQ291bnQgKiAoYnVmZmVyV3JpdGUgPyAxIDogMCkgKyBzaGFkZXJUZXh0
dXJlVHlwZTsKIAotICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4g
JmNhY2hlID0KLSAgICAgICAgbVBpeGVsc0NvcHlQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVl
XVtpbmRleDJdOworICAgIGF1dG8gJmNhY2hlID0gbVBpeGVsc0NvcHlQaXBlbGluZUNhY2hlc1tm
b3JtYXRJRFZhbHVlXVtpbmRleDJdOwogCiAgICAgaWYgKCFjYWNoZSkKICAgICB7CkBAIC0yNzgz
LDcgKzI5NTUsMTAgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+CiBW
ZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHM6OmdldENvbXBvbmVudHNFeHBhbmRSZW5kZXJQaXBl
bGluZShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KmNtZEVuY29kZXIpCiB7CisgICAgRGlzcGxheU10bCAqZGlzcGxheSA9IGNvbnRleHRNdGwtPmdl
dERpc3BsYXkoKTsKKyAgICBhdXRvIHNoYWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVs
dFNoYWRlcnNMaWIoKTsKICAgICBFbnN1cmVWZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUlu
aXRpYWxpemVkKGNvbnRleHRNdGwsIEAiZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9uZW50c1ZTIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRl
ckxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lQ2FjaGUpOwogCiAgICAgUmVuZGVyUGlw
ZWxpbmVEZXNjIHBpcGVsaW5lRGVzYyA9IEdldENvbXB1dGluZ1ZlcnRleFNoYWRlck9ubHlSZW5k
ZXJQaXBlbGluZURlc2MoY21kRW5jb2Rlcik7CkBAIC0yNzk3LDggKzI5NzIsNyBAQCBWZXJ0ZXhG
b3JtYXRDb252ZXJzaW9uVXRpbHM6OmdldEZsb2F0Q29udmVyc3Rpb25Db21wdXRlUGlwZWxpbmUo
Q29udGV4dE10bCAqY29udAogewogICAgIGludCBmb3JtYXRJRFZhbHVlID0gc3RhdGljX2Nhc3Q8
aW50PihzcmNBbmdsZUZvcm1hdC5pZCk7CiAKLSAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRl
UGlwZWxpbmVTdGF0ZT4+ICZjYWNoZSA9Ci0gICAgICAgIG1Db252ZXJ0VG9GbG9hdENvbXBQaXBl
bGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKKyAgICBhdXRvICZjYWNoZSA9IG1Db252ZXJ0VG9G
bG9hdENvbXBQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKIAogICAgIGlmICghY2FjaGUp
CiAgICAgewpAQCAtMjg0OSw1ICszMDIzLDUzIEBAIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGls
czo6Z2V0RmxvYXRDb252ZXJzdGlvblJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRlCiAg
ICAgcmV0dXJuIGNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dE10bCwgcGlwZWxp
bmVEZXNjKTsKIH0KIAorQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IFRyYW5zZm9ybUZlZWRi
YWNrVXRpbHM6OmNyZWF0ZU1zbFhmYkxpYnJhcnkoCisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRlZE1zbCkKK3sKKyAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorICAgIHsKKyAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSAgICAgPSBj
b250ZXh0TXRsLT5nZXREaXNwbGF5KCk7CisgICAgICAgIGlkPE1UTERldmljZT4gbXRsRGV2aWNl
ID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2UoKTsKKworICAgICAgICAvLyBDb252ZXJ0IHRvIGFj
dHVhbCBiaW5hcnkgc2hhZGVyCisgICAgICAgIG10bDo6QXV0b09iakNQdHI8TlNFcnJvciAqPiBl
cnIgPSBuaWw7CisgICAgICAgIG10bDo6QXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG10bFNo
YWRlckxpYiA9CisgICAgICAgICAgICBtdGw6OkNyZWF0ZVNoYWRlckxpYnJhcnkobXRsRGV2aWNl
LCB0cmFuc2xhdGVkTXNsLCAmZXJyKTsKKyAgICAgICAgaWYgKGVyciAmJiAhbXRsU2hhZGVyTGli
KQorICAgICAgICB7CisgICAgICAgICAgICBOU0xvZyhAIiVAIiwgZXJyLmdldCgpKTsKKyAgICAg
ICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbXRsU2hhZGVyTGli
OworICAgIH0KK30KKworQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFRy
YW5zZm9ybUZlZWRiYWNrVXRpbHM6OmdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUo
CisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAq
Y21kRW5jb2RlciwKKyAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKQor
eworICAgIGNvbnN0IFByb2dyYW1NdGwgKnByb2dyYW1NdGwgPSBtdGw6OkdldEltcGwoY29udGV4
dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkpOworICAgIFJlbmRlclBpcGVsaW5lQ2FjaGUg
JmNhY2hlICAgPSAqcHJvZ3JhbU10bC0+bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKKwor
ICAgIGlmICghY2FjaGUuZ2V0VmVydGV4U2hhZGVyKCkpCisgICAgeworICAgICAgICAvLyBQaXBl
bGluZSBjYWNoZSBub3QgaW50aWFsaXplZCwgZG8gaXQgbm93OgorICAgICAgICBBTkdMRV9NVExf
T0JKQ19TQ09QRQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNoYWRlckxpYiA9IGNyZWF0
ZU1zbFhmYkxpYnJhcnkoY29udGV4dE10bCwgcHJvZ3JhbU10bC0+Z2V0WGZiTXNsU291cmNlKCkp
OworICAgICAgICAgICAgLy8gTm9uIHNwZWNpYWxpemVkIGNvbnN0YW50cyBwcm92aWRlZCwgdXNl
IGRlZmF1bHQgY3JlYXRpb24gZnVuY3Rpb24uCisgICAgICAgICAgICBFbnN1cmVWZXJ0ZXhTaGFk
ZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKGNvbnRleHRNdGwsIFNIQURFUl9FTlRSWV9O
QU1FLCBzaGFkZXJMaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjYWNoZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZW5k
ZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNjID0KKyAgICAgICAgR2V0VHJhbnNmb3JtRmVl
ZGJhY2tSZW5kZXJQaXBlbGluZURlc2MoY21kRW5jb2RlciwgcGlwZWxpbmVEZXNjKTsKKworICAg
IHJldHVybiBjYWNoZS5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHRNdGwsIHhmYlBpcGVs
aW5lRGVzYyk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIH0gIC8vIG5hbWVzcGFjZSByeApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9yZXNvdXJjZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgKaW5kZXggZjIyMDY1MDkzMzg2YTBi
NDllYzlhOTBkMzA0MThkMmYxZTI1YmM0Yy4uMmUzMzM0ZGZlMjUyYmJmMTA5ZDMxYmVlZDY4NmI1
OTNkNjkyY2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCkBAIC02
Myw3ICs2Myw2IEBAIGNsYXNzIFJlc291cmNlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgYm9v
bCBpc0NQVVJlYWRNZW1OZWVkU3luYygpIGNvbnN0IHsgcmV0dXJuIG1Vc2FnZVJlZi0+Y3B1UmVh
ZE1lbU5lZWRTeW5jOyB9CiAgICAgdm9pZCByZXNldENQVVJlYWRNZW1OZWVkU3luYygpIHsgbVVz
YWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmMgPSBmYWxzZTsgfQogCi0gICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIGFyZSB1c2VmdWwgZm9yIEJ1ZmZlck10bCB0byBrbm93IHdoZXRoZXIgaXQgc2hvdWxk
IHVwZGF0ZSB0aGUgc2hhZG93IGNvcHkKICAgICBib29sIGlzQ1BVUmVhZE1lbURpcnR5KCkgY29u
c3QgeyByZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtRGlydHk7IH0KICAgICB2b2lkIHJlc2V0
Q1BVUmVhZE1lbURpcnR5KCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1EaXJ0eSA9IGZhbHNlOyB9
CiAKQEAgLTgxLDcgKzgwLDcgQEAgY2xhc3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFibGUK
ICAgICAgICAgdWludDY0X3QgY21kQnVmZmVyUXVldWVTZXJpYWwgPSAwOwogCiAgICAgICAgIC8v
IFRoaXMgZmxhZyBtZWFucyB0aGUgcmVzb3VyY2Ugd2FzIGlzc3VlZCB0byBiZSBtb2RpZmllZCBi
eSBHUFUsIGlmIENQVSB3YW50cyB0byByZWFkCi0gICAgICAgIC8vIGl0cyBjb250ZW50LCBleHBs
aWNpdCBzeW5jaHJvbml6YXRpb24gY2FsbCBtdXN0IGJlIGludm9rZWQuCisgICAgICAgIC8vIGl0
cyBjb250ZW50LCBleHBsaWNpdCBzeW5jaG9ybml6YXRpb24gY2FsbCBtdXN0IGJlIGludm9rZWQu
CiAgICAgICAgIGJvb2wgY3B1UmVhZE1lbU5lZWRTeW5jID0gZmFsc2U7CiAKICAgICAgICAgLy8g
VGhpcyBmbGFnIGlzIHVzZWZ1bCBmb3IgQnVmZmVyTXRsIHRvIGtub3cgd2hldGhlciBpdCBzaG91
bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQpAQCAtMTEwLDYgKzEwOSwxMyBAQCBjbGFzcyBUZXh0
dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwogCisgICAgLy8gT24gbWFjT1Ms
IG1lbW9yeSB3aWxsIHN0aWxsIGJlIGFsbG9jYXRlZCBmb3IgdGhpcyB0ZXh0dXJlLgorICAgIHN0
YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKENvbnRleHRNdGwgKmNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisK
ICAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlQ3ViZVRleHR1cmUoQ29udGV4dE10bCAqY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9y
bWF0ICZmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHNpemUsCkBAIC0xNDcsMTAgKzE1MywyMSBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDog
cHVibGljIFJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwogCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFr
ZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9T
dXJmYWNlUmVmIHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBwbGFuZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworCiAgICAgc3RhdGljIFRleHR1cmVSZWYg
TWFrZUZyb21NZXRhbChpZDxNVExUZXh0dXJlPiBtZXRhbFRleHR1cmUpOwogCiAgICAgLy8gQWxs
b3cgQ1BVIHRvIHJlYWQgJiB3cml0ZSBkYXRhIGRpcmVjdGx5IHRvIHRoaXMgdGV4dHVyZT8KICAg
ICBib29sIGlzQ1BVQWNjZXNzaWJsZSgpIGNvbnN0OworICAgIC8vIEFsbG93IHNoYWRlcnMgdG8g
cmVhZC9zYW1wbGUgdGhpcyB0ZXh0dXJlPworICAgIC8vIFRleHR1cmUgY3JlYXRlZCB3aXRoIHJl
bmRlclRhcmdldE9ubHkgZmxhZyB3b24ndCBiZSByZWFkYWJsZQorICAgIGJvb2wgaXNTaGFkZXJS
ZWFkYWJsZSgpIGNvbnN0OwogCiAgICAgYm9vbCBzdXBwb3J0Rm9ybWF0VmlldygpIGNvbnN0Owog
CkBAIC0yMTgsMTYgKzIzNSwyOSBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291
cmNlLAogICAgIE1UTENvbG9yV3JpdGVNYXNrIGdldENvbG9yV3JpdGFibGVNYXNrKCkgY29uc3Qg
eyByZXR1cm4gKm1Db2xvcldyaXRhYmxlTWFzazsgfQogICAgIHZvaWQgc2V0Q29sb3JXcml0YWJs
ZU1hc2soTVRMQ29sb3JXcml0ZU1hc2sgbWFzaykgeyAqbUNvbG9yV3JpdGFibGVNYXNrID0gbWFz
azsgfQogCi0gICAgLy8gR2V0IGxpbmVhciBjb2xvciBzcGFjZSB2aWV3LiBPbmx5IHVzYWJsZSBm
b3Igc1JHQiB0ZXh0dXJlcy4KLSAgICBUZXh0dXJlUmVmIGdldExpbmVhckNvbG9yVmlldygpOwor
ICAgIC8vIEdldCByZWFkaW5nIGNvcHkuIFVzZWQgZm9yIHJlYWRpbmcgbm9uLXJlYWRhYmxlIHRl
eHR1cmUgb3IgcmVhZGluZyBzdGVuY2lsIHZhbHVlIGZyb20KKyAgICAvLyBwYWNrZWQgZGVwdGgg
JiBzdGVuY2lsIHRleHR1cmUuCisgICAgLy8gTk9URTogdGhpcyBvbmx5IGNvcGllcyAxIGRlcHRo
IHNsaWNlIG9mIHRoZSAzRCB0ZXh0dXJlLgorICAgIC8vIFRoZSB0ZXhlbHMgd2lsbCBiZSBjb3Bp
ZWQgdG8gcmVnaW9uKDAsIDAsIDAsIGFyZWFUb0NvcHkuc2l6ZSkgb2YgdGhlIHJldHVybmVkIHRl
eHR1cmUuCisgICAgLy8gVGhlIHJldHVybmVkIHBvaW50ZXIgd2lsbCBiZSByZXRhaW5lZCBieSB0
aGUgb3JpZ2luYWwgdGV4dHVyZSBvYmplY3QuCisgICAgLy8gQ2FsbGluZyBnZXRSZWFkYWJsZUNv
cHkoKSB3aWxsIG92ZXJ3cml0ZSBwcmV2aW91c2x5IHJldHVybmVkIHRleHR1cmUuCisgICAgVGV4
dHVyZVJlZiBnZXRSZWFkYWJsZUNvcHkoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBsZXZlbFRvQ29weSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzbGljZVRvQ29w
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNVExSZWdpb24gJmFyZWFU
b0NvcHkpOworCisgICAgdm9pZCByZWxlYXNlUmVhZGFibGVDb3B5KCk7CiAKICAgICAvLyBHZXQg
c3RlbmNpbCB2aWV3CiAgICAgVGV4dHVyZVJlZiBnZXRTdGVuY2lsVmlldygpOworICAgIC8vR2V0
IGxpbmVhciBjb2xvcgorICAgIFRleHR1cmVSZWYgZ2V0TGluZWFyQ29sb3JWaWV3KCk7CiAKICAg
ICAvLyBDaGFuZ2UgdGhlIHdyYXBwZWQgbWV0YWwgb2JqZWN0LiBTcGVjaWFsIGNhc2UgZm9yIHN3
YXBjaGFpbiBpbWFnZQogICAgIHZvaWQgc2V0KGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7
CiAKLSAgICAvLyBzeW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQorICAgIC8vIEV4cGxp
Y2l0bHkgc3luYyBjb250ZW50IGJldHdlZW4gQ1BVIGFuZCBHUFUKICAgICB2b2lkIHN5bmNDb250
ZW50KENvbnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVy
KTsKIAogICBwcml2YXRlOgpAQCAtMjQxLDEyICsyNzEsNDEgQEAgY2xhc3MgVGV4dHVyZSBmaW5h
bCA6IHB1YmxpYyBSZXNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwogCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFr
ZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKworICAgIHN0
YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0
b3IgKmRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9TdXJmYWNl
UmVmIHN1cmZhY2VSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNV
SW50ZWdlciBzbGljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4dHVyZVJlZiAqcmVmT3V0KTsKKwogICAgIFRleHR1cmUoaWQ8TVRMVGV4dHVyZT4gbWV0YWxU
ZXh0dXJlKTsKICAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCiAgICAgICAgICAgICBN
VExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCiAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCiAgICAgICAgICAgICBib29sIGFsbG93
Rm9ybWF0Vmlldyk7CisgICAgVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAg
ICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICB1aW50MzJfdCBtaXBz
LAorICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgYm9vbCBh
bGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MpOworCisgICAgVGV4
dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0
b3IgKmRlc2MsCisgICAgICAgICAgICBJT1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorICAgICAgICAg
ICAgTlNVSW50ZWdlciBwbGFuZSwKKyAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSk7
CiAKICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHZpZXcKICAgICBUZXh0dXJlKFRleHR1cmUgKm9y
aWdpbmFsLCBNVExQaXhlbEZvcm1hdCBmb3JtYXQpOwpAQCAtMjY0LDkgKzMyMywxNCBAQCBjbGFz
cyBUZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAogICAgIFRleHR1cmVSZWYgbUxpbmVh
ckNvbG9yVmlldzsKIAogICAgIFRleHR1cmVSZWYgbVN0ZW5jaWxWaWV3OworICAgIC8vUmVhZGFi
bGUgY29weSBvZiB0ZXh0dXJlCisgICAgVGV4dHVyZVJlZiBtUmVhZENvcHk7CisKIH07CiAKLWNs
YXNzIEJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwgcHVibGljIFdyYXBwZWRPYmplY3Q8
aWQ8TVRMQnVmZmVyPj4KK2NsYXNzIEJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwKKyAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTEJ1ZmZlcj4+LAor
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8
QnVmZmVyPgogewogICBwdWJsaWM6CiAgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZUJ1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMubW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNl
cy5tbQppbmRleCA5YmVlNDc1Zjg2NmQ2NGJiMjVjODViMzZlZjE3OGVlN2NmYWVkYjE4Li5hYjdh
MmRjNzIwMDlkNjIzZjNkNzBiZmU1YjYwYzExZTFiNGFmZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNl
cy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX3Jlc291cmNlcy5tbQpAQCAtMzQsMjAgKzM0LDIyIEBAIGlubGluZSBOU1VJbnRl
Z2VyIEdldE1pcFNpemUoTlNVSW50ZWdlciBiYXNlU2l6ZSwgY29uc3QgTWlwbWFwTmF0aXZlTGV2
ZWwgbGV2ZWwpCiAvLyBBc3luY2hyb25vdXNseSBzeW5jaHJvbml6ZSB0aGUgY29udGVudCBvZiBh
IHJlc291cmNlIGJldHdlZW4gR1BVIG1lbW9yeSBhbmQgaXRzIENQVSBjYWNoZS4KIC8vIE5PVEU6
IFRoaXMgb3BlcmF0aW9uIGRvZXNuJ3QgZmluaXNoIGltbWVkaWF0ZWx5IHVwb24gZnVuY3Rpb24n
cyByZXR1cm4uCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgSW52b2tlQ1BVTWVtU3luYyhDb250
ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIsIFQg
KnJlc291cmNlKQordm9pZCBTeW5jQ29udGVudChDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIsCisgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxUPiAmcmVzb3VyY2UpCiB7CiAjaWYgVEFS
R0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICBpZiAoYmxpdEVuY29kZXIp
CiAgICAgewogICAgICAgICBibGl0RW5jb2Rlci0+c3luY2hyb25pemVSZXNvdXJjZShyZXNvdXJj
ZSk7CisKICAgICAgICAgcmVzb3VyY2UtPnJlc2V0Q1BVUmVhZE1lbU5lZWRTeW5jKCk7CiAgICAg
fQogI2VuZGlmCiB9Ci0vLyBFbnN1cmUgdGhhdCBhIHJlc291cmNlJ3MgQ1BVIGNhY2hlIHdpbGwg
YmUgc3luY2hyb25pemVkIGFmdGVyIEdQVSBmaW5pc2hlcyBpdHMgbW9kaWZpY2F0aW9ucyBvbgot
Ly8gdGhlIHJlc291cmNlLgorCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgRW5zdXJlQ1BVTWVt
V2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQordm9pZCBFbnN1
cmVDb250ZW50U3luY2VkKENvbnRleHRNdGwgKmNvbnRleHQsIGNvbnN0IHN0ZDo6c2hhcmVkX3B0
cjxUPiAmcmVzb3VyY2UpCiB7CiAjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKICAgICAvLyBNYWtlIHN1cmUgR1BVICYgQ1BVIGNvbnRlbnRzIGFyZSBzeW5jaHJvbml6
ZWQuCkBAIC01Niw3ICs1OCw3IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRl
eHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQogICAgIGlmIChyZXNvdXJjZS0+Z2V0KCkuc3Rv
cmFnZU1vZGUgPT0gTVRMU3RvcmFnZU1vZGVNYW5hZ2VkICYmIHJlc291cmNlLT5pc0NQVVJlYWRN
ZW1OZWVkU3luYygpKQogICAgIHsKICAgICAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJs
aXRFbmNvZGVyID0gY29udGV4dC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7Ci0gICAgICAgIElu
dm9rZUNQVU1lbVN5bmMoY29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsKKyAgICAgICAg
U3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsKICAgICB9CiAjZW5k
aWYKIH0KQEAgLTEyMiw2ICsxMjQsMjQgQEAgYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlMkRU
ZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCiAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NP
UEUKIH0KIAorLyoqIHN0YXRpYyAqLworYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlTWVtb3J5
TGVzczJEVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZVJlZiAqcmVmT3V0KQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAg
ICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYyA9CisgICAgICAgICAgICBbTVRMVGV4dHVy
ZURlc2NyaXB0b3IgdGV4dHVyZTJERGVzY3JpcHRvcldpdGhQaXhlbEZvcm1hdDpmb3JtYXQubWV0
YWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoOndpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWlnaHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwbWFw
cGVkOk5PXTsKKworICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29udGV4dCwgZm9ybWF0LCBk
ZXNjLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgcmVmT3V0KTsKKyAgICB9ICAvLyBBTkdMRV9NVExf
T0JKQ19TQ09QRQorfQogLyoqIHN0YXRpYyAqLwogYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtl
Q3ViZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LApAQCAtMjIzLDYgKzI0MywyMyBA
QCBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2UzRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4
dCwKICAgICAgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIGZvcm1hdCwgZGVzYywgbWlw
cywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCByZWZPdXQpOwogICAgIH0gIC8v
IEFOR0xFX01UTF9PQkpDX1NDT1BFCiB9CithbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VJT1N1
cmZhY2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgcmVm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBw
bGFuZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVy
ZVJlZiAqcmVmT3V0KQoreworICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0gW1tNVExU
ZXh0dXJlRGVzY3JpcHRvciBuZXddIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgZGVzYy50
ZXh0dXJlVHlwZSAgICAgICAgICAgPSBNVExUZXh0dXJlVHlwZTJEOworICAgIGRlc2MucGl4ZWxG
b3JtYXQgICAgICAgICAgID0gZm9ybWF0Lm1ldGFsRm9ybWF0OworICAgIGRlc2Mud2lkdGggICAg
ICAgICAgICAgICAgID0gd2lkdGg7CisgICAgZGVzYy5oZWlnaHQgICAgICAgICAgICAgICAgPSBo
ZWlnaHQ7CisgICAgZGVzYy5taXBtYXBMZXZlbENvdW50ICAgICAgPSAxOworICAgIGRlc2Muc2Ft
cGxlQ291bnQgICAgICAgICAgID0gMTsKKyAgICByZXR1cm4gTWFrZVRleHR1cmUoY29udGV4dCwg
Zm9ybWF0LCBkZXNjLCByZWYsIHBsYW5lLCBOTywgcmVmT3V0KTsKK30KIAogLyoqIHN0YXRpYyAq
LwogYW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LApAQCAtMjMzLDcgKzI3MCw0MiBAQCBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJl
KENvbnRleHRNdGwgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYWxsb3dGb3JtYXRWaWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXh0dXJlUmVmICpyZWZPdXQpCiB7Ci0gICAgcmVmT3V0LT5yZXNldChuZXcgVGV4dHVyZShj
b250ZXh0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcpKTsK
KyAgICByZXR1cm4gTWFrZVRleHR1cmUoY29udGV4dCwgbXRsRm9ybWF0LCBkZXNjLCBtaXBzLCBy
ZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICByZWZPdXQpOworfQorCithbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJl
KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBtZW1vcnlMZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgcmVmT3V0LT5yZXNldChuZXcgVGV4dHVy
ZShjb250ZXh0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcs
IG1lbW9yeUxlc3MpKTsKKworICAgIGlmICghcmVmT3V0IHx8ICFyZWZPdXQtPmdldCgpKQorICAg
IHsKKyAgICAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRleHQsIGZhbHNlLCBHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9CisgICAgaWYgKCFtdGxGb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygp
KQorICAgIHsKKyAgICAgICAgcmVmT3V0LT5nZXQoKS0+c2V0Q29sb3JXcml0YWJsZU1hc2soR2V0
RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFr
ZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBzbGljZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgcmVmT3V0
LT5yZXNldChuZXcgVGV4dHVyZShjb250ZXh0LCBkZXNjLCBzdXJmYWNlUmVmLCBzbGljZSwgcmVu
ZGVyVGFyZ2V0T25seSkpOwogCiAgICAgaWYgKCEoKnJlZk91dCkgfHwgISgqcmVmT3V0KS0+Z2V0
KCkpCiAgICAgewpAQCAtMjY0LDYgKzMzNiwxNSBAQCBUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCiAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKICAgICAgICAgICAgICAgICAgYm9vbCBhbGxv
d0Zvcm1hdFZpZXcpCisgICAgOiBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRh
cmdldE9ubHksIGFsbG93Rm9ybWF0VmlldywgZmFsc2UpCit7fQorCitUZXh0dXJlOjpUZXh0dXJl
KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlw
dG9yICpkZXNjLAorICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorICAgICAgICAgICAg
ICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dG
b3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MpCiAgICAgOiBtQ29s
b3JXcml0YWJsZU1hc2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRlTWFzaz4oTVRMQ29s
b3JXcml0ZU1hc2tBbGwpKQogewogICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCkBAIC0yODMsOCAr
MzY0LDE2IEBAIFRleHR1cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAg
ICAgIGRlc2MudXNhZ2UgfD0gTVRMVGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzYy5waXhlbEZv
cm1hdCkuZGVwdGhSZW5kZXJhYmxlIHx8Ci0gICAgICAgICAgICBkZXNjLnRleHR1cmVUeXBlID09
IE1UTFRleHR1cmVUeXBlMkRNdWx0aXNhbXBsZSkKKyAgICAgICAgaWYgKG1lbW9yeUxlc3MpCisg
ICAgICAgIHsKKyNpZiAoVEFSR0VUX09TX0lPUyB8fCBUQVJHRVRfT1NfVFYpICYmICFUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRMUmVz
b3VyY2VTdG9yYWdlTW9kZU1lbW9yeWxlc3M7CisjZWxzZQorICAgICAgICAgICAgZGVzYy5yZXNv
dXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZTsKKyNlbmRpZgorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVz
Yy5waXhlbEZvcm1hdCkuZGVwdGhSZW5kZXJhYmxlIHx8CisgICAgICAgICAgICAgICAgIGRlc2Mu
dGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQogICAgICAgICB7CiAg
ICAgICAgICAgICAvLyBNZXRhbCBkb2Vzbid0IHN1cHBvcnQgaG9zdCBhY2Nlc3MgdG8gZGVwdGgg
c3RlbmNpbCB0ZXh0dXJlJ3MgZGF0YQogICAgICAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMg
PSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0ZTsKQEAgLTMxMCw2ICszOTksNDYgQEAgVGV4
dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgIH0KIH0KIAorVGV4dHVyZTo6
VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBNVExUZXh0dXJl
RGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgICAgICAgSU9TdXJmYWNlUmVmIGlvc3VyZmFj
ZSwKKyAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBwbGFuZSwKKyAgICAgICAgICAgICAgICAg
Ym9vbCByZW5kZXJUYXJnZXRPbmx5KQorICAgIDogbUNvbG9yV3JpdGFibGVNYXNrKHN0ZDo6bWFr
ZV9zaGFyZWQ8TVRMQ29sb3JXcml0ZU1hc2s+KE1UTENvbG9yV3JpdGVNYXNrQWxsKSkKK3sKKyAg
ICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgIHsKKyAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRh
bERldmljZSA9IGNvbnRleHQtPmdldE1ldGFsRGV2aWNlKCk7CisKKyAgICAgICAgLy8gRXZlcnkg
dGV4dHVyZSB3aWxsIHN1cHBvcnQgYmVpbmcgcmVuZGVyZWQgZm9yIG5vdworICAgICAgICBkZXNj
LnVzYWdlID0gTVRMVGV4dHVyZVVzYWdlUGl4ZWxGb3JtYXRWaWV3OworCisgICAgICAgIGlmIChj
b250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4ZWxGb3JtYXQpLmlzUmVuZGVyYWJs
ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2Fn
ZVJlbmRlclRhcmdldDsKKyAgICAgICAgfQorCisjaWYgKFRBUkdFVF9PU19JT1MgfHwgVEFSR0VU
X09TX1RWIHx8IFRBUkdFVF9PU19XQVRDSCkgJiYgIVRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAg
ICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVTaGFyZWQ7
CisjZWxzZQorICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFn
ZU1vZGVNYW5hZ2VkOworI2VuZGlmCisKKyAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXRPbmx5KQor
ICAgICAgICB7CisgICAgICAgICAgICBkZXNjLnVzYWdlID0gZGVzYy51c2FnZSB8IE1UTFRleHR1
cmVVc2FnZVNoYWRlclJlYWQ7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9y
bWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS53cml0YWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkZXNjLnVzYWdlID0gZGVzYy51c2FnZSB8IE1UTFRleHR1cmVVc2FnZVNoYWRl
cldyaXRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlkPE1UTFRleHR1cmU+
IGlvc3VyZlRleHR1cmUgPSBbbWV0YWxEZXZpY2UgbmV3VGV4dHVyZVdpdGhEZXNjcmlwdG9yOmRl
c2MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpb3N1cmZhY2U6aW9zdXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOnBs
YW5lXTsKKyAgICAgICAgc2V0KFtpb3N1cmZUZXh0dXJlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0p
OworICAgIH0KK30KKwogVGV4dHVyZTo6VGV4dHVyZShUZXh0dXJlICpvcmlnaW5hbCwgTVRMUGl4
ZWxGb3JtYXQgZm9ybWF0KQogICAgIDogUmVzb3VyY2Uob3JpZ2luYWwpLAogICAgICAgbUNvbG9y
V3JpdGFibGVNYXNrKG9yaWdpbmFsLT5tQ29sb3JXcml0YWJsZU1hc2spICAvLyBTaGFyZSBjb2xv
ciB3cml0ZSBtYXNrIHByb3BlcnR5CkBAIC0zNDEsNyArNDcwLDcgQEAgVGV4dHVyZTo6VGV4dHVy
ZShUZXh0dXJlICpvcmlnaW5hbCwgY29uc3QgVGV4dHVyZVN3aXp6bGVDaGFubmVscyAmc3dpenps
ZSkKICAgICA6IFJlc291cmNlKG9yaWdpbmFsKSwKICAgICAgIG1Db2xvcldyaXRhYmxlTWFzayhv
cmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Igd3JpdGUgbWFzayBw
cm9wZXJ0eQogewotI2lmIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRQorI2lmIGRlZmluZWQo
X19JUEhPTkVfMTNfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNSkKICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQogICAgIHsKICAgICAgICAgYXV0byB2aWV3ID0gW29yaWdpbmFsLT5nZXQoKQpAQCAt
MzYwLDEyICs0ODksMTIgQEAgVGV4dHVyZTo6VGV4dHVyZShUZXh0dXJlICpvcmlnaW5hbCwgY29u
c3QgVGV4dHVyZVN3aXp6bGVDaGFubmVscyAmc3dpenpsZSkKIAogdm9pZCBUZXh0dXJlOjpzeW5j
Q29udGVudChDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxp
dEVuY29kZXIpCiB7Ci0gICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2Rlciwg
dGhpcyk7CisgICAgU3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9t
X3RoaXMoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZChDb250ZXh0
TXRsICpjb250ZXh0KQogewotICAgIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChjb250ZXh0LCB0
aGlzKTsKKyAgICBFbnN1cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9tX3RoaXMo
KSk7CiB9CiAKIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKQEAgLTM3OSw2
ICs1MDgsMTEgQEAgYm9vbCBUZXh0dXJlOjppc0NQVUFjY2Vzc2libGUoKSBjb25zdAogICAgIHJl
dHVybiBnZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdlTW9kZVNoYXJlZDsKIH0KIAorYm9v
bCBUZXh0dXJlOjppc1NoYWRlclJlYWRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0KCku
dXNhZ2UgJiBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFkOworfQorCiBib29sIFRleHR1cmU6OnN1
cHBvcnRGb3JtYXRWaWV3KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0KCkudXNhZ2UgJiBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CkBAIC01MTQsMTIgKzY0OCwxNCBAQCBUZXh0dXJl
UmVmIFRleHR1cmU6OmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVsRm9ybWF0
IGZvcm1hdCkKICAgICBBU1NFUlQoc3VwcG9ydEZvcm1hdFZpZXcoKSk7CiAgICAgcmV0dXJuIFRl
eHR1cmVSZWYobmV3IFRleHR1cmUodGhpcywgZm9ybWF0KSk7CiB9CisKIFRleHR1cmVSZWYgVGV4
dHVyZTo6Y3JlYXRlVmlld1dpdGhDb21wYXRpYmxlRm9ybWF0KE1UTFBpeGVsRm9ybWF0IGZvcm1h
dCkKIHsKLSAgICAvLyBObyBuZWVkIGZvciBBU1NFUlQoc3VwcG9ydEZvcm1hdFZpZXcoKSk7CiAg
ICAgcmV0dXJuIFRleHR1cmVSZWYobmV3IFRleHR1cmUodGhpcywgZm9ybWF0KSk7CiB9CiAKKwor
CiBUZXh0dXJlUmVmIFRleHR1cmU6OmNyZWF0ZVN3aXp6bGVWaWV3KGNvbnN0IFRleHR1cmVTd2l6
emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiB7CiAjaWYgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxF
CkBAIC02NTIsNiArNzg4LDQ4IEBAIFRleHR1cmVSZWYgVGV4dHVyZTo6Z2V0TGluZWFyQ29sb3JW
aWV3KCkKICAgICByZXR1cm4gbUxpbmVhckNvbG9yVmlldzsKIH0KIAorVGV4dHVyZVJlZiBUZXh0
dXJlOjpnZXRSZWFkYWJsZUNvcHkoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgbGV2ZWxU
b0NvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCBzbGljZVRvQ29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE1UTFJlZ2lvbiAmYXJlYVRvQ29weSkKK3sKKyAgICBnbDo6RXh0ZW50cyBmaXJzdExldmVsU2l6
ZSA9IHNpemUoa1plcm9OYXRpdmVNaXBMZXZlbCk7CisgICAgaWYgKCFtUmVhZENvcHkgfHwgbVJl
YWRDb3B5LT5nZXQoKS53aWR0aCA8IHN0YXRpY19jYXN0PHNpemVfdD4oZmlyc3RMZXZlbFNpemUu
d2lkdGgpIHx8CisgICAgICAgIG1SZWFkQ29weS0+Z2V0KCkuaGVpZ2h0IDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihmaXJzdExldmVsU2l6ZS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRl
IGEgdGV4dHVyZSB0aGF0IGJpZyBlbm91Z2ggdG8gc3RvcmUgdGhlIGZpcnN0IGxldmVsIGRhdGEg
YW5kIGFueSBzbWFsbGVyIGxldmVsCisgICAgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gZGVzYyAgICAgICAgICAgID0gW1tNVExUZXh0dXJlRGVz
Y3JpcHRvciBuZXddIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICBkZXNjLnRl
eHR1cmVUeXBlICAgICA9IGdldCgpLnRleHR1cmVUeXBlOworICAgICAgICAgICAgZGVzYy5waXhl
bEZvcm1hdCAgICAgPSBnZXQoKS5waXhlbEZvcm1hdDsKKyAgICAgICAgICAgIGRlc2Mud2lkdGgg
ICAgICAgICAgID0gZmlyc3RMZXZlbFNpemUud2lkdGg7CisgICAgICAgICAgICBkZXNjLmhlaWdo
dCAgICAgICAgICA9IGZpcnN0TGV2ZWxTaXplLmhlaWdodDsKKyAgICAgICAgICAgIGRlc2MuZGVw
dGggICAgICAgICAgID0gMTsKKyAgICAgICAgICAgIGRlc2MuYXJyYXlMZW5ndGggICAgID0gMTsK
KyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9k
ZVByaXZhdGU7CisgICAgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ICAgICA9IGdldCgpLnNhbXBs
ZUNvdW50OworICAgICAgICAgICAgZGVzYy51c2FnZSAgICAgICAgICAgPSBNVExUZXh0dXJlVXNh
Z2VTaGFkZXJSZWFkIHwgTVRMVGV4dHVyZVVzYWdlUGl4ZWxGb3JtYXRWaWV3OworCisgICAgICAg
ICAgICBpZDxNVExUZXh0dXJlPiBtdGxUZXh0dXJlID0gW2NvbnRleHQtPmdldE1ldGFsRGV2aWNl
KCkgbmV3VGV4dHVyZVdpdGhEZXNjcmlwdG9yOmRlc2NdOworICAgICAgICAgICAgbVJlYWRDb3B5
LnJlc2V0KG5ldyBUZXh0dXJlKG10bFRleHR1cmUpKTsKKyAgICAgICAgfSAgLy8gQU5HTEVfTVRM
X09CSkNfU0NPUEUKKyAgICB9CisKKyAgICBBU1NFUlQoZW5jb2Rlcik7CisKKyAgICBlbmNvZGVy
LT5jb3B5VGV4dHVyZShzaGFyZWRfZnJvbV90aGlzKCksIHNsaWNlVG9Db3B5LCBsZXZlbFRvQ29w
eSwgbVJlYWRDb3B5LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDEpOworCisg
ICAgcmV0dXJuIG1SZWFkQ29weTsKK30KKwordm9pZCBUZXh0dXJlOjpyZWxlYXNlUmVhZGFibGVD
b3B5KCkKK3sKKyAgICBtUmVhZENvcHkgPSBudWxscHRyOworfQorCiBUZXh0dXJlUmVmIFRleHR1
cmU6OmdldFN0ZW5jaWxWaWV3KCkKIHsKICAgICBpZiAobVN0ZW5jaWxWaWV3KQpAQCAtNzk5LDcg
Kzk3Nyw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyOjpyZXNldFdpdGhSZXNPcHQoQ29udGV4dE10
bCAqY29udGV4dCwKIAogdm9pZCBCdWZmZXI6OnN5bmNDb250ZW50KENvbnRleHRNdGwgKmNvbnRl
eHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2RlcikKIHsKLSAgICBJbnZva2VD
UFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKyAgICBTeW5jQ29udGVudChj
b250ZXh0LCBibGl0RW5jb2Rlciwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIH0KIAogY29uc3QgdWlu
dDhfdCAqQnVmZmVyOjptYXBSZWFkT25seShDb250ZXh0TXRsICpjb250ZXh0KQpAQCAtODIwLDcg
Kzk5OCw3IEBAIHVpbnQ4X3QgKkJ1ZmZlcjo6bWFwV2l0aE9wdChDb250ZXh0TXRsICpjb250ZXh0
LCBib29sIHJlYWRvbmx5LCBib29sIG5vU3luYykKICAgICB7CiAgICAgICAgIENvbW1hbmRRdWV1
ZSAmY21kUXVldWUgPSBjb250ZXh0LT5jbWRRdWV1ZSgpOwogCi0gICAgICAgIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChjb250ZXh0LCB0aGlzKTsKKyAgICAgICAgRW5zdXJlQ29udGVudFN5bmNl
ZChjb250ZXh0LCBzaGFyZWRfZnJvbV90aGlzKCkpOwogCiAgICAgICAgIGlmICh0aGlzLT5pc0Jl
aW5nVXNlZEJ5R1BVKGNvbnRleHQpKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hl
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX3N0YXRlX2NhY2hlLmgKaW5kZXggNzY4YzM2OTdlODVlMDZiNTY4YmQ1YTU3OTAzZDMzMDlk
NDhiYWRjMS4uZTZiZjcxZDgyOWEzNWNlZmQ4ODFkMWM0MzBlMWRjNTE3MjgyODdiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9zdGF0ZV9jYWNoZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaApAQCAtMjIsNiArMjIsMTEgQEAK
IAogc3RhdGljIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTVRMQ2xlYXJDb2xvciAmbGhz
LCBjb25zdCBNVExDbGVhckNvbG9yICZyaHMpOwogCituYW1lc3BhY2UgYW5nbGUKK3sKK3N0cnVj
dCBGZWF0dXJlc010bDsKK30KKwogbmFtZXNwYWNlIHJ4CiB7CiBjbGFzcyBDb250ZXh0TXRsOwpA
QCAtMjIzLDcgKzIyOCw4IEBAIHN0cnVjdCBSZW5kZXJQaXBlbGluZU91dHB1dERlc2MKIH07CiAK
IC8vIFNvbWUgU0RLIGxldmVscyBkb24ndCBkZWNsYXJlIE1UTFByaW1pdGl2ZVRvcG9sb2d5Q2xh
c3MuIE5lZWRzIHRvIGRvIGNvbXBpbGUgdGltZSBjaGVjayBoZXJlOgotI2lmICEoVEFSR0VUX09T
X09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpICYmIEFOR0xFX0lPU19ERVBMT1lfVEFSR0VU
IDwgX19JUEhPTkVfMTJfMAorI2lmICEoVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QpICYmIFwKKyAgICAoIWRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgQU5HTEVfSU9TX0RF
UExPWV9UQVJHRVQgPCBfX0lQSE9ORV8xMl8wKQogIyAgICBkZWZpbmUgQU5HTEVfTVRMX1BSSU1J
VElWRV9UT1BPTE9HWV9DTEFTU19BVkFJTEFCTEUgMAogdXNpbmcgUHJpbWl0aXZlVG9wb2xvZ3lD
bGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHVpbnQzMl90OwogY29u
c3RleHByIFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3Mga1ByaW1pdGl2ZVRvcG9sb2d5Q2xhc3NUcmlh
bmdsZSA9IDA7CkBAIC0yNjcsOSArMjczLDcgQEAgc3RydWN0IGFsaWduYXMoNCkgUmVuZGVyUGlw
ZWxpbmVEZXNjCiAgICAgUmVuZGVyUGlwZWxpbmVEZXNjICZvcGVyYXRvcj0oY29uc3QgUmVuZGVy
UGlwZWxpbmVEZXNjICZzcmMpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbmRlclBp
cGVsaW5lRGVzYyAmcmhzKSBjb25zdDsKLQogICAgIHNpemVfdCBoYXNoKCkgY29uc3Q7Ci0KICAg
ICBib29sIHJhc3Rlcml6YXRpb25FbmFibGVkKCkgY29uc3Q7CiAKICAgICBWZXJ0ZXhEZXNjIHZl
cnRleERlc2NyaXB0b3I7CkBAIC0yODgsNiArMjkyLDI3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJl
bmRlclBpcGVsaW5lRGVzYwogICAgIGJvb2wgZW11bGF0ZUNvdmVyYWdlTWFzayA6IDE7CiB9Owog
CitzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYworeworICAgIFRl
eHR1cmVSZWYgZ2V0VGV4dHVyZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmUubG9jaygpOyB9
CisgICAgVGV4dHVyZVJlZiBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpIGNvbnN0IHsgcmV0dXJu
IGltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorICAgIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1
cmUoKSBjb25zdCB7IHJldHVybiAhaW1wbGljaXRNU1RleHR1cmUuZXhwaXJlZCgpOyB9CisgICAg
dWludDMyX3QgZ2V0UmVuZGVyU2FtcGxlcygpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0dXJl
UmVmIHRleCAgID0gZ2V0VGV4dHVyZVJlZigpOworICAgICAgICBUZXh0dXJlUmVmIG1zVGV4ID0g
Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKTsKKyAgICAgICAgcmV0dXJuIG1zVGV4ID8gbXNUZXgt
PnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOworICAgIH0KKworICAgIFRl
eHR1cmVXZWFrUmVmIHRleHR1cmU7CisgICAgLy8gSW1wbGljaXQgbXVsdGlzYW1wbGUgdGV4dHVy
ZSB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgaW50byBhbmQgZGlzY2FyZGVkIGF0IHRoZSBlbmQgb2YK
KyAgICAvLyBhIHJlbmRlciBwYXNzLiBJdHMgcmVzdWx0IHdpbGwgYmUgcmVzb2x2ZWQgaW50byBu
b3JtYWwgdGV4dHVyZSBhYm92ZS4KKyAgICBUZXh0dXJlV2Vha1JlZiBpbXBsaWNpdE1TVGV4dHVy
ZTsKKyAgICBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCA9IGtaZXJvTmF0aXZlTWlwTGV2ZWw7Cisg
ICAgdWludDMyX3Qgc2xpY2VPckRlcHRoICAgPSAwOworICAgIGJvb2wgYmxlbmRhYmxlICAgICAg
ICAgID0gdHJ1ZTsKK307CisKIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKIHsKICAg
ICBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MoKTsKQEAgLTI5NywxOCArMzIyLDM0IEBAIHN0cnVj
dCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKICAgICBib29sIGVxdWFsSWdub3JlTG9hZFN0b3Jl
T3B0aW9ucyhjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikg
Y29uc3Q7CiAKLSAgICBBTkdMRV9JTkxJTkUgYm9vbCBoYXNJbXBsaWNpdE1TVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIGltcGxpY2l0TVNUZXh0dXJlLmdldCgpOyB9Ci0KLSAgICBUZXh0dXJlUmVm
IHRleHR1cmU7Ci0gICAgLy8gSW1wbGljaXQgbXVsdGlzYW1wbGUgdGV4dHVyZSB0aGF0IHdpbGwg
YmUgcmVuZGVyZWQgaW50byBhbmQgZGlzY2FyZGVkIGF0IHRoZSBlbmQgb2YKLSAgICAvLyBhIHJl
bmRlciBwYXNzLiBJdHMgcmVzdWx0IHdpbGwgYmUgcmVzb2x2ZWQgaW50byBub3JtYWwgdGV4dHVy
ZSBhYm92ZS4KLSAgICBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlOwotICAgIE1pcG1hcE5h
dGl2ZUxldmVsIGxldmVsOwotICAgIHVpbnQzMl90IHNsaWNlT3JEZXB0aDsKLQotICAgIC8vIFRo
aXMgYXR0YWNobWVudCBpcyBibGVuZGFibGUgb3Igbm90LgotICAgIGJvb2wgYmxlbmRhYmxlOwor
ICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIHRleHR1cmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+Z2V0VGV4dHVyZVJlZigpIDog
bnVsbHB0cjsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIFRleHR1cmVSZWYgaW1wbGljaXRNU1Rl
eHR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRl
clRhcmdldC0+Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSA6IG51bGxwdHI7CisgICAgfQorICAg
IEFOR0xFX0lOTElORSBib29sIGhhc0ltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmhhc0ltcGxpY2l0TVNU
ZXh0dXJlKCkgOiBmYWxzZTsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHJlbmRl
clNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpIDogMTsKKyAgICB9CisgICAgQU5HTEVfSU5M
SU5FIE1pcG1hcE5hdGl2ZUxldmVsIGxldmVsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmxldmVsIDoga1plcm9OYXRpdmVNaXBMZXZl
bDsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHNsaWNlT3JEZXB0aCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5zbGlj
ZU9yRGVwdGggOiAwOworICAgIH0KKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBibGVuZGFibGUoKSBj
b25zdCB7IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmJsZW5kYWJsZSA6IGZh
bHNlOyB9CiAKKyAgICAvLyBUaGlzIGlzIHNoYXJlZCBwb2ludGVyIHRvIGF2b2lkIGNyYXNoaW5n
IHdoZW4gdGV4dHVyZSBkZWxldGVkIGFmdGVyIGJvdW5kIHRvIGEgZnJhbWUgYnVmZmVyLgorICAg
IHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjPiBy
ZW5kZXJUYXJnZXQ7CiAgICAgTVRMTG9hZEFjdGlvbiBsb2FkQWN0aW9uOwogICAgIE1UTFN0b3Jl
QWN0aW9uIHN0b3JlQWN0aW9uOwogICAgIE1UTFN0b3JlQWN0aW9uT3B0aW9ucyBzdG9yZUFjdGlv
bk9wdGlvbnM7CkBAIC0zNTQsNiArMzk1LDExIEBAIHN0cnVjdCBSZW5kZXJQYXNzU3RlbmNpbEF0
dGFjaG1lbnREZXNjIDogcHVibGljIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYwogICAgIHVpbnQz
Ml90IGNsZWFyU3RlbmNpbCA9IDA7CiB9OwogCisvLworLy8gVGhpcyBpcyBDKysgZXF1aXZhbGVu
dCBvZiBPYmplY3RpdmUtQyBNVExSZW5kZXJQYXNzRGVzY3JpcHRvci4KKy8vIFdlIGNvdWxkIHVz
ZSBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciBkaXJlY3RseSwgaG93ZXZlciwgdXNpbmcgQysrIHN0
cnVjdCBoYXMgYmVuZWZpdHMgb2YgZmFzdAorLy8gY29weSwgc3RhY2sgYWxsb2NhdGlvbiwgaW5s
aW5lZCBjb21wYXJpbmcgZnVuY3Rpb24sIGV0Yy4KKy8vCiBzdHJ1Y3QgUmVuZGVyUGFzc0Rlc2MK
IHsKICAgICBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyBjb2xvckF0dGFjaG1lbnRzW2tN
YXhSZW5kZXJUYXJnZXRzXTsKQEAgLTQxNyw3ICs0NjMsNiBAQCBjbGFzcyBSZW5kZXJQaXBlbGlu
ZUNhY2hlU3BlY2lhbGl6ZVNoYWRlckZhY3RvcnkKIHsKICAgcHVibGljOgogICAgIHZpcnR1YWwg
flJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSgpID0gZGVmYXVsdDsK
LQogICAgIC8vIEdldCBzcGVjaWFsaXplZCBzaGFkZXIgZm9yIHRoZSByZW5kZXIgcGlwZWxpbmUg
Y2FjaGUuCiAgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGdldFNwZWNpYWxpemVkU2hhZGVyKENv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCkBAIC00MjksNyArNDc0LDcgQEAgY2xh
c3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmcmVu
ZGVyUGlwZWxpbmVEZXNjKSA9IDA7CiB9OwogCi0vLyBSZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2Fj
aGUgcGVyIHNoYWRlciBwcm9ncmFtLgorLy8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBl
ciBzaGFkZXIgcHJvZ3JhbQogY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xl
OjpOb25Db3B5YWJsZQogewogICBwdWJsaWM6CkBAIC00NTksNiArNTA0LDcgQEAgY2xhc3MgUmVu
ZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIEF1dG9PYmpD
UHRyPGlkPE1UTEZ1bmN0aW9uPj4gbVZlcnRleFNoYWRlcjsKICAgICAvLyBOb24tc3BlY2lhbGl6
ZWQgZnJhZ21lbnQgc2hhZGVyCiAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBtRnJh
Z21lbnRTaGFkZXI7CisgICAgLy8gT24gc2hhZGVyIHdpdGggZW11bGF0ZWQgcmFzdGVyaXphdGlv
biBkaXNjYXJkLCBvbmUgd2l0aG91dAogCiAgIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclBpcGVs
aW5lU3RhdGVzKCk7CkBAIC00NzcsMTQgKzUyMywxMyBAQCBjbGFzcyBSZW5kZXJQaXBlbGluZUNh
Y2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgLy8gT25lIHRhYmxlIHdpdGggZGVm
YXVsdCBhdHRyaWIgYW5kIG9uZSB0YWJsZSB3aXRob3V0LgogICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxSZW5kZXJQaXBlbGluZURlc2MsIEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3Rh
dGU+Pj4KICAgICAgICAgbVJlbmRlclBpcGVsaW5lU3RhdGVzWzJdOwotCiAgICAgUmVuZGVyUGlw
ZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5ICptU3BlY2lhbGl6ZWRTaGFkZXJGYWN0
b3J5OwogfTsKIAogY2xhc3MgU3RhdGVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQog
ewogICBwdWJsaWM6Ci0gICAgU3RhdGVDYWNoZSgpOworICAgIFN0YXRlQ2FjaGUoY29uc3QgYW5n
bGU6OkZlYXR1cmVzTXRsICZmZWF0dXJlcyk7CiAgICAgflN0YXRlQ2FjaGUoKTsKIAogICAgIC8v
IE51bGwgZGVwdGggc3RlbmNpbCBzdGF0ZSBoYXMgZGVwdGgvc3RlY2lsIHJlYWQgJiB3cml0ZSBk
aXNhYmxlZC4KQEAgLTUwMiw2ICs1NDcsOCBAQCBjbGFzcyBTdGF0ZUNhY2hlIGZpbmFsIDogYW5n
bGU6Ok5vbkNvcHlhYmxlCiAgICAgdm9pZCBjbGVhcigpOwogCiAgIHByaXZhdGU6CisgICAgY29u
c3QgYW5nbGU6OkZlYXR1cmVzTXRsICZtRmVhdHVyZXM7CisKICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExEZXB0aFN0ZW5jaWxTdGF0ZT4+IG1OdWxsRGVwdGhTdGVuY2lsU3RhdGUgPSBuaWw7CiAgICAg
c3RkOjp1bm9yZGVyZWRfbWFwPERlcHRoU3RlbmNpbERlc2MsIEF1dG9PYmpDUHRyPGlkPE1UTERl
cHRoU3RlbmNpbFN0YXRlPj4+IG1EZXB0aFN0ZW5jaWxTdGF0ZXM7CiAgICAgc3RkOjp1bm9yZGVy
ZWRfbWFwPFNhbXBsZXJEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExTYW1wbGVyU3RhdGU+Pj4gbVNh
bXBsZXJTdGF0ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQpp
bmRleCAxY2YyMzdhZDY0MDQyZmI1OTc2NjMzYzk4YzdiNTExMjQwZjkzNzQ4Li42OTg0ZGJkNjBj
Mzk1ZGNkNmFmOTZiODE1MTEyYTIwYWI0YmU5YmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1t
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfc3RhdGVfY2FjaGUubW0KQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF91dGlscy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL0ZlYXR1cmVzTXRsLmgiCiAKICNk
ZWZpbmUgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShEU1QsIFNSQywgUFJPUEVSVFkpIFwKICAgICAo
RFNUKS5QUk9QRVJUWSA9IHN0YXRpY19jYXN0PF9fdHlwZW9mX18oKERTVCkuUFJPUEVSVFkpPihU
b09iakMoKFNSQykuUFJPUEVSVFkpKQpAQCAtMTgyLDEwICsxODMsMTAgQEAgaWQ8TVRMVGV4dHVy
ZT4gVG9PYmpDKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCiAgICAgcmV0dXJuIHRleHR1cmVS
ZWYgPyB0ZXh0dXJlUmVmLT5nZXQoKSA6IG5pbDsKIH0KIAotdm9pZCBCYXNlUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFJlbmRlclBhc3NBdHRh
Y2htZW50RGVzY3JpcHRvciAqZHN0KQordm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
VG9PYmpDKE1UTFJlbmRlclBhc3NBdHRhY2htZW50RGVzY3JpcHRvciAqZHN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50
RGVzYyAmc3JjKQogewotICAgIGNvbnN0IFRleHR1cmVSZWYgJmltcGxpY2l0TXNUZXh0dXJlID0g
c3JjLmltcGxpY2l0TVNUZXh0dXJlOworICAgIGF1dG8gaW1wbGljaXRNc1RleHR1cmUgPSBzcmMu
aW1wbGljaXRNU1RleHR1cmUoKTsKIAogICAgIGlmIChpbXBsaWNpdE1zVGV4dHVyZSkKICAgICB7
CkBAIC0xOTMsMzEgKzE5NCwzMSBAQCB2b2lkIEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NU
b09iakMoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZzcmMsCiAgICAgICAgIGRzdC5s
ZXZlbCAgICAgICAgICA9IDA7CiAgICAgICAgIGRzdC5zbGljZSAgICAgICAgICA9IDA7CiAgICAg
ICAgIGRzdC5kZXB0aFBsYW5lICAgICA9IDA7Ci0gICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9
IFRvT2JqQyhzcmMudGV4dHVyZSk7Ci0gICAgICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5s
ZXZlbC5nZXQoKTsKKyAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0
dXJlKCkpOworICAgICAgICBkc3QucmVzb2x2ZUxldmVsICAgPSBzcmMubGV2ZWwoKS5nZXQoKTsK
ICAgICAgICAgaWYgKGRzdC5yZXNvbHZlVGV4dHVyZS50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJl
VHlwZTNEKQogICAgICAgICB7Ci0gICAgICAgICAgICBkc3QucmVzb2x2ZURlcHRoUGxhbmUgPSBz
cmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3Jj
LnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0LnJlc29sdmVTbGljZSAgICAgID0gMDsK
ICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGRzdC5yZXNv
bHZlU2xpY2UgICAgICA9IHNyYy5zbGljZU9yRGVwdGg7CisgICAgICAgICAgICBkc3QucmVzb2x2
ZVNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAgICAgICAgICBkc3QucmVzb2x2
ZURlcHRoUGxhbmUgPSAwOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGRzdC50ZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKLSAgICAgICAgZHN0LmxldmVs
ICAgPSBzcmMubGV2ZWwuZ2V0KCk7CisgICAgICAgIGRzdC50ZXh0dXJlID0gVG9PYmpDKHNyYy50
ZXh0dXJlKCkpOworICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOwogICAg
ICAgICBpZiAoZHN0LnRleHR1cmUudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUzRCkKICAg
ICAgICAgewotICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VPckRlcHRoOwor
ICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAgICAg
ICAgICBkc3Quc2xpY2UgICAgICA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAg
ICB7Ci0gICAgICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGljZU9yRGVwdGg7CisgICAg
ICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGljZU9yRGVwdGgoKTsKICAgICAgICAgICAg
IGRzdC5kZXB0aFBsYW5lID0gMDsKICAgICAgICAgfQogICAgICAgICBkc3QucmVzb2x2ZVRleHR1
cmUgICAgPSBuaWw7CkBAIC0yMzEsMjYgKzIzMiwyNiBAQCB2b2lkIEJhc2VSZW5kZXJQYXNzQXR0
YWNobWVudERlc2NUb09iakMoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZzcmMsCiAg
ICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShkc3QsIHNyYywgc3RvcmVBY3Rpb25PcHRpb25zKTsK
IH0KIAotdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2MgJmRl
c2MsCi0gICAgICAgICAgICBNVExSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzY3JpcHRvciAq
b2JqQ0Rlc2MpCit2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzY3Jp
cHRvciAqb2JqQ0Rlc2MsCisgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNzQ29sb3JBdHRhY2ht
ZW50RGVzYyAmZGVzYykKIHsKLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpD
KGRlc2MsIG9iakNEZXNjKTsKKyAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpD
KG9iakNEZXNjLCBkZXNjKTsKIAogICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2Ms
IGRlc2MsIGNsZWFyQ29sb3IpOwogfQogCi12b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzRGVw
dGhBdHRhY2htZW50RGVzYyAmZGVzYywKLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NEZXB0aEF0
dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYykKK3ZvaWQgVG9PYmpDKE1UTFJlbmRlclBhc3NE
ZXB0aEF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKyAgICAgICAgICAgIGNvbnN0IFJl
bmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNjKQogewotICAgIEJhc2VSZW5kZXJQYXNz
QXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworICAgIEJhc2VSZW5kZXJQYXNz
QXR0YWNobWVudERlc2NUb09iakMob2JqQ0Rlc2MsIGRlc2MpOwogCiAgICAgQU5HTEVfT0JKQ19D
UF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJEZXB0aCk7CiB9CiAKLXZvaWQgVG9PYmpD
KGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MsCi0gICAgICAgICAg
ICBNVExSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYykKK3Zv
aWQgVG9PYmpDKE1UTFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNE
ZXNjLAorICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAm
ZGVzYykKIHsKLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9i
akNEZXNjKTsKKyAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNj
LCBkZXNjKTsKIAogICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNs
ZWFyU3RlbmNpbCk7CiB9CkBAIC02OTYsMTEgKzY5Nyw3IEBAIFJlbmRlclBhc3NBdHRhY2htZW50
RGVzYzo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCkKIAogdm9pZCBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2M6OnJlc2V0KCkKIHsKLSAgICB0ZXh0dXJlLnJlc2V0KCk7Ci0gICAgaW1wbGljaXRN
U1RleHR1cmUucmVzZXQoKTsKLSAgICBsZXZlbCAgICAgICAgICAgICAgPSBtdGw6OmtaZXJvTmF0
aXZlTWlwTGV2ZWw7Ci0gICAgc2xpY2VPckRlcHRoICAgICAgID0gMDsKLSAgICBibGVuZGFibGUg
ICAgICAgICAgPSBmYWxzZTsKKyAgICByZW5kZXJUYXJnZXQgICAgICAgPSBudWxscHRyOwogICAg
IGxvYWRBY3Rpb24gICAgICAgICA9IE1UTExvYWRBY3Rpb25Mb2FkOwogICAgIHN0b3JlQWN0aW9u
ICAgICAgICA9IE1UTFN0b3JlQWN0aW9uU3RvcmU7CiAgICAgc3RvcmVBY3Rpb25PcHRpb25zID0g
TVRMU3RvcmVBY3Rpb25PcHRpb25Ob25lOwpAQCAtNzA5LDggKzcwNiw5IEBAIHZvaWQgUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjOjpyZXNldCgpCiBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVz
Yzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zKAogICAgIGNvbnN0IFJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYyAmb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRleHR1cmUgPT0gb3RoZXIu
dGV4dHVyZSAmJiBpbXBsaWNpdE1TVGV4dHVyZSA9PSBvdGhlci5pbXBsaWNpdE1TVGV4dHVyZSAm
JgotICAgICAgICAgICBsZXZlbCA9PSBvdGhlci5sZXZlbCAmJiBzbGljZU9yRGVwdGggPT0gb3Ro
ZXIuc2xpY2VPckRlcHRoOworICAgIHJldHVybiByZW5kZXJUYXJnZXQgPT0gb3RoZXIucmVuZGVy
VGFyZ2V0IHx8CisgICAgICAgICAgICh0ZXh0dXJlKCkgPT0gb3RoZXIudGV4dHVyZSgpICYmIGxl
dmVsKCkgPT0gb3RoZXIubGV2ZWwoKSAmJgorICAgICAgICAgICAgc2xpY2VPckRlcHRoKCkgPT0g
b3RoZXIuc2xpY2VPckRlcHRoKCkpOwogfQogCiBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVz
Yzo6b3BlcmF0b3I9PShjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25z
dApAQCAtNzIzLDYgKzcyMSwzMCBAQCBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6b3Bl
cmF0b3I9PShjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKQogICAgIHJldHVy
biBsb2FkQWN0aW9uID09IG90aGVyLmxvYWRBY3Rpb24gJiYgc3RvcmVBY3Rpb24gPT0gb3RoZXIu
c3RvcmVBY3Rpb24gJiYKICAgICAgICAgICAgc3RvcmVBY3Rpb25PcHRpb25zID09IG90aGVyLnN0
b3JlQWN0aW9uT3B0aW9uczsKIH0KKy8vIENvbnZlcnQgdG8gTWV0YWwgb2JqZWN0Cit2b2lkIFJl
bmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERlc2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
Km9iakNEZXNjKSBjb25zdAoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtQ29sb3JBdHRhY2htZW50czsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBUb09iakMob2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tp
XSwgY29sb3JBdHRhY2htZW50c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhSZW5kZXJUYXJnZXRzOyArK2kpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluYWN0aXZlIHJlbmRlciB0YXJnZXQKKyAgICAgICAg
ICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAgICAgPSBuaWw7CisgICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKKyAg
ICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc2xpY2UgICAgICAgPSAwOwor
ICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7
CisgICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0g
TVRMTG9hZEFjdGlvbkRvbnRDYXJlOworICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zdG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uRG9udENhcmU7CisgICAgICAgIH0K
KworICAgICAgICBUb09iakMob2JqQ0Rlc2MuZGVwdGhBdHRhY2htZW50LCBkZXB0aEF0dGFjaG1l
bnQpOworICAgICAgICBUb09iakMob2JqQ0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQsIHN0ZW5jaWxB
dHRhY2htZW50KTsKKyAgICB9Cit9CiAKIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjKFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykg
Y29uc3QKIHsKQEAgLTc0MiwxOSArNzY0LDE5IEBAIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVs
YXRlUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjKE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yV3JpCiB2
b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25z
dCBCbGVuZERlc2MgJmJsZW5kU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJQaXBlbGluZU91dHB1dERlc2MgKm91dERlc2Mp
IGNvbnN0CiB7Ci0gICAgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjICZvdXRwdXREZXNjcmlwdG9y
ID0gKm91dERlc2M7Ci0gICAgb3V0cHV0RGVzY3JpcHRvci5udW1Db2xvckF0dGFjaG1lbnRzICAg
ICAgID0gdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50czsKLSAgICBvdXRwdXREZXNjcmlwdG9yLnNh
bXBsZUNvdW50ICAgICAgICAgICAgICAgPSB0aGlzLT5zYW1wbGVDb3VudDsKKyAgICBhdXRvICZv
dXRwdXREZXNjcmlwdG9yICAgICAgICAgICAgICAgPSAqb3V0RGVzYzsKKyAgICBvdXRwdXREZXNj
cmlwdG9yLm51bUNvbG9yQXR0YWNobWVudHMgPSB0aGlzLT5udW1Db2xvckF0dGFjaG1lbnRzOwor
ICAgIG91dHB1dERlc2NyaXB0b3Iuc2FtcGxlQ291bnQgICAgICAgICA9IHRoaXMtPnNhbXBsZUNv
dW50OwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0aGlzLT5udW1Db2xvckF0dGFjaG1l
bnRzOyArK2kpCiAgICAgewogICAgICAgICBhdXRvICZyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50
ID0gdGhpcy0+Y29sb3JBdHRhY2htZW50c1tpXTsKLSAgICAgICAgYXV0byB0ZXh0dXJlICAgICAg
ICAgICAgICAgICAgICA9IHJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICAg
ICAgYXV0byB0ZXh0dXJlICAgICAgICAgICAgICAgICAgICA9IHJlbmRlclBhc3NDb2xvckF0dGFj
aG1lbnQudGV4dHVyZSgpOwogCiAgICAgICAgIGlmICh0ZXh0dXJlKQogICAgICAgICB7CiAgICAg
ICAgICAgICAvLyBDb3B5IHBhcmFtZXRlcnMgZnJvbSBibGVuZCBzdGF0ZQogICAgICAgICAgICAg
b3V0cHV0RGVzY3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldLnVwZGF0ZShibGVuZFN0YXRlKTsK
LSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC5ibGVuZGFibGUpCisg
ICAgICAgICAgICBpZiAoIXJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQuYmxlbmRhYmxlKCkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBibGVuZGluZyBpZiB0aGUg
YXR0YWNobWVudCdzIHJlbmRlciB0YXJnZXQgZG9lc24ndCBzdXBwb3J0IGJsZW5kaW5nLgogICAg
ICAgICAgICAgICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5ibGVuZGlu
Z0VuYWJsZWQgPSBmYWxzZTsKQEAgLTc4MSwxMSArODAzLDExIEBAIHZvaWQgUmVuZGVyUGFzc0Rl
c2M6OnBvcHVsYXRlUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjKGNvbnN0IEJsZW5kRGVzYyAmYmxl
bmRTdGF0CiAgICAgICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5yZXNl
dCgpOwogICAgIH0KIAotICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmU7CisgICAgYXV0byBkZXB0aFRleHR1cmUgPSB0aGlzLT5kZXB0aEF0dGFjaG1l
bnQudGV4dHVyZSgpOwogICAgIG91dHB1dERlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxG
b3JtYXQgPQogICAgICAgICBkZXB0aFRleHR1cmUgPyBkZXB0aFRleHR1cmUtPnBpeGVsRm9ybWF0
KCkgOiBNVExQaXhlbEZvcm1hdEludmFsaWQ7CiAKLSAgICBhdXRvIHN0ZW5jaWxUZXh0dXJlID0g
dGhpcy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZTsKKyAgICBhdXRvIHN0ZW5jaWxUZXh0dXJl
ID0gdGhpcy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpOwogICAgIG91dHB1dERlc2NyaXB0
b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCA9CiAgICAgICAgIHN0ZW5jaWxUZXh0dXJl
ID8gc3RlbmNpbFRleHR1cmUtPnBpeGVsRm9ybWF0KCkgOiBNVExQaXhlbEZvcm1hdEludmFsaWQ7
CiB9CkBAIC04MzEsNDIgKzg1MywyMSBAQCBib29sIFJlbmRlclBhc3NEZXNjOjpvcGVyYXRvcj09
KGNvbnN0IFJlbmRlclBhc3NEZXNjICZvdGhlcikgY29uc3QKICAgICByZXR1cm4gZGVwdGhBdHRh
Y2htZW50ID09IG90aGVyLmRlcHRoQXR0YWNobWVudCAmJiBzdGVuY2lsQXR0YWNobWVudCA9PSBv
dGhlci5zdGVuY2lsQXR0YWNobWVudDsKIH0KIAotLy8gQ29udmVydCB0byBNZXRhbCBvYmplY3QK
LXZvaWQgUmVuZGVyUGFzc0Rlc2M6OmNvbnZlcnRUb01ldGFsRGVzYyhNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvciAqb2JqQ0Rlc2MpIGNvbnN0Ci17Ci0gICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKLSAg
ICB7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Db2xvckF0dGFjaG1lbnRz
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRvT2JqQyhjb2xvckF0dGFjaG1lbnRzW2ld
LCBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBmb3Ig
KHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1lbnRzOyBpIDwga01heFJlbmRlclRhcmdldHM7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSW5hY3RpdmUgcmVuZGVyIHRhcmdldAot
ICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlICAgICA9IG5p
bDsKLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubGV2ZWwgICAgICAg
PSAwOwotICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5zbGljZSAgICAg
ICA9IDA7Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmRlcHRoUGxh
bmUgID0gMDsKLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFj
dGlvbiAgPSBNVExMb2FkQWN0aW9uRG9udENhcmU7Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xv
ckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFRvT2JqQyhkZXB0aEF0dGFjaG1lbnQsIG9iakNEZXNjLmRlcHRo
QXR0YWNobWVudCk7Ci0gICAgICAgIFRvT2JqQyhzdGVuY2lsQXR0YWNobWVudCwgb2JqQ0Rlc2Mu
c3RlbmNpbEF0dGFjaG1lbnQpOwotICAgIH0KLX0KLQogLy8gUmVuZGVyUGlwZWxpbmVDYWNoZSBp
bXBsZW1lbnRhdGlvbgotUmVuZGVyUGlwZWxpbmVDYWNoZTo6UmVuZGVyUGlwZWxpbmVDYWNoZSgp
IDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxscHRyKSB7fQorUmVuZGVyUGlwZWxpbmVDYWNoZTo6
UmVuZGVyUGlwZWxpbmVDYWNoZSgpIDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxscHRyKSB7Cit9
CiAKIFJlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoCiAgICAgUmVuZGVy
UGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5ICpzcGVjaWFsaXplZFNoYWRlckZh
Y3RvcnkpCiAgICAgOiBtU3BlY2lhbGl6ZWRTaGFkZXJGYWN0b3J5KHNwZWNpYWxpemVkU2hhZGVy
RmFjdG9yeSkKLXt9Cit7CisKK30KIAogUmVuZGVyUGlwZWxpbmVDYWNoZTo6flJlbmRlclBpcGVs
aW5lQ2FjaGUoKSB7fQogCi12b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldFZlcnRleFNoYWRl
cihDb250ZXh0ICpjb250ZXh0LCBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQordm9pZCBSZW5kZXJQ
aXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIp
CiB7CiAgICAgbVZlcnRleFNoYWRlci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsKIApAQCAtODc5LDcg
Kzg4MCw4IEBAIHZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRl
eHQgKmNvbnRleHQsIGlkPE1UTEZ1bmN0aW9uPiBzaGFkCiAgICAgcmVjcmVhdGVQaXBlbGluZVN0
YXRlcyhjb250ZXh0KTsKIH0KIAotdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRGcmFnbWVu
dFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQordm9pZCBS
ZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlv
bj4gc2hhZGVyKQogewogICAgIG1GcmFnbWVudFNoYWRlci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsK
IApAQCAtOTI5LDEwICs5MzEsNiBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6aW5zZXJ0UmVuZGVyUGlwZWxpbgogewogICAgIEF1
dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBuZXdTdGF0ZSA9CiAgICAgICAg
IGNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgZGVzYywgaW5zZXJ0RGVmYXVsdEF0
dHJpYkxheW91dCk7Ci0gICAgaWYgKCFuZXdTdGF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgfQogCiAgICAgaW50IHRhYmxlSWR4ID0gaW5zZXJ0RGVmYXVsdEF0dHJpYkxheW91
dCA/IDEgOiAwOwogICAgIGF1dG8gcmUgICAgICA9IG1SZW5kZXJQaXBlbGluZVN0YXRlc1t0YWJs
ZUlkeF0uaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGRlc2MsIG5ld1N0YXRlKSk7CkBAIC05NDQsNiAr
OTQyLDcgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBp
cGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW4KICAgICByZXR1cm4gcmUuZmlyc3QtPnNl
Y29uZDsKIH0KIAorCiBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVu
ZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0ZSgKICAgICBDb250ZXh0
ICpjb250ZXh0LAogICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmb3JpZ2luYWxEZXNjLApA
QCAtOTU5LDcgKzk1OCw2IEBAIEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+
PiBSZW5kZXJQaXBlbGluZUNhY2hlOjpjcmVhdGVSZW5kZXJQaXBlbGluCiAgICAgICAgICAgICBk
ZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBmYWxzZTsKICAgICAgICAgICAgIGRlc2MuYWxw
aGFUb0NvdmVyYWdlRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICB9Ci0KICAgICAgICAgLy8gQ2hv
b3NlIHNoYWRlciB2YXJpYW50CiAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiB2ZXJ0U2hhZGVyID0g
bmlsOwogICAgICAgICBpZDxNVExGdW5jdGlvbj4gZnJhZ1NoYWRlciA9IG5pbDsKQEAgLTEwMDQs
NyArMTAwMiwyNSBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVu
ZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbgogCiAgICAgICAgIC8vIENvbnZl
cnQgdG8gT2JqZWN0aXZlLUMgZGVzYzoKICAgICAgICAgQXV0b09iakNPYmo8TVRMUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yPiBvYmpDRGVzYyA9IFRvT2JqQyh2ZXJ0U2hhZGVyLCBmcmFnU2hhZGVy
LCBkZXNjKTsKLQorICAgICAgICAvLyBWYWxpZGF0ZSBSZW5kZXIgUGlwZWxpbmUgU3RhdGU6Cisg
ICAgICAgIGlmIChEZXZpY2VIYXNNYXhpbXVtUmVuZGVyVGFyZ2V0U2l6ZShtZXRhbERldmljZSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIE5TVUludGVnZXIgbWF4U2l6ZSA9IEdldE1heFJlbmRl
clRhcmdldFNpemVGb3JEZXZpY2VJbkJ5dGVzKG1ldGFsRGV2aWNlKTsKKyAgICAgICAgICAgIE5T
VUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgQ29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Iob2JqQ0Rlc2MsIGNvbnRleHQs
IG1ldGFsRGV2aWNlKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOU1N0cmluZyAqZXJyb3JTdHJpbmcg
PQorICAgICAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMg
c2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhp
cyBkZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXJlbmRlclRhcmdldFNpemUsICh1
bnNpZ25lZCBsb25nKW1heFNpemVdOworICAgICAgICAgICAgICAgIE5TRXJyb3IgKmVyciA9IFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25FcnJvciIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6LTEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckluZm86QHtOU0xvY2Fs
aXplZERlc2NyaXB0aW9uS2V5IDogZXJyb3JTdHJpbmd9XTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19MSU5FX18p
OworICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICAgICAgLy8gU3BlY2lhbCBhdHRyaWJ1dGUgc2xvdCBmb3IgZGVmYXVsdCBhdHRyaWJ1dGUK
ICAgICAgICAgaWYgKGluc2VydERlZmF1bHRBdHRyaWJMYXlvdXQpCiAgICAgICAgIHsKQEAgLTEw
MzIsNiArMTA0OCw3IEBAIEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBS
ZW5kZXJQaXBlbGluZUNhY2hlOjpjcmVhdGVSZW5kZXJQaXBlbGluCiAgICAgfQogfQogCisKIHZv
aWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6cmVjcmVhdGVQaXBlbGluZVN0YXRlcyhDb250ZXh0ICpj
b250ZXh0KQogewogICAgIGZvciAoaW50IGhhc0RlZmF1bHRBdHRyaWIgPSAwOyBoYXNEZWZhdWx0
QXR0cmliIDw9IDE7ICsraGFzRGVmYXVsdEF0dHJpYikKQEAgLTEwNjIsNyArMTA3OSw3IEBAIHZv
aWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6Y2xlYXJQaXBlbGluZVN0YXRlcygpCiB9CiAKIC8vIFN0
YXRlQ2FjaGUgaW1wbGVtZW50YXRpb24KLVN0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoKSB7fQorU3Rh
dGVDYWNoZTo6U3RhdGVDYWNoZShjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzKSA6
IG1GZWF0dXJlcyhmZWF0dXJlcykge30KIAogU3RhdGVDYWNoZTo6flN0YXRlQ2FjaGUoKSB7fQog
CkBAIC0xMTEzLDYgKzExMzAsMTEgQEAgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4g
U3RhdGVDYWNoZTo6Z2V0U2FtcGxlclN0YXRlKGlkPE1UTERldmljZT4gbWV0YWwKICAgICAgICAg
aWYgKGl0ZSA9PSBtU2FtcGxlclN0YXRlcy5lbmQoKSkKICAgICAgICAgewogICAgICAgICAgICAg
QXV0b09iakNPYmo8TVRMU2FtcGxlckRlc2NyaXB0b3I+IG9iakNEZXNjID0gVG9PYmpDKGRlc2Mp
OworICAgICAgICAgICAgaWYgKCFtRmVhdHVyZXMuYWxsb3dSdW50aW1lU2FtcGxlckNvbXBhcmVN
b2RlLmVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUnVudGltZSBz
YW1wbGVyIGNvbXBhcmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byBuZXZlci4K
KyAgICAgICAgICAgICAgICBvYmpDRGVzYy5nZXQoKS5jb21wYXJlRnVuY3Rpb24gPSBNVExDb21w
YXJlRnVuY3Rpb25OZXZlcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIEF1dG9PYmpDUHRy
PGlkPE1UTFNhbXBsZXJTdGF0ZT4+IG5ld1N0YXRlID0KICAgICAgICAgICAgICAgICBbW21ldGFs
RGV2aWNlIG5ld1NhbXBsZXJTdGF0ZVdpdGhEZXNjcmlwdG9yOm9iakNEZXNjXSBBTkdMRV9NVExf
QVVUT1JFTEVBU0VdOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgKaW5kZXggYTg0YWM3
M2VhMDMzZmE2YmU0ZmYyNDE0NmQ1MGVjZGNkYmNjOGQ3MC4uNDkwMGVjYmJlOGViN2U1N2ZiZTY4
MzE2YjMxZTZlNWMxZjAxNzZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaApAQCAt
OTgsNiArOTgsMTAgQEAgQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IENyZWF0ZVNoYWRlckxp
YnJhcnlGcm9tQmluYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmluYXJ5U291
cmNlTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEF1dG9PYmpDUHRyPE5TRXJyb3IgKj4gKmVycm9yKTsKIAorYm9vbCBTdXBwb3J0
c0lPU0dQVUZhbWlseShpZDxNVExEZXZpY2U+IGRldmljZSwgdWludDhfdCBpT1NGYW1pbHkpOwor
Citib29sIFN1cHBvcnRzTWFjR1BVRmFtaWx5KGlkPE1UTERldmljZT4gZGV2aWNlLCB1aW50OF90
IG1hY0ZhbWlseSk7CisKIC8vIE5lZWQgdG8gZGVmaW5lIGludmFsaWQgZW51bSB2YWx1ZSBzaW5j
ZSBNZXRhbCBkb2Vzbid0IGRlZmluZSBpdAogY29uc3RleHByIE1UTFRleHR1cmVUeXBlIE1UTFRl
eHR1cmVUeXBlSW52YWxpZCA9IHN0YXRpY19jYXN0PE1UTFRleHR1cmVUeXBlPihOU1VJbnRlZ2Vy
TWF4KTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE1UTFRleHR1cmVUeXBlKSA9PSBzaXplb2YoTlNV
SW50ZWdlciksCkBAIC0xMzUsMTUgKzEzOSwzMCBAQCBNVExUZXh0dXJlU3dpenpsZSBHZXRUZXh0
dXJlU3dpenpsZShHTGVudW0gc3dpenpsZSk7CiAKIC8vIEdldCBjb2xvciB3cml0ZSBtYXNrIGZv
ciBhIHNwZWNpZmllZCBmb3JtYXQuIFNvbWUgZm9ybWF0cyBzdWNoIGFzIFJHQjU2NSBkb2Vzbid0
IGhhdmUgYWxwaGEKIC8vIGNoYW5uZWwgYnV0IGlzIGVtdWxhdGVkIGJ5IGEgUkdCQTggZm9ybWF0
LCB3ZSBuZWVkIHRvIGRpc2FibGUgYWxwaGEgd3JpdGUgZm9yIHRoaXMgZm9ybWF0LgotLy8gLSBp
c0Zvcm1hdEVtdWxhdGVkOiBpZiB0aGUgZm9ybWF0IGlzIGVtdWxhdGVkLCB0aGlzIHBvaW50ZXIg
d2lsbCBzdG9yZSBhIHRydWUgdmFsdWUuCi1NVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENv
bG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKmlzRm9ybWF0
RW11bGF0ZWQpOworLy8gLSBlbXVsYXRlZENoYW5uZWxzT3V0OiBpZiB0aGUgZm9ybWF0IGlzIGVt
dWxhdGVkLCB0aGlzIHBvaW50ZXIgd2lsbCBzdG9yZSBhIHRydWUgdmFsdWUuCitNVExDb2xvcldy
aXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
KmVtdWxhdGVkQ2hhbm5lbHNPdXQpOwogTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xv
cldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0KTsKIGJvb2wgSXNGb3JtYXRF
bXVsYXRlZChjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0KTsKIAorTlNVSW50ZWdlciBHZXRN
YXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhpZDxNVExEZXZpY2U+IGRldmljZSk7
CitOU1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExE
ZXZpY2U+IGRldmljZSk7Citib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKKwogLy8gVXNlZnVsIHRvIHNldCBjbGVhciBjb2xvciBmb3Ig
dGV4dHVyZSBvcmlnaW5hbGx5IGhhdmluZyBubyBhbHBoYSBpbiBHTCwgYnV0IGJhY2tlbmQncyBm
b3JtYXQKIC8vIGhhcyBhbHBoYSBjaGFubmVsLgogTVRMQ2xlYXJDb2xvciBFbXVsYXRlZEFscGhh
Q2xlYXJDb2xvcihNVExDbGVhckNvbG9yIGNvbG9yLCBNVExDb2xvcldyaXRlTWFzayBjb2xvck1h
c2spOwogCisKK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQYXNz
RGVzY3JpcHRvcihjb25zdCBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlkPE1UTERldmljZT4gZGV2aWNlKTsKKworTlNVSW50
ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcigK
KyAgICBjb25zdCBNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAg
Y29uc3QgQ29udGV4dCAqY29udGV4dCwKKyAgICBpZDxNVExEZXZpY2U+IGRldmljZSk7CisKIGds
OjpCb3ggTVRMUmVnaW9uVG9HTEJveChjb25zdCBNVExSZWdpb24gJm10bFJlZ2lvbik7CiAKIE1p
cG1hcE5hdGl2ZUxldmVsIEdldE5hdGl2ZU1pcExldmVsKEdMdWludCBsZXZlbCwgR0x1aW50IGJh
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KaW5kZXggMDc2ZTYwOThjM2EyNjMw
ZDllMWFmMDc4MGNlNjdhZTI2YTAyMWQ4Yy4uMjZlYTRkZWU3MzVhODM5MGZhMzkxYTMzZDE1ZjQ5
Mjg2NGQ5ZDc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tCkBAIC0xMCw5ICsx
MCwxMSBAQAogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLmgi
CiAKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KICNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25h
bHMuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9NZW1vcnlCdWZmZXIuaCIKKyNpbmNsdWRlICJjb21t
b24vc3lzdGVtX3V0aWxzLmgiCiAjaW5jbHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKQEAgLTI0LDYgKzI2LDgg
QEAgbmFtZXNwYWNlIHJ4CiBuYW1lc3BhY2UgbXRsCiB7CiAKK2NvbnN0ZXhwciBjaGFyIGtBTkdM
RVByaW50TVNMRW52W10gPSAiQU5HTEVfTUVUQUxfUFJJTlRfTVNMX0VOQUJMRSI7CisKIG5hbWVz
cGFjZQogewogCkBAIC0xMDMsMjQgKzEwNyw0MyBAQCBhbmdsZTo6UmVzdWx0IEluaXRpYWxpemVU
ZXh0dXJlQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW1hZ2VOYXRpdmVJbmRleCAmaW5kZXgp
CiB7CiAgICAgQVNTRVJUKHRleHR1cmUgJiYgdGV4dHVyZS0+dmFsaWQoKSk7Ci0gICAgLy8gT25s
eSBvbmUgc2xpY2UgY2FuIGJlIGluaXRpYWxpemVkIGF0IGEgdGltZS4KLSAgICBBU1NFUlQoIWlu
ZGV4LmlzTGF5ZXJlZCgpIHx8IGluZGV4LmdldFR5cGUoKSA9PSBnbDo6VGV4dHVyZVR5cGU6Ol8z
RCk7CiAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsK
IAorICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmFjdHVhbEFuZ2xlRm9ybWF0ICAgICAgICAgICA9
IHRleHR1cmVPYmpGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKICAgICBjb25zdCBnbDo6SW50
ZXJuYWxGb3JtYXQgJmludGVuZGVkSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlT2JqRm9ybWF0Lmlu
dGVuZGVkSW50ZXJuYWxGb3JtYXQoKTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IGluIG1hbnkgcGxhY2VzIHRvIGluaXRpYWxpemUgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0dXJlLgot
ICAgIC8vIFNvIGl0J3MgYmV0dGVyIHdlIGRvIHRoZSBpbml0aWFsIGNoZWNrIGhlcmUgaW5zdGVh
ZCBvZiBsZXQgdGhlIGNhbGxlcnMgZG8gaXQgdGhlbXNlbHZlczoKLSAgICBpZiAoIXRleHR1cmVP
YmpGb3JtYXQudmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9ybWF0LmNvbXByZXNzZWQpCisg
ICAgLy8gU28gaXQncyBiZXR0ZXIgd2UgZG8gdGhlIHNhbml0eSBjaGVjayBoZXJlIGluc3RlYWQg
b2YgbGV0IHRoZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CisgICAgaWYgKCF0ZXh0dXJlT2Jq
Rm9ybWF0LnZhbGlkKCkgfHwgYWN0dWFsQW5nbGVGb3JtYXQuaXNCbG9jayB8fCBhY3R1YWxBbmds
ZUZvcm1hdC5kZXB0aEJpdHMgPiAwIHx8CisgICAgICAgIGFjdHVhbEFuZ2xlRm9ybWF0LnN0ZW5j
aWxCaXRzID4gMCkKICAgICB7CisgICAgICAgIC8vIElmIGRzdCBmb3JtYXQgaXMgY29tcHJlc3Nl
ZCwgaWdub3JlLgogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiAgICAg
fQogCiAgICAgZ2w6OkV4dGVudHMgc2l6ZSA9IHRleHR1cmUtPnNpemUoaW5kZXgpOwogCi0gICAg
Ly8gSW50aWlhbGl6ZSB0aGUgY29udGVudCB0byBibGFjawotICAgIEdMaW50IGxheWVyLCBzdGFy
dERlcHRoOwotICAgIEdldFNsaWNlQW5kRGVwdGgoaW5kZXgsICZsYXllciwgJnN0YXJ0RGVwdGgp
OworICAgIC8vIEludGlhbGl6ZSB0aGUgY29udGVudCB0byBibGFjaworICAgIEdMaW50IGxheWVy
ICAgICAgPSAwOworICAgIEdMaW50IHN0YXJ0RGVwdGggPSAwOworICAgIGlmIChpbmRleC5oYXNM
YXllcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleC5nZXRUeXBlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpDdWJlTWFwOgorICAgICAgICAg
ICAgICAgIGxheWVyID0gaW5kZXguY3ViZU1hcEZhY2VJbmRleCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVyZVR5cGU6Ol8yREFycmF5OgorICAg
ICAgICAgICAgICAgIGxheWVyID0gaW5kZXguZ2V0TGF5ZXJJbmRleCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVyZVR5cGU6Ol8zRDoKKyAgICAg
ICAgICAgICAgICBzdGFydERlcHRoID0gaW5kZXguZ2V0TGF5ZXJJbmRleCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCiAg
ICAgaWYgKHRleHR1cmUtPmlzQ1BVQWNjZXNzaWJsZSgpICYmIGluZGV4LmdldFR5cGUoKSAhPSBn
bDo6VGV4dHVyZVR5cGU6Ol8yRE11bHRpc2FtcGxlICYmCiAgICAgICAgIGluZGV4LmdldFR5cGUo
KSAhPSBnbDo6VGV4dHVyZVR5cGU6Ol8yRE11bHRpc2FtcGxlQXJyYXkpCkBAIC0xMzYsNiArMTU5
LDEzIEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52YWxpZCgpIHx8IGludGVuZGVkSW50ZXJu
YWxGb3JtYXQuY29tcHJlc3NlZCB8fAorICAgICAgICAgICAgICAgIGludGVuZGVkSW50ZXJuYWxG
b3JtYXQuZGVwdGhCaXRzID4gMCB8fCBpbnRlbmRlZEludGVybmFsRm9ybWF0LnN0ZW5jaWxCaXRz
ID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBzb3VyY2UgZm9ybWF0
IGlzIGNvbXByZXNzZWQsIGlnbm9yZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6Q29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnN0IGFuZ2xl
OjpGb3JtYXQgJnNyY0Zvcm1hdCA9IGFuZ2xlOjpGb3JtYXQ6OkdldCgKICAgICAgICAgICAgICAg
ICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmFscGhhQml0cyA+IDAgPyBhbmdsZTo6Rm9ybWF0SUQ6
OlI4RzhCOEE4X1VOT1JNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhfVU5PUk0pOwpAQCAtMTYyLDEw
ICsxOTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgICAgICAgICAgICAgLy8gVXBsb2FkIHRvIHRl
eHR1cmUKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXBsYWNlMkRSZWdpb24oY29udGV4dE10
bCwgbXRsUm93UmVnaW9uLCBpbmRleC5nZXROYXRpdmVMZXZlbCgpLCBsYXllciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvblJvdy5kYXRhKCksIGRz
dFJvd1BpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnNpb25Sb3cuZGF0YSgpLCBkc3RSb3dQaXRjaCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICB9CisgICAgfSAgLy8gaWYgKHRleHR1cmUtPmlzQ1BVQWNjZXNzaWJsZSgpKQogICAgIGVs
c2UKICAgICB7CiAgICAgICAgIEFOR0xFX1RSWShJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BV
KGNvbnRleHQsIHRleHR1cmUsIHRleHR1cmVPYmpGb3JtYXQsIGluZGV4LApAQCAtMjEwLDcgKzI0
MCw3IEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlhbGl6ZVRleHR1cmVDb250ZW50c0dQVShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICBSZW5kZXJUYXJnZXRNdGwgdGVtcFJ0dDsKICAgICB0
ZW1wUnR0LnNldCh0ZXh0dXJlLCBpbmRleC5nZXROYXRpdmVMZXZlbCgpLCBzbGljZU9yRGVwdGgs
IHRleHR1cmVPYmpGb3JtYXQpOwogCi0gICAgaW50IGNsZWFyQWxwaGEgPSAwOworICAgIGZsb2F0
IGNsZWFyQWxwaGEgPSAwOwogICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC5pbnRlbmRlZEFuZ2xl
Rm9ybWF0KCkuYWxwaGFCaXRzKQogICAgIHsKICAgICAgICAgLy8gaWYgaW50ZW5kZWQgZm9ybWF0
IGRvZXNuJ3QgaGF2ZSBhbHBoYSwgc2V0IGl0IHRvIDEuMC4KQEAgLTI0MCwxMSArMjcwLDExIEBA
IGFuZ2xlOjpSZXN1bHQgSW5pdGlhbGl6ZVRleHR1cmVDb250ZW50c0dQVShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgQ2xlYXJDb2xvclZhbHVlIGNsZWFyQ29sb3I7CiAgICAg
ICAgIGlmIChhbmdsZUZvcm1hdC5pc1NpbnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgY2xl
YXJDb2xvci5zZXRBc0ludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKyAgICAgICAgICAgIGNsZWFy
Q29sb3Iuc2V0QXNJbnQoMCwgMCwgMCwgKGludCljbGVhckFscGhhKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChhbmdsZUZvcm1hdC5pc1VpbnQoKSkKICAgICAgICAgewotICAgICAgICAg
ICAgY2xlYXJDb2xvci5zZXRBc1VJbnQoMCwgMCwgMCwgY2xlYXJBbHBoYSk7CisgICAgICAgICAg
ICBjbGVhckNvbG9yLnNldEFzVUludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMjgzLDE3ICszMTMsMTcgQEAgYW5nbGU6
OlJlc3VsdCBJbml0aWFsaXplRGVwdGhTdGVuY2lsVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXgKICAgICBycERlc2Muc2FtcGxlQ291bnQgPSB0ZXh0dXJlLT5zYW1w
bGVzKCk7CiAgICAgaWYgKGFuZ2xlRm9ybWF0LmRlcHRoQml0cykKICAgICB7Ci0gICAgICAgIHJw
RGVzYy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSAgICAgID0gdGV4dHVyZTsKLSAgICAgICAgcnBE
ZXNjLmRlcHRoQXR0YWNobWVudC5sZXZlbCAgICAgICAgPSBsZXZlbDsKLSAgICAgICAgcnBEZXNj
LmRlcHRoQXR0YWNobWVudC5zbGljZU9yRGVwdGggPSBsYXllcjsKKyAgICAgICAgcnBEZXNjLmRl
cHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnRleHR1cmUgICAgICA9IHRleHR1cmU7CisgICAg
ICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5sZXZlbCAgICAgICAgPSBs
ZXZlbDsKKyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnNsaWNl
T3JEZXB0aCA9IGxheWVyOwogICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxvYWRBY3Rp
b24gICA9IE1UTExvYWRBY3Rpb25DbGVhcjsKICAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVu
dC5jbGVhckRlcHRoICAgPSAxLjA7CiAgICAgfQogICAgIGlmIChhbmdsZUZvcm1hdC5zdGVuY2ls
Qml0cykKICAgICB7Ci0gICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlICAg
ICAgPSB0ZXh0dXJlOwotICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQubGV2ZWwgICAg
ICAgID0gbGV2ZWw7Ci0gICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5zbGljZU9yRGVw
dGggPSBsYXllcjsKKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdl
dC0+dGV4dHVyZSAgICAgID0gdGV4dHVyZTsKKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnJlbmRlclRhcmdldC0+bGV2ZWwgICAgICAgID0gbGV2ZWw7CisgICAgICAgIHJwRGVzYy5z
dGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA9IGxheWVyOwogICAg
ICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlv
bkNsZWFyOwogICAgIH0KIApAQCAtNDU2LDYgKzQ4NiwzMCBAQCBBdXRvT2JqQ1B0cjxpZDxNVExM
aWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLAog
ICAgIHJldHVybiBDcmVhdGVTaGFkZXJMaWJyYXJ5KG1ldGFsRGV2aWNlLCBzb3VyY2UuY19zdHIo
KSwgc291cmNlLnNpemUoKSwgZXJyb3IpOwogfQogCisjaWYgMAorc3RhdGljIE1UTExhbmd1YWdl
VmVyc2lvbiBHZXRIaWdoZXN0U3VwcG9ydGVkTVNMVmVyc2lvbigpCit7CisgICAgLy8gaHR0cHM6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vbWV0YWwvbXRsbGFuZ3VhZ2V2ZXJz
aW9uP2xhbmd1YWdlPW9iamMKKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMS4w
LCAxNC4wLCAxNC4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMzsKKyAg
ICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMuMCkpCisgICAg
ICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24yXzI7CisgICAgaWYgKEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEyLjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3Vh
Z2VWZXJzaW9uMl8xOworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjEzLCAx
My4wLCAxMS4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMDsKKyAgICBp
ZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xMiwgMTMuMCwgMTAuMCkpCisgICAgICAg
IHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzI7CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlM
QUJMRV9YQ0koMTAuMTEsIDEzLjAsIDkuMCkpCisgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZl
cnNpb24xXzE7CisjICAgIGlmIFRBUkdFVF9PU19JT1MKKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZB
SUxBQkxFX0koOS4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjFfMDsKKyMg
ICAgZW5kaWYKKyAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOworfQorI2VuZGlmCisK
IEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5KGlkPE1UTERl
dmljZT4gbWV0YWxEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc291cmNlTGVuLApAQCAtNDY5LDggKzUyMywy
NSBAQCBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxN
VExEZXZpY2U+IG1ldGFsRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVXaGVuRG9uZTpO
T107CiAgICAgICAgIGF1dG8gb3B0aW9ucyAgICAgPSBbW1tNVExDb21waWxlT3B0aW9ucyBhbGxv
Y10gaW5pdF0gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKKyAgICAgICAgLy8gTWFyayBhbGwgcG9z
aXRpb25zIGluIFZTIHdpdGggYXR0cmlidXRlIGludmFyaWFudCBhcyBub24tb3B0aW1pemFibGUK
KyNpZiAoZGVmaW5lZChfX01BQ18xMV8wKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gX19NQUNfMTFfMCkgfHwgICAgICAgIFwKKyAgICAoZGVmaW5lZChfX0lQSE9ORV8xNF8w
KSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IF9fSVBIT05FXzE0XzApIHx8
IFwKKyAgICAoZGVmaW5lZChfX1RWT1NfMTRfMCkgJiYgX19UVl9PU19WRVJTSU9OX01BWF9BTExP
V0VEID49IF9fVFZPU18xNF8wKQorICAgICAgICBvcHRpb25zLnByZXNlcnZlSW52YXJpYW5jZSA9
IHRydWU7CisjZWxzZQorICAgICAgICAvLyBObyBwcmVzZXJ2ZUludmFyaWFuY2UgYXZhaWxhYmxl
IGNvbXBpbGluZyBmcm9tIHNvdXJjZSwgc28ganVzdCBkaXNhYmxlIGZhc3RtYXRoLgorICAgICAg
ICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIC8vIFRP
RE8oamN1bm5pbmdoYW0pOiB3b3JrYXJvdW5kIGZvciBpbnRlbCBkcml2ZXIgbm90IHByZXNlcnZp
bmcgaW52YXJpYW5jZSBvbiBhbGwgc2hhZGVycworICAgICAgICBpZiAoW21ldGFsRGV2aWNlLm5h
bWUgcmFuZ2VPZlN0cmluZzpAIkludGVsIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3B0aW9ucy5mYXN0TWF0aEVuYWJsZWQgPSBmYWxzZTsKKyAgICAg
ICAgfQogICAgICAgICBhdXRvIGxpYnJhcnkgPSBbbWV0YWxEZXZpY2UgbmV3TGlicmFyeVdpdGhT
b3VyY2U6bnNTb3VyY2Ugb3B0aW9uczpvcHRpb25zIGVycm9yOiZuc0Vycm9yXTsKLQorICAgICAg
ICBpZiAoYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtBTkdMRVByaW50TVNMRW52KVswXSA9PSAn
MScpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TTG9nKEAiJUBcbiIsIG5zU291cmNlKTsKKyAg
ICAgICAgfQogICAgICAgICBbbnNTb3VyY2UgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKIAogICAg
ICAgICAqZXJyb3JPdXQgPSBzdGQ6Om1vdmUobnNFcnJvcik7CkBAIC03NzIsMTUgKzg0MywxNSBA
QCBNVExUZXh0dXJlU3dpenpsZSBHZXRUZXh0dXJlU3dpenpsZShHTGVudW0gc3dpenpsZSkKIH0K
ICNlbmRpZgogCi1NVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNv
bnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKmlzRW11bGF0ZWRPdXQpCitNVExDb2xv
cldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZt
dGxGb3JtYXQsIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpCiB7CiAgICAgY29uc3QgYW5nbGU6
OkZvcm1hdCAmaW50ZW5kZWRGb3JtYXQgPSBtdGxGb3JtYXQuaW50ZW5kZWRBbmdsZUZvcm1hdCgp
OwogICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmFjdHVhbEZvcm1hdCAgID0gbXRsRm9ybWF0LmFj
dHVhbEFuZ2xlRm9ybWF0KCk7Ci0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkICAgICAgICAgICAg
ICAgPSBmYWxzZTsKKyAgICBib29sIGVtdWxhdGVkQ2hhbm5lbHMgICAgICAgICAgICAgICA9IGZh
bHNlOwogICAgIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yV3JpdGFibGVNYXNrID0gTVRMQ29sb3JX
cml0ZU1hc2tBbGw7CiAgICAgaWYgKGludGVuZGVkRm9ybWF0LmFscGhhQml0cyA9PSAwICYmIGFj
dHVhbEZvcm1hdC5hbHBoYUJpdHMpCiAgICAgewotICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0g
dHJ1ZTsKKyAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRydWU7CiAgICAgICAgIC8vIERpc2Fi
bGUgYWxwaGEgd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNr
ID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrQWxwaGEpOwogICAgIH0K
QEAgLTc4OCw0MSArODU5LDQxIEBAIE1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JX
cml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqCiAgICAgewogICAg
ICAgICBpZiAoaW50ZW5kZWRGb3JtYXQucmVkQml0cyA9PSAwICYmIGFjdHVhbEZvcm1hdC5yZWRC
aXRzKQogICAgICAgICB7Ci0gICAgICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVlOwogICAgICAgICAgICAgLy8gRGlzYWJs
ZSByZWQgd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFz
ayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFza1JlZCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LmdyZWVuQml0cyA9PSAwICYmIGFjdHVhbEZv
cm1hdC5ncmVlbkJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQg
PSB0cnVlOworICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRydWU7CiAgICAgICAgICAg
ICAvLyBEaXNhYmxlIGdyZWVuIHdyaXRlIHRvIHRoaXMgdGV4dHVyZQogICAgICAgICAgICAgY29s
b3JXcml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+TVRMQ29sb3JXcml0ZU1hc2tH
cmVlbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LmJsdWVCaXRzID09
IDAgJiYgYWN0dWFsRm9ybWF0LmJsdWVCaXRzKQogICAgICAgICB7Ci0gICAgICAgICAgICBpc0Zv
cm1hdEVtdWxhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVl
OwogICAgICAgICAgICAgLy8gRGlzYWJsZSBibHVlIHdyaXRlIHRvIHRoaXMgdGV4dHVyZQogICAg
ICAgICAgICAgY29sb3JXcml0YWJsZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+TVRMQ29s
b3JXcml0ZU1hc2tCbHVlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgICppc0VtdWxhdGVkT3V0
ID0gaXNGb3JtYXRFbXVsYXRlZDsKKyAgICAqZW11bGF0ZWRDaGFubmVsc091dCA9IGVtdWxhdGVk
Q2hhbm5lbHM7CiAKICAgICByZXR1cm4gY29sb3JXcml0YWJsZU1hc2s7CiB9CiAKIE1UTENvbG9y
V3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10
bEZvcm1hdCkKIHsKLSAgICAvLyBJZ25vcmUgaXNGb3JtYXRFbXVsYXRlZCBib29sZWFuIHZhbHVl
Ci0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOwotICAgIHJldHVybiBHZXRFbXVsYXRlZENvbG9y
V3JpdGVNYXNrKG10bEZvcm1hdCwgJmlzRm9ybWF0RW11bGF0ZWQpOworICAgIC8vIElnbm9yZSBl
bXVsYXRlZENoYW5uZWxzIGJvb2xlYW4gdmFsdWUKKyAgICBib29sIGVtdWxhdGVkQ2hhbm5lbHM7
CisgICAgcmV0dXJuIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmZW11bGF0
ZWRDaGFubmVscyk7CiB9CiAKIGJvb2wgSXNGb3JtYXRFbXVsYXRlZChjb25zdCBtdGw6OkZvcm1h
dCAmbXRsRm9ybWF0KQogewotICAgIGJvb2wgaXNGb3JtYXRFbXVsYXRlZDsKLSAgICAodm9pZClH
ZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwgJmlzRm9ybWF0RW11bGF0ZWQpOwot
ICAgIHJldHVybiBpc0Zvcm1hdEVtdWxhdGVkOworICAgIGJvb2wgZW11bGF0ZWRDaGFubmVsczsK
KyAgICAodm9pZClHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwgJmVtdWxhdGVk
Q2hhbm5lbHMpOworICAgIHJldHVybiBlbXVsYXRlZENoYW5uZWxzOwogfQogCiBNVExDbGVhckNv
bG9yIEVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29sb3IgY29sb3IsIE1UTENvbG9y
V3JpdGVNYXNrIGNvbG9yTWFzaykKQEAgLTgzNyw2ICs5MDgsMjkwIEBAIE1UTENsZWFyQ29sb3Ig
RW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRMQ29sb3JXcml0
ZU1hc2sgY29sCiAgICAgcmV0dXJuIHJlOwogfQogCitOU1VJbnRlZ2VyIEdldE1heFJlbmRlclRh
cmdldFNpemVGb3JEZXZpY2VJbkJ5dGVzKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIGlm
IChTdXBwb3J0c0lPU0dQVUZhbWlseShkZXZpY2UsIDQpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IDY0OworICAgIH0KKyAgICBlbHNlIGlmIChTdXBwb3J0c0lPU0dQVUZhbWlseShkZXZpY2UsIDIp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDMyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gMTY7CisgICAgfQorfQorCitOU1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVu
ZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBpZiAoU3Vw
cG9ydHNJT1NHUFVGYW1pbHkoZGV2aWNlLCAyKXx8U3VwcG9ydHNNYWNHUFVGYW1pbHkoZGV2aWNl
LCAxKSkKKyAgICB7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gNDsKKyAgICB9Cit9CisKK2Jvb2wgRGV2aWNlSGFzTWF4aW11bVJlbmRl
clRhcmdldFNpemUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgICAgIHJldHVybiBTdXBw
b3J0c0lPU0dQVUZhbWlseShkZXZpY2UsIDEpOworfQorCitib29sIFN1cHBvcnRzSU9TR1BVRmFt
aWx5KGlkPE1UTERldmljZT4gZGV2aWNlLCB1aW50OF90IGlPU0ZhbWlseSkKK3sKKyNpZiAoIVRB
UkdFVF9PU19JT1MgJiYgIVRBUkdFVF9PU19UVikgfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCisg
ICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyMgICAgaWYgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gMTMwMDAwKSB8fCAoX19UVl9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDEz
MDAwMCkKKyAgICAvLyBJZiBkZXZpY2Ugc3VwcG9ydHMgW01UTERldmljZSBzdXBwb3J0c0ZhbWls
eTpdLCB0aGVuIHVzZSBpdC4KKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koMTMuMCkp
CisgICAgeworICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OworICAgICAgICBzd2l0Y2ggKGlP
U0ZhbWlseSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAg
IGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlB
cHBsZTI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAg
ICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGUzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1U
TEdQVUZhbWlseUFwcGxlNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgNToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisjICAgICAgICBpZiBUQVJHRVRfT1NfSU9TCisgICAgICAgICAg
ICBjYXNlIDY6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU2Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworIyAgICAgICAgZW5kaWYKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBbZGV2aWNlIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07CisgICAgfSAgLy8gTWV0YWwgMi4y
CisjICAgIGVuZGlmICAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VECisKKyAgICAv
LyBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwg
dGhlbiB1c2UKKyAgICAvLyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgorICAgIE1U
TEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKKyAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKKyAgICB7Cisj
ICAgIGlmIFRBUkdFVF9PU19JT1MKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZmVhdHVy
ZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTFfdjE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVT
ZXRfaU9TX0dQVUZhbWlseTJfdjE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAz
OgorICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTNf
djE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgZmVh
dHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTRfdjE7CisgICAgICAgICAgICBi
cmVhazsKKyMgICAgICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTIw
MDAwCisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJl
U2V0X2lPU19HUFVGYW1pbHk1X3YxOworICAgICAgICAgICAgYnJlYWs7CisjICAgICAgICBlbmRp
ZiAgLy8gX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAorIyAgICBlbGlmIFRBUkdFVF9P
U19UVgorICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGZlYXR1
cmVTZXQgPSBNVExGZWF0dXJlU2V0X3R2T1NfR1BVRmFtaWx5MV92MTsKKyAgICAgICAgICAgIGJy
ZWFrOworIyAgICBlbmRpZiAgLy8gVEFSR0VUX09TX0lPUworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBbZGV2aWNlIHN1cHBv
cnRzRmVhdHVyZVNldDpmZWF0dXJlU2V0XTsKKyNlbmRpZiAgICAgIC8vIFRBUkdFVF9PU19JT1Mg
fHwgVEFSR0VUX09TX1RWCit9CisKK2Jvb2wgU3VwcG9ydHNNYWNHUFVGYW1pbHkoaWQ8TVRMRGV2
aWNlPiBkZXZpY2UsIHVpbnQ4X3QgbWFjRmFtaWx5KQoreworI2lmIFRBUkdFVF9PU19PU1ggfHwg
VEFSR0VUX09TX01BQ0NBVEFMWVNUCisjICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTUpCisgICAg
Ly8gSWYgZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1
c2UgaXQuCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQygxMC4xNSwgMTMuMCkpCisg
ICAgeworICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OworCisgICAgICAgIHN3aXRjaCAobWFj
RmFtaWx5KQorICAgICAgICB7CisjICAgICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlN
YWNDYXRhbHlzdDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5c3QyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworIyAgICAgICAgZWxzZSAgIC8vIFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQ
VUZhbWlseU1hYzE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyMgICAgICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6ZmFtaWx5XTsKKyAg
ICB9ICAvLyBNZXRhbCAyLjIKKyMgICAgZW5kaWYKKworICAgIC8vIElmIGRldmljZSBkb2Vzbid0
IHN1cHBvcnQgW01UTERldmljZSBzdXBwb3J0c0ZhbWlseTpdLCB0aGVuIHVzZQorICAgIC8vIFtN
VExEZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0Ol0uCisjICAgIGlmIFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworIyAgICBlbHNlCisg
ICAgTVRMRmVhdHVyZVNldCBmZWF0dXJlU2V0OworICAgIHN3aXRjaCAobWFjRmFtaWx5KQorICAg
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVT
ZXRfbWFjT1NfR1BVRmFtaWx5MV92MTsKKyAgICAgICAgICAgIGJyZWFrOworIyAgICAgICAgaWYg
ZGVmaW5lZChfX01BQ18xMF8xNCkKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgZmVhdHVy
ZVNldCA9IE1UTEZlYXR1cmVTZXRfbWFjT1NfR1BVRmFtaWx5Ml92MTsKKyAgICAgICAgICAgIGJy
ZWFrOworIyAgICAgICAgZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGZWF0dXJlU2V0OmZl
YXR1cmVTZXRdOworIyAgICBlbmRpZiAgLy8gVEFSR0VUX09TX01BQ0NBVEFMWVNUCisjZWxzZSAg
ICAgICAvLyAjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKworICAg
IHJldHVybiBmYWxzZTsKKworI2VuZGlmCit9CisKK3N0YXRpYyBOU1VJbnRlZ2VyIGdldE5leHRM
b2NhdGlvbkZvckZvcm1hdChjb25zdCBGb3JtYXRDYXBzICZjYXBzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRhcmdl
dFNpemUpCit7CisgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworICAgIHVpbnQ4X3QgYWxp
Z25tZW50ICAgICAgICAgPSBjYXBzLmFsaWdubWVudDsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0
ZXMgICAgID0gY2Fwcy5waXhlbEJ5dGVzOworICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlc01TQUEg
PSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworICAgIHBpeGVsQnl0ZXMgICAgICAgICAgICAgICAgPSBp
c01TQUEgPyBwaXhlbEJ5dGVzTVNBQSA6IHBpeGVsQnl0ZXM7CisKKyAgICBjdXJyZW50UmVuZGVy
VGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1lbnQgLSAxKSkg
JiB+KGFsaWdubWVudCAtIDEpOworICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplICs9IHBpeGVs
Qnl0ZXM7CisgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplOworfQorCitOU1VJbnRl
Z2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IoY29uc3Qg
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplID0gMDsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdl
dE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgewor
ICAgICAgICBNVExQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IGRlc2NyaXB0b3IuY29sb3JBdHRh
Y2htZW50c1tpXS50ZXh0dXJlLnBpeGVsRm9ybWF0OworICAgICAgICBib29sIGlzTXNhYSAgICAg
ICAgICAgICAgICA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLnNhbXBs
ZUNvdW50ID4gMTsKKyAgICAgICAgaWYgKHBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52
YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNv
bnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhwaXhlbEZvcm1hdCk7Cisg
ICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0
TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNp
emUpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVu
dC50ZXh0dXJlLnBpeGVsRm9ybWF0ID09CisgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFj
aG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIGJvb2wgaXNNc2FhID0g
ZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0ICE9
IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9y
bWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fw
cygKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBp
eGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKyAgICAg
ICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50
UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQg
IT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlz
TXNhYSAgICAgICAgICAgID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1w
bGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4
dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworICAgICAgICAg
ICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2Nh
dGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJl
LnBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1l
bnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBz
ICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZv
cm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAg
ICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRl
clRhcmdldFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVy
VGFyZ2V0U2l6ZTsKK30KK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IoCisgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yICpkZXNjcmlwdG9yLAorICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgaWQ8TVRM
RGV2aWNlPiBkZXZpY2UpCit7CisgICAgTlNVSW50ZWdlciBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6
ZSA9IDA7CisgICAgYm9vbCBpc01zYWEgICAgICAgICAgICAgICAgICAgICAgICA9IGRlc2NyaXB0
b3Iuc2FtcGxlQ291bnQgPiAxOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdldE1h
eE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgeworICAg
ICAgICBNVExSZW5kZXJQaXBlbGluZUNvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKmNvbG9yID0g
ZGVzY3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldOworICAgICAgICBpZiAoY29sb3IucGl4ZWxG
b3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKGNvbG9yLnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJU
YXJnZXRTaXplID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2Fw
cywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgPT0gZGVzY3JpcHRv
ci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQorICAgIHsKKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlk
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0KKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVz
Y3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50
UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9y
bWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNo
bWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAgICAgICAgICAgICAgY29udGV4
dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhBdHRh
Y2htZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUg
PQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEs
IGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVzY3Jp
cHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxp
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRl
c2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9y
Rm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKK30KKwogZ2w6OkJv
eCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQogewogICAgIHJl
dHVybiBnbDo6Qm94KHN0YXRpY19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi54KSwgc3RhdGlj
X2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLnkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRh
bCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL2JsaXQubWV0YWwKaW5kZXggNDI3MmM0ZjBhODQ4MDA5YTYzMmQ0YWViYzVmYWMxZDQ0
N2ZmYzJkNy4uMmE5YmI1ZGUzNzQ2YzJjZGFjZjMxZjJlYjEyYTQ5YTMzMTEzNzMxNCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L3NoYWRlcnMvYmxpdC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCkBAIC0zMzQsNyArMzM0LDcg
QEAga2VybmVsIHZvaWQgYmxpdFN0ZW5jaWxUb0J1ZmZlckNTKHVzaG9ydDIgZ0luZGljZXMgW1t0
aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAogfQogCiAvLyBGcmFnbWVudCdzIHN0ZW5jaWwgb3V0
cHV0IGlzIG9ubHkgYXZhaWxhYmxlIHNpbmNlIE1ldGFsIDIuMQotQEAjaWYgX19NRVRBTF9WRVJT
SU9OX18gPj0gMjEwCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCiAKIHN0cnVjdCBGcmFn
bWVudFN0ZW5jaWxPdXQKIHsKQEAgLTM5Nyw0ICszOTcsNCBAQCBmcmFnbWVudCBGcmFnbWVudERl
cHRoU3RlbmNpbE91dCBibGl0RGVwdGhTdGVuY2lsRlMoCiAgICAgICAgICAgICAgICAgICAgICAg
c3JjU3RlbmNpbFRleHR1cmVDdWJlLCBpbnB1dC50ZXhDb29yZHMsIG9wdGlvbnMuc3JjTGV2ZWws
IG9wdGlvbnMuc3JjTGF5ZXIpOwogICAgIHJldHVybiByZTsKIH0KLUBAI2VuZGlmICAvLyBfX01F
VEFMX1ZFUlNJT05fXyA+PSAyMTAKKyNlbmRpZiAgLy8gX19NRVRBTF9WRVJTSU9OX18gPj0gMjEw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCmluZGV4IDY4Yzc3NDUzNzJi
ZGZmZTlhOGY5NTk4MTliZWY5MzYxYWZmYWFjYTAuLmU2NjczYjVkYmRmMDFkNDY5OWI2ZmYyOWQy
ODYxMGJhYmUxNGNmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5o
CkBAIC0xMCw4ICsxMCw4IEBACiAKIC8vIGNsYW5nLWZvcm1hdCBvZmYKICNpZm5kZWYgU0tJUF9T
VERfSEVBREVSUwotQEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgotQEAjICAgIGluY2x1ZGUg
PG1ldGFsX3N0ZGxpYj4KKyMgICAgaW5jbHVkZSA8c2ltZC9zaW1kLmg+CisjICAgIGluY2x1ZGUg
PG1ldGFsX3N0ZGxpYj4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCmluZGV4IGRm
N2M0Yzk2MjVmMjc3MDEwYmIwNjEwOGEwZGUzMWVjNzk1ZWYyNTUuLjFiNDA4ZDg4OTI0YTAzYmM3
ZDBiZGFkNmZiYjQzYTY2OThjOTJlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCkBAIC00LDIyICs0LDIyIEBACiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KIC8vIGNvcHlfYnVmZmVyLm1ldGFsOiBpbXBsZW1lbnRz
IGNvbXB1dGUgc2hhZGVyIHRoYXQgY29weSBmb3JtYXR0ZWQgZGF0YSBmcm9tIGJ1ZmZlciB0byB0
ZXh0dXJlLAotLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisvLyBmcm9tIHRleHR1cmUg
dG8gYnVmZmVyIGFuZCBmcm9tIGJ1ZmZlciB0byBidWZmZXIuCiAvLyBOT1RFKGhxbGUpOiBUaGlz
IGZpbGUgaXMgYSBiaXQgaGFyZCB0byByZWFkIGJ1dCB0aGVyZSBhcmUgYSBsb3Qgb2YgcmVwZWF0
ZWQgd29ya3MsIGFuZCBpdCB3b3VsZAogLy8gYmUgYSBwYWluIHRvIGltcGxlbWVudCB3aXRob3V0
IHRoZSB1c2Ugb2YgbWFjcm9zLgogLy8KIAotQEAjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyNpbmNs
dWRlIDxtZXRhbF9wYWNrPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZm9ybWF0
X2F1dG9nZW4uaCIKIAogdXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOwogCi1jb25zdGFu
dCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMTApXV07Citjb25zdGFu
dCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLyogLS0t
LS0tLS0gY29weSBwaXhlbCBkYXRhIGJldHdlZW4gYnVmZmVyIGFuZCB0ZXh0dXJlIC0tLS0tLS0t
LSovCi1jb25zdGFudCBpbnQga0NvcHlUZXh0dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDIw
KV1dOworY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFudCgy
KV1dOwogY29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkQgICAgICA9IGtDb3B5VGV4dHVy
ZVR5cGUgPT0ga1RleHR1cmVUeXBlMkQ7CiBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5cGUy
REFycmF5ID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OwogY29uc3Rh
bnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkRNUyAgICA9IGtDb3B5VGV4dHVyZVR5cGUgPT0ga1Rl
eHR1cmVUeXBlMkRNdWx0aXNhbXBsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy9mb3JtYXRfYXV0b2dlbi5oCmluZGV4IGExN2VhZDM0YjhkOWU0YTRmNjIzOWMzOGZhNjlm
OGE4N2M0MDU2YzQuLmI5OTFlNDhmNmE3ZGZjNGQyOWU5NGM4YTljNjgwZDI3NWQwY2UzNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4uaApA
QCAtMjQ1LDUgKzI0NSw1IEBAIGVudW0KIAogfQogCi19ICAvLyBuYW1lc3BhY2UgbXRsX3NoYWRl
cgotfSAgLy8gbmFtZXNwYWNlIHJ4Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNlcy5t
ZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCmluZGV4IDJkODM1M2JhYWNkYjgyZTEzNDhkMTIw
NmFmNDMyZWZlNTBmOTIzNDYuLmVlZDYxZWE4M2JkNjM5OWMxNTNkMDJmN2U2NGJjOTllZThmMDRm
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2Vz
Lm1ldGFsCkBAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVbmFsaWduZWRV
MzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBpZHgpCiAgICAgcmV0
dXJuIGlucHV0MCB8IChpbnB1dDEgPDwgOCkgfCAoaW5wdXQyIDw8IDE2KSB8IChpbnB1dDMgPDwg
MjQpOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0aHJl
YWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRbW2J1ZmZl
cigxKV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpv
dXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1UxNih1aW50
IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1ZmZl
cigwKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAq
aW5wdXQgW1tidWZmZXIoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2
aWNlIHVzaG9ydCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZF
UlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKIApAQCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5lbCB2
b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlk
XV0sCiAgICAgfQogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYoCi0gICAgdWludCBp
ZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQgSW5kZXhDb252ZXJz
aW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFudCB1Y2hhciAqaW5w
dXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQp
IF1dLAotICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkW1sgYnVmZmVyKDEpLCBmdW5j
dGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCkgXV0sCi0gICAgZGV2aWNlIHVzaG9y
dCAqb3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNih1aW50
IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDAp
XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50
KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnQgdXNob3J0ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpXV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtbYnVm
ZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25z
KTsKIApAQCAtOTYsMTIgKzk3LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNigKICAg
ICBvdXRwdXRbaWR4XSA9IHZhbHVlOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMzIo
Ci0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQg
SW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFu
dCB1Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZm
ZXJVbmFsaWduZWQpIF1dLAotICAgIGNvbnN0YW50IHVpbnQgKmlucHV0QWxpZ25lZFtbIGJ1ZmZl
cigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpIF1dLAotICAgIGRl
dmljZSB1aW50ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4
VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1ti
dWZmZXIoMCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAq
aW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25f
Y29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWdu
ZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91dHB1dCBb
W2J1ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0
aW9ucyk7CiAKQEAgLTE0MCw5ICsxNDIsOSBAQCBrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2Vz
RnJvbUFycmF5KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKIAogaW5saW5l
IHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4
W1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5jdGlvbl9jb25zdGFudChr
VXNlU291cmNlQnVmZmVyVTE2KV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQg
dWludCAqaW5wdXRVMzJbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpXV0p
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOCBbW2Z1bmN0
aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291
cmNlQnVmZmVyVTE2KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWludCAq
aW5wdXRVMzIgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dKQogewog
ICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCiAgICAgewpAQCAtMTcwLDEzICsxNzIsMTUgQEAg
aW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAvLyBOT1RFKGhxbGUpOiB0cmlh
bmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBwcmltaXRpdmUgcmVz
dGFydC4KIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRpY2VzIGZyb20gYW4gaW5kaWNlcyBi
dWZmZXIuIGluZGV4Q291bnQgb3B0aW9ucyBpbmRpY2F0ZXMgbnVtYmVyCiAvLyBvZiBpbmRpY2Vz
IHN0YXJ0aW5nIGZyb20gdGhlIDNyZC4KLWtlcm5lbCB2b2lkIGdlblRyaUZhbkluZGljZXNGcm9t
RWxlbWVudHMoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAg
Y29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAg
ICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQo
a1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKLSAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1sg
YnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KSBdXSwKLSAg
ICBjb25zdGFudCB1aW50ICppbnB1dFUzMltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQo
a1VzZVNvdXJjZUJ1ZmZlclUzMikgXV0sCi0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVy
KDIpXV0pCitrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJvbUVsZW1lbnRzKHVpbnQgaWR4
IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtb
YnVmZmVyKDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0YW50IHVjaGFyICppbnB1dFU4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgp
XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVz
aG9ydCAqaW5wdXRVMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQgKmlu
cHV0VTMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVmZmVy
KDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtbYnVm
ZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25z
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0
YWwKaW5kZXggYjNhMzY3NWQ5ZTVkYjliNzM0OTI3YjkyY2E3ZGQ0NzEyN2U1OWY3Ny4uZjIzMzhi
MmY4MmUwNTU2MmE2OGY1NWY3ZmI1ZmRmODBmYjVmOWY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21p
cG1hcC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCkBAIC0yMyw4ICsyMyw2IEBAIHVz
aW5nIG5hbWVzcGFjZSByeDo6bXRsX3NoYWRlcjsKIAogI2RlZmluZSBURVhFTF9MT0FEKGluZGV4
KSBmbG9hdDQoc1JbaW5kZXhdLCBzR1tpbmRleF0sIHNCW2luZGV4XSwgc0FbaW5kZXhdKQogCi0j
ZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVhcih0ZXhl
bCkgOiB0ZXhlbCkKLQogI2RlZmluZSBPVVRfT0ZfQk9VTkRfQ0hFQ0soZWRnZVZhbHVlLCB0YXJn
ZXRWYWx1ZSwgY29uZGl0aW9uKSBcCiAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZhbHVlKSA6ICh0
YXJnZXRWYWx1ZSkKIApAQCAtMzIsNyArMzAsNiBAQCBzdHJ1Y3QgR2VuTWlwUGFyYW1zCiB7CiAg
ICAgdWludCBzcmNMZXZlbDsKICAgICB1aW50IG51bU1pcExldmVsc1RvR2VuOwotICAgIGJvb2wg
c1JHQjsKIH07CiAKIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBMZXZlbHNUb0dlbiA+IDEsIHRo
aXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dlciBvZiB0d28uIElmIGl0CkBA
IC00Niw4ICs0Myw4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4
IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlM2Q8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJl
KDQpXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJh
bXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKIHsKLSAgICB1c2hvcnQzIG1pcFNpemUgID0gdXNo
b3J0Myhkc3RNaXAxLmdldF93aWR0aCgpLCBkc3RNaXAxLmdldF9oZWlnaHQoKSwgZHN0TWlwMS5n
ZXRfZGVwdGgoKSk7Ci0gICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBTaXpl
LnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56Owor
ICAgIHVzaG9ydDMgbWlwU2l6ZSAgICA9IHVzaG9ydDMoZHN0TWlwMS5nZXRfd2lkdGgoKSwgZHN0
TWlwMS5nZXRfaGVpZ2h0KCksIGRzdE1pcDEuZ2V0X2RlcHRoKCkpOworICAgIGJvb2wgdmFsaWRU
aHJlYWQgICA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUu
eSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56OwogCiAgICAgY29uc3RleHByIHNhbXBsZXIgdGV4
dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9m
aWx0ZXI6OmxpbmVhcik7CiAKQEAgLTgzLDEwICs4MCw2IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRl
M0RNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCiAKICAgICAvLyBXcml0ZSB0byBz
aGFyZWQgbWVtb3J5Ci0gICAgaWYgKG9wdGlvbnMuc1JHQikKLSAgICB7Ci0gICAgICAgIHRleGVs
MSA9IGxpbmVhclRvU1JHQih0ZXhlbDEpOwotICAgIH0KICAgICBURVhFTF9TVE9SRShsSW5kZXgs
IHRleGVsMSk7CiAKICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVh
ZGdyb3VwKTsKQEAgLTExOSw3ICsxMTIsNyBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNETWlwbWFw
cyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAogCiAgICAgICAg
IHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUgKyB0
ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOwogCi0gICAgICAgIGRzdE1pcDIud3JpdGUo
VE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDEpOworICAgICAgICBkc3RNaXAyLndyaXRl
KHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CiAKICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1l
bW9yeQogICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CkBAIC0xNjUsNyArMTU4
LDcgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRf
aW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4
ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4
KSAvIDguMDsKIAotICAgICAgICBkc3RNaXAzLndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5k
aWNlcyA+PiAyKTsKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIp
OwogCiAgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKICAgICAgICAgVEVYRUxfU1RP
UkUobEluZGV4LCB0ZXhlbDEpOwpAQCAtMjExLDYgKzIwNCwzNDggQEAga2VybmVsIHZvaWQgZ2Vu
ZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBd
XSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0
ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKIAotICAgICAgICBk
c3RNaXA0LndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAzKTsKKyAgICAgICAg
ZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwora2VybmVs
IHZvaWQgZ2VuZXJhdGUyRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhy
ZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDIgZ0luZGlj
ZXMgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZTJkPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBk
c3RNaXAxIFtbdGV4dHVyZSgxKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4dHVyZSgyKV1dLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRl
PiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVyZSg0KV1dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRp
b25zIFtbYnVmZmVyKDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5z
cmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXBTaXplID0KKyAgICAgICAgdXNob3J0MihzcmNU
ZXh0dXJlLmdldF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZp
cnN0TWlwTGV2ZWwpKTsKKyAgICBib29sIHZhbGlkVGhyZWFkID0gZ0luZGljZXMueCA8IG1pcFNp
emUueCAmJiBnSW5kaWNlcy55IDwgbWlwU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIg
dGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1p
cF9maWx0ZXI6OmxpbmVhcik7CisKKyAgICAvLyBOT1RFKGhxbGUpOiBVc2Ugc2ltZF9ncm91cCBm
dW5jdGlvbiB3aGVuZXZlciBhdmFpbGFibGUuIFRoYXQgY291bGQgYXZvaWQgYmFycmllciB1c2Uu
CisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxp
Y3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFldOworICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9hdCBz
QltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fba1RocmVhZEdyb3Vw
WFldOworCisgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9hdDQg
dGV4ZWwxOworICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0MiB0ZXhD
b29yZHMgPSAoZmxvYXQyKGdJbmRpY2VzKSArIGZsb2F0MigwLjUsIDAuNSkpIC8gZmxvYXQyKG1p
cFNpemUpOworICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5zYW1wbGUodGV4
dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisgICAg
ICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAgICAgZHN0TWlwMS53cml0ZSh0ZXhlbDEsIGdJ
bmRpY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGlu
dmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZm
ZmY7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIFNlY29uZCBtaXAgbGV2
ZWwgLS0tLS0tLS0KKworICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICBURVhFTF9T
VE9SRShsSW5kZXgsIHRleGVsMSk7CisKKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFn
czo6bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgZXZlbgorICAgIGlm
ICgobEluZGV4ICYgMHgwOSkgPT0gMCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisgICAg
eworICAgICAgICBib29sMiBhdEVkZ2UgPSBnSW5kaWNlcyA9PSAobWlwU2l6ZSAtIHVzaG9ydDIo
MSkpOworCisgICAgICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBt
aXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4
ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwg
YXRFZGdlLngpOworICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0g
T1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyBrVGhyZWFkR3Jv
dXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0NCB0
ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArIChr
VGhyZWFkR3JvdXBYICsgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEg
KyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDIud3Jp
dGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAxKTsKKworICAgICAgICAvLyBXcml0ZSB0byBzaGFyZWQg
bWVtb3J5CisgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKyAgICB9CisKKyAg
ICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIC0tLS0gM3JkIG1pcCBsZXZlbCAtLS0tLS0tLQorICAgIHRo
cmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAgLy8g
SW5kZXggbXVzdCBiZSBtdWx0aXBsZSBvZiA0CisgICAgaWYgKChsSW5kZXggJiAweDFiKSA9PSAw
KSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKyAgICB7CisgICAgICAgIG1pcFNpemUgICAg
ICA9IG1heChtaXBTaXplID4+IDEsIHVzaG9ydDIoMSkpOworICAgICAgICBib29sMiBhdEVkZ2Ug
PSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKworICAgICAgICAv
LyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3
aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VO
RF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMiksIGF0RWRnZS54KTsKKyAgICAg
ICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisgICAgICAgICAgICBPVVRf
T0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIgKiBrVGhyZWFkR3Jv
dXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0NCB0
ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICgy
ICoga1RocmVhZEdyb3VwWCArIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RNaXAz
LndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMik7CisKKyAgICAgICAgLy8gV3JpdGUgdG8gc2hh
cmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisgICAgfQor
CisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMykKKyAgICB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDR0aCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAg
ICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKworICAg
IC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgOAorICAgIGlmICgobEluZGV4ICYgMHgzZikg
PT0gMCkgIC8vIChsSW5kZXggJiBiMTExMTExKSA9PSAwCisgICAgeworICAgICAgICBtaXBTaXpl
ICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKyAgICAgICAgYm9vbDIgYXRF
ZGdlID0gKGdJbmRpY2VzID4+IDIpID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisKKyAgICAg
ICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhl
bDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7Cisg
ICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDMgPQorICAgICAgICAgICAg
T1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVh
ZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBmbG9h
dDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXgg
KyAoNCAqIGtUaHJlYWRHcm91cFggKyA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwxID0g
KHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAgZHN0
TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmVUeXBlUiwgdHlwZW5hbWUgVGV4dHVyZVR5cGVXPgorc3RhdGljIF9f
YXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJu
ZEFuZE1vcmVNaXBtYXBzKAorICAgIHVpbnQgbEluZGV4LAorICAgIHVzaG9ydDMgZ0luZGljZXMs
CisgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDIs
CisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDMsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDQsCisg
ICAgdXNob3J0MiBtaXAxU2l6ZSwKKyAgICBmbG9hdDQgbWlwMVRleGVsLAorICAgIHRocmVhZGdy
b3VwIGZsb2F0ICpzUiwKKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0csCisgICAgdGhyZWFkZ3Jv
dXAgZmxvYXQgKnNCLAorICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwKKyAgICBjb25zdGFudCBH
ZW5NaXBQYXJhbXMgJm9wdGlvbnMpCit7CisgICAgdXNob3J0MiBtaXBTaXplID0gbWlwMVNpemU7
CisgICAgZmxvYXQ0IHRleGVsMSAgID0gbWlwMVRleGVsOworCisgICAgLy8gLS0tLSBTZWNvbmQg
bWlwIGxldmVsIC0tLS0tLS0tCisKKyAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAg
VEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworCisgICAgdGhyZWFkZ3JvdXBfYmFycmllciht
ZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIGV2ZW4K
KyAgICBpZiAoKGxJbmRleCAmIDB4MDkpID09IDApICAvLyAobEluZGV4ICYgYjAwMTAwMSkgPT0g
MAorICAgIHsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gZ0luZGljZXMueHkgPT0gKG1pcFNpemUg
LSB1c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUg
d2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAg
ZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobElu
ZGV4ICsgMSksIGF0RWRnZS54KTsKKyAgICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0
IHRleGVsMyA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsg
a1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAg
ICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChs
SW5kZXggKyAoa1RocmVhZEdyb3VwWCArIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEg
PSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBk
c3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMueHkgPj4gMSwgZ0luZGljZXMueik7CisKKyAg
ICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5k
ZXgsIHRleGVsMSk7CiAgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4g
PT0gMikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDNyZCBt
aXAgbGV2ZWwgLS0tLS0tLS0KKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVt
X3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAorICAg
IGlmICgobEluZGV4ICYgMHgxYikgPT0gMCkgIC8vIChsSW5kZXggJiBiMDExMDExKSA9PSAwCisg
ICAgeworICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEp
KTsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gKGdJbmRpY2VzLnh5ID4+IDEpID09IChtaXBTaXpl
IC0gdXNob3J0MigxKSk7CisKKyAgICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhl
IHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAg
IGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJ
bmRleCArIDIpLCBhdEVkZ2UueCk7CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDMgPQorICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxf
TE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8g
KHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRl
eGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoMiAqIGtUaHJlYWRHcm91cFggKyAyKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2Uu
eSk7CisKKyAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVs
NCkgLyA0LjA7CisKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzLnh5ID4+
IDIsIGdJbmRpY2VzLnopOworCisgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAg
ICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworICAgIH0KKworICAgIGlmIChvcHRp
b25zLm51bU1pcExldmVsc1RvR2VuID09IDMpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisgICAgdGhyZWFkZ3JvdXBf
YmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0
IGJlIG11bHRpcGxlIG9mIDgKKyAgICBpZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAobElu
ZGV4ICYgYjExMTExMSkgPT0gMAorICAgIHsKKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1p
cFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5kaWNl
cy54eSA+PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworCisgICAgICAgIC8vICh4KzEs
IHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1
YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNL
KHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0KSwgYXRFZGdlLngpOworICAgICAgICAvLyAo
eCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKyAgICAgICAgICAgIE9VVF9PRl9CT1VO
RF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCAqIGtUaHJlYWRHcm91cFgpLCBh
dEVkZ2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsNCA9
IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBrVGhy
ZWFkR3JvdXBYICsgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0
ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDQud3JpdGUo
dGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKyAgICB9Cit9CisKK2tlcm5l
bCB2b2lkIGdlbmVyYXRlQ3ViZU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5f
dGhyZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0MyBn
SW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNj
ZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0
ZXh0dXJlKDIpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVjdWJl
PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4g
ZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAgdWlu
dCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXAx
U2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmlyc3RNaXBMZXZl
bCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisgICAgYm9vbCB2YWxp
ZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXAxU2l6
ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6
bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAgICAv
LyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0NCBtaXAxVGV4ZWw7Cisg
ICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQyIHRleENvb3JkcyA9IChm
bG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBmbG9hdDIobWlwMVNpemUp
OworICAgICAgICBtaXAxVGV4ZWwgPSBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxlciwg
Y3ViZVRleGNvb3Jkcyh0ZXhDb29yZHMsIGludChnSW5kaWNlcy56KSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKworICAg
ICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAgICAgIGRzdE1pcDEud3JpdGUobWlwMVRleGVs
LCBnSW5kaWNlcy54eSwgZ0luZGljZXMueik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworICAgICAg
ICBsSW5kZXggPSAweGZmZmZmZmZmOworICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1pcExl
dmVsc1RvR2VuID09IDEpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorICAgIHRo
cmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9h
dCBzR1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdy
b3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKworICAg
IGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMs
IHNyY1RleHR1cmUsIGRzdE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNHLCBz
Qiwgc0EsIG9wdGlvbnMpOworfQorCitrZXJuZWwgdm9pZCBnZW5lcmF0ZTJEQXJyYXlNaXBtYXBz
KHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMgZ0luZGljZXMgW1t0aHJlYWRfcG9zaXRp
b25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
MmRfYXJyYXk8ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3cml0
ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZTJkX2FycmF5PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4
dHVyZSgyKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRf
YXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNj
ZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDAp
XV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7Cisg
ICAgdXNob3J0MiBtaXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lk
dGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7
CisgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRp
Y2VzLnkgPCBtaXAxU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBs
ZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6Omxp
bmVhcik7CisKKyAgICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0
NCBtaXAxVGV4ZWw7CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQy
IHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBm
bG9hdDIobWlwMVNpemUpOworICAgICAgICBtaXAxVGV4ZWwgPQorICAgICAgICAgICAgc3JjVGV4
dHVyZS5zYW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgZ0luZGljZXMueiwgbGV2ZWwo
b3B0aW9ucy5zcmNMZXZlbCkpOworCisgICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAg
ICAgZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUgYWxs
IHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZmZmY7CisgICAgfQor
CisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAgICB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2
b2lkIGJhbmsgY29uZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3Vw
WFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJl
YWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0Fba1RocmVhZEdyb3VwWFldOworCisgICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5kTW9y
ZU1pcG1hcHMobEluZGV4LCBnSW5kaWNlcywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlwMywg
ZHN0TWlwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXAx
U2l6ZSwgbWlwMVRleGVsLCBzUiwgc0csIHNCLCBzQSwgb3B0aW9ucyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hh
ZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAppbmRleCA5MDVjMTk2
MzUyNzU1ZTAxNDdhZTQyN2M0ODMwNGUwYzYzZmZkMmYxLi5hZDU4NjBmNzUzZjc1NzUxMzBmNmRi
NjMwNjYwMzQ3YTA4NTMyZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFk
ZXJzL3Zpc2liaWxpdHkubWV0YWwKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlICJjb21tb24u
aCIKIAotY29uc3RhbnQgYm9vbCBrQ29tYmluZVdpdGhFeGlzdGluZ1Jlc3VsdCBbW2Z1bmN0aW9u
X2NvbnN0YW50KDEwMDApXV07Citjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVz
dWx0IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLy8gQ29tYmluZSB0aGUgdmlzaWJpbGl0
eSByZXN1bHQgb2YgY3VycmVudCByZW5kZXIgcGFzcyB3aXRoIHByZXZpb3VzIHZhbHVlIGZyb20g
cHJldmlvdXMgcmVuZGVyCiAvLyBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAppbmRleCA3NTViZDYx
ZDdmMmQzMjMzODZlZWViZDc2OGQ5MmUyY2I5MWU2Y2ExLi43ZDVhYzU4NGIxNGRmMmQyMzQ5YmM0
YTk1YWY2OWZkOWViMTA1MWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKQEAgLTQyOCw4ICs0Mjgs
NiBAQCBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIEVHTF9EZXN0cm95Q29udGV4dChFR0xEaXNwbGF5
IGRweSwgRUdMQ29udGV4dCBjdHgpCiAKICAgICBpZiAoY29udGV4dFdhc0N1cnJlbnQpCiAgICAg
ewotICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQsIGRpc3BsYXktPm1ha2VDdXJy
ZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZWdsRGVzdHJveUNvbnRleHQiLCBHZXRDb250ZXh0SWZWYWxpZChkaXNw
bGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQodGhy
ZWFkLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTQ2Niw5ICs0NjQsOSBAQCBFR0xCb29sZWFuIEVH
TEFQSUVOVFJZIEVHTF9NYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwKICAgICAvLyBPbmx5IGNh
bGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Igc3VyZmFjZXMgaGF2ZSBjaGFuZ2VkLgog
ICAgIGlmIChwcmV2aW91c0RyYXcgIT0gZHJhd1N1cmZhY2UgfHwgcHJldmlvdXNSZWFkICE9IHJl
YWRTdXJmYWNlIHx8IHByZXZpb3VzQ29udGV4dCAhPSBjb250ZXh0KQogICAgIHsKLSAgICAgICAg
QU5HTEVfRUdMX1RSWV9SRVRVUk4oCi0gICAgICAgICAgICB0aHJlYWQsIGRpc3BsYXktPm1ha2VD
dXJyZW50KHByZXZpb3VzQ29udGV4dCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0
KSwKLSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZhbGlkKGRpc3Bs
YXksIGNvbnRleHQpLCBFR0xfRkFMU0UpOworICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0
aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPm1ha2VDdXJyZW50
KHRocmVhZCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IiwgR2V0Q29udGV4dElmVmFsaWQoZGlz
cGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CiAKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQo
dGhyZWFkLCBjb250ZXh0KTsKICAgICB9CkBAIC04MTgsOSArODE2LDkgQEAgRUdMQm9vbGVhbiBF
R0xBUElFTlRSWSBFR0xfUmVsZWFzZVRocmVhZCh2b2lkKQogICAgICAgICBpZiAocHJldmlvdXNE
cmF3ICE9IEVHTF9OT19TVVJGQUNFIHx8IHByZXZpb3VzUmVhZCAhPSBFR0xfTk9fU1VSRkFDRSB8
fAogICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTigKLSAgICAgICAgICAgICAgICB0
aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250ZXh0LCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyKSwKLSAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVh
ZCIsIG51bGxwdHIsIEVHTF9GQUxTRSk7CisgICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVS
Tih0aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Rpc3Bs
YXktPm1ha2VDdXJyZW50KHRocmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVhZCIsIG51bGxwdHIs
IEVHTF9GQUxTRSk7CiAgICAgICAgIH0KICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4odGhy
ZWFkLCBwcmV2aW91c0Rpc3BsYXktPnJlbGVhc2VUaHJlYWQoKSwgImVnbFJlbGVhc2VUaHJlYWQi
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREaXNwbGF5SWZWYWxpZChwcmV2aW91
c0Rpc3BsYXkpLCBFR0xfRkFMU0UpOwo=
</data>
<flag name="review"
          id="433447"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="433504"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>